{"version":3,"file":"vue-chat-system.cjs","sources":["../node_modules/element-plus/es/components/config-provider/src/constants.mjs","../node_modules/element-plus/es/hooks/use-namespace/index.mjs","../node_modules/@vue/shared/dist/shared.esm-bundler.js","../node_modules/lodash-es/_freeGlobal.js","../node_modules/lodash-es/_root.js","../node_modules/lodash-es/_Symbol.js","../node_modules/lodash-es/_getRawTag.js","../node_modules/lodash-es/_objectToString.js","../node_modules/lodash-es/_baseGetTag.js","../node_modules/lodash-es/isObjectLike.js","../node_modules/lodash-es/isSymbol.js","../node_modules/lodash-es/_arrayMap.js","../node_modules/lodash-es/isArray.js","../node_modules/lodash-es/_baseToString.js","../node_modules/lodash-es/_trimmedEndIndex.js","../node_modules/lodash-es/_baseTrim.js","../node_modules/lodash-es/isObject.js","../node_modules/lodash-es/toNumber.js","../node_modules/lodash-es/identity.js","../node_modules/lodash-es/isFunction.js","../node_modules/lodash-es/_coreJsData.js","../node_modules/lodash-es/_isMasked.js","../node_modules/lodash-es/_toSource.js","../node_modules/lodash-es/_baseIsNative.js","../node_modules/lodash-es/_getNative.js","../node_modules/lodash-es/_getValue.js","../node_modules/lodash-es/_WeakMap.js","../node_modules/lodash-es/_baseCreate.js","../node_modules/lodash-es/_shortOut.js","../node_modules/lodash-es/_defineProperty.js","../node_modules/lodash-es/_baseSetToString.js","../node_modules/lodash-es/constant.js","../node_modules/lodash-es/_setToString.js","../node_modules/lodash-es/_isIndex.js","../node_modules/lodash-es/_baseAssignValue.js","../node_modules/lodash-es/eq.js","../node_modules/lodash-es/_assignValue.js","../node_modules/lodash-es/_copyObject.js","../node_modules/lodash-es/_overRest.js","../node_modules/lodash-es/_apply.js","../node_modules/lodash-es/isLength.js","../node_modules/lodash-es/isArrayLike.js","../node_modules/lodash-es/_isPrototype.js","../node_modules/lodash-es/_baseIsArguments.js","../node_modules/lodash-es/isArguments.js","../node_modules/lodash-es/isBuffer.js","../node_modules/lodash-es/stubFalse.js","../node_modules/lodash-es/_baseIsTypedArray.js","../node_modules/lodash-es/_baseUnary.js","../node_modules/lodash-es/_nodeUtil.js","../node_modules/lodash-es/isTypedArray.js","../node_modules/lodash-es/_arrayLikeKeys.js","../node_modules/lodash-es/_baseTimes.js","../node_modules/lodash-es/_overArg.js","../node_modules/lodash-es/_nativeKeys.js","../node_modules/lodash-es/_baseKeys.js","../node_modules/lodash-es/keys.js","../node_modules/lodash-es/_baseKeysIn.js","../node_modules/lodash-es/_nativeKeysIn.js","../node_modules/lodash-es/keysIn.js","../node_modules/lodash-es/_isKey.js","../node_modules/lodash-es/_nativeCreate.js","../node_modules/lodash-es/_hashGet.js","../node_modules/lodash-es/_hashHas.js","../node_modules/lodash-es/_Hash.js","../node_modules/lodash-es/_assocIndexOf.js","../node_modules/lodash-es/_hashClear.js","../node_modules/lodash-es/_hashDelete.js","../node_modules/lodash-es/_hashSet.js","../node_modules/lodash-es/_listCacheDelete.js","../node_modules/lodash-es/_ListCache.js","../node_modules/lodash-es/_listCacheClear.js","../node_modules/lodash-es/_listCacheGet.js","../node_modules/lodash-es/_listCacheHas.js","../node_modules/lodash-es/_listCacheSet.js","../node_modules/lodash-es/_Map.js","../node_modules/lodash-es/_getMapData.js","../node_modules/lodash-es/_isKeyable.js","../node_modules/lodash-es/_MapCache.js","../node_modules/lodash-es/_mapCacheClear.js","../node_modules/lodash-es/_mapCacheDelete.js","../node_modules/lodash-es/_mapCacheGet.js","../node_modules/lodash-es/_mapCacheHas.js","../node_modules/lodash-es/_mapCacheSet.js","../node_modules/lodash-es/memoize.js","../node_modules/lodash-es/_stringToPath.js","../node_modules/lodash-es/_memoizeCapped.js","../node_modules/lodash-es/_castPath.js","../node_modules/lodash-es/toString.js","../node_modules/lodash-es/_toKey.js","../node_modules/lodash-es/_baseGet.js","../node_modules/lodash-es/get.js","../node_modules/lodash-es/_arrayPush.js","../node_modules/lodash-es/_isFlattenable.js","../node_modules/lodash-es/_baseFlatten.js","../node_modules/lodash-es/flatten.js","../node_modules/lodash-es/_flatRest.js","../node_modules/lodash-es/_getPrototype.js","../node_modules/lodash-es/isPlainObject.js","../node_modules/lodash-es/castArray.js","../node_modules/lodash-es/_Stack.js","../node_modules/lodash-es/_stackClear.js","../node_modules/lodash-es/_stackDelete.js","../node_modules/lodash-es/_stackGet.js","../node_modules/lodash-es/_stackHas.js","../node_modules/lodash-es/_stackSet.js","../node_modules/lodash-es/_cloneBuffer.js","../node_modules/lodash-es/stubArray.js","../node_modules/lodash-es/_getSymbols.js","../node_modules/lodash-es/_arrayFilter.js","../node_modules/lodash-es/_getSymbolsIn.js","../node_modules/lodash-es/_baseGetAllKeys.js","../node_modules/lodash-es/_getAllKeys.js","../node_modules/lodash-es/_getAllKeysIn.js","../node_modules/lodash-es/_DataView.js","../node_modules/lodash-es/_Promise.js","../node_modules/lodash-es/_Set.js","../node_modules/lodash-es/_getTag.js","../node_modules/lodash-es/_initCloneArray.js","../node_modules/lodash-es/_Uint8Array.js","../node_modules/lodash-es/_cloneArrayBuffer.js","../node_modules/lodash-es/_cloneRegExp.js","../node_modules/lodash-es/_cloneSymbol.js","../node_modules/lodash-es/_cloneTypedArray.js","../node_modules/lodash-es/_initCloneByTag.js","../node_modules/lodash-es/_cloneDataView.js","../node_modules/lodash-es/isMap.js","../node_modules/lodash-es/_baseIsMap.js","../node_modules/lodash-es/isSet.js","../node_modules/lodash-es/_baseIsSet.js","../node_modules/lodash-es/_baseClone.js","../node_modules/lodash-es/_arrayEach.js","../node_modules/lodash-es/_SetCache.js","../node_modules/lodash-es/_arraySome.js","../node_modules/lodash-es/_setCacheAdd.js","../node_modules/lodash-es/_setCacheHas.js","../node_modules/lodash-es/_equalArrays.js","../node_modules/lodash-es/_cacheHas.js","../node_modules/lodash-es/_mapToArray.js","../node_modules/lodash-es/_setToArray.js","../node_modules/lodash-es/_equalByTag.js","../node_modules/lodash-es/_equalObjects.js","../node_modules/lodash-es/_baseIsEqualDeep.js","../node_modules/lodash-es/_baseIsEqual.js","../node_modules/lodash-es/_isStrictComparable.js","../node_modules/lodash-es/_matchesStrictComparable.js","../node_modules/lodash-es/_baseMatches.js","../node_modules/lodash-es/_getMatchData.js","../node_modules/lodash-es/_baseIsMatch.js","../node_modules/lodash-es/_baseHasIn.js","../node_modules/lodash-es/hasIn.js","../node_modules/lodash-es/_hasPath.js","../node_modules/lodash-es/property.js","../node_modules/lodash-es/_baseProperty.js","../node_modules/lodash-es/_basePropertyDeep.js","../node_modules/lodash-es/_baseIteratee.js","../node_modules/lodash-es/_baseMatchesProperty.js","../node_modules/lodash-es/_baseFor.js","../node_modules/lodash-es/_createBaseFor.js","../node_modules/lodash-es/_baseEach.js","../node_modules/lodash-es/_createBaseEach.js","../node_modules/lodash-es/_baseForOwn.js","../node_modules/lodash-es/now.js","../node_modules/lodash-es/debounce.js","../node_modules/lodash-es/_assignMergeValue.js","../node_modules/lodash-es/_safeGet.js","../node_modules/lodash-es/_baseMergeDeep.js","../node_modules/lodash-es/isArrayLikeObject.js","../node_modules/lodash-es/_copyArray.js","../node_modules/lodash-es/toPlainObject.js","../node_modules/lodash-es/_initCloneObject.js","../node_modules/lodash-es/_baseMerge.js","../node_modules/lodash-es/_baseMap.js","../node_modules/lodash-es/flatMap.js","../node_modules/lodash-es/map.js","../node_modules/lodash-es/fromPairs.js","../node_modules/lodash-es/_parent.js","../node_modules/lodash-es/_baseSlice.js","../node_modules/lodash-es/isEqual.js","../node_modules/lodash-es/isNil.js","../node_modules/lodash-es/isNull.js","../node_modules/lodash-es/merge.js","../node_modules/lodash-es/_createAssigner.js","../node_modules/lodash-es/_baseRest.js","../node_modules/lodash-es/_isIterateeCall.js","../node_modules/lodash-es/_baseUnset.js","../node_modules/lodash-es/last.js","../node_modules/lodash-es/_customOmitClone.js","../node_modules/lodash-es/omit.js","../node_modules/lodash-es/_baseSet.js","../node_modules/lodash-es/_basePick.js","../node_modules/lodash-es/_basePickBy.js","../node_modules/lodash-es/pick.js","../node_modules/element-plus/es/utils/types.mjs","../node_modules/@vueuse/shared/index.mjs","../node_modules/@vueuse/core/index.mjs","../node_modules/element-plus/es/hooks/use-z-index/index.mjs","../node_modules/element-plus/es/locale/lang/en.mjs","../node_modules/element-plus/es/hooks/use-locale/index.mjs","../node_modules/element-plus/es/utils/vue/props/runtime.mjs","../node_modules/element-plus/es/hooks/use-size/index.mjs","../node_modules/element-plus/es/constants/size.mjs","../node_modules/element-plus/es/hooks/use-empty-values/index.mjs","../node_modules/element-plus/es/utils/objects.mjs","../node_modules/lodash-es/set.js","../node_modules/element-plus/es/components/config-provider/src/hooks/use-global-config.mjs","../node_modules/element-plus/es/constants/event.mjs","../node_modules/element-plus/es/_virtual/plugin-vue_export-helper.mjs","../node_modules/element-plus/es/utils/raf.mjs","../node_modules/element-plus/es/utils/dom/style.mjs","../node_modules/element-plus/es/utils/dom/scroll.mjs","../node_modules/element-plus/es/utils/error.mjs","../node_modules/element-plus/es/utils/vue/install.mjs","../node_modules/element-plus/es/components/icon/src/icon.mjs","../node_modules/element-plus/es/components/icon/src/icon2.mjs","../node_modules/element-plus/es/components/icon/index.mjs","../node_modules/element-plus/es/hooks/use-timeout/index.mjs","../node_modules/element-plus/es/hooks/use-delayed-toggle/index.mjs","../node_modules/@element-plus/icons-vue/dist/index.js","../node_modules/element-plus/es/utils/vue/icon.mjs","../node_modules/element-plus/es/utils/browser.mjs","../node_modules/element-plus/es/components/input/src/utils.mjs","../node_modules/element-plus/es/utils/typescript.mjs","../node_modules/element-plus/es/hooks/use-aria/index.mjs","../node_modules/element-plus/es/components/input/src/input.mjs","../node_modules/element-plus/es/hooks/use-attrs/index.mjs","../node_modules/element-plus/es/hooks/use-id/index.mjs","../node_modules/element-plus/es/components/form/src/constants.mjs","../node_modules/element-plus/es/components/form/src/hooks/use-form-item.mjs","../node_modules/element-plus/es/hooks/use-prop/index.mjs","../node_modules/element-plus/es/components/form/src/hooks/use-form-common-props.mjs","../node_modules/element-plus/es/utils/dom/aria.mjs","../node_modules/element-plus/es/components/input/src/input2.mjs","../node_modules/element-plus/es/hooks/use-focus-controller/index.mjs","../node_modules/element-plus/es/hooks/use-cursor/index.mjs","../node_modules/element-plus/es/hooks/use-composition/index.mjs","../node_modules/element-plus/es/utils/i18n.mjs","../node_modules/element-plus/es/components/input/index.mjs","../node_modules/element-plus/es/components/scrollbar/src/util.mjs","../node_modules/element-plus/es/components/scrollbar/src/constants.mjs","../node_modules/element-plus/es/components/scrollbar/src/thumb.mjs","../node_modules/element-plus/es/components/scrollbar/src/thumb2.mjs","../node_modules/element-plus/es/components/scrollbar/src/bar.mjs","../node_modules/element-plus/es/components/scrollbar/src/bar2.mjs","../node_modules/element-plus/es/components/scrollbar/src/scrollbar.mjs","../node_modules/element-plus/es/components/scrollbar/src/scrollbar2.mjs","../node_modules/element-plus/es/components/scrollbar/index.mjs","../node_modules/element-plus/es/components/popper/src/constants.mjs","../node_modules/element-plus/es/components/popper/src/popper2.mjs","../node_modules/element-plus/es/components/popper/src/popper.mjs","../node_modules/element-plus/es/components/popper/src/arrow2.mjs","../node_modules/element-plus/es/components/popper/src/trigger.mjs","../node_modules/element-plus/es/hooks/use-forward-ref/index.mjs","../node_modules/element-plus/es/components/slot/src/only-child.mjs","../node_modules/element-plus/es/components/popper/src/trigger2.mjs","../node_modules/element-plus/es/components/focus-trap/src/tokens.mjs","../node_modules/element-plus/es/components/focus-trap/src/utils.mjs","../node_modules/element-plus/es/constants/aria.mjs","../node_modules/element-plus/es/utils/dom/event.mjs","../node_modules/element-plus/es/hooks/use-escape-keydown/index.mjs","../node_modules/element-plus/es/components/focus-trap/src/focus-trap.mjs","../node_modules/@popperjs/core/dist/index.mjs","../node_modules/element-plus/es/components/popper/src/arrow.mjs","../node_modules/element-plus/es/components/popper/src/content.mjs","../node_modules/element-plus/es/components/popper/src/utils.mjs","../node_modules/element-plus/es/hooks/use-popper/index.mjs","../node_modules/element-plus/es/components/popper/src/composables/use-content.mjs","../node_modules/lodash-es/isUndefined.js","../node_modules/element-plus/es/components/popper/src/content2.mjs","../node_modules/element-plus/es/components/popper/src/composables/use-focus-trap.mjs","../node_modules/element-plus/es/components/popper/src/composables/use-content-dom.mjs","../node_modules/element-plus/es/components/popper/index.mjs","../node_modules/element-plus/es/components/tooltip/src/constants.mjs","../node_modules/element-plus/es/components/teleport/src/teleport.mjs","../node_modules/element-plus/es/components/tooltip/src/content.mjs","../node_modules/element-plus/es/components/tooltip/src/trigger.mjs","../node_modules/element-plus/es/hooks/use-model-toggle/index.mjs","../node_modules/element-plus/es/components/tooltip/src/tooltip.mjs","../node_modules/element-plus/es/components/tooltip/src/utils.mjs","../node_modules/element-plus/es/components/tooltip/src/trigger2.mjs","../node_modules/element-plus/es/components/teleport/index.mjs","../node_modules/element-plus/es/components/teleport/src/teleport2.mjs","../node_modules/element-plus/es/hooks/use-popper-container/index.mjs","../node_modules/element-plus/es/components/tooltip/src/content2.mjs","../node_modules/element-plus/es/utils/arrays.mjs","../node_modules/element-plus/es/components/tooltip/src/tooltip2.mjs","../node_modules/element-plus/es/components/tooltip/index.mjs","../node_modules/element-plus/es/components/badge/src/badge.mjs","../node_modules/element-plus/es/components/badge/src/badge2.mjs","../node_modules/element-plus/es/components/badge/index.mjs","../node_modules/element-plus/es/components/button/src/constants.mjs","../node_modules/element-plus/es/hooks/use-deprecated/index.mjs","../node_modules/element-plus/es/components/button/src/button.mjs","../node_modules/@ctrl/tinycolor/dist/module/util.js","../node_modules/@ctrl/tinycolor/dist/module/conversion.js","../node_modules/@ctrl/tinycolor/dist/module/css-color-names.js","../node_modules/@ctrl/tinycolor/dist/module/format-input.js","../node_modules/@ctrl/tinycolor/dist/module/index.js","../node_modules/element-plus/es/components/button/src/button-custom.mjs","../node_modules/element-plus/es/components/button/src/button2.mjs","../node_modules/element-plus/es/components/button/src/use-button.mjs","../node_modules/element-plus/es/components/button/src/button-group.mjs","../node_modules/element-plus/es/components/button/src/button-group2.mjs","../node_modules/element-plus/es/components/button/index.mjs","../node_modules/element-plus/es/utils/vue/vnode.mjs","../node_modules/element-plus/es/hooks/use-ordered-children/index.mjs","../node_modules/element-plus/es/components/checkbox/src/checkbox2.mjs","../node_modules/element-plus/es/components/checkbox/src/constants.mjs","../node_modules/element-plus/es/components/checkbox/src/composables/use-checkbox-event.mjs","../node_modules/element-plus/es/components/checkbox/src/composables/use-checkbox.mjs","../node_modules/element-plus/es/components/checkbox/src/composables/use-checkbox-model.mjs","../node_modules/element-plus/es/components/checkbox/src/composables/use-checkbox-status.mjs","../node_modules/element-plus/es/components/checkbox/src/composables/use-checkbox-disabled.mjs","../node_modules/element-plus/es/components/checkbox/src/checkbox.mjs","../node_modules/element-plus/es/components/checkbox/src/checkbox-button.mjs","../node_modules/element-plus/es/components/checkbox/src/checkbox-group.mjs","../node_modules/element-plus/es/components/checkbox/src/checkbox-group2.mjs","../node_modules/element-plus/es/components/checkbox/index.mjs","../node_modules/element-plus/es/directives/click-outside/index.mjs","../node_modules/element-plus/es/components/collapse/src/collapse.mjs","../node_modules/element-plus/es/components/collapse/src/constants.mjs","../node_modules/element-plus/es/components/collapse/src/collapse2.mjs","../node_modules/element-plus/es/components/collapse/src/use-collapse.mjs","../node_modules/element-plus/es/components/collapse-transition/src/collapse-transition.mjs","../node_modules/element-plus/es/components/collapse-transition/index.mjs","../node_modules/element-plus/es/components/collapse/src/collapse-item.mjs","../node_modules/element-plus/es/components/collapse/src/collapse-item2.mjs","../node_modules/element-plus/es/components/collapse/src/use-collapse-item.mjs","../node_modules/element-plus/es/components/collapse/index.mjs","../node_modules/element-plus/es/components/config-provider/src/config-provider-props.mjs","../node_modules/element-plus/es/components/config-provider/src/config-provider.mjs","../node_modules/element-plus/es/hooks/use-same-target/index.mjs","../node_modules/element-plus/es/components/overlay/src/overlay.mjs","../node_modules/element-plus/es/components/overlay/index.mjs","../node_modules/element-plus/es/components/dialog/src/constants.mjs","../node_modules/element-plus/es/components/dialog/src/dialog-content.mjs","../node_modules/element-plus/es/components/dialog/src/dialog.mjs","../node_modules/element-plus/es/hooks/use-lockscreen/index.mjs","../node_modules/element-plus/es/components/drawer/src/drawer.mjs","../node_modules/element-plus/es/components/drawer/src/composables/useResizable.mjs","../node_modules/element-plus/es/components/drawer/src/drawer2.mjs","../node_modules/element-plus/es/components/drawer/index.mjs","../node_modules/element-plus/es/components/dialog/src/use-dialog.mjs","../node_modules/element-plus/es/components/collection/src/collection.mjs","../node_modules/element-plus/es/components/collection/src/collection-item.mjs","../node_modules/element-plus/es/components/collection/src/collection2.mjs","../node_modules/element-plus/es/components/dropdown/src/dropdown.mjs","../node_modules/element-plus/es/utils/strings.mjs","../node_modules/element-plus/es/components/popover/src/popover.mjs","../node_modules/element-plus/es/components/popover/src/popover2.mjs","../node_modules/element-plus/es/components/popover/src/directive.mjs","../node_modules/element-plus/es/components/popover/index.mjs","../node_modules/element-plus/es/components/virtual-list/src/defaults.mjs","../node_modules/element-plus/es/components/virtual-list/src/hooks/use-wheel.mjs","../node_modules/element-plus/es/components/table/src/util.mjs","../node_modules/element-plus/es/components/table/src/store/watcher.mjs","../node_modules/element-plus/es/components/table/src/store/expand.mjs","../node_modules/element-plus/es/components/table/src/store/tree.mjs","../node_modules/element-plus/es/components/table/src/store/current.mjs","../node_modules/element-plus/es/components/table/src/store/index.mjs","../node_modules/element-plus/es/components/table/src/store/helper.mjs","../node_modules/element-plus/es/components/table/src/table-layout.mjs","../node_modules/element-plus/es/components/table/src/filter-panel.mjs","../node_modules/element-plus/es/components/table/src/layout-observer.mjs","../node_modules/element-plus/es/components/table/src/tokens.mjs","../node_modules/element-plus/es/components/table/src/table-header/utils-helper.mjs","../node_modules/element-plus/es/components/table/src/table-header/index.mjs","../node_modules/element-plus/es/components/table/src/table-header/event-helper.mjs","../node_modules/element-plus/es/components/table/src/table-header/style.helper.mjs","../node_modules/element-plus/es/components/table/src/table-body/events-helper.mjs","../node_modules/element-plus/es/components/table/src/table-body/td-wrapper.mjs","../node_modules/element-plus/es/components/table/src/table-body/render-helper.mjs","../node_modules/element-plus/es/components/table/src/table-body/styles-helper.mjs","../node_modules/element-plus/es/components/table/src/table-body/defaults.mjs","../node_modules/element-plus/es/components/table/src/table-body/index.mjs","../node_modules/element-plus/es/components/table/src/table-footer/style-helper.mjs","../node_modules/element-plus/es/components/table/src/table-footer/mapState-helper.mjs","../node_modules/element-plus/es/components/table/src/table-footer/index.mjs","../node_modules/element-plus/es/components/table/src/table/style-helper.mjs","../node_modules/element-plus/es/components/table/src/table/key-render-helper.mjs","../node_modules/element-plus/es/components/table/src/table/defaults.mjs","../node_modules/element-plus/es/components/table/src/h-helper.mjs","../node_modules/normalize-wheel-es/dist/index.mjs","../node_modules/element-plus/es/directives/mousewheel/index.mjs","../node_modules/element-plus/es/components/table/src/table.mjs","../node_modules/element-plus/es/components/table/src/table/utils-helper.mjs","../node_modules/element-plus/es/components/table/src/composables/use-scrollbar.mjs","../node_modules/element-plus/es/components/table/src/config.mjs","../node_modules/element-plus/es/components/table/src/table-column/watcher-helper.mjs","../node_modules/element-plus/es/components/table/src/table-column/render-helper.mjs","../node_modules/element-plus/es/components/table/src/table-column/defaults.mjs","../node_modules/element-plus/es/components/table/src/table-column/index.mjs","../node_modules/element-plus/es/components/table/index.mjs","../node_modules/element-plus/es/components/tabs/src/constants.mjs","../node_modules/element-plus/es/components/tabs/src/tab-bar.mjs","../node_modules/element-plus/es/components/tabs/src/tab-bar2.mjs","../node_modules/element-plus/es/components/tabs/src/tab-nav.mjs","../node_modules/lodash-es/clamp.js","../node_modules/lodash-es/_baseClamp.js","../node_modules/element-plus/es/components/tabs/src/tabs.mjs","../node_modules/element-plus/es/components/tabs/src/tab-pane.mjs","../node_modules/element-plus/es/components/tabs/src/tab-pane2.mjs","../node_modules/element-plus/es/components/tabs/index.mjs","../node_modules/element-plus/es/components/message/src/message.mjs","../node_modules/element-plus/es/components/message/src/instance.mjs","../node_modules/element-plus/es/components/message/src/message2.mjs","../node_modules/element-plus/es/components/message/src/method.mjs","../node_modules/element-plus/es/components/message/index.mjs","../node_modules/axios/lib/helpers/bind.js","../node_modules/axios/lib/utils.js","../node_modules/axios/lib/core/AxiosError.js","../node_modules/axios/lib/helpers/toFormData.js","../node_modules/axios/lib/helpers/AxiosURLSearchParams.js","../node_modules/axios/lib/helpers/buildURL.js","../node_modules/axios/lib/core/InterceptorManager.js","../node_modules/axios/lib/defaults/transitional.js","../node_modules/axios/lib/platform/browser/index.js","../node_modules/axios/lib/platform/browser/classes/URLSearchParams.js","../node_modules/axios/lib/platform/browser/classes/FormData.js","../node_modules/axios/lib/platform/browser/classes/Blob.js","../node_modules/axios/lib/platform/common/utils.js","../node_modules/axios/lib/platform/index.js","../node_modules/axios/lib/helpers/formDataToJSON.js","../node_modules/axios/lib/defaults/index.js","../node_modules/axios/lib/helpers/toURLEncodedForm.js","../node_modules/axios/lib/helpers/parseHeaders.js","../node_modules/axios/lib/core/AxiosHeaders.js","../node_modules/axios/lib/core/transformData.js","../node_modules/axios/lib/cancel/isCancel.js","../node_modules/axios/lib/cancel/CanceledError.js","../node_modules/axios/lib/core/settle.js","../node_modules/axios/lib/helpers/progressEventReducer.js","../node_modules/axios/lib/helpers/speedometer.js","../node_modules/axios/lib/helpers/throttle.js","../node_modules/axios/lib/helpers/isURLSameOrigin.js","../node_modules/axios/lib/helpers/cookies.js","../node_modules/axios/lib/core/buildFullPath.js","../node_modules/axios/lib/helpers/isAbsoluteURL.js","../node_modules/axios/lib/helpers/combineURLs.js","../node_modules/axios/lib/core/mergeConfig.js","../node_modules/axios/lib/helpers/resolveConfig.js","../node_modules/axios/lib/adapters/xhr.js","../node_modules/axios/lib/helpers/parseProtocol.js","../node_modules/axios/lib/helpers/composeSignals.js","../node_modules/axios/lib/helpers/trackStream.js","../node_modules/axios/lib/adapters/fetch.js","../node_modules/axios/lib/adapters/adapters.js","../node_modules/axios/lib/helpers/null.js","../node_modules/axios/lib/core/dispatchRequest.js","../node_modules/axios/lib/env/data.js","../node_modules/axios/lib/helpers/validator.js","../node_modules/axios/lib/core/Axios.js","../node_modules/axios/lib/helpers/HttpStatusCode.js","../node_modules/axios/lib/axios.js","../node_modules/axios/lib/cancel/CancelToken.js","../node_modules/axios/lib/helpers/spread.js","../node_modules/axios/lib/helpers/isAxiosError.js","../node_modules/axios/index.js","../node_modules/marked/lib/marked.esm.js","../node_modules/dompurify/dist/purify.es.mjs","../node_modules/highlight.js/lib/core.js","../node_modules/highlight.js/es/languages/javascript.js","../node_modules/highlight.js/es/languages/typescript.js","../node_modules/highlight.js/es/languages/python.js","../node_modules/highlight.js/es/languages/json.js","../node_modules/highlight.js/es/languages/sql.js","../node_modules/highlight.js/es/languages/xml.js","../node_modules/highlight.js/es/languages/css.js","../node_modules/highlight.js/es/languages/java.js","../node_modules/highlight.js/es/languages/cpp.js","../node_modules/highlight.js/es/languages/bash.js","../node_modules/highlight.js/es/languages/shell.js","../node_modules/highlight.js/es/languages/yaml.js","../node_modules/highlight.js/es/languages/markdown.js","../src/components/DBGPTRenderer.vue","../src/utils/auth.ts","../src/services/chatApi.ts","../src/services/dbgpt.ts","../src/views/IntegratedChat.vue","../src/views/ChatPage.vue","../src/stores/chatStore.ts","../src/composables/useChat.ts","../src/components/chat/ChatHeader.vue","../src/components/chat/UserIcon.vue","../src/components/chat/RobotIcon.vue","../node_modules/mdurl/lib/decode.mjs","../node_modules/mdurl/lib/encode.mjs","../node_modules/mdurl/lib/format.mjs","../node_modules/mdurl/lib/parse.mjs","../node_modules/uc.micro/properties/Any/regex.mjs","../node_modules/uc.micro/categories/Cc/regex.mjs","../node_modules/uc.micro/categories/P/regex.mjs","../node_modules/uc.micro/categories/S/regex.mjs","../node_modules/uc.micro/categories/Z/regex.mjs","../node_modules/uc.micro/categories/Cf/regex.mjs","../node_modules/entities/lib/esm/generated/decode-data-html.js","../node_modules/entities/lib/esm/generated/decode-data-xml.js","../node_modules/entities/lib/esm/decode_codepoint.js","../node_modules/entities/lib/esm/decode.js","../node_modules/markdown-it/lib/common/utils.mjs","../node_modules/markdown-it/lib/helpers/parse_link_destination.mjs","../node_modules/markdown-it/lib/helpers/parse_link_label.mjs","../node_modules/markdown-it/lib/helpers/parse_link_title.mjs","../node_modules/markdown-it/lib/renderer.mjs","../node_modules/markdown-it/lib/ruler.mjs","../node_modules/markdown-it/lib/token.mjs","../node_modules/markdown-it/lib/rules_core/state_core.mjs","../node_modules/markdown-it/lib/rules_core/normalize.mjs","../node_modules/markdown-it/lib/rules_core/linkify.mjs","../node_modules/markdown-it/lib/rules_core/replacements.mjs","../node_modules/markdown-it/lib/rules_core/smartquotes.mjs","../node_modules/markdown-it/lib/parser_core.mjs","../node_modules/markdown-it/lib/rules_core/block.mjs","../node_modules/markdown-it/lib/rules_core/inline.mjs","../node_modules/markdown-it/lib/rules_core/text_join.mjs","../node_modules/markdown-it/lib/rules_block/state_block.mjs","../node_modules/markdown-it/lib/rules_block/table.mjs","../node_modules/markdown-it/lib/rules_block/list.mjs","../node_modules/markdown-it/lib/common/html_blocks.mjs","../node_modules/markdown-it/lib/common/html_re.mjs","../node_modules/markdown-it/lib/rules_block/html_block.mjs","../node_modules/markdown-it/lib/parser_block.mjs","../node_modules/markdown-it/lib/rules_block/code.mjs","../node_modules/markdown-it/lib/rules_block/fence.mjs","../node_modules/markdown-it/lib/rules_block/blockquote.mjs","../node_modules/markdown-it/lib/rules_block/hr.mjs","../node_modules/markdown-it/lib/rules_block/reference.mjs","../node_modules/markdown-it/lib/rules_block/heading.mjs","../node_modules/markdown-it/lib/rules_block/lheading.mjs","../node_modules/markdown-it/lib/rules_block/paragraph.mjs","../node_modules/markdown-it/lib/rules_inline/state_inline.mjs","../node_modules/markdown-it/lib/rules_inline/text.mjs","../node_modules/markdown-it/lib/rules_inline/linkify.mjs","../node_modules/markdown-it/lib/rules_inline/escape.mjs","../node_modules/markdown-it/lib/rules_inline/strikethrough.mjs","../node_modules/markdown-it/lib/rules_inline/emphasis.mjs","../node_modules/markdown-it/lib/rules_inline/autolink.mjs","../node_modules/markdown-it/lib/rules_inline/entity.mjs","../node_modules/markdown-it/lib/rules_inline/balance_pairs.mjs","../node_modules/markdown-it/lib/parser_inline.mjs","../node_modules/markdown-it/lib/rules_inline/newline.mjs","../node_modules/markdown-it/lib/rules_inline/backticks.mjs","../node_modules/markdown-it/lib/rules_inline/link.mjs","../node_modules/markdown-it/lib/rules_inline/image.mjs","../node_modules/markdown-it/lib/rules_inline/html_inline.mjs","../node_modules/markdown-it/lib/rules_inline/fragments_join.mjs","../node_modules/linkify-it/index.mjs","../node_modules/linkify-it/lib/re.mjs","../node_modules/punycode.js/punycode.es6.js","../node_modules/markdown-it/lib/index.mjs","../node_modules/markdown-it/lib/presets/default.mjs","../node_modules/markdown-it/lib/presets/zero.mjs","../node_modules/markdown-it/lib/presets/commonmark.mjs","../node_modules/markdown-it-katex/node_modules/katex/src/ParseError.js","../node_modules/markdown-it-katex/node_modules/katex/src/Settings.js","../node_modules/markdown-it-katex/node_modules/katex/src/Style.js","../node_modules/markdown-it-katex/node_modules/katex/src/utils.js","../node_modules/markdown-it-katex/node_modules/katex/src/domTree.js","../node_modules/markdown-it-katex/node_modules/katex/src/fontMetrics.js","../node_modules/markdown-it-katex/node_modules/katex/src/fontMetricsData.js","../node_modules/markdown-it-katex/node_modules/katex/src/symbols.js","../node_modules/markdown-it-katex/node_modules/katex/src/buildCommon.js","../node_modules/markdown-it-katex/node_modules/katex/src/delimiter.js","../node_modules/markdown-it-katex/node_modules/katex/src/buildHTML.js","../node_modules/markdown-it-katex/node_modules/katex/src/mathMLTree.js","../node_modules/markdown-it-katex/node_modules/katex/src/buildMathML.js","../node_modules/markdown-it-katex/node_modules/katex/src/Options.js","../node_modules/markdown-it-katex/node_modules/katex/src/buildTree.js","../node_modules/markdown-it-katex/node_modules/katex/src/functions.js","../node_modules/markdown-it-katex/node_modules/katex/src/parseData.js","../node_modules/markdown-it-katex/node_modules/katex/src/environments.js","../node_modules/match-at/lib/matchAt.js","../node_modules/markdown-it-katex/node_modules/katex/src/Lexer.js","../node_modules/markdown-it-katex/node_modules/katex/src/Parser.js","../node_modules/markdown-it-katex/node_modules/katex/src/parseTree.js","../node_modules/markdown-it-katex/node_modules/katex/katex.js","../node_modules/markdown-it-katex/index.js","../node_modules/highlight.js/lib/index.js","../node_modules/highlight.js/lib/languages/1c.js","../node_modules/highlight.js/lib/languages/abnf.js","../node_modules/highlight.js/lib/languages/accesslog.js","../node_modules/highlight.js/lib/languages/actionscript.js","../node_modules/highlight.js/lib/languages/ada.js","../node_modules/highlight.js/lib/languages/angelscript.js","../node_modules/highlight.js/lib/languages/apache.js","../node_modules/highlight.js/lib/languages/applescript.js","../node_modules/highlight.js/lib/languages/arcade.js","../node_modules/highlight.js/lib/languages/arduino.js","../node_modules/highlight.js/lib/languages/armasm.js","../node_modules/highlight.js/lib/languages/xml.js","../node_modules/highlight.js/lib/languages/asciidoc.js","../node_modules/highlight.js/lib/languages/aspectj.js","../node_modules/highlight.js/lib/languages/autohotkey.js","../node_modules/highlight.js/lib/languages/autoit.js","../node_modules/highlight.js/lib/languages/avrasm.js","../node_modules/highlight.js/lib/languages/awk.js","../node_modules/highlight.js/lib/languages/axapta.js","../node_modules/highlight.js/lib/languages/bash.js","../node_modules/highlight.js/lib/languages/basic.js","../node_modules/highlight.js/lib/languages/bnf.js","../node_modules/highlight.js/lib/languages/brainfuck.js","../node_modules/highlight.js/lib/languages/c.js","../node_modules/highlight.js/lib/languages/cal.js","../node_modules/highlight.js/lib/languages/capnproto.js","../node_modules/highlight.js/lib/languages/ceylon.js","../node_modules/highlight.js/lib/languages/clean.js","../node_modules/highlight.js/lib/languages/clojure.js","../node_modules/highlight.js/lib/languages/clojure-repl.js","../node_modules/highlight.js/lib/languages/cmake.js","../node_modules/highlight.js/lib/languages/coffeescript.js","../node_modules/highlight.js/lib/languages/coq.js","../node_modules/highlight.js/lib/languages/cos.js","../node_modules/highlight.js/lib/languages/cpp.js","../node_modules/highlight.js/lib/languages/crmsh.js","../node_modules/highlight.js/lib/languages/crystal.js","../node_modules/highlight.js/lib/languages/csharp.js","../node_modules/highlight.js/lib/languages/csp.js","../node_modules/highlight.js/lib/languages/css.js","../node_modules/highlight.js/lib/languages/d.js","../node_modules/highlight.js/lib/languages/markdown.js","../node_modules/highlight.js/lib/languages/dart.js","../node_modules/highlight.js/lib/languages/delphi.js","../node_modules/highlight.js/lib/languages/diff.js","../node_modules/highlight.js/lib/languages/django.js","../node_modules/highlight.js/lib/languages/dns.js","../node_modules/highlight.js/lib/languages/dockerfile.js","../node_modules/highlight.js/lib/languages/dos.js","../node_modules/highlight.js/lib/languages/dsconfig.js","../node_modules/highlight.js/lib/languages/dts.js","../node_modules/highlight.js/lib/languages/dust.js","../node_modules/highlight.js/lib/languages/ebnf.js","../node_modules/highlight.js/lib/languages/elixir.js","../node_modules/highlight.js/lib/languages/elm.js","../node_modules/highlight.js/lib/languages/ruby.js","../node_modules/highlight.js/lib/languages/erb.js","../node_modules/highlight.js/lib/languages/erlang-repl.js","../node_modules/highlight.js/lib/languages/erlang.js","../node_modules/highlight.js/lib/languages/excel.js","../node_modules/highlight.js/lib/languages/fix.js","../node_modules/highlight.js/lib/languages/flix.js","../node_modules/highlight.js/lib/languages/fortran.js","../node_modules/highlight.js/lib/languages/fsharp.js","../node_modules/highlight.js/lib/languages/gams.js","../node_modules/highlight.js/lib/languages/gauss.js","../node_modules/highlight.js/lib/languages/gcode.js","../node_modules/highlight.js/lib/languages/gherkin.js","../node_modules/highlight.js/lib/languages/glsl.js","../node_modules/highlight.js/lib/languages/gml.js","../node_modules/highlight.js/lib/languages/go.js","../node_modules/highlight.js/lib/languages/golo.js","../node_modules/highlight.js/lib/languages/gradle.js","../node_modules/highlight.js/lib/languages/graphql.js","../node_modules/highlight.js/lib/languages/groovy.js","../node_modules/highlight.js/lib/languages/haml.js","../node_modules/highlight.js/lib/languages/handlebars.js","../node_modules/highlight.js/lib/languages/haskell.js","../node_modules/highlight.js/lib/languages/haxe.js","../node_modules/highlight.js/lib/languages/hsp.js","../node_modules/highlight.js/lib/languages/http.js","../node_modules/highlight.js/lib/languages/hy.js","../node_modules/highlight.js/lib/languages/inform7.js","../node_modules/highlight.js/lib/languages/ini.js","../node_modules/highlight.js/lib/languages/irpf90.js","../node_modules/highlight.js/lib/languages/isbl.js","../node_modules/highlight.js/lib/languages/java.js","../node_modules/highlight.js/lib/languages/javascript.js","../node_modules/highlight.js/lib/languages/jboss-cli.js","../node_modules/highlight.js/lib/languages/json.js","../node_modules/highlight.js/lib/languages/julia.js","../node_modules/highlight.js/lib/languages/julia-repl.js","../node_modules/highlight.js/lib/languages/kotlin.js","../node_modules/highlight.js/lib/languages/lasso.js","../node_modules/highlight.js/lib/languages/latex.js","../node_modules/highlight.js/lib/languages/ldif.js","../node_modules/highlight.js/lib/languages/leaf.js","../node_modules/highlight.js/lib/languages/less.js","../node_modules/highlight.js/lib/languages/lisp.js","../node_modules/highlight.js/lib/languages/livecodeserver.js","../node_modules/highlight.js/lib/languages/livescript.js","../node_modules/highlight.js/lib/languages/llvm.js","../node_modules/highlight.js/lib/languages/lsl.js","../node_modules/highlight.js/lib/languages/lua.js","../node_modules/highlight.js/lib/languages/makefile.js","../node_modules/highlight.js/lib/languages/mathematica.js","../node_modules/highlight.js/lib/languages/matlab.js","../node_modules/highlight.js/lib/languages/maxima.js","../node_modules/highlight.js/lib/languages/mel.js","../node_modules/highlight.js/lib/languages/mercury.js","../node_modules/highlight.js/lib/languages/mipsasm.js","../node_modules/highlight.js/lib/languages/mizar.js","../node_modules/highlight.js/lib/languages/perl.js","../node_modules/highlight.js/lib/languages/mojolicious.js","../node_modules/highlight.js/lib/languages/monkey.js","../node_modules/highlight.js/lib/languages/moonscript.js","../node_modules/highlight.js/lib/languages/n1ql.js","../node_modules/highlight.js/lib/languages/nestedtext.js","../node_modules/highlight.js/lib/languages/nginx.js","../node_modules/highlight.js/lib/languages/nim.js","../node_modules/highlight.js/lib/languages/nix.js","../node_modules/highlight.js/lib/languages/node-repl.js","../node_modules/highlight.js/lib/languages/nsis.js","../node_modules/highlight.js/lib/languages/objectivec.js","../node_modules/highlight.js/lib/languages/ocaml.js","../node_modules/highlight.js/lib/languages/openscad.js","../node_modules/highlight.js/lib/languages/oxygene.js","../node_modules/highlight.js/lib/languages/parser3.js","../node_modules/highlight.js/lib/languages/pf.js","../node_modules/highlight.js/lib/languages/pgsql.js","../node_modules/highlight.js/lib/languages/php.js","../node_modules/highlight.js/lib/languages/php-template.js","../node_modules/highlight.js/lib/languages/plaintext.js","../node_modules/highlight.js/lib/languages/pony.js","../node_modules/highlight.js/lib/languages/powershell.js","../node_modules/highlight.js/lib/languages/processing.js","../node_modules/highlight.js/lib/languages/profile.js","../node_modules/highlight.js/lib/languages/prolog.js","../node_modules/highlight.js/lib/languages/properties.js","../node_modules/highlight.js/lib/languages/protobuf.js","../node_modules/highlight.js/lib/languages/puppet.js","../node_modules/highlight.js/lib/languages/purebasic.js","../node_modules/highlight.js/lib/languages/python.js","../node_modules/highlight.js/lib/languages/python-repl.js","../node_modules/highlight.js/lib/languages/q.js","../node_modules/highlight.js/lib/languages/qml.js","../node_modules/highlight.js/lib/languages/r.js","../node_modules/highlight.js/lib/languages/reasonml.js","../node_modules/highlight.js/lib/languages/rib.js","../node_modules/highlight.js/lib/languages/roboconf.js","../node_modules/highlight.js/lib/languages/routeros.js","../node_modules/highlight.js/lib/languages/rsl.js","../node_modules/highlight.js/lib/languages/ruleslanguage.js","../node_modules/highlight.js/lib/languages/rust.js","../node_modules/highlight.js/lib/languages/sas.js","../node_modules/highlight.js/lib/languages/scala.js","../node_modules/highlight.js/lib/languages/scheme.js","../node_modules/highlight.js/lib/languages/scilab.js","../node_modules/highlight.js/lib/languages/scss.js","../node_modules/highlight.js/lib/languages/shell.js","../node_modules/highlight.js/lib/languages/smali.js","../node_modules/highlight.js/lib/languages/smalltalk.js","../node_modules/highlight.js/lib/languages/sml.js","../node_modules/highlight.js/lib/languages/sqf.js","../node_modules/highlight.js/lib/languages/sql.js","../node_modules/highlight.js/lib/languages/stan.js","../node_modules/highlight.js/lib/languages/stata.js","../node_modules/highlight.js/lib/languages/step21.js","../node_modules/highlight.js/lib/languages/stylus.js","../node_modules/highlight.js/lib/languages/subunit.js","../node_modules/highlight.js/lib/languages/swift.js","../node_modules/highlight.js/lib/languages/taggerscript.js","../node_modules/highlight.js/lib/languages/yaml.js","../node_modules/highlight.js/lib/languages/tap.js","../node_modules/highlight.js/lib/languages/tcl.js","../node_modules/highlight.js/lib/languages/thrift.js","../node_modules/highlight.js/lib/languages/tp.js","../node_modules/highlight.js/lib/languages/twig.js","../node_modules/highlight.js/lib/languages/typescript.js","../node_modules/highlight.js/lib/languages/vala.js","../node_modules/highlight.js/lib/languages/vbnet.js","../node_modules/highlight.js/lib/languages/vbscript.js","../node_modules/highlight.js/lib/languages/vbscript-html.js","../node_modules/highlight.js/lib/languages/verilog.js","../node_modules/highlight.js/lib/languages/vhdl.js","../node_modules/highlight.js/lib/languages/vim.js","../node_modules/highlight.js/lib/languages/wasm.js","../node_modules/highlight.js/lib/languages/wren.js","../node_modules/highlight.js/lib/languages/x86asm.js","../node_modules/highlight.js/lib/languages/xl.js","../node_modules/highlight.js/lib/languages/xquery.js","../node_modules/highlight.js/lib/languages/zephir.js","../node_modules/markdown-it-highlightjs/dist/core.js","../node_modules/markdown-it-highlightjs/dist/index.js","../node_modules/markdown-it-highlightjs/index.js","../src/components/chat/MarkdownRenderer.vue","../src/components/chat/ChatFeedback.vue","../src/components/icons/CopyIcon.vue","../src/components/icons/CodeIcon.vue","../src/components/chat/ChatContent.vue","../src/components/chat/ChatInputPanel.vue","../src/components/chat/MonacoEditor.vue","../src/components/icons/ArrowUpIcon.vue","../src/components/icons/ArrowDownIcon.vue","../src/components/chat/ChatContainer.vue","../src/components/chat/ChatSider.vue","../src/components/chat/ChatDefault.vue","../src/components/chat/DbEditor.vue","../src/components/ChartRenderer.vue","../src/components/AgentContentRenderer.vue","../src/components/chart/SimpleChartRenderer.vue","../src/components/chart/EChartsRenderer.vue","../node_modules/tslib/tslib.es6.mjs","../node_modules/@antv/g2plot/node_modules/@antv/util/esm/is-array-like.js","../node_modules/@antv/g2plot/node_modules/@antv/util/esm/contains.js","../node_modules/@antv/g2plot/node_modules/@antv/util/esm/filter.js","../node_modules/@antv/g2plot/node_modules/@antv/util/esm/is-type.js","../node_modules/@antv/g2plot/node_modules/@antv/util/esm/is-function.js","../node_modules/@antv/g2plot/node_modules/@antv/util/esm/is-nil.js","../node_modules/@antv/g2plot/node_modules/@antv/util/esm/is-array.js","../node_modules/@antv/g2plot/node_modules/@antv/util/esm/is-object.js","../node_modules/@antv/g2plot/node_modules/@antv/util/esm/each.js","../node_modules/@antv/g2plot/node_modules/@antv/util/esm/keys.js","../node_modules/@antv/g2plot/node_modules/@antv/util/esm/is-match.js","../node_modules/@antv/g2plot/node_modules/@antv/util/esm/is-object-like.js","../node_modules/@antv/g2plot/node_modules/@antv/util/esm/is-plain-object.js","../node_modules/@antv/g2plot/node_modules/@antv/util/esm/find.js","../node_modules/@antv/g2plot/node_modules/@antv/util/esm/find-index.js","../node_modules/@antv/g2plot/node_modules/@antv/util/esm/first-value.js","../node_modules/@antv/g2plot/node_modules/@antv/util/esm/flatten.js","../node_modules/@antv/g2plot/node_modules/@antv/util/esm/max.js","../node_modules/@antv/g2plot/node_modules/@antv/util/esm/min.js","../node_modules/@antv/g2plot/node_modules/@antv/util/esm/get-range.js","../node_modules/@antv/g2plot/node_modules/@antv/util/esm/pull-at.js","../node_modules/@antv/g2plot/node_modules/@antv/util/esm/reduce.js","../node_modules/@antv/g2plot/node_modules/@antv/util/esm/remove.js","../node_modules/@antv/g2plot/node_modules/@antv/util/esm/is-string.js","../node_modules/@antv/g2plot/node_modules/@antv/util/esm/uniq.js","../node_modules/@antv/g2plot/node_modules/@antv/util/esm/values-of-key.js","../node_modules/@antv/g2plot/node_modules/@antv/util/esm/head.js","../node_modules/@antv/g2plot/node_modules/@antv/util/esm/last.js","../node_modules/@antv/g2plot/node_modules/@antv/util/esm/every.js","../node_modules/@antv/g2plot/node_modules/@antv/util/esm/some.js","../node_modules/@antv/g2plot/node_modules/@antv/util/esm/group-by.js","../node_modules/@antv/g2plot/node_modules/@antv/util/esm/clamp.js","../node_modules/@antv/g2plot/node_modules/@antv/util/esm/fixed-base.js","../node_modules/@antv/g2plot/node_modules/@antv/util/esm/is-number.js","../node_modules/@antv/g2plot/node_modules/@antv/util/esm/is-number-equal.js","../node_modules/@antv/g2plot/node_modules/@antv/util/esm/max-by.js","../node_modules/@antv/g2plot/node_modules/@antv/util/esm/mod.js","../node_modules/@antv/g2plot/node_modules/@antv/util/esm/to-radian.js","../node_modules/@antv/g2plot/node_modules/@antv/util/esm/has.js","../node_modules/@antv/g2plot/node_modules/@antv/util/esm/values.js","../node_modules/@antv/g2plot/node_modules/@antv/util/esm/to-string.js","../node_modules/@antv/g2plot/node_modules/@antv/util/esm/lower-case.js","../node_modules/@antv/g2plot/node_modules/@antv/util/esm/substitute.js","../node_modules/@antv/g2plot/node_modules/@antv/util/esm/upper-first.js","../node_modules/@antv/g2plot/node_modules/@antv/util/esm/get-type.js","../node_modules/@antv/g2plot/node_modules/@antv/util/esm/is-boolean.js","../node_modules/@antv/g2plot/node_modules/@antv/util/esm/is-date.js","../node_modules/@antv/g2plot/node_modules/@antv/util/esm/is-prototype.js","../node_modules/@antv/g2plot/node_modules/@antv/util/esm/is-undefined.js","../node_modules/@antv/g2plot/node_modules/@antv/util/esm/is-element.js","../node_modules/@antv/g2plot/node_modules/@antv/util/esm/mix.js","../node_modules/@antv/g2plot/node_modules/@antv/util/esm/clone.js","../node_modules/@antv/g2plot/node_modules/@antv/util/esm/debounce.js","../node_modules/@antv/g2plot/node_modules/@antv/util/esm/memoize.js","../node_modules/@antv/g2plot/node_modules/@antv/util/esm/deep-mix.js","../node_modules/@antv/g2plot/node_modules/@antv/util/esm/index-of.js","../node_modules/@antv/g2plot/node_modules/@antv/util/esm/is-empty.js","../node_modules/@antv/g2plot/node_modules/@antv/util/esm/is-equal.js","../node_modules/@antv/g2plot/node_modules/@antv/util/esm/map.js","../node_modules/@antv/g2plot/node_modules/@antv/util/esm/get.js","../node_modules/@antv/g2plot/node_modules/@antv/util/esm/set.js","../node_modules/@antv/g2plot/node_modules/@antv/util/esm/pick.js","../node_modules/@antv/g2plot/node_modules/@antv/util/esm/omit.js","../node_modules/@antv/g2plot/node_modules/@antv/util/esm/throttle.js","../node_modules/@antv/g2plot/node_modules/@antv/util/esm/unique-id.js","../node_modules/@antv/g2plot/node_modules/@antv/util/esm/noop.js","../node_modules/@antv/g2plot/node_modules/@antv/util/esm/size.js","../node_modules/@antv/g2plot/node_modules/@antv/util/esm/measure-text-width.js","../node_modules/@antv/g2plot/node_modules/@antv/g2/esm/constant.js","../node_modules/@antv/dom-util/esm/create-dom.js","../node_modules/@antv/g2plot/node_modules/@antv/g2/esm/engine/index.js","../node_modules/@antv/dom-util/esm/add-event-listener.js","../node_modules/@antv/dom-util/esm/get-style.js","../node_modules/@antv/dom-util/esm/get-outer-height.js","../node_modules/@antv/dom-util/esm/get-height.js","../node_modules/@antv/dom-util/esm/get-outer-width.js","../node_modules/@antv/dom-util/esm/get-width.js","../node_modules/@antv/dom-util/esm/modify-css.js","../node_modules/@antv/g2plot/node_modules/@antv/g2/esm/util/dom.js","../node_modules/@antv/event-emitter/esm/index.js","../node_modules/@antv/g2plot/node_modules/@antv/g2/esm/base.js","../node_modules/@antv/g-base/node_modules/@antv/util/esm/is-array-like.js","../node_modules/@antv/g-base/node_modules/@antv/util/esm/is-type.js","../node_modules/@antv/g-base/node_modules/@antv/util/esm/is-function.js","../node_modules/@antv/g-base/node_modules/@antv/util/esm/is-nil.js","../node_modules/@antv/g-base/node_modules/@antv/util/esm/is-array.js","../node_modules/@antv/g-base/node_modules/@antv/util/esm/is-object.js","../node_modules/@antv/g-base/node_modules/@antv/util/esm/each.js","../node_modules/@antv/g-base/node_modules/@antv/util/esm/is-object-like.js","../node_modules/@antv/g-base/node_modules/@antv/util/esm/max.js","../node_modules/@antv/g-base/node_modules/@antv/util/esm/min.js","../node_modules/@antv/g-base/node_modules/@antv/util/esm/is-string.js","../node_modules/@antv/g-base/node_modules/@antv/util/esm/is-number.js","../node_modules/@antv/g-base/node_modules/@antv/util/esm/mod.js","../node_modules/@antv/g-base/node_modules/@antv/util/esm/to-radian.js","../node_modules/@antv/g-base/node_modules/@antv/util/esm/values.js","../node_modules/@antv/g-base/node_modules/@antv/util/esm/upper-first.js","../node_modules/@antv/g-base/node_modules/@antv/util/esm/to-string.js","../node_modules/@antv/g-base/node_modules/@antv/util/esm/mix.js","../node_modules/@antv/g-base/node_modules/@antv/util/esm/is-equal.js","../node_modules/@antv/g-base/node_modules/@antv/util/esm/unique-id.js","../node_modules/@antv/g-base/node_modules/@antv/util/esm/noop.js","../node_modules/@antv/g-base/node_modules/@antv/util/esm/measure-text-width.js","../node_modules/@antv/g-base/node_modules/@antv/util/esm/memoize.js","../node_modules/@antv/g-base/esm/util/path.js","../node_modules/@antv/g-base/esm/event/graph-event.js","../node_modules/@antv/g-base/esm/util/util.js","../node_modules/@antv/g-base/esm/abstract/base.js","../node_modules/detect-browser/es/index.js","../node_modules/gl-matrix/esm/common.js","../node_modules/gl-matrix/esm/vec3.js","../node_modules/gl-matrix/esm/mat3.js","../node_modules/gl-matrix/esm/vec2.js","../node_modules/@antv/matrix-util/esm/ext.js","../node_modules/@antv/g-base/esm/util/matrix.js","../node_modules/@antv/g-base/esm/abstract/element.js","../node_modules/@antv/g-base/esm/abstract/container.js","../node_modules/@antv/g-base/node_modules/d3-timer/src/timer.js","../node_modules/d3-color/src/define.js","../node_modules/d3-color/src/color.js","../node_modules/@antv/g-base/node_modules/d3-interpolate/src/constant.js","../node_modules/@antv/g-base/node_modules/d3-interpolate/src/color.js","../node_modules/@antv/g-base/node_modules/d3-interpolate/src/rgb.js","../node_modules/@antv/g-base/node_modules/d3-interpolate/src/numberArray.js","../node_modules/@antv/g-base/node_modules/d3-interpolate/src/array.js","../node_modules/@antv/g-base/node_modules/d3-interpolate/src/date.js","../node_modules/@antv/g-base/node_modules/d3-interpolate/src/number.js","../node_modules/@antv/g-base/node_modules/d3-interpolate/src/object.js","../node_modules/@antv/g-base/node_modules/d3-interpolate/src/string.js","../node_modules/@antv/g-base/node_modules/d3-interpolate/src/value.js","../node_modules/@antv/g-base/node_modules/d3-ease/src/quad.js","../node_modules/@antv/g-base/node_modules/d3-ease/src/cubic.js","../node_modules/@antv/g-base/node_modules/d3-ease/src/poly.js","../node_modules/@antv/g-base/node_modules/d3-ease/src/sin.js","../node_modules/@antv/g-base/node_modules/d3-ease/src/math.js","../node_modules/@antv/g-base/node_modules/d3-ease/src/exp.js","../node_modules/@antv/g-base/node_modules/d3-ease/src/circle.js","../node_modules/@antv/g-base/node_modules/d3-ease/src/bounce.js","../node_modules/@antv/g-base/node_modules/d3-ease/src/back.js","../node_modules/@antv/g-base/node_modules/d3-ease/src/elastic.js","../node_modules/@antv/g-base/node_modules/d3-ease/src/linear.js","../node_modules/@antv/g-base/esm/animate/register.js","../node_modules/@antv/g-base/esm/util/color.js","../node_modules/@antv/g-base/esm/animate/timeline.js","../node_modules/@antv/g-base/esm/event/event-contoller.js","../node_modules/@antv/g-base/esm/abstract/canvas.js","../node_modules/@antv/g-base/esm/abstract/group.js","../node_modules/@antv/g-base/esm/abstract/shape.js","../node_modules/@antv/g-base/esm/bbox/register.js","../node_modules/@antv/g-base/esm/bbox/rect.js","../node_modules/@antv/g-base/esm/bbox/circle.js","../node_modules/@antv/g-base/node_modules/@antv/g-math/esm/util.js","../node_modules/@antv/g-base/node_modules/@antv/g-math/esm/quadratic.js","../node_modules/@antv/g-base/node_modules/@antv/g-math/esm/cubic.js","../node_modules/@antv/g-base/node_modules/@antv/g-math/esm/arc.js","../node_modules/@antv/g-base/esm/bbox/util.js","../node_modules/@antv/g-base/esm/util/offscreen.js","../node_modules/@antv/g-base/esm/util/text.js","../node_modules/@antv/g-base/node_modules/@antv/path-util/esm/parse-path.js","../node_modules/@antv/g-base/node_modules/@antv/path-util/esm/get-arc-params.js","../node_modules/@antv/g-base/node_modules/@antv/path-util/esm/path-2-segments.js","../node_modules/@antv/g-base/esm/bbox/path.js","../node_modules/@antv/g-base/node_modules/@antv/util/esm/is-number-equal.js","../node_modules/@antv/g-base/esm/bbox/index.js","../node_modules/@antv/g-base/esm/bbox/polyline.js","../node_modules/@antv/g-base/esm/bbox/polygon.js","../node_modules/@antv/g-base/esm/bbox/text.js","../node_modules/@antv/g-base/esm/bbox/line.js","../node_modules/@antv/g-base/esm/bbox/ellipse.js","../node_modules/@antv/adjust/node_modules/@antv/util/esm/is-array-like.js","../node_modules/@antv/adjust/node_modules/@antv/util/esm/is-type.js","../node_modules/@antv/adjust/node_modules/@antv/util/esm/is-function.js","../node_modules/@antv/adjust/node_modules/@antv/util/esm/is-nil.js","../node_modules/@antv/adjust/node_modules/@antv/util/esm/is-array.js","../node_modules/@antv/adjust/node_modules/@antv/util/esm/is-object.js","../node_modules/@antv/adjust/node_modules/@antv/util/esm/each.js","../node_modules/@antv/adjust/node_modules/@antv/util/esm/flatten.js","../node_modules/@antv/adjust/node_modules/@antv/util/esm/is-string.js","../node_modules/@antv/adjust/node_modules/@antv/util/esm/values-of-key.js","../node_modules/@antv/adjust/node_modules/@antv/util/esm/group-by.js","../node_modules/@antv/adjust/node_modules/@antv/util/esm/group.js","../node_modules/@antv/adjust/node_modules/@antv/util/esm/group-to-map.js","../node_modules/@antv/adjust/node_modules/@antv/util/esm/values.js","../node_modules/@antv/adjust/node_modules/@antv/util/esm/clone.js","../node_modules/@antv/adjust/node_modules/@antv/util/esm/map.js","../node_modules/@antv/adjust/node_modules/@antv/util/esm/map-values.js","../node_modules/@antv/adjust/node_modules/@antv/util/esm/get.js","../node_modules/@antv/adjust/node_modules/@antv/util/esm/measure-text-width.js","../node_modules/@antv/adjust/node_modules/@antv/util/node_modules/tslib/tslib.es6.mjs","../node_modules/@antv/adjust/node_modules/@antv/util/esm/memoize.js","../node_modules/@antv/adjust/node_modules/@antv/util/esm/cache.js","../node_modules/@antv/adjust/esm/adjusts/adjust.js","../node_modules/@antv/adjust/esm/constant.js","../node_modules/@antv/adjust/node_modules/@antv/util/esm/mix.js","../node_modules/@antv/adjust/esm/factory.js","../node_modules/@antv/adjust/node_modules/tslib/tslib.es6.js","../node_modules/@antv/adjust/esm/adjusts/dodge.js","../node_modules/@antv/adjust/esm/adjusts/jitter.js","../node_modules/@antv/adjust/esm/adjusts/stack.js","../node_modules/@antv/adjust/esm/adjusts/symmetric.js","../node_modules/@antv/adjust/esm/index.js","../node_modules/@antv/attr/node_modules/@antv/util/esm/is-array-like.js","../node_modules/@antv/attr/node_modules/@antv/util/esm/filter.js","../node_modules/@antv/attr/node_modules/@antv/util/esm/is-type.js","../node_modules/@antv/attr/node_modules/@antv/util/esm/is-function.js","../node_modules/@antv/attr/node_modules/@antv/util/esm/is-nil.js","../node_modules/@antv/attr/node_modules/@antv/util/esm/is-array.js","../node_modules/@antv/attr/node_modules/@antv/util/esm/is-object.js","../node_modules/@antv/attr/node_modules/@antv/util/esm/each.js","../node_modules/@antv/attr/node_modules/@antv/util/esm/get-range.js","../node_modules/@antv/attr/node_modules/@antv/util/esm/max.js","../node_modules/@antv/attr/node_modules/@antv/util/esm/min.js","../node_modules/@antv/attr/node_modules/@antv/util/esm/is-string.js","../node_modules/@antv/attr/node_modules/@antv/util/esm/head.js","../node_modules/@antv/attr/node_modules/@antv/util/esm/last.js","../node_modules/@antv/attr/node_modules/@antv/util/esm/fixed-base.js","../node_modules/@antv/attr/node_modules/@antv/util/esm/is-number.js","../node_modules/@antv/attr/node_modules/@antv/util/esm/values.js","../node_modules/@antv/attr/node_modules/@antv/util/esm/get-type.js","../node_modules/@antv/attr/node_modules/@antv/util/esm/is-date.js","../node_modules/@antv/attr/node_modules/@antv/util/esm/is-prototype.js","../node_modules/@antv/attr/node_modules/@antv/util/esm/mix.js","../node_modules/@antv/attr/node_modules/@antv/util/esm/index-of.js","../node_modules/@antv/attr/node_modules/@antv/util/esm/is-empty.js","../node_modules/@antv/attr/node_modules/@antv/util/esm/map.js","../node_modules/@antv/attr/node_modules/@antv/util/esm/measure-text-width.js","../node_modules/@antv/attr/node_modules/@antv/util/esm/size.js","../node_modules/@antv/attr/node_modules/@antv/util/esm/memoize.js","../node_modules/@antv/attr/esm/attributes/base.js","../node_modules/@antv/color-util/node_modules/@antv/util/esm/is-type.js","../node_modules/@antv/color-util/node_modules/@antv/util/esm/is-function.js","../node_modules/@antv/color-util/node_modules/@antv/util/esm/each.js","../node_modules/@antv/color-util/node_modules/@antv/util/esm/is-array.js","../node_modules/@antv/color-util/node_modules/@antv/util/esm/is-object.js","../node_modules/@antv/color-util/node_modules/@antv/util/esm/is-string.js","../node_modules/@antv/color-util/node_modules/@antv/util/esm/values.js","../node_modules/@antv/color-util/node_modules/@antv/util/esm/memoize.js","../node_modules/@antv/color-util/node_modules/@antv/util/esm/map.js","../node_modules/@antv/color-util/node_modules/@antv/util/esm/measure-text-width.js","../node_modules/@antv/color-util/node_modules/@antv/util/esm/is-array-like.js","../node_modules/@antv/color-util/esm/index.js","../node_modules/@antv/attr/esm/attributes/color.js","../node_modules/@antv/attr/esm/attributes/opacity.js","../node_modules/@antv/attr/esm/attributes/position.js","../node_modules/@antv/attr/esm/attributes/shape.js","../node_modules/@antv/attr/esm/attributes/size.js","../node_modules/@antv/attr/node_modules/@antv/scale/esm/tick-method/register.js","../node_modules/@antv/attr/node_modules/@antv/scale/esm/base.js","../node_modules/@antv/attr/node_modules/@antv/scale/esm/category/base.js","../node_modules/fecha/lib/fecha.js","../node_modules/@antv/attr/node_modules/@antv/scale/esm/util/time.js","../node_modules/@antv/attr/node_modules/@antv/scale/esm/util/bisector.js","../node_modules/@antv/attr/node_modules/@antv/scale/esm/category/time.js","../node_modules/@antv/attr/node_modules/@antv/scale/esm/continuous/base.js","../node_modules/@antv/attr/node_modules/@antv/scale/esm/continuous/linear.js","../node_modules/@antv/attr/node_modules/@antv/scale/esm/util/math.js","../node_modules/@antv/attr/node_modules/@antv/scale/esm/continuous/log.js","../node_modules/@antv/attr/node_modules/@antv/scale/esm/continuous/pow.js","../node_modules/@antv/attr/node_modules/@antv/scale/esm/continuous/time.js","../node_modules/@antv/attr/node_modules/@antv/scale/esm/continuous/quantize.js","../node_modules/@antv/attr/node_modules/@antv/scale/esm/continuous/quantile.js","../node_modules/@antv/attr/node_modules/@antv/scale/esm/factory.js","../node_modules/@antv/attr/node_modules/@antv/scale/esm/identity/index.js","../node_modules/@antv/attr/node_modules/@antv/scale/esm/tick-method/cat.js","../node_modules/@antv/attr/node_modules/@antv/scale/esm/util/d3-linear.js","../node_modules/@antv/attr/node_modules/@antv/scale/esm/util/interval.js","../node_modules/@antv/attr/node_modules/@antv/scale/esm/util/strict-limit.js","../node_modules/@antv/attr/node_modules/@antv/scale/esm/util/pretty-number.js","../node_modules/@antv/attr/node_modules/@antv/scale/esm/util/extended.js","../node_modules/@antv/attr/node_modules/@antv/scale/esm/util/pretty.js","../node_modules/@antv/attr/node_modules/@antv/scale/esm/tick-method/quantile.js","../node_modules/@antv/attr/node_modules/@antv/scale/esm/tick-method/time-pretty.js","../node_modules/@antv/attr/node_modules/@antv/scale/esm/tick-method/index.js","../node_modules/@antv/attr/node_modules/@antv/scale/esm/tick-method/time-cat.js","../node_modules/@antv/attr/node_modules/@antv/scale/esm/tick-method/linear.js","../node_modules/@antv/attr/node_modules/@antv/scale/esm/tick-method/r-prettry.js","../node_modules/@antv/attr/node_modules/@antv/scale/esm/tick-method/time.js","../node_modules/@antv/attr/node_modules/@antv/scale/esm/tick-method/log.js","../node_modules/@antv/attr/node_modules/@antv/scale/esm/tick-method/pow.js","../node_modules/@antv/attr/node_modules/@antv/scale/esm/tick-method/d3-linear.js","../node_modules/@antv/attr/node_modules/@antv/scale/esm/index.js","../node_modules/@antv/attr/esm/factory.js","../node_modules/@antv/attr/esm/index.js","../node_modules/@antv/g2plot/node_modules/@antv/coord/esm/coord/base.js","../node_modules/@antv/g2plot/node_modules/@antv/coord/esm/coord/cartesian.js","../node_modules/@antv/g2plot/node_modules/@antv/coord/esm/coord/helix.js","../node_modules/@antv/g2plot/node_modules/@antv/coord/esm/coord/polar.js","../node_modules/@antv/g2plot/node_modules/@antv/coord/esm/factory.js","../node_modules/@antv/g2plot/node_modules/@antv/coord/esm/index.js","../node_modules/@antv/g2plot/node_modules/@antv/scale/esm/tick-method/register.js","../node_modules/@antv/g2plot/node_modules/@antv/scale/esm/base.js","../node_modules/@antv/g2plot/node_modules/@antv/scale/esm/category/base.js","../node_modules/@antv/g2plot/node_modules/@antv/scale/esm/util/time.js","../node_modules/@antv/g2plot/node_modules/@antv/scale/esm/util/bisector.js","../node_modules/@antv/g2plot/node_modules/@antv/scale/esm/category/time.js","../node_modules/@antv/g2plot/node_modules/@antv/scale/esm/continuous/base.js","../node_modules/@antv/g2plot/node_modules/@antv/scale/esm/continuous/linear.js","../node_modules/@antv/g2plot/node_modules/@antv/scale/esm/util/math.js","../node_modules/@antv/g2plot/node_modules/@antv/scale/esm/continuous/log.js","../node_modules/@antv/g2plot/node_modules/@antv/scale/esm/continuous/pow.js","../node_modules/@antv/g2plot/node_modules/@antv/scale/esm/continuous/time.js","../node_modules/@antv/g2plot/node_modules/@antv/scale/esm/continuous/quantize.js","../node_modules/@antv/g2plot/node_modules/@antv/scale/esm/continuous/quantile.js","../node_modules/@antv/g2plot/node_modules/@antv/scale/esm/factory.js","../node_modules/@antv/g2plot/node_modules/@antv/scale/esm/identity/index.js","../node_modules/@antv/g2plot/node_modules/@antv/scale/esm/tick-method/cat.js","../node_modules/@antv/g2plot/node_modules/@antv/scale/esm/util/d3-linear.js","../node_modules/@antv/g2plot/node_modules/@antv/scale/esm/util/interval.js","../node_modules/@antv/g2plot/node_modules/@antv/scale/esm/util/strict-limit.js","../node_modules/@antv/g2plot/node_modules/@antv/scale/esm/util/pretty-number.js","../node_modules/@antv/g2plot/node_modules/@antv/scale/esm/util/extended.js","../node_modules/@antv/g2plot/node_modules/@antv/scale/esm/util/pretty.js","../node_modules/@antv/g2plot/node_modules/@antv/scale/esm/tick-method/quantile.js","../node_modules/@antv/g2plot/node_modules/@antv/scale/esm/tick-method/time-pretty.js","../node_modules/@antv/g2plot/node_modules/@antv/component/esm/util/event.js","../node_modules/@antv/g2plot/node_modules/@antv/scale/esm/tick-method/index.js","../node_modules/@antv/g2plot/node_modules/@antv/scale/esm/tick-method/time-cat.js","../node_modules/@antv/g2plot/node_modules/@antv/scale/esm/tick-method/linear.js","../node_modules/@antv/g2plot/node_modules/@antv/scale/esm/tick-method/r-prettry.js","../node_modules/@antv/g2plot/node_modules/@antv/scale/esm/tick-method/time.js","../node_modules/@antv/g2plot/node_modules/@antv/scale/esm/tick-method/log.js","../node_modules/@antv/g2plot/node_modules/@antv/scale/esm/tick-method/pow.js","../node_modules/@antv/g2plot/node_modules/@antv/scale/esm/tick-method/d3-linear.js","../node_modules/@antv/g2plot/node_modules/@antv/scale/esm/index.js","../node_modules/@antv/g2plot/node_modules/@antv/component/esm/util/matrix.js","../node_modules/@antv/g2plot/node_modules/@antv/component/esm/util/util.js","../node_modules/@antv/g2plot/node_modules/@antv/component/esm/abstract/component.js","../node_modules/@antv/g2plot/node_modules/@antv/component/esm/abstract/group-component.js","../node_modules/@antv/g2plot/node_modules/@antv/util/esm/difference.js","../node_modules/@antv/g2plot/node_modules/@antv/component/esm/util/text.js","../node_modules/@antv/g2plot/node_modules/@antv/component/esm/util/label.js","../node_modules/@antv/g2plot/node_modules/@antv/util/esm/get-ellipsis-text.js","../node_modules/@antv/g2plot/node_modules/@antv/component/esm/util/graphic.js","../node_modules/@antv/g2plot/node_modules/@antv/component/esm/util/theme.js","../node_modules/@antv/g2plot/node_modules/@antv/component/esm/annotation/line.js","../node_modules/@antv/g2plot/node_modules/@antv/component/esm/annotation/text.js","../node_modules/@antv/g2plot/node_modules/@antv/component/esm/annotation/arc.js","../node_modules/@antv/g2plot/node_modules/@antv/component/esm/annotation/region.js","../node_modules/@antv/g2plot/node_modules/@antv/component/esm/annotation/image.js","../node_modules/@antv/g2plot/node_modules/@antv/component/esm/annotation/data-marker.js","../node_modules/@antv/g2plot/node_modules/@antv/component/esm/annotation/data-region.js","../node_modules/@antv/g2plot/node_modules/@antv/component/esm/annotation/region-filter.js","../node_modules/@antv/g2plot/node_modules/@antv/component/esm/annotation/shape.js","../node_modules/@antv/g2plot/node_modules/@antv/component/esm/abstract/html-component.js","../node_modules/@antv/g2plot/node_modules/@antv/component/esm/annotation/html.js","../node_modules/@antv/g2plot/node_modules/@antv/component/esm/util/state.js","../node_modules/@antv/g2plot/node_modules/@antv/component/esm/axis/base.js","../node_modules/@antv/g2plot/node_modules/@antv/component/esm/axis/overlap/auto-ellipsis.js","../node_modules/@antv/g2plot/node_modules/@antv/component/esm/axis/overlap/auto-hide.js","../node_modules/@antv/g2plot/node_modules/@antv/component/esm/axis/overlap/auto-rotate.js","../node_modules/@antv/g2plot/node_modules/@antv/component/esm/axis/line.js","../node_modules/@antv/g2plot/node_modules/@antv/component/esm/crosshair/html-theme.js","../node_modules/@antv/g2plot/node_modules/@antv/component/esm/axis/circle.js","../node_modules/@antv/g2plot/node_modules/@antv/component/esm/crosshair/base.js","../node_modules/@antv/g2plot/node_modules/@antv/component/esm/crosshair/line.js","../node_modules/@antv/g2plot/node_modules/@antv/component/esm/crosshair/circle.js","../node_modules/@antv/g2plot/node_modules/@antv/component/esm/crosshair/css-const.js","../node_modules/@antv/g2plot/node_modules/@antv/component/esm/crosshair/html.js","../node_modules/@antv/g2plot/node_modules/@antv/component/esm/grid/base.js","../node_modules/@antv/g2plot/node_modules/@antv/component/esm/grid/circle.js","../node_modules/@antv/g2plot/node_modules/@antv/component/esm/grid/line.js","../node_modules/@antv/g2plot/node_modules/@antv/component/esm/legend/base.js","../node_modules/@antv/g2plot/node_modules/@antv/component/esm/legend/category.js","../node_modules/@antv/g2plot/node_modules/@antv/component/esm/legend/continuous.js","../node_modules/@antv/g2plot/node_modules/@antv/component/esm/tooltip/css-const.js","../node_modules/@antv/g2plot/node_modules/@antv/component/esm/tooltip/html-theme.js","../node_modules/@antv/g2plot/node_modules/@antv/component/esm/tooltip/html.js","../node_modules/@antv/g2plot/node_modules/@antv/component/esm/util/align.js","../node_modules/@antv/g2plot/node_modules/@antv/component/esm/trend/constant.js","../node_modules/@antv/g2plot/node_modules/@antv/component/node_modules/@antv/path-util/esm/catmull-rom-2-bezier.js","../node_modules/@antv/g2plot/node_modules/@antv/component/esm/trend/path.js","../node_modules/@antv/g2plot/node_modules/@antv/component/esm/trend/trend.js","../node_modules/@antv/g2plot/node_modules/@antv/component/esm/slider/handler.js","../node_modules/@antv/g2plot/node_modules/@antv/component/esm/slider/constant.js","../node_modules/@antv/g2plot/node_modules/@antv/component/esm/slider/slider.js","../node_modules/@antv/g2plot/node_modules/@antv/component/esm/scrollbar/scrollbar.js","../node_modules/@antv/g2plot/node_modules/@antv/g2/esm/dependents.js","../node_modules/@antv/g2plot/node_modules/@antv/g2/esm/util/graphics.js","../node_modules/@antv/g2plot/node_modules/@antv/g2/esm/util/helper.js","../node_modules/@antv/g2plot/node_modules/@antv/g2/esm/util/bbox.js","../node_modules/@antv/g2plot/node_modules/@antv/g2/esm/util/coordinate.js","../node_modules/@antv/g2plot/node_modules/@antv/g2/esm/util/scale.js","../node_modules/@antv/g2plot/node_modules/@antv/g2/esm/util/axis.js","../node_modules/@antv/g2plot/node_modules/@antv/g2/esm/facet/facet.js","../node_modules/@antv/g2plot/node_modules/@antv/g2/esm/facet/index.js","../node_modules/@antv/g2plot/node_modules/@antv/g2/esm/interaction/action/base.js","../node_modules/@antv/g2plot/node_modules/@antv/g2/esm/interaction/action/callback.js","../node_modules/@antv/g2plot/node_modules/@antv/g2/esm/interaction/action/register.js","../node_modules/@antv/g2plot/node_modules/@antv/g2/esm/geometry/shape/util/path.js","../node_modules/@antv/g2plot/node_modules/@antv/g2/node_modules/@antv/path-util/esm/parse-path-string.js","../node_modules/@antv/g2plot/node_modules/@antv/g2/node_modules/@antv/path-util/esm/get-line-intersect.js","../node_modules/@antv/g2plot/node_modules/@antv/g2/node_modules/@antv/path-util/esm/point-in-polygon.js","../node_modules/@antv/g2plot/node_modules/@antv/g2/node_modules/@antv/path-util/esm/is-polygons-intersect.js","../node_modules/@antv/g2plot/node_modules/@antv/g2/esm/interaction/action/util.js","../node_modules/@antv/g2plot/node_modules/@antv/g2/esm/interaction/context.js","../node_modules/@antv/g2plot/node_modules/@antv/g2/esm/interaction/interaction.js","../node_modules/@antv/g2plot/node_modules/@antv/g2/esm/interaction/grammar-interaction.js","../node_modules/@antv/g2plot/node_modules/@antv/g2/esm/interaction/index.js","../node_modules/@antv/g2plot/node_modules/@antv/g2/esm/theme/util/create-by-style-sheet.js","../node_modules/@antv/g2plot/node_modules/@antv/g2/esm/theme/style-sheet/light.js","../node_modules/@antv/g2plot/node_modules/@antv/g2/esm/theme/util/create-theme.js","../node_modules/@antv/g2plot/node_modules/@antv/g2/esm/theme/index.js","../node_modules/@antv/g2plot/node_modules/@antv/g2/esm/util/tooltip.js","../node_modules/@antv/g2plot/node_modules/@antv/g2/esm/util/padding.js","../node_modules/@antv/g2plot/node_modules/@antv/g2/esm/chart/controller/index.js","../node_modules/@antv/g2plot/node_modules/@antv/g2/esm/chart/controller/coordinate.js","../node_modules/@antv/g2plot/node_modules/@antv/g2/esm/chart/event.js","../node_modules/@antv/g2plot/node_modules/@antv/g2/esm/chart/layout/index.js","../node_modules/@antv/g2plot/node_modules/@antv/g2/esm/chart/util/scale-pool.js","../node_modules/@antv/g2plot/node_modules/@antv/g2/esm/chart/layout/padding-cal.js","../node_modules/@antv/g2plot/node_modules/@antv/g2/esm/chart/layout/auto.js","../node_modules/@antv/g2plot/node_modules/@antv/g2/esm/chart/util/sync-view-padding.js","../node_modules/@antv/g2plot/node_modules/@antv/g2/esm/chart/view.js","../node_modules/@antv/g2plot/node_modules/@antv/g2/esm/chart/chart.js","../node_modules/@antv/g2plot/node_modules/@antv/g2/esm/chart/controller/base.js","../node_modules/@antv/g2plot/node_modules/@antv/g2/esm/chart/controller/tooltip.js","../node_modules/@antv/g2plot/node_modules/@antv/g2/esm/animate/animation/index.js","../node_modules/@antv/g2plot/node_modules/@antv/g2/esm/animate/index.js","../node_modules/@antv/g2plot/node_modules/@antv/g2/esm/geometry/shape/constant.js","../node_modules/@antv/g2plot/node_modules/@antv/g2/esm/geometry/element/index.js","../node_modules/@antv/g2plot/node_modules/@antv/g2/esm/geometry/label/index.js","../node_modules/@antv/g2plot/node_modules/@antv/g2/esm/geometry/shape/base.js","../node_modules/@antv/g2plot/node_modules/@antv/g2/esm/geometry/util/group-data.js","../node_modules/@antv/g2plot/node_modules/@antv/util/esm/group-to-map.js","../node_modules/@antv/g2plot/node_modules/@antv/g2/esm/geometry/util/is-model-change.js","../node_modules/@antv/g2plot/node_modules/@antv/g2/esm/geometry/util/parse-fields.js","../node_modules/@antv/g2plot/node_modules/@antv/g2/esm/geometry/util/diff.js","../node_modules/@antv/g2plot/node_modules/@antv/g2/esm/geometry/base.js","../node_modules/@antv/g2plot/node_modules/@antv/g2/esm/util/transform.js","../node_modules/@antv/g2plot/node_modules/@antv/g2/esm/geometry/label/util/index.js","../node_modules/@antv/g2plot/node_modules/@antv/g2/esm/component/update-label.js","../node_modules/@antv/g2plot/node_modules/@antv/g2/esm/component/labels.js","../node_modules/@antv/g2plot/node_modules/@antv/util/esm/is-null.js","../node_modules/@antv/g2plot/node_modules/@antv/g2/esm/geometry/label/base.js","../node_modules/@antv/g2plot/node_modules/@antv/g2/esm/util/attr.js","../node_modules/@antv/g2plot/node_modules/@antv/g2/esm/util/marker.js","../node_modules/@antv/g2plot/node_modules/@antv/g2/esm/util/legend.js","../node_modules/@antv/g2plot/node_modules/@antv/g2/esm/geometry/shape/util/get-path-points.js","../node_modules/@antv/g2plot/node_modules/@antv/g2/esm/geometry/shape/util/get-style.js","../node_modules/@antv/g2plot/node_modules/@antv/g2/esm/geometry/shape/util/split-points.js","../node_modules/@antv/g2plot/node_modules/@antv/g2/esm/geometry/shape/line/util.js","../node_modules/@antv/g2plot/node_modules/@antv/g2/esm/geometry/shape/line/index.js","../node_modules/@antv/g2plot/node_modules/@antv/g2/esm/core.js","../node_modules/@antv/g2plot/node_modules/@antv/g2/esm/theme/style-sheet/dark.js","../node_modules/@antv/g2plot/node_modules/@antv/g-canvas/esm/util/util.js","../node_modules/@antv/g2plot/node_modules/@antv/g-canvas/esm/util/parse.js","../node_modules/@antv/g2plot/node_modules/@antv/g-canvas/esm/util/arc-params.js","../node_modules/@antv/g2plot/node_modules/@antv/g-canvas/esm/util/arrow.js","../node_modules/@antv/g2plot/node_modules/@antv/g-canvas/esm/util/draw.js","../node_modules/@antv/g2plot/node_modules/@antv/g-canvas/esm/group.js","../node_modules/@antv/g2plot/node_modules/@antv/g-canvas/esm/shape/base.js","../node_modules/@antv/g2plot/node_modules/@antv/g-canvas/esm/shape/circle.js","../node_modules/@antv/g2plot/node_modules/@antv/g-canvas/esm/shape/ellipse.js","../node_modules/@antv/g2plot/node_modules/@antv/g-canvas/esm/shape/image.js","../node_modules/@antv/g2plot/node_modules/@antv/g-math/esm/util.js","../node_modules/@antv/g2plot/node_modules/@antv/g-math/esm/line.js","../node_modules/@antv/g2plot/node_modules/@antv/g-math/esm/bezier.js","../node_modules/@antv/g2plot/node_modules/@antv/g-math/esm/quadratic.js","../node_modules/@antv/g2plot/node_modules/@antv/g-math/esm/cubic.js","../node_modules/@antv/g2plot/node_modules/@antv/g-math/esm/polyline.js","../node_modules/@antv/g2plot/node_modules/@antv/g-math/esm/segments.js","../node_modules/@antv/g2plot/node_modules/@antv/g-canvas/esm/util/in-stroke/line.js","../node_modules/@antv/g2plot/node_modules/@antv/g-canvas/esm/shape/line.js","../node_modules/@antv/g2plot/node_modules/@antv/g-canvas/node_modules/@antv/path-util/esm/parse-path.js","../node_modules/@antv/g2plot/node_modules/@antv/g-canvas/node_modules/@antv/path-util/esm/parse-path-string.js","../node_modules/@antv/g2plot/node_modules/@antv/g-canvas/node_modules/@antv/path-util/esm/path-2-absolute.js","../node_modules/@antv/g2plot/node_modules/@antv/g-canvas/node_modules/@antv/path-util/esm/get-arc-params.js","../node_modules/@antv/g2plot/node_modules/@antv/g-canvas/node_modules/@antv/path-util/esm/path-2-segments.js","../node_modules/@antv/g2plot/node_modules/@antv/g-canvas/esm/shape/marker.js","../node_modules/@antv/g2plot/node_modules/@antv/g-canvas/esm/util/in-path/point-in-path.js","../node_modules/@antv/g2plot/node_modules/@antv/g-canvas/esm/util/in-path/polygon.js","../node_modules/@antv/g2plot/node_modules/@antv/g-canvas/esm/util/in-stroke/arc.js","../node_modules/@antv/g2plot/node_modules/@antv/g-canvas/esm/util/path.js","../node_modules/@antv/g2plot/node_modules/@antv/g-canvas/esm/shape/path.js","../node_modules/@antv/g2plot/node_modules/@antv/g-canvas/esm/util/in-stroke/polyline.js","../node_modules/@antv/g2plot/node_modules/@antv/g-canvas/esm/shape/polygon.js","../node_modules/@antv/g2plot/node_modules/@antv/g-canvas/esm/shape/polyline.js","../node_modules/@antv/g2plot/node_modules/@antv/g-canvas/esm/shape/rect.js","../node_modules/@antv/g2plot/node_modules/@antv/g-canvas/esm/util/in-stroke/rect-radius.js","../node_modules/@antv/g2plot/node_modules/@antv/g-canvas/esm/util/in-stroke/rect.js","../node_modules/@antv/g2plot/node_modules/@antv/g-canvas/esm/shape/text.js","../node_modules/@antv/g2plot/node_modules/@antv/g-canvas/esm/util/hit.js","../node_modules/@antv/g2plot/node_modules/@antv/g-canvas/esm/canvas.js","../node_modules/@antv/g2plot/node_modules/@antv/util/esm/clear-animation-frame.js","../node_modules/@antv/g2plot/node_modules/@antv/util/esm/request-animation-frame.js","../node_modules/@antv/g2plot/node_modules/@antv/g-canvas/esm/index.js","../node_modules/@antv/g-svg/node_modules/@antv/util/esm/is-array-like.js","../node_modules/@antv/g-svg/node_modules/@antv/util/esm/is-type.js","../node_modules/@antv/g-svg/node_modules/@antv/util/esm/is-function.js","../node_modules/@antv/g-svg/node_modules/@antv/util/esm/is-array.js","../node_modules/@antv/g-svg/node_modules/@antv/util/esm/is-object.js","../node_modules/@antv/g-svg/node_modules/@antv/util/esm/each.js","../node_modules/@antv/g-svg/node_modules/@antv/util/esm/max.js","../node_modules/@antv/g-svg/node_modules/@antv/util/esm/min.js","../node_modules/@antv/g-svg/node_modules/@antv/util/esm/is-string.js","../node_modules/@antv/g-svg/node_modules/@antv/util/esm/mod.js","../node_modules/@antv/g-svg/node_modules/@antv/util/esm/to-radian.js","../node_modules/@antv/g-svg/node_modules/@antv/util/esm/values.js","../node_modules/@antv/g-svg/node_modules/@antv/util/esm/memoize.js","../node_modules/@antv/g-svg/node_modules/@antv/util/esm/to-array.js","../node_modules/@antv/g-svg/node_modules/@antv/util/esm/unique-id.js","../node_modules/@antv/g-svg/node_modules/@antv/util/esm/measure-text-width.js","../node_modules/@antv/g-svg/esm/constant.js","../node_modules/@antv/g-svg/esm/util/dom.js","../node_modules/@antv/g-svg/esm/util/svg.js","../node_modules/@antv/g-svg/esm/util/draw.js","../node_modules/@antv/g-svg/esm/group.js","../node_modules/@antv/g-svg/esm/shape/base.js","../node_modules/@antv/g-svg/esm/shape/circle.js","../node_modules/@antv/g-svg/esm/shape/dom.js","../node_modules/@antv/g-svg/esm/shape/ellipse.js","../node_modules/@antv/g-svg/esm/shape/image.js","../node_modules/@antv/g-svg/node_modules/@antv/g-math/esm/util.js","../node_modules/@antv/g-svg/node_modules/@antv/g-math/esm/line.js","../node_modules/@antv/g-svg/node_modules/@antv/g-math/esm/polyline.js","../node_modules/@antv/g-svg/node_modules/@antv/g-math/esm/segments.js","../node_modules/@antv/g-svg/esm/shape/line.js","../node_modules/@antv/g-svg/esm/shape/marker/symbols.js","../node_modules/@antv/g-svg/esm/shape/marker/index.js","../node_modules/@antv/g-svg/esm/shape/path.js","../node_modules/@antv/g-svg/esm/shape/polygon.js","../node_modules/@antv/g-svg/esm/shape/polyline.js","../node_modules/@antv/g-svg/node_modules/@antv/util/esm/is-nil.js","../node_modules/@antv/g-svg/esm/shape/rect.js","../node_modules/@antv/g-svg/esm/util/format.js","../node_modules/@antv/g-svg/esm/shape/text.js","../node_modules/@antv/g-svg/esm/defs/gradient.js","../node_modules/@antv/g-svg/esm/defs/shadow.js","../node_modules/@antv/g-svg/esm/defs/arrow.js","../node_modules/@antv/g-svg/esm/defs/clip.js","../node_modules/@antv/g-svg/esm/defs/pattern.js","../node_modules/@antv/g-svg/esm/defs/index.js","../node_modules/@antv/g-svg/esm/canvas.js","../node_modules/@antv/g-svg/esm/index.js","../node_modules/@antv/g2plot/node_modules/@antv/g2/esm/geometry/path.js","../node_modules/@antv/g2plot/node_modules/@antv/g2/esm/geometry/shape/area/util.js","../node_modules/@antv/g2plot/node_modules/@antv/g2/esm/geometry/shape/area/index.js","../node_modules/@antv/g2plot/node_modules/@antv/g2/esm/geometry/area.js","../node_modules/@antv/g2plot/node_modules/@antv/g2/esm/geometry/shape/edge/index.js","../node_modules/@antv/g2plot/node_modules/@antv/g2/esm/geometry/edge.js","../node_modules/@antv/g2plot/node_modules/@antv/g2/esm/geometry/heatmap.js","../node_modules/@antv/g2plot/node_modules/@antv/g2/esm/geometry/shape/interval/util.js","../node_modules/@antv/g2plot/node_modules/@antv/g2/esm/geometry/util/shape-size.js","../node_modules/@antv/g2plot/node_modules/@antv/g2/esm/geometry/shape/interval/index.js","../node_modules/@antv/g2plot/node_modules/@antv/g2/esm/geometry/interval.js","../node_modules/@antv/g2plot/node_modules/@antv/g2/esm/geometry/line.js","../node_modules/@antv/g2plot/node_modules/@antv/g2/esm/geometry/shape/point/util.js","../node_modules/@antv/g2plot/node_modules/@antv/g2/esm/geometry/shape/point/index.js","../node_modules/@antv/g2plot/node_modules/@antv/g2/esm/geometry/point.js","../node_modules/@antv/g2plot/node_modules/@antv/g2/esm/geometry/shape/polygon/index.js","../node_modules/@antv/g2plot/node_modules/@antv/g2/esm/geometry/polygon.js","../node_modules/@antv/g2plot/node_modules/@antv/g2/esm/geometry/shape/schema/index.js","../node_modules/@antv/g2plot/node_modules/@antv/g2/esm/geometry/schema.js","../node_modules/@antv/g2plot/node_modules/@antv/g2/esm/geometry/shape/violin/index.js","../node_modules/@antv/g2plot/node_modules/@antv/g2/esm/geometry/violin.js","../node_modules/@antv/g2plot/node_modules/@antv/g2/esm/geometry/shape/edge/util.js","../node_modules/@antv/g2plot/node_modules/@antv/g2/esm/geometry/shape/area/line.js","../node_modules/@antv/g2plot/node_modules/@antv/g2/esm/geometry/shape/area/smooth.js","../node_modules/@antv/g2plot/node_modules/@antv/g2/esm/geometry/shape/area/smooth-line.js","../node_modules/@antv/g2plot/node_modules/@antv/g2/esm/geometry/shape/edge/arc.js","../node_modules/@antv/g2plot/node_modules/@antv/g2/esm/geometry/shape/edge/smooth.js","../node_modules/@antv/g2plot/node_modules/@antv/g2/esm/geometry/shape/edge/vhv.js","../node_modules/@antv/g2plot/node_modules/@antv/g2/esm/geometry/shape/interval/funnel.js","../node_modules/@antv/g2plot/node_modules/@antv/g2/esm/geometry/shape/interval/hollow-rect.js","../node_modules/@antv/g2plot/node_modules/@antv/g2/esm/geometry/shape/interval/line.js","../node_modules/@antv/g2plot/node_modules/@antv/g2/esm/geometry/shape/interval/pyramid.js","../node_modules/@antv/g2plot/node_modules/@antv/g2/esm/geometry/shape/interval/tick.js","../node_modules/@antv/g2plot/node_modules/@antv/g2/esm/geometry/shape/line/step.js","../node_modules/@antv/g2plot/node_modules/@antv/g2/esm/geometry/shape/schema/box.js","../node_modules/@antv/g2plot/node_modules/@antv/g2/esm/geometry/shape/schema/candle.js","../node_modules/@antv/g2plot/node_modules/@antv/g2/esm/geometry/shape/polygon/square.js","../node_modules/@antv/g2plot/node_modules/@antv/g2/esm/geometry/shape/point/hollow.js","../node_modules/@antv/g2plot/node_modules/@antv/g2/esm/geometry/shape/point/image.js","../node_modules/@antv/g2plot/node_modules/@antv/g2/esm/geometry/shape/point/solid.js","../node_modules/@antv/g2plot/node_modules/@antv/g2/esm/geometry/shape/violin/smooth.js","../node_modules/@antv/g2plot/node_modules/@antv/g2/esm/geometry/shape/violin/hollow.js","../node_modules/@antv/g2plot/node_modules/@antv/g2/esm/geometry/label/interval.js","../node_modules/@antv/g2plot/node_modules/@antv/g2/esm/geometry/label/polar.js","../node_modules/@antv/g2plot/node_modules/@antv/g2/esm/geometry/label/pie.js","../node_modules/@antv/g2plot/node_modules/@antv/g2/esm/geometry/label/layout/pie/util.js","../node_modules/@antv/g2plot/node_modules/@antv/g2/esm/geometry/label/layout/overlap.js","../node_modules/@antv/g2plot/node_modules/@antv/g2/esm/util/collision-detect.js","../node_modules/@antv/g2plot/node_modules/@antv/g2/esm/geometry/label/util/createWorker.js","../node_modules/@antv/g2plot/node_modules/@antv/g2/esm/geometry/label/layout/worker/hide-overlap.js","../node_modules/@antv/g2plot/node_modules/@antv/g2/esm/geometry/label/layout/hide-overlap.js","../node_modules/@antv/g2plot/node_modules/@antv/g2/esm/util/color.js","../node_modules/@antv/g2plot/node_modules/@antv/g2/esm/util/context.js","../node_modules/@antv/g2plot/node_modules/@antv/g2/esm/geometry/label/layout/interval/adjust-position.js","../node_modules/@antv/g2plot/node_modules/@antv/g2/esm/geometry/label/layout/point/adjust-position.js","../node_modules/@antv/g2plot/node_modules/@antv/g2/esm/geometry/label/layout/path/adjust-position.js","../node_modules/@antv/g2plot/node_modules/@antv/g2/esm/util/text.js","../node_modules/@antv/g2plot/node_modules/@antv/g2/esm/animate/animation/util.js","../node_modules/@antv/g2plot/node_modules/@antv/g2/esm/animate/animation/sector-path-update.js","../node_modules/@antv/g2plot/node_modules/@antv/g2/esm/animate/animation/zoom.js","../node_modules/@antv/g2plot/node_modules/@antv/g2/esm/util/facet.js","../node_modules/@antv/g2plot/node_modules/@antv/g2/esm/facet/circle.js","../node_modules/@antv/g2plot/node_modules/@antv/g2/esm/facet/list.js","../node_modules/@antv/g2plot/node_modules/@antv/g2/esm/facet/matrix.js","../node_modules/@antv/g2plot/node_modules/@antv/g2/esm/facet/mirror.js","../node_modules/@antv/g2plot/node_modules/@antv/g2/esm/facet/rect.js","../node_modules/@antv/g2plot/node_modules/@antv/g2/esm/facet/tree.js","../node_modules/@antv/g2plot/node_modules/@antv/g2/esm/util/stat.js","../node_modules/@antv/g2plot/node_modules/@antv/g2/esm/util/annotation.js","../node_modules/@antv/g2plot/node_modules/@antv/g2/esm/chart/controller/annotation.js","../node_modules/@antv/g2plot/node_modules/@antv/g2/esm/util/grid.js","../node_modules/@antv/g2plot/node_modules/@antv/g2/esm/chart/controller/axis.js","../node_modules/@antv/g2plot/node_modules/@antv/g2/esm/util/direction.js","../node_modules/@antv/g2plot/node_modules/@antv/g2/esm/chart/controller/legend.js","../node_modules/@antv/g2plot/node_modules/@antv/g2/esm/chart/controller/slider.js","../node_modules/@antv/g2plot/node_modules/@antv/g2/esm/chart/controller/scrollbar.js","../node_modules/@antv/g2plot/node_modules/@antv/g2/esm/interaction/action/active-region.js","../node_modules/@antv/g2plot/node_modules/@antv/g2/esm/interaction/action/component/tooltip/geometry.js","../node_modules/@antv/g2plot/node_modules/@antv/g2/esm/interaction/action/component/tooltip/sibling.js","../node_modules/@antv/g2plot/node_modules/@antv/g2/esm/interaction/action/component/tooltip/ellipsis-text.js","../node_modules/@antv/g2plot/node_modules/@antv/g2/esm/interaction/action/element/state-base.js","../node_modules/@antv/g2plot/node_modules/@antv/g2/esm/interaction/action/element/state.js","../node_modules/@antv/g2plot/node_modules/@antv/g2/esm/interaction/action/element/active.js","../node_modules/@antv/g2plot/node_modules/@antv/g2/esm/interaction/action/element/link-by-color.js","../node_modules/@antv/g2plot/node_modules/@antv/g2/esm/interaction/action/element/range-state.js","../node_modules/@antv/g2plot/node_modules/@antv/g2/esm/interaction/action/element/range-active.js","../node_modules/@antv/g2plot/node_modules/@antv/g2/esm/interaction/action/element/single-state.js","../node_modules/@antv/g2plot/node_modules/@antv/g2/esm/interaction/action/element/single-active.js","../node_modules/@antv/g2plot/node_modules/@antv/g2/esm/interaction/action/element/highlight-util.js","../node_modules/@antv/g2plot/node_modules/@antv/g2/esm/interaction/action/element/highlight.js","../node_modules/@antv/g2plot/node_modules/@antv/g2/esm/interaction/action/element/range-highlight.js","../node_modules/@antv/g2plot/node_modules/@antv/g2/esm/interaction/action/element/highlight-by-color.js","../node_modules/@antv/g2plot/node_modules/@antv/g2/esm/interaction/action/element/highlight-by-x.js","../node_modules/@antv/g2plot/node_modules/@antv/g2/esm/interaction/action/element/single-highlight.js","../node_modules/@antv/g2plot/node_modules/@antv/g2/esm/interaction/action/element/range-selected.js","../node_modules/@antv/g2plot/node_modules/@antv/g2/esm/interaction/action/element/selected.js","../node_modules/@antv/g2plot/node_modules/@antv/g2/esm/interaction/action/element/single-selected.js","../node_modules/@antv/g2plot/node_modules/@antv/g2/esm/interaction/action/component/list-state.js","../node_modules/@antv/g2plot/node_modules/@antv/g2/esm/interaction/action/component/list-active.js","../node_modules/@antv/g2plot/node_modules/@antv/g2/esm/interaction/action/component/list-highlight-util.js","../node_modules/@antv/g2plot/node_modules/@antv/g2/esm/interaction/action/component/list-highlight.js","../node_modules/@antv/g2plot/node_modules/@antv/g2/esm/interaction/action/component/list-selected.js","../node_modules/@antv/g2plot/node_modules/@antv/g2/esm/interaction/action/component/list-unchecked.js","../node_modules/@antv/g2plot/node_modules/@antv/g2/esm/interaction/action/component/list-checked.js","../node_modules/@antv/g2plot/node_modules/@antv/g2/esm/interaction/action/component/list-focus.js","../node_modules/@antv/g2plot/node_modules/@antv/g2/esm/interaction/action/component/list-radio.js","../node_modules/@antv/g2plot/node_modules/@antv/g2/esm/interaction/action/mask/base.js","../node_modules/@antv/g2plot/node_modules/@antv/g2/esm/interaction/action/mask/circle.js","../node_modules/@antv/g2plot/node_modules/@antv/g2/esm/interaction/action/mask/rect.js","../node_modules/@antv/g2plot/node_modules/@antv/g2/esm/interaction/action/mask/dim-rect.js","../node_modules/@antv/g2plot/node_modules/@antv/g2/esm/interaction/action/mask/path.js","../node_modules/@antv/g2plot/node_modules/@antv/g2/esm/interaction/action/mask/smooth-path.js","../node_modules/@antv/g2plot/node_modules/@antv/g2/esm/interaction/action/data/range-filter.js","../node_modules/@antv/g2plot/node_modules/@antv/g2/esm/interaction/action/mask/multiple/base.js","../node_modules/@antv/g2plot/node_modules/@antv/g2/esm/interaction/action/mask/multiple/rect.js","../node_modules/@antv/g2plot/node_modules/@antv/g2/esm/interaction/action/mask/multiple/dim-rect.js","../node_modules/@antv/g2plot/node_modules/@antv/g2/esm/interaction/action/mask/multiple/circle.js","../node_modules/@antv/g2plot/node_modules/@antv/g2/esm/interaction/action/mask/multiple/path.js","../node_modules/@antv/g2plot/node_modules/@antv/g2/esm/interaction/action/mask/multiple/smooth-path.js","../node_modules/@antv/g2plot/node_modules/@antv/g2/esm/interaction/action/cursor.js","../node_modules/@antv/g2plot/node_modules/@antv/g2/esm/interaction/action/data/filter.js","../node_modules/@antv/g2plot/node_modules/@antv/g2/esm/interaction/action/data/sibling-filter.js","../node_modules/@antv/g2plot/node_modules/@antv/g2/esm/interaction/action/element/filter.js","../node_modules/@antv/g2plot/node_modules/@antv/g2/esm/interaction/action/element/sibling-filter.js","../node_modules/@antv/g2plot/node_modules/@antv/g2/esm/interaction/action/view/button.js","../node_modules/@antv/g2plot/node_modules/@antv/g2/esm/interaction/action/view/drag.js","../node_modules/@antv/g2plot/node_modules/@antv/g2/esm/interaction/action/view/move.js","../node_modules/@antv/g2plot/node_modules/@antv/g2/esm/interaction/action/view/scale-transform.js","../node_modules/@antv/g2plot/node_modules/@antv/g2/esm/interaction/action/view/scale-translate.js","../node_modules/@antv/g2plot/node_modules/@antv/g2/esm/interaction/action/view/scale-zoom.js","../node_modules/@antv/g2plot/node_modules/@antv/g2/esm/interaction/action/view/mousewheel-scroll.js","../node_modules/@antv/g2plot/node_modules/@antv/g2/esm/interaction/action/component/axis/axis-description.js","../node_modules/@antv/g2plot/node_modules/@antv/g2/esm/index.js","../node_modules/@antv/g2plot/node_modules/@antv/g2/esm/geometry/label/layout/pie/distribute.js","../node_modules/@antv/g2plot/node_modules/@antv/g2/esm/geometry/label/layout/limit-in-shape.js","../node_modules/@antv/g2plot/node_modules/@antv/g2/esm/geometry/label/layout/limit-in-canvas.js","../node_modules/@antv/g2plot/node_modules/@antv/g2/esm/geometry/label/layout/limit-in-plot.js","../node_modules/@antv/g2plot/node_modules/@antv/g2/esm/geometry/label/layout/pie/outer.js","../node_modules/@antv/g2plot/node_modules/@antv/g2/esm/geometry/label/layout/adjust-color.js","../node_modules/@antv/g2plot/node_modules/@antv/g2/esm/geometry/label/layout/interval/hide-overlap.js","../node_modules/@antv/g2plot/node_modules/@antv/g2/esm/geometry/label/layout/pie/spider.js","../node_modules/@antv/g2plot/node_modules/@antv/g2/esm/animate/animation/fade.js","../node_modules/@antv/g2plot/node_modules/@antv/g2/esm/animate/animation/grow-in.js","../node_modules/@antv/g2plot/node_modules/@antv/g2/esm/animate/animation/scale-in.js","../node_modules/@antv/g2plot/node_modules/@antv/g2/esm/animate/animation/wave-in.js","../node_modules/@antv/g2plot/node_modules/@antv/g2/esm/animate/animation/position-update.js","../node_modules/@antv/g2plot/node_modules/@antv/g2/esm/animate/animation/path-in.js","../node_modules/@antv/g2plot/esm/constant.js","../node_modules/@antv/g2plot/esm/utils/invariant.js","../node_modules/@antv/g2plot/esm/utils/pick.js","../node_modules/@antv/g2plot/esm/utils/data.js","../node_modules/@antv/g2plot/esm/utils/deep-assign.js","../node_modules/@antv/g2plot/esm/utils/context.js","../node_modules/@antv/g2plot/esm/utils/dom.js","../node_modules/@antv/g2plot/esm/utils/flow.js","../node_modules/@antv/g2plot/esm/utils/geometry.js","../node_modules/@antv/g2plot/esm/utils/kebab-case.js","../node_modules/@antv/g2plot/esm/utils/label.js","../node_modules/@antv/g2plot/esm/utils/number.js","../node_modules/@antv/g2plot/esm/utils/padding.js","../node_modules/@antv/g2plot/esm/utils/measure-text.js","../node_modules/@antv/g2plot/esm/utils/path.js","../node_modules/@antv/g2plot/esm/utils/statistic.js","../node_modules/@antv/g2plot/esm/utils/template.js","../node_modules/@antv/g2plot/esm/utils/view.js","../node_modules/@antv/g2plot/esm/utils/pattern/util.js","../node_modules/@antv/g2plot/esm/utils/pattern/dot.js","../node_modules/@antv/g2plot/esm/utils/pattern/line.js","../node_modules/@antv/g2plot/esm/utils/pattern/square.js","../node_modules/@antv/g2plot/esm/utils/pattern/index.js","../node_modules/@antv/g2plot/esm/adaptor/pattern.js","../node_modules/@antv/g2plot/esm/adaptor/common.js","../node_modules/@antv/g2plot/esm/core/global.js","../node_modules/@antv/g2plot/esm/core/locale.js","../node_modules/@antv/g2plot/esm/utils/tooltip.js","../node_modules/@antv/g2plot/esm/adaptor/geometries/base.js","../node_modules/@antv/g2plot/esm/adaptor/geometries/area.js","../node_modules/@antv/g2plot/esm/adaptor/geometries/edge.js","../node_modules/@antv/g2plot/esm/adaptor/geometries/interval.js","../node_modules/@antv/g2plot/esm/adaptor/geometries/line.js","../node_modules/@antv/g2plot/esm/adaptor/geometries/point.js","../node_modules/@antv/g2plot/esm/adaptor/geometries/polygon.js","../node_modules/@antv/g2plot/esm/adaptor/geometries/schema.js","../node_modules/size-sensor/lib/id.js","../node_modules/size-sensor/lib/debounce.js","../node_modules/size-sensor/lib/constant.js","../node_modules/size-sensor/lib/sensors/object.js","../node_modules/size-sensor/lib/sensors/resizeObserver.js","../node_modules/size-sensor/lib/sensors/index.js","../node_modules/size-sensor/lib/sensorPool.js","../node_modules/size-sensor/lib/index.js","../node_modules/@antv/g2plot/esm/core/plot.js","../node_modules/@antv/g2plot/esm/utils/transform/percent.js","../node_modules/@antv/g2plot/esm/plots/line/adaptor.js","../node_modules/@antv/g2plot/esm/plots/area/adaptor.js","../node_modules/@antv/g2plot/esm/plots/area/constants.js","../node_modules/@antv/g2plot/esm/plots/area/index.js","../node_modules/@antv/g2plot/esm/interactions/actions/reset-button.js","../node_modules/@antv/g2plot/esm/interactions/brush.js","../node_modules/@antv/g2plot/esm/adaptor/brush.js","../node_modules/@antv/g2plot/esm/adaptor/connected-area.js","../node_modules/@antv/g2plot/esm/utils/conversion.js","../node_modules/@antv/g2plot/esm/adaptor/conversion-tag.js","../node_modules/@antv/g2plot/esm/plots/column/adaptor.js","../node_modules/@antv/g2plot/esm/plots/bar/adaptor.js","../node_modules/@antv/g2plot/esm/plots/bar/constants.js","../node_modules/@antv/g2plot/esm/plots/funnel/constant.js","../node_modules/@antv/g2plot/esm/plots/bar/index.js","../node_modules/@antv/g2plot/esm/plots/column/constants.js","../node_modules/@antv/g2plot/esm/plots/column/index.js","../node_modules/@antv/g2plot/esm/plots/funnel/geometries/common.js","../node_modules/@antv/g2plot/esm/plots/funnel/geometries/basic.js","../node_modules/@antv/g2plot/esm/plots/funnel/geometries/compare.js","../node_modules/@antv/g2plot/esm/plots/funnel/geometries/dynamic-height.js","../node_modules/@antv/g2plot/esm/plots/funnel/geometries/facet.js","../node_modules/@antv/g2plot/esm/plots/funnel/interactions/funnel-conversion-tag.js","../node_modules/@antv/g2plot/esm/plots/funnel/interactions/index.js","../node_modules/@antv/g2plot/esm/plots/funnel/adaptor.js","../node_modules/@antv/g2plot/esm/plots/funnel/index.js","../node_modules/@antv/g2plot/esm/plots/gauge/constants.js","../node_modules/@antv/g2plot/esm/plots/gauge/utils.js","../node_modules/@antv/g2plot/esm/plots/gauge/adaptor.js","../node_modules/@antv/g2plot/esm/plots/gauge/shapes/indicator.js","../node_modules/@antv/g2plot/esm/plots/gauge/shapes/meter-gauge.js","../node_modules/@antv/g2plot/esm/plots/gauge/index.js","../node_modules/@antv/g2plot/esm/utils/transform/histogram.js","../node_modules/@antv/g2plot/node_modules/@antv/util/esm/sort-by.js","../node_modules/@antv/g2plot/esm/plots/histogram/constant.js","../node_modules/@antv/g2plot/esm/plots/histogram/adaptor.js","../node_modules/@antv/g2plot/esm/plots/histogram/index.js","../node_modules/@antv/g2plot/esm/plots/line/constants.js","../node_modules/@antv/g2plot/esm/plots/line/interactions/index.js","../node_modules/@antv/g2plot/esm/plots/line/interactions/marker-active.js","../node_modules/@antv/g2plot/esm/plots/line/index.js","../node_modules/@antv/g2plot/esm/plots/pie/contants.js","../node_modules/@antv/g2plot/esm/utils/matrix.js","../node_modules/@antv/g2plot/esm/plots/pie/interactions/actions/legend-active.js","../node_modules/@antv/g2plot/esm/plots/pie/interactions/actions/statistic-active.js","../node_modules/@antv/g2plot/esm/plots/pie/interactions/util.js","../node_modules/@antv/g2plot/esm/plots/pie/interactions/index.js","../node_modules/@antv/g2plot/esm/plots/pie/utils.js","../node_modules/@antv/g2plot/esm/plots/pie/adaptor.js","../node_modules/@antv/g2plot/esm/plots/pie/index.js","../node_modules/@antv/g2plot/esm/plots/progress/constants.js","../node_modules/@antv/g2plot/esm/plots/progress/utils.js","../node_modules/@antv/g2plot/esm/plots/progress/adaptor.js","../node_modules/@antv/g2plot/esm/plots/progress/index.js","../node_modules/@antv/g2plot/esm/plots/ring-progress/adaptor.js","../node_modules/@antv/g2plot/esm/plots/ring-progress/constants.js","../node_modules/@antv/g2plot/esm/plots/ring-progress/index.js","../node_modules/d3-regression/dist/d3-regression.esm.js","../node_modules/@antv/g2plot/esm/plots/scatter/util.js","../node_modules/@antv/g2plot/esm/plots/scatter/adaptor.js","../node_modules/@antv/g2plot/esm/plots/scatter/constant.js","../node_modules/@antv/g2plot/esm/interactions/drag-move.js","../node_modules/@antv/g2plot/esm/plots/scatter/index.js","../node_modules/@antv/g2plot/esm/plots/stock/constant.js","../node_modules/@antv/g2plot/esm/plots/stock/utils.js","../node_modules/@antv/g2plot/esm/plots/stock/adaptor.js","../node_modules/@antv/g2plot/esm/plots/stock/index.js","../node_modules/@antv/g2plot/esm/plots/tiny-line/utils.js","../node_modules/@antv/g2plot/esm/plots/tiny-line/constants.js","../node_modules/@antv/g2plot/esm/plots/tiny-area/adaptor.js","../node_modules/@antv/g2plot/esm/plots/tiny-area/constants.js","../node_modules/@antv/g2plot/esm/plots/tiny-area/index.js","../node_modules/@antv/g2plot/esm/plots/tiny-column/adaptor.js","../node_modules/@antv/g2plot/esm/plots/tiny-column/constants.js","../node_modules/@antv/g2plot/esm/plots/tiny-column/index.js","../node_modules/@antv/g2plot/esm/plots/tiny-line/adaptor.js","../node_modules/@antv/g2plot/esm/plots/tiny-line/index.js","../node_modules/@antv/g2plot/esm/lab.js","../node_modules/@antv/g2plot/esm/plots/mix/utils.js","../node_modules/@antv/g2plot/esm/plots/mix/adaptor.js","../node_modules/@antv/g2plot/esm/plots/mix/interactions/association.js","../node_modules/@antv/g2plot/esm/plots/mix/interactions/utils.js","../node_modules/@antv/g2plot/esm/plots/mix/index.js","../node_modules/@antv/g2plot/esm/plots/bidirectional-bar/constant.js","../node_modules/@antv/g2plot/esm/plots/box/constant.js","../node_modules/@antv/g2plot/esm/plots/bidirectional-bar/utils.js","../node_modules/@antv/g2plot/esm/plots/bidirectional-bar/adaptor.js","../node_modules/@antv/g2plot/esm/plots/bidirectional-bar/index.js","../node_modules/@antv/g2plot/esm/plots/box/utils.js","../node_modules/@antv/g2plot/esm/plots/box/adaptor.js","../node_modules/@antv/g2plot/esm/plots/bullet/utils.js","../node_modules/@antv/g2plot/esm/plots/bullet/adaptor.js","../node_modules/@antv/g2plot/esm/plots/box/index.js","../node_modules/@antv/g2plot/esm/plots/bullet/constant.js","../node_modules/@antv/g2plot/esm/plots/bullet/index.js","../node_modules/@antv/g2plot/esm/utils/transform/chord.js","../node_modules/@antv/g2plot/esm/plots/chord/constant.js","../node_modules/@antv/g2plot/esm/plots/chord/adaptor.js","../node_modules/@antv/g2plot/esm/plots/chord/index.js","../node_modules/@antv/g2plot/esm/plots/circle-packing/constant.js","../node_modules/@antv/g2plot/esm/interactions/actions/drill-down.js","../node_modules/@antv/g2plot/node_modules/d3-hierarchy/src/cluster.js","../node_modules/@antv/g2plot/node_modules/d3-hierarchy/src/hierarchy/count.js","../node_modules/@antv/g2plot/node_modules/d3-hierarchy/src/hierarchy/index.js","../node_modules/@antv/g2plot/node_modules/d3-hierarchy/src/pack/enclose.js","../node_modules/@antv/g2plot/node_modules/d3-hierarchy/src/array.js","../node_modules/@antv/g2plot/node_modules/d3-hierarchy/src/pack/siblings.js","../node_modules/@antv/g2plot/node_modules/d3-hierarchy/src/accessors.js","../node_modules/@antv/g2plot/node_modules/d3-hierarchy/src/constant.js","../node_modules/@antv/g2plot/node_modules/d3-hierarchy/src/pack/index.js","../node_modules/@antv/g2plot/node_modules/d3-hierarchy/src/treemap/round.js","../node_modules/@antv/g2plot/node_modules/d3-hierarchy/src/treemap/dice.js","../node_modules/@antv/g2plot/node_modules/d3-hierarchy/src/partition.js","../node_modules/@antv/g2plot/node_modules/d3-hierarchy/src/hierarchy/each.js","../node_modules/@antv/g2plot/node_modules/d3-hierarchy/src/hierarchy/eachAfter.js","../node_modules/@antv/g2plot/node_modules/d3-hierarchy/src/hierarchy/eachBefore.js","../node_modules/@antv/g2plot/node_modules/d3-hierarchy/src/hierarchy/find.js","../node_modules/@antv/g2plot/node_modules/d3-hierarchy/src/hierarchy/sum.js","../node_modules/@antv/g2plot/node_modules/d3-hierarchy/src/hierarchy/sort.js","../node_modules/@antv/g2plot/node_modules/d3-hierarchy/src/hierarchy/path.js","../node_modules/@antv/g2plot/node_modules/d3-hierarchy/src/hierarchy/ancestors.js","../node_modules/@antv/g2plot/node_modules/d3-hierarchy/src/hierarchy/descendants.js","../node_modules/@antv/g2plot/node_modules/d3-hierarchy/src/hierarchy/leaves.js","../node_modules/@antv/g2plot/node_modules/d3-hierarchy/src/hierarchy/links.js","../node_modules/@antv/g2plot/node_modules/d3-hierarchy/src/hierarchy/iterator.js","../node_modules/@antv/g2plot/node_modules/d3-hierarchy/src/stratify.js","../node_modules/@antv/g2plot/node_modules/d3-hierarchy/src/tree.js","../node_modules/@antv/g2plot/node_modules/d3-hierarchy/src/treemap/slice.js","../node_modules/@antv/g2plot/node_modules/d3-hierarchy/src/treemap/squarify.js","../node_modules/@antv/g2plot/node_modules/d3-hierarchy/src/treemap/index.js","../node_modules/@antv/g2plot/node_modules/d3-hierarchy/src/treemap/resquarify.js","../node_modules/@antv/g2plot/node_modules/d3-hierarchy/src/treemap/binary.js","../node_modules/@antv/g2plot/node_modules/d3-hierarchy/src/treemap/sliceDice.js","../node_modules/@antv/g2plot/esm/utils/hierarchy/util.js","../node_modules/@antv/g2plot/esm/utils/hierarchy/pack.js","../node_modules/@antv/g2plot/esm/plots/circle-packing/utils.js","../node_modules/@antv/g2plot/esm/plots/circle-packing/adaptor.js","../node_modules/@antv/g2plot/esm/interactions/drill-down.js","../node_modules/@antv/g2plot/esm/plots/circle-packing/index.js","../node_modules/@antv/g2plot/esm/plots/dual-axes/constant.js","../node_modules/@antv/g2plot/esm/plots/dual-axes/types.js","../node_modules/@antv/g2plot/esm/plots/dual-axes/util/option.js","../node_modules/@antv/g2plot/esm/plots/dual-axes/util/legend.js","../node_modules/@antv/g2plot/esm/plots/dual-axes/util/render-sider.js","../node_modules/@antv/g2plot/esm/plots/dual-axes/adaptor.js","../node_modules/@antv/g2plot/esm/plots/dual-axes/util/geometry.js","../node_modules/@antv/g2plot/esm/plots/facet/adaptor.js","../node_modules/@antv/g2plot/esm/plots/facet/utils.js","../node_modules/@antv/g2plot/esm/plots/dual-axes/index.js","../node_modules/@antv/g2plot/esm/plots/facet/constant.js","../node_modules/@antv/g2plot/esm/plots/heatmap/adaptor.js","../node_modules/@antv/g2plot/esm/plots/facet/index.js","../node_modules/@antv/g2plot/esm/plots/heatmap/constant.js","../node_modules/@antv/g2plot/esm/plots/heatmap/shapes/circle.js","../node_modules/@antv/g2plot/esm/plots/heatmap/shapes/square.js","../node_modules/@antv/g2plot/esm/plots/heatmap/index.js","../node_modules/@antv/g2plot/esm/plots/liquid/utils.js","../node_modules/@antv/g2plot/esm/plots/liquid/adaptor.js","../node_modules/@antv/g2plot/esm/plots/liquid/constants.js","../node_modules/@antv/g2plot/esm/plots/liquid/shapes/liquid.js","../node_modules/@antv/g2plot/esm/plots/radar/adaptor.js","../node_modules/@antv/g2plot/esm/plots/radial-bar/utils.js","../node_modules/@antv/g2plot/esm/plots/radial-bar/adaptor.js","../node_modules/@antv/g2plot/esm/plots/liquid/index.js","../node_modules/@antv/g2plot/esm/plots/radar/interactions/radar-tooltip-action.js","../node_modules/@antv/g2plot/esm/plots/radar/interactions/index.js","../node_modules/@antv/g2plot/esm/plots/radar/index.js","../node_modules/@antv/g2plot/esm/plots/radial-bar/constant.js","../node_modules/@antv/g2plot/esm/plots/rose/adaptor.js","../node_modules/@antv/g2plot/esm/plots/radial-bar/index.js","../node_modules/@antv/g2plot/esm/plots/rose/constant.js","../node_modules/@antv/g2plot/esm/plots/rose/index.js","../node_modules/@antv/g2plot/esm/plots/sankey/constant.js","../node_modules/@antv/g2plot/esm/plots/sankey/circle.js","../node_modules/@antv/g2plot/esm/plots/sankey/sankey/align.js","../node_modules/@antv/g2plot/esm/plots/sankey/sankey/helper.js","../node_modules/@antv/g2plot/esm/plots/sankey/sankey/sankey.js","../node_modules/@antv/g2plot/esm/plots/sankey/layout.js","../node_modules/@antv/g2plot/node_modules/@antv/util/esm/min-by.js","../node_modules/@antv/g2plot/esm/plots/sankey/helper.js","../node_modules/@antv/g2plot/esm/plots/sankey/adaptor.js","../node_modules/@antv/g2plot/esm/plots/sankey/interactions/node-draggable.js","../node_modules/@antv/g2plot/esm/plots/sankey/interactions/actions/node-drag.js","../node_modules/@antv/g2plot/esm/plots/sankey/index.js","../node_modules/@antv/g2plot/esm/plots/sunburst/constant.js","../node_modules/@antv/g2plot/esm/utils/hierarchy/partition.js","../node_modules/@antv/g2plot/esm/utils/hierarchy/treemap.js","../node_modules/@antv/g2plot/esm/plots/sunburst/utils.js","../node_modules/@antv/g2plot/esm/plots/sunburst/adaptor.js","../node_modules/@antv/g2plot/esm/plots/treemap/utils.js","../node_modules/@antv/g2plot/esm/plots/treemap/adaptor.js","../node_modules/@antv/g2plot/esm/plots/sunburst/index.js","../node_modules/@antv/g2plot/esm/plots/treemap/constant.js","../node_modules/@antv/g2plot/esm/plots/treemap/index.js","../node_modules/@antv/g2plot/esm/plots/venn/constant.js","../node_modules/@antv/g2plot/esm/plots/venn/interactions/util.js","../node_modules/@antv/g2plot/esm/plots/venn/interactions/actions/active.js","../node_modules/@antv/g2plot/esm/plots/venn/interactions/actions/highlight.js","../node_modules/@antv/g2plot/esm/plots/venn/interactions/actions/selected.js","../node_modules/@antv/g2plot/esm/plots/venn/interactions/index.js","../node_modules/@antv/g2plot/esm/plots/venn/label.js","../node_modules/@antv/path-util/esm/parse-path-string.js","../node_modules/@antv/g2plot/esm/plots/venn/shape.js","../node_modules/@antv/g2plot/esm/utils/color/blend.js","../node_modules/fmin/src/blas1.js","../node_modules/fmin/src/nelderMead.js","../node_modules/fmin/src/linesearch.js","../node_modules/fmin/src/conjugateGradient.js","../node_modules/@antv/g2plot/esm/plots/venn/layout/circleintersection.js","../node_modules/@antv/g2plot/esm/plots/venn/layout/diagram.js","../node_modules/@antv/g2plot/esm/plots/venn/layout/layout.js","../node_modules/fmin/src/bisect.js","../node_modules/@antv/g2plot/esm/plots/venn/utils.js","../node_modules/@antv/g2plot/esm/plots/venn/adaptor.js","../node_modules/@antv/g2plot/esm/plots/venn/index.js","../node_modules/@antv/g2plot/esm/plots/violin/constant.js","../node_modules/pdfast/src/helper.js","../node_modules/pdfast/src/index.js","../node_modules/@antv/g2plot/esm/utils/transform/quantile.js","../node_modules/@antv/g2plot/esm/plots/violin/utils.js","../node_modules/@antv/g2plot/esm/plots/violin/adaptor.js","../node_modules/@antv/g2plot/esm/adaptor/geometries/violin.js","../node_modules/@antv/g2plot/esm/plots/violin/index.js","../node_modules/@antv/g2plot/esm/plots/waterfall/constant.js","../node_modules/@antv/g2plot/esm/plots/waterfall/utils.js","../node_modules/@antv/g2plot/esm/plots/waterfall/adaptor.js","../node_modules/@antv/g2plot/esm/plots/waterfall/shape.js","../node_modules/@antv/g2plot/esm/plots/waterfall/index.js","../node_modules/@antv/g2plot/esm/plots/word-cloud/constant.js","../node_modules/@antv/g2plot/esm/utils/transform/word-cloud.js","../node_modules/@antv/g2plot/esm/plots/word-cloud/utils.js","../node_modules/@antv/g2plot/esm/plots/word-cloud/adaptor.js","../node_modules/@antv/g2plot/esm/plots/word-cloud/shapes/word-cloud.js","../src/components/chart/useLineChart.ts","../node_modules/@antv/g2plot/esm/plots/word-cloud/index.js","../node_modules/@antv/g2plot/esm/plugin/index.js","../node_modules/@antv/g2plot/esm/index.js","../node_modules/@antv/g2plot/esm/locales/en_US.js","../node_modules/@antv/g2plot/esm/locales/zh_CN.js","../src/components/chart/LineChart.vue","../src/components/chart/useBarChart.ts","../src/components/chart/BarChart.vue","../src/components/chart/usePieChart.ts","../src/components/chart/PieChart.vue","../src/components/chart/useAreaChart.ts","../src/components/chart/AreaChart.vue","../src/components/chart/useScatterChart.ts","../src/components/chart/ScatterChart.vue","../src/components/chart/useBubbleChart.ts","../src/components/chart/BubbleChart.vue","../src/components/chart/useHeatmapChart.ts","../src/components/chart/HeatmapChart.vue","../src/components/views/ReferencesDrawer.vue","../src/components/views/AgentMessages.vue","../src/components/views/AgentPlans.vue","../src/components/ResponsiveTable.vue","../src/components/PluginStatus.vue","../src/components/views/ChartView.vue","../node_modules/@antv/ava/esm/ckb/base.js","../node_modules/@antv/ava/esm/ckb/ckb.js","../node_modules/@antv/ava/esm/ckb/constants.js","../node_modules/@antv/ava/esm/advisor/utils/deep-mix.js","../node_modules/@antv/ava/esm/advisor/utils/isNil.js","../node_modules/@antv/ava/esm/advisor/utils/compare.js","../node_modules/@antv/ava/esm/advisor/utils/clone.js","../node_modules/@antv/ava/esm/advisor/utils/hasSubset.js","../node_modules/@antv/ava/esm/advisor/utils/intersects.js","../node_modules/@antv/ava/esm/advisor/ruler/rules/constants.js","../node_modules/@antv/ava/esm/advisor/ruler/rules/bar-series-qty.js","../node_modules/@antv/ava/esm/advisor/ruler/rules/bar-without-axis-min.js","../node_modules/@antv/ava/esm/advisor/ruler/utils.js","../node_modules/@antv/ava/esm/advisor/constants.js","../node_modules/@antv/ava/esm/advisor/ruler/rules/data-check.js","../node_modules/@antv/ava/esm/advisor/ruler/rules/diff-pie-sector.js","../node_modules/@antv/ava/esm/advisor/ruler/rules/landscape-or-portrait.js","../node_modules/@antv/ava/esm/advisor/ruler/rules/limit-series.js","../node_modules/@antv/ava/esm/advisor/ruler/rules/line-field-time-ordinal.js","../node_modules/@antv/ava/esm/advisor/ruler/rules/nominal-enum-combinatorial.js","../node_modules/@antv/ava/esm/advisor/ruler/rules/series-qty-limit.js","../node_modules/lodash/lodash.js","../node_modules/@antv/ava/esm/advisor/utils/inferDataType.js","../node_modules/@antv/ava/esm/advisor/ruler/rules/x-axis-line-fading.js","../node_modules/@antv/ava/esm/advisor/ruler/rules/index.js","../node_modules/@antv/ava/esm/advisor/ruler/rules/data-field-qty.js","../node_modules/@antv/ava/esm/advisor/ruler/rules/no-redundant-field.js","../node_modules/@antv/ava/esm/advisor/ruler/rules/purpose-check.js","../node_modules/@antv/ava/esm/advisor/ruler/index.js","../node_modules/@antv/ava/esm/data/utils/isType/constants.js","../node_modules/@antv/ava/esm/data/utils/isType/isType.js","../node_modules/@antv/ava/esm/data/utils/isType/isDateString.js","../node_modules/@antv/ava/esm/data/utils/common.js","../node_modules/@antv/ava/esm/data/statistics/caches.js","../node_modules/@antv/ava/esm/data/statistics/base.js","../node_modules/@antv/ava/esm/data/analysis/field/index.js","../node_modules/@antv/ava/esm/data/dataset/field/utils.js","../node_modules/@antv/ava/esm/data/dataset/field/baseFrame.js","../node_modules/@antv/ava/esm/data/dataset/field/series.js","../node_modules/@antv/ava/esm/data/dataset/field/dataFrame.js","../node_modules/@antv/smart-color/esm/constant.js","../node_modules/chroma-js/src/utils/limit.js","../node_modules/chroma-js/src/utils/clip_rgb.js","../node_modules/chroma-js/src/utils/type.js","../node_modules/chroma-js/src/utils/unpack.js","../node_modules/chroma-js/src/utils/last.js","../node_modules/chroma-js/src/utils/index.js","../node_modules/chroma-js/src/io/input.js","../node_modules/chroma-js/src/Color.js","../node_modules/chroma-js/src/version.js","../node_modules/chroma-js/src/chroma.js","../node_modules/chroma-js/src/io/cmyk/cmyk2rgb.js","../node_modules/chroma-js/src/io/cmyk/rgb2cmyk.js","../node_modules/chroma-js/src/io/cmyk/index.js","../node_modules/chroma-js/src/io/css/hsl2css.js","../node_modules/chroma-js/src/io/hsl/rgb2hsl.js","../node_modules/chroma-js/src/io/css/rgb2css.js","../node_modules/chroma-js/src/io/hsl/hsl2rgb.js","../node_modules/chroma-js/src/io/css/css2rgb.js","../node_modules/chroma-js/src/io/css/index.js","../node_modules/chroma-js/src/io/gl/index.js","../node_modules/chroma-js/src/io/hcg/hcg2rgb.js","../node_modules/chroma-js/src/io/hcg/index.js","../node_modules/chroma-js/src/io/hcg/rgb2hcg.js","../node_modules/chroma-js/src/io/hex/hex2rgb.js","../node_modules/chroma-js/src/io/hex/rgb2hex.js","../node_modules/chroma-js/src/io/hex/index.js","../node_modules/chroma-js/src/io/hsi/hsi2rgb.js","../node_modules/chroma-js/src/io/hsi/rgb2hsi.js","../node_modules/chroma-js/src/io/hsi/index.js","../node_modules/chroma-js/src/io/hsl/index.js","../node_modules/chroma-js/src/io/hsv/hsv2rgb.js","../node_modules/chroma-js/src/io/hsv/rgb2hsv.js","../node_modules/chroma-js/src/io/hsv/index.js","../node_modules/chroma-js/src/io/lab/lab-constants.js","../node_modules/chroma-js/src/io/lab/lab2rgb.js","../node_modules/chroma-js/src/io/lab/rgb2lab.js","../node_modules/chroma-js/src/io/lab/index.js","../node_modules/chroma-js/src/io/lch/lch2lab.js","../node_modules/chroma-js/src/io/lch/lch2rgb.js","../node_modules/chroma-js/src/io/lch/lab2lch.js","../node_modules/chroma-js/src/io/lch/rgb2lch.js","../node_modules/chroma-js/src/io/lch/index.js","../node_modules/chroma-js/src/io/lch/hcl2rgb.js","../node_modules/chroma-js/src/colors/w3cx11.js","../node_modules/chroma-js/src/io/named/index.js","../node_modules/chroma-js/src/io/num/index.js","../node_modules/chroma-js/src/io/num/rgb2num.js","../node_modules/chroma-js/src/io/num/num2rgb.js","../node_modules/chroma-js/src/io/rgb/index.js","../node_modules/chroma-js/src/io/temp/temperature2rgb.js","../node_modules/chroma-js/src/io/temp/rgb2temperature.js","../node_modules/chroma-js/src/io/temp/index.js","../node_modules/chroma-js/src/io/oklab/oklab2rgb.js","../node_modules/chroma-js/src/io/oklab/rgb2oklab.js","../node_modules/chroma-js/src/io/oklab/index.js","../node_modules/chroma-js/src/io/oklch/index.js","../node_modules/chroma-js/src/io/oklch/rgb2oklch.js","../node_modules/chroma-js/src/io/oklch/oklch2rgb.js","../node_modules/chroma-js/src/ops/alpha.js","../node_modules/chroma-js/src/ops/clipped.js","../node_modules/chroma-js/src/ops/darken.js","../node_modules/chroma-js/src/ops/get.js","../node_modules/chroma-js/src/ops/luminance.js","../node_modules/chroma-js/src/interpolator/index.js","../node_modules/chroma-js/src/generator/mix.js","../node_modules/chroma-js/src/ops/mix.js","../node_modules/chroma-js/src/ops/premultiply.js","../node_modules/chroma-js/src/ops/saturate.js","../node_modules/chroma-js/src/ops/set.js","../node_modules/chroma-js/src/ops/shade.js","../node_modules/chroma-js/src/interpolator/rgb.js","../node_modules/chroma-js/src/interpolator/lrgb.js","../node_modules/chroma-js/src/interpolator/lab.js","../node_modules/chroma-js/src/interpolator/_hsx.js","../node_modules/chroma-js/src/interpolator/lch.js","../node_modules/chroma-js/src/interpolator/num.js","../node_modules/chroma-js/src/interpolator/hcg.js","../node_modules/chroma-js/src/interpolator/hsi.js","../node_modules/chroma-js/src/interpolator/hsl.js","../node_modules/chroma-js/src/interpolator/hsv.js","../node_modules/chroma-js/src/interpolator/oklab.js","../node_modules/chroma-js/src/interpolator/oklch.js","../node_modules/chroma-js/src/generator/average.js","../node_modules/chroma-js/src/generator/scale.js","../node_modules/chroma-js/src/generator/bezier.js","../node_modules/chroma-js/src/generator/blend.js","../node_modules/chroma-js/src/generator/cubehelix.js","../node_modules/chroma-js/src/generator/random.js","../node_modules/chroma-js/src/utils/analyze.js","../node_modules/chroma-js/src/utils/contrast.js","../node_modules/chroma-js/src/utils/delta-e.js","../node_modules/chroma-js/src/utils/valid.js","../node_modules/chroma-js/src/utils/scales.js","../node_modules/chroma-js/src/colors/colorbrewer.js","../node_modules/chroma-js/index.js","../node_modules/chroma-js/src/utils/distance.js","../node_modules/@antv/color-schema/esm/src/schema/color.js","../node_modules/@antv/color-schema/esm/src/schema/colorValue.js","../node_modules/@antv/smart-color/esm/utils/colorConversion.js","../node_modules/@antv/smart-color/esm/utils/colorComputation/colorBlend.js","../node_modules/@antv/smart-color/esm/utils/helper.js","../node_modules/@antv/smart-color/esm/utils/colorComputation/index.js","../node_modules/@antv/smart-color/esm/utils/degree.js","../node_modules/onecolor/lib/color.js","../node_modules/onecolor/lib/XYZ.js","../node_modules/onecolor/lib/HSV.js","../node_modules/onecolor/lib/HSL.js","../node_modules/onecolor/lib/plugins/luminance.js","../node_modules/onecolor/lib/plugins/isDark.js","../node_modules/onecolor/index.js","../node_modules/onecolor/lib/LAB.js","../node_modules/onecolor/lib/CMYK.js","../node_modules/onecolor/lib/plugins/namedColors.js","../node_modules/onecolor/lib/plugins/clearer.js","../node_modules/onecolor/lib/plugins/contrast.js","../node_modules/onecolor/lib/plugins/darken.js","../node_modules/onecolor/lib/plugins/desaturate.js","../node_modules/onecolor/lib/plugins/grayscale.js","../node_modules/onecolor/lib/plugins/isLight.js","../node_modules/onecolor/lib/plugins/lighten.js","../node_modules/onecolor/lib/plugins/mix.js","../node_modules/onecolor/lib/plugins/negate.js","../node_modules/onecolor/lib/plugins/opaquer.js","../node_modules/onecolor/lib/plugins/rotate.js","../node_modules/onecolor/lib/plugins/saturate.js","../node_modules/onecolor/lib/plugins/toAlpha.js","../node_modules/color-blind/lib/blind.js","../node_modules/color-blind/lib/color-blind.js","../node_modules/@antv/smart-color/esm/simulators/index.js","../node_modules/@antv/smart-color/esm/simulators/grayscale.js","../node_modules/@antv/smart-color/esm/simulators/colorBlindness.js","../node_modules/@antv/smart-color/esm/generators/discreteScaleGeneration.js","../node_modules/@antv/smart-color/esm/generators/monochromaticGeneration.js","../node_modules/@antv/smart-color/esm/generators/achromaticGeneration.js","../node_modules/@antv/smart-color/esm/evaluators/colorDifference/euclideanDistance.js","../node_modules/@antv/smart-color/esm/evaluators/colorDifference/CIEDE2000.js","../node_modules/@antv/smart-color/esm/evaluators/colorDifference/contrastRatio.js","../node_modules/@antv/smart-color/esm/evaluators/colorDifference/index.js","../node_modules/@antv/smart-color/esm/optimizers/optimizePaletteByGA.js","../node_modules/@antv/smart-color/esm/optimizers/index.js","../node_modules/@antv/color-schema/esm/src/schema/palette.js","../node_modules/@antv/smart-color/esm/generators/categoricalGeneration.js","../node_modules/@antv/smart-color/esm/generators/random.js","../node_modules/@antv/smart-color/esm/generators/randomGeneration.js","../node_modules/@antv/smart-color/esm/generators/validateConfiguration.js","../node_modules/@antv/smart-color/esm/generators/index.js","../node_modules/@antv/smart-color/esm/generators/analogousGeneration.js","../node_modules/@antv/smart-color/esm/generators/complementaryGeneration.js","../node_modules/@antv/smart-color/esm/generators/splitComplementaryGeneration.js","../node_modules/@antv/smart-color/esm/generators/triadicGeneration.js","../node_modules/@antv/smart-color/esm/generators/tetradicGeneration.js","../node_modules/@antv/smart-color/esm/generators/polychromaticGeneration.js","../node_modules/@antv/ava/esm/advisor/advise-pipeline/spec-mapping.js","../node_modules/@antv/ava/esm/advisor/advise-pipeline/data-to-advices.js","../node_modules/@antv/ava/esm/advisor/advise-pipeline/advicesForChart.js","../node_modules/@antv/ava/esm/advisor/lint-pipeline/lintRules.js","../node_modules/@antv/ava/esm/advisor/lint-pipeline/check-rules.js","../node_modules/@antv/ava/esm/advisor/lint-pipeline/getChartType.js","../node_modules/@antv/ava/esm/advisor/advisor.js","../src/components/views/ChartViewTabs.vue","../src/components/views/CodeView.vue","../src/components/views/HtmlPreview.vue","../src/components/views/JsonViewer.vue","../src/components/views/PluginView.vue","../src/components/views/SvgPreview.vue","../src/components/views/VisCode.vue","../src/components/views/VisDashboard.vue","../src/components/views/VisResponse.vue","../src/components/common/PromptBot.vue","../src/components/layout/FloatHelper.vue","../src/adapters/defaultAdapter.ts","../src/adapters/index.ts","../src/i18n/index.ts","../src/index.ts","../src/styles/index.ts","../src/composables/useChatApi.ts","../src/composables/useRequest.ts"],"sourcesContent":["const configProviderContextKey = Symbol();\n\nexport { configProviderContextKey };\n//# sourceMappingURL=constants.mjs.map\n","import { getCurrentInstance, inject, ref, computed, unref } from 'vue';\n\nconst defaultNamespace = \"el\";\nconst statePrefix = \"is-\";\nconst _bem = (namespace, block, blockSuffix, element, modifier) => {\n  let cls = `${namespace}-${block}`;\n  if (blockSuffix) {\n    cls += `-${blockSuffix}`;\n  }\n  if (element) {\n    cls += `__${element}`;\n  }\n  if (modifier) {\n    cls += `--${modifier}`;\n  }\n  return cls;\n};\nconst namespaceContextKey = Symbol(\"namespaceContextKey\");\nconst useGetDerivedNamespace = (namespaceOverrides) => {\n  const derivedNamespace = namespaceOverrides || (getCurrentInstance() ? inject(namespaceContextKey, ref(defaultNamespace)) : ref(defaultNamespace));\n  const namespace = computed(() => {\n    return unref(derivedNamespace) || defaultNamespace;\n  });\n  return namespace;\n};\nconst useNamespace = (block, namespaceOverrides) => {\n  const namespace = useGetDerivedNamespace(namespaceOverrides);\n  const b = (blockSuffix = \"\") => _bem(namespace.value, block, blockSuffix, \"\", \"\");\n  const e = (element) => element ? _bem(namespace.value, block, \"\", element, \"\") : \"\";\n  const m = (modifier) => modifier ? _bem(namespace.value, block, \"\", \"\", modifier) : \"\";\n  const be = (blockSuffix, element) => blockSuffix && element ? _bem(namespace.value, block, blockSuffix, element, \"\") : \"\";\n  const em = (element, modifier) => element && modifier ? _bem(namespace.value, block, \"\", element, modifier) : \"\";\n  const bm = (blockSuffix, modifier) => blockSuffix && modifier ? _bem(namespace.value, block, blockSuffix, \"\", modifier) : \"\";\n  const bem = (blockSuffix, element, modifier) => blockSuffix && element && modifier ? _bem(namespace.value, block, blockSuffix, element, modifier) : \"\";\n  const is = (name, ...args) => {\n    const state = args.length >= 1 ? args[0] : true;\n    return name && state ? `${statePrefix}${name}` : \"\";\n  };\n  const cssVar = (object) => {\n    const styles = {};\n    for (const key in object) {\n      if (object[key]) {\n        styles[`--${namespace.value}-${key}`] = object[key];\n      }\n    }\n    return styles;\n  };\n  const cssVarBlock = (object) => {\n    const styles = {};\n    for (const key in object) {\n      if (object[key]) {\n        styles[`--${namespace.value}-${block}-${key}`] = object[key];\n      }\n    }\n    return styles;\n  };\n  const cssVarName = (name) => `--${namespace.value}-${name}`;\n  const cssVarBlockName = (name) => `--${namespace.value}-${block}-${name}`;\n  return {\n    namespace,\n    b,\n    e,\n    m,\n    be,\n    em,\n    bm,\n    bem,\n    is,\n    cssVar,\n    cssVarName,\n    cssVarBlock,\n    cssVarBlockName\n  };\n};\n\nexport { defaultNamespace, namespaceContextKey, useGetDerivedNamespace, useNamespace };\n//# sourceMappingURL=index.mjs.map\n","/**\n* @vue/shared v3.5.22\n* (c) 2018-present Yuxi (Evan) You and Vue contributors\n* @license MIT\n**/\n// @__NO_SIDE_EFFECTS__\nfunction makeMap(str) {\n  const map = /* @__PURE__ */ Object.create(null);\n  for (const key of str.split(\",\")) map[key] = 1;\n  return (val) => val in map;\n}\n\nconst EMPTY_OBJ = !!(process.env.NODE_ENV !== \"production\") ? Object.freeze({}) : {};\nconst EMPTY_ARR = !!(process.env.NODE_ENV !== \"production\") ? Object.freeze([]) : [];\nconst NOOP = () => {\n};\nconst NO = () => false;\nconst isOn = (key) => key.charCodeAt(0) === 111 && key.charCodeAt(1) === 110 && // uppercase letter\n(key.charCodeAt(2) > 122 || key.charCodeAt(2) < 97);\nconst isModelListener = (key) => key.startsWith(\"onUpdate:\");\nconst extend = Object.assign;\nconst remove = (arr, el) => {\n  const i = arr.indexOf(el);\n  if (i > -1) {\n    arr.splice(i, 1);\n  }\n};\nconst hasOwnProperty = Object.prototype.hasOwnProperty;\nconst hasOwn = (val, key) => hasOwnProperty.call(val, key);\nconst isArray = Array.isArray;\nconst isMap = (val) => toTypeString(val) === \"[object Map]\";\nconst isSet = (val) => toTypeString(val) === \"[object Set]\";\nconst isDate = (val) => toTypeString(val) === \"[object Date]\";\nconst isRegExp = (val) => toTypeString(val) === \"[object RegExp]\";\nconst isFunction = (val) => typeof val === \"function\";\nconst isString = (val) => typeof val === \"string\";\nconst isSymbol = (val) => typeof val === \"symbol\";\nconst isObject = (val) => val !== null && typeof val === \"object\";\nconst isPromise = (val) => {\n  return (isObject(val) || isFunction(val)) && isFunction(val.then) && isFunction(val.catch);\n};\nconst objectToString = Object.prototype.toString;\nconst toTypeString = (value) => objectToString.call(value);\nconst toRawType = (value) => {\n  return toTypeString(value).slice(8, -1);\n};\nconst isPlainObject = (val) => toTypeString(val) === \"[object Object]\";\nconst isIntegerKey = (key) => isString(key) && key !== \"NaN\" && key[0] !== \"-\" && \"\" + parseInt(key, 10) === key;\nconst isReservedProp = /* @__PURE__ */ makeMap(\n  // the leading comma is intentional so empty string \"\" is also included\n  \",key,ref,ref_for,ref_key,onVnodeBeforeMount,onVnodeMounted,onVnodeBeforeUpdate,onVnodeUpdated,onVnodeBeforeUnmount,onVnodeUnmounted\"\n);\nconst isBuiltInDirective = /* @__PURE__ */ makeMap(\n  \"bind,cloak,else-if,else,for,html,if,model,on,once,pre,show,slot,text,memo\"\n);\nconst cacheStringFunction = (fn) => {\n  const cache = /* @__PURE__ */ Object.create(null);\n  return ((str) => {\n    const hit = cache[str];\n    return hit || (cache[str] = fn(str));\n  });\n};\nconst camelizeRE = /-\\w/g;\nconst camelize = cacheStringFunction(\n  (str) => {\n    return str.replace(camelizeRE, (c) => c.slice(1).toUpperCase());\n  }\n);\nconst hyphenateRE = /\\B([A-Z])/g;\nconst hyphenate = cacheStringFunction(\n  (str) => str.replace(hyphenateRE, \"-$1\").toLowerCase()\n);\nconst capitalize = cacheStringFunction((str) => {\n  return str.charAt(0).toUpperCase() + str.slice(1);\n});\nconst toHandlerKey = cacheStringFunction(\n  (str) => {\n    const s = str ? `on${capitalize(str)}` : ``;\n    return s;\n  }\n);\nconst hasChanged = (value, oldValue) => !Object.is(value, oldValue);\nconst invokeArrayFns = (fns, ...arg) => {\n  for (let i = 0; i < fns.length; i++) {\n    fns[i](...arg);\n  }\n};\nconst def = (obj, key, value, writable = false) => {\n  Object.defineProperty(obj, key, {\n    configurable: true,\n    enumerable: false,\n    writable,\n    value\n  });\n};\nconst looseToNumber = (val) => {\n  const n = parseFloat(val);\n  return isNaN(n) ? val : n;\n};\nconst toNumber = (val) => {\n  const n = isString(val) ? Number(val) : NaN;\n  return isNaN(n) ? val : n;\n};\nlet _globalThis;\nconst getGlobalThis = () => {\n  return _globalThis || (_globalThis = typeof globalThis !== \"undefined\" ? globalThis : typeof self !== \"undefined\" ? self : typeof window !== \"undefined\" ? window : typeof global !== \"undefined\" ? global : {});\n};\nconst identRE = /^[_$a-zA-Z\\xA0-\\uFFFF][_$a-zA-Z0-9\\xA0-\\uFFFF]*$/;\nfunction genPropsAccessExp(name) {\n  return identRE.test(name) ? `__props.${name}` : `__props[${JSON.stringify(name)}]`;\n}\nfunction genCacheKey(source, options) {\n  return source + JSON.stringify(\n    options,\n    (_, val) => typeof val === \"function\" ? val.toString() : val\n  );\n}\n\nconst PatchFlags = {\n  \"TEXT\": 1,\n  \"1\": \"TEXT\",\n  \"CLASS\": 2,\n  \"2\": \"CLASS\",\n  \"STYLE\": 4,\n  \"4\": \"STYLE\",\n  \"PROPS\": 8,\n  \"8\": \"PROPS\",\n  \"FULL_PROPS\": 16,\n  \"16\": \"FULL_PROPS\",\n  \"NEED_HYDRATION\": 32,\n  \"32\": \"NEED_HYDRATION\",\n  \"STABLE_FRAGMENT\": 64,\n  \"64\": \"STABLE_FRAGMENT\",\n  \"KEYED_FRAGMENT\": 128,\n  \"128\": \"KEYED_FRAGMENT\",\n  \"UNKEYED_FRAGMENT\": 256,\n  \"256\": \"UNKEYED_FRAGMENT\",\n  \"NEED_PATCH\": 512,\n  \"512\": \"NEED_PATCH\",\n  \"DYNAMIC_SLOTS\": 1024,\n  \"1024\": \"DYNAMIC_SLOTS\",\n  \"DEV_ROOT_FRAGMENT\": 2048,\n  \"2048\": \"DEV_ROOT_FRAGMENT\",\n  \"CACHED\": -1,\n  \"-1\": \"CACHED\",\n  \"BAIL\": -2,\n  \"-2\": \"BAIL\"\n};\nconst PatchFlagNames = {\n  [1]: `TEXT`,\n  [2]: `CLASS`,\n  [4]: `STYLE`,\n  [8]: `PROPS`,\n  [16]: `FULL_PROPS`,\n  [32]: `NEED_HYDRATION`,\n  [64]: `STABLE_FRAGMENT`,\n  [128]: `KEYED_FRAGMENT`,\n  [256]: `UNKEYED_FRAGMENT`,\n  [512]: `NEED_PATCH`,\n  [1024]: `DYNAMIC_SLOTS`,\n  [2048]: `DEV_ROOT_FRAGMENT`,\n  [-1]: `CACHED`,\n  [-2]: `BAIL`\n};\n\nconst ShapeFlags = {\n  \"ELEMENT\": 1,\n  \"1\": \"ELEMENT\",\n  \"FUNCTIONAL_COMPONENT\": 2,\n  \"2\": \"FUNCTIONAL_COMPONENT\",\n  \"STATEFUL_COMPONENT\": 4,\n  \"4\": \"STATEFUL_COMPONENT\",\n  \"TEXT_CHILDREN\": 8,\n  \"8\": \"TEXT_CHILDREN\",\n  \"ARRAY_CHILDREN\": 16,\n  \"16\": \"ARRAY_CHILDREN\",\n  \"SLOTS_CHILDREN\": 32,\n  \"32\": \"SLOTS_CHILDREN\",\n  \"TELEPORT\": 64,\n  \"64\": \"TELEPORT\",\n  \"SUSPENSE\": 128,\n  \"128\": \"SUSPENSE\",\n  \"COMPONENT_SHOULD_KEEP_ALIVE\": 256,\n  \"256\": \"COMPONENT_SHOULD_KEEP_ALIVE\",\n  \"COMPONENT_KEPT_ALIVE\": 512,\n  \"512\": \"COMPONENT_KEPT_ALIVE\",\n  \"COMPONENT\": 6,\n  \"6\": \"COMPONENT\"\n};\n\nconst SlotFlags = {\n  \"STABLE\": 1,\n  \"1\": \"STABLE\",\n  \"DYNAMIC\": 2,\n  \"2\": \"DYNAMIC\",\n  \"FORWARDED\": 3,\n  \"3\": \"FORWARDED\"\n};\nconst slotFlagsText = {\n  [1]: \"STABLE\",\n  [2]: \"DYNAMIC\",\n  [3]: \"FORWARDED\"\n};\n\nconst GLOBALS_ALLOWED = \"Infinity,undefined,NaN,isFinite,isNaN,parseFloat,parseInt,decodeURI,decodeURIComponent,encodeURI,encodeURIComponent,Math,Number,Date,Array,Object,Boolean,String,RegExp,Map,Set,JSON,Intl,BigInt,console,Error,Symbol\";\nconst isGloballyAllowed = /* @__PURE__ */ makeMap(GLOBALS_ALLOWED);\nconst isGloballyWhitelisted = isGloballyAllowed;\n\nconst range = 2;\nfunction generateCodeFrame(source, start = 0, end = source.length) {\n  start = Math.max(0, Math.min(start, source.length));\n  end = Math.max(0, Math.min(end, source.length));\n  if (start > end) return \"\";\n  let lines = source.split(/(\\r?\\n)/);\n  const newlineSequences = lines.filter((_, idx) => idx % 2 === 1);\n  lines = lines.filter((_, idx) => idx % 2 === 0);\n  let count = 0;\n  const res = [];\n  for (let i = 0; i < lines.length; i++) {\n    count += lines[i].length + (newlineSequences[i] && newlineSequences[i].length || 0);\n    if (count >= start) {\n      for (let j = i - range; j <= i + range || end > count; j++) {\n        if (j < 0 || j >= lines.length) continue;\n        const line = j + 1;\n        res.push(\n          `${line}${\" \".repeat(Math.max(3 - String(line).length, 0))}|  ${lines[j]}`\n        );\n        const lineLength = lines[j].length;\n        const newLineSeqLength = newlineSequences[j] && newlineSequences[j].length || 0;\n        if (j === i) {\n          const pad = start - (count - (lineLength + newLineSeqLength));\n          const length = Math.max(\n            1,\n            end > count ? lineLength - pad : end - start\n          );\n          res.push(`   |  ` + \" \".repeat(pad) + \"^\".repeat(length));\n        } else if (j > i) {\n          if (end > count) {\n            const length = Math.max(Math.min(end - count, lineLength), 1);\n            res.push(`   |  ` + \"^\".repeat(length));\n          }\n          count += lineLength + newLineSeqLength;\n        }\n      }\n      break;\n    }\n  }\n  return res.join(\"\\n\");\n}\n\nfunction normalizeStyle(value) {\n  if (isArray(value)) {\n    const res = {};\n    for (let i = 0; i < value.length; i++) {\n      const item = value[i];\n      const normalized = isString(item) ? parseStringStyle(item) : normalizeStyle(item);\n      if (normalized) {\n        for (const key in normalized) {\n          res[key] = normalized[key];\n        }\n      }\n    }\n    return res;\n  } else if (isString(value) || isObject(value)) {\n    return value;\n  }\n}\nconst listDelimiterRE = /;(?![^(]*\\))/g;\nconst propertyDelimiterRE = /:([^]+)/;\nconst styleCommentRE = /\\/\\*[^]*?\\*\\//g;\nfunction parseStringStyle(cssText) {\n  const ret = {};\n  cssText.replace(styleCommentRE, \"\").split(listDelimiterRE).forEach((item) => {\n    if (item) {\n      const tmp = item.split(propertyDelimiterRE);\n      tmp.length > 1 && (ret[tmp[0].trim()] = tmp[1].trim());\n    }\n  });\n  return ret;\n}\nfunction stringifyStyle(styles) {\n  if (!styles) return \"\";\n  if (isString(styles)) return styles;\n  let ret = \"\";\n  for (const key in styles) {\n    const value = styles[key];\n    if (isString(value) || typeof value === \"number\") {\n      const normalizedKey = key.startsWith(`--`) ? key : hyphenate(key);\n      ret += `${normalizedKey}:${value};`;\n    }\n  }\n  return ret;\n}\nfunction normalizeClass(value) {\n  let res = \"\";\n  if (isString(value)) {\n    res = value;\n  } else if (isArray(value)) {\n    for (let i = 0; i < value.length; i++) {\n      const normalized = normalizeClass(value[i]);\n      if (normalized) {\n        res += normalized + \" \";\n      }\n    }\n  } else if (isObject(value)) {\n    for (const name in value) {\n      if (value[name]) {\n        res += name + \" \";\n      }\n    }\n  }\n  return res.trim();\n}\nfunction normalizeProps(props) {\n  if (!props) return null;\n  let { class: klass, style } = props;\n  if (klass && !isString(klass)) {\n    props.class = normalizeClass(klass);\n  }\n  if (style) {\n    props.style = normalizeStyle(style);\n  }\n  return props;\n}\n\nconst HTML_TAGS = \"html,body,base,head,link,meta,style,title,address,article,aside,footer,header,hgroup,h1,h2,h3,h4,h5,h6,nav,section,div,dd,dl,dt,figcaption,figure,picture,hr,img,li,main,ol,p,pre,ul,a,b,abbr,bdi,bdo,br,cite,code,data,dfn,em,i,kbd,mark,q,rp,rt,ruby,s,samp,small,span,strong,sub,sup,time,u,var,wbr,area,audio,map,track,video,embed,object,param,source,canvas,script,noscript,del,ins,caption,col,colgroup,table,thead,tbody,td,th,tr,button,datalist,fieldset,form,input,label,legend,meter,optgroup,option,output,progress,select,textarea,details,dialog,menu,summary,template,blockquote,iframe,tfoot\";\nconst SVG_TAGS = \"svg,animate,animateMotion,animateTransform,circle,clipPath,color-profile,defs,desc,discard,ellipse,feBlend,feColorMatrix,feComponentTransfer,feComposite,feConvolveMatrix,feDiffuseLighting,feDisplacementMap,feDistantLight,feDropShadow,feFlood,feFuncA,feFuncB,feFuncG,feFuncR,feGaussianBlur,feImage,feMerge,feMergeNode,feMorphology,feOffset,fePointLight,feSpecularLighting,feSpotLight,feTile,feTurbulence,filter,foreignObject,g,hatch,hatchpath,image,line,linearGradient,marker,mask,mesh,meshgradient,meshpatch,meshrow,metadata,mpath,path,pattern,polygon,polyline,radialGradient,rect,set,solidcolor,stop,switch,symbol,text,textPath,title,tspan,unknown,use,view\";\nconst MATH_TAGS = \"annotation,annotation-xml,maction,maligngroup,malignmark,math,menclose,merror,mfenced,mfrac,mfraction,mglyph,mi,mlabeledtr,mlongdiv,mmultiscripts,mn,mo,mover,mpadded,mphantom,mprescripts,mroot,mrow,ms,mscarries,mscarry,msgroup,msline,mspace,msqrt,msrow,mstack,mstyle,msub,msubsup,msup,mtable,mtd,mtext,mtr,munder,munderover,none,semantics\";\nconst VOID_TAGS = \"area,base,br,col,embed,hr,img,input,link,meta,param,source,track,wbr\";\nconst isHTMLTag = /* @__PURE__ */ makeMap(HTML_TAGS);\nconst isSVGTag = /* @__PURE__ */ makeMap(SVG_TAGS);\nconst isMathMLTag = /* @__PURE__ */ makeMap(MATH_TAGS);\nconst isVoidTag = /* @__PURE__ */ makeMap(VOID_TAGS);\n\nconst specialBooleanAttrs = `itemscope,allowfullscreen,formnovalidate,ismap,nomodule,novalidate,readonly`;\nconst isSpecialBooleanAttr = /* @__PURE__ */ makeMap(specialBooleanAttrs);\nconst isBooleanAttr = /* @__PURE__ */ makeMap(\n  specialBooleanAttrs + `,async,autofocus,autoplay,controls,default,defer,disabled,hidden,inert,loop,open,required,reversed,scoped,seamless,checked,muted,multiple,selected`\n);\nfunction includeBooleanAttr(value) {\n  return !!value || value === \"\";\n}\nconst unsafeAttrCharRE = /[>/=\"'\\u0009\\u000a\\u000c\\u0020]/;\nconst attrValidationCache = {};\nfunction isSSRSafeAttrName(name) {\n  if (attrValidationCache.hasOwnProperty(name)) {\n    return attrValidationCache[name];\n  }\n  const isUnsafe = unsafeAttrCharRE.test(name);\n  if (isUnsafe) {\n    console.error(`unsafe attribute name: ${name}`);\n  }\n  return attrValidationCache[name] = !isUnsafe;\n}\nconst propsToAttrMap = {\n  acceptCharset: \"accept-charset\",\n  className: \"class\",\n  htmlFor: \"for\",\n  httpEquiv: \"http-equiv\"\n};\nconst isKnownHtmlAttr = /* @__PURE__ */ makeMap(\n  `accept,accept-charset,accesskey,action,align,allow,alt,async,autocapitalize,autocomplete,autofocus,autoplay,background,bgcolor,border,buffered,capture,challenge,charset,checked,cite,class,code,codebase,color,cols,colspan,content,contenteditable,contextmenu,controls,coords,crossorigin,csp,data,datetime,decoding,default,defer,dir,dirname,disabled,download,draggable,dropzone,enctype,enterkeyhint,for,form,formaction,formenctype,formmethod,formnovalidate,formtarget,headers,height,hidden,high,href,hreflang,http-equiv,icon,id,importance,inert,integrity,ismap,itemprop,keytype,kind,label,lang,language,loading,list,loop,low,manifest,max,maxlength,minlength,media,min,multiple,muted,name,novalidate,open,optimum,pattern,ping,placeholder,poster,preload,radiogroup,readonly,referrerpolicy,rel,required,reversed,rows,rowspan,sandbox,scope,scoped,selected,shape,size,sizes,slot,span,spellcheck,src,srcdoc,srclang,srcset,start,step,style,summary,tabindex,target,title,translate,type,usemap,value,width,wrap`\n);\nconst isKnownSvgAttr = /* @__PURE__ */ makeMap(\n  `xmlns,accent-height,accumulate,additive,alignment-baseline,alphabetic,amplitude,arabic-form,ascent,attributeName,attributeType,azimuth,baseFrequency,baseline-shift,baseProfile,bbox,begin,bias,by,calcMode,cap-height,class,clip,clipPathUnits,clip-path,clip-rule,color,color-interpolation,color-interpolation-filters,color-profile,color-rendering,contentScriptType,contentStyleType,crossorigin,cursor,cx,cy,d,decelerate,descent,diffuseConstant,direction,display,divisor,dominant-baseline,dur,dx,dy,edgeMode,elevation,enable-background,end,exponent,fill,fill-opacity,fill-rule,filter,filterRes,filterUnits,flood-color,flood-opacity,font-family,font-size,font-size-adjust,font-stretch,font-style,font-variant,font-weight,format,from,fr,fx,fy,g1,g2,glyph-name,glyph-orientation-horizontal,glyph-orientation-vertical,glyphRef,gradientTransform,gradientUnits,hanging,height,href,hreflang,horiz-adv-x,horiz-origin-x,id,ideographic,image-rendering,in,in2,intercept,k,k1,k2,k3,k4,kernelMatrix,kernelUnitLength,kerning,keyPoints,keySplines,keyTimes,lang,lengthAdjust,letter-spacing,lighting-color,limitingConeAngle,local,marker-end,marker-mid,marker-start,markerHeight,markerUnits,markerWidth,mask,maskContentUnits,maskUnits,mathematical,max,media,method,min,mode,name,numOctaves,offset,opacity,operator,order,orient,orientation,origin,overflow,overline-position,overline-thickness,panose-1,paint-order,path,pathLength,patternContentUnits,patternTransform,patternUnits,ping,pointer-events,points,pointsAtX,pointsAtY,pointsAtZ,preserveAlpha,preserveAspectRatio,primitiveUnits,r,radius,referrerPolicy,refX,refY,rel,rendering-intent,repeatCount,repeatDur,requiredExtensions,requiredFeatures,restart,result,rotate,rx,ry,scale,seed,shape-rendering,slope,spacing,specularConstant,specularExponent,speed,spreadMethod,startOffset,stdDeviation,stemh,stemv,stitchTiles,stop-color,stop-opacity,strikethrough-position,strikethrough-thickness,string,stroke,stroke-dasharray,stroke-dashoffset,stroke-linecap,stroke-linejoin,stroke-miterlimit,stroke-opacity,stroke-width,style,surfaceScale,systemLanguage,tabindex,tableValues,target,targetX,targetY,text-anchor,text-decoration,text-rendering,textLength,to,transform,transform-origin,type,u1,u2,underline-position,underline-thickness,unicode,unicode-bidi,unicode-range,units-per-em,v-alphabetic,v-hanging,v-ideographic,v-mathematical,values,vector-effect,version,vert-adv-y,vert-origin-x,vert-origin-y,viewBox,viewTarget,visibility,width,widths,word-spacing,writing-mode,x,x-height,x1,x2,xChannelSelector,xlink:actuate,xlink:arcrole,xlink:href,xlink:role,xlink:show,xlink:title,xlink:type,xmlns:xlink,xml:base,xml:lang,xml:space,y,y1,y2,yChannelSelector,z,zoomAndPan`\n);\nconst isKnownMathMLAttr = /* @__PURE__ */ makeMap(\n  `accent,accentunder,actiontype,align,alignmentscope,altimg,altimg-height,altimg-valign,altimg-width,alttext,bevelled,close,columnsalign,columnlines,columnspan,denomalign,depth,dir,display,displaystyle,encoding,equalcolumns,equalrows,fence,fontstyle,fontweight,form,frame,framespacing,groupalign,height,href,id,indentalign,indentalignfirst,indentalignlast,indentshift,indentshiftfirst,indentshiftlast,indextype,justify,largetop,largeop,lquote,lspace,mathbackground,mathcolor,mathsize,mathvariant,maxsize,minlabelspacing,mode,other,overflow,position,rowalign,rowlines,rowspan,rquote,rspace,scriptlevel,scriptminsize,scriptsizemultiplier,selection,separator,separators,shift,side,src,stackalign,stretchy,subscriptshift,superscriptshift,symmetric,voffset,width,widths,xlink:href,xlink:show,xlink:type,xmlns`\n);\nfunction isRenderableAttrValue(value) {\n  if (value == null) {\n    return false;\n  }\n  const type = typeof value;\n  return type === \"string\" || type === \"number\" || type === \"boolean\";\n}\n\nconst escapeRE = /[\"'&<>]/;\nfunction escapeHtml(string) {\n  const str = \"\" + string;\n  const match = escapeRE.exec(str);\n  if (!match) {\n    return str;\n  }\n  let html = \"\";\n  let escaped;\n  let index;\n  let lastIndex = 0;\n  for (index = match.index; index < str.length; index++) {\n    switch (str.charCodeAt(index)) {\n      case 34:\n        escaped = \"&quot;\";\n        break;\n      case 38:\n        escaped = \"&amp;\";\n        break;\n      case 39:\n        escaped = \"&#39;\";\n        break;\n      case 60:\n        escaped = \"&lt;\";\n        break;\n      case 62:\n        escaped = \"&gt;\";\n        break;\n      default:\n        continue;\n    }\n    if (lastIndex !== index) {\n      html += str.slice(lastIndex, index);\n    }\n    lastIndex = index + 1;\n    html += escaped;\n  }\n  return lastIndex !== index ? html + str.slice(lastIndex, index) : html;\n}\nconst commentStripRE = /^-?>|<!--|-->|--!>|<!-$/g;\nfunction escapeHtmlComment(src) {\n  return src.replace(commentStripRE, \"\");\n}\nconst cssVarNameEscapeSymbolsRE = /[ !\"#$%&'()*+,./:;<=>?@[\\\\\\]^`{|}~]/g;\nfunction getEscapedCssVarName(key, doubleEscape) {\n  return key.replace(\n    cssVarNameEscapeSymbolsRE,\n    (s) => doubleEscape ? s === '\"' ? '\\\\\\\\\\\\\"' : `\\\\\\\\${s}` : `\\\\${s}`\n  );\n}\n\nfunction looseCompareArrays(a, b) {\n  if (a.length !== b.length) return false;\n  let equal = true;\n  for (let i = 0; equal && i < a.length; i++) {\n    equal = looseEqual(a[i], b[i]);\n  }\n  return equal;\n}\nfunction looseEqual(a, b) {\n  if (a === b) return true;\n  let aValidType = isDate(a);\n  let bValidType = isDate(b);\n  if (aValidType || bValidType) {\n    return aValidType && bValidType ? a.getTime() === b.getTime() : false;\n  }\n  aValidType = isSymbol(a);\n  bValidType = isSymbol(b);\n  if (aValidType || bValidType) {\n    return a === b;\n  }\n  aValidType = isArray(a);\n  bValidType = isArray(b);\n  if (aValidType || bValidType) {\n    return aValidType && bValidType ? looseCompareArrays(a, b) : false;\n  }\n  aValidType = isObject(a);\n  bValidType = isObject(b);\n  if (aValidType || bValidType) {\n    if (!aValidType || !bValidType) {\n      return false;\n    }\n    const aKeysCount = Object.keys(a).length;\n    const bKeysCount = Object.keys(b).length;\n    if (aKeysCount !== bKeysCount) {\n      return false;\n    }\n    for (const key in a) {\n      const aHasKey = a.hasOwnProperty(key);\n      const bHasKey = b.hasOwnProperty(key);\n      if (aHasKey && !bHasKey || !aHasKey && bHasKey || !looseEqual(a[key], b[key])) {\n        return false;\n      }\n    }\n  }\n  return String(a) === String(b);\n}\nfunction looseIndexOf(arr, val) {\n  return arr.findIndex((item) => looseEqual(item, val));\n}\n\nconst isRef = (val) => {\n  return !!(val && val[\"__v_isRef\"] === true);\n};\nconst toDisplayString = (val) => {\n  return isString(val) ? val : val == null ? \"\" : isArray(val) || isObject(val) && (val.toString === objectToString || !isFunction(val.toString)) ? isRef(val) ? toDisplayString(val.value) : JSON.stringify(val, replacer, 2) : String(val);\n};\nconst replacer = (_key, val) => {\n  if (isRef(val)) {\n    return replacer(_key, val.value);\n  } else if (isMap(val)) {\n    return {\n      [`Map(${val.size})`]: [...val.entries()].reduce(\n        (entries, [key, val2], i) => {\n          entries[stringifySymbol(key, i) + \" =>\"] = val2;\n          return entries;\n        },\n        {}\n      )\n    };\n  } else if (isSet(val)) {\n    return {\n      [`Set(${val.size})`]: [...val.values()].map((v) => stringifySymbol(v))\n    };\n  } else if (isSymbol(val)) {\n    return stringifySymbol(val);\n  } else if (isObject(val) && !isArray(val) && !isPlainObject(val)) {\n    return String(val);\n  }\n  return val;\n};\nconst stringifySymbol = (v, i = \"\") => {\n  var _a;\n  return (\n    // Symbol.description in es2019+ so we need to cast here to pass\n    // the lib: es2016 check\n    isSymbol(v) ? `Symbol(${(_a = v.description) != null ? _a : i})` : v\n  );\n};\n\nfunction normalizeCssVarValue(value) {\n  if (value == null) {\n    return \"initial\";\n  }\n  if (typeof value === \"string\") {\n    return value === \"\" ? \" \" : value;\n  }\n  if (typeof value !== \"number\" || !Number.isFinite(value)) {\n    if (!!(process.env.NODE_ENV !== \"production\")) {\n      console.warn(\n        \"[Vue warn] Invalid value used for CSS binding. Expected a string or a finite number but received:\",\n        value\n      );\n    }\n  }\n  return String(value);\n}\n\nexport { EMPTY_ARR, EMPTY_OBJ, NO, NOOP, PatchFlagNames, PatchFlags, ShapeFlags, SlotFlags, camelize, capitalize, cssVarNameEscapeSymbolsRE, def, escapeHtml, escapeHtmlComment, extend, genCacheKey, genPropsAccessExp, generateCodeFrame, getEscapedCssVarName, getGlobalThis, hasChanged, hasOwn, hyphenate, includeBooleanAttr, invokeArrayFns, isArray, isBooleanAttr, isBuiltInDirective, isDate, isFunction, isGloballyAllowed, isGloballyWhitelisted, isHTMLTag, isIntegerKey, isKnownHtmlAttr, isKnownMathMLAttr, isKnownSvgAttr, isMap, isMathMLTag, isModelListener, isObject, isOn, isPlainObject, isPromise, isRegExp, isRenderableAttrValue, isReservedProp, isSSRSafeAttrName, isSVGTag, isSet, isSpecialBooleanAttr, isString, isSymbol, isVoidTag, looseEqual, looseIndexOf, looseToNumber, makeMap, normalizeClass, normalizeCssVarValue, normalizeProps, normalizeStyle, objectToString, parseStringStyle, propsToAttrMap, remove, slotFlagsText, stringifyStyle, toDisplayString, toHandlerKey, toNumber, toRawType, toTypeString };\n","/** Detect free variable `global` from Node.js. */\nvar freeGlobal = typeof global == 'object' && global && global.Object === Object && global;\n\nexport default freeGlobal;\n","import freeGlobal from './_freeGlobal.js';\n\n/** Detect free variable `self`. */\nvar freeSelf = typeof self == 'object' && self && self.Object === Object && self;\n\n/** Used as a reference to the global object. */\nvar root = freeGlobal || freeSelf || Function('return this')();\n\nexport default root;\n","import root from './_root.js';\n\n/** Built-in value references. */\nvar Symbol = root.Symbol;\n\nexport default Symbol;\n","import Symbol from './_Symbol.js';\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Used to resolve the\n * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)\n * of values.\n */\nvar nativeObjectToString = objectProto.toString;\n\n/** Built-in value references. */\nvar symToStringTag = Symbol ? Symbol.toStringTag : undefined;\n\n/**\n * A specialized version of `baseGetTag` which ignores `Symbol.toStringTag` values.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the raw `toStringTag`.\n */\nfunction getRawTag(value) {\n  var isOwn = hasOwnProperty.call(value, symToStringTag),\n      tag = value[symToStringTag];\n\n  try {\n    value[symToStringTag] = undefined;\n    var unmasked = true;\n  } catch (e) {}\n\n  var result = nativeObjectToString.call(value);\n  if (unmasked) {\n    if (isOwn) {\n      value[symToStringTag] = tag;\n    } else {\n      delete value[symToStringTag];\n    }\n  }\n  return result;\n}\n\nexport default getRawTag;\n","/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/**\n * Used to resolve the\n * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)\n * of values.\n */\nvar nativeObjectToString = objectProto.toString;\n\n/**\n * Converts `value` to a string using `Object.prototype.toString`.\n *\n * @private\n * @param {*} value The value to convert.\n * @returns {string} Returns the converted string.\n */\nfunction objectToString(value) {\n  return nativeObjectToString.call(value);\n}\n\nexport default objectToString;\n","import Symbol from './_Symbol.js';\nimport getRawTag from './_getRawTag.js';\nimport objectToString from './_objectToString.js';\n\n/** `Object#toString` result references. */\nvar nullTag = '[object Null]',\n    undefinedTag = '[object Undefined]';\n\n/** Built-in value references. */\nvar symToStringTag = Symbol ? Symbol.toStringTag : undefined;\n\n/**\n * The base implementation of `getTag` without fallbacks for buggy environments.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the `toStringTag`.\n */\nfunction baseGetTag(value) {\n  if (value == null) {\n    return value === undefined ? undefinedTag : nullTag;\n  }\n  return (symToStringTag && symToStringTag in Object(value))\n    ? getRawTag(value)\n    : objectToString(value);\n}\n\nexport default baseGetTag;\n","/**\n * Checks if `value` is object-like. A value is object-like if it's not `null`\n * and has a `typeof` result of \"object\".\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is object-like, else `false`.\n * @example\n *\n * _.isObjectLike({});\n * // => true\n *\n * _.isObjectLike([1, 2, 3]);\n * // => true\n *\n * _.isObjectLike(_.noop);\n * // => false\n *\n * _.isObjectLike(null);\n * // => false\n */\nfunction isObjectLike(value) {\n  return value != null && typeof value == 'object';\n}\n\nexport default isObjectLike;\n","import baseGetTag from './_baseGetTag.js';\nimport isObjectLike from './isObjectLike.js';\n\n/** `Object#toString` result references. */\nvar symbolTag = '[object Symbol]';\n\n/**\n * Checks if `value` is classified as a `Symbol` primitive or object.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a symbol, else `false`.\n * @example\n *\n * _.isSymbol(Symbol.iterator);\n * // => true\n *\n * _.isSymbol('abc');\n * // => false\n */\nfunction isSymbol(value) {\n  return typeof value == 'symbol' ||\n    (isObjectLike(value) && baseGetTag(value) == symbolTag);\n}\n\nexport default isSymbol;\n","/**\n * A specialized version of `_.map` for arrays without support for iteratee\n * shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array} Returns the new mapped array.\n */\nfunction arrayMap(array, iteratee) {\n  var index = -1,\n      length = array == null ? 0 : array.length,\n      result = Array(length);\n\n  while (++index < length) {\n    result[index] = iteratee(array[index], index, array);\n  }\n  return result;\n}\n\nexport default arrayMap;\n","/**\n * Checks if `value` is classified as an `Array` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an array, else `false`.\n * @example\n *\n * _.isArray([1, 2, 3]);\n * // => true\n *\n * _.isArray(document.body.children);\n * // => false\n *\n * _.isArray('abc');\n * // => false\n *\n * _.isArray(_.noop);\n * // => false\n */\nvar isArray = Array.isArray;\n\nexport default isArray;\n","import Symbol from './_Symbol.js';\nimport arrayMap from './_arrayMap.js';\nimport isArray from './isArray.js';\nimport isSymbol from './isSymbol.js';\n\n/** Used as references for various `Number` constants. */\nvar INFINITY = 1 / 0;\n\n/** Used to convert symbols to primitives and strings. */\nvar symbolProto = Symbol ? Symbol.prototype : undefined,\n    symbolToString = symbolProto ? symbolProto.toString : undefined;\n\n/**\n * The base implementation of `_.toString` which doesn't convert nullish\n * values to empty strings.\n *\n * @private\n * @param {*} value The value to process.\n * @returns {string} Returns the string.\n */\nfunction baseToString(value) {\n  // Exit early for strings to avoid a performance hit in some environments.\n  if (typeof value == 'string') {\n    return value;\n  }\n  if (isArray(value)) {\n    // Recursively convert values (susceptible to call stack limits).\n    return arrayMap(value, baseToString) + '';\n  }\n  if (isSymbol(value)) {\n    return symbolToString ? symbolToString.call(value) : '';\n  }\n  var result = (value + '');\n  return (result == '0' && (1 / value) == -INFINITY) ? '-0' : result;\n}\n\nexport default baseToString;\n","/** Used to match a single whitespace character. */\nvar reWhitespace = /\\s/;\n\n/**\n * Used by `_.trim` and `_.trimEnd` to get the index of the last non-whitespace\n * character of `string`.\n *\n * @private\n * @param {string} string The string to inspect.\n * @returns {number} Returns the index of the last non-whitespace character.\n */\nfunction trimmedEndIndex(string) {\n  var index = string.length;\n\n  while (index-- && reWhitespace.test(string.charAt(index))) {}\n  return index;\n}\n\nexport default trimmedEndIndex;\n","import trimmedEndIndex from './_trimmedEndIndex.js';\n\n/** Used to match leading whitespace. */\nvar reTrimStart = /^\\s+/;\n\n/**\n * The base implementation of `_.trim`.\n *\n * @private\n * @param {string} string The string to trim.\n * @returns {string} Returns the trimmed string.\n */\nfunction baseTrim(string) {\n  return string\n    ? string.slice(0, trimmedEndIndex(string) + 1).replace(reTrimStart, '')\n    : string;\n}\n\nexport default baseTrim;\n","/**\n * Checks if `value` is the\n * [language type](http://www.ecma-international.org/ecma-262/7.0/#sec-ecmascript-language-types)\n * of `Object`. (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`)\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an object, else `false`.\n * @example\n *\n * _.isObject({});\n * // => true\n *\n * _.isObject([1, 2, 3]);\n * // => true\n *\n * _.isObject(_.noop);\n * // => true\n *\n * _.isObject(null);\n * // => false\n */\nfunction isObject(value) {\n  var type = typeof value;\n  return value != null && (type == 'object' || type == 'function');\n}\n\nexport default isObject;\n","import baseTrim from './_baseTrim.js';\nimport isObject from './isObject.js';\nimport isSymbol from './isSymbol.js';\n\n/** Used as references for various `Number` constants. */\nvar NAN = 0 / 0;\n\n/** Used to detect bad signed hexadecimal string values. */\nvar reIsBadHex = /^[-+]0x[0-9a-f]+$/i;\n\n/** Used to detect binary string values. */\nvar reIsBinary = /^0b[01]+$/i;\n\n/** Used to detect octal string values. */\nvar reIsOctal = /^0o[0-7]+$/i;\n\n/** Built-in method references without a dependency on `root`. */\nvar freeParseInt = parseInt;\n\n/**\n * Converts `value` to a number.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to process.\n * @returns {number} Returns the number.\n * @example\n *\n * _.toNumber(3.2);\n * // => 3.2\n *\n * _.toNumber(Number.MIN_VALUE);\n * // => 5e-324\n *\n * _.toNumber(Infinity);\n * // => Infinity\n *\n * _.toNumber('3.2');\n * // => 3.2\n */\nfunction toNumber(value) {\n  if (typeof value == 'number') {\n    return value;\n  }\n  if (isSymbol(value)) {\n    return NAN;\n  }\n  if (isObject(value)) {\n    var other = typeof value.valueOf == 'function' ? value.valueOf() : value;\n    value = isObject(other) ? (other + '') : other;\n  }\n  if (typeof value != 'string') {\n    return value === 0 ? value : +value;\n  }\n  value = baseTrim(value);\n  var isBinary = reIsBinary.test(value);\n  return (isBinary || reIsOctal.test(value))\n    ? freeParseInt(value.slice(2), isBinary ? 2 : 8)\n    : (reIsBadHex.test(value) ? NAN : +value);\n}\n\nexport default toNumber;\n","/**\n * This method returns the first argument it receives.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Util\n * @param {*} value Any value.\n * @returns {*} Returns `value`.\n * @example\n *\n * var object = { 'a': 1 };\n *\n * console.log(_.identity(object) === object);\n * // => true\n */\nfunction identity(value) {\n  return value;\n}\n\nexport default identity;\n","import baseGetTag from './_baseGetTag.js';\nimport isObject from './isObject.js';\n\n/** `Object#toString` result references. */\nvar asyncTag = '[object AsyncFunction]',\n    funcTag = '[object Function]',\n    genTag = '[object GeneratorFunction]',\n    proxyTag = '[object Proxy]';\n\n/**\n * Checks if `value` is classified as a `Function` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a function, else `false`.\n * @example\n *\n * _.isFunction(_);\n * // => true\n *\n * _.isFunction(/abc/);\n * // => false\n */\nfunction isFunction(value) {\n  if (!isObject(value)) {\n    return false;\n  }\n  // The use of `Object#toString` avoids issues with the `typeof` operator\n  // in Safari 9 which returns 'object' for typed arrays and other constructors.\n  var tag = baseGetTag(value);\n  return tag == funcTag || tag == genTag || tag == asyncTag || tag == proxyTag;\n}\n\nexport default isFunction;\n","import root from './_root.js';\n\n/** Used to detect overreaching core-js shims. */\nvar coreJsData = root['__core-js_shared__'];\n\nexport default coreJsData;\n","import coreJsData from './_coreJsData.js';\n\n/** Used to detect methods masquerading as native. */\nvar maskSrcKey = (function() {\n  var uid = /[^.]+$/.exec(coreJsData && coreJsData.keys && coreJsData.keys.IE_PROTO || '');\n  return uid ? ('Symbol(src)_1.' + uid) : '';\n}());\n\n/**\n * Checks if `func` has its source masked.\n *\n * @private\n * @param {Function} func The function to check.\n * @returns {boolean} Returns `true` if `func` is masked, else `false`.\n */\nfunction isMasked(func) {\n  return !!maskSrcKey && (maskSrcKey in func);\n}\n\nexport default isMasked;\n","/** Used for built-in method references. */\nvar funcProto = Function.prototype;\n\n/** Used to resolve the decompiled source of functions. */\nvar funcToString = funcProto.toString;\n\n/**\n * Converts `func` to its source code.\n *\n * @private\n * @param {Function} func The function to convert.\n * @returns {string} Returns the source code.\n */\nfunction toSource(func) {\n  if (func != null) {\n    try {\n      return funcToString.call(func);\n    } catch (e) {}\n    try {\n      return (func + '');\n    } catch (e) {}\n  }\n  return '';\n}\n\nexport default toSource;\n","import isFunction from './isFunction.js';\nimport isMasked from './_isMasked.js';\nimport isObject from './isObject.js';\nimport toSource from './_toSource.js';\n\n/**\n * Used to match `RegExp`\n * [syntax characters](http://ecma-international.org/ecma-262/7.0/#sec-patterns).\n */\nvar reRegExpChar = /[\\\\^$.*+?()[\\]{}|]/g;\n\n/** Used to detect host constructors (Safari). */\nvar reIsHostCtor = /^\\[object .+?Constructor\\]$/;\n\n/** Used for built-in method references. */\nvar funcProto = Function.prototype,\n    objectProto = Object.prototype;\n\n/** Used to resolve the decompiled source of functions. */\nvar funcToString = funcProto.toString;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/** Used to detect if a method is native. */\nvar reIsNative = RegExp('^' +\n  funcToString.call(hasOwnProperty).replace(reRegExpChar, '\\\\$&')\n  .replace(/hasOwnProperty|(function).*?(?=\\\\\\()| for .+?(?=\\\\\\])/g, '$1.*?') + '$'\n);\n\n/**\n * The base implementation of `_.isNative` without bad shim checks.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a native function,\n *  else `false`.\n */\nfunction baseIsNative(value) {\n  if (!isObject(value) || isMasked(value)) {\n    return false;\n  }\n  var pattern = isFunction(value) ? reIsNative : reIsHostCtor;\n  return pattern.test(toSource(value));\n}\n\nexport default baseIsNative;\n","import baseIsNative from './_baseIsNative.js';\nimport getValue from './_getValue.js';\n\n/**\n * Gets the native function at `key` of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {string} key The key of the method to get.\n * @returns {*} Returns the function if it's native, else `undefined`.\n */\nfunction getNative(object, key) {\n  var value = getValue(object, key);\n  return baseIsNative(value) ? value : undefined;\n}\n\nexport default getNative;\n","/**\n * Gets the value at `key` of `object`.\n *\n * @private\n * @param {Object} [object] The object to query.\n * @param {string} key The key of the property to get.\n * @returns {*} Returns the property value.\n */\nfunction getValue(object, key) {\n  return object == null ? undefined : object[key];\n}\n\nexport default getValue;\n","import getNative from './_getNative.js';\nimport root from './_root.js';\n\n/* Built-in method references that are verified to be native. */\nvar WeakMap = getNative(root, 'WeakMap');\n\nexport default WeakMap;\n","import isObject from './isObject.js';\n\n/** Built-in value references. */\nvar objectCreate = Object.create;\n\n/**\n * The base implementation of `_.create` without support for assigning\n * properties to the created object.\n *\n * @private\n * @param {Object} proto The object to inherit from.\n * @returns {Object} Returns the new object.\n */\nvar baseCreate = (function() {\n  function object() {}\n  return function(proto) {\n    if (!isObject(proto)) {\n      return {};\n    }\n    if (objectCreate) {\n      return objectCreate(proto);\n    }\n    object.prototype = proto;\n    var result = new object;\n    object.prototype = undefined;\n    return result;\n  };\n}());\n\nexport default baseCreate;\n","/** Used to detect hot functions by number of calls within a span of milliseconds. */\nvar HOT_COUNT = 800,\n    HOT_SPAN = 16;\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeNow = Date.now;\n\n/**\n * Creates a function that'll short out and invoke `identity` instead\n * of `func` when it's called `HOT_COUNT` or more times in `HOT_SPAN`\n * milliseconds.\n *\n * @private\n * @param {Function} func The function to restrict.\n * @returns {Function} Returns the new shortable function.\n */\nfunction shortOut(func) {\n  var count = 0,\n      lastCalled = 0;\n\n  return function() {\n    var stamp = nativeNow(),\n        remaining = HOT_SPAN - (stamp - lastCalled);\n\n    lastCalled = stamp;\n    if (remaining > 0) {\n      if (++count >= HOT_COUNT) {\n        return arguments[0];\n      }\n    } else {\n      count = 0;\n    }\n    return func.apply(undefined, arguments);\n  };\n}\n\nexport default shortOut;\n","import getNative from './_getNative.js';\n\nvar defineProperty = (function() {\n  try {\n    var func = getNative(Object, 'defineProperty');\n    func({}, '', {});\n    return func;\n  } catch (e) {}\n}());\n\nexport default defineProperty;\n","import constant from './constant.js';\nimport defineProperty from './_defineProperty.js';\nimport identity from './identity.js';\n\n/**\n * The base implementation of `setToString` without support for hot loop shorting.\n *\n * @private\n * @param {Function} func The function to modify.\n * @param {Function} string The `toString` result.\n * @returns {Function} Returns `func`.\n */\nvar baseSetToString = !defineProperty ? identity : function(func, string) {\n  return defineProperty(func, 'toString', {\n    'configurable': true,\n    'enumerable': false,\n    'value': constant(string),\n    'writable': true\n  });\n};\n\nexport default baseSetToString;\n","/**\n * Creates a function that returns `value`.\n *\n * @static\n * @memberOf _\n * @since 2.4.0\n * @category Util\n * @param {*} value The value to return from the new function.\n * @returns {Function} Returns the new constant function.\n * @example\n *\n * var objects = _.times(2, _.constant({ 'a': 1 }));\n *\n * console.log(objects);\n * // => [{ 'a': 1 }, { 'a': 1 }]\n *\n * console.log(objects[0] === objects[1]);\n * // => true\n */\nfunction constant(value) {\n  return function() {\n    return value;\n  };\n}\n\nexport default constant;\n","import baseSetToString from './_baseSetToString.js';\nimport shortOut from './_shortOut.js';\n\n/**\n * Sets the `toString` method of `func` to return `string`.\n *\n * @private\n * @param {Function} func The function to modify.\n * @param {Function} string The `toString` result.\n * @returns {Function} Returns `func`.\n */\nvar setToString = shortOut(baseSetToString);\n\nexport default setToString;\n","/** Used as references for various `Number` constants. */\nvar MAX_SAFE_INTEGER = 9007199254740991;\n\n/** Used to detect unsigned integer values. */\nvar reIsUint = /^(?:0|[1-9]\\d*)$/;\n\n/**\n * Checks if `value` is a valid array-like index.\n *\n * @private\n * @param {*} value The value to check.\n * @param {number} [length=MAX_SAFE_INTEGER] The upper bounds of a valid index.\n * @returns {boolean} Returns `true` if `value` is a valid index, else `false`.\n */\nfunction isIndex(value, length) {\n  var type = typeof value;\n  length = length == null ? MAX_SAFE_INTEGER : length;\n\n  return !!length &&\n    (type == 'number' ||\n      (type != 'symbol' && reIsUint.test(value))) &&\n        (value > -1 && value % 1 == 0 && value < length);\n}\n\nexport default isIndex;\n","import defineProperty from './_defineProperty.js';\n\n/**\n * The base implementation of `assignValue` and `assignMergeValue` without\n * value checks.\n *\n * @private\n * @param {Object} object The object to modify.\n * @param {string} key The key of the property to assign.\n * @param {*} value The value to assign.\n */\nfunction baseAssignValue(object, key, value) {\n  if (key == '__proto__' && defineProperty) {\n    defineProperty(object, key, {\n      'configurable': true,\n      'enumerable': true,\n      'value': value,\n      'writable': true\n    });\n  } else {\n    object[key] = value;\n  }\n}\n\nexport default baseAssignValue;\n","/**\n * Performs a\n * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * comparison between two values to determine if they are equivalent.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @returns {boolean} Returns `true` if the values are equivalent, else `false`.\n * @example\n *\n * var object = { 'a': 1 };\n * var other = { 'a': 1 };\n *\n * _.eq(object, object);\n * // => true\n *\n * _.eq(object, other);\n * // => false\n *\n * _.eq('a', 'a');\n * // => true\n *\n * _.eq('a', Object('a'));\n * // => false\n *\n * _.eq(NaN, NaN);\n * // => true\n */\nfunction eq(value, other) {\n  return value === other || (value !== value && other !== other);\n}\n\nexport default eq;\n","import baseAssignValue from './_baseAssignValue.js';\nimport eq from './eq.js';\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Assigns `value` to `key` of `object` if the existing value is not equivalent\n * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * for equality comparisons.\n *\n * @private\n * @param {Object} object The object to modify.\n * @param {string} key The key of the property to assign.\n * @param {*} value The value to assign.\n */\nfunction assignValue(object, key, value) {\n  var objValue = object[key];\n  if (!(hasOwnProperty.call(object, key) && eq(objValue, value)) ||\n      (value === undefined && !(key in object))) {\n    baseAssignValue(object, key, value);\n  }\n}\n\nexport default assignValue;\n","import assignValue from './_assignValue.js';\nimport baseAssignValue from './_baseAssignValue.js';\n\n/**\n * Copies properties of `source` to `object`.\n *\n * @private\n * @param {Object} source The object to copy properties from.\n * @param {Array} props The property identifiers to copy.\n * @param {Object} [object={}] The object to copy properties to.\n * @param {Function} [customizer] The function to customize copied values.\n * @returns {Object} Returns `object`.\n */\nfunction copyObject(source, props, object, customizer) {\n  var isNew = !object;\n  object || (object = {});\n\n  var index = -1,\n      length = props.length;\n\n  while (++index < length) {\n    var key = props[index];\n\n    var newValue = customizer\n      ? customizer(object[key], source[key], key, object, source)\n      : undefined;\n\n    if (newValue === undefined) {\n      newValue = source[key];\n    }\n    if (isNew) {\n      baseAssignValue(object, key, newValue);\n    } else {\n      assignValue(object, key, newValue);\n    }\n  }\n  return object;\n}\n\nexport default copyObject;\n","import apply from './_apply.js';\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeMax = Math.max;\n\n/**\n * A specialized version of `baseRest` which transforms the rest array.\n *\n * @private\n * @param {Function} func The function to apply a rest parameter to.\n * @param {number} [start=func.length-1] The start position of the rest parameter.\n * @param {Function} transform The rest array transform.\n * @returns {Function} Returns the new function.\n */\nfunction overRest(func, start, transform) {\n  start = nativeMax(start === undefined ? (func.length - 1) : start, 0);\n  return function() {\n    var args = arguments,\n        index = -1,\n        length = nativeMax(args.length - start, 0),\n        array = Array(length);\n\n    while (++index < length) {\n      array[index] = args[start + index];\n    }\n    index = -1;\n    var otherArgs = Array(start + 1);\n    while (++index < start) {\n      otherArgs[index] = args[index];\n    }\n    otherArgs[start] = transform(array);\n    return apply(func, this, otherArgs);\n  };\n}\n\nexport default overRest;\n","/**\n * A faster alternative to `Function#apply`, this function invokes `func`\n * with the `this` binding of `thisArg` and the arguments of `args`.\n *\n * @private\n * @param {Function} func The function to invoke.\n * @param {*} thisArg The `this` binding of `func`.\n * @param {Array} args The arguments to invoke `func` with.\n * @returns {*} Returns the result of `func`.\n */\nfunction apply(func, thisArg, args) {\n  switch (args.length) {\n    case 0: return func.call(thisArg);\n    case 1: return func.call(thisArg, args[0]);\n    case 2: return func.call(thisArg, args[0], args[1]);\n    case 3: return func.call(thisArg, args[0], args[1], args[2]);\n  }\n  return func.apply(thisArg, args);\n}\n\nexport default apply;\n","/** Used as references for various `Number` constants. */\nvar MAX_SAFE_INTEGER = 9007199254740991;\n\n/**\n * Checks if `value` is a valid array-like length.\n *\n * **Note:** This method is loosely based on\n * [`ToLength`](http://ecma-international.org/ecma-262/7.0/#sec-tolength).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a valid length, else `false`.\n * @example\n *\n * _.isLength(3);\n * // => true\n *\n * _.isLength(Number.MIN_VALUE);\n * // => false\n *\n * _.isLength(Infinity);\n * // => false\n *\n * _.isLength('3');\n * // => false\n */\nfunction isLength(value) {\n  return typeof value == 'number' &&\n    value > -1 && value % 1 == 0 && value <= MAX_SAFE_INTEGER;\n}\n\nexport default isLength;\n","import isFunction from './isFunction.js';\nimport isLength from './isLength.js';\n\n/**\n * Checks if `value` is array-like. A value is considered array-like if it's\n * not a function and has a `value.length` that's an integer greater than or\n * equal to `0` and less than or equal to `Number.MAX_SAFE_INTEGER`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is array-like, else `false`.\n * @example\n *\n * _.isArrayLike([1, 2, 3]);\n * // => true\n *\n * _.isArrayLike(document.body.children);\n * // => true\n *\n * _.isArrayLike('abc');\n * // => true\n *\n * _.isArrayLike(_.noop);\n * // => false\n */\nfunction isArrayLike(value) {\n  return value != null && isLength(value.length) && !isFunction(value);\n}\n\nexport default isArrayLike;\n","/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/**\n * Checks if `value` is likely a prototype object.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a prototype, else `false`.\n */\nfunction isPrototype(value) {\n  var Ctor = value && value.constructor,\n      proto = (typeof Ctor == 'function' && Ctor.prototype) || objectProto;\n\n  return value === proto;\n}\n\nexport default isPrototype;\n","import baseGetTag from './_baseGetTag.js';\nimport isObjectLike from './isObjectLike.js';\n\n/** `Object#toString` result references. */\nvar argsTag = '[object Arguments]';\n\n/**\n * The base implementation of `_.isArguments`.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an `arguments` object,\n */\nfunction baseIsArguments(value) {\n  return isObjectLike(value) && baseGetTag(value) == argsTag;\n}\n\nexport default baseIsArguments;\n","import baseIsArguments from './_baseIsArguments.js';\nimport isObjectLike from './isObjectLike.js';\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/** Built-in value references. */\nvar propertyIsEnumerable = objectProto.propertyIsEnumerable;\n\n/**\n * Checks if `value` is likely an `arguments` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an `arguments` object,\n *  else `false`.\n * @example\n *\n * _.isArguments(function() { return arguments; }());\n * // => true\n *\n * _.isArguments([1, 2, 3]);\n * // => false\n */\nvar isArguments = baseIsArguments(function() { return arguments; }()) ? baseIsArguments : function(value) {\n  return isObjectLike(value) && hasOwnProperty.call(value, 'callee') &&\n    !propertyIsEnumerable.call(value, 'callee');\n};\n\nexport default isArguments;\n","import root from './_root.js';\nimport stubFalse from './stubFalse.js';\n\n/** Detect free variable `exports`. */\nvar freeExports = typeof exports == 'object' && exports && !exports.nodeType && exports;\n\n/** Detect free variable `module`. */\nvar freeModule = freeExports && typeof module == 'object' && module && !module.nodeType && module;\n\n/** Detect the popular CommonJS extension `module.exports`. */\nvar moduleExports = freeModule && freeModule.exports === freeExports;\n\n/** Built-in value references. */\nvar Buffer = moduleExports ? root.Buffer : undefined;\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeIsBuffer = Buffer ? Buffer.isBuffer : undefined;\n\n/**\n * Checks if `value` is a buffer.\n *\n * @static\n * @memberOf _\n * @since 4.3.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a buffer, else `false`.\n * @example\n *\n * _.isBuffer(new Buffer(2));\n * // => true\n *\n * _.isBuffer(new Uint8Array(2));\n * // => false\n */\nvar isBuffer = nativeIsBuffer || stubFalse;\n\nexport default isBuffer;\n","/**\n * This method returns `false`.\n *\n * @static\n * @memberOf _\n * @since 4.13.0\n * @category Util\n * @returns {boolean} Returns `false`.\n * @example\n *\n * _.times(2, _.stubFalse);\n * // => [false, false]\n */\nfunction stubFalse() {\n  return false;\n}\n\nexport default stubFalse;\n","import baseGetTag from './_baseGetTag.js';\nimport isLength from './isLength.js';\nimport isObjectLike from './isObjectLike.js';\n\n/** `Object#toString` result references. */\nvar argsTag = '[object Arguments]',\n    arrayTag = '[object Array]',\n    boolTag = '[object Boolean]',\n    dateTag = '[object Date]',\n    errorTag = '[object Error]',\n    funcTag = '[object Function]',\n    mapTag = '[object Map]',\n    numberTag = '[object Number]',\n    objectTag = '[object Object]',\n    regexpTag = '[object RegExp]',\n    setTag = '[object Set]',\n    stringTag = '[object String]',\n    weakMapTag = '[object WeakMap]';\n\nvar arrayBufferTag = '[object ArrayBuffer]',\n    dataViewTag = '[object DataView]',\n    float32Tag = '[object Float32Array]',\n    float64Tag = '[object Float64Array]',\n    int8Tag = '[object Int8Array]',\n    int16Tag = '[object Int16Array]',\n    int32Tag = '[object Int32Array]',\n    uint8Tag = '[object Uint8Array]',\n    uint8ClampedTag = '[object Uint8ClampedArray]',\n    uint16Tag = '[object Uint16Array]',\n    uint32Tag = '[object Uint32Array]';\n\n/** Used to identify `toStringTag` values of typed arrays. */\nvar typedArrayTags = {};\ntypedArrayTags[float32Tag] = typedArrayTags[float64Tag] =\ntypedArrayTags[int8Tag] = typedArrayTags[int16Tag] =\ntypedArrayTags[int32Tag] = typedArrayTags[uint8Tag] =\ntypedArrayTags[uint8ClampedTag] = typedArrayTags[uint16Tag] =\ntypedArrayTags[uint32Tag] = true;\ntypedArrayTags[argsTag] = typedArrayTags[arrayTag] =\ntypedArrayTags[arrayBufferTag] = typedArrayTags[boolTag] =\ntypedArrayTags[dataViewTag] = typedArrayTags[dateTag] =\ntypedArrayTags[errorTag] = typedArrayTags[funcTag] =\ntypedArrayTags[mapTag] = typedArrayTags[numberTag] =\ntypedArrayTags[objectTag] = typedArrayTags[regexpTag] =\ntypedArrayTags[setTag] = typedArrayTags[stringTag] =\ntypedArrayTags[weakMapTag] = false;\n\n/**\n * The base implementation of `_.isTypedArray` without Node.js optimizations.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a typed array, else `false`.\n */\nfunction baseIsTypedArray(value) {\n  return isObjectLike(value) &&\n    isLength(value.length) && !!typedArrayTags[baseGetTag(value)];\n}\n\nexport default baseIsTypedArray;\n","/**\n * The base implementation of `_.unary` without support for storing metadata.\n *\n * @private\n * @param {Function} func The function to cap arguments for.\n * @returns {Function} Returns the new capped function.\n */\nfunction baseUnary(func) {\n  return function(value) {\n    return func(value);\n  };\n}\n\nexport default baseUnary;\n","import freeGlobal from './_freeGlobal.js';\n\n/** Detect free variable `exports`. */\nvar freeExports = typeof exports == 'object' && exports && !exports.nodeType && exports;\n\n/** Detect free variable `module`. */\nvar freeModule = freeExports && typeof module == 'object' && module && !module.nodeType && module;\n\n/** Detect the popular CommonJS extension `module.exports`. */\nvar moduleExports = freeModule && freeModule.exports === freeExports;\n\n/** Detect free variable `process` from Node.js. */\nvar freeProcess = moduleExports && freeGlobal.process;\n\n/** Used to access faster Node.js helpers. */\nvar nodeUtil = (function() {\n  try {\n    // Use `util.types` for Node.js 10+.\n    var types = freeModule && freeModule.require && freeModule.require('util').types;\n\n    if (types) {\n      return types;\n    }\n\n    // Legacy `process.binding('util')` for Node.js < 10.\n    return freeProcess && freeProcess.binding && freeProcess.binding('util');\n  } catch (e) {}\n}());\n\nexport default nodeUtil;\n","import baseIsTypedArray from './_baseIsTypedArray.js';\nimport baseUnary from './_baseUnary.js';\nimport nodeUtil from './_nodeUtil.js';\n\n/* Node.js helper references. */\nvar nodeIsTypedArray = nodeUtil && nodeUtil.isTypedArray;\n\n/**\n * Checks if `value` is classified as a typed array.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a typed array, else `false`.\n * @example\n *\n * _.isTypedArray(new Uint8Array);\n * // => true\n *\n * _.isTypedArray([]);\n * // => false\n */\nvar isTypedArray = nodeIsTypedArray ? baseUnary(nodeIsTypedArray) : baseIsTypedArray;\n\nexport default isTypedArray;\n","import baseTimes from './_baseTimes.js';\nimport isArguments from './isArguments.js';\nimport isArray from './isArray.js';\nimport isBuffer from './isBuffer.js';\nimport isIndex from './_isIndex.js';\nimport isTypedArray from './isTypedArray.js';\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Creates an array of the enumerable property names of the array-like `value`.\n *\n * @private\n * @param {*} value The value to query.\n * @param {boolean} inherited Specify returning inherited property names.\n * @returns {Array} Returns the array of property names.\n */\nfunction arrayLikeKeys(value, inherited) {\n  var isArr = isArray(value),\n      isArg = !isArr && isArguments(value),\n      isBuff = !isArr && !isArg && isBuffer(value),\n      isType = !isArr && !isArg && !isBuff && isTypedArray(value),\n      skipIndexes = isArr || isArg || isBuff || isType,\n      result = skipIndexes ? baseTimes(value.length, String) : [],\n      length = result.length;\n\n  for (var key in value) {\n    if ((inherited || hasOwnProperty.call(value, key)) &&\n        !(skipIndexes && (\n           // Safari 9 has enumerable `arguments.length` in strict mode.\n           key == 'length' ||\n           // Node.js 0.10 has enumerable non-index properties on buffers.\n           (isBuff && (key == 'offset' || key == 'parent')) ||\n           // PhantomJS 2 has enumerable non-index properties on typed arrays.\n           (isType && (key == 'buffer' || key == 'byteLength' || key == 'byteOffset')) ||\n           // Skip index properties.\n           isIndex(key, length)\n        ))) {\n      result.push(key);\n    }\n  }\n  return result;\n}\n\nexport default arrayLikeKeys;\n","/**\n * The base implementation of `_.times` without support for iteratee shorthands\n * or max array length checks.\n *\n * @private\n * @param {number} n The number of times to invoke `iteratee`.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array} Returns the array of results.\n */\nfunction baseTimes(n, iteratee) {\n  var index = -1,\n      result = Array(n);\n\n  while (++index < n) {\n    result[index] = iteratee(index);\n  }\n  return result;\n}\n\nexport default baseTimes;\n","/**\n * Creates a unary function that invokes `func` with its argument transformed.\n *\n * @private\n * @param {Function} func The function to wrap.\n * @param {Function} transform The argument transform.\n * @returns {Function} Returns the new function.\n */\nfunction overArg(func, transform) {\n  return function(arg) {\n    return func(transform(arg));\n  };\n}\n\nexport default overArg;\n","import overArg from './_overArg.js';\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeKeys = overArg(Object.keys, Object);\n\nexport default nativeKeys;\n","import isPrototype from './_isPrototype.js';\nimport nativeKeys from './_nativeKeys.js';\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * The base implementation of `_.keys` which doesn't treat sparse arrays as dense.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n */\nfunction baseKeys(object) {\n  if (!isPrototype(object)) {\n    return nativeKeys(object);\n  }\n  var result = [];\n  for (var key in Object(object)) {\n    if (hasOwnProperty.call(object, key) && key != 'constructor') {\n      result.push(key);\n    }\n  }\n  return result;\n}\n\nexport default baseKeys;\n","import arrayLikeKeys from './_arrayLikeKeys.js';\nimport baseKeys from './_baseKeys.js';\nimport isArrayLike from './isArrayLike.js';\n\n/**\n * Creates an array of the own enumerable property names of `object`.\n *\n * **Note:** Non-object values are coerced to objects. See the\n * [ES spec](http://ecma-international.org/ecma-262/7.0/#sec-object.keys)\n * for more details.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Object\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n * @example\n *\n * function Foo() {\n *   this.a = 1;\n *   this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.keys(new Foo);\n * // => ['a', 'b'] (iteration order is not guaranteed)\n *\n * _.keys('hi');\n * // => ['0', '1']\n */\nfunction keys(object) {\n  return isArrayLike(object) ? arrayLikeKeys(object) : baseKeys(object);\n}\n\nexport default keys;\n","import isObject from './isObject.js';\nimport isPrototype from './_isPrototype.js';\nimport nativeKeysIn from './_nativeKeysIn.js';\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * The base implementation of `_.keysIn` which doesn't treat sparse arrays as dense.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n */\nfunction baseKeysIn(object) {\n  if (!isObject(object)) {\n    return nativeKeysIn(object);\n  }\n  var isProto = isPrototype(object),\n      result = [];\n\n  for (var key in object) {\n    if (!(key == 'constructor' && (isProto || !hasOwnProperty.call(object, key)))) {\n      result.push(key);\n    }\n  }\n  return result;\n}\n\nexport default baseKeysIn;\n","/**\n * This function is like\n * [`Object.keys`](http://ecma-international.org/ecma-262/7.0/#sec-object.keys)\n * except that it includes inherited enumerable properties.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n */\nfunction nativeKeysIn(object) {\n  var result = [];\n  if (object != null) {\n    for (var key in Object(object)) {\n      result.push(key);\n    }\n  }\n  return result;\n}\n\nexport default nativeKeysIn;\n","import arrayLikeKeys from './_arrayLikeKeys.js';\nimport baseKeysIn from './_baseKeysIn.js';\nimport isArrayLike from './isArrayLike.js';\n\n/**\n * Creates an array of the own and inherited enumerable property names of `object`.\n *\n * **Note:** Non-object values are coerced to objects.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Object\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n * @example\n *\n * function Foo() {\n *   this.a = 1;\n *   this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.keysIn(new Foo);\n * // => ['a', 'b', 'c'] (iteration order is not guaranteed)\n */\nfunction keysIn(object) {\n  return isArrayLike(object) ? arrayLikeKeys(object, true) : baseKeysIn(object);\n}\n\nexport default keysIn;\n","import isArray from './isArray.js';\nimport isSymbol from './isSymbol.js';\n\n/** Used to match property names within property paths. */\nvar reIsDeepProp = /\\.|\\[(?:[^[\\]]*|([\"'])(?:(?!\\1)[^\\\\]|\\\\.)*?\\1)\\]/,\n    reIsPlainProp = /^\\w*$/;\n\n/**\n * Checks if `value` is a property name and not a property path.\n *\n * @private\n * @param {*} value The value to check.\n * @param {Object} [object] The object to query keys on.\n * @returns {boolean} Returns `true` if `value` is a property name, else `false`.\n */\nfunction isKey(value, object) {\n  if (isArray(value)) {\n    return false;\n  }\n  var type = typeof value;\n  if (type == 'number' || type == 'symbol' || type == 'boolean' ||\n      value == null || isSymbol(value)) {\n    return true;\n  }\n  return reIsPlainProp.test(value) || !reIsDeepProp.test(value) ||\n    (object != null && value in Object(object));\n}\n\nexport default isKey;\n","import getNative from './_getNative.js';\n\n/* Built-in method references that are verified to be native. */\nvar nativeCreate = getNative(Object, 'create');\n\nexport default nativeCreate;\n","import nativeCreate from './_nativeCreate.js';\n\n/** Used to stand-in for `undefined` hash values. */\nvar HASH_UNDEFINED = '__lodash_hash_undefined__';\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Gets the hash value for `key`.\n *\n * @private\n * @name get\n * @memberOf Hash\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\nfunction hashGet(key) {\n  var data = this.__data__;\n  if (nativeCreate) {\n    var result = data[key];\n    return result === HASH_UNDEFINED ? undefined : result;\n  }\n  return hasOwnProperty.call(data, key) ? data[key] : undefined;\n}\n\nexport default hashGet;\n","import nativeCreate from './_nativeCreate.js';\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Checks if a hash value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf Hash\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction hashHas(key) {\n  var data = this.__data__;\n  return nativeCreate ? (data[key] !== undefined) : hasOwnProperty.call(data, key);\n}\n\nexport default hashHas;\n","import hashClear from './_hashClear.js';\nimport hashDelete from './_hashDelete.js';\nimport hashGet from './_hashGet.js';\nimport hashHas from './_hashHas.js';\nimport hashSet from './_hashSet.js';\n\n/**\n * Creates a hash object.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\nfunction Hash(entries) {\n  var index = -1,\n      length = entries == null ? 0 : entries.length;\n\n  this.clear();\n  while (++index < length) {\n    var entry = entries[index];\n    this.set(entry[0], entry[1]);\n  }\n}\n\n// Add methods to `Hash`.\nHash.prototype.clear = hashClear;\nHash.prototype['delete'] = hashDelete;\nHash.prototype.get = hashGet;\nHash.prototype.has = hashHas;\nHash.prototype.set = hashSet;\n\nexport default Hash;\n","import eq from './eq.js';\n\n/**\n * Gets the index at which the `key` is found in `array` of key-value pairs.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {*} key The key to search for.\n * @returns {number} Returns the index of the matched value, else `-1`.\n */\nfunction assocIndexOf(array, key) {\n  var length = array.length;\n  while (length--) {\n    if (eq(array[length][0], key)) {\n      return length;\n    }\n  }\n  return -1;\n}\n\nexport default assocIndexOf;\n","import nativeCreate from './_nativeCreate.js';\n\n/**\n * Removes all key-value entries from the hash.\n *\n * @private\n * @name clear\n * @memberOf Hash\n */\nfunction hashClear() {\n  this.__data__ = nativeCreate ? nativeCreate(null) : {};\n  this.size = 0;\n}\n\nexport default hashClear;\n","/**\n * Removes `key` and its value from the hash.\n *\n * @private\n * @name delete\n * @memberOf Hash\n * @param {Object} hash The hash to modify.\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\nfunction hashDelete(key) {\n  var result = this.has(key) && delete this.__data__[key];\n  this.size -= result ? 1 : 0;\n  return result;\n}\n\nexport default hashDelete;\n","import nativeCreate from './_nativeCreate.js';\n\n/** Used to stand-in for `undefined` hash values. */\nvar HASH_UNDEFINED = '__lodash_hash_undefined__';\n\n/**\n * Sets the hash `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf Hash\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the hash instance.\n */\nfunction hashSet(key, value) {\n  var data = this.__data__;\n  this.size += this.has(key) ? 0 : 1;\n  data[key] = (nativeCreate && value === undefined) ? HASH_UNDEFINED : value;\n  return this;\n}\n\nexport default hashSet;\n","import assocIndexOf from './_assocIndexOf.js';\n\n/** Used for built-in method references. */\nvar arrayProto = Array.prototype;\n\n/** Built-in value references. */\nvar splice = arrayProto.splice;\n\n/**\n * Removes `key` and its value from the list cache.\n *\n * @private\n * @name delete\n * @memberOf ListCache\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\nfunction listCacheDelete(key) {\n  var data = this.__data__,\n      index = assocIndexOf(data, key);\n\n  if (index < 0) {\n    return false;\n  }\n  var lastIndex = data.length - 1;\n  if (index == lastIndex) {\n    data.pop();\n  } else {\n    splice.call(data, index, 1);\n  }\n  --this.size;\n  return true;\n}\n\nexport default listCacheDelete;\n","import listCacheClear from './_listCacheClear.js';\nimport listCacheDelete from './_listCacheDelete.js';\nimport listCacheGet from './_listCacheGet.js';\nimport listCacheHas from './_listCacheHas.js';\nimport listCacheSet from './_listCacheSet.js';\n\n/**\n * Creates an list cache object.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\nfunction ListCache(entries) {\n  var index = -1,\n      length = entries == null ? 0 : entries.length;\n\n  this.clear();\n  while (++index < length) {\n    var entry = entries[index];\n    this.set(entry[0], entry[1]);\n  }\n}\n\n// Add methods to `ListCache`.\nListCache.prototype.clear = listCacheClear;\nListCache.prototype['delete'] = listCacheDelete;\nListCache.prototype.get = listCacheGet;\nListCache.prototype.has = listCacheHas;\nListCache.prototype.set = listCacheSet;\n\nexport default ListCache;\n","/**\n * Removes all key-value entries from the list cache.\n *\n * @private\n * @name clear\n * @memberOf ListCache\n */\nfunction listCacheClear() {\n  this.__data__ = [];\n  this.size = 0;\n}\n\nexport default listCacheClear;\n","import assocIndexOf from './_assocIndexOf.js';\n\n/**\n * Gets the list cache value for `key`.\n *\n * @private\n * @name get\n * @memberOf ListCache\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\nfunction listCacheGet(key) {\n  var data = this.__data__,\n      index = assocIndexOf(data, key);\n\n  return index < 0 ? undefined : data[index][1];\n}\n\nexport default listCacheGet;\n","import assocIndexOf from './_assocIndexOf.js';\n\n/**\n * Checks if a list cache value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf ListCache\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction listCacheHas(key) {\n  return assocIndexOf(this.__data__, key) > -1;\n}\n\nexport default listCacheHas;\n","import assocIndexOf from './_assocIndexOf.js';\n\n/**\n * Sets the list cache `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf ListCache\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the list cache instance.\n */\nfunction listCacheSet(key, value) {\n  var data = this.__data__,\n      index = assocIndexOf(data, key);\n\n  if (index < 0) {\n    ++this.size;\n    data.push([key, value]);\n  } else {\n    data[index][1] = value;\n  }\n  return this;\n}\n\nexport default listCacheSet;\n","import getNative from './_getNative.js';\nimport root from './_root.js';\n\n/* Built-in method references that are verified to be native. */\nvar Map = getNative(root, 'Map');\n\nexport default Map;\n","import isKeyable from './_isKeyable.js';\n\n/**\n * Gets the data for `map`.\n *\n * @private\n * @param {Object} map The map to query.\n * @param {string} key The reference key.\n * @returns {*} Returns the map data.\n */\nfunction getMapData(map, key) {\n  var data = map.__data__;\n  return isKeyable(key)\n    ? data[typeof key == 'string' ? 'string' : 'hash']\n    : data.map;\n}\n\nexport default getMapData;\n","/**\n * Checks if `value` is suitable for use as unique object key.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is suitable, else `false`.\n */\nfunction isKeyable(value) {\n  var type = typeof value;\n  return (type == 'string' || type == 'number' || type == 'symbol' || type == 'boolean')\n    ? (value !== '__proto__')\n    : (value === null);\n}\n\nexport default isKeyable;\n","import mapCacheClear from './_mapCacheClear.js';\nimport mapCacheDelete from './_mapCacheDelete.js';\nimport mapCacheGet from './_mapCacheGet.js';\nimport mapCacheHas from './_mapCacheHas.js';\nimport mapCacheSet from './_mapCacheSet.js';\n\n/**\n * Creates a map cache object to store key-value pairs.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\nfunction MapCache(entries) {\n  var index = -1,\n      length = entries == null ? 0 : entries.length;\n\n  this.clear();\n  while (++index < length) {\n    var entry = entries[index];\n    this.set(entry[0], entry[1]);\n  }\n}\n\n// Add methods to `MapCache`.\nMapCache.prototype.clear = mapCacheClear;\nMapCache.prototype['delete'] = mapCacheDelete;\nMapCache.prototype.get = mapCacheGet;\nMapCache.prototype.has = mapCacheHas;\nMapCache.prototype.set = mapCacheSet;\n\nexport default MapCache;\n","import Hash from './_Hash.js';\nimport ListCache from './_ListCache.js';\nimport Map from './_Map.js';\n\n/**\n * Removes all key-value entries from the map.\n *\n * @private\n * @name clear\n * @memberOf MapCache\n */\nfunction mapCacheClear() {\n  this.size = 0;\n  this.__data__ = {\n    'hash': new Hash,\n    'map': new (Map || ListCache),\n    'string': new Hash\n  };\n}\n\nexport default mapCacheClear;\n","import getMapData from './_getMapData.js';\n\n/**\n * Removes `key` and its value from the map.\n *\n * @private\n * @name delete\n * @memberOf MapCache\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\nfunction mapCacheDelete(key) {\n  var result = getMapData(this, key)['delete'](key);\n  this.size -= result ? 1 : 0;\n  return result;\n}\n\nexport default mapCacheDelete;\n","import getMapData from './_getMapData.js';\n\n/**\n * Gets the map value for `key`.\n *\n * @private\n * @name get\n * @memberOf MapCache\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\nfunction mapCacheGet(key) {\n  return getMapData(this, key).get(key);\n}\n\nexport default mapCacheGet;\n","import getMapData from './_getMapData.js';\n\n/**\n * Checks if a map value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf MapCache\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction mapCacheHas(key) {\n  return getMapData(this, key).has(key);\n}\n\nexport default mapCacheHas;\n","import getMapData from './_getMapData.js';\n\n/**\n * Sets the map `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf MapCache\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the map cache instance.\n */\nfunction mapCacheSet(key, value) {\n  var data = getMapData(this, key),\n      size = data.size;\n\n  data.set(key, value);\n  this.size += data.size == size ? 0 : 1;\n  return this;\n}\n\nexport default mapCacheSet;\n","import MapCache from './_MapCache.js';\n\n/** Error message constants. */\nvar FUNC_ERROR_TEXT = 'Expected a function';\n\n/**\n * Creates a function that memoizes the result of `func`. If `resolver` is\n * provided, it determines the cache key for storing the result based on the\n * arguments provided to the memoized function. By default, the first argument\n * provided to the memoized function is used as the map cache key. The `func`\n * is invoked with the `this` binding of the memoized function.\n *\n * **Note:** The cache is exposed as the `cache` property on the memoized\n * function. Its creation may be customized by replacing the `_.memoize.Cache`\n * constructor with one whose instances implement the\n * [`Map`](http://ecma-international.org/ecma-262/7.0/#sec-properties-of-the-map-prototype-object)\n * method interface of `clear`, `delete`, `get`, `has`, and `set`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Function\n * @param {Function} func The function to have its output memoized.\n * @param {Function} [resolver] The function to resolve the cache key.\n * @returns {Function} Returns the new memoized function.\n * @example\n *\n * var object = { 'a': 1, 'b': 2 };\n * var other = { 'c': 3, 'd': 4 };\n *\n * var values = _.memoize(_.values);\n * values(object);\n * // => [1, 2]\n *\n * values(other);\n * // => [3, 4]\n *\n * object.a = 2;\n * values(object);\n * // => [1, 2]\n *\n * // Modify the result cache.\n * values.cache.set(object, ['a', 'b']);\n * values(object);\n * // => ['a', 'b']\n *\n * // Replace `_.memoize.Cache`.\n * _.memoize.Cache = WeakMap;\n */\nfunction memoize(func, resolver) {\n  if (typeof func != 'function' || (resolver != null && typeof resolver != 'function')) {\n    throw new TypeError(FUNC_ERROR_TEXT);\n  }\n  var memoized = function() {\n    var args = arguments,\n        key = resolver ? resolver.apply(this, args) : args[0],\n        cache = memoized.cache;\n\n    if (cache.has(key)) {\n      return cache.get(key);\n    }\n    var result = func.apply(this, args);\n    memoized.cache = cache.set(key, result) || cache;\n    return result;\n  };\n  memoized.cache = new (memoize.Cache || MapCache);\n  return memoized;\n}\n\n// Expose `MapCache`.\nmemoize.Cache = MapCache;\n\nexport default memoize;\n","import memoizeCapped from './_memoizeCapped.js';\n\n/** Used to match property names within property paths. */\nvar rePropName = /[^.[\\]]+|\\[(?:(-?\\d+(?:\\.\\d+)?)|([\"'])((?:(?!\\2)[^\\\\]|\\\\.)*?)\\2)\\]|(?=(?:\\.|\\[\\])(?:\\.|\\[\\]|$))/g;\n\n/** Used to match backslashes in property paths. */\nvar reEscapeChar = /\\\\(\\\\)?/g;\n\n/**\n * Converts `string` to a property path array.\n *\n * @private\n * @param {string} string The string to convert.\n * @returns {Array} Returns the property path array.\n */\nvar stringToPath = memoizeCapped(function(string) {\n  var result = [];\n  if (string.charCodeAt(0) === 46 /* . */) {\n    result.push('');\n  }\n  string.replace(rePropName, function(match, number, quote, subString) {\n    result.push(quote ? subString.replace(reEscapeChar, '$1') : (number || match));\n  });\n  return result;\n});\n\nexport default stringToPath;\n","import memoize from './memoize.js';\n\n/** Used as the maximum memoize cache size. */\nvar MAX_MEMOIZE_SIZE = 500;\n\n/**\n * A specialized version of `_.memoize` which clears the memoized function's\n * cache when it exceeds `MAX_MEMOIZE_SIZE`.\n *\n * @private\n * @param {Function} func The function to have its output memoized.\n * @returns {Function} Returns the new memoized function.\n */\nfunction memoizeCapped(func) {\n  var result = memoize(func, function(key) {\n    if (cache.size === MAX_MEMOIZE_SIZE) {\n      cache.clear();\n    }\n    return key;\n  });\n\n  var cache = result.cache;\n  return result;\n}\n\nexport default memoizeCapped;\n","import isArray from './isArray.js';\nimport isKey from './_isKey.js';\nimport stringToPath from './_stringToPath.js';\nimport toString from './toString.js';\n\n/**\n * Casts `value` to a path array if it's not one.\n *\n * @private\n * @param {*} value The value to inspect.\n * @param {Object} [object] The object to query keys on.\n * @returns {Array} Returns the cast property path array.\n */\nfunction castPath(value, object) {\n  if (isArray(value)) {\n    return value;\n  }\n  return isKey(value, object) ? [value] : stringToPath(toString(value));\n}\n\nexport default castPath;\n","import baseToString from './_baseToString.js';\n\n/**\n * Converts `value` to a string. An empty string is returned for `null`\n * and `undefined` values. The sign of `-0` is preserved.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to convert.\n * @returns {string} Returns the converted string.\n * @example\n *\n * _.toString(null);\n * // => ''\n *\n * _.toString(-0);\n * // => '-0'\n *\n * _.toString([1, 2, 3]);\n * // => '1,2,3'\n */\nfunction toString(value) {\n  return value == null ? '' : baseToString(value);\n}\n\nexport default toString;\n","import isSymbol from './isSymbol.js';\n\n/** Used as references for various `Number` constants. */\nvar INFINITY = 1 / 0;\n\n/**\n * Converts `value` to a string key if it's not a string or symbol.\n *\n * @private\n * @param {*} value The value to inspect.\n * @returns {string|symbol} Returns the key.\n */\nfunction toKey(value) {\n  if (typeof value == 'string' || isSymbol(value)) {\n    return value;\n  }\n  var result = (value + '');\n  return (result == '0' && (1 / value) == -INFINITY) ? '-0' : result;\n}\n\nexport default toKey;\n","import castPath from './_castPath.js';\nimport toKey from './_toKey.js';\n\n/**\n * The base implementation of `_.get` without support for default values.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {Array|string} path The path of the property to get.\n * @returns {*} Returns the resolved value.\n */\nfunction baseGet(object, path) {\n  path = castPath(path, object);\n\n  var index = 0,\n      length = path.length;\n\n  while (object != null && index < length) {\n    object = object[toKey(path[index++])];\n  }\n  return (index && index == length) ? object : undefined;\n}\n\nexport default baseGet;\n","import baseGet from './_baseGet.js';\n\n/**\n * Gets the value at `path` of `object`. If the resolved value is\n * `undefined`, the `defaultValue` is returned in its place.\n *\n * @static\n * @memberOf _\n * @since 3.7.0\n * @category Object\n * @param {Object} object The object to query.\n * @param {Array|string} path The path of the property to get.\n * @param {*} [defaultValue] The value returned for `undefined` resolved values.\n * @returns {*} Returns the resolved value.\n * @example\n *\n * var object = { 'a': [{ 'b': { 'c': 3 } }] };\n *\n * _.get(object, 'a[0].b.c');\n * // => 3\n *\n * _.get(object, ['a', '0', 'b', 'c']);\n * // => 3\n *\n * _.get(object, 'a.b.c', 'default');\n * // => 'default'\n */\nfunction get(object, path, defaultValue) {\n  var result = object == null ? undefined : baseGet(object, path);\n  return result === undefined ? defaultValue : result;\n}\n\nexport default get;\n","/**\n * Appends the elements of `values` to `array`.\n *\n * @private\n * @param {Array} array The array to modify.\n * @param {Array} values The values to append.\n * @returns {Array} Returns `array`.\n */\nfunction arrayPush(array, values) {\n  var index = -1,\n      length = values.length,\n      offset = array.length;\n\n  while (++index < length) {\n    array[offset + index] = values[index];\n  }\n  return array;\n}\n\nexport default arrayPush;\n","import Symbol from './_Symbol.js';\nimport isArguments from './isArguments.js';\nimport isArray from './isArray.js';\n\n/** Built-in value references. */\nvar spreadableSymbol = Symbol ? Symbol.isConcatSpreadable : undefined;\n\n/**\n * Checks if `value` is a flattenable `arguments` object or array.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is flattenable, else `false`.\n */\nfunction isFlattenable(value) {\n  return isArray(value) || isArguments(value) ||\n    !!(spreadableSymbol && value && value[spreadableSymbol]);\n}\n\nexport default isFlattenable;\n","import arrayPush from './_arrayPush.js';\nimport isFlattenable from './_isFlattenable.js';\n\n/**\n * The base implementation of `_.flatten` with support for restricting flattening.\n *\n * @private\n * @param {Array} array The array to flatten.\n * @param {number} depth The maximum recursion depth.\n * @param {boolean} [predicate=isFlattenable] The function invoked per iteration.\n * @param {boolean} [isStrict] Restrict to values that pass `predicate` checks.\n * @param {Array} [result=[]] The initial result value.\n * @returns {Array} Returns the new flattened array.\n */\nfunction baseFlatten(array, depth, predicate, isStrict, result) {\n  var index = -1,\n      length = array.length;\n\n  predicate || (predicate = isFlattenable);\n  result || (result = []);\n\n  while (++index < length) {\n    var value = array[index];\n    if (depth > 0 && predicate(value)) {\n      if (depth > 1) {\n        // Recursively flatten arrays (susceptible to call stack limits).\n        baseFlatten(value, depth - 1, predicate, isStrict, result);\n      } else {\n        arrayPush(result, value);\n      }\n    } else if (!isStrict) {\n      result[result.length] = value;\n    }\n  }\n  return result;\n}\n\nexport default baseFlatten;\n","import baseFlatten from './_baseFlatten.js';\n\n/**\n * Flattens `array` a single level deep.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Array\n * @param {Array} array The array to flatten.\n * @returns {Array} Returns the new flattened array.\n * @example\n *\n * _.flatten([1, [2, [3, [4]], 5]]);\n * // => [1, 2, [3, [4]], 5]\n */\nfunction flatten(array) {\n  var length = array == null ? 0 : array.length;\n  return length ? baseFlatten(array, 1) : [];\n}\n\nexport default flatten;\n","import flatten from './flatten.js';\nimport overRest from './_overRest.js';\nimport setToString from './_setToString.js';\n\n/**\n * A specialized version of `baseRest` which flattens the rest array.\n *\n * @private\n * @param {Function} func The function to apply a rest parameter to.\n * @returns {Function} Returns the new function.\n */\nfunction flatRest(func) {\n  return setToString(overRest(func, undefined, flatten), func + '');\n}\n\nexport default flatRest;\n","import overArg from './_overArg.js';\n\n/** Built-in value references. */\nvar getPrototype = overArg(Object.getPrototypeOf, Object);\n\nexport default getPrototype;\n","import baseGetTag from './_baseGetTag.js';\nimport getPrototype from './_getPrototype.js';\nimport isObjectLike from './isObjectLike.js';\n\n/** `Object#toString` result references. */\nvar objectTag = '[object Object]';\n\n/** Used for built-in method references. */\nvar funcProto = Function.prototype,\n    objectProto = Object.prototype;\n\n/** Used to resolve the decompiled source of functions. */\nvar funcToString = funcProto.toString;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/** Used to infer the `Object` constructor. */\nvar objectCtorString = funcToString.call(Object);\n\n/**\n * Checks if `value` is a plain object, that is, an object created by the\n * `Object` constructor or one with a `[[Prototype]]` of `null`.\n *\n * @static\n * @memberOf _\n * @since 0.8.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a plain object, else `false`.\n * @example\n *\n * function Foo() {\n *   this.a = 1;\n * }\n *\n * _.isPlainObject(new Foo);\n * // => false\n *\n * _.isPlainObject([1, 2, 3]);\n * // => false\n *\n * _.isPlainObject({ 'x': 0, 'y': 0 });\n * // => true\n *\n * _.isPlainObject(Object.create(null));\n * // => true\n */\nfunction isPlainObject(value) {\n  if (!isObjectLike(value) || baseGetTag(value) != objectTag) {\n    return false;\n  }\n  var proto = getPrototype(value);\n  if (proto === null) {\n    return true;\n  }\n  var Ctor = hasOwnProperty.call(proto, 'constructor') && proto.constructor;\n  return typeof Ctor == 'function' && Ctor instanceof Ctor &&\n    funcToString.call(Ctor) == objectCtorString;\n}\n\nexport default isPlainObject;\n","import isArray from './isArray.js';\n\n/**\n * Casts `value` as an array if it's not one.\n *\n * @static\n * @memberOf _\n * @since 4.4.0\n * @category Lang\n * @param {*} value The value to inspect.\n * @returns {Array} Returns the cast array.\n * @example\n *\n * _.castArray(1);\n * // => [1]\n *\n * _.castArray({ 'a': 1 });\n * // => [{ 'a': 1 }]\n *\n * _.castArray('abc');\n * // => ['abc']\n *\n * _.castArray(null);\n * // => [null]\n *\n * _.castArray(undefined);\n * // => [undefined]\n *\n * _.castArray();\n * // => []\n *\n * var array = [1, 2, 3];\n * console.log(_.castArray(array) === array);\n * // => true\n */\nfunction castArray() {\n  if (!arguments.length) {\n    return [];\n  }\n  var value = arguments[0];\n  return isArray(value) ? value : [value];\n}\n\nexport default castArray;\n","import ListCache from './_ListCache.js';\nimport stackClear from './_stackClear.js';\nimport stackDelete from './_stackDelete.js';\nimport stackGet from './_stackGet.js';\nimport stackHas from './_stackHas.js';\nimport stackSet from './_stackSet.js';\n\n/**\n * Creates a stack cache object to store key-value pairs.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\nfunction Stack(entries) {\n  var data = this.__data__ = new ListCache(entries);\n  this.size = data.size;\n}\n\n// Add methods to `Stack`.\nStack.prototype.clear = stackClear;\nStack.prototype['delete'] = stackDelete;\nStack.prototype.get = stackGet;\nStack.prototype.has = stackHas;\nStack.prototype.set = stackSet;\n\nexport default Stack;\n","import ListCache from './_ListCache.js';\n\n/**\n * Removes all key-value entries from the stack.\n *\n * @private\n * @name clear\n * @memberOf Stack\n */\nfunction stackClear() {\n  this.__data__ = new ListCache;\n  this.size = 0;\n}\n\nexport default stackClear;\n","/**\n * Removes `key` and its value from the stack.\n *\n * @private\n * @name delete\n * @memberOf Stack\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\nfunction stackDelete(key) {\n  var data = this.__data__,\n      result = data['delete'](key);\n\n  this.size = data.size;\n  return result;\n}\n\nexport default stackDelete;\n","/**\n * Gets the stack value for `key`.\n *\n * @private\n * @name get\n * @memberOf Stack\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\nfunction stackGet(key) {\n  return this.__data__.get(key);\n}\n\nexport default stackGet;\n","/**\n * Checks if a stack value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf Stack\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction stackHas(key) {\n  return this.__data__.has(key);\n}\n\nexport default stackHas;\n","import ListCache from './_ListCache.js';\nimport Map from './_Map.js';\nimport MapCache from './_MapCache.js';\n\n/** Used as the size to enable large array optimizations. */\nvar LARGE_ARRAY_SIZE = 200;\n\n/**\n * Sets the stack `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf Stack\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the stack cache instance.\n */\nfunction stackSet(key, value) {\n  var data = this.__data__;\n  if (data instanceof ListCache) {\n    var pairs = data.__data__;\n    if (!Map || (pairs.length < LARGE_ARRAY_SIZE - 1)) {\n      pairs.push([key, value]);\n      this.size = ++data.size;\n      return this;\n    }\n    data = this.__data__ = new MapCache(pairs);\n  }\n  data.set(key, value);\n  this.size = data.size;\n  return this;\n}\n\nexport default stackSet;\n","import root from './_root.js';\n\n/** Detect free variable `exports`. */\nvar freeExports = typeof exports == 'object' && exports && !exports.nodeType && exports;\n\n/** Detect free variable `module`. */\nvar freeModule = freeExports && typeof module == 'object' && module && !module.nodeType && module;\n\n/** Detect the popular CommonJS extension `module.exports`. */\nvar moduleExports = freeModule && freeModule.exports === freeExports;\n\n/** Built-in value references. */\nvar Buffer = moduleExports ? root.Buffer : undefined,\n    allocUnsafe = Buffer ? Buffer.allocUnsafe : undefined;\n\n/**\n * Creates a clone of  `buffer`.\n *\n * @private\n * @param {Buffer} buffer The buffer to clone.\n * @param {boolean} [isDeep] Specify a deep clone.\n * @returns {Buffer} Returns the cloned buffer.\n */\nfunction cloneBuffer(buffer, isDeep) {\n  if (isDeep) {\n    return buffer.slice();\n  }\n  var length = buffer.length,\n      result = allocUnsafe ? allocUnsafe(length) : new buffer.constructor(length);\n\n  buffer.copy(result);\n  return result;\n}\n\nexport default cloneBuffer;\n","/**\n * This method returns a new empty array.\n *\n * @static\n * @memberOf _\n * @since 4.13.0\n * @category Util\n * @returns {Array} Returns the new empty array.\n * @example\n *\n * var arrays = _.times(2, _.stubArray);\n *\n * console.log(arrays);\n * // => [[], []]\n *\n * console.log(arrays[0] === arrays[1]);\n * // => false\n */\nfunction stubArray() {\n  return [];\n}\n\nexport default stubArray;\n","import arrayFilter from './_arrayFilter.js';\nimport stubArray from './stubArray.js';\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Built-in value references. */\nvar propertyIsEnumerable = objectProto.propertyIsEnumerable;\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeGetSymbols = Object.getOwnPropertySymbols;\n\n/**\n * Creates an array of the own enumerable symbols of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of symbols.\n */\nvar getSymbols = !nativeGetSymbols ? stubArray : function(object) {\n  if (object == null) {\n    return [];\n  }\n  object = Object(object);\n  return arrayFilter(nativeGetSymbols(object), function(symbol) {\n    return propertyIsEnumerable.call(object, symbol);\n  });\n};\n\nexport default getSymbols;\n","/**\n * A specialized version of `_.filter` for arrays without support for\n * iteratee shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} predicate The function invoked per iteration.\n * @returns {Array} Returns the new filtered array.\n */\nfunction arrayFilter(array, predicate) {\n  var index = -1,\n      length = array == null ? 0 : array.length,\n      resIndex = 0,\n      result = [];\n\n  while (++index < length) {\n    var value = array[index];\n    if (predicate(value, index, array)) {\n      result[resIndex++] = value;\n    }\n  }\n  return result;\n}\n\nexport default arrayFilter;\n","import arrayPush from './_arrayPush.js';\nimport getPrototype from './_getPrototype.js';\nimport getSymbols from './_getSymbols.js';\nimport stubArray from './stubArray.js';\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeGetSymbols = Object.getOwnPropertySymbols;\n\n/**\n * Creates an array of the own and inherited enumerable symbols of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of symbols.\n */\nvar getSymbolsIn = !nativeGetSymbols ? stubArray : function(object) {\n  var result = [];\n  while (object) {\n    arrayPush(result, getSymbols(object));\n    object = getPrototype(object);\n  }\n  return result;\n};\n\nexport default getSymbolsIn;\n","import arrayPush from './_arrayPush.js';\nimport isArray from './isArray.js';\n\n/**\n * The base implementation of `getAllKeys` and `getAllKeysIn` which uses\n * `keysFunc` and `symbolsFunc` to get the enumerable property names and\n * symbols of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {Function} keysFunc The function to get the keys of `object`.\n * @param {Function} symbolsFunc The function to get the symbols of `object`.\n * @returns {Array} Returns the array of property names and symbols.\n */\nfunction baseGetAllKeys(object, keysFunc, symbolsFunc) {\n  var result = keysFunc(object);\n  return isArray(object) ? result : arrayPush(result, symbolsFunc(object));\n}\n\nexport default baseGetAllKeys;\n","import baseGetAllKeys from './_baseGetAllKeys.js';\nimport getSymbols from './_getSymbols.js';\nimport keys from './keys.js';\n\n/**\n * Creates an array of own enumerable property names and symbols of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names and symbols.\n */\nfunction getAllKeys(object) {\n  return baseGetAllKeys(object, keys, getSymbols);\n}\n\nexport default getAllKeys;\n","import baseGetAllKeys from './_baseGetAllKeys.js';\nimport getSymbolsIn from './_getSymbolsIn.js';\nimport keysIn from './keysIn.js';\n\n/**\n * Creates an array of own and inherited enumerable property names and\n * symbols of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names and symbols.\n */\nfunction getAllKeysIn(object) {\n  return baseGetAllKeys(object, keysIn, getSymbolsIn);\n}\n\nexport default getAllKeysIn;\n","import getNative from './_getNative.js';\nimport root from './_root.js';\n\n/* Built-in method references that are verified to be native. */\nvar DataView = getNative(root, 'DataView');\n\nexport default DataView;\n","import getNative from './_getNative.js';\nimport root from './_root.js';\n\n/* Built-in method references that are verified to be native. */\nvar Promise = getNative(root, 'Promise');\n\nexport default Promise;\n","import getNative from './_getNative.js';\nimport root from './_root.js';\n\n/* Built-in method references that are verified to be native. */\nvar Set = getNative(root, 'Set');\n\nexport default Set;\n","import DataView from './_DataView.js';\nimport Map from './_Map.js';\nimport Promise from './_Promise.js';\nimport Set from './_Set.js';\nimport WeakMap from './_WeakMap.js';\nimport baseGetTag from './_baseGetTag.js';\nimport toSource from './_toSource.js';\n\n/** `Object#toString` result references. */\nvar mapTag = '[object Map]',\n    objectTag = '[object Object]',\n    promiseTag = '[object Promise]',\n    setTag = '[object Set]',\n    weakMapTag = '[object WeakMap]';\n\nvar dataViewTag = '[object DataView]';\n\n/** Used to detect maps, sets, and weakmaps. */\nvar dataViewCtorString = toSource(DataView),\n    mapCtorString = toSource(Map),\n    promiseCtorString = toSource(Promise),\n    setCtorString = toSource(Set),\n    weakMapCtorString = toSource(WeakMap);\n\n/**\n * Gets the `toStringTag` of `value`.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the `toStringTag`.\n */\nvar getTag = baseGetTag;\n\n// Fallback for data views, maps, sets, and weak maps in IE 11 and promises in Node.js < 6.\nif ((DataView && getTag(new DataView(new ArrayBuffer(1))) != dataViewTag) ||\n    (Map && getTag(new Map) != mapTag) ||\n    (Promise && getTag(Promise.resolve()) != promiseTag) ||\n    (Set && getTag(new Set) != setTag) ||\n    (WeakMap && getTag(new WeakMap) != weakMapTag)) {\n  getTag = function(value) {\n    var result = baseGetTag(value),\n        Ctor = result == objectTag ? value.constructor : undefined,\n        ctorString = Ctor ? toSource(Ctor) : '';\n\n    if (ctorString) {\n      switch (ctorString) {\n        case dataViewCtorString: return dataViewTag;\n        case mapCtorString: return mapTag;\n        case promiseCtorString: return promiseTag;\n        case setCtorString: return setTag;\n        case weakMapCtorString: return weakMapTag;\n      }\n    }\n    return result;\n  };\n}\n\nexport default getTag;\n","/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Initializes an array clone.\n *\n * @private\n * @param {Array} array The array to clone.\n * @returns {Array} Returns the initialized clone.\n */\nfunction initCloneArray(array) {\n  var length = array.length,\n      result = new array.constructor(length);\n\n  // Add properties assigned by `RegExp#exec`.\n  if (length && typeof array[0] == 'string' && hasOwnProperty.call(array, 'index')) {\n    result.index = array.index;\n    result.input = array.input;\n  }\n  return result;\n}\n\nexport default initCloneArray;\n","import root from './_root.js';\n\n/** Built-in value references. */\nvar Uint8Array = root.Uint8Array;\n\nexport default Uint8Array;\n","import Uint8Array from './_Uint8Array.js';\n\n/**\n * Creates a clone of `arrayBuffer`.\n *\n * @private\n * @param {ArrayBuffer} arrayBuffer The array buffer to clone.\n * @returns {ArrayBuffer} Returns the cloned array buffer.\n */\nfunction cloneArrayBuffer(arrayBuffer) {\n  var result = new arrayBuffer.constructor(arrayBuffer.byteLength);\n  new Uint8Array(result).set(new Uint8Array(arrayBuffer));\n  return result;\n}\n\nexport default cloneArrayBuffer;\n","/** Used to match `RegExp` flags from their coerced string values. */\nvar reFlags = /\\w*$/;\n\n/**\n * Creates a clone of `regexp`.\n *\n * @private\n * @param {Object} regexp The regexp to clone.\n * @returns {Object} Returns the cloned regexp.\n */\nfunction cloneRegExp(regexp) {\n  var result = new regexp.constructor(regexp.source, reFlags.exec(regexp));\n  result.lastIndex = regexp.lastIndex;\n  return result;\n}\n\nexport default cloneRegExp;\n","import Symbol from './_Symbol.js';\n\n/** Used to convert symbols to primitives and strings. */\nvar symbolProto = Symbol ? Symbol.prototype : undefined,\n    symbolValueOf = symbolProto ? symbolProto.valueOf : undefined;\n\n/**\n * Creates a clone of the `symbol` object.\n *\n * @private\n * @param {Object} symbol The symbol object to clone.\n * @returns {Object} Returns the cloned symbol object.\n */\nfunction cloneSymbol(symbol) {\n  return symbolValueOf ? Object(symbolValueOf.call(symbol)) : {};\n}\n\nexport default cloneSymbol;\n","import cloneArrayBuffer from './_cloneArrayBuffer.js';\n\n/**\n * Creates a clone of `typedArray`.\n *\n * @private\n * @param {Object} typedArray The typed array to clone.\n * @param {boolean} [isDeep] Specify a deep clone.\n * @returns {Object} Returns the cloned typed array.\n */\nfunction cloneTypedArray(typedArray, isDeep) {\n  var buffer = isDeep ? cloneArrayBuffer(typedArray.buffer) : typedArray.buffer;\n  return new typedArray.constructor(buffer, typedArray.byteOffset, typedArray.length);\n}\n\nexport default cloneTypedArray;\n","import cloneArrayBuffer from './_cloneArrayBuffer.js';\nimport cloneDataView from './_cloneDataView.js';\nimport cloneRegExp from './_cloneRegExp.js';\nimport cloneSymbol from './_cloneSymbol.js';\nimport cloneTypedArray from './_cloneTypedArray.js';\n\n/** `Object#toString` result references. */\nvar boolTag = '[object Boolean]',\n    dateTag = '[object Date]',\n    mapTag = '[object Map]',\n    numberTag = '[object Number]',\n    regexpTag = '[object RegExp]',\n    setTag = '[object Set]',\n    stringTag = '[object String]',\n    symbolTag = '[object Symbol]';\n\nvar arrayBufferTag = '[object ArrayBuffer]',\n    dataViewTag = '[object DataView]',\n    float32Tag = '[object Float32Array]',\n    float64Tag = '[object Float64Array]',\n    int8Tag = '[object Int8Array]',\n    int16Tag = '[object Int16Array]',\n    int32Tag = '[object Int32Array]',\n    uint8Tag = '[object Uint8Array]',\n    uint8ClampedTag = '[object Uint8ClampedArray]',\n    uint16Tag = '[object Uint16Array]',\n    uint32Tag = '[object Uint32Array]';\n\n/**\n * Initializes an object clone based on its `toStringTag`.\n *\n * **Note:** This function only supports cloning values with tags of\n * `Boolean`, `Date`, `Error`, `Map`, `Number`, `RegExp`, `Set`, or `String`.\n *\n * @private\n * @param {Object} object The object to clone.\n * @param {string} tag The `toStringTag` of the object to clone.\n * @param {boolean} [isDeep] Specify a deep clone.\n * @returns {Object} Returns the initialized clone.\n */\nfunction initCloneByTag(object, tag, isDeep) {\n  var Ctor = object.constructor;\n  switch (tag) {\n    case arrayBufferTag:\n      return cloneArrayBuffer(object);\n\n    case boolTag:\n    case dateTag:\n      return new Ctor(+object);\n\n    case dataViewTag:\n      return cloneDataView(object, isDeep);\n\n    case float32Tag: case float64Tag:\n    case int8Tag: case int16Tag: case int32Tag:\n    case uint8Tag: case uint8ClampedTag: case uint16Tag: case uint32Tag:\n      return cloneTypedArray(object, isDeep);\n\n    case mapTag:\n      return new Ctor;\n\n    case numberTag:\n    case stringTag:\n      return new Ctor(object);\n\n    case regexpTag:\n      return cloneRegExp(object);\n\n    case setTag:\n      return new Ctor;\n\n    case symbolTag:\n      return cloneSymbol(object);\n  }\n}\n\nexport default initCloneByTag;\n","import cloneArrayBuffer from './_cloneArrayBuffer.js';\n\n/**\n * Creates a clone of `dataView`.\n *\n * @private\n * @param {Object} dataView The data view to clone.\n * @param {boolean} [isDeep] Specify a deep clone.\n * @returns {Object} Returns the cloned data view.\n */\nfunction cloneDataView(dataView, isDeep) {\n  var buffer = isDeep ? cloneArrayBuffer(dataView.buffer) : dataView.buffer;\n  return new dataView.constructor(buffer, dataView.byteOffset, dataView.byteLength);\n}\n\nexport default cloneDataView;\n","import baseIsMap from './_baseIsMap.js';\nimport baseUnary from './_baseUnary.js';\nimport nodeUtil from './_nodeUtil.js';\n\n/* Node.js helper references. */\nvar nodeIsMap = nodeUtil && nodeUtil.isMap;\n\n/**\n * Checks if `value` is classified as a `Map` object.\n *\n * @static\n * @memberOf _\n * @since 4.3.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a map, else `false`.\n * @example\n *\n * _.isMap(new Map);\n * // => true\n *\n * _.isMap(new WeakMap);\n * // => false\n */\nvar isMap = nodeIsMap ? baseUnary(nodeIsMap) : baseIsMap;\n\nexport default isMap;\n","import getTag from './_getTag.js';\nimport isObjectLike from './isObjectLike.js';\n\n/** `Object#toString` result references. */\nvar mapTag = '[object Map]';\n\n/**\n * The base implementation of `_.isMap` without Node.js optimizations.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a map, else `false`.\n */\nfunction baseIsMap(value) {\n  return isObjectLike(value) && getTag(value) == mapTag;\n}\n\nexport default baseIsMap;\n","import baseIsSet from './_baseIsSet.js';\nimport baseUnary from './_baseUnary.js';\nimport nodeUtil from './_nodeUtil.js';\n\n/* Node.js helper references. */\nvar nodeIsSet = nodeUtil && nodeUtil.isSet;\n\n/**\n * Checks if `value` is classified as a `Set` object.\n *\n * @static\n * @memberOf _\n * @since 4.3.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a set, else `false`.\n * @example\n *\n * _.isSet(new Set);\n * // => true\n *\n * _.isSet(new WeakSet);\n * // => false\n */\nvar isSet = nodeIsSet ? baseUnary(nodeIsSet) : baseIsSet;\n\nexport default isSet;\n","import getTag from './_getTag.js';\nimport isObjectLike from './isObjectLike.js';\n\n/** `Object#toString` result references. */\nvar setTag = '[object Set]';\n\n/**\n * The base implementation of `_.isSet` without Node.js optimizations.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a set, else `false`.\n */\nfunction baseIsSet(value) {\n  return isObjectLike(value) && getTag(value) == setTag;\n}\n\nexport default baseIsSet;\n","import Stack from './_Stack.js';\nimport arrayEach from './_arrayEach.js';\nimport assignValue from './_assignValue.js';\nimport baseAssign from './_baseAssign.js';\nimport baseAssignIn from './_baseAssignIn.js';\nimport cloneBuffer from './_cloneBuffer.js';\nimport copyArray from './_copyArray.js';\nimport copySymbols from './_copySymbols.js';\nimport copySymbolsIn from './_copySymbolsIn.js';\nimport getAllKeys from './_getAllKeys.js';\nimport getAllKeysIn from './_getAllKeysIn.js';\nimport getTag from './_getTag.js';\nimport initCloneArray from './_initCloneArray.js';\nimport initCloneByTag from './_initCloneByTag.js';\nimport initCloneObject from './_initCloneObject.js';\nimport isArray from './isArray.js';\nimport isBuffer from './isBuffer.js';\nimport isMap from './isMap.js';\nimport isObject from './isObject.js';\nimport isSet from './isSet.js';\nimport keys from './keys.js';\nimport keysIn from './keysIn.js';\n\n/** Used to compose bitmasks for cloning. */\nvar CLONE_DEEP_FLAG = 1,\n    CLONE_FLAT_FLAG = 2,\n    CLONE_SYMBOLS_FLAG = 4;\n\n/** `Object#toString` result references. */\nvar argsTag = '[object Arguments]',\n    arrayTag = '[object Array]',\n    boolTag = '[object Boolean]',\n    dateTag = '[object Date]',\n    errorTag = '[object Error]',\n    funcTag = '[object Function]',\n    genTag = '[object GeneratorFunction]',\n    mapTag = '[object Map]',\n    numberTag = '[object Number]',\n    objectTag = '[object Object]',\n    regexpTag = '[object RegExp]',\n    setTag = '[object Set]',\n    stringTag = '[object String]',\n    symbolTag = '[object Symbol]',\n    weakMapTag = '[object WeakMap]';\n\nvar arrayBufferTag = '[object ArrayBuffer]',\n    dataViewTag = '[object DataView]',\n    float32Tag = '[object Float32Array]',\n    float64Tag = '[object Float64Array]',\n    int8Tag = '[object Int8Array]',\n    int16Tag = '[object Int16Array]',\n    int32Tag = '[object Int32Array]',\n    uint8Tag = '[object Uint8Array]',\n    uint8ClampedTag = '[object Uint8ClampedArray]',\n    uint16Tag = '[object Uint16Array]',\n    uint32Tag = '[object Uint32Array]';\n\n/** Used to identify `toStringTag` values supported by `_.clone`. */\nvar cloneableTags = {};\ncloneableTags[argsTag] = cloneableTags[arrayTag] =\ncloneableTags[arrayBufferTag] = cloneableTags[dataViewTag] =\ncloneableTags[boolTag] = cloneableTags[dateTag] =\ncloneableTags[float32Tag] = cloneableTags[float64Tag] =\ncloneableTags[int8Tag] = cloneableTags[int16Tag] =\ncloneableTags[int32Tag] = cloneableTags[mapTag] =\ncloneableTags[numberTag] = cloneableTags[objectTag] =\ncloneableTags[regexpTag] = cloneableTags[setTag] =\ncloneableTags[stringTag] = cloneableTags[symbolTag] =\ncloneableTags[uint8Tag] = cloneableTags[uint8ClampedTag] =\ncloneableTags[uint16Tag] = cloneableTags[uint32Tag] = true;\ncloneableTags[errorTag] = cloneableTags[funcTag] =\ncloneableTags[weakMapTag] = false;\n\n/**\n * The base implementation of `_.clone` and `_.cloneDeep` which tracks\n * traversed objects.\n *\n * @private\n * @param {*} value The value to clone.\n * @param {boolean} bitmask The bitmask flags.\n *  1 - Deep clone\n *  2 - Flatten inherited properties\n *  4 - Clone symbols\n * @param {Function} [customizer] The function to customize cloning.\n * @param {string} [key] The key of `value`.\n * @param {Object} [object] The parent object of `value`.\n * @param {Object} [stack] Tracks traversed objects and their clone counterparts.\n * @returns {*} Returns the cloned value.\n */\nfunction baseClone(value, bitmask, customizer, key, object, stack) {\n  var result,\n      isDeep = bitmask & CLONE_DEEP_FLAG,\n      isFlat = bitmask & CLONE_FLAT_FLAG,\n      isFull = bitmask & CLONE_SYMBOLS_FLAG;\n\n  if (customizer) {\n    result = object ? customizer(value, key, object, stack) : customizer(value);\n  }\n  if (result !== undefined) {\n    return result;\n  }\n  if (!isObject(value)) {\n    return value;\n  }\n  var isArr = isArray(value);\n  if (isArr) {\n    result = initCloneArray(value);\n    if (!isDeep) {\n      return copyArray(value, result);\n    }\n  } else {\n    var tag = getTag(value),\n        isFunc = tag == funcTag || tag == genTag;\n\n    if (isBuffer(value)) {\n      return cloneBuffer(value, isDeep);\n    }\n    if (tag == objectTag || tag == argsTag || (isFunc && !object)) {\n      result = (isFlat || isFunc) ? {} : initCloneObject(value);\n      if (!isDeep) {\n        return isFlat\n          ? copySymbolsIn(value, baseAssignIn(result, value))\n          : copySymbols(value, baseAssign(result, value));\n      }\n    } else {\n      if (!cloneableTags[tag]) {\n        return object ? value : {};\n      }\n      result = initCloneByTag(value, tag, isDeep);\n    }\n  }\n  // Check for circular references and return its corresponding clone.\n  stack || (stack = new Stack);\n  var stacked = stack.get(value);\n  if (stacked) {\n    return stacked;\n  }\n  stack.set(value, result);\n\n  if (isSet(value)) {\n    value.forEach(function(subValue) {\n      result.add(baseClone(subValue, bitmask, customizer, subValue, value, stack));\n    });\n  } else if (isMap(value)) {\n    value.forEach(function(subValue, key) {\n      result.set(key, baseClone(subValue, bitmask, customizer, key, value, stack));\n    });\n  }\n\n  var keysFunc = isFull\n    ? (isFlat ? getAllKeysIn : getAllKeys)\n    : (isFlat ? keysIn : keys);\n\n  var props = isArr ? undefined : keysFunc(value);\n  arrayEach(props || value, function(subValue, key) {\n    if (props) {\n      key = subValue;\n      subValue = value[key];\n    }\n    // Recursively populate clone (susceptible to call stack limits).\n    assignValue(result, key, baseClone(subValue, bitmask, customizer, key, value, stack));\n  });\n  return result;\n}\n\nexport default baseClone;\n","/**\n * A specialized version of `_.forEach` for arrays without support for\n * iteratee shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array} Returns `array`.\n */\nfunction arrayEach(array, iteratee) {\n  var index = -1,\n      length = array == null ? 0 : array.length;\n\n  while (++index < length) {\n    if (iteratee(array[index], index, array) === false) {\n      break;\n    }\n  }\n  return array;\n}\n\nexport default arrayEach;\n","import MapCache from './_MapCache.js';\nimport setCacheAdd from './_setCacheAdd.js';\nimport setCacheHas from './_setCacheHas.js';\n\n/**\n *\n * Creates an array cache object to store unique values.\n *\n * @private\n * @constructor\n * @param {Array} [values] The values to cache.\n */\nfunction SetCache(values) {\n  var index = -1,\n      length = values == null ? 0 : values.length;\n\n  this.__data__ = new MapCache;\n  while (++index < length) {\n    this.add(values[index]);\n  }\n}\n\n// Add methods to `SetCache`.\nSetCache.prototype.add = SetCache.prototype.push = setCacheAdd;\nSetCache.prototype.has = setCacheHas;\n\nexport default SetCache;\n","/**\n * A specialized version of `_.some` for arrays without support for iteratee\n * shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} predicate The function invoked per iteration.\n * @returns {boolean} Returns `true` if any element passes the predicate check,\n *  else `false`.\n */\nfunction arraySome(array, predicate) {\n  var index = -1,\n      length = array == null ? 0 : array.length;\n\n  while (++index < length) {\n    if (predicate(array[index], index, array)) {\n      return true;\n    }\n  }\n  return false;\n}\n\nexport default arraySome;\n","/** Used to stand-in for `undefined` hash values. */\nvar HASH_UNDEFINED = '__lodash_hash_undefined__';\n\n/**\n * Adds `value` to the array cache.\n *\n * @private\n * @name add\n * @memberOf SetCache\n * @alias push\n * @param {*} value The value to cache.\n * @returns {Object} Returns the cache instance.\n */\nfunction setCacheAdd(value) {\n  this.__data__.set(value, HASH_UNDEFINED);\n  return this;\n}\n\nexport default setCacheAdd;\n","/**\n * Checks if `value` is in the array cache.\n *\n * @private\n * @name has\n * @memberOf SetCache\n * @param {*} value The value to search for.\n * @returns {number} Returns `true` if `value` is found, else `false`.\n */\nfunction setCacheHas(value) {\n  return this.__data__.has(value);\n}\n\nexport default setCacheHas;\n","import SetCache from './_SetCache.js';\nimport arraySome from './_arraySome.js';\nimport cacheHas from './_cacheHas.js';\n\n/** Used to compose bitmasks for value comparisons. */\nvar COMPARE_PARTIAL_FLAG = 1,\n    COMPARE_UNORDERED_FLAG = 2;\n\n/**\n * A specialized version of `baseIsEqualDeep` for arrays with support for\n * partial deep comparisons.\n *\n * @private\n * @param {Array} array The array to compare.\n * @param {Array} other The other array to compare.\n * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.\n * @param {Function} customizer The function to customize comparisons.\n * @param {Function} equalFunc The function to determine equivalents of values.\n * @param {Object} stack Tracks traversed `array` and `other` objects.\n * @returns {boolean} Returns `true` if the arrays are equivalent, else `false`.\n */\nfunction equalArrays(array, other, bitmask, customizer, equalFunc, stack) {\n  var isPartial = bitmask & COMPARE_PARTIAL_FLAG,\n      arrLength = array.length,\n      othLength = other.length;\n\n  if (arrLength != othLength && !(isPartial && othLength > arrLength)) {\n    return false;\n  }\n  // Check that cyclic values are equal.\n  var arrStacked = stack.get(array);\n  var othStacked = stack.get(other);\n  if (arrStacked && othStacked) {\n    return arrStacked == other && othStacked == array;\n  }\n  var index = -1,\n      result = true,\n      seen = (bitmask & COMPARE_UNORDERED_FLAG) ? new SetCache : undefined;\n\n  stack.set(array, other);\n  stack.set(other, array);\n\n  // Ignore non-index properties.\n  while (++index < arrLength) {\n    var arrValue = array[index],\n        othValue = other[index];\n\n    if (customizer) {\n      var compared = isPartial\n        ? customizer(othValue, arrValue, index, other, array, stack)\n        : customizer(arrValue, othValue, index, array, other, stack);\n    }\n    if (compared !== undefined) {\n      if (compared) {\n        continue;\n      }\n      result = false;\n      break;\n    }\n    // Recursively compare arrays (susceptible to call stack limits).\n    if (seen) {\n      if (!arraySome(other, function(othValue, othIndex) {\n            if (!cacheHas(seen, othIndex) &&\n                (arrValue === othValue || equalFunc(arrValue, othValue, bitmask, customizer, stack))) {\n              return seen.push(othIndex);\n            }\n          })) {\n        result = false;\n        break;\n      }\n    } else if (!(\n          arrValue === othValue ||\n            equalFunc(arrValue, othValue, bitmask, customizer, stack)\n        )) {\n      result = false;\n      break;\n    }\n  }\n  stack['delete'](array);\n  stack['delete'](other);\n  return result;\n}\n\nexport default equalArrays;\n","/**\n * Checks if a `cache` value for `key` exists.\n *\n * @private\n * @param {Object} cache The cache to query.\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction cacheHas(cache, key) {\n  return cache.has(key);\n}\n\nexport default cacheHas;\n","/**\n * Converts `map` to its key-value pairs.\n *\n * @private\n * @param {Object} map The map to convert.\n * @returns {Array} Returns the key-value pairs.\n */\nfunction mapToArray(map) {\n  var index = -1,\n      result = Array(map.size);\n\n  map.forEach(function(value, key) {\n    result[++index] = [key, value];\n  });\n  return result;\n}\n\nexport default mapToArray;\n","/**\n * Converts `set` to an array of its values.\n *\n * @private\n * @param {Object} set The set to convert.\n * @returns {Array} Returns the values.\n */\nfunction setToArray(set) {\n  var index = -1,\n      result = Array(set.size);\n\n  set.forEach(function(value) {\n    result[++index] = value;\n  });\n  return result;\n}\n\nexport default setToArray;\n","import Symbol from './_Symbol.js';\nimport Uint8Array from './_Uint8Array.js';\nimport eq from './eq.js';\nimport equalArrays from './_equalArrays.js';\nimport mapToArray from './_mapToArray.js';\nimport setToArray from './_setToArray.js';\n\n/** Used to compose bitmasks for value comparisons. */\nvar COMPARE_PARTIAL_FLAG = 1,\n    COMPARE_UNORDERED_FLAG = 2;\n\n/** `Object#toString` result references. */\nvar boolTag = '[object Boolean]',\n    dateTag = '[object Date]',\n    errorTag = '[object Error]',\n    mapTag = '[object Map]',\n    numberTag = '[object Number]',\n    regexpTag = '[object RegExp]',\n    setTag = '[object Set]',\n    stringTag = '[object String]',\n    symbolTag = '[object Symbol]';\n\nvar arrayBufferTag = '[object ArrayBuffer]',\n    dataViewTag = '[object DataView]';\n\n/** Used to convert symbols to primitives and strings. */\nvar symbolProto = Symbol ? Symbol.prototype : undefined,\n    symbolValueOf = symbolProto ? symbolProto.valueOf : undefined;\n\n/**\n * A specialized version of `baseIsEqualDeep` for comparing objects of\n * the same `toStringTag`.\n *\n * **Note:** This function only supports comparing values with tags of\n * `Boolean`, `Date`, `Error`, `Number`, `RegExp`, or `String`.\n *\n * @private\n * @param {Object} object The object to compare.\n * @param {Object} other The other object to compare.\n * @param {string} tag The `toStringTag` of the objects to compare.\n * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.\n * @param {Function} customizer The function to customize comparisons.\n * @param {Function} equalFunc The function to determine equivalents of values.\n * @param {Object} stack Tracks traversed `object` and `other` objects.\n * @returns {boolean} Returns `true` if the objects are equivalent, else `false`.\n */\nfunction equalByTag(object, other, tag, bitmask, customizer, equalFunc, stack) {\n  switch (tag) {\n    case dataViewTag:\n      if ((object.byteLength != other.byteLength) ||\n          (object.byteOffset != other.byteOffset)) {\n        return false;\n      }\n      object = object.buffer;\n      other = other.buffer;\n\n    case arrayBufferTag:\n      if ((object.byteLength != other.byteLength) ||\n          !equalFunc(new Uint8Array(object), new Uint8Array(other))) {\n        return false;\n      }\n      return true;\n\n    case boolTag:\n    case dateTag:\n    case numberTag:\n      // Coerce booleans to `1` or `0` and dates to milliseconds.\n      // Invalid dates are coerced to `NaN`.\n      return eq(+object, +other);\n\n    case errorTag:\n      return object.name == other.name && object.message == other.message;\n\n    case regexpTag:\n    case stringTag:\n      // Coerce regexes to strings and treat strings, primitives and objects,\n      // as equal. See http://www.ecma-international.org/ecma-262/7.0/#sec-regexp.prototype.tostring\n      // for more details.\n      return object == (other + '');\n\n    case mapTag:\n      var convert = mapToArray;\n\n    case setTag:\n      var isPartial = bitmask & COMPARE_PARTIAL_FLAG;\n      convert || (convert = setToArray);\n\n      if (object.size != other.size && !isPartial) {\n        return false;\n      }\n      // Assume cyclic values are equal.\n      var stacked = stack.get(object);\n      if (stacked) {\n        return stacked == other;\n      }\n      bitmask |= COMPARE_UNORDERED_FLAG;\n\n      // Recursively compare objects (susceptible to call stack limits).\n      stack.set(object, other);\n      var result = equalArrays(convert(object), convert(other), bitmask, customizer, equalFunc, stack);\n      stack['delete'](object);\n      return result;\n\n    case symbolTag:\n      if (symbolValueOf) {\n        return symbolValueOf.call(object) == symbolValueOf.call(other);\n      }\n  }\n  return false;\n}\n\nexport default equalByTag;\n","import getAllKeys from './_getAllKeys.js';\n\n/** Used to compose bitmasks for value comparisons. */\nvar COMPARE_PARTIAL_FLAG = 1;\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * A specialized version of `baseIsEqualDeep` for objects with support for\n * partial deep comparisons.\n *\n * @private\n * @param {Object} object The object to compare.\n * @param {Object} other The other object to compare.\n * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.\n * @param {Function} customizer The function to customize comparisons.\n * @param {Function} equalFunc The function to determine equivalents of values.\n * @param {Object} stack Tracks traversed `object` and `other` objects.\n * @returns {boolean} Returns `true` if the objects are equivalent, else `false`.\n */\nfunction equalObjects(object, other, bitmask, customizer, equalFunc, stack) {\n  var isPartial = bitmask & COMPARE_PARTIAL_FLAG,\n      objProps = getAllKeys(object),\n      objLength = objProps.length,\n      othProps = getAllKeys(other),\n      othLength = othProps.length;\n\n  if (objLength != othLength && !isPartial) {\n    return false;\n  }\n  var index = objLength;\n  while (index--) {\n    var key = objProps[index];\n    if (!(isPartial ? key in other : hasOwnProperty.call(other, key))) {\n      return false;\n    }\n  }\n  // Check that cyclic values are equal.\n  var objStacked = stack.get(object);\n  var othStacked = stack.get(other);\n  if (objStacked && othStacked) {\n    return objStacked == other && othStacked == object;\n  }\n  var result = true;\n  stack.set(object, other);\n  stack.set(other, object);\n\n  var skipCtor = isPartial;\n  while (++index < objLength) {\n    key = objProps[index];\n    var objValue = object[key],\n        othValue = other[key];\n\n    if (customizer) {\n      var compared = isPartial\n        ? customizer(othValue, objValue, key, other, object, stack)\n        : customizer(objValue, othValue, key, object, other, stack);\n    }\n    // Recursively compare objects (susceptible to call stack limits).\n    if (!(compared === undefined\n          ? (objValue === othValue || equalFunc(objValue, othValue, bitmask, customizer, stack))\n          : compared\n        )) {\n      result = false;\n      break;\n    }\n    skipCtor || (skipCtor = key == 'constructor');\n  }\n  if (result && !skipCtor) {\n    var objCtor = object.constructor,\n        othCtor = other.constructor;\n\n    // Non `Object` object instances with different constructors are not equal.\n    if (objCtor != othCtor &&\n        ('constructor' in object && 'constructor' in other) &&\n        !(typeof objCtor == 'function' && objCtor instanceof objCtor &&\n          typeof othCtor == 'function' && othCtor instanceof othCtor)) {\n      result = false;\n    }\n  }\n  stack['delete'](object);\n  stack['delete'](other);\n  return result;\n}\n\nexport default equalObjects;\n","import Stack from './_Stack.js';\nimport equalArrays from './_equalArrays.js';\nimport equalByTag from './_equalByTag.js';\nimport equalObjects from './_equalObjects.js';\nimport getTag from './_getTag.js';\nimport isArray from './isArray.js';\nimport isBuffer from './isBuffer.js';\nimport isTypedArray from './isTypedArray.js';\n\n/** Used to compose bitmasks for value comparisons. */\nvar COMPARE_PARTIAL_FLAG = 1;\n\n/** `Object#toString` result references. */\nvar argsTag = '[object Arguments]',\n    arrayTag = '[object Array]',\n    objectTag = '[object Object]';\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * A specialized version of `baseIsEqual` for arrays and objects which performs\n * deep comparisons and tracks traversed objects enabling objects with circular\n * references to be compared.\n *\n * @private\n * @param {Object} object The object to compare.\n * @param {Object} other The other object to compare.\n * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.\n * @param {Function} customizer The function to customize comparisons.\n * @param {Function} equalFunc The function to determine equivalents of values.\n * @param {Object} [stack] Tracks traversed `object` and `other` objects.\n * @returns {boolean} Returns `true` if the objects are equivalent, else `false`.\n */\nfunction baseIsEqualDeep(object, other, bitmask, customizer, equalFunc, stack) {\n  var objIsArr = isArray(object),\n      othIsArr = isArray(other),\n      objTag = objIsArr ? arrayTag : getTag(object),\n      othTag = othIsArr ? arrayTag : getTag(other);\n\n  objTag = objTag == argsTag ? objectTag : objTag;\n  othTag = othTag == argsTag ? objectTag : othTag;\n\n  var objIsObj = objTag == objectTag,\n      othIsObj = othTag == objectTag,\n      isSameTag = objTag == othTag;\n\n  if (isSameTag && isBuffer(object)) {\n    if (!isBuffer(other)) {\n      return false;\n    }\n    objIsArr = true;\n    objIsObj = false;\n  }\n  if (isSameTag && !objIsObj) {\n    stack || (stack = new Stack);\n    return (objIsArr || isTypedArray(object))\n      ? equalArrays(object, other, bitmask, customizer, equalFunc, stack)\n      : equalByTag(object, other, objTag, bitmask, customizer, equalFunc, stack);\n  }\n  if (!(bitmask & COMPARE_PARTIAL_FLAG)) {\n    var objIsWrapped = objIsObj && hasOwnProperty.call(object, '__wrapped__'),\n        othIsWrapped = othIsObj && hasOwnProperty.call(other, '__wrapped__');\n\n    if (objIsWrapped || othIsWrapped) {\n      var objUnwrapped = objIsWrapped ? object.value() : object,\n          othUnwrapped = othIsWrapped ? other.value() : other;\n\n      stack || (stack = new Stack);\n      return equalFunc(objUnwrapped, othUnwrapped, bitmask, customizer, stack);\n    }\n  }\n  if (!isSameTag) {\n    return false;\n  }\n  stack || (stack = new Stack);\n  return equalObjects(object, other, bitmask, customizer, equalFunc, stack);\n}\n\nexport default baseIsEqualDeep;\n","import baseIsEqualDeep from './_baseIsEqualDeep.js';\nimport isObjectLike from './isObjectLike.js';\n\n/**\n * The base implementation of `_.isEqual` which supports partial comparisons\n * and tracks traversed objects.\n *\n * @private\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @param {boolean} bitmask The bitmask flags.\n *  1 - Unordered comparison\n *  2 - Partial comparison\n * @param {Function} [customizer] The function to customize comparisons.\n * @param {Object} [stack] Tracks traversed `value` and `other` objects.\n * @returns {boolean} Returns `true` if the values are equivalent, else `false`.\n */\nfunction baseIsEqual(value, other, bitmask, customizer, stack) {\n  if (value === other) {\n    return true;\n  }\n  if (value == null || other == null || (!isObjectLike(value) && !isObjectLike(other))) {\n    return value !== value && other !== other;\n  }\n  return baseIsEqualDeep(value, other, bitmask, customizer, baseIsEqual, stack);\n}\n\nexport default baseIsEqual;\n","import isObject from './isObject.js';\n\n/**\n * Checks if `value` is suitable for strict equality comparisons, i.e. `===`.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` if suitable for strict\n *  equality comparisons, else `false`.\n */\nfunction isStrictComparable(value) {\n  return value === value && !isObject(value);\n}\n\nexport default isStrictComparable;\n","/**\n * A specialized version of `matchesProperty` for source values suitable\n * for strict equality comparisons, i.e. `===`.\n *\n * @private\n * @param {string} key The key of the property to get.\n * @param {*} srcValue The value to match.\n * @returns {Function} Returns the new spec function.\n */\nfunction matchesStrictComparable(key, srcValue) {\n  return function(object) {\n    if (object == null) {\n      return false;\n    }\n    return object[key] === srcValue &&\n      (srcValue !== undefined || (key in Object(object)));\n  };\n}\n\nexport default matchesStrictComparable;\n","import baseIsMatch from './_baseIsMatch.js';\nimport getMatchData from './_getMatchData.js';\nimport matchesStrictComparable from './_matchesStrictComparable.js';\n\n/**\n * The base implementation of `_.matches` which doesn't clone `source`.\n *\n * @private\n * @param {Object} source The object of property values to match.\n * @returns {Function} Returns the new spec function.\n */\nfunction baseMatches(source) {\n  var matchData = getMatchData(source);\n  if (matchData.length == 1 && matchData[0][2]) {\n    return matchesStrictComparable(matchData[0][0], matchData[0][1]);\n  }\n  return function(object) {\n    return object === source || baseIsMatch(object, source, matchData);\n  };\n}\n\nexport default baseMatches;\n","import isStrictComparable from './_isStrictComparable.js';\nimport keys from './keys.js';\n\n/**\n * Gets the property names, values, and compare flags of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the match data of `object`.\n */\nfunction getMatchData(object) {\n  var result = keys(object),\n      length = result.length;\n\n  while (length--) {\n    var key = result[length],\n        value = object[key];\n\n    result[length] = [key, value, isStrictComparable(value)];\n  }\n  return result;\n}\n\nexport default getMatchData;\n","import Stack from './_Stack.js';\nimport baseIsEqual from './_baseIsEqual.js';\n\n/** Used to compose bitmasks for value comparisons. */\nvar COMPARE_PARTIAL_FLAG = 1,\n    COMPARE_UNORDERED_FLAG = 2;\n\n/**\n * The base implementation of `_.isMatch` without support for iteratee shorthands.\n *\n * @private\n * @param {Object} object The object to inspect.\n * @param {Object} source The object of property values to match.\n * @param {Array} matchData The property names, values, and compare flags to match.\n * @param {Function} [customizer] The function to customize comparisons.\n * @returns {boolean} Returns `true` if `object` is a match, else `false`.\n */\nfunction baseIsMatch(object, source, matchData, customizer) {\n  var index = matchData.length,\n      length = index,\n      noCustomizer = !customizer;\n\n  if (object == null) {\n    return !length;\n  }\n  object = Object(object);\n  while (index--) {\n    var data = matchData[index];\n    if ((noCustomizer && data[2])\n          ? data[1] !== object[data[0]]\n          : !(data[0] in object)\n        ) {\n      return false;\n    }\n  }\n  while (++index < length) {\n    data = matchData[index];\n    var key = data[0],\n        objValue = object[key],\n        srcValue = data[1];\n\n    if (noCustomizer && data[2]) {\n      if (objValue === undefined && !(key in object)) {\n        return false;\n      }\n    } else {\n      var stack = new Stack;\n      if (customizer) {\n        var result = customizer(objValue, srcValue, key, object, source, stack);\n      }\n      if (!(result === undefined\n            ? baseIsEqual(srcValue, objValue, COMPARE_PARTIAL_FLAG | COMPARE_UNORDERED_FLAG, customizer, stack)\n            : result\n          )) {\n        return false;\n      }\n    }\n  }\n  return true;\n}\n\nexport default baseIsMatch;\n","/**\n * The base implementation of `_.hasIn` without support for deep paths.\n *\n * @private\n * @param {Object} [object] The object to query.\n * @param {Array|string} key The key to check.\n * @returns {boolean} Returns `true` if `key` exists, else `false`.\n */\nfunction baseHasIn(object, key) {\n  return object != null && key in Object(object);\n}\n\nexport default baseHasIn;\n","import baseHasIn from './_baseHasIn.js';\nimport hasPath from './_hasPath.js';\n\n/**\n * Checks if `path` is a direct or inherited property of `object`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Object\n * @param {Object} object The object to query.\n * @param {Array|string} path The path to check.\n * @returns {boolean} Returns `true` if `path` exists, else `false`.\n * @example\n *\n * var object = _.create({ 'a': _.create({ 'b': 2 }) });\n *\n * _.hasIn(object, 'a');\n * // => true\n *\n * _.hasIn(object, 'a.b');\n * // => true\n *\n * _.hasIn(object, ['a', 'b']);\n * // => true\n *\n * _.hasIn(object, 'b');\n * // => false\n */\nfunction hasIn(object, path) {\n  return object != null && hasPath(object, path, baseHasIn);\n}\n\nexport default hasIn;\n","import castPath from './_castPath.js';\nimport isArguments from './isArguments.js';\nimport isArray from './isArray.js';\nimport isIndex from './_isIndex.js';\nimport isLength from './isLength.js';\nimport toKey from './_toKey.js';\n\n/**\n * Checks if `path` exists on `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {Array|string} path The path to check.\n * @param {Function} hasFunc The function to check properties.\n * @returns {boolean} Returns `true` if `path` exists, else `false`.\n */\nfunction hasPath(object, path, hasFunc) {\n  path = castPath(path, object);\n\n  var index = -1,\n      length = path.length,\n      result = false;\n\n  while (++index < length) {\n    var key = toKey(path[index]);\n    if (!(result = object != null && hasFunc(object, key))) {\n      break;\n    }\n    object = object[key];\n  }\n  if (result || ++index != length) {\n    return result;\n  }\n  length = object == null ? 0 : object.length;\n  return !!length && isLength(length) && isIndex(key, length) &&\n    (isArray(object) || isArguments(object));\n}\n\nexport default hasPath;\n","import baseProperty from './_baseProperty.js';\nimport basePropertyDeep from './_basePropertyDeep.js';\nimport isKey from './_isKey.js';\nimport toKey from './_toKey.js';\n\n/**\n * Creates a function that returns the value at `path` of a given object.\n *\n * @static\n * @memberOf _\n * @since 2.4.0\n * @category Util\n * @param {Array|string} path The path of the property to get.\n * @returns {Function} Returns the new accessor function.\n * @example\n *\n * var objects = [\n *   { 'a': { 'b': 2 } },\n *   { 'a': { 'b': 1 } }\n * ];\n *\n * _.map(objects, _.property('a.b'));\n * // => [2, 1]\n *\n * _.map(_.sortBy(objects, _.property(['a', 'b'])), 'a.b');\n * // => [1, 2]\n */\nfunction property(path) {\n  return isKey(path) ? baseProperty(toKey(path)) : basePropertyDeep(path);\n}\n\nexport default property;\n","/**\n * The base implementation of `_.property` without support for deep paths.\n *\n * @private\n * @param {string} key The key of the property to get.\n * @returns {Function} Returns the new accessor function.\n */\nfunction baseProperty(key) {\n  return function(object) {\n    return object == null ? undefined : object[key];\n  };\n}\n\nexport default baseProperty;\n","import baseGet from './_baseGet.js';\n\n/**\n * A specialized version of `baseProperty` which supports deep paths.\n *\n * @private\n * @param {Array|string} path The path of the property to get.\n * @returns {Function} Returns the new accessor function.\n */\nfunction basePropertyDeep(path) {\n  return function(object) {\n    return baseGet(object, path);\n  };\n}\n\nexport default basePropertyDeep;\n","import baseMatches from './_baseMatches.js';\nimport baseMatchesProperty from './_baseMatchesProperty.js';\nimport identity from './identity.js';\nimport isArray from './isArray.js';\nimport property from './property.js';\n\n/**\n * The base implementation of `_.iteratee`.\n *\n * @private\n * @param {*} [value=_.identity] The value to convert to an iteratee.\n * @returns {Function} Returns the iteratee.\n */\nfunction baseIteratee(value) {\n  // Don't store the `typeof` result in a variable to avoid a JIT bug in Safari 9.\n  // See https://bugs.webkit.org/show_bug.cgi?id=156034 for more details.\n  if (typeof value == 'function') {\n    return value;\n  }\n  if (value == null) {\n    return identity;\n  }\n  if (typeof value == 'object') {\n    return isArray(value)\n      ? baseMatchesProperty(value[0], value[1])\n      : baseMatches(value);\n  }\n  return property(value);\n}\n\nexport default baseIteratee;\n","import baseIsEqual from './_baseIsEqual.js';\nimport get from './get.js';\nimport hasIn from './hasIn.js';\nimport isKey from './_isKey.js';\nimport isStrictComparable from './_isStrictComparable.js';\nimport matchesStrictComparable from './_matchesStrictComparable.js';\nimport toKey from './_toKey.js';\n\n/** Used to compose bitmasks for value comparisons. */\nvar COMPARE_PARTIAL_FLAG = 1,\n    COMPARE_UNORDERED_FLAG = 2;\n\n/**\n * The base implementation of `_.matchesProperty` which doesn't clone `srcValue`.\n *\n * @private\n * @param {string} path The path of the property to get.\n * @param {*} srcValue The value to match.\n * @returns {Function} Returns the new spec function.\n */\nfunction baseMatchesProperty(path, srcValue) {\n  if (isKey(path) && isStrictComparable(srcValue)) {\n    return matchesStrictComparable(toKey(path), srcValue);\n  }\n  return function(object) {\n    var objValue = get(object, path);\n    return (objValue === undefined && objValue === srcValue)\n      ? hasIn(object, path)\n      : baseIsEqual(srcValue, objValue, COMPARE_PARTIAL_FLAG | COMPARE_UNORDERED_FLAG);\n  };\n}\n\nexport default baseMatchesProperty;\n","import createBaseFor from './_createBaseFor.js';\n\n/**\n * The base implementation of `baseForOwn` which iterates over `object`\n * properties returned by `keysFunc` and invokes `iteratee` for each property.\n * Iteratee functions may exit iteration early by explicitly returning `false`.\n *\n * @private\n * @param {Object} object The object to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @param {Function} keysFunc The function to get the keys of `object`.\n * @returns {Object} Returns `object`.\n */\nvar baseFor = createBaseFor();\n\nexport default baseFor;\n","/**\n * Creates a base function for methods like `_.forIn` and `_.forOwn`.\n *\n * @private\n * @param {boolean} [fromRight] Specify iterating from right to left.\n * @returns {Function} Returns the new base function.\n */\nfunction createBaseFor(fromRight) {\n  return function(object, iteratee, keysFunc) {\n    var index = -1,\n        iterable = Object(object),\n        props = keysFunc(object),\n        length = props.length;\n\n    while (length--) {\n      var key = props[fromRight ? length : ++index];\n      if (iteratee(iterable[key], key, iterable) === false) {\n        break;\n      }\n    }\n    return object;\n  };\n}\n\nexport default createBaseFor;\n","import baseForOwn from './_baseForOwn.js';\nimport createBaseEach from './_createBaseEach.js';\n\n/**\n * The base implementation of `_.forEach` without support for iteratee shorthands.\n *\n * @private\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array|Object} Returns `collection`.\n */\nvar baseEach = createBaseEach(baseForOwn);\n\nexport default baseEach;\n","import isArrayLike from './isArrayLike.js';\n\n/**\n * Creates a `baseEach` or `baseEachRight` function.\n *\n * @private\n * @param {Function} eachFunc The function to iterate over a collection.\n * @param {boolean} [fromRight] Specify iterating from right to left.\n * @returns {Function} Returns the new base function.\n */\nfunction createBaseEach(eachFunc, fromRight) {\n  return function(collection, iteratee) {\n    if (collection == null) {\n      return collection;\n    }\n    if (!isArrayLike(collection)) {\n      return eachFunc(collection, iteratee);\n    }\n    var length = collection.length,\n        index = fromRight ? length : -1,\n        iterable = Object(collection);\n\n    while ((fromRight ? index-- : ++index < length)) {\n      if (iteratee(iterable[index], index, iterable) === false) {\n        break;\n      }\n    }\n    return collection;\n  };\n}\n\nexport default createBaseEach;\n","import baseFor from './_baseFor.js';\nimport keys from './keys.js';\n\n/**\n * The base implementation of `_.forOwn` without support for iteratee shorthands.\n *\n * @private\n * @param {Object} object The object to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Object} Returns `object`.\n */\nfunction baseForOwn(object, iteratee) {\n  return object && baseFor(object, iteratee, keys);\n}\n\nexport default baseForOwn;\n","import root from './_root.js';\n\n/**\n * Gets the timestamp of the number of milliseconds that have elapsed since\n * the Unix epoch (1 January 1970 00:00:00 UTC).\n *\n * @static\n * @memberOf _\n * @since 2.4.0\n * @category Date\n * @returns {number} Returns the timestamp.\n * @example\n *\n * _.defer(function(stamp) {\n *   console.log(_.now() - stamp);\n * }, _.now());\n * // => Logs the number of milliseconds it took for the deferred invocation.\n */\nvar now = function() {\n  return root.Date.now();\n};\n\nexport default now;\n","import isObject from './isObject.js';\nimport now from './now.js';\nimport toNumber from './toNumber.js';\n\n/** Error message constants. */\nvar FUNC_ERROR_TEXT = 'Expected a function';\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeMax = Math.max,\n    nativeMin = Math.min;\n\n/**\n * Creates a debounced function that delays invoking `func` until after `wait`\n * milliseconds have elapsed since the last time the debounced function was\n * invoked. The debounced function comes with a `cancel` method to cancel\n * delayed `func` invocations and a `flush` method to immediately invoke them.\n * Provide `options` to indicate whether `func` should be invoked on the\n * leading and/or trailing edge of the `wait` timeout. The `func` is invoked\n * with the last arguments provided to the debounced function. Subsequent\n * calls to the debounced function return the result of the last `func`\n * invocation.\n *\n * **Note:** If `leading` and `trailing` options are `true`, `func` is\n * invoked on the trailing edge of the timeout only if the debounced function\n * is invoked more than once during the `wait` timeout.\n *\n * If `wait` is `0` and `leading` is `false`, `func` invocation is deferred\n * until to the next tick, similar to `setTimeout` with a timeout of `0`.\n *\n * See [David Corbacho's article](https://css-tricks.com/debouncing-throttling-explained-examples/)\n * for details over the differences between `_.debounce` and `_.throttle`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Function\n * @param {Function} func The function to debounce.\n * @param {number} [wait=0] The number of milliseconds to delay.\n * @param {Object} [options={}] The options object.\n * @param {boolean} [options.leading=false]\n *  Specify invoking on the leading edge of the timeout.\n * @param {number} [options.maxWait]\n *  The maximum time `func` is allowed to be delayed before it's invoked.\n * @param {boolean} [options.trailing=true]\n *  Specify invoking on the trailing edge of the timeout.\n * @returns {Function} Returns the new debounced function.\n * @example\n *\n * // Avoid costly calculations while the window size is in flux.\n * jQuery(window).on('resize', _.debounce(calculateLayout, 150));\n *\n * // Invoke `sendMail` when clicked, debouncing subsequent calls.\n * jQuery(element).on('click', _.debounce(sendMail, 300, {\n *   'leading': true,\n *   'trailing': false\n * }));\n *\n * // Ensure `batchLog` is invoked once after 1 second of debounced calls.\n * var debounced = _.debounce(batchLog, 250, { 'maxWait': 1000 });\n * var source = new EventSource('/stream');\n * jQuery(source).on('message', debounced);\n *\n * // Cancel the trailing debounced invocation.\n * jQuery(window).on('popstate', debounced.cancel);\n */\nfunction debounce(func, wait, options) {\n  var lastArgs,\n      lastThis,\n      maxWait,\n      result,\n      timerId,\n      lastCallTime,\n      lastInvokeTime = 0,\n      leading = false,\n      maxing = false,\n      trailing = true;\n\n  if (typeof func != 'function') {\n    throw new TypeError(FUNC_ERROR_TEXT);\n  }\n  wait = toNumber(wait) || 0;\n  if (isObject(options)) {\n    leading = !!options.leading;\n    maxing = 'maxWait' in options;\n    maxWait = maxing ? nativeMax(toNumber(options.maxWait) || 0, wait) : maxWait;\n    trailing = 'trailing' in options ? !!options.trailing : trailing;\n  }\n\n  function invokeFunc(time) {\n    var args = lastArgs,\n        thisArg = lastThis;\n\n    lastArgs = lastThis = undefined;\n    lastInvokeTime = time;\n    result = func.apply(thisArg, args);\n    return result;\n  }\n\n  function leadingEdge(time) {\n    // Reset any `maxWait` timer.\n    lastInvokeTime = time;\n    // Start the timer for the trailing edge.\n    timerId = setTimeout(timerExpired, wait);\n    // Invoke the leading edge.\n    return leading ? invokeFunc(time) : result;\n  }\n\n  function remainingWait(time) {\n    var timeSinceLastCall = time - lastCallTime,\n        timeSinceLastInvoke = time - lastInvokeTime,\n        timeWaiting = wait - timeSinceLastCall;\n\n    return maxing\n      ? nativeMin(timeWaiting, maxWait - timeSinceLastInvoke)\n      : timeWaiting;\n  }\n\n  function shouldInvoke(time) {\n    var timeSinceLastCall = time - lastCallTime,\n        timeSinceLastInvoke = time - lastInvokeTime;\n\n    // Either this is the first call, activity has stopped and we're at the\n    // trailing edge, the system time has gone backwards and we're treating\n    // it as the trailing edge, or we've hit the `maxWait` limit.\n    return (lastCallTime === undefined || (timeSinceLastCall >= wait) ||\n      (timeSinceLastCall < 0) || (maxing && timeSinceLastInvoke >= maxWait));\n  }\n\n  function timerExpired() {\n    var time = now();\n    if (shouldInvoke(time)) {\n      return trailingEdge(time);\n    }\n    // Restart the timer.\n    timerId = setTimeout(timerExpired, remainingWait(time));\n  }\n\n  function trailingEdge(time) {\n    timerId = undefined;\n\n    // Only invoke if we have `lastArgs` which means `func` has been\n    // debounced at least once.\n    if (trailing && lastArgs) {\n      return invokeFunc(time);\n    }\n    lastArgs = lastThis = undefined;\n    return result;\n  }\n\n  function cancel() {\n    if (timerId !== undefined) {\n      clearTimeout(timerId);\n    }\n    lastInvokeTime = 0;\n    lastArgs = lastCallTime = lastThis = timerId = undefined;\n  }\n\n  function flush() {\n    return timerId === undefined ? result : trailingEdge(now());\n  }\n\n  function debounced() {\n    var time = now(),\n        isInvoking = shouldInvoke(time);\n\n    lastArgs = arguments;\n    lastThis = this;\n    lastCallTime = time;\n\n    if (isInvoking) {\n      if (timerId === undefined) {\n        return leadingEdge(lastCallTime);\n      }\n      if (maxing) {\n        // Handle invocations in a tight loop.\n        clearTimeout(timerId);\n        timerId = setTimeout(timerExpired, wait);\n        return invokeFunc(lastCallTime);\n      }\n    }\n    if (timerId === undefined) {\n      timerId = setTimeout(timerExpired, wait);\n    }\n    return result;\n  }\n  debounced.cancel = cancel;\n  debounced.flush = flush;\n  return debounced;\n}\n\nexport default debounce;\n","import baseAssignValue from './_baseAssignValue.js';\nimport eq from './eq.js';\n\n/**\n * This function is like `assignValue` except that it doesn't assign\n * `undefined` values.\n *\n * @private\n * @param {Object} object The object to modify.\n * @param {string} key The key of the property to assign.\n * @param {*} value The value to assign.\n */\nfunction assignMergeValue(object, key, value) {\n  if ((value !== undefined && !eq(object[key], value)) ||\n      (value === undefined && !(key in object))) {\n    baseAssignValue(object, key, value);\n  }\n}\n\nexport default assignMergeValue;\n","/**\n * Gets the value at `key`, unless `key` is \"__proto__\" or \"constructor\".\n *\n * @private\n * @param {Object} object The object to query.\n * @param {string} key The key of the property to get.\n * @returns {*} Returns the property value.\n */\nfunction safeGet(object, key) {\n  if (key === 'constructor' && typeof object[key] === 'function') {\n    return;\n  }\n\n  if (key == '__proto__') {\n    return;\n  }\n\n  return object[key];\n}\n\nexport default safeGet;\n","import assignMergeValue from './_assignMergeValue.js';\nimport cloneBuffer from './_cloneBuffer.js';\nimport cloneTypedArray from './_cloneTypedArray.js';\nimport copyArray from './_copyArray.js';\nimport initCloneObject from './_initCloneObject.js';\nimport isArguments from './isArguments.js';\nimport isArray from './isArray.js';\nimport isArrayLikeObject from './isArrayLikeObject.js';\nimport isBuffer from './isBuffer.js';\nimport isFunction from './isFunction.js';\nimport isObject from './isObject.js';\nimport isPlainObject from './isPlainObject.js';\nimport isTypedArray from './isTypedArray.js';\nimport safeGet from './_safeGet.js';\nimport toPlainObject from './toPlainObject.js';\n\n/**\n * A specialized version of `baseMerge` for arrays and objects which performs\n * deep merges and tracks traversed objects enabling objects with circular\n * references to be merged.\n *\n * @private\n * @param {Object} object The destination object.\n * @param {Object} source The source object.\n * @param {string} key The key of the value to merge.\n * @param {number} srcIndex The index of `source`.\n * @param {Function} mergeFunc The function to merge values.\n * @param {Function} [customizer] The function to customize assigned values.\n * @param {Object} [stack] Tracks traversed source values and their merged\n *  counterparts.\n */\nfunction baseMergeDeep(object, source, key, srcIndex, mergeFunc, customizer, stack) {\n  var objValue = safeGet(object, key),\n      srcValue = safeGet(source, key),\n      stacked = stack.get(srcValue);\n\n  if (stacked) {\n    assignMergeValue(object, key, stacked);\n    return;\n  }\n  var newValue = customizer\n    ? customizer(objValue, srcValue, (key + ''), object, source, stack)\n    : undefined;\n\n  var isCommon = newValue === undefined;\n\n  if (isCommon) {\n    var isArr = isArray(srcValue),\n        isBuff = !isArr && isBuffer(srcValue),\n        isTyped = !isArr && !isBuff && isTypedArray(srcValue);\n\n    newValue = srcValue;\n    if (isArr || isBuff || isTyped) {\n      if (isArray(objValue)) {\n        newValue = objValue;\n      }\n      else if (isArrayLikeObject(objValue)) {\n        newValue = copyArray(objValue);\n      }\n      else if (isBuff) {\n        isCommon = false;\n        newValue = cloneBuffer(srcValue, true);\n      }\n      else if (isTyped) {\n        isCommon = false;\n        newValue = cloneTypedArray(srcValue, true);\n      }\n      else {\n        newValue = [];\n      }\n    }\n    else if (isPlainObject(srcValue) || isArguments(srcValue)) {\n      newValue = objValue;\n      if (isArguments(objValue)) {\n        newValue = toPlainObject(objValue);\n      }\n      else if (!isObject(objValue) || isFunction(objValue)) {\n        newValue = initCloneObject(srcValue);\n      }\n    }\n    else {\n      isCommon = false;\n    }\n  }\n  if (isCommon) {\n    // Recursively merge objects and arrays (susceptible to call stack limits).\n    stack.set(srcValue, newValue);\n    mergeFunc(newValue, srcValue, srcIndex, customizer, stack);\n    stack['delete'](srcValue);\n  }\n  assignMergeValue(object, key, newValue);\n}\n\nexport default baseMergeDeep;\n","import isArrayLike from './isArrayLike.js';\nimport isObjectLike from './isObjectLike.js';\n\n/**\n * This method is like `_.isArrayLike` except that it also checks if `value`\n * is an object.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an array-like object,\n *  else `false`.\n * @example\n *\n * _.isArrayLikeObject([1, 2, 3]);\n * // => true\n *\n * _.isArrayLikeObject(document.body.children);\n * // => true\n *\n * _.isArrayLikeObject('abc');\n * // => false\n *\n * _.isArrayLikeObject(_.noop);\n * // => false\n */\nfunction isArrayLikeObject(value) {\n  return isObjectLike(value) && isArrayLike(value);\n}\n\nexport default isArrayLikeObject;\n","/**\n * Copies the values of `source` to `array`.\n *\n * @private\n * @param {Array} source The array to copy values from.\n * @param {Array} [array=[]] The array to copy values to.\n * @returns {Array} Returns `array`.\n */\nfunction copyArray(source, array) {\n  var index = -1,\n      length = source.length;\n\n  array || (array = Array(length));\n  while (++index < length) {\n    array[index] = source[index];\n  }\n  return array;\n}\n\nexport default copyArray;\n","import copyObject from './_copyObject.js';\nimport keysIn from './keysIn.js';\n\n/**\n * Converts `value` to a plain object flattening inherited enumerable string\n * keyed properties of `value` to own properties of the plain object.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Lang\n * @param {*} value The value to convert.\n * @returns {Object} Returns the converted plain object.\n * @example\n *\n * function Foo() {\n *   this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.assign({ 'a': 1 }, new Foo);\n * // => { 'a': 1, 'b': 2 }\n *\n * _.assign({ 'a': 1 }, _.toPlainObject(new Foo));\n * // => { 'a': 1, 'b': 2, 'c': 3 }\n */\nfunction toPlainObject(value) {\n  return copyObject(value, keysIn(value));\n}\n\nexport default toPlainObject;\n","import baseCreate from './_baseCreate.js';\nimport getPrototype from './_getPrototype.js';\nimport isPrototype from './_isPrototype.js';\n\n/**\n * Initializes an object clone.\n *\n * @private\n * @param {Object} object The object to clone.\n * @returns {Object} Returns the initialized clone.\n */\nfunction initCloneObject(object) {\n  return (typeof object.constructor == 'function' && !isPrototype(object))\n    ? baseCreate(getPrototype(object))\n    : {};\n}\n\nexport default initCloneObject;\n","import Stack from './_Stack.js';\nimport assignMergeValue from './_assignMergeValue.js';\nimport baseFor from './_baseFor.js';\nimport baseMergeDeep from './_baseMergeDeep.js';\nimport isObject from './isObject.js';\nimport keysIn from './keysIn.js';\nimport safeGet from './_safeGet.js';\n\n/**\n * The base implementation of `_.merge` without support for multiple sources.\n *\n * @private\n * @param {Object} object The destination object.\n * @param {Object} source The source object.\n * @param {number} srcIndex The index of `source`.\n * @param {Function} [customizer] The function to customize merged values.\n * @param {Object} [stack] Tracks traversed source values and their merged\n *  counterparts.\n */\nfunction baseMerge(object, source, srcIndex, customizer, stack) {\n  if (object === source) {\n    return;\n  }\n  baseFor(source, function(srcValue, key) {\n    stack || (stack = new Stack);\n    if (isObject(srcValue)) {\n      baseMergeDeep(object, source, key, srcIndex, baseMerge, customizer, stack);\n    }\n    else {\n      var newValue = customizer\n        ? customizer(safeGet(object, key), srcValue, (key + ''), object, source, stack)\n        : undefined;\n\n      if (newValue === undefined) {\n        newValue = srcValue;\n      }\n      assignMergeValue(object, key, newValue);\n    }\n  }, keysIn);\n}\n\nexport default baseMerge;\n","import baseEach from './_baseEach.js';\nimport isArrayLike from './isArrayLike.js';\n\n/**\n * The base implementation of `_.map` without support for iteratee shorthands.\n *\n * @private\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array} Returns the new mapped array.\n */\nfunction baseMap(collection, iteratee) {\n  var index = -1,\n      result = isArrayLike(collection) ? Array(collection.length) : [];\n\n  baseEach(collection, function(value, key, collection) {\n    result[++index] = iteratee(value, key, collection);\n  });\n  return result;\n}\n\nexport default baseMap;\n","import baseFlatten from './_baseFlatten.js';\nimport map from './map.js';\n\n/**\n * Creates a flattened array of values by running each element in `collection`\n * thru `iteratee` and flattening the mapped results. The iteratee is invoked\n * with three arguments: (value, index|key, collection).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n * @returns {Array} Returns the new flattened array.\n * @example\n *\n * function duplicate(n) {\n *   return [n, n];\n * }\n *\n * _.flatMap([1, 2], duplicate);\n * // => [1, 1, 2, 2]\n */\nfunction flatMap(collection, iteratee) {\n  return baseFlatten(map(collection, iteratee), 1);\n}\n\nexport default flatMap;\n","import arrayMap from './_arrayMap.js';\nimport baseIteratee from './_baseIteratee.js';\nimport baseMap from './_baseMap.js';\nimport isArray from './isArray.js';\n\n/**\n * Creates an array of values by running each element in `collection` thru\n * `iteratee`. The iteratee is invoked with three arguments:\n * (value, index|key, collection).\n *\n * Many lodash methods are guarded to work as iteratees for methods like\n * `_.every`, `_.filter`, `_.map`, `_.mapValues`, `_.reject`, and `_.some`.\n *\n * The guarded methods are:\n * `ary`, `chunk`, `curry`, `curryRight`, `drop`, `dropRight`, `every`,\n * `fill`, `invert`, `parseInt`, `random`, `range`, `rangeRight`, `repeat`,\n * `sampleSize`, `slice`, `some`, `sortBy`, `split`, `take`, `takeRight`,\n * `template`, `trim`, `trimEnd`, `trimStart`, and `words`\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n * @returns {Array} Returns the new mapped array.\n * @example\n *\n * function square(n) {\n *   return n * n;\n * }\n *\n * _.map([4, 8], square);\n * // => [16, 64]\n *\n * _.map({ 'a': 4, 'b': 8 }, square);\n * // => [16, 64] (iteration order is not guaranteed)\n *\n * var users = [\n *   { 'user': 'barney' },\n *   { 'user': 'fred' }\n * ];\n *\n * // The `_.property` iteratee shorthand.\n * _.map(users, 'user');\n * // => ['barney', 'fred']\n */\nfunction map(collection, iteratee) {\n  var func = isArray(collection) ? arrayMap : baseMap;\n  return func(collection, baseIteratee(iteratee, 3));\n}\n\nexport default map;\n","/**\n * The inverse of `_.toPairs`; this method returns an object composed\n * from key-value `pairs`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {Array} pairs The key-value pairs.\n * @returns {Object} Returns the new object.\n * @example\n *\n * _.fromPairs([['a', 1], ['b', 2]]);\n * // => { 'a': 1, 'b': 2 }\n */\nfunction fromPairs(pairs) {\n  var index = -1,\n      length = pairs == null ? 0 : pairs.length,\n      result = {};\n\n  while (++index < length) {\n    var pair = pairs[index];\n    result[pair[0]] = pair[1];\n  }\n  return result;\n}\n\nexport default fromPairs;\n","import baseGet from './_baseGet.js';\nimport baseSlice from './_baseSlice.js';\n\n/**\n * Gets the parent value at `path` of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {Array} path The path to get the parent value of.\n * @returns {*} Returns the parent value.\n */\nfunction parent(object, path) {\n  return path.length < 2 ? object : baseGet(object, baseSlice(path, 0, -1));\n}\n\nexport default parent;\n","/**\n * The base implementation of `_.slice` without an iteratee call guard.\n *\n * @private\n * @param {Array} array The array to slice.\n * @param {number} [start=0] The start position.\n * @param {number} [end=array.length] The end position.\n * @returns {Array} Returns the slice of `array`.\n */\nfunction baseSlice(array, start, end) {\n  var index = -1,\n      length = array.length;\n\n  if (start < 0) {\n    start = -start > length ? 0 : (length + start);\n  }\n  end = end > length ? length : end;\n  if (end < 0) {\n    end += length;\n  }\n  length = start > end ? 0 : ((end - start) >>> 0);\n  start >>>= 0;\n\n  var result = Array(length);\n  while (++index < length) {\n    result[index] = array[index + start];\n  }\n  return result;\n}\n\nexport default baseSlice;\n","import baseIsEqual from './_baseIsEqual.js';\n\n/**\n * Performs a deep comparison between two values to determine if they are\n * equivalent.\n *\n * **Note:** This method supports comparing arrays, array buffers, booleans,\n * date objects, error objects, maps, numbers, `Object` objects, regexes,\n * sets, strings, symbols, and typed arrays. `Object` objects are compared\n * by their own, not inherited, enumerable properties. Functions and DOM\n * nodes are compared by strict equality, i.e. `===`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @returns {boolean} Returns `true` if the values are equivalent, else `false`.\n * @example\n *\n * var object = { 'a': 1 };\n * var other = { 'a': 1 };\n *\n * _.isEqual(object, other);\n * // => true\n *\n * object === other;\n * // => false\n */\nfunction isEqual(value, other) {\n  return baseIsEqual(value, other);\n}\n\nexport default isEqual;\n","/**\n * Checks if `value` is `null` or `undefined`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is nullish, else `false`.\n * @example\n *\n * _.isNil(null);\n * // => true\n *\n * _.isNil(void 0);\n * // => true\n *\n * _.isNil(NaN);\n * // => false\n */\nfunction isNil(value) {\n  return value == null;\n}\n\nexport default isNil;\n","/**\n * Checks if `value` is `null`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is `null`, else `false`.\n * @example\n *\n * _.isNull(null);\n * // => true\n *\n * _.isNull(void 0);\n * // => false\n */\nfunction isNull(value) {\n  return value === null;\n}\n\nexport default isNull;\n","import baseMerge from './_baseMerge.js';\nimport createAssigner from './_createAssigner.js';\n\n/**\n * This method is like `_.assign` except that it recursively merges own and\n * inherited enumerable string keyed properties of source objects into the\n * destination object. Source properties that resolve to `undefined` are\n * skipped if a destination value exists. Array and plain object properties\n * are merged recursively. Other objects and value types are overridden by\n * assignment. Source objects are applied from left to right. Subsequent\n * sources overwrite property assignments of previous sources.\n *\n * **Note:** This method mutates `object`.\n *\n * @static\n * @memberOf _\n * @since 0.5.0\n * @category Object\n * @param {Object} object The destination object.\n * @param {...Object} [sources] The source objects.\n * @returns {Object} Returns `object`.\n * @example\n *\n * var object = {\n *   'a': [{ 'b': 2 }, { 'd': 4 }]\n * };\n *\n * var other = {\n *   'a': [{ 'c': 3 }, { 'e': 5 }]\n * };\n *\n * _.merge(object, other);\n * // => { 'a': [{ 'b': 2, 'c': 3 }, { 'd': 4, 'e': 5 }] }\n */\nvar merge = createAssigner(function(object, source, srcIndex) {\n  baseMerge(object, source, srcIndex);\n});\n\nexport default merge;\n","import baseRest from './_baseRest.js';\nimport isIterateeCall from './_isIterateeCall.js';\n\n/**\n * Creates a function like `_.assign`.\n *\n * @private\n * @param {Function} assigner The function to assign values.\n * @returns {Function} Returns the new assigner function.\n */\nfunction createAssigner(assigner) {\n  return baseRest(function(object, sources) {\n    var index = -1,\n        length = sources.length,\n        customizer = length > 1 ? sources[length - 1] : undefined,\n        guard = length > 2 ? sources[2] : undefined;\n\n    customizer = (assigner.length > 3 && typeof customizer == 'function')\n      ? (length--, customizer)\n      : undefined;\n\n    if (guard && isIterateeCall(sources[0], sources[1], guard)) {\n      customizer = length < 3 ? undefined : customizer;\n      length = 1;\n    }\n    object = Object(object);\n    while (++index < length) {\n      var source = sources[index];\n      if (source) {\n        assigner(object, source, index, customizer);\n      }\n    }\n    return object;\n  });\n}\n\nexport default createAssigner;\n","import identity from './identity.js';\nimport overRest from './_overRest.js';\nimport setToString from './_setToString.js';\n\n/**\n * The base implementation of `_.rest` which doesn't validate or coerce arguments.\n *\n * @private\n * @param {Function} func The function to apply a rest parameter to.\n * @param {number} [start=func.length-1] The start position of the rest parameter.\n * @returns {Function} Returns the new function.\n */\nfunction baseRest(func, start) {\n  return setToString(overRest(func, start, identity), func + '');\n}\n\nexport default baseRest;\n","import eq from './eq.js';\nimport isArrayLike from './isArrayLike.js';\nimport isIndex from './_isIndex.js';\nimport isObject from './isObject.js';\n\n/**\n * Checks if the given arguments are from an iteratee call.\n *\n * @private\n * @param {*} value The potential iteratee value argument.\n * @param {*} index The potential iteratee index or key argument.\n * @param {*} object The potential iteratee object argument.\n * @returns {boolean} Returns `true` if the arguments are from an iteratee call,\n *  else `false`.\n */\nfunction isIterateeCall(value, index, object) {\n  if (!isObject(object)) {\n    return false;\n  }\n  var type = typeof index;\n  if (type == 'number'\n        ? (isArrayLike(object) && isIndex(index, object.length))\n        : (type == 'string' && index in object)\n      ) {\n    return eq(object[index], value);\n  }\n  return false;\n}\n\nexport default isIterateeCall;\n","import castPath from './_castPath.js';\nimport last from './last.js';\nimport parent from './_parent.js';\nimport toKey from './_toKey.js';\n\n/**\n * The base implementation of `_.unset`.\n *\n * @private\n * @param {Object} object The object to modify.\n * @param {Array|string} path The property path to unset.\n * @returns {boolean} Returns `true` if the property is deleted, else `false`.\n */\nfunction baseUnset(object, path) {\n  path = castPath(path, object);\n  object = parent(object, path);\n  return object == null || delete object[toKey(last(path))];\n}\n\nexport default baseUnset;\n","/**\n * Gets the last element of `array`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Array\n * @param {Array} array The array to query.\n * @returns {*} Returns the last element of `array`.\n * @example\n *\n * _.last([1, 2, 3]);\n * // => 3\n */\nfunction last(array) {\n  var length = array == null ? 0 : array.length;\n  return length ? array[length - 1] : undefined;\n}\n\nexport default last;\n","import isPlainObject from './isPlainObject.js';\n\n/**\n * Used by `_.omit` to customize its `_.cloneDeep` use to only clone plain\n * objects.\n *\n * @private\n * @param {*} value The value to inspect.\n * @param {string} key The key of the property to inspect.\n * @returns {*} Returns the uncloned value or `undefined` to defer cloning to `_.cloneDeep`.\n */\nfunction customOmitClone(value) {\n  return isPlainObject(value) ? undefined : value;\n}\n\nexport default customOmitClone;\n","import arrayMap from './_arrayMap.js';\nimport baseClone from './_baseClone.js';\nimport baseUnset from './_baseUnset.js';\nimport castPath from './_castPath.js';\nimport copyObject from './_copyObject.js';\nimport customOmitClone from './_customOmitClone.js';\nimport flatRest from './_flatRest.js';\nimport getAllKeysIn from './_getAllKeysIn.js';\n\n/** Used to compose bitmasks for cloning. */\nvar CLONE_DEEP_FLAG = 1,\n    CLONE_FLAT_FLAG = 2,\n    CLONE_SYMBOLS_FLAG = 4;\n\n/**\n * The opposite of `_.pick`; this method creates an object composed of the\n * own and inherited enumerable property paths of `object` that are not omitted.\n *\n * **Note:** This method is considerably slower than `_.pick`.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Object\n * @param {Object} object The source object.\n * @param {...(string|string[])} [paths] The property paths to omit.\n * @returns {Object} Returns the new object.\n * @example\n *\n * var object = { 'a': 1, 'b': '2', 'c': 3 };\n *\n * _.omit(object, ['a', 'c']);\n * // => { 'b': '2' }\n */\nvar omit = flatRest(function(object, paths) {\n  var result = {};\n  if (object == null) {\n    return result;\n  }\n  var isDeep = false;\n  paths = arrayMap(paths, function(path) {\n    path = castPath(path, object);\n    isDeep || (isDeep = path.length > 1);\n    return path;\n  });\n  copyObject(object, getAllKeysIn(object), result);\n  if (isDeep) {\n    result = baseClone(result, CLONE_DEEP_FLAG | CLONE_FLAT_FLAG | CLONE_SYMBOLS_FLAG, customOmitClone);\n  }\n  var length = paths.length;\n  while (length--) {\n    baseUnset(result, paths[length]);\n  }\n  return result;\n});\n\nexport default omit;\n","import assignValue from './_assignValue.js';\nimport castPath from './_castPath.js';\nimport isIndex from './_isIndex.js';\nimport isObject from './isObject.js';\nimport toKey from './_toKey.js';\n\n/**\n * The base implementation of `_.set`.\n *\n * @private\n * @param {Object} object The object to modify.\n * @param {Array|string} path The path of the property to set.\n * @param {*} value The value to set.\n * @param {Function} [customizer] The function to customize path creation.\n * @returns {Object} Returns `object`.\n */\nfunction baseSet(object, path, value, customizer) {\n  if (!isObject(object)) {\n    return object;\n  }\n  path = castPath(path, object);\n\n  var index = -1,\n      length = path.length,\n      lastIndex = length - 1,\n      nested = object;\n\n  while (nested != null && ++index < length) {\n    var key = toKey(path[index]),\n        newValue = value;\n\n    if (key === '__proto__' || key === 'constructor' || key === 'prototype') {\n      return object;\n    }\n\n    if (index != lastIndex) {\n      var objValue = nested[key];\n      newValue = customizer ? customizer(objValue, key, nested) : undefined;\n      if (newValue === undefined) {\n        newValue = isObject(objValue)\n          ? objValue\n          : (isIndex(path[index + 1]) ? [] : {});\n      }\n    }\n    assignValue(nested, key, newValue);\n    nested = nested[key];\n  }\n  return object;\n}\n\nexport default baseSet;\n","import basePickBy from './_basePickBy.js';\nimport hasIn from './hasIn.js';\n\n/**\n * The base implementation of `_.pick` without support for individual\n * property identifiers.\n *\n * @private\n * @param {Object} object The source object.\n * @param {string[]} paths The property paths to pick.\n * @returns {Object} Returns the new object.\n */\nfunction basePick(object, paths) {\n  return basePickBy(object, paths, function(value, path) {\n    return hasIn(object, path);\n  });\n}\n\nexport default basePick;\n","import baseGet from './_baseGet.js';\nimport baseSet from './_baseSet.js';\nimport castPath from './_castPath.js';\n\n/**\n * The base implementation of  `_.pickBy` without support for iteratee shorthands.\n *\n * @private\n * @param {Object} object The source object.\n * @param {string[]} paths The property paths to pick.\n * @param {Function} predicate The function invoked per property.\n * @returns {Object} Returns the new object.\n */\nfunction basePickBy(object, paths, predicate) {\n  var index = -1,\n      length = paths.length,\n      result = {};\n\n  while (++index < length) {\n    var path = paths[index],\n        value = baseGet(object, path);\n\n    if (predicate(value, path)) {\n      baseSet(result, castPath(path, object), value);\n    }\n  }\n  return result;\n}\n\nexport default basePickBy;\n","import basePick from './_basePick.js';\nimport flatRest from './_flatRest.js';\n\n/**\n * Creates an object composed of the picked `object` properties.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Object\n * @param {Object} object The source object.\n * @param {...(string|string[])} [paths] The property paths to pick.\n * @returns {Object} Returns the new object.\n * @example\n *\n * var object = { 'a': 1, 'b': '2', 'c': 3 };\n *\n * _.pick(object, ['a', 'c']);\n * // => { 'a': 1, 'c': 3 }\n */\nvar pick = flatRest(function(object, paths) {\n  return object == null ? {} : basePick(object, paths);\n});\n\nexport default pick;\n","import { isArray, isObject, isString } from '@vue/shared';\nexport { isArray, isDate, isFunction, isObject, isPlainObject, isPromise, isString, isSymbol } from '@vue/shared';\nimport { isNil } from 'lodash-unified';\n\nconst isUndefined = (val) => val === void 0;\nconst isBoolean = (val) => typeof val === \"boolean\";\nconst isNumber = (val) => typeof val === \"number\";\nconst isEmpty = (val) => !val && val !== 0 || isArray(val) && val.length === 0 || isObject(val) && !Object.keys(val).length;\nconst isElement = (e) => {\n  if (typeof Element === \"undefined\")\n    return false;\n  return e instanceof Element;\n};\nconst isPropAbsent = (prop) => isNil(prop);\nconst isStringNumber = (val) => {\n  if (!isString(val)) {\n    return false;\n  }\n  return !Number.isNaN(Number(val));\n};\nconst isWindow = (val) => val === window;\n\nexport { isBoolean, isElement, isEmpty, isNumber, isPropAbsent, isStringNumber, isUndefined, isWindow };\n//# sourceMappingURL=types.mjs.map\n","import { shallowRef, watchEffect, readonly, unref, ref, isVue3, version, watch, customRef, getCurrentScope, onScopeDispose, effectScope, provide, inject, isRef, computed, reactive, toRefs as toRefs$1, toRef, isVue2, set as set$1, getCurrentInstance, onBeforeMount, nextTick, onBeforeUnmount, onMounted, onUnmounted, isReactive } from 'vue-demi';\n\nvar __defProp$9 = Object.defineProperty;\nvar __defProps$6 = Object.defineProperties;\nvar __getOwnPropDescs$6 = Object.getOwnPropertyDescriptors;\nvar __getOwnPropSymbols$b = Object.getOwnPropertySymbols;\nvar __hasOwnProp$b = Object.prototype.hasOwnProperty;\nvar __propIsEnum$b = Object.prototype.propertyIsEnumerable;\nvar __defNormalProp$9 = (obj, key, value) => key in obj ? __defProp$9(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;\nvar __spreadValues$9 = (a, b) => {\n  for (var prop in b || (b = {}))\n    if (__hasOwnProp$b.call(b, prop))\n      __defNormalProp$9(a, prop, b[prop]);\n  if (__getOwnPropSymbols$b)\n    for (var prop of __getOwnPropSymbols$b(b)) {\n      if (__propIsEnum$b.call(b, prop))\n        __defNormalProp$9(a, prop, b[prop]);\n    }\n  return a;\n};\nvar __spreadProps$6 = (a, b) => __defProps$6(a, __getOwnPropDescs$6(b));\nfunction computedEager(fn, options) {\n  var _a;\n  const result = shallowRef();\n  watchEffect(() => {\n    result.value = fn();\n  }, __spreadProps$6(__spreadValues$9({}, options), {\n    flush: (_a = options == null ? void 0 : options.flush) != null ? _a : \"sync\"\n  }));\n  return readonly(result);\n}\n\nvar _a;\nconst isClient = typeof window !== \"undefined\";\nconst isDef = (val) => typeof val !== \"undefined\";\nconst assert = (condition, ...infos) => {\n  if (!condition)\n    console.warn(...infos);\n};\nconst toString = Object.prototype.toString;\nconst isBoolean = (val) => typeof val === \"boolean\";\nconst isFunction = (val) => typeof val === \"function\";\nconst isNumber = (val) => typeof val === \"number\";\nconst isString = (val) => typeof val === \"string\";\nconst isObject = (val) => toString.call(val) === \"[object Object]\";\nconst isWindow = (val) => typeof window !== \"undefined\" && toString.call(val) === \"[object Window]\";\nconst now = () => Date.now();\nconst timestamp = () => +Date.now();\nconst clamp = (n, min, max) => Math.min(max, Math.max(min, n));\nconst noop = () => {\n};\nconst rand = (min, max) => {\n  min = Math.ceil(min);\n  max = Math.floor(max);\n  return Math.floor(Math.random() * (max - min + 1)) + min;\n};\nconst isIOS = isClient && ((_a = window == null ? void 0 : window.navigator) == null ? void 0 : _a.userAgent) && /iP(ad|hone|od)/.test(window.navigator.userAgent);\nconst hasOwn = (val, key) => Object.prototype.hasOwnProperty.call(val, key);\n\nfunction resolveUnref(r) {\n  return typeof r === \"function\" ? r() : unref(r);\n}\n\nfunction createFilterWrapper(filter, fn) {\n  function wrapper(...args) {\n    return new Promise((resolve, reject) => {\n      Promise.resolve(filter(() => fn.apply(this, args), { fn, thisArg: this, args })).then(resolve).catch(reject);\n    });\n  }\n  return wrapper;\n}\nconst bypassFilter = (invoke) => {\n  return invoke();\n};\nfunction debounceFilter(ms, options = {}) {\n  let timer;\n  let maxTimer;\n  let lastRejector = noop;\n  const _clearTimeout = (timer2) => {\n    clearTimeout(timer2);\n    lastRejector();\n    lastRejector = noop;\n  };\n  const filter = (invoke) => {\n    const duration = resolveUnref(ms);\n    const maxDuration = resolveUnref(options.maxWait);\n    if (timer)\n      _clearTimeout(timer);\n    if (duration <= 0 || maxDuration !== void 0 && maxDuration <= 0) {\n      if (maxTimer) {\n        _clearTimeout(maxTimer);\n        maxTimer = null;\n      }\n      return Promise.resolve(invoke());\n    }\n    return new Promise((resolve, reject) => {\n      lastRejector = options.rejectOnCancel ? reject : resolve;\n      if (maxDuration && !maxTimer) {\n        maxTimer = setTimeout(() => {\n          if (timer)\n            _clearTimeout(timer);\n          maxTimer = null;\n          resolve(invoke());\n        }, maxDuration);\n      }\n      timer = setTimeout(() => {\n        if (maxTimer)\n          _clearTimeout(maxTimer);\n        maxTimer = null;\n        resolve(invoke());\n      }, duration);\n    });\n  };\n  return filter;\n}\nfunction throttleFilter(ms, trailing = true, leading = true, rejectOnCancel = false) {\n  let lastExec = 0;\n  let timer;\n  let isLeading = true;\n  let lastRejector = noop;\n  let lastValue;\n  const clear = () => {\n    if (timer) {\n      clearTimeout(timer);\n      timer = void 0;\n      lastRejector();\n      lastRejector = noop;\n    }\n  };\n  const filter = (_invoke) => {\n    const duration = resolveUnref(ms);\n    const elapsed = Date.now() - lastExec;\n    const invoke = () => {\n      return lastValue = _invoke();\n    };\n    clear();\n    if (duration <= 0) {\n      lastExec = Date.now();\n      return invoke();\n    }\n    if (elapsed > duration && (leading || !isLeading)) {\n      lastExec = Date.now();\n      invoke();\n    } else if (trailing) {\n      lastValue = new Promise((resolve, reject) => {\n        lastRejector = rejectOnCancel ? reject : resolve;\n        timer = setTimeout(() => {\n          lastExec = Date.now();\n          isLeading = true;\n          resolve(invoke());\n          clear();\n        }, Math.max(0, duration - elapsed));\n      });\n    }\n    if (!leading && !timer)\n      timer = setTimeout(() => isLeading = true, duration);\n    isLeading = false;\n    return lastValue;\n  };\n  return filter;\n}\nfunction pausableFilter(extendFilter = bypassFilter) {\n  const isActive = ref(true);\n  function pause() {\n    isActive.value = false;\n  }\n  function resume() {\n    isActive.value = true;\n  }\n  const eventFilter = (...args) => {\n    if (isActive.value)\n      extendFilter(...args);\n  };\n  return { isActive: readonly(isActive), pause, resume, eventFilter };\n}\n\nfunction __onlyVue3(name = \"this function\") {\n  if (isVue3)\n    return;\n  throw new Error(`[VueUse] ${name} is only works on Vue 3.`);\n}\nfunction __onlyVue27Plus(name = \"this function\") {\n  if (isVue3 || version.startsWith(\"2.7.\"))\n    return;\n  throw new Error(`[VueUse] ${name} is only works on Vue 2.7 or above.`);\n}\nconst directiveHooks = {\n  mounted: isVue3 ? \"mounted\" : \"inserted\",\n  updated: isVue3 ? \"updated\" : \"componentUpdated\",\n  unmounted: isVue3 ? \"unmounted\" : \"unbind\"\n};\n\nfunction promiseTimeout(ms, throwOnTimeout = false, reason = \"Timeout\") {\n  return new Promise((resolve, reject) => {\n    if (throwOnTimeout)\n      setTimeout(() => reject(reason), ms);\n    else\n      setTimeout(resolve, ms);\n  });\n}\nfunction identity(arg) {\n  return arg;\n}\nfunction createSingletonPromise(fn) {\n  let _promise;\n  function wrapper() {\n    if (!_promise)\n      _promise = fn();\n    return _promise;\n  }\n  wrapper.reset = async () => {\n    const _prev = _promise;\n    _promise = void 0;\n    if (_prev)\n      await _prev;\n  };\n  return wrapper;\n}\nfunction invoke(fn) {\n  return fn();\n}\nfunction containsProp(obj, ...props) {\n  return props.some((k) => k in obj);\n}\nfunction increaseWithUnit(target, delta) {\n  var _a;\n  if (typeof target === \"number\")\n    return target + delta;\n  const value = ((_a = target.match(/^-?[0-9]+\\.?[0-9]*/)) == null ? void 0 : _a[0]) || \"\";\n  const unit = target.slice(value.length);\n  const result = parseFloat(value) + delta;\n  if (Number.isNaN(result))\n    return target;\n  return result + unit;\n}\nfunction objectPick(obj, keys, omitUndefined = false) {\n  return keys.reduce((n, k) => {\n    if (k in obj) {\n      if (!omitUndefined || obj[k] !== void 0)\n        n[k] = obj[k];\n    }\n    return n;\n  }, {});\n}\n\nfunction computedWithControl(source, fn) {\n  let v = void 0;\n  let track;\n  let trigger;\n  const dirty = ref(true);\n  const update = () => {\n    dirty.value = true;\n    trigger();\n  };\n  watch(source, update, { flush: \"sync\" });\n  const get = isFunction(fn) ? fn : fn.get;\n  const set = isFunction(fn) ? void 0 : fn.set;\n  const result = customRef((_track, _trigger) => {\n    track = _track;\n    trigger = _trigger;\n    return {\n      get() {\n        if (dirty.value) {\n          v = get();\n          dirty.value = false;\n        }\n        track();\n        return v;\n      },\n      set(v2) {\n        set == null ? void 0 : set(v2);\n      }\n    };\n  });\n  if (Object.isExtensible(result))\n    result.trigger = update;\n  return result;\n}\n\nfunction tryOnScopeDispose(fn) {\n  if (getCurrentScope()) {\n    onScopeDispose(fn);\n    return true;\n  }\n  return false;\n}\n\nfunction createEventHook() {\n  const fns = [];\n  const off = (fn) => {\n    const index = fns.indexOf(fn);\n    if (index !== -1)\n      fns.splice(index, 1);\n  };\n  const on = (fn) => {\n    fns.push(fn);\n    const offFn = () => off(fn);\n    tryOnScopeDispose(offFn);\n    return {\n      off: offFn\n    };\n  };\n  const trigger = (param) => {\n    fns.forEach((fn) => fn(param));\n  };\n  return {\n    on,\n    off,\n    trigger\n  };\n}\n\nfunction createGlobalState(stateFactory) {\n  let initialized = false;\n  let state;\n  const scope = effectScope(true);\n  return () => {\n    if (!initialized) {\n      state = scope.run(stateFactory);\n      initialized = true;\n    }\n    return state;\n  };\n}\n\nfunction createInjectionState(composable) {\n  const key = Symbol(\"InjectionState\");\n  const useProvidingState = (...args) => {\n    const state = composable(...args);\n    provide(key, state);\n    return state;\n  };\n  const useInjectedState = () => inject(key);\n  return [useProvidingState, useInjectedState];\n}\n\nfunction createSharedComposable(composable) {\n  let subscribers = 0;\n  let state;\n  let scope;\n  const dispose = () => {\n    subscribers -= 1;\n    if (scope && subscribers <= 0) {\n      scope.stop();\n      state = void 0;\n      scope = void 0;\n    }\n  };\n  return (...args) => {\n    subscribers += 1;\n    if (!state) {\n      scope = effectScope(true);\n      state = scope.run(() => composable(...args));\n    }\n    tryOnScopeDispose(dispose);\n    return state;\n  };\n}\n\nfunction extendRef(ref, extend, { enumerable = false, unwrap = true } = {}) {\n  __onlyVue27Plus();\n  for (const [key, value] of Object.entries(extend)) {\n    if (key === \"value\")\n      continue;\n    if (isRef(value) && unwrap) {\n      Object.defineProperty(ref, key, {\n        get() {\n          return value.value;\n        },\n        set(v) {\n          value.value = v;\n        },\n        enumerable\n      });\n    } else {\n      Object.defineProperty(ref, key, { value, enumerable });\n    }\n  }\n  return ref;\n}\n\nfunction get(obj, key) {\n  if (key == null)\n    return unref(obj);\n  return unref(obj)[key];\n}\n\nfunction isDefined(v) {\n  return unref(v) != null;\n}\n\nvar __defProp$8 = Object.defineProperty;\nvar __getOwnPropSymbols$a = Object.getOwnPropertySymbols;\nvar __hasOwnProp$a = Object.prototype.hasOwnProperty;\nvar __propIsEnum$a = Object.prototype.propertyIsEnumerable;\nvar __defNormalProp$8 = (obj, key, value) => key in obj ? __defProp$8(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;\nvar __spreadValues$8 = (a, b) => {\n  for (var prop in b || (b = {}))\n    if (__hasOwnProp$a.call(b, prop))\n      __defNormalProp$8(a, prop, b[prop]);\n  if (__getOwnPropSymbols$a)\n    for (var prop of __getOwnPropSymbols$a(b)) {\n      if (__propIsEnum$a.call(b, prop))\n        __defNormalProp$8(a, prop, b[prop]);\n    }\n  return a;\n};\nfunction makeDestructurable(obj, arr) {\n  if (typeof Symbol !== \"undefined\") {\n    const clone = __spreadValues$8({}, obj);\n    Object.defineProperty(clone, Symbol.iterator, {\n      enumerable: false,\n      value() {\n        let index = 0;\n        return {\n          next: () => ({\n            value: arr[index++],\n            done: index > arr.length\n          })\n        };\n      }\n    });\n    return clone;\n  } else {\n    return Object.assign([...arr], obj);\n  }\n}\n\nfunction reactify(fn, options) {\n  const unrefFn = (options == null ? void 0 : options.computedGetter) === false ? unref : resolveUnref;\n  return function(...args) {\n    return computed(() => fn.apply(this, args.map((i) => unrefFn(i))));\n  };\n}\n\nfunction reactifyObject(obj, optionsOrKeys = {}) {\n  let keys = [];\n  let options;\n  if (Array.isArray(optionsOrKeys)) {\n    keys = optionsOrKeys;\n  } else {\n    options = optionsOrKeys;\n    const { includeOwnProperties = true } = optionsOrKeys;\n    keys.push(...Object.keys(obj));\n    if (includeOwnProperties)\n      keys.push(...Object.getOwnPropertyNames(obj));\n  }\n  return Object.fromEntries(keys.map((key) => {\n    const value = obj[key];\n    return [\n      key,\n      typeof value === \"function\" ? reactify(value.bind(obj), options) : value\n    ];\n  }));\n}\n\nfunction toReactive(objectRef) {\n  if (!isRef(objectRef))\n    return reactive(objectRef);\n  const proxy = new Proxy({}, {\n    get(_, p, receiver) {\n      return unref(Reflect.get(objectRef.value, p, receiver));\n    },\n    set(_, p, value) {\n      if (isRef(objectRef.value[p]) && !isRef(value))\n        objectRef.value[p].value = value;\n      else\n        objectRef.value[p] = value;\n      return true;\n    },\n    deleteProperty(_, p) {\n      return Reflect.deleteProperty(objectRef.value, p);\n    },\n    has(_, p) {\n      return Reflect.has(objectRef.value, p);\n    },\n    ownKeys() {\n      return Object.keys(objectRef.value);\n    },\n    getOwnPropertyDescriptor() {\n      return {\n        enumerable: true,\n        configurable: true\n      };\n    }\n  });\n  return reactive(proxy);\n}\n\nfunction reactiveComputed(fn) {\n  return toReactive(computed(fn));\n}\n\nfunction reactiveOmit(obj, ...keys) {\n  const flatKeys = keys.flat();\n  return reactiveComputed(() => Object.fromEntries(Object.entries(toRefs$1(obj)).filter((e) => !flatKeys.includes(e[0]))));\n}\n\nfunction reactivePick(obj, ...keys) {\n  const flatKeys = keys.flat();\n  return reactive(Object.fromEntries(flatKeys.map((k) => [k, toRef(obj, k)])));\n}\n\nfunction refAutoReset(defaultValue, afterMs = 1e4) {\n  return customRef((track, trigger) => {\n    let value = defaultValue;\n    let timer;\n    const resetAfter = () => setTimeout(() => {\n      value = defaultValue;\n      trigger();\n    }, resolveUnref(afterMs));\n    tryOnScopeDispose(() => {\n      clearTimeout(timer);\n    });\n    return {\n      get() {\n        track();\n        return value;\n      },\n      set(newValue) {\n        value = newValue;\n        trigger();\n        clearTimeout(timer);\n        timer = resetAfter();\n      }\n    };\n  });\n}\n\nfunction useDebounceFn(fn, ms = 200, options = {}) {\n  return createFilterWrapper(debounceFilter(ms, options), fn);\n}\n\nfunction refDebounced(value, ms = 200, options = {}) {\n  const debounced = ref(value.value);\n  const updater = useDebounceFn(() => {\n    debounced.value = value.value;\n  }, ms, options);\n  watch(value, () => updater());\n  return debounced;\n}\n\nfunction refDefault(source, defaultValue) {\n  return computed({\n    get() {\n      var _a;\n      return (_a = source.value) != null ? _a : defaultValue;\n    },\n    set(value) {\n      source.value = value;\n    }\n  });\n}\n\nfunction useThrottleFn(fn, ms = 200, trailing = false, leading = true, rejectOnCancel = false) {\n  return createFilterWrapper(throttleFilter(ms, trailing, leading, rejectOnCancel), fn);\n}\n\nfunction refThrottled(value, delay = 200, trailing = true, leading = true) {\n  if (delay <= 0)\n    return value;\n  const throttled = ref(value.value);\n  const updater = useThrottleFn(() => {\n    throttled.value = value.value;\n  }, delay, trailing, leading);\n  watch(value, () => updater());\n  return throttled;\n}\n\nfunction refWithControl(initial, options = {}) {\n  let source = initial;\n  let track;\n  let trigger;\n  const ref = customRef((_track, _trigger) => {\n    track = _track;\n    trigger = _trigger;\n    return {\n      get() {\n        return get();\n      },\n      set(v) {\n        set(v);\n      }\n    };\n  });\n  function get(tracking = true) {\n    if (tracking)\n      track();\n    return source;\n  }\n  function set(value, triggering = true) {\n    var _a, _b;\n    if (value === source)\n      return;\n    const old = source;\n    if (((_a = options.onBeforeChange) == null ? void 0 : _a.call(options, value, old)) === false)\n      return;\n    source = value;\n    (_b = options.onChanged) == null ? void 0 : _b.call(options, value, old);\n    if (triggering)\n      trigger();\n  }\n  const untrackedGet = () => get(false);\n  const silentSet = (v) => set(v, false);\n  const peek = () => get(false);\n  const lay = (v) => set(v, false);\n  return extendRef(ref, {\n    get,\n    set,\n    untrackedGet,\n    silentSet,\n    peek,\n    lay\n  }, { enumerable: true });\n}\nconst controlledRef = refWithControl;\n\nfunction resolveRef(r) {\n  return typeof r === \"function\" ? computed(r) : ref(r);\n}\n\nfunction set(...args) {\n  if (args.length === 2) {\n    const [ref, value] = args;\n    ref.value = value;\n  }\n  if (args.length === 3) {\n    if (isVue2) {\n      set$1(...args);\n    } else {\n      const [target, key, value] = args;\n      target[key] = value;\n    }\n  }\n}\n\nfunction syncRef(left, right, options = {}) {\n  var _a, _b;\n  const {\n    flush = \"sync\",\n    deep = false,\n    immediate = true,\n    direction = \"both\",\n    transform = {}\n  } = options;\n  let watchLeft;\n  let watchRight;\n  const transformLTR = (_a = transform.ltr) != null ? _a : (v) => v;\n  const transformRTL = (_b = transform.rtl) != null ? _b : (v) => v;\n  if (direction === \"both\" || direction === \"ltr\") {\n    watchLeft = watch(left, (newValue) => right.value = transformLTR(newValue), { flush, deep, immediate });\n  }\n  if (direction === \"both\" || direction === \"rtl\") {\n    watchRight = watch(right, (newValue) => left.value = transformRTL(newValue), { flush, deep, immediate });\n  }\n  return () => {\n    watchLeft == null ? void 0 : watchLeft();\n    watchRight == null ? void 0 : watchRight();\n  };\n}\n\nfunction syncRefs(source, targets, options = {}) {\n  const {\n    flush = \"sync\",\n    deep = false,\n    immediate = true\n  } = options;\n  if (!Array.isArray(targets))\n    targets = [targets];\n  return watch(source, (newValue) => targets.forEach((target) => target.value = newValue), { flush, deep, immediate });\n}\n\nvar __defProp$7 = Object.defineProperty;\nvar __defProps$5 = Object.defineProperties;\nvar __getOwnPropDescs$5 = Object.getOwnPropertyDescriptors;\nvar __getOwnPropSymbols$9 = Object.getOwnPropertySymbols;\nvar __hasOwnProp$9 = Object.prototype.hasOwnProperty;\nvar __propIsEnum$9 = Object.prototype.propertyIsEnumerable;\nvar __defNormalProp$7 = (obj, key, value) => key in obj ? __defProp$7(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;\nvar __spreadValues$7 = (a, b) => {\n  for (var prop in b || (b = {}))\n    if (__hasOwnProp$9.call(b, prop))\n      __defNormalProp$7(a, prop, b[prop]);\n  if (__getOwnPropSymbols$9)\n    for (var prop of __getOwnPropSymbols$9(b)) {\n      if (__propIsEnum$9.call(b, prop))\n        __defNormalProp$7(a, prop, b[prop]);\n    }\n  return a;\n};\nvar __spreadProps$5 = (a, b) => __defProps$5(a, __getOwnPropDescs$5(b));\nfunction toRefs(objectRef) {\n  if (!isRef(objectRef))\n    return toRefs$1(objectRef);\n  const result = Array.isArray(objectRef.value) ? new Array(objectRef.value.length) : {};\n  for (const key in objectRef.value) {\n    result[key] = customRef(() => ({\n      get() {\n        return objectRef.value[key];\n      },\n      set(v) {\n        if (Array.isArray(objectRef.value)) {\n          const copy = [...objectRef.value];\n          copy[key] = v;\n          objectRef.value = copy;\n        } else {\n          const newObject = __spreadProps$5(__spreadValues$7({}, objectRef.value), { [key]: v });\n          Object.setPrototypeOf(newObject, objectRef.value);\n          objectRef.value = newObject;\n        }\n      }\n    }));\n  }\n  return result;\n}\n\nfunction tryOnBeforeMount(fn, sync = true) {\n  if (getCurrentInstance())\n    onBeforeMount(fn);\n  else if (sync)\n    fn();\n  else\n    nextTick(fn);\n}\n\nfunction tryOnBeforeUnmount(fn) {\n  if (getCurrentInstance())\n    onBeforeUnmount(fn);\n}\n\nfunction tryOnMounted(fn, sync = true) {\n  if (getCurrentInstance())\n    onMounted(fn);\n  else if (sync)\n    fn();\n  else\n    nextTick(fn);\n}\n\nfunction tryOnUnmounted(fn) {\n  if (getCurrentInstance())\n    onUnmounted(fn);\n}\n\nfunction createUntil(r, isNot = false) {\n  function toMatch(condition, { flush = \"sync\", deep = false, timeout, throwOnTimeout } = {}) {\n    let stop = null;\n    const watcher = new Promise((resolve) => {\n      stop = watch(r, (v) => {\n        if (condition(v) !== isNot) {\n          stop == null ? void 0 : stop();\n          resolve(v);\n        }\n      }, {\n        flush,\n        deep,\n        immediate: true\n      });\n    });\n    const promises = [watcher];\n    if (timeout != null) {\n      promises.push(promiseTimeout(timeout, throwOnTimeout).then(() => resolveUnref(r)).finally(() => stop == null ? void 0 : stop()));\n    }\n    return Promise.race(promises);\n  }\n  function toBe(value, options) {\n    if (!isRef(value))\n      return toMatch((v) => v === value, options);\n    const { flush = \"sync\", deep = false, timeout, throwOnTimeout } = options != null ? options : {};\n    let stop = null;\n    const watcher = new Promise((resolve) => {\n      stop = watch([r, value], ([v1, v2]) => {\n        if (isNot !== (v1 === v2)) {\n          stop == null ? void 0 : stop();\n          resolve(v1);\n        }\n      }, {\n        flush,\n        deep,\n        immediate: true\n      });\n    });\n    const promises = [watcher];\n    if (timeout != null) {\n      promises.push(promiseTimeout(timeout, throwOnTimeout).then(() => resolveUnref(r)).finally(() => {\n        stop == null ? void 0 : stop();\n        return resolveUnref(r);\n      }));\n    }\n    return Promise.race(promises);\n  }\n  function toBeTruthy(options) {\n    return toMatch((v) => Boolean(v), options);\n  }\n  function toBeNull(options) {\n    return toBe(null, options);\n  }\n  function toBeUndefined(options) {\n    return toBe(void 0, options);\n  }\n  function toBeNaN(options) {\n    return toMatch(Number.isNaN, options);\n  }\n  function toContains(value, options) {\n    return toMatch((v) => {\n      const array = Array.from(v);\n      return array.includes(value) || array.includes(resolveUnref(value));\n    }, options);\n  }\n  function changed(options) {\n    return changedTimes(1, options);\n  }\n  function changedTimes(n = 1, options) {\n    let count = -1;\n    return toMatch(() => {\n      count += 1;\n      return count >= n;\n    }, options);\n  }\n  if (Array.isArray(resolveUnref(r))) {\n    const instance = {\n      toMatch,\n      toContains,\n      changed,\n      changedTimes,\n      get not() {\n        return createUntil(r, !isNot);\n      }\n    };\n    return instance;\n  } else {\n    const instance = {\n      toMatch,\n      toBe,\n      toBeTruthy,\n      toBeNull,\n      toBeNaN,\n      toBeUndefined,\n      changed,\n      changedTimes,\n      get not() {\n        return createUntil(r, !isNot);\n      }\n    };\n    return instance;\n  }\n}\nfunction until(r) {\n  return createUntil(r);\n}\n\nfunction useArrayEvery(list, fn) {\n  return computed(() => resolveUnref(list).every((element, index, array) => fn(resolveUnref(element), index, array)));\n}\n\nfunction useArrayFilter(list, fn) {\n  return computed(() => resolveUnref(list).map((i) => resolveUnref(i)).filter(fn));\n}\n\nfunction useArrayFind(list, fn) {\n  return computed(() => resolveUnref(resolveUnref(list).find((element, index, array) => fn(resolveUnref(element), index, array))));\n}\n\nfunction useArrayFindIndex(list, fn) {\n  return computed(() => resolveUnref(list).findIndex((element, index, array) => fn(resolveUnref(element), index, array)));\n}\n\nfunction findLast(arr, cb) {\n  let index = arr.length;\n  while (index-- > 0) {\n    if (cb(arr[index], index, arr))\n      return arr[index];\n  }\n  return void 0;\n}\nfunction useArrayFindLast(list, fn) {\n  return computed(() => resolveUnref(!Array.prototype.findLast ? findLast(resolveUnref(list), (element, index, array) => fn(resolveUnref(element), index, array)) : resolveUnref(list).findLast((element, index, array) => fn(resolveUnref(element), index, array))));\n}\n\nfunction useArrayJoin(list, separator) {\n  return computed(() => resolveUnref(list).map((i) => resolveUnref(i)).join(resolveUnref(separator)));\n}\n\nfunction useArrayMap(list, fn) {\n  return computed(() => resolveUnref(list).map((i) => resolveUnref(i)).map(fn));\n}\n\nfunction useArrayReduce(list, reducer, ...args) {\n  const reduceCallback = (sum, value, index) => reducer(resolveUnref(sum), resolveUnref(value), index);\n  return computed(() => {\n    const resolved = resolveUnref(list);\n    return args.length ? resolved.reduce(reduceCallback, resolveUnref(args[0])) : resolved.reduce(reduceCallback);\n  });\n}\n\nfunction useArraySome(list, fn) {\n  return computed(() => resolveUnref(list).some((element, index, array) => fn(resolveUnref(element), index, array)));\n}\n\nfunction useArrayUnique(list) {\n  return computed(() => [...new Set(resolveUnref(list).map((element) => resolveUnref(element)))]);\n}\n\nfunction useCounter(initialValue = 0, options = {}) {\n  const count = ref(initialValue);\n  const {\n    max = Infinity,\n    min = -Infinity\n  } = options;\n  const inc = (delta = 1) => count.value = Math.min(max, count.value + delta);\n  const dec = (delta = 1) => count.value = Math.max(min, count.value - delta);\n  const get = () => count.value;\n  const set = (val) => count.value = Math.max(min, Math.min(max, val));\n  const reset = (val = initialValue) => {\n    initialValue = val;\n    return set(val);\n  };\n  return { count, inc, dec, get, set, reset };\n}\n\nconst REGEX_PARSE = /^(\\d{4})[-/]?(\\d{1,2})?[-/]?(\\d{0,2})[Tt\\s]*(\\d{1,2})?:?(\\d{1,2})?:?(\\d{1,2})?[.:]?(\\d+)?$/;\nconst REGEX_FORMAT = /\\[([^\\]]+)]|Y{1,4}|M{1,4}|D{1,2}|d{1,4}|H{1,2}|h{1,2}|a{1,2}|A{1,2}|m{1,2}|s{1,2}|Z{1,2}|SSS/g;\nconst defaultMeridiem = (hours, minutes, isLowercase, hasPeriod) => {\n  let m = hours < 12 ? \"AM\" : \"PM\";\n  if (hasPeriod)\n    m = m.split(\"\").reduce((acc, curr) => acc += `${curr}.`, \"\");\n  return isLowercase ? m.toLowerCase() : m;\n};\nconst formatDate = (date, formatStr, options = {}) => {\n  var _a;\n  const years = date.getFullYear();\n  const month = date.getMonth();\n  const days = date.getDate();\n  const hours = date.getHours();\n  const minutes = date.getMinutes();\n  const seconds = date.getSeconds();\n  const milliseconds = date.getMilliseconds();\n  const day = date.getDay();\n  const meridiem = (_a = options.customMeridiem) != null ? _a : defaultMeridiem;\n  const matches = {\n    YY: () => String(years).slice(-2),\n    YYYY: () => years,\n    M: () => month + 1,\n    MM: () => `${month + 1}`.padStart(2, \"0\"),\n    MMM: () => date.toLocaleDateString(options.locales, { month: \"short\" }),\n    MMMM: () => date.toLocaleDateString(options.locales, { month: \"long\" }),\n    D: () => String(days),\n    DD: () => `${days}`.padStart(2, \"0\"),\n    H: () => String(hours),\n    HH: () => `${hours}`.padStart(2, \"0\"),\n    h: () => `${hours % 12 || 12}`.padStart(1, \"0\"),\n    hh: () => `${hours % 12 || 12}`.padStart(2, \"0\"),\n    m: () => String(minutes),\n    mm: () => `${minutes}`.padStart(2, \"0\"),\n    s: () => String(seconds),\n    ss: () => `${seconds}`.padStart(2, \"0\"),\n    SSS: () => `${milliseconds}`.padStart(3, \"0\"),\n    d: () => day,\n    dd: () => date.toLocaleDateString(options.locales, { weekday: \"narrow\" }),\n    ddd: () => date.toLocaleDateString(options.locales, { weekday: \"short\" }),\n    dddd: () => date.toLocaleDateString(options.locales, { weekday: \"long\" }),\n    A: () => meridiem(hours, minutes),\n    AA: () => meridiem(hours, minutes, false, true),\n    a: () => meridiem(hours, minutes, true),\n    aa: () => meridiem(hours, minutes, true, true)\n  };\n  return formatStr.replace(REGEX_FORMAT, (match, $1) => $1 || matches[match]());\n};\nconst normalizeDate = (date) => {\n  if (date === null)\n    return new Date(NaN);\n  if (date === void 0)\n    return new Date();\n  if (date instanceof Date)\n    return new Date(date);\n  if (typeof date === \"string\" && !/Z$/i.test(date)) {\n    const d = date.match(REGEX_PARSE);\n    if (d) {\n      const m = d[2] - 1 || 0;\n      const ms = (d[7] || \"0\").substring(0, 3);\n      return new Date(d[1], m, d[3] || 1, d[4] || 0, d[5] || 0, d[6] || 0, ms);\n    }\n  }\n  return new Date(date);\n};\nfunction useDateFormat(date, formatStr = \"HH:mm:ss\", options = {}) {\n  return computed(() => formatDate(normalizeDate(resolveUnref(date)), resolveUnref(formatStr), options));\n}\n\nfunction useIntervalFn(cb, interval = 1e3, options = {}) {\n  const {\n    immediate = true,\n    immediateCallback = false\n  } = options;\n  let timer = null;\n  const isActive = ref(false);\n  function clean() {\n    if (timer) {\n      clearInterval(timer);\n      timer = null;\n    }\n  }\n  function pause() {\n    isActive.value = false;\n    clean();\n  }\n  function resume() {\n    const intervalValue = resolveUnref(interval);\n    if (intervalValue <= 0)\n      return;\n    isActive.value = true;\n    if (immediateCallback)\n      cb();\n    clean();\n    timer = setInterval(cb, intervalValue);\n  }\n  if (immediate && isClient)\n    resume();\n  if (isRef(interval) || isFunction(interval)) {\n    const stopWatch = watch(interval, () => {\n      if (isActive.value && isClient)\n        resume();\n    });\n    tryOnScopeDispose(stopWatch);\n  }\n  tryOnScopeDispose(pause);\n  return {\n    isActive,\n    pause,\n    resume\n  };\n}\n\nvar __defProp$6 = Object.defineProperty;\nvar __getOwnPropSymbols$8 = Object.getOwnPropertySymbols;\nvar __hasOwnProp$8 = Object.prototype.hasOwnProperty;\nvar __propIsEnum$8 = Object.prototype.propertyIsEnumerable;\nvar __defNormalProp$6 = (obj, key, value) => key in obj ? __defProp$6(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;\nvar __spreadValues$6 = (a, b) => {\n  for (var prop in b || (b = {}))\n    if (__hasOwnProp$8.call(b, prop))\n      __defNormalProp$6(a, prop, b[prop]);\n  if (__getOwnPropSymbols$8)\n    for (var prop of __getOwnPropSymbols$8(b)) {\n      if (__propIsEnum$8.call(b, prop))\n        __defNormalProp$6(a, prop, b[prop]);\n    }\n  return a;\n};\nfunction useInterval(interval = 1e3, options = {}) {\n  const {\n    controls: exposeControls = false,\n    immediate = true,\n    callback\n  } = options;\n  const counter = ref(0);\n  const update = () => counter.value += 1;\n  const reset = () => {\n    counter.value = 0;\n  };\n  const controls = useIntervalFn(callback ? () => {\n    update();\n    callback(counter.value);\n  } : update, interval, { immediate });\n  if (exposeControls) {\n    return __spreadValues$6({\n      counter,\n      reset\n    }, controls);\n  } else {\n    return counter;\n  }\n}\n\nfunction useLastChanged(source, options = {}) {\n  var _a;\n  const ms = ref((_a = options.initialValue) != null ? _a : null);\n  watch(source, () => ms.value = timestamp(), options);\n  return ms;\n}\n\nfunction useTimeoutFn(cb, interval, options = {}) {\n  const {\n    immediate = true\n  } = options;\n  const isPending = ref(false);\n  let timer = null;\n  function clear() {\n    if (timer) {\n      clearTimeout(timer);\n      timer = null;\n    }\n  }\n  function stop() {\n    isPending.value = false;\n    clear();\n  }\n  function start(...args) {\n    clear();\n    isPending.value = true;\n    timer = setTimeout(() => {\n      isPending.value = false;\n      timer = null;\n      cb(...args);\n    }, resolveUnref(interval));\n  }\n  if (immediate) {\n    isPending.value = true;\n    if (isClient)\n      start();\n  }\n  tryOnScopeDispose(stop);\n  return {\n    isPending: readonly(isPending),\n    start,\n    stop\n  };\n}\n\nvar __defProp$5 = Object.defineProperty;\nvar __getOwnPropSymbols$7 = Object.getOwnPropertySymbols;\nvar __hasOwnProp$7 = Object.prototype.hasOwnProperty;\nvar __propIsEnum$7 = Object.prototype.propertyIsEnumerable;\nvar __defNormalProp$5 = (obj, key, value) => key in obj ? __defProp$5(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;\nvar __spreadValues$5 = (a, b) => {\n  for (var prop in b || (b = {}))\n    if (__hasOwnProp$7.call(b, prop))\n      __defNormalProp$5(a, prop, b[prop]);\n  if (__getOwnPropSymbols$7)\n    for (var prop of __getOwnPropSymbols$7(b)) {\n      if (__propIsEnum$7.call(b, prop))\n        __defNormalProp$5(a, prop, b[prop]);\n    }\n  return a;\n};\nfunction useTimeout(interval = 1e3, options = {}) {\n  const {\n    controls: exposeControls = false,\n    callback\n  } = options;\n  const controls = useTimeoutFn(callback != null ? callback : noop, interval, options);\n  const ready = computed(() => !controls.isPending.value);\n  if (exposeControls) {\n    return __spreadValues$5({\n      ready\n    }, controls);\n  } else {\n    return ready;\n  }\n}\n\nfunction useToNumber(value, options = {}) {\n  const {\n    method = \"parseFloat\",\n    radix,\n    nanToZero\n  } = options;\n  return computed(() => {\n    let resolved = resolveUnref(value);\n    if (typeof resolved === \"string\")\n      resolved = Number[method](resolved, radix);\n    if (nanToZero && isNaN(resolved))\n      resolved = 0;\n    return resolved;\n  });\n}\n\nfunction useToString(value) {\n  return computed(() => `${resolveUnref(value)}`);\n}\n\nfunction useToggle(initialValue = false, options = {}) {\n  const {\n    truthyValue = true,\n    falsyValue = false\n  } = options;\n  const valueIsRef = isRef(initialValue);\n  const _value = ref(initialValue);\n  function toggle(value) {\n    if (arguments.length) {\n      _value.value = value;\n      return _value.value;\n    } else {\n      const truthy = resolveUnref(truthyValue);\n      _value.value = _value.value === truthy ? resolveUnref(falsyValue) : truthy;\n      return _value.value;\n    }\n  }\n  if (valueIsRef)\n    return toggle;\n  else\n    return [_value, toggle];\n}\n\nfunction watchArray(source, cb, options) {\n  let oldList = (options == null ? void 0 : options.immediate) ? [] : [\n    ...source instanceof Function ? source() : Array.isArray(source) ? source : unref(source)\n  ];\n  return watch(source, (newList, _, onCleanup) => {\n    const oldListRemains = new Array(oldList.length);\n    const added = [];\n    for (const obj of newList) {\n      let found = false;\n      for (let i = 0; i < oldList.length; i++) {\n        if (!oldListRemains[i] && obj === oldList[i]) {\n          oldListRemains[i] = true;\n          found = true;\n          break;\n        }\n      }\n      if (!found)\n        added.push(obj);\n    }\n    const removed = oldList.filter((_2, i) => !oldListRemains[i]);\n    cb(newList, oldList, added, removed, onCleanup);\n    oldList = [...newList];\n  }, options);\n}\n\nvar __getOwnPropSymbols$6 = Object.getOwnPropertySymbols;\nvar __hasOwnProp$6 = Object.prototype.hasOwnProperty;\nvar __propIsEnum$6 = Object.prototype.propertyIsEnumerable;\nvar __objRest$5 = (source, exclude) => {\n  var target = {};\n  for (var prop in source)\n    if (__hasOwnProp$6.call(source, prop) && exclude.indexOf(prop) < 0)\n      target[prop] = source[prop];\n  if (source != null && __getOwnPropSymbols$6)\n    for (var prop of __getOwnPropSymbols$6(source)) {\n      if (exclude.indexOf(prop) < 0 && __propIsEnum$6.call(source, prop))\n        target[prop] = source[prop];\n    }\n  return target;\n};\nfunction watchWithFilter(source, cb, options = {}) {\n  const _a = options, {\n    eventFilter = bypassFilter\n  } = _a, watchOptions = __objRest$5(_a, [\n    \"eventFilter\"\n  ]);\n  return watch(source, createFilterWrapper(eventFilter, cb), watchOptions);\n}\n\nvar __getOwnPropSymbols$5 = Object.getOwnPropertySymbols;\nvar __hasOwnProp$5 = Object.prototype.hasOwnProperty;\nvar __propIsEnum$5 = Object.prototype.propertyIsEnumerable;\nvar __objRest$4 = (source, exclude) => {\n  var target = {};\n  for (var prop in source)\n    if (__hasOwnProp$5.call(source, prop) && exclude.indexOf(prop) < 0)\n      target[prop] = source[prop];\n  if (source != null && __getOwnPropSymbols$5)\n    for (var prop of __getOwnPropSymbols$5(source)) {\n      if (exclude.indexOf(prop) < 0 && __propIsEnum$5.call(source, prop))\n        target[prop] = source[prop];\n    }\n  return target;\n};\nfunction watchAtMost(source, cb, options) {\n  const _a = options, {\n    count\n  } = _a, watchOptions = __objRest$4(_a, [\n    \"count\"\n  ]);\n  const current = ref(0);\n  const stop = watchWithFilter(source, (...args) => {\n    current.value += 1;\n    if (current.value >= resolveUnref(count))\n      nextTick(() => stop());\n    cb(...args);\n  }, watchOptions);\n  return { count: current, stop };\n}\n\nvar __defProp$4 = Object.defineProperty;\nvar __defProps$4 = Object.defineProperties;\nvar __getOwnPropDescs$4 = Object.getOwnPropertyDescriptors;\nvar __getOwnPropSymbols$4 = Object.getOwnPropertySymbols;\nvar __hasOwnProp$4 = Object.prototype.hasOwnProperty;\nvar __propIsEnum$4 = Object.prototype.propertyIsEnumerable;\nvar __defNormalProp$4 = (obj, key, value) => key in obj ? __defProp$4(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;\nvar __spreadValues$4 = (a, b) => {\n  for (var prop in b || (b = {}))\n    if (__hasOwnProp$4.call(b, prop))\n      __defNormalProp$4(a, prop, b[prop]);\n  if (__getOwnPropSymbols$4)\n    for (var prop of __getOwnPropSymbols$4(b)) {\n      if (__propIsEnum$4.call(b, prop))\n        __defNormalProp$4(a, prop, b[prop]);\n    }\n  return a;\n};\nvar __spreadProps$4 = (a, b) => __defProps$4(a, __getOwnPropDescs$4(b));\nvar __objRest$3 = (source, exclude) => {\n  var target = {};\n  for (var prop in source)\n    if (__hasOwnProp$4.call(source, prop) && exclude.indexOf(prop) < 0)\n      target[prop] = source[prop];\n  if (source != null && __getOwnPropSymbols$4)\n    for (var prop of __getOwnPropSymbols$4(source)) {\n      if (exclude.indexOf(prop) < 0 && __propIsEnum$4.call(source, prop))\n        target[prop] = source[prop];\n    }\n  return target;\n};\nfunction watchDebounced(source, cb, options = {}) {\n  const _a = options, {\n    debounce = 0,\n    maxWait = void 0\n  } = _a, watchOptions = __objRest$3(_a, [\n    \"debounce\",\n    \"maxWait\"\n  ]);\n  return watchWithFilter(source, cb, __spreadProps$4(__spreadValues$4({}, watchOptions), {\n    eventFilter: debounceFilter(debounce, { maxWait })\n  }));\n}\n\nvar __defProp$3 = Object.defineProperty;\nvar __defProps$3 = Object.defineProperties;\nvar __getOwnPropDescs$3 = Object.getOwnPropertyDescriptors;\nvar __getOwnPropSymbols$3 = Object.getOwnPropertySymbols;\nvar __hasOwnProp$3 = Object.prototype.hasOwnProperty;\nvar __propIsEnum$3 = Object.prototype.propertyIsEnumerable;\nvar __defNormalProp$3 = (obj, key, value) => key in obj ? __defProp$3(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;\nvar __spreadValues$3 = (a, b) => {\n  for (var prop in b || (b = {}))\n    if (__hasOwnProp$3.call(b, prop))\n      __defNormalProp$3(a, prop, b[prop]);\n  if (__getOwnPropSymbols$3)\n    for (var prop of __getOwnPropSymbols$3(b)) {\n      if (__propIsEnum$3.call(b, prop))\n        __defNormalProp$3(a, prop, b[prop]);\n    }\n  return a;\n};\nvar __spreadProps$3 = (a, b) => __defProps$3(a, __getOwnPropDescs$3(b));\nvar __objRest$2 = (source, exclude) => {\n  var target = {};\n  for (var prop in source)\n    if (__hasOwnProp$3.call(source, prop) && exclude.indexOf(prop) < 0)\n      target[prop] = source[prop];\n  if (source != null && __getOwnPropSymbols$3)\n    for (var prop of __getOwnPropSymbols$3(source)) {\n      if (exclude.indexOf(prop) < 0 && __propIsEnum$3.call(source, prop))\n        target[prop] = source[prop];\n    }\n  return target;\n};\nfunction watchIgnorable(source, cb, options = {}) {\n  const _a = options, {\n    eventFilter = bypassFilter\n  } = _a, watchOptions = __objRest$2(_a, [\n    \"eventFilter\"\n  ]);\n  const filteredCb = createFilterWrapper(eventFilter, cb);\n  let ignoreUpdates;\n  let ignorePrevAsyncUpdates;\n  let stop;\n  if (watchOptions.flush === \"sync\") {\n    const ignore = ref(false);\n    ignorePrevAsyncUpdates = () => {\n    };\n    ignoreUpdates = (updater) => {\n      ignore.value = true;\n      updater();\n      ignore.value = false;\n    };\n    stop = watch(source, (...args) => {\n      if (!ignore.value)\n        filteredCb(...args);\n    }, watchOptions);\n  } else {\n    const disposables = [];\n    const ignoreCounter = ref(0);\n    const syncCounter = ref(0);\n    ignorePrevAsyncUpdates = () => {\n      ignoreCounter.value = syncCounter.value;\n    };\n    disposables.push(watch(source, () => {\n      syncCounter.value++;\n    }, __spreadProps$3(__spreadValues$3({}, watchOptions), { flush: \"sync\" })));\n    ignoreUpdates = (updater) => {\n      const syncCounterPrev = syncCounter.value;\n      updater();\n      ignoreCounter.value += syncCounter.value - syncCounterPrev;\n    };\n    disposables.push(watch(source, (...args) => {\n      const ignore = ignoreCounter.value > 0 && ignoreCounter.value === syncCounter.value;\n      ignoreCounter.value = 0;\n      syncCounter.value = 0;\n      if (ignore)\n        return;\n      filteredCb(...args);\n    }, watchOptions));\n    stop = () => {\n      disposables.forEach((fn) => fn());\n    };\n  }\n  return { stop, ignoreUpdates, ignorePrevAsyncUpdates };\n}\n\nfunction watchOnce(source, cb, options) {\n  const stop = watch(source, (...args) => {\n    nextTick(() => stop());\n    return cb(...args);\n  }, options);\n}\n\nvar __defProp$2 = Object.defineProperty;\nvar __defProps$2 = Object.defineProperties;\nvar __getOwnPropDescs$2 = Object.getOwnPropertyDescriptors;\nvar __getOwnPropSymbols$2 = Object.getOwnPropertySymbols;\nvar __hasOwnProp$2 = Object.prototype.hasOwnProperty;\nvar __propIsEnum$2 = Object.prototype.propertyIsEnumerable;\nvar __defNormalProp$2 = (obj, key, value) => key in obj ? __defProp$2(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;\nvar __spreadValues$2 = (a, b) => {\n  for (var prop in b || (b = {}))\n    if (__hasOwnProp$2.call(b, prop))\n      __defNormalProp$2(a, prop, b[prop]);\n  if (__getOwnPropSymbols$2)\n    for (var prop of __getOwnPropSymbols$2(b)) {\n      if (__propIsEnum$2.call(b, prop))\n        __defNormalProp$2(a, prop, b[prop]);\n    }\n  return a;\n};\nvar __spreadProps$2 = (a, b) => __defProps$2(a, __getOwnPropDescs$2(b));\nvar __objRest$1 = (source, exclude) => {\n  var target = {};\n  for (var prop in source)\n    if (__hasOwnProp$2.call(source, prop) && exclude.indexOf(prop) < 0)\n      target[prop] = source[prop];\n  if (source != null && __getOwnPropSymbols$2)\n    for (var prop of __getOwnPropSymbols$2(source)) {\n      if (exclude.indexOf(prop) < 0 && __propIsEnum$2.call(source, prop))\n        target[prop] = source[prop];\n    }\n  return target;\n};\nfunction watchPausable(source, cb, options = {}) {\n  const _a = options, {\n    eventFilter: filter\n  } = _a, watchOptions = __objRest$1(_a, [\n    \"eventFilter\"\n  ]);\n  const { eventFilter, pause, resume, isActive } = pausableFilter(filter);\n  const stop = watchWithFilter(source, cb, __spreadProps$2(__spreadValues$2({}, watchOptions), {\n    eventFilter\n  }));\n  return { stop, pause, resume, isActive };\n}\n\nvar __defProp$1 = Object.defineProperty;\nvar __defProps$1 = Object.defineProperties;\nvar __getOwnPropDescs$1 = Object.getOwnPropertyDescriptors;\nvar __getOwnPropSymbols$1 = Object.getOwnPropertySymbols;\nvar __hasOwnProp$1 = Object.prototype.hasOwnProperty;\nvar __propIsEnum$1 = Object.prototype.propertyIsEnumerable;\nvar __defNormalProp$1 = (obj, key, value) => key in obj ? __defProp$1(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;\nvar __spreadValues$1 = (a, b) => {\n  for (var prop in b || (b = {}))\n    if (__hasOwnProp$1.call(b, prop))\n      __defNormalProp$1(a, prop, b[prop]);\n  if (__getOwnPropSymbols$1)\n    for (var prop of __getOwnPropSymbols$1(b)) {\n      if (__propIsEnum$1.call(b, prop))\n        __defNormalProp$1(a, prop, b[prop]);\n    }\n  return a;\n};\nvar __spreadProps$1 = (a, b) => __defProps$1(a, __getOwnPropDescs$1(b));\nvar __objRest = (source, exclude) => {\n  var target = {};\n  for (var prop in source)\n    if (__hasOwnProp$1.call(source, prop) && exclude.indexOf(prop) < 0)\n      target[prop] = source[prop];\n  if (source != null && __getOwnPropSymbols$1)\n    for (var prop of __getOwnPropSymbols$1(source)) {\n      if (exclude.indexOf(prop) < 0 && __propIsEnum$1.call(source, prop))\n        target[prop] = source[prop];\n    }\n  return target;\n};\nfunction watchThrottled(source, cb, options = {}) {\n  const _a = options, {\n    throttle = 0,\n    trailing = true,\n    leading = true\n  } = _a, watchOptions = __objRest(_a, [\n    \"throttle\",\n    \"trailing\",\n    \"leading\"\n  ]);\n  return watchWithFilter(source, cb, __spreadProps$1(__spreadValues$1({}, watchOptions), {\n    eventFilter: throttleFilter(throttle, trailing, leading)\n  }));\n}\n\nvar __defProp = Object.defineProperty;\nvar __defProps = Object.defineProperties;\nvar __getOwnPropDescs = Object.getOwnPropertyDescriptors;\nvar __getOwnPropSymbols = Object.getOwnPropertySymbols;\nvar __hasOwnProp = Object.prototype.hasOwnProperty;\nvar __propIsEnum = Object.prototype.propertyIsEnumerable;\nvar __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;\nvar __spreadValues = (a, b) => {\n  for (var prop in b || (b = {}))\n    if (__hasOwnProp.call(b, prop))\n      __defNormalProp(a, prop, b[prop]);\n  if (__getOwnPropSymbols)\n    for (var prop of __getOwnPropSymbols(b)) {\n      if (__propIsEnum.call(b, prop))\n        __defNormalProp(a, prop, b[prop]);\n    }\n  return a;\n};\nvar __spreadProps = (a, b) => __defProps(a, __getOwnPropDescs(b));\nfunction watchTriggerable(source, cb, options = {}) {\n  let cleanupFn;\n  function onEffect() {\n    if (!cleanupFn)\n      return;\n    const fn = cleanupFn;\n    cleanupFn = void 0;\n    fn();\n  }\n  function onCleanup(callback) {\n    cleanupFn = callback;\n  }\n  const _cb = (value, oldValue) => {\n    onEffect();\n    return cb(value, oldValue, onCleanup);\n  };\n  const res = watchIgnorable(source, _cb, options);\n  const { ignoreUpdates } = res;\n  const trigger = () => {\n    let res2;\n    ignoreUpdates(() => {\n      res2 = _cb(getWatchSources(source), getOldValue(source));\n    });\n    return res2;\n  };\n  return __spreadProps(__spreadValues({}, res), {\n    trigger\n  });\n}\nfunction getWatchSources(sources) {\n  if (isReactive(sources))\n    return sources;\n  if (Array.isArray(sources))\n    return sources.map((item) => getOneWatchSource(item));\n  return getOneWatchSource(sources);\n}\nfunction getOneWatchSource(source) {\n  return typeof source === \"function\" ? source() : unref(source);\n}\nfunction getOldValue(source) {\n  return Array.isArray(source) ? source.map(() => void 0) : void 0;\n}\n\nfunction whenever(source, cb, options) {\n  return watch(source, (v, ov, onInvalidate) => {\n    if (v)\n      cb(v, ov, onInvalidate);\n  }, options);\n}\n\nexport { __onlyVue27Plus, __onlyVue3, assert, refAutoReset as autoResetRef, bypassFilter, clamp, computedEager, computedWithControl, containsProp, computedWithControl as controlledComputed, controlledRef, createEventHook, createFilterWrapper, createGlobalState, createInjectionState, reactify as createReactiveFn, createSharedComposable, createSingletonPromise, debounceFilter, refDebounced as debouncedRef, watchDebounced as debouncedWatch, directiveHooks, computedEager as eagerComputed, extendRef, formatDate, get, hasOwn, identity, watchIgnorable as ignorableWatch, increaseWithUnit, invoke, isBoolean, isClient, isDef, isDefined, isFunction, isIOS, isNumber, isObject, isString, isWindow, makeDestructurable, noop, normalizeDate, now, objectPick, pausableFilter, watchPausable as pausableWatch, promiseTimeout, rand, reactify, reactifyObject, reactiveComputed, reactiveOmit, reactivePick, refAutoReset, refDebounced, refDefault, refThrottled, refWithControl, resolveRef, resolveUnref, set, syncRef, syncRefs, throttleFilter, refThrottled as throttledRef, watchThrottled as throttledWatch, timestamp, toReactive, toRefs, tryOnBeforeMount, tryOnBeforeUnmount, tryOnMounted, tryOnScopeDispose, tryOnUnmounted, until, useArrayEvery, useArrayFilter, useArrayFind, useArrayFindIndex, useArrayFindLast, useArrayJoin, useArrayMap, useArrayReduce, useArraySome, useArrayUnique, useCounter, useDateFormat, refDebounced as useDebounce, useDebounceFn, useInterval, useIntervalFn, useLastChanged, refThrottled as useThrottle, useThrottleFn, useTimeout, useTimeoutFn, useToNumber, useToString, useToggle, watchArray, watchAtMost, watchDebounced, watchIgnorable, watchOnce, watchPausable, watchThrottled, watchTriggerable, watchWithFilter, whenever };\n","import { noop, resolveUnref, isClient, isString, tryOnScopeDispose, isIOS, tryOnMounted, computedWithControl, promiseTimeout, isFunction, resolveRef, increaseWithUnit, useTimeoutFn, pausableWatch, createEventHook, timestamp, pausableFilter, watchIgnorable, debounceFilter, createFilterWrapper, bypassFilter, createSingletonPromise, toRefs, containsProp, until, hasOwn, throttleFilter, useDebounceFn, useThrottleFn, isObject, isNumber, useIntervalFn, clamp, syncRef, objectPick, tryOnUnmounted, watchWithFilter, identity, isDef } from '@vueuse/shared';\nexport * from '@vueuse/shared';\nimport { isRef, ref, shallowRef, watchEffect, computed, inject, unref, watch, getCurrentInstance, customRef, onUpdated, reactive, nextTick, onMounted, markRaw, readonly, getCurrentScope, isVue2, set, del, isReadonly, onBeforeUpdate } from 'vue-demi';\n\nfunction computedAsync(evaluationCallback, initialState, optionsOrRef) {\n  let options;\n  if (isRef(optionsOrRef)) {\n    options = {\n      evaluating: optionsOrRef\n    };\n  } else {\n    options = optionsOrRef || {};\n  }\n  const {\n    lazy = false,\n    evaluating = void 0,\n    shallow = false,\n    onError = noop\n  } = options;\n  const started = ref(!lazy);\n  const current = shallow ? shallowRef(initialState) : ref(initialState);\n  let counter = 0;\n  watchEffect(async (onInvalidate) => {\n    if (!started.value)\n      return;\n    counter++;\n    const counterAtBeginning = counter;\n    let hasFinished = false;\n    if (evaluating) {\n      Promise.resolve().then(() => {\n        evaluating.value = true;\n      });\n    }\n    try {\n      const result = await evaluationCallback((cancelCallback) => {\n        onInvalidate(() => {\n          if (evaluating)\n            evaluating.value = false;\n          if (!hasFinished)\n            cancelCallback();\n        });\n      });\n      if (counterAtBeginning === counter)\n        current.value = result;\n    } catch (e) {\n      onError(e);\n    } finally {\n      if (evaluating && counterAtBeginning === counter)\n        evaluating.value = false;\n      hasFinished = true;\n    }\n  });\n  if (lazy) {\n    return computed(() => {\n      started.value = true;\n      return current.value;\n    });\n  } else {\n    return current;\n  }\n}\n\nfunction computedInject(key, options, defaultSource, treatDefaultAsFactory) {\n  let source = inject(key);\n  if (defaultSource)\n    source = inject(key, defaultSource);\n  if (treatDefaultAsFactory)\n    source = inject(key, defaultSource, treatDefaultAsFactory);\n  if (typeof options === \"function\") {\n    return computed((ctx) => options(source, ctx));\n  } else {\n    return computed({\n      get: (ctx) => options.get(source, ctx),\n      set: options.set\n    });\n  }\n}\n\nconst createUnrefFn = (fn) => {\n  return function(...args) {\n    return fn.apply(this, args.map((i) => unref(i)));\n  };\n};\n\nfunction unrefElement(elRef) {\n  var _a;\n  const plain = resolveUnref(elRef);\n  return (_a = plain == null ? void 0 : plain.$el) != null ? _a : plain;\n}\n\nconst defaultWindow = isClient ? window : void 0;\nconst defaultDocument = isClient ? window.document : void 0;\nconst defaultNavigator = isClient ? window.navigator : void 0;\nconst defaultLocation = isClient ? window.location : void 0;\n\nfunction useEventListener(...args) {\n  let target;\n  let events;\n  let listeners;\n  let options;\n  if (isString(args[0]) || Array.isArray(args[0])) {\n    [events, listeners, options] = args;\n    target = defaultWindow;\n  } else {\n    [target, events, listeners, options] = args;\n  }\n  if (!target)\n    return noop;\n  if (!Array.isArray(events))\n    events = [events];\n  if (!Array.isArray(listeners))\n    listeners = [listeners];\n  const cleanups = [];\n  const cleanup = () => {\n    cleanups.forEach((fn) => fn());\n    cleanups.length = 0;\n  };\n  const register = (el, event, listener, options2) => {\n    el.addEventListener(event, listener, options2);\n    return () => el.removeEventListener(event, listener, options2);\n  };\n  const stopWatch = watch(() => [unrefElement(target), resolveUnref(options)], ([el, options2]) => {\n    cleanup();\n    if (!el)\n      return;\n    cleanups.push(...events.flatMap((event) => {\n      return listeners.map((listener) => register(el, event, listener, options2));\n    }));\n  }, { immediate: true, flush: \"post\" });\n  const stop = () => {\n    stopWatch();\n    cleanup();\n  };\n  tryOnScopeDispose(stop);\n  return stop;\n}\n\nlet _iOSWorkaround = false;\nfunction onClickOutside(target, handler, options = {}) {\n  const { window = defaultWindow, ignore = [], capture = true, detectIframe = false } = options;\n  if (!window)\n    return;\n  if (isIOS && !_iOSWorkaround) {\n    _iOSWorkaround = true;\n    Array.from(window.document.body.children).forEach((el) => el.addEventListener(\"click\", noop));\n  }\n  let shouldListen = true;\n  const shouldIgnore = (event) => {\n    return ignore.some((target2) => {\n      if (typeof target2 === \"string\") {\n        return Array.from(window.document.querySelectorAll(target2)).some((el) => el === event.target || event.composedPath().includes(el));\n      } else {\n        const el = unrefElement(target2);\n        return el && (event.target === el || event.composedPath().includes(el));\n      }\n    });\n  };\n  const listener = (event) => {\n    const el = unrefElement(target);\n    if (!el || el === event.target || event.composedPath().includes(el))\n      return;\n    if (event.detail === 0)\n      shouldListen = !shouldIgnore(event);\n    if (!shouldListen) {\n      shouldListen = true;\n      return;\n    }\n    handler(event);\n  };\n  const cleanup = [\n    useEventListener(window, \"click\", listener, { passive: true, capture }),\n    useEventListener(window, \"pointerdown\", (e) => {\n      const el = unrefElement(target);\n      if (el)\n        shouldListen = !e.composedPath().includes(el) && !shouldIgnore(e);\n    }, { passive: true }),\n    detectIframe && useEventListener(window, \"blur\", (event) => {\n      var _a;\n      const el = unrefElement(target);\n      if (((_a = window.document.activeElement) == null ? void 0 : _a.tagName) === \"IFRAME\" && !(el == null ? void 0 : el.contains(window.document.activeElement)))\n        handler(event);\n    })\n  ].filter(Boolean);\n  const stop = () => cleanup.forEach((fn) => fn());\n  return stop;\n}\n\nvar __defProp$n = Object.defineProperty;\nvar __defProps$9 = Object.defineProperties;\nvar __getOwnPropDescs$9 = Object.getOwnPropertyDescriptors;\nvar __getOwnPropSymbols$p = Object.getOwnPropertySymbols;\nvar __hasOwnProp$p = Object.prototype.hasOwnProperty;\nvar __propIsEnum$p = Object.prototype.propertyIsEnumerable;\nvar __defNormalProp$n = (obj, key, value) => key in obj ? __defProp$n(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;\nvar __spreadValues$n = (a, b) => {\n  for (var prop in b || (b = {}))\n    if (__hasOwnProp$p.call(b, prop))\n      __defNormalProp$n(a, prop, b[prop]);\n  if (__getOwnPropSymbols$p)\n    for (var prop of __getOwnPropSymbols$p(b)) {\n      if (__propIsEnum$p.call(b, prop))\n        __defNormalProp$n(a, prop, b[prop]);\n    }\n  return a;\n};\nvar __spreadProps$9 = (a, b) => __defProps$9(a, __getOwnPropDescs$9(b));\nconst createKeyPredicate = (keyFilter) => {\n  if (typeof keyFilter === \"function\")\n    return keyFilter;\n  else if (typeof keyFilter === \"string\")\n    return (event) => event.key === keyFilter;\n  else if (Array.isArray(keyFilter))\n    return (event) => keyFilter.includes(event.key);\n  return () => true;\n};\nfunction onKeyStroke(...args) {\n  let key;\n  let handler;\n  let options = {};\n  if (args.length === 3) {\n    key = args[0];\n    handler = args[1];\n    options = args[2];\n  } else if (args.length === 2) {\n    if (typeof args[1] === \"object\") {\n      key = true;\n      handler = args[0];\n      options = args[1];\n    } else {\n      key = args[0];\n      handler = args[1];\n    }\n  } else {\n    key = true;\n    handler = args[0];\n  }\n  const { target = defaultWindow, eventName = \"keydown\", passive = false } = options;\n  const predicate = createKeyPredicate(key);\n  const listener = (e) => {\n    if (predicate(e))\n      handler(e);\n  };\n  return useEventListener(target, eventName, listener, passive);\n}\nfunction onKeyDown(key, handler, options = {}) {\n  return onKeyStroke(key, handler, __spreadProps$9(__spreadValues$n({}, options), { eventName: \"keydown\" }));\n}\nfunction onKeyPressed(key, handler, options = {}) {\n  return onKeyStroke(key, handler, __spreadProps$9(__spreadValues$n({}, options), { eventName: \"keypress\" }));\n}\nfunction onKeyUp(key, handler, options = {}) {\n  return onKeyStroke(key, handler, __spreadProps$9(__spreadValues$n({}, options), { eventName: \"keyup\" }));\n}\n\nconst DEFAULT_DELAY = 500;\nfunction onLongPress(target, handler, options) {\n  var _a, _b;\n  const elementRef = computed(() => unrefElement(target));\n  let timeout;\n  function clear() {\n    if (timeout) {\n      clearTimeout(timeout);\n      timeout = void 0;\n    }\n  }\n  function onDown(ev) {\n    var _a2, _b2, _c, _d;\n    if (((_a2 = options == null ? void 0 : options.modifiers) == null ? void 0 : _a2.self) && ev.target !== elementRef.value)\n      return;\n    clear();\n    if ((_b2 = options == null ? void 0 : options.modifiers) == null ? void 0 : _b2.prevent)\n      ev.preventDefault();\n    if ((_c = options == null ? void 0 : options.modifiers) == null ? void 0 : _c.stop)\n      ev.stopPropagation();\n    timeout = setTimeout(() => handler(ev), (_d = options == null ? void 0 : options.delay) != null ? _d : DEFAULT_DELAY);\n  }\n  const listenerOptions = {\n    capture: (_a = options == null ? void 0 : options.modifiers) == null ? void 0 : _a.capture,\n    once: (_b = options == null ? void 0 : options.modifiers) == null ? void 0 : _b.once\n  };\n  useEventListener(elementRef, \"pointerdown\", onDown, listenerOptions);\n  useEventListener(elementRef, \"pointerup\", clear, listenerOptions);\n  useEventListener(elementRef, \"pointerleave\", clear, listenerOptions);\n}\n\nconst isFocusedElementEditable = () => {\n  const { activeElement, body } = document;\n  if (!activeElement)\n    return false;\n  if (activeElement === body)\n    return false;\n  switch (activeElement.tagName) {\n    case \"INPUT\":\n    case \"TEXTAREA\":\n      return true;\n  }\n  return activeElement.hasAttribute(\"contenteditable\");\n};\nconst isTypedCharValid = ({\n  keyCode,\n  metaKey,\n  ctrlKey,\n  altKey\n}) => {\n  if (metaKey || ctrlKey || altKey)\n    return false;\n  if (keyCode >= 48 && keyCode <= 57 || keyCode >= 96 && keyCode <= 105)\n    return true;\n  if (keyCode >= 65 && keyCode <= 90)\n    return true;\n  return false;\n};\nfunction onStartTyping(callback, options = {}) {\n  const { document: document2 = defaultDocument } = options;\n  const keydown = (event) => {\n    !isFocusedElementEditable() && isTypedCharValid(event) && callback(event);\n  };\n  if (document2)\n    useEventListener(document2, \"keydown\", keydown, { passive: true });\n}\n\nfunction templateRef(key, initialValue = null) {\n  const instance = getCurrentInstance();\n  let _trigger = () => {\n  };\n  const element = customRef((track, trigger) => {\n    _trigger = trigger;\n    return {\n      get() {\n        var _a, _b;\n        track();\n        return (_b = (_a = instance == null ? void 0 : instance.proxy) == null ? void 0 : _a.$refs[key]) != null ? _b : initialValue;\n      },\n      set() {\n      }\n    };\n  });\n  tryOnMounted(_trigger);\n  onUpdated(_trigger);\n  return element;\n}\n\nfunction useActiveElement(options = {}) {\n  var _a;\n  const { window = defaultWindow } = options;\n  const document = (_a = options.document) != null ? _a : window == null ? void 0 : window.document;\n  const activeElement = computedWithControl(() => null, () => document == null ? void 0 : document.activeElement);\n  if (window) {\n    useEventListener(window, \"blur\", (event) => {\n      if (event.relatedTarget !== null)\n        return;\n      activeElement.trigger();\n    }, true);\n    useEventListener(window, \"focus\", activeElement.trigger, true);\n  }\n  return activeElement;\n}\n\nfunction useAsyncQueue(tasks, options = {}) {\n  const {\n    interrupt = true,\n    onError = noop,\n    onFinished = noop\n  } = options;\n  const promiseState = {\n    pending: \"pending\",\n    rejected: \"rejected\",\n    fulfilled: \"fulfilled\"\n  };\n  const initialResult = Array.from(new Array(tasks.length), () => ({ state: promiseState.pending, data: null }));\n  const result = reactive(initialResult);\n  const activeIndex = ref(-1);\n  if (!tasks || tasks.length === 0) {\n    onFinished();\n    return {\n      activeIndex,\n      result\n    };\n  }\n  function updateResult(state, res) {\n    activeIndex.value++;\n    result[activeIndex.value].data = res;\n    result[activeIndex.value].state = state;\n  }\n  tasks.reduce((prev, curr) => {\n    return prev.then((prevRes) => {\n      var _a;\n      if (((_a = result[activeIndex.value]) == null ? void 0 : _a.state) === promiseState.rejected && interrupt) {\n        onFinished();\n        return;\n      }\n      return curr(prevRes).then((currentRes) => {\n        updateResult(promiseState.fulfilled, currentRes);\n        activeIndex.value === tasks.length - 1 && onFinished();\n        return currentRes;\n      });\n    }).catch((e) => {\n      updateResult(promiseState.rejected, e);\n      onError();\n      return e;\n    });\n  }, Promise.resolve());\n  return {\n    activeIndex,\n    result\n  };\n}\n\nfunction useAsyncState(promise, initialState, options) {\n  const {\n    immediate = true,\n    delay = 0,\n    onError = noop,\n    onSuccess = noop,\n    resetOnExecute = true,\n    shallow = true,\n    throwError\n  } = options != null ? options : {};\n  const state = shallow ? shallowRef(initialState) : ref(initialState);\n  const isReady = ref(false);\n  const isLoading = ref(false);\n  const error = ref(void 0);\n  async function execute(delay2 = 0, ...args) {\n    if (resetOnExecute)\n      state.value = initialState;\n    error.value = void 0;\n    isReady.value = false;\n    isLoading.value = true;\n    if (delay2 > 0)\n      await promiseTimeout(delay2);\n    const _promise = typeof promise === \"function\" ? promise(...args) : promise;\n    try {\n      const data = await _promise;\n      state.value = data;\n      isReady.value = true;\n      onSuccess(data);\n    } catch (e) {\n      error.value = e;\n      onError(e);\n      if (throwError)\n        throw error;\n    } finally {\n      isLoading.value = false;\n    }\n    return state.value;\n  }\n  if (immediate)\n    execute(delay);\n  return {\n    state,\n    isReady,\n    isLoading,\n    error,\n    execute\n  };\n}\n\nconst defaults = {\n  array: (v) => JSON.stringify(v),\n  object: (v) => JSON.stringify(v),\n  set: (v) => JSON.stringify(Array.from(v)),\n  map: (v) => JSON.stringify(Object.fromEntries(v)),\n  null: () => \"\"\n};\nfunction getDefaultSerialization(target) {\n  if (!target)\n    return defaults.null;\n  if (target instanceof Map)\n    return defaults.map;\n  else if (target instanceof Set)\n    return defaults.set;\n  else if (Array.isArray(target))\n    return defaults.array;\n  else\n    return defaults.object;\n}\n\nfunction useBase64(target, options) {\n  const base64 = ref(\"\");\n  const promise = ref();\n  function execute() {\n    if (!isClient)\n      return;\n    promise.value = new Promise((resolve, reject) => {\n      try {\n        const _target = resolveUnref(target);\n        if (_target == null) {\n          resolve(\"\");\n        } else if (typeof _target === \"string\") {\n          resolve(blobToBase64(new Blob([_target], { type: \"text/plain\" })));\n        } else if (_target instanceof Blob) {\n          resolve(blobToBase64(_target));\n        } else if (_target instanceof ArrayBuffer) {\n          resolve(window.btoa(String.fromCharCode(...new Uint8Array(_target))));\n        } else if (_target instanceof HTMLCanvasElement) {\n          resolve(_target.toDataURL(options == null ? void 0 : options.type, options == null ? void 0 : options.quality));\n        } else if (_target instanceof HTMLImageElement) {\n          const img = _target.cloneNode(false);\n          img.crossOrigin = \"Anonymous\";\n          imgLoaded(img).then(() => {\n            const canvas = document.createElement(\"canvas\");\n            const ctx = canvas.getContext(\"2d\");\n            canvas.width = img.width;\n            canvas.height = img.height;\n            ctx.drawImage(img, 0, 0, canvas.width, canvas.height);\n            resolve(canvas.toDataURL(options == null ? void 0 : options.type, options == null ? void 0 : options.quality));\n          }).catch(reject);\n        } else if (typeof _target === \"object\") {\n          const _serializeFn = (options == null ? void 0 : options.serializer) || getDefaultSerialization(_target);\n          const serialized = _serializeFn(_target);\n          return resolve(blobToBase64(new Blob([serialized], { type: \"application/json\" })));\n        } else {\n          reject(new Error(\"target is unsupported types\"));\n        }\n      } catch (error) {\n        reject(error);\n      }\n    });\n    promise.value.then((res) => base64.value = res);\n    return promise.value;\n  }\n  if (isRef(target) || isFunction(target))\n    watch(target, execute, { immediate: true });\n  else\n    execute();\n  return {\n    base64,\n    promise,\n    execute\n  };\n}\nfunction imgLoaded(img) {\n  return new Promise((resolve, reject) => {\n    if (!img.complete) {\n      img.onload = () => {\n        resolve();\n      };\n      img.onerror = reject;\n    } else {\n      resolve();\n    }\n  });\n}\nfunction blobToBase64(blob) {\n  return new Promise((resolve, reject) => {\n    const fr = new FileReader();\n    fr.onload = (e) => {\n      resolve(e.target.result);\n    };\n    fr.onerror = reject;\n    fr.readAsDataURL(blob);\n  });\n}\n\nfunction useSupported(callback, sync = false) {\n  const isSupported = ref();\n  const update = () => isSupported.value = Boolean(callback());\n  update();\n  tryOnMounted(update, sync);\n  return isSupported;\n}\n\nfunction useBattery({ navigator = defaultNavigator } = {}) {\n  const events = [\"chargingchange\", \"chargingtimechange\", \"dischargingtimechange\", \"levelchange\"];\n  const isSupported = useSupported(() => navigator && \"getBattery\" in navigator);\n  const charging = ref(false);\n  const chargingTime = ref(0);\n  const dischargingTime = ref(0);\n  const level = ref(1);\n  let battery;\n  function updateBatteryInfo() {\n    charging.value = this.charging;\n    chargingTime.value = this.chargingTime || 0;\n    dischargingTime.value = this.dischargingTime || 0;\n    level.value = this.level;\n  }\n  if (isSupported.value) {\n    navigator.getBattery().then((_battery) => {\n      battery = _battery;\n      updateBatteryInfo.call(battery);\n      for (const event of events)\n        useEventListener(battery, event, updateBatteryInfo, { passive: true });\n    });\n  }\n  return {\n    isSupported,\n    charging,\n    chargingTime,\n    dischargingTime,\n    level\n  };\n}\n\nfunction useBluetooth(options) {\n  let {\n    acceptAllDevices = false\n  } = options || {};\n  const {\n    filters = void 0,\n    optionalServices = void 0,\n    navigator = defaultNavigator\n  } = options || {};\n  const isSupported = useSupported(() => navigator && \"bluetooth\" in navigator);\n  const device = shallowRef(void 0);\n  const error = shallowRef(null);\n  watch(device, () => {\n    connectToBluetoothGATTServer();\n  });\n  async function requestDevice() {\n    if (!isSupported.value)\n      return;\n    error.value = null;\n    if (filters && filters.length > 0)\n      acceptAllDevices = false;\n    try {\n      device.value = await (navigator == null ? void 0 : navigator.bluetooth.requestDevice({\n        acceptAllDevices,\n        filters,\n        optionalServices\n      }));\n    } catch (err) {\n      error.value = err;\n    }\n  }\n  const server = ref();\n  const isConnected = computed(() => {\n    var _a;\n    return ((_a = server.value) == null ? void 0 : _a.connected) || false;\n  });\n  async function connectToBluetoothGATTServer() {\n    error.value = null;\n    if (device.value && device.value.gatt) {\n      device.value.addEventListener(\"gattserverdisconnected\", () => {\n      });\n      try {\n        server.value = await device.value.gatt.connect();\n      } catch (err) {\n        error.value = err;\n      }\n    }\n  }\n  tryOnMounted(() => {\n    var _a;\n    if (device.value)\n      (_a = device.value.gatt) == null ? void 0 : _a.connect();\n  });\n  tryOnScopeDispose(() => {\n    var _a;\n    if (device.value)\n      (_a = device.value.gatt) == null ? void 0 : _a.disconnect();\n  });\n  return {\n    isSupported,\n    isConnected,\n    device,\n    requestDevice,\n    server,\n    error\n  };\n}\n\nfunction useMediaQuery(query, options = {}) {\n  const { window = defaultWindow } = options;\n  const isSupported = useSupported(() => window && \"matchMedia\" in window && typeof window.matchMedia === \"function\");\n  let mediaQuery;\n  const matches = ref(false);\n  const cleanup = () => {\n    if (!mediaQuery)\n      return;\n    if (\"removeEventListener\" in mediaQuery)\n      mediaQuery.removeEventListener(\"change\", update);\n    else\n      mediaQuery.removeListener(update);\n  };\n  const update = () => {\n    if (!isSupported.value)\n      return;\n    cleanup();\n    mediaQuery = window.matchMedia(resolveRef(query).value);\n    matches.value = mediaQuery.matches;\n    if (\"addEventListener\" in mediaQuery)\n      mediaQuery.addEventListener(\"change\", update);\n    else\n      mediaQuery.addListener(update);\n  };\n  watchEffect(update);\n  tryOnScopeDispose(() => cleanup());\n  return matches;\n}\n\nconst breakpointsTailwind = {\n  \"sm\": 640,\n  \"md\": 768,\n  \"lg\": 1024,\n  \"xl\": 1280,\n  \"2xl\": 1536\n};\nconst breakpointsBootstrapV5 = {\n  sm: 576,\n  md: 768,\n  lg: 992,\n  xl: 1200,\n  xxl: 1400\n};\nconst breakpointsVuetify = {\n  xs: 600,\n  sm: 960,\n  md: 1264,\n  lg: 1904\n};\nconst breakpointsAntDesign = {\n  xs: 480,\n  sm: 576,\n  md: 768,\n  lg: 992,\n  xl: 1200,\n  xxl: 1600\n};\nconst breakpointsQuasar = {\n  xs: 600,\n  sm: 1024,\n  md: 1440,\n  lg: 1920\n};\nconst breakpointsSematic = {\n  mobileS: 320,\n  mobileM: 375,\n  mobileL: 425,\n  tablet: 768,\n  laptop: 1024,\n  laptopL: 1440,\n  desktop4K: 2560\n};\nconst breakpointsMasterCss = {\n  \"3xs\": 360,\n  \"2xs\": 480,\n  \"xs\": 600,\n  \"sm\": 768,\n  \"md\": 1024,\n  \"lg\": 1280,\n  \"xl\": 1440,\n  \"2xl\": 1600,\n  \"3xl\": 1920,\n  \"4xl\": 2560\n};\n\nvar __defProp$m = Object.defineProperty;\nvar __getOwnPropSymbols$o = Object.getOwnPropertySymbols;\nvar __hasOwnProp$o = Object.prototype.hasOwnProperty;\nvar __propIsEnum$o = Object.prototype.propertyIsEnumerable;\nvar __defNormalProp$m = (obj, key, value) => key in obj ? __defProp$m(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;\nvar __spreadValues$m = (a, b) => {\n  for (var prop in b || (b = {}))\n    if (__hasOwnProp$o.call(b, prop))\n      __defNormalProp$m(a, prop, b[prop]);\n  if (__getOwnPropSymbols$o)\n    for (var prop of __getOwnPropSymbols$o(b)) {\n      if (__propIsEnum$o.call(b, prop))\n        __defNormalProp$m(a, prop, b[prop]);\n    }\n  return a;\n};\nfunction useBreakpoints(breakpoints, options = {}) {\n  function getValue(k, delta) {\n    let v = breakpoints[k];\n    if (delta != null)\n      v = increaseWithUnit(v, delta);\n    if (typeof v === \"number\")\n      v = `${v}px`;\n    return v;\n  }\n  const { window = defaultWindow } = options;\n  function match(query) {\n    if (!window)\n      return false;\n    return window.matchMedia(query).matches;\n  }\n  const greaterOrEqual = (k) => {\n    return useMediaQuery(`(min-width: ${getValue(k)})`, options);\n  };\n  const shortcutMethods = Object.keys(breakpoints).reduce((shortcuts, k) => {\n    Object.defineProperty(shortcuts, k, {\n      get: () => greaterOrEqual(k),\n      enumerable: true,\n      configurable: true\n    });\n    return shortcuts;\n  }, {});\n  return __spreadValues$m({\n    greater(k) {\n      return useMediaQuery(`(min-width: ${getValue(k, 0.1)})`, options);\n    },\n    greaterOrEqual,\n    smaller(k) {\n      return useMediaQuery(`(max-width: ${getValue(k, -0.1)})`, options);\n    },\n    smallerOrEqual(k) {\n      return useMediaQuery(`(max-width: ${getValue(k)})`, options);\n    },\n    between(a, b) {\n      return useMediaQuery(`(min-width: ${getValue(a)}) and (max-width: ${getValue(b, -0.1)})`, options);\n    },\n    isGreater(k) {\n      return match(`(min-width: ${getValue(k, 0.1)})`);\n    },\n    isGreaterOrEqual(k) {\n      return match(`(min-width: ${getValue(k)})`);\n    },\n    isSmaller(k) {\n      return match(`(max-width: ${getValue(k, -0.1)})`);\n    },\n    isSmallerOrEqual(k) {\n      return match(`(max-width: ${getValue(k)})`);\n    },\n    isInBetween(a, b) {\n      return match(`(min-width: ${getValue(a)}) and (max-width: ${getValue(b, -0.1)})`);\n    }\n  }, shortcutMethods);\n}\n\nconst useBroadcastChannel = (options) => {\n  const {\n    name,\n    window = defaultWindow\n  } = options;\n  const isSupported = useSupported(() => window && \"BroadcastChannel\" in window);\n  const isClosed = ref(false);\n  const channel = ref();\n  const data = ref();\n  const error = ref(null);\n  const post = (data2) => {\n    if (channel.value)\n      channel.value.postMessage(data2);\n  };\n  const close = () => {\n    if (channel.value)\n      channel.value.close();\n    isClosed.value = true;\n  };\n  if (isSupported.value) {\n    tryOnMounted(() => {\n      error.value = null;\n      channel.value = new BroadcastChannel(name);\n      channel.value.addEventListener(\"message\", (e) => {\n        data.value = e.data;\n      }, { passive: true });\n      channel.value.addEventListener(\"messageerror\", (e) => {\n        error.value = e;\n      }, { passive: true });\n      channel.value.addEventListener(\"close\", () => {\n        isClosed.value = true;\n      });\n    });\n  }\n  tryOnScopeDispose(() => {\n    close();\n  });\n  return {\n    isSupported,\n    channel,\n    data,\n    post,\n    close,\n    error,\n    isClosed\n  };\n};\n\nfunction useBrowserLocation({ window = defaultWindow } = {}) {\n  const buildState = (trigger) => {\n    const { state: state2, length } = (window == null ? void 0 : window.history) || {};\n    const { hash, host, hostname, href, origin, pathname, port, protocol, search } = (window == null ? void 0 : window.location) || {};\n    return {\n      trigger,\n      state: state2,\n      length,\n      hash,\n      host,\n      hostname,\n      href,\n      origin,\n      pathname,\n      port,\n      protocol,\n      search\n    };\n  };\n  const state = ref(buildState(\"load\"));\n  if (window) {\n    useEventListener(window, \"popstate\", () => state.value = buildState(\"popstate\"), { passive: true });\n    useEventListener(window, \"hashchange\", () => state.value = buildState(\"hashchange\"), { passive: true });\n  }\n  return state;\n}\n\nfunction useCached(refValue, comparator = (a, b) => a === b, watchOptions) {\n  const cachedValue = ref(refValue.value);\n  watch(() => refValue.value, (value) => {\n    if (!comparator(value, cachedValue.value))\n      cachedValue.value = value;\n  }, watchOptions);\n  return cachedValue;\n}\n\nfunction useClipboard(options = {}) {\n  const {\n    navigator = defaultNavigator,\n    read = false,\n    source,\n    copiedDuring = 1500,\n    legacy = false\n  } = options;\n  const events = [\"copy\", \"cut\"];\n  const isClipboardApiSupported = useSupported(() => navigator && \"clipboard\" in navigator);\n  const isSupported = computed(() => isClipboardApiSupported.value || legacy);\n  const text = ref(\"\");\n  const copied = ref(false);\n  const timeout = useTimeoutFn(() => copied.value = false, copiedDuring);\n  function updateText() {\n    if (isClipboardApiSupported.value) {\n      navigator.clipboard.readText().then((value) => {\n        text.value = value;\n      });\n    } else {\n      text.value = legacyRead();\n    }\n  }\n  if (isSupported.value && read) {\n    for (const event of events)\n      useEventListener(event, updateText);\n  }\n  async function copy(value = resolveUnref(source)) {\n    if (isSupported.value && value != null) {\n      if (isClipboardApiSupported.value)\n        await navigator.clipboard.writeText(value);\n      else\n        legacyCopy(value);\n      text.value = value;\n      copied.value = true;\n      timeout.start();\n    }\n  }\n  function legacyCopy(value) {\n    const ta = document.createElement(\"textarea\");\n    ta.value = value != null ? value : \"\";\n    ta.style.position = \"absolute\";\n    ta.style.opacity = \"0\";\n    document.body.appendChild(ta);\n    ta.select();\n    document.execCommand(\"copy\");\n    ta.remove();\n  }\n  function legacyRead() {\n    var _a, _b, _c;\n    return (_c = (_b = (_a = document == null ? void 0 : document.getSelection) == null ? void 0 : _a.call(document)) == null ? void 0 : _b.toString()) != null ? _c : \"\";\n  }\n  return {\n    isSupported,\n    text,\n    copied,\n    copy\n  };\n}\n\nvar __defProp$l = Object.defineProperty;\nvar __defProps$8 = Object.defineProperties;\nvar __getOwnPropDescs$8 = Object.getOwnPropertyDescriptors;\nvar __getOwnPropSymbols$n = Object.getOwnPropertySymbols;\nvar __hasOwnProp$n = Object.prototype.hasOwnProperty;\nvar __propIsEnum$n = Object.prototype.propertyIsEnumerable;\nvar __defNormalProp$l = (obj, key, value) => key in obj ? __defProp$l(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;\nvar __spreadValues$l = (a, b) => {\n  for (var prop in b || (b = {}))\n    if (__hasOwnProp$n.call(b, prop))\n      __defNormalProp$l(a, prop, b[prop]);\n  if (__getOwnPropSymbols$n)\n    for (var prop of __getOwnPropSymbols$n(b)) {\n      if (__propIsEnum$n.call(b, prop))\n        __defNormalProp$l(a, prop, b[prop]);\n    }\n  return a;\n};\nvar __spreadProps$8 = (a, b) => __defProps$8(a, __getOwnPropDescs$8(b));\nfunction cloneFnJSON(source) {\n  return JSON.parse(JSON.stringify(source));\n}\nfunction useCloned(source, options = {}) {\n  const cloned = ref({});\n  const {\n    manual,\n    clone = cloneFnJSON,\n    deep = true,\n    immediate = true\n  } = options;\n  function sync() {\n    cloned.value = clone(unref(source));\n  }\n  if (!manual && isRef(source)) {\n    watch(source, sync, __spreadProps$8(__spreadValues$l({}, options), {\n      deep,\n      immediate\n    }));\n  } else {\n    sync();\n  }\n  return { cloned, sync };\n}\n\nconst _global = typeof globalThis !== \"undefined\" ? globalThis : typeof window !== \"undefined\" ? window : typeof global !== \"undefined\" ? global : typeof self !== \"undefined\" ? self : {};\nconst globalKey = \"__vueuse_ssr_handlers__\";\n_global[globalKey] = _global[globalKey] || {};\nconst handlers = _global[globalKey];\nfunction getSSRHandler(key, fallback) {\n  return handlers[key] || fallback;\n}\nfunction setSSRHandler(key, fn) {\n  handlers[key] = fn;\n}\n\nfunction guessSerializerType(rawInit) {\n  return rawInit == null ? \"any\" : rawInit instanceof Set ? \"set\" : rawInit instanceof Map ? \"map\" : rawInit instanceof Date ? \"date\" : typeof rawInit === \"boolean\" ? \"boolean\" : typeof rawInit === \"string\" ? \"string\" : typeof rawInit === \"object\" ? \"object\" : !Number.isNaN(rawInit) ? \"number\" : \"any\";\n}\n\nvar __defProp$k = Object.defineProperty;\nvar __getOwnPropSymbols$m = Object.getOwnPropertySymbols;\nvar __hasOwnProp$m = Object.prototype.hasOwnProperty;\nvar __propIsEnum$m = Object.prototype.propertyIsEnumerable;\nvar __defNormalProp$k = (obj, key, value) => key in obj ? __defProp$k(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;\nvar __spreadValues$k = (a, b) => {\n  for (var prop in b || (b = {}))\n    if (__hasOwnProp$m.call(b, prop))\n      __defNormalProp$k(a, prop, b[prop]);\n  if (__getOwnPropSymbols$m)\n    for (var prop of __getOwnPropSymbols$m(b)) {\n      if (__propIsEnum$m.call(b, prop))\n        __defNormalProp$k(a, prop, b[prop]);\n    }\n  return a;\n};\nconst StorageSerializers = {\n  boolean: {\n    read: (v) => v === \"true\",\n    write: (v) => String(v)\n  },\n  object: {\n    read: (v) => JSON.parse(v),\n    write: (v) => JSON.stringify(v)\n  },\n  number: {\n    read: (v) => Number.parseFloat(v),\n    write: (v) => String(v)\n  },\n  any: {\n    read: (v) => v,\n    write: (v) => String(v)\n  },\n  string: {\n    read: (v) => v,\n    write: (v) => String(v)\n  },\n  map: {\n    read: (v) => new Map(JSON.parse(v)),\n    write: (v) => JSON.stringify(Array.from(v.entries()))\n  },\n  set: {\n    read: (v) => new Set(JSON.parse(v)),\n    write: (v) => JSON.stringify(Array.from(v))\n  },\n  date: {\n    read: (v) => new Date(v),\n    write: (v) => v.toISOString()\n  }\n};\nconst customStorageEventName = \"vueuse-storage\";\nfunction useStorage(key, defaults, storage, options = {}) {\n  var _a;\n  const {\n    flush = \"pre\",\n    deep = true,\n    listenToStorageChanges = true,\n    writeDefaults = true,\n    mergeDefaults = false,\n    shallow,\n    window = defaultWindow,\n    eventFilter,\n    onError = (e) => {\n      console.error(e);\n    }\n  } = options;\n  const data = (shallow ? shallowRef : ref)(defaults);\n  if (!storage) {\n    try {\n      storage = getSSRHandler(\"getDefaultStorage\", () => {\n        var _a2;\n        return (_a2 = defaultWindow) == null ? void 0 : _a2.localStorage;\n      })();\n    } catch (e) {\n      onError(e);\n    }\n  }\n  if (!storage)\n    return data;\n  const rawInit = resolveUnref(defaults);\n  const type = guessSerializerType(rawInit);\n  const serializer = (_a = options.serializer) != null ? _a : StorageSerializers[type];\n  const { pause: pauseWatch, resume: resumeWatch } = pausableWatch(data, () => write(data.value), { flush, deep, eventFilter });\n  if (window && listenToStorageChanges) {\n    useEventListener(window, \"storage\", update);\n    useEventListener(window, customStorageEventName, updateFromCustomEvent);\n  }\n  update();\n  return data;\n  function write(v) {\n    try {\n      if (v == null) {\n        storage.removeItem(key);\n      } else {\n        const serialized = serializer.write(v);\n        const oldValue = storage.getItem(key);\n        if (oldValue !== serialized) {\n          storage.setItem(key, serialized);\n          if (window) {\n            window.dispatchEvent(new CustomEvent(customStorageEventName, {\n              detail: {\n                key,\n                oldValue,\n                newValue: serialized,\n                storageArea: storage\n              }\n            }));\n          }\n        }\n      }\n    } catch (e) {\n      onError(e);\n    }\n  }\n  function read(event) {\n    const rawValue = event ? event.newValue : storage.getItem(key);\n    if (rawValue == null) {\n      if (writeDefaults && rawInit !== null)\n        storage.setItem(key, serializer.write(rawInit));\n      return rawInit;\n    } else if (!event && mergeDefaults) {\n      const value = serializer.read(rawValue);\n      if (isFunction(mergeDefaults))\n        return mergeDefaults(value, rawInit);\n      else if (type === \"object\" && !Array.isArray(value))\n        return __spreadValues$k(__spreadValues$k({}, rawInit), value);\n      return value;\n    } else if (typeof rawValue !== \"string\") {\n      return rawValue;\n    } else {\n      return serializer.read(rawValue);\n    }\n  }\n  function updateFromCustomEvent(event) {\n    update(event.detail);\n  }\n  function update(event) {\n    if (event && event.storageArea !== storage)\n      return;\n    if (event && event.key == null) {\n      data.value = rawInit;\n      return;\n    }\n    if (event && event.key !== key)\n      return;\n    pauseWatch();\n    try {\n      data.value = read(event);\n    } catch (e) {\n      onError(e);\n    } finally {\n      if (event)\n        nextTick(resumeWatch);\n      else\n        resumeWatch();\n    }\n  }\n}\n\nfunction usePreferredDark(options) {\n  return useMediaQuery(\"(prefers-color-scheme: dark)\", options);\n}\n\nvar __defProp$j = Object.defineProperty;\nvar __getOwnPropSymbols$l = Object.getOwnPropertySymbols;\nvar __hasOwnProp$l = Object.prototype.hasOwnProperty;\nvar __propIsEnum$l = Object.prototype.propertyIsEnumerable;\nvar __defNormalProp$j = (obj, key, value) => key in obj ? __defProp$j(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;\nvar __spreadValues$j = (a, b) => {\n  for (var prop in b || (b = {}))\n    if (__hasOwnProp$l.call(b, prop))\n      __defNormalProp$j(a, prop, b[prop]);\n  if (__getOwnPropSymbols$l)\n    for (var prop of __getOwnPropSymbols$l(b)) {\n      if (__propIsEnum$l.call(b, prop))\n        __defNormalProp$j(a, prop, b[prop]);\n    }\n  return a;\n};\nfunction useColorMode(options = {}) {\n  const {\n    selector = \"html\",\n    attribute = \"class\",\n    initialValue = \"auto\",\n    window = defaultWindow,\n    storage,\n    storageKey = \"vueuse-color-scheme\",\n    listenToStorageChanges = true,\n    storageRef,\n    emitAuto\n  } = options;\n  const modes = __spreadValues$j({\n    auto: \"\",\n    light: \"light\",\n    dark: \"dark\"\n  }, options.modes || {});\n  const preferredDark = usePreferredDark({ window });\n  const preferredMode = computed(() => preferredDark.value ? \"dark\" : \"light\");\n  const store = storageRef || (storageKey == null ? ref(initialValue) : useStorage(storageKey, initialValue, storage, { window, listenToStorageChanges }));\n  const state = computed({\n    get() {\n      return store.value === \"auto\" && !emitAuto ? preferredMode.value : store.value;\n    },\n    set(v) {\n      store.value = v;\n    }\n  });\n  const updateHTMLAttrs = getSSRHandler(\"updateHTMLAttrs\", (selector2, attribute2, value) => {\n    const el = window == null ? void 0 : window.document.querySelector(selector2);\n    if (!el)\n      return;\n    if (attribute2 === \"class\") {\n      const current = value.split(/\\s/g);\n      Object.values(modes).flatMap((i) => (i || \"\").split(/\\s/g)).filter(Boolean).forEach((v) => {\n        if (current.includes(v))\n          el.classList.add(v);\n        else\n          el.classList.remove(v);\n      });\n    } else {\n      el.setAttribute(attribute2, value);\n    }\n  });\n  function defaultOnChanged(mode) {\n    var _a;\n    const resolvedMode = mode === \"auto\" ? preferredMode.value : mode;\n    updateHTMLAttrs(selector, attribute, (_a = modes[resolvedMode]) != null ? _a : resolvedMode);\n  }\n  function onChanged(mode) {\n    if (options.onChanged)\n      options.onChanged(mode, defaultOnChanged);\n    else\n      defaultOnChanged(mode);\n  }\n  watch(state, onChanged, { flush: \"post\", immediate: true });\n  if (emitAuto)\n    watch(preferredMode, () => onChanged(state.value), { flush: \"post\" });\n  tryOnMounted(() => onChanged(state.value));\n  return state;\n}\n\nfunction useConfirmDialog(revealed = ref(false)) {\n  const confirmHook = createEventHook();\n  const cancelHook = createEventHook();\n  const revealHook = createEventHook();\n  let _resolve = noop;\n  const reveal = (data) => {\n    revealHook.trigger(data);\n    revealed.value = true;\n    return new Promise((resolve) => {\n      _resolve = resolve;\n    });\n  };\n  const confirm = (data) => {\n    revealed.value = false;\n    confirmHook.trigger(data);\n    _resolve({ data, isCanceled: false });\n  };\n  const cancel = (data) => {\n    revealed.value = false;\n    cancelHook.trigger(data);\n    _resolve({ data, isCanceled: true });\n  };\n  return {\n    isRevealed: computed(() => revealed.value),\n    reveal,\n    confirm,\n    cancel,\n    onReveal: revealHook.on,\n    onConfirm: confirmHook.on,\n    onCancel: cancelHook.on\n  };\n}\n\nfunction useCssVar(prop, target, { window = defaultWindow, initialValue = \"\" } = {}) {\n  const variable = ref(initialValue);\n  const elRef = computed(() => {\n    var _a;\n    return unrefElement(target) || ((_a = window == null ? void 0 : window.document) == null ? void 0 : _a.documentElement);\n  });\n  watch([elRef, () => resolveUnref(prop)], ([el, prop2]) => {\n    var _a;\n    if (el && window) {\n      const value = (_a = window.getComputedStyle(el).getPropertyValue(prop2)) == null ? void 0 : _a.trim();\n      variable.value = value || initialValue;\n    }\n  }, { immediate: true });\n  watch(variable, (val) => {\n    var _a;\n    if ((_a = elRef.value) == null ? void 0 : _a.style)\n      elRef.value.style.setProperty(resolveUnref(prop), val);\n  });\n  return variable;\n}\n\nfunction useCurrentElement() {\n  const vm = getCurrentInstance();\n  const currentElement = computedWithControl(() => null, () => vm.proxy.$el);\n  onUpdated(currentElement.trigger);\n  onMounted(currentElement.trigger);\n  return currentElement;\n}\n\nfunction useCycleList(list, options) {\n  var _a;\n  const state = shallowRef((_a = options == null ? void 0 : options.initialValue) != null ? _a : list[0]);\n  const index = computed({\n    get() {\n      var _a2;\n      let index2 = (options == null ? void 0 : options.getIndexOf) ? options.getIndexOf(state.value, list) : list.indexOf(state.value);\n      if (index2 < 0)\n        index2 = (_a2 = options == null ? void 0 : options.fallbackIndex) != null ? _a2 : 0;\n      return index2;\n    },\n    set(v) {\n      set(v);\n    }\n  });\n  function set(i) {\n    const length = list.length;\n    const index2 = (i % length + length) % length;\n    const value = list[index2];\n    state.value = value;\n    return value;\n  }\n  function shift(delta = 1) {\n    return set(index.value + delta);\n  }\n  function next(n = 1) {\n    return shift(n);\n  }\n  function prev(n = 1) {\n    return shift(-n);\n  }\n  return {\n    state,\n    index,\n    next,\n    prev\n  };\n}\n\nvar __defProp$i = Object.defineProperty;\nvar __defProps$7 = Object.defineProperties;\nvar __getOwnPropDescs$7 = Object.getOwnPropertyDescriptors;\nvar __getOwnPropSymbols$k = Object.getOwnPropertySymbols;\nvar __hasOwnProp$k = Object.prototype.hasOwnProperty;\nvar __propIsEnum$k = Object.prototype.propertyIsEnumerable;\nvar __defNormalProp$i = (obj, key, value) => key in obj ? __defProp$i(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;\nvar __spreadValues$i = (a, b) => {\n  for (var prop in b || (b = {}))\n    if (__hasOwnProp$k.call(b, prop))\n      __defNormalProp$i(a, prop, b[prop]);\n  if (__getOwnPropSymbols$k)\n    for (var prop of __getOwnPropSymbols$k(b)) {\n      if (__propIsEnum$k.call(b, prop))\n        __defNormalProp$i(a, prop, b[prop]);\n    }\n  return a;\n};\nvar __spreadProps$7 = (a, b) => __defProps$7(a, __getOwnPropDescs$7(b));\nfunction useDark(options = {}) {\n  const {\n    valueDark = \"dark\",\n    valueLight = \"\",\n    window = defaultWindow\n  } = options;\n  const mode = useColorMode(__spreadProps$7(__spreadValues$i({}, options), {\n    onChanged: (mode2, defaultHandler) => {\n      var _a;\n      if (options.onChanged)\n        (_a = options.onChanged) == null ? void 0 : _a.call(options, mode2 === \"dark\");\n      else\n        defaultHandler(mode2);\n    },\n    modes: {\n      dark: valueDark,\n      light: valueLight\n    }\n  }));\n  const preferredDark = usePreferredDark({ window });\n  const isDark = computed({\n    get() {\n      return mode.value === \"dark\";\n    },\n    set(v) {\n      if (v === preferredDark.value)\n        mode.value = \"auto\";\n      else\n        mode.value = v ? \"dark\" : \"light\";\n    }\n  });\n  return isDark;\n}\n\nconst fnBypass = (v) => v;\nconst fnSetSource = (source, value) => source.value = value;\nfunction defaultDump(clone) {\n  return clone ? isFunction(clone) ? clone : cloneFnJSON : fnBypass;\n}\nfunction defaultParse(clone) {\n  return clone ? isFunction(clone) ? clone : cloneFnJSON : fnBypass;\n}\nfunction useManualRefHistory(source, options = {}) {\n  const {\n    clone = false,\n    dump = defaultDump(clone),\n    parse = defaultParse(clone),\n    setSource = fnSetSource\n  } = options;\n  function _createHistoryRecord() {\n    return markRaw({\n      snapshot: dump(source.value),\n      timestamp: timestamp()\n    });\n  }\n  const last = ref(_createHistoryRecord());\n  const undoStack = ref([]);\n  const redoStack = ref([]);\n  const _setSource = (record) => {\n    setSource(source, parse(record.snapshot));\n    last.value = record;\n  };\n  const commit = () => {\n    undoStack.value.unshift(last.value);\n    last.value = _createHistoryRecord();\n    if (options.capacity && undoStack.value.length > options.capacity)\n      undoStack.value.splice(options.capacity, Infinity);\n    if (redoStack.value.length)\n      redoStack.value.splice(0, redoStack.value.length);\n  };\n  const clear = () => {\n    undoStack.value.splice(0, undoStack.value.length);\n    redoStack.value.splice(0, redoStack.value.length);\n  };\n  const undo = () => {\n    const state = undoStack.value.shift();\n    if (state) {\n      redoStack.value.unshift(last.value);\n      _setSource(state);\n    }\n  };\n  const redo = () => {\n    const state = redoStack.value.shift();\n    if (state) {\n      undoStack.value.unshift(last.value);\n      _setSource(state);\n    }\n  };\n  const reset = () => {\n    _setSource(last.value);\n  };\n  const history = computed(() => [last.value, ...undoStack.value]);\n  const canUndo = computed(() => undoStack.value.length > 0);\n  const canRedo = computed(() => redoStack.value.length > 0);\n  return {\n    source,\n    undoStack,\n    redoStack,\n    last,\n    history,\n    canUndo,\n    canRedo,\n    clear,\n    commit,\n    reset,\n    undo,\n    redo\n  };\n}\n\nvar __defProp$h = Object.defineProperty;\nvar __defProps$6 = Object.defineProperties;\nvar __getOwnPropDescs$6 = Object.getOwnPropertyDescriptors;\nvar __getOwnPropSymbols$j = Object.getOwnPropertySymbols;\nvar __hasOwnProp$j = Object.prototype.hasOwnProperty;\nvar __propIsEnum$j = Object.prototype.propertyIsEnumerable;\nvar __defNormalProp$h = (obj, key, value) => key in obj ? __defProp$h(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;\nvar __spreadValues$h = (a, b) => {\n  for (var prop in b || (b = {}))\n    if (__hasOwnProp$j.call(b, prop))\n      __defNormalProp$h(a, prop, b[prop]);\n  if (__getOwnPropSymbols$j)\n    for (var prop of __getOwnPropSymbols$j(b)) {\n      if (__propIsEnum$j.call(b, prop))\n        __defNormalProp$h(a, prop, b[prop]);\n    }\n  return a;\n};\nvar __spreadProps$6 = (a, b) => __defProps$6(a, __getOwnPropDescs$6(b));\nfunction useRefHistory(source, options = {}) {\n  const {\n    deep = false,\n    flush = \"pre\",\n    eventFilter\n  } = options;\n  const {\n    eventFilter: composedFilter,\n    pause,\n    resume: resumeTracking,\n    isActive: isTracking\n  } = pausableFilter(eventFilter);\n  const {\n    ignoreUpdates,\n    ignorePrevAsyncUpdates,\n    stop\n  } = watchIgnorable(source, commit, { deep, flush, eventFilter: composedFilter });\n  function setSource(source2, value) {\n    ignorePrevAsyncUpdates();\n    ignoreUpdates(() => {\n      source2.value = value;\n    });\n  }\n  const manualHistory = useManualRefHistory(source, __spreadProps$6(__spreadValues$h({}, options), { clone: options.clone || deep, setSource }));\n  const { clear, commit: manualCommit } = manualHistory;\n  function commit() {\n    ignorePrevAsyncUpdates();\n    manualCommit();\n  }\n  function resume(commitNow) {\n    resumeTracking();\n    if (commitNow)\n      commit();\n  }\n  function batch(fn) {\n    let canceled = false;\n    const cancel = () => canceled = true;\n    ignoreUpdates(() => {\n      fn(cancel);\n    });\n    if (!canceled)\n      commit();\n  }\n  function dispose() {\n    stop();\n    clear();\n  }\n  return __spreadProps$6(__spreadValues$h({}, manualHistory), {\n    isTracking,\n    pause,\n    resume,\n    commit,\n    batch,\n    dispose\n  });\n}\n\nvar __defProp$g = Object.defineProperty;\nvar __defProps$5 = Object.defineProperties;\nvar __getOwnPropDescs$5 = Object.getOwnPropertyDescriptors;\nvar __getOwnPropSymbols$i = Object.getOwnPropertySymbols;\nvar __hasOwnProp$i = Object.prototype.hasOwnProperty;\nvar __propIsEnum$i = Object.prototype.propertyIsEnumerable;\nvar __defNormalProp$g = (obj, key, value) => key in obj ? __defProp$g(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;\nvar __spreadValues$g = (a, b) => {\n  for (var prop in b || (b = {}))\n    if (__hasOwnProp$i.call(b, prop))\n      __defNormalProp$g(a, prop, b[prop]);\n  if (__getOwnPropSymbols$i)\n    for (var prop of __getOwnPropSymbols$i(b)) {\n      if (__propIsEnum$i.call(b, prop))\n        __defNormalProp$g(a, prop, b[prop]);\n    }\n  return a;\n};\nvar __spreadProps$5 = (a, b) => __defProps$5(a, __getOwnPropDescs$5(b));\nfunction useDebouncedRefHistory(source, options = {}) {\n  const filter = options.debounce ? debounceFilter(options.debounce) : void 0;\n  const history = useRefHistory(source, __spreadProps$5(__spreadValues$g({}, options), { eventFilter: filter }));\n  return __spreadValues$g({}, history);\n}\n\nfunction useDeviceMotion(options = {}) {\n  const {\n    window = defaultWindow,\n    eventFilter = bypassFilter\n  } = options;\n  const acceleration = ref({ x: null, y: null, z: null });\n  const rotationRate = ref({ alpha: null, beta: null, gamma: null });\n  const interval = ref(0);\n  const accelerationIncludingGravity = ref({\n    x: null,\n    y: null,\n    z: null\n  });\n  if (window) {\n    const onDeviceMotion = createFilterWrapper(eventFilter, (event) => {\n      acceleration.value = event.acceleration;\n      accelerationIncludingGravity.value = event.accelerationIncludingGravity;\n      rotationRate.value = event.rotationRate;\n      interval.value = event.interval;\n    });\n    useEventListener(window, \"devicemotion\", onDeviceMotion);\n  }\n  return {\n    acceleration,\n    accelerationIncludingGravity,\n    rotationRate,\n    interval\n  };\n}\n\nfunction useDeviceOrientation(options = {}) {\n  const { window = defaultWindow } = options;\n  const isSupported = useSupported(() => window && \"DeviceOrientationEvent\" in window);\n  const isAbsolute = ref(false);\n  const alpha = ref(null);\n  const beta = ref(null);\n  const gamma = ref(null);\n  if (window && isSupported.value) {\n    useEventListener(window, \"deviceorientation\", (event) => {\n      isAbsolute.value = event.absolute;\n      alpha.value = event.alpha;\n      beta.value = event.beta;\n      gamma.value = event.gamma;\n    });\n  }\n  return {\n    isSupported,\n    isAbsolute,\n    alpha,\n    beta,\n    gamma\n  };\n}\n\nfunction useDevicePixelRatio({\n  window = defaultWindow\n} = {}) {\n  const pixelRatio = ref(1);\n  if (window) {\n    let observe = function() {\n      pixelRatio.value = window.devicePixelRatio;\n      cleanup();\n      media = window.matchMedia(`(resolution: ${pixelRatio.value}dppx)`);\n      media.addEventListener(\"change\", observe, { once: true });\n    }, cleanup = function() {\n      media == null ? void 0 : media.removeEventListener(\"change\", observe);\n    };\n    let media;\n    observe();\n    tryOnScopeDispose(cleanup);\n  }\n  return { pixelRatio };\n}\n\nfunction usePermission(permissionDesc, options = {}) {\n  const {\n    controls = false,\n    navigator = defaultNavigator\n  } = options;\n  const isSupported = useSupported(() => navigator && \"permissions\" in navigator);\n  let permissionStatus;\n  const desc = typeof permissionDesc === \"string\" ? { name: permissionDesc } : permissionDesc;\n  const state = ref();\n  const onChange = () => {\n    if (permissionStatus)\n      state.value = permissionStatus.state;\n  };\n  const query = createSingletonPromise(async () => {\n    if (!isSupported.value)\n      return;\n    if (!permissionStatus) {\n      try {\n        permissionStatus = await navigator.permissions.query(desc);\n        useEventListener(permissionStatus, \"change\", onChange);\n        onChange();\n      } catch (e) {\n        state.value = \"prompt\";\n      }\n    }\n    return permissionStatus;\n  });\n  query();\n  if (controls) {\n    return {\n      state,\n      isSupported,\n      query\n    };\n  } else {\n    return state;\n  }\n}\n\nfunction useDevicesList(options = {}) {\n  const {\n    navigator = defaultNavigator,\n    requestPermissions = false,\n    constraints = { audio: true, video: true },\n    onUpdated\n  } = options;\n  const devices = ref([]);\n  const videoInputs = computed(() => devices.value.filter((i) => i.kind === \"videoinput\"));\n  const audioInputs = computed(() => devices.value.filter((i) => i.kind === \"audioinput\"));\n  const audioOutputs = computed(() => devices.value.filter((i) => i.kind === \"audiooutput\"));\n  const isSupported = useSupported(() => navigator && navigator.mediaDevices && navigator.mediaDevices.enumerateDevices);\n  const permissionGranted = ref(false);\n  async function update() {\n    if (!isSupported.value)\n      return;\n    devices.value = await navigator.mediaDevices.enumerateDevices();\n    onUpdated == null ? void 0 : onUpdated(devices.value);\n  }\n  async function ensurePermissions() {\n    if (!isSupported.value)\n      return false;\n    if (permissionGranted.value)\n      return true;\n    const { state, query } = usePermission(\"camera\", { controls: true });\n    await query();\n    if (state.value !== \"granted\") {\n      const stream = await navigator.mediaDevices.getUserMedia(constraints);\n      stream.getTracks().forEach((t) => t.stop());\n      update();\n      permissionGranted.value = true;\n    } else {\n      permissionGranted.value = true;\n    }\n    return permissionGranted.value;\n  }\n  if (isSupported.value) {\n    if (requestPermissions)\n      ensurePermissions();\n    useEventListener(navigator.mediaDevices, \"devicechange\", update);\n    update();\n  }\n  return {\n    devices,\n    ensurePermissions,\n    permissionGranted,\n    videoInputs,\n    audioInputs,\n    audioOutputs,\n    isSupported\n  };\n}\n\nfunction useDisplayMedia(options = {}) {\n  var _a;\n  const enabled = ref((_a = options.enabled) != null ? _a : false);\n  const video = options.video;\n  const audio = options.audio;\n  const { navigator = defaultNavigator } = options;\n  const isSupported = useSupported(() => {\n    var _a2;\n    return (_a2 = navigator == null ? void 0 : navigator.mediaDevices) == null ? void 0 : _a2.getDisplayMedia;\n  });\n  const constraint = { audio, video };\n  const stream = shallowRef();\n  async function _start() {\n    if (!isSupported.value || stream.value)\n      return;\n    stream.value = await navigator.mediaDevices.getDisplayMedia(constraint);\n    return stream.value;\n  }\n  async function _stop() {\n    var _a2;\n    (_a2 = stream.value) == null ? void 0 : _a2.getTracks().forEach((t) => t.stop());\n    stream.value = void 0;\n  }\n  function stop() {\n    _stop();\n    enabled.value = false;\n  }\n  async function start() {\n    await _start();\n    if (stream.value)\n      enabled.value = true;\n    return stream.value;\n  }\n  watch(enabled, (v) => {\n    if (v)\n      _start();\n    else\n      _stop();\n  }, { immediate: true });\n  return {\n    isSupported,\n    stream,\n    start,\n    stop,\n    enabled\n  };\n}\n\nfunction useDocumentVisibility({ document = defaultDocument } = {}) {\n  if (!document)\n    return ref(\"visible\");\n  const visibility = ref(document.visibilityState);\n  useEventListener(document, \"visibilitychange\", () => {\n    visibility.value = document.visibilityState;\n  });\n  return visibility;\n}\n\nvar __defProp$f = Object.defineProperty;\nvar __defProps$4 = Object.defineProperties;\nvar __getOwnPropDescs$4 = Object.getOwnPropertyDescriptors;\nvar __getOwnPropSymbols$h = Object.getOwnPropertySymbols;\nvar __hasOwnProp$h = Object.prototype.hasOwnProperty;\nvar __propIsEnum$h = Object.prototype.propertyIsEnumerable;\nvar __defNormalProp$f = (obj, key, value) => key in obj ? __defProp$f(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;\nvar __spreadValues$f = (a, b) => {\n  for (var prop in b || (b = {}))\n    if (__hasOwnProp$h.call(b, prop))\n      __defNormalProp$f(a, prop, b[prop]);\n  if (__getOwnPropSymbols$h)\n    for (var prop of __getOwnPropSymbols$h(b)) {\n      if (__propIsEnum$h.call(b, prop))\n        __defNormalProp$f(a, prop, b[prop]);\n    }\n  return a;\n};\nvar __spreadProps$4 = (a, b) => __defProps$4(a, __getOwnPropDescs$4(b));\nfunction useDraggable(target, options = {}) {\n  var _a, _b, _c;\n  const draggingElement = (_a = options.draggingElement) != null ? _a : defaultWindow;\n  const draggingHandle = (_b = options.handle) != null ? _b : target;\n  const position = ref((_c = resolveUnref(options.initialValue)) != null ? _c : { x: 0, y: 0 });\n  const pressedDelta = ref();\n  const filterEvent = (e) => {\n    if (options.pointerTypes)\n      return options.pointerTypes.includes(e.pointerType);\n    return true;\n  };\n  const handleEvent = (e) => {\n    if (resolveUnref(options.preventDefault))\n      e.preventDefault();\n    if (resolveUnref(options.stopPropagation))\n      e.stopPropagation();\n  };\n  const start = (e) => {\n    var _a2;\n    if (!filterEvent(e))\n      return;\n    if (resolveUnref(options.exact) && e.target !== resolveUnref(target))\n      return;\n    const rect = resolveUnref(target).getBoundingClientRect();\n    const pos = {\n      x: e.clientX - rect.left,\n      y: e.clientY - rect.top\n    };\n    if (((_a2 = options.onStart) == null ? void 0 : _a2.call(options, pos, e)) === false)\n      return;\n    pressedDelta.value = pos;\n    handleEvent(e);\n  };\n  const move = (e) => {\n    var _a2;\n    if (!filterEvent(e))\n      return;\n    if (!pressedDelta.value)\n      return;\n    position.value = {\n      x: e.clientX - pressedDelta.value.x,\n      y: e.clientY - pressedDelta.value.y\n    };\n    (_a2 = options.onMove) == null ? void 0 : _a2.call(options, position.value, e);\n    handleEvent(e);\n  };\n  const end = (e) => {\n    var _a2;\n    if (!filterEvent(e))\n      return;\n    if (!pressedDelta.value)\n      return;\n    pressedDelta.value = void 0;\n    (_a2 = options.onEnd) == null ? void 0 : _a2.call(options, position.value, e);\n    handleEvent(e);\n  };\n  if (isClient) {\n    useEventListener(draggingHandle, \"pointerdown\", start, true);\n    useEventListener(draggingElement, \"pointermove\", move, true);\n    useEventListener(draggingElement, \"pointerup\", end, true);\n  }\n  return __spreadProps$4(__spreadValues$f({}, toRefs(position)), {\n    position,\n    isDragging: computed(() => !!pressedDelta.value),\n    style: computed(() => `left:${position.value.x}px;top:${position.value.y}px;`)\n  });\n}\n\nfunction useDropZone(target, onDrop) {\n  const isOverDropZone = ref(false);\n  let counter = 0;\n  if (isClient) {\n    useEventListener(target, \"dragenter\", (event) => {\n      event.preventDefault();\n      counter += 1;\n      isOverDropZone.value = true;\n    });\n    useEventListener(target, \"dragover\", (event) => {\n      event.preventDefault();\n    });\n    useEventListener(target, \"dragleave\", (event) => {\n      event.preventDefault();\n      counter -= 1;\n      if (counter === 0)\n        isOverDropZone.value = false;\n    });\n    useEventListener(target, \"drop\", (event) => {\n      var _a, _b;\n      event.preventDefault();\n      counter = 0;\n      isOverDropZone.value = false;\n      const files = Array.from((_b = (_a = event.dataTransfer) == null ? void 0 : _a.files) != null ? _b : []);\n      onDrop == null ? void 0 : onDrop(files.length === 0 ? null : files);\n    });\n  }\n  return {\n    isOverDropZone\n  };\n}\n\nvar __getOwnPropSymbols$g = Object.getOwnPropertySymbols;\nvar __hasOwnProp$g = Object.prototype.hasOwnProperty;\nvar __propIsEnum$g = Object.prototype.propertyIsEnumerable;\nvar __objRest$2 = (source, exclude) => {\n  var target = {};\n  for (var prop in source)\n    if (__hasOwnProp$g.call(source, prop) && exclude.indexOf(prop) < 0)\n      target[prop] = source[prop];\n  if (source != null && __getOwnPropSymbols$g)\n    for (var prop of __getOwnPropSymbols$g(source)) {\n      if (exclude.indexOf(prop) < 0 && __propIsEnum$g.call(source, prop))\n        target[prop] = source[prop];\n    }\n  return target;\n};\nfunction useResizeObserver(target, callback, options = {}) {\n  const _a = options, { window = defaultWindow } = _a, observerOptions = __objRest$2(_a, [\"window\"]);\n  let observer;\n  const isSupported = useSupported(() => window && \"ResizeObserver\" in window);\n  const cleanup = () => {\n    if (observer) {\n      observer.disconnect();\n      observer = void 0;\n    }\n  };\n  const stopWatch = watch(() => unrefElement(target), (el) => {\n    cleanup();\n    if (isSupported.value && window && el) {\n      observer = new ResizeObserver(callback);\n      observer.observe(el, observerOptions);\n    }\n  }, { immediate: true, flush: \"post\" });\n  const stop = () => {\n    cleanup();\n    stopWatch();\n  };\n  tryOnScopeDispose(stop);\n  return {\n    isSupported,\n    stop\n  };\n}\n\nfunction useElementBounding(target, options = {}) {\n  const {\n    reset = true,\n    windowResize = true,\n    windowScroll = true,\n    immediate = true\n  } = options;\n  const height = ref(0);\n  const bottom = ref(0);\n  const left = ref(0);\n  const right = ref(0);\n  const top = ref(0);\n  const width = ref(0);\n  const x = ref(0);\n  const y = ref(0);\n  function update() {\n    const el = unrefElement(target);\n    if (!el) {\n      if (reset) {\n        height.value = 0;\n        bottom.value = 0;\n        left.value = 0;\n        right.value = 0;\n        top.value = 0;\n        width.value = 0;\n        x.value = 0;\n        y.value = 0;\n      }\n      return;\n    }\n    const rect = el.getBoundingClientRect();\n    height.value = rect.height;\n    bottom.value = rect.bottom;\n    left.value = rect.left;\n    right.value = rect.right;\n    top.value = rect.top;\n    width.value = rect.width;\n    x.value = rect.x;\n    y.value = rect.y;\n  }\n  useResizeObserver(target, update);\n  watch(() => unrefElement(target), (ele) => !ele && update());\n  if (windowScroll)\n    useEventListener(\"scroll\", update, { capture: true, passive: true });\n  if (windowResize)\n    useEventListener(\"resize\", update, { passive: true });\n  tryOnMounted(() => {\n    if (immediate)\n      update();\n  });\n  return {\n    height,\n    bottom,\n    left,\n    right,\n    top,\n    width,\n    x,\n    y,\n    update\n  };\n}\n\nfunction useRafFn(fn, options = {}) {\n  const {\n    immediate = true,\n    window = defaultWindow\n  } = options;\n  const isActive = ref(false);\n  let previousFrameTimestamp = 0;\n  let rafId = null;\n  function loop(timestamp) {\n    if (!isActive.value || !window)\n      return;\n    const delta = timestamp - previousFrameTimestamp;\n    fn({ delta, timestamp });\n    previousFrameTimestamp = timestamp;\n    rafId = window.requestAnimationFrame(loop);\n  }\n  function resume() {\n    if (!isActive.value && window) {\n      isActive.value = true;\n      rafId = window.requestAnimationFrame(loop);\n    }\n  }\n  function pause() {\n    isActive.value = false;\n    if (rafId != null && window) {\n      window.cancelAnimationFrame(rafId);\n      rafId = null;\n    }\n  }\n  if (immediate)\n    resume();\n  tryOnScopeDispose(pause);\n  return {\n    isActive: readonly(isActive),\n    pause,\n    resume\n  };\n}\n\nvar __defProp$e = Object.defineProperty;\nvar __getOwnPropSymbols$f = Object.getOwnPropertySymbols;\nvar __hasOwnProp$f = Object.prototype.hasOwnProperty;\nvar __propIsEnum$f = Object.prototype.propertyIsEnumerable;\nvar __defNormalProp$e = (obj, key, value) => key in obj ? __defProp$e(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;\nvar __spreadValues$e = (a, b) => {\n  for (var prop in b || (b = {}))\n    if (__hasOwnProp$f.call(b, prop))\n      __defNormalProp$e(a, prop, b[prop]);\n  if (__getOwnPropSymbols$f)\n    for (var prop of __getOwnPropSymbols$f(b)) {\n      if (__propIsEnum$f.call(b, prop))\n        __defNormalProp$e(a, prop, b[prop]);\n    }\n  return a;\n};\nfunction useElementByPoint(options) {\n  const element = ref(null);\n  const { x, y, document = defaultDocument } = options;\n  const controls = useRafFn(() => {\n    element.value = (document == null ? void 0 : document.elementFromPoint(resolveUnref(x), resolveUnref(y))) || null;\n  });\n  return __spreadValues$e({\n    element\n  }, controls);\n}\n\nfunction useElementHover(el, options = {}) {\n  const delayEnter = options ? options.delayEnter : 0;\n  const delayLeave = options ? options.delayLeave : 0;\n  const isHovered = ref(false);\n  let timer;\n  const toggle = (entering) => {\n    const delay = entering ? delayEnter : delayLeave;\n    if (timer) {\n      clearTimeout(timer);\n      timer = void 0;\n    }\n    if (delay)\n      timer = setTimeout(() => isHovered.value = entering, delay);\n    else\n      isHovered.value = entering;\n  };\n  if (!window)\n    return isHovered;\n  useEventListener(el, \"mouseenter\", () => toggle(true), { passive: true });\n  useEventListener(el, \"mouseleave\", () => toggle(false), { passive: true });\n  return isHovered;\n}\n\nfunction useElementSize(target, initialSize = { width: 0, height: 0 }, options = {}) {\n  const { window = defaultWindow, box = \"content-box\" } = options;\n  const isSVG = computed(() => {\n    var _a, _b;\n    return (_b = (_a = unrefElement(target)) == null ? void 0 : _a.namespaceURI) == null ? void 0 : _b.includes(\"svg\");\n  });\n  const width = ref(initialSize.width);\n  const height = ref(initialSize.height);\n  useResizeObserver(target, ([entry]) => {\n    const boxSize = box === \"border-box\" ? entry.borderBoxSize : box === \"content-box\" ? entry.contentBoxSize : entry.devicePixelContentBoxSize;\n    if (window && isSVG.value) {\n      const $elem = unrefElement(target);\n      if ($elem) {\n        const styles = window.getComputedStyle($elem);\n        width.value = parseFloat(styles.width);\n        height.value = parseFloat(styles.height);\n      }\n    } else {\n      if (boxSize) {\n        const formatBoxSize = Array.isArray(boxSize) ? boxSize : [boxSize];\n        width.value = formatBoxSize.reduce((acc, { inlineSize }) => acc + inlineSize, 0);\n        height.value = formatBoxSize.reduce((acc, { blockSize }) => acc + blockSize, 0);\n      } else {\n        width.value = entry.contentRect.width;\n        height.value = entry.contentRect.height;\n      }\n    }\n  }, options);\n  watch(() => unrefElement(target), (ele) => {\n    width.value = ele ? initialSize.width : 0;\n    height.value = ele ? initialSize.height : 0;\n  });\n  return {\n    width,\n    height\n  };\n}\n\nfunction useElementVisibility(element, { window = defaultWindow, scrollTarget } = {}) {\n  const elementIsVisible = ref(false);\n  const testBounding = () => {\n    if (!window)\n      return;\n    const document = window.document;\n    const el = unrefElement(element);\n    if (!el) {\n      elementIsVisible.value = false;\n    } else {\n      const rect = el.getBoundingClientRect();\n      elementIsVisible.value = rect.top <= (window.innerHeight || document.documentElement.clientHeight) && rect.left <= (window.innerWidth || document.documentElement.clientWidth) && rect.bottom >= 0 && rect.right >= 0;\n    }\n  };\n  watch(() => unrefElement(element), () => testBounding(), { immediate: true, flush: \"post\" });\n  if (window) {\n    useEventListener(scrollTarget || window, \"scroll\", testBounding, {\n      capture: false,\n      passive: true\n    });\n  }\n  return elementIsVisible;\n}\n\nconst events = new Map();\n\nfunction useEventBus(key) {\n  const scope = getCurrentScope();\n  function on(listener) {\n    var _a;\n    const listeners = events.get(key) || [];\n    listeners.push(listener);\n    events.set(key, listeners);\n    const _off = () => off(listener);\n    (_a = scope == null ? void 0 : scope.cleanups) == null ? void 0 : _a.push(_off);\n    return _off;\n  }\n  function once(listener) {\n    function _listener(...args) {\n      off(_listener);\n      listener(...args);\n    }\n    return on(_listener);\n  }\n  function off(listener) {\n    const listeners = events.get(key);\n    if (!listeners)\n      return;\n    const index = listeners.indexOf(listener);\n    if (index > -1)\n      listeners.splice(index, 1);\n    if (!listeners.length)\n      events.delete(key);\n  }\n  function reset() {\n    events.delete(key);\n  }\n  function emit(event, payload) {\n    var _a;\n    (_a = events.get(key)) == null ? void 0 : _a.forEach((v) => v(event, payload));\n  }\n  return { on, once, off, emit, reset };\n}\n\nfunction useEventSource(url, events = [], options = {}) {\n  const event = ref(null);\n  const data = ref(null);\n  const status = ref(\"CONNECTING\");\n  const eventSource = ref(null);\n  const error = ref(null);\n  const {\n    withCredentials = false\n  } = options;\n  const close = () => {\n    if (eventSource.value) {\n      eventSource.value.close();\n      eventSource.value = null;\n      status.value = \"CLOSED\";\n    }\n  };\n  const es = new EventSource(url, { withCredentials });\n  eventSource.value = es;\n  es.onopen = () => {\n    status.value = \"OPEN\";\n    error.value = null;\n  };\n  es.onerror = (e) => {\n    status.value = \"CLOSED\";\n    error.value = e;\n  };\n  es.onmessage = (e) => {\n    event.value = null;\n    data.value = e.data;\n  };\n  for (const event_name of events) {\n    useEventListener(es, event_name, (e) => {\n      event.value = event_name;\n      data.value = e.data || null;\n    });\n  }\n  tryOnScopeDispose(() => {\n    close();\n  });\n  return {\n    eventSource,\n    event,\n    data,\n    status,\n    error,\n    close\n  };\n}\n\nfunction useEyeDropper(options = {}) {\n  const { initialValue = \"\" } = options;\n  const isSupported = useSupported(() => typeof window !== \"undefined\" && \"EyeDropper\" in window);\n  const sRGBHex = ref(initialValue);\n  async function open(openOptions) {\n    if (!isSupported.value)\n      return;\n    const eyeDropper = new window.EyeDropper();\n    const result = await eyeDropper.open(openOptions);\n    sRGBHex.value = result.sRGBHex;\n    return result;\n  }\n  return { isSupported, sRGBHex, open };\n}\n\nfunction useFavicon(newIcon = null, options = {}) {\n  const {\n    baseUrl = \"\",\n    rel = \"icon\",\n    document = defaultDocument\n  } = options;\n  const favicon = resolveRef(newIcon);\n  const applyIcon = (icon) => {\n    document == null ? void 0 : document.head.querySelectorAll(`link[rel*=\"${rel}\"]`).forEach((el) => el.href = `${baseUrl}${icon}`);\n  };\n  watch(favicon, (i, o) => {\n    if (isString(i) && i !== o)\n      applyIcon(i);\n  }, { immediate: true });\n  return favicon;\n}\n\nvar __defProp$d = Object.defineProperty;\nvar __defProps$3 = Object.defineProperties;\nvar __getOwnPropDescs$3 = Object.getOwnPropertyDescriptors;\nvar __getOwnPropSymbols$e = Object.getOwnPropertySymbols;\nvar __hasOwnProp$e = Object.prototype.hasOwnProperty;\nvar __propIsEnum$e = Object.prototype.propertyIsEnumerable;\nvar __defNormalProp$d = (obj, key, value) => key in obj ? __defProp$d(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;\nvar __spreadValues$d = (a, b) => {\n  for (var prop in b || (b = {}))\n    if (__hasOwnProp$e.call(b, prop))\n      __defNormalProp$d(a, prop, b[prop]);\n  if (__getOwnPropSymbols$e)\n    for (var prop of __getOwnPropSymbols$e(b)) {\n      if (__propIsEnum$e.call(b, prop))\n        __defNormalProp$d(a, prop, b[prop]);\n    }\n  return a;\n};\nvar __spreadProps$3 = (a, b) => __defProps$3(a, __getOwnPropDescs$3(b));\nconst payloadMapping = {\n  json: \"application/json\",\n  text: \"text/plain\"\n};\nfunction isFetchOptions(obj) {\n  return obj && containsProp(obj, \"immediate\", \"refetch\", \"initialData\", \"timeout\", \"beforeFetch\", \"afterFetch\", \"onFetchError\", \"fetch\");\n}\nfunction isAbsoluteURL(url) {\n  return /^([a-z][a-z\\d+\\-.]*:)?\\/\\//i.test(url);\n}\nfunction headersToObject(headers) {\n  if (typeof Headers !== \"undefined\" && headers instanceof Headers)\n    return Object.fromEntries([...headers.entries()]);\n  return headers;\n}\nfunction combineCallbacks(combination, ...callbacks) {\n  if (combination === \"overwrite\") {\n    return async (ctx) => {\n      const callback = callbacks[callbacks.length - 1];\n      if (callback !== void 0)\n        await callback(ctx);\n      return ctx;\n    };\n  } else {\n    return async (ctx) => {\n      await callbacks.reduce((prevCallback, callback) => prevCallback.then(async () => {\n        if (callback)\n          ctx = __spreadValues$d(__spreadValues$d({}, ctx), await callback(ctx));\n      }), Promise.resolve());\n      return ctx;\n    };\n  }\n}\nfunction createFetch(config = {}) {\n  const _combination = config.combination || \"chain\";\n  const _options = config.options || {};\n  const _fetchOptions = config.fetchOptions || {};\n  function useFactoryFetch(url, ...args) {\n    const computedUrl = computed(() => {\n      const baseUrl = resolveUnref(config.baseUrl);\n      const targetUrl = resolveUnref(url);\n      return baseUrl && !isAbsoluteURL(targetUrl) ? joinPaths(baseUrl, targetUrl) : targetUrl;\n    });\n    let options = _options;\n    let fetchOptions = _fetchOptions;\n    if (args.length > 0) {\n      if (isFetchOptions(args[0])) {\n        options = __spreadProps$3(__spreadValues$d(__spreadValues$d({}, options), args[0]), {\n          beforeFetch: combineCallbacks(_combination, _options.beforeFetch, args[0].beforeFetch),\n          afterFetch: combineCallbacks(_combination, _options.afterFetch, args[0].afterFetch),\n          onFetchError: combineCallbacks(_combination, _options.onFetchError, args[0].onFetchError)\n        });\n      } else {\n        fetchOptions = __spreadProps$3(__spreadValues$d(__spreadValues$d({}, fetchOptions), args[0]), {\n          headers: __spreadValues$d(__spreadValues$d({}, headersToObject(fetchOptions.headers) || {}), headersToObject(args[0].headers) || {})\n        });\n      }\n    }\n    if (args.length > 1 && isFetchOptions(args[1])) {\n      options = __spreadProps$3(__spreadValues$d(__spreadValues$d({}, options), args[1]), {\n        beforeFetch: combineCallbacks(_combination, _options.beforeFetch, args[1].beforeFetch),\n        afterFetch: combineCallbacks(_combination, _options.afterFetch, args[1].afterFetch),\n        onFetchError: combineCallbacks(_combination, _options.onFetchError, args[1].onFetchError)\n      });\n    }\n    return useFetch(computedUrl, fetchOptions, options);\n  }\n  return useFactoryFetch;\n}\nfunction useFetch(url, ...args) {\n  var _a;\n  const supportsAbort = typeof AbortController === \"function\";\n  let fetchOptions = {};\n  let options = { immediate: true, refetch: false, timeout: 0 };\n  const config = {\n    method: \"GET\",\n    type: \"text\",\n    payload: void 0\n  };\n  if (args.length > 0) {\n    if (isFetchOptions(args[0]))\n      options = __spreadValues$d(__spreadValues$d({}, options), args[0]);\n    else\n      fetchOptions = args[0];\n  }\n  if (args.length > 1) {\n    if (isFetchOptions(args[1]))\n      options = __spreadValues$d(__spreadValues$d({}, options), args[1]);\n  }\n  const {\n    fetch = (_a = defaultWindow) == null ? void 0 : _a.fetch,\n    initialData,\n    timeout\n  } = options;\n  const responseEvent = createEventHook();\n  const errorEvent = createEventHook();\n  const finallyEvent = createEventHook();\n  const isFinished = ref(false);\n  const isFetching = ref(false);\n  const aborted = ref(false);\n  const statusCode = ref(null);\n  const response = shallowRef(null);\n  const error = shallowRef(null);\n  const data = shallowRef(initialData);\n  const canAbort = computed(() => supportsAbort && isFetching.value);\n  let controller;\n  let timer;\n  const abort = () => {\n    if (supportsAbort && controller) {\n      controller.abort();\n      controller = void 0;\n    }\n  };\n  const loading = (isLoading) => {\n    isFetching.value = isLoading;\n    isFinished.value = !isLoading;\n  };\n  if (timeout)\n    timer = useTimeoutFn(abort, timeout, { immediate: false });\n  const execute = async (throwOnFailed = false) => {\n    var _a2;\n    loading(true);\n    error.value = null;\n    statusCode.value = null;\n    aborted.value = false;\n    if (supportsAbort) {\n      abort();\n      controller = new AbortController();\n      controller.signal.onabort = () => aborted.value = true;\n      fetchOptions = __spreadProps$3(__spreadValues$d({}, fetchOptions), {\n        signal: controller.signal\n      });\n    }\n    const defaultFetchOptions = {\n      method: config.method,\n      headers: {}\n    };\n    if (config.payload) {\n      const headers = headersToObject(defaultFetchOptions.headers);\n      if (config.payloadType)\n        headers[\"Content-Type\"] = (_a2 = payloadMapping[config.payloadType]) != null ? _a2 : config.payloadType;\n      const payload = resolveUnref(config.payload);\n      defaultFetchOptions.body = config.payloadType === \"json\" ? JSON.stringify(payload) : payload;\n    }\n    let isCanceled = false;\n    const context = {\n      url: resolveUnref(url),\n      options: __spreadValues$d(__spreadValues$d({}, defaultFetchOptions), fetchOptions),\n      cancel: () => {\n        isCanceled = true;\n      }\n    };\n    if (options.beforeFetch)\n      Object.assign(context, await options.beforeFetch(context));\n    if (isCanceled || !fetch) {\n      loading(false);\n      return Promise.resolve(null);\n    }\n    let responseData = null;\n    if (timer)\n      timer.start();\n    return new Promise((resolve, reject) => {\n      var _a3;\n      fetch(context.url, __spreadProps$3(__spreadValues$d(__spreadValues$d({}, defaultFetchOptions), context.options), {\n        headers: __spreadValues$d(__spreadValues$d({}, headersToObject(defaultFetchOptions.headers)), headersToObject((_a3 = context.options) == null ? void 0 : _a3.headers))\n      })).then(async (fetchResponse) => {\n        response.value = fetchResponse;\n        statusCode.value = fetchResponse.status;\n        responseData = await fetchResponse[config.type]();\n        if (options.afterFetch && statusCode.value >= 200 && statusCode.value < 300)\n          ({ data: responseData } = await options.afterFetch({ data: responseData, response: fetchResponse }));\n        data.value = responseData;\n        if (!fetchResponse.ok)\n          throw new Error(fetchResponse.statusText);\n        responseEvent.trigger(fetchResponse);\n        return resolve(fetchResponse);\n      }).catch(async (fetchError) => {\n        let errorData = fetchError.message || fetchError.name;\n        if (options.onFetchError)\n          ({ data: responseData, error: errorData } = await options.onFetchError({ data: responseData, error: fetchError, response: response.value }));\n        data.value = responseData;\n        error.value = errorData;\n        errorEvent.trigger(fetchError);\n        if (throwOnFailed)\n          return reject(fetchError);\n        return resolve(null);\n      }).finally(() => {\n        loading(false);\n        if (timer)\n          timer.stop();\n        finallyEvent.trigger(null);\n      });\n    });\n  };\n  const refetch = resolveRef(options.refetch);\n  watch([\n    refetch,\n    resolveRef(url)\n  ], ([refetch2]) => refetch2 && execute(), { deep: true });\n  const shell = {\n    isFinished,\n    statusCode,\n    response,\n    error,\n    data,\n    isFetching,\n    canAbort,\n    aborted,\n    abort,\n    execute,\n    onFetchResponse: responseEvent.on,\n    onFetchError: errorEvent.on,\n    onFetchFinally: finallyEvent.on,\n    get: setMethod(\"GET\"),\n    put: setMethod(\"PUT\"),\n    post: setMethod(\"POST\"),\n    delete: setMethod(\"DELETE\"),\n    patch: setMethod(\"PATCH\"),\n    head: setMethod(\"HEAD\"),\n    options: setMethod(\"OPTIONS\"),\n    json: setType(\"json\"),\n    text: setType(\"text\"),\n    blob: setType(\"blob\"),\n    arrayBuffer: setType(\"arrayBuffer\"),\n    formData: setType(\"formData\")\n  };\n  function setMethod(method) {\n    return (payload, payloadType) => {\n      if (!isFetching.value) {\n        config.method = method;\n        config.payload = payload;\n        config.payloadType = payloadType;\n        if (isRef(config.payload)) {\n          watch([\n            refetch,\n            resolveRef(config.payload)\n          ], ([refetch2]) => refetch2 && execute(), { deep: true });\n        }\n        const rawPayload = resolveUnref(config.payload);\n        if (!payloadType && rawPayload && Object.getPrototypeOf(rawPayload) === Object.prototype && !(rawPayload instanceof FormData))\n          config.payloadType = \"json\";\n        return __spreadProps$3(__spreadValues$d({}, shell), {\n          then(onFulfilled, onRejected) {\n            return waitUntilFinished().then(onFulfilled, onRejected);\n          }\n        });\n      }\n      return void 0;\n    };\n  }\n  function waitUntilFinished() {\n    return new Promise((resolve, reject) => {\n      until(isFinished).toBe(true).then(() => resolve(shell)).catch((error2) => reject(error2));\n    });\n  }\n  function setType(type) {\n    return () => {\n      if (!isFetching.value) {\n        config.type = type;\n        return __spreadProps$3(__spreadValues$d({}, shell), {\n          then(onFulfilled, onRejected) {\n            return waitUntilFinished().then(onFulfilled, onRejected);\n          }\n        });\n      }\n      return void 0;\n    };\n  }\n  if (options.immediate)\n    setTimeout(execute, 0);\n  return __spreadProps$3(__spreadValues$d({}, shell), {\n    then(onFulfilled, onRejected) {\n      return waitUntilFinished().then(onFulfilled, onRejected);\n    }\n  });\n}\nfunction joinPaths(start, end) {\n  if (!start.endsWith(\"/\") && !end.startsWith(\"/\"))\n    return `${start}/${end}`;\n  return `${start}${end}`;\n}\n\nvar __defProp$c = Object.defineProperty;\nvar __getOwnPropSymbols$d = Object.getOwnPropertySymbols;\nvar __hasOwnProp$d = Object.prototype.hasOwnProperty;\nvar __propIsEnum$d = Object.prototype.propertyIsEnumerable;\nvar __defNormalProp$c = (obj, key, value) => key in obj ? __defProp$c(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;\nvar __spreadValues$c = (a, b) => {\n  for (var prop in b || (b = {}))\n    if (__hasOwnProp$d.call(b, prop))\n      __defNormalProp$c(a, prop, b[prop]);\n  if (__getOwnPropSymbols$d)\n    for (var prop of __getOwnPropSymbols$d(b)) {\n      if (__propIsEnum$d.call(b, prop))\n        __defNormalProp$c(a, prop, b[prop]);\n    }\n  return a;\n};\nconst DEFAULT_OPTIONS = {\n  multiple: true,\n  accept: \"*\"\n};\nfunction useFileDialog(options = {}) {\n  const {\n    document = defaultDocument\n  } = options;\n  const files = ref(null);\n  let input;\n  if (document) {\n    input = document.createElement(\"input\");\n    input.type = \"file\";\n    input.onchange = (event) => {\n      const result = event.target;\n      files.value = result.files;\n    };\n  }\n  const open = (localOptions) => {\n    if (!input)\n      return;\n    const _options = __spreadValues$c(__spreadValues$c(__spreadValues$c({}, DEFAULT_OPTIONS), options), localOptions);\n    input.multiple = _options.multiple;\n    input.accept = _options.accept;\n    if (hasOwn(_options, \"capture\"))\n      input.capture = _options.capture;\n    input.click();\n  };\n  const reset = () => {\n    files.value = null;\n    if (input)\n      input.value = \"\";\n  };\n  return {\n    files: readonly(files),\n    open,\n    reset\n  };\n}\n\nvar __defProp$b = Object.defineProperty;\nvar __getOwnPropSymbols$c = Object.getOwnPropertySymbols;\nvar __hasOwnProp$c = Object.prototype.hasOwnProperty;\nvar __propIsEnum$c = Object.prototype.propertyIsEnumerable;\nvar __defNormalProp$b = (obj, key, value) => key in obj ? __defProp$b(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;\nvar __spreadValues$b = (a, b) => {\n  for (var prop in b || (b = {}))\n    if (__hasOwnProp$c.call(b, prop))\n      __defNormalProp$b(a, prop, b[prop]);\n  if (__getOwnPropSymbols$c)\n    for (var prop of __getOwnPropSymbols$c(b)) {\n      if (__propIsEnum$c.call(b, prop))\n        __defNormalProp$b(a, prop, b[prop]);\n    }\n  return a;\n};\nfunction useFileSystemAccess(options = {}) {\n  const {\n    window: _window = defaultWindow,\n    dataType = \"Text\"\n  } = unref(options);\n  const window = _window;\n  const isSupported = useSupported(() => window && \"showSaveFilePicker\" in window && \"showOpenFilePicker\" in window);\n  const fileHandle = ref();\n  const data = ref();\n  const file = ref();\n  const fileName = computed(() => {\n    var _a, _b;\n    return (_b = (_a = file.value) == null ? void 0 : _a.name) != null ? _b : \"\";\n  });\n  const fileMIME = computed(() => {\n    var _a, _b;\n    return (_b = (_a = file.value) == null ? void 0 : _a.type) != null ? _b : \"\";\n  });\n  const fileSize = computed(() => {\n    var _a, _b;\n    return (_b = (_a = file.value) == null ? void 0 : _a.size) != null ? _b : 0;\n  });\n  const fileLastModified = computed(() => {\n    var _a, _b;\n    return (_b = (_a = file.value) == null ? void 0 : _a.lastModified) != null ? _b : 0;\n  });\n  async function open(_options = {}) {\n    if (!isSupported.value)\n      return;\n    const [handle] = await window.showOpenFilePicker(__spreadValues$b(__spreadValues$b({}, unref(options)), _options));\n    fileHandle.value = handle;\n    await updateFile();\n    await updateData();\n  }\n  async function create(_options = {}) {\n    if (!isSupported.value)\n      return;\n    fileHandle.value = await window.showSaveFilePicker(__spreadValues$b(__spreadValues$b({}, unref(options)), _options));\n    data.value = void 0;\n    await updateFile();\n    await updateData();\n  }\n  async function save(_options = {}) {\n    if (!isSupported.value)\n      return;\n    if (!fileHandle.value)\n      return saveAs(_options);\n    if (data.value) {\n      const writableStream = await fileHandle.value.createWritable();\n      await writableStream.write(data.value);\n      await writableStream.close();\n    }\n    await updateFile();\n  }\n  async function saveAs(_options = {}) {\n    if (!isSupported.value)\n      return;\n    fileHandle.value = await window.showSaveFilePicker(__spreadValues$b(__spreadValues$b({}, unref(options)), _options));\n    if (data.value) {\n      const writableStream = await fileHandle.value.createWritable();\n      await writableStream.write(data.value);\n      await writableStream.close();\n    }\n    await updateFile();\n  }\n  async function updateFile() {\n    var _a;\n    file.value = await ((_a = fileHandle.value) == null ? void 0 : _a.getFile());\n  }\n  async function updateData() {\n    var _a, _b;\n    if (unref(dataType) === \"Text\")\n      data.value = await ((_a = file.value) == null ? void 0 : _a.text());\n    if (unref(dataType) === \"ArrayBuffer\")\n      data.value = await ((_b = file.value) == null ? void 0 : _b.arrayBuffer());\n    if (unref(dataType) === \"Blob\")\n      data.value = file.value;\n  }\n  watch(() => unref(dataType), updateData);\n  return {\n    isSupported,\n    data,\n    file,\n    fileName,\n    fileMIME,\n    fileSize,\n    fileLastModified,\n    open,\n    create,\n    save,\n    saveAs,\n    updateData\n  };\n}\n\nfunction useFocus(target, options = {}) {\n  const { initialValue = false } = options;\n  const innerFocused = ref(false);\n  const targetElement = computed(() => unrefElement(target));\n  useEventListener(targetElement, \"focus\", () => innerFocused.value = true);\n  useEventListener(targetElement, \"blur\", () => innerFocused.value = false);\n  const focused = computed({\n    get: () => innerFocused.value,\n    set(value) {\n      var _a, _b;\n      if (!value && innerFocused.value)\n        (_a = targetElement.value) == null ? void 0 : _a.blur();\n      else if (value && !innerFocused.value)\n        (_b = targetElement.value) == null ? void 0 : _b.focus();\n    }\n  });\n  watch(targetElement, () => {\n    focused.value = initialValue;\n  }, { immediate: true, flush: \"post\" });\n  return { focused };\n}\n\nfunction useFocusWithin(target, options = {}) {\n  const activeElement = useActiveElement(options);\n  const targetElement = computed(() => unrefElement(target));\n  const focused = computed(() => targetElement.value && activeElement.value ? targetElement.value.contains(activeElement.value) : false);\n  return { focused };\n}\n\nfunction useFps(options) {\n  var _a;\n  const fps = ref(0);\n  if (typeof performance === \"undefined\")\n    return fps;\n  const every = (_a = options == null ? void 0 : options.every) != null ? _a : 10;\n  let last = performance.now();\n  let ticks = 0;\n  useRafFn(() => {\n    ticks += 1;\n    if (ticks >= every) {\n      const now = performance.now();\n      const diff = now - last;\n      fps.value = Math.round(1e3 / (diff / ticks));\n      last = now;\n      ticks = 0;\n    }\n  });\n  return fps;\n}\n\nconst functionsMap = [\n  [\n    \"requestFullscreen\",\n    \"exitFullscreen\",\n    \"fullscreenElement\",\n    \"fullscreenEnabled\",\n    \"fullscreenchange\",\n    \"fullscreenerror\"\n  ],\n  [\n    \"webkitRequestFullscreen\",\n    \"webkitExitFullscreen\",\n    \"webkitFullscreenElement\",\n    \"webkitFullscreenEnabled\",\n    \"webkitfullscreenchange\",\n    \"webkitfullscreenerror\"\n  ],\n  [\n    \"webkitRequestFullScreen\",\n    \"webkitCancelFullScreen\",\n    \"webkitCurrentFullScreenElement\",\n    \"webkitCancelFullScreen\",\n    \"webkitfullscreenchange\",\n    \"webkitfullscreenerror\"\n  ],\n  [\n    \"mozRequestFullScreen\",\n    \"mozCancelFullScreen\",\n    \"mozFullScreenElement\",\n    \"mozFullScreenEnabled\",\n    \"mozfullscreenchange\",\n    \"mozfullscreenerror\"\n  ],\n  [\n    \"msRequestFullscreen\",\n    \"msExitFullscreen\",\n    \"msFullscreenElement\",\n    \"msFullscreenEnabled\",\n    \"MSFullscreenChange\",\n    \"MSFullscreenError\"\n  ]\n];\nfunction useFullscreen(target, options = {}) {\n  const { document = defaultDocument, autoExit = false } = options;\n  const targetRef = target || (document == null ? void 0 : document.querySelector(\"html\"));\n  const isFullscreen = ref(false);\n  let map = functionsMap[0];\n  const isSupported = useSupported(() => {\n    if (!document) {\n      return false;\n    } else {\n      for (const m of functionsMap) {\n        if (m[1] in document) {\n          map = m;\n          return true;\n        }\n      }\n    }\n    return false;\n  });\n  const [REQUEST, EXIT, ELEMENT, , EVENT] = map;\n  async function exit() {\n    if (!isSupported.value)\n      return;\n    if (document == null ? void 0 : document[ELEMENT])\n      await document[EXIT]();\n    isFullscreen.value = false;\n  }\n  async function enter() {\n    if (!isSupported.value)\n      return;\n    await exit();\n    const target2 = unrefElement(targetRef);\n    if (target2) {\n      await target2[REQUEST]();\n      isFullscreen.value = true;\n    }\n  }\n  async function toggle() {\n    if (isFullscreen.value)\n      await exit();\n    else\n      await enter();\n  }\n  if (document) {\n    useEventListener(document, EVENT, () => {\n      isFullscreen.value = !!(document == null ? void 0 : document[ELEMENT]);\n    }, false);\n  }\n  if (autoExit)\n    tryOnScopeDispose(exit);\n  return {\n    isSupported,\n    isFullscreen,\n    enter,\n    exit,\n    toggle\n  };\n}\n\nfunction mapGamepadToXbox360Controller(gamepad) {\n  return computed(() => {\n    if (gamepad.value) {\n      return {\n        buttons: {\n          a: gamepad.value.buttons[0],\n          b: gamepad.value.buttons[1],\n          x: gamepad.value.buttons[2],\n          y: gamepad.value.buttons[3]\n        },\n        bumper: {\n          left: gamepad.value.buttons[4],\n          right: gamepad.value.buttons[5]\n        },\n        triggers: {\n          left: gamepad.value.buttons[6],\n          right: gamepad.value.buttons[7]\n        },\n        stick: {\n          left: {\n            horizontal: gamepad.value.axes[0],\n            vertical: gamepad.value.axes[1],\n            button: gamepad.value.buttons[10]\n          },\n          right: {\n            horizontal: gamepad.value.axes[2],\n            vertical: gamepad.value.axes[3],\n            button: gamepad.value.buttons[11]\n          }\n        },\n        dpad: {\n          up: gamepad.value.buttons[12],\n          down: gamepad.value.buttons[13],\n          left: gamepad.value.buttons[14],\n          right: gamepad.value.buttons[15]\n        },\n        back: gamepad.value.buttons[8],\n        start: gamepad.value.buttons[9]\n      };\n    }\n    return null;\n  });\n}\nfunction useGamepad(options = {}) {\n  const {\n    navigator = defaultNavigator\n  } = options;\n  const isSupported = useSupported(() => navigator && \"getGamepads\" in navigator);\n  const gamepads = ref([]);\n  const onConnectedHook = createEventHook();\n  const onDisconnectedHook = createEventHook();\n  const stateFromGamepad = (gamepad) => {\n    const hapticActuators = [];\n    const vibrationActuator = \"vibrationActuator\" in gamepad ? gamepad.vibrationActuator : null;\n    if (vibrationActuator)\n      hapticActuators.push(vibrationActuator);\n    if (gamepad.hapticActuators)\n      hapticActuators.push(...gamepad.hapticActuators);\n    return {\n      id: gamepad.id,\n      hapticActuators,\n      index: gamepad.index,\n      mapping: gamepad.mapping,\n      connected: gamepad.connected,\n      timestamp: gamepad.timestamp,\n      axes: gamepad.axes.map((axes) => axes),\n      buttons: gamepad.buttons.map((button) => ({ pressed: button.pressed, touched: button.touched, value: button.value }))\n    };\n  };\n  const updateGamepadState = () => {\n    const _gamepads = (navigator == null ? void 0 : navigator.getGamepads()) || [];\n    for (let i = 0; i < _gamepads.length; ++i) {\n      const gamepad = _gamepads[i];\n      if (gamepad) {\n        const index = gamepads.value.findIndex(({ index: index2 }) => index2 === gamepad.index);\n        if (index > -1)\n          gamepads.value[index] = stateFromGamepad(gamepad);\n      }\n    }\n  };\n  const { isActive, pause, resume } = useRafFn(updateGamepadState);\n  const onGamepadConnected = (gamepad) => {\n    if (!gamepads.value.some(({ index }) => index === gamepad.index)) {\n      gamepads.value.push(stateFromGamepad(gamepad));\n      onConnectedHook.trigger(gamepad.index);\n    }\n    resume();\n  };\n  const onGamepadDisconnected = (gamepad) => {\n    gamepads.value = gamepads.value.filter((x) => x.index !== gamepad.index);\n    onDisconnectedHook.trigger(gamepad.index);\n  };\n  useEventListener(\"gamepadconnected\", (e) => onGamepadConnected(e.gamepad));\n  useEventListener(\"gamepaddisconnected\", (e) => onGamepadDisconnected(e.gamepad));\n  tryOnMounted(() => {\n    const _gamepads = (navigator == null ? void 0 : navigator.getGamepads()) || [];\n    if (_gamepads) {\n      for (let i = 0; i < _gamepads.length; ++i) {\n        const gamepad = _gamepads[i];\n        if (gamepad)\n          onGamepadConnected(gamepad);\n      }\n    }\n  });\n  pause();\n  return {\n    isSupported,\n    onConnected: onConnectedHook.on,\n    onDisconnected: onDisconnectedHook.on,\n    gamepads,\n    pause,\n    resume,\n    isActive\n  };\n}\n\nfunction useGeolocation(options = {}) {\n  const {\n    enableHighAccuracy = true,\n    maximumAge = 3e4,\n    timeout = 27e3,\n    navigator = defaultNavigator,\n    immediate = true\n  } = options;\n  const isSupported = useSupported(() => navigator && \"geolocation\" in navigator);\n  const locatedAt = ref(null);\n  const error = ref(null);\n  const coords = ref({\n    accuracy: 0,\n    latitude: Infinity,\n    longitude: Infinity,\n    altitude: null,\n    altitudeAccuracy: null,\n    heading: null,\n    speed: null\n  });\n  function updatePosition(position) {\n    locatedAt.value = position.timestamp;\n    coords.value = position.coords;\n    error.value = null;\n  }\n  let watcher;\n  function resume() {\n    if (isSupported.value) {\n      watcher = navigator.geolocation.watchPosition(updatePosition, (err) => error.value = err, {\n        enableHighAccuracy,\n        maximumAge,\n        timeout\n      });\n    }\n  }\n  if (immediate)\n    resume();\n  function pause() {\n    if (watcher && navigator)\n      navigator.geolocation.clearWatch(watcher);\n  }\n  tryOnScopeDispose(() => {\n    pause();\n  });\n  return {\n    isSupported,\n    coords,\n    locatedAt,\n    error,\n    resume,\n    pause\n  };\n}\n\nconst defaultEvents$1 = [\"mousemove\", \"mousedown\", \"resize\", \"keydown\", \"touchstart\", \"wheel\"];\nconst oneMinute = 6e4;\nfunction useIdle(timeout = oneMinute, options = {}) {\n  const {\n    initialState = false,\n    listenForVisibilityChange = true,\n    events = defaultEvents$1,\n    window = defaultWindow,\n    eventFilter = throttleFilter(50)\n  } = options;\n  const idle = ref(initialState);\n  const lastActive = ref(timestamp());\n  let timer;\n  const onEvent = createFilterWrapper(eventFilter, () => {\n    idle.value = false;\n    lastActive.value = timestamp();\n    clearTimeout(timer);\n    timer = setTimeout(() => idle.value = true, timeout);\n  });\n  if (window) {\n    const document = window.document;\n    for (const event of events)\n      useEventListener(window, event, onEvent, { passive: true });\n    if (listenForVisibilityChange) {\n      useEventListener(document, \"visibilitychange\", () => {\n        if (!document.hidden)\n          onEvent();\n      });\n    }\n  }\n  timer = setTimeout(() => idle.value = true, timeout);\n  return { idle, lastActive };\n}\n\nvar __defProp$a = Object.defineProperty;\nvar __getOwnPropSymbols$b = Object.getOwnPropertySymbols;\nvar __hasOwnProp$b = Object.prototype.hasOwnProperty;\nvar __propIsEnum$b = Object.prototype.propertyIsEnumerable;\nvar __defNormalProp$a = (obj, key, value) => key in obj ? __defProp$a(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;\nvar __spreadValues$a = (a, b) => {\n  for (var prop in b || (b = {}))\n    if (__hasOwnProp$b.call(b, prop))\n      __defNormalProp$a(a, prop, b[prop]);\n  if (__getOwnPropSymbols$b)\n    for (var prop of __getOwnPropSymbols$b(b)) {\n      if (__propIsEnum$b.call(b, prop))\n        __defNormalProp$a(a, prop, b[prop]);\n    }\n  return a;\n};\nasync function loadImage(options) {\n  return new Promise((resolve, reject) => {\n    const img = new Image();\n    const { src, srcset, sizes } = options;\n    img.src = src;\n    if (srcset)\n      img.srcset = srcset;\n    if (sizes)\n      img.sizes = sizes;\n    img.onload = () => resolve(img);\n    img.onerror = reject;\n  });\n}\nconst useImage = (options, asyncStateOptions = {}) => {\n  const state = useAsyncState(() => loadImage(resolveUnref(options)), void 0, __spreadValues$a({\n    resetOnExecute: true\n  }, asyncStateOptions));\n  watch(() => resolveUnref(options), () => state.execute(asyncStateOptions.delay), { deep: true });\n  return state;\n};\n\nconst ARRIVED_STATE_THRESHOLD_PIXELS = 1;\nfunction useScroll(element, options = {}) {\n  const {\n    throttle = 0,\n    idle = 200,\n    onStop = noop,\n    onScroll = noop,\n    offset = {\n      left: 0,\n      right: 0,\n      top: 0,\n      bottom: 0\n    },\n    eventListenerOptions = {\n      capture: false,\n      passive: true\n    },\n    behavior = \"auto\"\n  } = options;\n  const internalX = ref(0);\n  const internalY = ref(0);\n  const x = computed({\n    get() {\n      return internalX.value;\n    },\n    set(x2) {\n      scrollTo(x2, void 0);\n    }\n  });\n  const y = computed({\n    get() {\n      return internalY.value;\n    },\n    set(y2) {\n      scrollTo(void 0, y2);\n    }\n  });\n  function scrollTo(_x, _y) {\n    var _a, _b, _c;\n    const _element = resolveUnref(element);\n    if (!_element)\n      return;\n    (_c = _element instanceof Document ? document.body : _element) == null ? void 0 : _c.scrollTo({\n      top: (_a = resolveUnref(_y)) != null ? _a : y.value,\n      left: (_b = resolveUnref(_x)) != null ? _b : x.value,\n      behavior: resolveUnref(behavior)\n    });\n  }\n  const isScrolling = ref(false);\n  const arrivedState = reactive({\n    left: true,\n    right: false,\n    top: true,\n    bottom: false\n  });\n  const directions = reactive({\n    left: false,\n    right: false,\n    top: false,\n    bottom: false\n  });\n  const onScrollEnd = (e) => {\n    if (!isScrolling.value)\n      return;\n    isScrolling.value = false;\n    directions.left = false;\n    directions.right = false;\n    directions.top = false;\n    directions.bottom = false;\n    onStop(e);\n  };\n  const onScrollEndDebounced = useDebounceFn(onScrollEnd, throttle + idle);\n  const onScrollHandler = (e) => {\n    const eventTarget = e.target === document ? e.target.documentElement : e.target;\n    const scrollLeft = eventTarget.scrollLeft;\n    directions.left = scrollLeft < internalX.value;\n    directions.right = scrollLeft > internalY.value;\n    arrivedState.left = scrollLeft <= 0 + (offset.left || 0);\n    arrivedState.right = scrollLeft + eventTarget.clientWidth >= eventTarget.scrollWidth - (offset.right || 0) - ARRIVED_STATE_THRESHOLD_PIXELS;\n    internalX.value = scrollLeft;\n    let scrollTop = eventTarget.scrollTop;\n    if (e.target === document && !scrollTop)\n      scrollTop = document.body.scrollTop;\n    directions.top = scrollTop < internalY.value;\n    directions.bottom = scrollTop > internalY.value;\n    arrivedState.top = scrollTop <= 0 + (offset.top || 0);\n    arrivedState.bottom = scrollTop + eventTarget.clientHeight >= eventTarget.scrollHeight - (offset.bottom || 0) - ARRIVED_STATE_THRESHOLD_PIXELS;\n    internalY.value = scrollTop;\n    isScrolling.value = true;\n    onScrollEndDebounced(e);\n    onScroll(e);\n  };\n  useEventListener(element, \"scroll\", throttle ? useThrottleFn(onScrollHandler, throttle, true, false) : onScrollHandler, eventListenerOptions);\n  useEventListener(element, \"scrollend\", onScrollEnd, eventListenerOptions);\n  return {\n    x,\n    y,\n    isScrolling,\n    arrivedState,\n    directions\n  };\n}\n\nvar __defProp$9 = Object.defineProperty;\nvar __defProps$2 = Object.defineProperties;\nvar __getOwnPropDescs$2 = Object.getOwnPropertyDescriptors;\nvar __getOwnPropSymbols$a = Object.getOwnPropertySymbols;\nvar __hasOwnProp$a = Object.prototype.hasOwnProperty;\nvar __propIsEnum$a = Object.prototype.propertyIsEnumerable;\nvar __defNormalProp$9 = (obj, key, value) => key in obj ? __defProp$9(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;\nvar __spreadValues$9 = (a, b) => {\n  for (var prop in b || (b = {}))\n    if (__hasOwnProp$a.call(b, prop))\n      __defNormalProp$9(a, prop, b[prop]);\n  if (__getOwnPropSymbols$a)\n    for (var prop of __getOwnPropSymbols$a(b)) {\n      if (__propIsEnum$a.call(b, prop))\n        __defNormalProp$9(a, prop, b[prop]);\n    }\n  return a;\n};\nvar __spreadProps$2 = (a, b) => __defProps$2(a, __getOwnPropDescs$2(b));\nfunction useInfiniteScroll(element, onLoadMore, options = {}) {\n  var _a, _b;\n  const direction = (_a = options.direction) != null ? _a : \"bottom\";\n  const state = reactive(useScroll(element, __spreadProps$2(__spreadValues$9({}, options), {\n    offset: __spreadValues$9({\n      [direction]: (_b = options.distance) != null ? _b : 0\n    }, options.offset)\n  })));\n  watch(() => state.arrivedState[direction], async (v) => {\n    var _a2, _b2;\n    if (v) {\n      const elem = resolveUnref(element);\n      const previous = {\n        height: (_a2 = elem == null ? void 0 : elem.scrollHeight) != null ? _a2 : 0,\n        width: (_b2 = elem == null ? void 0 : elem.scrollWidth) != null ? _b2 : 0\n      };\n      await onLoadMore(state);\n      if (options.preserveScrollPosition && elem) {\n        nextTick(() => {\n          elem.scrollTo({\n            top: elem.scrollHeight - previous.height,\n            left: elem.scrollWidth - previous.width\n          });\n        });\n      }\n    }\n  });\n}\n\nfunction useIntersectionObserver(target, callback, options = {}) {\n  const {\n    root,\n    rootMargin = \"0px\",\n    threshold = 0.1,\n    window = defaultWindow\n  } = options;\n  const isSupported = useSupported(() => window && \"IntersectionObserver\" in window);\n  let cleanup = noop;\n  const stopWatch = isSupported.value ? watch(() => ({\n    el: unrefElement(target),\n    root: unrefElement(root)\n  }), ({ el, root: root2 }) => {\n    cleanup();\n    if (!el)\n      return;\n    const observer = new IntersectionObserver(callback, {\n      root: root2,\n      rootMargin,\n      threshold\n    });\n    observer.observe(el);\n    cleanup = () => {\n      observer.disconnect();\n      cleanup = noop;\n    };\n  }, { immediate: true, flush: \"post\" }) : noop;\n  const stop = () => {\n    cleanup();\n    stopWatch();\n  };\n  tryOnScopeDispose(stop);\n  return {\n    isSupported,\n    stop\n  };\n}\n\nconst defaultEvents = [\"mousedown\", \"mouseup\", \"keydown\", \"keyup\"];\nfunction useKeyModifier(modifier, options = {}) {\n  const {\n    events = defaultEvents,\n    document = defaultDocument,\n    initial = null\n  } = options;\n  const state = ref(initial);\n  if (document) {\n    events.forEach((listenerEvent) => {\n      useEventListener(document, listenerEvent, (evt) => {\n        if (typeof evt.getModifierState === \"function\")\n          state.value = evt.getModifierState(modifier);\n      });\n    });\n  }\n  return state;\n}\n\nfunction useLocalStorage(key, initialValue, options = {}) {\n  const { window = defaultWindow } = options;\n  return useStorage(key, initialValue, window == null ? void 0 : window.localStorage, options);\n}\n\nconst DefaultMagicKeysAliasMap = {\n  ctrl: \"control\",\n  command: \"meta\",\n  cmd: \"meta\",\n  option: \"alt\",\n  up: \"arrowup\",\n  down: \"arrowdown\",\n  left: \"arrowleft\",\n  right: \"arrowright\"\n};\n\nfunction useMagicKeys(options = {}) {\n  const {\n    reactive: useReactive = false,\n    target = defaultWindow,\n    aliasMap = DefaultMagicKeysAliasMap,\n    passive = true,\n    onEventFired = noop\n  } = options;\n  const current = reactive(new Set());\n  const obj = {\n    toJSON() {\n      return {};\n    },\n    current\n  };\n  const refs = useReactive ? reactive(obj) : obj;\n  const metaDeps = new Set();\n  const usedKeys = new Set();\n  function setRefs(key, value) {\n    if (key in refs) {\n      if (useReactive)\n        refs[key] = value;\n      else\n        refs[key].value = value;\n    }\n  }\n  function reset() {\n    current.clear();\n    for (const key of usedKeys)\n      setRefs(key, false);\n  }\n  function updateRefs(e, value) {\n    var _a, _b;\n    const key = (_a = e.key) == null ? void 0 : _a.toLowerCase();\n    const code = (_b = e.code) == null ? void 0 : _b.toLowerCase();\n    const values = [code, key].filter(Boolean);\n    if (key) {\n      if (value)\n        current.add(key);\n      else\n        current.delete(key);\n    }\n    for (const key2 of values) {\n      usedKeys.add(key2);\n      setRefs(key2, value);\n    }\n    if (key === \"meta\" && !value) {\n      metaDeps.forEach((key2) => {\n        current.delete(key2);\n        setRefs(key2, false);\n      });\n      metaDeps.clear();\n    } else if (typeof e.getModifierState === \"function\" && e.getModifierState(\"Meta\") && value) {\n      [...current, ...values].forEach((key2) => metaDeps.add(key2));\n    }\n  }\n  useEventListener(target, \"keydown\", (e) => {\n    updateRefs(e, true);\n    return onEventFired(e);\n  }, { passive });\n  useEventListener(target, \"keyup\", (e) => {\n    updateRefs(e, false);\n    return onEventFired(e);\n  }, { passive });\n  useEventListener(\"blur\", reset, { passive: true });\n  useEventListener(\"focus\", reset, { passive: true });\n  const proxy = new Proxy(refs, {\n    get(target2, prop, rec) {\n      if (typeof prop !== \"string\")\n        return Reflect.get(target2, prop, rec);\n      prop = prop.toLowerCase();\n      if (prop in aliasMap)\n        prop = aliasMap[prop];\n      if (!(prop in refs)) {\n        if (/[+_-]/.test(prop)) {\n          const keys = prop.split(/[+_-]/g).map((i) => i.trim());\n          refs[prop] = computed(() => keys.every((key) => unref(proxy[key])));\n        } else {\n          refs[prop] = ref(false);\n        }\n      }\n      const r = Reflect.get(target2, prop, rec);\n      return useReactive ? unref(r) : r;\n    }\n  });\n  return proxy;\n}\n\nvar __defProp$8 = Object.defineProperty;\nvar __getOwnPropSymbols$9 = Object.getOwnPropertySymbols;\nvar __hasOwnProp$9 = Object.prototype.hasOwnProperty;\nvar __propIsEnum$9 = Object.prototype.propertyIsEnumerable;\nvar __defNormalProp$8 = (obj, key, value) => key in obj ? __defProp$8(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;\nvar __spreadValues$8 = (a, b) => {\n  for (var prop in b || (b = {}))\n    if (__hasOwnProp$9.call(b, prop))\n      __defNormalProp$8(a, prop, b[prop]);\n  if (__getOwnPropSymbols$9)\n    for (var prop of __getOwnPropSymbols$9(b)) {\n      if (__propIsEnum$9.call(b, prop))\n        __defNormalProp$8(a, prop, b[prop]);\n    }\n  return a;\n};\nfunction usingElRef(source, cb) {\n  if (resolveUnref(source))\n    cb(resolveUnref(source));\n}\nfunction timeRangeToArray(timeRanges) {\n  let ranges = [];\n  for (let i = 0; i < timeRanges.length; ++i)\n    ranges = [...ranges, [timeRanges.start(i), timeRanges.end(i)]];\n  return ranges;\n}\nfunction tracksToArray(tracks) {\n  return Array.from(tracks).map(({ label, kind, language, mode, activeCues, cues, inBandMetadataTrackDispatchType }, id) => ({ id, label, kind, language, mode, activeCues, cues, inBandMetadataTrackDispatchType }));\n}\nconst defaultOptions = {\n  src: \"\",\n  tracks: []\n};\nfunction useMediaControls(target, options = {}) {\n  options = __spreadValues$8(__spreadValues$8({}, defaultOptions), options);\n  const {\n    document = defaultDocument\n  } = options;\n  const currentTime = ref(0);\n  const duration = ref(0);\n  const seeking = ref(false);\n  const volume = ref(1);\n  const waiting = ref(false);\n  const ended = ref(false);\n  const playing = ref(false);\n  const rate = ref(1);\n  const stalled = ref(false);\n  const buffered = ref([]);\n  const tracks = ref([]);\n  const selectedTrack = ref(-1);\n  const isPictureInPicture = ref(false);\n  const muted = ref(false);\n  const supportsPictureInPicture = document && \"pictureInPictureEnabled\" in document;\n  const sourceErrorEvent = createEventHook();\n  const disableTrack = (track) => {\n    usingElRef(target, (el) => {\n      if (track) {\n        const id = isNumber(track) ? track : track.id;\n        el.textTracks[id].mode = \"disabled\";\n      } else {\n        for (let i = 0; i < el.textTracks.length; ++i)\n          el.textTracks[i].mode = \"disabled\";\n      }\n      selectedTrack.value = -1;\n    });\n  };\n  const enableTrack = (track, disableTracks = true) => {\n    usingElRef(target, (el) => {\n      const id = isNumber(track) ? track : track.id;\n      if (disableTracks)\n        disableTrack();\n      el.textTracks[id].mode = \"showing\";\n      selectedTrack.value = id;\n    });\n  };\n  const togglePictureInPicture = () => {\n    return new Promise((resolve, reject) => {\n      usingElRef(target, async (el) => {\n        if (supportsPictureInPicture) {\n          if (!isPictureInPicture.value) {\n            el.requestPictureInPicture().then(resolve).catch(reject);\n          } else {\n            document.exitPictureInPicture().then(resolve).catch(reject);\n          }\n        }\n      });\n    });\n  };\n  watchEffect(() => {\n    if (!document)\n      return;\n    const el = resolveUnref(target);\n    if (!el)\n      return;\n    const src = resolveUnref(options.src);\n    let sources = [];\n    if (!src)\n      return;\n    if (isString(src))\n      sources = [{ src }];\n    else if (Array.isArray(src))\n      sources = src;\n    else if (isObject(src))\n      sources = [src];\n    el.querySelectorAll(\"source\").forEach((e) => {\n      e.removeEventListener(\"error\", sourceErrorEvent.trigger);\n      e.remove();\n    });\n    sources.forEach(({ src: src2, type }) => {\n      const source = document.createElement(\"source\");\n      source.setAttribute(\"src\", src2);\n      source.setAttribute(\"type\", type || \"\");\n      source.addEventListener(\"error\", sourceErrorEvent.trigger);\n      el.appendChild(source);\n    });\n    el.load();\n  });\n  tryOnScopeDispose(() => {\n    const el = resolveUnref(target);\n    if (!el)\n      return;\n    el.querySelectorAll(\"source\").forEach((e) => e.removeEventListener(\"error\", sourceErrorEvent.trigger));\n  });\n  watch(volume, (vol) => {\n    const el = resolveUnref(target);\n    if (!el)\n      return;\n    el.volume = vol;\n  });\n  watch(muted, (mute) => {\n    const el = resolveUnref(target);\n    if (!el)\n      return;\n    el.muted = mute;\n  });\n  watch(rate, (rate2) => {\n    const el = resolveUnref(target);\n    if (!el)\n      return;\n    el.playbackRate = rate2;\n  });\n  watchEffect(() => {\n    if (!document)\n      return;\n    const textTracks = resolveUnref(options.tracks);\n    const el = resolveUnref(target);\n    if (!textTracks || !textTracks.length || !el)\n      return;\n    el.querySelectorAll(\"track\").forEach((e) => e.remove());\n    textTracks.forEach(({ default: isDefault, kind, label, src, srcLang }, i) => {\n      const track = document.createElement(\"track\");\n      track.default = isDefault || false;\n      track.kind = kind;\n      track.label = label;\n      track.src = src;\n      track.srclang = srcLang;\n      if (track.default)\n        selectedTrack.value = i;\n      el.appendChild(track);\n    });\n  });\n  const { ignoreUpdates: ignoreCurrentTimeUpdates } = watchIgnorable(currentTime, (time) => {\n    const el = resolveUnref(target);\n    if (!el)\n      return;\n    el.currentTime = time;\n  });\n  const { ignoreUpdates: ignorePlayingUpdates } = watchIgnorable(playing, (isPlaying) => {\n    const el = resolveUnref(target);\n    if (!el)\n      return;\n    isPlaying ? el.play() : el.pause();\n  });\n  useEventListener(target, \"timeupdate\", () => ignoreCurrentTimeUpdates(() => currentTime.value = resolveUnref(target).currentTime));\n  useEventListener(target, \"durationchange\", () => duration.value = resolveUnref(target).duration);\n  useEventListener(target, \"progress\", () => buffered.value = timeRangeToArray(resolveUnref(target).buffered));\n  useEventListener(target, \"seeking\", () => seeking.value = true);\n  useEventListener(target, \"seeked\", () => seeking.value = false);\n  useEventListener(target, \"waiting\", () => waiting.value = true);\n  useEventListener(target, \"playing\", () => {\n    waiting.value = false;\n    ended.value = false;\n  });\n  useEventListener(target, \"ratechange\", () => rate.value = resolveUnref(target).playbackRate);\n  useEventListener(target, \"stalled\", () => stalled.value = true);\n  useEventListener(target, \"ended\", () => ended.value = true);\n  useEventListener(target, \"pause\", () => ignorePlayingUpdates(() => playing.value = false));\n  useEventListener(target, \"play\", () => ignorePlayingUpdates(() => playing.value = true));\n  useEventListener(target, \"enterpictureinpicture\", () => isPictureInPicture.value = true);\n  useEventListener(target, \"leavepictureinpicture\", () => isPictureInPicture.value = false);\n  useEventListener(target, \"volumechange\", () => {\n    const el = resolveUnref(target);\n    if (!el)\n      return;\n    volume.value = el.volume;\n    muted.value = el.muted;\n  });\n  const listeners = [];\n  const stop = watch([target], () => {\n    const el = resolveUnref(target);\n    if (!el)\n      return;\n    stop();\n    listeners[0] = useEventListener(el.textTracks, \"addtrack\", () => tracks.value = tracksToArray(el.textTracks));\n    listeners[1] = useEventListener(el.textTracks, \"removetrack\", () => tracks.value = tracksToArray(el.textTracks));\n    listeners[2] = useEventListener(el.textTracks, \"change\", () => tracks.value = tracksToArray(el.textTracks));\n  });\n  tryOnScopeDispose(() => listeners.forEach((listener) => listener()));\n  return {\n    currentTime,\n    duration,\n    waiting,\n    seeking,\n    ended,\n    stalled,\n    buffered,\n    playing,\n    rate,\n    volume,\n    muted,\n    tracks,\n    selectedTrack,\n    enableTrack,\n    disableTrack,\n    supportsPictureInPicture,\n    togglePictureInPicture,\n    isPictureInPicture,\n    onSourceError: sourceErrorEvent.on\n  };\n}\n\nconst getMapVue2Compat = () => {\n  const data = reactive({});\n  return {\n    get: (key) => data[key],\n    set: (key, value) => set(data, key, value),\n    has: (key) => hasOwn(data, key),\n    delete: (key) => del(data, key),\n    clear: () => {\n      Object.keys(data).forEach((key) => {\n        del(data, key);\n      });\n    }\n  };\n};\nfunction useMemoize(resolver, options) {\n  const initCache = () => {\n    if (options == null ? void 0 : options.cache)\n      return reactive(options.cache);\n    if (isVue2)\n      return getMapVue2Compat();\n    return reactive(new Map());\n  };\n  const cache = initCache();\n  const generateKey = (...args) => (options == null ? void 0 : options.getKey) ? options.getKey(...args) : JSON.stringify(args);\n  const _loadData = (key, ...args) => {\n    cache.set(key, resolver(...args));\n    return cache.get(key);\n  };\n  const loadData = (...args) => _loadData(generateKey(...args), ...args);\n  const deleteData = (...args) => {\n    cache.delete(generateKey(...args));\n  };\n  const clearData = () => {\n    cache.clear();\n  };\n  const memoized = (...args) => {\n    const key = generateKey(...args);\n    if (cache.has(key))\n      return cache.get(key);\n    return _loadData(key, ...args);\n  };\n  memoized.load = loadData;\n  memoized.delete = deleteData;\n  memoized.clear = clearData;\n  memoized.generateKey = generateKey;\n  memoized.cache = cache;\n  return memoized;\n}\n\nfunction useMemory(options = {}) {\n  const memory = ref();\n  const isSupported = useSupported(() => typeof performance !== \"undefined\" && \"memory\" in performance);\n  if (isSupported.value) {\n    const { interval = 1e3 } = options;\n    useIntervalFn(() => {\n      memory.value = performance.memory;\n    }, interval, { immediate: options.immediate, immediateCallback: options.immediateCallback });\n  }\n  return { isSupported, memory };\n}\n\nfunction useMounted() {\n  const isMounted = ref(false);\n  onMounted(() => {\n    isMounted.value = true;\n  });\n  return isMounted;\n}\n\nfunction useMouse(options = {}) {\n  const {\n    type = \"page\",\n    touch = true,\n    resetOnTouchEnds = false,\n    initialValue = { x: 0, y: 0 },\n    window = defaultWindow,\n    eventFilter\n  } = options;\n  const x = ref(initialValue.x);\n  const y = ref(initialValue.y);\n  const sourceType = ref(null);\n  const mouseHandler = (event) => {\n    if (type === \"page\") {\n      x.value = event.pageX;\n      y.value = event.pageY;\n    } else if (type === \"client\") {\n      x.value = event.clientX;\n      y.value = event.clientY;\n    } else if (type === \"movement\") {\n      x.value = event.movementX;\n      y.value = event.movementY;\n    }\n    sourceType.value = \"mouse\";\n  };\n  const reset = () => {\n    x.value = initialValue.x;\n    y.value = initialValue.y;\n  };\n  const touchHandler = (event) => {\n    if (event.touches.length > 0) {\n      const touch2 = event.touches[0];\n      if (type === \"page\") {\n        x.value = touch2.pageX;\n        y.value = touch2.pageY;\n      } else if (type === \"client\") {\n        x.value = touch2.clientX;\n        y.value = touch2.clientY;\n      }\n      sourceType.value = \"touch\";\n    }\n  };\n  const mouseHandlerWrapper = (event) => {\n    return eventFilter === void 0 ? mouseHandler(event) : eventFilter(() => mouseHandler(event), {});\n  };\n  const touchHandlerWrapper = (event) => {\n    return eventFilter === void 0 ? touchHandler(event) : eventFilter(() => touchHandler(event), {});\n  };\n  if (window) {\n    useEventListener(window, \"mousemove\", mouseHandlerWrapper, { passive: true });\n    useEventListener(window, \"dragover\", mouseHandlerWrapper, { passive: true });\n    if (touch && type !== \"movement\") {\n      useEventListener(window, \"touchstart\", touchHandlerWrapper, { passive: true });\n      useEventListener(window, \"touchmove\", touchHandlerWrapper, { passive: true });\n      if (resetOnTouchEnds)\n        useEventListener(window, \"touchend\", reset, { passive: true });\n    }\n  }\n  return {\n    x,\n    y,\n    sourceType\n  };\n}\n\nfunction useMouseInElement(target, options = {}) {\n  const {\n    handleOutside = true,\n    window = defaultWindow\n  } = options;\n  const { x, y, sourceType } = useMouse(options);\n  const targetRef = ref(target != null ? target : window == null ? void 0 : window.document.body);\n  const elementX = ref(0);\n  const elementY = ref(0);\n  const elementPositionX = ref(0);\n  const elementPositionY = ref(0);\n  const elementHeight = ref(0);\n  const elementWidth = ref(0);\n  const isOutside = ref(true);\n  let stop = () => {\n  };\n  if (window) {\n    stop = watch([targetRef, x, y], () => {\n      const el = unrefElement(targetRef);\n      if (!el)\n        return;\n      const {\n        left,\n        top,\n        width,\n        height\n      } = el.getBoundingClientRect();\n      elementPositionX.value = left + window.pageXOffset;\n      elementPositionY.value = top + window.pageYOffset;\n      elementHeight.value = height;\n      elementWidth.value = width;\n      const elX = x.value - elementPositionX.value;\n      const elY = y.value - elementPositionY.value;\n      isOutside.value = width === 0 || height === 0 || elX < 0 || elY < 0 || elX > width || elY > height;\n      if (handleOutside || !isOutside.value) {\n        elementX.value = elX;\n        elementY.value = elY;\n      }\n    }, { immediate: true });\n    useEventListener(document, \"mouseleave\", () => {\n      isOutside.value = true;\n    });\n  }\n  return {\n    x,\n    y,\n    sourceType,\n    elementX,\n    elementY,\n    elementPositionX,\n    elementPositionY,\n    elementHeight,\n    elementWidth,\n    isOutside,\n    stop\n  };\n}\n\nfunction useMousePressed(options = {}) {\n  const {\n    touch = true,\n    drag = true,\n    initialValue = false,\n    window = defaultWindow\n  } = options;\n  const pressed = ref(initialValue);\n  const sourceType = ref(null);\n  if (!window) {\n    return {\n      pressed,\n      sourceType\n    };\n  }\n  const onPressed = (srcType) => () => {\n    pressed.value = true;\n    sourceType.value = srcType;\n  };\n  const onReleased = () => {\n    pressed.value = false;\n    sourceType.value = null;\n  };\n  const target = computed(() => unrefElement(options.target) || window);\n  useEventListener(target, \"mousedown\", onPressed(\"mouse\"), { passive: true });\n  useEventListener(window, \"mouseleave\", onReleased, { passive: true });\n  useEventListener(window, \"mouseup\", onReleased, { passive: true });\n  if (drag) {\n    useEventListener(target, \"dragstart\", onPressed(\"mouse\"), { passive: true });\n    useEventListener(window, \"drop\", onReleased, { passive: true });\n    useEventListener(window, \"dragend\", onReleased, { passive: true });\n  }\n  if (touch) {\n    useEventListener(target, \"touchstart\", onPressed(\"touch\"), { passive: true });\n    useEventListener(window, \"touchend\", onReleased, { passive: true });\n    useEventListener(window, \"touchcancel\", onReleased, { passive: true });\n  }\n  return {\n    pressed,\n    sourceType\n  };\n}\n\nvar __getOwnPropSymbols$8 = Object.getOwnPropertySymbols;\nvar __hasOwnProp$8 = Object.prototype.hasOwnProperty;\nvar __propIsEnum$8 = Object.prototype.propertyIsEnumerable;\nvar __objRest$1 = (source, exclude) => {\n  var target = {};\n  for (var prop in source)\n    if (__hasOwnProp$8.call(source, prop) && exclude.indexOf(prop) < 0)\n      target[prop] = source[prop];\n  if (source != null && __getOwnPropSymbols$8)\n    for (var prop of __getOwnPropSymbols$8(source)) {\n      if (exclude.indexOf(prop) < 0 && __propIsEnum$8.call(source, prop))\n        target[prop] = source[prop];\n    }\n  return target;\n};\nfunction useMutationObserver(target, callback, options = {}) {\n  const _a = options, { window = defaultWindow } = _a, mutationOptions = __objRest$1(_a, [\"window\"]);\n  let observer;\n  const isSupported = useSupported(() => window && \"MutationObserver\" in window);\n  const cleanup = () => {\n    if (observer) {\n      observer.disconnect();\n      observer = void 0;\n    }\n  };\n  const stopWatch = watch(() => unrefElement(target), (el) => {\n    cleanup();\n    if (isSupported.value && window && el) {\n      observer = new MutationObserver(callback);\n      observer.observe(el, mutationOptions);\n    }\n  }, { immediate: true });\n  const stop = () => {\n    cleanup();\n    stopWatch();\n  };\n  tryOnScopeDispose(stop);\n  return {\n    isSupported,\n    stop\n  };\n}\n\nconst useNavigatorLanguage = (options = {}) => {\n  const { window = defaultWindow } = options;\n  const navigator = window == null ? void 0 : window.navigator;\n  const isSupported = useSupported(() => navigator && \"language\" in navigator);\n  const language = ref(navigator == null ? void 0 : navigator.language);\n  useEventListener(window, \"languagechange\", () => {\n    if (navigator)\n      language.value = navigator.language;\n  });\n  return {\n    isSupported,\n    language\n  };\n};\n\nfunction useNetwork(options = {}) {\n  const { window = defaultWindow } = options;\n  const navigator = window == null ? void 0 : window.navigator;\n  const isSupported = useSupported(() => navigator && \"connection\" in navigator);\n  const isOnline = ref(true);\n  const saveData = ref(false);\n  const offlineAt = ref(void 0);\n  const onlineAt = ref(void 0);\n  const downlink = ref(void 0);\n  const downlinkMax = ref(void 0);\n  const rtt = ref(void 0);\n  const effectiveType = ref(void 0);\n  const type = ref(\"unknown\");\n  const connection = isSupported.value && navigator.connection;\n  function updateNetworkInformation() {\n    if (!navigator)\n      return;\n    isOnline.value = navigator.onLine;\n    offlineAt.value = isOnline.value ? void 0 : Date.now();\n    onlineAt.value = isOnline.value ? Date.now() : void 0;\n    if (connection) {\n      downlink.value = connection.downlink;\n      downlinkMax.value = connection.downlinkMax;\n      effectiveType.value = connection.effectiveType;\n      rtt.value = connection.rtt;\n      saveData.value = connection.saveData;\n      type.value = connection.type;\n    }\n  }\n  if (window) {\n    useEventListener(window, \"offline\", () => {\n      isOnline.value = false;\n      offlineAt.value = Date.now();\n    });\n    useEventListener(window, \"online\", () => {\n      isOnline.value = true;\n      onlineAt.value = Date.now();\n    });\n  }\n  if (connection)\n    useEventListener(connection, \"change\", updateNetworkInformation, false);\n  updateNetworkInformation();\n  return {\n    isSupported,\n    isOnline,\n    saveData,\n    offlineAt,\n    onlineAt,\n    downlink,\n    downlinkMax,\n    effectiveType,\n    rtt,\n    type\n  };\n}\n\nvar __defProp$7 = Object.defineProperty;\nvar __getOwnPropSymbols$7 = Object.getOwnPropertySymbols;\nvar __hasOwnProp$7 = Object.prototype.hasOwnProperty;\nvar __propIsEnum$7 = Object.prototype.propertyIsEnumerable;\nvar __defNormalProp$7 = (obj, key, value) => key in obj ? __defProp$7(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;\nvar __spreadValues$7 = (a, b) => {\n  for (var prop in b || (b = {}))\n    if (__hasOwnProp$7.call(b, prop))\n      __defNormalProp$7(a, prop, b[prop]);\n  if (__getOwnPropSymbols$7)\n    for (var prop of __getOwnPropSymbols$7(b)) {\n      if (__propIsEnum$7.call(b, prop))\n        __defNormalProp$7(a, prop, b[prop]);\n    }\n  return a;\n};\nfunction useNow(options = {}) {\n  const {\n    controls: exposeControls = false,\n    interval = \"requestAnimationFrame\"\n  } = options;\n  const now = ref(new Date());\n  const update = () => now.value = new Date();\n  const controls = interval === \"requestAnimationFrame\" ? useRafFn(update, { immediate: true }) : useIntervalFn(update, interval, { immediate: true });\n  if (exposeControls) {\n    return __spreadValues$7({\n      now\n    }, controls);\n  } else {\n    return now;\n  }\n}\n\nfunction useObjectUrl(object) {\n  const url = ref();\n  const release = () => {\n    if (url.value)\n      URL.revokeObjectURL(url.value);\n    url.value = void 0;\n  };\n  watch(() => unref(object), (newObject) => {\n    release();\n    if (newObject)\n      url.value = URL.createObjectURL(newObject);\n  }, { immediate: true });\n  tryOnScopeDispose(release);\n  return readonly(url);\n}\n\nfunction useClamp(value, min, max) {\n  if (isFunction(value) || isReadonly(value))\n    return computed(() => clamp(resolveUnref(value), resolveUnref(min), resolveUnref(max)));\n  const _value = ref(value);\n  return computed({\n    get() {\n      return _value.value = clamp(_value.value, resolveUnref(min), resolveUnref(max));\n    },\n    set(value2) {\n      _value.value = clamp(value2, resolveUnref(min), resolveUnref(max));\n    }\n  });\n}\n\nfunction useOffsetPagination(options) {\n  const {\n    total = Infinity,\n    pageSize = 10,\n    page = 1,\n    onPageChange = noop,\n    onPageSizeChange = noop,\n    onPageCountChange = noop\n  } = options;\n  const currentPageSize = useClamp(pageSize, 1, Infinity);\n  const pageCount = computed(() => Math.max(1, Math.ceil(unref(total) / unref(currentPageSize))));\n  const currentPage = useClamp(page, 1, pageCount);\n  const isFirstPage = computed(() => currentPage.value === 1);\n  const isLastPage = computed(() => currentPage.value === pageCount.value);\n  if (isRef(page))\n    syncRef(page, currentPage);\n  if (isRef(pageSize))\n    syncRef(pageSize, currentPageSize);\n  function prev() {\n    currentPage.value--;\n  }\n  function next() {\n    currentPage.value++;\n  }\n  const returnValue = {\n    currentPage,\n    currentPageSize,\n    pageCount,\n    isFirstPage,\n    isLastPage,\n    prev,\n    next\n  };\n  watch(currentPage, () => {\n    onPageChange(reactive(returnValue));\n  });\n  watch(currentPageSize, () => {\n    onPageSizeChange(reactive(returnValue));\n  });\n  watch(pageCount, () => {\n    onPageCountChange(reactive(returnValue));\n  });\n  return returnValue;\n}\n\nfunction useOnline(options = {}) {\n  const { isOnline } = useNetwork(options);\n  return isOnline;\n}\n\nfunction usePageLeave(options = {}) {\n  const { window = defaultWindow } = options;\n  const isLeft = ref(false);\n  const handler = (event) => {\n    if (!window)\n      return;\n    event = event || window.event;\n    const from = event.relatedTarget || event.toElement;\n    isLeft.value = !from;\n  };\n  if (window) {\n    useEventListener(window, \"mouseout\", handler, { passive: true });\n    useEventListener(window.document, \"mouseleave\", handler, { passive: true });\n    useEventListener(window.document, \"mouseenter\", handler, { passive: true });\n  }\n  return isLeft;\n}\n\nfunction useParallax(target, options = {}) {\n  const {\n    deviceOrientationTiltAdjust = (i) => i,\n    deviceOrientationRollAdjust = (i) => i,\n    mouseTiltAdjust = (i) => i,\n    mouseRollAdjust = (i) => i,\n    window = defaultWindow\n  } = options;\n  const orientation = reactive(useDeviceOrientation({ window }));\n  const {\n    elementX: x,\n    elementY: y,\n    elementWidth: width,\n    elementHeight: height\n  } = useMouseInElement(target, { handleOutside: false, window });\n  const source = computed(() => {\n    if (orientation.isSupported && (orientation.alpha != null && orientation.alpha !== 0 || orientation.gamma != null && orientation.gamma !== 0))\n      return \"deviceOrientation\";\n    return \"mouse\";\n  });\n  const roll = computed(() => {\n    if (source.value === \"deviceOrientation\") {\n      const value = -orientation.beta / 90;\n      return deviceOrientationRollAdjust(value);\n    } else {\n      const value = -(y.value - height.value / 2) / height.value;\n      return mouseRollAdjust(value);\n    }\n  });\n  const tilt = computed(() => {\n    if (source.value === \"deviceOrientation\") {\n      const value = orientation.gamma / 90;\n      return deviceOrientationTiltAdjust(value);\n    } else {\n      const value = (x.value - width.value / 2) / width.value;\n      return mouseTiltAdjust(value);\n    }\n  });\n  return { roll, tilt, source };\n}\n\nvar __defProp$6 = Object.defineProperty;\nvar __defProps$1 = Object.defineProperties;\nvar __getOwnPropDescs$1 = Object.getOwnPropertyDescriptors;\nvar __getOwnPropSymbols$6 = Object.getOwnPropertySymbols;\nvar __hasOwnProp$6 = Object.prototype.hasOwnProperty;\nvar __propIsEnum$6 = Object.prototype.propertyIsEnumerable;\nvar __defNormalProp$6 = (obj, key, value) => key in obj ? __defProp$6(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;\nvar __spreadValues$6 = (a, b) => {\n  for (var prop in b || (b = {}))\n    if (__hasOwnProp$6.call(b, prop))\n      __defNormalProp$6(a, prop, b[prop]);\n  if (__getOwnPropSymbols$6)\n    for (var prop of __getOwnPropSymbols$6(b)) {\n      if (__propIsEnum$6.call(b, prop))\n        __defNormalProp$6(a, prop, b[prop]);\n    }\n  return a;\n};\nvar __spreadProps$1 = (a, b) => __defProps$1(a, __getOwnPropDescs$1(b));\nconst defaultState = {\n  x: 0,\n  y: 0,\n  pointerId: 0,\n  pressure: 0,\n  tiltX: 0,\n  tiltY: 0,\n  width: 0,\n  height: 0,\n  twist: 0,\n  pointerType: null\n};\nconst keys = /* @__PURE__ */ Object.keys(defaultState);\nfunction usePointer(options = {}) {\n  const {\n    target = defaultWindow\n  } = options;\n  const isInside = ref(false);\n  const state = ref(options.initialValue || {});\n  Object.assign(state.value, defaultState, state.value);\n  const handler = (event) => {\n    isInside.value = true;\n    if (options.pointerTypes && !options.pointerTypes.includes(event.pointerType))\n      return;\n    state.value = objectPick(event, keys, false);\n  };\n  if (target) {\n    useEventListener(target, \"pointerdown\", handler, { passive: true });\n    useEventListener(target, \"pointermove\", handler, { passive: true });\n    useEventListener(target, \"pointerleave\", () => isInside.value = false, { passive: true });\n  }\n  return __spreadProps$1(__spreadValues$6({}, toRefs(state)), {\n    isInside\n  });\n}\n\nfunction usePointerLock(target, options = {}) {\n  const { document = defaultDocument, pointerLockOptions } = options;\n  const isSupported = useSupported(() => document && \"pointerLockElement\" in document);\n  const element = ref();\n  const triggerElement = ref();\n  let targetElement;\n  if (isSupported.value) {\n    useEventListener(document, \"pointerlockchange\", () => {\n      var _a;\n      const currentElement = (_a = document.pointerLockElement) != null ? _a : element.value;\n      if (targetElement && currentElement === targetElement) {\n        element.value = document.pointerLockElement;\n        if (!element.value)\n          targetElement = triggerElement.value = null;\n      }\n    });\n    useEventListener(document, \"pointerlockerror\", () => {\n      var _a;\n      const currentElement = (_a = document.pointerLockElement) != null ? _a : element.value;\n      if (targetElement && currentElement === targetElement) {\n        const action = document.pointerLockElement ? \"release\" : \"acquire\";\n        throw new Error(`Failed to ${action} pointer lock.`);\n      }\n    });\n  }\n  async function lock(e, options2) {\n    var _a;\n    if (!isSupported.value)\n      throw new Error(\"Pointer Lock API is not supported by your browser.\");\n    triggerElement.value = e instanceof Event ? e.currentTarget : null;\n    targetElement = e instanceof Event ? (_a = unrefElement(target)) != null ? _a : triggerElement.value : unrefElement(e);\n    if (!targetElement)\n      throw new Error(\"Target element undefined.\");\n    targetElement.requestPointerLock(options2 != null ? options2 : pointerLockOptions);\n    return await until(element).toBe(targetElement);\n  }\n  async function unlock() {\n    if (!element.value)\n      return false;\n    document.exitPointerLock();\n    await until(element).toBeNull();\n    return true;\n  }\n  return {\n    isSupported,\n    element,\n    triggerElement,\n    lock,\n    unlock\n  };\n}\n\nvar SwipeDirection;\n(function(SwipeDirection2) {\n  SwipeDirection2[\"UP\"] = \"UP\";\n  SwipeDirection2[\"RIGHT\"] = \"RIGHT\";\n  SwipeDirection2[\"DOWN\"] = \"DOWN\";\n  SwipeDirection2[\"LEFT\"] = \"LEFT\";\n  SwipeDirection2[\"NONE\"] = \"NONE\";\n})(SwipeDirection || (SwipeDirection = {}));\nfunction useSwipe(target, options = {}) {\n  const {\n    threshold = 50,\n    onSwipe,\n    onSwipeEnd,\n    onSwipeStart,\n    passive = true,\n    window = defaultWindow\n  } = options;\n  const coordsStart = reactive({ x: 0, y: 0 });\n  const coordsEnd = reactive({ x: 0, y: 0 });\n  const diffX = computed(() => coordsStart.x - coordsEnd.x);\n  const diffY = computed(() => coordsStart.y - coordsEnd.y);\n  const { max, abs } = Math;\n  const isThresholdExceeded = computed(() => max(abs(diffX.value), abs(diffY.value)) >= threshold);\n  const isSwiping = ref(false);\n  const direction = computed(() => {\n    if (!isThresholdExceeded.value)\n      return SwipeDirection.NONE;\n    if (abs(diffX.value) > abs(diffY.value)) {\n      return diffX.value > 0 ? SwipeDirection.LEFT : SwipeDirection.RIGHT;\n    } else {\n      return diffY.value > 0 ? SwipeDirection.UP : SwipeDirection.DOWN;\n    }\n  });\n  const getTouchEventCoords = (e) => [e.touches[0].clientX, e.touches[0].clientY];\n  const updateCoordsStart = (x, y) => {\n    coordsStart.x = x;\n    coordsStart.y = y;\n  };\n  const updateCoordsEnd = (x, y) => {\n    coordsEnd.x = x;\n    coordsEnd.y = y;\n  };\n  let listenerOptions;\n  const isPassiveEventSupported = checkPassiveEventSupport(window == null ? void 0 : window.document);\n  if (!passive)\n    listenerOptions = isPassiveEventSupported ? { passive: false, capture: true } : { capture: true };\n  else\n    listenerOptions = isPassiveEventSupported ? { passive: true } : { capture: false };\n  const onTouchEnd = (e) => {\n    if (isSwiping.value)\n      onSwipeEnd == null ? void 0 : onSwipeEnd(e, direction.value);\n    isSwiping.value = false;\n  };\n  const stops = [\n    useEventListener(target, \"touchstart\", (e) => {\n      if (listenerOptions.capture && !listenerOptions.passive)\n        e.preventDefault();\n      const [x, y] = getTouchEventCoords(e);\n      updateCoordsStart(x, y);\n      updateCoordsEnd(x, y);\n      onSwipeStart == null ? void 0 : onSwipeStart(e);\n    }, listenerOptions),\n    useEventListener(target, \"touchmove\", (e) => {\n      const [x, y] = getTouchEventCoords(e);\n      updateCoordsEnd(x, y);\n      if (!isSwiping.value && isThresholdExceeded.value)\n        isSwiping.value = true;\n      if (isSwiping.value)\n        onSwipe == null ? void 0 : onSwipe(e);\n    }, listenerOptions),\n    useEventListener(target, \"touchend\", onTouchEnd, listenerOptions),\n    useEventListener(target, \"touchcancel\", onTouchEnd, listenerOptions)\n  ];\n  const stop = () => stops.forEach((s) => s());\n  return {\n    isPassiveEventSupported,\n    isSwiping,\n    direction,\n    coordsStart,\n    coordsEnd,\n    lengthX: diffX,\n    lengthY: diffY,\n    stop\n  };\n}\nfunction checkPassiveEventSupport(document) {\n  if (!document)\n    return false;\n  let supportsPassive = false;\n  const optionsBlock = {\n    get passive() {\n      supportsPassive = true;\n      return false;\n    }\n  };\n  document.addEventListener(\"x\", noop, optionsBlock);\n  document.removeEventListener(\"x\", noop);\n  return supportsPassive;\n}\n\nfunction usePointerSwipe(target, options = {}) {\n  const targetRef = resolveRef(target);\n  const {\n    threshold = 50,\n    onSwipe,\n    onSwipeEnd,\n    onSwipeStart\n  } = options;\n  const posStart = reactive({ x: 0, y: 0 });\n  const updatePosStart = (x, y) => {\n    posStart.x = x;\n    posStart.y = y;\n  };\n  const posEnd = reactive({ x: 0, y: 0 });\n  const updatePosEnd = (x, y) => {\n    posEnd.x = x;\n    posEnd.y = y;\n  };\n  const distanceX = computed(() => posStart.x - posEnd.x);\n  const distanceY = computed(() => posStart.y - posEnd.y);\n  const { max, abs } = Math;\n  const isThresholdExceeded = computed(() => max(abs(distanceX.value), abs(distanceY.value)) >= threshold);\n  const isSwiping = ref(false);\n  const isPointerDown = ref(false);\n  const direction = computed(() => {\n    if (!isThresholdExceeded.value)\n      return SwipeDirection.NONE;\n    if (abs(distanceX.value) > abs(distanceY.value)) {\n      return distanceX.value > 0 ? SwipeDirection.LEFT : SwipeDirection.RIGHT;\n    } else {\n      return distanceY.value > 0 ? SwipeDirection.UP : SwipeDirection.DOWN;\n    }\n  });\n  const eventIsAllowed = (e) => {\n    var _a, _b, _c;\n    const isReleasingButton = e.buttons === 0;\n    const isPrimaryButton = e.buttons === 1;\n    return (_c = (_b = (_a = options.pointerTypes) == null ? void 0 : _a.includes(e.pointerType)) != null ? _b : isReleasingButton || isPrimaryButton) != null ? _c : true;\n  };\n  const stops = [\n    useEventListener(target, \"pointerdown\", (e) => {\n      var _a, _b;\n      if (!eventIsAllowed(e))\n        return;\n      isPointerDown.value = true;\n      (_b = (_a = targetRef.value) == null ? void 0 : _a.style) == null ? void 0 : _b.setProperty(\"touch-action\", \"none\");\n      const eventTarget = e.target;\n      eventTarget == null ? void 0 : eventTarget.setPointerCapture(e.pointerId);\n      const { clientX: x, clientY: y } = e;\n      updatePosStart(x, y);\n      updatePosEnd(x, y);\n      onSwipeStart == null ? void 0 : onSwipeStart(e);\n    }),\n    useEventListener(target, \"pointermove\", (e) => {\n      if (!eventIsAllowed(e))\n        return;\n      if (!isPointerDown.value)\n        return;\n      const { clientX: x, clientY: y } = e;\n      updatePosEnd(x, y);\n      if (!isSwiping.value && isThresholdExceeded.value)\n        isSwiping.value = true;\n      if (isSwiping.value)\n        onSwipe == null ? void 0 : onSwipe(e);\n    }),\n    useEventListener(target, \"pointerup\", (e) => {\n      var _a, _b;\n      if (!eventIsAllowed(e))\n        return;\n      if (isSwiping.value)\n        onSwipeEnd == null ? void 0 : onSwipeEnd(e, direction.value);\n      isPointerDown.value = false;\n      isSwiping.value = false;\n      (_b = (_a = targetRef.value) == null ? void 0 : _a.style) == null ? void 0 : _b.setProperty(\"touch-action\", \"initial\");\n    })\n  ];\n  const stop = () => stops.forEach((s) => s());\n  return {\n    isSwiping: readonly(isSwiping),\n    direction: readonly(direction),\n    posStart: readonly(posStart),\n    posEnd: readonly(posEnd),\n    distanceX,\n    distanceY,\n    stop\n  };\n}\n\nfunction usePreferredColorScheme(options) {\n  const isLight = useMediaQuery(\"(prefers-color-scheme: light)\", options);\n  const isDark = useMediaQuery(\"(prefers-color-scheme: dark)\", options);\n  return computed(() => {\n    if (isDark.value)\n      return \"dark\";\n    if (isLight.value)\n      return \"light\";\n    return \"no-preference\";\n  });\n}\n\nfunction usePreferredContrast(options) {\n  const isMore = useMediaQuery(\"(prefers-contrast: more)\", options);\n  const isLess = useMediaQuery(\"(prefers-contrast: less)\", options);\n  const isCustom = useMediaQuery(\"(prefers-contrast: custom)\", options);\n  return computed(() => {\n    if (isMore.value)\n      return \"more\";\n    if (isLess.value)\n      return \"less\";\n    if (isCustom.value)\n      return \"custom\";\n    return \"no-preference\";\n  });\n}\n\nfunction usePreferredLanguages(options = {}) {\n  const { window = defaultWindow } = options;\n  if (!window)\n    return ref([\"en\"]);\n  const navigator = window.navigator;\n  const value = ref(navigator.languages);\n  useEventListener(window, \"languagechange\", () => {\n    value.value = navigator.languages;\n  });\n  return value;\n}\n\nfunction usePreferredReducedMotion(options) {\n  const isReduced = useMediaQuery(\"(prefers-reduced-motion: reduce)\", options);\n  return computed(() => {\n    if (isReduced.value)\n      return \"reduce\";\n    return \"no-preference\";\n  });\n}\n\nfunction usePrevious(value, initialValue) {\n  const previous = shallowRef(initialValue);\n  watch(resolveRef(value), (_, oldValue) => {\n    previous.value = oldValue;\n  }, { flush: \"sync\" });\n  return readonly(previous);\n}\n\nconst useScreenOrientation = (options = {}) => {\n  const {\n    window = defaultWindow\n  } = options;\n  const isSupported = useSupported(() => window && \"screen\" in window && \"orientation\" in window.screen);\n  const screenOrientation = isSupported.value ? window.screen.orientation : {};\n  const orientation = ref(screenOrientation.type);\n  const angle = ref(screenOrientation.angle || 0);\n  if (isSupported.value) {\n    useEventListener(window, \"orientationchange\", () => {\n      orientation.value = screenOrientation.type;\n      angle.value = screenOrientation.angle;\n    });\n  }\n  const lockOrientation = (type) => {\n    if (!isSupported.value)\n      return Promise.reject(new Error(\"Not supported\"));\n    return screenOrientation.lock(type);\n  };\n  const unlockOrientation = () => {\n    if (isSupported.value)\n      screenOrientation.unlock();\n  };\n  return {\n    isSupported,\n    orientation,\n    angle,\n    lockOrientation,\n    unlockOrientation\n  };\n};\n\nconst topVarName = \"--vueuse-safe-area-top\";\nconst rightVarName = \"--vueuse-safe-area-right\";\nconst bottomVarName = \"--vueuse-safe-area-bottom\";\nconst leftVarName = \"--vueuse-safe-area-left\";\nfunction useScreenSafeArea() {\n  const top = ref(\"\");\n  const right = ref(\"\");\n  const bottom = ref(\"\");\n  const left = ref(\"\");\n  if (isClient) {\n    const topCssVar = useCssVar(topVarName);\n    const rightCssVar = useCssVar(rightVarName);\n    const bottomCssVar = useCssVar(bottomVarName);\n    const leftCssVar = useCssVar(leftVarName);\n    topCssVar.value = \"env(safe-area-inset-top, 0px)\";\n    rightCssVar.value = \"env(safe-area-inset-right, 0px)\";\n    bottomCssVar.value = \"env(safe-area-inset-bottom, 0px)\";\n    leftCssVar.value = \"env(safe-area-inset-left, 0px)\";\n    update();\n    useEventListener(\"resize\", useDebounceFn(update));\n  }\n  function update() {\n    top.value = getValue(topVarName);\n    right.value = getValue(rightVarName);\n    bottom.value = getValue(bottomVarName);\n    left.value = getValue(leftVarName);\n  }\n  return {\n    top,\n    right,\n    bottom,\n    left,\n    update\n  };\n}\nfunction getValue(position) {\n  return getComputedStyle(document.documentElement).getPropertyValue(position);\n}\n\nfunction useScriptTag(src, onLoaded = noop, options = {}) {\n  const {\n    immediate = true,\n    manual = false,\n    type = \"text/javascript\",\n    async = true,\n    crossOrigin,\n    referrerPolicy,\n    noModule,\n    defer,\n    document = defaultDocument,\n    attrs = {}\n  } = options;\n  const scriptTag = ref(null);\n  let _promise = null;\n  const loadScript = (waitForScriptLoad) => new Promise((resolve, reject) => {\n    const resolveWithElement = (el2) => {\n      scriptTag.value = el2;\n      resolve(el2);\n      return el2;\n    };\n    if (!document) {\n      resolve(false);\n      return;\n    }\n    let shouldAppend = false;\n    let el = document.querySelector(`script[src=\"${resolveUnref(src)}\"]`);\n    if (!el) {\n      el = document.createElement(\"script\");\n      el.type = type;\n      el.async = async;\n      el.src = resolveUnref(src);\n      if (defer)\n        el.defer = defer;\n      if (crossOrigin)\n        el.crossOrigin = crossOrigin;\n      if (noModule)\n        el.noModule = noModule;\n      if (referrerPolicy)\n        el.referrerPolicy = referrerPolicy;\n      Object.entries(attrs).forEach(([name, value]) => el == null ? void 0 : el.setAttribute(name, value));\n      shouldAppend = true;\n    } else if (el.hasAttribute(\"data-loaded\")) {\n      resolveWithElement(el);\n    }\n    el.addEventListener(\"error\", (event) => reject(event));\n    el.addEventListener(\"abort\", (event) => reject(event));\n    el.addEventListener(\"load\", () => {\n      el.setAttribute(\"data-loaded\", \"true\");\n      onLoaded(el);\n      resolveWithElement(el);\n    });\n    if (shouldAppend)\n      el = document.head.appendChild(el);\n    if (!waitForScriptLoad)\n      resolveWithElement(el);\n  });\n  const load = (waitForScriptLoad = true) => {\n    if (!_promise)\n      _promise = loadScript(waitForScriptLoad);\n    return _promise;\n  };\n  const unload = () => {\n    if (!document)\n      return;\n    _promise = null;\n    if (scriptTag.value)\n      scriptTag.value = null;\n    const el = document.querySelector(`script[src=\"${resolveUnref(src)}\"]`);\n    if (el)\n      document.head.removeChild(el);\n  };\n  if (immediate && !manual)\n    tryOnMounted(load);\n  if (!manual)\n    tryOnUnmounted(unload);\n  return { scriptTag, load, unload };\n}\n\nfunction checkOverflowScroll(ele) {\n  const style = window.getComputedStyle(ele);\n  if (style.overflowX === \"scroll\" || style.overflowY === \"scroll\" || style.overflowX === \"auto\" && ele.clientHeight < ele.scrollHeight || style.overflowY === \"auto\" && ele.clientWidth < ele.scrollWidth) {\n    return true;\n  } else {\n    const parent = ele.parentNode;\n    if (!parent || parent.tagName === \"BODY\")\n      return false;\n    return checkOverflowScroll(parent);\n  }\n}\nfunction preventDefault(rawEvent) {\n  const e = rawEvent || window.event;\n  const _target = e.target;\n  if (checkOverflowScroll(_target))\n    return false;\n  if (e.touches.length > 1)\n    return true;\n  if (e.preventDefault)\n    e.preventDefault();\n  return false;\n}\nfunction useScrollLock(element, initialState = false) {\n  const isLocked = ref(initialState);\n  let stopTouchMoveListener = null;\n  let initialOverflow;\n  watch(resolveRef(element), (el) => {\n    if (el) {\n      const ele = el;\n      initialOverflow = ele.style.overflow;\n      if (isLocked.value)\n        ele.style.overflow = \"hidden\";\n    }\n  }, {\n    immediate: true\n  });\n  const lock = () => {\n    const ele = resolveUnref(element);\n    if (!ele || isLocked.value)\n      return;\n    if (isIOS) {\n      stopTouchMoveListener = useEventListener(ele, \"touchmove\", (e) => {\n        preventDefault(e);\n      }, { passive: false });\n    }\n    ele.style.overflow = \"hidden\";\n    isLocked.value = true;\n  };\n  const unlock = () => {\n    const ele = resolveUnref(element);\n    if (!ele || !isLocked.value)\n      return;\n    isIOS && (stopTouchMoveListener == null ? void 0 : stopTouchMoveListener());\n    ele.style.overflow = initialOverflow;\n    isLocked.value = false;\n  };\n  tryOnScopeDispose(unlock);\n  return computed({\n    get() {\n      return isLocked.value;\n    },\n    set(v) {\n      if (v)\n        lock();\n      else\n        unlock();\n    }\n  });\n}\n\nfunction useSessionStorage(key, initialValue, options = {}) {\n  const { window = defaultWindow } = options;\n  return useStorage(key, initialValue, window == null ? void 0 : window.sessionStorage, options);\n}\n\nvar __defProp$5 = Object.defineProperty;\nvar __getOwnPropSymbols$5 = Object.getOwnPropertySymbols;\nvar __hasOwnProp$5 = Object.prototype.hasOwnProperty;\nvar __propIsEnum$5 = Object.prototype.propertyIsEnumerable;\nvar __defNormalProp$5 = (obj, key, value) => key in obj ? __defProp$5(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;\nvar __spreadValues$5 = (a, b) => {\n  for (var prop in b || (b = {}))\n    if (__hasOwnProp$5.call(b, prop))\n      __defNormalProp$5(a, prop, b[prop]);\n  if (__getOwnPropSymbols$5)\n    for (var prop of __getOwnPropSymbols$5(b)) {\n      if (__propIsEnum$5.call(b, prop))\n        __defNormalProp$5(a, prop, b[prop]);\n    }\n  return a;\n};\nfunction useShare(shareOptions = {}, options = {}) {\n  const { navigator = defaultNavigator } = options;\n  const _navigator = navigator;\n  const isSupported = useSupported(() => _navigator && \"canShare\" in _navigator);\n  const share = async (overrideOptions = {}) => {\n    if (isSupported.value) {\n      const data = __spreadValues$5(__spreadValues$5({}, resolveUnref(shareOptions)), resolveUnref(overrideOptions));\n      let granted = true;\n      if (data.files && _navigator.canShare)\n        granted = _navigator.canShare({ files: data.files });\n      if (granted)\n        return _navigator.share(data);\n    }\n  };\n  return {\n    isSupported,\n    share\n  };\n}\n\nconst defaultSortFn = (source, compareFn) => source.sort(compareFn);\nconst defaultCompare = (a, b) => a - b;\nfunction useSorted(...args) {\n  var _a, _b, _c, _d;\n  const [source] = args;\n  let compareFn = defaultCompare;\n  let options = {};\n  if (args.length === 2) {\n    if (typeof args[1] === \"object\") {\n      options = args[1];\n      compareFn = (_a = options.compareFn) != null ? _a : defaultCompare;\n    } else {\n      compareFn = (_b = args[1]) != null ? _b : defaultCompare;\n    }\n  } else if (args.length > 2) {\n    compareFn = (_c = args[1]) != null ? _c : defaultCompare;\n    options = (_d = args[2]) != null ? _d : {};\n  }\n  const {\n    dirty = false,\n    sortFn = defaultSortFn\n  } = options;\n  if (!dirty)\n    return computed(() => sortFn([...unref(source)], compareFn));\n  watchEffect(() => {\n    const result = sortFn(unref(source), compareFn);\n    if (isRef(source))\n      source.value = result;\n    else\n      source.splice(0, source.length, ...result);\n  });\n  return source;\n}\n\nfunction useSpeechRecognition(options = {}) {\n  const {\n    interimResults = true,\n    continuous = true,\n    window = defaultWindow\n  } = options;\n  const lang = resolveRef(options.lang || \"en-US\");\n  const isListening = ref(false);\n  const isFinal = ref(false);\n  const result = ref(\"\");\n  const error = shallowRef(void 0);\n  const toggle = (value = !isListening.value) => {\n    isListening.value = value;\n  };\n  const start = () => {\n    isListening.value = true;\n  };\n  const stop = () => {\n    isListening.value = false;\n  };\n  const SpeechRecognition = window && (window.SpeechRecognition || window.webkitSpeechRecognition);\n  const isSupported = useSupported(() => SpeechRecognition);\n  let recognition;\n  if (isSupported.value) {\n    recognition = new SpeechRecognition();\n    recognition.continuous = continuous;\n    recognition.interimResults = interimResults;\n    recognition.lang = unref(lang);\n    recognition.onstart = () => {\n      isFinal.value = false;\n    };\n    watch(lang, (lang2) => {\n      if (recognition && !isListening.value)\n        recognition.lang = lang2;\n    });\n    recognition.onresult = (event) => {\n      const transcript = Array.from(event.results).map((result2) => {\n        isFinal.value = result2.isFinal;\n        return result2[0];\n      }).map((result2) => result2.transcript).join(\"\");\n      result.value = transcript;\n      error.value = void 0;\n    };\n    recognition.onerror = (event) => {\n      error.value = event;\n    };\n    recognition.onend = () => {\n      isListening.value = false;\n      recognition.lang = unref(lang);\n    };\n    watch(isListening, () => {\n      if (isListening.value)\n        recognition.start();\n      else\n        recognition.stop();\n    });\n  }\n  tryOnScopeDispose(() => {\n    isListening.value = false;\n  });\n  return {\n    isSupported,\n    isListening,\n    isFinal,\n    recognition,\n    result,\n    error,\n    toggle,\n    start,\n    stop\n  };\n}\n\nfunction useSpeechSynthesis(text, options = {}) {\n  const {\n    pitch = 1,\n    rate = 1,\n    volume = 1,\n    window = defaultWindow\n  } = options;\n  const synth = window && window.speechSynthesis;\n  const isSupported = useSupported(() => synth);\n  const isPlaying = ref(false);\n  const status = ref(\"init\");\n  const spokenText = resolveRef(text || \"\");\n  const lang = resolveRef(options.lang || \"en-US\");\n  const error = shallowRef(void 0);\n  const toggle = (value = !isPlaying.value) => {\n    isPlaying.value = value;\n  };\n  const bindEventsForUtterance = (utterance2) => {\n    utterance2.lang = unref(lang);\n    utterance2.voice = unref(options.voice) || null;\n    utterance2.pitch = pitch;\n    utterance2.rate = rate;\n    utterance2.volume = volume;\n    utterance2.onstart = () => {\n      isPlaying.value = true;\n      status.value = \"play\";\n    };\n    utterance2.onpause = () => {\n      isPlaying.value = false;\n      status.value = \"pause\";\n    };\n    utterance2.onresume = () => {\n      isPlaying.value = true;\n      status.value = \"play\";\n    };\n    utterance2.onend = () => {\n      isPlaying.value = false;\n      status.value = \"end\";\n    };\n    utterance2.onerror = (event) => {\n      error.value = event;\n    };\n  };\n  const utterance = computed(() => {\n    isPlaying.value = false;\n    status.value = \"init\";\n    const newUtterance = new SpeechSynthesisUtterance(spokenText.value);\n    bindEventsForUtterance(newUtterance);\n    return newUtterance;\n  });\n  const speak = () => {\n    synth.cancel();\n    utterance && synth.speak(utterance.value);\n  };\n  const stop = () => {\n    synth.cancel();\n    isPlaying.value = false;\n  };\n  if (isSupported.value) {\n    bindEventsForUtterance(utterance.value);\n    watch(lang, (lang2) => {\n      if (utterance.value && !isPlaying.value)\n        utterance.value.lang = lang2;\n    });\n    if (options.voice) {\n      watch(options.voice, () => {\n        synth.cancel();\n      });\n    }\n    watch(isPlaying, () => {\n      if (isPlaying.value)\n        synth.resume();\n      else\n        synth.pause();\n    });\n  }\n  tryOnScopeDispose(() => {\n    isPlaying.value = false;\n  });\n  return {\n    isSupported,\n    isPlaying,\n    status,\n    utterance,\n    error,\n    stop,\n    toggle,\n    speak\n  };\n}\n\nfunction useStepper(steps, initialStep) {\n  const stepsRef = ref(steps);\n  const stepNames = computed(() => Array.isArray(stepsRef.value) ? stepsRef.value : Object.keys(stepsRef.value));\n  const index = ref(stepNames.value.indexOf(initialStep != null ? initialStep : stepNames.value[0]));\n  const current = computed(() => at(index.value));\n  const isFirst = computed(() => index.value === 0);\n  const isLast = computed(() => index.value === stepNames.value.length - 1);\n  const next = computed(() => stepNames.value[index.value + 1]);\n  const previous = computed(() => stepNames.value[index.value - 1]);\n  function at(index2) {\n    if (Array.isArray(stepsRef.value))\n      return stepsRef.value[index2];\n    return stepsRef.value[stepNames.value[index2]];\n  }\n  function get(step) {\n    if (!stepNames.value.includes(step))\n      return;\n    return at(stepNames.value.indexOf(step));\n  }\n  function goTo(step) {\n    if (stepNames.value.includes(step))\n      index.value = stepNames.value.indexOf(step);\n  }\n  function goToNext() {\n    if (isLast.value)\n      return;\n    index.value++;\n  }\n  function goToPrevious() {\n    if (isFirst.value)\n      return;\n    index.value--;\n  }\n  function goBackTo(step) {\n    if (isAfter(step))\n      goTo(step);\n  }\n  function isNext(step) {\n    return stepNames.value.indexOf(step) === index.value + 1;\n  }\n  function isPrevious(step) {\n    return stepNames.value.indexOf(step) === index.value - 1;\n  }\n  function isCurrent(step) {\n    return stepNames.value.indexOf(step) === index.value;\n  }\n  function isBefore(step) {\n    return index.value < stepNames.value.indexOf(step);\n  }\n  function isAfter(step) {\n    return index.value > stepNames.value.indexOf(step);\n  }\n  return {\n    steps: stepsRef,\n    stepNames,\n    index,\n    current,\n    next,\n    previous,\n    isFirst,\n    isLast,\n    at,\n    get,\n    goTo,\n    goToNext,\n    goToPrevious,\n    goBackTo,\n    isNext,\n    isPrevious,\n    isCurrent,\n    isBefore,\n    isAfter\n  };\n}\n\nvar __defProp$4 = Object.defineProperty;\nvar __getOwnPropSymbols$4 = Object.getOwnPropertySymbols;\nvar __hasOwnProp$4 = Object.prototype.hasOwnProperty;\nvar __propIsEnum$4 = Object.prototype.propertyIsEnumerable;\nvar __defNormalProp$4 = (obj, key, value) => key in obj ? __defProp$4(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;\nvar __spreadValues$4 = (a, b) => {\n  for (var prop in b || (b = {}))\n    if (__hasOwnProp$4.call(b, prop))\n      __defNormalProp$4(a, prop, b[prop]);\n  if (__getOwnPropSymbols$4)\n    for (var prop of __getOwnPropSymbols$4(b)) {\n      if (__propIsEnum$4.call(b, prop))\n        __defNormalProp$4(a, prop, b[prop]);\n    }\n  return a;\n};\nfunction useStorageAsync(key, initialValue, storage, options = {}) {\n  var _a;\n  const {\n    flush = \"pre\",\n    deep = true,\n    listenToStorageChanges = true,\n    writeDefaults = true,\n    mergeDefaults = false,\n    shallow,\n    window = defaultWindow,\n    eventFilter,\n    onError = (e) => {\n      console.error(e);\n    }\n  } = options;\n  const rawInit = resolveUnref(initialValue);\n  const type = guessSerializerType(rawInit);\n  const data = (shallow ? shallowRef : ref)(initialValue);\n  const serializer = (_a = options.serializer) != null ? _a : StorageSerializers[type];\n  if (!storage) {\n    try {\n      storage = getSSRHandler(\"getDefaultStorage\", () => {\n        var _a2;\n        return (_a2 = defaultWindow) == null ? void 0 : _a2.localStorage;\n      })();\n    } catch (e) {\n      onError(e);\n    }\n  }\n  async function read(event) {\n    if (!storage || event && event.key !== key)\n      return;\n    try {\n      const rawValue = event ? event.newValue : await storage.getItem(key);\n      if (rawValue == null) {\n        data.value = rawInit;\n        if (writeDefaults && rawInit !== null)\n          await storage.setItem(key, await serializer.write(rawInit));\n      } else if (mergeDefaults) {\n        const value = await serializer.read(rawValue);\n        if (isFunction(mergeDefaults))\n          data.value = mergeDefaults(value, rawInit);\n        else if (type === \"object\" && !Array.isArray(value))\n          data.value = __spreadValues$4(__spreadValues$4({}, rawInit), value);\n        else\n          data.value = value;\n      } else {\n        data.value = await serializer.read(rawValue);\n      }\n    } catch (e) {\n      onError(e);\n    }\n  }\n  read();\n  if (window && listenToStorageChanges)\n    useEventListener(window, \"storage\", (e) => setTimeout(() => read(e), 0));\n  if (storage) {\n    watchWithFilter(data, async () => {\n      try {\n        if (data.value == null)\n          await storage.removeItem(key);\n        else\n          await storage.setItem(key, await serializer.write(data.value));\n      } catch (e) {\n        onError(e);\n      }\n    }, {\n      flush,\n      deep,\n      eventFilter\n    });\n  }\n  return data;\n}\n\nlet _id = 0;\nfunction useStyleTag(css, options = {}) {\n  const isLoaded = ref(false);\n  const {\n    document = defaultDocument,\n    immediate = true,\n    manual = false,\n    id = `vueuse_styletag_${++_id}`\n  } = options;\n  const cssRef = ref(css);\n  let stop = () => {\n  };\n  const load = () => {\n    if (!document)\n      return;\n    const el = document.getElementById(id) || document.createElement(\"style\");\n    if (!el.isConnected) {\n      el.type = \"text/css\";\n      el.id = id;\n      if (options.media)\n        el.media = options.media;\n      document.head.appendChild(el);\n    }\n    if (isLoaded.value)\n      return;\n    stop = watch(cssRef, (value) => {\n      el.textContent = value;\n    }, { immediate: true });\n    isLoaded.value = true;\n  };\n  const unload = () => {\n    if (!document || !isLoaded.value)\n      return;\n    stop();\n    document.head.removeChild(document.getElementById(id));\n    isLoaded.value = false;\n  };\n  if (immediate && !manual)\n    tryOnMounted(load);\n  if (!manual)\n    tryOnScopeDispose(unload);\n  return {\n    id,\n    css: cssRef,\n    unload,\n    load,\n    isLoaded: readonly(isLoaded)\n  };\n}\n\nfunction useTemplateRefsList() {\n  const refs = ref([]);\n  refs.value.set = (el) => {\n    if (el)\n      refs.value.push(el);\n  };\n  onBeforeUpdate(() => {\n    refs.value.length = 0;\n  });\n  return refs;\n}\n\nfunction useTextDirection(options = {}) {\n  const {\n    document = defaultDocument,\n    selector = \"html\",\n    observe = false,\n    initialValue = \"ltr\"\n  } = options;\n  function getValue() {\n    var _a, _b;\n    return (_b = (_a = document == null ? void 0 : document.querySelector(selector)) == null ? void 0 : _a.getAttribute(\"dir\")) != null ? _b : initialValue;\n  }\n  const dir = ref(getValue());\n  tryOnMounted(() => dir.value = getValue());\n  if (observe && document) {\n    useMutationObserver(document.querySelector(selector), () => dir.value = getValue(), { attributes: true });\n  }\n  return computed({\n    get() {\n      return dir.value;\n    },\n    set(v) {\n      var _a, _b;\n      dir.value = v;\n      if (!document)\n        return;\n      if (dir.value)\n        (_a = document.querySelector(selector)) == null ? void 0 : _a.setAttribute(\"dir\", dir.value);\n      else\n        (_b = document.querySelector(selector)) == null ? void 0 : _b.removeAttribute(\"dir\");\n    }\n  });\n}\n\nfunction getRangesFromSelection(selection) {\n  var _a;\n  const rangeCount = (_a = selection.rangeCount) != null ? _a : 0;\n  const ranges = new Array(rangeCount);\n  for (let i = 0; i < rangeCount; i++) {\n    const range = selection.getRangeAt(i);\n    ranges[i] = range;\n  }\n  return ranges;\n}\nfunction useTextSelection(options = {}) {\n  const {\n    window = defaultWindow\n  } = options;\n  const selection = ref(null);\n  const text = computed(() => {\n    var _a, _b;\n    return (_b = (_a = selection.value) == null ? void 0 : _a.toString()) != null ? _b : \"\";\n  });\n  const ranges = computed(() => selection.value ? getRangesFromSelection(selection.value) : []);\n  const rects = computed(() => ranges.value.map((range) => range.getBoundingClientRect()));\n  function onSelectionChange() {\n    selection.value = null;\n    if (window)\n      selection.value = window.getSelection();\n  }\n  if (window)\n    useEventListener(window.document, \"selectionchange\", onSelectionChange);\n  return {\n    text,\n    rects,\n    ranges,\n    selection\n  };\n}\n\nfunction useTextareaAutosize(options) {\n  const textarea = ref(options == null ? void 0 : options.element);\n  const input = ref(options == null ? void 0 : options.input);\n  function triggerResize() {\n    var _a, _b;\n    if (!textarea.value)\n      return;\n    textarea.value.style.height = \"1px\";\n    textarea.value.style.height = `${(_a = textarea.value) == null ? void 0 : _a.scrollHeight}px`;\n    (_b = options == null ? void 0 : options.onResize) == null ? void 0 : _b.call(options);\n  }\n  watch([input, textarea], triggerResize, { immediate: true });\n  useResizeObserver(textarea, () => triggerResize());\n  if (options == null ? void 0 : options.watch)\n    watch(options.watch, triggerResize, { immediate: true, deep: true });\n  return {\n    textarea,\n    input,\n    triggerResize\n  };\n}\n\nvar __defProp$3 = Object.defineProperty;\nvar __defProps = Object.defineProperties;\nvar __getOwnPropDescs = Object.getOwnPropertyDescriptors;\nvar __getOwnPropSymbols$3 = Object.getOwnPropertySymbols;\nvar __hasOwnProp$3 = Object.prototype.hasOwnProperty;\nvar __propIsEnum$3 = Object.prototype.propertyIsEnumerable;\nvar __defNormalProp$3 = (obj, key, value) => key in obj ? __defProp$3(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;\nvar __spreadValues$3 = (a, b) => {\n  for (var prop in b || (b = {}))\n    if (__hasOwnProp$3.call(b, prop))\n      __defNormalProp$3(a, prop, b[prop]);\n  if (__getOwnPropSymbols$3)\n    for (var prop of __getOwnPropSymbols$3(b)) {\n      if (__propIsEnum$3.call(b, prop))\n        __defNormalProp$3(a, prop, b[prop]);\n    }\n  return a;\n};\nvar __spreadProps = (a, b) => __defProps(a, __getOwnPropDescs(b));\nfunction useThrottledRefHistory(source, options = {}) {\n  const { throttle = 200, trailing = true } = options;\n  const filter = throttleFilter(throttle, trailing);\n  const history = useRefHistory(source, __spreadProps(__spreadValues$3({}, options), { eventFilter: filter }));\n  return __spreadValues$3({}, history);\n}\n\nvar __defProp$2 = Object.defineProperty;\nvar __getOwnPropSymbols$2 = Object.getOwnPropertySymbols;\nvar __hasOwnProp$2 = Object.prototype.hasOwnProperty;\nvar __propIsEnum$2 = Object.prototype.propertyIsEnumerable;\nvar __defNormalProp$2 = (obj, key, value) => key in obj ? __defProp$2(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;\nvar __spreadValues$2 = (a, b) => {\n  for (var prop in b || (b = {}))\n    if (__hasOwnProp$2.call(b, prop))\n      __defNormalProp$2(a, prop, b[prop]);\n  if (__getOwnPropSymbols$2)\n    for (var prop of __getOwnPropSymbols$2(b)) {\n      if (__propIsEnum$2.call(b, prop))\n        __defNormalProp$2(a, prop, b[prop]);\n    }\n  return a;\n};\nvar __objRest = (source, exclude) => {\n  var target = {};\n  for (var prop in source)\n    if (__hasOwnProp$2.call(source, prop) && exclude.indexOf(prop) < 0)\n      target[prop] = source[prop];\n  if (source != null && __getOwnPropSymbols$2)\n    for (var prop of __getOwnPropSymbols$2(source)) {\n      if (exclude.indexOf(prop) < 0 && __propIsEnum$2.call(source, prop))\n        target[prop] = source[prop];\n    }\n  return target;\n};\nconst DEFAULT_UNITS = [\n  { max: 6e4, value: 1e3, name: \"second\" },\n  { max: 276e4, value: 6e4, name: \"minute\" },\n  { max: 72e6, value: 36e5, name: \"hour\" },\n  { max: 5184e5, value: 864e5, name: \"day\" },\n  { max: 24192e5, value: 6048e5, name: \"week\" },\n  { max: 28512e6, value: 2592e6, name: \"month\" },\n  { max: Infinity, value: 31536e6, name: \"year\" }\n];\nconst DEFAULT_MESSAGES = {\n  justNow: \"just now\",\n  past: (n) => n.match(/\\d/) ? `${n} ago` : n,\n  future: (n) => n.match(/\\d/) ? `in ${n}` : n,\n  month: (n, past) => n === 1 ? past ? \"last month\" : \"next month\" : `${n} month${n > 1 ? \"s\" : \"\"}`,\n  year: (n, past) => n === 1 ? past ? \"last year\" : \"next year\" : `${n} year${n > 1 ? \"s\" : \"\"}`,\n  day: (n, past) => n === 1 ? past ? \"yesterday\" : \"tomorrow\" : `${n} day${n > 1 ? \"s\" : \"\"}`,\n  week: (n, past) => n === 1 ? past ? \"last week\" : \"next week\" : `${n} week${n > 1 ? \"s\" : \"\"}`,\n  hour: (n) => `${n} hour${n > 1 ? \"s\" : \"\"}`,\n  minute: (n) => `${n} minute${n > 1 ? \"s\" : \"\"}`,\n  second: (n) => `${n} second${n > 1 ? \"s\" : \"\"}`,\n  invalid: \"\"\n};\nconst DEFAULT_FORMATTER = (date) => date.toISOString().slice(0, 10);\nfunction useTimeAgo(time, options = {}) {\n  const {\n    controls: exposeControls = false,\n    updateInterval = 3e4\n  } = options;\n  const _a = useNow({ interval: updateInterval, controls: true }), { now } = _a, controls = __objRest(_a, [\"now\"]);\n  const timeAgo = computed(() => formatTimeAgo(new Date(resolveUnref(time)), options, unref(now.value)));\n  if (exposeControls) {\n    return __spreadValues$2({\n      timeAgo\n    }, controls);\n  } else {\n    return timeAgo;\n  }\n}\nfunction formatTimeAgo(from, options = {}, now = Date.now()) {\n  var _a;\n  const {\n    max,\n    messages = DEFAULT_MESSAGES,\n    fullDateFormatter = DEFAULT_FORMATTER,\n    units = DEFAULT_UNITS,\n    showSecond = false,\n    rounding = \"round\"\n  } = options;\n  const roundFn = typeof rounding === \"number\" ? (n) => +n.toFixed(rounding) : Math[rounding];\n  const diff = +now - +from;\n  const absDiff = Math.abs(diff);\n  function getValue(diff2, unit) {\n    return roundFn(Math.abs(diff2) / unit.value);\n  }\n  function format(diff2, unit) {\n    const val = getValue(diff2, unit);\n    const past = diff2 > 0;\n    const str = applyFormat(unit.name, val, past);\n    return applyFormat(past ? \"past\" : \"future\", str, past);\n  }\n  function applyFormat(name, val, isPast) {\n    const formatter = messages[name];\n    if (typeof formatter === \"function\")\n      return formatter(val, isPast);\n    return formatter.replace(\"{0}\", val.toString());\n  }\n  if (absDiff < 6e4 && !showSecond)\n    return messages.justNow;\n  if (typeof max === \"number\" && absDiff > max)\n    return fullDateFormatter(new Date(from));\n  if (typeof max === \"string\") {\n    const unitMax = (_a = units.find((i) => i.name === max)) == null ? void 0 : _a.max;\n    if (unitMax && absDiff > unitMax)\n      return fullDateFormatter(new Date(from));\n  }\n  for (const [idx, unit] of units.entries()) {\n    const val = getValue(diff, unit);\n    if (val <= 0 && units[idx - 1])\n      return format(diff, units[idx - 1]);\n    if (absDiff < unit.max)\n      return format(diff, unit);\n  }\n  return messages.invalid;\n}\n\nfunction useTimeoutPoll(fn, interval, timeoutPollOptions) {\n  const { start } = useTimeoutFn(loop, interval);\n  const isActive = ref(false);\n  async function loop() {\n    if (!isActive.value)\n      return;\n    await fn();\n    start();\n  }\n  function resume() {\n    if (!isActive.value) {\n      isActive.value = true;\n      loop();\n    }\n  }\n  function pause() {\n    isActive.value = false;\n  }\n  if (timeoutPollOptions == null ? void 0 : timeoutPollOptions.immediate)\n    resume();\n  tryOnScopeDispose(pause);\n  return {\n    isActive,\n    pause,\n    resume\n  };\n}\n\nvar __defProp$1 = Object.defineProperty;\nvar __getOwnPropSymbols$1 = Object.getOwnPropertySymbols;\nvar __hasOwnProp$1 = Object.prototype.hasOwnProperty;\nvar __propIsEnum$1 = Object.prototype.propertyIsEnumerable;\nvar __defNormalProp$1 = (obj, key, value) => key in obj ? __defProp$1(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;\nvar __spreadValues$1 = (a, b) => {\n  for (var prop in b || (b = {}))\n    if (__hasOwnProp$1.call(b, prop))\n      __defNormalProp$1(a, prop, b[prop]);\n  if (__getOwnPropSymbols$1)\n    for (var prop of __getOwnPropSymbols$1(b)) {\n      if (__propIsEnum$1.call(b, prop))\n        __defNormalProp$1(a, prop, b[prop]);\n    }\n  return a;\n};\nfunction useTimestamp(options = {}) {\n  const {\n    controls: exposeControls = false,\n    offset = 0,\n    immediate = true,\n    interval = \"requestAnimationFrame\",\n    callback\n  } = options;\n  const ts = ref(timestamp() + offset);\n  const update = () => ts.value = timestamp() + offset;\n  const cb = callback ? () => {\n    update();\n    callback(ts.value);\n  } : update;\n  const controls = interval === \"requestAnimationFrame\" ? useRafFn(cb, { immediate }) : useIntervalFn(cb, interval, { immediate });\n  if (exposeControls) {\n    return __spreadValues$1({\n      timestamp: ts\n    }, controls);\n  } else {\n    return ts;\n  }\n}\n\nfunction useTitle(newTitle = null, options = {}) {\n  var _a, _b;\n  const {\n    document = defaultDocument\n  } = options;\n  const title = resolveRef((_a = newTitle != null ? newTitle : document == null ? void 0 : document.title) != null ? _a : null);\n  const isReadonly = newTitle && isFunction(newTitle);\n  function format(t) {\n    if (!(\"titleTemplate\" in options))\n      return t;\n    const template = options.titleTemplate || \"%s\";\n    return isFunction(template) ? template(t) : unref(template).replace(/%s/g, t);\n  }\n  watch(title, (t, o) => {\n    if (t !== o && document)\n      document.title = format(isString(t) ? t : \"\");\n  }, { immediate: true });\n  if (options.observe && !options.titleTemplate && document && !isReadonly) {\n    useMutationObserver((_b = document.head) == null ? void 0 : _b.querySelector(\"title\"), () => {\n      if (document && document.title !== title.value)\n        title.value = format(document.title);\n    }, { childList: true });\n  }\n  return title;\n}\n\nvar __defProp = Object.defineProperty;\nvar __getOwnPropSymbols = Object.getOwnPropertySymbols;\nvar __hasOwnProp = Object.prototype.hasOwnProperty;\nvar __propIsEnum = Object.prototype.propertyIsEnumerable;\nvar __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;\nvar __spreadValues = (a, b) => {\n  for (var prop in b || (b = {}))\n    if (__hasOwnProp.call(b, prop))\n      __defNormalProp(a, prop, b[prop]);\n  if (__getOwnPropSymbols)\n    for (var prop of __getOwnPropSymbols(b)) {\n      if (__propIsEnum.call(b, prop))\n        __defNormalProp(a, prop, b[prop]);\n    }\n  return a;\n};\nconst _TransitionPresets = {\n  easeInSine: [0.12, 0, 0.39, 0],\n  easeOutSine: [0.61, 1, 0.88, 1],\n  easeInOutSine: [0.37, 0, 0.63, 1],\n  easeInQuad: [0.11, 0, 0.5, 0],\n  easeOutQuad: [0.5, 1, 0.89, 1],\n  easeInOutQuad: [0.45, 0, 0.55, 1],\n  easeInCubic: [0.32, 0, 0.67, 0],\n  easeOutCubic: [0.33, 1, 0.68, 1],\n  easeInOutCubic: [0.65, 0, 0.35, 1],\n  easeInQuart: [0.5, 0, 0.75, 0],\n  easeOutQuart: [0.25, 1, 0.5, 1],\n  easeInOutQuart: [0.76, 0, 0.24, 1],\n  easeInQuint: [0.64, 0, 0.78, 0],\n  easeOutQuint: [0.22, 1, 0.36, 1],\n  easeInOutQuint: [0.83, 0, 0.17, 1],\n  easeInExpo: [0.7, 0, 0.84, 0],\n  easeOutExpo: [0.16, 1, 0.3, 1],\n  easeInOutExpo: [0.87, 0, 0.13, 1],\n  easeInCirc: [0.55, 0, 1, 0.45],\n  easeOutCirc: [0, 0.55, 0.45, 1],\n  easeInOutCirc: [0.85, 0, 0.15, 1],\n  easeInBack: [0.36, 0, 0.66, -0.56],\n  easeOutBack: [0.34, 1.56, 0.64, 1],\n  easeInOutBack: [0.68, -0.6, 0.32, 1.6]\n};\nconst TransitionPresets = __spreadValues({\n  linear: identity\n}, _TransitionPresets);\nfunction createEasingFunction([p0, p1, p2, p3]) {\n  const a = (a1, a2) => 1 - 3 * a2 + 3 * a1;\n  const b = (a1, a2) => 3 * a2 - 6 * a1;\n  const c = (a1) => 3 * a1;\n  const calcBezier = (t, a1, a2) => ((a(a1, a2) * t + b(a1, a2)) * t + c(a1)) * t;\n  const getSlope = (t, a1, a2) => 3 * a(a1, a2) * t * t + 2 * b(a1, a2) * t + c(a1);\n  const getTforX = (x) => {\n    let aGuessT = x;\n    for (let i = 0; i < 4; ++i) {\n      const currentSlope = getSlope(aGuessT, p0, p2);\n      if (currentSlope === 0)\n        return aGuessT;\n      const currentX = calcBezier(aGuessT, p0, p2) - x;\n      aGuessT -= currentX / currentSlope;\n    }\n    return aGuessT;\n  };\n  return (x) => p0 === p1 && p2 === p3 ? x : calcBezier(getTforX(x), p1, p3);\n}\nfunction useTransition(source, options = {}) {\n  const {\n    delay = 0,\n    disabled = false,\n    duration = 1e3,\n    onFinished = noop,\n    onStarted = noop,\n    transition = identity\n  } = options;\n  const currentTransition = computed(() => {\n    const t = unref(transition);\n    return isFunction(t) ? t : createEasingFunction(t);\n  });\n  const sourceValue = computed(() => {\n    const s = unref(source);\n    return isNumber(s) ? s : s.map(unref);\n  });\n  const sourceVector = computed(() => isNumber(sourceValue.value) ? [sourceValue.value] : sourceValue.value);\n  const outputVector = ref(sourceVector.value.slice(0));\n  let currentDuration;\n  let diffVector;\n  let endAt;\n  let startAt;\n  let startVector;\n  const { resume, pause } = useRafFn(() => {\n    const now = Date.now();\n    const progress = clamp(1 - (endAt - now) / currentDuration, 0, 1);\n    outputVector.value = startVector.map((val, i) => {\n      var _a;\n      return val + ((_a = diffVector[i]) != null ? _a : 0) * currentTransition.value(progress);\n    });\n    if (progress >= 1) {\n      pause();\n      onFinished();\n    }\n  }, { immediate: false });\n  const start = () => {\n    pause();\n    currentDuration = unref(duration);\n    diffVector = outputVector.value.map((n, i) => {\n      var _a, _b;\n      return ((_a = sourceVector.value[i]) != null ? _a : 0) - ((_b = outputVector.value[i]) != null ? _b : 0);\n    });\n    startVector = outputVector.value.slice(0);\n    startAt = Date.now();\n    endAt = startAt + currentDuration;\n    resume();\n    onStarted();\n  };\n  const timeout = useTimeoutFn(start, delay, { immediate: false });\n  watch(sourceVector, () => {\n    if (unref(disabled))\n      return;\n    if (unref(delay) <= 0)\n      start();\n    else\n      timeout.start();\n  }, { deep: true });\n  watch(() => unref(disabled), (v) => {\n    if (v) {\n      outputVector.value = sourceVector.value.slice(0);\n      pause();\n    }\n  });\n  return computed(() => {\n    const targetVector = unref(disabled) ? sourceVector : outputVector;\n    return isNumber(sourceValue.value) ? targetVector.value[0] : targetVector.value;\n  });\n}\n\nfunction useUrlSearchParams(mode = \"history\", options = {}) {\n  const {\n    initialValue = {},\n    removeNullishValues = true,\n    removeFalsyValues = false,\n    write: enableWrite = true,\n    window = defaultWindow\n  } = options;\n  if (!window)\n    return reactive(initialValue);\n  const state = reactive({});\n  function getRawParams() {\n    if (mode === \"history\") {\n      return window.location.search || \"\";\n    } else if (mode === \"hash\") {\n      const hash = window.location.hash || \"\";\n      const index = hash.indexOf(\"?\");\n      return index > 0 ? hash.slice(index) : \"\";\n    } else {\n      return (window.location.hash || \"\").replace(/^#/, \"\");\n    }\n  }\n  function constructQuery(params) {\n    const stringified = params.toString();\n    if (mode === \"history\")\n      return `${stringified ? `?${stringified}` : \"\"}${window.location.hash || \"\"}`;\n    if (mode === \"hash-params\")\n      return `${window.location.search || \"\"}${stringified ? `#${stringified}` : \"\"}`;\n    const hash = window.location.hash || \"#\";\n    const index = hash.indexOf(\"?\");\n    if (index > 0)\n      return `${hash.slice(0, index)}${stringified ? `?${stringified}` : \"\"}`;\n    return `${hash}${stringified ? `?${stringified}` : \"\"}`;\n  }\n  function read() {\n    return new URLSearchParams(getRawParams());\n  }\n  function updateState(params) {\n    const unusedKeys = new Set(Object.keys(state));\n    for (const key of params.keys()) {\n      const paramsForKey = params.getAll(key);\n      state[key] = paramsForKey.length > 1 ? paramsForKey : params.get(key) || \"\";\n      unusedKeys.delete(key);\n    }\n    Array.from(unusedKeys).forEach((key) => delete state[key]);\n  }\n  const { pause, resume } = pausableWatch(state, () => {\n    const params = new URLSearchParams(\"\");\n    Object.keys(state).forEach((key) => {\n      const mapEntry = state[key];\n      if (Array.isArray(mapEntry))\n        mapEntry.forEach((value) => params.append(key, value));\n      else if (removeNullishValues && mapEntry == null)\n        params.delete(key);\n      else if (removeFalsyValues && !mapEntry)\n        params.delete(key);\n      else\n        params.set(key, mapEntry);\n    });\n    write(params);\n  }, { deep: true });\n  function write(params, shouldUpdate) {\n    pause();\n    if (shouldUpdate)\n      updateState(params);\n    window.history.replaceState(window.history.state, window.document.title, window.location.pathname + constructQuery(params));\n    resume();\n  }\n  function onChanged() {\n    if (!enableWrite)\n      return;\n    write(read(), true);\n  }\n  useEventListener(window, \"popstate\", onChanged, false);\n  if (mode !== \"history\")\n    useEventListener(window, \"hashchange\", onChanged, false);\n  const initial = read();\n  if (initial.keys().next().value)\n    updateState(initial);\n  else\n    Object.assign(state, initialValue);\n  return state;\n}\n\nfunction useUserMedia(options = {}) {\n  var _a, _b;\n  const enabled = ref((_a = options.enabled) != null ? _a : false);\n  const autoSwitch = ref((_b = options.autoSwitch) != null ? _b : true);\n  const videoDeviceId = ref(options.videoDeviceId);\n  const audioDeviceId = ref(options.audioDeviceId);\n  const { navigator = defaultNavigator } = options;\n  const isSupported = useSupported(() => {\n    var _a2;\n    return (_a2 = navigator == null ? void 0 : navigator.mediaDevices) == null ? void 0 : _a2.getUserMedia;\n  });\n  const stream = shallowRef();\n  function getDeviceOptions(device) {\n    if (device.value === \"none\" || device.value === false)\n      return false;\n    if (device.value == null)\n      return true;\n    return {\n      deviceId: device.value\n    };\n  }\n  async function _start() {\n    if (!isSupported.value || stream.value)\n      return;\n    stream.value = await navigator.mediaDevices.getUserMedia({\n      video: getDeviceOptions(videoDeviceId),\n      audio: getDeviceOptions(audioDeviceId)\n    });\n    return stream.value;\n  }\n  async function _stop() {\n    var _a2;\n    (_a2 = stream.value) == null ? void 0 : _a2.getTracks().forEach((t) => t.stop());\n    stream.value = void 0;\n  }\n  function stop() {\n    _stop();\n    enabled.value = false;\n  }\n  async function start() {\n    await _start();\n    if (stream.value)\n      enabled.value = true;\n    return stream.value;\n  }\n  async function restart() {\n    _stop();\n    return await start();\n  }\n  watch(enabled, (v) => {\n    if (v)\n      _start();\n    else\n      _stop();\n  }, { immediate: true });\n  watch([videoDeviceId, audioDeviceId], () => {\n    if (autoSwitch.value && stream.value)\n      restart();\n  }, { immediate: true });\n  return {\n    isSupported,\n    stream,\n    start,\n    stop,\n    restart,\n    videoDeviceId,\n    audioDeviceId,\n    enabled,\n    autoSwitch\n  };\n}\n\nfunction useVModel(props, key, emit, options = {}) {\n  var _a, _b, _c, _d, _e;\n  const {\n    clone = false,\n    passive = false,\n    eventName,\n    deep = false,\n    defaultValue\n  } = options;\n  const vm = getCurrentInstance();\n  const _emit = emit || (vm == null ? void 0 : vm.emit) || ((_a = vm == null ? void 0 : vm.$emit) == null ? void 0 : _a.bind(vm)) || ((_c = (_b = vm == null ? void 0 : vm.proxy) == null ? void 0 : _b.$emit) == null ? void 0 : _c.bind(vm == null ? void 0 : vm.proxy));\n  let event = eventName;\n  if (!key) {\n    if (isVue2) {\n      const modelOptions = (_e = (_d = vm == null ? void 0 : vm.proxy) == null ? void 0 : _d.$options) == null ? void 0 : _e.model;\n      key = (modelOptions == null ? void 0 : modelOptions.value) || \"value\";\n      if (!eventName)\n        event = (modelOptions == null ? void 0 : modelOptions.event) || \"input\";\n    } else {\n      key = \"modelValue\";\n    }\n  }\n  event = eventName || event || `update:${key.toString()}`;\n  const cloneFn = (val) => !clone ? val : isFunction(clone) ? clone(val) : cloneFnJSON(val);\n  const getValue = () => isDef(props[key]) ? cloneFn(props[key]) : defaultValue;\n  if (passive) {\n    const initialValue = getValue();\n    const proxy = ref(initialValue);\n    watch(() => props[key], (v) => proxy.value = cloneFn(v));\n    watch(proxy, (v) => {\n      if (v !== props[key] || deep)\n        _emit(event, v);\n    }, { deep });\n    return proxy;\n  } else {\n    return computed({\n      get() {\n        return getValue();\n      },\n      set(value) {\n        _emit(event, value);\n      }\n    });\n  }\n}\n\nfunction useVModels(props, emit, options = {}) {\n  const ret = {};\n  for (const key in props)\n    ret[key] = useVModel(props, key, emit, options);\n  return ret;\n}\n\nfunction useVibrate(options) {\n  const {\n    pattern = [],\n    interval = 0,\n    navigator = defaultNavigator\n  } = options || {};\n  const isSupported = useSupported(() => typeof navigator !== \"undefined\" && \"vibrate\" in navigator);\n  const patternRef = resolveRef(pattern);\n  let intervalControls;\n  const vibrate = (pattern2 = patternRef.value) => {\n    if (isSupported.value)\n      navigator.vibrate(pattern2);\n  };\n  const stop = () => {\n    if (isSupported.value)\n      navigator.vibrate(0);\n    intervalControls == null ? void 0 : intervalControls.pause();\n  };\n  if (interval > 0) {\n    intervalControls = useIntervalFn(vibrate, interval, {\n      immediate: false,\n      immediateCallback: false\n    });\n  }\n  return {\n    isSupported,\n    pattern,\n    intervalControls,\n    vibrate,\n    stop\n  };\n}\n\nfunction useVirtualList(list, options) {\n  const { containerStyle, wrapperProps, scrollTo, calculateRange, currentList, containerRef } = \"itemHeight\" in options ? useVerticalVirtualList(options, list) : useHorizontalVirtualList(options, list);\n  return {\n    list: currentList,\n    scrollTo,\n    containerProps: {\n      ref: containerRef,\n      onScroll: () => {\n        calculateRange();\n      },\n      style: containerStyle\n    },\n    wrapperProps\n  };\n}\nfunction useVirtualListResources(list) {\n  const containerRef = ref(null);\n  const size = useElementSize(containerRef);\n  const currentList = ref([]);\n  const source = shallowRef(list);\n  const state = ref({ start: 0, end: 10 });\n  return { state, source, currentList, size, containerRef };\n}\nfunction createGetViewCapacity(state, source, itemSize) {\n  return (containerSize) => {\n    if (typeof itemSize === \"number\")\n      return Math.ceil(containerSize / itemSize);\n    const { start = 0 } = state.value;\n    let sum = 0;\n    let capacity = 0;\n    for (let i = start; i < source.value.length; i++) {\n      const size = itemSize(i);\n      sum += size;\n      capacity = i;\n      if (sum > containerSize)\n        break;\n    }\n    return capacity - start;\n  };\n}\nfunction createGetOffset(source, itemSize) {\n  return (scrollDirection) => {\n    if (typeof itemSize === \"number\")\n      return Math.floor(scrollDirection / itemSize) + 1;\n    let sum = 0;\n    let offset = 0;\n    for (let i = 0; i < source.value.length; i++) {\n      const size = itemSize(i);\n      sum += size;\n      if (sum >= scrollDirection) {\n        offset = i;\n        break;\n      }\n    }\n    return offset + 1;\n  };\n}\nfunction createCalculateRange(type, overscan, getOffset, getViewCapacity, { containerRef, state, currentList, source }) {\n  return () => {\n    const element = containerRef.value;\n    if (element) {\n      const offset = getOffset(type === \"vertical\" ? element.scrollTop : element.scrollLeft);\n      const viewCapacity = getViewCapacity(type === \"vertical\" ? element.clientHeight : element.clientWidth);\n      const from = offset - overscan;\n      const to = offset + viewCapacity + overscan;\n      state.value = {\n        start: from < 0 ? 0 : from,\n        end: to > source.value.length ? source.value.length : to\n      };\n      currentList.value = source.value.slice(state.value.start, state.value.end).map((ele, index) => ({\n        data: ele,\n        index: index + state.value.start\n      }));\n    }\n  };\n}\nfunction createGetDistance(itemSize, source) {\n  return (index) => {\n    if (typeof itemSize === \"number\") {\n      const size2 = index * itemSize;\n      return size2;\n    }\n    const size = source.value.slice(0, index).reduce((sum, _, i) => sum + itemSize(i), 0);\n    return size;\n  };\n}\nfunction useWatchForSizes(size, list, calculateRange) {\n  watch([size.width, size.height, list], () => {\n    calculateRange();\n  });\n}\nfunction createComputedTotalSize(itemSize, source) {\n  return computed(() => {\n    if (typeof itemSize === \"number\")\n      return source.value.length * itemSize;\n    return source.value.reduce((sum, _, index) => sum + itemSize(index), 0);\n  });\n}\nconst scrollToDictionaryForElementScrollKey = {\n  horizontal: \"scrollLeft\",\n  vertical: \"scrollTop\"\n};\nfunction createScrollTo(type, calculateRange, getDistance, containerRef) {\n  return (index) => {\n    if (containerRef.value) {\n      containerRef.value[scrollToDictionaryForElementScrollKey[type]] = getDistance(index);\n      calculateRange();\n    }\n  };\n}\nfunction useHorizontalVirtualList(options, list) {\n  const resources = useVirtualListResources(list);\n  const { state, source, currentList, size, containerRef } = resources;\n  const containerStyle = { overflowX: \"auto\" };\n  const { itemWidth, overscan = 5 } = options;\n  const getViewCapacity = createGetViewCapacity(state, source, itemWidth);\n  const getOffset = createGetOffset(source, itemWidth);\n  const calculateRange = createCalculateRange(\"horizontal\", overscan, getOffset, getViewCapacity, resources);\n  const getDistanceLeft = createGetDistance(itemWidth, source);\n  const offsetLeft = computed(() => getDistanceLeft(state.value.start));\n  const totalWidth = createComputedTotalSize(itemWidth, source);\n  useWatchForSizes(size, list, calculateRange);\n  const scrollTo = createScrollTo(\"horizontal\", calculateRange, getDistanceLeft, containerRef);\n  const wrapperProps = computed(() => {\n    return {\n      style: {\n        height: \"100%\",\n        width: `${totalWidth.value - offsetLeft.value}px`,\n        marginLeft: `${offsetLeft.value}px`,\n        display: \"flex\"\n      }\n    };\n  });\n  return {\n    scrollTo,\n    calculateRange,\n    wrapperProps,\n    containerStyle,\n    currentList,\n    containerRef\n  };\n}\nfunction useVerticalVirtualList(options, list) {\n  const resources = useVirtualListResources(list);\n  const { state, source, currentList, size, containerRef } = resources;\n  const containerStyle = { overflowY: \"auto\" };\n  const { itemHeight, overscan = 5 } = options;\n  const getViewCapacity = createGetViewCapacity(state, source, itemHeight);\n  const getOffset = createGetOffset(source, itemHeight);\n  const calculateRange = createCalculateRange(\"vertical\", overscan, getOffset, getViewCapacity, resources);\n  const getDistanceTop = createGetDistance(itemHeight, source);\n  const offsetTop = computed(() => getDistanceTop(state.value.start));\n  const totalHeight = createComputedTotalSize(itemHeight, source);\n  useWatchForSizes(size, list, calculateRange);\n  const scrollTo = createScrollTo(\"vertical\", calculateRange, getDistanceTop, containerRef);\n  const wrapperProps = computed(() => {\n    return {\n      style: {\n        width: \"100%\",\n        height: `${totalHeight.value - offsetTop.value}px`,\n        marginTop: `${offsetTop.value}px`\n      }\n    };\n  });\n  return {\n    calculateRange,\n    scrollTo,\n    containerStyle,\n    wrapperProps,\n    currentList,\n    containerRef\n  };\n}\n\nconst useWakeLock = (options = {}) => {\n  const {\n    navigator = defaultNavigator,\n    document = defaultDocument\n  } = options;\n  let wakeLock;\n  const isSupported = useSupported(() => navigator && \"wakeLock\" in navigator);\n  const isActive = ref(false);\n  async function onVisibilityChange() {\n    if (!isSupported.value || !wakeLock)\n      return;\n    if (document && document.visibilityState === \"visible\")\n      wakeLock = await navigator.wakeLock.request(\"screen\");\n    isActive.value = !wakeLock.released;\n  }\n  if (document)\n    useEventListener(document, \"visibilitychange\", onVisibilityChange, { passive: true });\n  async function request(type) {\n    if (!isSupported.value)\n      return;\n    wakeLock = await navigator.wakeLock.request(type);\n    isActive.value = !wakeLock.released;\n  }\n  async function release() {\n    if (!isSupported.value || !wakeLock)\n      return;\n    await wakeLock.release();\n    isActive.value = !wakeLock.released;\n    wakeLock = null;\n  }\n  return {\n    isSupported,\n    isActive,\n    request,\n    release\n  };\n};\n\nconst useWebNotification = (defaultOptions = {}) => {\n  const {\n    window = defaultWindow\n  } = defaultOptions;\n  const isSupported = useSupported(() => !!window && \"Notification\" in window);\n  const notification = ref(null);\n  const requestPermission = async () => {\n    if (!isSupported.value)\n      return;\n    if (\"permission\" in Notification && Notification.permission !== \"denied\")\n      await Notification.requestPermission();\n  };\n  const onClick = createEventHook();\n  const onShow = createEventHook();\n  const onError = createEventHook();\n  const onClose = createEventHook();\n  const show = async (overrides) => {\n    if (!isSupported.value)\n      return;\n    await requestPermission();\n    const options = Object.assign({}, defaultOptions, overrides);\n    notification.value = new Notification(options.title || \"\", options);\n    notification.value.onclick = (event) => onClick.trigger(event);\n    notification.value.onshow = (event) => onShow.trigger(event);\n    notification.value.onerror = (event) => onError.trigger(event);\n    notification.value.onclose = (event) => onClose.trigger(event);\n    return notification.value;\n  };\n  const close = () => {\n    if (notification.value)\n      notification.value.close();\n    notification.value = null;\n  };\n  tryOnMounted(async () => {\n    if (isSupported.value)\n      await requestPermission();\n  });\n  tryOnScopeDispose(close);\n  if (isSupported.value && window) {\n    const document = window.document;\n    useEventListener(document, \"visibilitychange\", (e) => {\n      e.preventDefault();\n      if (document.visibilityState === \"visible\") {\n        close();\n      }\n    });\n  }\n  return {\n    isSupported,\n    notification,\n    show,\n    close,\n    onClick,\n    onShow,\n    onError,\n    onClose\n  };\n};\n\nconst DEFAULT_PING_MESSAGE = \"ping\";\nfunction resolveNestedOptions(options) {\n  if (options === true)\n    return {};\n  return options;\n}\nfunction useWebSocket(url, options = {}) {\n  const {\n    onConnected,\n    onDisconnected,\n    onError,\n    onMessage,\n    immediate = true,\n    autoClose = true,\n    protocols = []\n  } = options;\n  const data = ref(null);\n  const status = ref(\"CLOSED\");\n  const wsRef = ref();\n  const urlRef = resolveRef(url);\n  let heartbeatPause;\n  let heartbeatResume;\n  let explicitlyClosed = false;\n  let retried = 0;\n  let bufferedData = [];\n  let pongTimeoutWait;\n  const close = (code = 1e3, reason) => {\n    if (!wsRef.value)\n      return;\n    explicitlyClosed = true;\n    heartbeatPause == null ? void 0 : heartbeatPause();\n    wsRef.value.close(code, reason);\n  };\n  const _sendBuffer = () => {\n    if (bufferedData.length && wsRef.value && status.value === \"OPEN\") {\n      for (const buffer of bufferedData)\n        wsRef.value.send(buffer);\n      bufferedData = [];\n    }\n  };\n  const resetHeartbeat = () => {\n    clearTimeout(pongTimeoutWait);\n    pongTimeoutWait = void 0;\n  };\n  const send = (data2, useBuffer = true) => {\n    if (!wsRef.value || status.value !== \"OPEN\") {\n      if (useBuffer)\n        bufferedData.push(data2);\n      return false;\n    }\n    _sendBuffer();\n    wsRef.value.send(data2);\n    return true;\n  };\n  const _init = () => {\n    if (explicitlyClosed || typeof urlRef.value === \"undefined\")\n      return;\n    const ws = new WebSocket(urlRef.value, protocols);\n    wsRef.value = ws;\n    status.value = \"CONNECTING\";\n    ws.onopen = () => {\n      status.value = \"OPEN\";\n      onConnected == null ? void 0 : onConnected(ws);\n      heartbeatResume == null ? void 0 : heartbeatResume();\n      _sendBuffer();\n    };\n    ws.onclose = (ev) => {\n      status.value = \"CLOSED\";\n      wsRef.value = void 0;\n      onDisconnected == null ? void 0 : onDisconnected(ws, ev);\n      if (!explicitlyClosed && options.autoReconnect) {\n        const {\n          retries = -1,\n          delay = 1e3,\n          onFailed\n        } = resolveNestedOptions(options.autoReconnect);\n        retried += 1;\n        if (typeof retries === \"number\" && (retries < 0 || retried < retries))\n          setTimeout(_init, delay);\n        else if (typeof retries === \"function\" && retries())\n          setTimeout(_init, delay);\n        else\n          onFailed == null ? void 0 : onFailed();\n      }\n    };\n    ws.onerror = (e) => {\n      onError == null ? void 0 : onError(ws, e);\n    };\n    ws.onmessage = (e) => {\n      if (options.heartbeat) {\n        resetHeartbeat();\n        const {\n          message = DEFAULT_PING_MESSAGE\n        } = resolveNestedOptions(options.heartbeat);\n        if (e.data === message)\n          return;\n      }\n      data.value = e.data;\n      onMessage == null ? void 0 : onMessage(ws, e);\n    };\n  };\n  if (options.heartbeat) {\n    const {\n      message = DEFAULT_PING_MESSAGE,\n      interval = 1e3,\n      pongTimeout = 1e3\n    } = resolveNestedOptions(options.heartbeat);\n    const { pause, resume } = useIntervalFn(() => {\n      send(message, false);\n      if (pongTimeoutWait != null)\n        return;\n      pongTimeoutWait = setTimeout(() => {\n        close();\n      }, pongTimeout);\n    }, interval, { immediate: false });\n    heartbeatPause = pause;\n    heartbeatResume = resume;\n  }\n  if (autoClose) {\n    useEventListener(window, \"beforeunload\", () => close());\n    tryOnScopeDispose(close);\n  }\n  const open = () => {\n    close();\n    explicitlyClosed = false;\n    retried = 0;\n    _init();\n  };\n  if (immediate)\n    watch(urlRef, open, { immediate: true });\n  return {\n    data,\n    status,\n    close,\n    send,\n    open,\n    ws: wsRef\n  };\n}\n\nfunction useWebWorker(arg0, workerOptions, options) {\n  const {\n    window = defaultWindow\n  } = options != null ? options : {};\n  const data = ref(null);\n  const worker = shallowRef();\n  const post = function post2(val) {\n    if (!worker.value)\n      return;\n    worker.value.postMessage(val);\n  };\n  const terminate = function terminate2() {\n    if (!worker.value)\n      return;\n    worker.value.terminate();\n  };\n  if (window) {\n    if (isString(arg0))\n      worker.value = new Worker(arg0, workerOptions);\n    else if (isFunction(arg0))\n      worker.value = arg0();\n    else\n      worker.value = arg0;\n    worker.value.onmessage = (e) => {\n      data.value = e.data;\n    };\n    tryOnScopeDispose(() => {\n      if (worker.value)\n        worker.value.terminate();\n    });\n  }\n  return {\n    data,\n    post,\n    terminate,\n    worker\n  };\n}\n\nconst jobRunner = (userFunc) => (e) => {\n  const userFuncArgs = e.data[0];\n  return Promise.resolve(userFunc.apply(void 0, userFuncArgs)).then((result) => {\n    postMessage([\"SUCCESS\", result]);\n  }).catch((error) => {\n    postMessage([\"ERROR\", error]);\n  });\n};\n\nconst depsParser = (deps) => {\n  if (deps.length === 0)\n    return \"\";\n  const depsString = deps.map((dep) => `'${dep}'`).toString();\n  return `importScripts(${depsString})`;\n};\n\nconst createWorkerBlobUrl = (fn, deps) => {\n  const blobCode = `${depsParser(deps)}; onmessage=(${jobRunner})(${fn})`;\n  const blob = new Blob([blobCode], { type: \"text/javascript\" });\n  const url = URL.createObjectURL(blob);\n  return url;\n};\n\nconst useWebWorkerFn = (fn, options = {}) => {\n  const {\n    dependencies = [],\n    timeout,\n    window = defaultWindow\n  } = options;\n  const worker = ref();\n  const workerStatus = ref(\"PENDING\");\n  const promise = ref({});\n  const timeoutId = ref();\n  const workerTerminate = (status = \"PENDING\") => {\n    if (worker.value && worker.value._url && window) {\n      worker.value.terminate();\n      URL.revokeObjectURL(worker.value._url);\n      promise.value = {};\n      worker.value = void 0;\n      window.clearTimeout(timeoutId.value);\n      workerStatus.value = status;\n    }\n  };\n  workerTerminate();\n  tryOnScopeDispose(workerTerminate);\n  const generateWorker = () => {\n    const blobUrl = createWorkerBlobUrl(fn, dependencies);\n    const newWorker = new Worker(blobUrl);\n    newWorker._url = blobUrl;\n    newWorker.onmessage = (e) => {\n      const { resolve = () => {\n      }, reject = () => {\n      } } = promise.value;\n      const [status, result] = e.data;\n      switch (status) {\n        case \"SUCCESS\":\n          resolve(result);\n          workerTerminate(status);\n          break;\n        default:\n          reject(result);\n          workerTerminate(\"ERROR\");\n          break;\n      }\n    };\n    newWorker.onerror = (e) => {\n      const { reject = () => {\n      } } = promise.value;\n      reject(e);\n      workerTerminate(\"ERROR\");\n    };\n    if (timeout) {\n      timeoutId.value = setTimeout(() => workerTerminate(\"TIMEOUT_EXPIRED\"), timeout);\n    }\n    return newWorker;\n  };\n  const callWorker = (...fnArgs) => new Promise((resolve, reject) => {\n    promise.value = {\n      resolve,\n      reject\n    };\n    worker.value && worker.value.postMessage([[...fnArgs]]);\n    workerStatus.value = \"RUNNING\";\n  });\n  const workerFn = (...fnArgs) => {\n    if (workerStatus.value === \"RUNNING\") {\n      console.error(\"[useWebWorkerFn] You can only run one instance of the worker at a time.\");\n      return Promise.reject();\n    }\n    worker.value = generateWorker();\n    return callWorker(...fnArgs);\n  };\n  return {\n    workerFn,\n    workerStatus,\n    workerTerminate\n  };\n};\n\nfunction useWindowFocus({ window = defaultWindow } = {}) {\n  if (!window)\n    return ref(false);\n  const focused = ref(window.document.hasFocus());\n  useEventListener(window, \"blur\", () => {\n    focused.value = false;\n  });\n  useEventListener(window, \"focus\", () => {\n    focused.value = true;\n  });\n  return focused;\n}\n\nfunction useWindowScroll({ window = defaultWindow } = {}) {\n  if (!window) {\n    return {\n      x: ref(0),\n      y: ref(0)\n    };\n  }\n  const x = ref(window.scrollX);\n  const y = ref(window.scrollY);\n  useEventListener(window, \"scroll\", () => {\n    x.value = window.scrollX;\n    y.value = window.scrollY;\n  }, {\n    capture: false,\n    passive: true\n  });\n  return { x, y };\n}\n\nfunction useWindowSize(options = {}) {\n  const {\n    window = defaultWindow,\n    initialWidth = Infinity,\n    initialHeight = Infinity,\n    listenOrientation = true,\n    includeScrollbar = true\n  } = options;\n  const width = ref(initialWidth);\n  const height = ref(initialHeight);\n  const update = () => {\n    if (window) {\n      if (includeScrollbar) {\n        width.value = window.innerWidth;\n        height.value = window.innerHeight;\n      } else {\n        width.value = window.document.documentElement.clientWidth;\n        height.value = window.document.documentElement.clientHeight;\n      }\n    }\n  };\n  update();\n  tryOnMounted(update);\n  useEventListener(\"resize\", update, { passive: true });\n  if (listenOrientation)\n    useEventListener(\"orientationchange\", update, { passive: true });\n  return { width, height };\n}\n\nexport { DefaultMagicKeysAliasMap, StorageSerializers, SwipeDirection, TransitionPresets, computedAsync as asyncComputed, breakpointsAntDesign, breakpointsBootstrapV5, breakpointsMasterCss, breakpointsQuasar, breakpointsSematic, breakpointsTailwind, breakpointsVuetify, cloneFnJSON, computedAsync, computedInject, createFetch, createUnrefFn, customStorageEventName, defaultDocument, defaultLocation, defaultNavigator, defaultWindow, formatTimeAgo, getSSRHandler, mapGamepadToXbox360Controller, onClickOutside, onKeyDown, onKeyPressed, onKeyStroke, onKeyUp, onLongPress, onStartTyping, setSSRHandler, templateRef, unrefElement, useActiveElement, useAsyncQueue, useAsyncState, useBase64, useBattery, useBluetooth, useBreakpoints, useBroadcastChannel, useBrowserLocation, useCached, useClipboard, useCloned, useColorMode, useConfirmDialog, useCssVar, useCurrentElement, useCycleList, useDark, useDebouncedRefHistory, useDeviceMotion, useDeviceOrientation, useDevicePixelRatio, useDevicesList, useDisplayMedia, useDocumentVisibility, useDraggable, useDropZone, useElementBounding, useElementByPoint, useElementHover, useElementSize, useElementVisibility, useEventBus, useEventListener, useEventSource, useEyeDropper, useFavicon, useFetch, useFileDialog, useFileSystemAccess, useFocus, useFocusWithin, useFps, useFullscreen, useGamepad, useGeolocation, useIdle, useImage, useInfiniteScroll, useIntersectionObserver, useKeyModifier, useLocalStorage, useMagicKeys, useManualRefHistory, useMediaControls, useMediaQuery, useMemoize, useMemory, useMounted, useMouse, useMouseInElement, useMousePressed, useMutationObserver, useNavigatorLanguage, useNetwork, useNow, useObjectUrl, useOffsetPagination, useOnline, usePageLeave, useParallax, usePermission, usePointer, usePointerLock, usePointerSwipe, usePreferredColorScheme, usePreferredContrast, usePreferredDark, usePreferredLanguages, usePreferredReducedMotion, usePrevious, useRafFn, useRefHistory, useResizeObserver, useScreenOrientation, useScreenSafeArea, useScriptTag, useScroll, useScrollLock, useSessionStorage, useShare, useSorted, useSpeechRecognition, useSpeechSynthesis, useStepper, useStorage, useStorageAsync, useStyleTag, useSupported, useSwipe, useTemplateRefsList, useTextDirection, useTextSelection, useTextareaAutosize, useThrottledRefHistory, useTimeAgo, useTimeoutPoll, useTimestamp, useTitle, useTransition, useUrlSearchParams, useUserMedia, useVModel, useVModels, useVibrate, useVirtualList, useWakeLock, useWebNotification, useWebSocket, useWebWorker, useWebWorkerFn, useWindowFocus, useWindowScroll, useWindowSize };\n","import { ref, getCurrentInstance, inject, computed, unref } from 'vue';\nimport { isNumber } from '../../utils/types.mjs';\nimport { isClient } from '@vueuse/core';\n\nconst initial = {\n  current: 0\n};\nconst zIndex = ref(0);\nconst defaultInitialZIndex = 2e3;\nconst ZINDEX_INJECTION_KEY = Symbol(\"elZIndexContextKey\");\nconst zIndexContextKey = Symbol(\"zIndexContextKey\");\nconst useZIndex = (zIndexOverrides) => {\n  const increasingInjection = getCurrentInstance() ? inject(ZINDEX_INJECTION_KEY, initial) : initial;\n  const zIndexInjection = zIndexOverrides || (getCurrentInstance() ? inject(zIndexContextKey, void 0) : void 0);\n  const initialZIndex = computed(() => {\n    const zIndexFromInjection = unref(zIndexInjection);\n    return isNumber(zIndexFromInjection) ? zIndexFromInjection : defaultInitialZIndex;\n  });\n  const currentZIndex = computed(() => initialZIndex.value + zIndex.value);\n  const nextZIndex = () => {\n    increasingInjection.current++;\n    zIndex.value = increasingInjection.current;\n    return currentZIndex.value;\n  };\n  if (!isClient && !inject(ZINDEX_INJECTION_KEY)) ;\n  return {\n    initialZIndex,\n    currentZIndex,\n    nextZIndex\n  };\n};\n\nexport { ZINDEX_INJECTION_KEY, defaultInitialZIndex, useZIndex, zIndexContextKey };\n//# sourceMappingURL=index.mjs.map\n","var English = {\n  name: \"en\",\n  el: {\n    breadcrumb: {\n      label: \"Breadcrumb\"\n    },\n    colorpicker: {\n      confirm: \"OK\",\n      clear: \"Clear\",\n      defaultLabel: \"color picker\",\n      description: \"current color is {color}. press enter to select a new color.\",\n      alphaLabel: \"pick alpha value\"\n    },\n    datepicker: {\n      now: \"Now\",\n      today: \"Today\",\n      cancel: \"Cancel\",\n      clear: \"Clear\",\n      confirm: \"OK\",\n      dateTablePrompt: \"Use the arrow keys and enter to select the day of the month\",\n      monthTablePrompt: \"Use the arrow keys and enter to select the month\",\n      yearTablePrompt: \"Use the arrow keys and enter to select the year\",\n      selectedDate: \"Selected date\",\n      selectDate: \"Select date\",\n      selectTime: \"Select time\",\n      startDate: \"Start Date\",\n      startTime: \"Start Time\",\n      endDate: \"End Date\",\n      endTime: \"End Time\",\n      prevYear: \"Previous Year\",\n      nextYear: \"Next Year\",\n      prevMonth: \"Previous Month\",\n      nextMonth: \"Next Month\",\n      year: \"\",\n      month1: \"January\",\n      month2: \"February\",\n      month3: \"March\",\n      month4: \"April\",\n      month5: \"May\",\n      month6: \"June\",\n      month7: \"July\",\n      month8: \"August\",\n      month9: \"September\",\n      month10: \"October\",\n      month11: \"November\",\n      month12: \"December\",\n      weeks: {\n        sun: \"Sun\",\n        mon: \"Mon\",\n        tue: \"Tue\",\n        wed: \"Wed\",\n        thu: \"Thu\",\n        fri: \"Fri\",\n        sat: \"Sat\"\n      },\n      weeksFull: {\n        sun: \"Sunday\",\n        mon: \"Monday\",\n        tue: \"Tuesday\",\n        wed: \"Wednesday\",\n        thu: \"Thursday\",\n        fri: \"Friday\",\n        sat: \"Saturday\"\n      },\n      months: {\n        jan: \"Jan\",\n        feb: \"Feb\",\n        mar: \"Mar\",\n        apr: \"Apr\",\n        may: \"May\",\n        jun: \"Jun\",\n        jul: \"Jul\",\n        aug: \"Aug\",\n        sep: \"Sep\",\n        oct: \"Oct\",\n        nov: \"Nov\",\n        dec: \"Dec\"\n      }\n    },\n    inputNumber: {\n      decrease: \"decrease number\",\n      increase: \"increase number\"\n    },\n    select: {\n      loading: \"Loading\",\n      noMatch: \"No matching data\",\n      noData: \"No data\",\n      placeholder: \"Select\"\n    },\n    mention: {\n      loading: \"Loading\"\n    },\n    dropdown: {\n      toggleDropdown: \"Toggle Dropdown\"\n    },\n    cascader: {\n      noMatch: \"No matching data\",\n      loading: \"Loading\",\n      placeholder: \"Select\",\n      noData: \"No data\"\n    },\n    pagination: {\n      goto: \"Go to\",\n      pagesize: \"/page\",\n      total: \"Total {total}\",\n      pageClassifier: \"\",\n      page: \"Page\",\n      prev: \"Go to previous page\",\n      next: \"Go to next page\",\n      currentPage: \"page {pager}\",\n      prevPages: \"Previous {pager} pages\",\n      nextPages: \"Next {pager} pages\",\n      deprecationWarning: \"Deprecated usages detected, please refer to the el-pagination documentation for more details\"\n    },\n    dialog: {\n      close: \"Close this dialog\"\n    },\n    drawer: {\n      close: \"Close this dialog\"\n    },\n    messagebox: {\n      title: \"Message\",\n      confirm: \"OK\",\n      cancel: \"Cancel\",\n      error: \"Illegal input\",\n      close: \"Close this dialog\"\n    },\n    upload: {\n      deleteTip: \"press delete to remove\",\n      delete: \"Delete\",\n      preview: \"Preview\",\n      continue: \"Continue\"\n    },\n    slider: {\n      defaultLabel: \"slider between {min} and {max}\",\n      defaultRangeStartLabel: \"pick start value\",\n      defaultRangeEndLabel: \"pick end value\"\n    },\n    table: {\n      emptyText: \"No Data\",\n      confirmFilter: \"Confirm\",\n      resetFilter: \"Reset\",\n      clearFilter: \"All\",\n      sumText: \"Sum\"\n    },\n    tour: {\n      next: \"Next\",\n      previous: \"Previous\",\n      finish: \"Finish\",\n      close: \"Close this dialog\"\n    },\n    tree: {\n      emptyText: \"No Data\"\n    },\n    transfer: {\n      noMatch: \"No matching data\",\n      noData: \"No data\",\n      titles: [\"List 1\", \"List 2\"],\n      filterPlaceholder: \"Enter keyword\",\n      noCheckedFormat: \"{total} items\",\n      hasCheckedFormat: \"{checked}/{total} checked\"\n    },\n    image: {\n      error: \"FAILED\"\n    },\n    pageHeader: {\n      title: \"Back\"\n    },\n    popconfirm: {\n      confirmButtonText: \"Yes\",\n      cancelButtonText: \"No\"\n    },\n    carousel: {\n      leftArrow: \"Carousel arrow left\",\n      rightArrow: \"Carousel arrow right\",\n      indicator: \"Carousel switch to index {index}\"\n    }\n  }\n};\n\nexport { English as default };\n//# sourceMappingURL=en.mjs.map\n","import { computed, unref, isRef, ref, inject } from 'vue';\nimport { get } from 'lodash-unified';\nimport English from '../../locale/lang/en.mjs';\n\nconst buildTranslator = (locale) => (path, option) => translate(path, option, unref(locale));\nconst translate = (path, option, locale) => get(locale, path, path).replace(/\\{(\\w+)\\}/g, (_, key) => {\n  var _a;\n  return `${(_a = option == null ? void 0 : option[key]) != null ? _a : `{${key}}`}`;\n});\nconst buildLocaleContext = (locale) => {\n  const lang = computed(() => unref(locale).name);\n  const localeRef = isRef(locale) ? locale : ref(locale);\n  return {\n    lang,\n    locale: localeRef,\n    t: buildTranslator(locale)\n  };\n};\nconst localeContextKey = Symbol(\"localeContextKey\");\nconst useLocale = (localeOverrides) => {\n  const locale = localeOverrides || inject(localeContextKey, ref());\n  return buildLocaleContext(computed(() => locale.value || English));\n};\n\nexport { buildLocaleContext, buildTranslator, localeContextKey, translate, useLocale };\n//# sourceMappingURL=index.mjs.map\n","import { warn } from 'vue';\nimport { fromPairs } from 'lodash-unified';\nimport { isObject, hasOwn } from '@vue/shared';\n\nconst epPropKey = \"__epPropKey\";\nconst definePropType = (val) => val;\nconst isEpProp = (val) => isObject(val) && !!val[epPropKey];\nconst buildProp = (prop, key) => {\n  if (!isObject(prop) || isEpProp(prop))\n    return prop;\n  const { values, required, default: defaultValue, type, validator } = prop;\n  const _validator = values || validator ? (val) => {\n    let valid = false;\n    let allowedValues = [];\n    if (values) {\n      allowedValues = Array.from(values);\n      if (hasOwn(prop, \"default\")) {\n        allowedValues.push(defaultValue);\n      }\n      valid || (valid = allowedValues.includes(val));\n    }\n    if (validator)\n      valid || (valid = validator(val));\n    if (!valid && allowedValues.length > 0) {\n      const allowValuesText = [...new Set(allowedValues)].map((value) => JSON.stringify(value)).join(\", \");\n      warn(`Invalid prop: validation failed${key ? ` for prop \"${key}\"` : \"\"}. Expected one of [${allowValuesText}], got value ${JSON.stringify(val)}.`);\n    }\n    return valid;\n  } : void 0;\n  const epProp = {\n    type,\n    required: !!required,\n    validator: _validator,\n    [epPropKey]: true\n  };\n  if (hasOwn(prop, \"default\"))\n    epProp.default = defaultValue;\n  return epProp;\n};\nconst buildProps = (props) => fromPairs(Object.entries(props).map(([key, option]) => [\n  key,\n  buildProp(option, key)\n]));\n\nexport { buildProp, buildProps, definePropType, epPropKey, isEpProp };\n//# sourceMappingURL=runtime.mjs.map\n","import { computed, unref, inject } from 'vue';\nimport { buildProp } from '../../utils/vue/props/runtime.mjs';\nimport { componentSizes } from '../../constants/size.mjs';\n\nconst useSizeProp = buildProp({\n  type: String,\n  values: componentSizes,\n  required: false\n});\nconst useSizeProps = {\n  size: useSizeProp\n};\nconst SIZE_INJECTION_KEY = Symbol(\"size\");\nconst useGlobalSize = () => {\n  const injectedSize = inject(SIZE_INJECTION_KEY, {});\n  return computed(() => {\n    return unref(injectedSize.size) || \"\";\n  });\n};\n\nexport { SIZE_INJECTION_KEY, useGlobalSize, useSizeProp, useSizeProps };\n//# sourceMappingURL=index.mjs.map\n","const componentSizes = [\"\", \"default\", \"small\", \"large\"];\nconst componentSizeMap = {\n  large: 40,\n  default: 32,\n  small: 24\n};\n\nexport { componentSizeMap, componentSizes };\n//# sourceMappingURL=size.mjs.map\n","import { getCurrentInstance, inject, ref, computed } from 'vue';\nimport { isEqual } from 'lodash-unified';\nimport { buildProps, definePropType } from '../../utils/vue/props/runtime.mjs';\nimport { isFunction, isArray } from '@vue/shared';\n\nconst emptyValuesContextKey = Symbol(\"emptyValuesContextKey\");\nconst SCOPE = \"use-empty-values\";\nconst DEFAULT_EMPTY_VALUES = [\"\", void 0, null];\nconst DEFAULT_VALUE_ON_CLEAR = void 0;\nconst useEmptyValuesProps = buildProps({\n  emptyValues: Array,\n  valueOnClear: {\n    type: definePropType([\n      String,\n      Number,\n      Boolean,\n      Function\n    ]),\n    default: void 0,\n    validator: (val) => {\n      val = isFunction(val) ? val() : val;\n      if (isArray(val)) {\n        return val.every((item) => !item);\n      }\n      return !val;\n    }\n  }\n});\nconst useEmptyValues = (props, defaultValue) => {\n  const config = getCurrentInstance() ? inject(emptyValuesContextKey, ref({})) : ref({});\n  const emptyValues = computed(() => props.emptyValues || config.value.emptyValues || DEFAULT_EMPTY_VALUES);\n  const valueOnClear = computed(() => {\n    if (isFunction(props.valueOnClear)) {\n      return props.valueOnClear();\n    } else if (props.valueOnClear !== void 0) {\n      return props.valueOnClear;\n    } else if (isFunction(config.value.valueOnClear)) {\n      return config.value.valueOnClear();\n    } else if (config.value.valueOnClear !== void 0) {\n      return config.value.valueOnClear;\n    }\n    return defaultValue !== void 0 ? defaultValue : DEFAULT_VALUE_ON_CLEAR;\n  });\n  const isEmptyValue = (value) => {\n    let result = true;\n    if (isArray(value)) {\n      result = emptyValues.value.some((emptyValue) => {\n        return isEqual(value, emptyValue);\n      });\n    } else {\n      result = emptyValues.value.includes(value);\n    }\n    return result;\n  };\n  if (!isEmptyValue(valueOnClear.value)) ;\n  return {\n    emptyValues,\n    valueOnClear,\n    isEmptyValue\n  };\n};\n\nexport { DEFAULT_EMPTY_VALUES, DEFAULT_VALUE_ON_CLEAR, SCOPE, emptyValuesContextKey, useEmptyValues, useEmptyValuesProps };\n//# sourceMappingURL=index.mjs.map\n","import { get, set } from 'lodash-unified';\nexport { hasOwn } from '@vue/shared';\n\nconst keysOf = (arr) => Object.keys(arr);\nconst entriesOf = (arr) => Object.entries(arr);\nconst getProp = (obj, path, defaultValue) => {\n  return {\n    get value() {\n      return get(obj, path, defaultValue);\n    },\n    set value(val) {\n      set(obj, path, val);\n    }\n  };\n};\n\nexport { entriesOf, getProp, keysOf };\n//# sourceMappingURL=objects.mjs.map\n","import baseSet from './_baseSet.js';\n\n/**\n * Sets the value at `path` of `object`. If a portion of `path` doesn't exist,\n * it's created. Arrays are created for missing index properties while objects\n * are created for all other missing properties. Use `_.setWith` to customize\n * `path` creation.\n *\n * **Note:** This method mutates `object`.\n *\n * @static\n * @memberOf _\n * @since 3.7.0\n * @category Object\n * @param {Object} object The object to modify.\n * @param {Array|string} path The path of the property to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns `object`.\n * @example\n *\n * var object = { 'a': [{ 'b': { 'c': 3 } }] };\n *\n * _.set(object, 'a[0].b.c', 4);\n * console.log(object.a[0].b.c);\n * // => 4\n *\n * _.set(object, ['x', '0', 'y', 'z'], 5);\n * console.log(object.x[0].y.z);\n * // => 5\n */\nfunction set(object, path, value) {\n  return object == null ? object : baseSet(object, path, value);\n}\n\nexport default set;\n","import { ref, getCurrentInstance, inject, computed, unref, provide } from 'vue';\nimport { configProviderContextKey } from '../constants.mjs';\nimport { useNamespace, defaultNamespace, namespaceContextKey } from '../../../../hooks/use-namespace/index.mjs';\nimport { useZIndex, defaultInitialZIndex, zIndexContextKey } from '../../../../hooks/use-z-index/index.mjs';\nimport { useLocale, localeContextKey } from '../../../../hooks/use-locale/index.mjs';\nimport { SIZE_INJECTION_KEY } from '../../../../hooks/use-size/index.mjs';\nimport { emptyValuesContextKey } from '../../../../hooks/use-empty-values/index.mjs';\nimport { keysOf } from '../../../../utils/objects.mjs';\n\nconst globalConfig = ref();\nfunction useGlobalConfig(key, defaultValue = void 0) {\n  const config = getCurrentInstance() ? inject(configProviderContextKey, globalConfig) : globalConfig;\n  if (key) {\n    return computed(() => {\n      var _a, _b;\n      return (_b = (_a = config.value) == null ? void 0 : _a[key]) != null ? _b : defaultValue;\n    });\n  } else {\n    return config;\n  }\n}\nfunction useGlobalComponentSettings(block, sizeFallback) {\n  const config = useGlobalConfig();\n  const ns = useNamespace(block, computed(() => {\n    var _a;\n    return ((_a = config.value) == null ? void 0 : _a.namespace) || defaultNamespace;\n  }));\n  const locale = useLocale(computed(() => {\n    var _a;\n    return (_a = config.value) == null ? void 0 : _a.locale;\n  }));\n  const zIndex = useZIndex(computed(() => {\n    var _a;\n    return ((_a = config.value) == null ? void 0 : _a.zIndex) || defaultInitialZIndex;\n  }));\n  const size = computed(() => {\n    var _a;\n    return unref(sizeFallback) || ((_a = config.value) == null ? void 0 : _a.size) || \"\";\n  });\n  provideGlobalConfig(computed(() => unref(config) || {}));\n  return {\n    ns,\n    locale,\n    zIndex,\n    size\n  };\n}\nconst provideGlobalConfig = (config, app, global = false) => {\n  var _a;\n  const inSetup = !!getCurrentInstance();\n  const oldConfig = inSetup ? useGlobalConfig() : void 0;\n  const provideFn = (_a = app == null ? void 0 : app.provide) != null ? _a : inSetup ? provide : void 0;\n  if (!provideFn) {\n    return;\n  }\n  const context = computed(() => {\n    const cfg = unref(config);\n    if (!(oldConfig == null ? void 0 : oldConfig.value))\n      return cfg;\n    return mergeConfig(oldConfig.value, cfg);\n  });\n  provideFn(configProviderContextKey, context);\n  provideFn(localeContextKey, computed(() => context.value.locale));\n  provideFn(namespaceContextKey, computed(() => context.value.namespace));\n  provideFn(zIndexContextKey, computed(() => context.value.zIndex));\n  provideFn(SIZE_INJECTION_KEY, {\n    size: computed(() => context.value.size || \"\")\n  });\n  provideFn(emptyValuesContextKey, computed(() => ({\n    emptyValues: context.value.emptyValues,\n    valueOnClear: context.value.valueOnClear\n  })));\n  if (global || !globalConfig.value) {\n    globalConfig.value = context.value;\n  }\n  return context;\n};\nconst mergeConfig = (a, b) => {\n  const keys = [.../* @__PURE__ */ new Set([...keysOf(a), ...keysOf(b)])];\n  const obj = {};\n  for (const key of keys) {\n    obj[key] = b[key] !== void 0 ? b[key] : a[key];\n  }\n  return obj;\n};\n\nexport { provideGlobalConfig, useGlobalComponentSettings, useGlobalConfig };\n//# sourceMappingURL=use-global-config.mjs.map\n","const UPDATE_MODEL_EVENT = \"update:modelValue\";\nconst CHANGE_EVENT = \"change\";\nconst INPUT_EVENT = \"input\";\n\nexport { CHANGE_EVENT, INPUT_EVENT, UPDATE_MODEL_EVENT };\n//# sourceMappingURL=event.mjs.map\n","var _export_sfc = (sfc, props) => {\n  const target = sfc.__vccOpts || sfc;\n  for (const [key, val] of props) {\n    target[key] = val;\n  }\n  return target;\n};\n\nexport { _export_sfc as default };\n//# sourceMappingURL=plugin-vue_export-helper.mjs.map\n","import { isClient } from '@vueuse/core';\n\nconst rAF = (fn) => isClient ? window.requestAnimationFrame(fn) : setTimeout(fn, 16);\nconst cAF = (handle) => isClient ? window.cancelAnimationFrame(handle) : clearTimeout(handle);\n\nexport { cAF, rAF };\n//# sourceMappingURL=raf.mjs.map\n","import { isNumber, isStringNumber } from '../types.mjs';\nimport { isClient } from '@vueuse/core';\nimport { camelize, isObject, isString } from '@vue/shared';\nimport { entriesOf, keysOf } from '../objects.mjs';\n\nconst classNameToArray = (cls = \"\") => cls.split(\" \").filter((item) => !!item.trim());\nconst hasClass = (el, cls) => {\n  if (!el || !cls)\n    return false;\n  if (cls.includes(\" \"))\n    throw new Error(\"className should not contain space.\");\n  return el.classList.contains(cls);\n};\nconst addClass = (el, cls) => {\n  if (!el || !cls.trim())\n    return;\n  el.classList.add(...classNameToArray(cls));\n};\nconst removeClass = (el, cls) => {\n  if (!el || !cls.trim())\n    return;\n  el.classList.remove(...classNameToArray(cls));\n};\nconst getStyle = (element, styleName) => {\n  var _a;\n  if (!isClient || !element || !styleName)\n    return \"\";\n  let key = camelize(styleName);\n  if (key === \"float\")\n    key = \"cssFloat\";\n  try {\n    const style = element.style[key];\n    if (style)\n      return style;\n    const computed = (_a = document.defaultView) == null ? void 0 : _a.getComputedStyle(element, \"\");\n    return computed ? computed[key] : \"\";\n  } catch (e) {\n    return element.style[key];\n  }\n};\nconst setStyle = (element, styleName, value) => {\n  if (!element || !styleName)\n    return;\n  if (isObject(styleName)) {\n    entriesOf(styleName).forEach(([prop, value2]) => setStyle(element, prop, value2));\n  } else {\n    const key = camelize(styleName);\n    element.style[key] = value;\n  }\n};\nconst removeStyle = (element, style) => {\n  if (!element || !style)\n    return;\n  if (isObject(style)) {\n    keysOf(style).forEach((prop) => removeStyle(element, prop));\n  } else {\n    setStyle(element, style, \"\");\n  }\n};\nfunction addUnit(value, defaultUnit = \"px\") {\n  if (!value)\n    return \"\";\n  if (isNumber(value) || isStringNumber(value)) {\n    return `${value}${defaultUnit}`;\n  } else if (isString(value)) {\n    return value;\n  }\n}\n\nexport { addClass, addUnit, classNameToArray, getStyle, hasClass, removeClass, removeStyle, setStyle };\n//# sourceMappingURL=style.mjs.map\n","import { isClient } from '@vueuse/core';\nimport { easeInOutCubic } from '../easings.mjs';\nimport { isWindow } from '../types.mjs';\nimport { rAF, cAF } from '../raf.mjs';\nimport { getStyle } from './style.mjs';\nimport { isFunction } from '@vue/shared';\n\nconst isScroll = (el, isVertical) => {\n  if (!isClient)\n    return false;\n  const key = {\n    undefined: \"overflow\",\n    true: \"overflow-y\",\n    false: \"overflow-x\"\n  }[String(isVertical)];\n  const overflow = getStyle(el, key);\n  return [\"scroll\", \"auto\", \"overlay\"].some((s) => overflow.includes(s));\n};\nconst getScrollContainer = (el, isVertical) => {\n  if (!isClient)\n    return;\n  let parent = el;\n  while (parent) {\n    if ([window, document, document.documentElement].includes(parent))\n      return window;\n    if (isScroll(parent, isVertical))\n      return parent;\n    parent = parent.parentNode;\n  }\n  return parent;\n};\nlet scrollBarWidth;\nconst getScrollBarWidth = (namespace) => {\n  var _a;\n  if (!isClient)\n    return 0;\n  if (scrollBarWidth !== void 0)\n    return scrollBarWidth;\n  const outer = document.createElement(\"div\");\n  outer.className = `${namespace}-scrollbar__wrap`;\n  outer.style.visibility = \"hidden\";\n  outer.style.width = \"100px\";\n  outer.style.position = \"absolute\";\n  outer.style.top = \"-9999px\";\n  document.body.appendChild(outer);\n  const widthNoScroll = outer.offsetWidth;\n  outer.style.overflow = \"scroll\";\n  const inner = document.createElement(\"div\");\n  inner.style.width = \"100%\";\n  outer.appendChild(inner);\n  const widthWithScroll = inner.offsetWidth;\n  (_a = outer.parentNode) == null ? void 0 : _a.removeChild(outer);\n  scrollBarWidth = widthNoScroll - widthWithScroll;\n  return scrollBarWidth;\n};\nfunction scrollIntoView(container, selected) {\n  if (!isClient)\n    return;\n  if (!selected) {\n    container.scrollTop = 0;\n    return;\n  }\n  const offsetParents = [];\n  let pointer = selected.offsetParent;\n  while (pointer !== null && container !== pointer && container.contains(pointer)) {\n    offsetParents.push(pointer);\n    pointer = pointer.offsetParent;\n  }\n  const top = selected.offsetTop + offsetParents.reduce((prev, curr) => prev + curr.offsetTop, 0);\n  const bottom = top + selected.offsetHeight;\n  const viewRectTop = container.scrollTop;\n  const viewRectBottom = viewRectTop + container.clientHeight;\n  if (top < viewRectTop) {\n    container.scrollTop = top;\n  } else if (bottom > viewRectBottom) {\n    container.scrollTop = bottom - container.clientHeight;\n  }\n}\nfunction animateScrollTo(container, from, to, duration, callback) {\n  const startTime = Date.now();\n  let handle;\n  const scroll = () => {\n    const timestamp = Date.now();\n    const time = timestamp - startTime;\n    const nextScrollTop = easeInOutCubic(time > duration ? duration : time, from, to, duration);\n    if (isWindow(container)) {\n      container.scrollTo(window.pageXOffset, nextScrollTop);\n    } else {\n      container.scrollTop = nextScrollTop;\n    }\n    if (time < duration) {\n      handle = rAF(scroll);\n    } else if (isFunction(callback)) {\n      callback();\n    }\n  };\n  scroll();\n  return () => {\n    handle && cAF(handle);\n  };\n}\nconst getScrollElement = (target, container) => {\n  if (isWindow(container)) {\n    return target.ownerDocument.documentElement;\n  }\n  return container;\n};\nconst getScrollTop = (container) => {\n  if (isWindow(container)) {\n    return window.scrollY;\n  }\n  return container.scrollTop;\n};\n\nexport { animateScrollTo, getScrollBarWidth, getScrollContainer, getScrollElement, getScrollTop, isScroll, scrollIntoView };\n//# sourceMappingURL=scroll.mjs.map\n","class ElementPlusError extends Error {\n  constructor(m) {\n    super(m);\n    this.name = \"ElementPlusError\";\n  }\n}\nfunction throwError(scope, m) {\n  throw new ElementPlusError(`[${scope}] ${m}`);\n}\nfunction debugWarn(scope, message) {\n}\n\nexport { debugWarn, throwError };\n//# sourceMappingURL=error.mjs.map\n","import { NOOP } from '@vue/shared';\n\nconst withInstall = (main, extra) => {\n  main.install = (app) => {\n    for (const comp of [main, ...Object.values(extra != null ? extra : {})]) {\n      app.component(comp.name, comp);\n    }\n  };\n  if (extra) {\n    for (const [key, comp] of Object.entries(extra)) {\n      main[key] = comp;\n    }\n  }\n  return main;\n};\nconst withInstallFunction = (fn, name) => {\n  fn.install = (app) => {\n    fn._context = app._context;\n    app.config.globalProperties[name] = fn;\n  };\n  return fn;\n};\nconst withInstallDirective = (directive, name) => {\n  directive.install = (app) => {\n    app.directive(name, directive);\n  };\n  return directive;\n};\nconst withNoopInstall = (component) => {\n  component.install = NOOP;\n  return component;\n};\n\nexport { withInstall, withInstallDirective, withInstallFunction, withNoopInstall };\n//# sourceMappingURL=install.mjs.map\n","import { buildProps, definePropType } from '../../../utils/vue/props/runtime.mjs';\n\nconst iconProps = buildProps({\n  size: {\n    type: definePropType([Number, String])\n  },\n  color: {\n    type: String\n  }\n});\n\nexport { iconProps };\n//# sourceMappingURL=icon.mjs.map\n","import { defineComponent, computed, openBlock, createElementBlock, mergeProps, unref, renderSlot } from 'vue';\nimport { iconProps } from './icon.mjs';\nimport _export_sfc from '../../../_virtual/plugin-vue_export-helper.mjs';\nimport { useNamespace } from '../../../hooks/use-namespace/index.mjs';\nimport { isUndefined } from '../../../utils/types.mjs';\nimport { addUnit } from '../../../utils/dom/style.mjs';\n\nconst __default__ = defineComponent({\n  name: \"ElIcon\",\n  inheritAttrs: false\n});\nconst _sfc_main = /* @__PURE__ */ defineComponent({\n  ...__default__,\n  props: iconProps,\n  setup(__props) {\n    const props = __props;\n    const ns = useNamespace(\"icon\");\n    const style = computed(() => {\n      const { size, color } = props;\n      if (!size && !color)\n        return {};\n      return {\n        fontSize: isUndefined(size) ? void 0 : addUnit(size),\n        \"--color\": color\n      };\n    });\n    return (_ctx, _cache) => {\n      return openBlock(), createElementBlock(\"i\", mergeProps({\n        class: unref(ns).b(),\n        style: unref(style)\n      }, _ctx.$attrs), [\n        renderSlot(_ctx.$slots, \"default\")\n      ], 16);\n    };\n  }\n});\nvar Icon = /* @__PURE__ */ _export_sfc(_sfc_main, [[\"__file\", \"icon.vue\"]]);\n\nexport { Icon as default };\n//# sourceMappingURL=icon2.mjs.map\n","import Icon from './src/icon2.mjs';\nexport { iconProps } from './src/icon.mjs';\nimport { withInstall } from '../../utils/vue/install.mjs';\n\nconst ElIcon = withInstall(Icon);\n\nexport { ElIcon, ElIcon as default };\n//# sourceMappingURL=index.mjs.map\n","import { tryOnScopeDispose } from '@vueuse/core';\n\nfunction useTimeout() {\n  let timeoutHandle;\n  const registerTimeout = (fn, delay) => {\n    cancelTimeout();\n    timeoutHandle = window.setTimeout(fn, delay);\n  };\n  const cancelTimeout = () => window.clearTimeout(timeoutHandle);\n  tryOnScopeDispose(() => cancelTimeout());\n  return {\n    registerTimeout,\n    cancelTimeout\n  };\n}\n\nexport { useTimeout };\n//# sourceMappingURL=index.mjs.map\n","import { unref } from 'vue';\nimport { useTimeout } from '../use-timeout/index.mjs';\nimport { buildProps } from '../../utils/vue/props/runtime.mjs';\nimport { isNumber } from '../../utils/types.mjs';\n\nconst useDelayedToggleProps = buildProps({\n  showAfter: {\n    type: Number,\n    default: 0\n  },\n  hideAfter: {\n    type: Number,\n    default: 200\n  },\n  autoClose: {\n    type: Number,\n    default: 0\n  }\n});\nconst useDelayedToggle = ({\n  showAfter,\n  hideAfter,\n  autoClose,\n  open,\n  close\n}) => {\n  const { registerTimeout } = useTimeout();\n  const {\n    registerTimeout: registerTimeoutForAutoClose,\n    cancelTimeout: cancelTimeoutForAutoClose\n  } = useTimeout();\n  const onOpen = (event, delay = unref(showAfter)) => {\n    registerTimeout(() => {\n      open(event);\n      const _autoClose = unref(autoClose);\n      if (isNumber(_autoClose) && _autoClose > 0) {\n        registerTimeoutForAutoClose(() => {\n          close(event);\n        }, _autoClose);\n      }\n    }, delay);\n  };\n  const onClose = (event, delay = unref(hideAfter)) => {\n    cancelTimeoutForAutoClose();\n    registerTimeout(() => {\n      close(event);\n    }, delay);\n  };\n  return {\n    onOpen,\n    onClose\n  };\n};\n\nexport { useDelayedToggle, useDelayedToggleProps };\n//# sourceMappingURL=index.mjs.map\n","/*! Element Plus Icons Vue v2.3.2 */\n\n\n// src/components/add-location.vue\nimport { defineComponent as _defineComponent } from \"vue\";\nimport { createElementVNode as _createElementVNode, openBlock as _openBlock, createElementBlock as _createElementBlock } from \"vue\";\nvar _sfc_main = /* @__PURE__ */ _defineComponent({\n  name: \"AddLocation\",\n  __name: \"add-location\",\n  setup(__props) {\n    return (_ctx, _cache) => (_openBlock(), _createElementBlock(\"svg\", {\n      xmlns: \"http://www.w3.org/2000/svg\",\n      viewBox: \"0 0 1024 1024\"\n    }, [\n      _createElementVNode(\"path\", {\n        fill: \"currentColor\",\n        d: \"M288 896h448q32 0 32 32t-32 32H288q-32 0-32-32t32-32\"\n      }),\n      _createElementVNode(\"path\", {\n        fill: \"currentColor\",\n        d: \"M800 416a288 288 0 1 0-576 0c0 118.144 94.528 272.128 288 456.576C705.472 688.128 800 534.144 800 416M512 960C277.312 746.688 160 565.312 160 416a352 352 0 0 1 704 0c0 149.312-117.312 330.688-352 544\"\n      }),\n      _createElementVNode(\"path\", {\n        fill: \"currentColor\",\n        d: \"M544 384h96a32 32 0 1 1 0 64h-96v96a32 32 0 0 1-64 0v-96h-96a32 32 0 0 1 0-64h96v-96a32 32 0 0 1 64 0z\"\n      })\n    ]));\n  }\n}), add_location_default = _sfc_main;\n\n// src/components/aim.vue\nimport { defineComponent as _defineComponent2 } from \"vue\";\nimport { createElementVNode as _createElementVNode2, openBlock as _openBlock2, createElementBlock as _createElementBlock2 } from \"vue\";\nvar _sfc_main2 = /* @__PURE__ */ _defineComponent2({\n  name: \"Aim\",\n  __name: \"aim\",\n  setup(__props) {\n    return (_ctx, _cache) => (_openBlock2(), _createElementBlock2(\"svg\", {\n      xmlns: \"http://www.w3.org/2000/svg\",\n      viewBox: \"0 0 1024 1024\"\n    }, [\n      _createElementVNode2(\"path\", {\n        fill: \"currentColor\",\n        d: \"M512 896a384 384 0 1 0 0-768 384 384 0 0 0 0 768m0 64a448 448 0 1 1 0-896 448 448 0 0 1 0 896\"\n      }),\n      _createElementVNode2(\"path\", {\n        fill: \"currentColor\",\n        d: \"M512 96a32 32 0 0 1 32 32v192a32 32 0 0 1-64 0V128a32 32 0 0 1 32-32m0 576a32 32 0 0 1 32 32v192a32 32 0 1 1-64 0V704a32 32 0 0 1 32-32M96 512a32 32 0 0 1 32-32h192a32 32 0 0 1 0 64H128a32 32 0 0 1-32-32m576 0a32 32 0 0 1 32-32h192a32 32 0 1 1 0 64H704a32 32 0 0 1-32-32\"\n      })\n    ]));\n  }\n}), aim_default = _sfc_main2;\n\n// src/components/alarm-clock.vue\nimport { defineComponent as _defineComponent3 } from \"vue\";\nimport { createElementVNode as _createElementVNode3, openBlock as _openBlock3, createElementBlock as _createElementBlock3 } from \"vue\";\nvar _sfc_main3 = /* @__PURE__ */ _defineComponent3({\n  name: \"AlarmClock\",\n  __name: \"alarm-clock\",\n  setup(__props) {\n    return (_ctx, _cache) => (_openBlock3(), _createElementBlock3(\"svg\", {\n      xmlns: \"http://www.w3.org/2000/svg\",\n      viewBox: \"0 0 1024 1024\"\n    }, [\n      _createElementVNode3(\"path\", {\n        fill: \"currentColor\",\n        d: \"M512 832a320 320 0 1 0 0-640 320 320 0 0 0 0 640m0 64a384 384 0 1 1 0-768 384 384 0 0 1 0 768\"\n      }),\n      _createElementVNode3(\"path\", {\n        fill: \"currentColor\",\n        d: \"m292.288 824.576 55.424 32-48 83.136a32 32 0 1 1-55.424-32zm439.424 0-55.424 32 48 83.136a32 32 0 1 0 55.424-32zM512 512h160a32 32 0 1 1 0 64H480a32 32 0 0 1-32-32V320a32 32 0 0 1 64 0zM90.496 312.256A160 160 0 0 1 312.32 90.496l-46.848 46.848a96 96 0 0 0-128 128L90.56 312.256zm835.264 0A160 160 0 0 0 704 90.496l46.848 46.848a96 96 0 0 1 128 128z\"\n      })\n    ]));\n  }\n}), alarm_clock_default = _sfc_main3;\n\n// src/components/apple.vue\nimport { defineComponent as _defineComponent4 } from \"vue\";\nimport { createElementVNode as _createElementVNode4, openBlock as _openBlock4, createElementBlock as _createElementBlock4 } from \"vue\";\nvar _sfc_main4 = /* @__PURE__ */ _defineComponent4({\n  name: \"Apple\",\n  __name: \"apple\",\n  setup(__props) {\n    return (_ctx, _cache) => (_openBlock4(), _createElementBlock4(\"svg\", {\n      xmlns: \"http://www.w3.org/2000/svg\",\n      viewBox: \"0 0 1024 1024\"\n    }, [\n      _createElementVNode4(\"path\", {\n        fill: \"currentColor\",\n        d: \"M599.872 203.776a189.4 189.4 0 0 1 64.384-4.672l2.624.128c31.168 1.024 51.2 4.096 79.488 16.32 37.632 16.128 74.496 45.056 111.488 89.344 96.384 115.264 82.752 372.8-34.752 521.728-7.68 9.728-32 41.6-30.72 39.936a427 427 0 0 1-30.08 35.776c-31.232 32.576-65.28 49.216-110.08 50.048-31.36.64-53.568-5.312-84.288-18.752l-6.528-2.88c-20.992-9.216-30.592-11.904-47.296-11.904-18.112 0-28.608 2.88-51.136 12.672l-6.464 2.816c-28.416 12.224-48.32 18.048-76.16 19.2-74.112 2.752-116.928-38.08-180.672-132.16-96.64-142.08-132.608-349.312-55.04-486.4 46.272-81.92 129.92-133.632 220.672-135.04 32.832-.576 60.288 6.848 99.648 22.72 27.136 10.88 34.752 13.76 37.376 14.272 16.256-20.16 27.776-36.992 34.56-50.24 13.568-26.304 27.2-59.968 40.704-100.8a32 32 0 1 1 60.8 20.224c-12.608 37.888-25.408 70.4-38.528 97.664m-51.52 78.08c-14.528 17.792-31.808 37.376-51.904 58.816a32 32 0 1 1-46.72-43.776l12.288-13.248c-28.032-11.2-61.248-26.688-95.68-26.112-70.4 1.088-135.296 41.6-171.648 105.792C121.6 492.608 176 684.16 247.296 788.992c34.816 51.328 76.352 108.992 130.944 106.944 52.48-2.112 72.32-34.688 135.872-34.688s81.28 34.688 136.96 33.536c56.448-1.088 75.776-39.04 126.848-103.872 107.904-136.768 107.904-362.752 35.776-449.088-72.192-86.272-124.672-84.096-151.68-85.12-41.472-4.288-81.6 12.544-113.664 25.152\"\n      })\n    ]));\n  }\n}), apple_default = _sfc_main4;\n\n// src/components/arrow-down-bold.vue\nimport { defineComponent as _defineComponent5 } from \"vue\";\nimport { createElementVNode as _createElementVNode5, openBlock as _openBlock5, createElementBlock as _createElementBlock5 } from \"vue\";\nvar _sfc_main5 = /* @__PURE__ */ _defineComponent5({\n  name: \"ArrowDownBold\",\n  __name: \"arrow-down-bold\",\n  setup(__props) {\n    return (_ctx, _cache) => (_openBlock5(), _createElementBlock5(\"svg\", {\n      xmlns: \"http://www.w3.org/2000/svg\",\n      viewBox: \"0 0 1024 1024\"\n    }, [\n      _createElementVNode5(\"path\", {\n        fill: \"currentColor\",\n        d: \"M104.704 338.752a64 64 0 0 1 90.496 0l316.8 316.8 316.8-316.8a64 64 0 0 1 90.496 90.496L557.248 791.296a64 64 0 0 1-90.496 0L104.704 429.248a64 64 0 0 1 0-90.496\"\n      })\n    ]));\n  }\n}), arrow_down_bold_default = _sfc_main5;\n\n// src/components/arrow-down.vue\nimport { defineComponent as _defineComponent6 } from \"vue\";\nimport { createElementVNode as _createElementVNode6, openBlock as _openBlock6, createElementBlock as _createElementBlock6 } from \"vue\";\nvar _sfc_main6 = /* @__PURE__ */ _defineComponent6({\n  name: \"ArrowDown\",\n  __name: \"arrow-down\",\n  setup(__props) {\n    return (_ctx, _cache) => (_openBlock6(), _createElementBlock6(\"svg\", {\n      xmlns: \"http://www.w3.org/2000/svg\",\n      viewBox: \"0 0 1024 1024\"\n    }, [\n      _createElementVNode6(\"path\", {\n        fill: \"currentColor\",\n        d: \"M831.872 340.864 512 652.672 192.128 340.864a30.59 30.59 0 0 0-42.752 0 29.12 29.12 0 0 0 0 41.6L489.664 714.24a32 32 0 0 0 44.672 0l340.288-331.712a29.12 29.12 0 0 0 0-41.728 30.59 30.59 0 0 0-42.752 0z\"\n      })\n    ]));\n  }\n}), arrow_down_default = _sfc_main6;\n\n// src/components/arrow-left-bold.vue\nimport { defineComponent as _defineComponent7 } from \"vue\";\nimport { createElementVNode as _createElementVNode7, openBlock as _openBlock7, createElementBlock as _createElementBlock7 } from \"vue\";\nvar _sfc_main7 = /* @__PURE__ */ _defineComponent7({\n  name: \"ArrowLeftBold\",\n  __name: \"arrow-left-bold\",\n  setup(__props) {\n    return (_ctx, _cache) => (_openBlock7(), _createElementBlock7(\"svg\", {\n      xmlns: \"http://www.w3.org/2000/svg\",\n      viewBox: \"0 0 1024 1024\"\n    }, [\n      _createElementVNode7(\"path\", {\n        fill: \"currentColor\",\n        d: \"M685.248 104.704a64 64 0 0 1 0 90.496L368.448 512l316.8 316.8a64 64 0 0 1-90.496 90.496L232.704 557.248a64 64 0 0 1 0-90.496l362.048-362.048a64 64 0 0 1 90.496 0\"\n      })\n    ]));\n  }\n}), arrow_left_bold_default = _sfc_main7;\n\n// src/components/arrow-left.vue\nimport { defineComponent as _defineComponent8 } from \"vue\";\nimport { createElementVNode as _createElementVNode8, openBlock as _openBlock8, createElementBlock as _createElementBlock8 } from \"vue\";\nvar _sfc_main8 = /* @__PURE__ */ _defineComponent8({\n  name: \"ArrowLeft\",\n  __name: \"arrow-left\",\n  setup(__props) {\n    return (_ctx, _cache) => (_openBlock8(), _createElementBlock8(\"svg\", {\n      xmlns: \"http://www.w3.org/2000/svg\",\n      viewBox: \"0 0 1024 1024\"\n    }, [\n      _createElementVNode8(\"path\", {\n        fill: \"currentColor\",\n        d: \"M609.408 149.376 277.76 489.6a32 32 0 0 0 0 44.672l331.648 340.352a29.12 29.12 0 0 0 41.728 0 30.59 30.59 0 0 0 0-42.752L339.264 511.936l311.872-319.872a30.59 30.59 0 0 0 0-42.688 29.12 29.12 0 0 0-41.728 0\"\n      })\n    ]));\n  }\n}), arrow_left_default = _sfc_main8;\n\n// src/components/arrow-right-bold.vue\nimport { defineComponent as _defineComponent9 } from \"vue\";\nimport { createElementVNode as _createElementVNode9, openBlock as _openBlock9, createElementBlock as _createElementBlock9 } from \"vue\";\nvar _sfc_main9 = /* @__PURE__ */ _defineComponent9({\n  name: \"ArrowRightBold\",\n  __name: \"arrow-right-bold\",\n  setup(__props) {\n    return (_ctx, _cache) => (_openBlock9(), _createElementBlock9(\"svg\", {\n      xmlns: \"http://www.w3.org/2000/svg\",\n      viewBox: \"0 0 1024 1024\"\n    }, [\n      _createElementVNode9(\"path\", {\n        fill: \"currentColor\",\n        d: \"M338.752 104.704a64 64 0 0 0 0 90.496l316.8 316.8-316.8 316.8a64 64 0 0 0 90.496 90.496l362.048-362.048a64 64 0 0 0 0-90.496L429.248 104.704a64 64 0 0 0-90.496 0\"\n      })\n    ]));\n  }\n}), arrow_right_bold_default = _sfc_main9;\n\n// src/components/arrow-right.vue\nimport { defineComponent as _defineComponent10 } from \"vue\";\nimport { createElementVNode as _createElementVNode10, openBlock as _openBlock10, createElementBlock as _createElementBlock10 } from \"vue\";\nvar _sfc_main10 = /* @__PURE__ */ _defineComponent10({\n  name: \"ArrowRight\",\n  __name: \"arrow-right\",\n  setup(__props) {\n    return (_ctx, _cache) => (_openBlock10(), _createElementBlock10(\"svg\", {\n      xmlns: \"http://www.w3.org/2000/svg\",\n      viewBox: \"0 0 1024 1024\"\n    }, [\n      _createElementVNode10(\"path\", {\n        fill: \"currentColor\",\n        d: \"M340.864 149.312a30.59 30.59 0 0 0 0 42.752L652.736 512 340.864 831.872a30.59 30.59 0 0 0 0 42.752 29.12 29.12 0 0 0 41.728 0L714.24 534.336a32 32 0 0 0 0-44.672L382.592 149.376a29.12 29.12 0 0 0-41.728 0z\"\n      })\n    ]));\n  }\n}), arrow_right_default = _sfc_main10;\n\n// src/components/arrow-up-bold.vue\nimport { defineComponent as _defineComponent11 } from \"vue\";\nimport { createElementVNode as _createElementVNode11, openBlock as _openBlock11, createElementBlock as _createElementBlock11 } from \"vue\";\nvar _sfc_main11 = /* @__PURE__ */ _defineComponent11({\n  name: \"ArrowUpBold\",\n  __name: \"arrow-up-bold\",\n  setup(__props) {\n    return (_ctx, _cache) => (_openBlock11(), _createElementBlock11(\"svg\", {\n      xmlns: \"http://www.w3.org/2000/svg\",\n      viewBox: \"0 0 1024 1024\"\n    }, [\n      _createElementVNode11(\"path\", {\n        fill: \"currentColor\",\n        d: \"M104.704 685.248a64 64 0 0 0 90.496 0l316.8-316.8 316.8 316.8a64 64 0 0 0 90.496-90.496L557.248 232.704a64 64 0 0 0-90.496 0L104.704 594.752a64 64 0 0 0 0 90.496\"\n      })\n    ]));\n  }\n}), arrow_up_bold_default = _sfc_main11;\n\n// src/components/arrow-up.vue\nimport { defineComponent as _defineComponent12 } from \"vue\";\nimport { createElementVNode as _createElementVNode12, openBlock as _openBlock12, createElementBlock as _createElementBlock12 } from \"vue\";\nvar _sfc_main12 = /* @__PURE__ */ _defineComponent12({\n  name: \"ArrowUp\",\n  __name: \"arrow-up\",\n  setup(__props) {\n    return (_ctx, _cache) => (_openBlock12(), _createElementBlock12(\"svg\", {\n      xmlns: \"http://www.w3.org/2000/svg\",\n      viewBox: \"0 0 1024 1024\"\n    }, [\n      _createElementVNode12(\"path\", {\n        fill: \"currentColor\",\n        d: \"m488.832 344.32-339.84 356.672a32 32 0 0 0 0 44.16l.384.384a29.44 29.44 0 0 0 42.688 0l320-335.872 319.872 335.872a29.44 29.44 0 0 0 42.688 0l.384-.384a32 32 0 0 0 0-44.16L535.168 344.32a32 32 0 0 0-46.336 0\"\n      })\n    ]));\n  }\n}), arrow_up_default = _sfc_main12;\n\n// src/components/avatar.vue\nimport { defineComponent as _defineComponent13 } from \"vue\";\nimport { createElementVNode as _createElementVNode13, openBlock as _openBlock13, createElementBlock as _createElementBlock13 } from \"vue\";\nvar _sfc_main13 = /* @__PURE__ */ _defineComponent13({\n  name: \"Avatar\",\n  __name: \"avatar\",\n  setup(__props) {\n    return (_ctx, _cache) => (_openBlock13(), _createElementBlock13(\"svg\", {\n      xmlns: \"http://www.w3.org/2000/svg\",\n      viewBox: \"0 0 1024 1024\"\n    }, [\n      _createElementVNode13(\"path\", {\n        fill: \"currentColor\",\n        d: \"M628.736 528.896A416 416 0 0 1 928 928H96a415.87 415.87 0 0 1 299.264-399.104L512 704zM720 304a208 208 0 1 1-416 0 208 208 0 0 1 416 0\"\n      })\n    ]));\n  }\n}), avatar_default = _sfc_main13;\n\n// src/components/back.vue\nimport { defineComponent as _defineComponent14 } from \"vue\";\nimport { createElementVNode as _createElementVNode14, openBlock as _openBlock14, createElementBlock as _createElementBlock14 } from \"vue\";\nvar _sfc_main14 = /* @__PURE__ */ _defineComponent14({\n  name: \"Back\",\n  __name: \"back\",\n  setup(__props) {\n    return (_ctx, _cache) => (_openBlock14(), _createElementBlock14(\"svg\", {\n      xmlns: \"http://www.w3.org/2000/svg\",\n      viewBox: \"0 0 1024 1024\"\n    }, [\n      _createElementVNode14(\"path\", {\n        fill: \"currentColor\",\n        d: \"M224 480h640a32 32 0 1 1 0 64H224a32 32 0 0 1 0-64\"\n      }),\n      _createElementVNode14(\"path\", {\n        fill: \"currentColor\",\n        d: \"m237.248 512 265.408 265.344a32 32 0 0 1-45.312 45.312l-288-288a32 32 0 0 1 0-45.312l288-288a32 32 0 1 1 45.312 45.312z\"\n      })\n    ]));\n  }\n}), back_default = _sfc_main14;\n\n// src/components/baseball.vue\nimport { defineComponent as _defineComponent15 } from \"vue\";\nimport { createElementVNode as _createElementVNode15, openBlock as _openBlock15, createElementBlock as _createElementBlock15 } from \"vue\";\nvar _sfc_main15 = /* @__PURE__ */ _defineComponent15({\n  name: \"Baseball\",\n  __name: \"baseball\",\n  setup(__props) {\n    return (_ctx, _cache) => (_openBlock15(), _createElementBlock15(\"svg\", {\n      xmlns: \"http://www.w3.org/2000/svg\",\n      viewBox: \"0 0 1024 1024\"\n    }, [\n      _createElementVNode15(\"path\", {\n        fill: \"currentColor\",\n        d: \"M195.2 828.8a448 448 0 1 1 633.6-633.6 448 448 0 0 1-633.6 633.6m45.248-45.248a384 384 0 1 0 543.104-543.104 384 384 0 0 0-543.104 543.104\"\n      }),\n      _createElementVNode15(\"path\", {\n        fill: \"currentColor\",\n        d: \"M497.472 96.896c22.784 4.672 44.416 9.472 64.896 14.528a256.128 256.128 0 0 0 350.208 350.208c5.056 20.48 9.856 42.112 14.528 64.896A320.128 320.128 0 0 1 497.472 96.896M108.48 491.904a320.128 320.128 0 0 1 423.616 423.68c-23.04-3.648-44.992-7.424-65.728-11.52a256.128 256.128 0 0 0-346.496-346.432 1737 1737 0 0 1-11.392-65.728\"\n      })\n    ]));\n  }\n}), baseball_default = _sfc_main15;\n\n// src/components/basketball.vue\nimport { defineComponent as _defineComponent16 } from \"vue\";\nimport { createElementVNode as _createElementVNode16, openBlock as _openBlock16, createElementBlock as _createElementBlock16 } from \"vue\";\nvar _sfc_main16 = /* @__PURE__ */ _defineComponent16({\n  name: \"Basketball\",\n  __name: \"basketball\",\n  setup(__props) {\n    return (_ctx, _cache) => (_openBlock16(), _createElementBlock16(\"svg\", {\n      xmlns: \"http://www.w3.org/2000/svg\",\n      viewBox: \"0 0 1024 1024\"\n    }, [\n      _createElementVNode16(\"path\", {\n        fill: \"currentColor\",\n        d: \"M778.752 788.224a382.46 382.46 0 0 0 116.032-245.632 256.51 256.51 0 0 0-241.728-13.952 762.9 762.9 0 0 1 125.696 259.584m-55.04 44.224a699.65 699.65 0 0 0-125.056-269.632 256.13 256.13 0 0 0-56.064 331.968 382.7 382.7 0 0 0 181.12-62.336m-254.08 61.248A320.13 320.13 0 0 1 557.76 513.6a716 716 0 0 0-48.192-48.128 320.13 320.13 0 0 1-379.264 88.384 382.4 382.4 0 0 0 110.144 229.696 382.4 382.4 0 0 0 229.184 110.08zM129.28 481.088a256.13 256.13 0 0 0 331.072-56.448 699.65 699.65 0 0 0-268.8-124.352 382.66 382.66 0 0 0-62.272 180.8m106.56-235.84a762.9 762.9 0 0 1 258.688 125.056 256.51 256.51 0 0 0-13.44-241.088A382.46 382.46 0 0 0 235.84 245.248m318.08-114.944c40.576 89.536 37.76 193.92-8.448 281.344a780 780 0 0 1 66.176 66.112 320.83 320.83 0 0 1 282.112-8.128 382.4 382.4 0 0 0-110.144-229.12 382.4 382.4 0 0 0-229.632-110.208zM828.8 828.8a448 448 0 1 1-633.6-633.6 448 448 0 0 1 633.6 633.6\"\n      })\n    ]));\n  }\n}), basketball_default = _sfc_main16;\n\n// src/components/bell-filled.vue\nimport { defineComponent as _defineComponent17 } from \"vue\";\nimport { createElementVNode as _createElementVNode17, openBlock as _openBlock17, createElementBlock as _createElementBlock17 } from \"vue\";\nvar _sfc_main17 = /* @__PURE__ */ _defineComponent17({\n  name: \"BellFilled\",\n  __name: \"bell-filled\",\n  setup(__props) {\n    return (_ctx, _cache) => (_openBlock17(), _createElementBlock17(\"svg\", {\n      xmlns: \"http://www.w3.org/2000/svg\",\n      viewBox: \"0 0 1024 1024\"\n    }, [\n      _createElementVNode17(\"path\", {\n        fill: \"currentColor\",\n        d: \"M640 832a128 128 0 0 1-256 0zm192-64H134.4a38.4 38.4 0 0 1 0-76.8H192V448c0-154.88 110.08-284.16 256.32-313.6a64 64 0 1 1 127.36 0A320.13 320.13 0 0 1 832 448v243.2h57.6a38.4 38.4 0 0 1 0 76.8z\"\n      })\n    ]));\n  }\n}), bell_filled_default = _sfc_main17;\n\n// src/components/bell.vue\nimport { defineComponent as _defineComponent18 } from \"vue\";\nimport { createElementVNode as _createElementVNode18, openBlock as _openBlock18, createElementBlock as _createElementBlock18 } from \"vue\";\nvar _sfc_main18 = /* @__PURE__ */ _defineComponent18({\n  name: \"Bell\",\n  __name: \"bell\",\n  setup(__props) {\n    return (_ctx, _cache) => (_openBlock18(), _createElementBlock18(\"svg\", {\n      xmlns: \"http://www.w3.org/2000/svg\",\n      viewBox: \"0 0 1024 1024\"\n    }, [\n      _createElementVNode18(\"path\", {\n        fill: \"currentColor\",\n        d: \"M512 64a64 64 0 0 1 64 64v64H448v-64a64 64 0 0 1 64-64\"\n      }),\n      _createElementVNode18(\"path\", {\n        fill: \"currentColor\",\n        d: \"M256 768h512V448a256 256 0 1 0-512 0zm256-640a320 320 0 0 1 320 320v384H192V448a320 320 0 0 1 320-320\"\n      }),\n      _createElementVNode18(\"path\", {\n        fill: \"currentColor\",\n        d: \"M96 768h832q32 0 32 32t-32 32H96q-32 0-32-32t32-32m352 128h128a64 64 0 0 1-128 0\"\n      })\n    ]));\n  }\n}), bell_default = _sfc_main18;\n\n// src/components/bicycle.vue\nimport { defineComponent as _defineComponent19 } from \"vue\";\nimport { createElementVNode as _createElementVNode19, openBlock as _openBlock19, createElementBlock as _createElementBlock19 } from \"vue\";\nvar _sfc_main19 = /* @__PURE__ */ _defineComponent19({\n  name: \"Bicycle\",\n  __name: \"bicycle\",\n  setup(__props) {\n    return (_ctx, _cache) => (_openBlock19(), _createElementBlock19(\"svg\", {\n      xmlns: \"http://www.w3.org/2000/svg\",\n      viewBox: \"0 0 1024 1024\"\n    }, [\n      _createElementVNode19(\"path\", {\n        fill: \"currentColor\",\n        d: \"M256 832a128 128 0 1 0 0-256 128 128 0 0 0 0 256m0 64a192 192 0 1 1 0-384 192 192 0 0 1 0 384\"\n      }),\n      _createElementVNode19(\"path\", {\n        fill: \"currentColor\",\n        d: \"M288 672h320q32 0 32 32t-32 32H288q-32 0-32-32t32-32\"\n      }),\n      _createElementVNode19(\"path\", {\n        fill: \"currentColor\",\n        d: \"M768 832a128 128 0 1 0 0-256 128 128 0 0 0 0 256m0 64a192 192 0 1 1 0-384 192 192 0 0 1 0 384\"\n      }),\n      _createElementVNode19(\"path\", {\n        fill: \"currentColor\",\n        d: \"M480 192a32 32 0 0 1 0-64h160a32 32 0 0 1 31.04 24.256l96 384a32 32 0 0 1-62.08 15.488L615.04 192zM96 384a32 32 0 0 1 0-64h128a32 32 0 0 1 30.336 21.888l64 192a32 32 0 1 1-60.672 20.224L200.96 384z\"\n      }),\n      _createElementVNode19(\"path\", {\n        fill: \"currentColor\",\n        d: \"m373.376 599.808-42.752-47.616 320-288 42.752 47.616z\"\n      })\n    ]));\n  }\n}), bicycle_default = _sfc_main19;\n\n// src/components/bottom-left.vue\nimport { defineComponent as _defineComponent20 } from \"vue\";\nimport { createElementVNode as _createElementVNode20, openBlock as _openBlock20, createElementBlock as _createElementBlock20 } from \"vue\";\nvar _sfc_main20 = /* @__PURE__ */ _defineComponent20({\n  name: \"BottomLeft\",\n  __name: \"bottom-left\",\n  setup(__props) {\n    return (_ctx, _cache) => (_openBlock20(), _createElementBlock20(\"svg\", {\n      xmlns: \"http://www.w3.org/2000/svg\",\n      viewBox: \"0 0 1024 1024\"\n    }, [\n      _createElementVNode20(\"path\", {\n        fill: \"currentColor\",\n        d: \"M256 768h416a32 32 0 1 1 0 64H224a32 32 0 0 1-32-32V352a32 32 0 0 1 64 0z\"\n      }),\n      _createElementVNode20(\"path\", {\n        fill: \"currentColor\",\n        d: \"M246.656 822.656a32 32 0 0 1-45.312-45.312l544-544a32 32 0 0 1 45.312 45.312z\"\n      })\n    ]));\n  }\n}), bottom_left_default = _sfc_main20;\n\n// src/components/bottom-right.vue\nimport { defineComponent as _defineComponent21 } from \"vue\";\nimport { createElementVNode as _createElementVNode21, openBlock as _openBlock21, createElementBlock as _createElementBlock21 } from \"vue\";\nvar _sfc_main21 = /* @__PURE__ */ _defineComponent21({\n  name: \"BottomRight\",\n  __name: \"bottom-right\",\n  setup(__props) {\n    return (_ctx, _cache) => (_openBlock21(), _createElementBlock21(\"svg\", {\n      xmlns: \"http://www.w3.org/2000/svg\",\n      viewBox: \"0 0 1024 1024\"\n    }, [\n      _createElementVNode21(\"path\", {\n        fill: \"currentColor\",\n        d: \"M352 768a32 32 0 1 0 0 64h448a32 32 0 0 0 32-32V352a32 32 0 0 0-64 0v416z\"\n      }),\n      _createElementVNode21(\"path\", {\n        fill: \"currentColor\",\n        d: \"M777.344 822.656a32 32 0 0 0 45.312-45.312l-544-544a32 32 0 0 0-45.312 45.312z\"\n      })\n    ]));\n  }\n}), bottom_right_default = _sfc_main21;\n\n// src/components/bottom.vue\nimport { defineComponent as _defineComponent22 } from \"vue\";\nimport { createElementVNode as _createElementVNode22, openBlock as _openBlock22, createElementBlock as _createElementBlock22 } from \"vue\";\nvar _sfc_main22 = /* @__PURE__ */ _defineComponent22({\n  name: \"Bottom\",\n  __name: \"bottom\",\n  setup(__props) {\n    return (_ctx, _cache) => (_openBlock22(), _createElementBlock22(\"svg\", {\n      xmlns: \"http://www.w3.org/2000/svg\",\n      viewBox: \"0 0 1024 1024\"\n    }, [\n      _createElementVNode22(\"path\", {\n        fill: \"currentColor\",\n        d: \"M544 805.888V168a32 32 0 1 0-64 0v637.888L246.656 557.952a30.72 30.72 0 0 0-45.312 0 35.52 35.52 0 0 0 0 48.064l288 306.048a30.72 30.72 0 0 0 45.312 0l288-306.048a35.52 35.52 0 0 0 0-48 30.72 30.72 0 0 0-45.312 0L544 805.824z\"\n      })\n    ]));\n  }\n}), bottom_default = _sfc_main22;\n\n// src/components/bowl.vue\nimport { defineComponent as _defineComponent23 } from \"vue\";\nimport { createElementVNode as _createElementVNode23, openBlock as _openBlock23, createElementBlock as _createElementBlock23 } from \"vue\";\nvar _sfc_main23 = /* @__PURE__ */ _defineComponent23({\n  name: \"Bowl\",\n  __name: \"bowl\",\n  setup(__props) {\n    return (_ctx, _cache) => (_openBlock23(), _createElementBlock23(\"svg\", {\n      xmlns: \"http://www.w3.org/2000/svg\",\n      viewBox: \"0 0 1024 1024\"\n    }, [\n      _createElementVNode23(\"path\", {\n        fill: \"currentColor\",\n        d: \"M714.432 704a351.74 351.74 0 0 0 148.16-256H161.408a351.74 351.74 0 0 0 148.16 256zM288 766.592A415.68 415.68 0 0 1 96 416a32 32 0 0 1 32-32h768a32 32 0 0 1 32 32 415.68 415.68 0 0 1-192 350.592V832a64 64 0 0 1-64 64H352a64 64 0 0 1-64-64zM493.248 320h-90.496l254.4-254.4a32 32 0 1 1 45.248 45.248zm187.328 0h-128l269.696-155.712a32 32 0 0 1 32 55.424zM352 768v64h320v-64z\"\n      })\n    ]));\n  }\n}), bowl_default = _sfc_main23;\n\n// src/components/box.vue\nimport { defineComponent as _defineComponent24 } from \"vue\";\nimport { createElementVNode as _createElementVNode24, openBlock as _openBlock24, createElementBlock as _createElementBlock24 } from \"vue\";\nvar _sfc_main24 = /* @__PURE__ */ _defineComponent24({\n  name: \"Box\",\n  __name: \"box\",\n  setup(__props) {\n    return (_ctx, _cache) => (_openBlock24(), _createElementBlock24(\"svg\", {\n      xmlns: \"http://www.w3.org/2000/svg\",\n      viewBox: \"0 0 1024 1024\"\n    }, [\n      _createElementVNode24(\"path\", {\n        fill: \"currentColor\",\n        d: \"M317.056 128 128 344.064V896h768V344.064L706.944 128zm-14.528-64h418.944a32 32 0 0 1 24.064 10.88l206.528 236.096A32 32 0 0 1 960 332.032V928a32 32 0 0 1-32 32H96a32 32 0 0 1-32-32V332.032a32 32 0 0 1 7.936-21.12L278.4 75.008A32 32 0 0 1 302.528 64\"\n      }),\n      _createElementVNode24(\"path\", {\n        fill: \"currentColor\",\n        d: \"M64 320h896v64H64z\"\n      }),\n      _createElementVNode24(\"path\", {\n        fill: \"currentColor\",\n        d: \"M448 327.872V640h128V327.872L526.08 128h-28.16zM448 64h128l64 256v352a32 32 0 0 1-32 32H416a32 32 0 0 1-32-32V320z\"\n      })\n    ]));\n  }\n}), box_default = _sfc_main24;\n\n// src/components/briefcase.vue\nimport { defineComponent as _defineComponent25 } from \"vue\";\nimport { createElementVNode as _createElementVNode25, openBlock as _openBlock25, createElementBlock as _createElementBlock25 } from \"vue\";\nvar _sfc_main25 = /* @__PURE__ */ _defineComponent25({\n  name: \"Briefcase\",\n  __name: \"briefcase\",\n  setup(__props) {\n    return (_ctx, _cache) => (_openBlock25(), _createElementBlock25(\"svg\", {\n      xmlns: \"http://www.w3.org/2000/svg\",\n      viewBox: \"0 0 1024 1024\"\n    }, [\n      _createElementVNode25(\"path\", {\n        fill: \"currentColor\",\n        d: \"M320 320V128h384v192h192v192H128V320zM128 576h768v320H128zm256-256h256.064V192H384z\"\n      })\n    ]));\n  }\n}), briefcase_default = _sfc_main25;\n\n// src/components/brush-filled.vue\nimport { defineComponent as _defineComponent26 } from \"vue\";\nimport { createElementVNode as _createElementVNode26, openBlock as _openBlock26, createElementBlock as _createElementBlock26 } from \"vue\";\nvar _sfc_main26 = /* @__PURE__ */ _defineComponent26({\n  name: \"BrushFilled\",\n  __name: \"brush-filled\",\n  setup(__props) {\n    return (_ctx, _cache) => (_openBlock26(), _createElementBlock26(\"svg\", {\n      xmlns: \"http://www.w3.org/2000/svg\",\n      viewBox: \"0 0 1024 1024\"\n    }, [\n      _createElementVNode26(\"path\", {\n        fill: \"currentColor\",\n        d: \"M608 704v160a96 96 0 0 1-192 0V704h-96a128 128 0 0 1-128-128h640a128 128 0 0 1-128 128zM192 512V128.064h640V512z\"\n      })\n    ]));\n  }\n}), brush_filled_default = _sfc_main26;\n\n// src/components/brush.vue\nimport { defineComponent as _defineComponent27 } from \"vue\";\nimport { createElementVNode as _createElementVNode27, openBlock as _openBlock27, createElementBlock as _createElementBlock27 } from \"vue\";\nvar _sfc_main27 = /* @__PURE__ */ _defineComponent27({\n  name: \"Brush\",\n  __name: \"brush\",\n  setup(__props) {\n    return (_ctx, _cache) => (_openBlock27(), _createElementBlock27(\"svg\", {\n      xmlns: \"http://www.w3.org/2000/svg\",\n      viewBox: \"0 0 1024 1024\"\n    }, [\n      _createElementVNode27(\"path\", {\n        fill: \"currentColor\",\n        d: \"M896 448H128v192a64 64 0 0 0 64 64h192v192h256V704h192a64 64 0 0 0 64-64zm-770.752-64c0-47.552 5.248-90.24 15.552-128 14.72-54.016 42.496-107.392 83.2-160h417.28l-15.36 70.336L736 96h211.2c-24.832 42.88-41.92 96.256-51.2 160a664 664 0 0 0-6.144 128H960v256a128 128 0 0 1-128 128H704v160a32 32 0 0 1-32 32H352a32 32 0 0 1-32-32V768H192A128 128 0 0 1 64 640V384zm64 0h636.544c-2.048-45.824.256-91.584 6.848-137.216 4.48-30.848 10.688-59.776 18.688-86.784h-96.64l-221.12 141.248L561.92 160H256.512c-25.856 37.888-43.776 75.456-53.952 112.832-8.768 32.064-13.248 69.12-13.312 111.168\"\n      })\n    ]));\n  }\n}), brush_default = _sfc_main27;\n\n// src/components/burger.vue\nimport { defineComponent as _defineComponent28 } from \"vue\";\nimport { createElementVNode as _createElementVNode28, openBlock as _openBlock28, createElementBlock as _createElementBlock28 } from \"vue\";\nvar _sfc_main28 = /* @__PURE__ */ _defineComponent28({\n  name: \"Burger\",\n  __name: \"burger\",\n  setup(__props) {\n    return (_ctx, _cache) => (_openBlock28(), _createElementBlock28(\"svg\", {\n      xmlns: \"http://www.w3.org/2000/svg\",\n      viewBox: \"0 0 1024 1024\"\n    }, [\n      _createElementVNode28(\"path\", {\n        fill: \"currentColor\",\n        d: \"M160 512a32 32 0 0 0-32 32v64a32 32 0 0 0 30.08 32H864a32 32 0 0 0 32-32v-64a32 32 0 0 0-32-32zm736-58.56A96 96 0 0 1 960 544v64a96 96 0 0 1-51.968 85.312L855.36 833.6a96 96 0 0 1-89.856 62.272H258.496A96 96 0 0 1 168.64 833.6l-52.608-140.224A96 96 0 0 1 64 608v-64a96 96 0 0 1 64-90.56V448a384 384 0 1 1 768 5.44M832 448a320 320 0 0 0-640 0zM512 704H188.352l40.192 107.136a32 32 0 0 0 29.952 20.736h507.008a32 32 0 0 0 29.952-20.736L835.648 704z\"\n      })\n    ]));\n  }\n}), burger_default = _sfc_main28;\n\n// src/components/calendar.vue\nimport { defineComponent as _defineComponent29 } from \"vue\";\nimport { createElementVNode as _createElementVNode29, openBlock as _openBlock29, createElementBlock as _createElementBlock29 } from \"vue\";\nvar _sfc_main29 = /* @__PURE__ */ _defineComponent29({\n  name: \"Calendar\",\n  __name: \"calendar\",\n  setup(__props) {\n    return (_ctx, _cache) => (_openBlock29(), _createElementBlock29(\"svg\", {\n      xmlns: \"http://www.w3.org/2000/svg\",\n      viewBox: \"0 0 1024 1024\"\n    }, [\n      _createElementVNode29(\"path\", {\n        fill: \"currentColor\",\n        d: \"M128 384v512h768V192H768v32a32 32 0 1 1-64 0v-32H320v32a32 32 0 0 1-64 0v-32H128v128h768v64zm192-256h384V96a32 32 0 1 1 64 0v32h160a32 32 0 0 1 32 32v768a32 32 0 0 1-32 32H96a32 32 0 0 1-32-32V160a32 32 0 0 1 32-32h160V96a32 32 0 0 1 64 0zm-32 384h64a32 32 0 0 1 0 64h-64a32 32 0 0 1 0-64m0 192h64a32 32 0 1 1 0 64h-64a32 32 0 1 1 0-64m192-192h64a32 32 0 0 1 0 64h-64a32 32 0 0 1 0-64m0 192h64a32 32 0 1 1 0 64h-64a32 32 0 1 1 0-64m192-192h64a32 32 0 1 1 0 64h-64a32 32 0 1 1 0-64m0 192h64a32 32 0 1 1 0 64h-64a32 32 0 1 1 0-64\"\n      })\n    ]));\n  }\n}), calendar_default = _sfc_main29;\n\n// src/components/camera-filled.vue\nimport { defineComponent as _defineComponent30 } from \"vue\";\nimport { createElementVNode as _createElementVNode30, openBlock as _openBlock30, createElementBlock as _createElementBlock30 } from \"vue\";\nvar _sfc_main30 = /* @__PURE__ */ _defineComponent30({\n  name: \"CameraFilled\",\n  __name: \"camera-filled\",\n  setup(__props) {\n    return (_ctx, _cache) => (_openBlock30(), _createElementBlock30(\"svg\", {\n      xmlns: \"http://www.w3.org/2000/svg\",\n      viewBox: \"0 0 1024 1024\"\n    }, [\n      _createElementVNode30(\"path\", {\n        fill: \"currentColor\",\n        d: \"M160 224a64 64 0 0 0-64 64v512a64 64 0 0 0 64 64h704a64 64 0 0 0 64-64V288a64 64 0 0 0-64-64H748.416l-46.464-92.672A64 64 0 0 0 644.736 96H379.328a64 64 0 0 0-57.216 35.392L275.776 224zm352 435.2a115.2 115.2 0 1 0 0-230.4 115.2 115.2 0 0 0 0 230.4m0 140.8a256 256 0 1 1 0-512 256 256 0 0 1 0 512\"\n      })\n    ]));\n  }\n}), camera_filled_default = _sfc_main30;\n\n// src/components/camera.vue\nimport { defineComponent as _defineComponent31 } from \"vue\";\nimport { createElementVNode as _createElementVNode31, openBlock as _openBlock31, createElementBlock as _createElementBlock31 } from \"vue\";\nvar _sfc_main31 = /* @__PURE__ */ _defineComponent31({\n  name: \"Camera\",\n  __name: \"camera\",\n  setup(__props) {\n    return (_ctx, _cache) => (_openBlock31(), _createElementBlock31(\"svg\", {\n      xmlns: \"http://www.w3.org/2000/svg\",\n      viewBox: \"0 0 1024 1024\"\n    }, [\n      _createElementVNode31(\"path\", {\n        fill: \"currentColor\",\n        d: \"M896 256H128v576h768zm-199.424-64-32.064-64h-304.96l-32 64zM96 192h160l46.336-92.608A64 64 0 0 1 359.552 64h304.96a64 64 0 0 1 57.216 35.328L768.192 192H928a32 32 0 0 1 32 32v640a32 32 0 0 1-32 32H96a32 32 0 0 1-32-32V224a32 32 0 0 1 32-32m416 512a160 160 0 1 0 0-320 160 160 0 0 0 0 320m0 64a224 224 0 1 1 0-448 224 224 0 0 1 0 448\"\n      })\n    ]));\n  }\n}), camera_default = _sfc_main31;\n\n// src/components/caret-bottom.vue\nimport { defineComponent as _defineComponent32 } from \"vue\";\nimport { createElementVNode as _createElementVNode32, openBlock as _openBlock32, createElementBlock as _createElementBlock32 } from \"vue\";\nvar _sfc_main32 = /* @__PURE__ */ _defineComponent32({\n  name: \"CaretBottom\",\n  __name: \"caret-bottom\",\n  setup(__props) {\n    return (_ctx, _cache) => (_openBlock32(), _createElementBlock32(\"svg\", {\n      xmlns: \"http://www.w3.org/2000/svg\",\n      viewBox: \"0 0 1024 1024\"\n    }, [\n      _createElementVNode32(\"path\", {\n        fill: \"currentColor\",\n        d: \"m192 384 320 384 320-384z\"\n      })\n    ]));\n  }\n}), caret_bottom_default = _sfc_main32;\n\n// src/components/caret-left.vue\nimport { defineComponent as _defineComponent33 } from \"vue\";\nimport { createElementVNode as _createElementVNode33, openBlock as _openBlock33, createElementBlock as _createElementBlock33 } from \"vue\";\nvar _sfc_main33 = /* @__PURE__ */ _defineComponent33({\n  name: \"CaretLeft\",\n  __name: \"caret-left\",\n  setup(__props) {\n    return (_ctx, _cache) => (_openBlock33(), _createElementBlock33(\"svg\", {\n      xmlns: \"http://www.w3.org/2000/svg\",\n      viewBox: \"0 0 1024 1024\"\n    }, [\n      _createElementVNode33(\"path\", {\n        fill: \"currentColor\",\n        d: \"M672 192 288 511.936 672 832z\"\n      })\n    ]));\n  }\n}), caret_left_default = _sfc_main33;\n\n// src/components/caret-right.vue\nimport { defineComponent as _defineComponent34 } from \"vue\";\nimport { createElementVNode as _createElementVNode34, openBlock as _openBlock34, createElementBlock as _createElementBlock34 } from \"vue\";\nvar _sfc_main34 = /* @__PURE__ */ _defineComponent34({\n  name: \"CaretRight\",\n  __name: \"caret-right\",\n  setup(__props) {\n    return (_ctx, _cache) => (_openBlock34(), _createElementBlock34(\"svg\", {\n      xmlns: \"http://www.w3.org/2000/svg\",\n      viewBox: \"0 0 1024 1024\"\n    }, [\n      _createElementVNode34(\"path\", {\n        fill: \"currentColor\",\n        d: \"M384 192v640l384-320.064z\"\n      })\n    ]));\n  }\n}), caret_right_default = _sfc_main34;\n\n// src/components/caret-top.vue\nimport { defineComponent as _defineComponent35 } from \"vue\";\nimport { createElementVNode as _createElementVNode35, openBlock as _openBlock35, createElementBlock as _createElementBlock35 } from \"vue\";\nvar _sfc_main35 = /* @__PURE__ */ _defineComponent35({\n  name: \"CaretTop\",\n  __name: \"caret-top\",\n  setup(__props) {\n    return (_ctx, _cache) => (_openBlock35(), _createElementBlock35(\"svg\", {\n      xmlns: \"http://www.w3.org/2000/svg\",\n      viewBox: \"0 0 1024 1024\"\n    }, [\n      _createElementVNode35(\"path\", {\n        fill: \"currentColor\",\n        d: \"M512 320 192 704h639.936z\"\n      })\n    ]));\n  }\n}), caret_top_default = _sfc_main35;\n\n// src/components/cellphone.vue\nimport { defineComponent as _defineComponent36 } from \"vue\";\nimport { createElementVNode as _createElementVNode36, openBlock as _openBlock36, createElementBlock as _createElementBlock36 } from \"vue\";\nvar _sfc_main36 = /* @__PURE__ */ _defineComponent36({\n  name: \"Cellphone\",\n  __name: \"cellphone\",\n  setup(__props) {\n    return (_ctx, _cache) => (_openBlock36(), _createElementBlock36(\"svg\", {\n      xmlns: \"http://www.w3.org/2000/svg\",\n      viewBox: \"0 0 1024 1024\"\n    }, [\n      _createElementVNode36(\"path\", {\n        fill: \"currentColor\",\n        d: \"M256 128a64 64 0 0 0-64 64v640a64 64 0 0 0 64 64h512a64 64 0 0 0 64-64V192a64 64 0 0 0-64-64zm0-64h512a128 128 0 0 1 128 128v640a128 128 0 0 1-128 128H256a128 128 0 0 1-128-128V192A128 128 0 0 1 256 64m128 128h256a32 32 0 1 1 0 64H384a32 32 0 0 1 0-64m128 640a64 64 0 1 1 0-128 64 64 0 0 1 0 128\"\n      })\n    ]));\n  }\n}), cellphone_default = _sfc_main36;\n\n// src/components/chat-dot-round.vue\nimport { defineComponent as _defineComponent37 } from \"vue\";\nimport { createElementVNode as _createElementVNode37, openBlock as _openBlock37, createElementBlock as _createElementBlock37 } from \"vue\";\nvar _sfc_main37 = /* @__PURE__ */ _defineComponent37({\n  name: \"ChatDotRound\",\n  __name: \"chat-dot-round\",\n  setup(__props) {\n    return (_ctx, _cache) => (_openBlock37(), _createElementBlock37(\"svg\", {\n      xmlns: \"http://www.w3.org/2000/svg\",\n      viewBox: \"0 0 1024 1024\"\n    }, [\n      _createElementVNode37(\"path\", {\n        fill: \"currentColor\",\n        d: \"m174.72 855.68 135.296-45.12 23.68 11.84C388.096 849.536 448.576 864 512 864c211.84 0 384-166.784 384-352S723.84 160 512 160 128 326.784 128 512c0 69.12 24.96 139.264 70.848 199.232l22.08 28.8-46.272 115.584zm-45.248 82.56A32 32 0 0 1 89.6 896l58.368-145.92C94.72 680.32 64 596.864 64 512 64 299.904 256 96 512 96s448 203.904 448 416-192 416-448 416a461.06 461.06 0 0 1-206.912-48.384l-175.616 58.56z\"\n      }),\n      _createElementVNode37(\"path\", {\n        fill: \"currentColor\",\n        d: \"M512 563.2a51.2 51.2 0 1 1 0-102.4 51.2 51.2 0 0 1 0 102.4m192 0a51.2 51.2 0 1 1 0-102.4 51.2 51.2 0 0 1 0 102.4m-384 0a51.2 51.2 0 1 1 0-102.4 51.2 51.2 0 0 1 0 102.4\"\n      })\n    ]));\n  }\n}), chat_dot_round_default = _sfc_main37;\n\n// src/components/chat-dot-square.vue\nimport { defineComponent as _defineComponent38 } from \"vue\";\nimport { createElementVNode as _createElementVNode38, openBlock as _openBlock38, createElementBlock as _createElementBlock38 } from \"vue\";\nvar _sfc_main38 = /* @__PURE__ */ _defineComponent38({\n  name: \"ChatDotSquare\",\n  __name: \"chat-dot-square\",\n  setup(__props) {\n    return (_ctx, _cache) => (_openBlock38(), _createElementBlock38(\"svg\", {\n      xmlns: \"http://www.w3.org/2000/svg\",\n      viewBox: \"0 0 1024 1024\"\n    }, [\n      _createElementVNode38(\"path\", {\n        fill: \"currentColor\",\n        d: \"M273.536 736H800a64 64 0 0 0 64-64V256a64 64 0 0 0-64-64H224a64 64 0 0 0-64 64v570.88zM296 800 147.968 918.4A32 32 0 0 1 96 893.44V256a128 128 0 0 1 128-128h576a128 128 0 0 1 128 128v416a128 128 0 0 1-128 128z\"\n      }),\n      _createElementVNode38(\"path\", {\n        fill: \"currentColor\",\n        d: \"M512 499.2a51.2 51.2 0 1 1 0-102.4 51.2 51.2 0 0 1 0 102.4m192 0a51.2 51.2 0 1 1 0-102.4 51.2 51.2 0 0 1 0 102.4m-384 0a51.2 51.2 0 1 1 0-102.4 51.2 51.2 0 0 1 0 102.4\"\n      })\n    ]));\n  }\n}), chat_dot_square_default = _sfc_main38;\n\n// src/components/chat-line-round.vue\nimport { defineComponent as _defineComponent39 } from \"vue\";\nimport { createElementVNode as _createElementVNode39, openBlock as _openBlock39, createElementBlock as _createElementBlock39 } from \"vue\";\nvar _sfc_main39 = /* @__PURE__ */ _defineComponent39({\n  name: \"ChatLineRound\",\n  __name: \"chat-line-round\",\n  setup(__props) {\n    return (_ctx, _cache) => (_openBlock39(), _createElementBlock39(\"svg\", {\n      xmlns: \"http://www.w3.org/2000/svg\",\n      viewBox: \"0 0 1024 1024\"\n    }, [\n      _createElementVNode39(\"path\", {\n        fill: \"currentColor\",\n        d: \"m174.72 855.68 135.296-45.12 23.68 11.84C388.096 849.536 448.576 864 512 864c211.84 0 384-166.784 384-352S723.84 160 512 160 128 326.784 128 512c0 69.12 24.96 139.264 70.848 199.232l22.08 28.8-46.272 115.584zm-45.248 82.56A32 32 0 0 1 89.6 896l58.368-145.92C94.72 680.32 64 596.864 64 512 64 299.904 256 96 512 96s448 203.904 448 416-192 416-448 416a461.06 461.06 0 0 1-206.912-48.384l-175.616 58.56z\"\n      }),\n      _createElementVNode39(\"path\", {\n        fill: \"currentColor\",\n        d: \"M352 576h320q32 0 32 32t-32 32H352q-32 0-32-32t32-32m32-192h256q32 0 32 32t-32 32H384q-32 0-32-32t32-32\"\n      })\n    ]));\n  }\n}), chat_line_round_default = _sfc_main39;\n\n// src/components/chat-line-square.vue\nimport { defineComponent as _defineComponent40 } from \"vue\";\nimport { createElementVNode as _createElementVNode40, openBlock as _openBlock40, createElementBlock as _createElementBlock40 } from \"vue\";\nvar _sfc_main40 = /* @__PURE__ */ _defineComponent40({\n  name: \"ChatLineSquare\",\n  __name: \"chat-line-square\",\n  setup(__props) {\n    return (_ctx, _cache) => (_openBlock40(), _createElementBlock40(\"svg\", {\n      xmlns: \"http://www.w3.org/2000/svg\",\n      viewBox: \"0 0 1024 1024\"\n    }, [\n      _createElementVNode40(\"path\", {\n        fill: \"currentColor\",\n        d: \"M160 826.88 273.536 736H800a64 64 0 0 0 64-64V256a64 64 0 0 0-64-64H224a64 64 0 0 0-64 64zM296 800 147.968 918.4A32 32 0 0 1 96 893.44V256a128 128 0 0 1 128-128h576a128 128 0 0 1 128 128v416a128 128 0 0 1-128 128z\"\n      }),\n      _createElementVNode40(\"path\", {\n        fill: \"currentColor\",\n        d: \"M352 512h320q32 0 32 32t-32 32H352q-32 0-32-32t32-32m0-192h320q32 0 32 32t-32 32H352q-32 0-32-32t32-32\"\n      })\n    ]));\n  }\n}), chat_line_square_default = _sfc_main40;\n\n// src/components/chat-round.vue\nimport { defineComponent as _defineComponent41 } from \"vue\";\nimport { createElementVNode as _createElementVNode41, openBlock as _openBlock41, createElementBlock as _createElementBlock41 } from \"vue\";\nvar _sfc_main41 = /* @__PURE__ */ _defineComponent41({\n  name: \"ChatRound\",\n  __name: \"chat-round\",\n  setup(__props) {\n    return (_ctx, _cache) => (_openBlock41(), _createElementBlock41(\"svg\", {\n      xmlns: \"http://www.w3.org/2000/svg\",\n      viewBox: \"0 0 1024 1024\"\n    }, [\n      _createElementVNode41(\"path\", {\n        fill: \"currentColor\",\n        d: \"m174.72 855.68 130.048-43.392 23.424 11.392C382.4 849.984 444.352 864 512 864c223.744 0 384-159.872 384-352 0-192.832-159.104-352-384-352S128 319.168 128 512a341.12 341.12 0 0 0 69.248 204.288l21.632 28.8-44.16 110.528zm-45.248 82.56A32 32 0 0 1 89.6 896l56.512-141.248A405.12 405.12 0 0 1 64 512C64 299.904 235.648 96 512 96s448 203.904 448 416-173.44 416-448 416c-79.68 0-150.848-17.152-211.712-46.72l-170.88 56.96z\"\n      })\n    ]));\n  }\n}), chat_round_default = _sfc_main41;\n\n// src/components/chat-square.vue\nimport { defineComponent as _defineComponent42 } from \"vue\";\nimport { createElementVNode as _createElementVNode42, openBlock as _openBlock42, createElementBlock as _createElementBlock42 } from \"vue\";\nvar _sfc_main42 = /* @__PURE__ */ _defineComponent42({\n  name: \"ChatSquare\",\n  __name: \"chat-square\",\n  setup(__props) {\n    return (_ctx, _cache) => (_openBlock42(), _createElementBlock42(\"svg\", {\n      xmlns: \"http://www.w3.org/2000/svg\",\n      viewBox: \"0 0 1024 1024\"\n    }, [\n      _createElementVNode42(\"path\", {\n        fill: \"currentColor\",\n        d: \"M273.536 736H800a64 64 0 0 0 64-64V256a64 64 0 0 0-64-64H224a64 64 0 0 0-64 64v570.88zM296 800 147.968 918.4A32 32 0 0 1 96 893.44V256a128 128 0 0 1 128-128h576a128 128 0 0 1 128 128v416a128 128 0 0 1-128 128z\"\n      })\n    ]));\n  }\n}), chat_square_default = _sfc_main42;\n\n// src/components/check.vue\nimport { defineComponent as _defineComponent43 } from \"vue\";\nimport { createElementVNode as _createElementVNode43, openBlock as _openBlock43, createElementBlock as _createElementBlock43 } from \"vue\";\nvar _sfc_main43 = /* @__PURE__ */ _defineComponent43({\n  name: \"Check\",\n  __name: \"check\",\n  setup(__props) {\n    return (_ctx, _cache) => (_openBlock43(), _createElementBlock43(\"svg\", {\n      xmlns: \"http://www.w3.org/2000/svg\",\n      viewBox: \"0 0 1024 1024\"\n    }, [\n      _createElementVNode43(\"path\", {\n        fill: \"currentColor\",\n        d: \"M406.656 706.944 195.84 496.256a32 32 0 1 0-45.248 45.248l256 256 512-512a32 32 0 0 0-45.248-45.248L406.592 706.944z\"\n      })\n    ]));\n  }\n}), check_default = _sfc_main43;\n\n// src/components/checked.vue\nimport { defineComponent as _defineComponent44 } from \"vue\";\nimport { createElementVNode as _createElementVNode44, openBlock as _openBlock44, createElementBlock as _createElementBlock44 } from \"vue\";\nvar _sfc_main44 = /* @__PURE__ */ _defineComponent44({\n  name: \"Checked\",\n  __name: \"checked\",\n  setup(__props) {\n    return (_ctx, _cache) => (_openBlock44(), _createElementBlock44(\"svg\", {\n      xmlns: \"http://www.w3.org/2000/svg\",\n      viewBox: \"0 0 1024 1024\"\n    }, [\n      _createElementVNode44(\"path\", {\n        fill: \"currentColor\",\n        d: \"M704 192h160v736H160V192h160.064v64H704zM311.616 537.28l-45.312 45.248L447.36 763.52l316.8-316.8-45.312-45.184L447.36 673.024zM384 192V96h256v96z\"\n      })\n    ]));\n  }\n}), checked_default = _sfc_main44;\n\n// src/components/cherry.vue\nimport { defineComponent as _defineComponent45 } from \"vue\";\nimport { createElementVNode as _createElementVNode45, openBlock as _openBlock45, createElementBlock as _createElementBlock45 } from \"vue\";\nvar _sfc_main45 = /* @__PURE__ */ _defineComponent45({\n  name: \"Cherry\",\n  __name: \"cherry\",\n  setup(__props) {\n    return (_ctx, _cache) => (_openBlock45(), _createElementBlock45(\"svg\", {\n      xmlns: \"http://www.w3.org/2000/svg\",\n      viewBox: \"0 0 1024 1024\"\n    }, [\n      _createElementVNode45(\"path\", {\n        fill: \"currentColor\",\n        d: \"M261.056 449.6c13.824-69.696 34.88-128.96 63.36-177.728 23.744-40.832 61.12-88.64 112.256-143.872H320a32 32 0 0 1 0-64h384a32 32 0 1 1 0 64H554.752c14.912 39.168 41.344 86.592 79.552 141.76 47.36 68.48 84.8 106.752 106.304 114.304a224 224 0 1 1-84.992 14.784c-22.656-22.912-47.04-53.76-73.92-92.608-38.848-56.128-67.008-105.792-84.352-149.312-55.296 58.24-94.528 107.52-117.76 147.2-23.168 39.744-41.088 88.768-53.568 147.072a224.064 224.064 0 1 1-64.96-1.6M288 832a160 160 0 1 0 0-320 160 160 0 0 0 0 320m448-64a160 160 0 1 0 0-320 160 160 0 0 0 0 320\"\n      })\n    ]));\n  }\n}), cherry_default = _sfc_main45;\n\n// src/components/chicken.vue\nimport { defineComponent as _defineComponent46 } from \"vue\";\nimport { createElementVNode as _createElementVNode46, openBlock as _openBlock46, createElementBlock as _createElementBlock46 } from \"vue\";\nvar _sfc_main46 = /* @__PURE__ */ _defineComponent46({\n  name: \"Chicken\",\n  __name: \"chicken\",\n  setup(__props) {\n    return (_ctx, _cache) => (_openBlock46(), _createElementBlock46(\"svg\", {\n      xmlns: \"http://www.w3.org/2000/svg\",\n      viewBox: \"0 0 1024 1024\"\n    }, [\n      _createElementVNode46(\"path\", {\n        fill: \"currentColor\",\n        d: \"M349.952 716.992 478.72 588.16a106.7 106.7 0 0 1-26.176-19.072 106.7 106.7 0 0 1-19.072-26.176L304.704 671.744c.768 3.072 1.472 6.144 2.048 9.216l2.048 31.936 31.872 1.984c3.136.64 6.208 1.28 9.28 2.112m57.344 33.152a128 128 0 1 1-216.32 114.432l-1.92-32-32-1.92a128 128 0 1 1 114.432-216.32L416.64 469.248c-2.432-101.44 58.112-239.104 149.056-330.048 107.328-107.328 231.296-85.504 316.8 0 85.44 85.44 107.328 209.408 0 316.8-91.008 90.88-228.672 151.424-330.112 149.056L407.296 750.08zm90.496-226.304c49.536 49.536 233.344-7.04 339.392-113.088 78.208-78.208 63.232-163.072 0-226.304-63.168-63.232-148.032-78.208-226.24 0C504.896 290.496 448.32 474.368 497.792 523.84M244.864 708.928a64 64 0 1 0-59.84 59.84l56.32-3.52zm8.064 127.68a64 64 0 1 0 59.84-59.84l-56.32 3.52z\"\n      })\n    ]));\n  }\n}), chicken_default = _sfc_main46;\n\n// src/components/chrome-filled.vue\nimport { defineComponent as _defineComponent47 } from \"vue\";\nimport { createElementVNode as _createElementVNode47, openBlock as _openBlock47, createElementBlock as _createElementBlock47 } from \"vue\";\nvar _sfc_main47 = /* @__PURE__ */ _defineComponent47({\n  name: \"ChromeFilled\",\n  __name: \"chrome-filled\",\n  setup(__props) {\n    return (_ctx, _cache) => (_openBlock47(), _createElementBlock47(\"svg\", {\n      xmlns: \"http://www.w3.org/2000/svg\",\n      \"xml:space\": \"preserve\",\n      viewBox: \"0 0 1024 1024\"\n    }, [\n      _createElementVNode47(\"path\", {\n        fill: \"currentColor\",\n        d: \"M938.67 512.01c0-44.59-6.82-87.6-19.54-128H682.67a212.37 212.37 0 0 1 42.67 128c.06 38.71-10.45 76.7-30.42 109.87l-182.91 316.8c235.65-.01 426.66-191.02 426.66-426.67\"\n      }),\n      _createElementVNode47(\"path\", {\n        fill: \"currentColor\",\n        d: \"M576.79 401.63a127.9 127.9 0 0 0-63.56-17.6c-22.36-.22-44.39 5.43-63.89 16.38s-35.79 26.82-47.25 46.02a128 128 0 0 0-2.16 127.44l1.24 2.13a127.9 127.9 0 0 0 46.36 46.61 127.9 127.9 0 0 0 63.38 17.44c22.29.2 44.24-5.43 63.68-16.33a127.94 127.94 0 0 0 47.16-45.79v-.01l1.11-1.92a127.98 127.98 0 0 0 .29-127.46 127.96 127.96 0 0 0-46.36-46.91\"\n      }),\n      _createElementVNode47(\"path\", {\n        fill: \"currentColor\",\n        d: \"M394.45 333.96A213.34 213.34 0 0 1 512 298.67h369.58A426.5 426.5 0 0 0 512 85.34a425.6 425.6 0 0 0-171.74 35.98 425.6 425.6 0 0 0-142.62 102.22l118.14 204.63a213.4 213.4 0 0 1 78.67-94.21m117.56 604.72H512zm-97.25-236.73a213.3 213.3 0 0 1-89.54-86.81L142.48 298.6c-36.35 62.81-57.13 135.68-57.13 213.42 0 203.81 142.93 374.22 333.95 416.55h.04l118.19-204.71a213.3 213.3 0 0 1-122.77-21.91\"\n      })\n    ]));\n  }\n}), chrome_filled_default = _sfc_main47;\n\n// src/components/circle-check-filled.vue\nimport { defineComponent as _defineComponent48 } from \"vue\";\nimport { createElementVNode as _createElementVNode48, openBlock as _openBlock48, createElementBlock as _createElementBlock48 } from \"vue\";\nvar _sfc_main48 = /* @__PURE__ */ _defineComponent48({\n  name: \"CircleCheckFilled\",\n  __name: \"circle-check-filled\",\n  setup(__props) {\n    return (_ctx, _cache) => (_openBlock48(), _createElementBlock48(\"svg\", {\n      xmlns: \"http://www.w3.org/2000/svg\",\n      viewBox: \"0 0 1024 1024\"\n    }, [\n      _createElementVNode48(\"path\", {\n        fill: \"currentColor\",\n        d: \"M512 64a448 448 0 1 1 0 896 448 448 0 0 1 0-896m-55.808 536.384-99.52-99.584a38.4 38.4 0 1 0-54.336 54.336l126.72 126.72a38.27 38.27 0 0 0 54.336 0l262.4-262.464a38.4 38.4 0 1 0-54.272-54.336z\"\n      })\n    ]));\n  }\n}), circle_check_filled_default = _sfc_main48;\n\n// src/components/circle-check.vue\nimport { defineComponent as _defineComponent49 } from \"vue\";\nimport { createElementVNode as _createElementVNode49, openBlock as _openBlock49, createElementBlock as _createElementBlock49 } from \"vue\";\nvar _sfc_main49 = /* @__PURE__ */ _defineComponent49({\n  name: \"CircleCheck\",\n  __name: \"circle-check\",\n  setup(__props) {\n    return (_ctx, _cache) => (_openBlock49(), _createElementBlock49(\"svg\", {\n      xmlns: \"http://www.w3.org/2000/svg\",\n      viewBox: \"0 0 1024 1024\"\n    }, [\n      _createElementVNode49(\"path\", {\n        fill: \"currentColor\",\n        d: \"M512 896a384 384 0 1 0 0-768 384 384 0 0 0 0 768m0 64a448 448 0 1 1 0-896 448 448 0 0 1 0 896\"\n      }),\n      _createElementVNode49(\"path\", {\n        fill: \"currentColor\",\n        d: \"M745.344 361.344a32 32 0 0 1 45.312 45.312l-288 288a32 32 0 0 1-45.312 0l-160-160a32 32 0 1 1 45.312-45.312L480 626.752z\"\n      })\n    ]));\n  }\n}), circle_check_default = _sfc_main49;\n\n// src/components/circle-close-filled.vue\nimport { defineComponent as _defineComponent50 } from \"vue\";\nimport { createElementVNode as _createElementVNode50, openBlock as _openBlock50, createElementBlock as _createElementBlock50 } from \"vue\";\nvar _sfc_main50 = /* @__PURE__ */ _defineComponent50({\n  name: \"CircleCloseFilled\",\n  __name: \"circle-close-filled\",\n  setup(__props) {\n    return (_ctx, _cache) => (_openBlock50(), _createElementBlock50(\"svg\", {\n      xmlns: \"http://www.w3.org/2000/svg\",\n      viewBox: \"0 0 1024 1024\"\n    }, [\n      _createElementVNode50(\"path\", {\n        fill: \"currentColor\",\n        d: \"M512 64a448 448 0 1 1 0 896 448 448 0 0 1 0-896m0 393.664L407.936 353.6a38.4 38.4 0 1 0-54.336 54.336L457.664 512 353.6 616.064a38.4 38.4 0 1 0 54.336 54.336L512 566.336 616.064 670.4a38.4 38.4 0 1 0 54.336-54.336L566.336 512 670.4 407.936a38.4 38.4 0 1 0-54.336-54.336z\"\n      })\n    ]));\n  }\n}), circle_close_filled_default = _sfc_main50;\n\n// src/components/circle-close.vue\nimport { defineComponent as _defineComponent51 } from \"vue\";\nimport { createElementVNode as _createElementVNode51, openBlock as _openBlock51, createElementBlock as _createElementBlock51 } from \"vue\";\nvar _sfc_main51 = /* @__PURE__ */ _defineComponent51({\n  name: \"CircleClose\",\n  __name: \"circle-close\",\n  setup(__props) {\n    return (_ctx, _cache) => (_openBlock51(), _createElementBlock51(\"svg\", {\n      xmlns: \"http://www.w3.org/2000/svg\",\n      viewBox: \"0 0 1024 1024\"\n    }, [\n      _createElementVNode51(\"path\", {\n        fill: \"currentColor\",\n        d: \"m466.752 512-90.496-90.496a32 32 0 0 1 45.248-45.248L512 466.752l90.496-90.496a32 32 0 1 1 45.248 45.248L557.248 512l90.496 90.496a32 32 0 1 1-45.248 45.248L512 557.248l-90.496 90.496a32 32 0 0 1-45.248-45.248z\"\n      }),\n      _createElementVNode51(\"path\", {\n        fill: \"currentColor\",\n        d: \"M512 896a384 384 0 1 0 0-768 384 384 0 0 0 0 768m0 64a448 448 0 1 1 0-896 448 448 0 0 1 0 896\"\n      })\n    ]));\n  }\n}), circle_close_default = _sfc_main51;\n\n// src/components/circle-plus-filled.vue\nimport { defineComponent as _defineComponent52 } from \"vue\";\nimport { createElementVNode as _createElementVNode52, openBlock as _openBlock52, createElementBlock as _createElementBlock52 } from \"vue\";\nvar _sfc_main52 = /* @__PURE__ */ _defineComponent52({\n  name: \"CirclePlusFilled\",\n  __name: \"circle-plus-filled\",\n  setup(__props) {\n    return (_ctx, _cache) => (_openBlock52(), _createElementBlock52(\"svg\", {\n      xmlns: \"http://www.w3.org/2000/svg\",\n      viewBox: \"0 0 1024 1024\"\n    }, [\n      _createElementVNode52(\"path\", {\n        fill: \"currentColor\",\n        d: \"M512 64a448 448 0 1 1 0 896 448 448 0 0 1 0-896m-38.4 409.6H326.4a38.4 38.4 0 1 0 0 76.8h147.2v147.2a38.4 38.4 0 0 0 76.8 0V550.4h147.2a38.4 38.4 0 0 0 0-76.8H550.4V326.4a38.4 38.4 0 1 0-76.8 0z\"\n      })\n    ]));\n  }\n}), circle_plus_filled_default = _sfc_main52;\n\n// src/components/circle-plus.vue\nimport { defineComponent as _defineComponent53 } from \"vue\";\nimport { createElementVNode as _createElementVNode53, openBlock as _openBlock53, createElementBlock as _createElementBlock53 } from \"vue\";\nvar _sfc_main53 = /* @__PURE__ */ _defineComponent53({\n  name: \"CirclePlus\",\n  __name: \"circle-plus\",\n  setup(__props) {\n    return (_ctx, _cache) => (_openBlock53(), _createElementBlock53(\"svg\", {\n      xmlns: \"http://www.w3.org/2000/svg\",\n      viewBox: \"0 0 1024 1024\"\n    }, [\n      _createElementVNode53(\"path\", {\n        fill: \"currentColor\",\n        d: \"M352 480h320a32 32 0 1 1 0 64H352a32 32 0 0 1 0-64\"\n      }),\n      _createElementVNode53(\"path\", {\n        fill: \"currentColor\",\n        d: \"M480 672V352a32 32 0 1 1 64 0v320a32 32 0 0 1-64 0\"\n      }),\n      _createElementVNode53(\"path\", {\n        fill: \"currentColor\",\n        d: \"M512 896a384 384 0 1 0 0-768 384 384 0 0 0 0 768m0 64a448 448 0 1 1 0-896 448 448 0 0 1 0 896\"\n      })\n    ]));\n  }\n}), circle_plus_default = _sfc_main53;\n\n// src/components/clock.vue\nimport { defineComponent as _defineComponent54 } from \"vue\";\nimport { createElementVNode as _createElementVNode54, openBlock as _openBlock54, createElementBlock as _createElementBlock54 } from \"vue\";\nvar _sfc_main54 = /* @__PURE__ */ _defineComponent54({\n  name: \"Clock\",\n  __name: \"clock\",\n  setup(__props) {\n    return (_ctx, _cache) => (_openBlock54(), _createElementBlock54(\"svg\", {\n      xmlns: \"http://www.w3.org/2000/svg\",\n      viewBox: \"0 0 1024 1024\"\n    }, [\n      _createElementVNode54(\"path\", {\n        fill: \"currentColor\",\n        d: \"M512 896a384 384 0 1 0 0-768 384 384 0 0 0 0 768m0 64a448 448 0 1 1 0-896 448 448 0 0 1 0 896\"\n      }),\n      _createElementVNode54(\"path\", {\n        fill: \"currentColor\",\n        d: \"M480 256a32 32 0 0 1 32 32v256a32 32 0 0 1-64 0V288a32 32 0 0 1 32-32\"\n      }),\n      _createElementVNode54(\"path\", {\n        fill: \"currentColor\",\n        d: \"M480 512h256q32 0 32 32t-32 32H480q-32 0-32-32t32-32\"\n      })\n    ]));\n  }\n}), clock_default = _sfc_main54;\n\n// src/components/close-bold.vue\nimport { defineComponent as _defineComponent55 } from \"vue\";\nimport { createElementVNode as _createElementVNode55, openBlock as _openBlock55, createElementBlock as _createElementBlock55 } from \"vue\";\nvar _sfc_main55 = /* @__PURE__ */ _defineComponent55({\n  name: \"CloseBold\",\n  __name: \"close-bold\",\n  setup(__props) {\n    return (_ctx, _cache) => (_openBlock55(), _createElementBlock55(\"svg\", {\n      xmlns: \"http://www.w3.org/2000/svg\",\n      viewBox: \"0 0 1024 1024\"\n    }, [\n      _createElementVNode55(\"path\", {\n        fill: \"currentColor\",\n        d: \"M195.2 195.2a64 64 0 0 1 90.496 0L512 421.504 738.304 195.2a64 64 0 0 1 90.496 90.496L602.496 512 828.8 738.304a64 64 0 0 1-90.496 90.496L512 602.496 285.696 828.8a64 64 0 0 1-90.496-90.496L421.504 512 195.2 285.696a64 64 0 0 1 0-90.496\"\n      })\n    ]));\n  }\n}), close_bold_default = _sfc_main55;\n\n// src/components/close.vue\nimport { defineComponent as _defineComponent56 } from \"vue\";\nimport { createElementVNode as _createElementVNode56, openBlock as _openBlock56, createElementBlock as _createElementBlock56 } from \"vue\";\nvar _sfc_main56 = /* @__PURE__ */ _defineComponent56({\n  name: \"Close\",\n  __name: \"close\",\n  setup(__props) {\n    return (_ctx, _cache) => (_openBlock56(), _createElementBlock56(\"svg\", {\n      xmlns: \"http://www.w3.org/2000/svg\",\n      viewBox: \"0 0 1024 1024\"\n    }, [\n      _createElementVNode56(\"path\", {\n        fill: \"currentColor\",\n        d: \"M764.288 214.592 512 466.88 259.712 214.592a31.936 31.936 0 0 0-45.12 45.12L466.752 512 214.528 764.224a31.936 31.936 0 1 0 45.12 45.184L512 557.184l252.288 252.288a31.936 31.936 0 0 0 45.12-45.12L557.12 512.064l252.288-252.352a31.936 31.936 0 1 0-45.12-45.184z\"\n      })\n    ]));\n  }\n}), close_default = _sfc_main56;\n\n// src/components/cloudy.vue\nimport { defineComponent as _defineComponent57 } from \"vue\";\nimport { createElementVNode as _createElementVNode57, openBlock as _openBlock57, createElementBlock as _createElementBlock57 } from \"vue\";\nvar _sfc_main57 = /* @__PURE__ */ _defineComponent57({\n  name: \"Cloudy\",\n  __name: \"cloudy\",\n  setup(__props) {\n    return (_ctx, _cache) => (_openBlock57(), _createElementBlock57(\"svg\", {\n      xmlns: \"http://www.w3.org/2000/svg\",\n      viewBox: \"0 0 1024 1024\"\n    }, [\n      _createElementVNode57(\"path\", {\n        fill: \"currentColor\",\n        d: \"M598.4 831.872H328.192a256 256 0 0 1-34.496-510.528A352 352 0 1 1 598.4 831.872m-271.36-64h272.256a288 288 0 1 0-248.512-417.664L335.04 381.44l-34.816 3.584a192 192 0 0 0 26.88 382.848z\"\n      })\n    ]));\n  }\n}), cloudy_default = _sfc_main57;\n\n// src/components/coffee-cup.vue\nimport { defineComponent as _defineComponent58 } from \"vue\";\nimport { createElementVNode as _createElementVNode58, openBlock as _openBlock58, createElementBlock as _createElementBlock58 } from \"vue\";\nvar _sfc_main58 = /* @__PURE__ */ _defineComponent58({\n  name: \"CoffeeCup\",\n  __name: \"coffee-cup\",\n  setup(__props) {\n    return (_ctx, _cache) => (_openBlock58(), _createElementBlock58(\"svg\", {\n      xmlns: \"http://www.w3.org/2000/svg\",\n      viewBox: \"0 0 1024 1024\"\n    }, [\n      _createElementVNode58(\"path\", {\n        fill: \"currentColor\",\n        d: \"M768 192a192 192 0 1 1-8 383.808A256.13 256.13 0 0 1 512 768H320A256 256 0 0 1 64 512V160a32 32 0 0 1 32-32h640a32 32 0 0 1 32 32zm0 64v256a128 128 0 1 0 0-256M96 832h640a32 32 0 1 1 0 64H96a32 32 0 1 1 0-64m32-640v320a192 192 0 0 0 192 192h192a192 192 0 0 0 192-192V192z\"\n      })\n    ]));\n  }\n}), coffee_cup_default = _sfc_main58;\n\n// src/components/coffee.vue\nimport { defineComponent as _defineComponent59 } from \"vue\";\nimport { createElementVNode as _createElementVNode59, openBlock as _openBlock59, createElementBlock as _createElementBlock59 } from \"vue\";\nvar _sfc_main59 = /* @__PURE__ */ _defineComponent59({\n  name: \"Coffee\",\n  __name: \"coffee\",\n  setup(__props) {\n    return (_ctx, _cache) => (_openBlock59(), _createElementBlock59(\"svg\", {\n      xmlns: \"http://www.w3.org/2000/svg\",\n      viewBox: \"0 0 1024 1024\"\n    }, [\n      _createElementVNode59(\"path\", {\n        fill: \"currentColor\",\n        d: \"M822.592 192h14.272a32 32 0 0 1 31.616 26.752l21.312 128A32 32 0 0 1 858.24 384h-49.344l-39.04 546.304A32 32 0 0 1 737.92 960H285.824a32 32 0 0 1-32-29.696L214.912 384H165.76a32 32 0 0 1-31.552-37.248l21.312-128A32 32 0 0 1 187.136 192h14.016l-6.72-93.696A32 32 0 0 1 226.368 64h571.008a32 32 0 0 1 31.936 34.304zm-64.128 0 4.544-64H260.736l4.544 64zm-548.16 128H820.48l-10.688-64H214.208l-10.688 64zm68.736 64 36.544 512H708.16l36.544-512z\"\n      })\n    ]));\n  }\n}), coffee_default = _sfc_main59;\n\n// src/components/coin.vue\nimport { defineComponent as _defineComponent60 } from \"vue\";\nimport { createElementVNode as _createElementVNode60, openBlock as _openBlock60, createElementBlock as _createElementBlock60 } from \"vue\";\nvar _sfc_main60 = /* @__PURE__ */ _defineComponent60({\n  name: \"Coin\",\n  __name: \"coin\",\n  setup(__props) {\n    return (_ctx, _cache) => (_openBlock60(), _createElementBlock60(\"svg\", {\n      xmlns: \"http://www.w3.org/2000/svg\",\n      viewBox: \"0 0 1024 1024\"\n    }, [\n      _createElementVNode60(\"path\", {\n        fill: \"currentColor\",\n        d: \"m161.92 580.736 29.888 58.88C171.328 659.776 160 681.728 160 704c0 82.304 155.328 160 352 160s352-77.696 352-160c0-22.272-11.392-44.16-31.808-64.32l30.464-58.432C903.936 615.808 928 657.664 928 704c0 129.728-188.544 224-416 224S96 833.728 96 704c0-46.592 24.32-88.576 65.92-123.264\"\n      }),\n      _createElementVNode60(\"path\", {\n        fill: \"currentColor\",\n        d: \"m161.92 388.736 29.888 58.88C171.328 467.84 160 489.792 160 512c0 82.304 155.328 160 352 160s352-77.696 352-160c0-22.272-11.392-44.16-31.808-64.32l30.464-58.432C903.936 423.808 928 465.664 928 512c0 129.728-188.544 224-416 224S96 641.728 96 512c0-46.592 24.32-88.576 65.92-123.264\"\n      }),\n      _createElementVNode60(\"path\", {\n        fill: \"currentColor\",\n        d: \"M512 544c-227.456 0-416-94.272-416-224S284.544 96 512 96s416 94.272 416 224-188.544 224-416 224m0-64c196.672 0 352-77.696 352-160S708.672 160 512 160s-352 77.696-352 160 155.328 160 352 160\"\n      })\n    ]));\n  }\n}), coin_default = _sfc_main60;\n\n// src/components/cold-drink.vue\nimport { defineComponent as _defineComponent61 } from \"vue\";\nimport { createElementVNode as _createElementVNode61, openBlock as _openBlock61, createElementBlock as _createElementBlock61 } from \"vue\";\nvar _sfc_main61 = /* @__PURE__ */ _defineComponent61({\n  name: \"ColdDrink\",\n  __name: \"cold-drink\",\n  setup(__props) {\n    return (_ctx, _cache) => (_openBlock61(), _createElementBlock61(\"svg\", {\n      xmlns: \"http://www.w3.org/2000/svg\",\n      viewBox: \"0 0 1024 1024\"\n    }, [\n      _createElementVNode61(\"path\", {\n        fill: \"currentColor\",\n        d: \"M768 64a192 192 0 1 1-69.952 370.88L480 725.376V896h96a32 32 0 1 1 0 64H320a32 32 0 1 1 0-64h96V725.376L76.8 273.536a64 64 0 0 1-12.8-38.4v-10.688a32 32 0 0 1 32-32h71.808l-65.536-83.84a32 32 0 0 1 50.432-39.424l96.256 123.264h337.728A192.06 192.06 0 0 1 768 64M656.896 192.448H800a32 32 0 0 1 32 32v10.624a64 64 0 0 1-12.8 38.4l-80.448 107.2a128 128 0 1 0-81.92-188.16v-.064zm-357.888 64 129.472 165.76a32 32 0 0 1-50.432 39.36l-160.256-205.12H144l304 404.928 304-404.928z\"\n      })\n    ]));\n  }\n}), cold_drink_default = _sfc_main61;\n\n// src/components/collection-tag.vue\nimport { defineComponent as _defineComponent62 } from \"vue\";\nimport { createElementVNode as _createElementVNode62, openBlock as _openBlock62, createElementBlock as _createElementBlock62 } from \"vue\";\nvar _sfc_main62 = /* @__PURE__ */ _defineComponent62({\n  name: \"CollectionTag\",\n  __name: \"collection-tag\",\n  setup(__props) {\n    return (_ctx, _cache) => (_openBlock62(), _createElementBlock62(\"svg\", {\n      xmlns: \"http://www.w3.org/2000/svg\",\n      viewBox: \"0 0 1024 1024\"\n    }, [\n      _createElementVNode62(\"path\", {\n        fill: \"currentColor\",\n        d: \"M256 128v698.88l196.032-156.864a96 96 0 0 1 119.936 0L768 826.816V128zm-32-64h576a32 32 0 0 1 32 32v797.44a32 32 0 0 1-51.968 24.96L531.968 720a32 32 0 0 0-39.936 0L243.968 918.4A32 32 0 0 1 192 893.44V96a32 32 0 0 1 32-32\"\n      })\n    ]));\n  }\n}), collection_tag_default = _sfc_main62;\n\n// src/components/collection.vue\nimport { defineComponent as _defineComponent63 } from \"vue\";\nimport { createElementVNode as _createElementVNode63, openBlock as _openBlock63, createElementBlock as _createElementBlock63 } from \"vue\";\nvar _sfc_main63 = /* @__PURE__ */ _defineComponent63({\n  name: \"Collection\",\n  __name: \"collection\",\n  setup(__props) {\n    return (_ctx, _cache) => (_openBlock63(), _createElementBlock63(\"svg\", {\n      xmlns: \"http://www.w3.org/2000/svg\",\n      viewBox: \"0 0 1024 1024\"\n    }, [\n      _createElementVNode63(\"path\", {\n        fill: \"currentColor\",\n        d: \"M192 736h640V128H256a64 64 0 0 0-64 64zm64-672h608a32 32 0 0 1 32 32v672a32 32 0 0 1-32 32H160l-32 57.536V192A128 128 0 0 1 256 64\"\n      }),\n      _createElementVNode63(\"path\", {\n        fill: \"currentColor\",\n        d: \"M240 800a48 48 0 1 0 0 96h592v-96zm0-64h656v160a64 64 0 0 1-64 64H240a112 112 0 0 1 0-224m144-608v250.88l96-76.8 96 76.8V128zm-64-64h320v381.44a32 32 0 0 1-51.968 24.96L480 384l-108.032 86.4A32 32 0 0 1 320 445.44z\"\n      })\n    ]));\n  }\n}), collection_default = _sfc_main63;\n\n// src/components/comment.vue\nimport { defineComponent as _defineComponent64 } from \"vue\";\nimport { createElementVNode as _createElementVNode64, openBlock as _openBlock64, createElementBlock as _createElementBlock64 } from \"vue\";\nvar _sfc_main64 = /* @__PURE__ */ _defineComponent64({\n  name: \"Comment\",\n  __name: \"comment\",\n  setup(__props) {\n    return (_ctx, _cache) => (_openBlock64(), _createElementBlock64(\"svg\", {\n      xmlns: \"http://www.w3.org/2000/svg\",\n      viewBox: \"0 0 1024 1024\"\n    }, [\n      _createElementVNode64(\"path\", {\n        fill: \"currentColor\",\n        d: \"M736 504a56 56 0 1 1 0-112 56 56 0 0 1 0 112m-224 0a56 56 0 1 1 0-112 56 56 0 0 1 0 112m-224 0a56 56 0 1 1 0-112 56 56 0 0 1 0 112M128 128v640h192v160l224-160h352V128z\"\n      })\n    ]));\n  }\n}), comment_default = _sfc_main64;\n\n// src/components/compass.vue\nimport { defineComponent as _defineComponent65 } from \"vue\";\nimport { createElementVNode as _createElementVNode65, openBlock as _openBlock65, createElementBlock as _createElementBlock65 } from \"vue\";\nvar _sfc_main65 = /* @__PURE__ */ _defineComponent65({\n  name: \"Compass\",\n  __name: \"compass\",\n  setup(__props) {\n    return (_ctx, _cache) => (_openBlock65(), _createElementBlock65(\"svg\", {\n      xmlns: \"http://www.w3.org/2000/svg\",\n      viewBox: \"0 0 1024 1024\"\n    }, [\n      _createElementVNode65(\"path\", {\n        fill: \"currentColor\",\n        d: \"M512 896a384 384 0 1 0 0-768 384 384 0 0 0 0 768m0 64a448 448 0 1 1 0-896 448 448 0 0 1 0 896\"\n      }),\n      _createElementVNode65(\"path\", {\n        fill: \"currentColor\",\n        d: \"M725.888 315.008C676.48 428.672 624 513.28 568.576 568.64c-55.424 55.424-139.968 107.904-253.568 157.312a12.8 12.8 0 0 1-16.896-16.832c49.536-113.728 102.016-198.272 157.312-253.632 55.36-55.296 139.904-107.776 253.632-157.312a12.8 12.8 0 0 1 16.832 16.832\"\n      })\n    ]));\n  }\n}), compass_default = _sfc_main65;\n\n// src/components/connection.vue\nimport { defineComponent as _defineComponent66 } from \"vue\";\nimport { createElementVNode as _createElementVNode66, openBlock as _openBlock66, createElementBlock as _createElementBlock66 } from \"vue\";\nvar _sfc_main66 = /* @__PURE__ */ _defineComponent66({\n  name: \"Connection\",\n  __name: \"connection\",\n  setup(__props) {\n    return (_ctx, _cache) => (_openBlock66(), _createElementBlock66(\"svg\", {\n      xmlns: \"http://www.w3.org/2000/svg\",\n      viewBox: \"0 0 1024 1024\"\n    }, [\n      _createElementVNode66(\"path\", {\n        fill: \"currentColor\",\n        d: \"M640 384v64H448a128 128 0 0 0-128 128v128a128 128 0 0 0 128 128h320a128 128 0 0 0 128-128V576a128 128 0 0 0-64-110.848V394.88c74.56 26.368 128 97.472 128 181.056v128a192 192 0 0 1-192 192H448a192 192 0 0 1-192-192V576a192 192 0 0 1 192-192z\"\n      }),\n      _createElementVNode66(\"path\", {\n        fill: \"currentColor\",\n        d: \"M384 640v-64h192a128 128 0 0 0 128-128V320a128 128 0 0 0-128-128H256a128 128 0 0 0-128 128v128a128 128 0 0 0 64 110.848v70.272A192.06 192.06 0 0 1 64 448V320a192 192 0 0 1 192-192h320a192 192 0 0 1 192 192v128a192 192 0 0 1-192 192z\"\n      })\n    ]));\n  }\n}), connection_default = _sfc_main66;\n\n// src/components/coordinate.vue\nimport { defineComponent as _defineComponent67 } from \"vue\";\nimport { createElementVNode as _createElementVNode67, openBlock as _openBlock67, createElementBlock as _createElementBlock67 } from \"vue\";\nvar _sfc_main67 = /* @__PURE__ */ _defineComponent67({\n  name: \"Coordinate\",\n  __name: \"coordinate\",\n  setup(__props) {\n    return (_ctx, _cache) => (_openBlock67(), _createElementBlock67(\"svg\", {\n      xmlns: \"http://www.w3.org/2000/svg\",\n      viewBox: \"0 0 1024 1024\"\n    }, [\n      _createElementVNode67(\"path\", {\n        fill: \"currentColor\",\n        d: \"M480 512h64v320h-64z\"\n      }),\n      _createElementVNode67(\"path\", {\n        fill: \"currentColor\",\n        d: \"M192 896h640a64 64 0 0 0-64-64H256a64 64 0 0 0-64 64m64-128h512a128 128 0 0 1 128 128v64H128v-64a128 128 0 0 1 128-128m256-256a192 192 0 1 0 0-384 192 192 0 0 0 0 384m0 64a256 256 0 1 1 0-512 256 256 0 0 1 0 512\"\n      })\n    ]));\n  }\n}), coordinate_default = _sfc_main67;\n\n// src/components/copy-document.vue\nimport { defineComponent as _defineComponent68 } from \"vue\";\nimport { createElementVNode as _createElementVNode68, openBlock as _openBlock68, createElementBlock as _createElementBlock68 } from \"vue\";\nvar _sfc_main68 = /* @__PURE__ */ _defineComponent68({\n  name: \"CopyDocument\",\n  __name: \"copy-document\",\n  setup(__props) {\n    return (_ctx, _cache) => (_openBlock68(), _createElementBlock68(\"svg\", {\n      xmlns: \"http://www.w3.org/2000/svg\",\n      viewBox: \"0 0 1024 1024\"\n    }, [\n      _createElementVNode68(\"path\", {\n        fill: \"currentColor\",\n        d: \"M768 832a128 128 0 0 1-128 128H192A128 128 0 0 1 64 832V384a128 128 0 0 1 128-128v64a64 64 0 0 0-64 64v448a64 64 0 0 0 64 64h448a64 64 0 0 0 64-64z\"\n      }),\n      _createElementVNode68(\"path\", {\n        fill: \"currentColor\",\n        d: \"M384 128a64 64 0 0 0-64 64v448a64 64 0 0 0 64 64h448a64 64 0 0 0 64-64V192a64 64 0 0 0-64-64zm0-64h448a128 128 0 0 1 128 128v448a128 128 0 0 1-128 128H384a128 128 0 0 1-128-128V192A128 128 0 0 1 384 64\"\n      })\n    ]));\n  }\n}), copy_document_default = _sfc_main68;\n\n// src/components/cpu.vue\nimport { defineComponent as _defineComponent69 } from \"vue\";\nimport { createElementVNode as _createElementVNode69, openBlock as _openBlock69, createElementBlock as _createElementBlock69 } from \"vue\";\nvar _sfc_main69 = /* @__PURE__ */ _defineComponent69({\n  name: \"Cpu\",\n  __name: \"cpu\",\n  setup(__props) {\n    return (_ctx, _cache) => (_openBlock69(), _createElementBlock69(\"svg\", {\n      xmlns: \"http://www.w3.org/2000/svg\",\n      viewBox: \"0 0 1024 1024\"\n    }, [\n      _createElementVNode69(\"path\", {\n        fill: \"currentColor\",\n        d: \"M320 256a64 64 0 0 0-64 64v384a64 64 0 0 0 64 64h384a64 64 0 0 0 64-64V320a64 64 0 0 0-64-64zm0-64h384a128 128 0 0 1 128 128v384a128 128 0 0 1-128 128H320a128 128 0 0 1-128-128V320a128 128 0 0 1 128-128\"\n      }),\n      _createElementVNode69(\"path\", {\n        fill: \"currentColor\",\n        d: \"M512 64a32 32 0 0 1 32 32v128h-64V96a32 32 0 0 1 32-32m160 0a32 32 0 0 1 32 32v128h-64V96a32 32 0 0 1 32-32m-320 0a32 32 0 0 1 32 32v128h-64V96a32 32 0 0 1 32-32m160 896a32 32 0 0 1-32-32V800h64v128a32 32 0 0 1-32 32m160 0a32 32 0 0 1-32-32V800h64v128a32 32 0 0 1-32 32m-320 0a32 32 0 0 1-32-32V800h64v128a32 32 0 0 1-32 32M64 512a32 32 0 0 1 32-32h128v64H96a32 32 0 0 1-32-32m0-160a32 32 0 0 1 32-32h128v64H96a32 32 0 0 1-32-32m0 320a32 32 0 0 1 32-32h128v64H96a32 32 0 0 1-32-32m896-160a32 32 0 0 1-32 32H800v-64h128a32 32 0 0 1 32 32m0-160a32 32 0 0 1-32 32H800v-64h128a32 32 0 0 1 32 32m0 320a32 32 0 0 1-32 32H800v-64h128a32 32 0 0 1 32 32\"\n      })\n    ]));\n  }\n}), cpu_default = _sfc_main69;\n\n// src/components/credit-card.vue\nimport { defineComponent as _defineComponent70 } from \"vue\";\nimport { createElementVNode as _createElementVNode70, openBlock as _openBlock70, createElementBlock as _createElementBlock70 } from \"vue\";\nvar _sfc_main70 = /* @__PURE__ */ _defineComponent70({\n  name: \"CreditCard\",\n  __name: \"credit-card\",\n  setup(__props) {\n    return (_ctx, _cache) => (_openBlock70(), _createElementBlock70(\"svg\", {\n      xmlns: \"http://www.w3.org/2000/svg\",\n      viewBox: \"0 0 1024 1024\"\n    }, [\n      _createElementVNode70(\"path\", {\n        fill: \"currentColor\",\n        d: \"M896 324.096c0-42.368-2.496-55.296-9.536-68.48a52.35 52.35 0 0 0-22.144-22.08c-13.12-7.04-26.048-9.536-68.416-9.536H228.096c-42.368 0-55.296 2.496-68.48 9.536a52.35 52.35 0 0 0-22.08 22.144c-7.04 13.12-9.536 26.048-9.536 68.416v375.808c0 42.368 2.496 55.296 9.536 68.48a52.35 52.35 0 0 0 22.144 22.08c13.12 7.04 26.048 9.536 68.416 9.536h567.808c42.368 0 55.296-2.496 68.48-9.536a52.35 52.35 0 0 0 22.08-22.144c7.04-13.12 9.536-26.048 9.536-68.416zm64 0v375.808c0 57.088-5.952 77.76-17.088 98.56-11.136 20.928-27.52 37.312-48.384 48.448S852.928 864 795.968 864H228.032c-57.088 0-77.76-5.952-98.56-17.088a116.3 116.3 0 0 1-48.448-48.384c-11.136-20.864-17.088-41.6-17.088-98.56V324.032c0-57.088 5.952-77.76 17.088-98.56 11.136-20.928 27.52-37.312 48.384-48.448s41.6-17.088 98.56-17.088H795.84c57.088 0 77.76 5.952 98.56 17.088 20.928 11.136 37.312 27.52 48.448 48.384s17.088 41.6 17.088 98.56z\"\n      }),\n      _createElementVNode70(\"path\", {\n        fill: \"currentColor\",\n        d: \"M64 320h896v64H64zm0 128h896v64H64zm128 192h256v64H192z\"\n      })\n    ]));\n  }\n}), credit_card_default = _sfc_main70;\n\n// src/components/crop.vue\nimport { defineComponent as _defineComponent71 } from \"vue\";\nimport { createElementVNode as _createElementVNode71, openBlock as _openBlock71, createElementBlock as _createElementBlock71 } from \"vue\";\nvar _sfc_main71 = /* @__PURE__ */ _defineComponent71({\n  name: \"Crop\",\n  __name: \"crop\",\n  setup(__props) {\n    return (_ctx, _cache) => (_openBlock71(), _createElementBlock71(\"svg\", {\n      xmlns: \"http://www.w3.org/2000/svg\",\n      viewBox: \"0 0 1024 1024\"\n    }, [\n      _createElementVNode71(\"path\", {\n        fill: \"currentColor\",\n        d: \"M256 768h672a32 32 0 1 1 0 64H224a32 32 0 0 1-32-32V96a32 32 0 0 1 64 0z\"\n      }),\n      _createElementVNode71(\"path\", {\n        fill: \"currentColor\",\n        d: \"M832 224v704a32 32 0 1 1-64 0V256H96a32 32 0 0 1 0-64h704a32 32 0 0 1 32 32\"\n      })\n    ]));\n  }\n}), crop_default = _sfc_main71;\n\n// src/components/d-arrow-left.vue\nimport { defineComponent as _defineComponent72 } from \"vue\";\nimport { createElementVNode as _createElementVNode72, openBlock as _openBlock72, createElementBlock as _createElementBlock72 } from \"vue\";\nvar _sfc_main72 = /* @__PURE__ */ _defineComponent72({\n  name: \"DArrowLeft\",\n  __name: \"d-arrow-left\",\n  setup(__props) {\n    return (_ctx, _cache) => (_openBlock72(), _createElementBlock72(\"svg\", {\n      xmlns: \"http://www.w3.org/2000/svg\",\n      viewBox: \"0 0 1024 1024\"\n    }, [\n      _createElementVNode72(\"path\", {\n        fill: \"currentColor\",\n        d: \"M529.408 149.376a29.12 29.12 0 0 1 41.728 0 30.59 30.59 0 0 1 0 42.688L259.264 511.936l311.872 319.936a30.59 30.59 0 0 1-.512 43.264 29.12 29.12 0 0 1-41.216-.512L197.76 534.272a32 32 0 0 1 0-44.672zm256 0a29.12 29.12 0 0 1 41.728 0 30.59 30.59 0 0 1 0 42.688L515.264 511.936l311.872 319.936a30.59 30.59 0 0 1-.512 43.264 29.12 29.12 0 0 1-41.216-.512L453.76 534.272a32 32 0 0 1 0-44.672z\"\n      })\n    ]));\n  }\n}), d_arrow_left_default = _sfc_main72;\n\n// src/components/d-arrow-right.vue\nimport { defineComponent as _defineComponent73 } from \"vue\";\nimport { createElementVNode as _createElementVNode73, openBlock as _openBlock73, createElementBlock as _createElementBlock73 } from \"vue\";\nvar _sfc_main73 = /* @__PURE__ */ _defineComponent73({\n  name: \"DArrowRight\",\n  __name: \"d-arrow-right\",\n  setup(__props) {\n    return (_ctx, _cache) => (_openBlock73(), _createElementBlock73(\"svg\", {\n      xmlns: \"http://www.w3.org/2000/svg\",\n      viewBox: \"0 0 1024 1024\"\n    }, [\n      _createElementVNode73(\"path\", {\n        fill: \"currentColor\",\n        d: \"M452.864 149.312a29.12 29.12 0 0 1 41.728.064L826.24 489.664a32 32 0 0 1 0 44.672L494.592 874.624a29.12 29.12 0 0 1-41.728 0 30.59 30.59 0 0 1 0-42.752L764.736 512 452.864 192a30.59 30.59 0 0 1 0-42.688m-256 0a29.12 29.12 0 0 1 41.728.064L570.24 489.664a32 32 0 0 1 0 44.672L238.592 874.624a29.12 29.12 0 0 1-41.728 0 30.59 30.59 0 0 1 0-42.752L508.736 512 196.864 192a30.59 30.59 0 0 1 0-42.688\"\n      })\n    ]));\n  }\n}), d_arrow_right_default = _sfc_main73;\n\n// src/components/d-caret.vue\nimport { defineComponent as _defineComponent74 } from \"vue\";\nimport { createElementVNode as _createElementVNode74, openBlock as _openBlock74, createElementBlock as _createElementBlock74 } from \"vue\";\nvar _sfc_main74 = /* @__PURE__ */ _defineComponent74({\n  name: \"DCaret\",\n  __name: \"d-caret\",\n  setup(__props) {\n    return (_ctx, _cache) => (_openBlock74(), _createElementBlock74(\"svg\", {\n      xmlns: \"http://www.w3.org/2000/svg\",\n      viewBox: \"0 0 1024 1024\"\n    }, [\n      _createElementVNode74(\"path\", {\n        fill: \"currentColor\",\n        d: \"m512 128 288 320H224zM224 576h576L512 896z\"\n      })\n    ]));\n  }\n}), d_caret_default = _sfc_main74;\n\n// src/components/data-analysis.vue\nimport { defineComponent as _defineComponent75 } from \"vue\";\nimport { createElementVNode as _createElementVNode75, openBlock as _openBlock75, createElementBlock as _createElementBlock75 } from \"vue\";\nvar _sfc_main75 = /* @__PURE__ */ _defineComponent75({\n  name: \"DataAnalysis\",\n  __name: \"data-analysis\",\n  setup(__props) {\n    return (_ctx, _cache) => (_openBlock75(), _createElementBlock75(\"svg\", {\n      xmlns: \"http://www.w3.org/2000/svg\",\n      viewBox: \"0 0 1024 1024\"\n    }, [\n      _createElementVNode75(\"path\", {\n        fill: \"currentColor\",\n        d: \"m665.216 768 110.848 192h-73.856L591.36 768H433.024L322.176 960H248.32l110.848-192H160a32 32 0 0 1-32-32V192H64a32 32 0 0 1 0-64h896a32 32 0 1 1 0 64h-64v544a32 32 0 0 1-32 32zM832 192H192v512h640zM352 448a32 32 0 0 1 32 32v64a32 32 0 0 1-64 0v-64a32 32 0 0 1 32-32m160-64a32 32 0 0 1 32 32v128a32 32 0 0 1-64 0V416a32 32 0 0 1 32-32m160-64a32 32 0 0 1 32 32v192a32 32 0 1 1-64 0V352a32 32 0 0 1 32-32\"\n      })\n    ]));\n  }\n}), data_analysis_default = _sfc_main75;\n\n// src/components/data-board.vue\nimport { defineComponent as _defineComponent76 } from \"vue\";\nimport { createElementVNode as _createElementVNode76, openBlock as _openBlock76, createElementBlock as _createElementBlock76 } from \"vue\";\nvar _sfc_main76 = /* @__PURE__ */ _defineComponent76({\n  name: \"DataBoard\",\n  __name: \"data-board\",\n  setup(__props) {\n    return (_ctx, _cache) => (_openBlock76(), _createElementBlock76(\"svg\", {\n      xmlns: \"http://www.w3.org/2000/svg\",\n      viewBox: \"0 0 1024 1024\"\n    }, [\n      _createElementVNode76(\"path\", {\n        fill: \"currentColor\",\n        d: \"M32 128h960v64H32z\"\n      }),\n      _createElementVNode76(\"path\", {\n        fill: \"currentColor\",\n        d: \"M192 192v512h640V192zm-64-64h768v608a32 32 0 0 1-32 32H160a32 32 0 0 1-32-32z\"\n      }),\n      _createElementVNode76(\"path\", {\n        fill: \"currentColor\",\n        d: \"M322.176 960H248.32l144.64-250.56 55.424 32zm453.888 0h-73.856L576 741.44l55.424-32z\"\n      })\n    ]));\n  }\n}), data_board_default = _sfc_main76;\n\n// src/components/data-line.vue\nimport { defineComponent as _defineComponent77 } from \"vue\";\nimport { createElementVNode as _createElementVNode77, openBlock as _openBlock77, createElementBlock as _createElementBlock77 } from \"vue\";\nvar _sfc_main77 = /* @__PURE__ */ _defineComponent77({\n  name: \"DataLine\",\n  __name: \"data-line\",\n  setup(__props) {\n    return (_ctx, _cache) => (_openBlock77(), _createElementBlock77(\"svg\", {\n      xmlns: \"http://www.w3.org/2000/svg\",\n      viewBox: \"0 0 1024 1024\"\n    }, [\n      _createElementVNode77(\"path\", {\n        fill: \"currentColor\",\n        d: \"M359.168 768H160a32 32 0 0 1-32-32V192H64a32 32 0 0 1 0-64h896a32 32 0 1 1 0 64h-64v544a32 32 0 0 1-32 32H665.216l110.848 192h-73.856L591.36 768H433.024L322.176 960H248.32zM832 192H192v512h640zM342.656 534.656a32 32 0 1 1-45.312-45.312L444.992 341.76l125.44 94.08L679.04 300.032a32 32 0 1 1 49.92 39.936L581.632 524.224 451.008 426.24 342.656 534.592z\"\n      })\n    ]));\n  }\n}), data_line_default = _sfc_main77;\n\n// src/components/delete-filled.vue\nimport { defineComponent as _defineComponent78 } from \"vue\";\nimport { createElementVNode as _createElementVNode78, openBlock as _openBlock78, createElementBlock as _createElementBlock78 } from \"vue\";\nvar _sfc_main78 = /* @__PURE__ */ _defineComponent78({\n  name: \"DeleteFilled\",\n  __name: \"delete-filled\",\n  setup(__props) {\n    return (_ctx, _cache) => (_openBlock78(), _createElementBlock78(\"svg\", {\n      xmlns: \"http://www.w3.org/2000/svg\",\n      viewBox: \"0 0 1024 1024\"\n    }, [\n      _createElementVNode78(\"path\", {\n        fill: \"currentColor\",\n        d: \"M352 192V95.936a32 32 0 0 1 32-32h256a32 32 0 0 1 32 32V192h256a32 32 0 1 1 0 64H96a32 32 0 0 1 0-64zm64 0h192v-64H416zM192 960a32 32 0 0 1-32-32V256h704v672a32 32 0 0 1-32 32zm224-192a32 32 0 0 0 32-32V416a32 32 0 0 0-64 0v320a32 32 0 0 0 32 32m192 0a32 32 0 0 0 32-32V416a32 32 0 0 0-64 0v320a32 32 0 0 0 32 32\"\n      })\n    ]));\n  }\n}), delete_filled_default = _sfc_main78;\n\n// src/components/delete-location.vue\nimport { defineComponent as _defineComponent79 } from \"vue\";\nimport { createElementVNode as _createElementVNode79, openBlock as _openBlock79, createElementBlock as _createElementBlock79 } from \"vue\";\nvar _sfc_main79 = /* @__PURE__ */ _defineComponent79({\n  name: \"DeleteLocation\",\n  __name: \"delete-location\",\n  setup(__props) {\n    return (_ctx, _cache) => (_openBlock79(), _createElementBlock79(\"svg\", {\n      xmlns: \"http://www.w3.org/2000/svg\",\n      viewBox: \"0 0 1024 1024\"\n    }, [\n      _createElementVNode79(\"path\", {\n        fill: \"currentColor\",\n        d: \"M288 896h448q32 0 32 32t-32 32H288q-32 0-32-32t32-32\"\n      }),\n      _createElementVNode79(\"path\", {\n        fill: \"currentColor\",\n        d: \"M800 416a288 288 0 1 0-576 0c0 118.144 94.528 272.128 288 456.576C705.472 688.128 800 534.144 800 416M512 960C277.312 746.688 160 565.312 160 416a352 352 0 0 1 704 0c0 149.312-117.312 330.688-352 544\"\n      }),\n      _createElementVNode79(\"path\", {\n        fill: \"currentColor\",\n        d: \"M384 384h256q32 0 32 32t-32 32H384q-32 0-32-32t32-32\"\n      })\n    ]));\n  }\n}), delete_location_default = _sfc_main79;\n\n// src/components/delete.vue\nimport { defineComponent as _defineComponent80 } from \"vue\";\nimport { createElementVNode as _createElementVNode80, openBlock as _openBlock80, createElementBlock as _createElementBlock80 } from \"vue\";\nvar _sfc_main80 = /* @__PURE__ */ _defineComponent80({\n  name: \"Delete\",\n  __name: \"delete\",\n  setup(__props) {\n    return (_ctx, _cache) => (_openBlock80(), _createElementBlock80(\"svg\", {\n      xmlns: \"http://www.w3.org/2000/svg\",\n      viewBox: \"0 0 1024 1024\"\n    }, [\n      _createElementVNode80(\"path\", {\n        fill: \"currentColor\",\n        d: \"M160 256H96a32 32 0 0 1 0-64h256V95.936a32 32 0 0 1 32-32h256a32 32 0 0 1 32 32V192h256a32 32 0 1 1 0 64h-64v672a32 32 0 0 1-32 32H192a32 32 0 0 1-32-32zm448-64v-64H416v64zM224 896h576V256H224zm192-128a32 32 0 0 1-32-32V416a32 32 0 0 1 64 0v320a32 32 0 0 1-32 32m192 0a32 32 0 0 1-32-32V416a32 32 0 0 1 64 0v320a32 32 0 0 1-32 32\"\n      })\n    ]));\n  }\n}), delete_default = _sfc_main80;\n\n// src/components/dessert.vue\nimport { defineComponent as _defineComponent81 } from \"vue\";\nimport { createElementVNode as _createElementVNode81, openBlock as _openBlock81, createElementBlock as _createElementBlock81 } from \"vue\";\nvar _sfc_main81 = /* @__PURE__ */ _defineComponent81({\n  name: \"Dessert\",\n  __name: \"dessert\",\n  setup(__props) {\n    return (_ctx, _cache) => (_openBlock81(), _createElementBlock81(\"svg\", {\n      xmlns: \"http://www.w3.org/2000/svg\",\n      viewBox: \"0 0 1024 1024\"\n    }, [\n      _createElementVNode81(\"path\", {\n        fill: \"currentColor\",\n        d: \"M128 416v-48a144 144 0 0 1 168.64-141.888 224.128 224.128 0 0 1 430.72 0A144 144 0 0 1 896 368v48a384 384 0 0 1-352 382.72V896h-64v-97.28A384 384 0 0 1 128 416m287.104-32.064h193.792a143.81 143.81 0 0 1 58.88-132.736 160.064 160.064 0 0 0-311.552 0 143.81 143.81 0 0 1 58.88 132.8zm-72.896 0a72 72 0 1 0-140.48 0zm339.584 0h140.416a72 72 0 1 0-140.48 0zM512 736a320 320 0 0 0 318.4-288.064H193.6A320 320 0 0 0 512 736M384 896.064h256a32 32 0 1 1 0 64H384a32 32 0 1 1 0-64\"\n      })\n    ]));\n  }\n}), dessert_default = _sfc_main81;\n\n// src/components/discount.vue\nimport { defineComponent as _defineComponent82 } from \"vue\";\nimport { createElementVNode as _createElementVNode82, openBlock as _openBlock82, createElementBlock as _createElementBlock82 } from \"vue\";\nvar _sfc_main82 = /* @__PURE__ */ _defineComponent82({\n  name: \"Discount\",\n  __name: \"discount\",\n  setup(__props) {\n    return (_ctx, _cache) => (_openBlock82(), _createElementBlock82(\"svg\", {\n      xmlns: \"http://www.w3.org/2000/svg\",\n      viewBox: \"0 0 1024 1024\"\n    }, [\n      _createElementVNode82(\"path\", {\n        fill: \"currentColor\",\n        d: \"M224 704h576V318.336L552.512 115.84a64 64 0 0 0-81.024 0L224 318.336zm0 64v128h576V768zM593.024 66.304l259.2 212.096A32 32 0 0 1 864 303.168V928a32 32 0 0 1-32 32H192a32 32 0 0 1-32-32V303.168a32 32 0 0 1 11.712-24.768l259.2-212.096a128 128 0 0 1 162.112 0\"\n      }),\n      _createElementVNode82(\"path\", {\n        fill: \"currentColor\",\n        d: \"M512 448a64 64 0 1 0 0-128 64 64 0 0 0 0 128m0 64a128 128 0 1 1 0-256 128 128 0 0 1 0 256\"\n      })\n    ]));\n  }\n}), discount_default = _sfc_main82;\n\n// src/components/dish-dot.vue\nimport { defineComponent as _defineComponent83 } from \"vue\";\nimport { createElementVNode as _createElementVNode83, openBlock as _openBlock83, createElementBlock as _createElementBlock83 } from \"vue\";\nvar _sfc_main83 = /* @__PURE__ */ _defineComponent83({\n  name: \"DishDot\",\n  __name: \"dish-dot\",\n  setup(__props) {\n    return (_ctx, _cache) => (_openBlock83(), _createElementBlock83(\"svg\", {\n      xmlns: \"http://www.w3.org/2000/svg\",\n      viewBox: \"0 0 1024 1024\"\n    }, [\n      _createElementVNode83(\"path\", {\n        fill: \"currentColor\",\n        d: \"m384.064 274.56.064-50.688A128 128 0 0 1 512.128 96c70.528 0 127.68 57.152 127.68 127.68v50.752A448.19 448.19 0 0 1 955.392 768H68.544A448.19 448.19 0 0 1 384 274.56zM96 832h832a32 32 0 1 1 0 64H96a32 32 0 1 1 0-64m32-128h768a384 384 0 1 0-768 0m447.808-448v-32.32a63.68 63.68 0 0 0-63.68-63.68 64 64 0 0 0-64 63.936V256z\"\n      })\n    ]));\n  }\n}), dish_dot_default = _sfc_main83;\n\n// src/components/dish.vue\nimport { defineComponent as _defineComponent84 } from \"vue\";\nimport { createElementVNode as _createElementVNode84, openBlock as _openBlock84, createElementBlock as _createElementBlock84 } from \"vue\";\nvar _sfc_main84 = /* @__PURE__ */ _defineComponent84({\n  name: \"Dish\",\n  __name: \"dish\",\n  setup(__props) {\n    return (_ctx, _cache) => (_openBlock84(), _createElementBlock84(\"svg\", {\n      xmlns: \"http://www.w3.org/2000/svg\",\n      viewBox: \"0 0 1024 1024\"\n    }, [\n      _createElementVNode84(\"path\", {\n        fill: \"currentColor\",\n        d: \"M480 257.152V192h-96a32 32 0 0 1 0-64h256a32 32 0 1 1 0 64h-96v65.152A448 448 0 0 1 955.52 768H68.48A448 448 0 0 1 480 257.152M128 704h768a384 384 0 1 0-768 0M96 832h832a32 32 0 1 1 0 64H96a32 32 0 1 1 0-64\"\n      })\n    ]));\n  }\n}), dish_default = _sfc_main84;\n\n// src/components/document-add.vue\nimport { defineComponent as _defineComponent85 } from \"vue\";\nimport { createElementVNode as _createElementVNode85, openBlock as _openBlock85, createElementBlock as _createElementBlock85 } from \"vue\";\nvar _sfc_main85 = /* @__PURE__ */ _defineComponent85({\n  name: \"DocumentAdd\",\n  __name: \"document-add\",\n  setup(__props) {\n    return (_ctx, _cache) => (_openBlock85(), _createElementBlock85(\"svg\", {\n      xmlns: \"http://www.w3.org/2000/svg\",\n      viewBox: \"0 0 1024 1024\"\n    }, [\n      _createElementVNode85(\"path\", {\n        fill: \"currentColor\",\n        d: \"M832 384H576V128H192v768h640zm-26.496-64L640 154.496V320zM160 64h480l256 256v608a32 32 0 0 1-32 32H160a32 32 0 0 1-32-32V96a32 32 0 0 1 32-32m320 512V448h64v128h128v64H544v128h-64V640H352v-64z\"\n      })\n    ]));\n  }\n}), document_add_default = _sfc_main85;\n\n// src/components/document-checked.vue\nimport { defineComponent as _defineComponent86 } from \"vue\";\nimport { createElementVNode as _createElementVNode86, openBlock as _openBlock86, createElementBlock as _createElementBlock86 } from \"vue\";\nvar _sfc_main86 = /* @__PURE__ */ _defineComponent86({\n  name: \"DocumentChecked\",\n  __name: \"document-checked\",\n  setup(__props) {\n    return (_ctx, _cache) => (_openBlock86(), _createElementBlock86(\"svg\", {\n      xmlns: \"http://www.w3.org/2000/svg\",\n      viewBox: \"0 0 1024 1024\"\n    }, [\n      _createElementVNode86(\"path\", {\n        fill: \"currentColor\",\n        d: \"M805.504 320 640 154.496V320zM832 384H576V128H192v768h640zM160 64h480l256 256v608a32 32 0 0 1-32 32H160a32 32 0 0 1-32-32V96a32 32 0 0 1 32-32m318.4 582.144 180.992-180.992L704.64 510.4 478.4 736.64 320 578.304l45.248-45.312z\"\n      })\n    ]));\n  }\n}), document_checked_default = _sfc_main86;\n\n// src/components/document-copy.vue\nimport { defineComponent as _defineComponent87 } from \"vue\";\nimport { createElementVNode as _createElementVNode87, openBlock as _openBlock87, createElementBlock as _createElementBlock87 } from \"vue\";\nvar _sfc_main87 = /* @__PURE__ */ _defineComponent87({\n  name: \"DocumentCopy\",\n  __name: \"document-copy\",\n  setup(__props) {\n    return (_ctx, _cache) => (_openBlock87(), _createElementBlock87(\"svg\", {\n      xmlns: \"http://www.w3.org/2000/svg\",\n      viewBox: \"0 0 1024 1024\"\n    }, [\n      _createElementVNode87(\"path\", {\n        fill: \"currentColor\",\n        d: \"M128 320v576h576V320zm-32-64h640a32 32 0 0 1 32 32v640a32 32 0 0 1-32 32H96a32 32 0 0 1-32-32V288a32 32 0 0 1 32-32M960 96v704a32 32 0 0 1-32 32h-96v-64h64V128H384v64h-64V96a32 32 0 0 1 32-32h576a32 32 0 0 1 32 32M256 672h320v64H256zm0-192h320v64H256z\"\n      })\n    ]));\n  }\n}), document_copy_default = _sfc_main87;\n\n// src/components/document-delete.vue\nimport { defineComponent as _defineComponent88 } from \"vue\";\nimport { createElementVNode as _createElementVNode88, openBlock as _openBlock88, createElementBlock as _createElementBlock88 } from \"vue\";\nvar _sfc_main88 = /* @__PURE__ */ _defineComponent88({\n  name: \"DocumentDelete\",\n  __name: \"document-delete\",\n  setup(__props) {\n    return (_ctx, _cache) => (_openBlock88(), _createElementBlock88(\"svg\", {\n      xmlns: \"http://www.w3.org/2000/svg\",\n      viewBox: \"0 0 1024 1024\"\n    }, [\n      _createElementVNode88(\"path\", {\n        fill: \"currentColor\",\n        d: \"M805.504 320 640 154.496V320zM832 384H576V128H192v768h640zM160 64h480l256 256v608a32 32 0 0 1-32 32H160a32 32 0 0 1-32-32V96a32 32 0 0 1 32-32m308.992 546.304-90.496-90.624 45.248-45.248 90.56 90.496 90.496-90.432 45.248 45.248-90.496 90.56 90.496 90.496-45.248 45.248-90.496-90.496-90.56 90.496-45.248-45.248z\"\n      })\n    ]));\n  }\n}), document_delete_default = _sfc_main88;\n\n// src/components/document-remove.vue\nimport { defineComponent as _defineComponent89 } from \"vue\";\nimport { createElementVNode as _createElementVNode89, openBlock as _openBlock89, createElementBlock as _createElementBlock89 } from \"vue\";\nvar _sfc_main89 = /* @__PURE__ */ _defineComponent89({\n  name: \"DocumentRemove\",\n  __name: \"document-remove\",\n  setup(__props) {\n    return (_ctx, _cache) => (_openBlock89(), _createElementBlock89(\"svg\", {\n      xmlns: \"http://www.w3.org/2000/svg\",\n      viewBox: \"0 0 1024 1024\"\n    }, [\n      _createElementVNode89(\"path\", {\n        fill: \"currentColor\",\n        d: \"M805.504 320 640 154.496V320zM832 384H576V128H192v768h640zM160 64h480l256 256v608a32 32 0 0 1-32 32H160a32 32 0 0 1-32-32V96a32 32 0 0 1 32-32m192 512h320v64H352z\"\n      })\n    ]));\n  }\n}), document_remove_default = _sfc_main89;\n\n// src/components/document.vue\nimport { defineComponent as _defineComponent90 } from \"vue\";\nimport { createElementVNode as _createElementVNode90, openBlock as _openBlock90, createElementBlock as _createElementBlock90 } from \"vue\";\nvar _sfc_main90 = /* @__PURE__ */ _defineComponent90({\n  name: \"Document\",\n  __name: \"document\",\n  setup(__props) {\n    return (_ctx, _cache) => (_openBlock90(), _createElementBlock90(\"svg\", {\n      xmlns: \"http://www.w3.org/2000/svg\",\n      viewBox: \"0 0 1024 1024\"\n    }, [\n      _createElementVNode90(\"path\", {\n        fill: \"currentColor\",\n        d: \"M832 384H576V128H192v768h640zm-26.496-64L640 154.496V320zM160 64h480l256 256v608a32 32 0 0 1-32 32H160a32 32 0 0 1-32-32V96a32 32 0 0 1 32-32m160 448h384v64H320zm0-192h160v64H320zm0 384h384v64H320z\"\n      })\n    ]));\n  }\n}), document_default = _sfc_main90;\n\n// src/components/download.vue\nimport { defineComponent as _defineComponent91 } from \"vue\";\nimport { createElementVNode as _createElementVNode91, openBlock as _openBlock91, createElementBlock as _createElementBlock91 } from \"vue\";\nvar _sfc_main91 = /* @__PURE__ */ _defineComponent91({\n  name: \"Download\",\n  __name: \"download\",\n  setup(__props) {\n    return (_ctx, _cache) => (_openBlock91(), _createElementBlock91(\"svg\", {\n      xmlns: \"http://www.w3.org/2000/svg\",\n      viewBox: \"0 0 1024 1024\"\n    }, [\n      _createElementVNode91(\"path\", {\n        fill: \"currentColor\",\n        d: \"M160 832h704a32 32 0 1 1 0 64H160a32 32 0 1 1 0-64m384-253.696 236.288-236.352 45.248 45.248L508.8 704 192 387.2l45.248-45.248L480 584.704V128h64z\"\n      })\n    ]));\n  }\n}), download_default = _sfc_main91;\n\n// src/components/drizzling.vue\nimport { defineComponent as _defineComponent92 } from \"vue\";\nimport { createElementVNode as _createElementVNode92, openBlock as _openBlock92, createElementBlock as _createElementBlock92 } from \"vue\";\nvar _sfc_main92 = /* @__PURE__ */ _defineComponent92({\n  name: \"Drizzling\",\n  __name: \"drizzling\",\n  setup(__props) {\n    return (_ctx, _cache) => (_openBlock92(), _createElementBlock92(\"svg\", {\n      xmlns: \"http://www.w3.org/2000/svg\",\n      viewBox: \"0 0 1024 1024\"\n    }, [\n      _createElementVNode92(\"path\", {\n        fill: \"currentColor\",\n        d: \"m739.328 291.328-35.2-6.592-12.8-33.408a192.064 192.064 0 0 0-365.952 23.232l-9.92 40.896-41.472 7.04a176.32 176.32 0 0 0-146.24 173.568c0 97.28 78.72 175.936 175.808 175.936h400a192 192 0 0 0 35.776-380.672M959.552 480a256 256 0 0 1-256 256h-400A239.81 239.81 0 0 1 63.744 496.192a240.32 240.32 0 0 1 199.488-236.8 256.128 256.128 0 0 1 487.872-30.976A256.064 256.064 0 0 1 959.552 480M288 800h64v64h-64zm192 0h64v64h-64zm-96 96h64v64h-64zm192 0h64v64h-64zm96-96h64v64h-64z\"\n      })\n    ]));\n  }\n}), drizzling_default = _sfc_main92;\n\n// src/components/edit-pen.vue\nimport { defineComponent as _defineComponent93 } from \"vue\";\nimport { createElementVNode as _createElementVNode93, openBlock as _openBlock93, createElementBlock as _createElementBlock93 } from \"vue\";\nvar _sfc_main93 = /* @__PURE__ */ _defineComponent93({\n  name: \"EditPen\",\n  __name: \"edit-pen\",\n  setup(__props) {\n    return (_ctx, _cache) => (_openBlock93(), _createElementBlock93(\"svg\", {\n      xmlns: \"http://www.w3.org/2000/svg\",\n      viewBox: \"0 0 1024 1024\"\n    }, [\n      _createElementVNode93(\"path\", {\n        fill: \"currentColor\",\n        d: \"m199.04 672.64 193.984 112 224-387.968-193.92-112-224 388.032zm-23.872 60.16 32.896 148.288 144.896-45.696zM455.04 229.248l193.92 112 56.704-98.112-193.984-112zM104.32 708.8l384-665.024 304.768 175.936L409.152 884.8h.064l-248.448 78.336zm384 254.272v-64h448v64z\"\n      })\n    ]));\n  }\n}), edit_pen_default = _sfc_main93;\n\n// src/components/edit.vue\nimport { defineComponent as _defineComponent94 } from \"vue\";\nimport { createElementVNode as _createElementVNode94, openBlock as _openBlock94, createElementBlock as _createElementBlock94 } from \"vue\";\nvar _sfc_main94 = /* @__PURE__ */ _defineComponent94({\n  name: \"Edit\",\n  __name: \"edit\",\n  setup(__props) {\n    return (_ctx, _cache) => (_openBlock94(), _createElementBlock94(\"svg\", {\n      xmlns: \"http://www.w3.org/2000/svg\",\n      viewBox: \"0 0 1024 1024\"\n    }, [\n      _createElementVNode94(\"path\", {\n        fill: \"currentColor\",\n        d: \"M832 512a32 32 0 1 1 64 0v352a32 32 0 0 1-32 32H160a32 32 0 0 1-32-32V160a32 32 0 0 1 32-32h352a32 32 0 0 1 0 64H192v640h640z\"\n      }),\n      _createElementVNode94(\"path\", {\n        fill: \"currentColor\",\n        d: \"m469.952 554.24 52.8-7.552L847.104 222.4a32 32 0 1 0-45.248-45.248L477.44 501.44l-7.552 52.8zm422.4-422.4a96 96 0 0 1 0 135.808l-331.84 331.84a32 32 0 0 1-18.112 9.088L436.8 623.68a32 32 0 0 1-36.224-36.224l15.104-105.6a32 32 0 0 1 9.024-18.112l331.904-331.84a96 96 0 0 1 135.744 0z\"\n      })\n    ]));\n  }\n}), edit_default = _sfc_main94;\n\n// src/components/eleme-filled.vue\nimport { defineComponent as _defineComponent95 } from \"vue\";\nimport { createElementVNode as _createElementVNode95, openBlock as _openBlock95, createElementBlock as _createElementBlock95 } from \"vue\";\nvar _sfc_main95 = /* @__PURE__ */ _defineComponent95({\n  name: \"ElemeFilled\",\n  __name: \"eleme-filled\",\n  setup(__props) {\n    return (_ctx, _cache) => (_openBlock95(), _createElementBlock95(\"svg\", {\n      xmlns: \"http://www.w3.org/2000/svg\",\n      viewBox: \"0 0 1024 1024\"\n    }, [\n      _createElementVNode95(\"path\", {\n        fill: \"currentColor\",\n        d: \"M176 64h672c61.824 0 112 50.176 112 112v672a112 112 0 0 1-112 112H176A112 112 0 0 1 64 848V176c0-61.824 50.176-112 112-112m150.528 173.568c-152.896 99.968-196.544 304.064-97.408 456.96a330.69 330.69 0 0 0 456.96 96.64c9.216-5.888 17.6-11.776 25.152-18.56a18.24 18.24 0 0 0 4.224-24.32L700.352 724.8a47.55 47.55 0 0 0-65.536-14.272A234.56 234.56 0 0 1 310.592 641.6C240 533.248 271.104 387.968 379.456 316.48a234.3 234.3 0 0 1 276.352 15.168c1.664.832 2.56 2.56 3.392 4.224 5.888 8.384 3.328 19.328-5.12 25.216L456.832 489.6a47.55 47.55 0 0 0-14.336 65.472l16 24.384c5.888 8.384 16.768 10.88 25.216 5.056l308.224-199.936a19.584 19.584 0 0 0 6.72-23.488v-.896c-4.992-9.216-10.048-17.6-15.104-26.88-99.968-151.168-304.064-194.88-456.96-95.744zM786.88 504.704l-62.208 40.32c-8.32 5.888-10.88 16.768-4.992 25.216L760 632.32c5.888 8.448 16.768 11.008 25.152 5.12l31.104-20.16a55.36 55.36 0 0 0 16-76.48l-20.224-31.04a19.52 19.52 0 0 0-25.152-5.12z\"\n      })\n    ]));\n  }\n}), eleme_filled_default = _sfc_main95;\n\n// src/components/eleme.vue\nimport { defineComponent as _defineComponent96 } from \"vue\";\nimport { createElementVNode as _createElementVNode96, openBlock as _openBlock96, createElementBlock as _createElementBlock96 } from \"vue\";\nvar _sfc_main96 = /* @__PURE__ */ _defineComponent96({\n  name: \"Eleme\",\n  __name: \"eleme\",\n  setup(__props) {\n    return (_ctx, _cache) => (_openBlock96(), _createElementBlock96(\"svg\", {\n      xmlns: \"http://www.w3.org/2000/svg\",\n      viewBox: \"0 0 1024 1024\"\n    }, [\n      _createElementVNode96(\"path\", {\n        fill: \"currentColor\",\n        d: \"M300.032 188.8c174.72-113.28 408-63.36 522.24 109.44 5.76 10.56 11.52 20.16 17.28 30.72v.96a22.4 22.4 0 0 1-7.68 26.88l-352.32 228.48c-9.6 6.72-22.08 3.84-28.8-5.76l-18.24-27.84a54.336 54.336 0 0 1 16.32-74.88l225.6-146.88c9.6-6.72 12.48-19.2 5.76-28.8-.96-1.92-1.92-3.84-3.84-4.8a267.84 267.84 0 0 0-315.84-17.28c-123.84 81.6-159.36 247.68-78.72 371.52a268.096 268.096 0 0 0 370.56 78.72 54.336 54.336 0 0 1 74.88 16.32l17.28 26.88c5.76 9.6 3.84 21.12-4.8 27.84-8.64 7.68-18.24 14.4-28.8 21.12a377.92 377.92 0 0 1-522.24-110.4c-113.28-174.72-63.36-408 111.36-522.24m526.08 305.28a22.336 22.336 0 0 1 28.8 5.76l23.04 35.52a63.23 63.23 0 0 1-18.24 87.36l-35.52 23.04c-9.6 6.72-22.08 3.84-28.8-5.76l-46.08-71.04c-6.72-9.6-3.84-22.08 5.76-28.8z\"\n      })\n    ]));\n  }\n}), eleme_default = _sfc_main96;\n\n// src/components/element-plus.vue\nimport { defineComponent as _defineComponent97 } from \"vue\";\nimport { createElementVNode as _createElementVNode97, openBlock as _openBlock97, createElementBlock as _createElementBlock97 } from \"vue\";\nvar _sfc_main97 = /* @__PURE__ */ _defineComponent97({\n  name: \"ElementPlus\",\n  __name: \"element-plus\",\n  setup(__props) {\n    return (_ctx, _cache) => (_openBlock97(), _createElementBlock97(\"svg\", {\n      xmlns: \"http://www.w3.org/2000/svg\",\n      viewBox: \"0 0 1024 1024\"\n    }, [\n      _createElementVNode97(\"path\", {\n        fill: \"currentColor\",\n        d: \"M839.7 734.7c0 33.3-17.9 41-17.9 41S519.7 949.8 499.2 960c-10.2 5.1-20.5 5.1-30.7 0 0 0-314.9-184.3-325.1-192-5.1-5.1-10.2-12.8-12.8-20.5V368.6c0-17.9 20.5-28.2 20.5-28.2L466 158.6q19.2-7.65 38.4 0s279 161.3 309.8 179.2c17.9 7.7 28.2 25.6 25.6 46.1-.1-5-.1 317.5-.1 350.8M714.2 371.2c-64-35.8-217.6-125.4-217.6-125.4-7.7-5.1-20.5-5.1-30.7 0L217.6 389.1s-17.9 10.2-17.9 23v297c0 5.1 5.1 12.8 7.7 17.9 7.7 5.1 256 148.5 256 148.5 7.7 5.1 17.9 5.1 25.6 0 15.4-7.7 250.9-145.9 250.9-145.9s12.8-5.1 12.8-30.7v-74.2l-276.5 169v-64c0-17.9 7.7-30.7 20.5-46.1L745 535c5.1-7.7 10.2-20.5 10.2-30.7v-66.6l-279 169v-69.1c0-15.4 5.1-30.7 17.9-38.4zM919 135.7c0-5.1-5.1-7.7-7.7-7.7h-58.9V66.6c0-5.1-5.1-5.1-10.2-5.1l-30.7 5.1c-5.1 0-5.1 2.6-5.1 5.1V128h-56.3c-5.1 0-5.1 5.1-7.7 5.1v38.4h69.1v64c0 5.1 5.1 5.1 10.2 5.1l30.7-5.1c5.1 0 5.1-2.6 5.1-5.1v-56.3h64z\"\n      })\n    ]));\n  }\n}), element_plus_default = _sfc_main97;\n\n// src/components/expand.vue\nimport { defineComponent as _defineComponent98 } from \"vue\";\nimport { createElementVNode as _createElementVNode98, openBlock as _openBlock98, createElementBlock as _createElementBlock98 } from \"vue\";\nvar _sfc_main98 = /* @__PURE__ */ _defineComponent98({\n  name: \"Expand\",\n  __name: \"expand\",\n  setup(__props) {\n    return (_ctx, _cache) => (_openBlock98(), _createElementBlock98(\"svg\", {\n      xmlns: \"http://www.w3.org/2000/svg\",\n      viewBox: \"0 0 1024 1024\"\n    }, [\n      _createElementVNode98(\"path\", {\n        fill: \"currentColor\",\n        d: \"M128 192h768v128H128zm0 256h512v128H128zm0 256h768v128H128zm576-352 192 160-192 128z\"\n      })\n    ]));\n  }\n}), expand_default = _sfc_main98;\n\n// src/components/failed.vue\nimport { defineComponent as _defineComponent99 } from \"vue\";\nimport { createElementVNode as _createElementVNode99, openBlock as _openBlock99, createElementBlock as _createElementBlock99 } from \"vue\";\nvar _sfc_main99 = /* @__PURE__ */ _defineComponent99({\n  name: \"Failed\",\n  __name: \"failed\",\n  setup(__props) {\n    return (_ctx, _cache) => (_openBlock99(), _createElementBlock99(\"svg\", {\n      xmlns: \"http://www.w3.org/2000/svg\",\n      viewBox: \"0 0 1024 1024\"\n    }, [\n      _createElementVNode99(\"path\", {\n        fill: \"currentColor\",\n        d: \"m557.248 608 135.744-135.744-45.248-45.248-135.68 135.744-135.808-135.68-45.248 45.184L466.752 608l-135.68 135.68 45.184 45.312L512 653.248l135.744 135.744 45.248-45.248L557.312 608zM704 192h160v736H160V192h160v64h384zm-320 0V96h256v96z\"\n      })\n    ]));\n  }\n}), failed_default = _sfc_main99;\n\n// src/components/female.vue\nimport { defineComponent as _defineComponent100 } from \"vue\";\nimport { createElementVNode as _createElementVNode100, openBlock as _openBlock100, createElementBlock as _createElementBlock100 } from \"vue\";\nvar _sfc_main100 = /* @__PURE__ */ _defineComponent100({\n  name: \"Female\",\n  __name: \"female\",\n  setup(__props) {\n    return (_ctx, _cache) => (_openBlock100(), _createElementBlock100(\"svg\", {\n      xmlns: \"http://www.w3.org/2000/svg\",\n      viewBox: \"0 0 1024 1024\"\n    }, [\n      _createElementVNode100(\"path\", {\n        fill: \"currentColor\",\n        d: \"M512 640a256 256 0 1 0 0-512 256 256 0 0 0 0 512m0 64a320 320 0 1 1 0-640 320 320 0 0 1 0 640\"\n      }),\n      _createElementVNode100(\"path\", {\n        fill: \"currentColor\",\n        d: \"M512 640q32 0 32 32v256q0 32-32 32t-32-32V672q0-32 32-32\"\n      }),\n      _createElementVNode100(\"path\", {\n        fill: \"currentColor\",\n        d: \"M352 800h320q32 0 32 32t-32 32H352q-32 0-32-32t32-32\"\n      })\n    ]));\n  }\n}), female_default = _sfc_main100;\n\n// src/components/files.vue\nimport { defineComponent as _defineComponent101 } from \"vue\";\nimport { createElementVNode as _createElementVNode101, openBlock as _openBlock101, createElementBlock as _createElementBlock101 } from \"vue\";\nvar _sfc_main101 = /* @__PURE__ */ _defineComponent101({\n  name: \"Files\",\n  __name: \"files\",\n  setup(__props) {\n    return (_ctx, _cache) => (_openBlock101(), _createElementBlock101(\"svg\", {\n      xmlns: \"http://www.w3.org/2000/svg\",\n      viewBox: \"0 0 1024 1024\"\n    }, [\n      _createElementVNode101(\"path\", {\n        fill: \"currentColor\",\n        d: \"M128 384v448h768V384zm-32-64h832a32 32 0 0 1 32 32v512a32 32 0 0 1-32 32H96a32 32 0 0 1-32-32V352a32 32 0 0 1 32-32m64-128h704v64H160zm96-128h512v64H256z\"\n      })\n    ]));\n  }\n}), files_default = _sfc_main101;\n\n// src/components/film.vue\nimport { defineComponent as _defineComponent102 } from \"vue\";\nimport { createElementVNode as _createElementVNode102, openBlock as _openBlock102, createElementBlock as _createElementBlock102 } from \"vue\";\nvar _sfc_main102 = /* @__PURE__ */ _defineComponent102({\n  name: \"Film\",\n  __name: \"film\",\n  setup(__props) {\n    return (_ctx, _cache) => (_openBlock102(), _createElementBlock102(\"svg\", {\n      xmlns: \"http://www.w3.org/2000/svg\",\n      viewBox: \"0 0 1024 1024\"\n    }, [\n      _createElementVNode102(\"path\", {\n        fill: \"currentColor\",\n        d: \"M160 160v704h704V160zm-32-64h768a32 32 0 0 1 32 32v768a32 32 0 0 1-32 32H128a32 32 0 0 1-32-32V128a32 32 0 0 1 32-32\"\n      }),\n      _createElementVNode102(\"path\", {\n        fill: \"currentColor\",\n        d: \"M320 288V128h64v352h256V128h64v160h160v64H704v128h160v64H704v128h160v64H704v160h-64V544H384v352h-64V736H128v-64h192V544H128v-64h192V352H128v-64z\"\n      })\n    ]));\n  }\n}), film_default = _sfc_main102;\n\n// src/components/filter.vue\nimport { defineComponent as _defineComponent103 } from \"vue\";\nimport { createElementVNode as _createElementVNode103, openBlock as _openBlock103, createElementBlock as _createElementBlock103 } from \"vue\";\nvar _sfc_main103 = /* @__PURE__ */ _defineComponent103({\n  name: \"Filter\",\n  __name: \"filter\",\n  setup(__props) {\n    return (_ctx, _cache) => (_openBlock103(), _createElementBlock103(\"svg\", {\n      xmlns: \"http://www.w3.org/2000/svg\",\n      viewBox: \"0 0 1024 1024\"\n    }, [\n      _createElementVNode103(\"path\", {\n        fill: \"currentColor\",\n        d: \"M384 523.392V928a32 32 0 0 0 46.336 28.608l192-96A32 32 0 0 0 640 832V523.392l280.768-343.104a32 32 0 1 0-49.536-40.576l-288 352A32 32 0 0 0 576 512v300.224l-128 64V512a32 32 0 0 0-7.232-20.288L195.52 192H704a32 32 0 1 0 0-64H128a32 32 0 0 0-24.768 52.288z\"\n      })\n    ]));\n  }\n}), filter_default = _sfc_main103;\n\n// src/components/finished.vue\nimport { defineComponent as _defineComponent104 } from \"vue\";\nimport { createElementVNode as _createElementVNode104, openBlock as _openBlock104, createElementBlock as _createElementBlock104 } from \"vue\";\nvar _sfc_main104 = /* @__PURE__ */ _defineComponent104({\n  name: \"Finished\",\n  __name: \"finished\",\n  setup(__props) {\n    return (_ctx, _cache) => (_openBlock104(), _createElementBlock104(\"svg\", {\n      xmlns: \"http://www.w3.org/2000/svg\",\n      viewBox: \"0 0 1024 1024\"\n    }, [\n      _createElementVNode104(\"path\", {\n        fill: \"currentColor\",\n        d: \"M280.768 753.728 691.456 167.04a32 32 0 1 1 52.416 36.672L314.24 817.472a32 32 0 0 1-45.44 7.296l-230.4-172.8a32 32 0 0 1 38.4-51.2zM736 448a32 32 0 1 1 0-64h192a32 32 0 1 1 0 64zM608 640a32 32 0 0 1 0-64h319.936a32 32 0 1 1 0 64zM480 832a32 32 0 1 1 0-64h447.936a32 32 0 1 1 0 64z\"\n      })\n    ]));\n  }\n}), finished_default = _sfc_main104;\n\n// src/components/first-aid-kit.vue\nimport { defineComponent as _defineComponent105 } from \"vue\";\nimport { createElementVNode as _createElementVNode105, openBlock as _openBlock105, createElementBlock as _createElementBlock105 } from \"vue\";\nvar _sfc_main105 = /* @__PURE__ */ _defineComponent105({\n  name: \"FirstAidKit\",\n  __name: \"first-aid-kit\",\n  setup(__props) {\n    return (_ctx, _cache) => (_openBlock105(), _createElementBlock105(\"svg\", {\n      xmlns: \"http://www.w3.org/2000/svg\",\n      viewBox: \"0 0 1024 1024\"\n    }, [\n      _createElementVNode105(\"path\", {\n        fill: \"currentColor\",\n        d: \"M192 256a64 64 0 0 0-64 64v448a64 64 0 0 0 64 64h640a64 64 0 0 0 64-64V320a64 64 0 0 0-64-64zm0-64h640a128 128 0 0 1 128 128v448a128 128 0 0 1-128 128H192A128 128 0 0 1 64 768V320a128 128 0 0 1 128-128\"\n      }),\n      _createElementVNode105(\"path\", {\n        fill: \"currentColor\",\n        d: \"M544 512h96a32 32 0 0 1 0 64h-96v96a32 32 0 0 1-64 0v-96h-96a32 32 0 0 1 0-64h96v-96a32 32 0 0 1 64 0zM352 128v64h320v-64zm-32-64h384a32 32 0 0 1 32 32v128a32 32 0 0 1-32 32H320a32 32 0 0 1-32-32V96a32 32 0 0 1 32-32\"\n      })\n    ]));\n  }\n}), first_aid_kit_default = _sfc_main105;\n\n// src/components/flag.vue\nimport { defineComponent as _defineComponent106 } from \"vue\";\nimport { createElementVNode as _createElementVNode106, openBlock as _openBlock106, createElementBlock as _createElementBlock106 } from \"vue\";\nvar _sfc_main106 = /* @__PURE__ */ _defineComponent106({\n  name: \"Flag\",\n  __name: \"flag\",\n  setup(__props) {\n    return (_ctx, _cache) => (_openBlock106(), _createElementBlock106(\"svg\", {\n      xmlns: \"http://www.w3.org/2000/svg\",\n      viewBox: \"0 0 1024 1024\"\n    }, [\n      _createElementVNode106(\"path\", {\n        fill: \"currentColor\",\n        d: \"M288 128h608L736 384l160 256H288v320h-96V64h96z\"\n      })\n    ]));\n  }\n}), flag_default = _sfc_main106;\n\n// src/components/fold.vue\nimport { defineComponent as _defineComponent107 } from \"vue\";\nimport { createElementVNode as _createElementVNode107, openBlock as _openBlock107, createElementBlock as _createElementBlock107 } from \"vue\";\nvar _sfc_main107 = /* @__PURE__ */ _defineComponent107({\n  name: \"Fold\",\n  __name: \"fold\",\n  setup(__props) {\n    return (_ctx, _cache) => (_openBlock107(), _createElementBlock107(\"svg\", {\n      xmlns: \"http://www.w3.org/2000/svg\",\n      viewBox: \"0 0 1024 1024\"\n    }, [\n      _createElementVNode107(\"path\", {\n        fill: \"currentColor\",\n        d: \"M896 192H128v128h768zm0 256H384v128h512zm0 256H128v128h768zM320 384 128 512l192 128z\"\n      })\n    ]));\n  }\n}), fold_default = _sfc_main107;\n\n// src/components/folder-add.vue\nimport { defineComponent as _defineComponent108 } from \"vue\";\nimport { createElementVNode as _createElementVNode108, openBlock as _openBlock108, createElementBlock as _createElementBlock108 } from \"vue\";\nvar _sfc_main108 = /* @__PURE__ */ _defineComponent108({\n  name: \"FolderAdd\",\n  __name: \"folder-add\",\n  setup(__props) {\n    return (_ctx, _cache) => (_openBlock108(), _createElementBlock108(\"svg\", {\n      xmlns: \"http://www.w3.org/2000/svg\",\n      viewBox: \"0 0 1024 1024\"\n    }, [\n      _createElementVNode108(\"path\", {\n        fill: \"currentColor\",\n        d: \"M128 192v640h768V320H485.76L357.504 192zm-32-64h287.872l128.384 128H928a32 32 0 0 1 32 32v576a32 32 0 0 1-32 32H96a32 32 0 0 1-32-32V160a32 32 0 0 1 32-32m384 416V416h64v128h128v64H544v128h-64V608H352v-64z\"\n      })\n    ]));\n  }\n}), folder_add_default = _sfc_main108;\n\n// src/components/folder-checked.vue\nimport { defineComponent as _defineComponent109 } from \"vue\";\nimport { createElementVNode as _createElementVNode109, openBlock as _openBlock109, createElementBlock as _createElementBlock109 } from \"vue\";\nvar _sfc_main109 = /* @__PURE__ */ _defineComponent109({\n  name: \"FolderChecked\",\n  __name: \"folder-checked\",\n  setup(__props) {\n    return (_ctx, _cache) => (_openBlock109(), _createElementBlock109(\"svg\", {\n      xmlns: \"http://www.w3.org/2000/svg\",\n      viewBox: \"0 0 1024 1024\"\n    }, [\n      _createElementVNode109(\"path\", {\n        fill: \"currentColor\",\n        d: \"M128 192v640h768V320H485.76L357.504 192zm-32-64h287.872l128.384 128H928a32 32 0 0 1 32 32v576a32 32 0 0 1-32 32H96a32 32 0 0 1-32-32V160a32 32 0 0 1 32-32m414.08 502.144 180.992-180.992L736.32 494.4 510.08 720.64l-158.4-158.336 45.248-45.312z\"\n      })\n    ]));\n  }\n}), folder_checked_default = _sfc_main109;\n\n// src/components/folder-delete.vue\nimport { defineComponent as _defineComponent110 } from \"vue\";\nimport { createElementVNode as _createElementVNode110, openBlock as _openBlock110, createElementBlock as _createElementBlock110 } from \"vue\";\nvar _sfc_main110 = /* @__PURE__ */ _defineComponent110({\n  name: \"FolderDelete\",\n  __name: \"folder-delete\",\n  setup(__props) {\n    return (_ctx, _cache) => (_openBlock110(), _createElementBlock110(\"svg\", {\n      xmlns: \"http://www.w3.org/2000/svg\",\n      viewBox: \"0 0 1024 1024\"\n    }, [\n      _createElementVNode110(\"path\", {\n        fill: \"currentColor\",\n        d: \"M128 192v640h768V320H485.76L357.504 192zm-32-64h287.872l128.384 128H928a32 32 0 0 1 32 32v576a32 32 0 0 1-32 32H96a32 32 0 0 1-32-32V160a32 32 0 0 1 32-32m370.752 448-90.496-90.496 45.248-45.248L512 530.752l90.496-90.496 45.248 45.248L557.248 576l90.496 90.496-45.248 45.248L512 621.248l-90.496 90.496-45.248-45.248z\"\n      })\n    ]));\n  }\n}), folder_delete_default = _sfc_main110;\n\n// src/components/folder-opened.vue\nimport { defineComponent as _defineComponent111 } from \"vue\";\nimport { createElementVNode as _createElementVNode111, openBlock as _openBlock111, createElementBlock as _createElementBlock111 } from \"vue\";\nvar _sfc_main111 = /* @__PURE__ */ _defineComponent111({\n  name: \"FolderOpened\",\n  __name: \"folder-opened\",\n  setup(__props) {\n    return (_ctx, _cache) => (_openBlock111(), _createElementBlock111(\"svg\", {\n      xmlns: \"http://www.w3.org/2000/svg\",\n      viewBox: \"0 0 1024 1024\"\n    }, [\n      _createElementVNode111(\"path\", {\n        fill: \"currentColor\",\n        d: \"M878.08 448H241.92l-96 384h636.16zM832 384v-64H485.76L357.504 192H128v448l57.92-231.744A32 32 0 0 1 216.96 384zm-24.96 512H96a32 32 0 0 1-32-32V160a32 32 0 0 1 32-32h287.872l128.384 128H864a32 32 0 0 1 32 32v96h23.04a32 32 0 0 1 31.04 39.744l-112 448A32 32 0 0 1 807.04 896\"\n      })\n    ]));\n  }\n}), folder_opened_default = _sfc_main111;\n\n// src/components/folder-remove.vue\nimport { defineComponent as _defineComponent112 } from \"vue\";\nimport { createElementVNode as _createElementVNode112, openBlock as _openBlock112, createElementBlock as _createElementBlock112 } from \"vue\";\nvar _sfc_main112 = /* @__PURE__ */ _defineComponent112({\n  name: \"FolderRemove\",\n  __name: \"folder-remove\",\n  setup(__props) {\n    return (_ctx, _cache) => (_openBlock112(), _createElementBlock112(\"svg\", {\n      xmlns: \"http://www.w3.org/2000/svg\",\n      viewBox: \"0 0 1024 1024\"\n    }, [\n      _createElementVNode112(\"path\", {\n        fill: \"currentColor\",\n        d: \"M128 192v640h768V320H485.76L357.504 192zm-32-64h287.872l128.384 128H928a32 32 0 0 1 32 32v576a32 32 0 0 1-32 32H96a32 32 0 0 1-32-32V160a32 32 0 0 1 32-32m256 416h320v64H352z\"\n      })\n    ]));\n  }\n}), folder_remove_default = _sfc_main112;\n\n// src/components/folder.vue\nimport { defineComponent as _defineComponent113 } from \"vue\";\nimport { createElementVNode as _createElementVNode113, openBlock as _openBlock113, createElementBlock as _createElementBlock113 } from \"vue\";\nvar _sfc_main113 = /* @__PURE__ */ _defineComponent113({\n  name: \"Folder\",\n  __name: \"folder\",\n  setup(__props) {\n    return (_ctx, _cache) => (_openBlock113(), _createElementBlock113(\"svg\", {\n      xmlns: \"http://www.w3.org/2000/svg\",\n      viewBox: \"0 0 1024 1024\"\n    }, [\n      _createElementVNode113(\"path\", {\n        fill: \"currentColor\",\n        d: \"M128 192v640h768V320H485.76L357.504 192zm-32-64h287.872l128.384 128H928a32 32 0 0 1 32 32v576a32 32 0 0 1-32 32H96a32 32 0 0 1-32-32V160a32 32 0 0 1 32-32\"\n      })\n    ]));\n  }\n}), folder_default = _sfc_main113;\n\n// src/components/food.vue\nimport { defineComponent as _defineComponent114 } from \"vue\";\nimport { createElementVNode as _createElementVNode114, openBlock as _openBlock114, createElementBlock as _createElementBlock114 } from \"vue\";\nvar _sfc_main114 = /* @__PURE__ */ _defineComponent114({\n  name: \"Food\",\n  __name: \"food\",\n  setup(__props) {\n    return (_ctx, _cache) => (_openBlock114(), _createElementBlock114(\"svg\", {\n      xmlns: \"http://www.w3.org/2000/svg\",\n      viewBox: \"0 0 1024 1024\"\n    }, [\n      _createElementVNode114(\"path\", {\n        fill: \"currentColor\",\n        d: \"M128 352.576V352a288 288 0 0 1 491.072-204.224 192 192 0 0 1 274.24 204.48 64 64 0 0 1 57.216 74.24C921.6 600.512 850.048 710.656 736 756.992V800a96 96 0 0 1-96 96H384a96 96 0 0 1-96-96v-43.008c-114.048-46.336-185.6-156.48-214.528-330.496A64 64 0 0 1 128 352.64zm64-.576h64a160 160 0 0 1 320 0h64a224 224 0 0 0-448 0m128 0h192a96 96 0 0 0-192 0m439.424 0h68.544A128.256 128.256 0 0 0 704 192c-15.36 0-29.952 2.688-43.52 7.616 11.328 18.176 20.672 37.76 27.84 58.304A64.128 64.128 0 0 1 759.424 352M672 768H352v32a32 32 0 0 0 32 32h256a32 32 0 0 0 32-32zm-342.528-64h365.056c101.504-32.64 165.76-124.928 192.896-288H136.576c27.136 163.072 91.392 255.36 192.896 288\"\n      })\n    ]));\n  }\n}), food_default = _sfc_main114;\n\n// src/components/football.vue\nimport { defineComponent as _defineComponent115 } from \"vue\";\nimport { createElementVNode as _createElementVNode115, openBlock as _openBlock115, createElementBlock as _createElementBlock115 } from \"vue\";\nvar _sfc_main115 = /* @__PURE__ */ _defineComponent115({\n  name: \"Football\",\n  __name: \"football\",\n  setup(__props) {\n    return (_ctx, _cache) => (_openBlock115(), _createElementBlock115(\"svg\", {\n      xmlns: \"http://www.w3.org/2000/svg\",\n      viewBox: \"0 0 1024 1024\"\n    }, [\n      _createElementVNode115(\"path\", {\n        fill: \"currentColor\",\n        d: \"M512 960a448 448 0 1 1 0-896 448 448 0 0 1 0 896m0-64a384 384 0 1 0 0-768 384 384 0 0 0 0 768\"\n      }),\n      _createElementVNode115(\"path\", {\n        fill: \"currentColor\",\n        d: \"M186.816 268.288c16-16.384 31.616-31.744 46.976-46.08 17.472 30.656 39.808 58.112 65.984 81.28l-32.512 56.448a386 386 0 0 1-80.448-91.648m653.696-5.312a385.9 385.9 0 0 1-83.776 96.96l-32.512-56.384a322.9 322.9 0 0 0 68.48-85.76c15.552 14.08 31.488 29.12 47.808 45.184M465.984 445.248l11.136-63.104a323.6 323.6 0 0 0 69.76 0l11.136 63.104a388 388 0 0 1-92.032 0m-62.72-12.8A381.8 381.8 0 0 1 320 396.544l32-55.424a320 320 0 0 0 62.464 27.712l-11.2 63.488zm300.8-35.84a381.8 381.8 0 0 1-83.328 35.84l-11.2-63.552A320 320 0 0 0 672 341.184l32 55.424zm-520.768 364.8a385.9 385.9 0 0 1 83.968-97.28l32.512 56.32c-26.88 23.936-49.856 52.352-67.52 84.032-16-13.44-32.32-27.712-48.96-43.072m657.536.128a1443 1443 0 0 1-49.024 43.072 321.4 321.4 0 0 0-67.584-84.16l32.512-56.32c33.216 27.456 61.696 60.352 84.096 97.408M465.92 578.752a388 388 0 0 1 92.032 0l-11.136 63.104a323.6 323.6 0 0 0-69.76 0zm-62.72 12.8 11.2 63.552a320 320 0 0 0-62.464 27.712L320 627.392a381.8 381.8 0 0 1 83.264-35.84zm300.8 35.84-32 55.424a318.3 318.3 0 0 0-62.528-27.712l11.2-63.488c29.44 8.64 57.28 20.736 83.264 35.776z\"\n      })\n    ]));\n  }\n}), football_default = _sfc_main115;\n\n// src/components/fork-spoon.vue\nimport { defineComponent as _defineComponent116 } from \"vue\";\nimport { createElementVNode as _createElementVNode116, openBlock as _openBlock116, createElementBlock as _createElementBlock116 } from \"vue\";\nvar _sfc_main116 = /* @__PURE__ */ _defineComponent116({\n  name: \"ForkSpoon\",\n  __name: \"fork-spoon\",\n  setup(__props) {\n    return (_ctx, _cache) => (_openBlock116(), _createElementBlock116(\"svg\", {\n      xmlns: \"http://www.w3.org/2000/svg\",\n      viewBox: \"0 0 1024 1024\"\n    }, [\n      _createElementVNode116(\"path\", {\n        fill: \"currentColor\",\n        d: \"M256 410.304V96a32 32 0 0 1 64 0v314.304a96 96 0 0 0 64-90.56V96a32 32 0 0 1 64 0v223.744a160 160 0 0 1-128 156.8V928a32 32 0 1 1-64 0V476.544a160 160 0 0 1-128-156.8V96a32 32 0 0 1 64 0v223.744a96 96 0 0 0 64 90.56M672 572.48C581.184 552.128 512 446.848 512 320c0-141.44 85.952-256 192-256s192 114.56 192 256c0 126.848-69.184 232.128-160 252.48V928a32 32 0 1 1-64 0zM704 512c66.048 0 128-82.56 128-192s-61.952-192-128-192-128 82.56-128 192 61.952 192 128 192\"\n      })\n    ]));\n  }\n}), fork_spoon_default = _sfc_main116;\n\n// src/components/fries.vue\nimport { defineComponent as _defineComponent117 } from \"vue\";\nimport { createElementVNode as _createElementVNode117, openBlock as _openBlock117, createElementBlock as _createElementBlock117 } from \"vue\";\nvar _sfc_main117 = /* @__PURE__ */ _defineComponent117({\n  name: \"Fries\",\n  __name: \"fries\",\n  setup(__props) {\n    return (_ctx, _cache) => (_openBlock117(), _createElementBlock117(\"svg\", {\n      xmlns: \"http://www.w3.org/2000/svg\",\n      viewBox: \"0 0 1024 1024\"\n    }, [\n      _createElementVNode117(\"path\", {\n        fill: \"currentColor\",\n        d: \"M608 224v-64a32 32 0 0 0-64 0v336h26.88A64 64 0 0 0 608 484.096zm101.12 160A64 64 0 0 0 672 395.904V384h64V224a32 32 0 1 0-64 0v160zm74.88 0a92.928 92.928 0 0 1 91.328 110.08l-60.672 323.584A96 96 0 0 1 720.32 896H303.68a96 96 0 0 1-94.336-78.336L148.672 494.08A92.928 92.928 0 0 1 240 384h-16V224a96 96 0 0 1 188.608-25.28A95.74 95.74 0 0 1 480 197.44V160a96 96 0 0 1 188.608-25.28A96 96 0 0 1 800 224v160zM670.784 512a128 128 0 0 1-99.904 48H453.12a128 128 0 0 1-99.84-48H352v-1.536a128 128 0 0 1-9.984-14.976L314.88 448H240a28.928 28.928 0 0 0-28.48 34.304L241.088 640h541.824l29.568-157.696A28.928 28.928 0 0 0 784 448h-74.88l-27.136 47.488A132 132 0 0 1 672 510.464V512zM480 288a32 32 0 0 0-64 0v196.096A64 64 0 0 0 453.12 496H480zm-128 96V224a32 32 0 0 0-64 0v160zh-37.12A64 64 0 0 1 352 395.904zm-98.88 320 19.072 101.888A32 32 0 0 0 303.68 832h416.64a32 32 0 0 0 31.488-26.112L770.88 704z\"\n      })\n    ]));\n  }\n}), fries_default = _sfc_main117;\n\n// src/components/full-screen.vue\nimport { defineComponent as _defineComponent118 } from \"vue\";\nimport { createElementVNode as _createElementVNode118, openBlock as _openBlock118, createElementBlock as _createElementBlock118 } from \"vue\";\nvar _sfc_main118 = /* @__PURE__ */ _defineComponent118({\n  name: \"FullScreen\",\n  __name: \"full-screen\",\n  setup(__props) {\n    return (_ctx, _cache) => (_openBlock118(), _createElementBlock118(\"svg\", {\n      xmlns: \"http://www.w3.org/2000/svg\",\n      viewBox: \"0 0 1024 1024\"\n    }, [\n      _createElementVNode118(\"path\", {\n        fill: \"currentColor\",\n        d: \"m160 96.064 192 .192a32 32 0 0 1 0 64l-192-.192V352a32 32 0 0 1-64 0V96h64zm0 831.872V928H96V672a32 32 0 1 1 64 0v191.936l192-.192a32 32 0 1 1 0 64zM864 96.064V96h64v256a32 32 0 1 1-64 0V160.064l-192 .192a32 32 0 1 1 0-64zm0 831.872-192-.192a32 32 0 0 1 0-64l192 .192V672a32 32 0 1 1 64 0v256h-64z\"\n      })\n    ]));\n  }\n}), full_screen_default = _sfc_main118;\n\n// src/components/goblet-full.vue\nimport { defineComponent as _defineComponent119 } from \"vue\";\nimport { createElementVNode as _createElementVNode119, openBlock as _openBlock119, createElementBlock as _createElementBlock119 } from \"vue\";\nvar _sfc_main119 = /* @__PURE__ */ _defineComponent119({\n  name: \"GobletFull\",\n  __name: \"goblet-full\",\n  setup(__props) {\n    return (_ctx, _cache) => (_openBlock119(), _createElementBlock119(\"svg\", {\n      xmlns: \"http://www.w3.org/2000/svg\",\n      viewBox: \"0 0 1024 1024\"\n    }, [\n      _createElementVNode119(\"path\", {\n        fill: \"currentColor\",\n        d: \"M256 320h512c0-78.592-12.608-142.4-36.928-192h-434.24C269.504 192.384 256 256.256 256 320m503.936 64H264.064a256.128 256.128 0 0 0 495.872 0M544 638.4V896h96a32 32 0 1 1 0 64H384a32 32 0 1 1 0-64h96V638.4A320 320 0 0 1 192 320c0-85.632 21.312-170.944 64-256h512c42.688 64.32 64 149.632 64 256a320 320 0 0 1-288 318.4\"\n      })\n    ]));\n  }\n}), goblet_full_default = _sfc_main119;\n\n// src/components/goblet-square-full.vue\nimport { defineComponent as _defineComponent120 } from \"vue\";\nimport { createElementVNode as _createElementVNode120, openBlock as _openBlock120, createElementBlock as _createElementBlock120 } from \"vue\";\nvar _sfc_main120 = /* @__PURE__ */ _defineComponent120({\n  name: \"GobletSquareFull\",\n  __name: \"goblet-square-full\",\n  setup(__props) {\n    return (_ctx, _cache) => (_openBlock120(), _createElementBlock120(\"svg\", {\n      xmlns: \"http://www.w3.org/2000/svg\",\n      viewBox: \"0 0 1024 1024\"\n    }, [\n      _createElementVNode120(\"path\", {\n        fill: \"currentColor\",\n        d: \"M256 270.912c10.048 6.72 22.464 14.912 28.992 18.624a220.16 220.16 0 0 0 114.752 30.72c30.592 0 49.408-9.472 91.072-41.152l.64-.448c52.928-40.32 82.368-55.04 132.288-54.656 55.552.448 99.584 20.8 142.72 57.408l1.536 1.28V128H256zm.96 76.288C266.368 482.176 346.88 575.872 512 576c157.44.064 237.952-85.056 253.248-209.984a952 952 0 0 1-40.192-35.712c-32.704-27.776-63.36-41.92-101.888-42.24-31.552-.256-50.624 9.28-93.12 41.6l-.576.448c-52.096 39.616-81.024 54.208-129.792 54.208-54.784 0-100.48-13.376-142.784-37.056zM480 638.848C250.624 623.424 192 442.496 192 319.68V96a32 32 0 0 1 32-32h576a32 32 0 0 1 32 32v224c0 122.816-58.624 303.68-288 318.912V896h96a32 32 0 1 1 0 64H384a32 32 0 1 1 0-64h96z\"\n      })\n    ]));\n  }\n}), goblet_square_full_default = _sfc_main120;\n\n// src/components/goblet-square.vue\nimport { defineComponent as _defineComponent121 } from \"vue\";\nimport { createElementVNode as _createElementVNode121, openBlock as _openBlock121, createElementBlock as _createElementBlock121 } from \"vue\";\nvar _sfc_main121 = /* @__PURE__ */ _defineComponent121({\n  name: \"GobletSquare\",\n  __name: \"goblet-square\",\n  setup(__props) {\n    return (_ctx, _cache) => (_openBlock121(), _createElementBlock121(\"svg\", {\n      xmlns: \"http://www.w3.org/2000/svg\",\n      viewBox: \"0 0 1024 1024\"\n    }, [\n      _createElementVNode121(\"path\", {\n        fill: \"currentColor\",\n        d: \"M544 638.912V896h96a32 32 0 1 1 0 64H384a32 32 0 1 1 0-64h96V638.848C250.624 623.424 192 442.496 192 319.68V96a32 32 0 0 1 32-32h576a32 32 0 0 1 32 32v224c0 122.816-58.624 303.68-288 318.912M256 319.68c0 149.568 80 256.192 256 256.256C688.128 576 768 469.568 768 320V128H256z\"\n      })\n    ]));\n  }\n}), goblet_square_default = _sfc_main121;\n\n// src/components/goblet.vue\nimport { defineComponent as _defineComponent122 } from \"vue\";\nimport { createElementVNode as _createElementVNode122, openBlock as _openBlock122, createElementBlock as _createElementBlock122 } from \"vue\";\nvar _sfc_main122 = /* @__PURE__ */ _defineComponent122({\n  name: \"Goblet\",\n  __name: \"goblet\",\n  setup(__props) {\n    return (_ctx, _cache) => (_openBlock122(), _createElementBlock122(\"svg\", {\n      xmlns: \"http://www.w3.org/2000/svg\",\n      viewBox: \"0 0 1024 1024\"\n    }, [\n      _createElementVNode122(\"path\", {\n        fill: \"currentColor\",\n        d: \"M544 638.4V896h96a32 32 0 1 1 0 64H384a32 32 0 1 1 0-64h96V638.4A320 320 0 0 1 192 320c0-85.632 21.312-170.944 64-256h512c42.688 64.32 64 149.632 64 256a320 320 0 0 1-288 318.4M256 320a256 256 0 1 0 512 0c0-78.592-12.608-142.4-36.928-192h-434.24C269.504 192.384 256 256.256 256 320\"\n      })\n    ]));\n  }\n}), goblet_default = _sfc_main122;\n\n// src/components/gold-medal.vue\nimport { defineComponent as _defineComponent123 } from \"vue\";\nimport { createElementVNode as _createElementVNode123, openBlock as _openBlock123, createElementBlock as _createElementBlock123 } from \"vue\";\nvar _sfc_main123 = /* @__PURE__ */ _defineComponent123({\n  name: \"GoldMedal\",\n  __name: \"gold-medal\",\n  setup(__props) {\n    return (_ctx, _cache) => (_openBlock123(), _createElementBlock123(\"svg\", {\n      xmlns: \"http://www.w3.org/2000/svg\",\n      \"xml:space\": \"preserve\",\n      viewBox: \"0 0 1024 1024\"\n    }, [\n      _createElementVNode123(\"path\", {\n        fill: \"currentColor\",\n        d: \"m772.13 452.84 53.86-351.81c1.32-10.01-1.17-18.68-7.49-26.02S804.35 64 795.01 64H228.99v-.01h-.06c-9.33 0-17.15 3.67-23.49 11.01s-8.83 16.01-7.49 26.02l53.87 351.89C213.54 505.73 193.59 568.09 192 640c2 90.67 33.17 166.17 93.5 226.5S421.33 957.99 512 960c90.67-2 166.17-33.17 226.5-93.5 60.33-60.34 91.49-135.83 93.5-226.5-1.59-71.94-21.56-134.32-59.87-187.16M640.01 128h117.02l-39.01 254.02c-20.75-10.64-40.74-19.73-59.94-27.28-5.92-3-11.95-5.8-18.08-8.41V128zM576 128v198.76c-13.18-2.58-26.74-4.43-40.67-5.55-8.07-.8-15.85-1.2-23.33-1.2-10.54 0-21.09.66-31.64 1.96a360 360 0 0 0-32.36 4.79V128zm-192 0h.04v218.3c-6.22 2.66-12.34 5.5-18.36 8.56-19.13 7.54-39.02 16.6-59.66 27.16L267.01 128zm308.99 692.99c-48 48-108.33 73-180.99 75.01-72.66-2.01-132.99-27.01-180.99-75.01S258.01 712.66 256 640c2.01-72.66 27.01-132.99 75.01-180.99 19.67-19.67 41.41-35.47 65.22-47.41 38.33-15.04 71.15-23.92 98.44-26.65 5.07-.41 10.2-.7 15.39-.88.63-.01 1.28-.03 1.91-.03.66 0 1.35.03 2.02.04 5.11.17 10.15.46 15.13.86 27.4 2.71 60.37 11.65 98.91 26.79 23.71 11.93 45.36 27.69 64.96 47.29 48 48 73 108.33 75.01 180.99-2.01 72.65-27.01 132.98-75.01 180.98\"\n      }),\n      _createElementVNode123(\"path\", {\n        fill: \"currentColor\",\n        d: \"M544 480H416v64h64v192h-64v64h192v-64h-64z\"\n      })\n    ]));\n  }\n}), gold_medal_default = _sfc_main123;\n\n// src/components/goods-filled.vue\nimport { defineComponent as _defineComponent124 } from \"vue\";\nimport { createElementVNode as _createElementVNode124, openBlock as _openBlock124, createElementBlock as _createElementBlock124 } from \"vue\";\nvar _sfc_main124 = /* @__PURE__ */ _defineComponent124({\n  name: \"GoodsFilled\",\n  __name: \"goods-filled\",\n  setup(__props) {\n    return (_ctx, _cache) => (_openBlock124(), _createElementBlock124(\"svg\", {\n      xmlns: \"http://www.w3.org/2000/svg\",\n      viewBox: \"0 0 1024 1024\"\n    }, [\n      _createElementVNode124(\"path\", {\n        fill: \"currentColor\",\n        d: \"M192 352h640l64 544H128zm128 224h64V448h-64zm320 0h64V448h-64zM384 288h-64a192 192 0 1 1 384 0h-64a128 128 0 1 0-256 0\"\n      })\n    ]));\n  }\n}), goods_filled_default = _sfc_main124;\n\n// src/components/goods.vue\nimport { defineComponent as _defineComponent125 } from \"vue\";\nimport { createElementVNode as _createElementVNode125, openBlock as _openBlock125, createElementBlock as _createElementBlock125 } from \"vue\";\nvar _sfc_main125 = /* @__PURE__ */ _defineComponent125({\n  name: \"Goods\",\n  __name: \"goods\",\n  setup(__props) {\n    return (_ctx, _cache) => (_openBlock125(), _createElementBlock125(\"svg\", {\n      xmlns: \"http://www.w3.org/2000/svg\",\n      viewBox: \"0 0 1024 1024\"\n    }, [\n      _createElementVNode125(\"path\", {\n        fill: \"currentColor\",\n        d: \"M320 288v-22.336C320 154.688 405.504 64 512 64s192 90.688 192 201.664v22.4h131.072a32 32 0 0 1 31.808 28.8l57.6 576a32 32 0 0 1-31.808 35.2H131.328a32 32 0 0 1-31.808-35.2l57.6-576a32 32 0 0 1 31.808-28.8H320zm64 0h256v-22.336C640 189.248 582.272 128 512 128s-128 61.248-128 137.664v22.4zm-64 64H217.92l-51.2 512h690.56l-51.264-512H704v96a32 32 0 1 1-64 0v-96H384v96a32 32 0 0 1-64 0z\"\n      })\n    ]));\n  }\n}), goods_default = _sfc_main125;\n\n// src/components/grape.vue\nimport { defineComponent as _defineComponent126 } from \"vue\";\nimport { createElementVNode as _createElementVNode126, openBlock as _openBlock126, createElementBlock as _createElementBlock126 } from \"vue\";\nvar _sfc_main126 = /* @__PURE__ */ _defineComponent126({\n  name: \"Grape\",\n  __name: \"grape\",\n  setup(__props) {\n    return (_ctx, _cache) => (_openBlock126(), _createElementBlock126(\"svg\", {\n      xmlns: \"http://www.w3.org/2000/svg\",\n      viewBox: \"0 0 1024 1024\"\n    }, [\n      _createElementVNode126(\"path\", {\n        fill: \"currentColor\",\n        d: \"M544 195.2a160 160 0 0 1 96 60.8 160 160 0 1 1 146.24 254.976 160 160 0 0 1-128 224 160 160 0 1 1-292.48 0 160 160 0 0 1-128-224A160 160 0 1 1 384 256a160 160 0 0 1 96-60.8V128h-64a32 32 0 0 1 0-64h192a32 32 0 0 1 0 64h-64zM512 448a96 96 0 1 0 0-192 96 96 0 0 0 0 192m-256 0a96 96 0 1 0 0-192 96 96 0 0 0 0 192m128 224a96 96 0 1 0 0-192 96 96 0 0 0 0 192m128 224a96 96 0 1 0 0-192 96 96 0 0 0 0 192m128-224a96 96 0 1 0 0-192 96 96 0 0 0 0 192m128-224a96 96 0 1 0 0-192 96 96 0 0 0 0 192\"\n      })\n    ]));\n  }\n}), grape_default = _sfc_main126;\n\n// src/components/grid.vue\nimport { defineComponent as _defineComponent127 } from \"vue\";\nimport { createElementVNode as _createElementVNode127, openBlock as _openBlock127, createElementBlock as _createElementBlock127 } from \"vue\";\nvar _sfc_main127 = /* @__PURE__ */ _defineComponent127({\n  name: \"Grid\",\n  __name: \"grid\",\n  setup(__props) {\n    return (_ctx, _cache) => (_openBlock127(), _createElementBlock127(\"svg\", {\n      xmlns: \"http://www.w3.org/2000/svg\",\n      viewBox: \"0 0 1024 1024\"\n    }, [\n      _createElementVNode127(\"path\", {\n        fill: \"currentColor\",\n        d: \"M640 384v256H384V384zm64 0h192v256H704zm-64 512H384V704h256zm64 0V704h192v192zm-64-768v192H384V128zm64 0h192v192H704zM320 384v256H128V384zm0 512H128V704h192zm0-768v192H128V128z\"\n      })\n    ]));\n  }\n}), grid_default = _sfc_main127;\n\n// src/components/guide.vue\nimport { defineComponent as _defineComponent128 } from \"vue\";\nimport { createElementVNode as _createElementVNode128, openBlock as _openBlock128, createElementBlock as _createElementBlock128 } from \"vue\";\nvar _sfc_main128 = /* @__PURE__ */ _defineComponent128({\n  name: \"Guide\",\n  __name: \"guide\",\n  setup(__props) {\n    return (_ctx, _cache) => (_openBlock128(), _createElementBlock128(\"svg\", {\n      xmlns: \"http://www.w3.org/2000/svg\",\n      viewBox: \"0 0 1024 1024\"\n    }, [\n      _createElementVNode128(\"path\", {\n        fill: \"currentColor\",\n        d: \"M640 608h-64V416h64zm0 160v160a32 32 0 0 1-32 32H416a32 32 0 0 1-32-32V768h64v128h128V768zM384 608V416h64v192zm256-352h-64V128H448v128h-64V96a32 32 0 0 1 32-32h192a32 32 0 0 1 32 32z\"\n      }),\n      _createElementVNode128(\"path\", {\n        fill: \"currentColor\",\n        d: \"m220.8 256-71.232 80 71.168 80H768V256zm-14.4-64H800a32 32 0 0 1 32 32v224a32 32 0 0 1-32 32H206.4a32 32 0 0 1-23.936-10.752l-99.584-112a32 32 0 0 1 0-42.496l99.584-112A32 32 0 0 1 206.4 192m678.784 496-71.104 80H266.816V608h547.2zm-56.768-144H234.88a32 32 0 0 0-32 32v224a32 32 0 0 0 32 32h593.6a32 32 0 0 0 23.936-10.752l99.584-112a32 32 0 0 0 0-42.496l-99.584-112A32 32 0 0 0 828.48 544z\"\n      })\n    ]));\n  }\n}), guide_default = _sfc_main128;\n\n// src/components/handbag.vue\nimport { defineComponent as _defineComponent129 } from \"vue\";\nimport { createElementVNode as _createElementVNode129, openBlock as _openBlock129, createElementBlock as _createElementBlock129 } from \"vue\";\nvar _sfc_main129 = /* @__PURE__ */ _defineComponent129({\n  name: \"Handbag\",\n  __name: \"handbag\",\n  setup(__props) {\n    return (_ctx, _cache) => (_openBlock129(), _createElementBlock129(\"svg\", {\n      xmlns: \"http://www.w3.org/2000/svg\",\n      \"xml:space\": \"preserve\",\n      viewBox: \"0 0 1024 1024\"\n    }, [\n      _createElementVNode129(\"path\", {\n        fill: \"currentColor\",\n        d: \"M887.01 264.99c-6-5.99-13.67-8.99-23.01-8.99H704c-1.34-54.68-20.01-100.01-56-136s-81.32-54.66-136-56c-54.68 1.34-100.01 20.01-136 56s-54.66 81.32-56 136H160c-9.35 0-17.02 3-23.01 8.99-5.99 6-8.99 13.67-8.99 23.01v640c0 9.35 2.99 17.02 8.99 23.01S150.66 960 160 960h704c9.35 0 17.02-2.99 23.01-8.99S896 937.34 896 928V288c0-9.35-2.99-17.02-8.99-23.01M421.5 165.5c24.32-24.34 54.49-36.84 90.5-37.5 35.99.68 66.16 13.18 90.5 37.5s36.84 54.49 37.5 90.5H384c.68-35.99 13.18-66.16 37.5-90.5M832 896H192V320h128v128h64V320h256v128h64V320h128z\"\n      })\n    ]));\n  }\n}), handbag_default = _sfc_main129;\n\n// src/components/headset.vue\nimport { defineComponent as _defineComponent130 } from \"vue\";\nimport { createElementVNode as _createElementVNode130, openBlock as _openBlock130, createElementBlock as _createElementBlock130 } from \"vue\";\nvar _sfc_main130 = /* @__PURE__ */ _defineComponent130({\n  name: \"Headset\",\n  __name: \"headset\",\n  setup(__props) {\n    return (_ctx, _cache) => (_openBlock130(), _createElementBlock130(\"svg\", {\n      xmlns: \"http://www.w3.org/2000/svg\",\n      viewBox: \"0 0 1024 1024\"\n    }, [\n      _createElementVNode130(\"path\", {\n        fill: \"currentColor\",\n        d: \"M896 529.152V512a384 384 0 1 0-768 0v17.152A128 128 0 0 1 320 640v128a128 128 0 1 1-256 0V512a448 448 0 1 1 896 0v256a128 128 0 1 1-256 0V640a128 128 0 0 1 192-110.848M896 640a64 64 0 0 0-128 0v128a64 64 0 0 0 128 0zm-768 0v128a64 64 0 0 0 128 0V640a64 64 0 1 0-128 0\"\n      })\n    ]));\n  }\n}), headset_default = _sfc_main130;\n\n// src/components/help-filled.vue\nimport { defineComponent as _defineComponent131 } from \"vue\";\nimport { createElementVNode as _createElementVNode131, openBlock as _openBlock131, createElementBlock as _createElementBlock131 } from \"vue\";\nvar _sfc_main131 = /* @__PURE__ */ _defineComponent131({\n  name: \"HelpFilled\",\n  __name: \"help-filled\",\n  setup(__props) {\n    return (_ctx, _cache) => (_openBlock131(), _createElementBlock131(\"svg\", {\n      xmlns: \"http://www.w3.org/2000/svg\",\n      viewBox: \"0 0 1024 1024\"\n    }, [\n      _createElementVNode131(\"path\", {\n        fill: \"currentColor\",\n        d: \"M926.784 480H701.312A192.51 192.51 0 0 0 544 322.688V97.216A416.064 416.064 0 0 1 926.784 480m0 64A416.064 416.064 0 0 1 544 926.784V701.312A192.51 192.51 0 0 0 701.312 544zM97.28 544h225.472A192.51 192.51 0 0 0 480 701.312v225.472A416.064 416.064 0 0 1 97.216 544zm0-64A416.064 416.064 0 0 1 480 97.216v225.472A192.51 192.51 0 0 0 322.688 480H97.216z\"\n      })\n    ]));\n  }\n}), help_filled_default = _sfc_main131;\n\n// src/components/help.vue\nimport { defineComponent as _defineComponent132 } from \"vue\";\nimport { createElementVNode as _createElementVNode132, openBlock as _openBlock132, createElementBlock as _createElementBlock132 } from \"vue\";\nvar _sfc_main132 = /* @__PURE__ */ _defineComponent132({\n  name: \"Help\",\n  __name: \"help\",\n  setup(__props) {\n    return (_ctx, _cache) => (_openBlock132(), _createElementBlock132(\"svg\", {\n      xmlns: \"http://www.w3.org/2000/svg\",\n      viewBox: \"0 0 1024 1024\"\n    }, [\n      _createElementVNode132(\"path\", {\n        fill: \"currentColor\",\n        d: \"m759.936 805.248-90.944-91.008A254.9 254.9 0 0 1 512 768a254.9 254.9 0 0 1-156.992-53.76l-90.944 91.008A382.46 382.46 0 0 0 512 896c94.528 0 181.12-34.176 247.936-90.752m45.312-45.312A382.46 382.46 0 0 0 896 512c0-94.528-34.176-181.12-90.752-247.936l-91.008 90.944C747.904 398.4 768 452.864 768 512s-20.096 113.6-53.76 156.992zm-45.312-541.184A382.46 382.46 0 0 0 512 128c-94.528 0-181.12 34.176-247.936 90.752l90.944 91.008A254.9 254.9 0 0 1 512 256c59.136 0 113.6 20.096 156.992 53.76zm-541.184 45.312A382.46 382.46 0 0 0 128 512c0 94.528 34.176 181.12 90.752 247.936l91.008-90.944A254.9 254.9 0 0 1 256 512c0-59.136 20.096-113.6 53.76-156.992zm417.28 394.496a194.6 194.6 0 0 0 22.528-22.528C686.912 602.56 704 559.232 704 512a191.23 191.23 0 0 0-67.968-146.56A191.3 191.3 0 0 0 512 320a191.23 191.23 0 0 0-146.56 67.968C337.088 421.44 320 464.768 320 512a191.23 191.23 0 0 0 67.968 146.56C421.44 686.912 464.768 704 512 704c47.296 0 90.56-17.088 124.032-45.44M512 960a448 448 0 1 1 0-896 448 448 0 0 1 0 896\"\n      })\n    ]));\n  }\n}), help_default = _sfc_main132;\n\n// src/components/hide.vue\nimport { defineComponent as _defineComponent133 } from \"vue\";\nimport { createElementVNode as _createElementVNode133, openBlock as _openBlock133, createElementBlock as _createElementBlock133 } from \"vue\";\nvar _sfc_main133 = /* @__PURE__ */ _defineComponent133({\n  name: \"Hide\",\n  __name: \"hide\",\n  setup(__props) {\n    return (_ctx, _cache) => (_openBlock133(), _createElementBlock133(\"svg\", {\n      xmlns: \"http://www.w3.org/2000/svg\",\n      viewBox: \"0 0 1024 1024\"\n    }, [\n      _createElementVNode133(\"path\", {\n        fill: \"currentColor\",\n        d: \"M876.8 156.8c0-9.6-3.2-16-9.6-22.4s-12.8-9.6-22.4-9.6-16 3.2-22.4 9.6L736 220.8c-64-32-137.6-51.2-224-60.8-160 16-288 73.6-377.6 176S0 496 0 512s48 73.6 134.4 176c22.4 25.6 44.8 48 73.6 67.2l-86.4 89.6c-6.4 6.4-9.6 12.8-9.6 22.4s3.2 16 9.6 22.4 12.8 9.6 22.4 9.6 16-3.2 22.4-9.6l704-710.4c3.2-6.4 6.4-12.8 6.4-22.4m-646.4 528Q115.2 579.2 76.8 512q43.2-72 153.6-172.8C304 272 400 230.4 512 224c64 3.2 124.8 19.2 176 44.8l-54.4 54.4C598.4 300.8 560 288 512 288c-64 0-115.2 22.4-160 64s-64 96-64 160c0 48 12.8 89.6 35.2 124.8L256 707.2c-9.6-6.4-19.2-16-25.6-22.4m140.8-96Q352 555.2 352 512c0-44.8 16-83.2 48-112s67.2-48 112-48c28.8 0 54.4 6.4 73.6 19.2zM889.599 336c-12.8-16-28.8-28.8-41.6-41.6l-48 48c73.6 67.2 124.8 124.8 150.4 169.6q-43.2 72-153.6 172.8c-73.6 67.2-172.8 108.8-284.8 115.2-51.2-3.2-99.2-12.8-140.8-28.8l-48 48c57.6 22.4 118.4 38.4 188.8 44.8 160-16 288-73.6 377.6-176S1024 528 1024 512s-48.001-73.6-134.401-176\"\n      }),\n      _createElementVNode133(\"path\", {\n        fill: \"currentColor\",\n        d: \"M511.998 672c-12.8 0-25.6-3.2-38.4-6.4l-51.2 51.2c28.8 12.8 57.6 19.2 89.6 19.2 64 0 115.2-22.4 160-64 41.6-41.6 64-96 64-160 0-32-6.4-64-19.2-89.6l-51.2 51.2c3.2 12.8 6.4 25.6 6.4 38.4 0 44.8-16 83.2-48 112s-67.2 48-112 48\"\n      })\n    ]));\n  }\n}), hide_default = _sfc_main133;\n\n// src/components/histogram.vue\nimport { defineComponent as _defineComponent134 } from \"vue\";\nimport { createElementVNode as _createElementVNode134, openBlock as _openBlock134, createElementBlock as _createElementBlock134 } from \"vue\";\nvar _sfc_main134 = /* @__PURE__ */ _defineComponent134({\n  name: \"Histogram\",\n  __name: \"histogram\",\n  setup(__props) {\n    return (_ctx, _cache) => (_openBlock134(), _createElementBlock134(\"svg\", {\n      xmlns: \"http://www.w3.org/2000/svg\",\n      viewBox: \"0 0 1024 1024\"\n    }, [\n      _createElementVNode134(\"path\", {\n        fill: \"currentColor\",\n        d: \"M416 896V128h192v768zm-288 0V448h192v448zm576 0V320h192v576z\"\n      })\n    ]));\n  }\n}), histogram_default = _sfc_main134;\n\n// src/components/home-filled.vue\nimport { defineComponent as _defineComponent135 } from \"vue\";\nimport { createElementVNode as _createElementVNode135, openBlock as _openBlock135, createElementBlock as _createElementBlock135 } from \"vue\";\nvar _sfc_main135 = /* @__PURE__ */ _defineComponent135({\n  name: \"HomeFilled\",\n  __name: \"home-filled\",\n  setup(__props) {\n    return (_ctx, _cache) => (_openBlock135(), _createElementBlock135(\"svg\", {\n      xmlns: \"http://www.w3.org/2000/svg\",\n      viewBox: \"0 0 1024 1024\"\n    }, [\n      _createElementVNode135(\"path\", {\n        fill: \"currentColor\",\n        d: \"M512 128 128 447.936V896h255.936V640H640v256h255.936V447.936z\"\n      })\n    ]));\n  }\n}), home_filled_default = _sfc_main135;\n\n// src/components/hot-water.vue\nimport { defineComponent as _defineComponent136 } from \"vue\";\nimport { createElementVNode as _createElementVNode136, openBlock as _openBlock136, createElementBlock as _createElementBlock136 } from \"vue\";\nvar _sfc_main136 = /* @__PURE__ */ _defineComponent136({\n  name: \"HotWater\",\n  __name: \"hot-water\",\n  setup(__props) {\n    return (_ctx, _cache) => (_openBlock136(), _createElementBlock136(\"svg\", {\n      xmlns: \"http://www.w3.org/2000/svg\",\n      viewBox: \"0 0 1024 1024\"\n    }, [\n      _createElementVNode136(\"path\", {\n        fill: \"currentColor\",\n        d: \"M273.067 477.867h477.866V409.6H273.067zm0 68.266v51.2A187.733 187.733 0 0 0 460.8 785.067h102.4a187.733 187.733 0 0 0 187.733-187.734v-51.2zm-34.134-204.8h546.134a34.133 34.133 0 0 1 34.133 34.134v221.866a256 256 0 0 1-256 256H460.8a256 256 0 0 1-256-256V375.467a34.133 34.133 0 0 1 34.133-34.134M512 34.133a34.133 34.133 0 0 1 34.133 34.134v170.666a34.133 34.133 0 0 1-68.266 0V68.267A34.133 34.133 0 0 1 512 34.133M375.467 102.4a34.133 34.133 0 0 1 34.133 34.133v102.4a34.133 34.133 0 0 1-68.267 0v-102.4a34.133 34.133 0 0 1 34.134-34.133m273.066 0a34.133 34.133 0 0 1 34.134 34.133v102.4a34.133 34.133 0 1 1-68.267 0v-102.4a34.133 34.133 0 0 1 34.133-34.133M170.667 921.668h682.666a34.133 34.133 0 1 1 0 68.267H170.667a34.133 34.133 0 1 1 0-68.267\"\n      })\n    ]));\n  }\n}), hot_water_default = _sfc_main136;\n\n// src/components/house.vue\nimport { defineComponent as _defineComponent137 } from \"vue\";\nimport { createElementVNode as _createElementVNode137, openBlock as _openBlock137, createElementBlock as _createElementBlock137 } from \"vue\";\nvar _sfc_main137 = /* @__PURE__ */ _defineComponent137({\n  name: \"House\",\n  __name: \"house\",\n  setup(__props) {\n    return (_ctx, _cache) => (_openBlock137(), _createElementBlock137(\"svg\", {\n      xmlns: \"http://www.w3.org/2000/svg\",\n      viewBox: \"0 0 1024 1024\"\n    }, [\n      _createElementVNode137(\"path\", {\n        fill: \"currentColor\",\n        d: \"M192 413.952V896h640V413.952L512 147.328zM139.52 374.4l352-293.312a32 32 0 0 1 40.96 0l352 293.312A32 32 0 0 1 896 398.976V928a32 32 0 0 1-32 32H160a32 32 0 0 1-32-32V398.976a32 32 0 0 1 11.52-24.576\"\n      })\n    ]));\n  }\n}), house_default = _sfc_main137;\n\n// src/components/ice-cream-round.vue\nimport { defineComponent as _defineComponent138 } from \"vue\";\nimport { createElementVNode as _createElementVNode138, openBlock as _openBlock138, createElementBlock as _createElementBlock138 } from \"vue\";\nvar _sfc_main138 = /* @__PURE__ */ _defineComponent138({\n  name: \"IceCreamRound\",\n  __name: \"ice-cream-round\",\n  setup(__props) {\n    return (_ctx, _cache) => (_openBlock138(), _createElementBlock138(\"svg\", {\n      xmlns: \"http://www.w3.org/2000/svg\",\n      viewBox: \"0 0 1024 1024\"\n    }, [\n      _createElementVNode138(\"path\", {\n        fill: \"currentColor\",\n        d: \"m308.352 489.344 226.304 226.304a32 32 0 0 0 45.248 0L783.552 512A192 192 0 1 0 512 240.448L308.352 444.16a32 32 0 0 0 0 45.248zm135.744 226.304L308.352 851.392a96 96 0 0 1-135.744-135.744l135.744-135.744-45.248-45.248a96 96 0 0 1 0-135.808L466.752 195.2A256 256 0 0 1 828.8 557.248L625.152 760.96a96 96 0 0 1-135.808 0l-45.248-45.248zM398.848 670.4 353.6 625.152 217.856 760.896a32 32 0 0 0 45.248 45.248zm248.96-384.64a32 32 0 0 1 0 45.248L466.624 512a32 32 0 1 1-45.184-45.248l180.992-181.056a32 32 0 0 1 45.248 0zm90.496 90.496a32 32 0 0 1 0 45.248L557.248 602.496A32 32 0 1 1 512 557.248l180.992-180.992a32 32 0 0 1 45.312 0\"\n      })\n    ]));\n  }\n}), ice_cream_round_default = _sfc_main138;\n\n// src/components/ice-cream-square.vue\nimport { defineComponent as _defineComponent139 } from \"vue\";\nimport { createElementVNode as _createElementVNode139, openBlock as _openBlock139, createElementBlock as _createElementBlock139 } from \"vue\";\nvar _sfc_main139 = /* @__PURE__ */ _defineComponent139({\n  name: \"IceCreamSquare\",\n  __name: \"ice-cream-square\",\n  setup(__props) {\n    return (_ctx, _cache) => (_openBlock139(), _createElementBlock139(\"svg\", {\n      xmlns: \"http://www.w3.org/2000/svg\",\n      viewBox: \"0 0 1024 1024\"\n    }, [\n      _createElementVNode139(\"path\", {\n        fill: \"currentColor\",\n        d: \"M416 640h256a32 32 0 0 0 32-32V160a32 32 0 0 0-32-32H352a32 32 0 0 0-32 32v448a32 32 0 0 0 32 32zm192 64v160a96 96 0 0 1-192 0V704h-64a96 96 0 0 1-96-96V160a96 96 0 0 1 96-96h320a96 96 0 0 1 96 96v448a96 96 0 0 1-96 96zm-64 0h-64v160a32 32 0 1 0 64 0z\"\n      })\n    ]));\n  }\n}), ice_cream_square_default = _sfc_main139;\n\n// src/components/ice-cream.vue\nimport { defineComponent as _defineComponent140 } from \"vue\";\nimport { createElementVNode as _createElementVNode140, openBlock as _openBlock140, createElementBlock as _createElementBlock140 } from \"vue\";\nvar _sfc_main140 = /* @__PURE__ */ _defineComponent140({\n  name: \"IceCream\",\n  __name: \"ice-cream\",\n  setup(__props) {\n    return (_ctx, _cache) => (_openBlock140(), _createElementBlock140(\"svg\", {\n      xmlns: \"http://www.w3.org/2000/svg\",\n      viewBox: \"0 0 1024 1024\"\n    }, [\n      _createElementVNode140(\"path\", {\n        fill: \"currentColor\",\n        d: \"M128.64 448a208 208 0 0 1 193.536-191.552 224 224 0 0 1 445.248 15.488A208.13 208.13 0 0 1 894.784 448H896L548.8 983.68a32 32 0 0 1-53.248.704L128 448zm64.256 0h286.208a144 144 0 0 0-286.208 0m351.36 0h286.272a144 144 0 0 0-286.272 0m-294.848 64 271.808 396.608L778.24 512zM511.68 352.64a207.87 207.87 0 0 1 189.184-96.192 160 160 0 0 0-314.752 5.632c52.608 12.992 97.28 46.08 125.568 90.56\"\n      })\n    ]));\n  }\n}), ice_cream_default = _sfc_main140;\n\n// src/components/ice-drink.vue\nimport { defineComponent as _defineComponent141 } from \"vue\";\nimport { createElementVNode as _createElementVNode141, openBlock as _openBlock141, createElementBlock as _createElementBlock141 } from \"vue\";\nvar _sfc_main141 = /* @__PURE__ */ _defineComponent141({\n  name: \"IceDrink\",\n  __name: \"ice-drink\",\n  setup(__props) {\n    return (_ctx, _cache) => (_openBlock141(), _createElementBlock141(\"svg\", {\n      xmlns: \"http://www.w3.org/2000/svg\",\n      viewBox: \"0 0 1024 1024\"\n    }, [\n      _createElementVNode141(\"path\", {\n        fill: \"currentColor\",\n        d: \"M512 448v128h239.68l16.064-128zm-64 0H256.256l16.064 128H448zm64-255.36V384h247.744A256.13 256.13 0 0 0 512 192.64m-64 8.064A256.45 256.45 0 0 0 264.256 384H448zm64-72.064A320.13 320.13 0 0 1 825.472 384H896a32 32 0 1 1 0 64h-64v1.92l-56.96 454.016A64 64 0 0 1 711.552 960H312.448a64 64 0 0 1-63.488-56.064L192 449.92V448h-64a32 32 0 0 1 0-64h70.528A320.38 320.38 0 0 1 448 135.04V96a96 96 0 0 1 96-96h128a32 32 0 1 1 0 64H544a32 32 0 0 0-32 32zM743.68 640H280.32l32.128 256h399.104z\"\n      })\n    ]));\n  }\n}), ice_drink_default = _sfc_main141;\n\n// src/components/ice-tea.vue\nimport { defineComponent as _defineComponent142 } from \"vue\";\nimport { createElementVNode as _createElementVNode142, openBlock as _openBlock142, createElementBlock as _createElementBlock142 } from \"vue\";\nvar _sfc_main142 = /* @__PURE__ */ _defineComponent142({\n  name: \"IceTea\",\n  __name: \"ice-tea\",\n  setup(__props) {\n    return (_ctx, _cache) => (_openBlock142(), _createElementBlock142(\"svg\", {\n      xmlns: \"http://www.w3.org/2000/svg\",\n      viewBox: \"0 0 1024 1024\"\n    }, [\n      _createElementVNode142(\"path\", {\n        fill: \"currentColor\",\n        d: \"M197.696 259.648a320.128 320.128 0 0 1 628.608 0A96 96 0 0 1 896 352v64a96 96 0 0 1-71.616 92.864l-49.408 395.072A64 64 0 0 1 711.488 960H312.512a64 64 0 0 1-63.488-56.064l-49.408-395.072A96 96 0 0 1 128 416v-64a96 96 0 0 1 69.696-92.352M264.064 256h495.872a256.128 256.128 0 0 0-495.872 0m495.424 256H264.512l48 384h398.976zM224 448h576a32 32 0 0 0 32-32v-64a32 32 0 0 0-32-32H224a32 32 0 0 0-32 32v64a32 32 0 0 0 32 32m160 192h64v64h-64zm192 64h64v64h-64zm-128 64h64v64h-64zm64-192h64v64h-64z\"\n      })\n    ]));\n  }\n}), ice_tea_default = _sfc_main142;\n\n// src/components/info-filled.vue\nimport { defineComponent as _defineComponent143 } from \"vue\";\nimport { createElementVNode as _createElementVNode143, openBlock as _openBlock143, createElementBlock as _createElementBlock143 } from \"vue\";\nvar _sfc_main143 = /* @__PURE__ */ _defineComponent143({\n  name: \"InfoFilled\",\n  __name: \"info-filled\",\n  setup(__props) {\n    return (_ctx, _cache) => (_openBlock143(), _createElementBlock143(\"svg\", {\n      xmlns: \"http://www.w3.org/2000/svg\",\n      viewBox: \"0 0 1024 1024\"\n    }, [\n      _createElementVNode143(\"path\", {\n        fill: \"currentColor\",\n        d: \"M512 64a448 448 0 1 1 0 896.064A448 448 0 0 1 512 64m67.2 275.072c33.28 0 60.288-23.104 60.288-57.344s-27.072-57.344-60.288-57.344c-33.28 0-60.16 23.104-60.16 57.344s26.88 57.344 60.16 57.344M590.912 699.2c0-6.848 2.368-24.64 1.024-34.752l-52.608 60.544c-10.88 11.456-24.512 19.392-30.912 17.28a12.99 12.99 0 0 1-8.256-14.72l87.68-276.992c7.168-35.136-12.544-67.2-54.336-71.296-44.096 0-108.992 44.736-148.48 101.504 0 6.784-1.28 23.68.064 33.792l52.544-60.608c10.88-11.328 23.552-19.328 29.952-17.152a12.8 12.8 0 0 1 7.808 16.128L388.48 728.576c-10.048 32.256 8.96 63.872 55.04 71.04 67.84 0 107.904-43.648 147.456-100.416z\"\n      })\n    ]));\n  }\n}), info_filled_default = _sfc_main143;\n\n// src/components/iphone.vue\nimport { defineComponent as _defineComponent144 } from \"vue\";\nimport { createElementVNode as _createElementVNode144, openBlock as _openBlock144, createElementBlock as _createElementBlock144 } from \"vue\";\nvar _sfc_main144 = /* @__PURE__ */ _defineComponent144({\n  name: \"Iphone\",\n  __name: \"iphone\",\n  setup(__props) {\n    return (_ctx, _cache) => (_openBlock144(), _createElementBlock144(\"svg\", {\n      xmlns: \"http://www.w3.org/2000/svg\",\n      viewBox: \"0 0 1024 1024\"\n    }, [\n      _createElementVNode144(\"path\", {\n        fill: \"currentColor\",\n        d: \"M224 768v96.064a64 64 0 0 0 64 64h448a64 64 0 0 0 64-64V768zm0-64h576V160a64 64 0 0 0-64-64H288a64 64 0 0 0-64 64zm32 288a96 96 0 0 1-96-96V128a96 96 0 0 1 96-96h512a96 96 0 0 1 96 96v768a96 96 0 0 1-96 96zm304-144a48 48 0 1 1-96 0 48 48 0 0 1 96 0\"\n      })\n    ]));\n  }\n}), iphone_default = _sfc_main144;\n\n// src/components/key.vue\nimport { defineComponent as _defineComponent145 } from \"vue\";\nimport { createElementVNode as _createElementVNode145, openBlock as _openBlock145, createElementBlock as _createElementBlock145 } from \"vue\";\nvar _sfc_main145 = /* @__PURE__ */ _defineComponent145({\n  name: \"Key\",\n  __name: \"key\",\n  setup(__props) {\n    return (_ctx, _cache) => (_openBlock145(), _createElementBlock145(\"svg\", {\n      xmlns: \"http://www.w3.org/2000/svg\",\n      viewBox: \"0 0 1024 1024\"\n    }, [\n      _createElementVNode145(\"path\", {\n        fill: \"currentColor\",\n        d: \"M448 456.064V96a32 32 0 0 1 32-32.064L672 64a32 32 0 0 1 0 64H512v128h160a32 32 0 0 1 0 64H512v128a256 256 0 1 1-64 8.064M512 896a192 192 0 1 0 0-384 192 192 0 0 0 0 384\"\n      })\n    ]));\n  }\n}), key_default = _sfc_main145;\n\n// src/components/knife-fork.vue\nimport { defineComponent as _defineComponent146 } from \"vue\";\nimport { createElementVNode as _createElementVNode146, openBlock as _openBlock146, createElementBlock as _createElementBlock146 } from \"vue\";\nvar _sfc_main146 = /* @__PURE__ */ _defineComponent146({\n  name: \"KnifeFork\",\n  __name: \"knife-fork\",\n  setup(__props) {\n    return (_ctx, _cache) => (_openBlock146(), _createElementBlock146(\"svg\", {\n      xmlns: \"http://www.w3.org/2000/svg\",\n      viewBox: \"0 0 1024 1024\"\n    }, [\n      _createElementVNode146(\"path\", {\n        fill: \"currentColor\",\n        d: \"M256 410.56V96a32 32 0 0 1 64 0v314.56A96 96 0 0 0 384 320V96a32 32 0 0 1 64 0v224a160 160 0 0 1-128 156.8V928a32 32 0 1 1-64 0V476.8A160 160 0 0 1 128 320V96a32 32 0 0 1 64 0v224a96 96 0 0 0 64 90.56m384-250.24V544h126.72c-3.328-78.72-12.928-147.968-28.608-207.744-14.336-54.528-46.848-113.344-98.112-175.872zM640 608v320a32 32 0 1 1-64 0V64h64c85.312 89.472 138.688 174.848 160 256s32 177.152 32 288z\"\n      })\n    ]));\n  }\n}), knife_fork_default = _sfc_main146;\n\n// src/components/lightning.vue\nimport { defineComponent as _defineComponent147 } from \"vue\";\nimport { createElementVNode as _createElementVNode147, openBlock as _openBlock147, createElementBlock as _createElementBlock147 } from \"vue\";\nvar _sfc_main147 = /* @__PURE__ */ _defineComponent147({\n  name: \"Lightning\",\n  __name: \"lightning\",\n  setup(__props) {\n    return (_ctx, _cache) => (_openBlock147(), _createElementBlock147(\"svg\", {\n      xmlns: \"http://www.w3.org/2000/svg\",\n      viewBox: \"0 0 1024 1024\"\n    }, [\n      _createElementVNode147(\"path\", {\n        fill: \"currentColor\",\n        d: \"M288 671.36v64.128A239.81 239.81 0 0 1 63.744 496.192a240.32 240.32 0 0 1 199.488-236.8 256.128 256.128 0 0 1 487.872-30.976A256.064 256.064 0 0 1 736 734.016v-64.768a192 192 0 0 0 3.328-377.92l-35.2-6.592-12.8-33.408a192.064 192.064 0 0 0-365.952 23.232l-9.92 40.896-41.472 7.04a176.32 176.32 0 0 0-146.24 173.568c0 91.968 70.464 167.36 160.256 175.232z\"\n      }),\n      _createElementVNode147(\"path\", {\n        fill: \"currentColor\",\n        d: \"M416 736a32 32 0 0 1-27.776-47.872l128-224a32 32 0 1 1 55.552 31.744L471.168 672H608a32 32 0 0 1 27.776 47.872l-128 224a32 32 0 1 1-55.68-31.744L552.96 736z\"\n      })\n    ]));\n  }\n}), lightning_default = _sfc_main147;\n\n// src/components/link.vue\nimport { defineComponent as _defineComponent148 } from \"vue\";\nimport { createElementVNode as _createElementVNode148, openBlock as _openBlock148, createElementBlock as _createElementBlock148 } from \"vue\";\nvar _sfc_main148 = /* @__PURE__ */ _defineComponent148({\n  name: \"Link\",\n  __name: \"link\",\n  setup(__props) {\n    return (_ctx, _cache) => (_openBlock148(), _createElementBlock148(\"svg\", {\n      xmlns: \"http://www.w3.org/2000/svg\",\n      viewBox: \"0 0 1024 1024\"\n    }, [\n      _createElementVNode148(\"path\", {\n        fill: \"currentColor\",\n        d: \"M715.648 625.152 670.4 579.904l90.496-90.56c75.008-74.944 85.12-186.368 22.656-248.896-62.528-62.464-173.952-52.352-248.96 22.656L444.16 353.6l-45.248-45.248 90.496-90.496c100.032-99.968 251.968-110.08 339.456-22.656 87.488 87.488 77.312 239.424-22.656 339.456l-90.496 90.496zm-90.496 90.496-90.496 90.496C434.624 906.112 282.688 916.224 195.2 828.8c-87.488-87.488-77.312-239.424 22.656-339.456l90.496-90.496 45.248 45.248-90.496 90.56c-75.008 74.944-85.12 186.368-22.656 248.896 62.528 62.464 173.952 52.352 248.96-22.656l90.496-90.496zm0-362.048 45.248 45.248L398.848 670.4 353.6 625.152z\"\n      })\n    ]));\n  }\n}), link_default = _sfc_main148;\n\n// src/components/list.vue\nimport { defineComponent as _defineComponent149 } from \"vue\";\nimport { createElementVNode as _createElementVNode149, openBlock as _openBlock149, createElementBlock as _createElementBlock149 } from \"vue\";\nvar _sfc_main149 = /* @__PURE__ */ _defineComponent149({\n  name: \"List\",\n  __name: \"list\",\n  setup(__props) {\n    return (_ctx, _cache) => (_openBlock149(), _createElementBlock149(\"svg\", {\n      xmlns: \"http://www.w3.org/2000/svg\",\n      viewBox: \"0 0 1024 1024\"\n    }, [\n      _createElementVNode149(\"path\", {\n        fill: \"currentColor\",\n        d: \"M704 192h160v736H160V192h160v64h384zM288 512h448v-64H288zm0 256h448v-64H288zm96-576V96h256v96z\"\n      })\n    ]));\n  }\n}), list_default = _sfc_main149;\n\n// src/components/loading.vue\nimport { defineComponent as _defineComponent150 } from \"vue\";\nimport { createElementVNode as _createElementVNode150, openBlock as _openBlock150, createElementBlock as _createElementBlock150 } from \"vue\";\nvar _sfc_main150 = /* @__PURE__ */ _defineComponent150({\n  name: \"Loading\",\n  __name: \"loading\",\n  setup(__props) {\n    return (_ctx, _cache) => (_openBlock150(), _createElementBlock150(\"svg\", {\n      xmlns: \"http://www.w3.org/2000/svg\",\n      viewBox: \"0 0 1024 1024\"\n    }, [\n      _createElementVNode150(\"path\", {\n        fill: \"currentColor\",\n        d: \"M512 64a32 32 0 0 1 32 32v192a32 32 0 0 1-64 0V96a32 32 0 0 1 32-32m0 640a32 32 0 0 1 32 32v192a32 32 0 1 1-64 0V736a32 32 0 0 1 32-32m448-192a32 32 0 0 1-32 32H736a32 32 0 1 1 0-64h192a32 32 0 0 1 32 32m-640 0a32 32 0 0 1-32 32H96a32 32 0 0 1 0-64h192a32 32 0 0 1 32 32M195.2 195.2a32 32 0 0 1 45.248 0L376.32 331.008a32 32 0 0 1-45.248 45.248L195.2 240.448a32 32 0 0 1 0-45.248m452.544 452.544a32 32 0 0 1 45.248 0L828.8 783.552a32 32 0 0 1-45.248 45.248L647.744 692.992a32 32 0 0 1 0-45.248M828.8 195.264a32 32 0 0 1 0 45.184L692.992 376.32a32 32 0 0 1-45.248-45.248l135.808-135.808a32 32 0 0 1 45.248 0m-452.544 452.48a32 32 0 0 1 0 45.248L240.448 828.8a32 32 0 0 1-45.248-45.248l135.808-135.808a32 32 0 0 1 45.248 0\"\n      })\n    ]));\n  }\n}), loading_default = _sfc_main150;\n\n// src/components/location-filled.vue\nimport { defineComponent as _defineComponent151 } from \"vue\";\nimport { createElementVNode as _createElementVNode151, openBlock as _openBlock151, createElementBlock as _createElementBlock151 } from \"vue\";\nvar _sfc_main151 = /* @__PURE__ */ _defineComponent151({\n  name: \"LocationFilled\",\n  __name: \"location-filled\",\n  setup(__props) {\n    return (_ctx, _cache) => (_openBlock151(), _createElementBlock151(\"svg\", {\n      xmlns: \"http://www.w3.org/2000/svg\",\n      viewBox: \"0 0 1024 1024\"\n    }, [\n      _createElementVNode151(\"path\", {\n        fill: \"currentColor\",\n        d: \"M512 928c23.936 0 117.504-68.352 192.064-153.152C803.456 661.888 864 535.808 864 416c0-189.632-155.84-320-352-320S160 226.368 160 416c0 120.32 60.544 246.4 159.936 359.232C394.432 859.84 488 928 512 928m0-435.2a64 64 0 1 0 0-128 64 64 0 0 0 0 128m0 140.8a204.8 204.8 0 1 1 0-409.6 204.8 204.8 0 0 1 0 409.6\"\n      })\n    ]));\n  }\n}), location_filled_default = _sfc_main151;\n\n// src/components/location-information.vue\nimport { defineComponent as _defineComponent152 } from \"vue\";\nimport { createElementVNode as _createElementVNode152, openBlock as _openBlock152, createElementBlock as _createElementBlock152 } from \"vue\";\nvar _sfc_main152 = /* @__PURE__ */ _defineComponent152({\n  name: \"LocationInformation\",\n  __name: \"location-information\",\n  setup(__props) {\n    return (_ctx, _cache) => (_openBlock152(), _createElementBlock152(\"svg\", {\n      xmlns: \"http://www.w3.org/2000/svg\",\n      viewBox: \"0 0 1024 1024\"\n    }, [\n      _createElementVNode152(\"path\", {\n        fill: \"currentColor\",\n        d: \"M288 896h448q32 0 32 32t-32 32H288q-32 0-32-32t32-32\"\n      }),\n      _createElementVNode152(\"path\", {\n        fill: \"currentColor\",\n        d: \"M800 416a288 288 0 1 0-576 0c0 118.144 94.528 272.128 288 456.576C705.472 688.128 800 534.144 800 416M512 960C277.312 746.688 160 565.312 160 416a352 352 0 0 1 704 0c0 149.312-117.312 330.688-352 544\"\n      }),\n      _createElementVNode152(\"path\", {\n        fill: \"currentColor\",\n        d: \"M512 512a96 96 0 1 0 0-192 96 96 0 0 0 0 192m0 64a160 160 0 1 1 0-320 160 160 0 0 1 0 320\"\n      })\n    ]));\n  }\n}), location_information_default = _sfc_main152;\n\n// src/components/location.vue\nimport { defineComponent as _defineComponent153 } from \"vue\";\nimport { createElementVNode as _createElementVNode153, openBlock as _openBlock153, createElementBlock as _createElementBlock153 } from \"vue\";\nvar _sfc_main153 = /* @__PURE__ */ _defineComponent153({\n  name: \"Location\",\n  __name: \"location\",\n  setup(__props) {\n    return (_ctx, _cache) => (_openBlock153(), _createElementBlock153(\"svg\", {\n      xmlns: \"http://www.w3.org/2000/svg\",\n      viewBox: \"0 0 1024 1024\"\n    }, [\n      _createElementVNode153(\"path\", {\n        fill: \"currentColor\",\n        d: \"M800 416a288 288 0 1 0-576 0c0 118.144 94.528 272.128 288 456.576C705.472 688.128 800 534.144 800 416M512 960C277.312 746.688 160 565.312 160 416a352 352 0 0 1 704 0c0 149.312-117.312 330.688-352 544\"\n      }),\n      _createElementVNode153(\"path\", {\n        fill: \"currentColor\",\n        d: \"M512 512a96 96 0 1 0 0-192 96 96 0 0 0 0 192m0 64a160 160 0 1 1 0-320 160 160 0 0 1 0 320\"\n      })\n    ]));\n  }\n}), location_default = _sfc_main153;\n\n// src/components/lock.vue\nimport { defineComponent as _defineComponent154 } from \"vue\";\nimport { createElementVNode as _createElementVNode154, openBlock as _openBlock154, createElementBlock as _createElementBlock154 } from \"vue\";\nvar _sfc_main154 = /* @__PURE__ */ _defineComponent154({\n  name: \"Lock\",\n  __name: \"lock\",\n  setup(__props) {\n    return (_ctx, _cache) => (_openBlock154(), _createElementBlock154(\"svg\", {\n      xmlns: \"http://www.w3.org/2000/svg\",\n      viewBox: \"0 0 1024 1024\"\n    }, [\n      _createElementVNode154(\"path\", {\n        fill: \"currentColor\",\n        d: \"M224 448a32 32 0 0 0-32 32v384a32 32 0 0 0 32 32h576a32 32 0 0 0 32-32V480a32 32 0 0 0-32-32zm0-64h576a96 96 0 0 1 96 96v384a96 96 0 0 1-96 96H224a96 96 0 0 1-96-96V480a96 96 0 0 1 96-96\"\n      }),\n      _createElementVNode154(\"path\", {\n        fill: \"currentColor\",\n        d: \"M512 544a32 32 0 0 1 32 32v192a32 32 0 1 1-64 0V576a32 32 0 0 1 32-32m192-160v-64a192 192 0 1 0-384 0v64zM512 64a256 256 0 0 1 256 256v128H256V320A256 256 0 0 1 512 64\"\n      })\n    ]));\n  }\n}), lock_default = _sfc_main154;\n\n// src/components/lollipop.vue\nimport { defineComponent as _defineComponent155 } from \"vue\";\nimport { createElementVNode as _createElementVNode155, openBlock as _openBlock155, createElementBlock as _createElementBlock155 } from \"vue\";\nvar _sfc_main155 = /* @__PURE__ */ _defineComponent155({\n  name: \"Lollipop\",\n  __name: \"lollipop\",\n  setup(__props) {\n    return (_ctx, _cache) => (_openBlock155(), _createElementBlock155(\"svg\", {\n      xmlns: \"http://www.w3.org/2000/svg\",\n      viewBox: \"0 0 1024 1024\"\n    }, [\n      _createElementVNode155(\"path\", {\n        fill: \"currentColor\",\n        d: \"M513.28 448a64 64 0 1 1 76.544 49.728A96 96 0 0 0 768 448h64a160 160 0 0 1-320 0zm-126.976-29.696a256 256 0 1 0 43.52-180.48A256 256 0 0 1 832 448h-64a192 192 0 0 0-381.696-29.696m105.664 249.472L285.696 874.048a96 96 0 0 1-135.68-135.744l206.208-206.272a320 320 0 1 1 135.744 135.744m-54.464-36.032a322 322 0 0 1-45.248-45.248L195.2 783.552a32 32 0 1 0 45.248 45.248l197.056-197.12z\"\n      })\n    ]));\n  }\n}), lollipop_default = _sfc_main155;\n\n// src/components/magic-stick.vue\nimport { defineComponent as _defineComponent156 } from \"vue\";\nimport { createElementVNode as _createElementVNode156, openBlock as _openBlock156, createElementBlock as _createElementBlock156 } from \"vue\";\nvar _sfc_main156 = /* @__PURE__ */ _defineComponent156({\n  name: \"MagicStick\",\n  __name: \"magic-stick\",\n  setup(__props) {\n    return (_ctx, _cache) => (_openBlock156(), _createElementBlock156(\"svg\", {\n      xmlns: \"http://www.w3.org/2000/svg\",\n      viewBox: \"0 0 1024 1024\"\n    }, [\n      _createElementVNode156(\"path\", {\n        fill: \"currentColor\",\n        d: \"M512 64h64v192h-64zm0 576h64v192h-64zM160 480v-64h192v64zm576 0v-64h192v64zM249.856 199.04l45.248-45.184L430.848 289.6 385.6 334.848 249.856 199.104zM657.152 606.4l45.248-45.248 135.744 135.744-45.248 45.248zM114.048 923.2 68.8 877.952l316.8-316.8 45.248 45.248zM702.4 334.848 657.152 289.6l135.744-135.744 45.248 45.248z\"\n      })\n    ]));\n  }\n}), magic_stick_default = _sfc_main156;\n\n// src/components/magnet.vue\nimport { defineComponent as _defineComponent157 } from \"vue\";\nimport { createElementVNode as _createElementVNode157, openBlock as _openBlock157, createElementBlock as _createElementBlock157 } from \"vue\";\nvar _sfc_main157 = /* @__PURE__ */ _defineComponent157({\n  name: \"Magnet\",\n  __name: \"magnet\",\n  setup(__props) {\n    return (_ctx, _cache) => (_openBlock157(), _createElementBlock157(\"svg\", {\n      xmlns: \"http://www.w3.org/2000/svg\",\n      viewBox: \"0 0 1024 1024\"\n    }, [\n      _createElementVNode157(\"path\", {\n        fill: \"currentColor\",\n        d: \"M832 320V192H704v320a192 192 0 1 1-384 0V192H192v128h128v64H192v128a320 320 0 0 0 640 0V384H704v-64zM640 512V128h256v384a384 384 0 1 1-768 0V128h256v384a128 128 0 1 0 256 0\"\n      })\n    ]));\n  }\n}), magnet_default = _sfc_main157;\n\n// src/components/male.vue\nimport { defineComponent as _defineComponent158 } from \"vue\";\nimport { createElementVNode as _createElementVNode158, openBlock as _openBlock158, createElementBlock as _createElementBlock158 } from \"vue\";\nvar _sfc_main158 = /* @__PURE__ */ _defineComponent158({\n  name: \"Male\",\n  __name: \"male\",\n  setup(__props) {\n    return (_ctx, _cache) => (_openBlock158(), _createElementBlock158(\"svg\", {\n      xmlns: \"http://www.w3.org/2000/svg\",\n      viewBox: \"0 0 1024 1024\"\n    }, [\n      _createElementVNode158(\"path\", {\n        fill: \"currentColor\",\n        d: \"M399.5 849.5a225 225 0 1 0 0-450 225 225 0 0 0 0 450m0 56.25a281.25 281.25 0 1 1 0-562.5 281.25 281.25 0 0 1 0 562.5m253.125-787.5h225q28.125 0 28.125 28.125T877.625 174.5h-225q-28.125 0-28.125-28.125t28.125-28.125\"\n      }),\n      _createElementVNode158(\"path\", {\n        fill: \"currentColor\",\n        d: \"M877.625 118.25q28.125 0 28.125 28.125v225q0 28.125-28.125 28.125T849.5 371.375v-225q0-28.125 28.125-28.125\"\n      }),\n      _createElementVNode158(\"path\", {\n        fill: \"currentColor\",\n        d: \"M604.813 458.9 565.1 419.131l292.613-292.668 39.825 39.824z\"\n      })\n    ]));\n  }\n}), male_default = _sfc_main158;\n\n// src/components/management.vue\nimport { defineComponent as _defineComponent159 } from \"vue\";\nimport { createElementVNode as _createElementVNode159, openBlock as _openBlock159, createElementBlock as _createElementBlock159 } from \"vue\";\nvar _sfc_main159 = /* @__PURE__ */ _defineComponent159({\n  name: \"Management\",\n  __name: \"management\",\n  setup(__props) {\n    return (_ctx, _cache) => (_openBlock159(), _createElementBlock159(\"svg\", {\n      xmlns: \"http://www.w3.org/2000/svg\",\n      viewBox: \"0 0 1024 1024\"\n    }, [\n      _createElementVNode159(\"path\", {\n        fill: \"currentColor\",\n        d: \"M576 128v288l96-96 96 96V128h128v768H320V128zm-448 0h128v768H128z\"\n      })\n    ]));\n  }\n}), management_default = _sfc_main159;\n\n// src/components/map-location.vue\nimport { defineComponent as _defineComponent160 } from \"vue\";\nimport { createElementVNode as _createElementVNode160, openBlock as _openBlock160, createElementBlock as _createElementBlock160 } from \"vue\";\nvar _sfc_main160 = /* @__PURE__ */ _defineComponent160({\n  name: \"MapLocation\",\n  __name: \"map-location\",\n  setup(__props) {\n    return (_ctx, _cache) => (_openBlock160(), _createElementBlock160(\"svg\", {\n      xmlns: \"http://www.w3.org/2000/svg\",\n      viewBox: \"0 0 1024 1024\"\n    }, [\n      _createElementVNode160(\"path\", {\n        fill: \"currentColor\",\n        d: \"M800 416a288 288 0 1 0-576 0c0 118.144 94.528 272.128 288 456.576C705.472 688.128 800 534.144 800 416M512 960C277.312 746.688 160 565.312 160 416a352 352 0 0 1 704 0c0 149.312-117.312 330.688-352 544\"\n      }),\n      _createElementVNode160(\"path\", {\n        fill: \"currentColor\",\n        d: \"M512 448a64 64 0 1 0 0-128 64 64 0 0 0 0 128m0 64a128 128 0 1 1 0-256 128 128 0 0 1 0 256m345.6 192L960 960H672v-64H352v64H64l102.4-256zm-68.928 0H235.328l-76.8 192h706.944z\"\n      })\n    ]));\n  }\n}), map_location_default = _sfc_main160;\n\n// src/components/medal.vue\nimport { defineComponent as _defineComponent161 } from \"vue\";\nimport { createElementVNode as _createElementVNode161, openBlock as _openBlock161, createElementBlock as _createElementBlock161 } from \"vue\";\nvar _sfc_main161 = /* @__PURE__ */ _defineComponent161({\n  name: \"Medal\",\n  __name: \"medal\",\n  setup(__props) {\n    return (_ctx, _cache) => (_openBlock161(), _createElementBlock161(\"svg\", {\n      xmlns: \"http://www.w3.org/2000/svg\",\n      viewBox: \"0 0 1024 1024\"\n    }, [\n      _createElementVNode161(\"path\", {\n        fill: \"currentColor\",\n        d: \"M512 896a256 256 0 1 0 0-512 256 256 0 0 0 0 512m0 64a320 320 0 1 1 0-640 320 320 0 0 1 0 640\"\n      }),\n      _createElementVNode161(\"path\", {\n        fill: \"currentColor\",\n        d: \"M576 128H448v200a286.7 286.7 0 0 1 64-8c19.52 0 40.832 2.688 64 8zm64 0v219.648c24.448 9.088 50.56 20.416 78.4 33.92L757.44 128zm-256 0H266.624l39.04 253.568c27.84-13.504 53.888-24.832 78.336-33.92zM229.312 64h565.376a32 32 0 0 1 31.616 36.864L768 480c-113.792-64-199.104-96-256-96s-142.208 32-256 96l-58.304-379.136A32 32 0 0 1 229.312 64\"\n      })\n    ]));\n  }\n}), medal_default = _sfc_main161;\n\n// src/components/memo.vue\nimport { defineComponent as _defineComponent162 } from \"vue\";\nimport { createElementVNode as _createElementVNode162, openBlock as _openBlock162, createElementBlock as _createElementBlock162 } from \"vue\";\nvar _sfc_main162 = /* @__PURE__ */ _defineComponent162({\n  name: \"Memo\",\n  __name: \"memo\",\n  setup(__props) {\n    return (_ctx, _cache) => (_openBlock162(), _createElementBlock162(\"svg\", {\n      xmlns: \"http://www.w3.org/2000/svg\",\n      \"xml:space\": \"preserve\",\n      viewBox: \"0 0 1024 1024\"\n    }, [\n      _createElementVNode162(\"path\", {\n        fill: \"currentColor\",\n        d: \"M480 320h192c21.33 0 32-10.67 32-32s-10.67-32-32-32H480c-21.33 0-32 10.67-32 32s10.67 32 32 32\"\n      }),\n      _createElementVNode162(\"path\", {\n        fill: \"currentColor\",\n        d: \"M887.01 72.99C881.01 67 873.34 64 864 64H160c-9.35 0-17.02 3-23.01 8.99C131 78.99 128 86.66 128 96v832c0 9.35 2.99 17.02 8.99 23.01S150.66 960 160 960h704c9.35 0 17.02-2.99 23.01-8.99S896 937.34 896 928V96c0-9.35-3-17.02-8.99-23.01M192 896V128h96v768zm640 0H352V128h480z\"\n      }),\n      _createElementVNode162(\"path\", {\n        fill: \"currentColor\",\n        d: \"M480 512h192c21.33 0 32-10.67 32-32s-10.67-32-32-32H480c-21.33 0-32 10.67-32 32s10.67 32 32 32m0 192h192c21.33 0 32-10.67 32-32s-10.67-32-32-32H480c-21.33 0-32 10.67-32 32s10.67 32 32 32\"\n      })\n    ]));\n  }\n}), memo_default = _sfc_main162;\n\n// src/components/menu.vue\nimport { defineComponent as _defineComponent163 } from \"vue\";\nimport { createElementVNode as _createElementVNode163, openBlock as _openBlock163, createElementBlock as _createElementBlock163 } from \"vue\";\nvar _sfc_main163 = /* @__PURE__ */ _defineComponent163({\n  name: \"Menu\",\n  __name: \"menu\",\n  setup(__props) {\n    return (_ctx, _cache) => (_openBlock163(), _createElementBlock163(\"svg\", {\n      xmlns: \"http://www.w3.org/2000/svg\",\n      viewBox: \"0 0 1024 1024\"\n    }, [\n      _createElementVNode163(\"path\", {\n        fill: \"currentColor\",\n        d: \"M160 448a32 32 0 0 1-32-32V160.064a32 32 0 0 1 32-32h256a32 32 0 0 1 32 32V416a32 32 0 0 1-32 32zm448 0a32 32 0 0 1-32-32V160.064a32 32 0 0 1 32-32h255.936a32 32 0 0 1 32 32V416a32 32 0 0 1-32 32zM160 896a32 32 0 0 1-32-32V608a32 32 0 0 1 32-32h256a32 32 0 0 1 32 32v256a32 32 0 0 1-32 32zm448 0a32 32 0 0 1-32-32V608a32 32 0 0 1 32-32h255.936a32 32 0 0 1 32 32v256a32 32 0 0 1-32 32z\"\n      })\n    ]));\n  }\n}), menu_default = _sfc_main163;\n\n// src/components/message-box.vue\nimport { defineComponent as _defineComponent164 } from \"vue\";\nimport { createElementVNode as _createElementVNode164, openBlock as _openBlock164, createElementBlock as _createElementBlock164 } from \"vue\";\nvar _sfc_main164 = /* @__PURE__ */ _defineComponent164({\n  name: \"MessageBox\",\n  __name: \"message-box\",\n  setup(__props) {\n    return (_ctx, _cache) => (_openBlock164(), _createElementBlock164(\"svg\", {\n      xmlns: \"http://www.w3.org/2000/svg\",\n      viewBox: \"0 0 1024 1024\"\n    }, [\n      _createElementVNode164(\"path\", {\n        fill: \"currentColor\",\n        d: \"M288 384h448v64H288zm96-128h256v64H384zM131.456 512H384v128h256V512h252.544L721.856 192H302.144zM896 576H704v128H320V576H128v256h768zM275.776 128h472.448a32 32 0 0 1 28.608 17.664l179.84 359.552A32 32 0 0 1 960 519.552V864a32 32 0 0 1-32 32H96a32 32 0 0 1-32-32V519.552a32 32 0 0 1 3.392-14.336l179.776-359.552A32 32 0 0 1 275.776 128\"\n      })\n    ]));\n  }\n}), message_box_default = _sfc_main164;\n\n// src/components/message.vue\nimport { defineComponent as _defineComponent165 } from \"vue\";\nimport { createElementVNode as _createElementVNode165, openBlock as _openBlock165, createElementBlock as _createElementBlock165 } from \"vue\";\nvar _sfc_main165 = /* @__PURE__ */ _defineComponent165({\n  name: \"Message\",\n  __name: \"message\",\n  setup(__props) {\n    return (_ctx, _cache) => (_openBlock165(), _createElementBlock165(\"svg\", {\n      xmlns: \"http://www.w3.org/2000/svg\",\n      viewBox: \"0 0 1024 1024\"\n    }, [\n      _createElementVNode165(\"path\", {\n        fill: \"currentColor\",\n        d: \"M128 224v512a64 64 0 0 0 64 64h640a64 64 0 0 0 64-64V224zm0-64h768a64 64 0 0 1 64 64v512a128 128 0 0 1-128 128H192A128 128 0 0 1 64 736V224a64 64 0 0 1 64-64\"\n      }),\n      _createElementVNode165(\"path\", {\n        fill: \"currentColor\",\n        d: \"M904 224 656.512 506.88a192 192 0 0 1-289.024 0L120 224zm-698.944 0 210.56 240.704a128 128 0 0 0 192.704 0L818.944 224z\"\n      })\n    ]));\n  }\n}), message_default = _sfc_main165;\n\n// src/components/mic.vue\nimport { defineComponent as _defineComponent166 } from \"vue\";\nimport { createElementVNode as _createElementVNode166, openBlock as _openBlock166, createElementBlock as _createElementBlock166 } from \"vue\";\nvar _sfc_main166 = /* @__PURE__ */ _defineComponent166({\n  name: \"Mic\",\n  __name: \"mic\",\n  setup(__props) {\n    return (_ctx, _cache) => (_openBlock166(), _createElementBlock166(\"svg\", {\n      xmlns: \"http://www.w3.org/2000/svg\",\n      viewBox: \"0 0 1024 1024\"\n    }, [\n      _createElementVNode166(\"path\", {\n        fill: \"currentColor\",\n        d: \"M480 704h160a64 64 0 0 0 64-64v-32h-96a32 32 0 0 1 0-64h96v-96h-96a32 32 0 0 1 0-64h96v-96h-96a32 32 0 0 1 0-64h96v-32a64 64 0 0 0-64-64H384a64 64 0 0 0-64 64v32h96a32 32 0 0 1 0 64h-96v96h96a32 32 0 0 1 0 64h-96v96h96a32 32 0 0 1 0 64h-96v32a64 64 0 0 0 64 64zm64 64v128h192a32 32 0 1 1 0 64H288a32 32 0 1 1 0-64h192V768h-96a128 128 0 0 1-128-128V192A128 128 0 0 1 384 64h256a128 128 0 0 1 128 128v448a128 128 0 0 1-128 128z\"\n      })\n    ]));\n  }\n}), mic_default = _sfc_main166;\n\n// src/components/microphone.vue\nimport { defineComponent as _defineComponent167 } from \"vue\";\nimport { createElementVNode as _createElementVNode167, openBlock as _openBlock167, createElementBlock as _createElementBlock167 } from \"vue\";\nvar _sfc_main167 = /* @__PURE__ */ _defineComponent167({\n  name: \"Microphone\",\n  __name: \"microphone\",\n  setup(__props) {\n    return (_ctx, _cache) => (_openBlock167(), _createElementBlock167(\"svg\", {\n      xmlns: \"http://www.w3.org/2000/svg\",\n      viewBox: \"0 0 1024 1024\"\n    }, [\n      _createElementVNode167(\"path\", {\n        fill: \"currentColor\",\n        d: \"M512 128a128 128 0 0 0-128 128v256a128 128 0 1 0 256 0V256a128 128 0 0 0-128-128m0-64a192 192 0 0 1 192 192v256a192 192 0 1 1-384 0V256A192 192 0 0 1 512 64m-32 832v-64a288 288 0 0 1-288-288v-32a32 32 0 0 1 64 0v32a224 224 0 0 0 224 224h64a224 224 0 0 0 224-224v-32a32 32 0 1 1 64 0v32a288 288 0 0 1-288 288v64h64a32 32 0 1 1 0 64H416a32 32 0 1 1 0-64z\"\n      })\n    ]));\n  }\n}), microphone_default = _sfc_main167;\n\n// src/components/milk-tea.vue\nimport { defineComponent as _defineComponent168 } from \"vue\";\nimport { createElementVNode as _createElementVNode168, openBlock as _openBlock168, createElementBlock as _createElementBlock168 } from \"vue\";\nvar _sfc_main168 = /* @__PURE__ */ _defineComponent168({\n  name: \"MilkTea\",\n  __name: \"milk-tea\",\n  setup(__props) {\n    return (_ctx, _cache) => (_openBlock168(), _createElementBlock168(\"svg\", {\n      xmlns: \"http://www.w3.org/2000/svg\",\n      viewBox: \"0 0 1024 1024\"\n    }, [\n      _createElementVNode168(\"path\", {\n        fill: \"currentColor\",\n        d: \"M416 128V96a96 96 0 0 1 96-96h128a32 32 0 1 1 0 64H512a32 32 0 0 0-32 32v32h320a96 96 0 0 1 11.712 191.296l-39.68 581.056A64 64 0 0 1 708.224 960H315.776a64 64 0 0 1-63.872-59.648l-39.616-581.056A96 96 0 0 1 224 128zM276.48 320l39.296 576h392.448l4.8-70.784a224.064 224.064 0 0 1 30.016-439.808L747.52 320zM224 256h576a32 32 0 1 0 0-64H224a32 32 0 0 0 0 64m493.44 503.872 21.12-309.12a160 160 0 0 0-21.12 309.12\"\n      })\n    ]));\n  }\n}), milk_tea_default = _sfc_main168;\n\n// src/components/minus.vue\nimport { defineComponent as _defineComponent169 } from \"vue\";\nimport { createElementVNode as _createElementVNode169, openBlock as _openBlock169, createElementBlock as _createElementBlock169 } from \"vue\";\nvar _sfc_main169 = /* @__PURE__ */ _defineComponent169({\n  name: \"Minus\",\n  __name: \"minus\",\n  setup(__props) {\n    return (_ctx, _cache) => (_openBlock169(), _createElementBlock169(\"svg\", {\n      xmlns: \"http://www.w3.org/2000/svg\",\n      viewBox: \"0 0 1024 1024\"\n    }, [\n      _createElementVNode169(\"path\", {\n        fill: \"currentColor\",\n        d: \"M128 544h768a32 32 0 1 0 0-64H128a32 32 0 0 0 0 64\"\n      })\n    ]));\n  }\n}), minus_default = _sfc_main169;\n\n// src/components/money.vue\nimport { defineComponent as _defineComponent170 } from \"vue\";\nimport { createElementVNode as _createElementVNode170, openBlock as _openBlock170, createElementBlock as _createElementBlock170 } from \"vue\";\nvar _sfc_main170 = /* @__PURE__ */ _defineComponent170({\n  name: \"Money\",\n  __name: \"money\",\n  setup(__props) {\n    return (_ctx, _cache) => (_openBlock170(), _createElementBlock170(\"svg\", {\n      xmlns: \"http://www.w3.org/2000/svg\",\n      viewBox: \"0 0 1024 1024\"\n    }, [\n      _createElementVNode170(\"path\", {\n        fill: \"currentColor\",\n        d: \"M256 640v192h640V384H768v-64h150.976c14.272 0 19.456 1.472 24.64 4.288a29.06 29.06 0 0 1 12.16 12.096c2.752 5.184 4.224 10.368 4.224 24.64v493.952c0 14.272-1.472 19.456-4.288 24.64a29.06 29.06 0 0 1-12.096 12.16c-5.184 2.752-10.368 4.224-24.64 4.224H233.024c-14.272 0-19.456-1.472-24.64-4.288a29.06 29.06 0 0 1-12.16-12.096c-2.688-5.184-4.224-10.368-4.224-24.576V640z\"\n      }),\n      _createElementVNode170(\"path\", {\n        fill: \"currentColor\",\n        d: \"M768 192H128v448h640zm64-22.976v493.952c0 14.272-1.472 19.456-4.288 24.64a29.06 29.06 0 0 1-12.096 12.16c-5.184 2.752-10.368 4.224-24.64 4.224H105.024c-14.272 0-19.456-1.472-24.64-4.288a29.06 29.06 0 0 1-12.16-12.096C65.536 682.432 64 677.248 64 663.04V169.024c0-14.272 1.472-19.456 4.288-24.64a29.06 29.06 0 0 1 12.096-12.16C85.568 129.536 90.752 128 104.96 128h685.952c14.272 0 19.456 1.472 24.64 4.288a29.06 29.06 0 0 1 12.16 12.096c2.752 5.184 4.224 10.368 4.224 24.64z\"\n      }),\n      _createElementVNode170(\"path\", {\n        fill: \"currentColor\",\n        d: \"M448 576a160 160 0 1 1 0-320 160 160 0 0 1 0 320m0-64a96 96 0 1 0 0-192 96 96 0 0 0 0 192\"\n      })\n    ]));\n  }\n}), money_default = _sfc_main170;\n\n// src/components/monitor.vue\nimport { defineComponent as _defineComponent171 } from \"vue\";\nimport { createElementVNode as _createElementVNode171, openBlock as _openBlock171, createElementBlock as _createElementBlock171 } from \"vue\";\nvar _sfc_main171 = /* @__PURE__ */ _defineComponent171({\n  name: \"Monitor\",\n  __name: \"monitor\",\n  setup(__props) {\n    return (_ctx, _cache) => (_openBlock171(), _createElementBlock171(\"svg\", {\n      xmlns: \"http://www.w3.org/2000/svg\",\n      viewBox: \"0 0 1024 1024\"\n    }, [\n      _createElementVNode171(\"path\", {\n        fill: \"currentColor\",\n        d: \"M544 768v128h192a32 32 0 1 1 0 64H288a32 32 0 1 1 0-64h192V768H192A128 128 0 0 1 64 640V256a128 128 0 0 1 128-128h640a128 128 0 0 1 128 128v384a128 128 0 0 1-128 128zM192 192a64 64 0 0 0-64 64v384a64 64 0 0 0 64 64h640a64 64 0 0 0 64-64V256a64 64 0 0 0-64-64z\"\n      })\n    ]));\n  }\n}), monitor_default = _sfc_main171;\n\n// src/components/moon-night.vue\nimport { defineComponent as _defineComponent172 } from \"vue\";\nimport { createElementVNode as _createElementVNode172, openBlock as _openBlock172, createElementBlock as _createElementBlock172 } from \"vue\";\nvar _sfc_main172 = /* @__PURE__ */ _defineComponent172({\n  name: \"MoonNight\",\n  __name: \"moon-night\",\n  setup(__props) {\n    return (_ctx, _cache) => (_openBlock172(), _createElementBlock172(\"svg\", {\n      xmlns: \"http://www.w3.org/2000/svg\",\n      viewBox: \"0 0 1024 1024\"\n    }, [\n      _createElementVNode172(\"path\", {\n        fill: \"currentColor\",\n        d: \"M384 512a448 448 0 0 1 215.872-383.296A384 384 0 0 0 213.76 640h188.8A448.3 448.3 0 0 1 384 512M171.136 704a448 448 0 0 1 636.992-575.296A384 384 0 0 0 499.328 704h-328.32z\"\n      }),\n      _createElementVNode172(\"path\", {\n        fill: \"currentColor\",\n        d: \"M32 640h960q32 0 32 32t-32 32H32q-32 0-32-32t32-32m128 128h384a32 32 0 1 1 0 64H160a32 32 0 1 1 0-64m160 127.68 224 .256a32 32 0 0 1 32 32V928a32 32 0 0 1-32 32l-224-.384a32 32 0 0 1-32-32v-.064a32 32 0 0 1 32-32z\"\n      })\n    ]));\n  }\n}), moon_night_default = _sfc_main172;\n\n// src/components/moon.vue\nimport { defineComponent as _defineComponent173 } from \"vue\";\nimport { createElementVNode as _createElementVNode173, openBlock as _openBlock173, createElementBlock as _createElementBlock173 } from \"vue\";\nvar _sfc_main173 = /* @__PURE__ */ _defineComponent173({\n  name: \"Moon\",\n  __name: \"moon\",\n  setup(__props) {\n    return (_ctx, _cache) => (_openBlock173(), _createElementBlock173(\"svg\", {\n      xmlns: \"http://www.w3.org/2000/svg\",\n      viewBox: \"0 0 1024 1024\"\n    }, [\n      _createElementVNode173(\"path\", {\n        fill: \"currentColor\",\n        d: \"M240.448 240.448a384 384 0 1 0 559.424 525.696 448 448 0 0 1-542.016-542.08 391 391 0 0 0-17.408 16.384m181.056 362.048a384 384 0 0 0 525.632 16.384A448 448 0 1 1 405.056 76.8a384 384 0 0 0 16.448 525.696\"\n      })\n    ]));\n  }\n}), moon_default = _sfc_main173;\n\n// src/components/more-filled.vue\nimport { defineComponent as _defineComponent174 } from \"vue\";\nimport { createElementVNode as _createElementVNode174, openBlock as _openBlock174, createElementBlock as _createElementBlock174 } from \"vue\";\nvar _sfc_main174 = /* @__PURE__ */ _defineComponent174({\n  name: \"MoreFilled\",\n  __name: \"more-filled\",\n  setup(__props) {\n    return (_ctx, _cache) => (_openBlock174(), _createElementBlock174(\"svg\", {\n      xmlns: \"http://www.w3.org/2000/svg\",\n      viewBox: \"0 0 1024 1024\"\n    }, [\n      _createElementVNode174(\"path\", {\n        fill: \"currentColor\",\n        d: \"M176 416a112 112 0 1 1 0 224 112 112 0 0 1 0-224m336 0a112 112 0 1 1 0 224 112 112 0 0 1 0-224m336 0a112 112 0 1 1 0 224 112 112 0 0 1 0-224\"\n      })\n    ]));\n  }\n}), more_filled_default = _sfc_main174;\n\n// src/components/more.vue\nimport { defineComponent as _defineComponent175 } from \"vue\";\nimport { createElementVNode as _createElementVNode175, openBlock as _openBlock175, createElementBlock as _createElementBlock175 } from \"vue\";\nvar _sfc_main175 = /* @__PURE__ */ _defineComponent175({\n  name: \"More\",\n  __name: \"more\",\n  setup(__props) {\n    return (_ctx, _cache) => (_openBlock175(), _createElementBlock175(\"svg\", {\n      xmlns: \"http://www.w3.org/2000/svg\",\n      viewBox: \"0 0 1024 1024\"\n    }, [\n      _createElementVNode175(\"path\", {\n        fill: \"currentColor\",\n        d: \"M176 416a112 112 0 1 0 0 224 112 112 0 0 0 0-224m0 64a48 48 0 1 1 0 96 48 48 0 0 1 0-96m336-64a112 112 0 1 1 0 224 112 112 0 0 1 0-224m0 64a48 48 0 1 0 0 96 48 48 0 0 0 0-96m336-64a112 112 0 1 1 0 224 112 112 0 0 1 0-224m0 64a48 48 0 1 0 0 96 48 48 0 0 0 0-96\"\n      })\n    ]));\n  }\n}), more_default = _sfc_main175;\n\n// src/components/mostly-cloudy.vue\nimport { defineComponent as _defineComponent176 } from \"vue\";\nimport { createElementVNode as _createElementVNode176, openBlock as _openBlock176, createElementBlock as _createElementBlock176 } from \"vue\";\nvar _sfc_main176 = /* @__PURE__ */ _defineComponent176({\n  name: \"MostlyCloudy\",\n  __name: \"mostly-cloudy\",\n  setup(__props) {\n    return (_ctx, _cache) => (_openBlock176(), _createElementBlock176(\"svg\", {\n      xmlns: \"http://www.w3.org/2000/svg\",\n      viewBox: \"0 0 1024 1024\"\n    }, [\n      _createElementVNode176(\"path\", {\n        fill: \"currentColor\",\n        d: \"M737.216 357.952 704 349.824l-11.776-32a192.064 192.064 0 0 0-367.424 23.04l-8.96 39.04-39.04 8.96A192.064 192.064 0 0 0 320 768h368a207.81 207.81 0 0 0 207.808-208 208.32 208.32 0 0 0-158.592-202.048m15.168-62.208A272.32 272.32 0 0 1 959.744 560a271.81 271.81 0 0 1-271.552 272H320a256 256 0 0 1-57.536-505.536 256.128 256.128 0 0 1 489.92-30.72\"\n      })\n    ]));\n  }\n}), mostly_cloudy_default = _sfc_main176;\n\n// src/components/mouse.vue\nimport { defineComponent as _defineComponent177 } from \"vue\";\nimport { createElementVNode as _createElementVNode177, openBlock as _openBlock177, createElementBlock as _createElementBlock177 } from \"vue\";\nvar _sfc_main177 = /* @__PURE__ */ _defineComponent177({\n  name: \"Mouse\",\n  __name: \"mouse\",\n  setup(__props) {\n    return (_ctx, _cache) => (_openBlock177(), _createElementBlock177(\"svg\", {\n      xmlns: \"http://www.w3.org/2000/svg\",\n      viewBox: \"0 0 1024 1024\"\n    }, [\n      _createElementVNode177(\"path\", {\n        fill: \"currentColor\",\n        d: \"M438.144 256c-68.352 0-92.736 4.672-117.76 18.112q-30.144 16.128-46.272 46.272C260.672 345.408 256 369.792 256 438.144v275.712c0 68.352 4.672 92.736 18.112 117.76q16.128 30.144 46.272 46.272C345.408 891.328 369.792 896 438.144 896h147.712c68.352 0 92.736-4.672 117.76-18.112q30.144-16.128 46.272-46.272C763.328 806.592 768 782.208 768 713.856V438.144c0-68.352-4.672-92.736-18.112-117.76a110.46 110.46 0 0 0-46.272-46.272C678.592 260.672 654.208 256 585.856 256zm0-64h147.712c85.568 0 116.608 8.96 147.904 25.6 31.36 16.768 55.872 41.344 72.576 72.64C823.104 321.536 832 352.576 832 438.08v275.84c0 85.504-8.96 116.544-25.6 147.84a174.46 174.46 0 0 1-72.64 72.576C702.464 951.104 671.424 960 585.92 960H438.08c-85.504 0-116.544-8.96-147.84-25.6a174.46 174.46 0 0 1-72.64-72.704c-16.768-31.296-25.664-62.336-25.664-147.84v-275.84c0-85.504 8.96-116.544 25.6-147.84a174.46 174.46 0 0 1 72.768-72.576c31.232-16.704 62.272-25.6 147.776-25.6z\"\n      }),\n      _createElementVNode177(\"path\", {\n        fill: \"currentColor\",\n        d: \"M512 320q32 0 32 32v128q0 32-32 32t-32-32V352q0-32 32-32m32-96a32 32 0 0 1-64 0v-64a32 32 0 0 0-32-32h-96a32 32 0 0 1 0-64h96a96 96 0 0 1 96 96z\"\n      })\n    ]));\n  }\n}), mouse_default = _sfc_main177;\n\n// src/components/mug.vue\nimport { defineComponent as _defineComponent178 } from \"vue\";\nimport { createElementVNode as _createElementVNode178, openBlock as _openBlock178, createElementBlock as _createElementBlock178 } from \"vue\";\nvar _sfc_main178 = /* @__PURE__ */ _defineComponent178({\n  name: \"Mug\",\n  __name: \"mug\",\n  setup(__props) {\n    return (_ctx, _cache) => (_openBlock178(), _createElementBlock178(\"svg\", {\n      xmlns: \"http://www.w3.org/2000/svg\",\n      viewBox: \"0 0 1024 1024\"\n    }, [\n      _createElementVNode178(\"path\", {\n        fill: \"currentColor\",\n        d: \"M736 800V160H160v640a64 64 0 0 0 64 64h448a64 64 0 0 0 64-64m64-544h63.552a96 96 0 0 1 96 96v224a96 96 0 0 1-96 96H800v128a128 128 0 0 1-128 128H224A128 128 0 0 1 96 800V128a32 32 0 0 1 32-32h640a32 32 0 0 1 32 32zm0 64v288h63.552a32 32 0 0 0 32-32V352a32 32 0 0 0-32-32z\"\n      })\n    ]));\n  }\n}), mug_default = _sfc_main178;\n\n// src/components/mute-notification.vue\nimport { defineComponent as _defineComponent179 } from \"vue\";\nimport { createElementVNode as _createElementVNode179, openBlock as _openBlock179, createElementBlock as _createElementBlock179 } from \"vue\";\nvar _sfc_main179 = /* @__PURE__ */ _defineComponent179({\n  name: \"MuteNotification\",\n  __name: \"mute-notification\",\n  setup(__props) {\n    return (_ctx, _cache) => (_openBlock179(), _createElementBlock179(\"svg\", {\n      xmlns: \"http://www.w3.org/2000/svg\",\n      viewBox: \"0 0 1024 1024\"\n    }, [\n      _createElementVNode179(\"path\", {\n        fill: \"currentColor\",\n        d: \"m241.216 832 63.616-64H768V448c0-42.368-10.24-82.304-28.48-117.504l46.912-47.232C815.36 331.392 832 387.84 832 448v320h96a32 32 0 1 1 0 64zm-90.24 0H96a32 32 0 1 1 0-64h96V448a320.13 320.13 0 0 1 256-313.6V128a64 64 0 1 1 128 0v6.4a319.55 319.55 0 0 1 171.648 97.088l-45.184 45.44A256 256 0 0 0 256 448v278.336L151.04 832zM448 896h128a64 64 0 0 1-128 0\"\n      }),\n      _createElementVNode179(\"path\", {\n        fill: \"currentColor\",\n        d: \"M150.72 859.072a32 32 0 0 1-45.44-45.056l704-708.544a32 32 0 0 1 45.44 45.056z\"\n      })\n    ]));\n  }\n}), mute_notification_default = _sfc_main179;\n\n// src/components/mute.vue\nimport { defineComponent as _defineComponent180 } from \"vue\";\nimport { createElementVNode as _createElementVNode180, openBlock as _openBlock180, createElementBlock as _createElementBlock180 } from \"vue\";\nvar _sfc_main180 = /* @__PURE__ */ _defineComponent180({\n  name: \"Mute\",\n  __name: \"mute\",\n  setup(__props) {\n    return (_ctx, _cache) => (_openBlock180(), _createElementBlock180(\"svg\", {\n      xmlns: \"http://www.w3.org/2000/svg\",\n      viewBox: \"0 0 1024 1024\"\n    }, [\n      _createElementVNode180(\"path\", {\n        fill: \"currentColor\",\n        d: \"m412.16 592.128-45.44 45.44A191.23 191.23 0 0 1 320 512V256a192 192 0 1 1 384 0v44.352l-64 64V256a128 128 0 1 0-256 0v256c0 30.336 10.56 58.24 28.16 80.128m51.968 38.592A128 128 0 0 0 640 512v-57.152l64-64V512a192 192 0 0 1-287.68 166.528zM314.88 779.968l46.144-46.08A223 223 0 0 0 480 768h64a224 224 0 0 0 224-224v-32a32 32 0 1 1 64 0v32a288 288 0 0 1-288 288v64h64a32 32 0 1 1 0 64H416a32 32 0 1 1 0-64h64v-64c-61.44 0-118.4-19.2-165.12-52.032M266.752 737.6A286.98 286.98 0 0 1 192 544v-32a32 32 0 0 1 64 0v32c0 56.832 21.184 108.8 56.064 148.288z\"\n      }),\n      _createElementVNode180(\"path\", {\n        fill: \"currentColor\",\n        d: \"M150.72 859.072a32 32 0 0 1-45.44-45.056l704-708.544a32 32 0 0 1 45.44 45.056z\"\n      })\n    ]));\n  }\n}), mute_default = _sfc_main180;\n\n// src/components/no-smoking.vue\nimport { defineComponent as _defineComponent181 } from \"vue\";\nimport { createElementVNode as _createElementVNode181, openBlock as _openBlock181, createElementBlock as _createElementBlock181 } from \"vue\";\nvar _sfc_main181 = /* @__PURE__ */ _defineComponent181({\n  name: \"NoSmoking\",\n  __name: \"no-smoking\",\n  setup(__props) {\n    return (_ctx, _cache) => (_openBlock181(), _createElementBlock181(\"svg\", {\n      xmlns: \"http://www.w3.org/2000/svg\",\n      viewBox: \"0 0 1024 1024\"\n    }, [\n      _createElementVNode181(\"path\", {\n        fill: \"currentColor\",\n        d: \"M440.256 576H256v128h56.256l-64 64H224a32 32 0 0 1-32-32V544a32 32 0 0 1 32-32h280.256zm143.488 128H704V583.744L775.744 512H928a32 32 0 0 1 32 32v192a32 32 0 0 1-32 32H519.744zM768 576v128h128V576zm-29.696-207.552 45.248 45.248-497.856 497.856-45.248-45.248zM256 64h64v320h-64zM128 192h64v192h-64zM64 512h64v256H64z\"\n      })\n    ]));\n  }\n}), no_smoking_default = _sfc_main181;\n\n// src/components/notebook.vue\nimport { defineComponent as _defineComponent182 } from \"vue\";\nimport { createElementVNode as _createElementVNode182, openBlock as _openBlock182, createElementBlock as _createElementBlock182 } from \"vue\";\nvar _sfc_main182 = /* @__PURE__ */ _defineComponent182({\n  name: \"Notebook\",\n  __name: \"notebook\",\n  setup(__props) {\n    return (_ctx, _cache) => (_openBlock182(), _createElementBlock182(\"svg\", {\n      xmlns: \"http://www.w3.org/2000/svg\",\n      viewBox: \"0 0 1024 1024\"\n    }, [\n      _createElementVNode182(\"path\", {\n        fill: \"currentColor\",\n        d: \"M192 128v768h640V128zm-32-64h704a32 32 0 0 1 32 32v832a32 32 0 0 1-32 32H160a32 32 0 0 1-32-32V96a32 32 0 0 1 32-32\"\n      }),\n      _createElementVNode182(\"path\", {\n        fill: \"currentColor\",\n        d: \"M672 128h64v768h-64zM96 192h128q32 0 32 32t-32 32H96q-32 0-32-32t32-32m0 192h128q32 0 32 32t-32 32H96q-32 0-32-32t32-32m0 192h128q32 0 32 32t-32 32H96q-32 0-32-32t32-32m0 192h128q32 0 32 32t-32 32H96q-32 0-32-32t32-32\"\n      })\n    ]));\n  }\n}), notebook_default = _sfc_main182;\n\n// src/components/notification.vue\nimport { defineComponent as _defineComponent183 } from \"vue\";\nimport { createElementVNode as _createElementVNode183, openBlock as _openBlock183, createElementBlock as _createElementBlock183 } from \"vue\";\nvar _sfc_main183 = /* @__PURE__ */ _defineComponent183({\n  name: \"Notification\",\n  __name: \"notification\",\n  setup(__props) {\n    return (_ctx, _cache) => (_openBlock183(), _createElementBlock183(\"svg\", {\n      xmlns: \"http://www.w3.org/2000/svg\",\n      viewBox: \"0 0 1024 1024\"\n    }, [\n      _createElementVNode183(\"path\", {\n        fill: \"currentColor\",\n        d: \"M512 128v64H256a64 64 0 0 0-64 64v512a64 64 0 0 0 64 64h512a64 64 0 0 0 64-64V512h64v256a128 128 0 0 1-128 128H256a128 128 0 0 1-128-128V256a128 128 0 0 1 128-128z\"\n      }),\n      _createElementVNode183(\"path\", {\n        fill: \"currentColor\",\n        d: \"M768 384a128 128 0 1 0 0-256 128 128 0 0 0 0 256m0 64a192 192 0 1 1 0-384 192 192 0 0 1 0 384\"\n      })\n    ]));\n  }\n}), notification_default = _sfc_main183;\n\n// src/components/odometer.vue\nimport { defineComponent as _defineComponent184 } from \"vue\";\nimport { createElementVNode as _createElementVNode184, openBlock as _openBlock184, createElementBlock as _createElementBlock184 } from \"vue\";\nvar _sfc_main184 = /* @__PURE__ */ _defineComponent184({\n  name: \"Odometer\",\n  __name: \"odometer\",\n  setup(__props) {\n    return (_ctx, _cache) => (_openBlock184(), _createElementBlock184(\"svg\", {\n      xmlns: \"http://www.w3.org/2000/svg\",\n      viewBox: \"0 0 1024 1024\"\n    }, [\n      _createElementVNode184(\"path\", {\n        fill: \"currentColor\",\n        d: \"M512 896a384 384 0 1 0 0-768 384 384 0 0 0 0 768m0 64a448 448 0 1 1 0-896 448 448 0 0 1 0 896\"\n      }),\n      _createElementVNode184(\"path\", {\n        fill: \"currentColor\",\n        d: \"M192 512a320 320 0 1 1 640 0 32 32 0 1 1-64 0 256 256 0 1 0-512 0 32 32 0 0 1-64 0\"\n      }),\n      _createElementVNode184(\"path\", {\n        fill: \"currentColor\",\n        d: \"M570.432 627.84A96 96 0 1 1 509.568 608l60.992-187.776A32 32 0 1 1 631.424 440l-60.992 187.776zM502.08 734.464a32 32 0 1 0 19.84-60.928 32 32 0 0 0-19.84 60.928\"\n      })\n    ]));\n  }\n}), odometer_default = _sfc_main184;\n\n// src/components/office-building.vue\nimport { defineComponent as _defineComponent185 } from \"vue\";\nimport { createElementVNode as _createElementVNode185, openBlock as _openBlock185, createElementBlock as _createElementBlock185 } from \"vue\";\nvar _sfc_main185 = /* @__PURE__ */ _defineComponent185({\n  name: \"OfficeBuilding\",\n  __name: \"office-building\",\n  setup(__props) {\n    return (_ctx, _cache) => (_openBlock185(), _createElementBlock185(\"svg\", {\n      xmlns: \"http://www.w3.org/2000/svg\",\n      viewBox: \"0 0 1024 1024\"\n    }, [\n      _createElementVNode185(\"path\", {\n        fill: \"currentColor\",\n        d: \"M192 128v704h384V128zm-32-64h448a32 32 0 0 1 32 32v768a32 32 0 0 1-32 32H160a32 32 0 0 1-32-32V96a32 32 0 0 1 32-32\"\n      }),\n      _createElementVNode185(\"path\", {\n        fill: \"currentColor\",\n        d: \"M256 256h256v64H256zm0 192h256v64H256zm0 192h256v64H256zm384-128h128v64H640zm0 128h128v64H640zM64 832h896v64H64z\"\n      }),\n      _createElementVNode185(\"path\", {\n        fill: \"currentColor\",\n        d: \"M640 384v448h192V384zm-32-64h256a32 32 0 0 1 32 32v512a32 32 0 0 1-32 32H608a32 32 0 0 1-32-32V352a32 32 0 0 1 32-32\"\n      })\n    ]));\n  }\n}), office_building_default = _sfc_main185;\n\n// src/components/open.vue\nimport { defineComponent as _defineComponent186 } from \"vue\";\nimport { createElementVNode as _createElementVNode186, openBlock as _openBlock186, createElementBlock as _createElementBlock186 } from \"vue\";\nvar _sfc_main186 = /* @__PURE__ */ _defineComponent186({\n  name: \"Open\",\n  __name: \"open\",\n  setup(__props) {\n    return (_ctx, _cache) => (_openBlock186(), _createElementBlock186(\"svg\", {\n      xmlns: \"http://www.w3.org/2000/svg\",\n      viewBox: \"0 0 1024 1024\"\n    }, [\n      _createElementVNode186(\"path\", {\n        fill: \"currentColor\",\n        d: \"M329.956 257.138a254.862 254.862 0 0 0 0 509.724h364.088a254.862 254.862 0 0 0 0-509.724zm0-72.818h364.088a327.68 327.68 0 1 1 0 655.36H329.956a327.68 327.68 0 1 1 0-655.36\"\n      }),\n      _createElementVNode186(\"path\", {\n        fill: \"currentColor\",\n        d: \"M694.044 621.227a109.227 109.227 0 1 0 0-218.454 109.227 109.227 0 0 0 0 218.454m0 72.817a182.044 182.044 0 1 1 0-364.088 182.044 182.044 0 0 1 0 364.088\"\n      })\n    ]));\n  }\n}), open_default = _sfc_main186;\n\n// src/components/operation.vue\nimport { defineComponent as _defineComponent187 } from \"vue\";\nimport { createElementVNode as _createElementVNode187, openBlock as _openBlock187, createElementBlock as _createElementBlock187 } from \"vue\";\nvar _sfc_main187 = /* @__PURE__ */ _defineComponent187({\n  name: \"Operation\",\n  __name: \"operation\",\n  setup(__props) {\n    return (_ctx, _cache) => (_openBlock187(), _createElementBlock187(\"svg\", {\n      xmlns: \"http://www.w3.org/2000/svg\",\n      viewBox: \"0 0 1024 1024\"\n    }, [\n      _createElementVNode187(\"path\", {\n        fill: \"currentColor\",\n        d: \"M389.44 768a96.064 96.064 0 0 1 181.12 0H896v64H570.56a96.064 96.064 0 0 1-181.12 0H128v-64zm192-288a96.064 96.064 0 0 1 181.12 0H896v64H762.56a96.064 96.064 0 0 1-181.12 0H128v-64zm-320-288a96.064 96.064 0 0 1 181.12 0H896v64H442.56a96.064 96.064 0 0 1-181.12 0H128v-64z\"\n      })\n    ]));\n  }\n}), operation_default = _sfc_main187;\n\n// src/components/opportunity.vue\nimport { defineComponent as _defineComponent188 } from \"vue\";\nimport { createElementVNode as _createElementVNode188, openBlock as _openBlock188, createElementBlock as _createElementBlock188 } from \"vue\";\nvar _sfc_main188 = /* @__PURE__ */ _defineComponent188({\n  name: \"Opportunity\",\n  __name: \"opportunity\",\n  setup(__props) {\n    return (_ctx, _cache) => (_openBlock188(), _createElementBlock188(\"svg\", {\n      xmlns: \"http://www.w3.org/2000/svg\",\n      viewBox: \"0 0 1024 1024\"\n    }, [\n      _createElementVNode188(\"path\", {\n        fill: \"currentColor\",\n        d: \"M384 960v-64h192.064v64zm448-544a350.66 350.66 0 0 1-128.32 271.424C665.344 719.04 640 763.776 640 813.504V832H320v-14.336c0-48-19.392-95.36-57.216-124.992a351.55 351.55 0 0 1-128.448-344.256c25.344-136.448 133.888-248.128 269.76-276.48A352.384 352.384 0 0 1 832 416m-544 32c0-132.288 75.904-224 192-224v-64c-154.432 0-256 122.752-256 288z\"\n      })\n    ]));\n  }\n}), opportunity_default = _sfc_main188;\n\n// src/components/orange.vue\nimport { defineComponent as _defineComponent189 } from \"vue\";\nimport { createElementVNode as _createElementVNode189, openBlock as _openBlock189, createElementBlock as _createElementBlock189 } from \"vue\";\nvar _sfc_main189 = /* @__PURE__ */ _defineComponent189({\n  name: \"Orange\",\n  __name: \"orange\",\n  setup(__props) {\n    return (_ctx, _cache) => (_openBlock189(), _createElementBlock189(\"svg\", {\n      xmlns: \"http://www.w3.org/2000/svg\",\n      viewBox: \"0 0 1024 1024\"\n    }, [\n      _createElementVNode189(\"path\", {\n        fill: \"currentColor\",\n        d: \"M544 894.72a382.34 382.34 0 0 0 215.936-89.472L577.024 622.272c-10.24 6.016-21.248 10.688-33.024 13.696v258.688zm261.248-134.784A382.34 382.34 0 0 0 894.656 544H635.968c-3.008 11.776-7.68 22.848-13.696 33.024zM894.656 480a382.34 382.34 0 0 0-89.408-215.936L622.272 446.976c6.016 10.24 10.688 21.248 13.696 33.024zm-134.72-261.248A382.34 382.34 0 0 0 544 129.344v258.688c11.776 3.008 22.848 7.68 33.024 13.696zM480 129.344a382.34 382.34 0 0 0-215.936 89.408l182.912 182.976c10.24-6.016 21.248-10.688 33.024-13.696zm-261.248 134.72A382.34 382.34 0 0 0 129.344 480h258.688c3.008-11.776 7.68-22.848 13.696-33.024zM129.344 544a382.34 382.34 0 0 0 89.408 215.936l182.976-182.912A127.2 127.2 0 0 1 388.032 544zm134.72 261.248A382.34 382.34 0 0 0 480 894.656V635.968a127.2 127.2 0 0 1-33.024-13.696zM512 960a448 448 0 1 1 0-896 448 448 0 0 1 0 896m0-384a64 64 0 1 0 0-128 64 64 0 0 0 0 128\"\n      })\n    ]));\n  }\n}), orange_default = _sfc_main189;\n\n// src/components/paperclip.vue\nimport { defineComponent as _defineComponent190 } from \"vue\";\nimport { createElementVNode as _createElementVNode190, openBlock as _openBlock190, createElementBlock as _createElementBlock190 } from \"vue\";\nvar _sfc_main190 = /* @__PURE__ */ _defineComponent190({\n  name: \"Paperclip\",\n  __name: \"paperclip\",\n  setup(__props) {\n    return (_ctx, _cache) => (_openBlock190(), _createElementBlock190(\"svg\", {\n      xmlns: \"http://www.w3.org/2000/svg\",\n      viewBox: \"0 0 1024 1024\"\n    }, [\n      _createElementVNode190(\"path\", {\n        fill: \"currentColor\",\n        d: \"M602.496 240.448A192 192 0 1 1 874.048 512l-316.8 316.8A256 256 0 0 1 195.2 466.752L602.496 59.456l45.248 45.248L240.448 512A192 192 0 0 0 512 783.552l316.8-316.8a128 128 0 1 0-181.056-181.056L353.6 579.904a32 32 0 1 0 45.248 45.248l294.144-294.144 45.312 45.248L444.096 670.4a96 96 0 1 1-135.744-135.744z\"\n      })\n    ]));\n  }\n}), paperclip_default = _sfc_main190;\n\n// src/components/partly-cloudy.vue\nimport { defineComponent as _defineComponent191 } from \"vue\";\nimport { createElementVNode as _createElementVNode191, openBlock as _openBlock191, createElementBlock as _createElementBlock191 } from \"vue\";\nvar _sfc_main191 = /* @__PURE__ */ _defineComponent191({\n  name: \"PartlyCloudy\",\n  __name: \"partly-cloudy\",\n  setup(__props) {\n    return (_ctx, _cache) => (_openBlock191(), _createElementBlock191(\"svg\", {\n      xmlns: \"http://www.w3.org/2000/svg\",\n      viewBox: \"0 0 1024 1024\"\n    }, [\n      _createElementVNode191(\"path\", {\n        fill: \"currentColor\",\n        d: \"M598.4 895.872H328.192a256 256 0 0 1-34.496-510.528A352 352 0 1 1 598.4 895.872m-271.36-64h272.256a288 288 0 1 0-248.512-417.664L335.04 445.44l-34.816 3.584a192 192 0 0 0 26.88 382.848z\"\n      }),\n      _createElementVNode191(\"path\", {\n        fill: \"currentColor\",\n        d: \"M139.84 501.888a256 256 0 1 1 417.856-277.12c-17.728 2.176-38.208 8.448-61.504 18.816A192 192 0 1 0 189.12 460.48a6004 6004 0 0 0-49.28 41.408\"\n      })\n    ]));\n  }\n}), partly_cloudy_default = _sfc_main191;\n\n// src/components/pear.vue\nimport { defineComponent as _defineComponent192 } from \"vue\";\nimport { createElementVNode as _createElementVNode192, openBlock as _openBlock192, createElementBlock as _createElementBlock192 } from \"vue\";\nvar _sfc_main192 = /* @__PURE__ */ _defineComponent192({\n  name: \"Pear\",\n  __name: \"pear\",\n  setup(__props) {\n    return (_ctx, _cache) => (_openBlock192(), _createElementBlock192(\"svg\", {\n      xmlns: \"http://www.w3.org/2000/svg\",\n      viewBox: \"0 0 1024 1024\"\n    }, [\n      _createElementVNode192(\"path\", {\n        fill: \"currentColor\",\n        d: \"M542.336 258.816a443 443 0 0 0-9.024 25.088 32 32 0 1 1-60.8-20.032l1.088-3.328a162.69 162.69 0 0 0-122.048 131.392l-17.088 102.72-20.736 15.36C256.192 552.704 224 610.88 224 672c0 120.576 126.4 224 288 224s288-103.424 288-224c0-61.12-32.192-119.296-89.728-161.92l-20.736-15.424-17.088-102.72a162.69 162.69 0 0 0-130.112-133.12m-40.128-66.56c7.936-15.552 16.576-30.08 25.92-43.776 23.296-33.92 49.408-59.776 78.528-77.12a32 32 0 1 1 32.704 55.04c-20.544 12.224-40.064 31.552-58.432 58.304a317 317 0 0 0-9.792 15.104 226.69 226.69 0 0 1 164.48 181.568l12.8 77.248C819.456 511.36 864 587.392 864 672c0 159.04-157.568 288-352 288S160 831.04 160 672c0-84.608 44.608-160.64 115.584-213.376l12.8-77.248a226.624 226.624 0 0 1 213.76-189.184z\"\n      })\n    ]));\n  }\n}), pear_default = _sfc_main192;\n\n// src/components/phone-filled.vue\nimport { defineComponent as _defineComponent193 } from \"vue\";\nimport { createElementVNode as _createElementVNode193, openBlock as _openBlock193, createElementBlock as _createElementBlock193 } from \"vue\";\nvar _sfc_main193 = /* @__PURE__ */ _defineComponent193({\n  name: \"PhoneFilled\",\n  __name: \"phone-filled\",\n  setup(__props) {\n    return (_ctx, _cache) => (_openBlock193(), _createElementBlock193(\"svg\", {\n      xmlns: \"http://www.w3.org/2000/svg\",\n      viewBox: \"0 0 1024 1024\"\n    }, [\n      _createElementVNode193(\"path\", {\n        fill: \"currentColor\",\n        d: \"M199.232 125.568 90.624 379.008a32 32 0 0 0 6.784 35.2l512.384 512.384a32 32 0 0 0 35.2 6.784l253.44-108.608a32 32 0 0 0 10.048-52.032L769.6 633.92a32 32 0 0 0-36.928-5.952l-130.176 65.088-271.488-271.552 65.024-130.176a32 32 0 0 0-5.952-36.928L251.2 115.52a32 32 0 0 0-51.968 10.048\"\n      })\n    ]));\n  }\n}), phone_filled_default = _sfc_main193;\n\n// src/components/phone.vue\nimport { defineComponent as _defineComponent194 } from \"vue\";\nimport { createElementVNode as _createElementVNode194, openBlock as _openBlock194, createElementBlock as _createElementBlock194 } from \"vue\";\nvar _sfc_main194 = /* @__PURE__ */ _defineComponent194({\n  name: \"Phone\",\n  __name: \"phone\",\n  setup(__props) {\n    return (_ctx, _cache) => (_openBlock194(), _createElementBlock194(\"svg\", {\n      xmlns: \"http://www.w3.org/2000/svg\",\n      viewBox: \"0 0 1024 1024\"\n    }, [\n      _createElementVNode194(\"path\", {\n        fill: \"currentColor\",\n        d: \"M79.36 432.256 591.744 944.64a32 32 0 0 0 35.2 6.784l253.44-108.544a32 32 0 0 0 9.984-52.032l-153.856-153.92a32 32 0 0 0-36.928-6.016l-69.888 34.944L358.08 394.24l35.008-69.888a32 32 0 0 0-5.952-36.928L233.152 133.568a32 32 0 0 0-52.032 10.048L72.512 397.056a32 32 0 0 0 6.784 35.2zm60.48-29.952 81.536-190.08L325.568 316.48l-24.64 49.216-20.608 41.216 32.576 32.64 271.552 271.552 32.64 32.64 41.216-20.672 49.28-24.576 104.192 104.128-190.08 81.472zM512 320v-64a256 256 0 0 1 256 256h-64a192 192 0 0 0-192-192m0-192V64a448 448 0 0 1 448 448h-64a384 384 0 0 0-384-384\"\n      })\n    ]));\n  }\n}), phone_default = _sfc_main194;\n\n// src/components/picture-filled.vue\nimport { defineComponent as _defineComponent195 } from \"vue\";\nimport { createElementVNode as _createElementVNode195, openBlock as _openBlock195, createElementBlock as _createElementBlock195 } from \"vue\";\nvar _sfc_main195 = /* @__PURE__ */ _defineComponent195({\n  name: \"PictureFilled\",\n  __name: \"picture-filled\",\n  setup(__props) {\n    return (_ctx, _cache) => (_openBlock195(), _createElementBlock195(\"svg\", {\n      xmlns: \"http://www.w3.org/2000/svg\",\n      viewBox: \"0 0 1024 1024\"\n    }, [\n      _createElementVNode195(\"path\", {\n        fill: \"currentColor\",\n        d: \"M96 896a32 32 0 0 1-32-32V160a32 32 0 0 1 32-32h832a32 32 0 0 1 32 32v704a32 32 0 0 1-32 32zm315.52-228.48-68.928-68.928a32 32 0 0 0-45.248 0L128 768.064h778.688l-242.112-290.56a32 32 0 0 0-49.216 0L458.752 665.408a32 32 0 0 1-47.232 2.112M256 384a96 96 0 1 0 192.064-.064A96 96 0 0 0 256 384\"\n      })\n    ]));\n  }\n}), picture_filled_default = _sfc_main195;\n\n// src/components/picture-rounded.vue\nimport { defineComponent as _defineComponent196 } from \"vue\";\nimport { createElementVNode as _createElementVNode196, openBlock as _openBlock196, createElementBlock as _createElementBlock196 } from \"vue\";\nvar _sfc_main196 = /* @__PURE__ */ _defineComponent196({\n  name: \"PictureRounded\",\n  __name: \"picture-rounded\",\n  setup(__props) {\n    return (_ctx, _cache) => (_openBlock196(), _createElementBlock196(\"svg\", {\n      xmlns: \"http://www.w3.org/2000/svg\",\n      viewBox: \"0 0 1024 1024\"\n    }, [\n      _createElementVNode196(\"path\", {\n        fill: \"currentColor\",\n        d: \"M512 128a384 384 0 1 0 0 768 384 384 0 0 0 0-768m0-64a448 448 0 1 1 0 896 448 448 0 0 1 0-896\"\n      }),\n      _createElementVNode196(\"path\", {\n        fill: \"currentColor\",\n        d: \"M640 288q64 0 64 64t-64 64-64-64 64-64M214.656 790.656l-45.312-45.312 185.664-185.6a96 96 0 0 1 123.712-10.24l138.24 98.688a32 32 0 0 0 39.872-2.176L906.688 422.4l42.624 47.744L699.52 693.696a96 96 0 0 1-119.808 6.592l-138.24-98.752a32 32 0 0 0-41.152 3.456l-185.664 185.6z\"\n      })\n    ]));\n  }\n}), picture_rounded_default = _sfc_main196;\n\n// src/components/picture.vue\nimport { defineComponent as _defineComponent197 } from \"vue\";\nimport { createElementVNode as _createElementVNode197, openBlock as _openBlock197, createElementBlock as _createElementBlock197 } from \"vue\";\nvar _sfc_main197 = /* @__PURE__ */ _defineComponent197({\n  name: \"Picture\",\n  __name: \"picture\",\n  setup(__props) {\n    return (_ctx, _cache) => (_openBlock197(), _createElementBlock197(\"svg\", {\n      xmlns: \"http://www.w3.org/2000/svg\",\n      viewBox: \"0 0 1024 1024\"\n    }, [\n      _createElementVNode197(\"path\", {\n        fill: \"currentColor\",\n        d: \"M160 160v704h704V160zm-32-64h768a32 32 0 0 1 32 32v768a32 32 0 0 1-32 32H128a32 32 0 0 1-32-32V128a32 32 0 0 1 32-32\"\n      }),\n      _createElementVNode197(\"path\", {\n        fill: \"currentColor\",\n        d: \"M384 288q64 0 64 64t-64 64-64-64 64-64M185.408 876.992l-50.816-38.912L350.72 556.032a96 96 0 0 1 134.592-17.856l1.856 1.472 122.88 99.136a32 32 0 0 0 44.992-4.864l216-269.888 49.92 39.936-215.808 269.824-.256.32a96 96 0 0 1-135.04 14.464l-122.88-99.072-.64-.512a32 32 0 0 0-44.8 5.952z\"\n      })\n    ]));\n  }\n}), picture_default = _sfc_main197;\n\n// src/components/pie-chart.vue\nimport { defineComponent as _defineComponent198 } from \"vue\";\nimport { createElementVNode as _createElementVNode198, openBlock as _openBlock198, createElementBlock as _createElementBlock198 } from \"vue\";\nvar _sfc_main198 = /* @__PURE__ */ _defineComponent198({\n  name: \"PieChart\",\n  __name: \"pie-chart\",\n  setup(__props) {\n    return (_ctx, _cache) => (_openBlock198(), _createElementBlock198(\"svg\", {\n      xmlns: \"http://www.w3.org/2000/svg\",\n      viewBox: \"0 0 1024 1024\"\n    }, [\n      _createElementVNode198(\"path\", {\n        fill: \"currentColor\",\n        d: \"M448 68.48v64.832A384.128 384.128 0 0 0 512 896a384.13 384.13 0 0 0 378.688-320h64.768A448.128 448.128 0 0 1 64 512 448.13 448.13 0 0 1 448 68.48\"\n      }),\n      _createElementVNode198(\"path\", {\n        fill: \"currentColor\",\n        d: \"M576 97.28V448h350.72A384.064 384.064 0 0 0 576 97.28M512 64V33.152A448 448 0 0 1 990.848 512H512z\"\n      })\n    ]));\n  }\n}), pie_chart_default = _sfc_main198;\n\n// src/components/place.vue\nimport { defineComponent as _defineComponent199 } from \"vue\";\nimport { createElementVNode as _createElementVNode199, openBlock as _openBlock199, createElementBlock as _createElementBlock199 } from \"vue\";\nvar _sfc_main199 = /* @__PURE__ */ _defineComponent199({\n  name: \"Place\",\n  __name: \"place\",\n  setup(__props) {\n    return (_ctx, _cache) => (_openBlock199(), _createElementBlock199(\"svg\", {\n      xmlns: \"http://www.w3.org/2000/svg\",\n      viewBox: \"0 0 1024 1024\"\n    }, [\n      _createElementVNode199(\"path\", {\n        fill: \"currentColor\",\n        d: \"M512 512a192 192 0 1 0 0-384 192 192 0 0 0 0 384m0 64a256 256 0 1 1 0-512 256 256 0 0 1 0 512\"\n      }),\n      _createElementVNode199(\"path\", {\n        fill: \"currentColor\",\n        d: \"M512 512a32 32 0 0 1 32 32v256a32 32 0 1 1-64 0V544a32 32 0 0 1 32-32\"\n      }),\n      _createElementVNode199(\"path\", {\n        fill: \"currentColor\",\n        d: \"M384 649.088v64.96C269.76 732.352 192 771.904 192 800c0 37.696 139.904 96 320 96s320-58.304 320-96c0-28.16-77.76-67.648-192-85.952v-64.96C789.12 671.04 896 730.368 896 800c0 88.32-171.904 160-384 160s-384-71.68-384-160c0-69.696 106.88-128.96 256-150.912\"\n      })\n    ]));\n  }\n}), place_default = _sfc_main199;\n\n// src/components/platform.vue\nimport { defineComponent as _defineComponent200 } from \"vue\";\nimport { createElementVNode as _createElementVNode200, openBlock as _openBlock200, createElementBlock as _createElementBlock200 } from \"vue\";\nvar _sfc_main200 = /* @__PURE__ */ _defineComponent200({\n  name: \"Platform\",\n  __name: \"platform\",\n  setup(__props) {\n    return (_ctx, _cache) => (_openBlock200(), _createElementBlock200(\"svg\", {\n      xmlns: \"http://www.w3.org/2000/svg\",\n      viewBox: \"0 0 1024 1024\"\n    }, [\n      _createElementVNode200(\"path\", {\n        fill: \"currentColor\",\n        d: \"M448 832v-64h128v64h192v64H256v-64zM128 704V128h768v576z\"\n      })\n    ]));\n  }\n}), platform_default = _sfc_main200;\n\n// src/components/plus.vue\nimport { defineComponent as _defineComponent201 } from \"vue\";\nimport { createElementVNode as _createElementVNode201, openBlock as _openBlock201, createElementBlock as _createElementBlock201 } from \"vue\";\nvar _sfc_main201 = /* @__PURE__ */ _defineComponent201({\n  name: \"Plus\",\n  __name: \"plus\",\n  setup(__props) {\n    return (_ctx, _cache) => (_openBlock201(), _createElementBlock201(\"svg\", {\n      xmlns: \"http://www.w3.org/2000/svg\",\n      viewBox: \"0 0 1024 1024\"\n    }, [\n      _createElementVNode201(\"path\", {\n        fill: \"currentColor\",\n        d: \"M480 480V128a32 32 0 0 1 64 0v352h352a32 32 0 1 1 0 64H544v352a32 32 0 1 1-64 0V544H128a32 32 0 0 1 0-64z\"\n      })\n    ]));\n  }\n}), plus_default = _sfc_main201;\n\n// src/components/pointer.vue\nimport { defineComponent as _defineComponent202 } from \"vue\";\nimport { createElementVNode as _createElementVNode202, openBlock as _openBlock202, createElementBlock as _createElementBlock202 } from \"vue\";\nvar _sfc_main202 = /* @__PURE__ */ _defineComponent202({\n  name: \"Pointer\",\n  __name: \"pointer\",\n  setup(__props) {\n    return (_ctx, _cache) => (_openBlock202(), _createElementBlock202(\"svg\", {\n      xmlns: \"http://www.w3.org/2000/svg\",\n      viewBox: \"0 0 1024 1024\"\n    }, [\n      _createElementVNode202(\"path\", {\n        fill: \"currentColor\",\n        d: \"M511.552 128c-35.584 0-64.384 28.8-64.384 64.448v516.48L274.048 570.88a94.27 94.27 0 0 0-112.896-3.456 44.416 44.416 0 0 0-8.96 62.208L332.8 870.4A64 64 0 0 0 384 896h512V575.232a64 64 0 0 0-45.632-61.312l-205.952-61.76A96 96 0 0 1 576 360.192V192.448C576 156.8 547.2 128 511.552 128M359.04 556.8l24.128 19.2V192.448a128.448 128.448 0 1 1 256.832 0v167.744a32 32 0 0 0 22.784 30.656l206.016 61.76A128 128 0 0 1 960 575.232V896a64 64 0 0 1-64 64H384a128 128 0 0 1-102.4-51.2L101.056 668.032A108.416 108.416 0 0 1 128 512.512a158.27 158.27 0 0 1 185.984 8.32z\"\n      })\n    ]));\n  }\n}), pointer_default = _sfc_main202;\n\n// src/components/position.vue\nimport { defineComponent as _defineComponent203 } from \"vue\";\nimport { createElementVNode as _createElementVNode203, openBlock as _openBlock203, createElementBlock as _createElementBlock203 } from \"vue\";\nvar _sfc_main203 = /* @__PURE__ */ _defineComponent203({\n  name: \"Position\",\n  __name: \"position\",\n  setup(__props) {\n    return (_ctx, _cache) => (_openBlock203(), _createElementBlock203(\"svg\", {\n      xmlns: \"http://www.w3.org/2000/svg\",\n      viewBox: \"0 0 1024 1024\"\n    }, [\n      _createElementVNode203(\"path\", {\n        fill: \"currentColor\",\n        d: \"m249.6 417.088 319.744 43.072 39.168 310.272L845.12 178.88zm-129.024 47.168a32 32 0 0 1-7.68-61.44l777.792-311.04a32 32 0 0 1 41.6 41.6l-310.336 775.68a32 32 0 0 1-61.44-7.808L512 516.992z\"\n      })\n    ]));\n  }\n}), position_default = _sfc_main203;\n\n// src/components/postcard.vue\nimport { defineComponent as _defineComponent204 } from \"vue\";\nimport { createElementVNode as _createElementVNode204, openBlock as _openBlock204, createElementBlock as _createElementBlock204 } from \"vue\";\nvar _sfc_main204 = /* @__PURE__ */ _defineComponent204({\n  name: \"Postcard\",\n  __name: \"postcard\",\n  setup(__props) {\n    return (_ctx, _cache) => (_openBlock204(), _createElementBlock204(\"svg\", {\n      xmlns: \"http://www.w3.org/2000/svg\",\n      viewBox: \"0 0 1024 1024\"\n    }, [\n      _createElementVNode204(\"path\", {\n        fill: \"currentColor\",\n        d: \"M160 224a32 32 0 0 0-32 32v512a32 32 0 0 0 32 32h704a32 32 0 0 0 32-32V256a32 32 0 0 0-32-32zm0-64h704a96 96 0 0 1 96 96v512a96 96 0 0 1-96 96H160a96 96 0 0 1-96-96V256a96 96 0 0 1 96-96\"\n      }),\n      _createElementVNode204(\"path\", {\n        fill: \"currentColor\",\n        d: \"M704 320a64 64 0 1 1 0 128 64 64 0 0 1 0-128M288 448h256q32 0 32 32t-32 32H288q-32 0-32-32t32-32m0 128h256q32 0 32 32t-32 32H288q-32 0-32-32t32-32\"\n      })\n    ]));\n  }\n}), postcard_default = _sfc_main204;\n\n// src/components/pouring.vue\nimport { defineComponent as _defineComponent205 } from \"vue\";\nimport { createElementVNode as _createElementVNode205, openBlock as _openBlock205, createElementBlock as _createElementBlock205 } from \"vue\";\nvar _sfc_main205 = /* @__PURE__ */ _defineComponent205({\n  name: \"Pouring\",\n  __name: \"pouring\",\n  setup(__props) {\n    return (_ctx, _cache) => (_openBlock205(), _createElementBlock205(\"svg\", {\n      xmlns: \"http://www.w3.org/2000/svg\",\n      viewBox: \"0 0 1024 1024\"\n    }, [\n      _createElementVNode205(\"path\", {\n        fill: \"currentColor\",\n        d: \"m739.328 291.328-35.2-6.592-12.8-33.408a192.064 192.064 0 0 0-365.952 23.232l-9.92 40.896-41.472 7.04a176.32 176.32 0 0 0-146.24 173.568c0 97.28 78.72 175.936 175.808 175.936h400a192 192 0 0 0 35.776-380.672M959.552 480a256 256 0 0 1-256 256h-400A239.81 239.81 0 0 1 63.744 496.192a240.32 240.32 0 0 1 199.488-236.8 256.128 256.128 0 0 1 487.872-30.976A256.064 256.064 0 0 1 959.552 480M224 800a32 32 0 0 1 32 32v96a32 32 0 1 1-64 0v-96a32 32 0 0 1 32-32m192 0a32 32 0 0 1 32 32v96a32 32 0 1 1-64 0v-96a32 32 0 0 1 32-32m192 0a32 32 0 0 1 32 32v96a32 32 0 1 1-64 0v-96a32 32 0 0 1 32-32m192 0a32 32 0 0 1 32 32v96a32 32 0 1 1-64 0v-96a32 32 0 0 1 32-32\"\n      })\n    ]));\n  }\n}), pouring_default = _sfc_main205;\n\n// src/components/present.vue\nimport { defineComponent as _defineComponent206 } from \"vue\";\nimport { createElementVNode as _createElementVNode206, openBlock as _openBlock206, createElementBlock as _createElementBlock206 } from \"vue\";\nvar _sfc_main206 = /* @__PURE__ */ _defineComponent206({\n  name: \"Present\",\n  __name: \"present\",\n  setup(__props) {\n    return (_ctx, _cache) => (_openBlock206(), _createElementBlock206(\"svg\", {\n      xmlns: \"http://www.w3.org/2000/svg\",\n      viewBox: \"0 0 1024 1024\"\n    }, [\n      _createElementVNode206(\"path\", {\n        fill: \"currentColor\",\n        d: \"M480 896V640H192v-64h288V320H192v576zm64 0h288V320H544v256h288v64H544zM128 256h768v672a32 32 0 0 1-32 32H160a32 32 0 0 1-32-32z\"\n      }),\n      _createElementVNode206(\"path\", {\n        fill: \"currentColor\",\n        d: \"M96 256h832q32 0 32 32t-32 32H96q-32 0-32-32t32-32\"\n      }),\n      _createElementVNode206(\"path\", {\n        fill: \"currentColor\",\n        d: \"M416 256a64 64 0 1 0 0-128 64 64 0 0 0 0 128m0 64a128 128 0 1 1 0-256 128 128 0 0 1 0 256\"\n      }),\n      _createElementVNode206(\"path\", {\n        fill: \"currentColor\",\n        d: \"M608 256a64 64 0 1 0 0-128 64 64 0 0 0 0 128m0 64a128 128 0 1 1 0-256 128 128 0 0 1 0 256\"\n      })\n    ]));\n  }\n}), present_default = _sfc_main206;\n\n// src/components/price-tag.vue\nimport { defineComponent as _defineComponent207 } from \"vue\";\nimport { createElementVNode as _createElementVNode207, openBlock as _openBlock207, createElementBlock as _createElementBlock207 } from \"vue\";\nvar _sfc_main207 = /* @__PURE__ */ _defineComponent207({\n  name: \"PriceTag\",\n  __name: \"price-tag\",\n  setup(__props) {\n    return (_ctx, _cache) => (_openBlock207(), _createElementBlock207(\"svg\", {\n      xmlns: \"http://www.w3.org/2000/svg\",\n      viewBox: \"0 0 1024 1024\"\n    }, [\n      _createElementVNode207(\"path\", {\n        fill: \"currentColor\",\n        d: \"M224 318.336V896h576V318.336L552.512 115.84a64 64 0 0 0-81.024 0zM593.024 66.304l259.2 212.096A32 32 0 0 1 864 303.168V928a32 32 0 0 1-32 32H192a32 32 0 0 1-32-32V303.168a32 32 0 0 1 11.712-24.768l259.2-212.096a128 128 0 0 1 162.112 0\"\n      }),\n      _createElementVNode207(\"path\", {\n        fill: \"currentColor\",\n        d: \"M512 448a64 64 0 1 0 0-128 64 64 0 0 0 0 128m0 64a128 128 0 1 1 0-256 128 128 0 0 1 0 256\"\n      })\n    ]));\n  }\n}), price_tag_default = _sfc_main207;\n\n// src/components/printer.vue\nimport { defineComponent as _defineComponent208 } from \"vue\";\nimport { createElementVNode as _createElementVNode208, openBlock as _openBlock208, createElementBlock as _createElementBlock208 } from \"vue\";\nvar _sfc_main208 = /* @__PURE__ */ _defineComponent208({\n  name: \"Printer\",\n  __name: \"printer\",\n  setup(__props) {\n    return (_ctx, _cache) => (_openBlock208(), _createElementBlock208(\"svg\", {\n      xmlns: \"http://www.w3.org/2000/svg\",\n      viewBox: \"0 0 1024 1024\"\n    }, [\n      _createElementVNode208(\"path\", {\n        fill: \"currentColor\",\n        d: \"M256 768H105.024c-14.272 0-19.456-1.472-24.64-4.288a29.06 29.06 0 0 1-12.16-12.096C65.536 746.432 64 741.248 64 727.04V379.072c0-42.816 4.48-58.304 12.8-73.984 8.384-15.616 20.672-27.904 36.288-36.288 15.68-8.32 31.168-12.8 73.984-12.8H256V64h512v192h68.928c42.816 0 58.304 4.48 73.984 12.8 15.616 8.384 27.904 20.672 36.288 36.288 8.32 15.68 12.8 31.168 12.8 73.984v347.904c0 14.272-1.472 19.456-4.288 24.64a29.06 29.06 0 0 1-12.096 12.16c-5.184 2.752-10.368 4.224-24.64 4.224H768v192H256zm64-192v320h384V576zm-64 128V512h512v192h128V379.072c0-29.376-1.408-36.48-5.248-43.776a23.3 23.3 0 0 0-10.048-10.048c-7.232-3.84-14.4-5.248-43.776-5.248H187.072c-29.376 0-36.48 1.408-43.776 5.248a23.3 23.3 0 0 0-10.048 10.048c-3.84 7.232-5.248 14.4-5.248 43.776V704zm64-448h384V128H320zm-64 128h64v64h-64zm128 0h64v64h-64z\"\n      })\n    ]));\n  }\n}), printer_default = _sfc_main208;\n\n// src/components/promotion.vue\nimport { defineComponent as _defineComponent209 } from \"vue\";\nimport { createElementVNode as _createElementVNode209, openBlock as _openBlock209, createElementBlock as _createElementBlock209 } from \"vue\";\nvar _sfc_main209 = /* @__PURE__ */ _defineComponent209({\n  name: \"Promotion\",\n  __name: \"promotion\",\n  setup(__props) {\n    return (_ctx, _cache) => (_openBlock209(), _createElementBlock209(\"svg\", {\n      xmlns: \"http://www.w3.org/2000/svg\",\n      viewBox: \"0 0 1024 1024\"\n    }, [\n      _createElementVNode209(\"path\", {\n        fill: \"currentColor\",\n        d: \"m64 448 832-320-128 704-446.08-243.328L832 192 242.816 545.472zm256 512V657.024L512 768z\"\n      })\n    ]));\n  }\n}), promotion_default = _sfc_main209;\n\n// src/components/quartz-watch.vue\nimport { defineComponent as _defineComponent210 } from \"vue\";\nimport { createElementVNode as _createElementVNode210, openBlock as _openBlock210, createElementBlock as _createElementBlock210 } from \"vue\";\nvar _sfc_main210 = /* @__PURE__ */ _defineComponent210({\n  name: \"QuartzWatch\",\n  __name: \"quartz-watch\",\n  setup(__props) {\n    return (_ctx, _cache) => (_openBlock210(), _createElementBlock210(\"svg\", {\n      xmlns: \"http://www.w3.org/2000/svg\",\n      \"xml:space\": \"preserve\",\n      viewBox: \"0 0 1024 1024\"\n    }, [\n      _createElementVNode210(\"path\", {\n        fill: \"currentColor\",\n        d: \"M422.02 602.01v-.03c-6.68-5.99-14.35-8.83-23.01-8.51q-13.005.48-22.5 10.02c-6.33 6.36-9.5 13.7-9.5 22.02s3 15.82 8.99 22.5c8.68 8.68 19.02 11.35 31.01 8s19.49-10.85 22.5-22.5.51-22.15-7.49-31.49zM384 512c0-9.35-3-17.02-8.99-23.01-6-5.99-13.66-8.99-23.01-8.99s-17.02 3-23.01 8.99c-5.99 6-8.99 13.66-8.99 23.01s3 17.02 8.99 23.01c6 5.99 13.66 8.99 23.01 8.99s17.02-3 23.01-8.99c5.99-6 8.99-13.67 8.99-23.01m6.53-82.49c11.65 3.01 22.15.51 31.49-7.49h.04c5.99-6.68 8.83-14.34 8.51-23.01s-3.66-16.16-10.02-22.5c-6.36-6.33-13.7-9.5-22.02-9.5s-15.82 3-22.5 8.99c-8.68 8.69-11.35 19.02-8 31.01q5.025 17.985 22.5 22.5m242.94 0q17.505-4.545 22.02-22.02c3.01-11.65.51-22.15-7.49-31.49h.01c-6.68-5.99-14.18-8.99-22.5-8.99s-15.66 3.16-22.02 9.5q-9.54 9.51-10.02 22.5c-.32 8.66 2.52 16.33 8.51 23.01 9.32 8.02 19.82 10.52 31.49 7.49M512 640c-9.35 0-17.02 3-23.01 8.99-5.99 6-8.99 13.66-8.99 23.01s3 17.02 8.99 23.01c6 5.99 13.67 8.99 23.01 8.99 9.35 0 17.02-3 23.01-8.99 5.99-6 8.99-13.66 8.99-23.01s-3-17.02-8.99-23.01c-6-5.99-13.66-8.99-23.01-8.99m183.01-151.01c-6-5.99-13.66-8.99-23.01-8.99s-17.02 3-23.01 8.99c-5.99 6-8.99 13.66-8.99 23.01s3 17.02 8.99 23.01c6 5.99 13.66 8.99 23.01 8.99s17.02-3 23.01-8.99c5.99-6 8.99-13.67 8.99-23.01 0-9.35-3-17.02-8.99-23.01\"\n      }),\n      _createElementVNode210(\"path\", {\n        fill: \"currentColor\",\n        d: \"M832 512c-2-90.67-33.17-166.17-93.5-226.5-20.43-20.42-42.6-37.49-66.5-51.23V64H352v170.26c-23.9 13.74-46.07 30.81-66.5 51.24-60.33 60.33-91.49 135.83-93.5 226.5 2 90.67 33.17 166.17 93.5 226.5 20.43 20.43 42.6 37.5 66.5 51.24V960h320V789.74c23.9-13.74 46.07-30.81 66.5-51.24 60.33-60.34 91.49-135.83 93.5-226.5M416 128h192v78.69c-29.85-9.03-61.85-13.93-96-14.69-34.15.75-66.15 5.65-96 14.68zm192 768H416v-78.68c29.85 9.03 61.85 13.93 96 14.68 34.15-.75 66.15-5.65 96-14.68zm-96-128c-72.66-2.01-132.99-27.01-180.99-75.01S258.01 584.66 256 512c2.01-72.66 27.01-132.99 75.01-180.99S439.34 258.01 512 256c72.66 2.01 132.99 27.01 180.99 75.01S765.99 439.34 768 512c-2.01 72.66-27.01 132.99-75.01 180.99S584.66 765.99 512 768\"\n      }),\n      _createElementVNode210(\"path\", {\n        fill: \"currentColor\",\n        d: \"M512 320c-9.35 0-17.02 3-23.01 8.99-5.99 6-8.99 13.66-8.99 23.01s3 17.02 8.99 23.01c6 5.99 13.67 8.99 23.01 8.99 9.35 0 17.02-3 23.01-8.99 5.99-6 8.99-13.66 8.99-23.01s-3-17.02-8.99-23.01c-6-5.99-13.66-8.99-23.01-8.99m112.99 273.5c-8.66-.32-16.33 2.52-23.01 8.51-7.98 9.32-10.48 19.82-7.49 31.49s10.49 19.17 22.5 22.5 22.35.66 31.01-8v.04c5.99-6.68 8.99-14.18 8.99-22.5s-3.16-15.66-9.5-22.02-13.84-9.7-22.5-10.02\"\n      })\n    ]));\n  }\n}), quartz_watch_default = _sfc_main210;\n\n// src/components/question-filled.vue\nimport { defineComponent as _defineComponent211 } from \"vue\";\nimport { createElementVNode as _createElementVNode211, openBlock as _openBlock211, createElementBlock as _createElementBlock211 } from \"vue\";\nvar _sfc_main211 = /* @__PURE__ */ _defineComponent211({\n  name: \"QuestionFilled\",\n  __name: \"question-filled\",\n  setup(__props) {\n    return (_ctx, _cache) => (_openBlock211(), _createElementBlock211(\"svg\", {\n      xmlns: \"http://www.w3.org/2000/svg\",\n      viewBox: \"0 0 1024 1024\"\n    }, [\n      _createElementVNode211(\"path\", {\n        fill: \"currentColor\",\n        d: \"M512 64a448 448 0 1 1 0 896 448 448 0 0 1 0-896m23.744 191.488c-52.096 0-92.928 14.784-123.2 44.352-30.976 29.568-45.76 70.4-45.76 122.496h80.256c0-29.568 5.632-52.8 17.6-68.992 13.376-19.712 35.2-28.864 66.176-28.864 23.936 0 42.944 6.336 56.32 19.712 12.672 13.376 19.712 31.68 19.712 54.912 0 17.6-6.336 34.496-19.008 49.984l-8.448 9.856c-45.76 40.832-73.216 70.4-82.368 89.408-9.856 19.008-14.08 42.24-14.08 68.992v9.856h80.96v-9.856c0-16.896 3.52-31.68 10.56-45.76 6.336-12.672 15.488-24.64 28.16-35.2 33.792-29.568 54.208-48.576 60.544-55.616 16.896-22.528 26.048-51.392 26.048-86.592q0-64.416-42.24-101.376c-28.16-25.344-65.472-37.312-111.232-37.312m-12.672 406.208a54.27 54.27 0 0 0-38.72 14.784 49.4 49.4 0 0 0-15.488 38.016c0 15.488 4.928 28.16 15.488 38.016A54.85 54.85 0 0 0 523.072 768c15.488 0 28.16-4.928 38.72-14.784a51.52 51.52 0 0 0 16.192-38.72 51.97 51.97 0 0 0-15.488-38.016 55.94 55.94 0 0 0-39.424-14.784\"\n      })\n    ]));\n  }\n}), question_filled_default = _sfc_main211;\n\n// src/components/rank.vue\nimport { defineComponent as _defineComponent212 } from \"vue\";\nimport { createElementVNode as _createElementVNode212, openBlock as _openBlock212, createElementBlock as _createElementBlock212 } from \"vue\";\nvar _sfc_main212 = /* @__PURE__ */ _defineComponent212({\n  name: \"Rank\",\n  __name: \"rank\",\n  setup(__props) {\n    return (_ctx, _cache) => (_openBlock212(), _createElementBlock212(\"svg\", {\n      xmlns: \"http://www.w3.org/2000/svg\",\n      viewBox: \"0 0 1024 1024\"\n    }, [\n      _createElementVNode212(\"path\", {\n        fill: \"currentColor\",\n        d: \"m186.496 544 41.408 41.344a32 32 0 1 1-45.248 45.312l-96-96a32 32 0 0 1 0-45.312l96-96a32 32 0 1 1 45.248 45.312L186.496 480h290.816V186.432l-41.472 41.472a32 32 0 1 1-45.248-45.184l96-96.128a32 32 0 0 1 45.312 0l96 96.064a32 32 0 0 1-45.248 45.184l-41.344-41.28V480H832l-41.344-41.344a32 32 0 0 1 45.248-45.312l96 96a32 32 0 0 1 0 45.312l-96 96a32 32 0 0 1-45.248-45.312L832 544H541.312v293.44l41.344-41.28a32 32 0 1 1 45.248 45.248l-96 96a32 32 0 0 1-45.312 0l-96-96a32 32 0 1 1 45.312-45.248l41.408 41.408V544z\"\n      })\n    ]));\n  }\n}), rank_default = _sfc_main212;\n\n// src/components/reading-lamp.vue\nimport { defineComponent as _defineComponent213 } from \"vue\";\nimport { createElementVNode as _createElementVNode213, openBlock as _openBlock213, createElementBlock as _createElementBlock213 } from \"vue\";\nvar _sfc_main213 = /* @__PURE__ */ _defineComponent213({\n  name: \"ReadingLamp\",\n  __name: \"reading-lamp\",\n  setup(__props) {\n    return (_ctx, _cache) => (_openBlock213(), _createElementBlock213(\"svg\", {\n      xmlns: \"http://www.w3.org/2000/svg\",\n      viewBox: \"0 0 1024 1024\"\n    }, [\n      _createElementVNode213(\"path\", {\n        fill: \"currentColor\",\n        d: \"M352 896h320q32 0 32 32t-32 32H352q-32 0-32-32t32-32m-44.672-768-99.52 448h608.384l-99.52-448zm-25.6-64h460.608a32 32 0 0 1 31.232 25.088l113.792 512A32 32 0 0 1 856.128 640H167.872a32 32 0 0 1-31.232-38.912l113.792-512A32 32 0 0 1 281.664 64z\"\n      }),\n      _createElementVNode213(\"path\", {\n        fill: \"currentColor\",\n        d: \"M672 576q32 0 32 32v128q0 32-32 32t-32-32V608q0-32 32-32m-192-.064h64V960h-64z\"\n      })\n    ]));\n  }\n}), reading_lamp_default = _sfc_main213;\n\n// src/components/reading.vue\nimport { defineComponent as _defineComponent214 } from \"vue\";\nimport { createElementVNode as _createElementVNode214, openBlock as _openBlock214, createElementBlock as _createElementBlock214 } from \"vue\";\nvar _sfc_main214 = /* @__PURE__ */ _defineComponent214({\n  name: \"Reading\",\n  __name: \"reading\",\n  setup(__props) {\n    return (_ctx, _cache) => (_openBlock214(), _createElementBlock214(\"svg\", {\n      xmlns: \"http://www.w3.org/2000/svg\",\n      viewBox: \"0 0 1024 1024\"\n    }, [\n      _createElementVNode214(\"path\", {\n        fill: \"currentColor\",\n        d: \"m512 863.36 384-54.848v-638.72L525.568 222.72a96 96 0 0 1-27.136 0L128 169.792v638.72zM137.024 106.432l370.432 52.928a32 32 0 0 0 9.088 0l370.432-52.928A64 64 0 0 1 960 169.792v638.72a64 64 0 0 1-54.976 63.36l-388.48 55.488a32 32 0 0 1-9.088 0l-388.48-55.488A64 64 0 0 1 64 808.512v-638.72a64 64 0 0 1 73.024-63.36\"\n      }),\n      _createElementVNode214(\"path\", {\n        fill: \"currentColor\",\n        d: \"M480 192h64v704h-64z\"\n      })\n    ]));\n  }\n}), reading_default = _sfc_main214;\n\n// src/components/refresh-left.vue\nimport { defineComponent as _defineComponent215 } from \"vue\";\nimport { createElementVNode as _createElementVNode215, openBlock as _openBlock215, createElementBlock as _createElementBlock215 } from \"vue\";\nvar _sfc_main215 = /* @__PURE__ */ _defineComponent215({\n  name: \"RefreshLeft\",\n  __name: \"refresh-left\",\n  setup(__props) {\n    return (_ctx, _cache) => (_openBlock215(), _createElementBlock215(\"svg\", {\n      xmlns: \"http://www.w3.org/2000/svg\",\n      viewBox: \"0 0 1024 1024\"\n    }, [\n      _createElementVNode215(\"path\", {\n        fill: \"currentColor\",\n        d: \"M289.088 296.704h92.992a32 32 0 0 1 0 64H232.96a32 32 0 0 1-32-32V179.712a32 32 0 0 1 64 0v50.56a384 384 0 0 1 643.84 282.88 384 384 0 0 1-383.936 384 384 384 0 0 1-384-384h64a320 320 0 1 0 640 0 320 320 0 0 0-555.712-216.448z\"\n      })\n    ]));\n  }\n}), refresh_left_default = _sfc_main215;\n\n// src/components/refresh-right.vue\nimport { defineComponent as _defineComponent216 } from \"vue\";\nimport { createElementVNode as _createElementVNode216, openBlock as _openBlock216, createElementBlock as _createElementBlock216 } from \"vue\";\nvar _sfc_main216 = /* @__PURE__ */ _defineComponent216({\n  name: \"RefreshRight\",\n  __name: \"refresh-right\",\n  setup(__props) {\n    return (_ctx, _cache) => (_openBlock216(), _createElementBlock216(\"svg\", {\n      xmlns: \"http://www.w3.org/2000/svg\",\n      viewBox: \"0 0 1024 1024\"\n    }, [\n      _createElementVNode216(\"path\", {\n        fill: \"currentColor\",\n        d: \"M784.512 230.272v-50.56a32 32 0 1 1 64 0v149.056a32 32 0 0 1-32 32H667.52a32 32 0 1 1 0-64h92.992A320 320 0 1 0 524.8 833.152a320 320 0 0 0 320-320h64a384 384 0 0 1-384 384 384 384 0 0 1-384-384 384 384 0 0 1 643.712-282.88\"\n      })\n    ]));\n  }\n}), refresh_right_default = _sfc_main216;\n\n// src/components/refresh.vue\nimport { defineComponent as _defineComponent217 } from \"vue\";\nimport { createElementVNode as _createElementVNode217, openBlock as _openBlock217, createElementBlock as _createElementBlock217 } from \"vue\";\nvar _sfc_main217 = /* @__PURE__ */ _defineComponent217({\n  name: \"Refresh\",\n  __name: \"refresh\",\n  setup(__props) {\n    return (_ctx, _cache) => (_openBlock217(), _createElementBlock217(\"svg\", {\n      xmlns: \"http://www.w3.org/2000/svg\",\n      viewBox: \"0 0 1024 1024\"\n    }, [\n      _createElementVNode217(\"path\", {\n        fill: \"currentColor\",\n        d: \"M771.776 794.88A384 384 0 0 1 128 512h64a320 320 0 0 0 555.712 216.448H654.72a32 32 0 1 1 0-64h149.056a32 32 0 0 1 32 32v148.928a32 32 0 1 1-64 0v-50.56zM276.288 295.616h92.992a32 32 0 0 1 0 64H220.16a32 32 0 0 1-32-32V178.56a32 32 0 0 1 64 0v50.56A384 384 0 0 1 896.128 512h-64a320 320 0 0 0-555.776-216.384z\"\n      })\n    ]));\n  }\n}), refresh_default = _sfc_main217;\n\n// src/components/refrigerator.vue\nimport { defineComponent as _defineComponent218 } from \"vue\";\nimport { createElementVNode as _createElementVNode218, openBlock as _openBlock218, createElementBlock as _createElementBlock218 } from \"vue\";\nvar _sfc_main218 = /* @__PURE__ */ _defineComponent218({\n  name: \"Refrigerator\",\n  __name: \"refrigerator\",\n  setup(__props) {\n    return (_ctx, _cache) => (_openBlock218(), _createElementBlock218(\"svg\", {\n      xmlns: \"http://www.w3.org/2000/svg\",\n      viewBox: \"0 0 1024 1024\"\n    }, [\n      _createElementVNode218(\"path\", {\n        fill: \"currentColor\",\n        d: \"M256 448h512V160a32 32 0 0 0-32-32H288a32 32 0 0 0-32 32zm0 64v352a32 32 0 0 0 32 32h448a32 32 0 0 0 32-32V512zm32-448h448a96 96 0 0 1 96 96v704a96 96 0 0 1-96 96H288a96 96 0 0 1-96-96V160a96 96 0 0 1 96-96m32 224h64v96h-64zm0 288h64v96h-64z\"\n      })\n    ]));\n  }\n}), refrigerator_default = _sfc_main218;\n\n// src/components/remove-filled.vue\nimport { defineComponent as _defineComponent219 } from \"vue\";\nimport { createElementVNode as _createElementVNode219, openBlock as _openBlock219, createElementBlock as _createElementBlock219 } from \"vue\";\nvar _sfc_main219 = /* @__PURE__ */ _defineComponent219({\n  name: \"RemoveFilled\",\n  __name: \"remove-filled\",\n  setup(__props) {\n    return (_ctx, _cache) => (_openBlock219(), _createElementBlock219(\"svg\", {\n      xmlns: \"http://www.w3.org/2000/svg\",\n      viewBox: \"0 0 1024 1024\"\n    }, [\n      _createElementVNode219(\"path\", {\n        fill: \"currentColor\",\n        d: \"M512 64a448 448 0 1 1 0 896 448 448 0 0 1 0-896M288 512a38.4 38.4 0 0 0 38.4 38.4h371.2a38.4 38.4 0 0 0 0-76.8H326.4A38.4 38.4 0 0 0 288 512\"\n      })\n    ]));\n  }\n}), remove_filled_default = _sfc_main219;\n\n// src/components/remove.vue\nimport { defineComponent as _defineComponent220 } from \"vue\";\nimport { createElementVNode as _createElementVNode220, openBlock as _openBlock220, createElementBlock as _createElementBlock220 } from \"vue\";\nvar _sfc_main220 = /* @__PURE__ */ _defineComponent220({\n  name: \"Remove\",\n  __name: \"remove\",\n  setup(__props) {\n    return (_ctx, _cache) => (_openBlock220(), _createElementBlock220(\"svg\", {\n      xmlns: \"http://www.w3.org/2000/svg\",\n      viewBox: \"0 0 1024 1024\"\n    }, [\n      _createElementVNode220(\"path\", {\n        fill: \"currentColor\",\n        d: \"M352 480h320a32 32 0 1 1 0 64H352a32 32 0 0 1 0-64\"\n      }),\n      _createElementVNode220(\"path\", {\n        fill: \"currentColor\",\n        d: \"M512 896a384 384 0 1 0 0-768 384 384 0 0 0 0 768m0 64a448 448 0 1 1 0-896 448 448 0 0 1 0 896\"\n      })\n    ]));\n  }\n}), remove_default = _sfc_main220;\n\n// src/components/right.vue\nimport { defineComponent as _defineComponent221 } from \"vue\";\nimport { createElementVNode as _createElementVNode221, openBlock as _openBlock221, createElementBlock as _createElementBlock221 } from \"vue\";\nvar _sfc_main221 = /* @__PURE__ */ _defineComponent221({\n  name: \"Right\",\n  __name: \"right\",\n  setup(__props) {\n    return (_ctx, _cache) => (_openBlock221(), _createElementBlock221(\"svg\", {\n      xmlns: \"http://www.w3.org/2000/svg\",\n      viewBox: \"0 0 1024 1024\"\n    }, [\n      _createElementVNode221(\"path\", {\n        fill: \"currentColor\",\n        d: \"M754.752 480H160a32 32 0 1 0 0 64h594.752L521.344 777.344a32 32 0 0 0 45.312 45.312l288-288a32 32 0 0 0 0-45.312l-288-288a32 32 0 1 0-45.312 45.312z\"\n      })\n    ]));\n  }\n}), right_default = _sfc_main221;\n\n// src/components/scale-to-original.vue\nimport { defineComponent as _defineComponent222 } from \"vue\";\nimport { createElementVNode as _createElementVNode222, openBlock as _openBlock222, createElementBlock as _createElementBlock222 } from \"vue\";\nvar _sfc_main222 = /* @__PURE__ */ _defineComponent222({\n  name: \"ScaleToOriginal\",\n  __name: \"scale-to-original\",\n  setup(__props) {\n    return (_ctx, _cache) => (_openBlock222(), _createElementBlock222(\"svg\", {\n      xmlns: \"http://www.w3.org/2000/svg\",\n      viewBox: \"0 0 1024 1024\"\n    }, [\n      _createElementVNode222(\"path\", {\n        fill: \"currentColor\",\n        d: \"M813.176 180.706a60.235 60.235 0 0 1 60.236 60.235v481.883a60.235 60.235 0 0 1-60.236 60.235H210.824a60.235 60.235 0 0 1-60.236-60.235V240.94a60.235 60.235 0 0 1 60.236-60.235h602.352zm0-60.235H210.824A120.47 120.47 0 0 0 90.353 240.94v481.883a120.47 120.47 0 0 0 120.47 120.47h602.353a120.47 120.47 0 0 0 120.471-120.47V240.94a120.47 120.47 0 0 0-120.47-120.47zm-120.47 180.705a30.12 30.12 0 0 0-30.118 30.118v301.177a30.118 30.118 0 0 0 60.236 0V331.294a30.12 30.12 0 0 0-30.118-30.118m-361.412 0a30.12 30.12 0 0 0-30.118 30.118v301.177a30.118 30.118 0 1 0 60.236 0V331.294a30.12 30.12 0 0 0-30.118-30.118M512 361.412a30.12 30.12 0 0 0-30.118 30.117v30.118a30.118 30.118 0 0 0 60.236 0V391.53A30.12 30.12 0 0 0 512 361.412M512 512a30.12 30.12 0 0 0-30.118 30.118v30.117a30.118 30.118 0 0 0 60.236 0v-30.117A30.12 30.12 0 0 0 512 512\"\n      })\n    ]));\n  }\n}), scale_to_original_default = _sfc_main222;\n\n// src/components/school.vue\nimport { defineComponent as _defineComponent223 } from \"vue\";\nimport { createElementVNode as _createElementVNode223, openBlock as _openBlock223, createElementBlock as _createElementBlock223 } from \"vue\";\nvar _sfc_main223 = /* @__PURE__ */ _defineComponent223({\n  name: \"School\",\n  __name: \"school\",\n  setup(__props) {\n    return (_ctx, _cache) => (_openBlock223(), _createElementBlock223(\"svg\", {\n      xmlns: \"http://www.w3.org/2000/svg\",\n      viewBox: \"0 0 1024 1024\"\n    }, [\n      _createElementVNode223(\"path\", {\n        fill: \"currentColor\",\n        d: \"M224 128v704h576V128zm-32-64h640a32 32 0 0 1 32 32v768a32 32 0 0 1-32 32H192a32 32 0 0 1-32-32V96a32 32 0 0 1 32-32\"\n      }),\n      _createElementVNode223(\"path\", {\n        fill: \"currentColor\",\n        d: \"M64 832h896v64H64zm256-640h128v96H320z\"\n      }),\n      _createElementVNode223(\"path\", {\n        fill: \"currentColor\",\n        d: \"M384 832h256v-64a128 128 0 1 0-256 0zm128-256a192 192 0 0 1 192 192v128H320V768a192 192 0 0 1 192-192M320 384h128v96H320zm256-192h128v96H576zm0 192h128v96H576z\"\n      })\n    ]));\n  }\n}), school_default = _sfc_main223;\n\n// src/components/scissor.vue\nimport { defineComponent as _defineComponent224 } from \"vue\";\nimport { createElementVNode as _createElementVNode224, openBlock as _openBlock224, createElementBlock as _createElementBlock224 } from \"vue\";\nvar _sfc_main224 = /* @__PURE__ */ _defineComponent224({\n  name: \"Scissor\",\n  __name: \"scissor\",\n  setup(__props) {\n    return (_ctx, _cache) => (_openBlock224(), _createElementBlock224(\"svg\", {\n      xmlns: \"http://www.w3.org/2000/svg\",\n      viewBox: \"0 0 1024 1024\"\n    }, [\n      _createElementVNode224(\"path\", {\n        fill: \"currentColor\",\n        d: \"m512.064 578.368-106.88 152.768a160 160 0 1 1-23.36-78.208L472.96 522.56 196.864 128.256a32 32 0 1 1 52.48-36.736l393.024 561.344a160 160 0 1 1-23.36 78.208l-106.88-152.704zm54.4-189.248 208.384-297.6a32 32 0 0 1 52.48 36.736l-221.76 316.672-39.04-55.808zm-376.32 425.856a96 96 0 1 0 110.144-157.248 96 96 0 0 0-110.08 157.248zm643.84 0a96 96 0 1 0-110.08-157.248 96 96 0 0 0 110.08 157.248\"\n      })\n    ]));\n  }\n}), scissor_default = _sfc_main224;\n\n// src/components/search.vue\nimport { defineComponent as _defineComponent225 } from \"vue\";\nimport { createElementVNode as _createElementVNode225, openBlock as _openBlock225, createElementBlock as _createElementBlock225 } from \"vue\";\nvar _sfc_main225 = /* @__PURE__ */ _defineComponent225({\n  name: \"Search\",\n  __name: \"search\",\n  setup(__props) {\n    return (_ctx, _cache) => (_openBlock225(), _createElementBlock225(\"svg\", {\n      xmlns: \"http://www.w3.org/2000/svg\",\n      viewBox: \"0 0 1024 1024\"\n    }, [\n      _createElementVNode225(\"path\", {\n        fill: \"currentColor\",\n        d: \"m795.904 750.72 124.992 124.928a32 32 0 0 1-45.248 45.248L750.656 795.904a416 416 0 1 1 45.248-45.248zM480 832a352 352 0 1 0 0-704 352 352 0 0 0 0 704\"\n      })\n    ]));\n  }\n}), search_default = _sfc_main225;\n\n// src/components/select.vue\nimport { defineComponent as _defineComponent226 } from \"vue\";\nimport { createElementVNode as _createElementVNode226, openBlock as _openBlock226, createElementBlock as _createElementBlock226 } from \"vue\";\nvar _sfc_main226 = /* @__PURE__ */ _defineComponent226({\n  name: \"Select\",\n  __name: \"select\",\n  setup(__props) {\n    return (_ctx, _cache) => (_openBlock226(), _createElementBlock226(\"svg\", {\n      xmlns: \"http://www.w3.org/2000/svg\",\n      viewBox: \"0 0 1024 1024\"\n    }, [\n      _createElementVNode226(\"path\", {\n        fill: \"currentColor\",\n        d: \"M77.248 415.04a64 64 0 0 1 90.496 0l226.304 226.304L846.528 188.8a64 64 0 1 1 90.56 90.496l-543.04 543.04-316.8-316.8a64 64 0 0 1 0-90.496\"\n      })\n    ]));\n  }\n}), select_default = _sfc_main226;\n\n// src/components/sell.vue\nimport { defineComponent as _defineComponent227 } from \"vue\";\nimport { createElementVNode as _createElementVNode227, openBlock as _openBlock227, createElementBlock as _createElementBlock227 } from \"vue\";\nvar _sfc_main227 = /* @__PURE__ */ _defineComponent227({\n  name: \"Sell\",\n  __name: \"sell\",\n  setup(__props) {\n    return (_ctx, _cache) => (_openBlock227(), _createElementBlock227(\"svg\", {\n      xmlns: \"http://www.w3.org/2000/svg\",\n      viewBox: \"0 0 1024 1024\"\n    }, [\n      _createElementVNode227(\"path\", {\n        fill: \"currentColor\",\n        d: \"M704 288h131.072a32 32 0 0 1 31.808 28.8L886.4 512h-64.384l-16-160H704v96a32 32 0 1 1-64 0v-96H384v96a32 32 0 0 1-64 0v-96H217.92l-51.2 512H512v64H131.328a32 32 0 0 1-31.808-35.2l57.6-576a32 32 0 0 1 31.808-28.8H320v-22.336C320 154.688 405.504 64 512 64s192 90.688 192 201.664v22.4zm-64 0v-22.336C640 189.248 582.272 128 512 128s-128 61.248-128 137.664v22.4h256zm201.408 483.84L768 698.496V928a32 32 0 1 1-64 0V698.496l-73.344 73.344a32 32 0 1 1-45.248-45.248l128-128a32 32 0 0 1 45.248 0l128 128a32 32 0 1 1-45.248 45.248\"\n      })\n    ]));\n  }\n}), sell_default = _sfc_main227;\n\n// src/components/semi-select.vue\nimport { defineComponent as _defineComponent228 } from \"vue\";\nimport { createElementVNode as _createElementVNode228, openBlock as _openBlock228, createElementBlock as _createElementBlock228 } from \"vue\";\nvar _sfc_main228 = /* @__PURE__ */ _defineComponent228({\n  name: \"SemiSelect\",\n  __name: \"semi-select\",\n  setup(__props) {\n    return (_ctx, _cache) => (_openBlock228(), _createElementBlock228(\"svg\", {\n      xmlns: \"http://www.w3.org/2000/svg\",\n      viewBox: \"0 0 1024 1024\"\n    }, [\n      _createElementVNode228(\"path\", {\n        fill: \"currentColor\",\n        d: \"M128 448h768q64 0 64 64t-64 64H128q-64 0-64-64t64-64\"\n      })\n    ]));\n  }\n}), semi_select_default = _sfc_main228;\n\n// src/components/service.vue\nimport { defineComponent as _defineComponent229 } from \"vue\";\nimport { createElementVNode as _createElementVNode229, openBlock as _openBlock229, createElementBlock as _createElementBlock229 } from \"vue\";\nvar _sfc_main229 = /* @__PURE__ */ _defineComponent229({\n  name: \"Service\",\n  __name: \"service\",\n  setup(__props) {\n    return (_ctx, _cache) => (_openBlock229(), _createElementBlock229(\"svg\", {\n      xmlns: \"http://www.w3.org/2000/svg\",\n      viewBox: \"0 0 1024 1024\"\n    }, [\n      _createElementVNode229(\"path\", {\n        fill: \"currentColor\",\n        d: \"M864 409.6a192 192 0 0 1-37.888 349.44A256.064 256.064 0 0 1 576 960h-96a32 32 0 1 1 0-64h96a192.06 192.06 0 0 0 181.12-128H736a32 32 0 0 1-32-32V416a32 32 0 0 1 32-32h32c10.368 0 20.544.832 30.528 2.432a288 288 0 0 0-573.056 0A193 193 0 0 1 256 384h32a32 32 0 0 1 32 32v320a32 32 0 0 1-32 32h-32a192 192 0 0 1-96-358.4 352 352 0 0 1 704 0M256 448a128 128 0 1 0 0 256zm640 128a128 128 0 0 0-128-128v256a128 128 0 0 0 128-128\"\n      })\n    ]));\n  }\n}), service_default = _sfc_main229;\n\n// src/components/set-up.vue\nimport { defineComponent as _defineComponent230 } from \"vue\";\nimport { createElementVNode as _createElementVNode230, openBlock as _openBlock230, createElementBlock as _createElementBlock230 } from \"vue\";\nvar _sfc_main230 = /* @__PURE__ */ _defineComponent230({\n  name: \"SetUp\",\n  __name: \"set-up\",\n  setup(__props) {\n    return (_ctx, _cache) => (_openBlock230(), _createElementBlock230(\"svg\", {\n      xmlns: \"http://www.w3.org/2000/svg\",\n      viewBox: \"0 0 1024 1024\"\n    }, [\n      _createElementVNode230(\"path\", {\n        fill: \"currentColor\",\n        d: \"M224 160a64 64 0 0 0-64 64v576a64 64 0 0 0 64 64h576a64 64 0 0 0 64-64V224a64 64 0 0 0-64-64zm0-64h576a128 128 0 0 1 128 128v576a128 128 0 0 1-128 128H224A128 128 0 0 1 96 800V224A128 128 0 0 1 224 96\"\n      }),\n      _createElementVNode230(\"path\", {\n        fill: \"currentColor\",\n        d: \"M384 416a64 64 0 1 0 0-128 64 64 0 0 0 0 128m0 64a128 128 0 1 1 0-256 128 128 0 0 1 0 256\"\n      }),\n      _createElementVNode230(\"path\", {\n        fill: \"currentColor\",\n        d: \"M480 320h256q32 0 32 32t-32 32H480q-32 0-32-32t32-32m160 416a64 64 0 1 0 0-128 64 64 0 0 0 0 128m0 64a128 128 0 1 1 0-256 128 128 0 0 1 0 256\"\n      }),\n      _createElementVNode230(\"path\", {\n        fill: \"currentColor\",\n        d: \"M288 640h256q32 0 32 32t-32 32H288q-32 0-32-32t32-32\"\n      })\n    ]));\n  }\n}), set_up_default = _sfc_main230;\n\n// src/components/setting.vue\nimport { defineComponent as _defineComponent231 } from \"vue\";\nimport { createElementVNode as _createElementVNode231, openBlock as _openBlock231, createElementBlock as _createElementBlock231 } from \"vue\";\nvar _sfc_main231 = /* @__PURE__ */ _defineComponent231({\n  name: \"Setting\",\n  __name: \"setting\",\n  setup(__props) {\n    return (_ctx, _cache) => (_openBlock231(), _createElementBlock231(\"svg\", {\n      xmlns: \"http://www.w3.org/2000/svg\",\n      viewBox: \"0 0 1024 1024\"\n    }, [\n      _createElementVNode231(\"path\", {\n        fill: \"currentColor\",\n        d: \"M600.704 64a32 32 0 0 1 30.464 22.208l35.2 109.376c14.784 7.232 28.928 15.36 42.432 24.512l112.384-24.192a32 32 0 0 1 34.432 15.36L944.32 364.8a32 32 0 0 1-4.032 37.504l-77.12 85.12a357 357 0 0 1 0 49.024l77.12 85.248a32 32 0 0 1 4.032 37.504l-88.704 153.6a32 32 0 0 1-34.432 15.296L708.8 803.904c-13.44 9.088-27.648 17.28-42.368 24.512l-35.264 109.376A32 32 0 0 1 600.704 960H423.296a32 32 0 0 1-30.464-22.208L357.696 828.48a352 352 0 0 1-42.56-24.64l-112.32 24.256a32 32 0 0 1-34.432-15.36L79.68 659.2a32 32 0 0 1 4.032-37.504l77.12-85.248a357 357 0 0 1 0-48.896l-77.12-85.248A32 32 0 0 1 79.68 364.8l88.704-153.6a32 32 0 0 1 34.432-15.296l112.32 24.256c13.568-9.152 27.776-17.408 42.56-24.64l35.2-109.312A32 32 0 0 1 423.232 64H600.64zm-23.424 64H446.72l-36.352 113.088-24.512 11.968a294 294 0 0 0-34.816 20.096l-22.656 15.36-116.224-25.088-65.28 113.152 79.68 88.192-1.92 27.136a293 293 0 0 0 0 40.192l1.92 27.136-79.808 88.192 65.344 113.152 116.224-25.024 22.656 15.296a294 294 0 0 0 34.816 20.096l24.512 11.968L446.72 896h130.688l36.48-113.152 24.448-11.904a288 288 0 0 0 34.752-20.096l22.592-15.296 116.288 25.024 65.28-113.152-79.744-88.192 1.92-27.136a293 293 0 0 0 0-40.256l-1.92-27.136 79.808-88.128-65.344-113.152-116.288 24.96-22.592-15.232a288 288 0 0 0-34.752-20.096l-24.448-11.904L577.344 128zM512 320a192 192 0 1 1 0 384 192 192 0 0 1 0-384m0 64a128 128 0 1 0 0 256 128 128 0 0 0 0-256\"\n      })\n    ]));\n  }\n}), setting_default = _sfc_main231;\n\n// src/components/share.vue\nimport { defineComponent as _defineComponent232 } from \"vue\";\nimport { createElementVNode as _createElementVNode232, openBlock as _openBlock232, createElementBlock as _createElementBlock232 } from \"vue\";\nvar _sfc_main232 = /* @__PURE__ */ _defineComponent232({\n  name: \"Share\",\n  __name: \"share\",\n  setup(__props) {\n    return (_ctx, _cache) => (_openBlock232(), _createElementBlock232(\"svg\", {\n      xmlns: \"http://www.w3.org/2000/svg\",\n      viewBox: \"0 0 1024 1024\"\n    }, [\n      _createElementVNode232(\"path\", {\n        fill: \"currentColor\",\n        d: \"m679.872 348.8-301.76 188.608a127.8 127.8 0 0 1 5.12 52.16l279.936 104.96a128 128 0 1 1-22.464 59.904l-279.872-104.96a128 128 0 1 1-16.64-166.272l301.696-188.608a128 128 0 1 1 33.92 54.272z\"\n      })\n    ]));\n  }\n}), share_default = _sfc_main232;\n\n// src/components/ship.vue\nimport { defineComponent as _defineComponent233 } from \"vue\";\nimport { createElementVNode as _createElementVNode233, openBlock as _openBlock233, createElementBlock as _createElementBlock233 } from \"vue\";\nvar _sfc_main233 = /* @__PURE__ */ _defineComponent233({\n  name: \"Ship\",\n  __name: \"ship\",\n  setup(__props) {\n    return (_ctx, _cache) => (_openBlock233(), _createElementBlock233(\"svg\", {\n      xmlns: \"http://www.w3.org/2000/svg\",\n      viewBox: \"0 0 1024 1024\"\n    }, [\n      _createElementVNode233(\"path\", {\n        fill: \"currentColor\",\n        d: \"M512 386.88V448h405.568a32 32 0 0 1 30.72 40.768l-76.48 267.968A192 192 0 0 1 687.168 896H336.832a192 192 0 0 1-184.64-139.264L75.648 488.768A32 32 0 0 1 106.368 448H448V117.888a32 32 0 0 1 47.36-28.096l13.888 7.616L512 96v2.88l231.68 126.4a32 32 0 0 1-2.048 57.216zm0-70.272 144.768-65.792L512 171.84zM512 512H148.864l18.24 64H856.96l18.24-64zM185.408 640l28.352 99.2A128 128 0 0 0 336.832 832h350.336a128 128 0 0 0 123.072-92.8l28.352-99.2z\"\n      })\n    ]));\n  }\n}), ship_default = _sfc_main233;\n\n// src/components/shop.vue\nimport { defineComponent as _defineComponent234 } from \"vue\";\nimport { createElementVNode as _createElementVNode234, openBlock as _openBlock234, createElementBlock as _createElementBlock234 } from \"vue\";\nvar _sfc_main234 = /* @__PURE__ */ _defineComponent234({\n  name: \"Shop\",\n  __name: \"shop\",\n  setup(__props) {\n    return (_ctx, _cache) => (_openBlock234(), _createElementBlock234(\"svg\", {\n      xmlns: \"http://www.w3.org/2000/svg\",\n      viewBox: \"0 0 1024 1024\"\n    }, [\n      _createElementVNode234(\"path\", {\n        fill: \"currentColor\",\n        d: \"M704 704h64v192H256V704h64v64h384zm188.544-152.192C894.528 559.616 896 567.616 896 576a96 96 0 1 1-192 0 96 96 0 1 1-192 0 96 96 0 1 1-192 0 96 96 0 1 1-192 0c0-8.384 1.408-16.384 3.392-24.192L192 128h640z\"\n      })\n    ]));\n  }\n}), shop_default = _sfc_main234;\n\n// src/components/shopping-bag.vue\nimport { defineComponent as _defineComponent235 } from \"vue\";\nimport { createElementVNode as _createElementVNode235, openBlock as _openBlock235, createElementBlock as _createElementBlock235 } from \"vue\";\nvar _sfc_main235 = /* @__PURE__ */ _defineComponent235({\n  name: \"ShoppingBag\",\n  __name: \"shopping-bag\",\n  setup(__props) {\n    return (_ctx, _cache) => (_openBlock235(), _createElementBlock235(\"svg\", {\n      xmlns: \"http://www.w3.org/2000/svg\",\n      viewBox: \"0 0 1024 1024\"\n    }, [\n      _createElementVNode235(\"path\", {\n        fill: \"currentColor\",\n        d: \"M704 320v96a32 32 0 0 1-32 32h-32V320H384v128h-32a32 32 0 0 1-32-32v-96H192v576h640V320zm-384-64a192 192 0 1 1 384 0h160a32 32 0 0 1 32 32v640a32 32 0 0 1-32 32H160a32 32 0 0 1-32-32V288a32 32 0 0 1 32-32zm64 0h256a128 128 0 1 0-256 0\"\n      }),\n      _createElementVNode235(\"path\", {\n        fill: \"currentColor\",\n        d: \"M192 704h640v64H192z\"\n      })\n    ]));\n  }\n}), shopping_bag_default = _sfc_main235;\n\n// src/components/shopping-cart-full.vue\nimport { defineComponent as _defineComponent236 } from \"vue\";\nimport { createElementVNode as _createElementVNode236, openBlock as _openBlock236, createElementBlock as _createElementBlock236 } from \"vue\";\nvar _sfc_main236 = /* @__PURE__ */ _defineComponent236({\n  name: \"ShoppingCartFull\",\n  __name: \"shopping-cart-full\",\n  setup(__props) {\n    return (_ctx, _cache) => (_openBlock236(), _createElementBlock236(\"svg\", {\n      xmlns: \"http://www.w3.org/2000/svg\",\n      viewBox: \"0 0 1024 1024\"\n    }, [\n      _createElementVNode236(\"path\", {\n        fill: \"currentColor\",\n        d: \"M432 928a48 48 0 1 1 0-96 48 48 0 0 1 0 96m320 0a48 48 0 1 1 0-96 48 48 0 0 1 0 96M96 128a32 32 0 0 1 0-64h160a32 32 0 0 1 31.36 25.728L320.64 256H928a32 32 0 0 1 31.296 38.72l-96 448A32 32 0 0 1 832 768H384a32 32 0 0 1-31.36-25.728L229.76 128zm314.24 576h395.904l82.304-384H333.44z\"\n      }),\n      _createElementVNode236(\"path\", {\n        fill: \"currentColor\",\n        d: \"M699.648 256 608 145.984 516.352 256zm-140.8-151.04a64 64 0 0 1 98.304 0L836.352 320H379.648z\"\n      })\n    ]));\n  }\n}), shopping_cart_full_default = _sfc_main236;\n\n// src/components/shopping-cart.vue\nimport { defineComponent as _defineComponent237 } from \"vue\";\nimport { createElementVNode as _createElementVNode237, openBlock as _openBlock237, createElementBlock as _createElementBlock237 } from \"vue\";\nvar _sfc_main237 = /* @__PURE__ */ _defineComponent237({\n  name: \"ShoppingCart\",\n  __name: \"shopping-cart\",\n  setup(__props) {\n    return (_ctx, _cache) => (_openBlock237(), _createElementBlock237(\"svg\", {\n      xmlns: \"http://www.w3.org/2000/svg\",\n      viewBox: \"0 0 1024 1024\"\n    }, [\n      _createElementVNode237(\"path\", {\n        fill: \"currentColor\",\n        d: \"M432 928a48 48 0 1 1 0-96 48 48 0 0 1 0 96m320 0a48 48 0 1 1 0-96 48 48 0 0 1 0 96M96 128a32 32 0 0 1 0-64h160a32 32 0 0 1 31.36 25.728L320.64 256H928a32 32 0 0 1 31.296 38.72l-96 448A32 32 0 0 1 832 768H384a32 32 0 0 1-31.36-25.728L229.76 128zm314.24 576h395.904l82.304-384H333.44z\"\n      })\n    ]));\n  }\n}), shopping_cart_default = _sfc_main237;\n\n// src/components/shopping-trolley.vue\nimport { defineComponent as _defineComponent238 } from \"vue\";\nimport { createElementVNode as _createElementVNode238, openBlock as _openBlock238, createElementBlock as _createElementBlock238 } from \"vue\";\nvar _sfc_main238 = /* @__PURE__ */ _defineComponent238({\n  name: \"ShoppingTrolley\",\n  __name: \"shopping-trolley\",\n  setup(__props) {\n    return (_ctx, _cache) => (_openBlock238(), _createElementBlock238(\"svg\", {\n      xmlns: \"http://www.w3.org/2000/svg\",\n      \"xml:space\": \"preserve\",\n      viewBox: \"0 0 1024 1024\"\n    }, [\n      _createElementVNode238(\"path\", {\n        fill: \"currentColor\",\n        d: \"M368 833c-13.3 0-24.5 4.5-33.5 13.5S321 866.7 321 880s4.5 24.5 13.5 33.5 20.2 13.8 33.5 14.5c13.3-.7 24.5-5.5 33.5-14.5S415 893.3 415 880s-4.5-24.5-13.5-33.5S381.3 833 368 833m439-193c7.4 0 13.8-2.2 19.5-6.5S836 623.3 838 616l112-448c2-10-.2-19.2-6.5-27.5S929 128 919 128H96c-9.3 0-17 3-23 9s-9 13.7-9 23 3 17 9 23 13.7 9 23 9h96v576h672c9.3 0 17-3 23-9s9-13.7 9-23-3-17-9-23-13.7-9-23-9H256v-64zM256 192h622l-96 384H256zm432 641c-13.3 0-24.5 4.5-33.5 13.5S641 866.7 641 880s4.5 24.5 13.5 33.5 20.2 13.8 33.5 14.5c13.3-.7 24.5-5.5 33.5-14.5S735 893.3 735 880s-4.5-24.5-13.5-33.5S701.3 833 688 833\"\n      })\n    ]));\n  }\n}), shopping_trolley_default = _sfc_main238;\n\n// src/components/smoking.vue\nimport { defineComponent as _defineComponent239 } from \"vue\";\nimport { createElementVNode as _createElementVNode239, openBlock as _openBlock239, createElementBlock as _createElementBlock239 } from \"vue\";\nvar _sfc_main239 = /* @__PURE__ */ _defineComponent239({\n  name: \"Smoking\",\n  __name: \"smoking\",\n  setup(__props) {\n    return (_ctx, _cache) => (_openBlock239(), _createElementBlock239(\"svg\", {\n      xmlns: \"http://www.w3.org/2000/svg\",\n      viewBox: \"0 0 1024 1024\"\n    }, [\n      _createElementVNode239(\"path\", {\n        fill: \"currentColor\",\n        d: \"M256 576v128h640V576zm-32-64h704a32 32 0 0 1 32 32v192a32 32 0 0 1-32 32H224a32 32 0 0 1-32-32V544a32 32 0 0 1 32-32\"\n      }),\n      _createElementVNode239(\"path\", {\n        fill: \"currentColor\",\n        d: \"M704 576h64v128h-64zM256 64h64v320h-64zM128 192h64v192h-64zM64 512h64v256H64z\"\n      })\n    ]));\n  }\n}), smoking_default = _sfc_main239;\n\n// src/components/soccer.vue\nimport { defineComponent as _defineComponent240 } from \"vue\";\nimport { createElementVNode as _createElementVNode240, openBlock as _openBlock240, createElementBlock as _createElementBlock240 } from \"vue\";\nvar _sfc_main240 = /* @__PURE__ */ _defineComponent240({\n  name: \"Soccer\",\n  __name: \"soccer\",\n  setup(__props) {\n    return (_ctx, _cache) => (_openBlock240(), _createElementBlock240(\"svg\", {\n      xmlns: \"http://www.w3.org/2000/svg\",\n      viewBox: \"0 0 1024 1024\"\n    }, [\n      _createElementVNode240(\"path\", {\n        fill: \"currentColor\",\n        d: \"M418.496 871.04 152.256 604.8c-16.512 94.016-2.368 178.624 42.944 224 44.928 44.928 129.344 58.752 223.296 42.24m72.32-18.176a573.06 573.06 0 0 0 224.832-137.216 573.1 573.1 0 0 0 137.216-224.832L533.888 171.84a578.56 578.56 0 0 0-227.52 138.496A567.7 567.7 0 0 0 170.432 532.48zM871.04 418.496c16.512-93.952 2.688-178.368-42.24-223.296-44.544-44.544-128.704-58.048-222.592-41.536zM149.952 874.048c-112.96-112.96-88.832-408.96 111.168-608.96C461.056 65.152 760.96 36.928 874.048 149.952c113.024 113.024 86.784 411.008-113.152 610.944s-497.92 226.112-610.944 113.152m452.544-497.792 22.656-22.656a32 32 0 0 1 45.248 45.248l-22.656 22.656 45.248 45.248A32 32 0 1 1 647.744 512l-45.248-45.248L557.248 512l45.248 45.248a32 32 0 1 1-45.248 45.248L512 557.248l-45.248 45.248L512 647.744a32 32 0 1 1-45.248 45.248l-45.248-45.248-22.656 22.656a32 32 0 1 1-45.248-45.248l22.656-22.656-45.248-45.248A32 32 0 1 1 376.256 512l45.248 45.248L466.752 512l-45.248-45.248a32 32 0 1 1 45.248-45.248L512 466.752l45.248-45.248L512 376.256a32 32 0 0 1 45.248-45.248z\"\n      })\n    ]));\n  }\n}), soccer_default = _sfc_main240;\n\n// src/components/sold-out.vue\nimport { defineComponent as _defineComponent241 } from \"vue\";\nimport { createElementVNode as _createElementVNode241, openBlock as _openBlock241, createElementBlock as _createElementBlock241 } from \"vue\";\nvar _sfc_main241 = /* @__PURE__ */ _defineComponent241({\n  name: \"SoldOut\",\n  __name: \"sold-out\",\n  setup(__props) {\n    return (_ctx, _cache) => (_openBlock241(), _createElementBlock241(\"svg\", {\n      xmlns: \"http://www.w3.org/2000/svg\",\n      viewBox: \"0 0 1024 1024\"\n    }, [\n      _createElementVNode241(\"path\", {\n        fill: \"currentColor\",\n        d: \"M704 288h131.072a32 32 0 0 1 31.808 28.8L886.4 512h-64.384l-16-160H704v96a32 32 0 1 1-64 0v-96H384v96a32 32 0 0 1-64 0v-96H217.92l-51.2 512H512v64H131.328a32 32 0 0 1-31.808-35.2l57.6-576a32 32 0 0 1 31.808-28.8H320v-22.336C320 154.688 405.504 64 512 64s192 90.688 192 201.664v22.4zm-64 0v-22.336C640 189.248 582.272 128 512 128s-128 61.248-128 137.664v22.4h256zm201.408 476.16a32 32 0 1 1 45.248 45.184l-128 128a32 32 0 0 1-45.248 0l-128-128a32 32 0 1 1 45.248-45.248L704 837.504V608a32 32 0 1 1 64 0v229.504l73.408-73.408z\"\n      })\n    ]));\n  }\n}), sold_out_default = _sfc_main241;\n\n// src/components/sort-down.vue\nimport { defineComponent as _defineComponent242 } from \"vue\";\nimport { createElementVNode as _createElementVNode242, openBlock as _openBlock242, createElementBlock as _createElementBlock242 } from \"vue\";\nvar _sfc_main242 = /* @__PURE__ */ _defineComponent242({\n  name: \"SortDown\",\n  __name: \"sort-down\",\n  setup(__props) {\n    return (_ctx, _cache) => (_openBlock242(), _createElementBlock242(\"svg\", {\n      xmlns: \"http://www.w3.org/2000/svg\",\n      viewBox: \"0 0 1024 1024\"\n    }, [\n      _createElementVNode242(\"path\", {\n        fill: \"currentColor\",\n        d: \"M576 96v709.568L333.312 562.816A32 32 0 1 0 288 608l297.408 297.344A32 32 0 0 0 640 882.688V96a32 32 0 0 0-64 0\"\n      })\n    ]));\n  }\n}), sort_down_default = _sfc_main242;\n\n// src/components/sort-up.vue\nimport { defineComponent as _defineComponent243 } from \"vue\";\nimport { createElementVNode as _createElementVNode243, openBlock as _openBlock243, createElementBlock as _createElementBlock243 } from \"vue\";\nvar _sfc_main243 = /* @__PURE__ */ _defineComponent243({\n  name: \"SortUp\",\n  __name: \"sort-up\",\n  setup(__props) {\n    return (_ctx, _cache) => (_openBlock243(), _createElementBlock243(\"svg\", {\n      xmlns: \"http://www.w3.org/2000/svg\",\n      viewBox: \"0 0 1024 1024\"\n    }, [\n      _createElementVNode243(\"path\", {\n        fill: \"currentColor\",\n        d: \"M384 141.248V928a32 32 0 1 0 64 0V218.56l242.688 242.688A32 32 0 1 0 736 416L438.592 118.656A32 32 0 0 0 384 141.248\"\n      })\n    ]));\n  }\n}), sort_up_default = _sfc_main243;\n\n// src/components/sort.vue\nimport { defineComponent as _defineComponent244 } from \"vue\";\nimport { createElementVNode as _createElementVNode244, openBlock as _openBlock244, createElementBlock as _createElementBlock244 } from \"vue\";\nvar _sfc_main244 = /* @__PURE__ */ _defineComponent244({\n  name: \"Sort\",\n  __name: \"sort\",\n  setup(__props) {\n    return (_ctx, _cache) => (_openBlock244(), _createElementBlock244(\"svg\", {\n      xmlns: \"http://www.w3.org/2000/svg\",\n      viewBox: \"0 0 1024 1024\"\n    }, [\n      _createElementVNode244(\"path\", {\n        fill: \"currentColor\",\n        d: \"M384 96a32 32 0 0 1 64 0v786.752a32 32 0 0 1-54.592 22.656L95.936 608a32 32 0 0 1 0-45.312h.128a32 32 0 0 1 45.184 0L384 805.632zm192 45.248a32 32 0 0 1 54.592-22.592L928.064 416a32 32 0 0 1 0 45.312h-.128a32 32 0 0 1-45.184 0L640 218.496V928a32 32 0 1 1-64 0z\"\n      })\n    ]));\n  }\n}), sort_default = _sfc_main244;\n\n// src/components/stamp.vue\nimport { defineComponent as _defineComponent245 } from \"vue\";\nimport { createElementVNode as _createElementVNode245, openBlock as _openBlock245, createElementBlock as _createElementBlock245 } from \"vue\";\nvar _sfc_main245 = /* @__PURE__ */ _defineComponent245({\n  name: \"Stamp\",\n  __name: \"stamp\",\n  setup(__props) {\n    return (_ctx, _cache) => (_openBlock245(), _createElementBlock245(\"svg\", {\n      xmlns: \"http://www.w3.org/2000/svg\",\n      viewBox: \"0 0 1024 1024\"\n    }, [\n      _createElementVNode245(\"path\", {\n        fill: \"currentColor\",\n        d: \"M624 475.968V640h144a128 128 0 0 1 128 128H128a128 128 0 0 1 128-128h144V475.968a192 192 0 1 1 224 0M128 896v-64h768v64z\"\n      })\n    ]));\n  }\n}), stamp_default = _sfc_main245;\n\n// src/components/star-filled.vue\nimport { defineComponent as _defineComponent246 } from \"vue\";\nimport { createElementVNode as _createElementVNode246, openBlock as _openBlock246, createElementBlock as _createElementBlock246 } from \"vue\";\nvar _sfc_main246 = /* @__PURE__ */ _defineComponent246({\n  name: \"StarFilled\",\n  __name: \"star-filled\",\n  setup(__props) {\n    return (_ctx, _cache) => (_openBlock246(), _createElementBlock246(\"svg\", {\n      xmlns: \"http://www.w3.org/2000/svg\",\n      viewBox: \"0 0 1024 1024\"\n    }, [\n      _createElementVNode246(\"path\", {\n        fill: \"currentColor\",\n        d: \"M313.6 924.48a70.4 70.4 0 0 1-74.152-5.365 70.4 70.4 0 0 1-27.992-68.875l37.888-220.928L88.96 472.96a70.4 70.4 0 0 1 3.788-104.225A70.4 70.4 0 0 1 128 352.896l221.76-32.256 99.2-200.96a70.4 70.4 0 0 1 100.246-28.595 70.4 70.4 0 0 1 25.962 28.595l99.2 200.96 221.824 32.256a70.4 70.4 0 0 1 39.04 120.064L774.72 629.376l37.888 220.928a70.4 70.4 0 0 1-102.144 74.24L512 820.096l-198.4 104.32z\"\n      })\n    ]));\n  }\n}), star_filled_default = _sfc_main246;\n\n// src/components/star.vue\nimport { defineComponent as _defineComponent247 } from \"vue\";\nimport { createElementVNode as _createElementVNode247, openBlock as _openBlock247, createElementBlock as _createElementBlock247 } from \"vue\";\nvar _sfc_main247 = /* @__PURE__ */ _defineComponent247({\n  name: \"Star\",\n  __name: \"star\",\n  setup(__props) {\n    return (_ctx, _cache) => (_openBlock247(), _createElementBlock247(\"svg\", {\n      xmlns: \"http://www.w3.org/2000/svg\",\n      viewBox: \"0 0 1024 1024\"\n    }, [\n      _createElementVNode247(\"path\", {\n        fill: \"currentColor\",\n        d: \"m512 747.84 228.16 119.936a6.4 6.4 0 0 0 9.28-6.72l-43.52-254.08 184.512-179.904a6.4 6.4 0 0 0-3.52-10.88l-255.104-37.12L517.76 147.904a6.4 6.4 0 0 0-11.52 0L392.192 379.072l-255.104 37.12a6.4 6.4 0 0 0-3.52 10.88L318.08 606.976l-43.584 254.08a6.4 6.4 0 0 0 9.28 6.72zM313.6 924.48a70.4 70.4 0 0 1-102.144-74.24l37.888-220.928L88.96 472.96A70.4 70.4 0 0 1 128 352.896l221.76-32.256 99.2-200.96a70.4 70.4 0 0 1 126.208 0l99.2 200.96 221.824 32.256a70.4 70.4 0 0 1 39.04 120.064L774.72 629.376l37.888 220.928a70.4 70.4 0 0 1-102.144 74.24L512 820.096l-198.4 104.32z\"\n      })\n    ]));\n  }\n}), star_default = _sfc_main247;\n\n// src/components/stopwatch.vue\nimport { defineComponent as _defineComponent248 } from \"vue\";\nimport { createElementVNode as _createElementVNode248, openBlock as _openBlock248, createElementBlock as _createElementBlock248 } from \"vue\";\nvar _sfc_main248 = /* @__PURE__ */ _defineComponent248({\n  name: \"Stopwatch\",\n  __name: \"stopwatch\",\n  setup(__props) {\n    return (_ctx, _cache) => (_openBlock248(), _createElementBlock248(\"svg\", {\n      xmlns: \"http://www.w3.org/2000/svg\",\n      viewBox: \"0 0 1024 1024\"\n    }, [\n      _createElementVNode248(\"path\", {\n        fill: \"currentColor\",\n        d: \"M512 896a384 384 0 1 0 0-768 384 384 0 0 0 0 768m0 64a448 448 0 1 1 0-896 448 448 0 0 1 0 896\"\n      }),\n      _createElementVNode248(\"path\", {\n        fill: \"currentColor\",\n        d: \"M672 234.88c-39.168 174.464-80 298.624-122.688 372.48-64 110.848-202.624 30.848-138.624-80C453.376 453.44 540.48 355.968 672 234.816z\"\n      })\n    ]));\n  }\n}), stopwatch_default = _sfc_main248;\n\n// src/components/success-filled.vue\nimport { defineComponent as _defineComponent249 } from \"vue\";\nimport { createElementVNode as _createElementVNode249, openBlock as _openBlock249, createElementBlock as _createElementBlock249 } from \"vue\";\nvar _sfc_main249 = /* @__PURE__ */ _defineComponent249({\n  name: \"SuccessFilled\",\n  __name: \"success-filled\",\n  setup(__props) {\n    return (_ctx, _cache) => (_openBlock249(), _createElementBlock249(\"svg\", {\n      xmlns: \"http://www.w3.org/2000/svg\",\n      viewBox: \"0 0 1024 1024\"\n    }, [\n      _createElementVNode249(\"path\", {\n        fill: \"currentColor\",\n        d: \"M512 64a448 448 0 1 1 0 896 448 448 0 0 1 0-896m-55.808 536.384-99.52-99.584a38.4 38.4 0 1 0-54.336 54.336l126.72 126.72a38.27 38.27 0 0 0 54.336 0l262.4-262.464a38.4 38.4 0 1 0-54.272-54.336z\"\n      })\n    ]));\n  }\n}), success_filled_default = _sfc_main249;\n\n// src/components/sugar.vue\nimport { defineComponent as _defineComponent250 } from \"vue\";\nimport { createElementVNode as _createElementVNode250, openBlock as _openBlock250, createElementBlock as _createElementBlock250 } from \"vue\";\nvar _sfc_main250 = /* @__PURE__ */ _defineComponent250({\n  name: \"Sugar\",\n  __name: \"sugar\",\n  setup(__props) {\n    return (_ctx, _cache) => (_openBlock250(), _createElementBlock250(\"svg\", {\n      xmlns: \"http://www.w3.org/2000/svg\",\n      viewBox: \"0 0 1024 1024\"\n    }, [\n      _createElementVNode250(\"path\", {\n        fill: \"currentColor\",\n        d: \"m801.728 349.184 4.48 4.48a128 128 0 0 1 0 180.992L534.656 806.144a128 128 0 0 1-181.056 0l-4.48-4.48-19.392 109.696a64 64 0 0 1-108.288 34.176L78.464 802.56a64 64 0 0 1 34.176-108.288l109.76-19.328-4.544-4.544a128 128 0 0 1 0-181.056l271.488-271.488a128 128 0 0 1 181.056 0l4.48 4.48 19.392-109.504a64 64 0 0 1 108.352-34.048l142.592 143.04a64 64 0 0 1-34.24 108.16zm-548.8 198.72h447.168v2.24l60.8-60.8a63.8 63.8 0 0 0 18.752-44.416h-426.88l-89.664 89.728a64 64 0 0 0-10.24 13.248zm0 64q4.128 7.104 10.176 13.248l135.744 135.744a64 64 0 0 0 90.496 0L638.4 611.904zm490.048-230.976L625.152 263.104a64 64 0 0 0-90.496 0L416.768 380.928zM123.712 757.312l142.976 142.976 24.32-137.6a25.6 25.6 0 0 0-29.696-29.632zm633.6-633.344-24.32 137.472a25.6 25.6 0 0 0 29.632 29.632l137.28-24.064-142.656-143.04z\"\n      })\n    ]));\n  }\n}), sugar_default = _sfc_main250;\n\n// src/components/suitcase-line.vue\nimport { defineComponent as _defineComponent251 } from \"vue\";\nimport { createElementVNode as _createElementVNode251, openBlock as _openBlock251, createElementBlock as _createElementBlock251 } from \"vue\";\nvar _sfc_main251 = /* @__PURE__ */ _defineComponent251({\n  name: \"SuitcaseLine\",\n  __name: \"suitcase-line\",\n  setup(__props) {\n    return (_ctx, _cache) => (_openBlock251(), _createElementBlock251(\"svg\", {\n      xmlns: \"http://www.w3.org/2000/svg\",\n      \"xml:space\": \"preserve\",\n      viewBox: \"0 0 1024 1024\"\n    }, [\n      _createElementVNode251(\"path\", {\n        fill: \"currentColor\",\n        d: \"M922.5 229.5c-24.32-24.34-54.49-36.84-90.5-37.5H704v-64c-.68-17.98-7.02-32.98-19.01-44.99S658.01 64.66 640 64H384c-17.98.68-32.98 7.02-44.99 19.01S320.66 110 320 128v64H192c-35.99.68-66.16 13.18-90.5 37.5S64.66 283.99 64 320v448c.68 35.99 13.18 66.16 37.5 90.5s54.49 36.84 90.5 37.5h640c35.99-.68 66.16-13.18 90.5-37.5s36.84-54.49 37.5-90.5V320c-.68-35.99-13.18-66.16-37.5-90.5M384 128h256v64H384zM256 832h-64c-17.98-.68-32.98-7.02-44.99-19.01S128.66 786.01 128 768V448h128zm448 0H320V448h384zm192-64c-.68 17.98-7.02 32.98-19.01 44.99S850.01 831.34 832 832h-64V448h128zm0-384H128v-64c.69-17.98 7.02-32.98 19.01-44.99S173.99 256.66 192 256h640c17.98.69 32.98 7.02 44.99 19.01S895.34 301.99 896 320z\"\n      })\n    ]));\n  }\n}), suitcase_line_default = _sfc_main251;\n\n// src/components/suitcase.vue\nimport { defineComponent as _defineComponent252 } from \"vue\";\nimport { createElementVNode as _createElementVNode252, openBlock as _openBlock252, createElementBlock as _createElementBlock252 } from \"vue\";\nvar _sfc_main252 = /* @__PURE__ */ _defineComponent252({\n  name: \"Suitcase\",\n  __name: \"suitcase\",\n  setup(__props) {\n    return (_ctx, _cache) => (_openBlock252(), _createElementBlock252(\"svg\", {\n      xmlns: \"http://www.w3.org/2000/svg\",\n      viewBox: \"0 0 1024 1024\"\n    }, [\n      _createElementVNode252(\"path\", {\n        fill: \"currentColor\",\n        d: \"M128 384h768v-64a64 64 0 0 0-64-64H192a64 64 0 0 0-64 64zm0 64v320a64 64 0 0 0 64 64h640a64 64 0 0 0 64-64V448zm64-256h640a128 128 0 0 1 128 128v448a128 128 0 0 1-128 128H192A128 128 0 0 1 64 768V320a128 128 0 0 1 128-128\"\n      }),\n      _createElementVNode252(\"path\", {\n        fill: \"currentColor\",\n        d: \"M384 128v64h256v-64zm0-64h256a64 64 0 0 1 64 64v64a64 64 0 0 1-64 64H384a64 64 0 0 1-64-64v-64a64 64 0 0 1 64-64\"\n      })\n    ]));\n  }\n}), suitcase_default = _sfc_main252;\n\n// src/components/sunny.vue\nimport { defineComponent as _defineComponent253 } from \"vue\";\nimport { createElementVNode as _createElementVNode253, openBlock as _openBlock253, createElementBlock as _createElementBlock253 } from \"vue\";\nvar _sfc_main253 = /* @__PURE__ */ _defineComponent253({\n  name: \"Sunny\",\n  __name: \"sunny\",\n  setup(__props) {\n    return (_ctx, _cache) => (_openBlock253(), _createElementBlock253(\"svg\", {\n      xmlns: \"http://www.w3.org/2000/svg\",\n      viewBox: \"0 0 1024 1024\"\n    }, [\n      _createElementVNode253(\"path\", {\n        fill: \"currentColor\",\n        d: \"M512 704a192 192 0 1 0 0-384 192 192 0 0 0 0 384m0 64a256 256 0 1 1 0-512 256 256 0 0 1 0 512m0-704a32 32 0 0 1 32 32v64a32 32 0 0 1-64 0V96a32 32 0 0 1 32-32m0 768a32 32 0 0 1 32 32v64a32 32 0 1 1-64 0v-64a32 32 0 0 1 32-32M195.2 195.2a32 32 0 0 1 45.248 0l45.248 45.248a32 32 0 1 1-45.248 45.248L195.2 240.448a32 32 0 0 1 0-45.248m543.104 543.104a32 32 0 0 1 45.248 0l45.248 45.248a32 32 0 0 1-45.248 45.248l-45.248-45.248a32 32 0 0 1 0-45.248M64 512a32 32 0 0 1 32-32h64a32 32 0 0 1 0 64H96a32 32 0 0 1-32-32m768 0a32 32 0 0 1 32-32h64a32 32 0 1 1 0 64h-64a32 32 0 0 1-32-32M195.2 828.8a32 32 0 0 1 0-45.248l45.248-45.248a32 32 0 0 1 45.248 45.248L240.448 828.8a32 32 0 0 1-45.248 0m543.104-543.104a32 32 0 0 1 0-45.248l45.248-45.248a32 32 0 0 1 45.248 45.248l-45.248 45.248a32 32 0 0 1-45.248 0\"\n      })\n    ]));\n  }\n}), sunny_default = _sfc_main253;\n\n// src/components/sunrise.vue\nimport { defineComponent as _defineComponent254 } from \"vue\";\nimport { createElementVNode as _createElementVNode254, openBlock as _openBlock254, createElementBlock as _createElementBlock254 } from \"vue\";\nvar _sfc_main254 = /* @__PURE__ */ _defineComponent254({\n  name: \"Sunrise\",\n  __name: \"sunrise\",\n  setup(__props) {\n    return (_ctx, _cache) => (_openBlock254(), _createElementBlock254(\"svg\", {\n      xmlns: \"http://www.w3.org/2000/svg\",\n      viewBox: \"0 0 1024 1024\"\n    }, [\n      _createElementVNode254(\"path\", {\n        fill: \"currentColor\",\n        d: \"M32 768h960a32 32 0 1 1 0 64H32a32 32 0 1 1 0-64m129.408-96a352 352 0 0 1 701.184 0h-64.32a288 288 0 0 0-572.544 0zM512 128a32 32 0 0 1 32 32v96a32 32 0 0 1-64 0v-96a32 32 0 0 1 32-32m407.296 168.704a32 32 0 0 1 0 45.248l-67.84 67.84a32 32 0 1 1-45.248-45.248l67.84-67.84a32 32 0 0 1 45.248 0m-814.592 0a32 32 0 0 1 45.248 0l67.84 67.84a32 32 0 1 1-45.248 45.248l-67.84-67.84a32 32 0 0 1 0-45.248\"\n      })\n    ]));\n  }\n}), sunrise_default = _sfc_main254;\n\n// src/components/sunset.vue\nimport { defineComponent as _defineComponent255 } from \"vue\";\nimport { createElementVNode as _createElementVNode255, openBlock as _openBlock255, createElementBlock as _createElementBlock255 } from \"vue\";\nvar _sfc_main255 = /* @__PURE__ */ _defineComponent255({\n  name: \"Sunset\",\n  __name: \"sunset\",\n  setup(__props) {\n    return (_ctx, _cache) => (_openBlock255(), _createElementBlock255(\"svg\", {\n      xmlns: \"http://www.w3.org/2000/svg\",\n      viewBox: \"0 0 1024 1024\"\n    }, [\n      _createElementVNode255(\"path\", {\n        fill: \"currentColor\",\n        d: \"M82.56 640a448 448 0 1 1 858.88 0h-67.2a384 384 0 1 0-724.288 0zM32 704h960q32 0 32 32t-32 32H32q-32 0-32-32t32-32m256 128h448q32 0 32 32t-32 32H288q-32 0-32-32t32-32\"\n      })\n    ]));\n  }\n}), sunset_default = _sfc_main255;\n\n// src/components/switch-button.vue\nimport { defineComponent as _defineComponent256 } from \"vue\";\nimport { createElementVNode as _createElementVNode256, openBlock as _openBlock256, createElementBlock as _createElementBlock256 } from \"vue\";\nvar _sfc_main256 = /* @__PURE__ */ _defineComponent256({\n  name: \"SwitchButton\",\n  __name: \"switch-button\",\n  setup(__props) {\n    return (_ctx, _cache) => (_openBlock256(), _createElementBlock256(\"svg\", {\n      xmlns: \"http://www.w3.org/2000/svg\",\n      viewBox: \"0 0 1024 1024\"\n    }, [\n      _createElementVNode256(\"path\", {\n        fill: \"currentColor\",\n        d: \"M352 159.872V230.4a352 352 0 1 0 320 0v-70.528A416.128 416.128 0 0 1 512 960a416 416 0 0 1-160-800.128\"\n      }),\n      _createElementVNode256(\"path\", {\n        fill: \"currentColor\",\n        d: \"M512 64q32 0 32 32v320q0 32-32 32t-32-32V96q0-32 32-32\"\n      })\n    ]));\n  }\n}), switch_button_default = _sfc_main256;\n\n// src/components/switch-filled.vue\nimport { defineComponent as _defineComponent257 } from \"vue\";\nimport { createElementVNode as _createElementVNode257, openBlock as _openBlock257, createElementBlock as _createElementBlock257 } from \"vue\";\nvar _sfc_main257 = /* @__PURE__ */ _defineComponent257({\n  name: \"SwitchFilled\",\n  __name: \"switch-filled\",\n  setup(__props) {\n    return (_ctx, _cache) => (_openBlock257(), _createElementBlock257(\"svg\", {\n      xmlns: \"http://www.w3.org/2000/svg\",\n      \"xml:space\": \"preserve\",\n      viewBox: \"0 0 1024 1024\"\n    }, [\n      _createElementVNode257(\"path\", {\n        fill: \"currentColor\",\n        d: \"M247.47 358.4v.04c.07 19.17 7.72 37.53 21.27 51.09s31.92 21.2 51.09 21.27c39.86 0 72.41-32.6 72.41-72.4s-32.6-72.36-72.41-72.36-72.36 32.55-72.36 72.36\"\n      }),\n      _createElementVNode257(\"path\", {\n        fill: \"currentColor\",\n        d: \"M492.38 128H324.7c-52.16 0-102.19 20.73-139.08 57.61a196.66 196.66 0 0 0-57.61 139.08V698.7c-.01 25.84 5.08 51.42 14.96 75.29s24.36 45.56 42.63 63.83 39.95 32.76 63.82 42.65a196.7 196.7 0 0 0 75.28 14.98h167.68c3.03 0 5.46-2.43 5.46-5.42V133.42c.6-2.99-1.83-5.42-5.46-5.42m-56.11 705.88H324.7c-17.76.13-35.36-3.33-51.75-10.18s-31.22-16.94-43.61-29.67c-25.3-25.35-39.81-59.1-39.81-95.32V324.69c-.13-17.75 3.33-35.35 10.17-51.74a131.7 131.7 0 0 1 29.64-43.62c25.39-25.3 59.14-39.81 95.36-39.81h111.57zm402.12-647.67a196.66 196.66 0 0 0-139.08-57.61H580.48c-3.03 0-4.82 2.43-4.82 4.82v757.16c-.6 2.99 1.79 5.42 5.42 5.42h118.23a196.7 196.7 0 0 0 139.08-57.61A196.66 196.66 0 0 0 896 699.31V325.29a196.7 196.7 0 0 0-57.61-139.08m-111.3 441.92c-42.83 0-77.82-34.99-77.82-77.82s34.98-77.82 77.82-77.82c42.83 0 77.82 34.99 77.82 77.82s-34.99 77.82-77.82 77.82\"\n      })\n    ]));\n  }\n}), switch_filled_default = _sfc_main257;\n\n// src/components/switch.vue\nimport { defineComponent as _defineComponent258 } from \"vue\";\nimport { createElementVNode as _createElementVNode258, openBlock as _openBlock258, createElementBlock as _createElementBlock258 } from \"vue\";\nvar _sfc_main258 = /* @__PURE__ */ _defineComponent258({\n  name: \"Switch\",\n  __name: \"switch\",\n  setup(__props) {\n    return (_ctx, _cache) => (_openBlock258(), _createElementBlock258(\"svg\", {\n      xmlns: \"http://www.w3.org/2000/svg\",\n      viewBox: \"0 0 1024 1024\"\n    }, [\n      _createElementVNode258(\"path\", {\n        fill: \"currentColor\",\n        d: \"M118.656 438.656a32 32 0 0 1 0-45.248L416 96l4.48-3.776A32 32 0 0 1 461.248 96l3.712 4.48a32.064 32.064 0 0 1-3.712 40.832L218.56 384H928a32 32 0 1 1 0 64H141.248a32 32 0 0 1-22.592-9.344M64 608a32 32 0 0 1 32-32h786.752a32 32 0 0 1 22.656 54.592L608 928l-4.48 3.776a32.064 32.064 0 0 1-40.832-49.024L805.632 640H96a32 32 0 0 1-32-32\"\n      })\n    ]));\n  }\n}), switch_default = _sfc_main258;\n\n// src/components/takeaway-box.vue\nimport { defineComponent as _defineComponent259 } from \"vue\";\nimport { createElementVNode as _createElementVNode259, openBlock as _openBlock259, createElementBlock as _createElementBlock259 } from \"vue\";\nvar _sfc_main259 = /* @__PURE__ */ _defineComponent259({\n  name: \"TakeawayBox\",\n  __name: \"takeaway-box\",\n  setup(__props) {\n    return (_ctx, _cache) => (_openBlock259(), _createElementBlock259(\"svg\", {\n      xmlns: \"http://www.w3.org/2000/svg\",\n      viewBox: \"0 0 1024 1024\"\n    }, [\n      _createElementVNode259(\"path\", {\n        fill: \"currentColor\",\n        d: \"M832 384H192v448h640zM96 320h832V128H96zm800 64v480a32 32 0 0 1-32 32H160a32 32 0 0 1-32-32V384H64a32 32 0 0 1-32-32V96a32 32 0 0 1 32-32h896a32 32 0 0 1 32 32v256a32 32 0 0 1-32 32zM416 512h192a32 32 0 0 1 0 64H416a32 32 0 0 1 0-64\"\n      })\n    ]));\n  }\n}), takeaway_box_default = _sfc_main259;\n\n// src/components/ticket.vue\nimport { defineComponent as _defineComponent260 } from \"vue\";\nimport { createElementVNode as _createElementVNode260, openBlock as _openBlock260, createElementBlock as _createElementBlock260 } from \"vue\";\nvar _sfc_main260 = /* @__PURE__ */ _defineComponent260({\n  name: \"Ticket\",\n  __name: \"ticket\",\n  setup(__props) {\n    return (_ctx, _cache) => (_openBlock260(), _createElementBlock260(\"svg\", {\n      xmlns: \"http://www.w3.org/2000/svg\",\n      viewBox: \"0 0 1024 1024\"\n    }, [\n      _createElementVNode260(\"path\", {\n        fill: \"currentColor\",\n        d: \"M640 832H64V640a128 128 0 1 0 0-256V192h576v160h64V192h256v192a128 128 0 1 0 0 256v192H704V672h-64zm0-416v192h64V416z\"\n      })\n    ]));\n  }\n}), ticket_default = _sfc_main260;\n\n// src/components/tickets.vue\nimport { defineComponent as _defineComponent261 } from \"vue\";\nimport { createElementVNode as _createElementVNode261, openBlock as _openBlock261, createElementBlock as _createElementBlock261 } from \"vue\";\nvar _sfc_main261 = /* @__PURE__ */ _defineComponent261({\n  name: \"Tickets\",\n  __name: \"tickets\",\n  setup(__props) {\n    return (_ctx, _cache) => (_openBlock261(), _createElementBlock261(\"svg\", {\n      xmlns: \"http://www.w3.org/2000/svg\",\n      viewBox: \"0 0 1024 1024\"\n    }, [\n      _createElementVNode261(\"path\", {\n        fill: \"currentColor\",\n        d: \"M192 128v768h640V128zm-32-64h704a32 32 0 0 1 32 32v832a32 32 0 0 1-32 32H160a32 32 0 0 1-32-32V96a32 32 0 0 1 32-32m160 448h384v64H320zm0-192h192v64H320zm0 384h384v64H320z\"\n      })\n    ]));\n  }\n}), tickets_default = _sfc_main261;\n\n// src/components/timer.vue\nimport { defineComponent as _defineComponent262 } from \"vue\";\nimport { createElementVNode as _createElementVNode262, openBlock as _openBlock262, createElementBlock as _createElementBlock262 } from \"vue\";\nvar _sfc_main262 = /* @__PURE__ */ _defineComponent262({\n  name: \"Timer\",\n  __name: \"timer\",\n  setup(__props) {\n    return (_ctx, _cache) => (_openBlock262(), _createElementBlock262(\"svg\", {\n      xmlns: \"http://www.w3.org/2000/svg\",\n      viewBox: \"0 0 1024 1024\"\n    }, [\n      _createElementVNode262(\"path\", {\n        fill: \"currentColor\",\n        d: \"M512 896a320 320 0 1 0 0-640 320 320 0 0 0 0 640m0 64a384 384 0 1 1 0-768 384 384 0 0 1 0 768\"\n      }),\n      _createElementVNode262(\"path\", {\n        fill: \"currentColor\",\n        d: \"M512 320a32 32 0 0 1 32 32l-.512 224a32 32 0 1 1-64 0L480 352a32 32 0 0 1 32-32\"\n      }),\n      _createElementVNode262(\"path\", {\n        fill: \"currentColor\",\n        d: \"M448 576a64 64 0 1 0 128 0 64 64 0 1 0-128 0m96-448v128h-64V128h-96a32 32 0 0 1 0-64h256a32 32 0 1 1 0 64z\"\n      })\n    ]));\n  }\n}), timer_default = _sfc_main262;\n\n// src/components/toilet-paper.vue\nimport { defineComponent as _defineComponent263 } from \"vue\";\nimport { createElementVNode as _createElementVNode263, openBlock as _openBlock263, createElementBlock as _createElementBlock263 } from \"vue\";\nvar _sfc_main263 = /* @__PURE__ */ _defineComponent263({\n  name: \"ToiletPaper\",\n  __name: \"toilet-paper\",\n  setup(__props) {\n    return (_ctx, _cache) => (_openBlock263(), _createElementBlock263(\"svg\", {\n      xmlns: \"http://www.w3.org/2000/svg\",\n      viewBox: \"0 0 1024 1024\"\n    }, [\n      _createElementVNode263(\"path\", {\n        fill: \"currentColor\",\n        d: \"M595.2 128H320a192 192 0 0 0-192 192v576h384V352c0-90.496 32.448-171.2 83.2-224M736 64c123.712 0 224 128.96 224 288S859.712 640 736 640H576v320H64V320A256 256 0 0 1 320 64zM576 352v224h160c84.352 0 160-97.28 160-224s-75.648-224-160-224-160 97.28-160 224\"\n      }),\n      _createElementVNode263(\"path\", {\n        fill: \"currentColor\",\n        d: \"M736 448c-35.328 0-64-43.008-64-96s28.672-96 64-96 64 43.008 64 96-28.672 96-64 96\"\n      })\n    ]));\n  }\n}), toilet_paper_default = _sfc_main263;\n\n// src/components/tools.vue\nimport { defineComponent as _defineComponent264 } from \"vue\";\nimport { createElementVNode as _createElementVNode264, openBlock as _openBlock264, createElementBlock as _createElementBlock264 } from \"vue\";\nvar _sfc_main264 = /* @__PURE__ */ _defineComponent264({\n  name: \"Tools\",\n  __name: \"tools\",\n  setup(__props) {\n    return (_ctx, _cache) => (_openBlock264(), _createElementBlock264(\"svg\", {\n      xmlns: \"http://www.w3.org/2000/svg\",\n      viewBox: \"0 0 1024 1024\"\n    }, [\n      _createElementVNode264(\"path\", {\n        fill: \"currentColor\",\n        d: \"M764.416 254.72a351.7 351.7 0 0 1 86.336 149.184H960v192.064H850.752a351.7 351.7 0 0 1-86.336 149.312l54.72 94.72-166.272 96-54.592-94.72a352.64 352.64 0 0 1-172.48 0L371.136 936l-166.272-96 54.72-94.72a351.7 351.7 0 0 1-86.336-149.312H64v-192h109.248a351.7 351.7 0 0 1 86.336-149.312L204.8 160l166.208-96h.192l54.656 94.592a352.64 352.64 0 0 1 172.48 0L652.8 64h.128L819.2 160l-54.72 94.72zM704 499.968a192 192 0 1 0-384 0 192 192 0 0 0 384 0\"\n      })\n    ]));\n  }\n}), tools_default = _sfc_main264;\n\n// src/components/top-left.vue\nimport { defineComponent as _defineComponent265 } from \"vue\";\nimport { createElementVNode as _createElementVNode265, openBlock as _openBlock265, createElementBlock as _createElementBlock265 } from \"vue\";\nvar _sfc_main265 = /* @__PURE__ */ _defineComponent265({\n  name: \"TopLeft\",\n  __name: \"top-left\",\n  setup(__props) {\n    return (_ctx, _cache) => (_openBlock265(), _createElementBlock265(\"svg\", {\n      xmlns: \"http://www.w3.org/2000/svg\",\n      viewBox: \"0 0 1024 1024\"\n    }, [\n      _createElementVNode265(\"path\", {\n        fill: \"currentColor\",\n        d: \"M256 256h416a32 32 0 1 0 0-64H224a32 32 0 0 0-32 32v448a32 32 0 0 0 64 0z\"\n      }),\n      _createElementVNode265(\"path\", {\n        fill: \"currentColor\",\n        d: \"M246.656 201.344a32 32 0 0 0-45.312 45.312l544 544a32 32 0 0 0 45.312-45.312z\"\n      })\n    ]));\n  }\n}), top_left_default = _sfc_main265;\n\n// src/components/top-right.vue\nimport { defineComponent as _defineComponent266 } from \"vue\";\nimport { createElementVNode as _createElementVNode266, openBlock as _openBlock266, createElementBlock as _createElementBlock266 } from \"vue\";\nvar _sfc_main266 = /* @__PURE__ */ _defineComponent266({\n  name: \"TopRight\",\n  __name: \"top-right\",\n  setup(__props) {\n    return (_ctx, _cache) => (_openBlock266(), _createElementBlock266(\"svg\", {\n      xmlns: \"http://www.w3.org/2000/svg\",\n      viewBox: \"0 0 1024 1024\"\n    }, [\n      _createElementVNode266(\"path\", {\n        fill: \"currentColor\",\n        d: \"M768 256H353.6a32 32 0 1 1 0-64H800a32 32 0 0 1 32 32v448a32 32 0 0 1-64 0z\"\n      }),\n      _createElementVNode266(\"path\", {\n        fill: \"currentColor\",\n        d: \"M777.344 201.344a32 32 0 0 1 45.312 45.312l-544 544a32 32 0 0 1-45.312-45.312z\"\n      })\n    ]));\n  }\n}), top_right_default = _sfc_main266;\n\n// src/components/top.vue\nimport { defineComponent as _defineComponent267 } from \"vue\";\nimport { createElementVNode as _createElementVNode267, openBlock as _openBlock267, createElementBlock as _createElementBlock267 } from \"vue\";\nvar _sfc_main267 = /* @__PURE__ */ _defineComponent267({\n  name: \"Top\",\n  __name: \"top\",\n  setup(__props) {\n    return (_ctx, _cache) => (_openBlock267(), _createElementBlock267(\"svg\", {\n      xmlns: \"http://www.w3.org/2000/svg\",\n      viewBox: \"0 0 1024 1024\"\n    }, [\n      _createElementVNode267(\"path\", {\n        fill: \"currentColor\",\n        d: \"M572.235 205.282v600.365a30.118 30.118 0 1 1-60.235 0V205.282L292.382 438.633a28.913 28.913 0 0 1-42.646 0 33.43 33.43 0 0 1 0-45.236l271.058-288.045a28.913 28.913 0 0 1 42.647 0L834.5 393.397a33.43 33.43 0 0 1 0 45.176 28.913 28.913 0 0 1-42.647 0l-219.618-233.23z\"\n      })\n    ]));\n  }\n}), top_default = _sfc_main267;\n\n// src/components/trend-charts.vue\nimport { defineComponent as _defineComponent268 } from \"vue\";\nimport { createElementVNode as _createElementVNode268, openBlock as _openBlock268, createElementBlock as _createElementBlock268 } from \"vue\";\nvar _sfc_main268 = /* @__PURE__ */ _defineComponent268({\n  name: \"TrendCharts\",\n  __name: \"trend-charts\",\n  setup(__props) {\n    return (_ctx, _cache) => (_openBlock268(), _createElementBlock268(\"svg\", {\n      xmlns: \"http://www.w3.org/2000/svg\",\n      viewBox: \"0 0 1024 1024\"\n    }, [\n      _createElementVNode268(\"path\", {\n        fill: \"currentColor\",\n        d: \"M128 896V128h768v768zm291.712-327.296 128 102.4 180.16-201.792-47.744-42.624-139.84 156.608-128-102.4-180.16 201.792 47.744 42.624zM816 352a48 48 0 1 0-96 0 48 48 0 0 0 96 0\"\n      })\n    ]));\n  }\n}), trend_charts_default = _sfc_main268;\n\n// src/components/trophy-base.vue\nimport { defineComponent as _defineComponent269 } from \"vue\";\nimport { createElementVNode as _createElementVNode269, openBlock as _openBlock269, createElementBlock as _createElementBlock269 } from \"vue\";\nvar _sfc_main269 = /* @__PURE__ */ _defineComponent269({\n  name: \"TrophyBase\",\n  __name: \"trophy-base\",\n  setup(__props) {\n    return (_ctx, _cache) => (_openBlock269(), _createElementBlock269(\"svg\", {\n      xmlns: \"http://www.w3.org/2000/svg\",\n      \"xml:space\": \"preserve\",\n      viewBox: \"0 0 1024 1024\"\n    }, [\n      _createElementVNode269(\"path\", {\n        fill: \"currentColor\",\n        d: \"M918.4 201.6c-6.4-6.4-12.8-9.6-22.4-9.6H768V96c0-9.6-3.2-16-9.6-22.4S745.6 64 736 64H288c-9.6 0-16 3.2-22.4 9.6S256 86.4 256 96v96H128c-9.6 0-16 3.2-22.4 9.6S96 217.6 96 224c3.2 108.8 25.6 185.6 64 224 34.4 34.4 77.56 55.65 127.65 61.99 10.91 20.44 24.78 39.25 41.95 56.41 40.86 40.86 91 65.47 150.4 71.9V768h-96c-9.6 0-16 3.2-22.4 9.6S352 790.4 352 800s3.2 16 9.6 22.4 12.8 9.6 22.4 9.6h256c9.6 0 16-3.2 22.4-9.6s9.6-12.8 9.6-22.4-3.2-16-9.6-22.4-12.8-9.6-22.4-9.6h-96V637.26c59.4-7.71 109.54-30.01 150.4-70.86 17.2-17.2 31.51-36.06 42.81-56.55 48.93-6.51 90.02-27.7 126.79-61.85 38.4-38.4 60.8-112 64-224 0-6.4-3.2-16-9.6-22.4M256 438.4c-19.2-6.4-35.2-19.2-51.2-35.2-22.4-22.4-35.2-70.4-41.6-147.2H256zm390.4 80C608 553.6 566.4 576 512 576s-99.2-19.2-134.4-57.6S320 438.4 320 384V128h384v256q0 81.6-57.6 134.4m172.8-115.2c-16 16-32 25.6-51.2 35.2V256h92.8c-6.4 76.8-19.2 124.8-41.6 147.2M768 896H256c-9.6 0-16 3.2-22.4 9.6S224 918.4 224 928s3.2 16 9.6 22.4 12.8 9.6 22.4 9.6h512c9.6 0 16-3.2 22.4-9.6s9.6-12.8 9.6-22.4-3.2-16-9.6-22.4-12.8-9.6-22.4-9.6\"\n      })\n    ]));\n  }\n}), trophy_base_default = _sfc_main269;\n\n// src/components/trophy.vue\nimport { defineComponent as _defineComponent270 } from \"vue\";\nimport { createElementVNode as _createElementVNode270, openBlock as _openBlock270, createElementBlock as _createElementBlock270 } from \"vue\";\nvar _sfc_main270 = /* @__PURE__ */ _defineComponent270({\n  name: \"Trophy\",\n  __name: \"trophy\",\n  setup(__props) {\n    return (_ctx, _cache) => (_openBlock270(), _createElementBlock270(\"svg\", {\n      xmlns: \"http://www.w3.org/2000/svg\",\n      viewBox: \"0 0 1024 1024\"\n    }, [\n      _createElementVNode270(\"path\", {\n        fill: \"currentColor\",\n        d: \"M480 896V702.08A256.26 256.26 0 0 1 264.064 512h-32.64a96 96 0 0 1-91.968-68.416L93.632 290.88a76.8 76.8 0 0 1 73.6-98.88H256V96a32 32 0 0 1 32-32h448a32 32 0 0 1 32 32v96h88.768a76.8 76.8 0 0 1 73.6 98.88L884.48 443.52A96 96 0 0 1 792.576 512h-32.64A256.26 256.26 0 0 1 544 702.08V896h128a32 32 0 1 1 0 64H352a32 32 0 1 1 0-64zm224-448V128H320v320a192 192 0 1 0 384 0m64 0h24.576a32 32 0 0 0 30.656-22.784l45.824-152.768A12.8 12.8 0 0 0 856.768 256H768zm-512 0V256h-88.768a12.8 12.8 0 0 0-12.288 16.448l45.824 152.768A32 32 0 0 0 231.424 448z\"\n      })\n    ]));\n  }\n}), trophy_default = _sfc_main270;\n\n// src/components/turn-off.vue\nimport { defineComponent as _defineComponent271 } from \"vue\";\nimport { createElementVNode as _createElementVNode271, openBlock as _openBlock271, createElementBlock as _createElementBlock271 } from \"vue\";\nvar _sfc_main271 = /* @__PURE__ */ _defineComponent271({\n  name: \"TurnOff\",\n  __name: \"turn-off\",\n  setup(__props) {\n    return (_ctx, _cache) => (_openBlock271(), _createElementBlock271(\"svg\", {\n      xmlns: \"http://www.w3.org/2000/svg\",\n      viewBox: \"0 0 1024 1024\"\n    }, [\n      _createElementVNode271(\"path\", {\n        fill: \"currentColor\",\n        d: \"M329.956 257.138a254.862 254.862 0 0 0 0 509.724h364.088a254.862 254.862 0 0 0 0-509.724zm0-72.818h364.088a327.68 327.68 0 1 1 0 655.36H329.956a327.68 327.68 0 1 1 0-655.36\"\n      }),\n      _createElementVNode271(\"path\", {\n        fill: \"currentColor\",\n        d: \"M329.956 621.227a109.227 109.227 0 1 0 0-218.454 109.227 109.227 0 0 0 0 218.454m0 72.817a182.044 182.044 0 1 1 0-364.088 182.044 182.044 0 0 1 0 364.088\"\n      })\n    ]));\n  }\n}), turn_off_default = _sfc_main271;\n\n// src/components/umbrella.vue\nimport { defineComponent as _defineComponent272 } from \"vue\";\nimport { createElementVNode as _createElementVNode272, openBlock as _openBlock272, createElementBlock as _createElementBlock272 } from \"vue\";\nvar _sfc_main272 = /* @__PURE__ */ _defineComponent272({\n  name: \"Umbrella\",\n  __name: \"umbrella\",\n  setup(__props) {\n    return (_ctx, _cache) => (_openBlock272(), _createElementBlock272(\"svg\", {\n      xmlns: \"http://www.w3.org/2000/svg\",\n      viewBox: \"0 0 1024 1024\"\n    }, [\n      _createElementVNode272(\"path\", {\n        fill: \"currentColor\",\n        d: \"M320 768a32 32 0 1 1 64 0 64 64 0 0 0 128 0V512H64a448 448 0 1 1 896 0H576v256a128 128 0 1 1-256 0m570.688-320a384.128 384.128 0 0 0-757.376 0z\"\n      })\n    ]));\n  }\n}), umbrella_default = _sfc_main272;\n\n// src/components/unlock.vue\nimport { defineComponent as _defineComponent273 } from \"vue\";\nimport { createElementVNode as _createElementVNode273, openBlock as _openBlock273, createElementBlock as _createElementBlock273 } from \"vue\";\nvar _sfc_main273 = /* @__PURE__ */ _defineComponent273({\n  name: \"Unlock\",\n  __name: \"unlock\",\n  setup(__props) {\n    return (_ctx, _cache) => (_openBlock273(), _createElementBlock273(\"svg\", {\n      xmlns: \"http://www.w3.org/2000/svg\",\n      viewBox: \"0 0 1024 1024\"\n    }, [\n      _createElementVNode273(\"path\", {\n        fill: \"currentColor\",\n        d: \"M224 448a32 32 0 0 0-32 32v384a32 32 0 0 0 32 32h576a32 32 0 0 0 32-32V480a32 32 0 0 0-32-32zm0-64h576a96 96 0 0 1 96 96v384a96 96 0 0 1-96 96H224a96 96 0 0 1-96-96V480a96 96 0 0 1 96-96\"\n      }),\n      _createElementVNode273(\"path\", {\n        fill: \"currentColor\",\n        d: \"M512 544a32 32 0 0 1 32 32v192a32 32 0 1 1-64 0V576a32 32 0 0 1 32-32m178.304-295.296A192.064 192.064 0 0 0 320 320v64h352l96 38.4V448H256V320a256 256 0 0 1 493.76-95.104z\"\n      })\n    ]));\n  }\n}), unlock_default = _sfc_main273;\n\n// src/components/upload-filled.vue\nimport { defineComponent as _defineComponent274 } from \"vue\";\nimport { createElementVNode as _createElementVNode274, openBlock as _openBlock274, createElementBlock as _createElementBlock274 } from \"vue\";\nvar _sfc_main274 = /* @__PURE__ */ _defineComponent274({\n  name: \"UploadFilled\",\n  __name: \"upload-filled\",\n  setup(__props) {\n    return (_ctx, _cache) => (_openBlock274(), _createElementBlock274(\"svg\", {\n      xmlns: \"http://www.w3.org/2000/svg\",\n      viewBox: \"0 0 1024 1024\"\n    }, [\n      _createElementVNode274(\"path\", {\n        fill: \"currentColor\",\n        d: \"M544 864V672h128L512 480 352 672h128v192H320v-1.6c-5.376.32-10.496 1.6-16 1.6A240 240 0 0 1 64 624c0-123.136 93.12-223.488 212.608-237.248A239.81 239.81 0 0 1 512 192a239.87 239.87 0 0 1 235.456 194.752c119.488 13.76 212.48 114.112 212.48 237.248a240 240 0 0 1-240 240c-5.376 0-10.56-1.28-16-1.6v1.6z\"\n      })\n    ]));\n  }\n}), upload_filled_default = _sfc_main274;\n\n// src/components/upload.vue\nimport { defineComponent as _defineComponent275 } from \"vue\";\nimport { createElementVNode as _createElementVNode275, openBlock as _openBlock275, createElementBlock as _createElementBlock275 } from \"vue\";\nvar _sfc_main275 = /* @__PURE__ */ _defineComponent275({\n  name: \"Upload\",\n  __name: \"upload\",\n  setup(__props) {\n    return (_ctx, _cache) => (_openBlock275(), _createElementBlock275(\"svg\", {\n      xmlns: \"http://www.w3.org/2000/svg\",\n      viewBox: \"0 0 1024 1024\"\n    }, [\n      _createElementVNode275(\"path\", {\n        fill: \"currentColor\",\n        d: \"M160 832h704a32 32 0 1 1 0 64H160a32 32 0 1 1 0-64m384-578.304V704h-64V247.296L237.248 490.048 192 444.8 508.8 128l316.8 316.8-45.312 45.248z\"\n      })\n    ]));\n  }\n}), upload_default = _sfc_main275;\n\n// src/components/user-filled.vue\nimport { defineComponent as _defineComponent276 } from \"vue\";\nimport { createElementVNode as _createElementVNode276, openBlock as _openBlock276, createElementBlock as _createElementBlock276 } from \"vue\";\nvar _sfc_main276 = /* @__PURE__ */ _defineComponent276({\n  name: \"UserFilled\",\n  __name: \"user-filled\",\n  setup(__props) {\n    return (_ctx, _cache) => (_openBlock276(), _createElementBlock276(\"svg\", {\n      xmlns: \"http://www.w3.org/2000/svg\",\n      viewBox: \"0 0 1024 1024\"\n    }, [\n      _createElementVNode276(\"path\", {\n        fill: \"currentColor\",\n        d: \"M288 320a224 224 0 1 0 448 0 224 224 0 1 0-448 0m544 608H160a32 32 0 0 1-32-32v-96a160 160 0 0 1 160-160h448a160 160 0 0 1 160 160v96a32 32 0 0 1-32 32z\"\n      })\n    ]));\n  }\n}), user_filled_default = _sfc_main276;\n\n// src/components/user.vue\nimport { defineComponent as _defineComponent277 } from \"vue\";\nimport { createElementVNode as _createElementVNode277, openBlock as _openBlock277, createElementBlock as _createElementBlock277 } from \"vue\";\nvar _sfc_main277 = /* @__PURE__ */ _defineComponent277({\n  name: \"User\",\n  __name: \"user\",\n  setup(__props) {\n    return (_ctx, _cache) => (_openBlock277(), _createElementBlock277(\"svg\", {\n      xmlns: \"http://www.w3.org/2000/svg\",\n      viewBox: \"0 0 1024 1024\"\n    }, [\n      _createElementVNode277(\"path\", {\n        fill: \"currentColor\",\n        d: \"M512 512a192 192 0 1 0 0-384 192 192 0 0 0 0 384m0 64a256 256 0 1 1 0-512 256 256 0 0 1 0 512m320 320v-96a96 96 0 0 0-96-96H288a96 96 0 0 0-96 96v96a32 32 0 1 1-64 0v-96a160 160 0 0 1 160-160h448a160 160 0 0 1 160 160v96a32 32 0 1 1-64 0\"\n      })\n    ]));\n  }\n}), user_default = _sfc_main277;\n\n// src/components/van.vue\nimport { defineComponent as _defineComponent278 } from \"vue\";\nimport { createElementVNode as _createElementVNode278, openBlock as _openBlock278, createElementBlock as _createElementBlock278 } from \"vue\";\nvar _sfc_main278 = /* @__PURE__ */ _defineComponent278({\n  name: \"Van\",\n  __name: \"van\",\n  setup(__props) {\n    return (_ctx, _cache) => (_openBlock278(), _createElementBlock278(\"svg\", {\n      xmlns: \"http://www.w3.org/2000/svg\",\n      viewBox: \"0 0 1024 1024\"\n    }, [\n      _createElementVNode278(\"path\", {\n        fill: \"currentColor\",\n        d: \"M128.896 736H96a32 32 0 0 1-32-32V224a32 32 0 0 1 32-32h576a32 32 0 0 1 32 32v96h164.544a32 32 0 0 1 31.616 27.136l54.144 352A32 32 0 0 1 922.688 736h-91.52a144 144 0 1 1-286.272 0H415.104a144 144 0 1 1-286.272 0zm23.36-64a143.872 143.872 0 0 1 239.488 0H568.32c17.088-25.6 42.24-45.376 71.744-55.808V256H128v416zm655.488 0h77.632l-19.648-128H704v64.896A144 144 0 0 1 807.744 672m48.128-192-14.72-96H704v96zM688 832a80 80 0 1 0 0-160 80 80 0 0 0 0 160m-416 0a80 80 0 1 0 0-160 80 80 0 0 0 0 160\"\n      })\n    ]));\n  }\n}), van_default = _sfc_main278;\n\n// src/components/video-camera-filled.vue\nimport { defineComponent as _defineComponent279 } from \"vue\";\nimport { createElementVNode as _createElementVNode279, openBlock as _openBlock279, createElementBlock as _createElementBlock279 } from \"vue\";\nvar _sfc_main279 = /* @__PURE__ */ _defineComponent279({\n  name: \"VideoCameraFilled\",\n  __name: \"video-camera-filled\",\n  setup(__props) {\n    return (_ctx, _cache) => (_openBlock279(), _createElementBlock279(\"svg\", {\n      xmlns: \"http://www.w3.org/2000/svg\",\n      viewBox: \"0 0 1024 1024\"\n    }, [\n      _createElementVNode279(\"path\", {\n        fill: \"currentColor\",\n        d: \"m768 576 192-64v320l-192-64v96a32 32 0 0 1-32 32H96a32 32 0 0 1-32-32V480a32 32 0 0 1 32-32h640a32 32 0 0 1 32 32zM192 768v64h384v-64zm192-480a160 160 0 0 1 320 0 160 160 0 0 1-320 0m64 0a96 96 0 1 0 192.064-.064A96 96 0 0 0 448 288m-320 32a128 128 0 1 1 256.064.064A128 128 0 0 1 128 320m64 0a64 64 0 1 0 128 0 64 64 0 0 0-128 0\"\n      })\n    ]));\n  }\n}), video_camera_filled_default = _sfc_main279;\n\n// src/components/video-camera.vue\nimport { defineComponent as _defineComponent280 } from \"vue\";\nimport { createElementVNode as _createElementVNode280, openBlock as _openBlock280, createElementBlock as _createElementBlock280 } from \"vue\";\nvar _sfc_main280 = /* @__PURE__ */ _defineComponent280({\n  name: \"VideoCamera\",\n  __name: \"video-camera\",\n  setup(__props) {\n    return (_ctx, _cache) => (_openBlock280(), _createElementBlock280(\"svg\", {\n      xmlns: \"http://www.w3.org/2000/svg\",\n      viewBox: \"0 0 1024 1024\"\n    }, [\n      _createElementVNode280(\"path\", {\n        fill: \"currentColor\",\n        d: \"M704 768V256H128v512zm64-416 192-96v512l-192-96v128a32 32 0 0 1-32 32H96a32 32 0 0 1-32-32V224a32 32 0 0 1 32-32h640a32 32 0 0 1 32 32zm0 71.552v176.896l128 64V359.552zM192 320h192v64H192z\"\n      })\n    ]));\n  }\n}), video_camera_default = _sfc_main280;\n\n// src/components/video-pause.vue\nimport { defineComponent as _defineComponent281 } from \"vue\";\nimport { createElementVNode as _createElementVNode281, openBlock as _openBlock281, createElementBlock as _createElementBlock281 } from \"vue\";\nvar _sfc_main281 = /* @__PURE__ */ _defineComponent281({\n  name: \"VideoPause\",\n  __name: \"video-pause\",\n  setup(__props) {\n    return (_ctx, _cache) => (_openBlock281(), _createElementBlock281(\"svg\", {\n      xmlns: \"http://www.w3.org/2000/svg\",\n      viewBox: \"0 0 1024 1024\"\n    }, [\n      _createElementVNode281(\"path\", {\n        fill: \"currentColor\",\n        d: \"M512 64a448 448 0 1 1 0 896 448 448 0 0 1 0-896m0 832a384 384 0 0 0 0-768 384 384 0 0 0 0 768m-96-544q32 0 32 32v256q0 32-32 32t-32-32V384q0-32 32-32m192 0q32 0 32 32v256q0 32-32 32t-32-32V384q0-32 32-32\"\n      })\n    ]));\n  }\n}), video_pause_default = _sfc_main281;\n\n// src/components/video-play.vue\nimport { defineComponent as _defineComponent282 } from \"vue\";\nimport { createElementVNode as _createElementVNode282, openBlock as _openBlock282, createElementBlock as _createElementBlock282 } from \"vue\";\nvar _sfc_main282 = /* @__PURE__ */ _defineComponent282({\n  name: \"VideoPlay\",\n  __name: \"video-play\",\n  setup(__props) {\n    return (_ctx, _cache) => (_openBlock282(), _createElementBlock282(\"svg\", {\n      xmlns: \"http://www.w3.org/2000/svg\",\n      viewBox: \"0 0 1024 1024\"\n    }, [\n      _createElementVNode282(\"path\", {\n        fill: \"currentColor\",\n        d: \"M512 64a448 448 0 1 1 0 896 448 448 0 0 1 0-896m0 832a384 384 0 0 0 0-768 384 384 0 0 0 0 768m-48-247.616L668.608 512 464 375.616zm10.624-342.656 249.472 166.336a48 48 0 0 1 0 79.872L474.624 718.272A48 48 0 0 1 400 678.336V345.6a48 48 0 0 1 74.624-39.936z\"\n      })\n    ]));\n  }\n}), video_play_default = _sfc_main282;\n\n// src/components/view.vue\nimport { defineComponent as _defineComponent283 } from \"vue\";\nimport { createElementVNode as _createElementVNode283, openBlock as _openBlock283, createElementBlock as _createElementBlock283 } from \"vue\";\nvar _sfc_main283 = /* @__PURE__ */ _defineComponent283({\n  name: \"View\",\n  __name: \"view\",\n  setup(__props) {\n    return (_ctx, _cache) => (_openBlock283(), _createElementBlock283(\"svg\", {\n      xmlns: \"http://www.w3.org/2000/svg\",\n      viewBox: \"0 0 1024 1024\"\n    }, [\n      _createElementVNode283(\"path\", {\n        fill: \"currentColor\",\n        d: \"M512 160c320 0 512 352 512 352S832 864 512 864 0 512 0 512s192-352 512-352m0 64c-225.28 0-384.128 208.064-436.8 288 52.608 79.872 211.456 288 436.8 288 225.28 0 384.128-208.064 436.8-288-52.608-79.872-211.456-288-436.8-288m0 64a224 224 0 1 1 0 448 224 224 0 0 1 0-448m0 64a160.19 160.19 0 0 0-160 160c0 88.192 71.744 160 160 160s160-71.808 160-160-71.744-160-160-160\"\n      })\n    ]));\n  }\n}), view_default = _sfc_main283;\n\n// src/components/wallet-filled.vue\nimport { defineComponent as _defineComponent284 } from \"vue\";\nimport { createElementVNode as _createElementVNode284, openBlock as _openBlock284, createElementBlock as _createElementBlock284 } from \"vue\";\nvar _sfc_main284 = /* @__PURE__ */ _defineComponent284({\n  name: \"WalletFilled\",\n  __name: \"wallet-filled\",\n  setup(__props) {\n    return (_ctx, _cache) => (_openBlock284(), _createElementBlock284(\"svg\", {\n      xmlns: \"http://www.w3.org/2000/svg\",\n      viewBox: \"0 0 1024 1024\"\n    }, [\n      _createElementVNode284(\"path\", {\n        fill: \"currentColor\",\n        d: \"M688 512a112 112 0 1 0 0 224h208v160H128V352h768v160zm32 160h-32a48 48 0 0 1 0-96h32a48 48 0 0 1 0 96m-80-544 128 160H384z\"\n      })\n    ]));\n  }\n}), wallet_filled_default = _sfc_main284;\n\n// src/components/wallet.vue\nimport { defineComponent as _defineComponent285 } from \"vue\";\nimport { createElementVNode as _createElementVNode285, openBlock as _openBlock285, createElementBlock as _createElementBlock285 } from \"vue\";\nvar _sfc_main285 = /* @__PURE__ */ _defineComponent285({\n  name: \"Wallet\",\n  __name: \"wallet\",\n  setup(__props) {\n    return (_ctx, _cache) => (_openBlock285(), _createElementBlock285(\"svg\", {\n      xmlns: \"http://www.w3.org/2000/svg\",\n      viewBox: \"0 0 1024 1024\"\n    }, [\n      _createElementVNode285(\"path\", {\n        fill: \"currentColor\",\n        d: \"M640 288h-64V128H128v704h384v32a32 32 0 0 0 32 32H96a32 32 0 0 1-32-32V96a32 32 0 0 1 32-32h512a32 32 0 0 1 32 32z\"\n      }),\n      _createElementVNode285(\"path\", {\n        fill: \"currentColor\",\n        d: \"M128 320v512h768V320zm-32-64h832a32 32 0 0 1 32 32v576a32 32 0 0 1-32 32H96a32 32 0 0 1-32-32V288a32 32 0 0 1 32-32\"\n      }),\n      _createElementVNode285(\"path\", {\n        fill: \"currentColor\",\n        d: \"M704 640a64 64 0 1 1 0-128 64 64 0 0 1 0 128\"\n      })\n    ]));\n  }\n}), wallet_default = _sfc_main285;\n\n// src/components/warn-triangle-filled.vue\nimport { defineComponent as _defineComponent286 } from \"vue\";\nimport { createElementVNode as _createElementVNode286, openBlock as _openBlock286, createElementBlock as _createElementBlock286 } from \"vue\";\nvar _sfc_main286 = /* @__PURE__ */ _defineComponent286({\n  name: \"WarnTriangleFilled\",\n  __name: \"warn-triangle-filled\",\n  setup(__props) {\n    return (_ctx, _cache) => (_openBlock286(), _createElementBlock286(\"svg\", {\n      xmlns: \"http://www.w3.org/2000/svg\",\n      \"xml:space\": \"preserve\",\n      viewBox: \"0 0 1024 1024\"\n    }, [\n      _createElementVNode286(\"path\", {\n        fill: \"currentColor\",\n        d: \"M928.99 755.83 574.6 203.25c-12.89-20.16-36.76-32.58-62.6-32.58s-49.71 12.43-62.6 32.58L95.01 755.83c-12.91 20.12-12.9 44.91.01 65.03 12.92 20.12 36.78 32.51 62.59 32.49h708.78c25.82.01 49.68-12.37 62.59-32.49s12.92-44.91.01-65.03M554.67 768h-85.33v-85.33h85.33zm0-426.67v298.66h-85.33V341.32z\"\n      })\n    ]));\n  }\n}), warn_triangle_filled_default = _sfc_main286;\n\n// src/components/warning-filled.vue\nimport { defineComponent as _defineComponent287 } from \"vue\";\nimport { createElementVNode as _createElementVNode287, openBlock as _openBlock287, createElementBlock as _createElementBlock287 } from \"vue\";\nvar _sfc_main287 = /* @__PURE__ */ _defineComponent287({\n  name: \"WarningFilled\",\n  __name: \"warning-filled\",\n  setup(__props) {\n    return (_ctx, _cache) => (_openBlock287(), _createElementBlock287(\"svg\", {\n      xmlns: \"http://www.w3.org/2000/svg\",\n      viewBox: \"0 0 1024 1024\"\n    }, [\n      _createElementVNode287(\"path\", {\n        fill: \"currentColor\",\n        d: \"M512 64a448 448 0 1 1 0 896 448 448 0 0 1 0-896m0 192a58.43 58.43 0 0 0-58.24 63.744l23.36 256.384a35.072 35.072 0 0 0 69.76 0l23.296-256.384A58.43 58.43 0 0 0 512 256m0 512a51.2 51.2 0 1 0 0-102.4 51.2 51.2 0 0 0 0 102.4\"\n      })\n    ]));\n  }\n}), warning_filled_default = _sfc_main287;\n\n// src/components/warning.vue\nimport { defineComponent as _defineComponent288 } from \"vue\";\nimport { createElementVNode as _createElementVNode288, openBlock as _openBlock288, createElementBlock as _createElementBlock288 } from \"vue\";\nvar _sfc_main288 = /* @__PURE__ */ _defineComponent288({\n  name: \"Warning\",\n  __name: \"warning\",\n  setup(__props) {\n    return (_ctx, _cache) => (_openBlock288(), _createElementBlock288(\"svg\", {\n      xmlns: \"http://www.w3.org/2000/svg\",\n      viewBox: \"0 0 1024 1024\"\n    }, [\n      _createElementVNode288(\"path\", {\n        fill: \"currentColor\",\n        d: \"M512 64a448 448 0 1 1 0 896 448 448 0 0 1 0-896m0 832a384 384 0 0 0 0-768 384 384 0 0 0 0 768m48-176a48 48 0 1 1-96 0 48 48 0 0 1 96 0m-48-464a32 32 0 0 1 32 32v288a32 32 0 0 1-64 0V288a32 32 0 0 1 32-32\"\n      })\n    ]));\n  }\n}), warning_default = _sfc_main288;\n\n// src/components/watch.vue\nimport { defineComponent as _defineComponent289 } from \"vue\";\nimport { createElementVNode as _createElementVNode289, openBlock as _openBlock289, createElementBlock as _createElementBlock289 } from \"vue\";\nvar _sfc_main289 = /* @__PURE__ */ _defineComponent289({\n  name: \"Watch\",\n  __name: \"watch\",\n  setup(__props) {\n    return (_ctx, _cache) => (_openBlock289(), _createElementBlock289(\"svg\", {\n      xmlns: \"http://www.w3.org/2000/svg\",\n      viewBox: \"0 0 1024 1024\"\n    }, [\n      _createElementVNode289(\"path\", {\n        fill: \"currentColor\",\n        d: \"M512 768a256 256 0 1 0 0-512 256 256 0 0 0 0 512m0 64a320 320 0 1 1 0-640 320 320 0 0 1 0 640\"\n      }),\n      _createElementVNode289(\"path\", {\n        fill: \"currentColor\",\n        d: \"M480 352a32 32 0 0 1 32 32v160a32 32 0 0 1-64 0V384a32 32 0 0 1 32-32\"\n      }),\n      _createElementVNode289(\"path\", {\n        fill: \"currentColor\",\n        d: \"M480 512h128q32 0 32 32t-32 32H480q-32 0-32-32t32-32m128-256V128H416v128h-64V64h320v192zM416 768v128h192V768h64v192H352V768z\"\n      })\n    ]));\n  }\n}), watch_default = _sfc_main289;\n\n// src/components/watermelon.vue\nimport { defineComponent as _defineComponent290 } from \"vue\";\nimport { createElementVNode as _createElementVNode290, openBlock as _openBlock290, createElementBlock as _createElementBlock290 } from \"vue\";\nvar _sfc_main290 = /* @__PURE__ */ _defineComponent290({\n  name: \"Watermelon\",\n  __name: \"watermelon\",\n  setup(__props) {\n    return (_ctx, _cache) => (_openBlock290(), _createElementBlock290(\"svg\", {\n      xmlns: \"http://www.w3.org/2000/svg\",\n      viewBox: \"0 0 1024 1024\"\n    }, [\n      _createElementVNode290(\"path\", {\n        fill: \"currentColor\",\n        d: \"m683.072 600.32-43.648 162.816-61.824-16.512 53.248-198.528L576 493.248l-158.4 158.4-45.248-45.248 158.4-158.4-55.616-55.616-198.528 53.248-16.512-61.824 162.816-43.648L282.752 200A384 384 0 0 0 824 741.248zm231.552 141.056a448 448 0 1 1-632-632z\"\n      })\n    ]));\n  }\n}), watermelon_default = _sfc_main290;\n\n// src/components/wind-power.vue\nimport { defineComponent as _defineComponent291 } from \"vue\";\nimport { createElementVNode as _createElementVNode291, openBlock as _openBlock291, createElementBlock as _createElementBlock291 } from \"vue\";\nvar _sfc_main291 = /* @__PURE__ */ _defineComponent291({\n  name: \"WindPower\",\n  __name: \"wind-power\",\n  setup(__props) {\n    return (_ctx, _cache) => (_openBlock291(), _createElementBlock291(\"svg\", {\n      xmlns: \"http://www.w3.org/2000/svg\",\n      viewBox: \"0 0 1024 1024\"\n    }, [\n      _createElementVNode291(\"path\", {\n        fill: \"currentColor\",\n        d: \"M160 64q32 0 32 32v832q0 32-32 32t-32-32V96q0-32 32-32m416 354.624 128-11.584V168.96l-128-11.52v261.12zm-64 5.824V151.552L320 134.08V160h-64V64l616.704 56.064A96 96 0 0 1 960 215.68v144.64a96 96 0 0 1-87.296 95.616L256 512V224h64v217.92zm256-23.232 98.88-8.96A32 32 0 0 0 896 360.32V215.68a32 32 0 0 0-29.12-31.872l-98.88-8.96z\"\n      })\n    ]));\n  }\n}), wind_power_default = _sfc_main291;\n\n// src/components/zoom-in.vue\nimport { defineComponent as _defineComponent292 } from \"vue\";\nimport { createElementVNode as _createElementVNode292, openBlock as _openBlock292, createElementBlock as _createElementBlock292 } from \"vue\";\nvar _sfc_main292 = /* @__PURE__ */ _defineComponent292({\n  name: \"ZoomIn\",\n  __name: \"zoom-in\",\n  setup(__props) {\n    return (_ctx, _cache) => (_openBlock292(), _createElementBlock292(\"svg\", {\n      xmlns: \"http://www.w3.org/2000/svg\",\n      viewBox: \"0 0 1024 1024\"\n    }, [\n      _createElementVNode292(\"path\", {\n        fill: \"currentColor\",\n        d: \"m795.904 750.72 124.992 124.928a32 32 0 0 1-45.248 45.248L750.656 795.904a416 416 0 1 1 45.248-45.248zM480 832a352 352 0 1 0 0-704 352 352 0 0 0 0 704m-32-384v-96a32 32 0 0 1 64 0v96h96a32 32 0 0 1 0 64h-96v96a32 32 0 0 1-64 0v-96h-96a32 32 0 0 1 0-64z\"\n      })\n    ]));\n  }\n}), zoom_in_default = _sfc_main292;\n\n// src/components/zoom-out.vue\nimport { defineComponent as _defineComponent293 } from \"vue\";\nimport { createElementVNode as _createElementVNode293, openBlock as _openBlock293, createElementBlock as _createElementBlock293 } from \"vue\";\nvar _sfc_main293 = /* @__PURE__ */ _defineComponent293({\n  name: \"ZoomOut\",\n  __name: \"zoom-out\",\n  setup(__props) {\n    return (_ctx, _cache) => (_openBlock293(), _createElementBlock293(\"svg\", {\n      xmlns: \"http://www.w3.org/2000/svg\",\n      viewBox: \"0 0 1024 1024\"\n    }, [\n      _createElementVNode293(\"path\", {\n        fill: \"currentColor\",\n        d: \"m795.904 750.72 124.992 124.928a32 32 0 0 1-45.248 45.248L750.656 795.904a416 416 0 1 1 45.248-45.248zM480 832a352 352 0 1 0 0-704 352 352 0 0 0 0 704M352 448h256a32 32 0 0 1 0 64H352a32 32 0 0 1 0-64\"\n      })\n    ]));\n  }\n}), zoom_out_default = _sfc_main293;\nexport {\n  add_location_default as AddLocation,\n  aim_default as Aim,\n  alarm_clock_default as AlarmClock,\n  apple_default as Apple,\n  arrow_down_default as ArrowDown,\n  arrow_down_bold_default as ArrowDownBold,\n  arrow_left_default as ArrowLeft,\n  arrow_left_bold_default as ArrowLeftBold,\n  arrow_right_default as ArrowRight,\n  arrow_right_bold_default as ArrowRightBold,\n  arrow_up_default as ArrowUp,\n  arrow_up_bold_default as ArrowUpBold,\n  avatar_default as Avatar,\n  back_default as Back,\n  baseball_default as Baseball,\n  basketball_default as Basketball,\n  bell_default as Bell,\n  bell_filled_default as BellFilled,\n  bicycle_default as Bicycle,\n  bottom_default as Bottom,\n  bottom_left_default as BottomLeft,\n  bottom_right_default as BottomRight,\n  bowl_default as Bowl,\n  box_default as Box,\n  briefcase_default as Briefcase,\n  brush_default as Brush,\n  brush_filled_default as BrushFilled,\n  burger_default as Burger,\n  calendar_default as Calendar,\n  camera_default as Camera,\n  camera_filled_default as CameraFilled,\n  caret_bottom_default as CaretBottom,\n  caret_left_default as CaretLeft,\n  caret_right_default as CaretRight,\n  caret_top_default as CaretTop,\n  cellphone_default as Cellphone,\n  chat_dot_round_default as ChatDotRound,\n  chat_dot_square_default as ChatDotSquare,\n  chat_line_round_default as ChatLineRound,\n  chat_line_square_default as ChatLineSquare,\n  chat_round_default as ChatRound,\n  chat_square_default as ChatSquare,\n  check_default as Check,\n  checked_default as Checked,\n  cherry_default as Cherry,\n  chicken_default as Chicken,\n  chrome_filled_default as ChromeFilled,\n  circle_check_default as CircleCheck,\n  circle_check_filled_default as CircleCheckFilled,\n  circle_close_default as CircleClose,\n  circle_close_filled_default as CircleCloseFilled,\n  circle_plus_default as CirclePlus,\n  circle_plus_filled_default as CirclePlusFilled,\n  clock_default as Clock,\n  close_default as Close,\n  close_bold_default as CloseBold,\n  cloudy_default as Cloudy,\n  coffee_default as Coffee,\n  coffee_cup_default as CoffeeCup,\n  coin_default as Coin,\n  cold_drink_default as ColdDrink,\n  collection_default as Collection,\n  collection_tag_default as CollectionTag,\n  comment_default as Comment,\n  compass_default as Compass,\n  connection_default as Connection,\n  coordinate_default as Coordinate,\n  copy_document_default as CopyDocument,\n  cpu_default as Cpu,\n  credit_card_default as CreditCard,\n  crop_default as Crop,\n  d_arrow_left_default as DArrowLeft,\n  d_arrow_right_default as DArrowRight,\n  d_caret_default as DCaret,\n  data_analysis_default as DataAnalysis,\n  data_board_default as DataBoard,\n  data_line_default as DataLine,\n  delete_default as Delete,\n  delete_filled_default as DeleteFilled,\n  delete_location_default as DeleteLocation,\n  dessert_default as Dessert,\n  discount_default as Discount,\n  dish_default as Dish,\n  dish_dot_default as DishDot,\n  document_default as Document,\n  document_add_default as DocumentAdd,\n  document_checked_default as DocumentChecked,\n  document_copy_default as DocumentCopy,\n  document_delete_default as DocumentDelete,\n  document_remove_default as DocumentRemove,\n  download_default as Download,\n  drizzling_default as Drizzling,\n  edit_default as Edit,\n  edit_pen_default as EditPen,\n  eleme_default as Eleme,\n  eleme_filled_default as ElemeFilled,\n  element_plus_default as ElementPlus,\n  expand_default as Expand,\n  failed_default as Failed,\n  female_default as Female,\n  files_default as Files,\n  film_default as Film,\n  filter_default as Filter,\n  finished_default as Finished,\n  first_aid_kit_default as FirstAidKit,\n  flag_default as Flag,\n  fold_default as Fold,\n  folder_default as Folder,\n  folder_add_default as FolderAdd,\n  folder_checked_default as FolderChecked,\n  folder_delete_default as FolderDelete,\n  folder_opened_default as FolderOpened,\n  folder_remove_default as FolderRemove,\n  food_default as Food,\n  football_default as Football,\n  fork_spoon_default as ForkSpoon,\n  fries_default as Fries,\n  full_screen_default as FullScreen,\n  goblet_default as Goblet,\n  goblet_full_default as GobletFull,\n  goblet_square_default as GobletSquare,\n  goblet_square_full_default as GobletSquareFull,\n  gold_medal_default as GoldMedal,\n  goods_default as Goods,\n  goods_filled_default as GoodsFilled,\n  grape_default as Grape,\n  grid_default as Grid,\n  guide_default as Guide,\n  handbag_default as Handbag,\n  headset_default as Headset,\n  help_default as Help,\n  help_filled_default as HelpFilled,\n  hide_default as Hide,\n  histogram_default as Histogram,\n  home_filled_default as HomeFilled,\n  hot_water_default as HotWater,\n  house_default as House,\n  ice_cream_default as IceCream,\n  ice_cream_round_default as IceCreamRound,\n  ice_cream_square_default as IceCreamSquare,\n  ice_drink_default as IceDrink,\n  ice_tea_default as IceTea,\n  info_filled_default as InfoFilled,\n  iphone_default as Iphone,\n  key_default as Key,\n  knife_fork_default as KnifeFork,\n  lightning_default as Lightning,\n  link_default as Link,\n  list_default as List,\n  loading_default as Loading,\n  location_default as Location,\n  location_filled_default as LocationFilled,\n  location_information_default as LocationInformation,\n  lock_default as Lock,\n  lollipop_default as Lollipop,\n  magic_stick_default as MagicStick,\n  magnet_default as Magnet,\n  male_default as Male,\n  management_default as Management,\n  map_location_default as MapLocation,\n  medal_default as Medal,\n  memo_default as Memo,\n  menu_default as Menu,\n  message_default as Message,\n  message_box_default as MessageBox,\n  mic_default as Mic,\n  microphone_default as Microphone,\n  milk_tea_default as MilkTea,\n  minus_default as Minus,\n  money_default as Money,\n  monitor_default as Monitor,\n  moon_default as Moon,\n  moon_night_default as MoonNight,\n  more_default as More,\n  more_filled_default as MoreFilled,\n  mostly_cloudy_default as MostlyCloudy,\n  mouse_default as Mouse,\n  mug_default as Mug,\n  mute_default as Mute,\n  mute_notification_default as MuteNotification,\n  no_smoking_default as NoSmoking,\n  notebook_default as Notebook,\n  notification_default as Notification,\n  odometer_default as Odometer,\n  office_building_default as OfficeBuilding,\n  open_default as Open,\n  operation_default as Operation,\n  opportunity_default as Opportunity,\n  orange_default as Orange,\n  paperclip_default as Paperclip,\n  partly_cloudy_default as PartlyCloudy,\n  pear_default as Pear,\n  phone_default as Phone,\n  phone_filled_default as PhoneFilled,\n  picture_default as Picture,\n  picture_filled_default as PictureFilled,\n  picture_rounded_default as PictureRounded,\n  pie_chart_default as PieChart,\n  place_default as Place,\n  platform_default as Platform,\n  plus_default as Plus,\n  pointer_default as Pointer,\n  position_default as Position,\n  postcard_default as Postcard,\n  pouring_default as Pouring,\n  present_default as Present,\n  price_tag_default as PriceTag,\n  printer_default as Printer,\n  promotion_default as Promotion,\n  quartz_watch_default as QuartzWatch,\n  question_filled_default as QuestionFilled,\n  rank_default as Rank,\n  reading_default as Reading,\n  reading_lamp_default as ReadingLamp,\n  refresh_default as Refresh,\n  refresh_left_default as RefreshLeft,\n  refresh_right_default as RefreshRight,\n  refrigerator_default as Refrigerator,\n  remove_default as Remove,\n  remove_filled_default as RemoveFilled,\n  right_default as Right,\n  scale_to_original_default as ScaleToOriginal,\n  school_default as School,\n  scissor_default as Scissor,\n  search_default as Search,\n  select_default as Select,\n  sell_default as Sell,\n  semi_select_default as SemiSelect,\n  service_default as Service,\n  set_up_default as SetUp,\n  setting_default as Setting,\n  share_default as Share,\n  ship_default as Ship,\n  shop_default as Shop,\n  shopping_bag_default as ShoppingBag,\n  shopping_cart_default as ShoppingCart,\n  shopping_cart_full_default as ShoppingCartFull,\n  shopping_trolley_default as ShoppingTrolley,\n  smoking_default as Smoking,\n  soccer_default as Soccer,\n  sold_out_default as SoldOut,\n  sort_default as Sort,\n  sort_down_default as SortDown,\n  sort_up_default as SortUp,\n  stamp_default as Stamp,\n  star_default as Star,\n  star_filled_default as StarFilled,\n  stopwatch_default as Stopwatch,\n  success_filled_default as SuccessFilled,\n  sugar_default as Sugar,\n  suitcase_default as Suitcase,\n  suitcase_line_default as SuitcaseLine,\n  sunny_default as Sunny,\n  sunrise_default as Sunrise,\n  sunset_default as Sunset,\n  switch_default as Switch,\n  switch_button_default as SwitchButton,\n  switch_filled_default as SwitchFilled,\n  takeaway_box_default as TakeawayBox,\n  ticket_default as Ticket,\n  tickets_default as Tickets,\n  timer_default as Timer,\n  toilet_paper_default as ToiletPaper,\n  tools_default as Tools,\n  top_default as Top,\n  top_left_default as TopLeft,\n  top_right_default as TopRight,\n  trend_charts_default as TrendCharts,\n  trophy_default as Trophy,\n  trophy_base_default as TrophyBase,\n  turn_off_default as TurnOff,\n  umbrella_default as Umbrella,\n  unlock_default as Unlock,\n  upload_default as Upload,\n  upload_filled_default as UploadFilled,\n  user_default as User,\n  user_filled_default as UserFilled,\n  van_default as Van,\n  video_camera_default as VideoCamera,\n  video_camera_filled_default as VideoCameraFilled,\n  video_pause_default as VideoPause,\n  video_play_default as VideoPlay,\n  view_default as View,\n  wallet_default as Wallet,\n  wallet_filled_default as WalletFilled,\n  warn_triangle_filled_default as WarnTriangleFilled,\n  warning_default as Warning,\n  warning_filled_default as WarningFilled,\n  watch_default as Watch,\n  watermelon_default as Watermelon,\n  wind_power_default as WindPower,\n  zoom_in_default as ZoomIn,\n  zoom_out_default as ZoomOut\n};\n","import { Close, SuccessFilled, InfoFilled, WarningFilled, CircleCloseFilled, Loading, CircleCheck, CircleClose } from '@element-plus/icons-vue';\nimport { definePropType } from './props/runtime.mjs';\n\nconst iconPropType = definePropType([\n  String,\n  Object,\n  Function\n]);\nconst CloseComponents = {\n  Close\n};\nconst TypeComponents = {\n  Close,\n  SuccessFilled,\n  InfoFilled,\n  WarningFilled,\n  CircleCloseFilled\n};\nconst TypeComponentsMap = {\n  primary: InfoFilled,\n  success: SuccessFilled,\n  warning: WarningFilled,\n  error: CircleCloseFilled,\n  info: InfoFilled\n};\nconst ValidateComponentsMap = {\n  validating: Loading,\n  success: CircleCheck,\n  error: CircleClose\n};\n\nexport { CloseComponents, TypeComponents, TypeComponentsMap, ValidateComponentsMap, iconPropType };\n//# sourceMappingURL=icon.mjs.map\n","import { isClient } from '@vueuse/core';\nexport { isClient, isIOS } from '@vueuse/core';\n\nconst isFirefox = () => isClient && /firefox/i.test(window.navigator.userAgent);\nconst isAndroid = () => isClient && /android/i.test(window.navigator.userAgent);\n\nexport { isAndroid, isFirefox };\n//# sourceMappingURL=browser.mjs.map\n","import { isFirefox } from '../../../utils/browser.mjs';\nimport { isNumber } from '../../../utils/types.mjs';\n\nlet hiddenTextarea = void 0;\nconst HIDDEN_STYLE = {\n  height: \"0\",\n  visibility: \"hidden\",\n  overflow: isFirefox() ? \"\" : \"hidden\",\n  position: \"absolute\",\n  \"z-index\": \"-1000\",\n  top: \"0\",\n  right: \"0\"\n};\nconst CONTEXT_STYLE = [\n  \"letter-spacing\",\n  \"line-height\",\n  \"padding-top\",\n  \"padding-bottom\",\n  \"font-family\",\n  \"font-weight\",\n  \"font-size\",\n  \"text-rendering\",\n  \"text-transform\",\n  \"width\",\n  \"text-indent\",\n  \"padding-left\",\n  \"padding-right\",\n  \"border-width\",\n  \"box-sizing\",\n  \"word-break\"\n];\nfunction calculateNodeStyling(targetElement) {\n  const style = window.getComputedStyle(targetElement);\n  const boxSizing = style.getPropertyValue(\"box-sizing\");\n  const paddingSize = Number.parseFloat(style.getPropertyValue(\"padding-bottom\")) + Number.parseFloat(style.getPropertyValue(\"padding-top\"));\n  const borderSize = Number.parseFloat(style.getPropertyValue(\"border-bottom-width\")) + Number.parseFloat(style.getPropertyValue(\"border-top-width\"));\n  const contextStyle = CONTEXT_STYLE.map((name) => [\n    name,\n    style.getPropertyValue(name)\n  ]);\n  return { contextStyle, paddingSize, borderSize, boxSizing };\n}\nfunction calcTextareaHeight(targetElement, minRows = 1, maxRows) {\n  var _a, _b;\n  if (!hiddenTextarea) {\n    hiddenTextarea = document.createElement(\"textarea\");\n    ((_a = targetElement.parentNode) != null ? _a : document.body).appendChild(hiddenTextarea);\n  }\n  const { paddingSize, borderSize, boxSizing, contextStyle } = calculateNodeStyling(targetElement);\n  contextStyle.forEach(([key, value]) => hiddenTextarea == null ? void 0 : hiddenTextarea.style.setProperty(key, value));\n  Object.entries(HIDDEN_STYLE).forEach(([key, value]) => hiddenTextarea == null ? void 0 : hiddenTextarea.style.setProperty(key, value, \"important\"));\n  hiddenTextarea.value = targetElement.value || targetElement.placeholder || \"\";\n  let height = hiddenTextarea.scrollHeight;\n  const result = {};\n  if (boxSizing === \"border-box\") {\n    height = height + borderSize;\n  } else if (boxSizing === \"content-box\") {\n    height = height - paddingSize;\n  }\n  hiddenTextarea.value = \"\";\n  const singleRowHeight = hiddenTextarea.scrollHeight - paddingSize;\n  if (isNumber(minRows)) {\n    let minHeight = singleRowHeight * minRows;\n    if (boxSizing === \"border-box\") {\n      minHeight = minHeight + paddingSize + borderSize;\n    }\n    height = Math.max(minHeight, height);\n    result.minHeight = `${minHeight}px`;\n  }\n  if (isNumber(maxRows)) {\n    let maxHeight = singleRowHeight * maxRows;\n    if (boxSizing === \"border-box\") {\n      maxHeight = maxHeight + paddingSize + borderSize;\n    }\n    height = Math.min(maxHeight, height);\n  }\n  result.height = `${height}px`;\n  (_b = hiddenTextarea.parentNode) == null ? void 0 : _b.removeChild(hiddenTextarea);\n  hiddenTextarea = void 0;\n  return result;\n}\n\nexport { calcTextareaHeight };\n//# sourceMappingURL=utils.mjs.map\n","const mutable = (val) => val;\n\nexport { mutable };\n//# sourceMappingURL=typescript.mjs.map\n","import { pick } from 'lodash-unified';\nimport { buildProps } from '../../utils/vue/props/runtime.mjs';\n\nconst ariaProps = buildProps({\n  ariaLabel: String,\n  ariaOrientation: {\n    type: String,\n    values: [\"horizontal\", \"vertical\", \"undefined\"]\n  },\n  ariaControls: String\n});\nconst useAriaProps = (arias) => {\n  return pick(ariaProps, arias);\n};\n\nexport { ariaProps, useAriaProps };\n//# sourceMappingURL=index.mjs.map\n","import { CircleClose } from '@element-plus/icons-vue';\nimport { useSizeProp } from '../../../hooks/use-size/index.mjs';\nimport { iconPropType } from '../../../utils/vue/icon.mjs';\nimport { mutable } from '../../../utils/typescript.mjs';\nimport { useAriaProps } from '../../../hooks/use-aria/index.mjs';\nimport { UPDATE_MODEL_EVENT } from '../../../constants/event.mjs';\nimport { buildProps, definePropType } from '../../../utils/vue/props/runtime.mjs';\nimport { isString } from '@vue/shared';\n\nconst inputProps = buildProps({\n  id: {\n    type: String,\n    default: void 0\n  },\n  size: useSizeProp,\n  disabled: Boolean,\n  modelValue: {\n    type: definePropType([\n      String,\n      Number,\n      Object\n    ]),\n    default: \"\"\n  },\n  maxlength: {\n    type: [String, Number]\n  },\n  minlength: {\n    type: [String, Number]\n  },\n  type: {\n    type: String,\n    default: \"text\"\n  },\n  resize: {\n    type: String,\n    values: [\"none\", \"both\", \"horizontal\", \"vertical\"]\n  },\n  autosize: {\n    type: definePropType([Boolean, Object]),\n    default: false\n  },\n  autocomplete: {\n    type: definePropType(String),\n    default: \"off\"\n  },\n  formatter: {\n    type: Function\n  },\n  parser: {\n    type: Function\n  },\n  placeholder: {\n    type: String\n  },\n  form: {\n    type: String\n  },\n  readonly: Boolean,\n  clearable: Boolean,\n  clearIcon: {\n    type: iconPropType,\n    default: CircleClose\n  },\n  showPassword: Boolean,\n  showWordLimit: Boolean,\n  suffixIcon: {\n    type: iconPropType\n  },\n  prefixIcon: {\n    type: iconPropType\n  },\n  containerRole: {\n    type: String,\n    default: void 0\n  },\n  tabindex: {\n    type: [String, Number],\n    default: 0\n  },\n  validateEvent: {\n    type: Boolean,\n    default: true\n  },\n  inputStyle: {\n    type: definePropType([Object, Array, String]),\n    default: () => mutable({})\n  },\n  autofocus: Boolean,\n  rows: {\n    type: Number,\n    default: 2\n  },\n  ...useAriaProps([\"ariaLabel\"]),\n  inputmode: {\n    type: definePropType(String),\n    default: void 0\n  },\n  name: String\n});\nconst inputEmits = {\n  [UPDATE_MODEL_EVENT]: (value) => isString(value),\n  input: (value) => isString(value),\n  change: (value) => isString(value),\n  focus: (evt) => evt instanceof FocusEvent,\n  blur: (evt) => evt instanceof FocusEvent,\n  clear: () => true,\n  mouseleave: (evt) => evt instanceof MouseEvent,\n  mouseenter: (evt) => evt instanceof MouseEvent,\n  keydown: (evt) => evt instanceof Event,\n  compositionstart: (evt) => evt instanceof CompositionEvent,\n  compositionupdate: (evt) => evt instanceof CompositionEvent,\n  compositionend: (evt) => evt instanceof CompositionEvent\n};\n\nexport { inputEmits, inputProps };\n//# sourceMappingURL=input.mjs.map\n","import { computed, getCurrentInstance } from 'vue';\nimport { fromPairs } from 'lodash-unified';\n\nconst DEFAULT_EXCLUDE_KEYS = [\"class\", \"style\"];\nconst LISTENER_PREFIX = /^on[A-Z]/;\nconst useAttrs = (params = {}) => {\n  const { excludeListeners = false, excludeKeys } = params;\n  const allExcludeKeys = computed(() => {\n    return ((excludeKeys == null ? void 0 : excludeKeys.value) || []).concat(DEFAULT_EXCLUDE_KEYS);\n  });\n  const instance = getCurrentInstance();\n  if (!instance) {\n    return computed(() => ({}));\n  }\n  return computed(() => {\n    var _a;\n    return fromPairs(Object.entries((_a = instance.proxy) == null ? void 0 : _a.$attrs).filter(([key]) => !allExcludeKeys.value.includes(key) && !(excludeListeners && LISTENER_PREFIX.test(key))));\n  });\n};\n\nexport { useAttrs };\n//# sourceMappingURL=index.mjs.map\n","import { getCurrentInstance, inject, unref } from 'vue';\nimport { computedEager } from '@vueuse/core';\nimport { useGetDerivedNamespace } from '../use-namespace/index.mjs';\n\nconst defaultIdInjection = {\n  prefix: Math.floor(Math.random() * 1e4),\n  current: 0\n};\nconst ID_INJECTION_KEY = Symbol(\"elIdInjection\");\nconst useIdInjection = () => {\n  return getCurrentInstance() ? inject(ID_INJECTION_KEY, defaultIdInjection) : defaultIdInjection;\n};\nconst useId = (deterministicId) => {\n  const idInjection = useIdInjection();\n  const namespace = useGetDerivedNamespace();\n  const idRef = computedEager(() => unref(deterministicId) || `${namespace.value}-id-${idInjection.prefix}-${idInjection.current++}`);\n  return idRef;\n};\n\nexport { ID_INJECTION_KEY, useId, useIdInjection };\n//# sourceMappingURL=index.mjs.map\n","const formContextKey = Symbol(\"formContextKey\");\nconst formItemContextKey = Symbol(\"formItemContextKey\");\n\nexport { formContextKey, formItemContextKey };\n//# sourceMappingURL=constants.mjs.map\n","import { inject, ref, getCurrentInstance, computed, onMounted, watch, toRef, onUnmounted } from 'vue';\nimport { useId } from '../../../../hooks/use-id/index.mjs';\nimport { formContextKey, formItemContextKey } from '../constants.mjs';\n\nconst useFormItem = () => {\n  const form = inject(formContextKey, void 0);\n  const formItem = inject(formItemContextKey, void 0);\n  return {\n    form,\n    formItem\n  };\n};\nconst useFormItemInputId = (props, {\n  formItemContext,\n  disableIdGeneration,\n  disableIdManagement\n}) => {\n  if (!disableIdGeneration) {\n    disableIdGeneration = ref(false);\n  }\n  if (!disableIdManagement) {\n    disableIdManagement = ref(false);\n  }\n  const instance = getCurrentInstance();\n  const inLabel = () => {\n    let parent = instance == null ? void 0 : instance.parent;\n    while (parent) {\n      if (parent.type.name === \"ElFormItem\") {\n        return false;\n      }\n      if (parent.type.name === \"ElLabelWrap\") {\n        return true;\n      }\n      parent = parent.parent;\n    }\n    return false;\n  };\n  const inputId = ref();\n  let idUnwatch = void 0;\n  const isLabeledByFormItem = computed(() => {\n    var _a;\n    return !!(!(props.label || props.ariaLabel) && formItemContext && formItemContext.inputIds && ((_a = formItemContext.inputIds) == null ? void 0 : _a.length) <= 1);\n  });\n  onMounted(() => {\n    idUnwatch = watch([toRef(props, \"id\"), disableIdGeneration], ([id, disableIdGeneration2]) => {\n      const newId = id != null ? id : !disableIdGeneration2 ? useId().value : void 0;\n      if (newId !== inputId.value) {\n        if ((formItemContext == null ? void 0 : formItemContext.removeInputId) && !inLabel()) {\n          inputId.value && formItemContext.removeInputId(inputId.value);\n          if (!(disableIdManagement == null ? void 0 : disableIdManagement.value) && !disableIdGeneration2 && newId) {\n            formItemContext.addInputId(newId);\n          }\n        }\n        inputId.value = newId;\n      }\n    }, { immediate: true });\n  });\n  onUnmounted(() => {\n    idUnwatch && idUnwatch();\n    if (formItemContext == null ? void 0 : formItemContext.removeInputId) {\n      inputId.value && formItemContext.removeInputId(inputId.value);\n    }\n  });\n  return {\n    isLabeledByFormItem,\n    inputId\n  };\n};\n\nexport { useFormItem, useFormItemInputId };\n//# sourceMappingURL=use-form-item.mjs.map\n","import { getCurrentInstance, computed } from 'vue';\n\nconst useProp = (name) => {\n  const vm = getCurrentInstance();\n  return computed(() => {\n    var _a, _b;\n    return (_b = (_a = vm == null ? void 0 : vm.proxy) == null ? void 0 : _a.$props) == null ? void 0 : _b[name];\n  });\n};\n\nexport { useProp };\n//# sourceMappingURL=index.mjs.map\n","import { computed, unref, ref, inject } from 'vue';\nimport { useGlobalSize } from '../../../../hooks/use-size/index.mjs';\nimport { useProp } from '../../../../hooks/use-prop/index.mjs';\nimport { formContextKey, formItemContextKey } from '../constants.mjs';\n\nconst useFormSize = (fallback, ignore = {}) => {\n  const emptyRef = ref(void 0);\n  const size = ignore.prop ? emptyRef : useProp(\"size\");\n  const globalConfig = ignore.global ? emptyRef : useGlobalSize();\n  const form = ignore.form ? { size: void 0 } : inject(formContextKey, void 0);\n  const formItem = ignore.formItem ? { size: void 0 } : inject(formItemContextKey, void 0);\n  return computed(() => size.value || unref(fallback) || (formItem == null ? void 0 : formItem.size) || (form == null ? void 0 : form.size) || globalConfig.value || \"\");\n};\nconst useFormDisabled = (fallback) => {\n  const disabled = useProp(\"disabled\");\n  const form = inject(formContextKey, void 0);\n  return computed(() => disabled.value || unref(fallback) || (form == null ? void 0 : form.disabled) || false);\n};\nconst useSize = useFormSize;\nconst useDisabled = useFormDisabled;\n\nexport { useDisabled, useFormDisabled, useFormSize, useSize };\n//# sourceMappingURL=use-form-common-props.mjs.map\n","const FOCUSABLE_ELEMENT_SELECTORS = `a[href],button:not([disabled]),button:not([hidden]),:not([tabindex=\"-1\"]),input:not([disabled]),input:not([type=\"hidden\"]),select:not([disabled]),textarea:not([disabled])`;\nconst isHTMLElement = (e) => {\n  if (typeof Element === \"undefined\")\n    return false;\n  return e instanceof Element;\n};\nconst isVisible = (element) => {\n  const computed = getComputedStyle(element);\n  return computed.position === \"fixed\" ? false : element.offsetParent !== null;\n};\nconst obtainAllFocusableElements = (element) => {\n  return Array.from(element.querySelectorAll(FOCUSABLE_ELEMENT_SELECTORS)).filter((item) => isFocusable(item) && isVisible(item));\n};\nconst isFocusable = (element) => {\n  if (element.tabIndex > 0 || element.tabIndex === 0 && element.getAttribute(\"tabIndex\") !== null) {\n    return true;\n  }\n  if (element.tabIndex < 0 || element.hasAttribute(\"disabled\") || element.getAttribute(\"aria-disabled\") === \"true\") {\n    return false;\n  }\n  switch (element.nodeName) {\n    case \"A\": {\n      return !!element.href && element.rel !== \"ignore\";\n    }\n    case \"INPUT\": {\n      return !(element.type === \"hidden\" || element.type === \"file\");\n    }\n    case \"BUTTON\":\n    case \"SELECT\":\n    case \"TEXTAREA\": {\n      return true;\n    }\n    default: {\n      return false;\n    }\n  }\n};\nconst triggerEvent = function(elm, name, ...opts) {\n  let eventName;\n  if (name.includes(\"mouse\") || name.includes(\"click\")) {\n    eventName = \"MouseEvents\";\n  } else if (name.includes(\"key\")) {\n    eventName = \"KeyboardEvent\";\n  } else {\n    eventName = \"HTMLEvents\";\n  }\n  const evt = document.createEvent(eventName);\n  evt.initEvent(name, ...opts);\n  elm.dispatchEvent(evt);\n  return elm;\n};\nconst isLeaf = (el) => !el.getAttribute(\"aria-owns\");\nconst getSibling = (el, distance, elClass) => {\n  const { parentNode } = el;\n  if (!parentNode)\n    return null;\n  const siblings = parentNode.querySelectorAll(elClass);\n  const index = Array.prototype.indexOf.call(siblings, el);\n  return siblings[index + distance] || null;\n};\nconst focusElement = (el, options) => {\n  if (!el || !el.focus)\n    return;\n  let cleanup = false;\n  if (isHTMLElement(el) && !isFocusable(el) && !el.getAttribute(\"tabindex\")) {\n    el.setAttribute(\"tabindex\", \"-1\");\n    cleanup = true;\n  }\n  el.focus(options);\n  if (isHTMLElement(el) && cleanup) {\n    el.removeAttribute(\"tabindex\");\n  }\n};\nconst focusNode = (el) => {\n  if (!el)\n    return;\n  focusElement(el);\n  !isLeaf(el) && el.click();\n};\n\nexport { focusElement, focusNode, getSibling, isFocusable, isLeaf, isVisible, obtainAllFocusableElements, triggerEvent };\n//# sourceMappingURL=aria.mjs.map\n","import { defineComponent, useAttrs, useSlots, computed, shallowRef, ref, watch, nextTick, onMounted, toRef, openBlock, createElementBlock, normalizeClass, unref, normalizeStyle, createCommentVNode, Fragment, renderSlot, createElementVNode, createBlock, withCtx, resolveDynamicComponent, mergeProps, withModifiers, toDisplayString } from 'vue';\nimport { useResizeObserver, isClient } from '@vueuse/core';\nimport { isNil } from 'lodash-unified';\nimport { ElIcon } from '../../icon/index.mjs';\nimport { View, Hide } from '@element-plus/icons-vue';\nimport { calcTextareaHeight } from './utils.mjs';\nimport { inputProps, inputEmits } from './input.mjs';\nimport _export_sfc from '../../../_virtual/plugin-vue_export-helper.mjs';\nimport { useAttrs as useAttrs$1 } from '../../../hooks/use-attrs/index.mjs';\nimport { useFormItem, useFormItemInputId } from '../../form/src/hooks/use-form-item.mjs';\nimport { useFormSize, useFormDisabled } from '../../form/src/hooks/use-form-common-props.mjs';\nimport { useFocusController } from '../../../hooks/use-focus-controller/index.mjs';\nimport { ValidateComponentsMap } from '../../../utils/vue/icon.mjs';\nimport { useComposition } from '../../../hooks/use-composition/index.mjs';\nimport { UPDATE_MODEL_EVENT, INPUT_EVENT, CHANGE_EVENT } from '../../../constants/event.mjs';\nimport { useCursor } from '../../../hooks/use-cursor/index.mjs';\nimport { useNamespace } from '../../../hooks/use-namespace/index.mjs';\nimport { debugWarn } from '../../../utils/error.mjs';\nimport { NOOP, isObject } from '@vue/shared';\n\nconst COMPONENT_NAME = \"ElInput\";\nconst __default__ = defineComponent({\n  name: COMPONENT_NAME,\n  inheritAttrs: false\n});\nconst _sfc_main = /* @__PURE__ */ defineComponent({\n  ...__default__,\n  props: inputProps,\n  emits: inputEmits,\n  setup(__props, { expose, emit }) {\n    const props = __props;\n    const rawAttrs = useAttrs();\n    const attrs = useAttrs$1();\n    const slots = useSlots();\n    const containerKls = computed(() => [\n      props.type === \"textarea\" ? nsTextarea.b() : nsInput.b(),\n      nsInput.m(inputSize.value),\n      nsInput.is(\"disabled\", inputDisabled.value),\n      nsInput.is(\"exceed\", inputExceed.value),\n      {\n        [nsInput.b(\"group\")]: slots.prepend || slots.append,\n        [nsInput.m(\"prefix\")]: slots.prefix || props.prefixIcon,\n        [nsInput.m(\"suffix\")]: slots.suffix || props.suffixIcon || props.clearable || props.showPassword,\n        [nsInput.bm(\"suffix\", \"password-clear\")]: showClear.value && showPwdVisible.value,\n        [nsInput.b(\"hidden\")]: props.type === \"hidden\"\n      },\n      rawAttrs.class\n    ]);\n    const wrapperKls = computed(() => [\n      nsInput.e(\"wrapper\"),\n      nsInput.is(\"focus\", isFocused.value)\n    ]);\n    const { form: elForm, formItem: elFormItem } = useFormItem();\n    const { inputId } = useFormItemInputId(props, {\n      formItemContext: elFormItem\n    });\n    const inputSize = useFormSize();\n    const inputDisabled = useFormDisabled();\n    const nsInput = useNamespace(\"input\");\n    const nsTextarea = useNamespace(\"textarea\");\n    const input = shallowRef();\n    const textarea = shallowRef();\n    const hovering = ref(false);\n    const passwordVisible = ref(false);\n    const countStyle = ref();\n    const textareaCalcStyle = shallowRef(props.inputStyle);\n    const _ref = computed(() => input.value || textarea.value);\n    const { wrapperRef, isFocused, handleFocus, handleBlur } = useFocusController(_ref, {\n      disabled: inputDisabled,\n      afterBlur() {\n        var _a;\n        if (props.validateEvent) {\n          (_a = elFormItem == null ? void 0 : elFormItem.validate) == null ? void 0 : _a.call(elFormItem, \"blur\").catch((err) => debugWarn());\n        }\n      }\n    });\n    const needStatusIcon = computed(() => {\n      var _a;\n      return (_a = elForm == null ? void 0 : elForm.statusIcon) != null ? _a : false;\n    });\n    const validateState = computed(() => (elFormItem == null ? void 0 : elFormItem.validateState) || \"\");\n    const validateIcon = computed(() => validateState.value && ValidateComponentsMap[validateState.value]);\n    const passwordIcon = computed(() => passwordVisible.value ? View : Hide);\n    const containerStyle = computed(() => [\n      rawAttrs.style\n    ]);\n    const textareaStyle = computed(() => [\n      props.inputStyle,\n      textareaCalcStyle.value,\n      { resize: props.resize }\n    ]);\n    const nativeInputValue = computed(() => isNil(props.modelValue) ? \"\" : String(props.modelValue));\n    const showClear = computed(() => props.clearable && !inputDisabled.value && !props.readonly && !!nativeInputValue.value && (isFocused.value || hovering.value));\n    const showPwdVisible = computed(() => props.showPassword && !inputDisabled.value && !!nativeInputValue.value);\n    const isWordLimitVisible = computed(() => props.showWordLimit && !!props.maxlength && (props.type === \"text\" || props.type === \"textarea\") && !inputDisabled.value && !props.readonly && !props.showPassword);\n    const textLength = computed(() => nativeInputValue.value.length);\n    const inputExceed = computed(() => !!isWordLimitVisible.value && textLength.value > Number(props.maxlength));\n    const suffixVisible = computed(() => !!slots.suffix || !!props.suffixIcon || showClear.value || props.showPassword || isWordLimitVisible.value || !!validateState.value && needStatusIcon.value);\n    const [recordCursor, setCursor] = useCursor(input);\n    useResizeObserver(textarea, (entries) => {\n      onceInitSizeTextarea();\n      if (!isWordLimitVisible.value || props.resize !== \"both\")\n        return;\n      const entry = entries[0];\n      const { width } = entry.contentRect;\n      countStyle.value = {\n        right: `calc(100% - ${width + 15 + 6}px)`\n      };\n    });\n    const resizeTextarea = () => {\n      const { type, autosize } = props;\n      if (!isClient || type !== \"textarea\" || !textarea.value)\n        return;\n      if (autosize) {\n        const minRows = isObject(autosize) ? autosize.minRows : void 0;\n        const maxRows = isObject(autosize) ? autosize.maxRows : void 0;\n        const textareaStyle2 = calcTextareaHeight(textarea.value, minRows, maxRows);\n        textareaCalcStyle.value = {\n          overflowY: \"hidden\",\n          ...textareaStyle2\n        };\n        nextTick(() => {\n          textarea.value.offsetHeight;\n          textareaCalcStyle.value = textareaStyle2;\n        });\n      } else {\n        textareaCalcStyle.value = {\n          minHeight: calcTextareaHeight(textarea.value).minHeight\n        };\n      }\n    };\n    const createOnceInitResize = (resizeTextarea2) => {\n      let isInit = false;\n      return () => {\n        var _a;\n        if (isInit || !props.autosize)\n          return;\n        const isElHidden = ((_a = textarea.value) == null ? void 0 : _a.offsetParent) === null;\n        if (!isElHidden) {\n          setTimeout(resizeTextarea2);\n          isInit = true;\n        }\n      };\n    };\n    const onceInitSizeTextarea = createOnceInitResize(resizeTextarea);\n    const setNativeInputValue = () => {\n      const input2 = _ref.value;\n      const formatterValue = props.formatter ? props.formatter(nativeInputValue.value) : nativeInputValue.value;\n      if (!input2 || input2.value === formatterValue)\n        return;\n      input2.value = formatterValue;\n    };\n    const handleInput = async (event) => {\n      recordCursor();\n      let { value } = event.target;\n      if (props.formatter && props.parser) {\n        value = props.parser(value);\n      }\n      if (isComposing.value)\n        return;\n      if (value === nativeInputValue.value) {\n        setNativeInputValue();\n        return;\n      }\n      emit(UPDATE_MODEL_EVENT, value);\n      emit(INPUT_EVENT, value);\n      await nextTick();\n      setNativeInputValue();\n      setCursor();\n    };\n    const handleChange = (event) => {\n      let { value } = event.target;\n      if (props.formatter && props.parser) {\n        value = props.parser(value);\n      }\n      emit(CHANGE_EVENT, value);\n    };\n    const {\n      isComposing,\n      handleCompositionStart,\n      handleCompositionUpdate,\n      handleCompositionEnd\n    } = useComposition({ emit, afterComposition: handleInput });\n    const handlePasswordVisible = () => {\n      recordCursor();\n      passwordVisible.value = !passwordVisible.value;\n      setTimeout(setCursor);\n    };\n    const focus = () => {\n      var _a;\n      return (_a = _ref.value) == null ? void 0 : _a.focus();\n    };\n    const blur = () => {\n      var _a;\n      return (_a = _ref.value) == null ? void 0 : _a.blur();\n    };\n    const handleMouseLeave = (evt) => {\n      hovering.value = false;\n      emit(\"mouseleave\", evt);\n    };\n    const handleMouseEnter = (evt) => {\n      hovering.value = true;\n      emit(\"mouseenter\", evt);\n    };\n    const handleKeydown = (evt) => {\n      emit(\"keydown\", evt);\n    };\n    const select = () => {\n      var _a;\n      (_a = _ref.value) == null ? void 0 : _a.select();\n    };\n    const clear = () => {\n      emit(UPDATE_MODEL_EVENT, \"\");\n      emit(CHANGE_EVENT, \"\");\n      emit(\"clear\");\n      emit(INPUT_EVENT, \"\");\n    };\n    watch(() => props.modelValue, () => {\n      var _a;\n      nextTick(() => resizeTextarea());\n      if (props.validateEvent) {\n        (_a = elFormItem == null ? void 0 : elFormItem.validate) == null ? void 0 : _a.call(elFormItem, \"change\").catch((err) => debugWarn());\n      }\n    });\n    watch(nativeInputValue, () => setNativeInputValue());\n    watch(() => props.type, async () => {\n      await nextTick();\n      setNativeInputValue();\n      resizeTextarea();\n    });\n    onMounted(() => {\n      if (!props.formatter && props.parser) ;\n      setNativeInputValue();\n      nextTick(resizeTextarea);\n    });\n    expose({\n      input,\n      textarea,\n      ref: _ref,\n      textareaStyle,\n      autosize: toRef(props, \"autosize\"),\n      isComposing,\n      focus,\n      blur,\n      select,\n      clear,\n      resizeTextarea\n    });\n    return (_ctx, _cache) => {\n      return openBlock(), createElementBlock(\"div\", {\n        class: normalizeClass([\n          unref(containerKls),\n          {\n            [unref(nsInput).bm(\"group\", \"append\")]: _ctx.$slots.append,\n            [unref(nsInput).bm(\"group\", \"prepend\")]: _ctx.$slots.prepend\n          }\n        ]),\n        style: normalizeStyle(unref(containerStyle)),\n        onMouseenter: handleMouseEnter,\n        onMouseleave: handleMouseLeave\n      }, [\n        createCommentVNode(\" input \"),\n        _ctx.type !== \"textarea\" ? (openBlock(), createElementBlock(Fragment, { key: 0 }, [\n          createCommentVNode(\" prepend slot \"),\n          _ctx.$slots.prepend ? (openBlock(), createElementBlock(\"div\", {\n            key: 0,\n            class: normalizeClass(unref(nsInput).be(\"group\", \"prepend\"))\n          }, [\n            renderSlot(_ctx.$slots, \"prepend\")\n          ], 2)) : createCommentVNode(\"v-if\", true),\n          createElementVNode(\"div\", {\n            ref_key: \"wrapperRef\",\n            ref: wrapperRef,\n            class: normalizeClass(unref(wrapperKls))\n          }, [\n            createCommentVNode(\" prefix slot \"),\n            _ctx.$slots.prefix || _ctx.prefixIcon ? (openBlock(), createElementBlock(\"span\", {\n              key: 0,\n              class: normalizeClass(unref(nsInput).e(\"prefix\"))\n            }, [\n              createElementVNode(\"span\", {\n                class: normalizeClass(unref(nsInput).e(\"prefix-inner\"))\n              }, [\n                renderSlot(_ctx.$slots, \"prefix\"),\n                _ctx.prefixIcon ? (openBlock(), createBlock(unref(ElIcon), {\n                  key: 0,\n                  class: normalizeClass(unref(nsInput).e(\"icon\"))\n                }, {\n                  default: withCtx(() => [\n                    (openBlock(), createBlock(resolveDynamicComponent(_ctx.prefixIcon)))\n                  ]),\n                  _: 1\n                }, 8, [\"class\"])) : createCommentVNode(\"v-if\", true)\n              ], 2)\n            ], 2)) : createCommentVNode(\"v-if\", true),\n            createElementVNode(\"input\", mergeProps({\n              id: unref(inputId),\n              ref_key: \"input\",\n              ref: input,\n              class: unref(nsInput).e(\"inner\")\n            }, unref(attrs), {\n              name: _ctx.name,\n              minlength: _ctx.minlength,\n              maxlength: _ctx.maxlength,\n              type: _ctx.showPassword ? passwordVisible.value ? \"text\" : \"password\" : _ctx.type,\n              disabled: unref(inputDisabled),\n              readonly: _ctx.readonly,\n              autocomplete: _ctx.autocomplete,\n              tabindex: _ctx.tabindex,\n              \"aria-label\": _ctx.ariaLabel,\n              placeholder: _ctx.placeholder,\n              style: _ctx.inputStyle,\n              form: _ctx.form,\n              autofocus: _ctx.autofocus,\n              role: _ctx.containerRole,\n              inputmode: _ctx.inputmode,\n              onCompositionstart: unref(handleCompositionStart),\n              onCompositionupdate: unref(handleCompositionUpdate),\n              onCompositionend: unref(handleCompositionEnd),\n              onInput: handleInput,\n              onChange: handleChange,\n              onKeydown: handleKeydown\n            }), null, 16, [\"id\", \"name\", \"minlength\", \"maxlength\", \"type\", \"disabled\", \"readonly\", \"autocomplete\", \"tabindex\", \"aria-label\", \"placeholder\", \"form\", \"autofocus\", \"role\", \"inputmode\", \"onCompositionstart\", \"onCompositionupdate\", \"onCompositionend\"]),\n            createCommentVNode(\" suffix slot \"),\n            unref(suffixVisible) ? (openBlock(), createElementBlock(\"span\", {\n              key: 1,\n              class: normalizeClass(unref(nsInput).e(\"suffix\"))\n            }, [\n              createElementVNode(\"span\", {\n                class: normalizeClass(unref(nsInput).e(\"suffix-inner\"))\n              }, [\n                !unref(showClear) || !unref(showPwdVisible) || !unref(isWordLimitVisible) ? (openBlock(), createElementBlock(Fragment, { key: 0 }, [\n                  renderSlot(_ctx.$slots, \"suffix\"),\n                  _ctx.suffixIcon ? (openBlock(), createBlock(unref(ElIcon), {\n                    key: 0,\n                    class: normalizeClass(unref(nsInput).e(\"icon\"))\n                  }, {\n                    default: withCtx(() => [\n                      (openBlock(), createBlock(resolveDynamicComponent(_ctx.suffixIcon)))\n                    ]),\n                    _: 1\n                  }, 8, [\"class\"])) : createCommentVNode(\"v-if\", true)\n                ], 64)) : createCommentVNode(\"v-if\", true),\n                unref(showClear) ? (openBlock(), createBlock(unref(ElIcon), {\n                  key: 1,\n                  class: normalizeClass([unref(nsInput).e(\"icon\"), unref(nsInput).e(\"clear\")]),\n                  onMousedown: withModifiers(unref(NOOP), [\"prevent\"]),\n                  onClick: clear\n                }, {\n                  default: withCtx(() => [\n                    (openBlock(), createBlock(resolveDynamicComponent(_ctx.clearIcon)))\n                  ]),\n                  _: 1\n                }, 8, [\"class\", \"onMousedown\"])) : createCommentVNode(\"v-if\", true),\n                unref(showPwdVisible) ? (openBlock(), createBlock(unref(ElIcon), {\n                  key: 2,\n                  class: normalizeClass([unref(nsInput).e(\"icon\"), unref(nsInput).e(\"password\")]),\n                  onClick: handlePasswordVisible\n                }, {\n                  default: withCtx(() => [\n                    (openBlock(), createBlock(resolveDynamicComponent(unref(passwordIcon))))\n                  ]),\n                  _: 1\n                }, 8, [\"class\"])) : createCommentVNode(\"v-if\", true),\n                unref(isWordLimitVisible) ? (openBlock(), createElementBlock(\"span\", {\n                  key: 3,\n                  class: normalizeClass(unref(nsInput).e(\"count\"))\n                }, [\n                  createElementVNode(\"span\", {\n                    class: normalizeClass(unref(nsInput).e(\"count-inner\"))\n                  }, toDisplayString(unref(textLength)) + \" / \" + toDisplayString(_ctx.maxlength), 3)\n                ], 2)) : createCommentVNode(\"v-if\", true),\n                unref(validateState) && unref(validateIcon) && unref(needStatusIcon) ? (openBlock(), createBlock(unref(ElIcon), {\n                  key: 4,\n                  class: normalizeClass([\n                    unref(nsInput).e(\"icon\"),\n                    unref(nsInput).e(\"validateIcon\"),\n                    unref(nsInput).is(\"loading\", unref(validateState) === \"validating\")\n                  ])\n                }, {\n                  default: withCtx(() => [\n                    (openBlock(), createBlock(resolveDynamicComponent(unref(validateIcon))))\n                  ]),\n                  _: 1\n                }, 8, [\"class\"])) : createCommentVNode(\"v-if\", true)\n              ], 2)\n            ], 2)) : createCommentVNode(\"v-if\", true)\n          ], 2),\n          createCommentVNode(\" append slot \"),\n          _ctx.$slots.append ? (openBlock(), createElementBlock(\"div\", {\n            key: 1,\n            class: normalizeClass(unref(nsInput).be(\"group\", \"append\"))\n          }, [\n            renderSlot(_ctx.$slots, \"append\")\n          ], 2)) : createCommentVNode(\"v-if\", true)\n        ], 64)) : (openBlock(), createElementBlock(Fragment, { key: 1 }, [\n          createCommentVNode(\" textarea \"),\n          createElementVNode(\"textarea\", mergeProps({\n            id: unref(inputId),\n            ref_key: \"textarea\",\n            ref: textarea,\n            class: [unref(nsTextarea).e(\"inner\"), unref(nsInput).is(\"focus\", unref(isFocused))]\n          }, unref(attrs), {\n            minlength: _ctx.minlength,\n            maxlength: _ctx.maxlength,\n            tabindex: _ctx.tabindex,\n            disabled: unref(inputDisabled),\n            readonly: _ctx.readonly,\n            autocomplete: _ctx.autocomplete,\n            style: unref(textareaStyle),\n            \"aria-label\": _ctx.ariaLabel,\n            placeholder: _ctx.placeholder,\n            form: _ctx.form,\n            autofocus: _ctx.autofocus,\n            rows: _ctx.rows,\n            role: _ctx.containerRole,\n            onCompositionstart: unref(handleCompositionStart),\n            onCompositionupdate: unref(handleCompositionUpdate),\n            onCompositionend: unref(handleCompositionEnd),\n            onInput: handleInput,\n            onFocus: unref(handleFocus),\n            onBlur: unref(handleBlur),\n            onChange: handleChange,\n            onKeydown: handleKeydown\n          }), null, 16, [\"id\", \"minlength\", \"maxlength\", \"tabindex\", \"disabled\", \"readonly\", \"autocomplete\", \"aria-label\", \"placeholder\", \"form\", \"autofocus\", \"rows\", \"role\", \"onCompositionstart\", \"onCompositionupdate\", \"onCompositionend\", \"onFocus\", \"onBlur\"]),\n          unref(isWordLimitVisible) ? (openBlock(), createElementBlock(\"span\", {\n            key: 0,\n            style: normalizeStyle(countStyle.value),\n            class: normalizeClass(unref(nsInput).e(\"count\"))\n          }, toDisplayString(unref(textLength)) + \" / \" + toDisplayString(_ctx.maxlength), 7)) : createCommentVNode(\"v-if\", true)\n        ], 64))\n      ], 38);\n    };\n  }\n});\nvar Input = /* @__PURE__ */ _export_sfc(_sfc_main, [[\"__file\", \"input.vue\"]]);\n\nexport { Input as default };\n//# sourceMappingURL=input2.mjs.map\n","import { getCurrentInstance, shallowRef, ref, unref, watch } from 'vue';\nimport { useEventListener } from '@vueuse/core';\nimport { isFocusable } from '../../utils/dom/aria.mjs';\nimport { isFunction } from '@vue/shared';\n\nfunction useFocusController(target, {\n  disabled,\n  beforeFocus,\n  afterFocus,\n  beforeBlur,\n  afterBlur\n} = {}) {\n  const instance = getCurrentInstance();\n  const { emit } = instance;\n  const wrapperRef = shallowRef();\n  const isFocused = ref(false);\n  const handleFocus = (event) => {\n    const cancelFocus = isFunction(beforeFocus) ? beforeFocus(event) : false;\n    if (unref(disabled) || isFocused.value || cancelFocus)\n      return;\n    isFocused.value = true;\n    emit(\"focus\", event);\n    afterFocus == null ? void 0 : afterFocus();\n  };\n  const handleBlur = (event) => {\n    var _a;\n    const cancelBlur = isFunction(beforeBlur) ? beforeBlur(event) : false;\n    if (unref(disabled) || event.relatedTarget && ((_a = wrapperRef.value) == null ? void 0 : _a.contains(event.relatedTarget)) || cancelBlur)\n      return;\n    isFocused.value = false;\n    emit(\"blur\", event);\n    afterBlur == null ? void 0 : afterBlur();\n  };\n  const handleClick = (event) => {\n    var _a, _b;\n    if (unref(disabled) || isFocusable(event.target) || ((_a = wrapperRef.value) == null ? void 0 : _a.contains(document.activeElement)) && wrapperRef.value !== document.activeElement)\n      return;\n    (_b = target.value) == null ? void 0 : _b.focus();\n  };\n  watch([wrapperRef, () => unref(disabled)], ([el, disabled2]) => {\n    if (!el)\n      return;\n    if (disabled2) {\n      el.removeAttribute(\"tabindex\");\n    } else {\n      el.setAttribute(\"tabindex\", \"-1\");\n    }\n  });\n  useEventListener(wrapperRef, \"focus\", handleFocus, true);\n  useEventListener(wrapperRef, \"blur\", handleBlur, true);\n  useEventListener(wrapperRef, \"click\", handleClick, true);\n  return {\n    isFocused,\n    wrapperRef,\n    handleFocus,\n    handleBlur\n  };\n}\n\nexport { useFocusController };\n//# sourceMappingURL=index.mjs.map\n","function useCursor(input) {\n  let selectionInfo;\n  function recordCursor() {\n    if (input.value == void 0)\n      return;\n    const { selectionStart, selectionEnd, value } = input.value;\n    if (selectionStart == null || selectionEnd == null)\n      return;\n    const beforeTxt = value.slice(0, Math.max(0, selectionStart));\n    const afterTxt = value.slice(Math.max(0, selectionEnd));\n    selectionInfo = {\n      selectionStart,\n      selectionEnd,\n      value,\n      beforeTxt,\n      afterTxt\n    };\n  }\n  function setCursor() {\n    if (input.value == void 0 || selectionInfo == void 0)\n      return;\n    const { value } = input.value;\n    const { beforeTxt, afterTxt, selectionStart } = selectionInfo;\n    if (beforeTxt == void 0 || afterTxt == void 0 || selectionStart == void 0)\n      return;\n    let startPos = value.length;\n    if (value.endsWith(afterTxt)) {\n      startPos = value.length - afterTxt.length;\n    } else if (value.startsWith(beforeTxt)) {\n      startPos = beforeTxt.length;\n    } else {\n      const beforeLastChar = beforeTxt[selectionStart - 1];\n      const newIndex = value.indexOf(beforeLastChar, selectionStart - 1);\n      if (newIndex !== -1) {\n        startPos = newIndex + 1;\n      }\n    }\n    input.value.setSelectionRange(startPos, startPos);\n  }\n  return [recordCursor, setCursor];\n}\n\nexport { useCursor };\n//# sourceMappingURL=index.mjs.map\n","import { ref, nextTick } from 'vue';\nimport { isKorean } from '../../utils/i18n.mjs';\n\nfunction useComposition({\n  afterComposition,\n  emit\n}) {\n  const isComposing = ref(false);\n  const handleCompositionStart = (event) => {\n    emit == null ? void 0 : emit(\"compositionstart\", event);\n    isComposing.value = true;\n  };\n  const handleCompositionUpdate = (event) => {\n    var _a;\n    emit == null ? void 0 : emit(\"compositionupdate\", event);\n    const text = (_a = event.target) == null ? void 0 : _a.value;\n    const lastCharacter = text[text.length - 1] || \"\";\n    isComposing.value = !isKorean(lastCharacter);\n  };\n  const handleCompositionEnd = (event) => {\n    emit == null ? void 0 : emit(\"compositionend\", event);\n    if (isComposing.value) {\n      isComposing.value = false;\n      nextTick(() => afterComposition(event));\n    }\n  };\n  const handleComposition = (event) => {\n    event.type === \"compositionend\" ? handleCompositionEnd(event) : handleCompositionUpdate(event);\n  };\n  return {\n    isComposing,\n    handleComposition,\n    handleCompositionStart,\n    handleCompositionUpdate,\n    handleCompositionEnd\n  };\n}\n\nexport { useComposition };\n//# sourceMappingURL=index.mjs.map\n","const isKorean = (text) => /([\\uAC00-\\uD7AF\\u3130-\\u318F])+/gi.test(text);\n\nexport { isKorean };\n//# sourceMappingURL=i18n.mjs.map\n","import Input from './src/input2.mjs';\nexport { inputEmits, inputProps } from './src/input.mjs';\nimport { withInstall } from '../../utils/vue/install.mjs';\n\nconst ElInput = withInstall(Input);\n\nexport { ElInput, ElInput as default };\n//# sourceMappingURL=index.mjs.map\n","const GAP = 4;\nconst BAR_MAP = {\n  vertical: {\n    offset: \"offsetHeight\",\n    scroll: \"scrollTop\",\n    scrollSize: \"scrollHeight\",\n    size: \"height\",\n    key: \"vertical\",\n    axis: \"Y\",\n    client: \"clientY\",\n    direction: \"top\"\n  },\n  horizontal: {\n    offset: \"offsetWidth\",\n    scroll: \"scrollLeft\",\n    scrollSize: \"scrollWidth\",\n    size: \"width\",\n    key: \"horizontal\",\n    axis: \"X\",\n    client: \"clientX\",\n    direction: \"left\"\n  }\n};\nconst renderThumbStyle = ({\n  move,\n  size,\n  bar\n}) => ({\n  [bar.size]: size,\n  transform: `translate${bar.axis}(${move}%)`\n});\n\nexport { BAR_MAP, GAP, renderThumbStyle };\n//# sourceMappingURL=util.mjs.map\n","const scrollbarContextKey = Symbol(\"scrollbarContextKey\");\n\nexport { scrollbarContextKey };\n//# sourceMappingURL=constants.mjs.map\n","import { buildProps } from '../../../utils/vue/props/runtime.mjs';\n\nconst thumbProps = buildProps({\n  vertical: Boolean,\n  size: String,\n  move: Number,\n  ratio: {\n    type: Number,\n    required: true\n  },\n  always: Boolean\n});\n\nexport { thumbProps };\n//# sourceMappingURL=thumb.mjs.map\n","import { defineComponent, inject, ref, computed, onBeforeUnmount, toRef, openBlock, createBlock, Transition, unref, withCtx, withDirectives, createElementVNode, normalizeClass, withModifiers, normalizeStyle, vShow } from 'vue';\nimport { useEventListener, isClient } from '@vueuse/core';\nimport { scrollbarContextKey } from './constants.mjs';\nimport { BAR_MAP, renderThumbStyle } from './util.mjs';\nimport { thumbProps } from './thumb.mjs';\nimport _export_sfc from '../../../_virtual/plugin-vue_export-helper.mjs';\nimport { useNamespace } from '../../../hooks/use-namespace/index.mjs';\nimport { throwError } from '../../../utils/error.mjs';\n\nconst COMPONENT_NAME = \"Thumb\";\nconst _sfc_main = /* @__PURE__ */ defineComponent({\n  __name: \"thumb\",\n  props: thumbProps,\n  setup(__props) {\n    const props = __props;\n    const scrollbar = inject(scrollbarContextKey);\n    const ns = useNamespace(\"scrollbar\");\n    if (!scrollbar)\n      throwError(COMPONENT_NAME, \"can not inject scrollbar context\");\n    const instance = ref();\n    const thumb = ref();\n    const thumbState = ref({});\n    const visible = ref(false);\n    let cursorDown = false;\n    let cursorLeave = false;\n    let baseScrollHeight = 0;\n    let baseScrollWidth = 0;\n    let originalOnSelectStart = isClient ? document.onselectstart : null;\n    const bar = computed(() => BAR_MAP[props.vertical ? \"vertical\" : \"horizontal\"]);\n    const thumbStyle = computed(() => renderThumbStyle({\n      size: props.size,\n      move: props.move,\n      bar: bar.value\n    }));\n    const offsetRatio = computed(() => instance.value[bar.value.offset] ** 2 / scrollbar.wrapElement[bar.value.scrollSize] / props.ratio / thumb.value[bar.value.offset]);\n    const clickThumbHandler = (e) => {\n      var _a;\n      e.stopPropagation();\n      if (e.ctrlKey || [1, 2].includes(e.button))\n        return;\n      (_a = window.getSelection()) == null ? void 0 : _a.removeAllRanges();\n      startDrag(e);\n      const el = e.currentTarget;\n      if (!el)\n        return;\n      thumbState.value[bar.value.axis] = el[bar.value.offset] - (e[bar.value.client] - el.getBoundingClientRect()[bar.value.direction]);\n    };\n    const clickTrackHandler = (e) => {\n      if (!thumb.value || !instance.value || !scrollbar.wrapElement)\n        return;\n      const offset = Math.abs(e.target.getBoundingClientRect()[bar.value.direction] - e[bar.value.client]);\n      const thumbHalf = thumb.value[bar.value.offset] / 2;\n      const thumbPositionPercentage = (offset - thumbHalf) * 100 * offsetRatio.value / instance.value[bar.value.offset];\n      scrollbar.wrapElement[bar.value.scroll] = thumbPositionPercentage * scrollbar.wrapElement[bar.value.scrollSize] / 100;\n    };\n    const startDrag = (e) => {\n      e.stopImmediatePropagation();\n      cursorDown = true;\n      baseScrollHeight = scrollbar.wrapElement.scrollHeight;\n      baseScrollWidth = scrollbar.wrapElement.scrollWidth;\n      document.addEventListener(\"mousemove\", mouseMoveDocumentHandler);\n      document.addEventListener(\"mouseup\", mouseUpDocumentHandler);\n      originalOnSelectStart = document.onselectstart;\n      document.onselectstart = () => false;\n    };\n    const mouseMoveDocumentHandler = (e) => {\n      if (!instance.value || !thumb.value)\n        return;\n      if (cursorDown === false)\n        return;\n      const prevPage = thumbState.value[bar.value.axis];\n      if (!prevPage)\n        return;\n      const offset = (instance.value.getBoundingClientRect()[bar.value.direction] - e[bar.value.client]) * -1;\n      const thumbClickPosition = thumb.value[bar.value.offset] - prevPage;\n      const thumbPositionPercentage = (offset - thumbClickPosition) * 100 * offsetRatio.value / instance.value[bar.value.offset];\n      if (bar.value.scroll === \"scrollLeft\") {\n        scrollbar.wrapElement[bar.value.scroll] = thumbPositionPercentage * baseScrollWidth / 100;\n      } else {\n        scrollbar.wrapElement[bar.value.scroll] = thumbPositionPercentage * baseScrollHeight / 100;\n      }\n    };\n    const mouseUpDocumentHandler = () => {\n      cursorDown = false;\n      thumbState.value[bar.value.axis] = 0;\n      document.removeEventListener(\"mousemove\", mouseMoveDocumentHandler);\n      document.removeEventListener(\"mouseup\", mouseUpDocumentHandler);\n      restoreOnselectstart();\n      if (cursorLeave)\n        visible.value = false;\n    };\n    const mouseMoveScrollbarHandler = () => {\n      cursorLeave = false;\n      visible.value = !!props.size;\n    };\n    const mouseLeaveScrollbarHandler = () => {\n      cursorLeave = true;\n      visible.value = cursorDown;\n    };\n    onBeforeUnmount(() => {\n      restoreOnselectstart();\n      document.removeEventListener(\"mouseup\", mouseUpDocumentHandler);\n    });\n    const restoreOnselectstart = () => {\n      if (document.onselectstart !== originalOnSelectStart)\n        document.onselectstart = originalOnSelectStart;\n    };\n    useEventListener(toRef(scrollbar, \"scrollbarElement\"), \"mousemove\", mouseMoveScrollbarHandler);\n    useEventListener(toRef(scrollbar, \"scrollbarElement\"), \"mouseleave\", mouseLeaveScrollbarHandler);\n    return (_ctx, _cache) => {\n      return openBlock(), createBlock(Transition, {\n        name: unref(ns).b(\"fade\"),\n        persisted: \"\"\n      }, {\n        default: withCtx(() => [\n          withDirectives(createElementVNode(\"div\", {\n            ref_key: \"instance\",\n            ref: instance,\n            class: normalizeClass([unref(ns).e(\"bar\"), unref(ns).is(unref(bar).key)]),\n            onMousedown: clickTrackHandler,\n            onClick: withModifiers(() => {\n            }, [\"stop\"])\n          }, [\n            createElementVNode(\"div\", {\n              ref_key: \"thumb\",\n              ref: thumb,\n              class: normalizeClass(unref(ns).e(\"thumb\")),\n              style: normalizeStyle(unref(thumbStyle)),\n              onMousedown: clickThumbHandler\n            }, null, 38)\n          ], 42, [\"onClick\"]), [\n            [vShow, _ctx.always || visible.value]\n          ])\n        ]),\n        _: 1\n      }, 8, [\"name\"]);\n    };\n  }\n});\nvar Thumb = /* @__PURE__ */ _export_sfc(_sfc_main, [[\"__file\", \"thumb.vue\"]]);\n\nexport { Thumb as default };\n//# sourceMappingURL=thumb2.mjs.map\n","import { buildProps } from '../../../utils/vue/props/runtime.mjs';\n\nconst barProps = buildProps({\n  always: {\n    type: Boolean,\n    default: true\n  },\n  minSize: {\n    type: Number,\n    required: true\n  }\n});\n\nexport { barProps };\n//# sourceMappingURL=bar.mjs.map\n","import { defineComponent, inject, ref, openBlock, createElementBlock, Fragment, createVNode } from 'vue';\nimport { GAP } from './util.mjs';\nimport Thumb from './thumb2.mjs';\nimport { barProps } from './bar.mjs';\nimport { scrollbarContextKey } from './constants.mjs';\nimport _export_sfc from '../../../_virtual/plugin-vue_export-helper.mjs';\n\nconst _sfc_main = /* @__PURE__ */ defineComponent({\n  __name: \"bar\",\n  props: barProps,\n  setup(__props, { expose }) {\n    const props = __props;\n    const scrollbar = inject(scrollbarContextKey);\n    const moveX = ref(0);\n    const moveY = ref(0);\n    const sizeWidth = ref(\"\");\n    const sizeHeight = ref(\"\");\n    const ratioY = ref(1);\n    const ratioX = ref(1);\n    const handleScroll = (wrap) => {\n      if (wrap) {\n        const offsetHeight = wrap.offsetHeight - GAP;\n        const offsetWidth = wrap.offsetWidth - GAP;\n        moveY.value = wrap.scrollTop * 100 / offsetHeight * ratioY.value;\n        moveX.value = wrap.scrollLeft * 100 / offsetWidth * ratioX.value;\n      }\n    };\n    const update = () => {\n      const wrap = scrollbar == null ? void 0 : scrollbar.wrapElement;\n      if (!wrap)\n        return;\n      const offsetHeight = wrap.offsetHeight - GAP;\n      const offsetWidth = wrap.offsetWidth - GAP;\n      const originalHeight = offsetHeight ** 2 / wrap.scrollHeight;\n      const originalWidth = offsetWidth ** 2 / wrap.scrollWidth;\n      const height = Math.max(originalHeight, props.minSize);\n      const width = Math.max(originalWidth, props.minSize);\n      ratioY.value = originalHeight / (offsetHeight - originalHeight) / (height / (offsetHeight - height));\n      ratioX.value = originalWidth / (offsetWidth - originalWidth) / (width / (offsetWidth - width));\n      sizeHeight.value = height + GAP < offsetHeight ? `${height}px` : \"\";\n      sizeWidth.value = width + GAP < offsetWidth ? `${width}px` : \"\";\n    };\n    expose({\n      handleScroll,\n      update\n    });\n    return (_ctx, _cache) => {\n      return openBlock(), createElementBlock(Fragment, null, [\n        createVNode(Thumb, {\n          move: moveX.value,\n          ratio: ratioX.value,\n          size: sizeWidth.value,\n          always: _ctx.always\n        }, null, 8, [\"move\", \"ratio\", \"size\", \"always\"]),\n        createVNode(Thumb, {\n          move: moveY.value,\n          ratio: ratioY.value,\n          size: sizeHeight.value,\n          vertical: \"\",\n          always: _ctx.always\n        }, null, 8, [\"move\", \"ratio\", \"size\", \"always\"])\n      ], 64);\n    };\n  }\n});\nvar Bar = /* @__PURE__ */ _export_sfc(_sfc_main, [[\"__file\", \"bar.vue\"]]);\n\nexport { Bar as default };\n//# sourceMappingURL=bar2.mjs.map\n","import { buildProps, definePropType } from '../../../utils/vue/props/runtime.mjs';\nimport { useAriaProps } from '../../../hooks/use-aria/index.mjs';\nimport { isNumber } from '../../../utils/types.mjs';\n\nconst scrollbarProps = buildProps({\n  distance: {\n    type: Number,\n    default: 0\n  },\n  height: {\n    type: [String, Number],\n    default: \"\"\n  },\n  maxHeight: {\n    type: [String, Number],\n    default: \"\"\n  },\n  native: Boolean,\n  wrapStyle: {\n    type: definePropType([String, Object, Array]),\n    default: \"\"\n  },\n  wrapClass: {\n    type: [String, Array],\n    default: \"\"\n  },\n  viewClass: {\n    type: [String, Array],\n    default: \"\"\n  },\n  viewStyle: {\n    type: [String, Array, Object],\n    default: \"\"\n  },\n  noresize: Boolean,\n  tag: {\n    type: String,\n    default: \"div\"\n  },\n  always: Boolean,\n  minSize: {\n    type: Number,\n    default: 20\n  },\n  tabindex: {\n    type: [String, Number],\n    default: void 0\n  },\n  id: String,\n  role: String,\n  ...useAriaProps([\"ariaLabel\", \"ariaOrientation\"])\n});\nconst scrollbarEmits = {\n  \"end-reached\": (direction) => [\"left\", \"right\", \"top\", \"bottom\"].includes(direction),\n  scroll: ({\n    scrollTop,\n    scrollLeft\n  }) => [scrollTop, scrollLeft].every(isNumber)\n};\n\nexport { scrollbarEmits, scrollbarProps };\n//# sourceMappingURL=scrollbar.mjs.map\n","import { defineComponent, ref, computed, watch, nextTick, provide, reactive, onActivated, onMounted, onUpdated, openBlock, createElementBlock, normalizeClass, unref, createElementVNode, normalizeStyle, createBlock, resolveDynamicComponent, withCtx, renderSlot, createCommentVNode } from 'vue';\nimport { useResizeObserver, useEventListener } from '@vueuse/core';\nimport Bar from './bar2.mjs';\nimport { scrollbarContextKey } from './constants.mjs';\nimport { scrollbarProps, scrollbarEmits } from './scrollbar.mjs';\nimport _export_sfc from '../../../_virtual/plugin-vue_export-helper.mjs';\nimport { useNamespace } from '../../../hooks/use-namespace/index.mjs';\nimport { addUnit } from '../../../utils/dom/style.mjs';\nimport { isObject } from '@vue/shared';\nimport { isNumber } from '../../../utils/types.mjs';\n\nconst COMPONENT_NAME = \"ElScrollbar\";\nconst __default__ = defineComponent({\n  name: COMPONENT_NAME\n});\nconst _sfc_main = /* @__PURE__ */ defineComponent({\n  ...__default__,\n  props: scrollbarProps,\n  emits: scrollbarEmits,\n  setup(__props, { expose, emit }) {\n    const props = __props;\n    const ns = useNamespace(\"scrollbar\");\n    let stopResizeObserver = void 0;\n    let stopWrapResizeObserver = void 0;\n    let stopResizeListener = void 0;\n    let wrapScrollTop = 0;\n    let wrapScrollLeft = 0;\n    let direction = \"\";\n    const distanceScrollState = {\n      bottom: false,\n      top: false,\n      right: false,\n      left: false\n    };\n    const scrollbarRef = ref();\n    const wrapRef = ref();\n    const resizeRef = ref();\n    const barRef = ref();\n    const wrapStyle = computed(() => {\n      const style = {};\n      if (props.height)\n        style.height = addUnit(props.height);\n      if (props.maxHeight)\n        style.maxHeight = addUnit(props.maxHeight);\n      return [props.wrapStyle, style];\n    });\n    const wrapKls = computed(() => {\n      return [\n        props.wrapClass,\n        ns.e(\"wrap\"),\n        { [ns.em(\"wrap\", \"hidden-default\")]: !props.native }\n      ];\n    });\n    const resizeKls = computed(() => {\n      return [ns.e(\"view\"), props.viewClass];\n    });\n    const shouldSkipDirection = (direction2) => {\n      var _a;\n      return (_a = distanceScrollState[direction2]) != null ? _a : false;\n    };\n    const DIRECTION_PAIRS = {\n      top: \"bottom\",\n      bottom: \"top\",\n      left: \"right\",\n      right: \"left\"\n    };\n    const updateTriggerStatus = (arrivedStates) => {\n      const oppositeDirection = DIRECTION_PAIRS[direction];\n      if (!oppositeDirection)\n        return;\n      const arrived = arrivedStates[direction];\n      const oppositeArrived = arrivedStates[oppositeDirection];\n      if (arrived && !distanceScrollState[direction]) {\n        distanceScrollState[direction] = true;\n      }\n      if (!oppositeArrived && distanceScrollState[oppositeDirection]) {\n        distanceScrollState[oppositeDirection] = false;\n      }\n    };\n    const handleScroll = () => {\n      var _a;\n      if (wrapRef.value) {\n        (_a = barRef.value) == null ? void 0 : _a.handleScroll(wrapRef.value);\n        const prevTop = wrapScrollTop;\n        const prevLeft = wrapScrollLeft;\n        wrapScrollTop = wrapRef.value.scrollTop;\n        wrapScrollLeft = wrapRef.value.scrollLeft;\n        const arrivedStates = {\n          bottom: wrapScrollTop + wrapRef.value.clientHeight >= wrapRef.value.scrollHeight - props.distance,\n          top: wrapScrollTop <= props.distance && prevTop !== 0,\n          right: wrapScrollLeft + wrapRef.value.clientWidth >= wrapRef.value.scrollWidth - props.distance && prevLeft !== wrapScrollLeft,\n          left: wrapScrollLeft <= props.distance && prevLeft !== 0\n        };\n        emit(\"scroll\", {\n          scrollTop: wrapScrollTop,\n          scrollLeft: wrapScrollLeft\n        });\n        if (prevTop !== wrapScrollTop) {\n          direction = wrapScrollTop > prevTop ? \"bottom\" : \"top\";\n        }\n        if (prevLeft !== wrapScrollLeft) {\n          direction = wrapScrollLeft > prevLeft ? \"right\" : \"left\";\n        }\n        if (props.distance > 0) {\n          if (shouldSkipDirection(direction)) {\n            return;\n          }\n          updateTriggerStatus(arrivedStates);\n        }\n        if (arrivedStates[direction])\n          emit(\"end-reached\", direction);\n      }\n    };\n    function scrollTo(arg1, arg2) {\n      if (isObject(arg1)) {\n        wrapRef.value.scrollTo(arg1);\n      } else if (isNumber(arg1) && isNumber(arg2)) {\n        wrapRef.value.scrollTo(arg1, arg2);\n      }\n    }\n    const setScrollTop = (value) => {\n      if (!isNumber(value)) {\n        return;\n      }\n      wrapRef.value.scrollTop = value;\n    };\n    const setScrollLeft = (value) => {\n      if (!isNumber(value)) {\n        return;\n      }\n      wrapRef.value.scrollLeft = value;\n    };\n    const update = () => {\n      var _a;\n      (_a = barRef.value) == null ? void 0 : _a.update();\n      distanceScrollState[direction] = false;\n    };\n    watch(() => props.noresize, (noresize) => {\n      if (noresize) {\n        stopResizeObserver == null ? void 0 : stopResizeObserver();\n        stopWrapResizeObserver == null ? void 0 : stopWrapResizeObserver();\n        stopResizeListener == null ? void 0 : stopResizeListener();\n      } else {\n        ({ stop: stopResizeObserver } = useResizeObserver(resizeRef, update));\n        ({ stop: stopWrapResizeObserver } = useResizeObserver(wrapRef, update));\n        stopResizeListener = useEventListener(\"resize\", update);\n      }\n    }, { immediate: true });\n    watch(() => [props.maxHeight, props.height], () => {\n      if (!props.native)\n        nextTick(() => {\n          var _a;\n          update();\n          if (wrapRef.value) {\n            (_a = barRef.value) == null ? void 0 : _a.handleScroll(wrapRef.value);\n          }\n        });\n    });\n    provide(scrollbarContextKey, reactive({\n      scrollbarElement: scrollbarRef,\n      wrapElement: wrapRef\n    }));\n    onActivated(() => {\n      if (wrapRef.value) {\n        wrapRef.value.scrollTop = wrapScrollTop;\n        wrapRef.value.scrollLeft = wrapScrollLeft;\n      }\n    });\n    onMounted(() => {\n      if (!props.native)\n        nextTick(() => {\n          update();\n        });\n    });\n    onUpdated(() => update());\n    expose({\n      wrapRef,\n      update,\n      scrollTo,\n      setScrollTop,\n      setScrollLeft,\n      handleScroll\n    });\n    return (_ctx, _cache) => {\n      return openBlock(), createElementBlock(\"div\", {\n        ref_key: \"scrollbarRef\",\n        ref: scrollbarRef,\n        class: normalizeClass(unref(ns).b())\n      }, [\n        createElementVNode(\"div\", {\n          ref_key: \"wrapRef\",\n          ref: wrapRef,\n          class: normalizeClass(unref(wrapKls)),\n          style: normalizeStyle(unref(wrapStyle)),\n          tabindex: _ctx.tabindex,\n          onScroll: handleScroll\n        }, [\n          (openBlock(), createBlock(resolveDynamicComponent(_ctx.tag), {\n            id: _ctx.id,\n            ref_key: \"resizeRef\",\n            ref: resizeRef,\n            class: normalizeClass(unref(resizeKls)),\n            style: normalizeStyle(_ctx.viewStyle),\n            role: _ctx.role,\n            \"aria-label\": _ctx.ariaLabel,\n            \"aria-orientation\": _ctx.ariaOrientation\n          }, {\n            default: withCtx(() => [\n              renderSlot(_ctx.$slots, \"default\")\n            ]),\n            _: 3\n          }, 8, [\"id\", \"class\", \"style\", \"role\", \"aria-label\", \"aria-orientation\"]))\n        ], 46, [\"tabindex\"]),\n        !_ctx.native ? (openBlock(), createBlock(Bar, {\n          key: 0,\n          ref_key: \"barRef\",\n          ref: barRef,\n          always: _ctx.always,\n          \"min-size\": _ctx.minSize\n        }, null, 8, [\"always\", \"min-size\"])) : createCommentVNode(\"v-if\", true)\n      ], 2);\n    };\n  }\n});\nvar Scrollbar = /* @__PURE__ */ _export_sfc(_sfc_main, [[\"__file\", \"scrollbar.vue\"]]);\n\nexport { Scrollbar as default };\n//# sourceMappingURL=scrollbar2.mjs.map\n","import Scrollbar from './src/scrollbar2.mjs';\nexport { BAR_MAP, GAP, renderThumbStyle } from './src/util.mjs';\nexport { scrollbarEmits, scrollbarProps } from './src/scrollbar.mjs';\nexport { thumbProps } from './src/thumb.mjs';\nexport { scrollbarContextKey } from './src/constants.mjs';\nimport { withInstall } from '../../utils/vue/install.mjs';\n\nconst ElScrollbar = withInstall(Scrollbar);\n\nexport { ElScrollbar, ElScrollbar as default };\n//# sourceMappingURL=index.mjs.map\n","const POPPER_INJECTION_KEY = Symbol(\"popper\");\nconst POPPER_CONTENT_INJECTION_KEY = Symbol(\"popperContent\");\n\nexport { POPPER_CONTENT_INJECTION_KEY, POPPER_INJECTION_KEY };\n//# sourceMappingURL=constants.mjs.map\n","import { buildProps } from '../../../utils/vue/props/runtime.mjs';\n\nconst Effect = {\n  LIGHT: \"light\",\n  DARK: \"dark\"\n};\nconst roleTypes = [\n  \"dialog\",\n  \"grid\",\n  \"group\",\n  \"listbox\",\n  \"menu\",\n  \"navigation\",\n  \"tooltip\",\n  \"tree\"\n];\nconst popperProps = buildProps({\n  role: {\n    type: String,\n    values: roleTypes,\n    default: \"tooltip\"\n  }\n});\nconst usePopperProps = popperProps;\n\nexport { Effect, popperProps, roleTypes, usePopperProps };\n//# sourceMappingURL=popper2.mjs.map\n","import { defineComponent, ref, computed, provide, renderSlot } from 'vue';\nimport { POPPER_INJECTION_KEY } from './constants.mjs';\nimport { popperProps } from './popper2.mjs';\nimport _export_sfc from '../../../_virtual/plugin-vue_export-helper.mjs';\n\nconst __default__ = defineComponent({\n  name: \"ElPopper\",\n  inheritAttrs: false\n});\nconst _sfc_main = /* @__PURE__ */ defineComponent({\n  ...__default__,\n  props: popperProps,\n  setup(__props, { expose }) {\n    const props = __props;\n    const triggerRef = ref();\n    const popperInstanceRef = ref();\n    const contentRef = ref();\n    const referenceRef = ref();\n    const role = computed(() => props.role);\n    const popperProvides = {\n      triggerRef,\n      popperInstanceRef,\n      contentRef,\n      referenceRef,\n      role\n    };\n    expose(popperProvides);\n    provide(POPPER_INJECTION_KEY, popperProvides);\n    return (_ctx, _cache) => {\n      return renderSlot(_ctx.$slots, \"default\");\n    };\n  }\n});\nvar Popper = /* @__PURE__ */ _export_sfc(_sfc_main, [[\"__file\", \"popper.vue\"]]);\n\nexport { Popper as default };\n//# sourceMappingURL=popper.mjs.map\n","import { defineComponent, inject, onBeforeUnmount, openBlock, createElementBlock, normalizeClass, unref, normalizeStyle } from 'vue';\nimport { POPPER_CONTENT_INJECTION_KEY } from './constants.mjs';\nimport _export_sfc from '../../../_virtual/plugin-vue_export-helper.mjs';\nimport { useNamespace } from '../../../hooks/use-namespace/index.mjs';\n\nconst __default__ = defineComponent({\n  name: \"ElPopperArrow\",\n  inheritAttrs: false\n});\nconst _sfc_main = /* @__PURE__ */ defineComponent({\n  ...__default__,\n  setup(__props, { expose }) {\n    const ns = useNamespace(\"popper\");\n    const { arrowRef, arrowStyle } = inject(POPPER_CONTENT_INJECTION_KEY, void 0);\n    onBeforeUnmount(() => {\n      arrowRef.value = void 0;\n    });\n    expose({\n      arrowRef\n    });\n    return (_ctx, _cache) => {\n      return openBlock(), createElementBlock(\"span\", {\n        ref_key: \"arrowRef\",\n        ref: arrowRef,\n        class: normalizeClass(unref(ns).e(\"arrow\")),\n        style: normalizeStyle(unref(arrowStyle)),\n        \"data-popper-arrow\": \"\"\n      }, null, 6);\n    };\n  }\n});\nvar ElPopperArrow = /* @__PURE__ */ _export_sfc(_sfc_main, [[\"__file\", \"arrow.vue\"]]);\n\nexport { ElPopperArrow as default };\n//# sourceMappingURL=arrow2.mjs.map\n","import { buildProps, definePropType } from '../../../utils/vue/props/runtime.mjs';\n\nconst popperTriggerProps = buildProps({\n  virtualRef: {\n    type: definePropType(Object)\n  },\n  virtualTriggering: Boolean,\n  onMouseenter: {\n    type: definePropType(Function)\n  },\n  onMouseleave: {\n    type: definePropType(Function)\n  },\n  onClick: {\n    type: definePropType(Function)\n  },\n  onKeydown: {\n    type: definePropType(Function)\n  },\n  onFocus: {\n    type: definePropType(Function)\n  },\n  onBlur: {\n    type: definePropType(Function)\n  },\n  onContextmenu: {\n    type: definePropType(Function)\n  },\n  id: String,\n  open: Boolean\n});\nconst usePopperTriggerProps = popperTriggerProps;\n\nexport { popperTriggerProps, usePopperTriggerProps };\n//# sourceMappingURL=trigger.mjs.map\n","import { provide } from 'vue';\n\nconst FORWARD_REF_INJECTION_KEY = Symbol(\"elForwardRef\");\nconst useForwardRef = (forwardRef) => {\n  const setForwardRef = (el) => {\n    forwardRef.value = el;\n  };\n  provide(FORWARD_REF_INJECTION_KEY, {\n    setForwardRef\n  });\n};\nconst useForwardRefDirective = (setForwardRef) => {\n  return {\n    mounted(el) {\n      setForwardRef(el);\n    },\n    updated(el) {\n      setForwardRef(el);\n    },\n    unmounted() {\n      setForwardRef(null);\n    }\n  };\n};\n\nexport { FORWARD_REF_INJECTION_KEY, useForwardRef, useForwardRefDirective };\n//# sourceMappingURL=index.mjs.map\n","import { defineComponent, inject, withDirectives, cloneVNode, Comment, Fragment, createVNode, Text } from 'vue';\nimport { FORWARD_REF_INJECTION_KEY, useForwardRefDirective } from '../../../hooks/use-forward-ref/index.mjs';\nimport { NOOP, isObject } from '@vue/shared';\nimport { useNamespace } from '../../../hooks/use-namespace/index.mjs';\n\nconst NAME = \"ElOnlyChild\";\nconst OnlyChild = defineComponent({\n  name: NAME,\n  setup(_, {\n    slots,\n    attrs\n  }) {\n    var _a;\n    const forwardRefInjection = inject(FORWARD_REF_INJECTION_KEY);\n    const forwardRefDirective = useForwardRefDirective((_a = forwardRefInjection == null ? void 0 : forwardRefInjection.setForwardRef) != null ? _a : NOOP);\n    return () => {\n      var _a2;\n      const defaultSlot = (_a2 = slots.default) == null ? void 0 : _a2.call(slots, attrs);\n      if (!defaultSlot)\n        return null;\n      const [firstLegitNode, length] = findFirstLegitChild(defaultSlot);\n      if (!firstLegitNode) {\n        return null;\n      }\n      return withDirectives(cloneVNode(firstLegitNode, attrs), [[forwardRefDirective]]);\n    };\n  }\n});\nfunction findFirstLegitChild(node) {\n  if (!node)\n    return [null, 0];\n  const children = node;\n  const len = children.filter((c) => c.type !== Comment).length;\n  for (const child of children) {\n    if (isObject(child)) {\n      switch (child.type) {\n        case Comment:\n          continue;\n        case Text:\n        case \"svg\":\n          return [wrapTextContent(child), len];\n        case Fragment:\n          return findFirstLegitChild(child.children);\n        default:\n          return [child, len];\n      }\n    }\n    return [wrapTextContent(child), len];\n  }\n  return [null, 0];\n}\nfunction wrapTextContent(s) {\n  const ns = useNamespace(\"only-child\");\n  return createVNode(\"span\", {\n    \"class\": ns.e(\"content\")\n  }, [s]);\n}\n\nexport { OnlyChild };\n//# sourceMappingURL=only-child.mjs.map\n","import { defineComponent, inject, computed, onMounted, watch, onBeforeUnmount, openBlock, createBlock, unref, mergeProps, withCtx, renderSlot, createCommentVNode } from 'vue';\nimport { isNil } from 'lodash-unified';\nimport { unrefElement } from '@vueuse/core';\nimport { POPPER_INJECTION_KEY } from './constants.mjs';\nimport { popperTriggerProps } from './trigger.mjs';\nimport _export_sfc from '../../../_virtual/plugin-vue_export-helper.mjs';\nimport { useForwardRef } from '../../../hooks/use-forward-ref/index.mjs';\nimport { isElement } from '../../../utils/types.mjs';\nimport { OnlyChild } from '../../slot/src/only-child.mjs';\nimport { isFocusable } from '../../../utils/dom/aria.mjs';\n\nconst __default__ = defineComponent({\n  name: \"ElPopperTrigger\",\n  inheritAttrs: false\n});\nconst _sfc_main = /* @__PURE__ */ defineComponent({\n  ...__default__,\n  props: popperTriggerProps,\n  setup(__props, { expose }) {\n    const props = __props;\n    const { role, triggerRef } = inject(POPPER_INJECTION_KEY, void 0);\n    useForwardRef(triggerRef);\n    const ariaControls = computed(() => {\n      return ariaHaspopup.value ? props.id : void 0;\n    });\n    const ariaDescribedby = computed(() => {\n      if (role && role.value === \"tooltip\") {\n        return props.open && props.id ? props.id : void 0;\n      }\n      return void 0;\n    });\n    const ariaHaspopup = computed(() => {\n      if (role && role.value !== \"tooltip\") {\n        return role.value;\n      }\n      return void 0;\n    });\n    const ariaExpanded = computed(() => {\n      return ariaHaspopup.value ? `${props.open}` : void 0;\n    });\n    let virtualTriggerAriaStopWatch = void 0;\n    const TRIGGER_ELE_EVENTS = [\n      \"onMouseenter\",\n      \"onMouseleave\",\n      \"onClick\",\n      \"onKeydown\",\n      \"onFocus\",\n      \"onBlur\",\n      \"onContextmenu\"\n    ];\n    onMounted(() => {\n      watch(() => props.virtualRef, (virtualEl) => {\n        if (virtualEl) {\n          triggerRef.value = unrefElement(virtualEl);\n        }\n      }, {\n        immediate: true\n      });\n      watch(triggerRef, (el, prevEl) => {\n        virtualTriggerAriaStopWatch == null ? void 0 : virtualTriggerAriaStopWatch();\n        virtualTriggerAriaStopWatch = void 0;\n        if (isElement(el)) {\n          TRIGGER_ELE_EVENTS.forEach((eventName) => {\n            var _a;\n            const handler = props[eventName];\n            if (handler) {\n              el.addEventListener(eventName.slice(2).toLowerCase(), handler, [\"onFocus\", \"onBlur\"].includes(eventName));\n              (_a = prevEl == null ? void 0 : prevEl.removeEventListener) == null ? void 0 : _a.call(prevEl, eventName.slice(2).toLowerCase(), handler, [\"onFocus\", \"onBlur\"].includes(eventName));\n            }\n          });\n          if (isFocusable(el)) {\n            virtualTriggerAriaStopWatch = watch([ariaControls, ariaDescribedby, ariaHaspopup, ariaExpanded], (watches) => {\n              [\n                \"aria-controls\",\n                \"aria-describedby\",\n                \"aria-haspopup\",\n                \"aria-expanded\"\n              ].forEach((key, idx) => {\n                isNil(watches[idx]) ? el.removeAttribute(key) : el.setAttribute(key, watches[idx]);\n              });\n            }, { immediate: true });\n          }\n        }\n        if (isElement(prevEl) && isFocusable(prevEl)) {\n          [\n            \"aria-controls\",\n            \"aria-describedby\",\n            \"aria-haspopup\",\n            \"aria-expanded\"\n          ].forEach((key) => prevEl.removeAttribute(key));\n        }\n      }, {\n        immediate: true\n      });\n    });\n    onBeforeUnmount(() => {\n      virtualTriggerAriaStopWatch == null ? void 0 : virtualTriggerAriaStopWatch();\n      virtualTriggerAriaStopWatch = void 0;\n      if (triggerRef.value && isElement(triggerRef.value)) {\n        const el = triggerRef.value;\n        TRIGGER_ELE_EVENTS.forEach((eventName) => {\n          const handler = props[eventName];\n          if (handler) {\n            el.removeEventListener(eventName.slice(2).toLowerCase(), handler, [\"onFocus\", \"onBlur\"].includes(eventName));\n          }\n        });\n        triggerRef.value = void 0;\n      }\n    });\n    expose({\n      triggerRef\n    });\n    return (_ctx, _cache) => {\n      return !_ctx.virtualTriggering ? (openBlock(), createBlock(unref(OnlyChild), mergeProps({ key: 0 }, _ctx.$attrs, {\n        \"aria-controls\": unref(ariaControls),\n        \"aria-describedby\": unref(ariaDescribedby),\n        \"aria-expanded\": unref(ariaExpanded),\n        \"aria-haspopup\": unref(ariaHaspopup)\n      }), {\n        default: withCtx(() => [\n          renderSlot(_ctx.$slots, \"default\")\n        ]),\n        _: 3\n      }, 16, [\"aria-controls\", \"aria-describedby\", \"aria-expanded\", \"aria-haspopup\"])) : createCommentVNode(\"v-if\", true);\n    };\n  }\n});\nvar ElPopperTrigger = /* @__PURE__ */ _export_sfc(_sfc_main, [[\"__file\", \"trigger.vue\"]]);\n\nexport { ElPopperTrigger as default };\n//# sourceMappingURL=trigger2.mjs.map\n","const FOCUS_AFTER_TRAPPED = \"focus-trap.focus-after-trapped\";\nconst FOCUS_AFTER_RELEASED = \"focus-trap.focus-after-released\";\nconst FOCUSOUT_PREVENTED = \"focus-trap.focusout-prevented\";\nconst FOCUS_AFTER_TRAPPED_OPTS = {\n  cancelable: true,\n  bubbles: false\n};\nconst FOCUSOUT_PREVENTED_OPTS = {\n  cancelable: true,\n  bubbles: false\n};\nconst ON_TRAP_FOCUS_EVT = \"focusAfterTrapped\";\nconst ON_RELEASE_FOCUS_EVT = \"focusAfterReleased\";\nconst FOCUS_TRAP_INJECTION_KEY = Symbol(\"elFocusTrap\");\n\nexport { FOCUSOUT_PREVENTED, FOCUSOUT_PREVENTED_OPTS, FOCUS_AFTER_RELEASED, FOCUS_AFTER_TRAPPED, FOCUS_AFTER_TRAPPED_OPTS, FOCUS_TRAP_INJECTION_KEY, ON_RELEASE_FOCUS_EVT, ON_TRAP_FOCUS_EVT };\n//# sourceMappingURL=tokens.mjs.map\n","import { ref, onMounted, onBeforeUnmount } from 'vue';\nimport { FOCUSOUT_PREVENTED, FOCUSOUT_PREVENTED_OPTS } from './tokens.mjs';\nimport { focusElement } from '../../../utils/dom/aria.mjs';\n\nconst focusReason = ref();\nconst lastUserFocusTimestamp = ref(0);\nconst lastAutomatedFocusTimestamp = ref(0);\nlet focusReasonUserCount = 0;\nconst obtainAllFocusableElements = (element) => {\n  const nodes = [];\n  const walker = document.createTreeWalker(element, NodeFilter.SHOW_ELEMENT, {\n    acceptNode: (node) => {\n      const isHiddenInput = node.tagName === \"INPUT\" && node.type === \"hidden\";\n      if (node.disabled || node.hidden || isHiddenInput)\n        return NodeFilter.FILTER_SKIP;\n      return node.tabIndex >= 0 || node === document.activeElement ? NodeFilter.FILTER_ACCEPT : NodeFilter.FILTER_SKIP;\n    }\n  });\n  while (walker.nextNode())\n    nodes.push(walker.currentNode);\n  return nodes;\n};\nconst getVisibleElement = (elements, container) => {\n  for (const element of elements) {\n    if (!isHidden(element, container))\n      return element;\n  }\n};\nconst isHidden = (element, container) => {\n  if (getComputedStyle(element).visibility === \"hidden\")\n    return true;\n  while (element) {\n    if (container && element === container)\n      return false;\n    if (getComputedStyle(element).display === \"none\")\n      return true;\n    element = element.parentElement;\n  }\n  return false;\n};\nconst getEdges = (container) => {\n  const focusable = obtainAllFocusableElements(container);\n  const first = getVisibleElement(focusable, container);\n  const last = getVisibleElement(focusable.reverse(), container);\n  return [first, last];\n};\nconst isSelectable = (element) => {\n  return element instanceof HTMLInputElement && \"select\" in element;\n};\nconst tryFocus = (element, shouldSelect) => {\n  if (element) {\n    const prevFocusedElement = document.activeElement;\n    focusElement(element, { preventScroll: true });\n    lastAutomatedFocusTimestamp.value = window.performance.now();\n    if (element !== prevFocusedElement && isSelectable(element) && shouldSelect) {\n      element.select();\n    }\n  }\n};\nfunction removeFromStack(list, item) {\n  const copy = [...list];\n  const idx = list.indexOf(item);\n  if (idx !== -1) {\n    copy.splice(idx, 1);\n  }\n  return copy;\n}\nconst createFocusableStack = () => {\n  let stack = [];\n  const push = (layer) => {\n    const currentLayer = stack[0];\n    if (currentLayer && layer !== currentLayer) {\n      currentLayer.pause();\n    }\n    stack = removeFromStack(stack, layer);\n    stack.unshift(layer);\n  };\n  const remove = (layer) => {\n    var _a, _b;\n    stack = removeFromStack(stack, layer);\n    (_b = (_a = stack[0]) == null ? void 0 : _a.resume) == null ? void 0 : _b.call(_a);\n  };\n  return {\n    push,\n    remove\n  };\n};\nconst focusFirstDescendant = (elements, shouldSelect = false) => {\n  const prevFocusedElement = document.activeElement;\n  for (const element of elements) {\n    tryFocus(element, shouldSelect);\n    if (document.activeElement !== prevFocusedElement)\n      return;\n  }\n};\nconst focusableStack = createFocusableStack();\nconst isFocusCausedByUserEvent = () => {\n  return lastUserFocusTimestamp.value > lastAutomatedFocusTimestamp.value;\n};\nconst notifyFocusReasonPointer = () => {\n  focusReason.value = \"pointer\";\n  lastUserFocusTimestamp.value = window.performance.now();\n};\nconst notifyFocusReasonKeydown = () => {\n  focusReason.value = \"keyboard\";\n  lastUserFocusTimestamp.value = window.performance.now();\n};\nconst useFocusReason = () => {\n  onMounted(() => {\n    if (focusReasonUserCount === 0) {\n      document.addEventListener(\"mousedown\", notifyFocusReasonPointer);\n      document.addEventListener(\"touchstart\", notifyFocusReasonPointer);\n      document.addEventListener(\"keydown\", notifyFocusReasonKeydown);\n    }\n    focusReasonUserCount++;\n  });\n  onBeforeUnmount(() => {\n    focusReasonUserCount--;\n    if (focusReasonUserCount <= 0) {\n      document.removeEventListener(\"mousedown\", notifyFocusReasonPointer);\n      document.removeEventListener(\"touchstart\", notifyFocusReasonPointer);\n      document.removeEventListener(\"keydown\", notifyFocusReasonKeydown);\n    }\n  });\n  return {\n    focusReason,\n    lastUserFocusTimestamp,\n    lastAutomatedFocusTimestamp\n  };\n};\nconst createFocusOutPreventedEvent = (detail) => {\n  return new CustomEvent(FOCUSOUT_PREVENTED, {\n    ...FOCUSOUT_PREVENTED_OPTS,\n    detail\n  });\n};\n\nexport { createFocusOutPreventedEvent, focusFirstDescendant, focusableStack, getEdges, getVisibleElement, isFocusCausedByUserEvent, isHidden, obtainAllFocusableElements, tryFocus, useFocusReason };\n//# sourceMappingURL=utils.mjs.map\n","const EVENT_CODE = {\n  tab: \"Tab\",\n  enter: \"Enter\",\n  space: \"Space\",\n  left: \"ArrowLeft\",\n  up: \"ArrowUp\",\n  right: \"ArrowRight\",\n  down: \"ArrowDown\",\n  esc: \"Escape\",\n  delete: \"Delete\",\n  backspace: \"Backspace\",\n  numpadEnter: \"NumpadEnter\",\n  pageUp: \"PageUp\",\n  pageDown: \"PageDown\",\n  home: \"Home\",\n  end: \"End\"\n};\n\nexport { EVENT_CODE };\n//# sourceMappingURL=aria.mjs.map\n","import { isAndroid } from '../browser.mjs';\nimport { EVENT_CODE } from '../../constants/aria.mjs';\n\nconst composeEventHandlers = (theirsHandler, oursHandler, { checkForDefaultPrevented = true } = {}) => {\n  const handleEvent = (event) => {\n    const shouldPrevent = theirsHandler == null ? void 0 : theirsHandler(event);\n    if (checkForDefaultPrevented === false || !shouldPrevent) {\n      return oursHandler == null ? void 0 : oursHandler(event);\n    }\n  };\n  return handleEvent;\n};\nconst whenMouse = (handler) => {\n  return (e) => e.pointerType === \"mouse\" ? handler(e) : void 0;\n};\nconst getEventCode = (event) => {\n  if (event.code && event.code !== \"Unidentified\")\n    return event.code;\n  const key = getEventKey(event);\n  if (key) {\n    if (Object.values(EVENT_CODE).includes(key))\n      return key;\n    switch (key) {\n      case \" \":\n        return EVENT_CODE.space;\n      default:\n        return \"\";\n    }\n  }\n  return \"\";\n};\nconst getEventKey = (event) => {\n  let key = event.key && event.key !== \"Unidentified\" ? event.key : \"\";\n  if (!key && event.type === \"keyup\" && isAndroid()) {\n    const target = event.target;\n    key = target.value.charAt(target.selectionStart - 1);\n  }\n  return key;\n};\n\nexport { composeEventHandlers, getEventCode, getEventKey, whenMouse };\n//# sourceMappingURL=event.mjs.map\n","import { onMounted, onBeforeUnmount } from 'vue';\nimport { isClient } from '@vueuse/core';\nimport { getEventCode } from '../../utils/dom/event.mjs';\nimport { EVENT_CODE } from '../../constants/aria.mjs';\n\nlet registeredEscapeHandlers = [];\nconst cachedHandler = (event) => {\n  const code = getEventCode(event);\n  if (code === EVENT_CODE.esc) {\n    registeredEscapeHandlers.forEach((registeredHandler) => registeredHandler(event));\n  }\n};\nconst useEscapeKeydown = (handler) => {\n  onMounted(() => {\n    if (registeredEscapeHandlers.length === 0) {\n      document.addEventListener(\"keydown\", cachedHandler);\n    }\n    if (isClient)\n      registeredEscapeHandlers.push(handler);\n  });\n  onBeforeUnmount(() => {\n    registeredEscapeHandlers = registeredEscapeHandlers.filter((registeredHandler) => registeredHandler !== handler);\n    if (registeredEscapeHandlers.length === 0) {\n      if (isClient)\n        document.removeEventListener(\"keydown\", cachedHandler);\n    }\n  });\n};\n\nexport { useEscapeKeydown };\n//# sourceMappingURL=index.mjs.map\n","import { defineComponent, ref, provide, watch, unref, onMounted, onBeforeUnmount, nextTick, renderSlot } from 'vue';\nimport { isNil } from 'lodash-unified';\nimport { useFocusReason, tryFocus, createFocusOutPreventedEvent, getEdges, focusableStack, focusFirstDescendant, obtainAllFocusableElements, isFocusCausedByUserEvent } from './utils.mjs';\nimport { ON_TRAP_FOCUS_EVT, ON_RELEASE_FOCUS_EVT, FOCUS_TRAP_INJECTION_KEY, FOCUS_AFTER_TRAPPED, FOCUS_AFTER_TRAPPED_OPTS, FOCUS_AFTER_RELEASED } from './tokens.mjs';\nimport _export_sfc from '../../../_virtual/plugin-vue_export-helper.mjs';\nimport { useEscapeKeydown } from '../../../hooks/use-escape-keydown/index.mjs';\nimport { getEventCode } from '../../../utils/dom/event.mjs';\nimport { EVENT_CODE } from '../../../constants/aria.mjs';\nimport { isString } from '@vue/shared';\n\nconst _sfc_main = defineComponent({\n  name: \"ElFocusTrap\",\n  inheritAttrs: false,\n  props: {\n    loop: Boolean,\n    trapped: Boolean,\n    focusTrapEl: Object,\n    focusStartEl: {\n      type: [Object, String],\n      default: \"first\"\n    }\n  },\n  emits: [\n    ON_TRAP_FOCUS_EVT,\n    ON_RELEASE_FOCUS_EVT,\n    \"focusin\",\n    \"focusout\",\n    \"focusout-prevented\",\n    \"release-requested\"\n  ],\n  setup(props, { emit }) {\n    const forwardRef = ref();\n    let lastFocusBeforeTrapped;\n    let lastFocusAfterTrapped;\n    const { focusReason } = useFocusReason();\n    useEscapeKeydown((event) => {\n      if (props.trapped && !focusLayer.paused) {\n        emit(\"release-requested\", event);\n      }\n    });\n    const focusLayer = {\n      paused: false,\n      pause() {\n        this.paused = true;\n      },\n      resume() {\n        this.paused = false;\n      }\n    };\n    const onKeydown = (e) => {\n      if (!props.loop && !props.trapped)\n        return;\n      if (focusLayer.paused)\n        return;\n      const { altKey, ctrlKey, metaKey, currentTarget, shiftKey } = e;\n      const { loop } = props;\n      const code = getEventCode(e);\n      const isTabbing = code === EVENT_CODE.tab && !altKey && !ctrlKey && !metaKey;\n      const currentFocusingEl = document.activeElement;\n      if (isTabbing && currentFocusingEl) {\n        const container = currentTarget;\n        const [first, last] = getEdges(container);\n        const isTabbable = first && last;\n        if (!isTabbable) {\n          if (currentFocusingEl === container) {\n            const focusoutPreventedEvent = createFocusOutPreventedEvent({\n              focusReason: focusReason.value\n            });\n            emit(\"focusout-prevented\", focusoutPreventedEvent);\n            if (!focusoutPreventedEvent.defaultPrevented) {\n              e.preventDefault();\n            }\n          }\n        } else {\n          if (!shiftKey && currentFocusingEl === last) {\n            const focusoutPreventedEvent = createFocusOutPreventedEvent({\n              focusReason: focusReason.value\n            });\n            emit(\"focusout-prevented\", focusoutPreventedEvent);\n            if (!focusoutPreventedEvent.defaultPrevented) {\n              e.preventDefault();\n              if (loop)\n                tryFocus(first, true);\n            }\n          } else if (shiftKey && [first, container].includes(currentFocusingEl)) {\n            const focusoutPreventedEvent = createFocusOutPreventedEvent({\n              focusReason: focusReason.value\n            });\n            emit(\"focusout-prevented\", focusoutPreventedEvent);\n            if (!focusoutPreventedEvent.defaultPrevented) {\n              e.preventDefault();\n              if (loop)\n                tryFocus(last, true);\n            }\n          }\n        }\n      }\n    };\n    provide(FOCUS_TRAP_INJECTION_KEY, {\n      focusTrapRef: forwardRef,\n      onKeydown\n    });\n    watch(() => props.focusTrapEl, (focusTrapEl) => {\n      if (focusTrapEl) {\n        forwardRef.value = focusTrapEl;\n      }\n    }, { immediate: true });\n    watch([forwardRef], ([forwardRef2], [oldForwardRef]) => {\n      if (forwardRef2) {\n        forwardRef2.addEventListener(\"keydown\", onKeydown);\n        forwardRef2.addEventListener(\"focusin\", onFocusIn);\n        forwardRef2.addEventListener(\"focusout\", onFocusOut);\n      }\n      if (oldForwardRef) {\n        oldForwardRef.removeEventListener(\"keydown\", onKeydown);\n        oldForwardRef.removeEventListener(\"focusin\", onFocusIn);\n        oldForwardRef.removeEventListener(\"focusout\", onFocusOut);\n      }\n    });\n    const trapOnFocus = (e) => {\n      emit(ON_TRAP_FOCUS_EVT, e);\n    };\n    const releaseOnFocus = (e) => emit(ON_RELEASE_FOCUS_EVT, e);\n    const onFocusIn = (e) => {\n      const trapContainer = unref(forwardRef);\n      if (!trapContainer)\n        return;\n      const target = e.target;\n      const relatedTarget = e.relatedTarget;\n      const isFocusedInTrap = target && trapContainer.contains(target);\n      if (!props.trapped) {\n        const isPrevFocusedInTrap = relatedTarget && trapContainer.contains(relatedTarget);\n        if (!isPrevFocusedInTrap) {\n          lastFocusBeforeTrapped = relatedTarget;\n        }\n      }\n      if (isFocusedInTrap)\n        emit(\"focusin\", e);\n      if (focusLayer.paused)\n        return;\n      if (props.trapped) {\n        if (isFocusedInTrap) {\n          lastFocusAfterTrapped = target;\n        } else {\n          tryFocus(lastFocusAfterTrapped, true);\n        }\n      }\n    };\n    const onFocusOut = (e) => {\n      const trapContainer = unref(forwardRef);\n      if (focusLayer.paused || !trapContainer)\n        return;\n      if (props.trapped) {\n        const relatedTarget = e.relatedTarget;\n        if (!isNil(relatedTarget) && !trapContainer.contains(relatedTarget)) {\n          setTimeout(() => {\n            if (!focusLayer.paused && props.trapped) {\n              const focusoutPreventedEvent = createFocusOutPreventedEvent({\n                focusReason: focusReason.value\n              });\n              emit(\"focusout-prevented\", focusoutPreventedEvent);\n              if (!focusoutPreventedEvent.defaultPrevented) {\n                tryFocus(lastFocusAfterTrapped, true);\n              }\n            }\n          }, 0);\n        }\n      } else {\n        const target = e.target;\n        const isFocusedInTrap = target && trapContainer.contains(target);\n        if (!isFocusedInTrap)\n          emit(\"focusout\", e);\n      }\n    };\n    async function startTrap() {\n      await nextTick();\n      const trapContainer = unref(forwardRef);\n      if (trapContainer) {\n        focusableStack.push(focusLayer);\n        const prevFocusedElement = trapContainer.contains(document.activeElement) ? lastFocusBeforeTrapped : document.activeElement;\n        lastFocusBeforeTrapped = prevFocusedElement;\n        const isPrevFocusContained = trapContainer.contains(prevFocusedElement);\n        if (!isPrevFocusContained) {\n          const focusEvent = new Event(FOCUS_AFTER_TRAPPED, FOCUS_AFTER_TRAPPED_OPTS);\n          trapContainer.addEventListener(FOCUS_AFTER_TRAPPED, trapOnFocus);\n          trapContainer.dispatchEvent(focusEvent);\n          if (!focusEvent.defaultPrevented) {\n            nextTick(() => {\n              let focusStartEl = props.focusStartEl;\n              if (!isString(focusStartEl)) {\n                tryFocus(focusStartEl);\n                if (document.activeElement !== focusStartEl) {\n                  focusStartEl = \"first\";\n                }\n              }\n              if (focusStartEl === \"first\") {\n                focusFirstDescendant(obtainAllFocusableElements(trapContainer), true);\n              }\n              if (document.activeElement === prevFocusedElement || focusStartEl === \"container\") {\n                tryFocus(trapContainer);\n              }\n            });\n          }\n        }\n      }\n    }\n    function stopTrap() {\n      const trapContainer = unref(forwardRef);\n      if (trapContainer) {\n        trapContainer.removeEventListener(FOCUS_AFTER_TRAPPED, trapOnFocus);\n        const releasedEvent = new CustomEvent(FOCUS_AFTER_RELEASED, {\n          ...FOCUS_AFTER_TRAPPED_OPTS,\n          detail: {\n            focusReason: focusReason.value\n          }\n        });\n        trapContainer.addEventListener(FOCUS_AFTER_RELEASED, releaseOnFocus);\n        trapContainer.dispatchEvent(releasedEvent);\n        if (!releasedEvent.defaultPrevented && (focusReason.value == \"keyboard\" || !isFocusCausedByUserEvent() || trapContainer.contains(document.activeElement))) {\n          tryFocus(lastFocusBeforeTrapped != null ? lastFocusBeforeTrapped : document.body);\n        }\n        trapContainer.removeEventListener(FOCUS_AFTER_RELEASED, releaseOnFocus);\n        focusableStack.remove(focusLayer);\n        lastFocusBeforeTrapped = null;\n        lastFocusAfterTrapped = null;\n      }\n    }\n    onMounted(() => {\n      if (props.trapped) {\n        startTrap();\n      }\n      watch(() => props.trapped, (trapped) => {\n        if (trapped) {\n          startTrap();\n        } else {\n          stopTrap();\n        }\n      });\n    });\n    onBeforeUnmount(() => {\n      if (props.trapped) {\n        stopTrap();\n      }\n      if (forwardRef.value) {\n        forwardRef.value.removeEventListener(\"keydown\", onKeydown);\n        forwardRef.value.removeEventListener(\"focusin\", onFocusIn);\n        forwardRef.value.removeEventListener(\"focusout\", onFocusOut);\n        forwardRef.value = void 0;\n      }\n    });\n    return {\n      onKeydown\n    };\n  }\n});\nfunction _sfc_render(_ctx, _cache, $props, $setup, $data, $options) {\n  return renderSlot(_ctx.$slots, \"default\", { handleKeydown: _ctx.onKeydown });\n}\nvar ElFocusTrap = /* @__PURE__ */ _export_sfc(_sfc_main, [[\"render\", _sfc_render], [\"__file\", \"focus-trap.vue\"]]);\n\nexport { ElFocusTrap as default };\n//# sourceMappingURL=focus-trap.mjs.map\n","var E=\"top\",R=\"bottom\",W=\"right\",P=\"left\",me=\"auto\",G=[E,R,W,P],U=\"start\",J=\"end\",Xe=\"clippingParents\",je=\"viewport\",K=\"popper\",Ye=\"reference\",De=G.reduce(function(t,e){return t.concat([e+\"-\"+U,e+\"-\"+J])},[]),Ee=[].concat(G,[me]).reduce(function(t,e){return t.concat([e,e+\"-\"+U,e+\"-\"+J])},[]),Ge=\"beforeRead\",Je=\"read\",Ke=\"afterRead\",Qe=\"beforeMain\",Ze=\"main\",et=\"afterMain\",tt=\"beforeWrite\",nt=\"write\",rt=\"afterWrite\",ot=[Ge,Je,Ke,Qe,Ze,et,tt,nt,rt];function C(t){return t?(t.nodeName||\"\").toLowerCase():null}function H(t){if(t==null)return window;if(t.toString()!==\"[object Window]\"){var e=t.ownerDocument;return e&&e.defaultView||window}return t}function Q(t){var e=H(t).Element;return t instanceof e||t instanceof Element}function B(t){var e=H(t).HTMLElement;return t instanceof e||t instanceof HTMLElement}function Pe(t){if(typeof ShadowRoot==\"undefined\")return!1;var e=H(t).ShadowRoot;return t instanceof e||t instanceof ShadowRoot}function Mt(t){var e=t.state;Object.keys(e.elements).forEach(function(n){var r=e.styles[n]||{},o=e.attributes[n]||{},i=e.elements[n];!B(i)||!C(i)||(Object.assign(i.style,r),Object.keys(o).forEach(function(a){var s=o[a];s===!1?i.removeAttribute(a):i.setAttribute(a,s===!0?\"\":s)}))})}function Rt(t){var e=t.state,n={popper:{position:e.options.strategy,left:\"0\",top:\"0\",margin:\"0\"},arrow:{position:\"absolute\"},reference:{}};return Object.assign(e.elements.popper.style,n.popper),e.styles=n,e.elements.arrow&&Object.assign(e.elements.arrow.style,n.arrow),function(){Object.keys(e.elements).forEach(function(r){var o=e.elements[r],i=e.attributes[r]||{},a=Object.keys(e.styles.hasOwnProperty(r)?e.styles[r]:n[r]),s=a.reduce(function(f,c){return f[c]=\"\",f},{});!B(o)||!C(o)||(Object.assign(o.style,s),Object.keys(i).forEach(function(f){o.removeAttribute(f)}))})}}var Ae={name:\"applyStyles\",enabled:!0,phase:\"write\",fn:Mt,effect:Rt,requires:[\"computeStyles\"]};function q(t){return t.split(\"-\")[0]}var X=Math.max,ve=Math.min,Z=Math.round;function ee(t,e){e===void 0&&(e=!1);var n=t.getBoundingClientRect(),r=1,o=1;if(B(t)&&e){var i=t.offsetHeight,a=t.offsetWidth;a>0&&(r=Z(n.width)/a||1),i>0&&(o=Z(n.height)/i||1)}return{width:n.width/r,height:n.height/o,top:n.top/o,right:n.right/r,bottom:n.bottom/o,left:n.left/r,x:n.left/r,y:n.top/o}}function ke(t){var e=ee(t),n=t.offsetWidth,r=t.offsetHeight;return Math.abs(e.width-n)<=1&&(n=e.width),Math.abs(e.height-r)<=1&&(r=e.height),{x:t.offsetLeft,y:t.offsetTop,width:n,height:r}}function it(t,e){var n=e.getRootNode&&e.getRootNode();if(t.contains(e))return!0;if(n&&Pe(n)){var r=e;do{if(r&&t.isSameNode(r))return!0;r=r.parentNode||r.host}while(r)}return!1}function N(t){return H(t).getComputedStyle(t)}function Wt(t){return[\"table\",\"td\",\"th\"].indexOf(C(t))>=0}function I(t){return((Q(t)?t.ownerDocument:t.document)||window.document).documentElement}function ge(t){return C(t)===\"html\"?t:t.assignedSlot||t.parentNode||(Pe(t)?t.host:null)||I(t)}function at(t){return!B(t)||N(t).position===\"fixed\"?null:t.offsetParent}function Bt(t){var e=navigator.userAgent.toLowerCase().indexOf(\"firefox\")!==-1,n=navigator.userAgent.indexOf(\"Trident\")!==-1;if(n&&B(t)){var r=N(t);if(r.position===\"fixed\")return null}var o=ge(t);for(Pe(o)&&(o=o.host);B(o)&&[\"html\",\"body\"].indexOf(C(o))<0;){var i=N(o);if(i.transform!==\"none\"||i.perspective!==\"none\"||i.contain===\"paint\"||[\"transform\",\"perspective\"].indexOf(i.willChange)!==-1||e&&i.willChange===\"filter\"||e&&i.filter&&i.filter!==\"none\")return o;o=o.parentNode}return null}function se(t){for(var e=H(t),n=at(t);n&&Wt(n)&&N(n).position===\"static\";)n=at(n);return n&&(C(n)===\"html\"||C(n)===\"body\"&&N(n).position===\"static\")?e:n||Bt(t)||e}function Le(t){return[\"top\",\"bottom\"].indexOf(t)>=0?\"x\":\"y\"}function fe(t,e,n){return X(t,ve(e,n))}function St(t,e,n){var r=fe(t,e,n);return r>n?n:r}function st(){return{top:0,right:0,bottom:0,left:0}}function ft(t){return Object.assign({},st(),t)}function ct(t,e){return e.reduce(function(n,r){return n[r]=t,n},{})}var Tt=function(t,e){return t=typeof t==\"function\"?t(Object.assign({},e.rects,{placement:e.placement})):t,ft(typeof t!=\"number\"?t:ct(t,G))};function Ht(t){var e,n=t.state,r=t.name,o=t.options,i=n.elements.arrow,a=n.modifiersData.popperOffsets,s=q(n.placement),f=Le(s),c=[P,W].indexOf(s)>=0,u=c?\"height\":\"width\";if(!(!i||!a)){var m=Tt(o.padding,n),v=ke(i),l=f===\"y\"?E:P,h=f===\"y\"?R:W,p=n.rects.reference[u]+n.rects.reference[f]-a[f]-n.rects.popper[u],g=a[f]-n.rects.reference[f],x=se(i),y=x?f===\"y\"?x.clientHeight||0:x.clientWidth||0:0,$=p/2-g/2,d=m[l],b=y-v[u]-m[h],w=y/2-v[u]/2+$,O=fe(d,w,b),j=f;n.modifiersData[r]=(e={},e[j]=O,e.centerOffset=O-w,e)}}function Ct(t){var e=t.state,n=t.options,r=n.element,o=r===void 0?\"[data-popper-arrow]\":r;o!=null&&(typeof o==\"string\"&&(o=e.elements.popper.querySelector(o),!o)||!it(e.elements.popper,o)||(e.elements.arrow=o))}var pt={name:\"arrow\",enabled:!0,phase:\"main\",fn:Ht,effect:Ct,requires:[\"popperOffsets\"],requiresIfExists:[\"preventOverflow\"]};function te(t){return t.split(\"-\")[1]}var qt={top:\"auto\",right:\"auto\",bottom:\"auto\",left:\"auto\"};function Vt(t){var e=t.x,n=t.y,r=window,o=r.devicePixelRatio||1;return{x:Z(e*o)/o||0,y:Z(n*o)/o||0}}function ut(t){var e,n=t.popper,r=t.popperRect,o=t.placement,i=t.variation,a=t.offsets,s=t.position,f=t.gpuAcceleration,c=t.adaptive,u=t.roundOffsets,m=t.isFixed,v=a.x,l=v===void 0?0:v,h=a.y,p=h===void 0?0:h,g=typeof u==\"function\"?u({x:l,y:p}):{x:l,y:p};l=g.x,p=g.y;var x=a.hasOwnProperty(\"x\"),y=a.hasOwnProperty(\"y\"),$=P,d=E,b=window;if(c){var w=se(n),O=\"clientHeight\",j=\"clientWidth\";if(w===H(n)&&(w=I(n),N(w).position!==\"static\"&&s===\"absolute\"&&(O=\"scrollHeight\",j=\"scrollWidth\")),w=w,o===E||(o===P||o===W)&&i===J){d=R;var A=m&&w===b&&b.visualViewport?b.visualViewport.height:w[O];p-=A-r.height,p*=f?1:-1}if(o===P||(o===E||o===R)&&i===J){$=W;var k=m&&w===b&&b.visualViewport?b.visualViewport.width:w[j];l-=k-r.width,l*=f?1:-1}}var D=Object.assign({position:s},c&&qt),S=u===!0?Vt({x:l,y:p}):{x:l,y:p};if(l=S.x,p=S.y,f){var L;return Object.assign({},D,(L={},L[d]=y?\"0\":\"\",L[$]=x?\"0\":\"\",L.transform=(b.devicePixelRatio||1)<=1?\"translate(\"+l+\"px, \"+p+\"px)\":\"translate3d(\"+l+\"px, \"+p+\"px, 0)\",L))}return Object.assign({},D,(e={},e[d]=y?p+\"px\":\"\",e[$]=x?l+\"px\":\"\",e.transform=\"\",e))}function Nt(t){var e=t.state,n=t.options,r=n.gpuAcceleration,o=r===void 0?!0:r,i=n.adaptive,a=i===void 0?!0:i,s=n.roundOffsets,f=s===void 0?!0:s,c={placement:q(e.placement),variation:te(e.placement),popper:e.elements.popper,popperRect:e.rects.popper,gpuAcceleration:o,isFixed:e.options.strategy===\"fixed\"};e.modifiersData.popperOffsets!=null&&(e.styles.popper=Object.assign({},e.styles.popper,ut(Object.assign({},c,{offsets:e.modifiersData.popperOffsets,position:e.options.strategy,adaptive:a,roundOffsets:f})))),e.modifiersData.arrow!=null&&(e.styles.arrow=Object.assign({},e.styles.arrow,ut(Object.assign({},c,{offsets:e.modifiersData.arrow,position:\"absolute\",adaptive:!1,roundOffsets:f})))),e.attributes.popper=Object.assign({},e.attributes.popper,{\"data-popper-placement\":e.placement})}var Me={name:\"computeStyles\",enabled:!0,phase:\"beforeWrite\",fn:Nt,data:{}},ye={passive:!0};function It(t){var e=t.state,n=t.instance,r=t.options,o=r.scroll,i=o===void 0?!0:o,a=r.resize,s=a===void 0?!0:a,f=H(e.elements.popper),c=[].concat(e.scrollParents.reference,e.scrollParents.popper);return i&&c.forEach(function(u){u.addEventListener(\"scroll\",n.update,ye)}),s&&f.addEventListener(\"resize\",n.update,ye),function(){i&&c.forEach(function(u){u.removeEventListener(\"scroll\",n.update,ye)}),s&&f.removeEventListener(\"resize\",n.update,ye)}}var Re={name:\"eventListeners\",enabled:!0,phase:\"write\",fn:function(){},effect:It,data:{}},_t={left:\"right\",right:\"left\",bottom:\"top\",top:\"bottom\"};function be(t){return t.replace(/left|right|bottom|top/g,function(e){return _t[e]})}var zt={start:\"end\",end:\"start\"};function lt(t){return t.replace(/start|end/g,function(e){return zt[e]})}function We(t){var e=H(t),n=e.pageXOffset,r=e.pageYOffset;return{scrollLeft:n,scrollTop:r}}function Be(t){return ee(I(t)).left+We(t).scrollLeft}function Ft(t){var e=H(t),n=I(t),r=e.visualViewport,o=n.clientWidth,i=n.clientHeight,a=0,s=0;return r&&(o=r.width,i=r.height,/^((?!chrome|android).)*safari/i.test(navigator.userAgent)||(a=r.offsetLeft,s=r.offsetTop)),{width:o,height:i,x:a+Be(t),y:s}}function Ut(t){var e,n=I(t),r=We(t),o=(e=t.ownerDocument)==null?void 0:e.body,i=X(n.scrollWidth,n.clientWidth,o?o.scrollWidth:0,o?o.clientWidth:0),a=X(n.scrollHeight,n.clientHeight,o?o.scrollHeight:0,o?o.clientHeight:0),s=-r.scrollLeft+Be(t),f=-r.scrollTop;return N(o||n).direction===\"rtl\"&&(s+=X(n.clientWidth,o?o.clientWidth:0)-i),{width:i,height:a,x:s,y:f}}function Se(t){var e=N(t),n=e.overflow,r=e.overflowX,o=e.overflowY;return/auto|scroll|overlay|hidden/.test(n+o+r)}function dt(t){return[\"html\",\"body\",\"#document\"].indexOf(C(t))>=0?t.ownerDocument.body:B(t)&&Se(t)?t:dt(ge(t))}function ce(t,e){var n;e===void 0&&(e=[]);var r=dt(t),o=r===((n=t.ownerDocument)==null?void 0:n.body),i=H(r),a=o?[i].concat(i.visualViewport||[],Se(r)?r:[]):r,s=e.concat(a);return o?s:s.concat(ce(ge(a)))}function Te(t){return Object.assign({},t,{left:t.x,top:t.y,right:t.x+t.width,bottom:t.y+t.height})}function Xt(t){var e=ee(t);return e.top=e.top+t.clientTop,e.left=e.left+t.clientLeft,e.bottom=e.top+t.clientHeight,e.right=e.left+t.clientWidth,e.width=t.clientWidth,e.height=t.clientHeight,e.x=e.left,e.y=e.top,e}function ht(t,e){return e===je?Te(Ft(t)):Q(e)?Xt(e):Te(Ut(I(t)))}function Yt(t){var e=ce(ge(t)),n=[\"absolute\",\"fixed\"].indexOf(N(t).position)>=0,r=n&&B(t)?se(t):t;return Q(r)?e.filter(function(o){return Q(o)&&it(o,r)&&C(o)!==\"body\"}):[]}function Gt(t,e,n){var r=e===\"clippingParents\"?Yt(t):[].concat(e),o=[].concat(r,[n]),i=o[0],a=o.reduce(function(s,f){var c=ht(t,f);return s.top=X(c.top,s.top),s.right=ve(c.right,s.right),s.bottom=ve(c.bottom,s.bottom),s.left=X(c.left,s.left),s},ht(t,i));return a.width=a.right-a.left,a.height=a.bottom-a.top,a.x=a.left,a.y=a.top,a}function mt(t){var e=t.reference,n=t.element,r=t.placement,o=r?q(r):null,i=r?te(r):null,a=e.x+e.width/2-n.width/2,s=e.y+e.height/2-n.height/2,f;switch(o){case E:f={x:a,y:e.y-n.height};break;case R:f={x:a,y:e.y+e.height};break;case W:f={x:e.x+e.width,y:s};break;case P:f={x:e.x-n.width,y:s};break;default:f={x:e.x,y:e.y}}var c=o?Le(o):null;if(c!=null){var u=c===\"y\"?\"height\":\"width\";switch(i){case U:f[c]=f[c]-(e[u]/2-n[u]/2);break;case J:f[c]=f[c]+(e[u]/2-n[u]/2);break}}return f}function ne(t,e){e===void 0&&(e={});var n=e,r=n.placement,o=r===void 0?t.placement:r,i=n.boundary,a=i===void 0?Xe:i,s=n.rootBoundary,f=s===void 0?je:s,c=n.elementContext,u=c===void 0?K:c,m=n.altBoundary,v=m===void 0?!1:m,l=n.padding,h=l===void 0?0:l,p=ft(typeof h!=\"number\"?h:ct(h,G)),g=u===K?Ye:K,x=t.rects.popper,y=t.elements[v?g:u],$=Gt(Q(y)?y:y.contextElement||I(t.elements.popper),a,f),d=ee(t.elements.reference),b=mt({reference:d,element:x,strategy:\"absolute\",placement:o}),w=Te(Object.assign({},x,b)),O=u===K?w:d,j={top:$.top-O.top+p.top,bottom:O.bottom-$.bottom+p.bottom,left:$.left-O.left+p.left,right:O.right-$.right+p.right},A=t.modifiersData.offset;if(u===K&&A){var k=A[o];Object.keys(j).forEach(function(D){var S=[W,R].indexOf(D)>=0?1:-1,L=[E,R].indexOf(D)>=0?\"y\":\"x\";j[D]+=k[L]*S})}return j}function Jt(t,e){e===void 0&&(e={});var n=e,r=n.placement,o=n.boundary,i=n.rootBoundary,a=n.padding,s=n.flipVariations,f=n.allowedAutoPlacements,c=f===void 0?Ee:f,u=te(r),m=u?s?De:De.filter(function(h){return te(h)===u}):G,v=m.filter(function(h){return c.indexOf(h)>=0});v.length===0&&(v=m);var l=v.reduce(function(h,p){return h[p]=ne(t,{placement:p,boundary:o,rootBoundary:i,padding:a})[q(p)],h},{});return Object.keys(l).sort(function(h,p){return l[h]-l[p]})}function Kt(t){if(q(t)===me)return[];var e=be(t);return[lt(t),e,lt(e)]}function Qt(t){var e=t.state,n=t.options,r=t.name;if(!e.modifiersData[r]._skip){for(var o=n.mainAxis,i=o===void 0?!0:o,a=n.altAxis,s=a===void 0?!0:a,f=n.fallbackPlacements,c=n.padding,u=n.boundary,m=n.rootBoundary,v=n.altBoundary,l=n.flipVariations,h=l===void 0?!0:l,p=n.allowedAutoPlacements,g=e.options.placement,x=q(g),y=x===g,$=f||(y||!h?[be(g)]:Kt(g)),d=[g].concat($).reduce(function(z,V){return z.concat(q(V)===me?Jt(e,{placement:V,boundary:u,rootBoundary:m,padding:c,flipVariations:h,allowedAutoPlacements:p}):V)},[]),b=e.rects.reference,w=e.rects.popper,O=new Map,j=!0,A=d[0],k=0;k<d.length;k++){var D=d[k],S=q(D),L=te(D)===U,re=[E,R].indexOf(S)>=0,oe=re?\"width\":\"height\",M=ne(e,{placement:D,boundary:u,rootBoundary:m,altBoundary:v,padding:c}),T=re?L?W:P:L?R:E;b[oe]>w[oe]&&(T=be(T));var pe=be(T),_=[];if(i&&_.push(M[S]<=0),s&&_.push(M[T]<=0,M[pe]<=0),_.every(function(z){return z})){A=D,j=!1;break}O.set(D,_)}if(j)for(var ue=h?3:1,xe=function(z){var V=d.find(function(de){var ae=O.get(de);if(ae)return ae.slice(0,z).every(function(Y){return Y})});if(V)return A=V,\"break\"},ie=ue;ie>0;ie--){var le=xe(ie);if(le===\"break\")break}e.placement!==A&&(e.modifiersData[r]._skip=!0,e.placement=A,e.reset=!0)}}var vt={name:\"flip\",enabled:!0,phase:\"main\",fn:Qt,requiresIfExists:[\"offset\"],data:{_skip:!1}};function gt(t,e,n){return n===void 0&&(n={x:0,y:0}),{top:t.top-e.height-n.y,right:t.right-e.width+n.x,bottom:t.bottom-e.height+n.y,left:t.left-e.width-n.x}}function yt(t){return[E,W,R,P].some(function(e){return t[e]>=0})}function Zt(t){var e=t.state,n=t.name,r=e.rects.reference,o=e.rects.popper,i=e.modifiersData.preventOverflow,a=ne(e,{elementContext:\"reference\"}),s=ne(e,{altBoundary:!0}),f=gt(a,r),c=gt(s,o,i),u=yt(f),m=yt(c);e.modifiersData[n]={referenceClippingOffsets:f,popperEscapeOffsets:c,isReferenceHidden:u,hasPopperEscaped:m},e.attributes.popper=Object.assign({},e.attributes.popper,{\"data-popper-reference-hidden\":u,\"data-popper-escaped\":m})}var bt={name:\"hide\",enabled:!0,phase:\"main\",requiresIfExists:[\"preventOverflow\"],fn:Zt};function en(t,e,n){var r=q(t),o=[P,E].indexOf(r)>=0?-1:1,i=typeof n==\"function\"?n(Object.assign({},e,{placement:t})):n,a=i[0],s=i[1];return a=a||0,s=(s||0)*o,[P,W].indexOf(r)>=0?{x:s,y:a}:{x:a,y:s}}function tn(t){var e=t.state,n=t.options,r=t.name,o=n.offset,i=o===void 0?[0,0]:o,a=Ee.reduce(function(u,m){return u[m]=en(m,e.rects,i),u},{}),s=a[e.placement],f=s.x,c=s.y;e.modifiersData.popperOffsets!=null&&(e.modifiersData.popperOffsets.x+=f,e.modifiersData.popperOffsets.y+=c),e.modifiersData[r]=a}var wt={name:\"offset\",enabled:!0,phase:\"main\",requires:[\"popperOffsets\"],fn:tn};function nn(t){var e=t.state,n=t.name;e.modifiersData[n]=mt({reference:e.rects.reference,element:e.rects.popper,strategy:\"absolute\",placement:e.placement})}var He={name:\"popperOffsets\",enabled:!0,phase:\"read\",fn:nn,data:{}};function rn(t){return t===\"x\"?\"y\":\"x\"}function on(t){var e=t.state,n=t.options,r=t.name,o=n.mainAxis,i=o===void 0?!0:o,a=n.altAxis,s=a===void 0?!1:a,f=n.boundary,c=n.rootBoundary,u=n.altBoundary,m=n.padding,v=n.tether,l=v===void 0?!0:v,h=n.tetherOffset,p=h===void 0?0:h,g=ne(e,{boundary:f,rootBoundary:c,padding:m,altBoundary:u}),x=q(e.placement),y=te(e.placement),$=!y,d=Le(x),b=rn(d),w=e.modifiersData.popperOffsets,O=e.rects.reference,j=e.rects.popper,A=typeof p==\"function\"?p(Object.assign({},e.rects,{placement:e.placement})):p,k=typeof A==\"number\"?{mainAxis:A,altAxis:A}:Object.assign({mainAxis:0,altAxis:0},A),D=e.modifiersData.offset?e.modifiersData.offset[e.placement]:null,S={x:0,y:0};if(w){if(i){var L,re=d===\"y\"?E:P,oe=d===\"y\"?R:W,M=d===\"y\"?\"height\":\"width\",T=w[d],pe=T+g[re],_=T-g[oe],ue=l?-j[M]/2:0,xe=y===U?O[M]:j[M],ie=y===U?-j[M]:-O[M],le=e.elements.arrow,z=l&&le?ke(le):{width:0,height:0},V=e.modifiersData[\"arrow#persistent\"]?e.modifiersData[\"arrow#persistent\"].padding:st(),de=V[re],ae=V[oe],Y=fe(0,O[M],z[M]),jt=$?O[M]/2-ue-Y-de-k.mainAxis:xe-Y-de-k.mainAxis,Dt=$?-O[M]/2+ue+Y+ae+k.mainAxis:ie+Y+ae+k.mainAxis,Oe=e.elements.arrow&&se(e.elements.arrow),Et=Oe?d===\"y\"?Oe.clientTop||0:Oe.clientLeft||0:0,Ce=(L=D==null?void 0:D[d])!=null?L:0,Pt=T+jt-Ce-Et,At=T+Dt-Ce,qe=fe(l?ve(pe,Pt):pe,T,l?X(_,At):_);w[d]=qe,S[d]=qe-T}if(s){var Ve,kt=d===\"x\"?E:P,Lt=d===\"x\"?R:W,F=w[b],he=b===\"y\"?\"height\":\"width\",Ne=F+g[kt],Ie=F-g[Lt],$e=[E,P].indexOf(x)!==-1,_e=(Ve=D==null?void 0:D[b])!=null?Ve:0,ze=$e?Ne:F-O[he]-j[he]-_e+k.altAxis,Fe=$e?F+O[he]+j[he]-_e-k.altAxis:Ie,Ue=l&&$e?St(ze,F,Fe):fe(l?ze:Ne,F,l?Fe:Ie);w[b]=Ue,S[b]=Ue-F}e.modifiersData[r]=S}}var xt={name:\"preventOverflow\",enabled:!0,phase:\"main\",fn:on,requiresIfExists:[\"offset\"]};function an(t){return{scrollLeft:t.scrollLeft,scrollTop:t.scrollTop}}function sn(t){return t===H(t)||!B(t)?We(t):an(t)}function fn(t){var e=t.getBoundingClientRect(),n=Z(e.width)/t.offsetWidth||1,r=Z(e.height)/t.offsetHeight||1;return n!==1||r!==1}function cn(t,e,n){n===void 0&&(n=!1);var r=B(e),o=B(e)&&fn(e),i=I(e),a=ee(t,o),s={scrollLeft:0,scrollTop:0},f={x:0,y:0};return(r||!r&&!n)&&((C(e)!==\"body\"||Se(i))&&(s=sn(e)),B(e)?(f=ee(e,!0),f.x+=e.clientLeft,f.y+=e.clientTop):i&&(f.x=Be(i))),{x:a.left+s.scrollLeft-f.x,y:a.top+s.scrollTop-f.y,width:a.width,height:a.height}}function pn(t){var e=new Map,n=new Set,r=[];t.forEach(function(i){e.set(i.name,i)});function o(i){n.add(i.name);var a=[].concat(i.requires||[],i.requiresIfExists||[]);a.forEach(function(s){if(!n.has(s)){var f=e.get(s);f&&o(f)}}),r.push(i)}return t.forEach(function(i){n.has(i.name)||o(i)}),r}function un(t){var e=pn(t);return ot.reduce(function(n,r){return n.concat(e.filter(function(o){return o.phase===r}))},[])}function ln(t){var e;return function(){return e||(e=new Promise(function(n){Promise.resolve().then(function(){e=void 0,n(t())})})),e}}function dn(t){var e=t.reduce(function(n,r){var o=n[r.name];return n[r.name]=o?Object.assign({},o,r,{options:Object.assign({},o.options,r.options),data:Object.assign({},o.data,r.data)}):r,n},{});return Object.keys(e).map(function(n){return e[n]})}var Ot={placement:\"bottom\",modifiers:[],strategy:\"absolute\"};function $t(){for(var t=arguments.length,e=new Array(t),n=0;n<t;n++)e[n]=arguments[n];return!e.some(function(r){return!(r&&typeof r.getBoundingClientRect==\"function\")})}function we(t){t===void 0&&(t={});var e=t,n=e.defaultModifiers,r=n===void 0?[]:n,o=e.defaultOptions,i=o===void 0?Ot:o;return function(a,s,f){f===void 0&&(f=i);var c={placement:\"bottom\",orderedModifiers:[],options:Object.assign({},Ot,i),modifiersData:{},elements:{reference:a,popper:s},attributes:{},styles:{}},u=[],m=!1,v={state:c,setOptions:function(p){var g=typeof p==\"function\"?p(c.options):p;h(),c.options=Object.assign({},i,c.options,g),c.scrollParents={reference:Q(a)?ce(a):a.contextElement?ce(a.contextElement):[],popper:ce(s)};var x=un(dn([].concat(r,c.options.modifiers)));return c.orderedModifiers=x.filter(function(y){return y.enabled}),l(),v.update()},forceUpdate:function(){if(!m){var p=c.elements,g=p.reference,x=p.popper;if($t(g,x)){c.rects={reference:cn(g,se(x),c.options.strategy===\"fixed\"),popper:ke(x)},c.reset=!1,c.placement=c.options.placement,c.orderedModifiers.forEach(function(j){return c.modifiersData[j.name]=Object.assign({},j.data)});for(var y=0;y<c.orderedModifiers.length;y++){if(c.reset===!0){c.reset=!1,y=-1;continue}var $=c.orderedModifiers[y],d=$.fn,b=$.options,w=b===void 0?{}:b,O=$.name;typeof d==\"function\"&&(c=d({state:c,options:w,name:O,instance:v})||c)}}}},update:ln(function(){return new Promise(function(p){v.forceUpdate(),p(c)})}),destroy:function(){h(),m=!0}};if(!$t(a,s))return v;v.setOptions(f).then(function(p){!m&&f.onFirstUpdate&&f.onFirstUpdate(p)});function l(){c.orderedModifiers.forEach(function(p){var g=p.name,x=p.options,y=x===void 0?{}:x,$=p.effect;if(typeof $==\"function\"){var d=$({state:c,name:g,instance:v,options:y}),b=function(){};u.push(d||b)}})}function h(){u.forEach(function(p){return p()}),u=[]}return v}}var hn=we(),mn=[Re,He,Me,Ae],vn=we({defaultModifiers:mn}),gn=[Re,He,Me,Ae,wt,vt,xt,pt,bt],yn=we({defaultModifiers:gn});export{et as afterMain,Ke as afterRead,rt as afterWrite,Ae as applyStyles,pt as arrow,me as auto,G as basePlacements,Qe as beforeMain,Ge as beforeRead,tt as beforeWrite,R as bottom,Xe as clippingParents,Me as computeStyles,yn as createPopper,hn as createPopperBase,vn as createPopperLite,ne as detectOverflow,J as end,Re as eventListeners,vt as flip,bt as hide,P as left,Ze as main,ot as modifierPhases,wt as offset,Ee as placements,K as popper,we as popperGenerator,He as popperOffsets,xt as preventOverflow,Je as read,Ye as reference,W as right,U as start,E as top,De as variationPlacements,je as viewport,nt as write};\n","import { buildProps } from '../../../utils/vue/props/runtime.mjs';\n\nconst popperArrowProps = buildProps({\n  arrowOffset: {\n    type: Number,\n    default: 5\n  }\n});\nconst usePopperArrowProps = popperArrowProps;\n\nexport { popperArrowProps, usePopperArrowProps };\n//# sourceMappingURL=arrow.mjs.map\n","import { placements } from '@popperjs/core';\nimport { popperArrowProps } from './arrow.mjs';\nimport { buildProps, definePropType } from '../../../utils/vue/props/runtime.mjs';\nimport { useAriaProps } from '../../../hooks/use-aria/index.mjs';\n\nconst POSITIONING_STRATEGIES = [\"fixed\", \"absolute\"];\nconst popperCoreConfigProps = buildProps({\n  boundariesPadding: {\n    type: Number,\n    default: 0\n  },\n  fallbackPlacements: {\n    type: definePropType(Array),\n    default: void 0\n  },\n  gpuAcceleration: {\n    type: Boolean,\n    default: true\n  },\n  offset: {\n    type: Number,\n    default: 12\n  },\n  placement: {\n    type: String,\n    values: placements,\n    default: \"bottom\"\n  },\n  popperOptions: {\n    type: definePropType(Object),\n    default: () => ({})\n  },\n  strategy: {\n    type: String,\n    values: POSITIONING_STRATEGIES,\n    default: \"absolute\"\n  }\n});\nconst popperContentProps = buildProps({\n  ...popperCoreConfigProps,\n  ...popperArrowProps,\n  id: String,\n  style: {\n    type: definePropType([String, Array, Object])\n  },\n  className: {\n    type: definePropType([String, Array, Object])\n  },\n  effect: {\n    type: definePropType(String),\n    default: \"dark\"\n  },\n  visible: Boolean,\n  enterable: {\n    type: Boolean,\n    default: true\n  },\n  pure: Boolean,\n  focusOnShow: Boolean,\n  trapping: Boolean,\n  popperClass: {\n    type: definePropType([String, Array, Object])\n  },\n  popperStyle: {\n    type: definePropType([String, Array, Object])\n  },\n  referenceEl: {\n    type: definePropType(Object)\n  },\n  triggerTargetEl: {\n    type: definePropType(Object)\n  },\n  stopPopperMouseEvent: {\n    type: Boolean,\n    default: true\n  },\n  virtualTriggering: Boolean,\n  zIndex: Number,\n  ...useAriaProps([\"ariaLabel\"])\n});\nconst popperContentEmits = {\n  mouseenter: (evt) => evt instanceof MouseEvent,\n  mouseleave: (evt) => evt instanceof MouseEvent,\n  focus: () => true,\n  blur: () => true,\n  close: () => true\n};\nconst usePopperCoreConfigProps = popperCoreConfigProps;\nconst usePopperContentProps = popperContentProps;\nconst usePopperContentEmits = popperContentEmits;\n\nexport { popperContentEmits, popperContentProps, popperCoreConfigProps, usePopperContentEmits, usePopperContentProps, usePopperCoreConfigProps };\n//# sourceMappingURL=content.mjs.map\n","import { isClient, unrefElement } from '@vueuse/core';\n\nconst buildPopperOptions = (props, modifiers = []) => {\n  const { placement, strategy, popperOptions } = props;\n  const options = {\n    placement,\n    strategy,\n    ...popperOptions,\n    modifiers: [...genModifiers(props), ...modifiers]\n  };\n  deriveExtraModifiers(options, popperOptions == null ? void 0 : popperOptions.modifiers);\n  return options;\n};\nconst unwrapMeasurableEl = ($el) => {\n  if (!isClient)\n    return;\n  return unrefElement($el);\n};\nfunction genModifiers(options) {\n  const { offset, gpuAcceleration, fallbackPlacements } = options;\n  return [\n    {\n      name: \"offset\",\n      options: {\n        offset: [0, offset != null ? offset : 12]\n      }\n    },\n    {\n      name: \"preventOverflow\",\n      options: {\n        padding: {\n          top: 0,\n          bottom: 0,\n          left: 0,\n          right: 0\n        }\n      }\n    },\n    {\n      name: \"flip\",\n      options: {\n        padding: 5,\n        fallbackPlacements\n      }\n    },\n    {\n      name: \"computeStyles\",\n      options: {\n        gpuAcceleration\n      }\n    }\n  ];\n}\nfunction deriveExtraModifiers(options, modifiers) {\n  if (modifiers) {\n    options.modifiers = [...options.modifiers, ...modifiers != null ? modifiers : []];\n  }\n}\n\nexport { buildPopperOptions, unwrapMeasurableEl };\n//# sourceMappingURL=utils.mjs.map\n","import { computed, unref, shallowRef, ref, watch, onBeforeUnmount } from 'vue';\nimport { createPopper } from '@popperjs/core';\nimport { fromPairs } from 'lodash-unified';\n\nconst usePopper = (referenceElementRef, popperElementRef, opts = {}) => {\n  const stateUpdater = {\n    name: \"updateState\",\n    enabled: true,\n    phase: \"write\",\n    fn: ({ state }) => {\n      const derivedState = deriveState(state);\n      Object.assign(states.value, derivedState);\n    },\n    requires: [\"computeStyles\"]\n  };\n  const options = computed(() => {\n    const { onFirstUpdate, placement, strategy, modifiers } = unref(opts);\n    return {\n      onFirstUpdate,\n      placement: placement || \"bottom\",\n      strategy: strategy || \"absolute\",\n      modifiers: [\n        ...modifiers || [],\n        stateUpdater,\n        { name: \"applyStyles\", enabled: false }\n      ]\n    };\n  });\n  const instanceRef = shallowRef();\n  const states = ref({\n    styles: {\n      popper: {\n        position: unref(options).strategy,\n        left: \"0\",\n        top: \"0\"\n      },\n      arrow: {\n        position: \"absolute\"\n      }\n    },\n    attributes: {}\n  });\n  const destroy = () => {\n    if (!instanceRef.value)\n      return;\n    instanceRef.value.destroy();\n    instanceRef.value = void 0;\n  };\n  watch(options, (newOptions) => {\n    const instance = unref(instanceRef);\n    if (instance) {\n      instance.setOptions(newOptions);\n    }\n  }, {\n    deep: true\n  });\n  watch([referenceElementRef, popperElementRef], ([referenceElement, popperElement]) => {\n    destroy();\n    if (!referenceElement || !popperElement)\n      return;\n    instanceRef.value = createPopper(referenceElement, popperElement, unref(options));\n  });\n  onBeforeUnmount(() => {\n    destroy();\n  });\n  return {\n    state: computed(() => {\n      var _a;\n      return { ...((_a = unref(instanceRef)) == null ? void 0 : _a.state) || {} };\n    }),\n    styles: computed(() => unref(states).styles),\n    attributes: computed(() => unref(states).attributes),\n    update: () => {\n      var _a;\n      return (_a = unref(instanceRef)) == null ? void 0 : _a.update();\n    },\n    forceUpdate: () => {\n      var _a;\n      return (_a = unref(instanceRef)) == null ? void 0 : _a.forceUpdate();\n    },\n    instanceRef: computed(() => unref(instanceRef))\n  };\n};\nfunction deriveState(state) {\n  const elements = Object.keys(state.elements);\n  const styles = fromPairs(elements.map((element) => [element, state.styles[element] || {}]));\n  const attributes = fromPairs(elements.map((element) => [element, state.attributes[element]]));\n  return {\n    styles,\n    attributes\n  };\n}\n\nexport { usePopper };\n//# sourceMappingURL=index.mjs.map\n","import { inject, ref, computed, unref, watch, onMounted } from 'vue';\nimport { isUndefined } from 'lodash-unified';\nimport { POPPER_INJECTION_KEY } from '../constants.mjs';\nimport { buildPopperOptions, unwrapMeasurableEl } from '../utils.mjs';\nimport { usePopper } from '../../../../hooks/use-popper/index.mjs';\n\nconst DEFAULT_ARROW_OFFSET = 0;\nconst usePopperContent = (props) => {\n  const { popperInstanceRef, contentRef, triggerRef, role } = inject(POPPER_INJECTION_KEY, void 0);\n  const arrowRef = ref();\n  const arrowOffset = computed(() => props.arrowOffset);\n  const eventListenerModifier = computed(() => {\n    return {\n      name: \"eventListeners\",\n      enabled: !!props.visible\n    };\n  });\n  const arrowModifier = computed(() => {\n    var _a;\n    const arrowEl = unref(arrowRef);\n    const offset = (_a = unref(arrowOffset)) != null ? _a : DEFAULT_ARROW_OFFSET;\n    return {\n      name: \"arrow\",\n      enabled: !isUndefined(arrowEl),\n      options: {\n        element: arrowEl,\n        padding: offset\n      }\n    };\n  });\n  const options = computed(() => {\n    return {\n      onFirstUpdate: () => {\n        update();\n      },\n      ...buildPopperOptions(props, [\n        unref(arrowModifier),\n        unref(eventListenerModifier)\n      ])\n    };\n  });\n  const computedReference = computed(() => unwrapMeasurableEl(props.referenceEl) || unref(triggerRef));\n  const { attributes, state, styles, update, forceUpdate, instanceRef } = usePopper(computedReference, contentRef, options);\n  watch(instanceRef, (instance) => popperInstanceRef.value = instance, {\n    flush: \"sync\"\n  });\n  onMounted(() => {\n    watch(() => {\n      var _a, _b;\n      return (_b = (_a = unref(computedReference)) == null ? void 0 : _a.getBoundingClientRect) == null ? void 0 : _b.call(_a);\n    }, () => {\n      update();\n    });\n  });\n  return {\n    attributes,\n    arrowRef,\n    contentRef,\n    instanceRef,\n    state,\n    styles,\n    role,\n    forceUpdate,\n    update\n  };\n};\n\nexport { usePopperContent };\n//# sourceMappingURL=use-content.mjs.map\n","/**\n * Checks if `value` is `undefined`.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is `undefined`, else `false`.\n * @example\n *\n * _.isUndefined(void 0);\n * // => true\n *\n * _.isUndefined(null);\n * // => false\n */\nfunction isUndefined(value) {\n  return value === undefined;\n}\n\nexport default isUndefined;\n","import { defineComponent, inject, provide, onMounted, watch, unref, onBeforeUnmount, openBlock, createElementBlock, mergeProps, createVNode, withCtx, renderSlot } from 'vue';\nimport { isNil } from 'lodash-unified';\nimport ElFocusTrap from '../../focus-trap/src/focus-trap.mjs';\nimport { POPPER_CONTENT_INJECTION_KEY } from './constants.mjs';\nimport { popperContentProps, popperContentEmits } from './content.mjs';\nimport _export_sfc from '../../../_virtual/plugin-vue_export-helper.mjs';\nimport { usePopperContentFocusTrap } from './composables/use-focus-trap.mjs';\nimport { usePopperContent } from './composables/use-content.mjs';\nimport { usePopperContentDOM } from './composables/use-content-dom.mjs';\nimport { formItemContextKey } from '../../form/src/constants.mjs';\nimport { NOOP } from '@vue/shared';\nimport { isElement } from '../../../utils/types.mjs';\n\nconst __default__ = defineComponent({\n  name: \"ElPopperContent\"\n});\nconst _sfc_main = /* @__PURE__ */ defineComponent({\n  ...__default__,\n  props: popperContentProps,\n  emits: popperContentEmits,\n  setup(__props, { expose, emit }) {\n    const props = __props;\n    const {\n      focusStartRef,\n      trapped,\n      onFocusAfterReleased,\n      onFocusAfterTrapped,\n      onFocusInTrap,\n      onFocusoutPrevented,\n      onReleaseRequested\n    } = usePopperContentFocusTrap(props, emit);\n    const { attributes, arrowRef, contentRef, styles, instanceRef, role, update } = usePopperContent(props);\n    const {\n      ariaModal,\n      arrowStyle,\n      contentAttrs,\n      contentClass,\n      contentStyle,\n      updateZIndex\n    } = usePopperContentDOM(props, {\n      styles,\n      attributes,\n      role\n    });\n    const formItemContext = inject(formItemContextKey, void 0);\n    provide(POPPER_CONTENT_INJECTION_KEY, {\n      arrowStyle,\n      arrowRef\n    });\n    if (formItemContext) {\n      provide(formItemContextKey, {\n        ...formItemContext,\n        addInputId: NOOP,\n        removeInputId: NOOP\n      });\n    }\n    let triggerTargetAriaStopWatch = void 0;\n    const updatePopper = (shouldUpdateZIndex = true) => {\n      update();\n      shouldUpdateZIndex && updateZIndex();\n    };\n    const togglePopperAlive = () => {\n      updatePopper(false);\n      if (props.visible && props.focusOnShow) {\n        trapped.value = true;\n      } else if (props.visible === false) {\n        trapped.value = false;\n      }\n    };\n    onMounted(() => {\n      watch(() => props.triggerTargetEl, (triggerTargetEl, prevTriggerTargetEl) => {\n        triggerTargetAriaStopWatch == null ? void 0 : triggerTargetAriaStopWatch();\n        triggerTargetAriaStopWatch = void 0;\n        const el = unref(triggerTargetEl || contentRef.value);\n        const prevEl = unref(prevTriggerTargetEl || contentRef.value);\n        if (isElement(el)) {\n          triggerTargetAriaStopWatch = watch([role, () => props.ariaLabel, ariaModal, () => props.id], (watches) => {\n            [\"role\", \"aria-label\", \"aria-modal\", \"id\"].forEach((key, idx) => {\n              isNil(watches[idx]) ? el.removeAttribute(key) : el.setAttribute(key, watches[idx]);\n            });\n          }, { immediate: true });\n        }\n        if (prevEl !== el && isElement(prevEl)) {\n          [\"role\", \"aria-label\", \"aria-modal\", \"id\"].forEach((key) => {\n            prevEl.removeAttribute(key);\n          });\n        }\n      }, { immediate: true });\n      watch(() => props.visible, togglePopperAlive, { immediate: true });\n    });\n    onBeforeUnmount(() => {\n      triggerTargetAriaStopWatch == null ? void 0 : triggerTargetAriaStopWatch();\n      triggerTargetAriaStopWatch = void 0;\n    });\n    expose({\n      popperContentRef: contentRef,\n      popperInstanceRef: instanceRef,\n      updatePopper,\n      contentStyle\n    });\n    return (_ctx, _cache) => {\n      return openBlock(), createElementBlock(\"div\", mergeProps({\n        ref_key: \"contentRef\",\n        ref: contentRef\n      }, unref(contentAttrs), {\n        style: unref(contentStyle),\n        class: unref(contentClass),\n        tabindex: \"-1\",\n        onMouseenter: (e) => _ctx.$emit(\"mouseenter\", e),\n        onMouseleave: (e) => _ctx.$emit(\"mouseleave\", e)\n      }), [\n        createVNode(unref(ElFocusTrap), {\n          trapped: unref(trapped),\n          \"trap-on-focus-in\": true,\n          \"focus-trap-el\": unref(contentRef),\n          \"focus-start-el\": unref(focusStartRef),\n          onFocusAfterTrapped: unref(onFocusAfterTrapped),\n          onFocusAfterReleased: unref(onFocusAfterReleased),\n          onFocusin: unref(onFocusInTrap),\n          onFocusoutPrevented: unref(onFocusoutPrevented),\n          onReleaseRequested: unref(onReleaseRequested)\n        }, {\n          default: withCtx(() => [\n            renderSlot(_ctx.$slots, \"default\")\n          ]),\n          _: 3\n        }, 8, [\"trapped\", \"focus-trap-el\", \"focus-start-el\", \"onFocusAfterTrapped\", \"onFocusAfterReleased\", \"onFocusin\", \"onFocusoutPrevented\", \"onReleaseRequested\"])\n      ], 16, [\"onMouseenter\", \"onMouseleave\"]);\n    };\n  }\n});\nvar ElPopperContent = /* @__PURE__ */ _export_sfc(_sfc_main, [[\"__file\", \"content.vue\"]]);\n\nexport { ElPopperContent as default };\n//# sourceMappingURL=content2.mjs.map\n","import { ref } from 'vue';\n\nconst usePopperContentFocusTrap = (props, emit) => {\n  const trapped = ref(false);\n  const focusStartRef = ref();\n  const onFocusAfterTrapped = () => {\n    emit(\"focus\");\n  };\n  const onFocusAfterReleased = (event) => {\n    var _a;\n    if (((_a = event.detail) == null ? void 0 : _a.focusReason) !== \"pointer\") {\n      focusStartRef.value = \"first\";\n      emit(\"blur\");\n    }\n  };\n  const onFocusInTrap = (event) => {\n    if (props.visible && !trapped.value) {\n      if (event.target) {\n        focusStartRef.value = event.target;\n      }\n      trapped.value = true;\n    }\n  };\n  const onFocusoutPrevented = (event) => {\n    if (!props.trapping) {\n      if (event.detail.focusReason === \"pointer\") {\n        event.preventDefault();\n      }\n      trapped.value = false;\n    }\n  };\n  const onReleaseRequested = () => {\n    trapped.value = false;\n    emit(\"close\");\n  };\n  return {\n    focusStartRef,\n    trapped,\n    onFocusAfterReleased,\n    onFocusAfterTrapped,\n    onFocusInTrap,\n    onFocusoutPrevented,\n    onReleaseRequested\n  };\n};\n\nexport { usePopperContentFocusTrap };\n//# sourceMappingURL=use-focus-trap.mjs.map\n","import { computed, unref, ref } from 'vue';\nimport { useZIndex } from '../../../../hooks/use-z-index/index.mjs';\nimport { useNamespace } from '../../../../hooks/use-namespace/index.mjs';\nimport { isNumber } from '../../../../utils/types.mjs';\n\nconst usePopperContentDOM = (props, {\n  attributes,\n  styles,\n  role\n}) => {\n  const { nextZIndex } = useZIndex();\n  const ns = useNamespace(\"popper\");\n  const contentAttrs = computed(() => unref(attributes).popper);\n  const contentZIndex = ref(isNumber(props.zIndex) ? props.zIndex : nextZIndex());\n  const contentClass = computed(() => [\n    ns.b(),\n    ns.is(\"pure\", props.pure),\n    ns.is(props.effect),\n    props.popperClass\n  ]);\n  const contentStyle = computed(() => {\n    return [\n      { zIndex: unref(contentZIndex) },\n      unref(styles).popper,\n      props.popperStyle || {}\n    ];\n  });\n  const ariaModal = computed(() => role.value === \"dialog\" ? \"false\" : void 0);\n  const arrowStyle = computed(() => unref(styles).arrow || {});\n  const updateZIndex = () => {\n    contentZIndex.value = isNumber(props.zIndex) ? props.zIndex : nextZIndex();\n  };\n  return {\n    ariaModal,\n    arrowStyle,\n    contentAttrs,\n    contentClass,\n    contentStyle,\n    contentZIndex,\n    updateZIndex\n  };\n};\n\nexport { usePopperContentDOM };\n//# sourceMappingURL=use-content-dom.mjs.map\n","import Popper from './src/popper.mjs';\nexport { default as ElPopperArrow } from './src/arrow2.mjs';\nexport { default as ElPopperTrigger } from './src/trigger2.mjs';\nexport { default as ElPopperContent } from './src/content2.mjs';\nexport { Effect, popperProps, roleTypes, usePopperProps } from './src/popper2.mjs';\nexport { popperTriggerProps, usePopperTriggerProps } from './src/trigger.mjs';\nexport { popperContentEmits, popperContentProps, popperCoreConfigProps, usePopperContentEmits, usePopperContentProps, usePopperCoreConfigProps } from './src/content.mjs';\nexport { popperArrowProps, usePopperArrowProps } from './src/arrow.mjs';\nexport { POPPER_CONTENT_INJECTION_KEY, POPPER_INJECTION_KEY } from './src/constants.mjs';\nimport { withInstall } from '../../utils/vue/install.mjs';\n\nconst ElPopper = withInstall(Popper);\n\nexport { ElPopper, ElPopper as default };\n//# sourceMappingURL=index.mjs.map\n","const TOOLTIP_INJECTION_KEY = Symbol(\"elTooltip\");\n\nexport { TOOLTIP_INJECTION_KEY };\n//# sourceMappingURL=constants.mjs.map\n","import { buildProps, definePropType } from '../../../utils/vue/props/runtime.mjs';\n\nconst teleportProps = buildProps({\n  to: {\n    type: definePropType([String, Object]),\n    required: true\n  },\n  disabled: Boolean\n});\n\nexport { teleportProps };\n//# sourceMappingURL=teleport.mjs.map\n","import { popperContentProps } from '../../popper/src/content.mjs';\nimport { teleportProps } from '../../teleport/src/teleport.mjs';\nimport { buildProps, definePropType } from '../../../utils/vue/props/runtime.mjs';\nimport { useDelayedToggleProps } from '../../../hooks/use-delayed-toggle/index.mjs';\nimport { useAriaProps } from '../../../hooks/use-aria/index.mjs';\n\nconst useTooltipContentProps = buildProps({\n  ...useDelayedToggleProps,\n  ...popperContentProps,\n  appendTo: {\n    type: teleportProps.to.type\n  },\n  content: {\n    type: String,\n    default: \"\"\n  },\n  rawContent: Boolean,\n  persistent: Boolean,\n  visible: {\n    type: definePropType(Boolean),\n    default: null\n  },\n  transition: String,\n  teleported: {\n    type: Boolean,\n    default: true\n  },\n  disabled: Boolean,\n  ...useAriaProps([\"ariaLabel\"])\n});\n\nexport { useTooltipContentProps };\n//# sourceMappingURL=content.mjs.map\n","import { popperTriggerProps } from '../../popper/src/trigger.mjs';\nimport { buildProps, definePropType } from '../../../utils/vue/props/runtime.mjs';\nimport { EVENT_CODE } from '../../../constants/aria.mjs';\n\nconst useTooltipTriggerProps = buildProps({\n  ...popperTriggerProps,\n  disabled: Boolean,\n  trigger: {\n    type: definePropType([String, Array]),\n    default: \"hover\"\n  },\n  triggerKeys: {\n    type: definePropType(Array),\n    default: () => [EVENT_CODE.enter, EVENT_CODE.numpadEnter, EVENT_CODE.space]\n  },\n  focusOnTarget: Boolean\n});\n\nexport { useTooltipTriggerProps };\n//# sourceMappingURL=trigger.mjs.map\n","import { getCurrentInstance, computed, watch, onMounted } from 'vue';\nimport { buildProp, definePropType } from '../../utils/vue/props/runtime.mjs';\nimport { isBoolean } from '../../utils/types.mjs';\nimport { isFunction } from '@vue/shared';\nimport { isClient } from '@vueuse/core';\n\nconst _prop = buildProp({\n  type: definePropType(Boolean),\n  default: null\n});\nconst _event = buildProp({\n  type: definePropType(Function)\n});\nconst createModelToggleComposable = (name) => {\n  const updateEventKey = `update:${name}`;\n  const updateEventKeyRaw = `onUpdate:${name}`;\n  const useModelToggleEmits2 = [updateEventKey];\n  const useModelToggleProps2 = {\n    [name]: _prop,\n    [updateEventKeyRaw]: _event\n  };\n  const useModelToggle2 = ({\n    indicator,\n    toggleReason,\n    shouldHideWhenRouteChanges,\n    shouldProceed,\n    onShow,\n    onHide\n  }) => {\n    const instance = getCurrentInstance();\n    const { emit } = instance;\n    const props = instance.props;\n    const hasUpdateHandler = computed(() => isFunction(props[updateEventKeyRaw]));\n    const isModelBindingAbsent = computed(() => props[name] === null);\n    const doShow = (event) => {\n      if (indicator.value === true) {\n        return;\n      }\n      indicator.value = true;\n      if (toggleReason) {\n        toggleReason.value = event;\n      }\n      if (isFunction(onShow)) {\n        onShow(event);\n      }\n    };\n    const doHide = (event) => {\n      if (indicator.value === false) {\n        return;\n      }\n      indicator.value = false;\n      if (toggleReason) {\n        toggleReason.value = event;\n      }\n      if (isFunction(onHide)) {\n        onHide(event);\n      }\n    };\n    const show = (event) => {\n      if (props.disabled === true || isFunction(shouldProceed) && !shouldProceed())\n        return;\n      const shouldEmit = hasUpdateHandler.value && isClient;\n      if (shouldEmit) {\n        emit(updateEventKey, true);\n      }\n      if (isModelBindingAbsent.value || !shouldEmit) {\n        doShow(event);\n      }\n    };\n    const hide = (event) => {\n      if (props.disabled === true || !isClient)\n        return;\n      const shouldEmit = hasUpdateHandler.value && isClient;\n      if (shouldEmit) {\n        emit(updateEventKey, false);\n      }\n      if (isModelBindingAbsent.value || !shouldEmit) {\n        doHide(event);\n      }\n    };\n    const onChange = (val) => {\n      if (!isBoolean(val))\n        return;\n      if (props.disabled && val) {\n        if (hasUpdateHandler.value) {\n          emit(updateEventKey, false);\n        }\n      } else if (indicator.value !== val) {\n        if (val) {\n          doShow();\n        } else {\n          doHide();\n        }\n      }\n    };\n    const toggle = () => {\n      if (indicator.value) {\n        hide();\n      } else {\n        show();\n      }\n    };\n    watch(() => props[name], onChange);\n    if (shouldHideWhenRouteChanges && instance.appContext.config.globalProperties.$route !== void 0) {\n      watch(() => ({\n        ...instance.proxy.$route\n      }), () => {\n        if (shouldHideWhenRouteChanges.value && indicator.value) {\n          hide();\n        }\n      });\n    }\n    onMounted(() => {\n      onChange(props[name]);\n    });\n    return {\n      hide,\n      show,\n      toggle,\n      hasUpdateHandler\n    };\n  };\n  return {\n    useModelToggle: useModelToggle2,\n    useModelToggleProps: useModelToggleProps2,\n    useModelToggleEmits: useModelToggleEmits2\n  };\n};\nconst { useModelToggle, useModelToggleProps, useModelToggleEmits } = createModelToggleComposable(\"modelValue\");\n\nexport { createModelToggleComposable, useModelToggle, useModelToggleEmits, useModelToggleProps };\n//# sourceMappingURL=index.mjs.map\n","import { useTooltipContentProps } from './content.mjs';\nimport { useTooltipTriggerProps } from './trigger.mjs';\nimport { popperProps } from '../../popper/src/popper2.mjs';\nimport { popperArrowProps } from '../../popper/src/arrow.mjs';\nimport { createModelToggleComposable } from '../../../hooks/use-model-toggle/index.mjs';\nimport { buildProps } from '../../../utils/vue/props/runtime.mjs';\n\nconst {\n  useModelToggleProps: useTooltipModelToggleProps,\n  useModelToggleEmits: useTooltipModelToggleEmits,\n  useModelToggle: useTooltipModelToggle\n} = createModelToggleComposable(\"visible\");\nconst useTooltipProps = buildProps({\n  ...popperProps,\n  ...useTooltipModelToggleProps,\n  ...useTooltipContentProps,\n  ...useTooltipTriggerProps,\n  ...popperArrowProps,\n  showArrow: {\n    type: Boolean,\n    default: true\n  }\n});\nconst tooltipEmits = [\n  ...useTooltipModelToggleEmits,\n  \"before-show\",\n  \"before-hide\",\n  \"show\",\n  \"hide\",\n  \"open\",\n  \"close\"\n];\n\nexport { tooltipEmits, useTooltipModelToggle, useTooltipModelToggleEmits, useTooltipModelToggleProps, useTooltipProps };\n//# sourceMappingURL=tooltip.mjs.map\n","import { unref } from 'vue';\nimport { isArray } from '@vue/shared';\n\nconst isTriggerType = (trigger, type) => {\n  if (isArray(trigger)) {\n    return trigger.includes(type);\n  }\n  return trigger === type;\n};\nconst whenTrigger = (trigger, type, handler) => {\n  return (e) => {\n    isTriggerType(unref(trigger), type) && handler(e);\n  };\n};\n\nexport { isTriggerType, whenTrigger };\n//# sourceMappingURL=utils.mjs.map\n","import { defineComponent, inject, ref, toRef, openBlock, createBlock, unref, normalizeClass, withCtx, renderSlot, nextTick } from 'vue';\nimport '../../popper/index.mjs';\nimport { TOOLTIP_INJECTION_KEY } from './constants.mjs';\nimport { useTooltipTriggerProps } from './trigger.mjs';\nimport { whenTrigger } from './utils.mjs';\nimport _export_sfc from '../../../_virtual/plugin-vue_export-helper.mjs';\nimport ElPopperTrigger from '../../popper/src/trigger2.mjs';\nimport { composeEventHandlers, getEventCode } from '../../../utils/dom/event.mjs';\nimport { useNamespace } from '../../../hooks/use-namespace/index.mjs';\nimport { focusElement } from '../../../utils/dom/aria.mjs';\n\nconst __default__ = defineComponent({\n  name: \"ElTooltipTrigger\"\n});\nconst _sfc_main = /* @__PURE__ */ defineComponent({\n  ...__default__,\n  props: useTooltipTriggerProps,\n  setup(__props, { expose }) {\n    const props = __props;\n    const ns = useNamespace(\"tooltip\");\n    const { controlled, id, open, onOpen, onClose, onToggle } = inject(TOOLTIP_INJECTION_KEY, void 0);\n    const triggerRef = ref(null);\n    const stopWhenControlledOrDisabled = () => {\n      if (unref(controlled) || props.disabled) {\n        return true;\n      }\n    };\n    const trigger = toRef(props, \"trigger\");\n    const onMouseenter = composeEventHandlers(stopWhenControlledOrDisabled, whenTrigger(trigger, \"hover\", (e) => {\n      onOpen(e);\n      if (props.focusOnTarget && e.target) {\n        nextTick(() => {\n          focusElement(e.target, { preventScroll: true });\n        });\n      }\n    }));\n    const onMouseleave = composeEventHandlers(stopWhenControlledOrDisabled, whenTrigger(trigger, \"hover\", onClose));\n    const onClick = composeEventHandlers(stopWhenControlledOrDisabled, whenTrigger(trigger, \"click\", (e) => {\n      if (e.button === 0) {\n        onToggle(e);\n      }\n    }));\n    const onFocus = composeEventHandlers(stopWhenControlledOrDisabled, whenTrigger(trigger, \"focus\", onOpen));\n    const onBlur = composeEventHandlers(stopWhenControlledOrDisabled, whenTrigger(trigger, \"focus\", onClose));\n    const onContextMenu = composeEventHandlers(stopWhenControlledOrDisabled, whenTrigger(trigger, \"contextmenu\", (e) => {\n      e.preventDefault();\n      onToggle(e);\n    }));\n    const onKeydown = composeEventHandlers(stopWhenControlledOrDisabled, (e) => {\n      const code = getEventCode(e);\n      if (props.triggerKeys.includes(code)) {\n        e.preventDefault();\n        onToggle(e);\n      }\n    });\n    expose({\n      triggerRef\n    });\n    return (_ctx, _cache) => {\n      return openBlock(), createBlock(unref(ElPopperTrigger), {\n        id: unref(id),\n        \"virtual-ref\": _ctx.virtualRef,\n        open: unref(open),\n        \"virtual-triggering\": _ctx.virtualTriggering,\n        class: normalizeClass(unref(ns).e(\"trigger\")),\n        onBlur: unref(onBlur),\n        onClick: unref(onClick),\n        onContextmenu: unref(onContextMenu),\n        onFocus: unref(onFocus),\n        onMouseenter: unref(onMouseenter),\n        onMouseleave: unref(onMouseleave),\n        onKeydown: unref(onKeydown)\n      }, {\n        default: withCtx(() => [\n          renderSlot(_ctx.$slots, \"default\")\n        ]),\n        _: 3\n      }, 8, [\"id\", \"virtual-ref\", \"open\", \"virtual-triggering\", \"class\", \"onBlur\", \"onClick\", \"onContextmenu\", \"onFocus\", \"onMouseenter\", \"onMouseleave\", \"onKeydown\"]);\n    };\n  }\n});\nvar ElTooltipTrigger = /* @__PURE__ */ _export_sfc(_sfc_main, [[\"__file\", \"trigger.vue\"]]);\n\nexport { ElTooltipTrigger as default };\n//# sourceMappingURL=trigger2.mjs.map\n","import Teleport from './src/teleport2.mjs';\nexport { teleportProps } from './src/teleport.mjs';\nimport { withInstall } from '../../utils/vue/install.mjs';\n\nconst ElTeleport = withInstall(Teleport);\n\nexport { ElTeleport, ElTeleport as default };\n//# sourceMappingURL=index.mjs.map\n","import { defineComponent, renderSlot, openBlock, createBlock, Teleport as Teleport$1 } from 'vue';\nimport { teleportProps } from './teleport.mjs';\nimport _export_sfc from '../../../_virtual/plugin-vue_export-helper.mjs';\n\nconst _sfc_main = /* @__PURE__ */ defineComponent({\n  __name: \"teleport\",\n  props: teleportProps,\n  setup(__props) {\n    return (_ctx, _cache) => {\n      return _ctx.disabled ? renderSlot(_ctx.$slots, \"default\", { key: 0 }) : (openBlock(), createBlock(Teleport$1, {\n        key: 1,\n        to: _ctx.to\n      }, [\n        renderSlot(_ctx.$slots, \"default\")\n      ], 8, [\"to\"]));\n    };\n  }\n});\nvar Teleport = /* @__PURE__ */ _export_sfc(_sfc_main, [[\"__file\", \"teleport.vue\"]]);\n\nexport { Teleport as default };\n//# sourceMappingURL=teleport2.mjs.map\n","import { computed, onBeforeMount } from 'vue';\nimport { useGetDerivedNamespace } from '../use-namespace/index.mjs';\nimport { useIdInjection } from '../use-id/index.mjs';\nimport { isClient } from '@vueuse/core';\n\nconst usePopperContainerId = () => {\n  const namespace = useGetDerivedNamespace();\n  const idInjection = useIdInjection();\n  const id = computed(() => {\n    return `${namespace.value}-popper-container-${idInjection.prefix}`;\n  });\n  const selector = computed(() => `#${id.value}`);\n  return {\n    id,\n    selector\n  };\n};\nconst createContainer = (id) => {\n  const container = document.createElement(\"div\");\n  container.id = id;\n  document.body.appendChild(container);\n  return container;\n};\nconst usePopperContainer = () => {\n  const { id, selector } = usePopperContainerId();\n  onBeforeMount(() => {\n    if (!isClient)\n      return;\n    if (!document.body.querySelector(selector.value)) {\n      createContainer(id.value);\n    }\n  });\n  return {\n    id,\n    selector\n  };\n};\n\nexport { usePopperContainer, usePopperContainerId };\n//# sourceMappingURL=index.mjs.map\n","import { defineComponent, ref, inject, computed, onBeforeUnmount, unref, watch, openBlock, createBlock, withCtx, Transition, withDirectives, createVNode, mergeProps, renderSlot, vShow, createCommentVNode } from 'vue';\nimport { computedEager, onClickOutside } from '@vueuse/core';\nimport '../../popper/index.mjs';\nimport { ElTeleport } from '../../teleport/index.mjs';\nimport { TOOLTIP_INJECTION_KEY } from './constants.mjs';\nimport { useTooltipContentProps } from './content.mjs';\nimport _export_sfc from '../../../_virtual/plugin-vue_export-helper.mjs';\nimport { usePopperContainerId } from '../../../hooks/use-popper-container/index.mjs';\nimport { castArray } from '../../../utils/arrays.mjs';\nimport ElPopperContent from '../../popper/src/content2.mjs';\nimport { useNamespace } from '../../../hooks/use-namespace/index.mjs';\nimport { focusElement } from '../../../utils/dom/aria.mjs';\nimport { composeEventHandlers } from '../../../utils/dom/event.mjs';\n\nconst __default__ = defineComponent({\n  name: \"ElTooltipContent\",\n  inheritAttrs: false\n});\nconst _sfc_main = /* @__PURE__ */ defineComponent({\n  ...__default__,\n  props: useTooltipContentProps,\n  setup(__props, { expose }) {\n    const props = __props;\n    const { selector } = usePopperContainerId();\n    const ns = useNamespace(\"tooltip\");\n    const contentRef = ref();\n    const popperContentRef = computedEager(() => {\n      var _a;\n      return (_a = contentRef.value) == null ? void 0 : _a.popperContentRef;\n    });\n    let stopHandle;\n    const {\n      controlled,\n      id,\n      open,\n      trigger,\n      onClose,\n      onOpen,\n      onShow,\n      onHide,\n      onBeforeShow,\n      onBeforeHide\n    } = inject(TOOLTIP_INJECTION_KEY, void 0);\n    const transitionClass = computed(() => {\n      return props.transition || `${ns.namespace.value}-fade-in-linear`;\n    });\n    const persistentRef = computed(() => {\n      return props.persistent;\n    });\n    onBeforeUnmount(() => {\n      stopHandle == null ? void 0 : stopHandle();\n    });\n    const shouldRender = computed(() => {\n      return unref(persistentRef) ? true : unref(open);\n    });\n    const shouldShow = computed(() => {\n      return props.disabled ? false : unref(open);\n    });\n    const appendTo = computed(() => {\n      return props.appendTo || selector.value;\n    });\n    const contentStyle = computed(() => {\n      var _a;\n      return (_a = props.style) != null ? _a : {};\n    });\n    const ariaHidden = ref(true);\n    const onTransitionLeave = () => {\n      onHide();\n      isFocusInsideContent() && focusElement(document.body, { preventScroll: true });\n      ariaHidden.value = true;\n    };\n    const stopWhenControlled = () => {\n      if (unref(controlled))\n        return true;\n    };\n    const onContentEnter = composeEventHandlers(stopWhenControlled, () => {\n      if (props.enterable && unref(trigger) === \"hover\") {\n        onOpen();\n      }\n    });\n    const onContentLeave = composeEventHandlers(stopWhenControlled, () => {\n      if (unref(trigger) === \"hover\") {\n        onClose();\n      }\n    });\n    const onBeforeEnter = () => {\n      var _a, _b;\n      (_b = (_a = contentRef.value) == null ? void 0 : _a.updatePopper) == null ? void 0 : _b.call(_a);\n      onBeforeShow == null ? void 0 : onBeforeShow();\n    };\n    const onBeforeLeave = () => {\n      onBeforeHide == null ? void 0 : onBeforeHide();\n    };\n    const onAfterShow = () => {\n      onShow();\n    };\n    const onBlur = () => {\n      if (!props.virtualTriggering) {\n        onClose();\n      }\n    };\n    const isFocusInsideContent = (event) => {\n      var _a;\n      const popperContent = (_a = contentRef.value) == null ? void 0 : _a.popperContentRef;\n      const activeElement = (event == null ? void 0 : event.relatedTarget) || document.activeElement;\n      return popperContent == null ? void 0 : popperContent.contains(activeElement);\n    };\n    watch(() => unref(open), (val) => {\n      if (!val) {\n        stopHandle == null ? void 0 : stopHandle();\n      } else {\n        ariaHidden.value = false;\n        stopHandle = onClickOutside(popperContentRef, () => {\n          if (unref(controlled))\n            return;\n          const needClose = castArray(unref(trigger)).every((item) => {\n            return item !== \"hover\" && item !== \"focus\";\n          });\n          if (needClose) {\n            onClose();\n          }\n        });\n      }\n    }, {\n      flush: \"post\"\n    });\n    watch(() => props.content, () => {\n      var _a, _b;\n      (_b = (_a = contentRef.value) == null ? void 0 : _a.updatePopper) == null ? void 0 : _b.call(_a);\n    });\n    expose({\n      contentRef,\n      isFocusInsideContent\n    });\n    return (_ctx, _cache) => {\n      return openBlock(), createBlock(unref(ElTeleport), {\n        disabled: !_ctx.teleported,\n        to: unref(appendTo)\n      }, {\n        default: withCtx(() => [\n          unref(shouldRender) || !ariaHidden.value ? (openBlock(), createBlock(Transition, {\n            key: 0,\n            name: unref(transitionClass),\n            appear: !unref(persistentRef),\n            onAfterLeave: onTransitionLeave,\n            onBeforeEnter,\n            onAfterEnter: onAfterShow,\n            onBeforeLeave,\n            persisted: \"\"\n          }, {\n            default: withCtx(() => [\n              withDirectives(createVNode(unref(ElPopperContent), mergeProps({\n                id: unref(id),\n                ref_key: \"contentRef\",\n                ref: contentRef\n              }, _ctx.$attrs, {\n                \"aria-label\": _ctx.ariaLabel,\n                \"aria-hidden\": ariaHidden.value,\n                \"boundaries-padding\": _ctx.boundariesPadding,\n                \"fallback-placements\": _ctx.fallbackPlacements,\n                \"gpu-acceleration\": _ctx.gpuAcceleration,\n                offset: _ctx.offset,\n                placement: _ctx.placement,\n                \"popper-options\": _ctx.popperOptions,\n                \"arrow-offset\": _ctx.arrowOffset,\n                strategy: _ctx.strategy,\n                effect: _ctx.effect,\n                enterable: _ctx.enterable,\n                pure: _ctx.pure,\n                \"popper-class\": _ctx.popperClass,\n                \"popper-style\": [_ctx.popperStyle, unref(contentStyle)],\n                \"reference-el\": _ctx.referenceEl,\n                \"trigger-target-el\": _ctx.triggerTargetEl,\n                visible: unref(shouldShow),\n                \"z-index\": _ctx.zIndex,\n                onMouseenter: unref(onContentEnter),\n                onMouseleave: unref(onContentLeave),\n                onBlur,\n                onClose: unref(onClose)\n              }), {\n                default: withCtx(() => [\n                  renderSlot(_ctx.$slots, \"default\")\n                ]),\n                _: 3\n              }, 16, [\"id\", \"aria-label\", \"aria-hidden\", \"boundaries-padding\", \"fallback-placements\", \"gpu-acceleration\", \"offset\", \"placement\", \"popper-options\", \"arrow-offset\", \"strategy\", \"effect\", \"enterable\", \"pure\", \"popper-class\", \"popper-style\", \"reference-el\", \"trigger-target-el\", \"visible\", \"z-index\", \"onMouseenter\", \"onMouseleave\", \"onClose\"]), [\n                [vShow, unref(shouldShow)]\n              ])\n            ]),\n            _: 3\n          }, 8, [\"name\", \"appear\"])) : createCommentVNode(\"v-if\", true)\n        ]),\n        _: 3\n      }, 8, [\"disabled\", \"to\"]);\n    };\n  }\n});\nvar ElTooltipContent = /* @__PURE__ */ _export_sfc(_sfc_main, [[\"__file\", \"content.vue\"]]);\n\nexport { ElTooltipContent as default };\n//# sourceMappingURL=content2.mjs.map\n","export { castArray as ensureArray } from 'lodash-unified';\nimport { isArray } from '@vue/shared';\n\nconst unique = (arr) => [...new Set(arr)];\nconst extractFirst = (arr) => {\n  return isArray(arr) ? arr[0] : arr;\n};\nconst castArray = (arr) => {\n  if (!arr && arr !== 0)\n    return [];\n  return isArray(arr) ? arr : [arr];\n};\n\nexport { castArray, extractFirst, unique };\n//# sourceMappingURL=arrays.mjs.map\n","import { defineComponent, ref, toRef, computed, provide, readonly, unref, watch, onDeactivated, openBlock, createBlock, withCtx, createVNode, renderSlot, createCommentVNode, createElementBlock, toDisplayString } from 'vue';\nimport { ElPopper } from '../../popper/index.mjs';\nimport { TOOLTIP_INJECTION_KEY } from './constants.mjs';\nimport { useTooltipProps, tooltipEmits, useTooltipModelToggle } from './tooltip.mjs';\nimport ElTooltipTrigger from './trigger2.mjs';\nimport ElTooltipContent from './content2.mjs';\nimport _export_sfc from '../../../_virtual/plugin-vue_export-helper.mjs';\nimport { usePopperContainer } from '../../../hooks/use-popper-container/index.mjs';\nimport ElPopperArrow from '../../popper/src/arrow2.mjs';\nimport { useNamespace } from '../../../hooks/use-namespace/index.mjs';\nimport { useId } from '../../../hooks/use-id/index.mjs';\nimport { useDelayedToggle } from '../../../hooks/use-delayed-toggle/index.mjs';\nimport { isBoolean } from '../../../utils/types.mjs';\n\nconst __default__ = defineComponent({\n  name: \"ElTooltip\"\n});\nconst _sfc_main = /* @__PURE__ */ defineComponent({\n  ...__default__,\n  props: useTooltipProps,\n  emits: tooltipEmits,\n  setup(__props, { expose, emit }) {\n    const props = __props;\n    usePopperContainer();\n    const ns = useNamespace(\"tooltip\");\n    const id = useId();\n    const popperRef = ref();\n    const contentRef = ref();\n    const updatePopper = () => {\n      var _a;\n      const popperComponent = unref(popperRef);\n      if (popperComponent) {\n        (_a = popperComponent.popperInstanceRef) == null ? void 0 : _a.update();\n      }\n    };\n    const open = ref(false);\n    const toggleReason = ref();\n    const { show, hide, hasUpdateHandler } = useTooltipModelToggle({\n      indicator: open,\n      toggleReason\n    });\n    const { onOpen, onClose } = useDelayedToggle({\n      showAfter: toRef(props, \"showAfter\"),\n      hideAfter: toRef(props, \"hideAfter\"),\n      autoClose: toRef(props, \"autoClose\"),\n      open: show,\n      close: hide\n    });\n    const controlled = computed(() => isBoolean(props.visible) && !hasUpdateHandler.value);\n    const kls = computed(() => {\n      return [ns.b(), props.popperClass];\n    });\n    provide(TOOLTIP_INJECTION_KEY, {\n      controlled,\n      id,\n      open: readonly(open),\n      trigger: toRef(props, \"trigger\"),\n      onOpen,\n      onClose,\n      onToggle: (event) => {\n        if (unref(open)) {\n          onClose(event);\n        } else {\n          onOpen(event);\n        }\n      },\n      onShow: () => {\n        emit(\"show\", toggleReason.value);\n      },\n      onHide: () => {\n        emit(\"hide\", toggleReason.value);\n      },\n      onBeforeShow: () => {\n        emit(\"before-show\", toggleReason.value);\n      },\n      onBeforeHide: () => {\n        emit(\"before-hide\", toggleReason.value);\n      },\n      updatePopper\n    });\n    watch(() => props.disabled, (disabled) => {\n      if (disabled && open.value) {\n        open.value = false;\n      }\n    });\n    const isFocusInsideContent = (event) => {\n      var _a;\n      return (_a = contentRef.value) == null ? void 0 : _a.isFocusInsideContent(event);\n    };\n    onDeactivated(() => open.value && hide());\n    expose({\n      popperRef,\n      contentRef,\n      isFocusInsideContent,\n      updatePopper,\n      onOpen,\n      onClose,\n      hide\n    });\n    return (_ctx, _cache) => {\n      return openBlock(), createBlock(unref(ElPopper), {\n        ref_key: \"popperRef\",\n        ref: popperRef,\n        role: _ctx.role\n      }, {\n        default: withCtx(() => [\n          createVNode(ElTooltipTrigger, {\n            disabled: _ctx.disabled,\n            trigger: _ctx.trigger,\n            \"trigger-keys\": _ctx.triggerKeys,\n            \"virtual-ref\": _ctx.virtualRef,\n            \"virtual-triggering\": _ctx.virtualTriggering,\n            \"focus-on-target\": _ctx.focusOnTarget\n          }, {\n            default: withCtx(() => [\n              _ctx.$slots.default ? renderSlot(_ctx.$slots, \"default\", { key: 0 }) : createCommentVNode(\"v-if\", true)\n            ]),\n            _: 3\n          }, 8, [\"disabled\", \"trigger\", \"trigger-keys\", \"virtual-ref\", \"virtual-triggering\", \"focus-on-target\"]),\n          createVNode(ElTooltipContent, {\n            ref_key: \"contentRef\",\n            ref: contentRef,\n            \"aria-label\": _ctx.ariaLabel,\n            \"boundaries-padding\": _ctx.boundariesPadding,\n            content: _ctx.content,\n            disabled: _ctx.disabled,\n            effect: _ctx.effect,\n            enterable: _ctx.enterable,\n            \"fallback-placements\": _ctx.fallbackPlacements,\n            \"hide-after\": _ctx.hideAfter,\n            \"gpu-acceleration\": _ctx.gpuAcceleration,\n            offset: _ctx.offset,\n            persistent: _ctx.persistent,\n            \"popper-class\": unref(kls),\n            \"popper-style\": _ctx.popperStyle,\n            placement: _ctx.placement,\n            \"popper-options\": _ctx.popperOptions,\n            \"arrow-offset\": _ctx.arrowOffset,\n            pure: _ctx.pure,\n            \"raw-content\": _ctx.rawContent,\n            \"reference-el\": _ctx.referenceEl,\n            \"trigger-target-el\": _ctx.triggerTargetEl,\n            \"show-after\": _ctx.showAfter,\n            strategy: _ctx.strategy,\n            teleported: _ctx.teleported,\n            transition: _ctx.transition,\n            \"virtual-triggering\": _ctx.virtualTriggering,\n            \"z-index\": _ctx.zIndex,\n            \"append-to\": _ctx.appendTo\n          }, {\n            default: withCtx(() => [\n              renderSlot(_ctx.$slots, \"content\", {}, () => [\n                _ctx.rawContent ? (openBlock(), createElementBlock(\"span\", {\n                  key: 0,\n                  innerHTML: _ctx.content\n                }, null, 8, [\"innerHTML\"])) : (openBlock(), createElementBlock(\"span\", { key: 1 }, toDisplayString(_ctx.content), 1))\n              ]),\n              _ctx.showArrow ? (openBlock(), createBlock(unref(ElPopperArrow), { key: 0 })) : createCommentVNode(\"v-if\", true)\n            ]),\n            _: 3\n          }, 8, [\"aria-label\", \"boundaries-padding\", \"content\", \"disabled\", \"effect\", \"enterable\", \"fallback-placements\", \"hide-after\", \"gpu-acceleration\", \"offset\", \"persistent\", \"popper-class\", \"popper-style\", \"placement\", \"popper-options\", \"arrow-offset\", \"pure\", \"raw-content\", \"reference-el\", \"trigger-target-el\", \"show-after\", \"strategy\", \"teleported\", \"transition\", \"virtual-triggering\", \"z-index\", \"append-to\"])\n        ]),\n        _: 3\n      }, 8, [\"role\"]);\n    };\n  }\n});\nvar Tooltip = /* @__PURE__ */ _export_sfc(_sfc_main, [[\"__file\", \"tooltip.vue\"]]);\n\nexport { Tooltip as default };\n//# sourceMappingURL=tooltip2.mjs.map\n","import Tooltip from './src/tooltip2.mjs';\nexport { tooltipEmits, useTooltipModelToggle, useTooltipModelToggleEmits, useTooltipModelToggleProps, useTooltipProps } from './src/tooltip.mjs';\nexport { useTooltipTriggerProps } from './src/trigger.mjs';\nexport { useTooltipContentProps } from './src/content.mjs';\nexport { TOOLTIP_INJECTION_KEY } from './src/constants.mjs';\nimport { withInstall } from '../../utils/vue/install.mjs';\n\nconst ElTooltip = withInstall(Tooltip);\n\nexport { ElTooltip, ElTooltip as default };\n//# sourceMappingURL=index.mjs.map\n","import { buildProps, definePropType } from '../../../utils/vue/props/runtime.mjs';\n\nconst badgeProps = buildProps({\n  value: {\n    type: [String, Number],\n    default: \"\"\n  },\n  max: {\n    type: Number,\n    default: 99\n  },\n  isDot: Boolean,\n  hidden: Boolean,\n  type: {\n    type: String,\n    values: [\"primary\", \"success\", \"warning\", \"info\", \"danger\"],\n    default: \"danger\"\n  },\n  showZero: {\n    type: Boolean,\n    default: true\n  },\n  color: String,\n  badgeStyle: {\n    type: definePropType([String, Object, Array])\n  },\n  offset: {\n    type: definePropType(Array),\n    default: [0, 0]\n  },\n  badgeClass: {\n    type: String\n  }\n});\n\nexport { badgeProps };\n//# sourceMappingURL=badge.mjs.map\n","import { defineComponent, computed, openBlock, createElementBlock, normalizeClass, unref, renderSlot, createVNode, Transition, withCtx, withDirectives, createElementVNode, normalizeStyle, createTextVNode, toDisplayString, vShow } from 'vue';\nimport { badgeProps } from './badge.mjs';\nimport _export_sfc from '../../../_virtual/plugin-vue_export-helper.mjs';\nimport { useNamespace } from '../../../hooks/use-namespace/index.mjs';\nimport { isNumber } from '../../../utils/types.mjs';\nimport { addUnit } from '../../../utils/dom/style.mjs';\n\nconst __default__ = defineComponent({\n  name: \"ElBadge\"\n});\nconst _sfc_main = /* @__PURE__ */ defineComponent({\n  ...__default__,\n  props: badgeProps,\n  setup(__props, { expose }) {\n    const props = __props;\n    const ns = useNamespace(\"badge\");\n    const content = computed(() => {\n      if (props.isDot)\n        return \"\";\n      if (isNumber(props.value) && isNumber(props.max)) {\n        return props.max < props.value ? `${props.max}+` : `${props.value}`;\n      }\n      return `${props.value}`;\n    });\n    const style = computed(() => {\n      var _a, _b, _c, _d, _e;\n      return [\n        {\n          backgroundColor: props.color,\n          marginRight: addUnit(-((_b = (_a = props.offset) == null ? void 0 : _a[0]) != null ? _b : 0)),\n          marginTop: addUnit((_d = (_c = props.offset) == null ? void 0 : _c[1]) != null ? _d : 0)\n        },\n        (_e = props.badgeStyle) != null ? _e : {}\n      ];\n    });\n    expose({\n      content\n    });\n    return (_ctx, _cache) => {\n      return openBlock(), createElementBlock(\"div\", {\n        class: normalizeClass(unref(ns).b())\n      }, [\n        renderSlot(_ctx.$slots, \"default\"),\n        createVNode(Transition, {\n          name: `${unref(ns).namespace.value}-zoom-in-center`,\n          persisted: \"\"\n        }, {\n          default: withCtx(() => [\n            withDirectives(createElementVNode(\"sup\", {\n              class: normalizeClass([\n                unref(ns).e(\"content\"),\n                unref(ns).em(\"content\", _ctx.type),\n                unref(ns).is(\"fixed\", !!_ctx.$slots.default),\n                unref(ns).is(\"dot\", _ctx.isDot),\n                unref(ns).is(\"hide-zero\", !_ctx.showZero && props.value === 0),\n                _ctx.badgeClass\n              ]),\n              style: normalizeStyle(unref(style))\n            }, [\n              renderSlot(_ctx.$slots, \"content\", { value: unref(content) }, () => [\n                createTextVNode(toDisplayString(unref(content)), 1)\n              ])\n            ], 6), [\n              [vShow, !_ctx.hidden && (unref(content) || _ctx.isDot || _ctx.$slots.content)]\n            ])\n          ]),\n          _: 3\n        }, 8, [\"name\"])\n      ], 2);\n    };\n  }\n});\nvar Badge = /* @__PURE__ */ _export_sfc(_sfc_main, [[\"__file\", \"badge.vue\"]]);\n\nexport { Badge as default };\n//# sourceMappingURL=badge2.mjs.map\n","import Badge from './src/badge2.mjs';\nexport { badgeProps } from './src/badge.mjs';\nimport { withInstall } from '../../utils/vue/install.mjs';\n\nconst ElBadge = withInstall(Badge);\n\nexport { ElBadge, ElBadge as default };\n//# sourceMappingURL=index.mjs.map\n","const buttonGroupContextKey = Symbol(\"buttonGroupContextKey\");\n\nexport { buttonGroupContextKey };\n//# sourceMappingURL=constants.mjs.map\n","import { watch, unref } from 'vue';\n\nconst useDeprecated = ({ from, replacement, scope, version, ref, type = \"API\" }, condition) => {\n  watch(() => unref(condition), (val) => {\n  }, {\n    immediate: true\n  });\n};\n\nexport { useDeprecated };\n//# sourceMappingURL=index.mjs.map\n","import { Loading } from '@element-plus/icons-vue';\nimport { buildProps, definePropType } from '../../../utils/vue/props/runtime.mjs';\nimport { useSizeProp } from '../../../hooks/use-size/index.mjs';\nimport { iconPropType } from '../../../utils/vue/icon.mjs';\n\nconst buttonTypes = [\n  \"default\",\n  \"primary\",\n  \"success\",\n  \"warning\",\n  \"info\",\n  \"danger\",\n  \"text\",\n  \"\"\n];\nconst buttonNativeTypes = [\"button\", \"submit\", \"reset\"];\nconst buttonProps = buildProps({\n  size: useSizeProp,\n  disabled: Boolean,\n  type: {\n    type: String,\n    values: buttonTypes,\n    default: \"\"\n  },\n  icon: {\n    type: iconPropType\n  },\n  nativeType: {\n    type: String,\n    values: buttonNativeTypes,\n    default: \"button\"\n  },\n  loading: Boolean,\n  loadingIcon: {\n    type: iconPropType,\n    default: () => Loading\n  },\n  plain: {\n    type: Boolean,\n    default: void 0\n  },\n  text: {\n    type: Boolean,\n    default: void 0\n  },\n  link: Boolean,\n  bg: Boolean,\n  autofocus: Boolean,\n  round: {\n    type: Boolean,\n    default: void 0\n  },\n  circle: Boolean,\n  color: String,\n  dark: Boolean,\n  autoInsertSpace: {\n    type: Boolean,\n    default: void 0\n  },\n  tag: {\n    type: definePropType([String, Object]),\n    default: \"button\"\n  }\n});\nconst buttonEmits = {\n  click: (evt) => evt instanceof MouseEvent\n};\n\nexport { buttonEmits, buttonNativeTypes, buttonProps, buttonTypes };\n//# sourceMappingURL=button.mjs.map\n","/**\n * Take input from [0, n] and return it as [0, 1]\n * @hidden\n */\nexport function bound01(n, max) {\n    if (isOnePointZero(n)) {\n        n = '100%';\n    }\n    var isPercent = isPercentage(n);\n    n = max === 360 ? n : Math.min(max, Math.max(0, parseFloat(n)));\n    // Automatically convert percentage into number\n    if (isPercent) {\n        n = parseInt(String(n * max), 10) / 100;\n    }\n    // Handle floating point rounding errors\n    if (Math.abs(n - max) < 0.000001) {\n        return 1;\n    }\n    // Convert into [0, 1] range if it isn't already\n    if (max === 360) {\n        // If n is a hue given in degrees,\n        // wrap around out-of-range values into [0, 360] range\n        // then convert into [0, 1].\n        n = (n < 0 ? (n % max) + max : n % max) / parseFloat(String(max));\n    }\n    else {\n        // If n not a hue given in degrees\n        // Convert into [0, 1] range if it isn't already.\n        n = (n % max) / parseFloat(String(max));\n    }\n    return n;\n}\n/**\n * Force a number between 0 and 1\n * @hidden\n */\nexport function clamp01(val) {\n    return Math.min(1, Math.max(0, val));\n}\n/**\n * Need to handle 1.0 as 100%, since once it is a number, there is no difference between it and 1\n * <http://stackoverflow.com/questions/7422072/javascript-how-to-detect-number-as-a-decimal-including-1-0>\n * @hidden\n */\nexport function isOnePointZero(n) {\n    return typeof n === 'string' && n.indexOf('.') !== -1 && parseFloat(n) === 1;\n}\n/**\n * Check to see if string passed in is a percentage\n * @hidden\n */\nexport function isPercentage(n) {\n    return typeof n === 'string' && n.indexOf('%') !== -1;\n}\n/**\n * Return a valid alpha value [0,1] with all invalid values being set to 1\n * @hidden\n */\nexport function boundAlpha(a) {\n    a = parseFloat(a);\n    if (isNaN(a) || a < 0 || a > 1) {\n        a = 1;\n    }\n    return a;\n}\n/**\n * Replace a decimal with it's percentage value\n * @hidden\n */\nexport function convertToPercentage(n) {\n    if (n <= 1) {\n        return \"\".concat(Number(n) * 100, \"%\");\n    }\n    return n;\n}\n/**\n * Force a hex value to have 2 characters\n * @hidden\n */\nexport function pad2(c) {\n    return c.length === 1 ? '0' + c : String(c);\n}\n","import { bound01, pad2 } from './util.js';\n// `rgbToHsl`, `rgbToHsv`, `hslToRgb`, `hsvToRgb` modified from:\n// <http://mjijackson.com/2008/02/rgb-to-hsl-and-rgb-to-hsv-color-model-conversion-algorithms-in-javascript>\n/**\n * Handle bounds / percentage checking to conform to CSS color spec\n * <http://www.w3.org/TR/css3-color/>\n * *Assumes:* r, g, b in [0, 255] or [0, 1]\n * *Returns:* { r, g, b } in [0, 255]\n */\nexport function rgbToRgb(r, g, b) {\n    return {\n        r: bound01(r, 255) * 255,\n        g: bound01(g, 255) * 255,\n        b: bound01(b, 255) * 255,\n    };\n}\n/**\n * Converts an RGB color value to HSL.\n * *Assumes:* r, g, and b are contained in [0, 255] or [0, 1]\n * *Returns:* { h, s, l } in [0,1]\n */\nexport function rgbToHsl(r, g, b) {\n    r = bound01(r, 255);\n    g = bound01(g, 255);\n    b = bound01(b, 255);\n    var max = Math.max(r, g, b);\n    var min = Math.min(r, g, b);\n    var h = 0;\n    var s = 0;\n    var l = (max + min) / 2;\n    if (max === min) {\n        s = 0;\n        h = 0; // achromatic\n    }\n    else {\n        var d = max - min;\n        s = l > 0.5 ? d / (2 - max - min) : d / (max + min);\n        switch (max) {\n            case r:\n                h = (g - b) / d + (g < b ? 6 : 0);\n                break;\n            case g:\n                h = (b - r) / d + 2;\n                break;\n            case b:\n                h = (r - g) / d + 4;\n                break;\n            default:\n                break;\n        }\n        h /= 6;\n    }\n    return { h: h, s: s, l: l };\n}\nfunction hue2rgb(p, q, t) {\n    if (t < 0) {\n        t += 1;\n    }\n    if (t > 1) {\n        t -= 1;\n    }\n    if (t < 1 / 6) {\n        return p + (q - p) * (6 * t);\n    }\n    if (t < 1 / 2) {\n        return q;\n    }\n    if (t < 2 / 3) {\n        return p + (q - p) * (2 / 3 - t) * 6;\n    }\n    return p;\n}\n/**\n * Converts an HSL color value to RGB.\n *\n * *Assumes:* h is contained in [0, 1] or [0, 360] and s and l are contained [0, 1] or [0, 100]\n * *Returns:* { r, g, b } in the set [0, 255]\n */\nexport function hslToRgb(h, s, l) {\n    var r;\n    var g;\n    var b;\n    h = bound01(h, 360);\n    s = bound01(s, 100);\n    l = bound01(l, 100);\n    if (s === 0) {\n        // achromatic\n        g = l;\n        b = l;\n        r = l;\n    }\n    else {\n        var q = l < 0.5 ? l * (1 + s) : l + s - l * s;\n        var p = 2 * l - q;\n        r = hue2rgb(p, q, h + 1 / 3);\n        g = hue2rgb(p, q, h);\n        b = hue2rgb(p, q, h - 1 / 3);\n    }\n    return { r: r * 255, g: g * 255, b: b * 255 };\n}\n/**\n * Converts an RGB color value to HSV\n *\n * *Assumes:* r, g, and b are contained in the set [0, 255] or [0, 1]\n * *Returns:* { h, s, v } in [0,1]\n */\nexport function rgbToHsv(r, g, b) {\n    r = bound01(r, 255);\n    g = bound01(g, 255);\n    b = bound01(b, 255);\n    var max = Math.max(r, g, b);\n    var min = Math.min(r, g, b);\n    var h = 0;\n    var v = max;\n    var d = max - min;\n    var s = max === 0 ? 0 : d / max;\n    if (max === min) {\n        h = 0; // achromatic\n    }\n    else {\n        switch (max) {\n            case r:\n                h = (g - b) / d + (g < b ? 6 : 0);\n                break;\n            case g:\n                h = (b - r) / d + 2;\n                break;\n            case b:\n                h = (r - g) / d + 4;\n                break;\n            default:\n                break;\n        }\n        h /= 6;\n    }\n    return { h: h, s: s, v: v };\n}\n/**\n * Converts an HSV color value to RGB.\n *\n * *Assumes:* h is contained in [0, 1] or [0, 360] and s and v are contained in [0, 1] or [0, 100]\n * *Returns:* { r, g, b } in the set [0, 255]\n */\nexport function hsvToRgb(h, s, v) {\n    h = bound01(h, 360) * 6;\n    s = bound01(s, 100);\n    v = bound01(v, 100);\n    var i = Math.floor(h);\n    var f = h - i;\n    var p = v * (1 - s);\n    var q = v * (1 - f * s);\n    var t = v * (1 - (1 - f) * s);\n    var mod = i % 6;\n    var r = [v, q, p, p, t, v][mod];\n    var g = [t, v, v, q, p, p][mod];\n    var b = [p, p, t, v, v, q][mod];\n    return { r: r * 255, g: g * 255, b: b * 255 };\n}\n/**\n * Converts an RGB color to hex\n *\n * Assumes r, g, and b are contained in the set [0, 255]\n * Returns a 3 or 6 character hex\n */\nexport function rgbToHex(r, g, b, allow3Char) {\n    var hex = [\n        pad2(Math.round(r).toString(16)),\n        pad2(Math.round(g).toString(16)),\n        pad2(Math.round(b).toString(16)),\n    ];\n    // Return a 3 character hex if possible\n    if (allow3Char &&\n        hex[0].startsWith(hex[0].charAt(1)) &&\n        hex[1].startsWith(hex[1].charAt(1)) &&\n        hex[2].startsWith(hex[2].charAt(1))) {\n        return hex[0].charAt(0) + hex[1].charAt(0) + hex[2].charAt(0);\n    }\n    return hex.join('');\n}\n/**\n * Converts an RGBA color plus alpha transparency to hex\n *\n * Assumes r, g, b are contained in the set [0, 255] and\n * a in [0, 1]. Returns a 4 or 8 character rgba hex\n */\n// eslint-disable-next-line max-params\nexport function rgbaToHex(r, g, b, a, allow4Char) {\n    var hex = [\n        pad2(Math.round(r).toString(16)),\n        pad2(Math.round(g).toString(16)),\n        pad2(Math.round(b).toString(16)),\n        pad2(convertDecimalToHex(a)),\n    ];\n    // Return a 4 character hex if possible\n    if (allow4Char &&\n        hex[0].startsWith(hex[0].charAt(1)) &&\n        hex[1].startsWith(hex[1].charAt(1)) &&\n        hex[2].startsWith(hex[2].charAt(1)) &&\n        hex[3].startsWith(hex[3].charAt(1))) {\n        return hex[0].charAt(0) + hex[1].charAt(0) + hex[2].charAt(0) + hex[3].charAt(0);\n    }\n    return hex.join('');\n}\n/**\n * Converts an RGBA color to an ARGB Hex8 string\n * Rarely used, but required for \"toFilter()\"\n */\nexport function rgbaToArgbHex(r, g, b, a) {\n    var hex = [\n        pad2(convertDecimalToHex(a)),\n        pad2(Math.round(r).toString(16)),\n        pad2(Math.round(g).toString(16)),\n        pad2(Math.round(b).toString(16)),\n    ];\n    return hex.join('');\n}\n/** Converts a decimal to a hex value */\nexport function convertDecimalToHex(d) {\n    return Math.round(parseFloat(d) * 255).toString(16);\n}\n/** Converts a hex value to a decimal */\nexport function convertHexToDecimal(h) {\n    return parseIntFromHex(h) / 255;\n}\n/** Parse a base-16 hex value into a base-10 integer */\nexport function parseIntFromHex(val) {\n    return parseInt(val, 16);\n}\nexport function numberInputToObject(color) {\n    return {\n        r: color >> 16,\n        g: (color & 0xff00) >> 8,\n        b: color & 0xff,\n    };\n}\n","// https://github.com/bahamas10/css-color-names/blob/master/css-color-names.json\n/**\n * @hidden\n */\nexport var names = {\n    aliceblue: '#f0f8ff',\n    antiquewhite: '#faebd7',\n    aqua: '#00ffff',\n    aquamarine: '#7fffd4',\n    azure: '#f0ffff',\n    beige: '#f5f5dc',\n    bisque: '#ffe4c4',\n    black: '#000000',\n    blanchedalmond: '#ffebcd',\n    blue: '#0000ff',\n    blueviolet: '#8a2be2',\n    brown: '#a52a2a',\n    burlywood: '#deb887',\n    cadetblue: '#5f9ea0',\n    chartreuse: '#7fff00',\n    chocolate: '#d2691e',\n    coral: '#ff7f50',\n    cornflowerblue: '#6495ed',\n    cornsilk: '#fff8dc',\n    crimson: '#dc143c',\n    cyan: '#00ffff',\n    darkblue: '#00008b',\n    darkcyan: '#008b8b',\n    darkgoldenrod: '#b8860b',\n    darkgray: '#a9a9a9',\n    darkgreen: '#006400',\n    darkgrey: '#a9a9a9',\n    darkkhaki: '#bdb76b',\n    darkmagenta: '#8b008b',\n    darkolivegreen: '#556b2f',\n    darkorange: '#ff8c00',\n    darkorchid: '#9932cc',\n    darkred: '#8b0000',\n    darksalmon: '#e9967a',\n    darkseagreen: '#8fbc8f',\n    darkslateblue: '#483d8b',\n    darkslategray: '#2f4f4f',\n    darkslategrey: '#2f4f4f',\n    darkturquoise: '#00ced1',\n    darkviolet: '#9400d3',\n    deeppink: '#ff1493',\n    deepskyblue: '#00bfff',\n    dimgray: '#696969',\n    dimgrey: '#696969',\n    dodgerblue: '#1e90ff',\n    firebrick: '#b22222',\n    floralwhite: '#fffaf0',\n    forestgreen: '#228b22',\n    fuchsia: '#ff00ff',\n    gainsboro: '#dcdcdc',\n    ghostwhite: '#f8f8ff',\n    goldenrod: '#daa520',\n    gold: '#ffd700',\n    gray: '#808080',\n    green: '#008000',\n    greenyellow: '#adff2f',\n    grey: '#808080',\n    honeydew: '#f0fff0',\n    hotpink: '#ff69b4',\n    indianred: '#cd5c5c',\n    indigo: '#4b0082',\n    ivory: '#fffff0',\n    khaki: '#f0e68c',\n    lavenderblush: '#fff0f5',\n    lavender: '#e6e6fa',\n    lawngreen: '#7cfc00',\n    lemonchiffon: '#fffacd',\n    lightblue: '#add8e6',\n    lightcoral: '#f08080',\n    lightcyan: '#e0ffff',\n    lightgoldenrodyellow: '#fafad2',\n    lightgray: '#d3d3d3',\n    lightgreen: '#90ee90',\n    lightgrey: '#d3d3d3',\n    lightpink: '#ffb6c1',\n    lightsalmon: '#ffa07a',\n    lightseagreen: '#20b2aa',\n    lightskyblue: '#87cefa',\n    lightslategray: '#778899',\n    lightslategrey: '#778899',\n    lightsteelblue: '#b0c4de',\n    lightyellow: '#ffffe0',\n    lime: '#00ff00',\n    limegreen: '#32cd32',\n    linen: '#faf0e6',\n    magenta: '#ff00ff',\n    maroon: '#800000',\n    mediumaquamarine: '#66cdaa',\n    mediumblue: '#0000cd',\n    mediumorchid: '#ba55d3',\n    mediumpurple: '#9370db',\n    mediumseagreen: '#3cb371',\n    mediumslateblue: '#7b68ee',\n    mediumspringgreen: '#00fa9a',\n    mediumturquoise: '#48d1cc',\n    mediumvioletred: '#c71585',\n    midnightblue: '#191970',\n    mintcream: '#f5fffa',\n    mistyrose: '#ffe4e1',\n    moccasin: '#ffe4b5',\n    navajowhite: '#ffdead',\n    navy: '#000080',\n    oldlace: '#fdf5e6',\n    olive: '#808000',\n    olivedrab: '#6b8e23',\n    orange: '#ffa500',\n    orangered: '#ff4500',\n    orchid: '#da70d6',\n    palegoldenrod: '#eee8aa',\n    palegreen: '#98fb98',\n    paleturquoise: '#afeeee',\n    palevioletred: '#db7093',\n    papayawhip: '#ffefd5',\n    peachpuff: '#ffdab9',\n    peru: '#cd853f',\n    pink: '#ffc0cb',\n    plum: '#dda0dd',\n    powderblue: '#b0e0e6',\n    purple: '#800080',\n    rebeccapurple: '#663399',\n    red: '#ff0000',\n    rosybrown: '#bc8f8f',\n    royalblue: '#4169e1',\n    saddlebrown: '#8b4513',\n    salmon: '#fa8072',\n    sandybrown: '#f4a460',\n    seagreen: '#2e8b57',\n    seashell: '#fff5ee',\n    sienna: '#a0522d',\n    silver: '#c0c0c0',\n    skyblue: '#87ceeb',\n    slateblue: '#6a5acd',\n    slategray: '#708090',\n    slategrey: '#708090',\n    snow: '#fffafa',\n    springgreen: '#00ff7f',\n    steelblue: '#4682b4',\n    tan: '#d2b48c',\n    teal: '#008080',\n    thistle: '#d8bfd8',\n    tomato: '#ff6347',\n    turquoise: '#40e0d0',\n    violet: '#ee82ee',\n    wheat: '#f5deb3',\n    white: '#ffffff',\n    whitesmoke: '#f5f5f5',\n    yellow: '#ffff00',\n    yellowgreen: '#9acd32',\n};\n","/* eslint-disable @typescript-eslint/no-redundant-type-constituents */\nimport { convertHexToDecimal, hslToRgb, hsvToRgb, parseIntFromHex, rgbToRgb, } from './conversion.js';\nimport { names } from './css-color-names.js';\nimport { boundAlpha, convertToPercentage } from './util.js';\n/**\n * Given a string or object, convert that input to RGB\n *\n * Possible string inputs:\n * ```\n * \"red\"\n * \"#f00\" or \"f00\"\n * \"#ff0000\" or \"ff0000\"\n * \"#ff000000\" or \"ff000000\"\n * \"rgb 255 0 0\" or \"rgb (255, 0, 0)\"\n * \"rgb 1.0 0 0\" or \"rgb (1, 0, 0)\"\n * \"rgba (255, 0, 0, 1)\" or \"rgba 255, 0, 0, 1\"\n * \"rgba (1.0, 0, 0, 1)\" or \"rgba 1.0, 0, 0, 1\"\n * \"hsl(0, 100%, 50%)\" or \"hsl 0 100% 50%\"\n * \"hsla(0, 100%, 50%, 1)\" or \"hsla 0 100% 50%, 1\"\n * \"hsv(0, 100%, 100%)\" or \"hsv 0 100% 100%\"\n * ```\n */\nexport function inputToRGB(color) {\n    var rgb = { r: 0, g: 0, b: 0 };\n    var a = 1;\n    var s = null;\n    var v = null;\n    var l = null;\n    var ok = false;\n    var format = false;\n    if (typeof color === 'string') {\n        color = stringInputToObject(color);\n    }\n    if (typeof color === 'object') {\n        if (isValidCSSUnit(color.r) && isValidCSSUnit(color.g) && isValidCSSUnit(color.b)) {\n            rgb = rgbToRgb(color.r, color.g, color.b);\n            ok = true;\n            format = String(color.r).substr(-1) === '%' ? 'prgb' : 'rgb';\n        }\n        else if (isValidCSSUnit(color.h) && isValidCSSUnit(color.s) && isValidCSSUnit(color.v)) {\n            s = convertToPercentage(color.s);\n            v = convertToPercentage(color.v);\n            rgb = hsvToRgb(color.h, s, v);\n            ok = true;\n            format = 'hsv';\n        }\n        else if (isValidCSSUnit(color.h) && isValidCSSUnit(color.s) && isValidCSSUnit(color.l)) {\n            s = convertToPercentage(color.s);\n            l = convertToPercentage(color.l);\n            rgb = hslToRgb(color.h, s, l);\n            ok = true;\n            format = 'hsl';\n        }\n        if (Object.prototype.hasOwnProperty.call(color, 'a')) {\n            a = color.a;\n        }\n    }\n    a = boundAlpha(a);\n    return {\n        ok: ok,\n        format: color.format || format,\n        r: Math.min(255, Math.max(rgb.r, 0)),\n        g: Math.min(255, Math.max(rgb.g, 0)),\n        b: Math.min(255, Math.max(rgb.b, 0)),\n        a: a,\n    };\n}\n// <http://www.w3.org/TR/css3-values/#integers>\nvar CSS_INTEGER = '[-\\\\+]?\\\\d+%?';\n// <http://www.w3.org/TR/css3-values/#number-value>\nvar CSS_NUMBER = '[-\\\\+]?\\\\d*\\\\.\\\\d+%?';\n// Allow positive/negative integer/number.  Don't capture the either/or, just the entire outcome.\nvar CSS_UNIT = \"(?:\".concat(CSS_NUMBER, \")|(?:\").concat(CSS_INTEGER, \")\");\n// Actual matching.\n// Parentheses and commas are optional, but not required.\n// Whitespace can take the place of commas or opening paren\nvar PERMISSIVE_MATCH3 = \"[\\\\s|\\\\(]+(\".concat(CSS_UNIT, \")[,|\\\\s]+(\").concat(CSS_UNIT, \")[,|\\\\s]+(\").concat(CSS_UNIT, \")\\\\s*\\\\)?\");\nvar PERMISSIVE_MATCH4 = \"[\\\\s|\\\\(]+(\".concat(CSS_UNIT, \")[,|\\\\s]+(\").concat(CSS_UNIT, \")[,|\\\\s]+(\").concat(CSS_UNIT, \")[,|\\\\s]+(\").concat(CSS_UNIT, \")\\\\s*\\\\)?\");\nvar matchers = {\n    CSS_UNIT: new RegExp(CSS_UNIT),\n    rgb: new RegExp('rgb' + PERMISSIVE_MATCH3),\n    rgba: new RegExp('rgba' + PERMISSIVE_MATCH4),\n    hsl: new RegExp('hsl' + PERMISSIVE_MATCH3),\n    hsla: new RegExp('hsla' + PERMISSIVE_MATCH4),\n    hsv: new RegExp('hsv' + PERMISSIVE_MATCH3),\n    hsva: new RegExp('hsva' + PERMISSIVE_MATCH4),\n    hex3: /^#?([0-9a-fA-F]{1})([0-9a-fA-F]{1})([0-9a-fA-F]{1})$/,\n    hex6: /^#?([0-9a-fA-F]{2})([0-9a-fA-F]{2})([0-9a-fA-F]{2})$/,\n    hex4: /^#?([0-9a-fA-F]{1})([0-9a-fA-F]{1})([0-9a-fA-F]{1})([0-9a-fA-F]{1})$/,\n    hex8: /^#?([0-9a-fA-F]{2})([0-9a-fA-F]{2})([0-9a-fA-F]{2})([0-9a-fA-F]{2})$/,\n};\n/**\n * Permissive string parsing.  Take in a number of formats, and output an object\n * based on detected format.  Returns `{ r, g, b }` or `{ h, s, l }` or `{ h, s, v}`\n */\nexport function stringInputToObject(color) {\n    color = color.trim().toLowerCase();\n    if (color.length === 0) {\n        return false;\n    }\n    var named = false;\n    if (names[color]) {\n        color = names[color];\n        named = true;\n    }\n    else if (color === 'transparent') {\n        return { r: 0, g: 0, b: 0, a: 0, format: 'name' };\n    }\n    // Try to match string input using regular expressions.\n    // Keep most of the number bounding out of this function - don't worry about [0,1] or [0,100] or [0,360]\n    // Just return an object and let the conversion functions handle that.\n    // This way the result will be the same whether the tinycolor is initialized with string or object.\n    var match = matchers.rgb.exec(color);\n    if (match) {\n        return { r: match[1], g: match[2], b: match[3] };\n    }\n    match = matchers.rgba.exec(color);\n    if (match) {\n        return { r: match[1], g: match[2], b: match[3], a: match[4] };\n    }\n    match = matchers.hsl.exec(color);\n    if (match) {\n        return { h: match[1], s: match[2], l: match[3] };\n    }\n    match = matchers.hsla.exec(color);\n    if (match) {\n        return { h: match[1], s: match[2], l: match[3], a: match[4] };\n    }\n    match = matchers.hsv.exec(color);\n    if (match) {\n        return { h: match[1], s: match[2], v: match[3] };\n    }\n    match = matchers.hsva.exec(color);\n    if (match) {\n        return { h: match[1], s: match[2], v: match[3], a: match[4] };\n    }\n    match = matchers.hex8.exec(color);\n    if (match) {\n        return {\n            r: parseIntFromHex(match[1]),\n            g: parseIntFromHex(match[2]),\n            b: parseIntFromHex(match[3]),\n            a: convertHexToDecimal(match[4]),\n            format: named ? 'name' : 'hex8',\n        };\n    }\n    match = matchers.hex6.exec(color);\n    if (match) {\n        return {\n            r: parseIntFromHex(match[1]),\n            g: parseIntFromHex(match[2]),\n            b: parseIntFromHex(match[3]),\n            format: named ? 'name' : 'hex',\n        };\n    }\n    match = matchers.hex4.exec(color);\n    if (match) {\n        return {\n            r: parseIntFromHex(match[1] + match[1]),\n            g: parseIntFromHex(match[2] + match[2]),\n            b: parseIntFromHex(match[3] + match[3]),\n            a: convertHexToDecimal(match[4] + match[4]),\n            format: named ? 'name' : 'hex8',\n        };\n    }\n    match = matchers.hex3.exec(color);\n    if (match) {\n        return {\n            r: parseIntFromHex(match[1] + match[1]),\n            g: parseIntFromHex(match[2] + match[2]),\n            b: parseIntFromHex(match[3] + match[3]),\n            format: named ? 'name' : 'hex',\n        };\n    }\n    return false;\n}\n/**\n * Check to see if it looks like a CSS unit\n * (see `matchers` above for definition).\n */\nexport function isValidCSSUnit(color) {\n    return Boolean(matchers.CSS_UNIT.exec(String(color)));\n}\n","import { numberInputToObject, rgbaToHex, rgbToHex, rgbToHsl, rgbToHsv } from './conversion.js';\nimport { names } from './css-color-names.js';\nimport { inputToRGB } from './format-input';\nimport { bound01, boundAlpha, clamp01 } from './util.js';\nvar TinyColor = /** @class */ (function () {\n    function TinyColor(color, opts) {\n        if (color === void 0) { color = ''; }\n        if (opts === void 0) { opts = {}; }\n        var _a;\n        // If input is already a tinycolor, return itself\n        if (color instanceof TinyColor) {\n            // eslint-disable-next-line no-constructor-return\n            return color;\n        }\n        if (typeof color === 'number') {\n            color = numberInputToObject(color);\n        }\n        this.originalInput = color;\n        var rgb = inputToRGB(color);\n        this.originalInput = color;\n        this.r = rgb.r;\n        this.g = rgb.g;\n        this.b = rgb.b;\n        this.a = rgb.a;\n        this.roundA = Math.round(100 * this.a) / 100;\n        this.format = (_a = opts.format) !== null && _a !== void 0 ? _a : rgb.format;\n        this.gradientType = opts.gradientType;\n        // Don't let the range of [0,255] come back in [0,1].\n        // Potentially lose a little bit of precision here, but will fix issues where\n        // .5 gets interpreted as half of the total, instead of half of 1\n        // If it was supposed to be 128, this was already taken care of by `inputToRgb`\n        if (this.r < 1) {\n            this.r = Math.round(this.r);\n        }\n        if (this.g < 1) {\n            this.g = Math.round(this.g);\n        }\n        if (this.b < 1) {\n            this.b = Math.round(this.b);\n        }\n        this.isValid = rgb.ok;\n    }\n    TinyColor.prototype.isDark = function () {\n        return this.getBrightness() < 128;\n    };\n    TinyColor.prototype.isLight = function () {\n        return !this.isDark();\n    };\n    /**\n     * Returns the perceived brightness of the color, from 0-255.\n     */\n    TinyColor.prototype.getBrightness = function () {\n        // http://www.w3.org/TR/AERT#color-contrast\n        var rgb = this.toRgb();\n        return (rgb.r * 299 + rgb.g * 587 + rgb.b * 114) / 1000;\n    };\n    /**\n     * Returns the perceived luminance of a color, from 0-1.\n     */\n    TinyColor.prototype.getLuminance = function () {\n        // http://www.w3.org/TR/2008/REC-WCAG20-20081211/#relativeluminancedef\n        var rgb = this.toRgb();\n        var R;\n        var G;\n        var B;\n        var RsRGB = rgb.r / 255;\n        var GsRGB = rgb.g / 255;\n        var BsRGB = rgb.b / 255;\n        if (RsRGB <= 0.03928) {\n            R = RsRGB / 12.92;\n        }\n        else {\n            // eslint-disable-next-line prefer-exponentiation-operator\n            R = Math.pow((RsRGB + 0.055) / 1.055, 2.4);\n        }\n        if (GsRGB <= 0.03928) {\n            G = GsRGB / 12.92;\n        }\n        else {\n            // eslint-disable-next-line prefer-exponentiation-operator\n            G = Math.pow((GsRGB + 0.055) / 1.055, 2.4);\n        }\n        if (BsRGB <= 0.03928) {\n            B = BsRGB / 12.92;\n        }\n        else {\n            // eslint-disable-next-line prefer-exponentiation-operator\n            B = Math.pow((BsRGB + 0.055) / 1.055, 2.4);\n        }\n        return 0.2126 * R + 0.7152 * G + 0.0722 * B;\n    };\n    /**\n     * Returns the alpha value of a color, from 0-1.\n     */\n    TinyColor.prototype.getAlpha = function () {\n        return this.a;\n    };\n    /**\n     * Sets the alpha value on the current color.\n     *\n     * @param alpha - The new alpha value. The accepted range is 0-1.\n     */\n    TinyColor.prototype.setAlpha = function (alpha) {\n        this.a = boundAlpha(alpha);\n        this.roundA = Math.round(100 * this.a) / 100;\n        return this;\n    };\n    /**\n     * Returns whether the color is monochrome.\n     */\n    TinyColor.prototype.isMonochrome = function () {\n        var s = this.toHsl().s;\n        return s === 0;\n    };\n    /**\n     * Returns the object as a HSVA object.\n     */\n    TinyColor.prototype.toHsv = function () {\n        var hsv = rgbToHsv(this.r, this.g, this.b);\n        return { h: hsv.h * 360, s: hsv.s, v: hsv.v, a: this.a };\n    };\n    /**\n     * Returns the hsva values interpolated into a string with the following format:\n     * \"hsva(xxx, xxx, xxx, xx)\".\n     */\n    TinyColor.prototype.toHsvString = function () {\n        var hsv = rgbToHsv(this.r, this.g, this.b);\n        var h = Math.round(hsv.h * 360);\n        var s = Math.round(hsv.s * 100);\n        var v = Math.round(hsv.v * 100);\n        return this.a === 1 ? \"hsv(\".concat(h, \", \").concat(s, \"%, \").concat(v, \"%)\") : \"hsva(\".concat(h, \", \").concat(s, \"%, \").concat(v, \"%, \").concat(this.roundA, \")\");\n    };\n    /**\n     * Returns the object as a HSLA object.\n     */\n    TinyColor.prototype.toHsl = function () {\n        var hsl = rgbToHsl(this.r, this.g, this.b);\n        return { h: hsl.h * 360, s: hsl.s, l: hsl.l, a: this.a };\n    };\n    /**\n     * Returns the hsla values interpolated into a string with the following format:\n     * \"hsla(xxx, xxx, xxx, xx)\".\n     */\n    TinyColor.prototype.toHslString = function () {\n        var hsl = rgbToHsl(this.r, this.g, this.b);\n        var h = Math.round(hsl.h * 360);\n        var s = Math.round(hsl.s * 100);\n        var l = Math.round(hsl.l * 100);\n        return this.a === 1 ? \"hsl(\".concat(h, \", \").concat(s, \"%, \").concat(l, \"%)\") : \"hsla(\".concat(h, \", \").concat(s, \"%, \").concat(l, \"%, \").concat(this.roundA, \")\");\n    };\n    /**\n     * Returns the hex value of the color.\n     * @param allow3Char will shorten hex value to 3 char if possible\n     */\n    TinyColor.prototype.toHex = function (allow3Char) {\n        if (allow3Char === void 0) { allow3Char = false; }\n        return rgbToHex(this.r, this.g, this.b, allow3Char);\n    };\n    /**\n     * Returns the hex value of the color -with a # prefixed.\n     * @param allow3Char will shorten hex value to 3 char if possible\n     */\n    TinyColor.prototype.toHexString = function (allow3Char) {\n        if (allow3Char === void 0) { allow3Char = false; }\n        return '#' + this.toHex(allow3Char);\n    };\n    /**\n     * Returns the hex 8 value of the color.\n     * @param allow4Char will shorten hex value to 4 char if possible\n     */\n    TinyColor.prototype.toHex8 = function (allow4Char) {\n        if (allow4Char === void 0) { allow4Char = false; }\n        return rgbaToHex(this.r, this.g, this.b, this.a, allow4Char);\n    };\n    /**\n     * Returns the hex 8 value of the color -with a # prefixed.\n     * @param allow4Char will shorten hex value to 4 char if possible\n     */\n    TinyColor.prototype.toHex8String = function (allow4Char) {\n        if (allow4Char === void 0) { allow4Char = false; }\n        return '#' + this.toHex8(allow4Char);\n    };\n    /**\n     * Returns the shorter hex value of the color depends on its alpha -with a # prefixed.\n     * @param allowShortChar will shorten hex value to 3 or 4 char if possible\n     */\n    TinyColor.prototype.toHexShortString = function (allowShortChar) {\n        if (allowShortChar === void 0) { allowShortChar = false; }\n        return this.a === 1 ? this.toHexString(allowShortChar) : this.toHex8String(allowShortChar);\n    };\n    /**\n     * Returns the object as a RGBA object.\n     */\n    TinyColor.prototype.toRgb = function () {\n        return {\n            r: Math.round(this.r),\n            g: Math.round(this.g),\n            b: Math.round(this.b),\n            a: this.a,\n        };\n    };\n    /**\n     * Returns the RGBA values interpolated into a string with the following format:\n     * \"RGBA(xxx, xxx, xxx, xx)\".\n     */\n    TinyColor.prototype.toRgbString = function () {\n        var r = Math.round(this.r);\n        var g = Math.round(this.g);\n        var b = Math.round(this.b);\n        return this.a === 1 ? \"rgb(\".concat(r, \", \").concat(g, \", \").concat(b, \")\") : \"rgba(\".concat(r, \", \").concat(g, \", \").concat(b, \", \").concat(this.roundA, \")\");\n    };\n    /**\n     * Returns the object as a RGBA object.\n     */\n    TinyColor.prototype.toPercentageRgb = function () {\n        var fmt = function (x) { return \"\".concat(Math.round(bound01(x, 255) * 100), \"%\"); };\n        return {\n            r: fmt(this.r),\n            g: fmt(this.g),\n            b: fmt(this.b),\n            a: this.a,\n        };\n    };\n    /**\n     * Returns the RGBA relative values interpolated into a string\n     */\n    TinyColor.prototype.toPercentageRgbString = function () {\n        var rnd = function (x) { return Math.round(bound01(x, 255) * 100); };\n        return this.a === 1\n            ? \"rgb(\".concat(rnd(this.r), \"%, \").concat(rnd(this.g), \"%, \").concat(rnd(this.b), \"%)\")\n            : \"rgba(\".concat(rnd(this.r), \"%, \").concat(rnd(this.g), \"%, \").concat(rnd(this.b), \"%, \").concat(this.roundA, \")\");\n    };\n    /**\n     * The 'real' name of the color -if there is one.\n     */\n    TinyColor.prototype.toName = function () {\n        if (this.a === 0) {\n            return 'transparent';\n        }\n        if (this.a < 1) {\n            return false;\n        }\n        var hex = '#' + rgbToHex(this.r, this.g, this.b, false);\n        for (var _i = 0, _a = Object.entries(names); _i < _a.length; _i++) {\n            var _b = _a[_i], key = _b[0], value = _b[1];\n            if (hex === value) {\n                return key;\n            }\n        }\n        return false;\n    };\n    TinyColor.prototype.toString = function (format) {\n        var formatSet = Boolean(format);\n        format = format !== null && format !== void 0 ? format : this.format;\n        var formattedString = false;\n        var hasAlpha = this.a < 1 && this.a >= 0;\n        var needsAlphaFormat = !formatSet && hasAlpha && (format.startsWith('hex') || format === 'name');\n        if (needsAlphaFormat) {\n            // Special case for \"transparent\", all other non-alpha formats\n            // will return rgba when there is transparency.\n            if (format === 'name' && this.a === 0) {\n                return this.toName();\n            }\n            return this.toRgbString();\n        }\n        if (format === 'rgb') {\n            formattedString = this.toRgbString();\n        }\n        if (format === 'prgb') {\n            formattedString = this.toPercentageRgbString();\n        }\n        if (format === 'hex' || format === 'hex6') {\n            formattedString = this.toHexString();\n        }\n        if (format === 'hex3') {\n            formattedString = this.toHexString(true);\n        }\n        if (format === 'hex4') {\n            formattedString = this.toHex8String(true);\n        }\n        if (format === 'hex8') {\n            formattedString = this.toHex8String();\n        }\n        if (format === 'name') {\n            formattedString = this.toName();\n        }\n        if (format === 'hsl') {\n            formattedString = this.toHslString();\n        }\n        if (format === 'hsv') {\n            formattedString = this.toHsvString();\n        }\n        return formattedString || this.toHexString();\n    };\n    TinyColor.prototype.toNumber = function () {\n        return (Math.round(this.r) << 16) + (Math.round(this.g) << 8) + Math.round(this.b);\n    };\n    TinyColor.prototype.clone = function () {\n        return new TinyColor(this.toString());\n    };\n    /**\n     * Lighten the color a given amount. Providing 100 will always return white.\n     * @param amount - valid between 1-100\n     */\n    TinyColor.prototype.lighten = function (amount) {\n        if (amount === void 0) { amount = 10; }\n        var hsl = this.toHsl();\n        hsl.l += amount / 100;\n        hsl.l = clamp01(hsl.l);\n        return new TinyColor(hsl);\n    };\n    /**\n     * Brighten the color a given amount, from 0 to 100.\n     * @param amount - valid between 1-100\n     */\n    TinyColor.prototype.brighten = function (amount) {\n        if (amount === void 0) { amount = 10; }\n        var rgb = this.toRgb();\n        rgb.r = Math.max(0, Math.min(255, rgb.r - Math.round(255 * -(amount / 100))));\n        rgb.g = Math.max(0, Math.min(255, rgb.g - Math.round(255 * -(amount / 100))));\n        rgb.b = Math.max(0, Math.min(255, rgb.b - Math.round(255 * -(amount / 100))));\n        return new TinyColor(rgb);\n    };\n    /**\n     * Darken the color a given amount, from 0 to 100.\n     * Providing 100 will always return black.\n     * @param amount - valid between 1-100\n     */\n    TinyColor.prototype.darken = function (amount) {\n        if (amount === void 0) { amount = 10; }\n        var hsl = this.toHsl();\n        hsl.l -= amount / 100;\n        hsl.l = clamp01(hsl.l);\n        return new TinyColor(hsl);\n    };\n    /**\n     * Mix the color with pure white, from 0 to 100.\n     * Providing 0 will do nothing, providing 100 will always return white.\n     * @param amount - valid between 1-100\n     */\n    TinyColor.prototype.tint = function (amount) {\n        if (amount === void 0) { amount = 10; }\n        return this.mix('white', amount);\n    };\n    /**\n     * Mix the color with pure black, from 0 to 100.\n     * Providing 0 will do nothing, providing 100 will always return black.\n     * @param amount - valid between 1-100\n     */\n    TinyColor.prototype.shade = function (amount) {\n        if (amount === void 0) { amount = 10; }\n        return this.mix('black', amount);\n    };\n    /**\n     * Desaturate the color a given amount, from 0 to 100.\n     * Providing 100 will is the same as calling greyscale\n     * @param amount - valid between 1-100\n     */\n    TinyColor.prototype.desaturate = function (amount) {\n        if (amount === void 0) { amount = 10; }\n        var hsl = this.toHsl();\n        hsl.s -= amount / 100;\n        hsl.s = clamp01(hsl.s);\n        return new TinyColor(hsl);\n    };\n    /**\n     * Saturate the color a given amount, from 0 to 100.\n     * @param amount - valid between 1-100\n     */\n    TinyColor.prototype.saturate = function (amount) {\n        if (amount === void 0) { amount = 10; }\n        var hsl = this.toHsl();\n        hsl.s += amount / 100;\n        hsl.s = clamp01(hsl.s);\n        return new TinyColor(hsl);\n    };\n    /**\n     * Completely desaturates a color into greyscale.\n     * Same as calling `desaturate(100)`\n     */\n    TinyColor.prototype.greyscale = function () {\n        return this.desaturate(100);\n    };\n    /**\n     * Spin takes a positive or negative amount within [-360, 360] indicating the change of hue.\n     * Values outside of this range will be wrapped into this range.\n     */\n    TinyColor.prototype.spin = function (amount) {\n        var hsl = this.toHsl();\n        var hue = (hsl.h + amount) % 360;\n        hsl.h = hue < 0 ? 360 + hue : hue;\n        return new TinyColor(hsl);\n    };\n    /**\n     * Mix the current color a given amount with another color, from 0 to 100.\n     * 0 means no mixing (return current color).\n     */\n    TinyColor.prototype.mix = function (color, amount) {\n        if (amount === void 0) { amount = 50; }\n        var rgb1 = this.toRgb();\n        var rgb2 = new TinyColor(color).toRgb();\n        var p = amount / 100;\n        var rgba = {\n            r: (rgb2.r - rgb1.r) * p + rgb1.r,\n            g: (rgb2.g - rgb1.g) * p + rgb1.g,\n            b: (rgb2.b - rgb1.b) * p + rgb1.b,\n            a: (rgb2.a - rgb1.a) * p + rgb1.a,\n        };\n        return new TinyColor(rgba);\n    };\n    TinyColor.prototype.analogous = function (results, slices) {\n        if (results === void 0) { results = 6; }\n        if (slices === void 0) { slices = 30; }\n        var hsl = this.toHsl();\n        var part = 360 / slices;\n        var ret = [this];\n        for (hsl.h = (hsl.h - ((part * results) >> 1) + 720) % 360; --results;) {\n            hsl.h = (hsl.h + part) % 360;\n            ret.push(new TinyColor(hsl));\n        }\n        return ret;\n    };\n    /**\n     * taken from https://github.com/infusion/jQuery-xcolor/blob/master/jquery.xcolor.js\n     */\n    TinyColor.prototype.complement = function () {\n        var hsl = this.toHsl();\n        hsl.h = (hsl.h + 180) % 360;\n        return new TinyColor(hsl);\n    };\n    TinyColor.prototype.monochromatic = function (results) {\n        if (results === void 0) { results = 6; }\n        var hsv = this.toHsv();\n        var h = hsv.h;\n        var s = hsv.s;\n        var v = hsv.v;\n        var res = [];\n        var modification = 1 / results;\n        while (results--) {\n            res.push(new TinyColor({ h: h, s: s, v: v }));\n            v = (v + modification) % 1;\n        }\n        return res;\n    };\n    TinyColor.prototype.splitcomplement = function () {\n        var hsl = this.toHsl();\n        var h = hsl.h;\n        return [\n            this,\n            new TinyColor({ h: (h + 72) % 360, s: hsl.s, l: hsl.l }),\n            new TinyColor({ h: (h + 216) % 360, s: hsl.s, l: hsl.l }),\n        ];\n    };\n    /**\n     * Compute how the color would appear on a background\n     */\n    TinyColor.prototype.onBackground = function (background) {\n        var fg = this.toRgb();\n        var bg = new TinyColor(background).toRgb();\n        var alpha = fg.a + bg.a * (1 - fg.a);\n        return new TinyColor({\n            r: (fg.r * fg.a + bg.r * bg.a * (1 - fg.a)) / alpha,\n            g: (fg.g * fg.a + bg.g * bg.a * (1 - fg.a)) / alpha,\n            b: (fg.b * fg.a + bg.b * bg.a * (1 - fg.a)) / alpha,\n            a: alpha,\n        });\n    };\n    /**\n     * Alias for `polyad(3)`\n     */\n    TinyColor.prototype.triad = function () {\n        return this.polyad(3);\n    };\n    /**\n     * Alias for `polyad(4)`\n     */\n    TinyColor.prototype.tetrad = function () {\n        return this.polyad(4);\n    };\n    /**\n     * Get polyad colors, like (for 1, 2, 3, 4, 5, 6, 7, 8, etc...)\n     * monad, dyad, triad, tetrad, pentad, hexad, heptad, octad, etc...\n     */\n    TinyColor.prototype.polyad = function (n) {\n        var hsl = this.toHsl();\n        var h = hsl.h;\n        var result = [this];\n        var increment = 360 / n;\n        for (var i = 1; i < n; i++) {\n            result.push(new TinyColor({ h: (h + i * increment) % 360, s: hsl.s, l: hsl.l }));\n        }\n        return result;\n    };\n    /**\n     * compare color vs current color\n     */\n    TinyColor.prototype.equals = function (color) {\n        return this.toRgbString() === new TinyColor(color).toRgbString();\n    };\n    return TinyColor;\n}());\nexport { TinyColor };\n// kept for backwards compatability with v1\nexport function tinycolor(color, opts) {\n    if (color === void 0) { color = ''; }\n    if (opts === void 0) { opts = {}; }\n    return new TinyColor(color, opts);\n}\n","import { computed } from 'vue';\nimport { TinyColor } from '@ctrl/tinycolor';\nimport { useFormDisabled } from '../../form/src/hooks/use-form-common-props.mjs';\nimport { useNamespace } from '../../../hooks/use-namespace/index.mjs';\n\nfunction darken(color, amount = 20) {\n  return color.mix(\"#141414\", amount).toString();\n}\nfunction useButtonCustomStyle(props) {\n  const _disabled = useFormDisabled();\n  const ns = useNamespace(\"button\");\n  return computed(() => {\n    let styles = {};\n    let buttonColor = props.color;\n    if (buttonColor) {\n      const match = buttonColor.match(/var\\((.*?)\\)/);\n      if (match) {\n        buttonColor = window.getComputedStyle(window.document.documentElement).getPropertyValue(match[1]);\n      }\n      const color = new TinyColor(buttonColor);\n      const activeBgColor = props.dark ? color.tint(20).toString() : darken(color, 20);\n      if (props.plain) {\n        styles = ns.cssVarBlock({\n          \"bg-color\": props.dark ? darken(color, 90) : color.tint(90).toString(),\n          \"text-color\": buttonColor,\n          \"border-color\": props.dark ? darken(color, 50) : color.tint(50).toString(),\n          \"hover-text-color\": `var(${ns.cssVarName(\"color-white\")})`,\n          \"hover-bg-color\": buttonColor,\n          \"hover-border-color\": buttonColor,\n          \"active-bg-color\": activeBgColor,\n          \"active-text-color\": `var(${ns.cssVarName(\"color-white\")})`,\n          \"active-border-color\": activeBgColor\n        });\n        if (_disabled.value) {\n          styles[ns.cssVarBlockName(\"disabled-bg-color\")] = props.dark ? darken(color, 90) : color.tint(90).toString();\n          styles[ns.cssVarBlockName(\"disabled-text-color\")] = props.dark ? darken(color, 50) : color.tint(50).toString();\n          styles[ns.cssVarBlockName(\"disabled-border-color\")] = props.dark ? darken(color, 80) : color.tint(80).toString();\n        }\n      } else {\n        const hoverBgColor = props.dark ? darken(color, 30) : color.tint(30).toString();\n        const textColor = color.isDark() ? `var(${ns.cssVarName(\"color-white\")})` : `var(${ns.cssVarName(\"color-black\")})`;\n        styles = ns.cssVarBlock({\n          \"bg-color\": buttonColor,\n          \"text-color\": textColor,\n          \"border-color\": buttonColor,\n          \"hover-bg-color\": hoverBgColor,\n          \"hover-text-color\": textColor,\n          \"hover-border-color\": hoverBgColor,\n          \"active-bg-color\": activeBgColor,\n          \"active-border-color\": activeBgColor\n        });\n        if (_disabled.value) {\n          const disabledButtonColor = props.dark ? darken(color, 50) : color.tint(50).toString();\n          styles[ns.cssVarBlockName(\"disabled-bg-color\")] = disabledButtonColor;\n          styles[ns.cssVarBlockName(\"disabled-text-color\")] = props.dark ? \"rgba(255, 255, 255, 0.5)\" : `var(${ns.cssVarName(\"color-white\")})`;\n          styles[ns.cssVarBlockName(\"disabled-border-color\")] = disabledButtonColor;\n        }\n      }\n    }\n    return styles;\n  });\n}\n\nexport { darken, useButtonCustomStyle };\n//# sourceMappingURL=button-custom.mjs.map\n","import { defineComponent, computed, openBlock, createBlock, resolveDynamicComponent, mergeProps, unref, withCtx, createElementBlock, Fragment, renderSlot, normalizeClass, createCommentVNode } from 'vue';\nimport { ElIcon } from '../../icon/index.mjs';\nimport { useButton } from './use-button.mjs';\nimport { buttonProps, buttonEmits } from './button.mjs';\nimport { useButtonCustomStyle } from './button-custom.mjs';\nimport _export_sfc from '../../../_virtual/plugin-vue_export-helper.mjs';\nimport { useNamespace } from '../../../hooks/use-namespace/index.mjs';\n\nconst __default__ = defineComponent({\n  name: \"ElButton\"\n});\nconst _sfc_main = /* @__PURE__ */ defineComponent({\n  ...__default__,\n  props: buttonProps,\n  emits: buttonEmits,\n  setup(__props, { expose, emit }) {\n    const props = __props;\n    const buttonStyle = useButtonCustomStyle(props);\n    const ns = useNamespace(\"button\");\n    const {\n      _ref,\n      _size,\n      _type,\n      _disabled,\n      _props,\n      _plain,\n      _round,\n      _text,\n      shouldAddSpace,\n      handleClick\n    } = useButton(props, emit);\n    const buttonKls = computed(() => [\n      ns.b(),\n      ns.m(_type.value),\n      ns.m(_size.value),\n      ns.is(\"disabled\", _disabled.value),\n      ns.is(\"loading\", props.loading),\n      ns.is(\"plain\", _plain.value),\n      ns.is(\"round\", _round.value),\n      ns.is(\"circle\", props.circle),\n      ns.is(\"text\", _text.value),\n      ns.is(\"link\", props.link),\n      ns.is(\"has-bg\", props.bg)\n    ]);\n    expose({\n      ref: _ref,\n      size: _size,\n      type: _type,\n      disabled: _disabled,\n      shouldAddSpace\n    });\n    return (_ctx, _cache) => {\n      return openBlock(), createBlock(resolveDynamicComponent(_ctx.tag), mergeProps({\n        ref_key: \"_ref\",\n        ref: _ref\n      }, unref(_props), {\n        class: unref(buttonKls),\n        style: unref(buttonStyle),\n        onClick: unref(handleClick)\n      }), {\n        default: withCtx(() => [\n          _ctx.loading ? (openBlock(), createElementBlock(Fragment, { key: 0 }, [\n            _ctx.$slots.loading ? renderSlot(_ctx.$slots, \"loading\", { key: 0 }) : (openBlock(), createBlock(unref(ElIcon), {\n              key: 1,\n              class: normalizeClass(unref(ns).is(\"loading\"))\n            }, {\n              default: withCtx(() => [\n                (openBlock(), createBlock(resolveDynamicComponent(_ctx.loadingIcon)))\n              ]),\n              _: 1\n            }, 8, [\"class\"]))\n          ], 64)) : _ctx.icon || _ctx.$slots.icon ? (openBlock(), createBlock(unref(ElIcon), { key: 1 }, {\n            default: withCtx(() => [\n              _ctx.icon ? (openBlock(), createBlock(resolveDynamicComponent(_ctx.icon), { key: 0 })) : renderSlot(_ctx.$slots, \"icon\", { key: 1 })\n            ]),\n            _: 3\n          })) : createCommentVNode(\"v-if\", true),\n          _ctx.$slots.default ? (openBlock(), createElementBlock(\"span\", {\n            key: 2,\n            class: normalizeClass({ [unref(ns).em(\"text\", \"expand\")]: unref(shouldAddSpace) })\n          }, [\n            renderSlot(_ctx.$slots, \"default\")\n          ], 2)) : createCommentVNode(\"v-if\", true)\n        ]),\n        _: 3\n      }, 16, [\"class\", \"style\", \"onClick\"]);\n    };\n  }\n});\nvar Button = /* @__PURE__ */ _export_sfc(_sfc_main, [[\"__file\", \"button.vue\"]]);\n\nexport { Button as default };\n//# sourceMappingURL=button2.mjs.map\n","import { computed, inject, ref, useSlots, Text } from 'vue';\nimport { buttonGroupContextKey } from './constants.mjs';\nimport { useDeprecated } from '../../../hooks/use-deprecated/index.mjs';\nimport { useGlobalConfig } from '../../config-provider/src/hooks/use-global-config.mjs';\nimport { useFormItem } from '../../form/src/hooks/use-form-item.mjs';\nimport { useFormSize, useFormDisabled } from '../../form/src/hooks/use-form-common-props.mjs';\n\nconst useButton = (props, emit) => {\n  useDeprecated({\n    from: \"type.text\",\n    replacement: \"link\",\n    version: \"3.0.0\",\n    scope: \"props\",\n    ref: \"https://element-plus.org/en-US/component/button.html#button-attributes\"\n  }, computed(() => props.type === \"text\"));\n  const buttonGroupContext = inject(buttonGroupContextKey, void 0);\n  const globalConfig = useGlobalConfig(\"button\");\n  const { form } = useFormItem();\n  const _size = useFormSize(computed(() => buttonGroupContext == null ? void 0 : buttonGroupContext.size));\n  const _disabled = useFormDisabled();\n  const _ref = ref();\n  const slots = useSlots();\n  const _type = computed(() => {\n    var _a;\n    return props.type || (buttonGroupContext == null ? void 0 : buttonGroupContext.type) || ((_a = globalConfig.value) == null ? void 0 : _a.type) || \"\";\n  });\n  const autoInsertSpace = computed(() => {\n    var _a, _b, _c;\n    return (_c = (_b = props.autoInsertSpace) != null ? _b : (_a = globalConfig.value) == null ? void 0 : _a.autoInsertSpace) != null ? _c : false;\n  });\n  const _plain = computed(() => {\n    var _a, _b, _c;\n    return (_c = (_b = props.plain) != null ? _b : (_a = globalConfig.value) == null ? void 0 : _a.plain) != null ? _c : false;\n  });\n  const _round = computed(() => {\n    var _a, _b, _c;\n    return (_c = (_b = props.round) != null ? _b : (_a = globalConfig.value) == null ? void 0 : _a.round) != null ? _c : false;\n  });\n  const _text = computed(() => {\n    var _a, _b, _c;\n    return (_c = (_b = props.text) != null ? _b : (_a = globalConfig.value) == null ? void 0 : _a.text) != null ? _c : false;\n  });\n  const _props = computed(() => {\n    if (props.tag === \"button\") {\n      return {\n        ariaDisabled: _disabled.value || props.loading,\n        disabled: _disabled.value || props.loading,\n        autofocus: props.autofocus,\n        type: props.nativeType\n      };\n    }\n    return {};\n  });\n  const shouldAddSpace = computed(() => {\n    var _a;\n    const defaultSlot = (_a = slots.default) == null ? void 0 : _a.call(slots);\n    if (autoInsertSpace.value && (defaultSlot == null ? void 0 : defaultSlot.length) === 1) {\n      const slot = defaultSlot[0];\n      if ((slot == null ? void 0 : slot.type) === Text) {\n        const text = slot.children;\n        return /^\\p{Unified_Ideograph}{2}$/u.test(text.trim());\n      }\n    }\n    return false;\n  });\n  const handleClick = (evt) => {\n    if (_disabled.value || props.loading) {\n      evt.stopPropagation();\n      return;\n    }\n    if (props.nativeType === \"reset\") {\n      form == null ? void 0 : form.resetFields();\n    }\n    emit(\"click\", evt);\n  };\n  return {\n    _disabled,\n    _size,\n    _type,\n    _ref,\n    _props,\n    _plain,\n    _round,\n    _text,\n    shouldAddSpace,\n    handleClick\n  };\n};\n\nexport { useButton };\n//# sourceMappingURL=use-button.mjs.map\n","import { buttonProps } from './button.mjs';\n\nconst buttonGroupProps = {\n  size: buttonProps.size,\n  type: buttonProps.type\n};\n\nexport { buttonGroupProps };\n//# sourceMappingURL=button-group.mjs.map\n","import { defineComponent, provide, reactive, toRef, openBlock, createElementBlock, normalizeClass, unref, renderSlot } from 'vue';\nimport { buttonGroupProps } from './button-group.mjs';\nimport { buttonGroupContextKey } from './constants.mjs';\nimport _export_sfc from '../../../_virtual/plugin-vue_export-helper.mjs';\nimport { useNamespace } from '../../../hooks/use-namespace/index.mjs';\n\nconst __default__ = defineComponent({\n  name: \"ElButtonGroup\"\n});\nconst _sfc_main = /* @__PURE__ */ defineComponent({\n  ...__default__,\n  props: buttonGroupProps,\n  setup(__props) {\n    const props = __props;\n    provide(buttonGroupContextKey, reactive({\n      size: toRef(props, \"size\"),\n      type: toRef(props, \"type\")\n    }));\n    const ns = useNamespace(\"button\");\n    return (_ctx, _cache) => {\n      return openBlock(), createElementBlock(\"div\", {\n        class: normalizeClass(unref(ns).b(\"group\"))\n      }, [\n        renderSlot(_ctx.$slots, \"default\")\n      ], 2);\n    };\n  }\n});\nvar ButtonGroup = /* @__PURE__ */ _export_sfc(_sfc_main, [[\"__file\", \"button-group.vue\"]]);\n\nexport { ButtonGroup as default };\n//# sourceMappingURL=button-group2.mjs.map\n","import Button from './src/button2.mjs';\nimport ButtonGroup from './src/button-group2.mjs';\nexport { buttonEmits, buttonNativeTypes, buttonProps, buttonTypes } from './src/button.mjs';\nexport { buttonGroupContextKey } from './src/constants.mjs';\nimport { withInstall, withNoopInstall } from '../../utils/vue/install.mjs';\n\nconst ElButton = withInstall(Button, {\n  ButtonGroup\n});\nconst ElButtonGroup = withNoopInstall(ButtonGroup);\n\nexport { ElButton, ElButtonGroup, ElButton as default };\n//# sourceMappingURL=index.mjs.map\n","import { isVNode, Fragment, Text, Comment, openBlock, createBlock, createCommentVNode } from 'vue';\nimport { isArray, hasOwn, camelize } from '@vue/shared';\n\nvar PatchFlags = /* @__PURE__ */ ((PatchFlags2) => {\n  PatchFlags2[PatchFlags2[\"TEXT\"] = 1] = \"TEXT\";\n  PatchFlags2[PatchFlags2[\"CLASS\"] = 2] = \"CLASS\";\n  PatchFlags2[PatchFlags2[\"STYLE\"] = 4] = \"STYLE\";\n  PatchFlags2[PatchFlags2[\"PROPS\"] = 8] = \"PROPS\";\n  PatchFlags2[PatchFlags2[\"FULL_PROPS\"] = 16] = \"FULL_PROPS\";\n  PatchFlags2[PatchFlags2[\"HYDRATE_EVENTS\"] = 32] = \"HYDRATE_EVENTS\";\n  PatchFlags2[PatchFlags2[\"STABLE_FRAGMENT\"] = 64] = \"STABLE_FRAGMENT\";\n  PatchFlags2[PatchFlags2[\"KEYED_FRAGMENT\"] = 128] = \"KEYED_FRAGMENT\";\n  PatchFlags2[PatchFlags2[\"UNKEYED_FRAGMENT\"] = 256] = \"UNKEYED_FRAGMENT\";\n  PatchFlags2[PatchFlags2[\"NEED_PATCH\"] = 512] = \"NEED_PATCH\";\n  PatchFlags2[PatchFlags2[\"DYNAMIC_SLOTS\"] = 1024] = \"DYNAMIC_SLOTS\";\n  PatchFlags2[PatchFlags2[\"HOISTED\"] = -1] = \"HOISTED\";\n  PatchFlags2[PatchFlags2[\"BAIL\"] = -2] = \"BAIL\";\n  return PatchFlags2;\n})(PatchFlags || {});\nfunction isFragment(node) {\n  return isVNode(node) && node.type === Fragment;\n}\nfunction isText(node) {\n  return isVNode(node) && node.type === Text;\n}\nfunction isComment(node) {\n  return isVNode(node) && node.type === Comment;\n}\nconst TEMPLATE = \"template\";\nfunction isTemplate(node) {\n  return isVNode(node) && node.type === TEMPLATE;\n}\nfunction isValidElementNode(node) {\n  return isVNode(node) && !isFragment(node) && !isComment(node);\n}\nfunction getChildren(node, depth) {\n  if (isComment(node))\n    return;\n  if (isFragment(node) || isTemplate(node)) {\n    return depth > 0 ? getFirstValidNode(node.children, depth - 1) : void 0;\n  }\n  return node;\n}\nconst getFirstValidNode = (nodes, maxDepth = 3) => {\n  if (isArray(nodes)) {\n    return getChildren(nodes[0], maxDepth);\n  } else {\n    return getChildren(nodes, maxDepth);\n  }\n};\nfunction renderIf(condition, ...args) {\n  return condition ? renderBlock(...args) : createCommentVNode(\"v-if\", true);\n}\nfunction renderBlock(...args) {\n  return openBlock(), createBlock(...args);\n}\nconst getNormalizedProps = (node) => {\n  if (!isVNode(node)) {\n    return {};\n  }\n  const raw = node.props || {};\n  const type = (isVNode(node.type) ? node.type.props : void 0) || {};\n  const props = {};\n  Object.keys(type).forEach((key) => {\n    if (hasOwn(type[key], \"default\")) {\n      props[key] = type[key].default;\n    }\n  });\n  Object.keys(raw).forEach((key) => {\n    props[camelize(key)] = raw[key];\n  });\n  return props;\n};\nconst flattedChildren = (children) => {\n  const vNodes = isArray(children) ? children : [children];\n  const result = [];\n  vNodes.forEach((child) => {\n    var _a;\n    if (isArray(child)) {\n      result.push(...flattedChildren(child));\n    } else if (isVNode(child) && ((_a = child.component) == null ? void 0 : _a.subTree)) {\n      result.push(child, ...flattedChildren(child.component.subTree));\n    } else if (isVNode(child) && isArray(child.children)) {\n      result.push(...flattedChildren(child.children));\n    } else if (isVNode(child) && child.shapeFlag === 2) {\n      result.push(...flattedChildren(child.type()));\n    } else {\n      result.push(child);\n    }\n  });\n  return result;\n};\n\nexport { PatchFlags, flattedChildren, getFirstValidNode, getNormalizedProps, isComment, isFragment, isTemplate, isText, isValidElementNode, renderBlock, renderIf };\n//# sourceMappingURL=vnode.mjs.map\n","import { shallowRef, triggerRef, onMounted, defineComponent, h, isVNode } from 'vue';\nimport { flattedChildren } from '../../utils/vue/vnode.mjs';\n\nconst getOrderedChildren = (vm, childComponentName, children) => {\n  const nodes = flattedChildren(vm.subTree).filter((n) => {\n    var _a;\n    return isVNode(n) && ((_a = n.type) == null ? void 0 : _a.name) === childComponentName && !!n.component;\n  });\n  const uids = nodes.map((n) => n.component.uid);\n  return uids.map((uid) => children[uid]).filter((p) => !!p);\n};\nconst useOrderedChildren = (vm, childComponentName) => {\n  const children = shallowRef({});\n  const orderedChildren = shallowRef([]);\n  const nodesMap = /* @__PURE__ */ new WeakMap();\n  const addChild = (child) => {\n    children.value[child.uid] = child;\n    triggerRef(children);\n    onMounted(() => {\n      const childNode = child.getVnode().el;\n      const parentNode = childNode.parentNode;\n      if (!nodesMap.has(parentNode)) {\n        nodesMap.set(parentNode, []);\n        const originalFn = parentNode.insertBefore.bind(parentNode);\n        parentNode.insertBefore = (node, anchor) => {\n          const shouldSortChildren = nodesMap.get(parentNode).some((el) => node === el || anchor === el);\n          if (shouldSortChildren)\n            triggerRef(children);\n          return originalFn(node, anchor);\n        };\n      }\n      nodesMap.get(parentNode).push(childNode);\n    });\n  };\n  const removeChild = (child) => {\n    delete children.value[child.uid];\n    triggerRef(children);\n    const childNode = child.getVnode().el;\n    const parentNode = childNode.parentNode;\n    const childNodes = nodesMap.get(parentNode);\n    const index = childNodes.indexOf(childNode);\n    childNodes.splice(index, 1);\n  };\n  const sortChildren = () => {\n    orderedChildren.value = getOrderedChildren(vm, childComponentName, children.value);\n  };\n  const IsolatedRenderer = (props) => {\n    return props.render();\n  };\n  const ChildrenSorter = defineComponent({\n    setup(_, { slots }) {\n      return () => {\n        sortChildren();\n        return slots.default ? h(IsolatedRenderer, {\n          render: slots.default\n        }) : null;\n      };\n    }\n  });\n  return {\n    children: orderedChildren,\n    addChild,\n    removeChild,\n    ChildrenSorter\n  };\n};\n\nexport { useOrderedChildren };\n//# sourceMappingURL=index.mjs.map\n","import { useSizeProp } from '../../../hooks/use-size/index.mjs';\nimport { useAriaProps } from '../../../hooks/use-aria/index.mjs';\nimport { UPDATE_MODEL_EVENT } from '../../../constants/event.mjs';\nimport { isString } from '@vue/shared';\nimport { isNumber, isBoolean } from '../../../utils/types.mjs';\n\nconst checkboxProps = {\n  modelValue: {\n    type: [Number, String, Boolean],\n    default: void 0\n  },\n  label: {\n    type: [String, Boolean, Number, Object],\n    default: void 0\n  },\n  value: {\n    type: [String, Boolean, Number, Object],\n    default: void 0\n  },\n  indeterminate: Boolean,\n  disabled: Boolean,\n  checked: Boolean,\n  name: {\n    type: String,\n    default: void 0\n  },\n  trueValue: {\n    type: [String, Number],\n    default: void 0\n  },\n  falseValue: {\n    type: [String, Number],\n    default: void 0\n  },\n  trueLabel: {\n    type: [String, Number],\n    default: void 0\n  },\n  falseLabel: {\n    type: [String, Number],\n    default: void 0\n  },\n  id: {\n    type: String,\n    default: void 0\n  },\n  border: Boolean,\n  size: useSizeProp,\n  tabindex: [String, Number],\n  validateEvent: {\n    type: Boolean,\n    default: true\n  },\n  ...useAriaProps([\"ariaControls\"])\n};\nconst checkboxEmits = {\n  [UPDATE_MODEL_EVENT]: (val) => isString(val) || isNumber(val) || isBoolean(val),\n  change: (val) => isString(val) || isNumber(val) || isBoolean(val)\n};\n\nexport { checkboxEmits, checkboxProps };\n//# sourceMappingURL=checkbox2.mjs.map\n","const checkboxGroupContextKey = Symbol(\"checkboxGroupContextKey\");\n\nexport { checkboxGroupContextKey };\n//# sourceMappingURL=constants.mjs.map\n","import { inject, getCurrentInstance, computed, watch, nextTick } from 'vue';\nimport { checkboxGroupContextKey } from '../constants.mjs';\nimport { useFormItem } from '../../../form/src/hooks/use-form-item.mjs';\nimport { debugWarn } from '../../../../utils/error.mjs';\nimport { CHANGE_EVENT } from '../../../../constants/event.mjs';\n\nconst useCheckboxEvent = (props, {\n  model,\n  isLimitExceeded,\n  hasOwnLabel,\n  isDisabled,\n  isLabeledByFormItem\n}) => {\n  const checkboxGroup = inject(checkboxGroupContextKey, void 0);\n  const { formItem } = useFormItem();\n  const { emit } = getCurrentInstance();\n  function getLabeledValue(value) {\n    var _a, _b, _c, _d;\n    return [true, props.trueValue, props.trueLabel].includes(value) ? (_b = (_a = props.trueValue) != null ? _a : props.trueLabel) != null ? _b : true : (_d = (_c = props.falseValue) != null ? _c : props.falseLabel) != null ? _d : false;\n  }\n  function emitChangeEvent(checked, e) {\n    emit(CHANGE_EVENT, getLabeledValue(checked), e);\n  }\n  function handleChange(e) {\n    if (isLimitExceeded.value)\n      return;\n    const target = e.target;\n    emit(CHANGE_EVENT, getLabeledValue(target.checked), e);\n  }\n  async function onClickRoot(e) {\n    if (isLimitExceeded.value)\n      return;\n    if (!hasOwnLabel.value && !isDisabled.value && isLabeledByFormItem.value) {\n      const eventTargets = e.composedPath();\n      const hasLabel = eventTargets.some((item) => item.tagName === \"LABEL\");\n      if (!hasLabel) {\n        model.value = getLabeledValue([false, props.falseValue, props.falseLabel].includes(model.value));\n        await nextTick();\n        emitChangeEvent(model.value, e);\n      }\n    }\n  }\n  const validateEvent = computed(() => (checkboxGroup == null ? void 0 : checkboxGroup.validateEvent) || props.validateEvent);\n  watch(() => props.modelValue, () => {\n    if (validateEvent.value) {\n      formItem == null ? void 0 : formItem.validate(\"change\").catch((err) => debugWarn());\n    }\n  });\n  return {\n    handleChange,\n    onClickRoot\n  };\n};\n\nexport { useCheckboxEvent };\n//# sourceMappingURL=use-checkbox-event.mjs.map\n","import { computed } from 'vue';\nimport { useCheckboxDisabled } from './use-checkbox-disabled.mjs';\nimport { useCheckboxEvent } from './use-checkbox-event.mjs';\nimport { useCheckboxModel } from './use-checkbox-model.mjs';\nimport { useCheckboxStatus } from './use-checkbox-status.mjs';\nimport { useFormItem, useFormItemInputId } from '../../../form/src/hooks/use-form-item.mjs';\nimport { useDeprecated } from '../../../../hooks/use-deprecated/index.mjs';\nimport { isPropAbsent } from '../../../../utils/types.mjs';\nimport { isArray } from '@vue/shared';\n\nconst useCheckbox = (props, slots) => {\n  const { formItem: elFormItem } = useFormItem();\n  const { model, isGroup, isLimitExceeded } = useCheckboxModel(props);\n  const {\n    isFocused,\n    isChecked,\n    checkboxButtonSize,\n    checkboxSize,\n    hasOwnLabel,\n    actualValue\n  } = useCheckboxStatus(props, slots, { model });\n  const { isDisabled } = useCheckboxDisabled({ model, isChecked });\n  const { inputId, isLabeledByFormItem } = useFormItemInputId(props, {\n    formItemContext: elFormItem,\n    disableIdGeneration: hasOwnLabel,\n    disableIdManagement: isGroup\n  });\n  const { handleChange, onClickRoot } = useCheckboxEvent(props, {\n    model,\n    isLimitExceeded,\n    hasOwnLabel,\n    isDisabled,\n    isLabeledByFormItem\n  });\n  const setStoreValue = () => {\n    function addToStore() {\n      var _a, _b;\n      if (isArray(model.value) && !model.value.includes(actualValue.value)) {\n        model.value.push(actualValue.value);\n      } else {\n        model.value = (_b = (_a = props.trueValue) != null ? _a : props.trueLabel) != null ? _b : true;\n      }\n    }\n    props.checked && addToStore();\n  };\n  setStoreValue();\n  useDeprecated({\n    from: \"label act as value\",\n    replacement: \"value\",\n    version: \"3.0.0\",\n    scope: \"el-checkbox\",\n    ref: \"https://element-plus.org/en-US/component/checkbox.html\"\n  }, computed(() => isGroup.value && isPropAbsent(props.value)));\n  useDeprecated({\n    from: \"true-label\",\n    replacement: \"true-value\",\n    version: \"3.0.0\",\n    scope: \"el-checkbox\",\n    ref: \"https://element-plus.org/en-US/component/checkbox.html\"\n  }, computed(() => !!props.trueLabel));\n  useDeprecated({\n    from: \"false-label\",\n    replacement: \"false-value\",\n    version: \"3.0.0\",\n    scope: \"el-checkbox\",\n    ref: \"https://element-plus.org/en-US/component/checkbox.html\"\n  }, computed(() => !!props.falseLabel));\n  return {\n    inputId,\n    isLabeledByFormItem,\n    isChecked,\n    isDisabled,\n    isFocused,\n    checkboxButtonSize,\n    checkboxSize,\n    hasOwnLabel,\n    model,\n    actualValue,\n    handleChange,\n    onClickRoot\n  };\n};\n\nexport { useCheckbox };\n//# sourceMappingURL=use-checkbox.mjs.map\n","import { ref, getCurrentInstance, inject, computed } from 'vue';\nimport { checkboxGroupContextKey } from '../constants.mjs';\nimport { isUndefined } from '../../../../utils/types.mjs';\nimport { isArray } from '@vue/shared';\nimport { UPDATE_MODEL_EVENT } from '../../../../constants/event.mjs';\n\nconst useCheckboxModel = (props) => {\n  const selfModel = ref(false);\n  const { emit } = getCurrentInstance();\n  const checkboxGroup = inject(checkboxGroupContextKey, void 0);\n  const isGroup = computed(() => isUndefined(checkboxGroup) === false);\n  const isLimitExceeded = ref(false);\n  const model = computed({\n    get() {\n      var _a, _b;\n      return isGroup.value ? (_a = checkboxGroup == null ? void 0 : checkboxGroup.modelValue) == null ? void 0 : _a.value : (_b = props.modelValue) != null ? _b : selfModel.value;\n    },\n    set(val) {\n      var _a, _b;\n      if (isGroup.value && isArray(val)) {\n        isLimitExceeded.value = ((_a = checkboxGroup == null ? void 0 : checkboxGroup.max) == null ? void 0 : _a.value) !== void 0 && val.length > (checkboxGroup == null ? void 0 : checkboxGroup.max.value) && val.length > model.value.length;\n        isLimitExceeded.value === false && ((_b = checkboxGroup == null ? void 0 : checkboxGroup.changeEvent) == null ? void 0 : _b.call(checkboxGroup, val));\n      } else {\n        emit(UPDATE_MODEL_EVENT, val);\n        selfModel.value = val;\n      }\n    }\n  });\n  return {\n    model,\n    isGroup,\n    isLimitExceeded\n  };\n};\n\nexport { useCheckboxModel };\n//# sourceMappingURL=use-checkbox-model.mjs.map\n","import { inject, ref, computed, toRaw } from 'vue';\nimport { isEqual } from 'lodash-unified';\nimport { checkboxGroupContextKey } from '../constants.mjs';\nimport { isPropAbsent, isBoolean } from '../../../../utils/types.mjs';\nimport { isArray, isObject } from '@vue/shared';\nimport { useFormSize } from '../../../form/src/hooks/use-form-common-props.mjs';\n\nconst useCheckboxStatus = (props, slots, { model }) => {\n  const checkboxGroup = inject(checkboxGroupContextKey, void 0);\n  const isFocused = ref(false);\n  const actualValue = computed(() => {\n    if (!isPropAbsent(props.value)) {\n      return props.value;\n    }\n    return props.label;\n  });\n  const isChecked = computed(() => {\n    const value = model.value;\n    if (isBoolean(value)) {\n      return value;\n    } else if (isArray(value)) {\n      if (isObject(actualValue.value)) {\n        return value.map(toRaw).some((o) => isEqual(o, actualValue.value));\n      } else {\n        return value.map(toRaw).includes(actualValue.value);\n      }\n    } else if (value !== null && value !== void 0) {\n      return value === props.trueValue || value === props.trueLabel;\n    } else {\n      return !!value;\n    }\n  });\n  const checkboxButtonSize = useFormSize(computed(() => {\n    var _a;\n    return (_a = checkboxGroup == null ? void 0 : checkboxGroup.size) == null ? void 0 : _a.value;\n  }), {\n    prop: true\n  });\n  const checkboxSize = useFormSize(computed(() => {\n    var _a;\n    return (_a = checkboxGroup == null ? void 0 : checkboxGroup.size) == null ? void 0 : _a.value;\n  }));\n  const hasOwnLabel = computed(() => {\n    return !!slots.default || !isPropAbsent(actualValue.value);\n  });\n  return {\n    checkboxButtonSize,\n    isChecked,\n    isFocused,\n    checkboxSize,\n    hasOwnLabel,\n    actualValue\n  };\n};\n\nexport { useCheckboxStatus };\n//# sourceMappingURL=use-checkbox-status.mjs.map\n","import { inject, computed } from 'vue';\nimport { checkboxGroupContextKey } from '../constants.mjs';\nimport { isUndefined } from '../../../../utils/types.mjs';\nimport { useFormDisabled } from '../../../form/src/hooks/use-form-common-props.mjs';\n\nconst useCheckboxDisabled = ({\n  model,\n  isChecked\n}) => {\n  const checkboxGroup = inject(checkboxGroupContextKey, void 0);\n  const isLimitDisabled = computed(() => {\n    var _a, _b;\n    const max = (_a = checkboxGroup == null ? void 0 : checkboxGroup.max) == null ? void 0 : _a.value;\n    const min = (_b = checkboxGroup == null ? void 0 : checkboxGroup.min) == null ? void 0 : _b.value;\n    return !isUndefined(max) && model.value.length >= max && !isChecked.value || !isUndefined(min) && model.value.length <= min && isChecked.value;\n  });\n  const isDisabled = useFormDisabled(computed(() => (checkboxGroup == null ? void 0 : checkboxGroup.disabled.value) || isLimitDisabled.value));\n  return {\n    isDisabled,\n    isLimitDisabled\n  };\n};\n\nexport { useCheckboxDisabled };\n//# sourceMappingURL=use-checkbox-disabled.mjs.map\n","import { defineComponent, useSlots, computed, openBlock, createBlock, resolveDynamicComponent, unref, normalizeClass, withCtx, createElementVNode, withDirectives, mergeProps, isRef, withModifiers, vModelCheckbox, createElementBlock, renderSlot, Fragment, createTextVNode, toDisplayString, createCommentVNode } from 'vue';\nimport { checkboxProps, checkboxEmits } from './checkbox2.mjs';\nimport _export_sfc from '../../../_virtual/plugin-vue_export-helper.mjs';\nimport { useCheckbox } from './composables/use-checkbox.mjs';\nimport { useNamespace } from '../../../hooks/use-namespace/index.mjs';\n\nconst __default__ = defineComponent({\n  name: \"ElCheckbox\"\n});\nconst _sfc_main = /* @__PURE__ */ defineComponent({\n  ...__default__,\n  props: checkboxProps,\n  emits: checkboxEmits,\n  setup(__props) {\n    const props = __props;\n    const slots = useSlots();\n    const {\n      inputId,\n      isLabeledByFormItem,\n      isChecked,\n      isDisabled,\n      isFocused,\n      checkboxSize,\n      hasOwnLabel,\n      model,\n      actualValue,\n      handleChange,\n      onClickRoot\n    } = useCheckbox(props, slots);\n    const inputBindings = computed(() => {\n      var _a, _b, _c, _d;\n      if (props.trueValue || props.falseValue || props.trueLabel || props.falseLabel) {\n        return {\n          \"true-value\": (_b = (_a = props.trueValue) != null ? _a : props.trueLabel) != null ? _b : true,\n          \"false-value\": (_d = (_c = props.falseValue) != null ? _c : props.falseLabel) != null ? _d : false\n        };\n      }\n      return {\n        value: actualValue.value\n      };\n    });\n    const ns = useNamespace(\"checkbox\");\n    const compKls = computed(() => {\n      return [\n        ns.b(),\n        ns.m(checkboxSize.value),\n        ns.is(\"disabled\", isDisabled.value),\n        ns.is(\"bordered\", props.border),\n        ns.is(\"checked\", isChecked.value)\n      ];\n    });\n    const spanKls = computed(() => {\n      return [\n        ns.e(\"input\"),\n        ns.is(\"disabled\", isDisabled.value),\n        ns.is(\"checked\", isChecked.value),\n        ns.is(\"indeterminate\", props.indeterminate),\n        ns.is(\"focus\", isFocused.value)\n      ];\n    });\n    return (_ctx, _cache) => {\n      return openBlock(), createBlock(resolveDynamicComponent(!unref(hasOwnLabel) && unref(isLabeledByFormItem) ? \"span\" : \"label\"), {\n        class: normalizeClass(unref(compKls)),\n        \"aria-controls\": _ctx.indeterminate ? _ctx.ariaControls : null,\n        onClick: unref(onClickRoot)\n      }, {\n        default: withCtx(() => [\n          createElementVNode(\"span\", {\n            class: normalizeClass(unref(spanKls))\n          }, [\n            withDirectives(createElementVNode(\"input\", mergeProps({\n              id: unref(inputId),\n              \"onUpdate:modelValue\": ($event) => isRef(model) ? model.value = $event : null,\n              class: unref(ns).e(\"original\"),\n              type: \"checkbox\",\n              indeterminate: _ctx.indeterminate,\n              name: _ctx.name,\n              tabindex: _ctx.tabindex,\n              disabled: unref(isDisabled)\n            }, unref(inputBindings), {\n              onChange: unref(handleChange),\n              onFocus: ($event) => isFocused.value = true,\n              onBlur: ($event) => isFocused.value = false,\n              onClick: withModifiers(() => {\n              }, [\"stop\"])\n            }), null, 16, [\"id\", \"onUpdate:modelValue\", \"indeterminate\", \"name\", \"tabindex\", \"disabled\", \"onChange\", \"onFocus\", \"onBlur\", \"onClick\"]), [\n              [vModelCheckbox, unref(model)]\n            ]),\n            createElementVNode(\"span\", {\n              class: normalizeClass(unref(ns).e(\"inner\"))\n            }, null, 2)\n          ], 2),\n          unref(hasOwnLabel) ? (openBlock(), createElementBlock(\"span\", {\n            key: 0,\n            class: normalizeClass(unref(ns).e(\"label\"))\n          }, [\n            renderSlot(_ctx.$slots, \"default\"),\n            !_ctx.$slots.default ? (openBlock(), createElementBlock(Fragment, { key: 0 }, [\n              createTextVNode(toDisplayString(_ctx.label), 1)\n            ], 64)) : createCommentVNode(\"v-if\", true)\n          ], 2)) : createCommentVNode(\"v-if\", true)\n        ]),\n        _: 3\n      }, 8, [\"class\", \"aria-controls\", \"onClick\"]);\n    };\n  }\n});\nvar Checkbox = /* @__PURE__ */ _export_sfc(_sfc_main, [[\"__file\", \"checkbox.vue\"]]);\n\nexport { Checkbox as default };\n//# sourceMappingURL=checkbox.mjs.map\n","import { defineComponent, useSlots, computed, inject, openBlock, createElementBlock, normalizeClass, unref, withDirectives, createElementVNode, mergeProps, isRef, withModifiers, vModelCheckbox, normalizeStyle, renderSlot, createTextVNode, toDisplayString, createCommentVNode } from 'vue';\nimport { checkboxGroupContextKey } from './constants.mjs';\nimport { checkboxProps, checkboxEmits } from './checkbox2.mjs';\nimport _export_sfc from '../../../_virtual/plugin-vue_export-helper.mjs';\nimport { useCheckbox } from './composables/use-checkbox.mjs';\nimport { useNamespace } from '../../../hooks/use-namespace/index.mjs';\n\nconst __default__ = defineComponent({\n  name: \"ElCheckboxButton\"\n});\nconst _sfc_main = /* @__PURE__ */ defineComponent({\n  ...__default__,\n  props: checkboxProps,\n  emits: checkboxEmits,\n  setup(__props) {\n    const props = __props;\n    const slots = useSlots();\n    const {\n      isFocused,\n      isChecked,\n      isDisabled,\n      checkboxButtonSize,\n      model,\n      actualValue,\n      handleChange\n    } = useCheckbox(props, slots);\n    const inputBindings = computed(() => {\n      var _a, _b, _c, _d;\n      if (props.trueValue || props.falseValue || props.trueLabel || props.falseLabel) {\n        return {\n          \"true-value\": (_b = (_a = props.trueValue) != null ? _a : props.trueLabel) != null ? _b : true,\n          \"false-value\": (_d = (_c = props.falseValue) != null ? _c : props.falseLabel) != null ? _d : false\n        };\n      }\n      return {\n        value: actualValue.value\n      };\n    });\n    const checkboxGroup = inject(checkboxGroupContextKey, void 0);\n    const ns = useNamespace(\"checkbox\");\n    const activeStyle = computed(() => {\n      var _a, _b, _c, _d;\n      const fillValue = (_b = (_a = checkboxGroup == null ? void 0 : checkboxGroup.fill) == null ? void 0 : _a.value) != null ? _b : \"\";\n      return {\n        backgroundColor: fillValue,\n        borderColor: fillValue,\n        color: (_d = (_c = checkboxGroup == null ? void 0 : checkboxGroup.textColor) == null ? void 0 : _c.value) != null ? _d : \"\",\n        boxShadow: fillValue ? `-1px 0 0 0 ${fillValue}` : void 0\n      };\n    });\n    const labelKls = computed(() => {\n      return [\n        ns.b(\"button\"),\n        ns.bm(\"button\", checkboxButtonSize.value),\n        ns.is(\"disabled\", isDisabled.value),\n        ns.is(\"checked\", isChecked.value),\n        ns.is(\"focus\", isFocused.value)\n      ];\n    });\n    return (_ctx, _cache) => {\n      return openBlock(), createElementBlock(\"label\", {\n        class: normalizeClass(unref(labelKls))\n      }, [\n        withDirectives(createElementVNode(\"input\", mergeProps({\n          \"onUpdate:modelValue\": ($event) => isRef(model) ? model.value = $event : null,\n          class: unref(ns).be(\"button\", \"original\"),\n          type: \"checkbox\",\n          name: _ctx.name,\n          tabindex: _ctx.tabindex,\n          disabled: unref(isDisabled)\n        }, unref(inputBindings), {\n          onChange: unref(handleChange),\n          onFocus: ($event) => isFocused.value = true,\n          onBlur: ($event) => isFocused.value = false,\n          onClick: withModifiers(() => {\n          }, [\"stop\"])\n        }), null, 16, [\"onUpdate:modelValue\", \"name\", \"tabindex\", \"disabled\", \"onChange\", \"onFocus\", \"onBlur\", \"onClick\"]), [\n          [vModelCheckbox, unref(model)]\n        ]),\n        _ctx.$slots.default || _ctx.label ? (openBlock(), createElementBlock(\"span\", {\n          key: 0,\n          class: normalizeClass(unref(ns).be(\"button\", \"inner\")),\n          style: normalizeStyle(unref(isChecked) ? unref(activeStyle) : void 0)\n        }, [\n          renderSlot(_ctx.$slots, \"default\", {}, () => [\n            createTextVNode(toDisplayString(_ctx.label), 1)\n          ])\n        ], 6)) : createCommentVNode(\"v-if\", true)\n      ], 2);\n    };\n  }\n});\nvar CheckboxButton = /* @__PURE__ */ _export_sfc(_sfc_main, [[\"__file\", \"checkbox-button.vue\"]]);\n\nexport { CheckboxButton as default };\n//# sourceMappingURL=checkbox-button.mjs.map\n","import { buildProps, definePropType } from '../../../utils/vue/props/runtime.mjs';\nimport { useSizeProp } from '../../../hooks/use-size/index.mjs';\nimport { useAriaProps } from '../../../hooks/use-aria/index.mjs';\nimport { UPDATE_MODEL_EVENT } from '../../../constants/event.mjs';\nimport { isArray } from '@vue/shared';\n\nconst checkboxGroupProps = buildProps({\n  modelValue: {\n    type: definePropType(Array),\n    default: () => []\n  },\n  disabled: Boolean,\n  min: Number,\n  max: Number,\n  size: useSizeProp,\n  fill: String,\n  textColor: String,\n  tag: {\n    type: String,\n    default: \"div\"\n  },\n  validateEvent: {\n    type: Boolean,\n    default: true\n  },\n  options: {\n    type: definePropType(Array)\n  },\n  props: {\n    type: definePropType(Object),\n    default: () => checkboxDefaultProps\n  },\n  ...useAriaProps([\"ariaLabel\"])\n});\nconst checkboxGroupEmits = {\n  [UPDATE_MODEL_EVENT]: (val) => isArray(val),\n  change: (val) => isArray(val)\n};\nconst checkboxDefaultProps = {\n  label: \"label\",\n  value: \"value\",\n  disabled: \"disabled\"\n};\n\nexport { checkboxDefaultProps, checkboxGroupEmits, checkboxGroupProps };\n//# sourceMappingURL=checkbox-group.mjs.map\n","import { defineComponent, computed, provide, toRefs, watch, openBlock, createBlock, resolveDynamicComponent, unref, normalizeClass, withCtx, renderSlot, createElementBlock, Fragment, renderList, mergeProps, nextTick } from 'vue';\nimport { pick, isEqual } from 'lodash-unified';\nimport { checkboxGroupProps, checkboxGroupEmits, checkboxDefaultProps } from './checkbox-group.mjs';\nimport { checkboxGroupContextKey } from './constants.mjs';\nimport Checkbox from './checkbox.mjs';\nimport _export_sfc from '../../../_virtual/plugin-vue_export-helper.mjs';\nimport { useNamespace } from '../../../hooks/use-namespace/index.mjs';\nimport { useFormItem, useFormItemInputId } from '../../form/src/hooks/use-form-item.mjs';\nimport { debugWarn } from '../../../utils/error.mjs';\nimport { UPDATE_MODEL_EVENT, CHANGE_EVENT } from '../../../constants/event.mjs';\n\nconst __default__ = defineComponent({\n  name: \"ElCheckboxGroup\"\n});\nconst _sfc_main = /* @__PURE__ */ defineComponent({\n  ...__default__,\n  props: checkboxGroupProps,\n  emits: checkboxGroupEmits,\n  setup(__props, { emit }) {\n    const props = __props;\n    const ns = useNamespace(\"checkbox\");\n    const { formItem } = useFormItem();\n    const { inputId: groupId, isLabeledByFormItem } = useFormItemInputId(props, {\n      formItemContext: formItem\n    });\n    const changeEvent = async (value) => {\n      emit(UPDATE_MODEL_EVENT, value);\n      await nextTick();\n      emit(CHANGE_EVENT, value);\n    };\n    const modelValue = computed({\n      get() {\n        return props.modelValue;\n      },\n      set(val) {\n        changeEvent(val);\n      }\n    });\n    const aliasProps = computed(() => ({\n      ...checkboxDefaultProps,\n      ...props.props\n    }));\n    const getOptionProps = (option) => {\n      const base = {\n        label: option[aliasProps.value.label],\n        value: option[aliasProps.value.value],\n        disabled: option[aliasProps.value.disabled]\n      };\n      return { ...option, ...base };\n    };\n    provide(checkboxGroupContextKey, {\n      ...pick(toRefs(props), [\n        \"size\",\n        \"min\",\n        \"max\",\n        \"disabled\",\n        \"validateEvent\",\n        \"fill\",\n        \"textColor\"\n      ]),\n      modelValue,\n      changeEvent\n    });\n    watch(() => props.modelValue, (newVal, oldValue) => {\n      if (props.validateEvent && !isEqual(newVal, oldValue)) {\n        formItem == null ? void 0 : formItem.validate(\"change\").catch((err) => debugWarn());\n      }\n    });\n    return (_ctx, _cache) => {\n      var _a;\n      return openBlock(), createBlock(resolveDynamicComponent(_ctx.tag), {\n        id: unref(groupId),\n        class: normalizeClass(unref(ns).b(\"group\")),\n        role: \"group\",\n        \"aria-label\": !unref(isLabeledByFormItem) ? _ctx.ariaLabel || \"checkbox-group\" : void 0,\n        \"aria-labelledby\": unref(isLabeledByFormItem) ? (_a = unref(formItem)) == null ? void 0 : _a.labelId : void 0\n      }, {\n        default: withCtx(() => [\n          renderSlot(_ctx.$slots, \"default\", {}, () => [\n            (openBlock(true), createElementBlock(Fragment, null, renderList(props.options, (item, index) => {\n              return openBlock(), createBlock(Checkbox, mergeProps({ key: index }, getOptionProps(item)), null, 16);\n            }), 128))\n          ])\n        ]),\n        _: 3\n      }, 8, [\"id\", \"class\", \"aria-label\", \"aria-labelledby\"]);\n    };\n  }\n});\nvar CheckboxGroup = /* @__PURE__ */ _export_sfc(_sfc_main, [[\"__file\", \"checkbox-group.vue\"]]);\n\nexport { CheckboxGroup as default };\n//# sourceMappingURL=checkbox-group2.mjs.map\n","import Checkbox from './src/checkbox.mjs';\nimport CheckboxButton from './src/checkbox-button.mjs';\nimport CheckboxGroup from './src/checkbox-group2.mjs';\nexport { checkboxDefaultProps, checkboxGroupEmits, checkboxGroupProps } from './src/checkbox-group.mjs';\nexport { checkboxEmits, checkboxProps } from './src/checkbox2.mjs';\nexport { checkboxGroupContextKey } from './src/constants.mjs';\nimport { withInstall, withNoopInstall } from '../../utils/vue/install.mjs';\n\nconst ElCheckbox = withInstall(Checkbox, {\n  CheckboxButton,\n  CheckboxGroup\n});\nconst ElCheckboxButton = withNoopInstall(CheckboxButton);\nconst ElCheckboxGroup = withNoopInstall(CheckboxGroup);\n\nexport { ElCheckbox, ElCheckboxButton, ElCheckboxGroup, ElCheckbox as default };\n//# sourceMappingURL=index.mjs.map\n","import { isClient } from '@vueuse/core';\nimport { isArray } from '@vue/shared';\nimport { isElement } from '../../utils/types.mjs';\n\nconst nodeList = /* @__PURE__ */ new Map();\nif (isClient) {\n  let startClick;\n  document.addEventListener(\"mousedown\", (e) => startClick = e);\n  document.addEventListener(\"mouseup\", (e) => {\n    if (startClick) {\n      for (const handlers of nodeList.values()) {\n        for (const { documentHandler } of handlers) {\n          documentHandler(e, startClick);\n        }\n      }\n      startClick = void 0;\n    }\n  });\n}\nfunction createDocumentHandler(el, binding) {\n  let excludes = [];\n  if (isArray(binding.arg)) {\n    excludes = binding.arg;\n  } else if (isElement(binding.arg)) {\n    excludes.push(binding.arg);\n  }\n  return function(mouseup, mousedown) {\n    const popperRef = binding.instance.popperRef;\n    const mouseUpTarget = mouseup.target;\n    const mouseDownTarget = mousedown == null ? void 0 : mousedown.target;\n    const isBound = !binding || !binding.instance;\n    const isTargetExists = !mouseUpTarget || !mouseDownTarget;\n    const isContainedByEl = el.contains(mouseUpTarget) || el.contains(mouseDownTarget);\n    const isSelf = el === mouseUpTarget;\n    const isTargetExcluded = excludes.length && excludes.some((item) => item == null ? void 0 : item.contains(mouseUpTarget)) || excludes.length && excludes.includes(mouseDownTarget);\n    const isContainedByPopper = popperRef && (popperRef.contains(mouseUpTarget) || popperRef.contains(mouseDownTarget));\n    if (isBound || isTargetExists || isContainedByEl || isSelf || isTargetExcluded || isContainedByPopper) {\n      return;\n    }\n    binding.value(mouseup, mousedown);\n  };\n}\nconst ClickOutside = {\n  beforeMount(el, binding) {\n    if (!nodeList.has(el)) {\n      nodeList.set(el, []);\n    }\n    nodeList.get(el).push({\n      documentHandler: createDocumentHandler(el, binding),\n      bindingFn: binding.value\n    });\n  },\n  updated(el, binding) {\n    if (!nodeList.has(el)) {\n      nodeList.set(el, []);\n    }\n    const handlers = nodeList.get(el);\n    const oldHandlerIndex = handlers.findIndex((item) => item.bindingFn === binding.oldValue);\n    const newHandler = {\n      documentHandler: createDocumentHandler(el, binding),\n      bindingFn: binding.value\n    };\n    if (oldHandlerIndex >= 0) {\n      handlers.splice(oldHandlerIndex, 1, newHandler);\n    } else {\n      handlers.push(newHandler);\n    }\n  },\n  unmounted(el) {\n    nodeList.delete(el);\n  }\n};\n\nexport { ClickOutside as default };\n//# sourceMappingURL=index.mjs.map\n","import { buildProps, definePropType } from '../../../utils/vue/props/runtime.mjs';\nimport { mutable } from '../../../utils/typescript.mjs';\nimport { isNumber } from '../../../utils/types.mjs';\nimport { isString, isArray } from '@vue/shared';\nimport { UPDATE_MODEL_EVENT, CHANGE_EVENT } from '../../../constants/event.mjs';\n\nconst emitChangeFn = (value) => isNumber(value) || isString(value) || isArray(value);\nconst collapseProps = buildProps({\n  accordion: Boolean,\n  modelValue: {\n    type: definePropType([Array, String, Number]),\n    default: () => mutable([])\n  },\n  expandIconPosition: {\n    type: definePropType([String]),\n    default: \"right\"\n  },\n  beforeCollapse: {\n    type: definePropType(Function)\n  }\n});\nconst collapseEmits = {\n  [UPDATE_MODEL_EVENT]: emitChangeFn,\n  [CHANGE_EVENT]: emitChangeFn\n};\n\nexport { collapseEmits, collapseProps, emitChangeFn };\n//# sourceMappingURL=collapse.mjs.map\n","const collapseContextKey = Symbol(\"collapseContextKey\");\n\nexport { collapseContextKey };\n//# sourceMappingURL=constants.mjs.map\n","import { defineComponent, openBlock, createElementBlock, normalizeClass, unref, renderSlot } from 'vue';\nimport { collapseProps, collapseEmits } from './collapse.mjs';\nimport { useCollapse, useCollapseDOM } from './use-collapse.mjs';\nimport _export_sfc from '../../../_virtual/plugin-vue_export-helper.mjs';\n\nconst __default__ = defineComponent({\n  name: \"ElCollapse\"\n});\nconst _sfc_main = /* @__PURE__ */ defineComponent({\n  ...__default__,\n  props: collapseProps,\n  emits: collapseEmits,\n  setup(__props, { expose, emit }) {\n    const props = __props;\n    const { activeNames, setActiveNames } = useCollapse(props, emit);\n    const { rootKls } = useCollapseDOM(props);\n    expose({\n      activeNames,\n      setActiveNames\n    });\n    return (_ctx, _cache) => {\n      return openBlock(), createElementBlock(\"div\", {\n        class: normalizeClass(unref(rootKls))\n      }, [\n        renderSlot(_ctx.$slots, \"default\")\n      ], 2);\n    };\n  }\n});\nvar Collapse = /* @__PURE__ */ _export_sfc(_sfc_main, [[\"__file\", \"collapse.vue\"]]);\n\nexport { Collapse as default };\n//# sourceMappingURL=collapse2.mjs.map\n","import { ref, watch, provide, computed } from 'vue';\nimport { collapseContextKey } from './constants.mjs';\nimport { castArray } from 'lodash-unified';\nimport { UPDATE_MODEL_EVENT, CHANGE_EVENT } from '../../../constants/event.mjs';\nimport { useNamespace } from '../../../hooks/use-namespace/index.mjs';\nimport { isPromise } from '@vue/shared';\nimport { isBoolean } from '../../../utils/types.mjs';\nimport { throwError } from '../../../utils/error.mjs';\n\nconst SCOPE = \"ElCollapse\";\nconst useCollapse = (props, emit) => {\n  const activeNames = ref(castArray(props.modelValue));\n  const setActiveNames = (_activeNames) => {\n    activeNames.value = _activeNames;\n    const value = props.accordion ? activeNames.value[0] : activeNames.value;\n    emit(UPDATE_MODEL_EVENT, value);\n    emit(CHANGE_EVENT, value);\n  };\n  const handleChange = (name) => {\n    if (props.accordion) {\n      setActiveNames([activeNames.value[0] === name ? \"\" : name]);\n    } else {\n      const _activeNames = [...activeNames.value];\n      const index = _activeNames.indexOf(name);\n      if (index > -1) {\n        _activeNames.splice(index, 1);\n      } else {\n        _activeNames.push(name);\n      }\n      setActiveNames(_activeNames);\n    }\n  };\n  const handleItemClick = async (name) => {\n    const { beforeCollapse } = props;\n    if (!beforeCollapse) {\n      handleChange(name);\n      return;\n    }\n    const shouldChange = beforeCollapse(name);\n    const isPromiseOrBool = [\n      isPromise(shouldChange),\n      isBoolean(shouldChange)\n    ].includes(true);\n    if (!isPromiseOrBool) {\n      throwError(SCOPE, \"beforeCollapse must return type `Promise<boolean>` or `boolean`\");\n    }\n    if (isPromise(shouldChange)) {\n      shouldChange.then((result) => {\n        if (result !== false) {\n          handleChange(name);\n        }\n      }).catch((e) => {\n      });\n    } else if (shouldChange) {\n      handleChange(name);\n    }\n  };\n  watch(() => props.modelValue, () => activeNames.value = castArray(props.modelValue), { deep: true });\n  provide(collapseContextKey, {\n    activeNames,\n    handleItemClick\n  });\n  return {\n    activeNames,\n    setActiveNames\n  };\n};\nconst useCollapseDOM = (props) => {\n  const ns = useNamespace(\"collapse\");\n  const rootKls = computed(() => [\n    ns.b(),\n    ns.b(`icon-position-${props.expandIconPosition}`)\n  ]);\n  return {\n    rootKls\n  };\n};\n\nexport { useCollapse, useCollapseDOM };\n//# sourceMappingURL=use-collapse.mjs.map\n","import { defineComponent, openBlock, createBlock, Transition, mergeProps, unref, toHandlers, withCtx, renderSlot } from 'vue';\nimport _export_sfc from '../../../_virtual/plugin-vue_export-helper.mjs';\nimport { useNamespace } from '../../../hooks/use-namespace/index.mjs';\n\nconst __default__ = defineComponent({\n  name: \"ElCollapseTransition\"\n});\nconst _sfc_main = /* @__PURE__ */ defineComponent({\n  ...__default__,\n  setup(__props) {\n    const ns = useNamespace(\"collapse-transition\");\n    const reset = (el) => {\n      el.style.maxHeight = \"\";\n      el.style.overflow = el.dataset.oldOverflow;\n      el.style.paddingTop = el.dataset.oldPaddingTop;\n      el.style.paddingBottom = el.dataset.oldPaddingBottom;\n    };\n    const on = {\n      beforeEnter(el) {\n        if (!el.dataset)\n          el.dataset = {};\n        el.dataset.oldPaddingTop = el.style.paddingTop;\n        el.dataset.oldPaddingBottom = el.style.paddingBottom;\n        if (el.style.height)\n          el.dataset.elExistsHeight = el.style.height;\n        el.style.maxHeight = 0;\n        el.style.paddingTop = 0;\n        el.style.paddingBottom = 0;\n      },\n      enter(el) {\n        requestAnimationFrame(() => {\n          el.dataset.oldOverflow = el.style.overflow;\n          if (el.dataset.elExistsHeight) {\n            el.style.maxHeight = el.dataset.elExistsHeight;\n          } else if (el.scrollHeight !== 0) {\n            el.style.maxHeight = `${el.scrollHeight}px`;\n          } else {\n            el.style.maxHeight = 0;\n          }\n          el.style.paddingTop = el.dataset.oldPaddingTop;\n          el.style.paddingBottom = el.dataset.oldPaddingBottom;\n          el.style.overflow = \"hidden\";\n        });\n      },\n      afterEnter(el) {\n        el.style.maxHeight = \"\";\n        el.style.overflow = el.dataset.oldOverflow;\n      },\n      enterCancelled(el) {\n        reset(el);\n      },\n      beforeLeave(el) {\n        if (!el.dataset)\n          el.dataset = {};\n        el.dataset.oldPaddingTop = el.style.paddingTop;\n        el.dataset.oldPaddingBottom = el.style.paddingBottom;\n        el.dataset.oldOverflow = el.style.overflow;\n        el.style.maxHeight = `${el.scrollHeight}px`;\n        el.style.overflow = \"hidden\";\n      },\n      leave(el) {\n        if (el.scrollHeight !== 0) {\n          el.style.maxHeight = 0;\n          el.style.paddingTop = 0;\n          el.style.paddingBottom = 0;\n        }\n      },\n      afterLeave(el) {\n        reset(el);\n      },\n      leaveCancelled(el) {\n        reset(el);\n      }\n    };\n    return (_ctx, _cache) => {\n      return openBlock(), createBlock(Transition, mergeProps({\n        name: unref(ns).b()\n      }, toHandlers(on)), {\n        default: withCtx(() => [\n          renderSlot(_ctx.$slots, \"default\")\n        ]),\n        _: 3\n      }, 16, [\"name\"]);\n    };\n  }\n});\nvar CollapseTransition = /* @__PURE__ */ _export_sfc(_sfc_main, [[\"__file\", \"collapse-transition.vue\"]]);\n\nexport { CollapseTransition as default };\n//# sourceMappingURL=collapse-transition.mjs.map\n","import CollapseTransition from './src/collapse-transition.mjs';\nimport { withInstall } from '../../utils/vue/install.mjs';\n\nconst ElCollapseTransition = withInstall(CollapseTransition);\n\nexport { ElCollapseTransition, ElCollapseTransition as default };\n//# sourceMappingURL=index.mjs.map\n","import { ArrowRight } from '@element-plus/icons-vue';\nimport { buildProps, definePropType } from '../../../utils/vue/props/runtime.mjs';\nimport { iconPropType } from '../../../utils/vue/icon.mjs';\n\nconst collapseItemProps = buildProps({\n  title: {\n    type: String,\n    default: \"\"\n  },\n  name: {\n    type: definePropType([String, Number]),\n    default: void 0\n  },\n  icon: {\n    type: iconPropType,\n    default: ArrowRight\n  },\n  disabled: Boolean\n});\n\nexport { collapseItemProps };\n//# sourceMappingURL=collapse-item.mjs.map\n","import { defineComponent, openBlock, createElementBlock, normalizeClass, unref, createElementVNode, withKeys, withModifiers, renderSlot, createTextVNode, toDisplayString, createVNode, withCtx, createBlock, resolveDynamicComponent, withDirectives, vShow } from 'vue';\nimport { ElCollapseTransition } from '../../collapse-transition/index.mjs';\nimport { ElIcon } from '../../icon/index.mjs';\nimport { collapseItemProps } from './collapse-item.mjs';\nimport { useCollapseItem, useCollapseItemDOM } from './use-collapse-item.mjs';\nimport _export_sfc from '../../../_virtual/plugin-vue_export-helper.mjs';\n\nconst __default__ = defineComponent({\n  name: \"ElCollapseItem\"\n});\nconst _sfc_main = /* @__PURE__ */ defineComponent({\n  ...__default__,\n  props: collapseItemProps,\n  setup(__props, { expose }) {\n    const props = __props;\n    const {\n      focusing,\n      id,\n      isActive,\n      handleFocus,\n      handleHeaderClick,\n      handleEnterClick\n    } = useCollapseItem(props);\n    const {\n      arrowKls,\n      headKls,\n      rootKls,\n      itemTitleKls,\n      itemWrapperKls,\n      itemContentKls,\n      scopedContentId,\n      scopedHeadId\n    } = useCollapseItemDOM(props, { focusing, isActive, id });\n    expose({\n      isActive\n    });\n    return (_ctx, _cache) => {\n      return openBlock(), createElementBlock(\"div\", {\n        class: normalizeClass(unref(rootKls))\n      }, [\n        createElementVNode(\"div\", {\n          id: unref(scopedHeadId),\n          class: normalizeClass(unref(headKls)),\n          \"aria-expanded\": unref(isActive),\n          \"aria-controls\": unref(scopedContentId),\n          \"aria-describedby\": unref(scopedContentId),\n          tabindex: _ctx.disabled ? -1 : 0,\n          role: \"button\",\n          onClick: unref(handleHeaderClick),\n          onKeydown: withKeys(withModifiers(unref(handleEnterClick), [\"stop\"]), [\"space\", \"enter\"]),\n          onFocus: unref(handleFocus),\n          onBlur: ($event) => focusing.value = false\n        }, [\n          createElementVNode(\"span\", {\n            class: normalizeClass(unref(itemTitleKls))\n          }, [\n            renderSlot(_ctx.$slots, \"title\", { isActive: unref(isActive) }, () => [\n              createTextVNode(toDisplayString(_ctx.title), 1)\n            ])\n          ], 2),\n          renderSlot(_ctx.$slots, \"icon\", { isActive: unref(isActive) }, () => [\n            createVNode(unref(ElIcon), {\n              class: normalizeClass(unref(arrowKls))\n            }, {\n              default: withCtx(() => [\n                (openBlock(), createBlock(resolveDynamicComponent(_ctx.icon)))\n              ]),\n              _: 1\n            }, 8, [\"class\"])\n          ])\n        ], 42, [\"id\", \"aria-expanded\", \"aria-controls\", \"aria-describedby\", \"tabindex\", \"onClick\", \"onKeydown\", \"onFocus\", \"onBlur\"]),\n        createVNode(unref(ElCollapseTransition), null, {\n          default: withCtx(() => [\n            withDirectives(createElementVNode(\"div\", {\n              id: unref(scopedContentId),\n              role: \"region\",\n              class: normalizeClass(unref(itemWrapperKls)),\n              \"aria-hidden\": !unref(isActive),\n              \"aria-labelledby\": unref(scopedHeadId)\n            }, [\n              createElementVNode(\"div\", {\n                class: normalizeClass(unref(itemContentKls))\n              }, [\n                renderSlot(_ctx.$slots, \"default\")\n              ], 2)\n            ], 10, [\"id\", \"aria-hidden\", \"aria-labelledby\"]), [\n              [vShow, unref(isActive)]\n            ])\n          ]),\n          _: 3\n        })\n      ], 2);\n    };\n  }\n});\nvar CollapseItem = /* @__PURE__ */ _export_sfc(_sfc_main, [[\"__file\", \"collapse-item.vue\"]]);\n\nexport { CollapseItem as default };\n//# sourceMappingURL=collapse-item2.mjs.map\n","import { inject, ref, computed, unref } from 'vue';\nimport { collapseContextKey } from './constants.mjs';\nimport { useIdInjection } from '../../../hooks/use-id/index.mjs';\nimport { useNamespace } from '../../../hooks/use-namespace/index.mjs';\n\nconst useCollapseItem = (props) => {\n  const collapse = inject(collapseContextKey);\n  const { namespace } = useNamespace(\"collapse\");\n  const focusing = ref(false);\n  const isClick = ref(false);\n  const idInjection = useIdInjection();\n  const id = computed(() => idInjection.current++);\n  const name = computed(() => {\n    var _a;\n    return (_a = props.name) != null ? _a : `${namespace.value}-id-${idInjection.prefix}-${unref(id)}`;\n  });\n  const isActive = computed(() => collapse == null ? void 0 : collapse.activeNames.value.includes(unref(name)));\n  const handleFocus = () => {\n    setTimeout(() => {\n      if (!isClick.value) {\n        focusing.value = true;\n      } else {\n        isClick.value = false;\n      }\n    }, 50);\n  };\n  const handleHeaderClick = (e) => {\n    if (props.disabled)\n      return;\n    const target = e.target;\n    if (target == null ? void 0 : target.closest(\"input, textarea, select\"))\n      return;\n    collapse == null ? void 0 : collapse.handleItemClick(unref(name));\n    focusing.value = false;\n    isClick.value = true;\n  };\n  const handleEnterClick = (e) => {\n    const target = e.target;\n    if (target == null ? void 0 : target.closest(\"input, textarea, select\"))\n      return;\n    e.preventDefault();\n    collapse == null ? void 0 : collapse.handleItemClick(unref(name));\n  };\n  return {\n    focusing,\n    id,\n    isActive,\n    handleFocus,\n    handleHeaderClick,\n    handleEnterClick\n  };\n};\nconst useCollapseItemDOM = (props, { focusing, isActive, id }) => {\n  const ns = useNamespace(\"collapse\");\n  const rootKls = computed(() => [\n    ns.b(\"item\"),\n    ns.is(\"active\", unref(isActive)),\n    ns.is(\"disabled\", props.disabled)\n  ]);\n  const headKls = computed(() => [\n    ns.be(\"item\", \"header\"),\n    ns.is(\"active\", unref(isActive)),\n    { focusing: unref(focusing) && !props.disabled }\n  ]);\n  const arrowKls = computed(() => [\n    ns.be(\"item\", \"arrow\"),\n    ns.is(\"active\", unref(isActive))\n  ]);\n  const itemTitleKls = computed(() => [ns.be(\"item\", \"title\")]);\n  const itemWrapperKls = computed(() => ns.be(\"item\", \"wrap\"));\n  const itemContentKls = computed(() => ns.be(\"item\", \"content\"));\n  const scopedContentId = computed(() => ns.b(`content-${unref(id)}`));\n  const scopedHeadId = computed(() => ns.b(`head-${unref(id)}`));\n  return {\n    itemTitleKls,\n    arrowKls,\n    headKls,\n    rootKls,\n    itemWrapperKls,\n    itemContentKls,\n    scopedContentId,\n    scopedHeadId\n  };\n};\n\nexport { useCollapseItem, useCollapseItemDOM };\n//# sourceMappingURL=use-collapse-item.mjs.map\n","import Collapse from './src/collapse2.mjs';\nimport CollapseItem from './src/collapse-item2.mjs';\nexport { collapseEmits, collapseProps, emitChangeFn } from './src/collapse.mjs';\nexport { collapseItemProps } from './src/collapse-item.mjs';\nexport { collapseContextKey } from './src/constants.mjs';\nimport { withInstall, withNoopInstall } from '../../utils/vue/install.mjs';\n\nconst ElCollapse = withInstall(Collapse, {\n  CollapseItem\n});\nconst ElCollapseItem = withNoopInstall(CollapseItem);\n\nexport { ElCollapse, ElCollapseItem, ElCollapse as default };\n//# sourceMappingURL=index.mjs.map\n","import { useEmptyValuesProps } from '../../../hooks/use-empty-values/index.mjs';\nimport { buildProps, definePropType } from '../../../utils/vue/props/runtime.mjs';\nimport { useSizeProp } from '../../../hooks/use-size/index.mjs';\n\nconst configProviderProps = buildProps({\n  a11y: {\n    type: Boolean,\n    default: true\n  },\n  locale: {\n    type: definePropType(Object)\n  },\n  size: useSizeProp,\n  button: {\n    type: definePropType(Object)\n  },\n  card: {\n    type: definePropType(Object)\n  },\n  dialog: {\n    type: definePropType(Object)\n  },\n  link: {\n    type: definePropType(Object)\n  },\n  experimentalFeatures: {\n    type: definePropType(Object)\n  },\n  keyboardNavigation: {\n    type: Boolean,\n    default: true\n  },\n  message: {\n    type: definePropType(Object)\n  },\n  zIndex: Number,\n  namespace: {\n    type: String,\n    default: \"el\"\n  },\n  ...useEmptyValuesProps\n});\n\nexport { configProviderProps };\n//# sourceMappingURL=config-provider-props.mjs.map\n","import { defineComponent, watch, renderSlot } from 'vue';\nimport { provideGlobalConfig } from './hooks/use-global-config.mjs';\nimport { configProviderProps } from './config-provider-props.mjs';\n\nconst messageConfig = {\n  placement: \"top\"\n};\nconst ConfigProvider = defineComponent({\n  name: \"ElConfigProvider\",\n  props: configProviderProps,\n  setup(props, { slots }) {\n    const config = provideGlobalConfig(props);\n    watch(() => props.message, (val) => {\n      var _a, _b;\n      Object.assign(messageConfig, (_b = (_a = config == null ? void 0 : config.value) == null ? void 0 : _a.message) != null ? _b : {}, val != null ? val : {});\n    }, { immediate: true, deep: true });\n    return () => renderSlot(slots, \"default\", { config: config == null ? void 0 : config.value });\n  }\n});\n\nexport { ConfigProvider as default, messageConfig };\n//# sourceMappingURL=config-provider.mjs.map\n","import { NOOP } from '@vue/shared';\n\nconst useSameTarget = (handleClick) => {\n  if (!handleClick) {\n    return { onClick: NOOP, onMousedown: NOOP, onMouseup: NOOP };\n  }\n  let mousedownTarget = false;\n  let mouseupTarget = false;\n  const onClick = (e) => {\n    if (mousedownTarget && mouseupTarget) {\n      handleClick(e);\n    }\n    mousedownTarget = mouseupTarget = false;\n  };\n  const onMousedown = (e) => {\n    mousedownTarget = e.target === e.currentTarget;\n  };\n  const onMouseup = (e) => {\n    mouseupTarget = e.target === e.currentTarget;\n  };\n  return { onClick, onMousedown, onMouseup };\n};\n\nexport { useSameTarget };\n//# sourceMappingURL=index.mjs.map\n","import { defineComponent, createVNode, renderSlot, h } from 'vue';\nimport { useSameTarget } from '../../../hooks/use-same-target/index.mjs';\nimport { PatchFlags } from '../../../utils/vue/vnode.mjs';\nimport { buildProps, definePropType } from '../../../utils/vue/props/runtime.mjs';\nimport { useNamespace } from '../../../hooks/use-namespace/index.mjs';\n\nconst overlayProps = buildProps({\n  mask: {\n    type: Boolean,\n    default: true\n  },\n  customMaskEvent: Boolean,\n  overlayClass: {\n    type: definePropType([\n      String,\n      Array,\n      Object\n    ])\n  },\n  zIndex: {\n    type: definePropType([String, Number])\n  }\n});\nconst overlayEmits = {\n  click: (evt) => evt instanceof MouseEvent\n};\nconst BLOCK = \"overlay\";\nvar Overlay = defineComponent({\n  name: \"ElOverlay\",\n  props: overlayProps,\n  emits: overlayEmits,\n  setup(props, { slots, emit }) {\n    const ns = useNamespace(BLOCK);\n    const onMaskClick = (e) => {\n      emit(\"click\", e);\n    };\n    const { onClick, onMousedown, onMouseup } = useSameTarget(props.customMaskEvent ? void 0 : onMaskClick);\n    return () => {\n      return props.mask ? createVNode(\"div\", {\n        class: [ns.b(), props.overlayClass],\n        style: {\n          zIndex: props.zIndex\n        },\n        onClick,\n        onMousedown,\n        onMouseup\n      }, [renderSlot(slots, \"default\")], PatchFlags.STYLE | PatchFlags.CLASS | PatchFlags.PROPS, [\"onClick\", \"onMouseup\", \"onMousedown\"]) : h(\"div\", {\n        class: props.overlayClass,\n        style: {\n          zIndex: props.zIndex,\n          position: \"fixed\",\n          top: \"0px\",\n          right: \"0px\",\n          bottom: \"0px\",\n          left: \"0px\"\n        }\n      }, [renderSlot(slots, \"default\")]);\n    };\n  }\n});\n\nexport { Overlay as default, overlayEmits, overlayProps };\n//# sourceMappingURL=overlay.mjs.map\n","import Overlay from './src/overlay.mjs';\nexport { overlayEmits, overlayProps } from './src/overlay.mjs';\n\nconst ElOverlay = Overlay;\n\nexport { ElOverlay, ElOverlay as default };\n//# sourceMappingURL=index.mjs.map\n","const dialogInjectionKey = Symbol(\"dialogInjectionKey\");\nconst DEFAULT_DIALOG_TRANSITION = \"dialog-fade\";\n\nexport { DEFAULT_DIALOG_TRANSITION, dialogInjectionKey };\n//# sourceMappingURL=constants.mjs.map\n","import { buildProps } from '../../../utils/vue/props/runtime.mjs';\nimport { iconPropType } from '../../../utils/vue/icon.mjs';\n\nconst dialogContentProps = buildProps({\n  center: Boolean,\n  alignCenter: {\n    type: Boolean,\n    default: void 0\n  },\n  closeIcon: {\n    type: iconPropType\n  },\n  draggable: {\n    type: Boolean,\n    default: void 0\n  },\n  overflow: {\n    type: Boolean,\n    default: void 0\n  },\n  fullscreen: Boolean,\n  headerClass: String,\n  bodyClass: String,\n  footerClass: String,\n  showClose: {\n    type: Boolean,\n    default: true\n  },\n  title: {\n    type: String,\n    default: \"\"\n  },\n  ariaLevel: {\n    type: String,\n    default: \"2\"\n  }\n});\nconst dialogContentEmits = {\n  close: () => true\n};\n\nexport { dialogContentEmits, dialogContentProps };\n//# sourceMappingURL=dialog-content.mjs.map\n","import { dialogContentProps } from './dialog-content.mjs';\nimport { buildProps, definePropType } from '../../../utils/vue/props/runtime.mjs';\nimport { teleportProps } from '../../teleport/src/teleport.mjs';\nimport { UPDATE_MODEL_EVENT } from '../../../constants/event.mjs';\nimport { isBoolean } from '../../../utils/types.mjs';\n\nconst dialogProps = buildProps({\n  ...dialogContentProps,\n  appendToBody: Boolean,\n  appendTo: {\n    type: teleportProps.to.type,\n    default: \"body\"\n  },\n  beforeClose: {\n    type: definePropType(Function)\n  },\n  destroyOnClose: Boolean,\n  closeOnClickModal: {\n    type: Boolean,\n    default: true\n  },\n  closeOnPressEscape: {\n    type: Boolean,\n    default: true\n  },\n  lockScroll: {\n    type: Boolean,\n    default: true\n  },\n  modal: {\n    type: Boolean,\n    default: true\n  },\n  modalPenetrable: Boolean,\n  openDelay: {\n    type: Number,\n    default: 0\n  },\n  closeDelay: {\n    type: Number,\n    default: 0\n  },\n  top: {\n    type: String\n  },\n  modelValue: Boolean,\n  modalClass: String,\n  headerClass: String,\n  bodyClass: String,\n  footerClass: String,\n  width: {\n    type: [String, Number]\n  },\n  zIndex: {\n    type: Number\n  },\n  trapFocus: Boolean,\n  headerAriaLevel: {\n    type: String,\n    default: \"2\"\n  },\n  transition: {\n    type: definePropType([String, Object]),\n    default: void 0\n  }\n});\nconst dialogEmits = {\n  open: () => true,\n  opened: () => true,\n  close: () => true,\n  closed: () => true,\n  [UPDATE_MODEL_EVENT]: (value) => isBoolean(value),\n  openAutoFocus: () => true,\n  closeAutoFocus: () => true\n};\nconst dialogContextKey = Symbol(\"dialogContextKey\");\n\nexport { dialogContextKey, dialogEmits, dialogProps };\n//# sourceMappingURL=dialog.mjs.map\n","import { isRef, computed, watch, onScopeDispose } from 'vue';\nimport { useNamespace } from '../use-namespace/index.mjs';\nimport { throwError } from '../../utils/error.mjs';\nimport { isClient } from '@vueuse/core';\nimport { hasClass, addClass, getStyle, removeClass } from '../../utils/dom/style.mjs';\nimport { getScrollBarWidth } from '../../utils/dom/scroll.mjs';\n\nconst useLockscreen = (trigger, options = {}) => {\n  if (!isRef(trigger)) {\n    throwError(\"[useLockscreen]\", \"You need to pass a ref param to this function\");\n  }\n  const ns = options.ns || useNamespace(\"popup\");\n  const hiddenCls = computed(() => ns.bm(\"parent\", \"hidden\"));\n  if (!isClient || hasClass(document.body, hiddenCls.value)) {\n    return;\n  }\n  let scrollBarWidth = 0;\n  let withoutHiddenClass = false;\n  let bodyWidth = \"0\";\n  const cleanup = () => {\n    setTimeout(() => {\n      if (typeof document === \"undefined\")\n        return;\n      if (withoutHiddenClass && document) {\n        document.body.style.width = bodyWidth;\n        removeClass(document.body, hiddenCls.value);\n      }\n    }, 200);\n  };\n  watch(trigger, (val) => {\n    if (!val) {\n      cleanup();\n      return;\n    }\n    withoutHiddenClass = !hasClass(document.body, hiddenCls.value);\n    if (withoutHiddenClass) {\n      bodyWidth = document.body.style.width;\n      addClass(document.body, hiddenCls.value);\n    }\n    scrollBarWidth = getScrollBarWidth(ns.namespace.value);\n    const bodyHasOverflow = document.documentElement.clientHeight < document.body.scrollHeight;\n    const bodyOverflowY = getStyle(document.body, \"overflowY\");\n    if (scrollBarWidth > 0 && (bodyHasOverflow || bodyOverflowY === \"scroll\") && withoutHiddenClass) {\n      document.body.style.width = `calc(100% - ${scrollBarWidth}px)`;\n    }\n  });\n  onScopeDispose(() => cleanup());\n};\n\nexport { useLockscreen };\n//# sourceMappingURL=index.mjs.map\n","import { dialogProps, dialogEmits } from '../../dialog/src/dialog.mjs';\nimport { buildProps } from '../../../utils/vue/props/runtime.mjs';\n\nconst drawerProps = buildProps({\n  ...dialogProps,\n  direction: {\n    type: String,\n    default: \"rtl\",\n    values: [\"ltr\", \"rtl\", \"ttb\", \"btt\"]\n  },\n  resizable: Boolean,\n  size: {\n    type: [String, Number],\n    default: \"30%\"\n  },\n  withHeader: {\n    type: Boolean,\n    default: true\n  },\n  modalFade: {\n    type: Boolean,\n    default: true\n  },\n  headerAriaLevel: {\n    type: String,\n    default: \"2\"\n  }\n});\nconst drawerEmits = dialogEmits;\n\nexport { drawerEmits, drawerProps };\n//# sourceMappingURL=drawer.mjs.map\n","import { computed, ref, watch, onBeforeUnmount } from 'vue';\nimport { useWindowSize, clamp, useEventListener } from '@vueuse/core';\nimport { addUnit } from '../../../../utils/dom/style.mjs';\n\nfunction useResizable(props, target) {\n  const { width, height } = useWindowSize();\n  const isHorizontal = computed(() => [\"ltr\", \"rtl\"].includes(props.direction));\n  const sign = computed(() => [\"ltr\", \"ttb\"].includes(props.direction) ? 1 : -1);\n  const windowSize = computed(() => isHorizontal.value ? width.value : height.value);\n  const getSize = computed(() => {\n    return clamp(startSize.value + sign.value * offset.value, 4, windowSize.value);\n  });\n  const startSize = ref(0);\n  const offset = ref(0);\n  const isResizing = ref(false);\n  const hasStartedDragging = ref(false);\n  let startPos = [];\n  let cleanups = [];\n  const getActualSize = () => {\n    var _a;\n    const drawerEl = (_a = target.value) == null ? void 0 : _a.closest('[aria-modal=\"true\"]');\n    if (drawerEl) {\n      return isHorizontal.value ? drawerEl.offsetWidth : drawerEl.offsetHeight;\n    }\n    return 100;\n  };\n  watch(() => [props.size, props.resizable], () => {\n    hasStartedDragging.value = false;\n    startSize.value = 0;\n    offset.value = 0;\n    onMouseUp();\n  });\n  const onMousedown = (e) => {\n    if (!props.resizable)\n      return;\n    if (!hasStartedDragging.value) {\n      startSize.value = getActualSize();\n      hasStartedDragging.value = true;\n    }\n    startPos = [e.pageX, e.pageY];\n    isResizing.value = true;\n    cleanups.push(useEventListener(window, \"mouseup\", onMouseUp), useEventListener(window, \"mousemove\", onMouseMove));\n  };\n  const onMouseMove = (e) => {\n    const { pageX, pageY } = e;\n    const offsetX = pageX - startPos[0];\n    const offsetY = pageY - startPos[1];\n    offset.value = isHorizontal.value ? offsetX : offsetY;\n  };\n  const onMouseUp = () => {\n    startPos = [];\n    startSize.value = getSize.value;\n    offset.value = 0;\n    isResizing.value = false;\n    cleanups.forEach((cleanup2) => cleanup2 == null ? void 0 : cleanup2());\n    cleanups = [];\n  };\n  const cleanup = useEventListener(target, \"mousedown\", onMousedown);\n  onBeforeUnmount(() => {\n    cleanup();\n    onMouseUp();\n  });\n  return {\n    size: computed(() => {\n      return hasStartedDragging.value ? `${getSize.value}px` : addUnit(props.size);\n    }),\n    isResizing,\n    isHorizontal\n  };\n}\n\nexport { useResizable };\n//# sourceMappingURL=useResizable.mjs.map\n","import { defineComponent, useSlots, computed, ref, openBlock, createBlock, unref, withCtx, createVNode, Transition, withDirectives, createElementVNode, mergeProps, withModifiers, normalizeClass, createElementBlock, renderSlot, toDisplayString, createCommentVNode, normalizeStyle, vShow } from 'vue';\nimport { Close } from '@element-plus/icons-vue';\nimport { ElOverlay } from '../../overlay/index.mjs';\nimport ElFocusTrap from '../../focus-trap/src/focus-trap.mjs';\nimport { ElTeleport } from '../../teleport/index.mjs';\nimport { ElIcon } from '../../icon/index.mjs';\nimport { drawerProps, drawerEmits } from './drawer.mjs';\nimport { useResizable } from './composables/useResizable.mjs';\nimport _export_sfc from '../../../_virtual/plugin-vue_export-helper.mjs';\nimport { useDialog } from '../../dialog/src/use-dialog.mjs';\nimport { useDeprecated } from '../../../hooks/use-deprecated/index.mjs';\nimport { useNamespace } from '../../../hooks/use-namespace/index.mjs';\nimport { useLocale } from '../../../hooks/use-locale/index.mjs';\n\nconst __default__ = defineComponent({\n  name: \"ElDrawer\",\n  inheritAttrs: false\n});\nconst _sfc_main = /* @__PURE__ */ defineComponent({\n  ...__default__,\n  props: drawerProps,\n  emits: drawerEmits,\n  setup(__props, { expose }) {\n    const props = __props;\n    const slots = useSlots();\n    useDeprecated({\n      scope: \"el-drawer\",\n      from: \"the title slot\",\n      replacement: \"the header slot\",\n      version: \"3.0.0\",\n      ref: \"https://element-plus.org/en-US/component/drawer.html#slots\"\n    }, computed(() => !!slots.title));\n    const drawerRef = ref();\n    const focusStartRef = ref();\n    const draggerRef = ref();\n    const ns = useNamespace(\"drawer\");\n    const { t } = useLocale();\n    const {\n      afterEnter,\n      afterLeave,\n      beforeLeave,\n      visible,\n      rendered,\n      titleId,\n      bodyId,\n      zIndex,\n      onModalClick,\n      onOpenAutoFocus,\n      onCloseAutoFocus,\n      onFocusoutPrevented,\n      onCloseRequested,\n      handleClose\n    } = useDialog(props, drawerRef);\n    const { isHorizontal, size, isResizing } = useResizable(props, draggerRef);\n    expose({\n      handleClose,\n      afterEnter,\n      afterLeave\n    });\n    return (_ctx, _cache) => {\n      return openBlock(), createBlock(unref(ElTeleport), {\n        to: _ctx.appendTo,\n        disabled: _ctx.appendTo !== \"body\" ? false : !_ctx.appendToBody\n      }, {\n        default: withCtx(() => [\n          createVNode(Transition, {\n            name: unref(ns).b(\"fade\"),\n            onAfterEnter: unref(afterEnter),\n            onAfterLeave: unref(afterLeave),\n            onBeforeLeave: unref(beforeLeave),\n            persisted: \"\"\n          }, {\n            default: withCtx(() => {\n              var _a;\n              return [\n                withDirectives(createVNode(unref(ElOverlay), {\n                  mask: _ctx.modal,\n                  \"overlay-class\": [unref(ns).is(\"drawer\"), (_a = _ctx.modalClass) != null ? _a : \"\"],\n                  \"z-index\": unref(zIndex),\n                  onClick: unref(onModalClick)\n                }, {\n                  default: withCtx(() => [\n                    createVNode(unref(ElFocusTrap), {\n                      loop: \"\",\n                      trapped: unref(visible),\n                      \"focus-trap-el\": drawerRef.value,\n                      \"focus-start-el\": focusStartRef.value,\n                      onFocusAfterTrapped: unref(onOpenAutoFocus),\n                      onFocusAfterReleased: unref(onCloseAutoFocus),\n                      onFocusoutPrevented: unref(onFocusoutPrevented),\n                      onReleaseRequested: unref(onCloseRequested)\n                    }, {\n                      default: withCtx(() => [\n                        createElementVNode(\"div\", mergeProps({\n                          ref_key: \"drawerRef\",\n                          ref: drawerRef,\n                          \"aria-modal\": \"true\",\n                          \"aria-label\": _ctx.title || void 0,\n                          \"aria-labelledby\": !_ctx.title ? unref(titleId) : void 0,\n                          \"aria-describedby\": unref(bodyId)\n                        }, _ctx.$attrs, {\n                          class: [\n                            unref(ns).b(),\n                            _ctx.direction,\n                            unref(visible) && \"open\",\n                            unref(ns).is(\"dragging\", unref(isResizing))\n                          ],\n                          style: { [unref(isHorizontal) ? \"width\" : \"height\"]: unref(size) },\n                          role: \"dialog\",\n                          onClick: withModifiers(() => {\n                          }, [\"stop\"])\n                        }), [\n                          createElementVNode(\"span\", {\n                            ref_key: \"focusStartRef\",\n                            ref: focusStartRef,\n                            class: normalizeClass(unref(ns).e(\"sr-focus\")),\n                            tabindex: \"-1\"\n                          }, null, 2),\n                          _ctx.withHeader ? (openBlock(), createElementBlock(\"header\", {\n                            key: 0,\n                            class: normalizeClass([unref(ns).e(\"header\"), _ctx.headerClass])\n                          }, [\n                            !_ctx.$slots.title ? renderSlot(_ctx.$slots, \"header\", {\n                              key: 0,\n                              close: unref(handleClose),\n                              titleId: unref(titleId),\n                              titleClass: unref(ns).e(\"title\")\n                            }, () => [\n                              createElementVNode(\"span\", {\n                                id: unref(titleId),\n                                role: \"heading\",\n                                \"aria-level\": _ctx.headerAriaLevel,\n                                class: normalizeClass(unref(ns).e(\"title\"))\n                              }, toDisplayString(_ctx.title), 11, [\"id\", \"aria-level\"])\n                            ]) : renderSlot(_ctx.$slots, \"title\", { key: 1 }, () => [\n                              createCommentVNode(\" DEPRECATED SLOT \")\n                            ]),\n                            _ctx.showClose ? (openBlock(), createElementBlock(\"button\", {\n                              key: 2,\n                              \"aria-label\": unref(t)(\"el.drawer.close\"),\n                              class: normalizeClass(unref(ns).e(\"close-btn\")),\n                              type: \"button\",\n                              onClick: unref(handleClose)\n                            }, [\n                              createVNode(unref(ElIcon), {\n                                class: normalizeClass(unref(ns).e(\"close\"))\n                              }, {\n                                default: withCtx(() => [\n                                  createVNode(unref(Close))\n                                ]),\n                                _: 1\n                              }, 8, [\"class\"])\n                            ], 10, [\"aria-label\", \"onClick\"])) : createCommentVNode(\"v-if\", true)\n                          ], 2)) : createCommentVNode(\"v-if\", true),\n                          unref(rendered) ? (openBlock(), createElementBlock(\"div\", {\n                            key: 1,\n                            id: unref(bodyId),\n                            class: normalizeClass([unref(ns).e(\"body\"), _ctx.bodyClass])\n                          }, [\n                            renderSlot(_ctx.$slots, \"default\")\n                          ], 10, [\"id\"])) : createCommentVNode(\"v-if\", true),\n                          _ctx.$slots.footer ? (openBlock(), createElementBlock(\"div\", {\n                            key: 2,\n                            class: normalizeClass([unref(ns).e(\"footer\"), _ctx.footerClass])\n                          }, [\n                            renderSlot(_ctx.$slots, \"footer\")\n                          ], 2)) : createCommentVNode(\"v-if\", true),\n                          _ctx.resizable ? (openBlock(), createElementBlock(\"div\", {\n                            key: 3,\n                            ref_key: \"draggerRef\",\n                            ref: draggerRef,\n                            style: normalizeStyle({ zIndex: unref(zIndex) }),\n                            class: normalizeClass(unref(ns).e(\"dragger\"))\n                          }, null, 6)) : createCommentVNode(\"v-if\", true)\n                        ], 16, [\"aria-label\", \"aria-labelledby\", \"aria-describedby\", \"onClick\"])\n                      ]),\n                      _: 3\n                    }, 8, [\"trapped\", \"focus-trap-el\", \"focus-start-el\", \"onFocusAfterTrapped\", \"onFocusAfterReleased\", \"onFocusoutPrevented\", \"onReleaseRequested\"])\n                  ]),\n                  _: 3\n                }, 8, [\"mask\", \"overlay-class\", \"z-index\", \"onClick\"]), [\n                  [vShow, unref(visible)]\n                ])\n              ];\n            }),\n            _: 3\n          }, 8, [\"name\", \"onAfterEnter\", \"onAfterLeave\", \"onBeforeLeave\"])\n        ]),\n        _: 3\n      }, 8, [\"to\", \"disabled\"]);\n    };\n  }\n});\nvar Drawer = /* @__PURE__ */ _export_sfc(_sfc_main, [[\"__file\", \"drawer.vue\"]]);\n\nexport { Drawer as default };\n//# sourceMappingURL=drawer2.mjs.map\n","import Drawer from './src/drawer2.mjs';\nexport { drawerEmits, drawerProps } from './src/drawer.mjs';\nimport { withInstall } from '../../utils/vue/install.mjs';\n\nconst ElDrawer = withInstall(Drawer);\n\nexport { ElDrawer, ElDrawer as default };\n//# sourceMappingURL=index.mjs.map\n","import { getCurrentInstance, ref, computed, watch, nextTick, onMounted } from 'vue';\nimport { useTimeoutFn, isClient } from '@vueuse/core';\nimport { DEFAULT_DIALOG_TRANSITION } from './constants.mjs';\nimport { useLockscreen } from '../../../hooks/use-lockscreen/index.mjs';\nimport { useZIndex } from '../../../hooks/use-z-index/index.mjs';\nimport { useId } from '../../../hooks/use-id/index.mjs';\nimport { useGlobalConfig } from '../../config-provider/src/hooks/use-global-config.mjs';\nimport { defaultNamespace } from '../../../hooks/use-namespace/index.mjs';\nimport { addUnit } from '../../../utils/dom/style.mjs';\nimport { isObject, isArray, isFunction } from '@vue/shared';\nimport { UPDATE_MODEL_EVENT } from '../../../constants/event.mjs';\n\nconst useDialog = (props, targetRef) => {\n  var _a;\n  const instance = getCurrentInstance();\n  const emit = instance.emit;\n  const { nextZIndex } = useZIndex();\n  let lastPosition = \"\";\n  const titleId = useId();\n  const bodyId = useId();\n  const visible = ref(false);\n  const closed = ref(false);\n  const rendered = ref(false);\n  const zIndex = ref((_a = props.zIndex) != null ? _a : nextZIndex());\n  let openTimer = void 0;\n  let closeTimer = void 0;\n  const config = useGlobalConfig();\n  const namespace = computed(() => {\n    var _a2, _b;\n    return (_b = (_a2 = config.value) == null ? void 0 : _a2.namespace) != null ? _b : defaultNamespace;\n  });\n  const globalConfig = computed(() => {\n    var _a2;\n    return (_a2 = config.value) == null ? void 0 : _a2.dialog;\n  });\n  const style = computed(() => {\n    const style2 = {};\n    const varPrefix = `--${namespace.value}-dialog`;\n    if (!props.fullscreen) {\n      if (props.top) {\n        style2[`${varPrefix}-margin-top`] = props.top;\n      }\n      if (props.width) {\n        style2[`${varPrefix}-width`] = addUnit(props.width);\n      }\n    }\n    return style2;\n  });\n  const _draggable = computed(() => {\n    var _a2, _b, _c;\n    return ((_c = (_b = props.draggable) != null ? _b : (_a2 = globalConfig.value) == null ? void 0 : _a2.draggable) != null ? _c : false) && !props.fullscreen;\n  });\n  const _alignCenter = computed(() => {\n    var _a2, _b, _c;\n    return (_c = (_b = props.alignCenter) != null ? _b : (_a2 = globalConfig.value) == null ? void 0 : _a2.alignCenter) != null ? _c : false;\n  });\n  const _overflow = computed(() => {\n    var _a2, _b, _c;\n    return (_c = (_b = props.overflow) != null ? _b : (_a2 = globalConfig.value) == null ? void 0 : _a2.overflow) != null ? _c : false;\n  });\n  const overlayDialogStyle = computed(() => {\n    if (_alignCenter.value) {\n      return { display: \"flex\" };\n    }\n    return {};\n  });\n  const transitionConfig = computed(() => {\n    var _a2, _b, _c;\n    const transition = (_c = (_b = props.transition) != null ? _b : (_a2 = globalConfig.value) == null ? void 0 : _a2.transition) != null ? _c : DEFAULT_DIALOG_TRANSITION;\n    const baseConfig = {\n      name: transition,\n      onAfterEnter: afterEnter,\n      onBeforeLeave: beforeLeave,\n      onAfterLeave: afterLeave\n    };\n    if (isObject(transition)) {\n      const config2 = { ...transition };\n      const _mergeHook = (userHook, defaultHook) => {\n        return (el) => {\n          if (isArray(userHook)) {\n            userHook.forEach((fn) => {\n              if (isFunction(fn))\n                fn(el);\n            });\n          } else if (isFunction(userHook)) {\n            userHook(el);\n          }\n          defaultHook();\n        };\n      };\n      config2.onAfterEnter = _mergeHook(config2.onAfterEnter, afterEnter);\n      config2.onBeforeLeave = _mergeHook(config2.onBeforeLeave, beforeLeave);\n      config2.onAfterLeave = _mergeHook(config2.onAfterLeave, afterLeave);\n      if (!config2.name) {\n        config2.name = DEFAULT_DIALOG_TRANSITION;\n      }\n      return config2;\n    }\n    return baseConfig;\n  });\n  function afterEnter() {\n    emit(\"opened\");\n  }\n  function afterLeave() {\n    emit(\"closed\");\n    emit(UPDATE_MODEL_EVENT, false);\n    if (props.destroyOnClose) {\n      rendered.value = false;\n    }\n  }\n  function beforeLeave() {\n    emit(\"close\");\n  }\n  function open() {\n    closeTimer == null ? void 0 : closeTimer();\n    openTimer == null ? void 0 : openTimer();\n    if (props.openDelay && props.openDelay > 0) {\n      ({ stop: openTimer } = useTimeoutFn(() => doOpen(), props.openDelay));\n    } else {\n      doOpen();\n    }\n  }\n  function close() {\n    openTimer == null ? void 0 : openTimer();\n    closeTimer == null ? void 0 : closeTimer();\n    if (props.closeDelay && props.closeDelay > 0) {\n      ({ stop: closeTimer } = useTimeoutFn(() => doClose(), props.closeDelay));\n    } else {\n      doClose();\n    }\n  }\n  function handleClose() {\n    function hide(shouldCancel) {\n      if (shouldCancel)\n        return;\n      closed.value = true;\n      visible.value = false;\n    }\n    if (props.beforeClose) {\n      props.beforeClose(hide);\n    } else {\n      close();\n    }\n  }\n  function onModalClick() {\n    if (props.closeOnClickModal) {\n      handleClose();\n    }\n  }\n  function doOpen() {\n    if (!isClient)\n      return;\n    visible.value = true;\n  }\n  function doClose() {\n    visible.value = false;\n  }\n  function onOpenAutoFocus() {\n    emit(\"openAutoFocus\");\n  }\n  function onCloseAutoFocus() {\n    emit(\"closeAutoFocus\");\n  }\n  function onFocusoutPrevented(event) {\n    var _a2;\n    if (((_a2 = event.detail) == null ? void 0 : _a2.focusReason) === \"pointer\") {\n      event.preventDefault();\n    }\n  }\n  if (props.lockScroll) {\n    useLockscreen(visible);\n  }\n  function onCloseRequested() {\n    if (props.closeOnPressEscape) {\n      handleClose();\n    }\n  }\n  watch(() => props.zIndex, () => {\n    var _a2;\n    zIndex.value = (_a2 = props.zIndex) != null ? _a2 : nextZIndex();\n  });\n  watch(() => props.modelValue, (val) => {\n    var _a2;\n    if (val) {\n      closed.value = false;\n      open();\n      rendered.value = true;\n      zIndex.value = (_a2 = props.zIndex) != null ? _a2 : nextZIndex();\n      nextTick(() => {\n        emit(\"open\");\n        if (targetRef.value) {\n          targetRef.value.parentElement.scrollTop = 0;\n          targetRef.value.parentElement.scrollLeft = 0;\n          targetRef.value.scrollTop = 0;\n        }\n      });\n    } else {\n      if (visible.value) {\n        close();\n      }\n    }\n  });\n  watch(() => props.fullscreen, (val) => {\n    if (!targetRef.value)\n      return;\n    if (val) {\n      lastPosition = targetRef.value.style.transform;\n      targetRef.value.style.transform = \"\";\n    } else {\n      targetRef.value.style.transform = lastPosition;\n    }\n  });\n  onMounted(() => {\n    if (props.modelValue) {\n      visible.value = true;\n      rendered.value = true;\n      open();\n    }\n  });\n  return {\n    afterEnter,\n    afterLeave,\n    beforeLeave,\n    handleClose,\n    onModalClick,\n    close,\n    doClose,\n    onOpenAutoFocus,\n    onCloseAutoFocus,\n    onCloseRequested,\n    onFocusoutPrevented,\n    titleId,\n    bodyId,\n    closed,\n    style,\n    overlayDialogStyle,\n    rendered,\n    visible,\n    zIndex,\n    transitionConfig,\n    _draggable,\n    _alignCenter,\n    _overflow\n  };\n};\n\nexport { useDialog };\n//# sourceMappingURL=use-dialog.mjs.map\n","import { defineComponent, renderSlot } from 'vue';\nimport _export_sfc from '../../../_virtual/plugin-vue_export-helper.mjs';\n\nconst _sfc_main = defineComponent({\n  inheritAttrs: false\n});\nfunction _sfc_render(_ctx, _cache, $props, $setup, $data, $options) {\n  return renderSlot(_ctx.$slots, \"default\");\n}\nvar Collection = /* @__PURE__ */ _export_sfc(_sfc_main, [[\"render\", _sfc_render], [\"__file\", \"collection.vue\"]]);\n\nexport { Collection as default };\n//# sourceMappingURL=collection.mjs.map\n","import { defineComponent, renderSlot } from 'vue';\nimport _export_sfc from '../../../_virtual/plugin-vue_export-helper.mjs';\n\nconst _sfc_main = defineComponent({\n  name: \"ElCollectionItem\",\n  inheritAttrs: false\n});\nfunction _sfc_render(_ctx, _cache, $props, $setup, $data, $options) {\n  return renderSlot(_ctx.$slots, \"default\");\n}\nvar CollectionItem = /* @__PURE__ */ _export_sfc(_sfc_main, [[\"render\", _sfc_render], [\"__file\", \"collection-item.vue\"]]);\n\nexport { CollectionItem as default };\n//# sourceMappingURL=collection-item.mjs.map\n","import { ref, provide, inject, onMounted, unref, onBeforeUnmount } from 'vue';\nimport Collection from './collection.mjs';\nimport CollectionItem from './collection-item.mjs';\n\nconst COLLECTION_ITEM_SIGN = `data-el-collection-item`;\nconst createCollectionWithScope = (name) => {\n  const COLLECTION_NAME = `El${name}Collection`;\n  const COLLECTION_ITEM_NAME = `${COLLECTION_NAME}Item`;\n  const COLLECTION_INJECTION_KEY = Symbol(COLLECTION_NAME);\n  const COLLECTION_ITEM_INJECTION_KEY = Symbol(COLLECTION_ITEM_NAME);\n  const ElCollection = {\n    ...Collection,\n    name: COLLECTION_NAME,\n    setup() {\n      const collectionRef = ref();\n      const itemMap = /* @__PURE__ */ new Map();\n      const getItems = () => {\n        const collectionEl = unref(collectionRef);\n        if (!collectionEl)\n          return [];\n        const orderedNodes = Array.from(collectionEl.querySelectorAll(`[${COLLECTION_ITEM_SIGN}]`));\n        const items = [...itemMap.values()];\n        return items.sort((a, b) => orderedNodes.indexOf(a.ref) - orderedNodes.indexOf(b.ref));\n      };\n      provide(COLLECTION_INJECTION_KEY, {\n        itemMap,\n        getItems,\n        collectionRef\n      });\n    }\n  };\n  const ElCollectionItem = {\n    ...CollectionItem,\n    name: COLLECTION_ITEM_NAME,\n    setup(_, { attrs }) {\n      const collectionItemRef = ref();\n      const collectionInjection = inject(COLLECTION_INJECTION_KEY, void 0);\n      provide(COLLECTION_ITEM_INJECTION_KEY, {\n        collectionItemRef\n      });\n      onMounted(() => {\n        const collectionItemEl = unref(collectionItemRef);\n        if (collectionItemEl) {\n          collectionInjection.itemMap.set(collectionItemEl, {\n            ref: collectionItemEl,\n            ...attrs\n          });\n        }\n      });\n      onBeforeUnmount(() => {\n        const collectionItemEl = unref(collectionItemRef);\n        collectionInjection.itemMap.delete(collectionItemEl);\n      });\n    }\n  };\n  return {\n    COLLECTION_INJECTION_KEY,\n    COLLECTION_ITEM_INJECTION_KEY,\n    ElCollection,\n    ElCollectionItem\n  };\n};\n\nexport { COLLECTION_ITEM_SIGN, createCollectionWithScope };\n//# sourceMappingURL=collection2.mjs.map\n","import { useTooltipTriggerProps } from '../../tooltip/src/trigger.mjs';\nimport { roleTypes } from '../../popper/src/popper2.mjs';\nimport { buildProps, definePropType } from '../../../utils/vue/props/runtime.mjs';\nimport { EVENT_CODE } from '../../../constants/aria.mjs';\nimport { useTooltipContentProps } from '../../tooltip/src/content.mjs';\nimport { iconPropType } from '../../../utils/vue/icon.mjs';\nimport { createCollectionWithScope } from '../../collection/src/collection2.mjs';\n\nconst dropdownProps = buildProps({\n  trigger: useTooltipTriggerProps.trigger,\n  triggerKeys: {\n    type: definePropType(Array),\n    default: () => [\n      EVENT_CODE.enter,\n      EVENT_CODE.numpadEnter,\n      EVENT_CODE.space,\n      EVENT_CODE.down\n    ]\n  },\n  virtualTriggering: useTooltipTriggerProps.virtualTriggering,\n  virtualRef: useTooltipTriggerProps.virtualRef,\n  effect: {\n    ...useTooltipContentProps.effect,\n    default: \"light\"\n  },\n  type: {\n    type: definePropType(String)\n  },\n  placement: {\n    type: definePropType(String),\n    default: \"bottom\"\n  },\n  popperOptions: {\n    type: definePropType(Object),\n    default: () => ({})\n  },\n  id: String,\n  size: {\n    type: String,\n    default: \"\"\n  },\n  splitButton: Boolean,\n  hideOnClick: {\n    type: Boolean,\n    default: true\n  },\n  loop: {\n    type: Boolean,\n    default: true\n  },\n  showArrow: {\n    type: Boolean,\n    default: true\n  },\n  showTimeout: {\n    type: Number,\n    default: 150\n  },\n  hideTimeout: {\n    type: Number,\n    default: 150\n  },\n  tabindex: {\n    type: definePropType([Number, String]),\n    default: 0\n  },\n  maxHeight: {\n    type: definePropType([Number, String]),\n    default: \"\"\n  },\n  popperClass: {\n    type: String,\n    default: \"\"\n  },\n  disabled: Boolean,\n  role: {\n    type: String,\n    values: roleTypes,\n    default: \"menu\"\n  },\n  buttonProps: {\n    type: definePropType(Object)\n  },\n  teleported: useTooltipContentProps.teleported,\n  persistent: {\n    type: Boolean,\n    default: true\n  }\n});\nconst dropdownItemProps = buildProps({\n  command: {\n    type: [Object, String, Number],\n    default: () => ({})\n  },\n  disabled: Boolean,\n  divided: Boolean,\n  textValue: String,\n  icon: {\n    type: iconPropType\n  }\n});\nconst dropdownMenuProps = buildProps({\n  onKeydown: { type: definePropType(Function) }\n});\nconst FIRST_KEYS = [\n  EVENT_CODE.down,\n  EVENT_CODE.pageDown,\n  EVENT_CODE.home\n];\nconst LAST_KEYS = [EVENT_CODE.up, EVENT_CODE.pageUp, EVENT_CODE.end];\nconst FIRST_LAST_KEYS = [...FIRST_KEYS, ...LAST_KEYS];\nconst {\n  ElCollection,\n  ElCollectionItem,\n  COLLECTION_INJECTION_KEY,\n  COLLECTION_ITEM_INJECTION_KEY\n} = createCollectionWithScope(\"Dropdown\");\n\nexport { COLLECTION_INJECTION_KEY as DROPDOWN_COLLECTION_INJECTION_KEY, COLLECTION_ITEM_INJECTION_KEY as DROPDOWN_COLLECTION_ITEM_INJECTION_KEY, ElCollection, ElCollectionItem, FIRST_KEYS, FIRST_LAST_KEYS, LAST_KEYS, dropdownItemProps, dropdownMenuProps, dropdownProps };\n//# sourceMappingURL=dropdown.mjs.map\n","import { capitalize as capitalize$1, hyphenate } from '@vue/shared';\nexport { camelize, hyphenate } from '@vue/shared';\n\nconst kebabCase = hyphenate;\nconst escapeStringRegexp = (string = \"\") => string.replace(/[|\\\\{}()[\\]^$+*?.]/g, \"\\\\$&\").replace(/-/g, \"\\\\x2d\");\nconst capitalize = (str) => capitalize$1(str);\n\nexport { capitalize, escapeStringRegexp, kebabCase };\n//# sourceMappingURL=strings.mjs.map\n","import { dropdownProps } from '../../dropdown/src/dropdown.mjs';\nimport { buildProps } from '../../../utils/vue/props/runtime.mjs';\nimport { useTooltipTriggerProps } from '../../tooltip/src/trigger.mjs';\nimport { useTooltipContentProps } from '../../tooltip/src/content.mjs';\nimport { isBoolean } from '../../../utils/types.mjs';\n\nconst popoverProps = buildProps({\n  trigger: useTooltipTriggerProps.trigger,\n  triggerKeys: useTooltipTriggerProps.triggerKeys,\n  placement: dropdownProps.placement,\n  disabled: useTooltipTriggerProps.disabled,\n  visible: useTooltipContentProps.visible,\n  transition: useTooltipContentProps.transition,\n  popperOptions: dropdownProps.popperOptions,\n  tabindex: dropdownProps.tabindex,\n  content: useTooltipContentProps.content,\n  popperStyle: useTooltipContentProps.popperStyle,\n  popperClass: useTooltipContentProps.popperClass,\n  enterable: {\n    ...useTooltipContentProps.enterable,\n    default: true\n  },\n  effect: {\n    ...useTooltipContentProps.effect,\n    default: \"light\"\n  },\n  teleported: useTooltipContentProps.teleported,\n  appendTo: useTooltipContentProps.appendTo,\n  title: String,\n  width: {\n    type: [String, Number],\n    default: 150\n  },\n  offset: {\n    type: Number,\n    default: void 0\n  },\n  showAfter: {\n    type: Number,\n    default: 0\n  },\n  hideAfter: {\n    type: Number,\n    default: 200\n  },\n  autoClose: {\n    type: Number,\n    default: 0\n  },\n  showArrow: {\n    type: Boolean,\n    default: true\n  },\n  persistent: {\n    type: Boolean,\n    default: true\n  },\n  \"onUpdate:visible\": {\n    type: Function\n  }\n});\nconst popoverEmits = {\n  \"update:visible\": (value) => isBoolean(value),\n  \"before-enter\": () => true,\n  \"before-leave\": () => true,\n  \"after-enter\": () => true,\n  \"after-leave\": () => true\n};\n\nexport { popoverEmits, popoverProps };\n//# sourceMappingURL=popover.mjs.map\n","import { defineComponent, computed, ref, unref, openBlock, createBlock, mergeProps, withCtx, createElementBlock, normalizeClass, toDisplayString, createCommentVNode, renderSlot, createTextVNode } from 'vue';\nimport { ElTooltip } from '../../tooltip/index.mjs';\nimport { popoverProps, popoverEmits } from './popover.mjs';\nimport _export_sfc from '../../../_virtual/plugin-vue_export-helper.mjs';\nimport { useNamespace } from '../../../hooks/use-namespace/index.mjs';\nimport { addUnit } from '../../../utils/dom/style.mjs';\n\nconst updateEventKeyRaw = `onUpdate:visible`;\nconst __default__ = defineComponent({\n  name: \"ElPopover\"\n});\nconst _sfc_main = /* @__PURE__ */ defineComponent({\n  ...__default__,\n  props: popoverProps,\n  emits: popoverEmits,\n  setup(__props, { expose, emit }) {\n    const props = __props;\n    const onUpdateVisible = computed(() => {\n      return props[updateEventKeyRaw];\n    });\n    const ns = useNamespace(\"popover\");\n    const tooltipRef = ref();\n    const popperRef = computed(() => {\n      var _a;\n      return (_a = unref(tooltipRef)) == null ? void 0 : _a.popperRef;\n    });\n    const style = computed(() => {\n      return [\n        {\n          width: addUnit(props.width)\n        },\n        props.popperStyle\n      ];\n    });\n    const kls = computed(() => {\n      return [ns.b(), props.popperClass, { [ns.m(\"plain\")]: !!props.content }];\n    });\n    const gpuAcceleration = computed(() => {\n      return props.transition === `${ns.namespace.value}-fade-in-linear`;\n    });\n    const hide = () => {\n      var _a;\n      (_a = tooltipRef.value) == null ? void 0 : _a.hide();\n    };\n    const beforeEnter = () => {\n      emit(\"before-enter\");\n    };\n    const beforeLeave = () => {\n      emit(\"before-leave\");\n    };\n    const afterEnter = () => {\n      emit(\"after-enter\");\n    };\n    const afterLeave = () => {\n      emit(\"update:visible\", false);\n      emit(\"after-leave\");\n    };\n    expose({\n      popperRef,\n      hide\n    });\n    return (_ctx, _cache) => {\n      return openBlock(), createBlock(unref(ElTooltip), mergeProps({\n        ref_key: \"tooltipRef\",\n        ref: tooltipRef\n      }, _ctx.$attrs, {\n        trigger: _ctx.trigger,\n        \"trigger-keys\": _ctx.triggerKeys,\n        placement: _ctx.placement,\n        disabled: _ctx.disabled,\n        visible: _ctx.visible,\n        transition: _ctx.transition,\n        \"popper-options\": _ctx.popperOptions,\n        tabindex: _ctx.tabindex,\n        content: _ctx.content,\n        offset: _ctx.offset,\n        \"show-after\": _ctx.showAfter,\n        \"hide-after\": _ctx.hideAfter,\n        \"auto-close\": _ctx.autoClose,\n        \"show-arrow\": _ctx.showArrow,\n        \"aria-label\": _ctx.title,\n        effect: _ctx.effect,\n        enterable: _ctx.enterable,\n        \"popper-class\": unref(kls),\n        \"popper-style\": unref(style),\n        teleported: _ctx.teleported,\n        \"append-to\": _ctx.appendTo,\n        persistent: _ctx.persistent,\n        \"gpu-acceleration\": unref(gpuAcceleration),\n        \"onUpdate:visible\": unref(onUpdateVisible),\n        onBeforeShow: beforeEnter,\n        onBeforeHide: beforeLeave,\n        onShow: afterEnter,\n        onHide: afterLeave\n      }), {\n        content: withCtx(() => [\n          _ctx.title ? (openBlock(), createElementBlock(\"div\", {\n            key: 0,\n            class: normalizeClass(unref(ns).e(\"title\")),\n            role: \"title\"\n          }, toDisplayString(_ctx.title), 3)) : createCommentVNode(\"v-if\", true),\n          renderSlot(_ctx.$slots, \"default\", {}, () => [\n            createTextVNode(toDisplayString(_ctx.content), 1)\n          ])\n        ]),\n        default: withCtx(() => [\n          _ctx.$slots.reference ? renderSlot(_ctx.$slots, \"reference\", { key: 0 }) : createCommentVNode(\"v-if\", true)\n        ]),\n        _: 3\n      }, 16, [\"trigger\", \"trigger-keys\", \"placement\", \"disabled\", \"visible\", \"transition\", \"popper-options\", \"tabindex\", \"content\", \"offset\", \"show-after\", \"hide-after\", \"auto-close\", \"show-arrow\", \"aria-label\", \"effect\", \"enterable\", \"popper-class\", \"popper-style\", \"teleported\", \"append-to\", \"persistent\", \"gpu-acceleration\", \"onUpdate:visible\"]);\n    };\n  }\n});\nvar Popover = /* @__PURE__ */ _export_sfc(_sfc_main, [[\"__file\", \"popover.vue\"]]);\n\nexport { Popover as default };\n//# sourceMappingURL=popover2.mjs.map\n","const attachEvents = (el, binding) => {\n  const popperComponent = binding.arg || binding.value;\n  const popover = popperComponent == null ? void 0 : popperComponent.popperRef;\n  if (popover) {\n    popover.triggerRef = el;\n  }\n};\nvar PopoverDirective = {\n  mounted(el, binding) {\n    attachEvents(el, binding);\n  },\n  updated(el, binding) {\n    attachEvents(el, binding);\n  }\n};\nconst VPopover = \"popover\";\n\nexport { VPopover, PopoverDirective as default };\n//# sourceMappingURL=directive.mjs.map\n","import Popover from './src/popover2.mjs';\nimport PopoverDirective, { VPopover } from './src/directive.mjs';\nexport { popoverEmits, popoverProps } from './src/popover.mjs';\nimport { withInstallDirective, withInstall } from '../../utils/vue/install.mjs';\n\nconst ElPopoverDirective = withInstallDirective(PopoverDirective, VPopover);\nconst ElPopover = withInstall(Popover, {\n  directive: ElPopoverDirective\n});\n\nexport { ElPopover, ElPopoverDirective, ElPopover as default };\n//# sourceMappingURL=index.mjs.map\n","const DEFAULT_DYNAMIC_LIST_ITEM_SIZE = 50;\nconst ITEM_RENDER_EVT = \"itemRendered\";\nconst SCROLL_EVT = \"scroll\";\nconst FORWARD = \"forward\";\nconst BACKWARD = \"backward\";\nconst AUTO_ALIGNMENT = \"auto\";\nconst SMART_ALIGNMENT = \"smart\";\nconst START_ALIGNMENT = \"start\";\nconst CENTERED_ALIGNMENT = \"center\";\nconst END_ALIGNMENT = \"end\";\nconst HORIZONTAL = \"horizontal\";\nconst VERTICAL = \"vertical\";\nconst LTR = \"ltr\";\nconst RTL = \"rtl\";\nconst RTL_OFFSET_NAG = \"negative\";\nconst RTL_OFFSET_POS_ASC = \"positive-ascending\";\nconst RTL_OFFSET_POS_DESC = \"positive-descending\";\nconst ScrollbarSizeKey = {\n  [HORIZONTAL]: \"height\",\n  [VERTICAL]: \"width\"\n};\nconst ScrollbarDirKey = {\n  [HORIZONTAL]: \"left\",\n  [VERTICAL]: \"top\"\n};\nconst SCROLLBAR_MIN_SIZE = 20;\n\nexport { AUTO_ALIGNMENT, BACKWARD, CENTERED_ALIGNMENT, DEFAULT_DYNAMIC_LIST_ITEM_SIZE, END_ALIGNMENT, FORWARD, HORIZONTAL, ITEM_RENDER_EVT, LTR, RTL, RTL_OFFSET_NAG, RTL_OFFSET_POS_ASC, RTL_OFFSET_POS_DESC, SCROLLBAR_MIN_SIZE, SCROLL_EVT, SMART_ALIGNMENT, START_ALIGNMENT, ScrollbarDirKey, ScrollbarSizeKey, VERTICAL };\n//# sourceMappingURL=defaults.mjs.map\n","import { HORIZONTAL, VERTICAL } from '../defaults.mjs';\nimport { cAF, rAF } from '../../../../utils/raf.mjs';\nimport { isFirefox } from '../../../../utils/browser.mjs';\n\nconst LayoutKeys = {\n  [HORIZONTAL]: \"deltaX\",\n  [VERTICAL]: \"deltaY\"\n};\nconst useWheel = ({ atEndEdge, atStartEdge, layout }, onWheelDelta) => {\n  let frameHandle;\n  let offset = 0;\n  const hasReachedEdge = (offset2) => {\n    const edgeReached = offset2 < 0 && atStartEdge.value || offset2 > 0 && atEndEdge.value;\n    return edgeReached;\n  };\n  const onWheel = (e) => {\n    cAF(frameHandle);\n    const newOffset = e[LayoutKeys[layout.value]];\n    if (hasReachedEdge(offset) && hasReachedEdge(offset + newOffset))\n      return;\n    offset += newOffset;\n    if (!isFirefox()) {\n      e.preventDefault();\n    }\n    frameHandle = rAF(() => {\n      onWheelDelta(offset);\n      offset = 0;\n    });\n  };\n  return {\n    hasReachedEdge,\n    onWheel\n  };\n};\n\nexport { useWheel as default };\n//# sourceMappingURL=use-wheel.mjs.map\n","import { createVNode, render, isVNode } from 'vue';\nimport { merge, flatMap, castArray, get, isNull } from 'lodash-unified';\nimport { ElTooltip } from '../../tooltip/index.mjs';\nimport { isArray, isString, isFunction, hasOwn, isObject } from '@vue/shared';\nimport { throwError } from '../../../utils/error.mjs';\nimport { isUndefined, isNumber, isBoolean } from '../../../utils/types.mjs';\nimport { getProp } from '../../../utils/objects.mjs';\n\nconst getCell = function(event) {\n  var _a;\n  return (_a = event.target) == null ? void 0 : _a.closest(\"td\");\n};\nconst orderBy = function(array, sortKey, reverse, sortMethod, sortBy) {\n  if (!sortKey && !sortMethod && (!sortBy || isArray(sortBy) && !sortBy.length)) {\n    return array;\n  }\n  if (isString(reverse)) {\n    reverse = reverse === \"descending\" ? -1 : 1;\n  } else {\n    reverse = reverse && reverse < 0 ? -1 : 1;\n  }\n  const getKey = sortMethod ? null : function(value, index) {\n    if (sortBy) {\n      return flatMap(castArray(sortBy), (by) => {\n        if (isString(by)) {\n          return get(value, by);\n        } else {\n          return by(value, index, array);\n        }\n      });\n    }\n    if (sortKey !== \"$key\") {\n      if (isObject(value) && \"$value\" in value)\n        value = value.$value;\n    }\n    return [\n      isObject(value) ? sortKey ? get(value, sortKey) : null : value\n    ];\n  };\n  const compare = function(a, b) {\n    var _a, _b, _c, _d, _e, _f;\n    if (sortMethod) {\n      return sortMethod(a.value, b.value);\n    }\n    for (let i = 0, len = (_b = (_a = a.key) == null ? void 0 : _a.length) != null ? _b : 0; i < len; i++) {\n      if (((_c = a.key) == null ? void 0 : _c[i]) < ((_d = b.key) == null ? void 0 : _d[i])) {\n        return -1;\n      }\n      if (((_e = a.key) == null ? void 0 : _e[i]) > ((_f = b.key) == null ? void 0 : _f[i])) {\n        return 1;\n      }\n    }\n    return 0;\n  };\n  return array.map((value, index) => {\n    return {\n      value,\n      index,\n      key: getKey ? getKey(value, index) : null\n    };\n  }).sort((a, b) => {\n    let order = compare(a, b);\n    if (!order) {\n      order = a.index - b.index;\n    }\n    return order * +reverse;\n  }).map((item) => item.value);\n};\nconst getColumnById = function(table, columnId) {\n  let column = null;\n  table.columns.forEach((item) => {\n    if (item.id === columnId) {\n      column = item;\n    }\n  });\n  return column;\n};\nconst getColumnByKey = function(table, columnKey) {\n  let column = null;\n  for (let i = 0; i < table.columns.length; i++) {\n    const item = table.columns[i];\n    if (item.columnKey === columnKey) {\n      column = item;\n      break;\n    }\n  }\n  if (!column)\n    throwError(\"ElTable\", `No column matching with column-key: ${columnKey}`);\n  return column;\n};\nconst getColumnByCell = function(table, cell, namespace) {\n  const matches = (cell.className || \"\").match(new RegExp(`${namespace}-table_[^\\\\s]+`, \"gm\"));\n  if (matches) {\n    return getColumnById(table, matches[0]);\n  }\n  return null;\n};\nconst getRowIdentity = (row, rowKey) => {\n  if (!row)\n    throw new Error(\"Row is required when get row identity\");\n  if (isString(rowKey)) {\n    if (!rowKey.includes(\".\")) {\n      return `${row[rowKey]}`;\n    }\n    const key = rowKey.split(\".\");\n    let current = row;\n    for (const element of key) {\n      current = current[element];\n    }\n    return `${current}`;\n  } else if (isFunction(rowKey)) {\n    return rowKey.call(null, row);\n  }\n  return \"\";\n};\nconst getKeysMap = function(array, rowKey, flatten = false, childrenKey = \"children\") {\n  const data = array || [];\n  const arrayMap = {};\n  data.forEach((row, index) => {\n    arrayMap[getRowIdentity(row, rowKey)] = { row, index };\n    if (flatten) {\n      const children = row[childrenKey];\n      if (isArray(children)) {\n        Object.assign(arrayMap, getKeysMap(children, rowKey, true, childrenKey));\n      }\n    }\n  });\n  return arrayMap;\n};\nfunction mergeOptions(defaults, config) {\n  const options = {};\n  let key;\n  for (key in defaults) {\n    options[key] = defaults[key];\n  }\n  for (key in config) {\n    if (hasOwn(config, key)) {\n      const value = config[key];\n      if (!isUndefined(value)) {\n        options[key] = value;\n      }\n    }\n  }\n  return options;\n}\nfunction parseWidth(width) {\n  if (width === \"\")\n    return width;\n  if (!isUndefined(width)) {\n    width = Number.parseInt(width, 10);\n    if (Number.isNaN(width)) {\n      width = \"\";\n    }\n  }\n  return width;\n}\nfunction parseMinWidth(minWidth) {\n  if (minWidth === \"\")\n    return minWidth;\n  if (!isUndefined(minWidth)) {\n    minWidth = parseWidth(minWidth);\n    if (Number.isNaN(minWidth)) {\n      minWidth = 80;\n    }\n  }\n  return minWidth;\n}\nfunction parseHeight(height) {\n  if (isNumber(height)) {\n    return height;\n  }\n  if (isString(height)) {\n    if (/^\\d+(?:px)?$/.test(height)) {\n      return Number.parseInt(height, 10);\n    } else {\n      return height;\n    }\n  }\n  return null;\n}\nfunction compose(...funcs) {\n  if (funcs.length === 0) {\n    return (arg) => arg;\n  }\n  if (funcs.length === 1) {\n    return funcs[0];\n  }\n  return funcs.reduce((a, b) => (...args) => a(b(...args)));\n}\nfunction toggleRowStatus(statusArr, row, newVal, tableTreeProps, selectable, rowIndex, rowKey) {\n  let _rowIndex = rowIndex != null ? rowIndex : 0;\n  let changed = false;\n  const getIndex = () => {\n    if (!rowKey) {\n      return statusArr.indexOf(row);\n    }\n    const id = getRowIdentity(row, rowKey);\n    return statusArr.findIndex((item) => getRowIdentity(item, rowKey) === id);\n  };\n  const index = getIndex();\n  const included = index !== -1;\n  const isRowSelectable = selectable == null ? void 0 : selectable.call(null, row, _rowIndex);\n  const toggleStatus = (type) => {\n    if (type === \"add\") {\n      statusArr.push(row);\n    } else {\n      statusArr.splice(index, 1);\n    }\n    changed = true;\n  };\n  const getChildrenCount = (row2) => {\n    let count = 0;\n    const children = (tableTreeProps == null ? void 0 : tableTreeProps.children) && row2[tableTreeProps.children];\n    if (children && isArray(children)) {\n      count += children.length;\n      children.forEach((item) => {\n        count += getChildrenCount(item);\n      });\n    }\n    return count;\n  };\n  if (!selectable || isRowSelectable) {\n    if (isBoolean(newVal)) {\n      if (newVal && !included) {\n        toggleStatus(\"add\");\n      } else if (!newVal && included) {\n        toggleStatus(\"remove\");\n      }\n    } else {\n      included ? toggleStatus(\"remove\") : toggleStatus(\"add\");\n    }\n  }\n  if (!(tableTreeProps == null ? void 0 : tableTreeProps.checkStrictly) && (tableTreeProps == null ? void 0 : tableTreeProps.children) && isArray(row[tableTreeProps.children])) {\n    row[tableTreeProps.children].forEach((item) => {\n      const childChanged = toggleRowStatus(statusArr, item, newVal != null ? newVal : !included, tableTreeProps, selectable, _rowIndex + 1, rowKey);\n      _rowIndex += getChildrenCount(item) + 1;\n      if (childChanged) {\n        changed = childChanged;\n      }\n    });\n  }\n  return changed;\n}\nfunction walkTreeNode(root, cb, childrenKey = \"children\", lazyKey = \"hasChildren\", lazy = false) {\n  const isNil = (array) => !(isArray(array) && array.length);\n  function _walker(parent, children, level) {\n    cb(parent, children, level);\n    children.forEach((item) => {\n      if (item[lazyKey] && lazy) {\n        cb(item, null, level + 1);\n        return;\n      }\n      const children2 = item[childrenKey];\n      if (!isNil(children2)) {\n        _walker(item, children2, level + 1);\n      }\n    });\n  }\n  root.forEach((item) => {\n    if (item[lazyKey] && lazy) {\n      cb(item, null, 0);\n      return;\n    }\n    const children = item[childrenKey];\n    if (!isNil(children)) {\n      _walker(item, children, 0);\n    }\n  });\n}\nconst getTableOverflowTooltipProps = (props, innerText, row, column) => {\n  const popperOptions = {\n    strategy: \"fixed\",\n    ...props.popperOptions\n  };\n  const tooltipFormatterContent = isFunction(column == null ? void 0 : column.tooltipFormatter) ? column.tooltipFormatter({\n    row,\n    column,\n    cellValue: getProp(row, column.property).value\n  }) : void 0;\n  if (isVNode(tooltipFormatterContent)) {\n    return {\n      slotContent: tooltipFormatterContent,\n      content: null,\n      ...props,\n      popperOptions\n    };\n  }\n  return {\n    slotContent: null,\n    content: tooltipFormatterContent != null ? tooltipFormatterContent : innerText,\n    ...props,\n    popperOptions\n  };\n};\nlet removePopper = null;\nfunction createTablePopper(props, popperContent, row, column, trigger, table) {\n  var _a;\n  const tableOverflowTooltipProps = getTableOverflowTooltipProps(props, popperContent, row, column);\n  const mergedProps = {\n    ...tableOverflowTooltipProps,\n    slotContent: void 0\n  };\n  if ((removePopper == null ? void 0 : removePopper.trigger) === trigger) {\n    const comp = (_a = removePopper.vm) == null ? void 0 : _a.component;\n    merge(comp == null ? void 0 : comp.props, mergedProps);\n    if (comp && tableOverflowTooltipProps.slotContent) {\n      comp.slots.content = () => [tableOverflowTooltipProps.slotContent];\n    }\n    return;\n  }\n  removePopper == null ? void 0 : removePopper();\n  const parentNode = table == null ? void 0 : table.refs.tableWrapper;\n  const ns = parentNode == null ? void 0 : parentNode.dataset.prefix;\n  const vm = createVNode(ElTooltip, {\n    virtualTriggering: true,\n    virtualRef: trigger,\n    appendTo: parentNode,\n    placement: \"top\",\n    transition: \"none\",\n    offset: 0,\n    hideAfter: 0,\n    ...mergedProps\n  }, tableOverflowTooltipProps.slotContent ? {\n    content: () => tableOverflowTooltipProps.slotContent\n  } : void 0);\n  vm.appContext = { ...table.appContext, ...table };\n  const container = document.createElement(\"div\");\n  render(vm, container);\n  vm.component.exposed.onOpen();\n  const scrollContainer = parentNode == null ? void 0 : parentNode.querySelector(`.${ns}-scrollbar__wrap`);\n  removePopper = () => {\n    var _a2, _b;\n    if ((_b = (_a2 = vm.component) == null ? void 0 : _a2.exposed) == null ? void 0 : _b.onClose) {\n      vm.component.exposed.onClose();\n    }\n    render(null, container);\n    const currentRemovePopper = removePopper;\n    scrollContainer == null ? void 0 : scrollContainer.removeEventListener(\"scroll\", currentRemovePopper);\n    currentRemovePopper.trigger = void 0;\n    currentRemovePopper.vm = void 0;\n    removePopper = null;\n  };\n  removePopper.trigger = trigger != null ? trigger : void 0;\n  removePopper.vm = vm;\n  scrollContainer == null ? void 0 : scrollContainer.addEventListener(\"scroll\", removePopper);\n}\nfunction getCurrentColumns(column) {\n  if (column.children) {\n    return flatMap(column.children, getCurrentColumns);\n  } else {\n    return [column];\n  }\n}\nfunction getColSpan(colSpan, column) {\n  return colSpan + column.colSpan;\n}\nconst isFixedColumn = (index, fixed, store, realColumns) => {\n  let start = 0;\n  let after = index;\n  const columns = store.states.columns.value;\n  if (realColumns) {\n    const curColumns = getCurrentColumns(realColumns[index]);\n    const preColumns = columns.slice(0, columns.indexOf(curColumns[0]));\n    start = preColumns.reduce(getColSpan, 0);\n    after = start + curColumns.reduce(getColSpan, 0) - 1;\n  } else {\n    start = index;\n  }\n  let fixedLayout;\n  switch (fixed) {\n    case \"left\":\n      if (after < store.states.fixedLeafColumnsLength.value) {\n        fixedLayout = \"left\";\n      }\n      break;\n    case \"right\":\n      if (start >= columns.length - store.states.rightFixedLeafColumnsLength.value) {\n        fixedLayout = \"right\";\n      }\n      break;\n    default:\n      if (after < store.states.fixedLeafColumnsLength.value) {\n        fixedLayout = \"left\";\n      } else if (start >= columns.length - store.states.rightFixedLeafColumnsLength.value) {\n        fixedLayout = \"right\";\n      }\n  }\n  return fixedLayout ? {\n    direction: fixedLayout,\n    start,\n    after\n  } : {};\n};\nconst getFixedColumnsClass = (namespace, index, fixed, store, realColumns, offset = 0) => {\n  const classes = [];\n  const { direction, start, after } = isFixedColumn(index, fixed, store, realColumns);\n  if (direction) {\n    const isLeft = direction === \"left\";\n    classes.push(`${namespace}-fixed-column--${direction}`);\n    if (isLeft && after + offset === store.states.fixedLeafColumnsLength.value - 1) {\n      classes.push(\"is-last-column\");\n    } else if (!isLeft && start - offset === store.states.columns.value.length - store.states.rightFixedLeafColumnsLength.value) {\n      classes.push(\"is-first-column\");\n    }\n  }\n  return classes;\n};\nfunction getOffset(offset, column) {\n  return offset + (isNull(column.realWidth) || Number.isNaN(column.realWidth) ? Number(column.width) : column.realWidth);\n}\nconst getFixedColumnOffset = (index, fixed, store, realColumns) => {\n  const {\n    direction,\n    start = 0,\n    after = 0\n  } = isFixedColumn(index, fixed, store, realColumns);\n  if (!direction) {\n    return;\n  }\n  const styles = {};\n  const isLeft = direction === \"left\";\n  const columns = store.states.columns.value;\n  if (isLeft) {\n    styles.left = columns.slice(0, start).reduce(getOffset, 0);\n  } else {\n    styles.right = columns.slice(after + 1).reverse().reduce(getOffset, 0);\n  }\n  return styles;\n};\nconst ensurePosition = (style, key) => {\n  if (!style)\n    return;\n  if (!Number.isNaN(style[key])) {\n    style[key] = `${style[key]}px`;\n  }\n};\n\nexport { compose, createTablePopper, ensurePosition, getCell, getColumnByCell, getColumnById, getColumnByKey, getFixedColumnOffset, getFixedColumnsClass, getKeysMap, getRowIdentity, isFixedColumn, mergeOptions, orderBy, parseHeight, parseMinWidth, parseWidth, removePopper, toggleRowStatus, walkTreeNode };\n//# sourceMappingURL=util.mjs.map\n","import { getCurrentInstance, toRefs, ref, computed, watch, unref } from 'vue';\nimport { getKeysMap, getRowIdentity, toggleRowStatus, getColumnById, getColumnByKey, orderBy } from '../util.mjs';\nimport useExpand from './expand.mjs';\nimport useCurrent from './current.mjs';\nimport useTree from './tree.mjs';\nimport { hasOwn, isString, isArray } from '@vue/shared';\nimport { castArray } from 'lodash-unified';\n\nconst sortData = (data, states) => {\n  const sortingColumn = states.sortingColumn;\n  if (!sortingColumn || isString(sortingColumn.sortable)) {\n    return data;\n  }\n  return orderBy(data, states.sortProp, states.sortOrder, sortingColumn.sortMethod, sortingColumn.sortBy);\n};\nconst doFlattenColumns = (columns) => {\n  const result = [];\n  columns.forEach((column) => {\n    if (column.children && column.children.length > 0) {\n      result.push.apply(result, doFlattenColumns(column.children));\n    } else {\n      result.push(column);\n    }\n  });\n  return result;\n};\nfunction useWatcher() {\n  var _a;\n  const instance = getCurrentInstance();\n  const { size: tableSize } = toRefs((_a = instance.proxy) == null ? void 0 : _a.$props);\n  const rowKey = ref(null);\n  const data = ref([]);\n  const _data = ref([]);\n  const isComplex = ref(false);\n  const _columns = ref([]);\n  const originColumns = ref([]);\n  const columns = ref([]);\n  const fixedColumns = ref([]);\n  const rightFixedColumns = ref([]);\n  const leafColumns = ref([]);\n  const fixedLeafColumns = ref([]);\n  const rightFixedLeafColumns = ref([]);\n  const updateOrderFns = [];\n  const leafColumnsLength = ref(0);\n  const fixedLeafColumnsLength = ref(0);\n  const rightFixedLeafColumnsLength = ref(0);\n  const isAllSelected = ref(false);\n  const selection = ref([]);\n  const reserveSelection = ref(false);\n  const selectOnIndeterminate = ref(false);\n  const selectable = ref(null);\n  const filters = ref({});\n  const filteredData = ref(null);\n  const sortingColumn = ref(null);\n  const sortProp = ref(null);\n  const sortOrder = ref(null);\n  const hoverRow = ref(null);\n  const selectedMap = computed(() => {\n    return rowKey.value ? getKeysMap(selection.value, rowKey.value) : void 0;\n  });\n  watch(data, () => {\n    var _a2;\n    if (instance.state) {\n      scheduleLayout(false);\n      const needUpdateFixed = instance.props.tableLayout === \"auto\";\n      if (needUpdateFixed) {\n        (_a2 = instance.refs.tableHeaderRef) == null ? void 0 : _a2.updateFixedColumnStyle();\n      }\n    }\n  }, {\n    deep: true\n  });\n  const assertRowKey = () => {\n    if (!rowKey.value)\n      throw new Error(\"[ElTable] prop row-key is required\");\n  };\n  const updateChildFixed = (column) => {\n    var _a2;\n    (_a2 = column.children) == null ? void 0 : _a2.forEach((childColumn) => {\n      childColumn.fixed = column.fixed;\n      updateChildFixed(childColumn);\n    });\n  };\n  const updateColumns = () => {\n    _columns.value.forEach((column) => {\n      updateChildFixed(column);\n    });\n    fixedColumns.value = _columns.value.filter((column) => [true, \"left\"].includes(column.fixed));\n    const selectColumn = _columns.value.find((column) => column.type === \"selection\");\n    let selectColFixLeft;\n    if (selectColumn && selectColumn.fixed !== \"right\" && !fixedColumns.value.includes(selectColumn)) {\n      const selectColumnIndex = _columns.value.indexOf(selectColumn);\n      if (selectColumnIndex === 0 && fixedColumns.value.length) {\n        fixedColumns.value.unshift(selectColumn);\n        selectColFixLeft = true;\n      }\n    }\n    rightFixedColumns.value = _columns.value.filter((column) => column.fixed === \"right\");\n    const notFixedColumns = _columns.value.filter((column) => (selectColFixLeft ? column.type !== \"selection\" : true) && !column.fixed);\n    originColumns.value = Array.from(fixedColumns.value).concat(notFixedColumns).concat(rightFixedColumns.value);\n    const leafColumns2 = doFlattenColumns(notFixedColumns);\n    const fixedLeafColumns2 = doFlattenColumns(fixedColumns.value);\n    const rightFixedLeafColumns2 = doFlattenColumns(rightFixedColumns.value);\n    leafColumnsLength.value = leafColumns2.length;\n    fixedLeafColumnsLength.value = fixedLeafColumns2.length;\n    rightFixedLeafColumnsLength.value = rightFixedLeafColumns2.length;\n    columns.value = Array.from(fixedLeafColumns2).concat(leafColumns2).concat(rightFixedLeafColumns2);\n    isComplex.value = fixedColumns.value.length > 0 || rightFixedColumns.value.length > 0;\n  };\n  const scheduleLayout = (needUpdateColumns, immediate = false) => {\n    if (needUpdateColumns) {\n      updateColumns();\n    }\n    if (immediate) {\n      instance.state.doLayout();\n    } else {\n      instance.state.debouncedUpdateLayout();\n    }\n  };\n  const isSelected = (row) => {\n    if (selectedMap.value) {\n      return !!selectedMap.value[getRowIdentity(row, rowKey.value)];\n    } else {\n      return selection.value.includes(row);\n    }\n  };\n  const clearSelection = () => {\n    isAllSelected.value = false;\n    const oldSelection = selection.value;\n    selection.value = [];\n    if (oldSelection.length) {\n      instance.emit(\"selection-change\", []);\n    }\n  };\n  const cleanSelection = () => {\n    var _a2, _b;\n    let deleted;\n    if (rowKey.value) {\n      deleted = [];\n      const childrenKey = (_b = (_a2 = instance == null ? void 0 : instance.store) == null ? void 0 : _a2.states) == null ? void 0 : _b.childrenColumnName.value;\n      const dataMap = getKeysMap(data.value, rowKey.value, true, childrenKey);\n      for (const key in selectedMap.value) {\n        if (hasOwn(selectedMap.value, key) && !dataMap[key]) {\n          deleted.push(selectedMap.value[key].row);\n        }\n      }\n    } else {\n      deleted = selection.value.filter((item) => !data.value.includes(item));\n    }\n    if (deleted.length) {\n      const newSelection = selection.value.filter((item) => !deleted.includes(item));\n      selection.value = newSelection;\n      instance.emit(\"selection-change\", newSelection.slice());\n    }\n  };\n  const getSelectionRows = () => {\n    return (selection.value || []).slice();\n  };\n  const toggleRowSelection = (row, selected, emitChange = true, ignoreSelectable = false) => {\n    var _a2, _b, _c, _d;\n    const treeProps = {\n      children: (_b = (_a2 = instance == null ? void 0 : instance.store) == null ? void 0 : _a2.states) == null ? void 0 : _b.childrenColumnName.value,\n      checkStrictly: (_d = (_c = instance == null ? void 0 : instance.store) == null ? void 0 : _c.states) == null ? void 0 : _d.checkStrictly.value\n    };\n    const changed = toggleRowStatus(selection.value, row, selected, treeProps, ignoreSelectable ? void 0 : selectable.value, data.value.indexOf(row), rowKey.value);\n    if (changed) {\n      const newSelection = (selection.value || []).slice();\n      if (emitChange) {\n        instance.emit(\"select\", newSelection, row);\n      }\n      instance.emit(\"selection-change\", newSelection);\n    }\n  };\n  const _toggleAllSelection = () => {\n    var _a2, _b;\n    const value = selectOnIndeterminate.value ? !isAllSelected.value : !(isAllSelected.value || selection.value.length);\n    isAllSelected.value = value;\n    let selectionChanged = false;\n    let childrenCount = 0;\n    const rowKey2 = (_b = (_a2 = instance == null ? void 0 : instance.store) == null ? void 0 : _a2.states) == null ? void 0 : _b.rowKey.value;\n    const { childrenColumnName } = instance.store.states;\n    const treeProps = {\n      children: childrenColumnName.value,\n      checkStrictly: false\n    };\n    data.value.forEach((row, index) => {\n      const rowIndex = index + childrenCount;\n      if (toggleRowStatus(selection.value, row, value, treeProps, selectable.value, rowIndex, rowKey2)) {\n        selectionChanged = true;\n      }\n      childrenCount += getChildrenCount(getRowIdentity(row, rowKey2));\n    });\n    if (selectionChanged) {\n      instance.emit(\"selection-change\", selection.value ? selection.value.slice() : []);\n    }\n    instance.emit(\"select-all\", (selection.value || []).slice());\n  };\n  const updateAllSelected = () => {\n    var _a2;\n    if (((_a2 = data.value) == null ? void 0 : _a2.length) === 0) {\n      isAllSelected.value = false;\n      return;\n    }\n    const { childrenColumnName } = instance.store.states;\n    let rowIndex = 0;\n    let selectedCount = 0;\n    const checkSelectedStatus = (data2) => {\n      var _a3;\n      for (const row of data2) {\n        const isRowSelectable = selectable.value && selectable.value.call(null, row, rowIndex);\n        if (!isSelected(row)) {\n          if (!selectable.value || isRowSelectable) {\n            return false;\n          }\n        } else {\n          selectedCount++;\n        }\n        rowIndex++;\n        if (((_a3 = row[childrenColumnName.value]) == null ? void 0 : _a3.length) && !checkSelectedStatus(row[childrenColumnName.value])) {\n          return false;\n        }\n      }\n      return true;\n    };\n    const isAllSelected_ = checkSelectedStatus(data.value || []);\n    isAllSelected.value = selectedCount === 0 ? false : isAllSelected_;\n  };\n  const getChildrenCount = (rowKey2) => {\n    var _a2;\n    if (!instance || !instance.store)\n      return 0;\n    const { treeData } = instance.store.states;\n    let count = 0;\n    const children = (_a2 = treeData.value[rowKey2]) == null ? void 0 : _a2.children;\n    if (children) {\n      count += children.length;\n      children.forEach((childKey) => {\n        count += getChildrenCount(childKey);\n      });\n    }\n    return count;\n  };\n  const updateFilters = (column, values) => {\n    const filters_ = {};\n    castArray(column).forEach((col) => {\n      filters.value[col.id] = values;\n      filters_[col.columnKey || col.id] = values;\n    });\n    return filters_;\n  };\n  const updateSort = (column, prop, order) => {\n    if (sortingColumn.value && sortingColumn.value !== column) {\n      sortingColumn.value.order = null;\n    }\n    sortingColumn.value = column;\n    sortProp.value = prop;\n    sortOrder.value = order;\n  };\n  const execFilter = () => {\n    let sourceData = unref(_data);\n    Object.keys(filters.value).forEach((columnId) => {\n      const values = filters.value[columnId];\n      if (!values || values.length === 0)\n        return;\n      const column = getColumnById({\n        columns: columns.value\n      }, columnId);\n      if (column && column.filterMethod) {\n        sourceData = sourceData.filter((row) => {\n          return values.some((value) => column.filterMethod.call(null, value, row, column));\n        });\n      }\n    });\n    filteredData.value = sourceData;\n  };\n  const execSort = () => {\n    var _a2;\n    data.value = sortData((_a2 = filteredData.value) != null ? _a2 : [], {\n      sortingColumn: sortingColumn.value,\n      sortProp: sortProp.value,\n      sortOrder: sortOrder.value\n    });\n  };\n  const execQuery = (ignore = void 0) => {\n    if (!(ignore == null ? void 0 : ignore.filter)) {\n      execFilter();\n    }\n    execSort();\n  };\n  const clearFilter = (columnKeys) => {\n    const { tableHeaderRef } = instance.refs;\n    if (!tableHeaderRef)\n      return;\n    const panels = Object.assign({}, tableHeaderRef.filterPanels);\n    const keys = Object.keys(panels);\n    if (!keys.length)\n      return;\n    if (isString(columnKeys)) {\n      columnKeys = [columnKeys];\n    }\n    if (isArray(columnKeys)) {\n      const columns_ = columnKeys.map((key) => getColumnByKey({\n        columns: columns.value\n      }, key));\n      keys.forEach((key) => {\n        const column = columns_.find((col) => col.id === key);\n        if (column) {\n          column.filteredValue = [];\n        }\n      });\n      instance.store.commit(\"filterChange\", {\n        column: columns_,\n        values: [],\n        silent: true,\n        multi: true\n      });\n    } else {\n      keys.forEach((key) => {\n        const column = columns.value.find((col) => col.id === key);\n        if (column) {\n          column.filteredValue = [];\n        }\n      });\n      filters.value = {};\n      instance.store.commit(\"filterChange\", {\n        column: {},\n        values: [],\n        silent: true\n      });\n    }\n  };\n  const clearSort = () => {\n    if (!sortingColumn.value)\n      return;\n    updateSort(null, null, null);\n    instance.store.commit(\"changeSortCondition\", {\n      silent: true\n    });\n  };\n  const {\n    setExpandRowKeys,\n    toggleRowExpansion,\n    updateExpandRows,\n    states: expandStates,\n    isRowExpanded\n  } = useExpand({\n    data,\n    rowKey\n  });\n  const {\n    updateTreeExpandKeys,\n    toggleTreeExpansion,\n    updateTreeData,\n    updateKeyChildren,\n    loadOrToggle,\n    states: treeStates\n  } = useTree({\n    data,\n    rowKey\n  });\n  const {\n    updateCurrentRowData,\n    updateCurrentRow,\n    setCurrentRowKey,\n    states: currentData\n  } = useCurrent({\n    data,\n    rowKey\n  });\n  const setExpandRowKeysAdapter = (val) => {\n    setExpandRowKeys(val);\n    updateTreeExpandKeys(val);\n  };\n  const toggleRowExpansionAdapter = (row, expanded) => {\n    const hasExpandColumn = columns.value.some(({ type }) => type === \"expand\");\n    if (hasExpandColumn) {\n      toggleRowExpansion(row, expanded);\n    } else {\n      toggleTreeExpansion(row, expanded);\n    }\n  };\n  return {\n    assertRowKey,\n    updateColumns,\n    scheduleLayout,\n    isSelected,\n    clearSelection,\n    cleanSelection,\n    getSelectionRows,\n    toggleRowSelection,\n    _toggleAllSelection,\n    toggleAllSelection: null,\n    updateAllSelected,\n    updateFilters,\n    updateCurrentRow,\n    updateSort,\n    execFilter,\n    execSort,\n    execQuery,\n    clearFilter,\n    clearSort,\n    toggleRowExpansion,\n    setExpandRowKeysAdapter,\n    setCurrentRowKey,\n    toggleRowExpansionAdapter,\n    isRowExpanded,\n    updateExpandRows,\n    updateCurrentRowData,\n    loadOrToggle,\n    updateTreeData,\n    updateKeyChildren,\n    states: {\n      tableSize,\n      rowKey,\n      data,\n      _data,\n      isComplex,\n      _columns,\n      originColumns,\n      columns,\n      fixedColumns,\n      rightFixedColumns,\n      leafColumns,\n      fixedLeafColumns,\n      rightFixedLeafColumns,\n      updateOrderFns,\n      leafColumnsLength,\n      fixedLeafColumnsLength,\n      rightFixedLeafColumnsLength,\n      isAllSelected,\n      selection,\n      reserveSelection,\n      selectOnIndeterminate,\n      selectable,\n      filters,\n      filteredData,\n      sortingColumn,\n      sortProp,\n      sortOrder,\n      hoverRow,\n      ...expandStates,\n      ...treeStates,\n      ...currentData\n    }\n  };\n}\n\nexport { useWatcher as default };\n//# sourceMappingURL=watcher.mjs.map\n","import { getCurrentInstance, ref } from 'vue';\nimport { getKeysMap, getRowIdentity, toggleRowStatus } from '../util.mjs';\n\nfunction useExpand(watcherData) {\n  const instance = getCurrentInstance();\n  const defaultExpandAll = ref(false);\n  const expandRows = ref([]);\n  const updateExpandRows = () => {\n    const data = watcherData.data.value || [];\n    const rowKey = watcherData.rowKey.value;\n    if (defaultExpandAll.value) {\n      expandRows.value = data.slice();\n    } else if (rowKey) {\n      const expandRowsMap = getKeysMap(expandRows.value, rowKey);\n      expandRows.value = data.reduce((prev, row) => {\n        const rowId = getRowIdentity(row, rowKey);\n        const rowInfo = expandRowsMap[rowId];\n        if (rowInfo) {\n          prev.push(row);\n        }\n        return prev;\n      }, []);\n    } else {\n      expandRows.value = [];\n    }\n  };\n  const toggleRowExpansion = (row, expanded) => {\n    const changed = toggleRowStatus(expandRows.value, row, expanded, void 0, void 0, void 0, watcherData.rowKey.value);\n    if (changed) {\n      instance.emit(\"expand-change\", row, expandRows.value.slice());\n    }\n  };\n  const setExpandRowKeys = (rowKeys) => {\n    instance.store.assertRowKey();\n    const data = watcherData.data.value || [];\n    const rowKey = watcherData.rowKey.value;\n    const keysMap = getKeysMap(data, rowKey);\n    expandRows.value = rowKeys.reduce((prev, cur) => {\n      const info = keysMap[cur];\n      if (info) {\n        prev.push(info.row);\n      }\n      return prev;\n    }, []);\n  };\n  const isRowExpanded = (row) => {\n    const rowKey = watcherData.rowKey.value;\n    if (rowKey) {\n      const expandMap = getKeysMap(expandRows.value, rowKey);\n      return !!expandMap[getRowIdentity(row, rowKey)];\n    }\n    return expandRows.value.includes(row);\n  };\n  return {\n    updateExpandRows,\n    toggleRowExpansion,\n    setExpandRowKeys,\n    isRowExpanded,\n    states: {\n      expandRows,\n      defaultExpandAll\n    }\n  };\n}\n\nexport { useExpand as default };\n//# sourceMappingURL=expand.mjs.map\n","import { ref, getCurrentInstance, computed, watch, unref } from 'vue';\nimport { getRowIdentity, walkTreeNode } from '../util.mjs';\nimport { isArray } from '@vue/shared';\nimport { isUndefined } from '../../../../utils/types.mjs';\n\nfunction useTree(watcherData) {\n  const expandRowKeys = ref([]);\n  const treeData = ref({});\n  const indent = ref(16);\n  const lazy = ref(false);\n  const lazyTreeNodeMap = ref({});\n  const lazyColumnIdentifier = ref(\"hasChildren\");\n  const childrenColumnName = ref(\"children\");\n  const checkStrictly = ref(false);\n  const instance = getCurrentInstance();\n  const normalizedData = computed(() => {\n    if (!watcherData.rowKey.value)\n      return {};\n    const data = watcherData.data.value || [];\n    return normalize(data);\n  });\n  const normalizedLazyNode = computed(() => {\n    const rowKey = watcherData.rowKey.value;\n    const keys = Object.keys(lazyTreeNodeMap.value);\n    const res = {};\n    if (!keys.length)\n      return res;\n    keys.forEach((key) => {\n      if (lazyTreeNodeMap.value[key].length) {\n        const item = { children: [] };\n        lazyTreeNodeMap.value[key].forEach((row) => {\n          const currentRowKey = getRowIdentity(row, rowKey);\n          item.children.push(currentRowKey);\n          if (row[lazyColumnIdentifier.value] && !res[currentRowKey]) {\n            res[currentRowKey] = { children: [] };\n          }\n        });\n        res[key] = item;\n      }\n    });\n    return res;\n  });\n  const normalize = (data) => {\n    const rowKey = watcherData.rowKey.value;\n    const res = {};\n    walkTreeNode(data, (parent, children, level) => {\n      const parentId = getRowIdentity(parent, rowKey);\n      if (isArray(children)) {\n        res[parentId] = {\n          children: children.map((row) => getRowIdentity(row, rowKey)),\n          level\n        };\n      } else if (lazy.value) {\n        res[parentId] = {\n          children: [],\n          lazy: true,\n          level\n        };\n      }\n    }, childrenColumnName.value, lazyColumnIdentifier.value, lazy.value);\n    return res;\n  };\n  const updateTreeData = (ifChangeExpandRowKeys = false, ifExpandAll) => {\n    var _a, _b;\n    ifExpandAll || (ifExpandAll = (_a = instance.store) == null ? void 0 : _a.states.defaultExpandAll.value);\n    const nested = normalizedData.value;\n    const normalizedLazyNode_ = normalizedLazyNode.value;\n    const keys = Object.keys(nested);\n    const newTreeData = {};\n    if (keys.length) {\n      const oldTreeData = unref(treeData);\n      const rootLazyRowKeys = [];\n      const getExpanded = (oldValue, key) => {\n        if (ifChangeExpandRowKeys) {\n          if (expandRowKeys.value) {\n            return ifExpandAll || expandRowKeys.value.includes(key);\n          } else {\n            return !!(ifExpandAll || (oldValue == null ? void 0 : oldValue.expanded));\n          }\n        } else {\n          const included = ifExpandAll || expandRowKeys.value && expandRowKeys.value.includes(key);\n          return !!((oldValue == null ? void 0 : oldValue.expanded) || included);\n        }\n      };\n      keys.forEach((key) => {\n        const oldValue = oldTreeData[key];\n        const newValue = { ...nested[key] };\n        newValue.expanded = getExpanded(oldValue, key);\n        if (newValue.lazy) {\n          const { loaded = false, loading = false } = oldValue || {};\n          newValue.loaded = !!loaded;\n          newValue.loading = !!loading;\n          rootLazyRowKeys.push(key);\n        }\n        newTreeData[key] = newValue;\n      });\n      const lazyKeys = Object.keys(normalizedLazyNode_);\n      if (lazy.value && lazyKeys.length && rootLazyRowKeys.length) {\n        lazyKeys.forEach((key) => {\n          var _a2;\n          const oldValue = oldTreeData[key];\n          const lazyNodeChildren = normalizedLazyNode_[key].children;\n          if (rootLazyRowKeys.includes(key)) {\n            if (((_a2 = newTreeData[key].children) == null ? void 0 : _a2.length) !== 0) {\n              throw new Error(\"[ElTable]children must be an empty array.\");\n            }\n            newTreeData[key].children = lazyNodeChildren;\n          } else {\n            const { loaded = false, loading = false } = oldValue || {};\n            newTreeData[key] = {\n              lazy: true,\n              loaded: !!loaded,\n              loading: !!loading,\n              expanded: getExpanded(oldValue, key),\n              children: lazyNodeChildren,\n              level: void 0\n            };\n          }\n        });\n      }\n    }\n    treeData.value = newTreeData;\n    (_b = instance.store) == null ? void 0 : _b.updateTableScrollY();\n  };\n  watch(() => expandRowKeys.value, () => {\n    updateTreeData(true);\n  });\n  watch(() => normalizedData.value, () => {\n    updateTreeData();\n  });\n  watch(() => normalizedLazyNode.value, () => {\n    updateTreeData();\n  });\n  const updateTreeExpandKeys = (value) => {\n    expandRowKeys.value = value;\n    updateTreeData();\n  };\n  const isUseLazy = (data) => {\n    return lazy.value && data && \"loaded\" in data && !data.loaded;\n  };\n  const toggleTreeExpansion = (row, expanded) => {\n    instance.store.assertRowKey();\n    const rowKey = watcherData.rowKey.value;\n    const id = getRowIdentity(row, rowKey);\n    const data = id && treeData.value[id];\n    if (id && data && \"expanded\" in data) {\n      const oldExpanded = data.expanded;\n      expanded = isUndefined(expanded) ? !data.expanded : expanded;\n      treeData.value[id].expanded = expanded;\n      if (oldExpanded !== expanded) {\n        instance.emit(\"expand-change\", row, expanded);\n      }\n      isUseLazy(data) && loadData(row, id, data);\n      instance.store.updateTableScrollY();\n    }\n  };\n  const loadOrToggle = (row) => {\n    instance.store.assertRowKey();\n    const rowKey = watcherData.rowKey.value;\n    const id = getRowIdentity(row, rowKey);\n    const data = treeData.value[id];\n    if (isUseLazy(data)) {\n      loadData(row, id, data);\n    } else {\n      toggleTreeExpansion(row, void 0);\n    }\n  };\n  const loadData = (row, key, treeNode) => {\n    const { load } = instance.props;\n    if (load && !treeData.value[key].loaded) {\n      treeData.value[key].loading = true;\n      load(row, treeNode, (data) => {\n        if (!isArray(data)) {\n          throw new TypeError(\"[ElTable] data must be an array\");\n        }\n        treeData.value[key].loading = false;\n        treeData.value[key].loaded = true;\n        treeData.value[key].expanded = true;\n        if (data.length) {\n          lazyTreeNodeMap.value[key] = data;\n        }\n        instance.emit(\"expand-change\", row, true);\n      });\n    }\n  };\n  const updateKeyChildren = (key, data) => {\n    const { lazy: lazy2, rowKey } = instance.props;\n    if (!lazy2)\n      return;\n    if (!rowKey)\n      throw new Error(\"[Table] rowKey is required in updateKeyChild\");\n    if (lazyTreeNodeMap.value[key]) {\n      lazyTreeNodeMap.value[key] = data;\n    }\n  };\n  return {\n    loadData,\n    loadOrToggle,\n    toggleTreeExpansion,\n    updateTreeExpandKeys,\n    updateTreeData,\n    updateKeyChildren,\n    normalize,\n    states: {\n      expandRowKeys,\n      treeData,\n      indent,\n      lazy,\n      lazyTreeNodeMap,\n      lazyColumnIdentifier,\n      childrenColumnName,\n      checkStrictly\n    }\n  };\n}\n\nexport { useTree as default };\n//# sourceMappingURL=tree.mjs.map\n","import { getCurrentInstance, ref, unref } from 'vue';\nimport { isNull } from 'lodash-unified';\nimport { getRowIdentity } from '../util.mjs';\n\nfunction useCurrent(watcherData) {\n  const instance = getCurrentInstance();\n  const _currentRowKey = ref(null);\n  const currentRow = ref(null);\n  const setCurrentRowKey = (key) => {\n    instance.store.assertRowKey();\n    _currentRowKey.value = key;\n    setCurrentRowByKey(key);\n  };\n  const restoreCurrentRowKey = () => {\n    _currentRowKey.value = null;\n  };\n  const setCurrentRowByKey = (key) => {\n    var _a;\n    const { data, rowKey } = watcherData;\n    let _currentRow = null;\n    if (rowKey.value) {\n      _currentRow = (_a = (unref(data) || []).find((item) => getRowIdentity(item, rowKey.value) === key)) != null ? _a : null;\n    }\n    currentRow.value = _currentRow != null ? _currentRow : null;\n    instance.emit(\"current-change\", currentRow.value, null);\n  };\n  const updateCurrentRow = (_currentRow) => {\n    const oldCurrentRow = currentRow.value;\n    if (_currentRow && _currentRow !== oldCurrentRow) {\n      currentRow.value = _currentRow;\n      instance.emit(\"current-change\", currentRow.value, oldCurrentRow);\n      return;\n    }\n    if (!_currentRow && oldCurrentRow) {\n      currentRow.value = null;\n      instance.emit(\"current-change\", null, oldCurrentRow);\n    }\n  };\n  const updateCurrentRowData = () => {\n    const rowKey = watcherData.rowKey.value;\n    const data = watcherData.data.value || [];\n    const oldCurrentRow = currentRow.value;\n    if (oldCurrentRow && !data.includes(oldCurrentRow)) {\n      if (rowKey) {\n        const currentRowKey = getRowIdentity(oldCurrentRow, rowKey);\n        setCurrentRowByKey(currentRowKey);\n      } else {\n        currentRow.value = null;\n      }\n      if (isNull(currentRow.value)) {\n        instance.emit(\"current-change\", null, oldCurrentRow);\n      }\n    } else if (_currentRowKey.value) {\n      setCurrentRowByKey(_currentRowKey.value);\n      restoreCurrentRowKey();\n    }\n  };\n  return {\n    setCurrentRowKey,\n    restoreCurrentRowKey,\n    setCurrentRowByKey,\n    updateCurrentRow,\n    updateCurrentRowData,\n    states: {\n      _currentRowKey,\n      currentRow\n    }\n  };\n}\n\nexport { useCurrent as default };\n//# sourceMappingURL=current.mjs.map\n","import { getCurrentInstance, unref, nextTick } from 'vue';\nimport { isNull } from 'lodash-unified';\nimport useWatcher from './watcher.mjs';\nimport { useNamespace } from '../../../../hooks/use-namespace/index.mjs';\n\nfunction replaceColumn(array, column) {\n  return array.map((item) => {\n    var _a;\n    if (item.id === column.id) {\n      return column;\n    } else if ((_a = item.children) == null ? void 0 : _a.length) {\n      item.children = replaceColumn(item.children, column);\n    }\n    return item;\n  });\n}\nfunction sortColumn(array) {\n  array.forEach((item) => {\n    var _a, _b;\n    item.no = (_a = item.getColumnIndex) == null ? void 0 : _a.call(item);\n    if ((_b = item.children) == null ? void 0 : _b.length) {\n      sortColumn(item.children);\n    }\n  });\n  array.sort((cur, pre) => cur.no - pre.no);\n}\nfunction useStore() {\n  const instance = getCurrentInstance();\n  const watcher = useWatcher();\n  const ns = useNamespace(\"table\");\n  const mutations = {\n    setData(states, data) {\n      const dataInstanceChanged = unref(states._data) !== data;\n      states.data.value = data;\n      states._data.value = data;\n      instance.store.execQuery();\n      instance.store.updateCurrentRowData();\n      instance.store.updateExpandRows();\n      instance.store.updateTreeData(instance.store.states.defaultExpandAll.value);\n      if (unref(states.reserveSelection)) {\n        instance.store.assertRowKey();\n      } else {\n        if (dataInstanceChanged) {\n          instance.store.clearSelection();\n        } else {\n          instance.store.cleanSelection();\n        }\n      }\n      instance.store.updateAllSelected();\n      if (instance.$ready) {\n        instance.store.scheduleLayout();\n      }\n    },\n    insertColumn(states, column, parent, updateColumnOrder) {\n      var _a;\n      const array = unref(states._columns);\n      let newColumns = [];\n      if (!parent) {\n        array.push(column);\n        newColumns = array;\n      } else {\n        if (parent && !parent.children) {\n          parent.children = [];\n        }\n        (_a = parent.children) == null ? void 0 : _a.push(column);\n        newColumns = replaceColumn(array, parent);\n      }\n      sortColumn(newColumns);\n      states._columns.value = newColumns;\n      states.updateOrderFns.push(updateColumnOrder);\n      if (column.type === \"selection\") {\n        states.selectable.value = column.selectable;\n        states.reserveSelection.value = column.reserveSelection;\n      }\n      if (instance.$ready) {\n        instance.store.updateColumns();\n        instance.store.scheduleLayout();\n      }\n    },\n    updateColumnOrder(states, column) {\n      var _a;\n      const newColumnIndex = (_a = column.getColumnIndex) == null ? void 0 : _a.call(column);\n      if (newColumnIndex === column.no)\n        return;\n      sortColumn(states._columns.value);\n      if (instance.$ready) {\n        instance.store.updateColumns();\n      }\n    },\n    removeColumn(states, column, parent, updateColumnOrder) {\n      var _a;\n      const array = unref(states._columns) || [];\n      if (parent) {\n        (_a = parent.children) == null ? void 0 : _a.splice(parent.children.findIndex((item) => item.id === column.id), 1);\n        nextTick(() => {\n          var _a2;\n          if (((_a2 = parent.children) == null ? void 0 : _a2.length) === 0) {\n            delete parent.children;\n          }\n        });\n        states._columns.value = replaceColumn(array, parent);\n      } else {\n        const index = array.indexOf(column);\n        if (index > -1) {\n          array.splice(index, 1);\n          states._columns.value = array;\n        }\n      }\n      const updateFnIndex = states.updateOrderFns.indexOf(updateColumnOrder);\n      updateFnIndex > -1 && states.updateOrderFns.splice(updateFnIndex, 1);\n      if (instance.$ready) {\n        instance.store.updateColumns();\n        instance.store.scheduleLayout();\n      }\n    },\n    sort(states, options) {\n      const { prop, order, init } = options;\n      if (prop) {\n        const column = unref(states.columns).find((column2) => column2.property === prop);\n        if (column) {\n          column.order = order;\n          instance.store.updateSort(column, prop, order);\n          instance.store.commit(\"changeSortCondition\", { init });\n        }\n      }\n    },\n    changeSortCondition(states, options) {\n      const { sortingColumn, sortProp, sortOrder } = states;\n      const columnValue = unref(sortingColumn), propValue = unref(sortProp), orderValue = unref(sortOrder);\n      if (isNull(orderValue)) {\n        states.sortingColumn.value = null;\n        states.sortProp.value = null;\n      }\n      const ignore = { filter: true };\n      instance.store.execQuery(ignore);\n      if (!options || !(options.silent || options.init)) {\n        instance.emit(\"sort-change\", {\n          column: columnValue,\n          prop: propValue,\n          order: orderValue\n        });\n      }\n      instance.store.updateTableScrollY();\n    },\n    filterChange(_states, options) {\n      const { column, values, silent } = options;\n      const newFilters = instance.store.updateFilters(column, values);\n      instance.store.execQuery();\n      if (!silent) {\n        instance.emit(\"filter-change\", newFilters);\n      }\n      instance.store.updateTableScrollY();\n    },\n    toggleAllSelection() {\n      var _a, _b;\n      (_b = (_a = instance.store).toggleAllSelection) == null ? void 0 : _b.call(_a);\n    },\n    rowSelectedChanged(_states, row) {\n      instance.store.toggleRowSelection(row);\n      instance.store.updateAllSelected();\n    },\n    setHoverRow(states, row) {\n      states.hoverRow.value = row;\n    },\n    setCurrentRow(_states, row) {\n      instance.store.updateCurrentRow(row);\n    }\n  };\n  const commit = function(name, ...args) {\n    const mutations2 = instance.store.mutations;\n    if (mutations2[name]) {\n      mutations2[name].apply(instance, [\n        instance.store.states,\n        ...args\n      ]);\n    } else {\n      throw new Error(`Action not found: ${name}`);\n    }\n  };\n  const updateTableScrollY = function() {\n    nextTick(() => instance.layout.updateScrollY.apply(instance.layout));\n  };\n  return {\n    ns,\n    ...watcher,\n    mutations,\n    commit,\n    updateTableScrollY\n  };\n}\n\nexport { useStore as default };\n//# sourceMappingURL=index.mjs.map\n","import { watch } from 'vue';\nimport { debounce } from 'lodash-unified';\nimport useStore from './index.mjs';\nimport { isObject } from '@vue/shared';\n\nconst InitialStateMap = {\n  rowKey: \"rowKey\",\n  defaultExpandAll: \"defaultExpandAll\",\n  selectOnIndeterminate: \"selectOnIndeterminate\",\n  indent: \"indent\",\n  lazy: \"lazy\",\n  data: \"data\",\n  [\"treeProps.hasChildren\"]: {\n    key: \"lazyColumnIdentifier\",\n    default: \"hasChildren\"\n  },\n  [\"treeProps.children\"]: {\n    key: \"childrenColumnName\",\n    default: \"children\"\n  },\n  [\"treeProps.checkStrictly\"]: {\n    key: \"checkStrictly\",\n    default: false\n  }\n};\nfunction createStore(table, props) {\n  if (!table) {\n    throw new Error(\"Table is required.\");\n  }\n  const store = useStore();\n  store.toggleAllSelection = debounce(store._toggleAllSelection, 10);\n  Object.keys(InitialStateMap).forEach((key) => {\n    handleValue(getArrKeysValue(props, key), key, store);\n  });\n  proxyTableProps(store, props);\n  return store;\n}\nfunction proxyTableProps(store, props) {\n  Object.keys(InitialStateMap).forEach((key) => {\n    watch(() => getArrKeysValue(props, key), (value) => {\n      handleValue(value, key, store);\n    });\n  });\n}\nfunction handleValue(value, propsKey, store) {\n  let newVal = value;\n  let storeKey = InitialStateMap[propsKey];\n  if (isObject(storeKey)) {\n    newVal = newVal || storeKey.default;\n    storeKey = storeKey.key;\n  }\n  store.states[storeKey].value = newVal;\n}\nfunction getArrKeysValue(props, key) {\n  if (key.includes(\".\")) {\n    const keyList = key.split(\".\");\n    let value = props;\n    keyList.forEach((k) => {\n      value = value[k];\n    });\n    return value;\n  } else {\n    return props[key];\n  }\n}\n\nexport { createStore };\n//# sourceMappingURL=helper.mjs.map\n","import { ref, isRef, nextTick } from 'vue';\nimport { isNull } from 'lodash-unified';\nimport { parseHeight } from './util.mjs';\nimport { hasOwn, isString } from '@vue/shared';\nimport { isClient } from '@vueuse/core';\nimport { isNumber } from '../../../utils/types.mjs';\n\nclass TableLayout {\n  constructor(options) {\n    this.observers = [];\n    this.table = null;\n    this.store = null;\n    this.columns = [];\n    this.fit = true;\n    this.showHeader = true;\n    this.height = ref(null);\n    this.scrollX = ref(false);\n    this.scrollY = ref(false);\n    this.bodyWidth = ref(null);\n    this.fixedWidth = ref(null);\n    this.rightFixedWidth = ref(null);\n    this.gutterWidth = 0;\n    for (const name in options) {\n      if (hasOwn(options, name)) {\n        if (isRef(this[name])) {\n          this[name].value = options[name];\n        } else {\n          this[name] = options[name];\n        }\n      }\n    }\n    if (!this.table) {\n      throw new Error(\"Table is required for Table Layout\");\n    }\n    if (!this.store) {\n      throw new Error(\"Store is required for Table Layout\");\n    }\n  }\n  updateScrollY() {\n    const height = this.height.value;\n    if (isNull(height))\n      return false;\n    const scrollBarRef = this.table.refs.scrollBarRef;\n    if (this.table.vnode.el && (scrollBarRef == null ? void 0 : scrollBarRef.wrapRef)) {\n      let scrollY = true;\n      const prevScrollY = this.scrollY.value;\n      scrollY = scrollBarRef.wrapRef.scrollHeight > scrollBarRef.wrapRef.clientHeight;\n      this.scrollY.value = scrollY;\n      return prevScrollY !== scrollY;\n    }\n    return false;\n  }\n  setHeight(value, prop = \"height\") {\n    if (!isClient)\n      return;\n    const el = this.table.vnode.el;\n    value = parseHeight(value);\n    this.height.value = Number(value);\n    if (!el && (value || value === 0)) {\n      nextTick(() => this.setHeight(value, prop));\n      return;\n    }\n    if (el && isNumber(value)) {\n      el.style[prop] = `${value}px`;\n      this.updateElsHeight();\n    } else if (el && isString(value)) {\n      el.style[prop] = value;\n      this.updateElsHeight();\n    }\n  }\n  setMaxHeight(value) {\n    this.setHeight(value, \"max-height\");\n  }\n  getFlattenColumns() {\n    const flattenColumns = [];\n    const columns = this.table.store.states.columns.value;\n    columns.forEach((column) => {\n      if (column.isColumnGroup) {\n        flattenColumns.push.apply(flattenColumns, column.columns);\n      } else {\n        flattenColumns.push(column);\n      }\n    });\n    return flattenColumns;\n  }\n  updateElsHeight() {\n    this.updateScrollY();\n    this.notifyObservers(\"scrollable\");\n  }\n  headerDisplayNone(elm) {\n    if (!elm)\n      return true;\n    let headerChild = elm;\n    while (headerChild.tagName !== \"DIV\") {\n      if (getComputedStyle(headerChild).display === \"none\") {\n        return true;\n      }\n      headerChild = headerChild.parentElement;\n    }\n    return false;\n  }\n  updateColumnsWidth() {\n    var _a;\n    if (!isClient)\n      return;\n    const fit = this.fit;\n    const bodyWidth = (_a = this.table.vnode.el) == null ? void 0 : _a.clientWidth;\n    let bodyMinWidth = 0;\n    const flattenColumns = this.getFlattenColumns();\n    const flexColumns = flattenColumns.filter((column) => !isNumber(column.width));\n    flattenColumns.forEach((column) => {\n      if (isNumber(column.width) && column.realWidth)\n        column.realWidth = null;\n    });\n    if (flexColumns.length > 0 && fit) {\n      flattenColumns.forEach((column) => {\n        bodyMinWidth += Number(column.width || column.minWidth || 80);\n      });\n      if (bodyMinWidth <= bodyWidth) {\n        this.scrollX.value = false;\n        const totalFlexWidth = bodyWidth - bodyMinWidth;\n        if (flexColumns.length === 1) {\n          flexColumns[0].realWidth = Number(flexColumns[0].minWidth || 80) + totalFlexWidth;\n        } else {\n          const allColumnsWidth = flexColumns.reduce((prev, column) => prev + Number(column.minWidth || 80), 0);\n          const flexWidthPerPixel = totalFlexWidth / allColumnsWidth;\n          let noneFirstWidth = 0;\n          flexColumns.forEach((column, index) => {\n            if (index === 0)\n              return;\n            const flexWidth = Math.floor(Number(column.minWidth || 80) * flexWidthPerPixel);\n            noneFirstWidth += flexWidth;\n            column.realWidth = Number(column.minWidth || 80) + flexWidth;\n          });\n          flexColumns[0].realWidth = Number(flexColumns[0].minWidth || 80) + totalFlexWidth - noneFirstWidth;\n        }\n      } else {\n        this.scrollX.value = true;\n        flexColumns.forEach((column) => {\n          column.realWidth = Number(column.minWidth);\n        });\n      }\n      this.bodyWidth.value = Math.max(bodyMinWidth, bodyWidth);\n      this.table.state.resizeState.value.width = this.bodyWidth.value;\n    } else {\n      flattenColumns.forEach((column) => {\n        if (!column.width && !column.minWidth) {\n          column.realWidth = 80;\n        } else {\n          column.realWidth = Number(column.width || column.minWidth);\n        }\n        bodyMinWidth += column.realWidth;\n      });\n      this.scrollX.value = bodyMinWidth > bodyWidth;\n      this.bodyWidth.value = bodyMinWidth;\n    }\n    const fixedColumns = this.store.states.fixedColumns.value;\n    if (fixedColumns.length > 0) {\n      let fixedWidth = 0;\n      fixedColumns.forEach((column) => {\n        fixedWidth += Number(column.realWidth || column.width);\n      });\n      this.fixedWidth.value = fixedWidth;\n    }\n    const rightFixedColumns = this.store.states.rightFixedColumns.value;\n    if (rightFixedColumns.length > 0) {\n      let rightFixedWidth = 0;\n      rightFixedColumns.forEach((column) => {\n        rightFixedWidth += Number(column.realWidth || column.width);\n      });\n      this.rightFixedWidth.value = rightFixedWidth;\n    }\n    this.notifyObservers(\"columns\");\n  }\n  addObserver(observer) {\n    this.observers.push(observer);\n  }\n  removeObserver(observer) {\n    const index = this.observers.indexOf(observer);\n    if (index !== -1) {\n      this.observers.splice(index, 1);\n    }\n  }\n  notifyObservers(event) {\n    const observers = this.observers;\n    observers.forEach((observer) => {\n      var _a, _b;\n      switch (event) {\n        case \"columns\":\n          (_a = observer.state) == null ? void 0 : _a.onColumnsChange(this);\n          break;\n        case \"scrollable\":\n          (_b = observer.state) == null ? void 0 : _b.onScrollableChange(this);\n          break;\n        default:\n          throw new Error(`Table Layout don't have event ${event}.`);\n      }\n    });\n  }\n}\n\nexport { TableLayout as default };\n//# sourceMappingURL=table-layout.mjs.map\n","import { defineComponent, getCurrentInstance, ref, computed, watch, resolveComponent, resolveDirective, openBlock, createBlock, withCtx, createElementBlock, createElementVNode, normalizeClass, createVNode, Fragment, renderList, createTextVNode, toDisplayString, withDirectives, renderSlot } from 'vue';\nimport { ElCheckbox } from '../../checkbox/index.mjs';\nimport { ElIcon } from '../../icon/index.mjs';\nimport { ArrowDown, ArrowUp } from '@element-plus/icons-vue';\nimport { ElTooltip } from '../../tooltip/index.mjs';\nimport { ElScrollbar } from '../../scrollbar/index.mjs';\nimport _export_sfc from '../../../_virtual/plugin-vue_export-helper.mjs';\nimport ClickOutside from '../../../directives/click-outside/index.mjs';\nimport { useTooltipContentProps } from '../../tooltip/src/content.mjs';\nimport { useLocale } from '../../../hooks/use-locale/index.mjs';\nimport { useNamespace } from '../../../hooks/use-namespace/index.mjs';\nimport { isPropAbsent } from '../../../utils/types.mjs';\n\nconst { CheckboxGroup: ElCheckboxGroup } = ElCheckbox;\nconst _sfc_main = defineComponent({\n  name: \"ElTableFilterPanel\",\n  components: {\n    ElCheckbox,\n    ElCheckboxGroup,\n    ElScrollbar,\n    ElTooltip,\n    ElIcon,\n    ArrowDown,\n    ArrowUp\n  },\n  directives: { ClickOutside },\n  props: {\n    placement: {\n      type: String,\n      default: \"bottom-start\"\n    },\n    store: {\n      type: Object\n    },\n    column: {\n      type: Object\n    },\n    upDataColumn: {\n      type: Function\n    },\n    appendTo: useTooltipContentProps.appendTo\n  },\n  setup(props) {\n    const instance = getCurrentInstance();\n    const { t } = useLocale();\n    const ns = useNamespace(\"table-filter\");\n    const parent = instance == null ? void 0 : instance.parent;\n    if (props.column && !parent.filterPanels.value[props.column.id]) {\n      parent.filterPanels.value[props.column.id] = instance;\n    }\n    const tooltipVisible = ref(false);\n    const tooltip = ref(null);\n    const filters = computed(() => {\n      return props.column && props.column.filters;\n    });\n    const filterClassName = computed(() => {\n      if (props.column && props.column.filterClassName) {\n        return `${ns.b()} ${props.column.filterClassName}`;\n      }\n      return ns.b();\n    });\n    const filterValue = computed({\n      get: () => {\n        var _a;\n        return (((_a = props.column) == null ? void 0 : _a.filteredValue) || [])[0];\n      },\n      set: (value) => {\n        if (filteredValue.value) {\n          if (!isPropAbsent(value)) {\n            filteredValue.value.splice(0, 1, value);\n          } else {\n            filteredValue.value.splice(0, 1);\n          }\n        }\n      }\n    });\n    const filteredValue = computed({\n      get() {\n        if (props.column) {\n          return props.column.filteredValue || [];\n        }\n        return [];\n      },\n      set(value) {\n        var _a;\n        if (props.column) {\n          (_a = props.upDataColumn) == null ? void 0 : _a.call(props, \"filteredValue\", value);\n        }\n      }\n    });\n    const multiple = computed(() => {\n      if (props.column) {\n        return props.column.filterMultiple;\n      }\n      return true;\n    });\n    const isActive = (filter) => {\n      return filter.value === filterValue.value;\n    };\n    const hidden = () => {\n      tooltipVisible.value = false;\n    };\n    const showFilterPanel = (e) => {\n      e.stopPropagation();\n      tooltipVisible.value = !tooltipVisible.value;\n    };\n    const hideFilterPanel = () => {\n      tooltipVisible.value = false;\n    };\n    const handleConfirm = () => {\n      confirmFilter(filteredValue.value);\n      hidden();\n    };\n    const handleReset = () => {\n      filteredValue.value = [];\n      confirmFilter(filteredValue.value);\n      hidden();\n    };\n    const handleSelect = (_filterValue) => {\n      filterValue.value = _filterValue;\n      if (!isPropAbsent(_filterValue)) {\n        confirmFilter(filteredValue.value);\n      } else {\n        confirmFilter([]);\n      }\n      hidden();\n    };\n    const confirmFilter = (filteredValue2) => {\n      var _a, _b;\n      (_a = props.store) == null ? void 0 : _a.commit(\"filterChange\", {\n        column: props.column,\n        values: filteredValue2\n      });\n      (_b = props.store) == null ? void 0 : _b.updateAllSelected();\n    };\n    watch(tooltipVisible, (value) => {\n      var _a;\n      if (props.column) {\n        (_a = props.upDataColumn) == null ? void 0 : _a.call(props, \"filterOpened\", value);\n      }\n    }, {\n      immediate: true\n    });\n    const popperPaneRef = computed(() => {\n      var _a, _b;\n      return (_b = (_a = tooltip.value) == null ? void 0 : _a.popperRef) == null ? void 0 : _b.contentRef;\n    });\n    return {\n      tooltipVisible,\n      multiple,\n      filterClassName,\n      filteredValue,\n      filterValue,\n      filters,\n      handleConfirm,\n      handleReset,\n      handleSelect,\n      isPropAbsent,\n      isActive,\n      t,\n      ns,\n      showFilterPanel,\n      hideFilterPanel,\n      popperPaneRef,\n      tooltip\n    };\n  }\n});\nfunction _sfc_render(_ctx, _cache, $props, $setup, $data, $options) {\n  const _component_el_checkbox = resolveComponent(\"el-checkbox\");\n  const _component_el_checkbox_group = resolveComponent(\"el-checkbox-group\");\n  const _component_el_scrollbar = resolveComponent(\"el-scrollbar\");\n  const _component_arrow_up = resolveComponent(\"arrow-up\");\n  const _component_arrow_down = resolveComponent(\"arrow-down\");\n  const _component_el_icon = resolveComponent(\"el-icon\");\n  const _component_el_tooltip = resolveComponent(\"el-tooltip\");\n  const _directive_click_outside = resolveDirective(\"click-outside\");\n  return openBlock(), createBlock(_component_el_tooltip, {\n    ref: \"tooltip\",\n    visible: _ctx.tooltipVisible,\n    offset: 0,\n    placement: _ctx.placement,\n    \"show-arrow\": false,\n    \"stop-popper-mouse-event\": false,\n    teleported: \"\",\n    effect: \"light\",\n    pure: \"\",\n    \"popper-class\": _ctx.filterClassName,\n    persistent: \"\",\n    \"append-to\": _ctx.appendTo\n  }, {\n    content: withCtx(() => [\n      _ctx.multiple ? (openBlock(), createElementBlock(\"div\", { key: 0 }, [\n        createElementVNode(\"div\", {\n          class: normalizeClass(_ctx.ns.e(\"content\"))\n        }, [\n          createVNode(_component_el_scrollbar, {\n            \"wrap-class\": _ctx.ns.e(\"wrap\")\n          }, {\n            default: withCtx(() => [\n              createVNode(_component_el_checkbox_group, {\n                modelValue: _ctx.filteredValue,\n                \"onUpdate:modelValue\": ($event) => _ctx.filteredValue = $event,\n                class: normalizeClass(_ctx.ns.e(\"checkbox-group\"))\n              }, {\n                default: withCtx(() => [\n                  (openBlock(true), createElementBlock(Fragment, null, renderList(_ctx.filters, (filter) => {\n                    return openBlock(), createBlock(_component_el_checkbox, {\n                      key: filter.value,\n                      value: filter.value\n                    }, {\n                      default: withCtx(() => [\n                        createTextVNode(toDisplayString(filter.text), 1)\n                      ]),\n                      _: 2\n                    }, 1032, [\"value\"]);\n                  }), 128))\n                ]),\n                _: 1\n              }, 8, [\"modelValue\", \"onUpdate:modelValue\", \"class\"])\n            ]),\n            _: 1\n          }, 8, [\"wrap-class\"])\n        ], 2),\n        createElementVNode(\"div\", {\n          class: normalizeClass(_ctx.ns.e(\"bottom\"))\n        }, [\n          createElementVNode(\"button\", {\n            class: normalizeClass({ [_ctx.ns.is(\"disabled\")]: _ctx.filteredValue.length === 0 }),\n            disabled: _ctx.filteredValue.length === 0,\n            type: \"button\",\n            onClick: _ctx.handleConfirm\n          }, toDisplayString(_ctx.t(\"el.table.confirmFilter\")), 11, [\"disabled\", \"onClick\"]),\n          createElementVNode(\"button\", {\n            type: \"button\",\n            onClick: _ctx.handleReset\n          }, toDisplayString(_ctx.t(\"el.table.resetFilter\")), 9, [\"onClick\"])\n        ], 2)\n      ])) : (openBlock(), createElementBlock(\"ul\", {\n        key: 1,\n        class: normalizeClass(_ctx.ns.e(\"list\"))\n      }, [\n        createElementVNode(\"li\", {\n          class: normalizeClass([\n            _ctx.ns.e(\"list-item\"),\n            {\n              [_ctx.ns.is(\"active\")]: _ctx.isPropAbsent(_ctx.filterValue)\n            }\n          ]),\n          onClick: ($event) => _ctx.handleSelect(null)\n        }, toDisplayString(_ctx.t(\"el.table.clearFilter\")), 11, [\"onClick\"]),\n        (openBlock(true), createElementBlock(Fragment, null, renderList(_ctx.filters, (filter) => {\n          return openBlock(), createElementBlock(\"li\", {\n            key: filter.value,\n            class: normalizeClass([_ctx.ns.e(\"list-item\"), _ctx.ns.is(\"active\", _ctx.isActive(filter))]),\n            label: filter.value,\n            onClick: ($event) => _ctx.handleSelect(filter.value)\n          }, toDisplayString(filter.text), 11, [\"label\", \"onClick\"]);\n        }), 128))\n      ], 2))\n    ]),\n    default: withCtx(() => [\n      withDirectives((openBlock(), createElementBlock(\"span\", {\n        class: normalizeClass([\n          `${_ctx.ns.namespace.value}-table__column-filter-trigger`,\n          `${_ctx.ns.namespace.value}-none-outline`\n        ]),\n        onClick: _ctx.showFilterPanel\n      }, [\n        createVNode(_component_el_icon, null, {\n          default: withCtx(() => [\n            renderSlot(_ctx.$slots, \"filter-icon\", {}, () => {\n              var _a;\n              return [\n                ((_a = _ctx.column) == null ? void 0 : _a.filterOpened) ? (openBlock(), createBlock(_component_arrow_up, { key: 0 })) : (openBlock(), createBlock(_component_arrow_down, { key: 1 }))\n              ];\n            })\n          ]),\n          _: 3\n        })\n      ], 10, [\"onClick\"])), [\n        [_directive_click_outside, _ctx.hideFilterPanel, _ctx.popperPaneRef]\n      ])\n    ]),\n    _: 3\n  }, 8, [\"visible\", \"placement\", \"popper-class\", \"append-to\"]);\n}\nvar FilterPanel = /* @__PURE__ */ _export_sfc(_sfc_main, [[\"render\", _sfc_render], [\"__file\", \"filter-panel.vue\"]]);\n\nexport { FilterPanel as default };\n//# sourceMappingURL=filter-panel.mjs.map\n","import { getCurrentInstance, onBeforeMount, onMounted, onUpdated, onUnmounted, computed } from 'vue';\n\nfunction useLayoutObserver(root) {\n  const instance = getCurrentInstance();\n  onBeforeMount(() => {\n    tableLayout.value.addObserver(instance);\n  });\n  onMounted(() => {\n    onColumnsChange(tableLayout.value);\n    onScrollableChange(tableLayout.value);\n  });\n  onUpdated(() => {\n    onColumnsChange(tableLayout.value);\n    onScrollableChange(tableLayout.value);\n  });\n  onUnmounted(() => {\n    tableLayout.value.removeObserver(instance);\n  });\n  const tableLayout = computed(() => {\n    const layout = root.layout;\n    if (!layout) {\n      throw new Error(\"Can not find table layout.\");\n    }\n    return layout;\n  });\n  const onColumnsChange = (layout) => {\n    var _a;\n    const cols = ((_a = root.vnode.el) == null ? void 0 : _a.querySelectorAll(\"colgroup > col\")) || [];\n    if (!cols.length)\n      return;\n    const flattenColumns = layout.getFlattenColumns();\n    const columnsMap = {};\n    flattenColumns.forEach((column) => {\n      columnsMap[column.id] = column;\n    });\n    for (let i = 0, j = cols.length; i < j; i++) {\n      const col = cols[i];\n      const name = col.getAttribute(\"name\");\n      const column = columnsMap[name];\n      if (column) {\n        col.setAttribute(\"width\", column.realWidth || column.width);\n      }\n    }\n  };\n  const onScrollableChange = (layout) => {\n    var _a, _b;\n    const cols = ((_a = root.vnode.el) == null ? void 0 : _a.querySelectorAll(\"colgroup > col[name=gutter]\")) || [];\n    for (let i = 0, j = cols.length; i < j; i++) {\n      const col = cols[i];\n      col.setAttribute(\"width\", layout.scrollY.value ? layout.gutterWidth : \"0\");\n    }\n    const ths = ((_b = root.vnode.el) == null ? void 0 : _b.querySelectorAll(\"th.gutter\")) || [];\n    for (let i = 0, j = ths.length; i < j; i++) {\n      const th = ths[i];\n      th.style.width = layout.scrollY.value ? `${layout.gutterWidth}px` : \"0\";\n      th.style.display = layout.scrollY.value ? \"\" : \"none\";\n    }\n  };\n  return {\n    tableLayout: tableLayout.value,\n    onColumnsChange,\n    onScrollableChange\n  };\n}\n\nexport { useLayoutObserver as default };\n//# sourceMappingURL=layout-observer.mjs.map\n","const TABLE_INJECTION_KEY = Symbol(\"ElTable\");\n\nexport { TABLE_INJECTION_KEY };\n//# sourceMappingURL=tokens.mjs.map\n","import { inject, computed } from 'vue';\nimport { TABLE_INJECTION_KEY } from '../tokens.mjs';\n\nconst getAllColumns = (columns) => {\n  const result = [];\n  columns.forEach((column) => {\n    if (column.children) {\n      result.push(column);\n      result.push.apply(result, getAllColumns(column.children));\n    } else {\n      result.push(column);\n    }\n  });\n  return result;\n};\nconst convertToRows = (originColumns) => {\n  let maxLevel = 1;\n  const traverse = (column, parent) => {\n    if (parent) {\n      column.level = parent.level + 1;\n      if (maxLevel < column.level) {\n        maxLevel = column.level;\n      }\n    }\n    if (column.children) {\n      let colSpan = 0;\n      column.children.forEach((subColumn) => {\n        traverse(subColumn, column);\n        colSpan += subColumn.colSpan;\n      });\n      column.colSpan = colSpan;\n    } else {\n      column.colSpan = 1;\n    }\n  };\n  originColumns.forEach((column) => {\n    column.level = 1;\n    traverse(column, void 0);\n  });\n  const rows = [];\n  for (let i = 0; i < maxLevel; i++) {\n    rows.push([]);\n  }\n  const allColumns = getAllColumns(originColumns);\n  allColumns.forEach((column) => {\n    if (!column.children) {\n      column.rowSpan = maxLevel - column.level + 1;\n    } else {\n      column.rowSpan = 1;\n      column.children.forEach((col) => col.isSubColumn = true);\n    }\n    rows[column.level - 1].push(column);\n  });\n  return rows;\n};\nfunction useUtils(props) {\n  const parent = inject(TABLE_INJECTION_KEY);\n  const columnRows = computed(() => {\n    return convertToRows(props.store.states.originColumns.value);\n  });\n  const isGroup = computed(() => {\n    const result = columnRows.value.length > 1;\n    if (result && parent) {\n      parent.state.isGroup.value = true;\n    }\n    return result;\n  });\n  const toggleAllSelection = (event) => {\n    event.stopPropagation();\n    parent == null ? void 0 : parent.store.commit(\"toggleAllSelection\");\n  };\n  return {\n    isGroup,\n    toggleAllSelection,\n    columnRows\n  };\n}\n\nexport { convertToRows, useUtils as default };\n//# sourceMappingURL=utils-helper.mjs.map\n","import { defineComponent, getCurrentInstance, inject, ref, reactive, watch, onBeforeUnmount, onMounted, nextTick, h } from 'vue';\nimport { ElCheckbox } from '../../../checkbox/index.mjs';\nimport FilterPanel from '../filter-panel.mjs';\nimport useLayoutObserver from '../layout-observer.mjs';\nimport { TABLE_INJECTION_KEY } from '../tokens.mjs';\nimport useEvent from './event-helper.mjs';\nimport useStyle from './style.helper.mjs';\nimport useUtils from './utils-helper.mjs';\nimport { useNamespace } from '../../../../hooks/use-namespace/index.mjs';\n\nvar TableHeader = defineComponent({\n  name: \"ElTableHeader\",\n  components: {\n    ElCheckbox\n  },\n  props: {\n    fixed: {\n      type: String,\n      default: \"\"\n    },\n    store: {\n      required: true,\n      type: Object\n    },\n    border: Boolean,\n    defaultSort: {\n      type: Object,\n      default: () => {\n        return {\n          prop: \"\",\n          order: \"\"\n        };\n      }\n    },\n    appendFilterPanelTo: {\n      type: String\n    },\n    allowDragLastColumn: {\n      type: Boolean\n    }\n  },\n  setup(props, { emit }) {\n    const instance = getCurrentInstance();\n    const parent = inject(TABLE_INJECTION_KEY);\n    const ns = useNamespace(\"table\");\n    const filterPanels = ref({});\n    const { onColumnsChange, onScrollableChange } = useLayoutObserver(parent);\n    const isTableLayoutAuto = (parent == null ? void 0 : parent.props.tableLayout) === \"auto\";\n    const saveIndexSelection = reactive(/* @__PURE__ */ new Map());\n    const theadRef = ref();\n    let delayId;\n    const updateFixedColumnStyle = () => {\n      delayId = setTimeout(() => {\n        if (saveIndexSelection.size > 0) {\n          saveIndexSelection.forEach((column, key) => {\n            const el = theadRef.value.querySelector(`.${key.replace(/\\s/g, \".\")}`);\n            if (el) {\n              const width = el.getBoundingClientRect().width;\n              column.width = width || column.width;\n            }\n          });\n          saveIndexSelection.clear();\n        }\n      });\n    };\n    watch(saveIndexSelection, updateFixedColumnStyle);\n    onBeforeUnmount(() => {\n      if (delayId) {\n        clearTimeout(delayId);\n        delayId = void 0;\n      }\n    });\n    onMounted(async () => {\n      await nextTick();\n      await nextTick();\n      const { prop, order } = props.defaultSort;\n      parent == null ? void 0 : parent.store.commit(\"sort\", { prop, order, init: true });\n      updateFixedColumnStyle();\n    });\n    const {\n      handleHeaderClick,\n      handleHeaderContextMenu,\n      handleMouseDown,\n      handleMouseMove,\n      handleMouseOut,\n      handleSortClick,\n      handleFilterClick\n    } = useEvent(props, emit);\n    const {\n      getHeaderRowStyle,\n      getHeaderRowClass,\n      getHeaderCellStyle,\n      getHeaderCellClass\n    } = useStyle(props);\n    const { isGroup, toggleAllSelection, columnRows } = useUtils(props);\n    instance.state = {\n      onColumnsChange,\n      onScrollableChange\n    };\n    instance.filterPanels = filterPanels;\n    return {\n      ns,\n      filterPanels,\n      onColumnsChange,\n      onScrollableChange,\n      columnRows,\n      getHeaderRowClass,\n      getHeaderRowStyle,\n      getHeaderCellClass,\n      getHeaderCellStyle,\n      handleHeaderClick,\n      handleHeaderContextMenu,\n      handleMouseDown,\n      handleMouseMove,\n      handleMouseOut,\n      handleSortClick,\n      handleFilterClick,\n      isGroup,\n      toggleAllSelection,\n      saveIndexSelection,\n      isTableLayoutAuto,\n      theadRef,\n      updateFixedColumnStyle\n    };\n  },\n  render() {\n    const {\n      ns,\n      isGroup,\n      columnRows,\n      getHeaderCellStyle,\n      getHeaderCellClass,\n      getHeaderRowClass,\n      getHeaderRowStyle,\n      handleHeaderClick,\n      handleHeaderContextMenu,\n      handleMouseDown,\n      handleMouseMove,\n      handleSortClick,\n      handleMouseOut,\n      store,\n      $parent,\n      saveIndexSelection,\n      isTableLayoutAuto\n    } = this;\n    let rowSpan = 1;\n    return h(\"thead\", {\n      ref: \"theadRef\",\n      class: { [ns.is(\"group\")]: isGroup }\n    }, columnRows.map((subColumns, rowIndex) => h(\"tr\", {\n      class: getHeaderRowClass(rowIndex),\n      key: rowIndex,\n      style: getHeaderRowStyle(rowIndex)\n    }, subColumns.map((column, cellIndex) => {\n      if (column.rowSpan > rowSpan) {\n        rowSpan = column.rowSpan;\n      }\n      const _class = getHeaderCellClass(rowIndex, cellIndex, subColumns, column);\n      if (isTableLayoutAuto && column.fixed) {\n        saveIndexSelection.set(_class, column);\n      }\n      return h(\"th\", {\n        class: _class,\n        colspan: column.colSpan,\n        key: `${column.id}-thead`,\n        rowspan: column.rowSpan,\n        style: getHeaderCellStyle(rowIndex, cellIndex, subColumns, column),\n        onClick: ($event) => {\n          var _a;\n          if ((_a = $event.currentTarget) == null ? void 0 : _a.classList.contains(\"noclick\")) {\n            return;\n          }\n          handleHeaderClick($event, column);\n        },\n        onContextmenu: ($event) => handleHeaderContextMenu($event, column),\n        onMousedown: ($event) => handleMouseDown($event, column),\n        onMousemove: ($event) => handleMouseMove($event, column),\n        onMouseout: handleMouseOut\n      }, [\n        h(\"div\", {\n          class: [\n            \"cell\",\n            column.filteredValue && column.filteredValue.length > 0 ? \"highlight\" : \"\"\n          ]\n        }, [\n          column.renderHeader ? column.renderHeader({\n            column,\n            $index: cellIndex,\n            store,\n            _self: $parent\n          }) : column.label,\n          column.sortable && h(\"span\", {\n            onClick: ($event) => handleSortClick($event, column),\n            class: \"caret-wrapper\"\n          }, [\n            h(\"i\", {\n              onClick: ($event) => handleSortClick($event, column, \"ascending\"),\n              class: \"sort-caret ascending\"\n            }),\n            h(\"i\", {\n              onClick: ($event) => handleSortClick($event, column, \"descending\"),\n              class: \"sort-caret descending\"\n            })\n          ]),\n          column.filterable && h(FilterPanel, {\n            store,\n            placement: column.filterPlacement || \"bottom-start\",\n            appendTo: $parent == null ? void 0 : $parent.appendFilterPanelTo,\n            column,\n            upDataColumn: (key, value) => {\n              column[key] = value;\n            }\n          }, {\n            \"filter-icon\": () => column.renderFilterIcon ? column.renderFilterIcon({\n              filterOpened: column.filterOpened\n            }) : null\n          })\n        ])\n      ]);\n    }))));\n  }\n});\n\nexport { TableHeader as default };\n//# sourceMappingURL=index.mjs.map\n","import { getCurrentInstance, inject, ref } from 'vue';\nimport { isNull } from 'lodash-unified';\nimport { TABLE_INJECTION_KEY } from '../tokens.mjs';\nimport { isClient } from '@vueuse/core';\nimport { addClass, hasClass, removeClass } from '../../../../utils/dom/style.mjs';\nimport { isElement } from '../../../../utils/types.mjs';\n\nfunction useEvent(props, emit) {\n  const instance = getCurrentInstance();\n  const parent = inject(TABLE_INJECTION_KEY);\n  const handleFilterClick = (event) => {\n    event.stopPropagation();\n    return;\n  };\n  const handleHeaderClick = (event, column) => {\n    if (!column.filters && column.sortable) {\n      handleSortClick(event, column, false);\n    } else if (column.filterable && !column.sortable) {\n      handleFilterClick(event);\n    }\n    parent == null ? void 0 : parent.emit(\"header-click\", column, event);\n  };\n  const handleHeaderContextMenu = (event, column) => {\n    parent == null ? void 0 : parent.emit(\"header-contextmenu\", column, event);\n  };\n  const draggingColumn = ref(null);\n  const dragging = ref(false);\n  const dragState = ref();\n  const handleMouseDown = (event, column) => {\n    var _a, _b;\n    if (!isClient)\n      return;\n    if (column.children && column.children.length > 0)\n      return;\n    if (draggingColumn.value && props.border) {\n      dragging.value = true;\n      const table = parent;\n      emit(\"set-drag-visible\", true);\n      const tableEl = table == null ? void 0 : table.vnode.el;\n      const tableLeft = tableEl == null ? void 0 : tableEl.getBoundingClientRect().left;\n      const columnEl = (_b = (_a = instance == null ? void 0 : instance.vnode) == null ? void 0 : _a.el) == null ? void 0 : _b.querySelector(`th.${column.id}`);\n      const columnRect = columnEl.getBoundingClientRect();\n      const minLeft = columnRect.left - tableLeft + 30;\n      addClass(columnEl, \"noclick\");\n      dragState.value = {\n        startMouseLeft: event.clientX,\n        startLeft: columnRect.right - tableLeft,\n        startColumnLeft: columnRect.left - tableLeft,\n        tableLeft\n      };\n      const resizeProxy = table == null ? void 0 : table.refs.resizeProxy;\n      resizeProxy.style.left = `${dragState.value.startLeft}px`;\n      document.onselectstart = function() {\n        return false;\n      };\n      document.ondragstart = function() {\n        return false;\n      };\n      const handleMouseMove2 = (event2) => {\n        const deltaLeft = event2.clientX - dragState.value.startMouseLeft;\n        const proxyLeft = dragState.value.startLeft + deltaLeft;\n        resizeProxy.style.left = `${Math.max(minLeft, proxyLeft)}px`;\n      };\n      const handleMouseUp = () => {\n        if (dragging.value) {\n          const { startColumnLeft, startLeft } = dragState.value;\n          const finalLeft = Number.parseInt(resizeProxy.style.left, 10);\n          const columnWidth = finalLeft - startColumnLeft;\n          column.width = column.realWidth = columnWidth;\n          table == null ? void 0 : table.emit(\"header-dragend\", column.width, startLeft - startColumnLeft, column, event);\n          requestAnimationFrame(() => {\n            props.store.scheduleLayout(false, true);\n          });\n          document.body.style.cursor = \"\";\n          dragging.value = false;\n          draggingColumn.value = null;\n          dragState.value = void 0;\n          emit(\"set-drag-visible\", false);\n        }\n        document.removeEventListener(\"mousemove\", handleMouseMove2);\n        document.removeEventListener(\"mouseup\", handleMouseUp);\n        document.onselectstart = null;\n        document.ondragstart = null;\n        setTimeout(() => {\n          removeClass(columnEl, \"noclick\");\n        }, 0);\n      };\n      document.addEventListener(\"mousemove\", handleMouseMove2);\n      document.addEventListener(\"mouseup\", handleMouseUp);\n    }\n  };\n  const handleMouseMove = (event, column) => {\n    var _a;\n    if (column.children && column.children.length > 0)\n      return;\n    const el = event.target;\n    if (!isElement(el)) {\n      return;\n    }\n    const target = el == null ? void 0 : el.closest(\"th\");\n    if (!column || !column.resizable || !target)\n      return;\n    if (!dragging.value && props.border) {\n      const rect = target.getBoundingClientRect();\n      const bodyStyle = document.body.style;\n      const isLastTh = ((_a = target.parentNode) == null ? void 0 : _a.lastElementChild) === target;\n      const allowDarg = props.allowDragLastColumn || !isLastTh;\n      if (rect.width > 12 && rect.right - event.clientX < 8 && allowDarg) {\n        bodyStyle.cursor = \"col-resize\";\n        if (hasClass(target, \"is-sortable\")) {\n          target.style.cursor = \"col-resize\";\n        }\n        draggingColumn.value = column;\n      } else if (!dragging.value) {\n        bodyStyle.cursor = \"\";\n        if (hasClass(target, \"is-sortable\")) {\n          target.style.cursor = \"pointer\";\n        }\n        draggingColumn.value = null;\n      }\n    }\n  };\n  const handleMouseOut = () => {\n    if (!isClient)\n      return;\n    document.body.style.cursor = \"\";\n  };\n  const toggleOrder = ({ order, sortOrders }) => {\n    if (order === \"\")\n      return sortOrders[0];\n    const index = sortOrders.indexOf(order || null);\n    return sortOrders[index > sortOrders.length - 2 ? 0 : index + 1];\n  };\n  const handleSortClick = (event, column, givenOrder) => {\n    var _a;\n    event.stopPropagation();\n    const order = column.order === givenOrder ? null : givenOrder || toggleOrder(column);\n    const target = (_a = event.target) == null ? void 0 : _a.closest(\"th\");\n    if (target) {\n      if (hasClass(target, \"noclick\")) {\n        removeClass(target, \"noclick\");\n        return;\n      }\n    }\n    if (!column.sortable)\n      return;\n    const clickTarget = event.currentTarget;\n    if ([\"ascending\", \"descending\"].some((str) => hasClass(clickTarget, str) && !column.sortOrders.includes(str))) {\n      return;\n    }\n    const states = props.store.states;\n    let sortProp = states.sortProp.value;\n    let sortOrder;\n    const sortingColumn = states.sortingColumn.value;\n    if (sortingColumn !== column || sortingColumn === column && isNull(sortingColumn.order)) {\n      if (sortingColumn) {\n        sortingColumn.order = null;\n      }\n      states.sortingColumn.value = column;\n      sortProp = column.property;\n    }\n    if (!order) {\n      sortOrder = column.order = null;\n    } else {\n      sortOrder = column.order = order;\n    }\n    states.sortProp.value = sortProp;\n    states.sortOrder.value = sortOrder;\n    parent == null ? void 0 : parent.store.commit(\"changeSortCondition\");\n  };\n  return {\n    handleHeaderClick,\n    handleHeaderContextMenu,\n    handleMouseDown,\n    handleMouseMove,\n    handleMouseOut,\n    handleSortClick,\n    handleFilterClick\n  };\n}\n\nexport { useEvent as default };\n//# sourceMappingURL=event-helper.mjs.map\n","import { inject } from 'vue';\nimport { getFixedColumnOffset, ensurePosition, getFixedColumnsClass } from '../util.mjs';\nimport { TABLE_INJECTION_KEY } from '../tokens.mjs';\nimport { useNamespace } from '../../../../hooks/use-namespace/index.mjs';\nimport { isFunction, isString } from '@vue/shared';\n\nfunction useStyle(props) {\n  const parent = inject(TABLE_INJECTION_KEY);\n  const ns = useNamespace(\"table\");\n  const getHeaderRowStyle = (rowIndex) => {\n    const headerRowStyle = parent == null ? void 0 : parent.props.headerRowStyle;\n    if (isFunction(headerRowStyle)) {\n      return headerRowStyle.call(null, { rowIndex });\n    }\n    return headerRowStyle;\n  };\n  const getHeaderRowClass = (rowIndex) => {\n    const classes = [];\n    const headerRowClassName = parent == null ? void 0 : parent.props.headerRowClassName;\n    if (isString(headerRowClassName)) {\n      classes.push(headerRowClassName);\n    } else if (isFunction(headerRowClassName)) {\n      classes.push(headerRowClassName.call(null, { rowIndex }));\n    }\n    return classes.join(\" \");\n  };\n  const getHeaderCellStyle = (rowIndex, columnIndex, row, column) => {\n    var _a;\n    let headerCellStyles = (_a = parent == null ? void 0 : parent.props.headerCellStyle) != null ? _a : {};\n    if (isFunction(headerCellStyles)) {\n      headerCellStyles = headerCellStyles.call(null, {\n        rowIndex,\n        columnIndex,\n        row,\n        column\n      });\n    }\n    const fixedStyle = getFixedColumnOffset(columnIndex, column.fixed, props.store, row);\n    ensurePosition(fixedStyle, \"left\");\n    ensurePosition(fixedStyle, \"right\");\n    return Object.assign({}, headerCellStyles, fixedStyle);\n  };\n  const getHeaderCellClass = (rowIndex, columnIndex, row, column) => {\n    const fixedClasses = getFixedColumnsClass(ns.b(), columnIndex, column.fixed, props.store, row);\n    const classes = [\n      column.id,\n      column.order,\n      column.headerAlign,\n      column.className,\n      column.labelClassName,\n      ...fixedClasses\n    ];\n    if (!column.children) {\n      classes.push(\"is-leaf\");\n    }\n    if (column.sortable) {\n      classes.push(\"is-sortable\");\n    }\n    const headerCellClassName = parent == null ? void 0 : parent.props.headerCellClassName;\n    if (isString(headerCellClassName)) {\n      classes.push(headerCellClassName);\n    } else if (isFunction(headerCellClassName)) {\n      classes.push(headerCellClassName.call(null, {\n        rowIndex,\n        columnIndex,\n        row,\n        column\n      }));\n    }\n    classes.push(ns.e(\"cell\"));\n    return classes.filter((className) => Boolean(className)).join(\" \");\n  };\n  return {\n    getHeaderRowStyle,\n    getHeaderRowClass,\n    getHeaderCellStyle,\n    getHeaderCellClass\n  };\n}\n\nexport { useStyle as default };\n//# sourceMappingURL=style.helper.mjs.map\n","import { inject, ref, h } from 'vue';\nimport { debounce } from 'lodash-unified';\nimport { getCell, getColumnByCell, removePopper, createTablePopper } from '../util.mjs';\nimport { TABLE_INJECTION_KEY } from '../tokens.mjs';\nimport { hasClass, addClass, removeClass } from '../../../../utils/dom/style.mjs';\n\nfunction isGreaterThan(a, b, epsilon = 0.03) {\n  return a - b > epsilon;\n}\nfunction useEvents(props) {\n  const parent = inject(TABLE_INJECTION_KEY);\n  const tooltipContent = ref(\"\");\n  const tooltipTrigger = ref(h(\"div\"));\n  const handleEvent = (event, row, name) => {\n    var _a, _b, _c;\n    const table = parent;\n    const cell = getCell(event);\n    let column = null;\n    const namespace = (_a = table == null ? void 0 : table.vnode.el) == null ? void 0 : _a.dataset.prefix;\n    if (cell) {\n      column = getColumnByCell({\n        columns: (_c = (_b = props.store) == null ? void 0 : _b.states.columns.value) != null ? _c : []\n      }, cell, namespace);\n      if (column) {\n        table == null ? void 0 : table.emit(`cell-${name}`, row, column, cell, event);\n      }\n    }\n    table == null ? void 0 : table.emit(`row-${name}`, row, column, event);\n  };\n  const handleDoubleClick = (event, row) => {\n    handleEvent(event, row, \"dblclick\");\n  };\n  const handleClick = (event, row) => {\n    var _a;\n    (_a = props.store) == null ? void 0 : _a.commit(\"setCurrentRow\", row);\n    handleEvent(event, row, \"click\");\n  };\n  const handleContextMenu = (event, row) => {\n    handleEvent(event, row, \"contextmenu\");\n  };\n  const handleMouseEnter = debounce((index) => {\n    var _a;\n    (_a = props.store) == null ? void 0 : _a.commit(\"setHoverRow\", index);\n  }, 30);\n  const handleMouseLeave = debounce(() => {\n    var _a;\n    (_a = props.store) == null ? void 0 : _a.commit(\"setHoverRow\", null);\n  }, 30);\n  const getPadding = (el) => {\n    const style = window.getComputedStyle(el, null);\n    const paddingLeft = Number.parseInt(style.paddingLeft, 10) || 0;\n    const paddingRight = Number.parseInt(style.paddingRight, 10) || 0;\n    const paddingTop = Number.parseInt(style.paddingTop, 10) || 0;\n    const paddingBottom = Number.parseInt(style.paddingBottom, 10) || 0;\n    return {\n      left: paddingLeft,\n      right: paddingRight,\n      top: paddingTop,\n      bottom: paddingBottom\n    };\n  };\n  const toggleRowClassByCell = (rowSpan, event, toggle) => {\n    var _a;\n    let node = (_a = event == null ? void 0 : event.target) == null ? void 0 : _a.parentNode;\n    while (rowSpan > 1) {\n      node = node == null ? void 0 : node.nextSibling;\n      if (!node || node.nodeName !== \"TR\")\n        break;\n      toggle(node, \"hover-row hover-fixed-row\");\n      rowSpan--;\n    }\n  };\n  const handleCellMouseEnter = (event, row, tooltipOptions) => {\n    var _a, _b, _c, _d, _e, _f, _g, _h;\n    if (!parent)\n      return;\n    const table = parent;\n    const cell = getCell(event);\n    const namespace = (_a = table == null ? void 0 : table.vnode.el) == null ? void 0 : _a.dataset.prefix;\n    let column = null;\n    if (cell) {\n      column = getColumnByCell({\n        columns: (_c = (_b = props.store) == null ? void 0 : _b.states.columns.value) != null ? _c : []\n      }, cell, namespace);\n      if (!column) {\n        return;\n      }\n      if (cell.rowSpan > 1) {\n        toggleRowClassByCell(cell.rowSpan, event, addClass);\n      }\n      const hoverState = table.hoverState = {\n        cell,\n        column,\n        row\n      };\n      table == null ? void 0 : table.emit(\"cell-mouse-enter\", hoverState.row, hoverState.column, hoverState.cell, event);\n    }\n    if (!tooltipOptions) {\n      if (((_d = removePopper) == null ? void 0 : _d.trigger) === cell) {\n        (_e = removePopper) == null ? void 0 : _e();\n      }\n      return;\n    }\n    const cellChild = event.target.querySelector(\".cell\");\n    if (!(hasClass(cellChild, `${namespace}-tooltip`) && cellChild.childNodes.length)) {\n      return;\n    }\n    const range = document.createRange();\n    range.setStart(cellChild, 0);\n    range.setEnd(cellChild, cellChild.childNodes.length);\n    const { width: rangeWidth, height: rangeHeight } = range.getBoundingClientRect();\n    const { width: cellChildWidth, height: cellChildHeight } = cellChild.getBoundingClientRect();\n    const { top, left, right, bottom } = getPadding(cellChild);\n    const horizontalPadding = left + right;\n    const verticalPadding = top + bottom;\n    if (isGreaterThan(rangeWidth + horizontalPadding, cellChildWidth) || isGreaterThan(rangeHeight + verticalPadding, cellChildHeight) || isGreaterThan(cellChild.scrollWidth, cellChildWidth)) {\n      createTablePopper(tooltipOptions, (_f = (cell == null ? void 0 : cell.innerText) || (cell == null ? void 0 : cell.textContent)) != null ? _f : \"\", row, column, cell, table);\n    } else if (((_g = removePopper) == null ? void 0 : _g.trigger) === cell) {\n      (_h = removePopper) == null ? void 0 : _h();\n    }\n  };\n  const handleCellMouseLeave = (event) => {\n    const cell = getCell(event);\n    if (!cell)\n      return;\n    if (cell.rowSpan > 1) {\n      toggleRowClassByCell(cell.rowSpan, event, removeClass);\n    }\n    const oldHoverState = parent == null ? void 0 : parent.hoverState;\n    parent == null ? void 0 : parent.emit(\"cell-mouse-leave\", oldHoverState == null ? void 0 : oldHoverState.row, oldHoverState == null ? void 0 : oldHoverState.column, oldHoverState == null ? void 0 : oldHoverState.cell, event);\n  };\n  return {\n    handleDoubleClick,\n    handleClick,\n    handleContextMenu,\n    handleMouseEnter,\n    handleMouseLeave,\n    handleCellMouseEnter,\n    handleCellMouseLeave,\n    tooltipContent,\n    tooltipTrigger\n  };\n}\n\nexport { useEvents as default };\n//# sourceMappingURL=events-helper.mjs.map\n","import { defineComponent, openBlock, createElementBlock, renderSlot } from 'vue';\nimport _export_sfc from '../../../../_virtual/plugin-vue_export-helper.mjs';\n\nconst __default__ = defineComponent({\n  name: \"TableTdWrapper\"\n});\nconst _sfc_main = /* @__PURE__ */ defineComponent({\n  ...__default__,\n  props: {\n    colspan: {\n      type: Number,\n      default: 1\n    },\n    rowspan: {\n      type: Number,\n      default: 1\n    }\n  },\n  setup(__props) {\n    return (_ctx, _cache) => {\n      return openBlock(), createElementBlock(\"td\", {\n        colspan: __props.colspan,\n        rowspan: __props.rowspan\n      }, [\n        renderSlot(_ctx.$slots, \"default\")\n      ], 8, [\"colspan\", \"rowspan\"]);\n    };\n  }\n});\nvar TdWrapper = /* @__PURE__ */ _export_sfc(_sfc_main, [[\"__file\", \"td-wrapper.vue\"]]);\n\nexport { TdWrapper as default };\n//# sourceMappingURL=td-wrapper.mjs.map\n","import { inject, computed, h } from 'vue';\nimport { merge } from 'lodash-unified';\nimport { getRowIdentity } from '../util.mjs';\nimport { TABLE_INJECTION_KEY } from '../tokens.mjs';\nimport useEvents from './events-helper.mjs';\nimport useStyles from './styles-helper.mjs';\nimport TdWrapper from './td-wrapper.mjs';\nimport { useNamespace } from '../../../../hooks/use-namespace/index.mjs';\nimport { isBoolean, isPropAbsent } from '../../../../utils/types.mjs';\n\nfunction useRender(props) {\n  const parent = inject(TABLE_INJECTION_KEY);\n  const ns = useNamespace(\"table\");\n  const {\n    handleDoubleClick,\n    handleClick,\n    handleContextMenu,\n    handleMouseEnter,\n    handleMouseLeave,\n    handleCellMouseEnter,\n    handleCellMouseLeave,\n    tooltipContent,\n    tooltipTrigger\n  } = useEvents(props);\n  const {\n    getRowStyle,\n    getRowClass,\n    getCellStyle,\n    getCellClass,\n    getSpan,\n    getColspanRealWidth\n  } = useStyles(props);\n  let displayIndex = -1;\n  const firstDefaultColumnIndex = computed(() => {\n    var _a;\n    return (_a = props.store) == null ? void 0 : _a.states.columns.value.findIndex(({ type }) => type === \"default\");\n  });\n  const getKeyOfRow = (row, index) => {\n    var _a;\n    const rowKey = (_a = parent == null ? void 0 : parent.props) == null ? void 0 : _a.rowKey;\n    if (rowKey) {\n      return getRowIdentity(row, rowKey);\n    }\n    return index;\n  };\n  const rowRender = (row, $index, treeRowData, expanded = false) => {\n    const { tooltipEffect, tooltipOptions, store } = props;\n    const { indent, columns } = store.states;\n    const rowClasses = [];\n    let display = true;\n    if (treeRowData) {\n      rowClasses.push(ns.em(\"row\", `level-${treeRowData.level}`));\n      display = !!treeRowData.display;\n    }\n    if ($index === 0) {\n      displayIndex = -1;\n    }\n    if (props.stripe && display) {\n      displayIndex++;\n    }\n    rowClasses.push(...getRowClass(row, $index, displayIndex));\n    const displayStyle = display ? null : { display: \"none\" };\n    return h(\"tr\", {\n      style: [displayStyle, getRowStyle(row, $index)],\n      class: rowClasses,\n      key: getKeyOfRow(row, $index),\n      onDblclick: ($event) => handleDoubleClick($event, row),\n      onClick: ($event) => handleClick($event, row),\n      onContextmenu: ($event) => handleContextMenu($event, row),\n      onMouseenter: () => handleMouseEnter($index),\n      onMouseleave: handleMouseLeave\n    }, columns.value.map((column, cellIndex) => {\n      const { rowspan, colspan } = getSpan(row, column, $index, cellIndex);\n      if (!rowspan || !colspan) {\n        return null;\n      }\n      const columnData = Object.assign({}, column);\n      columnData.realWidth = getColspanRealWidth(columns.value, colspan, cellIndex);\n      const data = {\n        store,\n        _self: props.context || parent,\n        column: columnData,\n        row,\n        $index,\n        cellIndex,\n        expanded\n      };\n      if (cellIndex === firstDefaultColumnIndex.value && treeRowData) {\n        data.treeNode = {\n          indent: treeRowData.level && treeRowData.level * indent.value,\n          level: treeRowData.level\n        };\n        if (isBoolean(treeRowData.expanded)) {\n          data.treeNode.expanded = treeRowData.expanded;\n          if (\"loading\" in treeRowData) {\n            data.treeNode.loading = treeRowData.loading;\n          }\n          if (\"noLazyChildren\" in treeRowData) {\n            data.treeNode.noLazyChildren = treeRowData.noLazyChildren;\n          }\n        }\n      }\n      const baseKey = `${getKeyOfRow(row, $index)},${cellIndex}`;\n      const patchKey = columnData.columnKey || columnData.rawColumnKey || \"\";\n      const mergedTooltipOptions = column.showOverflowTooltip && merge({\n        effect: tooltipEffect\n      }, tooltipOptions, column.showOverflowTooltip);\n      return h(TdWrapper, {\n        style: getCellStyle($index, cellIndex, row, column),\n        class: getCellClass($index, cellIndex, row, column, colspan - 1),\n        key: `${patchKey}${baseKey}`,\n        rowspan,\n        colspan,\n        onMouseenter: ($event) => handleCellMouseEnter($event, row, mergedTooltipOptions),\n        onMouseleave: handleCellMouseLeave\n      }, {\n        default: () => cellChildren(cellIndex, column, data)\n      });\n    }));\n  };\n  const cellChildren = (_cellIndex, column, data) => {\n    return column.renderCell(data);\n  };\n  const wrappedRowRender = (row, $index) => {\n    const store = props.store;\n    const { isRowExpanded, assertRowKey } = store;\n    const { treeData, lazyTreeNodeMap, childrenColumnName, rowKey } = store.states;\n    const columns = store.states.columns.value;\n    const hasExpandColumn = columns.some(({ type }) => type === \"expand\");\n    if (hasExpandColumn) {\n      const expanded = isRowExpanded(row);\n      const tr = rowRender(row, $index, void 0, expanded);\n      const renderExpanded = parent == null ? void 0 : parent.renderExpanded;\n      if (!renderExpanded) {\n        console.error(\"[Element Error]renderExpanded is required.\");\n        return tr;\n      }\n      const rows = [[tr]];\n      if (parent.props.preserveExpandedContent || expanded) {\n        rows[0].push(h(\"tr\", {\n          key: `expanded-row__${tr.key}`,\n          style: { display: expanded ? \"\" : \"none\" }\n        }, [\n          h(\"td\", {\n            colspan: columns.length,\n            class: `${ns.e(\"cell\")} ${ns.e(\"expanded-cell\")}`\n          }, [renderExpanded({ row, $index, store, expanded })])\n        ]));\n      }\n      return rows;\n    } else if (Object.keys(treeData.value).length) {\n      assertRowKey();\n      const key = getRowIdentity(row, rowKey.value);\n      let cur = treeData.value[key];\n      let treeRowData = null;\n      if (cur) {\n        treeRowData = {\n          expanded: cur.expanded,\n          level: cur.level,\n          display: true,\n          noLazyChildren: void 0,\n          loading: void 0\n        };\n        if (isBoolean(cur.lazy)) {\n          if (treeRowData && isBoolean(cur.loaded) && cur.loaded) {\n            treeRowData.noLazyChildren = !(cur.children && cur.children.length);\n          }\n          treeRowData.loading = cur.loading;\n        }\n      }\n      const tmp = [rowRender(row, $index, treeRowData != null ? treeRowData : void 0)];\n      if (cur) {\n        let i = 0;\n        const traverse = (children, parent2) => {\n          if (!(children && children.length && parent2))\n            return;\n          children.forEach((node) => {\n            const innerTreeRowData = {\n              display: parent2.display && parent2.expanded,\n              level: parent2.level + 1,\n              expanded: false,\n              noLazyChildren: false,\n              loading: false\n            };\n            const childKey = getRowIdentity(node, rowKey.value);\n            if (isPropAbsent(childKey)) {\n              throw new Error(\"For nested data item, row-key is required.\");\n            }\n            cur = { ...treeData.value[childKey] };\n            if (cur) {\n              innerTreeRowData.expanded = cur.expanded;\n              cur.level = cur.level || innerTreeRowData.level;\n              cur.display = !!(cur.expanded && innerTreeRowData.display);\n              if (isBoolean(cur.lazy)) {\n                if (isBoolean(cur.loaded) && cur.loaded) {\n                  innerTreeRowData.noLazyChildren = !(cur.children && cur.children.length);\n                }\n                innerTreeRowData.loading = cur.loading;\n              }\n            }\n            i++;\n            tmp.push(rowRender(node, $index + i, innerTreeRowData));\n            if (cur) {\n              const nodes2 = lazyTreeNodeMap.value[childKey] || node[childrenColumnName.value];\n              traverse(nodes2, cur);\n            }\n          });\n        };\n        cur.display = true;\n        const nodes = lazyTreeNodeMap.value[key] || row[childrenColumnName.value];\n        traverse(nodes, cur);\n      }\n      return tmp;\n    } else {\n      return rowRender(row, $index, void 0);\n    }\n  };\n  return {\n    wrappedRowRender,\n    tooltipContent,\n    tooltipTrigger\n  };\n}\n\nexport { useRender as default };\n//# sourceMappingURL=render-helper.mjs.map\n","import { inject } from 'vue';\nimport { getFixedColumnOffset, ensurePosition, getFixedColumnsClass } from '../util.mjs';\nimport { TABLE_INJECTION_KEY } from '../tokens.mjs';\nimport { useNamespace } from '../../../../hooks/use-namespace/index.mjs';\nimport { isFunction, isString, isArray, isObject } from '@vue/shared';\n\nfunction useStyles(props) {\n  const parent = inject(TABLE_INJECTION_KEY);\n  const ns = useNamespace(\"table\");\n  const getRowStyle = (row, rowIndex) => {\n    const rowStyle = parent == null ? void 0 : parent.props.rowStyle;\n    if (isFunction(rowStyle)) {\n      return rowStyle.call(null, {\n        row,\n        rowIndex\n      });\n    }\n    return rowStyle || null;\n  };\n  const getRowClass = (row, rowIndex, displayIndex) => {\n    var _a;\n    const classes = [ns.e(\"row\")];\n    if ((parent == null ? void 0 : parent.props.highlightCurrentRow) && row === ((_a = props.store) == null ? void 0 : _a.states.currentRow.value)) {\n      classes.push(\"current-row\");\n    }\n    if (props.stripe && displayIndex % 2 === 1) {\n      classes.push(ns.em(\"row\", \"striped\"));\n    }\n    const rowClassName = parent == null ? void 0 : parent.props.rowClassName;\n    if (isString(rowClassName)) {\n      classes.push(rowClassName);\n    } else if (isFunction(rowClassName)) {\n      classes.push(rowClassName.call(null, {\n        row,\n        rowIndex\n      }));\n    }\n    return classes;\n  };\n  const getCellStyle = (rowIndex, columnIndex, row, column) => {\n    const cellStyle = parent == null ? void 0 : parent.props.cellStyle;\n    let cellStyles = cellStyle != null ? cellStyle : {};\n    if (isFunction(cellStyle)) {\n      cellStyles = cellStyle.call(null, {\n        rowIndex,\n        columnIndex,\n        row,\n        column\n      });\n    }\n    const fixedStyle = getFixedColumnOffset(columnIndex, props == null ? void 0 : props.fixed, props.store);\n    ensurePosition(fixedStyle, \"left\");\n    ensurePosition(fixedStyle, \"right\");\n    return Object.assign({}, cellStyles, fixedStyle);\n  };\n  const getCellClass = (rowIndex, columnIndex, row, column, offset) => {\n    const fixedClasses = getFixedColumnsClass(ns.b(), columnIndex, props == null ? void 0 : props.fixed, props.store, void 0, offset);\n    const classes = [column.id, column.align, column.className, ...fixedClasses];\n    const cellClassName = parent == null ? void 0 : parent.props.cellClassName;\n    if (isString(cellClassName)) {\n      classes.push(cellClassName);\n    } else if (isFunction(cellClassName)) {\n      classes.push(cellClassName.call(null, {\n        rowIndex,\n        columnIndex,\n        row,\n        column\n      }));\n    }\n    classes.push(ns.e(\"cell\"));\n    return classes.filter((className) => Boolean(className)).join(\" \");\n  };\n  const getSpan = (row, column, rowIndex, columnIndex) => {\n    let rowspan = 1;\n    let colspan = 1;\n    const fn = parent == null ? void 0 : parent.props.spanMethod;\n    if (isFunction(fn)) {\n      const result = fn({\n        row,\n        column,\n        rowIndex,\n        columnIndex\n      });\n      if (isArray(result)) {\n        rowspan = result[0];\n        colspan = result[1];\n      } else if (isObject(result)) {\n        rowspan = result.rowspan;\n        colspan = result.colspan;\n      }\n    }\n    return { rowspan, colspan };\n  };\n  const getColspanRealWidth = (columns, colspan, index) => {\n    if (colspan < 1) {\n      return columns[index].realWidth;\n    }\n    const widthArr = columns.map(({ realWidth, width }) => realWidth || width).slice(index, index + colspan);\n    return Number(widthArr.reduce((acc, width) => Number(acc) + Number(width), -1));\n  };\n  return {\n    getRowStyle,\n    getRowClass,\n    getCellStyle,\n    getCellClass,\n    getSpan,\n    getColspanRealWidth\n  };\n}\n\nexport { useStyles as default };\n//# sourceMappingURL=styles-helper.mjs.map\n","const defaultProps = {\n  store: {\n    required: true,\n    type: Object\n  },\n  stripe: Boolean,\n  tooltipEffect: String,\n  tooltipOptions: {\n    type: Object\n  },\n  context: {\n    default: () => ({}),\n    type: Object\n  },\n  rowClassName: [String, Function],\n  rowStyle: [Object, Function],\n  fixed: {\n    type: String,\n    default: \"\"\n  },\n  highlight: Boolean\n};\n\nexport { defaultProps as default };\n//# sourceMappingURL=defaults.mjs.map\n","import { defineComponent, getCurrentInstance, inject, watch, onUnmounted, h } from 'vue';\nimport useLayoutObserver from '../layout-observer.mjs';\nimport { removePopper } from '../util.mjs';\nimport { TABLE_INJECTION_KEY } from '../tokens.mjs';\nimport useRender from './render-helper.mjs';\nimport defaultProps from './defaults.mjs';\nimport { useNamespace } from '../../../../hooks/use-namespace/index.mjs';\nimport { addClass, removeClass } from '../../../../utils/dom/style.mjs';\nimport { isClient } from '@vueuse/core';\nimport { rAF } from '../../../../utils/raf.mjs';\n\nvar TableBody = defineComponent({\n  name: \"ElTableBody\",\n  props: defaultProps,\n  setup(props) {\n    var _a;\n    const instance = getCurrentInstance();\n    const parent = inject(TABLE_INJECTION_KEY);\n    const ns = useNamespace(\"table\");\n    const { wrappedRowRender, tooltipContent, tooltipTrigger } = useRender(props);\n    const { onColumnsChange, onScrollableChange } = useLayoutObserver(parent);\n    const hoveredCellList = [];\n    watch((_a = props.store) == null ? void 0 : _a.states.hoverRow, (newVal, oldVal) => {\n      var _a2, _b;\n      const el = instance == null ? void 0 : instance.vnode.el;\n      const rows = Array.from((el == null ? void 0 : el.children) || []).filter((e) => e == null ? void 0 : e.classList.contains(`${ns.e(\"row\")}`));\n      let rowNum = newVal;\n      const childNodes = (_a2 = rows[rowNum]) == null ? void 0 : _a2.childNodes;\n      if (childNodes == null ? void 0 : childNodes.length) {\n        let control = 0;\n        const indexes = Array.from(childNodes).reduce((acc, item, index) => {\n          var _a3, _b2;\n          if (((_a3 = childNodes[index]) == null ? void 0 : _a3.colSpan) > 1) {\n            control = (_b2 = childNodes[index]) == null ? void 0 : _b2.colSpan;\n          }\n          if (item.nodeName !== \"TD\" && control === 0) {\n            acc.push(index);\n          }\n          control > 0 && control--;\n          return acc;\n        }, []);\n        indexes.forEach((rowIndex) => {\n          var _a3;\n          rowNum = newVal;\n          while (rowNum > 0) {\n            const preChildNodes = (_a3 = rows[rowNum - 1]) == null ? void 0 : _a3.childNodes;\n            if (preChildNodes[rowIndex] && preChildNodes[rowIndex].nodeName === \"TD\" && preChildNodes[rowIndex].rowSpan > 1) {\n              addClass(preChildNodes[rowIndex], \"hover-cell\");\n              hoveredCellList.push(preChildNodes[rowIndex]);\n              break;\n            }\n            rowNum--;\n          }\n        });\n      } else {\n        hoveredCellList.forEach((item) => removeClass(item, \"hover-cell\"));\n        hoveredCellList.length = 0;\n      }\n      if (!((_b = props.store) == null ? void 0 : _b.states.isComplex.value) || !isClient)\n        return;\n      rAF(() => {\n        const oldRow = rows[oldVal];\n        const newRow = rows[newVal];\n        if (oldRow && !oldRow.classList.contains(\"hover-fixed-row\")) {\n          removeClass(oldRow, \"hover-row\");\n        }\n        if (newRow) {\n          addClass(newRow, \"hover-row\");\n        }\n      });\n    });\n    onUnmounted(() => {\n      var _a2;\n      (_a2 = removePopper) == null ? void 0 : _a2();\n    });\n    return {\n      ns,\n      onColumnsChange,\n      onScrollableChange,\n      wrappedRowRender,\n      tooltipContent,\n      tooltipTrigger\n    };\n  },\n  render() {\n    const { wrappedRowRender, store } = this;\n    const data = (store == null ? void 0 : store.states.data.value) || [];\n    return h(\"tbody\", { tabIndex: -1 }, [\n      data.reduce((acc, row) => {\n        return acc.concat(wrappedRowRender(row, acc.length));\n      }, [])\n    ]);\n  }\n});\n\nexport { TableBody as default };\n//# sourceMappingURL=index.mjs.map\n","import { getFixedColumnsClass, getFixedColumnOffset, ensurePosition } from '../util.mjs';\nimport useMapState from './mapState-helper.mjs';\nimport { useNamespace } from '../../../../hooks/use-namespace/index.mjs';\n\nfunction useStyle(props) {\n  const { columns } = useMapState();\n  const ns = useNamespace(\"table\");\n  const getCellClasses = (columns2, cellIndex) => {\n    const column = columns2[cellIndex];\n    const classes = [\n      ns.e(\"cell\"),\n      column.id,\n      column.align,\n      column.labelClassName,\n      ...getFixedColumnsClass(ns.b(), cellIndex, column.fixed, props.store)\n    ];\n    if (column.className) {\n      classes.push(column.className);\n    }\n    if (!column.children) {\n      classes.push(ns.is(\"leaf\"));\n    }\n    return classes;\n  };\n  const getCellStyles = (column, cellIndex) => {\n    const fixedStyle = getFixedColumnOffset(cellIndex, column.fixed, props.store);\n    ensurePosition(fixedStyle, \"left\");\n    ensurePosition(fixedStyle, \"right\");\n    return fixedStyle;\n  };\n  return {\n    getCellClasses,\n    getCellStyles,\n    columns\n  };\n}\n\nexport { useStyle as default };\n//# sourceMappingURL=style-helper.mjs.map\n","import { inject, computed } from 'vue';\nimport { TABLE_INJECTION_KEY } from '../tokens.mjs';\n\nfunction useMapState() {\n  const table = inject(TABLE_INJECTION_KEY);\n  const store = table == null ? void 0 : table.store;\n  const leftFixedLeafCount = computed(() => {\n    var _a;\n    return (_a = store == null ? void 0 : store.states.fixedLeafColumnsLength.value) != null ? _a : 0;\n  });\n  const rightFixedLeafCount = computed(() => {\n    var _a;\n    return (_a = store == null ? void 0 : store.states.rightFixedColumns.value.length) != null ? _a : 0;\n  });\n  const columnsCount = computed(() => {\n    var _a;\n    return (_a = store == null ? void 0 : store.states.columns.value.length) != null ? _a : 0;\n  });\n  const leftFixedCount = computed(() => {\n    var _a;\n    return (_a = store == null ? void 0 : store.states.fixedColumns.value.length) != null ? _a : 0;\n  });\n  const rightFixedCount = computed(() => {\n    var _a;\n    return (_a = store == null ? void 0 : store.states.rightFixedColumns.value.length) != null ? _a : 0;\n  });\n  return {\n    leftFixedLeafCount,\n    rightFixedLeafCount,\n    columnsCount,\n    leftFixedCount,\n    rightFixedCount,\n    columns: computed(() => {\n      var _a;\n      return (_a = store == null ? void 0 : store.states.columns.value) != null ? _a : [];\n    })\n  };\n}\n\nexport { useMapState as default };\n//# sourceMappingURL=mapState-helper.mjs.map\n","import { defineComponent, inject, h } from 'vue';\nimport useLayoutObserver from '../layout-observer.mjs';\nimport { TABLE_INJECTION_KEY } from '../tokens.mjs';\nimport useStyle from './style-helper.mjs';\nimport { useNamespace } from '../../../../hooks/use-namespace/index.mjs';\n\nvar TableFooter = defineComponent({\n  name: \"ElTableFooter\",\n  props: {\n    fixed: {\n      type: String,\n      default: \"\"\n    },\n    store: {\n      required: true,\n      type: Object\n    },\n    summaryMethod: Function,\n    sumText: String,\n    border: Boolean,\n    defaultSort: {\n      type: Object,\n      default: () => {\n        return {\n          prop: \"\",\n          order: \"\"\n        };\n      }\n    }\n  },\n  setup(props) {\n    const parent = inject(TABLE_INJECTION_KEY);\n    const ns = useNamespace(\"table\");\n    const { getCellClasses, getCellStyles, columns } = useStyle(props);\n    const { onScrollableChange, onColumnsChange } = useLayoutObserver(parent);\n    return {\n      ns,\n      onScrollableChange,\n      onColumnsChange,\n      getCellClasses,\n      getCellStyles,\n      columns\n    };\n  },\n  render() {\n    const { columns, getCellStyles, getCellClasses, summaryMethod, sumText } = this;\n    const data = this.store.states.data.value;\n    let sums = [];\n    if (summaryMethod) {\n      sums = summaryMethod({\n        columns,\n        data\n      });\n    } else {\n      columns.forEach((column, index) => {\n        if (index === 0) {\n          sums[index] = sumText;\n          return;\n        }\n        const values = data.map((item) => Number(item[column.property]));\n        const precisions = [];\n        let notNumber = true;\n        values.forEach((value) => {\n          if (!Number.isNaN(+value)) {\n            notNumber = false;\n            const decimal = `${value}`.split(\".\")[1];\n            precisions.push(decimal ? decimal.length : 0);\n          }\n        });\n        const precision = Math.max.apply(null, precisions);\n        if (!notNumber) {\n          sums[index] = values.reduce((prev, curr) => {\n            const value = Number(curr);\n            if (!Number.isNaN(+value)) {\n              return Number.parseFloat((prev + curr).toFixed(Math.min(precision, 20)));\n            } else {\n              return prev;\n            }\n          }, 0);\n        } else {\n          sums[index] = \"\";\n        }\n      });\n    }\n    return h(h(\"tfoot\", [\n      h(\"tr\", {}, [\n        ...columns.map((column, cellIndex) => h(\"td\", {\n          key: cellIndex,\n          colspan: column.colSpan,\n          rowspan: column.rowSpan,\n          class: getCellClasses(columns, cellIndex),\n          style: getCellStyles(column, cellIndex)\n        }, [\n          h(\"div\", {\n            class: [\"cell\", column.labelClassName]\n          }, [sums[cellIndex]])\n        ]))\n      ])\n    ]));\n  }\n});\n\nexport { TableFooter as default };\n//# sourceMappingURL=index.mjs.map\n","import { ref, watchEffect, watch, unref, computed, onMounted, nextTick } from 'vue';\nimport { useEventListener, useResizeObserver } from '@vueuse/core';\nimport { useFormSize } from '../../../form/src/hooks/use-form-common-props.mjs';\n\nfunction useStyle(props, layout, store, table) {\n  const isHidden = ref(false);\n  const renderExpanded = ref(null);\n  const resizeProxyVisible = ref(false);\n  const setDragVisible = (visible) => {\n    resizeProxyVisible.value = visible;\n  };\n  const resizeState = ref({\n    width: null,\n    height: null,\n    headerHeight: null\n  });\n  const isGroup = ref(false);\n  const scrollbarViewStyle = {\n    display: \"inline-block\",\n    verticalAlign: \"middle\"\n  };\n  const tableWidth = ref();\n  const tableScrollHeight = ref(0);\n  const bodyScrollHeight = ref(0);\n  const headerScrollHeight = ref(0);\n  const footerScrollHeight = ref(0);\n  const appendScrollHeight = ref(0);\n  watchEffect(() => {\n    var _a;\n    layout.setHeight((_a = props.height) != null ? _a : null);\n  });\n  watchEffect(() => {\n    var _a;\n    layout.setMaxHeight((_a = props.maxHeight) != null ? _a : null);\n  });\n  watch(() => [props.currentRowKey, store.states.rowKey], ([currentRowKey, rowKey]) => {\n    if (!unref(rowKey) || !unref(currentRowKey))\n      return;\n    store.setCurrentRowKey(`${currentRowKey}`);\n  }, {\n    immediate: true\n  });\n  watch(() => props.data, (data) => {\n    table.store.commit(\"setData\", data);\n  }, {\n    immediate: true,\n    deep: true\n  });\n  watchEffect(() => {\n    if (props.expandRowKeys) {\n      store.setExpandRowKeysAdapter(props.expandRowKeys);\n    }\n  });\n  const handleMouseLeave = () => {\n    table.store.commit(\"setHoverRow\", null);\n    if (table.hoverState)\n      table.hoverState = null;\n  };\n  const handleHeaderFooterMousewheel = (_event, data) => {\n    const { pixelX, pixelY } = data;\n    if (Math.abs(pixelX) >= Math.abs(pixelY)) {\n      table.refs.bodyWrapper.scrollLeft += data.pixelX / 5;\n    }\n  };\n  const shouldUpdateHeight = computed(() => {\n    return props.height || props.maxHeight || store.states.fixedColumns.value.length > 0 || store.states.rightFixedColumns.value.length > 0;\n  });\n  const tableBodyStyles = computed(() => {\n    return {\n      width: layout.bodyWidth.value ? `${layout.bodyWidth.value}px` : \"\"\n    };\n  });\n  const doLayout = () => {\n    if (shouldUpdateHeight.value) {\n      layout.updateElsHeight();\n    }\n    layout.updateColumnsWidth();\n    if (typeof window === \"undefined\")\n      return;\n    requestAnimationFrame(syncPosition);\n  };\n  onMounted(async () => {\n    await nextTick();\n    store.updateColumns();\n    bindEvents();\n    requestAnimationFrame(doLayout);\n    const el = table.vnode.el;\n    const tableHeader = table.refs.headerWrapper;\n    if (props.flexible && el && el.parentElement) {\n      el.parentElement.style.minWidth = \"0\";\n    }\n    resizeState.value = {\n      width: tableWidth.value = el.offsetWidth,\n      height: el.offsetHeight,\n      headerHeight: props.showHeader && tableHeader ? tableHeader.offsetHeight : null\n    };\n    store.states.columns.value.forEach((column) => {\n      if (column.filteredValue && column.filteredValue.length) {\n        table.store.commit(\"filterChange\", {\n          column,\n          values: column.filteredValue,\n          silent: true\n        });\n      }\n    });\n    table.$ready = true;\n  });\n  const setScrollClassByEl = (el, className) => {\n    if (!el)\n      return;\n    const classList = Array.from(el.classList).filter((item) => !item.startsWith(\"is-scrolling-\"));\n    classList.push(layout.scrollX.value ? className : \"is-scrolling-none\");\n    el.className = classList.join(\" \");\n  };\n  const setScrollClass = (className) => {\n    const { tableWrapper } = table.refs;\n    setScrollClassByEl(tableWrapper, className);\n  };\n  const hasScrollClass = (className) => {\n    const { tableWrapper } = table.refs;\n    return !!(tableWrapper && tableWrapper.classList.contains(className));\n  };\n  const syncPosition = function() {\n    if (!table.refs.scrollBarRef)\n      return;\n    if (!layout.scrollX.value) {\n      const scrollingNoneClass = \"is-scrolling-none\";\n      if (!hasScrollClass(scrollingNoneClass)) {\n        setScrollClass(scrollingNoneClass);\n      }\n      return;\n    }\n    const scrollContainer = table.refs.scrollBarRef.wrapRef;\n    if (!scrollContainer)\n      return;\n    const { scrollLeft, offsetWidth, scrollWidth } = scrollContainer;\n    const { headerWrapper, footerWrapper } = table.refs;\n    if (headerWrapper)\n      headerWrapper.scrollLeft = scrollLeft;\n    if (footerWrapper)\n      footerWrapper.scrollLeft = scrollLeft;\n    const maxScrollLeftPosition = scrollWidth - offsetWidth - 1;\n    if (scrollLeft >= maxScrollLeftPosition) {\n      setScrollClass(\"is-scrolling-right\");\n    } else if (scrollLeft === 0) {\n      setScrollClass(\"is-scrolling-left\");\n    } else {\n      setScrollClass(\"is-scrolling-middle\");\n    }\n  };\n  const bindEvents = () => {\n    if (!table.refs.scrollBarRef)\n      return;\n    if (table.refs.scrollBarRef.wrapRef) {\n      useEventListener(table.refs.scrollBarRef.wrapRef, \"scroll\", syncPosition, {\n        passive: true\n      });\n    }\n    if (props.fit) {\n      useResizeObserver(table.vnode.el, resizeListener);\n    } else {\n      useEventListener(window, \"resize\", resizeListener);\n    }\n    useResizeObserver(table.refs.bodyWrapper, () => {\n      var _a, _b;\n      resizeListener();\n      (_b = (_a = table.refs) == null ? void 0 : _a.scrollBarRef) == null ? void 0 : _b.update();\n    });\n  };\n  const resizeListener = () => {\n    var _a, _b, _c, _d;\n    const el = table.vnode.el;\n    if (!table.$ready || !el)\n      return;\n    let shouldUpdateLayout = false;\n    const {\n      width: oldWidth,\n      height: oldHeight,\n      headerHeight: oldHeaderHeight\n    } = resizeState.value;\n    const width = tableWidth.value = el.offsetWidth;\n    if (oldWidth !== width) {\n      shouldUpdateLayout = true;\n    }\n    const height = el.offsetHeight;\n    if ((props.height || shouldUpdateHeight.value) && oldHeight !== height) {\n      shouldUpdateLayout = true;\n    }\n    const tableHeader = props.tableLayout === \"fixed\" ? table.refs.headerWrapper : (_a = table.refs.tableHeaderRef) == null ? void 0 : _a.$el;\n    if (props.showHeader && (tableHeader == null ? void 0 : tableHeader.offsetHeight) !== oldHeaderHeight) {\n      shouldUpdateLayout = true;\n    }\n    tableScrollHeight.value = ((_b = table.refs.tableWrapper) == null ? void 0 : _b.scrollHeight) || 0;\n    headerScrollHeight.value = (tableHeader == null ? void 0 : tableHeader.scrollHeight) || 0;\n    footerScrollHeight.value = ((_c = table.refs.footerWrapper) == null ? void 0 : _c.offsetHeight) || 0;\n    appendScrollHeight.value = ((_d = table.refs.appendWrapper) == null ? void 0 : _d.offsetHeight) || 0;\n    bodyScrollHeight.value = tableScrollHeight.value - headerScrollHeight.value - footerScrollHeight.value - appendScrollHeight.value;\n    if (shouldUpdateLayout) {\n      resizeState.value = {\n        width,\n        height,\n        headerHeight: props.showHeader && (tableHeader == null ? void 0 : tableHeader.offsetHeight) || 0\n      };\n      doLayout();\n    }\n  };\n  const tableSize = useFormSize();\n  const bodyWidth = computed(() => {\n    const { bodyWidth: bodyWidth_, scrollY, gutterWidth } = layout;\n    return bodyWidth_.value ? `${bodyWidth_.value - (scrollY.value ? gutterWidth : 0)}px` : \"\";\n  });\n  const tableLayout = computed(() => {\n    if (props.maxHeight)\n      return \"fixed\";\n    return props.tableLayout;\n  });\n  const emptyBlockStyle = computed(() => {\n    if (props.data && props.data.length)\n      return;\n    let height = \"100%\";\n    if (props.height && bodyScrollHeight.value) {\n      height = `${bodyScrollHeight.value}px`;\n    }\n    const width = tableWidth.value;\n    return {\n      width: width ? `${width}px` : \"\",\n      height\n    };\n  });\n  const scrollbarStyle = computed(() => {\n    if (props.height) {\n      return {\n        height: \"100%\"\n      };\n    }\n    if (props.maxHeight) {\n      if (!Number.isNaN(Number(props.maxHeight))) {\n        return {\n          maxHeight: `${+props.maxHeight - headerScrollHeight.value - footerScrollHeight.value}px`\n        };\n      } else {\n        return {\n          maxHeight: `calc(${props.maxHeight} - ${headerScrollHeight.value + footerScrollHeight.value}px)`\n        };\n      }\n    }\n    return {};\n  });\n  return {\n    isHidden,\n    renderExpanded,\n    setDragVisible,\n    isGroup,\n    handleMouseLeave,\n    handleHeaderFooterMousewheel,\n    tableSize,\n    emptyBlockStyle,\n    resizeProxyVisible,\n    bodyWidth,\n    resizeState,\n    doLayout,\n    tableBodyStyles,\n    tableLayout,\n    scrollbarViewStyle,\n    scrollbarStyle\n  };\n}\n\nexport { useStyle as default };\n//# sourceMappingURL=style-helper.mjs.map\n","import { ref, onMounted, onUnmounted } from 'vue';\n\nfunction useKeyRender(table) {\n  const observer = ref();\n  const initWatchDom = () => {\n    const el = table.vnode.el;\n    const columnsWrapper = el.querySelector(\".hidden-columns\");\n    const config = { childList: true, subtree: true };\n    const updateOrderFns = table.store.states.updateOrderFns;\n    observer.value = new MutationObserver(() => {\n      updateOrderFns.forEach((fn) => fn());\n    });\n    observer.value.observe(columnsWrapper, config);\n  };\n  onMounted(() => {\n    initWatchDom();\n  });\n  onUnmounted(() => {\n    var _a;\n    (_a = observer.value) == null ? void 0 : _a.disconnect();\n  });\n}\n\nexport { useKeyRender as default };\n//# sourceMappingURL=key-render-helper.mjs.map\n","import { useSizeProp } from '../../../../hooks/use-size/index.mjs';\n\nvar defaultProps = {\n  data: {\n    type: Array,\n    default: () => []\n  },\n  size: useSizeProp,\n  width: [String, Number],\n  height: [String, Number],\n  maxHeight: [String, Number],\n  fit: {\n    type: Boolean,\n    default: true\n  },\n  stripe: Boolean,\n  border: Boolean,\n  rowKey: [String, Function],\n  showHeader: {\n    type: Boolean,\n    default: true\n  },\n  showSummary: Boolean,\n  sumText: String,\n  summaryMethod: Function,\n  rowClassName: [String, Function],\n  rowStyle: [Object, Function],\n  cellClassName: [String, Function],\n  cellStyle: [Object, Function],\n  headerRowClassName: [String, Function],\n  headerRowStyle: [Object, Function],\n  headerCellClassName: [String, Function],\n  headerCellStyle: [Object, Function],\n  highlightCurrentRow: Boolean,\n  currentRowKey: [String, Number],\n  emptyText: String,\n  expandRowKeys: Array,\n  defaultExpandAll: Boolean,\n  defaultSort: Object,\n  tooltipEffect: String,\n  tooltipOptions: Object,\n  spanMethod: Function,\n  selectOnIndeterminate: {\n    type: Boolean,\n    default: true\n  },\n  indent: {\n    type: Number,\n    default: 16\n  },\n  treeProps: {\n    type: Object,\n    default: () => {\n      return {\n        hasChildren: \"hasChildren\",\n        children: \"children\",\n        checkStrictly: false\n      };\n    }\n  },\n  lazy: Boolean,\n  load: Function,\n  style: {\n    type: Object,\n    default: () => ({})\n  },\n  className: {\n    type: String,\n    default: \"\"\n  },\n  tableLayout: {\n    type: String,\n    default: \"fixed\"\n  },\n  scrollbarAlwaysOn: Boolean,\n  flexible: Boolean,\n  showOverflowTooltip: [Boolean, Object],\n  tooltipFormatter: Function,\n  appendFilterPanelTo: String,\n  scrollbarTabindex: {\n    type: [Number, String],\n    default: void 0\n  },\n  allowDragLastColumn: {\n    type: Boolean,\n    default: true\n  },\n  preserveExpandedContent: Boolean,\n  nativeScrollbar: Boolean\n};\n\nexport { defaultProps as default };\n//# sourceMappingURL=defaults.mjs.map\n","import { h } from 'vue';\nimport { isUndefined } from '../../../utils/types.mjs';\n\nfunction hColgroup(props) {\n  const isAuto = props.tableLayout === \"auto\";\n  let columns = props.columns || [];\n  if (isAuto) {\n    if (columns.every(({ width }) => isUndefined(width))) {\n      columns = [];\n    }\n  }\n  const getPropsData = (column) => {\n    const propsData = {\n      key: `${props.tableLayout}_${column.id}`,\n      style: {},\n      name: void 0\n    };\n    if (isAuto) {\n      propsData.style = {\n        width: `${column.width}px`\n      };\n    } else {\n      propsData.name = column.id;\n    }\n    return propsData;\n  };\n  return h(\"colgroup\", {}, columns.map((column) => h(\"col\", getPropsData(column))));\n}\nhColgroup.props = [\"columns\", \"tableLayout\"];\n\nexport { hColgroup };\n//# sourceMappingURL=h-helper.mjs.map\n","var v=!1,o,f,s,u,d,N,l,p,m,w,D,x,E,M,F;function a(){if(!v){v=!0;var e=navigator.userAgent,n=/(?:MSIE.(\\d+\\.\\d+))|(?:(?:Firefox|GranParadiso|Iceweasel).(\\d+\\.\\d+))|(?:Opera(?:.+Version.|.)(\\d+\\.\\d+))|(?:AppleWebKit.(\\d+(?:\\.\\d+)?))|(?:Trident\\/\\d+\\.\\d+.*rv:(\\d+\\.\\d+))/.exec(e),i=/(Mac OS X)|(Windows)|(Linux)/.exec(e);if(x=/\\b(iPhone|iP[ao]d)/.exec(e),E=/\\b(iP[ao]d)/.exec(e),w=/Android/i.exec(e),M=/FBAN\\/\\w+;/i.exec(e),F=/Mobile/i.exec(e),D=!!/Win64/.exec(e),n){o=n[1]?parseFloat(n[1]):n[5]?parseFloat(n[5]):NaN,o&&document&&document.documentMode&&(o=document.documentMode);var r=/(?:Trident\\/(\\d+.\\d+))/.exec(e);N=r?parseFloat(r[1])+4:o,f=n[2]?parseFloat(n[2]):NaN,s=n[3]?parseFloat(n[3]):NaN,u=n[4]?parseFloat(n[4]):NaN,u?(n=/(?:Chrome\\/(\\d+\\.\\d+))/.exec(e),d=n&&n[1]?parseFloat(n[1]):NaN):d=NaN}else o=f=s=d=u=NaN;if(i){if(i[1]){var t=/(?:Mac OS X (\\d+(?:[._]\\d+)?))/.exec(e);l=t?parseFloat(t[1].replace(\"_\",\".\")):!0}else l=!1;p=!!i[2],m=!!i[3]}else l=p=m=!1}}var _={ie:function(){return a()||o},ieCompatibilityMode:function(){return a()||N>o},ie64:function(){return _.ie()&&D},firefox:function(){return a()||f},opera:function(){return a()||s},webkit:function(){return a()||u},safari:function(){return _.webkit()},chrome:function(){return a()||d},windows:function(){return a()||p},osx:function(){return a()||l},linux:function(){return a()||m},iphone:function(){return a()||x},mobile:function(){return a()||x||E||w||F},nativeApp:function(){return a()||M},android:function(){return a()||w},ipad:function(){return a()||E}},A=_;var c=!!(typeof window<\"u\"&&window.document&&window.document.createElement),U={canUseDOM:c,canUseWorkers:typeof Worker<\"u\",canUseEventListeners:c&&!!(window.addEventListener||window.attachEvent),canUseViewport:c&&!!window.screen,isInWorker:!c},h=U;var X;h.canUseDOM&&(X=document.implementation&&document.implementation.hasFeature&&document.implementation.hasFeature(\"\",\"\")!==!0);function S(e,n){if(!h.canUseDOM||n&&!(\"addEventListener\"in document))return!1;var i=\"on\"+e,r=i in document;if(!r){var t=document.createElement(\"div\");t.setAttribute(i,\"return;\"),r=typeof t[i]==\"function\"}return!r&&X&&e===\"wheel\"&&(r=document.implementation.hasFeature(\"Events.wheel\",\"3.0\")),r}var b=S;var O=10,I=40,P=800;function T(e){var n=0,i=0,r=0,t=0;return\"detail\"in e&&(i=e.detail),\"wheelDelta\"in e&&(i=-e.wheelDelta/120),\"wheelDeltaY\"in e&&(i=-e.wheelDeltaY/120),\"wheelDeltaX\"in e&&(n=-e.wheelDeltaX/120),\"axis\"in e&&e.axis===e.HORIZONTAL_AXIS&&(n=i,i=0),r=n*O,t=i*O,\"deltaY\"in e&&(t=e.deltaY),\"deltaX\"in e&&(r=e.deltaX),(r||t)&&e.deltaMode&&(e.deltaMode==1?(r*=I,t*=I):(r*=P,t*=P)),r&&!n&&(n=r<1?-1:1),t&&!i&&(i=t<1?-1:1),{spinX:n,spinY:i,pixelX:r,pixelY:t}}T.getEventType=function(){return A.firefox()?\"DOMMouseScroll\":b(\"wheel\")?\"wheel\":\"mousewheel\"};var Y=T;export{Y as default};\n/**\n * Checks if an event is supported in the current execution environment.\n *\n * NOTE: This will not work correctly for non-generic events such as `change`,\n * `reset`, `load`, `error`, and `select`.\n *\n * Borrows from Modernizr.\n *\n * @param {string} eventNameSuffix Event name, e.g. \"click\".\n * @param {?boolean} capture Check if the capture phase is supported.\n * @return {boolean} True if the event is supported.\n * @internal\n * @license Modernizr 3.0.0pre (Custom Build) | MIT\n */\n//# sourceMappingURL=index.mjs.map","import normalizeWheel from 'normalize-wheel-es';\n\nconst mousewheel = function(element, callback) {\n  if (element && element.addEventListener) {\n    const fn = function(event) {\n      const normalized = normalizeWheel(event);\n      callback && Reflect.apply(callback, this, [event, normalized]);\n    };\n    element.addEventListener(\"wheel\", fn, { passive: true });\n  }\n};\nconst Mousewheel = {\n  beforeMount(el, binding) {\n    mousewheel(el, binding.value);\n  }\n};\n\nexport { Mousewheel as default };\n//# sourceMappingURL=index.mjs.map\n","import { defineComponent, getCurrentInstance, provide, computed, onBeforeUnmount, resolveComponent, resolveDirective, openBlock, createElementBlock, normalizeClass, normalizeStyle, createElementVNode, renderSlot, withDirectives, createVNode, createCommentVNode, withCtx, createBlock, createTextVNode, toDisplayString, vShow } from 'vue';\nimport { debounce } from 'lodash-unified';\nimport { ElScrollbar } from '../../scrollbar/index.mjs';\nimport { createStore } from './store/helper.mjs';\nimport TableLayout from './table-layout.mjs';\nimport TableHeader from './table-header/index.mjs';\nimport TableBody from './table-body/index.mjs';\nimport TableFooter from './table-footer/index.mjs';\nimport useUtils from './table/utils-helper.mjs';\nimport { convertToRows } from './table-header/utils-helper.mjs';\nimport useStyle from './table/style-helper.mjs';\nimport useKeyRender from './table/key-render-helper.mjs';\nimport defaultProps from './table/defaults.mjs';\nimport { TABLE_INJECTION_KEY } from './tokens.mjs';\nimport { hColgroup } from './h-helper.mjs';\nimport { useScrollbar } from './composables/use-scrollbar.mjs';\nimport _export_sfc from '../../../_virtual/plugin-vue_export-helper.mjs';\nimport Mousewheel from '../../../directives/mousewheel/index.mjs';\nimport { useLocale } from '../../../hooks/use-locale/index.mjs';\nimport { useNamespace } from '../../../hooks/use-namespace/index.mjs';\n\nlet tableIdSeed = 1;\nconst _sfc_main = defineComponent({\n  name: \"ElTable\",\n  directives: {\n    Mousewheel\n  },\n  components: {\n    TableHeader,\n    TableBody,\n    TableFooter,\n    ElScrollbar,\n    hColgroup\n  },\n  props: defaultProps,\n  emits: [\n    \"select\",\n    \"select-all\",\n    \"selection-change\",\n    \"cell-mouse-enter\",\n    \"cell-mouse-leave\",\n    \"cell-contextmenu\",\n    \"cell-click\",\n    \"cell-dblclick\",\n    \"row-click\",\n    \"row-contextmenu\",\n    \"row-dblclick\",\n    \"header-click\",\n    \"header-contextmenu\",\n    \"sort-change\",\n    \"filter-change\",\n    \"current-change\",\n    \"header-dragend\",\n    \"expand-change\",\n    \"scroll\"\n  ],\n  setup(props) {\n    const { t } = useLocale();\n    const ns = useNamespace(\"table\");\n    const table = getCurrentInstance();\n    provide(TABLE_INJECTION_KEY, table);\n    const store = createStore(table, props);\n    table.store = store;\n    const layout = new TableLayout({\n      store: table.store,\n      table,\n      fit: props.fit,\n      showHeader: props.showHeader\n    });\n    table.layout = layout;\n    const isEmpty = computed(() => (store.states.data.value || []).length === 0);\n    const {\n      setCurrentRow,\n      getSelectionRows,\n      toggleRowSelection,\n      clearSelection,\n      clearFilter,\n      toggleAllSelection,\n      toggleRowExpansion,\n      clearSort,\n      sort,\n      updateKeyChildren\n    } = useUtils(store);\n    const {\n      isHidden,\n      renderExpanded,\n      setDragVisible,\n      isGroup,\n      handleMouseLeave,\n      handleHeaderFooterMousewheel,\n      tableSize,\n      emptyBlockStyle,\n      resizeProxyVisible,\n      bodyWidth,\n      resizeState,\n      doLayout,\n      tableBodyStyles,\n      tableLayout,\n      scrollbarViewStyle,\n      scrollbarStyle\n    } = useStyle(props, layout, store, table);\n    const { scrollBarRef, scrollTo, setScrollLeft, setScrollTop } = useScrollbar();\n    const debouncedUpdateLayout = debounce(doLayout, 50);\n    const tableId = `${ns.namespace.value}-table_${tableIdSeed++}`;\n    table.tableId = tableId;\n    table.state = {\n      isGroup,\n      resizeState,\n      doLayout,\n      debouncedUpdateLayout\n    };\n    const computedSumText = computed(() => {\n      var _a;\n      return (_a = props.sumText) != null ? _a : t(\"el.table.sumText\");\n    });\n    const computedEmptyText = computed(() => {\n      var _a;\n      return (_a = props.emptyText) != null ? _a : t(\"el.table.emptyText\");\n    });\n    const columns = computed(() => {\n      return convertToRows(store.states.originColumns.value)[0];\n    });\n    useKeyRender(table);\n    onBeforeUnmount(() => {\n      debouncedUpdateLayout.cancel();\n    });\n    return {\n      ns,\n      layout,\n      store,\n      columns,\n      handleHeaderFooterMousewheel,\n      handleMouseLeave,\n      tableId,\n      tableSize,\n      isHidden,\n      isEmpty,\n      renderExpanded,\n      resizeProxyVisible,\n      resizeState,\n      isGroup,\n      bodyWidth,\n      tableBodyStyles,\n      emptyBlockStyle,\n      debouncedUpdateLayout,\n      setCurrentRow,\n      getSelectionRows,\n      toggleRowSelection,\n      clearSelection,\n      clearFilter,\n      toggleAllSelection,\n      toggleRowExpansion,\n      clearSort,\n      doLayout,\n      sort,\n      updateKeyChildren,\n      t,\n      setDragVisible,\n      context: table,\n      computedSumText,\n      computedEmptyText,\n      tableLayout,\n      scrollbarViewStyle,\n      scrollbarStyle,\n      scrollBarRef,\n      scrollTo,\n      setScrollLeft,\n      setScrollTop,\n      allowDragLastColumn: props.allowDragLastColumn\n    };\n  }\n});\nfunction _sfc_render(_ctx, _cache, $props, $setup, $data, $options) {\n  const _component_hColgroup = resolveComponent(\"hColgroup\");\n  const _component_table_header = resolveComponent(\"table-header\");\n  const _component_table_body = resolveComponent(\"table-body\");\n  const _component_table_footer = resolveComponent(\"table-footer\");\n  const _component_el_scrollbar = resolveComponent(\"el-scrollbar\");\n  const _directive_mousewheel = resolveDirective(\"mousewheel\");\n  return openBlock(), createElementBlock(\"div\", {\n    ref: \"tableWrapper\",\n    class: normalizeClass([\n      {\n        [_ctx.ns.m(\"fit\")]: _ctx.fit,\n        [_ctx.ns.m(\"striped\")]: _ctx.stripe,\n        [_ctx.ns.m(\"border\")]: _ctx.border || _ctx.isGroup,\n        [_ctx.ns.m(\"hidden\")]: _ctx.isHidden,\n        [_ctx.ns.m(\"group\")]: _ctx.isGroup,\n        [_ctx.ns.m(\"fluid-height\")]: _ctx.maxHeight,\n        [_ctx.ns.m(\"scrollable-x\")]: _ctx.layout.scrollX.value,\n        [_ctx.ns.m(\"scrollable-y\")]: _ctx.layout.scrollY.value,\n        [_ctx.ns.m(\"enable-row-hover\")]: !_ctx.store.states.isComplex.value,\n        [_ctx.ns.m(\"enable-row-transition\")]: (_ctx.store.states.data.value || []).length !== 0 && (_ctx.store.states.data.value || []).length < 100,\n        \"has-footer\": _ctx.showSummary\n      },\n      _ctx.ns.m(_ctx.tableSize),\n      _ctx.className,\n      _ctx.ns.b(),\n      _ctx.ns.m(`layout-${_ctx.tableLayout}`)\n    ]),\n    style: normalizeStyle(_ctx.style),\n    \"data-prefix\": _ctx.ns.namespace.value,\n    onMouseleave: _ctx.handleMouseLeave\n  }, [\n    createElementVNode(\"div\", {\n      class: normalizeClass(_ctx.ns.e(\"inner-wrapper\"))\n    }, [\n      createElementVNode(\"div\", {\n        ref: \"hiddenColumns\",\n        class: \"hidden-columns\"\n      }, [\n        renderSlot(_ctx.$slots, \"default\")\n      ], 512),\n      _ctx.showHeader && _ctx.tableLayout === \"fixed\" ? withDirectives((openBlock(), createElementBlock(\"div\", {\n        key: 0,\n        ref: \"headerWrapper\",\n        class: normalizeClass(_ctx.ns.e(\"header-wrapper\"))\n      }, [\n        createElementVNode(\"table\", {\n          ref: \"tableHeader\",\n          class: normalizeClass(_ctx.ns.e(\"header\")),\n          style: normalizeStyle(_ctx.tableBodyStyles),\n          border: \"0\",\n          cellpadding: \"0\",\n          cellspacing: \"0\"\n        }, [\n          createVNode(_component_hColgroup, {\n            columns: _ctx.store.states.columns.value,\n            \"table-layout\": _ctx.tableLayout\n          }, null, 8, [\"columns\", \"table-layout\"]),\n          createVNode(_component_table_header, {\n            ref: \"tableHeaderRef\",\n            border: _ctx.border,\n            \"default-sort\": _ctx.defaultSort,\n            store: _ctx.store,\n            \"append-filter-panel-to\": _ctx.appendFilterPanelTo,\n            \"allow-drag-last-column\": _ctx.allowDragLastColumn,\n            onSetDragVisible: _ctx.setDragVisible\n          }, null, 8, [\"border\", \"default-sort\", \"store\", \"append-filter-panel-to\", \"allow-drag-last-column\", \"onSetDragVisible\"])\n        ], 6)\n      ], 2)), [\n        [_directive_mousewheel, _ctx.handleHeaderFooterMousewheel]\n      ]) : createCommentVNode(\"v-if\", true),\n      createElementVNode(\"div\", {\n        ref: \"bodyWrapper\",\n        class: normalizeClass(_ctx.ns.e(\"body-wrapper\"))\n      }, [\n        createVNode(_component_el_scrollbar, {\n          ref: \"scrollBarRef\",\n          \"view-style\": _ctx.scrollbarViewStyle,\n          \"wrap-style\": _ctx.scrollbarStyle,\n          always: _ctx.scrollbarAlwaysOn,\n          tabindex: _ctx.scrollbarTabindex,\n          native: _ctx.nativeScrollbar,\n          onScroll: ($event) => _ctx.$emit(\"scroll\", $event)\n        }, {\n          default: withCtx(() => [\n            createElementVNode(\"table\", {\n              ref: \"tableBody\",\n              class: normalizeClass(_ctx.ns.e(\"body\")),\n              cellspacing: \"0\",\n              cellpadding: \"0\",\n              border: \"0\",\n              style: normalizeStyle({\n                width: _ctx.bodyWidth,\n                tableLayout: _ctx.tableLayout\n              })\n            }, [\n              createVNode(_component_hColgroup, {\n                columns: _ctx.store.states.columns.value,\n                \"table-layout\": _ctx.tableLayout\n              }, null, 8, [\"columns\", \"table-layout\"]),\n              _ctx.showHeader && _ctx.tableLayout === \"auto\" ? (openBlock(), createBlock(_component_table_header, {\n                key: 0,\n                ref: \"tableHeaderRef\",\n                class: normalizeClass(_ctx.ns.e(\"body-header\")),\n                border: _ctx.border,\n                \"default-sort\": _ctx.defaultSort,\n                store: _ctx.store,\n                \"append-filter-panel-to\": _ctx.appendFilterPanelTo,\n                onSetDragVisible: _ctx.setDragVisible\n              }, null, 8, [\"class\", \"border\", \"default-sort\", \"store\", \"append-filter-panel-to\", \"onSetDragVisible\"])) : createCommentVNode(\"v-if\", true),\n              createVNode(_component_table_body, {\n                context: _ctx.context,\n                highlight: _ctx.highlightCurrentRow,\n                \"row-class-name\": _ctx.rowClassName,\n                \"tooltip-effect\": _ctx.tooltipEffect,\n                \"tooltip-options\": _ctx.tooltipOptions,\n                \"row-style\": _ctx.rowStyle,\n                store: _ctx.store,\n                stripe: _ctx.stripe\n              }, null, 8, [\"context\", \"highlight\", \"row-class-name\", \"tooltip-effect\", \"tooltip-options\", \"row-style\", \"store\", \"stripe\"]),\n              _ctx.showSummary && _ctx.tableLayout === \"auto\" ? (openBlock(), createBlock(_component_table_footer, {\n                key: 1,\n                class: normalizeClass(_ctx.ns.e(\"body-footer\")),\n                border: _ctx.border,\n                \"default-sort\": _ctx.defaultSort,\n                store: _ctx.store,\n                \"sum-text\": _ctx.computedSumText,\n                \"summary-method\": _ctx.summaryMethod\n              }, null, 8, [\"class\", \"border\", \"default-sort\", \"store\", \"sum-text\", \"summary-method\"])) : createCommentVNode(\"v-if\", true)\n            ], 6),\n            _ctx.isEmpty ? (openBlock(), createElementBlock(\"div\", {\n              key: 0,\n              ref: \"emptyBlock\",\n              style: normalizeStyle(_ctx.emptyBlockStyle),\n              class: normalizeClass(_ctx.ns.e(\"empty-block\"))\n            }, [\n              createElementVNode(\"span\", {\n                class: normalizeClass(_ctx.ns.e(\"empty-text\"))\n              }, [\n                renderSlot(_ctx.$slots, \"empty\", {}, () => [\n                  createTextVNode(toDisplayString(_ctx.computedEmptyText), 1)\n                ])\n              ], 2)\n            ], 6)) : createCommentVNode(\"v-if\", true),\n            _ctx.$slots.append ? (openBlock(), createElementBlock(\"div\", {\n              key: 1,\n              ref: \"appendWrapper\",\n              class: normalizeClass(_ctx.ns.e(\"append-wrapper\"))\n            }, [\n              renderSlot(_ctx.$slots, \"append\")\n            ], 2)) : createCommentVNode(\"v-if\", true)\n          ]),\n          _: 3\n        }, 8, [\"view-style\", \"wrap-style\", \"always\", \"tabindex\", \"native\", \"onScroll\"])\n      ], 2),\n      _ctx.showSummary && _ctx.tableLayout === \"fixed\" ? withDirectives((openBlock(), createElementBlock(\"div\", {\n        key: 1,\n        ref: \"footerWrapper\",\n        class: normalizeClass(_ctx.ns.e(\"footer-wrapper\"))\n      }, [\n        createElementVNode(\"table\", {\n          class: normalizeClass(_ctx.ns.e(\"footer\")),\n          cellspacing: \"0\",\n          cellpadding: \"0\",\n          border: \"0\",\n          style: normalizeStyle(_ctx.tableBodyStyles)\n        }, [\n          createVNode(_component_hColgroup, {\n            columns: _ctx.store.states.columns.value,\n            \"table-layout\": _ctx.tableLayout\n          }, null, 8, [\"columns\", \"table-layout\"]),\n          createVNode(_component_table_footer, {\n            border: _ctx.border,\n            \"default-sort\": _ctx.defaultSort,\n            store: _ctx.store,\n            \"sum-text\": _ctx.computedSumText,\n            \"summary-method\": _ctx.summaryMethod\n          }, null, 8, [\"border\", \"default-sort\", \"store\", \"sum-text\", \"summary-method\"])\n        ], 6)\n      ], 2)), [\n        [vShow, !_ctx.isEmpty],\n        [_directive_mousewheel, _ctx.handleHeaderFooterMousewheel]\n      ]) : createCommentVNode(\"v-if\", true),\n      _ctx.border || _ctx.isGroup ? (openBlock(), createElementBlock(\"div\", {\n        key: 2,\n        class: normalizeClass(_ctx.ns.e(\"border-left-patch\"))\n      }, null, 2)) : createCommentVNode(\"v-if\", true)\n    ], 2),\n    withDirectives(createElementVNode(\"div\", {\n      ref: \"resizeProxy\",\n      class: normalizeClass(_ctx.ns.e(\"column-resize-proxy\"))\n    }, null, 2), [\n      [vShow, _ctx.resizeProxyVisible]\n    ])\n  ], 46, [\"data-prefix\", \"onMouseleave\"]);\n}\nvar Table = /* @__PURE__ */ _export_sfc(_sfc_main, [[\"render\", _sfc_render], [\"__file\", \"table.vue\"]]);\n\nexport { Table as default };\n//# sourceMappingURL=table.mjs.map\n","function useUtils(store) {\n  const setCurrentRow = (row) => {\n    store.commit(\"setCurrentRow\", row);\n  };\n  const getSelectionRows = () => {\n    return store.getSelectionRows();\n  };\n  const toggleRowSelection = (row, selected, ignoreSelectable = true) => {\n    store.toggleRowSelection(row, selected, false, ignoreSelectable);\n    store.updateAllSelected();\n  };\n  const clearSelection = () => {\n    store.clearSelection();\n  };\n  const clearFilter = (columnKeys) => {\n    store.clearFilter(columnKeys);\n  };\n  const toggleAllSelection = () => {\n    store.commit(\"toggleAllSelection\");\n  };\n  const toggleRowExpansion = (row, expanded) => {\n    store.toggleRowExpansionAdapter(row, expanded);\n  };\n  const clearSort = () => {\n    store.clearSort();\n  };\n  const sort = (prop, order) => {\n    store.commit(\"sort\", { prop, order });\n  };\n  const updateKeyChildren = (key, data) => {\n    store.updateKeyChildren(key, data);\n  };\n  return {\n    setCurrentRow,\n    getSelectionRows,\n    toggleRowSelection,\n    clearSelection,\n    clearFilter,\n    toggleAllSelection,\n    toggleRowExpansion,\n    clearSort,\n    sort,\n    updateKeyChildren\n  };\n}\n\nexport { useUtils as default };\n//# sourceMappingURL=utils-helper.mjs.map\n","import { ref } from 'vue';\nimport { isNumber } from '../../../../utils/types.mjs';\n\nconst useScrollbar = () => {\n  const scrollBarRef = ref();\n  const scrollTo = (options, yCoord) => {\n    const scrollbar = scrollBarRef.value;\n    if (scrollbar) {\n      scrollbar.scrollTo(options, yCoord);\n    }\n  };\n  const setScrollPosition = (position, offset) => {\n    const scrollbar = scrollBarRef.value;\n    if (scrollbar && isNumber(offset) && [\"Top\", \"Left\"].includes(position)) {\n      scrollbar[`setScroll${position}`](offset);\n    }\n  };\n  const setScrollTop = (top) => setScrollPosition(\"Top\", top);\n  const setScrollLeft = (left) => setScrollPosition(\"Left\", left);\n  return {\n    scrollBarRef,\n    scrollTo,\n    setScrollTop,\n    setScrollLeft\n  };\n};\n\nexport { useScrollbar };\n//# sourceMappingURL=use-scrollbar.mjs.map\n","import { h } from 'vue';\nimport { ElCheckbox } from '../../checkbox/index.mjs';\nimport { ElIcon } from '../../icon/index.mjs';\nimport { ArrowRight, Loading } from '@element-plus/icons-vue';\nimport { isNumber, isBoolean } from '../../../utils/types.mjs';\nimport { isFunction } from '@vue/shared';\nimport { getProp } from '../../../utils/objects.mjs';\n\nconst defaultClassNames = {\n  selection: \"table-column--selection\",\n  expand: \"table__expand-column\"\n};\nconst cellStarts = {\n  default: {\n    order: \"\"\n  },\n  selection: {\n    width: 48,\n    minWidth: 48,\n    realWidth: 48,\n    order: \"\"\n  },\n  expand: {\n    width: 48,\n    minWidth: 48,\n    realWidth: 48,\n    order: \"\"\n  },\n  index: {\n    width: 48,\n    minWidth: 48,\n    realWidth: 48,\n    order: \"\"\n  }\n};\nconst getDefaultClassName = (type) => {\n  return defaultClassNames[type] || \"\";\n};\nconst cellForced = {\n  selection: {\n    renderHeader({\n      store,\n      column\n    }) {\n      var _a;\n      function isDisabled() {\n        return store.states.data.value && store.states.data.value.length === 0;\n      }\n      return h(ElCheckbox, {\n        disabled: isDisabled(),\n        size: store.states.tableSize.value,\n        indeterminate: store.states.selection.value.length > 0 && !store.states.isAllSelected.value,\n        \"onUpdate:modelValue\": (_a = store.toggleAllSelection) != null ? _a : void 0,\n        modelValue: store.states.isAllSelected.value,\n        ariaLabel: column.label\n      });\n    },\n    renderCell({\n      row,\n      column,\n      store,\n      $index\n    }) {\n      return h(ElCheckbox, {\n        disabled: column.selectable ? !column.selectable.call(null, row, $index) : false,\n        size: store.states.tableSize.value,\n        onChange: () => {\n          store.commit(\"rowSelectedChanged\", row);\n        },\n        onClick: (event) => event.stopPropagation(),\n        modelValue: store.isSelected(row),\n        ariaLabel: column.label\n      });\n    },\n    sortable: false,\n    resizable: false\n  },\n  index: {\n    renderHeader({\n      column\n    }) {\n      return column.label || \"#\";\n    },\n    renderCell({\n      column,\n      $index\n    }) {\n      let i = $index + 1;\n      const index = column.index;\n      if (isNumber(index)) {\n        i = $index + index;\n      } else if (isFunction(index)) {\n        i = index($index);\n      }\n      return h(\"div\", {}, [i]);\n    },\n    sortable: false\n  },\n  expand: {\n    renderHeader({\n      column\n    }) {\n      return column.label || \"\";\n    },\n    renderCell({\n      column,\n      row,\n      store,\n      expanded\n    }) {\n      const { ns } = store;\n      const classes = [ns.e(\"expand-icon\")];\n      if (!column.renderExpand && expanded) {\n        classes.push(ns.em(\"expand-icon\", \"expanded\"));\n      }\n      const callback = function(e) {\n        e.stopPropagation();\n        store.toggleRowExpansion(row);\n      };\n      return h(\"div\", {\n        class: classes,\n        onClick: callback\n      }, {\n        default: () => {\n          if (column.renderExpand) {\n            return [\n              column.renderExpand({\n                expanded\n              })\n            ];\n          }\n          return [\n            h(ElIcon, null, {\n              default: () => {\n                return [h(ArrowRight)];\n              }\n            })\n          ];\n        }\n      });\n    },\n    sortable: false,\n    resizable: false\n  }\n};\nfunction defaultRenderCell({\n  row,\n  column,\n  $index\n}) {\n  var _a;\n  const property = column.property;\n  const value = property && getProp(row, property).value;\n  if (column && column.formatter) {\n    return column.formatter(row, column, value, $index);\n  }\n  return ((_a = value == null ? void 0 : value.toString) == null ? void 0 : _a.call(value)) || \"\";\n}\nfunction treeCellPrefix({\n  row,\n  treeNode,\n  store\n}, createPlaceholder = false) {\n  const { ns } = store;\n  if (!treeNode) {\n    if (createPlaceholder) {\n      return [\n        h(\"span\", {\n          class: ns.e(\"placeholder\")\n        })\n      ];\n    }\n    return null;\n  }\n  const ele = [];\n  const callback = function(e) {\n    e.stopPropagation();\n    if (treeNode.loading) {\n      return;\n    }\n    store.loadOrToggle(row);\n  };\n  if (treeNode.indent) {\n    ele.push(h(\"span\", {\n      class: ns.e(\"indent\"),\n      style: { \"padding-left\": `${treeNode.indent}px` }\n    }));\n  }\n  if (isBoolean(treeNode.expanded) && !treeNode.noLazyChildren) {\n    const expandClasses = [\n      ns.e(\"expand-icon\"),\n      treeNode.expanded ? ns.em(\"expand-icon\", \"expanded\") : \"\"\n    ];\n    let icon = ArrowRight;\n    if (treeNode.loading) {\n      icon = Loading;\n    }\n    ele.push(h(\"div\", {\n      class: expandClasses,\n      onClick: callback\n    }, {\n      default: () => {\n        return [\n          h(ElIcon, { class: { [ns.is(\"loading\")]: treeNode.loading } }, {\n            default: () => [h(icon)]\n          })\n        ];\n      }\n    }));\n  } else {\n    ele.push(h(\"span\", {\n      class: ns.e(\"placeholder\")\n    }));\n  }\n  return ele;\n}\n\nexport { cellForced, cellStarts, defaultRenderCell, getDefaultClassName, treeCellPrefix };\n//# sourceMappingURL=config.mjs.map\n","import { getCurrentInstance, watch } from 'vue';\nimport { parseWidth, parseMinWidth } from '../util.mjs';\nimport { hasOwn } from '@vue/shared';\n\nfunction getAllAliases(props, aliases) {\n  return props.reduce((prev, cur) => {\n    prev[cur] = cur;\n    return prev;\n  }, aliases);\n}\nfunction useWatcher(owner, props_) {\n  const instance = getCurrentInstance();\n  const registerComplexWatchers = () => {\n    const props = [\"fixed\"];\n    const aliases = {\n      realWidth: \"width\",\n      realMinWidth: \"minWidth\"\n    };\n    const allAliases = getAllAliases(props, aliases);\n    Object.keys(allAliases).forEach((key) => {\n      const columnKey = aliases[key];\n      if (hasOwn(props_, columnKey)) {\n        watch(() => props_[columnKey], (newVal) => {\n          let value = newVal;\n          if (columnKey === \"width\" && key === \"realWidth\") {\n            value = parseWidth(newVal);\n          }\n          if (columnKey === \"minWidth\" && key === \"realMinWidth\") {\n            value = parseMinWidth(newVal);\n          }\n          instance.columnConfig.value[columnKey] = value;\n          instance.columnConfig.value[key] = value;\n          const updateColumns = columnKey === \"fixed\";\n          owner.value.store.scheduleLayout(updateColumns);\n        });\n      }\n    });\n  };\n  const registerNormalWatchers = () => {\n    const props = [\n      \"label\",\n      \"filters\",\n      \"filterMultiple\",\n      \"filteredValue\",\n      \"sortable\",\n      \"index\",\n      \"formatter\",\n      \"className\",\n      \"labelClassName\",\n      \"filterClassName\",\n      \"showOverflowTooltip\",\n      \"tooltipFormatter\"\n    ];\n    const parentProps = [\"showOverflowTooltip\"];\n    const aliases = {\n      property: \"prop\",\n      align: \"realAlign\",\n      headerAlign: \"realHeaderAlign\"\n    };\n    const allAliases = getAllAliases(props, aliases);\n    Object.keys(allAliases).forEach((key) => {\n      const columnKey = aliases[key];\n      if (hasOwn(props_, columnKey)) {\n        watch(() => props_[columnKey], (newVal) => {\n          instance.columnConfig.value[key] = newVal;\n        });\n      }\n    });\n    parentProps.forEach((key) => {\n      if (hasOwn(owner.value.props, key)) {\n        watch(() => owner.value.props[key], (newVal) => {\n          instance.columnConfig.value[key] = newVal;\n        });\n      }\n    });\n  };\n  return {\n    registerComplexWatchers,\n    registerNormalWatchers\n  };\n}\n\nexport { useWatcher as default };\n//# sourceMappingURL=watcher-helper.mjs.map\n","import { getCurrentInstance, ref, watchEffect, computed, unref, renderSlot, h, Comment } from 'vue';\nimport { cellForced, defaultRenderCell, treeCellPrefix, getDefaultClassName } from '../config.mjs';\nimport { parseWidth, parseMinWidth } from '../util.mjs';\nimport { useNamespace } from '../../../../hooks/use-namespace/index.mjs';\nimport { isUndefined } from '../../../../utils/types.mjs';\nimport { isArray } from '@vue/shared';\n\nfunction useRender(props, slots, owner) {\n  const instance = getCurrentInstance();\n  const columnId = ref(\"\");\n  const isSubColumn = ref(false);\n  const realAlign = ref();\n  const realHeaderAlign = ref();\n  const ns = useNamespace(\"table\");\n  watchEffect(() => {\n    realAlign.value = props.align ? `is-${props.align}` : null;\n    realAlign.value;\n  });\n  watchEffect(() => {\n    realHeaderAlign.value = props.headerAlign ? `is-${props.headerAlign}` : realAlign.value;\n    realHeaderAlign.value;\n  });\n  const columnOrTableParent = computed(() => {\n    let parent = instance.vnode.vParent || instance.parent;\n    while (parent && !parent.tableId && !parent.columnId) {\n      parent = parent.vnode.vParent || parent.parent;\n    }\n    return parent;\n  });\n  const hasTreeColumn = computed(() => {\n    const { store } = instance.parent;\n    if (!store)\n      return false;\n    const { treeData } = store.states;\n    const treeDataValue = treeData.value;\n    return treeDataValue && Object.keys(treeDataValue).length > 0;\n  });\n  const realWidth = ref(parseWidth(props.width));\n  const realMinWidth = ref(parseMinWidth(props.minWidth));\n  const setColumnWidth = (column) => {\n    if (realWidth.value)\n      column.width = realWidth.value;\n    if (realMinWidth.value) {\n      column.minWidth = realMinWidth.value;\n    }\n    if (!realWidth.value && realMinWidth.value) {\n      column.width = void 0;\n    }\n    if (!column.minWidth) {\n      column.minWidth = 80;\n    }\n    column.realWidth = Number(isUndefined(column.width) ? column.minWidth : column.width);\n    return column;\n  };\n  const setColumnForcedProps = (column) => {\n    const type = column.type;\n    const source = cellForced[type] || {};\n    Object.keys(source).forEach((prop) => {\n      const value = source[prop];\n      if (prop !== \"className\" && !isUndefined(value)) {\n        column[prop] = value;\n      }\n    });\n    const className = getDefaultClassName(type);\n    if (className) {\n      const forceClass = `${unref(ns.namespace)}-${className}`;\n      column.className = column.className ? `${column.className} ${forceClass}` : forceClass;\n    }\n    return column;\n  };\n  const checkSubColumn = (children) => {\n    if (isArray(children)) {\n      children.forEach((child) => check(child));\n    } else {\n      check(children);\n    }\n    function check(item) {\n      var _a;\n      if (((_a = item == null ? void 0 : item.type) == null ? void 0 : _a.name) === \"ElTableColumn\") {\n        item.vParent = instance;\n      }\n    }\n  };\n  const setColumnRenders = (column) => {\n    if (props.renderHeader) ; else if (column.type !== \"selection\") {\n      column.renderHeader = (scope) => {\n        instance.columnConfig.value[\"label\"];\n        return renderSlot(slots, \"header\", scope, () => [column.label]);\n      };\n    }\n    if (slots[\"filter-icon\"]) {\n      column.renderFilterIcon = (scope) => {\n        return renderSlot(slots, \"filter-icon\", scope);\n      };\n    }\n    if (slots.expand) {\n      column.renderExpand = (scope) => {\n        return renderSlot(slots, \"expand\", scope);\n      };\n    }\n    let originRenderCell = column.renderCell;\n    if (column.type === \"expand\") {\n      column.renderCell = (data) => h(\"div\", {\n        class: \"cell\"\n      }, [originRenderCell(data)]);\n      owner.value.renderExpanded = (row) => {\n        return slots.default ? slots.default(row) : slots.default;\n      };\n    } else {\n      originRenderCell = originRenderCell || defaultRenderCell;\n      column.renderCell = (data) => {\n        let children = null;\n        if (slots.default) {\n          const vnodes = slots.default(data);\n          children = vnodes.some((v) => v.type !== Comment) ? vnodes : originRenderCell(data);\n        } else {\n          children = originRenderCell(data);\n        }\n        const { columns } = owner.value.store.states;\n        const firstUserColumnIndex = columns.value.findIndex((item) => item.type === \"default\");\n        const shouldCreatePlaceholder = hasTreeColumn.value && data.cellIndex === firstUserColumnIndex;\n        const prefix = treeCellPrefix(data, shouldCreatePlaceholder);\n        const props2 = {\n          class: \"cell\",\n          style: {}\n        };\n        if (column.showOverflowTooltip) {\n          props2.class = `${props2.class} ${unref(ns.namespace)}-tooltip`;\n          props2.style = {\n            width: `${(data.column.realWidth || Number(data.column.width)) - 1}px`\n          };\n        }\n        checkSubColumn(children);\n        return h(\"div\", props2, [prefix, children]);\n      };\n    }\n    return column;\n  };\n  const getPropsData = (...propsKey) => {\n    return propsKey.reduce((prev, cur) => {\n      if (isArray(cur)) {\n        cur.forEach((key) => {\n          prev[key] = props[key];\n        });\n      }\n      return prev;\n    }, {});\n  };\n  const getColumnElIndex = (children, child) => {\n    return Array.prototype.indexOf.call(children, child);\n  };\n  const updateColumnOrder = () => {\n    owner.value.store.commit(\"updateColumnOrder\", instance.columnConfig.value);\n  };\n  return {\n    columnId,\n    realAlign,\n    isSubColumn,\n    realHeaderAlign,\n    columnOrTableParent,\n    setColumnWidth,\n    setColumnForcedProps,\n    setColumnRenders,\n    getPropsData,\n    getColumnElIndex,\n    updateColumnOrder\n  };\n}\n\nexport { useRender as default };\n//# sourceMappingURL=render-helper.mjs.map\n","var defaultProps = {\n  type: {\n    type: String,\n    default: \"default\"\n  },\n  label: String,\n  className: String,\n  labelClassName: String,\n  property: String,\n  prop: String,\n  width: {\n    type: [String, Number],\n    default: \"\"\n  },\n  minWidth: {\n    type: [String, Number],\n    default: \"\"\n  },\n  renderHeader: Function,\n  sortable: {\n    type: [Boolean, String],\n    default: false\n  },\n  sortMethod: Function,\n  sortBy: [String, Function, Array],\n  resizable: {\n    type: Boolean,\n    default: true\n  },\n  columnKey: String,\n  align: String,\n  headerAlign: String,\n  showOverflowTooltip: {\n    type: [Boolean, Object],\n    default: void 0\n  },\n  tooltipFormatter: Function,\n  fixed: [Boolean, String],\n  formatter: Function,\n  selectable: Function,\n  reserveSelection: Boolean,\n  filterMethod: Function,\n  filteredValue: Array,\n  filters: Array,\n  filterPlacement: String,\n  filterMultiple: {\n    type: Boolean,\n    default: true\n  },\n  filterClassName: String,\n  index: [Number, Function],\n  sortOrders: {\n    type: Array,\n    default: () => {\n      return [\"ascending\", \"descending\", null];\n    },\n    validator: (val) => {\n      return val.every((order) => [\"ascending\", \"descending\", null].includes(order));\n    }\n  }\n};\n\nexport { defaultProps as default };\n//# sourceMappingURL=defaults.mjs.map\n","import { defineComponent, getCurrentInstance, ref, computed, onBeforeMount, onMounted, onBeforeUnmount, Fragment, h } from 'vue';\nimport { ElCheckbox } from '../../../checkbox/index.mjs';\nimport { cellStarts } from '../config.mjs';\nimport { mergeOptions, compose } from '../util.mjs';\nimport useWatcher from './watcher-helper.mjs';\nimport useRender from './render-helper.mjs';\nimport defaultProps from './defaults.mjs';\nimport { isUndefined } from '../../../../utils/types.mjs';\nimport { isArray, isString } from '@vue/shared';\n\nlet columnIdSeed = 1;\nvar ElTableColumn = defineComponent({\n  name: \"ElTableColumn\",\n  components: {\n    ElCheckbox\n  },\n  props: defaultProps,\n  setup(props, { slots }) {\n    const instance = getCurrentInstance();\n    const columnConfig = ref({});\n    const owner = computed(() => {\n      let parent2 = instance.parent;\n      while (parent2 && !parent2.tableId) {\n        parent2 = parent2.parent;\n      }\n      return parent2;\n    });\n    const { registerNormalWatchers, registerComplexWatchers } = useWatcher(owner, props);\n    const {\n      columnId,\n      isSubColumn,\n      realHeaderAlign,\n      columnOrTableParent,\n      setColumnWidth,\n      setColumnForcedProps,\n      setColumnRenders,\n      getPropsData,\n      getColumnElIndex,\n      realAlign,\n      updateColumnOrder\n    } = useRender(props, slots, owner);\n    const parent = columnOrTableParent.value;\n    columnId.value = `${\"tableId\" in parent && parent.tableId || \"columnId\" in parent && parent.columnId}_column_${columnIdSeed++}`;\n    onBeforeMount(() => {\n      isSubColumn.value = owner.value !== parent;\n      const type = props.type || \"default\";\n      const sortable = props.sortable === \"\" ? true : props.sortable;\n      const showOverflowTooltip = type === \"selection\" ? false : isUndefined(props.showOverflowTooltip) ? parent.props.showOverflowTooltip : props.showOverflowTooltip;\n      const tooltipFormatter = isUndefined(props.tooltipFormatter) ? parent.props.tooltipFormatter : props.tooltipFormatter;\n      const defaults = {\n        ...cellStarts[type],\n        id: columnId.value,\n        type,\n        property: props.prop || props.property,\n        align: realAlign,\n        headerAlign: realHeaderAlign,\n        showOverflowTooltip,\n        tooltipFormatter,\n        filterable: props.filters || props.filterMethod,\n        filteredValue: [],\n        filterPlacement: \"\",\n        filterClassName: \"\",\n        isColumnGroup: false,\n        isSubColumn: false,\n        filterOpened: false,\n        sortable,\n        index: props.index,\n        rawColumnKey: instance.vnode.key\n      };\n      const basicProps = [\n        \"columnKey\",\n        \"label\",\n        \"className\",\n        \"labelClassName\",\n        \"type\",\n        \"renderHeader\",\n        \"formatter\",\n        \"fixed\",\n        \"resizable\"\n      ];\n      const sortProps = [\"sortMethod\", \"sortBy\", \"sortOrders\"];\n      const selectProps = [\"selectable\", \"reserveSelection\"];\n      const filterProps = [\n        \"filterMethod\",\n        \"filters\",\n        \"filterMultiple\",\n        \"filterOpened\",\n        \"filteredValue\",\n        \"filterPlacement\",\n        \"filterClassName\"\n      ];\n      let column = getPropsData(basicProps, sortProps, selectProps, filterProps);\n      column = mergeOptions(defaults, column);\n      const chains = compose(setColumnRenders, setColumnWidth, setColumnForcedProps);\n      column = chains(column);\n      columnConfig.value = column;\n      registerNormalWatchers();\n      registerComplexWatchers();\n    });\n    onMounted(() => {\n      var _a, _b;\n      const parent2 = columnOrTableParent.value;\n      const children = isSubColumn.value ? (_a = parent2.vnode.el) == null ? void 0 : _a.children : (_b = parent2.refs.hiddenColumns) == null ? void 0 : _b.children;\n      const getColumnIndex = () => getColumnElIndex(children || [], instance.vnode.el);\n      columnConfig.value.getColumnIndex = getColumnIndex;\n      const columnIndex = getColumnIndex();\n      columnIndex > -1 && owner.value.store.commit(\"insertColumn\", columnConfig.value, isSubColumn.value ? \"columnConfig\" in parent2 && parent2.columnConfig.value : null, updateColumnOrder);\n    });\n    onBeforeUnmount(() => {\n      const getColumnIndex = columnConfig.value.getColumnIndex;\n      const columnIndex = getColumnIndex ? getColumnIndex() : -1;\n      columnIndex > -1 && owner.value.store.commit(\"removeColumn\", columnConfig.value, isSubColumn.value ? \"columnConfig\" in parent && parent.columnConfig.value : null, updateColumnOrder);\n    });\n    instance.columnId = columnId.value;\n    instance.columnConfig = columnConfig;\n    return;\n  },\n  render() {\n    var _a, _b, _c;\n    try {\n      const renderDefault = (_b = (_a = this.$slots).default) == null ? void 0 : _b.call(_a, {\n        row: {},\n        column: {},\n        $index: -1\n      });\n      const children = [];\n      if (isArray(renderDefault)) {\n        for (const childNode of renderDefault) {\n          if (((_c = childNode.type) == null ? void 0 : _c.name) === \"ElTableColumn\" || childNode.shapeFlag & 2) {\n            children.push(childNode);\n          } else if (childNode.type === Fragment && isArray(childNode.children)) {\n            childNode.children.forEach((vnode2) => {\n              if ((vnode2 == null ? void 0 : vnode2.patchFlag) !== 1024 && !isString(vnode2 == null ? void 0 : vnode2.children)) {\n                children.push(vnode2);\n              }\n            });\n          }\n        }\n      }\n      const vnode = h(\"div\", children);\n      return vnode;\n    } catch (e) {\n      return h(\"div\", []);\n    }\n  }\n});\n\nexport { ElTableColumn as default };\n//# sourceMappingURL=index.mjs.map\n","import Table from './src/table.mjs';\nimport ElTableColumn$1 from './src/table-column/index.mjs';\nimport { withInstall, withNoopInstall } from '../../utils/vue/install.mjs';\n\nconst ElTable = withInstall(Table, {\n  TableColumn: ElTableColumn$1\n});\nconst ElTableColumn = withNoopInstall(ElTableColumn$1);\n\nexport { ElTable, ElTableColumn, ElTable as default };\n//# sourceMappingURL=index.mjs.map\n","const tabsRootContextKey = Symbol(\"tabsRootContextKey\");\n\nexport { tabsRootContextKey };\n//# sourceMappingURL=constants.mjs.map\n","import { buildProps, definePropType } from '../../../utils/vue/props/runtime.mjs';\nimport { mutable } from '../../../utils/typescript.mjs';\n\nconst tabBarProps = buildProps({\n  tabs: {\n    type: definePropType(Array),\n    default: () => mutable([])\n  },\n  tabRefs: {\n    type: definePropType(Object),\n    default: () => mutable({})\n  }\n});\n\nexport { tabBarProps };\n//# sourceMappingURL=tab-bar.mjs.map\n","import { defineComponent, inject, ref, watch, nextTick, onBeforeUnmount, openBlock, createElementBlock, normalizeClass, unref, normalizeStyle } from 'vue';\nimport { useResizeObserver } from '@vueuse/core';\nimport { tabsRootContextKey } from './constants.mjs';\nimport { tabBarProps } from './tab-bar.mjs';\nimport _export_sfc from '../../../_virtual/plugin-vue_export-helper.mjs';\nimport { capitalize } from '../../../utils/strings.mjs';\nimport { throwError } from '../../../utils/error.mjs';\nimport { useNamespace } from '../../../hooks/use-namespace/index.mjs';\nimport { isUndefined } from '../../../utils/types.mjs';\n\nconst COMPONENT_NAME = \"ElTabBar\";\nconst __default__ = defineComponent({\n  name: COMPONENT_NAME\n});\nconst _sfc_main = /* @__PURE__ */ defineComponent({\n  ...__default__,\n  props: tabBarProps,\n  setup(__props, { expose }) {\n    const props = __props;\n    const rootTabs = inject(tabsRootContextKey);\n    if (!rootTabs)\n      throwError(COMPONENT_NAME, \"<el-tabs><el-tab-bar /></el-tabs>\");\n    const ns = useNamespace(\"tabs\");\n    const barRef = ref();\n    const barStyle = ref();\n    const getBarStyle = () => {\n      let offset = 0;\n      let tabSize = 0;\n      const sizeName = [\"top\", \"bottom\"].includes(rootTabs.props.tabPosition) ? \"width\" : \"height\";\n      const sizeDir = sizeName === \"width\" ? \"x\" : \"y\";\n      const position = sizeDir === \"x\" ? \"left\" : \"top\";\n      props.tabs.every((tab) => {\n        if (isUndefined(tab.paneName))\n          return false;\n        const $el = props.tabRefs[tab.paneName];\n        if (!$el)\n          return false;\n        if (!tab.active) {\n          return true;\n        }\n        offset = $el[`offset${capitalize(position)}`];\n        tabSize = $el[`client${capitalize(sizeName)}`];\n        const tabStyles = window.getComputedStyle($el);\n        if (sizeName === \"width\") {\n          tabSize -= Number.parseFloat(tabStyles.paddingLeft) + Number.parseFloat(tabStyles.paddingRight);\n          offset += Number.parseFloat(tabStyles.paddingLeft);\n        }\n        return false;\n      });\n      return {\n        [sizeName]: `${tabSize}px`,\n        transform: `translate${capitalize(sizeDir)}(${offset}px)`\n      };\n    };\n    const update = () => barStyle.value = getBarStyle();\n    const tabObservers = [];\n    const observerTabs = () => {\n      tabObservers.forEach((observer) => observer.stop());\n      tabObservers.length = 0;\n      Object.values(props.tabRefs).forEach((tab) => {\n        tabObservers.push(useResizeObserver(tab, update));\n      });\n    };\n    watch(() => props.tabs, async () => {\n      await nextTick();\n      update();\n      observerTabs();\n    }, { immediate: true });\n    const barObserver = useResizeObserver(barRef, () => update());\n    onBeforeUnmount(() => {\n      tabObservers.forEach((observer) => observer.stop());\n      tabObservers.length = 0;\n      barObserver.stop();\n    });\n    expose({\n      ref: barRef,\n      update\n    });\n    return (_ctx, _cache) => {\n      return openBlock(), createElementBlock(\"div\", {\n        ref_key: \"barRef\",\n        ref: barRef,\n        class: normalizeClass([unref(ns).e(\"active-bar\"), unref(ns).is(unref(rootTabs).props.tabPosition)]),\n        style: normalizeStyle(barStyle.value)\n      }, null, 6);\n    };\n  }\n});\nvar TabBar = /* @__PURE__ */ _export_sfc(_sfc_main, [[\"__file\", \"tab-bar.vue\"]]);\n\nexport { TabBar as default };\n//# sourceMappingURL=tab-bar2.mjs.map\n","import { defineComponent, inject, ref, shallowRef, computed, watch, onMounted, onUpdated, triggerRef, createVNode, nextTick } from 'vue';\nimport { useDocumentVisibility, useWindowFocus, useElementSize, useResizeObserver } from '@vueuse/core';\nimport { ElIcon } from '../../icon/index.mjs';\nimport { ArrowLeft, ArrowRight, Close } from '@element-plus/icons-vue';\nimport useWheel from '../../virtual-list/src/hooks/use-wheel.mjs';\nimport { clamp } from 'lodash-unified';\nimport TabBar from './tab-bar2.mjs';\nimport { tabsRootContextKey } from './constants.mjs';\nimport { buildProps, definePropType } from '../../../utils/vue/props/runtime.mjs';\nimport { mutable } from '../../../utils/typescript.mjs';\nimport { throwError } from '../../../utils/error.mjs';\nimport { useNamespace } from '../../../hooks/use-namespace/index.mjs';\nimport { getEventCode } from '../../../utils/dom/event.mjs';\nimport { EVENT_CODE } from '../../../constants/aria.mjs';\nimport { capitalize } from '../../../utils/strings.mjs';\n\nconst tabNavProps = buildProps({\n  panes: {\n    type: definePropType(Array),\n    default: () => mutable([])\n  },\n  currentName: {\n    type: [String, Number],\n    default: \"\"\n  },\n  editable: Boolean,\n  type: {\n    type: String,\n    values: [\"card\", \"border-card\", \"\"],\n    default: \"\"\n  },\n  stretch: Boolean\n});\nconst tabNavEmits = {\n  tabClick: (tab, tabName, ev) => ev instanceof Event,\n  tabRemove: (tab, ev) => ev instanceof Event\n};\nconst COMPONENT_NAME = \"ElTabNav\";\nconst TabNav = defineComponent({\n  name: COMPONENT_NAME,\n  props: tabNavProps,\n  emits: tabNavEmits,\n  setup(props, {\n    expose,\n    emit\n  }) {\n    const rootTabs = inject(tabsRootContextKey);\n    if (!rootTabs)\n      throwError(COMPONENT_NAME, `<el-tabs><tab-nav /></el-tabs>`);\n    const ns = useNamespace(\"tabs\");\n    const visibility = useDocumentVisibility();\n    const focused = useWindowFocus();\n    const navScroll$ = ref();\n    const nav$ = ref();\n    const el$ = ref();\n    const tabRefsMap = ref({});\n    const tabBarRef = ref();\n    const scrollable = ref(false);\n    const navOffset = ref(0);\n    const isFocus = ref(false);\n    const focusable = ref(true);\n    const tracker = shallowRef();\n    const isHorizontal = computed(() => [\"top\", \"bottom\"].includes(rootTabs.props.tabPosition));\n    const sizeName = computed(() => isHorizontal.value ? \"width\" : \"height\");\n    const navStyle = computed(() => {\n      const dir = sizeName.value === \"width\" ? \"X\" : \"Y\";\n      return {\n        transform: `translate${dir}(-${navOffset.value}px)`\n      };\n    });\n    const {\n      width: navContainerWidth,\n      height: navContainerHeight\n    } = useElementSize(navScroll$);\n    const {\n      width: navWidth,\n      height: navHeight\n    } = useElementSize(nav$, {\n      width: 0,\n      height: 0\n    }, {\n      box: \"border-box\"\n    });\n    const navContainerSize = computed(() => isHorizontal.value ? navContainerWidth.value : navContainerHeight.value);\n    const navSize = computed(() => isHorizontal.value ? navWidth.value : navHeight.value);\n    const {\n      onWheel\n    } = useWheel({\n      atStartEdge: computed(() => navOffset.value <= 0),\n      atEndEdge: computed(() => navSize.value - navOffset.value <= navContainerSize.value),\n      layout: computed(() => isHorizontal.value ? \"horizontal\" : \"vertical\")\n    }, (offset) => {\n      navOffset.value = clamp(navOffset.value + offset, 0, navSize.value - navContainerSize.value);\n    });\n    const scrollPrev = () => {\n      if (!navScroll$.value)\n        return;\n      const containerSize = navScroll$.value[`offset${capitalize(sizeName.value)}`];\n      const currentOffset = navOffset.value;\n      if (!currentOffset)\n        return;\n      const newOffset = currentOffset > containerSize ? currentOffset - containerSize : 0;\n      navOffset.value = newOffset;\n    };\n    const scrollNext = () => {\n      if (!navScroll$.value || !nav$.value)\n        return;\n      const navSize2 = nav$.value[`offset${capitalize(sizeName.value)}`];\n      const containerSize = navScroll$.value[`offset${capitalize(sizeName.value)}`];\n      const currentOffset = navOffset.value;\n      if (navSize2 - currentOffset <= containerSize)\n        return;\n      const newOffset = navSize2 - currentOffset > containerSize * 2 ? currentOffset + containerSize : navSize2 - containerSize;\n      navOffset.value = newOffset;\n    };\n    const scrollToActiveTab = async () => {\n      const nav = nav$.value;\n      if (!scrollable.value || !el$.value || !navScroll$.value || !nav)\n        return;\n      await nextTick();\n      const activeTab = tabRefsMap.value[props.currentName];\n      if (!activeTab)\n        return;\n      const navScroll = navScroll$.value;\n      const activeTabBounding = activeTab.getBoundingClientRect();\n      const navScrollBounding = navScroll.getBoundingClientRect();\n      const maxOffset = isHorizontal.value ? nav.offsetWidth - navScrollBounding.width : nav.offsetHeight - navScrollBounding.height;\n      const currentOffset = navOffset.value;\n      let newOffset = currentOffset;\n      if (isHorizontal.value) {\n        if (activeTabBounding.left < navScrollBounding.left) {\n          newOffset = currentOffset - (navScrollBounding.left - activeTabBounding.left);\n        }\n        if (activeTabBounding.right > navScrollBounding.right) {\n          newOffset = currentOffset + activeTabBounding.right - navScrollBounding.right;\n        }\n      } else {\n        if (activeTabBounding.top < navScrollBounding.top) {\n          newOffset = currentOffset - (navScrollBounding.top - activeTabBounding.top);\n        }\n        if (activeTabBounding.bottom > navScrollBounding.bottom) {\n          newOffset = currentOffset + (activeTabBounding.bottom - navScrollBounding.bottom);\n        }\n      }\n      newOffset = Math.max(newOffset, 0);\n      navOffset.value = Math.min(newOffset, maxOffset);\n    };\n    const update = () => {\n      var _a;\n      if (!nav$.value || !navScroll$.value)\n        return;\n      props.stretch && ((_a = tabBarRef.value) == null ? void 0 : _a.update());\n      const navSize2 = nav$.value[`offset${capitalize(sizeName.value)}`];\n      const containerSize = navScroll$.value[`offset${capitalize(sizeName.value)}`];\n      const currentOffset = navOffset.value;\n      if (containerSize < navSize2) {\n        scrollable.value = scrollable.value || {};\n        scrollable.value.prev = currentOffset;\n        scrollable.value.next = currentOffset + containerSize < navSize2;\n        if (navSize2 - currentOffset < containerSize) {\n          navOffset.value = navSize2 - containerSize;\n        }\n      } else {\n        scrollable.value = false;\n        if (currentOffset > 0) {\n          navOffset.value = 0;\n        }\n      }\n    };\n    const changeTab = (event) => {\n      const code = getEventCode(event);\n      let step = 0;\n      switch (code) {\n        case EVENT_CODE.left:\n        case EVENT_CODE.up:\n          step = -1;\n          break;\n        case EVENT_CODE.right:\n        case EVENT_CODE.down:\n          step = 1;\n          break;\n        default:\n          return;\n      }\n      const tabList = Array.from(event.currentTarget.querySelectorAll(\"[role=tab]:not(.is-disabled)\"));\n      const currentIndex = tabList.indexOf(event.target);\n      let nextIndex = currentIndex + step;\n      if (nextIndex < 0) {\n        nextIndex = tabList.length - 1;\n      } else if (nextIndex >= tabList.length) {\n        nextIndex = 0;\n      }\n      tabList[nextIndex].focus({\n        preventScroll: true\n      });\n      tabList[nextIndex].click();\n      setFocus();\n    };\n    const setFocus = () => {\n      if (focusable.value)\n        isFocus.value = true;\n    };\n    const removeFocus = () => isFocus.value = false;\n    const setRefs = (el, key) => {\n      tabRefsMap.value[key] = el;\n    };\n    const focusActiveTab = async () => {\n      await nextTick();\n      const activeTab = tabRefsMap.value[props.currentName];\n      activeTab == null ? void 0 : activeTab.focus({\n        preventScroll: true\n      });\n    };\n    watch(visibility, (visibility2) => {\n      if (visibility2 === \"hidden\") {\n        focusable.value = false;\n      } else if (visibility2 === \"visible\") {\n        setTimeout(() => focusable.value = true, 50);\n      }\n    });\n    watch(focused, (focused2) => {\n      if (focused2) {\n        setTimeout(() => focusable.value = true, 50);\n      } else {\n        focusable.value = false;\n      }\n    });\n    useResizeObserver(el$, update);\n    onMounted(() => setTimeout(() => scrollToActiveTab(), 0));\n    onUpdated(() => update());\n    expose({\n      scrollToActiveTab,\n      removeFocus,\n      focusActiveTab,\n      tabListRef: nav$,\n      tabBarRef,\n      scheduleRender: () => triggerRef(tracker)\n    });\n    return () => {\n      const scrollBtn = scrollable.value ? [createVNode(\"span\", {\n        \"class\": [ns.e(\"nav-prev\"), ns.is(\"disabled\", !scrollable.value.prev)],\n        \"onClick\": scrollPrev\n      }, [createVNode(ElIcon, null, {\n        default: () => [createVNode(ArrowLeft, null, null)]\n      })]), createVNode(\"span\", {\n        \"class\": [ns.e(\"nav-next\"), ns.is(\"disabled\", !scrollable.value.next)],\n        \"onClick\": scrollNext\n      }, [createVNode(ElIcon, null, {\n        default: () => [createVNode(ArrowRight, null, null)]\n      })])] : null;\n      const tabs = props.panes.map((pane, index) => {\n        var _a, _b, _c, _d;\n        const uid = pane.uid;\n        const disabled = pane.props.disabled;\n        const tabName = (_b = (_a = pane.props.name) != null ? _a : pane.index) != null ? _b : `${index}`;\n        const closable = !disabled && (pane.isClosable || pane.props.closable !== false && props.editable);\n        pane.index = `${index}`;\n        const btnClose = closable ? createVNode(ElIcon, {\n          \"class\": \"is-icon-close\",\n          \"onClick\": (ev) => emit(\"tabRemove\", pane, ev)\n        }, {\n          default: () => [createVNode(Close, null, null)]\n        }) : null;\n        const tabLabelContent = ((_d = (_c = pane.slots).label) == null ? void 0 : _d.call(_c)) || pane.props.label;\n        const tabindex = !disabled && pane.active ? 0 : -1;\n        return createVNode(\"div\", {\n          \"ref\": (el) => setRefs(el, tabName),\n          \"class\": [ns.e(\"item\"), ns.is(rootTabs.props.tabPosition), ns.is(\"active\", pane.active), ns.is(\"disabled\", disabled), ns.is(\"closable\", closable), ns.is(\"focus\", isFocus.value)],\n          \"id\": `tab-${tabName}`,\n          \"key\": `tab-${uid}`,\n          \"aria-controls\": `pane-${tabName}`,\n          \"role\": \"tab\",\n          \"aria-selected\": pane.active,\n          \"tabindex\": tabindex,\n          \"onFocus\": () => setFocus(),\n          \"onBlur\": () => removeFocus(),\n          \"onClick\": (ev) => {\n            removeFocus();\n            emit(\"tabClick\", pane, tabName, ev);\n          },\n          \"onKeydown\": (ev) => {\n            const code = getEventCode(ev);\n            if (closable && (code === EVENT_CODE.delete || code === EVENT_CODE.backspace)) {\n              emit(\"tabRemove\", pane, ev);\n            }\n          }\n        }, [...[tabLabelContent, btnClose]]);\n      });\n      tracker.value;\n      return createVNode(\"div\", {\n        \"ref\": el$,\n        \"class\": [ns.e(\"nav-wrap\"), ns.is(\"scrollable\", !!scrollable.value), ns.is(rootTabs.props.tabPosition)]\n      }, [scrollBtn, createVNode(\"div\", {\n        \"class\": ns.e(\"nav-scroll\"),\n        \"ref\": navScroll$\n      }, [props.panes.length > 0 ? createVNode(\"div\", {\n        \"class\": [ns.e(\"nav\"), ns.is(rootTabs.props.tabPosition), ns.is(\"stretch\", props.stretch && [\"top\", \"bottom\"].includes(rootTabs.props.tabPosition))],\n        \"ref\": nav$,\n        \"style\": navStyle.value,\n        \"role\": \"tablist\",\n        \"onKeydown\": changeTab,\n        \"onWheel\": onWheel\n      }, [...[!props.type ? createVNode(TabBar, {\n        \"ref\": tabBarRef,\n        \"tabs\": [...props.panes],\n        \"tabRefs\": tabRefsMap.value\n      }, null) : null, tabs]]) : null])]);\n    };\n  }\n});\n\nexport { TabNav as default, tabNavEmits, tabNavProps };\n//# sourceMappingURL=tab-nav.mjs.map\n","import baseClamp from './_baseClamp.js';\nimport toNumber from './toNumber.js';\n\n/**\n * Clamps `number` within the inclusive `lower` and `upper` bounds.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Number\n * @param {number} number The number to clamp.\n * @param {number} [lower] The lower bound.\n * @param {number} upper The upper bound.\n * @returns {number} Returns the clamped number.\n * @example\n *\n * _.clamp(-10, -5, 5);\n * // => -5\n *\n * _.clamp(10, -5, 5);\n * // => 5\n */\nfunction clamp(number, lower, upper) {\n  if (upper === undefined) {\n    upper = lower;\n    lower = undefined;\n  }\n  if (upper !== undefined) {\n    upper = toNumber(upper);\n    upper = upper === upper ? upper : 0;\n  }\n  if (lower !== undefined) {\n    lower = toNumber(lower);\n    lower = lower === lower ? lower : 0;\n  }\n  return baseClamp(toNumber(number), lower, upper);\n}\n\nexport default clamp;\n","/**\n * The base implementation of `_.clamp` which doesn't coerce arguments.\n *\n * @private\n * @param {number} number The number to clamp.\n * @param {number} [lower] The lower bound.\n * @param {number} upper The upper bound.\n * @returns {number} Returns the clamped number.\n */\nfunction baseClamp(number, lower, upper) {\n  if (number === number) {\n    if (upper !== undefined) {\n      number = number <= upper ? number : upper;\n    }\n    if (lower !== undefined) {\n      number = number >= lower ? number : lower;\n    }\n  }\n  return number;\n}\n\nexport default baseClamp;\n","import { defineComponent, computed, getCurrentInstance, ref, watch, nextTick, provide, createVNode, renderSlot } from 'vue';\nimport { omit } from 'lodash-unified';\nimport { ElIcon } from '../../icon/index.mjs';\nimport { Plus } from '@element-plus/icons-vue';\nimport { tabsRootContextKey } from './constants.mjs';\nimport TabNav from './tab-nav.mjs';\nimport { buildProps, definePropType } from '../../../utils/vue/props/runtime.mjs';\nimport { UPDATE_MODEL_EVENT } from '../../../constants/event.mjs';\nimport { useNamespace } from '../../../hooks/use-namespace/index.mjs';\nimport { useOrderedChildren } from '../../../hooks/use-ordered-children/index.mjs';\nimport { isString } from '@vue/shared';\nimport { isNumber, isUndefined } from '../../../utils/types.mjs';\nimport { getEventCode } from '../../../utils/dom/event.mjs';\nimport { EVENT_CODE } from '../../../constants/aria.mjs';\n\nconst tabsProps = buildProps({\n  type: {\n    type: String,\n    values: [\"card\", \"border-card\", \"\"],\n    default: \"\"\n  },\n  closable: Boolean,\n  addable: Boolean,\n  modelValue: {\n    type: [String, Number]\n  },\n  editable: Boolean,\n  tabPosition: {\n    type: String,\n    values: [\"top\", \"right\", \"bottom\", \"left\"],\n    default: \"top\"\n  },\n  beforeLeave: {\n    type: definePropType(Function),\n    default: () => true\n  },\n  stretch: Boolean\n});\nconst isPaneName = (value) => isString(value) || isNumber(value);\nconst tabsEmits = {\n  [UPDATE_MODEL_EVENT]: (name) => isPaneName(name),\n  tabClick: (pane, ev) => ev instanceof Event,\n  tabChange: (name) => isPaneName(name),\n  edit: (paneName, action) => [\"remove\", \"add\"].includes(action),\n  tabRemove: (name) => isPaneName(name),\n  tabAdd: () => true\n};\nconst Tabs = defineComponent({\n  name: \"ElTabs\",\n  props: tabsProps,\n  emits: tabsEmits,\n  setup(props, {\n    emit,\n    slots,\n    expose\n  }) {\n    var _a;\n    const ns = useNamespace(\"tabs\");\n    const isVertical = computed(() => [\"left\", \"right\"].includes(props.tabPosition));\n    const {\n      children: panes,\n      addChild: registerPane,\n      removeChild: unregisterPane,\n      ChildrenSorter: PanesSorter\n    } = useOrderedChildren(getCurrentInstance(), \"ElTabPane\");\n    const nav$ = ref();\n    const currentName = ref((_a = props.modelValue) != null ? _a : \"0\");\n    const setCurrentName = async (value, trigger = false) => {\n      var _a2, _b, _c, _d;\n      if (currentName.value === value || isUndefined(value))\n        return;\n      try {\n        let canLeave;\n        if (props.beforeLeave) {\n          const result = props.beforeLeave(value, currentName.value);\n          canLeave = result instanceof Promise ? await result : result;\n        } else {\n          canLeave = true;\n        }\n        if (canLeave !== false) {\n          const isFocusInsidePane = (_a2 = panes.value.find((item) => item.paneName === currentName.value)) == null ? void 0 : _a2.isFocusInsidePane();\n          currentName.value = value;\n          if (trigger) {\n            emit(UPDATE_MODEL_EVENT, value);\n            emit(\"tabChange\", value);\n          }\n          (_c = (_b = nav$.value) == null ? void 0 : _b.removeFocus) == null ? void 0 : _c.call(_b);\n          if (isFocusInsidePane) {\n            (_d = nav$.value) == null ? void 0 : _d.focusActiveTab();\n          }\n        }\n      } catch (e) {\n      }\n    };\n    const handleTabClick = (tab, tabName, event) => {\n      if (tab.props.disabled)\n        return;\n      emit(\"tabClick\", tab, event);\n      setCurrentName(tabName, true);\n    };\n    const handleTabRemove = (pane, ev) => {\n      if (pane.props.disabled || isUndefined(pane.props.name))\n        return;\n      ev.stopPropagation();\n      emit(\"edit\", pane.props.name, \"remove\");\n      emit(\"tabRemove\", pane.props.name);\n    };\n    const handleTabAdd = () => {\n      emit(\"edit\", void 0, \"add\");\n      emit(\"tabAdd\");\n    };\n    const handleKeydown = (event) => {\n      const code = getEventCode(event);\n      if ([EVENT_CODE.enter, EVENT_CODE.numpadEnter].includes(code))\n        handleTabAdd();\n    };\n    const swapChildren = (vnode) => {\n      const actualFirstChild = vnode.el.firstChild;\n      const firstChild = [\"bottom\", \"right\"].includes(props.tabPosition) ? vnode.children[0].el : vnode.children[1].el;\n      if (actualFirstChild !== firstChild) {\n        actualFirstChild.before(firstChild);\n      }\n    };\n    watch(() => props.modelValue, (modelValue) => setCurrentName(modelValue));\n    watch(currentName, async () => {\n      var _a2;\n      await nextTick();\n      (_a2 = nav$.value) == null ? void 0 : _a2.scrollToActiveTab();\n    });\n    provide(tabsRootContextKey, {\n      props,\n      currentName,\n      registerPane,\n      unregisterPane,\n      nav$\n    });\n    expose({\n      currentName,\n      get tabNavRef() {\n        return omit(nav$.value, [\"scheduleRender\"]);\n      }\n    });\n    return () => {\n      const addSlot = slots[\"add-icon\"];\n      const newButton = props.editable || props.addable ? createVNode(\"div\", {\n        \"class\": [ns.e(\"new-tab\"), isVertical.value && ns.e(\"new-tab-vertical\")],\n        \"tabindex\": \"0\",\n        \"onClick\": handleTabAdd,\n        \"onKeydown\": handleKeydown\n      }, [addSlot ? renderSlot(slots, \"add-icon\") : createVNode(ElIcon, {\n        \"class\": ns.is(\"icon-plus\")\n      }, {\n        default: () => [createVNode(Plus, null, null)]\n      })]) : null;\n      const tabNav = () => createVNode(TabNav, {\n        \"ref\": nav$,\n        \"currentName\": currentName.value,\n        \"editable\": props.editable,\n        \"type\": props.type,\n        \"panes\": panes.value,\n        \"stretch\": props.stretch,\n        \"onTabClick\": handleTabClick,\n        \"onTabRemove\": handleTabRemove\n      }, null);\n      const header = createVNode(\"div\", {\n        \"class\": [ns.e(\"header\"), isVertical.value && ns.e(\"header-vertical\"), ns.is(props.tabPosition)]\n      }, [createVNode(PanesSorter, null, {\n        default: tabNav,\n        $stable: true\n      }), newButton]);\n      const panels = createVNode(\"div\", {\n        \"class\": ns.e(\"content\")\n      }, [renderSlot(slots, \"default\")]);\n      return createVNode(\"div\", {\n        \"class\": [ns.b(), ns.m(props.tabPosition), {\n          [ns.m(\"card\")]: props.type === \"card\",\n          [ns.m(\"border-card\")]: props.type === \"border-card\"\n        }],\n        \"onVnodeMounted\": swapChildren,\n        \"onVnodeUpdated\": swapChildren\n      }, [panels, header]);\n    };\n  }\n});\nvar Tabs$1 = Tabs;\n\nexport { Tabs$1 as default, tabsEmits, tabsProps };\n//# sourceMappingURL=tabs.mjs.map\n","import { buildProps } from '../../../utils/vue/props/runtime.mjs';\n\nconst tabPaneProps = buildProps({\n  label: {\n    type: String,\n    default: \"\"\n  },\n  name: {\n    type: [String, Number]\n  },\n  closable: {\n    type: Boolean,\n    default: void 0\n  },\n  disabled: Boolean,\n  lazy: Boolean\n});\n\nexport { tabPaneProps };\n//# sourceMappingURL=tab-pane.mjs.map\n","import { defineComponent, getCurrentInstance, useSlots, inject, ref, computed, watch, reactive, onBeforeUnmount, onBeforeUpdate, unref, withDirectives, openBlock, createElementBlock, normalizeClass, renderSlot, vShow, createCommentVNode } from 'vue';\nimport { eagerComputed } from '@vueuse/core';\nimport { tabsRootContextKey } from './constants.mjs';\nimport { tabPaneProps } from './tab-pane.mjs';\nimport _export_sfc from '../../../_virtual/plugin-vue_export-helper.mjs';\nimport { throwError } from '../../../utils/error.mjs';\nimport { useNamespace } from '../../../hooks/use-namespace/index.mjs';\n\nconst COMPONENT_NAME = \"ElTabPane\";\nconst __default__ = defineComponent({\n  name: COMPONENT_NAME\n});\nconst _sfc_main = /* @__PURE__ */ defineComponent({\n  ...__default__,\n  props: tabPaneProps,\n  setup(__props) {\n    const props = __props;\n    const instance = getCurrentInstance();\n    const slots = useSlots();\n    const tabsRoot = inject(tabsRootContextKey);\n    if (!tabsRoot)\n      throwError(COMPONENT_NAME, \"usage: <el-tabs><el-tab-pane /></el-tabs/>\");\n    const ns = useNamespace(\"tab-pane\");\n    const paneRef = ref();\n    const index = ref();\n    const isClosable = computed(() => {\n      var _a;\n      return (_a = props.closable) != null ? _a : tabsRoot.props.closable;\n    });\n    const active = eagerComputed(() => {\n      var _a;\n      return tabsRoot.currentName.value === ((_a = props.name) != null ? _a : index.value);\n    });\n    const loaded = ref(active.value);\n    const paneName = computed(() => {\n      var _a;\n      return (_a = props.name) != null ? _a : index.value;\n    });\n    const shouldBeRender = eagerComputed(() => !props.lazy || loaded.value || active.value);\n    const isFocusInsidePane = () => {\n      var _a;\n      return (_a = paneRef.value) == null ? void 0 : _a.contains(document.activeElement);\n    };\n    watch(active, (val) => {\n      if (val)\n        loaded.value = true;\n    });\n    const pane = reactive({\n      uid: instance.uid,\n      getVnode: () => instance.vnode,\n      slots,\n      props,\n      paneName,\n      active,\n      index,\n      isClosable,\n      isFocusInsidePane\n    });\n    tabsRoot.registerPane(pane);\n    onBeforeUnmount(() => {\n      tabsRoot.unregisterPane(pane);\n    });\n    onBeforeUpdate(() => {\n      var _a;\n      if (slots.label)\n        (_a = tabsRoot.nav$.value) == null ? void 0 : _a.scheduleRender();\n    });\n    return (_ctx, _cache) => {\n      return unref(shouldBeRender) ? withDirectives((openBlock(), createElementBlock(\"div\", {\n        key: 0,\n        id: `pane-${unref(paneName)}`,\n        ref_key: \"paneRef\",\n        ref: paneRef,\n        class: normalizeClass(unref(ns).b()),\n        role: \"tabpanel\",\n        \"aria-hidden\": !unref(active),\n        \"aria-labelledby\": `tab-${unref(paneName)}`\n      }, [\n        renderSlot(_ctx.$slots, \"default\")\n      ], 10, [\"id\", \"aria-hidden\", \"aria-labelledby\"])), [\n        [vShow, unref(active)]\n      ]) : createCommentVNode(\"v-if\", true);\n    };\n  }\n});\nvar TabPane = /* @__PURE__ */ _export_sfc(_sfc_main, [[\"__file\", \"tab-pane.vue\"]]);\n\nexport { TabPane as default };\n//# sourceMappingURL=tab-pane2.mjs.map\n","import Tabs from './src/tabs.mjs';\nexport { tabsEmits, tabsProps } from './src/tabs.mjs';\nimport TabPane from './src/tab-pane2.mjs';\nexport { tabBarProps } from './src/tab-bar.mjs';\nexport { tabNavEmits, tabNavProps } from './src/tab-nav.mjs';\nexport { tabPaneProps } from './src/tab-pane.mjs';\nexport { tabsRootContextKey } from './src/constants.mjs';\nimport { withInstall, withNoopInstall } from '../../utils/vue/install.mjs';\n\nconst ElTabs = withInstall(Tabs, {\n  TabPane\n});\nconst ElTabPane = withNoopInstall(TabPane);\n\nexport { ElTabPane, ElTabs, ElTabs as default };\n//# sourceMappingURL=index.mjs.map\n","import { buildProps, definePropType } from '../../../utils/vue/props/runtime.mjs';\nimport { iconPropType } from '../../../utils/vue/icon.mjs';\nimport { mutable } from '../../../utils/typescript.mjs';\nimport { isClient } from '@vueuse/core';\n\nconst messageTypes = [\n  \"primary\",\n  \"success\",\n  \"info\",\n  \"warning\",\n  \"error\"\n];\nconst messagePlacement = [\n  \"top\",\n  \"top-left\",\n  \"top-right\",\n  \"bottom\",\n  \"bottom-left\",\n  \"bottom-right\"\n];\nconst MESSAGE_DEFAULT_PLACEMENT = \"top\";\nconst messageDefaults = mutable({\n  customClass: \"\",\n  dangerouslyUseHTMLString: false,\n  duration: 3e3,\n  icon: void 0,\n  id: \"\",\n  message: \"\",\n  onClose: void 0,\n  showClose: false,\n  type: \"info\",\n  plain: false,\n  offset: 16,\n  placement: void 0,\n  zIndex: 0,\n  grouping: false,\n  repeatNum: 1,\n  appendTo: isClient ? document.body : void 0\n});\nconst messageProps = buildProps({\n  customClass: {\n    type: String,\n    default: messageDefaults.customClass\n  },\n  dangerouslyUseHTMLString: {\n    type: Boolean,\n    default: messageDefaults.dangerouslyUseHTMLString\n  },\n  duration: {\n    type: Number,\n    default: messageDefaults.duration\n  },\n  icon: {\n    type: iconPropType,\n    default: messageDefaults.icon\n  },\n  id: {\n    type: String,\n    default: messageDefaults.id\n  },\n  message: {\n    type: definePropType([\n      String,\n      Object,\n      Function\n    ]),\n    default: messageDefaults.message\n  },\n  onClose: {\n    type: definePropType(Function),\n    default: messageDefaults.onClose\n  },\n  showClose: {\n    type: Boolean,\n    default: messageDefaults.showClose\n  },\n  type: {\n    type: String,\n    values: messageTypes,\n    default: messageDefaults.type\n  },\n  plain: {\n    type: Boolean,\n    default: messageDefaults.plain\n  },\n  offset: {\n    type: Number,\n    default: messageDefaults.offset\n  },\n  placement: {\n    type: String,\n    values: messagePlacement,\n    default: messageDefaults.placement\n  },\n  zIndex: {\n    type: Number,\n    default: messageDefaults.zIndex\n  },\n  grouping: {\n    type: Boolean,\n    default: messageDefaults.grouping\n  },\n  repeatNum: {\n    type: Number,\n    default: messageDefaults.repeatNum\n  }\n});\nconst messageEmits = {\n  destroy: () => true\n};\n\nexport { MESSAGE_DEFAULT_PLACEMENT, messageDefaults, messageEmits, messagePlacement, messageProps, messageTypes };\n//# sourceMappingURL=message.mjs.map\n","import { shallowReactive } from 'vue';\n\nconst placementInstances = shallowReactive({});\nconst getOrCreatePlacementInstances = (placement) => {\n  if (!placementInstances[placement]) {\n    placementInstances[placement] = shallowReactive([]);\n  }\n  return placementInstances[placement];\n};\nconst getInstance = (id, placement) => {\n  const instances = placementInstances[placement] || [];\n  const idx = instances.findIndex((instance) => instance.id === id);\n  const current = instances[idx];\n  let prev;\n  if (idx > 0) {\n    prev = instances[idx - 1];\n  }\n  return { current, prev };\n};\nconst getLastOffset = (id, placement) => {\n  const { prev } = getInstance(id, placement);\n  if (!prev)\n    return 0;\n  return prev.vm.exposed.bottom.value;\n};\nconst getOffsetOrSpace = (id, offset, placement) => {\n  const instances = placementInstances[placement] || [];\n  const idx = instances.findIndex((instance) => instance.id === id);\n  return idx > 0 ? 16 : offset;\n};\n\nexport { getInstance, getLastOffset, getOffsetOrSpace, getOrCreatePlacementInstances, placementInstances };\n//# sourceMappingURL=instance.mjs.map\n","import { defineComponent, ref, computed, onMounted, watch, openBlock, createBlock, Transition, unref, withCtx, withDirectives, createElementVNode, normalizeClass, normalizeStyle, createCommentVNode, resolveDynamicComponent, renderSlot, createElementBlock, toDisplayString, Fragment, withModifiers, createVNode, vShow, nextTick } from 'vue';\nimport { useEventListener, useResizeObserver, useTimeoutFn } from '@vueuse/core';\nimport { ElBadge } from '../../badge/index.mjs';\nimport { ElIcon } from '../../icon/index.mjs';\nimport { messageProps, messageEmits, MESSAGE_DEFAULT_PLACEMENT } from './message.mjs';\nimport { getLastOffset, getOffsetOrSpace } from './instance.mjs';\nimport _export_sfc from '../../../_virtual/plugin-vue_export-helper.mjs';\nimport { useGlobalComponentSettings } from '../../config-provider/src/hooks/use-global-config.mjs';\nimport { TypeComponentsMap, TypeComponents } from '../../../utils/vue/icon.mjs';\nimport { getEventCode } from '../../../utils/dom/event.mjs';\nimport { EVENT_CODE } from '../../../constants/aria.mjs';\n\nconst __default__ = defineComponent({\n  name: \"ElMessage\"\n});\nconst _sfc_main = /* @__PURE__ */ defineComponent({\n  ...__default__,\n  props: messageProps,\n  emits: messageEmits,\n  setup(__props, { expose, emit }) {\n    const props = __props;\n    const { Close } = TypeComponents;\n    const isStartTransition = ref(false);\n    const { ns, zIndex } = useGlobalComponentSettings(\"message\");\n    const { currentZIndex, nextZIndex } = zIndex;\n    const messageRef = ref();\n    const visible = ref(false);\n    const height = ref(0);\n    let stopTimer = void 0;\n    const badgeType = computed(() => props.type ? props.type === \"error\" ? \"danger\" : props.type : \"info\");\n    const typeClass = computed(() => {\n      const type = props.type;\n      return { [ns.bm(\"icon\", type)]: type && TypeComponentsMap[type] };\n    });\n    const iconComponent = computed(() => props.icon || TypeComponentsMap[props.type] || \"\");\n    const placement = computed(() => props.placement || MESSAGE_DEFAULT_PLACEMENT);\n    const lastOffset = computed(() => getLastOffset(props.id, placement.value));\n    const offset = computed(() => {\n      return getOffsetOrSpace(props.id, props.offset, placement.value) + lastOffset.value;\n    });\n    const bottom = computed(() => height.value + offset.value);\n    const horizontalClass = computed(() => {\n      if (placement.value.includes(\"left\"))\n        return ns.is(\"left\");\n      if (placement.value.includes(\"right\"))\n        return ns.is(\"right\");\n      return ns.is(\"center\");\n    });\n    const verticalProperty = computed(() => placement.value.startsWith(\"top\") ? \"top\" : \"bottom\");\n    const customStyle = computed(() => ({\n      [verticalProperty.value]: `${offset.value}px`,\n      zIndex: currentZIndex.value\n    }));\n    function startTimer() {\n      if (props.duration === 0)\n        return;\n      ({ stop: stopTimer } = useTimeoutFn(() => {\n        close();\n      }, props.duration));\n    }\n    function clearTimer() {\n      stopTimer == null ? void 0 : stopTimer();\n    }\n    function close() {\n      visible.value = false;\n      nextTick(() => {\n        var _a;\n        if (!isStartTransition.value) {\n          (_a = props.onClose) == null ? void 0 : _a.call(props);\n          emit(\"destroy\");\n        }\n      });\n    }\n    function keydown(event) {\n      const code = getEventCode(event);\n      if (code === EVENT_CODE.esc) {\n        close();\n      }\n    }\n    onMounted(() => {\n      startTimer();\n      nextZIndex();\n      visible.value = true;\n    });\n    watch(() => props.repeatNum, () => {\n      clearTimer();\n      startTimer();\n    });\n    useEventListener(document, \"keydown\", keydown);\n    useResizeObserver(messageRef, () => {\n      height.value = messageRef.value.getBoundingClientRect().height;\n    });\n    expose({\n      visible,\n      bottom,\n      close\n    });\n    return (_ctx, _cache) => {\n      return openBlock(), createBlock(Transition, {\n        name: unref(ns).b(\"fade\"),\n        onBeforeEnter: ($event) => isStartTransition.value = true,\n        onBeforeLeave: _ctx.onClose,\n        onAfterLeave: ($event) => _ctx.$emit(\"destroy\"),\n        persisted: \"\"\n      }, {\n        default: withCtx(() => [\n          withDirectives(createElementVNode(\"div\", {\n            id: _ctx.id,\n            ref_key: \"messageRef\",\n            ref: messageRef,\n            class: normalizeClass([\n              unref(ns).b(),\n              { [unref(ns).m(_ctx.type)]: _ctx.type },\n              unref(ns).is(\"closable\", _ctx.showClose),\n              unref(ns).is(\"plain\", _ctx.plain),\n              unref(ns).is(\"bottom\", unref(verticalProperty) === \"bottom\"),\n              unref(horizontalClass),\n              _ctx.customClass\n            ]),\n            style: normalizeStyle(unref(customStyle)),\n            role: \"alert\",\n            onMouseenter: clearTimer,\n            onMouseleave: startTimer\n          }, [\n            _ctx.repeatNum > 1 ? (openBlock(), createBlock(unref(ElBadge), {\n              key: 0,\n              value: _ctx.repeatNum,\n              type: unref(badgeType),\n              class: normalizeClass(unref(ns).e(\"badge\"))\n            }, null, 8, [\"value\", \"type\", \"class\"])) : createCommentVNode(\"v-if\", true),\n            unref(iconComponent) ? (openBlock(), createBlock(unref(ElIcon), {\n              key: 1,\n              class: normalizeClass([unref(ns).e(\"icon\"), unref(typeClass)])\n            }, {\n              default: withCtx(() => [\n                (openBlock(), createBlock(resolveDynamicComponent(unref(iconComponent))))\n              ]),\n              _: 1\n            }, 8, [\"class\"])) : createCommentVNode(\"v-if\", true),\n            renderSlot(_ctx.$slots, \"default\", {}, () => [\n              !_ctx.dangerouslyUseHTMLString ? (openBlock(), createElementBlock(\"p\", {\n                key: 0,\n                class: normalizeClass(unref(ns).e(\"content\"))\n              }, toDisplayString(_ctx.message), 3)) : (openBlock(), createElementBlock(Fragment, { key: 1 }, [\n                createCommentVNode(\" Caution here, message could've been compromised, never use user's input as message \"),\n                createElementVNode(\"p\", {\n                  class: normalizeClass(unref(ns).e(\"content\")),\n                  innerHTML: _ctx.message\n                }, null, 10, [\"innerHTML\"])\n              ], 2112))\n            ]),\n            _ctx.showClose ? (openBlock(), createBlock(unref(ElIcon), {\n              key: 2,\n              class: normalizeClass(unref(ns).e(\"closeBtn\")),\n              onClick: withModifiers(close, [\"stop\"])\n            }, {\n              default: withCtx(() => [\n                createVNode(unref(Close))\n              ]),\n              _: 1\n            }, 8, [\"class\", \"onClick\"])) : createCommentVNode(\"v-if\", true)\n          ], 46, [\"id\"]), [\n            [vShow, visible.value]\n          ])\n        ]),\n        _: 3\n      }, 8, [\"name\", \"onBeforeEnter\", \"onBeforeLeave\", \"onAfterLeave\"]);\n    };\n  }\n});\nvar MessageConstructor = /* @__PURE__ */ _export_sfc(_sfc_main, [[\"__file\", \"message.vue\"]]);\n\nexport { MessageConstructor as default };\n//# sourceMappingURL=message2.mjs.map\n","import { isVNode, render, createVNode } from 'vue';\nimport MessageConstructor from './message2.mjs';\nimport { messageTypes, MESSAGE_DEFAULT_PLACEMENT, messageDefaults, messagePlacement } from './message.mjs';\nimport { getOrCreatePlacementInstances, placementInstances } from './instance.mjs';\nimport { messageConfig } from '../../config-provider/src/config-provider.mjs';\nimport { isClient } from '@vueuse/core';\nimport { isNumber, isBoolean, isElement } from '../../../utils/types.mjs';\nimport { hasOwn, isString, isFunction } from '@vue/shared';\nimport { debugWarn } from '../../../utils/error.mjs';\n\nlet seed = 1;\nconst normalizeAppendTo = (normalized) => {\n  const appendTo = normalized.appendTo;\n  if (!appendTo) {\n    normalized.appendTo = document.body;\n  } else if (isString(normalized.appendTo)) {\n    let appendTo2 = document.querySelector(normalized.appendTo);\n    if (!isElement(appendTo2)) {\n      appendTo2 = document.body;\n    }\n    normalized.appendTo = appendTo2;\n  }\n};\nconst normalizePlacement = (normalized) => {\n  if (!normalized.placement && isString(messageConfig.placement) && messageConfig.placement) {\n    normalized.placement = messageConfig.placement;\n  }\n  if (!normalized.placement) {\n    normalized.placement = MESSAGE_DEFAULT_PLACEMENT;\n  }\n  if (!messagePlacement.includes(normalized.placement)) {\n    debugWarn(\"ElMessage\", `Invalid placement: ${normalized.placement}. Falling back to '${MESSAGE_DEFAULT_PLACEMENT}'.`);\n    normalized.placement = MESSAGE_DEFAULT_PLACEMENT;\n  }\n};\nconst normalizeOptions = (params) => {\n  const options = !params || isString(params) || isVNode(params) || isFunction(params) ? { message: params } : params;\n  const normalized = {\n    ...messageDefaults,\n    ...options\n  };\n  normalizeAppendTo(normalized);\n  normalizePlacement(normalized);\n  if (isBoolean(messageConfig.grouping) && !normalized.grouping) {\n    normalized.grouping = messageConfig.grouping;\n  }\n  if (isNumber(messageConfig.duration) && normalized.duration === 3e3) {\n    normalized.duration = messageConfig.duration;\n  }\n  if (isNumber(messageConfig.offset) && normalized.offset === 16) {\n    normalized.offset = messageConfig.offset;\n  }\n  if (isBoolean(messageConfig.showClose) && !normalized.showClose) {\n    normalized.showClose = messageConfig.showClose;\n  }\n  if (isBoolean(messageConfig.plain) && !normalized.plain) {\n    normalized.plain = messageConfig.plain;\n  }\n  return normalized;\n};\nconst closeMessage = (instance) => {\n  const placement = instance.props.placement || MESSAGE_DEFAULT_PLACEMENT;\n  const instances = placementInstances[placement];\n  const idx = instances.indexOf(instance);\n  if (idx === -1)\n    return;\n  instances.splice(idx, 1);\n  const { handler } = instance;\n  handler.close();\n};\nconst createMessage = ({ appendTo, ...options }, context) => {\n  const id = `message_${seed++}`;\n  const userOnClose = options.onClose;\n  const container = document.createElement(\"div\");\n  const props = {\n    ...options,\n    id,\n    onClose: () => {\n      userOnClose == null ? void 0 : userOnClose();\n      closeMessage(instance);\n    },\n    onDestroy: () => {\n      render(null, container);\n    }\n  };\n  const vnode = createVNode(MessageConstructor, props, isFunction(props.message) || isVNode(props.message) ? {\n    default: isFunction(props.message) ? props.message : () => props.message\n  } : null);\n  vnode.appContext = context || message._context;\n  render(vnode, container);\n  appendTo.appendChild(container.firstElementChild);\n  const vm = vnode.component;\n  const handler = {\n    close: () => {\n      vm.exposed.close();\n    }\n  };\n  const instance = {\n    id,\n    vnode,\n    vm,\n    handler,\n    props: vnode.component.props\n  };\n  return instance;\n};\nconst message = (options = {}, context) => {\n  if (!isClient)\n    return { close: () => void 0 };\n  const normalized = normalizeOptions(options);\n  const instances = getOrCreatePlacementInstances(normalized.placement || MESSAGE_DEFAULT_PLACEMENT);\n  if (normalized.grouping && instances.length) {\n    const instance2 = instances.find(({ vnode: vm }) => {\n      var _a;\n      return ((_a = vm.props) == null ? void 0 : _a.message) === normalized.message;\n    });\n    if (instance2) {\n      instance2.props.repeatNum += 1;\n      instance2.props.type = normalized.type;\n      return instance2.handler;\n    }\n  }\n  if (isNumber(messageConfig.max) && instances.length >= messageConfig.max) {\n    return { close: () => void 0 };\n  }\n  const instance = createMessage(normalized, context);\n  instances.push(instance);\n  return instance.handler;\n};\nmessageTypes.forEach((type) => {\n  message[type] = (options = {}, appContext) => {\n    const normalized = normalizeOptions(options);\n    return message({ ...normalized, type }, appContext);\n  };\n});\nfunction closeAll(type) {\n  for (const placement in placementInstances) {\n    if (hasOwn(placementInstances, placement)) {\n      const instances = [...placementInstances[placement]];\n      for (const instance of instances) {\n        if (!type || type === instance.props.type) {\n          instance.handler.close();\n        }\n      }\n    }\n  }\n}\nfunction closeAllByPlacement(placement) {\n  if (!placementInstances[placement])\n    return;\n  const instances = [...placementInstances[placement]];\n  instances.forEach((instance) => instance.handler.close());\n}\nmessage.closeAll = closeAll;\nmessage.closeAllByPlacement = closeAllByPlacement;\nmessage._context = null;\n\nexport { closeAll, closeAllByPlacement, message as default };\n//# sourceMappingURL=method.mjs.map\n","import message from './src/method.mjs';\nexport { MESSAGE_DEFAULT_PLACEMENT, messageDefaults, messageEmits, messagePlacement, messageProps, messageTypes } from './src/message.mjs';\nimport { withInstallFunction } from '../../utils/vue/install.mjs';\n\nconst ElMessage = withInstallFunction(message, \"$message\");\n\nexport { ElMessage, ElMessage as default };\n//# sourceMappingURL=index.mjs.map\n","'use strict';\n\nexport default function bind(fn, thisArg) {\n  return function wrap() {\n    return fn.apply(thisArg, arguments);\n  };\n}\n","'use strict';\n\nimport bind from './helpers/bind.js';\n\n// utils is a library of generic helper functions non-specific to axios\n\nconst {toString} = Object.prototype;\nconst {getPrototypeOf} = Object;\nconst {iterator, toStringTag} = Symbol;\n\nconst kindOf = (cache => thing => {\n    const str = toString.call(thing);\n    return cache[str] || (cache[str] = str.slice(8, -1).toLowerCase());\n})(Object.create(null));\n\nconst kindOfTest = (type) => {\n  type = type.toLowerCase();\n  return (thing) => kindOf(thing) === type\n}\n\nconst typeOfTest = type => thing => typeof thing === type;\n\n/**\n * Determine if a value is an Array\n *\n * @param {Object} val The value to test\n *\n * @returns {boolean} True if value is an Array, otherwise false\n */\nconst {isArray} = Array;\n\n/**\n * Determine if a value is undefined\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if the value is undefined, otherwise false\n */\nconst isUndefined = typeOfTest('undefined');\n\n/**\n * Determine if a value is a Buffer\n *\n * @param {*} val The value to test\n *\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    && isFunction(val.constructor.isBuffer) && val.constructor.isBuffer(val);\n}\n\n/**\n * Determine if a value is an ArrayBuffer\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is an ArrayBuffer, otherwise false\n */\nconst isArrayBuffer = kindOfTest('ArrayBuffer');\n\n\n/**\n * Determine if a value is a view on an ArrayBuffer\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a view on an ArrayBuffer, otherwise false\n */\nfunction isArrayBufferView(val) {\n  let result;\n  if ((typeof ArrayBuffer !== 'undefined') && (ArrayBuffer.isView)) {\n    result = ArrayBuffer.isView(val);\n  } else {\n    result = (val) && (val.buffer) && (isArrayBuffer(val.buffer));\n  }\n  return result;\n}\n\n/**\n * Determine if a value is a String\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a String, otherwise false\n */\nconst isString = typeOfTest('string');\n\n/**\n * Determine if a value is a Function\n *\n * @param {*} val The value to test\n * @returns {boolean} True if value is a Function, otherwise false\n */\nconst isFunction = typeOfTest('function');\n\n/**\n * Determine if a value is a Number\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a Number, otherwise false\n */\nconst isNumber = typeOfTest('number');\n\n/**\n * Determine if a value is an Object\n *\n * @param {*} thing The value to test\n *\n * @returns {boolean} True if value is an Object, otherwise false\n */\nconst isObject = (thing) => thing !== null && typeof thing === 'object';\n\n/**\n * Determine if a value is a Boolean\n *\n * @param {*} thing The value to test\n * @returns {boolean} True if value is a Boolean, otherwise false\n */\nconst isBoolean = thing => thing === true || thing === false;\n\n/**\n * Determine if a value is a plain Object\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a plain Object, otherwise false\n */\nconst isPlainObject = (val) => {\n  if (kindOf(val) !== 'object') {\n    return false;\n  }\n\n  const prototype = getPrototypeOf(val);\n  return (prototype === null || prototype === Object.prototype || Object.getPrototypeOf(prototype) === null) && !(toStringTag in val) && !(iterator in val);\n}\n\n/**\n * Determine if a value is an empty object (safely handles Buffers)\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is an empty object, otherwise false\n */\nconst isEmptyObject = (val) => {\n  // Early return for non-objects or Buffers to prevent RangeError\n  if (!isObject(val) || isBuffer(val)) {\n    return false;\n  }\n\n  try {\n    return Object.keys(val).length === 0 && Object.getPrototypeOf(val) === Object.prototype;\n  } catch (e) {\n    // Fallback for any other objects that might cause RangeError with Object.keys()\n    return false;\n  }\n}\n\n/**\n * Determine if a value is a Date\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a Date, otherwise false\n */\nconst isDate = kindOfTest('Date');\n\n/**\n * Determine if a value is a File\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a File, otherwise false\n */\nconst isFile = kindOfTest('File');\n\n/**\n * Determine if a value is a Blob\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a Blob, otherwise false\n */\nconst isBlob = kindOfTest('Blob');\n\n/**\n * Determine if a value is a FileList\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a File, otherwise false\n */\nconst isFileList = kindOfTest('FileList');\n\n/**\n * Determine if a value is a Stream\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a Stream, otherwise false\n */\nconst isStream = (val) => isObject(val) && isFunction(val.pipe);\n\n/**\n * Determine if a value is a FormData\n *\n * @param {*} thing The value to test\n *\n * @returns {boolean} True if value is an FormData, otherwise false\n */\nconst isFormData = (thing) => {\n  let kind;\n  return thing && (\n    (typeof FormData === 'function' && thing instanceof FormData) || (\n      isFunction(thing.append) && (\n        (kind = kindOf(thing)) === 'formdata' ||\n        // detect form-data instance\n        (kind === 'object' && isFunction(thing.toString) && thing.toString() === '[object FormData]')\n      )\n    )\n  )\n}\n\n/**\n * Determine if a value is a URLSearchParams object\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a URLSearchParams object, otherwise false\n */\nconst isURLSearchParams = kindOfTest('URLSearchParams');\n\nconst [isReadableStream, isRequest, isResponse, isHeaders] = ['ReadableStream', 'Request', 'Response', 'Headers'].map(kindOfTest);\n\n/**\n * Trim excess whitespace off the beginning and end of a string\n *\n * @param {String} str The String to trim\n *\n * @returns {String} The String freed of excess whitespace\n */\nconst trim = (str) => str.trim ?\n  str.trim() : str.replace(/^[\\s\\uFEFF\\xA0]+|[\\s\\uFEFF\\xA0]+$/g, '');\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 *\n * @param {Boolean} [allOwnKeys = false]\n * @returns {any}\n */\nfunction forEach(obj, fn, {allOwnKeys = false} = {}) {\n  // Don't bother if no value provided\n  if (obj === null || typeof obj === 'undefined') {\n    return;\n  }\n\n  let i;\n  let l;\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 (i = 0, l = obj.length; i < l; i++) {\n      fn.call(null, obj[i], i, obj);\n    }\n  } else {\n    // Buffer check\n    if (isBuffer(obj)) {\n      return;\n    }\n\n    // Iterate over object keys\n    const keys = allOwnKeys ? Object.getOwnPropertyNames(obj) : Object.keys(obj);\n    const len = keys.length;\n    let key;\n\n    for (i = 0; i < len; i++) {\n      key = keys[i];\n      fn.call(null, obj[key], key, obj);\n    }\n  }\n}\n\nfunction findKey(obj, key) {\n  if (isBuffer(obj)){\n    return null;\n  }\n\n  key = key.toLowerCase();\n  const keys = Object.keys(obj);\n  let i = keys.length;\n  let _key;\n  while (i-- > 0) {\n    _key = keys[i];\n    if (key === _key.toLowerCase()) {\n      return _key;\n    }\n  }\n  return null;\n}\n\nconst _global = (() => {\n  /*eslint no-undef:0*/\n  if (typeof globalThis !== \"undefined\") return globalThis;\n  return typeof self !== \"undefined\" ? self : (typeof window !== 'undefined' ? window : global)\n})();\n\nconst isContextDefined = (context) => !isUndefined(context) && context !== _global;\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 *\n * @returns {Object} Result of all merge properties\n */\nfunction merge(/* obj1, obj2, obj3, ... */) {\n  const {caseless, skipUndefined} = isContextDefined(this) && this || {};\n  const result = {};\n  const assignValue = (val, key) => {\n    const targetKey = caseless && findKey(result, key) || key;\n    if (isPlainObject(result[targetKey]) && isPlainObject(val)) {\n      result[targetKey] = merge(result[targetKey], val);\n    } else if (isPlainObject(val)) {\n      result[targetKey] = merge({}, val);\n    } else if (isArray(val)) {\n      result[targetKey] = val.slice();\n    } else if (!skipUndefined || !isUndefined(val)) {\n      result[targetKey] = val;\n    }\n  }\n\n  for (let i = 0, l = arguments.length; i < l; i++) {\n    arguments[i] && 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 *\n * @param {Boolean} [allOwnKeys]\n * @returns {Object} The resulting value of object a\n */\nconst extend = (a, b, thisArg, {allOwnKeys}= {}) => {\n  forEach(b, (val, key) => {\n    if (thisArg && isFunction(val)) {\n      a[key] = bind(val, thisArg);\n    } else {\n      a[key] = val;\n    }\n  }, {allOwnKeys});\n  return a;\n}\n\n/**\n * Remove byte order marker. This catches EF BB BF (the UTF-8 BOM)\n *\n * @param {string} content with BOM\n *\n * @returns {string} content value without BOM\n */\nconst stripBOM = (content) => {\n  if (content.charCodeAt(0) === 0xFEFF) {\n    content = content.slice(1);\n  }\n  return content;\n}\n\n/**\n * Inherit the prototype methods from one constructor into another\n * @param {function} constructor\n * @param {function} superConstructor\n * @param {object} [props]\n * @param {object} [descriptors]\n *\n * @returns {void}\n */\nconst inherits = (constructor, superConstructor, props, descriptors) => {\n  constructor.prototype = Object.create(superConstructor.prototype, descriptors);\n  constructor.prototype.constructor = constructor;\n  Object.defineProperty(constructor, 'super', {\n    value: superConstructor.prototype\n  });\n  props && Object.assign(constructor.prototype, props);\n}\n\n/**\n * Resolve object with deep prototype chain to a flat object\n * @param {Object} sourceObj source object\n * @param {Object} [destObj]\n * @param {Function|Boolean} [filter]\n * @param {Function} [propFilter]\n *\n * @returns {Object}\n */\nconst toFlatObject = (sourceObj, destObj, filter, propFilter) => {\n  let props;\n  let i;\n  let prop;\n  const merged = {};\n\n  destObj = destObj || {};\n  // eslint-disable-next-line no-eq-null,eqeqeq\n  if (sourceObj == null) return destObj;\n\n  do {\n    props = Object.getOwnPropertyNames(sourceObj);\n    i = props.length;\n    while (i-- > 0) {\n      prop = props[i];\n      if ((!propFilter || propFilter(prop, sourceObj, destObj)) && !merged[prop]) {\n        destObj[prop] = sourceObj[prop];\n        merged[prop] = true;\n      }\n    }\n    sourceObj = filter !== false && getPrototypeOf(sourceObj);\n  } while (sourceObj && (!filter || filter(sourceObj, destObj)) && sourceObj !== Object.prototype);\n\n  return destObj;\n}\n\n/**\n * Determines whether a string ends with the characters of a specified string\n *\n * @param {String} str\n * @param {String} searchString\n * @param {Number} [position= 0]\n *\n * @returns {boolean}\n */\nconst endsWith = (str, searchString, position) => {\n  str = String(str);\n  if (position === undefined || position > str.length) {\n    position = str.length;\n  }\n  position -= searchString.length;\n  const lastIndex = str.indexOf(searchString, position);\n  return lastIndex !== -1 && lastIndex === position;\n}\n\n\n/**\n * Returns new array from array like object or null if failed\n *\n * @param {*} [thing]\n *\n * @returns {?Array}\n */\nconst toArray = (thing) => {\n  if (!thing) return null;\n  if (isArray(thing)) return thing;\n  let i = thing.length;\n  if (!isNumber(i)) return null;\n  const arr = new Array(i);\n  while (i-- > 0) {\n    arr[i] = thing[i];\n  }\n  return arr;\n}\n\n/**\n * Checking if the Uint8Array exists and if it does, it returns a function that checks if the\n * thing passed in is an instance of Uint8Array\n *\n * @param {TypedArray}\n *\n * @returns {Array}\n */\n// eslint-disable-next-line func-names\nconst isTypedArray = (TypedArray => {\n  // eslint-disable-next-line func-names\n  return thing => {\n    return TypedArray && thing instanceof TypedArray;\n  };\n})(typeof Uint8Array !== 'undefined' && getPrototypeOf(Uint8Array));\n\n/**\n * For each entry in the object, call the function with the key and value.\n *\n * @param {Object<any, any>} obj - The object to iterate over.\n * @param {Function} fn - The function to call for each entry.\n *\n * @returns {void}\n */\nconst forEachEntry = (obj, fn) => {\n  const generator = obj && obj[iterator];\n\n  const _iterator = generator.call(obj);\n\n  let result;\n\n  while ((result = _iterator.next()) && !result.done) {\n    const pair = result.value;\n    fn.call(obj, pair[0], pair[1]);\n  }\n}\n\n/**\n * It takes a regular expression and a string, and returns an array of all the matches\n *\n * @param {string} regExp - The regular expression to match against.\n * @param {string} str - The string to search.\n *\n * @returns {Array<boolean>}\n */\nconst matchAll = (regExp, str) => {\n  let matches;\n  const arr = [];\n\n  while ((matches = regExp.exec(str)) !== null) {\n    arr.push(matches);\n  }\n\n  return arr;\n}\n\n/* Checking if the kindOfTest function returns true when passed an HTMLFormElement. */\nconst isHTMLForm = kindOfTest('HTMLFormElement');\n\nconst toCamelCase = str => {\n  return str.toLowerCase().replace(/[-_\\s]([a-z\\d])(\\w*)/g,\n    function replacer(m, p1, p2) {\n      return p1.toUpperCase() + p2;\n    }\n  );\n};\n\n/* Creating a function that will check if an object has a property. */\nconst hasOwnProperty = (({hasOwnProperty}) => (obj, prop) => hasOwnProperty.call(obj, prop))(Object.prototype);\n\n/**\n * Determine if a value is a RegExp object\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a RegExp object, otherwise false\n */\nconst isRegExp = kindOfTest('RegExp');\n\nconst reduceDescriptors = (obj, reducer) => {\n  const descriptors = Object.getOwnPropertyDescriptors(obj);\n  const reducedDescriptors = {};\n\n  forEach(descriptors, (descriptor, name) => {\n    let ret;\n    if ((ret = reducer(descriptor, name, obj)) !== false) {\n      reducedDescriptors[name] = ret || descriptor;\n    }\n  });\n\n  Object.defineProperties(obj, reducedDescriptors);\n}\n\n/**\n * Makes all methods read-only\n * @param {Object} obj\n */\n\nconst freezeMethods = (obj) => {\n  reduceDescriptors(obj, (descriptor, name) => {\n    // skip restricted props in strict mode\n    if (isFunction(obj) && ['arguments', 'caller', 'callee'].indexOf(name) !== -1) {\n      return false;\n    }\n\n    const value = obj[name];\n\n    if (!isFunction(value)) return;\n\n    descriptor.enumerable = false;\n\n    if ('writable' in descriptor) {\n      descriptor.writable = false;\n      return;\n    }\n\n    if (!descriptor.set) {\n      descriptor.set = () => {\n        throw Error('Can not rewrite read-only method \\'' + name + '\\'');\n      };\n    }\n  });\n}\n\nconst toObjectSet = (arrayOrString, delimiter) => {\n  const obj = {};\n\n  const define = (arr) => {\n    arr.forEach(value => {\n      obj[value] = true;\n    });\n  }\n\n  isArray(arrayOrString) ? define(arrayOrString) : define(String(arrayOrString).split(delimiter));\n\n  return obj;\n}\n\nconst noop = () => {}\n\nconst toFiniteNumber = (value, defaultValue) => {\n  return value != null && Number.isFinite(value = +value) ? value : defaultValue;\n}\n\n\n\n/**\n * If the thing is a FormData object, return true, otherwise return false.\n *\n * @param {unknown} thing - The thing to check.\n *\n * @returns {boolean}\n */\nfunction isSpecCompliantForm(thing) {\n  return !!(thing && isFunction(thing.append) && thing[toStringTag] === 'FormData' && thing[iterator]);\n}\n\nconst toJSONObject = (obj) => {\n  const stack = new Array(10);\n\n  const visit = (source, i) => {\n\n    if (isObject(source)) {\n      if (stack.indexOf(source) >= 0) {\n        return;\n      }\n\n      //Buffer check\n      if (isBuffer(source)) {\n        return source;\n      }\n\n      if(!('toJSON' in source)) {\n        stack[i] = source;\n        const target = isArray(source) ? [] : {};\n\n        forEach(source, (value, key) => {\n          const reducedValue = visit(value, i + 1);\n          !isUndefined(reducedValue) && (target[key] = reducedValue);\n        });\n\n        stack[i] = undefined;\n\n        return target;\n      }\n    }\n\n    return source;\n  }\n\n  return visit(obj, 0);\n}\n\nconst isAsyncFn = kindOfTest('AsyncFunction');\n\nconst isThenable = (thing) =>\n  thing && (isObject(thing) || isFunction(thing)) && isFunction(thing.then) && isFunction(thing.catch);\n\n// original code\n// https://github.com/DigitalBrainJS/AxiosPromise/blob/16deab13710ec09779922131f3fa5954320f83ab/lib/utils.js#L11-L34\n\nconst _setImmediate = ((setImmediateSupported, postMessageSupported) => {\n  if (setImmediateSupported) {\n    return setImmediate;\n  }\n\n  return postMessageSupported ? ((token, callbacks) => {\n    _global.addEventListener(\"message\", ({source, data}) => {\n      if (source === _global && data === token) {\n        callbacks.length && callbacks.shift()();\n      }\n    }, false);\n\n    return (cb) => {\n      callbacks.push(cb);\n      _global.postMessage(token, \"*\");\n    }\n  })(`axios@${Math.random()}`, []) : (cb) => setTimeout(cb);\n})(\n  typeof setImmediate === 'function',\n  isFunction(_global.postMessage)\n);\n\nconst asap = typeof queueMicrotask !== 'undefined' ?\n  queueMicrotask.bind(_global) : ( typeof process !== 'undefined' && process.nextTick || _setImmediate);\n\n// *********************\n\n\nconst isIterable = (thing) => thing != null && isFunction(thing[iterator]);\n\n\nexport default {\n  isArray,\n  isArrayBuffer,\n  isBuffer,\n  isFormData,\n  isArrayBufferView,\n  isString,\n  isNumber,\n  isBoolean,\n  isObject,\n  isPlainObject,\n  isEmptyObject,\n  isReadableStream,\n  isRequest,\n  isResponse,\n  isHeaders,\n  isUndefined,\n  isDate,\n  isFile,\n  isBlob,\n  isRegExp,\n  isFunction,\n  isStream,\n  isURLSearchParams,\n  isTypedArray,\n  isFileList,\n  forEach,\n  merge,\n  extend,\n  trim,\n  stripBOM,\n  inherits,\n  toFlatObject,\n  kindOf,\n  kindOfTest,\n  endsWith,\n  toArray,\n  forEachEntry,\n  matchAll,\n  isHTMLForm,\n  hasOwnProperty,\n  hasOwnProp: hasOwnProperty, // an alias to avoid ESLint no-prototype-builtins detection\n  reduceDescriptors,\n  freezeMethods,\n  toObjectSet,\n  toCamelCase,\n  noop,\n  toFiniteNumber,\n  findKey,\n  global: _global,\n  isContextDefined,\n  isSpecCompliantForm,\n  toJSONObject,\n  isAsyncFn,\n  isThenable,\n  setImmediate: _setImmediate,\n  asap,\n  isIterable\n};\n","'use strict';\n\nimport utils from '../utils.js';\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 {string} [code] The error code (for example, 'ECONNABORTED').\n * @param {Object} [config] The config.\n * @param {Object} [request] The request.\n * @param {Object} [response] The response.\n *\n * @returns {Error} The created error.\n */\nfunction AxiosError(message, code, config, request, response) {\n  Error.call(this);\n\n  if (Error.captureStackTrace) {\n    Error.captureStackTrace(this, this.constructor);\n  } else {\n    this.stack = (new Error()).stack;\n  }\n\n  this.message = message;\n  this.name = 'AxiosError';\n  code && (this.code = code);\n  config && (this.config = config);\n  request && (this.request = request);\n  if (response) {\n    this.response = response;\n    this.status = response.status ? response.status : null;\n  }\n}\n\nutils.inherits(AxiosError, Error, {\n  toJSON: function toJSON() {\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: utils.toJSONObject(this.config),\n      code: this.code,\n      status: this.status\n    };\n  }\n});\n\nconst prototype = AxiosError.prototype;\nconst descriptors = {};\n\n[\n  'ERR_BAD_OPTION_VALUE',\n  'ERR_BAD_OPTION',\n  'ECONNABORTED',\n  'ETIMEDOUT',\n  'ERR_NETWORK',\n  'ERR_FR_TOO_MANY_REDIRECTS',\n  'ERR_DEPRECATED',\n  'ERR_BAD_RESPONSE',\n  'ERR_BAD_REQUEST',\n  'ERR_CANCELED',\n  'ERR_NOT_SUPPORT',\n  'ERR_INVALID_URL'\n// eslint-disable-next-line func-names\n].forEach(code => {\n  descriptors[code] = {value: code};\n});\n\nObject.defineProperties(AxiosError, descriptors);\nObject.defineProperty(prototype, 'isAxiosError', {value: true});\n\n// eslint-disable-next-line func-names\nAxiosError.from = (error, code, config, request, response, customProps) => {\n  const axiosError = Object.create(prototype);\n\n  utils.toFlatObject(error, axiosError, function filter(obj) {\n    return obj !== Error.prototype;\n  }, prop => {\n    return prop !== 'isAxiosError';\n  });\n\n  const msg = error && error.message ? error.message : 'Error';\n\n  // Prefer explicit code; otherwise copy the low-level error's code (e.g. ECONNREFUSED)\n  const errCode = code == null && error ? error.code : code;\n  AxiosError.call(axiosError, msg, errCode, config, request, response);\n\n  // Chain the original error on the standard field; non-enumerable to avoid JSON noise\n  if (error && axiosError.cause == null) {\n    Object.defineProperty(axiosError, 'cause', { value: error, configurable: true });\n  }\n\n  axiosError.name = (error && error.name) || 'Error';\n\n  customProps && Object.assign(axiosError, customProps);\n\n  return axiosError;\n};\n\nexport default AxiosError;\n","'use strict';\n\nimport utils from '../utils.js';\nimport AxiosError from '../core/AxiosError.js';\n// temporary hotfix to avoid circular references until AxiosURLSearchParams is refactored\nimport PlatformFormData from '../platform/node/classes/FormData.js';\n\n/**\n * Determines if the given thing is a array or js object.\n *\n * @param {string} thing - The object or array to be visited.\n *\n * @returns {boolean}\n */\nfunction isVisitable(thing) {\n  return utils.isPlainObject(thing) || utils.isArray(thing);\n}\n\n/**\n * It removes the brackets from the end of a string\n *\n * @param {string} key - The key of the parameter.\n *\n * @returns {string} the key without the brackets.\n */\nfunction removeBrackets(key) {\n  return utils.endsWith(key, '[]') ? key.slice(0, -2) : key;\n}\n\n/**\n * It takes a path, a key, and a boolean, and returns a string\n *\n * @param {string} path - The path to the current key.\n * @param {string} key - The key of the current object being iterated over.\n * @param {string} dots - If true, the key will be rendered with dots instead of brackets.\n *\n * @returns {string} The path to the current key.\n */\nfunction renderKey(path, key, dots) {\n  if (!path) return key;\n  return path.concat(key).map(function each(token, i) {\n    // eslint-disable-next-line no-param-reassign\n    token = removeBrackets(token);\n    return !dots && i ? '[' + token + ']' : token;\n  }).join(dots ? '.' : '');\n}\n\n/**\n * If the array is an array and none of its elements are visitable, then it's a flat array.\n *\n * @param {Array<any>} arr - The array to check\n *\n * @returns {boolean}\n */\nfunction isFlatArray(arr) {\n  return utils.isArray(arr) && !arr.some(isVisitable);\n}\n\nconst predicates = utils.toFlatObject(utils, {}, null, function filter(prop) {\n  return /^is[A-Z]/.test(prop);\n});\n\n/**\n * Convert a data object to FormData\n *\n * @param {Object} obj\n * @param {?Object} [formData]\n * @param {?Object} [options]\n * @param {Function} [options.visitor]\n * @param {Boolean} [options.metaTokens = true]\n * @param {Boolean} [options.dots = false]\n * @param {?Boolean} [options.indexes = false]\n *\n * @returns {Object}\n **/\n\n/**\n * It converts an object into a FormData object\n *\n * @param {Object<any, any>} obj - The object to convert to form data.\n * @param {string} formData - The FormData object to append to.\n * @param {Object<string, any>} options\n *\n * @returns\n */\nfunction toFormData(obj, formData, options) {\n  if (!utils.isObject(obj)) {\n    throw new TypeError('target must be an object');\n  }\n\n  // eslint-disable-next-line no-param-reassign\n  formData = formData || new (PlatformFormData || FormData)();\n\n  // eslint-disable-next-line no-param-reassign\n  options = utils.toFlatObject(options, {\n    metaTokens: true,\n    dots: false,\n    indexes: false\n  }, false, function defined(option, source) {\n    // eslint-disable-next-line no-eq-null,eqeqeq\n    return !utils.isUndefined(source[option]);\n  });\n\n  const metaTokens = options.metaTokens;\n  // eslint-disable-next-line no-use-before-define\n  const visitor = options.visitor || defaultVisitor;\n  const dots = options.dots;\n  const indexes = options.indexes;\n  const _Blob = options.Blob || typeof Blob !== 'undefined' && Blob;\n  const useBlob = _Blob && utils.isSpecCompliantForm(formData);\n\n  if (!utils.isFunction(visitor)) {\n    throw new TypeError('visitor must be a function');\n  }\n\n  function convertValue(value) {\n    if (value === null) return '';\n\n    if (utils.isDate(value)) {\n      return value.toISOString();\n    }\n\n    if (utils.isBoolean(value)) {\n      return value.toString();\n    }\n\n    if (!useBlob && utils.isBlob(value)) {\n      throw new AxiosError('Blob is not supported. Use a Buffer instead.');\n    }\n\n    if (utils.isArrayBuffer(value) || utils.isTypedArray(value)) {\n      return useBlob && typeof Blob === 'function' ? new Blob([value]) : Buffer.from(value);\n    }\n\n    return value;\n  }\n\n  /**\n   * Default visitor.\n   *\n   * @param {*} value\n   * @param {String|Number} key\n   * @param {Array<String|Number>} path\n   * @this {FormData}\n   *\n   * @returns {boolean} return true to visit the each prop of the value recursively\n   */\n  function defaultVisitor(value, key, path) {\n    let arr = value;\n\n    if (value && !path && typeof value === 'object') {\n      if (utils.endsWith(key, '{}')) {\n        // eslint-disable-next-line no-param-reassign\n        key = metaTokens ? key : key.slice(0, -2);\n        // eslint-disable-next-line no-param-reassign\n        value = JSON.stringify(value);\n      } else if (\n        (utils.isArray(value) && isFlatArray(value)) ||\n        ((utils.isFileList(value) || utils.endsWith(key, '[]')) && (arr = utils.toArray(value))\n        )) {\n        // eslint-disable-next-line no-param-reassign\n        key = removeBrackets(key);\n\n        arr.forEach(function each(el, index) {\n          !(utils.isUndefined(el) || el === null) && formData.append(\n            // eslint-disable-next-line no-nested-ternary\n            indexes === true ? renderKey([key], index, dots) : (indexes === null ? key : key + '[]'),\n            convertValue(el)\n          );\n        });\n        return false;\n      }\n    }\n\n    if (isVisitable(value)) {\n      return true;\n    }\n\n    formData.append(renderKey(path, key, dots), convertValue(value));\n\n    return false;\n  }\n\n  const stack = [];\n\n  const exposedHelpers = Object.assign(predicates, {\n    defaultVisitor,\n    convertValue,\n    isVisitable\n  });\n\n  function build(value, path) {\n    if (utils.isUndefined(value)) return;\n\n    if (stack.indexOf(value) !== -1) {\n      throw Error('Circular reference detected in ' + path.join('.'));\n    }\n\n    stack.push(value);\n\n    utils.forEach(value, function each(el, key) {\n      const result = !(utils.isUndefined(el) || el === null) && visitor.call(\n        formData, el, utils.isString(key) ? key.trim() : key, path, exposedHelpers\n      );\n\n      if (result === true) {\n        build(el, path ? path.concat(key) : [key]);\n      }\n    });\n\n    stack.pop();\n  }\n\n  if (!utils.isObject(obj)) {\n    throw new TypeError('data must be an object');\n  }\n\n  build(obj);\n\n  return formData;\n}\n\nexport default toFormData;\n","'use strict';\n\nimport toFormData from './toFormData.js';\n\n/**\n * It encodes a string by replacing all characters that are not in the unreserved set with\n * their percent-encoded equivalents\n *\n * @param {string} str - The string to encode.\n *\n * @returns {string} The encoded string.\n */\nfunction encode(str) {\n  const charMap = {\n    '!': '%21',\n    \"'\": '%27',\n    '(': '%28',\n    ')': '%29',\n    '~': '%7E',\n    '%20': '+',\n    '%00': '\\x00'\n  };\n  return encodeURIComponent(str).replace(/[!'()~]|%20|%00/g, function replacer(match) {\n    return charMap[match];\n  });\n}\n\n/**\n * It takes a params object and converts it to a FormData object\n *\n * @param {Object<string, any>} params - The parameters to be converted to a FormData object.\n * @param {Object<string, any>} options - The options object passed to the Axios constructor.\n *\n * @returns {void}\n */\nfunction AxiosURLSearchParams(params, options) {\n  this._pairs = [];\n\n  params && toFormData(params, this, options);\n}\n\nconst prototype = AxiosURLSearchParams.prototype;\n\nprototype.append = function append(name, value) {\n  this._pairs.push([name, value]);\n};\n\nprototype.toString = function toString(encoder) {\n  const _encode = encoder ? function(value) {\n    return encoder.call(this, value, encode);\n  } : encode;\n\n  return this._pairs.map(function each(pair) {\n    return _encode(pair[0]) + '=' + _encode(pair[1]);\n  }, '').join('&');\n};\n\nexport default AxiosURLSearchParams;\n","'use strict';\n\nimport utils from '../utils.js';\nimport AxiosURLSearchParams from '../helpers/AxiosURLSearchParams.js';\n\n/**\n * It replaces all instances of the characters `:`, `$`, `,`, `+`, `[`, and `]` with their\n * URI encoded counterparts\n *\n * @param {string} val The value to be encoded.\n *\n * @returns {string} The encoded value.\n */\nfunction encode(val) {\n  return encodeURIComponent(val).\n    replace(/%3A/gi, ':').\n    replace(/%24/g, '$').\n    replace(/%2C/gi, ',').\n    replace(/%20/g, '+');\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 * @param {?(object|Function)} options\n *\n * @returns {string} The formatted url\n */\nexport default function buildURL(url, params, options) {\n  /*eslint no-param-reassign:0*/\n  if (!params) {\n    return url;\n  }\n  \n  const _encode = options && options.encode || encode;\n\n  if (utils.isFunction(options)) {\n    options = {\n      serialize: options\n    };\n  } \n\n  const serializeFn = options && options.serialize;\n\n  let serializedParams;\n\n  if (serializeFn) {\n    serializedParams = serializeFn(params, options);\n  } else {\n    serializedParams = utils.isURLSearchParams(params) ?\n      params.toString() :\n      new AxiosURLSearchParams(params, options).toString(_encode);\n  }\n\n  if (serializedParams) {\n    const hashmarkIndex = url.indexOf(\"#\");\n\n    if (hashmarkIndex !== -1) {\n      url = url.slice(0, hashmarkIndex);\n    }\n    url += (url.indexOf('?') === -1 ? '?' : '&') + serializedParams;\n  }\n\n  return url;\n}\n","'use strict';\n\nimport utils from './../utils.js';\n\nclass InterceptorManager {\n  constructor() {\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   */\n  use(fulfilled, rejected, options) {\n    this.handlers.push({\n      fulfilled,\n      rejected,\n      synchronous: options ? options.synchronous : false,\n      runWhen: options ? options.runWhen : null\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   *\n   * @returns {Boolean} `true` if the interceptor was removed, `false` otherwise\n   */\n  eject(id) {\n    if (this.handlers[id]) {\n      this.handlers[id] = null;\n    }\n  }\n\n  /**\n   * Clear all interceptors from the stack\n   *\n   * @returns {void}\n   */\n  clear() {\n    if (this.handlers) {\n      this.handlers = [];\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   *\n   * @returns {void}\n   */\n  forEach(fn) {\n    utils.forEach(this.handlers, function forEachHandler(h) {\n      if (h !== null) {\n        fn(h);\n      }\n    });\n  }\n}\n\nexport default InterceptorManager;\n","'use strict';\n\nexport default {\n  silentJSONParsing: true,\n  forcedJSONParsing: true,\n  clarifyTimeoutError: false\n};\n","import URLSearchParams from './classes/URLSearchParams.js'\nimport FormData from './classes/FormData.js'\nimport Blob from './classes/Blob.js'\n\nexport default {\n  isBrowser: true,\n  classes: {\n    URLSearchParams,\n    FormData,\n    Blob\n  },\n  protocols: ['http', 'https', 'file', 'blob', 'url', 'data']\n};\n","'use strict';\n\nimport AxiosURLSearchParams from '../../../helpers/AxiosURLSearchParams.js';\nexport default typeof URLSearchParams !== 'undefined' ? URLSearchParams : AxiosURLSearchParams;\n","'use strict';\n\nexport default typeof FormData !== 'undefined' ? FormData : null;\n","'use strict'\n\nexport default typeof Blob !== 'undefined' ? Blob : null\n","const hasBrowserEnv = typeof window !== 'undefined' && typeof document !== 'undefined';\n\nconst _navigator = typeof navigator === 'object' && navigator || undefined;\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 *\n * @returns {boolean}\n */\nconst hasStandardBrowserEnv = hasBrowserEnv &&\n  (!_navigator || ['ReactNative', 'NativeScript', 'NS'].indexOf(_navigator.product) < 0);\n\n/**\n * Determine if we're running in a standard browser webWorker environment\n *\n * Although the `isStandardBrowserEnv` method indicates that\n * `allows axios to run in a web worker`, the WebWorker will still be\n * filtered out due to its judgment standard\n * `typeof window !== 'undefined' && typeof document !== 'undefined'`.\n * This leads to a problem when axios post `FormData` in webWorker\n */\nconst hasStandardBrowserWebWorkerEnv = (() => {\n  return (\n    typeof WorkerGlobalScope !== 'undefined' &&\n    // eslint-disable-next-line no-undef\n    self instanceof WorkerGlobalScope &&\n    typeof self.importScripts === 'function'\n  );\n})();\n\nconst origin = hasBrowserEnv && window.location.href || 'http://localhost';\n\nexport {\n  hasBrowserEnv,\n  hasStandardBrowserWebWorkerEnv,\n  hasStandardBrowserEnv,\n  _navigator as navigator,\n  origin\n}\n","import platform from './node/index.js';\nimport * as utils from './common/utils.js';\n\nexport default {\n  ...utils,\n  ...platform\n}\n","'use strict';\n\nimport utils from '../utils.js';\n\n/**\n * It takes a string like `foo[x][y][z]` and returns an array like `['foo', 'x', 'y', 'z']\n *\n * @param {string} name - The name of the property to get.\n *\n * @returns An array of strings.\n */\nfunction parsePropPath(name) {\n  // foo[x][y][z]\n  // foo.x.y.z\n  // foo-x-y-z\n  // foo x y z\n  return utils.matchAll(/\\w+|\\[(\\w*)]/g, name).map(match => {\n    return match[0] === '[]' ? '' : match[1] || match[0];\n  });\n}\n\n/**\n * Convert an array to an object.\n *\n * @param {Array<any>} arr - The array to convert to an object.\n *\n * @returns An object with the same keys and values as the array.\n */\nfunction arrayToObject(arr) {\n  const obj = {};\n  const keys = Object.keys(arr);\n  let i;\n  const len = keys.length;\n  let key;\n  for (i = 0; i < len; i++) {\n    key = keys[i];\n    obj[key] = arr[key];\n  }\n  return obj;\n}\n\n/**\n * It takes a FormData object and returns a JavaScript object\n *\n * @param {string} formData The FormData object to convert to JSON.\n *\n * @returns {Object<string, any> | null} The converted object.\n */\nfunction formDataToJSON(formData) {\n  function buildPath(path, value, target, index) {\n    let name = path[index++];\n\n    if (name === '__proto__') return true;\n\n    const isNumericKey = Number.isFinite(+name);\n    const isLast = index >= path.length;\n    name = !name && utils.isArray(target) ? target.length : name;\n\n    if (isLast) {\n      if (utils.hasOwnProp(target, name)) {\n        target[name] = [target[name], value];\n      } else {\n        target[name] = value;\n      }\n\n      return !isNumericKey;\n    }\n\n    if (!target[name] || !utils.isObject(target[name])) {\n      target[name] = [];\n    }\n\n    const result = buildPath(path, value, target[name], index);\n\n    if (result && utils.isArray(target[name])) {\n      target[name] = arrayToObject(target[name]);\n    }\n\n    return !isNumericKey;\n  }\n\n  if (utils.isFormData(formData) && utils.isFunction(formData.entries)) {\n    const obj = {};\n\n    utils.forEachEntry(formData, (name, value) => {\n      buildPath(parsePropPath(name), value, obj, 0);\n    });\n\n    return obj;\n  }\n\n  return null;\n}\n\nexport default formDataToJSON;\n","'use strict';\n\nimport utils from '../utils.js';\nimport AxiosError from '../core/AxiosError.js';\nimport transitionalDefaults from './transitional.js';\nimport toFormData from '../helpers/toFormData.js';\nimport toURLEncodedForm from '../helpers/toURLEncodedForm.js';\nimport platform from '../platform/index.js';\nimport formDataToJSON from '../helpers/formDataToJSON.js';\n\n/**\n * It takes a string, tries to parse it, and if it fails, it returns the stringified version\n * of the input\n *\n * @param {any} rawValue - The value to be stringified.\n * @param {Function} parser - A function that parses a string into a JavaScript object.\n * @param {Function} encoder - A function that takes a value and returns a string.\n *\n * @returns {string} A stringified version of the rawValue.\n */\nfunction stringifySafely(rawValue, parser, encoder) {\n  if (utils.isString(rawValue)) {\n    try {\n      (parser || JSON.parse)(rawValue);\n      return utils.trim(rawValue);\n    } catch (e) {\n      if (e.name !== 'SyntaxError') {\n        throw e;\n      }\n    }\n  }\n\n  return (encoder || JSON.stringify)(rawValue);\n}\n\nconst defaults = {\n\n  transitional: transitionalDefaults,\n\n  adapter: ['xhr', 'http', 'fetch'],\n\n  transformRequest: [function transformRequest(data, headers) {\n    const contentType = headers.getContentType() || '';\n    const hasJSONContentType = contentType.indexOf('application/json') > -1;\n    const isObjectPayload = utils.isObject(data);\n\n    if (isObjectPayload && utils.isHTMLForm(data)) {\n      data = new FormData(data);\n    }\n\n    const isFormData = utils.isFormData(data);\n\n    if (isFormData) {\n      return hasJSONContentType ? JSON.stringify(formDataToJSON(data)) : data;\n    }\n\n    if (utils.isArrayBuffer(data) ||\n      utils.isBuffer(data) ||\n      utils.isStream(data) ||\n      utils.isFile(data) ||\n      utils.isBlob(data) ||\n      utils.isReadableStream(data)\n    ) {\n      return data;\n    }\n    if (utils.isArrayBufferView(data)) {\n      return data.buffer;\n    }\n    if (utils.isURLSearchParams(data)) {\n      headers.setContentType('application/x-www-form-urlencoded;charset=utf-8', false);\n      return data.toString();\n    }\n\n    let isFileList;\n\n    if (isObjectPayload) {\n      if (contentType.indexOf('application/x-www-form-urlencoded') > -1) {\n        return toURLEncodedForm(data, this.formSerializer).toString();\n      }\n\n      if ((isFileList = utils.isFileList(data)) || contentType.indexOf('multipart/form-data') > -1) {\n        const _FormData = this.env && this.env.FormData;\n\n        return toFormData(\n          isFileList ? {'files[]': data} : data,\n          _FormData && new _FormData(),\n          this.formSerializer\n        );\n      }\n    }\n\n    if (isObjectPayload || hasJSONContentType ) {\n      headers.setContentType('application/json', false);\n      return stringifySafely(data);\n    }\n\n    return data;\n  }],\n\n  transformResponse: [function transformResponse(data) {\n    const transitional = this.transitional || defaults.transitional;\n    const forcedJSONParsing = transitional && transitional.forcedJSONParsing;\n    const JSONRequested = this.responseType === 'json';\n\n    if (utils.isResponse(data) || utils.isReadableStream(data)) {\n      return data;\n    }\n\n    if (data && utils.isString(data) && ((forcedJSONParsing && !this.responseType) || JSONRequested)) {\n      const silentJSONParsing = transitional && transitional.silentJSONParsing;\n      const strictJSONParsing = !silentJSONParsing && JSONRequested;\n\n      try {\n        return JSON.parse(data, this.parseReviver);\n      } catch (e) {\n        if (strictJSONParsing) {\n          if (e.name === 'SyntaxError') {\n            throw AxiosError.from(e, AxiosError.ERR_BAD_RESPONSE, this, null, this.response);\n          }\n          throw e;\n        }\n      }\n    }\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  maxBodyLength: -1,\n\n  env: {\n    FormData: platform.classes.FormData,\n    Blob: platform.classes.Blob\n  },\n\n  validateStatus: function validateStatus(status) {\n    return status >= 200 && status < 300;\n  },\n\n  headers: {\n    common: {\n      'Accept': 'application/json, text/plain, */*',\n      'Content-Type': undefined\n    }\n  }\n};\n\nutils.forEach(['delete', 'get', 'head', 'post', 'put', 'patch'], (method) => {\n  defaults.headers[method] = {};\n});\n\nexport default defaults;\n","'use strict';\n\nimport utils from '../utils.js';\nimport toFormData from './toFormData.js';\nimport platform from '../platform/index.js';\n\nexport default function toURLEncodedForm(data, options) {\n  return toFormData(data, new platform.classes.URLSearchParams(), {\n    visitor: function(value, key, path, helpers) {\n      if (platform.isNode && utils.isBuffer(value)) {\n        this.append(key, value.toString('base64'));\n        return false;\n      }\n\n      return helpers.defaultVisitor.apply(this, arguments);\n    },\n    ...options\n  });\n}\n","'use strict';\n\nimport utils from './../utils.js';\n\n// RawAxiosHeaders whose duplicates are ignored by node\n// c.f. https://nodejs.org/api/http.html#http_message_headers\nconst ignoreDuplicateOf = utils.toObjectSet([\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} rawHeaders Headers needing to be parsed\n *\n * @returns {Object} Headers parsed into an object\n */\nexport default rawHeaders => {\n  const parsed = {};\n  let key;\n  let val;\n  let i;\n\n  rawHeaders && rawHeaders.split('\\n').forEach(function parser(line) {\n    i = line.indexOf(':');\n    key = line.substring(0, i).trim().toLowerCase();\n    val = line.substring(i + 1).trim();\n\n    if (!key || (parsed[key] && ignoreDuplicateOf[key])) {\n      return;\n    }\n\n    if (key === 'set-cookie') {\n      if (parsed[key]) {\n        parsed[key].push(val);\n      } else {\n        parsed[key] = [val];\n      }\n    } else {\n      parsed[key] = parsed[key] ? parsed[key] + ', ' + val : val;\n    }\n  });\n\n  return parsed;\n};\n","'use strict';\n\nimport utils from '../utils.js';\nimport parseHeaders from '../helpers/parseHeaders.js';\n\nconst $internals = Symbol('internals');\n\nfunction normalizeHeader(header) {\n  return header && String(header).trim().toLowerCase();\n}\n\nfunction normalizeValue(value) {\n  if (value === false || value == null) {\n    return value;\n  }\n\n  return utils.isArray(value) ? value.map(normalizeValue) : String(value);\n}\n\nfunction parseTokens(str) {\n  const tokens = Object.create(null);\n  const tokensRE = /([^\\s,;=]+)\\s*(?:=\\s*([^,;]+))?/g;\n  let match;\n\n  while ((match = tokensRE.exec(str))) {\n    tokens[match[1]] = match[2];\n  }\n\n  return tokens;\n}\n\nconst isValidHeaderName = (str) => /^[-_a-zA-Z0-9^`|~,!#$%&'*+.]+$/.test(str.trim());\n\nfunction matchHeaderValue(context, value, header, filter, isHeaderNameFilter) {\n  if (utils.isFunction(filter)) {\n    return filter.call(this, value, header);\n  }\n\n  if (isHeaderNameFilter) {\n    value = header;\n  }\n\n  if (!utils.isString(value)) return;\n\n  if (utils.isString(filter)) {\n    return value.indexOf(filter) !== -1;\n  }\n\n  if (utils.isRegExp(filter)) {\n    return filter.test(value);\n  }\n}\n\nfunction formatHeader(header) {\n  return header.trim()\n    .toLowerCase().replace(/([a-z\\d])(\\w*)/g, (w, char, str) => {\n      return char.toUpperCase() + str;\n    });\n}\n\nfunction buildAccessors(obj, header) {\n  const accessorName = utils.toCamelCase(' ' + header);\n\n  ['get', 'set', 'has'].forEach(methodName => {\n    Object.defineProperty(obj, methodName + accessorName, {\n      value: function(arg1, arg2, arg3) {\n        return this[methodName].call(this, header, arg1, arg2, arg3);\n      },\n      configurable: true\n    });\n  });\n}\n\nclass AxiosHeaders {\n  constructor(headers) {\n    headers && this.set(headers);\n  }\n\n  set(header, valueOrRewrite, rewrite) {\n    const self = this;\n\n    function setHeader(_value, _header, _rewrite) {\n      const lHeader = normalizeHeader(_header);\n\n      if (!lHeader) {\n        throw new Error('header name must be a non-empty string');\n      }\n\n      const key = utils.findKey(self, lHeader);\n\n      if(!key || self[key] === undefined || _rewrite === true || (_rewrite === undefined && self[key] !== false)) {\n        self[key || _header] = normalizeValue(_value);\n      }\n    }\n\n    const setHeaders = (headers, _rewrite) =>\n      utils.forEach(headers, (_value, _header) => setHeader(_value, _header, _rewrite));\n\n    if (utils.isPlainObject(header) || header instanceof this.constructor) {\n      setHeaders(header, valueOrRewrite)\n    } else if(utils.isString(header) && (header = header.trim()) && !isValidHeaderName(header)) {\n      setHeaders(parseHeaders(header), valueOrRewrite);\n    } else if (utils.isObject(header) && utils.isIterable(header)) {\n      let obj = {}, dest, key;\n      for (const entry of header) {\n        if (!utils.isArray(entry)) {\n          throw TypeError('Object iterator must return a key-value pair');\n        }\n\n        obj[key = entry[0]] = (dest = obj[key]) ?\n          (utils.isArray(dest) ? [...dest, entry[1]] : [dest, entry[1]]) : entry[1];\n      }\n\n      setHeaders(obj, valueOrRewrite)\n    } else {\n      header != null && setHeader(valueOrRewrite, header, rewrite);\n    }\n\n    return this;\n  }\n\n  get(header, parser) {\n    header = normalizeHeader(header);\n\n    if (header) {\n      const key = utils.findKey(this, header);\n\n      if (key) {\n        const value = this[key];\n\n        if (!parser) {\n          return value;\n        }\n\n        if (parser === true) {\n          return parseTokens(value);\n        }\n\n        if (utils.isFunction(parser)) {\n          return parser.call(this, value, key);\n        }\n\n        if (utils.isRegExp(parser)) {\n          return parser.exec(value);\n        }\n\n        throw new TypeError('parser must be boolean|regexp|function');\n      }\n    }\n  }\n\n  has(header, matcher) {\n    header = normalizeHeader(header);\n\n    if (header) {\n      const key = utils.findKey(this, header);\n\n      return !!(key && this[key] !== undefined && (!matcher || matchHeaderValue(this, this[key], key, matcher)));\n    }\n\n    return false;\n  }\n\n  delete(header, matcher) {\n    const self = this;\n    let deleted = false;\n\n    function deleteHeader(_header) {\n      _header = normalizeHeader(_header);\n\n      if (_header) {\n        const key = utils.findKey(self, _header);\n\n        if (key && (!matcher || matchHeaderValue(self, self[key], key, matcher))) {\n          delete self[key];\n\n          deleted = true;\n        }\n      }\n    }\n\n    if (utils.isArray(header)) {\n      header.forEach(deleteHeader);\n    } else {\n      deleteHeader(header);\n    }\n\n    return deleted;\n  }\n\n  clear(matcher) {\n    const keys = Object.keys(this);\n    let i = keys.length;\n    let deleted = false;\n\n    while (i--) {\n      const key = keys[i];\n      if(!matcher || matchHeaderValue(this, this[key], key, matcher, true)) {\n        delete this[key];\n        deleted = true;\n      }\n    }\n\n    return deleted;\n  }\n\n  normalize(format) {\n    const self = this;\n    const headers = {};\n\n    utils.forEach(this, (value, header) => {\n      const key = utils.findKey(headers, header);\n\n      if (key) {\n        self[key] = normalizeValue(value);\n        delete self[header];\n        return;\n      }\n\n      const normalized = format ? formatHeader(header) : String(header).trim();\n\n      if (normalized !== header) {\n        delete self[header];\n      }\n\n      self[normalized] = normalizeValue(value);\n\n      headers[normalized] = true;\n    });\n\n    return this;\n  }\n\n  concat(...targets) {\n    return this.constructor.concat(this, ...targets);\n  }\n\n  toJSON(asStrings) {\n    const obj = Object.create(null);\n\n    utils.forEach(this, (value, header) => {\n      value != null && value !== false && (obj[header] = asStrings && utils.isArray(value) ? value.join(', ') : value);\n    });\n\n    return obj;\n  }\n\n  [Symbol.iterator]() {\n    return Object.entries(this.toJSON())[Symbol.iterator]();\n  }\n\n  toString() {\n    return Object.entries(this.toJSON()).map(([header, value]) => header + ': ' + value).join('\\n');\n  }\n\n  getSetCookie() {\n    return this.get(\"set-cookie\") || [];\n  }\n\n  get [Symbol.toStringTag]() {\n    return 'AxiosHeaders';\n  }\n\n  static from(thing) {\n    return thing instanceof this ? thing : new this(thing);\n  }\n\n  static concat(first, ...targets) {\n    const computed = new this(first);\n\n    targets.forEach((target) => computed.set(target));\n\n    return computed;\n  }\n\n  static accessor(header) {\n    const internals = this[$internals] = (this[$internals] = {\n      accessors: {}\n    });\n\n    const accessors = internals.accessors;\n    const prototype = this.prototype;\n\n    function defineAccessor(_header) {\n      const lHeader = normalizeHeader(_header);\n\n      if (!accessors[lHeader]) {\n        buildAccessors(prototype, _header);\n        accessors[lHeader] = true;\n      }\n    }\n\n    utils.isArray(header) ? header.forEach(defineAccessor) : defineAccessor(header);\n\n    return this;\n  }\n}\n\nAxiosHeaders.accessor(['Content-Type', 'Content-Length', 'Accept', 'Accept-Encoding', 'User-Agent', 'Authorization']);\n\n// reserved names hotfix\nutils.reduceDescriptors(AxiosHeaders.prototype, ({value}, key) => {\n  let mapped = key[0].toUpperCase() + key.slice(1); // map `set` => `Set`\n  return {\n    get: () => value,\n    set(headerValue) {\n      this[mapped] = headerValue;\n    }\n  }\n});\n\nutils.freezeMethods(AxiosHeaders);\n\nexport default AxiosHeaders;\n","'use strict';\n\nimport utils from './../utils.js';\nimport defaults from '../defaults/index.js';\nimport AxiosHeaders from '../core/AxiosHeaders.js';\n\n/**\n * Transform the data for a request or a response\n *\n * @param {Array|Function} fns A single function or Array of functions\n * @param {?Object} response The response object\n *\n * @returns {*} The resulting transformed data\n */\nexport default function transformData(fns, response) {\n  const config = this || defaults;\n  const context = response || config;\n  const headers = AxiosHeaders.from(context.headers);\n  let data = context.data;\n\n  utils.forEach(fns, function transform(fn) {\n    data = fn.call(config, data, headers.normalize(), response ? response.status : undefined);\n  });\n\n  headers.normalize();\n\n  return data;\n}\n","'use strict';\n\nexport default function isCancel(value) {\n  return !!(value && value.__CANCEL__);\n}\n","'use strict';\n\nimport AxiosError from '../core/AxiosError.js';\nimport utils from '../utils.js';\n\n/**\n * A `CanceledError` is an object that is thrown when an operation is canceled.\n *\n * @param {string=} message The message.\n * @param {Object=} config The config.\n * @param {Object=} request The request.\n *\n * @returns {CanceledError} The created error.\n */\nfunction CanceledError(message, config, request) {\n  // eslint-disable-next-line no-eq-null,eqeqeq\n  AxiosError.call(this, message == null ? 'canceled' : message, AxiosError.ERR_CANCELED, config, request);\n  this.name = 'CanceledError';\n}\n\nutils.inherits(CanceledError, AxiosError, {\n  __CANCEL__: true\n});\n\nexport default CanceledError;\n","'use strict';\n\nimport AxiosError from './AxiosError.js';\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 *\n * @returns {object} The response.\n */\nexport default function settle(resolve, reject, response) {\n  const validateStatus = response.config.validateStatus;\n  if (!response.status || !validateStatus || validateStatus(response.status)) {\n    resolve(response);\n  } else {\n    reject(new AxiosError(\n      'Request failed with status code ' + response.status,\n      [AxiosError.ERR_BAD_REQUEST, AxiosError.ERR_BAD_RESPONSE][Math.floor(response.status / 100) - 4],\n      response.config,\n      response.request,\n      response\n    ));\n  }\n}\n","import speedometer from \"./speedometer.js\";\nimport throttle from \"./throttle.js\";\nimport utils from \"../utils.js\";\n\nexport const progressEventReducer = (listener, isDownloadStream, freq = 3) => {\n  let bytesNotified = 0;\n  const _speedometer = speedometer(50, 250);\n\n  return throttle(e => {\n    const loaded = e.loaded;\n    const total = e.lengthComputable ? e.total : undefined;\n    const progressBytes = loaded - bytesNotified;\n    const rate = _speedometer(progressBytes);\n    const inRange = loaded <= total;\n\n    bytesNotified = loaded;\n\n    const data = {\n      loaded,\n      total,\n      progress: total ? (loaded / total) : undefined,\n      bytes: progressBytes,\n      rate: rate ? rate : undefined,\n      estimated: rate && total && inRange ? (total - loaded) / rate : undefined,\n      event: e,\n      lengthComputable: total != null,\n      [isDownloadStream ? 'download' : 'upload']: true\n    };\n\n    listener(data);\n  }, freq);\n}\n\nexport const progressEventDecorator = (total, throttled) => {\n  const lengthComputable = total != null;\n\n  return [(loaded) => throttled[0]({\n    lengthComputable,\n    total,\n    loaded\n  }), throttled[1]];\n}\n\nexport const asyncDecorator = (fn) => (...args) => utils.asap(() => fn(...args));\n","'use strict';\n\n/**\n * Calculate data maxRate\n * @param {Number} [samplesCount= 10]\n * @param {Number} [min= 1000]\n * @returns {Function}\n */\nfunction speedometer(samplesCount, min) {\n  samplesCount = samplesCount || 10;\n  const bytes = new Array(samplesCount);\n  const timestamps = new Array(samplesCount);\n  let head = 0;\n  let tail = 0;\n  let firstSampleTS;\n\n  min = min !== undefined ? min : 1000;\n\n  return function push(chunkLength) {\n    const now = Date.now();\n\n    const startedAt = timestamps[tail];\n\n    if (!firstSampleTS) {\n      firstSampleTS = now;\n    }\n\n    bytes[head] = chunkLength;\n    timestamps[head] = now;\n\n    let i = tail;\n    let bytesCount = 0;\n\n    while (i !== head) {\n      bytesCount += bytes[i++];\n      i = i % samplesCount;\n    }\n\n    head = (head + 1) % samplesCount;\n\n    if (head === tail) {\n      tail = (tail + 1) % samplesCount;\n    }\n\n    if (now - firstSampleTS < min) {\n      return;\n    }\n\n    const passed = startedAt && now - startedAt;\n\n    return passed ? Math.round(bytesCount * 1000 / passed) : undefined;\n  };\n}\n\nexport default speedometer;\n","/**\n * Throttle decorator\n * @param {Function} fn\n * @param {Number} freq\n * @return {Function}\n */\nfunction throttle(fn, freq) {\n  let timestamp = 0;\n  let threshold = 1000 / freq;\n  let lastArgs;\n  let timer;\n\n  const invoke = (args, now = Date.now()) => {\n    timestamp = now;\n    lastArgs = null;\n    if (timer) {\n      clearTimeout(timer);\n      timer = null;\n    }\n    fn(...args);\n  }\n\n  const throttled = (...args) => {\n    const now = Date.now();\n    const passed = now - timestamp;\n    if ( passed >= threshold) {\n      invoke(args, now);\n    } else {\n      lastArgs = args;\n      if (!timer) {\n        timer = setTimeout(() => {\n          timer = null;\n          invoke(lastArgs)\n        }, threshold - passed);\n      }\n    }\n  }\n\n  const flush = () => lastArgs && invoke(lastArgs);\n\n  return [throttled, flush];\n}\n\nexport default throttle;\n","import platform from '../platform/index.js';\n\nexport default platform.hasStandardBrowserEnv ? ((origin, isMSIE) => (url) => {\n  url = new URL(url, platform.origin);\n\n  return (\n    origin.protocol === url.protocol &&\n    origin.host === url.host &&\n    (isMSIE || origin.port === url.port)\n  );\n})(\n  new URL(platform.origin),\n  platform.navigator && /(msie|trident)/i.test(platform.navigator.userAgent)\n) : () => true;\n","import utils from './../utils.js';\nimport platform from '../platform/index.js';\n\nexport default platform.hasStandardBrowserEnv ?\n\n  // Standard browser envs support document.cookie\n  {\n    write(name, value, expires, path, domain, secure) {\n      const cookie = [name + '=' + encodeURIComponent(value)];\n\n      utils.isNumber(expires) && cookie.push('expires=' + new Date(expires).toGMTString());\n\n      utils.isString(path) && cookie.push('path=' + path);\n\n      utils.isString(domain) && cookie.push('domain=' + domain);\n\n      secure === true && cookie.push('secure');\n\n      document.cookie = cookie.join('; ');\n    },\n\n    read(name) {\n      const match = document.cookie.match(new RegExp('(^|;\\\\s*)(' + name + ')=([^;]*)'));\n      return (match ? decodeURIComponent(match[3]) : null);\n    },\n\n    remove(name) {\n      this.write(name, '', Date.now() - 86400000);\n    }\n  }\n\n  :\n\n  // Non-standard browser env (web workers, react-native) lack needed support.\n  {\n    write() {},\n    read() {\n      return null;\n    },\n    remove() {}\n  };\n\n","'use strict';\n\nimport isAbsoluteURL from '../helpers/isAbsoluteURL.js';\nimport combineURLs from '../helpers/combineURLs.js';\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 *\n * @returns {string} The combined full path\n */\nexport default function buildFullPath(baseURL, requestedURL, allowAbsoluteUrls) {\n  let isRelativeUrl = !isAbsoluteURL(requestedURL);\n  if (baseURL && (isRelativeUrl || allowAbsoluteUrls == false)) {\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 *\n * @returns {boolean} True if the specified URL is absolute, otherwise false\n */\nexport default 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 *\n * @returns {string} The combined URL\n */\nexport default function combineURLs(baseURL, relativeURL) {\n  return relativeURL\n    ? baseURL.replace(/\\/?\\/$/, '') + '/' + relativeURL.replace(/^\\/+/, '')\n    : baseURL;\n}\n","'use strict';\n\nimport utils from '../utils.js';\nimport AxiosHeaders from \"./AxiosHeaders.js\";\n\nconst headersToObject = (thing) => thing instanceof AxiosHeaders ? { ...thing } : thing;\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 *\n * @returns {Object} New object resulting from merging config2 to config1\n */\nexport default function mergeConfig(config1, config2) {\n  // eslint-disable-next-line no-param-reassign\n  config2 = config2 || {};\n  const config = {};\n\n  function getMergedValue(target, source, prop, caseless) {\n    if (utils.isPlainObject(target) && utils.isPlainObject(source)) {\n      return utils.merge.call({caseless}, target, source);\n    } else if (utils.isPlainObject(source)) {\n      return utils.merge({}, source);\n    } else if (utils.isArray(source)) {\n      return source.slice();\n    }\n    return source;\n  }\n\n  // eslint-disable-next-line consistent-return\n  function mergeDeepProperties(a, b, prop , caseless) {\n    if (!utils.isUndefined(b)) {\n      return getMergedValue(a, b, prop , caseless);\n    } else if (!utils.isUndefined(a)) {\n      return getMergedValue(undefined, a, prop , caseless);\n    }\n  }\n\n  // eslint-disable-next-line consistent-return\n  function valueFromConfig2(a, b) {\n    if (!utils.isUndefined(b)) {\n      return getMergedValue(undefined, b);\n    }\n  }\n\n  // eslint-disable-next-line consistent-return\n  function defaultToConfig2(a, b) {\n    if (!utils.isUndefined(b)) {\n      return getMergedValue(undefined, b);\n    } else if (!utils.isUndefined(a)) {\n      return getMergedValue(undefined, a);\n    }\n  }\n\n  // eslint-disable-next-line consistent-return\n  function mergeDirectKeys(a, b, prop) {\n    if (prop in config2) {\n      return getMergedValue(a, b);\n    } else if (prop in config1) {\n      return getMergedValue(undefined, a);\n    }\n  }\n\n  const mergeMap = {\n    url: valueFromConfig2,\n    method: valueFromConfig2,\n    data: valueFromConfig2,\n    baseURL: defaultToConfig2,\n    transformRequest: defaultToConfig2,\n    transformResponse: defaultToConfig2,\n    paramsSerializer: defaultToConfig2,\n    timeout: defaultToConfig2,\n    timeoutMessage: defaultToConfig2,\n    withCredentials: defaultToConfig2,\n    withXSRFToken: defaultToConfig2,\n    adapter: defaultToConfig2,\n    responseType: defaultToConfig2,\n    xsrfCookieName: defaultToConfig2,\n    xsrfHeaderName: defaultToConfig2,\n    onUploadProgress: defaultToConfig2,\n    onDownloadProgress: defaultToConfig2,\n    decompress: defaultToConfig2,\n    maxContentLength: defaultToConfig2,\n    maxBodyLength: defaultToConfig2,\n    beforeRedirect: defaultToConfig2,\n    transport: defaultToConfig2,\n    httpAgent: defaultToConfig2,\n    httpsAgent: defaultToConfig2,\n    cancelToken: defaultToConfig2,\n    socketPath: defaultToConfig2,\n    responseEncoding: defaultToConfig2,\n    validateStatus: mergeDirectKeys,\n    headers: (a, b , prop) => mergeDeepProperties(headersToObject(a), headersToObject(b),prop, true)\n  };\n\n  utils.forEach(Object.keys({...config1, ...config2}), function computeConfigValue(prop) {\n    const merge = mergeMap[prop] || mergeDeepProperties;\n    const configValue = merge(config1[prop], config2[prop], prop);\n    (utils.isUndefined(configValue) && merge !== mergeDirectKeys) || (config[prop] = configValue);\n  });\n\n  return config;\n}\n","import platform from \"../platform/index.js\";\nimport utils from \"../utils.js\";\nimport isURLSameOrigin from \"./isURLSameOrigin.js\";\nimport cookies from \"./cookies.js\";\nimport buildFullPath from \"../core/buildFullPath.js\";\nimport mergeConfig from \"../core/mergeConfig.js\";\nimport AxiosHeaders from \"../core/AxiosHeaders.js\";\nimport buildURL from \"./buildURL.js\";\n\nexport default (config) => {\n  const newConfig = mergeConfig({}, config);\n\n  let { data, withXSRFToken, xsrfHeaderName, xsrfCookieName, headers, auth } = newConfig;\n\n  newConfig.headers = headers = AxiosHeaders.from(headers);\n\n  newConfig.url = buildURL(buildFullPath(newConfig.baseURL, newConfig.url, newConfig.allowAbsoluteUrls), config.params, config.paramsSerializer);\n\n  // HTTP basic authentication\n  if (auth) {\n    headers.set('Authorization', 'Basic ' +\n      btoa((auth.username || '') + ':' + (auth.password ? unescape(encodeURIComponent(auth.password)) : ''))\n    );\n  }\n\n  if (utils.isFormData(data)) {\n    if (platform.hasStandardBrowserEnv || platform.hasStandardBrowserWebWorkerEnv) {\n      headers.setContentType(undefined); // browser handles it\n    } else if (utils.isFunction(data.getHeaders)) {\n      // Node.js FormData (like form-data package)\n      const formHeaders = data.getHeaders();\n      // Only set safe headers to avoid overwriting security headers\n      const allowedHeaders = ['content-type', 'content-length'];\n      Object.entries(formHeaders).forEach(([key, val]) => {\n        if (allowedHeaders.includes(key.toLowerCase())) {\n          headers.set(key, val);\n        }\n      });\n    }\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\n  if (platform.hasStandardBrowserEnv) {\n    withXSRFToken && utils.isFunction(withXSRFToken) && (withXSRFToken = withXSRFToken(newConfig));\n\n    if (withXSRFToken || (withXSRFToken !== false && isURLSameOrigin(newConfig.url))) {\n      // Add xsrf header\n      const xsrfValue = xsrfHeaderName && xsrfCookieName && cookies.read(xsrfCookieName);\n\n      if (xsrfValue) {\n        headers.set(xsrfHeaderName, xsrfValue);\n      }\n    }\n  }\n\n  return newConfig;\n}\n\n","import utils from './../utils.js';\nimport settle from './../core/settle.js';\nimport transitionalDefaults from '../defaults/transitional.js';\nimport AxiosError from '../core/AxiosError.js';\nimport CanceledError from '../cancel/CanceledError.js';\nimport parseProtocol from '../helpers/parseProtocol.js';\nimport platform from '../platform/index.js';\nimport AxiosHeaders from '../core/AxiosHeaders.js';\nimport {progressEventReducer} from '../helpers/progressEventReducer.js';\nimport resolveConfig from \"../helpers/resolveConfig.js\";\n\nconst isXHRAdapterSupported = typeof XMLHttpRequest !== 'undefined';\n\nexport default isXHRAdapterSupported && function (config) {\n  return new Promise(function dispatchXhrRequest(resolve, reject) {\n    const _config = resolveConfig(config);\n    let requestData = _config.data;\n    const requestHeaders = AxiosHeaders.from(_config.headers).normalize();\n    let {responseType, onUploadProgress, onDownloadProgress} = _config;\n    let onCanceled;\n    let uploadThrottled, downloadThrottled;\n    let flushUpload, flushDownload;\n\n    function done() {\n      flushUpload && flushUpload(); // flush events\n      flushDownload && flushDownload(); // flush events\n\n      _config.cancelToken && _config.cancelToken.unsubscribe(onCanceled);\n\n      _config.signal && _config.signal.removeEventListener('abort', onCanceled);\n    }\n\n    let request = new XMLHttpRequest();\n\n    request.open(_config.method.toUpperCase(), _config.url, true);\n\n    // Set the request timeout in MS\n    request.timeout = _config.timeout;\n\n    function onloadend() {\n      if (!request) {\n        return;\n      }\n      // Prepare the response\n      const responseHeaders = AxiosHeaders.from(\n        'getAllResponseHeaders' in request && request.getAllResponseHeaders()\n      );\n      const responseData = !responseType || responseType === 'text' || responseType === 'json' ?\n        request.responseText : request.response;\n      const response = {\n        data: responseData,\n        status: request.status,\n        statusText: request.statusText,\n        headers: responseHeaders,\n        config,\n        request\n      };\n\n      settle(function _resolve(value) {\n        resolve(value);\n        done();\n      }, function _reject(err) {\n        reject(err);\n        done();\n      }, response);\n\n      // Clean up request\n      request = null;\n    }\n\n    if ('onloadend' in request) {\n      // Use onloadend if available\n      request.onloadend = onloadend;\n    } else {\n      // Listen for ready state to emulate onloadend\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        // readystate handler is calling before onerror or ontimeout handlers,\n        // so we should call onloadend on the next 'tick'\n        setTimeout(onloadend);\n      };\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(new AxiosError('Request aborted', AxiosError.ECONNABORTED, config, request));\n\n      // Clean up request\n      request = null;\n    };\n\n    // Handle low level network errors\n  request.onerror = function handleError(event) {\n       // Browsers deliver a ProgressEvent in XHR onerror\n       // (message may be empty; when present, surface it)\n       // See https://developer.mozilla.org/docs/Web/API/XMLHttpRequest/error_event\n       const msg = event && event.message ? event.message : 'Network Error';\n       const err = new AxiosError(msg, AxiosError.ERR_NETWORK, config, request);\n       // attach the underlying event for consumers who want details\n       err.event = event || null;\n       reject(err);\n       request = null;\n    };\n    \n    // Handle timeout\n    request.ontimeout = function handleTimeout() {\n      let timeoutErrorMessage = _config.timeout ? 'timeout of ' + _config.timeout + 'ms exceeded' : 'timeout exceeded';\n      const transitional = _config.transitional || transitionalDefaults;\n      if (_config.timeoutErrorMessage) {\n        timeoutErrorMessage = _config.timeoutErrorMessage;\n      }\n      reject(new AxiosError(\n        timeoutErrorMessage,\n        transitional.clarifyTimeoutError ? AxiosError.ETIMEDOUT : AxiosError.ECONNABORTED,\n        config,\n        request));\n\n      // Clean up request\n      request = null;\n    };\n\n    // Remove Content-Type if data is undefined\n    requestData === undefined && requestHeaders.setContentType(null);\n\n    // Add headers to the request\n    if ('setRequestHeader' in request) {\n      utils.forEach(requestHeaders.toJSON(), function setRequestHeader(val, key) {\n        request.setRequestHeader(key, val);\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 (responseType && responseType !== 'json') {\n      request.responseType = _config.responseType;\n    }\n\n    // Handle progress if needed\n    if (onDownloadProgress) {\n      ([downloadThrottled, flushDownload] = progressEventReducer(onDownloadProgress, true));\n      request.addEventListener('progress', downloadThrottled);\n    }\n\n    // Not all browsers support upload events\n    if (onUploadProgress && request.upload) {\n      ([uploadThrottled, flushUpload] = progressEventReducer(onUploadProgress));\n\n      request.upload.addEventListener('progress', uploadThrottled);\n\n      request.upload.addEventListener('loadend', flushUpload);\n    }\n\n    if (_config.cancelToken || _config.signal) {\n      // Handle cancellation\n      // eslint-disable-next-line func-names\n      onCanceled = cancel => {\n        if (!request) {\n          return;\n        }\n        reject(!cancel || cancel.type ? new CanceledError(null, config, request) : cancel);\n        request.abort();\n        request = null;\n      };\n\n      _config.cancelToken && _config.cancelToken.subscribe(onCanceled);\n      if (_config.signal) {\n        _config.signal.aborted ? onCanceled() : _config.signal.addEventListener('abort', onCanceled);\n      }\n    }\n\n    const protocol = parseProtocol(_config.url);\n\n    if (protocol && platform.protocols.indexOf(protocol) === -1) {\n      reject(new AxiosError('Unsupported protocol ' + protocol + ':', AxiosError.ERR_BAD_REQUEST, config));\n      return;\n    }\n\n\n    // Send the request\n    request.send(requestData || null);\n  });\n}\n","'use strict';\n\nexport default function parseProtocol(url) {\n  const match = /^([-+\\w]{1,25})(:?\\/\\/|:)/.exec(url);\n  return match && match[1] || '';\n}\n","import CanceledError from \"../cancel/CanceledError.js\";\nimport AxiosError from \"../core/AxiosError.js\";\nimport utils from '../utils.js';\n\nconst composeSignals = (signals, timeout) => {\n  const {length} = (signals = signals ? signals.filter(Boolean) : []);\n\n  if (timeout || length) {\n    let controller = new AbortController();\n\n    let aborted;\n\n    const onabort = function (reason) {\n      if (!aborted) {\n        aborted = true;\n        unsubscribe();\n        const err = reason instanceof Error ? reason : this.reason;\n        controller.abort(err instanceof AxiosError ? err : new CanceledError(err instanceof Error ? err.message : err));\n      }\n    }\n\n    let timer = timeout && setTimeout(() => {\n      timer = null;\n      onabort(new AxiosError(`timeout ${timeout} of ms exceeded`, AxiosError.ETIMEDOUT))\n    }, timeout)\n\n    const unsubscribe = () => {\n      if (signals) {\n        timer && clearTimeout(timer);\n        timer = null;\n        signals.forEach(signal => {\n          signal.unsubscribe ? signal.unsubscribe(onabort) : signal.removeEventListener('abort', onabort);\n        });\n        signals = null;\n      }\n    }\n\n    signals.forEach((signal) => signal.addEventListener('abort', onabort));\n\n    const {signal} = controller;\n\n    signal.unsubscribe = () => utils.asap(unsubscribe);\n\n    return signal;\n  }\n}\n\nexport default composeSignals;\n","\nexport const streamChunk = function* (chunk, chunkSize) {\n  let len = chunk.byteLength;\n\n  if (!chunkSize || len < chunkSize) {\n    yield chunk;\n    return;\n  }\n\n  let pos = 0;\n  let end;\n\n  while (pos < len) {\n    end = pos + chunkSize;\n    yield chunk.slice(pos, end);\n    pos = end;\n  }\n}\n\nexport const readBytes = async function* (iterable, chunkSize) {\n  for await (const chunk of readStream(iterable)) {\n    yield* streamChunk(chunk, chunkSize);\n  }\n}\n\nconst readStream = async function* (stream) {\n  if (stream[Symbol.asyncIterator]) {\n    yield* stream;\n    return;\n  }\n\n  const reader = stream.getReader();\n  try {\n    for (;;) {\n      const {done, value} = await reader.read();\n      if (done) {\n        break;\n      }\n      yield value;\n    }\n  } finally {\n    await reader.cancel();\n  }\n}\n\nexport const trackStream = (stream, chunkSize, onProgress, onFinish) => {\n  const iterator = readBytes(stream, chunkSize);\n\n  let bytes = 0;\n  let done;\n  let _onFinish = (e) => {\n    if (!done) {\n      done = true;\n      onFinish && onFinish(e);\n    }\n  }\n\n  return new ReadableStream({\n    async pull(controller) {\n      try {\n        const {done, value} = await iterator.next();\n\n        if (done) {\n         _onFinish();\n          controller.close();\n          return;\n        }\n\n        let len = value.byteLength;\n        if (onProgress) {\n          let loadedBytes = bytes += len;\n          onProgress(loadedBytes);\n        }\n        controller.enqueue(new Uint8Array(value));\n      } catch (err) {\n        _onFinish(err);\n        throw err;\n      }\n    },\n    cancel(reason) {\n      _onFinish(reason);\n      return iterator.return();\n    }\n  }, {\n    highWaterMark: 2\n  })\n}\n","import platform from \"../platform/index.js\";\nimport utils from \"../utils.js\";\nimport AxiosError from \"../core/AxiosError.js\";\nimport composeSignals from \"../helpers/composeSignals.js\";\nimport {trackStream} from \"../helpers/trackStream.js\";\nimport AxiosHeaders from \"../core/AxiosHeaders.js\";\nimport {progressEventReducer, progressEventDecorator, asyncDecorator} from \"../helpers/progressEventReducer.js\";\nimport resolveConfig from \"../helpers/resolveConfig.js\";\nimport settle from \"../core/settle.js\";\n\nconst DEFAULT_CHUNK_SIZE = 64 * 1024;\n\nconst {isFunction} = utils;\n\nconst globalFetchAPI = (({Request, Response}) => ({\n  Request, Response\n}))(utils.global);\n\nconst {\n  ReadableStream, TextEncoder\n} = utils.global;\n\n\nconst test = (fn, ...args) => {\n  try {\n    return !!fn(...args);\n  } catch (e) {\n    return false\n  }\n}\n\nconst factory = (env) => {\n  env = utils.merge.call({\n    skipUndefined: true\n  }, globalFetchAPI, env);\n\n  const {fetch: envFetch, Request, Response} = env;\n  const isFetchSupported = envFetch ? isFunction(envFetch) : typeof fetch === 'function';\n  const isRequestSupported = isFunction(Request);\n  const isResponseSupported = isFunction(Response);\n\n  if (!isFetchSupported) {\n    return false;\n  }\n\n  const isReadableStreamSupported = isFetchSupported && isFunction(ReadableStream);\n\n  const encodeText = isFetchSupported && (typeof TextEncoder === 'function' ?\n      ((encoder) => (str) => encoder.encode(str))(new TextEncoder()) :\n      async (str) => new Uint8Array(await new Request(str).arrayBuffer())\n  );\n\n  const supportsRequestStream = isRequestSupported && isReadableStreamSupported && test(() => {\n    let duplexAccessed = false;\n\n    const hasContentType = new Request(platform.origin, {\n      body: new ReadableStream(),\n      method: 'POST',\n      get duplex() {\n        duplexAccessed = true;\n        return 'half';\n      },\n    }).headers.has('Content-Type');\n\n    return duplexAccessed && !hasContentType;\n  });\n\n  const supportsResponseStream = isResponseSupported && isReadableStreamSupported &&\n    test(() => utils.isReadableStream(new Response('').body));\n\n  const resolvers = {\n    stream: supportsResponseStream && ((res) => res.body)\n  };\n\n  isFetchSupported && ((() => {\n    ['text', 'arrayBuffer', 'blob', 'formData', 'stream'].forEach(type => {\n      !resolvers[type] && (resolvers[type] = (res, config) => {\n        let method = res && res[type];\n\n        if (method) {\n          return method.call(res);\n        }\n\n        throw new AxiosError(`Response type '${type}' is not supported`, AxiosError.ERR_NOT_SUPPORT, config);\n      })\n    });\n  })());\n\n  const getBodyLength = async (body) => {\n    if (body == null) {\n      return 0;\n    }\n\n    if (utils.isBlob(body)) {\n      return body.size;\n    }\n\n    if (utils.isSpecCompliantForm(body)) {\n      const _request = new Request(platform.origin, {\n        method: 'POST',\n        body,\n      });\n      return (await _request.arrayBuffer()).byteLength;\n    }\n\n    if (utils.isArrayBufferView(body) || utils.isArrayBuffer(body)) {\n      return body.byteLength;\n    }\n\n    if (utils.isURLSearchParams(body)) {\n      body = body + '';\n    }\n\n    if (utils.isString(body)) {\n      return (await encodeText(body)).byteLength;\n    }\n  }\n\n  const resolveBodyLength = async (headers, body) => {\n    const length = utils.toFiniteNumber(headers.getContentLength());\n\n    return length == null ? getBodyLength(body) : length;\n  }\n\n  return async (config) => {\n    let {\n      url,\n      method,\n      data,\n      signal,\n      cancelToken,\n      timeout,\n      onDownloadProgress,\n      onUploadProgress,\n      responseType,\n      headers,\n      withCredentials = 'same-origin',\n      fetchOptions\n    } = resolveConfig(config);\n\n    let _fetch = envFetch || fetch;\n\n    responseType = responseType ? (responseType + '').toLowerCase() : 'text';\n\n    let composedSignal = composeSignals([signal, cancelToken && cancelToken.toAbortSignal()], timeout);\n\n    let request = null;\n\n    const unsubscribe = composedSignal && composedSignal.unsubscribe && (() => {\n      composedSignal.unsubscribe();\n    });\n\n    let requestContentLength;\n\n    try {\n      if (\n        onUploadProgress && supportsRequestStream && method !== 'get' && method !== 'head' &&\n        (requestContentLength = await resolveBodyLength(headers, data)) !== 0\n      ) {\n        let _request = new Request(url, {\n          method: 'POST',\n          body: data,\n          duplex: \"half\"\n        });\n\n        let contentTypeHeader;\n\n        if (utils.isFormData(data) && (contentTypeHeader = _request.headers.get('content-type'))) {\n          headers.setContentType(contentTypeHeader)\n        }\n\n        if (_request.body) {\n          const [onProgress, flush] = progressEventDecorator(\n            requestContentLength,\n            progressEventReducer(asyncDecorator(onUploadProgress))\n          );\n\n          data = trackStream(_request.body, DEFAULT_CHUNK_SIZE, onProgress, flush);\n        }\n      }\n\n      if (!utils.isString(withCredentials)) {\n        withCredentials = withCredentials ? 'include' : 'omit';\n      }\n\n      // Cloudflare Workers throws when credentials are defined\n      // see https://github.com/cloudflare/workerd/issues/902\n      const isCredentialsSupported = isRequestSupported && \"credentials\" in Request.prototype;\n\n      const resolvedOptions = {\n        ...fetchOptions,\n        signal: composedSignal,\n        method: method.toUpperCase(),\n        headers: headers.normalize().toJSON(),\n        body: data,\n        duplex: \"half\",\n        credentials: isCredentialsSupported ? withCredentials : undefined\n      };\n\n      request = isRequestSupported && new Request(url, resolvedOptions);\n\n      let response = await (isRequestSupported ? _fetch(request, fetchOptions) : _fetch(url, resolvedOptions));\n\n      const isStreamResponse = supportsResponseStream && (responseType === 'stream' || responseType === 'response');\n\n      if (supportsResponseStream && (onDownloadProgress || (isStreamResponse && unsubscribe))) {\n        const options = {};\n\n        ['status', 'statusText', 'headers'].forEach(prop => {\n          options[prop] = response[prop];\n        });\n\n        const responseContentLength = utils.toFiniteNumber(response.headers.get('content-length'));\n\n        const [onProgress, flush] = onDownloadProgress && progressEventDecorator(\n          responseContentLength,\n          progressEventReducer(asyncDecorator(onDownloadProgress), true)\n        ) || [];\n\n        response = new Response(\n          trackStream(response.body, DEFAULT_CHUNK_SIZE, onProgress, () => {\n            flush && flush();\n            unsubscribe && unsubscribe();\n          }),\n          options\n        );\n      }\n\n      responseType = responseType || 'text';\n\n      let responseData = await resolvers[utils.findKey(resolvers, responseType) || 'text'](response, config);\n\n      !isStreamResponse && unsubscribe && unsubscribe();\n\n      return await new Promise((resolve, reject) => {\n        settle(resolve, reject, {\n          data: responseData,\n          headers: AxiosHeaders.from(response.headers),\n          status: response.status,\n          statusText: response.statusText,\n          config,\n          request\n        })\n      })\n    } catch (err) {\n      unsubscribe && unsubscribe();\n\n      if (err && err.name === 'TypeError' && /Load failed|fetch/i.test(err.message)) {\n        throw Object.assign(\n          new AxiosError('Network Error', AxiosError.ERR_NETWORK, config, request),\n          {\n            cause: err.cause || err\n          }\n        )\n      }\n\n      throw AxiosError.from(err, err && err.code, config, request);\n    }\n  }\n}\n\nconst seedCache = new Map();\n\nexport const getFetch = (config) => {\n  let env = config ? config.env : {};\n  const {fetch, Request, Response} = env;\n  const seeds = [\n    Request, Response, fetch\n  ];\n\n  let len = seeds.length, i = len,\n    seed, target, map = seedCache;\n\n  while (i--) {\n    seed = seeds[i];\n    target = map.get(seed);\n\n    target === undefined && map.set(seed, target = (i ? new Map() : factory(env)))\n\n    map = target;\n  }\n\n  return target;\n};\n\nconst adapter = getFetch();\n\nexport default adapter;\n","import utils from '../utils.js';\nimport httpAdapter from './http.js';\nimport xhrAdapter from './xhr.js';\nimport * as fetchAdapter from './fetch.js';\nimport AxiosError from \"../core/AxiosError.js\";\n\nconst knownAdapters = {\n  http: httpAdapter,\n  xhr: xhrAdapter,\n  fetch: {\n    get: fetchAdapter.getFetch,\n  }\n}\n\nutils.forEach(knownAdapters, (fn, value) => {\n  if (fn) {\n    try {\n      Object.defineProperty(fn, 'name', {value});\n    } catch (e) {\n      // eslint-disable-next-line no-empty\n    }\n    Object.defineProperty(fn, 'adapterName', {value});\n  }\n});\n\nconst renderReason = (reason) => `- ${reason}`;\n\nconst isResolvedHandle = (adapter) => utils.isFunction(adapter) || adapter === null || adapter === false;\n\nexport default {\n  getAdapter: (adapters, config) => {\n    adapters = utils.isArray(adapters) ? adapters : [adapters];\n\n    const {length} = adapters;\n    let nameOrAdapter;\n    let adapter;\n\n    const rejectedReasons = {};\n\n    for (let i = 0; i < length; i++) {\n      nameOrAdapter = adapters[i];\n      let id;\n\n      adapter = nameOrAdapter;\n\n      if (!isResolvedHandle(nameOrAdapter)) {\n        adapter = knownAdapters[(id = String(nameOrAdapter)).toLowerCase()];\n\n        if (adapter === undefined) {\n          throw new AxiosError(`Unknown adapter '${id}'`);\n        }\n      }\n\n      if (adapter && (utils.isFunction(adapter) || (adapter = adapter.get(config)))) {\n        break;\n      }\n\n      rejectedReasons[id || '#' + i] = adapter;\n    }\n\n    if (!adapter) {\n\n      const reasons = Object.entries(rejectedReasons)\n        .map(([id, state]) => `adapter ${id} ` +\n          (state === false ? 'is not supported by the environment' : 'is not available in the build')\n        );\n\n      let s = length ?\n        (reasons.length > 1 ? 'since :\\n' + reasons.map(renderReason).join('\\n') : ' ' + renderReason(reasons[0])) :\n        'as no adapter specified';\n\n      throw new AxiosError(\n        `There is no suitable adapter to dispatch the request ` + s,\n        'ERR_NOT_SUPPORT'\n      );\n    }\n\n    return adapter;\n  },\n  adapters: knownAdapters\n}\n","// eslint-disable-next-line strict\nexport default null;\n","'use strict';\n\nimport transformData from './transformData.js';\nimport isCancel from '../cancel/isCancel.js';\nimport defaults from '../defaults/index.js';\nimport CanceledError from '../cancel/CanceledError.js';\nimport AxiosHeaders from '../core/AxiosHeaders.js';\nimport adapters from \"../adapters/adapters.js\";\n\n/**\n * Throws a `CanceledError` if cancellation has been requested.\n *\n * @param {Object} config The config that is to be used for the request\n *\n * @returns {void}\n */\nfunction throwIfCancellationRequested(config) {\n  if (config.cancelToken) {\n    config.cancelToken.throwIfRequested();\n  }\n\n  if (config.signal && config.signal.aborted) {\n    throw new CanceledError(null, config);\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 *\n * @returns {Promise} The Promise to be fulfilled\n */\nexport default function dispatchRequest(config) {\n  throwIfCancellationRequested(config);\n\n  config.headers = AxiosHeaders.from(config.headers);\n\n  // Transform request data\n  config.data = transformData.call(\n    config,\n    config.transformRequest\n  );\n\n  if (['post', 'put', 'patch'].indexOf(config.method) !== -1) {\n    config.headers.setContentType('application/x-www-form-urlencoded', false);\n  }\n\n  const adapter = adapters.getAdapter(config.adapter || defaults.adapter, config);\n\n  return adapter(config).then(function onAdapterResolution(response) {\n    throwIfCancellationRequested(config);\n\n    // Transform response data\n    response.data = transformData.call(\n      config,\n      config.transformResponse,\n      response\n    );\n\n    response.headers = AxiosHeaders.from(response.headers);\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.call(\n          config,\n          config.transformResponse,\n          reason.response\n        );\n        reason.response.headers = AxiosHeaders.from(reason.response.headers);\n      }\n    }\n\n    return Promise.reject(reason);\n  });\n}\n","export const VERSION = \"1.12.2\";","'use strict';\n\nimport {VERSION} from '../env/data.js';\nimport AxiosError from '../core/AxiosError.js';\n\nconst validators = {};\n\n// eslint-disable-next-line func-names\n['object', 'boolean', 'number', 'function', 'string', 'symbol'].forEach((type, i) => {\n  validators[type] = function validator(thing) {\n    return typeof thing === type || 'a' + (i < 1 ? 'n ' : ' ') + type;\n  };\n});\n\nconst deprecatedWarnings = {};\n\n/**\n * Transitional option validator\n *\n * @param {function|boolean?} validator - set to false if the transitional option has been removed\n * @param {string?} version - deprecated version / removed since version\n * @param {string?} message - some message with additional info\n *\n * @returns {function}\n */\nvalidators.transitional = function transitional(validator, version, message) {\n  function formatMessage(opt, desc) {\n    return '[Axios v' + VERSION + '] Transitional option \\'' + opt + '\\'' + desc + (message ? '. ' + message : '');\n  }\n\n  // eslint-disable-next-line func-names\n  return (value, opt, opts) => {\n    if (validator === false) {\n      throw new AxiosError(\n        formatMessage(opt, ' has been removed' + (version ? ' in ' + version : '')),\n        AxiosError.ERR_DEPRECATED\n      );\n    }\n\n    if (version && !deprecatedWarnings[opt]) {\n      deprecatedWarnings[opt] = true;\n      // eslint-disable-next-line no-console\n      console.warn(\n        formatMessage(\n          opt,\n          ' has been deprecated since v' + version + ' and will be removed in the near future'\n        )\n      );\n    }\n\n    return validator ? validator(value, opt, opts) : true;\n  };\n};\n\nvalidators.spelling = function spelling(correctSpelling) {\n  return (value, opt) => {\n    // eslint-disable-next-line no-console\n    console.warn(`${opt} is likely a misspelling of ${correctSpelling}`);\n    return true;\n  }\n};\n\n/**\n * Assert object's properties type\n *\n * @param {object} options\n * @param {object} schema\n * @param {boolean?} allowUnknown\n *\n * @returns {object}\n */\n\nfunction assertOptions(options, schema, allowUnknown) {\n  if (typeof options !== 'object') {\n    throw new AxiosError('options must be an object', AxiosError.ERR_BAD_OPTION_VALUE);\n  }\n  const keys = Object.keys(options);\n  let i = keys.length;\n  while (i-- > 0) {\n    const opt = keys[i];\n    const validator = schema[opt];\n    if (validator) {\n      const value = options[opt];\n      const result = value === undefined || validator(value, opt, options);\n      if (result !== true) {\n        throw new AxiosError('option ' + opt + ' must be ' + result, AxiosError.ERR_BAD_OPTION_VALUE);\n      }\n      continue;\n    }\n    if (allowUnknown !== true) {\n      throw new AxiosError('Unknown option ' + opt, AxiosError.ERR_BAD_OPTION);\n    }\n  }\n}\n\nexport default {\n  assertOptions,\n  validators\n};\n","'use strict';\n\nimport utils from './../utils.js';\nimport buildURL from '../helpers/buildURL.js';\nimport InterceptorManager from './InterceptorManager.js';\nimport dispatchRequest from './dispatchRequest.js';\nimport mergeConfig from './mergeConfig.js';\nimport buildFullPath from './buildFullPath.js';\nimport validator from '../helpers/validator.js';\nimport AxiosHeaders from './AxiosHeaders.js';\n\nconst validators = validator.validators;\n\n/**\n * Create a new instance of Axios\n *\n * @param {Object} instanceConfig The default config for the instance\n *\n * @return {Axios} A new instance of Axios\n */\nclass Axios {\n  constructor(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 {String|Object} configOrUrl The config specific for this request (merged with this.defaults)\n   * @param {?Object} config\n   *\n   * @returns {Promise} The Promise to be fulfilled\n   */\n  async request(configOrUrl, config) {\n    try {\n      return await this._request(configOrUrl, config);\n    } catch (err) {\n      if (err instanceof Error) {\n        let dummy = {};\n\n        Error.captureStackTrace ? Error.captureStackTrace(dummy) : (dummy = new Error());\n\n        // slice off the Error: ... line\n        const stack = dummy.stack ? dummy.stack.replace(/^.+\\n/, '') : '';\n        try {\n          if (!err.stack) {\n            err.stack = stack;\n            // match without the 2 top stack lines\n          } else if (stack && !String(err.stack).endsWith(stack.replace(/^.+\\n.+\\n/, ''))) {\n            err.stack += '\\n' + stack\n          }\n        } catch (e) {\n          // ignore the case where \"stack\" is an un-writable property\n        }\n      }\n\n      throw err;\n    }\n  }\n\n  _request(configOrUrl, config) {\n    /*eslint no-param-reassign:0*/\n    // Allow for axios('example/url'[, config]) a la fetch API\n    if (typeof configOrUrl === 'string') {\n      config = config || {};\n      config.url = configOrUrl;\n    } else {\n      config = configOrUrl || {};\n    }\n\n    config = mergeConfig(this.defaults, config);\n\n    const {transitional, paramsSerializer, headers} = config;\n\n    if (transitional !== undefined) {\n      validator.assertOptions(transitional, {\n        silentJSONParsing: validators.transitional(validators.boolean),\n        forcedJSONParsing: validators.transitional(validators.boolean),\n        clarifyTimeoutError: validators.transitional(validators.boolean)\n      }, false);\n    }\n\n    if (paramsSerializer != null) {\n      if (utils.isFunction(paramsSerializer)) {\n        config.paramsSerializer = {\n          serialize: paramsSerializer\n        }\n      } else {\n        validator.assertOptions(paramsSerializer, {\n          encode: validators.function,\n          serialize: validators.function\n        }, true);\n      }\n    }\n\n    // Set config.allowAbsoluteUrls\n    if (config.allowAbsoluteUrls !== undefined) {\n      // do nothing\n    } else if (this.defaults.allowAbsoluteUrls !== undefined) {\n      config.allowAbsoluteUrls = this.defaults.allowAbsoluteUrls;\n    } else {\n      config.allowAbsoluteUrls = true;\n    }\n\n    validator.assertOptions(config, {\n      baseUrl: validators.spelling('baseURL'),\n      withXsrfToken: validators.spelling('withXSRFToken')\n    }, true);\n\n    // Set config.method\n    config.method = (config.method || this.defaults.method || 'get').toLowerCase();\n\n    // Flatten headers\n    let contextHeaders = headers && utils.merge(\n      headers.common,\n      headers[config.method]\n    );\n\n    headers && utils.forEach(\n      ['delete', 'get', 'head', 'post', 'put', 'patch', 'common'],\n      (method) => {\n        delete headers[method];\n      }\n    );\n\n    config.headers = AxiosHeaders.concat(contextHeaders, headers);\n\n    // filter out skipped interceptors\n    const requestInterceptorChain = [];\n    let synchronousRequestInterceptors = true;\n    this.interceptors.request.forEach(function unshiftRequestInterceptors(interceptor) {\n      if (typeof interceptor.runWhen === 'function' && interceptor.runWhen(config) === false) {\n        return;\n      }\n\n      synchronousRequestInterceptors = synchronousRequestInterceptors && interceptor.synchronous;\n\n      requestInterceptorChain.unshift(interceptor.fulfilled, interceptor.rejected);\n    });\n\n    const responseInterceptorChain = [];\n    this.interceptors.response.forEach(function pushResponseInterceptors(interceptor) {\n      responseInterceptorChain.push(interceptor.fulfilled, interceptor.rejected);\n    });\n\n    let promise;\n    let i = 0;\n    let len;\n\n    if (!synchronousRequestInterceptors) {\n      const chain = [dispatchRequest.bind(this), undefined];\n      chain.unshift(...requestInterceptorChain);\n      chain.push(...responseInterceptorChain);\n      len = chain.length;\n\n      promise = Promise.resolve(config);\n\n      while (i < len) {\n        promise = promise.then(chain[i++], chain[i++]);\n      }\n\n      return promise;\n    }\n\n    len = requestInterceptorChain.length;\n\n    let newConfig = config;\n\n    while (i < len) {\n      const onFulfilled = requestInterceptorChain[i++];\n      const onRejected = requestInterceptorChain[i++];\n      try {\n        newConfig = onFulfilled(newConfig);\n      } catch (error) {\n        onRejected.call(this, error);\n        break;\n      }\n    }\n\n    try {\n      promise = dispatchRequest.call(this, newConfig);\n    } catch (error) {\n      return Promise.reject(error);\n    }\n\n    i = 0;\n    len = responseInterceptorChain.length;\n\n    while (i < len) {\n      promise = promise.then(responseInterceptorChain[i++], responseInterceptorChain[i++]);\n    }\n\n    return promise;\n  }\n\n  getUri(config) {\n    config = mergeConfig(this.defaults, config);\n    const fullPath = buildFullPath(config.baseURL, config.url, config.allowAbsoluteUrls);\n    return buildURL(fullPath, config.params, config.paramsSerializer);\n  }\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(mergeConfig(config || {}, {\n      method,\n      url,\n      data: (config || {}).data\n    }));\n  };\n});\n\nutils.forEach(['post', 'put', 'patch'], function forEachMethodWithData(method) {\n  /*eslint func-names:0*/\n\n  function generateHTTPMethod(isForm) {\n    return function httpMethod(url, data, config) {\n      return this.request(mergeConfig(config || {}, {\n        method,\n        headers: isForm ? {\n          'Content-Type': 'multipart/form-data'\n        } : {},\n        url,\n        data\n      }));\n    };\n  }\n\n  Axios.prototype[method] = generateHTTPMethod();\n\n  Axios.prototype[method + 'Form'] = generateHTTPMethod(true);\n});\n\nexport default Axios;\n","const HttpStatusCode = {\n  Continue: 100,\n  SwitchingProtocols: 101,\n  Processing: 102,\n  EarlyHints: 103,\n  Ok: 200,\n  Created: 201,\n  Accepted: 202,\n  NonAuthoritativeInformation: 203,\n  NoContent: 204,\n  ResetContent: 205,\n  PartialContent: 206,\n  MultiStatus: 207,\n  AlreadyReported: 208,\n  ImUsed: 226,\n  MultipleChoices: 300,\n  MovedPermanently: 301,\n  Found: 302,\n  SeeOther: 303,\n  NotModified: 304,\n  UseProxy: 305,\n  Unused: 306,\n  TemporaryRedirect: 307,\n  PermanentRedirect: 308,\n  BadRequest: 400,\n  Unauthorized: 401,\n  PaymentRequired: 402,\n  Forbidden: 403,\n  NotFound: 404,\n  MethodNotAllowed: 405,\n  NotAcceptable: 406,\n  ProxyAuthenticationRequired: 407,\n  RequestTimeout: 408,\n  Conflict: 409,\n  Gone: 410,\n  LengthRequired: 411,\n  PreconditionFailed: 412,\n  PayloadTooLarge: 413,\n  UriTooLong: 414,\n  UnsupportedMediaType: 415,\n  RangeNotSatisfiable: 416,\n  ExpectationFailed: 417,\n  ImATeapot: 418,\n  MisdirectedRequest: 421,\n  UnprocessableEntity: 422,\n  Locked: 423,\n  FailedDependency: 424,\n  TooEarly: 425,\n  UpgradeRequired: 426,\n  PreconditionRequired: 428,\n  TooManyRequests: 429,\n  RequestHeaderFieldsTooLarge: 431,\n  UnavailableForLegalReasons: 451,\n  InternalServerError: 500,\n  NotImplemented: 501,\n  BadGateway: 502,\n  ServiceUnavailable: 503,\n  GatewayTimeout: 504,\n  HttpVersionNotSupported: 505,\n  VariantAlsoNegotiates: 506,\n  InsufficientStorage: 507,\n  LoopDetected: 508,\n  NotExtended: 510,\n  NetworkAuthenticationRequired: 511,\n};\n\nObject.entries(HttpStatusCode).forEach(([key, value]) => {\n  HttpStatusCode[value] = key;\n});\n\nexport default HttpStatusCode;\n","'use strict';\n\nimport utils from './utils.js';\nimport bind from './helpers/bind.js';\nimport Axios from './core/Axios.js';\nimport mergeConfig from './core/mergeConfig.js';\nimport defaults from './defaults/index.js';\nimport formDataToJSON from './helpers/formDataToJSON.js';\nimport CanceledError from './cancel/CanceledError.js';\nimport CancelToken from './cancel/CancelToken.js';\nimport isCancel from './cancel/isCancel.js';\nimport {VERSION} from './env/data.js';\nimport toFormData from './helpers/toFormData.js';\nimport AxiosError from './core/AxiosError.js';\nimport spread from './helpers/spread.js';\nimport isAxiosError from './helpers/isAxiosError.js';\nimport AxiosHeaders from \"./core/AxiosHeaders.js\";\nimport adapters from './adapters/adapters.js';\nimport HttpStatusCode from './helpers/HttpStatusCode.js';\n\n/**\n * Create an instance of Axios\n *\n * @param {Object} defaultConfig The default config for the instance\n *\n * @returns {Axios} A new instance of Axios\n */\nfunction createInstance(defaultConfig) {\n  const context = new Axios(defaultConfig);\n  const instance = bind(Axios.prototype.request, context);\n\n  // Copy axios.prototype to instance\n  utils.extend(instance, Axios.prototype, context, {allOwnKeys: true});\n\n  // Copy context to instance\n  utils.extend(instance, context, null, {allOwnKeys: true});\n\n  // Factory for creating new instances\n  instance.create = function create(instanceConfig) {\n    return createInstance(mergeConfig(defaultConfig, instanceConfig));\n  };\n\n  return instance;\n}\n\n// Create the default instance to be exported\nconst axios = createInstance(defaults);\n\n// Expose Axios class to allow class inheritance\naxios.Axios = Axios;\n\n// Expose Cancel & CancelToken\naxios.CanceledError = CanceledError;\naxios.CancelToken = CancelToken;\naxios.isCancel = isCancel;\naxios.VERSION = VERSION;\naxios.toFormData = toFormData;\n\n// Expose AxiosError class\naxios.AxiosError = AxiosError;\n\n// alias for CanceledError for backward compatibility\naxios.Cancel = axios.CanceledError;\n\n// Expose all/spread\naxios.all = function all(promises) {\n  return Promise.all(promises);\n};\n\naxios.spread = spread;\n\n// Expose isAxiosError\naxios.isAxiosError = isAxiosError;\n\n// Expose mergeConfig\naxios.mergeConfig = mergeConfig;\n\naxios.AxiosHeaders = AxiosHeaders;\n\naxios.formToJSON = thing => formDataToJSON(utils.isHTMLForm(thing) ? new FormData(thing) : thing);\n\naxios.getAdapter = adapters.getAdapter;\n\naxios.HttpStatusCode = HttpStatusCode;\n\naxios.default = axios;\n\n// this module should only have a default export\nexport default axios\n","'use strict';\n\nimport CanceledError from './CanceledError.js';\n\n/**\n * A `CancelToken` is an object that can be used to request cancellation of an operation.\n *\n * @param {Function} executor The executor function.\n *\n * @returns {CancelToken}\n */\nclass CancelToken {\n  constructor(executor) {\n    if (typeof executor !== 'function') {\n      throw new TypeError('executor must be a function.');\n    }\n\n    let resolvePromise;\n\n    this.promise = new Promise(function promiseExecutor(resolve) {\n      resolvePromise = resolve;\n    });\n\n    const token = this;\n\n    // eslint-disable-next-line func-names\n    this.promise.then(cancel => {\n      if (!token._listeners) return;\n\n      let i = token._listeners.length;\n\n      while (i-- > 0) {\n        token._listeners[i](cancel);\n      }\n      token._listeners = null;\n    });\n\n    // eslint-disable-next-line func-names\n    this.promise.then = onfulfilled => {\n      let _resolve;\n      // eslint-disable-next-line func-names\n      const promise = new Promise(resolve => {\n        token.subscribe(resolve);\n        _resolve = resolve;\n      }).then(onfulfilled);\n\n      promise.cancel = function reject() {\n        token.unsubscribe(_resolve);\n      };\n\n      return promise;\n    };\n\n    executor(function cancel(message, config, request) {\n      if (token.reason) {\n        // Cancellation has already been requested\n        return;\n      }\n\n      token.reason = new CanceledError(message, config, request);\n      resolvePromise(token.reason);\n    });\n  }\n\n  /**\n   * Throws a `CanceledError` if cancellation has been requested.\n   */\n  throwIfRequested() {\n    if (this.reason) {\n      throw this.reason;\n    }\n  }\n\n  /**\n   * Subscribe to the cancel signal\n   */\n\n  subscribe(listener) {\n    if (this.reason) {\n      listener(this.reason);\n      return;\n    }\n\n    if (this._listeners) {\n      this._listeners.push(listener);\n    } else {\n      this._listeners = [listener];\n    }\n  }\n\n  /**\n   * Unsubscribe from the cancel signal\n   */\n\n  unsubscribe(listener) {\n    if (!this._listeners) {\n      return;\n    }\n    const index = this._listeners.indexOf(listener);\n    if (index !== -1) {\n      this._listeners.splice(index, 1);\n    }\n  }\n\n  toAbortSignal() {\n    const controller = new AbortController();\n\n    const abort = (err) => {\n      controller.abort(err);\n    };\n\n    this.subscribe(abort);\n\n    controller.signal.unsubscribe = () => this.unsubscribe(abort);\n\n    return controller.signal;\n  }\n\n  /**\n   * Returns an object that contains a new `CancelToken` and a function that, when called,\n   * cancels the `CancelToken`.\n   */\n  static source() {\n    let cancel;\n    const token = new CancelToken(function executor(c) {\n      cancel = c;\n    });\n    return {\n      token,\n      cancel\n    };\n  }\n}\n\nexport default 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 *\n * @returns {Function}\n */\nexport default function spread(callback) {\n  return function wrap(arr) {\n    return callback.apply(null, arr);\n  };\n}\n","'use strict';\n\nimport utils from './../utils.js';\n\n/**\n * Determines whether the payload is an error thrown by Axios\n *\n * @param {*} payload The value to test\n *\n * @returns {boolean} True if the payload is an error thrown by Axios, otherwise false\n */\nexport default function isAxiosError(payload) {\n  return utils.isObject(payload) && (payload.isAxiosError === true);\n}\n","import axios from './lib/axios.js';\n\n// This module is intended to unwrap Axios default export as named.\n// Keep top-level export same with static properties\n// so that it can keep same with es module or cjs\nconst {\n  Axios,\n  AxiosError,\n  CanceledError,\n  isCancel,\n  CancelToken,\n  VERSION,\n  all,\n  Cancel,\n  isAxiosError,\n  spread,\n  toFormData,\n  AxiosHeaders,\n  HttpStatusCode,\n  formToJSON,\n  getAdapter,\n  mergeConfig\n} = axios;\n\nexport {\n  axios as default,\n  Axios,\n  AxiosError,\n  CanceledError,\n  isCancel,\n  CancelToken,\n  VERSION,\n  all,\n  Cancel,\n  isAxiosError,\n  spread,\n  toFormData,\n  AxiosHeaders,\n  HttpStatusCode,\n  formToJSON,\n  getAdapter,\n  mergeConfig\n}\n","/**\n * marked v16.4.0 - a markdown parser\n * Copyright (c) 2011-2025, Christopher Jeffrey. (MIT Licensed)\n * https://github.com/markedjs/marked\n */\n\n/**\n * DO NOT EDIT THIS FILE\n * The code in this file is generated from files in ./src/\n */\n\nfunction L(){return{async:!1,breaks:!1,extensions:null,gfm:!0,hooks:null,pedantic:!1,renderer:null,silent:!1,tokenizer:null,walkTokens:null}}var T=L();function G(u){T=u}var I={exec:()=>null};function d(u,e=\"\"){let t=typeof u==\"string\"?u:u.source,n={replace:(r,i)=>{let s=typeof i==\"string\"?i:i.source;return s=s.replace(m.caret,\"$1\"),t=t.replace(r,s),n},getRegex:()=>new RegExp(t,e)};return n}var m={codeRemoveIndent:/^(?: {1,4}| {0,3}\\t)/gm,outputLinkReplace:/\\\\([\\[\\]])/g,indentCodeCompensation:/^(\\s+)(?:```)/,beginningSpace:/^\\s+/,endingHash:/#$/,startingSpaceChar:/^ /,endingSpaceChar:/ $/,nonSpaceChar:/[^ ]/,newLineCharGlobal:/\\n/g,tabCharGlobal:/\\t/g,multipleSpaceGlobal:/\\s+/g,blankLine:/^[ \\t]*$/,doubleBlankLine:/\\n[ \\t]*\\n[ \\t]*$/,blockquoteStart:/^ {0,3}>/,blockquoteSetextReplace:/\\n {0,3}((?:=+|-+) *)(?=\\n|$)/g,blockquoteSetextReplace2:/^ {0,3}>[ \\t]?/gm,listReplaceTabs:/^\\t+/,listReplaceNesting:/^ {1,4}(?=( {4})*[^ ])/g,listIsTask:/^\\[[ xX]\\] /,listReplaceTask:/^\\[[ xX]\\] +/,anyLine:/\\n.*\\n/,hrefBrackets:/^<(.*)>$/,tableDelimiter:/[:|]/,tableAlignChars:/^\\||\\| *$/g,tableRowBlankLine:/\\n[ \\t]*$/,tableAlignRight:/^ *-+: *$/,tableAlignCenter:/^ *:-+: *$/,tableAlignLeft:/^ *:-+ *$/,startATag:/^<a /i,endATag:/^<\\/a>/i,startPreScriptTag:/^<(pre|code|kbd|script)(\\s|>)/i,endPreScriptTag:/^<\\/(pre|code|kbd|script)(\\s|>)/i,startAngleBracket:/^</,endAngleBracket:/>$/,pedanticHrefTitle:/^([^'\"]*[^\\s])\\s+(['\"])(.*)\\2/,unicodeAlphaNumeric:/[\\p{L}\\p{N}]/u,escapeTest:/[&<>\"']/,escapeReplace:/[&<>\"']/g,escapeTestNoEncode:/[<>\"']|&(?!(#\\d{1,7}|#[Xx][a-fA-F0-9]{1,6}|\\w+);)/,escapeReplaceNoEncode:/[<>\"']|&(?!(#\\d{1,7}|#[Xx][a-fA-F0-9]{1,6}|\\w+);)/g,unescapeTest:/&(#(?:\\d+)|(?:#x[0-9A-Fa-f]+)|(?:\\w+));?/ig,caret:/(^|[^\\[])\\^/g,percentDecode:/%25/g,findPipe:/\\|/g,splitPipe:/ \\|/,slashPipe:/\\\\\\|/g,carriageReturn:/\\r\\n|\\r/g,spaceLine:/^ +$/gm,notSpaceStart:/^\\S*/,endingNewline:/\\n$/,listItemRegex:u=>new RegExp(`^( {0,3}${u})((?:[\t ][^\\\\n]*)?(?:\\\\n|$))`),nextBulletRegex:u=>new RegExp(`^ {0,${Math.min(3,u-1)}}(?:[*+-]|\\\\d{1,9}[.)])((?:[ \t][^\\\\n]*)?(?:\\\\n|$))`),hrRegex:u=>new RegExp(`^ {0,${Math.min(3,u-1)}}((?:- *){3,}|(?:_ *){3,}|(?:\\\\* *){3,})(?:\\\\n+|$)`),fencesBeginRegex:u=>new RegExp(`^ {0,${Math.min(3,u-1)}}(?:\\`\\`\\`|~~~)`),headingBeginRegex:u=>new RegExp(`^ {0,${Math.min(3,u-1)}}#`),htmlBeginRegex:u=>new RegExp(`^ {0,${Math.min(3,u-1)}}<(?:[a-z].*>|!--)`,\"i\")},be=/^(?:[ \\t]*(?:\\n|$))+/,Re=/^((?: {4}| {0,3}\\t)[^\\n]+(?:\\n(?:[ \\t]*(?:\\n|$))*)?)+/,Te=/^ {0,3}(`{3,}(?=[^`\\n]*(?:\\n|$))|~{3,})([^\\n]*)(?:\\n|$)(?:|([\\s\\S]*?)(?:\\n|$))(?: {0,3}\\1[~`]* *(?=\\n|$)|$)/,E=/^ {0,3}((?:-[\\t ]*){3,}|(?:_[ \\t]*){3,}|(?:\\*[ \\t]*){3,})(?:\\n+|$)/,Oe=/^ {0,3}(#{1,6})(?=\\s|$)(.*)(?:\\n+|$)/,F=/(?:[*+-]|\\d{1,9}[.)])/,ie=/^(?!bull |blockCode|fences|blockquote|heading|html|table)((?:.|\\n(?!\\s*?\\n|bull |blockCode|fences|blockquote|heading|html|table))+?)\\n {0,3}(=+|-+) *(?:\\n+|$)/,oe=d(ie).replace(/bull/g,F).replace(/blockCode/g,/(?: {4}| {0,3}\\t)/).replace(/fences/g,/ {0,3}(?:`{3,}|~{3,})/).replace(/blockquote/g,/ {0,3}>/).replace(/heading/g,/ {0,3}#{1,6}/).replace(/html/g,/ {0,3}<[^\\n>]+>\\n/).replace(/\\|table/g,\"\").getRegex(),we=d(ie).replace(/bull/g,F).replace(/blockCode/g,/(?: {4}| {0,3}\\t)/).replace(/fences/g,/ {0,3}(?:`{3,}|~{3,})/).replace(/blockquote/g,/ {0,3}>/).replace(/heading/g,/ {0,3}#{1,6}/).replace(/html/g,/ {0,3}<[^\\n>]+>\\n/).replace(/table/g,/ {0,3}\\|?(?:[:\\- ]*\\|)+[\\:\\- ]*\\n/).getRegex(),j=/^([^\\n]+(?:\\n(?!hr|heading|lheading|blockquote|fences|list|html|table| +\\n)[^\\n]+)*)/,ye=/^[^\\n]+/,Q=/(?!\\s*\\])(?:\\\\[\\s\\S]|[^\\[\\]\\\\])+/,Pe=d(/^ {0,3}\\[(label)\\]: *(?:\\n[ \\t]*)?([^<\\s][^\\s]*|<.*?>)(?:(?: +(?:\\n[ \\t]*)?| *\\n[ \\t]*)(title))? *(?:\\n+|$)/).replace(\"label\",Q).replace(\"title\",/(?:\"(?:\\\\\"?|[^\"\\\\])*\"|'[^'\\n]*(?:\\n[^'\\n]+)*\\n?'|\\([^()]*\\))/).getRegex(),Se=d(/^( {0,3}bull)([ \\t][^\\n]+?)?(?:\\n|$)/).replace(/bull/g,F).getRegex(),v=\"address|article|aside|base|basefont|blockquote|body|caption|center|col|colgroup|dd|details|dialog|dir|div|dl|dt|fieldset|figcaption|figure|footer|form|frame|frameset|h[1-6]|head|header|hr|html|iframe|legend|li|link|main|menu|menuitem|meta|nav|noframes|ol|optgroup|option|p|param|search|section|summary|table|tbody|td|tfoot|th|thead|title|tr|track|ul\",U=/<!--(?:-?>|[\\s\\S]*?(?:-->|$))/,$e=d(\"^ {0,3}(?:<(script|pre|style|textarea)[\\\\s>][\\\\s\\\\S]*?(?:</\\\\1>[^\\\\n]*\\\\n+|$)|comment[^\\\\n]*(\\\\n+|$)|<\\\\?[\\\\s\\\\S]*?(?:\\\\?>\\\\n*|$)|<![A-Z][\\\\s\\\\S]*?(?:>\\\\n*|$)|<!\\\\[CDATA\\\\[[\\\\s\\\\S]*?(?:\\\\]\\\\]>\\\\n*|$)|</?(tag)(?: +|\\\\n|/?>)[\\\\s\\\\S]*?(?:(?:\\\\n[ \t]*)+\\\\n|$)|<(?!script|pre|style|textarea)([a-z][\\\\w-]*)(?:attribute)*? */?>(?=[ \\\\t]*(?:\\\\n|$))[\\\\s\\\\S]*?(?:(?:\\\\n[ \t]*)+\\\\n|$)|</(?!script|pre|style|textarea)[a-z][\\\\w-]*\\\\s*>(?=[ \\\\t]*(?:\\\\n|$))[\\\\s\\\\S]*?(?:(?:\\\\n[ \t]*)+\\\\n|$))\",\"i\").replace(\"comment\",U).replace(\"tag\",v).replace(\"attribute\",/ +[a-zA-Z:_][\\w.:-]*(?: *= *\"[^\"\\n]*\"| *= *'[^'\\n]*'| *= *[^\\s\"'=<>`]+)?/).getRegex(),ae=d(j).replace(\"hr\",E).replace(\"heading\",\" {0,3}#{1,6}(?:\\\\s|$)\").replace(\"|lheading\",\"\").replace(\"|table\",\"\").replace(\"blockquote\",\" {0,3}>\").replace(\"fences\",\" {0,3}(?:`{3,}(?=[^`\\\\n]*\\\\n)|~{3,})[^\\\\n]*\\\\n\").replace(\"list\",\" {0,3}(?:[*+-]|1[.)]) \").replace(\"html\",\"</?(?:tag)(?: +|\\\\n|/?>)|<(?:script|pre|style|textarea|!--)\").replace(\"tag\",v).getRegex(),_e=d(/^( {0,3}> ?(paragraph|[^\\n]*)(?:\\n|$))+/).replace(\"paragraph\",ae).getRegex(),K={blockquote:_e,code:Re,def:Pe,fences:Te,heading:Oe,hr:E,html:$e,lheading:oe,list:Se,newline:be,paragraph:ae,table:I,text:ye},re=d(\"^ *([^\\\\n ].*)\\\\n {0,3}((?:\\\\| *)?:?-+:? *(?:\\\\| *:?-+:? *)*(?:\\\\| *)?)(?:\\\\n((?:(?! *\\\\n|hr|heading|blockquote|code|fences|list|html).*(?:\\\\n|$))*)\\\\n*|$)\").replace(\"hr\",E).replace(\"heading\",\" {0,3}#{1,6}(?:\\\\s|$)\").replace(\"blockquote\",\" {0,3}>\").replace(\"code\",\"(?: {4}| {0,3}\t)[^\\\\n]\").replace(\"fences\",\" {0,3}(?:`{3,}(?=[^`\\\\n]*\\\\n)|~{3,})[^\\\\n]*\\\\n\").replace(\"list\",\" {0,3}(?:[*+-]|1[.)]) \").replace(\"html\",\"</?(?:tag)(?: +|\\\\n|/?>)|<(?:script|pre|style|textarea|!--)\").replace(\"tag\",v).getRegex(),Le={...K,lheading:we,table:re,paragraph:d(j).replace(\"hr\",E).replace(\"heading\",\" {0,3}#{1,6}(?:\\\\s|$)\").replace(\"|lheading\",\"\").replace(\"table\",re).replace(\"blockquote\",\" {0,3}>\").replace(\"fences\",\" {0,3}(?:`{3,}(?=[^`\\\\n]*\\\\n)|~{3,})[^\\\\n]*\\\\n\").replace(\"list\",\" {0,3}(?:[*+-]|1[.)]) \").replace(\"html\",\"</?(?:tag)(?: +|\\\\n|/?>)|<(?:script|pre|style|textarea|!--)\").replace(\"tag\",v).getRegex()},Me={...K,html:d(`^ *(?:comment *(?:\\\\n|\\\\s*$)|<(tag)[\\\\s\\\\S]+?</\\\\1> *(?:\\\\n{2,}|\\\\s*$)|<tag(?:\"[^\"]*\"|'[^']*'|\\\\s[^'\"/>\\\\s]*)*?/?> *(?:\\\\n{2,}|\\\\s*$))`).replace(\"comment\",U).replace(/tag/g,\"(?!(?:a|em|strong|small|s|cite|q|dfn|abbr|data|time|code|var|samp|kbd|sub|sup|i|b|u|mark|ruby|rt|rp|bdi|bdo|span|br|wbr|ins|del|img)\\\\b)\\\\w+(?!:|[^\\\\w\\\\s@]*@)\\\\b\").getRegex(),def:/^ *\\[([^\\]]+)\\]: *<?([^\\s>]+)>?(?: +([\"(][^\\n]+[\")]))? *(?:\\n+|$)/,heading:/^(#{1,6})(.*)(?:\\n+|$)/,fences:I,lheading:/^(.+?)\\n {0,3}(=+|-+) *(?:\\n+|$)/,paragraph:d(j).replace(\"hr\",E).replace(\"heading\",` *#{1,6} *[^\n]`).replace(\"lheading\",oe).replace(\"|table\",\"\").replace(\"blockquote\",\" {0,3}>\").replace(\"|fences\",\"\").replace(\"|list\",\"\").replace(\"|html\",\"\").replace(\"|tag\",\"\").getRegex()},ze=/^\\\\([!\"#$%&'()*+,\\-./:;<=>?@\\[\\]\\\\^_`{|}~])/,Ae=/^(`+)([^`]|[^`][\\s\\S]*?[^`])\\1(?!`)/,le=/^( {2,}|\\\\)\\n(?!\\s*$)/,Ie=/^(`+|[^`])(?:(?= {2,}\\n)|[\\s\\S]*?(?:(?=[\\\\<!\\[`*_]|\\b_|$)|[^ ](?= {2,}\\n)))/,D=/[\\p{P}\\p{S}]/u,W=/[\\s\\p{P}\\p{S}]/u,ue=/[^\\s\\p{P}\\p{S}]/u,Ee=d(/^((?![*_])punctSpace)/,\"u\").replace(/punctSpace/g,W).getRegex(),pe=/(?!~)[\\p{P}\\p{S}]/u,Ce=/(?!~)[\\s\\p{P}\\p{S}]/u,Be=/(?:[^\\s\\p{P}\\p{S}]|~)/u,qe=/\\[(?:[^\\[\\]`]|`[^`]*?`)*?\\]\\((?:\\\\[\\s\\S]|[^\\\\\\(\\)]|\\((?:\\\\[\\s\\S]|[^\\\\\\(\\)])*\\))*\\)|`[^`]*?`|<(?! )[^<>]*?>/g,ce=/^(?:\\*+(?:((?!\\*)punct)|[^\\s*]))|^_+(?:((?!_)punct)|([^\\s_]))/,ve=d(ce,\"u\").replace(/punct/g,D).getRegex(),De=d(ce,\"u\").replace(/punct/g,pe).getRegex(),he=\"^[^_*]*?__[^_*]*?\\\\*[^_*]*?(?=__)|[^*]+(?=[^*])|(?!\\\\*)punct(\\\\*+)(?=[\\\\s]|$)|notPunctSpace(\\\\*+)(?!\\\\*)(?=punctSpace|$)|(?!\\\\*)punctSpace(\\\\*+)(?=notPunctSpace)|[\\\\s](\\\\*+)(?!\\\\*)(?=punct)|(?!\\\\*)punct(\\\\*+)(?!\\\\*)(?=punct)|notPunctSpace(\\\\*+)(?=notPunctSpace)\",He=d(he,\"gu\").replace(/notPunctSpace/g,ue).replace(/punctSpace/g,W).replace(/punct/g,D).getRegex(),Ze=d(he,\"gu\").replace(/notPunctSpace/g,Be).replace(/punctSpace/g,Ce).replace(/punct/g,pe).getRegex(),Ge=d(\"^[^_*]*?\\\\*\\\\*[^_*]*?_[^_*]*?(?=\\\\*\\\\*)|[^_]+(?=[^_])|(?!_)punct(_+)(?=[\\\\s]|$)|notPunctSpace(_+)(?!_)(?=punctSpace|$)|(?!_)punctSpace(_+)(?=notPunctSpace)|[\\\\s](_+)(?!_)(?=punct)|(?!_)punct(_+)(?!_)(?=punct)\",\"gu\").replace(/notPunctSpace/g,ue).replace(/punctSpace/g,W).replace(/punct/g,D).getRegex(),Ne=d(/\\\\(punct)/,\"gu\").replace(/punct/g,D).getRegex(),Fe=d(/^<(scheme:[^\\s\\x00-\\x1f<>]*|email)>/).replace(\"scheme\",/[a-zA-Z][a-zA-Z0-9+.-]{1,31}/).replace(\"email\",/[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])?)+(?![-_])/).getRegex(),je=d(U).replace(\"(?:-->|$)\",\"-->\").getRegex(),Qe=d(\"^comment|^</[a-zA-Z][\\\\w:-]*\\\\s*>|^<[a-zA-Z][\\\\w-]*(?:attribute)*?\\\\s*/?>|^<\\\\?[\\\\s\\\\S]*?\\\\?>|^<![a-zA-Z]+\\\\s[\\\\s\\\\S]*?>|^<!\\\\[CDATA\\\\[[\\\\s\\\\S]*?\\\\]\\\\]>\").replace(\"comment\",je).replace(\"attribute\",/\\s+[a-zA-Z:_][\\w.:-]*(?:\\s*=\\s*\"[^\"]*\"|\\s*=\\s*'[^']*'|\\s*=\\s*[^\\s\"'=<>`]+)?/).getRegex(),q=/(?:\\[(?:\\\\[\\s\\S]|[^\\[\\]\\\\])*\\]|\\\\[\\s\\S]|`+[^`]*?`+(?!`)|[^\\[\\]\\\\`])*?/,Ue=d(/^!?\\[(label)\\]\\(\\s*(href)(?:(?:[ \\t]*(?:\\n[ \\t]*)?)(title))?\\s*\\)/).replace(\"label\",q).replace(\"href\",/<(?:\\\\.|[^\\n<>\\\\])+>|[^ \\t\\n\\x00-\\x1f]*/).replace(\"title\",/\"(?:\\\\\"?|[^\"\\\\])*\"|'(?:\\\\'?|[^'\\\\])*'|\\((?:\\\\\\)?|[^)\\\\])*\\)/).getRegex(),de=d(/^!?\\[(label)\\]\\[(ref)\\]/).replace(\"label\",q).replace(\"ref\",Q).getRegex(),ke=d(/^!?\\[(ref)\\](?:\\[\\])?/).replace(\"ref\",Q).getRegex(),Ke=d(\"reflink|nolink(?!\\\\()\",\"g\").replace(\"reflink\",de).replace(\"nolink\",ke).getRegex(),se=/[hH][tT][tT][pP][sS]?|[fF][tT][pP]/,X={_backpedal:I,anyPunctuation:Ne,autolink:Fe,blockSkip:qe,br:le,code:Ae,del:I,emStrongLDelim:ve,emStrongRDelimAst:He,emStrongRDelimUnd:Ge,escape:ze,link:Ue,nolink:ke,punctuation:Ee,reflink:de,reflinkSearch:Ke,tag:Qe,text:Ie,url:I},We={...X,link:d(/^!?\\[(label)\\]\\((.*?)\\)/).replace(\"label\",q).getRegex(),reflink:d(/^!?\\[(label)\\]\\s*\\[([^\\]]*)\\]/).replace(\"label\",q).getRegex()},N={...X,emStrongRDelimAst:Ze,emStrongLDelim:De,url:d(/^((?:protocol):\\/\\/|www\\.)(?:[a-zA-Z0-9\\-]+\\.?)+[^\\s<]*|^email/).replace(\"protocol\",se).replace(\"email\",/[A-Za-z0-9._+-]+(@)[a-zA-Z0-9-_]+(?:\\.[a-zA-Z0-9-_]*[a-zA-Z0-9])+(?![-_])/).getRegex(),_backpedal:/(?:[^?!.,:;*_'\"~()&]+|\\([^)]*\\)|&(?![a-zA-Z0-9]+;$)|[?!.,:;*_'\"~)]+(?!$))+/,del:/^(~~?)(?=[^\\s~])((?:\\\\[\\s\\S]|[^\\\\])*?(?:\\\\[\\s\\S]|[^\\s~\\\\]))\\1(?=[^~]|$)/,text:d(/^([`~]+|[^`~])(?:(?= {2,}\\n)|(?=[a-zA-Z0-9.!#$%&'*+\\/=?_`{\\|}~-]+@)|[\\s\\S]*?(?:(?=[\\\\<!\\[`*~_]|\\b_|protocol:\\/\\/|www\\.|$)|[^ ](?= {2,}\\n)|[^a-zA-Z0-9.!#$%&'*+\\/=?_`{\\|}~-](?=[a-zA-Z0-9.!#$%&'*+\\/=?_`{\\|}~-]+@)))/).replace(\"protocol\",se).getRegex()},Xe={...N,br:d(le).replace(\"{2,}\",\"*\").getRegex(),text:d(N.text).replace(\"\\\\b_\",\"\\\\b_| {2,}\\\\n\").replace(/\\{2,\\}/g,\"*\").getRegex()},C={normal:K,gfm:Le,pedantic:Me},M={normal:X,gfm:N,breaks:Xe,pedantic:We};var Je={\"&\":\"&amp;\",\"<\":\"&lt;\",\">\":\"&gt;\",'\"':\"&quot;\",\"'\":\"&#39;\"},ge=u=>Je[u];function w(u,e){if(e){if(m.escapeTest.test(u))return u.replace(m.escapeReplace,ge)}else if(m.escapeTestNoEncode.test(u))return u.replace(m.escapeReplaceNoEncode,ge);return u}function J(u){try{u=encodeURI(u).replace(m.percentDecode,\"%\")}catch{return null}return u}function V(u,e){let t=u.replace(m.findPipe,(i,s,o)=>{let a=!1,l=s;for(;--l>=0&&o[l]===\"\\\\\";)a=!a;return a?\"|\":\" |\"}),n=t.split(m.splitPipe),r=0;if(n[0].trim()||n.shift(),n.length>0&&!n.at(-1)?.trim()&&n.pop(),e)if(n.length>e)n.splice(e);else for(;n.length<e;)n.push(\"\");for(;r<n.length;r++)n[r]=n[r].trim().replace(m.slashPipe,\"|\");return n}function z(u,e,t){let n=u.length;if(n===0)return\"\";let r=0;for(;r<n;){let i=u.charAt(n-r-1);if(i===e&&!t)r++;else if(i!==e&&t)r++;else break}return u.slice(0,n-r)}function fe(u,e){if(u.indexOf(e[1])===-1)return-1;let t=0;for(let n=0;n<u.length;n++)if(u[n]===\"\\\\\")n++;else if(u[n]===e[0])t++;else if(u[n]===e[1]&&(t--,t<0))return n;return t>0?-2:-1}function me(u,e,t,n,r){let i=e.href,s=e.title||null,o=u[1].replace(r.other.outputLinkReplace,\"$1\");n.state.inLink=!0;let a={type:u[0].charAt(0)===\"!\"?\"image\":\"link\",raw:t,href:i,title:s,text:o,tokens:n.inlineTokens(o)};return n.state.inLink=!1,a}function Ve(u,e,t){let n=u.match(t.other.indentCodeCompensation);if(n===null)return e;let r=n[1];return e.split(`\n`).map(i=>{let s=i.match(t.other.beginningSpace);if(s===null)return i;let[o]=s;return o.length>=r.length?i.slice(r.length):i}).join(`\n`)}var y=class{options;rules;lexer;constructor(e){this.options=e||T}space(e){let t=this.rules.block.newline.exec(e);if(t&&t[0].length>0)return{type:\"space\",raw:t[0]}}code(e){let t=this.rules.block.code.exec(e);if(t){let n=t[0].replace(this.rules.other.codeRemoveIndent,\"\");return{type:\"code\",raw:t[0],codeBlockStyle:\"indented\",text:this.options.pedantic?n:z(n,`\n`)}}}fences(e){let t=this.rules.block.fences.exec(e);if(t){let n=t[0],r=Ve(n,t[3]||\"\",this.rules);return{type:\"code\",raw:n,lang:t[2]?t[2].trim().replace(this.rules.inline.anyPunctuation,\"$1\"):t[2],text:r}}}heading(e){let t=this.rules.block.heading.exec(e);if(t){let n=t[2].trim();if(this.rules.other.endingHash.test(n)){let r=z(n,\"#\");(this.options.pedantic||!r||this.rules.other.endingSpaceChar.test(r))&&(n=r.trim())}return{type:\"heading\",raw:t[0],depth:t[1].length,text:n,tokens:this.lexer.inline(n)}}}hr(e){let t=this.rules.block.hr.exec(e);if(t)return{type:\"hr\",raw:z(t[0],`\n`)}}blockquote(e){let t=this.rules.block.blockquote.exec(e);if(t){let n=z(t[0],`\n`).split(`\n`),r=\"\",i=\"\",s=[];for(;n.length>0;){let o=!1,a=[],l;for(l=0;l<n.length;l++)if(this.rules.other.blockquoteStart.test(n[l]))a.push(n[l]),o=!0;else if(!o)a.push(n[l]);else break;n=n.slice(l);let c=a.join(`\n`),p=c.replace(this.rules.other.blockquoteSetextReplace,`\n    $1`).replace(this.rules.other.blockquoteSetextReplace2,\"\");r=r?`${r}\n${c}`:c,i=i?`${i}\n${p}`:p;let g=this.lexer.state.top;if(this.lexer.state.top=!0,this.lexer.blockTokens(p,s,!0),this.lexer.state.top=g,n.length===0)break;let h=s.at(-1);if(h?.type===\"code\")break;if(h?.type===\"blockquote\"){let R=h,f=R.raw+`\n`+n.join(`\n`),O=this.blockquote(f);s[s.length-1]=O,r=r.substring(0,r.length-R.raw.length)+O.raw,i=i.substring(0,i.length-R.text.length)+O.text;break}else if(h?.type===\"list\"){let R=h,f=R.raw+`\n`+n.join(`\n`),O=this.list(f);s[s.length-1]=O,r=r.substring(0,r.length-h.raw.length)+O.raw,i=i.substring(0,i.length-R.raw.length)+O.raw,n=f.substring(s.at(-1).raw.length).split(`\n`);continue}}return{type:\"blockquote\",raw:r,tokens:s,text:i}}}list(e){let t=this.rules.block.list.exec(e);if(t){let n=t[1].trim(),r=n.length>1,i={type:\"list\",raw:\"\",ordered:r,start:r?+n.slice(0,-1):\"\",loose:!1,items:[]};n=r?`\\\\d{1,9}\\\\${n.slice(-1)}`:`\\\\${n}`,this.options.pedantic&&(n=r?n:\"[*+-]\");let s=this.rules.other.listItemRegex(n),o=!1;for(;e;){let l=!1,c=\"\",p=\"\";if(!(t=s.exec(e))||this.rules.block.hr.test(e))break;c=t[0],e=e.substring(c.length);let g=t[2].split(`\n`,1)[0].replace(this.rules.other.listReplaceTabs,H=>\" \".repeat(3*H.length)),h=e.split(`\n`,1)[0],R=!g.trim(),f=0;if(this.options.pedantic?(f=2,p=g.trimStart()):R?f=t[1].length+1:(f=t[2].search(this.rules.other.nonSpaceChar),f=f>4?1:f,p=g.slice(f),f+=t[1].length),R&&this.rules.other.blankLine.test(h)&&(c+=h+`\n`,e=e.substring(h.length+1),l=!0),!l){let H=this.rules.other.nextBulletRegex(f),ee=this.rules.other.hrRegex(f),te=this.rules.other.fencesBeginRegex(f),ne=this.rules.other.headingBeginRegex(f),xe=this.rules.other.htmlBeginRegex(f);for(;e;){let Z=e.split(`\n`,1)[0],A;if(h=Z,this.options.pedantic?(h=h.replace(this.rules.other.listReplaceNesting,\"  \"),A=h):A=h.replace(this.rules.other.tabCharGlobal,\"    \"),te.test(h)||ne.test(h)||xe.test(h)||H.test(h)||ee.test(h))break;if(A.search(this.rules.other.nonSpaceChar)>=f||!h.trim())p+=`\n`+A.slice(f);else{if(R||g.replace(this.rules.other.tabCharGlobal,\"    \").search(this.rules.other.nonSpaceChar)>=4||te.test(g)||ne.test(g)||ee.test(g))break;p+=`\n`+h}!R&&!h.trim()&&(R=!0),c+=Z+`\n`,e=e.substring(Z.length+1),g=A.slice(f)}}i.loose||(o?i.loose=!0:this.rules.other.doubleBlankLine.test(c)&&(o=!0));let O=null,Y;this.options.gfm&&(O=this.rules.other.listIsTask.exec(p),O&&(Y=O[0]!==\"[ ] \",p=p.replace(this.rules.other.listReplaceTask,\"\"))),i.items.push({type:\"list_item\",raw:c,task:!!O,checked:Y,loose:!1,text:p,tokens:[]}),i.raw+=c}let a=i.items.at(-1);if(a)a.raw=a.raw.trimEnd(),a.text=a.text.trimEnd();else return;i.raw=i.raw.trimEnd();for(let l=0;l<i.items.length;l++)if(this.lexer.state.top=!1,i.items[l].tokens=this.lexer.blockTokens(i.items[l].text,[]),!i.loose){let c=i.items[l].tokens.filter(g=>g.type===\"space\"),p=c.length>0&&c.some(g=>this.rules.other.anyLine.test(g.raw));i.loose=p}if(i.loose)for(let l=0;l<i.items.length;l++)i.items[l].loose=!0;return i}}html(e){let t=this.rules.block.html.exec(e);if(t)return{type:\"html\",block:!0,raw:t[0],pre:t[1]===\"pre\"||t[1]===\"script\"||t[1]===\"style\",text:t[0]}}def(e){let t=this.rules.block.def.exec(e);if(t){let n=t[1].toLowerCase().replace(this.rules.other.multipleSpaceGlobal,\" \"),r=t[2]?t[2].replace(this.rules.other.hrefBrackets,\"$1\").replace(this.rules.inline.anyPunctuation,\"$1\"):\"\",i=t[3]?t[3].substring(1,t[3].length-1).replace(this.rules.inline.anyPunctuation,\"$1\"):t[3];return{type:\"def\",tag:n,raw:t[0],href:r,title:i}}}table(e){let t=this.rules.block.table.exec(e);if(!t||!this.rules.other.tableDelimiter.test(t[2]))return;let n=V(t[1]),r=t[2].replace(this.rules.other.tableAlignChars,\"\").split(\"|\"),i=t[3]?.trim()?t[3].replace(this.rules.other.tableRowBlankLine,\"\").split(`\n`):[],s={type:\"table\",raw:t[0],header:[],align:[],rows:[]};if(n.length===r.length){for(let o of r)this.rules.other.tableAlignRight.test(o)?s.align.push(\"right\"):this.rules.other.tableAlignCenter.test(o)?s.align.push(\"center\"):this.rules.other.tableAlignLeft.test(o)?s.align.push(\"left\"):s.align.push(null);for(let o=0;o<n.length;o++)s.header.push({text:n[o],tokens:this.lexer.inline(n[o]),header:!0,align:s.align[o]});for(let o of i)s.rows.push(V(o,s.header.length).map((a,l)=>({text:a,tokens:this.lexer.inline(a),header:!1,align:s.align[l]})));return s}}lheading(e){let t=this.rules.block.lheading.exec(e);if(t)return{type:\"heading\",raw:t[0],depth:t[2].charAt(0)===\"=\"?1:2,text:t[1],tokens:this.lexer.inline(t[1])}}paragraph(e){let t=this.rules.block.paragraph.exec(e);if(t){let n=t[1].charAt(t[1].length-1)===`\n`?t[1].slice(0,-1):t[1];return{type:\"paragraph\",raw:t[0],text:n,tokens:this.lexer.inline(n)}}}text(e){let t=this.rules.block.text.exec(e);if(t)return{type:\"text\",raw:t[0],text:t[0],tokens:this.lexer.inline(t[0])}}escape(e){let t=this.rules.inline.escape.exec(e);if(t)return{type:\"escape\",raw:t[0],text:t[1]}}tag(e){let t=this.rules.inline.tag.exec(e);if(t)return!this.lexer.state.inLink&&this.rules.other.startATag.test(t[0])?this.lexer.state.inLink=!0:this.lexer.state.inLink&&this.rules.other.endATag.test(t[0])&&(this.lexer.state.inLink=!1),!this.lexer.state.inRawBlock&&this.rules.other.startPreScriptTag.test(t[0])?this.lexer.state.inRawBlock=!0:this.lexer.state.inRawBlock&&this.rules.other.endPreScriptTag.test(t[0])&&(this.lexer.state.inRawBlock=!1),{type:\"html\",raw:t[0],inLink:this.lexer.state.inLink,inRawBlock:this.lexer.state.inRawBlock,block:!1,text:t[0]}}link(e){let t=this.rules.inline.link.exec(e);if(t){let n=t[2].trim();if(!this.options.pedantic&&this.rules.other.startAngleBracket.test(n)){if(!this.rules.other.endAngleBracket.test(n))return;let s=z(n.slice(0,-1),\"\\\\\");if((n.length-s.length)%2===0)return}else{let s=fe(t[2],\"()\");if(s===-2)return;if(s>-1){let a=(t[0].indexOf(\"!\")===0?5:4)+t[1].length+s;t[2]=t[2].substring(0,s),t[0]=t[0].substring(0,a).trim(),t[3]=\"\"}}let r=t[2],i=\"\";if(this.options.pedantic){let s=this.rules.other.pedanticHrefTitle.exec(r);s&&(r=s[1],i=s[3])}else i=t[3]?t[3].slice(1,-1):\"\";return r=r.trim(),this.rules.other.startAngleBracket.test(r)&&(this.options.pedantic&&!this.rules.other.endAngleBracket.test(n)?r=r.slice(1):r=r.slice(1,-1)),me(t,{href:r&&r.replace(this.rules.inline.anyPunctuation,\"$1\"),title:i&&i.replace(this.rules.inline.anyPunctuation,\"$1\")},t[0],this.lexer,this.rules)}}reflink(e,t){let n;if((n=this.rules.inline.reflink.exec(e))||(n=this.rules.inline.nolink.exec(e))){let r=(n[2]||n[1]).replace(this.rules.other.multipleSpaceGlobal,\" \"),i=t[r.toLowerCase()];if(!i){let s=n[0].charAt(0);return{type:\"text\",raw:s,text:s}}return me(n,i,n[0],this.lexer,this.rules)}}emStrong(e,t,n=\"\"){let r=this.rules.inline.emStrongLDelim.exec(e);if(!r||r[3]&&n.match(this.rules.other.unicodeAlphaNumeric))return;if(!(r[1]||r[2]||\"\")||!n||this.rules.inline.punctuation.exec(n)){let s=[...r[0]].length-1,o,a,l=s,c=0,p=r[0][0]===\"*\"?this.rules.inline.emStrongRDelimAst:this.rules.inline.emStrongRDelimUnd;for(p.lastIndex=0,t=t.slice(-1*e.length+s);(r=p.exec(t))!=null;){if(o=r[1]||r[2]||r[3]||r[4]||r[5]||r[6],!o)continue;if(a=[...o].length,r[3]||r[4]){l+=a;continue}else if((r[5]||r[6])&&s%3&&!((s+a)%3)){c+=a;continue}if(l-=a,l>0)continue;a=Math.min(a,a+l+c);let g=[...r[0]][0].length,h=e.slice(0,s+r.index+g+a);if(Math.min(s,a)%2){let f=h.slice(1,-1);return{type:\"em\",raw:h,text:f,tokens:this.lexer.inlineTokens(f)}}let R=h.slice(2,-2);return{type:\"strong\",raw:h,text:R,tokens:this.lexer.inlineTokens(R)}}}}codespan(e){let t=this.rules.inline.code.exec(e);if(t){let n=t[2].replace(this.rules.other.newLineCharGlobal,\" \"),r=this.rules.other.nonSpaceChar.test(n),i=this.rules.other.startingSpaceChar.test(n)&&this.rules.other.endingSpaceChar.test(n);return r&&i&&(n=n.substring(1,n.length-1)),{type:\"codespan\",raw:t[0],text:n}}}br(e){let t=this.rules.inline.br.exec(e);if(t)return{type:\"br\",raw:t[0]}}del(e){let t=this.rules.inline.del.exec(e);if(t)return{type:\"del\",raw:t[0],text:t[2],tokens:this.lexer.inlineTokens(t[2])}}autolink(e){let t=this.rules.inline.autolink.exec(e);if(t){let n,r;return t[2]===\"@\"?(n=t[1],r=\"mailto:\"+n):(n=t[1],r=n),{type:\"link\",raw:t[0],text:n,href:r,tokens:[{type:\"text\",raw:n,text:n}]}}}url(e){let t;if(t=this.rules.inline.url.exec(e)){let n,r;if(t[2]===\"@\")n=t[0],r=\"mailto:\"+n;else{let i;do i=t[0],t[0]=this.rules.inline._backpedal.exec(t[0])?.[0]??\"\";while(i!==t[0]);n=t[0],t[1]===\"www.\"?r=\"http://\"+t[0]:r=t[0]}return{type:\"link\",raw:t[0],text:n,href:r,tokens:[{type:\"text\",raw:n,text:n}]}}}inlineText(e){let t=this.rules.inline.text.exec(e);if(t){let n=this.lexer.state.inRawBlock;return{type:\"text\",raw:t[0],text:t[0],escaped:n}}}};var x=class u{tokens;options;state;tokenizer;inlineQueue;constructor(e){this.tokens=[],this.tokens.links=Object.create(null),this.options=e||T,this.options.tokenizer=this.options.tokenizer||new y,this.tokenizer=this.options.tokenizer,this.tokenizer.options=this.options,this.tokenizer.lexer=this,this.inlineQueue=[],this.state={inLink:!1,inRawBlock:!1,top:!0};let t={other:m,block:C.normal,inline:M.normal};this.options.pedantic?(t.block=C.pedantic,t.inline=M.pedantic):this.options.gfm&&(t.block=C.gfm,this.options.breaks?t.inline=M.breaks:t.inline=M.gfm),this.tokenizer.rules=t}static get rules(){return{block:C,inline:M}}static lex(e,t){return new u(t).lex(e)}static lexInline(e,t){return new u(t).inlineTokens(e)}lex(e){e=e.replace(m.carriageReturn,`\n`),this.blockTokens(e,this.tokens);for(let t=0;t<this.inlineQueue.length;t++){let n=this.inlineQueue[t];this.inlineTokens(n.src,n.tokens)}return this.inlineQueue=[],this.tokens}blockTokens(e,t=[],n=!1){for(this.options.pedantic&&(e=e.replace(m.tabCharGlobal,\"    \").replace(m.spaceLine,\"\"));e;){let r;if(this.options.extensions?.block?.some(s=>(r=s.call({lexer:this},e,t))?(e=e.substring(r.raw.length),t.push(r),!0):!1))continue;if(r=this.tokenizer.space(e)){e=e.substring(r.raw.length);let s=t.at(-1);r.raw.length===1&&s!==void 0?s.raw+=`\n`:t.push(r);continue}if(r=this.tokenizer.code(e)){e=e.substring(r.raw.length);let s=t.at(-1);s?.type===\"paragraph\"||s?.type===\"text\"?(s.raw+=(s.raw.endsWith(`\n`)?\"\":`\n`)+r.raw,s.text+=`\n`+r.text,this.inlineQueue.at(-1).src=s.text):t.push(r);continue}if(r=this.tokenizer.fences(e)){e=e.substring(r.raw.length),t.push(r);continue}if(r=this.tokenizer.heading(e)){e=e.substring(r.raw.length),t.push(r);continue}if(r=this.tokenizer.hr(e)){e=e.substring(r.raw.length),t.push(r);continue}if(r=this.tokenizer.blockquote(e)){e=e.substring(r.raw.length),t.push(r);continue}if(r=this.tokenizer.list(e)){e=e.substring(r.raw.length),t.push(r);continue}if(r=this.tokenizer.html(e)){e=e.substring(r.raw.length),t.push(r);continue}if(r=this.tokenizer.def(e)){e=e.substring(r.raw.length);let s=t.at(-1);s?.type===\"paragraph\"||s?.type===\"text\"?(s.raw+=(s.raw.endsWith(`\n`)?\"\":`\n`)+r.raw,s.text+=`\n`+r.raw,this.inlineQueue.at(-1).src=s.text):this.tokens.links[r.tag]||(this.tokens.links[r.tag]={href:r.href,title:r.title},t.push(r));continue}if(r=this.tokenizer.table(e)){e=e.substring(r.raw.length),t.push(r);continue}if(r=this.tokenizer.lheading(e)){e=e.substring(r.raw.length),t.push(r);continue}let i=e;if(this.options.extensions?.startBlock){let s=1/0,o=e.slice(1),a;this.options.extensions.startBlock.forEach(l=>{a=l.call({lexer:this},o),typeof a==\"number\"&&a>=0&&(s=Math.min(s,a))}),s<1/0&&s>=0&&(i=e.substring(0,s+1))}if(this.state.top&&(r=this.tokenizer.paragraph(i))){let s=t.at(-1);n&&s?.type===\"paragraph\"?(s.raw+=(s.raw.endsWith(`\n`)?\"\":`\n`)+r.raw,s.text+=`\n`+r.text,this.inlineQueue.pop(),this.inlineQueue.at(-1).src=s.text):t.push(r),n=i.length!==e.length,e=e.substring(r.raw.length);continue}if(r=this.tokenizer.text(e)){e=e.substring(r.raw.length);let s=t.at(-1);s?.type===\"text\"?(s.raw+=(s.raw.endsWith(`\n`)?\"\":`\n`)+r.raw,s.text+=`\n`+r.text,this.inlineQueue.pop(),this.inlineQueue.at(-1).src=s.text):t.push(r);continue}if(e){let s=\"Infinite loop on byte: \"+e.charCodeAt(0);if(this.options.silent){console.error(s);break}else throw new Error(s)}}return this.state.top=!0,t}inline(e,t=[]){return this.inlineQueue.push({src:e,tokens:t}),t}inlineTokens(e,t=[]){let n=e,r=null;if(this.tokens.links){let o=Object.keys(this.tokens.links);if(o.length>0)for(;(r=this.tokenizer.rules.inline.reflinkSearch.exec(n))!=null;)o.includes(r[0].slice(r[0].lastIndexOf(\"[\")+1,-1))&&(n=n.slice(0,r.index)+\"[\"+\"a\".repeat(r[0].length-2)+\"]\"+n.slice(this.tokenizer.rules.inline.reflinkSearch.lastIndex))}for(;(r=this.tokenizer.rules.inline.anyPunctuation.exec(n))!=null;)n=n.slice(0,r.index)+\"++\"+n.slice(this.tokenizer.rules.inline.anyPunctuation.lastIndex);for(;(r=this.tokenizer.rules.inline.blockSkip.exec(n))!=null;)n=n.slice(0,r.index)+\"[\"+\"a\".repeat(r[0].length-2)+\"]\"+n.slice(this.tokenizer.rules.inline.blockSkip.lastIndex);n=this.options.hooks?.emStrongMask?.call({lexer:this},n)??n;let i=!1,s=\"\";for(;e;){i||(s=\"\"),i=!1;let o;if(this.options.extensions?.inline?.some(l=>(o=l.call({lexer:this},e,t))?(e=e.substring(o.raw.length),t.push(o),!0):!1))continue;if(o=this.tokenizer.escape(e)){e=e.substring(o.raw.length),t.push(o);continue}if(o=this.tokenizer.tag(e)){e=e.substring(o.raw.length),t.push(o);continue}if(o=this.tokenizer.link(e)){e=e.substring(o.raw.length),t.push(o);continue}if(o=this.tokenizer.reflink(e,this.tokens.links)){e=e.substring(o.raw.length);let l=t.at(-1);o.type===\"text\"&&l?.type===\"text\"?(l.raw+=o.raw,l.text+=o.text):t.push(o);continue}if(o=this.tokenizer.emStrong(e,n,s)){e=e.substring(o.raw.length),t.push(o);continue}if(o=this.tokenizer.codespan(e)){e=e.substring(o.raw.length),t.push(o);continue}if(o=this.tokenizer.br(e)){e=e.substring(o.raw.length),t.push(o);continue}if(o=this.tokenizer.del(e)){e=e.substring(o.raw.length),t.push(o);continue}if(o=this.tokenizer.autolink(e)){e=e.substring(o.raw.length),t.push(o);continue}if(!this.state.inLink&&(o=this.tokenizer.url(e))){e=e.substring(o.raw.length),t.push(o);continue}let a=e;if(this.options.extensions?.startInline){let l=1/0,c=e.slice(1),p;this.options.extensions.startInline.forEach(g=>{p=g.call({lexer:this},c),typeof p==\"number\"&&p>=0&&(l=Math.min(l,p))}),l<1/0&&l>=0&&(a=e.substring(0,l+1))}if(o=this.tokenizer.inlineText(a)){e=e.substring(o.raw.length),o.raw.slice(-1)!==\"_\"&&(s=o.raw.slice(-1)),i=!0;let l=t.at(-1);l?.type===\"text\"?(l.raw+=o.raw,l.text+=o.text):t.push(o);continue}if(e){let l=\"Infinite loop on byte: \"+e.charCodeAt(0);if(this.options.silent){console.error(l);break}else throw new Error(l)}}return t}};var P=class{options;parser;constructor(e){this.options=e||T}space(e){return\"\"}code({text:e,lang:t,escaped:n}){let r=(t||\"\").match(m.notSpaceStart)?.[0],i=e.replace(m.endingNewline,\"\")+`\n`;return r?'<pre><code class=\"language-'+w(r)+'\">'+(n?i:w(i,!0))+`</code></pre>\n`:\"<pre><code>\"+(n?i:w(i,!0))+`</code></pre>\n`}blockquote({tokens:e}){return`<blockquote>\n${this.parser.parse(e)}</blockquote>\n`}html({text:e}){return e}def(e){return\"\"}heading({tokens:e,depth:t}){return`<h${t}>${this.parser.parseInline(e)}</h${t}>\n`}hr(e){return`<hr>\n`}list(e){let t=e.ordered,n=e.start,r=\"\";for(let o=0;o<e.items.length;o++){let a=e.items[o];r+=this.listitem(a)}let i=t?\"ol\":\"ul\",s=t&&n!==1?' start=\"'+n+'\"':\"\";return\"<\"+i+s+`>\n`+r+\"</\"+i+`>\n`}listitem(e){let t=\"\";if(e.task){let n=this.checkbox({checked:!!e.checked});e.loose?e.tokens[0]?.type===\"paragraph\"?(e.tokens[0].text=n+\" \"+e.tokens[0].text,e.tokens[0].tokens&&e.tokens[0].tokens.length>0&&e.tokens[0].tokens[0].type===\"text\"&&(e.tokens[0].tokens[0].text=n+\" \"+w(e.tokens[0].tokens[0].text),e.tokens[0].tokens[0].escaped=!0)):e.tokens.unshift({type:\"text\",raw:n+\" \",text:n+\" \",escaped:!0}):t+=n+\" \"}return t+=this.parser.parse(e.tokens,!!e.loose),`<li>${t}</li>\n`}checkbox({checked:e}){return\"<input \"+(e?'checked=\"\" ':\"\")+'disabled=\"\" type=\"checkbox\">'}paragraph({tokens:e}){return`<p>${this.parser.parseInline(e)}</p>\n`}table(e){let t=\"\",n=\"\";for(let i=0;i<e.header.length;i++)n+=this.tablecell(e.header[i]);t+=this.tablerow({text:n});let r=\"\";for(let i=0;i<e.rows.length;i++){let s=e.rows[i];n=\"\";for(let o=0;o<s.length;o++)n+=this.tablecell(s[o]);r+=this.tablerow({text:n})}return r&&(r=`<tbody>${r}</tbody>`),`<table>\n<thead>\n`+t+`</thead>\n`+r+`</table>\n`}tablerow({text:e}){return`<tr>\n${e}</tr>\n`}tablecell(e){let t=this.parser.parseInline(e.tokens),n=e.header?\"th\":\"td\";return(e.align?`<${n} align=\"${e.align}\">`:`<${n}>`)+t+`</${n}>\n`}strong({tokens:e}){return`<strong>${this.parser.parseInline(e)}</strong>`}em({tokens:e}){return`<em>${this.parser.parseInline(e)}</em>`}codespan({text:e}){return`<code>${w(e,!0)}</code>`}br(e){return\"<br>\"}del({tokens:e}){return`<del>${this.parser.parseInline(e)}</del>`}link({href:e,title:t,tokens:n}){let r=this.parser.parseInline(n),i=J(e);if(i===null)return r;e=i;let s='<a href=\"'+e+'\"';return t&&(s+=' title=\"'+w(t)+'\"'),s+=\">\"+r+\"</a>\",s}image({href:e,title:t,text:n,tokens:r}){r&&(n=this.parser.parseInline(r,this.parser.textRenderer));let i=J(e);if(i===null)return w(n);e=i;let s=`<img src=\"${e}\" alt=\"${n}\"`;return t&&(s+=` title=\"${w(t)}\"`),s+=\">\",s}text(e){return\"tokens\"in e&&e.tokens?this.parser.parseInline(e.tokens):\"escaped\"in e&&e.escaped?e.text:w(e.text)}};var $=class{strong({text:e}){return e}em({text:e}){return e}codespan({text:e}){return e}del({text:e}){return e}html({text:e}){return e}text({text:e}){return e}link({text:e}){return\"\"+e}image({text:e}){return\"\"+e}br(){return\"\"}};var b=class u{options;renderer;textRenderer;constructor(e){this.options=e||T,this.options.renderer=this.options.renderer||new P,this.renderer=this.options.renderer,this.renderer.options=this.options,this.renderer.parser=this,this.textRenderer=new $}static parse(e,t){return new u(t).parse(e)}static parseInline(e,t){return new u(t).parseInline(e)}parse(e,t=!0){let n=\"\";for(let r=0;r<e.length;r++){let i=e[r];if(this.options.extensions?.renderers?.[i.type]){let o=i,a=this.options.extensions.renderers[o.type].call({parser:this},o);if(a!==!1||![\"space\",\"hr\",\"heading\",\"code\",\"table\",\"blockquote\",\"list\",\"html\",\"def\",\"paragraph\",\"text\"].includes(o.type)){n+=a||\"\";continue}}let s=i;switch(s.type){case\"space\":{n+=this.renderer.space(s);continue}case\"hr\":{n+=this.renderer.hr(s);continue}case\"heading\":{n+=this.renderer.heading(s);continue}case\"code\":{n+=this.renderer.code(s);continue}case\"table\":{n+=this.renderer.table(s);continue}case\"blockquote\":{n+=this.renderer.blockquote(s);continue}case\"list\":{n+=this.renderer.list(s);continue}case\"html\":{n+=this.renderer.html(s);continue}case\"def\":{n+=this.renderer.def(s);continue}case\"paragraph\":{n+=this.renderer.paragraph(s);continue}case\"text\":{let o=s,a=this.renderer.text(o);for(;r+1<e.length&&e[r+1].type===\"text\";)o=e[++r],a+=`\n`+this.renderer.text(o);t?n+=this.renderer.paragraph({type:\"paragraph\",raw:a,text:a,tokens:[{type:\"text\",raw:a,text:a,escaped:!0}]}):n+=a;continue}default:{let o='Token with \"'+s.type+'\" type was not found.';if(this.options.silent)return console.error(o),\"\";throw new Error(o)}}}return n}parseInline(e,t=this.renderer){let n=\"\";for(let r=0;r<e.length;r++){let i=e[r];if(this.options.extensions?.renderers?.[i.type]){let o=this.options.extensions.renderers[i.type].call({parser:this},i);if(o!==!1||![\"escape\",\"html\",\"link\",\"image\",\"strong\",\"em\",\"codespan\",\"br\",\"del\",\"text\"].includes(i.type)){n+=o||\"\";continue}}let s=i;switch(s.type){case\"escape\":{n+=t.text(s);break}case\"html\":{n+=t.html(s);break}case\"link\":{n+=t.link(s);break}case\"image\":{n+=t.image(s);break}case\"strong\":{n+=t.strong(s);break}case\"em\":{n+=t.em(s);break}case\"codespan\":{n+=t.codespan(s);break}case\"br\":{n+=t.br(s);break}case\"del\":{n+=t.del(s);break}case\"text\":{n+=t.text(s);break}default:{let o='Token with \"'+s.type+'\" type was not found.';if(this.options.silent)return console.error(o),\"\";throw new Error(o)}}}return n}};var S=class{options;block;constructor(e){this.options=e||T}static passThroughHooks=new Set([\"preprocess\",\"postprocess\",\"processAllTokens\",\"emStrongMask\"]);static passThroughHooksRespectAsync=new Set([\"preprocess\",\"postprocess\",\"processAllTokens\"]);preprocess(e){return e}postprocess(e){return e}processAllTokens(e){return e}emStrongMask(e){return e}provideLexer(){return this.block?x.lex:x.lexInline}provideParser(){return this.block?b.parse:b.parseInline}};var B=class{defaults=L();options=this.setOptions;parse=this.parseMarkdown(!0);parseInline=this.parseMarkdown(!1);Parser=b;Renderer=P;TextRenderer=$;Lexer=x;Tokenizer=y;Hooks=S;constructor(...e){this.use(...e)}walkTokens(e,t){let n=[];for(let r of e)switch(n=n.concat(t.call(this,r)),r.type){case\"table\":{let i=r;for(let s of i.header)n=n.concat(this.walkTokens(s.tokens,t));for(let s of i.rows)for(let o of s)n=n.concat(this.walkTokens(o.tokens,t));break}case\"list\":{let i=r;n=n.concat(this.walkTokens(i.items,t));break}default:{let i=r;this.defaults.extensions?.childTokens?.[i.type]?this.defaults.extensions.childTokens[i.type].forEach(s=>{let o=i[s].flat(1/0);n=n.concat(this.walkTokens(o,t))}):i.tokens&&(n=n.concat(this.walkTokens(i.tokens,t)))}}return n}use(...e){let t=this.defaults.extensions||{renderers:{},childTokens:{}};return e.forEach(n=>{let r={...n};if(r.async=this.defaults.async||r.async||!1,n.extensions&&(n.extensions.forEach(i=>{if(!i.name)throw new Error(\"extension name required\");if(\"renderer\"in i){let s=t.renderers[i.name];s?t.renderers[i.name]=function(...o){let a=i.renderer.apply(this,o);return a===!1&&(a=s.apply(this,o)),a}:t.renderers[i.name]=i.renderer}if(\"tokenizer\"in i){if(!i.level||i.level!==\"block\"&&i.level!==\"inline\")throw new Error(\"extension level must be 'block' or 'inline'\");let s=t[i.level];s?s.unshift(i.tokenizer):t[i.level]=[i.tokenizer],i.start&&(i.level===\"block\"?t.startBlock?t.startBlock.push(i.start):t.startBlock=[i.start]:i.level===\"inline\"&&(t.startInline?t.startInline.push(i.start):t.startInline=[i.start]))}\"childTokens\"in i&&i.childTokens&&(t.childTokens[i.name]=i.childTokens)}),r.extensions=t),n.renderer){let i=this.defaults.renderer||new P(this.defaults);for(let s in n.renderer){if(!(s in i))throw new Error(`renderer '${s}' does not exist`);if([\"options\",\"parser\"].includes(s))continue;let o=s,a=n.renderer[o],l=i[o];i[o]=(...c)=>{let p=a.apply(i,c);return p===!1&&(p=l.apply(i,c)),p||\"\"}}r.renderer=i}if(n.tokenizer){let i=this.defaults.tokenizer||new y(this.defaults);for(let s in n.tokenizer){if(!(s in i))throw new Error(`tokenizer '${s}' does not exist`);if([\"options\",\"rules\",\"lexer\"].includes(s))continue;let o=s,a=n.tokenizer[o],l=i[o];i[o]=(...c)=>{let p=a.apply(i,c);return p===!1&&(p=l.apply(i,c)),p}}r.tokenizer=i}if(n.hooks){let i=this.defaults.hooks||new S;for(let s in n.hooks){if(!(s in i))throw new Error(`hook '${s}' does not exist`);if([\"options\",\"block\"].includes(s))continue;let o=s,a=n.hooks[o],l=i[o];S.passThroughHooks.has(s)?i[o]=c=>{if(this.defaults.async&&S.passThroughHooksRespectAsync.has(s))return(async()=>{let g=await a.call(i,c);return l.call(i,g)})();let p=a.call(i,c);return l.call(i,p)}:i[o]=(...c)=>{if(this.defaults.async)return(async()=>{let g=await a.apply(i,c);return g===!1&&(g=await l.apply(i,c)),g})();let p=a.apply(i,c);return p===!1&&(p=l.apply(i,c)),p}}r.hooks=i}if(n.walkTokens){let i=this.defaults.walkTokens,s=n.walkTokens;r.walkTokens=function(o){let a=[];return a.push(s.call(this,o)),i&&(a=a.concat(i.call(this,o))),a}}this.defaults={...this.defaults,...r}}),this}setOptions(e){return this.defaults={...this.defaults,...e},this}lexer(e,t){return x.lex(e,t??this.defaults)}parser(e,t){return b.parse(e,t??this.defaults)}parseMarkdown(e){return(n,r)=>{let i={...r},s={...this.defaults,...i},o=this.onError(!!s.silent,!!s.async);if(this.defaults.async===!0&&i.async===!1)return o(new Error(\"marked(): The async option was set to true by an extension. Remove async: false from the parse options object to return a Promise.\"));if(typeof n>\"u\"||n===null)return o(new Error(\"marked(): input parameter is undefined or null\"));if(typeof n!=\"string\")return o(new Error(\"marked(): input parameter is of type \"+Object.prototype.toString.call(n)+\", string expected\"));if(s.hooks&&(s.hooks.options=s,s.hooks.block=e),s.async)return(async()=>{let a=s.hooks?await s.hooks.preprocess(n):n,c=await(s.hooks?await s.hooks.provideLexer():e?x.lex:x.lexInline)(a,s),p=s.hooks?await s.hooks.processAllTokens(c):c;s.walkTokens&&await Promise.all(this.walkTokens(p,s.walkTokens));let h=await(s.hooks?await s.hooks.provideParser():e?b.parse:b.parseInline)(p,s);return s.hooks?await s.hooks.postprocess(h):h})().catch(o);try{s.hooks&&(n=s.hooks.preprocess(n));let l=(s.hooks?s.hooks.provideLexer():e?x.lex:x.lexInline)(n,s);s.hooks&&(l=s.hooks.processAllTokens(l)),s.walkTokens&&this.walkTokens(l,s.walkTokens);let p=(s.hooks?s.hooks.provideParser():e?b.parse:b.parseInline)(l,s);return s.hooks&&(p=s.hooks.postprocess(p)),p}catch(a){return o(a)}}}onError(e,t){return n=>{if(n.message+=`\nPlease report this to https://github.com/markedjs/marked.`,e){let r=\"<p>An error occurred:</p><pre>\"+w(n.message+\"\",!0)+\"</pre>\";return t?Promise.resolve(r):r}if(t)return Promise.reject(n);throw n}}};var _=new B;function k(u,e){return _.parse(u,e)}k.options=k.setOptions=function(u){return _.setOptions(u),k.defaults=_.defaults,G(k.defaults),k};k.getDefaults=L;k.defaults=T;k.use=function(...u){return _.use(...u),k.defaults=_.defaults,G(k.defaults),k};k.walkTokens=function(u,e){return _.walkTokens(u,e)};k.parseInline=_.parseInline;k.Parser=b;k.parser=b.parse;k.Renderer=P;k.TextRenderer=$;k.Lexer=x;k.lexer=x.lex;k.Tokenizer=y;k.Hooks=S;k.parse=k;var Ht=k.options,Zt=k.setOptions,Gt=k.use,Nt=k.walkTokens,Ft=k.parseInline,jt=k,Qt=b.parse,Ut=x.lex;export{S as Hooks,x as Lexer,B as Marked,b as Parser,P as Renderer,$ as TextRenderer,y as Tokenizer,T as defaults,L as getDefaults,Ut as lexer,k as marked,Ht as options,jt as parse,Ft as parseInline,Qt as parser,Zt as setOptions,Gt as use,Nt as walkTokens};\n//# sourceMappingURL=marked.esm.js.map\n","/*! @license DOMPurify 3.3.0 | (c) Cure53 and other contributors | Released under the Apache license 2.0 and Mozilla Public License 2.0 | github.com/cure53/DOMPurify/blob/3.3.0/LICENSE */\n\nconst {\n  entries,\n  setPrototypeOf,\n  isFrozen,\n  getPrototypeOf,\n  getOwnPropertyDescriptor\n} = Object;\nlet {\n  freeze,\n  seal,\n  create\n} = Object; // eslint-disable-line import/no-mutable-exports\nlet {\n  apply,\n  construct\n} = typeof Reflect !== 'undefined' && Reflect;\nif (!freeze) {\n  freeze = function freeze(x) {\n    return x;\n  };\n}\nif (!seal) {\n  seal = function seal(x) {\n    return x;\n  };\n}\nif (!apply) {\n  apply = function apply(func, thisArg) {\n    for (var _len = arguments.length, args = new Array(_len > 2 ? _len - 2 : 0), _key = 2; _key < _len; _key++) {\n      args[_key - 2] = arguments[_key];\n    }\n    return func.apply(thisArg, args);\n  };\n}\nif (!construct) {\n  construct = function construct(Func) {\n    for (var _len2 = arguments.length, args = new Array(_len2 > 1 ? _len2 - 1 : 0), _key2 = 1; _key2 < _len2; _key2++) {\n      args[_key2 - 1] = arguments[_key2];\n    }\n    return new Func(...args);\n  };\n}\nconst arrayForEach = unapply(Array.prototype.forEach);\nconst arrayLastIndexOf = unapply(Array.prototype.lastIndexOf);\nconst arrayPop = unapply(Array.prototype.pop);\nconst arrayPush = unapply(Array.prototype.push);\nconst arraySplice = unapply(Array.prototype.splice);\nconst stringToLowerCase = unapply(String.prototype.toLowerCase);\nconst stringToString = unapply(String.prototype.toString);\nconst stringMatch = unapply(String.prototype.match);\nconst stringReplace = unapply(String.prototype.replace);\nconst stringIndexOf = unapply(String.prototype.indexOf);\nconst stringTrim = unapply(String.prototype.trim);\nconst objectHasOwnProperty = unapply(Object.prototype.hasOwnProperty);\nconst regExpTest = unapply(RegExp.prototype.test);\nconst typeErrorCreate = unconstruct(TypeError);\n/**\n * Creates a new function that calls the given function with a specified thisArg and arguments.\n *\n * @param func - The function to be wrapped and called.\n * @returns A new function that calls the given function with a specified thisArg and arguments.\n */\nfunction unapply(func) {\n  return function (thisArg) {\n    if (thisArg instanceof RegExp) {\n      thisArg.lastIndex = 0;\n    }\n    for (var _len3 = arguments.length, args = new Array(_len3 > 1 ? _len3 - 1 : 0), _key3 = 1; _key3 < _len3; _key3++) {\n      args[_key3 - 1] = arguments[_key3];\n    }\n    return apply(func, thisArg, args);\n  };\n}\n/**\n * Creates a new function that constructs an instance of the given constructor function with the provided arguments.\n *\n * @param func - The constructor function to be wrapped and called.\n * @returns A new function that constructs an instance of the given constructor function with the provided arguments.\n */\nfunction unconstruct(Func) {\n  return function () {\n    for (var _len4 = arguments.length, args = new Array(_len4), _key4 = 0; _key4 < _len4; _key4++) {\n      args[_key4] = arguments[_key4];\n    }\n    return construct(Func, args);\n  };\n}\n/**\n * Add properties to a lookup table\n *\n * @param set - The set to which elements will be added.\n * @param array - The array containing elements to be added to the set.\n * @param transformCaseFunc - An optional function to transform the case of each element before adding to the set.\n * @returns The modified set with added elements.\n */\nfunction addToSet(set, array) {\n  let transformCaseFunc = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : stringToLowerCase;\n  if (setPrototypeOf) {\n    // Make 'in' and truthy checks like Boolean(set.constructor)\n    // independent of any properties defined on Object.prototype.\n    // Prevent prototype setters from intercepting set as a this value.\n    setPrototypeOf(set, null);\n  }\n  let l = array.length;\n  while (l--) {\n    let element = array[l];\n    if (typeof element === 'string') {\n      const lcElement = transformCaseFunc(element);\n      if (lcElement !== element) {\n        // Config presets (e.g. tags.js, attrs.js) are immutable.\n        if (!isFrozen(array)) {\n          array[l] = lcElement;\n        }\n        element = lcElement;\n      }\n    }\n    set[element] = true;\n  }\n  return set;\n}\n/**\n * Clean up an array to harden against CSPP\n *\n * @param array - The array to be cleaned.\n * @returns The cleaned version of the array\n */\nfunction cleanArray(array) {\n  for (let index = 0; index < array.length; index++) {\n    const isPropertyExist = objectHasOwnProperty(array, index);\n    if (!isPropertyExist) {\n      array[index] = null;\n    }\n  }\n  return array;\n}\n/**\n * Shallow clone an object\n *\n * @param object - The object to be cloned.\n * @returns A new object that copies the original.\n */\nfunction clone(object) {\n  const newObject = create(null);\n  for (const [property, value] of entries(object)) {\n    const isPropertyExist = objectHasOwnProperty(object, property);\n    if (isPropertyExist) {\n      if (Array.isArray(value)) {\n        newObject[property] = cleanArray(value);\n      } else if (value && typeof value === 'object' && value.constructor === Object) {\n        newObject[property] = clone(value);\n      } else {\n        newObject[property] = value;\n      }\n    }\n  }\n  return newObject;\n}\n/**\n * This method automatically checks if the prop is function or getter and behaves accordingly.\n *\n * @param object - The object to look up the getter function in its prototype chain.\n * @param prop - The property name for which to find the getter function.\n * @returns The getter function found in the prototype chain or a fallback function.\n */\nfunction lookupGetter(object, prop) {\n  while (object !== null) {\n    const desc = getOwnPropertyDescriptor(object, prop);\n    if (desc) {\n      if (desc.get) {\n        return unapply(desc.get);\n      }\n      if (typeof desc.value === 'function') {\n        return unapply(desc.value);\n      }\n    }\n    object = getPrototypeOf(object);\n  }\n  function fallbackValue() {\n    return null;\n  }\n  return fallbackValue;\n}\n\nconst html$1 = freeze(['a', 'abbr', 'acronym', 'address', 'area', 'article', 'aside', 'audio', 'b', 'bdi', 'bdo', 'big', 'blink', 'blockquote', 'body', 'br', 'button', 'canvas', 'caption', 'center', 'cite', 'code', 'col', 'colgroup', 'content', 'data', 'datalist', 'dd', 'decorator', 'del', 'details', 'dfn', 'dialog', 'dir', 'div', 'dl', 'dt', 'element', 'em', 'fieldset', 'figcaption', 'figure', 'font', 'footer', 'form', 'h1', 'h2', 'h3', 'h4', 'h5', 'h6', 'head', 'header', 'hgroup', 'hr', 'html', 'i', 'img', 'input', 'ins', 'kbd', 'label', 'legend', 'li', 'main', 'map', 'mark', 'marquee', 'menu', 'menuitem', 'meter', 'nav', 'nobr', 'ol', 'optgroup', 'option', 'output', 'p', 'picture', 'pre', 'progress', 'q', 'rp', 'rt', 'ruby', 's', 'samp', 'search', 'section', 'select', 'shadow', 'slot', 'small', 'source', 'spacer', 'span', 'strike', 'strong', 'style', 'sub', 'summary', 'sup', 'table', 'tbody', 'td', 'template', 'textarea', 'tfoot', 'th', 'thead', 'time', 'tr', 'track', 'tt', 'u', 'ul', 'var', 'video', 'wbr']);\nconst svg$1 = freeze(['svg', 'a', 'altglyph', 'altglyphdef', 'altglyphitem', 'animatecolor', 'animatemotion', 'animatetransform', 'circle', 'clippath', 'defs', 'desc', 'ellipse', 'enterkeyhint', 'exportparts', 'filter', 'font', 'g', 'glyph', 'glyphref', 'hkern', 'image', 'inputmode', 'line', 'lineargradient', 'marker', 'mask', 'metadata', 'mpath', 'part', 'path', 'pattern', 'polygon', 'polyline', 'radialgradient', 'rect', 'stop', 'style', 'switch', 'symbol', 'text', 'textpath', 'title', 'tref', 'tspan', 'view', 'vkern']);\nconst svgFilters = freeze(['feBlend', 'feColorMatrix', 'feComponentTransfer', 'feComposite', 'feConvolveMatrix', 'feDiffuseLighting', 'feDisplacementMap', 'feDistantLight', 'feDropShadow', 'feFlood', 'feFuncA', 'feFuncB', 'feFuncG', 'feFuncR', 'feGaussianBlur', 'feImage', 'feMerge', 'feMergeNode', 'feMorphology', 'feOffset', 'fePointLight', 'feSpecularLighting', 'feSpotLight', 'feTile', 'feTurbulence']);\n// List of SVG elements that are disallowed by default.\n// We still need to know them so that we can do namespace\n// checks properly in case one wants to add them to\n// allow-list.\nconst svgDisallowed = freeze(['animate', 'color-profile', 'cursor', 'discard', 'font-face', 'font-face-format', 'font-face-name', 'font-face-src', 'font-face-uri', 'foreignobject', 'hatch', 'hatchpath', 'mesh', 'meshgradient', 'meshpatch', 'meshrow', 'missing-glyph', 'script', 'set', 'solidcolor', 'unknown', 'use']);\nconst mathMl$1 = freeze(['math', 'menclose', 'merror', 'mfenced', 'mfrac', 'mglyph', 'mi', 'mlabeledtr', 'mmultiscripts', 'mn', 'mo', 'mover', 'mpadded', 'mphantom', 'mroot', 'mrow', 'ms', 'mspace', 'msqrt', 'mstyle', 'msub', 'msup', 'msubsup', 'mtable', 'mtd', 'mtext', 'mtr', 'munder', 'munderover', 'mprescripts']);\n// Similarly to SVG, we want to know all MathML elements,\n// even those that we disallow by default.\nconst mathMlDisallowed = freeze(['maction', 'maligngroup', 'malignmark', 'mlongdiv', 'mscarries', 'mscarry', 'msgroup', 'mstack', 'msline', 'msrow', 'semantics', 'annotation', 'annotation-xml', 'mprescripts', 'none']);\nconst text = freeze(['#text']);\n\nconst html = freeze(['accept', 'action', 'align', 'alt', 'autocapitalize', 'autocomplete', 'autopictureinpicture', 'autoplay', 'background', 'bgcolor', 'border', 'capture', 'cellpadding', 'cellspacing', 'checked', 'cite', 'class', 'clear', 'color', 'cols', 'colspan', 'controls', 'controlslist', 'coords', 'crossorigin', 'datetime', 'decoding', 'default', 'dir', 'disabled', 'disablepictureinpicture', 'disableremoteplayback', 'download', 'draggable', 'enctype', 'enterkeyhint', 'exportparts', 'face', 'for', 'headers', 'height', 'hidden', 'high', 'href', 'hreflang', 'id', 'inert', 'inputmode', 'integrity', 'ismap', 'kind', 'label', 'lang', 'list', 'loading', 'loop', 'low', 'max', 'maxlength', 'media', 'method', 'min', 'minlength', 'multiple', 'muted', 'name', 'nonce', 'noshade', 'novalidate', 'nowrap', 'open', 'optimum', 'part', 'pattern', 'placeholder', 'playsinline', 'popover', 'popovertarget', 'popovertargetaction', 'poster', 'preload', 'pubdate', 'radiogroup', 'readonly', 'rel', 'required', 'rev', 'reversed', 'role', 'rows', 'rowspan', 'spellcheck', 'scope', 'selected', 'shape', 'size', 'sizes', 'slot', 'span', 'srclang', 'start', 'src', 'srcset', 'step', 'style', 'summary', 'tabindex', 'title', 'translate', 'type', 'usemap', 'valign', 'value', 'width', 'wrap', 'xmlns', 'slot']);\nconst svg = freeze(['accent-height', 'accumulate', 'additive', 'alignment-baseline', 'amplitude', 'ascent', 'attributename', 'attributetype', 'azimuth', 'basefrequency', 'baseline-shift', 'begin', 'bias', 'by', 'class', 'clip', 'clippathunits', 'clip-path', 'clip-rule', 'color', 'color-interpolation', 'color-interpolation-filters', 'color-profile', 'color-rendering', 'cx', 'cy', 'd', 'dx', 'dy', 'diffuseconstant', 'direction', 'display', 'divisor', 'dur', 'edgemode', 'elevation', 'end', 'exponent', 'fill', 'fill-opacity', 'fill-rule', 'filter', 'filterunits', 'flood-color', 'flood-opacity', 'font-family', 'font-size', 'font-size-adjust', 'font-stretch', 'font-style', 'font-variant', 'font-weight', 'fx', 'fy', 'g1', 'g2', 'glyph-name', 'glyphref', 'gradientunits', 'gradienttransform', 'height', 'href', 'id', 'image-rendering', 'in', 'in2', 'intercept', 'k', 'k1', 'k2', 'k3', 'k4', 'kerning', 'keypoints', 'keysplines', 'keytimes', 'lang', 'lengthadjust', 'letter-spacing', 'kernelmatrix', 'kernelunitlength', 'lighting-color', 'local', 'marker-end', 'marker-mid', 'marker-start', 'markerheight', 'markerunits', 'markerwidth', 'maskcontentunits', 'maskunits', 'max', 'mask', 'mask-type', 'media', 'method', 'mode', 'min', 'name', 'numoctaves', 'offset', 'operator', 'opacity', 'order', 'orient', 'orientation', 'origin', 'overflow', 'paint-order', 'path', 'pathlength', 'patterncontentunits', 'patterntransform', 'patternunits', 'points', 'preservealpha', 'preserveaspectratio', 'primitiveunits', 'r', 'rx', 'ry', 'radius', 'refx', 'refy', 'repeatcount', 'repeatdur', 'restart', 'result', 'rotate', 'scale', 'seed', 'shape-rendering', 'slope', 'specularconstant', 'specularexponent', 'spreadmethod', 'startoffset', 'stddeviation', 'stitchtiles', 'stop-color', 'stop-opacity', 'stroke-dasharray', 'stroke-dashoffset', 'stroke-linecap', 'stroke-linejoin', 'stroke-miterlimit', 'stroke-opacity', 'stroke', 'stroke-width', 'style', 'surfacescale', 'systemlanguage', 'tabindex', 'tablevalues', 'targetx', 'targety', 'transform', 'transform-origin', 'text-anchor', 'text-decoration', 'text-rendering', 'textlength', 'type', 'u1', 'u2', 'unicode', 'values', 'viewbox', 'visibility', 'version', 'vert-adv-y', 'vert-origin-x', 'vert-origin-y', 'width', 'word-spacing', 'wrap', 'writing-mode', 'xchannelselector', 'ychannelselector', 'x', 'x1', 'x2', 'xmlns', 'y', 'y1', 'y2', 'z', 'zoomandpan']);\nconst mathMl = freeze(['accent', 'accentunder', 'align', 'bevelled', 'close', 'columnsalign', 'columnlines', 'columnspan', 'denomalign', 'depth', 'dir', 'display', 'displaystyle', 'encoding', 'fence', 'frame', 'height', 'href', 'id', 'largeop', 'length', 'linethickness', 'lspace', 'lquote', 'mathbackground', 'mathcolor', 'mathsize', 'mathvariant', 'maxsize', 'minsize', 'movablelimits', 'notation', 'numalign', 'open', 'rowalign', 'rowlines', 'rowspacing', 'rowspan', 'rspace', 'rquote', 'scriptlevel', 'scriptminsize', 'scriptsizemultiplier', 'selection', 'separator', 'separators', 'stretchy', 'subscriptshift', 'supscriptshift', 'symmetric', 'voffset', 'width', 'xmlns']);\nconst xml = freeze(['xlink:href', 'xml:id', 'xlink:title', 'xml:space', 'xmlns:xlink']);\n\n// eslint-disable-next-line unicorn/better-regex\nconst MUSTACHE_EXPR = seal(/\\{\\{[\\w\\W]*|[\\w\\W]*\\}\\}/gm); // Specify template detection regex for SAFE_FOR_TEMPLATES mode\nconst ERB_EXPR = seal(/<%[\\w\\W]*|[\\w\\W]*%>/gm);\nconst TMPLIT_EXPR = seal(/\\$\\{[\\w\\W]*/gm); // eslint-disable-line unicorn/better-regex\nconst DATA_ATTR = seal(/^data-[\\-\\w.\\u00B7-\\uFFFF]+$/); // eslint-disable-line no-useless-escape\nconst ARIA_ATTR = seal(/^aria-[\\-\\w]+$/); // eslint-disable-line no-useless-escape\nconst IS_ALLOWED_URI = seal(/^(?:(?:(?:f|ht)tps?|mailto|tel|callto|sms|cid|xmpp|matrix):|[^a-z]|[a-z+.\\-]+(?:[^a-z+.\\-:]|$))/i // eslint-disable-line no-useless-escape\n);\nconst IS_SCRIPT_OR_DATA = seal(/^(?:\\w+script|data):/i);\nconst ATTR_WHITESPACE = seal(/[\\u0000-\\u0020\\u00A0\\u1680\\u180E\\u2000-\\u2029\\u205F\\u3000]/g // eslint-disable-line no-control-regex\n);\nconst DOCTYPE_NAME = seal(/^html$/i);\nconst CUSTOM_ELEMENT = seal(/^[a-z][.\\w]*(-[.\\w]+)+$/i);\n\nvar EXPRESSIONS = /*#__PURE__*/Object.freeze({\n  __proto__: null,\n  ARIA_ATTR: ARIA_ATTR,\n  ATTR_WHITESPACE: ATTR_WHITESPACE,\n  CUSTOM_ELEMENT: CUSTOM_ELEMENT,\n  DATA_ATTR: DATA_ATTR,\n  DOCTYPE_NAME: DOCTYPE_NAME,\n  ERB_EXPR: ERB_EXPR,\n  IS_ALLOWED_URI: IS_ALLOWED_URI,\n  IS_SCRIPT_OR_DATA: IS_SCRIPT_OR_DATA,\n  MUSTACHE_EXPR: MUSTACHE_EXPR,\n  TMPLIT_EXPR: TMPLIT_EXPR\n});\n\n/* eslint-disable @typescript-eslint/indent */\n// https://developer.mozilla.org/en-US/docs/Web/API/Node/nodeType\nconst NODE_TYPE = {\n  element: 1,\n  attribute: 2,\n  text: 3,\n  cdataSection: 4,\n  entityReference: 5,\n  // Deprecated\n  entityNode: 6,\n  // Deprecated\n  progressingInstruction: 7,\n  comment: 8,\n  document: 9,\n  documentType: 10,\n  documentFragment: 11,\n  notation: 12 // Deprecated\n};\nconst getGlobal = function getGlobal() {\n  return typeof window === 'undefined' ? null : window;\n};\n/**\n * Creates a no-op policy for internal use only.\n * Don't export this function outside this module!\n * @param trustedTypes The policy factory.\n * @param purifyHostElement The Script element used to load DOMPurify (to determine policy name suffix).\n * @return The policy created (or null, if Trusted Types\n * are not supported or creating the policy failed).\n */\nconst _createTrustedTypesPolicy = function _createTrustedTypesPolicy(trustedTypes, purifyHostElement) {\n  if (typeof trustedTypes !== 'object' || typeof trustedTypes.createPolicy !== 'function') {\n    return null;\n  }\n  // Allow the callers to control the unique policy name\n  // by adding a data-tt-policy-suffix to the script element with the DOMPurify.\n  // Policy creation with duplicate names throws in Trusted Types.\n  let suffix = null;\n  const ATTR_NAME = 'data-tt-policy-suffix';\n  if (purifyHostElement && purifyHostElement.hasAttribute(ATTR_NAME)) {\n    suffix = purifyHostElement.getAttribute(ATTR_NAME);\n  }\n  const policyName = 'dompurify' + (suffix ? '#' + suffix : '');\n  try {\n    return trustedTypes.createPolicy(policyName, {\n      createHTML(html) {\n        return html;\n      },\n      createScriptURL(scriptUrl) {\n        return scriptUrl;\n      }\n    });\n  } catch (_) {\n    // Policy creation failed (most likely another DOMPurify script has\n    // already run). Skip creating the policy, as this will only cause errors\n    // if TT are enforced.\n    console.warn('TrustedTypes policy ' + policyName + ' could not be created.');\n    return null;\n  }\n};\nconst _createHooksMap = function _createHooksMap() {\n  return {\n    afterSanitizeAttributes: [],\n    afterSanitizeElements: [],\n    afterSanitizeShadowDOM: [],\n    beforeSanitizeAttributes: [],\n    beforeSanitizeElements: [],\n    beforeSanitizeShadowDOM: [],\n    uponSanitizeAttribute: [],\n    uponSanitizeElement: [],\n    uponSanitizeShadowNode: []\n  };\n};\nfunction createDOMPurify() {\n  let window = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : getGlobal();\n  const DOMPurify = root => createDOMPurify(root);\n  DOMPurify.version = '3.3.0';\n  DOMPurify.removed = [];\n  if (!window || !window.document || window.document.nodeType !== NODE_TYPE.document || !window.Element) {\n    // Not running in a browser, provide a factory function\n    // so that you can pass your own Window\n    DOMPurify.isSupported = false;\n    return DOMPurify;\n  }\n  let {\n    document\n  } = window;\n  const originalDocument = document;\n  const currentScript = originalDocument.currentScript;\n  const {\n    DocumentFragment,\n    HTMLTemplateElement,\n    Node,\n    Element,\n    NodeFilter,\n    NamedNodeMap = window.NamedNodeMap || window.MozNamedAttrMap,\n    HTMLFormElement,\n    DOMParser,\n    trustedTypes\n  } = window;\n  const ElementPrototype = Element.prototype;\n  const cloneNode = lookupGetter(ElementPrototype, 'cloneNode');\n  const remove = lookupGetter(ElementPrototype, 'remove');\n  const getNextSibling = lookupGetter(ElementPrototype, 'nextSibling');\n  const getChildNodes = lookupGetter(ElementPrototype, 'childNodes');\n  const getParentNode = lookupGetter(ElementPrototype, 'parentNode');\n  // As per issue #47, the web-components registry is inherited by a\n  // new document created via createHTMLDocument. As per the spec\n  // (http://w3c.github.io/webcomponents/spec/custom/#creating-and-passing-registries)\n  // a new empty registry is used when creating a template contents owner\n  // document, so we use that as our parent document to ensure nothing\n  // is inherited.\n  if (typeof HTMLTemplateElement === 'function') {\n    const template = document.createElement('template');\n    if (template.content && template.content.ownerDocument) {\n      document = template.content.ownerDocument;\n    }\n  }\n  let trustedTypesPolicy;\n  let emptyHTML = '';\n  const {\n    implementation,\n    createNodeIterator,\n    createDocumentFragment,\n    getElementsByTagName\n  } = document;\n  const {\n    importNode\n  } = originalDocument;\n  let hooks = _createHooksMap();\n  /**\n   * Expose whether this browser supports running the full DOMPurify.\n   */\n  DOMPurify.isSupported = typeof entries === 'function' && typeof getParentNode === 'function' && implementation && implementation.createHTMLDocument !== undefined;\n  const {\n    MUSTACHE_EXPR,\n    ERB_EXPR,\n    TMPLIT_EXPR,\n    DATA_ATTR,\n    ARIA_ATTR,\n    IS_SCRIPT_OR_DATA,\n    ATTR_WHITESPACE,\n    CUSTOM_ELEMENT\n  } = EXPRESSIONS;\n  let {\n    IS_ALLOWED_URI: IS_ALLOWED_URI$1\n  } = EXPRESSIONS;\n  /**\n   * We consider the elements and attributes below to be safe. Ideally\n   * don't add any new ones but feel free to remove unwanted ones.\n   */\n  /* allowed element names */\n  let ALLOWED_TAGS = null;\n  const DEFAULT_ALLOWED_TAGS = addToSet({}, [...html$1, ...svg$1, ...svgFilters, ...mathMl$1, ...text]);\n  /* Allowed attribute names */\n  let ALLOWED_ATTR = null;\n  const DEFAULT_ALLOWED_ATTR = addToSet({}, [...html, ...svg, ...mathMl, ...xml]);\n  /*\n   * Configure how DOMPurify should handle custom elements and their attributes as well as customized built-in elements.\n   * @property {RegExp|Function|null} tagNameCheck one of [null, regexPattern, predicate]. Default: `null` (disallow any custom elements)\n   * @property {RegExp|Function|null} attributeNameCheck one of [null, regexPattern, predicate]. Default: `null` (disallow any attributes not on the allow list)\n   * @property {boolean} allowCustomizedBuiltInElements allow custom elements derived from built-ins if they pass CUSTOM_ELEMENT_HANDLING.tagNameCheck. Default: `false`.\n   */\n  let CUSTOM_ELEMENT_HANDLING = Object.seal(create(null, {\n    tagNameCheck: {\n      writable: true,\n      configurable: false,\n      enumerable: true,\n      value: null\n    },\n    attributeNameCheck: {\n      writable: true,\n      configurable: false,\n      enumerable: true,\n      value: null\n    },\n    allowCustomizedBuiltInElements: {\n      writable: true,\n      configurable: false,\n      enumerable: true,\n      value: false\n    }\n  }));\n  /* Explicitly forbidden tags (overrides ALLOWED_TAGS/ADD_TAGS) */\n  let FORBID_TAGS = null;\n  /* Explicitly forbidden attributes (overrides ALLOWED_ATTR/ADD_ATTR) */\n  let FORBID_ATTR = null;\n  /* Config object to store ADD_TAGS/ADD_ATTR functions (when used as functions) */\n  const EXTRA_ELEMENT_HANDLING = Object.seal(create(null, {\n    tagCheck: {\n      writable: true,\n      configurable: false,\n      enumerable: true,\n      value: null\n    },\n    attributeCheck: {\n      writable: true,\n      configurable: false,\n      enumerable: true,\n      value: null\n    }\n  }));\n  /* Decide if ARIA attributes are okay */\n  let ALLOW_ARIA_ATTR = true;\n  /* Decide if custom data attributes are okay */\n  let ALLOW_DATA_ATTR = true;\n  /* Decide if unknown protocols are okay */\n  let ALLOW_UNKNOWN_PROTOCOLS = false;\n  /* Decide if self-closing tags in attributes are allowed.\n   * Usually removed due to a mXSS issue in jQuery 3.0 */\n  let ALLOW_SELF_CLOSE_IN_ATTR = true;\n  /* Output should be safe for common template engines.\n   * This means, DOMPurify removes data attributes, mustaches and ERB\n   */\n  let SAFE_FOR_TEMPLATES = false;\n  /* Output should be safe even for XML used within HTML and alike.\n   * This means, DOMPurify removes comments when containing risky content.\n   */\n  let SAFE_FOR_XML = true;\n  /* Decide if document with <html>... should be returned */\n  let WHOLE_DOCUMENT = false;\n  /* Track whether config is already set on this instance of DOMPurify. */\n  let SET_CONFIG = false;\n  /* Decide if all elements (e.g. style, script) must be children of\n   * document.body. By default, browsers might move them to document.head */\n  let FORCE_BODY = false;\n  /* Decide if a DOM `HTMLBodyElement` should be returned, instead of a html\n   * string (or a TrustedHTML object if Trusted Types are supported).\n   * If `WHOLE_DOCUMENT` is enabled a `HTMLHtmlElement` will be returned instead\n   */\n  let RETURN_DOM = false;\n  /* Decide if a DOM `DocumentFragment` should be returned, instead of a html\n   * string  (or a TrustedHTML object if Trusted Types are supported) */\n  let RETURN_DOM_FRAGMENT = false;\n  /* Try to return a Trusted Type object instead of a string, return a string in\n   * case Trusted Types are not supported  */\n  let RETURN_TRUSTED_TYPE = false;\n  /* Output should be free from DOM clobbering attacks?\n   * This sanitizes markups named with colliding, clobberable built-in DOM APIs.\n   */\n  let SANITIZE_DOM = true;\n  /* Achieve full DOM Clobbering protection by isolating the namespace of named\n   * properties and JS variables, mitigating attacks that abuse the HTML/DOM spec rules.\n   *\n   * HTML/DOM spec rules that enable DOM Clobbering:\n   *   - Named Access on Window (§7.3.3)\n   *   - DOM Tree Accessors (§3.1.5)\n   *   - Form Element Parent-Child Relations (§4.10.3)\n   *   - Iframe srcdoc / Nested WindowProxies (§4.8.5)\n   *   - HTMLCollection (§4.2.10.2)\n   *\n   * Namespace isolation is implemented by prefixing `id` and `name` attributes\n   * with a constant string, i.e., `user-content-`\n   */\n  let SANITIZE_NAMED_PROPS = false;\n  const SANITIZE_NAMED_PROPS_PREFIX = 'user-content-';\n  /* Keep element content when removing element? */\n  let KEEP_CONTENT = true;\n  /* If a `Node` is passed to sanitize(), then performs sanitization in-place instead\n   * of importing it into a new Document and returning a sanitized copy */\n  let IN_PLACE = false;\n  /* Allow usage of profiles like html, svg and mathMl */\n  let USE_PROFILES = {};\n  /* Tags to ignore content of when KEEP_CONTENT is true */\n  let FORBID_CONTENTS = null;\n  const DEFAULT_FORBID_CONTENTS = addToSet({}, ['annotation-xml', 'audio', 'colgroup', 'desc', 'foreignobject', 'head', 'iframe', 'math', 'mi', 'mn', 'mo', 'ms', 'mtext', 'noembed', 'noframes', 'noscript', 'plaintext', 'script', 'style', 'svg', 'template', 'thead', 'title', 'video', 'xmp']);\n  /* Tags that are safe for data: URIs */\n  let DATA_URI_TAGS = null;\n  const DEFAULT_DATA_URI_TAGS = addToSet({}, ['audio', 'video', 'img', 'source', 'image', 'track']);\n  /* Attributes safe for values like \"javascript:\" */\n  let URI_SAFE_ATTRIBUTES = null;\n  const DEFAULT_URI_SAFE_ATTRIBUTES = addToSet({}, ['alt', 'class', 'for', 'id', 'label', 'name', 'pattern', 'placeholder', 'role', 'summary', 'title', 'value', 'style', 'xmlns']);\n  const MATHML_NAMESPACE = 'http://www.w3.org/1998/Math/MathML';\n  const SVG_NAMESPACE = 'http://www.w3.org/2000/svg';\n  const HTML_NAMESPACE = 'http://www.w3.org/1999/xhtml';\n  /* Document namespace */\n  let NAMESPACE = HTML_NAMESPACE;\n  let IS_EMPTY_INPUT = false;\n  /* Allowed XHTML+XML namespaces */\n  let ALLOWED_NAMESPACES = null;\n  const DEFAULT_ALLOWED_NAMESPACES = addToSet({}, [MATHML_NAMESPACE, SVG_NAMESPACE, HTML_NAMESPACE], stringToString);\n  let MATHML_TEXT_INTEGRATION_POINTS = addToSet({}, ['mi', 'mo', 'mn', 'ms', 'mtext']);\n  let HTML_INTEGRATION_POINTS = addToSet({}, ['annotation-xml']);\n  // Certain elements are allowed in both SVG and HTML\n  // namespace. We need to specify them explicitly\n  // so that they don't get erroneously deleted from\n  // HTML namespace.\n  const COMMON_SVG_AND_HTML_ELEMENTS = addToSet({}, ['title', 'style', 'font', 'a', 'script']);\n  /* Parsing of strict XHTML documents */\n  let PARSER_MEDIA_TYPE = null;\n  const SUPPORTED_PARSER_MEDIA_TYPES = ['application/xhtml+xml', 'text/html'];\n  const DEFAULT_PARSER_MEDIA_TYPE = 'text/html';\n  let transformCaseFunc = null;\n  /* Keep a reference to config to pass to hooks */\n  let CONFIG = null;\n  /* Ideally, do not touch anything below this line */\n  /* ______________________________________________ */\n  const formElement = document.createElement('form');\n  const isRegexOrFunction = function isRegexOrFunction(testValue) {\n    return testValue instanceof RegExp || testValue instanceof Function;\n  };\n  /**\n   * _parseConfig\n   *\n   * @param cfg optional config literal\n   */\n  // eslint-disable-next-line complexity\n  const _parseConfig = function _parseConfig() {\n    let cfg = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n    if (CONFIG && CONFIG === cfg) {\n      return;\n    }\n    /* Shield configuration object from tampering */\n    if (!cfg || typeof cfg !== 'object') {\n      cfg = {};\n    }\n    /* Shield configuration object from prototype pollution */\n    cfg = clone(cfg);\n    PARSER_MEDIA_TYPE =\n    // eslint-disable-next-line unicorn/prefer-includes\n    SUPPORTED_PARSER_MEDIA_TYPES.indexOf(cfg.PARSER_MEDIA_TYPE) === -1 ? DEFAULT_PARSER_MEDIA_TYPE : cfg.PARSER_MEDIA_TYPE;\n    // HTML tags and attributes are not case-sensitive, converting to lowercase. Keeping XHTML as is.\n    transformCaseFunc = PARSER_MEDIA_TYPE === 'application/xhtml+xml' ? stringToString : stringToLowerCase;\n    /* Set configuration parameters */\n    ALLOWED_TAGS = objectHasOwnProperty(cfg, 'ALLOWED_TAGS') ? addToSet({}, cfg.ALLOWED_TAGS, transformCaseFunc) : DEFAULT_ALLOWED_TAGS;\n    ALLOWED_ATTR = objectHasOwnProperty(cfg, 'ALLOWED_ATTR') ? addToSet({}, cfg.ALLOWED_ATTR, transformCaseFunc) : DEFAULT_ALLOWED_ATTR;\n    ALLOWED_NAMESPACES = objectHasOwnProperty(cfg, 'ALLOWED_NAMESPACES') ? addToSet({}, cfg.ALLOWED_NAMESPACES, stringToString) : DEFAULT_ALLOWED_NAMESPACES;\n    URI_SAFE_ATTRIBUTES = objectHasOwnProperty(cfg, 'ADD_URI_SAFE_ATTR') ? addToSet(clone(DEFAULT_URI_SAFE_ATTRIBUTES), cfg.ADD_URI_SAFE_ATTR, transformCaseFunc) : DEFAULT_URI_SAFE_ATTRIBUTES;\n    DATA_URI_TAGS = objectHasOwnProperty(cfg, 'ADD_DATA_URI_TAGS') ? addToSet(clone(DEFAULT_DATA_URI_TAGS), cfg.ADD_DATA_URI_TAGS, transformCaseFunc) : DEFAULT_DATA_URI_TAGS;\n    FORBID_CONTENTS = objectHasOwnProperty(cfg, 'FORBID_CONTENTS') ? addToSet({}, cfg.FORBID_CONTENTS, transformCaseFunc) : DEFAULT_FORBID_CONTENTS;\n    FORBID_TAGS = objectHasOwnProperty(cfg, 'FORBID_TAGS') ? addToSet({}, cfg.FORBID_TAGS, transformCaseFunc) : clone({});\n    FORBID_ATTR = objectHasOwnProperty(cfg, 'FORBID_ATTR') ? addToSet({}, cfg.FORBID_ATTR, transformCaseFunc) : clone({});\n    USE_PROFILES = objectHasOwnProperty(cfg, 'USE_PROFILES') ? cfg.USE_PROFILES : false;\n    ALLOW_ARIA_ATTR = cfg.ALLOW_ARIA_ATTR !== false; // Default true\n    ALLOW_DATA_ATTR = cfg.ALLOW_DATA_ATTR !== false; // Default true\n    ALLOW_UNKNOWN_PROTOCOLS = cfg.ALLOW_UNKNOWN_PROTOCOLS || false; // Default false\n    ALLOW_SELF_CLOSE_IN_ATTR = cfg.ALLOW_SELF_CLOSE_IN_ATTR !== false; // Default true\n    SAFE_FOR_TEMPLATES = cfg.SAFE_FOR_TEMPLATES || false; // Default false\n    SAFE_FOR_XML = cfg.SAFE_FOR_XML !== false; // Default true\n    WHOLE_DOCUMENT = cfg.WHOLE_DOCUMENT || false; // Default false\n    RETURN_DOM = cfg.RETURN_DOM || false; // Default false\n    RETURN_DOM_FRAGMENT = cfg.RETURN_DOM_FRAGMENT || false; // Default false\n    RETURN_TRUSTED_TYPE = cfg.RETURN_TRUSTED_TYPE || false; // Default false\n    FORCE_BODY = cfg.FORCE_BODY || false; // Default false\n    SANITIZE_DOM = cfg.SANITIZE_DOM !== false; // Default true\n    SANITIZE_NAMED_PROPS = cfg.SANITIZE_NAMED_PROPS || false; // Default false\n    KEEP_CONTENT = cfg.KEEP_CONTENT !== false; // Default true\n    IN_PLACE = cfg.IN_PLACE || false; // Default false\n    IS_ALLOWED_URI$1 = cfg.ALLOWED_URI_REGEXP || IS_ALLOWED_URI;\n    NAMESPACE = cfg.NAMESPACE || HTML_NAMESPACE;\n    MATHML_TEXT_INTEGRATION_POINTS = cfg.MATHML_TEXT_INTEGRATION_POINTS || MATHML_TEXT_INTEGRATION_POINTS;\n    HTML_INTEGRATION_POINTS = cfg.HTML_INTEGRATION_POINTS || HTML_INTEGRATION_POINTS;\n    CUSTOM_ELEMENT_HANDLING = cfg.CUSTOM_ELEMENT_HANDLING || {};\n    if (cfg.CUSTOM_ELEMENT_HANDLING && isRegexOrFunction(cfg.CUSTOM_ELEMENT_HANDLING.tagNameCheck)) {\n      CUSTOM_ELEMENT_HANDLING.tagNameCheck = cfg.CUSTOM_ELEMENT_HANDLING.tagNameCheck;\n    }\n    if (cfg.CUSTOM_ELEMENT_HANDLING && isRegexOrFunction(cfg.CUSTOM_ELEMENT_HANDLING.attributeNameCheck)) {\n      CUSTOM_ELEMENT_HANDLING.attributeNameCheck = cfg.CUSTOM_ELEMENT_HANDLING.attributeNameCheck;\n    }\n    if (cfg.CUSTOM_ELEMENT_HANDLING && typeof cfg.CUSTOM_ELEMENT_HANDLING.allowCustomizedBuiltInElements === 'boolean') {\n      CUSTOM_ELEMENT_HANDLING.allowCustomizedBuiltInElements = cfg.CUSTOM_ELEMENT_HANDLING.allowCustomizedBuiltInElements;\n    }\n    if (SAFE_FOR_TEMPLATES) {\n      ALLOW_DATA_ATTR = false;\n    }\n    if (RETURN_DOM_FRAGMENT) {\n      RETURN_DOM = true;\n    }\n    /* Parse profile info */\n    if (USE_PROFILES) {\n      ALLOWED_TAGS = addToSet({}, text);\n      ALLOWED_ATTR = [];\n      if (USE_PROFILES.html === true) {\n        addToSet(ALLOWED_TAGS, html$1);\n        addToSet(ALLOWED_ATTR, html);\n      }\n      if (USE_PROFILES.svg === true) {\n        addToSet(ALLOWED_TAGS, svg$1);\n        addToSet(ALLOWED_ATTR, svg);\n        addToSet(ALLOWED_ATTR, xml);\n      }\n      if (USE_PROFILES.svgFilters === true) {\n        addToSet(ALLOWED_TAGS, svgFilters);\n        addToSet(ALLOWED_ATTR, svg);\n        addToSet(ALLOWED_ATTR, xml);\n      }\n      if (USE_PROFILES.mathMl === true) {\n        addToSet(ALLOWED_TAGS, mathMl$1);\n        addToSet(ALLOWED_ATTR, mathMl);\n        addToSet(ALLOWED_ATTR, xml);\n      }\n    }\n    /* Merge configuration parameters */\n    if (cfg.ADD_TAGS) {\n      if (typeof cfg.ADD_TAGS === 'function') {\n        EXTRA_ELEMENT_HANDLING.tagCheck = cfg.ADD_TAGS;\n      } else {\n        if (ALLOWED_TAGS === DEFAULT_ALLOWED_TAGS) {\n          ALLOWED_TAGS = clone(ALLOWED_TAGS);\n        }\n        addToSet(ALLOWED_TAGS, cfg.ADD_TAGS, transformCaseFunc);\n      }\n    }\n    if (cfg.ADD_ATTR) {\n      if (typeof cfg.ADD_ATTR === 'function') {\n        EXTRA_ELEMENT_HANDLING.attributeCheck = cfg.ADD_ATTR;\n      } else {\n        if (ALLOWED_ATTR === DEFAULT_ALLOWED_ATTR) {\n          ALLOWED_ATTR = clone(ALLOWED_ATTR);\n        }\n        addToSet(ALLOWED_ATTR, cfg.ADD_ATTR, transformCaseFunc);\n      }\n    }\n    if (cfg.ADD_URI_SAFE_ATTR) {\n      addToSet(URI_SAFE_ATTRIBUTES, cfg.ADD_URI_SAFE_ATTR, transformCaseFunc);\n    }\n    if (cfg.FORBID_CONTENTS) {\n      if (FORBID_CONTENTS === DEFAULT_FORBID_CONTENTS) {\n        FORBID_CONTENTS = clone(FORBID_CONTENTS);\n      }\n      addToSet(FORBID_CONTENTS, cfg.FORBID_CONTENTS, transformCaseFunc);\n    }\n    /* Add #text in case KEEP_CONTENT is set to true */\n    if (KEEP_CONTENT) {\n      ALLOWED_TAGS['#text'] = true;\n    }\n    /* Add html, head and body to ALLOWED_TAGS in case WHOLE_DOCUMENT is true */\n    if (WHOLE_DOCUMENT) {\n      addToSet(ALLOWED_TAGS, ['html', 'head', 'body']);\n    }\n    /* Add tbody to ALLOWED_TAGS in case tables are permitted, see #286, #365 */\n    if (ALLOWED_TAGS.table) {\n      addToSet(ALLOWED_TAGS, ['tbody']);\n      delete FORBID_TAGS.tbody;\n    }\n    if (cfg.TRUSTED_TYPES_POLICY) {\n      if (typeof cfg.TRUSTED_TYPES_POLICY.createHTML !== 'function') {\n        throw typeErrorCreate('TRUSTED_TYPES_POLICY configuration option must provide a \"createHTML\" hook.');\n      }\n      if (typeof cfg.TRUSTED_TYPES_POLICY.createScriptURL !== 'function') {\n        throw typeErrorCreate('TRUSTED_TYPES_POLICY configuration option must provide a \"createScriptURL\" hook.');\n      }\n      // Overwrite existing TrustedTypes policy.\n      trustedTypesPolicy = cfg.TRUSTED_TYPES_POLICY;\n      // Sign local variables required by `sanitize`.\n      emptyHTML = trustedTypesPolicy.createHTML('');\n    } else {\n      // Uninitialized policy, attempt to initialize the internal dompurify policy.\n      if (trustedTypesPolicy === undefined) {\n        trustedTypesPolicy = _createTrustedTypesPolicy(trustedTypes, currentScript);\n      }\n      // If creating the internal policy succeeded sign internal variables.\n      if (trustedTypesPolicy !== null && typeof emptyHTML === 'string') {\n        emptyHTML = trustedTypesPolicy.createHTML('');\n      }\n    }\n    // Prevent further manipulation of configuration.\n    // Not available in IE8, Safari 5, etc.\n    if (freeze) {\n      freeze(cfg);\n    }\n    CONFIG = cfg;\n  };\n  /* Keep track of all possible SVG and MathML tags\n   * so that we can perform the namespace checks\n   * correctly. */\n  const ALL_SVG_TAGS = addToSet({}, [...svg$1, ...svgFilters, ...svgDisallowed]);\n  const ALL_MATHML_TAGS = addToSet({}, [...mathMl$1, ...mathMlDisallowed]);\n  /**\n   * @param element a DOM element whose namespace is being checked\n   * @returns Return false if the element has a\n   *  namespace that a spec-compliant parser would never\n   *  return. Return true otherwise.\n   */\n  const _checkValidNamespace = function _checkValidNamespace(element) {\n    let parent = getParentNode(element);\n    // In JSDOM, if we're inside shadow DOM, then parentNode\n    // can be null. We just simulate parent in this case.\n    if (!parent || !parent.tagName) {\n      parent = {\n        namespaceURI: NAMESPACE,\n        tagName: 'template'\n      };\n    }\n    const tagName = stringToLowerCase(element.tagName);\n    const parentTagName = stringToLowerCase(parent.tagName);\n    if (!ALLOWED_NAMESPACES[element.namespaceURI]) {\n      return false;\n    }\n    if (element.namespaceURI === SVG_NAMESPACE) {\n      // The only way to switch from HTML namespace to SVG\n      // is via <svg>. If it happens via any other tag, then\n      // it should be killed.\n      if (parent.namespaceURI === HTML_NAMESPACE) {\n        return tagName === 'svg';\n      }\n      // The only way to switch from MathML to SVG is via`\n      // svg if parent is either <annotation-xml> or MathML\n      // text integration points.\n      if (parent.namespaceURI === MATHML_NAMESPACE) {\n        return tagName === 'svg' && (parentTagName === 'annotation-xml' || MATHML_TEXT_INTEGRATION_POINTS[parentTagName]);\n      }\n      // We only allow elements that are defined in SVG\n      // spec. All others are disallowed in SVG namespace.\n      return Boolean(ALL_SVG_TAGS[tagName]);\n    }\n    if (element.namespaceURI === MATHML_NAMESPACE) {\n      // The only way to switch from HTML namespace to MathML\n      // is via <math>. If it happens via any other tag, then\n      // it should be killed.\n      if (parent.namespaceURI === HTML_NAMESPACE) {\n        return tagName === 'math';\n      }\n      // The only way to switch from SVG to MathML is via\n      // <math> and HTML integration points\n      if (parent.namespaceURI === SVG_NAMESPACE) {\n        return tagName === 'math' && HTML_INTEGRATION_POINTS[parentTagName];\n      }\n      // We only allow elements that are defined in MathML\n      // spec. All others are disallowed in MathML namespace.\n      return Boolean(ALL_MATHML_TAGS[tagName]);\n    }\n    if (element.namespaceURI === HTML_NAMESPACE) {\n      // The only way to switch from SVG to HTML is via\n      // HTML integration points, and from MathML to HTML\n      // is via MathML text integration points\n      if (parent.namespaceURI === SVG_NAMESPACE && !HTML_INTEGRATION_POINTS[parentTagName]) {\n        return false;\n      }\n      if (parent.namespaceURI === MATHML_NAMESPACE && !MATHML_TEXT_INTEGRATION_POINTS[parentTagName]) {\n        return false;\n      }\n      // We disallow tags that are specific for MathML\n      // or SVG and should never appear in HTML namespace\n      return !ALL_MATHML_TAGS[tagName] && (COMMON_SVG_AND_HTML_ELEMENTS[tagName] || !ALL_SVG_TAGS[tagName]);\n    }\n    // For XHTML and XML documents that support custom namespaces\n    if (PARSER_MEDIA_TYPE === 'application/xhtml+xml' && ALLOWED_NAMESPACES[element.namespaceURI]) {\n      return true;\n    }\n    // The code should never reach this place (this means\n    // that the element somehow got namespace that is not\n    // HTML, SVG, MathML or allowed via ALLOWED_NAMESPACES).\n    // Return false just in case.\n    return false;\n  };\n  /**\n   * _forceRemove\n   *\n   * @param node a DOM node\n   */\n  const _forceRemove = function _forceRemove(node) {\n    arrayPush(DOMPurify.removed, {\n      element: node\n    });\n    try {\n      // eslint-disable-next-line unicorn/prefer-dom-node-remove\n      getParentNode(node).removeChild(node);\n    } catch (_) {\n      remove(node);\n    }\n  };\n  /**\n   * _removeAttribute\n   *\n   * @param name an Attribute name\n   * @param element a DOM node\n   */\n  const _removeAttribute = function _removeAttribute(name, element) {\n    try {\n      arrayPush(DOMPurify.removed, {\n        attribute: element.getAttributeNode(name),\n        from: element\n      });\n    } catch (_) {\n      arrayPush(DOMPurify.removed, {\n        attribute: null,\n        from: element\n      });\n    }\n    element.removeAttribute(name);\n    // We void attribute values for unremovable \"is\" attributes\n    if (name === 'is') {\n      if (RETURN_DOM || RETURN_DOM_FRAGMENT) {\n        try {\n          _forceRemove(element);\n        } catch (_) {}\n      } else {\n        try {\n          element.setAttribute(name, '');\n        } catch (_) {}\n      }\n    }\n  };\n  /**\n   * _initDocument\n   *\n   * @param dirty - a string of dirty markup\n   * @return a DOM, filled with the dirty markup\n   */\n  const _initDocument = function _initDocument(dirty) {\n    /* Create a HTML document */\n    let doc = null;\n    let leadingWhitespace = null;\n    if (FORCE_BODY) {\n      dirty = '<remove></remove>' + dirty;\n    } else {\n      /* If FORCE_BODY isn't used, leading whitespace needs to be preserved manually */\n      const matches = stringMatch(dirty, /^[\\r\\n\\t ]+/);\n      leadingWhitespace = matches && matches[0];\n    }\n    if (PARSER_MEDIA_TYPE === 'application/xhtml+xml' && NAMESPACE === HTML_NAMESPACE) {\n      // Root of XHTML doc must contain xmlns declaration (see https://www.w3.org/TR/xhtml1/normative.html#strict)\n      dirty = '<html xmlns=\"http://www.w3.org/1999/xhtml\"><head></head><body>' + dirty + '</body></html>';\n    }\n    const dirtyPayload = trustedTypesPolicy ? trustedTypesPolicy.createHTML(dirty) : dirty;\n    /*\n     * Use the DOMParser API by default, fallback later if needs be\n     * DOMParser not work for svg when has multiple root element.\n     */\n    if (NAMESPACE === HTML_NAMESPACE) {\n      try {\n        doc = new DOMParser().parseFromString(dirtyPayload, PARSER_MEDIA_TYPE);\n      } catch (_) {}\n    }\n    /* Use createHTMLDocument in case DOMParser is not available */\n    if (!doc || !doc.documentElement) {\n      doc = implementation.createDocument(NAMESPACE, 'template', null);\n      try {\n        doc.documentElement.innerHTML = IS_EMPTY_INPUT ? emptyHTML : dirtyPayload;\n      } catch (_) {\n        // Syntax error if dirtyPayload is invalid xml\n      }\n    }\n    const body = doc.body || doc.documentElement;\n    if (dirty && leadingWhitespace) {\n      body.insertBefore(document.createTextNode(leadingWhitespace), body.childNodes[0] || null);\n    }\n    /* Work on whole document or just its body */\n    if (NAMESPACE === HTML_NAMESPACE) {\n      return getElementsByTagName.call(doc, WHOLE_DOCUMENT ? 'html' : 'body')[0];\n    }\n    return WHOLE_DOCUMENT ? doc.documentElement : body;\n  };\n  /**\n   * Creates a NodeIterator object that you can use to traverse filtered lists of nodes or elements in a document.\n   *\n   * @param root The root element or node to start traversing on.\n   * @return The created NodeIterator\n   */\n  const _createNodeIterator = function _createNodeIterator(root) {\n    return createNodeIterator.call(root.ownerDocument || root, root,\n    // eslint-disable-next-line no-bitwise\n    NodeFilter.SHOW_ELEMENT | NodeFilter.SHOW_COMMENT | NodeFilter.SHOW_TEXT | NodeFilter.SHOW_PROCESSING_INSTRUCTION | NodeFilter.SHOW_CDATA_SECTION, null);\n  };\n  /**\n   * _isClobbered\n   *\n   * @param element element to check for clobbering attacks\n   * @return true if clobbered, false if safe\n   */\n  const _isClobbered = function _isClobbered(element) {\n    return element instanceof HTMLFormElement && (typeof element.nodeName !== 'string' || typeof element.textContent !== 'string' || typeof element.removeChild !== 'function' || !(element.attributes instanceof NamedNodeMap) || typeof element.removeAttribute !== 'function' || typeof element.setAttribute !== 'function' || typeof element.namespaceURI !== 'string' || typeof element.insertBefore !== 'function' || typeof element.hasChildNodes !== 'function');\n  };\n  /**\n   * Checks whether the given object is a DOM node.\n   *\n   * @param value object to check whether it's a DOM node\n   * @return true is object is a DOM node\n   */\n  const _isNode = function _isNode(value) {\n    return typeof Node === 'function' && value instanceof Node;\n  };\n  function _executeHooks(hooks, currentNode, data) {\n    arrayForEach(hooks, hook => {\n      hook.call(DOMPurify, currentNode, data, CONFIG);\n    });\n  }\n  /**\n   * _sanitizeElements\n   *\n   * @protect nodeName\n   * @protect textContent\n   * @protect removeChild\n   * @param currentNode to check for permission to exist\n   * @return true if node was killed, false if left alive\n   */\n  const _sanitizeElements = function _sanitizeElements(currentNode) {\n    let content = null;\n    /* Execute a hook if present */\n    _executeHooks(hooks.beforeSanitizeElements, currentNode, null);\n    /* Check if element is clobbered or can clobber */\n    if (_isClobbered(currentNode)) {\n      _forceRemove(currentNode);\n      return true;\n    }\n    /* Now let's check the element's type and name */\n    const tagName = transformCaseFunc(currentNode.nodeName);\n    /* Execute a hook if present */\n    _executeHooks(hooks.uponSanitizeElement, currentNode, {\n      tagName,\n      allowedTags: ALLOWED_TAGS\n    });\n    /* Detect mXSS attempts abusing namespace confusion */\n    if (SAFE_FOR_XML && currentNode.hasChildNodes() && !_isNode(currentNode.firstElementChild) && regExpTest(/<[/\\w!]/g, currentNode.innerHTML) && regExpTest(/<[/\\w!]/g, currentNode.textContent)) {\n      _forceRemove(currentNode);\n      return true;\n    }\n    /* Remove any occurrence of processing instructions */\n    if (currentNode.nodeType === NODE_TYPE.progressingInstruction) {\n      _forceRemove(currentNode);\n      return true;\n    }\n    /* Remove any kind of possibly harmful comments */\n    if (SAFE_FOR_XML && currentNode.nodeType === NODE_TYPE.comment && regExpTest(/<[/\\w]/g, currentNode.data)) {\n      _forceRemove(currentNode);\n      return true;\n    }\n    /* Remove element if anything forbids its presence */\n    if (!(EXTRA_ELEMENT_HANDLING.tagCheck instanceof Function && EXTRA_ELEMENT_HANDLING.tagCheck(tagName)) && (!ALLOWED_TAGS[tagName] || FORBID_TAGS[tagName])) {\n      /* Check if we have a custom element to handle */\n      if (!FORBID_TAGS[tagName] && _isBasicCustomElement(tagName)) {\n        if (CUSTOM_ELEMENT_HANDLING.tagNameCheck instanceof RegExp && regExpTest(CUSTOM_ELEMENT_HANDLING.tagNameCheck, tagName)) {\n          return false;\n        }\n        if (CUSTOM_ELEMENT_HANDLING.tagNameCheck instanceof Function && CUSTOM_ELEMENT_HANDLING.tagNameCheck(tagName)) {\n          return false;\n        }\n      }\n      /* Keep content except for bad-listed elements */\n      if (KEEP_CONTENT && !FORBID_CONTENTS[tagName]) {\n        const parentNode = getParentNode(currentNode) || currentNode.parentNode;\n        const childNodes = getChildNodes(currentNode) || currentNode.childNodes;\n        if (childNodes && parentNode) {\n          const childCount = childNodes.length;\n          for (let i = childCount - 1; i >= 0; --i) {\n            const childClone = cloneNode(childNodes[i], true);\n            childClone.__removalCount = (currentNode.__removalCount || 0) + 1;\n            parentNode.insertBefore(childClone, getNextSibling(currentNode));\n          }\n        }\n      }\n      _forceRemove(currentNode);\n      return true;\n    }\n    /* Check whether element has a valid namespace */\n    if (currentNode instanceof Element && !_checkValidNamespace(currentNode)) {\n      _forceRemove(currentNode);\n      return true;\n    }\n    /* Make sure that older browsers don't get fallback-tag mXSS */\n    if ((tagName === 'noscript' || tagName === 'noembed' || tagName === 'noframes') && regExpTest(/<\\/no(script|embed|frames)/i, currentNode.innerHTML)) {\n      _forceRemove(currentNode);\n      return true;\n    }\n    /* Sanitize element content to be template-safe */\n    if (SAFE_FOR_TEMPLATES && currentNode.nodeType === NODE_TYPE.text) {\n      /* Get the element's text content */\n      content = currentNode.textContent;\n      arrayForEach([MUSTACHE_EXPR, ERB_EXPR, TMPLIT_EXPR], expr => {\n        content = stringReplace(content, expr, ' ');\n      });\n      if (currentNode.textContent !== content) {\n        arrayPush(DOMPurify.removed, {\n          element: currentNode.cloneNode()\n        });\n        currentNode.textContent = content;\n      }\n    }\n    /* Execute a hook if present */\n    _executeHooks(hooks.afterSanitizeElements, currentNode, null);\n    return false;\n  };\n  /**\n   * _isValidAttribute\n   *\n   * @param lcTag Lowercase tag name of containing element.\n   * @param lcName Lowercase attribute name.\n   * @param value Attribute value.\n   * @return Returns true if `value` is valid, otherwise false.\n   */\n  // eslint-disable-next-line complexity\n  const _isValidAttribute = function _isValidAttribute(lcTag, lcName, value) {\n    /* Make sure attribute cannot clobber */\n    if (SANITIZE_DOM && (lcName === 'id' || lcName === 'name') && (value in document || value in formElement)) {\n      return false;\n    }\n    /* Allow valid data-* attributes: At least one character after \"-\"\n        (https://html.spec.whatwg.org/multipage/dom.html#embedding-custom-non-visible-data-with-the-data-*-attributes)\n        XML-compatible (https://html.spec.whatwg.org/multipage/infrastructure.html#xml-compatible and http://www.w3.org/TR/xml/#d0e804)\n        We don't need to check the value; it's always URI safe. */\n    if (ALLOW_DATA_ATTR && !FORBID_ATTR[lcName] && regExpTest(DATA_ATTR, lcName)) ; else if (ALLOW_ARIA_ATTR && regExpTest(ARIA_ATTR, lcName)) ; else if (EXTRA_ELEMENT_HANDLING.attributeCheck instanceof Function && EXTRA_ELEMENT_HANDLING.attributeCheck(lcName, lcTag)) ; else if (!ALLOWED_ATTR[lcName] || FORBID_ATTR[lcName]) {\n      if (\n      // First condition does a very basic check if a) it's basically a valid custom element tagname AND\n      // b) if the tagName passes whatever the user has configured for CUSTOM_ELEMENT_HANDLING.tagNameCheck\n      // and c) if the attribute name passes whatever the user has configured for CUSTOM_ELEMENT_HANDLING.attributeNameCheck\n      _isBasicCustomElement(lcTag) && (CUSTOM_ELEMENT_HANDLING.tagNameCheck instanceof RegExp && regExpTest(CUSTOM_ELEMENT_HANDLING.tagNameCheck, lcTag) || CUSTOM_ELEMENT_HANDLING.tagNameCheck instanceof Function && CUSTOM_ELEMENT_HANDLING.tagNameCheck(lcTag)) && (CUSTOM_ELEMENT_HANDLING.attributeNameCheck instanceof RegExp && regExpTest(CUSTOM_ELEMENT_HANDLING.attributeNameCheck, lcName) || CUSTOM_ELEMENT_HANDLING.attributeNameCheck instanceof Function && CUSTOM_ELEMENT_HANDLING.attributeNameCheck(lcName, lcTag)) ||\n      // Alternative, second condition checks if it's an `is`-attribute, AND\n      // the value passes whatever the user has configured for CUSTOM_ELEMENT_HANDLING.tagNameCheck\n      lcName === 'is' && CUSTOM_ELEMENT_HANDLING.allowCustomizedBuiltInElements && (CUSTOM_ELEMENT_HANDLING.tagNameCheck instanceof RegExp && regExpTest(CUSTOM_ELEMENT_HANDLING.tagNameCheck, value) || CUSTOM_ELEMENT_HANDLING.tagNameCheck instanceof Function && CUSTOM_ELEMENT_HANDLING.tagNameCheck(value))) ; else {\n        return false;\n      }\n      /* Check value is safe. First, is attr inert? If so, is safe */\n    } else if (URI_SAFE_ATTRIBUTES[lcName]) ; else if (regExpTest(IS_ALLOWED_URI$1, stringReplace(value, ATTR_WHITESPACE, ''))) ; else if ((lcName === 'src' || lcName === 'xlink:href' || lcName === 'href') && lcTag !== 'script' && stringIndexOf(value, 'data:') === 0 && DATA_URI_TAGS[lcTag]) ; else if (ALLOW_UNKNOWN_PROTOCOLS && !regExpTest(IS_SCRIPT_OR_DATA, stringReplace(value, ATTR_WHITESPACE, ''))) ; else if (value) {\n      return false;\n    } else ;\n    return true;\n  };\n  /**\n   * _isBasicCustomElement\n   * checks if at least one dash is included in tagName, and it's not the first char\n   * for more sophisticated checking see https://github.com/sindresorhus/validate-element-name\n   *\n   * @param tagName name of the tag of the node to sanitize\n   * @returns Returns true if the tag name meets the basic criteria for a custom element, otherwise false.\n   */\n  const _isBasicCustomElement = function _isBasicCustomElement(tagName) {\n    return tagName !== 'annotation-xml' && stringMatch(tagName, CUSTOM_ELEMENT);\n  };\n  /**\n   * _sanitizeAttributes\n   *\n   * @protect attributes\n   * @protect nodeName\n   * @protect removeAttribute\n   * @protect setAttribute\n   *\n   * @param currentNode to sanitize\n   */\n  const _sanitizeAttributes = function _sanitizeAttributes(currentNode) {\n    /* Execute a hook if present */\n    _executeHooks(hooks.beforeSanitizeAttributes, currentNode, null);\n    const {\n      attributes\n    } = currentNode;\n    /* Check if we have attributes; if not we might have a text node */\n    if (!attributes || _isClobbered(currentNode)) {\n      return;\n    }\n    const hookEvent = {\n      attrName: '',\n      attrValue: '',\n      keepAttr: true,\n      allowedAttributes: ALLOWED_ATTR,\n      forceKeepAttr: undefined\n    };\n    let l = attributes.length;\n    /* Go backwards over all attributes; safely remove bad ones */\n    while (l--) {\n      const attr = attributes[l];\n      const {\n        name,\n        namespaceURI,\n        value: attrValue\n      } = attr;\n      const lcName = transformCaseFunc(name);\n      const initValue = attrValue;\n      let value = name === 'value' ? initValue : stringTrim(initValue);\n      /* Execute a hook if present */\n      hookEvent.attrName = lcName;\n      hookEvent.attrValue = value;\n      hookEvent.keepAttr = true;\n      hookEvent.forceKeepAttr = undefined; // Allows developers to see this is a property they can set\n      _executeHooks(hooks.uponSanitizeAttribute, currentNode, hookEvent);\n      value = hookEvent.attrValue;\n      /* Full DOM Clobbering protection via namespace isolation,\n       * Prefix id and name attributes with `user-content-`\n       */\n      if (SANITIZE_NAMED_PROPS && (lcName === 'id' || lcName === 'name')) {\n        // Remove the attribute with this value\n        _removeAttribute(name, currentNode);\n        // Prefix the value and later re-create the attribute with the sanitized value\n        value = SANITIZE_NAMED_PROPS_PREFIX + value;\n      }\n      /* Work around a security issue with comments inside attributes */\n      if (SAFE_FOR_XML && regExpTest(/((--!?|])>)|<\\/(style|title|textarea)/i, value)) {\n        _removeAttribute(name, currentNode);\n        continue;\n      }\n      /* Make sure we cannot easily use animated hrefs, even if animations are allowed */\n      if (lcName === 'attributename' && stringMatch(value, 'href')) {\n        _removeAttribute(name, currentNode);\n        continue;\n      }\n      /* Did the hooks approve of the attribute? */\n      if (hookEvent.forceKeepAttr) {\n        continue;\n      }\n      /* Did the hooks approve of the attribute? */\n      if (!hookEvent.keepAttr) {\n        _removeAttribute(name, currentNode);\n        continue;\n      }\n      /* Work around a security issue in jQuery 3.0 */\n      if (!ALLOW_SELF_CLOSE_IN_ATTR && regExpTest(/\\/>/i, value)) {\n        _removeAttribute(name, currentNode);\n        continue;\n      }\n      /* Sanitize attribute content to be template-safe */\n      if (SAFE_FOR_TEMPLATES) {\n        arrayForEach([MUSTACHE_EXPR, ERB_EXPR, TMPLIT_EXPR], expr => {\n          value = stringReplace(value, expr, ' ');\n        });\n      }\n      /* Is `value` valid for this attribute? */\n      const lcTag = transformCaseFunc(currentNode.nodeName);\n      if (!_isValidAttribute(lcTag, lcName, value)) {\n        _removeAttribute(name, currentNode);\n        continue;\n      }\n      /* Handle attributes that require Trusted Types */\n      if (trustedTypesPolicy && typeof trustedTypes === 'object' && typeof trustedTypes.getAttributeType === 'function') {\n        if (namespaceURI) ; else {\n          switch (trustedTypes.getAttributeType(lcTag, lcName)) {\n            case 'TrustedHTML':\n              {\n                value = trustedTypesPolicy.createHTML(value);\n                break;\n              }\n            case 'TrustedScriptURL':\n              {\n                value = trustedTypesPolicy.createScriptURL(value);\n                break;\n              }\n          }\n        }\n      }\n      /* Handle invalid data-* attribute set by try-catching it */\n      if (value !== initValue) {\n        try {\n          if (namespaceURI) {\n            currentNode.setAttributeNS(namespaceURI, name, value);\n          } else {\n            /* Fallback to setAttribute() for browser-unrecognized namespaces e.g. \"x-schema\". */\n            currentNode.setAttribute(name, value);\n          }\n          if (_isClobbered(currentNode)) {\n            _forceRemove(currentNode);\n          } else {\n            arrayPop(DOMPurify.removed);\n          }\n        } catch (_) {\n          _removeAttribute(name, currentNode);\n        }\n      }\n    }\n    /* Execute a hook if present */\n    _executeHooks(hooks.afterSanitizeAttributes, currentNode, null);\n  };\n  /**\n   * _sanitizeShadowDOM\n   *\n   * @param fragment to iterate over recursively\n   */\n  const _sanitizeShadowDOM = function _sanitizeShadowDOM(fragment) {\n    let shadowNode = null;\n    const shadowIterator = _createNodeIterator(fragment);\n    /* Execute a hook if present */\n    _executeHooks(hooks.beforeSanitizeShadowDOM, fragment, null);\n    while (shadowNode = shadowIterator.nextNode()) {\n      /* Execute a hook if present */\n      _executeHooks(hooks.uponSanitizeShadowNode, shadowNode, null);\n      /* Sanitize tags and elements */\n      _sanitizeElements(shadowNode);\n      /* Check attributes next */\n      _sanitizeAttributes(shadowNode);\n      /* Deep shadow DOM detected */\n      if (shadowNode.content instanceof DocumentFragment) {\n        _sanitizeShadowDOM(shadowNode.content);\n      }\n    }\n    /* Execute a hook if present */\n    _executeHooks(hooks.afterSanitizeShadowDOM, fragment, null);\n  };\n  // eslint-disable-next-line complexity\n  DOMPurify.sanitize = function (dirty) {\n    let cfg = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n    let body = null;\n    let importedNode = null;\n    let currentNode = null;\n    let returnNode = null;\n    /* Make sure we have a string to sanitize.\n      DO NOT return early, as this will return the wrong type if\n      the user has requested a DOM object rather than a string */\n    IS_EMPTY_INPUT = !dirty;\n    if (IS_EMPTY_INPUT) {\n      dirty = '<!-->';\n    }\n    /* Stringify, in case dirty is an object */\n    if (typeof dirty !== 'string' && !_isNode(dirty)) {\n      if (typeof dirty.toString === 'function') {\n        dirty = dirty.toString();\n        if (typeof dirty !== 'string') {\n          throw typeErrorCreate('dirty is not a string, aborting');\n        }\n      } else {\n        throw typeErrorCreate('toString is not a function');\n      }\n    }\n    /* Return dirty HTML if DOMPurify cannot run */\n    if (!DOMPurify.isSupported) {\n      return dirty;\n    }\n    /* Assign config vars */\n    if (!SET_CONFIG) {\n      _parseConfig(cfg);\n    }\n    /* Clean up removed elements */\n    DOMPurify.removed = [];\n    /* Check if dirty is correctly typed for IN_PLACE */\n    if (typeof dirty === 'string') {\n      IN_PLACE = false;\n    }\n    if (IN_PLACE) {\n      /* Do some early pre-sanitization to avoid unsafe root nodes */\n      if (dirty.nodeName) {\n        const tagName = transformCaseFunc(dirty.nodeName);\n        if (!ALLOWED_TAGS[tagName] || FORBID_TAGS[tagName]) {\n          throw typeErrorCreate('root node is forbidden and cannot be sanitized in-place');\n        }\n      }\n    } else if (dirty instanceof Node) {\n      /* If dirty is a DOM element, append to an empty document to avoid\n         elements being stripped by the parser */\n      body = _initDocument('<!---->');\n      importedNode = body.ownerDocument.importNode(dirty, true);\n      if (importedNode.nodeType === NODE_TYPE.element && importedNode.nodeName === 'BODY') {\n        /* Node is already a body, use as is */\n        body = importedNode;\n      } else if (importedNode.nodeName === 'HTML') {\n        body = importedNode;\n      } else {\n        // eslint-disable-next-line unicorn/prefer-dom-node-append\n        body.appendChild(importedNode);\n      }\n    } else {\n      /* Exit directly if we have nothing to do */\n      if (!RETURN_DOM && !SAFE_FOR_TEMPLATES && !WHOLE_DOCUMENT &&\n      // eslint-disable-next-line unicorn/prefer-includes\n      dirty.indexOf('<') === -1) {\n        return trustedTypesPolicy && RETURN_TRUSTED_TYPE ? trustedTypesPolicy.createHTML(dirty) : dirty;\n      }\n      /* Initialize the document to work on */\n      body = _initDocument(dirty);\n      /* Check we have a DOM node from the data */\n      if (!body) {\n        return RETURN_DOM ? null : RETURN_TRUSTED_TYPE ? emptyHTML : '';\n      }\n    }\n    /* Remove first element node (ours) if FORCE_BODY is set */\n    if (body && FORCE_BODY) {\n      _forceRemove(body.firstChild);\n    }\n    /* Get node iterator */\n    const nodeIterator = _createNodeIterator(IN_PLACE ? dirty : body);\n    /* Now start iterating over the created document */\n    while (currentNode = nodeIterator.nextNode()) {\n      /* Sanitize tags and elements */\n      _sanitizeElements(currentNode);\n      /* Check attributes next */\n      _sanitizeAttributes(currentNode);\n      /* Shadow DOM detected, sanitize it */\n      if (currentNode.content instanceof DocumentFragment) {\n        _sanitizeShadowDOM(currentNode.content);\n      }\n    }\n    /* If we sanitized `dirty` in-place, return it. */\n    if (IN_PLACE) {\n      return dirty;\n    }\n    /* Return sanitized string or DOM */\n    if (RETURN_DOM) {\n      if (RETURN_DOM_FRAGMENT) {\n        returnNode = createDocumentFragment.call(body.ownerDocument);\n        while (body.firstChild) {\n          // eslint-disable-next-line unicorn/prefer-dom-node-append\n          returnNode.appendChild(body.firstChild);\n        }\n      } else {\n        returnNode = body;\n      }\n      if (ALLOWED_ATTR.shadowroot || ALLOWED_ATTR.shadowrootmode) {\n        /*\n          AdoptNode() is not used because internal state is not reset\n          (e.g. the past names map of a HTMLFormElement), this is safe\n          in theory but we would rather not risk another attack vector.\n          The state that is cloned by importNode() is explicitly defined\n          by the specs.\n        */\n        returnNode = importNode.call(originalDocument, returnNode, true);\n      }\n      return returnNode;\n    }\n    let serializedHTML = WHOLE_DOCUMENT ? body.outerHTML : body.innerHTML;\n    /* Serialize doctype if allowed */\n    if (WHOLE_DOCUMENT && ALLOWED_TAGS['!doctype'] && body.ownerDocument && body.ownerDocument.doctype && body.ownerDocument.doctype.name && regExpTest(DOCTYPE_NAME, body.ownerDocument.doctype.name)) {\n      serializedHTML = '<!DOCTYPE ' + body.ownerDocument.doctype.name + '>\\n' + serializedHTML;\n    }\n    /* Sanitize final string template-safe */\n    if (SAFE_FOR_TEMPLATES) {\n      arrayForEach([MUSTACHE_EXPR, ERB_EXPR, TMPLIT_EXPR], expr => {\n        serializedHTML = stringReplace(serializedHTML, expr, ' ');\n      });\n    }\n    return trustedTypesPolicy && RETURN_TRUSTED_TYPE ? trustedTypesPolicy.createHTML(serializedHTML) : serializedHTML;\n  };\n  DOMPurify.setConfig = function () {\n    let cfg = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n    _parseConfig(cfg);\n    SET_CONFIG = true;\n  };\n  DOMPurify.clearConfig = function () {\n    CONFIG = null;\n    SET_CONFIG = false;\n  };\n  DOMPurify.isValidAttribute = function (tag, attr, value) {\n    /* Initialize shared config vars if necessary. */\n    if (!CONFIG) {\n      _parseConfig({});\n    }\n    const lcTag = transformCaseFunc(tag);\n    const lcName = transformCaseFunc(attr);\n    return _isValidAttribute(lcTag, lcName, value);\n  };\n  DOMPurify.addHook = function (entryPoint, hookFunction) {\n    if (typeof hookFunction !== 'function') {\n      return;\n    }\n    arrayPush(hooks[entryPoint], hookFunction);\n  };\n  DOMPurify.removeHook = function (entryPoint, hookFunction) {\n    if (hookFunction !== undefined) {\n      const index = arrayLastIndexOf(hooks[entryPoint], hookFunction);\n      return index === -1 ? undefined : arraySplice(hooks[entryPoint], index, 1)[0];\n    }\n    return arrayPop(hooks[entryPoint]);\n  };\n  DOMPurify.removeHooks = function (entryPoint) {\n    hooks[entryPoint] = [];\n  };\n  DOMPurify.removeAllHooks = function () {\n    hooks = _createHooksMap();\n  };\n  return DOMPurify;\n}\nvar purify = createDOMPurify();\n\nexport { purify as default };\n//# sourceMappingURL=purify.es.mjs.map\n","/* eslint-disable no-multi-assign */\n\nfunction deepFreeze(obj) {\n  if (obj instanceof Map) {\n    obj.clear =\n      obj.delete =\n      obj.set =\n        function () {\n          throw new Error('map is read-only');\n        };\n  } else if (obj instanceof Set) {\n    obj.add =\n      obj.clear =\n      obj.delete =\n        function () {\n          throw new Error('set is read-only');\n        };\n  }\n\n  // Freeze self\n  Object.freeze(obj);\n\n  Object.getOwnPropertyNames(obj).forEach((name) => {\n    const prop = obj[name];\n    const type = typeof prop;\n\n    // Freeze prop if it is an object or function and also not already frozen\n    if ((type === 'object' || type === 'function') && !Object.isFrozen(prop)) {\n      deepFreeze(prop);\n    }\n  });\n\n  return obj;\n}\n\n/** @typedef {import('highlight.js').CallbackResponse} CallbackResponse */\n/** @typedef {import('highlight.js').CompiledMode} CompiledMode */\n/** @implements CallbackResponse */\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    this.isMatchIgnored = false;\n  }\n\n  ignoreMatch() {\n    this.isMatchIgnored = 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$1(original, ...objects) {\n  /** @type Record<string,any> */\n  const result = Object.create(null);\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/**\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 {{scope?: string, language?: 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  // rarely we can have a sublanguage where language is undefined\n  // TODO: track down why\n  return !!node.scope;\n};\n\n/**\n *\n * @param {string} name\n * @param {{prefix:string}} options\n */\nconst scopeToCSSClass = (name, { prefix }) => {\n  // sub-language\n  if (name.startsWith(\"language:\")) {\n    return name.replace(\"language:\", \"language-\");\n  }\n  // tiered scope: comment.line\n  if (name.includes(\".\")) {\n    const pieces = name.split(\".\");\n    return [\n      `${prefix}${pieces.shift()}`,\n      ...(pieces.map((x, i) => `${x}${\"_\".repeat(i + 1)}`))\n    ].join(\" \");\n  }\n  // simple scope\n  return `${prefix}${name}`;\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    const className = scopeToCSSClass(node.scope,\n      { prefix: this.classPrefix });\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 {{scope?: string, language?: string, children: Node[]} | string} Node */\n/** @typedef {{scope?: string, language?: string, children: Node[]} } DataNode */\n/** @typedef {import('highlight.js').Emitter} Emitter */\n/**  */\n\n/** @returns {DataNode} */\nconst newNode = (opts = {}) => {\n  /** @type DataNode */\n  const result = { children: [] };\n  Object.assign(result, opts);\n  return result;\n};\n\nclass TokenTree {\n  constructor() {\n    /** @type DataNode */\n    this.rootNode = newNode();\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} scope */\n  openNode(scope) {\n    /** @type Node */\n    const node = newNode({ scope });\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  - addText(text)\n  - __addSublanguage(emitter, subLanguageName)\n  - startScope(scope)\n  - endScope()\n  - finalize()\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   */\n  addText(text) {\n    if (text === \"\") { return; }\n\n    this.add(text);\n  }\n\n  /** @param {string} scope */\n  startScope(scope) {\n    this.openNode(scope);\n  }\n\n  endScope() {\n    this.closeNode();\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    if (name) node.scope = `language:${name}`;\n\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    this.closeAllNodes();\n    return true;\n  }\n}\n\n/**\n * @param {string} value\n * @returns {RegExp}\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 } re\n * @returns {string}\n */\nfunction lookahead(re) {\n  return concat('(?=', re, ')');\n}\n\n/**\n * @param {RegExp | string } re\n * @returns {string}\n */\nfunction anyNumberOfTimes(re) {\n  return concat('(?:', re, ')*');\n}\n\n/**\n * @param {RegExp | string } re\n * @returns {string}\n */\nfunction optional(re) {\n  return concat('(?:', re, ')?');\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 { Array<string | RegExp | Object> } args\n * @returns {object}\n */\nfunction stripOptionsFromArgs(args) {\n  const opts = args[args.length - 1];\n\n  if (typeof opts === 'object' && opts.constructor === Object) {\n    args.splice(args.length - 1, 1);\n    return opts;\n  } else {\n    return {};\n  }\n}\n\n/** @typedef { {capture?: boolean} } RegexEitherOptions */\n\n/**\n * Any of the passed expresssions may match\n *\n * Creates a huge this | this | that | that match\n * @param {(RegExp | string)[] | [...(RegExp | string)[], RegexEitherOptions]} args\n * @returns {string}\n */\nfunction either(...args) {\n  /** @type { object & {capture?: boolean} }  */\n  const opts = stripOptionsFromArgs(args);\n  const joined = '('\n    + (opts.capture ? \"\" : \"?:\")\n    + args.map((x) => source(x)).join(\"|\") + \")\";\n  return joined;\n}\n\n/**\n * @param {RegExp | string} 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  const match = re && re.exec(lexeme);\n  return match && match.index === 0;\n}\n\n// BACKREF_RE 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 '?'.\nconst BACKREF_RE = /\\[(?:[^\\\\\\]]|\\\\.)*\\]|\\(\\??|\\\\([1-9][0-9]*)|\\\\./;\n\n// **INTERNAL** Not intended for outside usage\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 {{joinWith: string}} opts\n * @returns {string}\n */\nfunction _rewriteBackreferences(regexps, { joinWith }) {\n  let numCaptures = 0;\n\n  return regexps.map((regex) => {\n    numCaptures += 1;\n    const offset = numCaptures;\n    let re = source(regex);\n    let out = '';\n\n    while (re.length > 0) {\n      const match = BACKREF_RE.exec(re);\n      if (!match) {\n        out += re;\n        break;\n      }\n      out += 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        out += '\\\\' + String(Number(match[1]) + offset);\n      } else {\n        out += match[0];\n        if (match[0] === '(') {\n          numCaptures++;\n        }\n      }\n    }\n    return out;\n  }).map(re => `(${re})`).join(joinWith);\n}\n\n/** @typedef {import('highlight.js').Mode} Mode */\n/** @typedef {import('highlight.js').ModeCallback} ModeCallback */\n\n// Common regexps\nconst MATCH_NOTHING_RE = /\\b\\B/;\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$1({\n    scope: '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  scope: 'string',\n  begin: '\\'',\n  end: '\\'',\n  illegal: '\\\\n',\n  contains: [BACKSLASH_ESCAPE]\n};\nconst QUOTE_STRING_MODE = {\n  scope: '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  const mode = inherit$1(\n    {\n      scope: 'comment',\n      begin,\n      end,\n      contains: []\n    },\n    modeOptions\n  );\n  mode.contains.push({\n    scope: 'doctag',\n    // hack to avoid the space from being included. the space is necessary to\n    // match here to prevent the plain text rule below from gobbling up doctags\n    begin: '[ ]*(?=(TODO|FIXME|NOTE|BUG|OPTIMIZE|HACK|XXX):)',\n    end: /(TODO|FIXME|NOTE|BUG|OPTIMIZE|HACK|XXX):/,\n    excludeBegin: true,\n    relevance: 0\n  });\n  const ENGLISH_WORD = either(\n    // list of common 1 and 2 letter words in English\n    \"I\",\n    \"a\",\n    \"is\",\n    \"so\",\n    \"us\",\n    \"to\",\n    \"at\",\n    \"if\",\n    \"in\",\n    \"it\",\n    \"on\",\n    // note: this is not an exhaustive list of contractions, just popular ones\n    /[A-Za-z]+['](d|ve|re|ll|t|s|n)/, // contractions - can't we'd they're let's, etc\n    /[A-Za-z]+[-][a-z]+/, // `no-way`, etc.\n    /[A-Za-z][a-z]{2,}/ // allow capitalized words at beginning of sentences\n  );\n  // looking like plain text, more likely to be a comment\n  mode.contains.push(\n    {\n      // TODO: how to include \", (, ) without breaking grammars that use these for\n      // comment delimiters?\n      // begin: /[ ]+([()\"]?([A-Za-z'-]{3,}|is|a|I|so|us|[tT][oO]|at|if|in|it|on)[.]?[()\":]?([.][ ]|[ ]|\\))){3}/\n      // ---\n\n      // this tries to find sequences of 3 english words in a row (without any\n      // \"programming\" type syntax) this gives us a strong signal that we've\n      // TRULY found a comment - vs perhaps scanning with the wrong language.\n      // It's possible to find something that LOOKS like the start of the\n      // comment - but then if there is no readable text - good chance it is a\n      // false match and not a comment.\n      //\n      // for a visual example please see:\n      // https://github.com/highlightjs/highlight.js/issues/2827\n\n      begin: concat(\n        /[ ]+/, // necessary to prevent us gobbling up doctags like /* @author Bob Mcgill */\n        '(',\n        ENGLISH_WORD,\n        /[.]?[:]?([.][ ]|[ ])/,\n        '){3}') // look for 3 words in a row\n    }\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  scope: 'number',\n  begin: NUMBER_RE,\n  relevance: 0\n};\nconst C_NUMBER_MODE = {\n  scope: 'number',\n  begin: C_NUMBER_RE,\n  relevance: 0\n};\nconst BINARY_NUMBER_MODE = {\n  scope: 'number',\n  begin: BINARY_NUMBER_RE,\n  relevance: 0\n};\nconst REGEXP_MODE = {\n  scope: \"regexp\",\n  begin: /\\/(?=[^/\\n]*\\/)/,\n  end: /\\/[gimuy]*/,\n  contains: [\n    BACKSLASH_ESCAPE,\n    {\n      begin: /\\[/,\n      end: /\\]/,\n      relevance: 0,\n      contains: [BACKSLASH_ESCAPE]\n    }\n  ]\n};\nconst TITLE_MODE = {\n  scope: 'title',\n  begin: IDENT_RE,\n  relevance: 0\n};\nconst UNDERSCORE_TITLE_MODE = {\n  scope: '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  APOS_STRING_MODE: APOS_STRING_MODE,\n  BACKSLASH_ESCAPE: BACKSLASH_ESCAPE,\n  BINARY_NUMBER_MODE: BINARY_NUMBER_MODE,\n  BINARY_NUMBER_RE: BINARY_NUMBER_RE,\n  COMMENT: COMMENT,\n  C_BLOCK_COMMENT_MODE: C_BLOCK_COMMENT_MODE,\n  C_LINE_COMMENT_MODE: C_LINE_COMMENT_MODE,\n  C_NUMBER_MODE: C_NUMBER_MODE,\n  C_NUMBER_RE: C_NUMBER_RE,\n  END_SAME_AS_BEGIN: END_SAME_AS_BEGIN,\n  HASH_COMMENT_MODE: HASH_COMMENT_MODE,\n  IDENT_RE: IDENT_RE,\n  MATCH_NOTHING_RE: MATCH_NOTHING_RE,\n  METHOD_GUARD: METHOD_GUARD,\n  NUMBER_MODE: NUMBER_MODE,\n  NUMBER_RE: NUMBER_RE,\n  PHRASAL_WORDS_MODE: PHRASAL_WORDS_MODE,\n  QUOTE_STRING_MODE: QUOTE_STRING_MODE,\n  REGEXP_MODE: REGEXP_MODE,\n  RE_STARTERS_RE: RE_STARTERS_RE,\n  SHEBANG: SHEBANG,\n  TITLE_MODE: TITLE_MODE,\n  UNDERSCORE_IDENT_RE: UNDERSCORE_IDENT_RE,\n  UNDERSCORE_TITLE_MODE: UNDERSCORE_TITLE_MODE\n});\n\n/**\n@typedef {import('highlight.js').CallbackResponse} CallbackResponse\n@typedef {import('highlight.js').CompilerExt} CompilerExt\n*/\n\n// Grammar extensions / plugins\n// See: https://github.com/highlightjs/highlight.js/issues/2833\n\n// Grammar extensions allow \"syntactic sugar\" to be added to the grammar modes\n// without requiring any underlying changes to the compiler internals.\n\n// `compileMatch` being the perfect small example of now allowing a grammar\n// author to write `match` when they desire to match a single expression rather\n// than being forced to use `begin`.  The extension then just moves `match` into\n// `begin` when it runs.  Ie, no features have been added, but we've just made\n// the experience of writing (and reading grammars) a little bit nicer.\n\n// ------\n\n// TODO: We need negative look-behind support to do this properly\n/**\n * Skip a match if it has a preceding 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 */\nfunction skipIfHasPrecedingDot(match, response) {\n  const before = match.input[match.index - 1];\n  if (before === \".\") {\n    response.ignoreMatch();\n  }\n}\n\n/**\n *\n * @type {CompilerExt}\n */\nfunction scopeClassName(mode, _parent) {\n  // eslint-disable-next-line no-undefined\n  if (mode.className !== undefined) {\n    mode.scope = mode.className;\n    delete mode.className;\n  }\n}\n\n/**\n * `beginKeywords` syntactic sugar\n * @type {CompilerExt}\n */\nfunction beginKeywords(mode, parent) {\n  if (!parent) return;\n  if (!mode.beginKeywords) return;\n\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 = skipIfHasPrecedingDot;\n  mode.keywords = mode.keywords || mode.beginKeywords;\n  delete mode.beginKeywords;\n\n  // prevents double relevance, the keywords themselves provide\n  // relevance, the mode doesn't need to double it\n  // eslint-disable-next-line no-undefined\n  if (mode.relevance === undefined) mode.relevance = 0;\n}\n\n/**\n * Allow `illegal` to contain an array of illegal values\n * @type {CompilerExt}\n */\nfunction compileIllegal(mode, _parent) {\n  if (!Array.isArray(mode.illegal)) return;\n\n  mode.illegal = either(...mode.illegal);\n}\n\n/**\n * `match` to match a single expression for readability\n * @type {CompilerExt}\n */\nfunction compileMatch(mode, _parent) {\n  if (!mode.match) return;\n  if (mode.begin || mode.end) throw new Error(\"begin & end are not supported with match\");\n\n  mode.begin = mode.match;\n  delete mode.match;\n}\n\n/**\n * provides the default 1 relevance to all modes\n * @type {CompilerExt}\n */\nfunction compileRelevance(mode, _parent) {\n  // eslint-disable-next-line no-undefined\n  if (mode.relevance === undefined) mode.relevance = 1;\n}\n\n// allow beforeMatch to act as a \"qualifier\" for the match\n// the full match begin must be [beforeMatch][begin]\nconst beforeMatchExt = (mode, parent) => {\n  if (!mode.beforeMatch) return;\n  // starts conflicts with endsParent which we need to make sure the child\n  // rule is not matched multiple times\n  if (mode.starts) throw new Error(\"beforeMatch cannot be used with starts\");\n\n  const originalMode = Object.assign({}, mode);\n  Object.keys(mode).forEach((key) => { delete mode[key]; });\n\n  mode.keywords = originalMode.keywords;\n  mode.begin = concat(originalMode.beforeMatch, lookahead(originalMode.begin));\n  mode.starts = {\n    relevance: 0,\n    contains: [\n      Object.assign(originalMode, { endsParent: true })\n    ]\n  };\n  mode.relevance = 0;\n\n  delete originalMode.beforeMatch;\n};\n\n// keywords that should have no default relevance value\nconst COMMON_KEYWORDS = [\n  'of',\n  'and',\n  'for',\n  'in',\n  'not',\n  'or',\n  'if',\n  'then',\n  'parent', // common variable name\n  'list', // common variable name\n  'value' // common variable name\n];\n\nconst DEFAULT_KEYWORD_SCOPE = \"keyword\";\n\n/**\n * Given raw keywords from a language definition, compile them.\n *\n * @param {string | Record<string,string|string[]> | Array<string>} rawKeywords\n * @param {boolean} caseInsensitive\n */\nfunction compileKeywords(rawKeywords, caseInsensitive, scopeName = DEFAULT_KEYWORD_SCOPE) {\n  /** @type {import(\"highlight.js/private\").KeywordDict} */\n  const compiledKeywords = Object.create(null);\n\n  // input can be a string of keywords, an array of keywords, or a object with\n  // named keys representing scopeName (which can then point to a string or array)\n  if (typeof rawKeywords === 'string') {\n    compileList(scopeName, rawKeywords.split(\" \"));\n  } else if (Array.isArray(rawKeywords)) {\n    compileList(scopeName, rawKeywords);\n  } else {\n    Object.keys(rawKeywords).forEach(function(scopeName) {\n      // collapse all our objects back into the parent object\n      Object.assign(\n        compiledKeywords,\n        compileKeywords(rawKeywords[scopeName], caseInsensitive, scopeName)\n      );\n    });\n  }\n  return compiledKeywords;\n\n  // ---\n\n  /**\n   * Compiles an individual list of keywords\n   *\n   * Ex: \"for if when while|5\"\n   *\n   * @param {string} scopeName\n   * @param {Array<string>} keywordList\n   */\n  function compileList(scopeName, keywordList) {\n    if (caseInsensitive) {\n      keywordList = keywordList.map(x => x.toLowerCase());\n    }\n    keywordList.forEach(function(keyword) {\n      const pair = keyword.split('|');\n      compiledKeywords[pair[0]] = [scopeName, 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\n/*\n\nFor the reasoning behind this please see:\nhttps://github.com/highlightjs/highlight.js/issues/2880#issuecomment-747275419\n\n*/\n\n/**\n * @type {Record<string, boolean>}\n */\nconst seenDeprecations = {};\n\n/**\n * @param {string} message\n */\nconst error = (message) => {\n  console.error(message);\n};\n\n/**\n * @param {string} message\n * @param {any} args\n */\nconst warn = (message, ...args) => {\n  console.log(`WARN: ${message}`, ...args);\n};\n\n/**\n * @param {string} version\n * @param {string} message\n */\nconst deprecated = (version, message) => {\n  if (seenDeprecations[`${version}/${message}`]) return;\n\n  console.log(`Deprecated as of ${version}. ${message}`);\n  seenDeprecations[`${version}/${message}`] = true;\n};\n\n/* eslint-disable no-throw-literal */\n\n/**\n@typedef {import('highlight.js').CompiledMode} CompiledMode\n*/\n\nconst MultiClassError = new Error();\n\n/**\n * Renumbers labeled scope names to account for additional inner match\n * groups that otherwise would break everything.\n *\n * Lets say we 3 match scopes:\n *\n *   { 1 => ..., 2 => ..., 3 => ... }\n *\n * So what we need is a clean match like this:\n *\n *   (a)(b)(c) => [ \"a\", \"b\", \"c\" ]\n *\n * But this falls apart with inner match groups:\n *\n * (a)(((b)))(c) => [\"a\", \"b\", \"b\", \"b\", \"c\" ]\n *\n * Our scopes are now \"out of alignment\" and we're repeating `b` 3 times.\n * What needs to happen is the numbers are remapped:\n *\n *   { 1 => ..., 2 => ..., 5 => ... }\n *\n * We also need to know that the ONLY groups that should be output\n * are 1, 2, and 5.  This function handles this behavior.\n *\n * @param {CompiledMode} mode\n * @param {Array<RegExp | string>} regexes\n * @param {{key: \"beginScope\"|\"endScope\"}} opts\n */\nfunction remapScopeNames(mode, regexes, { key }) {\n  let offset = 0;\n  const scopeNames = mode[key];\n  /** @type Record<number,boolean> */\n  const emit = {};\n  /** @type Record<number,string> */\n  const positions = {};\n\n  for (let i = 1; i <= regexes.length; i++) {\n    positions[i + offset] = scopeNames[i];\n    emit[i + offset] = true;\n    offset += countMatchGroups(regexes[i - 1]);\n  }\n  // we use _emit to keep track of which match groups are \"top-level\" to avoid double\n  // output from inside match groups\n  mode[key] = positions;\n  mode[key]._emit = emit;\n  mode[key]._multi = true;\n}\n\n/**\n * @param {CompiledMode} mode\n */\nfunction beginMultiClass(mode) {\n  if (!Array.isArray(mode.begin)) return;\n\n  if (mode.skip || mode.excludeBegin || mode.returnBegin) {\n    error(\"skip, excludeBegin, returnBegin not compatible with beginScope: {}\");\n    throw MultiClassError;\n  }\n\n  if (typeof mode.beginScope !== \"object\" || mode.beginScope === null) {\n    error(\"beginScope must be object\");\n    throw MultiClassError;\n  }\n\n  remapScopeNames(mode, mode.begin, { key: \"beginScope\" });\n  mode.begin = _rewriteBackreferences(mode.begin, { joinWith: \"\" });\n}\n\n/**\n * @param {CompiledMode} mode\n */\nfunction endMultiClass(mode) {\n  if (!Array.isArray(mode.end)) return;\n\n  if (mode.skip || mode.excludeEnd || mode.returnEnd) {\n    error(\"skip, excludeEnd, returnEnd not compatible with endScope: {}\");\n    throw MultiClassError;\n  }\n\n  if (typeof mode.endScope !== \"object\" || mode.endScope === null) {\n    error(\"endScope must be object\");\n    throw MultiClassError;\n  }\n\n  remapScopeNames(mode, mode.end, { key: \"endScope\" });\n  mode.end = _rewriteBackreferences(mode.end, { joinWith: \"\" });\n}\n\n/**\n * this exists only to allow `scope: {}` to be used beside `match:`\n * Otherwise `beginScope` would necessary and that would look weird\n\n  {\n    match: [ /def/, /\\w+/ ]\n    scope: { 1: \"keyword\" , 2: \"title\" }\n  }\n\n * @param {CompiledMode} mode\n */\nfunction scopeSugar(mode) {\n  if (mode.scope && typeof mode.scope === \"object\" && mode.scope !== null) {\n    mode.beginScope = mode.scope;\n    delete mode.scope;\n  }\n}\n\n/**\n * @param {CompiledMode} mode\n */\nfunction MultiClass(mode) {\n  scopeSugar(mode);\n\n  if (typeof mode.beginScope === \"string\") {\n    mode.beginScope = { _wrap: mode.beginScope };\n  }\n  if (typeof mode.endScope === \"string\") {\n    mode.endScope = { _wrap: mode.endScope };\n  }\n\n  beginMultiClass(mode);\n  endMultiClass(mode);\n}\n\n/**\n@typedef {import('highlight.js').Mode} Mode\n@typedef {import('highlight.js').CompiledMode} CompiledMode\n@typedef {import('highlight.js').Language} Language\n@typedef {import('highlight.js').HLJSPlugin} HLJSPlugin\n@typedef {import('highlight.js').CompiledLanguage} CompiledLanguage\n*/\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 sensitivity 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'\n      + (language.case_insensitive ? 'i' : '')\n      + (language.unicodeRegex ? 'u' : '')\n      + (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(_rewriteBackreferences(terminators, { joinWith: '|' }), 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    resumingScanAtSamePosition() {\n      return this.regexIndex !== 0;\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      let result = m.exec(s);\n\n      // The following is because we have no easy way to say \"resume scanning at the\n      // existing position but also skip the current rule ONLY\". What happens is\n      // all prior rules are also skipped which can result in matching the wrong\n      // thing. Example of matching \"booger\":\n\n      // our matcher is [string, \"booger\", number]\n      //\n      // ....booger....\n\n      // if \"booger\" is ignored then we'd really need a regex to scan from the\n      // SAME position for only: [string, number] but ignoring \"booger\" (if it\n      // was the first match), a simple resume would scan ahead who knows how\n      // far looking only for \"number\", ignoring potential string matches (or\n      // future \"booger\" matches that might be valid.)\n\n      // So what we do: We execute two matchers, one resuming at the same\n      // position, but the second full matcher starting at the position after:\n\n      //     /--- resume first regex match here (for [number])\n      //     |/---- full match here for [string, \"booger\", number]\n      //     vv\n      // ....booger....\n\n      // Which ever results in a match first is then used. So this 3-4 step\n      // process essentially allows us to say \"match at this position, excluding\n      // a prior rule that was ignored\".\n      //\n      // 1. Match \"booger\" first, ignore. Also proves that [string] does non match.\n      // 2. Resume matching for [number]\n      // 3. Match at index + 1 for [string, \"booger\", number]\n      // 4. If #2 and #3 result in matches, which came first?\n      if (this.resumingScanAtSamePosition()) {\n        if (result && result.index === this.lastIndex) ; else { // use the second matcher result\n          const m2 = this.getMatcher(0);\n          m2.lastIndex = this.lastIndex + 1;\n          result = m2.exec(s);\n        }\n      }\n\n      if (result) {\n        this.regexIndex += result.position + 1;\n        if (this.regexIndex === this.count) {\n          // wrap-around to considering all matches again\n          this.considerAll();\n        }\n      }\n\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.terminatorEnd) {\n      mm.addRule(mode.terminatorEnd, { type: \"end\" });\n    }\n    if (mode.illegal) {\n      mm.addRule(mode.illegal, { type: \"illegal\" });\n    }\n\n    return mm;\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.isCompiled) return cmode;\n\n    [\n      scopeClassName,\n      // do this early so compiler extensions generally don't have to worry about\n      // the distinction between match/begin\n      compileMatch,\n      MultiClass,\n      beforeMatchExt\n    ].forEach(ext => ext(mode, parent));\n\n    language.compilerExtensions.forEach(ext => ext(mode, parent));\n\n    // __beforeBegin is considered private API, internal use only\n    mode.__beforeBegin = null;\n\n    [\n      beginKeywords,\n      // do this later so compiler extensions that come earlier have access to the\n      // raw array if they wanted to perhaps manipulate it, etc.\n      compileIllegal,\n      // default to 1 relevance if not specified\n      compileRelevance\n    ].forEach(ext => ext(mode, parent));\n\n    mode.isCompiled = true;\n\n    let keywordPattern = null;\n    if (typeof mode.keywords === \"object\" && mode.keywords.$pattern) {\n      // we need a copy because keywords might be compiled multiple times\n      // so we can't go deleting $pattern from the original on the first\n      // pass\n      mode.keywords = Object.assign({}, mode.keywords);\n      keywordPattern = mode.keywords.$pattern;\n      delete mode.keywords.$pattern;\n    }\n    keywordPattern = keywordPattern || /\\w+/;\n\n    if (mode.keywords) {\n      mode.keywords = compileKeywords(mode.keywords, language.case_insensitive);\n    }\n\n    cmode.keywordPatternRe = langRe(keywordPattern, true);\n\n    if (parent) {\n      if (!mode.begin) mode.begin = /\\B|\\b/;\n      cmode.beginRe = langRe(cmode.begin);\n      if (!mode.end && !mode.endsWithParent) mode.end = /\\B|\\b/;\n      if (mode.end) cmode.endRe = langRe(cmode.end);\n      cmode.terminatorEnd = source(cmode.end) || '';\n      if (mode.endsWithParent && parent.terminatorEnd) {\n        cmode.terminatorEnd += (mode.end ? '|' : '') + parent.terminatorEnd;\n      }\n    }\n    if (mode.illegal) cmode.illegalRe = langRe(/** @type {RegExp | string} */ (mode.illegal));\n    if (!mode.contains) mode.contains = [];\n\n    mode.contains = [].concat(...mode.contains.map(function(c) {\n      return expandOrCloneMode(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  if (!language.compilerExtensions) language.compilerExtensions = [];\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\n  // we need a null object, which inherit will guarantee\n  language.classNameAliases = inherit$1(language.classNameAliases || {});\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 expandOrCloneMode(mode) {\n  if (mode.variants && !mode.cachedVariants) {\n    mode.cachedVariants = mode.variants.map(function(variant) {\n      return inherit$1(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.cachedVariants) {\n    return mode.cachedVariants;\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$1(mode, { starts: mode.starts ? inherit$1(mode.starts) : null });\n  }\n\n  if (Object.isFrozen(mode)) {\n    return inherit$1(mode);\n  }\n\n  // no special dependency issues, just return ourselves\n  return mode;\n}\n\nvar version = \"11.11.1\";\n\nclass HTMLInjectionError extends Error {\n  constructor(reason, html) {\n    super(reason);\n    this.name = \"HTMLInjectionError\";\n    this.html = html;\n  }\n}\n\n/*\nSyntax highlighting with language autodetection.\nhttps://highlightjs.org/\n*/\n\n\n\n/**\n@typedef {import('highlight.js').Mode} Mode\n@typedef {import('highlight.js').CompiledMode} CompiledMode\n@typedef {import('highlight.js').CompiledScope} CompiledScope\n@typedef {import('highlight.js').Language} Language\n@typedef {import('highlight.js').HLJSApi} HLJSApi\n@typedef {import('highlight.js').HLJSPlugin} HLJSPlugin\n@typedef {import('highlight.js').PluginEvent} PluginEvent\n@typedef {import('highlight.js').HLJSOptions} HLJSOptions\n@typedef {import('highlight.js').LanguageFn} LanguageFn\n@typedef {import('highlight.js').HighlightedHTMLElement} HighlightedHTMLElement\n@typedef {import('highlight.js').BeforeHighlightContext} BeforeHighlightContext\n@typedef {import('highlight.js/private').MatchType} MatchType\n@typedef {import('highlight.js/private').KeywordData} KeywordData\n@typedef {import('highlight.js/private').EnhancedMatch} EnhancedMatch\n@typedef {import('highlight.js/private').AnnotatedError} AnnotatedError\n@typedef {import('highlight.js').AutoHighlightResult} AutoHighlightResult\n@typedef {import('highlight.js').HighlightOptions} HighlightOptions\n@typedef {import('highlight.js').HighlightResult} HighlightResult\n*/\n\n\nconst escape = escapeHTML;\nconst inherit = inherit$1;\nconst NO_MATCH = Symbol(\"nomatch\");\nconst MAX_KEYWORD_HITS = 7;\n\n/**\n * @param {any} hljs - object that is extended (legacy)\n * @returns {HLJSApi}\n */\nconst HLJS = function(hljs) {\n  // Global internal variables used within the highlight.js library.\n  /** @type {Record<string, Language>} */\n  const languages = Object.create(null);\n  /** @type {Record<string, string>} */\n  const aliases = Object.create(null);\n  /** @type {HLJSPlugin[]} */\n  const 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  let SAFE_MODE = true;\n  const 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  let options = {\n    ignoreUnescapedHTML: false,\n    throwUnescapedHTML: false,\n    noHighlightRe: /^(no-?highlight)$/i,\n    languageDetectRe: /\\blang(?:uage)?-([\\w-]+)\\b/i,\n    classPrefix: 'hljs-',\n    cssSelector: 'pre code',\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    let 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      const language = getLanguage(match[1]);\n      if (!language) {\n        warn(LANGUAGE_NOT_FOUND.replace(\"{}\", match[1]));\n        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   * OLD API\n   * highlight(lang, code, ignoreIllegals, continuation)\n   *\n   * NEW API\n   * highlight(code, {lang, ignoreIllegals})\n   *\n   * @param {string} codeOrLanguageName - the language to use for highlighting\n   * @param {string | HighlightOptions} optionsOrCode - the code to highlight\n   * @param {boolean} [ignoreIllegals] - whether to ignore illegal matches, default is to bail\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 {CompiledMode} top - top of the current mode stack\n   * @property {boolean} illegal - indicates whether any illegal matches were found\n  */\n  function highlight(codeOrLanguageName, optionsOrCode, ignoreIllegals) {\n    let code = \"\";\n    let languageName = \"\";\n    if (typeof optionsOrCode === \"object\") {\n      code = codeOrLanguageName;\n      ignoreIllegals = optionsOrCode.ignoreIllegals;\n      languageName = optionsOrCode.language;\n    } else {\n      // old API\n      deprecated(\"10.7.0\", \"highlight(lang, code, ...args) has been deprecated.\");\n      deprecated(\"10.7.0\", \"Please use highlight(code, options) instead.\\nhttps://github.com/highlightjs/highlight.js/issues/2277\");\n      languageName = codeOrLanguageName;\n      code = optionsOrCode;\n    }\n\n    // https://github.com/highlightjs/highlight.js/issues/3149\n    // eslint-disable-next-line no-undefined\n    if (ignoreIllegals === undefined) { ignoreIllegals = true; }\n\n    /** @type {BeforeHighlightContext} */\n    const 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    const result = context.result\n      ? context.result\n      : _highlight(context.language, context.code, ignoreIllegals);\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} codeToHighlight - the code to highlight\n   * @param {boolean?} [ignoreIllegals] - whether to ignore illegal matches, default is to bail\n   * @param {CompiledMode?} [continuation] - current continuation mode, if any\n   * @returns {HighlightResult} - result of the highlight operation\n  */\n  function _highlight(languageName, codeToHighlight, ignoreIllegals, continuation) {\n    const keywordHits = Object.create(null);\n\n    /**\n     * Return keyword data if a match is a keyword\n     * @param {CompiledMode} mode - current mode\n     * @param {string} matchText - the textual match\n     * @returns {KeywordData | false}\n     */\n    function keywordData(mode, matchText) {\n      return mode.keywords[matchText];\n    }\n\n    function processKeywords() {\n      if (!top.keywords) {\n        emitter.addText(modeBuffer);\n        return;\n      }\n\n      let lastIndex = 0;\n      top.keywordPatternRe.lastIndex = 0;\n      let match = top.keywordPatternRe.exec(modeBuffer);\n      let buf = \"\";\n\n      while (match) {\n        buf += modeBuffer.substring(lastIndex, match.index);\n        const word = language.case_insensitive ? match[0].toLowerCase() : match[0];\n        const data = keywordData(top, word);\n        if (data) {\n          const [kind, keywordRelevance] = data;\n          emitter.addText(buf);\n          buf = \"\";\n\n          keywordHits[word] = (keywordHits[word] || 0) + 1;\n          if (keywordHits[word] <= MAX_KEYWORD_HITS) relevance += keywordRelevance;\n          if (kind.startsWith(\"_\")) {\n            // _ implied for relevance only, do not highlight\n            // by applying a class name\n            buf += match[0];\n          } else {\n            const cssClass = language.classNameAliases[kind] || kind;\n            emitKeyword(match[0], cssClass);\n          }\n        } else {\n          buf += match[0];\n        }\n        lastIndex = top.keywordPatternRe.lastIndex;\n        match = top.keywordPatternRe.exec(modeBuffer);\n      }\n      buf += modeBuffer.substring(lastIndex);\n      emitter.addText(buf);\n    }\n\n    function processSubLanguage() {\n      if (modeBuffer === \"\") return;\n      /** @type HighlightResult */\n      let result = null;\n\n      if (typeof top.subLanguage === 'string') {\n        if (!languages[top.subLanguage]) {\n          emitter.addText(modeBuffer);\n          return;\n        }\n        result = _highlight(top.subLanguage, modeBuffer, true, continuations[top.subLanguage]);\n        continuations[top.subLanguage] = /** @type {CompiledMode} */ (result._top);\n      } else {\n        result = highlightAuto(modeBuffer, 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      modeBuffer = '';\n    }\n\n    /**\n     * @param {string} text\n     * @param {string} scope\n     */\n    function emitKeyword(keyword, scope) {\n      if (keyword === \"\") return;\n\n      emitter.startScope(scope);\n      emitter.addText(keyword);\n      emitter.endScope();\n    }\n\n    /**\n     * @param {CompiledScope} scope\n     * @param {RegExpMatchArray} match\n     */\n    function emitMultiClass(scope, match) {\n      let i = 1;\n      const max = match.length - 1;\n      while (i <= max) {\n        if (!scope._emit[i]) { i++; continue; }\n        const klass = language.classNameAliases[scope[i]] || scope[i];\n        const text = match[i];\n        if (klass) {\n          emitKeyword(text, klass);\n        } else {\n          modeBuffer = text;\n          processKeywords();\n          modeBuffer = \"\";\n        }\n        i++;\n      }\n    }\n\n    /**\n     * @param {CompiledMode} mode - new mode to start\n     * @param {RegExpMatchArray} match\n     */\n    function startNewMode(mode, match) {\n      if (mode.scope && typeof mode.scope === \"string\") {\n        emitter.openNode(language.classNameAliases[mode.scope] || mode.scope);\n      }\n      if (mode.beginScope) {\n        // beginScope just wraps the begin match itself in a scope\n        if (mode.beginScope._wrap) {\n          emitKeyword(modeBuffer, language.classNameAliases[mode.beginScope._wrap] || mode.beginScope._wrap);\n          modeBuffer = \"\";\n        } else if (mode.beginScope._multi) {\n          // at this point modeBuffer should just be the match\n          emitMultiClass(mode.beginScope, match);\n          modeBuffer = \"\";\n        }\n      }\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.isMatchIgnored) 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 regexes to potentially match here, so we move the cursor forward one\n        // space\n        modeBuffer += 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        resumeScanAtSamePosition = 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      const lexeme = match[0];\n      const newMode = match.rule;\n\n      const resp = new Response(newMode);\n      // first internal before callbacks, then the public ones\n      const beforeCallbacks = [newMode.__beforeBegin, newMode[\"on:begin\"]];\n      for (const cb of beforeCallbacks) {\n        if (!cb) continue;\n        cb(match, resp);\n        if (resp.isMatchIgnored) return doIgnore(lexeme);\n      }\n\n      if (newMode.skip) {\n        modeBuffer += lexeme;\n      } else {\n        if (newMode.excludeBegin) {\n          modeBuffer += lexeme;\n        }\n        processBuffer();\n        if (!newMode.returnBegin && !newMode.excludeBegin) {\n          modeBuffer = lexeme;\n        }\n      }\n      startNewMode(newMode, match);\n      return newMode.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      const lexeme = match[0];\n      const matchPlusRemainder = codeToHighlight.substring(match.index);\n\n      const endMode = endOfMode(top, match, matchPlusRemainder);\n      if (!endMode) { return NO_MATCH; }\n\n      const origin = top;\n      if (top.endScope && top.endScope._wrap) {\n        processBuffer();\n        emitKeyword(lexeme, top.endScope._wrap);\n      } else if (top.endScope && top.endScope._multi) {\n        processBuffer();\n        emitMultiClass(top.endScope, match);\n      } else if (origin.skip) {\n        modeBuffer += lexeme;\n      } else {\n        if (!(origin.returnEnd || origin.excludeEnd)) {\n          modeBuffer += lexeme;\n        }\n        processBuffer();\n        if (origin.excludeEnd) {\n          modeBuffer = lexeme;\n        }\n      }\n      do {\n        if (top.scope) {\n          emitter.closeNode();\n        }\n        if (!top.skip && !top.subLanguage) {\n          relevance += top.relevance;\n        }\n        top = top.parent;\n      } while (top !== endMode.parent);\n      if (endMode.starts) {\n        startNewMode(endMode.starts, match);\n      }\n      return origin.returnEnd ? 0 : lexeme.length;\n    }\n\n    function processContinuations() {\n      const list = [];\n      for (let current = top; current !== language; current = current.parent) {\n        if (current.scope) {\n          list.unshift(current.scope);\n        }\n      }\n      list.forEach(item => emitter.openNode(item));\n    }\n\n    /** @type {{type?: MatchType, index?: number, rule?: Mode}}} */\n    let lastMatch = {};\n\n    /**\n     *  Process an individual match\n     *\n     * @param {string} textBeforeMatch - text preceding the match (since the last match)\n     * @param {EnhancedMatch} [match] - the match itself\n     */\n    function processLexeme(textBeforeMatch, match) {\n      const lexeme = match && match[0];\n\n      // add non-matched text to the current mode buffer\n      modeBuffer += 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        modeBuffer += codeToHighlight.slice(match.index, match.index + 1);\n        if (!SAFE_MODE) {\n          /** @type {AnnotatedError} */\n          const err = new Error(`0 width match regex (${languageName})`);\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.scope || '<unnamed>') + '\"');\n        err.mode = top;\n        throw err;\n      } else if (match.type === \"end\") {\n        const 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        modeBuffer += \"\\n\";\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?  An potential end match that was\n      triggered but could not be completed.  IE, `doEndMatch` returned NO_MATCH.\n      (this could be because a callback requests the match be ignored, etc)\n\n      This causes no real harm other than stopping a few times too many.\n      */\n\n      modeBuffer += lexeme;\n      return lexeme.length;\n    }\n\n    const language = getLanguage(languageName);\n    if (!language) {\n      error(LANGUAGE_NOT_FOUND.replace(\"{}\", languageName));\n      throw new Error('Unknown language: \"' + languageName + '\"');\n    }\n\n    const md = compileLanguage(language);\n    let result = '';\n    /** @type {CompiledMode} */\n    let top = continuation || md;\n    /** @type Record<string,CompiledMode> */\n    const continuations = {}; // keep continuations for sub-languages\n    const emitter = new options.__emitter(options);\n    processContinuations();\n    let modeBuffer = '';\n    let relevance = 0;\n    let index = 0;\n    let iterations = 0;\n    let resumeScanAtSamePosition = false;\n\n    try {\n      if (!language.__emitTokens) {\n        top.matcher.considerAll();\n\n        for (;;) {\n          iterations++;\n          if (resumeScanAtSamePosition) {\n            // only regexes not matched previously will now be\n            // considered for a potential match\n            resumeScanAtSamePosition = false;\n          } else {\n            top.matcher.considerAll();\n          }\n          top.matcher.lastIndex = index;\n\n          const match = top.matcher.exec(codeToHighlight);\n          // console.log(\"match\", match[0], match.rule && match.rule.begin)\n\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.substring(index));\n      } else {\n        language.__emitTokens(codeToHighlight, emitter);\n      }\n\n      emitter.finalize();\n      result = emitter.toHTML();\n\n      return {\n        language: languageName,\n        value: result,\n        relevance,\n        illegal: false,\n        _emitter: emitter,\n        _top: top\n      };\n    } catch (err) {\n      if (err.message && err.message.includes('Illegal')) {\n        return {\n          language: languageName,\n          value: escape(codeToHighlight),\n          illegal: true,\n          relevance: 0,\n          _illegalBy: {\n            message: err.message,\n            index,\n            context: codeToHighlight.slice(index - 100, index + 100),\n            mode: err.mode,\n            resultSoFar: result\n          },\n          _emitter: emitter\n        };\n      } else if (SAFE_MODE) {\n        return {\n          language: languageName,\n          value: escape(codeToHighlight),\n          illegal: false,\n          relevance: 0,\n          errorRaised: err,\n          _emitter: emitter,\n          _top: top\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      value: escape(code),\n      illegal: false,\n      relevance: 0,\n      _top: PLAINTEXT_LANGUAGE,\n      _emitter: new options.__emitter(options)\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  - secondBest (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    const plaintext = justTextHighlightResult(code);\n\n    const results = languageSubset.filter(getLanguage).filter(autoDetection).map(name =>\n      _highlight(name, code, false)\n    );\n    results.unshift(plaintext); // plaintext is always an option\n\n    const sorted = results.sort((a, b) => {\n      // sort base on relevance\n      if (a.relevance !== b.relevance) return b.relevance - a.relevance;\n\n      // always award the tie to the base language\n      // ie if C++ and Arduino are tied, it's more likely to be C++\n      if (a.language && b.language) {\n        if (getLanguage(a.language).supersetOf === b.language) {\n          return 1;\n        } else if (getLanguage(b.language).supersetOf === a.language) {\n          return -1;\n        }\n      }\n\n      // otherwise say they are equal, which has the effect of sorting on\n      // relevance while preserving the original ordering - which is how ties\n      // have historically been settled, ie the language that comes first always\n      // wins in the case of a tie\n      return 0;\n    });\n\n    const [best, secondBest] = sorted;\n\n    /** @type {AutoHighlightResult} */\n    const result = best;\n    result.secondBest = secondBest;\n\n    return result;\n  }\n\n  /**\n   * Builds new class name for block given the language name\n   *\n   * @param {HTMLElement} element\n   * @param {string} [currentLang]\n   * @param {string} [resultLang]\n   */\n  function updateClassName(element, currentLang, resultLang) {\n    const language = (currentLang && aliases[currentLang]) || resultLang;\n\n    element.classList.add(\"hljs\");\n    element.classList.add(`language-${language}`);\n  }\n\n  /**\n   * Applies highlighting to a DOM node containing code.\n   *\n   * @param {HighlightedHTMLElement} element - the HTML element to highlight\n  */\n  function highlightElement(element) {\n    /** @type HTMLElement */\n    let node = null;\n    const language = blockLanguage(element);\n\n    if (shouldNotHighlight(language)) return;\n\n    fire(\"before:highlightElement\",\n      { el: element, language });\n\n    if (element.dataset.highlighted) {\n      console.log(\"Element previously highlighted. To highlight again, first unset `dataset.highlighted`.\", element);\n      return;\n    }\n\n    // we should be all text, no child nodes (unescaped HTML) - this is possibly\n    // an HTML injection attack - it's likely too late if this is already in\n    // production (the code has likely already done its damage by the time\n    // we're seeing it)... but we yell loudly about this so that hopefully it's\n    // more likely to be caught in development before making it to production\n    if (element.children.length > 0) {\n      if (!options.ignoreUnescapedHTML) {\n        console.warn(\"One of your code blocks includes unescaped HTML. This is a potentially serious security risk.\");\n        console.warn(\"https://github.com/highlightjs/highlight.js/wiki/security\");\n        console.warn(\"The element with unescaped HTML:\");\n        console.warn(element);\n      }\n      if (options.throwUnescapedHTML) {\n        const err = new HTMLInjectionError(\n          \"One of your code blocks includes unescaped HTML.\",\n          element.innerHTML\n        );\n        throw err;\n      }\n    }\n\n    node = element;\n    const text = node.textContent;\n    const result = language ? highlight(text, { language, ignoreIllegals: true }) : highlightAuto(text);\n\n    element.innerHTML = result.value;\n    element.dataset.highlighted = \"yes\";\n    updateClassName(element, language, result.language);\n    element.result = {\n      language: result.language,\n      // TODO: remove with version 11.0\n      re: result.relevance,\n      relevance: result.relevance\n    };\n    if (result.secondBest) {\n      element.secondBest = {\n        language: result.secondBest.language,\n        relevance: result.secondBest.relevance\n      };\n    }\n\n    fire(\"after:highlightElement\", { el: element, result, text });\n  }\n\n  /**\n   * Updates highlight.js global options with the passed options\n   *\n   * @param {Partial<HLJSOptions>} userOptions\n   */\n  function configure(userOptions) {\n    options = inherit(options, userOptions);\n  }\n\n  // TODO: remove v12, deprecated\n  const initHighlighting = () => {\n    highlightAll();\n    deprecated(\"10.6.0\", \"initHighlighting() deprecated.  Use highlightAll() now.\");\n  };\n\n  // TODO: remove v12, deprecated\n  function initHighlightingOnLoad() {\n    highlightAll();\n    deprecated(\"10.6.0\", \"initHighlightingOnLoad() deprecated.  Use highlightAll() now.\");\n  }\n\n  let wantsHighlight = false;\n\n  /**\n   * auto-highlights all pre>code elements on the page\n   */\n  function highlightAll() {\n    function boot() {\n      // if a highlight was requested before DOM was loaded, do now\n      highlightAll();\n    }\n\n    // if we are called too early in the loading process\n    if (document.readyState === \"loading\") {\n      // make sure the event listener is only added once\n      if (!wantsHighlight) {\n        window.addEventListener('DOMContentLoaded', boot, false);\n      }\n      wantsHighlight = true;\n      return;\n    }\n\n    const blocks = document.querySelectorAll(options.cssSelector);\n    blocks.forEach(highlightElement);\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    let lang = null;\n    try {\n      lang = languageDefinition(hljs);\n    } catch (error$1) {\n      error(\"Language definition for '{}' could not be registered.\".replace(\"{}\", languageName));\n      // hard or soft error\n      if (!SAFE_MODE) { throw error$1; } else { error(error$1); }\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   * Remove a language grammar module\n   *\n   * @param {string} languageName\n   */\n  function unregisterLanguage(languageName) {\n    delete languages[languageName];\n    for (const alias of Object.keys(aliases)) {\n      if (aliases[alias] === languageName) {\n        delete aliases[alias];\n      }\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   * @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.toLowerCase()] = 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    const lang = getLanguage(name);\n    return lang && !lang.disableAutodetect;\n  }\n\n  /**\n   * Upgrades the old highlightBlock plugins to the new\n   * highlightElement API\n   * @param {HLJSPlugin} plugin\n   */\n  function upgradePluginAPI(plugin) {\n    // TODO: remove with v12\n    if (plugin[\"before:highlightBlock\"] && !plugin[\"before:highlightElement\"]) {\n      plugin[\"before:highlightElement\"] = (data) => {\n        plugin[\"before:highlightBlock\"](\n          Object.assign({ block: data.el }, data)\n        );\n      };\n    }\n    if (plugin[\"after:highlightBlock\"] && !plugin[\"after:highlightElement\"]) {\n      plugin[\"after:highlightElement\"] = (data) => {\n        plugin[\"after:highlightBlock\"](\n          Object.assign({ block: data.el }, data)\n        );\n      };\n    }\n  }\n\n  /**\n   * @param {HLJSPlugin} plugin\n   */\n  function addPlugin(plugin) {\n    upgradePluginAPI(plugin);\n    plugins.push(plugin);\n  }\n\n  /**\n   * @param {HLJSPlugin} plugin\n   */\n  function removePlugin(plugin) {\n    const index = plugins.indexOf(plugin);\n    if (index !== -1) {\n      plugins.splice(index, 1);\n    }\n  }\n\n  /**\n   *\n   * @param {PluginEvent} event\n   * @param {any} args\n   */\n  function fire(event, args) {\n    const cb = event;\n    plugins.forEach(function(plugin) {\n      if (plugin[cb]) {\n        plugin[cb](args);\n      }\n    });\n  }\n\n  /**\n   * DEPRECATED\n   * @param {HighlightedHTMLElement} el\n   */\n  function deprecateHighlightBlock(el) {\n    deprecated(\"10.7.0\", \"highlightBlock will be removed entirely in v12.0\");\n    deprecated(\"10.7.0\", \"Please use highlightElement now.\");\n\n    return highlightElement(el);\n  }\n\n  /* Interface definition */\n  Object.assign(hljs, {\n    highlight,\n    highlightAuto,\n    highlightAll,\n    highlightElement,\n    // TODO: Remove with v12 API\n    highlightBlock: deprecateHighlightBlock,\n    configure,\n    initHighlighting,\n    initHighlightingOnLoad,\n    registerLanguage,\n    unregisterLanguage,\n    listLanguages,\n    getLanguage,\n    registerAliases,\n    autoDetection,\n    inherit,\n    addPlugin,\n    removePlugin\n  });\n\n  hljs.debugMode = function() { SAFE_MODE = false; };\n  hljs.safeMode = function() { SAFE_MODE = true; };\n  hljs.versionString = version;\n\n  hljs.regex = {\n    concat: concat,\n    lookahead: lookahead,\n    either: either,\n    optional: optional,\n    anyNumberOfTimes: anyNumberOfTimes\n  };\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/regexes into our main object\n  Object.assign(hljs, MODES);\n\n  return hljs;\n};\n\n// Other names for the variable may break build script\nconst highlight = HLJS({});\n\n// returns a new instance of the highlighter to be used for extensions\n// check https://github.com/wooorm/lowlight/issues/47\nhighlight.newInstance = () => HLJS({});\n\nmodule.exports = highlight;\nhighlight.HighlightJS = highlight;\nhighlight.default = highlight;\n","const IDENT_RE = '[A-Za-z$_][0-9A-Za-z$_]*';\nconst KEYWORDS = [\n  \"as\", // for exports\n  \"in\",\n  \"of\",\n  \"if\",\n  \"for\",\n  \"while\",\n  \"finally\",\n  \"var\",\n  \"new\",\n  \"function\",\n  \"do\",\n  \"return\",\n  \"void\",\n  \"else\",\n  \"break\",\n  \"catch\",\n  \"instanceof\",\n  \"with\",\n  \"throw\",\n  \"case\",\n  \"default\",\n  \"try\",\n  \"switch\",\n  \"continue\",\n  \"typeof\",\n  \"delete\",\n  \"let\",\n  \"yield\",\n  \"const\",\n  \"class\",\n  // JS handles these with a special rule\n  // \"get\",\n  // \"set\",\n  \"debugger\",\n  \"async\",\n  \"await\",\n  \"static\",\n  \"import\",\n  \"from\",\n  \"export\",\n  \"extends\",\n  // It's reached stage 3, which is \"recommended for implementation\":\n  \"using\"\n];\nconst LITERALS = [\n  \"true\",\n  \"false\",\n  \"null\",\n  \"undefined\",\n  \"NaN\",\n  \"Infinity\"\n];\n\n// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects\nconst TYPES = [\n  // Fundamental objects\n  \"Object\",\n  \"Function\",\n  \"Boolean\",\n  \"Symbol\",\n  // numbers and dates\n  \"Math\",\n  \"Date\",\n  \"Number\",\n  \"BigInt\",\n  // text\n  \"String\",\n  \"RegExp\",\n  // Indexed collections\n  \"Array\",\n  \"Float32Array\",\n  \"Float64Array\",\n  \"Int8Array\",\n  \"Uint8Array\",\n  \"Uint8ClampedArray\",\n  \"Int16Array\",\n  \"Int32Array\",\n  \"Uint16Array\",\n  \"Uint32Array\",\n  \"BigInt64Array\",\n  \"BigUint64Array\",\n  // Keyed collections\n  \"Set\",\n  \"Map\",\n  \"WeakSet\",\n  \"WeakMap\",\n  // Structured data\n  \"ArrayBuffer\",\n  \"SharedArrayBuffer\",\n  \"Atomics\",\n  \"DataView\",\n  \"JSON\",\n  // Control abstraction objects\n  \"Promise\",\n  \"Generator\",\n  \"GeneratorFunction\",\n  \"AsyncFunction\",\n  // Reflection\n  \"Reflect\",\n  \"Proxy\",\n  // Internationalization\n  \"Intl\",\n  // WebAssembly\n  \"WebAssembly\"\n];\n\nconst ERROR_TYPES = [\n  \"Error\",\n  \"EvalError\",\n  \"InternalError\",\n  \"RangeError\",\n  \"ReferenceError\",\n  \"SyntaxError\",\n  \"TypeError\",\n  \"URIError\"\n];\n\nconst BUILT_IN_GLOBALS = [\n  \"setInterval\",\n  \"setTimeout\",\n  \"clearInterval\",\n  \"clearTimeout\",\n\n  \"require\",\n  \"exports\",\n\n  \"eval\",\n  \"isFinite\",\n  \"isNaN\",\n  \"parseFloat\",\n  \"parseInt\",\n  \"decodeURI\",\n  \"decodeURIComponent\",\n  \"encodeURI\",\n  \"encodeURIComponent\",\n  \"escape\",\n  \"unescape\"\n];\n\nconst BUILT_IN_VARIABLES = [\n  \"arguments\",\n  \"this\",\n  \"super\",\n  \"console\",\n  \"window\",\n  \"document\",\n  \"localStorage\",\n  \"sessionStorage\",\n  \"module\",\n  \"global\" // Node.js\n];\n\nconst BUILT_INS = [].concat(\n  BUILT_IN_GLOBALS,\n  TYPES,\n  ERROR_TYPES\n);\n\n/*\nLanguage: JavaScript\nDescription: JavaScript (JS) is a lightweight, interpreted, or just-in-time compiled programming language with first-class functions.\nCategory: common, scripting, web\nWebsite: https://developer.mozilla.org/en-US/docs/Web/JavaScript\n*/\n\n\n/** @type LanguageFn */\nfunction javascript(hljs) {\n  const regex = hljs.regex;\n  /**\n   * Takes a string like \"<Booger\" and checks to see\n   * if we can find a matching \"</Booger\" later in the\n   * content.\n   * @param {RegExpMatchArray} match\n   * @param {{after:number}} param1\n   */\n  const hasClosingTag = (match, { after }) => {\n    const tag = \"</\" + match[0].slice(1);\n    const pos = match.input.indexOf(tag, after);\n    return pos !== -1;\n  };\n\n  const IDENT_RE$1 = IDENT_RE;\n  const FRAGMENT = {\n    begin: '<>',\n    end: '</>'\n  };\n  // to avoid some special cases inside isTrulyOpeningTag\n  const XML_SELF_CLOSING = /<[A-Za-z0-9\\\\._:-]+\\s*\\/>/;\n  const XML_TAG = {\n    begin: /<[A-Za-z0-9\\\\._:-]+/,\n    end: /\\/[A-Za-z0-9\\\\._:-]+>|\\/>/,\n    /**\n     * @param {RegExpMatchArray} match\n     * @param {CallbackResponse} response\n     */\n    isTrulyOpeningTag: (match, response) => {\n      const afterMatchIndex = match[0].length + match.index;\n      const nextChar = match.input[afterMatchIndex];\n      if (\n        // HTML should not include another raw `<` inside a tag\n        // nested type?\n        // `<Array<Array<number>>`, etc.\n        nextChar === \"<\" ||\n        // the , gives away that this is not HTML\n        // `<T, A extends keyof T, V>`\n        nextChar === \",\"\n        ) {\n        response.ignoreMatch();\n        return;\n      }\n\n      // `<something>`\n      // Quite possibly a tag, lets look for a matching closing tag...\n      if (nextChar === \">\") {\n        // if we cannot find a matching closing tag, then we\n        // will ignore it\n        if (!hasClosingTag(match, { after: afterMatchIndex })) {\n          response.ignoreMatch();\n        }\n      }\n\n      // `<blah />` (self-closing)\n      // handled by simpleSelfClosing rule\n\n      let m;\n      const afterMatch = match.input.substring(afterMatchIndex);\n\n      // some more template typing stuff\n      //  <T = any>(key?: string) => Modify<\n      if ((m = afterMatch.match(/^\\s*=/))) {\n        response.ignoreMatch();\n        return;\n      }\n\n      // `<From extends string>`\n      // technically this could be HTML, but it smells like a type\n      // NOTE: This is ugh, but added specifically for https://github.com/highlightjs/highlight.js/issues/3276\n      if ((m = afterMatch.match(/^\\s+extends\\s+/))) {\n        if (m.index === 0) {\n          response.ignoreMatch();\n          // eslint-disable-next-line no-useless-return\n          return;\n        }\n      }\n    }\n  };\n  const KEYWORDS$1 = {\n    $pattern: IDENT_RE,\n    keyword: KEYWORDS,\n    literal: LITERALS,\n    built_in: BUILT_INS,\n    \"variable.language\": BUILT_IN_VARIABLES\n  };\n\n  // https://tc39.es/ecma262/#sec-literals-numeric-literals\n  const decimalDigits = '[0-9](_?[0-9])*';\n  const frac = `\\\\.(${decimalDigits})`;\n  // DecimalIntegerLiteral, including Annex B NonOctalDecimalIntegerLiteral\n  // https://tc39.es/ecma262/#sec-additional-syntax-numeric-literals\n  const decimalInteger = `0|[1-9](_?[0-9])*|0[0-7]*[89][0-9]*`;\n  const NUMBER = {\n    className: 'number',\n    variants: [\n      // DecimalLiteral\n      { begin: `(\\\\b(${decimalInteger})((${frac})|\\\\.)?|(${frac}))` +\n        `[eE][+-]?(${decimalDigits})\\\\b` },\n      { begin: `\\\\b(${decimalInteger})\\\\b((${frac})\\\\b|\\\\.)?|(${frac})\\\\b` },\n\n      // DecimalBigIntegerLiteral\n      { begin: `\\\\b(0|[1-9](_?[0-9])*)n\\\\b` },\n\n      // NonDecimalIntegerLiteral\n      { begin: \"\\\\b0[xX][0-9a-fA-F](_?[0-9a-fA-F])*n?\\\\b\" },\n      { begin: \"\\\\b0[bB][0-1](_?[0-1])*n?\\\\b\" },\n      { begin: \"\\\\b0[oO][0-7](_?[0-7])*n?\\\\b\" },\n\n      // LegacyOctalIntegerLiteral (does not include underscore separators)\n      // https://tc39.es/ecma262/#sec-additional-syntax-numeric-literals\n      { begin: \"\\\\b0[0-7]+n?\\\\b\" },\n    ],\n    relevance: 0\n  };\n\n  const SUBST = {\n    className: 'subst',\n    begin: '\\\\$\\\\{',\n    end: '\\\\}',\n    keywords: KEYWORDS$1,\n    contains: [] // defined later\n  };\n  const HTML_TEMPLATE = {\n    begin: '\\.?html`',\n    end: '',\n    starts: {\n      end: '`',\n      returnEnd: false,\n      contains: [\n        hljs.BACKSLASH_ESCAPE,\n        SUBST\n      ],\n      subLanguage: 'xml'\n    }\n  };\n  const CSS_TEMPLATE = {\n    begin: '\\.?css`',\n    end: '',\n    starts: {\n      end: '`',\n      returnEnd: false,\n      contains: [\n        hljs.BACKSLASH_ESCAPE,\n        SUBST\n      ],\n      subLanguage: 'css'\n    }\n  };\n  const GRAPHQL_TEMPLATE = {\n    begin: '\\.?gql`',\n    end: '',\n    starts: {\n      end: '`',\n      returnEnd: false,\n      contains: [\n        hljs.BACKSLASH_ESCAPE,\n        SUBST\n      ],\n      subLanguage: 'graphql'\n    }\n  };\n  const TEMPLATE_STRING = {\n    className: 'string',\n    begin: '`',\n    end: '`',\n    contains: [\n      hljs.BACKSLASH_ESCAPE,\n      SUBST\n    ]\n  };\n  const JSDOC_COMMENT = hljs.COMMENT(\n    /\\/\\*\\*(?!\\/)/,\n    '\\\\*/',\n    {\n      relevance: 0,\n      contains: [\n        {\n          begin: '(?=@[A-Za-z]+)',\n          relevance: 0,\n          contains: [\n            {\n              className: 'doctag',\n              begin: '@[A-Za-z]+'\n            },\n            {\n              className: 'type',\n              begin: '\\\\{',\n              end: '\\\\}',\n              excludeEnd: true,\n              excludeBegin: true,\n              relevance: 0\n            },\n            {\n              className: 'variable',\n              begin: IDENT_RE$1 + '(?=\\\\s*(-)|$)',\n              endsParent: true,\n              relevance: 0\n            },\n            // eat spaces (not newlines) so we can find\n            // types or variables\n            {\n              begin: /(?=[^\\n])\\s/,\n              relevance: 0\n            }\n          ]\n        }\n      ]\n    }\n  );\n  const COMMENT = {\n    className: \"comment\",\n    variants: [\n      JSDOC_COMMENT,\n      hljs.C_BLOCK_COMMENT_MODE,\n      hljs.C_LINE_COMMENT_MODE\n    ]\n  };\n  const SUBST_INTERNALS = [\n    hljs.APOS_STRING_MODE,\n    hljs.QUOTE_STRING_MODE,\n    HTML_TEMPLATE,\n    CSS_TEMPLATE,\n    GRAPHQL_TEMPLATE,\n    TEMPLATE_STRING,\n    // Skip numbers when they are part of a variable name\n    { match: /\\$\\d+/ },\n    NUMBER,\n    // This is intentional:\n    // See https://github.com/highlightjs/highlight.js/issues/3288\n    // hljs.REGEXP_MODE\n  ];\n  SUBST.contains = SUBST_INTERNALS\n    .concat({\n      // we need to pair up {} inside our subst to prevent\n      // it from ending too early by matching another }\n      begin: /\\{/,\n      end: /\\}/,\n      keywords: KEYWORDS$1,\n      contains: [\n        \"self\"\n      ].concat(SUBST_INTERNALS)\n    });\n  const SUBST_AND_COMMENTS = [].concat(COMMENT, SUBST.contains);\n  const PARAMS_CONTAINS = SUBST_AND_COMMENTS.concat([\n    // eat recursive parens in sub expressions\n    {\n      begin: /(\\s*)\\(/,\n      end: /\\)/,\n      keywords: KEYWORDS$1,\n      contains: [\"self\"].concat(SUBST_AND_COMMENTS)\n    }\n  ]);\n  const PARAMS = {\n    className: 'params',\n    // convert this to negative lookbehind in v12\n    begin: /(\\s*)\\(/, // to match the parms with\n    end: /\\)/,\n    excludeBegin: true,\n    excludeEnd: true,\n    keywords: KEYWORDS$1,\n    contains: PARAMS_CONTAINS\n  };\n\n  // ES6 classes\n  const CLASS_OR_EXTENDS = {\n    variants: [\n      // class Car extends vehicle\n      {\n        match: [\n          /class/,\n          /\\s+/,\n          IDENT_RE$1,\n          /\\s+/,\n          /extends/,\n          /\\s+/,\n          regex.concat(IDENT_RE$1, \"(\", regex.concat(/\\./, IDENT_RE$1), \")*\")\n        ],\n        scope: {\n          1: \"keyword\",\n          3: \"title.class\",\n          5: \"keyword\",\n          7: \"title.class.inherited\"\n        }\n      },\n      // class Car\n      {\n        match: [\n          /class/,\n          /\\s+/,\n          IDENT_RE$1\n        ],\n        scope: {\n          1: \"keyword\",\n          3: \"title.class\"\n        }\n      },\n\n    ]\n  };\n\n  const CLASS_REFERENCE = {\n    relevance: 0,\n    match:\n    regex.either(\n      // Hard coded exceptions\n      /\\bJSON/,\n      // Float32Array, OutT\n      /\\b[A-Z][a-z]+([A-Z][a-z]*|\\d)*/,\n      // CSSFactory, CSSFactoryT\n      /\\b[A-Z]{2,}([A-Z][a-z]+|\\d)+([A-Z][a-z]*)*/,\n      // FPs, FPsT\n      /\\b[A-Z]{2,}[a-z]+([A-Z][a-z]+|\\d)*([A-Z][a-z]*)*/,\n      // P\n      // single letters are not highlighted\n      // BLAH\n      // this will be flagged as a UPPER_CASE_CONSTANT instead\n    ),\n    className: \"title.class\",\n    keywords: {\n      _: [\n        // se we still get relevance credit for JS library classes\n        ...TYPES,\n        ...ERROR_TYPES\n      ]\n    }\n  };\n\n  const USE_STRICT = {\n    label: \"use_strict\",\n    className: 'meta',\n    relevance: 10,\n    begin: /^\\s*['\"]use (strict|asm)['\"]/\n  };\n\n  const FUNCTION_DEFINITION = {\n    variants: [\n      {\n        match: [\n          /function/,\n          /\\s+/,\n          IDENT_RE$1,\n          /(?=\\s*\\()/\n        ]\n      },\n      // anonymous function\n      {\n        match: [\n          /function/,\n          /\\s*(?=\\()/\n        ]\n      }\n    ],\n    className: {\n      1: \"keyword\",\n      3: \"title.function\"\n    },\n    label: \"func.def\",\n    contains: [ PARAMS ],\n    illegal: /%/\n  };\n\n  const UPPER_CASE_CONSTANT = {\n    relevance: 0,\n    match: /\\b[A-Z][A-Z_0-9]+\\b/,\n    className: \"variable.constant\"\n  };\n\n  function noneOf(list) {\n    return regex.concat(\"(?!\", list.join(\"|\"), \")\");\n  }\n\n  const FUNCTION_CALL = {\n    match: regex.concat(\n      /\\b/,\n      noneOf([\n        ...BUILT_IN_GLOBALS,\n        \"super\",\n        \"import\"\n      ].map(x => `${x}\\\\s*\\\\(`)),\n      IDENT_RE$1, regex.lookahead(/\\s*\\(/)),\n    className: \"title.function\",\n    relevance: 0\n  };\n\n  const PROPERTY_ACCESS = {\n    begin: regex.concat(/\\./, regex.lookahead(\n      regex.concat(IDENT_RE$1, /(?![0-9A-Za-z$_(])/)\n    )),\n    end: IDENT_RE$1,\n    excludeBegin: true,\n    keywords: \"prototype\",\n    className: \"property\",\n    relevance: 0\n  };\n\n  const GETTER_OR_SETTER = {\n    match: [\n      /get|set/,\n      /\\s+/,\n      IDENT_RE$1,\n      /(?=\\()/\n    ],\n    className: {\n      1: \"keyword\",\n      3: \"title.function\"\n    },\n    contains: [\n      { // eat to avoid empty params\n        begin: /\\(\\)/\n      },\n      PARAMS\n    ]\n  };\n\n  const FUNC_LEAD_IN_RE = '(\\\\(' +\n    '[^()]*(\\\\(' +\n    '[^()]*(\\\\(' +\n    '[^()]*' +\n    '\\\\)[^()]*)*' +\n    '\\\\)[^()]*)*' +\n    '\\\\)|' + hljs.UNDERSCORE_IDENT_RE + ')\\\\s*=>';\n\n  const FUNCTION_VARIABLE = {\n    match: [\n      /const|var|let/, /\\s+/,\n      IDENT_RE$1, /\\s*/,\n      /=\\s*/,\n      /(async\\s*)?/, // async is optional\n      regex.lookahead(FUNC_LEAD_IN_RE)\n    ],\n    keywords: \"async\",\n    className: {\n      1: \"keyword\",\n      3: \"title.function\"\n    },\n    contains: [\n      PARAMS\n    ]\n  };\n\n  return {\n    name: 'JavaScript',\n    aliases: ['js', 'jsx', 'mjs', 'cjs'],\n    keywords: KEYWORDS$1,\n    // this will be extended by TypeScript\n    exports: { PARAMS_CONTAINS, CLASS_REFERENCE },\n    illegal: /#(?![$_A-z])/,\n    contains: [\n      hljs.SHEBANG({\n        label: \"shebang\",\n        binary: \"node\",\n        relevance: 5\n      }),\n      USE_STRICT,\n      hljs.APOS_STRING_MODE,\n      hljs.QUOTE_STRING_MODE,\n      HTML_TEMPLATE,\n      CSS_TEMPLATE,\n      GRAPHQL_TEMPLATE,\n      TEMPLATE_STRING,\n      COMMENT,\n      // Skip numbers when they are part of a variable name\n      { match: /\\$\\d+/ },\n      NUMBER,\n      CLASS_REFERENCE,\n      {\n        scope: 'attr',\n        match: IDENT_RE$1 + regex.lookahead(':'),\n        relevance: 0\n      },\n      FUNCTION_VARIABLE,\n      { // \"value\" container\n        begin: '(' + hljs.RE_STARTERS_RE + '|\\\\b(case|return|throw)\\\\b)\\\\s*',\n        keywords: 'return throw case',\n        relevance: 0,\n        contains: [\n          COMMENT,\n          hljs.REGEXP_MODE,\n          {\n            className: 'function',\n            // we have to count the parens to make sure we actually have the\n            // correct bounding ( ) before the =>.  There could be any number of\n            // sub-expressions inside also surrounded by parens.\n            begin: FUNC_LEAD_IN_RE,\n            returnBegin: true,\n            end: '\\\\s*=>',\n            contains: [\n              {\n                className: 'params',\n                variants: [\n                  {\n                    begin: hljs.UNDERSCORE_IDENT_RE,\n                    relevance: 0\n                  },\n                  {\n                    className: null,\n                    begin: /\\(\\s*\\)/,\n                    skip: true\n                  },\n                  {\n                    begin: /(\\s*)\\(/,\n                    end: /\\)/,\n                    excludeBegin: true,\n                    excludeEnd: true,\n                    keywords: KEYWORDS$1,\n                    contains: PARAMS_CONTAINS\n                  }\n                ]\n              }\n            ]\n          },\n          { // could be a comma delimited list of params to a function call\n            begin: /,/,\n            relevance: 0\n          },\n          {\n            match: /\\s+/,\n            relevance: 0\n          },\n          { // JSX\n            variants: [\n              { begin: FRAGMENT.begin, end: FRAGMENT.end },\n              { match: XML_SELF_CLOSING },\n              {\n                begin: XML_TAG.begin,\n                // we carefully check the opening tag to see if it truly\n                // is a tag and not a false positive\n                'on:begin': XML_TAG.isTrulyOpeningTag,\n                end: XML_TAG.end\n              }\n            ],\n            subLanguage: 'xml',\n            contains: [\n              {\n                begin: XML_TAG.begin,\n                end: XML_TAG.end,\n                skip: true,\n                contains: ['self']\n              }\n            ]\n          }\n        ],\n      },\n      FUNCTION_DEFINITION,\n      {\n        // prevent this from getting swallowed up by function\n        // since they appear \"function like\"\n        beginKeywords: \"while if switch catch for\"\n      },\n      {\n        // we have to count the parens to make sure we actually have the correct\n        // bounding ( ).  There could be any number of sub-expressions inside\n        // also surrounded by parens.\n        begin: '\\\\b(?!function)' + hljs.UNDERSCORE_IDENT_RE +\n          '\\\\(' + // first parens\n          '[^()]*(\\\\(' +\n            '[^()]*(\\\\(' +\n              '[^()]*' +\n            '\\\\)[^()]*)*' +\n          '\\\\)[^()]*)*' +\n          '\\\\)\\\\s*\\\\{', // end parens\n        returnBegin:true,\n        label: \"func.def\",\n        contains: [\n          PARAMS,\n          hljs.inherit(hljs.TITLE_MODE, { begin: IDENT_RE$1, className: \"title.function\" })\n        ]\n      },\n      // catch ... so it won't trigger the property rule below\n      {\n        match: /\\.\\.\\./,\n        relevance: 0\n      },\n      PROPERTY_ACCESS,\n      // hack: prevents detection of keywords in some circumstances\n      // .keyword()\n      // $keyword = x\n      {\n        match: '\\\\$' + IDENT_RE$1,\n        relevance: 0\n      },\n      {\n        match: [ /\\bconstructor(?=\\s*\\()/ ],\n        className: { 1: \"title.function\" },\n        contains: [ PARAMS ]\n      },\n      FUNCTION_CALL,\n      UPPER_CASE_CONSTANT,\n      CLASS_OR_EXTENDS,\n      GETTER_OR_SETTER,\n      {\n        match: /\\$[(.]/ // relevance booster for a pattern common to JS libs: `$(something)` and `$.something`\n      }\n    ]\n  };\n}\n\nexport { javascript as default };\n","const IDENT_RE = '[A-Za-z$_][0-9A-Za-z$_]*';\nconst KEYWORDS = [\n  \"as\", // for exports\n  \"in\",\n  \"of\",\n  \"if\",\n  \"for\",\n  \"while\",\n  \"finally\",\n  \"var\",\n  \"new\",\n  \"function\",\n  \"do\",\n  \"return\",\n  \"void\",\n  \"else\",\n  \"break\",\n  \"catch\",\n  \"instanceof\",\n  \"with\",\n  \"throw\",\n  \"case\",\n  \"default\",\n  \"try\",\n  \"switch\",\n  \"continue\",\n  \"typeof\",\n  \"delete\",\n  \"let\",\n  \"yield\",\n  \"const\",\n  \"class\",\n  // JS handles these with a special rule\n  // \"get\",\n  // \"set\",\n  \"debugger\",\n  \"async\",\n  \"await\",\n  \"static\",\n  \"import\",\n  \"from\",\n  \"export\",\n  \"extends\",\n  // It's reached stage 3, which is \"recommended for implementation\":\n  \"using\"\n];\nconst LITERALS = [\n  \"true\",\n  \"false\",\n  \"null\",\n  \"undefined\",\n  \"NaN\",\n  \"Infinity\"\n];\n\n// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects\nconst TYPES = [\n  // Fundamental objects\n  \"Object\",\n  \"Function\",\n  \"Boolean\",\n  \"Symbol\",\n  // numbers and dates\n  \"Math\",\n  \"Date\",\n  \"Number\",\n  \"BigInt\",\n  // text\n  \"String\",\n  \"RegExp\",\n  // Indexed collections\n  \"Array\",\n  \"Float32Array\",\n  \"Float64Array\",\n  \"Int8Array\",\n  \"Uint8Array\",\n  \"Uint8ClampedArray\",\n  \"Int16Array\",\n  \"Int32Array\",\n  \"Uint16Array\",\n  \"Uint32Array\",\n  \"BigInt64Array\",\n  \"BigUint64Array\",\n  // Keyed collections\n  \"Set\",\n  \"Map\",\n  \"WeakSet\",\n  \"WeakMap\",\n  // Structured data\n  \"ArrayBuffer\",\n  \"SharedArrayBuffer\",\n  \"Atomics\",\n  \"DataView\",\n  \"JSON\",\n  // Control abstraction objects\n  \"Promise\",\n  \"Generator\",\n  \"GeneratorFunction\",\n  \"AsyncFunction\",\n  // Reflection\n  \"Reflect\",\n  \"Proxy\",\n  // Internationalization\n  \"Intl\",\n  // WebAssembly\n  \"WebAssembly\"\n];\n\nconst ERROR_TYPES = [\n  \"Error\",\n  \"EvalError\",\n  \"InternalError\",\n  \"RangeError\",\n  \"ReferenceError\",\n  \"SyntaxError\",\n  \"TypeError\",\n  \"URIError\"\n];\n\nconst BUILT_IN_GLOBALS = [\n  \"setInterval\",\n  \"setTimeout\",\n  \"clearInterval\",\n  \"clearTimeout\",\n\n  \"require\",\n  \"exports\",\n\n  \"eval\",\n  \"isFinite\",\n  \"isNaN\",\n  \"parseFloat\",\n  \"parseInt\",\n  \"decodeURI\",\n  \"decodeURIComponent\",\n  \"encodeURI\",\n  \"encodeURIComponent\",\n  \"escape\",\n  \"unescape\"\n];\n\nconst BUILT_IN_VARIABLES = [\n  \"arguments\",\n  \"this\",\n  \"super\",\n  \"console\",\n  \"window\",\n  \"document\",\n  \"localStorage\",\n  \"sessionStorage\",\n  \"module\",\n  \"global\" // Node.js\n];\n\nconst BUILT_INS = [].concat(\n  BUILT_IN_GLOBALS,\n  TYPES,\n  ERROR_TYPES\n);\n\n/*\nLanguage: JavaScript\nDescription: JavaScript (JS) is a lightweight, interpreted, or just-in-time compiled programming language with first-class functions.\nCategory: common, scripting, web\nWebsite: https://developer.mozilla.org/en-US/docs/Web/JavaScript\n*/\n\n\n/** @type LanguageFn */\nfunction javascript(hljs) {\n  const regex = hljs.regex;\n  /**\n   * Takes a string like \"<Booger\" and checks to see\n   * if we can find a matching \"</Booger\" later in the\n   * content.\n   * @param {RegExpMatchArray} match\n   * @param {{after:number}} param1\n   */\n  const hasClosingTag = (match, { after }) => {\n    const tag = \"</\" + match[0].slice(1);\n    const pos = match.input.indexOf(tag, after);\n    return pos !== -1;\n  };\n\n  const IDENT_RE$1 = IDENT_RE;\n  const FRAGMENT = {\n    begin: '<>',\n    end: '</>'\n  };\n  // to avoid some special cases inside isTrulyOpeningTag\n  const XML_SELF_CLOSING = /<[A-Za-z0-9\\\\._:-]+\\s*\\/>/;\n  const XML_TAG = {\n    begin: /<[A-Za-z0-9\\\\._:-]+/,\n    end: /\\/[A-Za-z0-9\\\\._:-]+>|\\/>/,\n    /**\n     * @param {RegExpMatchArray} match\n     * @param {CallbackResponse} response\n     */\n    isTrulyOpeningTag: (match, response) => {\n      const afterMatchIndex = match[0].length + match.index;\n      const nextChar = match.input[afterMatchIndex];\n      if (\n        // HTML should not include another raw `<` inside a tag\n        // nested type?\n        // `<Array<Array<number>>`, etc.\n        nextChar === \"<\" ||\n        // the , gives away that this is not HTML\n        // `<T, A extends keyof T, V>`\n        nextChar === \",\"\n        ) {\n        response.ignoreMatch();\n        return;\n      }\n\n      // `<something>`\n      // Quite possibly a tag, lets look for a matching closing tag...\n      if (nextChar === \">\") {\n        // if we cannot find a matching closing tag, then we\n        // will ignore it\n        if (!hasClosingTag(match, { after: afterMatchIndex })) {\n          response.ignoreMatch();\n        }\n      }\n\n      // `<blah />` (self-closing)\n      // handled by simpleSelfClosing rule\n\n      let m;\n      const afterMatch = match.input.substring(afterMatchIndex);\n\n      // some more template typing stuff\n      //  <T = any>(key?: string) => Modify<\n      if ((m = afterMatch.match(/^\\s*=/))) {\n        response.ignoreMatch();\n        return;\n      }\n\n      // `<From extends string>`\n      // technically this could be HTML, but it smells like a type\n      // NOTE: This is ugh, but added specifically for https://github.com/highlightjs/highlight.js/issues/3276\n      if ((m = afterMatch.match(/^\\s+extends\\s+/))) {\n        if (m.index === 0) {\n          response.ignoreMatch();\n          // eslint-disable-next-line no-useless-return\n          return;\n        }\n      }\n    }\n  };\n  const KEYWORDS$1 = {\n    $pattern: IDENT_RE,\n    keyword: KEYWORDS,\n    literal: LITERALS,\n    built_in: BUILT_INS,\n    \"variable.language\": BUILT_IN_VARIABLES\n  };\n\n  // https://tc39.es/ecma262/#sec-literals-numeric-literals\n  const decimalDigits = '[0-9](_?[0-9])*';\n  const frac = `\\\\.(${decimalDigits})`;\n  // DecimalIntegerLiteral, including Annex B NonOctalDecimalIntegerLiteral\n  // https://tc39.es/ecma262/#sec-additional-syntax-numeric-literals\n  const decimalInteger = `0|[1-9](_?[0-9])*|0[0-7]*[89][0-9]*`;\n  const NUMBER = {\n    className: 'number',\n    variants: [\n      // DecimalLiteral\n      { begin: `(\\\\b(${decimalInteger})((${frac})|\\\\.)?|(${frac}))` +\n        `[eE][+-]?(${decimalDigits})\\\\b` },\n      { begin: `\\\\b(${decimalInteger})\\\\b((${frac})\\\\b|\\\\.)?|(${frac})\\\\b` },\n\n      // DecimalBigIntegerLiteral\n      { begin: `\\\\b(0|[1-9](_?[0-9])*)n\\\\b` },\n\n      // NonDecimalIntegerLiteral\n      { begin: \"\\\\b0[xX][0-9a-fA-F](_?[0-9a-fA-F])*n?\\\\b\" },\n      { begin: \"\\\\b0[bB][0-1](_?[0-1])*n?\\\\b\" },\n      { begin: \"\\\\b0[oO][0-7](_?[0-7])*n?\\\\b\" },\n\n      // LegacyOctalIntegerLiteral (does not include underscore separators)\n      // https://tc39.es/ecma262/#sec-additional-syntax-numeric-literals\n      { begin: \"\\\\b0[0-7]+n?\\\\b\" },\n    ],\n    relevance: 0\n  };\n\n  const SUBST = {\n    className: 'subst',\n    begin: '\\\\$\\\\{',\n    end: '\\\\}',\n    keywords: KEYWORDS$1,\n    contains: [] // defined later\n  };\n  const HTML_TEMPLATE = {\n    begin: '\\.?html`',\n    end: '',\n    starts: {\n      end: '`',\n      returnEnd: false,\n      contains: [\n        hljs.BACKSLASH_ESCAPE,\n        SUBST\n      ],\n      subLanguage: 'xml'\n    }\n  };\n  const CSS_TEMPLATE = {\n    begin: '\\.?css`',\n    end: '',\n    starts: {\n      end: '`',\n      returnEnd: false,\n      contains: [\n        hljs.BACKSLASH_ESCAPE,\n        SUBST\n      ],\n      subLanguage: 'css'\n    }\n  };\n  const GRAPHQL_TEMPLATE = {\n    begin: '\\.?gql`',\n    end: '',\n    starts: {\n      end: '`',\n      returnEnd: false,\n      contains: [\n        hljs.BACKSLASH_ESCAPE,\n        SUBST\n      ],\n      subLanguage: 'graphql'\n    }\n  };\n  const TEMPLATE_STRING = {\n    className: 'string',\n    begin: '`',\n    end: '`',\n    contains: [\n      hljs.BACKSLASH_ESCAPE,\n      SUBST\n    ]\n  };\n  const JSDOC_COMMENT = hljs.COMMENT(\n    /\\/\\*\\*(?!\\/)/,\n    '\\\\*/',\n    {\n      relevance: 0,\n      contains: [\n        {\n          begin: '(?=@[A-Za-z]+)',\n          relevance: 0,\n          contains: [\n            {\n              className: 'doctag',\n              begin: '@[A-Za-z]+'\n            },\n            {\n              className: 'type',\n              begin: '\\\\{',\n              end: '\\\\}',\n              excludeEnd: true,\n              excludeBegin: true,\n              relevance: 0\n            },\n            {\n              className: 'variable',\n              begin: IDENT_RE$1 + '(?=\\\\s*(-)|$)',\n              endsParent: true,\n              relevance: 0\n            },\n            // eat spaces (not newlines) so we can find\n            // types or variables\n            {\n              begin: /(?=[^\\n])\\s/,\n              relevance: 0\n            }\n          ]\n        }\n      ]\n    }\n  );\n  const COMMENT = {\n    className: \"comment\",\n    variants: [\n      JSDOC_COMMENT,\n      hljs.C_BLOCK_COMMENT_MODE,\n      hljs.C_LINE_COMMENT_MODE\n    ]\n  };\n  const SUBST_INTERNALS = [\n    hljs.APOS_STRING_MODE,\n    hljs.QUOTE_STRING_MODE,\n    HTML_TEMPLATE,\n    CSS_TEMPLATE,\n    GRAPHQL_TEMPLATE,\n    TEMPLATE_STRING,\n    // Skip numbers when they are part of a variable name\n    { match: /\\$\\d+/ },\n    NUMBER,\n    // This is intentional:\n    // See https://github.com/highlightjs/highlight.js/issues/3288\n    // hljs.REGEXP_MODE\n  ];\n  SUBST.contains = SUBST_INTERNALS\n    .concat({\n      // we need to pair up {} inside our subst to prevent\n      // it from ending too early by matching another }\n      begin: /\\{/,\n      end: /\\}/,\n      keywords: KEYWORDS$1,\n      contains: [\n        \"self\"\n      ].concat(SUBST_INTERNALS)\n    });\n  const SUBST_AND_COMMENTS = [].concat(COMMENT, SUBST.contains);\n  const PARAMS_CONTAINS = SUBST_AND_COMMENTS.concat([\n    // eat recursive parens in sub expressions\n    {\n      begin: /(\\s*)\\(/,\n      end: /\\)/,\n      keywords: KEYWORDS$1,\n      contains: [\"self\"].concat(SUBST_AND_COMMENTS)\n    }\n  ]);\n  const PARAMS = {\n    className: 'params',\n    // convert this to negative lookbehind in v12\n    begin: /(\\s*)\\(/, // to match the parms with\n    end: /\\)/,\n    excludeBegin: true,\n    excludeEnd: true,\n    keywords: KEYWORDS$1,\n    contains: PARAMS_CONTAINS\n  };\n\n  // ES6 classes\n  const CLASS_OR_EXTENDS = {\n    variants: [\n      // class Car extends vehicle\n      {\n        match: [\n          /class/,\n          /\\s+/,\n          IDENT_RE$1,\n          /\\s+/,\n          /extends/,\n          /\\s+/,\n          regex.concat(IDENT_RE$1, \"(\", regex.concat(/\\./, IDENT_RE$1), \")*\")\n        ],\n        scope: {\n          1: \"keyword\",\n          3: \"title.class\",\n          5: \"keyword\",\n          7: \"title.class.inherited\"\n        }\n      },\n      // class Car\n      {\n        match: [\n          /class/,\n          /\\s+/,\n          IDENT_RE$1\n        ],\n        scope: {\n          1: \"keyword\",\n          3: \"title.class\"\n        }\n      },\n\n    ]\n  };\n\n  const CLASS_REFERENCE = {\n    relevance: 0,\n    match:\n    regex.either(\n      // Hard coded exceptions\n      /\\bJSON/,\n      // Float32Array, OutT\n      /\\b[A-Z][a-z]+([A-Z][a-z]*|\\d)*/,\n      // CSSFactory, CSSFactoryT\n      /\\b[A-Z]{2,}([A-Z][a-z]+|\\d)+([A-Z][a-z]*)*/,\n      // FPs, FPsT\n      /\\b[A-Z]{2,}[a-z]+([A-Z][a-z]+|\\d)*([A-Z][a-z]*)*/,\n      // P\n      // single letters are not highlighted\n      // BLAH\n      // this will be flagged as a UPPER_CASE_CONSTANT instead\n    ),\n    className: \"title.class\",\n    keywords: {\n      _: [\n        // se we still get relevance credit for JS library classes\n        ...TYPES,\n        ...ERROR_TYPES\n      ]\n    }\n  };\n\n  const USE_STRICT = {\n    label: \"use_strict\",\n    className: 'meta',\n    relevance: 10,\n    begin: /^\\s*['\"]use (strict|asm)['\"]/\n  };\n\n  const FUNCTION_DEFINITION = {\n    variants: [\n      {\n        match: [\n          /function/,\n          /\\s+/,\n          IDENT_RE$1,\n          /(?=\\s*\\()/\n        ]\n      },\n      // anonymous function\n      {\n        match: [\n          /function/,\n          /\\s*(?=\\()/\n        ]\n      }\n    ],\n    className: {\n      1: \"keyword\",\n      3: \"title.function\"\n    },\n    label: \"func.def\",\n    contains: [ PARAMS ],\n    illegal: /%/\n  };\n\n  const UPPER_CASE_CONSTANT = {\n    relevance: 0,\n    match: /\\b[A-Z][A-Z_0-9]+\\b/,\n    className: \"variable.constant\"\n  };\n\n  function noneOf(list) {\n    return regex.concat(\"(?!\", list.join(\"|\"), \")\");\n  }\n\n  const FUNCTION_CALL = {\n    match: regex.concat(\n      /\\b/,\n      noneOf([\n        ...BUILT_IN_GLOBALS,\n        \"super\",\n        \"import\"\n      ].map(x => `${x}\\\\s*\\\\(`)),\n      IDENT_RE$1, regex.lookahead(/\\s*\\(/)),\n    className: \"title.function\",\n    relevance: 0\n  };\n\n  const PROPERTY_ACCESS = {\n    begin: regex.concat(/\\./, regex.lookahead(\n      regex.concat(IDENT_RE$1, /(?![0-9A-Za-z$_(])/)\n    )),\n    end: IDENT_RE$1,\n    excludeBegin: true,\n    keywords: \"prototype\",\n    className: \"property\",\n    relevance: 0\n  };\n\n  const GETTER_OR_SETTER = {\n    match: [\n      /get|set/,\n      /\\s+/,\n      IDENT_RE$1,\n      /(?=\\()/\n    ],\n    className: {\n      1: \"keyword\",\n      3: \"title.function\"\n    },\n    contains: [\n      { // eat to avoid empty params\n        begin: /\\(\\)/\n      },\n      PARAMS\n    ]\n  };\n\n  const FUNC_LEAD_IN_RE = '(\\\\(' +\n    '[^()]*(\\\\(' +\n    '[^()]*(\\\\(' +\n    '[^()]*' +\n    '\\\\)[^()]*)*' +\n    '\\\\)[^()]*)*' +\n    '\\\\)|' + hljs.UNDERSCORE_IDENT_RE + ')\\\\s*=>';\n\n  const FUNCTION_VARIABLE = {\n    match: [\n      /const|var|let/, /\\s+/,\n      IDENT_RE$1, /\\s*/,\n      /=\\s*/,\n      /(async\\s*)?/, // async is optional\n      regex.lookahead(FUNC_LEAD_IN_RE)\n    ],\n    keywords: \"async\",\n    className: {\n      1: \"keyword\",\n      3: \"title.function\"\n    },\n    contains: [\n      PARAMS\n    ]\n  };\n\n  return {\n    name: 'JavaScript',\n    aliases: ['js', 'jsx', 'mjs', 'cjs'],\n    keywords: KEYWORDS$1,\n    // this will be extended by TypeScript\n    exports: { PARAMS_CONTAINS, CLASS_REFERENCE },\n    illegal: /#(?![$_A-z])/,\n    contains: [\n      hljs.SHEBANG({\n        label: \"shebang\",\n        binary: \"node\",\n        relevance: 5\n      }),\n      USE_STRICT,\n      hljs.APOS_STRING_MODE,\n      hljs.QUOTE_STRING_MODE,\n      HTML_TEMPLATE,\n      CSS_TEMPLATE,\n      GRAPHQL_TEMPLATE,\n      TEMPLATE_STRING,\n      COMMENT,\n      // Skip numbers when they are part of a variable name\n      { match: /\\$\\d+/ },\n      NUMBER,\n      CLASS_REFERENCE,\n      {\n        scope: 'attr',\n        match: IDENT_RE$1 + regex.lookahead(':'),\n        relevance: 0\n      },\n      FUNCTION_VARIABLE,\n      { // \"value\" container\n        begin: '(' + hljs.RE_STARTERS_RE + '|\\\\b(case|return|throw)\\\\b)\\\\s*',\n        keywords: 'return throw case',\n        relevance: 0,\n        contains: [\n          COMMENT,\n          hljs.REGEXP_MODE,\n          {\n            className: 'function',\n            // we have to count the parens to make sure we actually have the\n            // correct bounding ( ) before the =>.  There could be any number of\n            // sub-expressions inside also surrounded by parens.\n            begin: FUNC_LEAD_IN_RE,\n            returnBegin: true,\n            end: '\\\\s*=>',\n            contains: [\n              {\n                className: 'params',\n                variants: [\n                  {\n                    begin: hljs.UNDERSCORE_IDENT_RE,\n                    relevance: 0\n                  },\n                  {\n                    className: null,\n                    begin: /\\(\\s*\\)/,\n                    skip: true\n                  },\n                  {\n                    begin: /(\\s*)\\(/,\n                    end: /\\)/,\n                    excludeBegin: true,\n                    excludeEnd: true,\n                    keywords: KEYWORDS$1,\n                    contains: PARAMS_CONTAINS\n                  }\n                ]\n              }\n            ]\n          },\n          { // could be a comma delimited list of params to a function call\n            begin: /,/,\n            relevance: 0\n          },\n          {\n            match: /\\s+/,\n            relevance: 0\n          },\n          { // JSX\n            variants: [\n              { begin: FRAGMENT.begin, end: FRAGMENT.end },\n              { match: XML_SELF_CLOSING },\n              {\n                begin: XML_TAG.begin,\n                // we carefully check the opening tag to see if it truly\n                // is a tag and not a false positive\n                'on:begin': XML_TAG.isTrulyOpeningTag,\n                end: XML_TAG.end\n              }\n            ],\n            subLanguage: 'xml',\n            contains: [\n              {\n                begin: XML_TAG.begin,\n                end: XML_TAG.end,\n                skip: true,\n                contains: ['self']\n              }\n            ]\n          }\n        ],\n      },\n      FUNCTION_DEFINITION,\n      {\n        // prevent this from getting swallowed up by function\n        // since they appear \"function like\"\n        beginKeywords: \"while if switch catch for\"\n      },\n      {\n        // we have to count the parens to make sure we actually have the correct\n        // bounding ( ).  There could be any number of sub-expressions inside\n        // also surrounded by parens.\n        begin: '\\\\b(?!function)' + hljs.UNDERSCORE_IDENT_RE +\n          '\\\\(' + // first parens\n          '[^()]*(\\\\(' +\n            '[^()]*(\\\\(' +\n              '[^()]*' +\n            '\\\\)[^()]*)*' +\n          '\\\\)[^()]*)*' +\n          '\\\\)\\\\s*\\\\{', // end parens\n        returnBegin:true,\n        label: \"func.def\",\n        contains: [\n          PARAMS,\n          hljs.inherit(hljs.TITLE_MODE, { begin: IDENT_RE$1, className: \"title.function\" })\n        ]\n      },\n      // catch ... so it won't trigger the property rule below\n      {\n        match: /\\.\\.\\./,\n        relevance: 0\n      },\n      PROPERTY_ACCESS,\n      // hack: prevents detection of keywords in some circumstances\n      // .keyword()\n      // $keyword = x\n      {\n        match: '\\\\$' + IDENT_RE$1,\n        relevance: 0\n      },\n      {\n        match: [ /\\bconstructor(?=\\s*\\()/ ],\n        className: { 1: \"title.function\" },\n        contains: [ PARAMS ]\n      },\n      FUNCTION_CALL,\n      UPPER_CASE_CONSTANT,\n      CLASS_OR_EXTENDS,\n      GETTER_OR_SETTER,\n      {\n        match: /\\$[(.]/ // relevance booster for a pattern common to JS libs: `$(something)` and `$.something`\n      }\n    ]\n  };\n}\n\n/*\nLanguage: TypeScript\nAuthor: Panu Horsmalahti <panu.horsmalahti@iki.fi>\nContributors: Ike Ku <dempfi@yahoo.com>\nDescription: TypeScript is a strict superset of JavaScript\nWebsite: https://www.typescriptlang.org\nCategory: common, scripting\n*/\n\n\n/** @type LanguageFn */\nfunction typescript(hljs) {\n  const regex = hljs.regex;\n  const tsLanguage = javascript(hljs);\n\n  const IDENT_RE$1 = IDENT_RE;\n  const TYPES = [\n    \"any\",\n    \"void\",\n    \"number\",\n    \"boolean\",\n    \"string\",\n    \"object\",\n    \"never\",\n    \"symbol\",\n    \"bigint\",\n    \"unknown\"\n  ];\n  const NAMESPACE = {\n    begin: [\n      /namespace/,\n      /\\s+/,\n      hljs.IDENT_RE\n    ],\n    beginScope: {\n      1: \"keyword\",\n      3: \"title.class\"\n    }\n  };\n  const INTERFACE = {\n    beginKeywords: 'interface',\n    end: /\\{/,\n    excludeEnd: true,\n    keywords: {\n      keyword: 'interface extends',\n      built_in: TYPES\n    },\n    contains: [ tsLanguage.exports.CLASS_REFERENCE ]\n  };\n  const USE_STRICT = {\n    className: 'meta',\n    relevance: 10,\n    begin: /^\\s*['\"]use strict['\"]/\n  };\n  const TS_SPECIFIC_KEYWORDS = [\n    \"type\",\n    // \"namespace\",\n    \"interface\",\n    \"public\",\n    \"private\",\n    \"protected\",\n    \"implements\",\n    \"declare\",\n    \"abstract\",\n    \"readonly\",\n    \"enum\",\n    \"override\",\n    \"satisfies\"\n  ];\n  /*\n    namespace is a TS keyword but it's fine to use it as a variable name too.\n    const message = 'foo';\n    const namespace = 'bar';\n  */\n  const KEYWORDS$1 = {\n    $pattern: IDENT_RE,\n    keyword: KEYWORDS.concat(TS_SPECIFIC_KEYWORDS),\n    literal: LITERALS,\n    built_in: BUILT_INS.concat(TYPES),\n    \"variable.language\": BUILT_IN_VARIABLES\n  };\n\n  const DECORATOR = {\n    className: 'meta',\n    begin: '@' + IDENT_RE$1,\n  };\n\n  const swapMode = (mode, label, replacement) => {\n    const indx = mode.contains.findIndex(m => m.label === label);\n    if (indx === -1) { throw new Error(\"can not find mode to replace\"); }\n\n    mode.contains.splice(indx, 1, replacement);\n  };\n\n\n  // this should update anywhere keywords is used since\n  // it will be the same actual JS object\n  Object.assign(tsLanguage.keywords, KEYWORDS$1);\n\n  tsLanguage.exports.PARAMS_CONTAINS.push(DECORATOR);\n\n  // highlight the function params\n  const ATTRIBUTE_HIGHLIGHT = tsLanguage.contains.find(c => c.scope === \"attr\");\n\n  // take default attr rule and extend it to support optionals\n  const OPTIONAL_KEY_OR_ARGUMENT = Object.assign({},\n    ATTRIBUTE_HIGHLIGHT,\n    { match: regex.concat(IDENT_RE$1, regex.lookahead(/\\s*\\?:/)) }\n  );\n  tsLanguage.exports.PARAMS_CONTAINS.push([\n    tsLanguage.exports.CLASS_REFERENCE, // class reference for highlighting the params types\n    ATTRIBUTE_HIGHLIGHT, // highlight the params key\n    OPTIONAL_KEY_OR_ARGUMENT, // Added for optional property assignment highlighting\n  ]);\n\n  // Add the optional property assignment highlighting for objects or classes\n  tsLanguage.contains = tsLanguage.contains.concat([\n    DECORATOR,\n    NAMESPACE,\n    INTERFACE,\n    OPTIONAL_KEY_OR_ARGUMENT, // Added for optional property assignment highlighting\n  ]);\n\n  // TS gets a simpler shebang rule than JS\n  swapMode(tsLanguage, \"shebang\", hljs.SHEBANG());\n  // JS use strict rule purposely excludes `asm` which makes no sense\n  swapMode(tsLanguage, \"use_strict\", USE_STRICT);\n\n  const functionDeclaration = tsLanguage.contains.find(m => m.label === \"func.def\");\n  functionDeclaration.relevance = 0; // () => {} is more typical in TypeScript\n\n  Object.assign(tsLanguage, {\n    name: 'TypeScript',\n    aliases: [\n      'ts',\n      'tsx',\n      'mts',\n      'cts'\n    ]\n  });\n\n  return tsLanguage;\n}\n\nexport { typescript as default };\n","/*\nLanguage: Python\nDescription: Python is an interpreted, object-oriented, high-level programming language with dynamic semantics.\nWebsite: https://www.python.org\nCategory: common\n*/\n\nfunction python(hljs) {\n  const regex = hljs.regex;\n  const IDENT_RE = /[\\p{XID_Start}_]\\p{XID_Continue}*/u;\n  const RESERVED_WORDS = [\n    'and',\n    'as',\n    'assert',\n    'async',\n    'await',\n    'break',\n    'case',\n    'class',\n    'continue',\n    'def',\n    'del',\n    'elif',\n    'else',\n    'except',\n    'finally',\n    'for',\n    'from',\n    'global',\n    'if',\n    'import',\n    'in',\n    'is',\n    'lambda',\n    'match',\n    'nonlocal|10',\n    'not',\n    'or',\n    'pass',\n    'raise',\n    'return',\n    'try',\n    'while',\n    'with',\n    'yield'\n  ];\n\n  const BUILT_INS = [\n    '__import__',\n    'abs',\n    'all',\n    'any',\n    'ascii',\n    'bin',\n    'bool',\n    'breakpoint',\n    'bytearray',\n    'bytes',\n    'callable',\n    'chr',\n    'classmethod',\n    'compile',\n    'complex',\n    'delattr',\n    'dict',\n    'dir',\n    'divmod',\n    'enumerate',\n    'eval',\n    'exec',\n    'filter',\n    'float',\n    'format',\n    'frozenset',\n    'getattr',\n    'globals',\n    'hasattr',\n    'hash',\n    'help',\n    'hex',\n    'id',\n    'input',\n    'int',\n    'isinstance',\n    'issubclass',\n    'iter',\n    'len',\n    'list',\n    'locals',\n    'map',\n    'max',\n    'memoryview',\n    'min',\n    'next',\n    'object',\n    'oct',\n    'open',\n    'ord',\n    'pow',\n    'print',\n    'property',\n    'range',\n    'repr',\n    'reversed',\n    'round',\n    'set',\n    'setattr',\n    'slice',\n    'sorted',\n    'staticmethod',\n    'str',\n    'sum',\n    'super',\n    'tuple',\n    'type',\n    'vars',\n    'zip'\n  ];\n\n  const LITERALS = [\n    '__debug__',\n    'Ellipsis',\n    'False',\n    'None',\n    'NotImplemented',\n    'True'\n  ];\n\n  // https://docs.python.org/3/library/typing.html\n  // TODO: Could these be supplemented by a CamelCase matcher in certain\n  // contexts, leaving these remaining only for relevance hinting?\n  const TYPES = [\n    \"Any\",\n    \"Callable\",\n    \"Coroutine\",\n    \"Dict\",\n    \"List\",\n    \"Literal\",\n    \"Generic\",\n    \"Optional\",\n    \"Sequence\",\n    \"Set\",\n    \"Tuple\",\n    \"Type\",\n    \"Union\"\n  ];\n\n  const KEYWORDS = {\n    $pattern: /[A-Za-z]\\w+|__\\w+__/,\n    keyword: RESERVED_WORDS,\n    built_in: BUILT_INS,\n    literal: LITERALS,\n    type: TYPES\n  };\n\n  const PROMPT = {\n    className: 'meta',\n    begin: /^(>>>|\\.\\.\\.) /\n  };\n\n  const SUBST = {\n    className: 'subst',\n    begin: /\\{/,\n    end: /\\}/,\n    keywords: KEYWORDS,\n    illegal: /#/\n  };\n\n  const LITERAL_BRACKET = {\n    begin: /\\{\\{/,\n    relevance: 0\n  };\n\n  const STRING = {\n    className: 'string',\n    contains: [ hljs.BACKSLASH_ESCAPE ],\n    variants: [\n      {\n        begin: /([uU]|[bB]|[rR]|[bB][rR]|[rR][bB])?'''/,\n        end: /'''/,\n        contains: [\n          hljs.BACKSLASH_ESCAPE,\n          PROMPT\n        ],\n        relevance: 10\n      },\n      {\n        begin: /([uU]|[bB]|[rR]|[bB][rR]|[rR][bB])?\"\"\"/,\n        end: /\"\"\"/,\n        contains: [\n          hljs.BACKSLASH_ESCAPE,\n          PROMPT\n        ],\n        relevance: 10\n      },\n      {\n        begin: /([fF][rR]|[rR][fF]|[fF])'''/,\n        end: /'''/,\n        contains: [\n          hljs.BACKSLASH_ESCAPE,\n          PROMPT,\n          LITERAL_BRACKET,\n          SUBST\n        ]\n      },\n      {\n        begin: /([fF][rR]|[rR][fF]|[fF])\"\"\"/,\n        end: /\"\"\"/,\n        contains: [\n          hljs.BACKSLASH_ESCAPE,\n          PROMPT,\n          LITERAL_BRACKET,\n          SUBST\n        ]\n      },\n      {\n        begin: /([uU]|[rR])'/,\n        end: /'/,\n        relevance: 10\n      },\n      {\n        begin: /([uU]|[rR])\"/,\n        end: /\"/,\n        relevance: 10\n      },\n      {\n        begin: /([bB]|[bB][rR]|[rR][bB])'/,\n        end: /'/\n      },\n      {\n        begin: /([bB]|[bB][rR]|[rR][bB])\"/,\n        end: /\"/\n      },\n      {\n        begin: /([fF][rR]|[rR][fF]|[fF])'/,\n        end: /'/,\n        contains: [\n          hljs.BACKSLASH_ESCAPE,\n          LITERAL_BRACKET,\n          SUBST\n        ]\n      },\n      {\n        begin: /([fF][rR]|[rR][fF]|[fF])\"/,\n        end: /\"/,\n        contains: [\n          hljs.BACKSLASH_ESCAPE,\n          LITERAL_BRACKET,\n          SUBST\n        ]\n      },\n      hljs.APOS_STRING_MODE,\n      hljs.QUOTE_STRING_MODE\n    ]\n  };\n\n  // https://docs.python.org/3.9/reference/lexical_analysis.html#numeric-literals\n  const digitpart = '[0-9](_?[0-9])*';\n  const pointfloat = `(\\\\b(${digitpart}))?\\\\.(${digitpart})|\\\\b(${digitpart})\\\\.`;\n  // Whitespace after a number (or any lexical token) is needed only if its absence\n  // would change the tokenization\n  // https://docs.python.org/3.9/reference/lexical_analysis.html#whitespace-between-tokens\n  // We deviate slightly, requiring a word boundary or a keyword\n  // to avoid accidentally recognizing *prefixes* (e.g., `0` in `0x41` or `08` or `0__1`)\n  const lookahead = `\\\\b|${RESERVED_WORDS.join('|')}`;\n  const NUMBER = {\n    className: 'number',\n    relevance: 0,\n    variants: [\n      // exponentfloat, pointfloat\n      // https://docs.python.org/3.9/reference/lexical_analysis.html#floating-point-literals\n      // optionally imaginary\n      // https://docs.python.org/3.9/reference/lexical_analysis.html#imaginary-literals\n      // Note: no leading \\b because floats can start with a decimal point\n      // and we don't want to mishandle e.g. `fn(.5)`,\n      // no trailing \\b for pointfloat because it can end with a decimal point\n      // and we don't want to mishandle e.g. `0..hex()`; this should be safe\n      // because both MUST contain a decimal point and so cannot be confused with\n      // the interior part of an identifier\n      {\n        begin: `(\\\\b(${digitpart})|(${pointfloat}))[eE][+-]?(${digitpart})[jJ]?(?=${lookahead})`\n      },\n      {\n        begin: `(${pointfloat})[jJ]?`\n      },\n\n      // decinteger, bininteger, octinteger, hexinteger\n      // https://docs.python.org/3.9/reference/lexical_analysis.html#integer-literals\n      // optionally \"long\" in Python 2\n      // https://docs.python.org/2.7/reference/lexical_analysis.html#integer-and-long-integer-literals\n      // decinteger is optionally imaginary\n      // https://docs.python.org/3.9/reference/lexical_analysis.html#imaginary-literals\n      {\n        begin: `\\\\b([1-9](_?[0-9])*|0+(_?0)*)[lLjJ]?(?=${lookahead})`\n      },\n      {\n        begin: `\\\\b0[bB](_?[01])+[lL]?(?=${lookahead})`\n      },\n      {\n        begin: `\\\\b0[oO](_?[0-7])+[lL]?(?=${lookahead})`\n      },\n      {\n        begin: `\\\\b0[xX](_?[0-9a-fA-F])+[lL]?(?=${lookahead})`\n      },\n\n      // imagnumber (digitpart-based)\n      // https://docs.python.org/3.9/reference/lexical_analysis.html#imaginary-literals\n      {\n        begin: `\\\\b(${digitpart})[jJ](?=${lookahead})`\n      }\n    ]\n  };\n  const COMMENT_TYPE = {\n    className: \"comment\",\n    begin: regex.lookahead(/# type:/),\n    end: /$/,\n    keywords: KEYWORDS,\n    contains: [\n      { // prevent keywords from coloring `type`\n        begin: /# type:/\n      },\n      // comment within a datatype comment includes no keywords\n      {\n        begin: /#/,\n        end: /\\b\\B/,\n        endsWithParent: true\n      }\n    ]\n  };\n  const PARAMS = {\n    className: 'params',\n    variants: [\n      // Exclude params in functions without params\n      {\n        className: \"\",\n        begin: /\\(\\s*\\)/,\n        skip: true\n      },\n      {\n        begin: /\\(/,\n        end: /\\)/,\n        excludeBegin: true,\n        excludeEnd: true,\n        keywords: KEYWORDS,\n        contains: [\n          'self',\n          PROMPT,\n          NUMBER,\n          STRING,\n          hljs.HASH_COMMENT_MODE\n        ]\n      }\n    ]\n  };\n  SUBST.contains = [\n    STRING,\n    NUMBER,\n    PROMPT\n  ];\n\n  return {\n    name: 'Python',\n    aliases: [\n      'py',\n      'gyp',\n      'ipython'\n    ],\n    unicodeRegex: true,\n    keywords: KEYWORDS,\n    illegal: /(<\\/|\\?)|=>/,\n    contains: [\n      PROMPT,\n      NUMBER,\n      {\n        // very common convention\n        scope: 'variable.language',\n        match: /\\bself\\b/\n      },\n      {\n        // eat \"if\" prior to string so that it won't accidentally be\n        // labeled as an f-string\n        beginKeywords: \"if\",\n        relevance: 0\n      },\n      { match: /\\bor\\b/, scope: \"keyword\" },\n      STRING,\n      COMMENT_TYPE,\n      hljs.HASH_COMMENT_MODE,\n      {\n        match: [\n          /\\bdef/, /\\s+/,\n          IDENT_RE,\n        ],\n        scope: {\n          1: \"keyword\",\n          3: \"title.function\"\n        },\n        contains: [ PARAMS ]\n      },\n      {\n        variants: [\n          {\n            match: [\n              /\\bclass/, /\\s+/,\n              IDENT_RE, /\\s*/,\n              /\\(\\s*/, IDENT_RE,/\\s*\\)/\n            ],\n          },\n          {\n            match: [\n              /\\bclass/, /\\s+/,\n              IDENT_RE\n            ],\n          }\n        ],\n        scope: {\n          1: \"keyword\",\n          3: \"title.class\",\n          6: \"title.class.inherited\",\n        }\n      },\n      {\n        className: 'meta',\n        begin: /^[\\t ]*@/,\n        end: /(?=#)|$/,\n        contains: [\n          NUMBER,\n          PARAMS,\n          STRING\n        ]\n      }\n    ]\n  };\n}\n\nexport { python as default };\n","/*\nLanguage: JSON\nDescription: JSON (JavaScript Object Notation) is a lightweight data-interchange format.\nAuthor: Ivan Sagalaev <maniac@softwaremaniacs.org>\nWebsite: http://www.json.org\nCategory: common, protocols, web\n*/\n\nfunction json(hljs) {\n  const ATTRIBUTE = {\n    className: 'attr',\n    begin: /\"(\\\\.|[^\\\\\"\\r\\n])*\"(?=\\s*:)/,\n    relevance: 1.01\n  };\n  const PUNCTUATION = {\n    match: /[{}[\\],:]/,\n    className: \"punctuation\",\n    relevance: 0\n  };\n  const LITERALS = [\n    \"true\",\n    \"false\",\n    \"null\"\n  ];\n  // NOTE: normally we would rely on `keywords` for this but using a mode here allows us\n  // - to use the very tight `illegal: \\S` rule later to flag any other character\n  // - as illegal indicating that despite looking like JSON we do not truly have\n  // - JSON and thus improve false-positively greatly since JSON will try and claim\n  // - all sorts of JSON looking stuff\n  const LITERALS_MODE = {\n    scope: \"literal\",\n    beginKeywords: LITERALS.join(\" \"),\n  };\n\n  return {\n    name: 'JSON',\n    aliases: ['jsonc'],\n    keywords:{\n      literal: LITERALS,\n    },\n    contains: [\n      ATTRIBUTE,\n      PUNCTUATION,\n      hljs.QUOTE_STRING_MODE,\n      LITERALS_MODE,\n      hljs.C_NUMBER_MODE,\n      hljs.C_LINE_COMMENT_MODE,\n      hljs.C_BLOCK_COMMENT_MODE\n    ],\n    illegal: '\\\\S'\n  };\n}\n\nexport { json as default };\n","/*\n Language: SQL\n Website: https://en.wikipedia.org/wiki/SQL\n Category: common, database\n */\n\n/*\n\nGoals:\n\nSQL is intended to highlight basic/common SQL keywords and expressions\n\n- If pretty much every single SQL server includes supports, then it's a canidate.\n- It is NOT intended to include tons of vendor specific keywords (Oracle, MySQL,\n  PostgreSQL) although the list of data types is purposely a bit more expansive.\n- For more specific SQL grammars please see:\n  - PostgreSQL and PL/pgSQL - core\n  - T-SQL - https://github.com/highlightjs/highlightjs-tsql\n  - sql_more (core)\n\n */\n\nfunction sql(hljs) {\n  const regex = hljs.regex;\n  const COMMENT_MODE = hljs.COMMENT('--', '$');\n  const STRING = {\n    scope: 'string',\n    variants: [\n      {\n        begin: /'/,\n        end: /'/,\n        contains: [ { match: /''/ } ]\n      }\n    ]\n  };\n  const QUOTED_IDENTIFIER = {\n    begin: /\"/,\n    end: /\"/,\n    contains: [ { match: /\"\"/ } ]\n  };\n\n  const LITERALS = [\n    \"true\",\n    \"false\",\n    // Not sure it's correct to call NULL literal, and clauses like IS [NOT] NULL look strange that way.\n    // \"null\",\n    \"unknown\"\n  ];\n\n  const MULTI_WORD_TYPES = [\n    \"double precision\",\n    \"large object\",\n    \"with timezone\",\n    \"without timezone\"\n  ];\n\n  const TYPES = [\n    'bigint',\n    'binary',\n    'blob',\n    'boolean',\n    'char',\n    'character',\n    'clob',\n    'date',\n    'dec',\n    'decfloat',\n    'decimal',\n    'float',\n    'int',\n    'integer',\n    'interval',\n    'nchar',\n    'nclob',\n    'national',\n    'numeric',\n    'real',\n    'row',\n    'smallint',\n    'time',\n    'timestamp',\n    'varchar',\n    'varying', // modifier (character varying)\n    'varbinary'\n  ];\n\n  const NON_RESERVED_WORDS = [\n    \"add\",\n    \"asc\",\n    \"collation\",\n    \"desc\",\n    \"final\",\n    \"first\",\n    \"last\",\n    \"view\"\n  ];\n\n  // https://jakewheat.github.io/sql-overview/sql-2016-foundation-grammar.html#reserved-word\n  const RESERVED_WORDS = [\n    \"abs\",\n    \"acos\",\n    \"all\",\n    \"allocate\",\n    \"alter\",\n    \"and\",\n    \"any\",\n    \"are\",\n    \"array\",\n    \"array_agg\",\n    \"array_max_cardinality\",\n    \"as\",\n    \"asensitive\",\n    \"asin\",\n    \"asymmetric\",\n    \"at\",\n    \"atan\",\n    \"atomic\",\n    \"authorization\",\n    \"avg\",\n    \"begin\",\n    \"begin_frame\",\n    \"begin_partition\",\n    \"between\",\n    \"bigint\",\n    \"binary\",\n    \"blob\",\n    \"boolean\",\n    \"both\",\n    \"by\",\n    \"call\",\n    \"called\",\n    \"cardinality\",\n    \"cascaded\",\n    \"case\",\n    \"cast\",\n    \"ceil\",\n    \"ceiling\",\n    \"char\",\n    \"char_length\",\n    \"character\",\n    \"character_length\",\n    \"check\",\n    \"classifier\",\n    \"clob\",\n    \"close\",\n    \"coalesce\",\n    \"collate\",\n    \"collect\",\n    \"column\",\n    \"commit\",\n    \"condition\",\n    \"connect\",\n    \"constraint\",\n    \"contains\",\n    \"convert\",\n    \"copy\",\n    \"corr\",\n    \"corresponding\",\n    \"cos\",\n    \"cosh\",\n    \"count\",\n    \"covar_pop\",\n    \"covar_samp\",\n    \"create\",\n    \"cross\",\n    \"cube\",\n    \"cume_dist\",\n    \"current\",\n    \"current_catalog\",\n    \"current_date\",\n    \"current_default_transform_group\",\n    \"current_path\",\n    \"current_role\",\n    \"current_row\",\n    \"current_schema\",\n    \"current_time\",\n    \"current_timestamp\",\n    \"current_path\",\n    \"current_role\",\n    \"current_transform_group_for_type\",\n    \"current_user\",\n    \"cursor\",\n    \"cycle\",\n    \"date\",\n    \"day\",\n    \"deallocate\",\n    \"dec\",\n    \"decimal\",\n    \"decfloat\",\n    \"declare\",\n    \"default\",\n    \"define\",\n    \"delete\",\n    \"dense_rank\",\n    \"deref\",\n    \"describe\",\n    \"deterministic\",\n    \"disconnect\",\n    \"distinct\",\n    \"double\",\n    \"drop\",\n    \"dynamic\",\n    \"each\",\n    \"element\",\n    \"else\",\n    \"empty\",\n    \"end\",\n    \"end_frame\",\n    \"end_partition\",\n    \"end-exec\",\n    \"equals\",\n    \"escape\",\n    \"every\",\n    \"except\",\n    \"exec\",\n    \"execute\",\n    \"exists\",\n    \"exp\",\n    \"external\",\n    \"extract\",\n    \"false\",\n    \"fetch\",\n    \"filter\",\n    \"first_value\",\n    \"float\",\n    \"floor\",\n    \"for\",\n    \"foreign\",\n    \"frame_row\",\n    \"free\",\n    \"from\",\n    \"full\",\n    \"function\",\n    \"fusion\",\n    \"get\",\n    \"global\",\n    \"grant\",\n    \"group\",\n    \"grouping\",\n    \"groups\",\n    \"having\",\n    \"hold\",\n    \"hour\",\n    \"identity\",\n    \"in\",\n    \"indicator\",\n    \"initial\",\n    \"inner\",\n    \"inout\",\n    \"insensitive\",\n    \"insert\",\n    \"int\",\n    \"integer\",\n    \"intersect\",\n    \"intersection\",\n    \"interval\",\n    \"into\",\n    \"is\",\n    \"join\",\n    \"json_array\",\n    \"json_arrayagg\",\n    \"json_exists\",\n    \"json_object\",\n    \"json_objectagg\",\n    \"json_query\",\n    \"json_table\",\n    \"json_table_primitive\",\n    \"json_value\",\n    \"lag\",\n    \"language\",\n    \"large\",\n    \"last_value\",\n    \"lateral\",\n    \"lead\",\n    \"leading\",\n    \"left\",\n    \"like\",\n    \"like_regex\",\n    \"listagg\",\n    \"ln\",\n    \"local\",\n    \"localtime\",\n    \"localtimestamp\",\n    \"log\",\n    \"log10\",\n    \"lower\",\n    \"match\",\n    \"match_number\",\n    \"match_recognize\",\n    \"matches\",\n    \"max\",\n    \"member\",\n    \"merge\",\n    \"method\",\n    \"min\",\n    \"minute\",\n    \"mod\",\n    \"modifies\",\n    \"module\",\n    \"month\",\n    \"multiset\",\n    \"national\",\n    \"natural\",\n    \"nchar\",\n    \"nclob\",\n    \"new\",\n    \"no\",\n    \"none\",\n    \"normalize\",\n    \"not\",\n    \"nth_value\",\n    \"ntile\",\n    \"null\",\n    \"nullif\",\n    \"numeric\",\n    \"octet_length\",\n    \"occurrences_regex\",\n    \"of\",\n    \"offset\",\n    \"old\",\n    \"omit\",\n    \"on\",\n    \"one\",\n    \"only\",\n    \"open\",\n    \"or\",\n    \"order\",\n    \"out\",\n    \"outer\",\n    \"over\",\n    \"overlaps\",\n    \"overlay\",\n    \"parameter\",\n    \"partition\",\n    \"pattern\",\n    \"per\",\n    \"percent\",\n    \"percent_rank\",\n    \"percentile_cont\",\n    \"percentile_disc\",\n    \"period\",\n    \"portion\",\n    \"position\",\n    \"position_regex\",\n    \"power\",\n    \"precedes\",\n    \"precision\",\n    \"prepare\",\n    \"primary\",\n    \"procedure\",\n    \"ptf\",\n    \"range\",\n    \"rank\",\n    \"reads\",\n    \"real\",\n    \"recursive\",\n    \"ref\",\n    \"references\",\n    \"referencing\",\n    \"regr_avgx\",\n    \"regr_avgy\",\n    \"regr_count\",\n    \"regr_intercept\",\n    \"regr_r2\",\n    \"regr_slope\",\n    \"regr_sxx\",\n    \"regr_sxy\",\n    \"regr_syy\",\n    \"release\",\n    \"result\",\n    \"return\",\n    \"returns\",\n    \"revoke\",\n    \"right\",\n    \"rollback\",\n    \"rollup\",\n    \"row\",\n    \"row_number\",\n    \"rows\",\n    \"running\",\n    \"savepoint\",\n    \"scope\",\n    \"scroll\",\n    \"search\",\n    \"second\",\n    \"seek\",\n    \"select\",\n    \"sensitive\",\n    \"session_user\",\n    \"set\",\n    \"show\",\n    \"similar\",\n    \"sin\",\n    \"sinh\",\n    \"skip\",\n    \"smallint\",\n    \"some\",\n    \"specific\",\n    \"specifictype\",\n    \"sql\",\n    \"sqlexception\",\n    \"sqlstate\",\n    \"sqlwarning\",\n    \"sqrt\",\n    \"start\",\n    \"static\",\n    \"stddev_pop\",\n    \"stddev_samp\",\n    \"submultiset\",\n    \"subset\",\n    \"substring\",\n    \"substring_regex\",\n    \"succeeds\",\n    \"sum\",\n    \"symmetric\",\n    \"system\",\n    \"system_time\",\n    \"system_user\",\n    \"table\",\n    \"tablesample\",\n    \"tan\",\n    \"tanh\",\n    \"then\",\n    \"time\",\n    \"timestamp\",\n    \"timezone_hour\",\n    \"timezone_minute\",\n    \"to\",\n    \"trailing\",\n    \"translate\",\n    \"translate_regex\",\n    \"translation\",\n    \"treat\",\n    \"trigger\",\n    \"trim\",\n    \"trim_array\",\n    \"true\",\n    \"truncate\",\n    \"uescape\",\n    \"union\",\n    \"unique\",\n    \"unknown\",\n    \"unnest\",\n    \"update\",\n    \"upper\",\n    \"user\",\n    \"using\",\n    \"value\",\n    \"values\",\n    \"value_of\",\n    \"var_pop\",\n    \"var_samp\",\n    \"varbinary\",\n    \"varchar\",\n    \"varying\",\n    \"versioning\",\n    \"when\",\n    \"whenever\",\n    \"where\",\n    \"width_bucket\",\n    \"window\",\n    \"with\",\n    \"within\",\n    \"without\",\n    \"year\",\n  ];\n\n  // these are reserved words we have identified to be functions\n  // and should only be highlighted in a dispatch-like context\n  // ie, array_agg(...), etc.\n  const RESERVED_FUNCTIONS = [\n    \"abs\",\n    \"acos\",\n    \"array_agg\",\n    \"asin\",\n    \"atan\",\n    \"avg\",\n    \"cast\",\n    \"ceil\",\n    \"ceiling\",\n    \"coalesce\",\n    \"corr\",\n    \"cos\",\n    \"cosh\",\n    \"count\",\n    \"covar_pop\",\n    \"covar_samp\",\n    \"cume_dist\",\n    \"dense_rank\",\n    \"deref\",\n    \"element\",\n    \"exp\",\n    \"extract\",\n    \"first_value\",\n    \"floor\",\n    \"json_array\",\n    \"json_arrayagg\",\n    \"json_exists\",\n    \"json_object\",\n    \"json_objectagg\",\n    \"json_query\",\n    \"json_table\",\n    \"json_table_primitive\",\n    \"json_value\",\n    \"lag\",\n    \"last_value\",\n    \"lead\",\n    \"listagg\",\n    \"ln\",\n    \"log\",\n    \"log10\",\n    \"lower\",\n    \"max\",\n    \"min\",\n    \"mod\",\n    \"nth_value\",\n    \"ntile\",\n    \"nullif\",\n    \"percent_rank\",\n    \"percentile_cont\",\n    \"percentile_disc\",\n    \"position\",\n    \"position_regex\",\n    \"power\",\n    \"rank\",\n    \"regr_avgx\",\n    \"regr_avgy\",\n    \"regr_count\",\n    \"regr_intercept\",\n    \"regr_r2\",\n    \"regr_slope\",\n    \"regr_sxx\",\n    \"regr_sxy\",\n    \"regr_syy\",\n    \"row_number\",\n    \"sin\",\n    \"sinh\",\n    \"sqrt\",\n    \"stddev_pop\",\n    \"stddev_samp\",\n    \"substring\",\n    \"substring_regex\",\n    \"sum\",\n    \"tan\",\n    \"tanh\",\n    \"translate\",\n    \"translate_regex\",\n    \"treat\",\n    \"trim\",\n    \"trim_array\",\n    \"unnest\",\n    \"upper\",\n    \"value_of\",\n    \"var_pop\",\n    \"var_samp\",\n    \"width_bucket\",\n  ];\n\n  // these functions can\n  const POSSIBLE_WITHOUT_PARENS = [\n    \"current_catalog\",\n    \"current_date\",\n    \"current_default_transform_group\",\n    \"current_path\",\n    \"current_role\",\n    \"current_schema\",\n    \"current_transform_group_for_type\",\n    \"current_user\",\n    \"session_user\",\n    \"system_time\",\n    \"system_user\",\n    \"current_time\",\n    \"localtime\",\n    \"current_timestamp\",\n    \"localtimestamp\"\n  ];\n\n  // those exist to boost relevance making these very\n  // \"SQL like\" keyword combos worth +1 extra relevance\n  const COMBOS = [\n    \"create table\",\n    \"insert into\",\n    \"primary key\",\n    \"foreign key\",\n    \"not null\",\n    \"alter table\",\n    \"add constraint\",\n    \"grouping sets\",\n    \"on overflow\",\n    \"character set\",\n    \"respect nulls\",\n    \"ignore nulls\",\n    \"nulls first\",\n    \"nulls last\",\n    \"depth first\",\n    \"breadth first\"\n  ];\n\n  const FUNCTIONS = RESERVED_FUNCTIONS;\n\n  const KEYWORDS = [\n    ...RESERVED_WORDS,\n    ...NON_RESERVED_WORDS\n  ].filter((keyword) => {\n    return !RESERVED_FUNCTIONS.includes(keyword);\n  });\n\n  const VARIABLE = {\n    scope: \"variable\",\n    match: /@[a-z0-9][a-z0-9_]*/,\n  };\n\n  const OPERATOR = {\n    scope: \"operator\",\n    match: /[-+*/=%^~]|&&?|\\|\\|?|!=?|<(?:=>?|<|>)?|>[>=]?/,\n    relevance: 0,\n  };\n\n  const FUNCTION_CALL = {\n    match: regex.concat(/\\b/, regex.either(...FUNCTIONS), /\\s*\\(/),\n    relevance: 0,\n    keywords: { built_in: FUNCTIONS }\n  };\n\n  // turns a multi-word keyword combo into a regex that doesn't\n  // care about extra whitespace etc.\n  // input: \"START QUERY\"\n  // output: /\\bSTART\\s+QUERY\\b/\n  function kws_to_regex(list) {\n    return regex.concat(\n      /\\b/,\n      regex.either(...list.map((kw) => {\n        return kw.replace(/\\s+/, \"\\\\s+\")\n      })),\n      /\\b/\n    )\n  }\n\n  const MULTI_WORD_KEYWORDS = {\n    scope: \"keyword\",\n    match: kws_to_regex(COMBOS),\n    relevance: 0,\n  };\n\n  // keywords with less than 3 letters are reduced in relevancy\n  function reduceRelevancy(list, {\n    exceptions, when\n  } = {}) {\n    const qualifyFn = when;\n    exceptions = exceptions || [];\n    return list.map((item) => {\n      if (item.match(/\\|\\d+$/) || exceptions.includes(item)) {\n        return item;\n      } else if (qualifyFn(item)) {\n        return `${item}|0`;\n      } else {\n        return item;\n      }\n    });\n  }\n\n  return {\n    name: 'SQL',\n    case_insensitive: true,\n    // does not include {} or HTML tags `</`\n    illegal: /[{}]|<\\//,\n    keywords: {\n      $pattern: /\\b[\\w\\.]+/,\n      keyword:\n        reduceRelevancy(KEYWORDS, { when: (x) => x.length < 3 }),\n      literal: LITERALS,\n      type: TYPES,\n      built_in: POSSIBLE_WITHOUT_PARENS\n    },\n    contains: [\n      {\n        scope: \"type\",\n        match: kws_to_regex(MULTI_WORD_TYPES)\n      },\n      MULTI_WORD_KEYWORDS,\n      FUNCTION_CALL,\n      VARIABLE,\n      STRING,\n      QUOTED_IDENTIFIER,\n      hljs.C_NUMBER_MODE,\n      hljs.C_BLOCK_COMMENT_MODE,\n      COMMENT_MODE,\n      OPERATOR\n    ]\n  };\n}\n\nexport { sql as default };\n","/*\nLanguage: HTML, XML\nWebsite: https://www.w3.org/XML/\nCategory: common, web\nAudit: 2020\n*/\n\n/** @type LanguageFn */\nfunction xml(hljs) {\n  const regex = hljs.regex;\n  // XML names can have the following additional letters: https://www.w3.org/TR/xml/#NT-NameChar\n  // OTHER_NAME_CHARS = /[:\\-.0-9\\u00B7\\u0300-\\u036F\\u203F-\\u2040]/;\n  // Element names start with NAME_START_CHAR followed by optional other Unicode letters, ASCII digits, hyphens, underscores, and periods\n  // const TAG_NAME_RE = regex.concat(/[A-Z_a-z\\u00C0-\\u00D6\\u00D8-\\u00F6\\u00F8-\\u02FF\\u0370-\\u037D\\u037F-\\u1FFF\\u200C-\\u200D\\u2070-\\u218F\\u2C00-\\u2FEF\\u3001-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFFD]/, regex.optional(/[A-Z_a-z\\u00C0-\\u00D6\\u00D8-\\u00F6\\u00F8-\\u02FF\\u0370-\\u037D\\u037F-\\u1FFF\\u200C-\\u200D\\u2070-\\u218F\\u2C00-\\u2FEF\\u3001-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFFD\\-.0-9\\u00B7\\u0300-\\u036F\\u203F-\\u2040]*:/), /[A-Z_a-z\\u00C0-\\u00D6\\u00D8-\\u00F6\\u00F8-\\u02FF\\u0370-\\u037D\\u037F-\\u1FFF\\u200C-\\u200D\\u2070-\\u218F\\u2C00-\\u2FEF\\u3001-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFFD\\-.0-9\\u00B7\\u0300-\\u036F\\u203F-\\u2040]*/);;\n  // const XML_IDENT_RE = /[A-Z_a-z:\\u00C0-\\u00D6\\u00D8-\\u00F6\\u00F8-\\u02FF\\u0370-\\u037D\\u037F-\\u1FFF\\u200C-\\u200D\\u2070-\\u218F\\u2C00-\\u2FEF\\u3001-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFFD\\-.0-9\\u00B7\\u0300-\\u036F\\u203F-\\u2040]+/;\n  // const TAG_NAME_RE = regex.concat(/[A-Z_a-z\\u00C0-\\u00D6\\u00D8-\\u00F6\\u00F8-\\u02FF\\u0370-\\u037D\\u037F-\\u1FFF\\u200C-\\u200D\\u2070-\\u218F\\u2C00-\\u2FEF\\u3001-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFFD]/, regex.optional(/[A-Z_a-z\\u00C0-\\u00D6\\u00D8-\\u00F6\\u00F8-\\u02FF\\u0370-\\u037D\\u037F-\\u1FFF\\u200C-\\u200D\\u2070-\\u218F\\u2C00-\\u2FEF\\u3001-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFFD\\-.0-9\\u00B7\\u0300-\\u036F\\u203F-\\u2040]*:/), /[A-Z_a-z\\u00C0-\\u00D6\\u00D8-\\u00F6\\u00F8-\\u02FF\\u0370-\\u037D\\u037F-\\u1FFF\\u200C-\\u200D\\u2070-\\u218F\\u2C00-\\u2FEF\\u3001-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFFD\\-.0-9\\u00B7\\u0300-\\u036F\\u203F-\\u2040]*/);\n  // however, to cater for performance and more Unicode support rely simply on the Unicode letter class\n  const TAG_NAME_RE = regex.concat(/[\\p{L}_]/u, regex.optional(/[\\p{L}0-9_.-]*:/u), /[\\p{L}0-9_.-]*/u);\n  const XML_IDENT_RE = /[\\p{L}0-9._:-]+/u;\n  const XML_ENTITIES = {\n    className: 'symbol',\n    begin: /&[a-z]+;|&#[0-9]+;|&#x[a-f0-9]+;/\n  };\n  const XML_META_KEYWORDS = {\n    begin: /\\s/,\n    contains: [\n      {\n        className: 'keyword',\n        begin: /#?[a-z_][a-z1-9_-]+/,\n        illegal: /\\n/\n      }\n    ]\n  };\n  const XML_META_PAR_KEYWORDS = hljs.inherit(XML_META_KEYWORDS, {\n    begin: /\\(/,\n    end: /\\)/\n  });\n  const APOS_META_STRING_MODE = hljs.inherit(hljs.APOS_STRING_MODE, { className: 'string' });\n  const QUOTE_META_STRING_MODE = hljs.inherit(hljs.QUOTE_STRING_MODE, { className: 'string' });\n  const TAG_INTERNALS = {\n    endsWithParent: true,\n    illegal: /</,\n    relevance: 0,\n    contains: [\n      {\n        className: 'attr',\n        begin: XML_IDENT_RE,\n        relevance: 0\n      },\n      {\n        begin: /=\\s*/,\n        relevance: 0,\n        contains: [\n          {\n            className: 'string',\n            endsParent: true,\n            variants: [\n              {\n                begin: /\"/,\n                end: /\"/,\n                contains: [ XML_ENTITIES ]\n              },\n              {\n                begin: /'/,\n                end: /'/,\n                contains: [ XML_ENTITIES ]\n              },\n              { begin: /[^\\s\"'=<>`]+/ }\n            ]\n          }\n        ]\n      }\n    ]\n  };\n  return {\n    name: 'HTML, XML',\n    aliases: [\n      'html',\n      'xhtml',\n      'rss',\n      'atom',\n      'xjb',\n      'xsd',\n      'xsl',\n      'plist',\n      'wsf',\n      'svg'\n    ],\n    case_insensitive: true,\n    unicodeRegex: true,\n    contains: [\n      {\n        className: 'meta',\n        begin: /<![a-z]/,\n        end: />/,\n        relevance: 10,\n        contains: [\n          XML_META_KEYWORDS,\n          QUOTE_META_STRING_MODE,\n          APOS_META_STRING_MODE,\n          XML_META_PAR_KEYWORDS,\n          {\n            begin: /\\[/,\n            end: /\\]/,\n            contains: [\n              {\n                className: 'meta',\n                begin: /<![a-z]/,\n                end: />/,\n                contains: [\n                  XML_META_KEYWORDS,\n                  XML_META_PAR_KEYWORDS,\n                  QUOTE_META_STRING_MODE,\n                  APOS_META_STRING_MODE\n                ]\n              }\n            ]\n          }\n        ]\n      },\n      hljs.COMMENT(\n        /<!--/,\n        /-->/,\n        { relevance: 10 }\n      ),\n      {\n        begin: /<!\\[CDATA\\[/,\n        end: /\\]\\]>/,\n        relevance: 10\n      },\n      XML_ENTITIES,\n      // xml processing instructions\n      {\n        className: 'meta',\n        end: /\\?>/,\n        variants: [\n          {\n            begin: /<\\?xml/,\n            relevance: 10,\n            contains: [\n              QUOTE_META_STRING_MODE\n            ]\n          },\n          {\n            begin: /<\\?[a-z][a-z0-9]+/,\n          }\n        ]\n\n      },\n      {\n        className: 'tag',\n        /*\n        The lookahead pattern (?=...) ensures that 'begin' only matches\n        '<style' as a single word, followed by a whitespace or an\n        ending bracket.\n        */\n        begin: /<style(?=\\s|>)/,\n        end: />/,\n        keywords: { name: 'style' },\n        contains: [ TAG_INTERNALS ],\n        starts: {\n          end: /<\\/style>/,\n          returnEnd: true,\n          subLanguage: [\n            'css',\n            'xml'\n          ]\n        }\n      },\n      {\n        className: 'tag',\n        // See the comment in the <style tag about the lookahead pattern\n        begin: /<script(?=\\s|>)/,\n        end: />/,\n        keywords: { name: 'script' },\n        contains: [ TAG_INTERNALS ],\n        starts: {\n          end: /<\\/script>/,\n          returnEnd: true,\n          subLanguage: [\n            'javascript',\n            'handlebars',\n            'xml'\n          ]\n        }\n      },\n      // we need this for now for jSX\n      {\n        className: 'tag',\n        begin: /<>|<\\/>/\n      },\n      // open tag\n      {\n        className: 'tag',\n        begin: regex.concat(\n          /</,\n          regex.lookahead(regex.concat(\n            TAG_NAME_RE,\n            // <tag/>\n            // <tag>\n            // <tag ...\n            regex.either(/\\/>/, />/, /\\s/)\n          ))\n        ),\n        end: /\\/?>/,\n        contains: [\n          {\n            className: 'name',\n            begin: TAG_NAME_RE,\n            relevance: 0,\n            starts: TAG_INTERNALS\n          }\n        ]\n      },\n      // close tag\n      {\n        className: 'tag',\n        begin: regex.concat(\n          /<\\//,\n          regex.lookahead(regex.concat(\n            TAG_NAME_RE, />/\n          ))\n        ),\n        contains: [\n          {\n            className: 'name',\n            begin: TAG_NAME_RE,\n            relevance: 0\n          },\n          {\n            begin: />/,\n            relevance: 0,\n            endsParent: true\n          }\n        ]\n      }\n    ]\n  };\n}\n\nexport { xml as default };\n","const MODES = (hljs) => {\n  return {\n    IMPORTANT: {\n      scope: 'meta',\n      begin: '!important'\n    },\n    BLOCK_COMMENT: hljs.C_BLOCK_COMMENT_MODE,\n    HEXCOLOR: {\n      scope: 'number',\n      begin: /#(([0-9a-fA-F]{3,4})|(([0-9a-fA-F]{2}){3,4}))\\b/\n    },\n    FUNCTION_DISPATCH: {\n      className: \"built_in\",\n      begin: /[\\w-]+(?=\\()/\n    },\n    ATTRIBUTE_SELECTOR_MODE: {\n      scope: 'selector-attr',\n      begin: /\\[/,\n      end: /\\]/,\n      illegal: '$',\n      contains: [\n        hljs.APOS_STRING_MODE,\n        hljs.QUOTE_STRING_MODE\n      ]\n    },\n    CSS_NUMBER_MODE: {\n      scope: 'number',\n      begin: hljs.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    },\n    CSS_VARIABLE: {\n      className: \"attr\",\n      begin: /--[A-Za-z_][A-Za-z0-9_-]*/\n    }\n  };\n};\n\nconst HTML_TAGS = [\n  'a',\n  'abbr',\n  'address',\n  'article',\n  'aside',\n  'audio',\n  'b',\n  'blockquote',\n  'body',\n  'button',\n  'canvas',\n  'caption',\n  'cite',\n  'code',\n  'dd',\n  'del',\n  'details',\n  'dfn',\n  'div',\n  'dl',\n  'dt',\n  'em',\n  'fieldset',\n  'figcaption',\n  'figure',\n  'footer',\n  'form',\n  'h1',\n  'h2',\n  'h3',\n  'h4',\n  'h5',\n  'h6',\n  'header',\n  'hgroup',\n  'html',\n  'i',\n  'iframe',\n  'img',\n  'input',\n  'ins',\n  'kbd',\n  'label',\n  'legend',\n  'li',\n  'main',\n  'mark',\n  'menu',\n  'nav',\n  'object',\n  'ol',\n  'optgroup',\n  'option',\n  'p',\n  'picture',\n  'q',\n  'quote',\n  'samp',\n  'section',\n  'select',\n  'source',\n  'span',\n  'strong',\n  'summary',\n  'sup',\n  'table',\n  'tbody',\n  'td',\n  'textarea',\n  'tfoot',\n  'th',\n  'thead',\n  'time',\n  'tr',\n  'ul',\n  'var',\n  'video'\n];\n\nconst SVG_TAGS = [\n  'defs',\n  'g',\n  'marker',\n  'mask',\n  'pattern',\n  'svg',\n  'switch',\n  'symbol',\n  'feBlend',\n  'feColorMatrix',\n  'feComponentTransfer',\n  'feComposite',\n  'feConvolveMatrix',\n  'feDiffuseLighting',\n  'feDisplacementMap',\n  'feFlood',\n  'feGaussianBlur',\n  'feImage',\n  'feMerge',\n  'feMorphology',\n  'feOffset',\n  'feSpecularLighting',\n  'feTile',\n  'feTurbulence',\n  'linearGradient',\n  'radialGradient',\n  'stop',\n  'circle',\n  'ellipse',\n  'image',\n  'line',\n  'path',\n  'polygon',\n  'polyline',\n  'rect',\n  'text',\n  'use',\n  'textPath',\n  'tspan',\n  'foreignObject',\n  'clipPath'\n];\n\nconst TAGS = [\n  ...HTML_TAGS,\n  ...SVG_TAGS,\n];\n\n// Sorting, then reversing makes sure longer attributes/elements like\n// `font-weight` are matched fully instead of getting false positives on say `font`\n\nconst MEDIA_FEATURES = [\n  'any-hover',\n  'any-pointer',\n  'aspect-ratio',\n  'color',\n  'color-gamut',\n  'color-index',\n  'device-aspect-ratio',\n  'device-height',\n  'device-width',\n  'display-mode',\n  'forced-colors',\n  'grid',\n  'height',\n  'hover',\n  'inverted-colors',\n  'monochrome',\n  'orientation',\n  'overflow-block',\n  'overflow-inline',\n  'pointer',\n  'prefers-color-scheme',\n  'prefers-contrast',\n  'prefers-reduced-motion',\n  'prefers-reduced-transparency',\n  'resolution',\n  'scan',\n  'scripting',\n  'update',\n  'width',\n  // TODO: find a better solution?\n  'min-width',\n  'max-width',\n  'min-height',\n  'max-height'\n].sort().reverse();\n\n// https://developer.mozilla.org/en-US/docs/Web/CSS/Pseudo-classes\nconst PSEUDO_CLASSES = [\n  'active',\n  'any-link',\n  'blank',\n  'checked',\n  'current',\n  'default',\n  'defined',\n  'dir', // dir()\n  'disabled',\n  'drop',\n  'empty',\n  'enabled',\n  'first',\n  'first-child',\n  'first-of-type',\n  'fullscreen',\n  'future',\n  'focus',\n  'focus-visible',\n  'focus-within',\n  'has', // has()\n  'host', // host or host()\n  'host-context', // host-context()\n  'hover',\n  'indeterminate',\n  'in-range',\n  'invalid',\n  'is', // is()\n  'lang', // lang()\n  'last-child',\n  'last-of-type',\n  'left',\n  'link',\n  'local-link',\n  'not', // not()\n  'nth-child', // nth-child()\n  'nth-col', // nth-col()\n  'nth-last-child', // nth-last-child()\n  'nth-last-col', // nth-last-col()\n  'nth-last-of-type', //nth-last-of-type()\n  'nth-of-type', //nth-of-type()\n  'only-child',\n  'only-of-type',\n  'optional',\n  'out-of-range',\n  'past',\n  'placeholder-shown',\n  'read-only',\n  'read-write',\n  'required',\n  'right',\n  'root',\n  'scope',\n  'target',\n  'target-within',\n  'user-invalid',\n  'valid',\n  'visited',\n  'where' // where()\n].sort().reverse();\n\n// https://developer.mozilla.org/en-US/docs/Web/CSS/Pseudo-elements\nconst PSEUDO_ELEMENTS = [\n  'after',\n  'backdrop',\n  'before',\n  'cue',\n  'cue-region',\n  'first-letter',\n  'first-line',\n  'grammar-error',\n  'marker',\n  'part',\n  'placeholder',\n  'selection',\n  'slotted',\n  'spelling-error'\n].sort().reverse();\n\nconst ATTRIBUTES = [\n  'accent-color',\n  'align-content',\n  'align-items',\n  'align-self',\n  'alignment-baseline',\n  'all',\n  'anchor-name',\n  'animation',\n  'animation-composition',\n  'animation-delay',\n  'animation-direction',\n  'animation-duration',\n  'animation-fill-mode',\n  'animation-iteration-count',\n  'animation-name',\n  'animation-play-state',\n  'animation-range',\n  'animation-range-end',\n  'animation-range-start',\n  'animation-timeline',\n  'animation-timing-function',\n  'appearance',\n  'aspect-ratio',\n  'backdrop-filter',\n  'backface-visibility',\n  'background',\n  'background-attachment',\n  'background-blend-mode',\n  'background-clip',\n  'background-color',\n  'background-image',\n  'background-origin',\n  'background-position',\n  'background-position-x',\n  'background-position-y',\n  'background-repeat',\n  'background-size',\n  'baseline-shift',\n  'block-size',\n  'border',\n  'border-block',\n  'border-block-color',\n  'border-block-end',\n  'border-block-end-color',\n  'border-block-end-style',\n  'border-block-end-width',\n  'border-block-start',\n  'border-block-start-color',\n  'border-block-start-style',\n  'border-block-start-width',\n  'border-block-style',\n  'border-block-width',\n  'border-bottom',\n  'border-bottom-color',\n  'border-bottom-left-radius',\n  'border-bottom-right-radius',\n  'border-bottom-style',\n  'border-bottom-width',\n  'border-collapse',\n  'border-color',\n  'border-end-end-radius',\n  'border-end-start-radius',\n  'border-image',\n  'border-image-outset',\n  'border-image-repeat',\n  'border-image-slice',\n  'border-image-source',\n  'border-image-width',\n  'border-inline',\n  'border-inline-color',\n  'border-inline-end',\n  'border-inline-end-color',\n  'border-inline-end-style',\n  'border-inline-end-width',\n  'border-inline-start',\n  'border-inline-start-color',\n  'border-inline-start-style',\n  'border-inline-start-width',\n  'border-inline-style',\n  'border-inline-width',\n  'border-left',\n  'border-left-color',\n  'border-left-style',\n  'border-left-width',\n  'border-radius',\n  'border-right',\n  'border-right-color',\n  'border-right-style',\n  'border-right-width',\n  'border-spacing',\n  'border-start-end-radius',\n  'border-start-start-radius',\n  'border-style',\n  'border-top',\n  'border-top-color',\n  'border-top-left-radius',\n  'border-top-right-radius',\n  'border-top-style',\n  'border-top-width',\n  'border-width',\n  'bottom',\n  'box-align',\n  'box-decoration-break',\n  'box-direction',\n  'box-flex',\n  'box-flex-group',\n  'box-lines',\n  'box-ordinal-group',\n  'box-orient',\n  'box-pack',\n  'box-shadow',\n  'box-sizing',\n  'break-after',\n  'break-before',\n  'break-inside',\n  'caption-side',\n  'caret-color',\n  'clear',\n  'clip',\n  'clip-path',\n  'clip-rule',\n  'color',\n  'color-interpolation',\n  'color-interpolation-filters',\n  'color-profile',\n  'color-rendering',\n  'color-scheme',\n  'column-count',\n  'column-fill',\n  'column-gap',\n  'column-rule',\n  'column-rule-color',\n  'column-rule-style',\n  'column-rule-width',\n  'column-span',\n  'column-width',\n  'columns',\n  'contain',\n  'contain-intrinsic-block-size',\n  'contain-intrinsic-height',\n  'contain-intrinsic-inline-size',\n  'contain-intrinsic-size',\n  'contain-intrinsic-width',\n  'container',\n  'container-name',\n  'container-type',\n  'content',\n  'content-visibility',\n  'counter-increment',\n  'counter-reset',\n  'counter-set',\n  'cue',\n  'cue-after',\n  'cue-before',\n  'cursor',\n  'cx',\n  'cy',\n  'direction',\n  'display',\n  'dominant-baseline',\n  'empty-cells',\n  'enable-background',\n  'field-sizing',\n  'fill',\n  'fill-opacity',\n  'fill-rule',\n  'filter',\n  'flex',\n  'flex-basis',\n  'flex-direction',\n  'flex-flow',\n  'flex-grow',\n  'flex-shrink',\n  'flex-wrap',\n  'float',\n  'flood-color',\n  'flood-opacity',\n  'flow',\n  'font',\n  'font-display',\n  'font-family',\n  'font-feature-settings',\n  'font-kerning',\n  'font-language-override',\n  'font-optical-sizing',\n  'font-palette',\n  'font-size',\n  'font-size-adjust',\n  'font-smooth',\n  'font-smoothing',\n  'font-stretch',\n  'font-style',\n  'font-synthesis',\n  'font-synthesis-position',\n  'font-synthesis-small-caps',\n  'font-synthesis-style',\n  'font-synthesis-weight',\n  'font-variant',\n  'font-variant-alternates',\n  'font-variant-caps',\n  'font-variant-east-asian',\n  'font-variant-emoji',\n  'font-variant-ligatures',\n  'font-variant-numeric',\n  'font-variant-position',\n  'font-variation-settings',\n  'font-weight',\n  'forced-color-adjust',\n  'gap',\n  'glyph-orientation-horizontal',\n  'glyph-orientation-vertical',\n  'grid',\n  'grid-area',\n  'grid-auto-columns',\n  'grid-auto-flow',\n  'grid-auto-rows',\n  'grid-column',\n  'grid-column-end',\n  'grid-column-start',\n  'grid-gap',\n  'grid-row',\n  'grid-row-end',\n  'grid-row-start',\n  'grid-template',\n  'grid-template-areas',\n  'grid-template-columns',\n  'grid-template-rows',\n  'hanging-punctuation',\n  'height',\n  'hyphenate-character',\n  'hyphenate-limit-chars',\n  'hyphens',\n  'icon',\n  'image-orientation',\n  'image-rendering',\n  'image-resolution',\n  'ime-mode',\n  'initial-letter',\n  'initial-letter-align',\n  'inline-size',\n  'inset',\n  'inset-area',\n  'inset-block',\n  'inset-block-end',\n  'inset-block-start',\n  'inset-inline',\n  'inset-inline-end',\n  'inset-inline-start',\n  'isolation',\n  'justify-content',\n  'justify-items',\n  'justify-self',\n  'kerning',\n  'left',\n  'letter-spacing',\n  'lighting-color',\n  'line-break',\n  'line-height',\n  'line-height-step',\n  'list-style',\n  'list-style-image',\n  'list-style-position',\n  'list-style-type',\n  'margin',\n  'margin-block',\n  'margin-block-end',\n  'margin-block-start',\n  'margin-bottom',\n  'margin-inline',\n  'margin-inline-end',\n  'margin-inline-start',\n  'margin-left',\n  'margin-right',\n  'margin-top',\n  'margin-trim',\n  'marker',\n  'marker-end',\n  'marker-mid',\n  'marker-start',\n  'marks',\n  'mask',\n  'mask-border',\n  'mask-border-mode',\n  'mask-border-outset',\n  'mask-border-repeat',\n  'mask-border-slice',\n  'mask-border-source',\n  'mask-border-width',\n  'mask-clip',\n  'mask-composite',\n  'mask-image',\n  'mask-mode',\n  'mask-origin',\n  'mask-position',\n  'mask-repeat',\n  'mask-size',\n  'mask-type',\n  'masonry-auto-flow',\n  'math-depth',\n  'math-shift',\n  'math-style',\n  'max-block-size',\n  'max-height',\n  'max-inline-size',\n  'max-width',\n  'min-block-size',\n  'min-height',\n  'min-inline-size',\n  'min-width',\n  'mix-blend-mode',\n  'nav-down',\n  'nav-index',\n  'nav-left',\n  'nav-right',\n  'nav-up',\n  'none',\n  'normal',\n  'object-fit',\n  'object-position',\n  'offset',\n  'offset-anchor',\n  'offset-distance',\n  'offset-path',\n  'offset-position',\n  'offset-rotate',\n  'opacity',\n  'order',\n  'orphans',\n  'outline',\n  'outline-color',\n  'outline-offset',\n  'outline-style',\n  'outline-width',\n  'overflow',\n  'overflow-anchor',\n  'overflow-block',\n  'overflow-clip-margin',\n  'overflow-inline',\n  'overflow-wrap',\n  'overflow-x',\n  'overflow-y',\n  'overlay',\n  'overscroll-behavior',\n  'overscroll-behavior-block',\n  'overscroll-behavior-inline',\n  'overscroll-behavior-x',\n  'overscroll-behavior-y',\n  'padding',\n  'padding-block',\n  'padding-block-end',\n  'padding-block-start',\n  'padding-bottom',\n  'padding-inline',\n  'padding-inline-end',\n  'padding-inline-start',\n  'padding-left',\n  'padding-right',\n  'padding-top',\n  'page',\n  'page-break-after',\n  'page-break-before',\n  'page-break-inside',\n  'paint-order',\n  'pause',\n  'pause-after',\n  'pause-before',\n  'perspective',\n  'perspective-origin',\n  'place-content',\n  'place-items',\n  'place-self',\n  'pointer-events',\n  'position',\n  'position-anchor',\n  'position-visibility',\n  'print-color-adjust',\n  'quotes',\n  'r',\n  'resize',\n  'rest',\n  'rest-after',\n  'rest-before',\n  'right',\n  'rotate',\n  'row-gap',\n  'ruby-align',\n  'ruby-position',\n  'scale',\n  'scroll-behavior',\n  'scroll-margin',\n  'scroll-margin-block',\n  'scroll-margin-block-end',\n  'scroll-margin-block-start',\n  'scroll-margin-bottom',\n  'scroll-margin-inline',\n  'scroll-margin-inline-end',\n  'scroll-margin-inline-start',\n  'scroll-margin-left',\n  'scroll-margin-right',\n  'scroll-margin-top',\n  'scroll-padding',\n  'scroll-padding-block',\n  'scroll-padding-block-end',\n  'scroll-padding-block-start',\n  'scroll-padding-bottom',\n  'scroll-padding-inline',\n  'scroll-padding-inline-end',\n  'scroll-padding-inline-start',\n  'scroll-padding-left',\n  'scroll-padding-right',\n  'scroll-padding-top',\n  'scroll-snap-align',\n  'scroll-snap-stop',\n  'scroll-snap-type',\n  'scroll-timeline',\n  'scroll-timeline-axis',\n  'scroll-timeline-name',\n  'scrollbar-color',\n  'scrollbar-gutter',\n  'scrollbar-width',\n  'shape-image-threshold',\n  'shape-margin',\n  'shape-outside',\n  'shape-rendering',\n  'speak',\n  'speak-as',\n  'src', // @font-face\n  'stop-color',\n  'stop-opacity',\n  'stroke',\n  'stroke-dasharray',\n  'stroke-dashoffset',\n  'stroke-linecap',\n  'stroke-linejoin',\n  'stroke-miterlimit',\n  'stroke-opacity',\n  'stroke-width',\n  'tab-size',\n  'table-layout',\n  'text-align',\n  'text-align-all',\n  'text-align-last',\n  'text-anchor',\n  'text-combine-upright',\n  'text-decoration',\n  'text-decoration-color',\n  'text-decoration-line',\n  'text-decoration-skip',\n  'text-decoration-skip-ink',\n  'text-decoration-style',\n  'text-decoration-thickness',\n  'text-emphasis',\n  'text-emphasis-color',\n  'text-emphasis-position',\n  'text-emphasis-style',\n  'text-indent',\n  'text-justify',\n  'text-orientation',\n  'text-overflow',\n  'text-rendering',\n  'text-shadow',\n  'text-size-adjust',\n  'text-transform',\n  'text-underline-offset',\n  'text-underline-position',\n  'text-wrap',\n  'text-wrap-mode',\n  'text-wrap-style',\n  'timeline-scope',\n  'top',\n  'touch-action',\n  'transform',\n  'transform-box',\n  'transform-origin',\n  'transform-style',\n  'transition',\n  'transition-behavior',\n  'transition-delay',\n  'transition-duration',\n  'transition-property',\n  'transition-timing-function',\n  'translate',\n  'unicode-bidi',\n  'user-modify',\n  'user-select',\n  'vector-effect',\n  'vertical-align',\n  'view-timeline',\n  'view-timeline-axis',\n  'view-timeline-inset',\n  'view-timeline-name',\n  'view-transition-name',\n  'visibility',\n  'voice-balance',\n  'voice-duration',\n  'voice-family',\n  'voice-pitch',\n  'voice-range',\n  'voice-rate',\n  'voice-stress',\n  'voice-volume',\n  'white-space',\n  'white-space-collapse',\n  'widows',\n  'width',\n  'will-change',\n  'word-break',\n  'word-spacing',\n  'word-wrap',\n  'writing-mode',\n  'x',\n  'y',\n  'z-index',\n  'zoom'\n].sort().reverse();\n\n/*\nLanguage: CSS\nCategory: common, css, web\nWebsite: https://developer.mozilla.org/en-US/docs/Web/CSS\n*/\n\n\n/** @type LanguageFn */\nfunction css(hljs) {\n  const regex = hljs.regex;\n  const modes = MODES(hljs);\n  const VENDOR_PREFIX = { begin: /-(webkit|moz|ms|o)-(?=[a-z])/ };\n  const AT_MODIFIERS = \"and or not only\";\n  const AT_PROPERTY_RE = /@-?\\w[\\w]*(-\\w+)*/; // @-webkit-keyframes\n  const IDENT_RE = '[a-zA-Z-][a-zA-Z0-9_-]*';\n  const STRINGS = [\n    hljs.APOS_STRING_MODE,\n    hljs.QUOTE_STRING_MODE\n  ];\n\n  return {\n    name: 'CSS',\n    case_insensitive: true,\n    illegal: /[=|'\\$]/,\n    keywords: { keyframePosition: \"from to\" },\n    classNameAliases: {\n      // for visual continuity with `tag {}` and because we\n      // don't have a great class for this?\n      keyframePosition: \"selector-tag\" },\n    contains: [\n      modes.BLOCK_COMMENT,\n      VENDOR_PREFIX,\n      // to recognize keyframe 40% etc which are outside the scope of our\n      // attribute value mode\n      modes.CSS_NUMBER_MODE,\n      {\n        className: 'selector-id',\n        begin: /#[A-Za-z0-9_-]+/,\n        relevance: 0\n      },\n      {\n        className: 'selector-class',\n        begin: '\\\\.' + IDENT_RE,\n        relevance: 0\n      },\n      modes.ATTRIBUTE_SELECTOR_MODE,\n      {\n        className: 'selector-pseudo',\n        variants: [\n          { begin: ':(' + PSEUDO_CLASSES.join('|') + ')' },\n          { begin: ':(:)?(' + PSEUDO_ELEMENTS.join('|') + ')' }\n        ]\n      },\n      // we may actually need this (12/2020)\n      // { // pseudo-selector params\n      //   begin: /\\(/,\n      //   end: /\\)/,\n      //   contains: [ hljs.CSS_NUMBER_MODE ]\n      // },\n      modes.CSS_VARIABLE,\n      {\n        className: 'attribute',\n        begin: '\\\\b(' + ATTRIBUTES.join('|') + ')\\\\b'\n      },\n      // attribute values\n      {\n        begin: /:/,\n        end: /[;}{]/,\n        contains: [\n          modes.BLOCK_COMMENT,\n          modes.HEXCOLOR,\n          modes.IMPORTANT,\n          modes.CSS_NUMBER_MODE,\n          ...STRINGS,\n          // needed to highlight these as strings and to avoid issues with\n          // illegal characters that might be inside urls that would tigger the\n          // languages illegal stack\n          {\n            begin: /(url|data-uri)\\(/,\n            end: /\\)/,\n            relevance: 0, // from keywords\n            keywords: { built_in: \"url data-uri\" },\n            contains: [\n              ...STRINGS,\n              {\n                className: \"string\",\n                // any character other than `)` as in `url()` will be the start\n                // of a string, which ends with `)` (from the parent mode)\n                begin: /[^)]/,\n                endsWithParent: true,\n                excludeEnd: true\n              }\n            ]\n          },\n          modes.FUNCTION_DISPATCH\n        ]\n      },\n      {\n        begin: regex.lookahead(/@/),\n        end: '[{;]',\n        relevance: 0,\n        illegal: /:/, // break on Less variables @var: ...\n        contains: [\n          {\n            className: 'keyword',\n            begin: AT_PROPERTY_RE\n          },\n          {\n            begin: /\\s/,\n            endsWithParent: true,\n            excludeEnd: true,\n            relevance: 0,\n            keywords: {\n              $pattern: /[a-z-]+/,\n              keyword: AT_MODIFIERS,\n              attribute: MEDIA_FEATURES.join(\" \")\n            },\n            contains: [\n              {\n                begin: /[a-z-]+(?=:)/,\n                className: \"attribute\"\n              },\n              ...STRINGS,\n              modes.CSS_NUMBER_MODE\n            ]\n          }\n        ]\n      },\n      {\n        className: 'selector-tag',\n        begin: '\\\\b(' + TAGS.join('|') + ')\\\\b'\n      }\n    ]\n  };\n}\n\nexport { css as default };\n","// https://docs.oracle.com/javase/specs/jls/se15/html/jls-3.html#jls-3.10\nvar decimalDigits = '[0-9](_*[0-9])*';\nvar frac = `\\\\.(${decimalDigits})`;\nvar hexDigits = '[0-9a-fA-F](_*[0-9a-fA-F])*';\nvar NUMERIC = {\n  className: 'number',\n  variants: [\n    // DecimalFloatingPointLiteral\n    // including ExponentPart\n    { begin: `(\\\\b(${decimalDigits})((${frac})|\\\\.)?|(${frac}))` +\n      `[eE][+-]?(${decimalDigits})[fFdD]?\\\\b` },\n    // excluding ExponentPart\n    { begin: `\\\\b(${decimalDigits})((${frac})[fFdD]?\\\\b|\\\\.([fFdD]\\\\b)?)` },\n    { begin: `(${frac})[fFdD]?\\\\b` },\n    { begin: `\\\\b(${decimalDigits})[fFdD]\\\\b` },\n\n    // HexadecimalFloatingPointLiteral\n    { begin: `\\\\b0[xX]((${hexDigits})\\\\.?|(${hexDigits})?\\\\.(${hexDigits}))` +\n      `[pP][+-]?(${decimalDigits})[fFdD]?\\\\b` },\n\n    // DecimalIntegerLiteral\n    { begin: '\\\\b(0|[1-9](_*[0-9])*)[lL]?\\\\b' },\n\n    // HexIntegerLiteral\n    { begin: `\\\\b0[xX](${hexDigits})[lL]?\\\\b` },\n\n    // OctalIntegerLiteral\n    { begin: '\\\\b0(_*[0-7])*[lL]?\\\\b' },\n\n    // BinaryIntegerLiteral\n    { begin: '\\\\b0[bB][01](_*[01])*[lL]?\\\\b' },\n  ],\n  relevance: 0\n};\n\n/*\nLanguage: Java\nAuthor: Vsevolod Solovyov <vsevolod.solovyov@gmail.com>\nCategory: common, enterprise\nWebsite: https://www.java.com/\n*/\n\n\n/**\n * Allows recursive regex expressions to a given depth\n *\n * ie: recurRegex(\"(abc~~~)\", /~~~/g, 2) becomes:\n * (abc(abc(abc)))\n *\n * @param {string} re\n * @param {RegExp} substitution (should be a g mode regex)\n * @param {number} depth\n * @returns {string}``\n */\nfunction recurRegex(re, substitution, depth) {\n  if (depth === -1) return \"\";\n\n  return re.replace(substitution, _ => {\n    return recurRegex(re, substitution, depth - 1);\n  });\n}\n\n/** @type LanguageFn */\nfunction java(hljs) {\n  const regex = hljs.regex;\n  const JAVA_IDENT_RE = '[\\u00C0-\\u02B8a-zA-Z_$][\\u00C0-\\u02B8a-zA-Z_$0-9]*';\n  const GENERIC_IDENT_RE = JAVA_IDENT_RE\n    + recurRegex('(?:<' + JAVA_IDENT_RE + '~~~(?:\\\\s*,\\\\s*' + JAVA_IDENT_RE + '~~~)*>)?', /~~~/g, 2);\n  const MAIN_KEYWORDS = [\n    'synchronized',\n    'abstract',\n    'private',\n    'var',\n    'static',\n    'if',\n    'const ',\n    'for',\n    'while',\n    'strictfp',\n    'finally',\n    'protected',\n    'import',\n    'native',\n    'final',\n    'void',\n    'enum',\n    'else',\n    'break',\n    'transient',\n    'catch',\n    'instanceof',\n    'volatile',\n    'case',\n    'assert',\n    'package',\n    'default',\n    'public',\n    'try',\n    'switch',\n    'continue',\n    'throws',\n    'protected',\n    'public',\n    'private',\n    'module',\n    'requires',\n    'exports',\n    'do',\n    'sealed',\n    'yield',\n    'permits',\n    'goto',\n    'when'\n  ];\n\n  const BUILT_INS = [\n    'super',\n    'this'\n  ];\n\n  const LITERALS = [\n    'false',\n    'true',\n    'null'\n  ];\n\n  const TYPES = [\n    'char',\n    'boolean',\n    'long',\n    'float',\n    'int',\n    'byte',\n    'short',\n    'double'\n  ];\n\n  const KEYWORDS = {\n    keyword: MAIN_KEYWORDS,\n    literal: LITERALS,\n    type: TYPES,\n    built_in: BUILT_INS\n  };\n\n  const ANNOTATION = {\n    className: 'meta',\n    begin: '@' + JAVA_IDENT_RE,\n    contains: [\n      {\n        begin: /\\(/,\n        end: /\\)/,\n        contains: [ \"self\" ] // allow nested () inside our annotation\n      }\n    ]\n  };\n  const PARAMS = {\n    className: 'params',\n    begin: /\\(/,\n    end: /\\)/,\n    keywords: KEYWORDS,\n    relevance: 0,\n    contains: [ hljs.C_BLOCK_COMMENT_MODE ],\n    endsParent: true\n  };\n\n  return {\n    name: 'Java',\n    aliases: [ 'jsp' ],\n    keywords: KEYWORDS,\n    illegal: /<\\/|#/,\n    contains: [\n      hljs.COMMENT(\n        '/\\\\*\\\\*',\n        '\\\\*/',\n        {\n          relevance: 0,\n          contains: [\n            {\n              // eat up @'s in emails to prevent them to be recognized as doctags\n              begin: /\\w+@/,\n              relevance: 0\n            },\n            {\n              className: 'doctag',\n              begin: '@[A-Za-z]+'\n            }\n          ]\n        }\n      ),\n      // relevance boost\n      {\n        begin: /import java\\.[a-z]+\\./,\n        keywords: \"import\",\n        relevance: 2\n      },\n      hljs.C_LINE_COMMENT_MODE,\n      hljs.C_BLOCK_COMMENT_MODE,\n      {\n        begin: /\"\"\"/,\n        end: /\"\"\"/,\n        className: \"string\",\n        contains: [ hljs.BACKSLASH_ESCAPE ]\n      },\n      hljs.APOS_STRING_MODE,\n      hljs.QUOTE_STRING_MODE,\n      {\n        match: [\n          /\\b(?:class|interface|enum|extends|implements|new)/,\n          /\\s+/,\n          JAVA_IDENT_RE\n        ],\n        className: {\n          1: \"keyword\",\n          3: \"title.class\"\n        }\n      },\n      {\n        // Exceptions for hyphenated keywords\n        match: /non-sealed/,\n        scope: \"keyword\"\n      },\n      {\n        begin: [\n          regex.concat(/(?!else)/, JAVA_IDENT_RE),\n          /\\s+/,\n          JAVA_IDENT_RE,\n          /\\s+/,\n          /=(?!=)/\n        ],\n        className: {\n          1: \"type\",\n          3: \"variable\",\n          5: \"operator\"\n        }\n      },\n      {\n        begin: [\n          /record/,\n          /\\s+/,\n          JAVA_IDENT_RE\n        ],\n        className: {\n          1: \"keyword\",\n          3: \"title.class\"\n        },\n        contains: [\n          PARAMS,\n          hljs.C_LINE_COMMENT_MODE,\n          hljs.C_BLOCK_COMMENT_MODE\n        ]\n      },\n      {\n        // Expression keywords prevent 'keyword Name(...)' from being\n        // recognized as a function definition\n        beginKeywords: 'new throw return else',\n        relevance: 0\n      },\n      {\n        begin: [\n          '(?:' + GENERIC_IDENT_RE + '\\\\s+)',\n          hljs.UNDERSCORE_IDENT_RE,\n          /\\s*(?=\\()/\n        ],\n        className: { 2: \"title.function\" },\n        keywords: KEYWORDS,\n        contains: [\n          {\n            className: 'params',\n            begin: /\\(/,\n            end: /\\)/,\n            keywords: KEYWORDS,\n            relevance: 0,\n            contains: [\n              ANNOTATION,\n              hljs.APOS_STRING_MODE,\n              hljs.QUOTE_STRING_MODE,\n              NUMERIC,\n              hljs.C_BLOCK_COMMENT_MODE\n            ]\n          },\n          hljs.C_LINE_COMMENT_MODE,\n          hljs.C_BLOCK_COMMENT_MODE\n        ]\n      },\n      NUMERIC,\n      ANNOTATION\n    ]\n  };\n}\n\nexport { java as default };\n","/*\nLanguage: C++\nCategory: common, system\nWebsite: https://isocpp.org\n*/\n\n/** @type LanguageFn */\nfunction cpp(hljs) {\n  const regex = hljs.regex;\n  // added for historic reasons because `hljs.C_LINE_COMMENT_MODE` does\n  // not include such support nor can we be sure all the grammars depending\n  // on it would desire this behavior\n  const C_LINE_COMMENT_MODE = hljs.COMMENT('//', '$', { contains: [ { begin: /\\\\\\n/ } ] });\n  const DECLTYPE_AUTO_RE = 'decltype\\\\(auto\\\\)';\n  const NAMESPACE_RE = '[a-zA-Z_]\\\\w*::';\n  const TEMPLATE_ARGUMENT_RE = '<[^<>]+>';\n  const FUNCTION_TYPE_RE = '(?!struct)('\n    + DECLTYPE_AUTO_RE + '|'\n    + regex.optional(NAMESPACE_RE)\n    + '[a-zA-Z_]\\\\w*' + regex.optional(TEMPLATE_ARGUMENT_RE)\n  + ')';\n\n  const CPP_PRIMITIVE_TYPES = {\n    className: 'type',\n    begin: '\\\\b[a-z\\\\d_]*_t\\\\b'\n  };\n\n  // https://en.cppreference.com/w/cpp/language/escape\n  // \\\\ \\x \\xFF \\u2837 \\u00323747 \\374\n  const CHARACTER_ESCAPES = '\\\\\\\\(x[0-9A-Fa-f]{2}|u[0-9A-Fa-f]{4,8}|[0-7]{3}|\\\\S)';\n  const STRINGS = {\n    className: 'string',\n    variants: [\n      {\n        begin: '(u8?|U|L)?\"',\n        end: '\"',\n        illegal: '\\\\n',\n        contains: [ hljs.BACKSLASH_ESCAPE ]\n      },\n      {\n        begin: '(u8?|U|L)?\\'(' + CHARACTER_ESCAPES + '|.)',\n        end: '\\'',\n        illegal: '.'\n      },\n      hljs.END_SAME_AS_BEGIN({\n        begin: /(?:u8?|U|L)?R\"([^()\\\\ ]{0,16})\\(/,\n        end: /\\)([^()\\\\ ]{0,16})\"/\n      })\n    ]\n  };\n\n  const NUMBERS = {\n    className: 'number',\n    variants: [\n      // Floating-point literal.\n      { begin:\n        \"[+-]?(?:\" // Leading sign.\n          // Decimal.\n          + \"(?:\"\n            +\"[0-9](?:'?[0-9])*\\\\.(?:[0-9](?:'?[0-9])*)?\"\n            + \"|\\\\.[0-9](?:'?[0-9])*\"\n          + \")(?:[Ee][+-]?[0-9](?:'?[0-9])*)?\"\n          + \"|[0-9](?:'?[0-9])*[Ee][+-]?[0-9](?:'?[0-9])*\"\n          // Hexadecimal.\n          + \"|0[Xx](?:\"\n            +\"[0-9A-Fa-f](?:'?[0-9A-Fa-f])*(?:\\\\.(?:[0-9A-Fa-f](?:'?[0-9A-Fa-f])*)?)?\"\n            + \"|\\\\.[0-9A-Fa-f](?:'?[0-9A-Fa-f])*\"\n          + \")[Pp][+-]?[0-9](?:'?[0-9])*\"\n        + \")(?:\" // Literal suffixes.\n          + \"[Ff](?:16|32|64|128)?\"\n          + \"|(BF|bf)16\"\n          + \"|[Ll]\"\n          + \"|\" // Literal suffix is optional.\n        + \")\"\n      },\n      // Integer literal.\n      { begin:\n        \"[+-]?\\\\b(?:\" // Leading sign.\n          + \"0[Bb][01](?:'?[01])*\" // Binary.\n          + \"|0[Xx][0-9A-Fa-f](?:'?[0-9A-Fa-f])*\" // Hexadecimal.\n          + \"|0(?:'?[0-7])*\" // Octal or just a lone zero.\n          + \"|[1-9](?:'?[0-9])*\" // Decimal.\n        + \")(?:\" // Literal suffixes.\n          + \"[Uu](?:LL?|ll?)\"\n          + \"|[Uu][Zz]?\"\n          + \"|(?:LL?|ll?)[Uu]?\"\n          + \"|[Zz][Uu]\"\n          + \"|\" // Literal suffix is optional.\n        + \")\"\n        // Note: there are user-defined literal suffixes too, but perhaps having the custom suffix not part of the\n        // literal highlight actually makes it stand out more.\n      }\n    ],\n    relevance: 0\n  };\n\n  const PREPROCESSOR = {\n    className: 'meta',\n    begin: /#\\s*[a-z]+\\b/,\n    end: /$/,\n    keywords: { keyword:\n        'if else elif endif define undef warning error line '\n        + 'pragma _Pragma ifdef ifndef include' },\n    contains: [\n      {\n        begin: /\\\\\\n/,\n        relevance: 0\n      },\n      hljs.inherit(STRINGS, { className: 'string' }),\n      {\n        className: 'string',\n        begin: /<.*?>/\n      },\n      C_LINE_COMMENT_MODE,\n      hljs.C_BLOCK_COMMENT_MODE\n    ]\n  };\n\n  const TITLE_MODE = {\n    className: 'title',\n    begin: regex.optional(NAMESPACE_RE) + hljs.IDENT_RE,\n    relevance: 0\n  };\n\n  const FUNCTION_TITLE = regex.optional(NAMESPACE_RE) + hljs.IDENT_RE + '\\\\s*\\\\(';\n\n  // https://en.cppreference.com/w/cpp/keyword\n  const RESERVED_KEYWORDS = [\n    'alignas',\n    'alignof',\n    'and',\n    'and_eq',\n    'asm',\n    'atomic_cancel',\n    'atomic_commit',\n    'atomic_noexcept',\n    'auto',\n    'bitand',\n    'bitor',\n    'break',\n    'case',\n    'catch',\n    'class',\n    'co_await',\n    'co_return',\n    'co_yield',\n    'compl',\n    'concept',\n    'const_cast|10',\n    'consteval',\n    'constexpr',\n    'constinit',\n    'continue',\n    'decltype',\n    'default',\n    'delete',\n    'do',\n    'dynamic_cast|10',\n    'else',\n    'enum',\n    'explicit',\n    'export',\n    'extern',\n    'false',\n    'final',\n    'for',\n    'friend',\n    'goto',\n    'if',\n    'import',\n    'inline',\n    'module',\n    'mutable',\n    'namespace',\n    'new',\n    'noexcept',\n    'not',\n    'not_eq',\n    'nullptr',\n    'operator',\n    'or',\n    'or_eq',\n    'override',\n    'private',\n    'protected',\n    'public',\n    'reflexpr',\n    'register',\n    'reinterpret_cast|10',\n    'requires',\n    'return',\n    'sizeof',\n    'static_assert',\n    'static_cast|10',\n    'struct',\n    'switch',\n    'synchronized',\n    'template',\n    'this',\n    'thread_local',\n    'throw',\n    'transaction_safe',\n    'transaction_safe_dynamic',\n    'true',\n    'try',\n    'typedef',\n    'typeid',\n    'typename',\n    'union',\n    'using',\n    'virtual',\n    'volatile',\n    'while',\n    'xor',\n    'xor_eq'\n  ];\n\n  // https://en.cppreference.com/w/cpp/keyword\n  const RESERVED_TYPES = [\n    'bool',\n    'char',\n    'char16_t',\n    'char32_t',\n    'char8_t',\n    'double',\n    'float',\n    'int',\n    'long',\n    'short',\n    'void',\n    'wchar_t',\n    'unsigned',\n    'signed',\n    'const',\n    'static'\n  ];\n\n  const TYPE_HINTS = [\n    'any',\n    'auto_ptr',\n    'barrier',\n    'binary_semaphore',\n    'bitset',\n    'complex',\n    'condition_variable',\n    'condition_variable_any',\n    'counting_semaphore',\n    'deque',\n    'false_type',\n    'flat_map',\n    'flat_set',\n    'future',\n    'imaginary',\n    'initializer_list',\n    'istringstream',\n    'jthread',\n    'latch',\n    'lock_guard',\n    'multimap',\n    'multiset',\n    'mutex',\n    'optional',\n    'ostringstream',\n    'packaged_task',\n    'pair',\n    'promise',\n    'priority_queue',\n    'queue',\n    'recursive_mutex',\n    'recursive_timed_mutex',\n    'scoped_lock',\n    'set',\n    'shared_future',\n    'shared_lock',\n    'shared_mutex',\n    'shared_timed_mutex',\n    'shared_ptr',\n    'stack',\n    'string_view',\n    'stringstream',\n    'timed_mutex',\n    'thread',\n    'true_type',\n    'tuple',\n    'unique_lock',\n    'unique_ptr',\n    'unordered_map',\n    'unordered_multimap',\n    'unordered_multiset',\n    'unordered_set',\n    'variant',\n    'vector',\n    'weak_ptr',\n    'wstring',\n    'wstring_view'\n  ];\n\n  const FUNCTION_HINTS = [\n    'abort',\n    'abs',\n    'acos',\n    'apply',\n    'as_const',\n    'asin',\n    'atan',\n    'atan2',\n    'calloc',\n    'ceil',\n    'cerr',\n    'cin',\n    'clog',\n    'cos',\n    'cosh',\n    'cout',\n    'declval',\n    'endl',\n    'exchange',\n    'exit',\n    'exp',\n    'fabs',\n    'floor',\n    'fmod',\n    'forward',\n    'fprintf',\n    'fputs',\n    'free',\n    'frexp',\n    'fscanf',\n    'future',\n    'invoke',\n    'isalnum',\n    'isalpha',\n    'iscntrl',\n    'isdigit',\n    'isgraph',\n    'islower',\n    'isprint',\n    'ispunct',\n    'isspace',\n    'isupper',\n    'isxdigit',\n    'labs',\n    'launder',\n    'ldexp',\n    'log',\n    'log10',\n    'make_pair',\n    'make_shared',\n    'make_shared_for_overwrite',\n    'make_tuple',\n    'make_unique',\n    'malloc',\n    'memchr',\n    'memcmp',\n    'memcpy',\n    'memset',\n    'modf',\n    'move',\n    'pow',\n    'printf',\n    'putchar',\n    'puts',\n    'realloc',\n    'scanf',\n    'sin',\n    'sinh',\n    'snprintf',\n    'sprintf',\n    'sqrt',\n    'sscanf',\n    'std',\n    'stderr',\n    'stdin',\n    'stdout',\n    'strcat',\n    'strchr',\n    'strcmp',\n    'strcpy',\n    'strcspn',\n    'strlen',\n    'strncat',\n    'strncmp',\n    'strncpy',\n    'strpbrk',\n    'strrchr',\n    'strspn',\n    'strstr',\n    'swap',\n    'tan',\n    'tanh',\n    'terminate',\n    'to_underlying',\n    'tolower',\n    'toupper',\n    'vfprintf',\n    'visit',\n    'vprintf',\n    'vsprintf'\n  ];\n\n  const LITERALS = [\n    'NULL',\n    'false',\n    'nullopt',\n    'nullptr',\n    'true'\n  ];\n\n  // https://en.cppreference.com/w/cpp/keyword\n  const BUILT_IN = [ '_Pragma' ];\n\n  const CPP_KEYWORDS = {\n    type: RESERVED_TYPES,\n    keyword: RESERVED_KEYWORDS,\n    literal: LITERALS,\n    built_in: BUILT_IN,\n    _type_hints: TYPE_HINTS\n  };\n\n  const FUNCTION_DISPATCH = {\n    className: 'function.dispatch',\n    relevance: 0,\n    keywords: {\n      // Only for relevance, not highlighting.\n      _hint: FUNCTION_HINTS },\n    begin: regex.concat(\n      /\\b/,\n      /(?!decltype)/,\n      /(?!if)/,\n      /(?!for)/,\n      /(?!switch)/,\n      /(?!while)/,\n      hljs.IDENT_RE,\n      regex.lookahead(/(<[^<>]+>|)\\s*\\(/))\n  };\n\n  const EXPRESSION_CONTAINS = [\n    FUNCTION_DISPATCH,\n    PREPROCESSOR,\n    CPP_PRIMITIVE_TYPES,\n    C_LINE_COMMENT_MODE,\n    hljs.C_BLOCK_COMMENT_MODE,\n    NUMBERS,\n    STRINGS\n  ];\n\n  const EXPRESSION_CONTEXT = {\n    // This mode covers expression context where we can't expect a function\n    // definition and shouldn't highlight anything that looks like one:\n    // `return some()`, `else if()`, `(x*sum(1, 2))`\n    variants: [\n      {\n        begin: /=/,\n        end: /;/\n      },\n      {\n        begin: /\\(/,\n        end: /\\)/\n      },\n      {\n        beginKeywords: 'new throw return else',\n        end: /;/\n      }\n    ],\n    keywords: CPP_KEYWORDS,\n    contains: EXPRESSION_CONTAINS.concat([\n      {\n        begin: /\\(/,\n        end: /\\)/,\n        keywords: CPP_KEYWORDS,\n        contains: EXPRESSION_CONTAINS.concat([ 'self' ]),\n        relevance: 0\n      }\n    ]),\n    relevance: 0\n  };\n\n  const FUNCTION_DECLARATION = {\n    className: 'function',\n    begin: '(' + FUNCTION_TYPE_RE + '[\\\\*&\\\\s]+)+' + FUNCTION_TITLE,\n    returnBegin: true,\n    end: /[{;=]/,\n    excludeEnd: true,\n    keywords: CPP_KEYWORDS,\n    illegal: /[^\\w\\s\\*&:<>.]/,\n    contains: [\n      { // to prevent it from being confused as the function title\n        begin: DECLTYPE_AUTO_RE,\n        keywords: CPP_KEYWORDS,\n        relevance: 0\n      },\n      {\n        begin: FUNCTION_TITLE,\n        returnBegin: true,\n        contains: [ TITLE_MODE ],\n        relevance: 0\n      },\n      // needed because we do not have look-behind on the below rule\n      // to prevent it from grabbing the final : in a :: pair\n      {\n        begin: /::/,\n        relevance: 0\n      },\n      // initializers\n      {\n        begin: /:/,\n        endsWithParent: true,\n        contains: [\n          STRINGS,\n          NUMBERS\n        ]\n      },\n      // allow for multiple declarations, e.g.:\n      // extern void f(int), g(char);\n      {\n        relevance: 0,\n        match: /,/\n      },\n      {\n        className: 'params',\n        begin: /\\(/,\n        end: /\\)/,\n        keywords: CPP_KEYWORDS,\n        relevance: 0,\n        contains: [\n          C_LINE_COMMENT_MODE,\n          hljs.C_BLOCK_COMMENT_MODE,\n          STRINGS,\n          NUMBERS,\n          CPP_PRIMITIVE_TYPES,\n          // Count matching parentheses.\n          {\n            begin: /\\(/,\n            end: /\\)/,\n            keywords: CPP_KEYWORDS,\n            relevance: 0,\n            contains: [\n              'self',\n              C_LINE_COMMENT_MODE,\n              hljs.C_BLOCK_COMMENT_MODE,\n              STRINGS,\n              NUMBERS,\n              CPP_PRIMITIVE_TYPES\n            ]\n          }\n        ]\n      },\n      CPP_PRIMITIVE_TYPES,\n      C_LINE_COMMENT_MODE,\n      hljs.C_BLOCK_COMMENT_MODE,\n      PREPROCESSOR\n    ]\n  };\n\n  return {\n    name: 'C++',\n    aliases: [\n      'cc',\n      'c++',\n      'h++',\n      'hpp',\n      'hh',\n      'hxx',\n      'cxx'\n    ],\n    keywords: CPP_KEYWORDS,\n    illegal: '</',\n    classNameAliases: { 'function.dispatch': 'built_in' },\n    contains: [].concat(\n      EXPRESSION_CONTEXT,\n      FUNCTION_DECLARATION,\n      FUNCTION_DISPATCH,\n      EXPRESSION_CONTAINS,\n      [\n        PREPROCESSOR,\n        { // containers: ie, `vector <int> rooms (9);`\n          begin: '\\\\b(deque|list|queue|priority_queue|pair|stack|vector|map|set|bitset|multiset|multimap|unordered_map|unordered_set|unordered_multiset|unordered_multimap|array|tuple|optional|variant|function|flat_map|flat_set)\\\\s*<(?!<)',\n          end: '>',\n          keywords: CPP_KEYWORDS,\n          contains: [\n            'self',\n            CPP_PRIMITIVE_TYPES\n          ]\n        },\n        {\n          begin: hljs.IDENT_RE + '::',\n          keywords: CPP_KEYWORDS\n        },\n        {\n          match: [\n            // extra complexity to deal with `enum class` and `enum struct`\n            /\\b(?:enum(?:\\s+(?:class|struct))?|class|struct|union)/,\n            /\\s+/,\n            /\\w+/\n          ],\n          className: {\n            1: 'keyword',\n            3: 'title.class'\n          }\n        }\n      ])\n  };\n}\n\nexport { cpp as default };\n","/*\nLanguage: Bash\nAuthor: vah <vahtenberg@gmail.com>\nContributrors: Benjamin Pannell <contact@sierrasoftworks.com>\nWebsite: https://www.gnu.org/software/bash/\nCategory: common, scripting\n*/\n\n/** @type LanguageFn */\nfunction bash(hljs) {\n  const regex = hljs.regex;\n  const VAR = {};\n  const BRACED_VAR = {\n    begin: /\\$\\{/,\n    end: /\\}/,\n    contains: [\n      \"self\",\n      {\n        begin: /:-/,\n        contains: [ VAR ]\n      } // default values\n    ]\n  };\n  Object.assign(VAR, {\n    className: 'variable',\n    variants: [\n      { begin: regex.concat(/\\$[\\w\\d#@][\\w\\d_]*/,\n        // negative look-ahead tries to avoid matching patterns that are not\n        // Perl at all like $ident$, @ident@, etc.\n        `(?![\\\\w\\\\d])(?![$])`) },\n      BRACED_VAR\n    ]\n  });\n\n  const SUBST = {\n    className: 'subst',\n    begin: /\\$\\(/,\n    end: /\\)/,\n    contains: [ hljs.BACKSLASH_ESCAPE ]\n  };\n  const COMMENT = hljs.inherit(\n    hljs.COMMENT(),\n    {\n      match: [\n        /(^|\\s)/,\n        /#.*$/\n      ],\n      scope: {\n        2: 'comment'\n      }\n    }\n  );\n  const HERE_DOC = {\n    begin: /<<-?\\s*(?=\\w+)/,\n    starts: { contains: [\n      hljs.END_SAME_AS_BEGIN({\n        begin: /(\\w+)/,\n        end: /(\\w+)/,\n        className: 'string'\n      })\n    ] }\n  };\n  const QUOTE_STRING = {\n    className: 'string',\n    begin: /\"/,\n    end: /\"/,\n    contains: [\n      hljs.BACKSLASH_ESCAPE,\n      VAR,\n      SUBST\n    ]\n  };\n  SUBST.contains.push(QUOTE_STRING);\n  const ESCAPED_QUOTE = {\n    match: /\\\\\"/\n  };\n  const APOS_STRING = {\n    className: 'string',\n    begin: /'/,\n    end: /'/\n  };\n  const ESCAPED_APOS = {\n    match: /\\\\'/\n  };\n  const ARITHMETIC = {\n    begin: /\\$?\\(\\(/,\n    end: /\\)\\)/,\n    contains: [\n      {\n        begin: /\\d+#[0-9a-f]+/,\n        className: \"number\"\n      },\n      hljs.NUMBER_MODE,\n      VAR\n    ]\n  };\n  const SH_LIKE_SHELLS = [\n    \"fish\",\n    \"bash\",\n    \"zsh\",\n    \"sh\",\n    \"csh\",\n    \"ksh\",\n    \"tcsh\",\n    \"dash\",\n    \"scsh\",\n  ];\n  const KNOWN_SHEBANG = hljs.SHEBANG({\n    binary: `(${SH_LIKE_SHELLS.join(\"|\")})`,\n    relevance: 10\n  });\n  const FUNCTION = {\n    className: 'function',\n    begin: /\\w[\\w\\d_]*\\s*\\(\\s*\\)\\s*\\{/,\n    returnBegin: true,\n    contains: [ hljs.inherit(hljs.TITLE_MODE, { begin: /\\w[\\w\\d_]*/ }) ],\n    relevance: 0\n  };\n\n  const KEYWORDS = [\n    \"if\",\n    \"then\",\n    \"else\",\n    \"elif\",\n    \"fi\",\n    \"time\",\n    \"for\",\n    \"while\",\n    \"until\",\n    \"in\",\n    \"do\",\n    \"done\",\n    \"case\",\n    \"esac\",\n    \"coproc\",\n    \"function\",\n    \"select\"\n  ];\n\n  const LITERALS = [\n    \"true\",\n    \"false\"\n  ];\n\n  // to consume paths to prevent keyword matches inside them\n  const PATH_MODE = { match: /(\\/[a-z._-]+)+/ };\n\n  // http://www.gnu.org/software/bash/manual/html_node/Shell-Builtin-Commands.html\n  const SHELL_BUILT_INS = [\n    \"break\",\n    \"cd\",\n    \"continue\",\n    \"eval\",\n    \"exec\",\n    \"exit\",\n    \"export\",\n    \"getopts\",\n    \"hash\",\n    \"pwd\",\n    \"readonly\",\n    \"return\",\n    \"shift\",\n    \"test\",\n    \"times\",\n    \"trap\",\n    \"umask\",\n    \"unset\"\n  ];\n\n  const BASH_BUILT_INS = [\n    \"alias\",\n    \"bind\",\n    \"builtin\",\n    \"caller\",\n    \"command\",\n    \"declare\",\n    \"echo\",\n    \"enable\",\n    \"help\",\n    \"let\",\n    \"local\",\n    \"logout\",\n    \"mapfile\",\n    \"printf\",\n    \"read\",\n    \"readarray\",\n    \"source\",\n    \"sudo\",\n    \"type\",\n    \"typeset\",\n    \"ulimit\",\n    \"unalias\"\n  ];\n\n  const ZSH_BUILT_INS = [\n    \"autoload\",\n    \"bg\",\n    \"bindkey\",\n    \"bye\",\n    \"cap\",\n    \"chdir\",\n    \"clone\",\n    \"comparguments\",\n    \"compcall\",\n    \"compctl\",\n    \"compdescribe\",\n    \"compfiles\",\n    \"compgroups\",\n    \"compquote\",\n    \"comptags\",\n    \"comptry\",\n    \"compvalues\",\n    \"dirs\",\n    \"disable\",\n    \"disown\",\n    \"echotc\",\n    \"echoti\",\n    \"emulate\",\n    \"fc\",\n    \"fg\",\n    \"float\",\n    \"functions\",\n    \"getcap\",\n    \"getln\",\n    \"history\",\n    \"integer\",\n    \"jobs\",\n    \"kill\",\n    \"limit\",\n    \"log\",\n    \"noglob\",\n    \"popd\",\n    \"print\",\n    \"pushd\",\n    \"pushln\",\n    \"rehash\",\n    \"sched\",\n    \"setcap\",\n    \"setopt\",\n    \"stat\",\n    \"suspend\",\n    \"ttyctl\",\n    \"unfunction\",\n    \"unhash\",\n    \"unlimit\",\n    \"unsetopt\",\n    \"vared\",\n    \"wait\",\n    \"whence\",\n    \"where\",\n    \"which\",\n    \"zcompile\",\n    \"zformat\",\n    \"zftp\",\n    \"zle\",\n    \"zmodload\",\n    \"zparseopts\",\n    \"zprof\",\n    \"zpty\",\n    \"zregexparse\",\n    \"zsocket\",\n    \"zstyle\",\n    \"ztcp\"\n  ];\n\n  const GNU_CORE_UTILS = [\n    \"chcon\",\n    \"chgrp\",\n    \"chown\",\n    \"chmod\",\n    \"cp\",\n    \"dd\",\n    \"df\",\n    \"dir\",\n    \"dircolors\",\n    \"ln\",\n    \"ls\",\n    \"mkdir\",\n    \"mkfifo\",\n    \"mknod\",\n    \"mktemp\",\n    \"mv\",\n    \"realpath\",\n    \"rm\",\n    \"rmdir\",\n    \"shred\",\n    \"sync\",\n    \"touch\",\n    \"truncate\",\n    \"vdir\",\n    \"b2sum\",\n    \"base32\",\n    \"base64\",\n    \"cat\",\n    \"cksum\",\n    \"comm\",\n    \"csplit\",\n    \"cut\",\n    \"expand\",\n    \"fmt\",\n    \"fold\",\n    \"head\",\n    \"join\",\n    \"md5sum\",\n    \"nl\",\n    \"numfmt\",\n    \"od\",\n    \"paste\",\n    \"ptx\",\n    \"pr\",\n    \"sha1sum\",\n    \"sha224sum\",\n    \"sha256sum\",\n    \"sha384sum\",\n    \"sha512sum\",\n    \"shuf\",\n    \"sort\",\n    \"split\",\n    \"sum\",\n    \"tac\",\n    \"tail\",\n    \"tr\",\n    \"tsort\",\n    \"unexpand\",\n    \"uniq\",\n    \"wc\",\n    \"arch\",\n    \"basename\",\n    \"chroot\",\n    \"date\",\n    \"dirname\",\n    \"du\",\n    \"echo\",\n    \"env\",\n    \"expr\",\n    \"factor\",\n    // \"false\", // keyword literal already\n    \"groups\",\n    \"hostid\",\n    \"id\",\n    \"link\",\n    \"logname\",\n    \"nice\",\n    \"nohup\",\n    \"nproc\",\n    \"pathchk\",\n    \"pinky\",\n    \"printenv\",\n    \"printf\",\n    \"pwd\",\n    \"readlink\",\n    \"runcon\",\n    \"seq\",\n    \"sleep\",\n    \"stat\",\n    \"stdbuf\",\n    \"stty\",\n    \"tee\",\n    \"test\",\n    \"timeout\",\n    // \"true\", // keyword literal already\n    \"tty\",\n    \"uname\",\n    \"unlink\",\n    \"uptime\",\n    \"users\",\n    \"who\",\n    \"whoami\",\n    \"yes\"\n  ];\n\n  return {\n    name: 'Bash',\n    aliases: [\n      'sh',\n      'zsh'\n    ],\n    keywords: {\n      $pattern: /\\b[a-z][a-z0-9._-]+\\b/,\n      keyword: KEYWORDS,\n      literal: LITERALS,\n      built_in: [\n        ...SHELL_BUILT_INS,\n        ...BASH_BUILT_INS,\n        // Shell modifiers\n        \"set\",\n        \"shopt\",\n        ...ZSH_BUILT_INS,\n        ...GNU_CORE_UTILS\n      ]\n    },\n    contains: [\n      KNOWN_SHEBANG, // to catch known shells and boost relevancy\n      hljs.SHEBANG(), // to catch unknown shells but still highlight the shebang\n      FUNCTION,\n      ARITHMETIC,\n      COMMENT,\n      HERE_DOC,\n      PATH_MODE,\n      QUOTE_STRING,\n      ESCAPED_QUOTE,\n      APOS_STRING,\n      ESCAPED_APOS,\n      VAR\n    ]\n  };\n}\n\nexport { bash as default };\n","/*\nLanguage: Shell Session\nRequires: bash.js\nAuthor: TSUYUSATO Kitsune <make.just.on@gmail.com>\nCategory: common\nAudit: 2020\n*/\n\n/** @type LanguageFn */\nfunction shell(hljs) {\n  return {\n    name: 'Shell Session',\n    aliases: [\n      'console',\n      'shellsession'\n    ],\n    contains: [\n      {\n        className: 'meta.prompt',\n        // We cannot add \\s (spaces) in the regular expression otherwise it will be too broad and produce unexpected result.\n        // For instance, in the following example, it would match \"echo /path/to/home >\" as a prompt:\n        // echo /path/to/home > t.exe\n        begin: /^\\s{0,3}[/~\\w\\d[\\]()@-]*[>%$#][ ]?/,\n        starts: {\n          end: /[^\\\\](?=\\s*$)/,\n          subLanguage: 'bash'\n        }\n      }\n    ]\n  };\n}\n\nexport { shell as default };\n","/*\nLanguage: YAML\nDescription: Yet Another Markdown Language\nAuthor: Stefan Wienert <stwienert@gmail.com>\nContributors: Carl Baxter <carl@cbax.tech>\nRequires: ruby.js\nWebsite: https://yaml.org\nCategory: common, config\n*/\nfunction yaml(hljs) {\n  const LITERALS = 'true false yes no null';\n\n  // YAML spec allows non-reserved URI characters in tags.\n  const URI_CHARACTERS = '[\\\\w#;/?:@&=+$,.~*\\'()[\\\\]]+';\n\n  // Define keys as starting with a word character\n  // ...containing word chars, spaces, colons, forward-slashes, hyphens and periods\n  // ...and ending with a colon followed immediately by a space, tab or newline.\n  // The YAML spec allows for much more than this, but this covers most use-cases.\n  const KEY = {\n    className: 'attr',\n    variants: [\n      // added brackets support and special char support\n      { begin: /[\\w*@][\\w*@ :()\\./-]*:(?=[ \\t]|$)/ },\n      { // double quoted keys - with brackets and special char support\n        begin: /\"[\\w*@][\\w*@ :()\\./-]*\":(?=[ \\t]|$)/ },\n      { // single quoted keys - with brackets and special char support\n        begin: /'[\\w*@][\\w*@ :()\\./-]*':(?=[ \\t]|$)/ },\n    ]\n  };\n  \n  const TEMPLATE_VARIABLES = {\n    className: 'template-variable',\n    variants: [\n      { // jinja templates Ansible\n        begin: /\\{\\{/,\n        end: /\\}\\}/\n      },\n      { // Ruby i18n\n        begin: /%\\{/,\n        end: /\\}/\n      }\n    ]\n  };\n\n  const SINGLE_QUOTE_STRING = {\n    className: 'string',\n    relevance: 0,\n    begin: /'/,\n    end: /'/,\n    contains: [\n      {\n        match: /''/,\n        scope: 'char.escape',\n        relevance: 0\n      }\n    ]\n  };\n\n  const STRING = {\n    className: 'string',\n    relevance: 0,\n    variants: [\n      {\n        begin: /\"/,\n        end: /\"/\n      },\n      { begin: /\\S+/ }\n    ],\n    contains: [\n      hljs.BACKSLASH_ESCAPE,\n      TEMPLATE_VARIABLES\n    ]\n  };\n\n  // Strings inside of value containers (objects) can't contain braces,\n  // brackets, or commas\n  const CONTAINER_STRING = hljs.inherit(STRING, { variants: [\n    {\n      begin: /'/,\n      end: /'/,\n      contains: [\n        {\n          begin: /''/,\n          relevance: 0\n        }\n      ]\n    },\n    {\n      begin: /\"/,\n      end: /\"/\n    },\n    { begin: /[^\\s,{}[\\]]+/ }\n  ] });\n\n  const DATE_RE = '[0-9]{4}(-[0-9][0-9]){0,2}';\n  const TIME_RE = '([Tt \\\\t][0-9][0-9]?(:[0-9][0-9]){2})?';\n  const FRACTION_RE = '(\\\\.[0-9]*)?';\n  const ZONE_RE = '([ \\\\t])*(Z|[-+][0-9][0-9]?(:[0-9][0-9])?)?';\n  const TIMESTAMP = {\n    className: 'number',\n    begin: '\\\\b' + DATE_RE + TIME_RE + FRACTION_RE + ZONE_RE + '\\\\b'\n  };\n\n  const VALUE_CONTAINER = {\n    end: ',',\n    endsWithParent: true,\n    excludeEnd: true,\n    keywords: LITERALS,\n    relevance: 0\n  };\n  const OBJECT = {\n    begin: /\\{/,\n    end: /\\}/,\n    contains: [ VALUE_CONTAINER ],\n    illegal: '\\\\n',\n    relevance: 0\n  };\n  const ARRAY = {\n    begin: '\\\\[',\n    end: '\\\\]',\n    contains: [ VALUE_CONTAINER ],\n    illegal: '\\\\n',\n    relevance: 0\n  };\n\n  const MODES = [\n    KEY,\n    {\n      className: 'meta',\n      begin: '^---\\\\s*$',\n      relevance: 10\n    },\n    { // multi line string\n      // Blocks start with a | or > followed by a newline\n      //\n      // Indentation of subsequent lines must be the same to\n      // be considered part of the block\n      className: 'string',\n      begin: '[\\\\|>]([1-9]?[+-])?[ ]*\\\\n( +)[^ ][^\\\\n]*\\\\n(\\\\2[^\\\\n]+\\\\n?)*'\n    },\n    { // Ruby/Rails erb\n      begin: '<%[%=-]?',\n      end: '[%-]?%>',\n      subLanguage: 'ruby',\n      excludeBegin: true,\n      excludeEnd: true,\n      relevance: 0\n    },\n    { // named tags\n      className: 'type',\n      begin: '!\\\\w+!' + URI_CHARACTERS\n    },\n    // https://yaml.org/spec/1.2/spec.html#id2784064\n    { // verbatim tags\n      className: 'type',\n      begin: '!<' + URI_CHARACTERS + \">\"\n    },\n    { // primary tags\n      className: 'type',\n      begin: '!' + URI_CHARACTERS\n    },\n    { // secondary tags\n      className: 'type',\n      begin: '!!' + URI_CHARACTERS\n    },\n    { // fragment id &ref\n      className: 'meta',\n      begin: '&' + hljs.UNDERSCORE_IDENT_RE + '$'\n    },\n    { // fragment reference *ref\n      className: 'meta',\n      begin: '\\\\*' + hljs.UNDERSCORE_IDENT_RE + '$'\n    },\n    { // array listing\n      className: 'bullet',\n      // TODO: remove |$ hack when we have proper look-ahead support\n      begin: '-(?=[ ]|$)',\n      relevance: 0\n    },\n    hljs.HASH_COMMENT_MODE,\n    {\n      beginKeywords: LITERALS,\n      keywords: { literal: LITERALS }\n    },\n    TIMESTAMP,\n    // numbers are any valid C-style number that\n    // sit isolated from other words\n    {\n      className: 'number',\n      begin: hljs.C_NUMBER_RE + '\\\\b',\n      relevance: 0\n    },\n    OBJECT,\n    ARRAY,\n    SINGLE_QUOTE_STRING,\n    STRING\n  ];\n\n  const VALUE_MODES = [ ...MODES ];\n  VALUE_MODES.pop();\n  VALUE_MODES.push(CONTAINER_STRING);\n  VALUE_CONTAINER.contains = VALUE_MODES;\n\n  return {\n    name: 'YAML',\n    case_insensitive: true,\n    aliases: [ 'yml' ],\n    contains: MODES\n  };\n}\n\nexport { yaml as default };\n","/*\nLanguage: Markdown\nRequires: xml.js\nAuthor: John Crepezzi <john.crepezzi@gmail.com>\nWebsite: https://daringfireball.net/projects/markdown/\nCategory: common, markup\n*/\n\nfunction markdown(hljs) {\n  const regex = hljs.regex;\n  const INLINE_HTML = {\n    begin: /<\\/?[A-Za-z_]/,\n    end: '>',\n    subLanguage: 'xml',\n    relevance: 0\n  };\n  const HORIZONTAL_RULE = {\n    begin: '^[-\\\\*]{3,}',\n    end: '$'\n  };\n  const CODE = {\n    className: 'code',\n    variants: [\n      // TODO: fix to allow these to work with sublanguage also\n      { begin: '(`{3,})[^`](.|\\\\n)*?\\\\1`*[ ]*' },\n      { begin: '(~{3,})[^~](.|\\\\n)*?\\\\1~*[ ]*' },\n      // needed to allow markdown as a sublanguage to work\n      {\n        begin: '```',\n        end: '```+[ ]*$'\n      },\n      {\n        begin: '~~~',\n        end: '~~~+[ ]*$'\n      },\n      { begin: '`.+?`' },\n      {\n        begin: '(?=^( {4}|\\\\t))',\n        // use contains to gobble up multiple lines to allow the block to be whatever size\n        // but only have a single open/close tag vs one per line\n        contains: [\n          {\n            begin: '^( {4}|\\\\t)',\n            end: '(\\\\n)$'\n          }\n        ],\n        relevance: 0\n      }\n    ]\n  };\n  const LIST = {\n    className: 'bullet',\n    begin: '^[ \\t]*([*+-]|(\\\\d+\\\\.))(?=\\\\s+)',\n    end: '\\\\s+',\n    excludeEnd: true\n  };\n  const LINK_REFERENCE = {\n    begin: /^\\[[^\\n]+\\]:/,\n    returnBegin: true,\n    contains: [\n      {\n        className: 'symbol',\n        begin: /\\[/,\n        end: /\\]/,\n        excludeBegin: true,\n        excludeEnd: true\n      },\n      {\n        className: 'link',\n        begin: /:\\s*/,\n        end: /$/,\n        excludeBegin: true\n      }\n    ]\n  };\n  const URL_SCHEME = /[A-Za-z][A-Za-z0-9+.-]*/;\n  const LINK = {\n    variants: [\n      // too much like nested array access in so many languages\n      // to have any real relevance\n      {\n        begin: /\\[.+?\\]\\[.*?\\]/,\n        relevance: 0\n      },\n      // popular internet URLs\n      {\n        begin: /\\[.+?\\]\\(((data|javascript|mailto):|(?:http|ftp)s?:\\/\\/).*?\\)/,\n        relevance: 2\n      },\n      {\n        begin: regex.concat(/\\[.+?\\]\\(/, URL_SCHEME, /:\\/\\/.*?\\)/),\n        relevance: 2\n      },\n      // relative urls\n      {\n        begin: /\\[.+?\\]\\([./?&#].*?\\)/,\n        relevance: 1\n      },\n      // whatever else, lower relevance (might not be a link at all)\n      {\n        begin: /\\[.*?\\]\\(.*?\\)/,\n        relevance: 0\n      }\n    ],\n    returnBegin: true,\n    contains: [\n      {\n        // empty strings for alt or link text\n        match: /\\[(?=\\])/ },\n      {\n        className: 'string',\n        relevance: 0,\n        begin: '\\\\[',\n        end: '\\\\]',\n        excludeBegin: true,\n        returnEnd: true\n      },\n      {\n        className: 'link',\n        relevance: 0,\n        begin: '\\\\]\\\\(',\n        end: '\\\\)',\n        excludeBegin: true,\n        excludeEnd: true\n      },\n      {\n        className: 'symbol',\n        relevance: 0,\n        begin: '\\\\]\\\\[',\n        end: '\\\\]',\n        excludeBegin: true,\n        excludeEnd: true\n      }\n    ]\n  };\n  const BOLD = {\n    className: 'strong',\n    contains: [], // defined later\n    variants: [\n      {\n        begin: /_{2}(?!\\s)/,\n        end: /_{2}/\n      },\n      {\n        begin: /\\*{2}(?!\\s)/,\n        end: /\\*{2}/\n      }\n    ]\n  };\n  const ITALIC = {\n    className: 'emphasis',\n    contains: [], // defined later\n    variants: [\n      {\n        begin: /\\*(?![*\\s])/,\n        end: /\\*/\n      },\n      {\n        begin: /_(?![_\\s])/,\n        end: /_/,\n        relevance: 0\n      }\n    ]\n  };\n\n  // 3 level deep nesting is not allowed because it would create confusion\n  // in cases like `***testing***` because where we don't know if the last\n  // `***` is starting a new bold/italic or finishing the last one\n  const BOLD_WITHOUT_ITALIC = hljs.inherit(BOLD, { contains: [] });\n  const ITALIC_WITHOUT_BOLD = hljs.inherit(ITALIC, { contains: [] });\n  BOLD.contains.push(ITALIC_WITHOUT_BOLD);\n  ITALIC.contains.push(BOLD_WITHOUT_ITALIC);\n\n  let CONTAINABLE = [\n    INLINE_HTML,\n    LINK\n  ];\n\n  [\n    BOLD,\n    ITALIC,\n    BOLD_WITHOUT_ITALIC,\n    ITALIC_WITHOUT_BOLD\n  ].forEach(m => {\n    m.contains = m.contains.concat(CONTAINABLE);\n  });\n\n  CONTAINABLE = CONTAINABLE.concat(BOLD, ITALIC);\n\n  const HEADER = {\n    className: 'section',\n    variants: [\n      {\n        begin: '^#{1,6}',\n        end: '$',\n        contains: CONTAINABLE\n      },\n      {\n        begin: '(?=^.+?\\\\n[=-]{2,}$)',\n        contains: [\n          { begin: '^[=-]*$' },\n          {\n            begin: '^',\n            end: \"\\\\n\",\n            contains: CONTAINABLE\n          }\n        ]\n      }\n    ]\n  };\n\n  const BLOCKQUOTE = {\n    className: 'quote',\n    begin: '^>\\\\s+',\n    contains: CONTAINABLE,\n    end: '$'\n  };\n\n  const ENTITY = {\n    //https://spec.commonmark.org/0.31.2/#entity-references\n    scope: 'literal',\n    match: /&([a-zA-Z0-9]+|#[0-9]{1,7}|#[Xx][0-9a-fA-F]{1,6});/\n  };\n\n  return {\n    name: 'Markdown',\n    aliases: [\n      'md',\n      'mkdown',\n      'mkd'\n    ],\n    contains: [\n      HEADER,\n      INLINE_HTML,\n      LIST,\n      BOLD,\n      ITALIC,\n      BLOCKQUOTE,\n      CODE,\n      HORIZONTAL_RULE,\n      LINK,\n      LINK_REFERENCE,\n      ENTITY\n    ]\n  };\n}\n\nexport { markdown as default };\n","<template>\n  <div class=\"dbgpt-renderer\">\n    <!-- 思考状态 -->\n    <div v-if=\"thinking\" class=\"flex items-center space-x-2 text-gray-500 dark:text-gray-400 mb-3\">\n      <div class=\"animate-spin w-3 h-3 border-2 border-blue-500 border-t-transparent rounded-full\"></div>\n      <span class=\"text-sm\">正在思考...</span>\n    </div>\n\n    <!-- 按顺序渲染内容片段和组件 -->\n    <template v-for=\"(item, index) in orderedRenderItems\" :key=\"`${contentKey}-${item.type}-${index}`\">\n      <!-- Markdown文本片段 -->\n      <div \n        v-if=\"item.type === 'markdown'\"\n        :data-index=\"index\" \n        class=\"markdown-body text-gray-800 dark:text-gray-200\"\n        v-html=\"item.content\"\n        @click=\"handleClick\"\n      ></div>\n\n      <!-- Agent Plans -->\n      <div \n        v-else-if=\"item.type === 'agent-plans'\" \n        class=\"custom-view-wrapper mt-4\"\n      >\n        <AgentPlans :plans=\"item.data\" />\n      </div>\n\n      <!-- Agent Messages -->\n      <div \n        v-else-if=\"item.type === 'agent-messages'\" \n        class=\"custom-view-wrapper mt-4\"\n      >\n        <AgentMessages :messages=\"item.data\" />\n      </div>\n\n      <!-- Chart View Tabs -->\n      <div \n        v-else-if=\"item.type === 'chart-view'\" \n        class=\"custom-view-wrapper mt-4\"\n      >\n        <ChartViewTabs \n          :plugin=\"normalizeChartViewData(item.data)\"\n          :streaming=\"streaming\"\n        />\n      </div>\n\n      <!-- Plugin View -->\n      <div \n        v-else-if=\"item.type === 'plugin'\" \n        class=\"custom-view-wrapper mt-4\"\n      >\n        <component \n          :is=\"getViewComponent(item.data)\" \n          :plugin=\"item.data\"\n          :streaming=\"streaming\"\n        />\n      </div>\n\n      <!-- References -->\n      <div \n        v-else-if=\"item.type === 'references'\" \n        class=\"custom-view-wrapper mt-2\"\n      >\n        <ReferencesDrawer :references=\"item.data\" />\n      </div>\n\n      <!-- HTML Preview -->\n      <div \n        v-else-if=\"item.type === 'html-preview'\" \n        class=\"custom-view-wrapper mt-4\"\n      >\n        <HtmlPreview :html=\"item.data\" />\n      </div>\n\n      <!-- SVG Preview -->\n      <div \n        v-else-if=\"item.type === 'svg-preview'\" \n        class=\"custom-view-wrapper mt-4\"\n      >\n        <SvgPreview :svg=\"item.data\" />\n      </div>\n\n      <!-- Vis Dashboard -->\n      <div \n        v-else-if=\"item.type === 'vis-dashboard'\" \n        class=\"custom-view-wrapper mt-4\"\n      >\n        <VisDashboard :dashboard=\"item.data\" />\n      </div>\n\n      <!-- Vis Code -->\n      <div \n        v-else-if=\"item.type === 'vis-code'\" \n        class=\"custom-view-wrapper mt-4\"\n      >\n        <VisCode :codeData=\"item.data\" />\n      </div>\n\n      <!-- Vis DB Chart -->\n      <div \n        v-else-if=\"item.type === 'vis-db-chart'\" \n        class=\"custom-view-wrapper mt-4\"\n      >\n        <ChartViewTabs :plugin=\"parseJsonData(item.data)\" :streaming=\"streaming\" />\n      </div>\n\n      <!-- Vis Plugin -->\n      <div \n        v-else-if=\"item.type === 'vis-plugin'\" \n        class=\"custom-view-wrapper mt-4\"\n      >\n        <PluginView :plugin=\"parseJsonData(item.data)\" :streaming=\"streaming\" />\n      </div>\n\n      <!-- Vis Response -->\n      <div \n        v-else-if=\"item.type === 'vis-response'\" \n        class=\"custom-view-wrapper mt-4\"\n      >\n        <VisResponse :data=\"parseJsonData(item.data)\" />\n      </div>\n    </template>\n  </div>\n</template>\n\n<script setup lang=\"ts\">\nimport { computed, defineAsyncComponent } from 'vue'\nimport { marked } from 'marked'\nimport DOMPurify from 'dompurify'\nimport hljs from 'highlight.js/lib/core'\n// 主题CSS已在main.ts全局导入，避免重复导入\n\n// 注册常用语言\nimport javascript from 'highlight.js/lib/languages/javascript'\nimport typescript from 'highlight.js/lib/languages/typescript'\nimport python from 'highlight.js/lib/languages/python'\nimport json from 'highlight.js/lib/languages/json'\nimport sql from 'highlight.js/lib/languages/sql'\nimport xml from 'highlight.js/lib/languages/xml'\nimport css from 'highlight.js/lib/languages/css'\nimport java from 'highlight.js/lib/languages/java'\nimport cpp from 'highlight.js/lib/languages/cpp'\nimport bash from 'highlight.js/lib/languages/bash'\nimport shell from 'highlight.js/lib/languages/shell'\nimport yaml from 'highlight.js/lib/languages/yaml'\nimport markdown from 'highlight.js/lib/languages/markdown'\n\n/* \n * 功能描述: 生成简单的字符串哈希值，用于唯一标识\n * 参数: {string} str - 需要哈希的字符串\n * 返回: {string} - 哈希值\n */\nfunction simpleHash(str: string): string {\n  let hash = 0\n  for (let i = 0; i < str.length; i++) {\n    const char = str.charCodeAt(i)\n    hash = ((hash << 5) - hash) + char\n    hash = hash & hash // Convert to 32bit integer\n  }\n  return Math.abs(hash).toString(36)\n}\n\nhljs.registerLanguage('javascript', javascript)\nhljs.registerLanguage('typescript', typescript)\nhljs.registerLanguage('python', python)\nhljs.registerLanguage('json', json)\nhljs.registerLanguage('sql', sql)\nhljs.registerLanguage('xml', xml)\nhljs.registerLanguage('html', xml)\nhljs.registerLanguage('css', css)\nhljs.registerLanguage('java', java)\nhljs.registerLanguage('cpp', cpp)\nhljs.registerLanguage('c++', cpp)\nhljs.registerLanguage('bash', bash)\nhljs.registerLanguage('shell', shell)\nhljs.registerLanguage('sh', shell)\nhljs.registerLanguage('yaml', yaml)\nhljs.registerLanguage('yml', yaml)\nhljs.registerLanguage('markdown', markdown)\nhljs.registerLanguage('md', markdown)\n\ninterface DBGPTView {\n  name: string\n  status: 'todo' | 'runing' | 'failed' | 'completed'\n  result?: string\n  err_msg?: string\n  type?: string\n  sql?: string\n  data?: any  // 可以是图表数据对象或其他数据\n}\n\ninterface Props {\n  content: string\n  thinking?: boolean\n  streaming?: boolean  // 消息是否还在流式传输中\n}\n\nconst props = defineProps<Props>()\n\n/* \n * 功能描述: 为当前内容生成唯一标识符，用于组件key（在模板中使用）\n * 返回: {string} - 内容的哈希值\n */\n// @ts-expect-error - contentKey 在模板中使用，TypeScript 无法识别\nconst contentKey = computed(() => simpleHash(props.content || ''))\n\n// 异步加载视图组件\nconst ChartView = defineAsyncComponent(() => import('./views/ChartView.vue'))\nconst PluginView = defineAsyncComponent(() => import('./views/PluginView.vue'))\nconst CodeView = defineAsyncComponent(() => import('./views/CodeView.vue'))\nconst ChartViewTabs = defineAsyncComponent(() => import('./views/ChartViewTabs.vue'))\nconst ReferencesDrawer = defineAsyncComponent(() => import('./views/ReferencesDrawer.vue'))\nconst AgentPlans = defineAsyncComponent(() => import('./views/AgentPlans.vue'))\nconst AgentMessages = defineAsyncComponent(() => import('./views/AgentMessages.vue'))\nconst HtmlPreview = defineAsyncComponent(() => import('./views/HtmlPreview.vue'))\nconst SvgPreview = defineAsyncComponent(() => import('./views/SvgPreview.vue'))\nconst VisDashboard = defineAsyncComponent(() => import('./views/VisDashboard.vue'))\nconst VisCode = defineAsyncComponent(() => import('./views/VisCode.vue'))\nconst VisResponse = defineAsyncComponent(() => import('./views/VisResponse.vue'))\n\n// 解析各种自定义标签\nconst parsedContent = computed(() => {\n  if (!props.content) {\n    return {\n      value: '',\n      cachePluginContext: [] as DBGPTView[],\n      chartViews: [] as any[],\n      references: [] as any[],\n      agentPlans: [] as any[],\n      agentMessages: [] as any[],\n      htmlPreviews: [] as string[],\n      svgPreviews: [] as string[],\n      visDashboards: [] as any[],\n      visCodes: [] as any[],\n      visDbCharts: [] as any[],\n      visPlugins: [] as any[],\n      visResponses: [] as any[]\n    }\n  }\n\n  const [value] = props.content.split('\\trelations:')\n  const cachePluginContext: DBGPTView[] = []\n  const chartViews: any[] = []\n  const references: any[] = []\n  const agentPlans: any[] = []\n  const agentMessages: any[] = []\n  const htmlPreviews: string[] = []\n  const svgPreviews: string[] = []\n  const visDashboards: any[] = []\n  const visCodes: any[] = []\n  const visDbCharts: any[] = []\n  const visPlugins: any[] = []\n  const visResponses: any[] = []\n  \n  let cacheIndex = 0\n  let chartViewIndex = 0\n  let referencesIndex = 0\n  \n  // 提取并替换各种标签\n  let result = value\n  \n  // 1. 处理 <dbgpt-view> 标签\n  result = result.replace(/<dbgpt-view[^>]*>([^<]*)<\\/dbgpt-view>/gi, (matchVal, innerContent) => {\n    try {\n      const pluginVal = innerContent.replaceAll('\\n', '\\\\n')\n      const pluginContext = JSON.parse(pluginVal)\n      \n      // 确保包含必需字段\n      const normalizedContext: DBGPTView = {\n        name: pluginContext.name || '插件执行',\n        status: pluginContext.status || 'completed',\n        result: pluginContext.result,\n        err_msg: pluginContext.err_msg,\n        type: pluginContext.type,\n        sql: pluginContext.sql,\n        data: pluginContext.data,\n        ...pluginContext  // 保留所有其他字段\n      }\n      \n      const replacement = `<div class=\"custom-view-placeholder\" data-index=\"${cacheIndex}\" data-type=\"plugin\"></div>`\n      cachePluginContext.push(normalizedContext)\n      cacheIndex++\n      return replacement\n    } catch (e) {\n      console.error('Parse dbgpt-view error:', e)\n      return matchVal\n    }\n  })\n  \n  // 2. 处理 <chart-view> 标签（Chart/SQL/Data多Tab）\n  // 支持两种格式：\n  // 格式1（原版DB-GPT后端）: <chart-view content='{\"sql\":\"...\",\"data\":[]}'/>\n  // 格式2（旧格式）: <chart-view>{\"sql\":\"...\",\"data\":[]}</chart-view>\n  \n  // 处理自闭合标签格式（优先）\n  result = result.replace(/<chart-view\\s+content=[\"']([^\"']+)[\"']\\s*\\/>/gi, (matchVal, contentAttr) => {\n    try {\n      // 解码 HTML 实体（如果有）\n      const decodedContent = contentAttr\n        .replace(/&quot;/g, '\"')\n        .replace(/&#39;/g, \"'\")\n        .replace(/&lt;/g, '<')\n        .replace(/&gt;/g, '>')\n        .replace(/&amp;/g, '&')\n      \n      const data = JSON.parse(decodedContent)\n      const replacement = `<div class=\"custom-view-placeholder\" data-index=\"${chartViewIndex}\" data-type=\"chart-view\"></div>`\n      chartViews.push(data)\n      chartViewIndex++\n      return replacement\n    } catch (e) {\n      console.error('❌ Parse chart-view (自闭合标签) error:', e, '\\nContent:', contentAttr)\n      return matchVal\n    }\n  })\n  \n  // 处理旧格式（带内容）\n  result = result.replace(/<chart-view[^>]*>([\\s\\S]*?)<\\/chart-view>/gi, (matchVal, innerContent) => {\n    try {\n      const cleanContent = innerContent.trim()\n      const data = JSON.parse(cleanContent)\n      const replacement = `<div class=\"custom-view-placeholder\" data-index=\"${chartViewIndex}\" data-type=\"chart-view\"></div>`\n      chartViews.push(data)\n      chartViewIndex++\n      return replacement\n    } catch (e) {\n      console.error('❌ Parse chart-view (旧格式) error:', e, '\\nContent:', innerContent)\n      return matchVal\n    }\n  })\n  \n  // 3. 处理 <references> 标签（知识库引用）\n  result = result.replace(/<references[^>]*>([\\s\\S]*?)<\\/references>/gi, (matchVal, innerContent) => {\n    try {\n      // 直接trim并解析JSON\n      const cleanContent = innerContent.trim()\n      const data = JSON.parse(cleanContent)\n      const replacement = `<div class=\"custom-view-placeholder\" data-index=\"${referencesIndex}\" data-type=\"references\"></div>`\n      references.push(data)\n      referencesIndex++\n      return replacement\n    } catch (e) {\n      console.error('Parse references error:', e, '\\nContent:', innerContent)\n      return matchVal\n    }\n  })\n\n  return {\n    value: result,\n    cachePluginContext,\n    chartViews,\n    references,\n    agentPlans,\n    agentMessages,\n    htmlPreviews,\n    svgPreviews,\n    visDashboards,\n    visCodes,\n    visDbCharts,\n    visPlugins,\n    visResponses\n  }\n})\n\n// 渲染 Markdown\nconst renderMarkdown = (content: string) => {\n  // 配置 marked\n  marked.setOptions({\n    breaks: true,\n    gfm: true\n  })\n\n  // 自定义渲染器（使用新的 marked API）\n  const renderer = {\n    // 自定义代码块渲染\n    code(token: any) {\n      const code = token.text || ''\n      const lang = token.lang || 'text'\n      \n      // 处理特殊语言类型 - 使用对应的Vue组件渲染\n      if (lang === 'agent-plans') {\n        const index = parsedContent.value.agentPlans.length\n        parsedContent.value.agentPlans.push(code)\n        return `<div class=\"custom-view-placeholder\" data-index=\"${index}\" data-type=\"agent-plans\"></div>`\n      } else if (lang === 'agent-messages') {\n        const index = parsedContent.value.agentMessages.length\n        parsedContent.value.agentMessages.push(code)\n        return `<div class=\"custom-view-placeholder\" data-index=\"${index}\" data-type=\"agent-messages\"></div>`\n      } else if (lang === 'vis-db-chart' || lang === 'vis-chart') {\n        // 使用 ChartView 组件渲染数据库图表\n        const index = parsedContent.value.visDbCharts.length\n        parsedContent.value.visDbCharts.push(code)\n        return `<div class=\"custom-view-placeholder\" data-index=\"${index}\" data-type=\"vis-db-chart\"></div>`\n      } else if (lang === 'vis-plugin') {\n        // 使用 PluginView 组件渲染插件视图\n        const index = parsedContent.value.visPlugins.length\n        parsedContent.value.visPlugins.push(code)\n        return `<div class=\"custom-view-placeholder\" data-index=\"${index}\" data-type=\"vis-plugin\"></div>`\n      } else if (lang === 'vis-dashboard') {\n        // 使用 VisDashboard 组件渲染仪表盘\n        const index = parsedContent.value.visDashboards.length\n        parsedContent.value.visDashboards.push(code)\n        return `<div class=\"custom-view-placeholder\" data-index=\"${index}\" data-type=\"vis-dashboard\"></div>`\n      } else if (lang === 'vis-code') {\n        // 使用 VisCode 组件渲染代码执行结果\n        const index = parsedContent.value.visCodes.length\n        parsedContent.value.visCodes.push(code)\n        return `<div class=\"custom-view-placeholder\" data-index=\"${index}\" data-type=\"vis-code\"></div>`\n      } else if (lang === 'vis-response') {\n        // 使用 VisResponse 组件渲染执行响应结果\n        const index = parsedContent.value.visResponses.length\n        parsedContent.value.visResponses.push(code)\n        return `<div class=\"custom-view-placeholder\" data-index=\"${index}\" data-type=\"vis-response\"></div>`\n      } else if (lang === 'html' || lang === 'web') {\n        // 使用 HtmlPreview 组件渲染HTML内容\n        const index = parsedContent.value.htmlPreviews.length\n        parsedContent.value.htmlPreviews.push(code)\n        return `<div class=\"custom-view-placeholder\" data-index=\"${index}\" data-type=\"html-preview\"></div>`\n      } else if (lang === 'svg') {\n        // 使用 SvgPreview 组件渲染SVG图形\n        const index = parsedContent.value.svgPreviews.length\n        parsedContent.value.svgPreviews.push(code)\n        return `<div class=\"custom-view-placeholder\" data-index=\"${index}\" data-type=\"svg-preview\"></div>`\n      } else if (lang === 'xml') {\n        // XML如果包含SVG标签则使用SvgPreview，否则显示为代码\n        if (code.trim().toLowerCase().includes('<svg')) {\n          const index = parsedContent.value.svgPreviews.length\n          parsedContent.value.svgPreviews.push(code)\n          return `<div class=\"custom-view-placeholder\" data-index=\"${index}\" data-type=\"svg-preview\"></div>`\n        }\n        // XML不包含SVG，继续作为代码块处理\n      }\n      \n      // 普通代码块 - 使用 highlight.js 进行语法高亮\n      let highlightedCode = ''\n      try {\n        if (lang && lang !== 'text' && hljs.getLanguage(lang)) {\n          // 如果语言已知，使用指定语言高亮\n          highlightedCode = hljs.highlight(code, { language: lang }).value\n        } else {\n          // 否则自动检测语言\n          highlightedCode = hljs.highlightAuto(code).value\n        }\n      } catch (e) {\n        // 如果高亮失败，使用转义的原始代码\n        console.error('[hljs] 语法高亮失败:', e)\n        highlightedCode = escapeHtml(String(code))\n      }\n      \n      // 将原始代码保存在 data 属性中，用于复制\n      const escapedOriginalCode = escapeHtml(String(code))\n      \n      return `<div class=\"code-block-wrapper\" data-code=\"${escapedOriginalCode.replace(/\"/g, '&quot;')}\">\n        <div class=\"code-block-header\">\n          <div class=\"flex items-center space-x-2\">\n            <svg class=\"w-3.5 h-3.5 text-gray-400\" fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\n              <path stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" d=\"M8 9l3 3-3 3m5 0h3M5 20h14a2 2 0 002-2V6a2 2 0 00-2-2H5a2 2 0 00-2 2v12a2 2 0 002 2z\"/>\n            </svg>\n            <span class=\"code-language\">${lang}</span>\n          </div>\n          <button class=\"copy-btn\" data-action=\"copy-code\">\n            <svg class=\"w-3.5 h-3.5\" fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\n              <path stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" d=\"M8 16H6a2 2 0 01-2-2V6a2 2 0 012-2h8a2 2 0 012 2v2m-6 12h8a2 2 0 002-2v-8a2 2 0 00-2-2h-8a2 2 0 00-2 2v8a2 2 0 002 2z\"/>\n            </svg>\n            <span class=\"ml-1\">复制</span>\n          </button>\n        </div>\n        <pre class=\"language-${lang}\"><code class=\"hljs\">${highlightedCode}</code></pre>\n      </div>`\n    },\n\n    // 自定义行内代码渲染\n    codespan(token: any) {\n      const code = token.text || ''\n      return `<code class=\"inline-code\">${escapeHtml(code)}</code>`\n    },\n\n    // 自定义表格渲染\n    table(token: any) {\n      let headerHtml = ''\n      let bodyHtml = ''\n      \n      // 处理表头\n      if (Array.isArray(token.header)) {\n        // token.header 是单元格对象数组\n        const headerCells = token.header.map((cell: any) => {\n          const align = cell.align ? ` style=\"text-align: ${cell.align}\"` : ''\n          const text = escapeHtml(cell.text || '')\n          return `<th${align}>${text}</th>`\n        }).join('')\n        headerHtml = `<tr>${headerCells}</tr>`\n      } else if (typeof token.header === 'string') {\n        headerHtml = token.header\n      }\n      \n      // 处理表格行\n      if (Array.isArray(token.rows)) {\n        // token.rows 是行数组，每行又是单元格对象数组\n        bodyHtml = token.rows.map((row: any) => {\n          if (Array.isArray(row)) {\n            // row 是单元格对象数组\n            const rowCells = row.map((cell: any) => {\n              const align = cell.align ? ` style=\"text-align: ${cell.align}\"` : ''\n              let text = ''\n              \n              // 处理单元格内容\n              if (typeof cell.text === 'string') {\n                text = cell.text\n              } else if (typeof cell.text === 'object' && cell.text !== null) {\n                // 如果是对象，转换为 JSON\n                try {\n                  text = escapeHtml(JSON.stringify(cell.text, null, 2))\n                } catch (e) {\n                  text = escapeHtml(String(cell.text))\n                }\n              } else {\n                text = escapeHtml(String(cell.text || ''))\n              }\n              \n              return `<td${align}>${text}</td>`\n            }).join('')\n            return `<tr>${rowCells}</tr>`\n          } else if (typeof row === 'string') {\n            return row\n          }\n          return `<tr><td>${escapeHtml(String(row))}</td></tr>`\n        }).join('')\n      } else if (typeof token.rows === 'string') {\n        bodyHtml = token.rows\n      }\n      \n      return `<div class=\"table-wrapper\">\n        <table class=\"dbgpt-table\">\n          <thead>${headerHtml}</thead>\n          <tbody>${bodyHtml}</tbody>\n        </table>\n      </div>`\n    },\n\n    // 自定义链接渲染（安全处理）\n    link(token: any) {\n      const href = token.href || ''\n      const title = token.title || ''\n      const text = token.text || ''\n      const titleAttr = title ? ` title=\"${escapeHtml(title)}\"` : ''\n      return `<a href=\"${href}\"${titleAttr} target=\"_blank\" rel=\"noopener noreferrer\" class=\"text-blue-500 hover:underline\">${text}</a>`\n    }\n  }\n\n  marked.use({ renderer })\n\n  const rawHtml = marked.parse(content) as string\n  \n  // 使用 DOMPurify 清理 HTML，防止 XSS\n  return DOMPurify.sanitize(rawHtml, {\n    ADD_TAGS: ['div', 'span'],\n    ADD_ATTR: ['class', 'data-index', 'data-type', 'data-code', 'data-action']\n  })\n}\n\n// HTML 转义\nconst escapeHtml = (text: any): string => {\n  // 确保 text 是字符串\n  let str = ''\n  \n  if (text === null || text === undefined) {\n    str = ''\n  } else if (typeof text === 'string') {\n    str = text\n  } else if (typeof text === 'object') {\n    // 如果是对象，尝试 JSON 序列化\n    try {\n      str = JSON.stringify(text, null, 2)\n    } catch (e) {\n      str = String(text)\n    }\n  } else {\n    str = String(text)\n  }\n  \n  const map: Record<string, string> = {\n    '&': '&amp;',\n    '<': '&lt;',\n    '>': '&gt;',\n    '\"': '&quot;',\n    \"'\": '&#039;'\n  }\n  return str.replace(/[&<>\"']/g, m => map[m])\n}\n\n/* 按顺序组织渲染项 */\ninterface RenderItem {\n  type: string\n  content?: string\n  data?: any\n}\n\nconst orderedRenderItems = computed<RenderItem[]>(() => {\n  const items: RenderItem[] = []\n  \n  if (!parsedContent.value || !parsedContent.value.value) {\n    return items\n  }\n  \n  // 渲染markdown获取HTML\n  const html = renderMarkdown(parsedContent.value.value)\n  \n  // 查找所有占位符及其位置\n  const placeholderRegex = /<div class=\"custom-view-placeholder\" data-index=\"(\\d+)\" data-type=\"([^\"]+)\"><\\/div>/g\n  const placeholders: Array<{ index: number, type: string, dataIndex: number, position: number }> = []\n  \n  let match\n  // eslint-disable-next-line no-cond-assign\n  while ((match = placeholderRegex.exec(html)) !== null) {\n    placeholders.push({\n      index: placeholders.length,\n      type: match[2],\n      dataIndex: parseInt(match[1]),\n      position: match.index\n    })\n  }\n  \n  // 如果没有占位符，返回整个markdown\n  if (placeholders.length === 0) {\n    items.push({\n      type: 'markdown',\n      content: html\n    })\n    return items\n  }\n  \n  // 按占位符分割HTML\n  let currentPos = 0\n  placeholders.forEach((placeholder) => {\n    // 添加占位符之前的markdown片段\n    if (placeholder.position > currentPos) {\n      const markdownFragment = html.substring(currentPos, placeholder.position)\n      if (markdownFragment.trim()) {\n        items.push({\n          type: 'markdown',\n          content: markdownFragment\n        })\n      }\n    }\n    \n    // 添加组件数据\n    const componentItem: RenderItem = {\n      type: placeholder.type\n    }\n    \n    switch (placeholder.type) {\n      case 'agent-plans':\n        try {\n          componentItem.data = JSON.parse(parsedContent.value.agentPlans[placeholder.dataIndex])\n        } catch (e) {\n          console.error('解析agent-plans失败:', e)\n        }\n        break\n      case 'agent-messages':\n        try {\n          componentItem.data = JSON.parse(parsedContent.value.agentMessages[placeholder.dataIndex])\n        } catch (e) {\n          console.error('解析agent-messages失败:', e)\n        }\n        break\n      case 'chart-view':\n        componentItem.data = parsedContent.value.chartViews[placeholder.dataIndex]\n        break\n      case 'plugin':\n        componentItem.data = parsedContent.value.cachePluginContext[placeholder.dataIndex]\n        break\n      case 'references':\n        componentItem.data = parsedContent.value.references[placeholder.dataIndex]\n        break\n      case 'html-preview':\n        componentItem.data = parsedContent.value.htmlPreviews[placeholder.dataIndex]\n        break\n      case 'svg-preview':\n        componentItem.data = parsedContent.value.svgPreviews[placeholder.dataIndex]\n        break\n      case 'vis-dashboard':\n        componentItem.data = parsedContent.value.visDashboards[placeholder.dataIndex]\n        break\n      case 'vis-code':\n        componentItem.data = parsedContent.value.visCodes[placeholder.dataIndex]\n        break\n      case 'vis-db-chart':\n        componentItem.data = parsedContent.value.visDbCharts[placeholder.dataIndex]\n        break\n      case 'vis-plugin':\n        componentItem.data = parsedContent.value.visPlugins[placeholder.dataIndex]\n        break\n      case 'vis-response':\n        componentItem.data = parsedContent.value.visResponses[placeholder.dataIndex]\n        break\n    }\n    \n    items.push(componentItem)\n    \n    // 更新位置（跳过占位符HTML）\n    const placeholderHtml = `<div class=\"custom-view-placeholder\" data-index=\"${placeholder.dataIndex}\" data-type=\"${placeholder.type}\"></div>`\n    currentPos = placeholder.position + placeholderHtml.length\n  })\n  \n  // 添加最后一个占位符之后的markdown片段\n  if (currentPos < html.length) {\n    const markdownFragment = html.substring(currentPos)\n    if (markdownFragment.trim()) {\n      items.push({\n        type: 'markdown',\n        content: markdownFragment\n      })\n    }\n  }\n  \n  return items\n})\n/* 按顺序组织渲染项end */\n\n/* \n * 功能描述: 根据插件类型获取对应的视图组件\n * 参数: {DBGPTView} plugin - 插件数据\n * 返回: {Component} - 对应的Vue组件\n */\nconst getViewComponent = (plugin: DBGPTView) => {\n  // 根据插件名称或类型判断\n  const name = plugin.name?.toLowerCase() || ''\n  \n  // 检查是否是图表类型\n  if (name.includes('chart') || name.includes('图') || name.includes('图表') || \n      plugin.type === 'chart' || plugin.data?.type) {\n    return ChartView\n  } \n  // 检查是否是代码/SQL类型\n  else if (name.includes('code') || name.includes('sql') || name.includes('查询') || plugin.sql) {\n    return CodeView\n  } \n  // 其他类型使用插件视图\n  else {\n    return PluginView\n  }\n}\n\n/* \n * 功能描述: 解析JSON字符串数据，并确保包含必需字段\n * 参数: {string | any} data - 待解析的数据\n * 返回: {DBGPTView} - 解析后的数据对象（包含必需字段）\n */\nconst parseJsonData = (data: string | any): DBGPTView => {\n  let parsed: any = data\n  \n  // 如果是字符串，先解析\n  if (typeof data === 'string') {\n    try {\n      parsed = JSON.parse(data)\n    } catch (e) {\n      console.error('Parse JSON data error:', e)\n      return { \n        name: '数据解析失败', \n        status: 'failed', \n        err_msg: '无法解析JSON数据' \n      }\n    }\n  }\n  \n  // 归一化 type 字段（统一转为小写）\n  let normalizedType = parsed?.type\n  if (normalizedType && typeof normalizedType === 'string') {\n    normalizedType = normalizedType.toLowerCase()\n  }\n  \n  // console.log('🔄 parseJsonData 处理:', {\n  //   originalType: parsed?.type,\n  //   normalizedType,\n  //   hasData: !!parsed?.data,\n  //   dataLength: parsed?.data?.length || 0,\n  //   hasSql: !!parsed?.sql\n  // })\n  \n  // ChartViewTabs 期望的扁平数据结构\n  // { name, status, sql, data: [], headers: [] }\n  // 而不是 { data: { type, data, sql } }\n  \n  // console.log('📦 构建数据结构:', {\n  //   type: normalizedType,\n  //   dataLength: parsed?.data?.length || 0,\n  //   hasSql: !!parsed?.sql\n  // })\n  \n  // 返回扁平结构，直接将 sql、data、headers 提升到根级别\n  return {\n    name: parsed?.name || parsed?.title || '查询结果',\n    status: parsed?.status || 'completed',\n    result: parsed?.result,\n    err_msg: parsed?.err_msg,\n    // 直接提升到根级别（ChartViewTabs需要）\n    sql: parsed?.sql,\n    data: parsed?.data || [],          // 直接是数组\n    headers: parsed?.headers as any,\n    // 保留 type 用于其他可能的用途\n    type: normalizedType,\n    chart_type: normalizedType\n  } as DBGPTView\n}\n\n/* \n * 功能描述: 规范化ChartView数据格式\n * 参数: {any} data - 原始图表数据（可能是字符串或对象）\n * 返回: {any} - 规范化后的数据对象\n */\nconst normalizeChartViewData = (data: any): any => {\n  let parsed: any = data\n  \n  // 如果是字符串，先解析\n  if (typeof data === 'string') {\n    try {\n      parsed = JSON.parse(data)\n    } catch (e) {\n      console.error('Parse chart-view data error:', e)\n      return {\n        name: '图表数据解析失败',\n        status: 'failed',\n        err_msg: '无法解析图表数据',\n        data: []\n      }\n    }\n  }\n  \n  // 规范化数据结构，确保符合ChartViewTabs组件的期望格式\n  return {\n    name: parsed?.name || parsed?.title || '数据图表',\n    status: parsed?.status || 'completed',\n    sql: parsed?.sql,\n    data: parsed?.data || [],\n    headers: parsed?.headers,\n    chart_type: parsed?.type || parsed?.chart_type,\n    err_msg: parsed?.err_msg,\n    // 保留所有原始字段\n    ...parsed\n  }\n}\n\n/* \n * 功能描述: 处理点击事件（事件委托）\n * 参数: {MouseEvent} event - 点击事件\n */\nconst handleClick = (event: MouseEvent) => {\n  const target = event.target as HTMLElement\n  \n  // 检查是否点击了复制按钮\n  if (target.classList.contains('copy-btn') || target.getAttribute('data-action') === 'copy-code') {\n    event.preventDefault()\n    event.stopPropagation()\n    copyCodeHandler(target as HTMLButtonElement)\n  }\n}\n\n/* \n * 功能描述: 复制代码到剪贴板\n * 参数: {HTMLButtonElement} btn - 复制按钮元素\n */\nconst copyCodeHandler = (btn: HTMLButtonElement) => {\n  const wrapper = btn.closest('.code-block-wrapper') as HTMLElement\n  if (!wrapper) return\n  \n  // 优先从 data-code 属性获取原始代码\n  let code = wrapper.getAttribute('data-code')\n  \n  if (code) {\n    // 解码 HTML 实体\n    const textarea = document.createElement('textarea')\n    textarea.innerHTML = code\n    code = textarea.value\n  } else {\n    // 降级方案：从 code 标签的 textContent 获取\n    const codeBlock = wrapper.querySelector('code')\n    code = codeBlock?.textContent || ''\n  }\n  \n  // 复制到剪贴板\n  navigator.clipboard.writeText(code).then(() => {\n    const originalHTML = btn.innerHTML\n    btn.innerHTML = `<svg class=\"w-3.5 h-3.5\" fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\n      <path stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" d=\"M5 13l4 4L19 7\"/>\n    </svg>\n    <span class=\"ml-1\">已复制</span>`\n    btn.classList.add('copy-btn-copied')\n    \n    setTimeout(() => {\n      btn.innerHTML = originalHTML\n      btn.classList.remove('copy-btn-copied')\n    }, 2000)\n  }).catch(err => {\n    console.error('复制失败:', err)\n    btn.textContent = '复制失败'\n    setTimeout(() => {\n      btn.textContent = '复制'\n    }, 2000)\n  })\n}\n</script>\n\n<style scoped>\n.dbgpt-renderer {\n  width: 100%;\n}\n\n/* Markdown 基础样式由 github-markdown-css 提供 */\n.markdown-body {\n  font-size: 14px;\n  line-height: 1.8;\n  padding: 0 16px; /* 增加左右内边距，防止内容太靠边 */\n  background-color: transparent !important; /* 强制透明背景，移除暗色主题的黑色背景 */\n}\n\n/* 标题字体大小、间距和字重 - 使用px单位而不是rem */\n.markdown-body :deep(h1) {\n  font-size: 25px;\n  font-weight: 700;\n  margin-top: 10px;\n  margin-bottom: 10px;\n}\n\n.markdown-body :deep(h2) {\n  font-size: 21px;\n  font-weight: 600;\n  margin-top: 10px;\n  margin-bottom: 10px;\n}\n\n.markdown-body :deep(h3) {\n  font-size: 18px;\n  font-weight: 600;\n  margin-top: 10px;\n  margin-bottom: 10px;\n}\n\n.markdown-body :deep(h4) {\n  font-size: 16px;\n  font-weight: 600;\n  margin-top: 10px;\n  margin-bottom: 10px;\n}\n\n.markdown-body :deep(h5) {\n  font-size: 13.6px;\n  font-weight: 500;\n  margin-top: 10px;\n  margin-bottom: 10px;\n}\n\n.markdown-body :deep(h6) {\n  font-size: 12.8px;\n  font-weight: 500;\n  margin-top: 10px;\n  margin-bottom: 10px;\n}\n\n/* 列表样式优化 */\n.markdown-body :deep(ul),\n.markdown-body :deep(ol) {\n  padding-left: 2em; /* 增加列表左侧内边距，让bullet points有足够空间 */\n  margin: 12px 0;\n}\n\n.markdown-body :deep(li) {\n  margin: 6px 0;\n}\n\n/* 暗黑模式支持 */\n:global(.dark) .markdown-body {\n  color-scheme: dark;\n}\n\n/* GitHub-style Note/Warning/Important etc. */\n.markdown-body :deep(.note),\n.markdown-body :deep(.info) {\n  border-left-color: #3b82f6;\n  border-left-width: 4px;\n  background-color: #eff6ff;\n  padding: 12px 14px;\n  border-radius: 6px;\n}\n\n.markdown-body :deep(.warning),\n.markdown-body :deep(.caution) {\n  border-left-color: #f59e0b;\n  border-left-width: 4px;\n  background-color: #fffbeb;\n  padding: 12px 14px;\n  border-radius: 6px;\n  color: #92400e;\n}\n\n.markdown-body :deep(.important) {\n  border-left-color: #8b5cf6;\n  border-left-width: 4px;\n  background-color: #f5f3ff;\n  padding: 12px 14px;\n  border-radius: 6px;\n  color: #5b21b6;\n}\n\n.markdown-body :deep(.tip) {\n  border-left-color: #10b981;\n  border-left-width: 4px;\n  background-color: #ecfdf5;\n  padding: 12px 14px;\n  border-radius: 6px;\n  color: #065f46;\n}\n\n/* 暗黑模式下的提示框 */\n.dark .markdown-body :deep(blockquote.note),\n.dark .markdown-body :deep(blockquote.info) {\n  background-color: #1e3a8a;\n  color: #bfdbfe;\n}\n\n.dark .markdown-body :deep(blockquote.warning),\n.dark .markdown-body :deep(blockquote.caution) {\n  background-color: #78350f;\n  color: #fef3c7;\n}\n\n.dark .markdown-body :deep(blockquote.important) {\n  background-color: #5b21b6;\n  color: #ede9fe;\n}\n\n.dark .markdown-body :deep(blockquote.tip) {\n  background-color: #064e3b;\n  color: #d1fae5;\n}\n\n/* 代码块样式 - 与sql-code-block/json-code-block保持一致 */\n.markdown-body :deep(.code-block-wrapper) {\n  margin: 14px 0;\n  background-color: #2d3748 !important;\n  border-radius: 8px;\n  overflow: hidden;\n  box-shadow: 0 4px 6px -1px rgba(0, 0, 0, 0.1), 0 2px 4px -1px rgba(0, 0, 0, 0.06);\n}\n\n/* 暗色模式 - 与sql-code-block/json-code-block保持一致 */\n.dark .markdown-body :deep(.code-block-wrapper) {\n  background-color: #1e293b !important;\n}\n\n.markdown-body :deep(.code-block-header) {\n  display: flex;\n  align-items: center;\n  justify-content: space-between;\n  padding: 8px 14px;\n  background-color: #1a202c !important;\n  border-bottom: 1px solid #374151;\n}\n\n/* 暗色模式 - 与sql-header保持一致 */\n.dark .markdown-body :deep(.code-block-header) {\n  background-color: #0f172a !important;\n  border-bottom-color: #1e293b;\n}\n\n.markdown-body :deep(.code-language) {\n  color: #e5e7eb;\n  font-size: 12px;\n  font-weight: 500;\n  text-transform: uppercase;\n}\n\n/* Tailwind flex工具类支持 */\n.markdown-body :deep(.flex) {\n  display: flex;\n}\n\n.markdown-body :deep(.items-center) {\n  align-items: center;\n}\n\n.markdown-body :deep(.space-x-2 > * + *) {\n  margin-left: 8px;\n}\n\n.markdown-body :deep(.ml-1) {\n  margin-left: 4px;\n}\n\n/* SVG图标尺寸支持 */\n.markdown-body :deep(.w-3\\.5) {\n  width: 14px;\n}\n\n.markdown-body :deep(.h-3\\.5) {\n  height: 14px;\n}\n\n/* SVG图标颜色 */\n.markdown-body :deep(.text-gray-400) {\n  color: #9ca3af;\n}\n\n.markdown-body :deep(.copy-btn) {\n  display: inline-flex;\n  align-items: center;\n  padding: 4px 8px;\n  font-size: 12px;\n  font-weight: 500;\n  color: #e5e7eb;\n  background-color: #3b82f6;\n  border: none;\n  border-radius: 4px;\n  cursor: pointer;\n  transition: all 0.2s ease;\n}\n\n.markdown-body :deep(.copy-btn:hover) {\n  background-color: #2563eb;\n  transform: translateY(-1px);\n}\n\n.markdown-body :deep(.copy-btn:active) {\n  transform: translateY(0);\n}\n\n/* 已复制状态 - 绿色 */\n.markdown-body :deep(.copy-btn-copied) {\n  background-color: #10b981 !important;\n}\n\n.markdown-body :deep(.copy-btn-copied:hover) {\n  background-color: #059669 !important;\n}\n\n.markdown-body :deep(pre) {\n  margin: 0;\n  padding: 14px;\n  overflow-x: auto;\n  background: #2d3748 !important;\n  /* background: #0d1117 !important;  */\n}\n\n.markdown-body :deep(pre code) {\n  background: transparent !important;\n  padding: 0;\n  font-size: 13px;\n  line-height: 1.6;\n  /* 不强制设置颜色，让hljs主题自然生效 */\n}\n\n/* highlight.js 样式支持 - 完全使用hljs官方主题 */\n.markdown-body :deep(pre code.hljs) {\n  display: block;\n  overflow-x: auto;\n  padding: 0;\n  /* github-dark.css会自动处理所有语法高亮颜色 */\n}\n\n/* 行内代码样式 */\n.markdown-body :deep(code.inline-code) {\n  background: #f3f4f6;\n  color: #1f2937;\n  padding: 3px 6px;\n  border-radius: 3px;\n  font-size: 13px;\n  font-family: 'Consolas', 'Monaco', 'Courier New', monospace;\n}\n\n.dark .markdown-body :deep(code.inline-code) {\n  background: #374151;\n  color: #e5e7eb;\n}\n\n/* 表格样式 - PC端和移动端响应式 */\n.markdown-body :deep(.table-wrapper) {\n  margin: 14px 0;\n  overflow-x: auto;\n  border-radius: 8px;\n  border: 1px solid #e5e7eb;\n}\n\n.dark .markdown-body :deep(.table-wrapper) {\n  border-color: #4b5563;\n}\n\n.markdown-body :deep(.dbgpt-table) {\n  width: 100%;\n  border-collapse: collapse;\n  font-size: 13px;\n}\n\n/* JSON 单元格样式 */\n.markdown-body :deep(.json-cell) {\n  background: #f3f4f6;\n  padding: 7px;\n  border-radius: 4px;\n  font-size: 12px;\n  margin: 0;\n  overflow-x: auto;\n  max-width: 300px;\n}\n\n.dark .markdown-body :deep(.json-cell) {\n  background: #374151;\n}\n\n/* 统一的表格样式 - PC端和移动端使用相同布局 */\n.markdown-body :deep(.dbgpt-table thead) {\n  background: #f3f4f6;\n}\n\n.dark .markdown-body :deep(.dbgpt-table thead) {\n  background: #374151;\n}\n\n.markdown-body :deep(.dbgpt-table th),\n.markdown-body :deep(.dbgpt-table td) {\n  padding: 0.75em 1em;\n  border: 1px solid #e5e7eb;\n  text-align: left;\n  white-space: nowrap; /* 防止内容换行 */\n}\n\n.dark .markdown-body :deep(.dbgpt-table th),\n.dark .markdown-body :deep(.dbgpt-table td) {\n  border-color: #4b5563;\n}\n\n.markdown-body :deep(.dbgpt-table th) {\n  font-weight: 600;\n  position: sticky;\n  top: 0;\n  z-index: 10;\n  background: #f3f4f6;\n}\n\n.dark .markdown-body :deep(.dbgpt-table th) {\n  background: #374151;\n}\n\n.markdown-body :deep(.dbgpt-table tbody tr:hover) {\n  background: #f9fafb;\n}\n\n.dark .markdown-body :deep(.dbgpt-table tbody tr:hover) {\n  background: #374151;\n}\n\n/* 移动端优化 - 使用横向滚动 */\n@media (max-width: 767px) {\n  .markdown-body :deep(.table-wrapper) {\n    /* 确保横向滚动 */\n    overflow-x: auto;\n    -webkit-overflow-scrolling: touch; /* iOS 平滑滚动 */\n  }\n  \n  .markdown-body :deep(.dbgpt-table) {\n    font-size: 13px; /* 稍微缩小字体 */\n    min-width: 100%; /* 确保表格至少占满容器宽度 */\n  }\n  \n  .markdown-body :deep(.dbgpt-table th),\n  .markdown-body :deep(.dbgpt-table td) {\n    padding: 8px 12px; /* 减小内边距以适应移动端 */\n    min-width: 80px; /* 设置最小列宽 */\n  }\n  \n  /* 第一列固定 - 表头 */\n  .markdown-body :deep(.dbgpt-table thead th:first-child) {\n    position: sticky;\n    left: 0;\n    z-index: 20; /* 最高层级 */\n    background: #f3f4f6; /* 明确的背景色 */\n    box-shadow: 2px 0 4px rgba(0, 0, 0, 0.1); /* 添加阴影增强层次感 */\n    min-width: 100px;\n  }\n  \n  .dark .markdown-body :deep(.dbgpt-table thead th:first-child) {\n    background: #374151;\n    box-shadow: 2px 0 4px rgba(0, 0, 0, 0.3);\n  }\n  \n  /* 第一列固定 - 数据行 */\n  .markdown-body :deep(.dbgpt-table tbody td:first-child) {\n    position: sticky;\n    left: 0;\n    z-index: 10; /* 比普通单元格高，但比表头低 */\n    background: #ffffff; /* 明确的背景色 */\n    box-shadow: 2px 0 4px rgba(0, 0, 0, 0.1);\n    min-width: 100px;\n  }\n  \n  .dark .markdown-body :deep(.dbgpt-table tbody td:first-child) {\n    background: #1f2937;\n    box-shadow: 2px 0 4px rgba(0, 0, 0, 0.3);\n  }\n  \n  /* 鼠标悬停行时，第一列也要变色 */\n  .markdown-body :deep(.dbgpt-table tbody tr:hover td:first-child) {\n    background: #f9fafb;\n  }\n  \n  .dark .markdown-body :deep(.dbgpt-table tbody tr:hover td:first-child) {\n    background: #374151;\n  }\n}\n\n/* 自定义视图占位符 */\n.custom-view-placeholder {\n  display: none;\n}\n\n.custom-view-wrapper {\n  margin: 1em 0;\n}\n</style>\n\n","/**\n * 认证工具函数\n * 处理cookie和localStorage之间的token同步\n */\n\n/**\n * 从cookie中获取指定名称的值\n */\nexport function getCookie(name: string): string | null {\n  if (typeof document === 'undefined') {\n    return null\n  }\n\n  const cookies = document.cookie.split(';')\n  \n  for (let i = 0; i < cookies.length; i++) {\n    const cookie = cookies[i].trim()\n    \n    // 检查这个cookie是否是我们要找的\n    if (cookie.startsWith(name + '=')) {\n      return decodeURIComponent(cookie.substring(name.length + 1))\n    }\n  }\n  \n  return null\n}\n\n/**\n * 设置cookie\n */\nexport function setCookie(name: string, value: string, days: number = 7): void {\n  if (typeof document === 'undefined') {\n    return\n  }\n\n  const date = new Date()\n  date.setTime(date.getTime() + days * 24 * 60 * 60 * 1000)\n  const expires = 'expires=' + date.toUTCString()\n  \n  document.cookie = `${name}=${encodeURIComponent(value)};${expires};path=/`\n}\n\n/**\n * 删除cookie\n */\nexport function deleteCookie(name: string): void {\n  if (typeof document === 'undefined') {\n    return\n  }\n\n  document.cookie = `${name}=;expires=Thu, 01 Jan 1970 00:00:00 UTC;path=/`\n}\n\n/**\n * 初始化认证 - 将localStorage的Authorization同步到cookie的authToken\n * 在应用启动时调用此函数\n */\nexport function initAuth(): void {\n  try {\n    // 从localStorage读取Authorization\n    const authorization = localStorage.getItem('Authorization')\n    \n    if (authorization) {\n      // 设置到cookie的authToken字段\n      setCookie('authToken', authorization, 7) // 7天过期\n      console.log('[认证] 成功将localStorage的Authorization同步到cookie的authToken')\n    } else {\n      console.warn('[认证] 未在localStorage中找到Authorization')\n    }\n  } catch (error) {\n    console.error('[认证] 初始化失败:', error)\n  }\n}\n\n/**\n * 获取当前的Authorization token\n */\nexport function getAuthToken(): string | null {\n  return localStorage.getItem('Authorization')\n}\n\n/**\n * 设置Authorization token\n */\nexport function setAuthToken(token: string): void {\n  localStorage.setItem('Authorization', token)\n}\n\n/**\n * 清除Authorization token\n */\nexport function clearAuthToken(): void {\n  localStorage.removeItem('Authorization')\n}\n\n/**\n * 检查是否已认证\n */\nexport function isAuthenticated(): boolean {\n  const token = getAuthToken()\n  return !!token && token.length > 0\n}\n\n","/**\n * Chat API 服务\n * 封装与 DB-GPT 后端的通信接口\n */\n\nimport axios, { AxiosInstance } from 'axios'\nimport type {\n  ChatApiRequest,\n  ChatApiResponse,\n  ChatApiConfig,\n  ChatApiOptions,\n  ChatApiStreamCallbacks\n} from '../types/chatapi'\nimport { getCookie } from '../utils/auth'\n\n// 默认API配置（仅作为后备值，强烈建议使用者通过 configureChatSystem 自定义）\nconst DEFAULT_API_CONFIG: ChatApiConfig = {\n  // ⚠️ 注意：这只是后备默认值！\n  // 使用者应该通过 configureChatSystem({ baseURL: 'your-url' }) 来配置\n  // 开发环境使用代理，生产环境使用实际地址\n  baseURL: import.meta.env.DEV \n    ? '/api/dbgpt'  // 开发环境默认：通过 Vite 代理 /api/dbgpt\n    : 'https://dcp.ctyun.cn:9080/dcpgray/dcpai/dbgpt',  // 生产环境默认\n  timeout: 60000, // 60秒超时\n}\n\n// 默认聊天参数\nconst DEFAULT_CHAT_OPTIONS: Required<Omit<ChatApiOptions, 'conv_uid'>> = {\n  chat_mode: 'chat_agent',\n  model_name: 'deepseek_proxyllm',\n  app_code: '055',\n  select_param: '',\n  stream: true,\n}\n\n/**\n * Chat API 客户端\n */\nclass ChatApi {\n  private apiClient: AxiosInstance\n  private config: ChatApiConfig\n\n  constructor(config?: ChatApiConfig) {\n    this.config = { ...DEFAULT_API_CONFIG, ...config }\n    \n    // 创建 axios 实例\n    this.apiClient = axios.create({\n      baseURL: this.config.baseURL,\n      timeout: this.config.timeout,\n      headers: {\n        'Content-Type': 'application/json',\n      },\n      // 开发环境使用代理是同域请求，生产环境才需要跨域 Cookie\n      withCredentials: !import.meta.env.DEV,\n    })\n\n    // 请求拦截器\n    this.apiClient.interceptors.request.use(\n      (config) => {\n        // 优先使用localStorage中的Authorization\n        const authToken = localStorage.getItem('Authorization') || this.config.authToken\n        \n        if (authToken) {\n          // 如果token不包含Bearer前缀，则添加\n          config.headers.Authorization = authToken.startsWith('Bearer ') \n            ? authToken \n            : `Bearer ${authToken}`\n        }\n        \n        // 从 cookie 中读取 authToken 并设置到自定义请求头\n        // 注意：浏览器不允许 JavaScript 直接设置 Cookie 请求头，所以使用自定义头\n        const cookieAuthToken = getCookie('authToken')\n        console.log('[Chat API] 读取 Cookie authToken:', cookieAuthToken ? 'Found' : 'Not Found')\n        console.log('[Chat API] 完整 Cookie:', document.cookie)\n        \n        if (cookieAuthToken) {\n          config.headers['X-Auth-Token'] = cookieAuthToken\n          console.log('[Chat API] 已设置 X-Auth-Token 请求头')\n        } else {\n          console.warn('[Chat API] 警告：Cookie 中没有找到 authToken')\n        }\n        \n        console.log('[Chat API] 发送请求:', {\n          url: config.url,\n          method: config.method,\n          data: config.data,\n          hasAuth: !!authToken,\n          hasXAuthToken: !!cookieAuthToken,\n          authTokenPreview: cookieAuthToken ? `${cookieAuthToken.substring(0, 30)}...` : 'N/A',\n        })\n        \n        return config\n      },\n      (error) => {\n        console.error('[Chat API] 请求错误:', error)\n        return Promise.reject(error)\n      }\n    )\n\n    // 响应拦截器\n    this.apiClient.interceptors.response.use(\n      (response) => {\n        console.log('[Chat API] 响应成功:', response.data)\n        \n        // 检查业务错误码（即使 HTTP 状态码是 200）\n        const data = response.data\n        if (data && data.success === false) {\n          // 检查 token 失效\n          if (data.err_msg && (\n            data.err_msg.includes('401') || \n            data.err_msg.includes('校验令牌失败') ||\n            data.err_msg.includes('token失效') ||\n            data.err_msg.includes('令牌失效')\n          )) {\n            console.warn('[Chat API] Token 失效:', data.err_msg)\n            // 触发全局事件\n            window.dispatchEvent(new CustomEvent('dbgpt:token-expired', { \n              detail: { \n                message: data.err_msg,\n                code: data.err_code \n              } \n            }))\n          }\n          \n          // 抛出错误，附带完整响应信息\n          const error = new Error(data.err_msg || '请求失败') as Error & { response: any }\n          error.response = data\n          throw error\n        }\n        \n        return response.data\n      },\n      (error) => {\n        console.error('[Chat API] 响应错误:', error)\n        if (error.response) {\n          // 检查 HTTP 401 错误\n          if (error.response.status === 401) {\n            console.warn('[Chat API] HTTP 401 未授权')\n            window.dispatchEvent(new CustomEvent('dbgpt:token-expired', { \n              detail: { \n                message: '认证失败，请重新登录',\n                code: '401' \n              } \n            }))\n          }\n          \n          // 服务器返回错误状态码 - 附带完整响应\n          const responseData = error.response.data\n          const message = responseData?.err_msg || responseData?.message || error.response.statusText\n          const thrownError = new Error(`API错误 (${error.response.status}): ${message}`) as Error & { response: any }\n          \n          // 如果响应中有结构化数据，使用它；否则构造一个\n          thrownError.response = responseData || {\n            success: false,\n            err_code: `HTTP_${error.response.status}`,\n            err_msg: message,\n            data: null\n          }\n          throw thrownError\n        } else if (error.request) {\n          // 请求发送但没有收到响应\n          const thrownError = new Error('网络错误: 无法连接到服务器') as Error & { response: any }\n          thrownError.response = {\n            success: false,\n            err_code: 'NETWORK_ERROR',\n            err_msg: '无法连接到服务器',\n            data: null\n          }\n          throw thrownError\n        } else {\n          // 其他错误\n          const thrownError = new Error(`请求失败: ${error.message}`) as Error & { response: any }\n          thrownError.response = {\n            success: false,\n            err_code: 'REQUEST_ERROR',\n            err_msg: error.message,\n            data: null\n          }\n          throw thrownError\n        }\n      }\n    )\n  }\n\n  /**\n   * 生成对话UID\n   */\n  private generateConvUid(): string {\n    // 生成格式: 055-xxxxxxxxx (使用时间戳)\n    const timestamp = Date.now()\n    return `055-${timestamp}`\n  }\n\n  /**\n   * 构建聊天请求参数\n   */\n  private buildChatRequest(userInput: string, options?: ChatApiOptions): ChatApiRequest {\n    const opts = { ...DEFAULT_CHAT_OPTIONS, ...options }\n    \n    return {\n      chat_mode: opts.chat_mode,\n      model_name: opts.model_name,\n      user_input: userInput,\n      app_code: opts.app_code,\n      select_param: opts.select_param,\n      conv_uid: opts.conv_uid || this.generateConvUid(),\n    }\n  }\n\n  /**\n   * 发送聊天消息（非流式）\n   * @param userInput 用户输入\n   * @param options 聊天选项\n   * @returns 聊天响应\n   */\n  async chat(userInput: string, options?: ChatApiOptions): Promise<ChatApiResponse> {\n    const requestData = this.buildChatRequest(userInput, options)\n    \n    try {\n      const response = await this.apiClient.post<ChatApiResponse>(\n        '/api/v1/chat/completions',\n        requestData\n      )\n      \n      return response as ChatApiResponse\n    } catch (error) {\n      console.error('[Chat API] 聊天请求失败:', error)\n      throw error\n    }\n  }\n\n  /**\n   * 流式聊天（Server-Sent Events / Stream）\n   * @param userInput 用户输入\n   * @param callbacks 回调函数\n   * @param options 聊天选项\n   * @returns 返回一个对象，包含 controller 和 promise\n   */\n  chatStream(\n    userInput: string,\n    callbacks: ChatApiStreamCallbacks,\n    options?: ChatApiOptions\n  ): { controller: AbortController; promise: Promise<void> } {\n    const requestData = this.buildChatRequest(userInput, options)\n    const abortController = new AbortController()\n\n    // 创建异步处理流式数据的 Promise\n    const promise = (async () => {\n      try {\n        callbacks.onStart?.()\n\n      // 获取认证token\n      const authToken = localStorage.getItem('Authorization') || this.config.authToken\n      const headers: Record<string, string> = {\n        'Content-Type': 'application/json',\n      }\n\n      if (authToken) {\n        headers.Authorization = authToken.startsWith('Bearer ')\n          ? authToken\n          : `Bearer ${authToken}`\n      }\n\n      // 从 cookie 中读取 authToken 并设置到自定义请求头\n      // 注意：浏览器不允许 JavaScript 直接设置 Cookie 请求头，所以使用自定义头\n      const cookieAuthToken = getCookie('authToken')\n      console.log('[Chat API Stream] 读取 Cookie authToken:', cookieAuthToken ? 'Found' : 'Not Found')\n      \n      if (cookieAuthToken) {\n        headers['X-Auth-Token'] = cookieAuthToken\n        console.log('[Chat API Stream] 已设置 X-Auth-Token 请求头')\n      } else {\n        console.warn('[Chat API Stream] 警告：Cookie 中没有找到 authToken')\n      }\n\n      const response = await fetch(\n        `${this.config.baseURL}/api/v1/chat/completions`,\n        {\n          method: 'POST',\n          headers,\n          body: JSON.stringify(requestData),\n          signal: abortController.signal,\n          // 开发环境使用代理是同域请求，生产环境才需要跨域 Cookie\n          credentials: import.meta.env.DEV ? 'same-origin' : 'include',\n        }\n      )\n\n      if (!response.ok) {\n        const errorText = await response.text()\n        throw new Error(`HTTP ${response.status}: ${errorText}`)\n      }\n\n      // 处理流式响应\n      const reader = response.body?.getReader()\n      const decoder = new TextDecoder()\n\n      if (!reader) {\n        throw new Error('响应体为空')\n      }\n\n      let buffer = ''\n\n      while (true) {\n        const { done, value } = await reader.read()\n\n        if (done) {\n          callbacks.onComplete?.()\n          break\n        }\n\n        // 解码数据块\n        const chunk = decoder.decode(value, { stream: true })\n        buffer += chunk\n\n        // 按行处理数据\n        const lines = buffer.split('\\n')\n        buffer = lines.pop() || '' // 保留最后一个不完整的行\n\n        for (const line of lines) {\n          const trimmedLine = line.trim()\n          \n          if (!trimmedLine) continue\n\n          // 处理 SSE 格式: data: {...} 或 data:{...}\n          if (trimmedLine.startsWith('data:')) {\n            // 去掉 \"data:\" 前缀，支持有无空格两种情况\n            const data = trimmedLine.startsWith('data: ') \n              ? trimmedLine.slice(6)  // \"data: \" 有空格\n              : trimmedLine.slice(5)  // \"data:\" 无空格\n\n            // 检查是否为结束标志\n            if (data === '[DONE]') {\n              callbacks.onComplete?.()\n              return\n            }\n\n            try {\n              const parsed: any = JSON.parse(data)\n\n              // 检查是否有 vis 字段（天翼云格式）\n              if (parsed.vis !== undefined) {\n                const visContent = parsed.vis\n                \n                // 检查是否为结束标志\n                if (visContent === '[DONE]') {\n                  callbacks.onComplete?.()\n                  return\n                }\n                \n                // 输出实际内容\n                if (visContent) {\n                  callbacks.onChunk?.(visContent)\n                }\n              } else {\n                // 标准格式：提取内容\n                const content = parsed.content || parsed.delta || ''\n                \n                if (content) {\n                  callbacks.onChunk?.(content)\n                }\n\n                // 检查是否有错误\n                if (parsed.error) {\n                  throw new Error(parsed.error)\n                }\n\n                // 检查是否完成\n                if (parsed.done) {\n                  callbacks.onComplete?.()\n                  return\n                }\n              }\n            } catch (parseError) {\n              // 如果不是JSON，尝试直接作为文本处理\n              if (data && data !== '[DONE]') {\n                callbacks.onChunk?.(data)\n              }\n            }\n          } else {\n            // 非 SSE 格式，尝试直接解析\n            try {\n              const parsed: any = JSON.parse(trimmedLine)\n              \n              // 检查是否有 vis 字段（天翼云格式）\n              if (parsed.vis !== undefined) {\n                const visContent = parsed.vis\n                \n                // 检查是否为结束标志\n                if (visContent === '[DONE]') {\n                  callbacks.onComplete?.()\n                  return\n                }\n                \n                // 输出实际内容\n                if (visContent) {\n                  callbacks.onChunk?.(visContent)\n                }\n              } else {\n                const content = parsed.content || parsed.delta || ''\n                \n                if (content) {\n                  callbacks.onChunk?.(content)\n                }\n\n                if (parsed.error) {\n                  throw new Error(parsed.error)\n                }\n\n                if (parsed.done) {\n                  callbacks.onComplete?.()\n                  return\n                }\n              }\n            } catch {\n              // 忽略无法解析的行\n              console.warn('[Chat API] 无法解析的数据行:', trimmedLine)\n            }\n          }\n        }\n      }\n\n      } catch (error) {\n        if (error instanceof Error) {\n          if (error.name === 'AbortError') {\n            console.log('[Chat API] 请求已取消')\n          } else {\n            console.error('[Chat API] 流式聊天失败:', error)\n            callbacks.onError?.(error)\n          }\n        }\n        throw error\n      }\n    })()\n\n    // 立即返回 controller 和 promise，使调用者可以立即访问 controller\n    return { controller: abortController, promise }\n  }\n\n  /**\n   * 更新API配置\n   */\n  updateConfig(config: Partial<ChatApiConfig>): void {\n    this.config = { ...this.config, ...config }\n    \n    // 更新 axios 实例配置\n    if (config.baseURL) {\n      this.apiClient.defaults.baseURL = config.baseURL\n    }\n    if (config.timeout) {\n      this.apiClient.defaults.timeout = config.timeout\n    }\n  }\n\n  /**\n   * 获取当前配置\n   */\n  getConfig(): ChatApiConfig {\n    return { ...this.config }\n  }\n}\n\n// 创建默认实例\nexport const chatApi = new ChatApi()\n\n// 导出类供自定义实例使用\nexport default ChatApi\n\n// 导出辅助工具函数\nexport const chatApiUtils = {\n  /**\n   * 生成新的对话UID\n   * @returns 格式: 055-xxxxxxxxx (时间戳)\n   */\n  generateConvUid(): string {\n    const timestamp = Date.now()\n    return `055-${timestamp}`\n  },\n\n  /**\n   * 从本地存储获取当前对话ID\n   */\n  getCurrentConvUid(): string | null {\n    return localStorage.getItem('current_conv_uid')\n  },\n\n  /**\n   * 保存当前对话ID到本地存储\n   */\n  setCurrentConvUid(convUid: string): void {\n    localStorage.setItem('current_conv_uid', convUid)\n  },\n\n  /**\n   * 清除当前对话ID\n   */\n  clearCurrentConvUid(): void {\n    localStorage.removeItem('current_conv_uid')\n  },\n}\n\n","/**\n * DB-GPT API 集成服务\n * 用于与 DB-GPT 后端进行通信\n */\n\nimport axios, { AxiosInstance } from 'axios'\nimport { getCookie } from '../utils/auth'\n\n// API 配置\nconst API_CONFIG = {\n  // 连接到真实的 DB-GPT 服务器\n  // 使用相对路径以便通过 Vite 代理转发\n  baseURL: import.meta.env.VITE_DBGPT_API_URL || '/api/dbgpt',\n  timeout: 60000,\n}\n\n// 打印当前配置（便于调试）\nconsole.log('🌐 DB-GPT 服务配置:', {\n  baseURL: API_CONFIG.baseURL\n})\n\n// 创建 axios 实例\nconst apiClient: AxiosInstance = axios.create(API_CONFIG)\n\n// 请求拦截器\napiClient.interceptors.request.use(\n  (config) => {\n    // 可以在这里添加认证 token\n    const token = localStorage.getItem('auth_token')\n    if (token) {\n      config.headers.Authorization = `Bearer ${token}`\n    }\n    return config\n  },\n  (error) => {\n    return Promise.reject(error)\n  }\n)\n\n// 响应拦截器\napiClient.interceptors.response.use(\n  (response) => {\n    return response.data\n  },\n  (error) => {\n    console.error('API Error:', error)\n    return Promise.reject(error)\n  }\n)\n\n// 类型定义\nexport interface ChatMessage {\n  role: 'user' | 'assistant'\n  content: string\n}\n\nexport interface ChatRequest {\n  conv_uid?: string\n  user_input: string\n  chat_mode?: string\n  model_name?: string\n  temperature?: number\n  max_new_tokens?: number\n}\n\nexport interface ChatResponse {\n  success: boolean\n  data: {\n    context: string\n    model_name?: string\n    conv_uid: string\n  }\n  err_code?: string\n  err_msg?: string\n}\n\nexport interface Conversation {\n  conv_uid: string\n  conv_name: string\n  create_time: string\n  messages?: ChatMessage[]\n}\n\nexport interface HistoryMessage {\n  id: number | string\n  conv_uid: string\n  role: 'human' | 'ai'\n  context: string\n  model_name?: string\n  order: number\n  create_time?: string\n}\n\nexport interface HistoryResponse {\n  success: boolean\n  data: HistoryMessage[]\n  err_code?: string\n  err_msg?: string\n}\n\n/* 反馈相关类型 */\nexport interface FeedbackReason {\n  reason_type: string\n  reason: string\n}\n\nexport interface FeedbackReasonsResponse {\n  success: boolean\n  data: FeedbackReason[]\n  err_code?: string | null\n  err_msg?: string | null\n}\n\nexport interface FeedbackParams {\n  conv_uid: string\n  message_id: string\n  feedback_type?: 'like' | 'unlike'\n  reason_types?: string[]\n  remark?: string\n}\n\nexport interface FeedbackResponse {\n  success: boolean\n  data?: any\n  err_code?: string | null\n  err_msg?: string | null\n}\n/* 反馈相关类型end */\n\n// DB-GPT API 服务接口定义\ninterface DbgptServiceInterface {\n  chat(params: ChatRequest): Promise<ChatResponse>\n  chatStream(\n    params: ChatRequest,\n    onChunk: (chunk: string) => void,\n    onComplete?: () => void,\n    onError?: (error: Error) => void\n  ): Promise<void>\n  createConversation(name?: string): Promise<Conversation>\n  getConversations(): Promise<any>\n  getConversationHistory(convUid: string): Promise<ChatMessage[]>\n  deleteConversation(convUid: string): Promise<void>\n  clearConversation(convUid: string): Promise<void>\n  getHistory(convUid: string): Promise<HistoryResponse>\n  getHistoryMessages(convUid: string): Promise<any[]>\n  clearMemory(convUid: string): Promise<any>\n  clearDialogueMemory(convUid: string): Promise<any>\n  generateConvUid(): string\n  parseDBGPTViews(content: string): Array<{ tag: string; data: any }>\n  parseDbgptViews(content: string): any[]\n  getCurrentConvUid(): string | null\n  setCurrentConvUid(convUid: string): void\n  clearCurrentConvUid(): void\n  // 反馈相关方法\n  getFeedbackReasons(): Promise<FeedbackReasonsResponse>\n  addFeedback(params: {\n    conv_uid: string\n    message_id: string\n    feedback_type: 'like' | 'unlike'\n    reason_types?: string[]\n    remark?: string\n  }): Promise<FeedbackResponse>\n  cancelFeedback(params: {\n    conv_uid: string\n    message_id: string\n  }): Promise<FeedbackResponse>\n  knowledge: any\n}\n\n// DB-GPT API 服务\nexport const dbgptService: DbgptServiceInterface = {\n  /**\n   * 发送聊天消息（普通请求）\n   */\n  async chat(params: ChatRequest): Promise<ChatResponse> {\n    return apiClient.post('/api/v1/chat/completions', params)\n  },\n\n  /**\n   * 流式聊天（Server-Sent Events）\n   */\n  async chatStream(\n    params: ChatRequest,\n    onChunk: (chunk: string) => void,\n    onComplete?: () => void,\n    onError?: (error: Error) => void\n  ): Promise<void> {\n    try {\n      const response = await fetch(`${API_CONFIG.baseURL}/api/v1/chat/completions/stream`, {\n        method: 'POST',\n        headers: {\n          'Content-Type': 'application/json',\n          'Authorization': `Bearer ${localStorage.getItem('auth_token') || ''}`,\n        },\n        body: JSON.stringify(params),\n      })\n\n      if (!response.ok) {\n        throw new Error(`HTTP error! status: ${response.status}`)\n      }\n\n      const reader = response.body?.getReader()\n      const decoder = new TextDecoder()\n\n      if (!reader) {\n        throw new Error('Response body is null')\n      }\n\n      while (true) {\n        const { done, value } = await reader.read()\n        \n        if (done) {\n          onComplete?.()\n          break\n        }\n\n        const chunk = decoder.decode(value, { stream: true })\n        const lines = chunk.split('\\n').filter(line => line.trim() !== '')\n\n        for (const line of lines) {\n          if (line.startsWith('data: ')) {\n            const data = line.slice(6)\n            \n            if (data === '[DONE]') {\n              onComplete?.()\n              return\n            }\n\n            try {\n              const parsed = JSON.parse(data)\n              \n              // 支持 OpenAI 格式\n              if (parsed.choices && parsed.choices[0]?.delta?.content) {\n                onChunk(parsed.choices[0].delta.content)\n              }\n              // 支持模拟服务器格式 {content: \"字符\"}\n              else if (parsed.content) {\n                onChunk(parsed.content)\n              }\n              // 支持错误格式 {error: \"...\"}\n              else if (parsed.error) {\n                throw new Error(parsed.error)\n              }\n            } catch (e) {\n              // 如果不是 JSON，直接传递文本\n              if (typeof e === 'object' && e instanceof Error && e.message) {\n                throw e\n              }\n              onChunk(data)\n            }\n          }\n        }\n      }\n    } catch (error) {\n      onError?.(error as Error)\n      throw error\n    }\n  },\n\n  /**\n   * 获取对话列表\n   */\n  async getConversations(): Promise<Conversation[]> {\n    const response = await apiClient.get('/api/v1/chat/conversations')\n    return response.data || []\n  },\n\n  /**\n   * 创建新对话\n   */\n  async createConversation(name?: string): Promise<Conversation> {\n    const response = await apiClient.post('/api/v1/chat/conversations', {\n      conv_name: name || `对话 ${new Date().toLocaleString()}`,\n    })\n    return response.data\n  },\n\n  /**\n   * 获取对话历史\n   */\n  async getConversationHistory(convUid: string): Promise<ChatMessage[]> {\n    const response = await apiClient.get(`/api/v1/chat/conversations/${convUid}/messages`)\n    return response.data || []\n  },\n\n  /**\n   * 删除对话\n   */\n  async deleteConversation(convUid: string): Promise<void> {\n    await apiClient.delete(`/api/v1/chat/conversations/${convUid}`)\n  },\n\n  /**\n   * 清空对话历史\n   */\n  async clearConversation(convUid: string): Promise<void> {\n    await apiClient.post(`/api/v1/chat/conversations/${convUid}/clear`)\n  },\n\n  /**\n   * 清除对话记忆（天翼云接口）\n   * 调用清除记忆接口，清除指定会话的上下文记忆\n   */\n  async clearDialogueMemory(conUid: string): Promise<{ success: boolean; err_code: string | null; err_msg: string | null; data: any }> {\n    try {\n      // 使用 fetch 直接调用，通过 Vite 代理 (POST 请求)\n      const response = await fetch(`/api/dbgpt/api/v1/chat/dialogue/clear?con_uid=${conUid}`, {\n        method: 'POST',\n        headers: {\n          'Accept': 'application/json',\n          'Content-Type': 'application/json'\n        },\n        credentials: 'include'\n      })\n      \n      if (!response.ok) {\n        throw new Error(`HTTP ${response.status}: ${response.statusText}`)\n      }\n      \n      const result = await response.json()\n      return result as any\n    } catch (error) {\n      console.error('清除对话记忆失败:', error)\n      throw error\n    }\n  },\n\n\n  /**\n   * 获取历史对话记录（使用全局配置的baseURL）\n   * @param historyId 会话ID（con_uid）\n   * @returns 历史消息列表\n   */\n  async getHistoryMessages(historyId: string): Promise<HistoryMessage[]> {\n    try {\n      console.log(`[API] 正在获取历史记录: ${historyId}`)\n      \n      // 优先使用 configManager 的配置（使用者通过 configureChatSystem 设置）\n      const { configManager } = await import('../adapters/index')\n      const globalConfig = configManager.getConfig()\n      \n      // 如果使用者配置了 baseURL，优先使用；否则尝试从 chatApi 获取；最后使用默认值\n      let baseURL = globalConfig.baseURL\n      \n      if (!baseURL) {\n        // 没有全局配置时，使用 chatApi 的配置\n        const { chatApi } = await import('./chatApi')\n        const chatApiConfig = chatApi.getConfig()\n        baseURL = chatApiConfig.baseURL || '/api/dbgpt'\n      }\n      \n      console.log(`[API] 使用 baseURL: ${baseURL} (来源: ${globalConfig.baseURL ? 'configureChatSystem' : 'chatApi默认配置'})`)\n      \n      // 获取认证信息\n      const authToken = localStorage.getItem('Authorization')\n      const cookieAuthToken = getCookie('authToken')\n      \n      // 构建请求头\n      const headers: Record<string, string> = {\n        'Accept': 'application/json'\n      }\n      \n      // 添加 Authorization 头\n      if (authToken) {\n        headers['Authorization'] = authToken.startsWith('Bearer ') \n          ? authToken \n          : `Bearer ${authToken}`\n        console.log('[API] 已设置 Authorization 头')\n      }\n      \n      // 添加 X-Auth-Token 头（从 Cookie 读取）\n      if (cookieAuthToken) {\n        headers['X-Auth-Token'] = cookieAuthToken\n        console.log('[API] 已设置 X-Auth-Token 头')\n      } else {\n        console.warn('[API] ⚠️ Cookie 中未找到 authToken')\n      }\n      \n      // 构建完整的URL\n      const url = `${baseURL}/api/v1/chat/dialogue/messages/history?con_uid=${encodeURIComponent(historyId)}`\n      console.log(`[API] 请求 URL: ${url}`)\n      \n      // 使用 fetch 发起请求\n      const response = await fetch(url, {\n        method: 'GET',\n        headers,\n        credentials: import.meta.env.DEV ? 'same-origin' : 'include',\n        cache: 'no-cache'\n      })\n      \n      if (!response.ok) {\n        const errorText = await response.text()\n        console.error(`[API] 获取历史记录失败: HTTP ${response.status}`, errorText)\n        throw new Error(`HTTP ${response.status}: 无法获取历史记录`)\n      }\n      \n      const result = await response.json()\n      console.log('[API] 历史记录响应:', result)\n      \n      // 解析不同格式的响应\n      let historyData: HistoryMessage[] = []\n      \n      // 格式1: { success: true, data: [...] }\n      if (result.success && result.data) {\n        historyData = Array.isArray(result.data) ? result.data : [result.data]\n      } \n      // 格式2: { data: [...] }\n      else if (result.data) {\n        historyData = Array.isArray(result.data) ? result.data : [result.data]\n      } \n      // 格式3: 直接数组 [...]\n      else if (Array.isArray(result)) {\n        historyData = result\n      }\n      \n      console.log(`[API] 成功获取 ${historyData.length} 条历史消息`)\n      return historyData\n      \n    } catch (error) {\n      console.error('[API] 获取历史记录失败:', error)\n      throw error\n    }\n  },\n\n  /**\n   * 获取历史记录（返回原始响应格式）\n   */\n  async getHistory(convUid: string): Promise<HistoryResponse> {\n    try {\n      const messages = await dbgptService.getHistoryMessages(convUid)\n      return {\n        success: true,\n        data: messages\n      }\n    } catch (error) {\n      return {\n        success: false,\n        data: [],\n        err_code: 'ERROR',\n        err_msg: error instanceof Error ? error.message : '获取历史记录失败'\n      }\n    }\n  },\n\n  /**\n   * 清除对话记忆\n   */\n  async clearMemory(convUid: string): Promise<any> {\n    return dbgptService.clearDialogueMemory(convUid)\n  },\n\n  /**\n   * 生成对话 UID\n   */\n  generateConvUid(): string {\n    return `conv_${Date.now()}_${Math.random().toString(36).substr(2, 9)}`\n  },\n\n  /**\n   * 解析流式响应中的 dbgpt-view 标签\n   */\n  parseDBGPTViews(content: string): Array<{ tag: string; data: any }> {\n    const regex = /<dbgpt-view[^>]*>([^<]*)<\\/dbgpt-view>/gi\n    const matches = []\n    let match\n\n    while ((match = regex.exec(content)) !== null) {\n      try {\n        const data = JSON.parse(match[1])\n        matches.push({\n          tag: match[0],\n          data\n        })\n      } catch (e) {\n        console.error('Failed to parse dbgpt-view:', e)\n      }\n    }\n\n    return matches\n  },\n\n  /**\n   * 解析 dbgpt-view 标签（别名方法）\n   */\n  parseDbgptViews(content: string): any[] {\n    return dbgptService.parseDBGPTViews(content)\n  },\n\n  /**\n   * 从本地存储获取当前对话 ID\n   */\n  getCurrentConvUid(): string | null {\n    return localStorage.getItem('current_conv_uid')\n  },\n\n  /**\n   * 保存当前对话 ID 到本地存储\n   */\n  setCurrentConvUid(convUid: string): void {\n    localStorage.setItem('current_conv_uid', convUid)\n  },\n\n  /**\n   * 清除当前对话 ID\n   */\n  clearCurrentConvUid(): void {\n    localStorage.removeItem('current_conv_uid')\n  },\n\n  /**\n   * 获取反馈原因列表\n   */\n  async getFeedbackReasons(): Promise<FeedbackReasonsResponse> {\n    return await apiClient.get('/api/v1/conv/feedback/reasons')\n  },\n\n  /**\n   * 添加反馈（点赞/踩）\n   */\n  async addFeedback(params: {\n    conv_uid: string\n    message_id: string\n    feedback_type: 'like' | 'unlike'\n    reason_types?: string[]\n    remark?: string\n  }): Promise<FeedbackResponse> {\n    return await apiClient.post('/api/v1/conv/feedback/add', params)\n  },\n\n  /**\n   * 取消反馈（取消点赞/取消踩）\n   */\n  async cancelFeedback(params: {\n    conv_uid: string\n    message_id: string\n  }): Promise<FeedbackResponse> {\n    return await apiClient.post('/api/v1/conv/feedback/cancel', params)\n  },\n\n  /**\n   * 知识库相关 API\n   */\n  knowledge: {\n    async getSpaces() {\n      return apiClient.get('/api/v1/knowledge/spaces')\n    },\n    \n    async createSpace(name: string, description?: string) {\n      return apiClient.post('/api/v1/knowledge/spaces', { name, description })\n    },\n    \n    async uploadDocument(spaceId: string, file: File) {\n      const formData = new FormData()\n      formData.append('file', file)\n      formData.append('space_id', spaceId)\n      \n      return apiClient.post('/api/v1/knowledge/documents', formData, {\n        headers: { 'Content-Type': 'multipart/form-data' }\n      })\n    }\n  }\n}\n\n// 辅助函数\nexport const dbgptUtils = {\n  /**\n   * 生成对话 UID\n   */\n  generateConvUid(): string {\n    return `conv_${Date.now()}_${Math.random().toString(36).substr(2, 9)}`\n  },\n\n  /**\n   * 解析流式响应中的 dbgpt-view 标签\n   */\n  parseDBGPTViews(content: string): Array<{ tag: string; data: any }> {\n    const regex = /<dbgpt-view[^>]*>([^<]*)<\\/dbgpt-view>/gi\n    const matches = []\n    let match\n\n    while ((match = regex.exec(content)) !== null) {\n      try {\n        const data = JSON.parse(match[1])\n        matches.push({\n          tag: match[0],\n          data\n        })\n      } catch (e) {\n        console.error('Failed to parse dbgpt-view:', e)\n      }\n    }\n\n    return matches\n  },\n\n  /**\n   * 从本地存储获取当前对话 ID\n   */\n  getCurrentConvUid(): string | null {\n    return localStorage.getItem('current_conv_uid')\n  },\n\n  /**\n   * 保存当前对话 ID 到本地存储\n   */\n  setCurrentConvUid(convUid: string): void {\n    localStorage.setItem('current_conv_uid', convUid)\n  },\n\n  /**\n   * 清除当前对话 ID\n   */\n  clearCurrentConvUid(): void {\n    localStorage.removeItem('current_conv_uid')\n  },\n\n  /* 反馈模块 */\n  /**\n   * 获取反馈原因列表\n   */\n  async getFeedbackReasons(): Promise<FeedbackReasonsResponse> {\n    return await apiClient.get('/api/v1/conv/feedback/reasons')\n  },\n\n  /**\n   * 添加反馈（点赞/踩）\n   * @param params - 反馈参数\n   * @param params.conv_uid - 会话ID\n   * @param params.message_id - 消息ID（第几条AI消息，从1开始）\n   * @param params.feedback_type - 反馈类型：like（点赞）/ unlike（踩）\n   * @param params.reason_types - 原因类型列表（踩时需要）\n   * @param params.remark - 备注（踩时可选）\n   */\n  async addFeedback(params: {\n    conv_uid: string\n    message_id: string\n    feedback_type: 'like' | 'unlike'\n    reason_types?: string[]\n    remark?: string\n  }): Promise<FeedbackResponse> {\n    return await apiClient.post('/api/v1/conv/feedback/add', params)\n  },\n\n  /**\n   * 取消反馈（取消点赞/取消踩）\n   * @param params - 反馈参数\n   * @param params.conv_uid - 会话ID\n   * @param params.message_id - 消息ID\n   */\n  async cancelFeedback(params: {\n    conv_uid: string\n    message_id: string\n  }): Promise<FeedbackResponse> {\n    return await apiClient.post('/api/v1/conv/feedback/cancel', params)\n  }\n  /* 反馈模块end */\n}\n\n// 导出类型供外部使用\nexport type DbgptService = typeof dbgptService\n\nexport default dbgptService\n\n","<template>\n  <div \n    class=\"integrated-chat h-screen flex flex-col\"\n    :style=\"props.themeConfig?.containerStyle || {}\"\n    :class=\"!props.themeConfig?.containerStyle?.backgroundColor ? 'bg-white dark:bg-gray-900' : ''\"\n  >\n    <!-- 顶部导航栏 - 支持插槽自定义 -->\n    <slot v-if=\"props.showHeader\" name=\"header\" :theme=\"{ isDark, toggleTheme }\" :conversation=\"{ currentConvUid, newConversation }\" :model=\"{ selectedModel }\">\n      <header class=\"flex items-center justify-between px-3 md:px-6 py-3 md:py-4 border-b border-gray-200 dark:border-gray-700\">\n        <div class=\"flex items-center space-x-3\">\n          <div class=\"w-8 h-8 bg-gradient-to-br from-blue-500 to-purple-600 rounded-lg flex items-center justify-center\">\n            <svg width=\"20\" height=\"20\" viewBox=\"0 0 24 24\" fill=\"white\">\n              <path d=\"M12 2l3.09 6.26L22 9.27l-5 4.87 1.18 6.88L12 17.77l-6.18 3.25L7 14.14 2 9.27l6.91-1.01L12 2z\"/>\n            </svg>\n          </div>\n          <div>\n            <h1 class=\"text-lg font-semibold text-gray-800 dark:text-gray-200\">DB-GPT Chat</h1>\n            <p class=\"text-xs text-gray-500 dark:text-gray-400\">{{ currentConvUid || '新对话' }}</p>\n          </div>\n        </div>\n        \n        <div class=\"flex items-center space-x-2\">\n          <!-- 模型选择 -->\n          <select \n            v-model=\"selectedModel\" \n            class=\"px-3 py-1.5 text-sm bg-gray-100 dark:bg-gray-800 border border-gray-300 dark:border-gray-600 rounded-md focus:outline-none focus:ring-2 focus:ring-blue-500\"\n          >\n            <option value=\"\">默认模型</option>\n          </select>\n          \n          <button @click=\"toggleTheme\" class=\"p-2 text-gray-400 hover:text-gray-600 dark:hover:text-gray-200 rounded-md hover:bg-gray-100 dark:hover:bg-gray-800\">\n            <svg v-if=\"!isDark\" width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"currentColor\">\n              <path d=\"M21.64,13a1,1,0,0,0-1.05-.14,8.05,8.05,0,0,1-3.37.73A8.15,8.15,0,0,1,9.08,5.49a8.59,8.59,0,0,1,.25-2A1,1,0,0,0,8,2.36,10.14,10.14,0,1,0,22,14.05,1,1,0,0,0,21.64,13Z\"/>\n            </svg>\n            <svg v-else width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"currentColor\">\n              <path d=\"M12,4c4.41,0,8,3.59,8,8s-3.59,8-8,8s-8-3.59-8-8S7.59,4,12,4z\"/>\n            </svg>\n          </button>\n          \n          <button @click=\"newConversation\" class=\"p-2 text-gray-400 hover:text-gray-600 dark:hover:text-gray-200 rounded-md hover:bg-gray-100 dark:hover:bg-gray-800\">\n            <svg width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\">\n              <path d=\"M12 5v14M5 12h14\"/>\n            </svg>\n          </button>\n        </div>\n      </header>\n    </slot>\n\n    <!-- 消息显示区域 -->\n    <main ref=\"messagesContainer\" class=\"flex-1 stableScrollbar overflow-y-auto overflow-x-hidden p-2 md:p-6\">\n      <div class=\"chat-content-wrapper\">\n        \n        <!-- 通用加载状态（历史记录加载时显示，但不显示\"连接中...\"） -->\n        <div v-if=\"isLoading && messages.length === 0\" class=\"flex items-center justify-center py-24\">\n          <div class=\"flex flex-col items-center gap-4\">\n            <!-- 蓝色主题 loading 动画 -->\n            <div class=\"relative\">\n              <div class=\"w-16 h-16 border-4 border-blue-100 dark:border-blue-900 rounded-full\"></div>\n              <div class=\"absolute top-0 left-0 w-16 h-16 border-4 border-blue-500 border-t-transparent rounded-full animate-spin\"></div>\n            </div>\n            <!-- 加载文字 -->\n            <div class=\"text-sm text-gray-500 dark:text-gray-400\">\n              加载中...\n            </div>\n          </div>\n        </div>\n        \n        <!-- 欢迎信息 - 支持插槽自定义 -->\n        <slot v-else-if=\"messages.length === 0 && props.showWelcome\" name=\"welcome\" :send=\"handleSend\" :testMessage=\"sendTestMessage\">\n        <div class=\"text-center py-12\">\n          <div class=\"w-16 h-16 mx-auto mb-4 bg-gradient-to-br from-blue-500 to-purple-600 rounded-2xl flex items-center justify-center\">\n            <svg width=\"32\" height=\"32\" viewBox=\"0 0 24 24\" fill=\"white\">\n              <path d=\"M12 2l3.09 6.26L22 9.27l-5 4.87 1.18 6.88L12 17.77l-6.18 3.25L7 14.14 2 9.27l6.91-1.01L12 2z\"/>\n            </svg>\n          </div>\n          <h2 class=\"text-2xl font-semibold text-gray-800 dark:text-gray-200 mb-2\">\n            开始与 DB-GPT 对话\n          </h2>\n          <p class=\"text-gray-600 dark:text-gray-400 mb-8\">\n            支持数据库查询、数据分析、可视化等功能\n          </p>\n          \n          <!-- 快速开始示例 -->\n          <div class=\"max-w-4xl mx-auto\">\n            <p class=\"text-sm text-gray-500 dark:text-gray-400 mb-4\">\n              💡 快速测试 - 点击测试各种数据类型的移动端适配效果\n            </p>\n            \n            <!-- Phase 1 测试 -->\n            <div class=\"mb-6\">\n              <p class=\"text-xs font-semibold text-gray-600 dark:text-gray-400 mb-3 uppercase\">Phase 1 功能</p>\n              <div class=\"grid grid-cols-1 md:grid-cols-2 gap-4\">\n                <!-- Chart-View -->\n                <div class=\"bg-blue-50 dark:bg-blue-900/20 rounded-xl border border-blue-200 dark:border-blue-800 p-4\">\n                  <div class=\"flex items-center space-x-2 mb-3\">\n                    <span class=\"text-2xl\">📊</span>\n                    <span class=\"text-sm font-medium text-gray-700 dark:text-gray-300\">Chart-View 图表展示</span>\n                  </div>\n                  <select \n                    v-model=\"selectedScenario.chartView\"\n                    @change=\"sendTestMessage('chart-view', selectedScenario.chartView)\"\n                    class=\"w-full px-3 py-2 text-sm bg-white dark:bg-gray-800 border border-blue-300 dark:border-blue-700 rounded-lg focus:outline-none focus:ring-2 focus:ring-blue-500\"\n                  >\n                    <option value=\"\">选择测试场景...</option>\n                    <option value=\"simple\">简单场景 (单系列 6个点)</option>\n                    <option value=\"medium\">中等场景 (多系列 6个月×4个地区)</option>\n                    <option value=\"complex\">复杂场景 (12个月×8个地区)</option>\n                  </select>\n                </div>\n                \n                <!-- References -->\n                <div class=\"bg-green-50 dark:bg-green-900/20 rounded-xl border border-green-200 dark:border-green-800 p-4\">\n                  <div class=\"flex items-center space-x-2 mb-3\">\n                    <span class=\"text-2xl\">📚</span>\n                    <span class=\"text-sm font-medium text-gray-700 dark:text-gray-300\">知识库引用</span>\n                  </div>\n                  <select \n                    v-model=\"selectedScenario.references\"\n                    @change=\"sendTestMessage('references', selectedScenario.references)\"\n                    class=\"w-full px-3 py-2 text-sm bg-white dark:bg-gray-800 border border-green-300 dark:border-green-700 rounded-lg focus:outline-none focus:ring-2 focus:ring-green-500\"\n                  >\n                    <option value=\"\">选择测试场景...</option>\n                    <option value=\"simple\">简单场景 (1个文档 2个片段)</option>\n                    <option value=\"complex\">复杂场景 (3个文档 多个片段)</option>\n                  </select>\n                </div>\n                \n                <!-- Agent Plans -->\n                <div class=\"bg-purple-50 dark:bg-purple-900/20 rounded-xl border border-purple-200 dark:border-purple-800 p-4\">\n                  <div class=\"flex items-center space-x-2 mb-3\">\n                    <span class=\"text-2xl\">📋</span>\n                    <span class=\"text-sm font-medium text-gray-700 dark:text-gray-300\">执行计划</span>\n                  </div>\n                  <select \n                    v-model=\"selectedScenario.agentPlans\"\n                    @change=\"sendTestMessage('agent-plans', selectedScenario.agentPlans)\"\n                    class=\"w-full px-3 py-2 text-sm bg-white dark:bg-gray-800 border border-purple-300 dark:border-purple-700 rounded-lg focus:outline-none focus:ring-2 focus:ring-purple-500\"\n                  >\n                    <option value=\"\">选择测试场景...</option>\n                    <option value=\"simple\">简单场景 (3个步骤)</option>\n                    <option value=\"complex\">复杂场景 (5个步骤)</option>\n                  </select>\n                </div>\n                \n                <!-- Agent Messages -->\n                <div class=\"bg-pink-50 dark:bg-pink-900/20 rounded-xl border border-pink-200 dark:border-pink-800 p-4\">\n                  <div class=\"flex items-center space-x-2 mb-3\">\n                    <span class=\"text-2xl\">💬</span>\n                    <span class=\"text-sm font-medium text-gray-700 dark:text-gray-300\">对话流</span>\n                  </div>\n                  <select \n                    v-model=\"selectedScenario.agentMessages\"\n                    @change=\"sendTestMessage('agent-messages', selectedScenario.agentMessages)\"\n                    class=\"w-full px-3 py-2 text-sm bg-white dark:bg-gray-800 border border-pink-300 dark:border-pink-700 rounded-lg focus:outline-none focus:ring-2 focus:ring-pink-500\"\n                  >\n                    <option value=\"\">选择测试场景...</option>\n                    <option value=\"simple\">简单场景 (3条消息)</option>\n                    <option value=\"complex\">复杂场景 (4条消息 + 引用)</option>\n                  </select>\n                </div>\n              </div>\n            </div>\n            \n            <!-- Phase 2 测试 -->\n            <div>\n              <p class=\"text-xs font-semibold text-gray-600 dark:text-gray-400 mb-3 uppercase\">Phase 2 功能</p>\n              <div class=\"grid grid-cols-1 md:grid-cols-2 gap-4\">\n                <!-- HTML Preview -->\n                <div class=\"bg-orange-50 dark:bg-orange-900/20 rounded-xl border border-orange-200 dark:border-orange-800 p-4\">\n                  <div class=\"flex items-center space-x-2 mb-3\">\n                    <span class=\"text-2xl\">🌐</span>\n                    <span class=\"text-sm font-medium text-gray-700 dark:text-gray-300\">HTML 预览</span>\n                  </div>\n                  <select \n                    v-model=\"selectedScenario.htmlPreview\"\n                    @change=\"sendTestMessage('html-preview', selectedScenario.htmlPreview)\"\n                    class=\"w-full px-3 py-2 text-sm bg-white dark:bg-gray-800 border border-orange-300 dark:border-orange-700 rounded-lg focus:outline-none focus:ring-2 focus:ring-orange-500\"\n                  >\n                    <option value=\"\">选择测试场景...</option>\n                    <option value=\"simple\">简单场景 (基础卡片)</option>\n                    <option value=\"complex\">复杂场景 (复杂布局)</option>\n                  </select>\n                </div>\n                \n                <!-- SVG Preview -->\n                <div class=\"bg-teal-50 dark:bg-teal-900/20 rounded-xl border border-teal-200 dark:border-teal-800 p-4\">\n                  <div class=\"flex items-center space-x-2 mb-3\">\n                    <span class=\"text-2xl\">🎨</span>\n                    <span class=\"text-sm font-medium text-gray-700 dark:text-gray-300\">SVG 图形</span>\n                  </div>\n                  <select \n                    v-model=\"selectedScenario.svgPreview\"\n                    @change=\"sendTestMessage('svg-preview', selectedScenario.svgPreview)\"\n                    class=\"w-full px-3 py-2 text-sm bg-white dark:bg-gray-800 border border-teal-300 dark:border-teal-700 rounded-lg focus:outline-none focus:ring-2 focus:ring-teal-500\"\n                  >\n                    <option value=\"\">选择测试场景...</option>\n                    <option value=\"simple\">简单场景 (基础图形)</option>\n                  </select>\n                </div>\n                \n                <!-- Vis Dashboard -->\n                <div class=\"bg-indigo-50 dark:bg-indigo-900/20 rounded-xl border border-indigo-200 dark:border-indigo-800 p-4\">\n                  <div class=\"flex items-center space-x-2 mb-3\">\n                    <span class=\"text-2xl\">📈</span>\n                    <span class=\"text-sm font-medium text-gray-700 dark:text-gray-300\">仪表盘</span>\n                  </div>\n                  <select \n                    v-model=\"selectedScenario.visDashboard\"\n                    @change=\"sendTestMessage('vis-dashboard', selectedScenario.visDashboard)\"\n                    class=\"w-full px-3 py-2 text-sm bg-white dark:bg-gray-800 border border-indigo-300 dark:border-indigo-700 rounded-lg focus:outline-none focus:ring-2 focus:ring-indigo-500\"\n                  >\n                    <option value=\"\">选择测试场景...</option>\n                    <option value=\"simple\">简单场景 (4个图表)</option>\n                  </select>\n                </div>\n                \n                <!-- Vis Code -->\n                <div class=\"bg-cyan-50 dark:bg-cyan-900/20 rounded-xl border border-cyan-200 dark:border-cyan-800 p-4\">\n                  <div class=\"flex items-center space-x-2 mb-3\">\n                    <span class=\"text-2xl\">💻</span>\n                    <span class=\"text-sm font-medium text-gray-700 dark:text-gray-300\">代码执行</span>\n                  </div>\n                  <select \n                    v-model=\"selectedScenario.visCode\"\n                    @change=\"sendTestMessage('vis-code', selectedScenario.visCode)\"\n                    class=\"w-full px-3 py-2 text-sm bg-white dark:bg-gray-800 border border-cyan-300 dark:border-cyan-700 rounded-lg focus:outline-none focus:ring-2 focus:ring-cyan-500\"\n                  >\n                    <option value=\"\">选择测试场景...</option>\n                    <option value=\"success\">成功场景 (正常输出)</option>\n                    <option value=\"error\">错误场景 (异常处理)</option>\n                  </select>\n                </div>\n              </div>\n            </div>\n            \n            <!-- 智能流式演示 -->\n            <div class=\"mt-8 border-t border-gray-200 dark:border-gray-700 pt-6\">\n              <p class=\"text-xs font-semibold text-gray-600 dark:text-gray-400 mb-3 uppercase\">🎬 智能演示</p>\n              <div class=\"flex flex-col gap-3\">\n                <button\n                  @click=\"startStreamingDemo\"\n                  :disabled=\"isLoading || isStreaming\"\n                  class=\"w-full px-6 py-4 bg-gradient-to-r from-purple-500 to-pink-500 hover:from-purple-600 hover:to-pink-600 disabled:from-gray-400 disabled:to-gray-500 text-white rounded-xl font-medium shadow-lg hover:shadow-xl transition-all duration-200 flex items-center justify-center space-x-2\"\n                >\n                  <span class=\"text-xl\">🎬</span>\n                  <span>{{ isStreaming ? '演示中...' : '展示所有类型 (智能流式)' }}</span>\n                </button>\n                <p class=\"text-xs text-gray-500 dark:text-gray-400 text-center\">\n                  智能流式展示所有8种类型 · HTML/SVG使用流式效果 · JSON数据瞬时加载\n                </p>\n              </div>\n            </div>\n            \n            <div class=\"mt-6 text-xs text-gray-500 dark:text-gray-400 text-center\">\n              <p>点击测试按钮查看各种数据类型在移动端和PC端的适配效果</p>\n            </div>\n          </div>\n        </div>\n        </slot>\n\n        <!-- 消息列表 -->\n        <div v-for=\"message in messages\" :key=\"message.id\" class=\"message-item\">\n          <!-- 用户消息 -->\n          <div v-if=\"message.role === 'user'\" class=\"flex justify-end mb-4\">\n            <div \n              class=\"user-message max-w-2xl\"\n              :style=\"props.themeConfig?.userMessageStyle || {}\"\n            >\n              {{ message.content }}\n            </div>\n          </div>\n\n          <!-- AI消息 -->\n          <div v-else class=\"flex justify-start mb-4\">\n            <div class=\"flex flex-col space-y-2 max-w-full w-full\">\n              <!-- AI头像 - 可配置显示/隐藏 -->\n              <div v-if=\"props.themeConfig?.showAiAvatar !== false\" class=\"flex items-center space-x-2\">\n                <!-- 自定义头像图片 -->\n                <img \n                  v-if=\"props.themeConfig?.aiAvatarUrl\"\n                  :src=\"props.themeConfig.aiAvatarUrl\"\n                  alt=\"AI\"\n                  class=\"ai-avatar flex-shrink-0 object-cover\"\n                  :style=\"props.themeConfig?.aiAvatarStyle || {}\"\n                />\n                <!-- 默认头像 -->\n                <div \n                  v-else \n                  class=\"ai-avatar bg-gradient-to-br from-blue-500 to-purple-600 flex items-center justify-center flex-shrink-0\"\n                  :style=\"props.themeConfig?.aiAvatarStyle || {}\"\n                >\n                  <svg width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"white\">\n                    <path d=\"M12 2l3.09 6.26L22 9.27l-5 4.87 1.18 6.88L12 17.77l-6.18 3.25L7 14.14 2 9.27l6.91-1.01L12 2z\"/>\n                  </svg>\n                </div>\n              </div>\n              \n              <!-- AI消息容器 -->\n              <div class=\"ai-message-wrapper w-full min-w-0\">\n                <!-- AI内容 - 上方部分 -->\n                <div \n                  class=\"ai-message-content\"\n                  :style=\"props.themeConfig?.aiMessageStyle || {}\"\n                >\n                  <DBGPTRenderer \n                    :content=\"message.content\" \n                    :thinking=\"message.thinking\"\n                    :streaming=\"message.streaming\"\n                  />\n                </div>\n                \n                <!-- AI消息底部插槽 - 下方部分 -->\n                <slot \n                  name=\"ai-message-footer\" \n                  :message=\"message\"\n                  :messageId=\"message.id\"\n                  :content=\"message.content\"\n                  :isStreaming=\"message.streaming\"\n                >\n                  <!-- 默认反馈按钮 - 有内容后就显示（流式传输期间也显示） -->\n                  <div v-if=\"message.content\" class=\"feedback-actions\">\n                    <!-- 点赞按钮 -->\n                    <button \n                      @click=\"handleLike(message.id)\"\n                      class=\"feedback-btn\"\n                      :class=\"{ active: message.feedback?.liked }\"\n                      title=\"点赞\"\n                    >\n                      <svg width=\"14\" height=\"14\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\">\n                        <path d=\"M14 9V5a3 3 0 0 0-3-3l-4 9v11h11.28a2 2 0 0 0 2-1.7l1.38-9a2 2 0 0 0-2-2.3zM7 22H4a2 2 0 0 1-2-2v-7a2 2 0 0 1 2-2h3\"></path>\n                      </svg>\n                    </button>\n                    \n                    <!-- 踩按钮 - 使用 Element Plus Popover -->\n                    <el-popover\n                      v-if=\"!message.feedback?.disliked\"\n                      v-model:visible=\"dislikePopoverVisible[message.id]\"\n                      placement=\"top\"\n                      :width=\"320\"\n                      trigger=\"click\"\n                      :hide-after=\"0\"\n                      @show=\"openDislikeModal(message.id)\"\n                    >\n                      <template #reference>\n                        <button \n                          class=\"feedback-btn\"\n                          title=\"踩\"\n                        >\n                          <svg width=\"14\" height=\"14\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\">\n                            <path d=\"M10 15v4a3 3 0 0 0 3 3l4-9V2H5.72a2 2 0 0 0-2 1.7l-1.38 9a2 2 0 0 0 2 2.3zm7-13h2.67A2.31 2.31 0 0 1 22 4v7a2.31 2.31 0 0 1-2.33 2H17\"></path>\n                          </svg>\n                        </button>\n                      </template>\n                      \n                      <!-- Popover 内容 - 阻止点击事件冒泡 -->\n                      <div class=\"dislike-popover-content\" @click.stop>\n                        <div class=\"dislike-popover-header\">\n                          <h3 class=\"text-sm font-semibold text-gray-800 dark:text-gray-200 mb-3\">请告诉我们您不满意的原因</h3>\n                        </div>\n                        \n                        <!-- 原因选项 -->\n                        <div class=\"dislike-reasons mb-3\">\n                          <!-- 加载中状态 -->\n                          <div v-if=\"feedbackReasonsLoading\" class=\"flex items-center justify-center py-4\">\n                            <div class=\"animate-spin w-4 h-4 border-2 border-blue-500 border-t-transparent rounded-full mr-2\"></div>\n                            <span class=\"text-sm text-gray-500\">加载中...</span>\n                          </div>\n                          \n                          <!-- 原因按钮 -->\n                          <button\n                            v-else\n                            v-for=\"reason in feedbackReasons\"\n                            :key=\"reason.reason_type\"\n                            @click=\"toggleReason(reason.reason_type)\"\n                            class=\"dislike-reason-btn\"\n                            :class=\"{ selected: selectedReasons.includes(reason.reason_type) }\"\n                          >\n                            {{ reason.reason }}\n                          </button>\n                        </div>\n                        \n                        <!-- 备注输入 -->\n                        <div class=\"dislike-remark mb-3\">\n                          <el-input\n                            v-model=\"feedbackRemark\"\n                            type=\"textarea\"\n                            :rows=\"3\"\n                            placeholder=\"描述一下具体问题或更优的答案\"\n                            class=\"w-full\"\n                          />\n                        </div>\n                        \n                        <!-- 底部按钮 -->\n                        <div class=\"dislike-popover-footer flex justify-end gap-2\">\n                          <el-button size=\"small\" @click=\"closeDislikePopover(message.id)\" :disabled=\"dislikeLoading\">取消</el-button>\n                          <el-button size=\"small\" type=\"primary\" @click=\"confirmDislike(message.id)\" :loading=\"dislikeLoading\">确认</el-button>\n                        </div>\n                      </div>\n                    </el-popover>\n                    \n                    <!-- 取消踩按钮 -->\n                    <button \n                      v-else\n                      @click=\"handleCancelDislike(message.id)\"\n                      class=\"feedback-btn active\"\n                      title=\"取消踩\"\n                    >\n                      <svg width=\"14\" height=\"14\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\">\n                        <path d=\"M10 15v4a3 3 0 0 0 3 3l4-9V2H5.72a2 2 0 0 0-2 1.7l-1.38 9a2 2 0 0 0 2 2.3zm7-13h2.67A2.31 2.31 0 0 1 22 4v7a2.31 2.31 0 0 1-2.33 2H17\"></path>\n                      </svg>\n                    </button>\n                    \n                    <!-- 复制按钮 -->\n                    <button \n                      @click=\"handleCopy(message.content)\"\n                      class=\"feedback-btn\"\n                      title=\"复制\"\n                    >\n                      <svg width=\"14\" height=\"14\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\">\n                        <rect x=\"9\" y=\"9\" width=\"13\" height=\"13\" rx=\"2\" ry=\"2\"></rect>\n                        <path d=\"M5 15H4a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h9a2 2 0 0 1 2 2v1\"></path>\n                      </svg>\n                    </button>\n                  </div>\n                </slot>\n              </div>\n            </div>\n          </div>\n        </div>\n\n        <!-- 加载状态（仅在非历史记录加载时显示\"连接中...\"） -->\n        <div v-if=\"isLoading && !isStreaming && !isLoadingHistory\" class=\"flex justify-start mb-4\">\n          <div class=\"flex items-start space-x-3\">\n            <div class=\"w-8 h-8 bg-gradient-to-br from-blue-500 to-purple-600 rounded-lg flex items-center justify-center flex-shrink-0 mt-1\">\n              <svg width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"white\">\n                <path d=\"M12 2l3.09 6.26L22 9.27l-5 4.87 1.18 6.88L12 17.77l-6.18 3.25L7 14.14 2 9.27l6.91-1.01L12 2z\"/>\n              </svg>\n            </div>\n            <div class=\"flex items-center space-x-2 text-gray-500 dark:text-gray-400\">\n              <div class=\"animate-spin w-3 h-3 border-2 border-blue-500 border-t-transparent rounded-full\"></div>\n              <span class=\"text-sm\">连接中...</span>\n            </div>\n          </div>\n        </div>\n\n        <!-- 错误提示 -->\n        <div v-if=\"errorMessage\" class=\"bg-red-50 dark:bg-red-900/20 border border-red-200 dark:border-red-800 rounded-lg p-4\">\n          <div class=\"flex items-start\">\n            <svg class=\"w-5 h-5 text-red-500 mr-2 flex-shrink-0 mt-0.5\" fill=\"currentColor\" viewBox=\"0 0 20 20\">\n              <path fill-rule=\"evenodd\" d=\"M10 18a8 8 0 100-16 8 8 0 000 16zM8.707 7.293a1 1 0 00-1.414 1.414L8.586 10l-1.293 1.293a1 1 0 101.414 1.414L10 11.414l1.293 1.293a1 1 0 001.414-1.414L11.414 10l1.293-1.293a1 1 0 00-1.414-1.414L10 8.586 8.707 7.293z\" clip-rule=\"evenodd\"/>\n            </svg>\n            <div class=\"flex-1\">\n              <p class=\"text-sm font-medium text-red-800 dark:text-red-300\">{{ errorMessage }}</p>\n              <button \n                @click=\"errorMessage = ''\"\n                class=\"mt-2 text-xs text-red-600 dark:text-red-400 hover:underline\"\n              >\n                关闭\n              </button>\n            </div>\n          </div>\n        </div>\n      </div>\n    </main>\n\n    <!-- 输入区域 - 支持插槽自定义 -->\n    <slot \n      v-if=\"props.showInput\"\n      name=\"input\" \n      :input=\"{ inputMessage, handleSend, isLoading, isStreaming, isPaused }\"\n      :actions=\"{ handlePause, handleRegenerate, handleClearMemory }\"\n      :messages=\"messages\"\n    >\n      <div class=\"p-4 bg-white dark:bg-gray-900 border-t border-gray-200 dark:border-gray-700\">\n        <div class=\"max-w-5xl mx-auto\">\n          <div class=\"relative bg-gray-50 dark:bg-gray-800 rounded-2xl border border-gray-200 dark:border-gray-700\">\n            \n            <!-- 顶部操作按钮区域 -->\n            <div class=\"flex items-center justify-end px-4 py-2 border-b border-gray-200 dark:border-gray-700\">\n              <!-- 右侧操作按钮：暂停、重新回答、清除记忆 (始终显示，通过禁用状态控制) -->\n              <div class=\"flex items-center gap-2\">\n                <!-- 暂停按钮 - 只在流式传输中启用 -->\n                <button\n                  @click=\"handlePause\"\n                  :disabled=\"!isStreaming || isPaused\"\n                  :class=\"[\n                    'p-2 rounded-lg transition-all',\n                    isStreaming && !isPaused\n                      ? 'text-yellow-600 hover:text-yellow-700 dark:text-yellow-500 hover:bg-yellow-50 dark:hover:bg-yellow-900/20 cursor-pointer'\n                      : 'text-gray-300 dark:text-gray-600 cursor-not-allowed'\n                  ]\"\n                  title=\"暂停\"\n                >\n                  <svg width=\"18\" height=\"18\" viewBox=\"0 0 24 24\" fill=\"currentColor\">\n                    <rect x=\"6\" y=\"5\" width=\"4\" height=\"14\" rx=\"1\"/>\n                    <rect x=\"14\" y=\"5\" width=\"4\" height=\"14\" rx=\"1\"/>\n                  </svg>\n                </button>\n                \n                <!-- 重新回答按钮 - 有对话历史且非加载/流式状态时启用 -->\n                <button\n                  @click=\"handleRegenerate\"\n                  :disabled=\"messages.length === 0 || isStreaming || isLoading\"\n                  :class=\"[\n                    'p-2 rounded-lg transition-all',\n                    messages.length > 0 && !isStreaming && !isLoading\n                      ? 'text-blue-500 hover:text-blue-600 dark:text-blue-400 hover:bg-blue-50 dark:hover:bg-blue-900/20 cursor-pointer'\n                      : 'text-gray-300 dark:text-gray-600 cursor-not-allowed'\n                  ]\"\n                  title=\"重新回答\"\n                >\n                  <svg width=\"18\" height=\"18\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\">\n                    <path d=\"M23 4v6h-6M1 20v-6h6\"/>\n                    <path d=\"M3.51 9a9 9 0 0114.85-3.36L23 10M1 14l4.64 4.36A9 9 0 0020.49 15\"/>\n                  </svg>\n                </button>\n                \n                <!-- 清除记忆按钮 - 有对话历史且非加载状态时启用 -->\n                <button\n                  @click=\"handleClearMemory\"\n                  :disabled=\"messages.length === 0 || isLoading\"\n                  :class=\"[\n                    'p-2 rounded-lg transition-all',\n                    messages.length > 0 && !isLoading\n                      ? 'text-gray-500 hover:text-red-500 dark:text-gray-400 dark:hover:text-red-400 hover:bg-red-50 dark:hover:bg-red-900/20 cursor-pointer'\n                      : 'text-gray-300 dark:text-gray-600 cursor-not-allowed'\n                  ]\"\n                  title=\"清除记忆\"\n                >\n                  <svg width=\"18\" height=\"18\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\">\n                    <path d=\"M3 6h18M8 6V4a2 2 0 0 1 2-2h4a2 2 0 0 1 2 2v2m3 0v14a2 2 0 0 1-2 2H7a2 2 0 0 1-2-2V6h14z\"/>\n                  </svg>\n                </button>\n              </div>\n            </div>\n            \n            <!-- 中间输入框区域 -->\n            <div class=\"px-4 py-2\">\n              <textarea\n                v-model=\"inputMessage\"\n                placeholder=\"可以问我任何问题，使用shift + Enter 换行\"\n                class=\"w-full bg-transparent text-gray-700 dark:text-gray-200 placeholder-gray-400 dark:placeholder-gray-500 resize-none outline-none border-none\"\n                style=\"height: 100px; line-height: 1.6;\"\n                @keydown.enter.exact=\"handleSend\"\n                @keydown.enter.shift.exact.prevent=\"inputMessage += '\\n'\"\n                :disabled=\"isLoading\"\n              ></textarea>\n            </div>\n            \n            <!-- 底部发送按钮区域 -->\n            <div class=\"flex items-center justify-between px-4 py-2 border-t border-gray-200 dark:border-gray-700\">\n              <!-- 左侧提示文字 -->\n              <div class=\"text-xs text-gray-400 dark:text-gray-500\">\n                <span v-if=\"isPaused\" class=\"text-yellow-600 dark:text-yellow-500\">⏸️ 已暂停</span>\n                <span v-else-if=\"isStreaming\" class=\"text-blue-500 dark:text-blue-400\">⚡ 生成中...</span>\n                <span v-else>使用 shift + Enter 换行</span>\n              </div>\n              \n              <!-- 右侧发送按钮 -->\n              <button\n                @click=\"handleSend\"\n                :disabled=\"!inputMessage.trim() || isLoading\"\n                class=\"px-6 py-2 bg-blue-500 hover:bg-blue-600 disabled:bg-gray-300 dark:disabled:bg-gray-700 disabled:text-gray-400 text-white rounded-full font-medium transition-all disabled:cursor-not-allowed flex items-center gap-2\"\n                title=\"发送 (Enter)\"\n              >\n                <svg v-if=\"!isLoading\" width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"currentColor\">\n                  <path d=\"M2.01 21L23 12 2.01 3 2 10l15 2-15 2z\"/>\n                </svg>\n                <div v-else class=\"animate-spin w-4 h-4 border-2 border-white border-t-transparent rounded-full\"></div>\n                <span class=\"text-sm\">发送</span>\n              </button>\n            </div>\n            \n          </div>\n        </div>\n      </div>\n    </slot>\n  </div>\n</template>\n\n<script setup lang=\"ts\">\nimport { ref, computed, onMounted, onUnmounted, nextTick } from 'vue'\nimport { useRoute } from 'vue-router'\nimport { ElPopover, ElInput, ElButton, ElMessage } from 'element-plus'\nimport axios from 'axios'\nimport DBGPTRenderer from '@/components/DBGPTRenderer.vue'\nimport { chatApi, chatApiUtils } from '../services/chatApi'\nimport { dbgptService, type FeedbackReason } from '../services/dbgpt'\n\nconst route = useRoute()\n\n// 定义 props\n/* 主题配置接口 - 支持完整的样式对象 */\ninterface ChatThemeConfig {\n  // 整体容器样式（可配置背景色、padding等）\n  containerStyle?: Record<string, any>\n  \n  // 用户消息样式（可配置背景色、文字颜色、边框、阴影、圆角等）\n  userMessageStyle?: Record<string, any>\n  \n  // AI消息样式（可配置背景色、文字颜色、边框、阴影、圆角等）\n  aiMessageStyle?: Record<string, any>\n  \n  // AI头像配置\n  showAiAvatar?: boolean        // 是否显示AI头像，默认 true\n  aiAvatarUrl?: string          // AI头像图片URL（优先使用）\n  aiAvatarStyle?: Record<string, any>  // AI头像样式（可配置大小、圆角、边框等）\n}\n\n/* 反馈配置接口 - 支持自定义反馈接口 */\ninterface FeedbackConfig {\n  // 自定义请求头（应用到所有反馈接口）\n  headers?: Record<string, string> | (() => Record<string, string>)\n  \n  // 自定义添加反馈的函数\n  addFeedback?: (params: {\n    conv_uid: string\n    message_id: string\n    feedback_type: 'like' | 'unlike'\n    reason_types?: string[]\n    remark?: string\n  }) => Promise<any>\n  \n  // 自定义取消反馈的函数\n  cancelFeedback?: (params: {\n    conv_uid: string\n    message_id: string\n  }) => Promise<any>\n  \n  // 自定义获取反馈原因列表的函数\n  getFeedbackReasons?: () => Promise<any>\n  \n  // 是否在切换反馈类型时先取消原反馈（默认false，即直接覆盖）\n  cancelBeforeSwitch?: boolean\n}\n\ninterface Props {\n  showHeader?: boolean  // 是否显示头部，默认 true\n  showInput?: boolean   // 是否显示输入框，默认 true\n  showWelcome?: boolean // 是否显示欢迎页，默认 true\n  modelName?: string    // 模型名称，默认为空（使用系统默认）\n  chatId?: string       // 对话ID\n  scene?: string        // 场景\n  appCode?: string      // 应用代码\n  apiBaseUrl?: string   // API基础地址\n  themeConfig?: ChatThemeConfig  // 主题配置\n  feedbackConfig?: FeedbackConfig  // 反馈配置\n}\n\nconst props = withDefaults(defineProps<Props>(), {\n  showHeader: true,\n  showInput: true,\n  showWelcome: true,\n  modelName: 'deepseek_proxyllm' // 默认使用 deepseek_proxyllm\n})\n\n// 定义 emit\nconst emit = defineEmits<{\n  'token-expired': [detail: { message: string; code: string }]\n  'error': [error: { success: boolean; err_code: string; err_msg: string; data: any }]\n  'message-sent': []\n  'message-complete': []\n  'history-loaded': [] // 🔧 历史记录加载完成事件\n}>()\n\ninterface Message {\n  id: string\n  role: 'user' | 'assistant'\n  content: string\n  thinking?: boolean\n  streaming?: boolean  // 标识消息是否还在流式传输中\n  feedback?: {\n    liked: boolean    // 是否已点赞\n    disliked: boolean // 是否已踩\n  }\n}\n\nconst messages = ref<Message[]>([])\nconst inputMessage = ref('')\nconst isLoading = ref(false)\nconst isLoadingHistory = ref(false) // 是否正在加载历史记录\nconst isStreaming = ref(false)\nconst isPaused = ref(false) // 是否已暂停\nconst lastUserInput = ref('') // 最后一次用户输入\nconst useStreaming = ref(true)\nconst isDarkMode = ref(false)\nconst errorMessage = ref('')\nconst selectedModel = ref(props.modelName || '') // 使用 prop 传入的 modelName\n\n/* 反馈模块 */\nconst feedbackReasons = ref<FeedbackReason[]>([])  // 反馈原因列表\nconst feedbackReasonsLoading = ref(false)  // 反馈原因列表加载状态\nconst currentFeedbackMessageId = ref('')  // 当前正在反馈的消息ID\nconst selectedReasons = ref<string[]>([])  // 选中的原因\nconst feedbackRemark = ref('')  // 反馈备注\nconst dislikePopoverVisible = ref<Record<string, boolean>>({})  // 每个消息的 Popover 显示状态\nconst dislikeLoading = ref(false)  // 踩的提交 loading 状态\n/* 反馈模块end */\nconst currentConvUid = ref<string | null>(null)\nconst messagesContainer = ref<HTMLElement>()\nlet currentAbortController: AbortController | null = null // 当前请求的AbortController\n\n// 场景选择状态\nconst selectedScenario = ref({\n  chartView: '',\n  references: '',\n  agentPlans: '',\n  agentMessages: '',\n  htmlPreview: '',\n  svgPreview: '',\n  visDashboard: '',\n  visCode: ''\n})\n\nconst isDark = computed(() => isDarkMode.value)\n\nconst generateId = () => Date.now().toString() + Math.random().toString(36).substr(2, 9)\n\n// 加载历史记录\n/*\n * 功能描述: 加载历史记录\n * 逻辑说明: 通过 historyId 加载对话历史，显示 loading 状态\n * 去重策略: 按 order 分组，每组只保留最后一条 view（最新的回答）\n */\nconst loadHistoryById = async (historyId: string) => {\n  try {\n    isLoading.value = true\n    isLoadingHistory.value = true  // 标记正在加载历史记录\n    errorMessage.value = ''\n    \n    console.log(`正在加载历史记录: ${historyId}`)\n    \n    // 调用封装的API获取历史记录\n    const historyData = await dbgptService.getHistoryMessages(historyId)\n    \n    console.log('解析后的历史数据:', historyData)\n    console.log('历史数据详情:', historyData.map(item => ({ \n      role: item.role, \n      order: item.order, \n      id: item.id,\n      contentPreview: item.context?.substring(0, 50) \n    })))\n    \n    // 过滤并去重：只显示 view 和 human 角色\n    const filtered = historyData.filter(item => ['view', 'human'].includes(item.role))\n    \n    // 按 order 分组，处理重新回答产生的重复记录\n    const groupedByOrder = new Map<number, typeof filtered>()\n    filtered.forEach(item => {\n      const order = item.order || 0\n      if (!groupedByOrder.has(order)) {\n        groupedByOrder.set(order, [])\n      }\n      groupedByOrder.get(order)!.push(item)\n    })\n    \n    // 对每个 order 组，只保留最后一条 view（最新的回答）\n    const deduped: typeof filtered = []\n    Array.from(groupedByOrder.values()).forEach(group => {\n      // 保留所有 human 消息\n      const humans = group.filter(item => item.role === 'human')\n      deduped.push(...humans)\n      \n      // 只保留最后一条 view\n      const views = group.filter(item => (item as any).role === 'view')\n      if (views.length > 0) {\n        // 取最后一条（通常是最新的）\n        const lastView = views[views.length - 1]\n        deduped.push(lastView)\n        \n        if (views.length > 1) {\n          console.log(`[去重] order=${group[0].order} 有 ${views.length} 条 view，保留最后一条`)\n        }\n      }\n    })\n    \n    // 按 order 排序并转换为消息格式\n    messages.value = deduped\n      .sort((a, b) => (a.order || 0) - (b.order || 0))\n      .map((item) => {\n        // 🔧 过滤消息内容中的深度思考标识\n        let content = item.context || ''\n        // 移除 +json={\"model\": \"deep\"} 标识（支持各种空格和换行）\n        content = content.replace(/\\+json=\\s*\\{\\s*[\"']model[\"']\\s*:\\s*[\"']deep[\"']\\s*\\}/gi, '').trim()\n        \n        return {\n          id: item.id ? item.id.toString() : generateId(),\n          role: item.role === 'human' ? 'user' : 'assistant',\n          content: content,\n          thinking: false,\n          streaming: false\n        }\n      })\n    \n    // 设置当前会话ID\n    currentConvUid.value = historyId\n    \n    // 保存最后一条用户消息，用于重新回答\n    const lastUserMessage = [...messages.value].reverse().find(m => m.role === 'user')\n    if (lastUserMessage) {\n      lastUserInput.value = lastUserMessage.content\n    }\n    \n    console.log(`成功加载 ${messages.value.length} 条历史消息（原始 ${historyData.length} 条）`)\n    \n    // 滚动到底部\n    await nextTick()\n    scrollToBottom()\n  } catch (error) {\n    console.error('加载历史记录失败:', error)\n    errorMessage.value = `加载历史记录失败: ${error instanceof Error ? error.message : '未知错误'}`\n  } finally {\n    isLoading.value = false\n    isLoadingHistory.value = false  // 重置历史记录加载标志\n    \n    // 🔧 无论成功或失败，都触发加载完成事件，确保按钮状态被恢复\n    emit('history-loaded')\n  }\n}\n\n// Token 过期处理\nconst handleTokenExpired = (event: Event) => {\n  const customEvent = event as CustomEvent\n  const detail = customEvent.detail\n  \n  console.error('[IntegratedChat] Token 已过期:', detail)\n  \n  // 显示错误提示\n  errorMessage.value = detail.message || '登录已过期，请重新登录'\n  \n  // 停止当前请求\n  isLoading.value = false\n  isStreaming.value = false\n  \n  // 触发 emit 事件，通知父组件\n  emit('token-expired', detail)\n}\n\n/* 反馈功能模块 */\n/**\n * 获取自定义请求头\n */\nconst getFeedbackHeaders = (): Record<string, string> => {\n  const headers = props.feedbackConfig?.headers\n  if (!headers) return {}\n  return typeof headers === 'function' ? headers() : headers\n}\n\n/**\n * 获取实际使用的反馈服务函数\n */\nconst getFeedbackService = () => {\n  // 如果提供了自定义函数，直接使用\n  if (props.feedbackConfig?.addFeedback || props.feedbackConfig?.cancelFeedback || props.feedbackConfig?.getFeedbackReasons) {\n    return {\n      addFeedback: props.feedbackConfig?.addFeedback || dbgptService.addFeedback.bind(dbgptService),\n      cancelFeedback: props.feedbackConfig?.cancelFeedback || dbgptService.cancelFeedback.bind(dbgptService),\n      getFeedbackReasons: props.feedbackConfig?.getFeedbackReasons || dbgptService.getFeedbackReasons.bind(dbgptService)\n    }\n  }\n  \n  // 如果没有自定义函数但提供了自定义 headers，包装默认服务\n  const customHeaders = getFeedbackHeaders()\n  if (Object.keys(customHeaders).length > 0) {\n    return {\n      addFeedback: async (params: any) => {\n        // 临时添加自定义请求头\n        const originalHeaders = { ...axios.defaults.headers.common }\n        Object.assign(axios.defaults.headers.common, customHeaders)\n        try {\n          return await dbgptService.addFeedback(params)\n        } finally {\n          // 恢复原始请求头\n          axios.defaults.headers.common = originalHeaders\n        }\n      },\n      cancelFeedback: async (params: any) => {\n        const originalHeaders = { ...axios.defaults.headers.common }\n        Object.assign(axios.defaults.headers.common, customHeaders)\n        try {\n          return await dbgptService.cancelFeedback(params)\n        } finally {\n          axios.defaults.headers.common = originalHeaders\n        }\n      },\n      getFeedbackReasons: async () => {\n        const originalHeaders = { ...axios.defaults.headers.common }\n        Object.assign(axios.defaults.headers.common, customHeaders)\n        try {\n          return await dbgptService.getFeedbackReasons()\n        } finally {\n          axios.defaults.headers.common = originalHeaders\n        }\n      }\n    }\n  }\n  \n  // 默认使用原始服务\n  return {\n    addFeedback: dbgptService.addFeedback.bind(dbgptService),\n    cancelFeedback: dbgptService.cancelFeedback.bind(dbgptService),\n    getFeedbackReasons: dbgptService.getFeedbackReasons.bind(dbgptService)\n  }\n}\n\n/**\n * 加载反馈原因列表（异步，不阻塞）\n */\nconst loadFeedbackReasons = async () => {\n  // 如果已经加载过或正在加载，跳过\n  if (feedbackReasons.value.length > 0 || feedbackReasonsLoading.value) {\n    return\n  }\n  \n  feedbackReasonsLoading.value = true\n  try {\n    const service = getFeedbackService()\n    const response = await service.getFeedbackReasons()\n    if (response.success && response.data) {\n      feedbackReasons.value = response.data\n      console.log('[反馈] 加载反馈原因列表成功:', feedbackReasons.value)\n    }\n  } catch (error) {\n    console.error('[反馈] 加载反馈原因列表失败:', error)\n  } finally {\n    feedbackReasonsLoading.value = false\n  }\n}\n\n/**\n * 获取消息的序号（第几条AI消息）\n */\nconst getMessageIndex = (messageId: string): number => {\n  const aiMessages = messages.value.filter(m => m.role === 'assistant')\n  const index = aiMessages.findIndex(m => m.id === messageId)\n  return index + 1  // 从1开始计数\n}\n\n/**\n * 点赞/取消点赞\n */\nconst handleLike = async (messageId: string) => {\n  const message = messages.value.find(m => m.id === messageId)\n  if (!message || message.role !== 'assistant') return\n  \n  // 初始化feedback对象\n  if (!message.feedback) {\n    message.feedback = { liked: false, disliked: false }\n  }\n  \n  const isLiked = message.feedback.liked\n  const service = getFeedbackService()\n  \n  try {\n    if (isLiked) {\n      // 取消点赞\n      await service.cancelFeedback({\n        conv_uid: currentConvUid.value || '',\n        message_id: String(getMessageIndex(messageId))\n      })\n      message.feedback.liked = false\n      console.log('[反馈] 取消点赞成功')\n    } else {\n      // 点赞\n      // 只有配置了 cancelBeforeSwitch 且之前踩过时，才先取消踩\n      if (props.feedbackConfig?.cancelBeforeSwitch && message.feedback.disliked) {\n        await service.cancelFeedback({\n          conv_uid: currentConvUid.value || '',\n          message_id: String(getMessageIndex(messageId))\n        })\n        console.log('[反馈] 已先取消踩')\n      }\n      \n      await service.addFeedback({\n        conv_uid: currentConvUid.value || '',\n        message_id: String(getMessageIndex(messageId)),\n        feedback_type: 'like'\n      })\n      message.feedback.liked = true\n      message.feedback.disliked = false  // 点赞后自动取消踩状态\n      console.log('[反馈] 点赞成功')\n    }\n  } catch (error) {\n    console.error('[反馈] 点赞操作失败:', error)\n  }\n}\n\n/**\n * 打开踩的弹框\n */\nconst openDislikeModal = (messageId: string) => {\n  currentFeedbackMessageId.value = messageId\n  selectedReasons.value = []\n  feedbackRemark.value = ''\n  \n  // 异步加载反馈原因列表（不阻塞弹窗打开）\n  loadFeedbackReasons()\n}\n\n/**\n * 关闭踩的 Popover\n */\nconst closeDislikePopover = (messageId: string) => {\n  dislikePopoverVisible.value[messageId] = false\n  currentFeedbackMessageId.value = ''\n  selectedReasons.value = []\n  feedbackRemark.value = ''\n}\n\n/**\n * 确认踩\n */\nconst confirmDislike = async (messageId: string) => {\n  const message = messages.value.find(m => m.id === messageId)\n  if (!message || message.role !== 'assistant') return\n  \n  // 初始化feedback对象\n  if (!message.feedback) {\n    message.feedback = { liked: false, disliked: false }\n  }\n  \n  const service = getFeedbackService()\n  dislikeLoading.value = true\n  try {\n    // 只有配置了 cancelBeforeSwitch 且之前点赞过时，才先取消点赞\n    if (props.feedbackConfig?.cancelBeforeSwitch && message.feedback.liked) {\n      await service.cancelFeedback({\n        conv_uid: currentConvUid.value || '',\n        message_id: String(getMessageIndex(messageId))\n      })\n      console.log('[反馈] 已先取消点赞')\n    }\n    \n    // 提交踩（原因和备注都是可选的）\n    await service.addFeedback({\n      conv_uid: currentConvUid.value || '',\n      message_id: String(getMessageIndex(messageId)),\n      feedback_type: 'unlike',\n      reason_types: selectedReasons.value.length > 0 ? selectedReasons.value : undefined,\n      remark: feedbackRemark.value || undefined\n    })\n    \n    message.feedback.disliked = true\n    message.feedback.liked = false  // 踩后自动取消点赞状态\n    console.log('[反馈] 踩成功')\n    ElMessage.success('反馈提交成功')\n    closeDislikePopover(messageId)\n  } catch (error) {\n    console.error('[反馈] 踩操作失败:', error)\n    ElMessage.error('反馈提交失败，请稍后重试')\n  } finally {\n    dislikeLoading.value = false\n  }\n}\n\n/**\n * 取消踩\n */\nconst handleCancelDislike = async (messageId: string) => {\n  const message = messages.value.find(m => m.id === messageId)\n  if (!message || message.role !== 'assistant' || !message.feedback?.disliked) return\n  \n  const service = getFeedbackService()\n  try {\n    await service.cancelFeedback({\n      conv_uid: currentConvUid.value || '',\n      message_id: String(getMessageIndex(messageId))\n    })\n    message.feedback.disliked = false\n    console.log('[反馈] 取消踩成功')\n  } catch (error) {\n    console.error('[反馈] 取消踩操作失败:', error)\n  }\n}\n\n/**\n * 切换原因选择\n */\nconst toggleReason = (reasonType: string) => {\n  const index = selectedReasons.value.indexOf(reasonType)\n  if (index > -1) {\n    selectedReasons.value.splice(index, 1)\n  } else {\n    selectedReasons.value.push(reasonType)\n  }\n}\n\n/**\n * 处理复制\n */\nconst handleCopy = async (content: string) => {\n  await copyMessageContent(content, {\n    onSuccess: () => {\n      ElMessage.success('复制成功')\n    },\n    onError: (error) => {\n      ElMessage.error('复制失败')\n      console.error('[反馈] 复制失败:', error)\n    }\n  })\n}\n/* 反馈功能模块end */\n\n// 初始化\nonMounted(async () => {\n  initTheme()\n  \n  // 监听 token 过期事件\n  window.addEventListener('dbgpt:token-expired', handleTokenExpired)\n  \n  // 异步加载反馈原因列表（不阻塞页面初始化）\n  loadFeedbackReasons()\n  \n  // 检查URL参数中的historyId\n  const historyId = route.query.historyId as string\n  \n  if (historyId) {\n    // 如果有historyId，立即显示loading，然后加载历史记录\n    isLoading.value = true\n    console.log(`检测到URL参数 historyId=${historyId}，加载历史记录...`)\n    await loadHistoryById(historyId)\n  } else {\n    // 非历史记录情况：每次刷新都生成新的会话ID（时间戳）\n    console.log('[初始化] 非历史记录模式，生成新的会话ID')\n    currentConvUid.value = chatApiUtils.generateConvUid()\n    chatApiUtils.setCurrentConvUid(currentConvUid.value)\n    console.log('[初始化] 新会话ID:', currentConvUid.value)\n  }\n})\n\n// 清理\nonUnmounted(() => {\n  // 移除事件监听器\n  window.removeEventListener('dbgpt:token-expired', handleTokenExpired)\n})\n\n// 主题切换\nconst toggleTheme = () => {\n  isDarkMode.value = !isDarkMode.value\n  if (isDarkMode.value) {\n    document.documentElement.classList.add('dark')\n  } else {\n    document.documentElement.classList.remove('dark')\n  }\n  localStorage.setItem('theme', isDarkMode.value ? 'dark' : 'light')\n}\n\nconst initTheme = () => {\n  const savedTheme = localStorage.getItem('theme')\n  if (savedTheme) {\n    isDarkMode.value = savedTheme === 'dark'\n  } else if (window.matchMedia && window.matchMedia('(prefers-color-scheme: dark)').matches) {\n    isDarkMode.value = true\n  }\n  \n  if (isDarkMode.value) {\n    document.documentElement.classList.add('dark')\n  }\n}\n\n// 新对话\n/* \n * 功能描述: 新建对话\n * 逻辑说明: 清空消息列表，重新生成con_uid，重置状态\n */\nconst newConversation = () => {\n  messages.value = []\n  inputMessage.value = ''\n  errorMessage.value = ''\n  isPaused.value = false\n  lastUserInput.value = ''\n  \n  // 重新生成con_uid\n  currentConvUid.value = chatApiUtils.generateConvUid()\n  chatApiUtils.setCurrentConvUid(currentConvUid.value)\n  \n  // 取消正在进行的请求\n  if (currentAbortController) {\n    currentAbortController.abort()\n    currentAbortController = null\n  }\n  \n  isLoading.value = false\n  isStreaming.value = false\n  \n  console.log('[新对话] 已创建，con_uid:', currentConvUid.value)\n}\n\n// 测试数据 - 支持多场景\nconst testData: Record<string, Record<string, string>> = {\n  'chart-view': {\n    'simple': `<chart-view>\n{\n  \"type\": \"response_table\",\n  \"status\": \"completed\",\n  \"sql\": \"SELECT month, revenue FROM sales_data ORDER BY month\",\n  \"data\": [\n    {\"month\": \"1月\", \"revenue\": 1250000},\n    {\"month\": \"2月\", \"revenue\": 1380000},\n    {\"month\": \"3月\", \"revenue\": 1520000},\n    {\"month\": \"4月\", \"revenue\": 1450000},\n    {\"month\": \"5月\", \"revenue\": 1680000},\n    {\"month\": \"6月\", \"revenue\": 1750000}\n  ]\n}\n</chart-view>`,\n    'medium': `<chart-view>\n{\n  \"type\": \"response_table\",\n  \"status\": \"completed\",\n  \"sql\": \"SELECT month, region, revenue FROM sales_data GROUP BY month, region ORDER BY month\",\n  \"data\": [\n    {\"month\": \"1月\", \"region\": \"华东\", \"revenue\": 1250000}, {\"month\": \"1月\", \"region\": \"华南\", \"revenue\": 980000}, {\"month\": \"1月\", \"region\": \"华北\", \"revenue\": 1120000}, {\"month\": \"1月\", \"region\": \"华中\", \"revenue\": 850000},\n    {\"month\": \"2月\", \"region\": \"华东\", \"revenue\": 1380000}, {\"month\": \"2月\", \"region\": \"华南\", \"revenue\": 1050000}, {\"month\": \"2月\", \"region\": \"华北\", \"revenue\": 1210000}, {\"month\": \"2月\", \"region\": \"华中\", \"revenue\": 920000},\n    {\"month\": \"3月\", \"region\": \"华东\", \"revenue\": 1520000}, {\"month\": \"3月\", \"region\": \"华南\", \"revenue\": 1180000}, {\"month\": \"3月\", \"region\": \"华北\", \"revenue\": 1350000}, {\"month\": \"3月\", \"region\": \"华中\", \"revenue\": 1020000},\n    {\"month\": \"4月\", \"region\": \"华东\", \"revenue\": 1450000}, {\"month\": \"4月\", \"region\": \"华南\", \"revenue\": 1120000}, {\"month\": \"4月\", \"region\": \"华北\", \"revenue\": 1280000}, {\"month\": \"4月\", \"region\": \"华中\", \"revenue\": 970000},\n    {\"month\": \"5月\", \"region\": \"华东\", \"revenue\": 1680000}, {\"month\": \"5月\", \"region\": \"华南\", \"revenue\": 1290000}, {\"month\": \"5月\", \"region\": \"华北\", \"revenue\": 1480000}, {\"month\": \"5月\", \"region\": \"华中\", \"revenue\": 1120000},\n    {\"month\": \"6月\", \"region\": \"华东\", \"revenue\": 1750000}, {\"month\": \"6月\", \"region\": \"华南\", \"revenue\": 1350000}, {\"month\": \"6月\", \"region\": \"华北\", \"revenue\": 1550000}, {\"month\": \"6月\", \"region\": \"华中\", \"revenue\": 1180000}\n  ]\n}\n</chart-view>`,\n    'complex': `<chart-view>\n{\n  \"type\": \"response_table\",\n  \"status\": \"completed\",\n  \"sql\": \"SELECT month, region, revenue FROM sales_data GROUP BY month, region ORDER BY month\",\n  \"data\": [\n    {\"month\": \"1月\", \"region\": \"华东\", \"revenue\": 1250000}, {\"month\": \"1月\", \"region\": \"华南\", \"revenue\": 980000}, {\"month\": \"1月\", \"region\": \"华北\", \"revenue\": 1120000}, {\"month\": \"1月\", \"region\": \"华中\", \"revenue\": 850000}, {\"month\": \"1月\", \"region\": \"西南\", \"revenue\": 720000}, {\"month\": \"1月\", \"region\": \"西北\", \"revenue\": 680000}, {\"month\": \"1月\", \"region\": \"东北\", \"revenue\": 650000}, {\"month\": \"1月\", \"region\": \"港澳台\", \"revenue\": 580000},\n    {\"month\": \"2月\", \"region\": \"华东\", \"revenue\": 1380000}, {\"month\": \"2月\", \"region\": \"华南\", \"revenue\": 1050000}, {\"month\": \"2月\", \"region\": \"华北\", \"revenue\": 1210000}, {\"month\": \"2月\", \"region\": \"华中\", \"revenue\": 920000}, {\"month\": \"2月\", \"region\": \"西南\", \"revenue\": 780000}, {\"month\": \"2月\", \"region\": \"西北\", \"revenue\": 720000}, {\"month\": \"2月\", \"region\": \"东北\", \"revenue\": 690000}, {\"month\": \"2月\", \"region\": \"港澳台\", \"revenue\": 620000},\n    {\"month\": \"3月\", \"region\": \"华东\", \"revenue\": 1520000}, {\"month\": \"3月\", \"region\": \"华南\", \"revenue\": 1180000}, {\"month\": \"3月\", \"region\": \"华北\", \"revenue\": 1350000}, {\"month\": \"3月\", \"region\": \"华中\", \"revenue\": 1020000}, {\"month\": \"3月\", \"region\": \"西南\", \"revenue\": 860000}, {\"month\": \"3月\", \"region\": \"西北\", \"revenue\": 780000}, {\"month\": \"3月\", \"region\": \"东北\", \"revenue\": 750000}, {\"month\": \"3月\", \"region\": \"港澳台\", \"revenue\": 680000},\n    {\"month\": \"4月\", \"region\": \"华东\", \"revenue\": 1450000}, {\"month\": \"4月\", \"region\": \"华南\", \"revenue\": 1120000}, {\"month\": \"4月\", \"region\": \"华北\", \"revenue\": 1280000}, {\"month\": \"4月\", \"region\": \"华中\", \"revenue\": 970000}, {\"month\": \"4月\", \"region\": \"西南\", \"revenue\": 820000}, {\"month\": \"4月\", \"region\": \"西北\", \"revenue\": 750000}, {\"month\": \"4月\", \"region\": \"东北\", \"revenue\": 720000}, {\"month\": \"4月\", \"region\": \"港澳台\", \"revenue\": 650000},\n    {\"month\": \"5月\", \"region\": \"华东\", \"revenue\": 1680000}, {\"month\": \"5月\", \"region\": \"华南\", \"revenue\": 1290000}, {\"month\": \"5月\", \"region\": \"华北\", \"revenue\": 1480000}, {\"month\": \"5月\", \"region\": \"华中\", \"revenue\": 1120000}, {\"month\": \"5月\", \"region\": \"西南\", \"revenue\": 950000}, {\"month\": \"5月\", \"region\": \"西北\", \"revenue\": 860000}, {\"month\": \"5月\", \"region\": \"东北\", \"revenue\": 830000}, {\"month\": \"5月\", \"region\": \"港澳台\", \"revenue\": 750000},\n    {\"month\": \"6月\", \"region\": \"华东\", \"revenue\": 1750000}, {\"month\": \"6月\", \"region\": \"华南\", \"revenue\": 1350000}, {\"month\": \"6月\", \"region\": \"华北\", \"revenue\": 1550000}, {\"month\": \"6月\", \"region\": \"华中\", \"revenue\": 1180000}, {\"month\": \"6月\", \"region\": \"西南\", \"revenue\": 1000000}, {\"month\": \"6月\", \"region\": \"西北\", \"revenue\": 900000}, {\"month\": \"6月\", \"region\": \"东北\", \"revenue\": 870000}, {\"month\": \"6月\", \"region\": \"港澳台\", \"revenue\": 790000},\n    {\"month\": \"7月\", \"region\": \"华东\", \"revenue\": 1820000}, {\"month\": \"7月\", \"region\": \"华南\", \"revenue\": 1420000}, {\"month\": \"7月\", \"region\": \"华北\", \"revenue\": 1620000}, {\"month\": \"7月\", \"region\": \"华中\", \"revenue\": 1230000}, {\"month\": \"7月\", \"region\": \"西南\", \"revenue\": 1050000}, {\"month\": \"7月\", \"region\": \"西北\", \"revenue\": 950000}, {\"month\": \"7月\", \"region\": \"东北\", \"revenue\": 910000}, {\"month\": \"7月\", \"region\": \"港澳台\", \"revenue\": 830000},\n    {\"month\": \"8月\", \"region\": \"华东\", \"revenue\": 1780000}, {\"month\": \"8月\", \"region\": \"华南\", \"revenue\": 1380000}, {\"month\": \"8月\", \"region\": \"华北\", \"revenue\": 1580000}, {\"month\": \"8月\", \"region\": \"华中\", \"revenue\": 1200000}, {\"month\": \"8月\", \"region\": \"西南\", \"revenue\": 1020000}, {\"month\": \"8月\", \"region\": \"西北\", \"revenue\": 920000}, {\"month\": \"8月\", \"region\": \"东北\", \"revenue\": 880000}, {\"month\": \"8月\", \"region\": \"港澳台\", \"revenue\": 800000},\n    {\"month\": \"9月\", \"region\": \"华东\", \"revenue\": 1920000}, {\"month\": \"9月\", \"region\": \"华南\", \"revenue\": 1480000}, {\"month\": \"9月\", \"region\": \"华北\", \"revenue\": 1680000}, {\"month\": \"9月\", \"region\": \"华中\", \"revenue\": 1280000}, {\"month\": \"9月\", \"region\": \"西南\", \"revenue\": 1090000}, {\"month\": \"9月\", \"region\": \"西北\", \"revenue\": 980000}, {\"month\": \"9月\", \"region\": \"东北\", \"revenue\": 940000}, {\"month\": \"9月\", \"region\": \"港澳台\", \"revenue\": 860000},\n    {\"month\": \"10月\", \"region\": \"华东\", \"revenue\": 2050000}, {\"month\": \"10月\", \"region\": \"华南\", \"revenue\": 1580000}, {\"month\": \"10月\", \"region\": \"华北\", \"revenue\": 1780000}, {\"month\": \"10月\", \"region\": \"华中\", \"revenue\": 1350000}, {\"month\": \"10月\", \"region\": \"西南\", \"revenue\": 1150000}, {\"month\": \"10月\", \"region\": \"西北\", \"revenue\": 1040000}, {\"month\": \"10月\", \"region\": \"东北\", \"revenue\": 1000000}, {\"month\": \"10月\", \"region\": \"港澳台\", \"revenue\": 920000},\n    {\"month\": \"11月\", \"region\": \"华东\", \"revenue\": 2180000}, {\"month\": \"11月\", \"region\": \"华南\", \"revenue\": 1680000}, {\"month\": \"11月\", \"region\": \"华北\", \"revenue\": 1890000}, {\"month\": \"11月\", \"region\": \"华中\", \"revenue\": 1430000}, {\"month\": \"11月\", \"region\": \"西南\", \"revenue\": 1220000}, {\"month\": \"11月\", \"region\": \"西北\", \"revenue\": 1100000}, {\"month\": \"11月\", \"region\": \"东北\", \"revenue\": 1060000}, {\"month\": \"11月\", \"region\": \"港澳台\", \"revenue\": 980000},\n    {\"month\": \"12月\", \"region\": \"华东\", \"revenue\": 2350000}, {\"month\": \"12月\", \"region\": \"华南\", \"revenue\": 1820000}, {\"month\": \"12月\", \"region\": \"华北\", \"revenue\": 2050000}, {\"month\": \"12月\", \"region\": \"华中\", \"revenue\": 1550000}, {\"month\": \"12月\", \"region\": \"西南\", \"revenue\": 1320000}, {\"month\": \"12月\", \"region\": \"西北\", \"revenue\": 1190000}, {\"month\": \"12月\", \"region\": \"东北\", \"revenue\": 1140000}, {\"month\": \"12月\", \"region\": \"港澳台\", \"revenue\": 1060000}\n  ]\n}\n</chart-view>`\n  },\n\n  'references': {\n    'simple': `根据产品手册，我们的系统具有以下核心特性...\n\n<references>\n{\n  \"knowledge\": [\n    {\n      \"name\": \"产品手册.pdf\",\n      \"chunks\": [\n        {\n          \"id\": 1,\n          \"content\": \"## 核心特性\\\\n\\\\n本产品采用最新的AI技术，具备以下核心特性：\\\\n\\\\n- **智能分析**：自动识别数据模式\\\\n- **实时响应**：毫秒级数据处理\\\\n- **安全可靠**：多重加密保护\",\n          \"metadata\": {\"page\": 5, \"score\": 0.95}\n        },\n        {\n          \"id\": 2,\n          \"content\": \"## 技术规格\\\\n\\\\n### 性能指标\\\\n- 最大并发：10,000 QPS\\\\n- 响应时间：< 100ms\\\\n- 可用性：99.99%\",\n          \"metadata\": {\"page\": 12, \"score\": 0.88}\n        }\n      ]\n    }\n  ]\n}\n</references>`,\n    'complex': `根据多个文档的综合分析，我们的系统具备全面的技术能力...\n\n<references>\n{\n  \"knowledge\": [\n    {\n      \"name\": \"产品手册.pdf\",\n      \"chunks\": [\n        {\n          \"id\": 1,\n          \"content\": \"## 核心特性\\\\n\\\\n本产品采用最新的AI技术，具备以下核心特性：\\\\n\\\\n- **智能分析**：自动识别数据模式\\\\n- **实时响应**：毫秒级数据处理\\\\n- **安全可靠**：多重加密保护\",\n          \"metadata\": {\"page\": 5, \"score\": 0.95}\n        },\n        {\n          \"id\": 2,\n          \"content\": \"## 技术规格\\\\n\\\\n### 性能指标\\\\n- 最大并发：10,000 QPS\\\\n- 响应时间：< 100ms\\\\n- 可用性：99.99%\",\n          \"metadata\": {\"page\": 12, \"score\": 0.88}\n        }\n      ]\n    },\n    {\n      \"name\": \"技术文档.md\",\n      \"chunks\": [\n        {\n          \"id\": 1,\n          \"content\": \"## API接口\\\\n\\\\n系统提供RESTful API接口，支持JSON格式数据交互。\\\\n\\\\n### 认证方式\\\\n使用JWT Token进行身份验证。\",\n          \"metadata\": {\"score\": 0.82}\n        }\n      ]\n    },\n    {\n      \"name\": \"用户指南.docx\",\n      \"chunks\": [\n        {\n          \"id\": 1,\n          \"content\": \"## 快速开始\\\\n\\\\n1. 注册账号\\\\n2. 配置API Key\\\\n3. 开始使用\",\n          \"metadata\": {\"page\": 1, \"score\": 0.75}\n        }\n      ]\n    }\n  ]\n}\n</references>`\n  },\n\n  'agent-plans': {\n    'simple': `\\`\\`\\`agent-plans\n{\n  \"plans\": [\n    {\n      \"name\": \"数据收集\",\n      \"num\": 1,\n      \"status\": \"completed\",\n      \"agent\": \"DataCollectorAgent\",\n      \"result\": \"成功收集到1000条用户数据\"\n    },\n    {\n      \"name\": \"数据分析\",\n      \"num\": 2,\n      \"status\": \"running\",\n      \"agent\": \"AnalysisAgent\",\n      \"result\": \"正在分析用户增长趋势...\"\n    },\n    {\n      \"name\": \"报告生成\",\n      \"num\": 3,\n      \"status\": \"todo\",\n      \"agent\": \"ReportAgent\"\n    }\n  ]\n}\n\\`\\`\\``,\n    'complex': `\\`\\`\\`agent-plans\n{\n  \"plans\": [\n    {\n      \"name\": \"数据收集\",\n      \"num\": 1,\n      \"status\": \"completed\",\n      \"agent\": \"DataCollectorAgent\",\n      \"result\": \"成功收集到1000条用户数据，包含用户行为、偏好和反馈信息\"\n    },\n    {\n      \"name\": \"数据清洗\",\n      \"num\": 2,\n      \"status\": \"completed\",\n      \"agent\": \"DataCleanerAgent\",\n      \"result\": \"移除了50条重复数据和30条无效数据，数据质量达到98%\"\n    },\n    {\n      \"name\": \"数据分析\",\n      \"num\": 3,\n      \"status\": \"running\",\n      \"agent\": \"AnalysisAgent\",\n      \"result\": \"正在分析用户增长趋势和留存率...\"\n    },\n    {\n      \"name\": \"报告生成\",\n      \"num\": 4,\n      \"status\": \"todo\",\n      \"agent\": \"ReportAgent\"\n    },\n    {\n      \"name\": \"结果推送\",\n      \"num\": 5,\n      \"status\": \"todo\",\n      \"agent\": \"NotificationAgent\"\n    }\n  ]\n}\n\\`\\`\\``\n  },\n\n  'agent-messages': {\n    'simple': `\\`\\`\\`agent-messages\n[\n  {\n    \"sender\": \"用户\",\n    \"receiver\": \"搜索Agent\",\n    \"model\": \"gpt-4\",\n    \"markdown\": \"请搜索今天AI领域的热门新闻\"\n  },\n  {\n    \"sender\": \"搜索Agent\",\n    \"receiver\": \"总结Agent\",\n    \"model\": \"gpt-3.5-turbo\",\n    \"markdown\": \"找到15条AI相关新闻：\\\\n1. OpenAI发布GPT-5预告\\\\n2. 谷歌推出Gemini 2.0\"\n  },\n  {\n    \"sender\": \"总结Agent\",\n    \"receiver\": \"用户\",\n    \"model\": \"gpt-4\",\n    \"markdown\": \"## 今日AI热点总结\\\\n\\\\n### 1. OpenAI GPT-5预告\\\\n据悉，GPT-5将具备更强的推理能力...\"\n  }\n]\n\\`\\`\\``,\n    'complex': `\\`\\`\\`agent-messages\n[\n  {\n    \"sender\": \"用户\",\n    \"receiver\": \"搜索Agent\",\n    \"model\": \"gpt-4\",\n    \"markdown\": \"请搜索今天AI领域的热门新闻\"\n  },\n  {\n    \"sender\": \"搜索Agent\",\n    \"receiver\": \"过滤Agent\",\n    \"model\": \"gpt-3.5-turbo\",\n    \"markdown\": \"找到15条AI相关新闻：\\\\n1. OpenAI发布GPT-5预告\\\\n2. 谷歌推出Gemini 2.0\\\\n3. 百度发布文心一言4.0\\\\n...\"\n  },\n  {\n    \"sender\": \"过滤Agent\",\n    \"receiver\": \"总结Agent\",\n    \"model\": \"claude-3\",\n    \"markdown\": \"筛选出5条最重要的新闻进行总结\"\n  },\n  {\n    \"sender\": \"总结Agent\",\n    \"receiver\": \"用户\",\n    \"model\": \"gpt-4\",\n    \"markdown\": \"## 今日AI热点总结\\\\n\\\\n### 1. OpenAI GPT-5预告\\\\n据悉，GPT-5将具备更强的推理能力...\\\\n\\\\n### 2. Gemini 2.0发布\\\\n谷歌新一代AI模型展现出卓越的多模态能力...\"\n  }\n]\n\\`\\`\\``\n  },\n\n  'html-preview': {\n    'simple': `\\`\\`\\`html\n<div style=\"background: linear-gradient(135deg, #667eea 0%, #764ba2 100%); padding: 30px; border-radius: 15px; color: white; font-family: Arial, sans-serif;\">\n  <h2 style=\"margin: 0 0 20px 0; font-size: 28px; font-weight: bold;\">🎉 欢迎使用 Vue-Chat-System</h2>\n  <p style=\"margin: 0 0 15px 0; font-size: 16px; line-height: 1.6;\">\n    这是一个功能强大的聊天系统，支持多种数据可视化和交互方式。\n  </p>\n  <div style=\"display: flex; gap: 15px; margin-top: 20px;\">\n    <div style=\"flex: 1; background: rgba(255,255,255,0.2); padding: 20px; border-radius: 10px;\">\n      <div style=\"font-size: 32px; margin-bottom: 10px;\">📊</div>\n      <div style=\"font-size: 14px;\">数据可视化</div>\n    </div>\n    <div style=\"flex: 1; background: rgba(255,255,255,0.2); padding: 20px; border-radius: 10px;\">\n      <div style=\"font-size: 32px; margin-bottom: 10px;\">🤖</div>\n      <div style=\"font-size: 14px;\">Agent协作</div>\n    </div>\n  </div>\n</div>\n\\`\\`\\``,\n    'complex': `\\`\\`\\`html\n<div style=\"background: linear-gradient(135deg, #667eea 0%, #764ba2 100%); padding: 30px; border-radius: 15px; color: white; font-family: Arial, sans-serif;\">\n  <h2 style=\"margin: 0 0 20px 0; font-size: 28px; font-weight: bold;\">🎉 欢迎使用 Vue-Chat-System</h2>\n  <p style=\"margin: 0 0 15px 0; font-size: 16px; line-height: 1.6;\">\n    这是一个功能强大的聊天系统，支持多种数据可视化和交互方式。\n  </p>\n  <div style=\"display: flex; gap: 15px; margin-top: 20px;\">\n    <div style=\"flex: 1; background: rgba(255,255,255,0.2); padding: 20px; border-radius: 10px; backdrop-filter: blur(10px);\">\n      <div style=\"font-size: 32px; margin-bottom: 10px;\">📊</div>\n      <div style=\"font-size: 14px;\">数据可视化</div>\n    </div>\n    <div style=\"flex: 1; background: rgba(255,255,255,0.2); padding: 20px; border-radius: 10px; backdrop-filter: blur(10px);\">\n      <div style=\"font-size: 32px; margin-bottom: 10px;\">🤖</div>\n      <div style=\"font-size: 14px;\">Agent协作</div>\n    </div>\n    <div style=\"flex: 1; background: rgba(255,255,255,0.2); padding: 20px; border-radius: 10px; backdrop-filter: blur(10px);\">\n      <div style=\"font-size: 32px; margin-bottom: 10px;\">🎨</div>\n      <div style=\"font-size: 14px;\">实时预览</div>\n    </div>\n  </div>\n  <div style=\"margin-top: 20px; padding: 15px; background: rgba(255,255,255,0.1); border-radius: 10px;\">\n    <div style=\"font-size: 14px; margin-bottom: 10px;\">✨ 主要特性</div>\n    <ul style=\"margin: 0; padding-left: 20px; font-size: 13px; line-height: 1.8;\">\n      <li>支持流式渲染</li>\n      <li>多种图表类型</li>\n      <li>暗色模式支持</li>\n      <li>响应式设计</li>\n    </ul>\n  </div>\n</div>\n\\`\\`\\``\n  },\n\n  'svg-preview': {\n    'simple': `\\`\\`\\`svg\n<svg width=\"400\" height=\"250\" xmlns=\"http://www.w3.org/2000/svg\">\n  <defs>\n    <linearGradient id=\"grad1\" x1=\"0%\" y1=\"0%\" x2=\"100%\" y2=\"100%\">\n      <stop offset=\"0%\" style=\"stop-color:#667eea;stop-opacity:1\" />\n      <stop offset=\"100%\" style=\"stop-color:#764ba2;stop-opacity:1\" />\n    </linearGradient>\n  </defs>\n  <rect width=\"400\" height=\"250\" fill=\"url(#grad1)\" rx=\"10\"/>\n  <circle cx=\"80\" cy=\"125\" r=\"50\" fill=\"rgba(255,255,255,0.2)\" />\n  <rect x=\"180\" y=\"150\" width=\"30\" height=\"80\" fill=\"#f093fb\" rx=\"5\"/>\n  <rect x=\"220\" y=\"120\" width=\"30\" height=\"110\" fill=\"#f093fb\" rx=\"5\"/>\n  <rect x=\"260\" y=\"90\" width=\"30\" height=\"140\" fill=\"#f093fb\" rx=\"5\"/>\n  <text x=\"200\" y=\"40\" fill=\"white\" font-size=\"20\" font-weight=\"bold\">SVG 数据可视化</text>\n</svg>\n\\`\\`\\``\n  },\n\n  'vis-dashboard': {\n    'simple': `\\`\\`\\`vis-dashboard\n{\n  \"title\": \"2024年业务数据仪表盘\",\n  \"chart_count\": 4,\n  \"chart_list\": [\n    {\n      \"type\": \"line\",\n      \"title\": \"月度收入趋势（万元）\",\n      \"data\": [\n        {\"month\": \"1月\", \"revenue\": 120},\n        {\"month\": \"2月\", \"revenue\": 150},\n        {\"month\": \"3月\", \"revenue\": 180},\n        {\"month\": \"4月\", \"revenue\": 165},\n        {\"month\": \"5月\", \"revenue\": 195},\n        {\"month\": \"6月\", \"revenue\": 210}\n      ]\n    },\n    {\n      \"type\": \"bar\",\n      \"title\": \"产品销量排行\",\n      \"data\": [\n        {\"product\": \"产品A\", \"sales\": 200},\n        {\"product\": \"产品B\", \"sales\": 150},\n        {\"product\": \"产品C\", \"sales\": 180}\n      ]\n    },\n    {\n      \"type\": \"pie\",\n      \"title\": \"用户来源分布\",\n      \"data\": [\n        {\"source\": \"搜索引擎\", \"percentage\": 45},\n        {\"source\": \"直接访问\", \"percentage\": 30},\n        {\"source\": \"社交媒体\", \"percentage\": 25}\n      ]\n    },\n    {\n      \"type\": \"table\",\n      \"title\": \"关键指标汇总\",\n      \"headers\": [\"指标\", \"本月\", \"上月\", \"增长率\"],\n      \"data\": [\n        [\"活跃用户\", \"10,000\", \"8,500\", \"+17.6%\"],\n        [\"新增用户\", \"2,500\", \"2,000\", \"+25.0%\"],\n        [\"转化率\", \"3.5%\", \"3.2%\", \"+9.4%\"]\n      ]\n    }\n  ]\n}\n\\`\\`\\``\n  },\n\n  'vis-code': {\n    'success': `\\`\\`\\`vis-code\n{\n  \"code_type\": \"python\",\n  \"code\": \"import pandas as pd\\\\nimport numpy as np\\\\n\\\\n# 生成示例数据\\\\ndata = {\\\\n    'name': ['Alice', 'Bob', 'Charlie'],\\\\n    'age': [25, 30, 35],\\\\n    'score': [85, 92, 78]\\\\n}\\\\ndf = pd.DataFrame(data)\\\\nprint(df.head())\",\n  \"code_result\": \"     name  age  score\\\\n0   Alice   25     85\\\\n1     Bob   30     92\\\\n2 Charlie   35     78\",\n  \"err_msg\": null\n}\n\\`\\`\\``,\n    'error': `\\`\\`\\`vis-code\n{\n  \"code_type\": \"python\",\n  \"code\": \"import pandas as pd\\\\n\\\\n# 尝试读取不存在的文件\\\\ndf = pd.read_csv('non_existent_file.csv')\\\\nprint(df.head())\",\n  \"code_result\": null,\n  \"err_msg\": \"FileNotFoundError: [Errno 2] No such file or directory: 'non_existent_file.csv'\\\\n\\\\nTraceback (most recent call last):\\\\n  File \\\\\"main.py\\\\\", line 4, in <module>\\\\n    df = pd.read_csv('non_existent_file.csv')\"\n}\n\\`\\`\\``\n  }\n}\n\n// 快速发送测试消息\nconst sendTestMessage = (type: string, scenario: string = '') => {\n  if (isLoading.value) return\n  \n  // 如果没有选择场景，直接返回\n  if (!scenario) return\n  \n  const typeData = testData[type]\n  if (!typeData) return\n  \n  const testContent = typeData[scenario]\n  if (!testContent) return\n  \n  // 获取场景描述\n  const scenarioNames: Record<string, string> = {\n    'simple': '简单场景',\n    'medium': '中等场景',\n    'complex': '复杂场景',\n    'success': '成功场景',\n    'error': '错误场景'\n  }\n  \n  // 添加用户消息\n  const userMessage = `测试 ${type} - ${scenarioNames[scenario] || scenario}`\n  messages.value.push({\n    id: generateId(),\n    role: 'user',\n    content: userMessage\n  })\n  \n  // 模拟延迟后添加AI响应\n  setTimeout(() => {\n    messages.value.push({\n      id: generateId(),\n      role: 'assistant',\n      content: testContent\n    })\n    scrollToBottom()\n  }, 300)\n  \n  scrollToBottom()\n}\n\n/* \n * 功能描述: 智能流式演示 - 展示所有类型\n * 逻辑说明: \n *   - JSON内容（chart-view、agent-plans等）：瞬时加载，避免解析错误\n *   - HTML/SVG内容：使用流式输出，模拟打字效果\n */\nconst startStreamingDemo = async () => {\n  if (isLoading.value || isStreaming.value) return\n  \n  isStreaming.value = true\n  \n  // 定义演示队列\n  const demoQueue = [\n    { type: 'chart-view', scenario: 'medium', name: '图表展示 (中等场景)' },\n    { type: 'references', scenario: 'simple', name: '知识库引用' },\n    { type: 'agent-plans', scenario: 'complex', name: '执行计划 (复杂场景)' },\n    { type: 'agent-messages', scenario: 'complex', name: '对话流' },\n    { type: 'html-preview', scenario: 'complex', name: 'HTML预览' },\n    { type: 'svg-preview', scenario: 'simple', name: 'SVG图形' },\n    { type: 'vis-dashboard', scenario: 'simple', name: '仪表盘' },\n    { type: 'vis-code', scenario: 'success', name: '代码执行' }\n  ]\n  \n  // 添加演示开始消息\n  messages.value.push({\n    id: generateId(),\n    role: 'user',\n    content: '🎬 开始智能演示 - 展示所有数据类型'\n  })\n  \n  scrollToBottom()\n  await new Promise(resolve => setTimeout(resolve, 500))\n  \n  // 依次展示每个类型（智能流式输出）\n  for (let i = 0; i < demoQueue.length; i++) {\n    const demo = demoQueue[i]\n    const typeData = testData[demo.type]\n    if (!typeData) continue\n    \n    const content = typeData[demo.scenario]\n    if (!content) continue\n    \n    // 短暂延迟\n    await new Promise(resolve => setTimeout(resolve, 300))\n    \n    // 检查内容是否包含需要JSON解析的标签\n    const hasJsonContent = /```(agent-plans|agent-messages|vis-code|vis-dashboard)|<(chart-view|references)>/i.test(content)\n    \n    if (hasJsonContent) {\n      // 包含JSON内容：一次性添加完整内容（避免解析错误）\n      messages.value.push({\n        id: generateId(),\n        role: 'assistant',\n        content: content\n      })\n      scrollToBottom()\n    } else {\n      // 纯文本或HTML/SVG：使用流式输出效果\n      const messageId = generateId()\n      messages.value.push({\n        id: messageId,\n        role: 'assistant',\n        content: '',\n        streaming: true\n      })\n      scrollToBottom()\n      \n      // 按行流式输出\n      const lines = content.split('\\n')\n      for (let j = 0; j < lines.length; j++) {\n        const msg = messages.value.find(m => m.id === messageId)\n        if (msg) {\n          if (j > 0) msg.content += '\\n'\n          msg.content += lines[j]\n        }\n        scrollToBottom()\n        await new Promise(resolve => setTimeout(resolve, 15))\n      }\n      \n      // 完成流式输出\n      const msg = messages.value.find(m => m.id === messageId)\n      if (msg) msg.streaming = false\n      scrollToBottom()\n    }\n    \n    // 每个演示之间暂停\n    if (i < demoQueue.length - 1) {\n      await new Promise(resolve => setTimeout(resolve, 800))\n    }\n  }\n  \n  // 添加演示完成消息（使用流式效果）\n  await new Promise(resolve => setTimeout(resolve, 500))\n  const finalMessageId = generateId()\n  messages.value.push({\n    id: finalMessageId,\n    role: 'assistant',\n    content: '',\n    streaming: true\n  })\n  \n  const finalText = '✅ **演示完成！**\\n\\n已展示所有 8 种数据类型的渲染效果。你可以：\\n- 📱 切换到移动端查看响应式布局\\n- 🌙 切换暗色模式查看主题适配\\n- 🔄 点击按钮重新开始演示\\n- 🎯 使用下拉框选择不同场景测试\\n\\n💡 **智能流式说明**：HTML/SVG 内容使用流式输出，图表/代码等JSON数据瞬时加载，避免解析错误。'\n  const finalLines = finalText.split('\\n')\n  \n  for (let i = 0; i < finalLines.length; i++) {\n    const msg = messages.value.find(m => m.id === finalMessageId)\n    if (msg) {\n      if (i > 0) msg.content += '\\n'\n      msg.content += finalLines[i]\n    }\n    scrollToBottom()\n    await new Promise(resolve => setTimeout(resolve, 30))\n  }\n  \n  const finalMsg = messages.value.find(m => m.id === finalMessageId)\n  if (finalMsg) finalMsg.streaming = false\n  \n  isStreaming.value = false\n  scrollToBottom()\n}\n\n// 发送消息\nconst handleSend = async () => {\n  if (!inputMessage.value.trim() || isLoading.value) return\n  \n  const userInput = inputMessage.value.trim()\n  \n  // 保存用户输入，用于重新回答\n  lastUserInput.value = userInput\n  \n  // 添加用户消息\n  messages.value.push({\n    id: generateId(),\n    role: 'user',\n    content: userInput\n  })\n  \n  inputMessage.value = ''\n  scrollToBottom()\n  \n  // 触发消息发送事件\n  emit('message-sent')\n  \n  isLoading.value = true\n  errorMessage.value = ''\n  \n  try {\n    if (useStreaming.value) {\n      await sendStreamMessage(userInput)\n      // 注意：sendStreamMessage 会立即返回，isStreaming 由流的回调控制\n    } else {\n      await sendNormalMessage(userInput)\n    }\n  } catch (error: any) {\n    errorMessage.value = error.message || '发送失败，请检查网络连接和 API 配置'\n    console.error('Chat error:', error)\n    \n    // Emit error event for external handling\n    if (error.response) {\n      emit('error', error.response)\n    } else {\n      emit('error', {\n        success: false,\n        err_code: 'UNKNOWN',\n        err_msg: error.message || '发送失败',\n        data: null\n      })\n    }\n  } finally {\n    // 只重置 isLoading，isStreaming 由流的回调（onComplete/onError）控制\n    isLoading.value = false\n  }\n}\n\n// 普通模式发送\nconst sendNormalMessage = async (userInput: string) => {\n  const response = await chatApi.chat(userInput, {\n    conv_uid: currentConvUid.value || undefined,\n    model_name: selectedModel.value || undefined\n  })\n  \n  if (response.success && response.data) {\n    messages.value.push({\n      id: generateId(),\n      role: 'assistant',\n      content: response.data.context || response.data.content || ''\n    })\n    scrollToBottom()\n    \n    // 触发消息完成事件，通知父组件\n    emit('message-complete')\n  } else {\n    // Create error with response details\n    const error = new Error(response.err_msg || '请求失败') as any\n    error.response = response\n    throw error\n  }\n}\n\n// 流式模式发送\nconst sendStreamMessage = async (userInput: string) => {\n  isStreaming.value = true\n  isPaused.value = false // 重置暂停状态\n  lastUserInput.value = userInput // 保存用户输入\n  \n  console.log('[流式传输] 开始 - isStreaming:', isStreaming.value, 'isPaused:', isPaused.value)\n  \n  // 创建助手消息占位\n  const assistantMessageId = generateId()\n  messages.value.push({\n    id: assistantMessageId,\n    role: 'assistant',\n    content: '',\n    thinking: true,\n    streaming: true  // 标记为流式传输中\n  })\n  scrollToBottom()\n  \n  // 启动流式请求，立即获取 AbortController\n  const { controller, promise } = chatApi.chatStream(\n    userInput,\n    {\n      onChunk: (chunk: string) => {\n        // 接收到数据块（后端返回的是累积内容，不是增量）\n        const message = messages.value.find(m => m.id === assistantMessageId)\n        if (message) {\n          message.content = chunk\n          message.thinking = false\n        }\n        scrollToBottom()\n      },\n      onComplete: () => {\n        // 完成 - 标记流式传输结束\n        console.log('[流式传输] 完成回调 - 设置 isStreaming = false')\n        const message = messages.value.find(m => m.id === assistantMessageId)\n        if (message) {\n          message.thinking = false\n          message.streaming = false  // 流式传输完成\n        }\n        isStreaming.value = false\n        isPaused.value = false\n        currentAbortController = null\n        scrollToBottom()\n        \n        // 触发消息完成事件，通知父组件\n        emit('message-complete')\n      },\n      onError: (error: Error & { response?: any }) => {\n        // 错误处理\n        console.log('[流式传输] 错误:', error.name, error.message)\n        if (error.name !== 'AbortError') {\n          errorMessage.value = error.message\n          messages.value = messages.value.filter(m => m.id !== assistantMessageId)\n          \n          // Emit error event for external handling\n          if (error.response) {\n            emit('error', error.response)\n          } else {\n            emit('error', {\n              success: false,\n              err_code: 'STREAM_ERROR',\n              err_msg: error.message || '流式传输失败',\n              data: null\n            })\n          }\n        } else {\n          // AbortError 是正常的暂停操作\n          console.log('[流式传输] 已暂停')\n        }\n        isStreaming.value = false\n        currentAbortController = null\n      }\n    },\n    {\n      conv_uid: currentConvUid.value || undefined,\n      model_name: selectedModel.value || undefined\n    }\n  )\n  \n  // 立即保存 AbortController\n  currentAbortController = controller\n  console.log('[流式传输] AbortController 已就绪，可以随时暂停')\n  \n  // 处理 promise 的错误\n  promise.catch(error => {\n    console.error('[流式传输] 处理失败:', error)\n    isStreaming.value = false\n    currentAbortController = null\n  })\n}\n\n/* 功能按钮处理模块 */\n/*\n * 功能描述: 暂停流式传输\n * 逻辑说明: 调用AbortController.abort()停止接收流式数据\n */\nconst handlePause = () => {\n  console.log('[暂停] 点击暂停按钮 - isStreaming:', isStreaming.value, 'isPaused:', isPaused.value, 'hasController:', !!currentAbortController, 'isLoading:', isLoading.value)\n  \n  if (currentAbortController && isStreaming.value) {\n    currentAbortController.abort()\n    isStreaming.value = false\n    isPaused.value = true\n    isLoading.value = false\n    \n    // 标记最后一条消息为完成状态（虽然未完全接收）\n    const lastMsg = messages.value[messages.value.length - 1]\n    if (lastMsg && lastMsg.role === 'assistant') {\n      lastMsg.streaming = false\n      lastMsg.thinking = false\n    }\n    \n    console.log('[暂停] 流式传输已暂停')\n  } else {\n    console.warn('[暂停] 无法暂停 - controller:', !!currentAbortController, 'isStreaming:', isStreaming.value)\n  }\n}\n\n/*\n * 功能描述: 重新回答\n * 逻辑说明: 删除最后一条AI消息，重新发送上次的用户输入\n * 适用场景: 暂停后、对话结束后、查看历史后\n */\nconst handleRegenerate = async () => {\n  // 检查是否有对话历史\n  if (messages.value.length === 0) {\n    console.warn('[重新回答] 无法执行：没有对话历史')\n    return\n  }\n  \n  // 检查是否有上次的用户输入\n  if (!lastUserInput.value) {\n    console.warn('[重新回答] 无法执行：没有上次的输入')\n    return\n  }\n  \n  // 重置暂停状态\n  isPaused.value = false\n  \n  // 删除最后一条AI消息（如果存在）\n  const lastMsg = messages.value[messages.value.length - 1]\n  if (lastMsg && lastMsg.role === 'assistant') {\n    messages.value.pop()\n  }\n  \n  // 触发消息发送事件，通知父组件\n  emit('message-sent')\n  \n  // 重新发送\n  isLoading.value = true\n  errorMessage.value = ''\n  \n  try {\n    if (useStreaming.value) {\n      await sendStreamMessage(lastUserInput.value)\n    } else {\n      await sendNormalMessage(lastUserInput.value)\n    }\n  } catch (error: any) {\n    errorMessage.value = error.message || '重新回答失败'\n    console.error('[重新回答] 错误:', error)\n    // 发生错误时也触发完成事件，以恢复按钮状态\n    emit('message-complete')\n  } finally {\n    isLoading.value = false\n  }\n}\n\n/*\n * 功能描述: 清除对话记忆\n * 逻辑说明: 调用清除记忆接口，然后重新加载历史记录\n */\nconst handleClearMemory = async () => {\n  if (!currentConvUid.value) {\n    console.warn('[清除记忆] 没有当前对话ID')\n    return\n  }\n  \n  if (!confirm('确定要清除对话记忆吗？这将清空服务器端的上下文记忆。')) {\n    return\n  }\n  \n  try {\n    isLoading.value = true\n    console.log('[清除记忆] 开始清除，con_uid:', currentConvUid.value)\n    \n    // 调用清除记忆接口\n    const response = await dbgptService.clearDialogueMemory(currentConvUid.value)\n    \n    if (response.success) {\n      console.log('[清除记忆] 清除成功')\n      \n      // 清空本地消息和状态\n      messages.value = []\n      lastUserInput.value = ''\n      isPaused.value = false\n      \n      // 尝试重新加载历史记录\n      try {\n        const historyData = await dbgptService.getHistoryMessages(currentConvUid.value)\n        \n        if (historyData && historyData.length > 0) {\n          console.log('[清除记忆] 重新加载历史记录:', historyData.length, '条')\n          \n          // 转换历史记录格式\n          historyData.forEach((msg) => {\n            messages.value.push({\n              id: generateId(),\n              role: msg.role === 'human' ? 'user' : 'assistant',\n              content: msg.context || ''\n            })\n          })\n          \n          scrollToBottom()\n        } else {\n          console.log('[清除记忆] 没有历史记录需要加载')\n        }\n      } catch (error) {\n        console.warn('[清除记忆] 重新加载历史记录失败:', error)\n      }\n      \n      // 显示成功提示\n      errorMessage.value = ''\n      alert('对话记忆已清除')\n    } else {\n      console.error('[清除记忆] 清除失败:', response.err_msg)\n      errorMessage.value = response.err_msg || '清除记忆失败'\n      alert('清除记忆失败: ' + (response.err_msg || '未知错误'))\n    }\n  } catch (error: any) {\n    console.error('[清除记忆] 错误:', error)\n    errorMessage.value = '清除记忆失败，请稍后重试'\n    alert('清除记忆失败: ' + (error.message || '未知错误'))\n  } finally {\n    isLoading.value = false\n  }\n}\n/* 功能按钮处理模块end */\n\n/* 工具方法模块 */\n/**\n * 复制消息内容到剪贴板\n * @param content - 消息内容（完整的接口返回结果）\n * @param options - 复制选项\n * @returns Promise<boolean> - 是否复制成功\n */\nconst copyMessageContent = async (\n  content: string,\n  options: {\n    removeMarkdown?: boolean  // 是否移除markdown标记，默认false（保留完整格式）\n    onSuccess?: () => void    // 成功回调\n    onError?: (error: any) => void  // 失败回调\n  } = {}\n): Promise<boolean> => {\n  try {\n    let textToCopy = content\n    \n    // 过滤SSE结束标记（如 [done]、[DONE]、data: [DONE] 等）\n    textToCopy = textToCopy\n      .replace(/\\[done\\]/gi, '')           // 移除 [done] 或 [DONE]\n      .replace(/data:\\s*\\[DONE\\]/gi, '')   // 移除 data: [DONE]\n      .replace(/\\[END\\]/gi, '')            // 移除 [END]\n      .trim()\n    \n    // 如果需要移除markdown标记（纯文本模式）\n    if (options.removeMarkdown) {\n      // 移除代码块\n      textToCopy = textToCopy.replace(/```[\\s\\S]*?```/g, '')\n      // 移除markdown标记\n      textToCopy = textToCopy.replace(/[*_#`]/g, '')\n      // 清理多余空行\n      textToCopy = textToCopy.replace(/\\n{3,}/g, '\\n\\n').trim()\n    }\n    \n    // 复制到剪贴板\n    await navigator.clipboard.writeText(textToCopy)\n    \n    // 成功回调\n    options.onSuccess?.()\n    \n    return true\n  } catch (error) {\n    console.error('[IntegratedChat] 复制失败:', error)\n    \n    // 失败回调\n    options.onError?.(error)\n    \n    return false\n  }\n}\n\n/**\n * 获取消息的纯文本版本（移除markdown和特殊标记）\n * @param content - 消息内容\n * @returns 纯文本内容\n */\nconst getPlainTextContent = (content: string): string => {\n  let plainText = content\n  \n  // 移除代码块\n  plainText = plainText.replace(/```[\\s\\S]*?```/g, '')\n  \n  // 移除agent相关特殊标记\n  plainText = plainText.replace(/```agent-[\\w-]+[\\s\\S]*?```/g, '')\n  \n  // 移除vis相关特殊标记\n  plainText = plainText.replace(/```vis-[\\w-]+[\\s\\S]*?```/g, '')\n  \n  // 移除markdown标记\n  plainText = plainText.replace(/[*_#`]/g, '')\n  \n  // 清理多余空行\n  plainText = plainText.replace(/\\n{3,}/g, '\\n\\n').trim()\n  \n  return plainText\n}\n\n/**\n * 提取特殊代码块内容\n * @param content - 消息内容\n * @param type - 代码块类型（如 'agent-plans', 'agent-messages', 'vis-db-chart'）\n * @returns 提取的内容数组\n */\nconst extractSpecialBlocks = (content: string, type: string): string[] => {\n  const regex = new RegExp(`\\`\\`\\`${type}\\\\n([\\\\s\\\\S]*?)\\`\\`\\``, 'g')\n  const matches: string[] = []\n  let match\n  \n  while ((match = regex.exec(content)) !== null) {\n    matches.push(match[1])\n  }\n  \n  return matches\n}\n\n/**\n * 复制特殊代码块内容\n * @param content - 消息内容\n * @param type - 代码块类型（如 'agent-plans', 'agent-messages'）\n * @param options - 复制选项\n * @returns Promise<boolean> - 是否复制成功\n */\nconst copySpecialBlock = async (\n  content: string,\n  type: string,\n  options: {\n    index?: number  // 复制第几个匹配项（从0开始），默认复制第一个\n    includeWrapper?: boolean  // 是否包含 ```type 包装器，默认false\n    onSuccess?: () => void\n    onError?: (error: any) => void\n  } = {}\n): Promise<boolean> => {\n  try {\n    const blocks = extractSpecialBlocks(content, type)\n    \n    if (blocks.length === 0) {\n      console.warn(`[IntegratedChat] 未找到类型为 '${type}' 的代码块`)\n      options.onError?.(new Error(`未找到 ${type} 内容`))\n      return false\n    }\n    \n    const index = options.index ?? 0\n    if (index >= blocks.length) {\n      console.warn(`[IntegratedChat] 索引 ${index} 超出范围，共找到 ${blocks.length} 个代码块`)\n      options.onError?.(new Error(`索引超出范围`))\n      return false\n    }\n    \n    let textToCopy = blocks[index]\n    \n    // 如果需要包含包装器\n    if (options.includeWrapper) {\n      textToCopy = `\\`\\`\\`${type}\\n${textToCopy}\\`\\`\\``\n    }\n    \n    await navigator.clipboard.writeText(textToCopy)\n    options.onSuccess?.()\n    \n    return true\n  } catch (error) {\n    console.error(`[IntegratedChat] 复制 ${type} 内容失败:`, error)\n    options.onError?.(error)\n    return false\n  }\n}\n\n/**\n * 检查消息是否包含特殊代码块\n * @param content - 消息内容\n * @param type - 代码块类型\n * @returns 是否包含指定类型的代码块\n */\nconst hasSpecialBlock = (content: string, type: string): boolean => {\n  return extractSpecialBlocks(content, type).length > 0\n}\n/* 工具方法模块end */\n\n// 滚动到底部\nconst scrollToBottom = async () => {\n  await nextTick()\n  if (messagesContainer.value) {\n    messagesContainer.value.scrollTop = messagesContainer.value.scrollHeight\n  }\n}\n\n// 暴露方法和状态给父组件\nconst exposed = {\n  // 方法\n  newConversation,\n  handleSend,\n  sendTestMessage,\n  handlePause,\n  handleRegenerate,\n  handleClearMemory,\n  loadHistoryById,\n  \n  // 工具方法\n  copyMessageContent,      // 复制消息内容（默认保留完整格式）\n  getPlainTextContent,     // 获取纯文本版本\n  extractSpecialBlocks,    // 提取特殊代码块内容\n  copySpecialBlock,        // 复制特殊代码块\n  hasSpecialBlock,         // 检查是否包含特殊代码块\n  \n  // 状态\n  messages,\n  inputMessage,\n  currentConvUid,\n  isLoading,\n  isLoadingHistory,\n  isStreaming,\n  isPaused,\n  errorMessage,\n  selectedModel\n}\n\ndefineExpose(exposed)\n\n// 导出类型供外部使用\nexport type IntegratedChatInstance = typeof exposed\nexport type { FeedbackConfig, ChatThemeConfig }\n</script>\n\n<style scoped>\n.integrated-chat {\n  font-family: 'Inter', -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif;\n  /* 防止页面水平溢出 */\n  max-width: 100vw;\n  overflow-x: hidden;\n}\n\n/* 聊天内容包装器 - PC端居中显示 */\n.chat-content-wrapper {\n  max-width: 1024px; /* 1024px */\n  margin: 0 auto;\n  /* PC端不占满宽度，自然居中 */\n}\n\n/* 聊天输入包装器 - PC端居中显示 */\n.chat-input-wrapper {\n  max-width: 1024px; /* 1024px */\n  margin: 0 auto;\n  /* PC端不占满宽度，自然居中 */\n}\n\n.message-item {\n  animation: fadeInUp 0.3s ease-out;\n  /* 防止消息溢出 */\n  max-width: 100%;\n  overflow-x: hidden;\n}\n\n/* 用户消息样式 - 默认样式，可通过 themeConfig.userMessageStyle 覆盖 */\n.user-message {\n  background-color: #3b82f6;\n  color: #ffffff;\n  border-radius: 1rem;\n  padding: 0.75rem 1rem;\n  box-shadow: 0 1px 2px rgba(0, 0, 0, 0.05);\n}\n\n/* AI消息内容样式 - 默认样式，可通过 themeConfig.aiMessageStyle 覆盖 */\n.ai-message-content {\n  background-color: #f3f4f6;\n  color: #1f2937;\n  border-radius: 1rem;\n  padding: 0.75rem 1rem;\n}\n\n/* AI头像样式 - 默认样式，可通过 themeConfig.aiAvatarStyle 覆盖 */\n.ai-avatar {\n  width: 2rem;\n  height: 2rem;\n  border-radius: 0.5rem;\n}\n\n@keyframes fadeInUp {\n  from {\n    opacity: 0;\n    transform: translateY(20px);\n  }\n  to {\n    opacity: 1;\n    transform: translateY(0);\n  }\n}\n\n/* 移动端优化 */\n@media (max-width: 768px) {\n  .integrated-chat header {\n    padding-left: 12px;\n    padding-right: 12px;\n  }\n  \n  /* 移动端占满宽度 */\n  .chat-content-wrapper,\n  .chat-input-wrapper {\n    width: 100%;\n  }\n}\n\n/* 反馈按钮样式 */\n.feedback-actions {\n  display: flex;\n  align-items: center;\n  gap: 8px;\n  padding-top: 4px;\n}\n\n/* 反馈按钮样式 - 简化为纯图标，适配移动端 */\n.feedback-btn {\n  display: flex;\n  align-items: center;\n  justify-content: center;\n  width: 28px;\n  height: 28px;\n  padding: 0;\n  background: transparent;\n  border: none;\n  border-radius: 4px;\n  cursor: pointer;\n  transition: all 0.2s;\n  color: #8c8c8c;  /* 默认灰色 */\n  -webkit-tap-highlight-color: transparent;  /* 移除移动端点击高亮 */\n}\n\n/* 激活状态（点赞/踩成功后） */\n.feedback-btn.active {\n  color: #409eff;  /* 激活后蓝色 */\n}\n\n/* 点击时的缩放效果 */\n.feedback-btn:active {\n  transform: scale(0.9);\n}\n\n/* 仅在桌面端显示 hover 效果，避免移动端误导 */\n@media (hover: hover) and (pointer: fine) {\n  .feedback-btn:hover {\n    color: #409eff;\n    background: rgba(64, 158, 255, 0.1);\n  }\n}\n\n/* 反馈 Popover 样式 */\n.dislike-popover-content {\n  padding: 4px;\n}\n\n.dislike-reasons {\n  display: flex;\n  flex-wrap: wrap;\n  gap: 8px;\n}\n\n.dislike-reason-btn {\n  padding: 6px 12px;\n  background: #f5f5f5;\n  border: 1px solid #d9d9d9;\n  border-radius: 6px;\n  font-size: 13px;\n  color: #666;\n  cursor: pointer;\n  transition: all 0.2s;\n}\n\n.dislike-reason-btn:hover {\n  background: #e6f7ff;\n  border-color: #91d5ff;\n  color: #1890ff;\n}\n\n.dislike-reason-btn.selected {\n  background: #409eff;\n  border-color: #409eff;\n  color: white;\n}\n\n.dislike-remark {\n  margin-top: 12px;\n}\n\n.dislike-popover-footer {\n  margin-top: 8px;\n}\n/* 反馈样式end */\n</style>\n\n","<template>\n  <div class=\"chat-page h-screen bg-white dark:bg-gray-900 flex flex-col\">\n    <!-- 顶部导航栏 -->\n    <header class=\"flex items-center justify-between px-6 py-4 border-b border-gray-200 dark:border-gray-700\">\n      <!-- 左侧 -->\n      <div class=\"flex items-center space-x-3\">\n        <div class=\"w-8 h-8 bg-gradient-to-br from-blue-500 to-purple-600 rounded-lg flex items-center justify-center\">\n          <svg width=\"20\" height=\"20\" viewBox=\"0 0 24 24\" fill=\"white\">\n            <path d=\"M12 2l3.09 6.26L22 9.27l-5 4.87 1.18 6.88L12 17.77l-6.18 3.25L7 14.14 2 9.27l6.91-1.01L12 2z\"/>\n          </svg>\n        </div>\n        <span class=\"text-gray-600 dark:text-gray-300 text-sm\">打开历史</span>\n        <button class=\"text-gray-400 hover:text-gray-600 dark:hover:text-gray-200\">\n          <svg width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"currentColor\">\n            <path d=\"M7.41 8.59L12 13.17l4.59-4.58L18 10l-6 6-6-6z\"/>\n          </svg>\n        </button>\n      </div>\n      \n      <!-- 右侧控制按钮 -->\n      <div class=\"flex items-center space-x-2\">\n        <button @click=\"toggleTheme\" class=\"p-2 text-gray-400 hover:text-gray-600 dark:hover:text-gray-200 rounded-md hover:bg-gray-100 dark:hover:bg-gray-800\">\n          <svg v-if=\"!isDark\" width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"currentColor\">\n            <path d=\"M21.64,13a1,1,0,0,0-1.05-.14,8.05,8.05,0,0,1-3.37.73A8.15,8.15,0,0,1,9.08,5.49a8.59,8.59,0,0,1,.25-2A1,1,0,0,0,8,2.36,10.14,10.14,0,1,0,22,14.05,1,1,0,0,0,21.64,13Zm-9.5,6.69A8.14,8.14,0,0,1,7.08,5.22v.27A10.15,10.15,0,0,0,17.22,15.63a9.79,9.79,0,0,0,2.1-.22A8.11,8.11,0,0,1,12.14,19.73Z\"/>\n          </svg>\n          <svg v-else width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"currentColor\">\n            <path d=\"M12,4c4.41,0,8,3.59,8,8s-3.59,8-8,8s-8-3.59-8-8S7.59,4,12,4z M12,6c-3.31,0-6,2.69-6,6s2.69,6,6,6s6-2.69,6-6S15.31,6,12,6z\"/>\n          </svg>\n        </button>\n        <button @click=\"clearMessages\" class=\"p-2 text-gray-400 hover:text-gray-600 dark:hover:text-gray-200 rounded-md hover:bg-gray-100 dark:hover:bg-gray-800\">\n          <svg width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"currentColor\">\n            <path d=\"M19,4H15.5L14.5,3H9.5L8.5,4H5V6H19M6,19A2,2 0 0,0 8,21H16A2,2 0 0,0 18,19V7H6V19Z\"/>\n          </svg>\n        </button>\n      </div>\n    </header>\n\n    <!-- 主要内容区域 -->\n    <main class=\"flex-1 overflow-hidden stableScrollbar\">\n      <div class=\"w-full h-full flex flex-col\">\n        \n        <!-- 消息显示区域 -->\n        <div ref=\"messagesContainer\" class=\"flex-1 overflow-y-auto p-6\">\n          \n          <!-- 欢迎界面 -->\n          <div v-if=\"messages.length === 0\" class=\"flex flex-col items-center justify-center h-full max-w-5xl mx-auto px-6\">\n            <div class=\"text-center mb-12\">\n              <div class=\"w-16 h-16 mx-auto mb-6 bg-gradient-to-br from-blue-500 to-purple-600 rounded-2xl flex items-center justify-center\">\n                <svg width=\"32\" height=\"32\" viewBox=\"0 0 24 24\" fill=\"white\">\n                  <path d=\"M12 2l3.09 6.26L22 9.27l-5 4.87 1.18 6.88L12 17.77l-6.18 3.25L7 14.14 2 9.27l6.91-1.01L12 2z\"/>\n                </svg>\n              </div>\n              <h1 class=\"text-2xl font-medium text-gray-800 dark:text-gray-200 mb-2\">\n                今天有什么可以帮到你？\n              </h1>\n            </div>\n            \n            <!-- 快速选项 -->\n            <div class=\"grid grid-cols-2 md:grid-cols-3 lg:grid-cols-3 xl:grid-cols-3 gap-4 w-full max-w-4xl\">\n              <button \n                v-for=\"option in quickOptions\" \n                :key=\"option.id\"\n                @click=\"sendQuickMessage(option.prompt)\"\n                class=\"flex items-center space-x-3 px-6 py-4 bg-gray-50 dark:bg-gray-800 rounded-xl hover:bg-gray-100 dark:hover:bg-gray-700 transition-all duration-200 text-left hover:shadow-md border border-gray-200 dark:border-gray-700\"\n              >\n                <span class=\"text-lg\">{{ option.icon }}</span>\n                <span class=\"text-sm text-gray-700 dark:text-gray-300\">{{ option.title }}</span>\n              </button>\n            </div>\n          </div>\n\n          <!-- 消息列表 -->\n          <div class=\"max-w-5xl mx-auto px-6 w-full\">\n            <div v-for=\"message in messages\" :key=\"message.id\" class=\"mb-6\">\n              <!-- 用户消息 -->\n              <div v-if=\"message.role === 'user'\" class=\"flex justify-end\">\n                <div class=\"max-w-2xl bg-blue-500 text-white rounded-2xl px-4 py-3\">\n                  {{ message.content }}\n                </div>\n              </div>\n\n              <!-- AI消息 -->\n              <div v-else class=\"flex justify-start\">\n                <div class=\"flex items-start space-x-3 max-w-full w-full\">\n                  <div class=\"w-8 h-8 bg-gradient-to-br from-blue-500 to-purple-600 rounded-lg flex items-center justify-center flex-shrink-0 mt-1\">\n                    <svg width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"white\">\n                      <path d=\"M12 2l3.09 6.26L22 9.27l-5 4.87 1.18 6.88L12 17.77l-6.18 3.25L7 14.14 2 9.27l6.91-1.01L12 2z\"/>\n                    </svg>\n                  </div>\n                  <div class=\"flex-1\">\n                  <!-- 思考状态 -->\n                  <div v-if=\"message.thinking\" class=\"flex items-center space-x-2 text-gray-500 dark:text-gray-400 mb-2\">\n                    <div class=\"animate-spin w-3 h-3 border-2 border-blue-500 border-t-transparent rounded-full\"></div>\n                    <span class=\"text-sm\">思考中...</span>\n                  </div>\n                  \n                  <!-- 消息内容 -->\n                  <div v-if=\"message.content\" class=\"text-gray-800 dark:text-gray-200\" v-html=\"formatContent(message.content)\"></div>\n                  \n                  <!-- 图表内容 -->\n                  <div v-if=\"message.chart\" class=\"mt-4 bg-gray-50 dark:bg-gray-800 rounded-lg p-4\">\n                    <h4 v-if=\"message.chart.title\" class=\"text-lg font-medium mb-4 text-gray-800 dark:text-gray-200\">\n                      {{ message.chart.title }}\n                    </h4>\n                    \n                    <!-- 柱状图 -->\n                    <div v-if=\"message.chart.type === 'bar'\" class=\"space-y-2\">\n                      <div v-for=\"(value, index) in message.chart.data.values\" :key=\"index\" class=\"flex items-center space-x-3\">\n                        <span class=\"w-12 text-sm text-gray-600 dark:text-gray-400 text-right\">\n                          {{ message.chart.data.labels[index] }}\n                        </span>\n                        <div class=\"flex-1 bg-gray-200 dark:bg-gray-700 rounded-full h-6 relative\">\n                          <div \n                            class=\"bg-gradient-to-r from-blue-500 to-purple-500 h-6 rounded-full flex items-center justify-end pr-2 text-white text-xs font-medium transition-all duration-1000 ease-out\"\n                            :style=\"{ width: (value / Math.max(...message.chart.data.values)) * 100 + '%' }\"\n                          >\n                            {{ value }}\n                          </div>\n                        </div>\n                      </div>\n                    </div>\n                    \n                    <!-- 折线图 -->\n                    <div v-else-if=\"message.chart.type === 'line'\" class=\"grid grid-cols-2 md:grid-cols-3 gap-3\">\n                      <div v-for=\"(value, index) in message.chart.data.values\" :key=\"index\" \n                           class=\"bg-white dark:bg-gray-700 p-3 rounded-lg border border-gray-200 dark:border-gray-600\">\n                        <div class=\"text-xs text-gray-500 dark:text-gray-400 mb-1\">\n                          {{ message.chart.data.labels[index] }}\n                        </div>\n                        <div class=\"text-lg font-bold text-blue-600 dark:text-blue-400\">\n                          {{ value }}\n                        </div>\n                      </div>\n                    </div>\n                    \n                    <!-- 饼图 -->\n                    <div v-else-if=\"message.chart.type === 'pie'\" class=\"space-y-4\">\n                      <div v-for=\"(item, index) in message.chart.data\" :key=\"index\" \n                           class=\"flex items-center justify-between\">\n                        <div class=\"flex items-center space-x-3\">\n                          <div class=\"w-3 h-3 rounded-full bg-blue-500\" :style=\"{ backgroundColor: getPieColor(index) }\"></div>\n                          <span class=\"text-gray-700 dark:text-gray-300 text-sm\">{{ item.name }}</span>\n                        </div>\n                        <div class=\"flex items-center space-x-3\">\n                          <div class=\"w-24 bg-gray-200 dark:bg-gray-700 rounded-full h-2\">\n                            <div class=\"h-2 rounded-full transition-all duration-1000 ease-out\" \n                                 :style=\"{ width: item.value + '%', backgroundColor: getPieColor(index) }\">\n                            </div>\n                          </div>\n                          <span class=\"text-sm font-medium text-gray-600 dark:text-gray-400 w-10 text-right\">\n                            {{ item.value }}%\n                          </span>\n                        </div>\n                      </div>\n                    </div>\n                  </div>\n                  \n                  <!-- 打字效果 -->\n                  <div v-if=\"message.typing\" class=\"flex items-center space-x-1 mt-2\">\n                    <div class=\"w-1.5 h-1.5 bg-blue-500 rounded-full animate-bounce\"></div>\n                    <div class=\"w-1.5 h-1.5 bg-blue-500 rounded-full animate-bounce\" style=\"animation-delay: 0.1s\"></div>\n                    <div class=\"w-1.5 h-1.5 bg-blue-500 rounded-full animate-bounce\" style=\"animation-delay: 0.2s\"></div>\n                  </div>\n                  </div>\n                </div>\n              </div>\n            </div>\n          </div>\n\n          <!-- 加载状态 -->\n          <div class=\"max-w-5xl mx-auto px-6 w-full\">\n          <div v-if=\"isLoading\" class=\"flex justify-start mb-6\">\n            <div class=\"flex items-start space-x-3\">\n              <div class=\"w-8 h-8 bg-gradient-to-br from-blue-500 to-purple-600 rounded-lg flex items-center justify-center flex-shrink-0 mt-1\">\n                <svg width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"white\">\n                  <path d=\"M12 2l3.09 6.26L22 9.27l-5 4.87 1.18 6.88L12 17.77l-6.18 3.25L7 14.14 2 9.27l6.91-1.01L12 2z\"/>\n                </svg>\n              </div>\n              <div class=\"flex items-center space-x-2 text-gray-500 dark:text-gray-400\">\n                <div class=\"animate-spin w-3 h-3 border-2 border-blue-500 border-t-transparent rounded-full\"></div>\n                <span class=\"text-sm\">正在生成回复...</span>\n              </div>\n            </div>\n          </div>\n          </div>\n        </div>\n\n        <!-- 输入区域 -->\n        <div class=\"p-4 bg-white dark:bg-gray-900\">\n          <div class=\"max-w-5xl mx-auto\">\n            <div class=\"relative bg-gray-100 dark:bg-gray-800 rounded-2xl border border-gray-200 dark:border-gray-700\">\n              <div class=\"flex items-center px-4 py-3\">\n                <!-- 左侧功能按钮 -->\n                <div class=\"flex items-center space-x-2 mr-3\">\n                  <button class=\"p-1.5 text-gray-400 hover:text-gray-600 dark:hover:text-gray-300 rounded-md hover:bg-gray-200 dark:hover:bg-gray-700\">\n                    <svg width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"currentColor\">\n                      <path d=\"M14,2H6A2,2 0 0,0 4,4V20A2,2 0 0,0 6,22H18A2,2 0 0,0 20,20V8L14,2M18,20H6V4H13V9H18V20Z\"/>\n                    </svg>\n                  </button>\n                  <button class=\"p-1.5 text-gray-400 hover:text-gray-600 dark:hover:text-gray-300 rounded-md hover:bg-gray-200 dark:hover:bg-gray-700\">\n                    <svg width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"currentColor\">\n                      <path d=\"M12,2A3,3 0 0,1 15,5V11A3,3 0 0,1 12,14A3,3 0 0,1 9,11V5A3,3 0 0,1 12,2M19,11C19,14.53 16.39,17.44 13,17.93V21H11V17.93C7.61,17.44 5,14.53 5,11H7A5,5 0 0,0 12,16A5,5 0 0,0 17,11H19Z\"/>\n                    </svg>\n                  </button>\n                </div>\n                \n                <!-- 输入框 -->\n                <div class=\"flex-1\">\n                  <textarea\n                    v-model=\"inputMessage\"\n                    placeholder=\"给 DeepSeek 发送消息\"\n                    class=\"w-full bg-transparent text-gray-800 dark:text-gray-200 placeholder-gray-500 dark:placeholder-gray-400 resize-none outline-none\"\n                    rows=\"1\"\n                    @keydown.enter.exact=\"handleSend\"\n                    @keydown.enter.shift.exact.prevent=\"inputMessage += '\\n'\"\n                    @input=\"adjustTextarea\"\n                    :disabled=\"isLoading\"\n                  ></textarea>\n                </div>\n                \n                <!-- 发送按钮 -->\n                <button \n                  @click=\"handleSend\"\n                  :disabled=\"!inputMessage.trim() || isLoading\"\n                  class=\"ml-3 p-2 bg-blue-500 hover:bg-blue-600 disabled:bg-gray-300 dark:disabled:bg-gray-600 text-white rounded-full transition-colors\"\n                >\n                  <svg v-if=\"!isLoading\" width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"currentColor\">\n                    <path d=\"M2,21L23,12L2,3V10L17,12L2,14V21Z\"/>\n                  </svg>\n                  <div v-else class=\"animate-spin w-4 h-4 border-2 border-white border-t-transparent rounded-full\"></div>\n                </button>\n              </div>\n            </div>\n            \n            <!-- 底部提示 -->\n            <div class=\"text-center mt-3\">\n              <span class=\"text-xs text-gray-500 dark:text-gray-400\">\n                DeepSeek 发送消息\n              </span>\n            </div>\n          </div>\n        </div>\n      </div>\n    </main>\n  </div>\n</template>\n\n<script setup lang=\"ts\">\nimport { ref, nextTick, computed, onMounted } from 'vue'\n// import ChartRenderer from '@/components/ChartRenderer.vue'\n\ninterface Message {\n  id: string\n  role: 'user' | 'assistant'\n  content: string\n  thinking?: boolean\n  typing?: boolean\n  chart?: LocalChartData\n}\n\ninterface LocalChartData {\n  type: 'bar' | 'line' | 'pie'\n  title: string\n  data: any\n}\n\n// 响应式数据\nconst messagesContainer = ref<HTMLElement>()\nconst inputMessage = ref('')\nconst messages = ref<Message[]>([])\nconst isLoading = ref(false)\nconst isDarkMode = ref(false)\n\n// 计算属性\nconst isDark = computed(() => isDarkMode.value)\n\n// 快速选项\nconst quickOptions = [\n  { id: 1, icon: '📊', title: '生成图表', prompt: '帮我生成一个销售数据的柱状图' },\n  { id: 2, icon: '📈', title: '数据分析', prompt: '分析用户增长趋势并生成折线图' },\n  { id: 3, icon: '🥧', title: '饼图展示', prompt: '创建市场份额饼图' },\n  { id: 4, icon: '💻', title: '代码示例', prompt: '提供一个Vue 3组件的代码示例' },\n  { id: 5, icon: '🌡️', title: '温度图表', prompt: '显示一周温度变化的折线图' },\n  { id: 6, icon: '🎨', title: '展示所有类型（智能流式）', prompt: '__SHOW_ALL_COMPONENTS__' }\n]\n\n// 方法\nconst toggleTheme = () => {\n  isDarkMode.value = !isDarkMode.value\n  \n  // 应用主题类\n  if (isDarkMode.value) {\n    document.documentElement.classList.add('dark')\n  } else {\n    document.documentElement.classList.remove('dark')\n  }\n  \n  // 保存主题设置到localStorage\n  localStorage.setItem('theme', isDarkMode.value ? 'dark' : 'light')\n}\n\nconst clearMessages = () => {\n  messages.value = []\n}\n\nconst generateId = () => Date.now().toString() + Math.random().toString(36).substr(2, 9)\n\nconst sendQuickMessage = (prompt: string) => {\n  // 如果是展示所有组件的特殊指令，跳转到演示页面\n  if (prompt === '__SHOW_ALL_COMPONENTS__') {\n    window.open('/components-demo', '_blank')\n    return\n  }\n  sendMessage(prompt)\n}\n\nconst handleSend = () => {\n  if (!inputMessage.value.trim() || isLoading.value) return\n  sendMessage(inputMessage.value.trim())\n  inputMessage.value = ''\n}\n\nconst sendMessage = async (content: string) => {\n  // 添加用户消息\n  const userMessage: Message = {\n    id: generateId(),\n    role: 'user',\n    content\n  }\n  messages.value.push(userMessage)\n  scrollToBottom()\n  \n  // 开始AI回复\n  isLoading.value = true\n  \n  // 添加思考状态\n  const thinkingMessage: Message = {\n    id: generateId(),\n    role: 'assistant',\n    content: '',\n    thinking: true\n  }\n  messages.value.push(thinkingMessage)\n  scrollToBottom()\n  \n  // 模拟思考时间\n  await new Promise(resolve => setTimeout(resolve, 1000))\n  \n  // 移除思考消息\n  messages.value = messages.value.filter(m => m.id !== thinkingMessage.id)\n  \n  // 生成AI回复\n  const response = generateResponse(content)\n  \n  const aiMessage: Message = {\n    id: generateId(),\n    role: 'assistant',\n    content: '',\n    typing: true,\n    chart: (response.chart || undefined) as any\n  }\n  messages.value.push(aiMessage)\n  scrollToBottom()\n  \n  // 打字效果\n  await simulateTyping(aiMessage, response.text)\n  \n  isLoading.value = false\n}\n\nconst simulateTyping = async (message: Message, text: string) => {\n  const chars = text.split('')\n  for (let i = 0; i < chars.length; i++) {\n    message.content += chars[i]\n    scrollToBottom()\n    await new Promise(resolve => setTimeout(resolve, 20))\n  }\n  message.typing = false\n  scrollToBottom()\n}\n\nconst generateResponse = (input: string) => {\n  const lowerInput = input.toLowerCase()\n\n  if (lowerInput.includes('销售') || lowerInput.includes('柱状图')) {\n    return {\n      text: `我来为您分析销售数据并生成柱状图。\n\n## 2024年月度销售数据分析\n\n从图表可以看出：\n- **3月份**表现最佳，销售额达到200万元\n- **2月份**和**6月份**表现稳定\n- **5月份**相对较低，需要关注\n\n### 建议：\n1. 分析3月份成功因素\n2. 针对5月份制定改进措施\n3. 保持良好势头`,\n      chart: {\n        type: 'bar',\n        title: '2024年月度销售数据（万元）',\n        data: {\n          labels: ['1月', '2月', '3月', '4月', '5月', '6月'],\n          values: [120, 132, 200, 156, 89, 135]\n        }\n      }\n    }\n  }\n\n  if (lowerInput.includes('用户') || lowerInput.includes('折线图')) {\n    return {\n      text: `用户增长趋势分析报告：\n\n## 月活跃用户增长分析\n\n### 关键指标：\n- **总体趋势**：持续稳定增长\n- **增长率**：平均月增长率约4.2%\n- **用户基数**：已突破240万大关\n\n### 优化建议：\n- 继续保持产品质量\n- 加强用户留存策略\n- 扩大市场推广覆盖面`,\n      chart: {\n        type: 'line',\n        title: '月活跃用户增长趋势（万人）',\n        data: {\n          labels: ['1月', '2月', '3月', '4月', '5月', '6月'],\n          values: [186, 201, 225, 238, 241, 246]\n        }\n      }\n    }\n  }\n\n  if (lowerInput.includes('市场') || lowerInput.includes('饼图')) {\n    return {\n      text: `市场份额分布分析：\n\n## 产品线市场表现\n\n### 市场占有率分析：\n- **智能产品线**：35% - 市场领导者地位\n- **传统产品线**：28% - 稳定的收入来源  \n- **新兴产品线**：20% - 快速增长潜力\n- **其他产品**：17% - 补充性产品组合\n\n### 战略建议：\n1. 巩固智能产品线优势地位\n2. 升级传统产品线，提升竞争力\n3. 加大新兴产品线投入`,\n      chart: {\n        type: 'pie',\n        title: '产品线市场份额分布',\n        data: [\n          { name: '智能产品线', value: 35 },\n          { name: '传统产品线', value: 28 },\n          { name: '新兴产品线', value: 20 },\n          { name: '其他产品', value: 17 }\n        ]\n      }\n    }\n  }\n\n  if (lowerInput.includes('代码') || lowerInput.includes('vue')) {\n    return {\n      text: `这里是一个Vue 3组件的示例：\n\n\\`\\`\\`javascript\n// UserCard.vue\nimport { ref, computed } from 'vue'\n\nexport default {\n  props: {\n    user: {\n      type: Object,\n      required: true\n    }\n  },\n  setup(props) {\n    const isFollowing = ref(false)\n    \n    const buttonClass = computed(() => ({\n      'btn': true,\n      'btn-primary': !isFollowing.value,\n      'btn-secondary': isFollowing.value\n    }))\n    \n    const toggleFollow = () => {\n      isFollowing.value = !isFollowing.value\n    }\n    \n    return {\n      isFollowing,\n      buttonClass,\n      toggleFollow\n    }\n  }\n}\n\\`\\`\\`\n\n这个组件展示了Vue 3的核心特性：\n- **Composition API**：使用 setup 函数\n- **响应式数据**：ref 和 computed\n- **事件处理**：点击切换状态`,\n      chart: null\n    }\n  }\n\n  return {\n    text: `您好！我是 AI助手，很高兴为您服务。\n\n我可以帮助您：\n\n## 📊 数据分析与可视化\n- 生成各类图表（柱状图、折线图、饼图等）\n- 数据趋势分析和洞察\n- 业务指标监控和报告\n\n## 💻 编程与开发\n- 代码示例和最佳实践\n- 技术问题解答\n- 架构设计建议\n\n## 📝 内容创作\n- 文档撰写\n- 产品介绍\n- 技术文档\n\n请告诉我您需要什么帮助！`,\n    chart: null\n  }\n}\n\nconst formatContent = (content: string) => {\n  return content\n    .replace(/\\*\\*(.*?)\\*\\*/g, '<strong>$1</strong>')\n    .replace(/\\*(.*?)\\*/g, '<em>$1</em>')\n    .replace(/`(.*?)`/g, '<code class=\"bg-gray-100 dark:bg-gray-700 px-1 rounded text-sm\">$1</code>')\n    .replace(/```([\\s\\S]*?)```/g, '<pre class=\"bg-gray-100 dark:bg-gray-700 p-3 rounded-lg overflow-x-auto my-2\"><code>$1</code></pre>')\n    .replace(/^### (.*$)/gim, '<h3 class=\"text-lg font-semibold mt-4 mb-2\">$1</h3>')\n    .replace(/^## (.*$)/gim, '<h2 class=\"text-xl font-bold mt-6 mb-3\">$1</h2>')\n    .replace(/^# (.*$)/gim, '<h1 class=\"text-2xl font-bold mt-8 mb-4\">$1</h1>')\n    .replace(/^\\- (.*$)/gim, '<li class=\"ml-4\">• $1</li>')\n    .replace(/\\n/g, '<br>')\n}\n\nconst scrollToBottom = async () => {\n  await nextTick()\n  if (messagesContainer.value) {\n    messagesContainer.value.scrollTop = messagesContainer.value.scrollHeight\n  }\n}\n\nconst adjustTextarea = (event: Event) => {\n  const textarea = event.target as HTMLTextAreaElement\n  textarea.style.height = 'auto'\n  textarea.style.height = Math.min(textarea.scrollHeight, 120) + 'px'\n}\n\n// 获取饼图颜色\nconst getPieColor = (index: number) => {\n  const colors = [\n    '#3B82F6', // blue\n    '#8B5CF6', // purple\n    '#06B6D4', // cyan\n    '#10B981', // emerald\n    '#F59E0B', // amber\n    '#EF4444', // red\n  ]\n  return colors[index % colors.length]\n}\n\n// 初始化主题（在组件创建时立即执行）\nconst initTheme = () => {\n  // 从localStorage获取保存的主题，如果没有则使用系统主题\n  const savedTheme = localStorage.getItem('theme')\n  if (savedTheme) {\n    isDarkMode.value = savedTheme === 'dark'\n  } else if (window.matchMedia && window.matchMedia('(prefers-color-scheme: dark)').matches) {\n    isDarkMode.value = true\n  }\n  \n  // 立即应用主题类\n  if (isDarkMode.value) {\n    document.documentElement.classList.add('dark')\n  } else {\n    document.documentElement.classList.remove('dark')\n  }\n}\n\n// 在组件创建时立即初始化主题\ninitTheme()\n\nonMounted(() => {\n  // 组件挂载后再次确保主题正确\n  if (isDarkMode.value) {\n    document.documentElement.classList.add('dark')\n  } else {\n    document.documentElement.classList.remove('dark')\n  }\n})\n</script>\n\n<style scoped>\n.chat-page {\n  font-family: 'Inter', -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif;\n}\n\n/* 滚动条样式 */\n::-webkit-scrollbar {\n  width: 6px;\n}\n\n::-webkit-scrollbar-track {\n  background: transparent;\n}\n\n::-webkit-scrollbar-thumb {\n  background: #cbd5e1;\n  border-radius: 3px;\n}\n\n::-webkit-scrollbar-thumb:hover {\n  background: #94a3b8;\n}\n\n.dark ::-webkit-scrollbar-thumb {\n  background: #475569;\n}\n\n.dark ::-webkit-scrollbar-thumb:hover {\n  background: #64748b;\n}\n\n/* 动画 */\n@keyframes fadeInUp {\n  from {\n    opacity: 0;\n    transform: translateY(20px);\n  }\n  to {\n    opacity: 1;\n    transform: translateY(0);\n  }\n}\n\n.message-item {\n  animation: fadeInUp 0.3s ease-out;\n}\n</style>\n","import { defineStore } from 'pinia'\nimport { ref, computed, watch } from 'vue'\nimport type { \n  ChatMessage, \n  DialogueInfo, \n  AppInfo,\n  ChartData \n} from '@/types/chat'\n\nexport const useChatStore = defineStore('chat', () => {\n  // 基础状态\n  const mode = ref<'dark' | 'light'>('light')\n  const isMenuExpand = ref<boolean>(true)\n  const isContract = ref<boolean>(false)\n  const scene = ref<string>('')\n  const chatId = ref<string>('')\n  const model = ref<string>('')\n  const modelList = ref<string[]>([])\n  \n  // 对话相关状态\n  const history = ref<ChatMessage[]>([])\n  const dialogueList = ref<any[]>([])\n  const currentDialogInfo = ref<DialogueInfo>({\n    chat_scene: '',\n    app_code: ''\n  })\n  const appInfo = ref<AppInfo>({} as AppInfo)\n  \n  // 聊天状态\n  const replyLoading = ref<boolean>(false)\n  const canAbort = ref<boolean>(false)\n  const isPaused = ref<boolean>(false) // 是否已暂停\n  const lastUserInput = ref<string>('') // 最后一次用户输入，用于重新回答\n  const agent = ref<string>('')\n  const temperatureValue = ref<number>(0.6)\n  const maxNewTokensValue = ref<number>(4000)\n  const resourceValue = ref<any>()\n  const modelValue = ref<string>('')\n  \n  // 图表数据\n  const chartsData = ref<ChartData[]>([])\n  \n  // 计算属性\n  const currentDialogue = computed(() => {\n    return dialogueList.value?.find(item => item.conv_uid === chatId.value) || {}\n  })\n  \n  const isChatDefault = computed(() => {\n    return !chatId.value && !scene.value\n  })\n  \n  // 方法\n  const setMode = (newMode: 'dark' | 'light') => {\n    mode.value = newMode\n    localStorage.setItem('theme', newMode)\n    \n    // 更新body class\n    document.body.classList.remove('dark', 'light')\n    document.body.classList.add(newMode)\n  }\n  \n  const setCurrentDialogInfo = (info: DialogueInfo) => {\n    currentDialogInfo.value = info\n    localStorage.setItem('cur_dialog_info', JSON.stringify(info))\n  }\n  \n  const addMessage = (message: ChatMessage) => {\n    history.value.push(message)\n  }\n  \n  const updateLastMessage = (content: string, thinking = false) => {\n    if (history.value.length > 0) {\n      const lastMessage = history.value[history.value.length - 1]\n      lastMessage.context = content\n      lastMessage.thinking = thinking\n    }\n  }\n  \n  const clearHistory = () => {\n    history.value = []\n  }\n  \n  const setAppInfo = (info: AppInfo) => {\n    appInfo.value = info\n    \n    // 更新相关参数\n    const params = info.param_need || []\n    temperatureValue.value = params.find(p => p.type === 'temperature')?.value || 0.6\n    maxNewTokensValue.value = params.find(p => p.type === 'max_new_tokens')?.value || 4000\n    modelValue.value = params.find(p => p.type === 'model')?.value || model.value\n    resourceValue.value = params.find(p => p.type === 'resource')?.bind_value\n  }\n  \n  // 监听主题变化\n  watch(mode, (newMode) => {\n    document.documentElement.setAttribute('data-theme', newMode)\n  }, { immediate: true })\n  \n  // 初始化\n  const initializeStore = () => {\n    // 从localStorage恢复状态\n    const savedTheme = localStorage.getItem('theme') as 'dark' | 'light'\n    if (savedTheme) {\n      setMode(savedTheme)\n    } else {\n      const prefersDark = window.matchMedia('(prefers-color-scheme: dark)').matches\n      setMode(prefersDark ? 'dark' : 'light')\n    }\n    \n    try {\n      const dialogInfo = JSON.parse(localStorage.getItem('cur_dialog_info') || '{}')\n      if (dialogInfo.chat_scene) {\n        setCurrentDialogInfo(dialogInfo)\n      }\n    } catch (error) {\n      console.error('Failed to parse dialog info from localStorage:', error)\n    }\n  }\n  \n  return {\n    // 状态\n    mode,\n    isMenuExpand,\n    isContract,\n    scene,\n    chatId,\n    model,\n    modelList,\n    history,\n    dialogueList,\n    currentDialogInfo,\n    appInfo,\n    replyLoading,\n    canAbort,\n    isPaused,\n    lastUserInput,\n    agent,\n    temperatureValue,\n    maxNewTokensValue,\n    resourceValue,\n    modelValue,\n    chartsData,\n    \n    // 计算属性\n    currentDialogue,\n    isChatDefault,\n    \n    // 方法\n    setMode,\n    setCurrentDialogInfo,\n    addMessage,\n    updateLastMessage,\n    clearHistory,\n    setAppInfo,\n    initializeStore\n  }\n})\n","import { ref } from 'vue'\nimport { useChatStore } from '@/stores/chatStore'\nimport type { ChatParams, UserChatContent } from '@/types/chat'\nimport { ElMessage } from 'element-plus'\nimport { dbgptService } from '@/services/dbgpt'\n\ninterface UseChatOptions {\n  queryAgentURL?: string\n  app_code?: string\n}\n\nexport function useChat(options: UseChatOptions = {}) {\n  const { \n    queryAgentURL = '/api/v1/chat/completions',\n    app_code = ''\n  } = options\n  \n  const chatStore = useChatStore()\n  const ctrl = ref<AbortController>()\n  \n  // 流式聊天方法\n  const chat = async (params: ChatParams) => {\n    const { data, chatId, onMessage, onDone, onError, ctrl: abortCtrl } = params\n    \n    if (abortCtrl) {\n      ctrl.value = abortCtrl\n    }\n    \n    if (!data?.user_input && !data?.doc_id) {\n      ElMessage.warning('请输入内容')\n      return\n    }\n    \n    // 构建请求参数\n    const requestParams: Record<string, any> = {\n      conv_uid: chatId,\n      app_code,\n      ...data\n    }\n    \n    try {\n      // 使用EventSource进行流式通信\n      const response = await fetch(`${import.meta.env.VITE_API_BASE_URL || ''}${queryAgentURL}`, {\n        method: 'POST',\n        headers: {\n          'Content-Type': 'application/json',\n          'X-User-Id': getUserId() || ''\n        },\n        body: JSON.stringify(requestParams),\n        signal: ctrl.value?.signal\n      })\n      \n      if (!response.ok) {\n        throw new Error(`HTTP error! status: ${response.status}`)\n      }\n      \n      // 处理流式响应\n      const reader = response.body?.getReader()\n      const decoder = new TextDecoder()\n      \n      if (!reader) {\n        throw new Error('No reader available')\n      }\n      \n      try {\n        while (true) {\n          const { done, value } = await reader.read()\n          \n          if (done) {\n            onDone?.()\n            break\n          }\n          \n          const chunk = decoder.decode(value, { stream: true })\n          const lines = chunk.split('\\n')\n          \n          for (const line of lines) {\n            if (line.startsWith('data: ')) {\n              const data = line.slice(6).trim()\n              \n              if (data === '[DONE]') {\n                onDone?.()\n                return\n              }\n              \n              if (data.startsWith('[ERROR]')) {\n                onError?.(data.replace('[ERROR]', ''))\n                return\n              }\n              \n              try {\n                const parsed = JSON.parse(data)\n                let message = ''\n                \n                // 根据场景解析消息\n                if (chatStore.scene === 'chat_agent') {\n                  message = parsed.vis || ''\n                } else {\n                  message = parsed.choices?.[0]?.message?.content || parsed.content || ''\n                }\n                \n                if (message) {\n                  onMessage(message)\n                }\n              } catch (e) {\n                // 如果不是JSON，直接作为文本处理\n                if (data && data !== '') {\n                  onMessage(data.replace(/\\\\n/g, '\\n'))\n                }\n              }\n            }\n          }\n        }\n      } finally {\n        reader.releaseLock()\n      }\n      \n    } catch (error) {\n      console.error('Chat error:', error)\n      if (error instanceof Error && error.name !== 'AbortError') {\n        onError?.('抱歉，遇到了一些错误，请稍后重试', error)\n      }\n    }\n  }\n  \n  // 处理聊天请求\n  const handleChat = async (content: UserChatContent, extraData?: Record<string, any>) => {\n    return new Promise<void>((resolve) => {\n      const abortController = new AbortController()\n      ctrl.value = abortController\n      \n      // 保存用户输入，用于重新回答\n      chatStore.lastUserInput = typeof content === 'string' ? content : JSON.stringify(content)\n      chatStore.isPaused = false // 重置暂停状态\n      \n      chatStore.replyLoading = true\n      \n      // 格式化显示内容\n      let formattedDisplayContent = ''\n      if (typeof content === 'string') {\n        formattedDisplayContent = content\n      } else {\n        const textItems = content.content?.filter(item => item.type === 'text') || []\n        const mediaItems = content.content?.filter(item => item.type !== 'text') || []\n        \n        formattedDisplayContent = textItems.map(item => item.text).join(' ')\n        \n        // 处理媒体项\n        const mediaMarkdown = mediaItems.map(item => {\n          if (item.type === 'image_url') {\n            const displayUrl = transformFileUrl(item.image_url?.url || '')\n            const fileName = item.image_url?.fileName || 'image'\n            return `\\n![${fileName}](${displayUrl})`\n          } else if (item.type === 'video') {\n            const displayUrl = transformFileUrl(item.video || '')\n            return `\\n[Video](${displayUrl})`\n          }\n          return `\\n[${item.type} attachment]`\n        }).join('\\n')\n        \n        if (mediaMarkdown) {\n          formattedDisplayContent += '\\n' + mediaMarkdown\n        }\n      }\n      \n      // 添加用户消息\n      const userMessage = {\n        role: 'human' as const,\n        context: formattedDisplayContent,\n        model_name: extraData?.model_name || chatStore.modelValue,\n        order: getNextOrder(),\n        time_stamp: Date.now()\n      }\n      \n      // 添加AI回复占位符\n      const aiMessage = {\n        role: 'view' as const,\n        context: '',\n        model_name: extraData?.model_name || chatStore.modelValue,\n        order: getNextOrder(),\n        time_stamp: Date.now(),\n        thinking: true\n      }\n      \n      chatStore.addMessage(userMessage)\n      chatStore.addMessage(aiMessage)\n      \n      const messageIndex = chatStore.history.length - 1\n      \n      // 构建API数据\n      const apiData = {\n        chat_mode: chatStore.scene,\n        model_name: chatStore.modelValue,\n        user_input: content,\n        ...extraData\n      }\n      \n      // 发起聊天请求\n      chat({\n        data: apiData,\n        chatId: chatStore.chatId,\n        ctrl: abortController,\n        onMessage: (message: string) => {\n          chatStore.canAbort = true\n          \n          if (extraData?.incremental) {\n            chatStore.history[messageIndex].context += message\n          } else {\n            chatStore.history[messageIndex].context = message\n          }\n          chatStore.history[messageIndex].thinking = false\n        },\n        onDone: () => {\n          chatStore.replyLoading = false\n          chatStore.canAbort = false\n          resolve()\n        },\n        onClose: () => {\n          chatStore.replyLoading = false\n          chatStore.canAbort = false\n          resolve()\n        },\n        onError: (message: string) => {\n          chatStore.replyLoading = false\n          chatStore.canAbort = false\n          chatStore.history[messageIndex].context = message\n          chatStore.history[messageIndex].thinking = false\n          resolve()\n        }\n      })\n    })\n  }\n  \n  /* 暂停功能模块 */\n  // 暂停聊天（流式传输）\n  const pauseChat = () => {\n    if (ctrl.value && chatStore.replyLoading) {\n      ctrl.value.abort()\n      chatStore.replyLoading = false\n      chatStore.canAbort = false\n      chatStore.isPaused = true // 标记为暂停状态\n      console.log('[聊天] 已暂停')\n    }\n  }\n\n  // 重新回答（使用上次的输入重新发送）\n  const regenerateAnswer = async () => {\n    if (!chatStore.lastUserInput || !chatStore.isPaused) {\n      console.warn('[聊天] 无法重新回答：没有上次的输入或未处于暂停状态')\n      return\n    }\n    \n    // 重置暂停状态\n    chatStore.isPaused = false\n    \n    // 删除最后一条AI消息（如果存在）\n    const lastMessage = chatStore.history[chatStore.history.length - 1]\n    if (lastMessage && lastMessage.role === 'view') {\n      chatStore.history.pop()\n    }\n    \n    // 重新发送最后一次的用户输入\n    await handleChat(chatStore.lastUserInput)\n  }\n\n  /*\n   * 功能描述: 清除对话记忆\n   * 逻辑说明: 调用清除记忆接口，清空服务器端的上下文记忆，然后重新加载历史记录\n   */\n  const clearChatMemory = async () => {\n    const conUid = chatStore.chatId\n    \n    if (!conUid) {\n      ElMessage.warning('当前没有对话ID')\n      return\n    }\n    \n    try {\n      ElMessage.info('正在清除对话记忆...')\n      \n      // 调用清除记忆接口\n      const response = await dbgptService.clearDialogueMemory(conUid)\n      \n      if (response.success) {\n        ElMessage.success('对话记忆已清除')\n        \n        // 清空本地历史记录\n        chatStore.clearHistory()\n        \n        // 重新加载历史记录（如果有）\n        try {\n          const historyResponse = await (dbgptService as any).getDialogueHistory(conUid)\n          if (historyResponse.success && historyResponse.data) {\n            // 将历史记录转换为当前格式并添加到store\n            historyResponse.data.forEach((msg: any) => {\n              chatStore.addMessage({\n                role: msg.role === 'human' ? 'human' : 'view',\n                context: msg.context,\n                model_name: msg.model_name,\n                order: msg.order,\n                time_stamp: new Date(msg.create_time || Date.now()).getTime()\n              } as any)\n            })\n          }\n        } catch (error) {\n          console.warn('[聊天] 重新加载历史记录失败:', error)\n        }\n      } else {\n        ElMessage.error(response.err_msg || '清除记忆失败')\n      }\n    } catch (error) {\n      console.error('[聊天] 清除记忆失败:', error)\n      ElMessage.error('清除记忆失败，请稍后重试')\n    }\n  }\n  /* 暂停功能模块end */\n\n  // 中止聊天（兼容旧版本）\n  const abortChat = () => {\n    pauseChat()\n  }\n  \n  return {\n    chat,\n    handleChat,\n    abortChat,\n    pauseChat,\n    regenerateAnswer,\n    clearChatMemory,\n    ctrl\n  }\n}\n\n// 辅助函数\nfunction getUserId(): string {\n  return localStorage.getItem('user_id') || 'anonymous'\n}\n\nfunction transformFileUrl(url: string): string {\n  if (!url) return ''\n  if (url.startsWith('http')) return url\n  return `${import.meta.env.VITE_API_BASE_URL || ''}${url}`\n}\n\nfunction getNextOrder(): number {\n  // 简单的订单号生成逻辑\n  return Date.now()\n}\n","<template>\r\n  <div class=\"chat-header bg-white/80 dark:bg-gray-800/80 backdrop-blur-md border-b border-gray-200 dark:border-gray-700 sticky top-0 z-10\">\r\n    <div class=\"flex items-center justify-between p-4\">\r\n      <div class=\"flex items-center space-x-4\">\r\n        <h1 class=\"text-xl font-semibold text-gray-900 dark:text-white\">AI助手</h1>\r\n        <el-tag v-if=\"isScrollToTop\" type=\"info\" size=\"small\">滚动中</el-tag>\r\n      </div>\r\n      <div class=\"flex items-center space-x-2\">\r\n        <el-button size=\"small\" @click=\"newChat\">新建对话</el-button>\r\n        <el-button size=\"small\" @click=\"toggleTheme\">\r\n          {{ isDark ? '浅色' : '深色' }}\r\n        </el-button>\r\n      </div>\r\n    </div>\r\n  </div>\r\n</template>\r\n\r\n<script setup lang=\"ts\">\r\nimport { computed } from 'vue'\r\nimport { useChatStore } from '@/stores/chatStore'\r\n\r\ninterface Props {\r\n  isScrollToTop?: boolean\r\n}\r\n\r\ndefineProps<Props>()\r\n\r\nconst chatStore = useChatStore()\r\n\r\nconst isDark = computed(() => chatStore.mode === 'dark')\r\n\r\nconst newChat = () => {\r\n  console.log('新建对话')\r\n}\r\n\r\nconst toggleTheme = () => {\r\n  chatStore.setMode(isDark.value ? 'light' : 'dark')\r\n}\r\n</script>\r\n\r\n","<template>\r\n  <div class=\"user-icon w-8 h-8 bg-gradient-to-tr from-blue-400 to-blue-600 rounded-full flex items-center justify-center text-white text-sm font-medium\">\r\n    {{ userInitial }}\r\n  </div>\r\n</template>\r\n\r\n<script setup lang=\"ts\">\r\nimport { computed } from 'vue'\r\n\r\nconst userInitial = computed(() => {\r\n  // 从localStorage获取用户信息\r\n  try {\r\n    const user = JSON.parse(localStorage.getItem('user_info') || '{}')\r\n    return user.nick_name?.charAt(0) || 'U'\r\n  } catch {\r\n    return 'U'\r\n  }\r\n})\r\n</script>\r\n\r\n","<template>\r\n  <div class=\"robot-icon w-8 h-8 bg-gradient-to-r from-purple-500 to-blue-500 rounded-full flex items-center justify-center text-white text-sm font-medium\">\r\n    <!-- 机器人SVG图标 -->\r\n    <svg width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"currentColor\">\r\n      <path d=\"M12 2C13.1 2 14 2.9 14 4C14 5.1 13.1 6 12 6C10.9 6 10 5.1 10 4C10 2.9 10.9 2 12 2ZM21 9V7L15 7.5V9C15 10.1 14.1 11 13 11V19C13 20.1 12.1 21 11 21H9C7.9 21 7 20.1 7 19V11C5.9 11 5 10.1 5 9V7.5L3 7V9C3 10.1 3.9 11 5 11V19C5 21.2 6.8 23 9 23H11C13.2 23 15 21.2 15 19V11C16.1 11 17 10.1 17 9V7.5L21 7V9ZM7.5 8.5C7.5 8.8 7.8 9 8 9S8.5 8.8 8.5 8.5 8.2 8 8 8 7.5 8.2 7.5 8.5ZM15.5 8.5C15.5 8.8 15.8 9 16 9S16.5 8.8 16.5 8.5 16.2 8 16 8 15.5 8.2 15.5 8.5Z\"/>\r\n    </svg>\r\n  </div>\r\n</template>\r\n\r\n<script setup lang=\"ts\">\r\n\r\ninterface Props {\r\n  model?: string\r\n}\r\n\r\ndefineProps<Props>()\r\n</script>\r\n\r\n","/* eslint-disable no-bitwise */\n\nconst decodeCache = {}\n\nfunction getDecodeCache (exclude) {\n  let cache = decodeCache[exclude]\n  if (cache) { return cache }\n\n  cache = decodeCache[exclude] = []\n\n  for (let i = 0; i < 128; i++) {\n    const ch = String.fromCharCode(i)\n    cache.push(ch)\n  }\n\n  for (let i = 0; i < exclude.length; i++) {\n    const ch = exclude.charCodeAt(i)\n    cache[ch] = '%' + ('0' + ch.toString(16).toUpperCase()).slice(-2)\n  }\n\n  return cache\n}\n\n// Decode percent-encoded string.\n//\nfunction decode (string, exclude) {\n  if (typeof exclude !== 'string') {\n    exclude = decode.defaultChars\n  }\n\n  const cache = getDecodeCache(exclude)\n\n  return string.replace(/(%[a-f0-9]{2})+/gi, function (seq) {\n    let result = ''\n\n    for (let i = 0, l = seq.length; i < l; i += 3) {\n      const 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        const b2 = parseInt(seq.slice(i + 4, i + 6), 16)\n\n        if ((b2 & 0xC0) === 0x80) {\n          const 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        const b2 = parseInt(seq.slice(i + 4, i + 6), 16)\n        const b3 = parseInt(seq.slice(i + 7, i + 9), 16)\n\n        if ((b2 & 0xC0) === 0x80 && (b3 & 0xC0) === 0x80) {\n          const 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        const b2 = parseInt(seq.slice(i + 4, i + 6), 16)\n        const b3 = parseInt(seq.slice(i + 7, i + 9), 16)\n        const b4 = parseInt(seq.slice(i + 10, i + 12), 16)\n\n        if ((b2 & 0xC0) === 0x80 && (b3 & 0xC0) === 0x80 && (b4 & 0xC0) === 0x80) {\n          let 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\ndecode.defaultChars = ';/?:@&=+$,#'\ndecode.componentChars = ''\n\nexport default decode\n","const encodeCache = {}\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  let cache = encodeCache[exclude]\n  if (cache) { return cache }\n\n  cache = encodeCache[exclude] = []\n\n  for (let i = 0; i < 128; i++) {\n    const 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 (let i = 0; i < exclude.length; i++) {\n    cache[exclude.charCodeAt(i)] = exclude[i]\n  }\n\n  return cache\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  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  const cache = getEncodeCache(exclude)\n  let result = ''\n\n  for (let i = 0, l = string.length; i < l; i++) {\n    const 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        const 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\nexport default encode\n","export default function format (url) {\n  let 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//\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\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.\nconst protocolPattern = /^([a-z0-9.+-]+:)/i\nconst portPattern = /:[0-9]*$/\n\n// Special case for a simple path URL\n/* eslint-disable-next-line no-useless-escape */\nconst simplePathPattern = /^(\\/\\/?(?!\\/)[^\\?\\s]*)(\\?[^\\s]*)?$/\n\n// RFC 2396: characters reserved for delimiting URLs.\n// We actually just auto-escape these.\nconst delims = ['<', '>', '\"', '`', ' ', '\\r', '\\n', '\\t']\n\n// RFC 2396: characters not allowed for various reasons.\nconst unwise = ['{', '}', '|', '\\\\', '^', '`'].concat(delims)\n\n// Allowed by RFCs, but cause of XSS attacks.  Always escape these.\nconst 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.\nconst nonHostChars = ['%', '/', '?', ';', '#'].concat(autoEscape)\nconst hostEndingChars = ['/', '?', '#']\nconst hostnameMaxLen = 255\nconst hostnamePartPattern = /^[+a-z0-9A-Z_-]{0,63}$/\nconst hostnamePartStart = /^([+a-z0-9A-Z_-]{0,63})(.*)$/\n// protocols that can allow \"unsafe\" and \"unwise\" chars.\n// protocols that never have a hostname.\nconst hostlessProtocol = {\n  javascript: true,\n  'javascript:': true\n}\n// protocols that always contain a // bit.\nconst 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\nfunction urlParse (url, slashesDenoteHost) {\n  if (url && url instanceof Url) return url\n\n  const u = new Url()\n  u.parse(url, slashesDenoteHost)\n  return u\n}\n\nUrl.prototype.parse = function (url, slashesDenoteHost) {\n  let lowerProto, hec, slashes\n  let 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    const 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  let 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  /* eslint-disable-next-line no-useless-escape */\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    // 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    let hostEnd = -1\n    for (let 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    let 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 (let 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    const 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    const ipv6Hostname = this.hostname[0] === '[' &&\n        this.hostname[this.hostname.length - 1] === ']'\n\n    // validate a little.\n    if (!ipv6Hostname) {\n      const hostparts = this.hostname.split(/\\./)\n      for (let i = 0, l = hostparts.length; i < l; i++) {\n        const part = hostparts[i]\n        if (!part) { continue }\n        if (!part.match(hostnamePartPattern)) {\n          let newpart = ''\n          for (let 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            const validParts = hostparts.slice(0, i)\n            const notHost = hostparts.slice(i + 1)\n            const 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  const 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  const 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  let 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\nexport default urlParse\n","export default /[\\0-\\uD7FF\\uE000-\\uFFFF]|[\\uD800-\\uDBFF][\\uDC00-\\uDFFF]|[\\uD800-\\uDBFF](?![\\uDC00-\\uDFFF])|(?:[^\\uD800-\\uDBFF]|^)[\\uDC00-\\uDFFF]/","export default /[\\0-\\x1F\\x7F-\\x9F]/","export default /[!-#%-\\*,-\\/:;\\?@\\[-\\]_\\{\\}\\xA1\\xA7\\xAB\\xB6\\xB7\\xBB\\xBF\\u037E\\u0387\\u055A-\\u055F\\u0589\\u058A\\u05BE\\u05C0\\u05C3\\u05C6\\u05F3\\u05F4\\u0609\\u060A\\u060C\\u060D\\u061B\\u061D-\\u061F\\u066A-\\u066D\\u06D4\\u0700-\\u070D\\u07F7-\\u07F9\\u0830-\\u083E\\u085E\\u0964\\u0965\\u0970\\u09FD\\u0A76\\u0AF0\\u0C77\\u0C84\\u0DF4\\u0E4F\\u0E5A\\u0E5B\\u0F04-\\u0F12\\u0F14\\u0F3A-\\u0F3D\\u0F85\\u0FD0-\\u0FD4\\u0FD9\\u0FDA\\u104A-\\u104F\\u10FB\\u1360-\\u1368\\u1400\\u166E\\u169B\\u169C\\u16EB-\\u16ED\\u1735\\u1736\\u17D4-\\u17D6\\u17D8-\\u17DA\\u1800-\\u180A\\u1944\\u1945\\u1A1E\\u1A1F\\u1AA0-\\u1AA6\\u1AA8-\\u1AAD\\u1B5A-\\u1B60\\u1B7D\\u1B7E\\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-\\u2E4F\\u2E52-\\u2E5D\\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[\\uDEAD\\uDF55-\\uDF59\\uDF86-\\uDF89]|\\uD804[\\uDC47-\\uDC4D\\uDCBB\\uDCBC\\uDCBE-\\uDCC1\\uDD40-\\uDD43\\uDD74\\uDD75\\uDDC5-\\uDDC8\\uDDCD\\uDDDB\\uDDDD-\\uDDDF\\uDE38-\\uDE3D\\uDEA9]|\\uD805[\\uDC4B-\\uDC4F\\uDC5A\\uDC5B\\uDC5D\\uDCC6\\uDDC1-\\uDDD7\\uDE41-\\uDE43\\uDE60-\\uDE6C\\uDEB9\\uDF3C-\\uDF3E]|\\uD806[\\uDC3B\\uDD44-\\uDD46\\uDDE2\\uDE3F-\\uDE46\\uDE9A-\\uDE9C\\uDE9E-\\uDEA2\\uDF00-\\uDF09]|\\uD807[\\uDC41-\\uDC45\\uDC70\\uDC71\\uDEF7\\uDEF8\\uDF43-\\uDF4F\\uDFFF]|\\uD809[\\uDC70-\\uDC74]|\\uD80B[\\uDFF1\\uDFF2]|\\uD81A[\\uDE6E\\uDE6F\\uDEF5\\uDF37-\\uDF3B\\uDF44]|\\uD81B[\\uDE97-\\uDE9A\\uDFE2]|\\uD82F\\uDC9F|\\uD836[\\uDE87-\\uDE8B]|\\uD83A[\\uDD5E\\uDD5F]/","export default /[\\$\\+<->\\^`\\|~\\xA2-\\xA6\\xA8\\xA9\\xAC\\xAE-\\xB1\\xB4\\xB8\\xD7\\xF7\\u02C2-\\u02C5\\u02D2-\\u02DF\\u02E5-\\u02EB\\u02ED\\u02EF-\\u02FF\\u0375\\u0384\\u0385\\u03F6\\u0482\\u058D-\\u058F\\u0606-\\u0608\\u060B\\u060E\\u060F\\u06DE\\u06E9\\u06FD\\u06FE\\u07F6\\u07FE\\u07FF\\u0888\\u09F2\\u09F3\\u09FA\\u09FB\\u0AF1\\u0B70\\u0BF3-\\u0BFA\\u0C7F\\u0D4F\\u0D79\\u0E3F\\u0F01-\\u0F03\\u0F13\\u0F15-\\u0F17\\u0F1A-\\u0F1F\\u0F34\\u0F36\\u0F38\\u0FBE-\\u0FC5\\u0FC7-\\u0FCC\\u0FCE\\u0FCF\\u0FD5-\\u0FD8\\u109E\\u109F\\u1390-\\u1399\\u166D\\u17DB\\u1940\\u19DE-\\u19FF\\u1B61-\\u1B6A\\u1B74-\\u1B7C\\u1FBD\\u1FBF-\\u1FC1\\u1FCD-\\u1FCF\\u1FDD-\\u1FDF\\u1FED-\\u1FEF\\u1FFD\\u1FFE\\u2044\\u2052\\u207A-\\u207C\\u208A-\\u208C\\u20A0-\\u20C0\\u2100\\u2101\\u2103-\\u2106\\u2108\\u2109\\u2114\\u2116-\\u2118\\u211E-\\u2123\\u2125\\u2127\\u2129\\u212E\\u213A\\u213B\\u2140-\\u2144\\u214A-\\u214D\\u214F\\u218A\\u218B\\u2190-\\u2307\\u230C-\\u2328\\u232B-\\u2426\\u2440-\\u244A\\u249C-\\u24E9\\u2500-\\u2767\\u2794-\\u27C4\\u27C7-\\u27E5\\u27F0-\\u2982\\u2999-\\u29D7\\u29DC-\\u29FB\\u29FE-\\u2B73\\u2B76-\\u2B95\\u2B97-\\u2BFF\\u2CE5-\\u2CEA\\u2E50\\u2E51\\u2E80-\\u2E99\\u2E9B-\\u2EF3\\u2F00-\\u2FD5\\u2FF0-\\u2FFF\\u3004\\u3012\\u3013\\u3020\\u3036\\u3037\\u303E\\u303F\\u309B\\u309C\\u3190\\u3191\\u3196-\\u319F\\u31C0-\\u31E3\\u31EF\\u3200-\\u321E\\u322A-\\u3247\\u3250\\u3260-\\u327F\\u328A-\\u32B0\\u32C0-\\u33FF\\u4DC0-\\u4DFF\\uA490-\\uA4C6\\uA700-\\uA716\\uA720\\uA721\\uA789\\uA78A\\uA828-\\uA82B\\uA836-\\uA839\\uAA77-\\uAA79\\uAB5B\\uAB6A\\uAB6B\\uFB29\\uFBB2-\\uFBC2\\uFD40-\\uFD4F\\uFDCF\\uFDFC-\\uFDFF\\uFE62\\uFE64-\\uFE66\\uFE69\\uFF04\\uFF0B\\uFF1C-\\uFF1E\\uFF3E\\uFF40\\uFF5C\\uFF5E\\uFFE0-\\uFFE6\\uFFE8-\\uFFEE\\uFFFC\\uFFFD]|\\uD800[\\uDD37-\\uDD3F\\uDD79-\\uDD89\\uDD8C-\\uDD8E\\uDD90-\\uDD9C\\uDDA0\\uDDD0-\\uDDFC]|\\uD802[\\uDC77\\uDC78\\uDEC8]|\\uD805\\uDF3F|\\uD807[\\uDFD5-\\uDFF1]|\\uD81A[\\uDF3C-\\uDF3F\\uDF45]|\\uD82F\\uDC9C|\\uD833[\\uDF50-\\uDFC3]|\\uD834[\\uDC00-\\uDCF5\\uDD00-\\uDD26\\uDD29-\\uDD64\\uDD6A-\\uDD6C\\uDD83\\uDD84\\uDD8C-\\uDDA9\\uDDAE-\\uDDEA\\uDE00-\\uDE41\\uDE45\\uDF00-\\uDF56]|\\uD835[\\uDEC1\\uDEDB\\uDEFB\\uDF15\\uDF35\\uDF4F\\uDF6F\\uDF89\\uDFA9\\uDFC3]|\\uD836[\\uDC00-\\uDDFF\\uDE37-\\uDE3A\\uDE6D-\\uDE74\\uDE76-\\uDE83\\uDE85\\uDE86]|\\uD838[\\uDD4F\\uDEFF]|\\uD83B[\\uDCAC\\uDCB0\\uDD2E\\uDEF0\\uDEF1]|\\uD83C[\\uDC00-\\uDC2B\\uDC30-\\uDC93\\uDCA0-\\uDCAE\\uDCB1-\\uDCBF\\uDCC1-\\uDCCF\\uDCD1-\\uDCF5\\uDD0D-\\uDDAD\\uDDE6-\\uDE02\\uDE10-\\uDE3B\\uDE40-\\uDE48\\uDE50\\uDE51\\uDE60-\\uDE65\\uDF00-\\uDFFF]|\\uD83D[\\uDC00-\\uDED7\\uDEDC-\\uDEEC\\uDEF0-\\uDEFC\\uDF00-\\uDF76\\uDF7B-\\uDFD9\\uDFE0-\\uDFEB\\uDFF0]|\\uD83E[\\uDC00-\\uDC0B\\uDC10-\\uDC47\\uDC50-\\uDC59\\uDC60-\\uDC87\\uDC90-\\uDCAD\\uDCB0\\uDCB1\\uDD00-\\uDE53\\uDE60-\\uDE6D\\uDE70-\\uDE7C\\uDE80-\\uDE88\\uDE90-\\uDEBD\\uDEBF-\\uDEC5\\uDECE-\\uDEDB\\uDEE0-\\uDEE8\\uDEF0-\\uDEF8\\uDF00-\\uDF92\\uDF94-\\uDFCA]/","export default /[ \\xA0\\u1680\\u2000-\\u200A\\u2028\\u2029\\u202F\\u205F\\u3000]/","export default /[\\xAD\\u0600-\\u0605\\u061C\\u06DD\\u070F\\u0890\\u0891\\u08E2\\u180E\\u200B-\\u200F\\u202A-\\u202E\\u2060-\\u2064\\u2066-\\u206F\\uFEFF\\uFFF9-\\uFFFB]|\\uD804[\\uDCBD\\uDCCD]|\\uD80D[\\uDC30-\\uDC3F]|\\uD82F[\\uDCA0-\\uDCA3]|\\uD834[\\uDD73-\\uDD7A]|\\uDB40[\\uDC01\\uDC20-\\uDC7F]/","// Generated using scripts/write-decode-map.ts\nexport default new Uint16Array(\n// prettier-ignore\n\"\\u1d41<\\xd5\\u0131\\u028a\\u049d\\u057b\\u05d0\\u0675\\u06de\\u07a2\\u07d6\\u080f\\u0a4a\\u0a91\\u0da1\\u0e6d\\u0f09\\u0f26\\u10ca\\u1228\\u12e1\\u1415\\u149d\\u14c3\\u14df\\u1525\\0\\0\\0\\0\\0\\0\\u156b\\u16cd\\u198d\\u1c12\\u1ddd\\u1f7e\\u2060\\u21b0\\u228d\\u23c0\\u23fb\\u2442\\u2824\\u2912\\u2d08\\u2e48\\u2fce\\u3016\\u32ba\\u3639\\u37ac\\u38fe\\u3a28\\u3a71\\u3ae0\\u3b2e\\u0800EMabcfglmnoprstu\\\\bfms\\x7f\\x84\\x8b\\x90\\x95\\x98\\xa6\\xb3\\xb9\\xc8\\xcflig\\u803b\\xc6\\u40c6P\\u803b&\\u4026cute\\u803b\\xc1\\u40c1reve;\\u4102\\u0100iyx}rc\\u803b\\xc2\\u40c2;\\u4410r;\\uc000\\ud835\\udd04rave\\u803b\\xc0\\u40c0pha;\\u4391acr;\\u4100d;\\u6a53\\u0100gp\\x9d\\xa1on;\\u4104f;\\uc000\\ud835\\udd38plyFunction;\\u6061ing\\u803b\\xc5\\u40c5\\u0100cs\\xbe\\xc3r;\\uc000\\ud835\\udc9cign;\\u6254ilde\\u803b\\xc3\\u40c3ml\\u803b\\xc4\\u40c4\\u0400aceforsu\\xe5\\xfb\\xfe\\u0117\\u011c\\u0122\\u0127\\u012a\\u0100cr\\xea\\xf2kslash;\\u6216\\u0176\\xf6\\xf8;\\u6ae7ed;\\u6306y;\\u4411\\u0180crt\\u0105\\u010b\\u0114ause;\\u6235noullis;\\u612ca;\\u4392r;\\uc000\\ud835\\udd05pf;\\uc000\\ud835\\udd39eve;\\u42d8c\\xf2\\u0113mpeq;\\u624e\\u0700HOacdefhilorsu\\u014d\\u0151\\u0156\\u0180\\u019e\\u01a2\\u01b5\\u01b7\\u01ba\\u01dc\\u0215\\u0273\\u0278\\u027ecy;\\u4427PY\\u803b\\xa9\\u40a9\\u0180cpy\\u015d\\u0162\\u017aute;\\u4106\\u0100;i\\u0167\\u0168\\u62d2talDifferentialD;\\u6145leys;\\u612d\\u0200aeio\\u0189\\u018e\\u0194\\u0198ron;\\u410cdil\\u803b\\xc7\\u40c7rc;\\u4108nint;\\u6230ot;\\u410a\\u0100dn\\u01a7\\u01adilla;\\u40b8terDot;\\u40b7\\xf2\\u017fi;\\u43a7rcle\\u0200DMPT\\u01c7\\u01cb\\u01d1\\u01d6ot;\\u6299inus;\\u6296lus;\\u6295imes;\\u6297o\\u0100cs\\u01e2\\u01f8kwiseContourIntegral;\\u6232eCurly\\u0100DQ\\u0203\\u020foubleQuote;\\u601duote;\\u6019\\u0200lnpu\\u021e\\u0228\\u0247\\u0255on\\u0100;e\\u0225\\u0226\\u6237;\\u6a74\\u0180git\\u022f\\u0236\\u023aruent;\\u6261nt;\\u622fourIntegral;\\u622e\\u0100fr\\u024c\\u024e;\\u6102oduct;\\u6210nterClockwiseContourIntegral;\\u6233oss;\\u6a2fcr;\\uc000\\ud835\\udc9ep\\u0100;C\\u0284\\u0285\\u62d3ap;\\u624d\\u0580DJSZacefios\\u02a0\\u02ac\\u02b0\\u02b4\\u02b8\\u02cb\\u02d7\\u02e1\\u02e6\\u0333\\u048d\\u0100;o\\u0179\\u02a5trahd;\\u6911cy;\\u4402cy;\\u4405cy;\\u440f\\u0180grs\\u02bf\\u02c4\\u02c7ger;\\u6021r;\\u61a1hv;\\u6ae4\\u0100ay\\u02d0\\u02d5ron;\\u410e;\\u4414l\\u0100;t\\u02dd\\u02de\\u6207a;\\u4394r;\\uc000\\ud835\\udd07\\u0100af\\u02eb\\u0327\\u0100cm\\u02f0\\u0322ritical\\u0200ADGT\\u0300\\u0306\\u0316\\u031ccute;\\u40b4o\\u0174\\u030b\\u030d;\\u42d9bleAcute;\\u42ddrave;\\u4060ilde;\\u42dcond;\\u62c4ferentialD;\\u6146\\u0470\\u033d\\0\\0\\0\\u0342\\u0354\\0\\u0405f;\\uc000\\ud835\\udd3b\\u0180;DE\\u0348\\u0349\\u034d\\u40a8ot;\\u60dcqual;\\u6250ble\\u0300CDLRUV\\u0363\\u0372\\u0382\\u03cf\\u03e2\\u03f8ontourIntegra\\xec\\u0239o\\u0274\\u0379\\0\\0\\u037b\\xbb\\u0349nArrow;\\u61d3\\u0100eo\\u0387\\u03a4ft\\u0180ART\\u0390\\u0396\\u03a1rrow;\\u61d0ightArrow;\\u61d4e\\xe5\\u02cang\\u0100LR\\u03ab\\u03c4eft\\u0100AR\\u03b3\\u03b9rrow;\\u67f8ightArrow;\\u67faightArrow;\\u67f9ight\\u0100AT\\u03d8\\u03derrow;\\u61d2ee;\\u62a8p\\u0241\\u03e9\\0\\0\\u03efrrow;\\u61d1ownArrow;\\u61d5erticalBar;\\u6225n\\u0300ABLRTa\\u0412\\u042a\\u0430\\u045e\\u047f\\u037crrow\\u0180;BU\\u041d\\u041e\\u0422\\u6193ar;\\u6913pArrow;\\u61f5reve;\\u4311eft\\u02d2\\u043a\\0\\u0446\\0\\u0450ightVector;\\u6950eeVector;\\u695eector\\u0100;B\\u0459\\u045a\\u61bdar;\\u6956ight\\u01d4\\u0467\\0\\u0471eeVector;\\u695fector\\u0100;B\\u047a\\u047b\\u61c1ar;\\u6957ee\\u0100;A\\u0486\\u0487\\u62a4rrow;\\u61a7\\u0100ct\\u0492\\u0497r;\\uc000\\ud835\\udc9frok;\\u4110\\u0800NTacdfglmopqstux\\u04bd\\u04c0\\u04c4\\u04cb\\u04de\\u04e2\\u04e7\\u04ee\\u04f5\\u0521\\u052f\\u0536\\u0552\\u055d\\u0560\\u0565G;\\u414aH\\u803b\\xd0\\u40d0cute\\u803b\\xc9\\u40c9\\u0180aiy\\u04d2\\u04d7\\u04dcron;\\u411arc\\u803b\\xca\\u40ca;\\u442dot;\\u4116r;\\uc000\\ud835\\udd08rave\\u803b\\xc8\\u40c8ement;\\u6208\\u0100ap\\u04fa\\u04fecr;\\u4112ty\\u0253\\u0506\\0\\0\\u0512mallSquare;\\u65fberySmallSquare;\\u65ab\\u0100gp\\u0526\\u052aon;\\u4118f;\\uc000\\ud835\\udd3csilon;\\u4395u\\u0100ai\\u053c\\u0549l\\u0100;T\\u0542\\u0543\\u6a75ilde;\\u6242librium;\\u61cc\\u0100ci\\u0557\\u055ar;\\u6130m;\\u6a73a;\\u4397ml\\u803b\\xcb\\u40cb\\u0100ip\\u056a\\u056fsts;\\u6203onentialE;\\u6147\\u0280cfios\\u0585\\u0588\\u058d\\u05b2\\u05ccy;\\u4424r;\\uc000\\ud835\\udd09lled\\u0253\\u0597\\0\\0\\u05a3mallSquare;\\u65fcerySmallSquare;\\u65aa\\u0370\\u05ba\\0\\u05bf\\0\\0\\u05c4f;\\uc000\\ud835\\udd3dAll;\\u6200riertrf;\\u6131c\\xf2\\u05cb\\u0600JTabcdfgorst\\u05e8\\u05ec\\u05ef\\u05fa\\u0600\\u0612\\u0616\\u061b\\u061d\\u0623\\u066c\\u0672cy;\\u4403\\u803b>\\u403emma\\u0100;d\\u05f7\\u05f8\\u4393;\\u43dcreve;\\u411e\\u0180eiy\\u0607\\u060c\\u0610dil;\\u4122rc;\\u411c;\\u4413ot;\\u4120r;\\uc000\\ud835\\udd0a;\\u62d9pf;\\uc000\\ud835\\udd3eeater\\u0300EFGLST\\u0635\\u0644\\u064e\\u0656\\u065b\\u0666qual\\u0100;L\\u063e\\u063f\\u6265ess;\\u62dbullEqual;\\u6267reater;\\u6aa2ess;\\u6277lantEqual;\\u6a7eilde;\\u6273cr;\\uc000\\ud835\\udca2;\\u626b\\u0400Aacfiosu\\u0685\\u068b\\u0696\\u069b\\u069e\\u06aa\\u06be\\u06caRDcy;\\u442a\\u0100ct\\u0690\\u0694ek;\\u42c7;\\u405eirc;\\u4124r;\\u610clbertSpace;\\u610b\\u01f0\\u06af\\0\\u06b2f;\\u610dizontalLine;\\u6500\\u0100ct\\u06c3\\u06c5\\xf2\\u06a9rok;\\u4126mp\\u0144\\u06d0\\u06d8ownHum\\xf0\\u012fqual;\\u624f\\u0700EJOacdfgmnostu\\u06fa\\u06fe\\u0703\\u0707\\u070e\\u071a\\u071e\\u0721\\u0728\\u0744\\u0778\\u078b\\u078f\\u0795cy;\\u4415lig;\\u4132cy;\\u4401cute\\u803b\\xcd\\u40cd\\u0100iy\\u0713\\u0718rc\\u803b\\xce\\u40ce;\\u4418ot;\\u4130r;\\u6111rave\\u803b\\xcc\\u40cc\\u0180;ap\\u0720\\u072f\\u073f\\u0100cg\\u0734\\u0737r;\\u412ainaryI;\\u6148lie\\xf3\\u03dd\\u01f4\\u0749\\0\\u0762\\u0100;e\\u074d\\u074e\\u622c\\u0100gr\\u0753\\u0758ral;\\u622bsection;\\u62c2isible\\u0100CT\\u076c\\u0772omma;\\u6063imes;\\u6062\\u0180gpt\\u077f\\u0783\\u0788on;\\u412ef;\\uc000\\ud835\\udd40a;\\u4399cr;\\u6110ilde;\\u4128\\u01eb\\u079a\\0\\u079ecy;\\u4406l\\u803b\\xcf\\u40cf\\u0280cfosu\\u07ac\\u07b7\\u07bc\\u07c2\\u07d0\\u0100iy\\u07b1\\u07b5rc;\\u4134;\\u4419r;\\uc000\\ud835\\udd0dpf;\\uc000\\ud835\\udd41\\u01e3\\u07c7\\0\\u07ccr;\\uc000\\ud835\\udca5rcy;\\u4408kcy;\\u4404\\u0380HJacfos\\u07e4\\u07e8\\u07ec\\u07f1\\u07fd\\u0802\\u0808cy;\\u4425cy;\\u440cppa;\\u439a\\u0100ey\\u07f6\\u07fbdil;\\u4136;\\u441ar;\\uc000\\ud835\\udd0epf;\\uc000\\ud835\\udd42cr;\\uc000\\ud835\\udca6\\u0580JTaceflmost\\u0825\\u0829\\u082c\\u0850\\u0863\\u09b3\\u09b8\\u09c7\\u09cd\\u0a37\\u0a47cy;\\u4409\\u803b<\\u403c\\u0280cmnpr\\u0837\\u083c\\u0841\\u0844\\u084dute;\\u4139bda;\\u439bg;\\u67ealacetrf;\\u6112r;\\u619e\\u0180aey\\u0857\\u085c\\u0861ron;\\u413ddil;\\u413b;\\u441b\\u0100fs\\u0868\\u0970t\\u0500ACDFRTUVar\\u087e\\u08a9\\u08b1\\u08e0\\u08e6\\u08fc\\u092f\\u095b\\u0390\\u096a\\u0100nr\\u0883\\u088fgleBracket;\\u67e8row\\u0180;BR\\u0899\\u089a\\u089e\\u6190ar;\\u61e4ightArrow;\\u61c6eiling;\\u6308o\\u01f5\\u08b7\\0\\u08c3bleBracket;\\u67e6n\\u01d4\\u08c8\\0\\u08d2eeVector;\\u6961ector\\u0100;B\\u08db\\u08dc\\u61c3ar;\\u6959loor;\\u630aight\\u0100AV\\u08ef\\u08f5rrow;\\u6194ector;\\u694e\\u0100er\\u0901\\u0917e\\u0180;AV\\u0909\\u090a\\u0910\\u62a3rrow;\\u61a4ector;\\u695aiangle\\u0180;BE\\u0924\\u0925\\u0929\\u62b2ar;\\u69cfqual;\\u62b4p\\u0180DTV\\u0937\\u0942\\u094cownVector;\\u6951eeVector;\\u6960ector\\u0100;B\\u0956\\u0957\\u61bfar;\\u6958ector\\u0100;B\\u0965\\u0966\\u61bcar;\\u6952ight\\xe1\\u039cs\\u0300EFGLST\\u097e\\u098b\\u0995\\u099d\\u09a2\\u09adqualGreater;\\u62daullEqual;\\u6266reater;\\u6276ess;\\u6aa1lantEqual;\\u6a7dilde;\\u6272r;\\uc000\\ud835\\udd0f\\u0100;e\\u09bd\\u09be\\u62d8ftarrow;\\u61daidot;\\u413f\\u0180npw\\u09d4\\u0a16\\u0a1bg\\u0200LRlr\\u09de\\u09f7\\u0a02\\u0a10eft\\u0100AR\\u09e6\\u09ecrrow;\\u67f5ightArrow;\\u67f7ightArrow;\\u67f6eft\\u0100ar\\u03b3\\u0a0aight\\xe1\\u03bfight\\xe1\\u03caf;\\uc000\\ud835\\udd43er\\u0100LR\\u0a22\\u0a2ceftArrow;\\u6199ightArrow;\\u6198\\u0180cht\\u0a3e\\u0a40\\u0a42\\xf2\\u084c;\\u61b0rok;\\u4141;\\u626a\\u0400acefiosu\\u0a5a\\u0a5d\\u0a60\\u0a77\\u0a7c\\u0a85\\u0a8b\\u0a8ep;\\u6905y;\\u441c\\u0100dl\\u0a65\\u0a6fiumSpace;\\u605flintrf;\\u6133r;\\uc000\\ud835\\udd10nusPlus;\\u6213pf;\\uc000\\ud835\\udd44c\\xf2\\u0a76;\\u439c\\u0480Jacefostu\\u0aa3\\u0aa7\\u0aad\\u0ac0\\u0b14\\u0b19\\u0d91\\u0d97\\u0d9ecy;\\u440acute;\\u4143\\u0180aey\\u0ab4\\u0ab9\\u0aberon;\\u4147dil;\\u4145;\\u441d\\u0180gsw\\u0ac7\\u0af0\\u0b0eative\\u0180MTV\\u0ad3\\u0adf\\u0ae8ediumSpace;\\u600bhi\\u0100cn\\u0ae6\\u0ad8\\xeb\\u0ad9eryThi\\xee\\u0ad9ted\\u0100GL\\u0af8\\u0b06reaterGreate\\xf2\\u0673essLes\\xf3\\u0a48Line;\\u400ar;\\uc000\\ud835\\udd11\\u0200Bnpt\\u0b22\\u0b28\\u0b37\\u0b3areak;\\u6060BreakingSpace;\\u40a0f;\\u6115\\u0680;CDEGHLNPRSTV\\u0b55\\u0b56\\u0b6a\\u0b7c\\u0ba1\\u0beb\\u0c04\\u0c5e\\u0c84\\u0ca6\\u0cd8\\u0d61\\u0d85\\u6aec\\u0100ou\\u0b5b\\u0b64ngruent;\\u6262pCap;\\u626doubleVerticalBar;\\u6226\\u0180lqx\\u0b83\\u0b8a\\u0b9bement;\\u6209ual\\u0100;T\\u0b92\\u0b93\\u6260ilde;\\uc000\\u2242\\u0338ists;\\u6204reater\\u0380;EFGLST\\u0bb6\\u0bb7\\u0bbd\\u0bc9\\u0bd3\\u0bd8\\u0be5\\u626fqual;\\u6271ullEqual;\\uc000\\u2267\\u0338reater;\\uc000\\u226b\\u0338ess;\\u6279lantEqual;\\uc000\\u2a7e\\u0338ilde;\\u6275ump\\u0144\\u0bf2\\u0bfdownHump;\\uc000\\u224e\\u0338qual;\\uc000\\u224f\\u0338e\\u0100fs\\u0c0a\\u0c27tTriangle\\u0180;BE\\u0c1a\\u0c1b\\u0c21\\u62eaar;\\uc000\\u29cf\\u0338qual;\\u62ecs\\u0300;EGLST\\u0c35\\u0c36\\u0c3c\\u0c44\\u0c4b\\u0c58\\u626equal;\\u6270reater;\\u6278ess;\\uc000\\u226a\\u0338lantEqual;\\uc000\\u2a7d\\u0338ilde;\\u6274ested\\u0100GL\\u0c68\\u0c79reaterGreater;\\uc000\\u2aa2\\u0338essLess;\\uc000\\u2aa1\\u0338recedes\\u0180;ES\\u0c92\\u0c93\\u0c9b\\u6280qual;\\uc000\\u2aaf\\u0338lantEqual;\\u62e0\\u0100ei\\u0cab\\u0cb9verseElement;\\u620cghtTriangle\\u0180;BE\\u0ccb\\u0ccc\\u0cd2\\u62ebar;\\uc000\\u29d0\\u0338qual;\\u62ed\\u0100qu\\u0cdd\\u0d0cuareSu\\u0100bp\\u0ce8\\u0cf9set\\u0100;E\\u0cf0\\u0cf3\\uc000\\u228f\\u0338qual;\\u62e2erset\\u0100;E\\u0d03\\u0d06\\uc000\\u2290\\u0338qual;\\u62e3\\u0180bcp\\u0d13\\u0d24\\u0d4eset\\u0100;E\\u0d1b\\u0d1e\\uc000\\u2282\\u20d2qual;\\u6288ceeds\\u0200;EST\\u0d32\\u0d33\\u0d3b\\u0d46\\u6281qual;\\uc000\\u2ab0\\u0338lantEqual;\\u62e1ilde;\\uc000\\u227f\\u0338erset\\u0100;E\\u0d58\\u0d5b\\uc000\\u2283\\u20d2qual;\\u6289ilde\\u0200;EFT\\u0d6e\\u0d6f\\u0d75\\u0d7f\\u6241qual;\\u6244ullEqual;\\u6247ilde;\\u6249erticalBar;\\u6224cr;\\uc000\\ud835\\udca9ilde\\u803b\\xd1\\u40d1;\\u439d\\u0700Eacdfgmoprstuv\\u0dbd\\u0dc2\\u0dc9\\u0dd5\\u0ddb\\u0de0\\u0de7\\u0dfc\\u0e02\\u0e20\\u0e22\\u0e32\\u0e3f\\u0e44lig;\\u4152cute\\u803b\\xd3\\u40d3\\u0100iy\\u0dce\\u0dd3rc\\u803b\\xd4\\u40d4;\\u441eblac;\\u4150r;\\uc000\\ud835\\udd12rave\\u803b\\xd2\\u40d2\\u0180aei\\u0dee\\u0df2\\u0df6cr;\\u414cga;\\u43a9cron;\\u439fpf;\\uc000\\ud835\\udd46enCurly\\u0100DQ\\u0e0e\\u0e1aoubleQuote;\\u601cuote;\\u6018;\\u6a54\\u0100cl\\u0e27\\u0e2cr;\\uc000\\ud835\\udcaaash\\u803b\\xd8\\u40d8i\\u016c\\u0e37\\u0e3cde\\u803b\\xd5\\u40d5es;\\u6a37ml\\u803b\\xd6\\u40d6er\\u0100BP\\u0e4b\\u0e60\\u0100ar\\u0e50\\u0e53r;\\u603eac\\u0100ek\\u0e5a\\u0e5c;\\u63deet;\\u63b4arenthesis;\\u63dc\\u0480acfhilors\\u0e7f\\u0e87\\u0e8a\\u0e8f\\u0e92\\u0e94\\u0e9d\\u0eb0\\u0efcrtialD;\\u6202y;\\u441fr;\\uc000\\ud835\\udd13i;\\u43a6;\\u43a0usMinus;\\u40b1\\u0100ip\\u0ea2\\u0eadncareplan\\xe5\\u069df;\\u6119\\u0200;eio\\u0eb9\\u0eba\\u0ee0\\u0ee4\\u6abbcedes\\u0200;EST\\u0ec8\\u0ec9\\u0ecf\\u0eda\\u627aqual;\\u6aaflantEqual;\\u627cilde;\\u627eme;\\u6033\\u0100dp\\u0ee9\\u0eeeuct;\\u620fortion\\u0100;a\\u0225\\u0ef9l;\\u621d\\u0100ci\\u0f01\\u0f06r;\\uc000\\ud835\\udcab;\\u43a8\\u0200Ufos\\u0f11\\u0f16\\u0f1b\\u0f1fOT\\u803b\\\"\\u4022r;\\uc000\\ud835\\udd14pf;\\u611acr;\\uc000\\ud835\\udcac\\u0600BEacefhiorsu\\u0f3e\\u0f43\\u0f47\\u0f60\\u0f73\\u0fa7\\u0faa\\u0fad\\u1096\\u10a9\\u10b4\\u10bearr;\\u6910G\\u803b\\xae\\u40ae\\u0180cnr\\u0f4e\\u0f53\\u0f56ute;\\u4154g;\\u67ebr\\u0100;t\\u0f5c\\u0f5d\\u61a0l;\\u6916\\u0180aey\\u0f67\\u0f6c\\u0f71ron;\\u4158dil;\\u4156;\\u4420\\u0100;v\\u0f78\\u0f79\\u611cerse\\u0100EU\\u0f82\\u0f99\\u0100lq\\u0f87\\u0f8eement;\\u620builibrium;\\u61cbpEquilibrium;\\u696fr\\xbb\\u0f79o;\\u43a1ght\\u0400ACDFTUVa\\u0fc1\\u0feb\\u0ff3\\u1022\\u1028\\u105b\\u1087\\u03d8\\u0100nr\\u0fc6\\u0fd2gleBracket;\\u67e9row\\u0180;BL\\u0fdc\\u0fdd\\u0fe1\\u6192ar;\\u61e5eftArrow;\\u61c4eiling;\\u6309o\\u01f5\\u0ff9\\0\\u1005bleBracket;\\u67e7n\\u01d4\\u100a\\0\\u1014eeVector;\\u695dector\\u0100;B\\u101d\\u101e\\u61c2ar;\\u6955loor;\\u630b\\u0100er\\u102d\\u1043e\\u0180;AV\\u1035\\u1036\\u103c\\u62a2rrow;\\u61a6ector;\\u695biangle\\u0180;BE\\u1050\\u1051\\u1055\\u62b3ar;\\u69d0qual;\\u62b5p\\u0180DTV\\u1063\\u106e\\u1078ownVector;\\u694feeVector;\\u695cector\\u0100;B\\u1082\\u1083\\u61bear;\\u6954ector\\u0100;B\\u1091\\u1092\\u61c0ar;\\u6953\\u0100pu\\u109b\\u109ef;\\u611dndImplies;\\u6970ightarrow;\\u61db\\u0100ch\\u10b9\\u10bcr;\\u611b;\\u61b1leDelayed;\\u69f4\\u0680HOacfhimoqstu\\u10e4\\u10f1\\u10f7\\u10fd\\u1119\\u111e\\u1151\\u1156\\u1161\\u1167\\u11b5\\u11bb\\u11bf\\u0100Cc\\u10e9\\u10eeHcy;\\u4429y;\\u4428FTcy;\\u442ccute;\\u415a\\u0280;aeiy\\u1108\\u1109\\u110e\\u1113\\u1117\\u6abcron;\\u4160dil;\\u415erc;\\u415c;\\u4421r;\\uc000\\ud835\\udd16ort\\u0200DLRU\\u112a\\u1134\\u113e\\u1149ownArrow\\xbb\\u041eeftArrow\\xbb\\u089aightArrow\\xbb\\u0fddpArrow;\\u6191gma;\\u43a3allCircle;\\u6218pf;\\uc000\\ud835\\udd4a\\u0272\\u116d\\0\\0\\u1170t;\\u621aare\\u0200;ISU\\u117b\\u117c\\u1189\\u11af\\u65a1ntersection;\\u6293u\\u0100bp\\u118f\\u119eset\\u0100;E\\u1197\\u1198\\u628fqual;\\u6291erset\\u0100;E\\u11a8\\u11a9\\u6290qual;\\u6292nion;\\u6294cr;\\uc000\\ud835\\udcaear;\\u62c6\\u0200bcmp\\u11c8\\u11db\\u1209\\u120b\\u0100;s\\u11cd\\u11ce\\u62d0et\\u0100;E\\u11cd\\u11d5qual;\\u6286\\u0100ch\\u11e0\\u1205eeds\\u0200;EST\\u11ed\\u11ee\\u11f4\\u11ff\\u627bqual;\\u6ab0lantEqual;\\u627dilde;\\u627fTh\\xe1\\u0f8c;\\u6211\\u0180;es\\u1212\\u1213\\u1223\\u62d1rset\\u0100;E\\u121c\\u121d\\u6283qual;\\u6287et\\xbb\\u1213\\u0580HRSacfhiors\\u123e\\u1244\\u1249\\u1255\\u125e\\u1271\\u1276\\u129f\\u12c2\\u12c8\\u12d1ORN\\u803b\\xde\\u40deADE;\\u6122\\u0100Hc\\u124e\\u1252cy;\\u440by;\\u4426\\u0100bu\\u125a\\u125c;\\u4009;\\u43a4\\u0180aey\\u1265\\u126a\\u126fron;\\u4164dil;\\u4162;\\u4422r;\\uc000\\ud835\\udd17\\u0100ei\\u127b\\u1289\\u01f2\\u1280\\0\\u1287efore;\\u6234a;\\u4398\\u0100cn\\u128e\\u1298kSpace;\\uc000\\u205f\\u200aSpace;\\u6009lde\\u0200;EFT\\u12ab\\u12ac\\u12b2\\u12bc\\u623cqual;\\u6243ullEqual;\\u6245ilde;\\u6248pf;\\uc000\\ud835\\udd4bipleDot;\\u60db\\u0100ct\\u12d6\\u12dbr;\\uc000\\ud835\\udcafrok;\\u4166\\u0ae1\\u12f7\\u130e\\u131a\\u1326\\0\\u132c\\u1331\\0\\0\\0\\0\\0\\u1338\\u133d\\u1377\\u1385\\0\\u13ff\\u1404\\u140a\\u1410\\u0100cr\\u12fb\\u1301ute\\u803b\\xda\\u40dar\\u0100;o\\u1307\\u1308\\u619fcir;\\u6949r\\u01e3\\u1313\\0\\u1316y;\\u440eve;\\u416c\\u0100iy\\u131e\\u1323rc\\u803b\\xdb\\u40db;\\u4423blac;\\u4170r;\\uc000\\ud835\\udd18rave\\u803b\\xd9\\u40d9acr;\\u416a\\u0100di\\u1341\\u1369er\\u0100BP\\u1348\\u135d\\u0100ar\\u134d\\u1350r;\\u405fac\\u0100ek\\u1357\\u1359;\\u63dfet;\\u63b5arenthesis;\\u63ddon\\u0100;P\\u1370\\u1371\\u62c3lus;\\u628e\\u0100gp\\u137b\\u137fon;\\u4172f;\\uc000\\ud835\\udd4c\\u0400ADETadps\\u1395\\u13ae\\u13b8\\u13c4\\u03e8\\u13d2\\u13d7\\u13f3rrow\\u0180;BD\\u1150\\u13a0\\u13a4ar;\\u6912ownArrow;\\u61c5ownArrow;\\u6195quilibrium;\\u696eee\\u0100;A\\u13cb\\u13cc\\u62a5rrow;\\u61a5own\\xe1\\u03f3er\\u0100LR\\u13de\\u13e8eftArrow;\\u6196ightArrow;\\u6197i\\u0100;l\\u13f9\\u13fa\\u43d2on;\\u43a5ing;\\u416ecr;\\uc000\\ud835\\udcb0ilde;\\u4168ml\\u803b\\xdc\\u40dc\\u0480Dbcdefosv\\u1427\\u142c\\u1430\\u1433\\u143e\\u1485\\u148a\\u1490\\u1496ash;\\u62abar;\\u6aeby;\\u4412ash\\u0100;l\\u143b\\u143c\\u62a9;\\u6ae6\\u0100er\\u1443\\u1445;\\u62c1\\u0180bty\\u144c\\u1450\\u147aar;\\u6016\\u0100;i\\u144f\\u1455cal\\u0200BLST\\u1461\\u1465\\u146a\\u1474ar;\\u6223ine;\\u407ceparator;\\u6758ilde;\\u6240ThinSpace;\\u600ar;\\uc000\\ud835\\udd19pf;\\uc000\\ud835\\udd4dcr;\\uc000\\ud835\\udcb1dash;\\u62aa\\u0280cefos\\u14a7\\u14ac\\u14b1\\u14b6\\u14bcirc;\\u4174dge;\\u62c0r;\\uc000\\ud835\\udd1apf;\\uc000\\ud835\\udd4ecr;\\uc000\\ud835\\udcb2\\u0200fios\\u14cb\\u14d0\\u14d2\\u14d8r;\\uc000\\ud835\\udd1b;\\u439epf;\\uc000\\ud835\\udd4fcr;\\uc000\\ud835\\udcb3\\u0480AIUacfosu\\u14f1\\u14f5\\u14f9\\u14fd\\u1504\\u150f\\u1514\\u151a\\u1520cy;\\u442fcy;\\u4407cy;\\u442ecute\\u803b\\xdd\\u40dd\\u0100iy\\u1509\\u150drc;\\u4176;\\u442br;\\uc000\\ud835\\udd1cpf;\\uc000\\ud835\\udd50cr;\\uc000\\ud835\\udcb4ml;\\u4178\\u0400Hacdefos\\u1535\\u1539\\u153f\\u154b\\u154f\\u155d\\u1560\\u1564cy;\\u4416cute;\\u4179\\u0100ay\\u1544\\u1549ron;\\u417d;\\u4417ot;\\u417b\\u01f2\\u1554\\0\\u155boWidt\\xe8\\u0ad9a;\\u4396r;\\u6128pf;\\u6124cr;\\uc000\\ud835\\udcb5\\u0be1\\u1583\\u158a\\u1590\\0\\u15b0\\u15b6\\u15bf\\0\\0\\0\\0\\u15c6\\u15db\\u15eb\\u165f\\u166d\\0\\u1695\\u169b\\u16b2\\u16b9\\0\\u16becute\\u803b\\xe1\\u40e1reve;\\u4103\\u0300;Ediuy\\u159c\\u159d\\u15a1\\u15a3\\u15a8\\u15ad\\u623e;\\uc000\\u223e\\u0333;\\u623frc\\u803b\\xe2\\u40e2te\\u80bb\\xb4\\u0306;\\u4430lig\\u803b\\xe6\\u40e6\\u0100;r\\xb2\\u15ba;\\uc000\\ud835\\udd1erave\\u803b\\xe0\\u40e0\\u0100ep\\u15ca\\u15d6\\u0100fp\\u15cf\\u15d4sym;\\u6135\\xe8\\u15d3ha;\\u43b1\\u0100ap\\u15dfc\\u0100cl\\u15e4\\u15e7r;\\u4101g;\\u6a3f\\u0264\\u15f0\\0\\0\\u160a\\u0280;adsv\\u15fa\\u15fb\\u15ff\\u1601\\u1607\\u6227nd;\\u6a55;\\u6a5clope;\\u6a58;\\u6a5a\\u0380;elmrsz\\u1618\\u1619\\u161b\\u161e\\u163f\\u164f\\u1659\\u6220;\\u69a4e\\xbb\\u1619sd\\u0100;a\\u1625\\u1626\\u6221\\u0461\\u1630\\u1632\\u1634\\u1636\\u1638\\u163a\\u163c\\u163e;\\u69a8;\\u69a9;\\u69aa;\\u69ab;\\u69ac;\\u69ad;\\u69ae;\\u69aft\\u0100;v\\u1645\\u1646\\u621fb\\u0100;d\\u164c\\u164d\\u62be;\\u699d\\u0100pt\\u1654\\u1657h;\\u6222\\xbb\\xb9arr;\\u637c\\u0100gp\\u1663\\u1667on;\\u4105f;\\uc000\\ud835\\udd52\\u0380;Eaeiop\\u12c1\\u167b\\u167d\\u1682\\u1684\\u1687\\u168a;\\u6a70cir;\\u6a6f;\\u624ad;\\u624bs;\\u4027rox\\u0100;e\\u12c1\\u1692\\xf1\\u1683ing\\u803b\\xe5\\u40e5\\u0180cty\\u16a1\\u16a6\\u16a8r;\\uc000\\ud835\\udcb6;\\u402amp\\u0100;e\\u12c1\\u16af\\xf1\\u0288ilde\\u803b\\xe3\\u40e3ml\\u803b\\xe4\\u40e4\\u0100ci\\u16c2\\u16c8onin\\xf4\\u0272nt;\\u6a11\\u0800Nabcdefiklnoprsu\\u16ed\\u16f1\\u1730\\u173c\\u1743\\u1748\\u1778\\u177d\\u17e0\\u17e6\\u1839\\u1850\\u170d\\u193d\\u1948\\u1970ot;\\u6aed\\u0100cr\\u16f6\\u171ek\\u0200ceps\\u1700\\u1705\\u170d\\u1713ong;\\u624cpsilon;\\u43f6rime;\\u6035im\\u0100;e\\u171a\\u171b\\u623dq;\\u62cd\\u0176\\u1722\\u1726ee;\\u62bded\\u0100;g\\u172c\\u172d\\u6305e\\xbb\\u172drk\\u0100;t\\u135c\\u1737brk;\\u63b6\\u0100oy\\u1701\\u1741;\\u4431quo;\\u601e\\u0280cmprt\\u1753\\u175b\\u1761\\u1764\\u1768aus\\u0100;e\\u010a\\u0109ptyv;\\u69b0s\\xe9\\u170cno\\xf5\\u0113\\u0180ahw\\u176f\\u1771\\u1773;\\u43b2;\\u6136een;\\u626cr;\\uc000\\ud835\\udd1fg\\u0380costuvw\\u178d\\u179d\\u17b3\\u17c1\\u17d5\\u17db\\u17de\\u0180aiu\\u1794\\u1796\\u179a\\xf0\\u0760rc;\\u65efp\\xbb\\u1371\\u0180dpt\\u17a4\\u17a8\\u17adot;\\u6a00lus;\\u6a01imes;\\u6a02\\u0271\\u17b9\\0\\0\\u17becup;\\u6a06ar;\\u6605riangle\\u0100du\\u17cd\\u17d2own;\\u65bdp;\\u65b3plus;\\u6a04e\\xe5\\u1444\\xe5\\u14adarow;\\u690d\\u0180ako\\u17ed\\u1826\\u1835\\u0100cn\\u17f2\\u1823k\\u0180lst\\u17fa\\u05ab\\u1802ozenge;\\u69ebriangle\\u0200;dlr\\u1812\\u1813\\u1818\\u181d\\u65b4own;\\u65beeft;\\u65c2ight;\\u65b8k;\\u6423\\u01b1\\u182b\\0\\u1833\\u01b2\\u182f\\0\\u1831;\\u6592;\\u65914;\\u6593ck;\\u6588\\u0100eo\\u183e\\u184d\\u0100;q\\u1843\\u1846\\uc000=\\u20e5uiv;\\uc000\\u2261\\u20e5t;\\u6310\\u0200ptwx\\u1859\\u185e\\u1867\\u186cf;\\uc000\\ud835\\udd53\\u0100;t\\u13cb\\u1863om\\xbb\\u13cctie;\\u62c8\\u0600DHUVbdhmptuv\\u1885\\u1896\\u18aa\\u18bb\\u18d7\\u18db\\u18ec\\u18ff\\u1905\\u190a\\u1910\\u1921\\u0200LRlr\\u188e\\u1890\\u1892\\u1894;\\u6557;\\u6554;\\u6556;\\u6553\\u0280;DUdu\\u18a1\\u18a2\\u18a4\\u18a6\\u18a8\\u6550;\\u6566;\\u6569;\\u6564;\\u6567\\u0200LRlr\\u18b3\\u18b5\\u18b7\\u18b9;\\u655d;\\u655a;\\u655c;\\u6559\\u0380;HLRhlr\\u18ca\\u18cb\\u18cd\\u18cf\\u18d1\\u18d3\\u18d5\\u6551;\\u656c;\\u6563;\\u6560;\\u656b;\\u6562;\\u655fox;\\u69c9\\u0200LRlr\\u18e4\\u18e6\\u18e8\\u18ea;\\u6555;\\u6552;\\u6510;\\u650c\\u0280;DUdu\\u06bd\\u18f7\\u18f9\\u18fb\\u18fd;\\u6565;\\u6568;\\u652c;\\u6534inus;\\u629flus;\\u629eimes;\\u62a0\\u0200LRlr\\u1919\\u191b\\u191d\\u191f;\\u655b;\\u6558;\\u6518;\\u6514\\u0380;HLRhlr\\u1930\\u1931\\u1933\\u1935\\u1937\\u1939\\u193b\\u6502;\\u656a;\\u6561;\\u655e;\\u653c;\\u6524;\\u651c\\u0100ev\\u0123\\u1942bar\\u803b\\xa6\\u40a6\\u0200ceio\\u1951\\u1956\\u195a\\u1960r;\\uc000\\ud835\\udcb7mi;\\u604fm\\u0100;e\\u171a\\u171cl\\u0180;bh\\u1968\\u1969\\u196b\\u405c;\\u69c5sub;\\u67c8\\u016c\\u1974\\u197el\\u0100;e\\u1979\\u197a\\u6022t\\xbb\\u197ap\\u0180;Ee\\u012f\\u1985\\u1987;\\u6aae\\u0100;q\\u06dc\\u06db\\u0ce1\\u19a7\\0\\u19e8\\u1a11\\u1a15\\u1a32\\0\\u1a37\\u1a50\\0\\0\\u1ab4\\0\\0\\u1ac1\\0\\0\\u1b21\\u1b2e\\u1b4d\\u1b52\\0\\u1bfd\\0\\u1c0c\\u0180cpr\\u19ad\\u19b2\\u19ddute;\\u4107\\u0300;abcds\\u19bf\\u19c0\\u19c4\\u19ca\\u19d5\\u19d9\\u6229nd;\\u6a44rcup;\\u6a49\\u0100au\\u19cf\\u19d2p;\\u6a4bp;\\u6a47ot;\\u6a40;\\uc000\\u2229\\ufe00\\u0100eo\\u19e2\\u19e5t;\\u6041\\xee\\u0693\\u0200aeiu\\u19f0\\u19fb\\u1a01\\u1a05\\u01f0\\u19f5\\0\\u19f8s;\\u6a4don;\\u410ddil\\u803b\\xe7\\u40e7rc;\\u4109ps\\u0100;s\\u1a0c\\u1a0d\\u6a4cm;\\u6a50ot;\\u410b\\u0180dmn\\u1a1b\\u1a20\\u1a26il\\u80bb\\xb8\\u01adptyv;\\u69b2t\\u8100\\xa2;e\\u1a2d\\u1a2e\\u40a2r\\xe4\\u01b2r;\\uc000\\ud835\\udd20\\u0180cei\\u1a3d\\u1a40\\u1a4dy;\\u4447ck\\u0100;m\\u1a47\\u1a48\\u6713ark\\xbb\\u1a48;\\u43c7r\\u0380;Ecefms\\u1a5f\\u1a60\\u1a62\\u1a6b\\u1aa4\\u1aaa\\u1aae\\u65cb;\\u69c3\\u0180;el\\u1a69\\u1a6a\\u1a6d\\u42c6q;\\u6257e\\u0261\\u1a74\\0\\0\\u1a88rrow\\u0100lr\\u1a7c\\u1a81eft;\\u61baight;\\u61bb\\u0280RSacd\\u1a92\\u1a94\\u1a96\\u1a9a\\u1a9f\\xbb\\u0f47;\\u64c8st;\\u629birc;\\u629aash;\\u629dnint;\\u6a10id;\\u6aefcir;\\u69c2ubs\\u0100;u\\u1abb\\u1abc\\u6663it\\xbb\\u1abc\\u02ec\\u1ac7\\u1ad4\\u1afa\\0\\u1b0aon\\u0100;e\\u1acd\\u1ace\\u403a\\u0100;q\\xc7\\xc6\\u026d\\u1ad9\\0\\0\\u1ae2a\\u0100;t\\u1ade\\u1adf\\u402c;\\u4040\\u0180;fl\\u1ae8\\u1ae9\\u1aeb\\u6201\\xee\\u1160e\\u0100mx\\u1af1\\u1af6ent\\xbb\\u1ae9e\\xf3\\u024d\\u01e7\\u1afe\\0\\u1b07\\u0100;d\\u12bb\\u1b02ot;\\u6a6dn\\xf4\\u0246\\u0180fry\\u1b10\\u1b14\\u1b17;\\uc000\\ud835\\udd54o\\xe4\\u0254\\u8100\\xa9;s\\u0155\\u1b1dr;\\u6117\\u0100ao\\u1b25\\u1b29rr;\\u61b5ss;\\u6717\\u0100cu\\u1b32\\u1b37r;\\uc000\\ud835\\udcb8\\u0100bp\\u1b3c\\u1b44\\u0100;e\\u1b41\\u1b42\\u6acf;\\u6ad1\\u0100;e\\u1b49\\u1b4a\\u6ad0;\\u6ad2dot;\\u62ef\\u0380delprvw\\u1b60\\u1b6c\\u1b77\\u1b82\\u1bac\\u1bd4\\u1bf9arr\\u0100lr\\u1b68\\u1b6a;\\u6938;\\u6935\\u0270\\u1b72\\0\\0\\u1b75r;\\u62dec;\\u62dfarr\\u0100;p\\u1b7f\\u1b80\\u61b6;\\u693d\\u0300;bcdos\\u1b8f\\u1b90\\u1b96\\u1ba1\\u1ba5\\u1ba8\\u622arcap;\\u6a48\\u0100au\\u1b9b\\u1b9ep;\\u6a46p;\\u6a4aot;\\u628dr;\\u6a45;\\uc000\\u222a\\ufe00\\u0200alrv\\u1bb5\\u1bbf\\u1bde\\u1be3rr\\u0100;m\\u1bbc\\u1bbd\\u61b7;\\u693cy\\u0180evw\\u1bc7\\u1bd4\\u1bd8q\\u0270\\u1bce\\0\\0\\u1bd2re\\xe3\\u1b73u\\xe3\\u1b75ee;\\u62ceedge;\\u62cfen\\u803b\\xa4\\u40a4earrow\\u0100lr\\u1bee\\u1bf3eft\\xbb\\u1b80ight\\xbb\\u1bbde\\xe4\\u1bdd\\u0100ci\\u1c01\\u1c07onin\\xf4\\u01f7nt;\\u6231lcty;\\u632d\\u0980AHabcdefhijlorstuwz\\u1c38\\u1c3b\\u1c3f\\u1c5d\\u1c69\\u1c75\\u1c8a\\u1c9e\\u1cac\\u1cb7\\u1cfb\\u1cff\\u1d0d\\u1d7b\\u1d91\\u1dab\\u1dbb\\u1dc6\\u1dcdr\\xf2\\u0381ar;\\u6965\\u0200glrs\\u1c48\\u1c4d\\u1c52\\u1c54ger;\\u6020eth;\\u6138\\xf2\\u1133h\\u0100;v\\u1c5a\\u1c5b\\u6010\\xbb\\u090a\\u016b\\u1c61\\u1c67arow;\\u690fa\\xe3\\u0315\\u0100ay\\u1c6e\\u1c73ron;\\u410f;\\u4434\\u0180;ao\\u0332\\u1c7c\\u1c84\\u0100gr\\u02bf\\u1c81r;\\u61catseq;\\u6a77\\u0180glm\\u1c91\\u1c94\\u1c98\\u803b\\xb0\\u40b0ta;\\u43b4ptyv;\\u69b1\\u0100ir\\u1ca3\\u1ca8sht;\\u697f;\\uc000\\ud835\\udd21ar\\u0100lr\\u1cb3\\u1cb5\\xbb\\u08dc\\xbb\\u101e\\u0280aegsv\\u1cc2\\u0378\\u1cd6\\u1cdc\\u1ce0m\\u0180;os\\u0326\\u1cca\\u1cd4nd\\u0100;s\\u0326\\u1cd1uit;\\u6666amma;\\u43ddin;\\u62f2\\u0180;io\\u1ce7\\u1ce8\\u1cf8\\u40f7de\\u8100\\xf7;o\\u1ce7\\u1cf0ntimes;\\u62c7n\\xf8\\u1cf7cy;\\u4452c\\u026f\\u1d06\\0\\0\\u1d0arn;\\u631eop;\\u630d\\u0280lptuw\\u1d18\\u1d1d\\u1d22\\u1d49\\u1d55lar;\\u4024f;\\uc000\\ud835\\udd55\\u0280;emps\\u030b\\u1d2d\\u1d37\\u1d3d\\u1d42q\\u0100;d\\u0352\\u1d33ot;\\u6251inus;\\u6238lus;\\u6214quare;\\u62a1blebarwedg\\xe5\\xfan\\u0180adh\\u112e\\u1d5d\\u1d67ownarrow\\xf3\\u1c83arpoon\\u0100lr\\u1d72\\u1d76ef\\xf4\\u1cb4igh\\xf4\\u1cb6\\u0162\\u1d7f\\u1d85karo\\xf7\\u0f42\\u026f\\u1d8a\\0\\0\\u1d8ern;\\u631fop;\\u630c\\u0180cot\\u1d98\\u1da3\\u1da6\\u0100ry\\u1d9d\\u1da1;\\uc000\\ud835\\udcb9;\\u4455l;\\u69f6rok;\\u4111\\u0100dr\\u1db0\\u1db4ot;\\u62f1i\\u0100;f\\u1dba\\u1816\\u65bf\\u0100ah\\u1dc0\\u1dc3r\\xf2\\u0429a\\xf2\\u0fa6angle;\\u69a6\\u0100ci\\u1dd2\\u1dd5y;\\u445fgrarr;\\u67ff\\u0900Dacdefglmnopqrstux\\u1e01\\u1e09\\u1e19\\u1e38\\u0578\\u1e3c\\u1e49\\u1e61\\u1e7e\\u1ea5\\u1eaf\\u1ebd\\u1ee1\\u1f2a\\u1f37\\u1f44\\u1f4e\\u1f5a\\u0100Do\\u1e06\\u1d34o\\xf4\\u1c89\\u0100cs\\u1e0e\\u1e14ute\\u803b\\xe9\\u40e9ter;\\u6a6e\\u0200aioy\\u1e22\\u1e27\\u1e31\\u1e36ron;\\u411br\\u0100;c\\u1e2d\\u1e2e\\u6256\\u803b\\xea\\u40ealon;\\u6255;\\u444dot;\\u4117\\u0100Dr\\u1e41\\u1e45ot;\\u6252;\\uc000\\ud835\\udd22\\u0180;rs\\u1e50\\u1e51\\u1e57\\u6a9aave\\u803b\\xe8\\u40e8\\u0100;d\\u1e5c\\u1e5d\\u6a96ot;\\u6a98\\u0200;ils\\u1e6a\\u1e6b\\u1e72\\u1e74\\u6a99nters;\\u63e7;\\u6113\\u0100;d\\u1e79\\u1e7a\\u6a95ot;\\u6a97\\u0180aps\\u1e85\\u1e89\\u1e97cr;\\u4113ty\\u0180;sv\\u1e92\\u1e93\\u1e95\\u6205et\\xbb\\u1e93p\\u01001;\\u1e9d\\u1ea4\\u0133\\u1ea1\\u1ea3;\\u6004;\\u6005\\u6003\\u0100gs\\u1eaa\\u1eac;\\u414bp;\\u6002\\u0100gp\\u1eb4\\u1eb8on;\\u4119f;\\uc000\\ud835\\udd56\\u0180als\\u1ec4\\u1ece\\u1ed2r\\u0100;s\\u1eca\\u1ecb\\u62d5l;\\u69e3us;\\u6a71i\\u0180;lv\\u1eda\\u1edb\\u1edf\\u43b5on\\xbb\\u1edb;\\u43f5\\u0200csuv\\u1eea\\u1ef3\\u1f0b\\u1f23\\u0100io\\u1eef\\u1e31rc\\xbb\\u1e2e\\u0269\\u1ef9\\0\\0\\u1efb\\xed\\u0548ant\\u0100gl\\u1f02\\u1f06tr\\xbb\\u1e5dess\\xbb\\u1e7a\\u0180aei\\u1f12\\u1f16\\u1f1als;\\u403dst;\\u625fv\\u0100;D\\u0235\\u1f20D;\\u6a78parsl;\\u69e5\\u0100Da\\u1f2f\\u1f33ot;\\u6253rr;\\u6971\\u0180cdi\\u1f3e\\u1f41\\u1ef8r;\\u612fo\\xf4\\u0352\\u0100ah\\u1f49\\u1f4b;\\u43b7\\u803b\\xf0\\u40f0\\u0100mr\\u1f53\\u1f57l\\u803b\\xeb\\u40ebo;\\u60ac\\u0180cip\\u1f61\\u1f64\\u1f67l;\\u4021s\\xf4\\u056e\\u0100eo\\u1f6c\\u1f74ctatio\\xee\\u0559nential\\xe5\\u0579\\u09e1\\u1f92\\0\\u1f9e\\0\\u1fa1\\u1fa7\\0\\0\\u1fc6\\u1fcc\\0\\u1fd3\\0\\u1fe6\\u1fea\\u2000\\0\\u2008\\u205allingdotse\\xf1\\u1e44y;\\u4444male;\\u6640\\u0180ilr\\u1fad\\u1fb3\\u1fc1lig;\\u8000\\ufb03\\u0269\\u1fb9\\0\\0\\u1fbdg;\\u8000\\ufb00ig;\\u8000\\ufb04;\\uc000\\ud835\\udd23lig;\\u8000\\ufb01lig;\\uc000fj\\u0180alt\\u1fd9\\u1fdc\\u1fe1t;\\u666dig;\\u8000\\ufb02ns;\\u65b1of;\\u4192\\u01f0\\u1fee\\0\\u1ff3f;\\uc000\\ud835\\udd57\\u0100ak\\u05bf\\u1ff7\\u0100;v\\u1ffc\\u1ffd\\u62d4;\\u6ad9artint;\\u6a0d\\u0100ao\\u200c\\u2055\\u0100cs\\u2011\\u2052\\u03b1\\u201a\\u2030\\u2038\\u2045\\u2048\\0\\u2050\\u03b2\\u2022\\u2025\\u2027\\u202a\\u202c\\0\\u202e\\u803b\\xbd\\u40bd;\\u6153\\u803b\\xbc\\u40bc;\\u6155;\\u6159;\\u615b\\u01b3\\u2034\\0\\u2036;\\u6154;\\u6156\\u02b4\\u203e\\u2041\\0\\0\\u2043\\u803b\\xbe\\u40be;\\u6157;\\u615c5;\\u6158\\u01b6\\u204c\\0\\u204e;\\u615a;\\u615d8;\\u615el;\\u6044wn;\\u6322cr;\\uc000\\ud835\\udcbb\\u0880Eabcdefgijlnorstv\\u2082\\u2089\\u209f\\u20a5\\u20b0\\u20b4\\u20f0\\u20f5\\u20fa\\u20ff\\u2103\\u2112\\u2138\\u0317\\u213e\\u2152\\u219e\\u0100;l\\u064d\\u2087;\\u6a8c\\u0180cmp\\u2090\\u2095\\u209dute;\\u41f5ma\\u0100;d\\u209c\\u1cda\\u43b3;\\u6a86reve;\\u411f\\u0100iy\\u20aa\\u20aerc;\\u411d;\\u4433ot;\\u4121\\u0200;lqs\\u063e\\u0642\\u20bd\\u20c9\\u0180;qs\\u063e\\u064c\\u20c4lan\\xf4\\u0665\\u0200;cdl\\u0665\\u20d2\\u20d5\\u20e5c;\\u6aa9ot\\u0100;o\\u20dc\\u20dd\\u6a80\\u0100;l\\u20e2\\u20e3\\u6a82;\\u6a84\\u0100;e\\u20ea\\u20ed\\uc000\\u22db\\ufe00s;\\u6a94r;\\uc000\\ud835\\udd24\\u0100;g\\u0673\\u061bmel;\\u6137cy;\\u4453\\u0200;Eaj\\u065a\\u210c\\u210e\\u2110;\\u6a92;\\u6aa5;\\u6aa4\\u0200Eaes\\u211b\\u211d\\u2129\\u2134;\\u6269p\\u0100;p\\u2123\\u2124\\u6a8arox\\xbb\\u2124\\u0100;q\\u212e\\u212f\\u6a88\\u0100;q\\u212e\\u211bim;\\u62e7pf;\\uc000\\ud835\\udd58\\u0100ci\\u2143\\u2146r;\\u610am\\u0180;el\\u066b\\u214e\\u2150;\\u6a8e;\\u6a90\\u8300>;cdlqr\\u05ee\\u2160\\u216a\\u216e\\u2173\\u2179\\u0100ci\\u2165\\u2167;\\u6aa7r;\\u6a7aot;\\u62d7Par;\\u6995uest;\\u6a7c\\u0280adels\\u2184\\u216a\\u2190\\u0656\\u219b\\u01f0\\u2189\\0\\u218epro\\xf8\\u209er;\\u6978q\\u0100lq\\u063f\\u2196les\\xf3\\u2088i\\xed\\u066b\\u0100en\\u21a3\\u21adrtneqq;\\uc000\\u2269\\ufe00\\xc5\\u21aa\\u0500Aabcefkosy\\u21c4\\u21c7\\u21f1\\u21f5\\u21fa\\u2218\\u221d\\u222f\\u2268\\u227dr\\xf2\\u03a0\\u0200ilmr\\u21d0\\u21d4\\u21d7\\u21dbrs\\xf0\\u1484f\\xbb\\u2024il\\xf4\\u06a9\\u0100dr\\u21e0\\u21e4cy;\\u444a\\u0180;cw\\u08f4\\u21eb\\u21efir;\\u6948;\\u61adar;\\u610firc;\\u4125\\u0180alr\\u2201\\u220e\\u2213rts\\u0100;u\\u2209\\u220a\\u6665it\\xbb\\u220alip;\\u6026con;\\u62b9r;\\uc000\\ud835\\udd25s\\u0100ew\\u2223\\u2229arow;\\u6925arow;\\u6926\\u0280amopr\\u223a\\u223e\\u2243\\u225e\\u2263rr;\\u61fftht;\\u623bk\\u0100lr\\u2249\\u2253eftarrow;\\u61a9ightarrow;\\u61aaf;\\uc000\\ud835\\udd59bar;\\u6015\\u0180clt\\u226f\\u2274\\u2278r;\\uc000\\ud835\\udcbdas\\xe8\\u21f4rok;\\u4127\\u0100bp\\u2282\\u2287ull;\\u6043hen\\xbb\\u1c5b\\u0ae1\\u22a3\\0\\u22aa\\0\\u22b8\\u22c5\\u22ce\\0\\u22d5\\u22f3\\0\\0\\u22f8\\u2322\\u2367\\u2362\\u237f\\0\\u2386\\u23aa\\u23b4cute\\u803b\\xed\\u40ed\\u0180;iy\\u0771\\u22b0\\u22b5rc\\u803b\\xee\\u40ee;\\u4438\\u0100cx\\u22bc\\u22bfy;\\u4435cl\\u803b\\xa1\\u40a1\\u0100fr\\u039f\\u22c9;\\uc000\\ud835\\udd26rave\\u803b\\xec\\u40ec\\u0200;ino\\u073e\\u22dd\\u22e9\\u22ee\\u0100in\\u22e2\\u22e6nt;\\u6a0ct;\\u622dfin;\\u69dcta;\\u6129lig;\\u4133\\u0180aop\\u22fe\\u231a\\u231d\\u0180cgt\\u2305\\u2308\\u2317r;\\u412b\\u0180elp\\u071f\\u230f\\u2313in\\xe5\\u078ear\\xf4\\u0720h;\\u4131f;\\u62b7ed;\\u41b5\\u0280;cfot\\u04f4\\u232c\\u2331\\u233d\\u2341are;\\u6105in\\u0100;t\\u2338\\u2339\\u621eie;\\u69dddo\\xf4\\u2319\\u0280;celp\\u0757\\u234c\\u2350\\u235b\\u2361al;\\u62ba\\u0100gr\\u2355\\u2359er\\xf3\\u1563\\xe3\\u234darhk;\\u6a17rod;\\u6a3c\\u0200cgpt\\u236f\\u2372\\u2376\\u237by;\\u4451on;\\u412ff;\\uc000\\ud835\\udd5aa;\\u43b9uest\\u803b\\xbf\\u40bf\\u0100ci\\u238a\\u238fr;\\uc000\\ud835\\udcben\\u0280;Edsv\\u04f4\\u239b\\u239d\\u23a1\\u04f3;\\u62f9ot;\\u62f5\\u0100;v\\u23a6\\u23a7\\u62f4;\\u62f3\\u0100;i\\u0777\\u23aelde;\\u4129\\u01eb\\u23b8\\0\\u23bccy;\\u4456l\\u803b\\xef\\u40ef\\u0300cfmosu\\u23cc\\u23d7\\u23dc\\u23e1\\u23e7\\u23f5\\u0100iy\\u23d1\\u23d5rc;\\u4135;\\u4439r;\\uc000\\ud835\\udd27ath;\\u4237pf;\\uc000\\ud835\\udd5b\\u01e3\\u23ec\\0\\u23f1r;\\uc000\\ud835\\udcbfrcy;\\u4458kcy;\\u4454\\u0400acfghjos\\u240b\\u2416\\u2422\\u2427\\u242d\\u2431\\u2435\\u243bppa\\u0100;v\\u2413\\u2414\\u43ba;\\u43f0\\u0100ey\\u241b\\u2420dil;\\u4137;\\u443ar;\\uc000\\ud835\\udd28reen;\\u4138cy;\\u4445cy;\\u445cpf;\\uc000\\ud835\\udd5ccr;\\uc000\\ud835\\udcc0\\u0b80ABEHabcdefghjlmnoprstuv\\u2470\\u2481\\u2486\\u248d\\u2491\\u250e\\u253d\\u255a\\u2580\\u264e\\u265e\\u2665\\u2679\\u267d\\u269a\\u26b2\\u26d8\\u275d\\u2768\\u278b\\u27c0\\u2801\\u2812\\u0180art\\u2477\\u247a\\u247cr\\xf2\\u09c6\\xf2\\u0395ail;\\u691barr;\\u690e\\u0100;g\\u0994\\u248b;\\u6a8bar;\\u6962\\u0963\\u24a5\\0\\u24aa\\0\\u24b1\\0\\0\\0\\0\\0\\u24b5\\u24ba\\0\\u24c6\\u24c8\\u24cd\\0\\u24f9ute;\\u413amptyv;\\u69b4ra\\xee\\u084cbda;\\u43bbg\\u0180;dl\\u088e\\u24c1\\u24c3;\\u6991\\xe5\\u088e;\\u6a85uo\\u803b\\xab\\u40abr\\u0400;bfhlpst\\u0899\\u24de\\u24e6\\u24e9\\u24eb\\u24ee\\u24f1\\u24f5\\u0100;f\\u089d\\u24e3s;\\u691fs;\\u691d\\xeb\\u2252p;\\u61abl;\\u6939im;\\u6973l;\\u61a2\\u0180;ae\\u24ff\\u2500\\u2504\\u6aabil;\\u6919\\u0100;s\\u2509\\u250a\\u6aad;\\uc000\\u2aad\\ufe00\\u0180abr\\u2515\\u2519\\u251drr;\\u690crk;\\u6772\\u0100ak\\u2522\\u252cc\\u0100ek\\u2528\\u252a;\\u407b;\\u405b\\u0100es\\u2531\\u2533;\\u698bl\\u0100du\\u2539\\u253b;\\u698f;\\u698d\\u0200aeuy\\u2546\\u254b\\u2556\\u2558ron;\\u413e\\u0100di\\u2550\\u2554il;\\u413c\\xec\\u08b0\\xe2\\u2529;\\u443b\\u0200cqrs\\u2563\\u2566\\u256d\\u257da;\\u6936uo\\u0100;r\\u0e19\\u1746\\u0100du\\u2572\\u2577har;\\u6967shar;\\u694bh;\\u61b2\\u0280;fgqs\\u258b\\u258c\\u0989\\u25f3\\u25ff\\u6264t\\u0280ahlrt\\u2598\\u25a4\\u25b7\\u25c2\\u25e8rrow\\u0100;t\\u0899\\u25a1a\\xe9\\u24f6arpoon\\u0100du\\u25af\\u25b4own\\xbb\\u045ap\\xbb\\u0966eftarrows;\\u61c7ight\\u0180ahs\\u25cd\\u25d6\\u25derrow\\u0100;s\\u08f4\\u08a7arpoon\\xf3\\u0f98quigarro\\xf7\\u21f0hreetimes;\\u62cb\\u0180;qs\\u258b\\u0993\\u25falan\\xf4\\u09ac\\u0280;cdgs\\u09ac\\u260a\\u260d\\u261d\\u2628c;\\u6aa8ot\\u0100;o\\u2614\\u2615\\u6a7f\\u0100;r\\u261a\\u261b\\u6a81;\\u6a83\\u0100;e\\u2622\\u2625\\uc000\\u22da\\ufe00s;\\u6a93\\u0280adegs\\u2633\\u2639\\u263d\\u2649\\u264bppro\\xf8\\u24c6ot;\\u62d6q\\u0100gq\\u2643\\u2645\\xf4\\u0989gt\\xf2\\u248c\\xf4\\u099bi\\xed\\u09b2\\u0180ilr\\u2655\\u08e1\\u265asht;\\u697c;\\uc000\\ud835\\udd29\\u0100;E\\u099c\\u2663;\\u6a91\\u0161\\u2669\\u2676r\\u0100du\\u25b2\\u266e\\u0100;l\\u0965\\u2673;\\u696alk;\\u6584cy;\\u4459\\u0280;acht\\u0a48\\u2688\\u268b\\u2691\\u2696r\\xf2\\u25c1orne\\xf2\\u1d08ard;\\u696bri;\\u65fa\\u0100io\\u269f\\u26a4dot;\\u4140ust\\u0100;a\\u26ac\\u26ad\\u63b0che\\xbb\\u26ad\\u0200Eaes\\u26bb\\u26bd\\u26c9\\u26d4;\\u6268p\\u0100;p\\u26c3\\u26c4\\u6a89rox\\xbb\\u26c4\\u0100;q\\u26ce\\u26cf\\u6a87\\u0100;q\\u26ce\\u26bbim;\\u62e6\\u0400abnoptwz\\u26e9\\u26f4\\u26f7\\u271a\\u272f\\u2741\\u2747\\u2750\\u0100nr\\u26ee\\u26f1g;\\u67ecr;\\u61fdr\\xeb\\u08c1g\\u0180lmr\\u26ff\\u270d\\u2714eft\\u0100ar\\u09e6\\u2707ight\\xe1\\u09f2apsto;\\u67fcight\\xe1\\u09fdparrow\\u0100lr\\u2725\\u2729ef\\xf4\\u24edight;\\u61ac\\u0180afl\\u2736\\u2739\\u273dr;\\u6985;\\uc000\\ud835\\udd5dus;\\u6a2dimes;\\u6a34\\u0161\\u274b\\u274fst;\\u6217\\xe1\\u134e\\u0180;ef\\u2757\\u2758\\u1800\\u65cange\\xbb\\u2758ar\\u0100;l\\u2764\\u2765\\u4028t;\\u6993\\u0280achmt\\u2773\\u2776\\u277c\\u2785\\u2787r\\xf2\\u08a8orne\\xf2\\u1d8car\\u0100;d\\u0f98\\u2783;\\u696d;\\u600eri;\\u62bf\\u0300achiqt\\u2798\\u279d\\u0a40\\u27a2\\u27ae\\u27bbquo;\\u6039r;\\uc000\\ud835\\udcc1m\\u0180;eg\\u09b2\\u27aa\\u27ac;\\u6a8d;\\u6a8f\\u0100bu\\u252a\\u27b3o\\u0100;r\\u0e1f\\u27b9;\\u601arok;\\u4142\\u8400<;cdhilqr\\u082b\\u27d2\\u2639\\u27dc\\u27e0\\u27e5\\u27ea\\u27f0\\u0100ci\\u27d7\\u27d9;\\u6aa6r;\\u6a79re\\xe5\\u25f2mes;\\u62c9arr;\\u6976uest;\\u6a7b\\u0100Pi\\u27f5\\u27f9ar;\\u6996\\u0180;ef\\u2800\\u092d\\u181b\\u65c3r\\u0100du\\u2807\\u280dshar;\\u694ahar;\\u6966\\u0100en\\u2817\\u2821rtneqq;\\uc000\\u2268\\ufe00\\xc5\\u281e\\u0700Dacdefhilnopsu\\u2840\\u2845\\u2882\\u288e\\u2893\\u28a0\\u28a5\\u28a8\\u28da\\u28e2\\u28e4\\u0a83\\u28f3\\u2902Dot;\\u623a\\u0200clpr\\u284e\\u2852\\u2863\\u287dr\\u803b\\xaf\\u40af\\u0100et\\u2857\\u2859;\\u6642\\u0100;e\\u285e\\u285f\\u6720se\\xbb\\u285f\\u0100;s\\u103b\\u2868to\\u0200;dlu\\u103b\\u2873\\u2877\\u287bow\\xee\\u048cef\\xf4\\u090f\\xf0\\u13d1ker;\\u65ae\\u0100oy\\u2887\\u288cmma;\\u6a29;\\u443cash;\\u6014asuredangle\\xbb\\u1626r;\\uc000\\ud835\\udd2ao;\\u6127\\u0180cdn\\u28af\\u28b4\\u28c9ro\\u803b\\xb5\\u40b5\\u0200;acd\\u1464\\u28bd\\u28c0\\u28c4s\\xf4\\u16a7ir;\\u6af0ot\\u80bb\\xb7\\u01b5us\\u0180;bd\\u28d2\\u1903\\u28d3\\u6212\\u0100;u\\u1d3c\\u28d8;\\u6a2a\\u0163\\u28de\\u28e1p;\\u6adb\\xf2\\u2212\\xf0\\u0a81\\u0100dp\\u28e9\\u28eeels;\\u62a7f;\\uc000\\ud835\\udd5e\\u0100ct\\u28f8\\u28fdr;\\uc000\\ud835\\udcc2pos\\xbb\\u159d\\u0180;lm\\u2909\\u290a\\u290d\\u43bctimap;\\u62b8\\u0c00GLRVabcdefghijlmoprstuvw\\u2942\\u2953\\u297e\\u2989\\u2998\\u29da\\u29e9\\u2a15\\u2a1a\\u2a58\\u2a5d\\u2a83\\u2a95\\u2aa4\\u2aa8\\u2b04\\u2b07\\u2b44\\u2b7f\\u2bae\\u2c34\\u2c67\\u2c7c\\u2ce9\\u0100gt\\u2947\\u294b;\\uc000\\u22d9\\u0338\\u0100;v\\u2950\\u0bcf\\uc000\\u226b\\u20d2\\u0180elt\\u295a\\u2972\\u2976ft\\u0100ar\\u2961\\u2967rrow;\\u61cdightarrow;\\u61ce;\\uc000\\u22d8\\u0338\\u0100;v\\u297b\\u0c47\\uc000\\u226a\\u20d2ightarrow;\\u61cf\\u0100Dd\\u298e\\u2993ash;\\u62afash;\\u62ae\\u0280bcnpt\\u29a3\\u29a7\\u29ac\\u29b1\\u29ccla\\xbb\\u02deute;\\u4144g;\\uc000\\u2220\\u20d2\\u0280;Eiop\\u0d84\\u29bc\\u29c0\\u29c5\\u29c8;\\uc000\\u2a70\\u0338d;\\uc000\\u224b\\u0338s;\\u4149ro\\xf8\\u0d84ur\\u0100;a\\u29d3\\u29d4\\u666el\\u0100;s\\u29d3\\u0b38\\u01f3\\u29df\\0\\u29e3p\\u80bb\\xa0\\u0b37mp\\u0100;e\\u0bf9\\u0c00\\u0280aeouy\\u29f4\\u29fe\\u2a03\\u2a10\\u2a13\\u01f0\\u29f9\\0\\u29fb;\\u6a43on;\\u4148dil;\\u4146ng\\u0100;d\\u0d7e\\u2a0aot;\\uc000\\u2a6d\\u0338p;\\u6a42;\\u443dash;\\u6013\\u0380;Aadqsx\\u0b92\\u2a29\\u2a2d\\u2a3b\\u2a41\\u2a45\\u2a50rr;\\u61d7r\\u0100hr\\u2a33\\u2a36k;\\u6924\\u0100;o\\u13f2\\u13f0ot;\\uc000\\u2250\\u0338ui\\xf6\\u0b63\\u0100ei\\u2a4a\\u2a4ear;\\u6928\\xed\\u0b98ist\\u0100;s\\u0ba0\\u0b9fr;\\uc000\\ud835\\udd2b\\u0200Eest\\u0bc5\\u2a66\\u2a79\\u2a7c\\u0180;qs\\u0bbc\\u2a6d\\u0be1\\u0180;qs\\u0bbc\\u0bc5\\u2a74lan\\xf4\\u0be2i\\xed\\u0bea\\u0100;r\\u0bb6\\u2a81\\xbb\\u0bb7\\u0180Aap\\u2a8a\\u2a8d\\u2a91r\\xf2\\u2971rr;\\u61aear;\\u6af2\\u0180;sv\\u0f8d\\u2a9c\\u0f8c\\u0100;d\\u2aa1\\u2aa2\\u62fc;\\u62facy;\\u445a\\u0380AEadest\\u2ab7\\u2aba\\u2abe\\u2ac2\\u2ac5\\u2af6\\u2af9r\\xf2\\u2966;\\uc000\\u2266\\u0338rr;\\u619ar;\\u6025\\u0200;fqs\\u0c3b\\u2ace\\u2ae3\\u2aeft\\u0100ar\\u2ad4\\u2ad9rro\\xf7\\u2ac1ightarro\\xf7\\u2a90\\u0180;qs\\u0c3b\\u2aba\\u2aealan\\xf4\\u0c55\\u0100;s\\u0c55\\u2af4\\xbb\\u0c36i\\xed\\u0c5d\\u0100;r\\u0c35\\u2afei\\u0100;e\\u0c1a\\u0c25i\\xe4\\u0d90\\u0100pt\\u2b0c\\u2b11f;\\uc000\\ud835\\udd5f\\u8180\\xac;in\\u2b19\\u2b1a\\u2b36\\u40acn\\u0200;Edv\\u0b89\\u2b24\\u2b28\\u2b2e;\\uc000\\u22f9\\u0338ot;\\uc000\\u22f5\\u0338\\u01e1\\u0b89\\u2b33\\u2b35;\\u62f7;\\u62f6i\\u0100;v\\u0cb8\\u2b3c\\u01e1\\u0cb8\\u2b41\\u2b43;\\u62fe;\\u62fd\\u0180aor\\u2b4b\\u2b63\\u2b69r\\u0200;ast\\u0b7b\\u2b55\\u2b5a\\u2b5flle\\xec\\u0b7bl;\\uc000\\u2afd\\u20e5;\\uc000\\u2202\\u0338lint;\\u6a14\\u0180;ce\\u0c92\\u2b70\\u2b73u\\xe5\\u0ca5\\u0100;c\\u0c98\\u2b78\\u0100;e\\u0c92\\u2b7d\\xf1\\u0c98\\u0200Aait\\u2b88\\u2b8b\\u2b9d\\u2ba7r\\xf2\\u2988rr\\u0180;cw\\u2b94\\u2b95\\u2b99\\u619b;\\uc000\\u2933\\u0338;\\uc000\\u219d\\u0338ghtarrow\\xbb\\u2b95ri\\u0100;e\\u0ccb\\u0cd6\\u0380chimpqu\\u2bbd\\u2bcd\\u2bd9\\u2b04\\u0b78\\u2be4\\u2bef\\u0200;cer\\u0d32\\u2bc6\\u0d37\\u2bc9u\\xe5\\u0d45;\\uc000\\ud835\\udcc3ort\\u026d\\u2b05\\0\\0\\u2bd6ar\\xe1\\u2b56m\\u0100;e\\u0d6e\\u2bdf\\u0100;q\\u0d74\\u0d73su\\u0100bp\\u2beb\\u2bed\\xe5\\u0cf8\\xe5\\u0d0b\\u0180bcp\\u2bf6\\u2c11\\u2c19\\u0200;Ees\\u2bff\\u2c00\\u0d22\\u2c04\\u6284;\\uc000\\u2ac5\\u0338et\\u0100;e\\u0d1b\\u2c0bq\\u0100;q\\u0d23\\u2c00c\\u0100;e\\u0d32\\u2c17\\xf1\\u0d38\\u0200;Ees\\u2c22\\u2c23\\u0d5f\\u2c27\\u6285;\\uc000\\u2ac6\\u0338et\\u0100;e\\u0d58\\u2c2eq\\u0100;q\\u0d60\\u2c23\\u0200gilr\\u2c3d\\u2c3f\\u2c45\\u2c47\\xec\\u0bd7lde\\u803b\\xf1\\u40f1\\xe7\\u0c43iangle\\u0100lr\\u2c52\\u2c5ceft\\u0100;e\\u0c1a\\u2c5a\\xf1\\u0c26ight\\u0100;e\\u0ccb\\u2c65\\xf1\\u0cd7\\u0100;m\\u2c6c\\u2c6d\\u43bd\\u0180;es\\u2c74\\u2c75\\u2c79\\u4023ro;\\u6116p;\\u6007\\u0480DHadgilrs\\u2c8f\\u2c94\\u2c99\\u2c9e\\u2ca3\\u2cb0\\u2cb6\\u2cd3\\u2ce3ash;\\u62adarr;\\u6904p;\\uc000\\u224d\\u20d2ash;\\u62ac\\u0100et\\u2ca8\\u2cac;\\uc000\\u2265\\u20d2;\\uc000>\\u20d2nfin;\\u69de\\u0180Aet\\u2cbd\\u2cc1\\u2cc5rr;\\u6902;\\uc000\\u2264\\u20d2\\u0100;r\\u2cca\\u2ccd\\uc000<\\u20d2ie;\\uc000\\u22b4\\u20d2\\u0100At\\u2cd8\\u2cdcrr;\\u6903rie;\\uc000\\u22b5\\u20d2im;\\uc000\\u223c\\u20d2\\u0180Aan\\u2cf0\\u2cf4\\u2d02rr;\\u61d6r\\u0100hr\\u2cfa\\u2cfdk;\\u6923\\u0100;o\\u13e7\\u13e5ear;\\u6927\\u1253\\u1a95\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\u2d2d\\0\\u2d38\\u2d48\\u2d60\\u2d65\\u2d72\\u2d84\\u1b07\\0\\0\\u2d8d\\u2dab\\0\\u2dc8\\u2dce\\0\\u2ddc\\u2e19\\u2e2b\\u2e3e\\u2e43\\u0100cs\\u2d31\\u1a97ute\\u803b\\xf3\\u40f3\\u0100iy\\u2d3c\\u2d45r\\u0100;c\\u1a9e\\u2d42\\u803b\\xf4\\u40f4;\\u443e\\u0280abios\\u1aa0\\u2d52\\u2d57\\u01c8\\u2d5alac;\\u4151v;\\u6a38old;\\u69bclig;\\u4153\\u0100cr\\u2d69\\u2d6dir;\\u69bf;\\uc000\\ud835\\udd2c\\u036f\\u2d79\\0\\0\\u2d7c\\0\\u2d82n;\\u42dbave\\u803b\\xf2\\u40f2;\\u69c1\\u0100bm\\u2d88\\u0df4ar;\\u69b5\\u0200acit\\u2d95\\u2d98\\u2da5\\u2da8r\\xf2\\u1a80\\u0100ir\\u2d9d\\u2da0r;\\u69beoss;\\u69bbn\\xe5\\u0e52;\\u69c0\\u0180aei\\u2db1\\u2db5\\u2db9cr;\\u414dga;\\u43c9\\u0180cdn\\u2dc0\\u2dc5\\u01cdron;\\u43bf;\\u69b6pf;\\uc000\\ud835\\udd60\\u0180ael\\u2dd4\\u2dd7\\u01d2r;\\u69b7rp;\\u69b9\\u0380;adiosv\\u2dea\\u2deb\\u2dee\\u2e08\\u2e0d\\u2e10\\u2e16\\u6228r\\xf2\\u1a86\\u0200;efm\\u2df7\\u2df8\\u2e02\\u2e05\\u6a5dr\\u0100;o\\u2dfe\\u2dff\\u6134f\\xbb\\u2dff\\u803b\\xaa\\u40aa\\u803b\\xba\\u40bagof;\\u62b6r;\\u6a56lope;\\u6a57;\\u6a5b\\u0180clo\\u2e1f\\u2e21\\u2e27\\xf2\\u2e01ash\\u803b\\xf8\\u40f8l;\\u6298i\\u016c\\u2e2f\\u2e34de\\u803b\\xf5\\u40f5es\\u0100;a\\u01db\\u2e3as;\\u6a36ml\\u803b\\xf6\\u40f6bar;\\u633d\\u0ae1\\u2e5e\\0\\u2e7d\\0\\u2e80\\u2e9d\\0\\u2ea2\\u2eb9\\0\\0\\u2ecb\\u0e9c\\0\\u2f13\\0\\0\\u2f2b\\u2fbc\\0\\u2fc8r\\u0200;ast\\u0403\\u2e67\\u2e72\\u0e85\\u8100\\xb6;l\\u2e6d\\u2e6e\\u40b6le\\xec\\u0403\\u0269\\u2e78\\0\\0\\u2e7bm;\\u6af3;\\u6afdy;\\u443fr\\u0280cimpt\\u2e8b\\u2e8f\\u2e93\\u1865\\u2e97nt;\\u4025od;\\u402eil;\\u6030enk;\\u6031r;\\uc000\\ud835\\udd2d\\u0180imo\\u2ea8\\u2eb0\\u2eb4\\u0100;v\\u2ead\\u2eae\\u43c6;\\u43d5ma\\xf4\\u0a76ne;\\u660e\\u0180;tv\\u2ebf\\u2ec0\\u2ec8\\u43c0chfork\\xbb\\u1ffd;\\u43d6\\u0100au\\u2ecf\\u2edfn\\u0100ck\\u2ed5\\u2eddk\\u0100;h\\u21f4\\u2edb;\\u610e\\xf6\\u21f4s\\u0480;abcdemst\\u2ef3\\u2ef4\\u1908\\u2ef9\\u2efd\\u2f04\\u2f06\\u2f0a\\u2f0e\\u402bcir;\\u6a23ir;\\u6a22\\u0100ou\\u1d40\\u2f02;\\u6a25;\\u6a72n\\u80bb\\xb1\\u0e9dim;\\u6a26wo;\\u6a27\\u0180ipu\\u2f19\\u2f20\\u2f25ntint;\\u6a15f;\\uc000\\ud835\\udd61nd\\u803b\\xa3\\u40a3\\u0500;Eaceinosu\\u0ec8\\u2f3f\\u2f41\\u2f44\\u2f47\\u2f81\\u2f89\\u2f92\\u2f7e\\u2fb6;\\u6ab3p;\\u6ab7u\\xe5\\u0ed9\\u0100;c\\u0ece\\u2f4c\\u0300;acens\\u0ec8\\u2f59\\u2f5f\\u2f66\\u2f68\\u2f7eppro\\xf8\\u2f43urlye\\xf1\\u0ed9\\xf1\\u0ece\\u0180aes\\u2f6f\\u2f76\\u2f7approx;\\u6ab9qq;\\u6ab5im;\\u62e8i\\xed\\u0edfme\\u0100;s\\u2f88\\u0eae\\u6032\\u0180Eas\\u2f78\\u2f90\\u2f7a\\xf0\\u2f75\\u0180dfp\\u0eec\\u2f99\\u2faf\\u0180als\\u2fa0\\u2fa5\\u2faalar;\\u632eine;\\u6312urf;\\u6313\\u0100;t\\u0efb\\u2fb4\\xef\\u0efbrel;\\u62b0\\u0100ci\\u2fc0\\u2fc5r;\\uc000\\ud835\\udcc5;\\u43c8ncsp;\\u6008\\u0300fiopsu\\u2fda\\u22e2\\u2fdf\\u2fe5\\u2feb\\u2ff1r;\\uc000\\ud835\\udd2epf;\\uc000\\ud835\\udd62rime;\\u6057cr;\\uc000\\ud835\\udcc6\\u0180aeo\\u2ff8\\u3009\\u3013t\\u0100ei\\u2ffe\\u3005rnion\\xf3\\u06b0nt;\\u6a16st\\u0100;e\\u3010\\u3011\\u403f\\xf1\\u1f19\\xf4\\u0f14\\u0a80ABHabcdefhilmnoprstux\\u3040\\u3051\\u3055\\u3059\\u30e0\\u310e\\u312b\\u3147\\u3162\\u3172\\u318e\\u3206\\u3215\\u3224\\u3229\\u3258\\u326e\\u3272\\u3290\\u32b0\\u32b7\\u0180art\\u3047\\u304a\\u304cr\\xf2\\u10b3\\xf2\\u03ddail;\\u691car\\xf2\\u1c65ar;\\u6964\\u0380cdenqrt\\u3068\\u3075\\u3078\\u307f\\u308f\\u3094\\u30cc\\u0100eu\\u306d\\u3071;\\uc000\\u223d\\u0331te;\\u4155i\\xe3\\u116emptyv;\\u69b3g\\u0200;del\\u0fd1\\u3089\\u308b\\u308d;\\u6992;\\u69a5\\xe5\\u0fd1uo\\u803b\\xbb\\u40bbr\\u0580;abcfhlpstw\\u0fdc\\u30ac\\u30af\\u30b7\\u30b9\\u30bc\\u30be\\u30c0\\u30c3\\u30c7\\u30cap;\\u6975\\u0100;f\\u0fe0\\u30b4s;\\u6920;\\u6933s;\\u691e\\xeb\\u225d\\xf0\\u272el;\\u6945im;\\u6974l;\\u61a3;\\u619d\\u0100ai\\u30d1\\u30d5il;\\u691ao\\u0100;n\\u30db\\u30dc\\u6236al\\xf3\\u0f1e\\u0180abr\\u30e7\\u30ea\\u30eer\\xf2\\u17e5rk;\\u6773\\u0100ak\\u30f3\\u30fdc\\u0100ek\\u30f9\\u30fb;\\u407d;\\u405d\\u0100es\\u3102\\u3104;\\u698cl\\u0100du\\u310a\\u310c;\\u698e;\\u6990\\u0200aeuy\\u3117\\u311c\\u3127\\u3129ron;\\u4159\\u0100di\\u3121\\u3125il;\\u4157\\xec\\u0ff2\\xe2\\u30fa;\\u4440\\u0200clqs\\u3134\\u3137\\u313d\\u3144a;\\u6937dhar;\\u6969uo\\u0100;r\\u020e\\u020dh;\\u61b3\\u0180acg\\u314e\\u315f\\u0f44l\\u0200;ips\\u0f78\\u3158\\u315b\\u109cn\\xe5\\u10bbar\\xf4\\u0fa9t;\\u65ad\\u0180ilr\\u3169\\u1023\\u316esht;\\u697d;\\uc000\\ud835\\udd2f\\u0100ao\\u3177\\u3186r\\u0100du\\u317d\\u317f\\xbb\\u047b\\u0100;l\\u1091\\u3184;\\u696c\\u0100;v\\u318b\\u318c\\u43c1;\\u43f1\\u0180gns\\u3195\\u31f9\\u31fcht\\u0300ahlrst\\u31a4\\u31b0\\u31c2\\u31d8\\u31e4\\u31eerrow\\u0100;t\\u0fdc\\u31ada\\xe9\\u30c8arpoon\\u0100du\\u31bb\\u31bfow\\xee\\u317ep\\xbb\\u1092eft\\u0100ah\\u31ca\\u31d0rrow\\xf3\\u0feaarpoon\\xf3\\u0551ightarrows;\\u61c9quigarro\\xf7\\u30cbhreetimes;\\u62ccg;\\u42daingdotse\\xf1\\u1f32\\u0180ahm\\u320d\\u3210\\u3213r\\xf2\\u0feaa\\xf2\\u0551;\\u600foust\\u0100;a\\u321e\\u321f\\u63b1che\\xbb\\u321fmid;\\u6aee\\u0200abpt\\u3232\\u323d\\u3240\\u3252\\u0100nr\\u3237\\u323ag;\\u67edr;\\u61fer\\xeb\\u1003\\u0180afl\\u3247\\u324a\\u324er;\\u6986;\\uc000\\ud835\\udd63us;\\u6a2eimes;\\u6a35\\u0100ap\\u325d\\u3267r\\u0100;g\\u3263\\u3264\\u4029t;\\u6994olint;\\u6a12ar\\xf2\\u31e3\\u0200achq\\u327b\\u3280\\u10bc\\u3285quo;\\u603ar;\\uc000\\ud835\\udcc7\\u0100bu\\u30fb\\u328ao\\u0100;r\\u0214\\u0213\\u0180hir\\u3297\\u329b\\u32a0re\\xe5\\u31f8mes;\\u62cai\\u0200;efl\\u32aa\\u1059\\u1821\\u32ab\\u65b9tri;\\u69celuhar;\\u6968;\\u611e\\u0d61\\u32d5\\u32db\\u32df\\u332c\\u3338\\u3371\\0\\u337a\\u33a4\\0\\0\\u33ec\\u33f0\\0\\u3428\\u3448\\u345a\\u34ad\\u34b1\\u34ca\\u34f1\\0\\u3616\\0\\0\\u3633cute;\\u415bqu\\xef\\u27ba\\u0500;Eaceinpsy\\u11ed\\u32f3\\u32f5\\u32ff\\u3302\\u330b\\u330f\\u331f\\u3326\\u3329;\\u6ab4\\u01f0\\u32fa\\0\\u32fc;\\u6ab8on;\\u4161u\\xe5\\u11fe\\u0100;d\\u11f3\\u3307il;\\u415frc;\\u415d\\u0180Eas\\u3316\\u3318\\u331b;\\u6ab6p;\\u6abaim;\\u62e9olint;\\u6a13i\\xed\\u1204;\\u4441ot\\u0180;be\\u3334\\u1d47\\u3335\\u62c5;\\u6a66\\u0380Aacmstx\\u3346\\u334a\\u3357\\u335b\\u335e\\u3363\\u336drr;\\u61d8r\\u0100hr\\u3350\\u3352\\xeb\\u2228\\u0100;o\\u0a36\\u0a34t\\u803b\\xa7\\u40a7i;\\u403bwar;\\u6929m\\u0100in\\u3369\\xf0nu\\xf3\\xf1t;\\u6736r\\u0100;o\\u3376\\u2055\\uc000\\ud835\\udd30\\u0200acoy\\u3382\\u3386\\u3391\\u33a0rp;\\u666f\\u0100hy\\u338b\\u338fcy;\\u4449;\\u4448rt\\u026d\\u3399\\0\\0\\u339ci\\xe4\\u1464ara\\xec\\u2e6f\\u803b\\xad\\u40ad\\u0100gm\\u33a8\\u33b4ma\\u0180;fv\\u33b1\\u33b2\\u33b2\\u43c3;\\u43c2\\u0400;deglnpr\\u12ab\\u33c5\\u33c9\\u33ce\\u33d6\\u33de\\u33e1\\u33e6ot;\\u6a6a\\u0100;q\\u12b1\\u12b0\\u0100;E\\u33d3\\u33d4\\u6a9e;\\u6aa0\\u0100;E\\u33db\\u33dc\\u6a9d;\\u6a9fe;\\u6246lus;\\u6a24arr;\\u6972ar\\xf2\\u113d\\u0200aeit\\u33f8\\u3408\\u340f\\u3417\\u0100ls\\u33fd\\u3404lsetm\\xe9\\u336ahp;\\u6a33parsl;\\u69e4\\u0100dl\\u1463\\u3414e;\\u6323\\u0100;e\\u341c\\u341d\\u6aaa\\u0100;s\\u3422\\u3423\\u6aac;\\uc000\\u2aac\\ufe00\\u0180flp\\u342e\\u3433\\u3442tcy;\\u444c\\u0100;b\\u3438\\u3439\\u402f\\u0100;a\\u343e\\u343f\\u69c4r;\\u633ff;\\uc000\\ud835\\udd64a\\u0100dr\\u344d\\u0402es\\u0100;u\\u3454\\u3455\\u6660it\\xbb\\u3455\\u0180csu\\u3460\\u3479\\u349f\\u0100au\\u3465\\u346fp\\u0100;s\\u1188\\u346b;\\uc000\\u2293\\ufe00p\\u0100;s\\u11b4\\u3475;\\uc000\\u2294\\ufe00u\\u0100bp\\u347f\\u348f\\u0180;es\\u1197\\u119c\\u3486et\\u0100;e\\u1197\\u348d\\xf1\\u119d\\u0180;es\\u11a8\\u11ad\\u3496et\\u0100;e\\u11a8\\u349d\\xf1\\u11ae\\u0180;af\\u117b\\u34a6\\u05b0r\\u0165\\u34ab\\u05b1\\xbb\\u117car\\xf2\\u1148\\u0200cemt\\u34b9\\u34be\\u34c2\\u34c5r;\\uc000\\ud835\\udcc8tm\\xee\\xf1i\\xec\\u3415ar\\xe6\\u11be\\u0100ar\\u34ce\\u34d5r\\u0100;f\\u34d4\\u17bf\\u6606\\u0100an\\u34da\\u34edight\\u0100ep\\u34e3\\u34eapsilo\\xee\\u1ee0h\\xe9\\u2eafs\\xbb\\u2852\\u0280bcmnp\\u34fb\\u355e\\u1209\\u358b\\u358e\\u0480;Edemnprs\\u350e\\u350f\\u3511\\u3515\\u351e\\u3523\\u352c\\u3531\\u3536\\u6282;\\u6ac5ot;\\u6abd\\u0100;d\\u11da\\u351aot;\\u6ac3ult;\\u6ac1\\u0100Ee\\u3528\\u352a;\\u6acb;\\u628alus;\\u6abfarr;\\u6979\\u0180eiu\\u353d\\u3552\\u3555t\\u0180;en\\u350e\\u3545\\u354bq\\u0100;q\\u11da\\u350feq\\u0100;q\\u352b\\u3528m;\\u6ac7\\u0100bp\\u355a\\u355c;\\u6ad5;\\u6ad3c\\u0300;acens\\u11ed\\u356c\\u3572\\u3579\\u357b\\u3326ppro\\xf8\\u32faurlye\\xf1\\u11fe\\xf1\\u11f3\\u0180aes\\u3582\\u3588\\u331bppro\\xf8\\u331aq\\xf1\\u3317g;\\u666a\\u0680123;Edehlmnps\\u35a9\\u35ac\\u35af\\u121c\\u35b2\\u35b4\\u35c0\\u35c9\\u35d5\\u35da\\u35df\\u35e8\\u35ed\\u803b\\xb9\\u40b9\\u803b\\xb2\\u40b2\\u803b\\xb3\\u40b3;\\u6ac6\\u0100os\\u35b9\\u35bct;\\u6abeub;\\u6ad8\\u0100;d\\u1222\\u35c5ot;\\u6ac4s\\u0100ou\\u35cf\\u35d2l;\\u67c9b;\\u6ad7arr;\\u697bult;\\u6ac2\\u0100Ee\\u35e4\\u35e6;\\u6acc;\\u628blus;\\u6ac0\\u0180eiu\\u35f4\\u3609\\u360ct\\u0180;en\\u121c\\u35fc\\u3602q\\u0100;q\\u1222\\u35b2eq\\u0100;q\\u35e7\\u35e4m;\\u6ac8\\u0100bp\\u3611\\u3613;\\u6ad4;\\u6ad6\\u0180Aan\\u361c\\u3620\\u362drr;\\u61d9r\\u0100hr\\u3626\\u3628\\xeb\\u222e\\u0100;o\\u0a2b\\u0a29war;\\u692alig\\u803b\\xdf\\u40df\\u0be1\\u3651\\u365d\\u3660\\u12ce\\u3673\\u3679\\0\\u367e\\u36c2\\0\\0\\0\\0\\0\\u36db\\u3703\\0\\u3709\\u376c\\0\\0\\0\\u3787\\u0272\\u3656\\0\\0\\u365bget;\\u6316;\\u43c4r\\xeb\\u0e5f\\u0180aey\\u3666\\u366b\\u3670ron;\\u4165dil;\\u4163;\\u4442lrec;\\u6315r;\\uc000\\ud835\\udd31\\u0200eiko\\u3686\\u369d\\u36b5\\u36bc\\u01f2\\u368b\\0\\u3691e\\u01004f\\u1284\\u1281a\\u0180;sv\\u3698\\u3699\\u369b\\u43b8ym;\\u43d1\\u0100cn\\u36a2\\u36b2k\\u0100as\\u36a8\\u36aeppro\\xf8\\u12c1im\\xbb\\u12acs\\xf0\\u129e\\u0100as\\u36ba\\u36ae\\xf0\\u12c1rn\\u803b\\xfe\\u40fe\\u01ec\\u031f\\u36c6\\u22e7es\\u8180\\xd7;bd\\u36cf\\u36d0\\u36d8\\u40d7\\u0100;a\\u190f\\u36d5r;\\u6a31;\\u6a30\\u0180eps\\u36e1\\u36e3\\u3700\\xe1\\u2a4d\\u0200;bcf\\u0486\\u36ec\\u36f0\\u36f4ot;\\u6336ir;\\u6af1\\u0100;o\\u36f9\\u36fc\\uc000\\ud835\\udd65rk;\\u6ada\\xe1\\u3362rime;\\u6034\\u0180aip\\u370f\\u3712\\u3764d\\xe5\\u1248\\u0380adempst\\u3721\\u374d\\u3740\\u3751\\u3757\\u375c\\u375fngle\\u0280;dlqr\\u3730\\u3731\\u3736\\u3740\\u3742\\u65b5own\\xbb\\u1dbbeft\\u0100;e\\u2800\\u373e\\xf1\\u092e;\\u625cight\\u0100;e\\u32aa\\u374b\\xf1\\u105aot;\\u65ecinus;\\u6a3alus;\\u6a39b;\\u69cdime;\\u6a3bezium;\\u63e2\\u0180cht\\u3772\\u377d\\u3781\\u0100ry\\u3777\\u377b;\\uc000\\ud835\\udcc9;\\u4446cy;\\u445brok;\\u4167\\u0100io\\u378b\\u378ex\\xf4\\u1777head\\u0100lr\\u3797\\u37a0eftarro\\xf7\\u084fightarrow\\xbb\\u0f5d\\u0900AHabcdfghlmoprstuw\\u37d0\\u37d3\\u37d7\\u37e4\\u37f0\\u37fc\\u380e\\u381c\\u3823\\u3834\\u3851\\u385d\\u386b\\u38a9\\u38cc\\u38d2\\u38ea\\u38f6r\\xf2\\u03edar;\\u6963\\u0100cr\\u37dc\\u37e2ute\\u803b\\xfa\\u40fa\\xf2\\u1150r\\u01e3\\u37ea\\0\\u37edy;\\u445eve;\\u416d\\u0100iy\\u37f5\\u37farc\\u803b\\xfb\\u40fb;\\u4443\\u0180abh\\u3803\\u3806\\u380br\\xf2\\u13adlac;\\u4171a\\xf2\\u13c3\\u0100ir\\u3813\\u3818sht;\\u697e;\\uc000\\ud835\\udd32rave\\u803b\\xf9\\u40f9\\u0161\\u3827\\u3831r\\u0100lr\\u382c\\u382e\\xbb\\u0957\\xbb\\u1083lk;\\u6580\\u0100ct\\u3839\\u384d\\u026f\\u383f\\0\\0\\u384arn\\u0100;e\\u3845\\u3846\\u631cr\\xbb\\u3846op;\\u630fri;\\u65f8\\u0100al\\u3856\\u385acr;\\u416b\\u80bb\\xa8\\u0349\\u0100gp\\u3862\\u3866on;\\u4173f;\\uc000\\ud835\\udd66\\u0300adhlsu\\u114b\\u3878\\u387d\\u1372\\u3891\\u38a0own\\xe1\\u13b3arpoon\\u0100lr\\u3888\\u388cef\\xf4\\u382digh\\xf4\\u382fi\\u0180;hl\\u3899\\u389a\\u389c\\u43c5\\xbb\\u13faon\\xbb\\u389aparrows;\\u61c8\\u0180cit\\u38b0\\u38c4\\u38c8\\u026f\\u38b6\\0\\0\\u38c1rn\\u0100;e\\u38bc\\u38bd\\u631dr\\xbb\\u38bdop;\\u630eng;\\u416fri;\\u65f9cr;\\uc000\\ud835\\udcca\\u0180dir\\u38d9\\u38dd\\u38e2ot;\\u62f0lde;\\u4169i\\u0100;f\\u3730\\u38e8\\xbb\\u1813\\u0100am\\u38ef\\u38f2r\\xf2\\u38a8l\\u803b\\xfc\\u40fcangle;\\u69a7\\u0780ABDacdeflnoprsz\\u391c\\u391f\\u3929\\u392d\\u39b5\\u39b8\\u39bd\\u39df\\u39e4\\u39e8\\u39f3\\u39f9\\u39fd\\u3a01\\u3a20r\\xf2\\u03f7ar\\u0100;v\\u3926\\u3927\\u6ae8;\\u6ae9as\\xe8\\u03e1\\u0100nr\\u3932\\u3937grt;\\u699c\\u0380eknprst\\u34e3\\u3946\\u394b\\u3952\\u395d\\u3964\\u3996app\\xe1\\u2415othin\\xe7\\u1e96\\u0180hir\\u34eb\\u2ec8\\u3959op\\xf4\\u2fb5\\u0100;h\\u13b7\\u3962\\xef\\u318d\\u0100iu\\u3969\\u396dgm\\xe1\\u33b3\\u0100bp\\u3972\\u3984setneq\\u0100;q\\u397d\\u3980\\uc000\\u228a\\ufe00;\\uc000\\u2acb\\ufe00setneq\\u0100;q\\u398f\\u3992\\uc000\\u228b\\ufe00;\\uc000\\u2acc\\ufe00\\u0100hr\\u399b\\u399fet\\xe1\\u369ciangle\\u0100lr\\u39aa\\u39afeft\\xbb\\u0925ight\\xbb\\u1051y;\\u4432ash\\xbb\\u1036\\u0180elr\\u39c4\\u39d2\\u39d7\\u0180;be\\u2dea\\u39cb\\u39cfar;\\u62bbq;\\u625alip;\\u62ee\\u0100bt\\u39dc\\u1468a\\xf2\\u1469r;\\uc000\\ud835\\udd33tr\\xe9\\u39aesu\\u0100bp\\u39ef\\u39f1\\xbb\\u0d1c\\xbb\\u0d59pf;\\uc000\\ud835\\udd67ro\\xf0\\u0efbtr\\xe9\\u39b4\\u0100cu\\u3a06\\u3a0br;\\uc000\\ud835\\udccb\\u0100bp\\u3a10\\u3a18n\\u0100Ee\\u3980\\u3a16\\xbb\\u397en\\u0100Ee\\u3992\\u3a1e\\xbb\\u3990igzag;\\u699a\\u0380cefoprs\\u3a36\\u3a3b\\u3a56\\u3a5b\\u3a54\\u3a61\\u3a6airc;\\u4175\\u0100di\\u3a40\\u3a51\\u0100bg\\u3a45\\u3a49ar;\\u6a5fe\\u0100;q\\u15fa\\u3a4f;\\u6259erp;\\u6118r;\\uc000\\ud835\\udd34pf;\\uc000\\ud835\\udd68\\u0100;e\\u1479\\u3a66at\\xe8\\u1479cr;\\uc000\\ud835\\udccc\\u0ae3\\u178e\\u3a87\\0\\u3a8b\\0\\u3a90\\u3a9b\\0\\0\\u3a9d\\u3aa8\\u3aab\\u3aaf\\0\\0\\u3ac3\\u3ace\\0\\u3ad8\\u17dc\\u17dftr\\xe9\\u17d1r;\\uc000\\ud835\\udd35\\u0100Aa\\u3a94\\u3a97r\\xf2\\u03c3r\\xf2\\u09f6;\\u43be\\u0100Aa\\u3aa1\\u3aa4r\\xf2\\u03b8r\\xf2\\u09eba\\xf0\\u2713is;\\u62fb\\u0180dpt\\u17a4\\u3ab5\\u3abe\\u0100fl\\u3aba\\u17a9;\\uc000\\ud835\\udd69im\\xe5\\u17b2\\u0100Aa\\u3ac7\\u3acar\\xf2\\u03cer\\xf2\\u0a01\\u0100cq\\u3ad2\\u17b8r;\\uc000\\ud835\\udccd\\u0100pt\\u17d6\\u3adcr\\xe9\\u17d4\\u0400acefiosu\\u3af0\\u3afd\\u3b08\\u3b0c\\u3b11\\u3b15\\u3b1b\\u3b21c\\u0100uy\\u3af6\\u3afbte\\u803b\\xfd\\u40fd;\\u444f\\u0100iy\\u3b02\\u3b06rc;\\u4177;\\u444bn\\u803b\\xa5\\u40a5r;\\uc000\\ud835\\udd36cy;\\u4457pf;\\uc000\\ud835\\udd6acr;\\uc000\\ud835\\udcce\\u0100cm\\u3b26\\u3b29y;\\u444el\\u803b\\xff\\u40ff\\u0500acdefhiosw\\u3b42\\u3b48\\u3b54\\u3b58\\u3b64\\u3b69\\u3b6d\\u3b74\\u3b7a\\u3b80cute;\\u417a\\u0100ay\\u3b4d\\u3b52ron;\\u417e;\\u4437ot;\\u417c\\u0100et\\u3b5d\\u3b61tr\\xe6\\u155fa;\\u43b6r;\\uc000\\ud835\\udd37cy;\\u4436grarr;\\u61ddpf;\\uc000\\ud835\\udd6bcr;\\uc000\\ud835\\udccf\\u0100jn\\u3b85\\u3b87;\\u600dj;\\u600c\"\n    .split(\"\")\n    .map((c) => c.charCodeAt(0)));\n//# sourceMappingURL=decode-data-html.js.map","// Generated using scripts/write-decode-map.ts\nexport default new Uint16Array(\n// prettier-ignore\n\"\\u0200aglq\\t\\x15\\x18\\x1b\\u026d\\x0f\\0\\0\\x12p;\\u4026os;\\u4027t;\\u403et;\\u403cuot;\\u4022\"\n    .split(\"\")\n    .map((c) => c.charCodeAt(0)));\n//# sourceMappingURL=decode-data-xml.js.map","// Adapted from https://github.com/mathiasbynens/he/blob/36afe179392226cf1b6ccdb16ebbb7a5a844d93a/src/he.js#L106-L134\nvar _a;\nconst decodeMap = new Map([\n    [0, 65533],\n    // C1 Unicode control character reference replacements\n    [128, 8364],\n    [130, 8218],\n    [131, 402],\n    [132, 8222],\n    [133, 8230],\n    [134, 8224],\n    [135, 8225],\n    [136, 710],\n    [137, 8240],\n    [138, 352],\n    [139, 8249],\n    [140, 338],\n    [142, 381],\n    [145, 8216],\n    [146, 8217],\n    [147, 8220],\n    [148, 8221],\n    [149, 8226],\n    [150, 8211],\n    [151, 8212],\n    [152, 732],\n    [153, 8482],\n    [154, 353],\n    [155, 8250],\n    [156, 339],\n    [158, 382],\n    [159, 376],\n]);\n/**\n * Polyfill for `String.fromCodePoint`. It is used to create a string from a Unicode code point.\n */\nexport const fromCodePoint = \n// eslint-disable-next-line @typescript-eslint/no-unnecessary-condition, node/no-unsupported-features/es-builtins\n(_a = String.fromCodePoint) !== null && _a !== void 0 ? _a : function (codePoint) {\n    let output = \"\";\n    if (codePoint > 0xffff) {\n        codePoint -= 0x10000;\n        output += String.fromCharCode(((codePoint >>> 10) & 0x3ff) | 0xd800);\n        codePoint = 0xdc00 | (codePoint & 0x3ff);\n    }\n    output += String.fromCharCode(codePoint);\n    return output;\n};\n/**\n * Replace the given code point with a replacement character if it is a\n * surrogate or is outside the valid range. Otherwise return the code\n * point unchanged.\n */\nexport function replaceCodePoint(codePoint) {\n    var _a;\n    if ((codePoint >= 0xd800 && codePoint <= 0xdfff) || codePoint > 0x10ffff) {\n        return 0xfffd;\n    }\n    return (_a = decodeMap.get(codePoint)) !== null && _a !== void 0 ? _a : codePoint;\n}\n/**\n * Replace the code point if relevant, then convert it to a string.\n *\n * @deprecated Use `fromCodePoint(replaceCodePoint(codePoint))` instead.\n * @param codePoint The code point to decode.\n * @returns The decoded code point.\n */\nexport default function decodeCodePoint(codePoint) {\n    return fromCodePoint(replaceCodePoint(codePoint));\n}\n//# sourceMappingURL=decode_codepoint.js.map","import htmlDecodeTree from \"./generated/decode-data-html.js\";\nimport xmlDecodeTree from \"./generated/decode-data-xml.js\";\nimport decodeCodePoint, { replaceCodePoint, fromCodePoint, } from \"./decode_codepoint.js\";\n// Re-export for use by eg. htmlparser2\nexport { htmlDecodeTree, xmlDecodeTree, decodeCodePoint };\nexport { replaceCodePoint, fromCodePoint } from \"./decode_codepoint.js\";\nvar CharCodes;\n(function (CharCodes) {\n    CharCodes[CharCodes[\"NUM\"] = 35] = \"NUM\";\n    CharCodes[CharCodes[\"SEMI\"] = 59] = \"SEMI\";\n    CharCodes[CharCodes[\"EQUALS\"] = 61] = \"EQUALS\";\n    CharCodes[CharCodes[\"ZERO\"] = 48] = \"ZERO\";\n    CharCodes[CharCodes[\"NINE\"] = 57] = \"NINE\";\n    CharCodes[CharCodes[\"LOWER_A\"] = 97] = \"LOWER_A\";\n    CharCodes[CharCodes[\"LOWER_F\"] = 102] = \"LOWER_F\";\n    CharCodes[CharCodes[\"LOWER_X\"] = 120] = \"LOWER_X\";\n    CharCodes[CharCodes[\"LOWER_Z\"] = 122] = \"LOWER_Z\";\n    CharCodes[CharCodes[\"UPPER_A\"] = 65] = \"UPPER_A\";\n    CharCodes[CharCodes[\"UPPER_F\"] = 70] = \"UPPER_F\";\n    CharCodes[CharCodes[\"UPPER_Z\"] = 90] = \"UPPER_Z\";\n})(CharCodes || (CharCodes = {}));\n/** Bit that needs to be set to convert an upper case ASCII character to lower case */\nconst TO_LOWER_BIT = 0b100000;\nexport var BinTrieFlags;\n(function (BinTrieFlags) {\n    BinTrieFlags[BinTrieFlags[\"VALUE_LENGTH\"] = 49152] = \"VALUE_LENGTH\";\n    BinTrieFlags[BinTrieFlags[\"BRANCH_LENGTH\"] = 16256] = \"BRANCH_LENGTH\";\n    BinTrieFlags[BinTrieFlags[\"JUMP_TABLE\"] = 127] = \"JUMP_TABLE\";\n})(BinTrieFlags || (BinTrieFlags = {}));\nfunction isNumber(code) {\n    return code >= CharCodes.ZERO && code <= CharCodes.NINE;\n}\nfunction isHexadecimalCharacter(code) {\n    return ((code >= CharCodes.UPPER_A && code <= CharCodes.UPPER_F) ||\n        (code >= CharCodes.LOWER_A && code <= CharCodes.LOWER_F));\n}\nfunction isAsciiAlphaNumeric(code) {\n    return ((code >= CharCodes.UPPER_A && code <= CharCodes.UPPER_Z) ||\n        (code >= CharCodes.LOWER_A && code <= CharCodes.LOWER_Z) ||\n        isNumber(code));\n}\n/**\n * Checks if the given character is a valid end character for an entity in an attribute.\n *\n * Attribute values that aren't terminated properly aren't parsed, and shouldn't lead to a parser error.\n * See the example in https://html.spec.whatwg.org/multipage/parsing.html#named-character-reference-state\n */\nfunction isEntityInAttributeInvalidEnd(code) {\n    return code === CharCodes.EQUALS || isAsciiAlphaNumeric(code);\n}\nvar EntityDecoderState;\n(function (EntityDecoderState) {\n    EntityDecoderState[EntityDecoderState[\"EntityStart\"] = 0] = \"EntityStart\";\n    EntityDecoderState[EntityDecoderState[\"NumericStart\"] = 1] = \"NumericStart\";\n    EntityDecoderState[EntityDecoderState[\"NumericDecimal\"] = 2] = \"NumericDecimal\";\n    EntityDecoderState[EntityDecoderState[\"NumericHex\"] = 3] = \"NumericHex\";\n    EntityDecoderState[EntityDecoderState[\"NamedEntity\"] = 4] = \"NamedEntity\";\n})(EntityDecoderState || (EntityDecoderState = {}));\nexport var DecodingMode;\n(function (DecodingMode) {\n    /** Entities in text nodes that can end with any character. */\n    DecodingMode[DecodingMode[\"Legacy\"] = 0] = \"Legacy\";\n    /** Only allow entities terminated with a semicolon. */\n    DecodingMode[DecodingMode[\"Strict\"] = 1] = \"Strict\";\n    /** Entities in attributes have limitations on ending characters. */\n    DecodingMode[DecodingMode[\"Attribute\"] = 2] = \"Attribute\";\n})(DecodingMode || (DecodingMode = {}));\n/**\n * Token decoder with support of writing partial entities.\n */\nexport class EntityDecoder {\n    constructor(\n    /** The tree used to decode entities. */\n    decodeTree, \n    /**\n     * The function that is called when a codepoint is decoded.\n     *\n     * For multi-byte named entities, this will be called multiple times,\n     * with the second codepoint, and the same `consumed` value.\n     *\n     * @param codepoint The decoded codepoint.\n     * @param consumed The number of bytes consumed by the decoder.\n     */\n    emitCodePoint, \n    /** An object that is used to produce errors. */\n    errors) {\n        this.decodeTree = decodeTree;\n        this.emitCodePoint = emitCodePoint;\n        this.errors = errors;\n        /** The current state of the decoder. */\n        this.state = EntityDecoderState.EntityStart;\n        /** Characters that were consumed while parsing an entity. */\n        this.consumed = 1;\n        /**\n         * The result of the entity.\n         *\n         * Either the result index of a numeric entity, or the codepoint of a\n         * numeric entity.\n         */\n        this.result = 0;\n        /** The current index in the decode tree. */\n        this.treeIndex = 0;\n        /** The number of characters that were consumed in excess. */\n        this.excess = 1;\n        /** The mode in which the decoder is operating. */\n        this.decodeMode = DecodingMode.Strict;\n    }\n    /** Resets the instance to make it reusable. */\n    startEntity(decodeMode) {\n        this.decodeMode = decodeMode;\n        this.state = EntityDecoderState.EntityStart;\n        this.result = 0;\n        this.treeIndex = 0;\n        this.excess = 1;\n        this.consumed = 1;\n    }\n    /**\n     * Write an entity to the decoder. This can be called multiple times with partial entities.\n     * If the entity is incomplete, the decoder will return -1.\n     *\n     * Mirrors the implementation of `getDecoder`, but with the ability to stop decoding if the\n     * entity is incomplete, and resume when the next string is written.\n     *\n     * @param string The string containing the entity (or a continuation of the entity).\n     * @param offset The offset at which the entity begins. Should be 0 if this is not the first call.\n     * @returns The number of characters that were consumed, or -1 if the entity is incomplete.\n     */\n    write(str, offset) {\n        switch (this.state) {\n            case EntityDecoderState.EntityStart: {\n                if (str.charCodeAt(offset) === CharCodes.NUM) {\n                    this.state = EntityDecoderState.NumericStart;\n                    this.consumed += 1;\n                    return this.stateNumericStart(str, offset + 1);\n                }\n                this.state = EntityDecoderState.NamedEntity;\n                return this.stateNamedEntity(str, offset);\n            }\n            case EntityDecoderState.NumericStart: {\n                return this.stateNumericStart(str, offset);\n            }\n            case EntityDecoderState.NumericDecimal: {\n                return this.stateNumericDecimal(str, offset);\n            }\n            case EntityDecoderState.NumericHex: {\n                return this.stateNumericHex(str, offset);\n            }\n            case EntityDecoderState.NamedEntity: {\n                return this.stateNamedEntity(str, offset);\n            }\n        }\n    }\n    /**\n     * Switches between the numeric decimal and hexadecimal states.\n     *\n     * Equivalent to the `Numeric character reference state` in the HTML spec.\n     *\n     * @param str The string containing the entity (or a continuation of the entity).\n     * @param offset The current offset.\n     * @returns The number of characters that were consumed, or -1 if the entity is incomplete.\n     */\n    stateNumericStart(str, offset) {\n        if (offset >= str.length) {\n            return -1;\n        }\n        if ((str.charCodeAt(offset) | TO_LOWER_BIT) === CharCodes.LOWER_X) {\n            this.state = EntityDecoderState.NumericHex;\n            this.consumed += 1;\n            return this.stateNumericHex(str, offset + 1);\n        }\n        this.state = EntityDecoderState.NumericDecimal;\n        return this.stateNumericDecimal(str, offset);\n    }\n    addToNumericResult(str, start, end, base) {\n        if (start !== end) {\n            const digitCount = end - start;\n            this.result =\n                this.result * Math.pow(base, digitCount) +\n                    parseInt(str.substr(start, digitCount), base);\n            this.consumed += digitCount;\n        }\n    }\n    /**\n     * Parses a hexadecimal numeric entity.\n     *\n     * Equivalent to the `Hexademical character reference state` in the HTML spec.\n     *\n     * @param str The string containing the entity (or a continuation of the entity).\n     * @param offset The current offset.\n     * @returns The number of characters that were consumed, or -1 if the entity is incomplete.\n     */\n    stateNumericHex(str, offset) {\n        const startIdx = offset;\n        while (offset < str.length) {\n            const char = str.charCodeAt(offset);\n            if (isNumber(char) || isHexadecimalCharacter(char)) {\n                offset += 1;\n            }\n            else {\n                this.addToNumericResult(str, startIdx, offset, 16);\n                return this.emitNumericEntity(char, 3);\n            }\n        }\n        this.addToNumericResult(str, startIdx, offset, 16);\n        return -1;\n    }\n    /**\n     * Parses a decimal numeric entity.\n     *\n     * Equivalent to the `Decimal character reference state` in the HTML spec.\n     *\n     * @param str The string containing the entity (or a continuation of the entity).\n     * @param offset The current offset.\n     * @returns The number of characters that were consumed, or -1 if the entity is incomplete.\n     */\n    stateNumericDecimal(str, offset) {\n        const startIdx = offset;\n        while (offset < str.length) {\n            const char = str.charCodeAt(offset);\n            if (isNumber(char)) {\n                offset += 1;\n            }\n            else {\n                this.addToNumericResult(str, startIdx, offset, 10);\n                return this.emitNumericEntity(char, 2);\n            }\n        }\n        this.addToNumericResult(str, startIdx, offset, 10);\n        return -1;\n    }\n    /**\n     * Validate and emit a numeric entity.\n     *\n     * Implements the logic from the `Hexademical character reference start\n     * state` and `Numeric character reference end state` in the HTML spec.\n     *\n     * @param lastCp The last code point of the entity. Used to see if the\n     *               entity was terminated with a semicolon.\n     * @param expectedLength The minimum number of characters that should be\n     *                       consumed. Used to validate that at least one digit\n     *                       was consumed.\n     * @returns The number of characters that were consumed.\n     */\n    emitNumericEntity(lastCp, expectedLength) {\n        var _a;\n        // Ensure we consumed at least one digit.\n        if (this.consumed <= expectedLength) {\n            (_a = this.errors) === null || _a === void 0 ? void 0 : _a.absenceOfDigitsInNumericCharacterReference(this.consumed);\n            return 0;\n        }\n        // Figure out if this is a legit end of the entity\n        if (lastCp === CharCodes.SEMI) {\n            this.consumed += 1;\n        }\n        else if (this.decodeMode === DecodingMode.Strict) {\n            return 0;\n        }\n        this.emitCodePoint(replaceCodePoint(this.result), this.consumed);\n        if (this.errors) {\n            if (lastCp !== CharCodes.SEMI) {\n                this.errors.missingSemicolonAfterCharacterReference();\n            }\n            this.errors.validateNumericCharacterReference(this.result);\n        }\n        return this.consumed;\n    }\n    /**\n     * Parses a named entity.\n     *\n     * Equivalent to the `Named character reference state` in the HTML spec.\n     *\n     * @param str The string containing the entity (or a continuation of the entity).\n     * @param offset The current offset.\n     * @returns The number of characters that were consumed, or -1 if the entity is incomplete.\n     */\n    stateNamedEntity(str, offset) {\n        const { decodeTree } = this;\n        let current = decodeTree[this.treeIndex];\n        // The mask is the number of bytes of the value, including the current byte.\n        let valueLength = (current & BinTrieFlags.VALUE_LENGTH) >> 14;\n        for (; offset < str.length; offset++, this.excess++) {\n            const char = str.charCodeAt(offset);\n            this.treeIndex = determineBranch(decodeTree, current, this.treeIndex + Math.max(1, valueLength), char);\n            if (this.treeIndex < 0) {\n                return this.result === 0 ||\n                    // If we are parsing an attribute\n                    (this.decodeMode === DecodingMode.Attribute &&\n                        // We shouldn't have consumed any characters after the entity,\n                        (valueLength === 0 ||\n                            // And there should be no invalid characters.\n                            isEntityInAttributeInvalidEnd(char)))\n                    ? 0\n                    : this.emitNotTerminatedNamedEntity();\n            }\n            current = decodeTree[this.treeIndex];\n            valueLength = (current & BinTrieFlags.VALUE_LENGTH) >> 14;\n            // If the branch is a value, store it and continue\n            if (valueLength !== 0) {\n                // If the entity is terminated by a semicolon, we are done.\n                if (char === CharCodes.SEMI) {\n                    return this.emitNamedEntityData(this.treeIndex, valueLength, this.consumed + this.excess);\n                }\n                // If we encounter a non-terminated (legacy) entity while parsing strictly, then ignore it.\n                if (this.decodeMode !== DecodingMode.Strict) {\n                    this.result = this.treeIndex;\n                    this.consumed += this.excess;\n                    this.excess = 0;\n                }\n            }\n        }\n        return -1;\n    }\n    /**\n     * Emit a named entity that was not terminated with a semicolon.\n     *\n     * @returns The number of characters consumed.\n     */\n    emitNotTerminatedNamedEntity() {\n        var _a;\n        const { result, decodeTree } = this;\n        const valueLength = (decodeTree[result] & BinTrieFlags.VALUE_LENGTH) >> 14;\n        this.emitNamedEntityData(result, valueLength, this.consumed);\n        (_a = this.errors) === null || _a === void 0 ? void 0 : _a.missingSemicolonAfterCharacterReference();\n        return this.consumed;\n    }\n    /**\n     * Emit a named entity.\n     *\n     * @param result The index of the entity in the decode tree.\n     * @param valueLength The number of bytes in the entity.\n     * @param consumed The number of characters consumed.\n     *\n     * @returns The number of characters consumed.\n     */\n    emitNamedEntityData(result, valueLength, consumed) {\n        const { decodeTree } = this;\n        this.emitCodePoint(valueLength === 1\n            ? decodeTree[result] & ~BinTrieFlags.VALUE_LENGTH\n            : decodeTree[result + 1], consumed);\n        if (valueLength === 3) {\n            // For multi-byte values, we need to emit the second byte.\n            this.emitCodePoint(decodeTree[result + 2], consumed);\n        }\n        return consumed;\n    }\n    /**\n     * Signal to the parser that the end of the input was reached.\n     *\n     * Remaining data will be emitted and relevant errors will be produced.\n     *\n     * @returns The number of characters consumed.\n     */\n    end() {\n        var _a;\n        switch (this.state) {\n            case EntityDecoderState.NamedEntity: {\n                // Emit a named entity if we have one.\n                return this.result !== 0 &&\n                    (this.decodeMode !== DecodingMode.Attribute ||\n                        this.result === this.treeIndex)\n                    ? this.emitNotTerminatedNamedEntity()\n                    : 0;\n            }\n            // Otherwise, emit a numeric entity if we have one.\n            case EntityDecoderState.NumericDecimal: {\n                return this.emitNumericEntity(0, 2);\n            }\n            case EntityDecoderState.NumericHex: {\n                return this.emitNumericEntity(0, 3);\n            }\n            case EntityDecoderState.NumericStart: {\n                (_a = this.errors) === null || _a === void 0 ? void 0 : _a.absenceOfDigitsInNumericCharacterReference(this.consumed);\n                return 0;\n            }\n            case EntityDecoderState.EntityStart: {\n                // Return 0 if we have no entity.\n                return 0;\n            }\n        }\n    }\n}\n/**\n * Creates a function that decodes entities in a string.\n *\n * @param decodeTree The decode tree.\n * @returns A function that decodes entities in a string.\n */\nfunction getDecoder(decodeTree) {\n    let ret = \"\";\n    const decoder = new EntityDecoder(decodeTree, (str) => (ret += fromCodePoint(str)));\n    return function decodeWithTrie(str, decodeMode) {\n        let lastIndex = 0;\n        let offset = 0;\n        while ((offset = str.indexOf(\"&\", offset)) >= 0) {\n            ret += str.slice(lastIndex, offset);\n            decoder.startEntity(decodeMode);\n            const len = decoder.write(str, \n            // Skip the \"&\"\n            offset + 1);\n            if (len < 0) {\n                lastIndex = offset + decoder.end();\n                break;\n            }\n            lastIndex = offset + len;\n            // If `len` is 0, skip the current `&` and continue.\n            offset = len === 0 ? lastIndex + 1 : lastIndex;\n        }\n        const result = ret + str.slice(lastIndex);\n        // Make sure we don't keep a reference to the final string.\n        ret = \"\";\n        return result;\n    };\n}\n/**\n * Determines the branch of the current node that is taken given the current\n * character. This function is used to traverse the trie.\n *\n * @param decodeTree The trie.\n * @param current The current node.\n * @param nodeIdx The index right after the current node and its value.\n * @param char The current character.\n * @returns The index of the next node, or -1 if no branch is taken.\n */\nexport function determineBranch(decodeTree, current, nodeIdx, char) {\n    const branchCount = (current & BinTrieFlags.BRANCH_LENGTH) >> 7;\n    const jumpOffset = current & BinTrieFlags.JUMP_TABLE;\n    // Case 1: Single branch encoded in jump offset\n    if (branchCount === 0) {\n        return jumpOffset !== 0 && char === jumpOffset ? nodeIdx : -1;\n    }\n    // Case 2: Multiple branches encoded in jump table\n    if (jumpOffset) {\n        const value = char - jumpOffset;\n        return value < 0 || value >= branchCount\n            ? -1\n            : decodeTree[nodeIdx + value] - 1;\n    }\n    // Case 3: Multiple branches encoded in dictionary\n    // Binary search for the character.\n    let lo = nodeIdx;\n    let hi = lo + branchCount - 1;\n    while (lo <= hi) {\n        const mid = (lo + hi) >>> 1;\n        const midVal = decodeTree[mid];\n        if (midVal < char) {\n            lo = mid + 1;\n        }\n        else if (midVal > char) {\n            hi = mid - 1;\n        }\n        else {\n            return decodeTree[mid + branchCount];\n        }\n    }\n    return -1;\n}\nconst htmlDecoder = getDecoder(htmlDecodeTree);\nconst xmlDecoder = getDecoder(xmlDecodeTree);\n/**\n * Decodes an HTML string.\n *\n * @param str The string to decode.\n * @param mode The decoding mode.\n * @returns The decoded string.\n */\nexport function decodeHTML(str, mode = DecodingMode.Legacy) {\n    return htmlDecoder(str, mode);\n}\n/**\n * Decodes an HTML string in an attribute.\n *\n * @param str The string to decode.\n * @returns The decoded string.\n */\nexport function decodeHTMLAttribute(str) {\n    return htmlDecoder(str, DecodingMode.Attribute);\n}\n/**\n * Decodes an HTML string, requiring all entities to be terminated by a semicolon.\n *\n * @param str The string to decode.\n * @returns The decoded string.\n */\nexport function decodeHTMLStrict(str) {\n    return htmlDecoder(str, DecodingMode.Strict);\n}\n/**\n * Decodes an XML string, requiring all entities to be terminated by a semicolon.\n *\n * @param str The string to decode.\n * @returns The decoded string.\n */\nexport function decodeXML(str) {\n    return xmlDecoder(str, DecodingMode.Strict);\n}\n//# sourceMappingURL=decode.js.map","// Utilities\n//\n\nimport * as mdurl from 'mdurl'\nimport * as ucmicro from 'uc.micro'\nimport { decodeHTML } from 'entities'\n\nfunction _class (obj) { return Object.prototype.toString.call(obj) }\n\nfunction isString (obj) { return _class(obj) === '[object String]' }\n\nconst _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  const 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\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    const surrogate1 = 0xd800 + (c >> 10)\n    const surrogate2 = 0xdc00 + (c & 0x3ff)\n\n    return String.fromCharCode(surrogate1, surrogate2)\n  }\n  return String.fromCharCode(c)\n}\n\nconst UNESCAPE_MD_RE  = /\\\\([!\"#$%&'()*+,\\-./:;<=>?@[\\\\\\]^_`{|}~])/g\nconst ENTITY_RE       = /&([a-z#][a-z0-9]{1,31});/gi\nconst UNESCAPE_ALL_RE = new RegExp(UNESCAPE_MD_RE.source + '|' + ENTITY_RE.source, 'gi')\n\nconst DIGITAL_ENTITY_TEST_RE = /^#((?:x[a-f0-9]{1,8}|[0-9]{1,8}))$/i\n\nfunction replaceEntityPattern (match, name) {\n  if (name.charCodeAt(0) === 0x23/* # */ && DIGITAL_ENTITY_TEST_RE.test(name)) {\n    const code = name[1].toLowerCase() === 'x'\n      ? parseInt(name.slice(2), 16)\n      : parseInt(name.slice(1), 10)\n\n    if (isValidEntityCode(code)) {\n      return fromCodePoint(code)\n    }\n\n    return match\n  }\n\n  const decoded = decodeHTML(match)\n  if (decoded !== match) {\n    return decoded\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\nconst HTML_ESCAPE_TEST_RE = /[&<>\"]/\nconst HTML_ESCAPE_REPLACE_RE = /[&<>\"]/g\nconst 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\nconst REGEXP_ESCAPE_RE = /[.?*+^$[\\]\\\\(){}|-]/g\n\nfunction escapeRE (str) {\n  return str.replace(REGEXP_ESCAPE_RE, '\\\\$&')\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/* eslint-disable max-len */\n\n// Currently without astral characters support.\nfunction isPunctChar (ch) {\n  return ucmicro.P.test(ch) || ucmicro.S.test(ch)\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  // İ, ϴ, ẞ, Ω, K, Å - 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// 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//\nconst lib = { mdurl, ucmicro }\n\nexport {\n  lib,\n  assign,\n  isString,\n  has,\n  unescapeMd,\n  unescapeAll,\n  isValidEntityCode,\n  fromCodePoint,\n  escapeHtml,\n  arrayReplaceAt,\n  isSpace,\n  isWhiteSpace,\n  isMdAsciiPunct,\n  isPunctChar,\n  escapeRE,\n  normalizeReference\n}\n","// Parse link destination\n//\n\nimport { unescapeAll } from '../common/utils.mjs'\n\nexport default function parseLinkDestination (str, start, max) {\n  let code\n  let pos = start\n\n  const result = {\n    ok: false,\n    pos: 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 === 0x3C /* < */) { 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  let 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      if (str.charCodeAt(pos + 1) === 0x20) { break }\n      pos += 2\n      continue\n    }\n\n    if (code === 0x28 /* ( */) {\n      level++\n      if (level > 32) { return result }\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.pos = pos\n  result.ok = true\n  return result\n}\n","// Parse link label\n//\n// this function assumes that first character (\"[\") already matches;\n// returns the end of the label\n//\n\nexport default function parseLinkLabel (state, start, disableNested) {\n  let level, found, marker, prevPos\n\n  const max = state.posMax\n  const 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  let labelEnd = -1\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 title\n//\n\nimport { unescapeAll } from '../common/utils.mjs'\n\n// Parse link title within `str` in [start, max] range,\n// or continue previous parsing if `prev_state` is defined (equal to result of last execution).\n//\nexport default function parseLinkTitle (str, start, max, prev_state) {\n  let code\n  let pos = start\n\n  const state = {\n    // if `true`, this is a valid link title\n    ok: false,\n    // if `true`, this link can be continued on the next line\n    can_continue: false,\n    // if `ok`, it's the position of the first character after the closing marker\n    pos: 0,\n    // if `ok`, it's the unescaped title\n    str: '',\n    // expected closing marker character code\n    marker: 0\n  }\n\n  if (prev_state) {\n    // this is a continuation of a previous parseLinkTitle call on the next line,\n    // used in reference links only\n    state.str = prev_state.str\n    state.marker = prev_state.marker\n  } else {\n    if (pos >= max) { return state }\n\n    let marker = str.charCodeAt(pos)\n    if (marker !== 0x22 /* \" */ && marker !== 0x27 /* ' */ && marker !== 0x28 /* ( */) { return state }\n\n    start++\n    pos++\n\n    // if opening marker is \"(\", switch it to closing marker \")\"\n    if (marker === 0x28) { marker = 0x29 }\n\n    state.marker = marker\n  }\n\n  while (pos < max) {\n    code = str.charCodeAt(pos)\n    if (code === state.marker) {\n      state.pos = pos + 1\n      state.str += unescapeAll(str.slice(start, pos))\n      state.ok = true\n      return state\n    } else if (code === 0x28 /* ( */ && state.marker === 0x29 /* ) */) {\n      return state\n    } else if (code === 0x5C /* \\ */ && pos + 1 < max) {\n      pos++\n    }\n\n    pos++\n  }\n\n  // no closing marker found, but this link title may continue on the next line (for references)\n  state.can_continue = true\n  state.str += unescapeAll(str.slice(start, pos))\n  return state\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\nimport { assign, unescapeAll, escapeHtml } from './common/utils.mjs'\n\nconst default_rules = {}\n\ndefault_rules.code_inline = function (tokens, idx, options, env, slf) {\n  const token = tokens[idx]\n\n  return  '<code' + slf.renderAttrs(token) + '>' +\n          escapeHtml(token.content) +\n          '</code>'\n}\n\ndefault_rules.code_block = function (tokens, idx, options, env, slf) {\n  const token = tokens[idx]\n\n  return  '<pre' + slf.renderAttrs(token) + '><code>' +\n          escapeHtml(tokens[idx].content) +\n          '</code></pre>\\n'\n}\n\ndefault_rules.fence = function (tokens, idx, options, env, slf) {\n  const token = tokens[idx]\n  const info = token.info ? unescapeAll(token.info).trim() : ''\n  let langName = ''\n  let langAttrs = ''\n\n  if (info) {\n    const arr = info.split(/(\\s+)/g)\n    langName = arr[0]\n    langAttrs = arr.slice(2).join('')\n  }\n\n  let highlighted\n  if (options.highlight) {\n    highlighted = options.highlight(token.content, langName, langAttrs) || 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 .deepClone() for token and simplify this part, but\n  // now we prefer to keep things local.\n  if (info) {\n    const i = token.attrIndex('class')\n    const tmpAttrs = token.attrs ? token.attrs.slice() : []\n\n    if (i < 0) {\n      tmpAttrs.push(['class', options.langPrefix + langName])\n    } else {\n      tmpAttrs[i] = tmpAttrs[i].slice()\n      tmpAttrs[i][1] += ' ' + options.langPrefix + langName\n    }\n\n    // Fake token just to render attributes\n    const tmpToken = {\n      attrs: tmpAttrs\n    }\n\n    return `<pre><code${slf.renderAttrs(tmpToken)}>${highlighted}</code></pre>\\n`\n  }\n\n  return `<pre><code${slf.renderAttrs(token)}>${highlighted}</code></pre>\\n`\n}\n\ndefault_rules.image = function (tokens, idx, options, env, slf) {\n  const 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\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\ndefault_rules.text = function (tokens, idx /*, options, env */) {\n  return escapeHtml(tokens[idx].content)\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 * new Renderer()\n *\n * Creates new [[Renderer]] instance and fill [[Renderer#rules]] with defaults.\n **/\nfunction Renderer () {\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.mjs)\n   * for more details and examples.\n   **/\n  this.rules = assign({}, default_rules)\n}\n\n/**\n * Renderer.renderAttrs(token) -> String\n *\n * Render token attributes to string.\n **/\nRenderer.prototype.renderAttrs = function renderAttrs (token) {\n  let 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 * 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  const token = tokens[idx]\n  let result = ''\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  let needLf = false\n  if (token.block) {\n    needLf = true\n\n    if (token.nesting === 1) {\n      if (idx + 1 < tokens.length) {\n        const 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        } 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 * Renderer.renderInline(tokens, options, env) -> String\n * - tokens (Array): list on block tokens to render\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  let result = ''\n  const rules = this.rules\n\n  for (let i = 0, len = tokens.length; i < len; i++) {\n    const 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/** internal\n * Renderer.renderInlineAsText(tokens, options, env) -> String\n * - tokens (Array): list on block tokens to render\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  let result = ''\n\n  for (let i = 0, len = tokens.length; i < len; i++) {\n    switch (tokens[i].type) {\n      case 'text':\n        result += tokens[i].content\n        break\n      case 'image':\n        result += this.renderInlineAsText(tokens[i].children, options, env)\n        break\n      case 'html_inline':\n      case 'html_block':\n        result += tokens[i].content\n        break\n      case 'softbreak':\n      case 'hardbreak':\n        result += '\\n'\n        break\n      default:\n        // all other tokens are skipped\n    }\n  }\n\n  return result\n}\n\n/**\n * Renderer.render(tokens, options, env) -> String\n * - tokens (Array): list on block tokens to render\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  let result = ''\n  const rules = this.rules\n\n  for (let i = 0, len = tokens.length; i < len; i++) {\n    const 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[type](tokens, i, options, env, this)\n    } else {\n      result += this.renderToken(tokens, i, options, env)\n    }\n  }\n\n  return result\n}\n\nexport default Renderer\n","/**\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\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// Helper methods, should not be used directly\n\n// Find rule index by name\n//\nRuler.prototype.__find__ = function (name) {\n  for (let 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// Build rules lookup cache\n//\nRuler.prototype.__compile__ = function () {\n  const self = this\n  const 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 * 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  const index = this.__find__(name)\n  const 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 * 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  const index = this.__find__(beforeName)\n  const 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,\n    alt: opt.alt || []\n  })\n\n  this.__cache__ = null\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  const index = this.__find__(afterName)\n  const 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,\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  const opt = options || {}\n\n  this.__rules__.push({\n    name: ruleName,\n    enabled: true,\n    fn,\n    alt: opt.alt || []\n  })\n\n  this.__cache__ = null\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  const result = []\n\n  // Search by name and enable\n  list.forEach(function (name) {\n    const 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 * 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 * 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  const result = []\n\n  // Search by name and disable\n  list.forEach(function (name) {\n    const 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 * 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\nexport default Ruler\n","// Token class\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   * Additional information:\n   *\n   * - Info string for \"fence\" tokens\n   * - The value \"auto\" for autolink \"link_open\" and \"link_close\" tokens\n   * - The string value of the item marker for ordered-list \"list_item_open\" tokens\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 * Token.attrIndex(name) -> Number\n *\n * Search attribute index by name.\n **/\nToken.prototype.attrIndex = function attrIndex (name) {\n  if (!this.attrs) { return -1 }\n\n  const attrs = this.attrs\n\n  for (let i = 0, len = attrs.length; i < len; i++) {\n    if (attrs[i][0] === name) { return i }\n  }\n  return -1\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 * 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  const idx = this.attrIndex(name)\n  const attrData = [name, value]\n\n  if (idx < 0) {\n    this.attrPush(attrData)\n  } else {\n    this.attrs[idx] = attrData\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  const idx = this.attrIndex(name)\n  let value = null\n  if (idx >= 0) {\n    value = this.attrs[idx][1]\n  }\n  return value\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  const 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\nexport default Token\n","// Core state object\n//\n\nimport Token from '../token.mjs'\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\nexport default StateCore\n","// Normalize input string\n\n// https://spec.commonmark.org/0.29/#line-ending\nconst NEWLINES_RE  = /\\r\\n?|\\n/g\nconst NULL_RE      = /\\0/g\n\nexport default function normalize (state) {\n  let 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","// Replace link-like texts with link nodes.\n//\n// Currently restricted by `md.validateLink()` to http/https/ftp\n//\n\nimport { arrayReplaceAt } from '../common/utils.mjs'\n\nfunction isLinkOpen (str) {\n  return /^<a[>\\s]/i.test(str)\n}\nfunction isLinkClose (str) {\n  return /^<\\/a\\s*>/i.test(str)\n}\n\nexport default function linkify (state) {\n  const blockTokens = state.tokens\n\n  if (!state.md.options.linkify) { return }\n\n  for (let 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    let tokens = blockTokens[j].children\n\n    let 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 (let i = tokens.length - 1; i >= 0; i--) {\n      const 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        const text = currentToken.content\n        let links = state.md.linkify.match(text)\n\n        // Now split string to nodes\n        const nodes = []\n        let level = currentToken.level\n        let lastPos = 0\n\n        // forbid escape sequence at the start of the string,\n        // this avoids http\\://example.com/ from being linkified as\n        // http:<a href=\"//example.com/\">//example.com/</a>\n        if (links.length > 0 &&\n            links[0].index === 0 &&\n            i > 0 &&\n            tokens[i - 1].type === 'text_special') {\n          links = links.slice(1)\n        }\n\n        for (let ln = 0; ln < links.length; ln++) {\n          const url = links[ln].url\n          const fullUrl = state.md.normalizeLink(url)\n          if (!state.md.validateLink(fullUrl)) { continue }\n\n          let 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          const pos = links[ln].index\n\n          if (pos > lastPos) {\n            const token   = new state.Token('text', '', 0)\n            token.content = text.slice(lastPos, pos)\n            token.level   = level\n            nodes.push(token)\n          }\n\n          const token_o   = new state.Token('link_open', 'a', 1)\n          token_o.attrs   = [['href', fullUrl]]\n          token_o.level   = level++\n          token_o.markup  = 'linkify'\n          token_o.info    = 'auto'\n          nodes.push(token_o)\n\n          const token_t   = new state.Token('text', '', 0)\n          token_t.content = urlText\n          token_t.level   = level\n          nodes.push(token_t)\n\n          const token_c   = new state.Token('link_close', 'a', -1)\n          token_c.level   = --level\n          token_c.markup  = 'linkify'\n          token_c.info    = 'auto'\n          nodes.push(token_c)\n\n          lastPos = links[ln].lastIndex\n        }\n        if (lastPos < text.length) {\n          const 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// ... → … (also ?.... → ?.., !.... → !..)\n// ???????? → ???, !!!!! → !!!, `,,` → `,`\n// -- → &ndash;, --- → &mdash;\n//\n\n// TODO:\n// - fractionals 1/2, 1/4, 3/4 -> ½, ¼, ¾\n// - multiplications 2 x 4 -> 2 × 4\n\nconst RARE_RE = /\\+-|\\.\\.|\\?\\?\\?\\?|!!!!|,,|--/\n\n// Workaround for phantomjs - need regex without /g flag,\n// or root check will fail every second time\nconst SCOPED_ABBR_TEST_RE = /\\((c|tm|r)\\)/i\n\nconst SCOPED_ABBR_RE = /\\((c|tm|r)\\)/ig\nconst SCOPED_ABBR = {\n  c: '©',\n  r: '®',\n  tm: '™'\n}\n\nfunction replaceFn (match, name) {\n  return SCOPED_ABBR[name.toLowerCase()]\n}\n\nfunction replace_scoped (inlineTokens) {\n  let inside_autolink = 0\n\n  for (let i = inlineTokens.length - 1; i >= 0; i--) {\n    const 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  let inside_autolink = 0\n\n  for (let i = inlineTokens.length - 1; i >= 0; i--) {\n    const 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\nexport default function replace (state) {\n  let blkIdx\n\n  if (!state.md.options.typographer) { return }\n\n  for (blkIdx = state.tokens.length - 1; blkIdx >= 0; blkIdx--) {\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","// Convert straight quotation marks to typographic ones\n//\n\nimport { isWhiteSpace, isPunctChar, isMdAsciiPunct } from '../common/utils.mjs'\n\nconst QUOTE_TEST_RE = /['\"]/\nconst QUOTE_RE = /['\"]/g\nconst APOSTROPHE = '\\u2019' /* ’ */\n\nfunction replaceAt (str, index, ch) {\n  return str.slice(0, index) + ch + str.slice(index + 1)\n}\n\nfunction process_inlines (tokens, state) {\n  let j\n\n  const stack = []\n\n  for (let i = 0; i < tokens.length; i++) {\n    const token = tokens[i]\n\n    const 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    let text = token.content\n    let pos = 0\n    let 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      const t = QUOTE_RE.exec(text)\n      if (!t) { break }\n\n      let canOpen = true\n      let canClose = true\n      pos = t.index + 1\n      const isSingle = (t[0] === \"'\")\n\n      // Find previous character,\n      // default to space if it's the beginning of the line\n      //\n      let 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].content) continue // should skip all tokens except 'text', 'html_inline' or 'code_inline'\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      let 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].content) continue // should skip all tokens except 'text', 'html_inline' or 'code_inline'\n\n          nextChar = tokens[j].content.charCodeAt(0)\n          break\n        }\n      }\n\n      const isLastPunctChar = isMdAsciiPunct(lastChar) || isPunctChar(String.fromCharCode(lastChar))\n      const isNextPunctChar = isMdAsciiPunct(nextChar) || isPunctChar(String.fromCharCode(nextChar))\n\n      const isLastWhiteSpace = isWhiteSpace(lastChar)\n      const 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          let 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            let openQuote\n            let closeQuote\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\nexport default function smartquotes (state) {\n  /* eslint max-depth:0 */\n  if (!state.md.options.typographer) { return }\n\n  for (let blkIdx = state.tokens.length - 1; blkIdx >= 0; blkIdx--) {\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","/** internal\n * class Core\n *\n * Top-level rules executor. Glues block/inline parsers and does intermediate\n * transformations.\n **/\n\nimport Ruler from './ruler.mjs'\nimport StateCore from './rules_core/state_core.mjs'\n\nimport r_normalize from './rules_core/normalize.mjs'\nimport r_block from './rules_core/block.mjs'\nimport r_inline from './rules_core/inline.mjs'\nimport r_linkify from './rules_core/linkify.mjs'\nimport r_replacements from './rules_core/replacements.mjs'\nimport r_smartquotes from './rules_core/smartquotes.mjs'\nimport r_text_join from './rules_core/text_join.mjs'\n\nconst _rules = [\n  ['normalize',      r_normalize],\n  ['block',          r_block],\n  ['inline',         r_inline],\n  ['linkify',        r_linkify],\n  ['replacements',   r_replacements],\n  ['smartquotes',    r_smartquotes],\n  // `text_join` finds `text_special` tokens (for escape sequences)\n  // and joins them with the rest of the text\n  ['text_join',      r_text_join]\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 (let i = 0; i < _rules.length; i++) {\n    this.ruler.push(_rules[i][0], _rules[i][1])\n  }\n}\n\n/**\n * Core.process(state)\n *\n * Executes core chain rules.\n **/\nCore.prototype.process = function (state) {\n  const rules = this.ruler.getRules('')\n\n  for (let i = 0, l = rules.length; i < l; i++) {\n    rules[i](state)\n  }\n}\n\nCore.prototype.State = StateCore\n\nexport default Core\n","export default function block (state) {\n  let 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","export default function inline (state) {\n  const tokens = state.tokens\n\n  // Parse inlines\n  for (let i = 0, l = tokens.length; i < l; i++) {\n    const 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","// Join raw text tokens with the rest of the text\n//\n// This is set as a separate rule to provide an opportunity for plugins\n// to run text replacements after text join, but before escape join.\n//\n// For example, `\\:)` shouldn't be replaced with an emoji.\n//\n\nexport default function text_join (state) {\n  let curr, last\n  const blockTokens = state.tokens\n  const l = blockTokens.length\n\n  for (let j = 0; j < l; j++) {\n    if (blockTokens[j].type !== 'inline') continue\n\n    const tokens = blockTokens[j].children\n    const max = tokens.length\n\n    for (curr = 0; curr < max; curr++) {\n      if (tokens[curr].type === 'text_special') {\n        tokens[curr].type = 'text'\n      }\n    }\n\n    for (curr = last = 0; curr < max; curr++) {\n      if (tokens[curr].type === 'text' &&\n          curr + 1 < max &&\n          tokens[curr + 1].type === 'text') {\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}\n","// Parser state class\n\nimport Token from '../token.mjs'\nimport { isSpace } from '../common/utils.mjs'\n\nfunction StateBlock (src, md, env, tokens) {\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\n  // required block content indent (for example, if we are\n  // inside a list, it would be positioned after list marker)\n  this.blkIndent  = 0\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  // Create caches\n  // Generate markers.\n  const s = this.src\n\n  for (let start = 0, pos = 0, indent = 0, offset = 0, len = s.length, indent_found = false; pos < len; pos++) {\n    const 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  const 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 (let 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  for (let max = this.src.length; pos < max; pos++) {\n    const 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 (let 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  if (begin >= end) {\n    return ''\n  }\n\n  const queue = new Array(end - begin)\n\n  for (let i = 0, line = begin; line < end; line++, i++) {\n    let lineIndent = 0\n    const lineStart = this.bMarks[line]\n    let first = lineStart\n    let last\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      const 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\nexport default StateBlock\n","// GFM table, https://github.github.com/gfm/#tables-extension-\n\nimport { isSpace } from '../common/utils.mjs'\n\n// Limit the amount of empty autocompleted cells in a table,\n// see https://github.com/markdown-it/markdown-it/issues/1000,\n//\n// Both pulldown-cmark and commonmark-hs limit the number of cells this way to ~200k.\n// We set it to 65k, which can expand user input by a factor of x370\n// (256x256 square is 1.8kB expanded into 650kB).\nconst MAX_AUTOCOMPLETED_CELLS = 0x10000\n\nfunction getLine (state, line) {\n  const pos = state.bMarks[line] + state.tShift[line]\n  const max = state.eMarks[line]\n\n  return state.src.slice(pos, max)\n}\n\nfunction escapedSplit (str) {\n  const result = []\n  const max = str.length\n\n  let pos = 0\n  let ch = str.charCodeAt(pos)\n  let isEscaped = false\n  let lastPos = 0\n  let current = ''\n\n  while (pos < max) {\n    if (ch === 0x7c/* | */) {\n      if (!isEscaped) {\n        // pipe separating cells, '|'\n        result.push(current + str.substring(lastPos, pos))\n        current = ''\n        lastPos = pos + 1\n      } else {\n        // escaped pipe, '\\|'\n        current += str.substring(lastPos, pos - 1)\n        lastPos = pos\n      }\n    }\n\n    isEscaped = (ch === 0x5c/* \\ */)\n    pos++\n\n    ch = str.charCodeAt(pos)\n  }\n\n  result.push(current + str.substring(lastPos))\n\n  return result\n}\n\nexport default function table (state, startLine, endLine, silent) {\n  // should have at least two lines\n  if (startLine + 2 > endLine) { return false }\n\n  let 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  let pos = state.bMarks[nextLine] + state.tShift[nextLine]\n  if (pos >= state.eMarks[nextLine]) { return false }\n\n  const firstCh = state.src.charCodeAt(pos++)\n  if (firstCh !== 0x7C/* | */ && firstCh !== 0x2D/* - */ && firstCh !== 0x3A/* : */) { return false }\n\n  if (pos >= state.eMarks[nextLine]) { return false }\n\n  const secondCh = state.src.charCodeAt(pos++)\n  if (secondCh !== 0x7C/* | */ && secondCh !== 0x2D/* - */ && secondCh !== 0x3A/* : */ && !isSpace(secondCh)) {\n    return false\n  }\n\n  // if first character is '-', then second character must not be a space\n  // (due to parsing ambiguity with list)\n  if (firstCh === 0x2D/* - */ && isSpace(secondCh)) { return false }\n\n  while (pos < state.eMarks[nextLine]) {\n    const ch = state.src.charCodeAt(pos)\n\n    if (ch !== 0x7C/* | */ && ch !== 0x2D/* - */ && ch !== 0x3A/* : */ && !isSpace(ch)) { return false }\n\n    pos++\n  }\n\n  let lineText = getLine(state, startLine + 1)\n  let columns = lineText.split('|')\n  const aligns = []\n  for (let i = 0; i < columns.length; i++) {\n    const 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)\n  if (columns.length && columns[0] === '') columns.shift()\n  if (columns.length && columns[columns.length - 1] === '') columns.pop()\n\n  // header row will define an amount of columns in the entire table,\n  // and align row should be exactly the same (the rest of the rows can differ)\n  const columnCount = columns.length\n  if (columnCount === 0 || columnCount !== aligns.length) { return false }\n\n  if (silent) { return true }\n\n  const oldParentType = state.parentType\n  state.parentType = 'table'\n\n  // use 'blockquote' lists for termination because it's\n  // the most similar to tables\n  const terminatorRules = state.md.block.ruler.getRules('blockquote')\n\n  const token_to = state.push('table_open', 'table', 1)\n  const tableLines = [startLine, 0]\n  token_to.map = tableLines\n\n  const token_tho = state.push('thead_open', 'thead', 1)\n  token_tho.map = [startLine, startLine + 1]\n\n  const token_htro = state.push('tr_open', 'tr', 1)\n  token_htro.map = [startLine, startLine + 1]\n\n  for (let i = 0; i < columns.length; i++) {\n    const token_ho = state.push('th_open', 'th', 1)\n    if (aligns[i]) {\n      token_ho.attrs  = [['style', 'text-align:' + aligns[i]]]\n    }\n\n    const token_il = state.push('inline', '', 0)\n    token_il.content  = columns[i].trim()\n    token_il.children = []\n\n    state.push('th_close', 'th', -1)\n  }\n\n  state.push('tr_close', 'tr', -1)\n  state.push('thead_close', 'thead', -1)\n\n  let tbodyLines\n  let autocompletedCells = 0\n\n  for (nextLine = startLine + 2; nextLine < endLine; nextLine++) {\n    if (state.sCount[nextLine] < state.blkIndent) { break }\n\n    let terminate = false\n    for (let 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) { break }\n    lineText = getLine(state, nextLine).trim()\n    if (!lineText) { break }\n    if (state.sCount[nextLine] - state.blkIndent >= 4) { break }\n    columns = escapedSplit(lineText)\n    if (columns.length && columns[0] === '') columns.shift()\n    if (columns.length && columns[columns.length - 1] === '') columns.pop()\n\n    // note: autocomplete count can be negative if user specifies more columns than header,\n    // but that does not affect intended use (which is limiting expansion)\n    autocompletedCells += columnCount - columns.length\n    if (autocompletedCells > MAX_AUTOCOMPLETED_CELLS) { break }\n\n    if (nextLine === startLine + 2) {\n      const token_tbo = state.push('tbody_open', 'tbody', 1)\n      token_tbo.map = tbodyLines = [startLine + 2, 0]\n    }\n\n    const token_tro = state.push('tr_open', 'tr', 1)\n    token_tro.map = [nextLine, nextLine + 1]\n\n    for (let i = 0; i < columnCount; i++) {\n      const token_tdo = state.push('td_open', 'td', 1)\n      if (aligns[i]) {\n        token_tdo.attrs  = [['style', 'text-align:' + aligns[i]]]\n      }\n\n      const token_il = state.push('inline', '', 0)\n      token_il.content  = columns[i] ? columns[i].trim() : ''\n      token_il.children = []\n\n      state.push('td_close', 'td', -1)\n    }\n    state.push('tr_close', 'tr', -1)\n  }\n\n  if (tbodyLines) {\n    state.push('tbody_close', 'tbody', -1)\n    tbodyLines[1] = nextLine\n  }\n\n  state.push('table_close', 'table', -1)\n  tableLines[1] = nextLine\n\n  state.parentType = oldParentType\n  state.line = nextLine\n  return true\n}\n","// Lists\n\nimport { isSpace } from '../common/utils.mjs'\n\n// Search `[-+*][\\n ]`, returns next pos after marker on success\n// or -1 on fail.\nfunction skipBulletListMarker (state, startLine) {\n  const max = state.eMarks[startLine]\n  let pos = state.bMarks[startLine] + state.tShift[startLine]\n\n  const 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    const 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  const start = state.bMarks[startLine] + state.tShift[startLine]\n  const max = state.eMarks[startLine]\n  let pos = start\n\n  // List marker should have at least 2 chars (digit + dot)\n  if (pos + 1 >= max) { return -1 }\n\n  let 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      // 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  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  const level = state.level + 2\n\n  for (let 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\nexport default function list (state, startLine, endLine, silent) {\n  let max, pos, start, token\n  let nextLine = startLine\n  let tight = true\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  // 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[nextLine] - state.listIndent >= 4 &&\n      state.sCount[nextLine] < state.blkIndent) {\n    return false\n  }\n\n  let isTerminatingParagraph = false\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.sCount[nextLine] >= state.blkIndent) {\n      isTerminatingParagraph = true\n    }\n  }\n\n  // Detect list type and position after marker\n  let isOrdered\n  let markerValue\n  let posAfterMarker\n  if ((posAfterMarker = skipOrderedListMarker(state, nextLine)) >= 0) {\n    isOrdered = true\n    start = state.bMarks[nextLine] + state.tShift[nextLine]\n    markerValue = Number(state.src.slice(start, posAfterMarker - 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  } else if ((posAfterMarker = skipBulletListMarker(state, nextLine)) >= 0) {\n    isOrdered = false\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[nextLine]) return false\n  }\n\n  // For validation mode we can terminate immediately\n  if (silent) { return true }\n\n  // We should terminate list on style change. Remember first one to compare.\n  const markerCharCode = state.src.charCodeAt(posAfterMarker - 1)\n\n  // Start list\n  const 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  } else {\n    token       = state.push('bullet_list_open', 'ul', 1)\n  }\n\n  const listLines = [nextLine, 0]\n  token.map    = listLines\n  token.markup = String.fromCharCode(markerCharCode)\n\n  //\n  // Iterate list items\n  //\n\n  let prevEmptyEnd = false\n  const terminatorRules = state.md.block.ruler.getRules('list')\n\n  const oldParentType = state.parentType\n  state.parentType = 'list'\n\n  while (nextLine < endLine) {\n    pos = posAfterMarker\n    max = state.eMarks[nextLine]\n\n    const initial = state.sCount[nextLine] + posAfterMarker - (state.bMarks[nextLine] + state.tShift[nextLine])\n    let offset = initial\n\n    while (pos < max) {\n      const 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    const contentStart = pos\n    let indentAfterMarker\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    const 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    const itemLines = [nextLine, 0]\n    token.map    = itemLines\n    if (isOrdered) {\n      token.info = state.src.slice(start, posAfterMarker - 1)\n    }\n\n    // change current state, then restore it after parser subcall\n    const oldTight = state.tight\n    const oldTShift = state.tShift[nextLine]\n    const oldSCount = state.sCount[nextLine]\n\n    //  - example list\n    // ^ listIndent position will be here\n    //   ^ blkIndent position will be here\n    //\n    const oldListIndent = state.listIndent\n    state.listIndent = state.blkIndent\n    state.blkIndent = indent\n\n    state.tight = true\n    state.tShift[nextLine] = contentStart - state.bMarks[nextLine]\n    state.sCount[nextLine] = offset\n\n    if (contentStart >= max && state.isEmpty(nextLine + 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, nextLine, 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 - nextLine) > 1 && state.isEmpty(state.line - 1)\n\n    state.blkIndent = state.listIndent\n    state.listIndent = oldListIndent\n    state.tShift[nextLine] = oldTShift\n    state.sCount[nextLine] = oldSCount\n    state.tight = oldTight\n\n    token        = state.push('list_item_close', 'li', -1)\n    token.markup = String.fromCharCode(markerCharCode)\n\n    nextLine = state.line\n    itemLines[1] = nextLine\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[nextLine] - state.blkIndent >= 4) { break }\n\n    // fail if terminating block found\n    let terminate = false\n    for (let 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      start = state.bMarks[nextLine] + state.tShift[nextLine]\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","// List of valid html blocks names, according to commonmark spec\n// https://spec.commonmark.org/0.30/#html-blocks\n\nexport default [\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  'nav',\n  'noframes',\n  'ol',\n  'optgroup',\n  'option',\n  'p',\n  'param',\n  'search',\n  'section',\n  'summary',\n  'table',\n  'tbody',\n  'td',\n  'tfoot',\n  'th',\n  'thead',\n  'title',\n  'tr',\n  'track',\n  'ul'\n]\n","// Regexps to match html elements\n\nconst attr_name     = '[a-zA-Z_:][a-zA-Z0-9:._-]*'\n\nconst unquoted      = '[^\"\\'=<>`\\\\x00-\\\\x20]+'\nconst single_quoted = \"'[^']*'\"\nconst double_quoted = '\"[^\"]*\"'\n\nconst attr_value  = '(?:' + unquoted + '|' + single_quoted + '|' + double_quoted + ')'\n\nconst attribute   = '(?:\\\\s+' + attr_name + '(?:\\\\s*=\\\\s*' + attr_value + ')?)'\n\nconst open_tag    = '<[A-Za-z][A-Za-z0-9\\\\-]*' + attribute + '*\\\\s*\\\\/?>'\n\nconst close_tag   = '<\\\\/[A-Za-z][A-Za-z0-9\\\\-]*\\\\s*>'\nconst comment     = '<!---?>|<!--(?:[^-]|-[^-]|--[^>])*-->'\nconst processing  = '<[?][\\\\s\\\\S]*?[?]>'\nconst declaration = '<![A-Za-z][^>]*>'\nconst cdata       = '<!\\\\[CDATA\\\\[[\\\\s\\\\S]*?\\\\]\\\\]>'\n\nconst HTML_TAG_RE = new RegExp('^(?:' + open_tag + '|' + close_tag + '|' + comment +\n                        '|' + processing + '|' + declaration + '|' + cdata + ')')\nconst HTML_OPEN_CLOSE_TAG_RE = new RegExp('^(?:' + open_tag + '|' + close_tag + ')')\n\nexport { HTML_TAG_RE, HTML_OPEN_CLOSE_TAG_RE }\n","// HTML block\n\nimport block_names from '../common/html_blocks.mjs'\nimport { HTML_OPEN_CLOSE_TAG_RE } from '../common/html_re.mjs'\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//\nconst HTML_SEQUENCES = [\n  [/^<(script|pre|style|textarea)(?=(\\s|>|$))/i, /<\\/(script|pre|style|textarea)>/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\nexport default function html_block (state, startLine, endLine, silent) {\n  let pos = state.bMarks[startLine] + state.tShift[startLine]\n  let 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  let lineText = state.src.slice(pos, max)\n\n  let i = 0\n  for (; i < HTML_SEQUENCES.length; i++) {\n    if (HTML_SEQUENCES[i][0].test(lineText)) { break }\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  let 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  const 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","/** internal\n * class ParserBlock\n *\n * Block-level tokenizer.\n **/\n\nimport Ruler from './ruler.mjs'\nimport StateBlock from './rules_block/state_block.mjs'\n\nimport r_table from './rules_block/table.mjs'\nimport r_code from './rules_block/code.mjs'\nimport r_fence from './rules_block/fence.mjs'\nimport r_blockquote from './rules_block/blockquote.mjs'\nimport r_hr from './rules_block/hr.mjs'\nimport r_list from './rules_block/list.mjs'\nimport r_reference from './rules_block/reference.mjs'\nimport r_html_block from './rules_block/html_block.mjs'\nimport r_heading from './rules_block/heading.mjs'\nimport r_lheading from './rules_block/lheading.mjs'\nimport r_paragraph from './rules_block/paragraph.mjs'\n\nconst _rules = [\n  // First 2 params - rule name & source. Secondary array - list of rules,\n  // which can be terminated by this one.\n  ['table',      r_table,      ['paragraph', 'reference']],\n  ['code',       r_code],\n  ['fence',      r_fence,      ['paragraph', 'reference', 'blockquote', 'list']],\n  ['blockquote', r_blockquote, ['paragraph', 'reference', 'blockquote', 'list']],\n  ['hr',         r_hr,         ['paragraph', 'reference', 'blockquote', 'list']],\n  ['list',       r_list,       ['paragraph', 'reference', 'blockquote']],\n  ['reference',  r_reference],\n  ['html_block', r_html_block, ['paragraph', 'reference', 'blockquote']],\n  ['heading',    r_heading,    ['paragraph', 'reference', 'blockquote']],\n  ['lheading',   r_lheading],\n  ['paragraph',  r_paragraph]\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 (let 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// Generate tokens for input range\n//\nParserBlock.prototype.tokenize = function (state, startLine, endLine) {\n  const rules = this.ruler.getRules('')\n  const len = rules.length\n  const maxNesting = state.md.options.maxNesting\n  let line = startLine\n  let hasEmptyLines = false\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    const prevLine = state.line\n    let ok = false\n\n    for (let i = 0; i < len; i++) {\n      ok = rules[i](state, line, endLine, false)\n      if (ok) {\n        if (prevLine >= state.line) {\n          throw new Error(\"block rule didn't increment state.line\")\n        }\n        break\n      }\n    }\n\n    // this can only happen if user disables paragraph rule\n    if (!ok) throw new Error('none of the block rules matched')\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 * 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  if (!src) { return }\n\n  const state = new this.State(src, md, env, outTokens)\n\n  this.tokenize(state, state.line, state.lineMax)\n}\n\nParserBlock.prototype.State = StateBlock\n\nexport default ParserBlock\n","// Code block (4 spaces padded)\n\nexport default function code (state, startLine, endLine/*, silent */) {\n  if (state.sCount[startLine] - state.blkIndent < 4) { return false }\n\n  let nextLine = startLine + 1\n  let last = nextLine\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  const token   = state.push('code_block', 'code', 0)\n  token.content = state.getLines(startLine, last, 4 + state.blkIndent, false) + '\\n'\n  token.map     = [startLine, state.line]\n\n  return true\n}\n","// fences (``` lang, ~~~ lang)\n\nexport default function fence (state, startLine, endLine, silent) {\n  let pos = state.bMarks[startLine] + state.tShift[startLine]\n  let 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  const marker = state.src.charCodeAt(pos)\n\n  if (marker !== 0x7E/* ~ */ && marker !== 0x60 /* ` */) {\n    return false\n  }\n\n  // scan marker length\n  let mem = pos\n  pos = state.skipChars(pos, marker)\n\n  let len = pos - mem\n\n  if (len < 3) { return false }\n\n  const markup = state.src.slice(mem, pos)\n  const 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  let nextLine = startLine\n  let haveEndMarker = false\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  const 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\nimport { isSpace } from '../common/utils.mjs'\n\nexport default function blockquote (state, startLine, endLine, silent) {\n  let pos = state.bMarks[startLine] + state.tShift[startLine]\n  let max = state.eMarks[startLine]\n\n  const oldLineMax = state.lineMax\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  const oldBMarks  = []\n  const oldBSCount = []\n  const oldSCount  = []\n  const oldTShift  = []\n\n  const terminatorRules = state.md.block.ruler.getRules('blockquote')\n\n  const oldParentType = state.parentType\n  state.parentType = 'blockquote'\n  let lastLineEmpty = false\n  let nextLine\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; 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    const isOutdented = state.sCount[nextLine] < state.blkIndent\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/* > */ && !isOutdented) {\n      // This line is inside the blockquote.\n\n      // set offset past spaces and \">\"\n      let initial = state.sCount[nextLine] + 1\n      let spaceAfterMarker\n      let adjustTab\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        adjustTab = false\n        spaceAfterMarker = true\n      } else if (state.src.charCodeAt(pos) === 0x09 /* tab */) {\n        spaceAfterMarker = true\n\n        if ((state.bsCount[nextLine] + initial) % 4 === 3) {\n          // '  >\\t  test '\n          //       ^ -- position start of line here (tab has width===1)\n          pos++\n          initial++\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      let offset = initial\n      oldBMarks.push(state.bMarks[nextLine])\n      state.bMarks[nextLine] = pos\n\n      while (pos < max) {\n        const 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    let terminate = false\n    for (let 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  const oldIndent = state.blkIndent\n  state.blkIndent = 0\n\n  const token_o  = state.push('blockquote_open', 'blockquote', 1)\n  token_o.markup = '>'\n  const lines = [startLine, 0]\n  token_o.map    = lines\n\n  state.md.block.tokenize(state, startLine, nextLine)\n\n  const token_c  = state.push('blockquote_close', 'blockquote', -1)\n  token_c.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 (let 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\nimport { isSpace } from '../common/utils.mjs'\n\nexport default function hr (state, startLine, endLine, silent) {\n  const max = state.eMarks[startLine]\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  let pos = state.bMarks[startLine] + state.tShift[startLine]\n  const 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  let cnt = 1\n  while (pos < max) {\n    const 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  const 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","import { isSpace, normalizeReference } from '../common/utils.mjs'\n\nexport default function reference (state, startLine, _endLine, silent) {\n  let pos = state.bMarks[startLine] + state.tShift[startLine]\n  let max = state.eMarks[startLine]\n  let 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  function getNextLine (nextLine) {\n    const endLine = state.lineMax\n\n    if (nextLine >= endLine || state.isEmpty(nextLine)) {\n      // empty line or end of input\n      return null\n    }\n\n    let isContinuation = false\n\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) { isContinuation = true }\n\n    // quirk for blockquotes, this line should already be checked by that rule\n    if (state.sCount[nextLine] < 0) { isContinuation = true }\n\n    if (!isContinuation) {\n      const terminatorRules = state.md.block.ruler.getRules('reference')\n      const oldParentType = state.parentType\n      state.parentType = 'reference'\n\n      // Some tags can terminate paragraph without empty line.\n      let terminate = false\n      for (let 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      state.parentType = oldParentType\n      if (terminate) {\n        // terminated by another block\n        return null\n      }\n    }\n\n    const pos = state.bMarks[nextLine] + state.tShift[nextLine]\n    const max = state.eMarks[nextLine]\n\n    // max + 1 explicitly includes the newline\n    return state.src.slice(pos, max + 1)\n  }\n\n  let str = state.src.slice(pos, max + 1)\n\n  max = str.length\n  let labelEnd = -1\n\n  for (pos = 1; pos < max; pos++) {\n    const 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      const lineContent = getNextLine(nextLine)\n      if (lineContent !== null) {\n        str += lineContent\n        max = str.length\n        nextLine++\n      }\n    } else if (ch === 0x5C /* \\ */) {\n      pos++\n      if (pos < max && str.charCodeAt(pos) === 0x0A) {\n        const lineContent = getNextLine(nextLine)\n        if (lineContent !== null) {\n          str += lineContent\n          max = str.length\n          nextLine++\n        }\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    const ch = str.charCodeAt(pos)\n    if (ch === 0x0A) {\n      const lineContent = getNextLine(nextLine)\n      if (lineContent !== null) {\n        str += lineContent\n        max = str.length\n        nextLine++\n      }\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  const destRes = state.md.helpers.parseLinkDestination(str, pos, max)\n  if (!destRes.ok) { return false }\n\n  const href = state.md.normalizeLink(destRes.str)\n  if (!state.md.validateLink(href)) { return false }\n\n  pos = destRes.pos\n\n  // save cursor state, we could require to rollback later\n  const destEndPos = pos\n  const destEndLineNo = nextLine\n\n  // [label]:   destination   'title'\n  //                       ^^^ skipping those spaces\n  const start = pos\n  for (; pos < max; pos++) {\n    const ch = str.charCodeAt(pos)\n    if (ch === 0x0A) {\n      const lineContent = getNextLine(nextLine)\n      if (lineContent !== null) {\n        str += lineContent\n        max = str.length\n        nextLine++\n      }\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  let titleRes = state.md.helpers.parseLinkTitle(str, pos, max)\n  while (titleRes.can_continue) {\n    const lineContent = getNextLine(nextLine)\n    if (lineContent === null) break\n    str += lineContent\n    pos = max\n    max = str.length\n    nextLine++\n    titleRes = state.md.helpers.parseLinkTitle(str, pos, max, titleRes)\n  }\n  let title\n\n  if (pos < max && start !== pos && titleRes.ok) {\n    title = titleRes.str\n    pos = titleRes.pos\n  } else {\n    title = ''\n    pos = destEndPos\n    nextLine = destEndLineNo\n  }\n\n  // skip trailing spaces until the rest of the line\n  while (pos < max) {\n    const 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      nextLine = destEndLineNo\n      while (pos < max) {\n        const 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  const 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, href }\n  }\n\n  state.line = nextLine\n  return true\n}\n","// heading (#, ##, ...)\n\nimport { isSpace } from '../common/utils.mjs'\n\nexport default function heading (state, startLine, endLine, silent) {\n  let pos = state.bMarks[startLine] + state.tShift[startLine]\n  let 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  let ch  = state.src.charCodeAt(pos)\n\n  if (ch !== 0x23/* # */ || pos >= max) { return false }\n\n  // count heading level\n  let 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  const 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  const token_o  = state.push('heading_open', 'h' + String(level), 1)\n  token_o.markup = '########'.slice(0, level)\n  token_o.map    = [startLine, state.line]\n\n  const token_i    = state.push('inline', '', 0)\n  token_i.content  = state.src.slice(pos, max).trim()\n  token_i.map      = [startLine, state.line]\n  token_i.children = []\n\n  const token_c  = state.push('heading_close', 'h' + String(level), -1)\n  token_c.markup = '########'.slice(0, level)\n\n  return true\n}\n","// lheading (---, ===)\n\nexport default function lheading (state, startLine, endLine/*, silent */) {\n  const 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  const oldParentType = state.parentType\n  state.parentType = 'paragraph' // use paragraph to match terminatorRules\n\n  // jump line-by-line until empty one or EOF\n  let level = 0\n  let marker\n  let nextLine = startLine + 1\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    //\n    // Check for underline in setext header\n    //\n    if (state.sCount[nextLine] >= state.blkIndent) {\n      let pos = state.bMarks[nextLine] + state.tShift[nextLine]\n      const 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    let terminate = false\n    for (let 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  const content = state.getLines(startLine, nextLine, state.blkIndent, false).trim()\n\n  state.line = nextLine + 1\n\n  const token_o    = state.push('heading_open', 'h' + String(level), 1)\n  token_o.markup   = String.fromCharCode(marker)\n  token_o.map      = [startLine, state.line]\n\n  const token_i    = state.push('inline', '', 0)\n  token_i.content  = content\n  token_i.map      = [startLine, state.line - 1]\n  token_i.children = []\n\n  const token_c    = state.push('heading_close', 'h' + String(level), -1)\n  token_c.markup   = String.fromCharCode(marker)\n\n  state.parentType = oldParentType\n\n  return true\n}\n","// Paragraph\n\nexport default function paragraph (state, startLine, endLine) {\n  const terminatorRules = state.md.block.ruler.getRules('paragraph')\n  const oldParentType = state.parentType\n  let nextLine = startLine + 1\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    let terminate = false\n    for (let 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  const content = state.getLines(startLine, nextLine, state.blkIndent, false).trim()\n\n  state.line = nextLine\n\n  const token_o    = state.push('paragraph_open', 'p', 1)\n  token_o.map      = [startLine, state.line]\n\n  const token_i    = state.push('inline', '', 0)\n  token_i.content  = content\n  token_i.map      = [startLine, state.line]\n  token_i.children = []\n\n  state.push('paragraph_close', 'p', -1)\n\n  state.parentType = oldParentType\n\n  return true\n}\n","// Inline parser state\n\nimport Token from '../token.mjs'\nimport { isWhiteSpace, isPunctChar, isMdAsciiPunct } from '../common/utils.mjs'\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  // backtick length => last seen position\n  this.backticks = {}\n  this.backticksScanned = false\n\n  // Counter used to disable inline linkify-it execution\n  // inside <a> and markdown links\n  this.linkLevel = 0\n}\n\n// Flush pending text\n//\nStateInline.prototype.pushPending = function () {\n  const 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// 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  const token = new Token(type, tag, nesting)\n  let 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// 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  const max = this.posMax\n  const marker = this.src.charCodeAt(start)\n\n  // treat beginning of the line as a whitespace\n  const lastChar = start > 0 ? this.src.charCodeAt(start - 1) : 0x20\n\n  let pos = start\n  while (pos < max && this.src.charCodeAt(pos) === marker) { pos++ }\n\n  const count = pos - start\n\n  // treat end of the line as a whitespace\n  const nextChar = pos < max ? this.src.charCodeAt(pos) : 0x20\n\n  const isLastPunctChar = isMdAsciiPunct(lastChar) || isPunctChar(String.fromCharCode(lastChar))\n  const isNextPunctChar = isMdAsciiPunct(nextChar) || isPunctChar(String.fromCharCode(nextChar))\n\n  const isLastWhiteSpace = isWhiteSpace(lastChar)\n  const isNextWhiteSpace = isWhiteSpace(nextChar)\n\n  const left_flanking =\n    !isNextWhiteSpace && (!isNextPunctChar || isLastWhiteSpace || isLastPunctChar)\n  const right_flanking =\n    !isLastWhiteSpace && (!isLastPunctChar || isNextWhiteSpace || isNextPunctChar)\n\n  const can_open  = left_flanking  && (canSplitWord || !right_flanking || isLastPunctChar)\n  const can_close = right_flanking && (canSplitWord || !left_flanking  || isNextPunctChar)\n\n  return { can_open, can_close, length: count }\n}\n\n// re-export Token class to use in block rules\nStateInline.prototype.Token = Token\n\nexport default StateInline\n","// Skip text characters for text token, place those to pending buffer\n// and increment current pos\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\nexport default function text (state, silent) {\n  let 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 `ParserInline` 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","// Process links like https://example.org/\n\n// RFC3986: scheme = ALPHA *( ALPHA / DIGIT / \"+\" / \"-\" / \".\" )\nconst SCHEME_RE = /(?:^|[^a-z0-9.+-])([a-z][a-z0-9.+-]*)$/i\n\nexport default function linkify (state, silent) {\n  if (!state.md.options.linkify) return false\n  if (state.linkLevel > 0) return false\n\n  const pos = state.pos\n  const max = state.posMax\n\n  if (pos + 3 > max) return false\n  if (state.src.charCodeAt(pos) !== 0x3A/* : */) return false\n  if (state.src.charCodeAt(pos + 1) !== 0x2F/* / */) return false\n  if (state.src.charCodeAt(pos + 2) !== 0x2F/* / */) return false\n\n  const match = state.pending.match(SCHEME_RE)\n  if (!match) return false\n\n  const proto = match[1]\n\n  const link = state.md.linkify.matchAtStart(state.src.slice(pos - proto.length))\n  if (!link) return false\n\n  let url = link.url\n\n  // invalid link, but still detected by linkify somehow;\n  // need to check to prevent infinite loop below\n  if (url.length <= proto.length) return false\n\n  // disallow '*' at the end of the link (conflicts with emphasis)\n  url = url.replace(/\\*+$/, '')\n\n  const fullUrl = state.md.normalizeLink(url)\n  if (!state.md.validateLink(fullUrl)) return false\n\n  if (!silent) {\n    state.pending = state.pending.slice(0, -proto.length)\n\n    const token_o = state.push('link_open', 'a', 1)\n    token_o.attrs = [['href', fullUrl]]\n    token_o.markup = 'linkify'\n    token_o.info = 'auto'\n\n    const token_t = state.push('text', '', 0)\n    token_t.content = state.md.normalizeLinkText(url)\n\n    const token_c = state.push('link_close', 'a', -1)\n    token_c.markup = 'linkify'\n    token_c.info = 'auto'\n  }\n\n  state.pos += url.length - proto.length\n  return true\n}\n","// Process escaped chars and hardbreaks\n\nimport { isSpace } from '../common/utils.mjs'\n\nconst ESCAPED = []\n\nfor (let i = 0; i < 256; i++) { ESCAPED.push(0) }\n\n'\\\\!\"#$%&\\'()*+,./:;<=>?@[]^_`{|}~-'\n  .split('').forEach(function (ch) { ESCAPED[ch.charCodeAt(0)] = 1 })\n\nexport default function escape (state, silent) {\n  let pos = state.pos\n  const max = state.posMax\n\n  if (state.src.charCodeAt(pos) !== 0x5C/* \\ */) return false\n  pos++\n\n  // '\\' at the end of the inline block\n  if (pos >= max) return false\n\n  let ch1 = state.src.charCodeAt(pos)\n\n  if (ch1 === 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      ch1 = state.src.charCodeAt(pos)\n      if (!isSpace(ch1)) break\n      pos++\n    }\n\n    state.pos = pos\n    return true\n  }\n\n  let escapedStr = state.src[pos]\n\n  if (ch1 >= 0xD800 && ch1 <= 0xDBFF && pos + 1 < max) {\n    const ch2 = state.src.charCodeAt(pos + 1)\n\n    if (ch2 >= 0xDC00 && ch2 <= 0xDFFF) {\n      escapedStr += state.src[pos + 1]\n      pos++\n    }\n  }\n\n  const origStr = '\\\\' + escapedStr\n\n  if (!silent) {\n    const token = state.push('text_special', '', 0)\n\n    if (ch1 < 256 && ESCAPED[ch1] !== 0) {\n      token.content = escapedStr\n    } else {\n      token.content = origStr\n    }\n\n    token.markup = origStr\n    token.info   = 'escape'\n  }\n\n  state.pos = pos + 1\n  return true\n}\n","// ~~strike through~~\n//\n\n// Insert each marker as a separate text token, and add it to delimiter list\n//\nfunction strikethrough_tokenize (state, silent) {\n  const start = state.pos\n  const marker = state.src.charCodeAt(start)\n\n  if (silent) { return false }\n\n  if (marker !== 0x7E/* ~ */) { return false }\n\n  const scanned = state.scanDelims(state.pos, true)\n  let len = scanned.length\n  const ch = String.fromCharCode(marker)\n\n  if (len < 2) { return false }\n\n  let token\n\n  if (len % 2) {\n    token         = state.push('text', '', 0)\n    token.content = ch\n    len--\n  }\n\n  for (let i = 0; i < len; i += 2) {\n    token         = state.push('text', '', 0)\n    token.content = ch + ch\n\n    state.delimiters.push({\n      marker,\n      length: 0,     // disable \"rule of 3\" length checks meant for emphasis\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\nfunction postProcess (state, delimiters) {\n  let token\n  const loneMarkers = []\n  const max = delimiters.length\n\n  for (let i = 0; i < max; i++) {\n    const startDelim = delimiters[i]\n\n    if (startDelim.marker !== 0x7E/* ~ */) {\n      continue\n    }\n\n    if (startDelim.end === -1) {\n      continue\n    }\n\n    const 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      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    const i = loneMarkers.pop()\n    let 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// Walk through delimiter list and replace text tokens with tags\n//\nfunction strikethrough_postProcess (state) {\n  const tokens_meta = state.tokens_meta\n  const max = state.tokens_meta.length\n\n  postProcess(state, state.delimiters)\n\n  for (let 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\nexport default {\n  tokenize: strikethrough_tokenize,\n  postProcess: strikethrough_postProcess\n}\n","// Process *this* and _that_\n//\n\n// Insert each marker as a separate text token, and add it to delimiter list\n//\nfunction emphasis_tokenize (state, silent) {\n  const start = state.pos\n  const marker = state.src.charCodeAt(start)\n\n  if (silent) { return false }\n\n  if (marker !== 0x5F /* _ */ && marker !== 0x2A /* * */) { return false }\n\n  const scanned = state.scanDelims(state.pos, marker === 0x2A)\n\n  for (let i = 0; i < scanned.length; i++) {\n    const 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,\n\n      // Total length of these series of delimiters.\n      //\n      length: scanned.length,\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\nfunction postProcess (state, delimiters) {\n  const max = delimiters.length\n\n  for (let i = max - 1; i >= 0; i--) {\n    const 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    const 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    const isStrong = i > 0 &&\n               delimiters[i - 1].end === startDelim.end + 1 &&\n               // check that first two markers match and adjacent\n               delimiters[i - 1].marker === startDelim.marker &&\n               delimiters[i - 1].token === startDelim.token - 1 &&\n               // check that last two markers are adjacent (we can safely assume they match)\n               delimiters[startDelim.end + 1].token === endDelim.token + 1\n\n    const ch = String.fromCharCode(startDelim.marker)\n\n    const token_o   = state.tokens[startDelim.token]\n    token_o.type    = isStrong ? 'strong_open' : 'em_open'\n    token_o.tag     = isStrong ? 'strong' : 'em'\n    token_o.nesting = 1\n    token_o.markup  = isStrong ? ch + ch : ch\n    token_o.content = ''\n\n    const token_c   = state.tokens[endDelim.token]\n    token_c.type    = isStrong ? 'strong_close' : 'em_close'\n    token_c.tag     = isStrong ? 'strong' : 'em'\n    token_c.nesting = -1\n    token_c.markup  = isStrong ? ch + ch : ch\n    token_c.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// Walk through delimiter list and replace text tokens with tags\n//\nfunction emphasis_post_process (state) {\n  const tokens_meta = state.tokens_meta\n  const max = state.tokens_meta.length\n\n  postProcess(state, state.delimiters)\n\n  for (let 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\nexport default {\n  tokenize: emphasis_tokenize,\n  postProcess: emphasis_post_process\n}\n","// Process autolinks '<protocol:...>'\n\n/* eslint max-len:0 */\nconst 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])?)*)$/\n/* eslint-disable-next-line no-control-regex */\nconst AUTOLINK_RE = /^([a-zA-Z][a-zA-Z0-9+.-]{1,31}):([^<>\\x00-\\x20]*)$/\n\nexport default function autolink (state, silent) {\n  let pos = state.pos\n\n  if (state.src.charCodeAt(pos) !== 0x3C/* < */) { return false }\n\n  const start = state.pos\n  const max = state.posMax\n\n  for (;;) {\n    if (++pos >= max) return false\n\n    const ch = state.src.charCodeAt(pos)\n\n    if (ch === 0x3C /* < */) return false\n    if (ch === 0x3E /* > */) break\n  }\n\n  const url = state.src.slice(start + 1, pos)\n\n  if (AUTOLINK_RE.test(url)) {\n    const fullUrl = state.md.normalizeLink(url)\n    if (!state.md.validateLink(fullUrl)) { return false }\n\n    if (!silent) {\n      const token_o   = state.push('link_open', 'a', 1)\n      token_o.attrs   = [['href', fullUrl]]\n      token_o.markup  = 'autolink'\n      token_o.info    = 'auto'\n\n      const token_t   = state.push('text', '', 0)\n      token_t.content = state.md.normalizeLinkText(url)\n\n      const token_c   = state.push('link_close', 'a', -1)\n      token_c.markup  = 'autolink'\n      token_c.info    = 'auto'\n    }\n\n    state.pos += url.length + 2\n    return true\n  }\n\n  if (EMAIL_RE.test(url)) {\n    const fullUrl = state.md.normalizeLink('mailto:' + url)\n    if (!state.md.validateLink(fullUrl)) { return false }\n\n    if (!silent) {\n      const token_o   = state.push('link_open', 'a', 1)\n      token_o.attrs   = [['href', fullUrl]]\n      token_o.markup  = 'autolink'\n      token_o.info    = 'auto'\n\n      const token_t   = state.push('text', '', 0)\n      token_t.content = state.md.normalizeLinkText(url)\n\n      const token_c   = state.push('link_close', 'a', -1)\n      token_c.markup  = 'autolink'\n      token_c.info    = 'auto'\n    }\n\n    state.pos += url.length + 2\n    return true\n  }\n\n  return false\n}\n","// Process html entity - &#123;, &#xAF;, &quot;, ...\n\nimport { decodeHTML } from 'entities'\nimport { isValidEntityCode, fromCodePoint } from '../common/utils.mjs'\n\nconst DIGITAL_RE = /^&#((?:x[a-f0-9]{1,6}|[0-9]{1,7}));/i\nconst NAMED_RE   = /^&([a-z][a-z0-9]{1,31});/i\n\nexport default function entity (state, silent) {\n  const pos = state.pos\n  const max = state.posMax\n\n  if (state.src.charCodeAt(pos) !== 0x26/* & */) return false\n\n  if (pos + 1 >= max) return false\n\n  const ch = state.src.charCodeAt(pos + 1)\n\n  if (ch === 0x23 /* # */) {\n    const match = state.src.slice(pos).match(DIGITAL_RE)\n    if (match) {\n      if (!silent) {\n        const code = match[1][0].toLowerCase() === 'x' ? parseInt(match[1].slice(1), 16) : parseInt(match[1], 10)\n\n        const token   = state.push('text_special', '', 0)\n        token.content = isValidEntityCode(code) ? fromCodePoint(code) : fromCodePoint(0xFFFD)\n        token.markup  = match[0]\n        token.info    = 'entity'\n      }\n      state.pos += match[0].length\n      return true\n    }\n  } else {\n    const match = state.src.slice(pos).match(NAMED_RE)\n    if (match) {\n      const decoded = decodeHTML(match[0])\n      if (decoded !== match[0]) {\n        if (!silent) {\n          const token   = state.push('text_special', '', 0)\n          token.content = decoded\n          token.markup  = match[0]\n          token.info    = 'entity'\n        }\n        state.pos += match[0].length\n        return true\n      }\n    }\n  }\n\n  return false\n}\n","// For each opening emphasis-like marker find a matching closing one\n//\n\nfunction processDelimiters (delimiters) {\n  const openersBottom = {}\n  const max = delimiters.length\n\n  if (!max) return\n\n  // headerIdx is the first delimiter of the current (where closer is) delimiter run\n  let headerIdx = 0\n  let lastTokenIdx = -2 // needs any value lower than -1\n  const jumps = []\n\n  for (let closerIdx = 0; closerIdx < max; closerIdx++) {\n    const closer = delimiters[closerIdx]\n\n    jumps.push(0)\n\n    // markers belong to same delimiter run if:\n    //  - they have adjacent tokens\n    //  - AND markers are the same\n    //\n    if (delimiters[headerIdx].marker !== closer.marker || lastTokenIdx !== closer.token - 1) {\n      headerIdx = closerIdx\n    }\n\n    lastTokenIdx = closer.token\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, each delimiter length modulo 3,\n    // and for whether this closer can be an opener;\n    // https://github.com/commonmark/cmark/commit/34250e12ccebdc6372b8b49c44fab57c72443460\n    /* eslint-disable-next-line no-prototype-builtins */\n    if (!openersBottom.hasOwnProperty(closer.marker)) {\n      openersBottom[closer.marker] = [-1, -1, -1, -1, -1, -1]\n    }\n\n    const minOpenerIdx = openersBottom[closer.marker][(closer.open ? 3 : 0) + (closer.length % 3)]\n\n    let openerIdx = headerIdx - jumps[headerIdx] - 1\n\n    let newMinOpenerIdx = openerIdx\n\n    for (; openerIdx > minOpenerIdx; openerIdx -= jumps[openerIdx] + 1) {\n      const opener = delimiters[openerIdx]\n\n      if (opener.marker !== closer.marker) continue\n\n      if (opener.open && opener.end < 0) {\n        let 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          const lastJump = openerIdx > 0 && !delimiters[openerIdx - 1].open\n            ? jumps[openerIdx - 1] + 1\n            : 0\n\n          jumps[closerIdx] = closerIdx - openerIdx + lastJump\n          jumps[openerIdx] = lastJump\n\n          closer.open  = false\n          opener.end   = closerIdx\n          opener.close = false\n          newMinOpenerIdx = -1\n          // treat next token as start of run,\n          // it optimizes skips in **<...>**a**<...>** pathological case\n          lastTokenIdx = -2\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.open ? 3 : 0) + ((closer.length || 0) % 3)] = newMinOpenerIdx\n    }\n  }\n}\n\nexport default function link_pairs (state) {\n  const tokens_meta = state.tokens_meta\n  const max = state.tokens_meta.length\n\n  processDelimiters(state.delimiters)\n\n  for (let curr = 0; curr < max; curr++) {\n    if (tokens_meta[curr] && tokens_meta[curr].delimiters) {\n      processDelimiters(tokens_meta[curr].delimiters)\n    }\n  }\n}\n","/** internal\n * class ParserInline\n *\n * Tokenizes paragraph content.\n **/\n\nimport Ruler from './ruler.mjs'\nimport StateInline from './rules_inline/state_inline.mjs'\n\nimport r_text from './rules_inline/text.mjs'\nimport r_linkify from './rules_inline/linkify.mjs'\nimport r_newline from './rules_inline/newline.mjs'\nimport r_escape from './rules_inline/escape.mjs'\nimport r_backticks from './rules_inline/backticks.mjs'\nimport r_strikethrough from './rules_inline/strikethrough.mjs'\nimport r_emphasis from './rules_inline/emphasis.mjs'\nimport r_link from './rules_inline/link.mjs'\nimport r_image from './rules_inline/image.mjs'\nimport r_autolink from './rules_inline/autolink.mjs'\nimport r_html_inline from './rules_inline/html_inline.mjs'\nimport r_entity from './rules_inline/entity.mjs'\n\nimport r_balance_pairs from './rules_inline/balance_pairs.mjs'\nimport r_fragments_join from './rules_inline/fragments_join.mjs'\n\n// Parser rules\n\nconst _rules = [\n  ['text',            r_text],\n  ['linkify',         r_linkify],\n  ['newline',         r_newline],\n  ['escape',          r_escape],\n  ['backticks',       r_backticks],\n  ['strikethrough',   r_strikethrough.tokenize],\n  ['emphasis',        r_emphasis.tokenize],\n  ['link',            r_link],\n  ['image',           r_image],\n  ['autolink',        r_autolink],\n  ['html_inline',     r_html_inline],\n  ['entity',          r_entity]\n]\n\n// `rule2` ruleset was created specifically for emphasis/strikethrough\n// post-processing and may be changed in the future.\n//\n// Don't use this for anything except pairs (plugins working with `balance_pairs`).\n//\nconst _rules2 = [\n  ['balance_pairs',   r_balance_pairs],\n  ['strikethrough',   r_strikethrough.postProcess],\n  ['emphasis',        r_emphasis.postProcess],\n  // rules for pairs separate '**' into its own text tokens, which may be left unused,\n  // rule below merges unused segments back with the rest of the text\n  ['fragments_join',  r_fragments_join]\n]\n\n/**\n * new ParserInline()\n **/\nfunction ParserInline () {\n  /**\n   * ParserInline#ruler -> Ruler\n   *\n   * [[Ruler]] instance. Keep configuration of inline rules.\n   **/\n  this.ruler = new Ruler()\n\n  for (let 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 (let i = 0; i < _rules2.length; i++) {\n    this.ruler2.push(_rules2[i][0], _rules2[i][1])\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  const pos = state.pos\n  const rules = this.ruler.getRules('')\n  const len = rules.length\n  const maxNesting = state.md.options.maxNesting\n  const cache = state.cache\n\n  if (typeof cache[pos] !== 'undefined') {\n    state.pos = cache[pos]\n    return\n  }\n\n  let ok = false\n\n  if (state.level < maxNesting) {\n    for (let 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) {\n        if (pos >= state.pos) { throw new Error(\"inline rule didn't increment state.pos\") }\n        break\n      }\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// Generate tokens for input range\n//\nParserInline.prototype.tokenize = function (state) {\n  const rules = this.ruler.getRules('')\n  const len = rules.length\n  const end = state.posMax\n  const 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    const prevPos = state.pos\n    let ok = false\n\n    if (state.level < maxNesting) {\n      for (let i = 0; i < len; i++) {\n        ok = rules[i](state, false)\n        if (ok) {\n          if (prevPos >= state.pos) { throw new Error(\"inline rule didn't increment state.pos\") }\n          break\n        }\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 * 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  const state = new this.State(str, md, env, outTokens)\n\n  this.tokenize(state)\n\n  const rules = this.ruler2.getRules('')\n  const len = rules.length\n\n  for (let i = 0; i < len; i++) {\n    rules[i](state)\n  }\n}\n\nParserInline.prototype.State = StateInline\n\nexport default ParserInline\n","// Proceess '\\n'\n\nimport { isSpace } from '../common/utils.mjs'\n\nexport default function newline (state, silent) {\n  let pos = state.pos\n\n  if (state.src.charCodeAt(pos) !== 0x0A/* \\n */) { return false }\n\n  const pmax = state.pending.length - 1\n  const 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        // Find whitespaces tail of pending chars.\n        let ws = pmax - 1\n        while (ws >= 1 && state.pending.charCodeAt(ws - 1) === 0x20) ws--\n\n        state.pending = state.pending.slice(0, ws)\n        state.push('hardbreak', 'br', 0)\n      } else {\n        state.pending = state.pending.slice(0, -1)\n        state.push('softbreak', 'br', 0)\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","// Parse backticks\n\nexport default function backtick (state, silent) {\n  let pos = state.pos\n  const ch = state.src.charCodeAt(pos)\n\n  if (ch !== 0x60/* ` */) { return false }\n\n  const start = pos\n  pos++\n  const max = state.posMax\n\n  // scan marker length\n  while (pos < max && state.src.charCodeAt(pos) === 0x60/* ` */) { pos++ }\n\n  const marker = state.src.slice(start, pos)\n  const openerLength = marker.length\n\n  if (state.backticksScanned && (state.backticks[openerLength] || 0) <= start) {\n    if (!silent) state.pending += marker\n    state.pos += openerLength\n    return true\n  }\n\n  let matchEnd = pos\n  let matchStart\n\n  // Nothing found in the cache, scan until the end of the line (or until marker is found)\n  while ((matchStart = state.src.indexOf('`', matchEnd)) !== -1) {\n    matchEnd = matchStart + 1\n\n    // scan marker length\n    while (matchEnd < max && state.src.charCodeAt(matchEnd) === 0x60/* ` */) { matchEnd++ }\n\n    const closerLength = matchEnd - matchStart\n\n    if (closerLength === openerLength) {\n      // Found matching closer length.\n      if (!silent) {\n        const 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    // Some different length found, put it in cache as upper limit of where closer can be found\n    state.backticks[closerLength] = matchStart\n  }\n\n  // Scanned through the end, didn't find anything\n  state.backticksScanned = true\n\n  if (!silent) state.pending += marker\n  state.pos += openerLength\n  return true\n}\n","// Process [link](<to> \"stuff\")\n\nimport { normalizeReference, isSpace } from '../common/utils.mjs'\n\nexport default function link (state, silent) {\n  let code, label, res, ref\n  let href = ''\n  let title = ''\n  let start = state.pos\n  let parseReference = true\n\n  if (state.src.charCodeAt(state.pos) !== 0x5B/* [ */) { return false }\n\n  const oldPos = state.pos\n  const max = state.posMax\n  const labelStart = state.pos + 1\n  const 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  let 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      // [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      }\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    const token_o = state.push('link_open', 'a', 1)\n    const attrs = [['href', href]]\n    token_o.attrs  = attrs\n    if (title) {\n      attrs.push(['title', title])\n    }\n\n    state.linkLevel++\n    state.md.inline.tokenize(state)\n    state.linkLevel--\n\n    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\nimport { normalizeReference, isSpace } from '../common/utils.mjs'\n\nexport default function image (state, silent) {\n  let code, content, label, pos, ref, res, title, start\n  let href = ''\n  const oldPos = state.pos\n  const 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  const labelStart = state.pos + 2\n  const 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    const tokens = []\n    state.md.inline.parse(\n      content,\n      state.md,\n      state.env,\n      tokens\n    )\n\n    const token = state.push('image', 'img', 0)\n    const attrs = [['src', href], ['alt', '']]\n    token.attrs = attrs\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 html tags\n\nimport { HTML_TAG_RE } from '../common/html_re.mjs'\n\nfunction isLinkOpen (str) {\n  return /^<a[>\\s]/i.test(str)\n}\nfunction isLinkClose (str) {\n  return /^<\\/a\\s*>/i.test(str)\n}\n\nfunction isLetter (ch) {\n  /* eslint no-bitwise:0 */\n  const lc = ch | 0x20 // to lower case\n  return (lc >= 0x61/* a */) && (lc <= 0x7a/* z */)\n}\n\nexport default function html_inline (state, silent) {\n  if (!state.md.options.html) { return false }\n\n  // Check start\n  const max = state.posMax\n  const pos = state.pos\n  if (state.src.charCodeAt(pos) !== 0x3C/* < */ ||\n      pos + 2 >= max) {\n    return false\n  }\n\n  // Quick fail on second char\n  const 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  const match = state.src.slice(pos).match(HTML_TAG_RE)\n  if (!match) { return false }\n\n  if (!silent) {\n    const token = state.push('html_inline', '', 0)\n    token.content = match[0]\n\n    if (isLinkOpen(token.content))  state.linkLevel++\n    if (isLinkClose(token.content)) state.linkLevel--\n  }\n  state.pos += match[0].length\n  return true\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\nexport default function fragments_join (state) {\n  let curr, last\n  let level = 0\n  const tokens = state.tokens\n  const 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      // 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","import reFactory from './lib/re.mjs'\n\n//\n// Helpers\n//\n\n// Merge objects\n//\nfunction assign (obj /* from1, from2, from3, ... */) {\n  const 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\nfunction escapeRE (str) { return str.replace(/[.?*+^$[\\]\\\\(){}|-]/g, '\\\\$&') }\n\n//\n\nconst defaultOptions = {\n  fuzzyLink: true,\n  fuzzyEmail: true,\n  fuzzyIP: false\n}\n\nfunction isOptionsObj (obj) {\n  return Object.keys(obj || {}).reduce(function (acc, k) {\n    /* eslint-disable-next-line no-prototype-builtins */\n    return acc || defaultOptions.hasOwnProperty(k)\n  }, false)\n}\n\nconst defaultSchemas = {\n  'http:': {\n    validate: function (text, pos, self) {\n      const 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      const 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      const 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// RE pattern for 2-character tlds (autogenerated by ./support/tlds_2char_gen.js)\n/* eslint-disable-next-line max-len */\nconst 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\nconst tlds_default = 'biz|com|edu|gov|net|org|pro|web|xxx|aero|asia|coop|info|museum|name|shop|рф'.split('|')\n\nfunction resetScanCache (self) {\n  self.__index__ = -1\n  self.__text_cache__ = ''\n}\n\nfunction createValidator (re) {\n  return function (text, pos) {\n    const 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  // Load & clone RE patterns.\n  const re = self.re = reFactory(self.__opts__)\n\n  // Define dynamic patterns\n  const 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  const 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    const val = self.__schemas__[name]\n\n    // skip disabled methods\n    if (val === null) { return }\n\n    const 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  const 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  self.re.schema_at_start = RegExp('^' + self.re.schema_search.source, 'i')\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  const start = self.__index__\n  const end = self.__last_index__\n  const 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  const match = new Match(self, shift)\n\n  self.__compiled__[match.schema].normalize(match, self)\n\n  return match\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/** 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/** 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 * 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  let 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          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        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 * 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 * 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 * 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  const result = []\n  let shift = 0\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  let 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 * LinkifyIt#matchAtStart(text) -> Match|null\n *\n * Returns fully-formed (not fuzzy) link if it starts at the beginning\n * of the string, and null otherwise.\n **/\nLinkifyIt.prototype.matchAtStart = function matchAtStart (text) {\n  // Reset scan cache\n  this.__text_cache__ = text\n  this.__index__ = -1\n\n  if (!text.length) return null\n\n  const m = this.re.schema_at_start.exec(text)\n  if (!m) return null\n\n  const len = this.testSchemaAt(text, m[2], m[0].length)\n  if (!len) return null\n\n  this.__schema__ = m[2]\n  this.__index__ = m.index + m[1].length\n  this.__last_index__ = m.index + m[0].length + len\n\n  return createMatch(this, 0)\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  // 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 * LinkifyIt#onCompile()\n *\n * Override to modify basic RegExp-s.\n **/\nLinkifyIt.prototype.onCompile = function onCompile () {\n}\n\nexport default LinkifyIt\n","import { Any, Cc, Z, P } from 'uc.micro'\n\nexport default function (opts) {\n  const re = {}\n  opts = opts || {}\n\n  re.src_Any = Any.source\n  re.src_Cc = Cc.source\n  re.src_Z = Z.source\n  re.src_P = P.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  const 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  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 + ')' +\n    '(?!' + (opts['---'] ? '-(?!--)|' : '-|') + '_|:\\\\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\n          // allow `I'm_king` if no pair found\n          \"\\\\'(?=\" + re.src_pseudo_letter + '|[-])|' +\n\n          // google has many dots in \"google search\" links (#66, #81).\n          // github has ... in commit range links,\n          // Restrict to\n          // - english\n          // - percent-encoded\n          // - parts of file path\n          // - params separator\n          // until more examples found.\n          '\\\\.{2,}[a-zA-Z0-9%/&]|' +\n\n          '\\\\.(?!' + re.src_ZCc + '|[.]|$)|' +\n          (opts['---']\n            ? '\\\\-(?!--(?:[^-]|$))(?:-*)|' // `---` => long dash, terminate\n            : '\\\\-+|'\n          ) +\n          // allow `,,,` in paths\n          ',(?!' + re.src_ZCc + '|$)|' +\n\n          // allow `;` if not followed by space-like char\n          ';(?!' + re.src_ZCc + '|$)|' +\n\n          // allow `!!!` in paths, but not at the end\n          '\\\\!+(?!' + re.src_ZCc + '|[!]|$)|' +\n\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  // Main rules\n  //\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","'use strict';\n\n/** Highest positive signed 32-bit float value */\nconst maxInt = 2147483647; // aka. 0x7FFFFFFF or 2^31-1\n\n/** Bootstring parameters */\nconst base = 36;\nconst tMin = 1;\nconst tMax = 26;\nconst skew = 38;\nconst damp = 700;\nconst initialBias = 72;\nconst initialN = 128; // 0x80\nconst delimiter = '-'; // '\\x2D'\n\n/** Regular expressions */\nconst regexPunycode = /^xn--/;\nconst regexNonASCII = /[^\\0-\\x7F]/; // Note: U+007F DEL is excluded too.\nconst regexSeparators = /[\\x2E\\u3002\\uFF0E\\uFF61]/g; // RFC 3490 separators\n\n/** Error messages */\nconst errors = {\n\t'overflow': 'Overflow: input needs wider integers to process',\n\t'not-basic': 'Illegal input >= 0x80 (not a basic code point)',\n\t'invalid-input': 'Invalid input'\n};\n\n/** Convenience shortcuts */\nconst baseMinusTMin = base - tMin;\nconst floor = Math.floor;\nconst stringFromCharCode = String.fromCharCode;\n\n/*--------------------------------------------------------------------------*/\n\n/**\n * A generic error utility function.\n * @private\n * @param {String} type The error type.\n * @returns {Error} Throws a `RangeError` with the applicable error message.\n */\nfunction error(type) {\n\tthrow new RangeError(errors[type]);\n}\n\n/**\n * A generic `Array#map` utility function.\n * @private\n * @param {Array} array The array to iterate over.\n * @param {Function} callback The function that gets called for every array\n * item.\n * @returns {Array} A new array of values returned by the callback function.\n */\nfunction map(array, callback) {\n\tconst result = [];\n\tlet length = array.length;\n\twhile (length--) {\n\t\tresult[length] = callback(array[length]);\n\t}\n\treturn result;\n}\n\n/**\n * A simple `Array#map`-like wrapper to work with domain name strings or email\n * addresses.\n * @private\n * @param {String} domain The domain name or email address.\n * @param {Function} callback The function that gets called for every\n * character.\n * @returns {String} A new string of characters returned by the callback\n * function.\n */\nfunction mapDomain(domain, callback) {\n\tconst parts = domain.split('@');\n\tlet result = '';\n\tif (parts.length > 1) {\n\t\t// In email addresses, only the domain name should be punycoded. Leave\n\t\t// the local part (i.e. everything up to `@`) intact.\n\t\tresult = parts[0] + '@';\n\t\tdomain = parts[1];\n\t}\n\t// Avoid `split(regex)` for IE8 compatibility. See #17.\n\tdomain = domain.replace(regexSeparators, '\\x2E');\n\tconst labels = domain.split('.');\n\tconst encoded = map(labels, callback).join('.');\n\treturn result + encoded;\n}\n\n/**\n * Creates an array containing the numeric code points of each Unicode\n * character in the string. While JavaScript uses UCS-2 internally,\n * this function will convert a pair of surrogate halves (each of which\n * UCS-2 exposes as separate characters) into a single code point,\n * matching UTF-16.\n * @see `punycode.ucs2.encode`\n * @see <https://mathiasbynens.be/notes/javascript-encoding>\n * @memberOf punycode.ucs2\n * @name decode\n * @param {String} string The Unicode input string (UCS-2).\n * @returns {Array} The new array of code points.\n */\nfunction ucs2decode(string) {\n\tconst output = [];\n\tlet counter = 0;\n\tconst length = string.length;\n\twhile (counter < length) {\n\t\tconst value = string.charCodeAt(counter++);\n\t\tif (value >= 0xD800 && value <= 0xDBFF && counter < length) {\n\t\t\t// It's a high surrogate, and there is a next character.\n\t\t\tconst extra = string.charCodeAt(counter++);\n\t\t\tif ((extra & 0xFC00) == 0xDC00) { // Low surrogate.\n\t\t\t\toutput.push(((value & 0x3FF) << 10) + (extra & 0x3FF) + 0x10000);\n\t\t\t} else {\n\t\t\t\t// It's an unmatched surrogate; only append this code unit, in case the\n\t\t\t\t// next code unit is the high surrogate of a surrogate pair.\n\t\t\t\toutput.push(value);\n\t\t\t\tcounter--;\n\t\t\t}\n\t\t} else {\n\t\t\toutput.push(value);\n\t\t}\n\t}\n\treturn output;\n}\n\n/**\n * Creates a string based on an array of numeric code points.\n * @see `punycode.ucs2.decode`\n * @memberOf punycode.ucs2\n * @name encode\n * @param {Array} codePoints The array of numeric code points.\n * @returns {String} The new Unicode string (UCS-2).\n */\nconst ucs2encode = codePoints => String.fromCodePoint(...codePoints);\n\n/**\n * Converts a basic code point into a digit/integer.\n * @see `digitToBasic()`\n * @private\n * @param {Number} codePoint The basic numeric code point value.\n * @returns {Number} The numeric value of a basic code point (for use in\n * representing integers) in the range `0` to `base - 1`, or `base` if\n * the code point does not represent a value.\n */\nconst basicToDigit = function(codePoint) {\n\tif (codePoint >= 0x30 && codePoint < 0x3A) {\n\t\treturn 26 + (codePoint - 0x30);\n\t}\n\tif (codePoint >= 0x41 && codePoint < 0x5B) {\n\t\treturn codePoint - 0x41;\n\t}\n\tif (codePoint >= 0x61 && codePoint < 0x7B) {\n\t\treturn codePoint - 0x61;\n\t}\n\treturn base;\n};\n\n/**\n * Converts a digit/integer into a basic code point.\n * @see `basicToDigit()`\n * @private\n * @param {Number} digit The numeric value of a basic code point.\n * @returns {Number} The basic code point whose value (when used for\n * representing integers) is `digit`, which needs to be in the range\n * `0` to `base - 1`. If `flag` is non-zero, the uppercase form is\n * used; else, the lowercase form is used. The behavior is undefined\n * if `flag` is non-zero and `digit` has no uppercase form.\n */\nconst digitToBasic = function(digit, flag) {\n\t//  0..25 map to ASCII a..z or A..Z\n\t// 26..35 map to ASCII 0..9\n\treturn digit + 22 + 75 * (digit < 26) - ((flag != 0) << 5);\n};\n\n/**\n * Bias adaptation function as per section 3.4 of RFC 3492.\n * https://tools.ietf.org/html/rfc3492#section-3.4\n * @private\n */\nconst adapt = function(delta, numPoints, firstTime) {\n\tlet k = 0;\n\tdelta = firstTime ? floor(delta / damp) : delta >> 1;\n\tdelta += floor(delta / numPoints);\n\tfor (/* no initialization */; delta > baseMinusTMin * tMax >> 1; k += base) {\n\t\tdelta = floor(delta / baseMinusTMin);\n\t}\n\treturn floor(k + (baseMinusTMin + 1) * delta / (delta + skew));\n};\n\n/**\n * Converts a Punycode string of ASCII-only symbols to a string of Unicode\n * symbols.\n * @memberOf punycode\n * @param {String} input The Punycode string of ASCII-only symbols.\n * @returns {String} The resulting string of Unicode symbols.\n */\nconst decode = function(input) {\n\t// Don't use UCS-2.\n\tconst output = [];\n\tconst inputLength = input.length;\n\tlet i = 0;\n\tlet n = initialN;\n\tlet bias = initialBias;\n\n\t// Handle the basic code points: let `basic` be the number of input code\n\t// points before the last delimiter, or `0` if there is none, then copy\n\t// the first basic code points to the output.\n\n\tlet basic = input.lastIndexOf(delimiter);\n\tif (basic < 0) {\n\t\tbasic = 0;\n\t}\n\n\tfor (let j = 0; j < basic; ++j) {\n\t\t// if it's not a basic code point\n\t\tif (input.charCodeAt(j) >= 0x80) {\n\t\t\terror('not-basic');\n\t\t}\n\t\toutput.push(input.charCodeAt(j));\n\t}\n\n\t// Main decoding loop: start just after the last delimiter if any basic code\n\t// points were copied; start at the beginning otherwise.\n\n\tfor (let index = basic > 0 ? basic + 1 : 0; index < inputLength; /* no final expression */) {\n\n\t\t// `index` is the index of the next character to be consumed.\n\t\t// Decode a generalized variable-length integer into `delta`,\n\t\t// which gets added to `i`. The overflow checking is easier\n\t\t// if we increase `i` as we go, then subtract off its starting\n\t\t// value at the end to obtain `delta`.\n\t\tconst oldi = i;\n\t\tfor (let w = 1, k = base; /* no condition */; k += base) {\n\n\t\t\tif (index >= inputLength) {\n\t\t\t\terror('invalid-input');\n\t\t\t}\n\n\t\t\tconst digit = basicToDigit(input.charCodeAt(index++));\n\n\t\t\tif (digit >= base) {\n\t\t\t\terror('invalid-input');\n\t\t\t}\n\t\t\tif (digit > floor((maxInt - i) / w)) {\n\t\t\t\terror('overflow');\n\t\t\t}\n\n\t\t\ti += digit * w;\n\t\t\tconst t = k <= bias ? tMin : (k >= bias + tMax ? tMax : k - bias);\n\n\t\t\tif (digit < t) {\n\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\tconst baseMinusT = base - t;\n\t\t\tif (w > floor(maxInt / baseMinusT)) {\n\t\t\t\terror('overflow');\n\t\t\t}\n\n\t\t\tw *= baseMinusT;\n\n\t\t}\n\n\t\tconst out = output.length + 1;\n\t\tbias = adapt(i - oldi, out, oldi == 0);\n\n\t\t// `i` was supposed to wrap around from `out` to `0`,\n\t\t// incrementing `n` each time, so we'll fix that now:\n\t\tif (floor(i / out) > maxInt - n) {\n\t\t\terror('overflow');\n\t\t}\n\n\t\tn += floor(i / out);\n\t\ti %= out;\n\n\t\t// Insert `n` at position `i` of the output.\n\t\toutput.splice(i++, 0, n);\n\n\t}\n\n\treturn String.fromCodePoint(...output);\n};\n\n/**\n * Converts a string of Unicode symbols (e.g. a domain name label) to a\n * Punycode string of ASCII-only symbols.\n * @memberOf punycode\n * @param {String} input The string of Unicode symbols.\n * @returns {String} The resulting Punycode string of ASCII-only symbols.\n */\nconst encode = function(input) {\n\tconst output = [];\n\n\t// Convert the input in UCS-2 to an array of Unicode code points.\n\tinput = ucs2decode(input);\n\n\t// Cache the length.\n\tconst inputLength = input.length;\n\n\t// Initialize the state.\n\tlet n = initialN;\n\tlet delta = 0;\n\tlet bias = initialBias;\n\n\t// Handle the basic code points.\n\tfor (const currentValue of input) {\n\t\tif (currentValue < 0x80) {\n\t\t\toutput.push(stringFromCharCode(currentValue));\n\t\t}\n\t}\n\n\tconst basicLength = output.length;\n\tlet handledCPCount = basicLength;\n\n\t// `handledCPCount` is the number of code points that have been handled;\n\t// `basicLength` is the number of basic code points.\n\n\t// Finish the basic string with a delimiter unless it's empty.\n\tif (basicLength) {\n\t\toutput.push(delimiter);\n\t}\n\n\t// Main encoding loop:\n\twhile (handledCPCount < inputLength) {\n\n\t\t// All non-basic code points < n have been handled already. Find the next\n\t\t// larger one:\n\t\tlet m = maxInt;\n\t\tfor (const currentValue of input) {\n\t\t\tif (currentValue >= n && currentValue < m) {\n\t\t\t\tm = currentValue;\n\t\t\t}\n\t\t}\n\n\t\t// Increase `delta` enough to advance the decoder's <n,i> state to <m,0>,\n\t\t// but guard against overflow.\n\t\tconst handledCPCountPlusOne = handledCPCount + 1;\n\t\tif (m - n > floor((maxInt - delta) / handledCPCountPlusOne)) {\n\t\t\terror('overflow');\n\t\t}\n\n\t\tdelta += (m - n) * handledCPCountPlusOne;\n\t\tn = m;\n\n\t\tfor (const currentValue of input) {\n\t\t\tif (currentValue < n && ++delta > maxInt) {\n\t\t\t\terror('overflow');\n\t\t\t}\n\t\t\tif (currentValue === n) {\n\t\t\t\t// Represent delta as a generalized variable-length integer.\n\t\t\t\tlet q = delta;\n\t\t\t\tfor (let k = base; /* no condition */; k += base) {\n\t\t\t\t\tconst t = k <= bias ? tMin : (k >= bias + tMax ? tMax : k - bias);\n\t\t\t\t\tif (q < t) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\tconst qMinusT = q - t;\n\t\t\t\t\tconst baseMinusT = base - t;\n\t\t\t\t\toutput.push(\n\t\t\t\t\t\tstringFromCharCode(digitToBasic(t + qMinusT % baseMinusT, 0))\n\t\t\t\t\t);\n\t\t\t\t\tq = floor(qMinusT / baseMinusT);\n\t\t\t\t}\n\n\t\t\t\toutput.push(stringFromCharCode(digitToBasic(q, 0)));\n\t\t\t\tbias = adapt(delta, handledCPCountPlusOne, handledCPCount === basicLength);\n\t\t\t\tdelta = 0;\n\t\t\t\t++handledCPCount;\n\t\t\t}\n\t\t}\n\n\t\t++delta;\n\t\t++n;\n\n\t}\n\treturn output.join('');\n};\n\n/**\n * Converts a Punycode string representing a domain name or an email address\n * to Unicode. Only the Punycoded parts of the input will be converted, i.e.\n * it doesn't matter if you call it on a string that has already been\n * converted to Unicode.\n * @memberOf punycode\n * @param {String} input The Punycoded domain name or email address to\n * convert to Unicode.\n * @returns {String} The Unicode representation of the given Punycode\n * string.\n */\nconst toUnicode = function(input) {\n\treturn mapDomain(input, function(string) {\n\t\treturn regexPunycode.test(string)\n\t\t\t? decode(string.slice(4).toLowerCase())\n\t\t\t: string;\n\t});\n};\n\n/**\n * Converts a Unicode string representing a domain name or an email address to\n * Punycode. Only the non-ASCII parts of the domain name will be converted,\n * i.e. it doesn't matter if you call it with a domain that's already in\n * ASCII.\n * @memberOf punycode\n * @param {String} input The domain name or email address to convert, as a\n * Unicode string.\n * @returns {String} The Punycode representation of the given domain name or\n * email address.\n */\nconst toASCII = function(input) {\n\treturn mapDomain(input, function(string) {\n\t\treturn regexNonASCII.test(string)\n\t\t\t? 'xn--' + encode(string)\n\t\t\t: string;\n\t});\n};\n\n/*--------------------------------------------------------------------------*/\n\n/** Define the public API */\nconst punycode = {\n\t/**\n\t * A string representing the current Punycode.js version number.\n\t * @memberOf punycode\n\t * @type String\n\t */\n\t'version': '2.3.1',\n\t/**\n\t * An object of methods to convert from JavaScript's internal character\n\t * representation (UCS-2) to Unicode code points, and back.\n\t * @see <https://mathiasbynens.be/notes/javascript-encoding>\n\t * @memberOf punycode\n\t * @type Object\n\t */\n\t'ucs2': {\n\t\t'decode': ucs2decode,\n\t\t'encode': ucs2encode\n\t},\n\t'decode': decode,\n\t'encode': encode,\n\t'toASCII': toASCII,\n\t'toUnicode': toUnicode\n};\n\nexport { ucs2decode, ucs2encode, decode, encode, toASCII, toUnicode };\nexport default punycode;\n","// Main parser class\n\nimport * as utils from './common/utils.mjs'\nimport * as helpers from './helpers/index.mjs'\nimport Renderer from './renderer.mjs'\nimport ParserCore from './parser_core.mjs'\nimport ParserBlock from './parser_block.mjs'\nimport ParserInline from './parser_inline.mjs'\nimport LinkifyIt from 'linkify-it'\nimport * as mdurl from 'mdurl'\nimport punycode from 'punycode.js'\n\nimport cfg_default from './presets/default.mjs'\nimport cfg_zero from './presets/zero.mjs'\nimport cfg_commonmark from './presets/commonmark.mjs'\n\nconst config = {\n  default: cfg_default,\n  zero: cfg_zero,\n  commonmark: cfg_commonmark\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\nconst BAD_PROTO_RE = /^(vbscript|javascript|file|data):/\nconst 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  const str = url.trim().toLowerCase()\n\n  return BAD_PROTO_RE.test(str) ? GOOD_DATA_RE.test(str) : true\n}\n\nconst RECODE_HOSTNAME_FOR = ['http:', 'https:', 'mailto:']\n\nfunction normalizeLink (url) {\n  const 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  const 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  // add '%' to exclude list because of https://github.com/markdown-it/markdown-it/issues/720\n  return mdurl.decode(mdurl.format(parsed), mdurl.decode.defaultChars + '%')\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.mjs) -\n *   configures parser to strict [CommonMark](http://commonmark.org/) mode.\n * - [default](https://github.com/markdown-it/markdown-it/blob/master/lib/presets/default.mjs) -\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.mjs) -\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.mjs) +\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(str, { language: lang, ignoreIllegals: 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>` or `<code>`):\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><code class=\"hljs\">' +\n *                hljs.highlight(str, { language: lang, ignoreIllegals: true }).value +\n *                '</code></pre>';\n *       } catch (__) {}\n *     }\n *\n *     return '<pre><code class=\"hljs\">' + 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.mjs).\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.mjs)\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  // 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.mjs).\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  this.options = {}\n  this.configure(presetName)\n\n  if (options) { this.set(options) }\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/** 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  const self = this\n\n  if (utils.isString(presets)) {\n    const 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/** 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  let 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  const 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/** 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  let 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  const 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/** 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  const args = [this].concat(Array.prototype.slice.call(arguments, 1))\n  plugin.apply(plugin, args)\n  return this\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  const state = new this.core.State(src, this, env)\n\n  this.core.process(state)\n\n  return state.tokens\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/** 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  const 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 * 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\nexport default MarkdownIt\n","// markdown-it default options\n\nexport default {\n  options: {\n    // Enable HTML tags in source\n    html: false,\n\n    // Use '/' to close single tags (<br />)\n    xhtmlOut: false,\n\n    // Convert '\\n' in paragraphs into <br>\n    breaks: false,\n\n    // CSS language prefix for fenced blocks\n    langPrefix: 'language-',\n\n    // autoconvert URL-like texts to links\n    linkify: false,\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    // Internal protection, recursion limit\n    maxNesting: 100\n  },\n\n  components: {\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\nexport default {\n  options: {\n    // Enable HTML tags in source\n    html: false,\n\n    // Use '/' to close single tags (<br />)\n    xhtmlOut: false,\n\n    // Convert '\\n' in paragraphs into <br>\n    breaks: false,\n\n    // CSS language prefix for fenced blocks\n    langPrefix: 'language-',\n\n    // autoconvert URL-like texts to links\n    linkify: false,\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    // Internal protection, recursion limit\n    maxNesting: 20\n  },\n\n  components: {\n\n    core: {\n      rules: [\n        'normalize',\n        'block',\n        'inline',\n        'text_join'\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        'fragments_join'\n      ]\n    }\n  }\n}\n","// Commonmark default options\n\nexport default {\n  options: {\n    // Enable HTML tags in source\n    html: true,\n\n    // Use '/' to close single tags (<br />)\n    xhtmlOut: true,\n\n    // Convert '\\n' in paragraphs into <br>\n    breaks: false,\n\n    // CSS language prefix for fenced blocks\n    langPrefix: 'language-',\n\n    // autoconvert URL-like texts to links\n    linkify: false,\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    // Internal protection, recursion limit\n    maxNesting: 20\n  },\n\n  components: {\n\n    core: {\n      rules: [\n        'normalize',\n        'block',\n        'inline',\n        'text_join'\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        'fragments_join'\n      ]\n    }\n  }\n}\n","/**\n * This is the ParseError class, which is the main error thrown by KaTeX\n * functions when something has gone wrong. This is used to distinguish internal\n * errors from errors in the expression that the user provided.\n */\nfunction ParseError(message, lexer, position) {\n    var error = \"KaTeX parse error: \" + message;\n\n    if (lexer !== undefined && position !== undefined) {\n        // If we have the input and a position, make the error a bit fancier\n\n        // Prepend some information\n        error += \" at position \" + position + \": \";\n\n        // Get the input\n        var input = lexer._input;\n        // Insert a combining underscore at the correct position\n        input = input.slice(0, position) + \"\\u0332\" +\n            input.slice(position);\n\n        // Extract some context from the input and add it to the error\n        var begin = Math.max(0, position - 15);\n        var end = position + 15;\n        error += input.slice(begin, end);\n    }\n\n    // Some hackery to make ParseError a prototype of Error\n    // See http://stackoverflow.com/a/8460753\n    var self = new Error(error);\n    self.name = \"ParseError\";\n    self.__proto__ = ParseError.prototype;\n\n    self.position = position;\n    return self;\n}\n\n// More hackery\nParseError.prototype.__proto__ = Error.prototype;\n\nmodule.exports = ParseError;\n","/**\n * This is a module for storing settings passed into KaTeX. It correctly handles\n * default settings.\n */\n\n/**\n * Helper function for getting a default value if the value is undefined\n */\nfunction get(option, defaultValue) {\n    return option === undefined ? defaultValue : option;\n}\n\n/**\n * The main Settings object\n *\n * The current options stored are:\n *  - displayMode: Whether the expression should be typeset by default in\n *                 textstyle or displaystyle (default false)\n */\nfunction Settings(options) {\n    // allow null options\n    options = options || {};\n    this.displayMode = get(options.displayMode, false);\n    this.throwOnError = get(options.throwOnError, true);\n    this.errorColor = get(options.errorColor, \"#cc0000\");\n}\n\nmodule.exports = Settings;\n","/**\n * This file contains information and classes for the various kinds of styles\n * used in TeX. It provides a generic `Style` class, which holds information\n * about a specific style. It then provides instances of all the different kinds\n * of styles possible, and provides functions to move between them and get\n * information about them.\n */\n\n/**\n * The main style class. Contains a unique id for the style, a size (which is\n * the same for cramped and uncramped version of a style), a cramped flag, and a\n * size multiplier, which gives the size difference between a style and\n * textstyle.\n */\nfunction Style(id, size, multiplier, cramped) {\n    this.id = id;\n    this.size = size;\n    this.cramped = cramped;\n    this.sizeMultiplier = multiplier;\n}\n\n/**\n * Get the style of a superscript given a base in the current style.\n */\nStyle.prototype.sup = function() {\n    return styles[sup[this.id]];\n};\n\n/**\n * Get the style of a subscript given a base in the current style.\n */\nStyle.prototype.sub = function() {\n    return styles[sub[this.id]];\n};\n\n/**\n * Get the style of a fraction numerator given the fraction in the current\n * style.\n */\nStyle.prototype.fracNum = function() {\n    return styles[fracNum[this.id]];\n};\n\n/**\n * Get the style of a fraction denominator given the fraction in the current\n * style.\n */\nStyle.prototype.fracDen = function() {\n    return styles[fracDen[this.id]];\n};\n\n/**\n * Get the cramped version of a style (in particular, cramping a cramped style\n * doesn't change the style).\n */\nStyle.prototype.cramp = function() {\n    return styles[cramp[this.id]];\n};\n\n/**\n * HTML class name, like \"displaystyle cramped\"\n */\nStyle.prototype.cls = function() {\n    return sizeNames[this.size] + (this.cramped ? \" cramped\" : \" uncramped\");\n};\n\n/**\n * HTML Reset class name, like \"reset-textstyle\"\n */\nStyle.prototype.reset = function() {\n    return resetNames[this.size];\n};\n\n// IDs of the different styles\nvar D = 0;\nvar Dc = 1;\nvar T = 2;\nvar Tc = 3;\nvar S = 4;\nvar Sc = 5;\nvar SS = 6;\nvar SSc = 7;\n\n// String names for the different sizes\nvar sizeNames = [\n    \"displaystyle textstyle\",\n    \"textstyle\",\n    \"scriptstyle\",\n    \"scriptscriptstyle\",\n];\n\n// Reset names for the different sizes\nvar resetNames = [\n    \"reset-textstyle\",\n    \"reset-textstyle\",\n    \"reset-scriptstyle\",\n    \"reset-scriptscriptstyle\",\n];\n\n// Instances of the different styles\nvar styles = [\n    new Style(D, 0, 1.0, false),\n    new Style(Dc, 0, 1.0, true),\n    new Style(T, 1, 1.0, false),\n    new Style(Tc, 1, 1.0, true),\n    new Style(S, 2, 0.7, false),\n    new Style(Sc, 2, 0.7, true),\n    new Style(SS, 3, 0.5, false),\n    new Style(SSc, 3, 0.5, true),\n];\n\n// Lookup tables for switching from one style to another\nvar sup = [S, Sc, S, Sc, SS, SSc, SS, SSc];\nvar sub = [Sc, Sc, Sc, Sc, SSc, SSc, SSc, SSc];\nvar fracNum = [T, Tc, S, Sc, SS, SSc, SS, SSc];\nvar fracDen = [Tc, Tc, Sc, Sc, SSc, SSc, SSc, SSc];\nvar cramp = [Dc, Dc, Tc, Tc, Sc, Sc, SSc, SSc];\n\n// We only export some of the styles. Also, we don't export the `Style` class so\n// no more styles can be generated.\nmodule.exports = {\n    DISPLAY: styles[D],\n    TEXT: styles[T],\n    SCRIPT: styles[S],\n    SCRIPTSCRIPT: styles[SS],\n};\n","/**\n * This file contains a list of utility functions which are useful in other\n * files.\n */\n\n/**\n * Provide an `indexOf` function which works in IE8, but defers to native if\n * possible.\n */\nvar nativeIndexOf = Array.prototype.indexOf;\nvar indexOf = function(list, elem) {\n    if (list == null) {\n        return -1;\n    }\n    if (nativeIndexOf && list.indexOf === nativeIndexOf) {\n        return list.indexOf(elem);\n    }\n    var i = 0;\n    var l = list.length;\n    for (; i < l; i++) {\n        if (list[i] === elem) {\n            return i;\n        }\n    }\n    return -1;\n};\n\n/**\n * Return whether an element is contained in a list\n */\nvar contains = function(list, elem) {\n    return indexOf(list, elem) !== -1;\n};\n\n/**\n * Provide a default value if a setting is undefined\n */\nvar deflt = function(setting, defaultIfUndefined) {\n    return setting === undefined ? defaultIfUndefined : setting;\n};\n\n// hyphenate and escape adapted from Facebook's React under Apache 2 license\n\nvar uppercase = /([A-Z])/g;\nvar hyphenate = function(str) {\n    return str.replace(uppercase, \"-$1\").toLowerCase();\n};\n\nvar ESCAPE_LOOKUP = {\n    \"&\": \"&amp;\",\n    \">\": \"&gt;\",\n    \"<\": \"&lt;\",\n    \"\\\"\": \"&quot;\",\n    \"'\": \"&#x27;\",\n};\n\nvar ESCAPE_REGEX = /[&><\"']/g;\n\nfunction escaper(match) {\n    return ESCAPE_LOOKUP[match];\n}\n\n/**\n * Escapes text to prevent scripting attacks.\n *\n * @param {*} text Text value to escape.\n * @return {string} An escaped string.\n */\nfunction escape(text) {\n    return (\"\" + text).replace(ESCAPE_REGEX, escaper);\n}\n\n/**\n * A function to set the text content of a DOM element in all supported\n * browsers. Note that we don't define this if there is no document.\n */\nvar setTextContent;\nif (typeof document !== \"undefined\") {\n    var testNode = document.createElement(\"span\");\n    if (\"textContent\" in testNode) {\n        setTextContent = function(node, text) {\n            node.textContent = text;\n        };\n    } else {\n        setTextContent = function(node, text) {\n            node.innerText = text;\n        };\n    }\n}\n\n/**\n * A function to clear a node.\n */\nfunction clearNode(node) {\n    setTextContent(node, \"\");\n}\n\nmodule.exports = {\n    contains: contains,\n    deflt: deflt,\n    escape: escape,\n    hyphenate: hyphenate,\n    indexOf: indexOf,\n    setTextContent: setTextContent,\n    clearNode: clearNode,\n};\n","/**\n * These objects store the data about the DOM nodes we create, as well as some\n * extra data. They can then be transformed into real DOM nodes with the\n * `toNode` function or HTML markup using `toMarkup`. They are useful for both\n * storing extra properties on the nodes, as well as providing a way to easily\n * work with the DOM.\n *\n * Similar functions for working with MathML nodes exist in mathMLTree.js.\n */\n\nvar utils = require(\"./utils\");\n\n/**\n * Create an HTML className based on a list of classes. In addition to joining\n * with spaces, we also remove null or empty classes.\n */\nvar createClass = function(classes) {\n    classes = classes.slice();\n    for (var i = classes.length - 1; i >= 0; i--) {\n        if (!classes[i]) {\n            classes.splice(i, 1);\n        }\n    }\n\n    return classes.join(\" \");\n};\n\n/**\n * This node represents a span node, with a className, a list of children, and\n * an inline style. It also contains information about its height, depth, and\n * maxFontSize.\n */\nfunction span(classes, children, height, depth, maxFontSize, style) {\n    this.classes = classes || [];\n    this.children = children || [];\n    this.height = height || 0;\n    this.depth = depth || 0;\n    this.maxFontSize = maxFontSize || 0;\n    this.style = style || {};\n    this.attributes = {};\n}\n\n/**\n * Sets an arbitrary attribute on the span. Warning: use this wisely. Not all\n * browsers support attributes the same, and having too many custom attributes\n * is probably bad.\n */\nspan.prototype.setAttribute = function(attribute, value) {\n    this.attributes[attribute] = value;\n};\n\n/**\n * Convert the span into an HTML node\n */\nspan.prototype.toNode = function() {\n    var span = document.createElement(\"span\");\n\n    // Apply the class\n    span.className = createClass(this.classes);\n\n    // Apply inline styles\n    for (var style in this.style) {\n        if (Object.prototype.hasOwnProperty.call(this.style, style)) {\n            span.style[style] = this.style[style];\n        }\n    }\n\n    // Apply attributes\n    for (var attr in this.attributes) {\n        if (Object.prototype.hasOwnProperty.call(this.attributes, attr)) {\n            span.setAttribute(attr, this.attributes[attr]);\n        }\n    }\n\n    // Append the children, also as HTML nodes\n    for (var i = 0; i < this.children.length; i++) {\n        span.appendChild(this.children[i].toNode());\n    }\n\n    return span;\n};\n\n/**\n * Convert the span into an HTML markup string\n */\nspan.prototype.toMarkup = function() {\n    var markup = \"<span\";\n\n    // Add the class\n    if (this.classes.length) {\n        markup += \" class=\\\"\";\n        markup += utils.escape(createClass(this.classes));\n        markup += \"\\\"\";\n    }\n\n    var styles = \"\";\n\n    // Add the styles, after hyphenation\n    for (var style in this.style) {\n        if (this.style.hasOwnProperty(style)) {\n            styles += utils.hyphenate(style) + \":\" + this.style[style] + \";\";\n        }\n    }\n\n    if (styles) {\n        markup += \" style=\\\"\" + utils.escape(styles) + \"\\\"\";\n    }\n\n    // Add the attributes\n    for (var attr in this.attributes) {\n        if (Object.prototype.hasOwnProperty.call(this.attributes, attr)) {\n            markup += \" \" + attr + \"=\\\"\";\n            markup += utils.escape(this.attributes[attr]);\n            markup += \"\\\"\";\n        }\n    }\n\n    markup += \">\";\n\n    // Add the markup of the children, also as markup\n    for (var i = 0; i < this.children.length; i++) {\n        markup += this.children[i].toMarkup();\n    }\n\n    markup += \"</span>\";\n\n    return markup;\n};\n\n/**\n * This node represents a document fragment, which contains elements, but when\n * placed into the DOM doesn't have any representation itself. Thus, it only\n * contains children and doesn't have any HTML properties. It also keeps track\n * of a height, depth, and maxFontSize.\n */\nfunction documentFragment(children, height, depth, maxFontSize) {\n    this.children = children || [];\n    this.height = height || 0;\n    this.depth = depth || 0;\n    this.maxFontSize = maxFontSize || 0;\n}\n\n/**\n * Convert the fragment into a node\n */\ndocumentFragment.prototype.toNode = function() {\n    // Create a fragment\n    var frag = document.createDocumentFragment();\n\n    // Append the children\n    for (var i = 0; i < this.children.length; i++) {\n        frag.appendChild(this.children[i].toNode());\n    }\n\n    return frag;\n};\n\n/**\n * Convert the fragment into HTML markup\n */\ndocumentFragment.prototype.toMarkup = function() {\n    var markup = \"\";\n\n    // Simply concatenate the markup for the children together\n    for (var i = 0; i < this.children.length; i++) {\n        markup += this.children[i].toMarkup();\n    }\n\n    return markup;\n};\n\n/**\n * A symbol node contains information about a single symbol. It either renders\n * to a single text node, or a span with a single text node in it, depending on\n * whether it has CSS classes, styles, or needs italic correction.\n */\nfunction symbolNode(value, height, depth, italic, skew, classes, style) {\n    this.value = value || \"\";\n    this.height = height || 0;\n    this.depth = depth || 0;\n    this.italic = italic || 0;\n    this.skew = skew || 0;\n    this.classes = classes || [];\n    this.style = style || {};\n    this.maxFontSize = 0;\n}\n\n/**\n * Creates a text node or span from a symbol node. Note that a span is only\n * created if it is needed.\n */\nsymbolNode.prototype.toNode = function() {\n    var node = document.createTextNode(this.value);\n    var span = null;\n\n    if (this.italic > 0) {\n        span = document.createElement(\"span\");\n        span.style.marginRight = this.italic + \"em\";\n    }\n\n    if (this.classes.length > 0) {\n        span = span || document.createElement(\"span\");\n        span.className = createClass(this.classes);\n    }\n\n    for (var style in this.style) {\n        if (this.style.hasOwnProperty(style)) {\n            span = span || document.createElement(\"span\");\n            span.style[style] = this.style[style];\n        }\n    }\n\n    if (span) {\n        span.appendChild(node);\n        return span;\n    } else {\n        return node;\n    }\n};\n\n/**\n * Creates markup for a symbol node.\n */\nsymbolNode.prototype.toMarkup = function() {\n    // TODO(alpert): More duplication than I'd like from\n    // span.prototype.toMarkup and symbolNode.prototype.toNode...\n    var needsSpan = false;\n\n    var markup = \"<span\";\n\n    if (this.classes.length) {\n        needsSpan = true;\n        markup += \" class=\\\"\";\n        markup += utils.escape(createClass(this.classes));\n        markup += \"\\\"\";\n    }\n\n    var styles = \"\";\n\n    if (this.italic > 0) {\n        styles += \"margin-right:\" + this.italic + \"em;\";\n    }\n    for (var style in this.style) {\n        if (this.style.hasOwnProperty(style)) {\n            styles += utils.hyphenate(style) + \":\" + this.style[style] + \";\";\n        }\n    }\n\n    if (styles) {\n        needsSpan = true;\n        markup += \" style=\\\"\" + utils.escape(styles) + \"\\\"\";\n    }\n\n    var escaped = utils.escape(this.value);\n    if (needsSpan) {\n        markup += \">\";\n        markup += escaped;\n        markup += \"</span>\";\n        return markup;\n    } else {\n        return escaped;\n    }\n};\n\nmodule.exports = {\n    span: span,\n    documentFragment: documentFragment,\n    symbolNode: symbolNode,\n};\n","/* eslint no-unused-vars:0 */\n\nvar Style = require(\"./Style\");\n\n/**\n * This file contains metrics regarding fonts and individual symbols. The sigma\n * and xi variables, as well as the metricMap map contain data extracted from\n * TeX, TeX font metrics, and the TTF files. These data are then exposed via the\n * `metrics` variable and the getCharacterMetrics function.\n */\n\n// These font metrics are extracted from TeX by using\n// \\font\\a=cmmi10\n// \\showthe\\fontdimenX\\a\n// where X is the corresponding variable number. These correspond to the font\n// parameters of the symbol fonts. In TeX, there are actually three sets of\n// dimensions, one for each of textstyle, scriptstyle, and scriptscriptstyle,\n// but we only use the textstyle ones, and scale certain dimensions accordingly.\n// See the TeXbook, page 441.\nvar sigma1 = 0.025;\nvar sigma2 = 0;\nvar sigma3 = 0;\nvar sigma4 = 0;\nvar sigma5 = 0.431;\nvar sigma6 = 1;\nvar sigma7 = 0;\nvar sigma8 = 0.677;\nvar sigma9 = 0.394;\nvar sigma10 = 0.444;\nvar sigma11 = 0.686;\nvar sigma12 = 0.345;\nvar sigma13 = 0.413;\nvar sigma14 = 0.363;\nvar sigma15 = 0.289;\nvar sigma16 = 0.150;\nvar sigma17 = 0.247;\nvar sigma18 = 0.386;\nvar sigma19 = 0.050;\nvar sigma20 = 2.390;\nvar sigma21 = 1.01;\nvar sigma21Script = 0.81;\nvar sigma21ScriptScript = 0.71;\nvar sigma22 = 0.250;\n\n// These font metrics are extracted from TeX by using\n// \\font\\a=cmex10\n// \\showthe\\fontdimenX\\a\n// where X is the corresponding variable number. These correspond to the font\n// parameters of the extension fonts (family 3). See the TeXbook, page 441.\nvar xi1 = 0;\nvar xi2 = 0;\nvar xi3 = 0;\nvar xi4 = 0;\nvar xi5 = 0.431;\nvar xi6 = 1;\nvar xi7 = 0;\nvar xi8 = 0.04;\nvar xi9 = 0.111;\nvar xi10 = 0.166;\nvar xi11 = 0.2;\nvar xi12 = 0.6;\nvar xi13 = 0.1;\n\n// This value determines how large a pt is, for metrics which are defined in\n// terms of pts.\n// This value is also used in katex.less; if you change it make sure the values\n// match.\nvar ptPerEm = 10.0;\n\n// The space between adjacent `|` columns in an array definition. From\n// `\\showthe\\doublerulesep` in LaTeX.\nvar doubleRuleSep = 2.0 / ptPerEm;\n\n/**\n * This is just a mapping from common names to real metrics\n */\nvar metrics = {\n    xHeight: sigma5,\n    quad: sigma6,\n    num1: sigma8,\n    num2: sigma9,\n    num3: sigma10,\n    denom1: sigma11,\n    denom2: sigma12,\n    sup1: sigma13,\n    sup2: sigma14,\n    sup3: sigma15,\n    sub1: sigma16,\n    sub2: sigma17,\n    supDrop: sigma18,\n    subDrop: sigma19,\n    axisHeight: sigma22,\n    defaultRuleThickness: xi8,\n    bigOpSpacing1: xi9,\n    bigOpSpacing2: xi10,\n    bigOpSpacing3: xi11,\n    bigOpSpacing4: xi12,\n    bigOpSpacing5: xi13,\n    ptPerEm: ptPerEm,\n    emPerEx: sigma5 / sigma6,\n    doubleRuleSep: doubleRuleSep,\n\n    // TODO(alpert): Missing parallel structure here. We should probably add\n    // style-specific metrics for all of these.\n    delim1: sigma20,\n    getDelim2: function(style) {\n        if (style.size === Style.TEXT.size) {\n            return sigma21;\n        } else if (style.size === Style.SCRIPT.size) {\n            return sigma21Script;\n        } else if (style.size === Style.SCRIPTSCRIPT.size) {\n            return sigma21ScriptScript;\n        }\n        throw new Error(\"Unexpected style size: \" + style.size);\n    },\n};\n\n// This map contains a mapping from font name and character code to character\n// metrics, including height, depth, italic correction, and skew (kern from the\n// character to the corresponding \\skewchar)\n// This map is generated via `make metrics`. It should not be changed manually.\nvar metricMap = require(\"./fontMetricsData\");\n\n/**\n * This function is a convenience function for looking up information in the\n * metricMap table. It takes a character as a string, and a style.\n *\n * Note: the `width` property may be undefined if fontMetricsData.js wasn't\n * built using `Make extended_metrics`.\n */\nvar getCharacterMetrics = function(character, style) {\n    var metrics = metricMap[style][character.charCodeAt(0)];\n    if (metrics) {\n        return {\n            depth: metrics[0],\n            height: metrics[1],\n            italic: metrics[2],\n            skew: metrics[3],\n            width: metrics[4],\n        };\n    }\n};\n\nmodule.exports = {\n    metrics: metrics,\n    getCharacterMetrics: getCharacterMetrics,\n};\n","module.exports = {\n    \"AMS-Regular\": {\n        \"65\": [0, 0.68889, 0, 0],\n        \"66\": [0, 0.68889, 0, 0],\n        \"67\": [0, 0.68889, 0, 0],\n        \"68\": [0, 0.68889, 0, 0],\n        \"69\": [0, 0.68889, 0, 0],\n        \"70\": [0, 0.68889, 0, 0],\n        \"71\": [0, 0.68889, 0, 0],\n        \"72\": [0, 0.68889, 0, 0],\n        \"73\": [0, 0.68889, 0, 0],\n        \"74\": [0.16667, 0.68889, 0, 0],\n        \"75\": [0, 0.68889, 0, 0],\n        \"76\": [0, 0.68889, 0, 0],\n        \"77\": [0, 0.68889, 0, 0],\n        \"78\": [0, 0.68889, 0, 0],\n        \"79\": [0.16667, 0.68889, 0, 0],\n        \"80\": [0, 0.68889, 0, 0],\n        \"81\": [0.16667, 0.68889, 0, 0],\n        \"82\": [0, 0.68889, 0, 0],\n        \"83\": [0, 0.68889, 0, 0],\n        \"84\": [0, 0.68889, 0, 0],\n        \"85\": [0, 0.68889, 0, 0],\n        \"86\": [0, 0.68889, 0, 0],\n        \"87\": [0, 0.68889, 0, 0],\n        \"88\": [0, 0.68889, 0, 0],\n        \"89\": [0, 0.68889, 0, 0],\n        \"90\": [0, 0.68889, 0, 0],\n        \"107\": [0, 0.68889, 0, 0],\n        \"165\": [0, 0.675, 0.025, 0],\n        \"174\": [0.15559, 0.69224, 0, 0],\n        \"240\": [0, 0.68889, 0, 0],\n        \"295\": [0, 0.68889, 0, 0],\n        \"710\": [0, 0.825, 0, 0],\n        \"732\": [0, 0.9, 0, 0],\n        \"770\": [0, 0.825, 0, 0],\n        \"771\": [0, 0.9, 0, 0],\n        \"989\": [0.08167, 0.58167, 0, 0],\n        \"1008\": [0, 0.43056, 0.04028, 0],\n        \"8245\": [0, 0.54986, 0, 0],\n        \"8463\": [0, 0.68889, 0, 0],\n        \"8487\": [0, 0.68889, 0, 0],\n        \"8498\": [0, 0.68889, 0, 0],\n        \"8502\": [0, 0.68889, 0, 0],\n        \"8503\": [0, 0.68889, 0, 0],\n        \"8504\": [0, 0.68889, 0, 0],\n        \"8513\": [0, 0.68889, 0, 0],\n        \"8592\": [-0.03598, 0.46402, 0, 0],\n        \"8594\": [-0.03598, 0.46402, 0, 0],\n        \"8602\": [-0.13313, 0.36687, 0, 0],\n        \"8603\": [-0.13313, 0.36687, 0, 0],\n        \"8606\": [0.01354, 0.52239, 0, 0],\n        \"8608\": [0.01354, 0.52239, 0, 0],\n        \"8610\": [0.01354, 0.52239, 0, 0],\n        \"8611\": [0.01354, 0.52239, 0, 0],\n        \"8619\": [0, 0.54986, 0, 0],\n        \"8620\": [0, 0.54986, 0, 0],\n        \"8621\": [-0.13313, 0.37788, 0, 0],\n        \"8622\": [-0.13313, 0.36687, 0, 0],\n        \"8624\": [0, 0.69224, 0, 0],\n        \"8625\": [0, 0.69224, 0, 0],\n        \"8630\": [0, 0.43056, 0, 0],\n        \"8631\": [0, 0.43056, 0, 0],\n        \"8634\": [0.08198, 0.58198, 0, 0],\n        \"8635\": [0.08198, 0.58198, 0, 0],\n        \"8638\": [0.19444, 0.69224, 0, 0],\n        \"8639\": [0.19444, 0.69224, 0, 0],\n        \"8642\": [0.19444, 0.69224, 0, 0],\n        \"8643\": [0.19444, 0.69224, 0, 0],\n        \"8644\": [0.1808, 0.675, 0, 0],\n        \"8646\": [0.1808, 0.675, 0, 0],\n        \"8647\": [0.1808, 0.675, 0, 0],\n        \"8648\": [0.19444, 0.69224, 0, 0],\n        \"8649\": [0.1808, 0.675, 0, 0],\n        \"8650\": [0.19444, 0.69224, 0, 0],\n        \"8651\": [0.01354, 0.52239, 0, 0],\n        \"8652\": [0.01354, 0.52239, 0, 0],\n        \"8653\": [-0.13313, 0.36687, 0, 0],\n        \"8654\": [-0.13313, 0.36687, 0, 0],\n        \"8655\": [-0.13313, 0.36687, 0, 0],\n        \"8666\": [0.13667, 0.63667, 0, 0],\n        \"8667\": [0.13667, 0.63667, 0, 0],\n        \"8669\": [-0.13313, 0.37788, 0, 0],\n        \"8672\": [-0.064, 0.437, 0, 0],\n        \"8674\": [-0.064, 0.437, 0, 0],\n        \"8705\": [0, 0.825, 0, 0],\n        \"8708\": [0, 0.68889, 0, 0],\n        \"8709\": [0.08167, 0.58167, 0, 0],\n        \"8717\": [0, 0.43056, 0, 0],\n        \"8722\": [-0.03598, 0.46402, 0, 0],\n        \"8724\": [0.08198, 0.69224, 0, 0],\n        \"8726\": [0.08167, 0.58167, 0, 0],\n        \"8733\": [0, 0.69224, 0, 0],\n        \"8736\": [0, 0.69224, 0, 0],\n        \"8737\": [0, 0.69224, 0, 0],\n        \"8738\": [0.03517, 0.52239, 0, 0],\n        \"8739\": [0.08167, 0.58167, 0, 0],\n        \"8740\": [0.25142, 0.74111, 0, 0],\n        \"8741\": [0.08167, 0.58167, 0, 0],\n        \"8742\": [0.25142, 0.74111, 0, 0],\n        \"8756\": [0, 0.69224, 0, 0],\n        \"8757\": [0, 0.69224, 0, 0],\n        \"8764\": [-0.13313, 0.36687, 0, 0],\n        \"8765\": [-0.13313, 0.37788, 0, 0],\n        \"8769\": [-0.13313, 0.36687, 0, 0],\n        \"8770\": [-0.03625, 0.46375, 0, 0],\n        \"8774\": [0.30274, 0.79383, 0, 0],\n        \"8776\": [-0.01688, 0.48312, 0, 0],\n        \"8778\": [0.08167, 0.58167, 0, 0],\n        \"8782\": [0.06062, 0.54986, 0, 0],\n        \"8783\": [0.06062, 0.54986, 0, 0],\n        \"8785\": [0.08198, 0.58198, 0, 0],\n        \"8786\": [0.08198, 0.58198, 0, 0],\n        \"8787\": [0.08198, 0.58198, 0, 0],\n        \"8790\": [0, 0.69224, 0, 0],\n        \"8791\": [0.22958, 0.72958, 0, 0],\n        \"8796\": [0.08198, 0.91667, 0, 0],\n        \"8806\": [0.25583, 0.75583, 0, 0],\n        \"8807\": [0.25583, 0.75583, 0, 0],\n        \"8808\": [0.25142, 0.75726, 0, 0],\n        \"8809\": [0.25142, 0.75726, 0, 0],\n        \"8812\": [0.25583, 0.75583, 0, 0],\n        \"8814\": [0.20576, 0.70576, 0, 0],\n        \"8815\": [0.20576, 0.70576, 0, 0],\n        \"8816\": [0.30274, 0.79383, 0, 0],\n        \"8817\": [0.30274, 0.79383, 0, 0],\n        \"8818\": [0.22958, 0.72958, 0, 0],\n        \"8819\": [0.22958, 0.72958, 0, 0],\n        \"8822\": [0.1808, 0.675, 0, 0],\n        \"8823\": [0.1808, 0.675, 0, 0],\n        \"8828\": [0.13667, 0.63667, 0, 0],\n        \"8829\": [0.13667, 0.63667, 0, 0],\n        \"8830\": [0.22958, 0.72958, 0, 0],\n        \"8831\": [0.22958, 0.72958, 0, 0],\n        \"8832\": [0.20576, 0.70576, 0, 0],\n        \"8833\": [0.20576, 0.70576, 0, 0],\n        \"8840\": [0.30274, 0.79383, 0, 0],\n        \"8841\": [0.30274, 0.79383, 0, 0],\n        \"8842\": [0.13597, 0.63597, 0, 0],\n        \"8843\": [0.13597, 0.63597, 0, 0],\n        \"8847\": [0.03517, 0.54986, 0, 0],\n        \"8848\": [0.03517, 0.54986, 0, 0],\n        \"8858\": [0.08198, 0.58198, 0, 0],\n        \"8859\": [0.08198, 0.58198, 0, 0],\n        \"8861\": [0.08198, 0.58198, 0, 0],\n        \"8862\": [0, 0.675, 0, 0],\n        \"8863\": [0, 0.675, 0, 0],\n        \"8864\": [0, 0.675, 0, 0],\n        \"8865\": [0, 0.675, 0, 0],\n        \"8872\": [0, 0.69224, 0, 0],\n        \"8873\": [0, 0.69224, 0, 0],\n        \"8874\": [0, 0.69224, 0, 0],\n        \"8876\": [0, 0.68889, 0, 0],\n        \"8877\": [0, 0.68889, 0, 0],\n        \"8878\": [0, 0.68889, 0, 0],\n        \"8879\": [0, 0.68889, 0, 0],\n        \"8882\": [0.03517, 0.54986, 0, 0],\n        \"8883\": [0.03517, 0.54986, 0, 0],\n        \"8884\": [0.13667, 0.63667, 0, 0],\n        \"8885\": [0.13667, 0.63667, 0, 0],\n        \"8888\": [0, 0.54986, 0, 0],\n        \"8890\": [0.19444, 0.43056, 0, 0],\n        \"8891\": [0.19444, 0.69224, 0, 0],\n        \"8892\": [0.19444, 0.69224, 0, 0],\n        \"8901\": [0, 0.54986, 0, 0],\n        \"8903\": [0.08167, 0.58167, 0, 0],\n        \"8905\": [0.08167, 0.58167, 0, 0],\n        \"8906\": [0.08167, 0.58167, 0, 0],\n        \"8907\": [0, 0.69224, 0, 0],\n        \"8908\": [0, 0.69224, 0, 0],\n        \"8909\": [-0.03598, 0.46402, 0, 0],\n        \"8910\": [0, 0.54986, 0, 0],\n        \"8911\": [0, 0.54986, 0, 0],\n        \"8912\": [0.03517, 0.54986, 0, 0],\n        \"8913\": [0.03517, 0.54986, 0, 0],\n        \"8914\": [0, 0.54986, 0, 0],\n        \"8915\": [0, 0.54986, 0, 0],\n        \"8916\": [0, 0.69224, 0, 0],\n        \"8918\": [0.0391, 0.5391, 0, 0],\n        \"8919\": [0.0391, 0.5391, 0, 0],\n        \"8920\": [0.03517, 0.54986, 0, 0],\n        \"8921\": [0.03517, 0.54986, 0, 0],\n        \"8922\": [0.38569, 0.88569, 0, 0],\n        \"8923\": [0.38569, 0.88569, 0, 0],\n        \"8926\": [0.13667, 0.63667, 0, 0],\n        \"8927\": [0.13667, 0.63667, 0, 0],\n        \"8928\": [0.30274, 0.79383, 0, 0],\n        \"8929\": [0.30274, 0.79383, 0, 0],\n        \"8934\": [0.23222, 0.74111, 0, 0],\n        \"8935\": [0.23222, 0.74111, 0, 0],\n        \"8936\": [0.23222, 0.74111, 0, 0],\n        \"8937\": [0.23222, 0.74111, 0, 0],\n        \"8938\": [0.20576, 0.70576, 0, 0],\n        \"8939\": [0.20576, 0.70576, 0, 0],\n        \"8940\": [0.30274, 0.79383, 0, 0],\n        \"8941\": [0.30274, 0.79383, 0, 0],\n        \"8994\": [0.19444, 0.69224, 0, 0],\n        \"8995\": [0.19444, 0.69224, 0, 0],\n        \"9416\": [0.15559, 0.69224, 0, 0],\n        \"9484\": [0, 0.69224, 0, 0],\n        \"9488\": [0, 0.69224, 0, 0],\n        \"9492\": [0, 0.37788, 0, 0],\n        \"9496\": [0, 0.37788, 0, 0],\n        \"9585\": [0.19444, 0.68889, 0, 0],\n        \"9586\": [0.19444, 0.74111, 0, 0],\n        \"9632\": [0, 0.675, 0, 0],\n        \"9633\": [0, 0.675, 0, 0],\n        \"9650\": [0, 0.54986, 0, 0],\n        \"9651\": [0, 0.54986, 0, 0],\n        \"9654\": [0.03517, 0.54986, 0, 0],\n        \"9660\": [0, 0.54986, 0, 0],\n        \"9661\": [0, 0.54986, 0, 0],\n        \"9664\": [0.03517, 0.54986, 0, 0],\n        \"9674\": [0.11111, 0.69224, 0, 0],\n        \"9733\": [0.19444, 0.69224, 0, 0],\n        \"10003\": [0, 0.69224, 0, 0],\n        \"10016\": [0, 0.69224, 0, 0],\n        \"10731\": [0.11111, 0.69224, 0, 0],\n        \"10846\": [0.19444, 0.75583, 0, 0],\n        \"10877\": [0.13667, 0.63667, 0, 0],\n        \"10878\": [0.13667, 0.63667, 0, 0],\n        \"10885\": [0.25583, 0.75583, 0, 0],\n        \"10886\": [0.25583, 0.75583, 0, 0],\n        \"10887\": [0.13597, 0.63597, 0, 0],\n        \"10888\": [0.13597, 0.63597, 0, 0],\n        \"10889\": [0.26167, 0.75726, 0, 0],\n        \"10890\": [0.26167, 0.75726, 0, 0],\n        \"10891\": [0.48256, 0.98256, 0, 0],\n        \"10892\": [0.48256, 0.98256, 0, 0],\n        \"10901\": [0.13667, 0.63667, 0, 0],\n        \"10902\": [0.13667, 0.63667, 0, 0],\n        \"10933\": [0.25142, 0.75726, 0, 0],\n        \"10934\": [0.25142, 0.75726, 0, 0],\n        \"10935\": [0.26167, 0.75726, 0, 0],\n        \"10936\": [0.26167, 0.75726, 0, 0],\n        \"10937\": [0.26167, 0.75726, 0, 0],\n        \"10938\": [0.26167, 0.75726, 0, 0],\n        \"10949\": [0.25583, 0.75583, 0, 0],\n        \"10950\": [0.25583, 0.75583, 0, 0],\n        \"10955\": [0.28481, 0.79383, 0, 0],\n        \"10956\": [0.28481, 0.79383, 0, 0],\n        \"57350\": [0.08167, 0.58167, 0, 0],\n        \"57351\": [0.08167, 0.58167, 0, 0],\n        \"57352\": [0.08167, 0.58167, 0, 0],\n        \"57353\": [0, 0.43056, 0.04028, 0],\n        \"57356\": [0.25142, 0.75726, 0, 0],\n        \"57357\": [0.25142, 0.75726, 0, 0],\n        \"57358\": [0.41951, 0.91951, 0, 0],\n        \"57359\": [0.30274, 0.79383, 0, 0],\n        \"57360\": [0.30274, 0.79383, 0, 0],\n        \"57361\": [0.41951, 0.91951, 0, 0],\n        \"57366\": [0.25142, 0.75726, 0, 0],\n        \"57367\": [0.25142, 0.75726, 0, 0],\n        \"57368\": [0.25142, 0.75726, 0, 0],\n        \"57369\": [0.25142, 0.75726, 0, 0],\n        \"57370\": [0.13597, 0.63597, 0, 0],\n        \"57371\": [0.13597, 0.63597, 0, 0],\n    },\n    \"Caligraphic-Regular\": {\n        \"48\": [0, 0.43056, 0, 0],\n        \"49\": [0, 0.43056, 0, 0],\n        \"50\": [0, 0.43056, 0, 0],\n        \"51\": [0.19444, 0.43056, 0, 0],\n        \"52\": [0.19444, 0.43056, 0, 0],\n        \"53\": [0.19444, 0.43056, 0, 0],\n        \"54\": [0, 0.64444, 0, 0],\n        \"55\": [0.19444, 0.43056, 0, 0],\n        \"56\": [0, 0.64444, 0, 0],\n        \"57\": [0.19444, 0.43056, 0, 0],\n        \"65\": [0, 0.68333, 0, 0.19445],\n        \"66\": [0, 0.68333, 0.03041, 0.13889],\n        \"67\": [0, 0.68333, 0.05834, 0.13889],\n        \"68\": [0, 0.68333, 0.02778, 0.08334],\n        \"69\": [0, 0.68333, 0.08944, 0.11111],\n        \"70\": [0, 0.68333, 0.09931, 0.11111],\n        \"71\": [0.09722, 0.68333, 0.0593, 0.11111],\n        \"72\": [0, 0.68333, 0.00965, 0.11111],\n        \"73\": [0, 0.68333, 0.07382, 0],\n        \"74\": [0.09722, 0.68333, 0.18472, 0.16667],\n        \"75\": [0, 0.68333, 0.01445, 0.05556],\n        \"76\": [0, 0.68333, 0, 0.13889],\n        \"77\": [0, 0.68333, 0, 0.13889],\n        \"78\": [0, 0.68333, 0.14736, 0.08334],\n        \"79\": [0, 0.68333, 0.02778, 0.11111],\n        \"80\": [0, 0.68333, 0.08222, 0.08334],\n        \"81\": [0.09722, 0.68333, 0, 0.11111],\n        \"82\": [0, 0.68333, 0, 0.08334],\n        \"83\": [0, 0.68333, 0.075, 0.13889],\n        \"84\": [0, 0.68333, 0.25417, 0],\n        \"85\": [0, 0.68333, 0.09931, 0.08334],\n        \"86\": [0, 0.68333, 0.08222, 0],\n        \"87\": [0, 0.68333, 0.08222, 0.08334],\n        \"88\": [0, 0.68333, 0.14643, 0.13889],\n        \"89\": [0.09722, 0.68333, 0.08222, 0.08334],\n        \"90\": [0, 0.68333, 0.07944, 0.13889],\n    },\n    \"Fraktur-Regular\": {\n        \"33\": [0, 0.69141, 0, 0],\n        \"34\": [0, 0.69141, 0, 0],\n        \"38\": [0, 0.69141, 0, 0],\n        \"39\": [0, 0.69141, 0, 0],\n        \"40\": [0.24982, 0.74947, 0, 0],\n        \"41\": [0.24982, 0.74947, 0, 0],\n        \"42\": [0, 0.62119, 0, 0],\n        \"43\": [0.08319, 0.58283, 0, 0],\n        \"44\": [0, 0.10803, 0, 0],\n        \"45\": [0.08319, 0.58283, 0, 0],\n        \"46\": [0, 0.10803, 0, 0],\n        \"47\": [0.24982, 0.74947, 0, 0],\n        \"48\": [0, 0.47534, 0, 0],\n        \"49\": [0, 0.47534, 0, 0],\n        \"50\": [0, 0.47534, 0, 0],\n        \"51\": [0.18906, 0.47534, 0, 0],\n        \"52\": [0.18906, 0.47534, 0, 0],\n        \"53\": [0.18906, 0.47534, 0, 0],\n        \"54\": [0, 0.69141, 0, 0],\n        \"55\": [0.18906, 0.47534, 0, 0],\n        \"56\": [0, 0.69141, 0, 0],\n        \"57\": [0.18906, 0.47534, 0, 0],\n        \"58\": [0, 0.47534, 0, 0],\n        \"59\": [0.12604, 0.47534, 0, 0],\n        \"61\": [-0.13099, 0.36866, 0, 0],\n        \"63\": [0, 0.69141, 0, 0],\n        \"65\": [0, 0.69141, 0, 0],\n        \"66\": [0, 0.69141, 0, 0],\n        \"67\": [0, 0.69141, 0, 0],\n        \"68\": [0, 0.69141, 0, 0],\n        \"69\": [0, 0.69141, 0, 0],\n        \"70\": [0.12604, 0.69141, 0, 0],\n        \"71\": [0, 0.69141, 0, 0],\n        \"72\": [0.06302, 0.69141, 0, 0],\n        \"73\": [0, 0.69141, 0, 0],\n        \"74\": [0.12604, 0.69141, 0, 0],\n        \"75\": [0, 0.69141, 0, 0],\n        \"76\": [0, 0.69141, 0, 0],\n        \"77\": [0, 0.69141, 0, 0],\n        \"78\": [0, 0.69141, 0, 0],\n        \"79\": [0, 0.69141, 0, 0],\n        \"80\": [0.18906, 0.69141, 0, 0],\n        \"81\": [0.03781, 0.69141, 0, 0],\n        \"82\": [0, 0.69141, 0, 0],\n        \"83\": [0, 0.69141, 0, 0],\n        \"84\": [0, 0.69141, 0, 0],\n        \"85\": [0, 0.69141, 0, 0],\n        \"86\": [0, 0.69141, 0, 0],\n        \"87\": [0, 0.69141, 0, 0],\n        \"88\": [0, 0.69141, 0, 0],\n        \"89\": [0.18906, 0.69141, 0, 0],\n        \"90\": [0.12604, 0.69141, 0, 0],\n        \"91\": [0.24982, 0.74947, 0, 0],\n        \"93\": [0.24982, 0.74947, 0, 0],\n        \"94\": [0, 0.69141, 0, 0],\n        \"97\": [0, 0.47534, 0, 0],\n        \"98\": [0, 0.69141, 0, 0],\n        \"99\": [0, 0.47534, 0, 0],\n        \"100\": [0, 0.62119, 0, 0],\n        \"101\": [0, 0.47534, 0, 0],\n        \"102\": [0.18906, 0.69141, 0, 0],\n        \"103\": [0.18906, 0.47534, 0, 0],\n        \"104\": [0.18906, 0.69141, 0, 0],\n        \"105\": [0, 0.69141, 0, 0],\n        \"106\": [0, 0.69141, 0, 0],\n        \"107\": [0, 0.69141, 0, 0],\n        \"108\": [0, 0.69141, 0, 0],\n        \"109\": [0, 0.47534, 0, 0],\n        \"110\": [0, 0.47534, 0, 0],\n        \"111\": [0, 0.47534, 0, 0],\n        \"112\": [0.18906, 0.52396, 0, 0],\n        \"113\": [0.18906, 0.47534, 0, 0],\n        \"114\": [0, 0.47534, 0, 0],\n        \"115\": [0, 0.47534, 0, 0],\n        \"116\": [0, 0.62119, 0, 0],\n        \"117\": [0, 0.47534, 0, 0],\n        \"118\": [0, 0.52396, 0, 0],\n        \"119\": [0, 0.52396, 0, 0],\n        \"120\": [0.18906, 0.47534, 0, 0],\n        \"121\": [0.18906, 0.47534, 0, 0],\n        \"122\": [0.18906, 0.47534, 0, 0],\n        \"8216\": [0, 0.69141, 0, 0],\n        \"8217\": [0, 0.69141, 0, 0],\n        \"58112\": [0, 0.62119, 0, 0],\n        \"58113\": [0, 0.62119, 0, 0],\n        \"58114\": [0.18906, 0.69141, 0, 0],\n        \"58115\": [0.18906, 0.69141, 0, 0],\n        \"58116\": [0.18906, 0.47534, 0, 0],\n        \"58117\": [0, 0.69141, 0, 0],\n        \"58118\": [0, 0.62119, 0, 0],\n        \"58119\": [0, 0.47534, 0, 0],\n    },\n    \"Main-Bold\": {\n        \"33\": [0, 0.69444, 0, 0],\n        \"34\": [0, 0.69444, 0, 0],\n        \"35\": [0.19444, 0.69444, 0, 0],\n        \"36\": [0.05556, 0.75, 0, 0],\n        \"37\": [0.05556, 0.75, 0, 0],\n        \"38\": [0, 0.69444, 0, 0],\n        \"39\": [0, 0.69444, 0, 0],\n        \"40\": [0.25, 0.75, 0, 0],\n        \"41\": [0.25, 0.75, 0, 0],\n        \"42\": [0, 0.75, 0, 0],\n        \"43\": [0.13333, 0.63333, 0, 0],\n        \"44\": [0.19444, 0.15556, 0, 0],\n        \"45\": [0, 0.44444, 0, 0],\n        \"46\": [0, 0.15556, 0, 0],\n        \"47\": [0.25, 0.75, 0, 0],\n        \"48\": [0, 0.64444, 0, 0],\n        \"49\": [0, 0.64444, 0, 0],\n        \"50\": [0, 0.64444, 0, 0],\n        \"51\": [0, 0.64444, 0, 0],\n        \"52\": [0, 0.64444, 0, 0],\n        \"53\": [0, 0.64444, 0, 0],\n        \"54\": [0, 0.64444, 0, 0],\n        \"55\": [0, 0.64444, 0, 0],\n        \"56\": [0, 0.64444, 0, 0],\n        \"57\": [0, 0.64444, 0, 0],\n        \"58\": [0, 0.44444, 0, 0],\n        \"59\": [0.19444, 0.44444, 0, 0],\n        \"60\": [0.08556, 0.58556, 0, 0],\n        \"61\": [-0.10889, 0.39111, 0, 0],\n        \"62\": [0.08556, 0.58556, 0, 0],\n        \"63\": [0, 0.69444, 0, 0],\n        \"64\": [0, 0.69444, 0, 0],\n        \"65\": [0, 0.68611, 0, 0],\n        \"66\": [0, 0.68611, 0, 0],\n        \"67\": [0, 0.68611, 0, 0],\n        \"68\": [0, 0.68611, 0, 0],\n        \"69\": [0, 0.68611, 0, 0],\n        \"70\": [0, 0.68611, 0, 0],\n        \"71\": [0, 0.68611, 0, 0],\n        \"72\": [0, 0.68611, 0, 0],\n        \"73\": [0, 0.68611, 0, 0],\n        \"74\": [0, 0.68611, 0, 0],\n        \"75\": [0, 0.68611, 0, 0],\n        \"76\": [0, 0.68611, 0, 0],\n        \"77\": [0, 0.68611, 0, 0],\n        \"78\": [0, 0.68611, 0, 0],\n        \"79\": [0, 0.68611, 0, 0],\n        \"80\": [0, 0.68611, 0, 0],\n        \"81\": [0.19444, 0.68611, 0, 0],\n        \"82\": [0, 0.68611, 0, 0],\n        \"83\": [0, 0.68611, 0, 0],\n        \"84\": [0, 0.68611, 0, 0],\n        \"85\": [0, 0.68611, 0, 0],\n        \"86\": [0, 0.68611, 0.01597, 0],\n        \"87\": [0, 0.68611, 0.01597, 0],\n        \"88\": [0, 0.68611, 0, 0],\n        \"89\": [0, 0.68611, 0.02875, 0],\n        \"90\": [0, 0.68611, 0, 0],\n        \"91\": [0.25, 0.75, 0, 0],\n        \"92\": [0.25, 0.75, 0, 0],\n        \"93\": [0.25, 0.75, 0, 0],\n        \"94\": [0, 0.69444, 0, 0],\n        \"95\": [0.31, 0.13444, 0.03194, 0],\n        \"96\": [0, 0.69444, 0, 0],\n        \"97\": [0, 0.44444, 0, 0],\n        \"98\": [0, 0.69444, 0, 0],\n        \"99\": [0, 0.44444, 0, 0],\n        \"100\": [0, 0.69444, 0, 0],\n        \"101\": [0, 0.44444, 0, 0],\n        \"102\": [0, 0.69444, 0.10903, 0],\n        \"103\": [0.19444, 0.44444, 0.01597, 0],\n        \"104\": [0, 0.69444, 0, 0],\n        \"105\": [0, 0.69444, 0, 0],\n        \"106\": [0.19444, 0.69444, 0, 0],\n        \"107\": [0, 0.69444, 0, 0],\n        \"108\": [0, 0.69444, 0, 0],\n        \"109\": [0, 0.44444, 0, 0],\n        \"110\": [0, 0.44444, 0, 0],\n        \"111\": [0, 0.44444, 0, 0],\n        \"112\": [0.19444, 0.44444, 0, 0],\n        \"113\": [0.19444, 0.44444, 0, 0],\n        \"114\": [0, 0.44444, 0, 0],\n        \"115\": [0, 0.44444, 0, 0],\n        \"116\": [0, 0.63492, 0, 0],\n        \"117\": [0, 0.44444, 0, 0],\n        \"118\": [0, 0.44444, 0.01597, 0],\n        \"119\": [0, 0.44444, 0.01597, 0],\n        \"120\": [0, 0.44444, 0, 0],\n        \"121\": [0.19444, 0.44444, 0.01597, 0],\n        \"122\": [0, 0.44444, 0, 0],\n        \"123\": [0.25, 0.75, 0, 0],\n        \"124\": [0.25, 0.75, 0, 0],\n        \"125\": [0.25, 0.75, 0, 0],\n        \"126\": [0.35, 0.34444, 0, 0],\n        \"168\": [0, 0.69444, 0, 0],\n        \"172\": [0, 0.44444, 0, 0],\n        \"175\": [0, 0.59611, 0, 0],\n        \"176\": [0, 0.69444, 0, 0],\n        \"177\": [0.13333, 0.63333, 0, 0],\n        \"180\": [0, 0.69444, 0, 0],\n        \"215\": [0.13333, 0.63333, 0, 0],\n        \"247\": [0.13333, 0.63333, 0, 0],\n        \"305\": [0, 0.44444, 0, 0],\n        \"567\": [0.19444, 0.44444, 0, 0],\n        \"710\": [0, 0.69444, 0, 0],\n        \"711\": [0, 0.63194, 0, 0],\n        \"713\": [0, 0.59611, 0, 0],\n        \"714\": [0, 0.69444, 0, 0],\n        \"715\": [0, 0.69444, 0, 0],\n        \"728\": [0, 0.69444, 0, 0],\n        \"729\": [0, 0.69444, 0, 0],\n        \"730\": [0, 0.69444, 0, 0],\n        \"732\": [0, 0.69444, 0, 0],\n        \"768\": [0, 0.69444, 0, 0],\n        \"769\": [0, 0.69444, 0, 0],\n        \"770\": [0, 0.69444, 0, 0],\n        \"771\": [0, 0.69444, 0, 0],\n        \"772\": [0, 0.59611, 0, 0],\n        \"774\": [0, 0.69444, 0, 0],\n        \"775\": [0, 0.69444, 0, 0],\n        \"776\": [0, 0.69444, 0, 0],\n        \"778\": [0, 0.69444, 0, 0],\n        \"779\": [0, 0.69444, 0, 0],\n        \"780\": [0, 0.63194, 0, 0],\n        \"824\": [0.19444, 0.69444, 0, 0],\n        \"915\": [0, 0.68611, 0, 0],\n        \"916\": [0, 0.68611, 0, 0],\n        \"920\": [0, 0.68611, 0, 0],\n        \"923\": [0, 0.68611, 0, 0],\n        \"926\": [0, 0.68611, 0, 0],\n        \"928\": [0, 0.68611, 0, 0],\n        \"931\": [0, 0.68611, 0, 0],\n        \"933\": [0, 0.68611, 0, 0],\n        \"934\": [0, 0.68611, 0, 0],\n        \"936\": [0, 0.68611, 0, 0],\n        \"937\": [0, 0.68611, 0, 0],\n        \"8211\": [0, 0.44444, 0.03194, 0],\n        \"8212\": [0, 0.44444, 0.03194, 0],\n        \"8216\": [0, 0.69444, 0, 0],\n        \"8217\": [0, 0.69444, 0, 0],\n        \"8220\": [0, 0.69444, 0, 0],\n        \"8221\": [0, 0.69444, 0, 0],\n        \"8224\": [0.19444, 0.69444, 0, 0],\n        \"8225\": [0.19444, 0.69444, 0, 0],\n        \"8242\": [0, 0.55556, 0, 0],\n        \"8407\": [0, 0.72444, 0.15486, 0],\n        \"8463\": [0, 0.69444, 0, 0],\n        \"8465\": [0, 0.69444, 0, 0],\n        \"8467\": [0, 0.69444, 0, 0],\n        \"8472\": [0.19444, 0.44444, 0, 0],\n        \"8476\": [0, 0.69444, 0, 0],\n        \"8501\": [0, 0.69444, 0, 0],\n        \"8592\": [-0.10889, 0.39111, 0, 0],\n        \"8593\": [0.19444, 0.69444, 0, 0],\n        \"8594\": [-0.10889, 0.39111, 0, 0],\n        \"8595\": [0.19444, 0.69444, 0, 0],\n        \"8596\": [-0.10889, 0.39111, 0, 0],\n        \"8597\": [0.25, 0.75, 0, 0],\n        \"8598\": [0.19444, 0.69444, 0, 0],\n        \"8599\": [0.19444, 0.69444, 0, 0],\n        \"8600\": [0.19444, 0.69444, 0, 0],\n        \"8601\": [0.19444, 0.69444, 0, 0],\n        \"8636\": [-0.10889, 0.39111, 0, 0],\n        \"8637\": [-0.10889, 0.39111, 0, 0],\n        \"8640\": [-0.10889, 0.39111, 0, 0],\n        \"8641\": [-0.10889, 0.39111, 0, 0],\n        \"8656\": [-0.10889, 0.39111, 0, 0],\n        \"8657\": [0.19444, 0.69444, 0, 0],\n        \"8658\": [-0.10889, 0.39111, 0, 0],\n        \"8659\": [0.19444, 0.69444, 0, 0],\n        \"8660\": [-0.10889, 0.39111, 0, 0],\n        \"8661\": [0.25, 0.75, 0, 0],\n        \"8704\": [0, 0.69444, 0, 0],\n        \"8706\": [0, 0.69444, 0.06389, 0],\n        \"8707\": [0, 0.69444, 0, 0],\n        \"8709\": [0.05556, 0.75, 0, 0],\n        \"8711\": [0, 0.68611, 0, 0],\n        \"8712\": [0.08556, 0.58556, 0, 0],\n        \"8715\": [0.08556, 0.58556, 0, 0],\n        \"8722\": [0.13333, 0.63333, 0, 0],\n        \"8723\": [0.13333, 0.63333, 0, 0],\n        \"8725\": [0.25, 0.75, 0, 0],\n        \"8726\": [0.25, 0.75, 0, 0],\n        \"8727\": [-0.02778, 0.47222, 0, 0],\n        \"8728\": [-0.02639, 0.47361, 0, 0],\n        \"8729\": [-0.02639, 0.47361, 0, 0],\n        \"8730\": [0.18, 0.82, 0, 0],\n        \"8733\": [0, 0.44444, 0, 0],\n        \"8734\": [0, 0.44444, 0, 0],\n        \"8736\": [0, 0.69224, 0, 0],\n        \"8739\": [0.25, 0.75, 0, 0],\n        \"8741\": [0.25, 0.75, 0, 0],\n        \"8743\": [0, 0.55556, 0, 0],\n        \"8744\": [0, 0.55556, 0, 0],\n        \"8745\": [0, 0.55556, 0, 0],\n        \"8746\": [0, 0.55556, 0, 0],\n        \"8747\": [0.19444, 0.69444, 0.12778, 0],\n        \"8764\": [-0.10889, 0.39111, 0, 0],\n        \"8768\": [0.19444, 0.69444, 0, 0],\n        \"8771\": [0.00222, 0.50222, 0, 0],\n        \"8776\": [0.02444, 0.52444, 0, 0],\n        \"8781\": [0.00222, 0.50222, 0, 0],\n        \"8801\": [0.00222, 0.50222, 0, 0],\n        \"8804\": [0.19667, 0.69667, 0, 0],\n        \"8805\": [0.19667, 0.69667, 0, 0],\n        \"8810\": [0.08556, 0.58556, 0, 0],\n        \"8811\": [0.08556, 0.58556, 0, 0],\n        \"8826\": [0.08556, 0.58556, 0, 0],\n        \"8827\": [0.08556, 0.58556, 0, 0],\n        \"8834\": [0.08556, 0.58556, 0, 0],\n        \"8835\": [0.08556, 0.58556, 0, 0],\n        \"8838\": [0.19667, 0.69667, 0, 0],\n        \"8839\": [0.19667, 0.69667, 0, 0],\n        \"8846\": [0, 0.55556, 0, 0],\n        \"8849\": [0.19667, 0.69667, 0, 0],\n        \"8850\": [0.19667, 0.69667, 0, 0],\n        \"8851\": [0, 0.55556, 0, 0],\n        \"8852\": [0, 0.55556, 0, 0],\n        \"8853\": [0.13333, 0.63333, 0, 0],\n        \"8854\": [0.13333, 0.63333, 0, 0],\n        \"8855\": [0.13333, 0.63333, 0, 0],\n        \"8856\": [0.13333, 0.63333, 0, 0],\n        \"8857\": [0.13333, 0.63333, 0, 0],\n        \"8866\": [0, 0.69444, 0, 0],\n        \"8867\": [0, 0.69444, 0, 0],\n        \"8868\": [0, 0.69444, 0, 0],\n        \"8869\": [0, 0.69444, 0, 0],\n        \"8900\": [-0.02639, 0.47361, 0, 0],\n        \"8901\": [-0.02639, 0.47361, 0, 0],\n        \"8902\": [-0.02778, 0.47222, 0, 0],\n        \"8968\": [0.25, 0.75, 0, 0],\n        \"8969\": [0.25, 0.75, 0, 0],\n        \"8970\": [0.25, 0.75, 0, 0],\n        \"8971\": [0.25, 0.75, 0, 0],\n        \"8994\": [-0.13889, 0.36111, 0, 0],\n        \"8995\": [-0.13889, 0.36111, 0, 0],\n        \"9651\": [0.19444, 0.69444, 0, 0],\n        \"9657\": [-0.02778, 0.47222, 0, 0],\n        \"9661\": [0.19444, 0.69444, 0, 0],\n        \"9667\": [-0.02778, 0.47222, 0, 0],\n        \"9711\": [0.19444, 0.69444, 0, 0],\n        \"9824\": [0.12963, 0.69444, 0, 0],\n        \"9825\": [0.12963, 0.69444, 0, 0],\n        \"9826\": [0.12963, 0.69444, 0, 0],\n        \"9827\": [0.12963, 0.69444, 0, 0],\n        \"9837\": [0, 0.75, 0, 0],\n        \"9838\": [0.19444, 0.69444, 0, 0],\n        \"9839\": [0.19444, 0.69444, 0, 0],\n        \"10216\": [0.25, 0.75, 0, 0],\n        \"10217\": [0.25, 0.75, 0, 0],\n        \"10815\": [0, 0.68611, 0, 0],\n        \"10927\": [0.19667, 0.69667, 0, 0],\n        \"10928\": [0.19667, 0.69667, 0, 0],\n    },\n    \"Main-Italic\": {\n        \"33\": [0, 0.69444, 0.12417, 0],\n        \"34\": [0, 0.69444, 0.06961, 0],\n        \"35\": [0.19444, 0.69444, 0.06616, 0],\n        \"37\": [0.05556, 0.75, 0.13639, 0],\n        \"38\": [0, 0.69444, 0.09694, 0],\n        \"39\": [0, 0.69444, 0.12417, 0],\n        \"40\": [0.25, 0.75, 0.16194, 0],\n        \"41\": [0.25, 0.75, 0.03694, 0],\n        \"42\": [0, 0.75, 0.14917, 0],\n        \"43\": [0.05667, 0.56167, 0.03694, 0],\n        \"44\": [0.19444, 0.10556, 0, 0],\n        \"45\": [0, 0.43056, 0.02826, 0],\n        \"46\": [0, 0.10556, 0, 0],\n        \"47\": [0.25, 0.75, 0.16194, 0],\n        \"48\": [0, 0.64444, 0.13556, 0],\n        \"49\": [0, 0.64444, 0.13556, 0],\n        \"50\": [0, 0.64444, 0.13556, 0],\n        \"51\": [0, 0.64444, 0.13556, 0],\n        \"52\": [0.19444, 0.64444, 0.13556, 0],\n        \"53\": [0, 0.64444, 0.13556, 0],\n        \"54\": [0, 0.64444, 0.13556, 0],\n        \"55\": [0.19444, 0.64444, 0.13556, 0],\n        \"56\": [0, 0.64444, 0.13556, 0],\n        \"57\": [0, 0.64444, 0.13556, 0],\n        \"58\": [0, 0.43056, 0.0582, 0],\n        \"59\": [0.19444, 0.43056, 0.0582, 0],\n        \"61\": [-0.13313, 0.36687, 0.06616, 0],\n        \"63\": [0, 0.69444, 0.1225, 0],\n        \"64\": [0, 0.69444, 0.09597, 0],\n        \"65\": [0, 0.68333, 0, 0],\n        \"66\": [0, 0.68333, 0.10257, 0],\n        \"67\": [0, 0.68333, 0.14528, 0],\n        \"68\": [0, 0.68333, 0.09403, 0],\n        \"69\": [0, 0.68333, 0.12028, 0],\n        \"70\": [0, 0.68333, 0.13305, 0],\n        \"71\": [0, 0.68333, 0.08722, 0],\n        \"72\": [0, 0.68333, 0.16389, 0],\n        \"73\": [0, 0.68333, 0.15806, 0],\n        \"74\": [0, 0.68333, 0.14028, 0],\n        \"75\": [0, 0.68333, 0.14528, 0],\n        \"76\": [0, 0.68333, 0, 0],\n        \"77\": [0, 0.68333, 0.16389, 0],\n        \"78\": [0, 0.68333, 0.16389, 0],\n        \"79\": [0, 0.68333, 0.09403, 0],\n        \"80\": [0, 0.68333, 0.10257, 0],\n        \"81\": [0.19444, 0.68333, 0.09403, 0],\n        \"82\": [0, 0.68333, 0.03868, 0],\n        \"83\": [0, 0.68333, 0.11972, 0],\n        \"84\": [0, 0.68333, 0.13305, 0],\n        \"85\": [0, 0.68333, 0.16389, 0],\n        \"86\": [0, 0.68333, 0.18361, 0],\n        \"87\": [0, 0.68333, 0.18361, 0],\n        \"88\": [0, 0.68333, 0.15806, 0],\n        \"89\": [0, 0.68333, 0.19383, 0],\n        \"90\": [0, 0.68333, 0.14528, 0],\n        \"91\": [0.25, 0.75, 0.1875, 0],\n        \"93\": [0.25, 0.75, 0.10528, 0],\n        \"94\": [0, 0.69444, 0.06646, 0],\n        \"95\": [0.31, 0.12056, 0.09208, 0],\n        \"97\": [0, 0.43056, 0.07671, 0],\n        \"98\": [0, 0.69444, 0.06312, 0],\n        \"99\": [0, 0.43056, 0.05653, 0],\n        \"100\": [0, 0.69444, 0.10333, 0],\n        \"101\": [0, 0.43056, 0.07514, 0],\n        \"102\": [0.19444, 0.69444, 0.21194, 0],\n        \"103\": [0.19444, 0.43056, 0.08847, 0],\n        \"104\": [0, 0.69444, 0.07671, 0],\n        \"105\": [0, 0.65536, 0.1019, 0],\n        \"106\": [0.19444, 0.65536, 0.14467, 0],\n        \"107\": [0, 0.69444, 0.10764, 0],\n        \"108\": [0, 0.69444, 0.10333, 0],\n        \"109\": [0, 0.43056, 0.07671, 0],\n        \"110\": [0, 0.43056, 0.07671, 0],\n        \"111\": [0, 0.43056, 0.06312, 0],\n        \"112\": [0.19444, 0.43056, 0.06312, 0],\n        \"113\": [0.19444, 0.43056, 0.08847, 0],\n        \"114\": [0, 0.43056, 0.10764, 0],\n        \"115\": [0, 0.43056, 0.08208, 0],\n        \"116\": [0, 0.61508, 0.09486, 0],\n        \"117\": [0, 0.43056, 0.07671, 0],\n        \"118\": [0, 0.43056, 0.10764, 0],\n        \"119\": [0, 0.43056, 0.10764, 0],\n        \"120\": [0, 0.43056, 0.12042, 0],\n        \"121\": [0.19444, 0.43056, 0.08847, 0],\n        \"122\": [0, 0.43056, 0.12292, 0],\n        \"126\": [0.35, 0.31786, 0.11585, 0],\n        \"163\": [0, 0.69444, 0, 0],\n        \"305\": [0, 0.43056, 0, 0.02778],\n        \"567\": [0.19444, 0.43056, 0, 0.08334],\n        \"768\": [0, 0.69444, 0, 0],\n        \"769\": [0, 0.69444, 0.09694, 0],\n        \"770\": [0, 0.69444, 0.06646, 0],\n        \"771\": [0, 0.66786, 0.11585, 0],\n        \"772\": [0, 0.56167, 0.10333, 0],\n        \"774\": [0, 0.69444, 0.10806, 0],\n        \"775\": [0, 0.66786, 0.11752, 0],\n        \"776\": [0, 0.66786, 0.10474, 0],\n        \"778\": [0, 0.69444, 0, 0],\n        \"779\": [0, 0.69444, 0.1225, 0],\n        \"780\": [0, 0.62847, 0.08295, 0],\n        \"915\": [0, 0.68333, 0.13305, 0],\n        \"916\": [0, 0.68333, 0, 0],\n        \"920\": [0, 0.68333, 0.09403, 0],\n        \"923\": [0, 0.68333, 0, 0],\n        \"926\": [0, 0.68333, 0.15294, 0],\n        \"928\": [0, 0.68333, 0.16389, 0],\n        \"931\": [0, 0.68333, 0.12028, 0],\n        \"933\": [0, 0.68333, 0.11111, 0],\n        \"934\": [0, 0.68333, 0.05986, 0],\n        \"936\": [0, 0.68333, 0.11111, 0],\n        \"937\": [0, 0.68333, 0.10257, 0],\n        \"8211\": [0, 0.43056, 0.09208, 0],\n        \"8212\": [0, 0.43056, 0.09208, 0],\n        \"8216\": [0, 0.69444, 0.12417, 0],\n        \"8217\": [0, 0.69444, 0.12417, 0],\n        \"8220\": [0, 0.69444, 0.1685, 0],\n        \"8221\": [0, 0.69444, 0.06961, 0],\n        \"8463\": [0, 0.68889, 0, 0],\n    },\n    \"Main-Regular\": {\n        \"32\": [0, 0, 0, 0],\n        \"33\": [0, 0.69444, 0, 0],\n        \"34\": [0, 0.69444, 0, 0],\n        \"35\": [0.19444, 0.69444, 0, 0],\n        \"36\": [0.05556, 0.75, 0, 0],\n        \"37\": [0.05556, 0.75, 0, 0],\n        \"38\": [0, 0.69444, 0, 0],\n        \"39\": [0, 0.69444, 0, 0],\n        \"40\": [0.25, 0.75, 0, 0],\n        \"41\": [0.25, 0.75, 0, 0],\n        \"42\": [0, 0.75, 0, 0],\n        \"43\": [0.08333, 0.58333, 0, 0],\n        \"44\": [0.19444, 0.10556, 0, 0],\n        \"45\": [0, 0.43056, 0, 0],\n        \"46\": [0, 0.10556, 0, 0],\n        \"47\": [0.25, 0.75, 0, 0],\n        \"48\": [0, 0.64444, 0, 0],\n        \"49\": [0, 0.64444, 0, 0],\n        \"50\": [0, 0.64444, 0, 0],\n        \"51\": [0, 0.64444, 0, 0],\n        \"52\": [0, 0.64444, 0, 0],\n        \"53\": [0, 0.64444, 0, 0],\n        \"54\": [0, 0.64444, 0, 0],\n        \"55\": [0, 0.64444, 0, 0],\n        \"56\": [0, 0.64444, 0, 0],\n        \"57\": [0, 0.64444, 0, 0],\n        \"58\": [0, 0.43056, 0, 0],\n        \"59\": [0.19444, 0.43056, 0, 0],\n        \"60\": [0.0391, 0.5391, 0, 0],\n        \"61\": [-0.13313, 0.36687, 0, 0],\n        \"62\": [0.0391, 0.5391, 0, 0],\n        \"63\": [0, 0.69444, 0, 0],\n        \"64\": [0, 0.69444, 0, 0],\n        \"65\": [0, 0.68333, 0, 0],\n        \"66\": [0, 0.68333, 0, 0],\n        \"67\": [0, 0.68333, 0, 0],\n        \"68\": [0, 0.68333, 0, 0],\n        \"69\": [0, 0.68333, 0, 0],\n        \"70\": [0, 0.68333, 0, 0],\n        \"71\": [0, 0.68333, 0, 0],\n        \"72\": [0, 0.68333, 0, 0],\n        \"73\": [0, 0.68333, 0, 0],\n        \"74\": [0, 0.68333, 0, 0],\n        \"75\": [0, 0.68333, 0, 0],\n        \"76\": [0, 0.68333, 0, 0],\n        \"77\": [0, 0.68333, 0, 0],\n        \"78\": [0, 0.68333, 0, 0],\n        \"79\": [0, 0.68333, 0, 0],\n        \"80\": [0, 0.68333, 0, 0],\n        \"81\": [0.19444, 0.68333, 0, 0],\n        \"82\": [0, 0.68333, 0, 0],\n        \"83\": [0, 0.68333, 0, 0],\n        \"84\": [0, 0.68333, 0, 0],\n        \"85\": [0, 0.68333, 0, 0],\n        \"86\": [0, 0.68333, 0.01389, 0],\n        \"87\": [0, 0.68333, 0.01389, 0],\n        \"88\": [0, 0.68333, 0, 0],\n        \"89\": [0, 0.68333, 0.025, 0],\n        \"90\": [0, 0.68333, 0, 0],\n        \"91\": [0.25, 0.75, 0, 0],\n        \"92\": [0.25, 0.75, 0, 0],\n        \"93\": [0.25, 0.75, 0, 0],\n        \"94\": [0, 0.69444, 0, 0],\n        \"95\": [0.31, 0.12056, 0.02778, 0],\n        \"96\": [0, 0.69444, 0, 0],\n        \"97\": [0, 0.43056, 0, 0],\n        \"98\": [0, 0.69444, 0, 0],\n        \"99\": [0, 0.43056, 0, 0],\n        \"100\": [0, 0.69444, 0, 0],\n        \"101\": [0, 0.43056, 0, 0],\n        \"102\": [0, 0.69444, 0.07778, 0],\n        \"103\": [0.19444, 0.43056, 0.01389, 0],\n        \"104\": [0, 0.69444, 0, 0],\n        \"105\": [0, 0.66786, 0, 0],\n        \"106\": [0.19444, 0.66786, 0, 0],\n        \"107\": [0, 0.69444, 0, 0],\n        \"108\": [0, 0.69444, 0, 0],\n        \"109\": [0, 0.43056, 0, 0],\n        \"110\": [0, 0.43056, 0, 0],\n        \"111\": [0, 0.43056, 0, 0],\n        \"112\": [0.19444, 0.43056, 0, 0],\n        \"113\": [0.19444, 0.43056, 0, 0],\n        \"114\": [0, 0.43056, 0, 0],\n        \"115\": [0, 0.43056, 0, 0],\n        \"116\": [0, 0.61508, 0, 0],\n        \"117\": [0, 0.43056, 0, 0],\n        \"118\": [0, 0.43056, 0.01389, 0],\n        \"119\": [0, 0.43056, 0.01389, 0],\n        \"120\": [0, 0.43056, 0, 0],\n        \"121\": [0.19444, 0.43056, 0.01389, 0],\n        \"122\": [0, 0.43056, 0, 0],\n        \"123\": [0.25, 0.75, 0, 0],\n        \"124\": [0.25, 0.75, 0, 0],\n        \"125\": [0.25, 0.75, 0, 0],\n        \"126\": [0.35, 0.31786, 0, 0],\n        \"160\": [0, 0, 0, 0],\n        \"168\": [0, 0.66786, 0, 0],\n        \"172\": [0, 0.43056, 0, 0],\n        \"175\": [0, 0.56778, 0, 0],\n        \"176\": [0, 0.69444, 0, 0],\n        \"177\": [0.08333, 0.58333, 0, 0],\n        \"180\": [0, 0.69444, 0, 0],\n        \"215\": [0.08333, 0.58333, 0, 0],\n        \"247\": [0.08333, 0.58333, 0, 0],\n        \"305\": [0, 0.43056, 0, 0],\n        \"567\": [0.19444, 0.43056, 0, 0],\n        \"710\": [0, 0.69444, 0, 0],\n        \"711\": [0, 0.62847, 0, 0],\n        \"713\": [0, 0.56778, 0, 0],\n        \"714\": [0, 0.69444, 0, 0],\n        \"715\": [0, 0.69444, 0, 0],\n        \"728\": [0, 0.69444, 0, 0],\n        \"729\": [0, 0.66786, 0, 0],\n        \"730\": [0, 0.69444, 0, 0],\n        \"732\": [0, 0.66786, 0, 0],\n        \"768\": [0, 0.69444, 0, 0],\n        \"769\": [0, 0.69444, 0, 0],\n        \"770\": [0, 0.69444, 0, 0],\n        \"771\": [0, 0.66786, 0, 0],\n        \"772\": [0, 0.56778, 0, 0],\n        \"774\": [0, 0.69444, 0, 0],\n        \"775\": [0, 0.66786, 0, 0],\n        \"776\": [0, 0.66786, 0, 0],\n        \"778\": [0, 0.69444, 0, 0],\n        \"779\": [0, 0.69444, 0, 0],\n        \"780\": [0, 0.62847, 0, 0],\n        \"824\": [0.19444, 0.69444, 0, 0],\n        \"915\": [0, 0.68333, 0, 0],\n        \"916\": [0, 0.68333, 0, 0],\n        \"920\": [0, 0.68333, 0, 0],\n        \"923\": [0, 0.68333, 0, 0],\n        \"926\": [0, 0.68333, 0, 0],\n        \"928\": [0, 0.68333, 0, 0],\n        \"931\": [0, 0.68333, 0, 0],\n        \"933\": [0, 0.68333, 0, 0],\n        \"934\": [0, 0.68333, 0, 0],\n        \"936\": [0, 0.68333, 0, 0],\n        \"937\": [0, 0.68333, 0, 0],\n        \"8211\": [0, 0.43056, 0.02778, 0],\n        \"8212\": [0, 0.43056, 0.02778, 0],\n        \"8216\": [0, 0.69444, 0, 0],\n        \"8217\": [0, 0.69444, 0, 0],\n        \"8220\": [0, 0.69444, 0, 0],\n        \"8221\": [0, 0.69444, 0, 0],\n        \"8224\": [0.19444, 0.69444, 0, 0],\n        \"8225\": [0.19444, 0.69444, 0, 0],\n        \"8230\": [0, 0.12, 0, 0],\n        \"8242\": [0, 0.55556, 0, 0],\n        \"8407\": [0, 0.71444, 0.15382, 0],\n        \"8463\": [0, 0.68889, 0, 0],\n        \"8465\": [0, 0.69444, 0, 0],\n        \"8467\": [0, 0.69444, 0, 0.11111],\n        \"8472\": [0.19444, 0.43056, 0, 0.11111],\n        \"8476\": [0, 0.69444, 0, 0],\n        \"8501\": [0, 0.69444, 0, 0],\n        \"8592\": [-0.13313, 0.36687, 0, 0],\n        \"8593\": [0.19444, 0.69444, 0, 0],\n        \"8594\": [-0.13313, 0.36687, 0, 0],\n        \"8595\": [0.19444, 0.69444, 0, 0],\n        \"8596\": [-0.13313, 0.36687, 0, 0],\n        \"8597\": [0.25, 0.75, 0, 0],\n        \"8598\": [0.19444, 0.69444, 0, 0],\n        \"8599\": [0.19444, 0.69444, 0, 0],\n        \"8600\": [0.19444, 0.69444, 0, 0],\n        \"8601\": [0.19444, 0.69444, 0, 0],\n        \"8614\": [0.011, 0.511, 0, 0],\n        \"8617\": [0.011, 0.511, 0, 0],\n        \"8618\": [0.011, 0.511, 0, 0],\n        \"8636\": [-0.13313, 0.36687, 0, 0],\n        \"8637\": [-0.13313, 0.36687, 0, 0],\n        \"8640\": [-0.13313, 0.36687, 0, 0],\n        \"8641\": [-0.13313, 0.36687, 0, 0],\n        \"8652\": [0.011, 0.671, 0, 0],\n        \"8656\": [-0.13313, 0.36687, 0, 0],\n        \"8657\": [0.19444, 0.69444, 0, 0],\n        \"8658\": [-0.13313, 0.36687, 0, 0],\n        \"8659\": [0.19444, 0.69444, 0, 0],\n        \"8660\": [-0.13313, 0.36687, 0, 0],\n        \"8661\": [0.25, 0.75, 0, 0],\n        \"8704\": [0, 0.69444, 0, 0],\n        \"8706\": [0, 0.69444, 0.05556, 0.08334],\n        \"8707\": [0, 0.69444, 0, 0],\n        \"8709\": [0.05556, 0.75, 0, 0],\n        \"8711\": [0, 0.68333, 0, 0],\n        \"8712\": [0.0391, 0.5391, 0, 0],\n        \"8715\": [0.0391, 0.5391, 0, 0],\n        \"8722\": [0.08333, 0.58333, 0, 0],\n        \"8723\": [0.08333, 0.58333, 0, 0],\n        \"8725\": [0.25, 0.75, 0, 0],\n        \"8726\": [0.25, 0.75, 0, 0],\n        \"8727\": [-0.03472, 0.46528, 0, 0],\n        \"8728\": [-0.05555, 0.44445, 0, 0],\n        \"8729\": [-0.05555, 0.44445, 0, 0],\n        \"8730\": [0.2, 0.8, 0, 0],\n        \"8733\": [0, 0.43056, 0, 0],\n        \"8734\": [0, 0.43056, 0, 0],\n        \"8736\": [0, 0.69224, 0, 0],\n        \"8739\": [0.25, 0.75, 0, 0],\n        \"8741\": [0.25, 0.75, 0, 0],\n        \"8743\": [0, 0.55556, 0, 0],\n        \"8744\": [0, 0.55556, 0, 0],\n        \"8745\": [0, 0.55556, 0, 0],\n        \"8746\": [0, 0.55556, 0, 0],\n        \"8747\": [0.19444, 0.69444, 0.11111, 0],\n        \"8764\": [-0.13313, 0.36687, 0, 0],\n        \"8768\": [0.19444, 0.69444, 0, 0],\n        \"8771\": [-0.03625, 0.46375, 0, 0],\n        \"8773\": [-0.022, 0.589, 0, 0],\n        \"8776\": [-0.01688, 0.48312, 0, 0],\n        \"8781\": [-0.03625, 0.46375, 0, 0],\n        \"8784\": [-0.133, 0.67, 0, 0],\n        \"8800\": [0.215, 0.716, 0, 0],\n        \"8801\": [-0.03625, 0.46375, 0, 0],\n        \"8804\": [0.13597, 0.63597, 0, 0],\n        \"8805\": [0.13597, 0.63597, 0, 0],\n        \"8810\": [0.0391, 0.5391, 0, 0],\n        \"8811\": [0.0391, 0.5391, 0, 0],\n        \"8826\": [0.0391, 0.5391, 0, 0],\n        \"8827\": [0.0391, 0.5391, 0, 0],\n        \"8834\": [0.0391, 0.5391, 0, 0],\n        \"8835\": [0.0391, 0.5391, 0, 0],\n        \"8838\": [0.13597, 0.63597, 0, 0],\n        \"8839\": [0.13597, 0.63597, 0, 0],\n        \"8846\": [0, 0.55556, 0, 0],\n        \"8849\": [0.13597, 0.63597, 0, 0],\n        \"8850\": [0.13597, 0.63597, 0, 0],\n        \"8851\": [0, 0.55556, 0, 0],\n        \"8852\": [0, 0.55556, 0, 0],\n        \"8853\": [0.08333, 0.58333, 0, 0],\n        \"8854\": [0.08333, 0.58333, 0, 0],\n        \"8855\": [0.08333, 0.58333, 0, 0],\n        \"8856\": [0.08333, 0.58333, 0, 0],\n        \"8857\": [0.08333, 0.58333, 0, 0],\n        \"8866\": [0, 0.69444, 0, 0],\n        \"8867\": [0, 0.69444, 0, 0],\n        \"8868\": [0, 0.69444, 0, 0],\n        \"8869\": [0, 0.69444, 0, 0],\n        \"8872\": [0.249, 0.75, 0, 0],\n        \"8900\": [-0.05555, 0.44445, 0, 0],\n        \"8901\": [-0.05555, 0.44445, 0, 0],\n        \"8902\": [-0.03472, 0.46528, 0, 0],\n        \"8904\": [0.005, 0.505, 0, 0],\n        \"8942\": [0.03, 0.9, 0, 0],\n        \"8943\": [-0.19, 0.31, 0, 0],\n        \"8945\": [-0.1, 0.82, 0, 0],\n        \"8968\": [0.25, 0.75, 0, 0],\n        \"8969\": [0.25, 0.75, 0, 0],\n        \"8970\": [0.25, 0.75, 0, 0],\n        \"8971\": [0.25, 0.75, 0, 0],\n        \"8994\": [-0.14236, 0.35764, 0, 0],\n        \"8995\": [-0.14236, 0.35764, 0, 0],\n        \"9136\": [0.244, 0.744, 0, 0],\n        \"9137\": [0.244, 0.744, 0, 0],\n        \"9651\": [0.19444, 0.69444, 0, 0],\n        \"9657\": [-0.03472, 0.46528, 0, 0],\n        \"9661\": [0.19444, 0.69444, 0, 0],\n        \"9667\": [-0.03472, 0.46528, 0, 0],\n        \"9711\": [0.19444, 0.69444, 0, 0],\n        \"9824\": [0.12963, 0.69444, 0, 0],\n        \"9825\": [0.12963, 0.69444, 0, 0],\n        \"9826\": [0.12963, 0.69444, 0, 0],\n        \"9827\": [0.12963, 0.69444, 0, 0],\n        \"9837\": [0, 0.75, 0, 0],\n        \"9838\": [0.19444, 0.69444, 0, 0],\n        \"9839\": [0.19444, 0.69444, 0, 0],\n        \"10216\": [0.25, 0.75, 0, 0],\n        \"10217\": [0.25, 0.75, 0, 0],\n        \"10222\": [0.244, 0.744, 0, 0],\n        \"10223\": [0.244, 0.744, 0, 0],\n        \"10229\": [0.011, 0.511, 0, 0],\n        \"10230\": [0.011, 0.511, 0, 0],\n        \"10231\": [0.011, 0.511, 0, 0],\n        \"10232\": [0.024, 0.525, 0, 0],\n        \"10233\": [0.024, 0.525, 0, 0],\n        \"10234\": [0.024, 0.525, 0, 0],\n        \"10236\": [0.011, 0.511, 0, 0],\n        \"10815\": [0, 0.68333, 0, 0],\n        \"10927\": [0.13597, 0.63597, 0, 0],\n        \"10928\": [0.13597, 0.63597, 0, 0],\n    },\n    \"Math-BoldItalic\": {\n        \"47\": [0.19444, 0.69444, 0, 0],\n        \"65\": [0, 0.68611, 0, 0],\n        \"66\": [0, 0.68611, 0.04835, 0],\n        \"67\": [0, 0.68611, 0.06979, 0],\n        \"68\": [0, 0.68611, 0.03194, 0],\n        \"69\": [0, 0.68611, 0.05451, 0],\n        \"70\": [0, 0.68611, 0.15972, 0],\n        \"71\": [0, 0.68611, 0, 0],\n        \"72\": [0, 0.68611, 0.08229, 0],\n        \"73\": [0, 0.68611, 0.07778, 0],\n        \"74\": [0, 0.68611, 0.10069, 0],\n        \"75\": [0, 0.68611, 0.06979, 0],\n        \"76\": [0, 0.68611, 0, 0],\n        \"77\": [0, 0.68611, 0.11424, 0],\n        \"78\": [0, 0.68611, 0.11424, 0],\n        \"79\": [0, 0.68611, 0.03194, 0],\n        \"80\": [0, 0.68611, 0.15972, 0],\n        \"81\": [0.19444, 0.68611, 0, 0],\n        \"82\": [0, 0.68611, 0.00421, 0],\n        \"83\": [0, 0.68611, 0.05382, 0],\n        \"84\": [0, 0.68611, 0.15972, 0],\n        \"85\": [0, 0.68611, 0.11424, 0],\n        \"86\": [0, 0.68611, 0.25555, 0],\n        \"87\": [0, 0.68611, 0.15972, 0],\n        \"88\": [0, 0.68611, 0.07778, 0],\n        \"89\": [0, 0.68611, 0.25555, 0],\n        \"90\": [0, 0.68611, 0.06979, 0],\n        \"97\": [0, 0.44444, 0, 0],\n        \"98\": [0, 0.69444, 0, 0],\n        \"99\": [0, 0.44444, 0, 0],\n        \"100\": [0, 0.69444, 0, 0],\n        \"101\": [0, 0.44444, 0, 0],\n        \"102\": [0.19444, 0.69444, 0.11042, 0],\n        \"103\": [0.19444, 0.44444, 0.03704, 0],\n        \"104\": [0, 0.69444, 0, 0],\n        \"105\": [0, 0.69326, 0, 0],\n        \"106\": [0.19444, 0.69326, 0.0622, 0],\n        \"107\": [0, 0.69444, 0.01852, 0],\n        \"108\": [0, 0.69444, 0.0088, 0],\n        \"109\": [0, 0.44444, 0, 0],\n        \"110\": [0, 0.44444, 0, 0],\n        \"111\": [0, 0.44444, 0, 0],\n        \"112\": [0.19444, 0.44444, 0, 0],\n        \"113\": [0.19444, 0.44444, 0.03704, 0],\n        \"114\": [0, 0.44444, 0.03194, 0],\n        \"115\": [0, 0.44444, 0, 0],\n        \"116\": [0, 0.63492, 0, 0],\n        \"117\": [0, 0.44444, 0, 0],\n        \"118\": [0, 0.44444, 0.03704, 0],\n        \"119\": [0, 0.44444, 0.02778, 0],\n        \"120\": [0, 0.44444, 0, 0],\n        \"121\": [0.19444, 0.44444, 0.03704, 0],\n        \"122\": [0, 0.44444, 0.04213, 0],\n        \"915\": [0, 0.68611, 0.15972, 0],\n        \"916\": [0, 0.68611, 0, 0],\n        \"920\": [0, 0.68611, 0.03194, 0],\n        \"923\": [0, 0.68611, 0, 0],\n        \"926\": [0, 0.68611, 0.07458, 0],\n        \"928\": [0, 0.68611, 0.08229, 0],\n        \"931\": [0, 0.68611, 0.05451, 0],\n        \"933\": [0, 0.68611, 0.15972, 0],\n        \"934\": [0, 0.68611, 0, 0],\n        \"936\": [0, 0.68611, 0.11653, 0],\n        \"937\": [0, 0.68611, 0.04835, 0],\n        \"945\": [0, 0.44444, 0, 0],\n        \"946\": [0.19444, 0.69444, 0.03403, 0],\n        \"947\": [0.19444, 0.44444, 0.06389, 0],\n        \"948\": [0, 0.69444, 0.03819, 0],\n        \"949\": [0, 0.44444, 0, 0],\n        \"950\": [0.19444, 0.69444, 0.06215, 0],\n        \"951\": [0.19444, 0.44444, 0.03704, 0],\n        \"952\": [0, 0.69444, 0.03194, 0],\n        \"953\": [0, 0.44444, 0, 0],\n        \"954\": [0, 0.44444, 0, 0],\n        \"955\": [0, 0.69444, 0, 0],\n        \"956\": [0.19444, 0.44444, 0, 0],\n        \"957\": [0, 0.44444, 0.06898, 0],\n        \"958\": [0.19444, 0.69444, 0.03021, 0],\n        \"959\": [0, 0.44444, 0, 0],\n        \"960\": [0, 0.44444, 0.03704, 0],\n        \"961\": [0.19444, 0.44444, 0, 0],\n        \"962\": [0.09722, 0.44444, 0.07917, 0],\n        \"963\": [0, 0.44444, 0.03704, 0],\n        \"964\": [0, 0.44444, 0.13472, 0],\n        \"965\": [0, 0.44444, 0.03704, 0],\n        \"966\": [0.19444, 0.44444, 0, 0],\n        \"967\": [0.19444, 0.44444, 0, 0],\n        \"968\": [0.19444, 0.69444, 0.03704, 0],\n        \"969\": [0, 0.44444, 0.03704, 0],\n        \"977\": [0, 0.69444, 0, 0],\n        \"981\": [0.19444, 0.69444, 0, 0],\n        \"982\": [0, 0.44444, 0.03194, 0],\n        \"1009\": [0.19444, 0.44444, 0, 0],\n        \"1013\": [0, 0.44444, 0, 0],\n    },\n    \"Math-Italic\": {\n        \"47\": [0.19444, 0.69444, 0, 0],\n        \"65\": [0, 0.68333, 0, 0.13889],\n        \"66\": [0, 0.68333, 0.05017, 0.08334],\n        \"67\": [0, 0.68333, 0.07153, 0.08334],\n        \"68\": [0, 0.68333, 0.02778, 0.05556],\n        \"69\": [0, 0.68333, 0.05764, 0.08334],\n        \"70\": [0, 0.68333, 0.13889, 0.08334],\n        \"71\": [0, 0.68333, 0, 0.08334],\n        \"72\": [0, 0.68333, 0.08125, 0.05556],\n        \"73\": [0, 0.68333, 0.07847, 0.11111],\n        \"74\": [0, 0.68333, 0.09618, 0.16667],\n        \"75\": [0, 0.68333, 0.07153, 0.05556],\n        \"76\": [0, 0.68333, 0, 0.02778],\n        \"77\": [0, 0.68333, 0.10903, 0.08334],\n        \"78\": [0, 0.68333, 0.10903, 0.08334],\n        \"79\": [0, 0.68333, 0.02778, 0.08334],\n        \"80\": [0, 0.68333, 0.13889, 0.08334],\n        \"81\": [0.19444, 0.68333, 0, 0.08334],\n        \"82\": [0, 0.68333, 0.00773, 0.08334],\n        \"83\": [0, 0.68333, 0.05764, 0.08334],\n        \"84\": [0, 0.68333, 0.13889, 0.08334],\n        \"85\": [0, 0.68333, 0.10903, 0.02778],\n        \"86\": [0, 0.68333, 0.22222, 0],\n        \"87\": [0, 0.68333, 0.13889, 0],\n        \"88\": [0, 0.68333, 0.07847, 0.08334],\n        \"89\": [0, 0.68333, 0.22222, 0],\n        \"90\": [0, 0.68333, 0.07153, 0.08334],\n        \"97\": [0, 0.43056, 0, 0],\n        \"98\": [0, 0.69444, 0, 0],\n        \"99\": [0, 0.43056, 0, 0.05556],\n        \"100\": [0, 0.69444, 0, 0.16667],\n        \"101\": [0, 0.43056, 0, 0.05556],\n        \"102\": [0.19444, 0.69444, 0.10764, 0.16667],\n        \"103\": [0.19444, 0.43056, 0.03588, 0.02778],\n        \"104\": [0, 0.69444, 0, 0],\n        \"105\": [0, 0.65952, 0, 0],\n        \"106\": [0.19444, 0.65952, 0.05724, 0],\n        \"107\": [0, 0.69444, 0.03148, 0],\n        \"108\": [0, 0.69444, 0.01968, 0.08334],\n        \"109\": [0, 0.43056, 0, 0],\n        \"110\": [0, 0.43056, 0, 0],\n        \"111\": [0, 0.43056, 0, 0.05556],\n        \"112\": [0.19444, 0.43056, 0, 0.08334],\n        \"113\": [0.19444, 0.43056, 0.03588, 0.08334],\n        \"114\": [0, 0.43056, 0.02778, 0.05556],\n        \"115\": [0, 0.43056, 0, 0.05556],\n        \"116\": [0, 0.61508, 0, 0.08334],\n        \"117\": [0, 0.43056, 0, 0.02778],\n        \"118\": [0, 0.43056, 0.03588, 0.02778],\n        \"119\": [0, 0.43056, 0.02691, 0.08334],\n        \"120\": [0, 0.43056, 0, 0.02778],\n        \"121\": [0.19444, 0.43056, 0.03588, 0.05556],\n        \"122\": [0, 0.43056, 0.04398, 0.05556],\n        \"915\": [0, 0.68333, 0.13889, 0.08334],\n        \"916\": [0, 0.68333, 0, 0.16667],\n        \"920\": [0, 0.68333, 0.02778, 0.08334],\n        \"923\": [0, 0.68333, 0, 0.16667],\n        \"926\": [0, 0.68333, 0.07569, 0.08334],\n        \"928\": [0, 0.68333, 0.08125, 0.05556],\n        \"931\": [0, 0.68333, 0.05764, 0.08334],\n        \"933\": [0, 0.68333, 0.13889, 0.05556],\n        \"934\": [0, 0.68333, 0, 0.08334],\n        \"936\": [0, 0.68333, 0.11, 0.05556],\n        \"937\": [0, 0.68333, 0.05017, 0.08334],\n        \"945\": [0, 0.43056, 0.0037, 0.02778],\n        \"946\": [0.19444, 0.69444, 0.05278, 0.08334],\n        \"947\": [0.19444, 0.43056, 0.05556, 0],\n        \"948\": [0, 0.69444, 0.03785, 0.05556],\n        \"949\": [0, 0.43056, 0, 0.08334],\n        \"950\": [0.19444, 0.69444, 0.07378, 0.08334],\n        \"951\": [0.19444, 0.43056, 0.03588, 0.05556],\n        \"952\": [0, 0.69444, 0.02778, 0.08334],\n        \"953\": [0, 0.43056, 0, 0.05556],\n        \"954\": [0, 0.43056, 0, 0],\n        \"955\": [0, 0.69444, 0, 0],\n        \"956\": [0.19444, 0.43056, 0, 0.02778],\n        \"957\": [0, 0.43056, 0.06366, 0.02778],\n        \"958\": [0.19444, 0.69444, 0.04601, 0.11111],\n        \"959\": [0, 0.43056, 0, 0.05556],\n        \"960\": [0, 0.43056, 0.03588, 0],\n        \"961\": [0.19444, 0.43056, 0, 0.08334],\n        \"962\": [0.09722, 0.43056, 0.07986, 0.08334],\n        \"963\": [0, 0.43056, 0.03588, 0],\n        \"964\": [0, 0.43056, 0.1132, 0.02778],\n        \"965\": [0, 0.43056, 0.03588, 0.02778],\n        \"966\": [0.19444, 0.43056, 0, 0.08334],\n        \"967\": [0.19444, 0.43056, 0, 0.05556],\n        \"968\": [0.19444, 0.69444, 0.03588, 0.11111],\n        \"969\": [0, 0.43056, 0.03588, 0],\n        \"977\": [0, 0.69444, 0, 0.08334],\n        \"981\": [0.19444, 0.69444, 0, 0.08334],\n        \"982\": [0, 0.43056, 0.02778, 0],\n        \"1009\": [0.19444, 0.43056, 0, 0.08334],\n        \"1013\": [0, 0.43056, 0, 0.05556],\n    },\n    \"Math-Regular\": {\n        \"65\": [0, 0.68333, 0, 0.13889],\n        \"66\": [0, 0.68333, 0.05017, 0.08334],\n        \"67\": [0, 0.68333, 0.07153, 0.08334],\n        \"68\": [0, 0.68333, 0.02778, 0.05556],\n        \"69\": [0, 0.68333, 0.05764, 0.08334],\n        \"70\": [0, 0.68333, 0.13889, 0.08334],\n        \"71\": [0, 0.68333, 0, 0.08334],\n        \"72\": [0, 0.68333, 0.08125, 0.05556],\n        \"73\": [0, 0.68333, 0.07847, 0.11111],\n        \"74\": [0, 0.68333, 0.09618, 0.16667],\n        \"75\": [0, 0.68333, 0.07153, 0.05556],\n        \"76\": [0, 0.68333, 0, 0.02778],\n        \"77\": [0, 0.68333, 0.10903, 0.08334],\n        \"78\": [0, 0.68333, 0.10903, 0.08334],\n        \"79\": [0, 0.68333, 0.02778, 0.08334],\n        \"80\": [0, 0.68333, 0.13889, 0.08334],\n        \"81\": [0.19444, 0.68333, 0, 0.08334],\n        \"82\": [0, 0.68333, 0.00773, 0.08334],\n        \"83\": [0, 0.68333, 0.05764, 0.08334],\n        \"84\": [0, 0.68333, 0.13889, 0.08334],\n        \"85\": [0, 0.68333, 0.10903, 0.02778],\n        \"86\": [0, 0.68333, 0.22222, 0],\n        \"87\": [0, 0.68333, 0.13889, 0],\n        \"88\": [0, 0.68333, 0.07847, 0.08334],\n        \"89\": [0, 0.68333, 0.22222, 0],\n        \"90\": [0, 0.68333, 0.07153, 0.08334],\n        \"97\": [0, 0.43056, 0, 0],\n        \"98\": [0, 0.69444, 0, 0],\n        \"99\": [0, 0.43056, 0, 0.05556],\n        \"100\": [0, 0.69444, 0, 0.16667],\n        \"101\": [0, 0.43056, 0, 0.05556],\n        \"102\": [0.19444, 0.69444, 0.10764, 0.16667],\n        \"103\": [0.19444, 0.43056, 0.03588, 0.02778],\n        \"104\": [0, 0.69444, 0, 0],\n        \"105\": [0, 0.65952, 0, 0],\n        \"106\": [0.19444, 0.65952, 0.05724, 0],\n        \"107\": [0, 0.69444, 0.03148, 0],\n        \"108\": [0, 0.69444, 0.01968, 0.08334],\n        \"109\": [0, 0.43056, 0, 0],\n        \"110\": [0, 0.43056, 0, 0],\n        \"111\": [0, 0.43056, 0, 0.05556],\n        \"112\": [0.19444, 0.43056, 0, 0.08334],\n        \"113\": [0.19444, 0.43056, 0.03588, 0.08334],\n        \"114\": [0, 0.43056, 0.02778, 0.05556],\n        \"115\": [0, 0.43056, 0, 0.05556],\n        \"116\": [0, 0.61508, 0, 0.08334],\n        \"117\": [0, 0.43056, 0, 0.02778],\n        \"118\": [0, 0.43056, 0.03588, 0.02778],\n        \"119\": [0, 0.43056, 0.02691, 0.08334],\n        \"120\": [0, 0.43056, 0, 0.02778],\n        \"121\": [0.19444, 0.43056, 0.03588, 0.05556],\n        \"122\": [0, 0.43056, 0.04398, 0.05556],\n        \"915\": [0, 0.68333, 0.13889, 0.08334],\n        \"916\": [0, 0.68333, 0, 0.16667],\n        \"920\": [0, 0.68333, 0.02778, 0.08334],\n        \"923\": [0, 0.68333, 0, 0.16667],\n        \"926\": [0, 0.68333, 0.07569, 0.08334],\n        \"928\": [0, 0.68333, 0.08125, 0.05556],\n        \"931\": [0, 0.68333, 0.05764, 0.08334],\n        \"933\": [0, 0.68333, 0.13889, 0.05556],\n        \"934\": [0, 0.68333, 0, 0.08334],\n        \"936\": [0, 0.68333, 0.11, 0.05556],\n        \"937\": [0, 0.68333, 0.05017, 0.08334],\n        \"945\": [0, 0.43056, 0.0037, 0.02778],\n        \"946\": [0.19444, 0.69444, 0.05278, 0.08334],\n        \"947\": [0.19444, 0.43056, 0.05556, 0],\n        \"948\": [0, 0.69444, 0.03785, 0.05556],\n        \"949\": [0, 0.43056, 0, 0.08334],\n        \"950\": [0.19444, 0.69444, 0.07378, 0.08334],\n        \"951\": [0.19444, 0.43056, 0.03588, 0.05556],\n        \"952\": [0, 0.69444, 0.02778, 0.08334],\n        \"953\": [0, 0.43056, 0, 0.05556],\n        \"954\": [0, 0.43056, 0, 0],\n        \"955\": [0, 0.69444, 0, 0],\n        \"956\": [0.19444, 0.43056, 0, 0.02778],\n        \"957\": [0, 0.43056, 0.06366, 0.02778],\n        \"958\": [0.19444, 0.69444, 0.04601, 0.11111],\n        \"959\": [0, 0.43056, 0, 0.05556],\n        \"960\": [0, 0.43056, 0.03588, 0],\n        \"961\": [0.19444, 0.43056, 0, 0.08334],\n        \"962\": [0.09722, 0.43056, 0.07986, 0.08334],\n        \"963\": [0, 0.43056, 0.03588, 0],\n        \"964\": [0, 0.43056, 0.1132, 0.02778],\n        \"965\": [0, 0.43056, 0.03588, 0.02778],\n        \"966\": [0.19444, 0.43056, 0, 0.08334],\n        \"967\": [0.19444, 0.43056, 0, 0.05556],\n        \"968\": [0.19444, 0.69444, 0.03588, 0.11111],\n        \"969\": [0, 0.43056, 0.03588, 0],\n        \"977\": [0, 0.69444, 0, 0.08334],\n        \"981\": [0.19444, 0.69444, 0, 0.08334],\n        \"982\": [0, 0.43056, 0.02778, 0],\n        \"1009\": [0.19444, 0.43056, 0, 0.08334],\n        \"1013\": [0, 0.43056, 0, 0.05556],\n    },\n    \"SansSerif-Regular\": {\n        \"33\": [0, 0.69444, 0, 0],\n        \"34\": [0, 0.69444, 0, 0],\n        \"35\": [0.19444, 0.69444, 0, 0],\n        \"36\": [0.05556, 0.75, 0, 0],\n        \"37\": [0.05556, 0.75, 0, 0],\n        \"38\": [0, 0.69444, 0, 0],\n        \"39\": [0, 0.69444, 0, 0],\n        \"40\": [0.25, 0.75, 0, 0],\n        \"41\": [0.25, 0.75, 0, 0],\n        \"42\": [0, 0.75, 0, 0],\n        \"43\": [0.08333, 0.58333, 0, 0],\n        \"44\": [0.125, 0.08333, 0, 0],\n        \"45\": [0, 0.44444, 0, 0],\n        \"46\": [0, 0.08333, 0, 0],\n        \"47\": [0.25, 0.75, 0, 0],\n        \"48\": [0, 0.65556, 0, 0],\n        \"49\": [0, 0.65556, 0, 0],\n        \"50\": [0, 0.65556, 0, 0],\n        \"51\": [0, 0.65556, 0, 0],\n        \"52\": [0, 0.65556, 0, 0],\n        \"53\": [0, 0.65556, 0, 0],\n        \"54\": [0, 0.65556, 0, 0],\n        \"55\": [0, 0.65556, 0, 0],\n        \"56\": [0, 0.65556, 0, 0],\n        \"57\": [0, 0.65556, 0, 0],\n        \"58\": [0, 0.44444, 0, 0],\n        \"59\": [0.125, 0.44444, 0, 0],\n        \"61\": [-0.13, 0.37, 0, 0],\n        \"63\": [0, 0.69444, 0, 0],\n        \"64\": [0, 0.69444, 0, 0],\n        \"65\": [0, 0.69444, 0, 0],\n        \"66\": [0, 0.69444, 0, 0],\n        \"67\": [0, 0.69444, 0, 0],\n        \"68\": [0, 0.69444, 0, 0],\n        \"69\": [0, 0.69444, 0, 0],\n        \"70\": [0, 0.69444, 0, 0],\n        \"71\": [0, 0.69444, 0, 0],\n        \"72\": [0, 0.69444, 0, 0],\n        \"73\": [0, 0.69444, 0, 0],\n        \"74\": [0, 0.69444, 0, 0],\n        \"75\": [0, 0.69444, 0, 0],\n        \"76\": [0, 0.69444, 0, 0],\n        \"77\": [0, 0.69444, 0, 0],\n        \"78\": [0, 0.69444, 0, 0],\n        \"79\": [0, 0.69444, 0, 0],\n        \"80\": [0, 0.69444, 0, 0],\n        \"81\": [0.125, 0.69444, 0, 0],\n        \"82\": [0, 0.69444, 0, 0],\n        \"83\": [0, 0.69444, 0, 0],\n        \"84\": [0, 0.69444, 0, 0],\n        \"85\": [0, 0.69444, 0, 0],\n        \"86\": [0, 0.69444, 0.01389, 0],\n        \"87\": [0, 0.69444, 0.01389, 0],\n        \"88\": [0, 0.69444, 0, 0],\n        \"89\": [0, 0.69444, 0.025, 0],\n        \"90\": [0, 0.69444, 0, 0],\n        \"91\": [0.25, 0.75, 0, 0],\n        \"93\": [0.25, 0.75, 0, 0],\n        \"94\": [0, 0.69444, 0, 0],\n        \"95\": [0.35, 0.09444, 0.02778, 0],\n        \"97\": [0, 0.44444, 0, 0],\n        \"98\": [0, 0.69444, 0, 0],\n        \"99\": [0, 0.44444, 0, 0],\n        \"100\": [0, 0.69444, 0, 0],\n        \"101\": [0, 0.44444, 0, 0],\n        \"102\": [0, 0.69444, 0.06944, 0],\n        \"103\": [0.19444, 0.44444, 0.01389, 0],\n        \"104\": [0, 0.69444, 0, 0],\n        \"105\": [0, 0.67937, 0, 0],\n        \"106\": [0.19444, 0.67937, 0, 0],\n        \"107\": [0, 0.69444, 0, 0],\n        \"108\": [0, 0.69444, 0, 0],\n        \"109\": [0, 0.44444, 0, 0],\n        \"110\": [0, 0.44444, 0, 0],\n        \"111\": [0, 0.44444, 0, 0],\n        \"112\": [0.19444, 0.44444, 0, 0],\n        \"113\": [0.19444, 0.44444, 0, 0],\n        \"114\": [0, 0.44444, 0.01389, 0],\n        \"115\": [0, 0.44444, 0, 0],\n        \"116\": [0, 0.57143, 0, 0],\n        \"117\": [0, 0.44444, 0, 0],\n        \"118\": [0, 0.44444, 0.01389, 0],\n        \"119\": [0, 0.44444, 0.01389, 0],\n        \"120\": [0, 0.44444, 0, 0],\n        \"121\": [0.19444, 0.44444, 0.01389, 0],\n        \"122\": [0, 0.44444, 0, 0],\n        \"126\": [0.35, 0.32659, 0, 0],\n        \"305\": [0, 0.44444, 0, 0],\n        \"567\": [0.19444, 0.44444, 0, 0],\n        \"768\": [0, 0.69444, 0, 0],\n        \"769\": [0, 0.69444, 0, 0],\n        \"770\": [0, 0.69444, 0, 0],\n        \"771\": [0, 0.67659, 0, 0],\n        \"772\": [0, 0.60889, 0, 0],\n        \"774\": [0, 0.69444, 0, 0],\n        \"775\": [0, 0.67937, 0, 0],\n        \"776\": [0, 0.67937, 0, 0],\n        \"778\": [0, 0.69444, 0, 0],\n        \"779\": [0, 0.69444, 0, 0],\n        \"780\": [0, 0.63194, 0, 0],\n        \"915\": [0, 0.69444, 0, 0],\n        \"916\": [0, 0.69444, 0, 0],\n        \"920\": [0, 0.69444, 0, 0],\n        \"923\": [0, 0.69444, 0, 0],\n        \"926\": [0, 0.69444, 0, 0],\n        \"928\": [0, 0.69444, 0, 0],\n        \"931\": [0, 0.69444, 0, 0],\n        \"933\": [0, 0.69444, 0, 0],\n        \"934\": [0, 0.69444, 0, 0],\n        \"936\": [0, 0.69444, 0, 0],\n        \"937\": [0, 0.69444, 0, 0],\n        \"8211\": [0, 0.44444, 0.02778, 0],\n        \"8212\": [0, 0.44444, 0.02778, 0],\n        \"8216\": [0, 0.69444, 0, 0],\n        \"8217\": [0, 0.69444, 0, 0],\n        \"8220\": [0, 0.69444, 0, 0],\n        \"8221\": [0, 0.69444, 0, 0],\n    },\n    \"Script-Regular\": {\n        \"65\": [0, 0.7, 0.22925, 0],\n        \"66\": [0, 0.7, 0.04087, 0],\n        \"67\": [0, 0.7, 0.1689, 0],\n        \"68\": [0, 0.7, 0.09371, 0],\n        \"69\": [0, 0.7, 0.18583, 0],\n        \"70\": [0, 0.7, 0.13634, 0],\n        \"71\": [0, 0.7, 0.17322, 0],\n        \"72\": [0, 0.7, 0.29694, 0],\n        \"73\": [0, 0.7, 0.19189, 0],\n        \"74\": [0.27778, 0.7, 0.19189, 0],\n        \"75\": [0, 0.7, 0.31259, 0],\n        \"76\": [0, 0.7, 0.19189, 0],\n        \"77\": [0, 0.7, 0.15981, 0],\n        \"78\": [0, 0.7, 0.3525, 0],\n        \"79\": [0, 0.7, 0.08078, 0],\n        \"80\": [0, 0.7, 0.08078, 0],\n        \"81\": [0, 0.7, 0.03305, 0],\n        \"82\": [0, 0.7, 0.06259, 0],\n        \"83\": [0, 0.7, 0.19189, 0],\n        \"84\": [0, 0.7, 0.29087, 0],\n        \"85\": [0, 0.7, 0.25815, 0],\n        \"86\": [0, 0.7, 0.27523, 0],\n        \"87\": [0, 0.7, 0.27523, 0],\n        \"88\": [0, 0.7, 0.26006, 0],\n        \"89\": [0, 0.7, 0.2939, 0],\n        \"90\": [0, 0.7, 0.24037, 0],\n    },\n    \"Size1-Regular\": {\n        \"40\": [0.35001, 0.85, 0, 0],\n        \"41\": [0.35001, 0.85, 0, 0],\n        \"47\": [0.35001, 0.85, 0, 0],\n        \"91\": [0.35001, 0.85, 0, 0],\n        \"92\": [0.35001, 0.85, 0, 0],\n        \"93\": [0.35001, 0.85, 0, 0],\n        \"123\": [0.35001, 0.85, 0, 0],\n        \"125\": [0.35001, 0.85, 0, 0],\n        \"710\": [0, 0.72222, 0, 0],\n        \"732\": [0, 0.72222, 0, 0],\n        \"770\": [0, 0.72222, 0, 0],\n        \"771\": [0, 0.72222, 0, 0],\n        \"8214\": [-0.00099, 0.601, 0, 0],\n        \"8593\": [1e-05, 0.6, 0, 0],\n        \"8595\": [1e-05, 0.6, 0, 0],\n        \"8657\": [1e-05, 0.6, 0, 0],\n        \"8659\": [1e-05, 0.6, 0, 0],\n        \"8719\": [0.25001, 0.75, 0, 0],\n        \"8720\": [0.25001, 0.75, 0, 0],\n        \"8721\": [0.25001, 0.75, 0, 0],\n        \"8730\": [0.35001, 0.85, 0, 0],\n        \"8739\": [-0.00599, 0.606, 0, 0],\n        \"8741\": [-0.00599, 0.606, 0, 0],\n        \"8747\": [0.30612, 0.805, 0.19445, 0],\n        \"8748\": [0.306, 0.805, 0.19445, 0],\n        \"8749\": [0.306, 0.805, 0.19445, 0],\n        \"8750\": [0.30612, 0.805, 0.19445, 0],\n        \"8896\": [0.25001, 0.75, 0, 0],\n        \"8897\": [0.25001, 0.75, 0, 0],\n        \"8898\": [0.25001, 0.75, 0, 0],\n        \"8899\": [0.25001, 0.75, 0, 0],\n        \"8968\": [0.35001, 0.85, 0, 0],\n        \"8969\": [0.35001, 0.85, 0, 0],\n        \"8970\": [0.35001, 0.85, 0, 0],\n        \"8971\": [0.35001, 0.85, 0, 0],\n        \"9168\": [-0.00099, 0.601, 0, 0],\n        \"10216\": [0.35001, 0.85, 0, 0],\n        \"10217\": [0.35001, 0.85, 0, 0],\n        \"10752\": [0.25001, 0.75, 0, 0],\n        \"10753\": [0.25001, 0.75, 0, 0],\n        \"10754\": [0.25001, 0.75, 0, 0],\n        \"10756\": [0.25001, 0.75, 0, 0],\n        \"10758\": [0.25001, 0.75, 0, 0],\n    },\n    \"Size2-Regular\": {\n        \"40\": [0.65002, 1.15, 0, 0],\n        \"41\": [0.65002, 1.15, 0, 0],\n        \"47\": [0.65002, 1.15, 0, 0],\n        \"91\": [0.65002, 1.15, 0, 0],\n        \"92\": [0.65002, 1.15, 0, 0],\n        \"93\": [0.65002, 1.15, 0, 0],\n        \"123\": [0.65002, 1.15, 0, 0],\n        \"125\": [0.65002, 1.15, 0, 0],\n        \"710\": [0, 0.75, 0, 0],\n        \"732\": [0, 0.75, 0, 0],\n        \"770\": [0, 0.75, 0, 0],\n        \"771\": [0, 0.75, 0, 0],\n        \"8719\": [0.55001, 1.05, 0, 0],\n        \"8720\": [0.55001, 1.05, 0, 0],\n        \"8721\": [0.55001, 1.05, 0, 0],\n        \"8730\": [0.65002, 1.15, 0, 0],\n        \"8747\": [0.86225, 1.36, 0.44445, 0],\n        \"8748\": [0.862, 1.36, 0.44445, 0],\n        \"8749\": [0.862, 1.36, 0.44445, 0],\n        \"8750\": [0.86225, 1.36, 0.44445, 0],\n        \"8896\": [0.55001, 1.05, 0, 0],\n        \"8897\": [0.55001, 1.05, 0, 0],\n        \"8898\": [0.55001, 1.05, 0, 0],\n        \"8899\": [0.55001, 1.05, 0, 0],\n        \"8968\": [0.65002, 1.15, 0, 0],\n        \"8969\": [0.65002, 1.15, 0, 0],\n        \"8970\": [0.65002, 1.15, 0, 0],\n        \"8971\": [0.65002, 1.15, 0, 0],\n        \"10216\": [0.65002, 1.15, 0, 0],\n        \"10217\": [0.65002, 1.15, 0, 0],\n        \"10752\": [0.55001, 1.05, 0, 0],\n        \"10753\": [0.55001, 1.05, 0, 0],\n        \"10754\": [0.55001, 1.05, 0, 0],\n        \"10756\": [0.55001, 1.05, 0, 0],\n        \"10758\": [0.55001, 1.05, 0, 0],\n    },\n    \"Size3-Regular\": {\n        \"40\": [0.95003, 1.45, 0, 0],\n        \"41\": [0.95003, 1.45, 0, 0],\n        \"47\": [0.95003, 1.45, 0, 0],\n        \"91\": [0.95003, 1.45, 0, 0],\n        \"92\": [0.95003, 1.45, 0, 0],\n        \"93\": [0.95003, 1.45, 0, 0],\n        \"123\": [0.95003, 1.45, 0, 0],\n        \"125\": [0.95003, 1.45, 0, 0],\n        \"710\": [0, 0.75, 0, 0],\n        \"732\": [0, 0.75, 0, 0],\n        \"770\": [0, 0.75, 0, 0],\n        \"771\": [0, 0.75, 0, 0],\n        \"8730\": [0.95003, 1.45, 0, 0],\n        \"8968\": [0.95003, 1.45, 0, 0],\n        \"8969\": [0.95003, 1.45, 0, 0],\n        \"8970\": [0.95003, 1.45, 0, 0],\n        \"8971\": [0.95003, 1.45, 0, 0],\n        \"10216\": [0.95003, 1.45, 0, 0],\n        \"10217\": [0.95003, 1.45, 0, 0],\n    },\n    \"Size4-Regular\": {\n        \"40\": [1.25003, 1.75, 0, 0],\n        \"41\": [1.25003, 1.75, 0, 0],\n        \"47\": [1.25003, 1.75, 0, 0],\n        \"91\": [1.25003, 1.75, 0, 0],\n        \"92\": [1.25003, 1.75, 0, 0],\n        \"93\": [1.25003, 1.75, 0, 0],\n        \"123\": [1.25003, 1.75, 0, 0],\n        \"125\": [1.25003, 1.75, 0, 0],\n        \"710\": [0, 0.825, 0, 0],\n        \"732\": [0, 0.825, 0, 0],\n        \"770\": [0, 0.825, 0, 0],\n        \"771\": [0, 0.825, 0, 0],\n        \"8730\": [1.25003, 1.75, 0, 0],\n        \"8968\": [1.25003, 1.75, 0, 0],\n        \"8969\": [1.25003, 1.75, 0, 0],\n        \"8970\": [1.25003, 1.75, 0, 0],\n        \"8971\": [1.25003, 1.75, 0, 0],\n        \"9115\": [0.64502, 1.155, 0, 0],\n        \"9116\": [1e-05, 0.6, 0, 0],\n        \"9117\": [0.64502, 1.155, 0, 0],\n        \"9118\": [0.64502, 1.155, 0, 0],\n        \"9119\": [1e-05, 0.6, 0, 0],\n        \"9120\": [0.64502, 1.155, 0, 0],\n        \"9121\": [0.64502, 1.155, 0, 0],\n        \"9122\": [-0.00099, 0.601, 0, 0],\n        \"9123\": [0.64502, 1.155, 0, 0],\n        \"9124\": [0.64502, 1.155, 0, 0],\n        \"9125\": [-0.00099, 0.601, 0, 0],\n        \"9126\": [0.64502, 1.155, 0, 0],\n        \"9127\": [1e-05, 0.9, 0, 0],\n        \"9128\": [0.65002, 1.15, 0, 0],\n        \"9129\": [0.90001, 0, 0, 0],\n        \"9130\": [0, 0.3, 0, 0],\n        \"9131\": [1e-05, 0.9, 0, 0],\n        \"9132\": [0.65002, 1.15, 0, 0],\n        \"9133\": [0.90001, 0, 0, 0],\n        \"9143\": [0.88502, 0.915, 0, 0],\n        \"10216\": [1.25003, 1.75, 0, 0],\n        \"10217\": [1.25003, 1.75, 0, 0],\n        \"57344\": [-0.00499, 0.605, 0, 0],\n        \"57345\": [-0.00499, 0.605, 0, 0],\n        \"57680\": [0, 0.12, 0, 0],\n        \"57681\": [0, 0.12, 0, 0],\n        \"57682\": [0, 0.12, 0, 0],\n        \"57683\": [0, 0.12, 0, 0],\n    },\n    \"Typewriter-Regular\": {\n        \"33\": [0, 0.61111, 0, 0],\n        \"34\": [0, 0.61111, 0, 0],\n        \"35\": [0, 0.61111, 0, 0],\n        \"36\": [0.08333, 0.69444, 0, 0],\n        \"37\": [0.08333, 0.69444, 0, 0],\n        \"38\": [0, 0.61111, 0, 0],\n        \"39\": [0, 0.61111, 0, 0],\n        \"40\": [0.08333, 0.69444, 0, 0],\n        \"41\": [0.08333, 0.69444, 0, 0],\n        \"42\": [0, 0.52083, 0, 0],\n        \"43\": [-0.08056, 0.53055, 0, 0],\n        \"44\": [0.13889, 0.125, 0, 0],\n        \"45\": [-0.08056, 0.53055, 0, 0],\n        \"46\": [0, 0.125, 0, 0],\n        \"47\": [0.08333, 0.69444, 0, 0],\n        \"48\": [0, 0.61111, 0, 0],\n        \"49\": [0, 0.61111, 0, 0],\n        \"50\": [0, 0.61111, 0, 0],\n        \"51\": [0, 0.61111, 0, 0],\n        \"52\": [0, 0.61111, 0, 0],\n        \"53\": [0, 0.61111, 0, 0],\n        \"54\": [0, 0.61111, 0, 0],\n        \"55\": [0, 0.61111, 0, 0],\n        \"56\": [0, 0.61111, 0, 0],\n        \"57\": [0, 0.61111, 0, 0],\n        \"58\": [0, 0.43056, 0, 0],\n        \"59\": [0.13889, 0.43056, 0, 0],\n        \"60\": [-0.05556, 0.55556, 0, 0],\n        \"61\": [-0.19549, 0.41562, 0, 0],\n        \"62\": [-0.05556, 0.55556, 0, 0],\n        \"63\": [0, 0.61111, 0, 0],\n        \"64\": [0, 0.61111, 0, 0],\n        \"65\": [0, 0.61111, 0, 0],\n        \"66\": [0, 0.61111, 0, 0],\n        \"67\": [0, 0.61111, 0, 0],\n        \"68\": [0, 0.61111, 0, 0],\n        \"69\": [0, 0.61111, 0, 0],\n        \"70\": [0, 0.61111, 0, 0],\n        \"71\": [0, 0.61111, 0, 0],\n        \"72\": [0, 0.61111, 0, 0],\n        \"73\": [0, 0.61111, 0, 0],\n        \"74\": [0, 0.61111, 0, 0],\n        \"75\": [0, 0.61111, 0, 0],\n        \"76\": [0, 0.61111, 0, 0],\n        \"77\": [0, 0.61111, 0, 0],\n        \"78\": [0, 0.61111, 0, 0],\n        \"79\": [0, 0.61111, 0, 0],\n        \"80\": [0, 0.61111, 0, 0],\n        \"81\": [0.13889, 0.61111, 0, 0],\n        \"82\": [0, 0.61111, 0, 0],\n        \"83\": [0, 0.61111, 0, 0],\n        \"84\": [0, 0.61111, 0, 0],\n        \"85\": [0, 0.61111, 0, 0],\n        \"86\": [0, 0.61111, 0, 0],\n        \"87\": [0, 0.61111, 0, 0],\n        \"88\": [0, 0.61111, 0, 0],\n        \"89\": [0, 0.61111, 0, 0],\n        \"90\": [0, 0.61111, 0, 0],\n        \"91\": [0.08333, 0.69444, 0, 0],\n        \"92\": [0.08333, 0.69444, 0, 0],\n        \"93\": [0.08333, 0.69444, 0, 0],\n        \"94\": [0, 0.61111, 0, 0],\n        \"95\": [0.09514, 0, 0, 0],\n        \"96\": [0, 0.61111, 0, 0],\n        \"97\": [0, 0.43056, 0, 0],\n        \"98\": [0, 0.61111, 0, 0],\n        \"99\": [0, 0.43056, 0, 0],\n        \"100\": [0, 0.61111, 0, 0],\n        \"101\": [0, 0.43056, 0, 0],\n        \"102\": [0, 0.61111, 0, 0],\n        \"103\": [0.22222, 0.43056, 0, 0],\n        \"104\": [0, 0.61111, 0, 0],\n        \"105\": [0, 0.61111, 0, 0],\n        \"106\": [0.22222, 0.61111, 0, 0],\n        \"107\": [0, 0.61111, 0, 0],\n        \"108\": [0, 0.61111, 0, 0],\n        \"109\": [0, 0.43056, 0, 0],\n        \"110\": [0, 0.43056, 0, 0],\n        \"111\": [0, 0.43056, 0, 0],\n        \"112\": [0.22222, 0.43056, 0, 0],\n        \"113\": [0.22222, 0.43056, 0, 0],\n        \"114\": [0, 0.43056, 0, 0],\n        \"115\": [0, 0.43056, 0, 0],\n        \"116\": [0, 0.55358, 0, 0],\n        \"117\": [0, 0.43056, 0, 0],\n        \"118\": [0, 0.43056, 0, 0],\n        \"119\": [0, 0.43056, 0, 0],\n        \"120\": [0, 0.43056, 0, 0],\n        \"121\": [0.22222, 0.43056, 0, 0],\n        \"122\": [0, 0.43056, 0, 0],\n        \"123\": [0.08333, 0.69444, 0, 0],\n        \"124\": [0.08333, 0.69444, 0, 0],\n        \"125\": [0.08333, 0.69444, 0, 0],\n        \"126\": [0, 0.61111, 0, 0],\n        \"127\": [0, 0.61111, 0, 0],\n        \"305\": [0, 0.43056, 0, 0],\n        \"567\": [0.22222, 0.43056, 0, 0],\n        \"768\": [0, 0.61111, 0, 0],\n        \"769\": [0, 0.61111, 0, 0],\n        \"770\": [0, 0.61111, 0, 0],\n        \"771\": [0, 0.61111, 0, 0],\n        \"772\": [0, 0.56555, 0, 0],\n        \"774\": [0, 0.61111, 0, 0],\n        \"776\": [0, 0.61111, 0, 0],\n        \"778\": [0, 0.61111, 0, 0],\n        \"780\": [0, 0.56597, 0, 0],\n        \"915\": [0, 0.61111, 0, 0],\n        \"916\": [0, 0.61111, 0, 0],\n        \"920\": [0, 0.61111, 0, 0],\n        \"923\": [0, 0.61111, 0, 0],\n        \"926\": [0, 0.61111, 0, 0],\n        \"928\": [0, 0.61111, 0, 0],\n        \"931\": [0, 0.61111, 0, 0],\n        \"933\": [0, 0.61111, 0, 0],\n        \"934\": [0, 0.61111, 0, 0],\n        \"936\": [0, 0.61111, 0, 0],\n        \"937\": [0, 0.61111, 0, 0],\n        \"2018\": [0, 0.61111, 0, 0],\n        \"2019\": [0, 0.61111, 0, 0],\n        \"8242\": [0, 0.61111, 0, 0],\n    },\n};\n","/**\n * This file holds a list of all no-argument functions and single-character\n * symbols (like 'a' or ';').\n *\n * For each of the symbols, there are three properties they can have:\n * - font (required): the font to be used for this symbol. Either \"main\" (the\n     normal font), or \"ams\" (the ams fonts).\n * - group (required): the ParseNode group type the symbol should have (i.e.\n     \"textord\", \"mathord\", etc).\n     See https://github.com/Khan/KaTeX/wiki/Examining-TeX#group-types\n * - replace: the character that this symbol or function should be\n *   replaced with (i.e. \"\\phi\" has a replace value of \"\\u03d5\", the phi\n *   character in the main font).\n *\n * The outermost map in the table indicates what mode the symbols should be\n * accepted in (e.g. \"math\" or \"text\").\n */\n\nmodule.exports = {\n    math: {},\n    text: {},\n};\n\nfunction defineSymbol(mode, font, group, replace, name) {\n    module.exports[mode][name] = {\n        font: font,\n        group: group,\n        replace: replace,\n    };\n}\n\n// Some abbreviations for commonly used strings.\n// This helps minify the code, and also spotting typos using jshint.\n\n// modes:\nvar math = \"math\";\nvar text = \"text\";\n\n// fonts:\nvar main = \"main\";\nvar ams = \"ams\";\n\n// groups:\nvar accent = \"accent\";\nvar bin = \"bin\";\nvar close = \"close\";\nvar inner = \"inner\";\nvar mathord = \"mathord\";\nvar op = \"op\";\nvar open = \"open\";\nvar punct = \"punct\";\nvar rel = \"rel\";\nvar spacing = \"spacing\";\nvar textord = \"textord\";\n\n// Now comes the symbol table\n\n// Relation Symbols\ndefineSymbol(math, main, rel, \"\\u2261\", \"\\\\equiv\");\ndefineSymbol(math, main, rel, \"\\u227a\", \"\\\\prec\");\ndefineSymbol(math, main, rel, \"\\u227b\", \"\\\\succ\");\ndefineSymbol(math, main, rel, \"\\u223c\", \"\\\\sim\");\ndefineSymbol(math, main, rel, \"\\u22a5\", \"\\\\perp\");\ndefineSymbol(math, main, rel, \"\\u2aaf\", \"\\\\preceq\");\ndefineSymbol(math, main, rel, \"\\u2ab0\", \"\\\\succeq\");\ndefineSymbol(math, main, rel, \"\\u2243\", \"\\\\simeq\");\ndefineSymbol(math, main, rel, \"\\u2223\", \"\\\\mid\");\ndefineSymbol(math, main, rel, \"\\u226a\", \"\\\\ll\");\ndefineSymbol(math, main, rel, \"\\u226b\", \"\\\\gg\");\ndefineSymbol(math, main, rel, \"\\u224d\", \"\\\\asymp\");\ndefineSymbol(math, main, rel, \"\\u2225\", \"\\\\parallel\");\ndefineSymbol(math, main, rel, \"\\u22c8\", \"\\\\bowtie\");\ndefineSymbol(math, main, rel, \"\\u2323\", \"\\\\smile\");\ndefineSymbol(math, main, rel, \"\\u2291\", \"\\\\sqsubseteq\");\ndefineSymbol(math, main, rel, \"\\u2292\", \"\\\\sqsupseteq\");\ndefineSymbol(math, main, rel, \"\\u2250\", \"\\\\doteq\");\ndefineSymbol(math, main, rel, \"\\u2322\", \"\\\\frown\");\ndefineSymbol(math, main, rel, \"\\u220b\", \"\\\\ni\");\ndefineSymbol(math, main, rel, \"\\u221d\", \"\\\\propto\");\ndefineSymbol(math, main, rel, \"\\u22a2\", \"\\\\vdash\");\ndefineSymbol(math, main, rel, \"\\u22a3\", \"\\\\dashv\");\ndefineSymbol(math, main, rel, \"\\u220b\", \"\\\\owns\");\n\n// Punctuation\ndefineSymbol(math, main, punct, \"\\u002e\", \"\\\\ldotp\");\ndefineSymbol(math, main, punct, \"\\u22c5\", \"\\\\cdotp\");\n\n// Misc Symbols\ndefineSymbol(math, main, textord, \"\\u0023\", \"\\\\#\");\ndefineSymbol(math, main, textord, \"\\u0026\", \"\\\\&\");\ndefineSymbol(math, main, textord, \"\\u2135\", \"\\\\aleph\");\ndefineSymbol(math, main, textord, \"\\u2200\", \"\\\\forall\");\ndefineSymbol(math, main, textord, \"\\u210f\", \"\\\\hbar\");\ndefineSymbol(math, main, textord, \"\\u2203\", \"\\\\exists\");\ndefineSymbol(math, main, textord, \"\\u2207\", \"\\\\nabla\");\ndefineSymbol(math, main, textord, \"\\u266d\", \"\\\\flat\");\ndefineSymbol(math, main, textord, \"\\u2113\", \"\\\\ell\");\ndefineSymbol(math, main, textord, \"\\u266e\", \"\\\\natural\");\ndefineSymbol(math, main, textord, \"\\u2663\", \"\\\\clubsuit\");\ndefineSymbol(math, main, textord, \"\\u2118\", \"\\\\wp\");\ndefineSymbol(math, main, textord, \"\\u266f\", \"\\\\sharp\");\ndefineSymbol(math, main, textord, \"\\u2662\", \"\\\\diamondsuit\");\ndefineSymbol(math, main, textord, \"\\u211c\", \"\\\\Re\");\ndefineSymbol(math, main, textord, \"\\u2661\", \"\\\\heartsuit\");\ndefineSymbol(math, main, textord, \"\\u2111\", \"\\\\Im\");\ndefineSymbol(math, main, textord, \"\\u2660\", \"\\\\spadesuit\");\n\n// Math and Text\ndefineSymbol(math, main, textord, \"\\u2020\", \"\\\\dag\");\ndefineSymbol(math, main, textord, \"\\u2021\", \"\\\\ddag\");\n\n// Large Delimiters\ndefineSymbol(math, main, close, \"\\u23b1\", \"\\\\rmoustache\");\ndefineSymbol(math, main, open, \"\\u23b0\", \"\\\\lmoustache\");\ndefineSymbol(math, main, close, \"\\u27ef\", \"\\\\rgroup\");\ndefineSymbol(math, main, open, \"\\u27ee\", \"\\\\lgroup\");\n\n// Binary Operators\ndefineSymbol(math, main, bin, \"\\u2213\", \"\\\\mp\");\ndefineSymbol(math, main, bin, \"\\u2296\", \"\\\\ominus\");\ndefineSymbol(math, main, bin, \"\\u228e\", \"\\\\uplus\");\ndefineSymbol(math, main, bin, \"\\u2293\", \"\\\\sqcap\");\ndefineSymbol(math, main, bin, \"\\u2217\", \"\\\\ast\");\ndefineSymbol(math, main, bin, \"\\u2294\", \"\\\\sqcup\");\ndefineSymbol(math, main, bin, \"\\u25ef\", \"\\\\bigcirc\");\ndefineSymbol(math, main, bin, \"\\u2219\", \"\\\\bullet\");\ndefineSymbol(math, main, bin, \"\\u2021\", \"\\\\ddagger\");\ndefineSymbol(math, main, bin, \"\\u2240\", \"\\\\wr\");\ndefineSymbol(math, main, bin, \"\\u2a3f\", \"\\\\amalg\");\n\n// Arrow Symbols\ndefineSymbol(math, main, rel, \"\\u27f5\", \"\\\\longleftarrow\");\ndefineSymbol(math, main, rel, \"\\u21d0\", \"\\\\Leftarrow\");\ndefineSymbol(math, main, rel, \"\\u27f8\", \"\\\\Longleftarrow\");\ndefineSymbol(math, main, rel, \"\\u27f6\", \"\\\\longrightarrow\");\ndefineSymbol(math, main, rel, \"\\u21d2\", \"\\\\Rightarrow\");\ndefineSymbol(math, main, rel, \"\\u27f9\", \"\\\\Longrightarrow\");\ndefineSymbol(math, main, rel, \"\\u2194\", \"\\\\leftrightarrow\");\ndefineSymbol(math, main, rel, \"\\u27f7\", \"\\\\longleftrightarrow\");\ndefineSymbol(math, main, rel, \"\\u21d4\", \"\\\\Leftrightarrow\");\ndefineSymbol(math, main, rel, \"\\u27fa\", \"\\\\Longleftrightarrow\");\ndefineSymbol(math, main, rel, \"\\u21a6\", \"\\\\mapsto\");\ndefineSymbol(math, main, rel, \"\\u27fc\", \"\\\\longmapsto\");\ndefineSymbol(math, main, rel, \"\\u2197\", \"\\\\nearrow\");\ndefineSymbol(math, main, rel, \"\\u21a9\", \"\\\\hookleftarrow\");\ndefineSymbol(math, main, rel, \"\\u21aa\", \"\\\\hookrightarrow\");\ndefineSymbol(math, main, rel, \"\\u2198\", \"\\\\searrow\");\ndefineSymbol(math, main, rel, \"\\u21bc\", \"\\\\leftharpoonup\");\ndefineSymbol(math, main, rel, \"\\u21c0\", \"\\\\rightharpoonup\");\ndefineSymbol(math, main, rel, \"\\u2199\", \"\\\\swarrow\");\ndefineSymbol(math, main, rel, \"\\u21bd\", \"\\\\leftharpoondown\");\ndefineSymbol(math, main, rel, \"\\u21c1\", \"\\\\rightharpoondown\");\ndefineSymbol(math, main, rel, \"\\u2196\", \"\\\\nwarrow\");\ndefineSymbol(math, main, rel, \"\\u21cc\", \"\\\\rightleftharpoons\");\n\n// AMS Negated Binary Relations\ndefineSymbol(math, ams, rel, \"\\u226e\", \"\\\\nless\");\ndefineSymbol(math, ams, rel, \"\\ue010\", \"\\\\nleqslant\");\ndefineSymbol(math, ams, rel, \"\\ue011\", \"\\\\nleqq\");\ndefineSymbol(math, ams, rel, \"\\u2a87\", \"\\\\lneq\");\ndefineSymbol(math, ams, rel, \"\\u2268\", \"\\\\lneqq\");\ndefineSymbol(math, ams, rel, \"\\ue00c\", \"\\\\lvertneqq\");\ndefineSymbol(math, ams, rel, \"\\u22e6\", \"\\\\lnsim\");\ndefineSymbol(math, ams, rel, \"\\u2a89\", \"\\\\lnapprox\");\ndefineSymbol(math, ams, rel, \"\\u2280\", \"\\\\nprec\");\ndefineSymbol(math, ams, rel, \"\\u22e0\", \"\\\\npreceq\");\ndefineSymbol(math, ams, rel, \"\\u22e8\", \"\\\\precnsim\");\ndefineSymbol(math, ams, rel, \"\\u2ab9\", \"\\\\precnapprox\");\ndefineSymbol(math, ams, rel, \"\\u2241\", \"\\\\nsim\");\ndefineSymbol(math, ams, rel, \"\\ue006\", \"\\\\nshortmid\");\ndefineSymbol(math, ams, rel, \"\\u2224\", \"\\\\nmid\");\ndefineSymbol(math, ams, rel, \"\\u22ac\", \"\\\\nvdash\");\ndefineSymbol(math, ams, rel, \"\\u22ad\", \"\\\\nvDash\");\ndefineSymbol(math, ams, rel, \"\\u22ea\", \"\\\\ntriangleleft\");\ndefineSymbol(math, ams, rel, \"\\u22ec\", \"\\\\ntrianglelefteq\");\ndefineSymbol(math, ams, rel, \"\\u228a\", \"\\\\subsetneq\");\ndefineSymbol(math, ams, rel, \"\\ue01a\", \"\\\\varsubsetneq\");\ndefineSymbol(math, ams, rel, \"\\u2acb\", \"\\\\subsetneqq\");\ndefineSymbol(math, ams, rel, \"\\ue017\", \"\\\\varsubsetneqq\");\ndefineSymbol(math, ams, rel, \"\\u226f\", \"\\\\ngtr\");\ndefineSymbol(math, ams, rel, \"\\ue00f\", \"\\\\ngeqslant\");\ndefineSymbol(math, ams, rel, \"\\ue00e\", \"\\\\ngeqq\");\ndefineSymbol(math, ams, rel, \"\\u2a88\", \"\\\\gneq\");\ndefineSymbol(math, ams, rel, \"\\u2269\", \"\\\\gneqq\");\ndefineSymbol(math, ams, rel, \"\\ue00d\", \"\\\\gvertneqq\");\ndefineSymbol(math, ams, rel, \"\\u22e7\", \"\\\\gnsim\");\ndefineSymbol(math, ams, rel, \"\\u2a8a\", \"\\\\gnapprox\");\ndefineSymbol(math, ams, rel, \"\\u2281\", \"\\\\nsucc\");\ndefineSymbol(math, ams, rel, \"\\u22e1\", \"\\\\nsucceq\");\ndefineSymbol(math, ams, rel, \"\\u22e9\", \"\\\\succnsim\");\ndefineSymbol(math, ams, rel, \"\\u2aba\", \"\\\\succnapprox\");\ndefineSymbol(math, ams, rel, \"\\u2246\", \"\\\\ncong\");\ndefineSymbol(math, ams, rel, \"\\ue007\", \"\\\\nshortparallel\");\ndefineSymbol(math, ams, rel, \"\\u2226\", \"\\\\nparallel\");\ndefineSymbol(math, ams, rel, \"\\u22af\", \"\\\\nVDash\");\ndefineSymbol(math, ams, rel, \"\\u22eb\", \"\\\\ntriangleright\");\ndefineSymbol(math, ams, rel, \"\\u22ed\", \"\\\\ntrianglerighteq\");\ndefineSymbol(math, ams, rel, \"\\ue018\", \"\\\\nsupseteqq\");\ndefineSymbol(math, ams, rel, \"\\u228b\", \"\\\\supsetneq\");\ndefineSymbol(math, ams, rel, \"\\ue01b\", \"\\\\varsupsetneq\");\ndefineSymbol(math, ams, rel, \"\\u2acc\", \"\\\\supsetneqq\");\ndefineSymbol(math, ams, rel, \"\\ue019\", \"\\\\varsupsetneqq\");\ndefineSymbol(math, ams, rel, \"\\u22ae\", \"\\\\nVdash\");\ndefineSymbol(math, ams, rel, \"\\u2ab5\", \"\\\\precneqq\");\ndefineSymbol(math, ams, rel, \"\\u2ab6\", \"\\\\succneqq\");\ndefineSymbol(math, ams, rel, \"\\ue016\", \"\\\\nsubseteqq\");\ndefineSymbol(math, ams, bin, \"\\u22b4\", \"\\\\unlhd\");\ndefineSymbol(math, ams, bin, \"\\u22b5\", \"\\\\unrhd\");\n\n// AMS Negated Arrows\ndefineSymbol(math, ams, rel, \"\\u219a\", \"\\\\nleftarrow\");\ndefineSymbol(math, ams, rel, \"\\u219b\", \"\\\\nrightarrow\");\ndefineSymbol(math, ams, rel, \"\\u21cd\", \"\\\\nLeftarrow\");\ndefineSymbol(math, ams, rel, \"\\u21cf\", \"\\\\nRightarrow\");\ndefineSymbol(math, ams, rel, \"\\u21ae\", \"\\\\nleftrightarrow\");\ndefineSymbol(math, ams, rel, \"\\u21ce\", \"\\\\nLeftrightarrow\");\n\n// AMS Misc\ndefineSymbol(math, ams, rel, \"\\u25b3\", \"\\\\vartriangle\");\ndefineSymbol(math, ams, textord, \"\\u210f\", \"\\\\hslash\");\ndefineSymbol(math, ams, textord, \"\\u25bd\", \"\\\\triangledown\");\ndefineSymbol(math, ams, textord, \"\\u25ca\", \"\\\\lozenge\");\ndefineSymbol(math, ams, textord, \"\\u24c8\", \"\\\\circledS\");\ndefineSymbol(math, ams, textord, \"\\u00ae\", \"\\\\circledR\");\ndefineSymbol(math, ams, textord, \"\\u2221\", \"\\\\measuredangle\");\ndefineSymbol(math, ams, textord, \"\\u2204\", \"\\\\nexists\");\ndefineSymbol(math, ams, textord, \"\\u2127\", \"\\\\mho\");\ndefineSymbol(math, ams, textord, \"\\u2132\", \"\\\\Finv\");\ndefineSymbol(math, ams, textord, \"\\u2141\", \"\\\\Game\");\ndefineSymbol(math, ams, textord, \"\\u006b\", \"\\\\Bbbk\");\ndefineSymbol(math, ams, textord, \"\\u2035\", \"\\\\backprime\");\ndefineSymbol(math, ams, textord, \"\\u25b2\", \"\\\\blacktriangle\");\ndefineSymbol(math, ams, textord, \"\\u25bc\", \"\\\\blacktriangledown\");\ndefineSymbol(math, ams, textord, \"\\u25a0\", \"\\\\blacksquare\");\ndefineSymbol(math, ams, textord, \"\\u29eb\", \"\\\\blacklozenge\");\ndefineSymbol(math, ams, textord, \"\\u2605\", \"\\\\bigstar\");\ndefineSymbol(math, ams, textord, \"\\u2222\", \"\\\\sphericalangle\");\ndefineSymbol(math, ams, textord, \"\\u2201\", \"\\\\complement\");\ndefineSymbol(math, ams, textord, \"\\u00f0\", \"\\\\eth\");\ndefineSymbol(math, ams, textord, \"\\u2571\", \"\\\\diagup\");\ndefineSymbol(math, ams, textord, \"\\u2572\", \"\\\\diagdown\");\ndefineSymbol(math, ams, textord, \"\\u25a1\", \"\\\\square\");\ndefineSymbol(math, ams, textord, \"\\u25a1\", \"\\\\Box\");\ndefineSymbol(math, ams, textord, \"\\u25ca\", \"\\\\Diamond\");\ndefineSymbol(math, ams, textord, \"\\u00a5\", \"\\\\yen\");\ndefineSymbol(math, ams, textord, \"\\u2713\", \"\\\\checkmark\");\n\n// AMS Hebrew\ndefineSymbol(math, ams, textord, \"\\u2136\", \"\\\\beth\");\ndefineSymbol(math, ams, textord, \"\\u2138\", \"\\\\daleth\");\ndefineSymbol(math, ams, textord, \"\\u2137\", \"\\\\gimel\");\n\n// AMS Greek\ndefineSymbol(math, ams, textord, \"\\u03dd\", \"\\\\digamma\");\ndefineSymbol(math, ams, textord, \"\\u03f0\", \"\\\\varkappa\");\n\n// AMS Delimiters\ndefineSymbol(math, ams, open, \"\\u250c\", \"\\\\ulcorner\");\ndefineSymbol(math, ams, close, \"\\u2510\", \"\\\\urcorner\");\ndefineSymbol(math, ams, open, \"\\u2514\", \"\\\\llcorner\");\ndefineSymbol(math, ams, close, \"\\u2518\", \"\\\\lrcorner\");\n\n// AMS Binary Relations\ndefineSymbol(math, ams, rel, \"\\u2266\", \"\\\\leqq\");\ndefineSymbol(math, ams, rel, \"\\u2a7d\", \"\\\\leqslant\");\ndefineSymbol(math, ams, rel, \"\\u2a95\", \"\\\\eqslantless\");\ndefineSymbol(math, ams, rel, \"\\u2272\", \"\\\\lesssim\");\ndefineSymbol(math, ams, rel, \"\\u2a85\", \"\\\\lessapprox\");\ndefineSymbol(math, ams, rel, \"\\u224a\", \"\\\\approxeq\");\ndefineSymbol(math, ams, bin, \"\\u22d6\", \"\\\\lessdot\");\ndefineSymbol(math, ams, rel, \"\\u22d8\", \"\\\\lll\");\ndefineSymbol(math, ams, rel, \"\\u2276\", \"\\\\lessgtr\");\ndefineSymbol(math, ams, rel, \"\\u22da\", \"\\\\lesseqgtr\");\ndefineSymbol(math, ams, rel, \"\\u2a8b\", \"\\\\lesseqqgtr\");\ndefineSymbol(math, ams, rel, \"\\u2251\", \"\\\\doteqdot\");\ndefineSymbol(math, ams, rel, \"\\u2253\", \"\\\\risingdotseq\");\ndefineSymbol(math, ams, rel, \"\\u2252\", \"\\\\fallingdotseq\");\ndefineSymbol(math, ams, rel, \"\\u223d\", \"\\\\backsim\");\ndefineSymbol(math, ams, rel, \"\\u22cd\", \"\\\\backsimeq\");\ndefineSymbol(math, ams, rel, \"\\u2ac5\", \"\\\\subseteqq\");\ndefineSymbol(math, ams, rel, \"\\u22d0\", \"\\\\Subset\");\ndefineSymbol(math, ams, rel, \"\\u228f\", \"\\\\sqsubset\");\ndefineSymbol(math, ams, rel, \"\\u227c\", \"\\\\preccurlyeq\");\ndefineSymbol(math, ams, rel, \"\\u22de\", \"\\\\curlyeqprec\");\ndefineSymbol(math, ams, rel, \"\\u227e\", \"\\\\precsim\");\ndefineSymbol(math, ams, rel, \"\\u2ab7\", \"\\\\precapprox\");\ndefineSymbol(math, ams, rel, \"\\u22b2\", \"\\\\vartriangleleft\");\ndefineSymbol(math, ams, rel, \"\\u22b4\", \"\\\\trianglelefteq\");\ndefineSymbol(math, ams, rel, \"\\u22a8\", \"\\\\vDash\");\ndefineSymbol(math, ams, rel, \"\\u22aa\", \"\\\\Vvdash\");\ndefineSymbol(math, ams, rel, \"\\u2323\", \"\\\\smallsmile\");\ndefineSymbol(math, ams, rel, \"\\u2322\", \"\\\\smallfrown\");\ndefineSymbol(math, ams, rel, \"\\u224f\", \"\\\\bumpeq\");\ndefineSymbol(math, ams, rel, \"\\u224e\", \"\\\\Bumpeq\");\ndefineSymbol(math, ams, rel, \"\\u2267\", \"\\\\geqq\");\ndefineSymbol(math, ams, rel, \"\\u2a7e\", \"\\\\geqslant\");\ndefineSymbol(math, ams, rel, \"\\u2a96\", \"\\\\eqslantgtr\");\ndefineSymbol(math, ams, rel, \"\\u2273\", \"\\\\gtrsim\");\ndefineSymbol(math, ams, rel, \"\\u2a86\", \"\\\\gtrapprox\");\ndefineSymbol(math, ams, bin, \"\\u22d7\", \"\\\\gtrdot\");\ndefineSymbol(math, ams, rel, \"\\u22d9\", \"\\\\ggg\");\ndefineSymbol(math, ams, rel, \"\\u2277\", \"\\\\gtrless\");\ndefineSymbol(math, ams, rel, \"\\u22db\", \"\\\\gtreqless\");\ndefineSymbol(math, ams, rel, \"\\u2a8c\", \"\\\\gtreqqless\");\ndefineSymbol(math, ams, rel, \"\\u2256\", \"\\\\eqcirc\");\ndefineSymbol(math, ams, rel, \"\\u2257\", \"\\\\circeq\");\ndefineSymbol(math, ams, rel, \"\\u225c\", \"\\\\triangleq\");\ndefineSymbol(math, ams, rel, \"\\u223c\", \"\\\\thicksim\");\ndefineSymbol(math, ams, rel, \"\\u2248\", \"\\\\thickapprox\");\ndefineSymbol(math, ams, rel, \"\\u2ac6\", \"\\\\supseteqq\");\ndefineSymbol(math, ams, rel, \"\\u22d1\", \"\\\\Supset\");\ndefineSymbol(math, ams, rel, \"\\u2290\", \"\\\\sqsupset\");\ndefineSymbol(math, ams, rel, \"\\u227d\", \"\\\\succcurlyeq\");\ndefineSymbol(math, ams, rel, \"\\u22df\", \"\\\\curlyeqsucc\");\ndefineSymbol(math, ams, rel, \"\\u227f\", \"\\\\succsim\");\ndefineSymbol(math, ams, rel, \"\\u2ab8\", \"\\\\succapprox\");\ndefineSymbol(math, ams, rel, \"\\u22b3\", \"\\\\vartriangleright\");\ndefineSymbol(math, ams, rel, \"\\u22b5\", \"\\\\trianglerighteq\");\ndefineSymbol(math, ams, rel, \"\\u22a9\", \"\\\\Vdash\");\ndefineSymbol(math, ams, rel, \"\\u2223\", \"\\\\shortmid\");\ndefineSymbol(math, ams, rel, \"\\u2225\", \"\\\\shortparallel\");\ndefineSymbol(math, ams, rel, \"\\u226c\", \"\\\\between\");\ndefineSymbol(math, ams, rel, \"\\u22d4\", \"\\\\pitchfork\");\ndefineSymbol(math, ams, rel, \"\\u221d\", \"\\\\varpropto\");\ndefineSymbol(math, ams, rel, \"\\u25c0\", \"\\\\blacktriangleleft\");\ndefineSymbol(math, ams, rel, \"\\u2234\", \"\\\\therefore\");\ndefineSymbol(math, ams, rel, \"\\u220d\", \"\\\\backepsilon\");\ndefineSymbol(math, ams, rel, \"\\u25b6\", \"\\\\blacktriangleright\");\ndefineSymbol(math, ams, rel, \"\\u2235\", \"\\\\because\");\ndefineSymbol(math, ams, rel, \"\\u22d8\", \"\\\\llless\");\ndefineSymbol(math, ams, rel, \"\\u22d9\", \"\\\\gggtr\");\ndefineSymbol(math, ams, bin, \"\\u22b2\", \"\\\\lhd\");\ndefineSymbol(math, ams, bin, \"\\u22b3\", \"\\\\rhd\");\ndefineSymbol(math, ams, rel, \"\\u2242\", \"\\\\eqsim\");\ndefineSymbol(math, main, rel, \"\\u22c8\", \"\\\\Join\");\ndefineSymbol(math, ams, rel, \"\\u2251\", \"\\\\Doteq\");\n\n// AMS Binary Operators\ndefineSymbol(math, ams, bin, \"\\u2214\", \"\\\\dotplus\");\ndefineSymbol(math, ams, bin, \"\\u2216\", \"\\\\smallsetminus\");\ndefineSymbol(math, ams, bin, \"\\u22d2\", \"\\\\Cap\");\ndefineSymbol(math, ams, bin, \"\\u22d3\", \"\\\\Cup\");\ndefineSymbol(math, ams, bin, \"\\u2a5e\", \"\\\\doublebarwedge\");\ndefineSymbol(math, ams, bin, \"\\u229f\", \"\\\\boxminus\");\ndefineSymbol(math, ams, bin, \"\\u229e\", \"\\\\boxplus\");\ndefineSymbol(math, ams, bin, \"\\u22c7\", \"\\\\divideontimes\");\ndefineSymbol(math, ams, bin, \"\\u22c9\", \"\\\\ltimes\");\ndefineSymbol(math, ams, bin, \"\\u22ca\", \"\\\\rtimes\");\ndefineSymbol(math, ams, bin, \"\\u22cb\", \"\\\\leftthreetimes\");\ndefineSymbol(math, ams, bin, \"\\u22cc\", \"\\\\rightthreetimes\");\ndefineSymbol(math, ams, bin, \"\\u22cf\", \"\\\\curlywedge\");\ndefineSymbol(math, ams, bin, \"\\u22ce\", \"\\\\curlyvee\");\ndefineSymbol(math, ams, bin, \"\\u229d\", \"\\\\circleddash\");\ndefineSymbol(math, ams, bin, \"\\u229b\", \"\\\\circledast\");\ndefineSymbol(math, ams, bin, \"\\u22c5\", \"\\\\centerdot\");\ndefineSymbol(math, ams, bin, \"\\u22ba\", \"\\\\intercal\");\ndefineSymbol(math, ams, bin, \"\\u22d2\", \"\\\\doublecap\");\ndefineSymbol(math, ams, bin, \"\\u22d3\", \"\\\\doublecup\");\ndefineSymbol(math, ams, bin, \"\\u22a0\", \"\\\\boxtimes\");\n\n// AMS Arrows\ndefineSymbol(math, ams, rel, \"\\u21e2\", \"\\\\dashrightarrow\");\ndefineSymbol(math, ams, rel, \"\\u21e0\", \"\\\\dashleftarrow\");\ndefineSymbol(math, ams, rel, \"\\u21c7\", \"\\\\leftleftarrows\");\ndefineSymbol(math, ams, rel, \"\\u21c6\", \"\\\\leftrightarrows\");\ndefineSymbol(math, ams, rel, \"\\u21da\", \"\\\\Lleftarrow\");\ndefineSymbol(math, ams, rel, \"\\u219e\", \"\\\\twoheadleftarrow\");\ndefineSymbol(math, ams, rel, \"\\u21a2\", \"\\\\leftarrowtail\");\ndefineSymbol(math, ams, rel, \"\\u21ab\", \"\\\\looparrowleft\");\ndefineSymbol(math, ams, rel, \"\\u21cb\", \"\\\\leftrightharpoons\");\ndefineSymbol(math, ams, rel, \"\\u21b6\", \"\\\\curvearrowleft\");\ndefineSymbol(math, ams, rel, \"\\u21ba\", \"\\\\circlearrowleft\");\ndefineSymbol(math, ams, rel, \"\\u21b0\", \"\\\\Lsh\");\ndefineSymbol(math, ams, rel, \"\\u21c8\", \"\\\\upuparrows\");\ndefineSymbol(math, ams, rel, \"\\u21bf\", \"\\\\upharpoonleft\");\ndefineSymbol(math, ams, rel, \"\\u21c3\", \"\\\\downharpoonleft\");\ndefineSymbol(math, ams, rel, \"\\u22b8\", \"\\\\multimap\");\ndefineSymbol(math, ams, rel, \"\\u21ad\", \"\\\\leftrightsquigarrow\");\ndefineSymbol(math, ams, rel, \"\\u21c9\", \"\\\\rightrightarrows\");\ndefineSymbol(math, ams, rel, \"\\u21c4\", \"\\\\rightleftarrows\");\ndefineSymbol(math, ams, rel, \"\\u21a0\", \"\\\\twoheadrightarrow\");\ndefineSymbol(math, ams, rel, \"\\u21a3\", \"\\\\rightarrowtail\");\ndefineSymbol(math, ams, rel, \"\\u21ac\", \"\\\\looparrowright\");\ndefineSymbol(math, ams, rel, \"\\u21b7\", \"\\\\curvearrowright\");\ndefineSymbol(math, ams, rel, \"\\u21bb\", \"\\\\circlearrowright\");\ndefineSymbol(math, ams, rel, \"\\u21b1\", \"\\\\Rsh\");\ndefineSymbol(math, ams, rel, \"\\u21ca\", \"\\\\downdownarrows\");\ndefineSymbol(math, ams, rel, \"\\u21be\", \"\\\\upharpoonright\");\ndefineSymbol(math, ams, rel, \"\\u21c2\", \"\\\\downharpoonright\");\ndefineSymbol(math, ams, rel, \"\\u21dd\", \"\\\\rightsquigarrow\");\ndefineSymbol(math, ams, rel, \"\\u21dd\", \"\\\\leadsto\");\ndefineSymbol(math, ams, rel, \"\\u21db\", \"\\\\Rrightarrow\");\ndefineSymbol(math, ams, rel, \"\\u21be\", \"\\\\restriction\");\n\ndefineSymbol(math, main, textord, \"\\u2018\", \"`\");\ndefineSymbol(math, main, textord, \"$\", \"\\\\$\");\ndefineSymbol(math, main, textord, \"%\", \"\\\\%\");\ndefineSymbol(math, main, textord, \"_\", \"\\\\_\");\ndefineSymbol(math, main, textord, \"\\u2220\", \"\\\\angle\");\ndefineSymbol(math, main, textord, \"\\u221e\", \"\\\\infty\");\ndefineSymbol(math, main, textord, \"\\u2032\", \"\\\\prime\");\ndefineSymbol(math, main, textord, \"\\u25b3\", \"\\\\triangle\");\ndefineSymbol(math, main, textord, \"\\u0393\", \"\\\\Gamma\");\ndefineSymbol(math, main, textord, \"\\u0394\", \"\\\\Delta\");\ndefineSymbol(math, main, textord, \"\\u0398\", \"\\\\Theta\");\ndefineSymbol(math, main, textord, \"\\u039b\", \"\\\\Lambda\");\ndefineSymbol(math, main, textord, \"\\u039e\", \"\\\\Xi\");\ndefineSymbol(math, main, textord, \"\\u03a0\", \"\\\\Pi\");\ndefineSymbol(math, main, textord, \"\\u03a3\", \"\\\\Sigma\");\ndefineSymbol(math, main, textord, \"\\u03a5\", \"\\\\Upsilon\");\ndefineSymbol(math, main, textord, \"\\u03a6\", \"\\\\Phi\");\ndefineSymbol(math, main, textord, \"\\u03a8\", \"\\\\Psi\");\ndefineSymbol(math, main, textord, \"\\u03a9\", \"\\\\Omega\");\ndefineSymbol(math, main, textord, \"\\u00ac\", \"\\\\neg\");\ndefineSymbol(math, main, textord, \"\\u00ac\", \"\\\\lnot\");\ndefineSymbol(math, main, textord, \"\\u22a4\", \"\\\\top\");\ndefineSymbol(math, main, textord, \"\\u22a5\", \"\\\\bot\");\ndefineSymbol(math, main, textord, \"\\u2205\", \"\\\\emptyset\");\ndefineSymbol(math, ams, textord, \"\\u2205\", \"\\\\varnothing\");\ndefineSymbol(math, main, mathord, \"\\u03b1\", \"\\\\alpha\");\ndefineSymbol(math, main, mathord, \"\\u03b2\", \"\\\\beta\");\ndefineSymbol(math, main, mathord, \"\\u03b3\", \"\\\\gamma\");\ndefineSymbol(math, main, mathord, \"\\u03b4\", \"\\\\delta\");\ndefineSymbol(math, main, mathord, \"\\u03f5\", \"\\\\epsilon\");\ndefineSymbol(math, main, mathord, \"\\u03b6\", \"\\\\zeta\");\ndefineSymbol(math, main, mathord, \"\\u03b7\", \"\\\\eta\");\ndefineSymbol(math, main, mathord, \"\\u03b8\", \"\\\\theta\");\ndefineSymbol(math, main, mathord, \"\\u03b9\", \"\\\\iota\");\ndefineSymbol(math, main, mathord, \"\\u03ba\", \"\\\\kappa\");\ndefineSymbol(math, main, mathord, \"\\u03bb\", \"\\\\lambda\");\ndefineSymbol(math, main, mathord, \"\\u03bc\", \"\\\\mu\");\ndefineSymbol(math, main, mathord, \"\\u03bd\", \"\\\\nu\");\ndefineSymbol(math, main, mathord, \"\\u03be\", \"\\\\xi\");\ndefineSymbol(math, main, mathord, \"o\", \"\\\\omicron\");\ndefineSymbol(math, main, mathord, \"\\u03c0\", \"\\\\pi\");\ndefineSymbol(math, main, mathord, \"\\u03c1\", \"\\\\rho\");\ndefineSymbol(math, main, mathord, \"\\u03c3\", \"\\\\sigma\");\ndefineSymbol(math, main, mathord, \"\\u03c4\", \"\\\\tau\");\ndefineSymbol(math, main, mathord, \"\\u03c5\", \"\\\\upsilon\");\ndefineSymbol(math, main, mathord, \"\\u03d5\", \"\\\\phi\");\ndefineSymbol(math, main, mathord, \"\\u03c7\", \"\\\\chi\");\ndefineSymbol(math, main, mathord, \"\\u03c8\", \"\\\\psi\");\ndefineSymbol(math, main, mathord, \"\\u03c9\", \"\\\\omega\");\ndefineSymbol(math, main, mathord, \"\\u03b5\", \"\\\\varepsilon\");\ndefineSymbol(math, main, mathord, \"\\u03d1\", \"\\\\vartheta\");\ndefineSymbol(math, main, mathord, \"\\u03d6\", \"\\\\varpi\");\ndefineSymbol(math, main, mathord, \"\\u03f1\", \"\\\\varrho\");\ndefineSymbol(math, main, mathord, \"\\u03c2\", \"\\\\varsigma\");\ndefineSymbol(math, main, mathord, \"\\u03c6\", \"\\\\varphi\");\ndefineSymbol(math, main, bin, \"\\u2217\", \"*\");\ndefineSymbol(math, main, bin, \"+\", \"+\");\ndefineSymbol(math, main, bin, \"\\u2212\", \"-\");\ndefineSymbol(math, main, bin, \"\\u22c5\", \"\\\\cdot\");\ndefineSymbol(math, main, bin, \"\\u2218\", \"\\\\circ\");\ndefineSymbol(math, main, bin, \"\\u00f7\", \"\\\\div\");\ndefineSymbol(math, main, bin, \"\\u00b1\", \"\\\\pm\");\ndefineSymbol(math, main, bin, \"\\u00d7\", \"\\\\times\");\ndefineSymbol(math, main, bin, \"\\u2229\", \"\\\\cap\");\ndefineSymbol(math, main, bin, \"\\u222a\", \"\\\\cup\");\ndefineSymbol(math, main, bin, \"\\u2216\", \"\\\\setminus\");\ndefineSymbol(math, main, bin, \"\\u2227\", \"\\\\land\");\ndefineSymbol(math, main, bin, \"\\u2228\", \"\\\\lor\");\ndefineSymbol(math, main, bin, \"\\u2227\", \"\\\\wedge\");\ndefineSymbol(math, main, bin, \"\\u2228\", \"\\\\vee\");\ndefineSymbol(math, main, textord, \"\\u221a\", \"\\\\surd\");\ndefineSymbol(math, main, open, \"(\", \"(\");\ndefineSymbol(math, main, open, \"[\", \"[\");\ndefineSymbol(math, main, open, \"\\u27e8\", \"\\\\langle\");\ndefineSymbol(math, main, open, \"\\u2223\", \"\\\\lvert\");\ndefineSymbol(math, main, open, \"\\u2225\", \"\\\\lVert\");\ndefineSymbol(math, main, close, \")\", \")\");\ndefineSymbol(math, main, close, \"]\", \"]\");\ndefineSymbol(math, main, close, \"?\", \"?\");\ndefineSymbol(math, main, close, \"!\", \"!\");\ndefineSymbol(math, main, close, \"\\u27e9\", \"\\\\rangle\");\ndefineSymbol(math, main, close, \"\\u2223\", \"\\\\rvert\");\ndefineSymbol(math, main, close, \"\\u2225\", \"\\\\rVert\");\ndefineSymbol(math, main, rel, \"=\", \"=\");\ndefineSymbol(math, main, rel, \"<\", \"<\");\ndefineSymbol(math, main, rel, \">\", \">\");\ndefineSymbol(math, main, rel, \":\", \":\");\ndefineSymbol(math, main, rel, \"\\u2248\", \"\\\\approx\");\ndefineSymbol(math, main, rel, \"\\u2245\", \"\\\\cong\");\ndefineSymbol(math, main, rel, \"\\u2265\", \"\\\\ge\");\ndefineSymbol(math, main, rel, \"\\u2265\", \"\\\\geq\");\ndefineSymbol(math, main, rel, \"\\u2190\", \"\\\\gets\");\ndefineSymbol(math, main, rel, \">\", \"\\\\gt\");\ndefineSymbol(math, main, rel, \"\\u2208\", \"\\\\in\");\ndefineSymbol(math, main, rel, \"\\u2209\", \"\\\\notin\");\ndefineSymbol(math, main, rel, \"\\u2282\", \"\\\\subset\");\ndefineSymbol(math, main, rel, \"\\u2283\", \"\\\\supset\");\ndefineSymbol(math, main, rel, \"\\u2286\", \"\\\\subseteq\");\ndefineSymbol(math, main, rel, \"\\u2287\", \"\\\\supseteq\");\ndefineSymbol(math, ams, rel, \"\\u2288\", \"\\\\nsubseteq\");\ndefineSymbol(math, ams, rel, \"\\u2289\", \"\\\\nsupseteq\");\ndefineSymbol(math, main, rel, \"\\u22a8\", \"\\\\models\");\ndefineSymbol(math, main, rel, \"\\u2190\", \"\\\\leftarrow\");\ndefineSymbol(math, main, rel, \"\\u2264\", \"\\\\le\");\ndefineSymbol(math, main, rel, \"\\u2264\", \"\\\\leq\");\ndefineSymbol(math, main, rel, \"<\", \"\\\\lt\");\ndefineSymbol(math, main, rel, \"\\u2260\", \"\\\\ne\");\ndefineSymbol(math, main, rel, \"\\u2260\", \"\\\\neq\");\ndefineSymbol(math, main, rel, \"\\u2192\", \"\\\\rightarrow\");\ndefineSymbol(math, main, rel, \"\\u2192\", \"\\\\to\");\ndefineSymbol(math, ams, rel, \"\\u2271\", \"\\\\ngeq\");\ndefineSymbol(math, ams, rel, \"\\u2270\", \"\\\\nleq\");\ndefineSymbol(math, main, spacing, null, \"\\\\!\");\ndefineSymbol(math, main, spacing, \"\\u00a0\", \"\\\\ \");\ndefineSymbol(math, main, spacing, \"\\u00a0\", \"~\");\ndefineSymbol(math, main, spacing, null, \"\\\\,\");\ndefineSymbol(math, main, spacing, null, \"\\\\:\");\ndefineSymbol(math, main, spacing, null, \"\\\\;\");\ndefineSymbol(math, main, spacing, null, \"\\\\enspace\");\ndefineSymbol(math, main, spacing, null, \"\\\\qquad\");\ndefineSymbol(math, main, spacing, null, \"\\\\quad\");\ndefineSymbol(math, main, spacing, \"\\u00a0\", \"\\\\space\");\ndefineSymbol(math, main, punct, \",\", \",\");\ndefineSymbol(math, main, punct, \";\", \";\");\ndefineSymbol(math, main, punct, \":\", \"\\\\colon\");\ndefineSymbol(math, ams, bin, \"\\u22bc\", \"\\\\barwedge\");\ndefineSymbol(math, ams, bin, \"\\u22bb\", \"\\\\veebar\");\ndefineSymbol(math, main, bin, \"\\u2299\", \"\\\\odot\");\ndefineSymbol(math, main, bin, \"\\u2295\", \"\\\\oplus\");\ndefineSymbol(math, main, bin, \"\\u2297\", \"\\\\otimes\");\ndefineSymbol(math, main, textord, \"\\u2202\", \"\\\\partial\");\ndefineSymbol(math, main, bin, \"\\u2298\", \"\\\\oslash\");\ndefineSymbol(math, ams, bin, \"\\u229a\", \"\\\\circledcirc\");\ndefineSymbol(math, ams, bin, \"\\u22a1\", \"\\\\boxdot\");\ndefineSymbol(math, main, bin, \"\\u25b3\", \"\\\\bigtriangleup\");\ndefineSymbol(math, main, bin, \"\\u25bd\", \"\\\\bigtriangledown\");\ndefineSymbol(math, main, bin, \"\\u2020\", \"\\\\dagger\");\ndefineSymbol(math, main, bin, \"\\u22c4\", \"\\\\diamond\");\ndefineSymbol(math, main, bin, \"\\u22c6\", \"\\\\star\");\ndefineSymbol(math, main, bin, \"\\u25c3\", \"\\\\triangleleft\");\ndefineSymbol(math, main, bin, \"\\u25b9\", \"\\\\triangleright\");\ndefineSymbol(math, main, open, \"{\", \"\\\\{\");\ndefineSymbol(math, main, close, \"}\", \"\\\\}\");\ndefineSymbol(math, main, open, \"{\", \"\\\\lbrace\");\ndefineSymbol(math, main, close, \"}\", \"\\\\rbrace\");\ndefineSymbol(math, main, open, \"[\", \"\\\\lbrack\");\ndefineSymbol(math, main, close, \"]\", \"\\\\rbrack\");\ndefineSymbol(math, main, open, \"\\u230a\", \"\\\\lfloor\");\ndefineSymbol(math, main, close, \"\\u230b\", \"\\\\rfloor\");\ndefineSymbol(math, main, open, \"\\u2308\", \"\\\\lceil\");\ndefineSymbol(math, main, close, \"\\u2309\", \"\\\\rceil\");\ndefineSymbol(math, main, textord, \"\\\\\", \"\\\\backslash\");\ndefineSymbol(math, main, textord, \"\\u2223\", \"|\");\ndefineSymbol(math, main, textord, \"\\u2223\", \"\\\\vert\");\ndefineSymbol(math, main, textord, \"\\u2225\", \"\\\\|\");\ndefineSymbol(math, main, textord, \"\\u2225\", \"\\\\Vert\");\ndefineSymbol(math, main, rel, \"\\u2191\", \"\\\\uparrow\");\ndefineSymbol(math, main, rel, \"\\u21d1\", \"\\\\Uparrow\");\ndefineSymbol(math, main, rel, \"\\u2193\", \"\\\\downarrow\");\ndefineSymbol(math, main, rel, \"\\u21d3\", \"\\\\Downarrow\");\ndefineSymbol(math, main, rel, \"\\u2195\", \"\\\\updownarrow\");\ndefineSymbol(math, main, rel, \"\\u21d5\", \"\\\\Updownarrow\");\ndefineSymbol(math, math, op, \"\\u2210\", \"\\\\coprod\");\ndefineSymbol(math, math, op, \"\\u22c1\", \"\\\\bigvee\");\ndefineSymbol(math, math, op, \"\\u22c0\", \"\\\\bigwedge\");\ndefineSymbol(math, math, op, \"\\u2a04\", \"\\\\biguplus\");\ndefineSymbol(math, math, op, \"\\u22c2\", \"\\\\bigcap\");\ndefineSymbol(math, math, op, \"\\u22c3\", \"\\\\bigcup\");\ndefineSymbol(math, math, op, \"\\u222b\", \"\\\\int\");\ndefineSymbol(math, math, op, \"\\u222b\", \"\\\\intop\");\ndefineSymbol(math, math, op, \"\\u222c\", \"\\\\iint\");\ndefineSymbol(math, math, op, \"\\u222d\", \"\\\\iiint\");\ndefineSymbol(math, math, op, \"\\u220f\", \"\\\\prod\");\ndefineSymbol(math, math, op, \"\\u2211\", \"\\\\sum\");\ndefineSymbol(math, math, op, \"\\u2a02\", \"\\\\bigotimes\");\ndefineSymbol(math, math, op, \"\\u2a01\", \"\\\\bigoplus\");\ndefineSymbol(math, math, op, \"\\u2a00\", \"\\\\bigodot\");\ndefineSymbol(math, math, op, \"\\u222e\", \"\\\\oint\");\ndefineSymbol(math, math, op, \"\\u2a06\", \"\\\\bigsqcup\");\ndefineSymbol(math, math, op, \"\\u222b\", \"\\\\smallint\");\ndefineSymbol(math, main, inner, \"\\u2026\", \"\\\\ldots\");\ndefineSymbol(math, main, inner, \"\\u22ef\", \"\\\\cdots\");\ndefineSymbol(math, main, inner, \"\\u22f1\", \"\\\\ddots\");\ndefineSymbol(math, main, textord, \"\\u22ee\", \"\\\\vdots\");\ndefineSymbol(math, main, accent, \"\\u00b4\", \"\\\\acute\");\ndefineSymbol(math, main, accent, \"\\u0060\", \"\\\\grave\");\ndefineSymbol(math, main, accent, \"\\u00a8\", \"\\\\ddot\");\ndefineSymbol(math, main, accent, \"\\u007e\", \"\\\\tilde\");\ndefineSymbol(math, main, accent, \"\\u00af\", \"\\\\bar\");\ndefineSymbol(math, main, accent, \"\\u02d8\", \"\\\\breve\");\ndefineSymbol(math, main, accent, \"\\u02c7\", \"\\\\check\");\ndefineSymbol(math, main, accent, \"\\u005e\", \"\\\\hat\");\ndefineSymbol(math, main, accent, \"\\u20d7\", \"\\\\vec\");\ndefineSymbol(math, main, accent, \"\\u02d9\", \"\\\\dot\");\ndefineSymbol(math, main, mathord, \"\\u0131\", \"\\\\imath\");\ndefineSymbol(math, main, mathord, \"\\u0237\", \"\\\\jmath\");\n\ndefineSymbol(text, main, spacing, \"\\u00a0\", \"\\\\ \");\ndefineSymbol(text, main, spacing, \"\\u00a0\", \" \");\ndefineSymbol(text, main, spacing, \"\\u00a0\", \"~\");\n\n// There are lots of symbols which are the same, so we add them in afterwards.\nvar i;\nvar ch;\n\n// All of these are textords in math mode\nvar mathTextSymbols = \"0123456789/@.\\\"\";\nfor (i = 0; i < mathTextSymbols.length; i++) {\n    ch = mathTextSymbols.charAt(i);\n    defineSymbol(math, main, textord, ch, ch);\n}\n\n// All of these are textords in text mode\nvar textSymbols = \"0123456789`!@*()-=+[]'\\\";:?/.,\";\nfor (i = 0; i < textSymbols.length; i++) {\n    ch = textSymbols.charAt(i);\n    defineSymbol(text, main, textord, ch, ch);\n}\n\n// All of these are textords in text mode, and mathords in math mode\nvar letters = \"abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ\";\nfor (i = 0; i < letters.length; i++) {\n    ch = letters.charAt(i);\n    defineSymbol(math, main, mathord, ch, ch);\n    defineSymbol(text, main, textord, ch, ch);\n}\n","/* eslint no-console:0 */\n/**\n * This module contains general functions that can be used for building\n * different kinds of domTree nodes in a consistent manner.\n */\n\nvar domTree = require(\"./domTree\");\nvar fontMetrics = require(\"./fontMetrics\");\nvar symbols = require(\"./symbols\");\nvar utils = require(\"./utils\");\n\nvar greekCapitals = [\n    \"\\\\Gamma\",\n    \"\\\\Delta\",\n    \"\\\\Theta\",\n    \"\\\\Lambda\",\n    \"\\\\Xi\",\n    \"\\\\Pi\",\n    \"\\\\Sigma\",\n    \"\\\\Upsilon\",\n    \"\\\\Phi\",\n    \"\\\\Psi\",\n    \"\\\\Omega\",\n];\n\nvar dotlessLetters = [\n    \"\\u0131\",   // dotless i, \\imath\n    \"\\u0237\",   // dotless j, \\jmath\n];\n\n/**\n * Makes a symbolNode after translation via the list of symbols in symbols.js.\n * Correctly pulls out metrics for the character, and optionally takes a list of\n * classes to be attached to the node.\n */\nvar makeSymbol = function(value, style, mode, color, classes) {\n    // Replace the value with its replaced value from symbol.js\n    if (symbols[mode][value] && symbols[mode][value].replace) {\n        value = symbols[mode][value].replace;\n    }\n\n    var metrics = fontMetrics.getCharacterMetrics(value, style);\n\n    var symbolNode;\n    if (metrics) {\n        symbolNode = new domTree.symbolNode(\n            value, metrics.height, metrics.depth, metrics.italic, metrics.skew,\n            classes);\n    } else {\n        // TODO(emily): Figure out a good way to only print this in development\n        typeof console !== \"undefined\" && console.warn(\n            \"No character metrics for '\" + value + \"' in style '\" +\n                style + \"'\");\n        symbolNode = new domTree.symbolNode(value, 0, 0, 0, 0, classes);\n    }\n\n    if (color) {\n        symbolNode.style.color = color;\n    }\n\n    return symbolNode;\n};\n\n/**\n * Makes a symbol in Main-Regular or AMS-Regular.\n * Used for rel, bin, open, close, inner, and punct.\n */\nvar mathsym = function(value, mode, color, classes) {\n    // Decide what font to render the symbol in by its entry in the symbols\n    // table.\n    // Have a special case for when the value = \\ because the \\ is used as a\n    // textord in unsupported command errors but cannot be parsed as a regular\n    // text ordinal and is therefore not present as a symbol in the symbols\n    // table for text\n    if (value === \"\\\\\" || symbols[mode][value].font === \"main\") {\n        return makeSymbol(value, \"Main-Regular\", mode, color, classes);\n    } else {\n        return makeSymbol(\n            value, \"AMS-Regular\", mode, color, classes.concat([\"amsrm\"]));\n    }\n};\n\n/**\n * Makes a symbol in the default font for mathords and textords.\n */\nvar mathDefault = function(value, mode, color, classes, type) {\n    if (type === \"mathord\") {\n        return mathit(value, mode, color, classes);\n    } else if (type === \"textord\") {\n        return makeSymbol(\n            value, \"Main-Regular\", mode, color, classes.concat([\"mathrm\"]));\n    } else {\n        throw new Error(\"unexpected type: \" + type + \" in mathDefault\");\n    }\n};\n\n/**\n * Makes a symbol in the italic math font.\n */\nvar mathit = function(value, mode, color, classes) {\n    if (/[0-9]/.test(value.charAt(0)) ||\n            // glyphs for \\imath and \\jmath do not exist in Math-Italic so we\n            // need to use Main-Italic instead\n            utils.contains(dotlessLetters, value) ||\n            utils.contains(greekCapitals, value)) {\n        return makeSymbol(\n            value, \"Main-Italic\", mode, color, classes.concat([\"mainit\"]));\n    } else {\n        return makeSymbol(\n            value, \"Math-Italic\", mode, color, classes.concat([\"mathit\"]));\n    }\n};\n\n/**\n * Makes either a mathord or textord in the correct font and color.\n */\nvar makeOrd = function(group, options, type) {\n    var mode = group.mode;\n    var value = group.value;\n    if (symbols[mode][value] && symbols[mode][value].replace) {\n        value = symbols[mode][value].replace;\n    }\n\n    var classes = [\"mord\"];\n    var color = options.getColor();\n\n    var font = options.font;\n    if (font) {\n        if (font === \"mathit\" || utils.contains(dotlessLetters, value)) {\n            return mathit(value, mode, color, classes);\n        } else {\n            var fontName = fontMap[font].fontName;\n            if (fontMetrics.getCharacterMetrics(value, fontName)) {\n                return makeSymbol(\n                    value, fontName, mode, color, classes.concat([font]));\n            } else {\n                return mathDefault(value, mode, color, classes, type);\n            }\n        }\n    } else {\n        return mathDefault(value, mode, color, classes, type);\n    }\n};\n\n/**\n * Calculate the height, depth, and maxFontSize of an element based on its\n * children.\n */\nvar sizeElementFromChildren = function(elem) {\n    var height = 0;\n    var depth = 0;\n    var maxFontSize = 0;\n\n    if (elem.children) {\n        for (var i = 0; i < elem.children.length; i++) {\n            if (elem.children[i].height > height) {\n                height = elem.children[i].height;\n            }\n            if (elem.children[i].depth > depth) {\n                depth = elem.children[i].depth;\n            }\n            if (elem.children[i].maxFontSize > maxFontSize) {\n                maxFontSize = elem.children[i].maxFontSize;\n            }\n        }\n    }\n\n    elem.height = height;\n    elem.depth = depth;\n    elem.maxFontSize = maxFontSize;\n};\n\n/**\n * Makes a span with the given list of classes, list of children, and color.\n */\nvar makeSpan = function(classes, children, color) {\n    var span = new domTree.span(classes, children);\n\n    sizeElementFromChildren(span);\n\n    if (color) {\n        span.style.color = color;\n    }\n\n    return span;\n};\n\n/**\n * Makes a document fragment with the given list of children.\n */\nvar makeFragment = function(children) {\n    var fragment = new domTree.documentFragment(children);\n\n    sizeElementFromChildren(fragment);\n\n    return fragment;\n};\n\n/**\n * Makes an element placed in each of the vlist elements to ensure that each\n * element has the same max font size. To do this, we create a zero-width space\n * with the correct font size.\n */\nvar makeFontSizer = function(options, fontSize) {\n    var fontSizeInner = makeSpan([], [new domTree.symbolNode(\"\\u200b\")]);\n    fontSizeInner.style.fontSize =\n        (fontSize / options.style.sizeMultiplier) + \"em\";\n\n    var fontSizer = makeSpan(\n        [\"fontsize-ensurer\", \"reset-\" + options.size, \"size5\"],\n        [fontSizeInner]);\n\n    return fontSizer;\n};\n\n/**\n * Makes a vertical list by stacking elements and kerns on top of each other.\n * Allows for many different ways of specifying the positioning method.\n *\n * Arguments:\n *  - children: A list of child or kern nodes to be stacked on top of each other\n *              (i.e. the first element will be at the bottom, and the last at\n *              the top). Element nodes are specified as\n *                {type: \"elem\", elem: node}\n *              while kern nodes are specified as\n *                {type: \"kern\", size: size}\n *  - positionType: The method by which the vlist should be positioned. Valid\n *                  values are:\n *                   - \"individualShift\": The children list only contains elem\n *                                        nodes, and each node contains an extra\n *                                        \"shift\" value of how much it should be\n *                                        shifted (note that shifting is always\n *                                        moving downwards). positionData is\n *                                        ignored.\n *                   - \"top\": The positionData specifies the topmost point of\n *                            the vlist (note this is expected to be a height,\n *                            so positive values move up)\n *                   - \"bottom\": The positionData specifies the bottommost point\n *                               of the vlist (note this is expected to be a\n *                               depth, so positive values move down\n *                   - \"shift\": The vlist will be positioned such that its\n *                              baseline is positionData away from the baseline\n *                              of the first child. Positive values move\n *                              downwards.\n *                   - \"firstBaseline\": The vlist will be positioned such that\n *                                      its baseline is aligned with the\n *                                      baseline of the first child.\n *                                      positionData is ignored. (this is\n *                                      equivalent to \"shift\" with\n *                                      positionData=0)\n *  - positionData: Data used in different ways depending on positionType\n *  - options: An Options object\n *\n */\nvar makeVList = function(children, positionType, positionData, options) {\n    var depth;\n    var currPos;\n    var i;\n    if (positionType === \"individualShift\") {\n        var oldChildren = children;\n        children = [oldChildren[0]];\n\n        // Add in kerns to the list of children to get each element to be\n        // shifted to the correct specified shift\n        depth = -oldChildren[0].shift - oldChildren[0].elem.depth;\n        currPos = depth;\n        for (i = 1; i < oldChildren.length; i++) {\n            var diff = -oldChildren[i].shift - currPos -\n                oldChildren[i].elem.depth;\n            var size = diff -\n                (oldChildren[i - 1].elem.height +\n                 oldChildren[i - 1].elem.depth);\n\n            currPos = currPos + diff;\n\n            children.push({type: \"kern\", size: size});\n            children.push(oldChildren[i]);\n        }\n    } else if (positionType === \"top\") {\n        // We always start at the bottom, so calculate the bottom by adding up\n        // all the sizes\n        var bottom = positionData;\n        for (i = 0; i < children.length; i++) {\n            if (children[i].type === \"kern\") {\n                bottom -= children[i].size;\n            } else {\n                bottom -= children[i].elem.height + children[i].elem.depth;\n            }\n        }\n        depth = bottom;\n    } else if (positionType === \"bottom\") {\n        depth = -positionData;\n    } else if (positionType === \"shift\") {\n        depth = -children[0].elem.depth - positionData;\n    } else if (positionType === \"firstBaseline\") {\n        depth = -children[0].elem.depth;\n    } else {\n        depth = 0;\n    }\n\n    // Make the fontSizer\n    var maxFontSize = 0;\n    for (i = 0; i < children.length; i++) {\n        if (children[i].type === \"elem\") {\n            maxFontSize = Math.max(maxFontSize, children[i].elem.maxFontSize);\n        }\n    }\n    var fontSizer = makeFontSizer(options, maxFontSize);\n\n    // Create a new list of actual children at the correct offsets\n    var realChildren = [];\n    currPos = depth;\n    for (i = 0; i < children.length; i++) {\n        if (children[i].type === \"kern\") {\n            currPos += children[i].size;\n        } else {\n            var child = children[i].elem;\n\n            var shift = -child.depth - currPos;\n            currPos += child.height + child.depth;\n\n            var childWrap = makeSpan([], [fontSizer, child]);\n            childWrap.height -= shift;\n            childWrap.depth += shift;\n            childWrap.style.top = shift + \"em\";\n\n            realChildren.push(childWrap);\n        }\n    }\n\n    // Add in an element at the end with no offset to fix the calculation of\n    // baselines in some browsers (namely IE, sometimes safari)\n    var baselineFix = makeSpan(\n        [\"baseline-fix\"], [fontSizer, new domTree.symbolNode(\"\\u200b\")]);\n    realChildren.push(baselineFix);\n\n    var vlist = makeSpan([\"vlist\"], realChildren);\n    // Fix the final height and depth, in case there were kerns at the ends\n    // since the makeSpan calculation won't take that in to account.\n    vlist.height = Math.max(currPos, vlist.height);\n    vlist.depth = Math.max(-depth, vlist.depth);\n    return vlist;\n};\n\n// A table of size -> font size for the different sizing functions\nvar sizingMultiplier = {\n    size1: 0.5,\n    size2: 0.7,\n    size3: 0.8,\n    size4: 0.9,\n    size5: 1.0,\n    size6: 1.2,\n    size7: 1.44,\n    size8: 1.73,\n    size9: 2.07,\n    size10: 2.49,\n};\n\n// A map of spacing functions to their attributes, like size and corresponding\n// CSS class\nvar spacingFunctions = {\n    \"\\\\qquad\": {\n        size: \"2em\",\n        className: \"qquad\",\n    },\n    \"\\\\quad\": {\n        size: \"1em\",\n        className: \"quad\",\n    },\n    \"\\\\enspace\": {\n        size: \"0.5em\",\n        className: \"enspace\",\n    },\n    \"\\\\;\": {\n        size: \"0.277778em\",\n        className: \"thickspace\",\n    },\n    \"\\\\:\": {\n        size: \"0.22222em\",\n        className: \"mediumspace\",\n    },\n    \"\\\\,\": {\n        size: \"0.16667em\",\n        className: \"thinspace\",\n    },\n    \"\\\\!\": {\n        size: \"-0.16667em\",\n        className: \"negativethinspace\",\n    },\n};\n\n/**\n * Maps TeX font commands to objects containing:\n * - variant: string used for \"mathvariant\" attribute in buildMathML.js\n * - fontName: the \"style\" parameter to fontMetrics.getCharacterMetrics\n */\n// A map between tex font commands an MathML mathvariant attribute values\nvar fontMap = {\n    // styles\n    \"mathbf\": {\n        variant: \"bold\",\n        fontName: \"Main-Bold\",\n    },\n    \"mathrm\": {\n        variant: \"normal\",\n        fontName: \"Main-Regular\",\n    },\n\n    // \"mathit\" is missing because it requires the use of two fonts: Main-Italic\n    // and Math-Italic.  This is handled by a special case in makeOrd which ends\n    // up calling mathit.\n\n    // families\n    \"mathbb\": {\n        variant: \"double-struck\",\n        fontName: \"AMS-Regular\",\n    },\n    \"mathcal\": {\n        variant: \"script\",\n        fontName: \"Caligraphic-Regular\",\n    },\n    \"mathfrak\": {\n        variant: \"fraktur\",\n        fontName: \"Fraktur-Regular\",\n    },\n    \"mathscr\": {\n        variant: \"script\",\n        fontName: \"Script-Regular\",\n    },\n    \"mathsf\": {\n        variant: \"sans-serif\",\n        fontName: \"SansSerif-Regular\",\n    },\n    \"mathtt\": {\n        variant: \"monospace\",\n        fontName: \"Typewriter-Regular\",\n    },\n};\n\nmodule.exports = {\n    fontMap: fontMap,\n    makeSymbol: makeSymbol,\n    mathsym: mathsym,\n    makeSpan: makeSpan,\n    makeFragment: makeFragment,\n    makeVList: makeVList,\n    makeOrd: makeOrd,\n    sizingMultiplier: sizingMultiplier,\n    spacingFunctions: spacingFunctions,\n};\n","/**\n * This file deals with creating delimiters of various sizes. The TeXbook\n * discusses these routines on page 441-442, in the \"Another subroutine sets box\n * x to a specified variable delimiter\" paragraph.\n *\n * There are three main routines here. `makeSmallDelim` makes a delimiter in the\n * normal font, but in either text, script, or scriptscript style.\n * `makeLargeDelim` makes a delimiter in textstyle, but in one of the Size1,\n * Size2, Size3, or Size4 fonts. `makeStackedDelim` makes a delimiter out of\n * smaller pieces that are stacked on top of one another.\n *\n * The functions take a parameter `center`, which determines if the delimiter\n * should be centered around the axis.\n *\n * Then, there are three exposed functions. `sizedDelim` makes a delimiter in\n * one of the given sizes. This is used for things like `\\bigl`.\n * `customSizedDelim` makes a delimiter with a given total height+depth. It is\n * called in places like `\\sqrt`. `leftRightDelim` makes an appropriate\n * delimiter which surrounds an expression of a given height an depth. It is\n * used in `\\left` and `\\right`.\n */\n\nvar ParseError = require(\"./ParseError\");\nvar Style = require(\"./Style\");\n\nvar buildCommon = require(\"./buildCommon\");\nvar fontMetrics = require(\"./fontMetrics\");\nvar symbols = require(\"./symbols\");\nvar utils = require(\"./utils\");\n\nvar makeSpan = buildCommon.makeSpan;\n\n/**\n * Get the metrics for a given symbol and font, after transformation (i.e.\n * after following replacement from symbols.js)\n */\nvar getMetrics = function(symbol, font) {\n    if (symbols.math[symbol] && symbols.math[symbol].replace) {\n        return fontMetrics.getCharacterMetrics(\n            symbols.math[symbol].replace, font);\n    } else {\n        return fontMetrics.getCharacterMetrics(\n            symbol, font);\n    }\n};\n\n/**\n * Builds a symbol in the given font size (note size is an integer)\n */\nvar mathrmSize = function(value, size, mode) {\n    return buildCommon.makeSymbol(value, \"Size\" + size + \"-Regular\", mode);\n};\n\n/**\n * Puts a delimiter span in a given style, and adds appropriate height, depth,\n * and maxFontSizes.\n */\nvar styleWrap = function(delim, toStyle, options) {\n    var span = makeSpan(\n        [\"style-wrap\", options.style.reset(), toStyle.cls()], [delim]);\n\n    var multiplier = toStyle.sizeMultiplier / options.style.sizeMultiplier;\n\n    span.height *= multiplier;\n    span.depth *= multiplier;\n    span.maxFontSize = toStyle.sizeMultiplier;\n\n    return span;\n};\n\n/**\n * Makes a small delimiter. This is a delimiter that comes in the Main-Regular\n * font, but is restyled to either be in textstyle, scriptstyle, or\n * scriptscriptstyle.\n */\nvar makeSmallDelim = function(delim, style, center, options, mode) {\n    var text = buildCommon.makeSymbol(delim, \"Main-Regular\", mode);\n\n    var span = styleWrap(text, style, options);\n\n    if (center) {\n        var shift =\n            (1 - options.style.sizeMultiplier / style.sizeMultiplier) *\n            fontMetrics.metrics.axisHeight;\n\n        span.style.top = shift + \"em\";\n        span.height -= shift;\n        span.depth += shift;\n    }\n\n    return span;\n};\n\n/**\n * Makes a large delimiter. This is a delimiter that comes in the Size1, Size2,\n * Size3, or Size4 fonts. It is always rendered in textstyle.\n */\nvar makeLargeDelim = function(delim, size, center, options, mode) {\n    var inner = mathrmSize(delim, size, mode);\n\n    var span = styleWrap(\n        makeSpan([\"delimsizing\", \"size\" + size],\n                 [inner], options.getColor()),\n        Style.TEXT, options);\n\n    if (center) {\n        var shift = (1 - options.style.sizeMultiplier) *\n            fontMetrics.metrics.axisHeight;\n\n        span.style.top = shift + \"em\";\n        span.height -= shift;\n        span.depth += shift;\n    }\n\n    return span;\n};\n\n/**\n * Make an inner span with the given offset and in the given font. This is used\n * in `makeStackedDelim` to make the stacking pieces for the delimiter.\n */\nvar makeInner = function(symbol, font, mode) {\n    var sizeClass;\n    // Apply the correct CSS class to choose the right font.\n    if (font === \"Size1-Regular\") {\n        sizeClass = \"delim-size1\";\n    } else if (font === \"Size4-Regular\") {\n        sizeClass = \"delim-size4\";\n    }\n\n    var inner = makeSpan(\n        [\"delimsizinginner\", sizeClass],\n        [makeSpan([], [buildCommon.makeSymbol(symbol, font, mode)])]);\n\n    // Since this will be passed into `makeVList` in the end, wrap the element\n    // in the appropriate tag that VList uses.\n    return {type: \"elem\", elem: inner};\n};\n\n/**\n * Make a stacked delimiter out of a given delimiter, with the total height at\n * least `heightTotal`. This routine is mentioned on page 442 of the TeXbook.\n */\nvar makeStackedDelim = function(delim, heightTotal, center, options, mode) {\n    // There are four parts, the top, an optional middle, a repeated part, and a\n    // bottom.\n    var top;\n    var middle;\n    var repeat;\n    var bottom;\n    top = repeat = bottom = delim;\n    middle = null;\n    // Also keep track of what font the delimiters are in\n    var font = \"Size1-Regular\";\n\n    // We set the parts and font based on the symbol. Note that we use\n    // '\\u23d0' instead of '|' and '\\u2016' instead of '\\\\|' for the\n    // repeats of the arrows\n    if (delim === \"\\\\uparrow\") {\n        repeat = bottom = \"\\u23d0\";\n    } else if (delim === \"\\\\Uparrow\") {\n        repeat = bottom = \"\\u2016\";\n    } else if (delim === \"\\\\downarrow\") {\n        top = repeat = \"\\u23d0\";\n    } else if (delim === \"\\\\Downarrow\") {\n        top = repeat = \"\\u2016\";\n    } else if (delim === \"\\\\updownarrow\") {\n        top = \"\\\\uparrow\";\n        repeat = \"\\u23d0\";\n        bottom = \"\\\\downarrow\";\n    } else if (delim === \"\\\\Updownarrow\") {\n        top = \"\\\\Uparrow\";\n        repeat = \"\\u2016\";\n        bottom = \"\\\\Downarrow\";\n    } else if (delim === \"[\" || delim === \"\\\\lbrack\") {\n        top = \"\\u23a1\";\n        repeat = \"\\u23a2\";\n        bottom = \"\\u23a3\";\n        font = \"Size4-Regular\";\n    } else if (delim === \"]\" || delim === \"\\\\rbrack\") {\n        top = \"\\u23a4\";\n        repeat = \"\\u23a5\";\n        bottom = \"\\u23a6\";\n        font = \"Size4-Regular\";\n    } else if (delim === \"\\\\lfloor\") {\n        repeat = top = \"\\u23a2\";\n        bottom = \"\\u23a3\";\n        font = \"Size4-Regular\";\n    } else if (delim === \"\\\\lceil\") {\n        top = \"\\u23a1\";\n        repeat = bottom = \"\\u23a2\";\n        font = \"Size4-Regular\";\n    } else if (delim === \"\\\\rfloor\") {\n        repeat = top = \"\\u23a5\";\n        bottom = \"\\u23a6\";\n        font = \"Size4-Regular\";\n    } else if (delim === \"\\\\rceil\") {\n        top = \"\\u23a4\";\n        repeat = bottom = \"\\u23a5\";\n        font = \"Size4-Regular\";\n    } else if (delim === \"(\") {\n        top = \"\\u239b\";\n        repeat = \"\\u239c\";\n        bottom = \"\\u239d\";\n        font = \"Size4-Regular\";\n    } else if (delim === \")\") {\n        top = \"\\u239e\";\n        repeat = \"\\u239f\";\n        bottom = \"\\u23a0\";\n        font = \"Size4-Regular\";\n    } else if (delim === \"\\\\{\" || delim === \"\\\\lbrace\") {\n        top = \"\\u23a7\";\n        middle = \"\\u23a8\";\n        bottom = \"\\u23a9\";\n        repeat = \"\\u23aa\";\n        font = \"Size4-Regular\";\n    } else if (delim === \"\\\\}\" || delim === \"\\\\rbrace\") {\n        top = \"\\u23ab\";\n        middle = \"\\u23ac\";\n        bottom = \"\\u23ad\";\n        repeat = \"\\u23aa\";\n        font = \"Size4-Regular\";\n    } else if (delim === \"\\\\lgroup\") {\n        top = \"\\u23a7\";\n        bottom = \"\\u23a9\";\n        repeat = \"\\u23aa\";\n        font = \"Size4-Regular\";\n    } else if (delim === \"\\\\rgroup\") {\n        top = \"\\u23ab\";\n        bottom = \"\\u23ad\";\n        repeat = \"\\u23aa\";\n        font = \"Size4-Regular\";\n    } else if (delim === \"\\\\lmoustache\") {\n        top = \"\\u23a7\";\n        bottom = \"\\u23ad\";\n        repeat = \"\\u23aa\";\n        font = \"Size4-Regular\";\n    } else if (delim === \"\\\\rmoustache\") {\n        top = \"\\u23ab\";\n        bottom = \"\\u23a9\";\n        repeat = \"\\u23aa\";\n        font = \"Size4-Regular\";\n    } else if (delim === \"\\\\surd\") {\n        top = \"\\ue001\";\n        bottom = \"\\u23b7\";\n        repeat = \"\\ue000\";\n        font = \"Size4-Regular\";\n    }\n\n    // Get the metrics of the four sections\n    var topMetrics = getMetrics(top, font);\n    var topHeightTotal = topMetrics.height + topMetrics.depth;\n    var repeatMetrics = getMetrics(repeat, font);\n    var repeatHeightTotal = repeatMetrics.height + repeatMetrics.depth;\n    var bottomMetrics = getMetrics(bottom, font);\n    var bottomHeightTotal = bottomMetrics.height + bottomMetrics.depth;\n    var middleHeightTotal = 0;\n    var middleFactor = 1;\n    if (middle !== null) {\n        var middleMetrics = getMetrics(middle, font);\n        middleHeightTotal = middleMetrics.height + middleMetrics.depth;\n        middleFactor = 2; // repeat symmetrically above and below middle\n    }\n\n    // Calcuate the minimal height that the delimiter can have.\n    // It is at least the size of the top, bottom, and optional middle combined.\n    var minHeight = topHeightTotal + bottomHeightTotal + middleHeightTotal;\n\n    // Compute the number of copies of the repeat symbol we will need\n    var repeatCount = Math.ceil(\n        (heightTotal - minHeight) / (middleFactor * repeatHeightTotal));\n\n    // Compute the total height of the delimiter including all the symbols\n    var realHeightTotal =\n        minHeight + repeatCount * middleFactor * repeatHeightTotal;\n\n    // The center of the delimiter is placed at the center of the axis. Note\n    // that in this context, \"center\" means that the delimiter should be\n    // centered around the axis in the current style, while normally it is\n    // centered around the axis in textstyle.\n    var axisHeight = fontMetrics.metrics.axisHeight;\n    if (center) {\n        axisHeight *= options.style.sizeMultiplier;\n    }\n    // Calculate the depth\n    var depth = realHeightTotal / 2 - axisHeight;\n\n    // Now, we start building the pieces that will go into the vlist\n\n    // Keep a list of the inner pieces\n    var inners = [];\n\n    // Add the bottom symbol\n    inners.push(makeInner(bottom, font, mode));\n\n    var i;\n    if (middle === null) {\n        // Add that many symbols\n        for (i = 0; i < repeatCount; i++) {\n            inners.push(makeInner(repeat, font, mode));\n        }\n    } else {\n        // When there is a middle bit, we need the middle part and two repeated\n        // sections\n        for (i = 0; i < repeatCount; i++) {\n            inners.push(makeInner(repeat, font, mode));\n        }\n        inners.push(makeInner(middle, font, mode));\n        for (i = 0; i < repeatCount; i++) {\n            inners.push(makeInner(repeat, font, mode));\n        }\n    }\n\n    // Add the top symbol\n    inners.push(makeInner(top, font, mode));\n\n    // Finally, build the vlist\n    var inner = buildCommon.makeVList(inners, \"bottom\", depth, options);\n\n    return styleWrap(\n        makeSpan([\"delimsizing\", \"mult\"], [inner], options.getColor()),\n        Style.TEXT, options);\n};\n\n// There are three kinds of delimiters, delimiters that stack when they become\n// too large\nvar stackLargeDelimiters = [\n    \"(\", \")\", \"[\", \"\\\\lbrack\", \"]\", \"\\\\rbrack\",\n    \"\\\\{\", \"\\\\lbrace\", \"\\\\}\", \"\\\\rbrace\",\n    \"\\\\lfloor\", \"\\\\rfloor\", \"\\\\lceil\", \"\\\\rceil\",\n    \"\\\\surd\",\n];\n\n// delimiters that always stack\nvar stackAlwaysDelimiters = [\n    \"\\\\uparrow\", \"\\\\downarrow\", \"\\\\updownarrow\",\n    \"\\\\Uparrow\", \"\\\\Downarrow\", \"\\\\Updownarrow\",\n    \"|\", \"\\\\|\", \"\\\\vert\", \"\\\\Vert\",\n    \"\\\\lvert\", \"\\\\rvert\", \"\\\\lVert\", \"\\\\rVert\",\n    \"\\\\lgroup\", \"\\\\rgroup\", \"\\\\lmoustache\", \"\\\\rmoustache\",\n];\n\n// and delimiters that never stack\nvar stackNeverDelimiters = [\n    \"<\", \">\", \"\\\\langle\", \"\\\\rangle\", \"/\", \"\\\\backslash\", \"\\\\lt\", \"\\\\gt\",\n];\n\n// Metrics of the different sizes. Found by looking at TeX's output of\n// $\\bigl| // \\Bigl| \\biggl| \\Biggl| \\showlists$\n// Used to create stacked delimiters of appropriate sizes in makeSizedDelim.\nvar sizeToMaxHeight = [0, 1.2, 1.8, 2.4, 3.0];\n\n/**\n * Used to create a delimiter of a specific size, where `size` is 1, 2, 3, or 4.\n */\nvar makeSizedDelim = function(delim, size, options, mode) {\n    // < and > turn into \\langle and \\rangle in delimiters\n    if (delim === \"<\" || delim === \"\\\\lt\") {\n        delim = \"\\\\langle\";\n    } else if (delim === \">\" || delim === \"\\\\gt\") {\n        delim = \"\\\\rangle\";\n    }\n\n    // Sized delimiters are never centered.\n    if (utils.contains(stackLargeDelimiters, delim) ||\n        utils.contains(stackNeverDelimiters, delim)) {\n        return makeLargeDelim(delim, size, false, options, mode);\n    } else if (utils.contains(stackAlwaysDelimiters, delim)) {\n        return makeStackedDelim(\n            delim, sizeToMaxHeight[size], false, options, mode);\n    } else {\n        throw new ParseError(\"Illegal delimiter: '\" + delim + \"'\");\n    }\n};\n\n/**\n * There are three different sequences of delimiter sizes that the delimiters\n * follow depending on the kind of delimiter. This is used when creating custom\n * sized delimiters to decide whether to create a small, large, or stacked\n * delimiter.\n *\n * In real TeX, these sequences aren't explicitly defined, but are instead\n * defined inside the font metrics. Since there are only three sequences that\n * are possible for the delimiters that TeX defines, it is easier to just encode\n * them explicitly here.\n */\n\n// Delimiters that never stack try small delimiters and large delimiters only\nvar stackNeverDelimiterSequence = [\n    {type: \"small\", style: Style.SCRIPTSCRIPT},\n    {type: \"small\", style: Style.SCRIPT},\n    {type: \"small\", style: Style.TEXT},\n    {type: \"large\", size: 1},\n    {type: \"large\", size: 2},\n    {type: \"large\", size: 3},\n    {type: \"large\", size: 4},\n];\n\n// Delimiters that always stack try the small delimiters first, then stack\nvar stackAlwaysDelimiterSequence = [\n    {type: \"small\", style: Style.SCRIPTSCRIPT},\n    {type: \"small\", style: Style.SCRIPT},\n    {type: \"small\", style: Style.TEXT},\n    {type: \"stack\"},\n];\n\n// Delimiters that stack when large try the small and then large delimiters, and\n// stack afterwards\nvar stackLargeDelimiterSequence = [\n    {type: \"small\", style: Style.SCRIPTSCRIPT},\n    {type: \"small\", style: Style.SCRIPT},\n    {type: \"small\", style: Style.TEXT},\n    {type: \"large\", size: 1},\n    {type: \"large\", size: 2},\n    {type: \"large\", size: 3},\n    {type: \"large\", size: 4},\n    {type: \"stack\"},\n];\n\n/**\n * Get the font used in a delimiter based on what kind of delimiter it is.\n */\nvar delimTypeToFont = function(type) {\n    if (type.type === \"small\") {\n        return \"Main-Regular\";\n    } else if (type.type === \"large\") {\n        return \"Size\" + type.size + \"-Regular\";\n    } else if (type.type === \"stack\") {\n        return \"Size4-Regular\";\n    }\n};\n\n/**\n * Traverse a sequence of types of delimiters to decide what kind of delimiter\n * should be used to create a delimiter of the given height+depth.\n */\nvar traverseSequence = function(delim, height, sequence, options) {\n    // Here, we choose the index we should start at in the sequences. In smaller\n    // sizes (which correspond to larger numbers in style.size) we start earlier\n    // in the sequence. Thus, scriptscript starts at index 3-3=0, script starts\n    // at index 3-2=1, text starts at 3-1=2, and display starts at min(2,3-0)=2\n    var start = Math.min(2, 3 - options.style.size);\n    for (var i = start; i < sequence.length; i++) {\n        if (sequence[i].type === \"stack\") {\n            // This is always the last delimiter, so we just break the loop now.\n            break;\n        }\n\n        var metrics = getMetrics(delim, delimTypeToFont(sequence[i]));\n        var heightDepth = metrics.height + metrics.depth;\n\n        // Small delimiters are scaled down versions of the same font, so we\n        // account for the style change size.\n\n        if (sequence[i].type === \"small\") {\n            heightDepth *= sequence[i].style.sizeMultiplier;\n        }\n\n        // Check if the delimiter at this size works for the given height.\n        if (heightDepth > height) {\n            return sequence[i];\n        }\n    }\n\n    // If we reached the end of the sequence, return the last sequence element.\n    return sequence[sequence.length - 1];\n};\n\n/**\n * Make a delimiter of a given height+depth, with optional centering. Here, we\n * traverse the sequences, and create a delimiter that the sequence tells us to.\n */\nvar makeCustomSizedDelim = function(delim, height, center, options, mode) {\n    if (delim === \"<\" || delim === \"\\\\lt\") {\n        delim = \"\\\\langle\";\n    } else if (delim === \">\" || delim === \"\\\\gt\") {\n        delim = \"\\\\rangle\";\n    }\n\n    // Decide what sequence to use\n    var sequence;\n    if (utils.contains(stackNeverDelimiters, delim)) {\n        sequence = stackNeverDelimiterSequence;\n    } else if (utils.contains(stackLargeDelimiters, delim)) {\n        sequence = stackLargeDelimiterSequence;\n    } else {\n        sequence = stackAlwaysDelimiterSequence;\n    }\n\n    // Look through the sequence\n    var delimType = traverseSequence(delim, height, sequence, options);\n\n    // Depending on the sequence element we decided on, call the appropriate\n    // function.\n    if (delimType.type === \"small\") {\n        return makeSmallDelim(delim, delimType.style, center, options, mode);\n    } else if (delimType.type === \"large\") {\n        return makeLargeDelim(delim, delimType.size, center, options, mode);\n    } else if (delimType.type === \"stack\") {\n        return makeStackedDelim(delim, height, center, options, mode);\n    }\n};\n\n/**\n * Make a delimiter for use with `\\left` and `\\right`, given a height and depth\n * of an expression that the delimiters surround.\n */\nvar makeLeftRightDelim = function(delim, height, depth, options, mode) {\n    // We always center \\left/\\right delimiters, so the axis is always shifted\n    var axisHeight =\n        fontMetrics.metrics.axisHeight * options.style.sizeMultiplier;\n\n    // Taken from TeX source, tex.web, function make_left_right\n    var delimiterFactor = 901;\n    var delimiterExtend = 5.0 / fontMetrics.metrics.ptPerEm;\n\n    var maxDistFromAxis = Math.max(\n        height - axisHeight, depth + axisHeight);\n\n    var totalHeight = Math.max(\n        // In real TeX, calculations are done using integral values which are\n        // 65536 per pt, or 655360 per em. So, the division here truncates in\n        // TeX but doesn't here, producing different results. If we wanted to\n        // exactly match TeX's calculation, we could do\n        //   Math.floor(655360 * maxDistFromAxis / 500) *\n        //    delimiterFactor / 655360\n        // (To see the difference, compare\n        //    x^{x^{\\left(\\rule{0.1em}{0.68em}\\right)}}\n        // in TeX and KaTeX)\n        maxDistFromAxis / 500 * delimiterFactor,\n        2 * maxDistFromAxis - delimiterExtend);\n\n    // Finally, we defer to `makeCustomSizedDelim` with our calculated total\n    // height\n    return makeCustomSizedDelim(delim, totalHeight, true, options, mode);\n};\n\nmodule.exports = {\n    sizedDelim: makeSizedDelim,\n    customSizedDelim: makeCustomSizedDelim,\n    leftRightDelim: makeLeftRightDelim,\n};\n","/* eslint no-console:0 */\n/**\n * This file does the main work of building a domTree structure from a parse\n * tree. The entry point is the `buildHTML` function, which takes a parse tree.\n * Then, the buildExpression, buildGroup, and various groupTypes functions are\n * called, to produce a final HTML tree.\n */\n\nvar ParseError = require(\"./ParseError\");\nvar Style = require(\"./Style\");\n\nvar buildCommon = require(\"./buildCommon\");\nvar delimiter = require(\"./delimiter\");\nvar domTree = require(\"./domTree\");\nvar fontMetrics = require(\"./fontMetrics\");\nvar utils = require(\"./utils\");\n\nvar makeSpan = buildCommon.makeSpan;\n\n/**\n * Take a list of nodes, build them in order, and return a list of the built\n * nodes. This function handles the `prev` node correctly, and passes the\n * previous element from the list as the prev of the next element.\n */\nvar buildExpression = function(expression, options, prev) {\n    var groups = [];\n    for (var i = 0; i < expression.length; i++) {\n        var group = expression[i];\n        groups.push(buildGroup(group, options, prev));\n        prev = group;\n    }\n    return groups;\n};\n\n// List of types used by getTypeOfGroup,\n// see https://github.com/Khan/KaTeX/wiki/Examining-TeX#group-types\nvar groupToType = {\n    mathord: \"mord\",\n    textord: \"mord\",\n    bin: \"mbin\",\n    rel: \"mrel\",\n    text: \"mord\",\n    open: \"mopen\",\n    close: \"mclose\",\n    inner: \"minner\",\n    genfrac: \"mord\",\n    array: \"mord\",\n    spacing: \"mord\",\n    punct: \"mpunct\",\n    ordgroup: \"mord\",\n    op: \"mop\",\n    katex: \"mord\",\n    overline: \"mord\",\n    underline: \"mord\",\n    rule: \"mord\",\n    leftright: \"minner\",\n    sqrt: \"mord\",\n    accent: \"mord\",\n};\n\n/**\n * Gets the final math type of an expression, given its group type. This type is\n * used to determine spacing between elements, and affects bin elements by\n * causing them to change depending on what types are around them. This type\n * must be attached to the outermost node of an element as a CSS class so that\n * spacing with its surrounding elements works correctly.\n *\n * Some elements can be mapped one-to-one from group type to math type, and\n * those are listed in the `groupToType` table.\n *\n * Others (usually elements that wrap around other elements) often have\n * recursive definitions, and thus call `getTypeOfGroup` on their inner\n * elements.\n */\nvar getTypeOfGroup = function(group) {\n    if (group == null) {\n        // Like when typesetting $^3$\n        return groupToType.mathord;\n    } else if (group.type === \"supsub\") {\n        return getTypeOfGroup(group.value.base);\n    } else if (group.type === \"llap\" || group.type === \"rlap\") {\n        return getTypeOfGroup(group.value);\n    } else if (group.type === \"color\") {\n        return getTypeOfGroup(group.value.value);\n    } else if (group.type === \"sizing\") {\n        return getTypeOfGroup(group.value.value);\n    } else if (group.type === \"styling\") {\n        return getTypeOfGroup(group.value.value);\n    } else if (group.type === \"delimsizing\") {\n        return groupToType[group.value.delimType];\n    } else {\n        return groupToType[group.type];\n    }\n};\n\n/**\n * Sometimes, groups perform special rules when they have superscripts or\n * subscripts attached to them. This function lets the `supsub` group know that\n * its inner element should handle the superscripts and subscripts instead of\n * handling them itself.\n */\nvar shouldHandleSupSub = function(group, options) {\n    if (!group) {\n        return false;\n    } else if (group.type === \"op\") {\n        // Operators handle supsubs differently when they have limits\n        // (e.g. `\\displaystyle\\sum_2^3`)\n        return group.value.limits &&\n            (options.style.size === Style.DISPLAY.size ||\n            group.value.alwaysHandleSupSub);\n    } else if (group.type === \"accent\") {\n        return isCharacterBox(group.value.base);\n    } else {\n        return null;\n    }\n};\n\n/**\n * Sometimes we want to pull out the innermost element of a group. In most\n * cases, this will just be the group itself, but when ordgroups and colors have\n * a single element, we want to pull that out.\n */\nvar getBaseElem = function(group) {\n    if (!group) {\n        return false;\n    } else if (group.type === \"ordgroup\") {\n        if (group.value.length === 1) {\n            return getBaseElem(group.value[0]);\n        } else {\n            return group;\n        }\n    } else if (group.type === \"color\") {\n        if (group.value.value.length === 1) {\n            return getBaseElem(group.value.value[0]);\n        } else {\n            return group;\n        }\n    } else {\n        return group;\n    }\n};\n\n/**\n * TeXbook algorithms often reference \"character boxes\", which are simply groups\n * with a single character in them. To decide if something is a character box,\n * we find its innermost group, and see if it is a single character.\n */\nvar isCharacterBox = function(group) {\n    var baseElem = getBaseElem(group);\n\n    // These are all they types of groups which hold single characters\n    return baseElem.type === \"mathord\" ||\n        baseElem.type === \"textord\" ||\n        baseElem.type === \"bin\" ||\n        baseElem.type === \"rel\" ||\n        baseElem.type === \"inner\" ||\n        baseElem.type === \"open\" ||\n        baseElem.type === \"close\" ||\n        baseElem.type === \"punct\";\n};\n\nvar makeNullDelimiter = function(options) {\n    return makeSpan([\n        \"sizing\", \"reset-\" + options.size, \"size5\",\n        options.style.reset(), Style.TEXT.cls(),\n        \"nulldelimiter\",\n    ]);\n};\n\n/**\n * This is a map of group types to the function used to handle that type.\n * Simpler types come at the beginning, while complicated types come afterwards.\n */\nvar groupTypes = {};\n\ngroupTypes.mathord = function(group, options, prev) {\n    return buildCommon.makeOrd(group, options, \"mathord\");\n};\n\ngroupTypes.textord = function(group, options, prev) {\n    return buildCommon.makeOrd(group, options, \"textord\");\n};\n\ngroupTypes.bin = function(group, options, prev) {\n    var className = \"mbin\";\n    // Pull out the most recent element. Do some special handling to find\n    // things at the end of a \\color group. Note that we don't use the same\n    // logic for ordgroups (which count as ords).\n    var prevAtom = prev;\n    while (prevAtom && prevAtom.type === \"color\") {\n        var atoms = prevAtom.value.value;\n        prevAtom = atoms[atoms.length - 1];\n    }\n    // See TeXbook pg. 442-446, Rules 5 and 6, and the text before Rule 19.\n    // Here, we determine whether the bin should turn into an ord. We\n    // currently only apply Rule 5.\n    if (!prev || utils.contains([\"mbin\", \"mopen\", \"mrel\", \"mop\", \"mpunct\"],\n            getTypeOfGroup(prevAtom))) {\n        group.type = \"textord\";\n        className = \"mord\";\n    }\n\n    return buildCommon.mathsym(\n        group.value, group.mode, options.getColor(), [className]);\n};\n\ngroupTypes.rel = function(group, options, prev) {\n    return buildCommon.mathsym(\n        group.value, group.mode, options.getColor(), [\"mrel\"]);\n};\n\ngroupTypes.open = function(group, options, prev) {\n    return buildCommon.mathsym(\n        group.value, group.mode, options.getColor(), [\"mopen\"]);\n};\n\ngroupTypes.close = function(group, options, prev) {\n    return buildCommon.mathsym(\n        group.value, group.mode, options.getColor(), [\"mclose\"]);\n};\n\ngroupTypes.inner = function(group, options, prev) {\n    return buildCommon.mathsym(\n        group.value, group.mode, options.getColor(), [\"minner\"]);\n};\n\ngroupTypes.punct = function(group, options, prev) {\n    return buildCommon.mathsym(\n        group.value, group.mode, options.getColor(), [\"mpunct\"]);\n};\n\ngroupTypes.ordgroup = function(group, options, prev) {\n    return makeSpan(\n        [\"mord\", options.style.cls()],\n        buildExpression(group.value, options.reset())\n    );\n};\n\ngroupTypes.text = function(group, options, prev) {\n    return makeSpan([\"text\", \"mord\", options.style.cls()],\n        buildExpression(group.value.body, options.reset()));\n};\n\ngroupTypes.color = function(group, options, prev) {\n    var elements = buildExpression(\n        group.value.value,\n        options.withColor(group.value.color),\n        prev\n    );\n\n    // \\color isn't supposed to affect the type of the elements it contains.\n    // To accomplish this, we wrap the results in a fragment, so the inner\n    // elements will be able to directly interact with their neighbors. For\n    // example, `\\color{red}{2 +} 3` has the same spacing as `2 + 3`\n    return new buildCommon.makeFragment(elements);\n};\n\ngroupTypes.supsub = function(group, options, prev) {\n    // Superscript and subscripts are handled in the TeXbook on page\n    // 445-446, rules 18(a-f).\n\n    // Here is where we defer to the inner group if it should handle\n    // superscripts and subscripts itself.\n    if (shouldHandleSupSub(group.value.base, options)) {\n        return groupTypes[group.value.base.type](group, options, prev);\n    }\n\n    var base = buildGroup(group.value.base, options.reset());\n    var supmid;\n    var submid;\n    var sup;\n    var sub;\n\n    if (group.value.sup) {\n        sup = buildGroup(group.value.sup,\n                options.withStyle(options.style.sup()));\n        supmid = makeSpan(\n                [options.style.reset(), options.style.sup().cls()], [sup]);\n    }\n\n    if (group.value.sub) {\n        sub = buildGroup(group.value.sub,\n                options.withStyle(options.style.sub()));\n        submid = makeSpan(\n                [options.style.reset(), options.style.sub().cls()], [sub]);\n    }\n\n    // Rule 18a\n    var supShift;\n    var subShift;\n    if (isCharacterBox(group.value.base)) {\n        supShift = 0;\n        subShift = 0;\n    } else {\n        supShift = base.height - fontMetrics.metrics.supDrop;\n        subShift = base.depth + fontMetrics.metrics.subDrop;\n    }\n\n    // Rule 18c\n    var minSupShift;\n    if (options.style === Style.DISPLAY) {\n        minSupShift = fontMetrics.metrics.sup1;\n    } else if (options.style.cramped) {\n        minSupShift = fontMetrics.metrics.sup3;\n    } else {\n        minSupShift = fontMetrics.metrics.sup2;\n    }\n\n    // scriptspace is a font-size-independent size, so scale it\n    // appropriately\n    var multiplier = Style.TEXT.sizeMultiplier *\n            options.style.sizeMultiplier;\n    var scriptspace =\n        (0.5 / fontMetrics.metrics.ptPerEm) / multiplier + \"em\";\n\n    var supsub;\n    if (!group.value.sup) {\n        // Rule 18b\n        subShift = Math.max(\n            subShift, fontMetrics.metrics.sub1,\n            sub.height - 0.8 * fontMetrics.metrics.xHeight);\n\n        supsub = buildCommon.makeVList([\n            {type: \"elem\", elem: submid},\n        ], \"shift\", subShift, options);\n\n        supsub.children[0].style.marginRight = scriptspace;\n\n        // Subscripts shouldn't be shifted by the base's italic correction.\n        // Account for that by shifting the subscript back the appropriate\n        // amount. Note we only do this when the base is a single symbol.\n        if (base instanceof domTree.symbolNode) {\n            supsub.children[0].style.marginLeft = -base.italic + \"em\";\n        }\n    } else if (!group.value.sub) {\n        // Rule 18c, d\n        supShift = Math.max(supShift, minSupShift,\n            sup.depth + 0.25 * fontMetrics.metrics.xHeight);\n\n        supsub = buildCommon.makeVList([\n            {type: \"elem\", elem: supmid},\n        ], \"shift\", -supShift, options);\n\n        supsub.children[0].style.marginRight = scriptspace;\n    } else {\n        supShift = Math.max(\n            supShift, minSupShift,\n            sup.depth + 0.25 * fontMetrics.metrics.xHeight);\n        subShift = Math.max(subShift, fontMetrics.metrics.sub2);\n\n        var ruleWidth = fontMetrics.metrics.defaultRuleThickness;\n\n        // Rule 18e\n        if ((supShift - sup.depth) - (sub.height - subShift) <\n                4 * ruleWidth) {\n            subShift = 4 * ruleWidth - (supShift - sup.depth) + sub.height;\n            var psi = 0.8 * fontMetrics.metrics.xHeight -\n                (supShift - sup.depth);\n            if (psi > 0) {\n                supShift += psi;\n                subShift -= psi;\n            }\n        }\n\n        supsub = buildCommon.makeVList([\n            {type: \"elem\", elem: submid, shift: subShift},\n            {type: \"elem\", elem: supmid, shift: -supShift},\n        ], \"individualShift\", null, options);\n\n        // See comment above about subscripts not being shifted\n        if (base instanceof domTree.symbolNode) {\n            supsub.children[0].style.marginLeft = -base.italic + \"em\";\n        }\n\n        supsub.children[0].style.marginRight = scriptspace;\n        supsub.children[1].style.marginRight = scriptspace;\n    }\n\n    return makeSpan([getTypeOfGroup(group.value.base)],\n        [base, supsub]);\n};\n\ngroupTypes.genfrac = function(group, options, prev) {\n    // Fractions are handled in the TeXbook on pages 444-445, rules 15(a-e).\n    // Figure out what style this fraction should be in based on the\n    // function used\n    var fstyle = options.style;\n    if (group.value.size === \"display\") {\n        fstyle = Style.DISPLAY;\n    } else if (group.value.size === \"text\") {\n        fstyle = Style.TEXT;\n    }\n\n    var nstyle = fstyle.fracNum();\n    var dstyle = fstyle.fracDen();\n\n    var numer = buildGroup(group.value.numer, options.withStyle(nstyle));\n    var numerreset = makeSpan([fstyle.reset(), nstyle.cls()], [numer]);\n\n    var denom = buildGroup(group.value.denom, options.withStyle(dstyle));\n    var denomreset = makeSpan([fstyle.reset(), dstyle.cls()], [denom]);\n\n    var ruleWidth;\n    if (group.value.hasBarLine) {\n        ruleWidth = fontMetrics.metrics.defaultRuleThickness /\n            options.style.sizeMultiplier;\n    } else {\n        ruleWidth = 0;\n    }\n\n    // Rule 15b\n    var numShift;\n    var clearance;\n    var denomShift;\n    if (fstyle.size === Style.DISPLAY.size) {\n        numShift = fontMetrics.metrics.num1;\n        if (ruleWidth > 0) {\n            clearance = 3 * ruleWidth;\n        } else {\n            clearance = 7 * fontMetrics.metrics.defaultRuleThickness;\n        }\n        denomShift = fontMetrics.metrics.denom1;\n    } else {\n        if (ruleWidth > 0) {\n            numShift = fontMetrics.metrics.num2;\n            clearance = ruleWidth;\n        } else {\n            numShift = fontMetrics.metrics.num3;\n            clearance = 3 * fontMetrics.metrics.defaultRuleThickness;\n        }\n        denomShift = fontMetrics.metrics.denom2;\n    }\n\n    var frac;\n    if (ruleWidth === 0) {\n        // Rule 15c\n        var candiateClearance =\n            (numShift - numer.depth) - (denom.height - denomShift);\n        if (candiateClearance < clearance) {\n            numShift += 0.5 * (clearance - candiateClearance);\n            denomShift += 0.5 * (clearance - candiateClearance);\n        }\n\n        frac = buildCommon.makeVList([\n            {type: \"elem\", elem: denomreset, shift: denomShift},\n            {type: \"elem\", elem: numerreset, shift: -numShift},\n        ], \"individualShift\", null, options);\n    } else {\n        // Rule 15d\n        var axisHeight = fontMetrics.metrics.axisHeight;\n\n        if ((numShift - numer.depth) - (axisHeight + 0.5 * ruleWidth) <\n                clearance) {\n            numShift +=\n                clearance - ((numShift - numer.depth) -\n                             (axisHeight + 0.5 * ruleWidth));\n        }\n\n        if ((axisHeight - 0.5 * ruleWidth) - (denom.height - denomShift) <\n                clearance) {\n            denomShift +=\n                clearance - ((axisHeight - 0.5 * ruleWidth) -\n                             (denom.height - denomShift));\n        }\n\n        var mid = makeSpan(\n            [options.style.reset(), Style.TEXT.cls(), \"frac-line\"]);\n        // Manually set the height of the line because its height is\n        // created in CSS\n        mid.height = ruleWidth;\n\n        var midShift = -(axisHeight - 0.5 * ruleWidth);\n\n        frac = buildCommon.makeVList([\n            {type: \"elem\", elem: denomreset, shift: denomShift},\n            {type: \"elem\", elem: mid,        shift: midShift},\n            {type: \"elem\", elem: numerreset, shift: -numShift},\n        ], \"individualShift\", null, options);\n    }\n\n    // Since we manually change the style sometimes (with \\dfrac or \\tfrac),\n    // account for the possible size change here.\n    frac.height *= fstyle.sizeMultiplier / options.style.sizeMultiplier;\n    frac.depth *= fstyle.sizeMultiplier / options.style.sizeMultiplier;\n\n    // Rule 15e\n    var delimSize;\n    if (fstyle.size === Style.DISPLAY.size) {\n        delimSize = fontMetrics.metrics.delim1;\n    } else {\n        delimSize = fontMetrics.metrics.getDelim2(fstyle);\n    }\n\n    var leftDelim;\n    var rightDelim;\n    if (group.value.leftDelim == null) {\n        leftDelim = makeNullDelimiter(options);\n    } else {\n        leftDelim = delimiter.customSizedDelim(\n            group.value.leftDelim, delimSize, true,\n            options.withStyle(fstyle), group.mode);\n    }\n    if (group.value.rightDelim == null) {\n        rightDelim = makeNullDelimiter(options);\n    } else {\n        rightDelim = delimiter.customSizedDelim(\n            group.value.rightDelim, delimSize, true,\n            options.withStyle(fstyle), group.mode);\n    }\n\n    return makeSpan(\n        [\"mord\", options.style.reset(), fstyle.cls()],\n        [leftDelim, makeSpan([\"mfrac\"], [frac]), rightDelim],\n        options.getColor());\n};\n\ngroupTypes.array = function(group, options, prev) {\n    var r;\n    var c;\n    var nr = group.value.body.length;\n    var nc = 0;\n    var body = new Array(nr);\n\n    // Horizontal spacing\n    var pt = 1 / fontMetrics.metrics.ptPerEm;\n    var arraycolsep = 5 * pt; // \\arraycolsep in article.cls\n\n    // Vertical spacing\n    var baselineskip = 12 * pt; // see size10.clo\n    // Default \\arraystretch from lttab.dtx\n    // TODO(gagern): may get redefined once we have user-defined macros\n    var arraystretch = utils.deflt(group.value.arraystretch, 1);\n    var arrayskip = arraystretch * baselineskip;\n    var arstrutHeight = 0.7 * arrayskip; // \\strutbox in ltfsstrc.dtx and\n    var arstrutDepth = 0.3 * arrayskip;  // \\@arstrutbox in lttab.dtx\n\n    var totalHeight = 0;\n    for (r = 0; r < group.value.body.length; ++r) {\n        var inrow = group.value.body[r];\n        var height = arstrutHeight; // \\@array adds an \\@arstrut\n        var depth = arstrutDepth;   // to each tow (via the template)\n\n        if (nc < inrow.length) {\n            nc = inrow.length;\n        }\n\n        var outrow = new Array(inrow.length);\n        for (c = 0; c < inrow.length; ++c) {\n            var elt = buildGroup(inrow[c], options);\n            if (depth < elt.depth) {\n                depth = elt.depth;\n            }\n            if (height < elt.height) {\n                height = elt.height;\n            }\n            outrow[c] = elt;\n        }\n\n        var gap = 0;\n        if (group.value.rowGaps[r]) {\n            gap = group.value.rowGaps[r].value;\n            switch (gap.unit) {\n                case \"em\":\n                    gap = gap.number;\n                    break;\n                case \"ex\":\n                    gap = gap.number * fontMetrics.metrics.emPerEx;\n                    break;\n                default:\n                    console.error(\"Can't handle unit \" + gap.unit);\n                    gap = 0;\n            }\n            if (gap > 0) { // \\@argarraycr\n                gap += arstrutDepth;\n                if (depth < gap) {\n                    depth = gap; // \\@xargarraycr\n                }\n                gap = 0;\n            }\n        }\n\n        outrow.height = height;\n        outrow.depth = depth;\n        totalHeight += height;\n        outrow.pos = totalHeight;\n        totalHeight += depth + gap; // \\@yargarraycr\n        body[r] = outrow;\n    }\n\n    var offset = totalHeight / 2 + fontMetrics.metrics.axisHeight;\n    var colDescriptions = group.value.cols || [];\n    var cols = [];\n    var colSep;\n    var colDescrNum;\n    for (c = 0, colDescrNum = 0;\n         // Continue while either there are more columns or more column\n         // descriptions, so trailing separators don't get lost.\n         c < nc || colDescrNum < colDescriptions.length;\n         ++c, ++colDescrNum) {\n\n        var colDescr = colDescriptions[colDescrNum] || {};\n\n        var firstSeparator = true;\n        while (colDescr.type === \"separator\") {\n            // If there is more than one separator in a row, add a space\n            // between them.\n            if (!firstSeparator) {\n                colSep = makeSpan([\"arraycolsep\"], []);\n                colSep.style.width =\n                    fontMetrics.metrics.doubleRuleSep + \"em\";\n                cols.push(colSep);\n            }\n\n            if (colDescr.separator === \"|\") {\n                var separator = makeSpan(\n                    [\"vertical-separator\"],\n                    []);\n                separator.style.height = totalHeight + \"em\";\n                separator.style.verticalAlign =\n                    -(totalHeight - offset) + \"em\";\n\n                cols.push(separator);\n            } else {\n                throw new ParseError(\n                    \"Invalid separator type: \" + colDescr.separator);\n            }\n\n            colDescrNum++;\n            colDescr = colDescriptions[colDescrNum] || {};\n            firstSeparator = false;\n        }\n\n        if (c >= nc) {\n            continue;\n        }\n\n        var sepwidth;\n        if (c > 0 || group.value.hskipBeforeAndAfter) {\n            sepwidth = utils.deflt(colDescr.pregap, arraycolsep);\n            if (sepwidth !== 0) {\n                colSep = makeSpan([\"arraycolsep\"], []);\n                colSep.style.width = sepwidth + \"em\";\n                cols.push(colSep);\n            }\n        }\n\n        var col = [];\n        for (r = 0; r < nr; ++r) {\n            var row = body[r];\n            var elem = row[c];\n            if (!elem) {\n                continue;\n            }\n            var shift = row.pos - offset;\n            elem.depth = row.depth;\n            elem.height = row.height;\n            col.push({type: \"elem\", elem: elem, shift: shift});\n        }\n\n        col = buildCommon.makeVList(col, \"individualShift\", null, options);\n        col = makeSpan(\n            [\"col-align-\" + (colDescr.align || \"c\")],\n            [col]);\n        cols.push(col);\n\n        if (c < nc - 1 || group.value.hskipBeforeAndAfter) {\n            sepwidth = utils.deflt(colDescr.postgap, arraycolsep);\n            if (sepwidth !== 0) {\n                colSep = makeSpan([\"arraycolsep\"], []);\n                colSep.style.width = sepwidth + \"em\";\n                cols.push(colSep);\n            }\n        }\n    }\n    body = makeSpan([\"mtable\"], cols);\n    return makeSpan([\"mord\"], [body], options.getColor());\n};\n\ngroupTypes.spacing = function(group, options, prev) {\n    if (group.value === \"\\\\ \" || group.value === \"\\\\space\" ||\n        group.value === \" \" || group.value === \"~\") {\n        // Spaces are generated by adding an actual space. Each of these\n        // things has an entry in the symbols table, so these will be turned\n        // into appropriate outputs.\n        return makeSpan(\n            [\"mord\", \"mspace\"],\n            [buildCommon.mathsym(group.value, group.mode)]\n        );\n    } else {\n        // Other kinds of spaces are of arbitrary width. We use CSS to\n        // generate these.\n        return makeSpan(\n            [\"mord\", \"mspace\",\n             buildCommon.spacingFunctions[group.value].className]);\n    }\n};\n\ngroupTypes.llap = function(group, options, prev) {\n    var inner = makeSpan(\n        [\"inner\"], [buildGroup(group.value.body, options.reset())]);\n    var fix = makeSpan([\"fix\"], []);\n    return makeSpan(\n        [\"llap\", options.style.cls()], [inner, fix]);\n};\n\ngroupTypes.rlap = function(group, options, prev) {\n    var inner = makeSpan(\n        [\"inner\"], [buildGroup(group.value.body, options.reset())]);\n    var fix = makeSpan([\"fix\"], []);\n    return makeSpan(\n        [\"rlap\", options.style.cls()], [inner, fix]);\n};\n\ngroupTypes.op = function(group, options, prev) {\n    // Operators are handled in the TeXbook pg. 443-444, rule 13(a).\n    var supGroup;\n    var subGroup;\n    var hasLimits = false;\n    if (group.type === \"supsub\" ) {\n        // If we have limits, supsub will pass us its group to handle. Pull\n        // out the superscript and subscript and set the group to the op in\n        // its base.\n        supGroup = group.value.sup;\n        subGroup = group.value.sub;\n        group = group.value.base;\n        hasLimits = true;\n    }\n\n    // Most operators have a large successor symbol, but these don't.\n    var noSuccessor = [\n        \"\\\\smallint\",\n    ];\n\n    var large = false;\n    if (options.style.size === Style.DISPLAY.size &&\n        group.value.symbol &&\n        !utils.contains(noSuccessor, group.value.body)) {\n\n        // Most symbol operators get larger in displaystyle (rule 13)\n        large = true;\n    }\n\n    var base;\n    var baseShift = 0;\n    var slant = 0;\n    if (group.value.symbol) {\n        // If this is a symbol, create the symbol.\n        var style = large ? \"Size2-Regular\" : \"Size1-Regular\";\n        base = buildCommon.makeSymbol(\n            group.value.body, style, \"math\", options.getColor(),\n            [\"op-symbol\", large ? \"large-op\" : \"small-op\", \"mop\"]);\n\n        // Shift the symbol so its center lies on the axis (rule 13). It\n        // appears that our fonts have the centers of the symbols already\n        // almost on the axis, so these numbers are very small. Note we\n        // don't actually apply this here, but instead it is used either in\n        // the vlist creation or separately when there are no limits.\n        baseShift = (base.height - base.depth) / 2 -\n            fontMetrics.metrics.axisHeight *\n            options.style.sizeMultiplier;\n\n        // The slant of the symbol is just its italic correction.\n        slant = base.italic;\n    } else {\n        // Otherwise, this is a text operator. Build the text from the\n        // operator's name.\n        // TODO(emily): Add a space in the middle of some of these\n        // operators, like \\limsup\n        var output = [];\n        for (var i = 1; i < group.value.body.length; i++) {\n            output.push(buildCommon.mathsym(group.value.body[i], group.mode));\n        }\n        base = makeSpan([\"mop\"], output, options.getColor());\n    }\n\n    if (hasLimits) {\n        // IE 8 clips \\int if it is in a display: inline-block. We wrap it\n        // in a new span so it is an inline, and works.\n        base = makeSpan([], [base]);\n\n        var supmid;\n        var supKern;\n        var submid;\n        var subKern;\n        // We manually have to handle the superscripts and subscripts. This,\n        // aside from the kern calculations, is copied from supsub.\n        if (supGroup) {\n            var sup = buildGroup(\n                supGroup, options.withStyle(options.style.sup()));\n            supmid = makeSpan(\n                [options.style.reset(), options.style.sup().cls()], [sup]);\n\n            supKern = Math.max(\n                fontMetrics.metrics.bigOpSpacing1,\n                fontMetrics.metrics.bigOpSpacing3 - sup.depth);\n        }\n\n        if (subGroup) {\n            var sub = buildGroup(\n                subGroup, options.withStyle(options.style.sub()));\n            submid = makeSpan(\n                [options.style.reset(), options.style.sub().cls()],\n                [sub]);\n\n            subKern = Math.max(\n                fontMetrics.metrics.bigOpSpacing2,\n                fontMetrics.metrics.bigOpSpacing4 - sub.height);\n        }\n\n        // Build the final group as a vlist of the possible subscript, base,\n        // and possible superscript.\n        var finalGroup;\n        var top;\n        var bottom;\n        if (!supGroup) {\n            top = base.height - baseShift;\n\n            finalGroup = buildCommon.makeVList([\n                {type: \"kern\", size: fontMetrics.metrics.bigOpSpacing5},\n                {type: \"elem\", elem: submid},\n                {type: \"kern\", size: subKern},\n                {type: \"elem\", elem: base},\n            ], \"top\", top, options);\n\n            // Here, we shift the limits by the slant of the symbol. Note\n            // that we are supposed to shift the limits by 1/2 of the slant,\n            // but since we are centering the limits adding a full slant of\n            // margin will shift by 1/2 that.\n            finalGroup.children[0].style.marginLeft = -slant + \"em\";\n        } else if (!subGroup) {\n            bottom = base.depth + baseShift;\n\n            finalGroup = buildCommon.makeVList([\n                {type: \"elem\", elem: base},\n                {type: \"kern\", size: supKern},\n                {type: \"elem\", elem: supmid},\n                {type: \"kern\", size: fontMetrics.metrics.bigOpSpacing5},\n            ], \"bottom\", bottom, options);\n\n            // See comment above about slants\n            finalGroup.children[1].style.marginLeft = slant + \"em\";\n        } else if (!supGroup && !subGroup) {\n            // This case probably shouldn't occur (this would mean the\n            // supsub was sending us a group with no superscript or\n            // subscript) but be safe.\n            return base;\n        } else {\n            bottom = fontMetrics.metrics.bigOpSpacing5 +\n                submid.height + submid.depth +\n                subKern +\n                base.depth + baseShift;\n\n            finalGroup = buildCommon.makeVList([\n                {type: \"kern\", size: fontMetrics.metrics.bigOpSpacing5},\n                {type: \"elem\", elem: submid},\n                {type: \"kern\", size: subKern},\n                {type: \"elem\", elem: base},\n                {type: \"kern\", size: supKern},\n                {type: \"elem\", elem: supmid},\n                {type: \"kern\", size: fontMetrics.metrics.bigOpSpacing5},\n            ], \"bottom\", bottom, options);\n\n            // See comment above about slants\n            finalGroup.children[0].style.marginLeft = -slant + \"em\";\n            finalGroup.children[2].style.marginLeft = slant + \"em\";\n        }\n\n        return makeSpan([\"mop\", \"op-limits\"], [finalGroup]);\n    } else {\n        if (group.value.symbol) {\n            base.style.top = baseShift + \"em\";\n        }\n\n        return base;\n    }\n};\n\ngroupTypes.katex = function(group, options, prev) {\n    // The KaTeX logo. The offsets for the K and a were chosen to look\n    // good, but the offsets for the T, E, and X were taken from the\n    // definition of \\TeX in TeX (see TeXbook pg. 356)\n    var k = makeSpan(\n        [\"k\"], [buildCommon.mathsym(\"K\", group.mode)]);\n    var a = makeSpan(\n        [\"a\"], [buildCommon.mathsym(\"A\", group.mode)]);\n\n    a.height = (a.height + 0.2) * 0.75;\n    a.depth = (a.height - 0.2) * 0.75;\n\n    var t = makeSpan(\n        [\"t\"], [buildCommon.mathsym(\"T\", group.mode)]);\n    var e = makeSpan(\n        [\"e\"], [buildCommon.mathsym(\"E\", group.mode)]);\n\n    e.height = (e.height - 0.2155);\n    e.depth = (e.depth + 0.2155);\n\n    var x = makeSpan(\n        [\"x\"], [buildCommon.mathsym(\"X\", group.mode)]);\n\n    return makeSpan(\n        [\"katex-logo\", \"mord\"], [k, a, t, e, x], options.getColor());\n};\n\ngroupTypes.overline = function(group, options, prev) {\n    // Overlines are handled in the TeXbook pg 443, Rule 9.\n\n    // Build the inner group in the cramped style.\n    var innerGroup = buildGroup(group.value.body,\n            options.withStyle(options.style.cramp()));\n\n    var ruleWidth = fontMetrics.metrics.defaultRuleThickness /\n        options.style.sizeMultiplier;\n\n    // Create the line above the body\n    var line = makeSpan(\n        [options.style.reset(), Style.TEXT.cls(), \"overline-line\"]);\n    line.height = ruleWidth;\n    line.maxFontSize = 1.0;\n\n    // Generate the vlist, with the appropriate kerns\n    var vlist = buildCommon.makeVList([\n        {type: \"elem\", elem: innerGroup},\n        {type: \"kern\", size: 3 * ruleWidth},\n        {type: \"elem\", elem: line},\n        {type: \"kern\", size: ruleWidth},\n    ], \"firstBaseline\", null, options);\n\n    return makeSpan([\"overline\", \"mord\"], [vlist], options.getColor());\n};\n\ngroupTypes.underline = function(group, options, prev) {\n    // Underlines are handled in the TeXbook pg 443, Rule 10.\n\n    // Build the inner group.\n    var innerGroup = buildGroup(group.value.body, options);\n\n    var ruleWidth = fontMetrics.metrics.defaultRuleThickness /\n        options.style.sizeMultiplier;\n\n    // Create the line above the body\n    var line = makeSpan(\n        [options.style.reset(), Style.TEXT.cls(), \"underline-line\"]);\n    line.height = ruleWidth;\n    line.maxFontSize = 1.0;\n\n    // Generate the vlist, with the appropriate kerns\n    var vlist = buildCommon.makeVList([\n        {type: \"kern\", size: ruleWidth},\n        {type: \"elem\", elem: line},\n        {type: \"kern\", size: 3 * ruleWidth},\n        {type: \"elem\", elem: innerGroup},\n    ], \"top\", innerGroup.height, options);\n\n    return makeSpan([\"underline\", \"mord\"], [vlist], options.getColor());\n};\n\ngroupTypes.sqrt = function(group, options, prev) {\n    // Square roots are handled in the TeXbook pg. 443, Rule 11.\n\n    // First, we do the same steps as in overline to build the inner group\n    // and line\n    var inner = buildGroup(group.value.body,\n            options.withStyle(options.style.cramp()));\n\n    var ruleWidth = fontMetrics.metrics.defaultRuleThickness /\n        options.style.sizeMultiplier;\n\n    var line = makeSpan(\n        [options.style.reset(), Style.TEXT.cls(), \"sqrt-line\"], [],\n        options.getColor());\n    line.height = ruleWidth;\n    line.maxFontSize = 1.0;\n\n    var phi = ruleWidth;\n    if (options.style.id < Style.TEXT.id) {\n        phi = fontMetrics.metrics.xHeight;\n    }\n\n    // Calculate the clearance between the body and line\n    var lineClearance = ruleWidth + phi / 4;\n\n    var innerHeight =\n        (inner.height + inner.depth) * options.style.sizeMultiplier;\n    var minDelimiterHeight = innerHeight + lineClearance + ruleWidth;\n\n    // Create a \\surd delimiter of the required minimum size\n    var delim = makeSpan([\"sqrt-sign\"], [\n        delimiter.customSizedDelim(\"\\\\surd\", minDelimiterHeight,\n                                   false, options, group.mode)],\n                         options.getColor());\n\n    var delimDepth = (delim.height + delim.depth) - ruleWidth;\n\n    // Adjust the clearance based on the delimiter size\n    if (delimDepth > inner.height + inner.depth + lineClearance) {\n        lineClearance =\n            (lineClearance + delimDepth - inner.height - inner.depth) / 2;\n    }\n\n    // Shift the delimiter so that its top lines up with the top of the line\n    var delimShift = -(inner.height + lineClearance + ruleWidth) + delim.height;\n    delim.style.top = delimShift + \"em\";\n    delim.height -= delimShift;\n    delim.depth += delimShift;\n\n    // We add a special case here, because even when `inner` is empty, we\n    // still get a line. So, we use a simple heuristic to decide if we\n    // should omit the body entirely. (note this doesn't work for something\n    // like `\\sqrt{\\rlap{x}}`, but if someone is doing that they deserve for\n    // it not to work.\n    var body;\n    if (inner.height === 0 && inner.depth === 0) {\n        body = makeSpan();\n    } else {\n        body = buildCommon.makeVList([\n            {type: \"elem\", elem: inner},\n            {type: \"kern\", size: lineClearance},\n            {type: \"elem\", elem: line},\n            {type: \"kern\", size: ruleWidth},\n        ], \"firstBaseline\", null, options);\n    }\n\n    if (!group.value.index) {\n        return makeSpan([\"sqrt\", \"mord\"], [delim, body]);\n    } else {\n        // Handle the optional root index\n\n        // The index is always in scriptscript style\n        var root = buildGroup(\n            group.value.index,\n            options.withStyle(Style.SCRIPTSCRIPT));\n        var rootWrap = makeSpan(\n            [options.style.reset(), Style.SCRIPTSCRIPT.cls()],\n            [root]);\n\n        // Figure out the height and depth of the inner part\n        var innerRootHeight = Math.max(delim.height, body.height);\n        var innerRootDepth = Math.max(delim.depth, body.depth);\n\n        // The amount the index is shifted by. This is taken from the TeX\n        // source, in the definition of `\\r@@t`.\n        var toShift = 0.6 * (innerRootHeight - innerRootDepth);\n\n        // Build a VList with the superscript shifted up correctly\n        var rootVList = buildCommon.makeVList(\n            [{type: \"elem\", elem: rootWrap}],\n            \"shift\", -toShift, options);\n        // Add a class surrounding it so we can add on the appropriate\n        // kerning\n        var rootVListWrap = makeSpan([\"root\"], [rootVList]);\n\n        return makeSpan([\"sqrt\", \"mord\"], [rootVListWrap, delim, body]);\n    }\n};\n\ngroupTypes.sizing = function(group, options, prev) {\n    // Handle sizing operators like \\Huge. Real TeX doesn't actually allow\n    // these functions inside of math expressions, so we do some special\n    // handling.\n    var inner = buildExpression(group.value.value,\n            options.withSize(group.value.size), prev);\n\n    var span = makeSpan([\"mord\"],\n        [makeSpan([\"sizing\", \"reset-\" + options.size, group.value.size,\n                   options.style.cls()],\n                  inner)]);\n\n    // Calculate the correct maxFontSize manually\n    var fontSize = buildCommon.sizingMultiplier[group.value.size];\n    span.maxFontSize = fontSize * options.style.sizeMultiplier;\n\n    return span;\n};\n\ngroupTypes.styling = function(group, options, prev) {\n    // Style changes are handled in the TeXbook on pg. 442, Rule 3.\n\n    // Figure out what style we're changing to.\n    var style = {\n        \"display\": Style.DISPLAY,\n        \"text\": Style.TEXT,\n        \"script\": Style.SCRIPT,\n        \"scriptscript\": Style.SCRIPTSCRIPT,\n    };\n\n    var newStyle = style[group.value.style];\n\n    // Build the inner expression in the new style.\n    var inner = buildExpression(\n        group.value.value, options.withStyle(newStyle), prev);\n\n    return makeSpan([options.style.reset(), newStyle.cls()], inner);\n};\n\ngroupTypes.font = function(group, options, prev) {\n    var font = group.value.font;\n    return buildGroup(group.value.body, options.withFont(font), prev);\n};\n\ngroupTypes.delimsizing = function(group, options, prev) {\n    var delim = group.value.value;\n\n    if (delim === \".\") {\n        // Empty delimiters still count as elements, even though they don't\n        // show anything.\n        return makeSpan([groupToType[group.value.delimType]]);\n    }\n\n    // Use delimiter.sizedDelim to generate the delimiter.\n    return makeSpan(\n        [groupToType[group.value.delimType]],\n        [delimiter.sizedDelim(\n            delim, group.value.size, options, group.mode)]);\n};\n\ngroupTypes.leftright = function(group, options, prev) {\n    // Build the inner expression\n    var inner = buildExpression(group.value.body, options.reset());\n\n    var innerHeight = 0;\n    var innerDepth = 0;\n\n    // Calculate its height and depth\n    for (var i = 0; i < inner.length; i++) {\n        innerHeight = Math.max(inner[i].height, innerHeight);\n        innerDepth = Math.max(inner[i].depth, innerDepth);\n    }\n\n    // The size of delimiters is the same, regardless of what style we are\n    // in. Thus, to correctly calculate the size of delimiter we need around\n    // a group, we scale down the inner size based on the size.\n    innerHeight *= options.style.sizeMultiplier;\n    innerDepth *= options.style.sizeMultiplier;\n\n    var leftDelim;\n    if (group.value.left === \".\") {\n        // Empty delimiters in \\left and \\right make null delimiter spaces.\n        leftDelim = makeNullDelimiter(options);\n    } else {\n        // Otherwise, use leftRightDelim to generate the correct sized\n        // delimiter.\n        leftDelim = delimiter.leftRightDelim(\n            group.value.left, innerHeight, innerDepth, options,\n            group.mode);\n    }\n    // Add it to the beginning of the expression\n    inner.unshift(leftDelim);\n\n    var rightDelim;\n    // Same for the right delimiter\n    if (group.value.right === \".\") {\n        rightDelim = makeNullDelimiter(options);\n    } else {\n        rightDelim = delimiter.leftRightDelim(\n            group.value.right, innerHeight, innerDepth, options,\n            group.mode);\n    }\n    // Add it to the end of the expression.\n    inner.push(rightDelim);\n\n    return makeSpan(\n        [\"minner\", options.style.cls()], inner, options.getColor());\n};\n\ngroupTypes.rule = function(group, options, prev) {\n    // Make an empty span for the rule\n    var rule = makeSpan([\"mord\", \"rule\"], [], options.getColor());\n\n    // Calculate the shift, width, and height of the rule, and account for units\n    var shift = 0;\n    if (group.value.shift) {\n        shift = group.value.shift.number;\n        if (group.value.shift.unit === \"ex\") {\n            shift *= fontMetrics.metrics.xHeight;\n        }\n    }\n\n    var width = group.value.width.number;\n    if (group.value.width.unit === \"ex\") {\n        width *= fontMetrics.metrics.xHeight;\n    }\n\n    var height = group.value.height.number;\n    if (group.value.height.unit === \"ex\") {\n        height *= fontMetrics.metrics.xHeight;\n    }\n\n    // The sizes of rules are absolute, so make it larger if we are in a\n    // smaller style.\n    shift /= options.style.sizeMultiplier;\n    width /= options.style.sizeMultiplier;\n    height /= options.style.sizeMultiplier;\n\n    // Style the rule to the right size\n    rule.style.borderRightWidth = width + \"em\";\n    rule.style.borderTopWidth = height + \"em\";\n    rule.style.bottom = shift + \"em\";\n\n    // Record the height and width\n    rule.width = width;\n    rule.height = height + shift;\n    rule.depth = -shift;\n\n    return rule;\n};\n\ngroupTypes.accent = function(group, options, prev) {\n    // Accents are handled in the TeXbook pg. 443, rule 12.\n    var base = group.value.base;\n\n    var supsubGroup;\n    if (group.type === \"supsub\") {\n        // If our base is a character box, and we have superscripts and\n        // subscripts, the supsub will defer to us. In particular, we want\n        // to attach the superscripts and subscripts to the inner body (so\n        // that the position of the superscripts and subscripts won't be\n        // affected by the height of the accent). We accomplish this by\n        // sticking the base of the accent into the base of the supsub, and\n        // rendering that, while keeping track of where the accent is.\n\n        // The supsub group is the group that was passed in\n        var supsub = group;\n        // The real accent group is the base of the supsub group\n        group = supsub.value.base;\n        // The character box is the base of the accent group\n        base = group.value.base;\n        // Stick the character box into the base of the supsub group\n        supsub.value.base = base;\n\n        // Rerender the supsub group with its new base, and store that\n        // result.\n        supsubGroup = buildGroup(\n            supsub, options.reset(), prev);\n    }\n\n    // Build the base group\n    var body = buildGroup(\n        base, options.withStyle(options.style.cramp()));\n\n    // Calculate the skew of the accent. This is based on the line \"If the\n    // nucleus is not a single character, let s = 0; otherwise set s to the\n    // kern amount for the nucleus followed by the \\skewchar of its font.\"\n    // Note that our skew metrics are just the kern between each character\n    // and the skewchar.\n    var skew;\n    if (isCharacterBox(base)) {\n        // If the base is a character box, then we want the skew of the\n        // innermost character. To do that, we find the innermost character:\n        var baseChar = getBaseElem(base);\n        // Then, we render its group to get the symbol inside it\n        var baseGroup = buildGroup(\n            baseChar, options.withStyle(options.style.cramp()));\n        // Finally, we pull the skew off of the symbol.\n        skew = baseGroup.skew;\n        // Note that we now throw away baseGroup, because the layers we\n        // removed with getBaseElem might contain things like \\color which\n        // we can't get rid of.\n        // TODO(emily): Find a better way to get the skew\n    } else {\n        skew = 0;\n    }\n\n    // calculate the amount of space between the body and the accent\n    var clearance = Math.min(body.height, fontMetrics.metrics.xHeight);\n\n    // Build the accent\n    var accent = buildCommon.makeSymbol(\n        group.value.accent, \"Main-Regular\", \"math\", options.getColor());\n    // Remove the italic correction of the accent, because it only serves to\n    // shift the accent over to a place we don't want.\n    accent.italic = 0;\n\n    // The \\vec character that the fonts use is a combining character, and\n    // thus shows up much too far to the left. To account for this, we add a\n    // specific class which shifts the accent over to where we want it.\n    // TODO(emily): Fix this in a better way, like by changing the font\n    var vecClass = group.value.accent === \"\\\\vec\" ? \"accent-vec\" : null;\n\n    var accentBody = makeSpan([\"accent-body\", vecClass], [\n        makeSpan([], [accent])]);\n\n    accentBody = buildCommon.makeVList([\n        {type: \"elem\", elem: body},\n        {type: \"kern\", size: -clearance},\n        {type: \"elem\", elem: accentBody},\n    ], \"firstBaseline\", null, options);\n\n    // Shift the accent over by the skew. Note we shift by twice the skew\n    // because we are centering the accent, so by adding 2*skew to the left,\n    // we shift it to the right by 1*skew.\n    accentBody.children[1].style.marginLeft = 2 * skew + \"em\";\n\n    var accentWrap = makeSpan([\"mord\", \"accent\"], [accentBody]);\n\n    if (supsubGroup) {\n        // Here, we replace the \"base\" child of the supsub with our newly\n        // generated accent.\n        supsubGroup.children[0] = accentWrap;\n\n        // Since we don't rerun the height calculation after replacing the\n        // accent, we manually recalculate height.\n        supsubGroup.height = Math.max(accentWrap.height, supsubGroup.height);\n\n        // Accents should always be ords, even when their innards are not.\n        supsubGroup.classes[0] = \"mord\";\n\n        return supsubGroup;\n    } else {\n        return accentWrap;\n    }\n};\n\ngroupTypes.phantom = function(group, options, prev) {\n    var elements = buildExpression(\n        group.value.value,\n        options.withPhantom(),\n        prev\n    );\n\n    // \\phantom isn't supposed to affect the elements it contains.\n    // See \"color\" for more details.\n    return new buildCommon.makeFragment(elements);\n};\n\n/**\n * buildGroup is the function that takes a group and calls the correct groupType\n * function for it. It also handles the interaction of size and style changes\n * between parents and children.\n */\nvar buildGroup = function(group, options, prev) {\n    if (!group) {\n        return makeSpan();\n    }\n\n    if (groupTypes[group.type]) {\n        // Call the groupTypes function\n        var groupNode = groupTypes[group.type](group, options, prev);\n        var multiplier;\n\n        // If the style changed between the parent and the current group,\n        // account for the size difference\n        if (options.style !== options.parentStyle) {\n            multiplier = options.style.sizeMultiplier /\n                    options.parentStyle.sizeMultiplier;\n\n            groupNode.height *= multiplier;\n            groupNode.depth *= multiplier;\n        }\n\n        // If the size changed between the parent and the current group, account\n        // for that size difference.\n        if (options.size !== options.parentSize) {\n            multiplier = buildCommon.sizingMultiplier[options.size] /\n                    buildCommon.sizingMultiplier[options.parentSize];\n\n            groupNode.height *= multiplier;\n            groupNode.depth *= multiplier;\n        }\n\n        return groupNode;\n    } else {\n        throw new ParseError(\n            \"Got group of unknown type: '\" + group.type + \"'\");\n    }\n};\n\n/**\n * Take an entire parse tree, and build it into an appropriate set of HTML\n * nodes.\n */\nvar buildHTML = function(tree, options) {\n    // buildExpression is destructive, so we need to make a clone\n    // of the incoming tree so that it isn't accidentally changed\n    tree = JSON.parse(JSON.stringify(tree));\n\n    // Build the expression contained in the tree\n    var expression = buildExpression(tree, options);\n    var body = makeSpan([\"base\", options.style.cls()], expression);\n\n    // Add struts, which ensure that the top of the HTML element falls at the\n    // height of the expression, and the bottom of the HTML element falls at the\n    // depth of the expression.\n    var topStrut = makeSpan([\"strut\"]);\n    var bottomStrut = makeSpan([\"strut\", \"bottom\"]);\n\n    topStrut.style.height = body.height + \"em\";\n    bottomStrut.style.height = (body.height + body.depth) + \"em\";\n    // We'd like to use `vertical-align: top` but in IE 9 this lowers the\n    // baseline of the box to the bottom of this strut (instead staying in the\n    // normal place) so we use an absolute value for vertical-align instead\n    bottomStrut.style.verticalAlign = -body.depth + \"em\";\n\n    // Wrap the struts and body together\n    var htmlNode = makeSpan([\"katex-html\"], [topStrut, bottomStrut, body]);\n\n    htmlNode.setAttribute(\"aria-hidden\", \"true\");\n\n    return htmlNode;\n};\n\nmodule.exports = buildHTML;\n","/**\n * These objects store data about MathML nodes. This is the MathML equivalent\n * of the types in domTree.js. Since MathML handles its own rendering, and\n * since we're mainly using MathML to improve accessibility, we don't manage\n * any of the styling state that the plain DOM nodes do.\n *\n * The `toNode` and `toMarkup` functions work simlarly to how they do in\n * domTree.js, creating namespaced DOM nodes and HTML text markup respectively.\n */\n\nvar utils = require(\"./utils\");\n\n/**\n * This node represents a general purpose MathML node of any type. The\n * constructor requires the type of node to create (for example, `\"mo\"` or\n * `\"mspace\"`, corresponding to `<mo>` and `<mspace>` tags).\n */\nfunction MathNode(type, children) {\n    this.type = type;\n    this.attributes = {};\n    this.children = children || [];\n}\n\n/**\n * Sets an attribute on a MathML node. MathML depends on attributes to convey a\n * semantic content, so this is used heavily.\n */\nMathNode.prototype.setAttribute = function(name, value) {\n    this.attributes[name] = value;\n};\n\n/**\n * Converts the math node into a MathML-namespaced DOM element.\n */\nMathNode.prototype.toNode = function() {\n    var node = document.createElementNS(\n        \"http://www.w3.org/1998/Math/MathML\", this.type);\n\n    for (var attr in this.attributes) {\n        if (Object.prototype.hasOwnProperty.call(this.attributes, attr)) {\n            node.setAttribute(attr, this.attributes[attr]);\n        }\n    }\n\n    for (var i = 0; i < this.children.length; i++) {\n        node.appendChild(this.children[i].toNode());\n    }\n\n    return node;\n};\n\n/**\n * Converts the math node into an HTML markup string.\n */\nMathNode.prototype.toMarkup = function() {\n    var markup = \"<\" + this.type;\n\n    // Add the attributes\n    for (var attr in this.attributes) {\n        if (Object.prototype.hasOwnProperty.call(this.attributes, attr)) {\n            markup += \" \" + attr + \"=\\\"\";\n            markup += utils.escape(this.attributes[attr]);\n            markup += \"\\\"\";\n        }\n    }\n\n    markup += \">\";\n\n    for (var i = 0; i < this.children.length; i++) {\n        markup += this.children[i].toMarkup();\n    }\n\n    markup += \"</\" + this.type + \">\";\n\n    return markup;\n};\n\n/**\n * This node represents a piece of text.\n */\nfunction TextNode(text) {\n    this.text = text;\n}\n\n/**\n * Converts the text node into a DOM text node.\n */\nTextNode.prototype.toNode = function() {\n    return document.createTextNode(this.text);\n};\n\n/**\n * Converts the text node into HTML markup (which is just the text itself).\n */\nTextNode.prototype.toMarkup = function() {\n    return utils.escape(this.text);\n};\n\nmodule.exports = {\n    MathNode: MathNode,\n    TextNode: TextNode,\n};\n","/**\n * This file converts a parse tree into a cooresponding MathML tree. The main\n * entry point is the `buildMathML` function, which takes a parse tree from the\n * parser.\n */\n\nvar buildCommon = require(\"./buildCommon\");\nvar fontMetrics = require(\"./fontMetrics\");\nvar mathMLTree = require(\"./mathMLTree\");\nvar ParseError = require(\"./ParseError\");\nvar symbols = require(\"./symbols\");\nvar utils = require(\"./utils\");\n\nvar makeSpan = buildCommon.makeSpan;\nvar fontMap = buildCommon.fontMap;\n\n/**\n * Takes a symbol and converts it into a MathML text node after performing\n * optional replacement from symbols.js.\n */\nvar makeText = function(text, mode) {\n    if (symbols[mode][text] && symbols[mode][text].replace) {\n        text = symbols[mode][text].replace;\n    }\n\n    return new mathMLTree.TextNode(text);\n};\n\n/**\n * Returns the math variant as a string or null if none is required.\n */\nvar getVariant = function(group, options) {\n    var font = options.font;\n    if (!font) {\n        return null;\n    }\n\n    var mode = group.mode;\n    if (font === \"mathit\") {\n        return \"italic\";\n    }\n\n    var value = group.value;\n    if (utils.contains([\"\\\\imath\", \"\\\\jmath\"], value)) {\n        return null;\n    }\n\n    if (symbols[mode][value] && symbols[mode][value].replace) {\n        value = symbols[mode][value].replace;\n    }\n\n    var fontName = fontMap[font].fontName;\n    if (fontMetrics.getCharacterMetrics(value, fontName)) {\n        return fontMap[options.font].variant;\n    }\n\n    return null;\n};\n\n/**\n * Functions for handling the different types of groups found in the parse\n * tree. Each function should take a parse group and return a MathML node.\n */\nvar groupTypes = {};\n\ngroupTypes.mathord = function(group, options) {\n    var node = new mathMLTree.MathNode(\n        \"mi\",\n        [makeText(group.value, group.mode)]);\n\n    var variant = getVariant(group, options);\n    if (variant) {\n        node.setAttribute(\"mathvariant\", variant);\n    }\n    return node;\n};\n\ngroupTypes.textord = function(group, options) {\n    var text = makeText(group.value, group.mode);\n\n    var variant = getVariant(group, options) || \"normal\";\n\n    var node;\n    if (/[0-9]/.test(group.value)) {\n        // TODO(kevinb) merge adjacent <mn> nodes\n        // do it as a post processing step\n        node = new mathMLTree.MathNode(\"mn\", [text]);\n        if (options.font) {\n            node.setAttribute(\"mathvariant\", variant);\n        }\n    } else {\n        node = new mathMLTree.MathNode(\"mi\", [text]);\n        node.setAttribute(\"mathvariant\", variant);\n    }\n\n    return node;\n};\n\ngroupTypes.bin = function(group) {\n    var node = new mathMLTree.MathNode(\n        \"mo\", [makeText(group.value, group.mode)]);\n\n    return node;\n};\n\ngroupTypes.rel = function(group) {\n    var node = new mathMLTree.MathNode(\n        \"mo\", [makeText(group.value, group.mode)]);\n\n    return node;\n};\n\ngroupTypes.open = function(group) {\n    var node = new mathMLTree.MathNode(\n        \"mo\", [makeText(group.value, group.mode)]);\n\n    return node;\n};\n\ngroupTypes.close = function(group) {\n    var node = new mathMLTree.MathNode(\n        \"mo\", [makeText(group.value, group.mode)]);\n\n    return node;\n};\n\ngroupTypes.inner = function(group) {\n    var node = new mathMLTree.MathNode(\n        \"mo\", [makeText(group.value, group.mode)]);\n\n    return node;\n};\n\ngroupTypes.punct = function(group) {\n    var node = new mathMLTree.MathNode(\n        \"mo\", [makeText(group.value, group.mode)]);\n\n    node.setAttribute(\"separator\", \"true\");\n\n    return node;\n};\n\ngroupTypes.ordgroup = function(group, options) {\n    var inner = buildExpression(group.value, options);\n\n    var node = new mathMLTree.MathNode(\"mrow\", inner);\n\n    return node;\n};\n\ngroupTypes.text = function(group, options) {\n    var inner = buildExpression(group.value.body, options);\n\n    var node = new mathMLTree.MathNode(\"mtext\", inner);\n\n    return node;\n};\n\ngroupTypes.color = function(group, options) {\n    var inner = buildExpression(group.value.value, options);\n\n    var node = new mathMLTree.MathNode(\"mstyle\", inner);\n\n    node.setAttribute(\"mathcolor\", group.value.color);\n\n    return node;\n};\n\ngroupTypes.supsub = function(group, options) {\n    var children = [buildGroup(group.value.base, options)];\n\n    if (group.value.sub) {\n        children.push(buildGroup(group.value.sub, options));\n    }\n\n    if (group.value.sup) {\n        children.push(buildGroup(group.value.sup, options));\n    }\n\n    var nodeType;\n    if (!group.value.sub) {\n        nodeType = \"msup\";\n    } else if (!group.value.sup) {\n        nodeType = \"msub\";\n    } else {\n        nodeType = \"msubsup\";\n    }\n\n    var node = new mathMLTree.MathNode(nodeType, children);\n\n    return node;\n};\n\ngroupTypes.genfrac = function(group, options) {\n    var node = new mathMLTree.MathNode(\n        \"mfrac\",\n        [buildGroup(group.value.numer, options),\n         buildGroup(group.value.denom, options)]);\n\n    if (!group.value.hasBarLine) {\n        node.setAttribute(\"linethickness\", \"0px\");\n    }\n\n    if (group.value.leftDelim != null || group.value.rightDelim != null) {\n        var withDelims = [];\n\n        if (group.value.leftDelim != null) {\n            var leftOp = new mathMLTree.MathNode(\n                \"mo\", [new mathMLTree.TextNode(group.value.leftDelim)]);\n\n            leftOp.setAttribute(\"fence\", \"true\");\n\n            withDelims.push(leftOp);\n        }\n\n        withDelims.push(node);\n\n        if (group.value.rightDelim != null) {\n            var rightOp = new mathMLTree.MathNode(\n                \"mo\", [new mathMLTree.TextNode(group.value.rightDelim)]);\n\n            rightOp.setAttribute(\"fence\", \"true\");\n\n            withDelims.push(rightOp);\n        }\n\n        var outerNode = new mathMLTree.MathNode(\"mrow\", withDelims);\n\n        return outerNode;\n    }\n\n    return node;\n};\n\ngroupTypes.array = function(group, options) {\n    return new mathMLTree.MathNode(\n        \"mtable\", group.value.body.map(function(row) {\n            return new mathMLTree.MathNode(\n                \"mtr\", row.map(function(cell) {\n                    return new mathMLTree.MathNode(\n                        \"mtd\", [buildGroup(cell, options)]);\n                }));\n        }));\n};\n\ngroupTypes.sqrt = function(group, options) {\n    var node;\n    if (group.value.index) {\n        node = new mathMLTree.MathNode(\n            \"mroot\", [\n                buildGroup(group.value.body, options),\n                buildGroup(group.value.index, options),\n            ]);\n    } else {\n        node = new mathMLTree.MathNode(\n            \"msqrt\", [buildGroup(group.value.body, options)]);\n    }\n\n    return node;\n};\n\ngroupTypes.leftright = function(group, options) {\n    var inner = buildExpression(group.value.body, options);\n\n    if (group.value.left !== \".\") {\n        var leftNode = new mathMLTree.MathNode(\n            \"mo\", [makeText(group.value.left, group.mode)]);\n\n        leftNode.setAttribute(\"fence\", \"true\");\n\n        inner.unshift(leftNode);\n    }\n\n    if (group.value.right !== \".\") {\n        var rightNode = new mathMLTree.MathNode(\n            \"mo\", [makeText(group.value.right, group.mode)]);\n\n        rightNode.setAttribute(\"fence\", \"true\");\n\n        inner.push(rightNode);\n    }\n\n    var outerNode = new mathMLTree.MathNode(\"mrow\", inner);\n\n    return outerNode;\n};\n\ngroupTypes.accent = function(group, options) {\n    var accentNode = new mathMLTree.MathNode(\n        \"mo\", [makeText(group.value.accent, group.mode)]);\n\n    var node = new mathMLTree.MathNode(\n        \"mover\",\n        [buildGroup(group.value.base, options),\n         accentNode]);\n\n    node.setAttribute(\"accent\", \"true\");\n\n    return node;\n};\n\ngroupTypes.spacing = function(group) {\n    var node;\n\n    if (group.value === \"\\\\ \" || group.value === \"\\\\space\" ||\n        group.value === \" \" || group.value === \"~\") {\n        node = new mathMLTree.MathNode(\n            \"mtext\", [new mathMLTree.TextNode(\"\\u00a0\")]);\n    } else {\n        node = new mathMLTree.MathNode(\"mspace\");\n\n        node.setAttribute(\n            \"width\", buildCommon.spacingFunctions[group.value].size);\n    }\n\n    return node;\n};\n\ngroupTypes.op = function(group) {\n    var node;\n\n    // TODO(emily): handle big operators using the `largeop` attribute\n\n    if (group.value.symbol) {\n        // This is a symbol. Just add the symbol.\n        node = new mathMLTree.MathNode(\n            \"mo\", [makeText(group.value.body, group.mode)]);\n    } else {\n        // This is a text operator. Add all of the characters from the\n        // operator's name.\n        // TODO(emily): Add a space in the middle of some of these\n        // operators, like \\limsup.\n        node = new mathMLTree.MathNode(\n            \"mi\", [new mathMLTree.TextNode(group.value.body.slice(1))]);\n    }\n\n    return node;\n};\n\ngroupTypes.katex = function(group) {\n    var node = new mathMLTree.MathNode(\n        \"mtext\", [new mathMLTree.TextNode(\"KaTeX\")]);\n\n    return node;\n};\n\ngroupTypes.font = function(group, options) {\n    var font = group.value.font;\n    return buildGroup(group.value.body, options.withFont(font));\n};\n\ngroupTypes.delimsizing = function(group) {\n    var children = [];\n\n    if (group.value.value !== \".\") {\n        children.push(makeText(group.value.value, group.mode));\n    }\n\n    var node = new mathMLTree.MathNode(\"mo\", children);\n\n    if (group.value.delimType === \"open\" ||\n        group.value.delimType === \"close\") {\n        // Only some of the delimsizing functions act as fences, and they\n        // return \"open\" or \"close\" delimTypes.\n        node.setAttribute(\"fence\", \"true\");\n    } else {\n        // Explicitly disable fencing if it's not a fence, to override the\n        // defaults.\n        node.setAttribute(\"fence\", \"false\");\n    }\n\n    return node;\n};\n\ngroupTypes.styling = function(group, options) {\n    var inner = buildExpression(group.value.value, options);\n\n    var node = new mathMLTree.MathNode(\"mstyle\", inner);\n\n    var styleAttributes = {\n        \"display\": [\"0\", \"true\"],\n        \"text\": [\"0\", \"false\"],\n        \"script\": [\"1\", \"false\"],\n        \"scriptscript\": [\"2\", \"false\"],\n    };\n\n    var attr = styleAttributes[group.value.style];\n\n    node.setAttribute(\"scriptlevel\", attr[0]);\n    node.setAttribute(\"displaystyle\", attr[1]);\n\n    return node;\n};\n\ngroupTypes.sizing = function(group, options) {\n    var inner = buildExpression(group.value.value, options);\n\n    var node = new mathMLTree.MathNode(\"mstyle\", inner);\n\n    // TODO(emily): This doesn't produce the correct size for nested size\n    // changes, because we don't keep state of what style we're currently\n    // in, so we can't reset the size to normal before changing it.  Now\n    // that we're passing an options parameter we should be able to fix\n    // this.\n    node.setAttribute(\n        \"mathsize\", buildCommon.sizingMultiplier[group.value.size] + \"em\");\n\n    return node;\n};\n\ngroupTypes.overline = function(group, options) {\n    var operator = new mathMLTree.MathNode(\n        \"mo\", [new mathMLTree.TextNode(\"\\u203e\")]);\n    operator.setAttribute(\"stretchy\", \"true\");\n\n    var node = new mathMLTree.MathNode(\n        \"mover\",\n        [buildGroup(group.value.body, options),\n         operator]);\n    node.setAttribute(\"accent\", \"true\");\n\n    return node;\n};\n\ngroupTypes.underline = function(group, options) {\n    var operator = new mathMLTree.MathNode(\n        \"mo\", [new mathMLTree.TextNode(\"\\u203e\")]);\n    operator.setAttribute(\"stretchy\", \"true\");\n\n    var node = new mathMLTree.MathNode(\n        \"munder\",\n        [buildGroup(group.value.body, options),\n         operator]);\n    node.setAttribute(\"accentunder\", \"true\");\n\n    return node;\n};\n\ngroupTypes.rule = function(group) {\n    // TODO(emily): Figure out if there's an actual way to draw black boxes\n    // in MathML.\n    var node = new mathMLTree.MathNode(\"mrow\");\n\n    return node;\n};\n\ngroupTypes.llap = function(group, options) {\n    var node = new mathMLTree.MathNode(\n        \"mpadded\", [buildGroup(group.value.body, options)]);\n\n    node.setAttribute(\"lspace\", \"-1width\");\n    node.setAttribute(\"width\", \"0px\");\n\n    return node;\n};\n\ngroupTypes.rlap = function(group, options) {\n    var node = new mathMLTree.MathNode(\n        \"mpadded\", [buildGroup(group.value.body, options)]);\n\n    node.setAttribute(\"width\", \"0px\");\n\n    return node;\n};\n\ngroupTypes.phantom = function(group, options, prev) {\n    var inner = buildExpression(group.value.value, options);\n    return new mathMLTree.MathNode(\"mphantom\", inner);\n};\n\n/**\n * Takes a list of nodes, builds them, and returns a list of the generated\n * MathML nodes. A little simpler than the HTML version because we don't do any\n * previous-node handling.\n */\nvar buildExpression = function(expression, options) {\n    var groups = [];\n    for (var i = 0; i < expression.length; i++) {\n        var group = expression[i];\n        groups.push(buildGroup(group, options));\n    }\n    return groups;\n};\n\n/**\n * Takes a group from the parser and calls the appropriate groupTypes function\n * on it to produce a MathML node.\n */\nvar buildGroup = function(group, options) {\n    if (!group) {\n        return new mathMLTree.MathNode(\"mrow\");\n    }\n\n    if (groupTypes[group.type]) {\n        // Call the groupTypes function\n        return groupTypes[group.type](group, options);\n    } else {\n        throw new ParseError(\n            \"Got group of unknown type: '\" + group.type + \"'\");\n    }\n};\n\n/**\n * Takes a full parse tree and settings and builds a MathML representation of\n * it. In particular, we put the elements from building the parse tree into a\n * <semantics> tag so we can also include that TeX source as an annotation.\n *\n * Note that we actually return a domTree element with a `<math>` inside it so\n * we can do appropriate styling.\n */\nvar buildMathML = function(tree, texExpression, options) {\n    var expression = buildExpression(tree, options);\n\n    // Wrap up the expression in an mrow so it is presented in the semantics\n    // tag correctly.\n    var wrapper = new mathMLTree.MathNode(\"mrow\", expression);\n\n    // Build a TeX annotation of the source\n    var annotation = new mathMLTree.MathNode(\n        \"annotation\", [new mathMLTree.TextNode(texExpression)]);\n\n    annotation.setAttribute(\"encoding\", \"application/x-tex\");\n\n    var semantics = new mathMLTree.MathNode(\n        \"semantics\", [wrapper, annotation]);\n\n    var math = new mathMLTree.MathNode(\"math\", [semantics]);\n\n    // You can't style <math> nodes, so we wrap the node in a span.\n    return makeSpan([\"katex-mathml\"], [math]);\n};\n\nmodule.exports = buildMathML;\n","/**\n * This file contains information about the options that the Parser carries\n * around with it while parsing. Data is held in an `Options` object, and when\n * recursing, a new `Options` object can be created with the `.with*` and\n * `.reset` functions.\n */\n\n/**\n * This is the main options class. It contains the style, size, color, and font\n * of the current parse level. It also contains the style and size of the parent\n * parse level, so size changes can be handled efficiently.\n *\n * Each of the `.with*` and `.reset` functions passes its current style and size\n * as the parentStyle and parentSize of the new options class, so parent\n * handling is taken care of automatically.\n */\nfunction Options(data) {\n    this.style = data.style;\n    this.color = data.color;\n    this.size = data.size;\n    this.phantom = data.phantom;\n    this.font = data.font;\n\n    if (data.parentStyle === undefined) {\n        this.parentStyle = data.style;\n    } else {\n        this.parentStyle = data.parentStyle;\n    }\n\n    if (data.parentSize === undefined) {\n        this.parentSize = data.size;\n    } else {\n        this.parentSize = data.parentSize;\n    }\n}\n\n/**\n * Returns a new options object with the same properties as \"this\".  Properties\n * from \"extension\" will be copied to the new options object.\n */\nOptions.prototype.extend = function(extension) {\n    var data = {\n        style: this.style,\n        size: this.size,\n        color: this.color,\n        parentStyle: this.style,\n        parentSize: this.size,\n        phantom: this.phantom,\n        font: this.font,\n    };\n\n    for (var key in extension) {\n        if (extension.hasOwnProperty(key)) {\n            data[key] = extension[key];\n        }\n    }\n\n    return new Options(data);\n};\n\n/**\n * Create a new options object with the given style.\n */\nOptions.prototype.withStyle = function(style) {\n    return this.extend({\n        style: style,\n    });\n};\n\n/**\n * Create a new options object with the given size.\n */\nOptions.prototype.withSize = function(size) {\n    return this.extend({\n        size: size,\n    });\n};\n\n/**\n * Create a new options object with the given color.\n */\nOptions.prototype.withColor = function(color) {\n    return this.extend({\n        color: color,\n    });\n};\n\n/**\n * Create a new options object with \"phantom\" set to true.\n */\nOptions.prototype.withPhantom = function() {\n    return this.extend({\n        phantom: true,\n    });\n};\n\n/**\n * Create a new options objects with the give font.\n */\nOptions.prototype.withFont = function(font) {\n    return this.extend({\n        font: font,\n    });\n};\n\n/**\n * Create a new options object with the same style, size, and color. This is\n * used so that parent style and size changes are handled correctly.\n */\nOptions.prototype.reset = function() {\n    return this.extend({});\n};\n\n/**\n * A map of color names to CSS colors.\n * TODO(emily): Remove this when we have real macros\n */\nvar colorMap = {\n    \"katex-blue\": \"#6495ed\",\n    \"katex-orange\": \"#ffa500\",\n    \"katex-pink\": \"#ff00af\",\n    \"katex-red\": \"#df0030\",\n    \"katex-green\": \"#28ae7b\",\n    \"katex-gray\": \"gray\",\n    \"katex-purple\": \"#9d38bd\",\n    \"katex-blueA\": \"#c7e9f1\",\n    \"katex-blueB\": \"#9cdceb\",\n    \"katex-blueC\": \"#58c4dd\",\n    \"katex-blueD\": \"#29abca\",\n    \"katex-blueE\": \"#1c758a\",\n    \"katex-tealA\": \"#acead7\",\n    \"katex-tealB\": \"#76ddc0\",\n    \"katex-tealC\": \"#5cd0b3\",\n    \"katex-tealD\": \"#55c1a7\",\n    \"katex-tealE\": \"#49a88f\",\n    \"katex-greenA\": \"#c9e2ae\",\n    \"katex-greenB\": \"#a6cf8c\",\n    \"katex-greenC\": \"#83c167\",\n    \"katex-greenD\": \"#77b05d\",\n    \"katex-greenE\": \"#699c52\",\n    \"katex-goldA\": \"#f7c797\",\n    \"katex-goldB\": \"#f9b775\",\n    \"katex-goldC\": \"#f0ac5f\",\n    \"katex-goldD\": \"#e1a158\",\n    \"katex-goldE\": \"#c78d46\",\n    \"katex-redA\": \"#f7a1a3\",\n    \"katex-redB\": \"#ff8080\",\n    \"katex-redC\": \"#fc6255\",\n    \"katex-redD\": \"#e65a4c\",\n    \"katex-redE\": \"#cf5044\",\n    \"katex-maroonA\": \"#ecabc1\",\n    \"katex-maroonB\": \"#ec92ab\",\n    \"katex-maroonC\": \"#c55f73\",\n    \"katex-maroonD\": \"#a24d61\",\n    \"katex-maroonE\": \"#94424f\",\n    \"katex-purpleA\": \"#caa3e8\",\n    \"katex-purpleB\": \"#b189c6\",\n    \"katex-purpleC\": \"#9a72ac\",\n    \"katex-purpleD\": \"#715582\",\n    \"katex-purpleE\": \"#644172\",\n    \"katex-mintA\": \"#f5f9e8\",\n    \"katex-mintB\": \"#edf2df\",\n    \"katex-mintC\": \"#e0e5cc\",\n    \"katex-grayA\": \"#fdfdfd\",\n    \"katex-grayB\": \"#f7f7f7\",\n    \"katex-grayC\": \"#eeeeee\",\n    \"katex-grayD\": \"#dddddd\",\n    \"katex-grayE\": \"#cccccc\",\n    \"katex-grayF\": \"#aaaaaa\",\n    \"katex-grayG\": \"#999999\",\n    \"katex-grayH\": \"#555555\",\n    \"katex-grayI\": \"#333333\",\n    \"katex-kaBlue\": \"#314453\",\n    \"katex-kaGreen\": \"#639b24\",\n};\n\n/**\n * Gets the CSS color of the current options object, accounting for the\n * `colorMap`.\n */\nOptions.prototype.getColor = function() {\n    if (this.phantom) {\n        return \"transparent\";\n    } else {\n        return colorMap[this.color] || this.color;\n    }\n};\n\nmodule.exports = Options;\n","var buildHTML = require(\"./buildHTML\");\nvar buildMathML = require(\"./buildMathML\");\nvar buildCommon = require(\"./buildCommon\");\nvar Options = require(\"./Options\");\nvar Settings = require(\"./Settings\");\nvar Style = require(\"./Style\");\n\nvar makeSpan = buildCommon.makeSpan;\n\nvar buildTree = function(tree, expression, settings) {\n    settings = settings || new Settings({});\n\n    var startStyle = Style.TEXT;\n    if (settings.displayMode) {\n        startStyle = Style.DISPLAY;\n    }\n\n    // Setup the default options\n    var options = new Options({\n        style: startStyle,\n        size: \"size5\",\n    });\n\n    // `buildHTML` sometimes messes with the parse tree (like turning bins ->\n    // ords), so we build the MathML version first.\n    var mathMLNode = buildMathML(tree, expression, options);\n    var htmlNode = buildHTML(tree, options);\n\n    var katexNode = makeSpan([\"katex\"], [\n        mathMLNode, htmlNode,\n    ]);\n\n    if (settings.displayMode) {\n        return makeSpan([\"katex-display\"], [katexNode]);\n    } else {\n        return katexNode;\n    }\n};\n\nmodule.exports = buildTree;\n","var utils = require(\"./utils\");\nvar ParseError = require(\"./ParseError\");\n\n/* This file contains a list of functions that we parse, identified by\n * the calls to defineFunction.\n *\n * The first argument to defineFunction is a single name or a list of names.\n * All functions named in such a list will share a single implementation.\n *\n * Each declared function can have associated properties, which\n * include the following:\n *\n *  - numArgs: The number of arguments the function takes.\n *             If this is the only property, it can be passed as a number\n *             instead of an element of a properties object.\n *  - argTypes: (optional) An array corresponding to each argument of the\n *              function, giving the type of argument that should be parsed. Its\n *              length should be equal to `numArgs + numOptionalArgs`. Valid\n *              types:\n *               - \"size\": A size-like thing, such as \"1em\" or \"5ex\"\n *               - \"color\": An html color, like \"#abc\" or \"blue\"\n *               - \"original\": The same type as the environment that the\n *                             function being parsed is in (e.g. used for the\n *                             bodies of functions like \\color where the first\n *                             argument is special and the second argument is\n *                             parsed normally)\n *              Other possible types (probably shouldn't be used)\n *               - \"text\": Text-like (e.g. \\text)\n *               - \"math\": Normal math\n *              If undefined, this will be treated as an appropriate length\n *              array of \"original\" strings\n *  - greediness: (optional) The greediness of the function to use ungrouped\n *                arguments.\n *\n *                E.g. if you have an expression\n *                  \\sqrt \\frac 1 2\n *                since \\frac has greediness=2 vs \\sqrt's greediness=1, \\frac\n *                will use the two arguments '1' and '2' as its two arguments,\n *                then that whole function will be used as the argument to\n *                \\sqrt. On the other hand, the expressions\n *                  \\frac \\frac 1 2 3\n *                and\n *                  \\frac \\sqrt 1 2\n *                will fail because \\frac and \\frac have equal greediness\n *                and \\sqrt has a lower greediness than \\frac respectively. To\n *                make these parse, we would have to change them to:\n *                  \\frac {\\frac 1 2} 3\n *                and\n *                  \\frac {\\sqrt 1} 2\n *\n *                The default value is `1`\n *  - allowedInText: (optional) Whether or not the function is allowed inside\n *                   text mode (default false)\n *  - numOptionalArgs: (optional) The number of optional arguments the function\n *                     should parse. If the optional arguments aren't found,\n *                     `null` will be passed to the handler in their place.\n *                     (default 0)\n *\n * The last argument is that implementation, the handler for the function(s).\n * It is called to handle these functions and their arguments.\n * It receives two arguments:\n *  - context contains information and references provided by the parser\n *  - args is an array of arguments obtained from TeX input\n * The context contains the following properties:\n *  - funcName: the text (i.e. name) of the function, including \\\n *  - parser: the parser object\n *  - lexer: the lexer object\n *  - positions: the positions in the overall string of the function\n *               and the arguments.\n * The latter three should only be used to produce error messages.\n *\n * The function should return an object with the following keys:\n *  - type: The type of element that this is. This is then used in\n *          buildHTML/buildMathML to determine which function\n *          should be called to build this node into a DOM node\n * Any other data can be added to the object, which will be passed\n * in to the function in buildHTML/buildMathML as `group.value`.\n */\n\nfunction defineFunction(names, props, handler) {\n    if (typeof names === \"string\") {\n        names = [names];\n    }\n    if (typeof props === \"number\") {\n        props = { numArgs: props };\n    }\n    // Set default values of functions\n    var data = {\n        numArgs: props.numArgs,\n        argTypes: props.argTypes,\n        greediness: (props.greediness === undefined) ? 1 : props.greediness,\n        allowedInText: !!props.allowedInText,\n        numOptionalArgs: props.numOptionalArgs || 0,\n        handler: handler,\n    };\n    for (var i = 0; i < names.length; ++i) {\n        module.exports[names[i]] = data;\n    }\n}\n\n// A normal square root\ndefineFunction(\"\\\\sqrt\", {\n    numArgs: 1,\n    numOptionalArgs: 1,\n}, function(context, args) {\n    var index = args[0];\n    var body = args[1];\n    return {\n        type: \"sqrt\",\n        body: body,\n        index: index,\n    };\n});\n\n// Some non-mathy text\ndefineFunction(\"\\\\text\", {\n    numArgs: 1,\n    argTypes: [\"text\"],\n    greediness: 2,\n}, function(context, args) {\n    var body = args[0];\n    // Since the corresponding buildHTML/buildMathML function expects a\n    // list of elements, we normalize for different kinds of arguments\n    // TODO(emily): maybe this should be done somewhere else\n    var inner;\n    if (body.type === \"ordgroup\") {\n        inner = body.value;\n    } else {\n        inner = [body];\n    }\n\n    return {\n        type: \"text\",\n        body: inner,\n    };\n});\n\n// A two-argument custom color\ndefineFunction(\"\\\\color\", {\n    numArgs: 2,\n    allowedInText: true,\n    greediness: 3,\n    argTypes: [\"color\", \"original\"],\n}, function(context, args) {\n    var color = args[0];\n    var body = args[1];\n    // Normalize the different kinds of bodies (see \\text above)\n    var inner;\n    if (body.type === \"ordgroup\") {\n        inner = body.value;\n    } else {\n        inner = [body];\n    }\n\n    return {\n        type: \"color\",\n        color: color.value,\n        value: inner,\n    };\n});\n\n// An overline\ndefineFunction(\"\\\\overline\", {\n    numArgs: 1,\n}, function(context, args) {\n    var body = args[0];\n    return {\n        type: \"overline\",\n        body: body,\n    };\n});\n\n// An underline\ndefineFunction(\"\\\\underline\", {\n    numArgs: 1,\n}, function(context, args) {\n    var body = args[0];\n    return {\n        type: \"underline\",\n        body: body,\n    };\n});\n\n// A box of the width and height\ndefineFunction(\"\\\\rule\", {\n    numArgs: 2,\n    numOptionalArgs: 1,\n    argTypes: [\"size\", \"size\", \"size\"],\n}, function(context, args) {\n    var shift = args[0];\n    var width = args[1];\n    var height = args[2];\n    return {\n        type: \"rule\",\n        shift: shift && shift.value,\n        width: width.value,\n        height: height.value,\n    };\n});\n\n// A KaTeX logo\ndefineFunction(\"\\\\KaTeX\", {\n    numArgs: 0,\n}, function(context) {\n    return {\n        type: \"katex\",\n    };\n});\n\ndefineFunction(\"\\\\phantom\", {\n    numArgs: 1,\n}, function(context, args) {\n    var body = args[0];\n    var inner;\n    if (body.type === \"ordgroup\") {\n        inner = body.value;\n    } else {\n        inner = [body];\n    }\n\n    return {\n        type: \"phantom\",\n        value: inner,\n    };\n});\n\n// Extra data needed for the delimiter handler down below\nvar delimiterSizes = {\n    \"\\\\bigl\" : {type: \"open\",    size: 1},\n    \"\\\\Bigl\" : {type: \"open\",    size: 2},\n    \"\\\\biggl\": {type: \"open\",    size: 3},\n    \"\\\\Biggl\": {type: \"open\",    size: 4},\n    \"\\\\bigr\" : {type: \"close\",   size: 1},\n    \"\\\\Bigr\" : {type: \"close\",   size: 2},\n    \"\\\\biggr\": {type: \"close\",   size: 3},\n    \"\\\\Biggr\": {type: \"close\",   size: 4},\n    \"\\\\bigm\" : {type: \"rel\",     size: 1},\n    \"\\\\Bigm\" : {type: \"rel\",     size: 2},\n    \"\\\\biggm\": {type: \"rel\",     size: 3},\n    \"\\\\Biggm\": {type: \"rel\",     size: 4},\n    \"\\\\big\"  : {type: \"textord\", size: 1},\n    \"\\\\Big\"  : {type: \"textord\", size: 2},\n    \"\\\\bigg\" : {type: \"textord\", size: 3},\n    \"\\\\Bigg\" : {type: \"textord\", size: 4},\n};\n\nvar delimiters = [\n    \"(\", \")\", \"[\", \"\\\\lbrack\", \"]\", \"\\\\rbrack\",\n    \"\\\\{\", \"\\\\lbrace\", \"\\\\}\", \"\\\\rbrace\",\n    \"\\\\lfloor\", \"\\\\rfloor\", \"\\\\lceil\", \"\\\\rceil\",\n    \"<\", \">\", \"\\\\langle\", \"\\\\rangle\", \"\\\\lt\", \"\\\\gt\",\n    \"\\\\lvert\", \"\\\\rvert\", \"\\\\lVert\", \"\\\\rVert\",\n    \"\\\\lgroup\", \"\\\\rgroup\", \"\\\\lmoustache\", \"\\\\rmoustache\",\n    \"/\", \"\\\\backslash\",\n    \"|\", \"\\\\vert\", \"\\\\|\", \"\\\\Vert\",\n    \"\\\\uparrow\", \"\\\\Uparrow\",\n    \"\\\\downarrow\", \"\\\\Downarrow\",\n    \"\\\\updownarrow\", \"\\\\Updownarrow\",\n    \".\",\n];\n\nvar fontAliases = {\n    \"\\\\Bbb\": \"\\\\mathbb\",\n    \"\\\\bold\": \"\\\\mathbf\",\n    \"\\\\frak\": \"\\\\mathfrak\",\n};\n\n// Single-argument color functions\ndefineFunction([\n    \"\\\\blue\", \"\\\\orange\", \"\\\\pink\", \"\\\\red\",\n    \"\\\\green\", \"\\\\gray\", \"\\\\purple\",\n    \"\\\\blueA\", \"\\\\blueB\", \"\\\\blueC\", \"\\\\blueD\", \"\\\\blueE\",\n    \"\\\\tealA\", \"\\\\tealB\", \"\\\\tealC\", \"\\\\tealD\", \"\\\\tealE\",\n    \"\\\\greenA\", \"\\\\greenB\", \"\\\\greenC\", \"\\\\greenD\", \"\\\\greenE\",\n    \"\\\\goldA\", \"\\\\goldB\", \"\\\\goldC\", \"\\\\goldD\", \"\\\\goldE\",\n    \"\\\\redA\", \"\\\\redB\", \"\\\\redC\", \"\\\\redD\", \"\\\\redE\",\n    \"\\\\maroonA\", \"\\\\maroonB\", \"\\\\maroonC\", \"\\\\maroonD\", \"\\\\maroonE\",\n    \"\\\\purpleA\", \"\\\\purpleB\", \"\\\\purpleC\", \"\\\\purpleD\", \"\\\\purpleE\",\n    \"\\\\mintA\", \"\\\\mintB\", \"\\\\mintC\",\n    \"\\\\grayA\", \"\\\\grayB\", \"\\\\grayC\", \"\\\\grayD\", \"\\\\grayE\",\n    \"\\\\grayF\", \"\\\\grayG\", \"\\\\grayH\", \"\\\\grayI\",\n    \"\\\\kaBlue\", \"\\\\kaGreen\",\n], {\n    numArgs: 1,\n    allowedInText: true,\n    greediness: 3,\n}, function(context, args) {\n    var body = args[0];\n    var atoms;\n    if (body.type === \"ordgroup\") {\n        atoms = body.value;\n    } else {\n        atoms = [body];\n    }\n\n    return {\n        type: \"color\",\n        color: \"katex-\" + context.funcName.slice(1),\n        value: atoms,\n    };\n});\n\n// There are 2 flags for operators; whether they produce limits in\n// displaystyle, and whether they are symbols and should grow in\n// displaystyle. These four groups cover the four possible choices.\n\n// No limits, not symbols\ndefineFunction([\n    \"\\\\arcsin\", \"\\\\arccos\", \"\\\\arctan\", \"\\\\arg\", \"\\\\cos\", \"\\\\cosh\",\n    \"\\\\cot\", \"\\\\coth\", \"\\\\csc\", \"\\\\deg\", \"\\\\dim\", \"\\\\exp\", \"\\\\hom\",\n    \"\\\\ker\", \"\\\\lg\", \"\\\\ln\", \"\\\\log\", \"\\\\sec\", \"\\\\sin\", \"\\\\sinh\",\n    \"\\\\tan\", \"\\\\tanh\",\n], {\n    numArgs: 0,\n}, function(context) {\n    return {\n        type: \"op\",\n        limits: false,\n        symbol: false,\n        body: context.funcName,\n    };\n});\n\n// Limits, not symbols\ndefineFunction([\n    \"\\\\det\", \"\\\\gcd\", \"\\\\inf\", \"\\\\lim\", \"\\\\liminf\", \"\\\\limsup\", \"\\\\max\",\n    \"\\\\min\", \"\\\\Pr\", \"\\\\sup\",\n], {\n    numArgs: 0,\n}, function(context) {\n    return {\n        type: \"op\",\n        limits: true,\n        symbol: false,\n        body: context.funcName,\n    };\n});\n\n// No limits, symbols\ndefineFunction([\n    \"\\\\int\", \"\\\\iint\", \"\\\\iiint\", \"\\\\oint\",\n], {\n    numArgs: 0,\n}, function(context) {\n    return {\n        type: \"op\",\n        limits: false,\n        symbol: true,\n        body: context.funcName,\n    };\n});\n\n// Limits, symbols\ndefineFunction([\n    \"\\\\coprod\", \"\\\\bigvee\", \"\\\\bigwedge\", \"\\\\biguplus\", \"\\\\bigcap\",\n    \"\\\\bigcup\", \"\\\\intop\", \"\\\\prod\", \"\\\\sum\", \"\\\\bigotimes\",\n    \"\\\\bigoplus\", \"\\\\bigodot\", \"\\\\bigsqcup\", \"\\\\smallint\",\n], {\n    numArgs: 0,\n}, function(context) {\n    return {\n        type: \"op\",\n        limits: true,\n        symbol: true,\n        body: context.funcName,\n    };\n});\n\n// Fractions\ndefineFunction([\n    \"\\\\dfrac\", \"\\\\frac\", \"\\\\tfrac\",\n    \"\\\\dbinom\", \"\\\\binom\", \"\\\\tbinom\",\n], {\n    numArgs: 2,\n    greediness: 2,\n}, function(context, args) {\n    var numer = args[0];\n    var denom = args[1];\n    var hasBarLine;\n    var leftDelim = null;\n    var rightDelim = null;\n    var size = \"auto\";\n\n    switch (context.funcName) {\n        case \"\\\\dfrac\":\n        case \"\\\\frac\":\n        case \"\\\\tfrac\":\n            hasBarLine = true;\n            break;\n        case \"\\\\dbinom\":\n        case \"\\\\binom\":\n        case \"\\\\tbinom\":\n            hasBarLine = false;\n            leftDelim = \"(\";\n            rightDelim = \")\";\n            break;\n        default:\n            throw new Error(\"Unrecognized genfrac command\");\n    }\n\n    switch (context.funcName) {\n        case \"\\\\dfrac\":\n        case \"\\\\dbinom\":\n            size = \"display\";\n            break;\n        case \"\\\\tfrac\":\n        case \"\\\\tbinom\":\n            size = \"text\";\n            break;\n    }\n\n    return {\n        type: \"genfrac\",\n        numer: numer,\n        denom: denom,\n        hasBarLine: hasBarLine,\n        leftDelim: leftDelim,\n        rightDelim: rightDelim,\n        size: size,\n    };\n});\n\n// Left and right overlap functions\ndefineFunction([\"\\\\llap\", \"\\\\rlap\"], {\n    numArgs: 1,\n    allowedInText: true,\n}, function(context, args) {\n    var body = args[0];\n    return {\n        type: context.funcName.slice(1),\n        body: body,\n    };\n});\n\n// Delimiter functions\ndefineFunction([\n    \"\\\\bigl\", \"\\\\Bigl\", \"\\\\biggl\", \"\\\\Biggl\",\n    \"\\\\bigr\", \"\\\\Bigr\", \"\\\\biggr\", \"\\\\Biggr\",\n    \"\\\\bigm\", \"\\\\Bigm\", \"\\\\biggm\", \"\\\\Biggm\",\n    \"\\\\big\",  \"\\\\Big\",  \"\\\\bigg\",  \"\\\\Bigg\",\n    \"\\\\left\", \"\\\\right\",\n], {\n    numArgs: 1,\n}, function(context, args) {\n    var delim = args[0];\n    if (!utils.contains(delimiters, delim.value)) {\n        throw new ParseError(\n            \"Invalid delimiter: '\" + delim.value + \"' after '\" +\n                context.funcName + \"'\",\n            context.lexer, context.positions[1]);\n    }\n\n    // \\left and \\right are caught somewhere in Parser.js, which is\n    // why this data doesn't match what is in buildHTML.\n    if (context.funcName === \"\\\\left\" || context.funcName === \"\\\\right\") {\n        return {\n            type: \"leftright\",\n            value: delim.value,\n        };\n    } else {\n        return {\n            type: \"delimsizing\",\n            size: delimiterSizes[context.funcName].size,\n            delimType: delimiterSizes[context.funcName].type,\n            value: delim.value,\n        };\n    }\n});\n\n// Sizing functions (handled in Parser.js explicitly, hence no handler)\ndefineFunction([\n    \"\\\\tiny\", \"\\\\scriptsize\", \"\\\\footnotesize\", \"\\\\small\",\n    \"\\\\normalsize\", \"\\\\large\", \"\\\\Large\", \"\\\\LARGE\", \"\\\\huge\", \"\\\\Huge\",\n], 0, null);\n\n// Style changing functions (handled in Parser.js explicitly, hence no\n// handler)\ndefineFunction([\n    \"\\\\displaystyle\", \"\\\\textstyle\", \"\\\\scriptstyle\",\n    \"\\\\scriptscriptstyle\",\n], 0, null);\n\ndefineFunction([\n    // styles\n    \"\\\\mathrm\", \"\\\\mathit\", \"\\\\mathbf\",\n\n    // families\n    \"\\\\mathbb\", \"\\\\mathcal\", \"\\\\mathfrak\", \"\\\\mathscr\", \"\\\\mathsf\",\n    \"\\\\mathtt\",\n\n    // aliases\n    \"\\\\Bbb\", \"\\\\bold\", \"\\\\frak\",\n], {\n    numArgs: 1,\n    greediness: 2,\n}, function(context, args) {\n    var body = args[0];\n    var func = context.funcName;\n    if (func in fontAliases) {\n        func = fontAliases[func];\n    }\n    return {\n        type: \"font\",\n        font: func.slice(1),\n        body: body,\n    };\n});\n\n// Accents\ndefineFunction([\n    \"\\\\acute\", \"\\\\grave\", \"\\\\ddot\", \"\\\\tilde\", \"\\\\bar\", \"\\\\breve\",\n    \"\\\\check\", \"\\\\hat\", \"\\\\vec\", \"\\\\dot\",\n    // We don't support expanding accents yet\n    // \"\\\\widetilde\", \"\\\\widehat\"\n], {\n    numArgs: 1,\n}, function(context, args) {\n    var base = args[0];\n    return {\n        type: \"accent\",\n        accent: context.funcName,\n        base: base,\n    };\n});\n\n// Infix generalized fractions\ndefineFunction([\"\\\\over\", \"\\\\choose\"], {\n    numArgs: 0,\n}, function(context) {\n    var replaceWith;\n    switch (context.funcName) {\n        case \"\\\\over\":\n            replaceWith = \"\\\\frac\";\n            break;\n        case \"\\\\choose\":\n            replaceWith = \"\\\\binom\";\n            break;\n        default:\n            throw new Error(\"Unrecognized infix genfrac command\");\n    }\n    return {\n        type: \"infix\",\n        replaceWith: replaceWith,\n    };\n});\n\n// Row breaks for aligned data\ndefineFunction([\"\\\\\\\\\", \"\\\\cr\"], {\n    numArgs: 0,\n    numOptionalArgs: 1,\n    argTypes: [\"size\"],\n}, function(context, args) {\n    var size = args[0];\n    return {\n        type: \"cr\",\n        size: size,\n    };\n});\n\n// Environment delimiters\ndefineFunction([\"\\\\begin\", \"\\\\end\"], {\n    numArgs: 1,\n    argTypes: [\"text\"],\n}, function(context, args) {\n    var nameGroup = args[0];\n    if (nameGroup.type !== \"ordgroup\") {\n        throw new ParseError(\n            \"Invalid environment name\",\n            context.lexer, context.positions[1]);\n    }\n    var name = \"\";\n    for (var i = 0; i < nameGroup.value.length; ++i) {\n        name += nameGroup.value[i].value;\n    }\n    return {\n        type: \"environment\",\n        name: name,\n        namepos: context.positions[1],\n    };\n});\n","/**\n * The resulting parse tree nodes of the parse tree.\n */\nfunction ParseNode(type, value, mode) {\n    this.type = type;\n    this.value = value;\n    this.mode = mode;\n}\n\nmodule.exports = {\n    ParseNode: ParseNode,\n};\n\n","/* eslint no-constant-condition:0 */\nvar fontMetrics = require(\"./fontMetrics\");\nvar parseData = require(\"./parseData\");\nvar ParseError = require(\"./ParseError\");\n\nvar ParseNode = parseData.ParseNode;\n\n/**\n * Parse the body of the environment, with rows delimited by \\\\ and\n * columns delimited by &, and create a nested list in row-major order\n * with one group per cell.\n */\nfunction parseArray(parser, result) {\n    var row = [];\n    var body = [row];\n    var rowGaps = [];\n    while (true) {\n        var cell = parser.parseExpression(false, null);\n        row.push(new ParseNode(\"ordgroup\", cell, parser.mode));\n        var next = parser.nextToken.text;\n        if (next === \"&\") {\n            parser.consume();\n        } else if (next === \"\\\\end\") {\n            break;\n        } else if (next === \"\\\\\\\\\" || next === \"\\\\cr\") {\n            var cr = parser.parseFunction();\n            rowGaps.push(cr.value.size);\n            row = [];\n            body.push(row);\n        } else {\n            // TODO: Clean up the following hack once #385 got merged\n            var pos = Math.min(parser.pos + 1, parser.lexer._input.length);\n            throw new ParseError(\"Expected & or \\\\\\\\ or \\\\end\",\n                                 parser.lexer, pos);\n        }\n    }\n    result.body = body;\n    result.rowGaps = rowGaps;\n    return new ParseNode(result.type, result, parser.mode);\n}\n\n/*\n * An environment definition is very similar to a function definition:\n * it is declared with a name or a list of names, a set of properties\n * and a handler containing the actual implementation.\n *\n * The properties include:\n *  - numArgs: The number of arguments after the \\begin{name} function.\n *  - argTypes: (optional) Just like for a function\n *  - allowedInText: (optional) Whether or not the environment is allowed inside\n *                   text mode (default false) (not enforced yet)\n *  - numOptionalArgs: (optional) Just like for a function\n * A bare number instead of that object indicates the numArgs value.\n *\n * The handler function will receive two arguments\n *  - context: information and references provided by the parser\n *  - args: an array of arguments passed to \\begin{name}\n * The context contains the following properties:\n *  - envName: the name of the environment, one of the listed names.\n *  - parser: the parser object\n *  - lexer: the lexer object\n *  - positions: the positions associated with these arguments from args.\n * The handler must return a ParseResult.\n */\n\nfunction defineEnvironment(names, props, handler) {\n    if (typeof names === \"string\") {\n        names = [names];\n    }\n    if (typeof props === \"number\") {\n        props = { numArgs: props };\n    }\n    // Set default values of environments\n    var data = {\n        numArgs: props.numArgs || 0,\n        argTypes: props.argTypes,\n        greediness: 1,\n        allowedInText: !!props.allowedInText,\n        numOptionalArgs: props.numOptionalArgs || 0,\n        handler: handler,\n    };\n    for (var i = 0; i < names.length; ++i) {\n        module.exports[names[i]] = data;\n    }\n}\n\n// Arrays are part of LaTeX, defined in lttab.dtx so its documentation\n// is part of the source2e.pdf file of LaTeX2e source documentation.\ndefineEnvironment(\"array\", {\n    numArgs: 1,\n}, function(context, args) {\n    var colalign = args[0];\n    colalign = colalign.value.map ? colalign.value : [colalign];\n    var cols = colalign.map(function(node) {\n        var ca = node.value;\n        if (\"lcr\".indexOf(ca) !== -1) {\n            return {\n                type: \"align\",\n                align: ca,\n            };\n        } else if (ca === \"|\") {\n            return {\n                type: \"separator\",\n                separator: \"|\",\n            };\n        }\n        throw new ParseError(\n            \"Unknown column alignment: \" + node.value,\n            context.lexer, context.positions[1]);\n    });\n    var res = {\n        type: \"array\",\n        cols: cols,\n        hskipBeforeAndAfter: true, // \\@preamble in lttab.dtx\n    };\n    res = parseArray(context.parser, res);\n    return res;\n});\n\n// The matrix environments of amsmath builds on the array environment\n// of LaTeX, which is discussed above.\ndefineEnvironment([\n    \"matrix\",\n    \"pmatrix\",\n    \"bmatrix\",\n    \"Bmatrix\",\n    \"vmatrix\",\n    \"Vmatrix\",\n], {\n}, function(context) {\n    var delimiters = {\n        \"matrix\": null,\n        \"pmatrix\": [\"(\", \")\"],\n        \"bmatrix\": [\"[\", \"]\"],\n        \"Bmatrix\": [\"\\\\{\", \"\\\\}\"],\n        \"vmatrix\": [\"|\", \"|\"],\n        \"Vmatrix\": [\"\\\\Vert\", \"\\\\Vert\"],\n    }[context.envName];\n    var res = {\n        type: \"array\",\n        hskipBeforeAndAfter: false, // \\hskip -\\arraycolsep in amsmath\n    };\n    res = parseArray(context.parser, res);\n    if (delimiters) {\n        res = new ParseNode(\"leftright\", {\n            body: [res],\n            left: delimiters[0],\n            right: delimiters[1],\n        }, context.mode);\n    }\n    return res;\n});\n\n// A cases environment (in amsmath.sty) is almost equivalent to\n// \\def\\arraystretch{1.2}%\n// \\left\\{\\begin{array}{@{}l@{\\quad}l@{}} … \\end{array}\\right.\ndefineEnvironment(\"cases\", {\n}, function(context) {\n    var res = {\n        type: \"array\",\n        arraystretch: 1.2,\n        cols: [{\n            type: \"align\",\n            align: \"l\",\n            pregap: 0,\n            postgap: fontMetrics.metrics.quad,\n        }, {\n            type: \"align\",\n            align: \"l\",\n            pregap: 0,\n            postgap: 0,\n        }],\n    };\n    res = parseArray(context.parser, res);\n    res = new ParseNode(\"leftright\", {\n        body: [res],\n        left: \"\\\\{\",\n        right: \".\",\n    }, context.mode);\n    return res;\n});\n\n// An aligned environment is like the align* environment\n// except it operates within math mode.\n// Note that we assume \\nomallineskiplimit to be zero,\n// so that \\strut@ is the same as \\strut.\ndefineEnvironment(\"aligned\", {\n}, function(context) {\n    var res = {\n        type: \"array\",\n        cols: [],\n    };\n    res = parseArray(context.parser, res);\n    var emptyGroup = new ParseNode(\"ordgroup\", [], context.mode);\n    var numCols = 0;\n    res.value.body.forEach(function(row) {\n        var i;\n        for (i = 1; i < row.length; i += 2) {\n            row[i].value.unshift(emptyGroup);\n        }\n        if (numCols < row.length) {\n            numCols = row.length;\n        }\n    });\n    for (var i = 0; i < numCols; ++i) {\n        var align = \"r\";\n        var pregap = 0;\n        if (i % 2 === 1) {\n            align = \"l\";\n        } else if (i > 0) {\n            pregap = 2; // one \\qquad between columns\n        }\n        res.value.cols[i] = {\n            type: \"align\",\n            align: align,\n            pregap: pregap,\n            postgap: 0,\n        };\n    }\n    return res;\n});\n","function getRelocatable(re) {\n  // In the future, this could use a WeakMap instead of an expando.\n  if (!re.__matchAtRelocatable) {\n    // Disjunctions are the lowest-precedence operator, so we can make any\n    // pattern match the empty string by appending `|()` to it:\n    // https://people.mozilla.org/~jorendorff/es6-draft.html#sec-patterns\n    var source = re.source + '|()';\n\n    // We always make the new regex global.\n    var flags = 'g' + (re.ignoreCase ? 'i' : '') + (re.multiline ? 'm' : '') + (re.unicode ? 'u' : '')\n    // sticky (/.../y) doesn't make sense in conjunction with our relocation\n    // logic, so we ignore it here.\n    ;\n\n    re.__matchAtRelocatable = new RegExp(source, flags);\n  }\n  return re.__matchAtRelocatable;\n}\n\nfunction matchAt(re, str, pos) {\n  if (re.global || re.sticky) {\n    throw new Error('matchAt(...): Only non-global regexes are supported');\n  }\n  var reloc = getRelocatable(re);\n  reloc.lastIndex = pos;\n  var match = reloc.exec(str);\n  // Last capturing group is our sentinel that indicates whether the regex\n  // matched at the given location.\n  if (match[match.length - 1] == null) {\n    // Original regex matched.\n    match.length = match.length - 1;\n    return match;\n  } else {\n    return null;\n  }\n}\n\nmodule.exports = matchAt;","/**\n * The Lexer class handles tokenizing the input in various ways. Since our\n * parser expects us to be able to backtrack, the lexer allows lexing from any\n * given starting point.\n *\n * Its main exposed function is the `lex` function, which takes a position to\n * lex from and a type of token to lex. It defers to the appropriate `_innerLex`\n * function.\n *\n * The various `_innerLex` functions perform the actual lexing of different\n * kinds.\n */\n\nvar matchAt = require(\"match-at\");\n\nvar ParseError = require(\"./ParseError\");\n\n// The main lexer class\nfunction Lexer(input) {\n    this._input = input;\n}\n\n// The resulting token returned from `lex`.\nfunction Token(text, data, position) {\n    this.text = text;\n    this.data = data;\n    this.position = position;\n}\n\n/* The following tokenRegex\n * - matches typical whitespace (but not NBSP etc.) using its first group\n * - matches symbol combinations which result in a single output character\n * - does not match any control character \\x00-\\x1f except whitespace\n * - does not match a bare backslash\n * - matches any ASCII character except those just mentioned\n * - does not match the BMP private use area \\uE000-\\uF8FF\n * - does not match bare surrogate code units\n * - matches any BMP character except for those just described\n * - matches any valid Unicode surrogate pair\n * - matches a backslash followed by one or more letters\n * - matches a backslash followed by any BMP character, including newline\n * Just because the Lexer matches something doesn't mean it's valid input:\n * If there is no matching function or symbol definition, the Parser will\n * still reject the input.\n */\nvar tokenRegex = new RegExp(\n    \"([ \\r\\n\\t]+)|(\" +                                // whitespace\n    \"---?\" +                                          // special combinations\n    \"|[!-\\\\[\\\\]-\\u2027\\u202A-\\uD7FF\\uF900-\\uFFFF]\" +  // single codepoint\n    \"|[\\uD800-\\uDBFF][\\uDC00-\\uDFFF]\" +               // surrogate pair\n    \"|\\\\\\\\(?:[a-zA-Z]+|[^\\uD800-\\uDFFF])\" +           // function name\n    \")\"\n);\n\nvar whitespaceRegex = /\\s*/;\n\n/**\n * This function lexes a single normal token. It takes a position and\n * whether it should completely ignore whitespace or not.\n */\nLexer.prototype._innerLex = function(pos, ignoreWhitespace) {\n    var input = this._input;\n    if (pos === input.length) {\n        return new Token(\"EOF\", null, pos);\n    }\n    var match = matchAt(tokenRegex, input, pos);\n    if (match === null) {\n        throw new ParseError(\n            \"Unexpected character: '\" + input[pos] + \"'\",\n            this, pos);\n    } else if (match[2]) { // matched non-whitespace\n        return new Token(match[2], null, pos + match[2].length);\n    } else if (ignoreWhitespace) {\n        return this._innerLex(pos + match[1].length, true);\n    } else { // concatenate whitespace to a single space\n        return new Token(\" \", null, pos + match[1].length);\n    }\n};\n\n// A regex to match a CSS color (like #ffffff or BlueViolet)\nvar cssColor = /#[a-z0-9]+|[a-z]+/i;\n\n/**\n * This function lexes a CSS color.\n */\nLexer.prototype._innerLexColor = function(pos) {\n    var input = this._input;\n\n    // Ignore whitespace\n    var whitespace = matchAt(whitespaceRegex, input, pos)[0];\n    pos += whitespace.length;\n\n    var match;\n    if ((match = matchAt(cssColor, input, pos))) {\n        // If we look like a color, return a color\n        return new Token(match[0], null, pos + match[0].length);\n    } else {\n        throw new ParseError(\"Invalid color\", this, pos);\n    }\n};\n\n// A regex to match a dimension. Dimensions look like\n// \"1.2em\" or \".4pt\" or \"1 ex\"\nvar sizeRegex = /(-?)\\s*(\\d+(?:\\.\\d*)?|\\.\\d+)\\s*([a-z]{2})/;\n\n/**\n * This function lexes a dimension.\n */\nLexer.prototype._innerLexSize = function(pos) {\n    var input = this._input;\n\n    // Ignore whitespace\n    var whitespace = matchAt(whitespaceRegex, input, pos)[0];\n    pos += whitespace.length;\n\n    var match;\n    if ((match = matchAt(sizeRegex, input, pos))) {\n        var unit = match[3];\n        // We only currently handle \"em\" and \"ex\" units\n        if (unit !== \"em\" && unit !== \"ex\") {\n            throw new ParseError(\"Invalid unit: '\" + unit + \"'\", this, pos);\n        }\n        return new Token(match[0], {\n            number: +(match[1] + match[2]),\n            unit: unit,\n        }, pos + match[0].length);\n    }\n\n    throw new ParseError(\"Invalid size\", this, pos);\n};\n\n/**\n * This function lexes a string of whitespace.\n */\nLexer.prototype._innerLexWhitespace = function(pos) {\n    var input = this._input;\n\n    var whitespace = matchAt(whitespaceRegex, input, pos)[0];\n    pos += whitespace.length;\n\n    return new Token(whitespace[0], null, pos);\n};\n\n/**\n * This function lexes a single token starting at `pos` and of the given mode.\n * Based on the mode, we defer to one of the `_innerLex` functions.\n */\nLexer.prototype.lex = function(pos, mode) {\n    if (mode === \"math\") {\n        return this._innerLex(pos, true);\n    } else if (mode === \"text\") {\n        return this._innerLex(pos, false);\n    } else if (mode === \"color\") {\n        return this._innerLexColor(pos);\n    } else if (mode === \"size\") {\n        return this._innerLexSize(pos);\n    } else if (mode === \"whitespace\") {\n        return this._innerLexWhitespace(pos);\n    }\n};\n\nmodule.exports = Lexer;\n","/* eslint no-constant-condition:0 */\nvar functions = require(\"./functions\");\nvar environments = require(\"./environments\");\nvar Lexer = require(\"./Lexer\");\nvar symbols = require(\"./symbols\");\nvar utils = require(\"./utils\");\n\nvar parseData = require(\"./parseData\");\nvar ParseError = require(\"./ParseError\");\n\n/**\n * This file contains the parser used to parse out a TeX expression from the\n * input. Since TeX isn't context-free, standard parsers don't work particularly\n * well.\n *\n * The strategy of this parser is as such:\n *\n * The main functions (the `.parse...` ones) take a position in the current\n * parse string to parse tokens from. The lexer (found in Lexer.js, stored at\n * this.lexer) also supports pulling out tokens at arbitrary places. When\n * individual tokens are needed at a position, the lexer is called to pull out a\n * token, which is then used.\n *\n * The parser has a property called \"mode\" indicating the mode that\n * the parser is currently in. Currently it has to be one of \"math\" or\n * \"text\", which denotes whether the current environment is a math-y\n * one or a text-y one (e.g. inside \\text). Currently, this serves to\n * limit the functions which can be used in text mode.\n *\n * The main functions then return an object which contains the useful data that\n * was parsed at its given point, and a new position at the end of the parsed\n * data. The main functions can call each other and continue the parsing by\n * using the returned position as a new starting point.\n *\n * There are also extra `.handle...` functions, which pull out some reused\n * functionality into self-contained functions.\n *\n * The earlier functions return ParseNodes.\n * The later functions (which are called deeper in the parse) sometimes return\n * ParseFuncOrArgument, which contain a ParseNode as well as some data about\n * whether the parsed object is a function which is missing some arguments, or a\n * standalone object which can be used as an argument to another function.\n */\n\n/**\n * Main Parser class\n */\nfunction Parser(input, settings) {\n    // Make a new lexer\n    this.lexer = new Lexer(input);\n    // Store the settings for use in parsing\n    this.settings = settings;\n}\n\nvar ParseNode = parseData.ParseNode;\n\n/**\n * An initial function (without its arguments), or an argument to a function.\n * The `result` argument should be a ParseNode.\n */\nfunction ParseFuncOrArgument(result, isFunction) {\n    this.result = result;\n    // Is this a function (i.e. is it something defined in functions.js)?\n    this.isFunction = isFunction;\n}\n\n/**\n * Checks a result to make sure it has the right type, and throws an\n * appropriate error otherwise.\n *\n * @param {boolean=} consume whether to consume the expected token,\n *                           defaults to true\n */\nParser.prototype.expect = function(text, consume) {\n    if (this.nextToken.text !== text) {\n        throw new ParseError(\n            \"Expected '\" + text + \"', got '\" + this.nextToken.text + \"'\",\n            this.lexer, this.nextToken.position\n        );\n    }\n    if (consume !== false) {\n        this.consume();\n    }\n};\n\n/**\n * Considers the current look ahead token as consumed,\n * and fetches the one after that as the new look ahead.\n */\nParser.prototype.consume = function() {\n    this.pos = this.nextToken.position;\n    this.nextToken = this.lexer.lex(this.pos, this.mode);\n};\n\n/**\n * Main parsing function, which parses an entire input.\n *\n * @return {?Array.<ParseNode>}\n */\nParser.prototype.parse = function() {\n    // Try to parse the input\n    this.mode = \"math\";\n    this.pos = 0;\n    this.nextToken = this.lexer.lex(this.pos, this.mode);\n    var parse = this.parseInput();\n    return parse;\n};\n\n/**\n * Parses an entire input tree.\n */\nParser.prototype.parseInput = function() {\n    // Parse an expression\n    var expression = this.parseExpression(false);\n    // If we succeeded, make sure there's an EOF at the end\n    this.expect(\"EOF\", false);\n    return expression;\n};\n\nvar endOfExpression = [\"}\", \"\\\\end\", \"\\\\right\", \"&\", \"\\\\\\\\\", \"\\\\cr\"];\n\n/**\n * Parses an \"expression\", which is a list of atoms.\n *\n * @param {boolean} breakOnInfix Should the parsing stop when we hit infix\n *                  nodes? This happens when functions have higher precendence\n *                  than infix nodes in implicit parses.\n *\n * @param {?string} breakOnToken The token that the expression should end with,\n *                  or `null` if something else should end the expression.\n *\n * @return {ParseNode}\n */\nParser.prototype.parseExpression = function(breakOnInfix, breakOnToken) {\n    var body = [];\n    // Keep adding atoms to the body until we can't parse any more atoms (either\n    // we reached the end, a }, or a \\right)\n    while (true) {\n        var lex = this.nextToken;\n        var pos = this.pos;\n        if (endOfExpression.indexOf(lex.text) !== -1) {\n            break;\n        }\n        if (breakOnToken && lex.text === breakOnToken) {\n            break;\n        }\n        var atom = this.parseAtom();\n        if (!atom) {\n            if (!this.settings.throwOnError && lex.text[0] === \"\\\\\") {\n                var errorNode = this.handleUnsupportedCmd();\n                body.push(errorNode);\n\n                pos = lex.position;\n                continue;\n            }\n\n            break;\n        }\n        if (breakOnInfix && atom.type === \"infix\") {\n            // rewind so we can parse the infix atom again\n            this.pos = pos;\n            this.nextToken = lex;\n            break;\n        }\n        body.push(atom);\n    }\n    return this.handleInfixNodes(body);\n};\n\n/**\n * Rewrites infix operators such as \\over with corresponding commands such\n * as \\frac.\n *\n * There can only be one infix operator per group.  If there's more than one\n * then the expression is ambiguous.  This can be resolved by adding {}.\n *\n * @returns {Array}\n */\nParser.prototype.handleInfixNodes = function(body) {\n    var overIndex = -1;\n    var funcName;\n\n    for (var i = 0; i < body.length; i++) {\n        var node = body[i];\n        if (node.type === \"infix\") {\n            if (overIndex !== -1) {\n                throw new ParseError(\"only one infix operator per group\",\n                    this.lexer, -1);\n            }\n            overIndex = i;\n            funcName = node.value.replaceWith;\n        }\n    }\n\n    if (overIndex !== -1) {\n        var numerNode;\n        var denomNode;\n\n        var numerBody = body.slice(0, overIndex);\n        var denomBody = body.slice(overIndex + 1);\n\n        if (numerBody.length === 1 && numerBody[0].type === \"ordgroup\") {\n            numerNode = numerBody[0];\n        } else {\n            numerNode = new ParseNode(\"ordgroup\", numerBody, this.mode);\n        }\n\n        if (denomBody.length === 1 && denomBody[0].type === \"ordgroup\") {\n            denomNode = denomBody[0];\n        } else {\n            denomNode = new ParseNode(\"ordgroup\", denomBody, this.mode);\n        }\n\n        var value = this.callFunction(\n            funcName, [numerNode, denomNode], null);\n        return [new ParseNode(value.type, value, this.mode)];\n    } else {\n        return body;\n    }\n};\n\n// The greediness of a superscript or subscript\nvar SUPSUB_GREEDINESS = 1;\n\n/**\n * Handle a subscript or superscript with nice errors.\n */\nParser.prototype.handleSupSubscript = function(name) {\n    var symbol = this.nextToken.text;\n    var symPos = this.pos;\n    this.consume();\n    var group = this.parseGroup();\n\n    if (!group) {\n        if (!this.settings.throwOnError && this.nextToken.text[0] === \"\\\\\") {\n            return this.handleUnsupportedCmd();\n        } else {\n            throw new ParseError(\n                \"Expected group after '\" + symbol + \"'\",\n                this.lexer,\n                symPos + 1\n            );\n        }\n    } else if (group.isFunction) {\n        // ^ and _ have a greediness, so handle interactions with functions'\n        // greediness\n        var funcGreediness = functions[group.result].greediness;\n        if (funcGreediness > SUPSUB_GREEDINESS) {\n            return this.parseFunction(group);\n        } else {\n            throw new ParseError(\n                \"Got function '\" + group.result + \"' with no arguments \" +\n                    \"as \" + name,\n                this.lexer, symPos + 1);\n        }\n    } else {\n        return group.result;\n    }\n};\n\n/**\n * Converts the textual input of an unsupported command into a text node\n * contained within a color node whose color is determined by errorColor\n */\nParser.prototype.handleUnsupportedCmd = function() {\n    var text = this.nextToken.text;\n    var textordArray = [];\n\n    for (var i = 0; i < text.length; i++) {\n        textordArray.push(new ParseNode(\"textord\", text[i], \"text\"));\n    }\n\n    var textNode = new ParseNode(\n        \"text\",\n        {\n            body: textordArray,\n            type: \"text\",\n        },\n        this.mode);\n\n    var colorNode = new ParseNode(\n        \"color\",\n        {\n            color: this.settings.errorColor,\n            value: [textNode],\n            type: \"color\",\n        },\n        this.mode);\n\n    this.consume();\n    return colorNode;\n};\n\n/**\n * Parses a group with optional super/subscripts.\n *\n * @return {?ParseNode}\n */\nParser.prototype.parseAtom = function() {\n    // The body of an atom is an implicit group, so that things like\n    // \\left(x\\right)^2 work correctly.\n    var base = this.parseImplicitGroup();\n\n    // In text mode, we don't have superscripts or subscripts\n    if (this.mode === \"text\") {\n        return base;\n    }\n\n    // Note that base may be empty (i.e. null) at this point.\n\n    var superscript;\n    var subscript;\n    while (true) {\n        // Lex the first token\n        var lex = this.nextToken;\n\n        if (lex.text === \"\\\\limits\" || lex.text === \"\\\\nolimits\") {\n            // We got a limit control\n            if (!base || base.type !== \"op\") {\n                throw new ParseError(\n                    \"Limit controls must follow a math operator\",\n                    this.lexer, this.pos);\n            } else {\n                var limits = lex.text === \"\\\\limits\";\n                base.value.limits = limits;\n                base.value.alwaysHandleSupSub = true;\n            }\n            this.consume();\n        } else if (lex.text === \"^\") {\n            // We got a superscript start\n            if (superscript) {\n                throw new ParseError(\n                    \"Double superscript\", this.lexer, this.pos);\n            }\n            superscript = this.handleSupSubscript(\"superscript\");\n        } else if (lex.text === \"_\") {\n            // We got a subscript start\n            if (subscript) {\n                throw new ParseError(\n                    \"Double subscript\", this.lexer, this.pos);\n            }\n            subscript = this.handleSupSubscript(\"subscript\");\n        } else if (lex.text === \"'\") {\n            // We got a prime\n            var prime = new ParseNode(\"textord\", \"\\\\prime\", this.mode);\n\n            // Many primes can be grouped together, so we handle this here\n            var primes = [prime];\n            this.consume();\n            // Keep lexing tokens until we get something that's not a prime\n            while (this.nextToken.text === \"'\") {\n                // For each one, add another prime to the list\n                primes.push(prime);\n                this.consume();\n            }\n            // Put them into an ordgroup as the superscript\n            superscript = new ParseNode(\"ordgroup\", primes, this.mode);\n        } else {\n            // If it wasn't ^, _, or ', stop parsing super/subscripts\n            break;\n        }\n    }\n\n    if (superscript || subscript) {\n        // If we got either a superscript or subscript, create a supsub\n        return new ParseNode(\"supsub\", {\n            base: base,\n            sup: superscript,\n            sub: subscript,\n        }, this.mode);\n    } else {\n        // Otherwise return the original body\n        return base;\n    }\n};\n\n// A list of the size-changing functions, for use in parseImplicitGroup\nvar sizeFuncs = [\n    \"\\\\tiny\", \"\\\\scriptsize\", \"\\\\footnotesize\", \"\\\\small\", \"\\\\normalsize\",\n    \"\\\\large\", \"\\\\Large\", \"\\\\LARGE\", \"\\\\huge\", \"\\\\Huge\",\n];\n\n// A list of the style-changing functions, for use in parseImplicitGroup\nvar styleFuncs = [\n    \"\\\\displaystyle\", \"\\\\textstyle\", \"\\\\scriptstyle\", \"\\\\scriptscriptstyle\",\n];\n\n/**\n * Parses an implicit group, which is a group that starts at the end of a\n * specified, and ends right before a higher explicit group ends, or at EOL. It\n * is used for functions that appear to affect the current style, like \\Large or\n * \\textrm, where instead of keeping a style we just pretend that there is an\n * implicit grouping after it until the end of the group. E.g.\n *   small text {\\Large large text} small text again\n * It is also used for \\left and \\right to get the correct grouping.\n *\n * @return {?ParseNode}\n */\nParser.prototype.parseImplicitGroup = function() {\n    var start = this.parseSymbol();\n\n    if (start == null) {\n        // If we didn't get anything we handle, fall back to parseFunction\n        return this.parseFunction();\n    }\n\n    var func = start.result;\n    var body;\n\n    if (func === \"\\\\left\") {\n        // If we see a left:\n        // Parse the entire left function (including the delimiter)\n        var left = this.parseFunction(start);\n        // Parse out the implicit body\n        body = this.parseExpression(false);\n        // Check the next token\n        this.expect(\"\\\\right\", false);\n        var right = this.parseFunction();\n        return new ParseNode(\"leftright\", {\n            body: body,\n            left: left.value.value,\n            right: right.value.value,\n        }, this.mode);\n    } else if (func === \"\\\\begin\") {\n        // begin...end is similar to left...right\n        var begin = this.parseFunction(start);\n        var envName = begin.value.name;\n        if (!environments.hasOwnProperty(envName)) {\n            throw new ParseError(\n                \"No such environment: \" + envName,\n                this.lexer, begin.value.namepos);\n        }\n        // Build the environment object. Arguments and other information will\n        // be made available to the begin and end methods using properties.\n        var env = environments[envName];\n        var args = this.parseArguments(\"\\\\begin{\" + envName + \"}\", env);\n        var context = {\n            mode: this.mode,\n            envName: envName,\n            parser: this,\n            lexer: this.lexer,\n            positions: args.pop(),\n        };\n        var result = env.handler(context, args);\n        this.expect(\"\\\\end\", false);\n        var end = this.parseFunction();\n        if (end.value.name !== envName) {\n            throw new ParseError(\n                \"Mismatch: \\\\begin{\" + envName + \"} matched \" +\n                \"by \\\\end{\" + end.value.name + \"}\",\n                this.lexer /* , end.value.namepos */);\n            // TODO: Add position to the above line and adjust test case,\n            // requires #385 to get merged first\n        }\n        result.position = end.position;\n        return result;\n    } else if (utils.contains(sizeFuncs, func)) {\n        // If we see a sizing function, parse out the implict body\n        body = this.parseExpression(false);\n        return new ParseNode(\"sizing\", {\n            // Figure out what size to use based on the list of functions above\n            size: \"size\" + (utils.indexOf(sizeFuncs, func) + 1),\n            value: body,\n        }, this.mode);\n    } else if (utils.contains(styleFuncs, func)) {\n        // If we see a styling function, parse out the implict body\n        body = this.parseExpression(true);\n        return new ParseNode(\"styling\", {\n            // Figure out what style to use by pulling out the style from\n            // the function name\n            style: func.slice(1, func.length - 5),\n            value: body,\n        }, this.mode);\n    } else {\n        // Defer to parseFunction if it's not a function we handle\n        return this.parseFunction(start);\n    }\n};\n\n/**\n * Parses an entire function, including its base and all of its arguments.\n * The base might either have been parsed already, in which case\n * it is provided as an argument, or it's the next group in the input.\n *\n * @param {ParseFuncOrArgument=} baseGroup optional as described above\n * @return {?ParseNode}\n */\nParser.prototype.parseFunction = function(baseGroup) {\n    if (!baseGroup) {\n        baseGroup = this.parseGroup();\n    }\n\n    if (baseGroup) {\n        if (baseGroup.isFunction) {\n            var func = baseGroup.result;\n            var funcData = functions[func];\n            if (this.mode === \"text\" && !funcData.allowedInText) {\n                throw new ParseError(\n                    \"Can't use function '\" + func + \"' in text mode\",\n                    this.lexer, baseGroup.position);\n            }\n\n            var args = this.parseArguments(func, funcData);\n            var result = this.callFunction(func, args, args.pop());\n            return new ParseNode(result.type, result, this.mode);\n        } else {\n            return baseGroup.result;\n        }\n    } else {\n        return null;\n    }\n};\n\n/**\n * Call a function handler with a suitable context and arguments.\n */\nParser.prototype.callFunction = function(name, args, positions) {\n    var context = {\n        funcName: name,\n        parser: this,\n        lexer: this.lexer,\n        positions: positions,\n    };\n    return functions[name].handler(context, args);\n};\n\n/**\n * Parses the arguments of a function or environment\n *\n * @param {string} func  \"\\name\" or \"\\begin{name}\"\n * @param {{numArgs:number,numOptionalArgs:number|undefined}} funcData\n * @return the array of arguments, with the list of positions as last element\n */\nParser.prototype.parseArguments = function(func, funcData) {\n    var totalArgs = funcData.numArgs + funcData.numOptionalArgs;\n    if (totalArgs === 0) {\n        return [[this.pos]];\n    }\n\n    var baseGreediness = funcData.greediness;\n    var positions = [this.pos];\n    var args = [];\n\n    for (var i = 0; i < totalArgs; i++) {\n        var argType = funcData.argTypes && funcData.argTypes[i];\n        var arg;\n        if (i < funcData.numOptionalArgs) {\n            if (argType) {\n                arg = this.parseSpecialGroup(argType, true);\n            } else {\n                arg = this.parseOptionalGroup();\n            }\n            if (!arg) {\n                args.push(null);\n                positions.push(this.pos);\n                continue;\n            }\n        } else {\n            if (argType) {\n                arg = this.parseSpecialGroup(argType);\n            } else {\n                arg = this.parseGroup();\n            }\n            if (!arg) {\n                if (!this.settings.throwOnError &&\n                    this.nextToken.text[0] === \"\\\\\") {\n                    arg = new ParseFuncOrArgument(\n                        this.handleUnsupportedCmd(this.nextToken.text),\n                        false);\n                } else {\n                    throw new ParseError(\n                        \"Expected group after '\" + func + \"'\",\n                        this.lexer, this.pos);\n                }\n            }\n        }\n        var argNode;\n        if (arg.isFunction) {\n            var argGreediness =\n                functions[arg.result].greediness;\n            if (argGreediness > baseGreediness) {\n                argNode = this.parseFunction(arg);\n            } else {\n                throw new ParseError(\n                    \"Got function '\" + arg.result + \"' as \" +\n                    \"argument to '\" + func + \"'\",\n                    this.lexer, this.pos - 1);\n            }\n        } else {\n            argNode = arg.result;\n        }\n        args.push(argNode);\n        positions.push(this.pos);\n    }\n\n    args.push(positions);\n\n    return args;\n};\n\n\n/**\n * Parses a group when the mode is changing. Takes a position, a new mode, and\n * an outer mode that is used to parse the outside.\n *\n * @return {?ParseFuncOrArgument}\n */\nParser.prototype.parseSpecialGroup = function(innerMode, optional) {\n    var outerMode = this.mode;\n    // Handle `original` argTypes\n    if (innerMode === \"original\") {\n        innerMode = outerMode;\n    }\n\n    if (innerMode === \"color\" || innerMode === \"size\") {\n        // color and size modes are special because they should have braces and\n        // should only lex a single symbol inside\n        var openBrace = this.nextToken;\n        if (optional && openBrace.text !== \"[\") {\n            // optional arguments should return null if they don't exist\n            return null;\n        }\n        // The call to expect will lex the token after the '{' in inner mode\n        this.mode = innerMode;\n        this.expect(optional ? \"[\" : \"{\");\n        var inner = this.nextToken;\n        this.mode = outerMode;\n        var data;\n        if (innerMode === \"color\") {\n            data = inner.text;\n        } else {\n            data = inner.data;\n        }\n        this.consume(); // consume the token stored in inner\n        this.expect(optional ? \"]\" : \"}\");\n        return new ParseFuncOrArgument(\n            new ParseNode(innerMode, data, outerMode),\n            false);\n    } else if (innerMode === \"text\") {\n        // text mode is special because it should ignore the whitespace before\n        // it\n        var whitespace = this.lexer.lex(this.pos, \"whitespace\");\n        this.pos = whitespace.position;\n    }\n\n    // By the time we get here, innerMode is one of \"text\" or \"math\".\n    // We switch the mode of the parser, recurse, then restore the old mode.\n    this.mode = innerMode;\n    this.nextToken = this.lexer.lex(this.pos, innerMode);\n    var res;\n    if (optional) {\n        res = this.parseOptionalGroup();\n    } else {\n        res = this.parseGroup();\n    }\n    this.mode = outerMode;\n    this.nextToken = this.lexer.lex(this.pos, outerMode);\n    return res;\n};\n\n/**\n * Parses a group, which is either a single nucleus (like \"x\") or an expression\n * in braces (like \"{x+y}\")\n *\n * @return {?ParseFuncOrArgument}\n */\nParser.prototype.parseGroup = function() {\n    // Try to parse an open brace\n    if (this.nextToken.text === \"{\") {\n        // If we get a brace, parse an expression\n        this.consume();\n        var expression = this.parseExpression(false);\n        // Make sure we get a close brace\n        this.expect(\"}\");\n        return new ParseFuncOrArgument(\n            new ParseNode(\"ordgroup\", expression, this.mode),\n            false);\n    } else {\n        // Otherwise, just return a nucleus\n        return this.parseSymbol();\n    }\n};\n\n/**\n * Parses a group, which is an expression in brackets (like \"[x+y]\")\n *\n * @return {?ParseFuncOrArgument}\n */\nParser.prototype.parseOptionalGroup = function() {\n    // Try to parse an open bracket\n    if (this.nextToken.text === \"[\") {\n        // If we get a brace, parse an expression\n        this.consume();\n        var expression = this.parseExpression(false, \"]\");\n        // Make sure we get a close bracket\n        this.expect(\"]\");\n        return new ParseFuncOrArgument(\n            new ParseNode(\"ordgroup\", expression, this.mode),\n            false);\n    } else {\n        // Otherwise, return null,\n        return null;\n    }\n};\n\n/**\n * Parse a single symbol out of the string. Here, we handle both the functions\n * we have defined, as well as the single character symbols\n *\n * @return {?ParseFuncOrArgument}\n */\nParser.prototype.parseSymbol = function() {\n    var nucleus = this.nextToken;\n\n    if (functions[nucleus.text]) {\n        this.consume();\n        // If there exists a function with this name, we return the function and\n        // say that it is a function.\n        return new ParseFuncOrArgument(\n            nucleus.text,\n            true);\n    } else if (symbols[this.mode][nucleus.text]) {\n        this.consume();\n        // Otherwise if this is a no-argument function, find the type it\n        // corresponds to in the symbols map\n        return new ParseFuncOrArgument(\n            new ParseNode(symbols[this.mode][nucleus.text].group,\n                          nucleus.text, this.mode),\n            false);\n    } else {\n        return null;\n    }\n};\n\nParser.prototype.ParseNode = ParseNode;\n\nmodule.exports = Parser;\n","/**\n * Provides a single function for parsing an expression using a Parser\n * TODO(emily): Remove this\n */\n\nvar Parser = require(\"./Parser\");\n\n/**\n * Parses an expression using a Parser, then returns the parsed result.\n */\nvar parseTree = function(toParse, settings) {\n    var parser = new Parser(toParse, settings);\n\n    return parser.parse();\n};\n\nmodule.exports = parseTree;\n","/* eslint no-console:0 */\n/**\n * This is the main entry point for KaTeX. Here, we expose functions for\n * rendering expressions either to DOM nodes or to markup strings.\n *\n * We also expose the ParseError class to check if errors thrown from KaTeX are\n * errors in the expression, or errors in javascript handling.\n */\n\nvar ParseError = require(\"./src/ParseError\");\nvar Settings = require(\"./src/Settings\");\n\nvar buildTree = require(\"./src/buildTree\");\nvar parseTree = require(\"./src/parseTree\");\nvar utils = require(\"./src/utils\");\n\n/**\n * Parse and build an expression, and place that expression in the DOM node\n * given.\n */\nvar render = function(expression, baseNode, options) {\n    utils.clearNode(baseNode);\n\n    var settings = new Settings(options);\n\n    var tree = parseTree(expression, settings);\n    var node = buildTree(tree, expression, settings).toNode();\n\n    baseNode.appendChild(node);\n};\n\n// KaTeX's styles don't work properly in quirks mode. Print out an error, and\n// disable rendering.\nif (typeof document !== \"undefined\") {\n    if (document.compatMode !== \"CSS1Compat\") {\n        typeof console !== \"undefined\" && console.warn(\n            \"Warning: KaTeX doesn't work in quirks mode. Make sure your \" +\n                \"website has a suitable doctype.\");\n\n        render = function() {\n            throw new ParseError(\"KaTeX doesn't work in quirks mode.\");\n        };\n    }\n}\n\n/**\n * Parse and build an expression, and return the markup for that.\n */\nvar renderToString = function(expression, options) {\n    var settings = new Settings(options);\n\n    var tree = parseTree(expression, settings);\n    return buildTree(tree, expression, settings).toMarkup();\n};\n\n/**\n * Parse an expression and return the parse tree.\n */\nvar generateParseTree = function(expression, options) {\n    var settings = new Settings(options);\n    return parseTree(expression, settings);\n};\n\nmodule.exports = {\n    render: render,\n    renderToString: renderToString,\n    /**\n     * NOTE: This method is not currently recommended for public use.\n     * The internal tree representation is unstable and is very likely\n     * to change. Use at your own risk.\n     */\n    __parse: generateParseTree,\n    ParseError: ParseError,\n};\n","/* Process inline math */\n/*\nLike markdown-it-simplemath, this is a stripped down, simplified version of:\nhttps://github.com/runarberg/markdown-it-math\n\nIt differs in that it takes (a subset of) LaTeX as input and relies on KaTeX\nfor rendering output.\n*/\n\n/*jslint node: true */\n'use strict';\n\nvar katex = require('katex');\n\n// Test if potential opening or closing delimieter\n// Assumes that there is a \"$\" at state.src[pos]\nfunction isValidDelim(state, pos) {\n    var prevChar, nextChar,\n        max = state.posMax,\n        can_open = true,\n        can_close = true;\n\n    prevChar = pos > 0 ? state.src.charCodeAt(pos - 1) : -1;\n    nextChar = pos + 1 <= max ? state.src.charCodeAt(pos + 1) : -1;\n\n    // Check non-whitespace conditions for opening and closing, and\n    // check that closing delimeter isn't followed by a number\n    if (prevChar === 0x20/* \" \" */ || prevChar === 0x09/* \\t */ ||\n            (nextChar >= 0x30/* \"0\" */ && nextChar <= 0x39/* \"9\" */)) {\n        can_close = false;\n    }\n    if (nextChar === 0x20/* \" \" */ || nextChar === 0x09/* \\t */) {\n        can_open = false;\n    }\n\n    return {\n        can_open: can_open,\n        can_close: can_close\n    };\n}\n\nfunction math_inline(state, silent) {\n    var start, match, token, res, pos, esc_count;\n\n    if (state.src[state.pos] !== \"$\") { return false; }\n\n    res = isValidDelim(state, state.pos);\n    if (!res.can_open) {\n        if (!silent) { state.pending += \"$\"; }\n        state.pos += 1;\n        return true;\n    }\n\n    // First check for and bypass all properly escaped delimieters\n    // This loop will assume that the first leading backtick can not\n    // be the first character in state.src, which is known since\n    // we have found an opening delimieter already.\n    start = state.pos + 1;\n    match = start;\n    while ( (match = state.src.indexOf(\"$\", match)) !== -1) {\n        // Found potential $, look for escapes, pos will point to\n        // first non escape when complete\n        pos = match - 1;\n        while (state.src[pos] === \"\\\\\") { pos -= 1; }\n\n        // Even number of escapes, potential closing delimiter found\n        if ( ((match - pos) % 2) == 1 ) { break; }\n        match += 1;\n    }\n\n    // No closing delimter found.  Consume $ and continue.\n    if (match === -1) {\n        if (!silent) { state.pending += \"$\"; }\n        state.pos = start;\n        return true;\n    }\n\n    // Check if we have empty content, ie: $$.  Do not parse.\n    if (match - start === 0) {\n        if (!silent) { state.pending += \"$$\"; }\n        state.pos = start + 1;\n        return true;\n    }\n\n    // Check for valid closing delimiter\n    res = isValidDelim(state, match);\n    if (!res.can_close) {\n        if (!silent) { state.pending += \"$\"; }\n        state.pos = start;\n        return true;\n    }\n\n    if (!silent) {\n        token         = state.push('math_inline', 'math', 0);\n        token.markup  = \"$\";\n        token.content = state.src.slice(start, match);\n    }\n\n    state.pos = match + 1;\n    return true;\n}\n\nfunction math_block(state, start, end, silent){\n    var firstLine, lastLine, next, lastPos, found = false, token,\n        pos = state.bMarks[start] + state.tShift[start],\n        max = state.eMarks[start]\n\n    if(pos + 2 > max){ return false; }\n    if(state.src.slice(pos,pos+2)!=='$$'){ return false; }\n\n    pos += 2;\n    firstLine = state.src.slice(pos,max);\n\n    if(silent){ return true; }\n    if(firstLine.trim().slice(-2)==='$$'){\n        // Single line expression\n        firstLine = firstLine.trim().slice(0, -2);\n        found = true;\n    }\n\n    for(next = start; !found; ){\n\n        next++;\n\n        if(next >= end){ break; }\n\n        pos = state.bMarks[next]+state.tShift[next];\n        max = state.eMarks[next];\n\n        if(pos < max && state.tShift[next] < state.blkIndent){\n            // non-empty line with negative indent should stop the list:\n            break;\n        }\n\n        if(state.src.slice(pos,max).trim().slice(-2)==='$$'){\n            lastPos = state.src.slice(0,max).lastIndexOf('$$');\n            lastLine = state.src.slice(pos,lastPos);\n            found = true;\n        }\n\n    }\n\n    state.line = next + 1;\n\n    token = state.push('math_block', 'math', 0);\n    token.block = true;\n    token.content = (firstLine && firstLine.trim() ? firstLine + '\\n' : '')\n    + state.getLines(start + 1, next, state.tShift[start], true)\n    + (lastLine && lastLine.trim() ? lastLine : '');\n    token.map = [ start, state.line ];\n    token.markup = '$$';\n    return true;\n}\n\nmodule.exports = function math_plugin(md, options) {\n    // Default options\n\n    options = options || {};\n\n    // set KaTeX as the renderer for markdown-it-simplemath\n    var katexInline = function(latex){\n        options.displayMode = false;\n        try{\n            return katex.renderToString(latex, options);\n        }\n        catch(error){\n            if(options.throwOnError){ console.log(error); }\n            return latex;\n        }\n    };\n\n    var inlineRenderer = function(tokens, idx){\n        return katexInline(tokens[idx].content);\n    };\n\n    var katexBlock = function(latex){\n        options.displayMode = true;\n        try{\n            return \"<p>\" + katex.renderToString(latex, options) + \"</p>\";\n        }\n        catch(error){\n            if(options.throwOnError){ console.log(error); }\n            return latex;\n        }\n    }\n\n    var blockRenderer = function(tokens, idx){\n        return  katexBlock(tokens[idx].content) + '\\n';\n    }\n\n    md.inline.ruler.after('escape', 'math_inline', math_inline);\n    md.block.ruler.after('blockquote', 'math_block', math_block, {\n        alt: [ 'paragraph', 'reference', 'blockquote', 'list' ]\n    });\n    md.renderer.rules.math_inline = inlineRenderer;\n    md.renderer.rules.math_block = blockRenderer;\n};\n","var hljs = require('./core');\n\nhljs.registerLanguage('1c', require('./languages/1c'));\nhljs.registerLanguage('abnf', require('./languages/abnf'));\nhljs.registerLanguage('accesslog', require('./languages/accesslog'));\nhljs.registerLanguage('actionscript', require('./languages/actionscript'));\nhljs.registerLanguage('ada', require('./languages/ada'));\nhljs.registerLanguage('angelscript', require('./languages/angelscript'));\nhljs.registerLanguage('apache', require('./languages/apache'));\nhljs.registerLanguage('applescript', require('./languages/applescript'));\nhljs.registerLanguage('arcade', require('./languages/arcade'));\nhljs.registerLanguage('arduino', require('./languages/arduino'));\nhljs.registerLanguage('armasm', require('./languages/armasm'));\nhljs.registerLanguage('xml', require('./languages/xml'));\nhljs.registerLanguage('asciidoc', require('./languages/asciidoc'));\nhljs.registerLanguage('aspectj', require('./languages/aspectj'));\nhljs.registerLanguage('autohotkey', require('./languages/autohotkey'));\nhljs.registerLanguage('autoit', require('./languages/autoit'));\nhljs.registerLanguage('avrasm', require('./languages/avrasm'));\nhljs.registerLanguage('awk', require('./languages/awk'));\nhljs.registerLanguage('axapta', require('./languages/axapta'));\nhljs.registerLanguage('bash', require('./languages/bash'));\nhljs.registerLanguage('basic', require('./languages/basic'));\nhljs.registerLanguage('bnf', require('./languages/bnf'));\nhljs.registerLanguage('brainfuck', require('./languages/brainfuck'));\nhljs.registerLanguage('c', require('./languages/c'));\nhljs.registerLanguage('cal', require('./languages/cal'));\nhljs.registerLanguage('capnproto', require('./languages/capnproto'));\nhljs.registerLanguage('ceylon', require('./languages/ceylon'));\nhljs.registerLanguage('clean', require('./languages/clean'));\nhljs.registerLanguage('clojure', require('./languages/clojure'));\nhljs.registerLanguage('clojure-repl', require('./languages/clojure-repl'));\nhljs.registerLanguage('cmake', require('./languages/cmake'));\nhljs.registerLanguage('coffeescript', require('./languages/coffeescript'));\nhljs.registerLanguage('coq', require('./languages/coq'));\nhljs.registerLanguage('cos', require('./languages/cos'));\nhljs.registerLanguage('cpp', require('./languages/cpp'));\nhljs.registerLanguage('crmsh', require('./languages/crmsh'));\nhljs.registerLanguage('crystal', require('./languages/crystal'));\nhljs.registerLanguage('csharp', require('./languages/csharp'));\nhljs.registerLanguage('csp', require('./languages/csp'));\nhljs.registerLanguage('css', require('./languages/css'));\nhljs.registerLanguage('d', require('./languages/d'));\nhljs.registerLanguage('markdown', require('./languages/markdown'));\nhljs.registerLanguage('dart', require('./languages/dart'));\nhljs.registerLanguage('delphi', require('./languages/delphi'));\nhljs.registerLanguage('diff', require('./languages/diff'));\nhljs.registerLanguage('django', require('./languages/django'));\nhljs.registerLanguage('dns', require('./languages/dns'));\nhljs.registerLanguage('dockerfile', require('./languages/dockerfile'));\nhljs.registerLanguage('dos', require('./languages/dos'));\nhljs.registerLanguage('dsconfig', require('./languages/dsconfig'));\nhljs.registerLanguage('dts', require('./languages/dts'));\nhljs.registerLanguage('dust', require('./languages/dust'));\nhljs.registerLanguage('ebnf', require('./languages/ebnf'));\nhljs.registerLanguage('elixir', require('./languages/elixir'));\nhljs.registerLanguage('elm', require('./languages/elm'));\nhljs.registerLanguage('ruby', require('./languages/ruby'));\nhljs.registerLanguage('erb', require('./languages/erb'));\nhljs.registerLanguage('erlang-repl', require('./languages/erlang-repl'));\nhljs.registerLanguage('erlang', require('./languages/erlang'));\nhljs.registerLanguage('excel', require('./languages/excel'));\nhljs.registerLanguage('fix', require('./languages/fix'));\nhljs.registerLanguage('flix', require('./languages/flix'));\nhljs.registerLanguage('fortran', require('./languages/fortran'));\nhljs.registerLanguage('fsharp', require('./languages/fsharp'));\nhljs.registerLanguage('gams', require('./languages/gams'));\nhljs.registerLanguage('gauss', require('./languages/gauss'));\nhljs.registerLanguage('gcode', require('./languages/gcode'));\nhljs.registerLanguage('gherkin', require('./languages/gherkin'));\nhljs.registerLanguage('glsl', require('./languages/glsl'));\nhljs.registerLanguage('gml', require('./languages/gml'));\nhljs.registerLanguage('go', require('./languages/go'));\nhljs.registerLanguage('golo', require('./languages/golo'));\nhljs.registerLanguage('gradle', require('./languages/gradle'));\nhljs.registerLanguage('graphql', require('./languages/graphql'));\nhljs.registerLanguage('groovy', require('./languages/groovy'));\nhljs.registerLanguage('haml', require('./languages/haml'));\nhljs.registerLanguage('handlebars', require('./languages/handlebars'));\nhljs.registerLanguage('haskell', require('./languages/haskell'));\nhljs.registerLanguage('haxe', require('./languages/haxe'));\nhljs.registerLanguage('hsp', require('./languages/hsp'));\nhljs.registerLanguage('http', require('./languages/http'));\nhljs.registerLanguage('hy', require('./languages/hy'));\nhljs.registerLanguage('inform7', require('./languages/inform7'));\nhljs.registerLanguage('ini', require('./languages/ini'));\nhljs.registerLanguage('irpf90', require('./languages/irpf90'));\nhljs.registerLanguage('isbl', require('./languages/isbl'));\nhljs.registerLanguage('java', require('./languages/java'));\nhljs.registerLanguage('javascript', require('./languages/javascript'));\nhljs.registerLanguage('jboss-cli', require('./languages/jboss-cli'));\nhljs.registerLanguage('json', require('./languages/json'));\nhljs.registerLanguage('julia', require('./languages/julia'));\nhljs.registerLanguage('julia-repl', require('./languages/julia-repl'));\nhljs.registerLanguage('kotlin', require('./languages/kotlin'));\nhljs.registerLanguage('lasso', require('./languages/lasso'));\nhljs.registerLanguage('latex', require('./languages/latex'));\nhljs.registerLanguage('ldif', require('./languages/ldif'));\nhljs.registerLanguage('leaf', require('./languages/leaf'));\nhljs.registerLanguage('less', require('./languages/less'));\nhljs.registerLanguage('lisp', require('./languages/lisp'));\nhljs.registerLanguage('livecodeserver', require('./languages/livecodeserver'));\nhljs.registerLanguage('livescript', require('./languages/livescript'));\nhljs.registerLanguage('llvm', require('./languages/llvm'));\nhljs.registerLanguage('lsl', require('./languages/lsl'));\nhljs.registerLanguage('lua', require('./languages/lua'));\nhljs.registerLanguage('makefile', require('./languages/makefile'));\nhljs.registerLanguage('mathematica', require('./languages/mathematica'));\nhljs.registerLanguage('matlab', require('./languages/matlab'));\nhljs.registerLanguage('maxima', require('./languages/maxima'));\nhljs.registerLanguage('mel', require('./languages/mel'));\nhljs.registerLanguage('mercury', require('./languages/mercury'));\nhljs.registerLanguage('mipsasm', require('./languages/mipsasm'));\nhljs.registerLanguage('mizar', require('./languages/mizar'));\nhljs.registerLanguage('perl', require('./languages/perl'));\nhljs.registerLanguage('mojolicious', require('./languages/mojolicious'));\nhljs.registerLanguage('monkey', require('./languages/monkey'));\nhljs.registerLanguage('moonscript', require('./languages/moonscript'));\nhljs.registerLanguage('n1ql', require('./languages/n1ql'));\nhljs.registerLanguage('nestedtext', require('./languages/nestedtext'));\nhljs.registerLanguage('nginx', require('./languages/nginx'));\nhljs.registerLanguage('nim', require('./languages/nim'));\nhljs.registerLanguage('nix', require('./languages/nix'));\nhljs.registerLanguage('node-repl', require('./languages/node-repl'));\nhljs.registerLanguage('nsis', require('./languages/nsis'));\nhljs.registerLanguage('objectivec', require('./languages/objectivec'));\nhljs.registerLanguage('ocaml', require('./languages/ocaml'));\nhljs.registerLanguage('openscad', require('./languages/openscad'));\nhljs.registerLanguage('oxygene', require('./languages/oxygene'));\nhljs.registerLanguage('parser3', require('./languages/parser3'));\nhljs.registerLanguage('pf', require('./languages/pf'));\nhljs.registerLanguage('pgsql', require('./languages/pgsql'));\nhljs.registerLanguage('php', require('./languages/php'));\nhljs.registerLanguage('php-template', require('./languages/php-template'));\nhljs.registerLanguage('plaintext', require('./languages/plaintext'));\nhljs.registerLanguage('pony', require('./languages/pony'));\nhljs.registerLanguage('powershell', require('./languages/powershell'));\nhljs.registerLanguage('processing', require('./languages/processing'));\nhljs.registerLanguage('profile', require('./languages/profile'));\nhljs.registerLanguage('prolog', require('./languages/prolog'));\nhljs.registerLanguage('properties', require('./languages/properties'));\nhljs.registerLanguage('protobuf', require('./languages/protobuf'));\nhljs.registerLanguage('puppet', require('./languages/puppet'));\nhljs.registerLanguage('purebasic', require('./languages/purebasic'));\nhljs.registerLanguage('python', require('./languages/python'));\nhljs.registerLanguage('python-repl', require('./languages/python-repl'));\nhljs.registerLanguage('q', require('./languages/q'));\nhljs.registerLanguage('qml', require('./languages/qml'));\nhljs.registerLanguage('r', require('./languages/r'));\nhljs.registerLanguage('reasonml', require('./languages/reasonml'));\nhljs.registerLanguage('rib', require('./languages/rib'));\nhljs.registerLanguage('roboconf', require('./languages/roboconf'));\nhljs.registerLanguage('routeros', require('./languages/routeros'));\nhljs.registerLanguage('rsl', require('./languages/rsl'));\nhljs.registerLanguage('ruleslanguage', require('./languages/ruleslanguage'));\nhljs.registerLanguage('rust', require('./languages/rust'));\nhljs.registerLanguage('sas', require('./languages/sas'));\nhljs.registerLanguage('scala', require('./languages/scala'));\nhljs.registerLanguage('scheme', require('./languages/scheme'));\nhljs.registerLanguage('scilab', require('./languages/scilab'));\nhljs.registerLanguage('scss', require('./languages/scss'));\nhljs.registerLanguage('shell', require('./languages/shell'));\nhljs.registerLanguage('smali', require('./languages/smali'));\nhljs.registerLanguage('smalltalk', require('./languages/smalltalk'));\nhljs.registerLanguage('sml', require('./languages/sml'));\nhljs.registerLanguage('sqf', require('./languages/sqf'));\nhljs.registerLanguage('sql', require('./languages/sql'));\nhljs.registerLanguage('stan', require('./languages/stan'));\nhljs.registerLanguage('stata', require('./languages/stata'));\nhljs.registerLanguage('step21', require('./languages/step21'));\nhljs.registerLanguage('stylus', require('./languages/stylus'));\nhljs.registerLanguage('subunit', require('./languages/subunit'));\nhljs.registerLanguage('swift', require('./languages/swift'));\nhljs.registerLanguage('taggerscript', require('./languages/taggerscript'));\nhljs.registerLanguage('yaml', require('./languages/yaml'));\nhljs.registerLanguage('tap', require('./languages/tap'));\nhljs.registerLanguage('tcl', require('./languages/tcl'));\nhljs.registerLanguage('thrift', require('./languages/thrift'));\nhljs.registerLanguage('tp', require('./languages/tp'));\nhljs.registerLanguage('twig', require('./languages/twig'));\nhljs.registerLanguage('typescript', require('./languages/typescript'));\nhljs.registerLanguage('vala', require('./languages/vala'));\nhljs.registerLanguage('vbnet', require('./languages/vbnet'));\nhljs.registerLanguage('vbscript', require('./languages/vbscript'));\nhljs.registerLanguage('vbscript-html', require('./languages/vbscript-html'));\nhljs.registerLanguage('verilog', require('./languages/verilog'));\nhljs.registerLanguage('vhdl', require('./languages/vhdl'));\nhljs.registerLanguage('vim', require('./languages/vim'));\nhljs.registerLanguage('wasm', require('./languages/wasm'));\nhljs.registerLanguage('wren', require('./languages/wren'));\nhljs.registerLanguage('x86asm', require('./languages/x86asm'));\nhljs.registerLanguage('xl', require('./languages/xl'));\nhljs.registerLanguage('xquery', require('./languages/xquery'));\nhljs.registerLanguage('zephir', require('./languages/zephir'));\n\nhljs.HighlightJS = hljs\nhljs.default = hljs\nmodule.exports = hljs;","/*\nLanguage: 1C:Enterprise\nAuthor: Stanislav Belov <stbelov@gmail.com>\nDescription: built-in language 1C:Enterprise (v7, v8)\nCategory: enterprise\n*/\n\nfunction _1c(hljs) {\n  // общий паттерн для определения идентификаторов\n  const UNDERSCORE_IDENT_RE = '[A-Za-zА-Яа-яёЁ_][A-Za-zА-Яа-яёЁ_0-9]+';\n\n  // v7 уникальные ключевые слова, отсутствующие в v8 ==> keyword\n  const v7_keywords =\n  'далее ';\n\n  // v8 ключевые слова ==> keyword\n  const v8_keywords =\n  'возврат вызватьисключение выполнить для если и из или иначе иначеесли исключение каждого конецесли '\n  + 'конецпопытки конеццикла не новый перейти перем по пока попытка прервать продолжить тогда цикл экспорт ';\n\n  // keyword : ключевые слова\n  const KEYWORD = v7_keywords + v8_keywords;\n\n  // v7 уникальные директивы, отсутствующие в v8 ==> meta-keyword\n  const v7_meta_keywords =\n  'загрузитьизфайла ';\n\n  // v8 ключевые слова в инструкциях препроцессора, директивах компиляции, аннотациях ==> meta-keyword\n  const v8_meta_keywords =\n  'вебклиент вместо внешнеесоединение клиент конецобласти мобильноеприложениеклиент мобильноеприложениесервер '\n  + 'наклиенте наклиентенасервере наклиентенасерверебезконтекста насервере насерверебезконтекста область перед '\n  + 'после сервер толстыйклиентобычноеприложение толстыйклиентуправляемоеприложение тонкийклиент ';\n\n  // meta-keyword : ключевые слова в инструкциях препроцессора, директивах компиляции, аннотациях\n  const METAKEYWORD = v7_meta_keywords + v8_meta_keywords;\n\n  // v7 системные константы ==> built_in\n  const v7_system_constants =\n  'разделительстраниц разделительстрок символтабуляции ';\n\n  // v7 уникальные методы глобального контекста, отсутствующие в v8 ==> built_in\n  const v7_global_context_methods =\n  'ansitooem oemtoansi ввестивидсубконто ввестиперечисление ввестипериод ввестиплансчетов выбранныйплансчетов '\n  + 'датагод датамесяц датачисло заголовоксистемы значениевстроку значениеизстроки каталогиб каталогпользователя '\n  + 'кодсимв конгода конецпериодаби конецрассчитанногопериодаби конецстандартногоинтервала конквартала конмесяца '\n  + 'коннедели лог лог10 максимальноеколичествосубконто названиеинтерфейса названиенабораправ назначитьвид '\n  + 'назначитьсчет найтиссылки началопериодаби началостандартногоинтервала начгода начквартала начмесяца '\n  + 'начнедели номерднягода номерднянедели номернеделигода обработкаожидания основнойжурналрасчетов '\n  + 'основнойплансчетов основнойязык очиститьокносообщений периодстр получитьвремята получитьдатута '\n  + 'получитьдокументта получитьзначенияотбора получитьпозициюта получитьпустоезначение получитьта '\n  + 'префиксавтонумерации пропись пустоезначение разм разобратьпозициюдокумента рассчитатьрегистрына '\n  + 'рассчитатьрегистрыпо симв создатьобъект статусвозврата стрколичествострок сформироватьпозициюдокумента '\n  + 'счетпокоду текущеевремя типзначения типзначениястр установитьтана установитьтапо фиксшаблон шаблон ';\n\n  // v8 методы глобального контекста ==> built_in\n  const v8_global_context_methods =\n  'acos asin atan base64значение base64строка cos exp log log10 pow sin sqrt tan xmlзначение xmlстрока '\n  + 'xmlтип xmlтипзнч активноеокно безопасныйрежим безопасныйрежимразделенияданных булево ввестидату ввестизначение '\n  + 'ввестистроку ввестичисло возможностьчтенияxml вопрос восстановитьзначение врег выгрузитьжурналрегистрации '\n  + 'выполнитьобработкуоповещения выполнитьпроверкуправдоступа вычислить год данныеформывзначение дата день деньгода '\n  + 'деньнедели добавитьмесяц заблокироватьданныедляредактирования заблокироватьработупользователя завершитьработусистемы '\n  + 'загрузитьвнешнююкомпоненту закрытьсправку записатьjson записатьxml записатьдатуjson записьжурналарегистрации '\n  + 'заполнитьзначениясвойств запроситьразрешениепользователя запуститьприложение запуститьсистему зафиксироватьтранзакцию '\n  + 'значениевданныеформы значениевстрокувнутр значениевфайл значениезаполнено значениеизстрокивнутр значениеизфайла '\n  + 'изxmlтипа импортмоделиxdto имякомпьютера имяпользователя инициализироватьпредопределенныеданные информацияобошибке '\n  + 'каталогбиблиотекимобильногоустройства каталогвременныхфайлов каталогдокументов каталогпрограммы кодироватьстроку '\n  + 'кодлокализацииинформационнойбазы кодсимвола командасистемы конецгода конецдня конецквартала конецмесяца конецминуты '\n  + 'конецнедели конецчаса конфигурациябазыданныхизмененадинамически конфигурацияизменена копироватьданныеформы '\n  + 'копироватьфайл краткоепредставлениеошибки лев макс местноевремя месяц мин минута монопольныйрежим найти '\n  + 'найтинедопустимыесимволыxml найтиокнопонавигационнойссылке найтипомеченныенаудаление найтипоссылкам найтифайлы '\n  + 'началогода началодня началоквартала началомесяца началоминуты началонедели началочаса начатьзапросразрешенияпользователя '\n  + 'начатьзапускприложения начатькопированиефайла начатьперемещениефайла начатьподключениевнешнейкомпоненты '\n  + 'начатьподключениерасширенияработыскриптографией начатьподключениерасширенияработысфайлами начатьпоискфайлов '\n  + 'начатьполучениекаталогавременныхфайлов начатьполучениекаталогадокументов начатьполучениерабочегокаталогаданныхпользователя '\n  + 'начатьполучениефайлов начатьпомещениефайла начатьпомещениефайлов начатьсозданиедвоичныхданныхизфайла начатьсозданиекаталога '\n  + 'начатьтранзакцию начатьудалениефайлов начатьустановкувнешнейкомпоненты начатьустановкурасширенияработыскриптографией '\n  + 'начатьустановкурасширенияработысфайлами неделягода необходимостьзавершениясоединения номерсеансаинформационнойбазы '\n  + 'номерсоединенияинформационнойбазы нрег нстр обновитьинтерфейс обновитьнумерациюобъектов обновитьповторноиспользуемыезначения '\n  + 'обработкапрерыванияпользователя объединитьфайлы окр описаниеошибки оповестить оповеститьобизменении '\n  + 'отключитьобработчикзапросанастроекклиенталицензирования отключитьобработчикожидания отключитьобработчикоповещения '\n  + 'открытьзначение открытьиндекссправки открытьсодержаниесправки открытьсправку открытьформу открытьформумодально '\n  + 'отменитьтранзакцию очиститьжурналрегистрации очиститьнастройкипользователя очиститьсообщения параметрыдоступа '\n  + 'перейтипонавигационнойссылке переместитьфайл подключитьвнешнююкомпоненту '\n  + 'подключитьобработчикзапросанастроекклиенталицензирования подключитьобработчикожидания подключитьобработчикоповещения '\n  + 'подключитьрасширениеработыскриптографией подключитьрасширениеработысфайлами подробноепредставлениеошибки '\n  + 'показатьвводдаты показатьвводзначения показатьвводстроки показатьвводчисла показатьвопрос показатьзначение '\n  + 'показатьинформациюобошибке показатьнакарте показатьоповещениепользователя показатьпредупреждение полноеимяпользователя '\n  + 'получитьcomобъект получитьxmlтип получитьадреспоместоположению получитьблокировкусеансов получитьвремязавершенияспящегосеанса '\n  + 'получитьвремязасыпанияпассивногосеанса получитьвремяожиданияблокировкиданных получитьданныевыбора '\n  + 'получитьдополнительныйпараметрклиенталицензирования получитьдопустимыекодылокализации получитьдопустимыечасовыепояса '\n  + 'получитьзаголовокклиентскогоприложения получитьзаголовоксистемы получитьзначенияотборажурналарегистрации '\n  + 'получитьидентификаторконфигурации получитьизвременногохранилища получитьимявременногофайла '\n  + 'получитьимяклиенталицензирования получитьинформациюэкрановклиента получитьиспользованиежурналарегистрации '\n  + 'получитьиспользованиесобытияжурналарегистрации получитькраткийзаголовокприложения получитьмакетоформления '\n  + 'получитьмаскувсефайлы получитьмаскувсефайлыклиента получитьмаскувсефайлысервера получитьместоположениепоадресу '\n  + 'получитьминимальнуюдлинупаролейпользователей получитьнавигационнуюссылку получитьнавигационнуюссылкуинформационнойбазы '\n  + 'получитьобновлениеконфигурациибазыданных получитьобновлениепредопределенныхданныхинформационнойбазы получитьобщиймакет '\n  + 'получитьобщуюформу получитьокна получитьоперативнуюотметкувремени получитьотключениебезопасногорежима '\n  + 'получитьпараметрыфункциональныхопцийинтерфейса получитьполноеимяпредопределенногозначения '\n  + 'получитьпредставлениянавигационныхссылок получитьпроверкусложностипаролейпользователей получитьразделительпути '\n  + 'получитьразделительпутиклиента получитьразделительпутисервера получитьсеансыинформационнойбазы '\n  + 'получитьскоростьклиентскогосоединения получитьсоединенияинформационнойбазы получитьсообщенияпользователю '\n  + 'получитьсоответствиеобъектаиформы получитьсоставстандартногоинтерфейсаodata получитьструктурухранениябазыданных '\n  + 'получитьтекущийсеансинформационнойбазы получитьфайл получитьфайлы получитьформу получитьфункциональнуюопцию '\n  + 'получитьфункциональнуюопциюинтерфейса получитьчасовойпоясинформационнойбазы пользователиос поместитьвовременноехранилище '\n  + 'поместитьфайл поместитьфайлы прав праводоступа предопределенноезначение представлениекодалокализации представлениепериода '\n  + 'представлениеправа представлениеприложения представлениесобытияжурналарегистрации представлениечасовогопояса предупреждение '\n  + 'прекратитьработусистемы привилегированныйрежим продолжитьвызов прочитатьjson прочитатьxml прочитатьдатуjson пустаястрока '\n  + 'рабочийкаталогданныхпользователя разблокироватьданныедляредактирования разделитьфайл разорватьсоединениесвнешнимисточникомданных '\n  + 'раскодироватьстроку рольдоступна секунда сигнал символ скопироватьжурналрегистрации смещениелетнеговремени '\n  + 'смещениестандартноговремени соединитьбуферыдвоичныхданных создатькаталог создатьфабрикуxdto сокрл сокрлп сокрп сообщить '\n  + 'состояние сохранитьзначение сохранитьнастройкипользователя сред стрдлина стрзаканчиваетсяна стрзаменить стрнайти стрначинаетсяс '\n  + 'строка строкасоединенияинформационнойбазы стрполучитьстроку стрразделить стрсоединить стрсравнить стрчисловхождений '\n  + 'стрчислострок стршаблон текущаядата текущаядатасеанса текущаяуниверсальнаядата текущаяуниверсальнаядатавмиллисекундах '\n  + 'текущийвариантинтерфейсаклиентскогоприложения текущийвариантосновногошрифтаклиентскогоприложения текущийкодлокализации '\n  + 'текущийрежимзапуска текущийязык текущийязыксистемы тип типзнч транзакцияактивна трег удалитьданныеинформационнойбазы '\n  + 'удалитьизвременногохранилища удалитьобъекты удалитьфайлы универсальноевремя установитьбезопасныйрежим '\n  + 'установитьбезопасныйрежимразделенияданных установитьблокировкусеансов установитьвнешнююкомпоненту '\n  + 'установитьвремязавершенияспящегосеанса установитьвремязасыпанияпассивногосеанса установитьвремяожиданияблокировкиданных '\n  + 'установитьзаголовокклиентскогоприложения установитьзаголовоксистемы установитьиспользованиежурналарегистрации '\n  + 'установитьиспользованиесобытияжурналарегистрации установитькраткийзаголовокприложения '\n  + 'установитьминимальнуюдлинупаролейпользователей установитьмонопольныйрежим установитьнастройкиклиенталицензирования '\n  + 'установитьобновлениепредопределенныхданныхинформационнойбазы установитьотключениебезопасногорежима '\n  + 'установитьпараметрыфункциональныхопцийинтерфейса установитьпривилегированныйрежим '\n  + 'установитьпроверкусложностипаролейпользователей установитьрасширениеработыскриптографией '\n  + 'установитьрасширениеработысфайлами установитьсоединениесвнешнимисточникомданных установитьсоответствиеобъектаиформы '\n  + 'установитьсоставстандартногоинтерфейсаodata установитьчасовойпоясинформационнойбазы установитьчасовойпояссеанса '\n  + 'формат цел час часовойпояс часовойпояссеанса число числопрописью этоадресвременногохранилища ';\n\n  // v8 свойства глобального контекста ==> built_in\n  const v8_global_context_property =\n  'wsссылки библиотекакартинок библиотекамакетовоформлениякомпоновкиданных библиотекастилей бизнеспроцессы '\n  + 'внешниеисточникиданных внешниеобработки внешниеотчеты встроенныепокупки главныйинтерфейс главныйстиль '\n  + 'документы доставляемыеуведомления журналыдокументов задачи информацияобинтернетсоединении использованиерабочейдаты '\n  + 'историяработыпользователя константы критерииотбора метаданные обработки отображениерекламы отправкадоставляемыхуведомлений '\n  + 'отчеты панельзадачос параметрзапуска параметрысеанса перечисления планывидоврасчета планывидовхарактеристик '\n  + 'планыобмена планысчетов полнотекстовыйпоиск пользователиинформационнойбазы последовательности проверкавстроенныхпокупок '\n  + 'рабочаядата расширенияконфигурации регистрыбухгалтерии регистрынакопления регистрырасчета регистрысведений '\n  + 'регламентныезадания сериализаторxdto справочники средствагеопозиционирования средствакриптографии средствамультимедиа '\n  + 'средстваотображениярекламы средствапочты средствателефонии фабрикаxdto файловыепотоки фоновыезадания хранилищанастроек '\n  + 'хранилищевариантовотчетов хранилищенастроекданныхформ хранилищеобщихнастроек хранилищепользовательскихнастроекдинамическихсписков '\n  + 'хранилищепользовательскихнастроекотчетов хранилищесистемныхнастроек ';\n\n  // built_in : встроенные или библиотечные объекты (константы, классы, функции)\n  const BUILTIN =\n  v7_system_constants\n  + v7_global_context_methods + v8_global_context_methods\n  + v8_global_context_property;\n\n  // v8 системные наборы значений ==> class\n  const v8_system_sets_of_values =\n  'webцвета windowsцвета windowsшрифты библиотекакартинок рамкистиля символы цветастиля шрифтыстиля ';\n\n  // v8 системные перечисления - интерфейсные ==> class\n  const v8_system_enums_interface =\n  'автоматическоесохранениеданныхформывнастройках автонумерациявформе автораздвижениесерий '\n  + 'анимациядиаграммы вариантвыравниванияэлементовизаголовков вариантуправлениявысотойтаблицы '\n  + 'вертикальнаяпрокруткаформы вертикальноеположение вертикальноеположениеэлемента видгруппыформы '\n  + 'виддекорацииформы виддополненияэлементаформы видизмененияданных видкнопкиформы видпереключателя '\n  + 'видподписейкдиаграмме видполяформы видфлажка влияниеразмеранапузырекдиаграммы горизонтальноеположение '\n  + 'горизонтальноеположениеэлемента группировкаколонок группировкаподчиненныхэлементовформы '\n  + 'группыиэлементы действиеперетаскивания дополнительныйрежимотображения допустимыедействияперетаскивания '\n  + 'интервалмеждуэлементамиформы использованиевывода использованиеполосыпрокрутки '\n  + 'используемоезначениеточкибиржевойдиаграммы историявыборапривводе источникзначенийоситочекдиаграммы '\n  + 'источникзначенияразмерапузырькадиаграммы категориягруппыкоманд максимумсерий начальноеотображениедерева '\n  + 'начальноеотображениесписка обновлениетекстаредактирования ориентациядендрограммы ориентациядиаграммы '\n  + 'ориентацияметокдиаграммы ориентацияметоксводнойдиаграммы ориентацияэлементаформы отображениевдиаграмме '\n  + 'отображениевлегендедиаграммы отображениегруппыкнопок отображениезаголовкашкалыдиаграммы '\n  + 'отображениезначенийсводнойдиаграммы отображениезначенияизмерительнойдиаграммы '\n  + 'отображениеинтерваладиаграммыганта отображениекнопки отображениекнопкивыбора отображениеобсужденийформы '\n  + 'отображениеобычнойгруппы отображениеотрицательныхзначенийпузырьковойдиаграммы отображениепанелипоиска '\n  + 'отображениеподсказки отображениепредупрежденияприредактировании отображениеразметкиполосырегулирования '\n  + 'отображениестраницформы отображениетаблицы отображениетекстазначениядиаграммыганта '\n  + 'отображениеуправленияобычнойгруппы отображениефигурыкнопки палитрацветовдиаграммы поведениеобычнойгруппы '\n  + 'поддержкамасштабадендрограммы поддержкамасштабадиаграммыганта поддержкамасштабасводнойдиаграммы '\n  + 'поисквтаблицепривводе положениезаголовкаэлементаформы положениекартинкикнопкиформы '\n  + 'положениекартинкиэлементаграфическойсхемы положениекоманднойпанелиформы положениекоманднойпанелиэлементаформы '\n  + 'положениеопорнойточкиотрисовки положениеподписейкдиаграмме положениеподписейшкалызначенийизмерительнойдиаграммы '\n  + 'положениесостоянияпросмотра положениестрокипоиска положениетекстасоединительнойлинии положениеуправленияпоиском '\n  + 'положениешкалывремени порядокотображенияточекгоризонтальнойгистограммы порядоксерийвлегендедиаграммы '\n  + 'размеркартинки расположениезаголовкашкалыдиаграммы растягиваниеповертикалидиаграммыганта '\n  + 'режимавтоотображениясостояния режимвводастроктаблицы режимвыборанезаполненного режимвыделениядаты '\n  + 'режимвыделениястрокитаблицы режимвыделениятаблицы режимизмененияразмера режимизменениясвязанногозначения '\n  + 'режимиспользованиядиалогапечати режимиспользованияпараметракоманды режиммасштабированияпросмотра '\n  + 'режимосновногоокнаклиентскогоприложения режимоткрытияокнаформы режимотображениявыделения '\n  + 'режимотображениягеографическойсхемы режимотображениязначенийсерии режимотрисовкисеткиграфическойсхемы '\n  + 'режимполупрозрачностидиаграммы режимпробеловдиаграммы режимразмещениянастранице режимредактированияколонки '\n  + 'режимсглаживаниядиаграммы режимсглаживанияиндикатора режимсписказадач сквозноевыравнивание '\n  + 'сохранениеданныхформывнастройках способзаполнениятекстазаголовкашкалыдиаграммы '\n  + 'способопределенияограничивающегозначениядиаграммы стандартнаягруппакоманд стандартноеоформление '\n  + 'статусоповещенияпользователя стильстрелки типаппроксимациилиниитрендадиаграммы типдиаграммы '\n  + 'типединицышкалывремени типимпортасерийслоягеографическойсхемы типлиниигеографическойсхемы типлиниидиаграммы '\n  + 'типмаркерагеографическойсхемы типмаркерадиаграммы типобластиоформления '\n  + 'типорганизацииисточникаданныхгеографическойсхемы типотображениясериислоягеографическойсхемы '\n  + 'типотображенияточечногообъектагеографическойсхемы типотображенияшкалыэлементалегендыгеографическойсхемы '\n  + 'типпоискаобъектовгеографическойсхемы типпроекциигеографическойсхемы типразмещенияизмерений '\n  + 'типразмещенияреквизитовизмерений типрамкиэлементауправления типсводнойдиаграммы '\n  + 'типсвязидиаграммыганта типсоединениязначенийпосериямдиаграммы типсоединенияточекдиаграммы '\n  + 'типсоединительнойлинии типстороныэлементаграфическойсхемы типформыотчета типшкалырадарнойдиаграммы '\n  + 'факторлиниитрендадиаграммы фигуракнопки фигурыграфическойсхемы фиксациявтаблице форматдняшкалывремени '\n  + 'форматкартинки ширинаподчиненныхэлементовформы ';\n\n  // v8 системные перечисления - свойства прикладных объектов ==> class\n  const v8_system_enums_objects_properties =\n  'виддвижениябухгалтерии виддвижениянакопления видпериодарегистрарасчета видсчета видточкимаршрутабизнеспроцесса '\n  + 'использованиеагрегатарегистранакопления использованиегруппиэлементов использованиережимапроведения '\n  + 'использованиесреза периодичностьагрегатарегистранакопления режимавтовремя режимзаписидокумента режимпроведениядокумента ';\n\n  // v8 системные перечисления - планы обмена ==> class\n  const v8_system_enums_exchange_plans =\n  'авторегистрацияизменений допустимыйномерсообщения отправкаэлементаданных получениеэлементаданных ';\n\n  // v8 системные перечисления - табличный документ ==> class\n  const v8_system_enums_tabular_document =\n  'использованиерасшифровкитабличногодокумента ориентациястраницы положениеитоговколоноксводнойтаблицы '\n  + 'положениеитоговстроксводнойтаблицы положениетекстаотносительнокартинки расположениезаголовкагруппировкитабличногодокумента '\n  + 'способчтениязначенийтабличногодокумента типдвустороннейпечати типзаполненияобластитабличногодокумента '\n  + 'типкурсоровтабличногодокумента типлиниирисункатабличногодокумента типлинииячейкитабличногодокумента '\n  + 'типнаправленияпереходатабличногодокумента типотображениявыделениятабличногодокумента типотображениялинийсводнойтаблицы '\n  + 'типразмещениятекстатабличногодокумента типрисункатабличногодокумента типсмещениятабличногодокумента '\n  + 'типузоратабличногодокумента типфайлатабличногодокумента точностьпечати чередованиерасположениястраниц ';\n\n  // v8 системные перечисления - планировщик ==> class\n  const v8_system_enums_sheduler =\n  'отображениевремениэлементовпланировщика ';\n\n  // v8 системные перечисления - форматированный документ ==> class\n  const v8_system_enums_formatted_document =\n  'типфайлаформатированногодокумента ';\n\n  // v8 системные перечисления - запрос ==> class\n  const v8_system_enums_query =\n  'обходрезультатазапроса типзаписизапроса ';\n\n  // v8 системные перечисления - построитель отчета ==> class\n  const v8_system_enums_report_builder =\n  'видзаполнениярасшифровкипостроителяотчета типдобавленияпредставлений типизмеренияпостроителяотчета типразмещенияитогов ';\n\n  // v8 системные перечисления - работа с файлами ==> class\n  const v8_system_enums_files =\n  'доступкфайлу режимдиалогавыборафайла режимоткрытияфайла ';\n\n  // v8 системные перечисления - построитель запроса ==> class\n  const v8_system_enums_query_builder =\n  'типизмеренияпостроителязапроса ';\n\n  // v8 системные перечисления - анализ данных ==> class\n  const v8_system_enums_data_analysis =\n  'видданныханализа методкластеризации типединицыинтервалавременианализаданных типзаполнениятаблицырезультатаанализаданных '\n  + 'типиспользованиячисловыхзначенийанализаданных типисточникаданныхпоискаассоциаций типколонкианализаданныхдереворешений '\n  + 'типколонкианализаданныхкластеризация типколонкианализаданныхобщаястатистика типколонкианализаданныхпоискассоциаций '\n  + 'типколонкианализаданныхпоискпоследовательностей типколонкимоделипрогноза типмерырасстоянияанализаданных '\n  + 'типотсеченияправилассоциации типполяанализаданных типстандартизациианализаданных типупорядочиванияправилассоциациианализаданных '\n  + 'типупорядочиванияшаблоновпоследовательностейанализаданных типупрощениядереварешений ';\n\n  // v8 системные перечисления - xml, json, xs, dom, xdto, web-сервисы ==> class\n  const v8_system_enums_xml_json_xs_dom_xdto_ws =\n  'wsнаправлениепараметра вариантxpathxs вариантзаписидатыjson вариантпростоготипаxs видгруппымоделиxs видфасетаxdto '\n  + 'действиепостроителяdom завершенностьпростоготипаxs завершенностьсоставноготипаxs завершенностьсхемыxs запрещенныеподстановкиxs '\n  + 'исключениягруппподстановкиxs категорияиспользованияатрибутаxs категорияограниченияидентичностиxs категорияограниченияпространствименxs '\n  + 'методнаследованияxs модельсодержимогоxs назначениетипаxml недопустимыеподстановкиxs обработкапробельныхсимволовxs обработкасодержимогоxs '\n  + 'ограничениезначенияxs параметрыотбораузловdom переносстрокjson позициявдокументеdom пробельныесимволыxml типатрибутаxml типзначенияjson '\n  + 'типканоническогоxml типкомпонентыxs типпроверкиxml типрезультатаdomxpath типузлаdom типузлаxml формаxml формапредставленияxs '\n  + 'форматдатыjson экранированиесимволовjson ';\n\n  // v8 системные перечисления - система компоновки данных ==> class\n  const v8_system_enums_data_composition_system =\n  'видсравнениякомпоновкиданных действиеобработкирасшифровкикомпоновкиданных направлениесортировкикомпоновкиданных '\n  + 'расположениевложенныхэлементоврезультатакомпоновкиданных расположениеитоговкомпоновкиданных расположениегруппировкикомпоновкиданных '\n  + 'расположениеполейгруппировкикомпоновкиданных расположениеполякомпоновкиданных расположениереквизитовкомпоновкиданных '\n  + 'расположениересурсовкомпоновкиданных типбухгалтерскогоостаткакомпоновкиданных типвыводатекстакомпоновкиданных '\n  + 'типгруппировкикомпоновкиданных типгруппыэлементовотборакомпоновкиданных типдополненияпериодакомпоновкиданных '\n  + 'типзаголовкаполейкомпоновкиданных типмакетагруппировкикомпоновкиданных типмакетаобластикомпоновкиданных типостаткакомпоновкиданных '\n  + 'типпериодакомпоновкиданных типразмещениятекстакомпоновкиданных типсвязинаборовданныхкомпоновкиданных типэлементарезультатакомпоновкиданных '\n  + 'расположениелегендыдиаграммыкомпоновкиданных типпримененияотборакомпоновкиданных режимотображенияэлементанастройкикомпоновкиданных '\n  + 'режимотображениянастроеккомпоновкиданных состояниеэлементанастройкикомпоновкиданных способвосстановлениянастроеккомпоновкиданных '\n  + 'режимкомпоновкирезультата использованиепараметракомпоновкиданных автопозицияресурсовкомпоновкиданных '\n  + 'вариантиспользованиягруппировкикомпоновкиданных расположениересурсоввдиаграммекомпоновкиданных фиксациякомпоновкиданных '\n  + 'использованиеусловногооформлениякомпоновкиданных ';\n\n  // v8 системные перечисления - почта ==> class\n  const v8_system_enums_email =\n  'важностьинтернетпочтовогосообщения обработкатекстаинтернетпочтовогосообщения способкодированияинтернетпочтовоговложения '\n  + 'способкодированиянеasciiсимволовинтернетпочтовогосообщения типтекстапочтовогосообщения протоколинтернетпочты '\n  + 'статусразборапочтовогосообщения ';\n\n  // v8 системные перечисления - журнал регистрации ==> class\n  const v8_system_enums_logbook =\n  'режимтранзакциизаписижурналарегистрации статустранзакциизаписижурналарегистрации уровеньжурналарегистрации ';\n\n  // v8 системные перечисления - криптография ==> class\n  const v8_system_enums_cryptography =\n  'расположениехранилищасертификатовкриптографии режимвключениясертификатовкриптографии режимпроверкисертификатакриптографии '\n  + 'типхранилищасертификатовкриптографии ';\n\n  // v8 системные перечисления - ZIP ==> class\n  const v8_system_enums_zip =\n  'кодировкаименфайловвzipфайле методсжатияzip методшифрованияzip режимвосстановленияпутейфайловzip режимобработкиподкаталоговzip '\n  + 'режимсохраненияпутейzip уровеньсжатияzip ';\n\n  // v8 системные перечисления -\n  // Блокировка данных, Фоновые задания, Автоматизированное тестирование,\n  // Доставляемые уведомления, Встроенные покупки, Интернет, Работа с двоичными данными ==> class\n  const v8_system_enums_other =\n  'звуковоеоповещение направлениепереходакстроке позициявпотоке порядокбайтов режимблокировкиданных режимуправленияблокировкойданных '\n  + 'сервисвстроенныхпокупок состояниефоновогозадания типподписчикадоставляемыхуведомлений уровеньиспользованиязащищенногосоединенияftp ';\n\n  // v8 системные перечисления - схема запроса ==> class\n  const v8_system_enums_request_schema =\n  'направлениепорядкасхемызапроса типдополненияпериодамисхемызапроса типконтрольнойточкисхемызапроса типобъединениясхемызапроса '\n  + 'типпараметрадоступнойтаблицысхемызапроса типсоединениясхемызапроса ';\n\n  // v8 системные перечисления - свойства объектов метаданных ==> class\n  const v8_system_enums_properties_of_metadata_objects =\n  'httpметод автоиспользованиеобщегореквизита автопрефиксномеразадачи вариантвстроенногоязыка видиерархии видрегистранакопления '\n  + 'видтаблицывнешнегоисточникаданных записьдвиженийприпроведении заполнениепоследовательностей индексирование '\n  + 'использованиебазыпланавидоврасчета использованиебыстроговыбора использованиеобщегореквизита использованиеподчинения '\n  + 'использованиеполнотекстовогопоиска использованиеразделяемыхданныхобщегореквизита использованиереквизита '\n  + 'назначениеиспользованияприложения назначениерасширенияконфигурации направлениепередачи обновлениепредопределенныхданных '\n  + 'оперативноепроведение основноепредставлениевидарасчета основноепредставлениевидахарактеристики основноепредставлениезадачи '\n  + 'основноепредставлениепланаобмена основноепредставлениесправочника основноепредставлениесчета перемещениеграницыприпроведении '\n  + 'периодичностьномерабизнеспроцесса периодичностьномерадокумента периодичностьрегистрарасчета периодичностьрегистрасведений '\n  + 'повторноеиспользованиевозвращаемыхзначений полнотекстовыйпоискпривводепостроке принадлежностьобъекта проведение '\n  + 'разделениеаутентификацииобщегореквизита разделениеданныхобщегореквизита разделениерасширенийконфигурацииобщегореквизита '\n  + 'режимавтонумерацииобъектов режимзаписирегистра режимиспользованиямодальности '\n  + 'режимиспользованиясинхронныхвызововрасширенийплатформыивнешнихкомпонент режимповторногоиспользованиясеансов '\n  + 'режимполученияданныхвыборапривводепостроке режимсовместимости режимсовместимостиинтерфейса '\n  + 'режимуправленияблокировкойданныхпоумолчанию сериикодовпланавидовхарактеристик сериикодовпланасчетов '\n  + 'сериикодовсправочника созданиепривводе способвыбора способпоискастрокипривводепостроке способредактирования '\n  + 'типданныхтаблицывнешнегоисточникаданных типкодапланавидоврасчета типкодасправочника типмакета типномерабизнеспроцесса '\n  + 'типномерадокумента типномеразадачи типформы удалениедвижений ';\n\n  // v8 системные перечисления - разные ==> class\n  const v8_system_enums_differents =\n  'важностьпроблемыприменениярасширенияконфигурации вариантинтерфейсаклиентскогоприложения вариантмасштабаформклиентскогоприложения '\n  + 'вариантосновногошрифтаклиентскогоприложения вариантстандартногопериода вариантстандартнойдатыначала видграницы видкартинки '\n  + 'видотображенияполнотекстовогопоиска видрамки видсравнения видцвета видчисловогозначения видшрифта допустимаядлина допустимыйзнак '\n  + 'использованиеbyteordermark использованиеметаданныхполнотекстовогопоиска источникрасширенийконфигурации клавиша кодвозвратадиалога '\n  + 'кодировкаxbase кодировкатекста направлениепоиска направлениесортировки обновлениепредопределенныхданных обновлениеприизмененииданных '\n  + 'отображениепанелиразделов проверказаполнения режимдиалогавопрос режимзапускаклиентскогоприложения режимокругления режимоткрытияформприложения '\n  + 'режимполнотекстовогопоиска скоростьклиентскогосоединения состояниевнешнегоисточникаданных состояниеобновленияконфигурациибазыданных '\n  + 'способвыборасертификатаwindows способкодированиястроки статуссообщения типвнешнейкомпоненты типплатформы типповеденияклавишиenter '\n  + 'типэлементаинформацииовыполненииобновленияконфигурациибазыданных уровеньизоляциитранзакций хешфункция частидаты';\n\n  // class: встроенные наборы значений, системные перечисления (содержат дочерние значения, обращения к которым через разыменование)\n  const CLASS =\n  v8_system_sets_of_values\n  + v8_system_enums_interface\n  + v8_system_enums_objects_properties\n  + v8_system_enums_exchange_plans\n  + v8_system_enums_tabular_document\n  + v8_system_enums_sheduler\n  + v8_system_enums_formatted_document\n  + v8_system_enums_query\n  + v8_system_enums_report_builder\n  + v8_system_enums_files\n  + v8_system_enums_query_builder\n  + v8_system_enums_data_analysis\n  + v8_system_enums_xml_json_xs_dom_xdto_ws\n  + v8_system_enums_data_composition_system\n  + v8_system_enums_email\n  + v8_system_enums_logbook\n  + v8_system_enums_cryptography\n  + v8_system_enums_zip\n  + v8_system_enums_other\n  + v8_system_enums_request_schema\n  + v8_system_enums_properties_of_metadata_objects\n  + v8_system_enums_differents;\n\n  // v8 общие объекты (у объектов есть конструктор, экземпляры создаются методом НОВЫЙ) ==> type\n  const v8_shared_object =\n  'comобъект ftpсоединение httpзапрос httpсервисответ httpсоединение wsопределения wsпрокси xbase анализданных аннотацияxs '\n  + 'блокировкаданных буфердвоичныхданных включениеxs выражениекомпоновкиданных генераторслучайныхчисел географическаясхема '\n  + 'географическиекоординаты графическаясхема группамоделиxs данныерасшифровкикомпоновкиданных двоичныеданные дендрограмма '\n  + 'диаграмма диаграммаганта диалогвыборафайла диалогвыборацвета диалогвыборашрифта диалограсписаниярегламентногозадания '\n  + 'диалогредактированиястандартногопериода диапазон документdom документhtml документацияxs доставляемоеуведомление '\n  + 'записьdom записьfastinfoset записьhtml записьjson записьxml записьzipфайла записьданных записьтекста записьузловdom '\n  + 'запрос защищенноесоединениеopenssl значенияполейрасшифровкикомпоновкиданных извлечениетекста импортxs интернетпочта '\n  + 'интернетпочтовоесообщение интернетпочтовыйпрофиль интернетпрокси интернетсоединение информациядляприложенияxs '\n  + 'использованиеатрибутаxs использованиесобытияжурналарегистрации источникдоступныхнастроеккомпоновкиданных '\n  + 'итераторузловdom картинка квалификаторыдаты квалификаторыдвоичныхданных квалификаторыстроки квалификаторычисла '\n  + 'компоновщикмакетакомпоновкиданных компоновщикнастроеккомпоновкиданных конструктормакетаоформлениякомпоновкиданных '\n  + 'конструкторнастроеккомпоновкиданных конструкторформатнойстроки линия макеткомпоновкиданных макетобластикомпоновкиданных '\n  + 'макетоформлениякомпоновкиданных маскаxs менеджеркриптографии наборсхемxml настройкикомпоновкиданных настройкисериализацииjson '\n  + 'обработкакартинок обработкарасшифровкикомпоновкиданных обходдереваdom объявлениеатрибутаxs объявлениенотацииxs '\n  + 'объявлениеэлементаxs описаниеиспользованиясобытиядоступжурналарегистрации '\n  + 'описаниеиспользованиясобытияотказвдоступежурналарегистрации описаниеобработкирасшифровкикомпоновкиданных '\n  + 'описаниепередаваемогофайла описаниетипов определениегруппыатрибутовxs определениегруппымоделиxs '\n  + 'определениеограниченияидентичностиxs определениепростоготипаxs определениесоставноготипаxs определениетипадокументаdom '\n  + 'определенияxpathxs отборкомпоновкиданных пакетотображаемыхдокументов параметрвыбора параметркомпоновкиданных '\n  + 'параметрызаписиjson параметрызаписиxml параметрычтенияxml переопределениеxs планировщик полеанализаданных '\n  + 'полекомпоновкиданных построительdom построительзапроса построительотчета построительотчетаанализаданных '\n  + 'построительсхемxml поток потоквпамяти почта почтовоесообщение преобразованиеxsl преобразованиекканоническомуxml '\n  + 'процессорвыводарезультатакомпоновкиданныхвколлекциюзначений процессорвыводарезультатакомпоновкиданныхвтабличныйдокумент '\n  + 'процессоркомпоновкиданных разыменовательпространствименdom рамка расписаниерегламентногозадания расширенноеимяxml '\n  + 'результатчтенияданных своднаядиаграмма связьпараметравыбора связьпотипу связьпотипукомпоновкиданных сериализаторxdto '\n  + 'сертификатклиентаwindows сертификатклиентафайл сертификаткриптографии сертификатыудостоверяющихцентровwindows '\n  + 'сертификатыудостоверяющихцентровфайл сжатиеданных системнаяинформация сообщениепользователю сочетаниеклавиш '\n  + 'сравнениезначений стандартнаядатаначала стандартныйпериод схемаxml схемакомпоновкиданных табличныйдокумент '\n  + 'текстовыйдокумент тестируемоеприложение типданныхxml уникальныйидентификатор фабрикаxdto файл файловыйпоток '\n  + 'фасетдлиныxs фасетколичестваразрядовдробнойчастиxs фасетмаксимальноговключающегозначенияxs '\n  + 'фасетмаксимальногоисключающегозначенияxs фасетмаксимальнойдлиныxs фасетминимальноговключающегозначенияxs '\n  + 'фасетминимальногоисключающегозначенияxs фасетминимальнойдлиныxs фасетобразцаxs фасетобщегоколичестваразрядовxs '\n  + 'фасетперечисленияxs фасетпробельныхсимволовxs фильтрузловdom форматированнаястрока форматированныйдокумент '\n  + 'фрагментxs хешированиеданных хранилищезначения цвет чтениеfastinfoset чтениеhtml чтениеjson чтениеxml чтениеzipфайла '\n  + 'чтениеданных чтениетекста чтениеузловdom шрифт элементрезультатакомпоновкиданных ';\n\n  // v8 универсальные коллекции значений ==> type\n  const v8_universal_collection =\n  'comsafearray деревозначений массив соответствие списокзначений структура таблицазначений фиксированнаяструктура '\n  + 'фиксированноесоответствие фиксированныймассив ';\n\n  // type : встроенные типы\n  const TYPE =\n  v8_shared_object\n  + v8_universal_collection;\n\n  // literal : примитивные типы\n  const LITERAL = 'null истина ложь неопределено';\n\n  // number : числа\n  const NUMBERS = hljs.inherit(hljs.NUMBER_MODE);\n\n  // string : строки\n  const STRINGS = {\n    className: 'string',\n    begin: '\"|\\\\|',\n    end: '\"|$',\n    contains: [ { begin: '\"\"' } ]\n  };\n\n  // number : даты\n  const DATE = {\n    begin: \"'\",\n    end: \"'\",\n    excludeBegin: true,\n    excludeEnd: true,\n    contains: [\n      {\n        className: 'number',\n        begin: '\\\\d{4}([\\\\.\\\\\\\\/:-]?\\\\d{2}){0,5}'\n      }\n    ]\n  };\n\n  const PUNCTUATION = {\n    match: /[;()+\\-:=,]/,\n    className: \"punctuation\",\n    relevance: 0\n  };\n\n  // comment : комментарии\n  const COMMENTS = hljs.inherit(hljs.C_LINE_COMMENT_MODE);\n\n  // meta : инструкции препроцессора, директивы компиляции\n  const META = {\n    className: 'meta',\n\n    begin: '#|&',\n    end: '$',\n    keywords: {\n      $pattern: UNDERSCORE_IDENT_RE,\n      keyword: KEYWORD + METAKEYWORD\n    },\n    contains: [ COMMENTS ]\n  };\n\n  // symbol : метка goto\n  const SYMBOL = {\n    className: 'symbol',\n    begin: '~',\n    end: ';|:',\n    excludeEnd: true\n  };\n\n  // function : объявление процедур и функций\n  const FUNCTION = {\n    className: 'function',\n    variants: [\n      {\n        begin: 'процедура|функция',\n        end: '\\\\)',\n        keywords: 'процедура функция'\n      },\n      {\n        begin: 'конецпроцедуры|конецфункции',\n        keywords: 'конецпроцедуры конецфункции'\n      }\n    ],\n    contains: [\n      {\n        begin: '\\\\(',\n        end: '\\\\)',\n        endsParent: true,\n        contains: [\n          {\n            className: 'params',\n            begin: UNDERSCORE_IDENT_RE,\n            end: ',',\n            excludeEnd: true,\n            endsWithParent: true,\n            keywords: {\n              $pattern: UNDERSCORE_IDENT_RE,\n              keyword: 'знач',\n              literal: LITERAL\n            },\n            contains: [\n              NUMBERS,\n              STRINGS,\n              DATE\n            ]\n          },\n          COMMENTS\n        ]\n      },\n      hljs.inherit(hljs.TITLE_MODE, { begin: UNDERSCORE_IDENT_RE })\n    ]\n  };\n\n  return {\n    name: '1C:Enterprise',\n    case_insensitive: true,\n    keywords: {\n      $pattern: UNDERSCORE_IDENT_RE,\n      keyword: KEYWORD,\n      built_in: BUILTIN,\n      class: CLASS,\n      type: TYPE,\n      literal: LITERAL\n    },\n    contains: [\n      META,\n      FUNCTION,\n      COMMENTS,\n      SYMBOL,\n      NUMBERS,\n      STRINGS,\n      DATE,\n      PUNCTUATION\n    ]\n  };\n}\n\nmodule.exports = _1c;\n","/*\nLanguage: Augmented Backus-Naur Form\nAuthor: Alex McKibben <alex@nullscope.net>\nWebsite: https://tools.ietf.org/html/rfc5234\nCategory: syntax\nAudit: 2020\n*/\n\n/** @type LanguageFn */\nfunction abnf(hljs) {\n  const regex = hljs.regex;\n  const IDENT = /^[a-zA-Z][a-zA-Z0-9-]*/;\n\n  const KEYWORDS = [\n    \"ALPHA\",\n    \"BIT\",\n    \"CHAR\",\n    \"CR\",\n    \"CRLF\",\n    \"CTL\",\n    \"DIGIT\",\n    \"DQUOTE\",\n    \"HEXDIG\",\n    \"HTAB\",\n    \"LF\",\n    \"LWSP\",\n    \"OCTET\",\n    \"SP\",\n    \"VCHAR\",\n    \"WSP\"\n  ];\n\n  const COMMENT = hljs.COMMENT(/;/, /$/);\n\n  const TERMINAL_BINARY = {\n    scope: \"symbol\",\n    match: /%b[0-1]+(-[0-1]+|(\\.[0-1]+)+)?/\n  };\n\n  const TERMINAL_DECIMAL = {\n    scope: \"symbol\",\n    match: /%d[0-9]+(-[0-9]+|(\\.[0-9]+)+)?/\n  };\n\n  const TERMINAL_HEXADECIMAL = {\n    scope: \"symbol\",\n    match: /%x[0-9A-F]+(-[0-9A-F]+|(\\.[0-9A-F]+)+)?/\n  };\n\n  const CASE_SENSITIVITY = {\n    scope: \"symbol\",\n    match: /%[si](?=\".*\")/\n  };\n\n  const RULE_DECLARATION = {\n    scope: \"attribute\",\n    match: regex.concat(IDENT, /(?=\\s*=)/)\n  };\n\n  const ASSIGNMENT = {\n    scope: \"operator\",\n    match: /=\\/?/\n  };\n\n  return {\n    name: 'Augmented Backus-Naur Form',\n    illegal: /[!@#$^&',?+~`|:]/,\n    keywords: KEYWORDS,\n    contains: [\n      ASSIGNMENT,\n      RULE_DECLARATION,\n      COMMENT,\n      TERMINAL_BINARY,\n      TERMINAL_DECIMAL,\n      TERMINAL_HEXADECIMAL,\n      CASE_SENSITIVITY,\n      hljs.QUOTE_STRING_MODE,\n      hljs.NUMBER_MODE\n    ]\n  };\n}\n\nmodule.exports = abnf;\n","/*\n Language: Apache Access Log\n Author: Oleg Efimov <efimovov@gmail.com>\n Description: Apache/Nginx Access Logs\n Website: https://httpd.apache.org/docs/2.4/logs.html#accesslog\n Category: web, logs\n Audit: 2020\n */\n\n/** @type LanguageFn */\nfunction accesslog(hljs) {\n  const regex = hljs.regex;\n  // https://developer.mozilla.org/en-US/docs/Web/HTTP/Methods\n  const HTTP_VERBS = [\n    \"GET\",\n    \"POST\",\n    \"HEAD\",\n    \"PUT\",\n    \"DELETE\",\n    \"CONNECT\",\n    \"OPTIONS\",\n    \"PATCH\",\n    \"TRACE\"\n  ];\n  return {\n    name: 'Apache Access Log',\n    contains: [\n      // IP\n      {\n        className: 'number',\n        begin: /^\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}(:\\d{1,5})?\\b/,\n        relevance: 5\n      },\n      // Other numbers\n      {\n        className: 'number',\n        begin: /\\b\\d+\\b/,\n        relevance: 0\n      },\n      // Requests\n      {\n        className: 'string',\n        begin: regex.concat(/\"/, regex.either(...HTTP_VERBS)),\n        end: /\"/,\n        keywords: HTTP_VERBS,\n        illegal: /\\n/,\n        relevance: 5,\n        contains: [\n          {\n            begin: /HTTP\\/[12]\\.\\d'/,\n            relevance: 5\n          }\n        ]\n      },\n      // Dates\n      {\n        className: 'string',\n        // dates must have a certain length, this prevents matching\n        // simple array accesses a[123] and [] and other common patterns\n        // found in other languages\n        begin: /\\[\\d[^\\]\\n]{8,}\\]/,\n        illegal: /\\n/,\n        relevance: 1\n      },\n      {\n        className: 'string',\n        begin: /\\[/,\n        end: /\\]/,\n        illegal: /\\n/,\n        relevance: 0\n      },\n      // User agent / relevance boost\n      {\n        className: 'string',\n        begin: /\"Mozilla\\/\\d\\.\\d \\(/,\n        end: /\"/,\n        illegal: /\\n/,\n        relevance: 3\n      },\n      // Strings\n      {\n        className: 'string',\n        begin: /\"/,\n        end: /\"/,\n        illegal: /\\n/,\n        relevance: 0\n      }\n    ]\n  };\n}\n\nmodule.exports = accesslog;\n","/*\nLanguage: ActionScript\nAuthor: Alexander Myadzel <myadzel@gmail.com>\nCategory: scripting\nAudit: 2020\n*/\n\n/** @type LanguageFn */\nfunction actionscript(hljs) {\n  const regex = hljs.regex;\n  const IDENT_RE = /[a-zA-Z_$][a-zA-Z0-9_$]*/;\n  const PKG_NAME_RE = regex.concat(\n    IDENT_RE,\n    regex.concat(\"(\\\\.\", IDENT_RE, \")*\")\n  );\n  const IDENT_FUNC_RETURN_TYPE_RE = /([*]|[a-zA-Z_$][a-zA-Z0-9_$]*)/;\n\n  const AS3_REST_ARG_MODE = {\n    className: 'rest_arg',\n    begin: /[.]{3}/,\n    end: IDENT_RE,\n    relevance: 10\n  };\n\n  const KEYWORDS = [\n    \"as\",\n    \"break\",\n    \"case\",\n    \"catch\",\n    \"class\",\n    \"const\",\n    \"continue\",\n    \"default\",\n    \"delete\",\n    \"do\",\n    \"dynamic\",\n    \"each\",\n    \"else\",\n    \"extends\",\n    \"final\",\n    \"finally\",\n    \"for\",\n    \"function\",\n    \"get\",\n    \"if\",\n    \"implements\",\n    \"import\",\n    \"in\",\n    \"include\",\n    \"instanceof\",\n    \"interface\",\n    \"internal\",\n    \"is\",\n    \"namespace\",\n    \"native\",\n    \"new\",\n    \"override\",\n    \"package\",\n    \"private\",\n    \"protected\",\n    \"public\",\n    \"return\",\n    \"set\",\n    \"static\",\n    \"super\",\n    \"switch\",\n    \"this\",\n    \"throw\",\n    \"try\",\n    \"typeof\",\n    \"use\",\n    \"var\",\n    \"void\",\n    \"while\",\n    \"with\"\n  ];\n  const LITERALS = [\n    \"true\",\n    \"false\",\n    \"null\",\n    \"undefined\"\n  ];\n\n  return {\n    name: 'ActionScript',\n    aliases: [ 'as' ],\n    keywords: {\n      keyword: KEYWORDS,\n      literal: LITERALS\n    },\n    contains: [\n      hljs.APOS_STRING_MODE,\n      hljs.QUOTE_STRING_MODE,\n      hljs.C_LINE_COMMENT_MODE,\n      hljs.C_BLOCK_COMMENT_MODE,\n      hljs.C_NUMBER_MODE,\n      {\n        match: [\n          /\\bpackage/,\n          /\\s+/,\n          PKG_NAME_RE\n        ],\n        className: {\n          1: \"keyword\",\n          3: \"title.class\"\n        }\n      },\n      {\n        match: [\n          /\\b(?:class|interface|extends|implements)/,\n          /\\s+/,\n          IDENT_RE\n        ],\n        className: {\n          1: \"keyword\",\n          3: \"title.class\"\n        }\n      },\n      {\n        className: 'meta',\n        beginKeywords: 'import include',\n        end: /;/,\n        keywords: { keyword: 'import include' }\n      },\n      {\n        beginKeywords: 'function',\n        end: /[{;]/,\n        excludeEnd: true,\n        illegal: /\\S/,\n        contains: [\n          hljs.inherit(hljs.TITLE_MODE, { className: \"title.function\" }),\n          {\n            className: 'params',\n            begin: /\\(/,\n            end: /\\)/,\n            contains: [\n              hljs.APOS_STRING_MODE,\n              hljs.QUOTE_STRING_MODE,\n              hljs.C_LINE_COMMENT_MODE,\n              hljs.C_BLOCK_COMMENT_MODE,\n              AS3_REST_ARG_MODE\n            ]\n          },\n          { begin: regex.concat(/:\\s*/, IDENT_FUNC_RETURN_TYPE_RE) }\n        ]\n      },\n      hljs.METHOD_GUARD\n    ],\n    illegal: /#/\n  };\n}\n\nmodule.exports = actionscript;\n","/*\nLanguage: Ada\nAuthor: Lars Schulna <kartoffelbrei.mit.muskatnuss@gmail.org>\nDescription: Ada is a general-purpose programming language that has great support for saftey critical and real-time applications.\n             It has been developed by the DoD and thus has been used in military and safety-critical applications (like civil aviation).\n             The first version appeared in the 80s, but it's still actively developed today with\n             the newest standard being Ada2012.\n*/\n\n// We try to support full Ada2012\n//\n// We highlight all appearances of types, keywords, literals (string, char, number, bool)\n// and titles (user defined function/procedure/package)\n// CSS classes are set accordingly\n//\n// Languages causing problems for language detection:\n// xml (broken by Foo : Bar type), elm (broken by Foo : Bar type), vbscript-html (broken by body keyword)\n// sql (ada default.txt has a lot of sql keywords)\n\n/** @type LanguageFn */\nfunction ada(hljs) {\n  // Regular expression for Ada numeric literals.\n  // stolen form the VHDL highlighter\n\n  // Decimal literal:\n  const INTEGER_RE = '\\\\d(_|\\\\d)*';\n  const EXPONENT_RE = '[eE][-+]?' + INTEGER_RE;\n  const DECIMAL_LITERAL_RE = INTEGER_RE + '(\\\\.' + INTEGER_RE + ')?' + '(' + EXPONENT_RE + ')?';\n\n  // Based literal:\n  const BASED_INTEGER_RE = '\\\\w+';\n  const BASED_LITERAL_RE = INTEGER_RE + '#' + BASED_INTEGER_RE + '(\\\\.' + BASED_INTEGER_RE + ')?' + '#' + '(' + EXPONENT_RE + ')?';\n\n  const NUMBER_RE = '\\\\b(' + BASED_LITERAL_RE + '|' + DECIMAL_LITERAL_RE + ')';\n\n  // Identifier regex\n  const ID_REGEX = '[A-Za-z](_?[A-Za-z0-9.])*';\n\n  // bad chars, only allowed in literals\n  const BAD_CHARS = `[]\\\\{\\\\}%#'\"`;\n\n  // Ada doesn't have block comments, only line comments\n  const COMMENTS = hljs.COMMENT('--', '$');\n\n  // variable declarations of the form\n  // Foo : Bar := Baz;\n  // where only Bar will be highlighted\n  const VAR_DECLS = {\n    // TODO: These spaces are not required by the Ada syntax\n    // however, I have yet to see handwritten Ada code where\n    // someone does not put spaces around :\n    begin: '\\\\s+:\\\\s+',\n    end: '\\\\s*(:=|;|\\\\)|=>|$)',\n    // endsWithParent: true,\n    // returnBegin: true,\n    illegal: BAD_CHARS,\n    contains: [\n      {\n        // workaround to avoid highlighting\n        // named loops and declare blocks\n        beginKeywords: 'loop for declare others',\n        endsParent: true\n      },\n      {\n        // properly highlight all modifiers\n        className: 'keyword',\n        beginKeywords: 'not null constant access function procedure in out aliased exception'\n      },\n      {\n        className: 'type',\n        begin: ID_REGEX,\n        endsParent: true,\n        relevance: 0\n      }\n    ]\n  };\n\n  const KEYWORDS = [\n    \"abort\",\n    \"else\",\n    \"new\",\n    \"return\",\n    \"abs\",\n    \"elsif\",\n    \"not\",\n    \"reverse\",\n    \"abstract\",\n    \"end\",\n    \"accept\",\n    \"entry\",\n    \"select\",\n    \"access\",\n    \"exception\",\n    \"of\",\n    \"separate\",\n    \"aliased\",\n    \"exit\",\n    \"or\",\n    \"some\",\n    \"all\",\n    \"others\",\n    \"subtype\",\n    \"and\",\n    \"for\",\n    \"out\",\n    \"synchronized\",\n    \"array\",\n    \"function\",\n    \"overriding\",\n    \"at\",\n    \"tagged\",\n    \"generic\",\n    \"package\",\n    \"task\",\n    \"begin\",\n    \"goto\",\n    \"pragma\",\n    \"terminate\",\n    \"body\",\n    \"private\",\n    \"then\",\n    \"if\",\n    \"procedure\",\n    \"type\",\n    \"case\",\n    \"in\",\n    \"protected\",\n    \"constant\",\n    \"interface\",\n    \"is\",\n    \"raise\",\n    \"use\",\n    \"declare\",\n    \"range\",\n    \"delay\",\n    \"limited\",\n    \"record\",\n    \"when\",\n    \"delta\",\n    \"loop\",\n    \"rem\",\n    \"while\",\n    \"digits\",\n    \"renames\",\n    \"with\",\n    \"do\",\n    \"mod\",\n    \"requeue\",\n    \"xor\"\n  ];\n\n  return {\n    name: 'Ada',\n    case_insensitive: true,\n    keywords: {\n      keyword: KEYWORDS,\n      literal: [\n        \"True\",\n        \"False\"\n      ]\n    },\n    contains: [\n      COMMENTS,\n      // strings \"foobar\"\n      {\n        className: 'string',\n        begin: /\"/,\n        end: /\"/,\n        contains: [\n          {\n            begin: /\"\"/,\n            relevance: 0\n          }\n        ]\n      },\n      // characters ''\n      {\n        // character literals always contain one char\n        className: 'string',\n        begin: /'.'/\n      },\n      {\n        // number literals\n        className: 'number',\n        begin: NUMBER_RE,\n        relevance: 0\n      },\n      {\n        // Attributes\n        className: 'symbol',\n        begin: \"'\" + ID_REGEX\n      },\n      {\n        // package definition, maybe inside generic\n        className: 'title',\n        begin: '(\\\\bwith\\\\s+)?(\\\\bprivate\\\\s+)?\\\\bpackage\\\\s+(\\\\bbody\\\\s+)?',\n        end: '(is|$)',\n        keywords: 'package body',\n        excludeBegin: true,\n        excludeEnd: true,\n        illegal: BAD_CHARS\n      },\n      {\n        // function/procedure declaration/definition\n        // maybe inside generic\n        begin: '(\\\\b(with|overriding)\\\\s+)?\\\\b(function|procedure)\\\\s+',\n        end: '(\\\\bis|\\\\bwith|\\\\brenames|\\\\)\\\\s*;)',\n        keywords: 'overriding function procedure with is renames return',\n        // we need to re-match the 'function' keyword, so that\n        // the title mode below matches only exactly once\n        returnBegin: true,\n        contains:\n                [\n                  COMMENTS,\n                  {\n                    // name of the function/procedure\n                    className: 'title',\n                    begin: '(\\\\bwith\\\\s+)?\\\\b(function|procedure)\\\\s+',\n                    end: '(\\\\(|\\\\s+|$)',\n                    excludeBegin: true,\n                    excludeEnd: true,\n                    illegal: BAD_CHARS\n                  },\n                  // 'self'\n                  // // parameter types\n                  VAR_DECLS,\n                  {\n                    // return type\n                    className: 'type',\n                    begin: '\\\\breturn\\\\s+',\n                    end: '(\\\\s+|;|$)',\n                    keywords: 'return',\n                    excludeBegin: true,\n                    excludeEnd: true,\n                    // we are done with functions\n                    endsParent: true,\n                    illegal: BAD_CHARS\n\n                  }\n                ]\n      },\n      {\n        // new type declarations\n        // maybe inside generic\n        className: 'type',\n        begin: '\\\\b(sub)?type\\\\s+',\n        end: '\\\\s+',\n        keywords: 'type',\n        excludeBegin: true,\n        illegal: BAD_CHARS\n      },\n\n      // see comment above the definition\n      VAR_DECLS\n\n      // no markup\n      // relevance boosters for small snippets\n      // {begin: '\\\\s*=>\\\\s*'},\n      // {begin: '\\\\s*:=\\\\s*'},\n      // {begin: '\\\\s+:=\\\\s+'},\n    ]\n  };\n}\n\nmodule.exports = ada;\n","/*\nLanguage: AngelScript\nAuthor: Melissa Geels <melissa@nimble.tools>\nCategory: scripting\nWebsite: https://www.angelcode.com/angelscript/\n*/\n\n/** @type LanguageFn */\nfunction angelscript(hljs) {\n  const builtInTypeMode = {\n    className: 'built_in',\n    begin: '\\\\b(void|bool|int8|int16|int32|int64|int|uint8|uint16|uint32|uint64|uint|string|ref|array|double|float|auto|dictionary)'\n  };\n\n  const objectHandleMode = {\n    className: 'symbol',\n    begin: '[a-zA-Z0-9_]+@'\n  };\n\n  const genericMode = {\n    className: 'keyword',\n    begin: '<',\n    end: '>',\n    contains: [\n      builtInTypeMode,\n      objectHandleMode\n    ]\n  };\n\n  builtInTypeMode.contains = [ genericMode ];\n  objectHandleMode.contains = [ genericMode ];\n\n  const KEYWORDS = [\n    \"for\",\n    \"in|0\",\n    \"break\",\n    \"continue\",\n    \"while\",\n    \"do|0\",\n    \"return\",\n    \"if\",\n    \"else\",\n    \"case\",\n    \"switch\",\n    \"namespace\",\n    \"is\",\n    \"cast\",\n    \"or\",\n    \"and\",\n    \"xor\",\n    \"not\",\n    \"get|0\",\n    \"in\",\n    \"inout|10\",\n    \"out\",\n    \"override\",\n    \"set|0\",\n    \"private\",\n    \"public\",\n    \"const\",\n    \"default|0\",\n    \"final\",\n    \"shared\",\n    \"external\",\n    \"mixin|10\",\n    \"enum\",\n    \"typedef\",\n    \"funcdef\",\n    \"this\",\n    \"super\",\n    \"import\",\n    \"from\",\n    \"interface\",\n    \"abstract|0\",\n    \"try\",\n    \"catch\",\n    \"protected\",\n    \"explicit\",\n    \"property\"\n  ];\n\n  return {\n    name: 'AngelScript',\n    aliases: [ 'asc' ],\n\n    keywords: KEYWORDS,\n\n    // avoid close detection with C# and JS\n    illegal: '(^using\\\\s+[A-Za-z0-9_\\\\.]+;$|\\\\bfunction\\\\s*[^\\\\(])',\n\n    contains: [\n      { // 'strings'\n        className: 'string',\n        begin: '\\'',\n        end: '\\'',\n        illegal: '\\\\n',\n        contains: [ hljs.BACKSLASH_ESCAPE ],\n        relevance: 0\n      },\n\n      // \"\"\"heredoc strings\"\"\"\n      {\n        className: 'string',\n        begin: '\"\"\"',\n        end: '\"\"\"'\n      },\n\n      { // \"strings\"\n        className: 'string',\n        begin: '\"',\n        end: '\"',\n        illegal: '\\\\n',\n        contains: [ hljs.BACKSLASH_ESCAPE ],\n        relevance: 0\n      },\n\n      hljs.C_LINE_COMMENT_MODE, // single-line comments\n      hljs.C_BLOCK_COMMENT_MODE, // comment blocks\n\n      { // metadata\n        className: 'string',\n        begin: '^\\\\s*\\\\[',\n        end: '\\\\]'\n      },\n\n      { // interface or namespace declaration\n        beginKeywords: 'interface namespace',\n        end: /\\{/,\n        illegal: '[;.\\\\-]',\n        contains: [\n          { // interface or namespace name\n            className: 'symbol',\n            begin: '[a-zA-Z0-9_]+'\n          }\n        ]\n      },\n\n      { // class declaration\n        beginKeywords: 'class',\n        end: /\\{/,\n        illegal: '[;.\\\\-]',\n        contains: [\n          { // class name\n            className: 'symbol',\n            begin: '[a-zA-Z0-9_]+',\n            contains: [\n              {\n                begin: '[:,]\\\\s*',\n                contains: [\n                  {\n                    className: 'symbol',\n                    begin: '[a-zA-Z0-9_]+'\n                  }\n                ]\n              }\n            ]\n          }\n        ]\n      },\n\n      builtInTypeMode, // built-in types\n      objectHandleMode, // object handles\n\n      { // literals\n        className: 'literal',\n        begin: '\\\\b(null|true|false)'\n      },\n\n      { // numbers\n        className: 'number',\n        relevance: 0,\n        begin: '(-?)(\\\\b0[xXbBoOdD][a-fA-F0-9]+|(\\\\b\\\\d+(\\\\.\\\\d*)?f?|\\\\.\\\\d+f?)([eE][-+]?\\\\d+f?)?)'\n      }\n    ]\n  };\n}\n\nmodule.exports = angelscript;\n","/*\nLanguage: Apache config\nAuthor: Ruslan Keba <rukeba@gmail.com>\nContributors: Ivan Sagalaev <maniac@softwaremaniacs.org>\nWebsite: https://httpd.apache.org\nDescription: language definition for Apache configuration files (httpd.conf & .htaccess)\nCategory: config, web\nAudit: 2020\n*/\n\n/** @type LanguageFn */\nfunction apache(hljs) {\n  const NUMBER_REF = {\n    className: 'number',\n    begin: /[$%]\\d+/\n  };\n  const NUMBER = {\n    className: 'number',\n    begin: /\\b\\d+/\n  };\n  const IP_ADDRESS = {\n    className: \"number\",\n    begin: /\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}(:\\d{1,5})?/\n  };\n  const PORT_NUMBER = {\n    className: \"number\",\n    begin: /:\\d{1,5}/\n  };\n  return {\n    name: 'Apache config',\n    aliases: [ 'apacheconf' ],\n    case_insensitive: true,\n    contains: [\n      hljs.HASH_COMMENT_MODE,\n      {\n        className: 'section',\n        begin: /<\\/?/,\n        end: />/,\n        contains: [\n          IP_ADDRESS,\n          PORT_NUMBER,\n          // low relevance prevents us from claming XML/HTML where this rule would\n          // match strings inside of XML tags\n          hljs.inherit(hljs.QUOTE_STRING_MODE, { relevance: 0 })\n        ]\n      },\n      {\n        className: 'attribute',\n        begin: /\\w+/,\n        relevance: 0,\n        // keywords aren’t needed for highlighting per se, they only boost relevance\n        // for a very generally defined mode (starts with a word, ends with line-end\n        keywords: { _: [\n          \"order\",\n          \"deny\",\n          \"allow\",\n          \"setenv\",\n          \"rewriterule\",\n          \"rewriteengine\",\n          \"rewritecond\",\n          \"documentroot\",\n          \"sethandler\",\n          \"errordocument\",\n          \"loadmodule\",\n          \"options\",\n          \"header\",\n          \"listen\",\n          \"serverroot\",\n          \"servername\"\n        ] },\n        starts: {\n          end: /$/,\n          relevance: 0,\n          keywords: { literal: 'on off all deny allow' },\n          contains: [\n            {\n              scope: \"punctuation\",\n              match: /\\\\\\n/\n            },\n            {\n              className: 'meta',\n              begin: /\\s\\[/,\n              end: /\\]$/\n            },\n            {\n              className: 'variable',\n              begin: /[\\$%]\\{/,\n              end: /\\}/,\n              contains: [\n                'self',\n                NUMBER_REF\n              ]\n            },\n            IP_ADDRESS,\n            NUMBER,\n            hljs.QUOTE_STRING_MODE\n          ]\n        }\n      }\n    ],\n    illegal: /\\S/\n  };\n}\n\nmodule.exports = apache;\n","/*\nLanguage: AppleScript\nAuthors: Nathan Grigg <nathan@nathanamy.org>, Dr. Drang <drdrang@gmail.com>\nCategory: scripting\nWebsite: https://developer.apple.com/library/archive/documentation/AppleScript/Conceptual/AppleScriptLangGuide/introduction/ASLR_intro.html\nAudit: 2020\n*/\n\n/** @type LanguageFn */\nfunction applescript(hljs) {\n  const regex = hljs.regex;\n  const STRING = hljs.inherit(\n    hljs.QUOTE_STRING_MODE, { illegal: null });\n  const PARAMS = {\n    className: 'params',\n    begin: /\\(/,\n    end: /\\)/,\n    contains: [\n      'self',\n      hljs.C_NUMBER_MODE,\n      STRING\n    ]\n  };\n  const COMMENT_MODE_1 = hljs.COMMENT(/--/, /$/);\n  const COMMENT_MODE_2 = hljs.COMMENT(\n    /\\(\\*/,\n    /\\*\\)/,\n    { contains: [\n      'self', // allow nesting\n      COMMENT_MODE_1\n    ] }\n  );\n  const COMMENTS = [\n    COMMENT_MODE_1,\n    COMMENT_MODE_2,\n    hljs.HASH_COMMENT_MODE\n  ];\n\n  const KEYWORD_PATTERNS = [\n    /apart from/,\n    /aside from/,\n    /instead of/,\n    /out of/,\n    /greater than/,\n    /isn't|(doesn't|does not) (equal|come before|come after|contain)/,\n    /(greater|less) than( or equal)?/,\n    /(starts?|ends|begins?) with/,\n    /contained by/,\n    /comes (before|after)/,\n    /a (ref|reference)/,\n    /POSIX (file|path)/,\n    /(date|time) string/,\n    /quoted form/\n  ];\n\n  const BUILT_IN_PATTERNS = [\n    /clipboard info/,\n    /the clipboard/,\n    /info for/,\n    /list (disks|folder)/,\n    /mount volume/,\n    /path to/,\n    /(close|open for) access/,\n    /(get|set) eof/,\n    /current date/,\n    /do shell script/,\n    /get volume settings/,\n    /random number/,\n    /set volume/,\n    /system attribute/,\n    /system info/,\n    /time to GMT/,\n    /(load|run|store) script/,\n    /scripting components/,\n    /ASCII (character|number)/,\n    /localized string/,\n    /choose (application|color|file|file name|folder|from list|remote application|URL)/,\n    /display (alert|dialog)/\n  ];\n\n  return {\n    name: 'AppleScript',\n    aliases: [ 'osascript' ],\n    keywords: {\n      keyword:\n        'about above after against and around as at back before beginning '\n        + 'behind below beneath beside between but by considering '\n        + 'contain contains continue copy div does eighth else end equal '\n        + 'equals error every exit fifth first for fourth from front '\n        + 'get given global if ignoring in into is it its last local me '\n        + 'middle mod my ninth not of on onto or over prop property put ref '\n        + 'reference repeat returning script second set seventh since '\n        + 'sixth some tell tenth that the|0 then third through thru '\n        + 'timeout times to transaction try until where while whose with '\n        + 'without',\n      literal:\n        'AppleScript false linefeed return pi quote result space tab true',\n      built_in:\n        'alias application boolean class constant date file integer list '\n        + 'number real record string text '\n        + 'activate beep count delay launch log offset read round '\n        + 'run say summarize write '\n        + 'character characters contents day frontmost id item length '\n        + 'month name|0 paragraph paragraphs rest reverse running time version '\n        + 'weekday word words year'\n    },\n    contains: [\n      STRING,\n      hljs.C_NUMBER_MODE,\n      {\n        className: 'built_in',\n        begin: regex.concat(\n          /\\b/,\n          regex.either(...BUILT_IN_PATTERNS),\n          /\\b/\n        )\n      },\n      {\n        className: 'built_in',\n        begin: /^\\s*return\\b/\n      },\n      {\n        className: 'literal',\n        begin:\n          /\\b(text item delimiters|current application|missing value)\\b/\n      },\n      {\n        className: 'keyword',\n        begin: regex.concat(\n          /\\b/,\n          regex.either(...KEYWORD_PATTERNS),\n          /\\b/\n        )\n      },\n      {\n        beginKeywords: 'on',\n        illegal: /[${=;\\n]/,\n        contains: [\n          hljs.UNDERSCORE_TITLE_MODE,\n          PARAMS\n        ]\n      },\n      ...COMMENTS\n    ],\n    illegal: /\\/\\/|->|=>|\\[\\[/\n  };\n}\n\nmodule.exports = applescript;\n","/*\n Language: ArcGIS Arcade\n Category: scripting\n Website: https://developers.arcgis.com/arcade/\n Description: ArcGIS Arcade is an expression language used in many Esri ArcGIS products such as Pro, Online, Server, Runtime, JavaScript, and Python\n*/\n\n/** @type LanguageFn */\nfunction arcade(hljs) {\n  const regex = hljs.regex;\n  const IDENT_RE = '[A-Za-z_][0-9A-Za-z_]*';\n  const KEYWORDS = {\n    keyword: [\n      \"break\",\n      \"case\",\n      \"catch\",\n      \"continue\",\n      \"debugger\",\n      \"do\",\n      \"else\",\n      \"export\",\n      \"for\",\n      \"function\",\n      \"if\",\n      \"import\",\n      \"in\",\n      \"new\",\n      \"of\",\n      \"return\",\n      \"switch\",\n      \"try\",\n      \"var\",\n      \"void\",\n      \"while\"\n    ],\n    literal: [\n      \"BackSlash\",\n      \"DoubleQuote\",\n      \"ForwardSlash\",\n      \"Infinity\",\n      \"NaN\",\n      \"NewLine\",\n      \"PI\",\n      \"SingleQuote\",\n      \"Tab\",\n      \"TextFormatting\",\n      \"false\",\n      \"null\",\n      \"true\",\n      \"undefined\"\n    ],\n    built_in: [\n      \"Abs\",\n      \"Acos\",\n      \"All\",\n      \"Angle\",\n      \"Any\",\n      \"Area\",\n      \"AreaGeodetic\",\n      \"Array\",\n      \"Asin\",\n      \"Atan\",\n      \"Atan2\",\n      \"Attachments\",\n      \"Average\",\n      \"Back\",\n      \"Bearing\",\n      \"Boolean\",\n      \"Buffer\",\n      \"BufferGeodetic\",\n      \"Ceil\",\n      \"Centroid\",\n      \"ChangeTimeZone\",\n      \"Clip\",\n      \"Concatenate\",\n      \"Console\",\n      \"Constrain\",\n      \"Contains\",\n      \"ConvertDirection\",\n      \"ConvexHull\",\n      \"Cos\",\n      \"Count\",\n      \"Crosses\",\n      \"Cut\",\n      \"Date|0\",\n      \"DateAdd\",\n      \"DateDiff\",\n      \"DateOnly\",\n      \"Day\",\n      \"Decode\",\n      \"DefaultValue\",\n      \"Densify\",\n      \"DensifyGeodetic\",\n      \"Dictionary\",\n      \"Difference\",\n      \"Disjoint\",\n      \"Distance\",\n      \"DistanceGeodetic\",\n      \"DistanceToCoordinate\",\n      \"Distinct\",\n      \"Domain\",\n      \"DomainCode\",\n      \"DomainName\",\n      \"EnvelopeIntersects\",\n      \"Equals\",\n      \"Erase\",\n      \"Exp\",\n      \"Expects\",\n      \"Extent\",\n      \"Feature\",\n      \"FeatureInFilter\",\n      \"FeatureSet\",\n      \"FeatureSetByAssociation\",\n      \"FeatureSetById\",\n      \"FeatureSetByName\",\n      \"FeatureSetByPortalItem\",\n      \"FeatureSetByRelationshipClass\",\n      \"FeatureSetByRelationshipName\",\n      \"Filter\",\n      \"FilterBySubtypeCode\",\n      \"Find\",\n      \"First|0\",\n      \"Floor\",\n      \"FromCharCode\",\n      \"FromCodePoint\",\n      \"FromJSON\",\n      \"Front\",\n      \"GdbVersion\",\n      \"Generalize\",\n      \"Geometry\",\n      \"GetEnvironment\",\n      \"GetFeatureSet\",\n      \"GetFeatureSetInfo\",\n      \"GetUser\",\n      \"GroupBy\",\n      \"Guid\",\n      \"HasKey\",\n      \"HasValue\",\n      \"Hash\",\n      \"Hour\",\n      \"IIf\",\n      \"ISOMonth\",\n      \"ISOWeek\",\n      \"ISOWeekday\",\n      \"ISOYear\",\n      \"Includes\",\n      \"IndexOf\",\n      \"Insert\",\n      \"Intersection\",\n      \"Intersects\",\n      \"IsEmpty\",\n      \"IsNan\",\n      \"IsSelfIntersecting\",\n      \"IsSimple\",\n      \"KnowledgeGraphByPortalItem\",\n      \"Left|0\",\n      \"Length\",\n      \"Length3D\",\n      \"LengthGeodetic\",\n      \"Log\",\n      \"Lower\",\n      \"Map\",\n      \"Max\",\n      \"Mean\",\n      \"MeasureToCoordinate\",\n      \"Mid\",\n      \"Millisecond\",\n      \"Min\",\n      \"Minute\",\n      \"Month\",\n      \"MultiPartToSinglePart\",\n      \"Multipoint\",\n      \"NearestCoordinate\",\n      \"NearestVertex\",\n      \"NextSequenceValue\",\n      \"None\",\n      \"Now\",\n      \"Number\",\n      \"Offset\",\n      \"OrderBy\",\n      \"Overlaps\",\n      \"Point\",\n      \"PointToCoordinate\",\n      \"Polygon\",\n      \"Polyline\",\n      \"Pop\",\n      \"Portal\",\n      \"Pow\",\n      \"Proper\",\n      \"Push\",\n      \"QueryGraph\",\n      \"Random\",\n      \"Reduce\",\n      \"Relate\",\n      \"Replace\",\n      \"Resize\",\n      \"Reverse\",\n      \"Right|0\",\n      \"RingIsClockwise\",\n      \"Rotate\",\n      \"Round\",\n      \"Schema\",\n      \"Second\",\n      \"SetGeometry\",\n      \"Simplify\",\n      \"Sin\",\n      \"Slice\",\n      \"Sort\",\n      \"Splice\",\n      \"Split\",\n      \"Sqrt\",\n      \"StandardizeFilename\",\n      \"StandardizeGuid\",\n      \"Stdev\",\n      \"SubtypeCode\",\n      \"SubtypeName\",\n      \"Subtypes\",\n      \"Sum\",\n      \"SymmetricDifference\",\n      \"Tan\",\n      \"Text\",\n      \"Time\",\n      \"TimeZone\",\n      \"TimeZoneOffset\",\n      \"Timestamp\",\n      \"ToCharCode\",\n      \"ToCodePoint\",\n      \"ToHex\",\n      \"ToLocal\",\n      \"ToUTC\",\n      \"Today\",\n      \"Top|0\",\n      \"Touches\",\n      \"TrackAccelerationAt\",\n      \"TrackAccelerationWindow\",\n      \"TrackCurrentAcceleration\",\n      \"TrackCurrentDistance\",\n      \"TrackCurrentSpeed\",\n      \"TrackCurrentTime\",\n      \"TrackDistanceAt\",\n      \"TrackDistanceWindow\",\n      \"TrackDuration\",\n      \"TrackFieldWindow\",\n      \"TrackGeometryWindow\",\n      \"TrackIndex\",\n      \"TrackSpeedAt\",\n      \"TrackSpeedWindow\",\n      \"TrackStartTime\",\n      \"TrackWindow\",\n      \"Trim\",\n      \"TypeOf\",\n      \"Union\",\n      \"Upper\",\n      \"UrlEncode\",\n      \"Variance\",\n      \"Week\",\n      \"Weekday\",\n      \"When|0\",\n      \"Within\",\n      \"Year|0\",\n    ]\n  };\n  const PROFILE_VARS = [\n    \"aggregatedFeatures\",\n    \"analytic\",\n    \"config\",\n    \"datapoint\",\n    \"datastore\",\n    \"editcontext\",\n    \"feature\",\n    \"featureSet\",\n    \"feedfeature\",\n    \"fencefeature\",\n    \"fencenotificationtype\",\n    \"graph\",\n    \"join\",\n    \"layer\",\n    \"locationupdate\",\n    \"map\",\n    \"measure\",\n    \"measure\",\n    \"originalFeature\",\n    \"record\",\n    \"reference\",\n    \"rowindex\",\n    \"sourcedatastore\",\n    \"sourcefeature\",\n    \"sourcelayer\",\n    \"target\",\n    \"targetdatastore\",\n    \"targetfeature\",\n    \"targetlayer\",\n    \"userInput\",\n    \"value\",\n    \"variables\",\n    \"view\"\n  ];\n  const SYMBOL = {\n    className: 'symbol',\n    begin: '\\\\$' + regex.either(...PROFILE_VARS)\n  };\n  const NUMBER = {\n    className: 'number',\n    variants: [\n      { begin: '\\\\b(0[bB][01]+)' },\n      { begin: '\\\\b(0[oO][0-7]+)' },\n      { begin: hljs.C_NUMBER_RE }\n    ],\n    relevance: 0\n  };\n  const SUBST = {\n    className: 'subst',\n    begin: '\\\\$\\\\{',\n    end: '\\\\}',\n    keywords: KEYWORDS,\n    contains: [] // defined later\n  };\n  const TEMPLATE_STRING = {\n    className: 'string',\n    begin: '`',\n    end: '`',\n    contains: [\n      hljs.BACKSLASH_ESCAPE,\n      SUBST\n    ]\n  };\n  SUBST.contains = [\n    hljs.APOS_STRING_MODE,\n    hljs.QUOTE_STRING_MODE,\n    TEMPLATE_STRING,\n    NUMBER,\n    hljs.REGEXP_MODE\n  ];\n  const PARAMS_CONTAINS = SUBST.contains.concat([\n    hljs.C_BLOCK_COMMENT_MODE,\n    hljs.C_LINE_COMMENT_MODE\n  ]);\n\n  return {\n    name: 'ArcGIS Arcade',\n    case_insensitive: true,\n    keywords: KEYWORDS,\n    contains: [\n      hljs.APOS_STRING_MODE,\n      hljs.QUOTE_STRING_MODE,\n      TEMPLATE_STRING,\n      hljs.C_LINE_COMMENT_MODE,\n      hljs.C_BLOCK_COMMENT_MODE,\n      SYMBOL,\n      NUMBER,\n      { // object attr container\n        begin: /[{,]\\s*/,\n        relevance: 0,\n        contains: [\n          {\n            begin: IDENT_RE + '\\\\s*:',\n            returnBegin: true,\n            relevance: 0,\n            contains: [\n              {\n                className: 'attr',\n                begin: IDENT_RE,\n                relevance: 0\n              }\n            ]\n          }\n        ]\n      },\n      { // \"value\" container\n        begin: '(' + hljs.RE_STARTERS_RE + '|\\\\b(return)\\\\b)\\\\s*',\n        keywords: 'return',\n        contains: [\n          hljs.C_LINE_COMMENT_MODE,\n          hljs.C_BLOCK_COMMENT_MODE,\n          hljs.REGEXP_MODE,\n          {\n            className: 'function',\n            begin: '(\\\\(.*?\\\\)|' + IDENT_RE + ')\\\\s*=>',\n            returnBegin: true,\n            end: '\\\\s*=>',\n            contains: [\n              {\n                className: 'params',\n                variants: [\n                  { begin: IDENT_RE },\n                  { begin: /\\(\\s*\\)/ },\n                  {\n                    begin: /\\(/,\n                    end: /\\)/,\n                    excludeBegin: true,\n                    excludeEnd: true,\n                    keywords: KEYWORDS,\n                    contains: PARAMS_CONTAINS\n                  }\n                ]\n              }\n            ]\n          }\n        ],\n        relevance: 0\n      },\n      {\n        beginKeywords: 'function',\n        end: /\\{/,\n        excludeEnd: true,\n        contains: [\n          hljs.inherit(hljs.TITLE_MODE, {\n            className: \"title.function\",\n            begin: IDENT_RE\n          }),\n          {\n            className: 'params',\n            begin: /\\(/,\n            end: /\\)/,\n            excludeBegin: true,\n            excludeEnd: true,\n            contains: PARAMS_CONTAINS\n          }\n        ],\n        illegal: /\\[|%/\n      },\n      { begin: /\\$[(.]/ }\n    ],\n    illegal: /#(?!!)/\n  };\n}\n\nmodule.exports = arcade;\n","/*\nLanguage: C++\nCategory: common, system\nWebsite: https://isocpp.org\n*/\n\n/** @type LanguageFn */\nfunction cPlusPlus(hljs) {\n  const regex = hljs.regex;\n  // added for historic reasons because `hljs.C_LINE_COMMENT_MODE` does\n  // not include such support nor can we be sure all the grammars depending\n  // on it would desire this behavior\n  const C_LINE_COMMENT_MODE = hljs.COMMENT('//', '$', { contains: [ { begin: /\\\\\\n/ } ] });\n  const DECLTYPE_AUTO_RE = 'decltype\\\\(auto\\\\)';\n  const NAMESPACE_RE = '[a-zA-Z_]\\\\w*::';\n  const TEMPLATE_ARGUMENT_RE = '<[^<>]+>';\n  const FUNCTION_TYPE_RE = '(?!struct)('\n    + DECLTYPE_AUTO_RE + '|'\n    + regex.optional(NAMESPACE_RE)\n    + '[a-zA-Z_]\\\\w*' + regex.optional(TEMPLATE_ARGUMENT_RE)\n  + ')';\n\n  const CPP_PRIMITIVE_TYPES = {\n    className: 'type',\n    begin: '\\\\b[a-z\\\\d_]*_t\\\\b'\n  };\n\n  // https://en.cppreference.com/w/cpp/language/escape\n  // \\\\ \\x \\xFF \\u2837 \\u00323747 \\374\n  const CHARACTER_ESCAPES = '\\\\\\\\(x[0-9A-Fa-f]{2}|u[0-9A-Fa-f]{4,8}|[0-7]{3}|\\\\S)';\n  const STRINGS = {\n    className: 'string',\n    variants: [\n      {\n        begin: '(u8?|U|L)?\"',\n        end: '\"',\n        illegal: '\\\\n',\n        contains: [ hljs.BACKSLASH_ESCAPE ]\n      },\n      {\n        begin: '(u8?|U|L)?\\'(' + CHARACTER_ESCAPES + '|.)',\n        end: '\\'',\n        illegal: '.'\n      },\n      hljs.END_SAME_AS_BEGIN({\n        begin: /(?:u8?|U|L)?R\"([^()\\\\ ]{0,16})\\(/,\n        end: /\\)([^()\\\\ ]{0,16})\"/\n      })\n    ]\n  };\n\n  const NUMBERS = {\n    className: 'number',\n    variants: [\n      // Floating-point literal.\n      { begin:\n        \"[+-]?(?:\" // Leading sign.\n          // Decimal.\n          + \"(?:\"\n            +\"[0-9](?:'?[0-9])*\\\\.(?:[0-9](?:'?[0-9])*)?\"\n            + \"|\\\\.[0-9](?:'?[0-9])*\"\n          + \")(?:[Ee][+-]?[0-9](?:'?[0-9])*)?\"\n          + \"|[0-9](?:'?[0-9])*[Ee][+-]?[0-9](?:'?[0-9])*\"\n          // Hexadecimal.\n          + \"|0[Xx](?:\"\n            +\"[0-9A-Fa-f](?:'?[0-9A-Fa-f])*(?:\\\\.(?:[0-9A-Fa-f](?:'?[0-9A-Fa-f])*)?)?\"\n            + \"|\\\\.[0-9A-Fa-f](?:'?[0-9A-Fa-f])*\"\n          + \")[Pp][+-]?[0-9](?:'?[0-9])*\"\n        + \")(?:\" // Literal suffixes.\n          + \"[Ff](?:16|32|64|128)?\"\n          + \"|(BF|bf)16\"\n          + \"|[Ll]\"\n          + \"|\" // Literal suffix is optional.\n        + \")\"\n      },\n      // Integer literal.\n      { begin:\n        \"[+-]?\\\\b(?:\" // Leading sign.\n          + \"0[Bb][01](?:'?[01])*\" // Binary.\n          + \"|0[Xx][0-9A-Fa-f](?:'?[0-9A-Fa-f])*\" // Hexadecimal.\n          + \"|0(?:'?[0-7])*\" // Octal or just a lone zero.\n          + \"|[1-9](?:'?[0-9])*\" // Decimal.\n        + \")(?:\" // Literal suffixes.\n          + \"[Uu](?:LL?|ll?)\"\n          + \"|[Uu][Zz]?\"\n          + \"|(?:LL?|ll?)[Uu]?\"\n          + \"|[Zz][Uu]\"\n          + \"|\" // Literal suffix is optional.\n        + \")\"\n        // Note: there are user-defined literal suffixes too, but perhaps having the custom suffix not part of the\n        // literal highlight actually makes it stand out more.\n      }\n    ],\n    relevance: 0\n  };\n\n  const PREPROCESSOR = {\n    className: 'meta',\n    begin: /#\\s*[a-z]+\\b/,\n    end: /$/,\n    keywords: { keyword:\n        'if else elif endif define undef warning error line '\n        + 'pragma _Pragma ifdef ifndef include' },\n    contains: [\n      {\n        begin: /\\\\\\n/,\n        relevance: 0\n      },\n      hljs.inherit(STRINGS, { className: 'string' }),\n      {\n        className: 'string',\n        begin: /<.*?>/\n      },\n      C_LINE_COMMENT_MODE,\n      hljs.C_BLOCK_COMMENT_MODE\n    ]\n  };\n\n  const TITLE_MODE = {\n    className: 'title',\n    begin: regex.optional(NAMESPACE_RE) + hljs.IDENT_RE,\n    relevance: 0\n  };\n\n  const FUNCTION_TITLE = regex.optional(NAMESPACE_RE) + hljs.IDENT_RE + '\\\\s*\\\\(';\n\n  // https://en.cppreference.com/w/cpp/keyword\n  const RESERVED_KEYWORDS = [\n    'alignas',\n    'alignof',\n    'and',\n    'and_eq',\n    'asm',\n    'atomic_cancel',\n    'atomic_commit',\n    'atomic_noexcept',\n    'auto',\n    'bitand',\n    'bitor',\n    'break',\n    'case',\n    'catch',\n    'class',\n    'co_await',\n    'co_return',\n    'co_yield',\n    'compl',\n    'concept',\n    'const_cast|10',\n    'consteval',\n    'constexpr',\n    'constinit',\n    'continue',\n    'decltype',\n    'default',\n    'delete',\n    'do',\n    'dynamic_cast|10',\n    'else',\n    'enum',\n    'explicit',\n    'export',\n    'extern',\n    'false',\n    'final',\n    'for',\n    'friend',\n    'goto',\n    'if',\n    'import',\n    'inline',\n    'module',\n    'mutable',\n    'namespace',\n    'new',\n    'noexcept',\n    'not',\n    'not_eq',\n    'nullptr',\n    'operator',\n    'or',\n    'or_eq',\n    'override',\n    'private',\n    'protected',\n    'public',\n    'reflexpr',\n    'register',\n    'reinterpret_cast|10',\n    'requires',\n    'return',\n    'sizeof',\n    'static_assert',\n    'static_cast|10',\n    'struct',\n    'switch',\n    'synchronized',\n    'template',\n    'this',\n    'thread_local',\n    'throw',\n    'transaction_safe',\n    'transaction_safe_dynamic',\n    'true',\n    'try',\n    'typedef',\n    'typeid',\n    'typename',\n    'union',\n    'using',\n    'virtual',\n    'volatile',\n    'while',\n    'xor',\n    'xor_eq'\n  ];\n\n  // https://en.cppreference.com/w/cpp/keyword\n  const RESERVED_TYPES = [\n    'bool',\n    'char',\n    'char16_t',\n    'char32_t',\n    'char8_t',\n    'double',\n    'float',\n    'int',\n    'long',\n    'short',\n    'void',\n    'wchar_t',\n    'unsigned',\n    'signed',\n    'const',\n    'static'\n  ];\n\n  const TYPE_HINTS = [\n    'any',\n    'auto_ptr',\n    'barrier',\n    'binary_semaphore',\n    'bitset',\n    'complex',\n    'condition_variable',\n    'condition_variable_any',\n    'counting_semaphore',\n    'deque',\n    'false_type',\n    'flat_map',\n    'flat_set',\n    'future',\n    'imaginary',\n    'initializer_list',\n    'istringstream',\n    'jthread',\n    'latch',\n    'lock_guard',\n    'multimap',\n    'multiset',\n    'mutex',\n    'optional',\n    'ostringstream',\n    'packaged_task',\n    'pair',\n    'promise',\n    'priority_queue',\n    'queue',\n    'recursive_mutex',\n    'recursive_timed_mutex',\n    'scoped_lock',\n    'set',\n    'shared_future',\n    'shared_lock',\n    'shared_mutex',\n    'shared_timed_mutex',\n    'shared_ptr',\n    'stack',\n    'string_view',\n    'stringstream',\n    'timed_mutex',\n    'thread',\n    'true_type',\n    'tuple',\n    'unique_lock',\n    'unique_ptr',\n    'unordered_map',\n    'unordered_multimap',\n    'unordered_multiset',\n    'unordered_set',\n    'variant',\n    'vector',\n    'weak_ptr',\n    'wstring',\n    'wstring_view'\n  ];\n\n  const FUNCTION_HINTS = [\n    'abort',\n    'abs',\n    'acos',\n    'apply',\n    'as_const',\n    'asin',\n    'atan',\n    'atan2',\n    'calloc',\n    'ceil',\n    'cerr',\n    'cin',\n    'clog',\n    'cos',\n    'cosh',\n    'cout',\n    'declval',\n    'endl',\n    'exchange',\n    'exit',\n    'exp',\n    'fabs',\n    'floor',\n    'fmod',\n    'forward',\n    'fprintf',\n    'fputs',\n    'free',\n    'frexp',\n    'fscanf',\n    'future',\n    'invoke',\n    'isalnum',\n    'isalpha',\n    'iscntrl',\n    'isdigit',\n    'isgraph',\n    'islower',\n    'isprint',\n    'ispunct',\n    'isspace',\n    'isupper',\n    'isxdigit',\n    'labs',\n    'launder',\n    'ldexp',\n    'log',\n    'log10',\n    'make_pair',\n    'make_shared',\n    'make_shared_for_overwrite',\n    'make_tuple',\n    'make_unique',\n    'malloc',\n    'memchr',\n    'memcmp',\n    'memcpy',\n    'memset',\n    'modf',\n    'move',\n    'pow',\n    'printf',\n    'putchar',\n    'puts',\n    'realloc',\n    'scanf',\n    'sin',\n    'sinh',\n    'snprintf',\n    'sprintf',\n    'sqrt',\n    'sscanf',\n    'std',\n    'stderr',\n    'stdin',\n    'stdout',\n    'strcat',\n    'strchr',\n    'strcmp',\n    'strcpy',\n    'strcspn',\n    'strlen',\n    'strncat',\n    'strncmp',\n    'strncpy',\n    'strpbrk',\n    'strrchr',\n    'strspn',\n    'strstr',\n    'swap',\n    'tan',\n    'tanh',\n    'terminate',\n    'to_underlying',\n    'tolower',\n    'toupper',\n    'vfprintf',\n    'visit',\n    'vprintf',\n    'vsprintf'\n  ];\n\n  const LITERALS = [\n    'NULL',\n    'false',\n    'nullopt',\n    'nullptr',\n    'true'\n  ];\n\n  // https://en.cppreference.com/w/cpp/keyword\n  const BUILT_IN = [ '_Pragma' ];\n\n  const CPP_KEYWORDS = {\n    type: RESERVED_TYPES,\n    keyword: RESERVED_KEYWORDS,\n    literal: LITERALS,\n    built_in: BUILT_IN,\n    _type_hints: TYPE_HINTS\n  };\n\n  const FUNCTION_DISPATCH = {\n    className: 'function.dispatch',\n    relevance: 0,\n    keywords: {\n      // Only for relevance, not highlighting.\n      _hint: FUNCTION_HINTS },\n    begin: regex.concat(\n      /\\b/,\n      /(?!decltype)/,\n      /(?!if)/,\n      /(?!for)/,\n      /(?!switch)/,\n      /(?!while)/,\n      hljs.IDENT_RE,\n      regex.lookahead(/(<[^<>]+>|)\\s*\\(/))\n  };\n\n  const EXPRESSION_CONTAINS = [\n    FUNCTION_DISPATCH,\n    PREPROCESSOR,\n    CPP_PRIMITIVE_TYPES,\n    C_LINE_COMMENT_MODE,\n    hljs.C_BLOCK_COMMENT_MODE,\n    NUMBERS,\n    STRINGS\n  ];\n\n  const EXPRESSION_CONTEXT = {\n    // This mode covers expression context where we can't expect a function\n    // definition and shouldn't highlight anything that looks like one:\n    // `return some()`, `else if()`, `(x*sum(1, 2))`\n    variants: [\n      {\n        begin: /=/,\n        end: /;/\n      },\n      {\n        begin: /\\(/,\n        end: /\\)/\n      },\n      {\n        beginKeywords: 'new throw return else',\n        end: /;/\n      }\n    ],\n    keywords: CPP_KEYWORDS,\n    contains: EXPRESSION_CONTAINS.concat([\n      {\n        begin: /\\(/,\n        end: /\\)/,\n        keywords: CPP_KEYWORDS,\n        contains: EXPRESSION_CONTAINS.concat([ 'self' ]),\n        relevance: 0\n      }\n    ]),\n    relevance: 0\n  };\n\n  const FUNCTION_DECLARATION = {\n    className: 'function',\n    begin: '(' + FUNCTION_TYPE_RE + '[\\\\*&\\\\s]+)+' + FUNCTION_TITLE,\n    returnBegin: true,\n    end: /[{;=]/,\n    excludeEnd: true,\n    keywords: CPP_KEYWORDS,\n    illegal: /[^\\w\\s\\*&:<>.]/,\n    contains: [\n      { // to prevent it from being confused as the function title\n        begin: DECLTYPE_AUTO_RE,\n        keywords: CPP_KEYWORDS,\n        relevance: 0\n      },\n      {\n        begin: FUNCTION_TITLE,\n        returnBegin: true,\n        contains: [ TITLE_MODE ],\n        relevance: 0\n      },\n      // needed because we do not have look-behind on the below rule\n      // to prevent it from grabbing the final : in a :: pair\n      {\n        begin: /::/,\n        relevance: 0\n      },\n      // initializers\n      {\n        begin: /:/,\n        endsWithParent: true,\n        contains: [\n          STRINGS,\n          NUMBERS\n        ]\n      },\n      // allow for multiple declarations, e.g.:\n      // extern void f(int), g(char);\n      {\n        relevance: 0,\n        match: /,/\n      },\n      {\n        className: 'params',\n        begin: /\\(/,\n        end: /\\)/,\n        keywords: CPP_KEYWORDS,\n        relevance: 0,\n        contains: [\n          C_LINE_COMMENT_MODE,\n          hljs.C_BLOCK_COMMENT_MODE,\n          STRINGS,\n          NUMBERS,\n          CPP_PRIMITIVE_TYPES,\n          // Count matching parentheses.\n          {\n            begin: /\\(/,\n            end: /\\)/,\n            keywords: CPP_KEYWORDS,\n            relevance: 0,\n            contains: [\n              'self',\n              C_LINE_COMMENT_MODE,\n              hljs.C_BLOCK_COMMENT_MODE,\n              STRINGS,\n              NUMBERS,\n              CPP_PRIMITIVE_TYPES\n            ]\n          }\n        ]\n      },\n      CPP_PRIMITIVE_TYPES,\n      C_LINE_COMMENT_MODE,\n      hljs.C_BLOCK_COMMENT_MODE,\n      PREPROCESSOR\n    ]\n  };\n\n  return {\n    name: 'C++',\n    aliases: [\n      'cc',\n      'c++',\n      'h++',\n      'hpp',\n      'hh',\n      'hxx',\n      'cxx'\n    ],\n    keywords: CPP_KEYWORDS,\n    illegal: '</',\n    classNameAliases: { 'function.dispatch': 'built_in' },\n    contains: [].concat(\n      EXPRESSION_CONTEXT,\n      FUNCTION_DECLARATION,\n      FUNCTION_DISPATCH,\n      EXPRESSION_CONTAINS,\n      [\n        PREPROCESSOR,\n        { // containers: ie, `vector <int> rooms (9);`\n          begin: '\\\\b(deque|list|queue|priority_queue|pair|stack|vector|map|set|bitset|multiset|multimap|unordered_map|unordered_set|unordered_multiset|unordered_multimap|array|tuple|optional|variant|function|flat_map|flat_set)\\\\s*<(?!<)',\n          end: '>',\n          keywords: CPP_KEYWORDS,\n          contains: [\n            'self',\n            CPP_PRIMITIVE_TYPES\n          ]\n        },\n        {\n          begin: hljs.IDENT_RE + '::',\n          keywords: CPP_KEYWORDS\n        },\n        {\n          match: [\n            // extra complexity to deal with `enum class` and `enum struct`\n            /\\b(?:enum(?:\\s+(?:class|struct))?|class|struct|union)/,\n            /\\s+/,\n            /\\w+/\n          ],\n          className: {\n            1: 'keyword',\n            3: 'title.class'\n          }\n        }\n      ])\n  };\n}\n\n/*\nLanguage: Arduino\nAuthor: Stefania Mellai <s.mellai@arduino.cc>\nDescription: The Arduino® Language is a superset of C++. This rules are designed to highlight the Arduino® source code. For info about language see http://www.arduino.cc.\nWebsite: https://www.arduino.cc\nCategory: system\n*/\n\n\n/** @type LanguageFn */\nfunction arduino(hljs) {\n  const ARDUINO_KW = {\n    type: [\n      \"boolean\",\n      \"byte\",\n      \"word\",\n      \"String\"\n    ],\n    built_in: [\n      \"KeyboardController\",\n      \"MouseController\",\n      \"SoftwareSerial\",\n      \"EthernetServer\",\n      \"EthernetClient\",\n      \"LiquidCrystal\",\n      \"RobotControl\",\n      \"GSMVoiceCall\",\n      \"EthernetUDP\",\n      \"EsploraTFT\",\n      \"HttpClient\",\n      \"RobotMotor\",\n      \"WiFiClient\",\n      \"GSMScanner\",\n      \"FileSystem\",\n      \"Scheduler\",\n      \"GSMServer\",\n      \"YunClient\",\n      \"YunServer\",\n      \"IPAddress\",\n      \"GSMClient\",\n      \"GSMModem\",\n      \"Keyboard\",\n      \"Ethernet\",\n      \"Console\",\n      \"GSMBand\",\n      \"Esplora\",\n      \"Stepper\",\n      \"Process\",\n      \"WiFiUDP\",\n      \"GSM_SMS\",\n      \"Mailbox\",\n      \"USBHost\",\n      \"Firmata\",\n      \"PImage\",\n      \"Client\",\n      \"Server\",\n      \"GSMPIN\",\n      \"FileIO\",\n      \"Bridge\",\n      \"Serial\",\n      \"EEPROM\",\n      \"Stream\",\n      \"Mouse\",\n      \"Audio\",\n      \"Servo\",\n      \"File\",\n      \"Task\",\n      \"GPRS\",\n      \"WiFi\",\n      \"Wire\",\n      \"TFT\",\n      \"GSM\",\n      \"SPI\",\n      \"SD\"\n    ],\n    _hints: [\n      \"setup\",\n      \"loop\",\n      \"runShellCommandAsynchronously\",\n      \"analogWriteResolution\",\n      \"retrieveCallingNumber\",\n      \"printFirmwareVersion\",\n      \"analogReadResolution\",\n      \"sendDigitalPortPair\",\n      \"noListenOnLocalhost\",\n      \"readJoystickButton\",\n      \"setFirmwareVersion\",\n      \"readJoystickSwitch\",\n      \"scrollDisplayRight\",\n      \"getVoiceCallStatus\",\n      \"scrollDisplayLeft\",\n      \"writeMicroseconds\",\n      \"delayMicroseconds\",\n      \"beginTransmission\",\n      \"getSignalStrength\",\n      \"runAsynchronously\",\n      \"getAsynchronously\",\n      \"listenOnLocalhost\",\n      \"getCurrentCarrier\",\n      \"readAccelerometer\",\n      \"messageAvailable\",\n      \"sendDigitalPorts\",\n      \"lineFollowConfig\",\n      \"countryNameWrite\",\n      \"runShellCommand\",\n      \"readStringUntil\",\n      \"rewindDirectory\",\n      \"readTemperature\",\n      \"setClockDivider\",\n      \"readLightSensor\",\n      \"endTransmission\",\n      \"analogReference\",\n      \"detachInterrupt\",\n      \"countryNameRead\",\n      \"attachInterrupt\",\n      \"encryptionType\",\n      \"readBytesUntil\",\n      \"robotNameWrite\",\n      \"readMicrophone\",\n      \"robotNameRead\",\n      \"cityNameWrite\",\n      \"userNameWrite\",\n      \"readJoystickY\",\n      \"readJoystickX\",\n      \"mouseReleased\",\n      \"openNextFile\",\n      \"scanNetworks\",\n      \"noInterrupts\",\n      \"digitalWrite\",\n      \"beginSpeaker\",\n      \"mousePressed\",\n      \"isActionDone\",\n      \"mouseDragged\",\n      \"displayLogos\",\n      \"noAutoscroll\",\n      \"addParameter\",\n      \"remoteNumber\",\n      \"getModifiers\",\n      \"keyboardRead\",\n      \"userNameRead\",\n      \"waitContinue\",\n      \"processInput\",\n      \"parseCommand\",\n      \"printVersion\",\n      \"readNetworks\",\n      \"writeMessage\",\n      \"blinkVersion\",\n      \"cityNameRead\",\n      \"readMessage\",\n      \"setDataMode\",\n      \"parsePacket\",\n      \"isListening\",\n      \"setBitOrder\",\n      \"beginPacket\",\n      \"isDirectory\",\n      \"motorsWrite\",\n      \"drawCompass\",\n      \"digitalRead\",\n      \"clearScreen\",\n      \"serialEvent\",\n      \"rightToLeft\",\n      \"setTextSize\",\n      \"leftToRight\",\n      \"requestFrom\",\n      \"keyReleased\",\n      \"compassRead\",\n      \"analogWrite\",\n      \"interrupts\",\n      \"WiFiServer\",\n      \"disconnect\",\n      \"playMelody\",\n      \"parseFloat\",\n      \"autoscroll\",\n      \"getPINUsed\",\n      \"setPINUsed\",\n      \"setTimeout\",\n      \"sendAnalog\",\n      \"readSlider\",\n      \"analogRead\",\n      \"beginWrite\",\n      \"createChar\",\n      \"motorsStop\",\n      \"keyPressed\",\n      \"tempoWrite\",\n      \"readButton\",\n      \"subnetMask\",\n      \"debugPrint\",\n      \"macAddress\",\n      \"writeGreen\",\n      \"randomSeed\",\n      \"attachGPRS\",\n      \"readString\",\n      \"sendString\",\n      \"remotePort\",\n      \"releaseAll\",\n      \"mouseMoved\",\n      \"background\",\n      \"getXChange\",\n      \"getYChange\",\n      \"answerCall\",\n      \"getResult\",\n      \"voiceCall\",\n      \"endPacket\",\n      \"constrain\",\n      \"getSocket\",\n      \"writeJSON\",\n      \"getButton\",\n      \"available\",\n      \"connected\",\n      \"findUntil\",\n      \"readBytes\",\n      \"exitValue\",\n      \"readGreen\",\n      \"writeBlue\",\n      \"startLoop\",\n      \"IPAddress\",\n      \"isPressed\",\n      \"sendSysex\",\n      \"pauseMode\",\n      \"gatewayIP\",\n      \"setCursor\",\n      \"getOemKey\",\n      \"tuneWrite\",\n      \"noDisplay\",\n      \"loadImage\",\n      \"switchPIN\",\n      \"onRequest\",\n      \"onReceive\",\n      \"changePIN\",\n      \"playFile\",\n      \"noBuffer\",\n      \"parseInt\",\n      \"overflow\",\n      \"checkPIN\",\n      \"knobRead\",\n      \"beginTFT\",\n      \"bitClear\",\n      \"updateIR\",\n      \"bitWrite\",\n      \"position\",\n      \"writeRGB\",\n      \"highByte\",\n      \"writeRed\",\n      \"setSpeed\",\n      \"readBlue\",\n      \"noStroke\",\n      \"remoteIP\",\n      \"transfer\",\n      \"shutdown\",\n      \"hangCall\",\n      \"beginSMS\",\n      \"endWrite\",\n      \"attached\",\n      \"maintain\",\n      \"noCursor\",\n      \"checkReg\",\n      \"checkPUK\",\n      \"shiftOut\",\n      \"isValid\",\n      \"shiftIn\",\n      \"pulseIn\",\n      \"connect\",\n      \"println\",\n      \"localIP\",\n      \"pinMode\",\n      \"getIMEI\",\n      \"display\",\n      \"noBlink\",\n      \"process\",\n      \"getBand\",\n      \"running\",\n      \"beginSD\",\n      \"drawBMP\",\n      \"lowByte\",\n      \"setBand\",\n      \"release\",\n      \"bitRead\",\n      \"prepare\",\n      \"pointTo\",\n      \"readRed\",\n      \"setMode\",\n      \"noFill\",\n      \"remove\",\n      \"listen\",\n      \"stroke\",\n      \"detach\",\n      \"attach\",\n      \"noTone\",\n      \"exists\",\n      \"buffer\",\n      \"height\",\n      \"bitSet\",\n      \"circle\",\n      \"config\",\n      \"cursor\",\n      \"random\",\n      \"IRread\",\n      \"setDNS\",\n      \"endSMS\",\n      \"getKey\",\n      \"micros\",\n      \"millis\",\n      \"begin\",\n      \"print\",\n      \"write\",\n      \"ready\",\n      \"flush\",\n      \"width\",\n      \"isPIN\",\n      \"blink\",\n      \"clear\",\n      \"press\",\n      \"mkdir\",\n      \"rmdir\",\n      \"close\",\n      \"point\",\n      \"yield\",\n      \"image\",\n      \"BSSID\",\n      \"click\",\n      \"delay\",\n      \"read\",\n      \"text\",\n      \"move\",\n      \"peek\",\n      \"beep\",\n      \"rect\",\n      \"line\",\n      \"open\",\n      \"seek\",\n      \"fill\",\n      \"size\",\n      \"turn\",\n      \"stop\",\n      \"home\",\n      \"find\",\n      \"step\",\n      \"tone\",\n      \"sqrt\",\n      \"RSSI\",\n      \"SSID\",\n      \"end\",\n      \"bit\",\n      \"tan\",\n      \"cos\",\n      \"sin\",\n      \"pow\",\n      \"map\",\n      \"abs\",\n      \"max\",\n      \"min\",\n      \"get\",\n      \"run\",\n      \"put\"\n    ],\n    literal: [\n      \"DIGITAL_MESSAGE\",\n      \"FIRMATA_STRING\",\n      \"ANALOG_MESSAGE\",\n      \"REPORT_DIGITAL\",\n      \"REPORT_ANALOG\",\n      \"INPUT_PULLUP\",\n      \"SET_PIN_MODE\",\n      \"INTERNAL2V56\",\n      \"SYSTEM_RESET\",\n      \"LED_BUILTIN\",\n      \"INTERNAL1V1\",\n      \"SYSEX_START\",\n      \"INTERNAL\",\n      \"EXTERNAL\",\n      \"DEFAULT\",\n      \"OUTPUT\",\n      \"INPUT\",\n      \"HIGH\",\n      \"LOW\"\n    ]\n  };\n\n  const ARDUINO = cPlusPlus(hljs);\n\n  const kws = /** @type {Record<string,any>} */ (ARDUINO.keywords);\n\n  kws.type = [\n    ...kws.type,\n    ...ARDUINO_KW.type\n  ];\n  kws.literal = [\n    ...kws.literal,\n    ...ARDUINO_KW.literal\n  ];\n  kws.built_in = [\n    ...kws.built_in,\n    ...ARDUINO_KW.built_in\n  ];\n  kws._hints = ARDUINO_KW._hints;\n\n  ARDUINO.name = 'Arduino';\n  ARDUINO.aliases = [ 'ino' ];\n  ARDUINO.supersetOf = \"cpp\";\n\n  return ARDUINO;\n}\n\nmodule.exports = arduino;\n","/*\nLanguage: ARM Assembly\nAuthor: Dan Panzarella <alsoelp@gmail.com>\nDescription: ARM Assembly including Thumb and Thumb2 instructions\nCategory: assembler\n*/\n\n/** @type LanguageFn */\nfunction armasm(hljs) {\n  // local labels: %?[FB]?[AT]?\\d{1,2}\\w+\n\n  const COMMENT = { variants: [\n    hljs.COMMENT('^[ \\\\t]*(?=#)', '$', {\n      relevance: 0,\n      excludeBegin: true\n    }),\n    hljs.COMMENT('[;@]', '$', { relevance: 0 }),\n    hljs.C_LINE_COMMENT_MODE,\n    hljs.C_BLOCK_COMMENT_MODE\n  ] };\n\n  return {\n    name: 'ARM Assembly',\n    case_insensitive: true,\n    aliases: [ 'arm' ],\n    keywords: {\n      $pattern: '\\\\.?' + hljs.IDENT_RE,\n      meta:\n        // GNU preprocs\n        '.2byte .4byte .align .ascii .asciz .balign .byte .code .data .else .end .endif .endm .endr .equ .err .exitm .extern .global .hword .if .ifdef .ifndef .include .irp .long .macro .rept .req .section .set .skip .space .text .word .arm .thumb .code16 .code32 .force_thumb .thumb_func .ltorg '\n        // ARM directives\n        + 'ALIAS ALIGN ARM AREA ASSERT ATTR CN CODE CODE16 CODE32 COMMON CP DATA DCB DCD DCDU DCDO DCFD DCFDU DCI DCQ DCQU DCW DCWU DN ELIF ELSE END ENDFUNC ENDIF ENDP ENTRY EQU EXPORT EXPORTAS EXTERN FIELD FILL FUNCTION GBLA GBLL GBLS GET GLOBAL IF IMPORT INCBIN INCLUDE INFO KEEP LCLA LCLL LCLS LTORG MACRO MAP MEND MEXIT NOFP OPT PRESERVE8 PROC QN READONLY RELOC REQUIRE REQUIRE8 RLIST FN ROUT SETA SETL SETS SN SPACE SUBT THUMB THUMBX TTL WHILE WEND ',\n      built_in:\n        'r0 r1 r2 r3 r4 r5 r6 r7 r8 r9 r10 r11 r12 r13 r14 r15 ' // standard registers\n        + 'w0 w1 w2 w3 w4 w5 w6 w7 w8 w9 w10 w11 w12 w13 w14 w15 ' // 32 bit ARMv8 registers\n        + 'w16 w17 w18 w19 w20 w21 w22 w23 w24 w25 w26 w27 w28 w29 w30 '\n        + 'x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x10 x11 x12 x13 x14 x15 ' // 64 bit ARMv8 registers\n        + 'x16 x17 x18 x19 x20 x21 x22 x23 x24 x25 x26 x27 x28 x29 x30 '\n        + 'pc lr sp ip sl sb fp ' // typical regs plus backward compatibility\n        + 'a1 a2 a3 a4 v1 v2 v3 v4 v5 v6 v7 v8 f0 f1 f2 f3 f4 f5 f6 f7 ' // more regs and fp\n        + 'p0 p1 p2 p3 p4 p5 p6 p7 p8 p9 p10 p11 p12 p13 p14 p15 ' // coprocessor regs\n        + 'c0 c1 c2 c3 c4 c5 c6 c7 c8 c9 c10 c11 c12 c13 c14 c15 ' // more coproc\n        + 'q0 q1 q2 q3 q4 q5 q6 q7 q8 q9 q10 q11 q12 q13 q14 q15 ' // advanced SIMD NEON regs\n\n        // program status registers\n        + 'cpsr_c cpsr_x cpsr_s cpsr_f cpsr_cx cpsr_cxs cpsr_xs cpsr_xsf cpsr_sf cpsr_cxsf '\n        + 'spsr_c spsr_x spsr_s spsr_f spsr_cx spsr_cxs spsr_xs spsr_xsf spsr_sf spsr_cxsf '\n\n        // NEON and VFP registers\n        + 's0 s1 s2 s3 s4 s5 s6 s7 s8 s9 s10 s11 s12 s13 s14 s15 '\n        + 's16 s17 s18 s19 s20 s21 s22 s23 s24 s25 s26 s27 s28 s29 s30 s31 '\n        + 'd0 d1 d2 d3 d4 d5 d6 d7 d8 d9 d10 d11 d12 d13 d14 d15 '\n        + 'd16 d17 d18 d19 d20 d21 d22 d23 d24 d25 d26 d27 d28 d29 d30 d31 '\n\n        + '{PC} {VAR} {TRUE} {FALSE} {OPT} {CONFIG} {ENDIAN} {CODESIZE} {CPU} {FPU} {ARCHITECTURE} {PCSTOREOFFSET} {ARMASM_VERSION} {INTER} {ROPI} {RWPI} {SWST} {NOSWST} . @'\n    },\n    contains: [\n      {\n        className: 'keyword',\n        begin: '\\\\b(' // mnemonics\n            + 'adc|'\n            + '(qd?|sh?|u[qh]?)?add(8|16)?|usada?8|(q|sh?|u[qh]?)?(as|sa)x|'\n            + 'and|adrl?|sbc|rs[bc]|asr|b[lx]?|blx|bxj|cbn?z|tb[bh]|bic|'\n            + 'bfc|bfi|[su]bfx|bkpt|cdp2?|clz|clrex|cmp|cmn|cpsi[ed]|cps|'\n            + 'setend|dbg|dmb|dsb|eor|isb|it[te]{0,3}|lsl|lsr|ror|rrx|'\n            + 'ldm(([id][ab])|f[ds])?|ldr((s|ex)?[bhd])?|movt?|mvn|mra|mar|'\n            + 'mul|[us]mull|smul[bwt][bt]|smu[as]d|smmul|smmla|'\n            + 'mla|umlaal|smlal?([wbt][bt]|d)|mls|smlsl?[ds]|smc|svc|sev|'\n            + 'mia([bt]{2}|ph)?|mrr?c2?|mcrr2?|mrs|msr|orr|orn|pkh(tb|bt)|rbit|'\n            + 'rev(16|sh)?|sel|[su]sat(16)?|nop|pop|push|rfe([id][ab])?|'\n            + 'stm([id][ab])?|str(ex)?[bhd]?|(qd?)?sub|(sh?|q|u[qh]?)?sub(8|16)|'\n            + '[su]xt(a?h|a?b(16)?)|srs([id][ab])?|swpb?|swi|smi|tst|teq|'\n            + 'wfe|wfi|yield'\n        + ')'\n        + '(eq|ne|cs|cc|mi|pl|vs|vc|hi|ls|ge|lt|gt|le|al|hs|lo)?' // condition codes\n        + '[sptrx]?' // legal postfixes\n        + '(?=\\\\s)' // followed by space\n      },\n      COMMENT,\n      hljs.QUOTE_STRING_MODE,\n      {\n        className: 'string',\n        begin: '\\'',\n        end: '[^\\\\\\\\]\\'',\n        relevance: 0\n      },\n      {\n        className: 'title',\n        begin: '\\\\|',\n        end: '\\\\|',\n        illegal: '\\\\n',\n        relevance: 0\n      },\n      {\n        className: 'number',\n        variants: [\n          { // hex\n            begin: '[#$=]?0x[0-9a-f]+' },\n          { // bin\n            begin: '[#$=]?0b[01]+' },\n          { // literal\n            begin: '[#$=]\\\\d+' },\n          { // bare number\n            begin: '\\\\b\\\\d+' }\n        ],\n        relevance: 0\n      },\n      {\n        className: 'symbol',\n        variants: [\n          { // GNU ARM syntax\n            begin: '^[ \\\\t]*[a-z_\\\\.\\\\$][a-z0-9_\\\\.\\\\$]+:' },\n          { // ARM syntax\n            begin: '^[a-z_\\\\.\\\\$][a-z0-9_\\\\.\\\\$]+' },\n          { // label reference\n            begin: '[=#]\\\\w+' }\n        ],\n        relevance: 0\n      }\n    ]\n  };\n}\n\nmodule.exports = armasm;\n","/*\nLanguage: HTML, XML\nWebsite: https://www.w3.org/XML/\nCategory: common, web\nAudit: 2020\n*/\n\n/** @type LanguageFn */\nfunction xml(hljs) {\n  const regex = hljs.regex;\n  // XML names can have the following additional letters: https://www.w3.org/TR/xml/#NT-NameChar\n  // OTHER_NAME_CHARS = /[:\\-.0-9\\u00B7\\u0300-\\u036F\\u203F-\\u2040]/;\n  // Element names start with NAME_START_CHAR followed by optional other Unicode letters, ASCII digits, hyphens, underscores, and periods\n  // const TAG_NAME_RE = regex.concat(/[A-Z_a-z\\u00C0-\\u00D6\\u00D8-\\u00F6\\u00F8-\\u02FF\\u0370-\\u037D\\u037F-\\u1FFF\\u200C-\\u200D\\u2070-\\u218F\\u2C00-\\u2FEF\\u3001-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFFD]/, regex.optional(/[A-Z_a-z\\u00C0-\\u00D6\\u00D8-\\u00F6\\u00F8-\\u02FF\\u0370-\\u037D\\u037F-\\u1FFF\\u200C-\\u200D\\u2070-\\u218F\\u2C00-\\u2FEF\\u3001-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFFD\\-.0-9\\u00B7\\u0300-\\u036F\\u203F-\\u2040]*:/), /[A-Z_a-z\\u00C0-\\u00D6\\u00D8-\\u00F6\\u00F8-\\u02FF\\u0370-\\u037D\\u037F-\\u1FFF\\u200C-\\u200D\\u2070-\\u218F\\u2C00-\\u2FEF\\u3001-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFFD\\-.0-9\\u00B7\\u0300-\\u036F\\u203F-\\u2040]*/);;\n  // const XML_IDENT_RE = /[A-Z_a-z:\\u00C0-\\u00D6\\u00D8-\\u00F6\\u00F8-\\u02FF\\u0370-\\u037D\\u037F-\\u1FFF\\u200C-\\u200D\\u2070-\\u218F\\u2C00-\\u2FEF\\u3001-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFFD\\-.0-9\\u00B7\\u0300-\\u036F\\u203F-\\u2040]+/;\n  // const TAG_NAME_RE = regex.concat(/[A-Z_a-z\\u00C0-\\u00D6\\u00D8-\\u00F6\\u00F8-\\u02FF\\u0370-\\u037D\\u037F-\\u1FFF\\u200C-\\u200D\\u2070-\\u218F\\u2C00-\\u2FEF\\u3001-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFFD]/, regex.optional(/[A-Z_a-z\\u00C0-\\u00D6\\u00D8-\\u00F6\\u00F8-\\u02FF\\u0370-\\u037D\\u037F-\\u1FFF\\u200C-\\u200D\\u2070-\\u218F\\u2C00-\\u2FEF\\u3001-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFFD\\-.0-9\\u00B7\\u0300-\\u036F\\u203F-\\u2040]*:/), /[A-Z_a-z\\u00C0-\\u00D6\\u00D8-\\u00F6\\u00F8-\\u02FF\\u0370-\\u037D\\u037F-\\u1FFF\\u200C-\\u200D\\u2070-\\u218F\\u2C00-\\u2FEF\\u3001-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFFD\\-.0-9\\u00B7\\u0300-\\u036F\\u203F-\\u2040]*/);\n  // however, to cater for performance and more Unicode support rely simply on the Unicode letter class\n  const TAG_NAME_RE = regex.concat(/[\\p{L}_]/u, regex.optional(/[\\p{L}0-9_.-]*:/u), /[\\p{L}0-9_.-]*/u);\n  const XML_IDENT_RE = /[\\p{L}0-9._:-]+/u;\n  const XML_ENTITIES = {\n    className: 'symbol',\n    begin: /&[a-z]+;|&#[0-9]+;|&#x[a-f0-9]+;/\n  };\n  const XML_META_KEYWORDS = {\n    begin: /\\s/,\n    contains: [\n      {\n        className: 'keyword',\n        begin: /#?[a-z_][a-z1-9_-]+/,\n        illegal: /\\n/\n      }\n    ]\n  };\n  const XML_META_PAR_KEYWORDS = hljs.inherit(XML_META_KEYWORDS, {\n    begin: /\\(/,\n    end: /\\)/\n  });\n  const APOS_META_STRING_MODE = hljs.inherit(hljs.APOS_STRING_MODE, { className: 'string' });\n  const QUOTE_META_STRING_MODE = hljs.inherit(hljs.QUOTE_STRING_MODE, { className: 'string' });\n  const TAG_INTERNALS = {\n    endsWithParent: true,\n    illegal: /</,\n    relevance: 0,\n    contains: [\n      {\n        className: 'attr',\n        begin: XML_IDENT_RE,\n        relevance: 0\n      },\n      {\n        begin: /=\\s*/,\n        relevance: 0,\n        contains: [\n          {\n            className: 'string',\n            endsParent: true,\n            variants: [\n              {\n                begin: /\"/,\n                end: /\"/,\n                contains: [ XML_ENTITIES ]\n              },\n              {\n                begin: /'/,\n                end: /'/,\n                contains: [ XML_ENTITIES ]\n              },\n              { begin: /[^\\s\"'=<>`]+/ }\n            ]\n          }\n        ]\n      }\n    ]\n  };\n  return {\n    name: 'HTML, XML',\n    aliases: [\n      'html',\n      'xhtml',\n      'rss',\n      'atom',\n      'xjb',\n      'xsd',\n      'xsl',\n      'plist',\n      'wsf',\n      'svg'\n    ],\n    case_insensitive: true,\n    unicodeRegex: true,\n    contains: [\n      {\n        className: 'meta',\n        begin: /<![a-z]/,\n        end: />/,\n        relevance: 10,\n        contains: [\n          XML_META_KEYWORDS,\n          QUOTE_META_STRING_MODE,\n          APOS_META_STRING_MODE,\n          XML_META_PAR_KEYWORDS,\n          {\n            begin: /\\[/,\n            end: /\\]/,\n            contains: [\n              {\n                className: 'meta',\n                begin: /<![a-z]/,\n                end: />/,\n                contains: [\n                  XML_META_KEYWORDS,\n                  XML_META_PAR_KEYWORDS,\n                  QUOTE_META_STRING_MODE,\n                  APOS_META_STRING_MODE\n                ]\n              }\n            ]\n          }\n        ]\n      },\n      hljs.COMMENT(\n        /<!--/,\n        /-->/,\n        { relevance: 10 }\n      ),\n      {\n        begin: /<!\\[CDATA\\[/,\n        end: /\\]\\]>/,\n        relevance: 10\n      },\n      XML_ENTITIES,\n      // xml processing instructions\n      {\n        className: 'meta',\n        end: /\\?>/,\n        variants: [\n          {\n            begin: /<\\?xml/,\n            relevance: 10,\n            contains: [\n              QUOTE_META_STRING_MODE\n            ]\n          },\n          {\n            begin: /<\\?[a-z][a-z0-9]+/,\n          }\n        ]\n\n      },\n      {\n        className: 'tag',\n        /*\n        The lookahead pattern (?=...) ensures that 'begin' only matches\n        '<style' as a single word, followed by a whitespace or an\n        ending bracket.\n        */\n        begin: /<style(?=\\s|>)/,\n        end: />/,\n        keywords: { name: 'style' },\n        contains: [ TAG_INTERNALS ],\n        starts: {\n          end: /<\\/style>/,\n          returnEnd: true,\n          subLanguage: [\n            'css',\n            'xml'\n          ]\n        }\n      },\n      {\n        className: 'tag',\n        // See the comment in the <style tag about the lookahead pattern\n        begin: /<script(?=\\s|>)/,\n        end: />/,\n        keywords: { name: 'script' },\n        contains: [ TAG_INTERNALS ],\n        starts: {\n          end: /<\\/script>/,\n          returnEnd: true,\n          subLanguage: [\n            'javascript',\n            'handlebars',\n            'xml'\n          ]\n        }\n      },\n      // we need this for now for jSX\n      {\n        className: 'tag',\n        begin: /<>|<\\/>/\n      },\n      // open tag\n      {\n        className: 'tag',\n        begin: regex.concat(\n          /</,\n          regex.lookahead(regex.concat(\n            TAG_NAME_RE,\n            // <tag/>\n            // <tag>\n            // <tag ...\n            regex.either(/\\/>/, />/, /\\s/)\n          ))\n        ),\n        end: /\\/?>/,\n        contains: [\n          {\n            className: 'name',\n            begin: TAG_NAME_RE,\n            relevance: 0,\n            starts: TAG_INTERNALS\n          }\n        ]\n      },\n      // close tag\n      {\n        className: 'tag',\n        begin: regex.concat(\n          /<\\//,\n          regex.lookahead(regex.concat(\n            TAG_NAME_RE, />/\n          ))\n        ),\n        contains: [\n          {\n            className: 'name',\n            begin: TAG_NAME_RE,\n            relevance: 0\n          },\n          {\n            begin: />/,\n            relevance: 0,\n            endsParent: true\n          }\n        ]\n      }\n    ]\n  };\n}\n\nmodule.exports = xml;\n","/*\nLanguage: AsciiDoc\nRequires: xml.js\nAuthor: Dan Allen <dan.j.allen@gmail.com>\nWebsite: http://asciidoc.org\nDescription: A semantic, text-based document format that can be exported to HTML, DocBook and other backends.\nCategory: markup\n*/\n\n/** @type LanguageFn */\nfunction asciidoc(hljs) {\n  const regex = hljs.regex;\n  const HORIZONTAL_RULE = {\n    begin: '^\\'{3,}[ \\\\t]*$',\n    relevance: 10\n  };\n  const ESCAPED_FORMATTING = [\n    // escaped constrained formatting marks (i.e., \\* \\_ or \\`)\n    { begin: /\\\\[*_`]/ },\n    // escaped unconstrained formatting marks (i.e., \\\\** \\\\__ or \\\\``)\n    // must ignore until the next formatting marks\n    // this rule might not be 100% compliant with Asciidoctor 2.0 but we are entering undefined behavior territory...\n    { begin: /\\\\\\\\\\*{2}[^\\n]*?\\*{2}/ },\n    { begin: /\\\\\\\\_{2}[^\\n]*_{2}/ },\n    { begin: /\\\\\\\\`{2}[^\\n]*`{2}/ },\n    // guard: constrained formatting mark may not be preceded by \":\", \";\" or\n    // \"}\". match these so the constrained rule doesn't see them\n    { begin: /[:;}][*_`](?![*_`])/ }\n  ];\n  const STRONG = [\n    // inline unconstrained strong (single line)\n    {\n      className: 'strong',\n      begin: /\\*{2}([^\\n]+?)\\*{2}/\n    },\n    // inline unconstrained strong (multi-line)\n    {\n      className: 'strong',\n      begin: regex.concat(\n        /\\*\\*/,\n        /((\\*(?!\\*)|\\\\[^\\n]|[^*\\n\\\\])+\\n)+/,\n        /(\\*(?!\\*)|\\\\[^\\n]|[^*\\n\\\\])*/,\n        /\\*\\*/\n      ),\n      relevance: 0\n    },\n    // inline constrained strong (single line)\n    {\n      className: 'strong',\n      // must not precede or follow a word character\n      begin: /\\B\\*(\\S|\\S[^\\n]*?\\S)\\*(?!\\w)/\n    },\n    // inline constrained strong (multi-line)\n    {\n      className: 'strong',\n      // must not precede or follow a word character\n      begin: /\\*[^\\s]([^\\n]+\\n)+([^\\n]+)\\*/\n    }\n  ];\n  const EMPHASIS = [\n    // inline unconstrained emphasis (single line)\n    {\n      className: 'emphasis',\n      begin: /_{2}([^\\n]+?)_{2}/\n    },\n    // inline unconstrained emphasis (multi-line)\n    {\n      className: 'emphasis',\n      begin: regex.concat(\n        /__/,\n        /((_(?!_)|\\\\[^\\n]|[^_\\n\\\\])+\\n)+/,\n        /(_(?!_)|\\\\[^\\n]|[^_\\n\\\\])*/,\n        /__/\n      ),\n      relevance: 0\n    },\n    // inline constrained emphasis (single line)\n    {\n      className: 'emphasis',\n      // must not precede or follow a word character\n      begin: /\\b_(\\S|\\S[^\\n]*?\\S)_(?!\\w)/\n    },\n    // inline constrained emphasis (multi-line)\n    {\n      className: 'emphasis',\n      // must not precede or follow a word character\n      begin: /_[^\\s]([^\\n]+\\n)+([^\\n]+)_/\n    },\n    // inline constrained emphasis using single quote (legacy)\n    {\n      className: 'emphasis',\n      // must not follow a word character or be followed by a single quote or space\n      begin: '\\\\B\\'(?![\\'\\\\s])',\n      end: '(\\\\n{2}|\\')',\n      // allow escaped single quote followed by word char\n      contains: [\n        {\n          begin: '\\\\\\\\\\'\\\\w',\n          relevance: 0\n        }\n      ],\n      relevance: 0\n    }\n  ];\n  const ADMONITION = {\n    className: 'symbol',\n    begin: '^(NOTE|TIP|IMPORTANT|WARNING|CAUTION):\\\\s+',\n    relevance: 10\n  };\n  const BULLET_LIST = {\n    className: 'bullet',\n    begin: '^(\\\\*+|-+|\\\\.+|[^\\\\n]+?::)\\\\s+'\n  };\n\n  return {\n    name: 'AsciiDoc',\n    aliases: [ 'adoc' ],\n    contains: [\n      // block comment\n      hljs.COMMENT(\n        '^/{4,}\\\\n',\n        '\\\\n/{4,}$',\n        // can also be done as...\n        // '^/{4,}$',\n        // '^/{4,}$',\n        { relevance: 10 }\n      ),\n      // line comment\n      hljs.COMMENT(\n        '^//',\n        '$',\n        { relevance: 0 }\n      ),\n      // title\n      {\n        className: 'title',\n        begin: '^\\\\.\\\\w.*$'\n      },\n      // example, admonition & sidebar blocks\n      {\n        begin: '^[=\\\\*]{4,}\\\\n',\n        end: '\\\\n^[=\\\\*]{4,}$',\n        relevance: 10\n      },\n      // headings\n      {\n        className: 'section',\n        relevance: 10,\n        variants: [\n          { begin: '^(={1,6})[ \\t].+?([ \\t]\\\\1)?$' },\n          { begin: '^[^\\\\[\\\\]\\\\n]+?\\\\n[=\\\\-~\\\\^\\\\+]{2,}$' }\n        ]\n      },\n      // document attributes\n      {\n        className: 'meta',\n        begin: '^:.+?:',\n        end: '\\\\s',\n        excludeEnd: true,\n        relevance: 10\n      },\n      // block attributes\n      {\n        className: 'meta',\n        begin: '^\\\\[.+?\\\\]$',\n        relevance: 0\n      },\n      // quoteblocks\n      {\n        className: 'quote',\n        begin: '^_{4,}\\\\n',\n        end: '\\\\n_{4,}$',\n        relevance: 10\n      },\n      // listing and literal blocks\n      {\n        className: 'code',\n        begin: '^[\\\\-\\\\.]{4,}\\\\n',\n        end: '\\\\n[\\\\-\\\\.]{4,}$',\n        relevance: 10\n      },\n      // passthrough blocks\n      {\n        begin: '^\\\\+{4,}\\\\n',\n        end: '\\\\n\\\\+{4,}$',\n        contains: [\n          {\n            begin: '<',\n            end: '>',\n            subLanguage: 'xml',\n            relevance: 0\n          }\n        ],\n        relevance: 10\n      },\n\n      BULLET_LIST,\n      ADMONITION,\n      ...ESCAPED_FORMATTING,\n      ...STRONG,\n      ...EMPHASIS,\n\n      // inline smart quotes\n      {\n        className: 'string',\n        variants: [\n          { begin: \"``.+?''\" },\n          { begin: \"`.+?'\" }\n        ]\n      },\n      // inline unconstrained emphasis\n      {\n        className: 'code',\n        begin: /`{2}/,\n        end: /(\\n{2}|`{2})/\n      },\n      // inline code snippets (TODO should get same treatment as strong and emphasis)\n      {\n        className: 'code',\n        begin: '(`.+?`|\\\\+.+?\\\\+)',\n        relevance: 0\n      },\n      // indented literal block\n      {\n        className: 'code',\n        begin: '^[ \\\\t]',\n        end: '$',\n        relevance: 0\n      },\n      HORIZONTAL_RULE,\n      // images and links\n      {\n        begin: '(link:)?(http|https|ftp|file|irc|image:?):\\\\S+?\\\\[[^[]*?\\\\]',\n        returnBegin: true,\n        contains: [\n          {\n            begin: '(link|image:?):',\n            relevance: 0\n          },\n          {\n            className: 'link',\n            begin: '\\\\w',\n            end: '[^\\\\[]+',\n            relevance: 0\n          },\n          {\n            className: 'string',\n            begin: '\\\\[',\n            end: '\\\\]',\n            excludeBegin: true,\n            excludeEnd: true,\n            relevance: 0\n          }\n        ],\n        relevance: 10\n      }\n    ]\n  };\n}\n\nmodule.exports = asciidoc;\n","/*\nLanguage: AspectJ\nAuthor: Hakan Ozler <ozler.hakan@gmail.com>\nWebsite: https://www.eclipse.org/aspectj/\nDescription: Syntax Highlighting for the AspectJ Language which is a general-purpose aspect-oriented extension to the Java programming language.\nCategory: system\nAudit: 2020\n*/\n\n/** @type LanguageFn */\nfunction aspectj(hljs) {\n  const regex = hljs.regex;\n  const KEYWORDS = [\n    \"false\",\n    \"synchronized\",\n    \"int\",\n    \"abstract\",\n    \"float\",\n    \"private\",\n    \"char\",\n    \"boolean\",\n    \"static\",\n    \"null\",\n    \"if\",\n    \"const\",\n    \"for\",\n    \"true\",\n    \"while\",\n    \"long\",\n    \"throw\",\n    \"strictfp\",\n    \"finally\",\n    \"protected\",\n    \"import\",\n    \"native\",\n    \"final\",\n    \"return\",\n    \"void\",\n    \"enum\",\n    \"else\",\n    \"extends\",\n    \"implements\",\n    \"break\",\n    \"transient\",\n    \"new\",\n    \"catch\",\n    \"instanceof\",\n    \"byte\",\n    \"super\",\n    \"volatile\",\n    \"case\",\n    \"assert\",\n    \"short\",\n    \"package\",\n    \"default\",\n    \"double\",\n    \"public\",\n    \"try\",\n    \"this\",\n    \"switch\",\n    \"continue\",\n    \"throws\",\n    \"privileged\",\n    \"aspectOf\",\n    \"adviceexecution\",\n    \"proceed\",\n    \"cflowbelow\",\n    \"cflow\",\n    \"initialization\",\n    \"preinitialization\",\n    \"staticinitialization\",\n    \"withincode\",\n    \"target\",\n    \"within\",\n    \"execution\",\n    \"getWithinTypeName\",\n    \"handler\",\n    \"thisJoinPoint\",\n    \"thisJoinPointStaticPart\",\n    \"thisEnclosingJoinPointStaticPart\",\n    \"declare\",\n    \"parents\",\n    \"warning\",\n    \"error\",\n    \"soft\",\n    \"precedence\",\n    \"thisAspectInstance\"\n  ];\n  const SHORTKEYS = [\n    \"get\",\n    \"set\",\n    \"args\",\n    \"call\"\n  ];\n\n  return {\n    name: 'AspectJ',\n    keywords: KEYWORDS,\n    illegal: /<\\/|#/,\n    contains: [\n      hljs.COMMENT(\n        /\\/\\*\\*/,\n        /\\*\\//,\n        {\n          relevance: 0,\n          contains: [\n            {\n              // eat up @'s in emails to prevent them to be recognized as doctags\n              begin: /\\w+@/,\n              relevance: 0\n            },\n            {\n              className: 'doctag',\n              begin: /@[A-Za-z]+/\n            }\n          ]\n        }\n      ),\n      hljs.C_LINE_COMMENT_MODE,\n      hljs.C_BLOCK_COMMENT_MODE,\n      hljs.APOS_STRING_MODE,\n      hljs.QUOTE_STRING_MODE,\n      {\n        className: 'class',\n        beginKeywords: 'aspect',\n        end: /[{;=]/,\n        excludeEnd: true,\n        illegal: /[:;\"\\[\\]]/,\n        contains: [\n          { beginKeywords: 'extends implements pertypewithin perthis pertarget percflowbelow percflow issingleton' },\n          hljs.UNDERSCORE_TITLE_MODE,\n          {\n            begin: /\\([^\\)]*/,\n            end: /[)]+/,\n            keywords: KEYWORDS.concat(SHORTKEYS),\n            excludeEnd: false\n          }\n        ]\n      },\n      {\n        className: 'class',\n        beginKeywords: 'class interface',\n        end: /[{;=]/,\n        excludeEnd: true,\n        relevance: 0,\n        keywords: 'class interface',\n        illegal: /[:\"\\[\\]]/,\n        contains: [\n          { beginKeywords: 'extends implements' },\n          hljs.UNDERSCORE_TITLE_MODE\n        ]\n      },\n      {\n        // AspectJ Constructs\n        beginKeywords: 'pointcut after before around throwing returning',\n        end: /[)]/,\n        excludeEnd: false,\n        illegal: /[\"\\[\\]]/,\n        contains: [\n          {\n            begin: regex.concat(hljs.UNDERSCORE_IDENT_RE, /\\s*\\(/),\n            returnBegin: true,\n            contains: [ hljs.UNDERSCORE_TITLE_MODE ]\n          }\n        ]\n      },\n      {\n        begin: /[:]/,\n        returnBegin: true,\n        end: /[{;]/,\n        relevance: 0,\n        excludeEnd: false,\n        keywords: KEYWORDS,\n        illegal: /[\"\\[\\]]/,\n        contains: [\n          {\n            begin: regex.concat(hljs.UNDERSCORE_IDENT_RE, /\\s*\\(/),\n            keywords: KEYWORDS.concat(SHORTKEYS),\n            relevance: 0\n          },\n          hljs.QUOTE_STRING_MODE\n        ]\n      },\n      {\n        // this prevents 'new Name(...), or throw ...' from being recognized as a function definition\n        beginKeywords: 'new throw',\n        relevance: 0\n      },\n      {\n        // the function class is a bit different for AspectJ compared to the Java language\n        className: 'function',\n        begin: /\\w+ +\\w+(\\.\\w+)?\\s*\\([^\\)]*\\)\\s*((throws)[\\w\\s,]+)?[\\{;]/,\n        returnBegin: true,\n        end: /[{;=]/,\n        keywords: KEYWORDS,\n        excludeEnd: true,\n        contains: [\n          {\n            begin: regex.concat(hljs.UNDERSCORE_IDENT_RE, /\\s*\\(/),\n            returnBegin: true,\n            relevance: 0,\n            contains: [ hljs.UNDERSCORE_TITLE_MODE ]\n          },\n          {\n            className: 'params',\n            begin: /\\(/,\n            end: /\\)/,\n            relevance: 0,\n            keywords: KEYWORDS,\n            contains: [\n              hljs.APOS_STRING_MODE,\n              hljs.QUOTE_STRING_MODE,\n              hljs.C_NUMBER_MODE,\n              hljs.C_BLOCK_COMMENT_MODE\n            ]\n          },\n          hljs.C_LINE_COMMENT_MODE,\n          hljs.C_BLOCK_COMMENT_MODE\n        ]\n      },\n      hljs.C_NUMBER_MODE,\n      {\n        // annotation is also used in this language\n        className: 'meta',\n        begin: /@[A-Za-z]+/\n      }\n    ]\n  };\n}\n\nmodule.exports = aspectj;\n","/*\nLanguage: AutoHotkey\nAuthor: Seongwon Lee <dlimpid@gmail.com>\nDescription: AutoHotkey language definition\nCategory: scripting\n*/\n\n/** @type LanguageFn */\nfunction autohotkey(hljs) {\n  const BACKTICK_ESCAPE = { begin: '`[\\\\s\\\\S]' };\n\n  return {\n    name: 'AutoHotkey',\n    case_insensitive: true,\n    aliases: [ 'ahk' ],\n    keywords: {\n      keyword: 'Break Continue Critical Exit ExitApp Gosub Goto New OnExit Pause return SetBatchLines SetTimer Suspend Thread Throw Until ahk_id ahk_class ahk_pid ahk_exe ahk_group',\n      literal: 'true false NOT AND OR',\n      built_in: 'ComSpec Clipboard ClipboardAll ErrorLevel'\n    },\n    contains: [\n      BACKTICK_ESCAPE,\n      hljs.inherit(hljs.QUOTE_STRING_MODE, { contains: [ BACKTICK_ESCAPE ] }),\n      hljs.COMMENT(';', '$', { relevance: 0 }),\n      hljs.C_BLOCK_COMMENT_MODE,\n      {\n        className: 'number',\n        begin: hljs.NUMBER_RE,\n        relevance: 0\n      },\n      {\n        // subst would be the most accurate however fails the point of\n        // highlighting. variable is comparably the most accurate that actually\n        // has some effect\n        className: 'variable',\n        begin: '%[a-zA-Z0-9#_$@]+%'\n      },\n      {\n        className: 'built_in',\n        begin: '^\\\\s*\\\\w+\\\\s*(,|%)'\n        // I don't really know if this is totally relevant\n      },\n      {\n        // symbol would be most accurate however is highlighted just like\n        // built_in and that makes up a lot of AutoHotkey code meaning that it\n        // would fail to highlight anything\n        className: 'title',\n        variants: [\n          { begin: '^[^\\\\n\";]+::(?!=)' },\n          {\n            begin: '^[^\\\\n\";]+:(?!=)',\n            // zero relevance as it catches a lot of things\n            // followed by a single ':' in many languages\n            relevance: 0\n          }\n        ]\n      },\n      {\n        className: 'meta',\n        begin: '^\\\\s*#\\\\w+',\n        end: '$',\n        relevance: 0\n      },\n      {\n        className: 'built_in',\n        begin: 'A_[a-zA-Z0-9]+'\n      },\n      {\n        // consecutive commas, not for highlighting but just for relevance\n        begin: ',\\\\s*,' }\n    ]\n  };\n}\n\nmodule.exports = autohotkey;\n","/*\nLanguage: AutoIt\nAuthor: Manh Tuan <junookyo@gmail.com>\nDescription: AutoIt language definition\nCategory: scripting\n*/\n\n/** @type LanguageFn */\nfunction autoit(hljs) {\n  const KEYWORDS = 'ByRef Case Const ContinueCase ContinueLoop '\n        + 'Dim Do Else ElseIf EndFunc EndIf EndSelect '\n        + 'EndSwitch EndWith Enum Exit ExitLoop For Func '\n        + 'Global If In Local Next ReDim Return Select Static '\n        + 'Step Switch Then To Until Volatile WEnd While With';\n\n  const DIRECTIVES = [\n    \"EndRegion\",\n    \"forcedef\",\n    \"forceref\",\n    \"ignorefunc\",\n    \"include\",\n    \"include-once\",\n    \"NoTrayIcon\",\n    \"OnAutoItStartRegister\",\n    \"pragma\",\n    \"Region\",\n    \"RequireAdmin\",\n    \"Tidy_Off\",\n    \"Tidy_On\",\n    \"Tidy_Parameters\"\n  ];\n\n  const LITERAL = 'True False And Null Not Or Default';\n\n  const BUILT_IN =\n          'Abs ACos AdlibRegister AdlibUnRegister Asc AscW ASin Assign ATan AutoItSetOption AutoItWinGetTitle AutoItWinSetTitle Beep Binary BinaryLen BinaryMid BinaryToString BitAND BitNOT BitOR BitRotate BitShift BitXOR BlockInput Break Call CDTray Ceiling Chr ChrW ClipGet ClipPut ConsoleRead ConsoleWrite ConsoleWriteError ControlClick ControlCommand ControlDisable ControlEnable ControlFocus ControlGetFocus ControlGetHandle ControlGetPos ControlGetText ControlHide ControlListView ControlMove ControlSend ControlSetText ControlShow ControlTreeView Cos Dec DirCopy DirCreate DirGetSize DirMove DirRemove DllCall DllCallAddress DllCallbackFree DllCallbackGetPtr DllCallbackRegister DllClose DllOpen DllStructCreate DllStructGetData DllStructGetPtr DllStructGetSize DllStructSetData DriveGetDrive DriveGetFileSystem DriveGetLabel DriveGetSerial DriveGetType DriveMapAdd DriveMapDel DriveMapGet DriveSetLabel DriveSpaceFree DriveSpaceTotal DriveStatus EnvGet EnvSet EnvUpdate Eval Execute Exp FileChangeDir FileClose FileCopy FileCreateNTFSLink FileCreateShortcut FileDelete FileExists FileFindFirstFile FileFindNextFile FileFlush FileGetAttrib FileGetEncoding FileGetLongName FileGetPos FileGetShortcut FileGetShortName FileGetSize FileGetTime FileGetVersion FileInstall FileMove FileOpen FileOpenDialog FileRead FileReadLine FileReadToArray FileRecycle FileRecycleEmpty FileSaveDialog FileSelectFolder FileSetAttrib FileSetEnd FileSetPos FileSetTime FileWrite FileWriteLine Floor FtpSetProxy FuncName GUICreate GUICtrlCreateAvi GUICtrlCreateButton GUICtrlCreateCheckbox GUICtrlCreateCombo GUICtrlCreateContextMenu GUICtrlCreateDate GUICtrlCreateDummy GUICtrlCreateEdit GUICtrlCreateGraphic GUICtrlCreateGroup GUICtrlCreateIcon GUICtrlCreateInput GUICtrlCreateLabel GUICtrlCreateList GUICtrlCreateListView GUICtrlCreateListViewItem GUICtrlCreateMenu GUICtrlCreateMenuItem GUICtrlCreateMonthCal GUICtrlCreateObj GUICtrlCreatePic GUICtrlCreateProgress GUICtrlCreateRadio GUICtrlCreateSlider GUICtrlCreateTab GUICtrlCreateTabItem GUICtrlCreateTreeView GUICtrlCreateTreeViewItem GUICtrlCreateUpdown GUICtrlDelete GUICtrlGetHandle GUICtrlGetState GUICtrlRead GUICtrlRecvMsg GUICtrlRegisterListViewSort GUICtrlSendMsg GUICtrlSendToDummy GUICtrlSetBkColor GUICtrlSetColor GUICtrlSetCursor GUICtrlSetData GUICtrlSetDefBkColor GUICtrlSetDefColor GUICtrlSetFont GUICtrlSetGraphic GUICtrlSetImage GUICtrlSetLimit GUICtrlSetOnEvent GUICtrlSetPos GUICtrlSetResizing GUICtrlSetState GUICtrlSetStyle GUICtrlSetTip GUIDelete GUIGetCursorInfo GUIGetMsg GUIGetStyle GUIRegisterMsg GUISetAccelerators GUISetBkColor GUISetCoord GUISetCursor GUISetFont GUISetHelp GUISetIcon GUISetOnEvent GUISetState GUISetStyle GUIStartGroup GUISwitch Hex HotKeySet HttpSetProxy HttpSetUserAgent HWnd InetClose InetGet InetGetInfo InetGetSize InetRead IniDelete IniRead IniReadSection IniReadSectionNames IniRenameSection IniWrite IniWriteSection InputBox Int IsAdmin IsArray IsBinary IsBool IsDeclared IsDllStruct IsFloat IsFunc IsHWnd IsInt IsKeyword IsNumber IsObj IsPtr IsString Log MemGetStats Mod MouseClick MouseClickDrag MouseDown MouseGetCursor MouseGetPos MouseMove MouseUp MouseWheel MsgBox Number ObjCreate ObjCreateInterface ObjEvent ObjGet ObjName OnAutoItExitRegister OnAutoItExitUnRegister Ping PixelChecksum PixelGetColor PixelSearch ProcessClose ProcessExists ProcessGetStats ProcessList ProcessSetPriority ProcessWait ProcessWaitClose ProgressOff ProgressOn ProgressSet Ptr Random RegDelete RegEnumKey RegEnumVal RegRead RegWrite Round Run RunAs RunAsWait RunWait Send SendKeepActive SetError SetExtended ShellExecute ShellExecuteWait Shutdown Sin Sleep SoundPlay SoundSetWaveVolume SplashImageOn SplashOff SplashTextOn Sqrt SRandom StatusbarGetText StderrRead StdinWrite StdioClose StdoutRead String StringAddCR StringCompare StringFormat StringFromASCIIArray StringInStr StringIsAlNum StringIsAlpha StringIsASCII StringIsDigit StringIsFloat StringIsInt StringIsLower StringIsSpace StringIsUpper StringIsXDigit StringLeft StringLen StringLower StringMid StringRegExp StringRegExpReplace StringReplace StringReverse StringRight StringSplit StringStripCR StringStripWS StringToASCIIArray StringToBinary StringTrimLeft StringTrimRight StringUpper Tan TCPAccept TCPCloseSocket TCPConnect TCPListen TCPNameToIP TCPRecv TCPSend TCPShutdown, UDPShutdown TCPStartup, UDPStartup TimerDiff TimerInit ToolTip TrayCreateItem TrayCreateMenu TrayGetMsg TrayItemDelete TrayItemGetHandle TrayItemGetState TrayItemGetText TrayItemSetOnEvent TrayItemSetState TrayItemSetText TraySetClick TraySetIcon TraySetOnEvent TraySetPauseIcon TraySetState TraySetToolTip TrayTip UBound UDPBind UDPCloseSocket UDPOpen UDPRecv UDPSend VarGetType WinActivate WinActive WinClose WinExists WinFlash WinGetCaretPos WinGetClassList WinGetClientSize WinGetHandle WinGetPos WinGetProcess WinGetState WinGetText WinGetTitle WinKill WinList WinMenuSelectItem WinMinimizeAll WinMinimizeAllUndo WinMove WinSetOnTop WinSetState WinSetTitle WinSetTrans WinWait WinWaitActive WinWaitClose WinWaitNotActive';\n\n  const COMMENT = { variants: [\n    hljs.COMMENT(';', '$', { relevance: 0 }),\n    hljs.COMMENT('#cs', '#ce'),\n    hljs.COMMENT('#comments-start', '#comments-end')\n  ] };\n\n  const VARIABLE = { begin: '\\\\$[A-z0-9_]+' };\n\n  const STRING = {\n    className: 'string',\n    variants: [\n      {\n        begin: /\"/,\n        end: /\"/,\n        contains: [\n          {\n            begin: /\"\"/,\n            relevance: 0\n          }\n        ]\n      },\n      {\n        begin: /'/,\n        end: /'/,\n        contains: [\n          {\n            begin: /''/,\n            relevance: 0\n          }\n        ]\n      }\n    ]\n  };\n\n  const NUMBER = { variants: [\n    hljs.BINARY_NUMBER_MODE,\n    hljs.C_NUMBER_MODE\n  ] };\n\n  const PREPROCESSOR = {\n    className: 'meta',\n    begin: '#',\n    end: '$',\n    keywords: { keyword: DIRECTIVES },\n    contains: [\n      {\n        begin: /\\\\\\n/,\n        relevance: 0\n      },\n      {\n        beginKeywords: 'include',\n        keywords: { keyword: 'include' },\n        end: '$',\n        contains: [\n          STRING,\n          {\n            className: 'string',\n            variants: [\n              {\n                begin: '<',\n                end: '>'\n              },\n              {\n                begin: /\"/,\n                end: /\"/,\n                contains: [\n                  {\n                    begin: /\"\"/,\n                    relevance: 0\n                  }\n                ]\n              },\n              {\n                begin: /'/,\n                end: /'/,\n                contains: [\n                  {\n                    begin: /''/,\n                    relevance: 0\n                  }\n                ]\n              }\n            ]\n          }\n        ]\n      },\n      STRING,\n      COMMENT\n    ]\n  };\n\n  const CONSTANT = {\n    className: 'symbol',\n    // begin: '@',\n    // end: '$',\n    // keywords: 'AppDataCommonDir AppDataDir AutoItExe AutoItPID AutoItVersion AutoItX64 COM_EventObj CommonFilesDir Compiled ComputerName ComSpec CPUArch CR CRLF DesktopCommonDir DesktopDepth DesktopDir DesktopHeight DesktopRefresh DesktopWidth DocumentsCommonDir error exitCode exitMethod extended FavoritesCommonDir FavoritesDir GUI_CtrlHandle GUI_CtrlId GUI_DragFile GUI_DragId GUI_DropId GUI_WinHandle HomeDrive HomePath HomeShare HotKeyPressed HOUR IPAddress1 IPAddress2 IPAddress3 IPAddress4 KBLayout LF LocalAppDataDir LogonDNSDomain LogonDomain LogonServer MDAY MIN MON MSEC MUILang MyDocumentsDir NumParams OSArch OSBuild OSLang OSServicePack OSType OSVersion ProgramFilesDir ProgramsCommonDir ProgramsDir ScriptDir ScriptFullPath ScriptLineNumber ScriptName SEC StartMenuCommonDir StartMenuDir StartupCommonDir StartupDir SW_DISABLE SW_ENABLE SW_HIDE SW_LOCK SW_MAXIMIZE SW_MINIMIZE SW_RESTORE SW_SHOW SW_SHOWDEFAULT SW_SHOWMAXIMIZED SW_SHOWMINIMIZED SW_SHOWMINNOACTIVE SW_SHOWNA SW_SHOWNOACTIVATE SW_SHOWNORMAL SW_UNLOCK SystemDir TAB TempDir TRAY_ID TrayIconFlashing TrayIconVisible UserName UserProfileDir WDAY WindowsDir WorkingDir YDAY YEAR',\n    // relevance: 5\n    begin: '@[A-z0-9_]+'\n  };\n\n  const FUNCTION = {\n    beginKeywords: 'Func',\n    end: '$',\n    illegal: '\\\\$|\\\\[|%',\n    contains: [\n      hljs.inherit(hljs.UNDERSCORE_TITLE_MODE, { className: \"title.function\" }),\n      {\n        className: 'params',\n        begin: '\\\\(',\n        end: '\\\\)',\n        contains: [\n          VARIABLE,\n          STRING,\n          NUMBER\n        ]\n      }\n    ]\n  };\n\n  return {\n    name: 'AutoIt',\n    case_insensitive: true,\n    illegal: /\\/\\*/,\n    keywords: {\n      keyword: KEYWORDS,\n      built_in: BUILT_IN,\n      literal: LITERAL\n    },\n    contains: [\n      COMMENT,\n      VARIABLE,\n      STRING,\n      NUMBER,\n      PREPROCESSOR,\n      CONSTANT,\n      FUNCTION\n    ]\n  };\n}\n\nmodule.exports = autoit;\n","/*\nLanguage: AVR Assembly\nAuthor: Vladimir Ermakov <vooon341@gmail.com>\nCategory: assembler\nWebsite: https://www.microchip.com/webdoc/avrassembler/avrassembler.wb_instruction_list.html\n*/\n\n/** @type LanguageFn */\nfunction avrasm(hljs) {\n  return {\n    name: 'AVR Assembly',\n    case_insensitive: true,\n    keywords: {\n      $pattern: '\\\\.?' + hljs.IDENT_RE,\n      keyword:\n        /* mnemonic */\n        'adc add adiw and andi asr bclr bld brbc brbs brcc brcs break breq brge brhc brhs '\n        + 'brid brie brlo brlt brmi brne brpl brsh brtc brts brvc brvs bset bst call cbi cbr '\n        + 'clc clh cli cln clr cls clt clv clz com cp cpc cpi cpse dec eicall eijmp elpm eor '\n        + 'fmul fmuls fmulsu icall ijmp in inc jmp ld ldd ldi lds lpm lsl lsr mov movw mul '\n        + 'muls mulsu neg nop or ori out pop push rcall ret reti rjmp rol ror sbc sbr sbrc sbrs '\n        + 'sec seh sbi sbci sbic sbis sbiw sei sen ser ses set sev sez sleep spm st std sts sub '\n        + 'subi swap tst wdr',\n      built_in:\n        /* general purpose registers */\n        'r0 r1 r2 r3 r4 r5 r6 r7 r8 r9 r10 r11 r12 r13 r14 r15 r16 r17 r18 r19 r20 r21 r22 '\n        + 'r23 r24 r25 r26 r27 r28 r29 r30 r31 x|0 xh xl y|0 yh yl z|0 zh zl '\n        /* IO Registers (ATMega128) */\n        + 'ucsr1c udr1 ucsr1a ucsr1b ubrr1l ubrr1h ucsr0c ubrr0h tccr3c tccr3a tccr3b tcnt3h '\n        + 'tcnt3l ocr3ah ocr3al ocr3bh ocr3bl ocr3ch ocr3cl icr3h icr3l etimsk etifr tccr1c '\n        + 'ocr1ch ocr1cl twcr twdr twar twsr twbr osccal xmcra xmcrb eicra spmcsr spmcr portg '\n        + 'ddrg ping portf ddrf sreg sph spl xdiv rampz eicrb eimsk gimsk gicr eifr gifr timsk '\n        + 'tifr mcucr mcucsr tccr0 tcnt0 ocr0 assr tccr1a tccr1b tcnt1h tcnt1l ocr1ah ocr1al '\n        + 'ocr1bh ocr1bl icr1h icr1l tccr2 tcnt2 ocr2 ocdr wdtcr sfior eearh eearl eedr eecr '\n        + 'porta ddra pina portb ddrb pinb portc ddrc pinc portd ddrd pind spdr spsr spcr udr0 '\n        + 'ucsr0a ucsr0b ubrr0l acsr admux adcsr adch adcl porte ddre pine pinf',\n      meta:\n        '.byte .cseg .db .def .device .dseg .dw .endmacro .equ .eseg .exit .include .list '\n        + '.listmac .macro .nolist .org .set'\n    },\n    contains: [\n      hljs.C_BLOCK_COMMENT_MODE,\n      hljs.COMMENT(\n        ';',\n        '$',\n        { relevance: 0 }\n      ),\n      hljs.C_NUMBER_MODE, // 0x..., decimal, float\n      hljs.BINARY_NUMBER_MODE, // 0b...\n      {\n        className: 'number',\n        begin: '\\\\b(\\\\$[a-zA-Z0-9]+|0o[0-7]+)' // $..., 0o...\n      },\n      hljs.QUOTE_STRING_MODE,\n      {\n        className: 'string',\n        begin: '\\'',\n        end: '[^\\\\\\\\]\\'',\n        illegal: '[^\\\\\\\\][^\\']'\n      },\n      {\n        className: 'symbol',\n        begin: '^[A-Za-z0-9_.$]+:'\n      },\n      {\n        className: 'meta',\n        begin: '#',\n        end: '$'\n      },\n      { // substitution within a macro\n        className: 'subst',\n        begin: '@[0-9]+'\n      }\n    ]\n  };\n}\n\nmodule.exports = avrasm;\n","/*\nLanguage: Awk\nAuthor: Matthew Daly <matthewbdaly@gmail.com>\nWebsite: https://www.gnu.org/software/gawk/manual/gawk.html\nDescription: language definition for Awk scripts\nCategory: scripting\n*/\n\n/** @type LanguageFn */\nfunction awk(hljs) {\n  const VARIABLE = {\n    className: 'variable',\n    variants: [\n      { begin: /\\$[\\w\\d#@][\\w\\d_]*/ },\n      { begin: /\\$\\{(.*?)\\}/ }\n    ]\n  };\n  const KEYWORDS = 'BEGIN END if else while do for in break continue delete next nextfile function func exit|10';\n  const STRING = {\n    className: 'string',\n    contains: [ hljs.BACKSLASH_ESCAPE ],\n    variants: [\n      {\n        begin: /(u|b)?r?'''/,\n        end: /'''/,\n        relevance: 10\n      },\n      {\n        begin: /(u|b)?r?\"\"\"/,\n        end: /\"\"\"/,\n        relevance: 10\n      },\n      {\n        begin: /(u|r|ur)'/,\n        end: /'/,\n        relevance: 10\n      },\n      {\n        begin: /(u|r|ur)\"/,\n        end: /\"/,\n        relevance: 10\n      },\n      {\n        begin: /(b|br)'/,\n        end: /'/\n      },\n      {\n        begin: /(b|br)\"/,\n        end: /\"/\n      },\n      hljs.APOS_STRING_MODE,\n      hljs.QUOTE_STRING_MODE\n    ]\n  };\n  return {\n    name: 'Awk',\n    keywords: { keyword: KEYWORDS },\n    contains: [\n      VARIABLE,\n      STRING,\n      hljs.REGEXP_MODE,\n      hljs.HASH_COMMENT_MODE,\n      hljs.NUMBER_MODE\n    ]\n  };\n}\n\nmodule.exports = awk;\n","/*\nLanguage: Microsoft X++\nDescription: X++ is a language used in Microsoft Dynamics 365, Dynamics AX, and Axapta.\nAuthor: Dmitri Roudakov <dmitri@roudakov.ru>\nWebsite: https://dynamics.microsoft.com/en-us/ax-overview/\nCategory: enterprise\n*/\n\n/** @type LanguageFn */\nfunction axapta(hljs) {\n  const IDENT_RE = hljs.UNDERSCORE_IDENT_RE;\n  const BUILT_IN_KEYWORDS = [\n    'anytype',\n    'boolean',\n    'byte',\n    'char',\n    'container',\n    'date',\n    'double',\n    'enum',\n    'guid',\n    'int',\n    'int64',\n    'long',\n    'real',\n    'short',\n    'str',\n    'utcdatetime',\n    'var'\n  ];\n\n  const LITERAL_KEYWORDS = [\n    'default',\n    'false',\n    'null',\n    'true'\n  ];\n\n  const NORMAL_KEYWORDS = [\n    'abstract',\n    'as',\n    'asc',\n    'avg',\n    'break',\n    'breakpoint',\n    'by',\n    'byref',\n    'case',\n    'catch',\n    'changecompany',\n    'class',\n    'client',\n    'client',\n    'common',\n    'const',\n    'continue',\n    'count',\n    'crosscompany',\n    'delegate',\n    'delete_from',\n    'desc',\n    'display',\n    'div',\n    'do',\n    'edit',\n    'else',\n    'eventhandler',\n    'exists',\n    'extends',\n    'final',\n    'finally',\n    'firstfast',\n    'firstonly',\n    'firstonly1',\n    'firstonly10',\n    'firstonly100',\n    'firstonly1000',\n    'flush',\n    'for',\n    'forceliterals',\n    'forcenestedloop',\n    'forceplaceholders',\n    'forceselectorder',\n    'forupdate',\n    'from',\n    'generateonly',\n    'group',\n    'hint',\n    'if',\n    'implements',\n    'in',\n    'index',\n    'insert_recordset',\n    'interface',\n    'internal',\n    'is',\n    'join',\n    'like',\n    'maxof',\n    'minof',\n    'mod',\n    'namespace',\n    'new',\n    'next',\n    'nofetch',\n    'notexists',\n    'optimisticlock',\n    'order',\n    'outer',\n    'pessimisticlock',\n    'print',\n    'private',\n    'protected',\n    'public',\n    'readonly',\n    'repeatableread',\n    'retry',\n    'return',\n    'reverse',\n    'select',\n    'server',\n    'setting',\n    'static',\n    'sum',\n    'super',\n    'switch',\n    'this',\n    'throw',\n    'try',\n    'ttsabort',\n    'ttsbegin',\n    'ttscommit',\n    'unchecked',\n    'update_recordset',\n    'using',\n    'validtimestate',\n    'void',\n    'where',\n    'while'\n  ];\n\n  const KEYWORDS = {\n    keyword: NORMAL_KEYWORDS,\n    built_in: BUILT_IN_KEYWORDS,\n    literal: LITERAL_KEYWORDS\n  };\n\n  const CLASS_DEFINITION = {\n    variants: [\n      { match: [\n        /(class|interface)\\s+/,\n        IDENT_RE,\n        /\\s+(extends|implements)\\s+/,\n        IDENT_RE\n      ] },\n      { match: [\n        /class\\s+/,\n        IDENT_RE\n      ] }\n    ],\n    scope: {\n      2: \"title.class\",\n      4: \"title.class.inherited\"\n    },\n    keywords: KEYWORDS\n  };\n\n  return {\n    name: 'X++',\n    aliases: [ 'x++' ],\n    keywords: KEYWORDS,\n    contains: [\n      hljs.C_LINE_COMMENT_MODE,\n      hljs.C_BLOCK_COMMENT_MODE,\n      hljs.APOS_STRING_MODE,\n      hljs.QUOTE_STRING_MODE,\n      hljs.C_NUMBER_MODE,\n      {\n        className: 'meta',\n        begin: '#',\n        end: '$'\n      },\n      CLASS_DEFINITION\n    ]\n  };\n}\n\nmodule.exports = axapta;\n","/*\nLanguage: Bash\nAuthor: vah <vahtenberg@gmail.com>\nContributrors: Benjamin Pannell <contact@sierrasoftworks.com>\nWebsite: https://www.gnu.org/software/bash/\nCategory: common, scripting\n*/\n\n/** @type LanguageFn */\nfunction bash(hljs) {\n  const regex = hljs.regex;\n  const VAR = {};\n  const BRACED_VAR = {\n    begin: /\\$\\{/,\n    end: /\\}/,\n    contains: [\n      \"self\",\n      {\n        begin: /:-/,\n        contains: [ VAR ]\n      } // default values\n    ]\n  };\n  Object.assign(VAR, {\n    className: 'variable',\n    variants: [\n      { begin: regex.concat(/\\$[\\w\\d#@][\\w\\d_]*/,\n        // negative look-ahead tries to avoid matching patterns that are not\n        // Perl at all like $ident$, @ident@, etc.\n        `(?![\\\\w\\\\d])(?![$])`) },\n      BRACED_VAR\n    ]\n  });\n\n  const SUBST = {\n    className: 'subst',\n    begin: /\\$\\(/,\n    end: /\\)/,\n    contains: [ hljs.BACKSLASH_ESCAPE ]\n  };\n  const COMMENT = hljs.inherit(\n    hljs.COMMENT(),\n    {\n      match: [\n        /(^|\\s)/,\n        /#.*$/\n      ],\n      scope: {\n        2: 'comment'\n      }\n    }\n  );\n  const HERE_DOC = {\n    begin: /<<-?\\s*(?=\\w+)/,\n    starts: { contains: [\n      hljs.END_SAME_AS_BEGIN({\n        begin: /(\\w+)/,\n        end: /(\\w+)/,\n        className: 'string'\n      })\n    ] }\n  };\n  const QUOTE_STRING = {\n    className: 'string',\n    begin: /\"/,\n    end: /\"/,\n    contains: [\n      hljs.BACKSLASH_ESCAPE,\n      VAR,\n      SUBST\n    ]\n  };\n  SUBST.contains.push(QUOTE_STRING);\n  const ESCAPED_QUOTE = {\n    match: /\\\\\"/\n  };\n  const APOS_STRING = {\n    className: 'string',\n    begin: /'/,\n    end: /'/\n  };\n  const ESCAPED_APOS = {\n    match: /\\\\'/\n  };\n  const ARITHMETIC = {\n    begin: /\\$?\\(\\(/,\n    end: /\\)\\)/,\n    contains: [\n      {\n        begin: /\\d+#[0-9a-f]+/,\n        className: \"number\"\n      },\n      hljs.NUMBER_MODE,\n      VAR\n    ]\n  };\n  const SH_LIKE_SHELLS = [\n    \"fish\",\n    \"bash\",\n    \"zsh\",\n    \"sh\",\n    \"csh\",\n    \"ksh\",\n    \"tcsh\",\n    \"dash\",\n    \"scsh\",\n  ];\n  const KNOWN_SHEBANG = hljs.SHEBANG({\n    binary: `(${SH_LIKE_SHELLS.join(\"|\")})`,\n    relevance: 10\n  });\n  const FUNCTION = {\n    className: 'function',\n    begin: /\\w[\\w\\d_]*\\s*\\(\\s*\\)\\s*\\{/,\n    returnBegin: true,\n    contains: [ hljs.inherit(hljs.TITLE_MODE, { begin: /\\w[\\w\\d_]*/ }) ],\n    relevance: 0\n  };\n\n  const KEYWORDS = [\n    \"if\",\n    \"then\",\n    \"else\",\n    \"elif\",\n    \"fi\",\n    \"time\",\n    \"for\",\n    \"while\",\n    \"until\",\n    \"in\",\n    \"do\",\n    \"done\",\n    \"case\",\n    \"esac\",\n    \"coproc\",\n    \"function\",\n    \"select\"\n  ];\n\n  const LITERALS = [\n    \"true\",\n    \"false\"\n  ];\n\n  // to consume paths to prevent keyword matches inside them\n  const PATH_MODE = { match: /(\\/[a-z._-]+)+/ };\n\n  // http://www.gnu.org/software/bash/manual/html_node/Shell-Builtin-Commands.html\n  const SHELL_BUILT_INS = [\n    \"break\",\n    \"cd\",\n    \"continue\",\n    \"eval\",\n    \"exec\",\n    \"exit\",\n    \"export\",\n    \"getopts\",\n    \"hash\",\n    \"pwd\",\n    \"readonly\",\n    \"return\",\n    \"shift\",\n    \"test\",\n    \"times\",\n    \"trap\",\n    \"umask\",\n    \"unset\"\n  ];\n\n  const BASH_BUILT_INS = [\n    \"alias\",\n    \"bind\",\n    \"builtin\",\n    \"caller\",\n    \"command\",\n    \"declare\",\n    \"echo\",\n    \"enable\",\n    \"help\",\n    \"let\",\n    \"local\",\n    \"logout\",\n    \"mapfile\",\n    \"printf\",\n    \"read\",\n    \"readarray\",\n    \"source\",\n    \"sudo\",\n    \"type\",\n    \"typeset\",\n    \"ulimit\",\n    \"unalias\"\n  ];\n\n  const ZSH_BUILT_INS = [\n    \"autoload\",\n    \"bg\",\n    \"bindkey\",\n    \"bye\",\n    \"cap\",\n    \"chdir\",\n    \"clone\",\n    \"comparguments\",\n    \"compcall\",\n    \"compctl\",\n    \"compdescribe\",\n    \"compfiles\",\n    \"compgroups\",\n    \"compquote\",\n    \"comptags\",\n    \"comptry\",\n    \"compvalues\",\n    \"dirs\",\n    \"disable\",\n    \"disown\",\n    \"echotc\",\n    \"echoti\",\n    \"emulate\",\n    \"fc\",\n    \"fg\",\n    \"float\",\n    \"functions\",\n    \"getcap\",\n    \"getln\",\n    \"history\",\n    \"integer\",\n    \"jobs\",\n    \"kill\",\n    \"limit\",\n    \"log\",\n    \"noglob\",\n    \"popd\",\n    \"print\",\n    \"pushd\",\n    \"pushln\",\n    \"rehash\",\n    \"sched\",\n    \"setcap\",\n    \"setopt\",\n    \"stat\",\n    \"suspend\",\n    \"ttyctl\",\n    \"unfunction\",\n    \"unhash\",\n    \"unlimit\",\n    \"unsetopt\",\n    \"vared\",\n    \"wait\",\n    \"whence\",\n    \"where\",\n    \"which\",\n    \"zcompile\",\n    \"zformat\",\n    \"zftp\",\n    \"zle\",\n    \"zmodload\",\n    \"zparseopts\",\n    \"zprof\",\n    \"zpty\",\n    \"zregexparse\",\n    \"zsocket\",\n    \"zstyle\",\n    \"ztcp\"\n  ];\n\n  const GNU_CORE_UTILS = [\n    \"chcon\",\n    \"chgrp\",\n    \"chown\",\n    \"chmod\",\n    \"cp\",\n    \"dd\",\n    \"df\",\n    \"dir\",\n    \"dircolors\",\n    \"ln\",\n    \"ls\",\n    \"mkdir\",\n    \"mkfifo\",\n    \"mknod\",\n    \"mktemp\",\n    \"mv\",\n    \"realpath\",\n    \"rm\",\n    \"rmdir\",\n    \"shred\",\n    \"sync\",\n    \"touch\",\n    \"truncate\",\n    \"vdir\",\n    \"b2sum\",\n    \"base32\",\n    \"base64\",\n    \"cat\",\n    \"cksum\",\n    \"comm\",\n    \"csplit\",\n    \"cut\",\n    \"expand\",\n    \"fmt\",\n    \"fold\",\n    \"head\",\n    \"join\",\n    \"md5sum\",\n    \"nl\",\n    \"numfmt\",\n    \"od\",\n    \"paste\",\n    \"ptx\",\n    \"pr\",\n    \"sha1sum\",\n    \"sha224sum\",\n    \"sha256sum\",\n    \"sha384sum\",\n    \"sha512sum\",\n    \"shuf\",\n    \"sort\",\n    \"split\",\n    \"sum\",\n    \"tac\",\n    \"tail\",\n    \"tr\",\n    \"tsort\",\n    \"unexpand\",\n    \"uniq\",\n    \"wc\",\n    \"arch\",\n    \"basename\",\n    \"chroot\",\n    \"date\",\n    \"dirname\",\n    \"du\",\n    \"echo\",\n    \"env\",\n    \"expr\",\n    \"factor\",\n    // \"false\", // keyword literal already\n    \"groups\",\n    \"hostid\",\n    \"id\",\n    \"link\",\n    \"logname\",\n    \"nice\",\n    \"nohup\",\n    \"nproc\",\n    \"pathchk\",\n    \"pinky\",\n    \"printenv\",\n    \"printf\",\n    \"pwd\",\n    \"readlink\",\n    \"runcon\",\n    \"seq\",\n    \"sleep\",\n    \"stat\",\n    \"stdbuf\",\n    \"stty\",\n    \"tee\",\n    \"test\",\n    \"timeout\",\n    // \"true\", // keyword literal already\n    \"tty\",\n    \"uname\",\n    \"unlink\",\n    \"uptime\",\n    \"users\",\n    \"who\",\n    \"whoami\",\n    \"yes\"\n  ];\n\n  return {\n    name: 'Bash',\n    aliases: [\n      'sh',\n      'zsh'\n    ],\n    keywords: {\n      $pattern: /\\b[a-z][a-z0-9._-]+\\b/,\n      keyword: KEYWORDS,\n      literal: LITERALS,\n      built_in: [\n        ...SHELL_BUILT_INS,\n        ...BASH_BUILT_INS,\n        // Shell modifiers\n        \"set\",\n        \"shopt\",\n        ...ZSH_BUILT_INS,\n        ...GNU_CORE_UTILS\n      ]\n    },\n    contains: [\n      KNOWN_SHEBANG, // to catch known shells and boost relevancy\n      hljs.SHEBANG(), // to catch unknown shells but still highlight the shebang\n      FUNCTION,\n      ARITHMETIC,\n      COMMENT,\n      HERE_DOC,\n      PATH_MODE,\n      QUOTE_STRING,\n      ESCAPED_QUOTE,\n      APOS_STRING,\n      ESCAPED_APOS,\n      VAR\n    ]\n  };\n}\n\nmodule.exports = bash;\n","/*\nLanguage: BASIC\nAuthor: Raphaël Assénat <raph@raphnet.net>\nDescription: Based on the BASIC reference from the Tandy 1000 guide\nWebsite: https://en.wikipedia.org/wiki/Tandy_1000\nCategory: system\n*/\n\n/** @type LanguageFn */\nfunction basic(hljs) {\n  const KEYWORDS = [\n    \"ABS\",\n    \"ASC\",\n    \"AND\",\n    \"ATN\",\n    \"AUTO|0\",\n    \"BEEP\",\n    \"BLOAD|10\",\n    \"BSAVE|10\",\n    \"CALL\",\n    \"CALLS\",\n    \"CDBL\",\n    \"CHAIN\",\n    \"CHDIR\",\n    \"CHR$|10\",\n    \"CINT\",\n    \"CIRCLE\",\n    \"CLEAR\",\n    \"CLOSE\",\n    \"CLS\",\n    \"COLOR\",\n    \"COM\",\n    \"COMMON\",\n    \"CONT\",\n    \"COS\",\n    \"CSNG\",\n    \"CSRLIN\",\n    \"CVD\",\n    \"CVI\",\n    \"CVS\",\n    \"DATA\",\n    \"DATE$\",\n    \"DEFDBL\",\n    \"DEFINT\",\n    \"DEFSNG\",\n    \"DEFSTR\",\n    \"DEF|0\",\n    \"SEG\",\n    \"USR\",\n    \"DELETE\",\n    \"DIM\",\n    \"DRAW\",\n    \"EDIT\",\n    \"END\",\n    \"ENVIRON\",\n    \"ENVIRON$\",\n    \"EOF\",\n    \"EQV\",\n    \"ERASE\",\n    \"ERDEV\",\n    \"ERDEV$\",\n    \"ERL\",\n    \"ERR\",\n    \"ERROR\",\n    \"EXP\",\n    \"FIELD\",\n    \"FILES\",\n    \"FIX\",\n    \"FOR|0\",\n    \"FRE\",\n    \"GET\",\n    \"GOSUB|10\",\n    \"GOTO\",\n    \"HEX$\",\n    \"IF\",\n    \"THEN\",\n    \"ELSE|0\",\n    \"INKEY$\",\n    \"INP\",\n    \"INPUT\",\n    \"INPUT#\",\n    \"INPUT$\",\n    \"INSTR\",\n    \"IMP\",\n    \"INT\",\n    \"IOCTL\",\n    \"IOCTL$\",\n    \"KEY\",\n    \"ON\",\n    \"OFF\",\n    \"LIST\",\n    \"KILL\",\n    \"LEFT$\",\n    \"LEN\",\n    \"LET\",\n    \"LINE\",\n    \"LLIST\",\n    \"LOAD\",\n    \"LOC\",\n    \"LOCATE\",\n    \"LOF\",\n    \"LOG\",\n    \"LPRINT\",\n    \"USING\",\n    \"LSET\",\n    \"MERGE\",\n    \"MID$\",\n    \"MKDIR\",\n    \"MKD$\",\n    \"MKI$\",\n    \"MKS$\",\n    \"MOD\",\n    \"NAME\",\n    \"NEW\",\n    \"NEXT\",\n    \"NOISE\",\n    \"NOT\",\n    \"OCT$\",\n    \"ON\",\n    \"OR\",\n    \"PEN\",\n    \"PLAY\",\n    \"STRIG\",\n    \"OPEN\",\n    \"OPTION\",\n    \"BASE\",\n    \"OUT\",\n    \"PAINT\",\n    \"PALETTE\",\n    \"PCOPY\",\n    \"PEEK\",\n    \"PMAP\",\n    \"POINT\",\n    \"POKE\",\n    \"POS\",\n    \"PRINT\",\n    \"PRINT]\",\n    \"PSET\",\n    \"PRESET\",\n    \"PUT\",\n    \"RANDOMIZE\",\n    \"READ\",\n    \"REM\",\n    \"RENUM\",\n    \"RESET|0\",\n    \"RESTORE\",\n    \"RESUME\",\n    \"RETURN|0\",\n    \"RIGHT$\",\n    \"RMDIR\",\n    \"RND\",\n    \"RSET\",\n    \"RUN\",\n    \"SAVE\",\n    \"SCREEN\",\n    \"SGN\",\n    \"SHELL\",\n    \"SIN\",\n    \"SOUND\",\n    \"SPACE$\",\n    \"SPC\",\n    \"SQR\",\n    \"STEP\",\n    \"STICK\",\n    \"STOP\",\n    \"STR$\",\n    \"STRING$\",\n    \"SWAP\",\n    \"SYSTEM\",\n    \"TAB\",\n    \"TAN\",\n    \"TIME$\",\n    \"TIMER\",\n    \"TROFF\",\n    \"TRON\",\n    \"TO\",\n    \"USR\",\n    \"VAL\",\n    \"VARPTR\",\n    \"VARPTR$\",\n    \"VIEW\",\n    \"WAIT\",\n    \"WHILE\",\n    \"WEND\",\n    \"WIDTH\",\n    \"WINDOW\",\n    \"WRITE\",\n    \"XOR\"\n  ];\n\n  return {\n    name: 'BASIC',\n    case_insensitive: true,\n    illegal: '^\\.',\n    // Support explicitly typed variables that end with $%! or #.\n    keywords: {\n      $pattern: '[a-zA-Z][a-zA-Z0-9_$%!#]*',\n      keyword: KEYWORDS\n    },\n    contains: [\n      {\n        // Match strings that start with \" and end with \" or a line break\n        scope: 'string',\n        begin: /\"/,\n        end: /\"|$/,\n        contains: [ hljs.BACKSLASH_ESCAPE ]\n      },\n      hljs.COMMENT('REM', '$', { relevance: 10 }),\n      hljs.COMMENT('\\'', '$', { relevance: 0 }),\n      {\n        // Match line numbers\n        className: 'symbol',\n        begin: '^[0-9]+ ',\n        relevance: 10\n      },\n      {\n        // Match typed numeric constants (1000, 12.34!, 1.2e5, 1.5#, 1.2D2)\n        className: 'number',\n        begin: '\\\\b\\\\d+(\\\\.\\\\d+)?([edED]\\\\d+)?[#\\!]?',\n        relevance: 0\n      },\n      {\n        // Match hexadecimal numbers (&Hxxxx)\n        className: 'number',\n        begin: '(&[hH][0-9a-fA-F]{1,4})'\n      },\n      {\n        // Match octal numbers (&Oxxxxxx)\n        className: 'number',\n        begin: '(&[oO][0-7]{1,6})'\n      }\n    ]\n  };\n}\n\nmodule.exports = basic;\n","/*\nLanguage: Backus–Naur Form\nWebsite: https://en.wikipedia.org/wiki/Backus–Naur_form\nCategory: syntax\nAuthor: Oleg Efimov <efimovov@gmail.com>\n*/\n\n/** @type LanguageFn */\nfunction bnf(hljs) {\n  return {\n    name: 'Backus–Naur Form',\n    contains: [\n      // Attribute\n      {\n        className: 'attribute',\n        begin: /</,\n        end: />/\n      },\n      // Specific\n      {\n        begin: /::=/,\n        end: /$/,\n        contains: [\n          {\n            begin: /</,\n            end: />/\n          },\n          // Common\n          hljs.C_LINE_COMMENT_MODE,\n          hljs.C_BLOCK_COMMENT_MODE,\n          hljs.APOS_STRING_MODE,\n          hljs.QUOTE_STRING_MODE\n        ]\n      }\n    ]\n  };\n}\n\nmodule.exports = bnf;\n","/*\nLanguage: Brainfuck\nAuthor: Evgeny Stepanischev <imbolk@gmail.com>\nWebsite: https://esolangs.org/wiki/Brainfuck\n*/\n\n/** @type LanguageFn */\nfunction brainfuck(hljs) {\n  const LITERAL = {\n    className: 'literal',\n    begin: /[+-]+/,\n    relevance: 0\n  };\n  return {\n    name: 'Brainfuck',\n    aliases: [ 'bf' ],\n    contains: [\n      hljs.COMMENT(\n        /[^\\[\\]\\.,\\+\\-<> \\r\\n]/,\n        /[\\[\\]\\.,\\+\\-<> \\r\\n]/,\n        {\n          contains: [\n            {\n              match: /[ ]+[^\\[\\]\\.,\\+\\-<> \\r\\n]/,\n              relevance: 0\n            }\n          ],\n          returnEnd: true,\n          relevance: 0\n        }\n      ),\n      {\n        className: 'title',\n        begin: '[\\\\[\\\\]]',\n        relevance: 0\n      },\n      {\n        className: 'string',\n        begin: '[\\\\.,]',\n        relevance: 0\n      },\n      {\n        // this mode works as the only relevance counter\n        // it looks ahead to find the start of a run of literals\n        // so only the runs are counted as relevant\n        begin: /(?=\\+\\+|--)/,\n        contains: [ LITERAL ]\n      },\n      LITERAL\n    ]\n  };\n}\n\nmodule.exports = brainfuck;\n","/*\nLanguage: C\nCategory: common, system\nWebsite: https://en.wikipedia.org/wiki/C_(programming_language)\n*/\n\n/** @type LanguageFn */\nfunction c(hljs) {\n  const regex = hljs.regex;\n  // added for historic reasons because `hljs.C_LINE_COMMENT_MODE` does\n  // not include such support nor can we be sure all the grammars depending\n  // on it would desire this behavior\n  const C_LINE_COMMENT_MODE = hljs.COMMENT('//', '$', { contains: [ { begin: /\\\\\\n/ } ] });\n  const DECLTYPE_AUTO_RE = 'decltype\\\\(auto\\\\)';\n  const NAMESPACE_RE = '[a-zA-Z_]\\\\w*::';\n  const TEMPLATE_ARGUMENT_RE = '<[^<>]+>';\n  const FUNCTION_TYPE_RE = '('\n    + DECLTYPE_AUTO_RE + '|'\n    + regex.optional(NAMESPACE_RE)\n    + '[a-zA-Z_]\\\\w*' + regex.optional(TEMPLATE_ARGUMENT_RE)\n  + ')';\n\n\n  const TYPES = {\n    className: 'type',\n    variants: [\n      { begin: '\\\\b[a-z\\\\d_]*_t\\\\b' },\n      { match: /\\batomic_[a-z]{3,6}\\b/ }\n    ]\n\n  };\n\n  // https://en.cppreference.com/w/cpp/language/escape\n  // \\\\ \\x \\xFF \\u2837 \\u00323747 \\374\n  const CHARACTER_ESCAPES = '\\\\\\\\(x[0-9A-Fa-f]{2}|u[0-9A-Fa-f]{4,8}|[0-7]{3}|\\\\S)';\n  const STRINGS = {\n    className: 'string',\n    variants: [\n      {\n        begin: '(u8?|U|L)?\"',\n        end: '\"',\n        illegal: '\\\\n',\n        contains: [ hljs.BACKSLASH_ESCAPE ]\n      },\n      {\n        begin: '(u8?|U|L)?\\'(' + CHARACTER_ESCAPES + \"|.)\",\n        end: '\\'',\n        illegal: '.'\n      },\n      hljs.END_SAME_AS_BEGIN({\n        begin: /(?:u8?|U|L)?R\"([^()\\\\ ]{0,16})\\(/,\n        end: /\\)([^()\\\\ ]{0,16})\"/\n      })\n    ]\n  };\n\n  const NUMBERS = {\n    className: 'number',\n    variants: [\n      { match: /\\b(0b[01']+)/ },  \n      { match: /(-?)\\b([\\d']+(\\.[\\d']*)?|\\.[\\d']+)((ll|LL|l|L)(u|U)?|(u|U)(ll|LL|l|L)?|f|F|b|B)/ },  \n      { match: /(-?)\\b(0[xX][a-fA-F0-9]+(?:'[a-fA-F0-9]+)*(?:\\.[a-fA-F0-9]*(?:'[a-fA-F0-9]*)*)?(?:[pP][-+]?[0-9]+)?(l|L)?(u|U)?)/ },  \n      { match: /(-?)\\b\\d+(?:'\\d+)*(?:\\.\\d*(?:'\\d*)*)?(?:[eE][-+]?\\d+)?/ }  \n  ],\n    relevance: 0\n  };  \n  \n  const PREPROCESSOR = {\n    className: 'meta',\n    begin: /#\\s*[a-z]+\\b/,\n    end: /$/,\n    keywords: { keyword:\n        'if else elif endif define undef warning error line '\n        + 'pragma _Pragma ifdef ifndef elifdef elifndef include' },\n    contains: [\n      {\n        begin: /\\\\\\n/,\n        relevance: 0\n      },\n      hljs.inherit(STRINGS, { className: 'string' }),\n      {\n        className: 'string',\n        begin: /<.*?>/\n      },\n      C_LINE_COMMENT_MODE,\n      hljs.C_BLOCK_COMMENT_MODE\n    ]\n  };\n\n  const TITLE_MODE = {\n    className: 'title',\n    begin: regex.optional(NAMESPACE_RE) + hljs.IDENT_RE,\n    relevance: 0\n  };\n\n  const FUNCTION_TITLE = regex.optional(NAMESPACE_RE) + hljs.IDENT_RE + '\\\\s*\\\\(';\n\n  const C_KEYWORDS = [\n    \"asm\",\n    \"auto\",\n    \"break\",\n    \"case\",\n    \"continue\",\n    \"default\",\n    \"do\",\n    \"else\",\n    \"enum\",\n    \"extern\",\n    \"for\",\n    \"fortran\",\n    \"goto\",\n    \"if\",\n    \"inline\",\n    \"register\",\n    \"restrict\",\n    \"return\",\n    \"sizeof\",\n    \"typeof\",\n    \"typeof_unqual\",\n    \"struct\",\n    \"switch\",\n    \"typedef\",\n    \"union\",\n    \"volatile\",\n    \"while\",\n    \"_Alignas\",\n    \"_Alignof\",\n    \"_Atomic\",\n    \"_Generic\",\n    \"_Noreturn\",\n    \"_Static_assert\",\n    \"_Thread_local\",\n    // aliases\n    \"alignas\",\n    \"alignof\",\n    \"noreturn\",\n    \"static_assert\",\n    \"thread_local\",\n    // not a C keyword but is, for all intents and purposes, treated exactly like one.\n    \"_Pragma\"\n  ];\n\n  const C_TYPES = [\n    \"float\",\n    \"double\",\n    \"signed\",\n    \"unsigned\",\n    \"int\",\n    \"short\",\n    \"long\",\n    \"char\",\n    \"void\",\n    \"_Bool\",\n    \"_BitInt\",\n    \"_Complex\",\n    \"_Imaginary\",\n    \"_Decimal32\",\n    \"_Decimal64\",\n    \"_Decimal96\",\n    \"_Decimal128\",\n    \"_Decimal64x\",\n    \"_Decimal128x\",\n    \"_Float16\",\n    \"_Float32\",\n    \"_Float64\",\n    \"_Float128\",\n    \"_Float32x\",\n    \"_Float64x\",\n    \"_Float128x\",\n    // modifiers\n    \"const\",\n    \"static\",\n    \"constexpr\",\n    // aliases\n    \"complex\",\n    \"bool\",\n    \"imaginary\"\n  ];\n\n  const KEYWORDS = {\n    keyword: C_KEYWORDS,\n    type: C_TYPES,\n    literal: 'true false NULL',\n    // TODO: apply hinting work similar to what was done in cpp.js\n    built_in: 'std string wstring cin cout cerr clog stdin stdout stderr stringstream istringstream ostringstream '\n      + 'auto_ptr deque list queue stack vector map set pair bitset multiset multimap unordered_set '\n      + 'unordered_map unordered_multiset unordered_multimap priority_queue make_pair array shared_ptr abort terminate abs acos '\n      + 'asin atan2 atan calloc ceil cosh cos exit exp fabs floor fmod fprintf fputs free frexp '\n      + 'fscanf future isalnum isalpha iscntrl isdigit isgraph islower isprint ispunct isspace isupper '\n      + 'isxdigit tolower toupper labs ldexp log10 log malloc realloc memchr memcmp memcpy memset modf pow '\n      + 'printf putchar puts scanf sinh sin snprintf sprintf sqrt sscanf strcat strchr strcmp '\n      + 'strcpy strcspn strlen strncat strncmp strncpy strpbrk strrchr strspn strstr tanh tan '\n      + 'vfprintf vprintf vsprintf endl initializer_list unique_ptr',\n  };\n\n  const EXPRESSION_CONTAINS = [\n    PREPROCESSOR,\n    TYPES,\n    C_LINE_COMMENT_MODE,\n    hljs.C_BLOCK_COMMENT_MODE,\n    NUMBERS,\n    STRINGS\n  ];\n\n  const EXPRESSION_CONTEXT = {\n    // This mode covers expression context where we can't expect a function\n    // definition and shouldn't highlight anything that looks like one:\n    // `return some()`, `else if()`, `(x*sum(1, 2))`\n    variants: [\n      {\n        begin: /=/,\n        end: /;/\n      },\n      {\n        begin: /\\(/,\n        end: /\\)/\n      },\n      {\n        beginKeywords: 'new throw return else',\n        end: /;/\n      }\n    ],\n    keywords: KEYWORDS,\n    contains: EXPRESSION_CONTAINS.concat([\n      {\n        begin: /\\(/,\n        end: /\\)/,\n        keywords: KEYWORDS,\n        contains: EXPRESSION_CONTAINS.concat([ 'self' ]),\n        relevance: 0\n      }\n    ]),\n    relevance: 0\n  };\n\n  const FUNCTION_DECLARATION = {\n    begin: '(' + FUNCTION_TYPE_RE + '[\\\\*&\\\\s]+)+' + FUNCTION_TITLE,\n    returnBegin: true,\n    end: /[{;=]/,\n    excludeEnd: true,\n    keywords: KEYWORDS,\n    illegal: /[^\\w\\s\\*&:<>.]/,\n    contains: [\n      { // to prevent it from being confused as the function title\n        begin: DECLTYPE_AUTO_RE,\n        keywords: KEYWORDS,\n        relevance: 0\n      },\n      {\n        begin: FUNCTION_TITLE,\n        returnBegin: true,\n        contains: [ hljs.inherit(TITLE_MODE, { className: \"title.function\" }) ],\n        relevance: 0\n      },\n      // allow for multiple declarations, e.g.:\n      // extern void f(int), g(char);\n      {\n        relevance: 0,\n        match: /,/\n      },\n      {\n        className: 'params',\n        begin: /\\(/,\n        end: /\\)/,\n        keywords: KEYWORDS,\n        relevance: 0,\n        contains: [\n          C_LINE_COMMENT_MODE,\n          hljs.C_BLOCK_COMMENT_MODE,\n          STRINGS,\n          NUMBERS,\n          TYPES,\n          // Count matching parentheses.\n          {\n            begin: /\\(/,\n            end: /\\)/,\n            keywords: KEYWORDS,\n            relevance: 0,\n            contains: [\n              'self',\n              C_LINE_COMMENT_MODE,\n              hljs.C_BLOCK_COMMENT_MODE,\n              STRINGS,\n              NUMBERS,\n              TYPES\n            ]\n          }\n        ]\n      },\n      TYPES,\n      C_LINE_COMMENT_MODE,\n      hljs.C_BLOCK_COMMENT_MODE,\n      PREPROCESSOR\n    ]\n  };\n\n  return {\n    name: \"C\",\n    aliases: [ 'h' ],\n    keywords: KEYWORDS,\n    // Until differentiations are added between `c` and `cpp`, `c` will\n    // not be auto-detected to avoid auto-detect conflicts between C and C++\n    disableAutodetect: true,\n    illegal: '</',\n    contains: [].concat(\n      EXPRESSION_CONTEXT,\n      FUNCTION_DECLARATION,\n      EXPRESSION_CONTAINS,\n      [\n        PREPROCESSOR,\n        {\n          begin: hljs.IDENT_RE + '::',\n          keywords: KEYWORDS\n        },\n        {\n          className: 'class',\n          beginKeywords: 'enum class struct union',\n          end: /[{;:<>=]/,\n          contains: [\n            { beginKeywords: \"final class struct\" },\n            hljs.TITLE_MODE\n          ]\n        }\n      ]),\n    exports: {\n      preprocessor: PREPROCESSOR,\n      strings: STRINGS,\n      keywords: KEYWORDS\n    }\n  };\n}\n\nmodule.exports = c;\n","/*\nLanguage: C/AL\nAuthor: Kenneth Fuglsang Christensen <kfuglsang@gmail.com>\nDescription: Provides highlighting of Microsoft Dynamics NAV C/AL code files\nWebsite: https://docs.microsoft.com/en-us/dynamics-nav/programming-in-c-al\nCategory: enterprise\n*/\n\n/** @type LanguageFn */\nfunction cal(hljs) {\n  const regex = hljs.regex;\n  const KEYWORDS = [\n    \"div\",\n    \"mod\",\n    \"in\",\n    \"and\",\n    \"or\",\n    \"not\",\n    \"xor\",\n    \"asserterror\",\n    \"begin\",\n    \"case\",\n    \"do\",\n    \"downto\",\n    \"else\",\n    \"end\",\n    \"exit\",\n    \"for\",\n    \"local\",\n    \"if\",\n    \"of\",\n    \"repeat\",\n    \"then\",\n    \"to\",\n    \"until\",\n    \"while\",\n    \"with\",\n    \"var\"\n  ];\n  const LITERALS = 'false true';\n  const COMMENT_MODES = [\n    hljs.C_LINE_COMMENT_MODE,\n    hljs.COMMENT(\n      /\\{/,\n      /\\}/,\n      { relevance: 0 }\n    ),\n    hljs.COMMENT(\n      /\\(\\*/,\n      /\\*\\)/,\n      { relevance: 10 }\n    )\n  ];\n  const STRING = {\n    className: 'string',\n    begin: /'/,\n    end: /'/,\n    contains: [ { begin: /''/ } ]\n  };\n  const CHAR_STRING = {\n    className: 'string',\n    begin: /(#\\d+)+/\n  };\n  const DATE = {\n    className: 'number',\n    begin: '\\\\b\\\\d+(\\\\.\\\\d+)?(DT|D|T)',\n    relevance: 0\n  };\n  const DBL_QUOTED_VARIABLE = {\n    className: 'string', // not a string technically but makes sense to be highlighted in the same style\n    begin: '\"',\n    end: '\"'\n  };\n\n  const PROCEDURE = {\n    match: [\n      /procedure/,\n      /\\s+/,\n      /[a-zA-Z_][\\w@]*/,\n      /\\s*/\n    ],\n    scope: {\n      1: \"keyword\",\n      3: \"title.function\"\n    },\n    contains: [\n      {\n        className: 'params',\n        begin: /\\(/,\n        end: /\\)/,\n        keywords: KEYWORDS,\n        contains: [\n          STRING,\n          CHAR_STRING,\n          hljs.NUMBER_MODE\n        ]\n      },\n      ...COMMENT_MODES\n    ]\n  };\n\n  const OBJECT_TYPES = [\n    \"Table\",\n    \"Form\",\n    \"Report\",\n    \"Dataport\",\n    \"Codeunit\",\n    \"XMLport\",\n    \"MenuSuite\",\n    \"Page\",\n    \"Query\"\n  ];\n  const OBJECT = {\n    match: [\n      /OBJECT/,\n      /\\s+/,\n      regex.either(...OBJECT_TYPES),\n      /\\s+/,\n      /\\d+/,\n      /\\s+(?=[^\\s])/,\n      /.*/,\n      /$/\n    ],\n    relevance: 3,\n    scope: {\n      1: \"keyword\",\n      3: \"type\",\n      5: \"number\",\n      7: \"title\"\n    }\n  };\n\n  const PROPERTY = {\n    match: /[\\w]+(?=\\=)/,\n    scope: \"attribute\",\n    relevance: 0\n  };\n\n  return {\n    name: 'C/AL',\n    case_insensitive: true,\n    keywords: {\n      keyword: KEYWORDS,\n      literal: LITERALS\n    },\n    illegal: /\\/\\*/,\n    contains: [\n      PROPERTY,\n      STRING,\n      CHAR_STRING,\n      DATE,\n      DBL_QUOTED_VARIABLE,\n      hljs.NUMBER_MODE,\n      OBJECT,\n      PROCEDURE\n    ]\n  };\n}\n\nmodule.exports = cal;\n","/*\nLanguage: Cap’n Proto\nAuthor: Oleg Efimov <efimovov@gmail.com>\nDescription: Cap’n Proto message definition format\nWebsite: https://capnproto.org/capnp-tool.html\nCategory: protocols\n*/\n\n/** @type LanguageFn */\nfunction capnproto(hljs) {\n  const KEYWORDS = [\n    \"struct\",\n    \"enum\",\n    \"interface\",\n    \"union\",\n    \"group\",\n    \"import\",\n    \"using\",\n    \"const\",\n    \"annotation\",\n    \"extends\",\n    \"in\",\n    \"of\",\n    \"on\",\n    \"as\",\n    \"with\",\n    \"from\",\n    \"fixed\"\n  ];\n  const TYPES = [\n    \"Void\",\n    \"Bool\",\n    \"Int8\",\n    \"Int16\",\n    \"Int32\",\n    \"Int64\",\n    \"UInt8\",\n    \"UInt16\",\n    \"UInt32\",\n    \"UInt64\",\n    \"Float32\",\n    \"Float64\",\n    \"Text\",\n    \"Data\",\n    \"AnyPointer\",\n    \"AnyStruct\",\n    \"Capability\",\n    \"List\"\n  ];\n  const LITERALS = [\n    \"true\",\n    \"false\"\n  ];\n  const CLASS_DEFINITION = {\n    variants: [\n      { match: [\n        /(struct|enum|interface)/,\n        /\\s+/,\n        hljs.IDENT_RE\n      ] },\n      { match: [\n        /extends/,\n        /\\s*\\(/,\n        hljs.IDENT_RE,\n        /\\s*\\)/\n      ] }\n    ],\n    scope: {\n      1: \"keyword\",\n      3: \"title.class\"\n    }\n  };\n  return {\n    name: 'Cap’n Proto',\n    aliases: [ 'capnp' ],\n    keywords: {\n      keyword: KEYWORDS,\n      type: TYPES,\n      literal: LITERALS\n    },\n    contains: [\n      hljs.QUOTE_STRING_MODE,\n      hljs.NUMBER_MODE,\n      hljs.HASH_COMMENT_MODE,\n      {\n        className: 'meta',\n        begin: /@0x[\\w\\d]{16};/,\n        illegal: /\\n/\n      },\n      {\n        className: 'symbol',\n        begin: /@\\d+\\b/\n      },\n      CLASS_DEFINITION\n    ]\n  };\n}\n\nmodule.exports = capnproto;\n","/*\nLanguage: Ceylon\nAuthor: Lucas Werkmeister <mail@lucaswerkmeister.de>\nWebsite: https://ceylon-lang.org\nCategory: system\n*/\n\n/** @type LanguageFn */\nfunction ceylon(hljs) {\n  // 2.3. Identifiers and keywords\n  const KEYWORDS = [\n    \"assembly\",\n    \"module\",\n    \"package\",\n    \"import\",\n    \"alias\",\n    \"class\",\n    \"interface\",\n    \"object\",\n    \"given\",\n    \"value\",\n    \"assign\",\n    \"void\",\n    \"function\",\n    \"new\",\n    \"of\",\n    \"extends\",\n    \"satisfies\",\n    \"abstracts\",\n    \"in\",\n    \"out\",\n    \"return\",\n    \"break\",\n    \"continue\",\n    \"throw\",\n    \"assert\",\n    \"dynamic\",\n    \"if\",\n    \"else\",\n    \"switch\",\n    \"case\",\n    \"for\",\n    \"while\",\n    \"try\",\n    \"catch\",\n    \"finally\",\n    \"then\",\n    \"let\",\n    \"this\",\n    \"outer\",\n    \"super\",\n    \"is\",\n    \"exists\",\n    \"nonempty\"\n  ];\n  // 7.4.1 Declaration Modifiers\n  const DECLARATION_MODIFIERS = [\n    \"shared\",\n    \"abstract\",\n    \"formal\",\n    \"default\",\n    \"actual\",\n    \"variable\",\n    \"late\",\n    \"native\",\n    \"deprecated\",\n    \"final\",\n    \"sealed\",\n    \"annotation\",\n    \"suppressWarnings\",\n    \"small\"\n  ];\n  // 7.4.2 Documentation\n  const DOCUMENTATION = [\n    \"doc\",\n    \"by\",\n    \"license\",\n    \"see\",\n    \"throws\",\n    \"tagged\"\n  ];\n  const SUBST = {\n    className: 'subst',\n    excludeBegin: true,\n    excludeEnd: true,\n    begin: /``/,\n    end: /``/,\n    keywords: KEYWORDS,\n    relevance: 10\n  };\n  const EXPRESSIONS = [\n    {\n      // verbatim string\n      className: 'string',\n      begin: '\"\"\"',\n      end: '\"\"\"',\n      relevance: 10\n    },\n    {\n      // string literal or template\n      className: 'string',\n      begin: '\"',\n      end: '\"',\n      contains: [ SUBST ]\n    },\n    {\n      // character literal\n      className: 'string',\n      begin: \"'\",\n      end: \"'\"\n    },\n    {\n      // numeric literal\n      className: 'number',\n      begin: '#[0-9a-fA-F_]+|\\\\$[01_]+|[0-9_]+(?:\\\\.[0-9_](?:[eE][+-]?\\\\d+)?)?[kMGTPmunpf]?',\n      relevance: 0\n    }\n  ];\n  SUBST.contains = EXPRESSIONS;\n\n  return {\n    name: 'Ceylon',\n    keywords: {\n      keyword: KEYWORDS.concat(DECLARATION_MODIFIERS),\n      meta: DOCUMENTATION\n    },\n    illegal: '\\\\$[^01]|#[^0-9a-fA-F]',\n    contains: [\n      hljs.C_LINE_COMMENT_MODE,\n      hljs.COMMENT('/\\\\*', '\\\\*/', { contains: [ 'self' ] }),\n      {\n        // compiler annotation\n        className: 'meta',\n        begin: '@[a-z]\\\\w*(?::\"[^\"]*\")?'\n      }\n    ].concat(EXPRESSIONS)\n  };\n}\n\nmodule.exports = ceylon;\n","/*\nLanguage: Clean\nAuthor: Camil Staps <info@camilstaps.nl>\nCategory: functional\nWebsite: http://clean.cs.ru.nl\n*/\n\n/** @type LanguageFn */\nfunction clean(hljs) {\n  const KEYWORDS = [\n    \"if\",\n    \"let\",\n    \"in\",\n    \"with\",\n    \"where\",\n    \"case\",\n    \"of\",\n    \"class\",\n    \"instance\",\n    \"otherwise\",\n    \"implementation\",\n    \"definition\",\n    \"system\",\n    \"module\",\n    \"from\",\n    \"import\",\n    \"qualified\",\n    \"as\",\n    \"special\",\n    \"code\",\n    \"inline\",\n    \"foreign\",\n    \"export\",\n    \"ccall\",\n    \"stdcall\",\n    \"generic\",\n    \"derive\",\n    \"infix\",\n    \"infixl\",\n    \"infixr\"\n  ];\n  return {\n    name: 'Clean',\n    aliases: [\n      'icl',\n      'dcl'\n    ],\n    keywords: {\n      keyword: KEYWORDS,\n      built_in:\n        'Int Real Char Bool',\n      literal:\n        'True False'\n    },\n    contains: [\n      hljs.C_LINE_COMMENT_MODE,\n      hljs.C_BLOCK_COMMENT_MODE,\n      hljs.APOS_STRING_MODE,\n      hljs.QUOTE_STRING_MODE,\n      hljs.C_NUMBER_MODE,\n      { // relevance booster\n        begin: '->|<-[|:]?|#!?|>>=|\\\\{\\\\||\\\\|\\\\}|:==|=:|<>' }\n    ]\n  };\n}\n\nmodule.exports = clean;\n","/*\nLanguage: Clojure\nDescription: Clojure syntax (based on lisp.js)\nAuthor: mfornos\nWebsite: https://clojure.org\nCategory: lisp\n*/\n\n/** @type LanguageFn */\nfunction clojure(hljs) {\n  const SYMBOLSTART = 'a-zA-Z_\\\\-!.?+*=<>&\\'';\n  const SYMBOL_RE = '[#]?[' + SYMBOLSTART + '][' + SYMBOLSTART + '0-9/;:$#]*';\n  const globals = 'def defonce defprotocol defstruct defmulti defmethod defn- defn defmacro deftype defrecord';\n  const keywords = {\n    $pattern: SYMBOL_RE,\n    built_in:\n      // Clojure keywords\n      globals + ' '\n      + 'cond apply if-not if-let if not not= =|0 <|0 >|0 <=|0 >=|0 ==|0 +|0 /|0 *|0 -|0 rem '\n      + 'quot neg? pos? delay? symbol? keyword? true? false? integer? empty? coll? list? '\n      + 'set? ifn? fn? associative? sequential? sorted? counted? reversible? number? decimal? '\n      + 'class? distinct? isa? float? rational? reduced? ratio? odd? even? char? seq? vector? '\n      + 'string? map? nil? contains? zero? instance? not-every? not-any? libspec? -> ->> .. . '\n      + 'inc compare do dotimes mapcat take remove take-while drop letfn drop-last take-last '\n      + 'drop-while while intern condp case reduced cycle split-at split-with repeat replicate '\n      + 'iterate range merge zipmap declare line-seq sort comparator sort-by dorun doall nthnext '\n      + 'nthrest partition eval doseq await await-for let agent atom send send-off release-pending-sends '\n      + 'add-watch mapv filterv remove-watch agent-error restart-agent set-error-handler error-handler '\n      + 'set-error-mode! error-mode shutdown-agents quote var fn loop recur throw try monitor-enter '\n      + 'monitor-exit macroexpand macroexpand-1 for dosync and or '\n      + 'when when-not when-let comp juxt partial sequence memoize constantly complement identity assert '\n      + 'peek pop doto proxy first rest cons cast coll last butlast '\n      + 'sigs reify second ffirst fnext nfirst nnext meta with-meta ns in-ns create-ns import '\n      + 'refer keys select-keys vals key val rseq name namespace promise into transient persistent! conj! '\n      + 'assoc! dissoc! pop! disj! use class type num float double short byte boolean bigint biginteger '\n      + 'bigdec print-method print-dup throw-if printf format load compile get-in update-in pr pr-on newline '\n      + 'flush read slurp read-line subvec with-open memfn time re-find re-groups rand-int rand mod locking '\n      + 'assert-valid-fdecl alias resolve ref deref refset swap! reset! set-validator! compare-and-set! alter-meta! '\n      + 'reset-meta! commute get-validator alter ref-set ref-history-count ref-min-history ref-max-history ensure sync io! '\n      + 'new next conj set! to-array future future-call into-array aset gen-class reduce map filter find empty '\n      + 'hash-map hash-set sorted-map sorted-map-by sorted-set sorted-set-by vec vector seq flatten reverse assoc dissoc list '\n      + 'disj get union difference intersection extend extend-type extend-protocol int nth delay count concat chunk chunk-buffer '\n      + 'chunk-append chunk-first chunk-rest max min dec unchecked-inc-int unchecked-inc unchecked-dec-inc unchecked-dec unchecked-negate '\n      + 'unchecked-add-int unchecked-add unchecked-subtract-int unchecked-subtract chunk-next chunk-cons chunked-seq? prn vary-meta '\n      + 'lazy-seq spread list* str find-keyword keyword symbol gensym force rationalize'\n  };\n\n  const SYMBOL = {\n    begin: SYMBOL_RE,\n    relevance: 0\n  };\n  const NUMBER = {\n    scope: 'number',\n    relevance: 0,\n    variants: [\n      { match: /[-+]?0[xX][0-9a-fA-F]+N?/ }, // hexadecimal                 // 0x2a\n      { match: /[-+]?0[0-7]+N?/ }, // octal                       // 052\n      { match: /[-+]?[1-9][0-9]?[rR][0-9a-zA-Z]+N?/ }, // variable radix from 2 to 36 // 2r101010, 8r52, 36r16\n      { match: /[-+]?[0-9]+\\/[0-9]+N?/ }, // ratio                       // 1/2\n      { match: /[-+]?[0-9]+((\\.[0-9]*([eE][+-]?[0-9]+)?M?)|([eE][+-]?[0-9]+M?|M))/ }, // float        // 0.42 4.2E-1M 42E1 42M\n      { match: /[-+]?([1-9][0-9]*|0)N?/ }, // int (don't match leading 0) // 42 42N\n    ]\n  };\n  const CHARACTER = {\n    scope: 'character',\n    variants: [\n      { match: /\\\\o[0-3]?[0-7]{1,2}/ }, // Unicode Octal 0 - 377\n      { match: /\\\\u[0-9a-fA-F]{4}/ }, // Unicode Hex 0000 - FFFF\n      { match: /\\\\(newline|space|tab|formfeed|backspace|return)/ }, // special characters\n      {\n        match: /\\\\\\S/,\n        relevance: 0\n      } // any non-whitespace char\n    ]\n  };\n  const REGEX = {\n    scope: 'regex',\n    begin: /#\"/,\n    end: /\"/,\n    contains: [ hljs.BACKSLASH_ESCAPE ]\n  };\n  const STRING = hljs.inherit(hljs.QUOTE_STRING_MODE, { illegal: null });\n  const COMMA = {\n    scope: 'punctuation',\n    match: /,/,\n    relevance: 0\n  };\n  const COMMENT = hljs.COMMENT(\n    ';',\n    '$',\n    { relevance: 0 }\n  );\n  const LITERAL = {\n    className: 'literal',\n    begin: /\\b(true|false|nil)\\b/\n  };\n  const COLLECTION = {\n    begin: \"\\\\[|(#::?\" + SYMBOL_RE + \")?\\\\{\",\n    end: '[\\\\]\\\\}]',\n    relevance: 0\n  };\n  const KEY = {\n    className: 'symbol',\n    begin: '[:]{1,2}' + SYMBOL_RE\n  };\n  const LIST = {\n    begin: '\\\\(',\n    end: '\\\\)'\n  };\n  const BODY = {\n    endsWithParent: true,\n    relevance: 0\n  };\n  const NAME = {\n    keywords: keywords,\n    className: 'name',\n    begin: SYMBOL_RE,\n    relevance: 0,\n    starts: BODY\n  };\n  const DEFAULT_CONTAINS = [\n    COMMA,\n    LIST,\n    CHARACTER,\n    REGEX,\n    STRING,\n    COMMENT,\n    KEY,\n    COLLECTION,\n    NUMBER,\n    LITERAL,\n    SYMBOL\n  ];\n\n  const GLOBAL = {\n    beginKeywords: globals,\n    keywords: {\n      $pattern: SYMBOL_RE,\n      keyword: globals\n    },\n    end: '(\\\\[|#|\\\\d|\"|:|\\\\{|\\\\)|\\\\(|$)',\n    contains: [\n      {\n        className: 'title',\n        begin: SYMBOL_RE,\n        relevance: 0,\n        excludeEnd: true,\n        // we can only have a single title\n        endsParent: true\n      }\n    ].concat(DEFAULT_CONTAINS)\n  };\n\n  LIST.contains = [\n    GLOBAL,\n    NAME,\n    BODY\n  ];\n  BODY.contains = DEFAULT_CONTAINS;\n  COLLECTION.contains = DEFAULT_CONTAINS;\n\n  return {\n    name: 'Clojure',\n    aliases: [\n      'clj',\n      'edn'\n    ],\n    illegal: /\\S/,\n    contains: [\n      COMMA,\n      LIST,\n      CHARACTER,\n      REGEX,\n      STRING,\n      COMMENT,\n      KEY,\n      COLLECTION,\n      NUMBER,\n      LITERAL\n    ]\n  };\n}\n\nmodule.exports = clojure;\n","/*\nLanguage: Clojure REPL\nDescription: Clojure REPL sessions\nAuthor: Ivan Sagalaev <maniac@softwaremaniacs.org>\nRequires: clojure.js\nWebsite: https://clojure.org\nCategory: lisp\n*/\n\n/** @type LanguageFn */\nfunction clojureRepl(hljs) {\n  return {\n    name: 'Clojure REPL',\n    contains: [\n      {\n        className: 'meta.prompt',\n        begin: /^([\\w.-]+|\\s*#_)?=>/,\n        starts: {\n          end: /$/,\n          subLanguage: 'clojure'\n        }\n      }\n    ]\n  };\n}\n\nmodule.exports = clojureRepl;\n","/*\nLanguage: CMake\nDescription: CMake is an open-source cross-platform system for build automation.\nAuthor: Igor Kalnitsky <igor@kalnitsky.org>\nWebsite: https://cmake.org\nCategory: build-system\n*/\n\n/** @type LanguageFn */\nfunction cmake(hljs) {\n  return {\n    name: 'CMake',\n    aliases: [ 'cmake.in' ],\n    case_insensitive: true,\n    keywords: { keyword:\n        // scripting commands\n        'break cmake_host_system_information cmake_minimum_required cmake_parse_arguments '\n        + 'cmake_policy configure_file continue elseif else endforeach endfunction endif endmacro '\n        + 'endwhile execute_process file find_file find_library find_package find_path '\n        + 'find_program foreach function get_cmake_property get_directory_property '\n        + 'get_filename_component get_property if include include_guard list macro '\n        + 'mark_as_advanced math message option return separate_arguments '\n        + 'set_directory_properties set_property set site_name string unset variable_watch while '\n        // project commands\n        + 'add_compile_definitions add_compile_options add_custom_command add_custom_target '\n        + 'add_definitions add_dependencies add_executable add_library add_link_options '\n        + 'add_subdirectory add_test aux_source_directory build_command create_test_sourcelist '\n        + 'define_property enable_language enable_testing export fltk_wrap_ui '\n        + 'get_source_file_property get_target_property get_test_property include_directories '\n        + 'include_external_msproject include_regular_expression install link_directories '\n        + 'link_libraries load_cache project qt_wrap_cpp qt_wrap_ui remove_definitions '\n        + 'set_source_files_properties set_target_properties set_tests_properties source_group '\n        + 'target_compile_definitions target_compile_features target_compile_options '\n        + 'target_include_directories target_link_directories target_link_libraries '\n        + 'target_link_options target_sources try_compile try_run '\n        // CTest commands\n        + 'ctest_build ctest_configure ctest_coverage ctest_empty_binary_directory ctest_memcheck '\n        + 'ctest_read_custom_files ctest_run_script ctest_sleep ctest_start ctest_submit '\n        + 'ctest_test ctest_update ctest_upload '\n        // deprecated commands\n        + 'build_name exec_program export_library_dependencies install_files install_programs '\n        + 'install_targets load_command make_directory output_required_files remove '\n        + 'subdir_depends subdirs use_mangled_mesa utility_source variable_requires write_file '\n        + 'qt5_use_modules qt5_use_package qt5_wrap_cpp '\n        // core keywords\n        + 'on off true false and or not command policy target test exists is_newer_than '\n        + 'is_directory is_symlink is_absolute matches less greater equal less_equal '\n        + 'greater_equal strless strgreater strequal strless_equal strgreater_equal version_less '\n        + 'version_greater version_equal version_less_equal version_greater_equal in_list defined' },\n    contains: [\n      {\n        className: 'variable',\n        begin: /\\$\\{/,\n        end: /\\}/\n      },\n      hljs.COMMENT(/#\\[\\[/, /]]/),\n      hljs.HASH_COMMENT_MODE,\n      hljs.QUOTE_STRING_MODE,\n      hljs.NUMBER_MODE\n    ]\n  };\n}\n\nmodule.exports = cmake;\n","const KEYWORDS = [\n  \"as\", // for exports\n  \"in\",\n  \"of\",\n  \"if\",\n  \"for\",\n  \"while\",\n  \"finally\",\n  \"var\",\n  \"new\",\n  \"function\",\n  \"do\",\n  \"return\",\n  \"void\",\n  \"else\",\n  \"break\",\n  \"catch\",\n  \"instanceof\",\n  \"with\",\n  \"throw\",\n  \"case\",\n  \"default\",\n  \"try\",\n  \"switch\",\n  \"continue\",\n  \"typeof\",\n  \"delete\",\n  \"let\",\n  \"yield\",\n  \"const\",\n  \"class\",\n  // JS handles these with a special rule\n  // \"get\",\n  // \"set\",\n  \"debugger\",\n  \"async\",\n  \"await\",\n  \"static\",\n  \"import\",\n  \"from\",\n  \"export\",\n  \"extends\",\n  // It's reached stage 3, which is \"recommended for implementation\":\n  \"using\"\n];\nconst LITERALS = [\n  \"true\",\n  \"false\",\n  \"null\",\n  \"undefined\",\n  \"NaN\",\n  \"Infinity\"\n];\n\n// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects\nconst TYPES = [\n  // Fundamental objects\n  \"Object\",\n  \"Function\",\n  \"Boolean\",\n  \"Symbol\",\n  // numbers and dates\n  \"Math\",\n  \"Date\",\n  \"Number\",\n  \"BigInt\",\n  // text\n  \"String\",\n  \"RegExp\",\n  // Indexed collections\n  \"Array\",\n  \"Float32Array\",\n  \"Float64Array\",\n  \"Int8Array\",\n  \"Uint8Array\",\n  \"Uint8ClampedArray\",\n  \"Int16Array\",\n  \"Int32Array\",\n  \"Uint16Array\",\n  \"Uint32Array\",\n  \"BigInt64Array\",\n  \"BigUint64Array\",\n  // Keyed collections\n  \"Set\",\n  \"Map\",\n  \"WeakSet\",\n  \"WeakMap\",\n  // Structured data\n  \"ArrayBuffer\",\n  \"SharedArrayBuffer\",\n  \"Atomics\",\n  \"DataView\",\n  \"JSON\",\n  // Control abstraction objects\n  \"Promise\",\n  \"Generator\",\n  \"GeneratorFunction\",\n  \"AsyncFunction\",\n  // Reflection\n  \"Reflect\",\n  \"Proxy\",\n  // Internationalization\n  \"Intl\",\n  // WebAssembly\n  \"WebAssembly\"\n];\n\nconst ERROR_TYPES = [\n  \"Error\",\n  \"EvalError\",\n  \"InternalError\",\n  \"RangeError\",\n  \"ReferenceError\",\n  \"SyntaxError\",\n  \"TypeError\",\n  \"URIError\"\n];\n\nconst BUILT_IN_GLOBALS = [\n  \"setInterval\",\n  \"setTimeout\",\n  \"clearInterval\",\n  \"clearTimeout\",\n\n  \"require\",\n  \"exports\",\n\n  \"eval\",\n  \"isFinite\",\n  \"isNaN\",\n  \"parseFloat\",\n  \"parseInt\",\n  \"decodeURI\",\n  \"decodeURIComponent\",\n  \"encodeURI\",\n  \"encodeURIComponent\",\n  \"escape\",\n  \"unescape\"\n];\n\nconst BUILT_INS = [].concat(\n  BUILT_IN_GLOBALS,\n  TYPES,\n  ERROR_TYPES\n);\n\n/*\nLanguage: CoffeeScript\nAuthor: Dmytrii Nagirniak <dnagir@gmail.com>\nContributors: Oleg Efimov <efimovov@gmail.com>, Cédric Néhémie <cedric.nehemie@gmail.com>\nDescription: CoffeeScript is a programming language that transcompiles to JavaScript. For info about language see http://coffeescript.org/\nCategory: scripting\nWebsite: https://coffeescript.org\n*/\n\n\n/** @type LanguageFn */\nfunction coffeescript(hljs) {\n  const COFFEE_BUILT_INS = [\n    'npm',\n    'print'\n  ];\n  const COFFEE_LITERALS = [\n    'yes',\n    'no',\n    'on',\n    'off'\n  ];\n  const COFFEE_KEYWORDS = [\n    'then',\n    'unless',\n    'until',\n    'loop',\n    'by',\n    'when',\n    'and',\n    'or',\n    'is',\n    'isnt',\n    'not'\n  ];\n  const NOT_VALID_KEYWORDS = [\n    \"var\",\n    \"const\",\n    \"let\",\n    \"function\",\n    \"static\"\n  ];\n  const excluding = (list) =>\n    (kw) => !list.includes(kw);\n  const KEYWORDS$1 = {\n    keyword: KEYWORDS.concat(COFFEE_KEYWORDS).filter(excluding(NOT_VALID_KEYWORDS)),\n    literal: LITERALS.concat(COFFEE_LITERALS),\n    built_in: BUILT_INS.concat(COFFEE_BUILT_INS)\n  };\n  const JS_IDENT_RE = '[A-Za-z$_][0-9A-Za-z$_]*';\n  const SUBST = {\n    className: 'subst',\n    begin: /#\\{/,\n    end: /\\}/,\n    keywords: KEYWORDS$1\n  };\n  const EXPRESSIONS = [\n    hljs.BINARY_NUMBER_MODE,\n    hljs.inherit(hljs.C_NUMBER_MODE, { starts: {\n      end: '(\\\\s*/)?',\n      relevance: 0\n    } }), // a number tries to eat the following slash to prevent treating it as a regexp\n    {\n      className: 'string',\n      variants: [\n        {\n          begin: /'''/,\n          end: /'''/,\n          contains: [ hljs.BACKSLASH_ESCAPE ]\n        },\n        {\n          begin: /'/,\n          end: /'/,\n          contains: [ hljs.BACKSLASH_ESCAPE ]\n        },\n        {\n          begin: /\"\"\"/,\n          end: /\"\"\"/,\n          contains: [\n            hljs.BACKSLASH_ESCAPE,\n            SUBST\n          ]\n        },\n        {\n          begin: /\"/,\n          end: /\"/,\n          contains: [\n            hljs.BACKSLASH_ESCAPE,\n            SUBST\n          ]\n        }\n      ]\n    },\n    {\n      className: 'regexp',\n      variants: [\n        {\n          begin: '///',\n          end: '///',\n          contains: [\n            SUBST,\n            hljs.HASH_COMMENT_MODE\n          ]\n        },\n        {\n          begin: '//[gim]{0,3}(?=\\\\W)',\n          relevance: 0\n        },\n        {\n          // regex can't start with space to parse x / 2 / 3 as two divisions\n          // regex can't start with *, and it supports an \"illegal\" in the main mode\n          begin: /\\/(?![ *]).*?(?![\\\\]).\\/[gim]{0,3}(?=\\W)/ }\n      ]\n    },\n    { begin: '@' + JS_IDENT_RE // relevance booster\n    },\n    {\n      subLanguage: 'javascript',\n      excludeBegin: true,\n      excludeEnd: true,\n      variants: [\n        {\n          begin: '```',\n          end: '```'\n        },\n        {\n          begin: '`',\n          end: '`'\n        }\n      ]\n    }\n  ];\n  SUBST.contains = EXPRESSIONS;\n\n  const TITLE = hljs.inherit(hljs.TITLE_MODE, { begin: JS_IDENT_RE });\n  const POSSIBLE_PARAMS_RE = '(\\\\(.*\\\\)\\\\s*)?\\\\B[-=]>';\n  const PARAMS = {\n    className: 'params',\n    begin: '\\\\([^\\\\(]',\n    returnBegin: true,\n    /* We need another contained nameless mode to not have every nested\n    pair of parens to be called \"params\" */\n    contains: [\n      {\n        begin: /\\(/,\n        end: /\\)/,\n        keywords: KEYWORDS$1,\n        contains: [ 'self' ].concat(EXPRESSIONS)\n      }\n    ]\n  };\n\n  const CLASS_DEFINITION = {\n    variants: [\n      { match: [\n        /class\\s+/,\n        JS_IDENT_RE,\n        /\\s+extends\\s+/,\n        JS_IDENT_RE\n      ] },\n      { match: [\n        /class\\s+/,\n        JS_IDENT_RE\n      ] }\n    ],\n    scope: {\n      2: \"title.class\",\n      4: \"title.class.inherited\"\n    },\n    keywords: KEYWORDS$1\n  };\n\n  return {\n    name: 'CoffeeScript',\n    aliases: [\n      'coffee',\n      'cson',\n      'iced'\n    ],\n    keywords: KEYWORDS$1,\n    illegal: /\\/\\*/,\n    contains: [\n      ...EXPRESSIONS,\n      hljs.COMMENT('###', '###'),\n      hljs.HASH_COMMENT_MODE,\n      {\n        className: 'function',\n        begin: '^\\\\s*' + JS_IDENT_RE + '\\\\s*=\\\\s*' + POSSIBLE_PARAMS_RE,\n        end: '[-=]>',\n        returnBegin: true,\n        contains: [\n          TITLE,\n          PARAMS\n        ]\n      },\n      {\n        // anonymous function start\n        begin: /[:\\(,=]\\s*/,\n        relevance: 0,\n        contains: [\n          {\n            className: 'function',\n            begin: POSSIBLE_PARAMS_RE,\n            end: '[-=]>',\n            returnBegin: true,\n            contains: [ PARAMS ]\n          }\n        ]\n      },\n      CLASS_DEFINITION,\n      {\n        begin: JS_IDENT_RE + ':',\n        end: ':',\n        returnBegin: true,\n        returnEnd: true,\n        relevance: 0\n      }\n    ]\n  };\n}\n\nmodule.exports = coffeescript;\n","/*\nLanguage: Coq\nAuthor: Stephan Boyer <stephan@stephanboyer.com>\nCategory: functional\nWebsite: https://coq.inria.fr\n*/\n\n/** @type LanguageFn */\nfunction coq(hljs) {\n  const KEYWORDS = [\n    \"_|0\",\n    \"as\",\n    \"at\",\n    \"cofix\",\n    \"else\",\n    \"end\",\n    \"exists\",\n    \"exists2\",\n    \"fix\",\n    \"for\",\n    \"forall\",\n    \"fun\",\n    \"if\",\n    \"IF\",\n    \"in\",\n    \"let\",\n    \"match\",\n    \"mod\",\n    \"Prop\",\n    \"return\",\n    \"Set\",\n    \"then\",\n    \"Type\",\n    \"using\",\n    \"where\",\n    \"with\",\n    \"Abort\",\n    \"About\",\n    \"Add\",\n    \"Admit\",\n    \"Admitted\",\n    \"All\",\n    \"Arguments\",\n    \"Assumptions\",\n    \"Axiom\",\n    \"Back\",\n    \"BackTo\",\n    \"Backtrack\",\n    \"Bind\",\n    \"Blacklist\",\n    \"Canonical\",\n    \"Cd\",\n    \"Check\",\n    \"Class\",\n    \"Classes\",\n    \"Close\",\n    \"Coercion\",\n    \"Coercions\",\n    \"CoFixpoint\",\n    \"CoInductive\",\n    \"Collection\",\n    \"Combined\",\n    \"Compute\",\n    \"Conjecture\",\n    \"Conjectures\",\n    \"Constant\",\n    \"constr\",\n    \"Constraint\",\n    \"Constructors\",\n    \"Context\",\n    \"Corollary\",\n    \"CreateHintDb\",\n    \"Cut\",\n    \"Declare\",\n    \"Defined\",\n    \"Definition\",\n    \"Delimit\",\n    \"Dependencies\",\n    \"Dependent\",\n    \"Derive\",\n    \"Drop\",\n    \"eauto\",\n    \"End\",\n    \"Equality\",\n    \"Eval\",\n    \"Example\",\n    \"Existential\",\n    \"Existentials\",\n    \"Existing\",\n    \"Export\",\n    \"exporting\",\n    \"Extern\",\n    \"Extract\",\n    \"Extraction\",\n    \"Fact\",\n    \"Field\",\n    \"Fields\",\n    \"File\",\n    \"Fixpoint\",\n    \"Focus\",\n    \"for\",\n    \"From\",\n    \"Function\",\n    \"Functional\",\n    \"Generalizable\",\n    \"Global\",\n    \"Goal\",\n    \"Grab\",\n    \"Grammar\",\n    \"Graph\",\n    \"Guarded\",\n    \"Heap\",\n    \"Hint\",\n    \"HintDb\",\n    \"Hints\",\n    \"Hypotheses\",\n    \"Hypothesis\",\n    \"ident\",\n    \"Identity\",\n    \"If\",\n    \"Immediate\",\n    \"Implicit\",\n    \"Import\",\n    \"Include\",\n    \"Inductive\",\n    \"Infix\",\n    \"Info\",\n    \"Initial\",\n    \"Inline\",\n    \"Inspect\",\n    \"Instance\",\n    \"Instances\",\n    \"Intro\",\n    \"Intros\",\n    \"Inversion\",\n    \"Inversion_clear\",\n    \"Language\",\n    \"Left\",\n    \"Lemma\",\n    \"Let\",\n    \"Libraries\",\n    \"Library\",\n    \"Load\",\n    \"LoadPath\",\n    \"Local\",\n    \"Locate\",\n    \"Ltac\",\n    \"ML\",\n    \"Mode\",\n    \"Module\",\n    \"Modules\",\n    \"Monomorphic\",\n    \"Morphism\",\n    \"Next\",\n    \"NoInline\",\n    \"Notation\",\n    \"Obligation\",\n    \"Obligations\",\n    \"Opaque\",\n    \"Open\",\n    \"Optimize\",\n    \"Options\",\n    \"Parameter\",\n    \"Parameters\",\n    \"Parametric\",\n    \"Path\",\n    \"Paths\",\n    \"pattern\",\n    \"Polymorphic\",\n    \"Preterm\",\n    \"Print\",\n    \"Printing\",\n    \"Program\",\n    \"Projections\",\n    \"Proof\",\n    \"Proposition\",\n    \"Pwd\",\n    \"Qed\",\n    \"Quit\",\n    \"Rec\",\n    \"Record\",\n    \"Recursive\",\n    \"Redirect\",\n    \"Relation\",\n    \"Remark\",\n    \"Remove\",\n    \"Require\",\n    \"Reserved\",\n    \"Reset\",\n    \"Resolve\",\n    \"Restart\",\n    \"Rewrite\",\n    \"Right\",\n    \"Ring\",\n    \"Rings\",\n    \"Save\",\n    \"Scheme\",\n    \"Scope\",\n    \"Scopes\",\n    \"Script\",\n    \"Search\",\n    \"SearchAbout\",\n    \"SearchHead\",\n    \"SearchPattern\",\n    \"SearchRewrite\",\n    \"Section\",\n    \"Separate\",\n    \"Set\",\n    \"Setoid\",\n    \"Show\",\n    \"Solve\",\n    \"Sorted\",\n    \"Step\",\n    \"Strategies\",\n    \"Strategy\",\n    \"Structure\",\n    \"SubClass\",\n    \"Table\",\n    \"Tables\",\n    \"Tactic\",\n    \"Term\",\n    \"Test\",\n    \"Theorem\",\n    \"Time\",\n    \"Timeout\",\n    \"Transparent\",\n    \"Type\",\n    \"Typeclasses\",\n    \"Types\",\n    \"Undelimit\",\n    \"Undo\",\n    \"Unfocus\",\n    \"Unfocused\",\n    \"Unfold\",\n    \"Universe\",\n    \"Universes\",\n    \"Unset\",\n    \"Unshelve\",\n    \"using\",\n    \"Variable\",\n    \"Variables\",\n    \"Variant\",\n    \"Verbose\",\n    \"Visibility\",\n    \"where\",\n    \"with\"\n  ];\n  const BUILT_INS = [\n    \"abstract\",\n    \"absurd\",\n    \"admit\",\n    \"after\",\n    \"apply\",\n    \"as\",\n    \"assert\",\n    \"assumption\",\n    \"at\",\n    \"auto\",\n    \"autorewrite\",\n    \"autounfold\",\n    \"before\",\n    \"bottom\",\n    \"btauto\",\n    \"by\",\n    \"case\",\n    \"case_eq\",\n    \"cbn\",\n    \"cbv\",\n    \"change\",\n    \"classical_left\",\n    \"classical_right\",\n    \"clear\",\n    \"clearbody\",\n    \"cofix\",\n    \"compare\",\n    \"compute\",\n    \"congruence\",\n    \"constr_eq\",\n    \"constructor\",\n    \"contradict\",\n    \"contradiction\",\n    \"cut\",\n    \"cutrewrite\",\n    \"cycle\",\n    \"decide\",\n    \"decompose\",\n    \"dependent\",\n    \"destruct\",\n    \"destruction\",\n    \"dintuition\",\n    \"discriminate\",\n    \"discrR\",\n    \"do\",\n    \"double\",\n    \"dtauto\",\n    \"eapply\",\n    \"eassumption\",\n    \"eauto\",\n    \"ecase\",\n    \"econstructor\",\n    \"edestruct\",\n    \"ediscriminate\",\n    \"eelim\",\n    \"eexact\",\n    \"eexists\",\n    \"einduction\",\n    \"einjection\",\n    \"eleft\",\n    \"elim\",\n    \"elimtype\",\n    \"enough\",\n    \"equality\",\n    \"erewrite\",\n    \"eright\",\n    \"esimplify_eq\",\n    \"esplit\",\n    \"evar\",\n    \"exact\",\n    \"exactly_once\",\n    \"exfalso\",\n    \"exists\",\n    \"f_equal\",\n    \"fail\",\n    \"field\",\n    \"field_simplify\",\n    \"field_simplify_eq\",\n    \"first\",\n    \"firstorder\",\n    \"fix\",\n    \"fold\",\n    \"fourier\",\n    \"functional\",\n    \"generalize\",\n    \"generalizing\",\n    \"gfail\",\n    \"give_up\",\n    \"has_evar\",\n    \"hnf\",\n    \"idtac\",\n    \"in\",\n    \"induction\",\n    \"injection\",\n    \"instantiate\",\n    \"intro\",\n    \"intro_pattern\",\n    \"intros\",\n    \"intuition\",\n    \"inversion\",\n    \"inversion_clear\",\n    \"is_evar\",\n    \"is_var\",\n    \"lapply\",\n    \"lazy\",\n    \"left\",\n    \"lia\",\n    \"lra\",\n    \"move\",\n    \"native_compute\",\n    \"nia\",\n    \"nsatz\",\n    \"omega\",\n    \"once\",\n    \"pattern\",\n    \"pose\",\n    \"progress\",\n    \"proof\",\n    \"psatz\",\n    \"quote\",\n    \"record\",\n    \"red\",\n    \"refine\",\n    \"reflexivity\",\n    \"remember\",\n    \"rename\",\n    \"repeat\",\n    \"replace\",\n    \"revert\",\n    \"revgoals\",\n    \"rewrite\",\n    \"rewrite_strat\",\n    \"right\",\n    \"ring\",\n    \"ring_simplify\",\n    \"rtauto\",\n    \"set\",\n    \"setoid_reflexivity\",\n    \"setoid_replace\",\n    \"setoid_rewrite\",\n    \"setoid_symmetry\",\n    \"setoid_transitivity\",\n    \"shelve\",\n    \"shelve_unifiable\",\n    \"simpl\",\n    \"simple\",\n    \"simplify_eq\",\n    \"solve\",\n    \"specialize\",\n    \"split\",\n    \"split_Rabs\",\n    \"split_Rmult\",\n    \"stepl\",\n    \"stepr\",\n    \"subst\",\n    \"sum\",\n    \"swap\",\n    \"symmetry\",\n    \"tactic\",\n    \"tauto\",\n    \"time\",\n    \"timeout\",\n    \"top\",\n    \"transitivity\",\n    \"trivial\",\n    \"try\",\n    \"tryif\",\n    \"unfold\",\n    \"unify\",\n    \"until\",\n    \"using\",\n    \"vm_compute\",\n    \"with\"\n  ];\n  return {\n    name: 'Coq',\n    keywords: {\n      keyword: KEYWORDS,\n      built_in: BUILT_INS\n    },\n    contains: [\n      hljs.QUOTE_STRING_MODE,\n      hljs.COMMENT('\\\\(\\\\*', '\\\\*\\\\)'),\n      hljs.C_NUMBER_MODE,\n      {\n        className: 'type',\n        excludeBegin: true,\n        begin: '\\\\|\\\\s*',\n        end: '\\\\w+'\n      },\n      { // relevance booster\n        begin: /[-=]>/ }\n    ]\n  };\n}\n\nmodule.exports = coq;\n","/*\nLanguage: Caché Object Script\nAuthor: Nikita Savchenko <zitros.lab@gmail.com>\nCategory: enterprise, scripting\nWebsite: https://cedocs.intersystems.com/latest/csp/docbook/DocBook.UI.Page.cls\n*/\n\n/** @type LanguageFn */\nfunction cos(hljs) {\n  const STRINGS = {\n    className: 'string',\n    variants: [\n      {\n        begin: '\"',\n        end: '\"',\n        contains: [\n          { // escaped\n            begin: \"\\\"\\\"\",\n            relevance: 0\n          }\n        ]\n      }\n    ]\n  };\n\n  const NUMBERS = {\n    className: \"number\",\n    begin: \"\\\\b(\\\\d+(\\\\.\\\\d*)?|\\\\.\\\\d+)\",\n    relevance: 0\n  };\n\n  const COS_KEYWORDS =\n    'property parameter class classmethod clientmethod extends as break '\n    + 'catch close continue do d|0 else elseif for goto halt hang h|0 if job '\n    + 'j|0 kill k|0 lock l|0 merge new open quit q|0 read r|0 return set s|0 '\n    + 'tcommit throw trollback try tstart use view while write w|0 xecute x|0 '\n    + 'zkill znspace zn ztrap zwrite zw zzdump zzwrite print zbreak zinsert '\n    + 'zload zprint zremove zsave zzprint mv mvcall mvcrt mvdim mvprint zquit '\n    + 'zsync ascii';\n\n  // registered function - no need in them due to all functions are highlighted,\n  // but I'll just leave this here.\n\n  // \"$bit\", \"$bitcount\",\n  // \"$bitfind\", \"$bitlogic\", \"$case\", \"$char\", \"$classmethod\", \"$classname\",\n  // \"$compile\", \"$data\", \"$decimal\", \"$double\", \"$extract\", \"$factor\",\n  // \"$find\", \"$fnumber\", \"$get\", \"$increment\", \"$inumber\", \"$isobject\",\n  // \"$isvaliddouble\", \"$isvalidnum\", \"$justify\", \"$length\", \"$list\",\n  // \"$listbuild\", \"$listdata\", \"$listfind\", \"$listfromstring\", \"$listget\",\n  // \"$listlength\", \"$listnext\", \"$listsame\", \"$listtostring\", \"$listvalid\",\n  // \"$locate\", \"$match\", \"$method\", \"$name\", \"$nconvert\", \"$next\",\n  // \"$normalize\", \"$now\", \"$number\", \"$order\", \"$parameter\", \"$piece\",\n  // \"$prefetchoff\", \"$prefetchon\", \"$property\", \"$qlength\", \"$qsubscript\",\n  // \"$query\", \"$random\", \"$replace\", \"$reverse\", \"$sconvert\", \"$select\",\n  // \"$sortbegin\", \"$sortend\", \"$stack\", \"$text\", \"$translate\", \"$view\",\n  // \"$wascii\", \"$wchar\", \"$wextract\", \"$wfind\", \"$wiswide\", \"$wlength\",\n  // \"$wreverse\", \"$xecute\", \"$zabs\", \"$zarccos\", \"$zarcsin\", \"$zarctan\",\n  // \"$zcos\", \"$zcot\", \"$zcsc\", \"$zdate\", \"$zdateh\", \"$zdatetime\",\n  // \"$zdatetimeh\", \"$zexp\", \"$zhex\", \"$zln\", \"$zlog\", \"$zpower\", \"$zsec\",\n  // \"$zsin\", \"$zsqr\", \"$ztan\", \"$ztime\", \"$ztimeh\", \"$zboolean\",\n  // \"$zconvert\", \"$zcrc\", \"$zcyc\", \"$zdascii\", \"$zdchar\", \"$zf\",\n  // \"$ziswide\", \"$zlascii\", \"$zlchar\", \"$zname\", \"$zposition\", \"$zqascii\",\n  // \"$zqchar\", \"$zsearch\", \"$zseek\", \"$zstrip\", \"$zwascii\", \"$zwchar\",\n  // \"$zwidth\", \"$zwpack\", \"$zwbpack\", \"$zwunpack\", \"$zwbunpack\", \"$zzenkaku\",\n  // \"$change\", \"$mv\", \"$mvat\", \"$mvfmt\", \"$mvfmts\", \"$mviconv\",\n  // \"$mviconvs\", \"$mvinmat\", \"$mvlover\", \"$mvoconv\", \"$mvoconvs\", \"$mvraise\",\n  // \"$mvtrans\", \"$mvv\", \"$mvname\", \"$zbitand\", \"$zbitcount\", \"$zbitfind\",\n  // \"$zbitget\", \"$zbitlen\", \"$zbitnot\", \"$zbitor\", \"$zbitset\", \"$zbitstr\",\n  // \"$zbitxor\", \"$zincrement\", \"$znext\", \"$zorder\", \"$zprevious\", \"$zsort\",\n  // \"device\", \"$ecode\", \"$estack\", \"$etrap\", \"$halt\", \"$horolog\",\n  // \"$io\", \"$job\", \"$key\", \"$namespace\", \"$principal\", \"$quit\", \"$roles\",\n  // \"$storage\", \"$system\", \"$test\", \"$this\", \"$tlevel\", \"$username\",\n  // \"$x\", \"$y\", \"$za\", \"$zb\", \"$zchild\", \"$zeof\", \"$zeos\", \"$zerror\",\n  // \"$zhorolog\", \"$zio\", \"$zjob\", \"$zmode\", \"$znspace\", \"$zparent\", \"$zpi\",\n  // \"$zpos\", \"$zreference\", \"$zstorage\", \"$ztimestamp\", \"$ztimezone\",\n  // \"$ztrap\", \"$zversion\"\n\n  return {\n    name: 'Caché Object Script',\n    case_insensitive: true,\n    aliases: [ \"cls\" ],\n    keywords: COS_KEYWORDS,\n    contains: [\n      NUMBERS,\n      STRINGS,\n      hljs.C_LINE_COMMENT_MODE,\n      hljs.C_BLOCK_COMMENT_MODE,\n      {\n        className: \"comment\",\n        begin: /;/,\n        end: \"$\",\n        relevance: 0\n      },\n      { // Functions and user-defined functions: write $ztime(60*60*3), $$myFunc(10), $$^Val(1)\n        className: \"built_in\",\n        begin: /(?:\\$\\$?|\\.\\.)\\^?[a-zA-Z]+/\n      },\n      { // Macro command: quit $$$OK\n        className: \"built_in\",\n        begin: /\\$\\$\\$[a-zA-Z]+/\n      },\n      { // Special (global) variables: write %request.Content; Built-in classes: %Library.Integer\n        className: \"built_in\",\n        begin: /%[a-z]+(?:\\.[a-z]+)*/\n      },\n      { // Global variable: set ^globalName = 12 write ^globalName\n        className: \"symbol\",\n        begin: /\\^%?[a-zA-Z][\\w]*/\n      },\n      { // Some control constructions: do ##class(Package.ClassName).Method(), ##super()\n        className: \"keyword\",\n        begin: /##class|##super|#define|#dim/\n      },\n      // sub-languages: are not fully supported by hljs by 11/15/2015\n      // left for the future implementation.\n      {\n        begin: /&sql\\(/,\n        end: /\\)/,\n        excludeBegin: true,\n        excludeEnd: true,\n        subLanguage: \"sql\"\n      },\n      {\n        begin: /&(js|jscript|javascript)</,\n        end: />/,\n        excludeBegin: true,\n        excludeEnd: true,\n        subLanguage: \"javascript\"\n      },\n      {\n        // this brakes first and last tag, but this is the only way to embed a valid html\n        begin: /&html<\\s*</,\n        end: />\\s*>/,\n        subLanguage: \"xml\"\n      }\n    ]\n  };\n}\n\nmodule.exports = cos;\n","/*\nLanguage: C++\nCategory: common, system\nWebsite: https://isocpp.org\n*/\n\n/** @type LanguageFn */\nfunction cpp(hljs) {\n  const regex = hljs.regex;\n  // added for historic reasons because `hljs.C_LINE_COMMENT_MODE` does\n  // not include such support nor can we be sure all the grammars depending\n  // on it would desire this behavior\n  const C_LINE_COMMENT_MODE = hljs.COMMENT('//', '$', { contains: [ { begin: /\\\\\\n/ } ] });\n  const DECLTYPE_AUTO_RE = 'decltype\\\\(auto\\\\)';\n  const NAMESPACE_RE = '[a-zA-Z_]\\\\w*::';\n  const TEMPLATE_ARGUMENT_RE = '<[^<>]+>';\n  const FUNCTION_TYPE_RE = '(?!struct)('\n    + DECLTYPE_AUTO_RE + '|'\n    + regex.optional(NAMESPACE_RE)\n    + '[a-zA-Z_]\\\\w*' + regex.optional(TEMPLATE_ARGUMENT_RE)\n  + ')';\n\n  const CPP_PRIMITIVE_TYPES = {\n    className: 'type',\n    begin: '\\\\b[a-z\\\\d_]*_t\\\\b'\n  };\n\n  // https://en.cppreference.com/w/cpp/language/escape\n  // \\\\ \\x \\xFF \\u2837 \\u00323747 \\374\n  const CHARACTER_ESCAPES = '\\\\\\\\(x[0-9A-Fa-f]{2}|u[0-9A-Fa-f]{4,8}|[0-7]{3}|\\\\S)';\n  const STRINGS = {\n    className: 'string',\n    variants: [\n      {\n        begin: '(u8?|U|L)?\"',\n        end: '\"',\n        illegal: '\\\\n',\n        contains: [ hljs.BACKSLASH_ESCAPE ]\n      },\n      {\n        begin: '(u8?|U|L)?\\'(' + CHARACTER_ESCAPES + '|.)',\n        end: '\\'',\n        illegal: '.'\n      },\n      hljs.END_SAME_AS_BEGIN({\n        begin: /(?:u8?|U|L)?R\"([^()\\\\ ]{0,16})\\(/,\n        end: /\\)([^()\\\\ ]{0,16})\"/\n      })\n    ]\n  };\n\n  const NUMBERS = {\n    className: 'number',\n    variants: [\n      // Floating-point literal.\n      { begin:\n        \"[+-]?(?:\" // Leading sign.\n          // Decimal.\n          + \"(?:\"\n            +\"[0-9](?:'?[0-9])*\\\\.(?:[0-9](?:'?[0-9])*)?\"\n            + \"|\\\\.[0-9](?:'?[0-9])*\"\n          + \")(?:[Ee][+-]?[0-9](?:'?[0-9])*)?\"\n          + \"|[0-9](?:'?[0-9])*[Ee][+-]?[0-9](?:'?[0-9])*\"\n          // Hexadecimal.\n          + \"|0[Xx](?:\"\n            +\"[0-9A-Fa-f](?:'?[0-9A-Fa-f])*(?:\\\\.(?:[0-9A-Fa-f](?:'?[0-9A-Fa-f])*)?)?\"\n            + \"|\\\\.[0-9A-Fa-f](?:'?[0-9A-Fa-f])*\"\n          + \")[Pp][+-]?[0-9](?:'?[0-9])*\"\n        + \")(?:\" // Literal suffixes.\n          + \"[Ff](?:16|32|64|128)?\"\n          + \"|(BF|bf)16\"\n          + \"|[Ll]\"\n          + \"|\" // Literal suffix is optional.\n        + \")\"\n      },\n      // Integer literal.\n      { begin:\n        \"[+-]?\\\\b(?:\" // Leading sign.\n          + \"0[Bb][01](?:'?[01])*\" // Binary.\n          + \"|0[Xx][0-9A-Fa-f](?:'?[0-9A-Fa-f])*\" // Hexadecimal.\n          + \"|0(?:'?[0-7])*\" // Octal or just a lone zero.\n          + \"|[1-9](?:'?[0-9])*\" // Decimal.\n        + \")(?:\" // Literal suffixes.\n          + \"[Uu](?:LL?|ll?)\"\n          + \"|[Uu][Zz]?\"\n          + \"|(?:LL?|ll?)[Uu]?\"\n          + \"|[Zz][Uu]\"\n          + \"|\" // Literal suffix is optional.\n        + \")\"\n        // Note: there are user-defined literal suffixes too, but perhaps having the custom suffix not part of the\n        // literal highlight actually makes it stand out more.\n      }\n    ],\n    relevance: 0\n  };\n\n  const PREPROCESSOR = {\n    className: 'meta',\n    begin: /#\\s*[a-z]+\\b/,\n    end: /$/,\n    keywords: { keyword:\n        'if else elif endif define undef warning error line '\n        + 'pragma _Pragma ifdef ifndef include' },\n    contains: [\n      {\n        begin: /\\\\\\n/,\n        relevance: 0\n      },\n      hljs.inherit(STRINGS, { className: 'string' }),\n      {\n        className: 'string',\n        begin: /<.*?>/\n      },\n      C_LINE_COMMENT_MODE,\n      hljs.C_BLOCK_COMMENT_MODE\n    ]\n  };\n\n  const TITLE_MODE = {\n    className: 'title',\n    begin: regex.optional(NAMESPACE_RE) + hljs.IDENT_RE,\n    relevance: 0\n  };\n\n  const FUNCTION_TITLE = regex.optional(NAMESPACE_RE) + hljs.IDENT_RE + '\\\\s*\\\\(';\n\n  // https://en.cppreference.com/w/cpp/keyword\n  const RESERVED_KEYWORDS = [\n    'alignas',\n    'alignof',\n    'and',\n    'and_eq',\n    'asm',\n    'atomic_cancel',\n    'atomic_commit',\n    'atomic_noexcept',\n    'auto',\n    'bitand',\n    'bitor',\n    'break',\n    'case',\n    'catch',\n    'class',\n    'co_await',\n    'co_return',\n    'co_yield',\n    'compl',\n    'concept',\n    'const_cast|10',\n    'consteval',\n    'constexpr',\n    'constinit',\n    'continue',\n    'decltype',\n    'default',\n    'delete',\n    'do',\n    'dynamic_cast|10',\n    'else',\n    'enum',\n    'explicit',\n    'export',\n    'extern',\n    'false',\n    'final',\n    'for',\n    'friend',\n    'goto',\n    'if',\n    'import',\n    'inline',\n    'module',\n    'mutable',\n    'namespace',\n    'new',\n    'noexcept',\n    'not',\n    'not_eq',\n    'nullptr',\n    'operator',\n    'or',\n    'or_eq',\n    'override',\n    'private',\n    'protected',\n    'public',\n    'reflexpr',\n    'register',\n    'reinterpret_cast|10',\n    'requires',\n    'return',\n    'sizeof',\n    'static_assert',\n    'static_cast|10',\n    'struct',\n    'switch',\n    'synchronized',\n    'template',\n    'this',\n    'thread_local',\n    'throw',\n    'transaction_safe',\n    'transaction_safe_dynamic',\n    'true',\n    'try',\n    'typedef',\n    'typeid',\n    'typename',\n    'union',\n    'using',\n    'virtual',\n    'volatile',\n    'while',\n    'xor',\n    'xor_eq'\n  ];\n\n  // https://en.cppreference.com/w/cpp/keyword\n  const RESERVED_TYPES = [\n    'bool',\n    'char',\n    'char16_t',\n    'char32_t',\n    'char8_t',\n    'double',\n    'float',\n    'int',\n    'long',\n    'short',\n    'void',\n    'wchar_t',\n    'unsigned',\n    'signed',\n    'const',\n    'static'\n  ];\n\n  const TYPE_HINTS = [\n    'any',\n    'auto_ptr',\n    'barrier',\n    'binary_semaphore',\n    'bitset',\n    'complex',\n    'condition_variable',\n    'condition_variable_any',\n    'counting_semaphore',\n    'deque',\n    'false_type',\n    'flat_map',\n    'flat_set',\n    'future',\n    'imaginary',\n    'initializer_list',\n    'istringstream',\n    'jthread',\n    'latch',\n    'lock_guard',\n    'multimap',\n    'multiset',\n    'mutex',\n    'optional',\n    'ostringstream',\n    'packaged_task',\n    'pair',\n    'promise',\n    'priority_queue',\n    'queue',\n    'recursive_mutex',\n    'recursive_timed_mutex',\n    'scoped_lock',\n    'set',\n    'shared_future',\n    'shared_lock',\n    'shared_mutex',\n    'shared_timed_mutex',\n    'shared_ptr',\n    'stack',\n    'string_view',\n    'stringstream',\n    'timed_mutex',\n    'thread',\n    'true_type',\n    'tuple',\n    'unique_lock',\n    'unique_ptr',\n    'unordered_map',\n    'unordered_multimap',\n    'unordered_multiset',\n    'unordered_set',\n    'variant',\n    'vector',\n    'weak_ptr',\n    'wstring',\n    'wstring_view'\n  ];\n\n  const FUNCTION_HINTS = [\n    'abort',\n    'abs',\n    'acos',\n    'apply',\n    'as_const',\n    'asin',\n    'atan',\n    'atan2',\n    'calloc',\n    'ceil',\n    'cerr',\n    'cin',\n    'clog',\n    'cos',\n    'cosh',\n    'cout',\n    'declval',\n    'endl',\n    'exchange',\n    'exit',\n    'exp',\n    'fabs',\n    'floor',\n    'fmod',\n    'forward',\n    'fprintf',\n    'fputs',\n    'free',\n    'frexp',\n    'fscanf',\n    'future',\n    'invoke',\n    'isalnum',\n    'isalpha',\n    'iscntrl',\n    'isdigit',\n    'isgraph',\n    'islower',\n    'isprint',\n    'ispunct',\n    'isspace',\n    'isupper',\n    'isxdigit',\n    'labs',\n    'launder',\n    'ldexp',\n    'log',\n    'log10',\n    'make_pair',\n    'make_shared',\n    'make_shared_for_overwrite',\n    'make_tuple',\n    'make_unique',\n    'malloc',\n    'memchr',\n    'memcmp',\n    'memcpy',\n    'memset',\n    'modf',\n    'move',\n    'pow',\n    'printf',\n    'putchar',\n    'puts',\n    'realloc',\n    'scanf',\n    'sin',\n    'sinh',\n    'snprintf',\n    'sprintf',\n    'sqrt',\n    'sscanf',\n    'std',\n    'stderr',\n    'stdin',\n    'stdout',\n    'strcat',\n    'strchr',\n    'strcmp',\n    'strcpy',\n    'strcspn',\n    'strlen',\n    'strncat',\n    'strncmp',\n    'strncpy',\n    'strpbrk',\n    'strrchr',\n    'strspn',\n    'strstr',\n    'swap',\n    'tan',\n    'tanh',\n    'terminate',\n    'to_underlying',\n    'tolower',\n    'toupper',\n    'vfprintf',\n    'visit',\n    'vprintf',\n    'vsprintf'\n  ];\n\n  const LITERALS = [\n    'NULL',\n    'false',\n    'nullopt',\n    'nullptr',\n    'true'\n  ];\n\n  // https://en.cppreference.com/w/cpp/keyword\n  const BUILT_IN = [ '_Pragma' ];\n\n  const CPP_KEYWORDS = {\n    type: RESERVED_TYPES,\n    keyword: RESERVED_KEYWORDS,\n    literal: LITERALS,\n    built_in: BUILT_IN,\n    _type_hints: TYPE_HINTS\n  };\n\n  const FUNCTION_DISPATCH = {\n    className: 'function.dispatch',\n    relevance: 0,\n    keywords: {\n      // Only for relevance, not highlighting.\n      _hint: FUNCTION_HINTS },\n    begin: regex.concat(\n      /\\b/,\n      /(?!decltype)/,\n      /(?!if)/,\n      /(?!for)/,\n      /(?!switch)/,\n      /(?!while)/,\n      hljs.IDENT_RE,\n      regex.lookahead(/(<[^<>]+>|)\\s*\\(/))\n  };\n\n  const EXPRESSION_CONTAINS = [\n    FUNCTION_DISPATCH,\n    PREPROCESSOR,\n    CPP_PRIMITIVE_TYPES,\n    C_LINE_COMMENT_MODE,\n    hljs.C_BLOCK_COMMENT_MODE,\n    NUMBERS,\n    STRINGS\n  ];\n\n  const EXPRESSION_CONTEXT = {\n    // This mode covers expression context where we can't expect a function\n    // definition and shouldn't highlight anything that looks like one:\n    // `return some()`, `else if()`, `(x*sum(1, 2))`\n    variants: [\n      {\n        begin: /=/,\n        end: /;/\n      },\n      {\n        begin: /\\(/,\n        end: /\\)/\n      },\n      {\n        beginKeywords: 'new throw return else',\n        end: /;/\n      }\n    ],\n    keywords: CPP_KEYWORDS,\n    contains: EXPRESSION_CONTAINS.concat([\n      {\n        begin: /\\(/,\n        end: /\\)/,\n        keywords: CPP_KEYWORDS,\n        contains: EXPRESSION_CONTAINS.concat([ 'self' ]),\n        relevance: 0\n      }\n    ]),\n    relevance: 0\n  };\n\n  const FUNCTION_DECLARATION = {\n    className: 'function',\n    begin: '(' + FUNCTION_TYPE_RE + '[\\\\*&\\\\s]+)+' + FUNCTION_TITLE,\n    returnBegin: true,\n    end: /[{;=]/,\n    excludeEnd: true,\n    keywords: CPP_KEYWORDS,\n    illegal: /[^\\w\\s\\*&:<>.]/,\n    contains: [\n      { // to prevent it from being confused as the function title\n        begin: DECLTYPE_AUTO_RE,\n        keywords: CPP_KEYWORDS,\n        relevance: 0\n      },\n      {\n        begin: FUNCTION_TITLE,\n        returnBegin: true,\n        contains: [ TITLE_MODE ],\n        relevance: 0\n      },\n      // needed because we do not have look-behind on the below rule\n      // to prevent it from grabbing the final : in a :: pair\n      {\n        begin: /::/,\n        relevance: 0\n      },\n      // initializers\n      {\n        begin: /:/,\n        endsWithParent: true,\n        contains: [\n          STRINGS,\n          NUMBERS\n        ]\n      },\n      // allow for multiple declarations, e.g.:\n      // extern void f(int), g(char);\n      {\n        relevance: 0,\n        match: /,/\n      },\n      {\n        className: 'params',\n        begin: /\\(/,\n        end: /\\)/,\n        keywords: CPP_KEYWORDS,\n        relevance: 0,\n        contains: [\n          C_LINE_COMMENT_MODE,\n          hljs.C_BLOCK_COMMENT_MODE,\n          STRINGS,\n          NUMBERS,\n          CPP_PRIMITIVE_TYPES,\n          // Count matching parentheses.\n          {\n            begin: /\\(/,\n            end: /\\)/,\n            keywords: CPP_KEYWORDS,\n            relevance: 0,\n            contains: [\n              'self',\n              C_LINE_COMMENT_MODE,\n              hljs.C_BLOCK_COMMENT_MODE,\n              STRINGS,\n              NUMBERS,\n              CPP_PRIMITIVE_TYPES\n            ]\n          }\n        ]\n      },\n      CPP_PRIMITIVE_TYPES,\n      C_LINE_COMMENT_MODE,\n      hljs.C_BLOCK_COMMENT_MODE,\n      PREPROCESSOR\n    ]\n  };\n\n  return {\n    name: 'C++',\n    aliases: [\n      'cc',\n      'c++',\n      'h++',\n      'hpp',\n      'hh',\n      'hxx',\n      'cxx'\n    ],\n    keywords: CPP_KEYWORDS,\n    illegal: '</',\n    classNameAliases: { 'function.dispatch': 'built_in' },\n    contains: [].concat(\n      EXPRESSION_CONTEXT,\n      FUNCTION_DECLARATION,\n      FUNCTION_DISPATCH,\n      EXPRESSION_CONTAINS,\n      [\n        PREPROCESSOR,\n        { // containers: ie, `vector <int> rooms (9);`\n          begin: '\\\\b(deque|list|queue|priority_queue|pair|stack|vector|map|set|bitset|multiset|multimap|unordered_map|unordered_set|unordered_multiset|unordered_multimap|array|tuple|optional|variant|function|flat_map|flat_set)\\\\s*<(?!<)',\n          end: '>',\n          keywords: CPP_KEYWORDS,\n          contains: [\n            'self',\n            CPP_PRIMITIVE_TYPES\n          ]\n        },\n        {\n          begin: hljs.IDENT_RE + '::',\n          keywords: CPP_KEYWORDS\n        },\n        {\n          match: [\n            // extra complexity to deal with `enum class` and `enum struct`\n            /\\b(?:enum(?:\\s+(?:class|struct))?|class|struct|union)/,\n            /\\s+/,\n            /\\w+/\n          ],\n          className: {\n            1: 'keyword',\n            3: 'title.class'\n          }\n        }\n      ])\n  };\n}\n\nmodule.exports = cpp;\n","/*\nLanguage: crmsh\nAuthor: Kristoffer Gronlund <kgronlund@suse.com>\nWebsite: http://crmsh.github.io\nDescription: Syntax Highlighting for the crmsh DSL\nCategory: config\n*/\n\n/** @type LanguageFn */\nfunction crmsh(hljs) {\n  const RESOURCES = 'primitive rsc_template';\n  const COMMANDS = 'group clone ms master location colocation order fencing_topology '\n      + 'rsc_ticket acl_target acl_group user role '\n      + 'tag xml';\n  const PROPERTY_SETS = 'property rsc_defaults op_defaults';\n  const KEYWORDS = 'params meta operations op rule attributes utilization';\n  const OPERATORS = 'read write deny defined not_defined in_range date spec in '\n      + 'ref reference attribute type xpath version and or lt gt tag '\n      + 'lte gte eq ne \\\\';\n  const TYPES = 'number string';\n  const LITERALS = 'Master Started Slave Stopped start promote demote stop monitor true false';\n\n  return {\n    name: 'crmsh',\n    aliases: [\n      'crm',\n      'pcmk'\n    ],\n    case_insensitive: true,\n    keywords: {\n      keyword: KEYWORDS + ' ' + OPERATORS + ' ' + TYPES,\n      literal: LITERALS\n    },\n    contains: [\n      hljs.HASH_COMMENT_MODE,\n      {\n        beginKeywords: 'node',\n        starts: {\n          end: '\\\\s*([\\\\w_-]+:)?',\n          starts: {\n            className: 'title',\n            end: '\\\\s*[\\\\$\\\\w_][\\\\w_-]*'\n          }\n        }\n      },\n      {\n        beginKeywords: RESOURCES,\n        starts: {\n          className: 'title',\n          end: '\\\\s*[\\\\$\\\\w_][\\\\w_-]*',\n          starts: { end: '\\\\s*@?[\\\\w_][\\\\w_\\\\.:-]*' }\n        }\n      },\n      {\n        begin: '\\\\b(' + COMMANDS.split(' ').join('|') + ')\\\\s+',\n        keywords: COMMANDS,\n        starts: {\n          className: 'title',\n          end: '[\\\\$\\\\w_][\\\\w_-]*'\n        }\n      },\n      {\n        beginKeywords: PROPERTY_SETS,\n        starts: {\n          className: 'title',\n          end: '\\\\s*([\\\\w_-]+:)?'\n        }\n      },\n      hljs.QUOTE_STRING_MODE,\n      {\n        className: 'meta',\n        begin: '(ocf|systemd|service|lsb):[\\\\w_:-]+',\n        relevance: 0\n      },\n      {\n        className: 'number',\n        begin: '\\\\b\\\\d+(\\\\.\\\\d+)?(ms|s|h|m)?',\n        relevance: 0\n      },\n      {\n        className: 'literal',\n        begin: '[-]?(infinity|inf)',\n        relevance: 0\n      },\n      {\n        className: 'attr',\n        begin: /([A-Za-z$_#][\\w_-]+)=/,\n        relevance: 0\n      },\n      {\n        className: 'tag',\n        begin: '</?',\n        end: '/?>',\n        relevance: 0\n      }\n    ]\n  };\n}\n\nmodule.exports = crmsh;\n","/*\nLanguage: Crystal\nAuthor: TSUYUSATO Kitsune <make.just.on@gmail.com>\nWebsite: https://crystal-lang.org\nCategory: system\n*/\n\n/** @type LanguageFn */\nfunction crystal(hljs) {\n  const INT_SUFFIX = '(_?[ui](8|16|32|64|128))?';\n  const FLOAT_SUFFIX = '(_?f(32|64))?';\n  const CRYSTAL_IDENT_RE = '[a-zA-Z_]\\\\w*[!?=]?';\n  const CRYSTAL_METHOD_RE = '[a-zA-Z_]\\\\w*[!?=]?|[-+~]@|<<|>>|[=!]~|===?|<=>|[<>]=?|\\\\*\\\\*|[-/+%^&*~|]|//|//=|&[-+*]=?|&\\\\*\\\\*|\\\\[\\\\][=?]?';\n  const CRYSTAL_PATH_RE = '[A-Za-z_]\\\\w*(::\\\\w+)*(\\\\?|!)?';\n  const CRYSTAL_KEYWORDS = {\n    $pattern: CRYSTAL_IDENT_RE,\n    keyword:\n      'abstract alias annotation as as? asm begin break case class def do else elsif end ensure enum extend for fun if '\n      + 'include instance_sizeof is_a? lib macro module next nil? of out pointerof private protected rescue responds_to? '\n      + 'return require select self sizeof struct super then type typeof union uninitialized unless until verbatim when while with yield '\n      + '__DIR__ __END_LINE__ __FILE__ __LINE__',\n    literal: 'false nil true'\n  };\n  const SUBST = {\n    className: 'subst',\n    begin: /#\\{/,\n    end: /\\}/,\n    keywords: CRYSTAL_KEYWORDS\n  };\n  // borrowed from Ruby\n  const VARIABLE = {\n    // negative-look forward attemps to prevent false matches like:\n    // @ident@ or $ident$ that might indicate this is not ruby at all\n    className: \"variable\",\n    begin: '(\\\\$\\\\W)|((\\\\$|@@?)(\\\\w+))(?=[^@$?])' + `(?![A-Za-z])(?![@$?'])`\n  };\n  const EXPANSION = {\n    className: 'template-variable',\n    variants: [\n      {\n        begin: '\\\\{\\\\{',\n        end: '\\\\}\\\\}'\n      },\n      {\n        begin: '\\\\{%',\n        end: '%\\\\}'\n      }\n    ],\n    keywords: CRYSTAL_KEYWORDS\n  };\n\n  function recursiveParen(begin, end) {\n    const\n        contains = [\n          {\n            begin: begin,\n            end: end\n          }\n        ];\n    contains[0].contains = contains;\n    return contains;\n  }\n  const STRING = {\n    className: 'string',\n    contains: [\n      hljs.BACKSLASH_ESCAPE,\n      SUBST\n    ],\n    variants: [\n      {\n        begin: /'/,\n        end: /'/\n      },\n      {\n        begin: /\"/,\n        end: /\"/\n      },\n      {\n        begin: /`/,\n        end: /`/\n      },\n      {\n        begin: '%[Qwi]?\\\\(',\n        end: '\\\\)',\n        contains: recursiveParen('\\\\(', '\\\\)')\n      },\n      {\n        begin: '%[Qwi]?\\\\[',\n        end: '\\\\]',\n        contains: recursiveParen('\\\\[', '\\\\]')\n      },\n      {\n        begin: '%[Qwi]?\\\\{',\n        end: /\\}/,\n        contains: recursiveParen(/\\{/, /\\}/)\n      },\n      {\n        begin: '%[Qwi]?<',\n        end: '>',\n        contains: recursiveParen('<', '>')\n      },\n      {\n        begin: '%[Qwi]?\\\\|',\n        end: '\\\\|'\n      },\n      {\n        begin: /<<-\\w+$/,\n        end: /^\\s*\\w+$/\n      }\n    ],\n    relevance: 0\n  };\n  const Q_STRING = {\n    className: 'string',\n    variants: [\n      {\n        begin: '%q\\\\(',\n        end: '\\\\)',\n        contains: recursiveParen('\\\\(', '\\\\)')\n      },\n      {\n        begin: '%q\\\\[',\n        end: '\\\\]',\n        contains: recursiveParen('\\\\[', '\\\\]')\n      },\n      {\n        begin: '%q\\\\{',\n        end: /\\}/,\n        contains: recursiveParen(/\\{/, /\\}/)\n      },\n      {\n        begin: '%q<',\n        end: '>',\n        contains: recursiveParen('<', '>')\n      },\n      {\n        begin: '%q\\\\|',\n        end: '\\\\|'\n      },\n      {\n        begin: /<<-'\\w+'$/,\n        end: /^\\s*\\w+$/\n      }\n    ],\n    relevance: 0\n  };\n  const REGEXP = {\n    begin: '(?!%\\\\})(' + hljs.RE_STARTERS_RE + '|\\\\n|\\\\b(case|if|select|unless|until|when|while)\\\\b)\\\\s*',\n    keywords: 'case if select unless until when while',\n    contains: [\n      {\n        className: 'regexp',\n        contains: [\n          hljs.BACKSLASH_ESCAPE,\n          SUBST\n        ],\n        variants: [\n          {\n            begin: '//[a-z]*',\n            relevance: 0\n          },\n          {\n            begin: '/(?!\\\\/)',\n            end: '/[a-z]*'\n          }\n        ]\n      }\n    ],\n    relevance: 0\n  };\n  const REGEXP2 = {\n    className: 'regexp',\n    contains: [\n      hljs.BACKSLASH_ESCAPE,\n      SUBST\n    ],\n    variants: [\n      {\n        begin: '%r\\\\(',\n        end: '\\\\)',\n        contains: recursiveParen('\\\\(', '\\\\)')\n      },\n      {\n        begin: '%r\\\\[',\n        end: '\\\\]',\n        contains: recursiveParen('\\\\[', '\\\\]')\n      },\n      {\n        begin: '%r\\\\{',\n        end: /\\}/,\n        contains: recursiveParen(/\\{/, /\\}/)\n      },\n      {\n        begin: '%r<',\n        end: '>',\n        contains: recursiveParen('<', '>')\n      },\n      {\n        begin: '%r\\\\|',\n        end: '\\\\|'\n      }\n    ],\n    relevance: 0\n  };\n  const ATTRIBUTE = {\n    className: 'meta',\n    begin: '@\\\\[',\n    end: '\\\\]',\n    contains: [ hljs.inherit(hljs.QUOTE_STRING_MODE, { className: 'string' }) ]\n  };\n  const CRYSTAL_DEFAULT_CONTAINS = [\n    EXPANSION,\n    STRING,\n    Q_STRING,\n    REGEXP2,\n    REGEXP,\n    ATTRIBUTE,\n    VARIABLE,\n    hljs.HASH_COMMENT_MODE,\n    {\n      className: 'class',\n      beginKeywords: 'class module struct',\n      end: '$|;',\n      illegal: /=/,\n      contains: [\n        hljs.HASH_COMMENT_MODE,\n        hljs.inherit(hljs.TITLE_MODE, { begin: CRYSTAL_PATH_RE }),\n        { // relevance booster for inheritance\n          begin: '<' }\n      ]\n    },\n    {\n      className: 'class',\n      beginKeywords: 'lib enum union',\n      end: '$|;',\n      illegal: /=/,\n      contains: [\n        hljs.HASH_COMMENT_MODE,\n        hljs.inherit(hljs.TITLE_MODE, { begin: CRYSTAL_PATH_RE })\n      ]\n    },\n    {\n      beginKeywords: 'annotation',\n      end: '$|;',\n      illegal: /=/,\n      contains: [\n        hljs.HASH_COMMENT_MODE,\n        hljs.inherit(hljs.TITLE_MODE, { begin: CRYSTAL_PATH_RE })\n      ],\n      relevance: 2\n    },\n    {\n      className: 'function',\n      beginKeywords: 'def',\n      end: /\\B\\b/,\n      contains: [\n        hljs.inherit(hljs.TITLE_MODE, {\n          begin: CRYSTAL_METHOD_RE,\n          endsParent: true\n        })\n      ]\n    },\n    {\n      className: 'function',\n      beginKeywords: 'fun macro',\n      end: /\\B\\b/,\n      contains: [\n        hljs.inherit(hljs.TITLE_MODE, {\n          begin: CRYSTAL_METHOD_RE,\n          endsParent: true\n        })\n      ],\n      relevance: 2\n    },\n    {\n      className: 'symbol',\n      begin: hljs.UNDERSCORE_IDENT_RE + '(!|\\\\?)?:',\n      relevance: 0\n    },\n    {\n      className: 'symbol',\n      begin: ':',\n      contains: [\n        STRING,\n        { begin: CRYSTAL_METHOD_RE }\n      ],\n      relevance: 0\n    },\n    {\n      className: 'number',\n      variants: [\n        { begin: '\\\\b0b([01_]+)' + INT_SUFFIX },\n        { begin: '\\\\b0o([0-7_]+)' + INT_SUFFIX },\n        { begin: '\\\\b0x([A-Fa-f0-9_]+)' + INT_SUFFIX },\n        { begin: '\\\\b([1-9][0-9_]*[0-9]|[0-9])(\\\\.[0-9][0-9_]*)?([eE]_?[-+]?[0-9_]*)?' + FLOAT_SUFFIX + '(?!_)' },\n        { begin: '\\\\b([1-9][0-9_]*|0)' + INT_SUFFIX }\n      ],\n      relevance: 0\n    }\n  ];\n  SUBST.contains = CRYSTAL_DEFAULT_CONTAINS;\n  EXPANSION.contains = CRYSTAL_DEFAULT_CONTAINS.slice(1); // without EXPANSION\n\n  return {\n    name: 'Crystal',\n    aliases: [ 'cr' ],\n    keywords: CRYSTAL_KEYWORDS,\n    contains: CRYSTAL_DEFAULT_CONTAINS\n  };\n}\n\nmodule.exports = crystal;\n","/*\nLanguage: C#\nAuthor: Jason Diamond <jason@diamond.name>\nContributor: Nicolas LLOBERA <nllobera@gmail.com>, Pieter Vantorre <pietervantorre@gmail.com>, David Pine <david.pine@microsoft.com>\nWebsite: https://docs.microsoft.com/dotnet/csharp/\nCategory: common\n*/\n\n/** @type LanguageFn */\nfunction csharp(hljs) {\n  const BUILT_IN_KEYWORDS = [\n    'bool',\n    'byte',\n    'char',\n    'decimal',\n    'delegate',\n    'double',\n    'dynamic',\n    'enum',\n    'float',\n    'int',\n    'long',\n    'nint',\n    'nuint',\n    'object',\n    'sbyte',\n    'short',\n    'string',\n    'ulong',\n    'uint',\n    'ushort'\n  ];\n  const FUNCTION_MODIFIERS = [\n    'public',\n    'private',\n    'protected',\n    'static',\n    'internal',\n    'protected',\n    'abstract',\n    'async',\n    'extern',\n    'override',\n    'unsafe',\n    'virtual',\n    'new',\n    'sealed',\n    'partial'\n  ];\n  const LITERAL_KEYWORDS = [\n    'default',\n    'false',\n    'null',\n    'true'\n  ];\n  const NORMAL_KEYWORDS = [\n    'abstract',\n    'as',\n    'base',\n    'break',\n    'case',\n    'catch',\n    'class',\n    'const',\n    'continue',\n    'do',\n    'else',\n    'event',\n    'explicit',\n    'extern',\n    'finally',\n    'fixed',\n    'for',\n    'foreach',\n    'goto',\n    'if',\n    'implicit',\n    'in',\n    'interface',\n    'internal',\n    'is',\n    'lock',\n    'namespace',\n    'new',\n    'operator',\n    'out',\n    'override',\n    'params',\n    'private',\n    'protected',\n    'public',\n    'readonly',\n    'record',\n    'ref',\n    'return',\n    'scoped',\n    'sealed',\n    'sizeof',\n    'stackalloc',\n    'static',\n    'struct',\n    'switch',\n    'this',\n    'throw',\n    'try',\n    'typeof',\n    'unchecked',\n    'unsafe',\n    'using',\n    'virtual',\n    'void',\n    'volatile',\n    'while'\n  ];\n  const CONTEXTUAL_KEYWORDS = [\n    'add',\n    'alias',\n    'and',\n    'ascending',\n    'args',\n    'async',\n    'await',\n    'by',\n    'descending',\n    'dynamic',\n    'equals',\n    'file',\n    'from',\n    'get',\n    'global',\n    'group',\n    'init',\n    'into',\n    'join',\n    'let',\n    'nameof',\n    'not',\n    'notnull',\n    'on',\n    'or',\n    'orderby',\n    'partial',\n    'record',\n    'remove',\n    'required',\n    'scoped',\n    'select',\n    'set',\n    'unmanaged',\n    'value|0',\n    'var',\n    'when',\n    'where',\n    'with',\n    'yield'\n  ];\n\n  const KEYWORDS = {\n    keyword: NORMAL_KEYWORDS.concat(CONTEXTUAL_KEYWORDS),\n    built_in: BUILT_IN_KEYWORDS,\n    literal: LITERAL_KEYWORDS\n  };\n  const TITLE_MODE = hljs.inherit(hljs.TITLE_MODE, { begin: '[a-zA-Z](\\\\.?\\\\w)*' });\n  const NUMBERS = {\n    className: 'number',\n    variants: [\n      { begin: '\\\\b(0b[01\\']+)' },\n      { begin: '(-?)\\\\b([\\\\d\\']+(\\\\.[\\\\d\\']*)?|\\\\.[\\\\d\\']+)(u|U|l|L|ul|UL|f|F|b|B)' },\n      { begin: '(-?)(\\\\b0[xX][a-fA-F0-9\\']+|(\\\\b[\\\\d\\']+(\\\\.[\\\\d\\']*)?|\\\\.[\\\\d\\']+)([eE][-+]?[\\\\d\\']+)?)' }\n    ],\n    relevance: 0\n  };\n  const RAW_STRING = {\n    className: 'string',\n    begin: /\"\"\"(\"*)(?!\")(.|\\n)*?\"\"\"\\1/,\n    relevance: 1\n  };\n  const VERBATIM_STRING = {\n    className: 'string',\n    begin: '@\"',\n    end: '\"',\n    contains: [ { begin: '\"\"' } ]\n  };\n  const VERBATIM_STRING_NO_LF = hljs.inherit(VERBATIM_STRING, { illegal: /\\n/ });\n  const SUBST = {\n    className: 'subst',\n    begin: /\\{/,\n    end: /\\}/,\n    keywords: KEYWORDS\n  };\n  const SUBST_NO_LF = hljs.inherit(SUBST, { illegal: /\\n/ });\n  const INTERPOLATED_STRING = {\n    className: 'string',\n    begin: /\\$\"/,\n    end: '\"',\n    illegal: /\\n/,\n    contains: [\n      { begin: /\\{\\{/ },\n      { begin: /\\}\\}/ },\n      hljs.BACKSLASH_ESCAPE,\n      SUBST_NO_LF\n    ]\n  };\n  const INTERPOLATED_VERBATIM_STRING = {\n    className: 'string',\n    begin: /\\$@\"/,\n    end: '\"',\n    contains: [\n      { begin: /\\{\\{/ },\n      { begin: /\\}\\}/ },\n      { begin: '\"\"' },\n      SUBST\n    ]\n  };\n  const INTERPOLATED_VERBATIM_STRING_NO_LF = hljs.inherit(INTERPOLATED_VERBATIM_STRING, {\n    illegal: /\\n/,\n    contains: [\n      { begin: /\\{\\{/ },\n      { begin: /\\}\\}/ },\n      { begin: '\"\"' },\n      SUBST_NO_LF\n    ]\n  });\n  SUBST.contains = [\n    INTERPOLATED_VERBATIM_STRING,\n    INTERPOLATED_STRING,\n    VERBATIM_STRING,\n    hljs.APOS_STRING_MODE,\n    hljs.QUOTE_STRING_MODE,\n    NUMBERS,\n    hljs.C_BLOCK_COMMENT_MODE\n  ];\n  SUBST_NO_LF.contains = [\n    INTERPOLATED_VERBATIM_STRING_NO_LF,\n    INTERPOLATED_STRING,\n    VERBATIM_STRING_NO_LF,\n    hljs.APOS_STRING_MODE,\n    hljs.QUOTE_STRING_MODE,\n    NUMBERS,\n    hljs.inherit(hljs.C_BLOCK_COMMENT_MODE, { illegal: /\\n/ })\n  ];\n  const STRING = { variants: [\n    RAW_STRING,\n    INTERPOLATED_VERBATIM_STRING,\n    INTERPOLATED_STRING,\n    VERBATIM_STRING,\n    hljs.APOS_STRING_MODE,\n    hljs.QUOTE_STRING_MODE\n  ] };\n\n  const GENERIC_MODIFIER = {\n    begin: \"<\",\n    end: \">\",\n    contains: [\n      { beginKeywords: \"in out\" },\n      TITLE_MODE\n    ]\n  };\n  const TYPE_IDENT_RE = hljs.IDENT_RE + '(<' + hljs.IDENT_RE + '(\\\\s*,\\\\s*' + hljs.IDENT_RE + ')*>)?(\\\\[\\\\])?';\n  const AT_IDENTIFIER = {\n    // prevents expressions like `@class` from incorrect flagging\n    // `class` as a keyword\n    begin: \"@\" + hljs.IDENT_RE,\n    relevance: 0\n  };\n\n  return {\n    name: 'C#',\n    aliases: [\n      'cs',\n      'c#'\n    ],\n    keywords: KEYWORDS,\n    illegal: /::/,\n    contains: [\n      hljs.COMMENT(\n        '///',\n        '$',\n        {\n          returnBegin: true,\n          contains: [\n            {\n              className: 'doctag',\n              variants: [\n                {\n                  begin: '///',\n                  relevance: 0\n                },\n                { begin: '<!--|-->' },\n                {\n                  begin: '</?',\n                  end: '>'\n                }\n              ]\n            }\n          ]\n        }\n      ),\n      hljs.C_LINE_COMMENT_MODE,\n      hljs.C_BLOCK_COMMENT_MODE,\n      {\n        className: 'meta',\n        begin: '#',\n        end: '$',\n        keywords: { keyword: 'if else elif endif define undef warning error line region endregion pragma checksum' }\n      },\n      STRING,\n      NUMBERS,\n      {\n        beginKeywords: 'class interface',\n        relevance: 0,\n        end: /[{;=]/,\n        illegal: /[^\\s:,]/,\n        contains: [\n          { beginKeywords: \"where class\" },\n          TITLE_MODE,\n          GENERIC_MODIFIER,\n          hljs.C_LINE_COMMENT_MODE,\n          hljs.C_BLOCK_COMMENT_MODE\n        ]\n      },\n      {\n        beginKeywords: 'namespace',\n        relevance: 0,\n        end: /[{;=]/,\n        illegal: /[^\\s:]/,\n        contains: [\n          TITLE_MODE,\n          hljs.C_LINE_COMMENT_MODE,\n          hljs.C_BLOCK_COMMENT_MODE\n        ]\n      },\n      {\n        beginKeywords: 'record',\n        relevance: 0,\n        end: /[{;=]/,\n        illegal: /[^\\s:]/,\n        contains: [\n          TITLE_MODE,\n          GENERIC_MODIFIER,\n          hljs.C_LINE_COMMENT_MODE,\n          hljs.C_BLOCK_COMMENT_MODE\n        ]\n      },\n      {\n        // [Attributes(\"\")]\n        className: 'meta',\n        begin: '^\\\\s*\\\\[(?=[\\\\w])',\n        excludeBegin: true,\n        end: '\\\\]',\n        excludeEnd: true,\n        contains: [\n          {\n            className: 'string',\n            begin: /\"/,\n            end: /\"/\n          }\n        ]\n      },\n      {\n        // Expression keywords prevent 'keyword Name(...)' from being\n        // recognized as a function definition\n        beginKeywords: 'new return throw await else',\n        relevance: 0\n      },\n      {\n        className: 'function',\n        begin: '(' + TYPE_IDENT_RE + '\\\\s+)+' + hljs.IDENT_RE + '\\\\s*(<[^=]+>\\\\s*)?\\\\(',\n        returnBegin: true,\n        end: /\\s*[{;=]/,\n        excludeEnd: true,\n        keywords: KEYWORDS,\n        contains: [\n          // prevents these from being highlighted `title`\n          {\n            beginKeywords: FUNCTION_MODIFIERS.join(\" \"),\n            relevance: 0\n          },\n          {\n            begin: hljs.IDENT_RE + '\\\\s*(<[^=]+>\\\\s*)?\\\\(',\n            returnBegin: true,\n            contains: [\n              hljs.TITLE_MODE,\n              GENERIC_MODIFIER\n            ],\n            relevance: 0\n          },\n          { match: /\\(\\)/ },\n          {\n            className: 'params',\n            begin: /\\(/,\n            end: /\\)/,\n            excludeBegin: true,\n            excludeEnd: true,\n            keywords: KEYWORDS,\n            relevance: 0,\n            contains: [\n              STRING,\n              NUMBERS,\n              hljs.C_BLOCK_COMMENT_MODE\n            ]\n          },\n          hljs.C_LINE_COMMENT_MODE,\n          hljs.C_BLOCK_COMMENT_MODE\n        ]\n      },\n      AT_IDENTIFIER\n    ]\n  };\n}\n\nmodule.exports = csharp;\n","/*\nLanguage: CSP\nDescription: Content Security Policy definition highlighting\nAuthor: Taras <oxdef@oxdef.info>\nWebsite: https://developer.mozilla.org/en-US/docs/Web/HTTP/CSP\nCategory: web\n\nvim: ts=2 sw=2 st=2\n*/\n\n/** @type LanguageFn */\nfunction csp(hljs) {\n  const KEYWORDS = [\n    \"base-uri\",\n    \"child-src\",\n    \"connect-src\",\n    \"default-src\",\n    \"font-src\",\n    \"form-action\",\n    \"frame-ancestors\",\n    \"frame-src\",\n    \"img-src\",\n    \"manifest-src\",\n    \"media-src\",\n    \"object-src\",\n    \"plugin-types\",\n    \"report-uri\",\n    \"sandbox\",\n    \"script-src\",\n    \"style-src\",\n    \"trusted-types\",\n    \"unsafe-hashes\",\n    \"worker-src\"\n  ];\n  return {\n    name: 'CSP',\n    case_insensitive: false,\n    keywords: {\n      $pattern: '[a-zA-Z][a-zA-Z0-9_-]*',\n      keyword: KEYWORDS\n    },\n    contains: [\n      {\n        className: 'string',\n        begin: \"'\",\n        end: \"'\"\n      },\n      {\n        className: 'attribute',\n        begin: '^Content',\n        end: ':',\n        excludeEnd: true\n      }\n    ]\n  };\n}\n\nmodule.exports = csp;\n","const MODES = (hljs) => {\n  return {\n    IMPORTANT: {\n      scope: 'meta',\n      begin: '!important'\n    },\n    BLOCK_COMMENT: hljs.C_BLOCK_COMMENT_MODE,\n    HEXCOLOR: {\n      scope: 'number',\n      begin: /#(([0-9a-fA-F]{3,4})|(([0-9a-fA-F]{2}){3,4}))\\b/\n    },\n    FUNCTION_DISPATCH: {\n      className: \"built_in\",\n      begin: /[\\w-]+(?=\\()/\n    },\n    ATTRIBUTE_SELECTOR_MODE: {\n      scope: 'selector-attr',\n      begin: /\\[/,\n      end: /\\]/,\n      illegal: '$',\n      contains: [\n        hljs.APOS_STRING_MODE,\n        hljs.QUOTE_STRING_MODE\n      ]\n    },\n    CSS_NUMBER_MODE: {\n      scope: 'number',\n      begin: hljs.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    },\n    CSS_VARIABLE: {\n      className: \"attr\",\n      begin: /--[A-Za-z_][A-Za-z0-9_-]*/\n    }\n  };\n};\n\nconst HTML_TAGS = [\n  'a',\n  'abbr',\n  'address',\n  'article',\n  'aside',\n  'audio',\n  'b',\n  'blockquote',\n  'body',\n  'button',\n  'canvas',\n  'caption',\n  'cite',\n  'code',\n  'dd',\n  'del',\n  'details',\n  'dfn',\n  'div',\n  'dl',\n  'dt',\n  'em',\n  'fieldset',\n  'figcaption',\n  'figure',\n  'footer',\n  'form',\n  'h1',\n  'h2',\n  'h3',\n  'h4',\n  'h5',\n  'h6',\n  'header',\n  'hgroup',\n  'html',\n  'i',\n  'iframe',\n  'img',\n  'input',\n  'ins',\n  'kbd',\n  'label',\n  'legend',\n  'li',\n  'main',\n  'mark',\n  'menu',\n  'nav',\n  'object',\n  'ol',\n  'optgroup',\n  'option',\n  'p',\n  'picture',\n  'q',\n  'quote',\n  'samp',\n  'section',\n  'select',\n  'source',\n  'span',\n  'strong',\n  'summary',\n  'sup',\n  'table',\n  'tbody',\n  'td',\n  'textarea',\n  'tfoot',\n  'th',\n  'thead',\n  'time',\n  'tr',\n  'ul',\n  'var',\n  'video'\n];\n\nconst SVG_TAGS = [\n  'defs',\n  'g',\n  'marker',\n  'mask',\n  'pattern',\n  'svg',\n  'switch',\n  'symbol',\n  'feBlend',\n  'feColorMatrix',\n  'feComponentTransfer',\n  'feComposite',\n  'feConvolveMatrix',\n  'feDiffuseLighting',\n  'feDisplacementMap',\n  'feFlood',\n  'feGaussianBlur',\n  'feImage',\n  'feMerge',\n  'feMorphology',\n  'feOffset',\n  'feSpecularLighting',\n  'feTile',\n  'feTurbulence',\n  'linearGradient',\n  'radialGradient',\n  'stop',\n  'circle',\n  'ellipse',\n  'image',\n  'line',\n  'path',\n  'polygon',\n  'polyline',\n  'rect',\n  'text',\n  'use',\n  'textPath',\n  'tspan',\n  'foreignObject',\n  'clipPath'\n];\n\nconst TAGS = [\n  ...HTML_TAGS,\n  ...SVG_TAGS,\n];\n\n// Sorting, then reversing makes sure longer attributes/elements like\n// `font-weight` are matched fully instead of getting false positives on say `font`\n\nconst MEDIA_FEATURES = [\n  'any-hover',\n  'any-pointer',\n  'aspect-ratio',\n  'color',\n  'color-gamut',\n  'color-index',\n  'device-aspect-ratio',\n  'device-height',\n  'device-width',\n  'display-mode',\n  'forced-colors',\n  'grid',\n  'height',\n  'hover',\n  'inverted-colors',\n  'monochrome',\n  'orientation',\n  'overflow-block',\n  'overflow-inline',\n  'pointer',\n  'prefers-color-scheme',\n  'prefers-contrast',\n  'prefers-reduced-motion',\n  'prefers-reduced-transparency',\n  'resolution',\n  'scan',\n  'scripting',\n  'update',\n  'width',\n  // TODO: find a better solution?\n  'min-width',\n  'max-width',\n  'min-height',\n  'max-height'\n].sort().reverse();\n\n// https://developer.mozilla.org/en-US/docs/Web/CSS/Pseudo-classes\nconst PSEUDO_CLASSES = [\n  'active',\n  'any-link',\n  'blank',\n  'checked',\n  'current',\n  'default',\n  'defined',\n  'dir', // dir()\n  'disabled',\n  'drop',\n  'empty',\n  'enabled',\n  'first',\n  'first-child',\n  'first-of-type',\n  'fullscreen',\n  'future',\n  'focus',\n  'focus-visible',\n  'focus-within',\n  'has', // has()\n  'host', // host or host()\n  'host-context', // host-context()\n  'hover',\n  'indeterminate',\n  'in-range',\n  'invalid',\n  'is', // is()\n  'lang', // lang()\n  'last-child',\n  'last-of-type',\n  'left',\n  'link',\n  'local-link',\n  'not', // not()\n  'nth-child', // nth-child()\n  'nth-col', // nth-col()\n  'nth-last-child', // nth-last-child()\n  'nth-last-col', // nth-last-col()\n  'nth-last-of-type', //nth-last-of-type()\n  'nth-of-type', //nth-of-type()\n  'only-child',\n  'only-of-type',\n  'optional',\n  'out-of-range',\n  'past',\n  'placeholder-shown',\n  'read-only',\n  'read-write',\n  'required',\n  'right',\n  'root',\n  'scope',\n  'target',\n  'target-within',\n  'user-invalid',\n  'valid',\n  'visited',\n  'where' // where()\n].sort().reverse();\n\n// https://developer.mozilla.org/en-US/docs/Web/CSS/Pseudo-elements\nconst PSEUDO_ELEMENTS = [\n  'after',\n  'backdrop',\n  'before',\n  'cue',\n  'cue-region',\n  'first-letter',\n  'first-line',\n  'grammar-error',\n  'marker',\n  'part',\n  'placeholder',\n  'selection',\n  'slotted',\n  'spelling-error'\n].sort().reverse();\n\nconst ATTRIBUTES = [\n  'accent-color',\n  'align-content',\n  'align-items',\n  'align-self',\n  'alignment-baseline',\n  'all',\n  'anchor-name',\n  'animation',\n  'animation-composition',\n  'animation-delay',\n  'animation-direction',\n  'animation-duration',\n  'animation-fill-mode',\n  'animation-iteration-count',\n  'animation-name',\n  'animation-play-state',\n  'animation-range',\n  'animation-range-end',\n  'animation-range-start',\n  'animation-timeline',\n  'animation-timing-function',\n  'appearance',\n  'aspect-ratio',\n  'backdrop-filter',\n  'backface-visibility',\n  'background',\n  'background-attachment',\n  'background-blend-mode',\n  'background-clip',\n  'background-color',\n  'background-image',\n  'background-origin',\n  'background-position',\n  'background-position-x',\n  'background-position-y',\n  'background-repeat',\n  'background-size',\n  'baseline-shift',\n  'block-size',\n  'border',\n  'border-block',\n  'border-block-color',\n  'border-block-end',\n  'border-block-end-color',\n  'border-block-end-style',\n  'border-block-end-width',\n  'border-block-start',\n  'border-block-start-color',\n  'border-block-start-style',\n  'border-block-start-width',\n  'border-block-style',\n  'border-block-width',\n  'border-bottom',\n  'border-bottom-color',\n  'border-bottom-left-radius',\n  'border-bottom-right-radius',\n  'border-bottom-style',\n  'border-bottom-width',\n  'border-collapse',\n  'border-color',\n  'border-end-end-radius',\n  'border-end-start-radius',\n  'border-image',\n  'border-image-outset',\n  'border-image-repeat',\n  'border-image-slice',\n  'border-image-source',\n  'border-image-width',\n  'border-inline',\n  'border-inline-color',\n  'border-inline-end',\n  'border-inline-end-color',\n  'border-inline-end-style',\n  'border-inline-end-width',\n  'border-inline-start',\n  'border-inline-start-color',\n  'border-inline-start-style',\n  'border-inline-start-width',\n  'border-inline-style',\n  'border-inline-width',\n  'border-left',\n  'border-left-color',\n  'border-left-style',\n  'border-left-width',\n  'border-radius',\n  'border-right',\n  'border-right-color',\n  'border-right-style',\n  'border-right-width',\n  'border-spacing',\n  'border-start-end-radius',\n  'border-start-start-radius',\n  'border-style',\n  'border-top',\n  'border-top-color',\n  'border-top-left-radius',\n  'border-top-right-radius',\n  'border-top-style',\n  'border-top-width',\n  'border-width',\n  'bottom',\n  'box-align',\n  'box-decoration-break',\n  'box-direction',\n  'box-flex',\n  'box-flex-group',\n  'box-lines',\n  'box-ordinal-group',\n  'box-orient',\n  'box-pack',\n  'box-shadow',\n  'box-sizing',\n  'break-after',\n  'break-before',\n  'break-inside',\n  'caption-side',\n  'caret-color',\n  'clear',\n  'clip',\n  'clip-path',\n  'clip-rule',\n  'color',\n  'color-interpolation',\n  'color-interpolation-filters',\n  'color-profile',\n  'color-rendering',\n  'color-scheme',\n  'column-count',\n  'column-fill',\n  'column-gap',\n  'column-rule',\n  'column-rule-color',\n  'column-rule-style',\n  'column-rule-width',\n  'column-span',\n  'column-width',\n  'columns',\n  'contain',\n  'contain-intrinsic-block-size',\n  'contain-intrinsic-height',\n  'contain-intrinsic-inline-size',\n  'contain-intrinsic-size',\n  'contain-intrinsic-width',\n  'container',\n  'container-name',\n  'container-type',\n  'content',\n  'content-visibility',\n  'counter-increment',\n  'counter-reset',\n  'counter-set',\n  'cue',\n  'cue-after',\n  'cue-before',\n  'cursor',\n  'cx',\n  'cy',\n  'direction',\n  'display',\n  'dominant-baseline',\n  'empty-cells',\n  'enable-background',\n  'field-sizing',\n  'fill',\n  'fill-opacity',\n  'fill-rule',\n  'filter',\n  'flex',\n  'flex-basis',\n  'flex-direction',\n  'flex-flow',\n  'flex-grow',\n  'flex-shrink',\n  'flex-wrap',\n  'float',\n  'flood-color',\n  'flood-opacity',\n  'flow',\n  'font',\n  'font-display',\n  'font-family',\n  'font-feature-settings',\n  'font-kerning',\n  'font-language-override',\n  'font-optical-sizing',\n  'font-palette',\n  'font-size',\n  'font-size-adjust',\n  'font-smooth',\n  'font-smoothing',\n  'font-stretch',\n  'font-style',\n  'font-synthesis',\n  'font-synthesis-position',\n  'font-synthesis-small-caps',\n  'font-synthesis-style',\n  'font-synthesis-weight',\n  'font-variant',\n  'font-variant-alternates',\n  'font-variant-caps',\n  'font-variant-east-asian',\n  'font-variant-emoji',\n  'font-variant-ligatures',\n  'font-variant-numeric',\n  'font-variant-position',\n  'font-variation-settings',\n  'font-weight',\n  'forced-color-adjust',\n  'gap',\n  'glyph-orientation-horizontal',\n  'glyph-orientation-vertical',\n  'grid',\n  'grid-area',\n  'grid-auto-columns',\n  'grid-auto-flow',\n  'grid-auto-rows',\n  'grid-column',\n  'grid-column-end',\n  'grid-column-start',\n  'grid-gap',\n  'grid-row',\n  'grid-row-end',\n  'grid-row-start',\n  'grid-template',\n  'grid-template-areas',\n  'grid-template-columns',\n  'grid-template-rows',\n  'hanging-punctuation',\n  'height',\n  'hyphenate-character',\n  'hyphenate-limit-chars',\n  'hyphens',\n  'icon',\n  'image-orientation',\n  'image-rendering',\n  'image-resolution',\n  'ime-mode',\n  'initial-letter',\n  'initial-letter-align',\n  'inline-size',\n  'inset',\n  'inset-area',\n  'inset-block',\n  'inset-block-end',\n  'inset-block-start',\n  'inset-inline',\n  'inset-inline-end',\n  'inset-inline-start',\n  'isolation',\n  'justify-content',\n  'justify-items',\n  'justify-self',\n  'kerning',\n  'left',\n  'letter-spacing',\n  'lighting-color',\n  'line-break',\n  'line-height',\n  'line-height-step',\n  'list-style',\n  'list-style-image',\n  'list-style-position',\n  'list-style-type',\n  'margin',\n  'margin-block',\n  'margin-block-end',\n  'margin-block-start',\n  'margin-bottom',\n  'margin-inline',\n  'margin-inline-end',\n  'margin-inline-start',\n  'margin-left',\n  'margin-right',\n  'margin-top',\n  'margin-trim',\n  'marker',\n  'marker-end',\n  'marker-mid',\n  'marker-start',\n  'marks',\n  'mask',\n  'mask-border',\n  'mask-border-mode',\n  'mask-border-outset',\n  'mask-border-repeat',\n  'mask-border-slice',\n  'mask-border-source',\n  'mask-border-width',\n  'mask-clip',\n  'mask-composite',\n  'mask-image',\n  'mask-mode',\n  'mask-origin',\n  'mask-position',\n  'mask-repeat',\n  'mask-size',\n  'mask-type',\n  'masonry-auto-flow',\n  'math-depth',\n  'math-shift',\n  'math-style',\n  'max-block-size',\n  'max-height',\n  'max-inline-size',\n  'max-width',\n  'min-block-size',\n  'min-height',\n  'min-inline-size',\n  'min-width',\n  'mix-blend-mode',\n  'nav-down',\n  'nav-index',\n  'nav-left',\n  'nav-right',\n  'nav-up',\n  'none',\n  'normal',\n  'object-fit',\n  'object-position',\n  'offset',\n  'offset-anchor',\n  'offset-distance',\n  'offset-path',\n  'offset-position',\n  'offset-rotate',\n  'opacity',\n  'order',\n  'orphans',\n  'outline',\n  'outline-color',\n  'outline-offset',\n  'outline-style',\n  'outline-width',\n  'overflow',\n  'overflow-anchor',\n  'overflow-block',\n  'overflow-clip-margin',\n  'overflow-inline',\n  'overflow-wrap',\n  'overflow-x',\n  'overflow-y',\n  'overlay',\n  'overscroll-behavior',\n  'overscroll-behavior-block',\n  'overscroll-behavior-inline',\n  'overscroll-behavior-x',\n  'overscroll-behavior-y',\n  'padding',\n  'padding-block',\n  'padding-block-end',\n  'padding-block-start',\n  'padding-bottom',\n  'padding-inline',\n  'padding-inline-end',\n  'padding-inline-start',\n  'padding-left',\n  'padding-right',\n  'padding-top',\n  'page',\n  'page-break-after',\n  'page-break-before',\n  'page-break-inside',\n  'paint-order',\n  'pause',\n  'pause-after',\n  'pause-before',\n  'perspective',\n  'perspective-origin',\n  'place-content',\n  'place-items',\n  'place-self',\n  'pointer-events',\n  'position',\n  'position-anchor',\n  'position-visibility',\n  'print-color-adjust',\n  'quotes',\n  'r',\n  'resize',\n  'rest',\n  'rest-after',\n  'rest-before',\n  'right',\n  'rotate',\n  'row-gap',\n  'ruby-align',\n  'ruby-position',\n  'scale',\n  'scroll-behavior',\n  'scroll-margin',\n  'scroll-margin-block',\n  'scroll-margin-block-end',\n  'scroll-margin-block-start',\n  'scroll-margin-bottom',\n  'scroll-margin-inline',\n  'scroll-margin-inline-end',\n  'scroll-margin-inline-start',\n  'scroll-margin-left',\n  'scroll-margin-right',\n  'scroll-margin-top',\n  'scroll-padding',\n  'scroll-padding-block',\n  'scroll-padding-block-end',\n  'scroll-padding-block-start',\n  'scroll-padding-bottom',\n  'scroll-padding-inline',\n  'scroll-padding-inline-end',\n  'scroll-padding-inline-start',\n  'scroll-padding-left',\n  'scroll-padding-right',\n  'scroll-padding-top',\n  'scroll-snap-align',\n  'scroll-snap-stop',\n  'scroll-snap-type',\n  'scroll-timeline',\n  'scroll-timeline-axis',\n  'scroll-timeline-name',\n  'scrollbar-color',\n  'scrollbar-gutter',\n  'scrollbar-width',\n  'shape-image-threshold',\n  'shape-margin',\n  'shape-outside',\n  'shape-rendering',\n  'speak',\n  'speak-as',\n  'src', // @font-face\n  'stop-color',\n  'stop-opacity',\n  'stroke',\n  'stroke-dasharray',\n  'stroke-dashoffset',\n  'stroke-linecap',\n  'stroke-linejoin',\n  'stroke-miterlimit',\n  'stroke-opacity',\n  'stroke-width',\n  'tab-size',\n  'table-layout',\n  'text-align',\n  'text-align-all',\n  'text-align-last',\n  'text-anchor',\n  'text-combine-upright',\n  'text-decoration',\n  'text-decoration-color',\n  'text-decoration-line',\n  'text-decoration-skip',\n  'text-decoration-skip-ink',\n  'text-decoration-style',\n  'text-decoration-thickness',\n  'text-emphasis',\n  'text-emphasis-color',\n  'text-emphasis-position',\n  'text-emphasis-style',\n  'text-indent',\n  'text-justify',\n  'text-orientation',\n  'text-overflow',\n  'text-rendering',\n  'text-shadow',\n  'text-size-adjust',\n  'text-transform',\n  'text-underline-offset',\n  'text-underline-position',\n  'text-wrap',\n  'text-wrap-mode',\n  'text-wrap-style',\n  'timeline-scope',\n  'top',\n  'touch-action',\n  'transform',\n  'transform-box',\n  'transform-origin',\n  'transform-style',\n  'transition',\n  'transition-behavior',\n  'transition-delay',\n  'transition-duration',\n  'transition-property',\n  'transition-timing-function',\n  'translate',\n  'unicode-bidi',\n  'user-modify',\n  'user-select',\n  'vector-effect',\n  'vertical-align',\n  'view-timeline',\n  'view-timeline-axis',\n  'view-timeline-inset',\n  'view-timeline-name',\n  'view-transition-name',\n  'visibility',\n  'voice-balance',\n  'voice-duration',\n  'voice-family',\n  'voice-pitch',\n  'voice-range',\n  'voice-rate',\n  'voice-stress',\n  'voice-volume',\n  'white-space',\n  'white-space-collapse',\n  'widows',\n  'width',\n  'will-change',\n  'word-break',\n  'word-spacing',\n  'word-wrap',\n  'writing-mode',\n  'x',\n  'y',\n  'z-index',\n  'zoom'\n].sort().reverse();\n\n/*\nLanguage: CSS\nCategory: common, css, web\nWebsite: https://developer.mozilla.org/en-US/docs/Web/CSS\n*/\n\n\n/** @type LanguageFn */\nfunction css(hljs) {\n  const regex = hljs.regex;\n  const modes = MODES(hljs);\n  const VENDOR_PREFIX = { begin: /-(webkit|moz|ms|o)-(?=[a-z])/ };\n  const AT_MODIFIERS = \"and or not only\";\n  const AT_PROPERTY_RE = /@-?\\w[\\w]*(-\\w+)*/; // @-webkit-keyframes\n  const IDENT_RE = '[a-zA-Z-][a-zA-Z0-9_-]*';\n  const STRINGS = [\n    hljs.APOS_STRING_MODE,\n    hljs.QUOTE_STRING_MODE\n  ];\n\n  return {\n    name: 'CSS',\n    case_insensitive: true,\n    illegal: /[=|'\\$]/,\n    keywords: { keyframePosition: \"from to\" },\n    classNameAliases: {\n      // for visual continuity with `tag {}` and because we\n      // don't have a great class for this?\n      keyframePosition: \"selector-tag\" },\n    contains: [\n      modes.BLOCK_COMMENT,\n      VENDOR_PREFIX,\n      // to recognize keyframe 40% etc which are outside the scope of our\n      // attribute value mode\n      modes.CSS_NUMBER_MODE,\n      {\n        className: 'selector-id',\n        begin: /#[A-Za-z0-9_-]+/,\n        relevance: 0\n      },\n      {\n        className: 'selector-class',\n        begin: '\\\\.' + IDENT_RE,\n        relevance: 0\n      },\n      modes.ATTRIBUTE_SELECTOR_MODE,\n      {\n        className: 'selector-pseudo',\n        variants: [\n          { begin: ':(' + PSEUDO_CLASSES.join('|') + ')' },\n          { begin: ':(:)?(' + PSEUDO_ELEMENTS.join('|') + ')' }\n        ]\n      },\n      // we may actually need this (12/2020)\n      // { // pseudo-selector params\n      //   begin: /\\(/,\n      //   end: /\\)/,\n      //   contains: [ hljs.CSS_NUMBER_MODE ]\n      // },\n      modes.CSS_VARIABLE,\n      {\n        className: 'attribute',\n        begin: '\\\\b(' + ATTRIBUTES.join('|') + ')\\\\b'\n      },\n      // attribute values\n      {\n        begin: /:/,\n        end: /[;}{]/,\n        contains: [\n          modes.BLOCK_COMMENT,\n          modes.HEXCOLOR,\n          modes.IMPORTANT,\n          modes.CSS_NUMBER_MODE,\n          ...STRINGS,\n          // needed to highlight these as strings and to avoid issues with\n          // illegal characters that might be inside urls that would tigger the\n          // languages illegal stack\n          {\n            begin: /(url|data-uri)\\(/,\n            end: /\\)/,\n            relevance: 0, // from keywords\n            keywords: { built_in: \"url data-uri\" },\n            contains: [\n              ...STRINGS,\n              {\n                className: \"string\",\n                // any character other than `)` as in `url()` will be the start\n                // of a string, which ends with `)` (from the parent mode)\n                begin: /[^)]/,\n                endsWithParent: true,\n                excludeEnd: true\n              }\n            ]\n          },\n          modes.FUNCTION_DISPATCH\n        ]\n      },\n      {\n        begin: regex.lookahead(/@/),\n        end: '[{;]',\n        relevance: 0,\n        illegal: /:/, // break on Less variables @var: ...\n        contains: [\n          {\n            className: 'keyword',\n            begin: AT_PROPERTY_RE\n          },\n          {\n            begin: /\\s/,\n            endsWithParent: true,\n            excludeEnd: true,\n            relevance: 0,\n            keywords: {\n              $pattern: /[a-z-]+/,\n              keyword: AT_MODIFIERS,\n              attribute: MEDIA_FEATURES.join(\" \")\n            },\n            contains: [\n              {\n                begin: /[a-z-]+(?=:)/,\n                className: \"attribute\"\n              },\n              ...STRINGS,\n              modes.CSS_NUMBER_MODE\n            ]\n          }\n        ]\n      },\n      {\n        className: 'selector-tag',\n        begin: '\\\\b(' + TAGS.join('|') + ')\\\\b'\n      }\n    ]\n  };\n}\n\nmodule.exports = css;\n","/*\nLanguage: D\nAuthor: Aleksandar Ruzicic <aleksandar@ruzicic.info>\nDescription: D is a language with C-like syntax and static typing. It pragmatically combines efficiency, control, and modeling power, with safety and programmer productivity.\nVersion: 1.0a\nWebsite: https://dlang.org\nCategory: system\nDate: 2012-04-08\n*/\n\n/**\n * Known issues:\n *\n * - invalid hex string literals will be recognized as a double quoted strings\n *   but 'x' at the beginning of string will not be matched\n *\n * - delimited string literals are not checked for matching end delimiter\n *   (not possible to do with js regexp)\n *\n * - content of token string is colored as a string (i.e. no keyword coloring inside a token string)\n *   also, content of token string is not validated to contain only valid D tokens\n *\n * - special token sequence rule is not strictly following D grammar (anything following #line\n *   up to the end of line is matched as special token sequence)\n */\n\n/** @type LanguageFn */\nfunction d(hljs) {\n  /**\n   * Language keywords\n   *\n   * @type {Object}\n   */\n  const D_KEYWORDS = {\n    $pattern: hljs.UNDERSCORE_IDENT_RE,\n    keyword:\n      'abstract alias align asm assert auto body break byte case cast catch class '\n      + 'const continue debug default delete deprecated do else enum export extern final '\n      + 'finally for foreach foreach_reverse|10 goto if immutable import in inout int '\n      + 'interface invariant is lazy macro mixin module new nothrow out override package '\n      + 'pragma private protected public pure ref return scope shared static struct '\n      + 'super switch synchronized template this throw try typedef typeid typeof union '\n      + 'unittest version void volatile while with __FILE__ __LINE__ __gshared|10 '\n      + '__thread __traits __DATE__ __EOF__ __TIME__ __TIMESTAMP__ __VENDOR__ __VERSION__',\n    built_in:\n      'bool cdouble cent cfloat char creal dchar delegate double dstring float function '\n      + 'idouble ifloat ireal long real short string ubyte ucent uint ulong ushort wchar '\n      + 'wstring',\n    literal:\n      'false null true'\n  };\n\n  /**\n   * Number literal regexps\n   *\n   * @type {String}\n   */\n  const decimal_integer_re = '(0|[1-9][\\\\d_]*)';\n  const decimal_integer_nosus_re = '(0|[1-9][\\\\d_]*|\\\\d[\\\\d_]*|[\\\\d_]+?\\\\d)';\n  const binary_integer_re = '0[bB][01_]+';\n  const hexadecimal_digits_re = '([\\\\da-fA-F][\\\\da-fA-F_]*|_[\\\\da-fA-F][\\\\da-fA-F_]*)';\n  const hexadecimal_integer_re = '0[xX]' + hexadecimal_digits_re;\n\n  const decimal_exponent_re = '([eE][+-]?' + decimal_integer_nosus_re + ')';\n  const decimal_float_re = '(' + decimal_integer_nosus_re + '(\\\\.\\\\d*|' + decimal_exponent_re + ')|'\n                + '\\\\d+\\\\.' + decimal_integer_nosus_re + '|'\n                + '\\\\.' + decimal_integer_re + decimal_exponent_re + '?'\n              + ')';\n  const hexadecimal_float_re = '(0[xX]('\n                  + hexadecimal_digits_re + '\\\\.' + hexadecimal_digits_re + '|'\n                  + '\\\\.?' + hexadecimal_digits_re\n                 + ')[pP][+-]?' + decimal_integer_nosus_re + ')';\n\n  const integer_re = '('\n      + decimal_integer_re + '|'\n      + binary_integer_re + '|'\n       + hexadecimal_integer_re\n    + ')';\n\n  const float_re = '('\n      + hexadecimal_float_re + '|'\n      + decimal_float_re\n    + ')';\n\n  /**\n   * Escape sequence supported in D string and character literals\n   *\n   * @type {String}\n   */\n  const escape_sequence_re = '\\\\\\\\('\n              + '[\\'\"\\\\?\\\\\\\\abfnrtv]|' // common escapes\n              + 'u[\\\\dA-Fa-f]{4}|' // four hex digit unicode codepoint\n              + '[0-7]{1,3}|' // one to three octal digit ascii char code\n              + 'x[\\\\dA-Fa-f]{2}|' // two hex digit ascii char code\n              + 'U[\\\\dA-Fa-f]{8}' // eight hex digit unicode codepoint\n              + ')|'\n              + '&[a-zA-Z\\\\d]{2,};'; // named character entity\n\n  /**\n   * D integer number literals\n   *\n   * @type {Object}\n   */\n  const D_INTEGER_MODE = {\n    className: 'number',\n    begin: '\\\\b' + integer_re + '(L|u|U|Lu|LU|uL|UL)?',\n    relevance: 0\n  };\n\n  /**\n   * [D_FLOAT_MODE description]\n   * @type {Object}\n   */\n  const D_FLOAT_MODE = {\n    className: 'number',\n    begin: '\\\\b('\n        + float_re + '([fF]|L|i|[fF]i|Li)?|'\n        + integer_re + '(i|[fF]i|Li)'\n      + ')',\n    relevance: 0\n  };\n\n  /**\n   * D character literal\n   *\n   * @type {Object}\n   */\n  const D_CHARACTER_MODE = {\n    className: 'string',\n    begin: '\\'(' + escape_sequence_re + '|.)',\n    end: '\\'',\n    illegal: '.'\n  };\n\n  /**\n   * D string escape sequence\n   *\n   * @type {Object}\n   */\n  const D_ESCAPE_SEQUENCE = {\n    begin: escape_sequence_re,\n    relevance: 0\n  };\n\n  /**\n   * D double quoted string literal\n   *\n   * @type {Object}\n   */\n  const D_STRING_MODE = {\n    className: 'string',\n    begin: '\"',\n    contains: [ D_ESCAPE_SEQUENCE ],\n    end: '\"[cwd]?'\n  };\n\n  /**\n   * D wysiwyg and delimited string literals\n   *\n   * @type {Object}\n   */\n  const D_WYSIWYG_DELIMITED_STRING_MODE = {\n    className: 'string',\n    begin: '[rq]\"',\n    end: '\"[cwd]?',\n    relevance: 5\n  };\n\n  /**\n   * D alternate wysiwyg string literal\n   *\n   * @type {Object}\n   */\n  const D_ALTERNATE_WYSIWYG_STRING_MODE = {\n    className: 'string',\n    begin: '`',\n    end: '`[cwd]?'\n  };\n\n  /**\n   * D hexadecimal string literal\n   *\n   * @type {Object}\n   */\n  const D_HEX_STRING_MODE = {\n    className: 'string',\n    begin: 'x\"[\\\\da-fA-F\\\\s\\\\n\\\\r]*\"[cwd]?',\n    relevance: 10\n  };\n\n  /**\n   * D delimited string literal\n   *\n   * @type {Object}\n   */\n  const D_TOKEN_STRING_MODE = {\n    className: 'string',\n    begin: 'q\"\\\\{',\n    end: '\\\\}\"'\n  };\n\n  /**\n   * Hashbang support\n   *\n   * @type {Object}\n   */\n  const D_HASHBANG_MODE = {\n    className: 'meta',\n    begin: '^#!',\n    end: '$',\n    relevance: 5\n  };\n\n  /**\n   * D special token sequence\n   *\n   * @type {Object}\n   */\n  const D_SPECIAL_TOKEN_SEQUENCE_MODE = {\n    className: 'meta',\n    begin: '#(line)',\n    end: '$',\n    relevance: 5\n  };\n\n  /**\n   * D attributes\n   *\n   * @type {Object}\n   */\n  const D_ATTRIBUTE_MODE = {\n    className: 'keyword',\n    begin: '@[a-zA-Z_][a-zA-Z_\\\\d]*'\n  };\n\n  /**\n   * D nesting comment\n   *\n   * @type {Object}\n   */\n  const D_NESTING_COMMENT_MODE = hljs.COMMENT(\n    '\\\\/\\\\+',\n    '\\\\+\\\\/',\n    {\n      contains: [ 'self' ],\n      relevance: 10\n    }\n  );\n\n  return {\n    name: 'D',\n    keywords: D_KEYWORDS,\n    contains: [\n      hljs.C_LINE_COMMENT_MODE,\n      hljs.C_BLOCK_COMMENT_MODE,\n      D_NESTING_COMMENT_MODE,\n      D_HEX_STRING_MODE,\n      D_STRING_MODE,\n      D_WYSIWYG_DELIMITED_STRING_MODE,\n      D_ALTERNATE_WYSIWYG_STRING_MODE,\n      D_TOKEN_STRING_MODE,\n      D_FLOAT_MODE,\n      D_INTEGER_MODE,\n      D_CHARACTER_MODE,\n      D_HASHBANG_MODE,\n      D_SPECIAL_TOKEN_SEQUENCE_MODE,\n      D_ATTRIBUTE_MODE\n    ]\n  };\n}\n\nmodule.exports = d;\n","/*\nLanguage: Markdown\nRequires: xml.js\nAuthor: John Crepezzi <john.crepezzi@gmail.com>\nWebsite: https://daringfireball.net/projects/markdown/\nCategory: common, markup\n*/\n\nfunction markdown(hljs) {\n  const regex = hljs.regex;\n  const INLINE_HTML = {\n    begin: /<\\/?[A-Za-z_]/,\n    end: '>',\n    subLanguage: 'xml',\n    relevance: 0\n  };\n  const HORIZONTAL_RULE = {\n    begin: '^[-\\\\*]{3,}',\n    end: '$'\n  };\n  const CODE = {\n    className: 'code',\n    variants: [\n      // TODO: fix to allow these to work with sublanguage also\n      { begin: '(`{3,})[^`](.|\\\\n)*?\\\\1`*[ ]*' },\n      { begin: '(~{3,})[^~](.|\\\\n)*?\\\\1~*[ ]*' },\n      // needed to allow markdown as a sublanguage to work\n      {\n        begin: '```',\n        end: '```+[ ]*$'\n      },\n      {\n        begin: '~~~',\n        end: '~~~+[ ]*$'\n      },\n      { begin: '`.+?`' },\n      {\n        begin: '(?=^( {4}|\\\\t))',\n        // use contains to gobble up multiple lines to allow the block to be whatever size\n        // but only have a single open/close tag vs one per line\n        contains: [\n          {\n            begin: '^( {4}|\\\\t)',\n            end: '(\\\\n)$'\n          }\n        ],\n        relevance: 0\n      }\n    ]\n  };\n  const LIST = {\n    className: 'bullet',\n    begin: '^[ \\t]*([*+-]|(\\\\d+\\\\.))(?=\\\\s+)',\n    end: '\\\\s+',\n    excludeEnd: true\n  };\n  const LINK_REFERENCE = {\n    begin: /^\\[[^\\n]+\\]:/,\n    returnBegin: true,\n    contains: [\n      {\n        className: 'symbol',\n        begin: /\\[/,\n        end: /\\]/,\n        excludeBegin: true,\n        excludeEnd: true\n      },\n      {\n        className: 'link',\n        begin: /:\\s*/,\n        end: /$/,\n        excludeBegin: true\n      }\n    ]\n  };\n  const URL_SCHEME = /[A-Za-z][A-Za-z0-9+.-]*/;\n  const LINK = {\n    variants: [\n      // too much like nested array access in so many languages\n      // to have any real relevance\n      {\n        begin: /\\[.+?\\]\\[.*?\\]/,\n        relevance: 0\n      },\n      // popular internet URLs\n      {\n        begin: /\\[.+?\\]\\(((data|javascript|mailto):|(?:http|ftp)s?:\\/\\/).*?\\)/,\n        relevance: 2\n      },\n      {\n        begin: regex.concat(/\\[.+?\\]\\(/, URL_SCHEME, /:\\/\\/.*?\\)/),\n        relevance: 2\n      },\n      // relative urls\n      {\n        begin: /\\[.+?\\]\\([./?&#].*?\\)/,\n        relevance: 1\n      },\n      // whatever else, lower relevance (might not be a link at all)\n      {\n        begin: /\\[.*?\\]\\(.*?\\)/,\n        relevance: 0\n      }\n    ],\n    returnBegin: true,\n    contains: [\n      {\n        // empty strings for alt or link text\n        match: /\\[(?=\\])/ },\n      {\n        className: 'string',\n        relevance: 0,\n        begin: '\\\\[',\n        end: '\\\\]',\n        excludeBegin: true,\n        returnEnd: true\n      },\n      {\n        className: 'link',\n        relevance: 0,\n        begin: '\\\\]\\\\(',\n        end: '\\\\)',\n        excludeBegin: true,\n        excludeEnd: true\n      },\n      {\n        className: 'symbol',\n        relevance: 0,\n        begin: '\\\\]\\\\[',\n        end: '\\\\]',\n        excludeBegin: true,\n        excludeEnd: true\n      }\n    ]\n  };\n  const BOLD = {\n    className: 'strong',\n    contains: [], // defined later\n    variants: [\n      {\n        begin: /_{2}(?!\\s)/,\n        end: /_{2}/\n      },\n      {\n        begin: /\\*{2}(?!\\s)/,\n        end: /\\*{2}/\n      }\n    ]\n  };\n  const ITALIC = {\n    className: 'emphasis',\n    contains: [], // defined later\n    variants: [\n      {\n        begin: /\\*(?![*\\s])/,\n        end: /\\*/\n      },\n      {\n        begin: /_(?![_\\s])/,\n        end: /_/,\n        relevance: 0\n      }\n    ]\n  };\n\n  // 3 level deep nesting is not allowed because it would create confusion\n  // in cases like `***testing***` because where we don't know if the last\n  // `***` is starting a new bold/italic or finishing the last one\n  const BOLD_WITHOUT_ITALIC = hljs.inherit(BOLD, { contains: [] });\n  const ITALIC_WITHOUT_BOLD = hljs.inherit(ITALIC, { contains: [] });\n  BOLD.contains.push(ITALIC_WITHOUT_BOLD);\n  ITALIC.contains.push(BOLD_WITHOUT_ITALIC);\n\n  let CONTAINABLE = [\n    INLINE_HTML,\n    LINK\n  ];\n\n  [\n    BOLD,\n    ITALIC,\n    BOLD_WITHOUT_ITALIC,\n    ITALIC_WITHOUT_BOLD\n  ].forEach(m => {\n    m.contains = m.contains.concat(CONTAINABLE);\n  });\n\n  CONTAINABLE = CONTAINABLE.concat(BOLD, ITALIC);\n\n  const HEADER = {\n    className: 'section',\n    variants: [\n      {\n        begin: '^#{1,6}',\n        end: '$',\n        contains: CONTAINABLE\n      },\n      {\n        begin: '(?=^.+?\\\\n[=-]{2,}$)',\n        contains: [\n          { begin: '^[=-]*$' },\n          {\n            begin: '^',\n            end: \"\\\\n\",\n            contains: CONTAINABLE\n          }\n        ]\n      }\n    ]\n  };\n\n  const BLOCKQUOTE = {\n    className: 'quote',\n    begin: '^>\\\\s+',\n    contains: CONTAINABLE,\n    end: '$'\n  };\n\n  const ENTITY = {\n    //https://spec.commonmark.org/0.31.2/#entity-references\n    scope: 'literal',\n    match: /&([a-zA-Z0-9]+|#[0-9]{1,7}|#[Xx][0-9a-fA-F]{1,6});/\n  };\n\n  return {\n    name: 'Markdown',\n    aliases: [\n      'md',\n      'mkdown',\n      'mkd'\n    ],\n    contains: [\n      HEADER,\n      INLINE_HTML,\n      LIST,\n      BOLD,\n      ITALIC,\n      BLOCKQUOTE,\n      CODE,\n      HORIZONTAL_RULE,\n      LINK,\n      LINK_REFERENCE,\n      ENTITY\n    ]\n  };\n}\n\nmodule.exports = markdown;\n","/*\nLanguage: Dart\nRequires: markdown.js\nAuthor: Maxim Dikun <dikmax@gmail.com>\nDescription: Dart a modern, object-oriented language developed by Google. For more information see https://www.dartlang.org/\nWebsite: https://dart.dev\nCategory: scripting\n*/\n\n/** @type LanguageFn */\nfunction dart(hljs) {\n  const SUBST = {\n    className: 'subst',\n    variants: [ { begin: '\\\\$[A-Za-z0-9_]+' } ]\n  };\n\n  const BRACED_SUBST = {\n    className: 'subst',\n    variants: [\n      {\n        begin: /\\$\\{/,\n        end: /\\}/\n      }\n    ],\n    keywords: 'true false null this is new super'\n  };\n\n  const NUMBER = {\n    className: 'number',\n    relevance: 0,\n    variants: [\n      { match: /\\b[0-9][0-9_]*(\\.[0-9][0-9_]*)?([eE][+-]?[0-9][0-9_]*)?\\b/ },\n      { match: /\\b0[xX][0-9A-Fa-f][0-9A-Fa-f_]*\\b/ }\n    ]\n  };\n\n  const STRING = {\n    className: 'string',\n    variants: [\n      {\n        begin: 'r\\'\\'\\'',\n        end: '\\'\\'\\''\n      },\n      {\n        begin: 'r\"\"\"',\n        end: '\"\"\"'\n      },\n      {\n        begin: 'r\\'',\n        end: '\\'',\n        illegal: '\\\\n'\n      },\n      {\n        begin: 'r\"',\n        end: '\"',\n        illegal: '\\\\n'\n      },\n      {\n        begin: '\\'\\'\\'',\n        end: '\\'\\'\\'',\n        contains: [\n          hljs.BACKSLASH_ESCAPE,\n          SUBST,\n          BRACED_SUBST\n        ]\n      },\n      {\n        begin: '\"\"\"',\n        end: '\"\"\"',\n        contains: [\n          hljs.BACKSLASH_ESCAPE,\n          SUBST,\n          BRACED_SUBST\n        ]\n      },\n      {\n        begin: '\\'',\n        end: '\\'',\n        illegal: '\\\\n',\n        contains: [\n          hljs.BACKSLASH_ESCAPE,\n          SUBST,\n          BRACED_SUBST\n        ]\n      },\n      {\n        begin: '\"',\n        end: '\"',\n        illegal: '\\\\n',\n        contains: [\n          hljs.BACKSLASH_ESCAPE,\n          SUBST,\n          BRACED_SUBST\n        ]\n      }\n    ]\n  };\n  BRACED_SUBST.contains = [\n    NUMBER,\n    STRING\n  ];\n\n  const BUILT_IN_TYPES = [\n    // dart:core\n    'Comparable',\n    'DateTime',\n    'Duration',\n    'Function',\n    'Iterable',\n    'Iterator',\n    'List',\n    'Map',\n    'Match',\n    'Object',\n    'Pattern',\n    'RegExp',\n    'Set',\n    'Stopwatch',\n    'String',\n    'StringBuffer',\n    'StringSink',\n    'Symbol',\n    'Type',\n    'Uri',\n    'bool',\n    'double',\n    'int',\n    'num',\n    // dart:html\n    'Element',\n    'ElementList'\n  ];\n  const NULLABLE_BUILT_IN_TYPES = BUILT_IN_TYPES.map((e) => `${e}?`);\n\n  const BASIC_KEYWORDS = [\n    \"abstract\",\n    \"as\",\n    \"assert\",\n    \"async\",\n    \"await\",\n    \"base\",\n    \"break\",\n    \"case\",\n    \"catch\",\n    \"class\",\n    \"const\",\n    \"continue\",\n    \"covariant\",\n    \"default\",\n    \"deferred\",\n    \"do\",\n    \"dynamic\",\n    \"else\",\n    \"enum\",\n    \"export\",\n    \"extends\",\n    \"extension\",\n    \"external\",\n    \"factory\",\n    \"false\",\n    \"final\",\n    \"finally\",\n    \"for\",\n    \"Function\",\n    \"get\",\n    \"hide\",\n    \"if\",\n    \"implements\",\n    \"import\",\n    \"in\",\n    \"interface\",\n    \"is\",\n    \"late\",\n    \"library\",\n    \"mixin\",\n    \"new\",\n    \"null\",\n    \"on\",\n    \"operator\",\n    \"part\",\n    \"required\",\n    \"rethrow\",\n    \"return\",\n    \"sealed\",\n    \"set\",\n    \"show\",\n    \"static\",\n    \"super\",\n    \"switch\",\n    \"sync\",\n    \"this\",\n    \"throw\",\n    \"true\",\n    \"try\",\n    \"typedef\",\n    \"var\",\n    \"void\",\n    \"when\",\n    \"while\",\n    \"with\",\n    \"yield\"\n  ];\n\n  const KEYWORDS = {\n    keyword: BASIC_KEYWORDS,\n    built_in:\n      BUILT_IN_TYPES\n        .concat(NULLABLE_BUILT_IN_TYPES)\n        .concat([\n          // dart:core\n          'Never',\n          'Null',\n          'dynamic',\n          'print',\n          // dart:html\n          'document',\n          'querySelector',\n          'querySelectorAll',\n          'window'\n        ]),\n    $pattern: /[A-Za-z][A-Za-z0-9_]*\\??/\n  };\n\n  return {\n    name: 'Dart',\n    keywords: KEYWORDS,\n    contains: [\n      STRING,\n      hljs.COMMENT(\n        /\\/\\*\\*(?!\\/)/,\n        /\\*\\//,\n        {\n          subLanguage: 'markdown',\n          relevance: 0\n        }\n      ),\n      hljs.COMMENT(\n        /\\/{3,} ?/,\n        /$/, { contains: [\n          {\n            subLanguage: 'markdown',\n            begin: '.',\n            end: '$',\n            relevance: 0\n          }\n        ] }\n      ),\n      hljs.C_LINE_COMMENT_MODE,\n      hljs.C_BLOCK_COMMENT_MODE,\n      {\n        className: 'class',\n        beginKeywords: 'class interface',\n        end: /\\{/,\n        excludeEnd: true,\n        contains: [\n          { beginKeywords: 'extends implements' },\n          hljs.UNDERSCORE_TITLE_MODE\n        ]\n      },\n      NUMBER,\n      {\n        className: 'meta',\n        begin: '@[A-Za-z]+'\n      },\n      { begin: '=>' // No markup, just a relevance booster\n      }\n    ]\n  };\n}\n\nmodule.exports = dart;\n","/*\nLanguage: Delphi\nWebsite: https://www.embarcadero.com/products/delphi\nCategory: system\n*/\n\n/** @type LanguageFn */\nfunction delphi(hljs) {\n  const KEYWORDS = [\n    \"exports\",\n    \"register\",\n    \"file\",\n    \"shl\",\n    \"array\",\n    \"record\",\n    \"property\",\n    \"for\",\n    \"mod\",\n    \"while\",\n    \"set\",\n    \"ally\",\n    \"label\",\n    \"uses\",\n    \"raise\",\n    \"not\",\n    \"stored\",\n    \"class\",\n    \"safecall\",\n    \"var\",\n    \"interface\",\n    \"or\",\n    \"private\",\n    \"static\",\n    \"exit\",\n    \"index\",\n    \"inherited\",\n    \"to\",\n    \"else\",\n    \"stdcall\",\n    \"override\",\n    \"shr\",\n    \"asm\",\n    \"far\",\n    \"resourcestring\",\n    \"finalization\",\n    \"packed\",\n    \"virtual\",\n    \"out\",\n    \"and\",\n    \"protected\",\n    \"library\",\n    \"do\",\n    \"xorwrite\",\n    \"goto\",\n    \"near\",\n    \"function\",\n    \"end\",\n    \"div\",\n    \"overload\",\n    \"object\",\n    \"unit\",\n    \"begin\",\n    \"string\",\n    \"on\",\n    \"inline\",\n    \"repeat\",\n    \"until\",\n    \"destructor\",\n    \"write\",\n    \"message\",\n    \"program\",\n    \"with\",\n    \"read\",\n    \"initialization\",\n    \"except\",\n    \"default\",\n    \"nil\",\n    \"if\",\n    \"case\",\n    \"cdecl\",\n    \"in\",\n    \"downto\",\n    \"threadvar\",\n    \"of\",\n    \"try\",\n    \"pascal\",\n    \"const\",\n    \"external\",\n    \"constructor\",\n    \"type\",\n    \"public\",\n    \"then\",\n    \"implementation\",\n    \"finally\",\n    \"published\",\n    \"procedure\",\n    \"absolute\",\n    \"reintroduce\",\n    \"operator\",\n    \"as\",\n    \"is\",\n    \"abstract\",\n    \"alias\",\n    \"assembler\",\n    \"bitpacked\",\n    \"break\",\n    \"continue\",\n    \"cppdecl\",\n    \"cvar\",\n    \"enumerator\",\n    \"experimental\",\n    \"platform\",\n    \"deprecated\",\n    \"unimplemented\",\n    \"dynamic\",\n    \"export\",\n    \"far16\",\n    \"forward\",\n    \"generic\",\n    \"helper\",\n    \"implements\",\n    \"interrupt\",\n    \"iochecks\",\n    \"local\",\n    \"name\",\n    \"nodefault\",\n    \"noreturn\",\n    \"nostackframe\",\n    \"oldfpccall\",\n    \"otherwise\",\n    \"saveregisters\",\n    \"softfloat\",\n    \"specialize\",\n    \"strict\",\n    \"unaligned\",\n    \"varargs\"\n  ];\n  const COMMENT_MODES = [\n    hljs.C_LINE_COMMENT_MODE,\n    hljs.COMMENT(/\\{/, /\\}/, { relevance: 0 }),\n    hljs.COMMENT(/\\(\\*/, /\\*\\)/, { relevance: 10 })\n  ];\n  const DIRECTIVE = {\n    className: 'meta',\n    variants: [\n      {\n        begin: /\\{\\$/,\n        end: /\\}/\n      },\n      {\n        begin: /\\(\\*\\$/,\n        end: /\\*\\)/\n      }\n    ]\n  };\n  const STRING = {\n    className: 'string',\n    begin: /'/,\n    end: /'/,\n    contains: [ { begin: /''/ } ]\n  };\n  const NUMBER = {\n    className: 'number',\n    relevance: 0,\n    // Source: https://www.freepascal.org/docs-html/ref/refse6.html\n    variants: [\n      {\n        // Regular numbers, e.g., 123, 123.456.\n        match: /\\b\\d[\\d_]*(\\.\\d[\\d_]*)?/ },\n      {\n        // Hexadecimal notation, e.g., $7F.\n        match: /\\$[\\dA-Fa-f_]+/ },\n      {\n        // Hexadecimal literal with no digits\n        match: /\\$/,\n        relevance: 0 },\n      {\n        // Octal notation, e.g., &42.\n        match: /&[0-7][0-7_]*/ },\n      {\n        // Binary notation, e.g., %1010.\n        match: /%[01_]+/ },\n      {\n        // Binary literal with no digits\n        match: /%/,\n        relevance: 0 }\n    ]\n  };\n  const CHAR_STRING = {\n    className: 'string',\n    variants: [\n      { match: /#\\d[\\d_]*/ },\n      { match: /#\\$[\\dA-Fa-f][\\dA-Fa-f_]*/ },\n      { match: /#&[0-7][0-7_]*/ },\n      { match: /#%[01][01_]*/ }\n    ]\n  };\n  const CLASS = {\n    begin: hljs.IDENT_RE + '\\\\s*=\\\\s*class\\\\s*\\\\(',\n    returnBegin: true,\n    contains: [ hljs.TITLE_MODE ]\n  };\n  const FUNCTION = {\n    className: 'function',\n    beginKeywords: 'function constructor destructor procedure',\n    end: /[:;]/,\n    keywords: 'function constructor|10 destructor|10 procedure|10',\n    contains: [\n      hljs.TITLE_MODE,\n      {\n        className: 'params',\n        begin: /\\(/,\n        end: /\\)/,\n        keywords: KEYWORDS,\n        contains: [\n          STRING,\n          CHAR_STRING,\n          DIRECTIVE\n        ].concat(COMMENT_MODES)\n      },\n      DIRECTIVE\n    ].concat(COMMENT_MODES)\n  };\n  return {\n    name: 'Delphi',\n    aliases: [\n      'dpr',\n      'dfm',\n      'pas',\n      'pascal'\n    ],\n    case_insensitive: true,\n    keywords: KEYWORDS,\n    illegal: /\"|\\$[G-Zg-z]|\\/\\*|<\\/|\\|/,\n    contains: [\n      STRING,\n      CHAR_STRING,\n      NUMBER,\n      CLASS,\n      FUNCTION,\n      DIRECTIVE\n    ].concat(COMMENT_MODES)\n  };\n}\n\nmodule.exports = delphi;\n","/*\nLanguage: Diff\nDescription: Unified and context diff\nAuthor: Vasily Polovnyov <vast@whiteants.net>\nWebsite: https://www.gnu.org/software/diffutils/\nCategory: common\n*/\n\n/** @type LanguageFn */\nfunction diff(hljs) {\n  const regex = hljs.regex;\n  return {\n    name: 'Diff',\n    aliases: [ 'patch' ],\n    contains: [\n      {\n        className: 'meta',\n        relevance: 10,\n        match: regex.either(\n          /^@@ +-\\d+,\\d+ +\\+\\d+,\\d+ +@@/,\n          /^\\*\\*\\* +\\d+,\\d+ +\\*\\*\\*\\*$/,\n          /^--- +\\d+,\\d+ +----$/\n        )\n      },\n      {\n        className: 'comment',\n        variants: [\n          {\n            begin: regex.either(\n              /Index: /,\n              /^index/,\n              /={3,}/,\n              /^-{3}/,\n              /^\\*{3} /,\n              /^\\+{3}/,\n              /^diff --git/\n            ),\n            end: /$/\n          },\n          { match: /^\\*{15}$/ }\n        ]\n      },\n      {\n        className: 'addition',\n        begin: /^\\+/,\n        end: /$/\n      },\n      {\n        className: 'deletion',\n        begin: /^-/,\n        end: /$/\n      },\n      {\n        className: 'addition',\n        begin: /^!/,\n        end: /$/\n      }\n    ]\n  };\n}\n\nmodule.exports = diff;\n","/*\nLanguage: Django\nDescription: Django is a high-level Python Web framework that encourages rapid development and clean, pragmatic design.\nRequires: xml.js\nAuthor: Ivan Sagalaev <maniac@softwaremaniacs.org>\nContributors: Ilya Baryshev <baryshev@gmail.com>\nWebsite: https://www.djangoproject.com\nCategory: template\n*/\n\n/** @type LanguageFn */\nfunction django(hljs) {\n  const FILTER = {\n    begin: /\\|[A-Za-z]+:?/,\n    keywords: { name:\n        'truncatewords removetags linebreaksbr yesno get_digit timesince random striptags '\n        + 'filesizeformat escape linebreaks length_is ljust rjust cut urlize fix_ampersands '\n        + 'title floatformat capfirst pprint divisibleby add make_list unordered_list urlencode '\n        + 'timeuntil urlizetrunc wordcount stringformat linenumbers slice date dictsort '\n        + 'dictsortreversed default_if_none pluralize lower join center default '\n        + 'truncatewords_html upper length phone2numeric wordwrap time addslashes slugify first '\n        + 'escapejs force_escape iriencode last safe safeseq truncatechars localize unlocalize '\n        + 'localtime utc timezone' },\n    contains: [\n      hljs.QUOTE_STRING_MODE,\n      hljs.APOS_STRING_MODE\n    ]\n  };\n\n  return {\n    name: 'Django',\n    aliases: [ 'jinja' ],\n    case_insensitive: true,\n    subLanguage: 'xml',\n    contains: [\n      hljs.COMMENT(/\\{%\\s*comment\\s*%\\}/, /\\{%\\s*endcomment\\s*%\\}/),\n      hljs.COMMENT(/\\{#/, /#\\}/),\n      {\n        className: 'template-tag',\n        begin: /\\{%/,\n        end: /%\\}/,\n        contains: [\n          {\n            className: 'name',\n            begin: /\\w+/,\n            keywords: { name:\n                'comment endcomment load templatetag ifchanged endifchanged if endif firstof for '\n                + 'endfor ifnotequal endifnotequal widthratio extends include spaceless '\n                + 'endspaceless regroup ifequal endifequal ssi now with cycle url filter '\n                + 'endfilter debug block endblock else autoescape endautoescape csrf_token empty elif '\n                + 'endwith static trans blocktrans endblocktrans get_static_prefix get_media_prefix '\n                + 'plural get_current_language language get_available_languages '\n                + 'get_current_language_bidi get_language_info get_language_info_list localize '\n                + 'endlocalize localtime endlocaltime timezone endtimezone get_current_timezone '\n                + 'verbatim' },\n            starts: {\n              endsWithParent: true,\n              keywords: 'in by as',\n              contains: [ FILTER ],\n              relevance: 0\n            }\n          }\n        ]\n      },\n      {\n        className: 'template-variable',\n        begin: /\\{\\{/,\n        end: /\\}\\}/,\n        contains: [ FILTER ]\n      }\n    ]\n  };\n}\n\nmodule.exports = django;\n","/*\nLanguage: DNS Zone\nAuthor: Tim Schumacher <tim@datenknoten.me>\nCategory: config\nWebsite: https://en.wikipedia.org/wiki/Zone_file\n*/\n\n/** @type LanguageFn */\nfunction dns(hljs) {\n  const KEYWORDS = [\n    \"IN\",\n    \"A\",\n    \"AAAA\",\n    \"AFSDB\",\n    \"APL\",\n    \"CAA\",\n    \"CDNSKEY\",\n    \"CDS\",\n    \"CERT\",\n    \"CNAME\",\n    \"DHCID\",\n    \"DLV\",\n    \"DNAME\",\n    \"DNSKEY\",\n    \"DS\",\n    \"HIP\",\n    \"IPSECKEY\",\n    \"KEY\",\n    \"KX\",\n    \"LOC\",\n    \"MX\",\n    \"NAPTR\",\n    \"NS\",\n    \"NSEC\",\n    \"NSEC3\",\n    \"NSEC3PARAM\",\n    \"PTR\",\n    \"RRSIG\",\n    \"RP\",\n    \"SIG\",\n    \"SOA\",\n    \"SRV\",\n    \"SSHFP\",\n    \"TA\",\n    \"TKEY\",\n    \"TLSA\",\n    \"TSIG\",\n    \"TXT\"\n  ];\n  return {\n    name: 'DNS Zone',\n    aliases: [\n      'bind',\n      'zone'\n    ],\n    keywords: KEYWORDS,\n    contains: [\n      hljs.COMMENT(';', '$', { relevance: 0 }),\n      {\n        className: 'meta',\n        begin: /^\\$(TTL|GENERATE|INCLUDE|ORIGIN)\\b/\n      },\n      // IPv6\n      {\n        className: 'number',\n        begin: '((([0-9A-Fa-f]{1,4}:){7}([0-9A-Fa-f]{1,4}|:))|(([0-9A-Fa-f]{1,4}:){6}(:[0-9A-Fa-f]{1,4}|((25[0-5]|2[0-4]\\\\d|1\\\\d\\\\d|[1-9]?\\\\d)(\\\\.(25[0-5]|2[0-4]\\\\d|1\\\\d\\\\d|[1-9]?\\\\d)){3})|:))|(([0-9A-Fa-f]{1,4}:){5}(((:[0-9A-Fa-f]{1,4}){1,2})|:((25[0-5]|2[0-4]\\\\d|1\\\\d\\\\d|[1-9]?\\\\d)(\\\\.(25[0-5]|2[0-4]\\\\d|1\\\\d\\\\d|[1-9]?\\\\d)){3})|:))|(([0-9A-Fa-f]{1,4}:){4}(((:[0-9A-Fa-f]{1,4}){1,3})|((:[0-9A-Fa-f]{1,4})?:((25[0-5]|2[0-4]\\\\d|1\\\\d\\\\d|[1-9]?\\\\d)(\\\\.(25[0-5]|2[0-4]\\\\d|1\\\\d\\\\d|[1-9]?\\\\d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){3}(((:[0-9A-Fa-f]{1,4}){1,4})|((:[0-9A-Fa-f]{1,4}){0,2}:((25[0-5]|2[0-4]\\\\d|1\\\\d\\\\d|[1-9]?\\\\d)(\\\\.(25[0-5]|2[0-4]\\\\d|1\\\\d\\\\d|[1-9]?\\\\d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){2}(((:[0-9A-Fa-f]{1,4}){1,5})|((:[0-9A-Fa-f]{1,4}){0,3}:((25[0-5]|2[0-4]\\\\d|1\\\\d\\\\d|[1-9]?\\\\d)(\\\\.(25[0-5]|2[0-4]\\\\d|1\\\\d\\\\d|[1-9]?\\\\d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){1}(((:[0-9A-Fa-f]{1,4}){1,6})|((:[0-9A-Fa-f]{1,4}){0,4}:((25[0-5]|2[0-4]\\\\d|1\\\\d\\\\d|[1-9]?\\\\d)(\\\\.(25[0-5]|2[0-4]\\\\d|1\\\\d\\\\d|[1-9]?\\\\d)){3}))|:))|(:(((:[0-9A-Fa-f]{1,4}){1,7})|((:[0-9A-Fa-f]{1,4}){0,5}:((25[0-5]|2[0-4]\\\\d|1\\\\d\\\\d|[1-9]?\\\\d)(\\\\.(25[0-5]|2[0-4]\\\\d|1\\\\d\\\\d|[1-9]?\\\\d)){3}))|:)))\\\\b'\n      },\n      // IPv4\n      {\n        className: 'number',\n        begin: '((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\\\\b'\n      },\n      hljs.inherit(hljs.NUMBER_MODE, { begin: /\\b\\d+[dhwm]?/ })\n    ]\n  };\n}\n\nmodule.exports = dns;\n","/*\nLanguage: Dockerfile\nRequires: bash.js\nAuthor: Alexis Hénaut <alexis@henaut.net>\nDescription: language definition for Dockerfile files\nWebsite: https://docs.docker.com/engine/reference/builder/\nCategory: config\n*/\n\n/** @type LanguageFn */\nfunction dockerfile(hljs) {\n  const KEYWORDS = [\n    \"from\",\n    \"maintainer\",\n    \"expose\",\n    \"env\",\n    \"arg\",\n    \"user\",\n    \"onbuild\",\n    \"stopsignal\"\n  ];\n  return {\n    name: 'Dockerfile',\n    aliases: [ 'docker' ],\n    case_insensitive: true,\n    keywords: KEYWORDS,\n    contains: [\n      hljs.HASH_COMMENT_MODE,\n      hljs.APOS_STRING_MODE,\n      hljs.QUOTE_STRING_MODE,\n      hljs.NUMBER_MODE,\n      {\n        beginKeywords: 'run cmd entrypoint volume add copy workdir label healthcheck shell',\n        starts: {\n          end: /[^\\\\]$/,\n          subLanguage: 'bash'\n        }\n      }\n    ],\n    illegal: '</'\n  };\n}\n\nmodule.exports = dockerfile;\n","/*\nLanguage: Batch file (DOS)\nAuthor: Alexander Makarov <sam@rmcreative.ru>\nContributors: Anton Kochkov <anton.kochkov@gmail.com>\nWebsite: https://en.wikipedia.org/wiki/Batch_file\nCategory: scripting\n*/\n\n/** @type LanguageFn */\nfunction dos(hljs) {\n  const COMMENT = hljs.COMMENT(\n    /^\\s*@?rem\\b/, /$/,\n    { relevance: 10 }\n  );\n  const LABEL = {\n    className: 'symbol',\n    begin: '^\\\\s*[A-Za-z._?][A-Za-z0-9_$#@~.?]*(:|\\\\s+label)',\n    relevance: 0\n  };\n  const KEYWORDS = [\n    \"if\",\n    \"else\",\n    \"goto\",\n    \"for\",\n    \"in\",\n    \"do\",\n    \"call\",\n    \"exit\",\n    \"not\",\n    \"exist\",\n    \"errorlevel\",\n    \"defined\",\n    \"equ\",\n    \"neq\",\n    \"lss\",\n    \"leq\",\n    \"gtr\",\n    \"geq\"\n  ];\n  const BUILT_INS = [\n    \"prn\",\n    \"nul\",\n    \"lpt3\",\n    \"lpt2\",\n    \"lpt1\",\n    \"con\",\n    \"com4\",\n    \"com3\",\n    \"com2\",\n    \"com1\",\n    \"aux\",\n    \"shift\",\n    \"cd\",\n    \"dir\",\n    \"echo\",\n    \"setlocal\",\n    \"endlocal\",\n    \"set\",\n    \"pause\",\n    \"copy\",\n    \"append\",\n    \"assoc\",\n    \"at\",\n    \"attrib\",\n    \"break\",\n    \"cacls\",\n    \"cd\",\n    \"chcp\",\n    \"chdir\",\n    \"chkdsk\",\n    \"chkntfs\",\n    \"cls\",\n    \"cmd\",\n    \"color\",\n    \"comp\",\n    \"compact\",\n    \"convert\",\n    \"date\",\n    \"dir\",\n    \"diskcomp\",\n    \"diskcopy\",\n    \"doskey\",\n    \"erase\",\n    \"fs\",\n    \"find\",\n    \"findstr\",\n    \"format\",\n    \"ftype\",\n    \"graftabl\",\n    \"help\",\n    \"keyb\",\n    \"label\",\n    \"md\",\n    \"mkdir\",\n    \"mode\",\n    \"more\",\n    \"move\",\n    \"path\",\n    \"pause\",\n    \"print\",\n    \"popd\",\n    \"pushd\",\n    \"promt\",\n    \"rd\",\n    \"recover\",\n    \"rem\",\n    \"rename\",\n    \"replace\",\n    \"restore\",\n    \"rmdir\",\n    \"shift\",\n    \"sort\",\n    \"start\",\n    \"subst\",\n    \"time\",\n    \"title\",\n    \"tree\",\n    \"type\",\n    \"ver\",\n    \"verify\",\n    \"vol\",\n    // winutils\n    \"ping\",\n    \"net\",\n    \"ipconfig\",\n    \"taskkill\",\n    \"xcopy\",\n    \"ren\",\n    \"del\"\n  ];\n  return {\n    name: 'Batch file (DOS)',\n    aliases: [\n      'bat',\n      'cmd'\n    ],\n    case_insensitive: true,\n    illegal: /\\/\\*/,\n    keywords: {\n      keyword: KEYWORDS,\n      built_in: BUILT_INS\n    },\n    contains: [\n      {\n        className: 'variable',\n        begin: /%%[^ ]|%[^ ]+?%|![^ ]+?!/\n      },\n      {\n        className: 'function',\n        begin: LABEL.begin,\n        end: 'goto:eof',\n        contains: [\n          hljs.inherit(hljs.TITLE_MODE, { begin: '([_a-zA-Z]\\\\w*\\\\.)*([_a-zA-Z]\\\\w*:)?[_a-zA-Z]\\\\w*' }),\n          COMMENT\n        ]\n      },\n      {\n        className: 'number',\n        begin: '\\\\b\\\\d+',\n        relevance: 0\n      },\n      COMMENT\n    ]\n  };\n}\n\nmodule.exports = dos;\n","/*\n Language: dsconfig\n Description: dsconfig batch configuration language for LDAP directory servers\n Contributors: Jacob Childress <jacobc@gmail.com>\n Category: enterprise, config\n */\n\n/** @type LanguageFn */\nfunction dsconfig(hljs) {\n  const QUOTED_PROPERTY = {\n    className: 'string',\n    begin: /\"/,\n    end: /\"/\n  };\n  const APOS_PROPERTY = {\n    className: 'string',\n    begin: /'/,\n    end: /'/\n  };\n  const UNQUOTED_PROPERTY = {\n    className: 'string',\n    begin: /[\\w\\-?]+:\\w+/,\n    end: /\\W/,\n    relevance: 0\n  };\n  const VALUELESS_PROPERTY = {\n    className: 'string',\n    begin: /\\w+(\\-\\w+)*/,\n    end: /(?=\\W)/,\n    relevance: 0\n  };\n\n  return {\n    keywords: 'dsconfig',\n    contains: [\n      {\n        className: 'keyword',\n        begin: '^dsconfig',\n        end: /\\s/,\n        excludeEnd: true,\n        relevance: 10\n      },\n      {\n        className: 'built_in',\n        begin: /(list|create|get|set|delete)-(\\w+)/,\n        end: /\\s/,\n        excludeEnd: true,\n        illegal: '!@#$%^&*()',\n        relevance: 10\n      },\n      {\n        className: 'built_in',\n        begin: /--(\\w+)/,\n        end: /\\s/,\n        excludeEnd: true\n      },\n      QUOTED_PROPERTY,\n      APOS_PROPERTY,\n      UNQUOTED_PROPERTY,\n      VALUELESS_PROPERTY,\n      hljs.HASH_COMMENT_MODE\n    ]\n  };\n}\n\nmodule.exports = dsconfig;\n","/*\nLanguage: Device Tree\nDescription: *.dts files used in the Linux kernel\nAuthor: Martin Braun <martin.braun@ettus.com>, Moritz Fischer <moritz.fischer@ettus.com>\nWebsite: https://elinux.org/Device_Tree_Reference\nCategory: config\n*/\n\n/** @type LanguageFn */\nfunction dts(hljs) {\n  const STRINGS = {\n    className: 'string',\n    variants: [\n      hljs.inherit(hljs.QUOTE_STRING_MODE, { begin: '((u8?|U)|L)?\"' }),\n      {\n        begin: '(u8?|U)?R\"',\n        end: '\"',\n        contains: [ hljs.BACKSLASH_ESCAPE ]\n      },\n      {\n        begin: '\\'\\\\\\\\?.',\n        end: '\\'',\n        illegal: '.'\n      }\n    ]\n  };\n\n  const NUMBERS = {\n    className: 'number',\n    variants: [\n      { begin: '\\\\b(\\\\d+(\\\\.\\\\d*)?|\\\\.\\\\d+)(u|U|l|L|ul|UL|f|F)' },\n      { begin: hljs.C_NUMBER_RE }\n    ],\n    relevance: 0\n  };\n\n  const PREPROCESSOR = {\n    className: 'meta',\n    begin: '#',\n    end: '$',\n    keywords: { keyword: 'if else elif endif define undef ifdef ifndef' },\n    contains: [\n      {\n        begin: /\\\\\\n/,\n        relevance: 0\n      },\n      {\n        beginKeywords: 'include',\n        end: '$',\n        keywords: { keyword: 'include' },\n        contains: [\n          hljs.inherit(STRINGS, { className: 'string' }),\n          {\n            className: 'string',\n            begin: '<',\n            end: '>',\n            illegal: '\\\\n'\n          }\n        ]\n      },\n      STRINGS,\n      hljs.C_LINE_COMMENT_MODE,\n      hljs.C_BLOCK_COMMENT_MODE\n    ]\n  };\n\n  const REFERENCE = {\n    className: 'variable',\n    begin: /&[a-z\\d_]*\\b/\n  };\n\n  const KEYWORD = {\n    className: 'keyword',\n    begin: '/[a-z][a-z\\\\d-]*/'\n  };\n\n  const LABEL = {\n    className: 'symbol',\n    begin: '^\\\\s*[a-zA-Z_][a-zA-Z\\\\d_]*:'\n  };\n\n  const CELL_PROPERTY = {\n    className: 'params',\n    relevance: 0,\n    begin: '<',\n    end: '>',\n    contains: [\n      NUMBERS,\n      REFERENCE\n    ]\n  };\n\n  const NODE = {\n    className: 'title.class',\n    begin: /[a-zA-Z_][a-zA-Z\\d_@-]*(?=\\s\\{)/,\n    relevance: 0.2\n  };\n\n  const ROOT_NODE = {\n    className: 'title.class',\n    begin: /^\\/(?=\\s*\\{)/,\n    relevance: 10\n  };\n\n  // TODO: `attribute` might be the right scope here, unsure\n  // I'm not sure if all these key names have semantic meaning or not\n  const ATTR_NO_VALUE = {\n    match: /[a-z][a-z-,]+(?=;)/,\n    relevance: 0,\n    scope: \"attr\"\n  };\n  const ATTR = {\n    relevance: 0,\n    match: [\n      /[a-z][a-z-,]+/,\n      /\\s*/,\n      /=/\n    ],\n    scope: {\n      1: \"attr\",\n      3: \"operator\"\n    }\n  };\n\n  const PUNC = {\n    scope: \"punctuation\",\n    relevance: 0,\n    // `};` combined is just to avoid tons of useless punctuation nodes\n    match: /\\};|[;{}]/\n  };\n\n  return {\n    name: 'Device Tree',\n    contains: [\n      ROOT_NODE,\n      REFERENCE,\n      KEYWORD,\n      LABEL,\n      NODE,\n      ATTR,\n      ATTR_NO_VALUE,\n      CELL_PROPERTY,\n      hljs.C_LINE_COMMENT_MODE,\n      hljs.C_BLOCK_COMMENT_MODE,\n      NUMBERS,\n      STRINGS,\n      PREPROCESSOR,\n      PUNC,\n      {\n        begin: hljs.IDENT_RE + '::',\n        keywords: \"\"\n      }\n    ]\n  };\n}\n\nmodule.exports = dts;\n","/*\nLanguage: Dust\nRequires: xml.js\nAuthor: Michael Allen <michael.allen@benefitfocus.com>\nDescription: Matcher for dust.js templates.\nWebsite: https://www.dustjs.com\nCategory: template\n*/\n\n/** @type LanguageFn */\nfunction dust(hljs) {\n  const EXPRESSION_KEYWORDS = 'if eq ne lt lte gt gte select default math sep';\n  return {\n    name: 'Dust',\n    aliases: [ 'dst' ],\n    case_insensitive: true,\n    subLanguage: 'xml',\n    contains: [\n      {\n        className: 'template-tag',\n        begin: /\\{[#\\/]/,\n        end: /\\}/,\n        illegal: /;/,\n        contains: [\n          {\n            className: 'name',\n            begin: /[a-zA-Z\\.-]+/,\n            starts: {\n              endsWithParent: true,\n              relevance: 0,\n              contains: [ hljs.QUOTE_STRING_MODE ]\n            }\n          }\n        ]\n      },\n      {\n        className: 'template-variable',\n        begin: /\\{/,\n        end: /\\}/,\n        illegal: /;/,\n        keywords: EXPRESSION_KEYWORDS\n      }\n    ]\n  };\n}\n\nmodule.exports = dust;\n","/*\nLanguage: Extended Backus-Naur Form\nAuthor: Alex McKibben <alex@nullscope.net>\nWebsite: https://en.wikipedia.org/wiki/Extended_Backus–Naur_form\nCategory: syntax\n*/\n\n/** @type LanguageFn */\nfunction ebnf(hljs) {\n  const commentMode = hljs.COMMENT(/\\(\\*/, /\\*\\)/);\n\n  const nonTerminalMode = {\n    className: \"attribute\",\n    begin: /^[ ]*[a-zA-Z]+([\\s_-]+[a-zA-Z]+)*/\n  };\n\n  const specialSequenceMode = {\n    className: \"meta\",\n    begin: /\\?.*\\?/\n  };\n\n  const ruleBodyMode = {\n    begin: /=/,\n    end: /[.;]/,\n    contains: [\n      commentMode,\n      specialSequenceMode,\n      {\n        // terminals\n        className: 'string',\n        variants: [\n          hljs.APOS_STRING_MODE,\n          hljs.QUOTE_STRING_MODE,\n          {\n            begin: '`',\n            end: '`'\n          }\n        ]\n      }\n    ]\n  };\n\n  return {\n    name: 'Extended Backus-Naur Form',\n    illegal: /\\S/,\n    contains: [\n      commentMode,\n      nonTerminalMode,\n      ruleBodyMode\n    ]\n  };\n}\n\nmodule.exports = ebnf;\n","/*\nLanguage: Elixir\nAuthor: Josh Adams <josh@isotope11.com>\nDescription: language definition for Elixir source code files (.ex and .exs).  Based on ruby language support.\nCategory: functional\nWebsite: https://elixir-lang.org\n*/\n\n/** @type LanguageFn */\nfunction elixir(hljs) {\n  const regex = hljs.regex;\n  const ELIXIR_IDENT_RE = '[a-zA-Z_][a-zA-Z0-9_.]*(!|\\\\?)?';\n  const ELIXIR_METHOD_RE = '[a-zA-Z_]\\\\w*[!?=]?|[-+~]@|<<|>>|=~|===?|<=>|[<>]=?|\\\\*\\\\*|[-/+%^&*~`|]|\\\\[\\\\]=?';\n  const KEYWORDS = [\n    \"after\",\n    \"alias\",\n    \"and\",\n    \"case\",\n    \"catch\",\n    \"cond\",\n    \"defstruct\",\n    \"defguard\",\n    \"do\",\n    \"else\",\n    \"end\",\n    \"fn\",\n    \"for\",\n    \"if\",\n    \"import\",\n    \"in\",\n    \"not\",\n    \"or\",\n    \"quote\",\n    \"raise\",\n    \"receive\",\n    \"require\",\n    \"reraise\",\n    \"rescue\",\n    \"try\",\n    \"unless\",\n    \"unquote\",\n    \"unquote_splicing\",\n    \"use\",\n    \"when\",\n    \"with|0\"\n  ];\n  const LITERALS = [\n    \"false\",\n    \"nil\",\n    \"true\"\n  ];\n  const KWS = {\n    $pattern: ELIXIR_IDENT_RE,\n    keyword: KEYWORDS,\n    literal: LITERALS\n  };\n  const SUBST = {\n    className: 'subst',\n    begin: /#\\{/,\n    end: /\\}/,\n    keywords: KWS\n  };\n  const NUMBER = {\n    className: 'number',\n    begin: '(\\\\b0o[0-7_]+)|(\\\\b0b[01_]+)|(\\\\b0x[0-9a-fA-F_]+)|(-?\\\\b[0-9][0-9_]*(\\\\.[0-9_]+([eE][-+]?[0-9]+)?)?)',\n    relevance: 0\n  };\n  // TODO: could be tightened\n  // https://elixir-lang.readthedocs.io/en/latest/intro/18.html\n  // but you also need to include closing delemeters in the escape list per\n  // individual sigil mode from what I can tell,\n  // ie: \\} might or might not be an escape depending on the sigil used\n  const ESCAPES_RE = /\\\\[\\s\\S]/;\n  // const ESCAPES_RE = /\\\\[\"'\\\\abdefnrstv0]/;\n  const BACKSLASH_ESCAPE = {\n    match: ESCAPES_RE,\n    scope: \"char.escape\",\n    relevance: 0\n  };\n  const SIGIL_DELIMITERS = '[/|([{<\"\\']';\n  const SIGIL_DELIMITER_MODES = [\n    {\n      begin: /\"/,\n      end: /\"/\n    },\n    {\n      begin: /'/,\n      end: /'/\n    },\n    {\n      begin: /\\//,\n      end: /\\//\n    },\n    {\n      begin: /\\|/,\n      end: /\\|/\n    },\n    {\n      begin: /\\(/,\n      end: /\\)/\n    },\n    {\n      begin: /\\[/,\n      end: /\\]/\n    },\n    {\n      begin: /\\{/,\n      end: /\\}/\n    },\n    {\n      begin: /</,\n      end: />/\n    }\n  ];\n  const escapeSigilEnd = (end) => {\n    return {\n      scope: \"char.escape\",\n      begin: regex.concat(/\\\\/, end),\n      relevance: 0\n    };\n  };\n  const LOWERCASE_SIGIL = {\n    className: 'string',\n    begin: '~[a-z]' + '(?=' + SIGIL_DELIMITERS + ')',\n    contains: SIGIL_DELIMITER_MODES.map(x => hljs.inherit(x,\n      { contains: [\n        escapeSigilEnd(x.end),\n        BACKSLASH_ESCAPE,\n        SUBST\n      ] }\n    ))\n  };\n\n  const UPCASE_SIGIL = {\n    className: 'string',\n    begin: '~[A-Z]' + '(?=' + SIGIL_DELIMITERS + ')',\n    contains: SIGIL_DELIMITER_MODES.map(x => hljs.inherit(x,\n      { contains: [ escapeSigilEnd(x.end) ] }\n    ))\n  };\n\n  const REGEX_SIGIL = {\n    className: 'regex',\n    variants: [\n      {\n        begin: '~r' + '(?=' + SIGIL_DELIMITERS + ')',\n        contains: SIGIL_DELIMITER_MODES.map(x => hljs.inherit(x,\n          {\n            end: regex.concat(x.end, /[uismxfU]{0,7}/),\n            contains: [\n              escapeSigilEnd(x.end),\n              BACKSLASH_ESCAPE,\n              SUBST\n            ]\n          }\n        ))\n      },\n      {\n        begin: '~R' + '(?=' + SIGIL_DELIMITERS + ')',\n        contains: SIGIL_DELIMITER_MODES.map(x => hljs.inherit(x,\n          {\n            end: regex.concat(x.end, /[uismxfU]{0,7}/),\n            contains: [ escapeSigilEnd(x.end) ]\n          })\n        )\n      }\n    ]\n  };\n\n  const STRING = {\n    className: 'string',\n    contains: [\n      hljs.BACKSLASH_ESCAPE,\n      SUBST\n    ],\n    variants: [\n      {\n        begin: /\"\"\"/,\n        end: /\"\"\"/\n      },\n      {\n        begin: /'''/,\n        end: /'''/\n      },\n      {\n        begin: /~S\"\"\"/,\n        end: /\"\"\"/,\n        contains: [] // override default\n      },\n      {\n        begin: /~S\"/,\n        end: /\"/,\n        contains: [] // override default\n      },\n      {\n        begin: /~S'''/,\n        end: /'''/,\n        contains: [] // override default\n      },\n      {\n        begin: /~S'/,\n        end: /'/,\n        contains: [] // override default\n      },\n      {\n        begin: /'/,\n        end: /'/\n      },\n      {\n        begin: /\"/,\n        end: /\"/\n      }\n    ]\n  };\n  const FUNCTION = {\n    className: 'function',\n    beginKeywords: 'def defp defmacro defmacrop',\n    end: /\\B\\b/, // the mode is ended by the title\n    contains: [\n      hljs.inherit(hljs.TITLE_MODE, {\n        begin: ELIXIR_IDENT_RE,\n        endsParent: true\n      })\n    ]\n  };\n  const CLASS = hljs.inherit(FUNCTION, {\n    className: 'class',\n    beginKeywords: 'defimpl defmodule defprotocol defrecord',\n    end: /\\bdo\\b|$|;/\n  });\n  const ELIXIR_DEFAULT_CONTAINS = [\n    STRING,\n    REGEX_SIGIL,\n    UPCASE_SIGIL,\n    LOWERCASE_SIGIL,\n    hljs.HASH_COMMENT_MODE,\n    CLASS,\n    FUNCTION,\n    { begin: '::' },\n    {\n      className: 'symbol',\n      begin: ':(?![\\\\s:])',\n      contains: [\n        STRING,\n        { begin: ELIXIR_METHOD_RE }\n      ],\n      relevance: 0\n    },\n    {\n      className: 'symbol',\n      begin: ELIXIR_IDENT_RE + ':(?!:)',\n      relevance: 0\n    },\n    { // Usage of a module, struct, etc.\n      className: 'title.class',\n      begin: /(\\b[A-Z][a-zA-Z0-9_]+)/,\n      relevance: 0\n    },\n    NUMBER,\n    {\n      className: 'variable',\n      begin: '(\\\\$\\\\W)|((\\\\$|@@?)(\\\\w+))'\n    }\n    // -> has been removed, capnproto always uses this grammar construct\n  ];\n  SUBST.contains = ELIXIR_DEFAULT_CONTAINS;\n\n  return {\n    name: 'Elixir',\n    aliases: [\n      'ex',\n      'exs'\n    ],\n    keywords: KWS,\n    contains: ELIXIR_DEFAULT_CONTAINS\n  };\n}\n\nmodule.exports = elixir;\n","/*\nLanguage: Elm\nAuthor: Janis Voigtlaender <janis.voigtlaender@gmail.com>\nWebsite: https://elm-lang.org\nCategory: functional\n*/\n\n/** @type LanguageFn */\nfunction elm(hljs) {\n  const COMMENT = { variants: [\n    hljs.COMMENT('--', '$'),\n    hljs.COMMENT(\n      /\\{-/,\n      /-\\}/,\n      { contains: [ 'self' ] }\n    )\n  ] };\n\n  const CONSTRUCTOR = {\n    className: 'type',\n    begin: '\\\\b[A-Z][\\\\w\\']*', // TODO: other constructors (built-in, infix).\n    relevance: 0\n  };\n\n  const LIST = {\n    begin: '\\\\(',\n    end: '\\\\)',\n    illegal: '\"',\n    contains: [\n      {\n        className: 'type',\n        begin: '\\\\b[A-Z][\\\\w]*(\\\\((\\\\.\\\\.|,|\\\\w+)\\\\))?'\n      },\n      COMMENT\n    ]\n  };\n\n  const RECORD = {\n    begin: /\\{/,\n    end: /\\}/,\n    contains: LIST.contains\n  };\n\n  const CHARACTER = {\n    className: 'string',\n    begin: '\\'\\\\\\\\?.',\n    end: '\\'',\n    illegal: '.'\n  };\n\n  const KEYWORDS = [\n    \"let\",\n    \"in\",\n    \"if\",\n    \"then\",\n    \"else\",\n    \"case\",\n    \"of\",\n    \"where\",\n    \"module\",\n    \"import\",\n    \"exposing\",\n    \"type\",\n    \"alias\",\n    \"as\",\n    \"infix\",\n    \"infixl\",\n    \"infixr\",\n    \"port\",\n    \"effect\",\n    \"command\",\n    \"subscription\"\n  ];\n\n  return {\n    name: 'Elm',\n    keywords: KEYWORDS,\n    contains: [\n\n      // Top-level constructions.\n\n      {\n        beginKeywords: 'port effect module',\n        end: 'exposing',\n        keywords: 'port effect module where command subscription exposing',\n        contains: [\n          LIST,\n          COMMENT\n        ],\n        illegal: '\\\\W\\\\.|;'\n      },\n      {\n        begin: 'import',\n        end: '$',\n        keywords: 'import as exposing',\n        contains: [\n          LIST,\n          COMMENT\n        ],\n        illegal: '\\\\W\\\\.|;'\n      },\n      {\n        begin: 'type',\n        end: '$',\n        keywords: 'type alias',\n        contains: [\n          CONSTRUCTOR,\n          LIST,\n          RECORD,\n          COMMENT\n        ]\n      },\n      {\n        beginKeywords: 'infix infixl infixr',\n        end: '$',\n        contains: [\n          hljs.C_NUMBER_MODE,\n          COMMENT\n        ]\n      },\n      {\n        begin: 'port',\n        end: '$',\n        keywords: 'port',\n        contains: [ COMMENT ]\n      },\n\n      // Literals and names.\n      CHARACTER,\n      hljs.QUOTE_STRING_MODE,\n      hljs.C_NUMBER_MODE,\n      CONSTRUCTOR,\n      hljs.inherit(hljs.TITLE_MODE, { begin: '^[_a-z][\\\\w\\']*' }),\n      COMMENT,\n\n      { // No markup, relevance booster\n        begin: '->|<-' }\n    ],\n    illegal: /;/\n  };\n}\n\nmodule.exports = elm;\n","/*\nLanguage: Ruby\nDescription: Ruby is a dynamic, open source programming language with a focus on simplicity and productivity.\nWebsite: https://www.ruby-lang.org/\nAuthor: Anton Kovalyov <anton@kovalyov.net>\nContributors: Peter Leonov <gojpeg@yandex.ru>, Vasily Polovnyov <vast@whiteants.net>, Loren Segal <lsegal@soen.ca>, Pascal Hurni <phi@ruby-reactive.org>, Cedric Sohrauer <sohrauer@googlemail.com>\nCategory: common, scripting\n*/\n\nfunction ruby(hljs) {\n  const regex = hljs.regex;\n  const RUBY_METHOD_RE = '([a-zA-Z_]\\\\w*[!?=]?|[-+~]@|<<|>>|=~|===?|<=>|[<>]=?|\\\\*\\\\*|[-/+%^&*~`|]|\\\\[\\\\]=?)';\n  // TODO: move concepts like CAMEL_CASE into `modes.js`\n  const CLASS_NAME_RE = regex.either(\n    /\\b([A-Z]+[a-z0-9]+)+/,\n    // ends in caps\n    /\\b([A-Z]+[a-z0-9]+)+[A-Z]+/,\n  )\n  ;\n  const CLASS_NAME_WITH_NAMESPACE_RE = regex.concat(CLASS_NAME_RE, /(::\\w+)*/);\n  // very popular ruby built-ins that one might even assume\n  // are actual keywords (despite that not being the case)\n  const PSEUDO_KWS = [\n    \"include\",\n    \"extend\",\n    \"prepend\",\n    \"public\",\n    \"private\",\n    \"protected\",\n    \"raise\",\n    \"throw\"\n  ];\n  const RUBY_KEYWORDS = {\n    \"variable.constant\": [\n      \"__FILE__\",\n      \"__LINE__\",\n      \"__ENCODING__\"\n    ],\n    \"variable.language\": [\n      \"self\",\n      \"super\",\n    ],\n    keyword: [\n      \"alias\",\n      \"and\",\n      \"begin\",\n      \"BEGIN\",\n      \"break\",\n      \"case\",\n      \"class\",\n      \"defined\",\n      \"do\",\n      \"else\",\n      \"elsif\",\n      \"end\",\n      \"END\",\n      \"ensure\",\n      \"for\",\n      \"if\",\n      \"in\",\n      \"module\",\n      \"next\",\n      \"not\",\n      \"or\",\n      \"redo\",\n      \"require\",\n      \"rescue\",\n      \"retry\",\n      \"return\",\n      \"then\",\n      \"undef\",\n      \"unless\",\n      \"until\",\n      \"when\",\n      \"while\",\n      \"yield\",\n      ...PSEUDO_KWS\n    ],\n    built_in: [\n      \"proc\",\n      \"lambda\",\n      \"attr_accessor\",\n      \"attr_reader\",\n      \"attr_writer\",\n      \"define_method\",\n      \"private_constant\",\n      \"module_function\"\n    ],\n    literal: [\n      \"true\",\n      \"false\",\n      \"nil\"\n    ]\n  };\n  const YARDOCTAG = {\n    className: 'doctag',\n    begin: '@[A-Za-z]+'\n  };\n  const IRB_OBJECT = {\n    begin: '#<',\n    end: '>'\n  };\n  const COMMENT_MODES = [\n    hljs.COMMENT(\n      '#',\n      '$',\n      { contains: [ YARDOCTAG ] }\n    ),\n    hljs.COMMENT(\n      '^=begin',\n      '^=end',\n      {\n        contains: [ YARDOCTAG ],\n        relevance: 10\n      }\n    ),\n    hljs.COMMENT('^__END__', hljs.MATCH_NOTHING_RE)\n  ];\n  const SUBST = {\n    className: 'subst',\n    begin: /#\\{/,\n    end: /\\}/,\n    keywords: RUBY_KEYWORDS\n  };\n  const STRING = {\n    className: 'string',\n    contains: [\n      hljs.BACKSLASH_ESCAPE,\n      SUBST\n    ],\n    variants: [\n      {\n        begin: /'/,\n        end: /'/\n      },\n      {\n        begin: /\"/,\n        end: /\"/\n      },\n      {\n        begin: /`/,\n        end: /`/\n      },\n      {\n        begin: /%[qQwWx]?\\(/,\n        end: /\\)/\n      },\n      {\n        begin: /%[qQwWx]?\\[/,\n        end: /\\]/\n      },\n      {\n        begin: /%[qQwWx]?\\{/,\n        end: /\\}/\n      },\n      {\n        begin: /%[qQwWx]?</,\n        end: />/\n      },\n      {\n        begin: /%[qQwWx]?\\//,\n        end: /\\//\n      },\n      {\n        begin: /%[qQwWx]?%/,\n        end: /%/\n      },\n      {\n        begin: /%[qQwWx]?-/,\n        end: /-/\n      },\n      {\n        begin: /%[qQwWx]?\\|/,\n        end: /\\|/\n      },\n      // in the following expressions, \\B in the beginning suppresses recognition of ?-sequences\n      // where ? is the last character of a preceding identifier, as in: `func?4`\n      { begin: /\\B\\?(\\\\\\d{1,3})/ },\n      { begin: /\\B\\?(\\\\x[A-Fa-f0-9]{1,2})/ },\n      { begin: /\\B\\?(\\\\u\\{?[A-Fa-f0-9]{1,6}\\}?)/ },\n      { begin: /\\B\\?(\\\\M-\\\\C-|\\\\M-\\\\c|\\\\c\\\\M-|\\\\M-|\\\\C-\\\\M-)[\\x20-\\x7e]/ },\n      { begin: /\\B\\?\\\\(c|C-)[\\x20-\\x7e]/ },\n      { begin: /\\B\\?\\\\?\\S/ },\n      // heredocs\n      {\n        // this guard makes sure that we have an entire heredoc and not a false\n        // positive (auto-detect, etc.)\n        begin: regex.concat(\n          /<<[-~]?'?/,\n          regex.lookahead(/(\\w+)(?=\\W)[^\\n]*\\n(?:[^\\n]*\\n)*?\\s*\\1\\b/)\n        ),\n        contains: [\n          hljs.END_SAME_AS_BEGIN({\n            begin: /(\\w+)/,\n            end: /(\\w+)/,\n            contains: [\n              hljs.BACKSLASH_ESCAPE,\n              SUBST\n            ]\n          })\n        ]\n      }\n    ]\n  };\n\n  // Ruby syntax is underdocumented, but this grammar seems to be accurate\n  // as of version 2.7.2 (confirmed with (irb and `Ripper.sexp(...)`)\n  // https://docs.ruby-lang.org/en/2.7.0/doc/syntax/literals_rdoc.html#label-Numbers\n  const decimal = '[1-9](_?[0-9])*|0';\n  const digits = '[0-9](_?[0-9])*';\n  const NUMBER = {\n    className: 'number',\n    relevance: 0,\n    variants: [\n      // decimal integer/float, optionally exponential or rational, optionally imaginary\n      { begin: `\\\\b(${decimal})(\\\\.(${digits}))?([eE][+-]?(${digits})|r)?i?\\\\b` },\n\n      // explicit decimal/binary/octal/hexadecimal integer,\n      // optionally rational and/or imaginary\n      { begin: \"\\\\b0[dD][0-9](_?[0-9])*r?i?\\\\b\" },\n      { begin: \"\\\\b0[bB][0-1](_?[0-1])*r?i?\\\\b\" },\n      { begin: \"\\\\b0[oO][0-7](_?[0-7])*r?i?\\\\b\" },\n      { begin: \"\\\\b0[xX][0-9a-fA-F](_?[0-9a-fA-F])*r?i?\\\\b\" },\n\n      // 0-prefixed implicit octal integer, optionally rational and/or imaginary\n      { begin: \"\\\\b0(_?[0-7])+r?i?\\\\b\" }\n    ]\n  };\n\n  const PARAMS = {\n    variants: [\n      {\n        match: /\\(\\)/,\n      },\n      {\n        className: 'params',\n        begin: /\\(/,\n        end: /(?=\\))/,\n        excludeBegin: true,\n        endsParent: true,\n        keywords: RUBY_KEYWORDS,\n      }\n    ]\n  };\n\n  const INCLUDE_EXTEND = {\n    match: [\n      /(include|extend)\\s+/,\n      CLASS_NAME_WITH_NAMESPACE_RE\n    ],\n    scope: {\n      2: \"title.class\"\n    },\n    keywords: RUBY_KEYWORDS\n  };\n\n  const CLASS_DEFINITION = {\n    variants: [\n      {\n        match: [\n          /class\\s+/,\n          CLASS_NAME_WITH_NAMESPACE_RE,\n          /\\s+<\\s+/,\n          CLASS_NAME_WITH_NAMESPACE_RE\n        ]\n      },\n      {\n        match: [\n          /\\b(class|module)\\s+/,\n          CLASS_NAME_WITH_NAMESPACE_RE\n        ]\n      }\n    ],\n    scope: {\n      2: \"title.class\",\n      4: \"title.class.inherited\"\n    },\n    keywords: RUBY_KEYWORDS\n  };\n\n  const UPPER_CASE_CONSTANT = {\n    relevance: 0,\n    match: /\\b[A-Z][A-Z_0-9]+\\b/,\n    className: \"variable.constant\"\n  };\n\n  const METHOD_DEFINITION = {\n    match: [\n      /def/, /\\s+/,\n      RUBY_METHOD_RE\n    ],\n    scope: {\n      1: \"keyword\",\n      3: \"title.function\"\n    },\n    contains: [\n      PARAMS\n    ]\n  };\n\n  const OBJECT_CREATION = {\n    relevance: 0,\n    match: [\n      CLASS_NAME_WITH_NAMESPACE_RE,\n      /\\.new[. (]/\n    ],\n    scope: {\n      1: \"title.class\"\n    }\n  };\n\n  // CamelCase\n  const CLASS_REFERENCE = {\n    relevance: 0,\n    match: CLASS_NAME_RE,\n    scope: \"title.class\"\n  };\n\n  const RUBY_DEFAULT_CONTAINS = [\n    STRING,\n    CLASS_DEFINITION,\n    INCLUDE_EXTEND,\n    OBJECT_CREATION,\n    UPPER_CASE_CONSTANT,\n    CLASS_REFERENCE,\n    METHOD_DEFINITION,\n    {\n      // swallow namespace qualifiers before symbols\n      begin: hljs.IDENT_RE + '::' },\n    {\n      className: 'symbol',\n      begin: hljs.UNDERSCORE_IDENT_RE + '(!|\\\\?)?:',\n      relevance: 0\n    },\n    {\n      className: 'symbol',\n      begin: ':(?!\\\\s)',\n      contains: [\n        STRING,\n        { begin: RUBY_METHOD_RE }\n      ],\n      relevance: 0\n    },\n    NUMBER,\n    {\n      // negative-look forward attempts to prevent false matches like:\n      // @ident@ or $ident$ that might indicate this is not ruby at all\n      className: \"variable\",\n      begin: '(\\\\$\\\\W)|((\\\\$|@@?)(\\\\w+))(?=[^@$?])' + `(?![A-Za-z])(?![@$?'])`\n    },\n    {\n      className: 'params',\n      begin: /\\|(?!=)/,\n      end: /\\|/,\n      excludeBegin: true,\n      excludeEnd: true,\n      relevance: 0, // this could be a lot of things (in other languages) other than params\n      keywords: RUBY_KEYWORDS\n    },\n    { // regexp container\n      begin: '(' + hljs.RE_STARTERS_RE + '|unless)\\\\s*',\n      keywords: 'unless',\n      contains: [\n        {\n          className: 'regexp',\n          contains: [\n            hljs.BACKSLASH_ESCAPE,\n            SUBST\n          ],\n          illegal: /\\n/,\n          variants: [\n            {\n              begin: '/',\n              end: '/[a-z]*'\n            },\n            {\n              begin: /%r\\{/,\n              end: /\\}[a-z]*/\n            },\n            {\n              begin: '%r\\\\(',\n              end: '\\\\)[a-z]*'\n            },\n            {\n              begin: '%r!',\n              end: '![a-z]*'\n            },\n            {\n              begin: '%r\\\\[',\n              end: '\\\\][a-z]*'\n            }\n          ]\n        }\n      ].concat(IRB_OBJECT, COMMENT_MODES),\n      relevance: 0\n    }\n  ].concat(IRB_OBJECT, COMMENT_MODES);\n\n  SUBST.contains = RUBY_DEFAULT_CONTAINS;\n  PARAMS.contains = RUBY_DEFAULT_CONTAINS;\n\n  // >>\n  // ?>\n  const SIMPLE_PROMPT = \"[>?]>\";\n  // irb(main):001:0>\n  const DEFAULT_PROMPT = \"[\\\\w#]+\\\\(\\\\w+\\\\):\\\\d+:\\\\d+[>*]\";\n  const RVM_PROMPT = \"(\\\\w+-)?\\\\d+\\\\.\\\\d+\\\\.\\\\d+(p\\\\d+)?[^\\\\d][^>]+>\";\n\n  const IRB_DEFAULT = [\n    {\n      begin: /^\\s*=>/,\n      starts: {\n        end: '$',\n        contains: RUBY_DEFAULT_CONTAINS\n      }\n    },\n    {\n      className: 'meta.prompt',\n      begin: '^(' + SIMPLE_PROMPT + \"|\" + DEFAULT_PROMPT + '|' + RVM_PROMPT + ')(?=[ ])',\n      starts: {\n        end: '$',\n        keywords: RUBY_KEYWORDS,\n        contains: RUBY_DEFAULT_CONTAINS\n      }\n    }\n  ];\n\n  COMMENT_MODES.unshift(IRB_OBJECT);\n\n  return {\n    name: 'Ruby',\n    aliases: [\n      'rb',\n      'gemspec',\n      'podspec',\n      'thor',\n      'irb'\n    ],\n    keywords: RUBY_KEYWORDS,\n    illegal: /\\/\\*/,\n    contains: [ hljs.SHEBANG({ binary: \"ruby\" }) ]\n      .concat(IRB_DEFAULT)\n      .concat(COMMENT_MODES)\n      .concat(RUBY_DEFAULT_CONTAINS)\n  };\n}\n\nmodule.exports = ruby;\n","/*\nLanguage: ERB (Embedded Ruby)\nRequires: xml.js, ruby.js\nAuthor: Lucas Mazza <lucastmazza@gmail.com>\nContributors: Kassio Borges <kassioborgesm@gmail.com>\nDescription: \"Bridge\" language defining fragments of Ruby in HTML within <% .. %>\nWebsite: https://ruby-doc.org/stdlib-2.6.5/libdoc/erb/rdoc/ERB.html\nCategory: template\n*/\n\n/** @type LanguageFn */\nfunction erb(hljs) {\n  return {\n    name: 'ERB',\n    subLanguage: 'xml',\n    contains: [\n      hljs.COMMENT('<%#', '%>'),\n      {\n        begin: '<%[%=-]?',\n        end: '[%-]?%>',\n        subLanguage: 'ruby',\n        excludeBegin: true,\n        excludeEnd: true\n      }\n    ]\n  };\n}\n\nmodule.exports = erb;\n","/*\nLanguage: Erlang REPL\nAuthor: Sergey Ignatov <sergey@ignatov.spb.su>\nWebsite: https://www.erlang.org\nCategory: functional\n*/\n\n/** @type LanguageFn */\nfunction erlangRepl(hljs) {\n  const regex = hljs.regex;\n  return {\n    name: 'Erlang REPL',\n    keywords: {\n      built_in:\n        'spawn spawn_link self',\n      keyword:\n        'after and andalso|10 band begin bnot bor bsl bsr bxor case catch cond div end fun if '\n        + 'let not of or orelse|10 query receive rem try when xor'\n    },\n    contains: [\n      {\n        className: 'meta.prompt',\n        begin: '^[0-9]+> ',\n        relevance: 10\n      },\n      hljs.COMMENT('%', '$'),\n      {\n        className: 'number',\n        begin: '\\\\b(\\\\d+(_\\\\d+)*#[a-fA-F0-9]+(_[a-fA-F0-9]+)*|\\\\d+(_\\\\d+)*(\\\\.\\\\d+(_\\\\d+)*)?([eE][-+]?\\\\d+)?)',\n        relevance: 0\n      },\n      hljs.APOS_STRING_MODE,\n      hljs.QUOTE_STRING_MODE,\n      { begin: regex.concat(\n        /\\?(::)?/,\n        /([A-Z]\\w*)/, // at least one identifier\n        /((::)[A-Z]\\w*)*/ // perhaps more\n      ) },\n      { begin: '->' },\n      { begin: 'ok' },\n      { begin: '!' },\n      {\n        begin: '(\\\\b[a-z\\'][a-zA-Z0-9_\\']*:[a-z\\'][a-zA-Z0-9_\\']*)|(\\\\b[a-z\\'][a-zA-Z0-9_\\']*)',\n        relevance: 0\n      },\n      {\n        begin: '[A-Z][a-zA-Z0-9_\\']*',\n        relevance: 0\n      }\n    ]\n  };\n}\n\nmodule.exports = erlangRepl;\n","/*\nLanguage: Erlang\nDescription: Erlang is a general-purpose functional language, with strict evaluation, single assignment, and dynamic typing.\nAuthor: Nikolay Zakharov <nikolay.desh@gmail.com>, Dmitry Kovega <arhibot@gmail.com>\nWebsite: https://www.erlang.org\nCategory: functional\n*/\n\n/** @type LanguageFn */\nfunction erlang(hljs) {\n  const BASIC_ATOM_RE = '[a-z\\'][a-zA-Z0-9_\\']*';\n  const FUNCTION_NAME_RE = '(' + BASIC_ATOM_RE + ':' + BASIC_ATOM_RE + '|' + BASIC_ATOM_RE + ')';\n  const ERLANG_RESERVED = {\n    keyword:\n      'after and andalso|10 band begin bnot bor bsl bzr bxor case catch cond div end fun if '\n      + 'let not of orelse|10 query receive rem try when xor maybe else',\n    literal:\n      'false true'\n  };\n\n  const COMMENT = hljs.COMMENT('%', '$');\n  const NUMBER = {\n    className: 'number',\n    begin: '\\\\b(\\\\d+(_\\\\d+)*#[a-fA-F0-9]+(_[a-fA-F0-9]+)*|\\\\d+(_\\\\d+)*(\\\\.\\\\d+(_\\\\d+)*)?([eE][-+]?\\\\d+)?)',\n    relevance: 0\n  };\n  const NAMED_FUN = { begin: 'fun\\\\s+' + BASIC_ATOM_RE + '/\\\\d+' };\n  const FUNCTION_CALL = {\n    begin: FUNCTION_NAME_RE + '\\\\(',\n    end: '\\\\)',\n    returnBegin: true,\n    relevance: 0,\n    contains: [\n      {\n        begin: FUNCTION_NAME_RE,\n        relevance: 0\n      },\n      {\n        begin: '\\\\(',\n        end: '\\\\)',\n        endsWithParent: true,\n        returnEnd: true,\n        relevance: 0\n        // \"contains\" defined later\n      }\n    ]\n  };\n  const TUPLE = {\n    begin: /\\{/,\n    end: /\\}/,\n    relevance: 0\n    // \"contains\" defined later\n  };\n  const VAR1 = {\n    begin: '\\\\b_([A-Z][A-Za-z0-9_]*)?',\n    relevance: 0\n  };\n  const VAR2 = {\n    begin: '[A-Z][a-zA-Z0-9_]*',\n    relevance: 0\n  };\n  const RECORD_ACCESS = {\n    begin: '#' + hljs.UNDERSCORE_IDENT_RE,\n    relevance: 0,\n    returnBegin: true,\n    contains: [\n      {\n        begin: '#' + hljs.UNDERSCORE_IDENT_RE,\n        relevance: 0\n      },\n      {\n        begin: /\\{/,\n        end: /\\}/,\n        relevance: 0\n        // \"contains\" defined later\n      }\n    ]\n  };\n  const CHAR_LITERAL = {\n    scope: 'string',\n    match: /\\$(\\\\([^0-9]|[0-9]{1,3}|)|.)/,\n  };\n  const TRIPLE_QUOTE = {\n    scope: 'string',\n    match: /\"\"\"(\"*)(?!\")[\\s\\S]*?\"\"\"\\1/,\n  };\n\n  const SIGIL = {\n    scope: 'string',\n    contains: [ hljs.BACKSLASH_ESCAPE ],\n    variants: [\n      {match: /~\\w?\"\"\"(\"*)(?!\")[\\s\\S]*?\"\"\"\\1/},\n      {begin: /~\\w?\\(/, end: /\\)/},\n      {begin: /~\\w?\\[/, end: /\\]/},\n      {begin: /~\\w?{/, end: /}/},\n      {begin: /~\\w?</, end: />/},\n      {begin: /~\\w?\\//, end: /\\//},\n      {begin: /~\\w?\\|/, end: /\\|/},\n      {begin: /~\\w?'/, end: /'/},\n      {begin: /~\\w?\"/, end: /\"/},\n      {begin: /~\\w?`/, end: /`/},\n      {begin: /~\\w?#/, end: /#/},\n    ],\n  };\n\n  const BLOCK_STATEMENTS = {\n    beginKeywords: 'fun receive if try case maybe',\n    end: 'end',\n    keywords: ERLANG_RESERVED\n  };\n  BLOCK_STATEMENTS.contains = [\n    COMMENT,\n    NAMED_FUN,\n    hljs.inherit(hljs.APOS_STRING_MODE, { className: '' }),\n    BLOCK_STATEMENTS,\n    FUNCTION_CALL,\n    SIGIL,\n    TRIPLE_QUOTE,\n    hljs.QUOTE_STRING_MODE,\n    NUMBER,\n    TUPLE,\n    VAR1,\n    VAR2,\n    RECORD_ACCESS,\n    CHAR_LITERAL\n  ];\n\n  const BASIC_MODES = [\n    COMMENT,\n    NAMED_FUN,\n    BLOCK_STATEMENTS,\n    FUNCTION_CALL,\n    SIGIL,\n    TRIPLE_QUOTE,\n    hljs.QUOTE_STRING_MODE,\n    NUMBER,\n    TUPLE,\n    VAR1,\n    VAR2,\n    RECORD_ACCESS,\n    CHAR_LITERAL\n  ];\n  FUNCTION_CALL.contains[1].contains = BASIC_MODES;\n  TUPLE.contains = BASIC_MODES;\n  RECORD_ACCESS.contains[1].contains = BASIC_MODES;\n\n  const DIRECTIVES = [\n    \"-module\",\n    \"-record\",\n    \"-undef\",\n    \"-export\",\n    \"-ifdef\",\n    \"-ifndef\",\n    \"-author\",\n    \"-copyright\",\n    \"-doc\",\n    \"-moduledoc\",\n    \"-vsn\",\n    \"-import\",\n    \"-include\",\n    \"-include_lib\",\n    \"-compile\",\n    \"-define\",\n    \"-else\",\n    \"-endif\",\n    \"-file\",\n    \"-behaviour\",\n    \"-behavior\",\n    \"-spec\",\n    \"-on_load\",\n    \"-nifs\",\n  ];\n\n  const PARAMS = {\n    className: 'params',\n    begin: '\\\\(',\n    end: '\\\\)',\n    contains: BASIC_MODES\n  };\n\n  return {\n    name: 'Erlang',\n    aliases: [ 'erl' ],\n    keywords: ERLANG_RESERVED,\n    illegal: '(</|\\\\*=|\\\\+=|-=|/\\\\*|\\\\*/|\\\\(\\\\*|\\\\*\\\\))',\n    contains: [\n      {\n        className: 'function',\n        begin: '^' + BASIC_ATOM_RE + '\\\\s*\\\\(',\n        end: '->',\n        returnBegin: true,\n        illegal: '\\\\(|#|//|/\\\\*|\\\\\\\\|:|;',\n        contains: [\n          PARAMS,\n          hljs.inherit(hljs.TITLE_MODE, { begin: BASIC_ATOM_RE })\n        ],\n        starts: {\n          end: ';|\\\\.',\n          keywords: ERLANG_RESERVED,\n          contains: BASIC_MODES\n        }\n      },\n      COMMENT,\n      {\n        begin: '^-',\n        end: '\\\\.',\n        relevance: 0,\n        excludeEnd: true,\n        returnBegin: true,\n        keywords: {\n          $pattern: '-' + hljs.IDENT_RE,\n          keyword: DIRECTIVES.map(x => `${x}|1.5`).join(\" \")\n        },\n        contains: [\n          PARAMS,\n          SIGIL,\n          TRIPLE_QUOTE,\n          hljs.QUOTE_STRING_MODE\n        ]\n      },\n      NUMBER,\n      SIGIL,\n      TRIPLE_QUOTE,\n      hljs.QUOTE_STRING_MODE,\n      RECORD_ACCESS,\n      VAR1,\n      VAR2,\n      TUPLE,\n      CHAR_LITERAL,\n      { begin: /\\.$/ } // relevance booster\n    ]\n  };\n}\n\nmodule.exports = erlang;\n","/*\nLanguage: Excel formulae\nAuthor: Victor Zhou <OiCMudkips@users.noreply.github.com>\nDescription: Excel formulae\nWebsite: https://products.office.com/en-us/excel/\nCategory: enterprise\n*/\n\n/** @type LanguageFn */\nfunction excel(hljs) {\n  // built-in functions imported from https://web.archive.org/web/20241205190205/https://support.microsoft.com/en-us/office/excel-functions-alphabetical-b3944572-255d-4efb-bb96-c6d90033e188\n  const BUILT_INS = [\n    \"ABS\",\n    \"ACCRINT\",\n    \"ACCRINTM\",\n    \"ACOS\",\n    \"ACOSH\",\n    \"ACOT\",\n    \"ACOTH\",\n    \"AGGREGATE\",\n    \"ADDRESS\",\n    \"AMORDEGRC\",\n    \"AMORLINC\",\n    \"AND\",\n    \"ARABIC\",\n    \"AREAS\",\n    \"ARRAYTOTEXT\",\n    \"ASC\",\n    \"ASIN\",\n    \"ASINH\",\n    \"ATAN\",\n    \"ATAN2\",\n    \"ATANH\",\n    \"AVEDEV\",\n    \"AVERAGE\",\n    \"AVERAGEA\",\n    \"AVERAGEIF\",\n    \"AVERAGEIFS\",\n    \"BAHTTEXT\",\n    \"BASE\",\n    \"BESSELI\",\n    \"BESSELJ\",\n    \"BESSELK\",\n    \"BESSELY\",\n    \"BETADIST\",\n    \"BETA.DIST\",\n    \"BETAINV\",\n    \"BETA.INV\",\n    \"BIN2DEC\",\n    \"BIN2HEX\",\n    \"BIN2OCT\",\n    \"BINOMDIST\",\n    \"BINOM.DIST\",\n    \"BINOM.DIST.RANGE\",\n    \"BINOM.INV\",\n    \"BITAND\",\n    \"BITLSHIFT\",\n    \"BITOR\",\n    \"BITRSHIFT\",\n    \"BITXOR\",\n    \"BYCOL\",\n    \"BYROW\",\n    \"CALL\",\n    \"CEILING\",\n    \"CEILING.MATH\",\n    \"CEILING.PRECISE\",\n    \"CELL\",\n    \"CHAR\",\n    \"CHIDIST\",\n    \"CHIINV\",\n    \"CHITEST\",\n    \"CHISQ.DIST\",\n    \"CHISQ.DIST.RT\",\n    \"CHISQ.INV\",\n    \"CHISQ.INV.RT\",\n    \"CHISQ.TEST\",\n    \"CHOOSE\",\n    \"CHOOSECOLS\",\n    \"CHOOSEROWS\",\n    \"CLEAN\",\n    \"CODE\",\n    \"COLUMN\",\n    \"COLUMNS\",\n    \"COMBIN\",\n    \"COMBINA\",\n    \"COMPLEX\",\n    \"CONCAT\",\n    \"CONCATENATE\",\n    \"CONFIDENCE\",\n    \"CONFIDENCE.NORM\",\n    \"CONFIDENCE.T\",\n    \"CONVERT\",\n    \"CORREL\",\n    \"COS\",\n    \"COSH\",\n    \"COT\",\n    \"COTH\",\n    \"COUNT\",\n    \"COUNTA\",\n    \"COUNTBLANK\",\n    \"COUNTIF\",\n    \"COUNTIFS\",\n    \"COUPDAYBS\",\n    \"COUPDAYS\",\n    \"COUPDAYSNC\",\n    \"COUPNCD\",\n    \"COUPNUM\",\n    \"COUPPCD\",\n    \"COVAR\",\n    \"COVARIANCE.P\",\n    \"COVARIANCE.S\",\n    \"CRITBINOM\",\n    \"CSC\",\n    \"CSCH\",\n    \"CUBEKPIMEMBER\",\n    \"CUBEMEMBER\",\n    \"CUBEMEMBERPROPERTY\",\n    \"CUBERANKEDMEMBER\",\n    \"CUBESET\",\n    \"CUBESETCOUNT\",\n    \"CUBEVALUE\",\n    \"CUMIPMT\",\n    \"CUMPRINC\",\n    \"DATE\",\n    \"DATEDIF\",\n    \"DATEVALUE\",\n    \"DAVERAGE\",\n    \"DAY\",\n    \"DAYS\",\n    \"DAYS360\",\n    \"DB\",\n    \"DBCS\",\n    \"DCOUNT\",\n    \"DCOUNTA\",\n    \"DDB\",\n    \"DEC2BIN\",\n    \"DEC2HEX\",\n    \"DEC2OCT\",\n    \"DECIMAL\",\n    \"DEGREES\",\n    \"DELTA\",\n    \"DEVSQ\",\n    \"DGET\",\n    \"DISC\",\n    \"DMAX\",\n    \"DMIN\",\n    \"DOLLAR\",\n    \"DOLLARDE\",\n    \"DOLLARFR\",\n    \"DPRODUCT\",\n    \"DROP\",\n    \"DSTDEV\",\n    \"DSTDEVP\",\n    \"DSUM\",\n    \"DURATION\",\n    \"DVAR\",\n    \"DVARP\",\n    \"EDATE\",\n    \"EFFECT\",\n    \"ENCODEURL\",\n    \"EOMONTH\",\n    \"ERF\",\n    \"ERF.PRECISE\",\n    \"ERFC\",\n    \"ERFC.PRECISE\",\n    \"ERROR.TYPE\",\n    \"EUROCONVERT\",\n    \"EVEN\",\n    \"EXACT\",\n    \"EXP\",\n    \"EXPAND\",\n    \"EXPON.DIST\",\n    \"EXPONDIST\",\n    \"FACT\",\n    \"FACTDOUBLE\",\n    \"FALSE\",\n    \"F.DIST\",\n    \"FDIST\",\n    \"F.DIST.RT\",\n    \"FILTER\",\n    \"FILTERXML\",\n    \"FIND\",\n    \"FINDB\",\n    \"F.INV\",\n    \"F.INV.RT\",\n    \"FINV\",\n    \"FISHER\",\n    \"FISHERINV\",\n    \"FIXED\",\n    \"FLOOR\",\n    \"FLOOR.MATH\",\n    \"FLOOR.PRECISE\",\n    \"FORECAST\",\n    \"FORECAST.ETS\",\n    \"FORECAST.ETS.CONFINT\",\n    \"FORECAST.ETS.SEASONALITY\",\n    \"FORECAST.ETS.STAT\",\n    \"FORECAST.LINEAR\",\n    \"FORMULATEXT\",\n    \"FREQUENCY\",\n    \"F.TEST\",\n    \"FTEST\",\n    \"FV\",\n    \"FVSCHEDULE\",\n    \"GAMMA\",\n    \"GAMMA.DIST\",\n    \"GAMMADIST\",\n    \"GAMMA.INV\",\n    \"GAMMAINV\",\n    \"GAMMALN\",\n    \"GAMMALN.PRECISE\",\n    \"GAUSS\",\n    \"GCD\",\n    \"GEOMEAN\",\n    \"GESTEP\",\n    \"GETPIVOTDATA\",\n    \"GROWTH\",\n    \"HARMEAN\",\n    \"HEX2BIN\",\n    \"HEX2DEC\",\n    \"HEX2OCT\",\n    \"HLOOKUP\",\n    \"HOUR\",\n    \"HSTACK\",\n    \"HYPERLINK\",\n    \"HYPGEOM.DIST\",\n    \"HYPGEOMDIST\",\n    \"IF\",\n    \"IFERROR\",\n    \"IFNA\",\n    \"IFS\",\n    \"IMABS\",\n    \"IMAGE\",\n    \"IMAGINARY\",\n    \"IMARGUMENT\",\n    \"IMCONJUGATE\",\n    \"IMCOS\",\n    \"IMCOSH\",\n    \"IMCOT\",\n    \"IMCSC\",\n    \"IMCSCH\",\n    \"IMDIV\",\n    \"IMEXP\",\n    \"IMLN\",\n    \"IMLOG10\",\n    \"IMLOG2\",\n    \"IMPOWER\",\n    \"IMPRODUCT\",\n    \"IMREAL\",\n    \"IMSEC\",\n    \"IMSECH\",\n    \"IMSIN\",\n    \"IMSINH\",\n    \"IMSQRT\",\n    \"IMSUB\",\n    \"IMSUM\",\n    \"IMTAN\",\n    \"INDEX\",\n    \"INDIRECT\",\n    \"INFO\",\n    \"INT\",\n    \"INTERCEPT\",\n    \"INTRATE\",\n    \"IPMT\",\n    \"IRR\",\n    \"ISBLANK\",\n    \"ISERR\",\n    \"ISERROR\",\n    \"ISEVEN\",\n    \"ISFORMULA\",\n    \"ISLOGICAL\",\n    \"ISNA\",\n    \"ISNONTEXT\",\n    \"ISNUMBER\",\n    \"ISODD\",\n    \"ISOMITTED\",\n    \"ISREF\",\n    \"ISTEXT\",\n    \"ISO.CEILING\",\n    \"ISOWEEKNUM\",\n    \"ISPMT\",\n    \"JIS\",\n    \"KURT\",\n    \"LAMBDA\",\n    \"LARGE\",\n    \"LCM\",\n    \"LEFT\",\n    \"LEFTB\",\n    \"LEN\",\n    \"LENB\",\n    \"LET\",\n    \"LINEST\",\n    \"LN\",\n    \"LOG\",\n    \"LOG10\",\n    \"LOGEST\",\n    \"LOGINV\",\n    \"LOGNORM.DIST\",\n    \"LOGNORMDIST\",\n    \"LOGNORM.INV\",\n    \"LOOKUP\",\n    \"LOWER\",\n    \"MAKEARRAY\",\n    \"MAP\",\n    \"MATCH\",\n    \"MAX\",\n    \"MAXA\",\n    \"MAXIFS\",\n    \"MDETERM\",\n    \"MDURATION\",\n    \"MEDIAN\",\n    \"MID\",\n    \"MIDB\",\n    \"MIN\",\n    \"MINIFS\",\n    \"MINA\",\n    \"MINUTE\",\n    \"MINVERSE\",\n    \"MIRR\",\n    \"MMULT\",\n    \"MOD\",\n    \"MODE\",\n    \"MODE.MULT\",\n    \"MODE.SNGL\",\n    \"MONTH\",\n    \"MROUND\",\n    \"MULTINOMIAL\",\n    \"MUNIT\",\n    \"N\",\n    \"NA\",\n    \"NEGBINOM.DIST\",\n    \"NEGBINOMDIST\",\n    \"NETWORKDAYS\",\n    \"NETWORKDAYS.INTL\",\n    \"NOMINAL\",\n    \"NORM.DIST\",\n    \"NORMDIST\",\n    \"NORMINV\",\n    \"NORM.INV\",\n    \"NORM.S.DIST\",\n    \"NORMSDIST\",\n    \"NORM.S.INV\",\n    \"NORMSINV\",\n    \"NOT\",\n    \"NOW\",\n    \"NPER\",\n    \"NPV\",\n    \"NUMBERVALUE\",\n    \"OCT2BIN\",\n    \"OCT2DEC\",\n    \"OCT2HEX\",\n    \"ODD\",\n    \"ODDFPRICE\",\n    \"ODDFYIELD\",\n    \"ODDLPRICE\",\n    \"ODDLYIELD\",\n    \"OFFSET\",\n    \"OR\",\n    \"PDURATION\",\n    \"PEARSON\",\n    \"PERCENTILE.EXC\",\n    \"PERCENTILE.INC\",\n    \"PERCENTILE\",\n    \"PERCENTRANK.EXC\",\n    \"PERCENTRANK.INC\",\n    \"PERCENTRANK\",\n    \"PERMUT\",\n    \"PERMUTATIONA\",\n    \"PHI\",\n    \"PHONETIC\",\n    \"PI\",\n    \"PMT\",\n    \"POISSON.DIST\",\n    \"POISSON\",\n    \"POWER\",\n    \"PPMT\",\n    \"PRICE\",\n    \"PRICEDISC\",\n    \"PRICEMAT\",\n    \"PROB\",\n    \"PRODUCT\",\n    \"PROPER\",\n    \"PV\",\n    \"QUARTILE\",\n    \"QUARTILE.EXC\",\n    \"QUARTILE.INC\",\n    \"QUOTIENT\",\n    \"RADIANS\",\n    \"RAND\",\n    \"RANDARRAY\",\n    \"RANDBETWEEN\",\n    \"RANK.AVG\",\n    \"RANK.EQ\",\n    \"RANK\",\n    \"RATE\",\n    \"RECEIVED\",\n    \"REDUCE\",\n    \"REGISTER.ID\",\n    \"REPLACE\",\n    \"REPLACEB\",\n    \"REPT\",\n    \"RIGHT\",\n    \"RIGHTB\",\n    \"ROMAN\",\n    \"ROUND\",\n    \"ROUNDDOWN\",\n    \"ROUNDUP\",\n    \"ROW\",\n    \"ROWS\",\n    \"RRI\",\n    \"RSQ\",\n    \"RTD\",\n    \"SCAN\",\n    \"SEARCH\",\n    \"SEARCHB\",\n    \"SEC\",\n    \"SECH\",\n    \"SECOND\",\n    \"SEQUENCE\",\n    \"SERIESSUM\",\n    \"SHEET\",\n    \"SHEETS\",\n    \"SIGN\",\n    \"SIN\",\n    \"SINH\",\n    \"SKEW\",\n    \"SKEW.P\",\n    \"SLN\",\n    \"SLOPE\",\n    \"SMALL\",\n    \"SORT\",\n    \"SORTBY\",\n    \"SQRT\",\n    \"SQRTPI\",\n    \"SQL.REQUEST\",\n    \"STANDARDIZE\",\n    \"STOCKHISTORY\",\n    \"STDEV\",\n    \"STDEV.P\",\n    \"STDEV.S\",\n    \"STDEVA\",\n    \"STDEVP\",\n    \"STDEVPA\",\n    \"STEYX\",\n    \"SUBSTITUTE\",\n    \"SUBTOTAL\",\n    \"SUM\",\n    \"SUMIF\",\n    \"SUMIFS\",\n    \"SUMPRODUCT\",\n    \"SUMSQ\",\n    \"SUMX2MY2\",\n    \"SUMX2PY2\",\n    \"SUMXMY2\",\n    \"SWITCH\",\n    \"SYD\",\n    \"T\",\n    \"TAN\",\n    \"TANH\",\n    \"TAKE\",\n    \"TBILLEQ\",\n    \"TBILLPRICE\",\n    \"TBILLYIELD\",\n    \"T.DIST\",\n    \"T.DIST.2T\",\n    \"T.DIST.RT\",\n    \"TDIST\",\n    \"TEXT\",\n    \"TEXTAFTER\",\n    \"TEXTBEFORE\",\n    \"TEXTJOIN\",\n    \"TEXTSPLIT\",\n    \"TIME\",\n    \"TIMEVALUE\",\n    \"T.INV\",\n    \"T.INV.2T\",\n    \"TINV\",\n    \"TOCOL\",\n    \"TOROW\",\n    \"TODAY\",\n    \"TRANSPOSE\",\n    \"TREND\",\n    \"TRIM\",\n    \"TRIMMEAN\",\n    \"TRUE\",\n    \"TRUNC\",\n    \"T.TEST\",\n    \"TTEST\",\n    \"TYPE\",\n    \"UNICHAR\",\n    \"UNICODE\",\n    \"UNIQUE\",\n    \"UPPER\",\n    \"VALUE\",\n    \"VALUETOTEXT\",\n    \"VAR\",\n    \"VAR.P\",\n    \"VAR.S\",\n    \"VARA\",\n    \"VARP\",\n    \"VARPA\",\n    \"VDB\",\n    \"VLOOKUP\",\n    \"VSTACK\",\n    \"WEBSERVICE\",\n    \"WEEKDAY\",\n    \"WEEKNUM\",\n    \"WEIBULL\",\n    \"WEIBULL.DIST\",\n    \"WORKDAY\",\n    \"WORKDAY.INTL\",\n    \"WRAPCOLS\",\n    \"WRAPROWS\",\n    \"XIRR\",\n    \"XLOOKUP\",\n    \"XMATCH\",\n    \"XNPV\",\n    \"XOR\",\n    \"YEAR\",\n    \"YEARFRAC\",\n    \"YIELD\",\n    \"YIELDDISC\",\n    \"YIELDMAT\",\n    \"Z.TEST\",\n    \"ZTEST\"\n  ];\n  return {\n    name: 'Excel formulae',\n    aliases: [\n      'xlsx',\n      'xls'\n    ],\n    case_insensitive: true,\n    keywords: {\n      $pattern: /[a-zA-Z][\\w\\.]*/,\n      built_in: BUILT_INS\n    },\n    contains: [\n      {\n        /* matches a beginning equal sign found in Excel formula examples */\n        begin: /^=/,\n        end: /[^=]/,\n        returnEnd: true,\n        illegal: /=/, /* only allow single equal sign at front of line */\n        relevance: 10\n      },\n      /* technically, there can be more than 2 letters in column names, but this prevents conflict with some keywords */\n      {\n        /* matches a reference to a single cell */\n        className: 'symbol',\n        begin: /\\b[A-Z]{1,2}\\d+\\b/,\n        end: /[^\\d]/,\n        excludeEnd: true,\n        relevance: 0\n      },\n      {\n        /* matches a reference to a range of cells */\n        className: 'symbol',\n        begin: /[A-Z]{0,2}\\d*:[A-Z]{0,2}\\d*/,\n        relevance: 0\n      },\n      hljs.BACKSLASH_ESCAPE,\n      hljs.QUOTE_STRING_MODE,\n      {\n        className: 'number',\n        begin: hljs.NUMBER_RE + '(%)?',\n        relevance: 0\n      },\n      /* Excel formula comments are done by putting the comment in a function call to N() */\n      hljs.COMMENT(/\\bN\\(/, /\\)/,\n        {\n          excludeBegin: true,\n          excludeEnd: true,\n          illegal: /\\n/\n        })\n    ]\n  };\n}\n\nmodule.exports = excel;\n","/*\nLanguage: FIX\nAuthor: Brent Bradbury <brent@brentium.com>\n*/\n\n/** @type LanguageFn */\nfunction fix(hljs) {\n  return {\n    name: 'FIX',\n    contains: [\n      {\n        begin: /[^\\u2401\\u0001]+/,\n        end: /[\\u2401\\u0001]/,\n        excludeEnd: true,\n        returnBegin: true,\n        returnEnd: false,\n        contains: [\n          {\n            begin: /([^\\u2401\\u0001=]+)/,\n            end: /=([^\\u2401\\u0001=]+)/,\n            returnEnd: true,\n            returnBegin: false,\n            className: 'attr'\n          },\n          {\n            begin: /=/,\n            end: /([\\u2401\\u0001])/,\n            excludeEnd: true,\n            excludeBegin: true,\n            className: 'string'\n          }\n        ]\n      }\n    ],\n    case_insensitive: true\n  };\n}\n\nmodule.exports = fix;\n","/*\n Language: Flix\n Category: functional\n Author: Magnus Madsen <mmadsen@uwaterloo.ca>\n Website: https://flix.dev/\n */\n\n/** @type LanguageFn */\nfunction flix(hljs) {\n  const CHAR = {\n    className: 'string',\n    begin: /'(.|\\\\[xXuU][a-zA-Z0-9]+)'/\n  };\n\n  const STRING = {\n    className: 'string',\n    variants: [\n      {\n        begin: '\"',\n        end: '\"'\n      }\n    ]\n  };\n\n  const NAME = {\n    className: 'title',\n    relevance: 0,\n    begin: /[^0-9\\n\\t \"'(),.`{}\\[\\]:;][^\\n\\t \"'(),.`{}\\[\\]:;]+|[^0-9\\n\\t \"'(),.`{}\\[\\]:;=]/\n  };\n\n  const METHOD = {\n    className: 'function',\n    beginKeywords: 'def',\n    end: /[:={\\[(\\n;]/,\n    excludeEnd: true,\n    contains: [ NAME ]\n  };\n\n  return {\n    name: 'Flix',\n    keywords: {\n      keyword: [\n        \"case\",\n        \"class\",\n        \"def\",\n        \"else\",\n        \"enum\",\n        \"if\",\n        \"impl\",\n        \"import\",\n        \"in\",\n        \"lat\",\n        \"rel\",\n        \"index\",\n        \"let\",\n        \"match\",\n        \"namespace\",\n        \"switch\",\n        \"type\",\n        \"yield\",\n        \"with\"\n      ],\n      literal: [\n        \"true\",\n        \"false\"\n      ]\n    },\n    contains: [\n      hljs.C_LINE_COMMENT_MODE,\n      hljs.C_BLOCK_COMMENT_MODE,\n      CHAR,\n      STRING,\n      METHOD,\n      hljs.C_NUMBER_MODE\n    ]\n  };\n}\n\nmodule.exports = flix;\n","/*\nLanguage: Fortran\nAuthor: Anthony Scemama <scemama@irsamc.ups-tlse.fr>\nWebsite: https://en.wikipedia.org/wiki/Fortran\nCategory: scientific\n*/\n\n/** @type LanguageFn */\nfunction fortran(hljs) {\n  const regex = hljs.regex;\n  const PARAMS = {\n    className: 'params',\n    begin: '\\\\(',\n    end: '\\\\)'\n  };\n\n  const COMMENT = { variants: [\n    hljs.COMMENT('!', '$', { relevance: 0 }),\n    // allow FORTRAN 77 style comments\n    hljs.COMMENT('^C[ ]', '$', { relevance: 0 }),\n    hljs.COMMENT('^C$', '$', { relevance: 0 })\n  ] };\n\n  // regex in both fortran and irpf90 should match\n  const OPTIONAL_NUMBER_SUFFIX = /(_[a-z_\\d]+)?/;\n  const OPTIONAL_NUMBER_EXP = /([de][+-]?\\d+)?/;\n  const NUMBER = {\n    className: 'number',\n    variants: [\n      { begin: regex.concat(/\\b\\d+/, /\\.(\\d*)/, OPTIONAL_NUMBER_EXP, OPTIONAL_NUMBER_SUFFIX) },\n      { begin: regex.concat(/\\b\\d+/, OPTIONAL_NUMBER_EXP, OPTIONAL_NUMBER_SUFFIX) },\n      { begin: regex.concat(/\\.\\d+/, OPTIONAL_NUMBER_EXP, OPTIONAL_NUMBER_SUFFIX) }\n    ],\n    relevance: 0\n  };\n\n  const FUNCTION_DEF = {\n    className: 'function',\n    beginKeywords: 'subroutine function program',\n    illegal: '[${=\\\\n]',\n    contains: [\n      hljs.UNDERSCORE_TITLE_MODE,\n      PARAMS\n    ]\n  };\n\n  const STRING = {\n    className: 'string',\n    relevance: 0,\n    variants: [\n      hljs.APOS_STRING_MODE,\n      hljs.QUOTE_STRING_MODE\n    ]\n  };\n\n  const KEYWORDS = [\n    \"kind\",\n    \"do\",\n    \"concurrent\",\n    \"local\",\n    \"shared\",\n    \"while\",\n    \"private\",\n    \"call\",\n    \"intrinsic\",\n    \"where\",\n    \"elsewhere\",\n    \"type\",\n    \"endtype\",\n    \"endmodule\",\n    \"endselect\",\n    \"endinterface\",\n    \"end\",\n    \"enddo\",\n    \"endif\",\n    \"if\",\n    \"forall\",\n    \"endforall\",\n    \"only\",\n    \"contains\",\n    \"default\",\n    \"return\",\n    \"stop\",\n    \"then\",\n    \"block\",\n    \"endblock\",\n    \"endassociate\",\n    \"public\",\n    \"subroutine|10\",\n    \"function\",\n    \"program\",\n    \".and.\",\n    \".or.\",\n    \".not.\",\n    \".le.\",\n    \".eq.\",\n    \".ge.\",\n    \".gt.\",\n    \".lt.\",\n    \"goto\",\n    \"save\",\n    \"else\",\n    \"use\",\n    \"module\",\n    \"select\",\n    \"case\",\n    \"access\",\n    \"blank\",\n    \"direct\",\n    \"exist\",\n    \"file\",\n    \"fmt\",\n    \"form\",\n    \"formatted\",\n    \"iostat\",\n    \"name\",\n    \"named\",\n    \"nextrec\",\n    \"number\",\n    \"opened\",\n    \"rec\",\n    \"recl\",\n    \"sequential\",\n    \"status\",\n    \"unformatted\",\n    \"unit\",\n    \"continue\",\n    \"format\",\n    \"pause\",\n    \"cycle\",\n    \"exit\",\n    \"c_null_char\",\n    \"c_alert\",\n    \"c_backspace\",\n    \"c_form_feed\",\n    \"flush\",\n    \"wait\",\n    \"decimal\",\n    \"round\",\n    \"iomsg\",\n    \"synchronous\",\n    \"nopass\",\n    \"non_overridable\",\n    \"pass\",\n    \"protected\",\n    \"volatile\",\n    \"abstract\",\n    \"extends\",\n    \"import\",\n    \"non_intrinsic\",\n    \"value\",\n    \"deferred\",\n    \"generic\",\n    \"final\",\n    \"enumerator\",\n    \"class\",\n    \"associate\",\n    \"bind\",\n    \"enum\",\n    \"c_int\",\n    \"c_short\",\n    \"c_long\",\n    \"c_long_long\",\n    \"c_signed_char\",\n    \"c_size_t\",\n    \"c_int8_t\",\n    \"c_int16_t\",\n    \"c_int32_t\",\n    \"c_int64_t\",\n    \"c_int_least8_t\",\n    \"c_int_least16_t\",\n    \"c_int_least32_t\",\n    \"c_int_least64_t\",\n    \"c_int_fast8_t\",\n    \"c_int_fast16_t\",\n    \"c_int_fast32_t\",\n    \"c_int_fast64_t\",\n    \"c_intmax_t\",\n    \"C_intptr_t\",\n    \"c_float\",\n    \"c_double\",\n    \"c_long_double\",\n    \"c_float_complex\",\n    \"c_double_complex\",\n    \"c_long_double_complex\",\n    \"c_bool\",\n    \"c_char\",\n    \"c_null_ptr\",\n    \"c_null_funptr\",\n    \"c_new_line\",\n    \"c_carriage_return\",\n    \"c_horizontal_tab\",\n    \"c_vertical_tab\",\n    \"iso_c_binding\",\n    \"c_loc\",\n    \"c_funloc\",\n    \"c_associated\",\n    \"c_f_pointer\",\n    \"c_ptr\",\n    \"c_funptr\",\n    \"iso_fortran_env\",\n    \"character_storage_size\",\n    \"error_unit\",\n    \"file_storage_size\",\n    \"input_unit\",\n    \"iostat_end\",\n    \"iostat_eor\",\n    \"numeric_storage_size\",\n    \"output_unit\",\n    \"c_f_procpointer\",\n    \"ieee_arithmetic\",\n    \"ieee_support_underflow_control\",\n    \"ieee_get_underflow_mode\",\n    \"ieee_set_underflow_mode\",\n    \"newunit\",\n    \"contiguous\",\n    \"recursive\",\n    \"pad\",\n    \"position\",\n    \"action\",\n    \"delim\",\n    \"readwrite\",\n    \"eor\",\n    \"advance\",\n    \"nml\",\n    \"interface\",\n    \"procedure\",\n    \"namelist\",\n    \"include\",\n    \"sequence\",\n    \"elemental\",\n    \"pure\",\n    \"impure\",\n    \"integer\",\n    \"real\",\n    \"character\",\n    \"complex\",\n    \"logical\",\n    \"codimension\",\n    \"dimension\",\n    \"allocatable|10\",\n    \"parameter\",\n    \"external\",\n    \"implicit|10\",\n    \"none\",\n    \"double\",\n    \"precision\",\n    \"assign\",\n    \"intent\",\n    \"optional\",\n    \"pointer\",\n    \"target\",\n    \"in\",\n    \"out\",\n    \"common\",\n    \"equivalence\",\n    \"data\"\n  ];\n  const LITERALS = [\n    \".False.\",\n    \".True.\"\n  ];\n  const BUILT_INS = [\n    \"alog\",\n    \"alog10\",\n    \"amax0\",\n    \"amax1\",\n    \"amin0\",\n    \"amin1\",\n    \"amod\",\n    \"cabs\",\n    \"ccos\",\n    \"cexp\",\n    \"clog\",\n    \"csin\",\n    \"csqrt\",\n    \"dabs\",\n    \"dacos\",\n    \"dasin\",\n    \"datan\",\n    \"datan2\",\n    \"dcos\",\n    \"dcosh\",\n    \"ddim\",\n    \"dexp\",\n    \"dint\",\n    \"dlog\",\n    \"dlog10\",\n    \"dmax1\",\n    \"dmin1\",\n    \"dmod\",\n    \"dnint\",\n    \"dsign\",\n    \"dsin\",\n    \"dsinh\",\n    \"dsqrt\",\n    \"dtan\",\n    \"dtanh\",\n    \"float\",\n    \"iabs\",\n    \"idim\",\n    \"idint\",\n    \"idnint\",\n    \"ifix\",\n    \"isign\",\n    \"max0\",\n    \"max1\",\n    \"min0\",\n    \"min1\",\n    \"sngl\",\n    \"algama\",\n    \"cdabs\",\n    \"cdcos\",\n    \"cdexp\",\n    \"cdlog\",\n    \"cdsin\",\n    \"cdsqrt\",\n    \"cqabs\",\n    \"cqcos\",\n    \"cqexp\",\n    \"cqlog\",\n    \"cqsin\",\n    \"cqsqrt\",\n    \"dcmplx\",\n    \"dconjg\",\n    \"derf\",\n    \"derfc\",\n    \"dfloat\",\n    \"dgamma\",\n    \"dimag\",\n    \"dlgama\",\n    \"iqint\",\n    \"qabs\",\n    \"qacos\",\n    \"qasin\",\n    \"qatan\",\n    \"qatan2\",\n    \"qcmplx\",\n    \"qconjg\",\n    \"qcos\",\n    \"qcosh\",\n    \"qdim\",\n    \"qerf\",\n    \"qerfc\",\n    \"qexp\",\n    \"qgamma\",\n    \"qimag\",\n    \"qlgama\",\n    \"qlog\",\n    \"qlog10\",\n    \"qmax1\",\n    \"qmin1\",\n    \"qmod\",\n    \"qnint\",\n    \"qsign\",\n    \"qsin\",\n    \"qsinh\",\n    \"qsqrt\",\n    \"qtan\",\n    \"qtanh\",\n    \"abs\",\n    \"acos\",\n    \"aimag\",\n    \"aint\",\n    \"anint\",\n    \"asin\",\n    \"atan\",\n    \"atan2\",\n    \"char\",\n    \"cmplx\",\n    \"conjg\",\n    \"cos\",\n    \"cosh\",\n    \"exp\",\n    \"ichar\",\n    \"index\",\n    \"int\",\n    \"log\",\n    \"log10\",\n    \"max\",\n    \"min\",\n    \"nint\",\n    \"sign\",\n    \"sin\",\n    \"sinh\",\n    \"sqrt\",\n    \"tan\",\n    \"tanh\",\n    \"print\",\n    \"write\",\n    \"dim\",\n    \"lge\",\n    \"lgt\",\n    \"lle\",\n    \"llt\",\n    \"mod\",\n    \"nullify\",\n    \"allocate\",\n    \"deallocate\",\n    \"adjustl\",\n    \"adjustr\",\n    \"all\",\n    \"allocated\",\n    \"any\",\n    \"associated\",\n    \"bit_size\",\n    \"btest\",\n    \"ceiling\",\n    \"count\",\n    \"cshift\",\n    \"date_and_time\",\n    \"digits\",\n    \"dot_product\",\n    \"eoshift\",\n    \"epsilon\",\n    \"exponent\",\n    \"floor\",\n    \"fraction\",\n    \"huge\",\n    \"iand\",\n    \"ibclr\",\n    \"ibits\",\n    \"ibset\",\n    \"ieor\",\n    \"ior\",\n    \"ishft\",\n    \"ishftc\",\n    \"lbound\",\n    \"len_trim\",\n    \"matmul\",\n    \"maxexponent\",\n    \"maxloc\",\n    \"maxval\",\n    \"merge\",\n    \"minexponent\",\n    \"minloc\",\n    \"minval\",\n    \"modulo\",\n    \"mvbits\",\n    \"nearest\",\n    \"pack\",\n    \"present\",\n    \"product\",\n    \"radix\",\n    \"random_number\",\n    \"random_seed\",\n    \"range\",\n    \"repeat\",\n    \"reshape\",\n    \"rrspacing\",\n    \"scale\",\n    \"scan\",\n    \"selected_int_kind\",\n    \"selected_real_kind\",\n    \"set_exponent\",\n    \"shape\",\n    \"size\",\n    \"spacing\",\n    \"spread\",\n    \"sum\",\n    \"system_clock\",\n    \"tiny\",\n    \"transpose\",\n    \"trim\",\n    \"ubound\",\n    \"unpack\",\n    \"verify\",\n    \"achar\",\n    \"iachar\",\n    \"transfer\",\n    \"dble\",\n    \"entry\",\n    \"dprod\",\n    \"cpu_time\",\n    \"command_argument_count\",\n    \"get_command\",\n    \"get_command_argument\",\n    \"get_environment_variable\",\n    \"is_iostat_end\",\n    \"ieee_arithmetic\",\n    \"ieee_support_underflow_control\",\n    \"ieee_get_underflow_mode\",\n    \"ieee_set_underflow_mode\",\n    \"is_iostat_eor\",\n    \"move_alloc\",\n    \"new_line\",\n    \"selected_char_kind\",\n    \"same_type_as\",\n    \"extends_type_of\",\n    \"acosh\",\n    \"asinh\",\n    \"atanh\",\n    \"bessel_j0\",\n    \"bessel_j1\",\n    \"bessel_jn\",\n    \"bessel_y0\",\n    \"bessel_y1\",\n    \"bessel_yn\",\n    \"erf\",\n    \"erfc\",\n    \"erfc_scaled\",\n    \"gamma\",\n    \"log_gamma\",\n    \"hypot\",\n    \"norm2\",\n    \"atomic_define\",\n    \"atomic_ref\",\n    \"execute_command_line\",\n    \"leadz\",\n    \"trailz\",\n    \"storage_size\",\n    \"merge_bits\",\n    \"bge\",\n    \"bgt\",\n    \"ble\",\n    \"blt\",\n    \"dshiftl\",\n    \"dshiftr\",\n    \"findloc\",\n    \"iall\",\n    \"iany\",\n    \"iparity\",\n    \"image_index\",\n    \"lcobound\",\n    \"ucobound\",\n    \"maskl\",\n    \"maskr\",\n    \"num_images\",\n    \"parity\",\n    \"popcnt\",\n    \"poppar\",\n    \"shifta\",\n    \"shiftl\",\n    \"shiftr\",\n    \"this_image\",\n    \"sync\",\n    \"change\",\n    \"team\",\n    \"co_broadcast\",\n    \"co_max\",\n    \"co_min\",\n    \"co_sum\",\n    \"co_reduce\"\n  ];\n  return {\n    name: 'Fortran',\n    case_insensitive: true,\n    aliases: [\n      'f90',\n      'f95'\n    ],\n    keywords: {\n      $pattern: /\\b[a-z][a-z0-9_]+\\b|\\.[a-z][a-z0-9_]+\\./,\n      keyword: KEYWORDS,\n      literal: LITERALS,\n      built_in: BUILT_INS\n    },\n    illegal: /\\/\\*/,\n    contains: [\n      STRING,\n      FUNCTION_DEF,\n      // allow `C = value` for assignments so they aren't misdetected\n      // as Fortran 77 style comments\n      {\n        begin: /^C\\s*=(?!=)/,\n        relevance: 0\n      },\n      COMMENT,\n      NUMBER\n    ]\n  };\n}\n\nmodule.exports = fortran;\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 } re\n * @returns {string}\n */\nfunction lookahead(re) {\n  return concat('(?=', re, ')');\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 { Array<string | RegExp | Object> } args\n * @returns {object}\n */\nfunction stripOptionsFromArgs(args) {\n  const opts = args[args.length - 1];\n\n  if (typeof opts === 'object' && opts.constructor === Object) {\n    args.splice(args.length - 1, 1);\n    return opts;\n  } else {\n    return {};\n  }\n}\n\n/** @typedef { {capture?: boolean} } RegexEitherOptions */\n\n/**\n * Any of the passed expresssions may match\n *\n * Creates a huge this | this | that | that match\n * @param {(RegExp | string)[] | [...(RegExp | string)[], RegexEitherOptions]} args\n * @returns {string}\n */\nfunction either(...args) {\n  /** @type { object & {capture?: boolean} }  */\n  const opts = stripOptionsFromArgs(args);\n  const joined = '('\n    + (opts.capture ? \"\" : \"?:\")\n    + args.map((x) => source(x)).join(\"|\") + \")\";\n  return joined;\n}\n\n/*\nLanguage: F#\nAuthor: Jonas Follesø <jonas@follesoe.no>\nContributors: Troy Kershaw <hello@troykershaw.com>, Henrik Feldt <henrik@haf.se>, Melvyn Laïly <melvyn.laily@gmail.com>\nWebsite: https://docs.microsoft.com/en-us/dotnet/fsharp/\nCategory: functional\n*/\n\n\n/** @type LanguageFn */\nfunction fsharp(hljs) {\n  const KEYWORDS = [\n    \"abstract\",\n    \"and\",\n    \"as\",\n    \"assert\",\n    \"base\",\n    \"begin\",\n    \"class\",\n    \"default\",\n    \"delegate\",\n    \"do\",\n    \"done\",\n    \"downcast\",\n    \"downto\",\n    \"elif\",\n    \"else\",\n    \"end\",\n    \"exception\",\n    \"extern\",\n    // \"false\", // literal\n    \"finally\",\n    \"fixed\",\n    \"for\",\n    \"fun\",\n    \"function\",\n    \"global\",\n    \"if\",\n    \"in\",\n    \"inherit\",\n    \"inline\",\n    \"interface\",\n    \"internal\",\n    \"lazy\",\n    \"let\",\n    \"match\",\n    \"member\",\n    \"module\",\n    \"mutable\",\n    \"namespace\",\n    \"new\",\n    // \"not\", // built_in\n    // \"null\", // literal\n    \"of\",\n    \"open\",\n    \"or\",\n    \"override\",\n    \"private\",\n    \"public\",\n    \"rec\",\n    \"return\",\n    \"static\",\n    \"struct\",\n    \"then\",\n    \"to\",\n    // \"true\", // literal\n    \"try\",\n    \"type\",\n    \"upcast\",\n    \"use\",\n    \"val\",\n    \"void\",\n    \"when\",\n    \"while\",\n    \"with\",\n    \"yield\"\n  ];\n\n  const BANG_KEYWORD_MODE = {\n    // monad builder keywords (matches before non-bang keywords)\n    scope: 'keyword',\n    match: /\\b(yield|return|let|do|match|use)!/\n  };\n\n  const PREPROCESSOR_KEYWORDS = [\n    \"if\",\n    \"else\",\n    \"endif\",\n    \"line\",\n    \"nowarn\",\n    \"light\",\n    \"r\",\n    \"i\",\n    \"I\",\n    \"load\",\n    \"time\",\n    \"help\",\n    \"quit\"\n  ];\n\n  const LITERALS = [\n    \"true\",\n    \"false\",\n    \"null\",\n    \"Some\",\n    \"None\",\n    \"Ok\",\n    \"Error\",\n    \"infinity\",\n    \"infinityf\",\n    \"nan\",\n    \"nanf\"\n  ];\n\n  const SPECIAL_IDENTIFIERS = [\n    \"__LINE__\",\n    \"__SOURCE_DIRECTORY__\",\n    \"__SOURCE_FILE__\"\n  ];\n\n  // Since it's possible to re-bind/shadow names (e.g. let char = 'c'),\n  // these builtin types should only be matched when a type name is expected.\n  const KNOWN_TYPES = [\n    // basic types\n    \"bool\",\n    \"byte\",\n    \"sbyte\",\n    \"int8\",\n    \"int16\",\n    \"int32\",\n    \"uint8\",\n    \"uint16\",\n    \"uint32\",\n    \"int\",\n    \"uint\",\n    \"int64\",\n    \"uint64\",\n    \"nativeint\",\n    \"unativeint\",\n    \"decimal\",\n    \"float\",\n    \"double\",\n    \"float32\",\n    \"single\",\n    \"char\",\n    \"string\",\n    \"unit\",\n    \"bigint\",\n    // other native types or lowercase aliases\n    \"option\",\n    \"voption\",\n    \"list\",\n    \"array\",\n    \"seq\",\n    \"byref\",\n    \"exn\",\n    \"inref\",\n    \"nativeptr\",\n    \"obj\",\n    \"outref\",\n    \"voidptr\",\n    // other important FSharp types\n    \"Result\"\n  ];\n\n  const BUILTINS = [\n    // Somewhat arbitrary list of builtin functions and values.\n    // Most of them are declared in Microsoft.FSharp.Core\n    // I tried to stay relevant by adding only the most idiomatic\n    // and most used symbols that are not already declared as types.\n    \"not\",\n    \"ref\",\n    \"raise\",\n    \"reraise\",\n    \"dict\",\n    \"readOnlyDict\",\n    \"set\",\n    \"get\",\n    \"enum\",\n    \"sizeof\",\n    \"typeof\",\n    \"typedefof\",\n    \"nameof\",\n    \"nullArg\",\n    \"invalidArg\",\n    \"invalidOp\",\n    \"id\",\n    \"fst\",\n    \"snd\",\n    \"ignore\",\n    \"lock\",\n    \"using\",\n    \"box\",\n    \"unbox\",\n    \"tryUnbox\",\n    \"printf\",\n    \"printfn\",\n    \"sprintf\",\n    \"eprintf\",\n    \"eprintfn\",\n    \"fprintf\",\n    \"fprintfn\",\n    \"failwith\",\n    \"failwithf\"\n  ];\n\n  const ALL_KEYWORDS = {\n    keyword: KEYWORDS,\n    literal: LITERALS,\n    built_in: BUILTINS,\n    'variable.constant': SPECIAL_IDENTIFIERS\n  };\n\n  // (* potentially multi-line Meta Language style comment *)\n  const ML_COMMENT =\n    hljs.COMMENT(/\\(\\*(?!\\))/, /\\*\\)/, {\n      contains: [\"self\"]\n    });\n  // Either a multi-line (* Meta Language style comment *) or a single line // C style comment.\n  const COMMENT = {\n    variants: [\n      ML_COMMENT,\n      hljs.C_LINE_COMMENT_MODE,\n    ]\n  };\n\n  // Most identifiers can contain apostrophes\n  const IDENTIFIER_RE = /[a-zA-Z_](\\w|')*/;\n\n  const QUOTED_IDENTIFIER = {\n    scope: 'variable',\n    begin: /``/,\n    end: /``/\n  };\n\n  // 'a or ^a where a can be a ``quoted identifier``\n  const BEGIN_GENERIC_TYPE_SYMBOL_RE = /\\B('|\\^)/;\n  const GENERIC_TYPE_SYMBOL = {\n    scope: 'symbol',\n    variants: [\n      // the type name is a quoted identifier:\n      { match: concat(BEGIN_GENERIC_TYPE_SYMBOL_RE, /``.*?``/) },\n      // the type name is a normal identifier (we don't use IDENTIFIER_RE because there cannot be another apostrophe here):\n      { match: concat(BEGIN_GENERIC_TYPE_SYMBOL_RE, hljs.UNDERSCORE_IDENT_RE) }\n    ],\n    relevance: 0\n  };\n\n  const makeOperatorMode = function({ includeEqual }) {\n    // List or symbolic operator characters from the FSharp Spec 4.1, minus the dot, and with `?` added, used for nullable operators.\n    let allOperatorChars;\n    if (includeEqual)\n      allOperatorChars = \"!%&*+-/<=>@^|~?\";\n    else\n      allOperatorChars = \"!%&*+-/<>@^|~?\";\n    const OPERATOR_CHARS = Array.from(allOperatorChars);\n    const OPERATOR_CHAR_RE = concat('[', ...OPERATOR_CHARS.map(escape), ']');\n    // The lone dot operator is special. It cannot be redefined, and we don't want to highlight it. It can be used as part of a multi-chars operator though.\n    const OPERATOR_CHAR_OR_DOT_RE = either(OPERATOR_CHAR_RE, /\\./);\n    // When a dot is present, it must be followed by another operator char:\n    const OPERATOR_FIRST_CHAR_OF_MULTIPLE_RE = concat(OPERATOR_CHAR_OR_DOT_RE, lookahead(OPERATOR_CHAR_OR_DOT_RE));\n    const SYMBOLIC_OPERATOR_RE = either(\n      concat(OPERATOR_FIRST_CHAR_OF_MULTIPLE_RE, OPERATOR_CHAR_OR_DOT_RE, '*'), // Matches at least 2 chars operators\n      concat(OPERATOR_CHAR_RE, '+'), // Matches at least one char operators\n    );\n    return {\n      scope: 'operator',\n      match: either(\n        // symbolic operators:\n        SYMBOLIC_OPERATOR_RE,\n        // other symbolic keywords:\n        // Type casting and conversion operators:\n        /:\\?>/,\n        /:\\?/,\n        /:>/,\n        /:=/, // Reference cell assignment\n        /::?/, // : or ::\n        /\\$/), // A single $ can be used as an operator\n      relevance: 0\n    };\n  };\n\n  const OPERATOR = makeOperatorMode({ includeEqual: true });\n  // This variant is used when matching '=' should end a parent mode:\n  const OPERATOR_WITHOUT_EQUAL = makeOperatorMode({ includeEqual: false });\n\n  const makeTypeAnnotationMode = function(prefix, prefixScope) {\n    return {\n      begin: concat( // a type annotation is a\n        prefix,            // should be a colon or the 'of' keyword\n        lookahead(   // that has to be followed by\n          concat(\n            /\\s*/,         // optional space\n            either(  // then either of:\n              /\\w/,        // word\n              /'/,         // generic type name\n              /\\^/,        // generic type name\n              /#/,         // flexible type name\n              /``/,        // quoted type name\n              /\\(/,        // parens type expression\n              /{\\|/,       // anonymous type annotation\n      )))),\n      beginScope: prefixScope,\n      // BUG: because ending with \\n is necessary for some cases, multi-line type annotations are not properly supported.\n      // Examples where \\n is required at the end:\n      // - abstract member definitions in classes: abstract Property : int * string\n      // - return type annotations: let f f' = f' () : returnTypeAnnotation\n      // - record fields definitions: { A : int \\n B : string }\n      end: lookahead(\n        either(\n          /\\n/,\n          /=/)),\n      relevance: 0,\n      // we need the known types, and we need the type constraint keywords and literals. e.g.: when 'a : null\n      keywords: hljs.inherit(ALL_KEYWORDS, { type: KNOWN_TYPES }),\n      contains: [\n        COMMENT,\n        GENERIC_TYPE_SYMBOL,\n        hljs.inherit(QUOTED_IDENTIFIER, { scope: null }), // match to avoid strange patterns inside that may break the parsing\n        OPERATOR_WITHOUT_EQUAL\n      ]\n    };\n  };\n\n  const TYPE_ANNOTATION = makeTypeAnnotationMode(/:/, 'operator');\n  const DISCRIMINATED_UNION_TYPE_ANNOTATION = makeTypeAnnotationMode(/\\bof\\b/, 'keyword');\n\n  // type MyType<'a> = ...\n  const TYPE_DECLARATION = {\n    begin: [\n      /(^|\\s+)/, // prevents matching the following: `match s.stype with`\n      /type/,\n      /\\s+/,\n      IDENTIFIER_RE\n    ],\n    beginScope: {\n      2: 'keyword',\n      4: 'title.class'\n    },\n    end: lookahead(/\\(|=|$/),\n    keywords: ALL_KEYWORDS, // match keywords in type constraints. e.g.: when 'a : null\n    contains: [\n      COMMENT,\n      hljs.inherit(QUOTED_IDENTIFIER, { scope: null }), // match to avoid strange patterns inside that may break the parsing\n      GENERIC_TYPE_SYMBOL,\n      {\n        // For visual consistency, highlight type brackets as operators.\n        scope: 'operator',\n        match: /<|>/\n      },\n      TYPE_ANNOTATION // generic types can have constraints, which are type annotations. e.g. type MyType<'T when 'T : delegate<obj * string>> =\n    ]\n  };\n\n  const COMPUTATION_EXPRESSION = {\n    // computation expressions:\n    scope: 'computation-expression',\n    // BUG: might conflict with record deconstruction. e.g. let f { Name = name } = name // will highlight f\n    match: /\\b[_a-z]\\w*(?=\\s*\\{)/\n  };\n\n  const PREPROCESSOR = {\n    // preprocessor directives and fsi commands:\n    begin: [\n      /^\\s*/,\n      concat(/#/, either(...PREPROCESSOR_KEYWORDS)),\n      /\\b/\n    ],\n    beginScope: { 2: 'meta' },\n    end: lookahead(/\\s|$/)\n  };\n\n  // TODO: this definition is missing support for type suffixes and octal notation.\n  // BUG: range operator without any space is wrongly interpreted as a single number (e.g. 1..10 )\n  const NUMBER = {\n    variants: [\n      hljs.BINARY_NUMBER_MODE,\n      hljs.C_NUMBER_MODE\n    ]\n  };\n\n  // All the following string definitions are potentially multi-line.\n  // BUG: these definitions are missing support for byte strings (suffixed with B)\n\n  // \"...\"\n  const QUOTED_STRING = {\n    scope: 'string',\n    begin: /\"/,\n    end: /\"/,\n    contains: [\n      hljs.BACKSLASH_ESCAPE\n    ]\n  };\n  // @\"...\"\n  const VERBATIM_STRING = {\n    scope: 'string',\n    begin: /@\"/,\n    end: /\"/,\n    contains: [\n      {\n        match: /\"\"/ // escaped \"\n      },\n      hljs.BACKSLASH_ESCAPE\n    ]\n  };\n  // \"\"\"...\"\"\"\n  const TRIPLE_QUOTED_STRING = {\n    scope: 'string',\n    begin: /\"\"\"/,\n    end: /\"\"\"/,\n    relevance: 2\n  };\n  const SUBST = {\n    scope: 'subst',\n    begin: /\\{/,\n    end: /\\}/,\n    keywords: ALL_KEYWORDS\n  };\n  // $\"...{1+1}...\"\n  const INTERPOLATED_STRING = {\n    scope: 'string',\n    begin: /\\$\"/,\n    end: /\"/,\n    contains: [\n      {\n        match: /\\{\\{/ // escaped {\n      },\n      {\n        match: /\\}\\}/ // escaped }\n      },\n      hljs.BACKSLASH_ESCAPE,\n      SUBST\n    ]\n  };\n  // $@\"...{1+1}...\"\n  const INTERPOLATED_VERBATIM_STRING = {\n    scope: 'string',\n    begin: /(\\$@|@\\$)\"/,\n    end: /\"/,\n    contains: [\n      {\n        match: /\\{\\{/ // escaped {\n      },\n      {\n        match: /\\}\\}/ // escaped }\n      },\n      {\n        match: /\"\"/\n      },\n      hljs.BACKSLASH_ESCAPE,\n      SUBST\n    ]\n  };\n  // $\"\"\"...{1+1}...\"\"\"\n  const INTERPOLATED_TRIPLE_QUOTED_STRING = {\n    scope: 'string',\n    begin: /\\$\"\"\"/,\n    end: /\"\"\"/,\n    contains: [\n      {\n        match: /\\{\\{/ // escaped {\n      },\n      {\n        match: /\\}\\}/ // escaped }\n      },\n      SUBST\n    ],\n    relevance: 2\n  };\n  // '.'\n  const CHAR_LITERAL = {\n    scope: 'string',\n    match: concat(\n      /'/,\n      either(\n        /[^\\\\']/, // either a single non escaped char...\n        /\\\\(?:.|\\d{3}|x[a-fA-F\\d]{2}|u[a-fA-F\\d]{4}|U[a-fA-F\\d]{8})/ // ...or an escape sequence\n      ),\n      /'/\n    )\n  };\n  // F# allows a lot of things inside string placeholders.\n  // Things that don't currently seem allowed by the compiler: types definition, attributes usage.\n  // (Strictly speaking, some of the followings are only allowed inside triple quoted interpolated strings...)\n  SUBST.contains = [\n    INTERPOLATED_VERBATIM_STRING,\n    INTERPOLATED_STRING,\n    VERBATIM_STRING,\n    QUOTED_STRING,\n    CHAR_LITERAL,\n    BANG_KEYWORD_MODE,\n    COMMENT,\n    QUOTED_IDENTIFIER,\n    TYPE_ANNOTATION,\n    COMPUTATION_EXPRESSION,\n    PREPROCESSOR,\n    NUMBER,\n    GENERIC_TYPE_SYMBOL,\n    OPERATOR\n  ];\n  const STRING = {\n    variants: [\n      INTERPOLATED_TRIPLE_QUOTED_STRING,\n      INTERPOLATED_VERBATIM_STRING,\n      INTERPOLATED_STRING,\n      TRIPLE_QUOTED_STRING,\n      VERBATIM_STRING,\n      QUOTED_STRING,\n      CHAR_LITERAL\n    ]\n  };\n\n  return {\n    name: 'F#',\n    aliases: [\n      'fs',\n      'f#'\n    ],\n    keywords: ALL_KEYWORDS,\n    illegal: /\\/\\*/,\n    classNameAliases: {\n      'computation-expression': 'keyword'\n    },\n    contains: [\n      BANG_KEYWORD_MODE,\n      STRING,\n      COMMENT,\n      QUOTED_IDENTIFIER,\n      TYPE_DECLARATION,\n      {\n        // e.g. [<Attributes(\"\")>] or [<``module``: MyCustomAttributeThatWorksOnModules>]\n        // or [<Sealed; NoEquality; NoComparison; CompiledName(\"FSharpAsync`1\")>]\n        scope: 'meta',\n        begin: /\\[</,\n        end: />\\]/,\n        relevance: 2,\n        contains: [\n          QUOTED_IDENTIFIER,\n          // can contain any constant value\n          TRIPLE_QUOTED_STRING,\n          VERBATIM_STRING,\n          QUOTED_STRING,\n          CHAR_LITERAL,\n          NUMBER\n        ]\n      },\n      DISCRIMINATED_UNION_TYPE_ANNOTATION,\n      TYPE_ANNOTATION,\n      COMPUTATION_EXPRESSION,\n      PREPROCESSOR,\n      NUMBER,\n      GENERIC_TYPE_SYMBOL,\n      OPERATOR\n    ]\n  };\n}\n\nmodule.exports = fsharp;\n","/*\n Language: GAMS\n Author: Stefan Bechert <stefan.bechert@gmx.net>\n Contributors: Oleg Efimov <efimovov@gmail.com>, Mikko Kouhia <mikko.kouhia@iki.fi>\n Description: The General Algebraic Modeling System language\n Website: https://www.gams.com\n Category: scientific\n */\n\n/** @type LanguageFn */\nfunction gams(hljs) {\n  const regex = hljs.regex;\n  const KEYWORDS = {\n    keyword:\n      'abort acronym acronyms alias all and assign binary card diag display '\n      + 'else eq file files for free ge gt if integer le loop lt maximizing '\n      + 'minimizing model models ne negative no not option options or ord '\n      + 'positive prod put putpage puttl repeat sameas semicont semiint smax '\n      + 'smin solve sos1 sos2 sum system table then until using while xor yes',\n    literal:\n      'eps inf na',\n    built_in:\n      'abs arccos arcsin arctan arctan2 Beta betaReg binomial ceil centropy '\n      + 'cos cosh cvPower div div0 eDist entropy errorf execSeed exp fact '\n      + 'floor frac gamma gammaReg log logBeta logGamma log10 log2 mapVal max '\n      + 'min mod ncpCM ncpF ncpVUpow ncpVUsin normal pi poly power '\n      + 'randBinomial randLinear randTriangle round rPower sigmoid sign '\n      + 'signPower sin sinh slexp sllog10 slrec sqexp sqlog10 sqr sqrec sqrt '\n      + 'tan tanh trunc uniform uniformInt vcPower bool_and bool_eqv bool_imp '\n      + 'bool_not bool_or bool_xor ifThen rel_eq rel_ge rel_gt rel_le rel_lt '\n      + 'rel_ne gday gdow ghour gleap gmillisec gminute gmonth gsecond gyear '\n      + 'jdate jnow jstart jtime errorLevel execError gamsRelease gamsVersion '\n      + 'handleCollect handleDelete handleStatus handleSubmit heapFree '\n      + 'heapLimit heapSize jobHandle jobKill jobStatus jobTerminate '\n      + 'licenseLevel licenseStatus maxExecError sleep timeClose timeComp '\n      + 'timeElapsed timeExec timeStart'\n  };\n  const PARAMS = {\n    className: 'params',\n    begin: /\\(/,\n    end: /\\)/,\n    excludeBegin: true,\n    excludeEnd: true\n  };\n  const SYMBOLS = {\n    className: 'symbol',\n    variants: [\n      { begin: /=[lgenxc]=/ },\n      { begin: /\\$/ }\n    ]\n  };\n  const QSTR = { // One-line quoted comment string\n    className: 'comment',\n    variants: [\n      {\n        begin: '\\'',\n        end: '\\''\n      },\n      {\n        begin: '\"',\n        end: '\"'\n      }\n    ],\n    illegal: '\\\\n',\n    contains: [ hljs.BACKSLASH_ESCAPE ]\n  };\n  const ASSIGNMENT = {\n    begin: '/',\n    end: '/',\n    keywords: KEYWORDS,\n    contains: [\n      QSTR,\n      hljs.C_LINE_COMMENT_MODE,\n      hljs.C_BLOCK_COMMENT_MODE,\n      hljs.QUOTE_STRING_MODE,\n      hljs.APOS_STRING_MODE,\n      hljs.C_NUMBER_MODE\n    ]\n  };\n  const COMMENT_WORD = /[a-z0-9&#*=?@\\\\><:,()$[\\]_.{}!+%^-]+/;\n  const DESCTEXT = { // Parameter/set/variable description text\n    begin: /[a-z][a-z0-9_]*(\\([a-z0-9_, ]*\\))?[ \\t]+/,\n    excludeBegin: true,\n    end: '$',\n    endsWithParent: true,\n    contains: [\n      QSTR,\n      ASSIGNMENT,\n      {\n        className: 'comment',\n        // one comment word, then possibly more\n        begin: regex.concat(\n          COMMENT_WORD,\n          // [ ] because \\s would be too broad (matching newlines)\n          regex.anyNumberOfTimes(regex.concat(/[ ]+/, COMMENT_WORD))\n        ),\n        relevance: 0\n      }\n    ]\n  };\n\n  return {\n    name: 'GAMS',\n    aliases: [ 'gms' ],\n    case_insensitive: true,\n    keywords: KEYWORDS,\n    contains: [\n      hljs.COMMENT(/^\\$ontext/, /^\\$offtext/),\n      {\n        className: 'meta',\n        begin: '^\\\\$[a-z0-9]+',\n        end: '$',\n        returnBegin: true,\n        contains: [\n          {\n            className: 'keyword',\n            begin: '^\\\\$[a-z0-9]+'\n          }\n        ]\n      },\n      hljs.COMMENT('^\\\\*', '$'),\n      hljs.C_LINE_COMMENT_MODE,\n      hljs.C_BLOCK_COMMENT_MODE,\n      hljs.QUOTE_STRING_MODE,\n      hljs.APOS_STRING_MODE,\n      // Declarations\n      {\n        beginKeywords:\n          'set sets parameter parameters variable variables '\n          + 'scalar scalars equation equations',\n        end: ';',\n        contains: [\n          hljs.COMMENT('^\\\\*', '$'),\n          hljs.C_LINE_COMMENT_MODE,\n          hljs.C_BLOCK_COMMENT_MODE,\n          hljs.QUOTE_STRING_MODE,\n          hljs.APOS_STRING_MODE,\n          ASSIGNMENT,\n          DESCTEXT\n        ]\n      },\n      { // table environment\n        beginKeywords: 'table',\n        end: ';',\n        returnBegin: true,\n        contains: [\n          { // table header row\n            beginKeywords: 'table',\n            end: '$',\n            contains: [ DESCTEXT ]\n          },\n          hljs.COMMENT('^\\\\*', '$'),\n          hljs.C_LINE_COMMENT_MODE,\n          hljs.C_BLOCK_COMMENT_MODE,\n          hljs.QUOTE_STRING_MODE,\n          hljs.APOS_STRING_MODE,\n          hljs.C_NUMBER_MODE\n          // Table does not contain DESCTEXT or ASSIGNMENT\n        ]\n      },\n      // Function definitions\n      {\n        className: 'function',\n        begin: /^[a-z][a-z0-9_,\\-+' ()$]+\\.{2}/,\n        returnBegin: true,\n        contains: [\n          { // Function title\n            className: 'title',\n            begin: /^[a-z0-9_]+/\n          },\n          PARAMS,\n          SYMBOLS\n        ]\n      },\n      hljs.C_NUMBER_MODE,\n      SYMBOLS\n    ]\n  };\n}\n\nmodule.exports = gams;\n","/*\nLanguage: GAUSS\nAuthor: Matt Evans <matt@aptech.com>\nDescription: GAUSS Mathematical and Statistical language\nWebsite: https://www.aptech.com\nCategory: scientific\n*/\nfunction gauss(hljs) {\n  const KEYWORDS = {\n    keyword: 'bool break call callexe checkinterrupt clear clearg closeall cls comlog compile '\n              + 'continue create debug declare delete disable dlibrary dllcall do dos ed edit else '\n              + 'elseif enable end endfor endif endp endo errorlog errorlogat expr external fn '\n              + 'for format goto gosub graph if keyword let lib library line load loadarray loadexe '\n              + 'loadf loadk loadm loadp loads loadx local locate loopnextindex lprint lpwidth lshow '\n              + 'matrix msym ndpclex new open output outwidth plot plotsym pop prcsn print '\n              + 'printdos proc push retp return rndcon rndmod rndmult rndseed run save saveall screen '\n              + 'scroll setarray show sparse stop string struct system trace trap threadfor '\n              + 'threadendfor threadbegin threadjoin threadstat threadend until use while winprint '\n              + 'ne ge le gt lt and xor or not eq eqv',\n    built_in: 'abs acf aconcat aeye amax amean AmericanBinomCall AmericanBinomCall_Greeks AmericanBinomCall_ImpVol '\n              + 'AmericanBinomPut AmericanBinomPut_Greeks AmericanBinomPut_ImpVol AmericanBSCall AmericanBSCall_Greeks '\n              + 'AmericanBSCall_ImpVol AmericanBSPut AmericanBSPut_Greeks AmericanBSPut_ImpVol amin amult annotationGetDefaults '\n              + 'annotationSetBkd annotationSetFont annotationSetLineColor annotationSetLineStyle annotationSetLineThickness '\n              + 'annualTradingDays arccos arcsin areshape arrayalloc arrayindex arrayinit arraytomat asciiload asclabel astd '\n              + 'astds asum atan atan2 atranspose axmargin balance band bandchol bandcholsol bandltsol bandrv bandsolpd bar '\n              + 'base10 begwind besselj bessely beta box boxcox cdfBeta cdfBetaInv cdfBinomial cdfBinomialInv cdfBvn cdfBvn2 '\n              + 'cdfBvn2e cdfCauchy cdfCauchyInv cdfChic cdfChii cdfChinc cdfChincInv cdfExp cdfExpInv cdfFc cdfFnc cdfFncInv '\n              + 'cdfGam cdfGenPareto cdfHyperGeo cdfLaplace cdfLaplaceInv cdfLogistic cdfLogisticInv cdfmControlCreate cdfMvn '\n              + 'cdfMvn2e cdfMvnce cdfMvne cdfMvt2e cdfMvtce cdfMvte cdfN cdfN2 cdfNc cdfNegBinomial cdfNegBinomialInv cdfNi '\n              + 'cdfPoisson cdfPoissonInv cdfRayleigh cdfRayleighInv cdfTc cdfTci cdfTnc cdfTvn cdfWeibull cdfWeibullInv cdir '\n              + 'ceil ChangeDir chdir chiBarSquare chol choldn cholsol cholup chrs close code cols colsf combinate combinated '\n              + 'complex con cond conj cons ConScore contour conv convertsatostr convertstrtosa corrm corrms corrvc corrx corrxs '\n              + 'cos cosh counts countwts crossprd crout croutp csrcol csrlin csvReadM csvReadSA cumprodc cumsumc curve cvtos '\n              + 'datacreate datacreatecomplex datalist dataload dataloop dataopen datasave date datestr datestring datestrymd '\n              + 'dayinyr dayofweek dbAddDatabase dbClose dbCommit dbCreateQuery dbExecQuery dbGetConnectOptions dbGetDatabaseName '\n              + 'dbGetDriverName dbGetDrivers dbGetHostName dbGetLastErrorNum dbGetLastErrorText dbGetNumericalPrecPolicy '\n              + 'dbGetPassword dbGetPort dbGetTableHeaders dbGetTables dbGetUserName dbHasFeature dbIsDriverAvailable dbIsOpen '\n              + 'dbIsOpenError dbOpen dbQueryBindValue dbQueryClear dbQueryCols dbQueryExecPrepared dbQueryFetchAllM dbQueryFetchAllSA '\n              + 'dbQueryFetchOneM dbQueryFetchOneSA dbQueryFinish dbQueryGetBoundValue dbQueryGetBoundValues dbQueryGetField '\n              + 'dbQueryGetLastErrorNum dbQueryGetLastErrorText dbQueryGetLastInsertID dbQueryGetLastQuery dbQueryGetPosition '\n              + 'dbQueryIsActive dbQueryIsForwardOnly dbQueryIsNull dbQueryIsSelect dbQueryIsValid dbQueryPrepare dbQueryRows '\n              + 'dbQuerySeek dbQuerySeekFirst dbQuerySeekLast dbQuerySeekNext dbQuerySeekPrevious dbQuerySetForwardOnly '\n              + 'dbRemoveDatabase dbRollback dbSetConnectOptions dbSetDatabaseName dbSetHostName dbSetNumericalPrecPolicy '\n              + 'dbSetPort dbSetUserName dbTransaction DeleteFile delif delrows denseToSp denseToSpRE denToZero design det detl '\n              + 'dfft dffti diag diagrv digamma doswin DOSWinCloseall DOSWinOpen dotfeq dotfeqmt dotfge dotfgemt dotfgt dotfgtmt '\n              + 'dotfle dotflemt dotflt dotfltmt dotfne dotfnemt draw drop dsCreate dstat dstatmt dstatmtControlCreate dtdate dtday '\n              + 'dttime dttodtv dttostr dttoutc dtvnormal dtvtodt dtvtoutc dummy dummybr dummydn eig eigh eighv eigv elapsedTradingDays '\n              + 'endwind envget eof eqSolve eqSolvemt eqSolvemtControlCreate eqSolvemtOutCreate eqSolveset erf erfc erfccplx erfcplx error '\n              + 'etdays ethsec etstr EuropeanBinomCall EuropeanBinomCall_Greeks EuropeanBinomCall_ImpVol EuropeanBinomPut '\n              + 'EuropeanBinomPut_Greeks EuropeanBinomPut_ImpVol EuropeanBSCall EuropeanBSCall_Greeks EuropeanBSCall_ImpVol '\n              + 'EuropeanBSPut EuropeanBSPut_Greeks EuropeanBSPut_ImpVol exctsmpl exec execbg exp extern eye fcheckerr fclearerr feq '\n              + 'feqmt fflush fft ffti fftm fftmi fftn fge fgemt fgets fgetsa fgetsat fgetst fgt fgtmt fileinfo filesa fle flemt '\n              + 'floor flt fltmt fmod fne fnemt fonts fopen formatcv formatnv fputs fputst fseek fstrerror ftell ftocv ftos ftostrC '\n              + 'gamma gammacplx gammaii gausset gdaAppend gdaCreate gdaDStat gdaDStatMat gdaGetIndex gdaGetName gdaGetNames gdaGetOrders '\n              + 'gdaGetType gdaGetTypes gdaGetVarInfo gdaIsCplx gdaLoad gdaPack gdaRead gdaReadByIndex gdaReadSome gdaReadSparse '\n              + 'gdaReadStruct gdaReportVarInfo gdaSave gdaUpdate gdaUpdateAndPack gdaVars gdaWrite gdaWrite32 gdaWriteSome getarray '\n              + 'getdims getf getGAUSShome getmatrix getmatrix4D getname getnamef getNextTradingDay getNextWeekDay getnr getorders '\n              + 'getpath getPreviousTradingDay getPreviousWeekDay getRow getscalar3D getscalar4D getTrRow getwind glm gradcplx gradMT '\n              + 'gradMTm gradMTT gradMTTm gradp graphprt graphset hasimag header headermt hess hessMT hessMTg hessMTgw hessMTm '\n              + 'hessMTmw hessMTT hessMTTg hessMTTgw hessMTTm hessMTw hessp hist histf histp hsec imag indcv indexcat indices indices2 '\n              + 'indicesf indicesfn indnv indsav integrate1d integrateControlCreate intgrat2 intgrat3 inthp1 inthp2 inthp3 inthp4 '\n              + 'inthpControlCreate intquad1 intquad2 intquad3 intrleav intrleavsa intrsect intsimp inv invpd invswp iscplx iscplxf '\n              + 'isden isinfnanmiss ismiss key keyav keyw lag lag1 lagn lapEighb lapEighi lapEighvb lapEighvi lapgEig lapgEigh lapgEighv '\n              + 'lapgEigv lapgSchur lapgSvdcst lapgSvds lapgSvdst lapSvdcusv lapSvds lapSvdusv ldlp ldlsol linSolve listwise ln lncdfbvn '\n              + 'lncdfbvn2 lncdfmvn lncdfn lncdfn2 lncdfnc lnfact lngammacplx lnpdfmvn lnpdfmvt lnpdfn lnpdft loadd loadstruct loadwind '\n              + 'loess loessmt loessmtControlCreate log loglog logx logy lower lowmat lowmat1 ltrisol lu lusol machEpsilon make makevars '\n              + 'makewind margin matalloc matinit mattoarray maxbytes maxc maxindc maxv maxvec mbesselei mbesselei0 mbesselei1 mbesseli '\n              + 'mbesseli0 mbesseli1 meanc median mergeby mergevar minc minindc minv miss missex missrv moment momentd movingave '\n              + 'movingaveExpwgt movingaveWgt nextindex nextn nextnevn nextwind ntos null null1 numCombinations ols olsmt olsmtControlCreate '\n              + 'olsqr olsqr2 olsqrmt ones optn optnevn orth outtyp pacf packedToSp packr parse pause pdfCauchy pdfChi pdfExp pdfGenPareto '\n              + 'pdfHyperGeo pdfLaplace pdfLogistic pdfn pdfPoisson pdfRayleigh pdfWeibull pi pinv pinvmt plotAddArrow plotAddBar plotAddBox '\n              + 'plotAddHist plotAddHistF plotAddHistP plotAddPolar plotAddScatter plotAddShape plotAddTextbox plotAddTS plotAddXY plotArea '\n              + 'plotBar plotBox plotClearLayout plotContour plotCustomLayout plotGetDefaults plotHist plotHistF plotHistP plotLayout '\n              + 'plotLogLog plotLogX plotLogY plotOpenWindow plotPolar plotSave plotScatter plotSetAxesPen plotSetBar plotSetBarFill '\n              + 'plotSetBarStacked plotSetBkdColor plotSetFill plotSetGrid plotSetLegend plotSetLineColor plotSetLineStyle plotSetLineSymbol '\n              + 'plotSetLineThickness plotSetNewWindow plotSetTitle plotSetWhichYAxis plotSetXAxisShow plotSetXLabel plotSetXRange '\n              + 'plotSetXTicInterval plotSetXTicLabel plotSetYAxisShow plotSetYLabel plotSetYRange plotSetZAxisShow plotSetZLabel '\n              + 'plotSurface plotTS plotXY polar polychar polyeval polygamma polyint polymake polymat polymroot polymult polyroot '\n              + 'pqgwin previousindex princomp printfm printfmt prodc psi putarray putf putvals pvCreate pvGetIndex pvGetParNames '\n              + 'pvGetParVector pvLength pvList pvPack pvPacki pvPackm pvPackmi pvPacks pvPacksi pvPacksm pvPacksmi pvPutParVector '\n              + 'pvTest pvUnpack QNewton QNewtonmt QNewtonmtControlCreate QNewtonmtOutCreate QNewtonSet QProg QProgmt QProgmtInCreate '\n              + 'qqr qqre qqrep qr qre qrep qrsol qrtsol qtyr qtyre qtyrep quantile quantiled qyr qyre qyrep qz rank rankindx readr '\n              + 'real reclassify reclassifyCuts recode recserar recsercp recserrc rerun rescale reshape rets rev rfft rffti rfftip rfftn '\n              + 'rfftnp rfftp rndBernoulli rndBeta rndBinomial rndCauchy rndChiSquare rndCon rndCreateState rndExp rndGamma rndGeo rndGumbel '\n              + 'rndHyperGeo rndi rndKMbeta rndKMgam rndKMi rndKMn rndKMnb rndKMp rndKMu rndKMvm rndLaplace rndLCbeta rndLCgam rndLCi rndLCn '\n              + 'rndLCnb rndLCp rndLCu rndLCvm rndLogNorm rndMTu rndMVn rndMVt rndn rndnb rndNegBinomial rndp rndPoisson rndRayleigh '\n              + 'rndStateSkip rndu rndvm rndWeibull rndWishart rotater round rows rowsf rref sampleData satostrC saved saveStruct savewind '\n              + 'scale scale3d scalerr scalinfnanmiss scalmiss schtoc schur searchsourcepath seekr select selif seqa seqm setdif setdifsa '\n              + 'setvars setvwrmode setwind shell shiftr sin singleindex sinh sleep solpd sortc sortcc sortd sorthc sorthcc sortind '\n              + 'sortindc sortmc sortr sortrc spBiconjGradSol spChol spConjGradSol spCreate spDenseSubmat spDiagRvMat spEigv spEye spLDL '\n              + 'spline spLU spNumNZE spOnes spreadSheetReadM spreadSheetReadSA spreadSheetWrite spScale spSubmat spToDense spTrTDense '\n              + 'spTScalar spZeros sqpSolve sqpSolveMT sqpSolveMTControlCreate sqpSolveMTlagrangeCreate sqpSolveMToutCreate sqpSolveSet '\n              + 'sqrt statements stdc stdsc stocv stof strcombine strindx strlen strput strrindx strsect strsplit strsplitPad strtodt '\n              + 'strtof strtofcplx strtriml strtrimr strtrunc strtruncl strtruncpad strtruncr submat subscat substute subvec sumc sumr '\n              + 'surface svd svd1 svd2 svdcusv svds svdusv sysstate tab tan tanh tempname '\n              + 'time timedt timestr timeutc title tkf2eps tkf2ps tocart todaydt toeplitz token topolar trapchk '\n              + 'trigamma trimr trunc type typecv typef union unionsa uniqindx uniqindxsa unique uniquesa upmat upmat1 upper utctodt '\n              + 'utctodtv utrisol vals varCovMS varCovXS varget vargetl varmall varmares varput varputl vartypef vcm vcms vcx vcxs '\n              + 'vec vech vecr vector vget view viewxyz vlist vnamecv volume vput vread vtypecv wait waitc walkindex where window '\n              + 'writer xlabel xlsGetSheetCount xlsGetSheetSize xlsGetSheetTypes xlsMakeRange xlsReadM xlsReadSA xlsWrite xlsWriteM '\n              + 'xlsWriteSA xpnd xtics xy xyz ylabel ytics zeros zeta zlabel ztics cdfEmpirical dot h5create h5open h5read h5readAttribute '\n              + 'h5write h5writeAttribute ldl plotAddErrorBar plotAddSurface plotCDFEmpirical plotSetColormap plotSetContourLabels '\n              + 'plotSetLegendFont plotSetTextInterpreter plotSetXTicCount plotSetYTicCount plotSetZLevels powerm strjoin sylvester '\n              + 'strtrim',\n    literal: 'DB_AFTER_LAST_ROW DB_ALL_TABLES DB_BATCH_OPERATIONS DB_BEFORE_FIRST_ROW DB_BLOB DB_EVENT_NOTIFICATIONS '\n             + 'DB_FINISH_QUERY DB_HIGH_PRECISION DB_LAST_INSERT_ID DB_LOW_PRECISION_DOUBLE DB_LOW_PRECISION_INT32 '\n             + 'DB_LOW_PRECISION_INT64 DB_LOW_PRECISION_NUMBERS DB_MULTIPLE_RESULT_SETS DB_NAMED_PLACEHOLDERS '\n             + 'DB_POSITIONAL_PLACEHOLDERS DB_PREPARED_QUERIES DB_QUERY_SIZE DB_SIMPLE_LOCKING DB_SYSTEM_TABLES DB_TABLES '\n             + 'DB_TRANSACTIONS DB_UNICODE DB_VIEWS __STDIN __STDOUT __STDERR __FILE_DIR'\n  };\n\n  const AT_COMMENT_MODE = hljs.COMMENT('@', '@');\n\n  const PREPROCESSOR =\n  {\n    className: 'meta',\n    begin: '#',\n    end: '$',\n    keywords: { keyword: 'define definecs|10 undef ifdef ifndef iflight ifdllcall ifmac ifos2win ifunix else endif lineson linesoff srcfile srcline' },\n    contains: [\n      {\n        begin: /\\\\\\n/,\n        relevance: 0\n      },\n      {\n        beginKeywords: 'include',\n        end: '$',\n        keywords: { keyword: 'include' },\n        contains: [\n          {\n            className: 'string',\n            begin: '\"',\n            end: '\"',\n            illegal: '\\\\n'\n          }\n        ]\n      },\n      hljs.C_LINE_COMMENT_MODE,\n      hljs.C_BLOCK_COMMENT_MODE,\n      AT_COMMENT_MODE\n    ]\n  };\n\n  const STRUCT_TYPE =\n  {\n    begin: /\\bstruct\\s+/,\n    end: /\\s/,\n    keywords: \"struct\",\n    contains: [\n      {\n        className: \"type\",\n        begin: hljs.UNDERSCORE_IDENT_RE,\n        relevance: 0\n      }\n    ]\n  };\n\n  // only for definitions\n  const PARSE_PARAMS = [\n    {\n      className: 'params',\n      begin: /\\(/,\n      end: /\\)/,\n      excludeBegin: true,\n      excludeEnd: true,\n      endsWithParent: true,\n      relevance: 0,\n      contains: [\n        { // dots\n          className: 'literal',\n          begin: /\\.\\.\\./\n        },\n        hljs.C_NUMBER_MODE,\n        hljs.C_BLOCK_COMMENT_MODE,\n        AT_COMMENT_MODE,\n        STRUCT_TYPE\n      ]\n    }\n  ];\n\n  const FUNCTION_DEF =\n  {\n    className: \"title\",\n    begin: hljs.UNDERSCORE_IDENT_RE,\n    relevance: 0\n  };\n\n  const DEFINITION = function(beginKeywords, end, inherits) {\n    const mode = hljs.inherit(\n      {\n        className: \"function\",\n        beginKeywords: beginKeywords,\n        end: end,\n        excludeEnd: true,\n        contains: [].concat(PARSE_PARAMS)\n      },\n      {}\n    );\n    mode.contains.push(FUNCTION_DEF);\n    mode.contains.push(hljs.C_NUMBER_MODE);\n    mode.contains.push(hljs.C_BLOCK_COMMENT_MODE);\n    mode.contains.push(AT_COMMENT_MODE);\n    return mode;\n  };\n\n  const BUILT_IN_REF =\n  { // these are explicitly named internal function calls\n    className: 'built_in',\n    begin: '\\\\b(' + KEYWORDS.built_in.split(' ').join('|') + ')\\\\b'\n  };\n\n  const STRING_REF =\n  {\n    className: 'string',\n    begin: '\"',\n    end: '\"',\n    contains: [ hljs.BACKSLASH_ESCAPE ],\n    relevance: 0\n  };\n\n  const FUNCTION_REF =\n  {\n    // className: \"fn_ref\",\n    begin: hljs.UNDERSCORE_IDENT_RE + '\\\\s*\\\\(',\n    returnBegin: true,\n    keywords: KEYWORDS,\n    relevance: 0,\n    contains: [\n      { beginKeywords: KEYWORDS.keyword },\n      BUILT_IN_REF,\n      { // ambiguously named function calls get a relevance of 0\n        className: 'built_in',\n        begin: hljs.UNDERSCORE_IDENT_RE,\n        relevance: 0\n      }\n    ]\n  };\n\n  const FUNCTION_REF_PARAMS =\n  {\n    // className: \"fn_ref_params\",\n    begin: /\\(/,\n    end: /\\)/,\n    relevance: 0,\n    keywords: {\n      built_in: KEYWORDS.built_in,\n      literal: KEYWORDS.literal\n    },\n    contains: [\n      hljs.C_NUMBER_MODE,\n      hljs.C_BLOCK_COMMENT_MODE,\n      AT_COMMENT_MODE,\n      BUILT_IN_REF,\n      FUNCTION_REF,\n      STRING_REF,\n      'self'\n    ]\n  };\n\n  FUNCTION_REF.contains.push(FUNCTION_REF_PARAMS);\n\n  return {\n    name: 'GAUSS',\n    aliases: [ 'gss' ],\n    case_insensitive: true, // language is case-insensitive\n    keywords: KEYWORDS,\n    illegal: /(\\{[%#]|[%#]\\}| <- )/,\n    contains: [\n      hljs.C_NUMBER_MODE,\n      hljs.C_LINE_COMMENT_MODE,\n      hljs.C_BLOCK_COMMENT_MODE,\n      AT_COMMENT_MODE,\n      STRING_REF,\n      PREPROCESSOR,\n      {\n        className: 'keyword',\n        begin: /\\bexternal (matrix|string|array|sparse matrix|struct|proc|keyword|fn)/\n      },\n      DEFINITION('proc keyword', ';'),\n      DEFINITION('fn', '='),\n      {\n        beginKeywords: 'for threadfor',\n        end: /;/,\n        // end: /\\(/,\n        relevance: 0,\n        contains: [\n          hljs.C_BLOCK_COMMENT_MODE,\n          AT_COMMENT_MODE,\n          FUNCTION_REF_PARAMS\n        ]\n      },\n      { // custom method guard\n        // excludes method names from keyword processing\n        variants: [\n          { begin: hljs.UNDERSCORE_IDENT_RE + '\\\\.' + hljs.UNDERSCORE_IDENT_RE },\n          { begin: hljs.UNDERSCORE_IDENT_RE + '\\\\s*=' }\n        ],\n        relevance: 0\n      },\n      FUNCTION_REF,\n      STRUCT_TYPE\n    ]\n  };\n}\n\nmodule.exports = gauss;\n","/*\n Language: G-code (ISO 6983)\n Contributors: Adam Joseph Cook <adam.joseph.cook@gmail.com>\n Description: G-code syntax highlighter for Fanuc and other common CNC machine tool controls.\n Website: https://www.sis.se/api/document/preview/911952/\n Category: hardware\n */\n\nfunction gcode(hljs) {\n  const regex = hljs.regex;\n  const GCODE_KEYWORDS = {\n    $pattern: /[A-Z]+|%/,\n    keyword: [\n      // conditions\n      'THEN',\n      'ELSE',\n      'ENDIF',\n      'IF',\n\n      // controls\n      'GOTO',\n      'DO',\n      'WHILE',\n      'WH',\n      'END',\n      'CALL',\n\n      // scoping\n      'SUB',\n      'ENDSUB',\n\n      // comparisons\n      'EQ',\n      'NE',\n      'LT',\n      'GT',\n      'LE',\n      'GE',\n      'AND',\n      'OR',\n      'XOR',\n\n      // start/end of program\n      '%'\n    ],\n    built_in: [\n      'ATAN',\n      'ABS',\n      'ACOS',\n      'ASIN',\n      'COS',\n      'EXP',\n      'FIX',\n      'FUP',\n      'ROUND',\n      'LN',\n      'SIN',\n      'SQRT',\n      'TAN',\n      'EXISTS'\n    ]\n  };\n\n\n  // TODO: post v12 lets use look-behind, until then \\b and a callback filter will be used\n  // const LETTER_BOUNDARY_RE = /(?<![A-Z])/;\n  const LETTER_BOUNDARY_RE = /\\b/;\n\n  function LETTER_BOUNDARY_CALLBACK(matchdata, response) {\n    if (matchdata.index === 0) {\n      return;\n    }\n\n    const charBeforeMatch = matchdata.input[matchdata.index - 1];\n    if (charBeforeMatch >= '0' && charBeforeMatch <= '9') {\n      return;\n    }\n\n    if (charBeforeMatch === '_') {\n      return;\n    }\n\n    response.ignoreMatch();\n  }\n\n  const NUMBER_RE = /[+-]?((\\.\\d+)|(\\d+)(\\.\\d*)?)/;\n\n  const GENERAL_MISC_FUNCTION_RE = /[GM]\\s*\\d+(\\.\\d+)?/;\n  const TOOLS_RE = /T\\s*\\d+/;\n  const SUBROUTINE_RE = /O\\s*\\d+/;\n  const SUBROUTINE_NAMED_RE = /O<.+>/;\n  const AXES_RE = /[ABCUVWXYZ]\\s*/;\n  const PARAMETERS_RE = /[FHIJKPQRS]\\s*/;\n\n  const GCODE_CODE = [\n    // comments\n    hljs.COMMENT(/\\(/, /\\)/),\n    hljs.COMMENT(/;/, /$/),\n    hljs.APOS_STRING_MODE,\n    hljs.QUOTE_STRING_MODE,\n    hljs.C_NUMBER_MODE,\n\n    // gcodes\n    {\n      scope: 'title.function',\n      variants: [\n        // G General functions: G0, G5.1, G5.2, …\n        // M Misc functions: M0, M55.6, M199, …\n        { match: regex.concat(LETTER_BOUNDARY_RE, GENERAL_MISC_FUNCTION_RE) },\n        {\n          begin: GENERAL_MISC_FUNCTION_RE,\n          'on:begin': LETTER_BOUNDARY_CALLBACK\n        },\n        // T Tools\n        { match: regex.concat(LETTER_BOUNDARY_RE, TOOLS_RE), },\n        {\n          begin: TOOLS_RE,\n          'on:begin': LETTER_BOUNDARY_CALLBACK\n        }\n      ]\n    },\n\n    {\n      scope: 'symbol',\n      variants: [\n        // O Subroutine ID: O100, O110, …\n        { match: regex.concat(LETTER_BOUNDARY_RE, SUBROUTINE_RE) },\n        {\n          begin: SUBROUTINE_RE,\n          'on:begin': LETTER_BOUNDARY_CALLBACK\n        },\n        // O Subroutine name: O<some>, …\n        { match: regex.concat(LETTER_BOUNDARY_RE, SUBROUTINE_NAMED_RE) },\n        {\n          begin: SUBROUTINE_NAMED_RE,\n          'on:begin': LETTER_BOUNDARY_CALLBACK\n        },\n        // Checksum at end of line: *71, *199, …\n        { match: /\\*\\s*\\d+\\s*$/ }\n      ]\n    },\n\n    {\n      scope: 'operator', // N Line number: N1, N2, N1020, …\n      match: /^N\\s*\\d+/\n    },\n\n    {\n      scope: 'variable',\n      match: /-?#\\s*\\d+/\n    },\n\n    {\n      scope: 'property', // Physical axes,\n      variants: [\n        { match: regex.concat(LETTER_BOUNDARY_RE, AXES_RE, NUMBER_RE) },\n        {\n          begin: regex.concat(AXES_RE, NUMBER_RE),\n          'on:begin': LETTER_BOUNDARY_CALLBACK\n        },\n      ]\n    },\n\n    {\n      scope: 'params', // Different types of parameters\n      variants: [\n        { match: regex.concat(LETTER_BOUNDARY_RE, PARAMETERS_RE, NUMBER_RE) },\n        {\n          begin: regex.concat(PARAMETERS_RE, NUMBER_RE),\n          'on:begin': LETTER_BOUNDARY_CALLBACK\n        },\n      ]\n    },\n  ];\n\n  return {\n    name: 'G-code (ISO 6983)',\n    aliases: [ 'nc' ],\n    // Some implementations (CNC controls) of G-code are interoperable with uppercase and lowercase letters seamlessly.\n    // However, most prefer all uppercase and uppercase is customary.\n    case_insensitive: true,\n    // TODO: post v12 with the use of look-behind this can be enabled\n    disableAutodetect: true,\n    keywords: GCODE_KEYWORDS,\n    contains: GCODE_CODE\n  };\n}\n\nmodule.exports = gcode;\n","/*\n Language: Gherkin\n Author: Sam Pikesley (@pikesley) <sam.pikesley@theodi.org>\n Description: Gherkin is the format for cucumber specifications. It is a domain specific language which helps you to describe business behavior without the need to go into detail of implementation.\n Website: https://cucumber.io/docs/gherkin/\n */\n\nfunction gherkin(hljs) {\n  return {\n    name: 'Gherkin',\n    aliases: [ 'feature' ],\n    keywords: 'Feature Background Ability Business\\ Need Scenario Scenarios Scenario\\ Outline Scenario\\ Template Examples Given And Then But When',\n    contains: [\n      {\n        className: 'symbol',\n        begin: '\\\\*',\n        relevance: 0\n      },\n      {\n        className: 'meta',\n        begin: '@[^@\\\\s]+'\n      },\n      {\n        begin: '\\\\|',\n        end: '\\\\|\\\\w*$',\n        contains: [\n          {\n            className: 'string',\n            begin: '[^|]+'\n          }\n        ]\n      },\n      {\n        className: 'variable',\n        begin: '<',\n        end: '>'\n      },\n      hljs.HASH_COMMENT_MODE,\n      {\n        className: 'string',\n        begin: '\"\"\"',\n        end: '\"\"\"'\n      },\n      hljs.QUOTE_STRING_MODE\n    ]\n  };\n}\n\nmodule.exports = gherkin;\n","/*\nLanguage: GLSL\nDescription: OpenGL Shading Language\nAuthor: Sergey Tikhomirov <sergey@tikhomirov.io>\nWebsite: https://en.wikipedia.org/wiki/OpenGL_Shading_Language\nCategory: graphics\n*/\n\nfunction glsl(hljs) {\n  return {\n    name: 'GLSL',\n    keywords: {\n      keyword:\n        // Statements\n        'break continue discard do else for if return while switch case default '\n        // Qualifiers\n        + 'attribute binding buffer ccw centroid centroid varying coherent column_major const cw '\n        + 'depth_any depth_greater depth_less depth_unchanged early_fragment_tests equal_spacing '\n        + 'flat fractional_even_spacing fractional_odd_spacing highp in index inout invariant '\n        + 'invocations isolines layout line_strip lines lines_adjacency local_size_x local_size_y '\n        + 'local_size_z location lowp max_vertices mediump noperspective offset origin_upper_left '\n        + 'out packed patch pixel_center_integer point_mode points precise precision quads r11f_g11f_b10f '\n        + 'r16 r16_snorm r16f r16i r16ui r32f r32i r32ui r8 r8_snorm r8i r8ui readonly restrict '\n        + 'rg16 rg16_snorm rg16f rg16i rg16ui rg32f rg32i rg32ui rg8 rg8_snorm rg8i rg8ui rgb10_a2 '\n        + 'rgb10_a2ui rgba16 rgba16_snorm rgba16f rgba16i rgba16ui rgba32f rgba32i rgba32ui rgba8 '\n        + 'rgba8_snorm rgba8i rgba8ui row_major sample shared smooth std140 std430 stream triangle_strip '\n        + 'triangles triangles_adjacency uniform varying vertices volatile writeonly',\n      type:\n        'atomic_uint bool bvec2 bvec3 bvec4 dmat2 dmat2x2 dmat2x3 dmat2x4 dmat3 dmat3x2 dmat3x3 '\n        + 'dmat3x4 dmat4 dmat4x2 dmat4x3 dmat4x4 double dvec2 dvec3 dvec4 float iimage1D iimage1DArray '\n        + 'iimage2D iimage2DArray iimage2DMS iimage2DMSArray iimage2DRect iimage3D iimageBuffer '\n        + 'iimageCube iimageCubeArray image1D image1DArray image2D image2DArray image2DMS image2DMSArray '\n        + 'image2DRect image3D imageBuffer imageCube imageCubeArray int isampler1D isampler1DArray '\n        + 'isampler2D isampler2DArray isampler2DMS isampler2DMSArray isampler2DRect isampler3D '\n        + 'isamplerBuffer isamplerCube isamplerCubeArray ivec2 ivec3 ivec4 mat2 mat2x2 mat2x3 '\n        + 'mat2x4 mat3 mat3x2 mat3x3 mat3x4 mat4 mat4x2 mat4x3 mat4x4 sampler1D sampler1DArray '\n        + 'sampler1DArrayShadow sampler1DShadow sampler2D sampler2DArray sampler2DArrayShadow '\n        + 'sampler2DMS sampler2DMSArray sampler2DRect sampler2DRectShadow sampler2DShadow sampler3D '\n        + 'samplerBuffer samplerCube samplerCubeArray samplerCubeArrayShadow samplerCubeShadow '\n        + 'image1D uimage1DArray uimage2D uimage2DArray uimage2DMS uimage2DMSArray uimage2DRect '\n        + 'uimage3D uimageBuffer uimageCube uimageCubeArray uint usampler1D usampler1DArray '\n        + 'usampler2D usampler2DArray usampler2DMS usampler2DMSArray usampler2DRect usampler3D '\n        + 'samplerBuffer usamplerCube usamplerCubeArray uvec2 uvec3 uvec4 vec2 vec3 vec4 void',\n      built_in:\n        // Constants\n        'gl_MaxAtomicCounterBindings gl_MaxAtomicCounterBufferSize gl_MaxClipDistances gl_MaxClipPlanes '\n        + 'gl_MaxCombinedAtomicCounterBuffers gl_MaxCombinedAtomicCounters gl_MaxCombinedImageUniforms '\n        + 'gl_MaxCombinedImageUnitsAndFragmentOutputs gl_MaxCombinedTextureImageUnits gl_MaxComputeAtomicCounterBuffers '\n        + 'gl_MaxComputeAtomicCounters gl_MaxComputeImageUniforms gl_MaxComputeTextureImageUnits '\n        + 'gl_MaxComputeUniformComponents gl_MaxComputeWorkGroupCount gl_MaxComputeWorkGroupSize '\n        + 'gl_MaxDrawBuffers gl_MaxFragmentAtomicCounterBuffers gl_MaxFragmentAtomicCounters '\n        + 'gl_MaxFragmentImageUniforms gl_MaxFragmentInputComponents gl_MaxFragmentInputVectors '\n        + 'gl_MaxFragmentUniformComponents gl_MaxFragmentUniformVectors gl_MaxGeometryAtomicCounterBuffers '\n        + 'gl_MaxGeometryAtomicCounters gl_MaxGeometryImageUniforms gl_MaxGeometryInputComponents '\n        + 'gl_MaxGeometryOutputComponents gl_MaxGeometryOutputVertices gl_MaxGeometryTextureImageUnits '\n        + 'gl_MaxGeometryTotalOutputComponents gl_MaxGeometryUniformComponents gl_MaxGeometryVaryingComponents '\n        + 'gl_MaxImageSamples gl_MaxImageUnits gl_MaxLights gl_MaxPatchVertices gl_MaxProgramTexelOffset '\n        + 'gl_MaxTessControlAtomicCounterBuffers gl_MaxTessControlAtomicCounters gl_MaxTessControlImageUniforms '\n        + 'gl_MaxTessControlInputComponents gl_MaxTessControlOutputComponents gl_MaxTessControlTextureImageUnits '\n        + 'gl_MaxTessControlTotalOutputComponents gl_MaxTessControlUniformComponents '\n        + 'gl_MaxTessEvaluationAtomicCounterBuffers gl_MaxTessEvaluationAtomicCounters '\n        + 'gl_MaxTessEvaluationImageUniforms gl_MaxTessEvaluationInputComponents gl_MaxTessEvaluationOutputComponents '\n        + 'gl_MaxTessEvaluationTextureImageUnits gl_MaxTessEvaluationUniformComponents '\n        + 'gl_MaxTessGenLevel gl_MaxTessPatchComponents gl_MaxTextureCoords gl_MaxTextureImageUnits '\n        + 'gl_MaxTextureUnits gl_MaxVaryingComponents gl_MaxVaryingFloats gl_MaxVaryingVectors '\n        + 'gl_MaxVertexAtomicCounterBuffers gl_MaxVertexAtomicCounters gl_MaxVertexAttribs gl_MaxVertexImageUniforms '\n        + 'gl_MaxVertexOutputComponents gl_MaxVertexOutputVectors gl_MaxVertexTextureImageUnits '\n        + 'gl_MaxVertexUniformComponents gl_MaxVertexUniformVectors gl_MaxViewports gl_MinProgramTexelOffset '\n        // Variables\n        + 'gl_BackColor gl_BackLightModelProduct gl_BackLightProduct gl_BackMaterial '\n        + 'gl_BackSecondaryColor gl_ClipDistance gl_ClipPlane gl_ClipVertex gl_Color '\n        + 'gl_DepthRange gl_EyePlaneQ gl_EyePlaneR gl_EyePlaneS gl_EyePlaneT gl_Fog gl_FogCoord '\n        + 'gl_FogFragCoord gl_FragColor gl_FragCoord gl_FragData gl_FragDepth gl_FrontColor '\n        + 'gl_FrontFacing gl_FrontLightModelProduct gl_FrontLightProduct gl_FrontMaterial '\n        + 'gl_FrontSecondaryColor gl_GlobalInvocationID gl_InstanceID gl_InvocationID gl_Layer gl_LightModel '\n        + 'gl_LightSource gl_LocalInvocationID gl_LocalInvocationIndex gl_ModelViewMatrix '\n        + 'gl_ModelViewMatrixInverse gl_ModelViewMatrixInverseTranspose gl_ModelViewMatrixTranspose '\n        + 'gl_ModelViewProjectionMatrix gl_ModelViewProjectionMatrixInverse gl_ModelViewProjectionMatrixInverseTranspose '\n        + 'gl_ModelViewProjectionMatrixTranspose gl_MultiTexCoord0 gl_MultiTexCoord1 gl_MultiTexCoord2 '\n        + 'gl_MultiTexCoord3 gl_MultiTexCoord4 gl_MultiTexCoord5 gl_MultiTexCoord6 gl_MultiTexCoord7 '\n        + 'gl_Normal gl_NormalMatrix gl_NormalScale gl_NumSamples gl_NumWorkGroups gl_ObjectPlaneQ '\n        + 'gl_ObjectPlaneR gl_ObjectPlaneS gl_ObjectPlaneT gl_PatchVerticesIn gl_Point gl_PointCoord '\n        + 'gl_PointSize gl_Position gl_PrimitiveID gl_PrimitiveIDIn gl_ProjectionMatrix gl_ProjectionMatrixInverse '\n        + 'gl_ProjectionMatrixInverseTranspose gl_ProjectionMatrixTranspose gl_SampleID gl_SampleMask '\n        + 'gl_SampleMaskIn gl_SamplePosition gl_SecondaryColor gl_TessCoord gl_TessLevelInner gl_TessLevelOuter '\n        + 'gl_TexCoord gl_TextureEnvColor gl_TextureMatrix gl_TextureMatrixInverse gl_TextureMatrixInverseTranspose '\n        + 'gl_TextureMatrixTranspose gl_Vertex gl_VertexID gl_ViewportIndex gl_WorkGroupID gl_WorkGroupSize gl_in gl_out '\n        // Functions\n        + 'EmitStreamVertex EmitVertex EndPrimitive EndStreamPrimitive abs acos acosh all any asin '\n        + 'asinh atan atanh atomicAdd atomicAnd atomicCompSwap atomicCounter atomicCounterDecrement '\n        + 'atomicCounterIncrement atomicExchange atomicMax atomicMin atomicOr atomicXor barrier '\n        + 'bitCount bitfieldExtract bitfieldInsert bitfieldReverse ceil clamp cos cosh cross '\n        + 'dFdx dFdy degrees determinant distance dot equal exp exp2 faceforward findLSB findMSB '\n        + 'floatBitsToInt floatBitsToUint floor fma fract frexp ftransform fwidth greaterThan '\n        + 'greaterThanEqual groupMemoryBarrier imageAtomicAdd imageAtomicAnd imageAtomicCompSwap '\n        + 'imageAtomicExchange imageAtomicMax imageAtomicMin imageAtomicOr imageAtomicXor imageLoad '\n        + 'imageSize imageStore imulExtended intBitsToFloat interpolateAtCentroid interpolateAtOffset '\n        + 'interpolateAtSample inverse inversesqrt isinf isnan ldexp length lessThan lessThanEqual log '\n        + 'log2 matrixCompMult max memoryBarrier memoryBarrierAtomicCounter memoryBarrierBuffer '\n        + 'memoryBarrierImage memoryBarrierShared min mix mod modf noise1 noise2 noise3 noise4 '\n        + 'normalize not notEqual outerProduct packDouble2x32 packHalf2x16 packSnorm2x16 packSnorm4x8 '\n        + 'packUnorm2x16 packUnorm4x8 pow radians reflect refract round roundEven shadow1D shadow1DLod '\n        + 'shadow1DProj shadow1DProjLod shadow2D shadow2DLod shadow2DProj shadow2DProjLod sign sin sinh '\n        + 'smoothstep sqrt step tan tanh texelFetch texelFetchOffset texture texture1D texture1DLod '\n        + 'texture1DProj texture1DProjLod texture2D texture2DLod texture2DProj texture2DProjLod '\n        + 'texture3D texture3DLod texture3DProj texture3DProjLod textureCube textureCubeLod '\n        + 'textureGather textureGatherOffset textureGatherOffsets textureGrad textureGradOffset '\n        + 'textureLod textureLodOffset textureOffset textureProj textureProjGrad textureProjGradOffset '\n        + 'textureProjLod textureProjLodOffset textureProjOffset textureQueryLevels textureQueryLod '\n        + 'textureSize transpose trunc uaddCarry uintBitsToFloat umulExtended unpackDouble2x32 '\n        + 'unpackHalf2x16 unpackSnorm2x16 unpackSnorm4x8 unpackUnorm2x16 unpackUnorm4x8 usubBorrow',\n      literal: 'true false'\n    },\n    illegal: '\"',\n    contains: [\n      hljs.C_LINE_COMMENT_MODE,\n      hljs.C_BLOCK_COMMENT_MODE,\n      hljs.C_NUMBER_MODE,\n      {\n        className: 'meta',\n        begin: '#',\n        end: '$'\n      }\n    ]\n  };\n}\n\nmodule.exports = glsl;\n","/*\nLanguage: GML\nDescription: Game Maker Language for GameMaker (rev. 2023.1)\nWebsite: https://manual.yoyogames.com/\nCategory: scripting\n*/\n\nfunction gml(hljs) {\n  const KEYWORDS = [\n    \"#endregion\",\n    \"#macro\",\n    \"#region\",\n    \"and\",\n    \"begin\",\n    \"break\",\n    \"case\",\n    \"constructor\",\n    \"continue\",\n    \"default\",\n    \"delete\",\n    \"div\",\n    \"do\",\n    \"else\",\n    \"end\",\n    \"enum\",\n    \"exit\",\n    \"for\",\n    \"function\",\n    \"globalvar\",\n    \"if\",\n    \"mod\",\n    \"new\",\n    \"not\",\n    \"or\",\n    \"repeat\",\n    \"return\",\n    \"static\",\n    \"switch\",\n    \"then\",\n    \"until\",\n    \"var\",\n    \"while\",\n    \"with\",\n    \"xor\"\n  ];\n\n  const BUILT_INS = [\n    \"abs\",\n    \"alarm_get\",\n    \"alarm_set\",\n    \"angle_difference\",\n    \"animcurve_channel_evaluate\",\n    \"animcurve_channel_new\",\n    \"animcurve_create\",\n    \"animcurve_destroy\",\n    \"animcurve_exists\",\n    \"animcurve_get\",\n    \"animcurve_get_channel\",\n    \"animcurve_get_channel_index\",\n    \"animcurve_point_new\",\n    \"ansi_char\",\n    \"application_get_position\",\n    \"application_surface_draw_enable\",\n    \"application_surface_enable\",\n    \"application_surface_is_enabled\",\n    \"arccos\",\n    \"arcsin\",\n    \"arctan\",\n    \"arctan2\",\n    \"array_all\",\n    \"array_any\",\n    \"array_concat\",\n    \"array_contains\",\n    \"array_contains_ext\",\n    \"array_copy\",\n    \"array_copy_while\",\n    \"array_create\",\n    \"array_create_ext\",\n    \"array_delete\",\n    \"array_equals\",\n    \"array_filter\",\n    \"array_filter_ext\",\n    \"array_find_index\",\n    \"array_first\",\n    \"array_foreach\",\n    \"array_get\",\n    \"array_get_index\",\n    \"array_insert\",\n    \"array_intersection\",\n    \"array_last\",\n    \"array_length\",\n    \"array_map\",\n    \"array_map_ext\",\n    \"array_pop\",\n    \"array_push\",\n    \"array_reduce\",\n    \"array_resize\",\n    \"array_reverse\",\n    \"array_reverse_ext\",\n    \"array_set\",\n    \"array_shuffle\",\n    \"array_shuffle_ext\",\n    \"array_sort\",\n    \"array_union\",\n    \"array_unique\",\n    \"array_unique_ext\",\n    \"asset_add_tags\",\n    \"asset_clear_tags\",\n    \"asset_get_ids\",\n    \"asset_get_index\",\n    \"asset_get_tags\",\n    \"asset_get_type\",\n    \"asset_has_any_tag\",\n    \"asset_has_tags\",\n    \"asset_remove_tags\",\n    \"audio_bus_clear_emitters\",\n    \"audio_bus_create\",\n    \"audio_bus_get_emitters\",\n    \"audio_channel_num\",\n    \"audio_create_buffer_sound\",\n    \"audio_create_play_queue\",\n    \"audio_create_stream\",\n    \"audio_create_sync_group\",\n    \"audio_debug\",\n    \"audio_destroy_stream\",\n    \"audio_destroy_sync_group\",\n    \"audio_effect_create\",\n    \"audio_emitter_bus\",\n    \"audio_emitter_create\",\n    \"audio_emitter_exists\",\n    \"audio_emitter_falloff\",\n    \"audio_emitter_free\",\n    \"audio_emitter_gain\",\n    \"audio_emitter_get_bus\",\n    \"audio_emitter_get_gain\",\n    \"audio_emitter_get_listener_mask\",\n    \"audio_emitter_get_pitch\",\n    \"audio_emitter_get_vx\",\n    \"audio_emitter_get_vy\",\n    \"audio_emitter_get_vz\",\n    \"audio_emitter_get_x\",\n    \"audio_emitter_get_y\",\n    \"audio_emitter_get_z\",\n    \"audio_emitter_pitch\",\n    \"audio_emitter_position\",\n    \"audio_emitter_set_listener_mask\",\n    \"audio_emitter_velocity\",\n    \"audio_exists\",\n    \"audio_falloff_set_model\",\n    \"audio_free_buffer_sound\",\n    \"audio_free_play_queue\",\n    \"audio_get_listener_count\",\n    \"audio_get_listener_info\",\n    \"audio_get_listener_mask\",\n    \"audio_get_master_gain\",\n    \"audio_get_name\",\n    \"audio_get_recorder_count\",\n    \"audio_get_recorder_info\",\n    \"audio_get_type\",\n    \"audio_group_get_assets\",\n    \"audio_group_get_gain\",\n    \"audio_group_is_loaded\",\n    \"audio_group_load\",\n    \"audio_group_load_progress\",\n    \"audio_group_name\",\n    \"audio_group_set_gain\",\n    \"audio_group_stop_all\",\n    \"audio_group_unload\",\n    \"audio_is_paused\",\n    \"audio_is_playing\",\n    \"audio_listener_get_data\",\n    \"audio_listener_orientation\",\n    \"audio_listener_position\",\n    \"audio_listener_set_orientation\",\n    \"audio_listener_set_position\",\n    \"audio_listener_set_velocity\",\n    \"audio_listener_velocity\",\n    \"audio_master_gain\",\n    \"audio_pause_all\",\n    \"audio_pause_sound\",\n    \"audio_pause_sync_group\",\n    \"audio_play_in_sync_group\",\n    \"audio_play_sound\",\n    \"audio_play_sound_at\",\n    \"audio_play_sound_ext\",\n    \"audio_play_sound_on\",\n    \"audio_queue_sound\",\n    \"audio_resume_all\",\n    \"audio_resume_sound\",\n    \"audio_resume_sync_group\",\n    \"audio_set_listener_mask\",\n    \"audio_set_master_gain\",\n    \"audio_sound_gain\",\n    \"audio_sound_get_audio_group\",\n    \"audio_sound_get_gain\",\n    \"audio_sound_get_listener_mask\",\n    \"audio_sound_get_loop\",\n    \"audio_sound_get_loop_end\",\n    \"audio_sound_get_loop_start\",\n    \"audio_sound_get_pitch\",\n    \"audio_sound_get_track_position\",\n    \"audio_sound_is_playable\",\n    \"audio_sound_length\",\n    \"audio_sound_loop\",\n    \"audio_sound_loop_end\",\n    \"audio_sound_loop_start\",\n    \"audio_sound_pitch\",\n    \"audio_sound_set_listener_mask\",\n    \"audio_sound_set_track_position\",\n    \"audio_start_recording\",\n    \"audio_start_sync_group\",\n    \"audio_stop_all\",\n    \"audio_stop_recording\",\n    \"audio_stop_sound\",\n    \"audio_stop_sync_group\",\n    \"audio_sync_group_debug\",\n    \"audio_sync_group_get_track_pos\",\n    \"audio_sync_group_is_paused\",\n    \"audio_sync_group_is_playing\",\n    \"audio_system_is_available\",\n    \"audio_system_is_initialised\",\n    \"base64_decode\",\n    \"base64_encode\",\n    \"bool\",\n    \"browser_input_capture\",\n    \"buffer_async_group_begin\",\n    \"buffer_async_group_end\",\n    \"buffer_async_group_option\",\n    \"buffer_base64_decode\",\n    \"buffer_base64_decode_ext\",\n    \"buffer_base64_encode\",\n    \"buffer_compress\",\n    \"buffer_copy\",\n    \"buffer_copy_from_vertex_buffer\",\n    \"buffer_copy_stride\",\n    \"buffer_crc32\",\n    \"buffer_create\",\n    \"buffer_create_from_vertex_buffer\",\n    \"buffer_create_from_vertex_buffer_ext\",\n    \"buffer_decompress\",\n    \"buffer_delete\",\n    \"buffer_exists\",\n    \"buffer_fill\",\n    \"buffer_get_address\",\n    \"buffer_get_alignment\",\n    \"buffer_get_size\",\n    \"buffer_get_surface\",\n    \"buffer_get_type\",\n    \"buffer_load\",\n    \"buffer_load_async\",\n    \"buffer_load_ext\",\n    \"buffer_load_partial\",\n    \"buffer_md5\",\n    \"buffer_peek\",\n    \"buffer_poke\",\n    \"buffer_read\",\n    \"buffer_resize\",\n    \"buffer_save\",\n    \"buffer_save_async\",\n    \"buffer_save_ext\",\n    \"buffer_seek\",\n    \"buffer_set_surface\",\n    \"buffer_set_used_size\",\n    \"buffer_sha1\",\n    \"buffer_sizeof\",\n    \"buffer_tell\",\n    \"buffer_write\",\n    \"call_cancel\",\n    \"call_later\",\n    \"camera_apply\",\n    \"camera_copy_transforms\",\n    \"camera_create\",\n    \"camera_create_view\",\n    \"camera_destroy\",\n    \"camera_get_active\",\n    \"camera_get_begin_script\",\n    \"camera_get_default\",\n    \"camera_get_end_script\",\n    \"camera_get_proj_mat\",\n    \"camera_get_update_script\",\n    \"camera_get_view_angle\",\n    \"camera_get_view_border_x\",\n    \"camera_get_view_border_y\",\n    \"camera_get_view_height\",\n    \"camera_get_view_mat\",\n    \"camera_get_view_speed_x\",\n    \"camera_get_view_speed_y\",\n    \"camera_get_view_target\",\n    \"camera_get_view_width\",\n    \"camera_get_view_x\",\n    \"camera_get_view_y\",\n    \"camera_set_begin_script\",\n    \"camera_set_default\",\n    \"camera_set_end_script\",\n    \"camera_set_proj_mat\",\n    \"camera_set_update_script\",\n    \"camera_set_view_angle\",\n    \"camera_set_view_border\",\n    \"camera_set_view_mat\",\n    \"camera_set_view_pos\",\n    \"camera_set_view_size\",\n    \"camera_set_view_speed\",\n    \"camera_set_view_target\",\n    \"ceil\",\n    \"choose\",\n    \"chr\",\n    \"clamp\",\n    \"clickable_add\",\n    \"clickable_add_ext\",\n    \"clickable_change\",\n    \"clickable_change_ext\",\n    \"clickable_delete\",\n    \"clickable_exists\",\n    \"clickable_set_style\",\n    \"clipboard_get_text\",\n    \"clipboard_has_text\",\n    \"clipboard_set_text\",\n    \"cloud_file_save\",\n    \"cloud_string_save\",\n    \"cloud_synchronise\",\n    \"code_is_compiled\",\n    \"collision_circle\",\n    \"collision_circle_list\",\n    \"collision_ellipse\",\n    \"collision_ellipse_list\",\n    \"collision_line\",\n    \"collision_line_list\",\n    \"collision_point\",\n    \"collision_point_list\",\n    \"collision_rectangle\",\n    \"collision_rectangle_list\",\n    \"color_get_blue\",\n    \"color_get_green\",\n    \"color_get_hue\",\n    \"color_get_red\",\n    \"color_get_saturation\",\n    \"color_get_value\",\n    \"colour_get_blue\",\n    \"colour_get_green\",\n    \"colour_get_hue\",\n    \"colour_get_red\",\n    \"colour_get_saturation\",\n    \"colour_get_value\",\n    \"cos\",\n    \"darccos\",\n    \"darcsin\",\n    \"darctan\",\n    \"darctan2\",\n    \"date_compare_date\",\n    \"date_compare_datetime\",\n    \"date_compare_time\",\n    \"date_create_datetime\",\n    \"date_current_datetime\",\n    \"date_date_of\",\n    \"date_date_string\",\n    \"date_datetime_string\",\n    \"date_day_span\",\n    \"date_days_in_month\",\n    \"date_days_in_year\",\n    \"date_get_day\",\n    \"date_get_day_of_year\",\n    \"date_get_hour\",\n    \"date_get_hour_of_year\",\n    \"date_get_minute\",\n    \"date_get_minute_of_year\",\n    \"date_get_month\",\n    \"date_get_second\",\n    \"date_get_second_of_year\",\n    \"date_get_timezone\",\n    \"date_get_week\",\n    \"date_get_weekday\",\n    \"date_get_year\",\n    \"date_hour_span\",\n    \"date_inc_day\",\n    \"date_inc_hour\",\n    \"date_inc_minute\",\n    \"date_inc_month\",\n    \"date_inc_second\",\n    \"date_inc_week\",\n    \"date_inc_year\",\n    \"date_is_today\",\n    \"date_leap_year\",\n    \"date_minute_span\",\n    \"date_month_span\",\n    \"date_second_span\",\n    \"date_set_timezone\",\n    \"date_time_of\",\n    \"date_time_string\",\n    \"date_valid_datetime\",\n    \"date_week_span\",\n    \"date_year_span\",\n    \"db_to_lin\",\n    \"dbg_add_font_glyphs\",\n    \"dbg_button\",\n    \"dbg_checkbox\",\n    \"dbg_color\",\n    \"dbg_colour\",\n    \"dbg_drop_down\",\n    \"dbg_same_line\",\n    \"dbg_section\",\n    \"dbg_section_delete\",\n    \"dbg_section_exists\",\n    \"dbg_slider\",\n    \"dbg_slider_int\",\n    \"dbg_sprite\",\n    \"dbg_text\",\n    \"dbg_text_input\",\n    \"dbg_view\",\n    \"dbg_view_delete\",\n    \"dbg_view_exists\",\n    \"dbg_watch\",\n    \"dcos\",\n    \"debug_event\",\n    \"debug_get_callstack\",\n    \"degtorad\",\n    \"device_get_tilt_x\",\n    \"device_get_tilt_y\",\n    \"device_get_tilt_z\",\n    \"device_is_keypad_open\",\n    \"device_mouse_check_button\",\n    \"device_mouse_check_button_pressed\",\n    \"device_mouse_check_button_released\",\n    \"device_mouse_dbclick_enable\",\n    \"device_mouse_raw_x\",\n    \"device_mouse_raw_y\",\n    \"device_mouse_x\",\n    \"device_mouse_x_to_gui\",\n    \"device_mouse_y\",\n    \"device_mouse_y_to_gui\",\n    \"directory_create\",\n    \"directory_destroy\",\n    \"directory_exists\",\n    \"display_get_dpi_x\",\n    \"display_get_dpi_y\",\n    \"display_get_frequency\",\n    \"display_get_gui_height\",\n    \"display_get_gui_width\",\n    \"display_get_height\",\n    \"display_get_orientation\",\n    \"display_get_sleep_margin\",\n    \"display_get_timing_method\",\n    \"display_get_width\",\n    \"display_mouse_get_x\",\n    \"display_mouse_get_y\",\n    \"display_mouse_set\",\n    \"display_reset\",\n    \"display_set_gui_maximise\",\n    \"display_set_gui_maximize\",\n    \"display_set_gui_size\",\n    \"display_set_sleep_margin\",\n    \"display_set_timing_method\",\n    \"display_set_ui_visibility\",\n    \"distance_to_object\",\n    \"distance_to_point\",\n    \"dot_product\",\n    \"dot_product_3d\",\n    \"dot_product_3d_normalised\",\n    \"dot_product_3d_normalized\",\n    \"dot_product_normalised\",\n    \"dot_product_normalized\",\n    \"draw_arrow\",\n    \"draw_button\",\n    \"draw_circle\",\n    \"draw_circle_color\",\n    \"draw_circle_colour\",\n    \"draw_clear\",\n    \"draw_clear_alpha\",\n    \"draw_ellipse\",\n    \"draw_ellipse_color\",\n    \"draw_ellipse_colour\",\n    \"draw_enable_drawevent\",\n    \"draw_enable_skeleton_blendmodes\",\n    \"draw_enable_swf_aa\",\n    \"draw_flush\",\n    \"draw_get_alpha\",\n    \"draw_get_color\",\n    \"draw_get_colour\",\n    \"draw_get_enable_skeleton_blendmodes\",\n    \"draw_get_font\",\n    \"draw_get_halign\",\n    \"draw_get_lighting\",\n    \"draw_get_swf_aa_level\",\n    \"draw_get_valign\",\n    \"draw_getpixel\",\n    \"draw_getpixel_ext\",\n    \"draw_healthbar\",\n    \"draw_highscore\",\n    \"draw_light_define_ambient\",\n    \"draw_light_define_direction\",\n    \"draw_light_define_point\",\n    \"draw_light_enable\",\n    \"draw_light_get\",\n    \"draw_light_get_ambient\",\n    \"draw_line\",\n    \"draw_line_color\",\n    \"draw_line_colour\",\n    \"draw_line_width\",\n    \"draw_line_width_color\",\n    \"draw_line_width_colour\",\n    \"draw_path\",\n    \"draw_point\",\n    \"draw_point_color\",\n    \"draw_point_colour\",\n    \"draw_primitive_begin\",\n    \"draw_primitive_begin_texture\",\n    \"draw_primitive_end\",\n    \"draw_rectangle\",\n    \"draw_rectangle_color\",\n    \"draw_rectangle_colour\",\n    \"draw_roundrect\",\n    \"draw_roundrect_color\",\n    \"draw_roundrect_color_ext\",\n    \"draw_roundrect_colour\",\n    \"draw_roundrect_colour_ext\",\n    \"draw_roundrect_ext\",\n    \"draw_self\",\n    \"draw_set_alpha\",\n    \"draw_set_circle_precision\",\n    \"draw_set_color\",\n    \"draw_set_colour\",\n    \"draw_set_font\",\n    \"draw_set_halign\",\n    \"draw_set_lighting\",\n    \"draw_set_swf_aa_level\",\n    \"draw_set_valign\",\n    \"draw_skeleton\",\n    \"draw_skeleton_collision\",\n    \"draw_skeleton_instance\",\n    \"draw_skeleton_time\",\n    \"draw_sprite\",\n    \"draw_sprite_ext\",\n    \"draw_sprite_general\",\n    \"draw_sprite_part\",\n    \"draw_sprite_part_ext\",\n    \"draw_sprite_pos\",\n    \"draw_sprite_stretched\",\n    \"draw_sprite_stretched_ext\",\n    \"draw_sprite_tiled\",\n    \"draw_sprite_tiled_ext\",\n    \"draw_surface\",\n    \"draw_surface_ext\",\n    \"draw_surface_general\",\n    \"draw_surface_part\",\n    \"draw_surface_part_ext\",\n    \"draw_surface_stretched\",\n    \"draw_surface_stretched_ext\",\n    \"draw_surface_tiled\",\n    \"draw_surface_tiled_ext\",\n    \"draw_text\",\n    \"draw_text_color\",\n    \"draw_text_colour\",\n    \"draw_text_ext\",\n    \"draw_text_ext_color\",\n    \"draw_text_ext_colour\",\n    \"draw_text_ext_transformed\",\n    \"draw_text_ext_transformed_color\",\n    \"draw_text_ext_transformed_colour\",\n    \"draw_text_transformed\",\n    \"draw_text_transformed_color\",\n    \"draw_text_transformed_colour\",\n    \"draw_texture_flush\",\n    \"draw_tile\",\n    \"draw_tilemap\",\n    \"draw_triangle\",\n    \"draw_triangle_color\",\n    \"draw_triangle_colour\",\n    \"draw_vertex\",\n    \"draw_vertex_color\",\n    \"draw_vertex_colour\",\n    \"draw_vertex_texture\",\n    \"draw_vertex_texture_color\",\n    \"draw_vertex_texture_colour\",\n    \"ds_exists\",\n    \"ds_grid_add\",\n    \"ds_grid_add_disk\",\n    \"ds_grid_add_grid_region\",\n    \"ds_grid_add_region\",\n    \"ds_grid_clear\",\n    \"ds_grid_copy\",\n    \"ds_grid_create\",\n    \"ds_grid_destroy\",\n    \"ds_grid_get\",\n    \"ds_grid_get_disk_max\",\n    \"ds_grid_get_disk_mean\",\n    \"ds_grid_get_disk_min\",\n    \"ds_grid_get_disk_sum\",\n    \"ds_grid_get_max\",\n    \"ds_grid_get_mean\",\n    \"ds_grid_get_min\",\n    \"ds_grid_get_sum\",\n    \"ds_grid_height\",\n    \"ds_grid_multiply\",\n    \"ds_grid_multiply_disk\",\n    \"ds_grid_multiply_grid_region\",\n    \"ds_grid_multiply_region\",\n    \"ds_grid_read\",\n    \"ds_grid_resize\",\n    \"ds_grid_set\",\n    \"ds_grid_set_disk\",\n    \"ds_grid_set_grid_region\",\n    \"ds_grid_set_region\",\n    \"ds_grid_shuffle\",\n    \"ds_grid_sort\",\n    \"ds_grid_to_mp_grid\",\n    \"ds_grid_value_disk_exists\",\n    \"ds_grid_value_disk_x\",\n    \"ds_grid_value_disk_y\",\n    \"ds_grid_value_exists\",\n    \"ds_grid_value_x\",\n    \"ds_grid_value_y\",\n    \"ds_grid_width\",\n    \"ds_grid_write\",\n    \"ds_list_add\",\n    \"ds_list_clear\",\n    \"ds_list_copy\",\n    \"ds_list_create\",\n    \"ds_list_delete\",\n    \"ds_list_destroy\",\n    \"ds_list_empty\",\n    \"ds_list_find_index\",\n    \"ds_list_find_value\",\n    \"ds_list_insert\",\n    \"ds_list_is_list\",\n    \"ds_list_is_map\",\n    \"ds_list_mark_as_list\",\n    \"ds_list_mark_as_map\",\n    \"ds_list_read\",\n    \"ds_list_replace\",\n    \"ds_list_set\",\n    \"ds_list_shuffle\",\n    \"ds_list_size\",\n    \"ds_list_sort\",\n    \"ds_list_write\",\n    \"ds_map_add\",\n    \"ds_map_add_list\",\n    \"ds_map_add_map\",\n    \"ds_map_clear\",\n    \"ds_map_copy\",\n    \"ds_map_create\",\n    \"ds_map_delete\",\n    \"ds_map_destroy\",\n    \"ds_map_empty\",\n    \"ds_map_exists\",\n    \"ds_map_find_first\",\n    \"ds_map_find_last\",\n    \"ds_map_find_next\",\n    \"ds_map_find_previous\",\n    \"ds_map_find_value\",\n    \"ds_map_is_list\",\n    \"ds_map_is_map\",\n    \"ds_map_keys_to_array\",\n    \"ds_map_read\",\n    \"ds_map_replace\",\n    \"ds_map_replace_list\",\n    \"ds_map_replace_map\",\n    \"ds_map_secure_load\",\n    \"ds_map_secure_load_buffer\",\n    \"ds_map_secure_save\",\n    \"ds_map_secure_save_buffer\",\n    \"ds_map_set\",\n    \"ds_map_size\",\n    \"ds_map_values_to_array\",\n    \"ds_map_write\",\n    \"ds_priority_add\",\n    \"ds_priority_change_priority\",\n    \"ds_priority_clear\",\n    \"ds_priority_copy\",\n    \"ds_priority_create\",\n    \"ds_priority_delete_max\",\n    \"ds_priority_delete_min\",\n    \"ds_priority_delete_value\",\n    \"ds_priority_destroy\",\n    \"ds_priority_empty\",\n    \"ds_priority_find_max\",\n    \"ds_priority_find_min\",\n    \"ds_priority_find_priority\",\n    \"ds_priority_read\",\n    \"ds_priority_size\",\n    \"ds_priority_write\",\n    \"ds_queue_clear\",\n    \"ds_queue_copy\",\n    \"ds_queue_create\",\n    \"ds_queue_dequeue\",\n    \"ds_queue_destroy\",\n    \"ds_queue_empty\",\n    \"ds_queue_enqueue\",\n    \"ds_queue_head\",\n    \"ds_queue_read\",\n    \"ds_queue_size\",\n    \"ds_queue_tail\",\n    \"ds_queue_write\",\n    \"ds_set_precision\",\n    \"ds_stack_clear\",\n    \"ds_stack_copy\",\n    \"ds_stack_create\",\n    \"ds_stack_destroy\",\n    \"ds_stack_empty\",\n    \"ds_stack_pop\",\n    \"ds_stack_push\",\n    \"ds_stack_read\",\n    \"ds_stack_size\",\n    \"ds_stack_top\",\n    \"ds_stack_write\",\n    \"dsin\",\n    \"dtan\",\n    \"effect_clear\",\n    \"effect_create_above\",\n    \"effect_create_below\",\n    \"effect_create_depth\",\n    \"effect_create_layer\",\n    \"environment_get_variable\",\n    \"event_inherited\",\n    \"event_perform\",\n    \"event_perform_async\",\n    \"event_perform_object\",\n    \"event_user\",\n    \"exception_unhandled_handler\",\n    \"exp\",\n    \"extension_exists\",\n    \"extension_get_option_count\",\n    \"extension_get_option_names\",\n    \"extension_get_option_value\",\n    \"extension_get_options\",\n    \"extension_get_version\",\n    \"external_call\",\n    \"external_define\",\n    \"external_free\",\n    \"file_attributes\",\n    \"file_bin_close\",\n    \"file_bin_open\",\n    \"file_bin_position\",\n    \"file_bin_read_byte\",\n    \"file_bin_rewrite\",\n    \"file_bin_seek\",\n    \"file_bin_size\",\n    \"file_bin_write_byte\",\n    \"file_copy\",\n    \"file_delete\",\n    \"file_exists\",\n    \"file_find_close\",\n    \"file_find_first\",\n    \"file_find_next\",\n    \"file_rename\",\n    \"file_text_close\",\n    \"file_text_eof\",\n    \"file_text_eoln\",\n    \"file_text_open_append\",\n    \"file_text_open_from_string\",\n    \"file_text_open_read\",\n    \"file_text_open_write\",\n    \"file_text_read_real\",\n    \"file_text_read_string\",\n    \"file_text_readln\",\n    \"file_text_write_real\",\n    \"file_text_write_string\",\n    \"file_text_writeln\",\n    \"filename_change_ext\",\n    \"filename_dir\",\n    \"filename_drive\",\n    \"filename_ext\",\n    \"filename_name\",\n    \"filename_path\",\n    \"floor\",\n    \"font_add\",\n    \"font_add_enable_aa\",\n    \"font_add_get_enable_aa\",\n    \"font_add_sprite\",\n    \"font_add_sprite_ext\",\n    \"font_cache_glyph\",\n    \"font_delete\",\n    \"font_enable_effects\",\n    \"font_enable_sdf\",\n    \"font_exists\",\n    \"font_get_bold\",\n    \"font_get_first\",\n    \"font_get_fontname\",\n    \"font_get_info\",\n    \"font_get_italic\",\n    \"font_get_last\",\n    \"font_get_name\",\n    \"font_get_sdf_enabled\",\n    \"font_get_sdf_spread\",\n    \"font_get_size\",\n    \"font_get_texture\",\n    \"font_get_uvs\",\n    \"font_replace_sprite\",\n    \"font_replace_sprite_ext\",\n    \"font_sdf_spread\",\n    \"font_set_cache_size\",\n    \"frac\",\n    \"fx_create\",\n    \"fx_get_name\",\n    \"fx_get_parameter\",\n    \"fx_get_parameter_names\",\n    \"fx_get_parameters\",\n    \"fx_get_single_layer\",\n    \"fx_set_parameter\",\n    \"fx_set_parameters\",\n    \"fx_set_single_layer\",\n    \"game_change\",\n    \"game_end\",\n    \"game_get_speed\",\n    \"game_load\",\n    \"game_load_buffer\",\n    \"game_restart\",\n    \"game_save\",\n    \"game_save_buffer\",\n    \"game_set_speed\",\n    \"gamepad_axis_count\",\n    \"gamepad_axis_value\",\n    \"gamepad_button_check\",\n    \"gamepad_button_check_pressed\",\n    \"gamepad_button_check_released\",\n    \"gamepad_button_count\",\n    \"gamepad_button_value\",\n    \"gamepad_get_axis_deadzone\",\n    \"gamepad_get_button_threshold\",\n    \"gamepad_get_description\",\n    \"gamepad_get_device_count\",\n    \"gamepad_get_guid\",\n    \"gamepad_get_mapping\",\n    \"gamepad_get_option\",\n    \"gamepad_hat_count\",\n    \"gamepad_hat_value\",\n    \"gamepad_is_connected\",\n    \"gamepad_is_supported\",\n    \"gamepad_remove_mapping\",\n    \"gamepad_set_axis_deadzone\",\n    \"gamepad_set_button_threshold\",\n    \"gamepad_set_color\",\n    \"gamepad_set_colour\",\n    \"gamepad_set_option\",\n    \"gamepad_set_vibration\",\n    \"gamepad_test_mapping\",\n    \"gc_collect\",\n    \"gc_enable\",\n    \"gc_get_stats\",\n    \"gc_get_target_frame_time\",\n    \"gc_is_enabled\",\n    \"gc_target_frame_time\",\n    \"gesture_double_tap_distance\",\n    \"gesture_double_tap_time\",\n    \"gesture_drag_distance\",\n    \"gesture_drag_time\",\n    \"gesture_flick_speed\",\n    \"gesture_get_double_tap_distance\",\n    \"gesture_get_double_tap_time\",\n    \"gesture_get_drag_distance\",\n    \"gesture_get_drag_time\",\n    \"gesture_get_flick_speed\",\n    \"gesture_get_pinch_angle_away\",\n    \"gesture_get_pinch_angle_towards\",\n    \"gesture_get_pinch_distance\",\n    \"gesture_get_rotate_angle\",\n    \"gesture_get_rotate_time\",\n    \"gesture_get_tap_count\",\n    \"gesture_pinch_angle_away\",\n    \"gesture_pinch_angle_towards\",\n    \"gesture_pinch_distance\",\n    \"gesture_rotate_angle\",\n    \"gesture_rotate_time\",\n    \"gesture_tap_count\",\n    \"get_integer\",\n    \"get_integer_async\",\n    \"get_login_async\",\n    \"get_open_filename\",\n    \"get_open_filename_ext\",\n    \"get_save_filename\",\n    \"get_save_filename_ext\",\n    \"get_string\",\n    \"get_string_async\",\n    \"get_timer\",\n    \"gif_add_surface\",\n    \"gif_open\",\n    \"gif_save\",\n    \"gif_save_buffer\",\n    \"gml_pragma\",\n    \"gml_release_mode\",\n    \"gpu_get_alphatestenable\",\n    \"gpu_get_alphatestref\",\n    \"gpu_get_blendenable\",\n    \"gpu_get_blendmode\",\n    \"gpu_get_blendmode_dest\",\n    \"gpu_get_blendmode_destalpha\",\n    \"gpu_get_blendmode_ext\",\n    \"gpu_get_blendmode_ext_sepalpha\",\n    \"gpu_get_blendmode_src\",\n    \"gpu_get_blendmode_srcalpha\",\n    \"gpu_get_colorwriteenable\",\n    \"gpu_get_colourwriteenable\",\n    \"gpu_get_cullmode\",\n    \"gpu_get_depth\",\n    \"gpu_get_fog\",\n    \"gpu_get_state\",\n    \"gpu_get_tex_filter\",\n    \"gpu_get_tex_filter_ext\",\n    \"gpu_get_tex_max_aniso\",\n    \"gpu_get_tex_max_aniso_ext\",\n    \"gpu_get_tex_max_mip\",\n    \"gpu_get_tex_max_mip_ext\",\n    \"gpu_get_tex_min_mip\",\n    \"gpu_get_tex_min_mip_ext\",\n    \"gpu_get_tex_mip_bias\",\n    \"gpu_get_tex_mip_bias_ext\",\n    \"gpu_get_tex_mip_enable\",\n    \"gpu_get_tex_mip_enable_ext\",\n    \"gpu_get_tex_mip_filter\",\n    \"gpu_get_tex_mip_filter_ext\",\n    \"gpu_get_tex_repeat\",\n    \"gpu_get_tex_repeat_ext\",\n    \"gpu_get_texfilter\",\n    \"gpu_get_texfilter_ext\",\n    \"gpu_get_texrepeat\",\n    \"gpu_get_texrepeat_ext\",\n    \"gpu_get_zfunc\",\n    \"gpu_get_ztestenable\",\n    \"gpu_get_zwriteenable\",\n    \"gpu_pop_state\",\n    \"gpu_push_state\",\n    \"gpu_set_alphatestenable\",\n    \"gpu_set_alphatestref\",\n    \"gpu_set_blendenable\",\n    \"gpu_set_blendmode\",\n    \"gpu_set_blendmode_ext\",\n    \"gpu_set_blendmode_ext_sepalpha\",\n    \"gpu_set_colorwriteenable\",\n    \"gpu_set_colourwriteenable\",\n    \"gpu_set_cullmode\",\n    \"gpu_set_depth\",\n    \"gpu_set_fog\",\n    \"gpu_set_state\",\n    \"gpu_set_tex_filter\",\n    \"gpu_set_tex_filter_ext\",\n    \"gpu_set_tex_max_aniso\",\n    \"gpu_set_tex_max_aniso_ext\",\n    \"gpu_set_tex_max_mip\",\n    \"gpu_set_tex_max_mip_ext\",\n    \"gpu_set_tex_min_mip\",\n    \"gpu_set_tex_min_mip_ext\",\n    \"gpu_set_tex_mip_bias\",\n    \"gpu_set_tex_mip_bias_ext\",\n    \"gpu_set_tex_mip_enable\",\n    \"gpu_set_tex_mip_enable_ext\",\n    \"gpu_set_tex_mip_filter\",\n    \"gpu_set_tex_mip_filter_ext\",\n    \"gpu_set_tex_repeat\",\n    \"gpu_set_tex_repeat_ext\",\n    \"gpu_set_texfilter\",\n    \"gpu_set_texfilter_ext\",\n    \"gpu_set_texrepeat\",\n    \"gpu_set_texrepeat_ext\",\n    \"gpu_set_zfunc\",\n    \"gpu_set_ztestenable\",\n    \"gpu_set_zwriteenable\",\n    \"handle_parse\",\n    \"highscore_add\",\n    \"highscore_clear\",\n    \"highscore_name\",\n    \"highscore_value\",\n    \"http_get\",\n    \"http_get_file\",\n    \"http_get_request_crossorigin\",\n    \"http_post_string\",\n    \"http_request\",\n    \"http_set_request_crossorigin\",\n    \"iap_acquire\",\n    \"iap_activate\",\n    \"iap_consume\",\n    \"iap_enumerate_products\",\n    \"iap_product_details\",\n    \"iap_purchase_details\",\n    \"iap_restore_all\",\n    \"iap_status\",\n    \"ini_close\",\n    \"ini_key_delete\",\n    \"ini_key_exists\",\n    \"ini_open\",\n    \"ini_open_from_string\",\n    \"ini_read_real\",\n    \"ini_read_string\",\n    \"ini_section_delete\",\n    \"ini_section_exists\",\n    \"ini_write_real\",\n    \"ini_write_string\",\n    \"instance_activate_all\",\n    \"instance_activate_layer\",\n    \"instance_activate_object\",\n    \"instance_activate_region\",\n    \"instance_change\",\n    \"instance_copy\",\n    \"instance_create_depth\",\n    \"instance_create_layer\",\n    \"instance_deactivate_all\",\n    \"instance_deactivate_layer\",\n    \"instance_deactivate_object\",\n    \"instance_deactivate_region\",\n    \"instance_destroy\",\n    \"instance_exists\",\n    \"instance_find\",\n    \"instance_furthest\",\n    \"instance_id_get\",\n    \"instance_nearest\",\n    \"instance_number\",\n    \"instance_place\",\n    \"instance_place_list\",\n    \"instance_position\",\n    \"instance_position_list\",\n    \"instanceof\",\n    \"int64\",\n    \"io_clear\",\n    \"irandom\",\n    \"irandom_range\",\n    \"is_array\",\n    \"is_bool\",\n    \"is_callable\",\n    \"is_debug_overlay_open\",\n    \"is_handle\",\n    \"is_infinity\",\n    \"is_instanceof\",\n    \"is_int32\",\n    \"is_int64\",\n    \"is_keyboard_used_debug_overlay\",\n    \"is_method\",\n    \"is_mouse_over_debug_overlay\",\n    \"is_nan\",\n    \"is_numeric\",\n    \"is_ptr\",\n    \"is_real\",\n    \"is_string\",\n    \"is_struct\",\n    \"is_undefined\",\n    \"json_decode\",\n    \"json_encode\",\n    \"json_parse\",\n    \"json_stringify\",\n    \"keyboard_check\",\n    \"keyboard_check_direct\",\n    \"keyboard_check_pressed\",\n    \"keyboard_check_released\",\n    \"keyboard_clear\",\n    \"keyboard_get_map\",\n    \"keyboard_get_numlock\",\n    \"keyboard_key_press\",\n    \"keyboard_key_release\",\n    \"keyboard_set_map\",\n    \"keyboard_set_numlock\",\n    \"keyboard_unset_map\",\n    \"keyboard_virtual_height\",\n    \"keyboard_virtual_hide\",\n    \"keyboard_virtual_show\",\n    \"keyboard_virtual_status\",\n    \"layer_add_instance\",\n    \"layer_background_alpha\",\n    \"layer_background_blend\",\n    \"layer_background_change\",\n    \"layer_background_create\",\n    \"layer_background_destroy\",\n    \"layer_background_exists\",\n    \"layer_background_get_alpha\",\n    \"layer_background_get_blend\",\n    \"layer_background_get_htiled\",\n    \"layer_background_get_id\",\n    \"layer_background_get_index\",\n    \"layer_background_get_speed\",\n    \"layer_background_get_sprite\",\n    \"layer_background_get_stretch\",\n    \"layer_background_get_visible\",\n    \"layer_background_get_vtiled\",\n    \"layer_background_get_xscale\",\n    \"layer_background_get_yscale\",\n    \"layer_background_htiled\",\n    \"layer_background_index\",\n    \"layer_background_speed\",\n    \"layer_background_sprite\",\n    \"layer_background_stretch\",\n    \"layer_background_visible\",\n    \"layer_background_vtiled\",\n    \"layer_background_xscale\",\n    \"layer_background_yscale\",\n    \"layer_clear_fx\",\n    \"layer_create\",\n    \"layer_depth\",\n    \"layer_destroy\",\n    \"layer_destroy_instances\",\n    \"layer_element_move\",\n    \"layer_enable_fx\",\n    \"layer_exists\",\n    \"layer_force_draw_depth\",\n    \"layer_fx_is_enabled\",\n    \"layer_get_all\",\n    \"layer_get_all_elements\",\n    \"layer_get_depth\",\n    \"layer_get_element_layer\",\n    \"layer_get_element_type\",\n    \"layer_get_forced_depth\",\n    \"layer_get_fx\",\n    \"layer_get_hspeed\",\n    \"layer_get_id\",\n    \"layer_get_id_at_depth\",\n    \"layer_get_name\",\n    \"layer_get_script_begin\",\n    \"layer_get_script_end\",\n    \"layer_get_shader\",\n    \"layer_get_target_room\",\n    \"layer_get_visible\",\n    \"layer_get_vspeed\",\n    \"layer_get_x\",\n    \"layer_get_y\",\n    \"layer_has_instance\",\n    \"layer_hspeed\",\n    \"layer_instance_get_instance\",\n    \"layer_is_draw_depth_forced\",\n    \"layer_reset_target_room\",\n    \"layer_script_begin\",\n    \"layer_script_end\",\n    \"layer_sequence_angle\",\n    \"layer_sequence_create\",\n    \"layer_sequence_destroy\",\n    \"layer_sequence_exists\",\n    \"layer_sequence_get_angle\",\n    \"layer_sequence_get_headdir\",\n    \"layer_sequence_get_headpos\",\n    \"layer_sequence_get_instance\",\n    \"layer_sequence_get_length\",\n    \"layer_sequence_get_sequence\",\n    \"layer_sequence_get_speedscale\",\n    \"layer_sequence_get_x\",\n    \"layer_sequence_get_xscale\",\n    \"layer_sequence_get_y\",\n    \"layer_sequence_get_yscale\",\n    \"layer_sequence_headdir\",\n    \"layer_sequence_headpos\",\n    \"layer_sequence_is_finished\",\n    \"layer_sequence_is_paused\",\n    \"layer_sequence_pause\",\n    \"layer_sequence_play\",\n    \"layer_sequence_speedscale\",\n    \"layer_sequence_x\",\n    \"layer_sequence_xscale\",\n    \"layer_sequence_y\",\n    \"layer_sequence_yscale\",\n    \"layer_set_fx\",\n    \"layer_set_target_room\",\n    \"layer_set_visible\",\n    \"layer_shader\",\n    \"layer_sprite_alpha\",\n    \"layer_sprite_angle\",\n    \"layer_sprite_blend\",\n    \"layer_sprite_change\",\n    \"layer_sprite_create\",\n    \"layer_sprite_destroy\",\n    \"layer_sprite_exists\",\n    \"layer_sprite_get_alpha\",\n    \"layer_sprite_get_angle\",\n    \"layer_sprite_get_blend\",\n    \"layer_sprite_get_id\",\n    \"layer_sprite_get_index\",\n    \"layer_sprite_get_speed\",\n    \"layer_sprite_get_sprite\",\n    \"layer_sprite_get_x\",\n    \"layer_sprite_get_xscale\",\n    \"layer_sprite_get_y\",\n    \"layer_sprite_get_yscale\",\n    \"layer_sprite_index\",\n    \"layer_sprite_speed\",\n    \"layer_sprite_x\",\n    \"layer_sprite_xscale\",\n    \"layer_sprite_y\",\n    \"layer_sprite_yscale\",\n    \"layer_tile_alpha\",\n    \"layer_tile_blend\",\n    \"layer_tile_change\",\n    \"layer_tile_create\",\n    \"layer_tile_destroy\",\n    \"layer_tile_exists\",\n    \"layer_tile_get_alpha\",\n    \"layer_tile_get_blend\",\n    \"layer_tile_get_region\",\n    \"layer_tile_get_sprite\",\n    \"layer_tile_get_visible\",\n    \"layer_tile_get_x\",\n    \"layer_tile_get_xscale\",\n    \"layer_tile_get_y\",\n    \"layer_tile_get_yscale\",\n    \"layer_tile_region\",\n    \"layer_tile_visible\",\n    \"layer_tile_x\",\n    \"layer_tile_xscale\",\n    \"layer_tile_y\",\n    \"layer_tile_yscale\",\n    \"layer_tilemap_create\",\n    \"layer_tilemap_destroy\",\n    \"layer_tilemap_exists\",\n    \"layer_tilemap_get_id\",\n    \"layer_vspeed\",\n    \"layer_x\",\n    \"layer_y\",\n    \"lengthdir_x\",\n    \"lengthdir_y\",\n    \"lerp\",\n    \"lin_to_db\",\n    \"ln\",\n    \"load_csv\",\n    \"log10\",\n    \"log2\",\n    \"logn\",\n    \"make_color_hsv\",\n    \"make_color_rgb\",\n    \"make_colour_hsv\",\n    \"make_colour_rgb\",\n    \"math_get_epsilon\",\n    \"math_set_epsilon\",\n    \"matrix_build\",\n    \"matrix_build_identity\",\n    \"matrix_build_lookat\",\n    \"matrix_build_projection_ortho\",\n    \"matrix_build_projection_perspective\",\n    \"matrix_build_projection_perspective_fov\",\n    \"matrix_get\",\n    \"matrix_multiply\",\n    \"matrix_set\",\n    \"matrix_stack_clear\",\n    \"matrix_stack_is_empty\",\n    \"matrix_stack_pop\",\n    \"matrix_stack_push\",\n    \"matrix_stack_set\",\n    \"matrix_stack_top\",\n    \"matrix_transform_vertex\",\n    \"max\",\n    \"md5_file\",\n    \"md5_string_unicode\",\n    \"md5_string_utf8\",\n    \"mean\",\n    \"median\",\n    \"merge_color\",\n    \"merge_colour\",\n    \"method\",\n    \"method_call\",\n    \"method_get_index\",\n    \"method_get_self\",\n    \"min\",\n    \"motion_add\",\n    \"motion_set\",\n    \"mouse_check_button\",\n    \"mouse_check_button_pressed\",\n    \"mouse_check_button_released\",\n    \"mouse_clear\",\n    \"mouse_wheel_down\",\n    \"mouse_wheel_up\",\n    \"move_and_collide\",\n    \"move_bounce_all\",\n    \"move_bounce_solid\",\n    \"move_contact_all\",\n    \"move_contact_solid\",\n    \"move_outside_all\",\n    \"move_outside_solid\",\n    \"move_random\",\n    \"move_snap\",\n    \"move_towards_point\",\n    \"move_wrap\",\n    \"mp_grid_add_cell\",\n    \"mp_grid_add_instances\",\n    \"mp_grid_add_rectangle\",\n    \"mp_grid_clear_all\",\n    \"mp_grid_clear_cell\",\n    \"mp_grid_clear_rectangle\",\n    \"mp_grid_create\",\n    \"mp_grid_destroy\",\n    \"mp_grid_draw\",\n    \"mp_grid_get_cell\",\n    \"mp_grid_path\",\n    \"mp_grid_to_ds_grid\",\n    \"mp_linear_path\",\n    \"mp_linear_path_object\",\n    \"mp_linear_step\",\n    \"mp_linear_step_object\",\n    \"mp_potential_path\",\n    \"mp_potential_path_object\",\n    \"mp_potential_settings\",\n    \"mp_potential_step\",\n    \"mp_potential_step_object\",\n    \"nameof\",\n    \"network_connect\",\n    \"network_connect_async\",\n    \"network_connect_raw\",\n    \"network_connect_raw_async\",\n    \"network_create_server\",\n    \"network_create_server_raw\",\n    \"network_create_socket\",\n    \"network_create_socket_ext\",\n    \"network_destroy\",\n    \"network_resolve\",\n    \"network_send_broadcast\",\n    \"network_send_packet\",\n    \"network_send_raw\",\n    \"network_send_udp\",\n    \"network_send_udp_raw\",\n    \"network_set_config\",\n    \"network_set_timeout\",\n    \"object_exists\",\n    \"object_get_mask\",\n    \"object_get_name\",\n    \"object_get_parent\",\n    \"object_get_persistent\",\n    \"object_get_physics\",\n    \"object_get_solid\",\n    \"object_get_sprite\",\n    \"object_get_visible\",\n    \"object_is_ancestor\",\n    \"object_set_mask\",\n    \"object_set_persistent\",\n    \"object_set_solid\",\n    \"object_set_sprite\",\n    \"object_set_visible\",\n    \"ord\",\n    \"os_check_permission\",\n    \"os_get_config\",\n    \"os_get_info\",\n    \"os_get_language\",\n    \"os_get_region\",\n    \"os_is_network_connected\",\n    \"os_is_paused\",\n    \"os_lock_orientation\",\n    \"os_powersave_enable\",\n    \"os_request_permission\",\n    \"os_set_orientation_lock\",\n    \"parameter_count\",\n    \"parameter_string\",\n    \"part_emitter_burst\",\n    \"part_emitter_clear\",\n    \"part_emitter_create\",\n    \"part_emitter_delay\",\n    \"part_emitter_destroy\",\n    \"part_emitter_destroy_all\",\n    \"part_emitter_enable\",\n    \"part_emitter_exists\",\n    \"part_emitter_interval\",\n    \"part_emitter_region\",\n    \"part_emitter_relative\",\n    \"part_emitter_stream\",\n    \"part_particles_burst\",\n    \"part_particles_clear\",\n    \"part_particles_count\",\n    \"part_particles_create\",\n    \"part_particles_create_color\",\n    \"part_particles_create_colour\",\n    \"part_system_angle\",\n    \"part_system_automatic_draw\",\n    \"part_system_automatic_update\",\n    \"part_system_clear\",\n    \"part_system_color\",\n    \"part_system_colour\",\n    \"part_system_create\",\n    \"part_system_create_layer\",\n    \"part_system_depth\",\n    \"part_system_destroy\",\n    \"part_system_draw_order\",\n    \"part_system_drawit\",\n    \"part_system_exists\",\n    \"part_system_get_info\",\n    \"part_system_get_layer\",\n    \"part_system_global_space\",\n    \"part_system_layer\",\n    \"part_system_position\",\n    \"part_system_update\",\n    \"part_type_alpha1\",\n    \"part_type_alpha2\",\n    \"part_type_alpha3\",\n    \"part_type_blend\",\n    \"part_type_clear\",\n    \"part_type_color1\",\n    \"part_type_color2\",\n    \"part_type_color3\",\n    \"part_type_color_hsv\",\n    \"part_type_color_mix\",\n    \"part_type_color_rgb\",\n    \"part_type_colour1\",\n    \"part_type_colour2\",\n    \"part_type_colour3\",\n    \"part_type_colour_hsv\",\n    \"part_type_colour_mix\",\n    \"part_type_colour_rgb\",\n    \"part_type_create\",\n    \"part_type_death\",\n    \"part_type_destroy\",\n    \"part_type_direction\",\n    \"part_type_exists\",\n    \"part_type_gravity\",\n    \"part_type_life\",\n    \"part_type_orientation\",\n    \"part_type_scale\",\n    \"part_type_shape\",\n    \"part_type_size\",\n    \"part_type_size_x\",\n    \"part_type_size_y\",\n    \"part_type_speed\",\n    \"part_type_sprite\",\n    \"part_type_step\",\n    \"part_type_subimage\",\n    \"particle_exists\",\n    \"particle_get_info\",\n    \"path_add\",\n    \"path_add_point\",\n    \"path_append\",\n    \"path_assign\",\n    \"path_change_point\",\n    \"path_clear_points\",\n    \"path_delete\",\n    \"path_delete_point\",\n    \"path_duplicate\",\n    \"path_end\",\n    \"path_exists\",\n    \"path_flip\",\n    \"path_get_closed\",\n    \"path_get_kind\",\n    \"path_get_length\",\n    \"path_get_name\",\n    \"path_get_number\",\n    \"path_get_point_speed\",\n    \"path_get_point_x\",\n    \"path_get_point_y\",\n    \"path_get_precision\",\n    \"path_get_speed\",\n    \"path_get_x\",\n    \"path_get_y\",\n    \"path_insert_point\",\n    \"path_mirror\",\n    \"path_rescale\",\n    \"path_reverse\",\n    \"path_rotate\",\n    \"path_set_closed\",\n    \"path_set_kind\",\n    \"path_set_precision\",\n    \"path_shift\",\n    \"path_start\",\n    \"physics_apply_angular_impulse\",\n    \"physics_apply_force\",\n    \"physics_apply_impulse\",\n    \"physics_apply_local_force\",\n    \"physics_apply_local_impulse\",\n    \"physics_apply_torque\",\n    \"physics_draw_debug\",\n    \"physics_fixture_add_point\",\n    \"physics_fixture_bind\",\n    \"physics_fixture_bind_ext\",\n    \"physics_fixture_create\",\n    \"physics_fixture_delete\",\n    \"physics_fixture_set_angular_damping\",\n    \"physics_fixture_set_awake\",\n    \"physics_fixture_set_box_shape\",\n    \"physics_fixture_set_chain_shape\",\n    \"physics_fixture_set_circle_shape\",\n    \"physics_fixture_set_collision_group\",\n    \"physics_fixture_set_density\",\n    \"physics_fixture_set_edge_shape\",\n    \"physics_fixture_set_friction\",\n    \"physics_fixture_set_kinematic\",\n    \"physics_fixture_set_linear_damping\",\n    \"physics_fixture_set_polygon_shape\",\n    \"physics_fixture_set_restitution\",\n    \"physics_fixture_set_sensor\",\n    \"physics_get_density\",\n    \"physics_get_friction\",\n    \"physics_get_restitution\",\n    \"physics_joint_delete\",\n    \"physics_joint_distance_create\",\n    \"physics_joint_enable_motor\",\n    \"physics_joint_friction_create\",\n    \"physics_joint_gear_create\",\n    \"physics_joint_get_value\",\n    \"physics_joint_prismatic_create\",\n    \"physics_joint_pulley_create\",\n    \"physics_joint_revolute_create\",\n    \"physics_joint_rope_create\",\n    \"physics_joint_set_value\",\n    \"physics_joint_weld_create\",\n    \"physics_joint_wheel_create\",\n    \"physics_mass_properties\",\n    \"physics_particle_count\",\n    \"physics_particle_create\",\n    \"physics_particle_delete\",\n    \"physics_particle_delete_region_box\",\n    \"physics_particle_delete_region_circle\",\n    \"physics_particle_delete_region_poly\",\n    \"physics_particle_draw\",\n    \"physics_particle_draw_ext\",\n    \"physics_particle_get_damping\",\n    \"physics_particle_get_data\",\n    \"physics_particle_get_data_particle\",\n    \"physics_particle_get_density\",\n    \"physics_particle_get_gravity_scale\",\n    \"physics_particle_get_group_flags\",\n    \"physics_particle_get_max_count\",\n    \"physics_particle_get_radius\",\n    \"physics_particle_group_add_point\",\n    \"physics_particle_group_begin\",\n    \"physics_particle_group_box\",\n    \"physics_particle_group_circle\",\n    \"physics_particle_group_count\",\n    \"physics_particle_group_delete\",\n    \"physics_particle_group_end\",\n    \"physics_particle_group_get_ang_vel\",\n    \"physics_particle_group_get_angle\",\n    \"physics_particle_group_get_centre_x\",\n    \"physics_particle_group_get_centre_y\",\n    \"physics_particle_group_get_data\",\n    \"physics_particle_group_get_inertia\",\n    \"physics_particle_group_get_mass\",\n    \"physics_particle_group_get_vel_x\",\n    \"physics_particle_group_get_vel_y\",\n    \"physics_particle_group_get_x\",\n    \"physics_particle_group_get_y\",\n    \"physics_particle_group_join\",\n    \"physics_particle_group_polygon\",\n    \"physics_particle_set_category_flags\",\n    \"physics_particle_set_damping\",\n    \"physics_particle_set_density\",\n    \"physics_particle_set_flags\",\n    \"physics_particle_set_gravity_scale\",\n    \"physics_particle_set_group_flags\",\n    \"physics_particle_set_max_count\",\n    \"physics_particle_set_radius\",\n    \"physics_pause_enable\",\n    \"physics_remove_fixture\",\n    \"physics_set_density\",\n    \"physics_set_friction\",\n    \"physics_set_restitution\",\n    \"physics_test_overlap\",\n    \"physics_world_create\",\n    \"physics_world_draw_debug\",\n    \"physics_world_gravity\",\n    \"physics_world_update_iterations\",\n    \"physics_world_update_speed\",\n    \"place_empty\",\n    \"place_free\",\n    \"place_meeting\",\n    \"place_snapped\",\n    \"point_direction\",\n    \"point_distance\",\n    \"point_distance_3d\",\n    \"point_in_circle\",\n    \"point_in_rectangle\",\n    \"point_in_triangle\",\n    \"position_change\",\n    \"position_destroy\",\n    \"position_empty\",\n    \"position_meeting\",\n    \"power\",\n    \"ptr\",\n    \"radtodeg\",\n    \"random\",\n    \"random_get_seed\",\n    \"random_range\",\n    \"random_set_seed\",\n    \"randomise\",\n    \"randomize\",\n    \"real\",\n    \"rectangle_in_circle\",\n    \"rectangle_in_rectangle\",\n    \"rectangle_in_triangle\",\n    \"ref_create\",\n    \"rollback_chat\",\n    \"rollback_create_game\",\n    \"rollback_define_extra_network_latency\",\n    \"rollback_define_input\",\n    \"rollback_define_input_frame_delay\",\n    \"rollback_define_mock_input\",\n    \"rollback_define_player\",\n    \"rollback_display_events\",\n    \"rollback_get_info\",\n    \"rollback_get_input\",\n    \"rollback_get_player_prefs\",\n    \"rollback_join_game\",\n    \"rollback_leave_game\",\n    \"rollback_set_player_prefs\",\n    \"rollback_start_game\",\n    \"rollback_sync_on_frame\",\n    \"rollback_use_late_join\",\n    \"rollback_use_manual_start\",\n    \"rollback_use_player_prefs\",\n    \"rollback_use_random_input\",\n    \"room_add\",\n    \"room_assign\",\n    \"room_duplicate\",\n    \"room_exists\",\n    \"room_get_camera\",\n    \"room_get_info\",\n    \"room_get_name\",\n    \"room_get_viewport\",\n    \"room_goto\",\n    \"room_goto_next\",\n    \"room_goto_previous\",\n    \"room_instance_add\",\n    \"room_instance_clear\",\n    \"room_next\",\n    \"room_previous\",\n    \"room_restart\",\n    \"room_set_camera\",\n    \"room_set_height\",\n    \"room_set_persistent\",\n    \"room_set_view_enabled\",\n    \"room_set_viewport\",\n    \"room_set_width\",\n    \"round\",\n    \"scheduler_resolution_get\",\n    \"scheduler_resolution_set\",\n    \"screen_save\",\n    \"screen_save_part\",\n    \"script_execute\",\n    \"script_execute_ext\",\n    \"script_exists\",\n    \"script_get_name\",\n    \"sequence_create\",\n    \"sequence_destroy\",\n    \"sequence_exists\",\n    \"sequence_get\",\n    \"sequence_get_objects\",\n    \"sequence_instance_override_object\",\n    \"sequence_keyframe_new\",\n    \"sequence_keyframedata_new\",\n    \"sequence_track_new\",\n    \"sha1_file\",\n    \"sha1_string_unicode\",\n    \"sha1_string_utf8\",\n    \"shader_current\",\n    \"shader_enable_corner_id\",\n    \"shader_get_name\",\n    \"shader_get_sampler_index\",\n    \"shader_get_uniform\",\n    \"shader_is_compiled\",\n    \"shader_reset\",\n    \"shader_set\",\n    \"shader_set_uniform_f\",\n    \"shader_set_uniform_f_array\",\n    \"shader_set_uniform_f_buffer\",\n    \"shader_set_uniform_i\",\n    \"shader_set_uniform_i_array\",\n    \"shader_set_uniform_matrix\",\n    \"shader_set_uniform_matrix_array\",\n    \"shaders_are_supported\",\n    \"shop_leave_rating\",\n    \"show_debug_message\",\n    \"show_debug_message_ext\",\n    \"show_debug_overlay\",\n    \"show_error\",\n    \"show_message\",\n    \"show_message_async\",\n    \"show_question\",\n    \"show_question_async\",\n    \"sign\",\n    \"sin\",\n    \"skeleton_animation_clear\",\n    \"skeleton_animation_get\",\n    \"skeleton_animation_get_duration\",\n    \"skeleton_animation_get_event_frames\",\n    \"skeleton_animation_get_ext\",\n    \"skeleton_animation_get_frame\",\n    \"skeleton_animation_get_frames\",\n    \"skeleton_animation_get_position\",\n    \"skeleton_animation_is_finished\",\n    \"skeleton_animation_is_looping\",\n    \"skeleton_animation_list\",\n    \"skeleton_animation_mix\",\n    \"skeleton_animation_set\",\n    \"skeleton_animation_set_ext\",\n    \"skeleton_animation_set_frame\",\n    \"skeleton_animation_set_position\",\n    \"skeleton_attachment_create\",\n    \"skeleton_attachment_create_color\",\n    \"skeleton_attachment_create_colour\",\n    \"skeleton_attachment_destroy\",\n    \"skeleton_attachment_exists\",\n    \"skeleton_attachment_get\",\n    \"skeleton_attachment_replace\",\n    \"skeleton_attachment_replace_color\",\n    \"skeleton_attachment_replace_colour\",\n    \"skeleton_attachment_set\",\n    \"skeleton_bone_data_get\",\n    \"skeleton_bone_data_set\",\n    \"skeleton_bone_list\",\n    \"skeleton_bone_state_get\",\n    \"skeleton_bone_state_set\",\n    \"skeleton_collision_draw_set\",\n    \"skeleton_find_slot\",\n    \"skeleton_get_bounds\",\n    \"skeleton_get_minmax\",\n    \"skeleton_get_num_bounds\",\n    \"skeleton_skin_create\",\n    \"skeleton_skin_get\",\n    \"skeleton_skin_list\",\n    \"skeleton_skin_set\",\n    \"skeleton_slot_alpha_get\",\n    \"skeleton_slot_color_get\",\n    \"skeleton_slot_color_set\",\n    \"skeleton_slot_colour_get\",\n    \"skeleton_slot_colour_set\",\n    \"skeleton_slot_data\",\n    \"skeleton_slot_data_instance\",\n    \"skeleton_slot_list\",\n    \"sprite_add\",\n    \"sprite_add_ext\",\n    \"sprite_add_from_surface\",\n    \"sprite_assign\",\n    \"sprite_collision_mask\",\n    \"sprite_create_from_surface\",\n    \"sprite_delete\",\n    \"sprite_duplicate\",\n    \"sprite_exists\",\n    \"sprite_flush\",\n    \"sprite_flush_multi\",\n    \"sprite_get_bbox_bottom\",\n    \"sprite_get_bbox_left\",\n    \"sprite_get_bbox_mode\",\n    \"sprite_get_bbox_right\",\n    \"sprite_get_bbox_top\",\n    \"sprite_get_height\",\n    \"sprite_get_info\",\n    \"sprite_get_name\",\n    \"sprite_get_nineslice\",\n    \"sprite_get_number\",\n    \"sprite_get_speed\",\n    \"sprite_get_speed_type\",\n    \"sprite_get_texture\",\n    \"sprite_get_tpe\",\n    \"sprite_get_uvs\",\n    \"sprite_get_width\",\n    \"sprite_get_xoffset\",\n    \"sprite_get_yoffset\",\n    \"sprite_merge\",\n    \"sprite_nineslice_create\",\n    \"sprite_prefetch\",\n    \"sprite_prefetch_multi\",\n    \"sprite_replace\",\n    \"sprite_save\",\n    \"sprite_save_strip\",\n    \"sprite_set_alpha_from_sprite\",\n    \"sprite_set_bbox\",\n    \"sprite_set_bbox_mode\",\n    \"sprite_set_cache_size\",\n    \"sprite_set_cache_size_ext\",\n    \"sprite_set_nineslice\",\n    \"sprite_set_offset\",\n    \"sprite_set_speed\",\n    \"sqr\",\n    \"sqrt\",\n    \"static_get\",\n    \"static_set\",\n    \"string\",\n    \"string_byte_at\",\n    \"string_byte_length\",\n    \"string_char_at\",\n    \"string_concat\",\n    \"string_concat_ext\",\n    \"string_copy\",\n    \"string_count\",\n    \"string_delete\",\n    \"string_digits\",\n    \"string_ends_with\",\n    \"string_ext\",\n    \"string_foreach\",\n    \"string_format\",\n    \"string_hash_to_newline\",\n    \"string_height\",\n    \"string_height_ext\",\n    \"string_insert\",\n    \"string_join\",\n    \"string_join_ext\",\n    \"string_last_pos\",\n    \"string_last_pos_ext\",\n    \"string_length\",\n    \"string_letters\",\n    \"string_lettersdigits\",\n    \"string_lower\",\n    \"string_ord_at\",\n    \"string_pos\",\n    \"string_pos_ext\",\n    \"string_repeat\",\n    \"string_replace\",\n    \"string_replace_all\",\n    \"string_set_byte_at\",\n    \"string_split\",\n    \"string_split_ext\",\n    \"string_starts_with\",\n    \"string_trim\",\n    \"string_trim_end\",\n    \"string_trim_start\",\n    \"string_upper\",\n    \"string_width\",\n    \"string_width_ext\",\n    \"struct_exists\",\n    \"struct_foreach\",\n    \"struct_get\",\n    \"struct_get_from_hash\",\n    \"struct_get_names\",\n    \"struct_names_count\",\n    \"struct_remove\",\n    \"struct_set\",\n    \"struct_set_from_hash\",\n    \"surface_copy\",\n    \"surface_copy_part\",\n    \"surface_create\",\n    \"surface_create_ext\",\n    \"surface_depth_disable\",\n    \"surface_exists\",\n    \"surface_format_is_supported\",\n    \"surface_free\",\n    \"surface_get_depth_disable\",\n    \"surface_get_format\",\n    \"surface_get_height\",\n    \"surface_get_target\",\n    \"surface_get_target_ext\",\n    \"surface_get_texture\",\n    \"surface_get_width\",\n    \"surface_getpixel\",\n    \"surface_getpixel_ext\",\n    \"surface_reset_target\",\n    \"surface_resize\",\n    \"surface_save\",\n    \"surface_save_part\",\n    \"surface_set_target\",\n    \"surface_set_target_ext\",\n    \"tag_get_asset_ids\",\n    \"tag_get_assets\",\n    \"tan\",\n    \"texture_debug_messages\",\n    \"texture_flush\",\n    \"texture_get_height\",\n    \"texture_get_texel_height\",\n    \"texture_get_texel_width\",\n    \"texture_get_uvs\",\n    \"texture_get_width\",\n    \"texture_global_scale\",\n    \"texture_is_ready\",\n    \"texture_prefetch\",\n    \"texture_set_stage\",\n    \"texturegroup_get_fonts\",\n    \"texturegroup_get_names\",\n    \"texturegroup_get_sprites\",\n    \"texturegroup_get_status\",\n    \"texturegroup_get_textures\",\n    \"texturegroup_get_tilesets\",\n    \"texturegroup_load\",\n    \"texturegroup_set_mode\",\n    \"texturegroup_unload\",\n    \"tile_get_empty\",\n    \"tile_get_flip\",\n    \"tile_get_index\",\n    \"tile_get_mirror\",\n    \"tile_get_rotate\",\n    \"tile_set_empty\",\n    \"tile_set_flip\",\n    \"tile_set_index\",\n    \"tile_set_mirror\",\n    \"tile_set_rotate\",\n    \"tilemap_clear\",\n    \"tilemap_get\",\n    \"tilemap_get_at_pixel\",\n    \"tilemap_get_cell_x_at_pixel\",\n    \"tilemap_get_cell_y_at_pixel\",\n    \"tilemap_get_frame\",\n    \"tilemap_get_global_mask\",\n    \"tilemap_get_height\",\n    \"tilemap_get_mask\",\n    \"tilemap_get_tile_height\",\n    \"tilemap_get_tile_width\",\n    \"tilemap_get_tileset\",\n    \"tilemap_get_width\",\n    \"tilemap_get_x\",\n    \"tilemap_get_y\",\n    \"tilemap_set\",\n    \"tilemap_set_at_pixel\",\n    \"tilemap_set_global_mask\",\n    \"tilemap_set_height\",\n    \"tilemap_set_mask\",\n    \"tilemap_set_width\",\n    \"tilemap_tileset\",\n    \"tilemap_x\",\n    \"tilemap_y\",\n    \"tileset_get_info\",\n    \"tileset_get_name\",\n    \"tileset_get_texture\",\n    \"tileset_get_uvs\",\n    \"time_bpm_to_seconds\",\n    \"time_seconds_to_bpm\",\n    \"time_source_create\",\n    \"time_source_destroy\",\n    \"time_source_exists\",\n    \"time_source_get_children\",\n    \"time_source_get_parent\",\n    \"time_source_get_period\",\n    \"time_source_get_reps_completed\",\n    \"time_source_get_reps_remaining\",\n    \"time_source_get_state\",\n    \"time_source_get_time_remaining\",\n    \"time_source_get_units\",\n    \"time_source_pause\",\n    \"time_source_reconfigure\",\n    \"time_source_reset\",\n    \"time_source_resume\",\n    \"time_source_start\",\n    \"time_source_stop\",\n    \"timeline_add\",\n    \"timeline_clear\",\n    \"timeline_delete\",\n    \"timeline_exists\",\n    \"timeline_get_name\",\n    \"timeline_max_moment\",\n    \"timeline_moment_add_script\",\n    \"timeline_moment_clear\",\n    \"timeline_size\",\n    \"typeof\",\n    \"url_get_domain\",\n    \"url_open\",\n    \"url_open_ext\",\n    \"url_open_full\",\n    \"uwp_device_touchscreen_available\",\n    \"uwp_livetile_badge_clear\",\n    \"uwp_livetile_badge_notification\",\n    \"uwp_livetile_notification_begin\",\n    \"uwp_livetile_notification_end\",\n    \"uwp_livetile_notification_expiry\",\n    \"uwp_livetile_notification_image_add\",\n    \"uwp_livetile_notification_secondary_begin\",\n    \"uwp_livetile_notification_tag\",\n    \"uwp_livetile_notification_template_add\",\n    \"uwp_livetile_notification_text_add\",\n    \"uwp_livetile_queue_enable\",\n    \"uwp_livetile_tile_clear\",\n    \"uwp_secondarytile_badge_clear\",\n    \"uwp_secondarytile_badge_notification\",\n    \"uwp_secondarytile_delete\",\n    \"uwp_secondarytile_pin\",\n    \"uwp_secondarytile_tile_clear\",\n    \"variable_clone\",\n    \"variable_get_hash\",\n    \"variable_global_exists\",\n    \"variable_global_get\",\n    \"variable_global_set\",\n    \"variable_instance_exists\",\n    \"variable_instance_get\",\n    \"variable_instance_get_names\",\n    \"variable_instance_names_count\",\n    \"variable_instance_set\",\n    \"variable_struct_exists\",\n    \"variable_struct_get\",\n    \"variable_struct_get_names\",\n    \"variable_struct_names_count\",\n    \"variable_struct_remove\",\n    \"variable_struct_set\",\n    \"vertex_argb\",\n    \"vertex_begin\",\n    \"vertex_color\",\n    \"vertex_colour\",\n    \"vertex_create_buffer\",\n    \"vertex_create_buffer_ext\",\n    \"vertex_create_buffer_from_buffer\",\n    \"vertex_create_buffer_from_buffer_ext\",\n    \"vertex_delete_buffer\",\n    \"vertex_end\",\n    \"vertex_float1\",\n    \"vertex_float2\",\n    \"vertex_float3\",\n    \"vertex_float4\",\n    \"vertex_format_add_color\",\n    \"vertex_format_add_colour\",\n    \"vertex_format_add_custom\",\n    \"vertex_format_add_normal\",\n    \"vertex_format_add_position\",\n    \"vertex_format_add_position_3d\",\n    \"vertex_format_add_texcoord\",\n    \"vertex_format_begin\",\n    \"vertex_format_delete\",\n    \"vertex_format_end\",\n    \"vertex_format_get_info\",\n    \"vertex_freeze\",\n    \"vertex_get_buffer_size\",\n    \"vertex_get_number\",\n    \"vertex_normal\",\n    \"vertex_position\",\n    \"vertex_position_3d\",\n    \"vertex_submit\",\n    \"vertex_submit_ext\",\n    \"vertex_texcoord\",\n    \"vertex_ubyte4\",\n    \"vertex_update_buffer_from_buffer\",\n    \"vertex_update_buffer_from_vertex\",\n    \"video_close\",\n    \"video_draw\",\n    \"video_enable_loop\",\n    \"video_get_duration\",\n    \"video_get_format\",\n    \"video_get_position\",\n    \"video_get_status\",\n    \"video_get_volume\",\n    \"video_is_looping\",\n    \"video_open\",\n    \"video_pause\",\n    \"video_resume\",\n    \"video_seek_to\",\n    \"video_set_volume\",\n    \"view_get_camera\",\n    \"view_get_hport\",\n    \"view_get_surface_id\",\n    \"view_get_visible\",\n    \"view_get_wport\",\n    \"view_get_xport\",\n    \"view_get_yport\",\n    \"view_set_camera\",\n    \"view_set_hport\",\n    \"view_set_surface_id\",\n    \"view_set_visible\",\n    \"view_set_wport\",\n    \"view_set_xport\",\n    \"view_set_yport\",\n    \"virtual_key_add\",\n    \"virtual_key_delete\",\n    \"virtual_key_hide\",\n    \"virtual_key_show\",\n    \"wallpaper_set_config\",\n    \"wallpaper_set_subscriptions\",\n    \"weak_ref_alive\",\n    \"weak_ref_any_alive\",\n    \"weak_ref_create\",\n    \"window_center\",\n    \"window_device\",\n    \"window_enable_borderless_fullscreen\",\n    \"window_get_borderless_fullscreen\",\n    \"window_get_caption\",\n    \"window_get_color\",\n    \"window_get_colour\",\n    \"window_get_cursor\",\n    \"window_get_fullscreen\",\n    \"window_get_height\",\n    \"window_get_showborder\",\n    \"window_get_visible_rects\",\n    \"window_get_width\",\n    \"window_get_x\",\n    \"window_get_y\",\n    \"window_handle\",\n    \"window_has_focus\",\n    \"window_mouse_get_delta_x\",\n    \"window_mouse_get_delta_y\",\n    \"window_mouse_get_locked\",\n    \"window_mouse_get_x\",\n    \"window_mouse_get_y\",\n    \"window_mouse_set\",\n    \"window_mouse_set_locked\",\n    \"window_set_caption\",\n    \"window_set_color\",\n    \"window_set_colour\",\n    \"window_set_cursor\",\n    \"window_set_fullscreen\",\n    \"window_set_max_height\",\n    \"window_set_max_width\",\n    \"window_set_min_height\",\n    \"window_set_min_width\",\n    \"window_set_position\",\n    \"window_set_rectangle\",\n    \"window_set_showborder\",\n    \"window_set_size\",\n    \"window_view_mouse_get_x\",\n    \"window_view_mouse_get_y\",\n    \"window_views_mouse_get_x\",\n    \"window_views_mouse_get_y\",\n    \"winphone_tile_background_color\",\n    \"winphone_tile_background_colour\",\n    \"zip_add_file\",\n    \"zip_create\",\n    \"zip_save\",\n    \"zip_unzip\",\n    \"zip_unzip_async\"\n  ];\n  const SYMBOLS = [\n    \"AudioEffect\",\n    \"AudioEffectType\",\n    \"AudioLFOType\",\n    \"GM_build_date\",\n    \"GM_build_type\",\n    \"GM_is_sandboxed\",\n    \"GM_project_filename\",\n    \"GM_runtime_version\",\n    \"GM_version\",\n    \"NaN\",\n    \"_GMFILE_\",\n    \"_GMFUNCTION_\",\n    \"_GMLINE_\",\n    \"alignmentH\",\n    \"alignmentV\",\n    \"all\",\n    \"animcurvetype_bezier\",\n    \"animcurvetype_catmullrom\",\n    \"animcurvetype_linear\",\n    \"asset_animationcurve\",\n    \"asset_font\",\n    \"asset_object\",\n    \"asset_path\",\n    \"asset_room\",\n    \"asset_script\",\n    \"asset_sequence\",\n    \"asset_shader\",\n    \"asset_sound\",\n    \"asset_sprite\",\n    \"asset_tiles\",\n    \"asset_timeline\",\n    \"asset_unknown\",\n    \"audio_3D\",\n    \"audio_bus_main\",\n    \"audio_falloff_exponent_distance\",\n    \"audio_falloff_exponent_distance_clamped\",\n    \"audio_falloff_exponent_distance_scaled\",\n    \"audio_falloff_inverse_distance\",\n    \"audio_falloff_inverse_distance_clamped\",\n    \"audio_falloff_inverse_distance_scaled\",\n    \"audio_falloff_linear_distance\",\n    \"audio_falloff_linear_distance_clamped\",\n    \"audio_falloff_none\",\n    \"audio_mono\",\n    \"audio_stereo\",\n    \"bboxkind_diamond\",\n    \"bboxkind_ellipse\",\n    \"bboxkind_precise\",\n    \"bboxkind_rectangular\",\n    \"bboxmode_automatic\",\n    \"bboxmode_fullimage\",\n    \"bboxmode_manual\",\n    \"bm_add\",\n    \"bm_dest_alpha\",\n    \"bm_dest_color\",\n    \"bm_dest_colour\",\n    \"bm_inv_dest_alpha\",\n    \"bm_inv_dest_color\",\n    \"bm_inv_dest_colour\",\n    \"bm_inv_src_alpha\",\n    \"bm_inv_src_color\",\n    \"bm_inv_src_colour\",\n    \"bm_max\",\n    \"bm_normal\",\n    \"bm_one\",\n    \"bm_src_alpha\",\n    \"bm_src_alpha_sat\",\n    \"bm_src_color\",\n    \"bm_src_colour\",\n    \"bm_subtract\",\n    \"bm_zero\",\n    \"browser_chrome\",\n    \"browser_edge\",\n    \"browser_firefox\",\n    \"browser_ie\",\n    \"browser_ie_mobile\",\n    \"browser_not_a_browser\",\n    \"browser_opera\",\n    \"browser_safari\",\n    \"browser_safari_mobile\",\n    \"browser_tizen\",\n    \"browser_unknown\",\n    \"browser_windows_store\",\n    \"buffer_bool\",\n    \"buffer_f16\",\n    \"buffer_f32\",\n    \"buffer_f64\",\n    \"buffer_fast\",\n    \"buffer_fixed\",\n    \"buffer_grow\",\n    \"buffer_s16\",\n    \"buffer_s32\",\n    \"buffer_s8\",\n    \"buffer_seek_end\",\n    \"buffer_seek_relative\",\n    \"buffer_seek_start\",\n    \"buffer_string\",\n    \"buffer_text\",\n    \"buffer_u16\",\n    \"buffer_u32\",\n    \"buffer_u64\",\n    \"buffer_u8\",\n    \"buffer_vbuffer\",\n    \"buffer_wrap\",\n    \"c_aqua\",\n    \"c_black\",\n    \"c_blue\",\n    \"c_dkgray\",\n    \"c_dkgrey\",\n    \"c_fuchsia\",\n    \"c_gray\",\n    \"c_green\",\n    \"c_grey\",\n    \"c_lime\",\n    \"c_ltgray\",\n    \"c_ltgrey\",\n    \"c_maroon\",\n    \"c_navy\",\n    \"c_olive\",\n    \"c_orange\",\n    \"c_purple\",\n    \"c_red\",\n    \"c_silver\",\n    \"c_teal\",\n    \"c_white\",\n    \"c_yellow\",\n    \"cache_directory\",\n    \"characterSpacing\",\n    \"cmpfunc_always\",\n    \"cmpfunc_equal\",\n    \"cmpfunc_greater\",\n    \"cmpfunc_greaterequal\",\n    \"cmpfunc_less\",\n    \"cmpfunc_lessequal\",\n    \"cmpfunc_never\",\n    \"cmpfunc_notequal\",\n    \"coreColor\",\n    \"coreColour\",\n    \"cr_appstart\",\n    \"cr_arrow\",\n    \"cr_beam\",\n    \"cr_cross\",\n    \"cr_default\",\n    \"cr_drag\",\n    \"cr_handpoint\",\n    \"cr_hourglass\",\n    \"cr_none\",\n    \"cr_size_all\",\n    \"cr_size_nesw\",\n    \"cr_size_ns\",\n    \"cr_size_nwse\",\n    \"cr_size_we\",\n    \"cr_uparrow\",\n    \"cull_clockwise\",\n    \"cull_counterclockwise\",\n    \"cull_noculling\",\n    \"device_emulator\",\n    \"device_ios_ipad\",\n    \"device_ios_ipad_retina\",\n    \"device_ios_iphone\",\n    \"device_ios_iphone5\",\n    \"device_ios_iphone6\",\n    \"device_ios_iphone6plus\",\n    \"device_ios_iphone_retina\",\n    \"device_ios_unknown\",\n    \"device_tablet\",\n    \"display_landscape\",\n    \"display_landscape_flipped\",\n    \"display_portrait\",\n    \"display_portrait_flipped\",\n    \"dll_cdecl\",\n    \"dll_stdcall\",\n    \"dropShadowEnabled\",\n    \"dropShadowEnabled\",\n    \"ds_type_grid\",\n    \"ds_type_list\",\n    \"ds_type_map\",\n    \"ds_type_priority\",\n    \"ds_type_queue\",\n    \"ds_type_stack\",\n    \"ef_cloud\",\n    \"ef_ellipse\",\n    \"ef_explosion\",\n    \"ef_firework\",\n    \"ef_flare\",\n    \"ef_rain\",\n    \"ef_ring\",\n    \"ef_smoke\",\n    \"ef_smokeup\",\n    \"ef_snow\",\n    \"ef_spark\",\n    \"ef_star\",\n    \"effectsEnabled\",\n    \"effectsEnabled\",\n    \"ev_alarm\",\n    \"ev_animation_end\",\n    \"ev_animation_event\",\n    \"ev_animation_update\",\n    \"ev_async_audio_playback\",\n    \"ev_async_audio_playback_ended\",\n    \"ev_async_audio_recording\",\n    \"ev_async_dialog\",\n    \"ev_async_push_notification\",\n    \"ev_async_save_load\",\n    \"ev_async_save_load\",\n    \"ev_async_social\",\n    \"ev_async_system_event\",\n    \"ev_async_web\",\n    \"ev_async_web_cloud\",\n    \"ev_async_web_iap\",\n    \"ev_async_web_image_load\",\n    \"ev_async_web_networking\",\n    \"ev_async_web_steam\",\n    \"ev_audio_playback\",\n    \"ev_audio_playback_ended\",\n    \"ev_audio_recording\",\n    \"ev_boundary\",\n    \"ev_boundary_view0\",\n    \"ev_boundary_view1\",\n    \"ev_boundary_view2\",\n    \"ev_boundary_view3\",\n    \"ev_boundary_view4\",\n    \"ev_boundary_view5\",\n    \"ev_boundary_view6\",\n    \"ev_boundary_view7\",\n    \"ev_broadcast_message\",\n    \"ev_cleanup\",\n    \"ev_collision\",\n    \"ev_create\",\n    \"ev_destroy\",\n    \"ev_dialog_async\",\n    \"ev_draw\",\n    \"ev_draw_begin\",\n    \"ev_draw_end\",\n    \"ev_draw_normal\",\n    \"ev_draw_post\",\n    \"ev_draw_pre\",\n    \"ev_end_of_path\",\n    \"ev_game_end\",\n    \"ev_game_start\",\n    \"ev_gesture\",\n    \"ev_gesture_double_tap\",\n    \"ev_gesture_drag_end\",\n    \"ev_gesture_drag_start\",\n    \"ev_gesture_dragging\",\n    \"ev_gesture_flick\",\n    \"ev_gesture_pinch_end\",\n    \"ev_gesture_pinch_in\",\n    \"ev_gesture_pinch_out\",\n    \"ev_gesture_pinch_start\",\n    \"ev_gesture_rotate_end\",\n    \"ev_gesture_rotate_start\",\n    \"ev_gesture_rotating\",\n    \"ev_gesture_tap\",\n    \"ev_global_gesture_double_tap\",\n    \"ev_global_gesture_drag_end\",\n    \"ev_global_gesture_drag_start\",\n    \"ev_global_gesture_dragging\",\n    \"ev_global_gesture_flick\",\n    \"ev_global_gesture_pinch_end\",\n    \"ev_global_gesture_pinch_in\",\n    \"ev_global_gesture_pinch_out\",\n    \"ev_global_gesture_pinch_start\",\n    \"ev_global_gesture_rotate_end\",\n    \"ev_global_gesture_rotate_start\",\n    \"ev_global_gesture_rotating\",\n    \"ev_global_gesture_tap\",\n    \"ev_global_left_button\",\n    \"ev_global_left_press\",\n    \"ev_global_left_release\",\n    \"ev_global_middle_button\",\n    \"ev_global_middle_press\",\n    \"ev_global_middle_release\",\n    \"ev_global_right_button\",\n    \"ev_global_right_press\",\n    \"ev_global_right_release\",\n    \"ev_gui\",\n    \"ev_gui_begin\",\n    \"ev_gui_end\",\n    \"ev_joystick1_button1\",\n    \"ev_joystick1_button2\",\n    \"ev_joystick1_button3\",\n    \"ev_joystick1_button4\",\n    \"ev_joystick1_button5\",\n    \"ev_joystick1_button6\",\n    \"ev_joystick1_button7\",\n    \"ev_joystick1_button8\",\n    \"ev_joystick1_down\",\n    \"ev_joystick1_left\",\n    \"ev_joystick1_right\",\n    \"ev_joystick1_up\",\n    \"ev_joystick2_button1\",\n    \"ev_joystick2_button2\",\n    \"ev_joystick2_button3\",\n    \"ev_joystick2_button4\",\n    \"ev_joystick2_button5\",\n    \"ev_joystick2_button6\",\n    \"ev_joystick2_button7\",\n    \"ev_joystick2_button8\",\n    \"ev_joystick2_down\",\n    \"ev_joystick2_left\",\n    \"ev_joystick2_right\",\n    \"ev_joystick2_up\",\n    \"ev_keyboard\",\n    \"ev_keypress\",\n    \"ev_keyrelease\",\n    \"ev_left_button\",\n    \"ev_left_press\",\n    \"ev_left_release\",\n    \"ev_middle_button\",\n    \"ev_middle_press\",\n    \"ev_middle_release\",\n    \"ev_mouse\",\n    \"ev_mouse_enter\",\n    \"ev_mouse_leave\",\n    \"ev_mouse_wheel_down\",\n    \"ev_mouse_wheel_up\",\n    \"ev_no_button\",\n    \"ev_no_more_health\",\n    \"ev_no_more_lives\",\n    \"ev_other\",\n    \"ev_outside\",\n    \"ev_outside_view0\",\n    \"ev_outside_view1\",\n    \"ev_outside_view2\",\n    \"ev_outside_view3\",\n    \"ev_outside_view4\",\n    \"ev_outside_view5\",\n    \"ev_outside_view6\",\n    \"ev_outside_view7\",\n    \"ev_pre_create\",\n    \"ev_push_notification\",\n    \"ev_right_button\",\n    \"ev_right_press\",\n    \"ev_right_release\",\n    \"ev_room_end\",\n    \"ev_room_start\",\n    \"ev_social\",\n    \"ev_step\",\n    \"ev_step_begin\",\n    \"ev_step_end\",\n    \"ev_step_normal\",\n    \"ev_system_event\",\n    \"ev_trigger\",\n    \"ev_user0\",\n    \"ev_user1\",\n    \"ev_user10\",\n    \"ev_user11\",\n    \"ev_user12\",\n    \"ev_user13\",\n    \"ev_user14\",\n    \"ev_user15\",\n    \"ev_user2\",\n    \"ev_user3\",\n    \"ev_user4\",\n    \"ev_user5\",\n    \"ev_user6\",\n    \"ev_user7\",\n    \"ev_user8\",\n    \"ev_user9\",\n    \"ev_web_async\",\n    \"ev_web_cloud\",\n    \"ev_web_iap\",\n    \"ev_web_image_load\",\n    \"ev_web_networking\",\n    \"ev_web_sound_load\",\n    \"ev_web_steam\",\n    \"fa_archive\",\n    \"fa_bottom\",\n    \"fa_center\",\n    \"fa_directory\",\n    \"fa_hidden\",\n    \"fa_left\",\n    \"fa_middle\",\n    \"fa_none\",\n    \"fa_readonly\",\n    \"fa_right\",\n    \"fa_sysfile\",\n    \"fa_top\",\n    \"fa_volumeid\",\n    \"false\",\n    \"frameSizeX\",\n    \"frameSizeY\",\n    \"gamespeed_fps\",\n    \"gamespeed_microseconds\",\n    \"global\",\n    \"glowColor\",\n    \"glowColour\",\n    \"glowEnabled\",\n    \"glowEnabled\",\n    \"glowEnd\",\n    \"glowStart\",\n    \"gp_axis_acceleration_x\",\n    \"gp_axis_acceleration_y\",\n    \"gp_axis_acceleration_z\",\n    \"gp_axis_angular_velocity_x\",\n    \"gp_axis_angular_velocity_y\",\n    \"gp_axis_angular_velocity_z\",\n    \"gp_axis_orientation_w\",\n    \"gp_axis_orientation_x\",\n    \"gp_axis_orientation_y\",\n    \"gp_axis_orientation_z\",\n    \"gp_axislh\",\n    \"gp_axislv\",\n    \"gp_axisrh\",\n    \"gp_axisrv\",\n    \"gp_face1\",\n    \"gp_face2\",\n    \"gp_face3\",\n    \"gp_face4\",\n    \"gp_padd\",\n    \"gp_padl\",\n    \"gp_padr\",\n    \"gp_padu\",\n    \"gp_select\",\n    \"gp_shoulderl\",\n    \"gp_shoulderlb\",\n    \"gp_shoulderr\",\n    \"gp_shoulderrb\",\n    \"gp_start\",\n    \"gp_stickl\",\n    \"gp_stickr\",\n    \"iap_available\",\n    \"iap_canceled\",\n    \"iap_ev_consume\",\n    \"iap_ev_product\",\n    \"iap_ev_purchase\",\n    \"iap_ev_restore\",\n    \"iap_ev_storeload\",\n    \"iap_failed\",\n    \"iap_purchased\",\n    \"iap_refunded\",\n    \"iap_status_available\",\n    \"iap_status_loading\",\n    \"iap_status_processing\",\n    \"iap_status_restoring\",\n    \"iap_status_unavailable\",\n    \"iap_status_uninitialised\",\n    \"iap_storeload_failed\",\n    \"iap_storeload_ok\",\n    \"iap_unavailable\",\n    \"infinity\",\n    \"kbv_autocapitalize_characters\",\n    \"kbv_autocapitalize_none\",\n    \"kbv_autocapitalize_sentences\",\n    \"kbv_autocapitalize_words\",\n    \"kbv_returnkey_continue\",\n    \"kbv_returnkey_default\",\n    \"kbv_returnkey_done\",\n    \"kbv_returnkey_emergency\",\n    \"kbv_returnkey_go\",\n    \"kbv_returnkey_google\",\n    \"kbv_returnkey_join\",\n    \"kbv_returnkey_next\",\n    \"kbv_returnkey_route\",\n    \"kbv_returnkey_search\",\n    \"kbv_returnkey_send\",\n    \"kbv_returnkey_yahoo\",\n    \"kbv_type_ascii\",\n    \"kbv_type_default\",\n    \"kbv_type_email\",\n    \"kbv_type_numbers\",\n    \"kbv_type_phone\",\n    \"kbv_type_phone_name\",\n    \"kbv_type_url\",\n    \"layerelementtype_background\",\n    \"layerelementtype_instance\",\n    \"layerelementtype_oldtilemap\",\n    \"layerelementtype_particlesystem\",\n    \"layerelementtype_sequence\",\n    \"layerelementtype_sprite\",\n    \"layerelementtype_tile\",\n    \"layerelementtype_tilemap\",\n    \"layerelementtype_undefined\",\n    \"leaderboard_type_number\",\n    \"leaderboard_type_time_mins_secs\",\n    \"lighttype_dir\",\n    \"lighttype_point\",\n    \"lineSpacing\",\n    \"m_axisx\",\n    \"m_axisx_gui\",\n    \"m_axisy\",\n    \"m_axisy_gui\",\n    \"m_scroll_down\",\n    \"m_scroll_up\",\n    \"matrix_projection\",\n    \"matrix_view\",\n    \"matrix_world\",\n    \"mb_any\",\n    \"mb_left\",\n    \"mb_middle\",\n    \"mb_none\",\n    \"mb_right\",\n    \"mb_side1\",\n    \"mb_side2\",\n    \"mip_markedonly\",\n    \"mip_off\",\n    \"mip_on\",\n    \"network_config_avoid_time_wait\",\n    \"network_config_connect_timeout\",\n    \"network_config_disable_multicast\",\n    \"network_config_disable_reliable_udp\",\n    \"network_config_enable_multicast\",\n    \"network_config_enable_reliable_udp\",\n    \"network_config_use_non_blocking_socket\",\n    \"network_config_websocket_protocol\",\n    \"network_connect_active\",\n    \"network_connect_blocking\",\n    \"network_connect_nonblocking\",\n    \"network_connect_none\",\n    \"network_connect_passive\",\n    \"network_send_binary\",\n    \"network_send_text\",\n    \"network_socket_bluetooth\",\n    \"network_socket_tcp\",\n    \"network_socket_udp\",\n    \"network_socket_ws\",\n    \"network_socket_wss\",\n    \"network_type_connect\",\n    \"network_type_data\",\n    \"network_type_disconnect\",\n    \"network_type_down\",\n    \"network_type_non_blocking_connect\",\n    \"network_type_up\",\n    \"network_type_up_failed\",\n    \"nineslice_blank\",\n    \"nineslice_bottom\",\n    \"nineslice_center\",\n    \"nineslice_centre\",\n    \"nineslice_hide\",\n    \"nineslice_left\",\n    \"nineslice_mirror\",\n    \"nineslice_repeat\",\n    \"nineslice_right\",\n    \"nineslice_stretch\",\n    \"nineslice_top\",\n    \"noone\",\n    \"of_challenge_lose\",\n    \"of_challenge_tie\",\n    \"of_challenge_win\",\n    \"os_android\",\n    \"os_gdk\",\n    \"os_gxgames\",\n    \"os_ios\",\n    \"os_linux\",\n    \"os_macosx\",\n    \"os_operagx\",\n    \"os_permission_denied\",\n    \"os_permission_denied_dont_request\",\n    \"os_permission_granted\",\n    \"os_ps3\",\n    \"os_ps4\",\n    \"os_ps5\",\n    \"os_psvita\",\n    \"os_switch\",\n    \"os_tvos\",\n    \"os_unknown\",\n    \"os_uwp\",\n    \"os_win8native\",\n    \"os_windows\",\n    \"os_winphone\",\n    \"os_xboxone\",\n    \"os_xboxseriesxs\",\n    \"other\",\n    \"outlineColor\",\n    \"outlineColour\",\n    \"outlineDist\",\n    \"outlineEnabled\",\n    \"outlineEnabled\",\n    \"paragraphSpacing\",\n    \"path_action_continue\",\n    \"path_action_restart\",\n    \"path_action_reverse\",\n    \"path_action_stop\",\n    \"phy_debug_render_aabb\",\n    \"phy_debug_render_collision_pairs\",\n    \"phy_debug_render_coms\",\n    \"phy_debug_render_core_shapes\",\n    \"phy_debug_render_joints\",\n    \"phy_debug_render_obb\",\n    \"phy_debug_render_shapes\",\n    \"phy_joint_anchor_1_x\",\n    \"phy_joint_anchor_1_y\",\n    \"phy_joint_anchor_2_x\",\n    \"phy_joint_anchor_2_y\",\n    \"phy_joint_angle\",\n    \"phy_joint_angle_limits\",\n    \"phy_joint_damping_ratio\",\n    \"phy_joint_frequency\",\n    \"phy_joint_length_1\",\n    \"phy_joint_length_2\",\n    \"phy_joint_lower_angle_limit\",\n    \"phy_joint_max_force\",\n    \"phy_joint_max_length\",\n    \"phy_joint_max_motor_force\",\n    \"phy_joint_max_motor_torque\",\n    \"phy_joint_max_torque\",\n    \"phy_joint_motor_force\",\n    \"phy_joint_motor_speed\",\n    \"phy_joint_motor_torque\",\n    \"phy_joint_reaction_force_x\",\n    \"phy_joint_reaction_force_y\",\n    \"phy_joint_reaction_torque\",\n    \"phy_joint_speed\",\n    \"phy_joint_translation\",\n    \"phy_joint_upper_angle_limit\",\n    \"phy_particle_data_flag_category\",\n    \"phy_particle_data_flag_color\",\n    \"phy_particle_data_flag_colour\",\n    \"phy_particle_data_flag_position\",\n    \"phy_particle_data_flag_typeflags\",\n    \"phy_particle_data_flag_velocity\",\n    \"phy_particle_flag_colormixing\",\n    \"phy_particle_flag_colourmixing\",\n    \"phy_particle_flag_elastic\",\n    \"phy_particle_flag_powder\",\n    \"phy_particle_flag_spring\",\n    \"phy_particle_flag_tensile\",\n    \"phy_particle_flag_viscous\",\n    \"phy_particle_flag_wall\",\n    \"phy_particle_flag_water\",\n    \"phy_particle_flag_zombie\",\n    \"phy_particle_group_flag_rigid\",\n    \"phy_particle_group_flag_solid\",\n    \"pi\",\n    \"pointer_invalid\",\n    \"pointer_null\",\n    \"pr_linelist\",\n    \"pr_linestrip\",\n    \"pr_pointlist\",\n    \"pr_trianglefan\",\n    \"pr_trianglelist\",\n    \"pr_trianglestrip\",\n    \"ps_distr_gaussian\",\n    \"ps_distr_invgaussian\",\n    \"ps_distr_linear\",\n    \"ps_mode_burst\",\n    \"ps_mode_stream\",\n    \"ps_shape_diamond\",\n    \"ps_shape_ellipse\",\n    \"ps_shape_line\",\n    \"ps_shape_rectangle\",\n    \"pt_shape_circle\",\n    \"pt_shape_cloud\",\n    \"pt_shape_disk\",\n    \"pt_shape_explosion\",\n    \"pt_shape_flare\",\n    \"pt_shape_line\",\n    \"pt_shape_pixel\",\n    \"pt_shape_ring\",\n    \"pt_shape_smoke\",\n    \"pt_shape_snow\",\n    \"pt_shape_spark\",\n    \"pt_shape_sphere\",\n    \"pt_shape_square\",\n    \"pt_shape_star\",\n    \"rollback_chat_message\",\n    \"rollback_connect_error\",\n    \"rollback_connect_info\",\n    \"rollback_connected_to_peer\",\n    \"rollback_connection_rejected\",\n    \"rollback_disconnected_from_peer\",\n    \"rollback_end_game\",\n    \"rollback_game_full\",\n    \"rollback_game_info\",\n    \"rollback_game_interrupted\",\n    \"rollback_game_resumed\",\n    \"rollback_high_latency\",\n    \"rollback_player_prefs\",\n    \"rollback_protocol_rejected\",\n    \"rollback_synchronized_with_peer\",\n    \"rollback_synchronizing_with_peer\",\n    \"self\",\n    \"seqaudiokey_loop\",\n    \"seqaudiokey_oneshot\",\n    \"seqdir_left\",\n    \"seqdir_right\",\n    \"seqinterpolation_assign\",\n    \"seqinterpolation_lerp\",\n    \"seqplay_loop\",\n    \"seqplay_oneshot\",\n    \"seqplay_pingpong\",\n    \"seqtextkey_bottom\",\n    \"seqtextkey_center\",\n    \"seqtextkey_justify\",\n    \"seqtextkey_left\",\n    \"seqtextkey_middle\",\n    \"seqtextkey_right\",\n    \"seqtextkey_top\",\n    \"seqtracktype_audio\",\n    \"seqtracktype_bool\",\n    \"seqtracktype_clipmask\",\n    \"seqtracktype_clipmask_mask\",\n    \"seqtracktype_clipmask_subject\",\n    \"seqtracktype_color\",\n    \"seqtracktype_colour\",\n    \"seqtracktype_empty\",\n    \"seqtracktype_graphic\",\n    \"seqtracktype_group\",\n    \"seqtracktype_instance\",\n    \"seqtracktype_message\",\n    \"seqtracktype_moment\",\n    \"seqtracktype_particlesystem\",\n    \"seqtracktype_real\",\n    \"seqtracktype_sequence\",\n    \"seqtracktype_spriteframes\",\n    \"seqtracktype_string\",\n    \"seqtracktype_text\",\n    \"shadowColor\",\n    \"shadowColour\",\n    \"shadowOffsetX\",\n    \"shadowOffsetY\",\n    \"shadowSoftness\",\n    \"sprite_add_ext_error_cancelled\",\n    \"sprite_add_ext_error_decompressfailed\",\n    \"sprite_add_ext_error_loadfailed\",\n    \"sprite_add_ext_error_setupfailed\",\n    \"sprite_add_ext_error_spritenotfound\",\n    \"sprite_add_ext_error_unknown\",\n    \"spritespeed_framespergameframe\",\n    \"spritespeed_framespersecond\",\n    \"surface_r16float\",\n    \"surface_r32float\",\n    \"surface_r8unorm\",\n    \"surface_rg8unorm\",\n    \"surface_rgba16float\",\n    \"surface_rgba32float\",\n    \"surface_rgba4unorm\",\n    \"surface_rgba8unorm\",\n    \"texturegroup_status_fetched\",\n    \"texturegroup_status_loaded\",\n    \"texturegroup_status_loading\",\n    \"texturegroup_status_unloaded\",\n    \"tf_anisotropic\",\n    \"tf_linear\",\n    \"tf_point\",\n    \"thickness\",\n    \"tile_flip\",\n    \"tile_index_mask\",\n    \"tile_mirror\",\n    \"tile_rotate\",\n    \"time_source_expire_after\",\n    \"time_source_expire_nearest\",\n    \"time_source_game\",\n    \"time_source_global\",\n    \"time_source_state_active\",\n    \"time_source_state_initial\",\n    \"time_source_state_paused\",\n    \"time_source_state_stopped\",\n    \"time_source_units_frames\",\n    \"time_source_units_seconds\",\n    \"timezone_local\",\n    \"timezone_utc\",\n    \"tm_countvsyncs\",\n    \"tm_sleep\",\n    \"tm_systemtiming\",\n    \"true\",\n    \"ty_real\",\n    \"ty_string\",\n    \"undefined\",\n    \"vertex_type_color\",\n    \"vertex_type_colour\",\n    \"vertex_type_float1\",\n    \"vertex_type_float2\",\n    \"vertex_type_float3\",\n    \"vertex_type_float4\",\n    \"vertex_type_ubyte4\",\n    \"vertex_usage_binormal\",\n    \"vertex_usage_blendindices\",\n    \"vertex_usage_blendweight\",\n    \"vertex_usage_color\",\n    \"vertex_usage_colour\",\n    \"vertex_usage_depth\",\n    \"vertex_usage_fog\",\n    \"vertex_usage_normal\",\n    \"vertex_usage_position\",\n    \"vertex_usage_psize\",\n    \"vertex_usage_sample\",\n    \"vertex_usage_tangent\",\n    \"vertex_usage_texcoord\",\n    \"video_format_rgba\",\n    \"video_format_yuv\",\n    \"video_status_closed\",\n    \"video_status_paused\",\n    \"video_status_playing\",\n    \"video_status_preparing\",\n    \"vk_add\",\n    \"vk_alt\",\n    \"vk_anykey\",\n    \"vk_backspace\",\n    \"vk_control\",\n    \"vk_decimal\",\n    \"vk_delete\",\n    \"vk_divide\",\n    \"vk_down\",\n    \"vk_end\",\n    \"vk_enter\",\n    \"vk_escape\",\n    \"vk_f1\",\n    \"vk_f10\",\n    \"vk_f11\",\n    \"vk_f12\",\n    \"vk_f2\",\n    \"vk_f3\",\n    \"vk_f4\",\n    \"vk_f5\",\n    \"vk_f6\",\n    \"vk_f7\",\n    \"vk_f8\",\n    \"vk_f9\",\n    \"vk_home\",\n    \"vk_insert\",\n    \"vk_lalt\",\n    \"vk_lcontrol\",\n    \"vk_left\",\n    \"vk_lshift\",\n    \"vk_multiply\",\n    \"vk_nokey\",\n    \"vk_numpad0\",\n    \"vk_numpad1\",\n    \"vk_numpad2\",\n    \"vk_numpad3\",\n    \"vk_numpad4\",\n    \"vk_numpad5\",\n    \"vk_numpad6\",\n    \"vk_numpad7\",\n    \"vk_numpad8\",\n    \"vk_numpad9\",\n    \"vk_pagedown\",\n    \"vk_pageup\",\n    \"vk_pause\",\n    \"vk_printscreen\",\n    \"vk_ralt\",\n    \"vk_rcontrol\",\n    \"vk_return\",\n    \"vk_right\",\n    \"vk_rshift\",\n    \"vk_shift\",\n    \"vk_space\",\n    \"vk_subtract\",\n    \"vk_tab\",\n    \"vk_up\",\n    \"wallpaper_config\",\n    \"wallpaper_subscription_data\",\n    \"wrap\"\n  ];\n  const LANGUAGE_VARIABLES = [\n    \"alarm\",\n    \"application_surface\",\n    \"argument\",\n    \"argument0\",\n    \"argument1\",\n    \"argument2\",\n    \"argument3\",\n    \"argument4\",\n    \"argument5\",\n    \"argument6\",\n    \"argument7\",\n    \"argument8\",\n    \"argument9\",\n    \"argument10\",\n    \"argument11\",\n    \"argument12\",\n    \"argument13\",\n    \"argument14\",\n    \"argument15\",\n    \"argument_count\",\n    \"async_load\",\n    \"background_color\",\n    \"background_colour\",\n    \"background_showcolor\",\n    \"background_showcolour\",\n    \"bbox_bottom\",\n    \"bbox_left\",\n    \"bbox_right\",\n    \"bbox_top\",\n    \"browser_height\",\n    \"browser_width\",\n    \"colour?ColourTrack\",\n    \"current_day\",\n    \"current_hour\",\n    \"current_minute\",\n    \"current_month\",\n    \"current_second\",\n    \"current_time\",\n    \"current_weekday\",\n    \"current_year\",\n    \"cursor_sprite\",\n    \"debug_mode\",\n    \"delta_time\",\n    \"depth\",\n    \"direction\",\n    \"display_aa\",\n    \"drawn_by_sequence\",\n    \"event_action\",\n    \"event_data\",\n    \"event_number\",\n    \"event_object\",\n    \"event_type\",\n    \"font_texture_page_size\",\n    \"fps\",\n    \"fps_real\",\n    \"friction\",\n    \"game_display_name\",\n    \"game_id\",\n    \"game_project_name\",\n    \"game_save_id\",\n    \"gravity\",\n    \"gravity_direction\",\n    \"health\",\n    \"hspeed\",\n    \"iap_data\",\n    \"id\",\n    \"image_alpha\",\n    \"image_angle\",\n    \"image_blend\",\n    \"image_index\",\n    \"image_number\",\n    \"image_speed\",\n    \"image_xscale\",\n    \"image_yscale\",\n    \"in_collision_tree\",\n    \"in_sequence\",\n    \"instance_count\",\n    \"instance_id\",\n    \"keyboard_key\",\n    \"keyboard_lastchar\",\n    \"keyboard_lastkey\",\n    \"keyboard_string\",\n    \"layer\",\n    \"lives\",\n    \"longMessage\",\n    \"managed\",\n    \"mask_index\",\n    \"message\",\n    \"mouse_button\",\n    \"mouse_lastbutton\",\n    \"mouse_x\",\n    \"mouse_y\",\n    \"object_index\",\n    \"os_browser\",\n    \"os_device\",\n    \"os_type\",\n    \"os_version\",\n    \"path_endaction\",\n    \"path_index\",\n    \"path_orientation\",\n    \"path_position\",\n    \"path_positionprevious\",\n    \"path_scale\",\n    \"path_speed\",\n    \"persistent\",\n    \"phy_active\",\n    \"phy_angular_damping\",\n    \"phy_angular_velocity\",\n    \"phy_bullet\",\n    \"phy_col_normal_x\",\n    \"phy_col_normal_y\",\n    \"phy_collision_points\",\n    \"phy_collision_x\",\n    \"phy_collision_y\",\n    \"phy_com_x\",\n    \"phy_com_y\",\n    \"phy_dynamic\",\n    \"phy_fixed_rotation\",\n    \"phy_inertia\",\n    \"phy_kinematic\",\n    \"phy_linear_damping\",\n    \"phy_linear_velocity_x\",\n    \"phy_linear_velocity_y\",\n    \"phy_mass\",\n    \"phy_position_x\",\n    \"phy_position_xprevious\",\n    \"phy_position_y\",\n    \"phy_position_yprevious\",\n    \"phy_rotation\",\n    \"phy_sleeping\",\n    \"phy_speed\",\n    \"phy_speed_x\",\n    \"phy_speed_y\",\n    \"player_avatar_sprite\",\n    \"player_avatar_url\",\n    \"player_id\",\n    \"player_local\",\n    \"player_type\",\n    \"player_user_id\",\n    \"program_directory\",\n    \"rollback_api_server\",\n    \"rollback_confirmed_frame\",\n    \"rollback_current_frame\",\n    \"rollback_event_id\",\n    \"rollback_event_param\",\n    \"rollback_game_running\",\n    \"room\",\n    \"room_first\",\n    \"room_height\",\n    \"room_last\",\n    \"room_persistent\",\n    \"room_speed\",\n    \"room_width\",\n    \"score\",\n    \"script\",\n    \"sequence_instance\",\n    \"solid\",\n    \"speed\",\n    \"sprite_height\",\n    \"sprite_index\",\n    \"sprite_width\",\n    \"sprite_xoffset\",\n    \"sprite_yoffset\",\n    \"stacktrace\",\n    \"temp_directory\",\n    \"timeline_index\",\n    \"timeline_loop\",\n    \"timeline_position\",\n    \"timeline_running\",\n    \"timeline_speed\",\n    \"view_camera\",\n    \"view_current\",\n    \"view_enabled\",\n    \"view_hport\",\n    \"view_surface_id\",\n    \"view_visible\",\n    \"view_wport\",\n    \"view_xport\",\n    \"view_yport\",\n    \"visible\",\n    \"vspeed\",\n    \"webgl_enabled\",\n    \"working_directory\",\n    \"x\",\n    \"xprevious\",\n    \"xstart\",\n    \"y\",\n    \"yprevious\",\n    \"ystart\"\n  ];\n  return {\n    name: 'GML',\n    case_insensitive: false, // language is case-insensitive\n    keywords: {\n      keyword: KEYWORDS,\n      built_in: BUILT_INS,\n      symbol: SYMBOLS,\n      \"variable.language\": LANGUAGE_VARIABLES\n    },\n    contains: [\n      hljs.C_LINE_COMMENT_MODE,\n      hljs.C_BLOCK_COMMENT_MODE,\n      hljs.APOS_STRING_MODE,\n      hljs.QUOTE_STRING_MODE,\n      hljs.C_NUMBER_MODE\n    ]\n  };\n}\n\nmodule.exports = gml;\n","/*\nLanguage: Go\nAuthor: Stephan Kountso aka StepLg <steplg@gmail.com>\nContributors: Evgeny Stepanischev <imbolk@gmail.com>\nDescription: Google go language (golang). For info about language\nWebsite: http://golang.org/\nCategory: common, system\n*/\n\nfunction go(hljs) {\n  const LITERALS = [\n    \"true\",\n    \"false\",\n    \"iota\",\n    \"nil\"\n  ];\n  const BUILT_INS = [\n    \"append\",\n    \"cap\",\n    \"close\",\n    \"complex\",\n    \"copy\",\n    \"imag\",\n    \"len\",\n    \"make\",\n    \"new\",\n    \"panic\",\n    \"print\",\n    \"println\",\n    \"real\",\n    \"recover\",\n    \"delete\"\n  ];\n  const TYPES = [\n    \"bool\",\n    \"byte\",\n    \"complex64\",\n    \"complex128\",\n    \"error\",\n    \"float32\",\n    \"float64\",\n    \"int8\",\n    \"int16\",\n    \"int32\",\n    \"int64\",\n    \"string\",\n    \"uint8\",\n    \"uint16\",\n    \"uint32\",\n    \"uint64\",\n    \"int\",\n    \"uint\",\n    \"uintptr\",\n    \"rune\"\n  ];\n  const KWS = [\n    \"break\",\n    \"case\",\n    \"chan\",\n    \"const\",\n    \"continue\",\n    \"default\",\n    \"defer\",\n    \"else\",\n    \"fallthrough\",\n    \"for\",\n    \"func\",\n    \"go\",\n    \"goto\",\n    \"if\",\n    \"import\",\n    \"interface\",\n    \"map\",\n    \"package\",\n    \"range\",\n    \"return\",\n    \"select\",\n    \"struct\",\n    \"switch\",\n    \"type\",\n    \"var\",\n  ];\n  const KEYWORDS = {\n    keyword: KWS,\n    type: TYPES,\n    literal: LITERALS,\n    built_in: BUILT_INS\n  };\n  return {\n    name: 'Go',\n    aliases: [ 'golang' ],\n    keywords: KEYWORDS,\n    illegal: '</',\n    contains: [\n      hljs.C_LINE_COMMENT_MODE,\n      hljs.C_BLOCK_COMMENT_MODE,\n      {\n        className: 'string',\n        variants: [\n          hljs.QUOTE_STRING_MODE,\n          hljs.APOS_STRING_MODE,\n          {\n            begin: '`',\n            end: '`'\n          }\n        ]\n      },\n      {\n        className: 'number',\n        variants: [\n          {\n            match: /-?\\b0[xX]\\.[a-fA-F0-9](_?[a-fA-F0-9])*[pP][+-]?\\d(_?\\d)*i?/, // hex without a present digit before . (making a digit afterwards required)\n            relevance: 0\n          },\n          {\n            match: /-?\\b0[xX](_?[a-fA-F0-9])+((\\.([a-fA-F0-9](_?[a-fA-F0-9])*)?)?[pP][+-]?\\d(_?\\d)*)?i?/, // hex with a present digit before . (making a digit afterwards optional)\n            relevance: 0\n          },\n          {\n            match: /-?\\b0[oO](_?[0-7])*i?/, // leading 0o octal\n            relevance: 0\n          },\n          {\n            match: /-?\\.\\d(_?\\d)*([eE][+-]?\\d(_?\\d)*)?i?/, // decimal without a present digit before . (making a digit afterwards required)\n            relevance: 0\n          },\n          {\n            match: /-?\\b\\d(_?\\d)*(\\.(\\d(_?\\d)*)?)?([eE][+-]?\\d(_?\\d)*)?i?/, // decimal with a present digit before . (making a digit afterwards optional)\n            relevance: 0\n          }\n        ]\n      },\n      { begin: /:=/ // relevance booster\n      },\n      {\n        className: 'function',\n        beginKeywords: 'func',\n        end: '\\\\s*(\\\\{|$)',\n        excludeEnd: true,\n        contains: [\n          hljs.TITLE_MODE,\n          {\n            className: 'params',\n            begin: /\\(/,\n            end: /\\)/,\n            endsParent: true,\n            keywords: KEYWORDS,\n            illegal: /[\"']/\n          }\n        ]\n      }\n    ]\n  };\n}\n\nmodule.exports = go;\n","/*\nLanguage: Golo\nAuthor: Philippe Charriere <ph.charriere@gmail.com>\nDescription: a lightweight dynamic language for the JVM\nWebsite: http://golo-lang.org/\nCategory: system\n*/\n\nfunction golo(hljs) {\n  const KEYWORDS = [\n    \"println\",\n    \"readln\",\n    \"print\",\n    \"import\",\n    \"module\",\n    \"function\",\n    \"local\",\n    \"return\",\n    \"let\",\n    \"var\",\n    \"while\",\n    \"for\",\n    \"foreach\",\n    \"times\",\n    \"in\",\n    \"case\",\n    \"when\",\n    \"match\",\n    \"with\",\n    \"break\",\n    \"continue\",\n    \"augment\",\n    \"augmentation\",\n    \"each\",\n    \"find\",\n    \"filter\",\n    \"reduce\",\n    \"if\",\n    \"then\",\n    \"else\",\n    \"otherwise\",\n    \"try\",\n    \"catch\",\n    \"finally\",\n    \"raise\",\n    \"throw\",\n    \"orIfNull\",\n    \"DynamicObject|10\",\n    \"DynamicVariable\",\n    \"struct\",\n    \"Observable\",\n    \"map\",\n    \"set\",\n    \"vector\",\n    \"list\",\n    \"array\"\n  ];\n\n  return {\n    name: 'Golo',\n    keywords: {\n      keyword: KEYWORDS,\n      literal: [\n        \"true\",\n        \"false\",\n        \"null\"\n      ]\n    },\n    contains: [\n      hljs.HASH_COMMENT_MODE,\n      hljs.QUOTE_STRING_MODE,\n      hljs.C_NUMBER_MODE,\n      {\n        className: 'meta',\n        begin: '@[A-Za-z]+'\n      }\n    ]\n  };\n}\n\nmodule.exports = golo;\n","/*\nLanguage: Gradle\nDescription: Gradle is an open-source build automation tool focused on flexibility and performance.\nWebsite: https://gradle.org\nAuthor: Damian Mee <mee.damian@gmail.com>\nCategory: build-system\n*/\n\nfunction gradle(hljs) {\n  const KEYWORDS = [\n    \"task\",\n    \"project\",\n    \"allprojects\",\n    \"subprojects\",\n    \"artifacts\",\n    \"buildscript\",\n    \"configurations\",\n    \"dependencies\",\n    \"repositories\",\n    \"sourceSets\",\n    \"description\",\n    \"delete\",\n    \"from\",\n    \"into\",\n    \"include\",\n    \"exclude\",\n    \"source\",\n    \"classpath\",\n    \"destinationDir\",\n    \"includes\",\n    \"options\",\n    \"sourceCompatibility\",\n    \"targetCompatibility\",\n    \"group\",\n    \"flatDir\",\n    \"doLast\",\n    \"doFirst\",\n    \"flatten\",\n    \"todir\",\n    \"fromdir\",\n    \"ant\",\n    \"def\",\n    \"abstract\",\n    \"break\",\n    \"case\",\n    \"catch\",\n    \"continue\",\n    \"default\",\n    \"do\",\n    \"else\",\n    \"extends\",\n    \"final\",\n    \"finally\",\n    \"for\",\n    \"if\",\n    \"implements\",\n    \"instanceof\",\n    \"native\",\n    \"new\",\n    \"private\",\n    \"protected\",\n    \"public\",\n    \"return\",\n    \"static\",\n    \"switch\",\n    \"synchronized\",\n    \"throw\",\n    \"throws\",\n    \"transient\",\n    \"try\",\n    \"volatile\",\n    \"while\",\n    \"strictfp\",\n    \"package\",\n    \"import\",\n    \"false\",\n    \"null\",\n    \"super\",\n    \"this\",\n    \"true\",\n    \"antlrtask\",\n    \"checkstyle\",\n    \"codenarc\",\n    \"copy\",\n    \"boolean\",\n    \"byte\",\n    \"char\",\n    \"class\",\n    \"double\",\n    \"float\",\n    \"int\",\n    \"interface\",\n    \"long\",\n    \"short\",\n    \"void\",\n    \"compile\",\n    \"runTime\",\n    \"file\",\n    \"fileTree\",\n    \"abs\",\n    \"any\",\n    \"append\",\n    \"asList\",\n    \"asWritable\",\n    \"call\",\n    \"collect\",\n    \"compareTo\",\n    \"count\",\n    \"div\",\n    \"dump\",\n    \"each\",\n    \"eachByte\",\n    \"eachFile\",\n    \"eachLine\",\n    \"every\",\n    \"find\",\n    \"findAll\",\n    \"flatten\",\n    \"getAt\",\n    \"getErr\",\n    \"getIn\",\n    \"getOut\",\n    \"getText\",\n    \"grep\",\n    \"immutable\",\n    \"inject\",\n    \"inspect\",\n    \"intersect\",\n    \"invokeMethods\",\n    \"isCase\",\n    \"join\",\n    \"leftShift\",\n    \"minus\",\n    \"multiply\",\n    \"newInputStream\",\n    \"newOutputStream\",\n    \"newPrintWriter\",\n    \"newReader\",\n    \"newWriter\",\n    \"next\",\n    \"plus\",\n    \"pop\",\n    \"power\",\n    \"previous\",\n    \"print\",\n    \"println\",\n    \"push\",\n    \"putAt\",\n    \"read\",\n    \"readBytes\",\n    \"readLines\",\n    \"reverse\",\n    \"reverseEach\",\n    \"round\",\n    \"size\",\n    \"sort\",\n    \"splitEachLine\",\n    \"step\",\n    \"subMap\",\n    \"times\",\n    \"toInteger\",\n    \"toList\",\n    \"tokenize\",\n    \"upto\",\n    \"waitForOrKill\",\n    \"withPrintWriter\",\n    \"withReader\",\n    \"withStream\",\n    \"withWriter\",\n    \"withWriterAppend\",\n    \"write\",\n    \"writeLine\"\n  ];\n  return {\n    name: 'Gradle',\n    case_insensitive: true,\n    keywords: KEYWORDS,\n    contains: [\n      hljs.C_LINE_COMMENT_MODE,\n      hljs.C_BLOCK_COMMENT_MODE,\n      hljs.APOS_STRING_MODE,\n      hljs.QUOTE_STRING_MODE,\n      hljs.NUMBER_MODE,\n      hljs.REGEXP_MODE\n\n    ]\n  };\n}\n\nmodule.exports = gradle;\n","/*\n Language: GraphQL\n Author: John Foster (GH jf990), and others\n Description: GraphQL is a query language for APIs\n Category: web, common\n*/\n\n/** @type LanguageFn */\nfunction graphql(hljs) {\n  const regex = hljs.regex;\n  const GQL_NAME = /[_A-Za-z][_0-9A-Za-z]*/;\n  return {\n    name: \"GraphQL\",\n    aliases: [ \"gql\" ],\n    case_insensitive: true,\n    disableAutodetect: false,\n    keywords: {\n      keyword: [\n        \"query\",\n        \"mutation\",\n        \"subscription\",\n        \"type\",\n        \"input\",\n        \"schema\",\n        \"directive\",\n        \"interface\",\n        \"union\",\n        \"scalar\",\n        \"fragment\",\n        \"enum\",\n        \"on\"\n      ],\n      literal: [\n        \"true\",\n        \"false\",\n        \"null\"\n      ]\n    },\n    contains: [\n      hljs.HASH_COMMENT_MODE,\n      hljs.QUOTE_STRING_MODE,\n      hljs.NUMBER_MODE,\n      {\n        scope: \"punctuation\",\n        match: /[.]{3}/,\n        relevance: 0\n      },\n      {\n        scope: \"punctuation\",\n        begin: /[\\!\\(\\)\\:\\=\\[\\]\\{\\|\\}]{1}/,\n        relevance: 0\n      },\n      {\n        scope: \"variable\",\n        begin: /\\$/,\n        end: /\\W/,\n        excludeEnd: true,\n        relevance: 0\n      },\n      {\n        scope: \"meta\",\n        match: /@\\w+/,\n        excludeEnd: true\n      },\n      {\n        scope: \"symbol\",\n        begin: regex.concat(GQL_NAME, regex.lookahead(/\\s*:/)),\n        relevance: 0\n      }\n    ],\n    illegal: [\n      /[;<']/,\n      /BEGIN/\n    ]\n  };\n}\n\nmodule.exports = graphql;\n","/*\n Language: Groovy\n Author: Guillaume Laforge <glaforge@gmail.com>\n Description: Groovy programming language implementation inspired from Vsevolod's Java mode\n Website: https://groovy-lang.org\n Category: system\n */\n\nfunction variants(variants, obj = {}) {\n  obj.variants = variants;\n  return obj;\n}\n\nfunction groovy(hljs) {\n  const regex = hljs.regex;\n  const IDENT_RE = '[A-Za-z0-9_$]+';\n  const COMMENT = variants([\n    hljs.C_LINE_COMMENT_MODE,\n    hljs.C_BLOCK_COMMENT_MODE,\n    hljs.COMMENT(\n      '/\\\\*\\\\*',\n      '\\\\*/',\n      {\n        relevance: 0,\n        contains: [\n          {\n            // eat up @'s in emails to prevent them to be recognized as doctags\n            begin: /\\w+@/,\n            relevance: 0\n          },\n          {\n            className: 'doctag',\n            begin: '@[A-Za-z]+'\n          }\n        ]\n      }\n    )\n  ]);\n  const REGEXP = {\n    className: 'regexp',\n    begin: /~?\\/[^\\/\\n]+\\//,\n    contains: [ hljs.BACKSLASH_ESCAPE ]\n  };\n  const NUMBER = variants([\n    hljs.BINARY_NUMBER_MODE,\n    hljs.C_NUMBER_MODE\n  ]);\n  const STRING = variants([\n    {\n      begin: /\"\"\"/,\n      end: /\"\"\"/\n    },\n    {\n      begin: /'''/,\n      end: /'''/\n    },\n    {\n      begin: \"\\\\$/\",\n      end: \"/\\\\$\",\n      relevance: 10\n    },\n    hljs.APOS_STRING_MODE,\n    hljs.QUOTE_STRING_MODE\n  ],\n  { className: \"string\" }\n  );\n\n  const CLASS_DEFINITION = {\n    match: [\n      /(class|interface|trait|enum|record|extends|implements)/,\n      /\\s+/,\n      hljs.UNDERSCORE_IDENT_RE\n    ],\n    scope: {\n      1: \"keyword\",\n      3: \"title.class\",\n    }\n  };\n  const TYPES = [\n    \"byte\",\n    \"short\",\n    \"char\",\n    \"int\",\n    \"long\",\n    \"boolean\",\n    \"float\",\n    \"double\",\n    \"void\"\n  ];\n  const KEYWORDS = [\n    // groovy specific keywords\n    \"def\",\n    \"as\",\n    \"in\",\n    \"assert\",\n    \"trait\",\n    // common keywords with Java\n    \"abstract\",\n    \"static\",\n    \"volatile\",\n    \"transient\",\n    \"public\",\n    \"private\",\n    \"protected\",\n    \"synchronized\",\n    \"final\",\n    \"class\",\n    \"interface\",\n    \"enum\",\n    \"if\",\n    \"else\",\n    \"for\",\n    \"while\",\n    \"switch\",\n    \"case\",\n    \"break\",\n    \"default\",\n    \"continue\",\n    \"throw\",\n    \"throws\",\n    \"try\",\n    \"catch\",\n    \"finally\",\n    \"implements\",\n    \"extends\",\n    \"new\",\n    \"import\",\n    \"package\",\n    \"return\",\n    \"instanceof\",\n    \"var\"\n  ];\n\n  return {\n    name: 'Groovy',\n    keywords: {\n      \"variable.language\": 'this super',\n      literal: 'true false null',\n      type: TYPES,\n      keyword: KEYWORDS\n    },\n    contains: [\n      hljs.SHEBANG({\n        binary: \"groovy\",\n        relevance: 10\n      }),\n      COMMENT,\n      STRING,\n      REGEXP,\n      NUMBER,\n      CLASS_DEFINITION,\n      {\n        className: 'meta',\n        begin: '@[A-Za-z]+',\n        relevance: 0\n      },\n      {\n        // highlight map keys and named parameters as attrs\n        className: 'attr',\n        begin: IDENT_RE + '[ \\t]*:',\n        relevance: 0\n      },\n      {\n        // catch middle element of the ternary operator\n        // to avoid highlight it as a label, named parameter, or map key\n        begin: /\\?/,\n        end: /:/,\n        relevance: 0,\n        contains: [\n          COMMENT,\n          STRING,\n          REGEXP,\n          NUMBER,\n          'self'\n        ]\n      },\n      {\n        // highlight labeled statements\n        className: 'symbol',\n        begin: '^[ \\t]*' + regex.lookahead(IDENT_RE + ':'),\n        excludeBegin: true,\n        end: IDENT_RE + ':',\n        relevance: 0\n      }\n    ],\n    illegal: /#|<\\//\n  };\n}\n\nmodule.exports = groovy;\n","/*\nLanguage: HAML\nRequires: ruby.js\nAuthor: Dan Allen <dan.j.allen@gmail.com>\nWebsite: http://haml.info\nCategory: template\n*/\n\n// TODO support filter tags like :javascript, support inline HTML\nfunction haml(hljs) {\n  return {\n    name: 'HAML',\n    case_insensitive: true,\n    contains: [\n      {\n        className: 'meta',\n        begin: '^!!!( (5|1\\\\.1|Strict|Frameset|Basic|Mobile|RDFa|XML\\\\b.*))?$',\n        relevance: 10\n      },\n      // FIXME these comments should be allowed to span indented lines\n      hljs.COMMENT(\n        '^\\\\s*(!=#|=#|-#|/).*$',\n        null,\n        { relevance: 0 }\n      ),\n      {\n        begin: '^\\\\s*(-|=|!=)(?!#)',\n        end: /$/,\n        subLanguage: 'ruby',\n        excludeBegin: true,\n        excludeEnd: true\n      },\n      {\n        className: 'tag',\n        begin: '^\\\\s*%',\n        contains: [\n          {\n            className: 'selector-tag',\n            begin: '\\\\w+'\n          },\n          {\n            className: 'selector-id',\n            begin: '#[\\\\w-]+'\n          },\n          {\n            className: 'selector-class',\n            begin: '\\\\.[\\\\w-]+'\n          },\n          {\n            begin: /\\{\\s*/,\n            end: /\\s*\\}/,\n            contains: [\n              {\n                begin: ':\\\\w+\\\\s*=>',\n                end: ',\\\\s+',\n                returnBegin: true,\n                endsWithParent: true,\n                contains: [\n                  {\n                    className: 'attr',\n                    begin: ':\\\\w+'\n                  },\n                  hljs.APOS_STRING_MODE,\n                  hljs.QUOTE_STRING_MODE,\n                  {\n                    begin: '\\\\w+',\n                    relevance: 0\n                  }\n                ]\n              }\n            ]\n          },\n          {\n            begin: '\\\\(\\\\s*',\n            end: '\\\\s*\\\\)',\n            excludeEnd: true,\n            contains: [\n              {\n                begin: '\\\\w+\\\\s*=',\n                end: '\\\\s+',\n                returnBegin: true,\n                endsWithParent: true,\n                contains: [\n                  {\n                    className: 'attr',\n                    begin: '\\\\w+',\n                    relevance: 0\n                  },\n                  hljs.APOS_STRING_MODE,\n                  hljs.QUOTE_STRING_MODE,\n                  {\n                    begin: '\\\\w+',\n                    relevance: 0\n                  }\n                ]\n              }\n            ]\n          }\n        ]\n      },\n      { begin: '^\\\\s*[=~]\\\\s*' },\n      {\n        begin: /#\\{/,\n        end: /\\}/,\n        subLanguage: 'ruby',\n        excludeBegin: true,\n        excludeEnd: true\n      }\n    ]\n  };\n}\n\nmodule.exports = haml;\n","/*\nLanguage: Handlebars\nRequires: xml.js\nAuthor: Robin Ward <robin.ward@gmail.com>\nDescription: Matcher for Handlebars as well as EmberJS additions.\nWebsite: https://handlebarsjs.com\nCategory: template\n*/\n\nfunction handlebars(hljs) {\n  const regex = hljs.regex;\n  const BUILT_INS = {\n    $pattern: /[\\w.\\/]+/,\n    built_in: [\n      'action',\n      'bindattr',\n      'collection',\n      'component',\n      'concat',\n      'debugger',\n      'each',\n      'each-in',\n      'get',\n      'hash',\n      'if',\n      'in',\n      'input',\n      'link-to',\n      'loc',\n      'log',\n      'lookup',\n      'mut',\n      'outlet',\n      'partial',\n      'query-params',\n      'render',\n      'template',\n      'textarea',\n      'unbound',\n      'unless',\n      'view',\n      'with',\n      'yield'\n    ]\n  };\n\n  const LITERALS = {\n    $pattern: /[\\w.\\/]+/,\n    literal: [\n      'true',\n      'false',\n      'undefined',\n      'null'\n    ]\n  };\n\n  // as defined in https://handlebarsjs.com/guide/expressions.html#literal-segments\n  // this regex matches literal segments like ' abc ' or [ abc ] as well as helpers and paths\n  // like a/b, ./abc/cde, and abc.bcd\n\n  const DOUBLE_QUOTED_ID_REGEX = /\"\"|\"[^\"]+\"/;\n  const SINGLE_QUOTED_ID_REGEX = /''|'[^']+'/;\n  const BRACKET_QUOTED_ID_REGEX = /\\[\\]|\\[[^\\]]+\\]/;\n  const PLAIN_ID_REGEX = /[^\\s!\"#%&'()*+,.\\/;<=>@\\[\\\\\\]^`{|}~]+/;\n  const PATH_DELIMITER_REGEX = /(\\.|\\/)/;\n  const ANY_ID = regex.either(\n    DOUBLE_QUOTED_ID_REGEX,\n    SINGLE_QUOTED_ID_REGEX,\n    BRACKET_QUOTED_ID_REGEX,\n    PLAIN_ID_REGEX\n  );\n\n  const IDENTIFIER_REGEX = regex.concat(\n    regex.optional(/\\.|\\.\\/|\\//), // relative or absolute path\n    ANY_ID,\n    regex.anyNumberOfTimes(regex.concat(\n      PATH_DELIMITER_REGEX,\n      ANY_ID\n    ))\n  );\n\n  // identifier followed by a equal-sign (without the equal sign)\n  const HASH_PARAM_REGEX = regex.concat(\n    '(',\n    BRACKET_QUOTED_ID_REGEX, '|',\n    PLAIN_ID_REGEX,\n    ')(?==)'\n  );\n\n  const HELPER_NAME_OR_PATH_EXPRESSION = { begin: IDENTIFIER_REGEX };\n\n  const HELPER_PARAMETER = hljs.inherit(HELPER_NAME_OR_PATH_EXPRESSION, { keywords: LITERALS });\n\n  const SUB_EXPRESSION = {\n    begin: /\\(/,\n    end: /\\)/\n    // the \"contains\" is added below when all necessary sub-modes are defined\n  };\n\n  const HASH = {\n    // fka \"attribute-assignment\", parameters of the form 'key=value'\n    className: 'attr',\n    begin: HASH_PARAM_REGEX,\n    relevance: 0,\n    starts: {\n      begin: /=/,\n      end: /=/,\n      starts: { contains: [\n        hljs.NUMBER_MODE,\n        hljs.QUOTE_STRING_MODE,\n        hljs.APOS_STRING_MODE,\n        HELPER_PARAMETER,\n        SUB_EXPRESSION\n      ] }\n    }\n  };\n\n  const BLOCK_PARAMS = {\n    // parameters of the form '{{#with x as | y |}}...{{/with}}'\n    begin: /as\\s+\\|/,\n    keywords: { keyword: 'as' },\n    end: /\\|/,\n    contains: [\n      {\n        // define sub-mode in order to prevent highlighting of block-parameter named \"as\"\n        begin: /\\w+/ }\n    ]\n  };\n\n  const HELPER_PARAMETERS = {\n    contains: [\n      hljs.NUMBER_MODE,\n      hljs.QUOTE_STRING_MODE,\n      hljs.APOS_STRING_MODE,\n      BLOCK_PARAMS,\n      HASH,\n      HELPER_PARAMETER,\n      SUB_EXPRESSION\n    ],\n    returnEnd: true\n    // the property \"end\" is defined through inheritance when the mode is used. If depends\n    // on the surrounding mode, but \"endsWithParent\" does not work here (i.e. it includes the\n    // end-token of the surrounding mode)\n  };\n\n  const SUB_EXPRESSION_CONTENTS = hljs.inherit(HELPER_NAME_OR_PATH_EXPRESSION, {\n    className: 'name',\n    keywords: BUILT_INS,\n    starts: hljs.inherit(HELPER_PARAMETERS, { end: /\\)/ })\n  });\n\n  SUB_EXPRESSION.contains = [ SUB_EXPRESSION_CONTENTS ];\n\n  const OPENING_BLOCK_MUSTACHE_CONTENTS = hljs.inherit(HELPER_NAME_OR_PATH_EXPRESSION, {\n    keywords: BUILT_INS,\n    className: 'name',\n    starts: hljs.inherit(HELPER_PARAMETERS, { end: /\\}\\}/ })\n  });\n\n  const CLOSING_BLOCK_MUSTACHE_CONTENTS = hljs.inherit(HELPER_NAME_OR_PATH_EXPRESSION, {\n    keywords: BUILT_INS,\n    className: 'name'\n  });\n\n  const BASIC_MUSTACHE_CONTENTS = hljs.inherit(HELPER_NAME_OR_PATH_EXPRESSION, {\n    className: 'name',\n    keywords: BUILT_INS,\n    starts: hljs.inherit(HELPER_PARAMETERS, { end: /\\}\\}/ })\n  });\n\n  const ESCAPE_MUSTACHE_WITH_PRECEEDING_BACKSLASH = {\n    begin: /\\\\\\{\\{/,\n    skip: true\n  };\n  const PREVENT_ESCAPE_WITH_ANOTHER_PRECEEDING_BACKSLASH = {\n    begin: /\\\\\\\\(?=\\{\\{)/,\n    skip: true\n  };\n\n  return {\n    name: 'Handlebars',\n    aliases: [\n      'hbs',\n      'html.hbs',\n      'html.handlebars',\n      'htmlbars'\n    ],\n    case_insensitive: true,\n    subLanguage: 'xml',\n    contains: [\n      ESCAPE_MUSTACHE_WITH_PRECEEDING_BACKSLASH,\n      PREVENT_ESCAPE_WITH_ANOTHER_PRECEEDING_BACKSLASH,\n      hljs.COMMENT(/\\{\\{!--/, /--\\}\\}/),\n      hljs.COMMENT(/\\{\\{!/, /\\}\\}/),\n      {\n        // open raw block \"{{{{raw}}}} content not evaluated {{{{/raw}}}}\"\n        className: 'template-tag',\n        begin: /\\{\\{\\{\\{(?!\\/)/,\n        end: /\\}\\}\\}\\}/,\n        contains: [ OPENING_BLOCK_MUSTACHE_CONTENTS ],\n        starts: {\n          end: /\\{\\{\\{\\{\\//,\n          returnEnd: true,\n          subLanguage: 'xml'\n        }\n      },\n      {\n        // close raw block\n        className: 'template-tag',\n        begin: /\\{\\{\\{\\{\\//,\n        end: /\\}\\}\\}\\}/,\n        contains: [ CLOSING_BLOCK_MUSTACHE_CONTENTS ]\n      },\n      {\n        // open block statement\n        className: 'template-tag',\n        begin: /\\{\\{#/,\n        end: /\\}\\}/,\n        contains: [ OPENING_BLOCK_MUSTACHE_CONTENTS ]\n      },\n      {\n        className: 'template-tag',\n        begin: /\\{\\{(?=else\\}\\})/,\n        end: /\\}\\}/,\n        keywords: 'else'\n      },\n      {\n        className: 'template-tag',\n        begin: /\\{\\{(?=else if)/,\n        end: /\\}\\}/,\n        keywords: 'else if'\n      },\n      {\n        // closing block statement\n        className: 'template-tag',\n        begin: /\\{\\{\\//,\n        end: /\\}\\}/,\n        contains: [ CLOSING_BLOCK_MUSTACHE_CONTENTS ]\n      },\n      {\n        // template variable or helper-call that is NOT html-escaped\n        className: 'template-variable',\n        begin: /\\{\\{\\{/,\n        end: /\\}\\}\\}/,\n        contains: [ BASIC_MUSTACHE_CONTENTS ]\n      },\n      {\n        // template variable or helper-call that is html-escaped\n        className: 'template-variable',\n        begin: /\\{\\{/,\n        end: /\\}\\}/,\n        contains: [ BASIC_MUSTACHE_CONTENTS ]\n      }\n    ]\n  };\n}\n\nmodule.exports = handlebars;\n","/*\nLanguage: Haskell\nAuthor: Jeremy Hull <sourdrums@gmail.com>\nContributors: Zena Treep <zena.treep@gmail.com>\nWebsite: https://www.haskell.org\nCategory: functional\n*/\n\nfunction haskell(hljs) {\n\n  /* See:\n     - https://www.haskell.org/onlinereport/lexemes.html\n     - https://downloads.haskell.org/ghc/9.0.1/docs/html/users_guide/exts/binary_literals.html\n     - https://downloads.haskell.org/ghc/9.0.1/docs/html/users_guide/exts/numeric_underscores.html\n     - https://downloads.haskell.org/ghc/9.0.1/docs/html/users_guide/exts/hex_float_literals.html\n  */\n  const decimalDigits = '([0-9]_*)+';\n  const hexDigits = '([0-9a-fA-F]_*)+';\n  const binaryDigits = '([01]_*)+';\n  const octalDigits = '([0-7]_*)+';\n  const ascSymbol = '[!#$%&*+.\\\\/<=>?@\\\\\\\\^~-]';\n  const uniSymbol = '(\\\\p{S}|\\\\p{P})'; // Symbol or Punctuation\n  const special = '[(),;\\\\[\\\\]`|{}]';\n  const symbol = `(${ascSymbol}|(?!(${special}|[_:\"']))${uniSymbol})`;\n\n  const COMMENT = { variants: [\n    // Double dash forms a valid comment only if it's not part of legal lexeme.\n    // See: Haskell 98 report: https://www.haskell.org/onlinereport/lexemes.html\n    //\n    // The commented code does the job, but we can't use negative lookbehind,\n    // due to poor support by Safari browser.\n    // > hljs.COMMENT(`(?<!${symbol})--+(?!${symbol})`, '$'),\n    // So instead, we'll add a no-markup rule before the COMMENT rule in the rules list\n    // to match the problematic infix operators that contain double dash.\n    hljs.COMMENT('--+', '$'),\n    hljs.COMMENT(\n      /\\{-/,\n      /-\\}/,\n      { contains: [ 'self' ] }\n    )\n  ] };\n\n  const PRAGMA = {\n    className: 'meta',\n    begin: /\\{-#/,\n    end: /#-\\}/\n  };\n\n  const PREPROCESSOR = {\n    className: 'meta',\n    begin: '^#',\n    end: '$'\n  };\n\n  const CONSTRUCTOR = {\n    className: 'type',\n    begin: '\\\\b[A-Z][\\\\w\\']*', // TODO: other constructors (build-in, infix).\n    relevance: 0\n  };\n\n  const LIST = {\n    begin: '\\\\(',\n    end: '\\\\)',\n    illegal: '\"',\n    contains: [\n      PRAGMA,\n      PREPROCESSOR,\n      {\n        className: 'type',\n        begin: '\\\\b[A-Z][\\\\w]*(\\\\((\\\\.\\\\.|,|\\\\w+)\\\\))?'\n      },\n      hljs.inherit(hljs.TITLE_MODE, { begin: '[_a-z][\\\\w\\']*' }),\n      COMMENT\n    ]\n  };\n\n  const RECORD = {\n    begin: /\\{/,\n    end: /\\}/,\n    contains: LIST.contains\n  };\n\n  const NUMBER = {\n    className: 'number',\n    relevance: 0,\n    variants: [\n      // decimal floating-point-literal (subsumes decimal-literal)\n      { match: `\\\\b(${decimalDigits})(\\\\.(${decimalDigits}))?` + `([eE][+-]?(${decimalDigits}))?\\\\b` },\n      // hexadecimal floating-point-literal (subsumes hexadecimal-literal)\n      { match: `\\\\b0[xX]_*(${hexDigits})(\\\\.(${hexDigits}))?` + `([pP][+-]?(${decimalDigits}))?\\\\b` },\n      // octal-literal\n      { match: `\\\\b0[oO](${octalDigits})\\\\b` },\n      // binary-literal\n      { match: `\\\\b0[bB](${binaryDigits})\\\\b` }\n    ]\n  };\n\n  return {\n    name: 'Haskell',\n    aliases: [ 'hs' ],\n    keywords:\n      'let in if then else case of where do module import hiding '\n      + 'qualified type data newtype deriving class instance as default '\n      + 'infix infixl infixr foreign export ccall stdcall cplusplus '\n      + 'jvm dotnet safe unsafe family forall mdo proc rec',\n    unicodeRegex: true,\n    contains: [\n      // Top-level constructions.\n      {\n        beginKeywords: 'module',\n        end: 'where',\n        keywords: 'module where',\n        contains: [\n          LIST,\n          COMMENT\n        ],\n        illegal: '\\\\W\\\\.|;'\n      },\n      {\n        begin: '\\\\bimport\\\\b',\n        end: '$',\n        keywords: 'import qualified as hiding',\n        contains: [\n          LIST,\n          COMMENT\n        ],\n        illegal: '\\\\W\\\\.|;'\n      },\n      {\n        className: 'class',\n        begin: '^(\\\\s*)?(class|instance)\\\\b',\n        end: 'where',\n        keywords: 'class family instance where',\n        contains: [\n          CONSTRUCTOR,\n          LIST,\n          COMMENT\n        ]\n      },\n      {\n        className: 'class',\n        begin: '\\\\b(data|(new)?type)\\\\b',\n        end: '$',\n        keywords: 'data family type newtype deriving',\n        contains: [\n          PRAGMA,\n          CONSTRUCTOR,\n          LIST,\n          RECORD,\n          COMMENT\n        ]\n      },\n      {\n        beginKeywords: 'default',\n        end: '$',\n        contains: [\n          CONSTRUCTOR,\n          LIST,\n          COMMENT\n        ]\n      },\n      {\n        beginKeywords: 'infix infixl infixr',\n        end: '$',\n        contains: [\n          hljs.C_NUMBER_MODE,\n          COMMENT\n        ]\n      },\n      {\n        begin: '\\\\bforeign\\\\b',\n        end: '$',\n        keywords: 'foreign import export ccall stdcall cplusplus jvm '\n                  + 'dotnet safe unsafe',\n        contains: [\n          CONSTRUCTOR,\n          hljs.QUOTE_STRING_MODE,\n          COMMENT\n        ]\n      },\n      {\n        className: 'meta',\n        begin: '#!\\\\/usr\\\\/bin\\\\/env\\ runhaskell',\n        end: '$'\n      },\n      // \"Whitespaces\".\n      PRAGMA,\n      PREPROCESSOR,\n\n      // Literals and names.\n\n      // Single characters.\n      {\n        scope: 'string',\n        begin: /'(?=\\\\?.')/,\n        end: /'/,\n        contains: [\n          {\n            scope: 'char.escape',\n            match: /\\\\./,\n          },\n        ]\n      },\n      hljs.QUOTE_STRING_MODE,\n      NUMBER,\n      CONSTRUCTOR,\n      hljs.inherit(hljs.TITLE_MODE, { begin: '^[_a-z][\\\\w\\']*' }),\n      // No markup, prevents infix operators from being recognized as comments.\n      { begin: `(?!-)${symbol}--+|--+(?!-)${symbol}`},\n      COMMENT,\n      { // No markup, relevance booster\n        begin: '->|<-' }\n    ]\n  };\n}\n\nmodule.exports = haskell;\n","/*\nLanguage: Haxe\nDescription: Haxe is an open source toolkit based on a modern, high level, strictly typed programming language.\nAuthor: Christopher Kaster <ikasoki@gmail.com> (Based on the actionscript.js language file by Alexander Myadzel)\nContributors: Kenton Hamaluik <kentonh@gmail.com>\nWebsite: https://haxe.org\nCategory: system\n*/\n\nfunction haxe(hljs) {\n  const IDENT_RE = '[a-zA-Z_$][a-zA-Z0-9_$]*';\n\n  // C_NUMBER_RE with underscores and literal suffixes\n  const HAXE_NUMBER_RE = /(-?)(\\b0[xX][a-fA-F0-9_]+|(\\b\\d+(\\.[\\d_]*)?|\\.[\\d_]+)(([eE][-+]?\\d+)|i32|u32|i64|f64)?)/;\n\n  const HAXE_BASIC_TYPES = 'Int Float String Bool Dynamic Void Array ';\n\n  return {\n    name: 'Haxe',\n    aliases: [ 'hx' ],\n    keywords: {\n      keyword: 'abstract break case cast catch continue default do dynamic else enum extern '\n               + 'final for function here if import in inline is macro never new override package private get set '\n               + 'public return static super switch this throw trace try typedef untyped using var while '\n               + HAXE_BASIC_TYPES,\n      built_in:\n        'trace this',\n      literal:\n        'true false null _'\n    },\n    contains: [\n      {\n        className: 'string', // interpolate-able strings\n        begin: '\\'',\n        end: '\\'',\n        contains: [\n          hljs.BACKSLASH_ESCAPE,\n          {\n            className: 'subst', // interpolation\n            begin: /\\$\\{/,\n            end: /\\}/\n          },\n          {\n            className: 'subst', // interpolation\n            begin: /\\$/,\n            end: /\\W\\}/\n          }\n        ]\n      },\n      hljs.QUOTE_STRING_MODE,\n      hljs.C_LINE_COMMENT_MODE,\n      hljs.C_BLOCK_COMMENT_MODE,\n      {\n        className: 'number',\n        begin: HAXE_NUMBER_RE,\n        relevance: 0\n      },\n      {\n        className: 'variable',\n        begin: \"\\\\$\" + IDENT_RE,\n      },\n      {\n        className: 'meta', // compiler meta\n        begin: /@:?/,\n        end: /\\(|$/,\n        excludeEnd: true,\n      },\n      {\n        className: 'meta', // compiler conditionals\n        begin: '#',\n        end: '$',\n        keywords: { keyword: 'if else elseif end error' }\n      },\n      {\n        className: 'type', // function types\n        begin: /:[ \\t]*/,\n        end: /[^A-Za-z0-9_ \\t\\->]/,\n        excludeBegin: true,\n        excludeEnd: true,\n        relevance: 0\n      },\n      {\n        className: 'type', // types\n        begin: /:[ \\t]*/,\n        end: /\\W/,\n        excludeBegin: true,\n        excludeEnd: true\n      },\n      {\n        className: 'type', // instantiation\n        beginKeywords: 'new',\n        end: /\\W/,\n        excludeBegin: true,\n        excludeEnd: true\n      },\n      {\n        className: 'title.class', // enums\n        beginKeywords: 'enum',\n        end: /\\{/,\n        contains: [ hljs.TITLE_MODE ]\n      },\n      {\n        className: 'title.class', // abstracts\n        begin: '\\\\babstract\\\\b(?=\\\\s*' + hljs.IDENT_RE + '\\\\s*\\\\()',\n        end: /[\\{$]/,\n        contains: [\n          {\n            className: 'type',\n            begin: /\\(/,\n            end: /\\)/,\n            excludeBegin: true,\n            excludeEnd: true\n          },\n          {\n            className: 'type',\n            begin: /from +/,\n            end: /\\W/,\n            excludeBegin: true,\n            excludeEnd: true\n          },\n          {\n            className: 'type',\n            begin: /to +/,\n            end: /\\W/,\n            excludeBegin: true,\n            excludeEnd: true\n          },\n          hljs.TITLE_MODE\n        ],\n        keywords: { keyword: 'abstract from to' }\n      },\n      {\n        className: 'title.class', // classes\n        begin: /\\b(class|interface) +/,\n        end: /[\\{$]/,\n        excludeEnd: true,\n        keywords: 'class interface',\n        contains: [\n          {\n            className: 'keyword',\n            begin: /\\b(extends|implements) +/,\n            keywords: 'extends implements',\n            contains: [\n              {\n                className: 'type',\n                begin: hljs.IDENT_RE,\n                relevance: 0\n              }\n            ]\n          },\n          hljs.TITLE_MODE\n        ]\n      },\n      {\n        className: 'title.function',\n        beginKeywords: 'function',\n        end: /\\(/,\n        excludeEnd: true,\n        illegal: /\\S/,\n        contains: [ hljs.TITLE_MODE ]\n      }\n    ],\n    illegal: /<\\//\n  };\n}\n\nmodule.exports = haxe;\n","/*\nLanguage: HSP\nAuthor: prince <MC.prince.0203@gmail.com>\nWebsite: https://en.wikipedia.org/wiki/Hot_Soup_Processor\nCategory: scripting\n*/\n\nfunction hsp(hljs) {\n  return {\n    name: 'HSP',\n    case_insensitive: true,\n    keywords: {\n      $pattern: /[\\w._]+/,\n      keyword: 'goto gosub return break repeat loop continue wait await dim sdim foreach dimtype dup dupptr end stop newmod delmod mref run exgoto on mcall assert logmes newlab resume yield onexit onerror onkey onclick oncmd exist delete mkdir chdir dirlist bload bsave bcopy memfile if else poke wpoke lpoke getstr chdpm memexpand memcpy memset notesel noteadd notedel noteload notesave randomize noteunsel noteget split strrep setease button chgdisp exec dialog mmload mmplay mmstop mci pset pget syscolor mes print title pos circle cls font sysfont objsize picload color palcolor palette redraw width gsel gcopy gzoom gmode bmpsave hsvcolor getkey listbox chkbox combox input mesbox buffer screen bgscr mouse objsel groll line clrobj boxf objprm objmode stick grect grotate gsquare gradf objimage objskip objenable celload celdiv celput newcom querycom delcom cnvstow comres axobj winobj sendmsg comevent comevarg sarrayconv callfunc cnvwtos comevdisp libptr system hspstat hspver stat cnt err strsize looplev sublev iparam wparam lparam refstr refdval int rnd strlen length length2 length3 length4 vartype gettime peek wpeek lpeek varptr varuse noteinfo instr abs limit getease str strmid strf getpath strtrim sin cos tan atan sqrt double absf expf logf limitf powf geteasef mousex mousey mousew hwnd hinstance hdc ginfo objinfo dirinfo sysinfo thismod __hspver__ __hsp30__ __date__ __time__ __line__ __file__ _debug __hspdef__ and or xor not screen_normal screen_palette screen_hide screen_fixedsize screen_tool screen_frame gmode_gdi gmode_mem gmode_rgb0 gmode_alpha gmode_rgb0alpha gmode_add gmode_sub gmode_pixela ginfo_mx ginfo_my ginfo_act ginfo_sel ginfo_wx1 ginfo_wy1 ginfo_wx2 ginfo_wy2 ginfo_vx ginfo_vy ginfo_sizex ginfo_sizey ginfo_winx ginfo_winy ginfo_mesx ginfo_mesy ginfo_r ginfo_g ginfo_b ginfo_paluse ginfo_dispx ginfo_dispy ginfo_cx ginfo_cy ginfo_intid ginfo_newid ginfo_sx ginfo_sy objinfo_mode objinfo_bmscr objinfo_hwnd notemax notesize dir_cur dir_exe dir_win dir_sys dir_cmdline dir_desktop dir_mydoc dir_tv font_normal font_bold font_italic font_underline font_strikeout font_antialias objmode_normal objmode_guifont objmode_usefont gsquare_grad msgothic msmincho do until while wend for next _break _continue switch case default swbreak swend ddim ldim alloc m_pi rad2deg deg2rad ease_linear ease_quad_in ease_quad_out ease_quad_inout ease_cubic_in ease_cubic_out ease_cubic_inout ease_quartic_in ease_quartic_out ease_quartic_inout ease_bounce_in ease_bounce_out ease_bounce_inout ease_shake_in ease_shake_out ease_shake_inout ease_loop'\n    },\n    contains: [\n      hljs.C_LINE_COMMENT_MODE,\n      hljs.C_BLOCK_COMMENT_MODE,\n      hljs.QUOTE_STRING_MODE,\n      hljs.APOS_STRING_MODE,\n\n      {\n        // multi-line string\n        className: 'string',\n        begin: /\\{\"/,\n        end: /\"\\}/,\n        contains: [ hljs.BACKSLASH_ESCAPE ]\n      },\n\n      hljs.COMMENT(';', '$', { relevance: 0 }),\n\n      {\n        // pre-processor\n        className: 'meta',\n        begin: '#',\n        end: '$',\n        keywords: { keyword: 'addion cfunc cmd cmpopt comfunc const defcfunc deffunc define else endif enum epack func global if ifdef ifndef include modcfunc modfunc modinit modterm module pack packopt regcmd runtime undef usecom uselib' },\n        contains: [\n          hljs.inherit(hljs.QUOTE_STRING_MODE, { className: 'string' }),\n          hljs.NUMBER_MODE,\n          hljs.C_NUMBER_MODE,\n          hljs.C_LINE_COMMENT_MODE,\n          hljs.C_BLOCK_COMMENT_MODE\n        ]\n      },\n\n      {\n        // label\n        className: 'symbol',\n        begin: '^\\\\*(\\\\w+|@)'\n      },\n\n      hljs.NUMBER_MODE,\n      hljs.C_NUMBER_MODE\n    ]\n  };\n}\n\nmodule.exports = hsp;\n","/*\nLanguage: HTTP\nDescription: HTTP request and response headers with automatic body highlighting\nAuthor: Ivan Sagalaev <maniac@softwaremaniacs.org>\nCategory: protocols, web\nWebsite: https://developer.mozilla.org/en-US/docs/Web/HTTP/Overview\n*/\n\nfunction http(hljs) {\n  const regex = hljs.regex;\n  const VERSION = 'HTTP/([32]|1\\\\.[01])';\n  const HEADER_NAME = /[A-Za-z][A-Za-z0-9-]*/;\n  const HEADER = {\n    className: 'attribute',\n    begin: regex.concat('^', HEADER_NAME, '(?=\\\\:\\\\s)'),\n    starts: { contains: [\n      {\n        className: \"punctuation\",\n        begin: /: /,\n        relevance: 0,\n        starts: {\n          end: '$',\n          relevance: 0\n        }\n      }\n    ] }\n  };\n  const HEADERS_AND_BODY = [\n    HEADER,\n    {\n      begin: '\\\\n\\\\n',\n      starts: {\n        subLanguage: [],\n        endsWithParent: true\n      }\n    }\n  ];\n\n  return {\n    name: 'HTTP',\n    aliases: [ 'https' ],\n    illegal: /\\S/,\n    contains: [\n      // response\n      {\n        begin: '^(?=' + VERSION + \" \\\\d{3})\",\n        end: /$/,\n        contains: [\n          {\n            className: \"meta\",\n            begin: VERSION\n          },\n          {\n            className: 'number',\n            begin: '\\\\b\\\\d{3}\\\\b'\n          }\n        ],\n        starts: {\n          end: /\\b\\B/,\n          illegal: /\\S/,\n          contains: HEADERS_AND_BODY\n        }\n      },\n      // request\n      {\n        begin: '(?=^[A-Z]+ (.*?) ' + VERSION + '$)',\n        end: /$/,\n        contains: [\n          {\n            className: 'string',\n            begin: ' ',\n            end: ' ',\n            excludeBegin: true,\n            excludeEnd: true\n          },\n          {\n            className: \"meta\",\n            begin: VERSION\n          },\n          {\n            className: 'keyword',\n            begin: '[A-Z]+'\n          }\n        ],\n        starts: {\n          end: /\\b\\B/,\n          illegal: /\\S/,\n          contains: HEADERS_AND_BODY\n        }\n      },\n      // to allow headers to work even without a preamble\n      hljs.inherit(HEADER, { relevance: 0 })\n    ]\n  };\n}\n\nmodule.exports = http;\n","/*\nLanguage: Hy\nDescription: Hy is a wonderful dialect of Lisp that’s embedded in Python.\nAuthor: Sergey Sobko <s.sobko@profitware.ru>\nWebsite: http://docs.hylang.org/en/stable/\nCategory: lisp\n*/\n\nfunction hy(hljs) {\n  const SYMBOLSTART = 'a-zA-Z_\\\\-!.?+*=<>&#\\'';\n  const SYMBOL_RE = '[' + SYMBOLSTART + '][' + SYMBOLSTART + '0-9/;:]*';\n  const keywords = {\n    $pattern: SYMBOL_RE,\n    built_in:\n      // keywords\n      '!= % %= & &= * ** **= *= *map '\n      + '+ += , --build-class-- --import-- -= . / // //= '\n      + '/= < << <<= <= = > >= >> >>= '\n      + '@ @= ^ ^= abs accumulate all and any ap-compose '\n      + 'ap-dotimes ap-each ap-each-while ap-filter ap-first ap-if ap-last ap-map ap-map-when ap-pipe '\n      + 'ap-reduce ap-reject apply as-> ascii assert assoc bin break butlast '\n      + 'callable calling-module-name car case cdr chain chr coll? combinations compile '\n      + 'compress cond cons cons? continue count curry cut cycle dec '\n      + 'def default-method defclass defmacro defmacro-alias defmacro/g! defmain defmethod defmulti defn '\n      + 'defn-alias defnc defnr defreader defseq del delattr delete-route dict-comp dir '\n      + 'disassemble dispatch-reader-macro distinct divmod do doto drop drop-last drop-while empty? '\n      + 'end-sequence eval eval-and-compile eval-when-compile even? every? except exec filter first '\n      + 'flatten float? fn fnc fnr for for* format fraction genexpr '\n      + 'gensym get getattr global globals group-by hasattr hash hex id '\n      + 'identity if if* if-not if-python2 import in inc input instance? '\n      + 'integer integer-char? integer? interleave interpose is is-coll is-cons is-empty is-even '\n      + 'is-every is-float is-instance is-integer is-integer-char is-iterable is-iterator is-keyword is-neg is-none '\n      + 'is-not is-numeric is-odd is-pos is-string is-symbol is-zero isinstance islice issubclass '\n      + 'iter iterable? iterate iterator? keyword keyword? lambda last len let '\n      + 'lif lif-not list* list-comp locals loop macro-error macroexpand macroexpand-1 macroexpand-all '\n      + 'map max merge-with method-decorator min multi-decorator multicombinations name neg? next '\n      + 'none? nonlocal not not-in not? nth numeric? oct odd? open '\n      + 'or ord partition permutations pos? post-route postwalk pow prewalk print '\n      + 'product profile/calls profile/cpu put-route quasiquote quote raise range read read-str '\n      + 'recursive-replace reduce remove repeat repeatedly repr require rest round route '\n      + 'route-with-methods rwm second seq set-comp setattr setv some sorted string '\n      + 'string? sum switch symbol? take take-nth take-while tee try unless '\n      + 'unquote unquote-splicing vars walk when while with with* with-decorator with-gensyms '\n      + 'xi xor yield yield-from zero? zip zip-longest | |= ~'\n  };\n\n  const SIMPLE_NUMBER_RE = '[-+]?\\\\d+(\\\\.\\\\d+)?';\n\n  const SYMBOL = {\n    begin: SYMBOL_RE,\n    relevance: 0\n  };\n  const NUMBER = {\n    className: 'number',\n    begin: SIMPLE_NUMBER_RE,\n    relevance: 0\n  };\n  const STRING = hljs.inherit(hljs.QUOTE_STRING_MODE, { illegal: null });\n  const COMMENT = hljs.COMMENT(\n    ';',\n    '$',\n    { relevance: 0 }\n  );\n  const LITERAL = {\n    className: 'literal',\n    begin: /\\b([Tt]rue|[Ff]alse|nil|None)\\b/\n  };\n  const COLLECTION = {\n    begin: '[\\\\[\\\\{]',\n    end: '[\\\\]\\\\}]',\n    relevance: 0\n  };\n  const HINT = {\n    className: 'comment',\n    begin: '\\\\^' + SYMBOL_RE\n  };\n  const HINT_COL = hljs.COMMENT('\\\\^\\\\{', '\\\\}');\n  const KEY = {\n    className: 'symbol',\n    begin: '[:]{1,2}' + SYMBOL_RE\n  };\n  const LIST = {\n    begin: '\\\\(',\n    end: '\\\\)'\n  };\n  const BODY = {\n    endsWithParent: true,\n    relevance: 0\n  };\n  const NAME = {\n    className: 'name',\n    relevance: 0,\n    keywords: keywords,\n    begin: SYMBOL_RE,\n    starts: BODY\n  };\n  const DEFAULT_CONTAINS = [\n    LIST,\n    STRING,\n    HINT,\n    HINT_COL,\n    COMMENT,\n    KEY,\n    COLLECTION,\n    NUMBER,\n    LITERAL,\n    SYMBOL\n  ];\n\n  LIST.contains = [\n    hljs.COMMENT('comment', ''),\n    NAME,\n    BODY\n  ];\n  BODY.contains = DEFAULT_CONTAINS;\n  COLLECTION.contains = DEFAULT_CONTAINS;\n\n  return {\n    name: 'Hy',\n    aliases: [ 'hylang' ],\n    illegal: /\\S/,\n    contains: [\n      hljs.SHEBANG(),\n      LIST,\n      STRING,\n      HINT,\n      HINT_COL,\n      COMMENT,\n      KEY,\n      COLLECTION,\n      NUMBER,\n      LITERAL\n    ]\n  };\n}\n\nmodule.exports = hy;\n","/*\nLanguage: Inform 7\nAuthor: Bruno Dias <bruno.r.dias@gmail.com>\nDescription: Language definition for Inform 7, a DSL for writing parser interactive fiction.\nWebsite: http://inform7.com\nCategory: gaming\n*/\n\nfunction inform7(hljs) {\n  const START_BRACKET = '\\\\[';\n  const END_BRACKET = '\\\\]';\n  return {\n    name: 'Inform 7',\n    aliases: [ 'i7' ],\n    case_insensitive: true,\n    keywords: {\n      // Some keywords more or less unique to I7, for relevance.\n      keyword:\n        // kind:\n        'thing room person man woman animal container '\n        + 'supporter backdrop door '\n        // characteristic:\n        + 'scenery open closed locked inside gender '\n        // verb:\n        + 'is are say understand '\n        // misc keyword:\n        + 'kind of rule' },\n    contains: [\n      {\n        className: 'string',\n        begin: '\"',\n        end: '\"',\n        relevance: 0,\n        contains: [\n          {\n            className: 'subst',\n            begin: START_BRACKET,\n            end: END_BRACKET\n          }\n        ]\n      },\n      {\n        className: 'section',\n        begin: /^(Volume|Book|Part|Chapter|Section|Table)\\b/,\n        end: '$'\n      },\n      {\n        // Rule definition\n        // This is here for relevance.\n        begin: /^(Check|Carry out|Report|Instead of|To|Rule|When|Before|After)\\b/,\n        end: ':',\n        contains: [\n          {\n            // Rule name\n            begin: '\\\\(This',\n            end: '\\\\)'\n          }\n        ]\n      },\n      {\n        className: 'comment',\n        begin: START_BRACKET,\n        end: END_BRACKET,\n        contains: [ 'self' ]\n      }\n    ]\n  };\n}\n\nmodule.exports = inform7;\n","/*\nLanguage: TOML, also INI\nDescription: TOML aims to be a minimal configuration file format that's easy to read due to obvious semantics.\nContributors: Guillaume Gomez <guillaume1.gomez@gmail.com>\nCategory: common, config\nWebsite: https://github.com/toml-lang/toml\n*/\n\nfunction ini(hljs) {\n  const regex = hljs.regex;\n  const NUMBERS = {\n    className: 'number',\n    relevance: 0,\n    variants: [\n      { begin: /([+-]+)?[\\d]+_[\\d_]+/ },\n      { begin: hljs.NUMBER_RE }\n    ]\n  };\n  const COMMENTS = hljs.COMMENT();\n  COMMENTS.variants = [\n    {\n      begin: /;/,\n      end: /$/\n    },\n    {\n      begin: /#/,\n      end: /$/\n    }\n  ];\n  const VARIABLES = {\n    className: 'variable',\n    variants: [\n      { begin: /\\$[\\w\\d\"][\\w\\d_]*/ },\n      { begin: /\\$\\{(.*?)\\}/ }\n    ]\n  };\n  const LITERALS = {\n    className: 'literal',\n    begin: /\\bon|off|true|false|yes|no\\b/\n  };\n  const STRINGS = {\n    className: \"string\",\n    contains: [ hljs.BACKSLASH_ESCAPE ],\n    variants: [\n      {\n        begin: \"'''\",\n        end: \"'''\",\n        relevance: 10\n      },\n      {\n        begin: '\"\"\"',\n        end: '\"\"\"',\n        relevance: 10\n      },\n      {\n        begin: '\"',\n        end: '\"'\n      },\n      {\n        begin: \"'\",\n        end: \"'\"\n      }\n    ]\n  };\n  const ARRAY = {\n    begin: /\\[/,\n    end: /\\]/,\n    contains: [\n      COMMENTS,\n      LITERALS,\n      VARIABLES,\n      STRINGS,\n      NUMBERS,\n      'self'\n    ],\n    relevance: 0\n  };\n\n  const BARE_KEY = /[A-Za-z0-9_-]+/;\n  const QUOTED_KEY_DOUBLE_QUOTE = /\"(\\\\\"|[^\"])*\"/;\n  const QUOTED_KEY_SINGLE_QUOTE = /'[^']*'/;\n  const ANY_KEY = regex.either(\n    BARE_KEY, QUOTED_KEY_DOUBLE_QUOTE, QUOTED_KEY_SINGLE_QUOTE\n  );\n  const DOTTED_KEY = regex.concat(\n    ANY_KEY, '(\\\\s*\\\\.\\\\s*', ANY_KEY, ')*',\n    regex.lookahead(/\\s*=\\s*[^#\\s]/)\n  );\n\n  return {\n    name: 'TOML, also INI',\n    aliases: [ 'toml' ],\n    case_insensitive: true,\n    illegal: /\\S/,\n    contains: [\n      COMMENTS,\n      {\n        className: 'section',\n        begin: /\\[+/,\n        end: /\\]+/\n      },\n      {\n        begin: DOTTED_KEY,\n        className: 'attr',\n        starts: {\n          end: /$/,\n          contains: [\n            COMMENTS,\n            ARRAY,\n            LITERALS,\n            VARIABLES,\n            STRINGS,\n            NUMBERS\n          ]\n        }\n      }\n    ]\n  };\n}\n\nmodule.exports = ini;\n","/*\nLanguage: IRPF90\nAuthor: Anthony Scemama <scemama@irsamc.ups-tlse.fr>\nDescription: IRPF90 is an open-source Fortran code generator\nWebsite: http://irpf90.ups-tlse.fr\nCategory: scientific\n*/\n\n/** @type LanguageFn */\nfunction irpf90(hljs) {\n  const regex = hljs.regex;\n  const PARAMS = {\n    className: 'params',\n    begin: '\\\\(',\n    end: '\\\\)'\n  };\n\n  // regex in both fortran and irpf90 should match\n  const OPTIONAL_NUMBER_SUFFIX = /(_[a-z_\\d]+)?/;\n  const OPTIONAL_NUMBER_EXP = /([de][+-]?\\d+)?/;\n  const NUMBER = {\n    className: 'number',\n    variants: [\n      { begin: regex.concat(/\\b\\d+/, /\\.(\\d*)/, OPTIONAL_NUMBER_EXP, OPTIONAL_NUMBER_SUFFIX) },\n      { begin: regex.concat(/\\b\\d+/, OPTIONAL_NUMBER_EXP, OPTIONAL_NUMBER_SUFFIX) },\n      { begin: regex.concat(/\\.\\d+/, OPTIONAL_NUMBER_EXP, OPTIONAL_NUMBER_SUFFIX) }\n    ],\n    relevance: 0\n  };\n\n  const F_KEYWORDS = {\n    literal: '.False. .True.',\n    keyword: 'kind do while private call intrinsic where elsewhere '\n      + 'type endtype endmodule endselect endinterface end enddo endif if forall endforall only contains default return stop then '\n      + 'public subroutine|10 function program .and. .or. .not. .le. .eq. .ge. .gt. .lt. '\n      + 'goto save else use module select case '\n      + 'access blank direct exist file fmt form formatted iostat name named nextrec number opened rec recl sequential status unformatted unit '\n      + 'continue format pause cycle exit '\n      + 'c_null_char c_alert c_backspace c_form_feed flush wait decimal round iomsg '\n      + 'synchronous nopass non_overridable pass protected volatile abstract extends import '\n      + 'non_intrinsic value deferred generic final enumerator class associate bind enum '\n      + 'c_int c_short c_long c_long_long c_signed_char c_size_t c_int8_t c_int16_t c_int32_t c_int64_t c_int_least8_t c_int_least16_t '\n      + 'c_int_least32_t c_int_least64_t c_int_fast8_t c_int_fast16_t c_int_fast32_t c_int_fast64_t c_intmax_t C_intptr_t c_float c_double '\n      + 'c_long_double c_float_complex c_double_complex c_long_double_complex c_bool c_char c_null_ptr c_null_funptr '\n      + 'c_new_line c_carriage_return c_horizontal_tab c_vertical_tab iso_c_binding c_loc c_funloc c_associated  c_f_pointer '\n      + 'c_ptr c_funptr iso_fortran_env character_storage_size error_unit file_storage_size input_unit iostat_end iostat_eor '\n      + 'numeric_storage_size output_unit c_f_procpointer ieee_arithmetic ieee_support_underflow_control '\n      + 'ieee_get_underflow_mode ieee_set_underflow_mode newunit contiguous recursive '\n      + 'pad position action delim readwrite eor advance nml interface procedure namelist include sequence elemental pure '\n      + 'integer real character complex logical dimension allocatable|10 parameter '\n      + 'external implicit|10 none double precision assign intent optional pointer '\n      + 'target in out common equivalence data '\n      // IRPF90 special keywords\n      + 'begin_provider &begin_provider end_provider begin_shell end_shell begin_template end_template subst assert touch '\n      + 'soft_touch provide no_dep free irp_if irp_else irp_endif irp_write irp_read',\n    built_in: 'alog alog10 amax0 amax1 amin0 amin1 amod cabs ccos cexp clog csin csqrt dabs dacos dasin datan datan2 dcos dcosh ddim dexp dint '\n      + 'dlog dlog10 dmax1 dmin1 dmod dnint dsign dsin dsinh dsqrt dtan dtanh float iabs idim idint idnint ifix isign max0 max1 min0 min1 sngl '\n      + 'algama cdabs cdcos cdexp cdlog cdsin cdsqrt cqabs cqcos cqexp cqlog cqsin cqsqrt dcmplx dconjg derf derfc dfloat dgamma dimag dlgama '\n      + 'iqint qabs qacos qasin qatan qatan2 qcmplx qconjg qcos qcosh qdim qerf qerfc qexp qgamma qimag qlgama qlog qlog10 qmax1 qmin1 qmod '\n      + 'qnint qsign qsin qsinh qsqrt qtan qtanh abs acos aimag aint anint asin atan atan2 char cmplx conjg cos cosh exp ichar index int log '\n      + 'log10 max min nint sign sin sinh sqrt tan tanh print write dim lge lgt lle llt mod nullify allocate deallocate '\n      + 'adjustl adjustr all allocated any associated bit_size btest ceiling count cshift date_and_time digits dot_product '\n      + 'eoshift epsilon exponent floor fraction huge iand ibclr ibits ibset ieor ior ishft ishftc lbound len_trim matmul '\n      + 'maxexponent maxloc maxval merge minexponent minloc minval modulo mvbits nearest pack present product '\n      + 'radix random_number random_seed range repeat reshape rrspacing scale scan selected_int_kind selected_real_kind '\n      + 'set_exponent shape size spacing spread sum system_clock tiny transpose trim ubound unpack verify achar iachar transfer '\n      + 'dble entry dprod cpu_time command_argument_count get_command get_command_argument get_environment_variable is_iostat_end '\n      + 'ieee_arithmetic ieee_support_underflow_control ieee_get_underflow_mode ieee_set_underflow_mode '\n      + 'is_iostat_eor move_alloc new_line selected_char_kind same_type_as extends_type_of '\n      + 'acosh asinh atanh bessel_j0 bessel_j1 bessel_jn bessel_y0 bessel_y1 bessel_yn erf erfc erfc_scaled gamma log_gamma hypot norm2 '\n      + 'atomic_define atomic_ref execute_command_line leadz trailz storage_size merge_bits '\n      + 'bge bgt ble blt dshiftl dshiftr findloc iall iany iparity image_index lcobound ucobound maskl maskr '\n      + 'num_images parity popcnt poppar shifta shiftl shiftr this_image '\n      // IRPF90 special built_ins\n      + 'IRP_ALIGN irp_here'\n  };\n  return {\n    name: 'IRPF90',\n    case_insensitive: true,\n    keywords: F_KEYWORDS,\n    illegal: /\\/\\*/,\n    contains: [\n      hljs.inherit(hljs.APOS_STRING_MODE, {\n        className: 'string',\n        relevance: 0\n      }),\n      hljs.inherit(hljs.QUOTE_STRING_MODE, {\n        className: 'string',\n        relevance: 0\n      }),\n      {\n        className: 'function',\n        beginKeywords: 'subroutine function program',\n        illegal: '[${=\\\\n]',\n        contains: [\n          hljs.UNDERSCORE_TITLE_MODE,\n          PARAMS\n        ]\n      },\n      hljs.COMMENT('!', '$', { relevance: 0 }),\n      hljs.COMMENT('begin_doc', 'end_doc', { relevance: 10 }),\n      NUMBER\n    ]\n  };\n}\n\nmodule.exports = irpf90;\n","/*\nLanguage: ISBL\nAuthor: Dmitriy Tarasov <dimatar@gmail.com>\nDescription: built-in language DIRECTUM\nCategory: enterprise\n*/\n\nfunction isbl(hljs) {\n  // Определение идентификаторов\n  const UNDERSCORE_IDENT_RE = \"[A-Za-zА-Яа-яёЁ_!][A-Za-zА-Яа-яёЁ_0-9]*\";\n\n  // Определение имен функций\n  const FUNCTION_NAME_IDENT_RE = \"[A-Za-zА-Яа-яёЁ_][A-Za-zА-Яа-яёЁ_0-9]*\";\n\n  // keyword : ключевые слова\n  const KEYWORD =\n    \"and и else иначе endexcept endfinally endforeach конецвсе endif конецесли endwhile конецпока \"\n    + \"except exitfor finally foreach все if если in в not не or или try while пока \";\n\n  // SYSRES Constants\n  const sysres_constants =\n    \"SYSRES_CONST_ACCES_RIGHT_TYPE_EDIT \"\n    + \"SYSRES_CONST_ACCES_RIGHT_TYPE_FULL \"\n    + \"SYSRES_CONST_ACCES_RIGHT_TYPE_VIEW \"\n    + \"SYSRES_CONST_ACCESS_MODE_REQUISITE_CODE \"\n    + \"SYSRES_CONST_ACCESS_NO_ACCESS_VIEW \"\n    + \"SYSRES_CONST_ACCESS_NO_ACCESS_VIEW_CODE \"\n    + \"SYSRES_CONST_ACCESS_RIGHTS_ADD_REQUISITE_CODE \"\n    + \"SYSRES_CONST_ACCESS_RIGHTS_ADD_REQUISITE_YES_CODE \"\n    + \"SYSRES_CONST_ACCESS_RIGHTS_CHANGE_REQUISITE_CODE \"\n    + \"SYSRES_CONST_ACCESS_RIGHTS_CHANGE_REQUISITE_YES_CODE \"\n    + \"SYSRES_CONST_ACCESS_RIGHTS_DELETE_REQUISITE_CODE \"\n    + \"SYSRES_CONST_ACCESS_RIGHTS_DELETE_REQUISITE_YES_CODE \"\n    + \"SYSRES_CONST_ACCESS_RIGHTS_EXECUTE_REQUISITE_CODE \"\n    + \"SYSRES_CONST_ACCESS_RIGHTS_EXECUTE_REQUISITE_YES_CODE \"\n    + \"SYSRES_CONST_ACCESS_RIGHTS_NO_ACCESS_REQUISITE_CODE \"\n    + \"SYSRES_CONST_ACCESS_RIGHTS_NO_ACCESS_REQUISITE_YES_CODE \"\n    + \"SYSRES_CONST_ACCESS_RIGHTS_RATIFY_REQUISITE_CODE \"\n    + \"SYSRES_CONST_ACCESS_RIGHTS_RATIFY_REQUISITE_YES_CODE \"\n    + \"SYSRES_CONST_ACCESS_RIGHTS_REQUISITE_CODE \"\n    + \"SYSRES_CONST_ACCESS_RIGHTS_VIEW \"\n    + \"SYSRES_CONST_ACCESS_RIGHTS_VIEW_CODE \"\n    + \"SYSRES_CONST_ACCESS_RIGHTS_VIEW_REQUISITE_CODE \"\n    + \"SYSRES_CONST_ACCESS_RIGHTS_VIEW_REQUISITE_YES_CODE \"\n    + \"SYSRES_CONST_ACCESS_TYPE_CHANGE \"\n    + \"SYSRES_CONST_ACCESS_TYPE_CHANGE_CODE \"\n    + \"SYSRES_CONST_ACCESS_TYPE_EXISTS \"\n    + \"SYSRES_CONST_ACCESS_TYPE_EXISTS_CODE \"\n    + \"SYSRES_CONST_ACCESS_TYPE_FULL \"\n    + \"SYSRES_CONST_ACCESS_TYPE_FULL_CODE \"\n    + \"SYSRES_CONST_ACCESS_TYPE_VIEW \"\n    + \"SYSRES_CONST_ACCESS_TYPE_VIEW_CODE \"\n    + \"SYSRES_CONST_ACTION_TYPE_ABORT \"\n    + \"SYSRES_CONST_ACTION_TYPE_ACCEPT \"\n    + \"SYSRES_CONST_ACTION_TYPE_ACCESS_RIGHTS \"\n    + \"SYSRES_CONST_ACTION_TYPE_ADD_ATTACHMENT \"\n    + \"SYSRES_CONST_ACTION_TYPE_CHANGE_CARD \"\n    + \"SYSRES_CONST_ACTION_TYPE_CHANGE_KIND \"\n    + \"SYSRES_CONST_ACTION_TYPE_CHANGE_STORAGE \"\n    + \"SYSRES_CONST_ACTION_TYPE_CONTINUE \"\n    + \"SYSRES_CONST_ACTION_TYPE_COPY \"\n    + \"SYSRES_CONST_ACTION_TYPE_CREATE \"\n    + \"SYSRES_CONST_ACTION_TYPE_CREATE_VERSION \"\n    + \"SYSRES_CONST_ACTION_TYPE_DELETE \"\n    + \"SYSRES_CONST_ACTION_TYPE_DELETE_ATTACHMENT \"\n    + \"SYSRES_CONST_ACTION_TYPE_DELETE_VERSION \"\n    + \"SYSRES_CONST_ACTION_TYPE_DISABLE_DELEGATE_ACCESS_RIGHTS \"\n    + \"SYSRES_CONST_ACTION_TYPE_ENABLE_DELEGATE_ACCESS_RIGHTS \"\n    + \"SYSRES_CONST_ACTION_TYPE_ENCRYPTION_BY_CERTIFICATE \"\n    + \"SYSRES_CONST_ACTION_TYPE_ENCRYPTION_BY_CERTIFICATE_AND_PASSWORD \"\n    + \"SYSRES_CONST_ACTION_TYPE_ENCRYPTION_BY_PASSWORD \"\n    + \"SYSRES_CONST_ACTION_TYPE_EXPORT_WITH_LOCK \"\n    + \"SYSRES_CONST_ACTION_TYPE_EXPORT_WITHOUT_LOCK \"\n    + \"SYSRES_CONST_ACTION_TYPE_IMPORT_WITH_UNLOCK \"\n    + \"SYSRES_CONST_ACTION_TYPE_IMPORT_WITHOUT_UNLOCK \"\n    + \"SYSRES_CONST_ACTION_TYPE_LIFE_CYCLE_STAGE \"\n    + \"SYSRES_CONST_ACTION_TYPE_LOCK \"\n    + \"SYSRES_CONST_ACTION_TYPE_LOCK_FOR_SERVER \"\n    + \"SYSRES_CONST_ACTION_TYPE_LOCK_MODIFY \"\n    + \"SYSRES_CONST_ACTION_TYPE_MARK_AS_READED \"\n    + \"SYSRES_CONST_ACTION_TYPE_MARK_AS_UNREADED \"\n    + \"SYSRES_CONST_ACTION_TYPE_MODIFY \"\n    + \"SYSRES_CONST_ACTION_TYPE_MODIFY_CARD \"\n    + \"SYSRES_CONST_ACTION_TYPE_MOVE_TO_ARCHIVE \"\n    + \"SYSRES_CONST_ACTION_TYPE_OFF_ENCRYPTION \"\n    + \"SYSRES_CONST_ACTION_TYPE_PASSWORD_CHANGE \"\n    + \"SYSRES_CONST_ACTION_TYPE_PERFORM \"\n    + \"SYSRES_CONST_ACTION_TYPE_RECOVER_FROM_LOCAL_COPY \"\n    + \"SYSRES_CONST_ACTION_TYPE_RESTART \"\n    + \"SYSRES_CONST_ACTION_TYPE_RESTORE_FROM_ARCHIVE \"\n    + \"SYSRES_CONST_ACTION_TYPE_REVISION \"\n    + \"SYSRES_CONST_ACTION_TYPE_SEND_BY_MAIL \"\n    + \"SYSRES_CONST_ACTION_TYPE_SIGN \"\n    + \"SYSRES_CONST_ACTION_TYPE_START \"\n    + \"SYSRES_CONST_ACTION_TYPE_UNLOCK \"\n    + \"SYSRES_CONST_ACTION_TYPE_UNLOCK_FROM_SERVER \"\n    + \"SYSRES_CONST_ACTION_TYPE_VERSION_STATE \"\n    + \"SYSRES_CONST_ACTION_TYPE_VERSION_VISIBILITY \"\n    + \"SYSRES_CONST_ACTION_TYPE_VIEW \"\n    + \"SYSRES_CONST_ACTION_TYPE_VIEW_SHADOW_COPY \"\n    + \"SYSRES_CONST_ACTION_TYPE_WORKFLOW_DESCRIPTION_MODIFY \"\n    + \"SYSRES_CONST_ACTION_TYPE_WRITE_HISTORY \"\n    + \"SYSRES_CONST_ACTIVE_VERSION_STATE_PICK_VALUE \"\n    + \"SYSRES_CONST_ADD_REFERENCE_MODE_NAME \"\n    + \"SYSRES_CONST_ADDITION_REQUISITE_CODE \"\n    + \"SYSRES_CONST_ADDITIONAL_PARAMS_REQUISITE_CODE \"\n    + \"SYSRES_CONST_ADITIONAL_JOB_END_DATE_REQUISITE_NAME \"\n    + \"SYSRES_CONST_ADITIONAL_JOB_READ_REQUISITE_NAME \"\n    + \"SYSRES_CONST_ADITIONAL_JOB_START_DATE_REQUISITE_NAME \"\n    + \"SYSRES_CONST_ADITIONAL_JOB_STATE_REQUISITE_NAME \"\n    + \"SYSRES_CONST_ADMINISTRATION_HISTORY_ADDING_USER_TO_GROUP_ACTION \"\n    + \"SYSRES_CONST_ADMINISTRATION_HISTORY_ADDING_USER_TO_GROUP_ACTION_CODE \"\n    + \"SYSRES_CONST_ADMINISTRATION_HISTORY_CREATION_COMP_ACTION \"\n    + \"SYSRES_CONST_ADMINISTRATION_HISTORY_CREATION_COMP_ACTION_CODE \"\n    + \"SYSRES_CONST_ADMINISTRATION_HISTORY_CREATION_GROUP_ACTION \"\n    + \"SYSRES_CONST_ADMINISTRATION_HISTORY_CREATION_GROUP_ACTION_CODE \"\n    + \"SYSRES_CONST_ADMINISTRATION_HISTORY_CREATION_USER_ACTION \"\n    + \"SYSRES_CONST_ADMINISTRATION_HISTORY_CREATION_USER_ACTION_CODE \"\n    + \"SYSRES_CONST_ADMINISTRATION_HISTORY_DATABASE_USER_CREATION \"\n    + \"SYSRES_CONST_ADMINISTRATION_HISTORY_DATABASE_USER_CREATION_ACTION \"\n    + \"SYSRES_CONST_ADMINISTRATION_HISTORY_DATABASE_USER_DELETION \"\n    + \"SYSRES_CONST_ADMINISTRATION_HISTORY_DATABASE_USER_DELETION_ACTION \"\n    + \"SYSRES_CONST_ADMINISTRATION_HISTORY_DELETION_COMP_ACTION \"\n    + \"SYSRES_CONST_ADMINISTRATION_HISTORY_DELETION_COMP_ACTION_CODE \"\n    + \"SYSRES_CONST_ADMINISTRATION_HISTORY_DELETION_GROUP_ACTION \"\n    + \"SYSRES_CONST_ADMINISTRATION_HISTORY_DELETION_GROUP_ACTION_CODE \"\n    + \"SYSRES_CONST_ADMINISTRATION_HISTORY_DELETION_USER_ACTION \"\n    + \"SYSRES_CONST_ADMINISTRATION_HISTORY_DELETION_USER_ACTION_CODE \"\n    + \"SYSRES_CONST_ADMINISTRATION_HISTORY_DELETION_USER_FROM_GROUP_ACTION \"\n    + \"SYSRES_CONST_ADMINISTRATION_HISTORY_DELETION_USER_FROM_GROUP_ACTION_CODE \"\n    + \"SYSRES_CONST_ADMINISTRATION_HISTORY_GRANTING_FILTERER_ACTION \"\n    + \"SYSRES_CONST_ADMINISTRATION_HISTORY_GRANTING_FILTERER_ACTION_CODE \"\n    + \"SYSRES_CONST_ADMINISTRATION_HISTORY_GRANTING_FILTERER_RESTRICTION_ACTION \"\n    + \"SYSRES_CONST_ADMINISTRATION_HISTORY_GRANTING_FILTERER_RESTRICTION_ACTION_CODE \"\n    + \"SYSRES_CONST_ADMINISTRATION_HISTORY_GRANTING_PRIVILEGE_ACTION \"\n    + \"SYSRES_CONST_ADMINISTRATION_HISTORY_GRANTING_PRIVILEGE_ACTION_CODE \"\n    + \"SYSRES_CONST_ADMINISTRATION_HISTORY_GRANTING_RIGHTS_ACTION \"\n    + \"SYSRES_CONST_ADMINISTRATION_HISTORY_GRANTING_RIGHTS_ACTION_CODE \"\n    + \"SYSRES_CONST_ADMINISTRATION_HISTORY_IS_MAIN_SERVER_CHANGED_ACTION \"\n    + \"SYSRES_CONST_ADMINISTRATION_HISTORY_IS_MAIN_SERVER_CHANGED_ACTION_CODE \"\n    + \"SYSRES_CONST_ADMINISTRATION_HISTORY_IS_PUBLIC_CHANGED_ACTION \"\n    + \"SYSRES_CONST_ADMINISTRATION_HISTORY_IS_PUBLIC_CHANGED_ACTION_CODE \"\n    + \"SYSRES_CONST_ADMINISTRATION_HISTORY_REMOVING_FILTERER_ACTION \"\n    + \"SYSRES_CONST_ADMINISTRATION_HISTORY_REMOVING_FILTERER_ACTION_CODE \"\n    + \"SYSRES_CONST_ADMINISTRATION_HISTORY_REMOVING_FILTERER_RESTRICTION_ACTION \"\n    + \"SYSRES_CONST_ADMINISTRATION_HISTORY_REMOVING_FILTERER_RESTRICTION_ACTION_CODE \"\n    + \"SYSRES_CONST_ADMINISTRATION_HISTORY_REMOVING_PRIVILEGE_ACTION \"\n    + \"SYSRES_CONST_ADMINISTRATION_HISTORY_REMOVING_PRIVILEGE_ACTION_CODE \"\n    + \"SYSRES_CONST_ADMINISTRATION_HISTORY_REMOVING_RIGHTS_ACTION \"\n    + \"SYSRES_CONST_ADMINISTRATION_HISTORY_REMOVING_RIGHTS_ACTION_CODE \"\n    + \"SYSRES_CONST_ADMINISTRATION_HISTORY_SERVER_LOGIN_CREATION \"\n    + \"SYSRES_CONST_ADMINISTRATION_HISTORY_SERVER_LOGIN_CREATION_ACTION \"\n    + \"SYSRES_CONST_ADMINISTRATION_HISTORY_SERVER_LOGIN_DELETION \"\n    + \"SYSRES_CONST_ADMINISTRATION_HISTORY_SERVER_LOGIN_DELETION_ACTION \"\n    + \"SYSRES_CONST_ADMINISTRATION_HISTORY_UPDATING_CATEGORY_ACTION \"\n    + \"SYSRES_CONST_ADMINISTRATION_HISTORY_UPDATING_CATEGORY_ACTION_CODE \"\n    + \"SYSRES_CONST_ADMINISTRATION_HISTORY_UPDATING_COMP_TITLE_ACTION \"\n    + \"SYSRES_CONST_ADMINISTRATION_HISTORY_UPDATING_COMP_TITLE_ACTION_CODE \"\n    + \"SYSRES_CONST_ADMINISTRATION_HISTORY_UPDATING_FULL_NAME_ACTION \"\n    + \"SYSRES_CONST_ADMINISTRATION_HISTORY_UPDATING_FULL_NAME_ACTION_CODE \"\n    + \"SYSRES_CONST_ADMINISTRATION_HISTORY_UPDATING_GROUP_ACTION \"\n    + \"SYSRES_CONST_ADMINISTRATION_HISTORY_UPDATING_GROUP_ACTION_CODE \"\n    + \"SYSRES_CONST_ADMINISTRATION_HISTORY_UPDATING_PARENT_GROUP_ACTION \"\n    + \"SYSRES_CONST_ADMINISTRATION_HISTORY_UPDATING_PARENT_GROUP_ACTION_CODE \"\n    + \"SYSRES_CONST_ADMINISTRATION_HISTORY_UPDATING_USER_AUTH_TYPE_ACTION \"\n    + \"SYSRES_CONST_ADMINISTRATION_HISTORY_UPDATING_USER_AUTH_TYPE_ACTION_CODE \"\n    + \"SYSRES_CONST_ADMINISTRATION_HISTORY_UPDATING_USER_LOGIN_ACTION \"\n    + \"SYSRES_CONST_ADMINISTRATION_HISTORY_UPDATING_USER_LOGIN_ACTION_CODE \"\n    + \"SYSRES_CONST_ADMINISTRATION_HISTORY_UPDATING_USER_STATUS_ACTION \"\n    + \"SYSRES_CONST_ADMINISTRATION_HISTORY_UPDATING_USER_STATUS_ACTION_CODE \"\n    + \"SYSRES_CONST_ADMINISTRATION_HISTORY_USER_PASSWORD_CHANGE \"\n    + \"SYSRES_CONST_ADMINISTRATION_HISTORY_USER_PASSWORD_CHANGE_ACTION \"\n    + \"SYSRES_CONST_ALL_ACCEPT_CONDITION_RUS \"\n    + \"SYSRES_CONST_ALL_USERS_GROUP \"\n    + \"SYSRES_CONST_ALL_USERS_GROUP_NAME \"\n    + \"SYSRES_CONST_ALL_USERS_SERVER_GROUP_NAME \"\n    + \"SYSRES_CONST_ALLOWED_ACCESS_TYPE_CODE \"\n    + \"SYSRES_CONST_ALLOWED_ACCESS_TYPE_NAME \"\n    + \"SYSRES_CONST_APP_VIEWER_TYPE_REQUISITE_CODE \"\n    + \"SYSRES_CONST_APPROVING_SIGNATURE_NAME \"\n    + \"SYSRES_CONST_APPROVING_SIGNATURE_REQUISITE_CODE \"\n    + \"SYSRES_CONST_ASSISTANT_SUBSTITUE_TYPE \"\n    + \"SYSRES_CONST_ASSISTANT_SUBSTITUE_TYPE_CODE \"\n    + \"SYSRES_CONST_ATTACH_TYPE_COMPONENT_TOKEN \"\n    + \"SYSRES_CONST_ATTACH_TYPE_DOC \"\n    + \"SYSRES_CONST_ATTACH_TYPE_EDOC \"\n    + \"SYSRES_CONST_ATTACH_TYPE_FOLDER \"\n    + \"SYSRES_CONST_ATTACH_TYPE_JOB \"\n    + \"SYSRES_CONST_ATTACH_TYPE_REFERENCE \"\n    + \"SYSRES_CONST_ATTACH_TYPE_TASK \"\n    + \"SYSRES_CONST_AUTH_ENCODED_PASSWORD \"\n    + \"SYSRES_CONST_AUTH_ENCODED_PASSWORD_CODE \"\n    + \"SYSRES_CONST_AUTH_NOVELL \"\n    + \"SYSRES_CONST_AUTH_PASSWORD \"\n    + \"SYSRES_CONST_AUTH_PASSWORD_CODE \"\n    + \"SYSRES_CONST_AUTH_WINDOWS \"\n    + \"SYSRES_CONST_AUTHENTICATING_SIGNATURE_NAME \"\n    + \"SYSRES_CONST_AUTHENTICATING_SIGNATURE_REQUISITE_CODE \"\n    + \"SYSRES_CONST_AUTO_ENUM_METHOD_FLAG \"\n    + \"SYSRES_CONST_AUTO_NUMERATION_CODE \"\n    + \"SYSRES_CONST_AUTO_STRONG_ENUM_METHOD_FLAG \"\n    + \"SYSRES_CONST_AUTOTEXT_NAME_REQUISITE_CODE \"\n    + \"SYSRES_CONST_AUTOTEXT_TEXT_REQUISITE_CODE \"\n    + \"SYSRES_CONST_AUTOTEXT_USAGE_ALL \"\n    + \"SYSRES_CONST_AUTOTEXT_USAGE_ALL_CODE \"\n    + \"SYSRES_CONST_AUTOTEXT_USAGE_SIGN \"\n    + \"SYSRES_CONST_AUTOTEXT_USAGE_SIGN_CODE \"\n    + \"SYSRES_CONST_AUTOTEXT_USAGE_WORK \"\n    + \"SYSRES_CONST_AUTOTEXT_USAGE_WORK_CODE \"\n    + \"SYSRES_CONST_AUTOTEXT_USE_ANYWHERE_CODE \"\n    + \"SYSRES_CONST_AUTOTEXT_USE_ON_SIGNING_CODE \"\n    + \"SYSRES_CONST_AUTOTEXT_USE_ON_WORK_CODE \"\n    + \"SYSRES_CONST_BEGIN_DATE_REQUISITE_CODE \"\n    + \"SYSRES_CONST_BLACK_LIFE_CYCLE_STAGE_FONT_COLOR \"\n    + \"SYSRES_CONST_BLUE_LIFE_CYCLE_STAGE_FONT_COLOR \"\n    + \"SYSRES_CONST_BTN_PART \"\n    + \"SYSRES_CONST_CALCULATED_ROLE_TYPE_CODE \"\n    + \"SYSRES_CONST_CALL_TYPE_VARIABLE_BUTTON_VALUE \"\n    + \"SYSRES_CONST_CALL_TYPE_VARIABLE_PROGRAM_VALUE \"\n    + \"SYSRES_CONST_CANCEL_MESSAGE_FUNCTION_RESULT \"\n    + \"SYSRES_CONST_CARD_PART \"\n    + \"SYSRES_CONST_CARD_REFERENCE_MODE_NAME \"\n    + \"SYSRES_CONST_CERTIFICATE_TYPE_REQUISITE_ENCRYPT_VALUE \"\n    + \"SYSRES_CONST_CERTIFICATE_TYPE_REQUISITE_SIGN_AND_ENCRYPT_VALUE \"\n    + \"SYSRES_CONST_CERTIFICATE_TYPE_REQUISITE_SIGN_VALUE \"\n    + \"SYSRES_CONST_CHECK_PARAM_VALUE_DATE_PARAM_TYPE \"\n    + \"SYSRES_CONST_CHECK_PARAM_VALUE_FLOAT_PARAM_TYPE \"\n    + \"SYSRES_CONST_CHECK_PARAM_VALUE_INTEGER_PARAM_TYPE \"\n    + \"SYSRES_CONST_CHECK_PARAM_VALUE_PICK_PARAM_TYPE \"\n    + \"SYSRES_CONST_CHECK_PARAM_VALUE_REEFRENCE_PARAM_TYPE \"\n    + \"SYSRES_CONST_CLOSED_RECORD_FLAG_VALUE_FEMININE \"\n    + \"SYSRES_CONST_CLOSED_RECORD_FLAG_VALUE_MASCULINE \"\n    + \"SYSRES_CONST_CODE_COMPONENT_TYPE_ADMIN \"\n    + \"SYSRES_CONST_CODE_COMPONENT_TYPE_DEVELOPER \"\n    + \"SYSRES_CONST_CODE_COMPONENT_TYPE_DOCS \"\n    + \"SYSRES_CONST_CODE_COMPONENT_TYPE_EDOC_CARDS \"\n    + \"SYSRES_CONST_CODE_COMPONENT_TYPE_EXTERNAL_EXECUTABLE \"\n    + \"SYSRES_CONST_CODE_COMPONENT_TYPE_OTHER \"\n    + \"SYSRES_CONST_CODE_COMPONENT_TYPE_REFERENCE \"\n    + \"SYSRES_CONST_CODE_COMPONENT_TYPE_REPORT \"\n    + \"SYSRES_CONST_CODE_COMPONENT_TYPE_SCRIPT \"\n    + \"SYSRES_CONST_CODE_COMPONENT_TYPE_URL \"\n    + \"SYSRES_CONST_CODE_REQUISITE_ACCESS \"\n    + \"SYSRES_CONST_CODE_REQUISITE_CODE \"\n    + \"SYSRES_CONST_CODE_REQUISITE_COMPONENT \"\n    + \"SYSRES_CONST_CODE_REQUISITE_DESCRIPTION \"\n    + \"SYSRES_CONST_CODE_REQUISITE_EXCLUDE_COMPONENT \"\n    + \"SYSRES_CONST_CODE_REQUISITE_RECORD \"\n    + \"SYSRES_CONST_COMMENT_REQ_CODE \"\n    + \"SYSRES_CONST_COMMON_SETTINGS_REQUISITE_CODE \"\n    + \"SYSRES_CONST_COMP_CODE_GRD \"\n    + \"SYSRES_CONST_COMPONENT_GROUP_TYPE_REQUISITE_CODE \"\n    + \"SYSRES_CONST_COMPONENT_TYPE_ADMIN_COMPONENTS \"\n    + \"SYSRES_CONST_COMPONENT_TYPE_DEVELOPER_COMPONENTS \"\n    + \"SYSRES_CONST_COMPONENT_TYPE_DOCS \"\n    + \"SYSRES_CONST_COMPONENT_TYPE_EDOC_CARDS \"\n    + \"SYSRES_CONST_COMPONENT_TYPE_EDOCS \"\n    + \"SYSRES_CONST_COMPONENT_TYPE_EXTERNAL_EXECUTABLE \"\n    + \"SYSRES_CONST_COMPONENT_TYPE_OTHER \"\n    + \"SYSRES_CONST_COMPONENT_TYPE_REFERENCE_TYPES \"\n    + \"SYSRES_CONST_COMPONENT_TYPE_REFERENCES \"\n    + \"SYSRES_CONST_COMPONENT_TYPE_REPORTS \"\n    + \"SYSRES_CONST_COMPONENT_TYPE_SCRIPTS \"\n    + \"SYSRES_CONST_COMPONENT_TYPE_URL \"\n    + \"SYSRES_CONST_COMPONENTS_REMOTE_SERVERS_VIEW_CODE \"\n    + \"SYSRES_CONST_CONDITION_BLOCK_DESCRIPTION \"\n    + \"SYSRES_CONST_CONST_FIRM_STATUS_COMMON \"\n    + \"SYSRES_CONST_CONST_FIRM_STATUS_INDIVIDUAL \"\n    + \"SYSRES_CONST_CONST_NEGATIVE_VALUE \"\n    + \"SYSRES_CONST_CONST_POSITIVE_VALUE \"\n    + \"SYSRES_CONST_CONST_SERVER_STATUS_DONT_REPLICATE \"\n    + \"SYSRES_CONST_CONST_SERVER_STATUS_REPLICATE \"\n    + \"SYSRES_CONST_CONTENTS_REQUISITE_CODE \"\n    + \"SYSRES_CONST_DATA_TYPE_BOOLEAN \"\n    + \"SYSRES_CONST_DATA_TYPE_DATE \"\n    + \"SYSRES_CONST_DATA_TYPE_FLOAT \"\n    + \"SYSRES_CONST_DATA_TYPE_INTEGER \"\n    + \"SYSRES_CONST_DATA_TYPE_PICK \"\n    + \"SYSRES_CONST_DATA_TYPE_REFERENCE \"\n    + \"SYSRES_CONST_DATA_TYPE_STRING \"\n    + \"SYSRES_CONST_DATA_TYPE_TEXT \"\n    + \"SYSRES_CONST_DATA_TYPE_VARIANT \"\n    + \"SYSRES_CONST_DATE_CLOSE_REQ_CODE \"\n    + \"SYSRES_CONST_DATE_FORMAT_DATE_ONLY_CHAR \"\n    + \"SYSRES_CONST_DATE_OPEN_REQ_CODE \"\n    + \"SYSRES_CONST_DATE_REQUISITE \"\n    + \"SYSRES_CONST_DATE_REQUISITE_CODE \"\n    + \"SYSRES_CONST_DATE_REQUISITE_NAME \"\n    + \"SYSRES_CONST_DATE_REQUISITE_TYPE \"\n    + \"SYSRES_CONST_DATE_TYPE_CHAR \"\n    + \"SYSRES_CONST_DATETIME_FORMAT_VALUE \"\n    + \"SYSRES_CONST_DEA_ACCESS_RIGHTS_ACTION_CODE \"\n    + \"SYSRES_CONST_DESCRIPTION_LOCALIZE_ID_REQUISITE_CODE \"\n    + \"SYSRES_CONST_DESCRIPTION_REQUISITE_CODE \"\n    + \"SYSRES_CONST_DET1_PART \"\n    + \"SYSRES_CONST_DET2_PART \"\n    + \"SYSRES_CONST_DET3_PART \"\n    + \"SYSRES_CONST_DET4_PART \"\n    + \"SYSRES_CONST_DET5_PART \"\n    + \"SYSRES_CONST_DET6_PART \"\n    + \"SYSRES_CONST_DETAIL_DATASET_KEY_REQUISITE_CODE \"\n    + \"SYSRES_CONST_DETAIL_PICK_REQUISITE_CODE \"\n    + \"SYSRES_CONST_DETAIL_REQ_CODE \"\n    + \"SYSRES_CONST_DO_NOT_USE_ACCESS_TYPE_CODE \"\n    + \"SYSRES_CONST_DO_NOT_USE_ACCESS_TYPE_NAME \"\n    + \"SYSRES_CONST_DO_NOT_USE_ON_VIEW_ACCESS_TYPE_CODE \"\n    + \"SYSRES_CONST_DO_NOT_USE_ON_VIEW_ACCESS_TYPE_NAME \"\n    + \"SYSRES_CONST_DOCUMENT_STORAGES_CODE \"\n    + \"SYSRES_CONST_DOCUMENT_TEMPLATES_TYPE_NAME \"\n    + \"SYSRES_CONST_DOUBLE_REQUISITE_CODE \"\n    + \"SYSRES_CONST_EDITOR_CLOSE_FILE_OBSERV_TYPE_CODE \"\n    + \"SYSRES_CONST_EDITOR_CLOSE_PROCESS_OBSERV_TYPE_CODE \"\n    + \"SYSRES_CONST_EDITOR_TYPE_REQUISITE_CODE \"\n    + \"SYSRES_CONST_EDITORS_APPLICATION_NAME_REQUISITE_CODE \"\n    + \"SYSRES_CONST_EDITORS_CREATE_SEVERAL_PROCESSES_REQUISITE_CODE \"\n    + \"SYSRES_CONST_EDITORS_EXTENSION_REQUISITE_CODE \"\n    + \"SYSRES_CONST_EDITORS_OBSERVER_BY_PROCESS_TYPE \"\n    + \"SYSRES_CONST_EDITORS_REFERENCE_CODE \"\n    + \"SYSRES_CONST_EDITORS_REPLACE_SPEC_CHARS_REQUISITE_CODE \"\n    + \"SYSRES_CONST_EDITORS_USE_PLUGINS_REQUISITE_CODE \"\n    + \"SYSRES_CONST_EDITORS_VIEW_DOCUMENT_OPENED_TO_EDIT_CODE \"\n    + \"SYSRES_CONST_EDOC_CARD_TYPE_REQUISITE_CODE \"\n    + \"SYSRES_CONST_EDOC_CARD_TYPES_LINK_REQUISITE_CODE \"\n    + \"SYSRES_CONST_EDOC_CERTIFICATE_AND_PASSWORD_ENCODE_CODE \"\n    + \"SYSRES_CONST_EDOC_CERTIFICATE_ENCODE_CODE \"\n    + \"SYSRES_CONST_EDOC_DATE_REQUISITE_CODE \"\n    + \"SYSRES_CONST_EDOC_KIND_REFERENCE_CODE \"\n    + \"SYSRES_CONST_EDOC_KINDS_BY_TEMPLATE_ACTION_CODE \"\n    + \"SYSRES_CONST_EDOC_MANAGE_ACCESS_CODE \"\n    + \"SYSRES_CONST_EDOC_NONE_ENCODE_CODE \"\n    + \"SYSRES_CONST_EDOC_NUMBER_REQUISITE_CODE \"\n    + \"SYSRES_CONST_EDOC_PASSWORD_ENCODE_CODE \"\n    + \"SYSRES_CONST_EDOC_READONLY_ACCESS_CODE \"\n    + \"SYSRES_CONST_EDOC_SHELL_LIFE_TYPE_VIEW_VALUE \"\n    + \"SYSRES_CONST_EDOC_SIZE_RESTRICTION_PRIORITY_REQUISITE_CODE \"\n    + \"SYSRES_CONST_EDOC_STORAGE_CHECK_ACCESS_RIGHTS_REQUISITE_CODE \"\n    + \"SYSRES_CONST_EDOC_STORAGE_COMPUTER_NAME_REQUISITE_CODE \"\n    + \"SYSRES_CONST_EDOC_STORAGE_DATABASE_NAME_REQUISITE_CODE \"\n    + \"SYSRES_CONST_EDOC_STORAGE_EDIT_IN_STORAGE_REQUISITE_CODE \"\n    + \"SYSRES_CONST_EDOC_STORAGE_LOCAL_PATH_REQUISITE_CODE \"\n    + \"SYSRES_CONST_EDOC_STORAGE_SHARED_SOURCE_NAME_REQUISITE_CODE \"\n    + \"SYSRES_CONST_EDOC_TEMPLATE_REQUISITE_CODE \"\n    + \"SYSRES_CONST_EDOC_TYPES_REFERENCE_CODE \"\n    + \"SYSRES_CONST_EDOC_VERSION_ACTIVE_STAGE_CODE \"\n    + \"SYSRES_CONST_EDOC_VERSION_DESIGN_STAGE_CODE \"\n    + \"SYSRES_CONST_EDOC_VERSION_OBSOLETE_STAGE_CODE \"\n    + \"SYSRES_CONST_EDOC_WRITE_ACCES_CODE \"\n    + \"SYSRES_CONST_EDOCUMENT_CARD_REQUISITES_REFERENCE_CODE_SELECTED_REQUISITE \"\n    + \"SYSRES_CONST_ENCODE_CERTIFICATE_TYPE_CODE \"\n    + \"SYSRES_CONST_END_DATE_REQUISITE_CODE \"\n    + \"SYSRES_CONST_ENUMERATION_TYPE_REQUISITE_CODE \"\n    + \"SYSRES_CONST_EXECUTE_ACCESS_RIGHTS_TYPE_CODE \"\n    + \"SYSRES_CONST_EXECUTIVE_FILE_STORAGE_TYPE \"\n    + \"SYSRES_CONST_EXIST_CONST \"\n    + \"SYSRES_CONST_EXIST_VALUE \"\n    + \"SYSRES_CONST_EXPORT_LOCK_TYPE_ASK \"\n    + \"SYSRES_CONST_EXPORT_LOCK_TYPE_WITH_LOCK \"\n    + \"SYSRES_CONST_EXPORT_LOCK_TYPE_WITHOUT_LOCK \"\n    + \"SYSRES_CONST_EXPORT_VERSION_TYPE_ASK \"\n    + \"SYSRES_CONST_EXPORT_VERSION_TYPE_LAST \"\n    + \"SYSRES_CONST_EXPORT_VERSION_TYPE_LAST_ACTIVE \"\n    + \"SYSRES_CONST_EXTENSION_REQUISITE_CODE \"\n    + \"SYSRES_CONST_FILTER_NAME_REQUISITE_CODE \"\n    + \"SYSRES_CONST_FILTER_REQUISITE_CODE \"\n    + \"SYSRES_CONST_FILTER_TYPE_COMMON_CODE \"\n    + \"SYSRES_CONST_FILTER_TYPE_COMMON_NAME \"\n    + \"SYSRES_CONST_FILTER_TYPE_USER_CODE \"\n    + \"SYSRES_CONST_FILTER_TYPE_USER_NAME \"\n    + \"SYSRES_CONST_FILTER_VALUE_REQUISITE_NAME \"\n    + \"SYSRES_CONST_FLOAT_NUMBER_FORMAT_CHAR \"\n    + \"SYSRES_CONST_FLOAT_REQUISITE_TYPE \"\n    + \"SYSRES_CONST_FOLDER_AUTHOR_VALUE \"\n    + \"SYSRES_CONST_FOLDER_KIND_ANY_OBJECTS \"\n    + \"SYSRES_CONST_FOLDER_KIND_COMPONENTS \"\n    + \"SYSRES_CONST_FOLDER_KIND_EDOCS \"\n    + \"SYSRES_CONST_FOLDER_KIND_JOBS \"\n    + \"SYSRES_CONST_FOLDER_KIND_TASKS \"\n    + \"SYSRES_CONST_FOLDER_TYPE_COMMON \"\n    + \"SYSRES_CONST_FOLDER_TYPE_COMPONENT \"\n    + \"SYSRES_CONST_FOLDER_TYPE_FAVORITES \"\n    + \"SYSRES_CONST_FOLDER_TYPE_INBOX \"\n    + \"SYSRES_CONST_FOLDER_TYPE_OUTBOX \"\n    + \"SYSRES_CONST_FOLDER_TYPE_QUICK_LAUNCH \"\n    + \"SYSRES_CONST_FOLDER_TYPE_SEARCH \"\n    + \"SYSRES_CONST_FOLDER_TYPE_SHORTCUTS \"\n    + \"SYSRES_CONST_FOLDER_TYPE_USER \"\n    + \"SYSRES_CONST_FROM_DICTIONARY_ENUM_METHOD_FLAG \"\n    + \"SYSRES_CONST_FULL_SUBSTITUTE_TYPE \"\n    + \"SYSRES_CONST_FULL_SUBSTITUTE_TYPE_CODE \"\n    + \"SYSRES_CONST_FUNCTION_CANCEL_RESULT \"\n    + \"SYSRES_CONST_FUNCTION_CATEGORY_SYSTEM \"\n    + \"SYSRES_CONST_FUNCTION_CATEGORY_USER \"\n    + \"SYSRES_CONST_FUNCTION_FAILURE_RESULT \"\n    + \"SYSRES_CONST_FUNCTION_SAVE_RESULT \"\n    + \"SYSRES_CONST_GENERATED_REQUISITE \"\n    + \"SYSRES_CONST_GREEN_LIFE_CYCLE_STAGE_FONT_COLOR \"\n    + \"SYSRES_CONST_GROUP_ACCOUNT_TYPE_VALUE_CODE \"\n    + \"SYSRES_CONST_GROUP_CATEGORY_NORMAL_CODE \"\n    + \"SYSRES_CONST_GROUP_CATEGORY_NORMAL_NAME \"\n    + \"SYSRES_CONST_GROUP_CATEGORY_SERVICE_CODE \"\n    + \"SYSRES_CONST_GROUP_CATEGORY_SERVICE_NAME \"\n    + \"SYSRES_CONST_GROUP_COMMON_CATEGORY_FIELD_VALUE \"\n    + \"SYSRES_CONST_GROUP_FULL_NAME_REQUISITE_CODE \"\n    + \"SYSRES_CONST_GROUP_NAME_REQUISITE_CODE \"\n    + \"SYSRES_CONST_GROUP_RIGHTS_T_REQUISITE_CODE \"\n    + \"SYSRES_CONST_GROUP_SERVER_CODES_REQUISITE_CODE \"\n    + \"SYSRES_CONST_GROUP_SERVER_NAME_REQUISITE_CODE \"\n    + \"SYSRES_CONST_GROUP_SERVICE_CATEGORY_FIELD_VALUE \"\n    + \"SYSRES_CONST_GROUP_USER_REQUISITE_CODE \"\n    + \"SYSRES_CONST_GROUPS_REFERENCE_CODE \"\n    + \"SYSRES_CONST_GROUPS_REQUISITE_CODE \"\n    + \"SYSRES_CONST_HIDDEN_MODE_NAME \"\n    + \"SYSRES_CONST_HIGH_LVL_REQUISITE_CODE \"\n    + \"SYSRES_CONST_HISTORY_ACTION_CREATE_CODE \"\n    + \"SYSRES_CONST_HISTORY_ACTION_DELETE_CODE \"\n    + \"SYSRES_CONST_HISTORY_ACTION_EDIT_CODE \"\n    + \"SYSRES_CONST_HOUR_CHAR \"\n    + \"SYSRES_CONST_ID_REQUISITE_CODE \"\n    + \"SYSRES_CONST_IDSPS_REQUISITE_CODE \"\n    + \"SYSRES_CONST_IMAGE_MODE_COLOR \"\n    + \"SYSRES_CONST_IMAGE_MODE_GREYSCALE \"\n    + \"SYSRES_CONST_IMAGE_MODE_MONOCHROME \"\n    + \"SYSRES_CONST_IMPORTANCE_HIGH \"\n    + \"SYSRES_CONST_IMPORTANCE_LOW \"\n    + \"SYSRES_CONST_IMPORTANCE_NORMAL \"\n    + \"SYSRES_CONST_IN_DESIGN_VERSION_STATE_PICK_VALUE \"\n    + \"SYSRES_CONST_INCOMING_WORK_RULE_TYPE_CODE \"\n    + \"SYSRES_CONST_INT_REQUISITE \"\n    + \"SYSRES_CONST_INT_REQUISITE_TYPE \"\n    + \"SYSRES_CONST_INTEGER_NUMBER_FORMAT_CHAR \"\n    + \"SYSRES_CONST_INTEGER_TYPE_CHAR \"\n    + \"SYSRES_CONST_IS_GENERATED_REQUISITE_NEGATIVE_VALUE \"\n    + \"SYSRES_CONST_IS_PUBLIC_ROLE_REQUISITE_CODE \"\n    + \"SYSRES_CONST_IS_REMOTE_USER_NEGATIVE_VALUE \"\n    + \"SYSRES_CONST_IS_REMOTE_USER_POSITIVE_VALUE \"\n    + \"SYSRES_CONST_IS_STORED_REQUISITE_NEGATIVE_VALUE \"\n    + \"SYSRES_CONST_IS_STORED_REQUISITE_STORED_VALUE \"\n    + \"SYSRES_CONST_ITALIC_LIFE_CYCLE_STAGE_DRAW_STYLE \"\n    + \"SYSRES_CONST_JOB_BLOCK_DESCRIPTION \"\n    + \"SYSRES_CONST_JOB_KIND_CONTROL_JOB \"\n    + \"SYSRES_CONST_JOB_KIND_JOB \"\n    + \"SYSRES_CONST_JOB_KIND_NOTICE \"\n    + \"SYSRES_CONST_JOB_STATE_ABORTED \"\n    + \"SYSRES_CONST_JOB_STATE_COMPLETE \"\n    + \"SYSRES_CONST_JOB_STATE_WORKING \"\n    + \"SYSRES_CONST_KIND_REQUISITE_CODE \"\n    + \"SYSRES_CONST_KIND_REQUISITE_NAME \"\n    + \"SYSRES_CONST_KINDS_CREATE_SHADOW_COPIES_REQUISITE_CODE \"\n    + \"SYSRES_CONST_KINDS_DEFAULT_EDOC_LIFE_STAGE_REQUISITE_CODE \"\n    + \"SYSRES_CONST_KINDS_EDOC_ALL_TEPLATES_ALLOWED_REQUISITE_CODE \"\n    + \"SYSRES_CONST_KINDS_EDOC_ALLOW_LIFE_CYCLE_STAGE_CHANGING_REQUISITE_CODE \"\n    + \"SYSRES_CONST_KINDS_EDOC_ALLOW_MULTIPLE_ACTIVE_VERSIONS_REQUISITE_CODE \"\n    + \"SYSRES_CONST_KINDS_EDOC_SHARE_ACCES_RIGHTS_BY_DEFAULT_CODE \"\n    + \"SYSRES_CONST_KINDS_EDOC_TEMPLATE_REQUISITE_CODE \"\n    + \"SYSRES_CONST_KINDS_EDOC_TYPE_REQUISITE_CODE \"\n    + \"SYSRES_CONST_KINDS_SIGNERS_REQUISITES_CODE \"\n    + \"SYSRES_CONST_KOD_INPUT_TYPE \"\n    + \"SYSRES_CONST_LAST_UPDATE_DATE_REQUISITE_CODE \"\n    + \"SYSRES_CONST_LIFE_CYCLE_START_STAGE_REQUISITE_CODE \"\n    + \"SYSRES_CONST_LILAC_LIFE_CYCLE_STAGE_FONT_COLOR \"\n    + \"SYSRES_CONST_LINK_OBJECT_KIND_COMPONENT \"\n    + \"SYSRES_CONST_LINK_OBJECT_KIND_DOCUMENT \"\n    + \"SYSRES_CONST_LINK_OBJECT_KIND_EDOC \"\n    + \"SYSRES_CONST_LINK_OBJECT_KIND_FOLDER \"\n    + \"SYSRES_CONST_LINK_OBJECT_KIND_JOB \"\n    + \"SYSRES_CONST_LINK_OBJECT_KIND_REFERENCE \"\n    + \"SYSRES_CONST_LINK_OBJECT_KIND_TASK \"\n    + \"SYSRES_CONST_LINK_REF_TYPE_REQUISITE_CODE \"\n    + \"SYSRES_CONST_LIST_REFERENCE_MODE_NAME \"\n    + \"SYSRES_CONST_LOCALIZATION_DICTIONARY_MAIN_VIEW_CODE \"\n    + \"SYSRES_CONST_MAIN_VIEW_CODE \"\n    + \"SYSRES_CONST_MANUAL_ENUM_METHOD_FLAG \"\n    + \"SYSRES_CONST_MASTER_COMP_TYPE_REQUISITE_CODE \"\n    + \"SYSRES_CONST_MASTER_TABLE_REC_ID_REQUISITE_CODE \"\n    + \"SYSRES_CONST_MAXIMIZED_MODE_NAME \"\n    + \"SYSRES_CONST_ME_VALUE \"\n    + \"SYSRES_CONST_MESSAGE_ATTENTION_CAPTION \"\n    + \"SYSRES_CONST_MESSAGE_CONFIRMATION_CAPTION \"\n    + \"SYSRES_CONST_MESSAGE_ERROR_CAPTION \"\n    + \"SYSRES_CONST_MESSAGE_INFORMATION_CAPTION \"\n    + \"SYSRES_CONST_MINIMIZED_MODE_NAME \"\n    + \"SYSRES_CONST_MINUTE_CHAR \"\n    + \"SYSRES_CONST_MODULE_REQUISITE_CODE \"\n    + \"SYSRES_CONST_MONITORING_BLOCK_DESCRIPTION \"\n    + \"SYSRES_CONST_MONTH_FORMAT_VALUE \"\n    + \"SYSRES_CONST_NAME_LOCALIZE_ID_REQUISITE_CODE \"\n    + \"SYSRES_CONST_NAME_REQUISITE_CODE \"\n    + \"SYSRES_CONST_NAME_SINGULAR_REQUISITE_CODE \"\n    + \"SYSRES_CONST_NAMEAN_INPUT_TYPE \"\n    + \"SYSRES_CONST_NEGATIVE_PICK_VALUE \"\n    + \"SYSRES_CONST_NEGATIVE_VALUE \"\n    + \"SYSRES_CONST_NO \"\n    + \"SYSRES_CONST_NO_PICK_VALUE \"\n    + \"SYSRES_CONST_NO_SIGNATURE_REQUISITE_CODE \"\n    + \"SYSRES_CONST_NO_VALUE \"\n    + \"SYSRES_CONST_NONE_ACCESS_RIGHTS_TYPE_CODE \"\n    + \"SYSRES_CONST_NONOPERATING_RECORD_FLAG_VALUE \"\n    + \"SYSRES_CONST_NONOPERATING_RECORD_FLAG_VALUE_MASCULINE \"\n    + \"SYSRES_CONST_NORMAL_ACCESS_RIGHTS_TYPE_CODE \"\n    + \"SYSRES_CONST_NORMAL_LIFE_CYCLE_STAGE_DRAW_STYLE \"\n    + \"SYSRES_CONST_NORMAL_MODE_NAME \"\n    + \"SYSRES_CONST_NOT_ALLOWED_ACCESS_TYPE_CODE \"\n    + \"SYSRES_CONST_NOT_ALLOWED_ACCESS_TYPE_NAME \"\n    + \"SYSRES_CONST_NOTE_REQUISITE_CODE \"\n    + \"SYSRES_CONST_NOTICE_BLOCK_DESCRIPTION \"\n    + \"SYSRES_CONST_NUM_REQUISITE \"\n    + \"SYSRES_CONST_NUM_STR_REQUISITE_CODE \"\n    + \"SYSRES_CONST_NUMERATION_AUTO_NOT_STRONG \"\n    + \"SYSRES_CONST_NUMERATION_AUTO_STRONG \"\n    + \"SYSRES_CONST_NUMERATION_FROM_DICTONARY \"\n    + \"SYSRES_CONST_NUMERATION_MANUAL \"\n    + \"SYSRES_CONST_NUMERIC_TYPE_CHAR \"\n    + \"SYSRES_CONST_NUMREQ_REQUISITE_CODE \"\n    + \"SYSRES_CONST_OBSOLETE_VERSION_STATE_PICK_VALUE \"\n    + \"SYSRES_CONST_OPERATING_RECORD_FLAG_VALUE \"\n    + \"SYSRES_CONST_OPERATING_RECORD_FLAG_VALUE_CODE \"\n    + \"SYSRES_CONST_OPERATING_RECORD_FLAG_VALUE_FEMININE \"\n    + \"SYSRES_CONST_OPERATING_RECORD_FLAG_VALUE_MASCULINE \"\n    + \"SYSRES_CONST_OPTIONAL_FORM_COMP_REQCODE_PREFIX \"\n    + \"SYSRES_CONST_ORANGE_LIFE_CYCLE_STAGE_FONT_COLOR \"\n    + \"SYSRES_CONST_ORIGINALREF_REQUISITE_CODE \"\n    + \"SYSRES_CONST_OURFIRM_REF_CODE \"\n    + \"SYSRES_CONST_OURFIRM_REQUISITE_CODE \"\n    + \"SYSRES_CONST_OURFIRM_VAR \"\n    + \"SYSRES_CONST_OUTGOING_WORK_RULE_TYPE_CODE \"\n    + \"SYSRES_CONST_PICK_NEGATIVE_RESULT \"\n    + \"SYSRES_CONST_PICK_POSITIVE_RESULT \"\n    + \"SYSRES_CONST_PICK_REQUISITE \"\n    + \"SYSRES_CONST_PICK_REQUISITE_TYPE \"\n    + \"SYSRES_CONST_PICK_TYPE_CHAR \"\n    + \"SYSRES_CONST_PLAN_STATUS_REQUISITE_CODE \"\n    + \"SYSRES_CONST_PLATFORM_VERSION_COMMENT \"\n    + \"SYSRES_CONST_PLUGINS_SETTINGS_DESCRIPTION_REQUISITE_CODE \"\n    + \"SYSRES_CONST_POSITIVE_PICK_VALUE \"\n    + \"SYSRES_CONST_POWER_TO_CREATE_ACTION_CODE \"\n    + \"SYSRES_CONST_POWER_TO_SIGN_ACTION_CODE \"\n    + \"SYSRES_CONST_PRIORITY_REQUISITE_CODE \"\n    + \"SYSRES_CONST_QUALIFIED_TASK_TYPE \"\n    + \"SYSRES_CONST_QUALIFIED_TASK_TYPE_CODE \"\n    + \"SYSRES_CONST_RECSTAT_REQUISITE_CODE \"\n    + \"SYSRES_CONST_RED_LIFE_CYCLE_STAGE_FONT_COLOR \"\n    + \"SYSRES_CONST_REF_ID_T_REF_TYPE_REQUISITE_CODE \"\n    + \"SYSRES_CONST_REF_REQUISITE \"\n    + \"SYSRES_CONST_REF_REQUISITE_TYPE \"\n    + \"SYSRES_CONST_REF_REQUISITES_REFERENCE_CODE_SELECTED_REQUISITE \"\n    + \"SYSRES_CONST_REFERENCE_RECORD_HISTORY_CREATE_ACTION_CODE \"\n    + \"SYSRES_CONST_REFERENCE_RECORD_HISTORY_DELETE_ACTION_CODE \"\n    + \"SYSRES_CONST_REFERENCE_RECORD_HISTORY_MODIFY_ACTION_CODE \"\n    + \"SYSRES_CONST_REFERENCE_TYPE_CHAR \"\n    + \"SYSRES_CONST_REFERENCE_TYPE_REQUISITE_NAME \"\n    + \"SYSRES_CONST_REFERENCES_ADD_PARAMS_REQUISITE_CODE \"\n    + \"SYSRES_CONST_REFERENCES_DISPLAY_REQUISITE_REQUISITE_CODE \"\n    + \"SYSRES_CONST_REMOTE_SERVER_STATUS_WORKING \"\n    + \"SYSRES_CONST_REMOTE_SERVER_TYPE_MAIN \"\n    + \"SYSRES_CONST_REMOTE_SERVER_TYPE_SECONDARY \"\n    + \"SYSRES_CONST_REMOTE_USER_FLAG_VALUE_CODE \"\n    + \"SYSRES_CONST_REPORT_APP_EDITOR_INTERNAL \"\n    + \"SYSRES_CONST_REPORT_BASE_REPORT_ID_REQUISITE_CODE \"\n    + \"SYSRES_CONST_REPORT_BASE_REPORT_REQUISITE_CODE \"\n    + \"SYSRES_CONST_REPORT_SCRIPT_REQUISITE_CODE \"\n    + \"SYSRES_CONST_REPORT_TEMPLATE_REQUISITE_CODE \"\n    + \"SYSRES_CONST_REPORT_VIEWER_CODE_REQUISITE_CODE \"\n    + \"SYSRES_CONST_REQ_ALLOW_COMPONENT_DEFAULT_VALUE \"\n    + \"SYSRES_CONST_REQ_ALLOW_RECORD_DEFAULT_VALUE \"\n    + \"SYSRES_CONST_REQ_ALLOW_SERVER_COMPONENT_DEFAULT_VALUE \"\n    + \"SYSRES_CONST_REQ_MODE_AVAILABLE_CODE \"\n    + \"SYSRES_CONST_REQ_MODE_EDIT_CODE \"\n    + \"SYSRES_CONST_REQ_MODE_HIDDEN_CODE \"\n    + \"SYSRES_CONST_REQ_MODE_NOT_AVAILABLE_CODE \"\n    + \"SYSRES_CONST_REQ_MODE_VIEW_CODE \"\n    + \"SYSRES_CONST_REQ_NUMBER_REQUISITE_CODE \"\n    + \"SYSRES_CONST_REQ_SECTION_VALUE \"\n    + \"SYSRES_CONST_REQ_TYPE_VALUE \"\n    + \"SYSRES_CONST_REQUISITE_FORMAT_BY_UNIT \"\n    + \"SYSRES_CONST_REQUISITE_FORMAT_DATE_FULL \"\n    + \"SYSRES_CONST_REQUISITE_FORMAT_DATE_TIME \"\n    + \"SYSRES_CONST_REQUISITE_FORMAT_LEFT \"\n    + \"SYSRES_CONST_REQUISITE_FORMAT_RIGHT \"\n    + \"SYSRES_CONST_REQUISITE_FORMAT_WITHOUT_UNIT \"\n    + \"SYSRES_CONST_REQUISITE_NUMBER_REQUISITE_CODE \"\n    + \"SYSRES_CONST_REQUISITE_SECTION_ACTIONS \"\n    + \"SYSRES_CONST_REQUISITE_SECTION_BUTTON \"\n    + \"SYSRES_CONST_REQUISITE_SECTION_BUTTONS \"\n    + \"SYSRES_CONST_REQUISITE_SECTION_CARD \"\n    + \"SYSRES_CONST_REQUISITE_SECTION_TABLE \"\n    + \"SYSRES_CONST_REQUISITE_SECTION_TABLE10 \"\n    + \"SYSRES_CONST_REQUISITE_SECTION_TABLE11 \"\n    + \"SYSRES_CONST_REQUISITE_SECTION_TABLE12 \"\n    + \"SYSRES_CONST_REQUISITE_SECTION_TABLE13 \"\n    + \"SYSRES_CONST_REQUISITE_SECTION_TABLE14 \"\n    + \"SYSRES_CONST_REQUISITE_SECTION_TABLE15 \"\n    + \"SYSRES_CONST_REQUISITE_SECTION_TABLE16 \"\n    + \"SYSRES_CONST_REQUISITE_SECTION_TABLE17 \"\n    + \"SYSRES_CONST_REQUISITE_SECTION_TABLE18 \"\n    + \"SYSRES_CONST_REQUISITE_SECTION_TABLE19 \"\n    + \"SYSRES_CONST_REQUISITE_SECTION_TABLE2 \"\n    + \"SYSRES_CONST_REQUISITE_SECTION_TABLE20 \"\n    + \"SYSRES_CONST_REQUISITE_SECTION_TABLE21 \"\n    + \"SYSRES_CONST_REQUISITE_SECTION_TABLE22 \"\n    + \"SYSRES_CONST_REQUISITE_SECTION_TABLE23 \"\n    + \"SYSRES_CONST_REQUISITE_SECTION_TABLE24 \"\n    + \"SYSRES_CONST_REQUISITE_SECTION_TABLE3 \"\n    + \"SYSRES_CONST_REQUISITE_SECTION_TABLE4 \"\n    + \"SYSRES_CONST_REQUISITE_SECTION_TABLE5 \"\n    + \"SYSRES_CONST_REQUISITE_SECTION_TABLE6 \"\n    + \"SYSRES_CONST_REQUISITE_SECTION_TABLE7 \"\n    + \"SYSRES_CONST_REQUISITE_SECTION_TABLE8 \"\n    + \"SYSRES_CONST_REQUISITE_SECTION_TABLE9 \"\n    + \"SYSRES_CONST_REQUISITES_PSEUDOREFERENCE_REQUISITE_NUMBER_REQUISITE_CODE \"\n    + \"SYSRES_CONST_RIGHT_ALIGNMENT_CODE \"\n    + \"SYSRES_CONST_ROLES_REFERENCE_CODE \"\n    + \"SYSRES_CONST_ROUTE_STEP_AFTER_RUS \"\n    + \"SYSRES_CONST_ROUTE_STEP_AND_CONDITION_RUS \"\n    + \"SYSRES_CONST_ROUTE_STEP_OR_CONDITION_RUS \"\n    + \"SYSRES_CONST_ROUTE_TYPE_COMPLEX \"\n    + \"SYSRES_CONST_ROUTE_TYPE_PARALLEL \"\n    + \"SYSRES_CONST_ROUTE_TYPE_SERIAL \"\n    + \"SYSRES_CONST_SBDATASETDESC_NEGATIVE_VALUE \"\n    + \"SYSRES_CONST_SBDATASETDESC_POSITIVE_VALUE \"\n    + \"SYSRES_CONST_SBVIEWSDESC_POSITIVE_VALUE \"\n    + \"SYSRES_CONST_SCRIPT_BLOCK_DESCRIPTION \"\n    + \"SYSRES_CONST_SEARCH_BY_TEXT_REQUISITE_CODE \"\n    + \"SYSRES_CONST_SEARCHES_COMPONENT_CONTENT \"\n    + \"SYSRES_CONST_SEARCHES_CRITERIA_ACTION_NAME \"\n    + \"SYSRES_CONST_SEARCHES_EDOC_CONTENT \"\n    + \"SYSRES_CONST_SEARCHES_FOLDER_CONTENT \"\n    + \"SYSRES_CONST_SEARCHES_JOB_CONTENT \"\n    + \"SYSRES_CONST_SEARCHES_REFERENCE_CODE \"\n    + \"SYSRES_CONST_SEARCHES_TASK_CONTENT \"\n    + \"SYSRES_CONST_SECOND_CHAR \"\n    + \"SYSRES_CONST_SECTION_REQUISITE_ACTIONS_VALUE \"\n    + \"SYSRES_CONST_SECTION_REQUISITE_CARD_VALUE \"\n    + \"SYSRES_CONST_SECTION_REQUISITE_CODE \"\n    + \"SYSRES_CONST_SECTION_REQUISITE_DETAIL_1_VALUE \"\n    + \"SYSRES_CONST_SECTION_REQUISITE_DETAIL_2_VALUE \"\n    + \"SYSRES_CONST_SECTION_REQUISITE_DETAIL_3_VALUE \"\n    + \"SYSRES_CONST_SECTION_REQUISITE_DETAIL_4_VALUE \"\n    + \"SYSRES_CONST_SECTION_REQUISITE_DETAIL_5_VALUE \"\n    + \"SYSRES_CONST_SECTION_REQUISITE_DETAIL_6_VALUE \"\n    + \"SYSRES_CONST_SELECT_REFERENCE_MODE_NAME \"\n    + \"SYSRES_CONST_SELECT_TYPE_SELECTABLE \"\n    + \"SYSRES_CONST_SELECT_TYPE_SELECTABLE_ONLY_CHILD \"\n    + \"SYSRES_CONST_SELECT_TYPE_SELECTABLE_WITH_CHILD \"\n    + \"SYSRES_CONST_SELECT_TYPE_UNSLECTABLE \"\n    + \"SYSRES_CONST_SERVER_TYPE_MAIN \"\n    + \"SYSRES_CONST_SERVICE_USER_CATEGORY_FIELD_VALUE \"\n    + \"SYSRES_CONST_SETTINGS_USER_REQUISITE_CODE \"\n    + \"SYSRES_CONST_SIGNATURE_AND_ENCODE_CERTIFICATE_TYPE_CODE \"\n    + \"SYSRES_CONST_SIGNATURE_CERTIFICATE_TYPE_CODE \"\n    + \"SYSRES_CONST_SINGULAR_TITLE_REQUISITE_CODE \"\n    + \"SYSRES_CONST_SQL_SERVER_AUTHENTIFICATION_FLAG_VALUE_CODE \"\n    + \"SYSRES_CONST_SQL_SERVER_ENCODE_AUTHENTIFICATION_FLAG_VALUE_CODE \"\n    + \"SYSRES_CONST_STANDART_ROUTE_REFERENCE_CODE \"\n    + \"SYSRES_CONST_STANDART_ROUTE_REFERENCE_COMMENT_REQUISITE_CODE \"\n    + \"SYSRES_CONST_STANDART_ROUTES_GROUPS_REFERENCE_CODE \"\n    + \"SYSRES_CONST_STATE_REQ_NAME \"\n    + \"SYSRES_CONST_STATE_REQUISITE_ACTIVE_VALUE \"\n    + \"SYSRES_CONST_STATE_REQUISITE_CLOSED_VALUE \"\n    + \"SYSRES_CONST_STATE_REQUISITE_CODE \"\n    + \"SYSRES_CONST_STATIC_ROLE_TYPE_CODE \"\n    + \"SYSRES_CONST_STATUS_PLAN_DEFAULT_VALUE \"\n    + \"SYSRES_CONST_STATUS_VALUE_AUTOCLEANING \"\n    + \"SYSRES_CONST_STATUS_VALUE_BLUE_SQUARE \"\n    + \"SYSRES_CONST_STATUS_VALUE_COMPLETE \"\n    + \"SYSRES_CONST_STATUS_VALUE_GREEN_SQUARE \"\n    + \"SYSRES_CONST_STATUS_VALUE_ORANGE_SQUARE \"\n    + \"SYSRES_CONST_STATUS_VALUE_PURPLE_SQUARE \"\n    + \"SYSRES_CONST_STATUS_VALUE_RED_SQUARE \"\n    + \"SYSRES_CONST_STATUS_VALUE_SUSPEND \"\n    + \"SYSRES_CONST_STATUS_VALUE_YELLOW_SQUARE \"\n    + \"SYSRES_CONST_STDROUTE_SHOW_TO_USERS_REQUISITE_CODE \"\n    + \"SYSRES_CONST_STORAGE_TYPE_FILE \"\n    + \"SYSRES_CONST_STORAGE_TYPE_SQL_SERVER \"\n    + \"SYSRES_CONST_STR_REQUISITE \"\n    + \"SYSRES_CONST_STRIKEOUT_LIFE_CYCLE_STAGE_DRAW_STYLE \"\n    + \"SYSRES_CONST_STRING_FORMAT_LEFT_ALIGN_CHAR \"\n    + \"SYSRES_CONST_STRING_FORMAT_RIGHT_ALIGN_CHAR \"\n    + \"SYSRES_CONST_STRING_REQUISITE_CODE \"\n    + \"SYSRES_CONST_STRING_REQUISITE_TYPE \"\n    + \"SYSRES_CONST_STRING_TYPE_CHAR \"\n    + \"SYSRES_CONST_SUBSTITUTES_PSEUDOREFERENCE_CODE \"\n    + \"SYSRES_CONST_SUBTASK_BLOCK_DESCRIPTION \"\n    + \"SYSRES_CONST_SYSTEM_SETTING_CURRENT_USER_PARAM_VALUE \"\n    + \"SYSRES_CONST_SYSTEM_SETTING_EMPTY_VALUE_PARAM_VALUE \"\n    + \"SYSRES_CONST_SYSTEM_VERSION_COMMENT \"\n    + \"SYSRES_CONST_TASK_ACCESS_TYPE_ALL \"\n    + \"SYSRES_CONST_TASK_ACCESS_TYPE_ALL_MEMBERS \"\n    + \"SYSRES_CONST_TASK_ACCESS_TYPE_MANUAL \"\n    + \"SYSRES_CONST_TASK_ENCODE_TYPE_CERTIFICATION \"\n    + \"SYSRES_CONST_TASK_ENCODE_TYPE_CERTIFICATION_AND_PASSWORD \"\n    + \"SYSRES_CONST_TASK_ENCODE_TYPE_NONE \"\n    + \"SYSRES_CONST_TASK_ENCODE_TYPE_PASSWORD \"\n    + \"SYSRES_CONST_TASK_ROUTE_ALL_CONDITION \"\n    + \"SYSRES_CONST_TASK_ROUTE_AND_CONDITION \"\n    + \"SYSRES_CONST_TASK_ROUTE_OR_CONDITION \"\n    + \"SYSRES_CONST_TASK_STATE_ABORTED \"\n    + \"SYSRES_CONST_TASK_STATE_COMPLETE \"\n    + \"SYSRES_CONST_TASK_STATE_CONTINUED \"\n    + \"SYSRES_CONST_TASK_STATE_CONTROL \"\n    + \"SYSRES_CONST_TASK_STATE_INIT \"\n    + \"SYSRES_CONST_TASK_STATE_WORKING \"\n    + \"SYSRES_CONST_TASK_TITLE \"\n    + \"SYSRES_CONST_TASK_TYPES_GROUPS_REFERENCE_CODE \"\n    + \"SYSRES_CONST_TASK_TYPES_REFERENCE_CODE \"\n    + \"SYSRES_CONST_TEMPLATES_REFERENCE_CODE \"\n    + \"SYSRES_CONST_TEST_DATE_REQUISITE_NAME \"\n    + \"SYSRES_CONST_TEST_DEV_DATABASE_NAME \"\n    + \"SYSRES_CONST_TEST_DEV_SYSTEM_CODE \"\n    + \"SYSRES_CONST_TEST_EDMS_DATABASE_NAME \"\n    + \"SYSRES_CONST_TEST_EDMS_MAIN_CODE \"\n    + \"SYSRES_CONST_TEST_EDMS_MAIN_DB_NAME \"\n    + \"SYSRES_CONST_TEST_EDMS_SECOND_CODE \"\n    + \"SYSRES_CONST_TEST_EDMS_SECOND_DB_NAME \"\n    + \"SYSRES_CONST_TEST_EDMS_SYSTEM_CODE \"\n    + \"SYSRES_CONST_TEST_NUMERIC_REQUISITE_NAME \"\n    + \"SYSRES_CONST_TEXT_REQUISITE \"\n    + \"SYSRES_CONST_TEXT_REQUISITE_CODE \"\n    + \"SYSRES_CONST_TEXT_REQUISITE_TYPE \"\n    + \"SYSRES_CONST_TEXT_TYPE_CHAR \"\n    + \"SYSRES_CONST_TYPE_CODE_REQUISITE_CODE \"\n    + \"SYSRES_CONST_TYPE_REQUISITE_CODE \"\n    + \"SYSRES_CONST_UNDEFINED_LIFE_CYCLE_STAGE_FONT_COLOR \"\n    + \"SYSRES_CONST_UNITS_SECTION_ID_REQUISITE_CODE \"\n    + \"SYSRES_CONST_UNITS_SECTION_REQUISITE_CODE \"\n    + \"SYSRES_CONST_UNOPERATING_RECORD_FLAG_VALUE_CODE \"\n    + \"SYSRES_CONST_UNSTORED_DATA_REQUISITE_CODE \"\n    + \"SYSRES_CONST_UNSTORED_DATA_REQUISITE_NAME \"\n    + \"SYSRES_CONST_USE_ACCESS_TYPE_CODE \"\n    + \"SYSRES_CONST_USE_ACCESS_TYPE_NAME \"\n    + \"SYSRES_CONST_USER_ACCOUNT_TYPE_VALUE_CODE \"\n    + \"SYSRES_CONST_USER_ADDITIONAL_INFORMATION_REQUISITE_CODE \"\n    + \"SYSRES_CONST_USER_AND_GROUP_ID_FROM_PSEUDOREFERENCE_REQUISITE_CODE \"\n    + \"SYSRES_CONST_USER_CATEGORY_NORMAL \"\n    + \"SYSRES_CONST_USER_CERTIFICATE_REQUISITE_CODE \"\n    + \"SYSRES_CONST_USER_CERTIFICATE_STATE_REQUISITE_CODE \"\n    + \"SYSRES_CONST_USER_CERTIFICATE_SUBJECT_NAME_REQUISITE_CODE \"\n    + \"SYSRES_CONST_USER_CERTIFICATE_THUMBPRINT_REQUISITE_CODE \"\n    + \"SYSRES_CONST_USER_COMMON_CATEGORY \"\n    + \"SYSRES_CONST_USER_COMMON_CATEGORY_CODE \"\n    + \"SYSRES_CONST_USER_FULL_NAME_REQUISITE_CODE \"\n    + \"SYSRES_CONST_USER_GROUP_TYPE_REQUISITE_CODE \"\n    + \"SYSRES_CONST_USER_LOGIN_REQUISITE_CODE \"\n    + \"SYSRES_CONST_USER_REMOTE_CONTROLLER_REQUISITE_CODE \"\n    + \"SYSRES_CONST_USER_REMOTE_SYSTEM_REQUISITE_CODE \"\n    + \"SYSRES_CONST_USER_RIGHTS_T_REQUISITE_CODE \"\n    + \"SYSRES_CONST_USER_SERVER_NAME_REQUISITE_CODE \"\n    + \"SYSRES_CONST_USER_SERVICE_CATEGORY \"\n    + \"SYSRES_CONST_USER_SERVICE_CATEGORY_CODE \"\n    + \"SYSRES_CONST_USER_STATUS_ADMINISTRATOR_CODE \"\n    + \"SYSRES_CONST_USER_STATUS_ADMINISTRATOR_NAME \"\n    + \"SYSRES_CONST_USER_STATUS_DEVELOPER_CODE \"\n    + \"SYSRES_CONST_USER_STATUS_DEVELOPER_NAME \"\n    + \"SYSRES_CONST_USER_STATUS_DISABLED_CODE \"\n    + \"SYSRES_CONST_USER_STATUS_DISABLED_NAME \"\n    + \"SYSRES_CONST_USER_STATUS_SYSTEM_DEVELOPER_CODE \"\n    + \"SYSRES_CONST_USER_STATUS_USER_CODE \"\n    + \"SYSRES_CONST_USER_STATUS_USER_NAME \"\n    + \"SYSRES_CONST_USER_STATUS_USER_NAME_DEPRECATED \"\n    + \"SYSRES_CONST_USER_TYPE_FIELD_VALUE_USER \"\n    + \"SYSRES_CONST_USER_TYPE_REQUISITE_CODE \"\n    + \"SYSRES_CONST_USERS_CONTROLLER_REQUISITE_CODE \"\n    + \"SYSRES_CONST_USERS_IS_MAIN_SERVER_REQUISITE_CODE \"\n    + \"SYSRES_CONST_USERS_REFERENCE_CODE \"\n    + \"SYSRES_CONST_USERS_REGISTRATION_CERTIFICATES_ACTION_NAME \"\n    + \"SYSRES_CONST_USERS_REQUISITE_CODE \"\n    + \"SYSRES_CONST_USERS_SYSTEM_REQUISITE_CODE \"\n    + \"SYSRES_CONST_USERS_USER_ACCESS_RIGHTS_TYPR_REQUISITE_CODE \"\n    + \"SYSRES_CONST_USERS_USER_AUTHENTICATION_REQUISITE_CODE \"\n    + \"SYSRES_CONST_USERS_USER_COMPONENT_REQUISITE_CODE \"\n    + \"SYSRES_CONST_USERS_USER_GROUP_REQUISITE_CODE \"\n    + \"SYSRES_CONST_USERS_VIEW_CERTIFICATES_ACTION_NAME \"\n    + \"SYSRES_CONST_VIEW_DEFAULT_CODE \"\n    + \"SYSRES_CONST_VIEW_DEFAULT_NAME \"\n    + \"SYSRES_CONST_VIEWER_REQUISITE_CODE \"\n    + \"SYSRES_CONST_WAITING_BLOCK_DESCRIPTION \"\n    + \"SYSRES_CONST_WIZARD_FORM_LABEL_TEST_STRING  \"\n    + \"SYSRES_CONST_WIZARD_QUERY_PARAM_HEIGHT_ETALON_STRING \"\n    + \"SYSRES_CONST_WIZARD_REFERENCE_COMMENT_REQUISITE_CODE \"\n    + \"SYSRES_CONST_WORK_RULES_DESCRIPTION_REQUISITE_CODE \"\n    + \"SYSRES_CONST_WORK_TIME_CALENDAR_REFERENCE_CODE \"\n    + \"SYSRES_CONST_WORK_WORKFLOW_HARD_ROUTE_TYPE_VALUE \"\n    + \"SYSRES_CONST_WORK_WORKFLOW_HARD_ROUTE_TYPE_VALUE_CODE \"\n    + \"SYSRES_CONST_WORK_WORKFLOW_HARD_ROUTE_TYPE_VALUE_CODE_RUS \"\n    + \"SYSRES_CONST_WORK_WORKFLOW_SOFT_ROUTE_TYPE_VALUE_CODE_RUS \"\n    + \"SYSRES_CONST_WORKFLOW_ROUTE_TYPR_HARD \"\n    + \"SYSRES_CONST_WORKFLOW_ROUTE_TYPR_SOFT \"\n    + \"SYSRES_CONST_XML_ENCODING \"\n    + \"SYSRES_CONST_XREC_STAT_REQUISITE_CODE \"\n    + \"SYSRES_CONST_XRECID_FIELD_NAME \"\n    + \"SYSRES_CONST_YES \"\n    + \"SYSRES_CONST_YES_NO_2_REQUISITE_CODE \"\n    + \"SYSRES_CONST_YES_NO_REQUISITE_CODE \"\n    + \"SYSRES_CONST_YES_NO_T_REF_TYPE_REQUISITE_CODE \"\n    + \"SYSRES_CONST_YES_PICK_VALUE \"\n    + \"SYSRES_CONST_YES_VALUE \";\n\n  // Base constant\n  const base_constants = \"CR FALSE nil NO_VALUE NULL TAB TRUE YES_VALUE \";\n\n  // Base group name\n  const base_group_name_constants =\n    \"ADMINISTRATORS_GROUP_NAME CUSTOMIZERS_GROUP_NAME DEVELOPERS_GROUP_NAME SERVICE_USERS_GROUP_NAME \";\n\n  // Decision block properties\n  const decision_block_properties_constants =\n    \"DECISION_BLOCK_FIRST_OPERAND_PROPERTY DECISION_BLOCK_NAME_PROPERTY DECISION_BLOCK_OPERATION_PROPERTY \"\n    + \"DECISION_BLOCK_RESULT_TYPE_PROPERTY DECISION_BLOCK_SECOND_OPERAND_PROPERTY \";\n\n  // File extension\n  const file_extension_constants =\n    \"ANY_FILE_EXTENTION COMPRESSED_DOCUMENT_EXTENSION EXTENDED_DOCUMENT_EXTENSION \"\n    + \"SHORT_COMPRESSED_DOCUMENT_EXTENSION SHORT_EXTENDED_DOCUMENT_EXTENSION \";\n\n  // Job block properties\n  const job_block_properties_constants =\n    \"JOB_BLOCK_ABORT_DEADLINE_PROPERTY \"\n    + \"JOB_BLOCK_AFTER_FINISH_EVENT \"\n    + \"JOB_BLOCK_AFTER_QUERY_PARAMETERS_EVENT \"\n    + \"JOB_BLOCK_ATTACHMENT_PROPERTY \"\n    + \"JOB_BLOCK_ATTACHMENTS_RIGHTS_GROUP_PROPERTY \"\n    + \"JOB_BLOCK_ATTACHMENTS_RIGHTS_TYPE_PROPERTY \"\n    + \"JOB_BLOCK_BEFORE_QUERY_PARAMETERS_EVENT \"\n    + \"JOB_BLOCK_BEFORE_START_EVENT \"\n    + \"JOB_BLOCK_CREATED_JOBS_PROPERTY \"\n    + \"JOB_BLOCK_DEADLINE_PROPERTY \"\n    + \"JOB_BLOCK_EXECUTION_RESULTS_PROPERTY \"\n    + \"JOB_BLOCK_IS_PARALLEL_PROPERTY \"\n    + \"JOB_BLOCK_IS_RELATIVE_ABORT_DEADLINE_PROPERTY \"\n    + \"JOB_BLOCK_IS_RELATIVE_DEADLINE_PROPERTY \"\n    + \"JOB_BLOCK_JOB_TEXT_PROPERTY \"\n    + \"JOB_BLOCK_NAME_PROPERTY \"\n    + \"JOB_BLOCK_NEED_SIGN_ON_PERFORM_PROPERTY \"\n    + \"JOB_BLOCK_PERFORMER_PROPERTY \"\n    + \"JOB_BLOCK_RELATIVE_ABORT_DEADLINE_TYPE_PROPERTY \"\n    + \"JOB_BLOCK_RELATIVE_DEADLINE_TYPE_PROPERTY \"\n    + \"JOB_BLOCK_SUBJECT_PROPERTY \";\n\n  // Language code\n  const language_code_constants = \"ENGLISH_LANGUAGE_CODE RUSSIAN_LANGUAGE_CODE \";\n\n  // Launching external applications\n  const launching_external_applications_constants =\n    \"smHidden smMaximized smMinimized smNormal wmNo wmYes \";\n\n  // Link kind\n  const link_kind_constants =\n    \"COMPONENT_TOKEN_LINK_KIND \"\n    + \"DOCUMENT_LINK_KIND \"\n    + \"EDOCUMENT_LINK_KIND \"\n    + \"FOLDER_LINK_KIND \"\n    + \"JOB_LINK_KIND \"\n    + \"REFERENCE_LINK_KIND \"\n    + \"TASK_LINK_KIND \";\n\n  // Lock type\n  const lock_type_constants =\n    \"COMPONENT_TOKEN_LOCK_TYPE EDOCUMENT_VERSION_LOCK_TYPE \";\n\n  // Monitor block properties\n  const monitor_block_properties_constants =\n    \"MONITOR_BLOCK_AFTER_FINISH_EVENT \"\n    + \"MONITOR_BLOCK_BEFORE_START_EVENT \"\n    + \"MONITOR_BLOCK_DEADLINE_PROPERTY \"\n    + \"MONITOR_BLOCK_INTERVAL_PROPERTY \"\n    + \"MONITOR_BLOCK_INTERVAL_TYPE_PROPERTY \"\n    + \"MONITOR_BLOCK_IS_RELATIVE_DEADLINE_PROPERTY \"\n    + \"MONITOR_BLOCK_NAME_PROPERTY \"\n    + \"MONITOR_BLOCK_RELATIVE_DEADLINE_TYPE_PROPERTY \"\n    + \"MONITOR_BLOCK_SEARCH_SCRIPT_PROPERTY \";\n\n  // Notice block properties\n  const notice_block_properties_constants =\n    \"NOTICE_BLOCK_AFTER_FINISH_EVENT \"\n    + \"NOTICE_BLOCK_ATTACHMENT_PROPERTY \"\n    + \"NOTICE_BLOCK_ATTACHMENTS_RIGHTS_GROUP_PROPERTY \"\n    + \"NOTICE_BLOCK_ATTACHMENTS_RIGHTS_TYPE_PROPERTY \"\n    + \"NOTICE_BLOCK_BEFORE_START_EVENT \"\n    + \"NOTICE_BLOCK_CREATED_NOTICES_PROPERTY \"\n    + \"NOTICE_BLOCK_DEADLINE_PROPERTY \"\n    + \"NOTICE_BLOCK_IS_RELATIVE_DEADLINE_PROPERTY \"\n    + \"NOTICE_BLOCK_NAME_PROPERTY \"\n    + \"NOTICE_BLOCK_NOTICE_TEXT_PROPERTY \"\n    + \"NOTICE_BLOCK_PERFORMER_PROPERTY \"\n    + \"NOTICE_BLOCK_RELATIVE_DEADLINE_TYPE_PROPERTY \"\n    + \"NOTICE_BLOCK_SUBJECT_PROPERTY \";\n\n  // Object events\n  const object_events_constants =\n    \"dseAfterCancel \"\n    + \"dseAfterClose \"\n    + \"dseAfterDelete \"\n    + \"dseAfterDeleteOutOfTransaction \"\n    + \"dseAfterInsert \"\n    + \"dseAfterOpen \"\n    + \"dseAfterScroll \"\n    + \"dseAfterUpdate \"\n    + \"dseAfterUpdateOutOfTransaction \"\n    + \"dseBeforeCancel \"\n    + \"dseBeforeClose \"\n    + \"dseBeforeDelete \"\n    + \"dseBeforeDetailUpdate \"\n    + \"dseBeforeInsert \"\n    + \"dseBeforeOpen \"\n    + \"dseBeforeUpdate \"\n    + \"dseOnAnyRequisiteChange \"\n    + \"dseOnCloseRecord \"\n    + \"dseOnDeleteError \"\n    + \"dseOnOpenRecord \"\n    + \"dseOnPrepareUpdate \"\n    + \"dseOnUpdateError \"\n    + \"dseOnUpdateRatifiedRecord \"\n    + \"dseOnValidDelete \"\n    + \"dseOnValidUpdate \"\n    + \"reOnChange \"\n    + \"reOnChangeValues \"\n    + \"SELECTION_BEGIN_ROUTE_EVENT \"\n    + \"SELECTION_END_ROUTE_EVENT \";\n\n  // Object params\n  const object_params_constants =\n    \"CURRENT_PERIOD_IS_REQUIRED \"\n    + \"PREVIOUS_CARD_TYPE_NAME \"\n    + \"SHOW_RECORD_PROPERTIES_FORM \";\n\n  // Other\n  const other_constants =\n    \"ACCESS_RIGHTS_SETTING_DIALOG_CODE \"\n    + \"ADMINISTRATOR_USER_CODE \"\n    + \"ANALYTIC_REPORT_TYPE \"\n    + \"asrtHideLocal \"\n    + \"asrtHideRemote \"\n    + \"CALCULATED_ROLE_TYPE_CODE \"\n    + \"COMPONENTS_REFERENCE_DEVELOPER_VIEW_CODE \"\n    + \"DCTS_TEST_PROTOCOLS_FOLDER_PATH \"\n    + \"E_EDOC_VERSION_ALREADY_APPROVINGLY_SIGNED \"\n    + \"E_EDOC_VERSION_ALREADY_APPROVINGLY_SIGNED_BY_USER \"\n    + \"E_EDOC_VERSION_ALREDY_SIGNED \"\n    + \"E_EDOC_VERSION_ALREDY_SIGNED_BY_USER \"\n    + \"EDOC_TYPES_CODE_REQUISITE_FIELD_NAME \"\n    + \"EDOCUMENTS_ALIAS_NAME \"\n    + \"FILES_FOLDER_PATH \"\n    + \"FILTER_OPERANDS_DELIMITER \"\n    + \"FILTER_OPERATIONS_DELIMITER \"\n    + \"FORMCARD_NAME \"\n    + \"FORMLIST_NAME \"\n    + \"GET_EXTENDED_DOCUMENT_EXTENSION_CREATION_MODE \"\n    + \"GET_EXTENDED_DOCUMENT_EXTENSION_IMPORT_MODE \"\n    + \"INTEGRATED_REPORT_TYPE \"\n    + \"IS_BUILDER_APPLICATION_ROLE \"\n    + \"IS_BUILDER_APPLICATION_ROLE2 \"\n    + \"IS_BUILDER_USERS \"\n    + \"ISBSYSDEV \"\n    + \"LOG_FOLDER_PATH \"\n    + \"mbCancel \"\n    + \"mbNo \"\n    + \"mbNoToAll \"\n    + \"mbOK \"\n    + \"mbYes \"\n    + \"mbYesToAll \"\n    + \"MEMORY_DATASET_DESRIPTIONS_FILENAME \"\n    + \"mrNo \"\n    + \"mrNoToAll \"\n    + \"mrYes \"\n    + \"mrYesToAll \"\n    + \"MULTIPLE_SELECT_DIALOG_CODE \"\n    + \"NONOPERATING_RECORD_FLAG_FEMININE \"\n    + \"NONOPERATING_RECORD_FLAG_MASCULINE \"\n    + \"OPERATING_RECORD_FLAG_FEMININE \"\n    + \"OPERATING_RECORD_FLAG_MASCULINE \"\n    + \"PROFILING_SETTINGS_COMMON_SETTINGS_CODE_VALUE \"\n    + \"PROGRAM_INITIATED_LOOKUP_ACTION \"\n    + \"ratDelete \"\n    + \"ratEdit \"\n    + \"ratInsert \"\n    + \"REPORT_TYPE \"\n    + \"REQUIRED_PICK_VALUES_VARIABLE \"\n    + \"rmCard \"\n    + \"rmList \"\n    + \"SBRTE_PROGID_DEV \"\n    + \"SBRTE_PROGID_RELEASE \"\n    + \"STATIC_ROLE_TYPE_CODE \"\n    + \"SUPPRESS_EMPTY_TEMPLATE_CREATION \"\n    + \"SYSTEM_USER_CODE \"\n    + \"UPDATE_DIALOG_DATASET \"\n    + \"USED_IN_OBJECT_HINT_PARAM \"\n    + \"USER_INITIATED_LOOKUP_ACTION \"\n    + \"USER_NAME_FORMAT \"\n    + \"USER_SELECTION_RESTRICTIONS \"\n    + \"WORKFLOW_TEST_PROTOCOLS_FOLDER_PATH \"\n    + \"ELS_SUBTYPE_CONTROL_NAME \"\n    + \"ELS_FOLDER_KIND_CONTROL_NAME \"\n    + \"REPEAT_PROCESS_CURRENT_OBJECT_EXCEPTION_NAME \";\n\n  // Privileges\n  const privileges_constants =\n    \"PRIVILEGE_COMPONENT_FULL_ACCESS \"\n    + \"PRIVILEGE_DEVELOPMENT_EXPORT \"\n    + \"PRIVILEGE_DEVELOPMENT_IMPORT \"\n    + \"PRIVILEGE_DOCUMENT_DELETE \"\n    + \"PRIVILEGE_ESD \"\n    + \"PRIVILEGE_FOLDER_DELETE \"\n    + \"PRIVILEGE_MANAGE_ACCESS_RIGHTS \"\n    + \"PRIVILEGE_MANAGE_REPLICATION \"\n    + \"PRIVILEGE_MANAGE_SESSION_SERVER \"\n    + \"PRIVILEGE_OBJECT_FULL_ACCESS \"\n    + \"PRIVILEGE_OBJECT_VIEW \"\n    + \"PRIVILEGE_RESERVE_LICENSE \"\n    + \"PRIVILEGE_SYSTEM_CUSTOMIZE \"\n    + \"PRIVILEGE_SYSTEM_DEVELOP \"\n    + \"PRIVILEGE_SYSTEM_INSTALL \"\n    + \"PRIVILEGE_TASK_DELETE \"\n    + \"PRIVILEGE_USER_PLUGIN_SETTINGS_CUSTOMIZE \"\n    + \"PRIVILEGES_PSEUDOREFERENCE_CODE \";\n\n  // Pseudoreference code\n  const pseudoreference_code_constants =\n    \"ACCESS_TYPES_PSEUDOREFERENCE_CODE \"\n    + \"ALL_AVAILABLE_COMPONENTS_PSEUDOREFERENCE_CODE \"\n    + \"ALL_AVAILABLE_PRIVILEGES_PSEUDOREFERENCE_CODE \"\n    + \"ALL_REPLICATE_COMPONENTS_PSEUDOREFERENCE_CODE \"\n    + \"AVAILABLE_DEVELOPERS_COMPONENTS_PSEUDOREFERENCE_CODE \"\n    + \"COMPONENTS_PSEUDOREFERENCE_CODE \"\n    + \"FILTRATER_SETTINGS_CONFLICTS_PSEUDOREFERENCE_CODE \"\n    + \"GROUPS_PSEUDOREFERENCE_CODE \"\n    + \"RECEIVE_PROTOCOL_PSEUDOREFERENCE_CODE \"\n    + \"REFERENCE_REQUISITE_PSEUDOREFERENCE_CODE \"\n    + \"REFERENCE_REQUISITES_PSEUDOREFERENCE_CODE \"\n    + \"REFTYPES_PSEUDOREFERENCE_CODE \"\n    + \"REPLICATION_SEANCES_DIARY_PSEUDOREFERENCE_CODE \"\n    + \"SEND_PROTOCOL_PSEUDOREFERENCE_CODE \"\n    + \"SUBSTITUTES_PSEUDOREFERENCE_CODE \"\n    + \"SYSTEM_SETTINGS_PSEUDOREFERENCE_CODE \"\n    + \"UNITS_PSEUDOREFERENCE_CODE \"\n    + \"USERS_PSEUDOREFERENCE_CODE \"\n    + \"VIEWERS_PSEUDOREFERENCE_CODE \";\n\n  // Requisite ISBCertificateType values\n  const requisite_ISBCertificateType_values_constants =\n    \"CERTIFICATE_TYPE_ENCRYPT \"\n    + \"CERTIFICATE_TYPE_SIGN \"\n    + \"CERTIFICATE_TYPE_SIGN_AND_ENCRYPT \";\n\n  // Requisite ISBEDocStorageType values\n  const requisite_ISBEDocStorageType_values_constants =\n    \"STORAGE_TYPE_FILE \"\n    + \"STORAGE_TYPE_NAS_CIFS \"\n    + \"STORAGE_TYPE_SAPERION \"\n    + \"STORAGE_TYPE_SQL_SERVER \";\n\n  // Requisite CompType2 values\n  const requisite_compType2_values_constants =\n    \"COMPTYPE2_REQUISITE_DOCUMENTS_VALUE \"\n    + \"COMPTYPE2_REQUISITE_TASKS_VALUE \"\n    + \"COMPTYPE2_REQUISITE_FOLDERS_VALUE \"\n    + \"COMPTYPE2_REQUISITE_REFERENCES_VALUE \";\n\n  // Requisite name\n  const requisite_name_constants =\n    \"SYSREQ_CODE \"\n    + \"SYSREQ_COMPTYPE2 \"\n    + \"SYSREQ_CONST_AVAILABLE_FOR_WEB \"\n    + \"SYSREQ_CONST_COMMON_CODE \"\n    + \"SYSREQ_CONST_COMMON_VALUE \"\n    + \"SYSREQ_CONST_FIRM_CODE \"\n    + \"SYSREQ_CONST_FIRM_STATUS \"\n    + \"SYSREQ_CONST_FIRM_VALUE \"\n    + \"SYSREQ_CONST_SERVER_STATUS \"\n    + \"SYSREQ_CONTENTS \"\n    + \"SYSREQ_DATE_OPEN \"\n    + \"SYSREQ_DATE_CLOSE \"\n    + \"SYSREQ_DESCRIPTION \"\n    + \"SYSREQ_DESCRIPTION_LOCALIZE_ID \"\n    + \"SYSREQ_DOUBLE \"\n    + \"SYSREQ_EDOC_ACCESS_TYPE \"\n    + \"SYSREQ_EDOC_AUTHOR \"\n    + \"SYSREQ_EDOC_CREATED \"\n    + \"SYSREQ_EDOC_DELEGATE_RIGHTS_REQUISITE_CODE \"\n    + \"SYSREQ_EDOC_EDITOR \"\n    + \"SYSREQ_EDOC_ENCODE_TYPE \"\n    + \"SYSREQ_EDOC_ENCRYPTION_PLUGIN_NAME \"\n    + \"SYSREQ_EDOC_ENCRYPTION_PLUGIN_VERSION \"\n    + \"SYSREQ_EDOC_EXPORT_DATE \"\n    + \"SYSREQ_EDOC_EXPORTER \"\n    + \"SYSREQ_EDOC_KIND \"\n    + \"SYSREQ_EDOC_LIFE_STAGE_NAME \"\n    + \"SYSREQ_EDOC_LOCKED_FOR_SERVER_CODE \"\n    + \"SYSREQ_EDOC_MODIFIED \"\n    + \"SYSREQ_EDOC_NAME \"\n    + \"SYSREQ_EDOC_NOTE \"\n    + \"SYSREQ_EDOC_QUALIFIED_ID \"\n    + \"SYSREQ_EDOC_SESSION_KEY \"\n    + \"SYSREQ_EDOC_SESSION_KEY_ENCRYPTION_PLUGIN_NAME \"\n    + \"SYSREQ_EDOC_SESSION_KEY_ENCRYPTION_PLUGIN_VERSION \"\n    + \"SYSREQ_EDOC_SIGNATURE_TYPE \"\n    + \"SYSREQ_EDOC_SIGNED \"\n    + \"SYSREQ_EDOC_STORAGE \"\n    + \"SYSREQ_EDOC_STORAGES_ARCHIVE_STORAGE \"\n    + \"SYSREQ_EDOC_STORAGES_CHECK_RIGHTS \"\n    + \"SYSREQ_EDOC_STORAGES_COMPUTER_NAME \"\n    + \"SYSREQ_EDOC_STORAGES_EDIT_IN_STORAGE \"\n    + \"SYSREQ_EDOC_STORAGES_EXECUTIVE_STORAGE \"\n    + \"SYSREQ_EDOC_STORAGES_FUNCTION \"\n    + \"SYSREQ_EDOC_STORAGES_INITIALIZED \"\n    + \"SYSREQ_EDOC_STORAGES_LOCAL_PATH \"\n    + \"SYSREQ_EDOC_STORAGES_SAPERION_DATABASE_NAME \"\n    + \"SYSREQ_EDOC_STORAGES_SEARCH_BY_TEXT \"\n    + \"SYSREQ_EDOC_STORAGES_SERVER_NAME \"\n    + \"SYSREQ_EDOC_STORAGES_SHARED_SOURCE_NAME \"\n    + \"SYSREQ_EDOC_STORAGES_TYPE \"\n    + \"SYSREQ_EDOC_TEXT_MODIFIED \"\n    + \"SYSREQ_EDOC_TYPE_ACT_CODE \"\n    + \"SYSREQ_EDOC_TYPE_ACT_DESCRIPTION \"\n    + \"SYSREQ_EDOC_TYPE_ACT_DESCRIPTION_LOCALIZE_ID \"\n    + \"SYSREQ_EDOC_TYPE_ACT_ON_EXECUTE \"\n    + \"SYSREQ_EDOC_TYPE_ACT_ON_EXECUTE_EXISTS \"\n    + \"SYSREQ_EDOC_TYPE_ACT_SECTION \"\n    + \"SYSREQ_EDOC_TYPE_ADD_PARAMS \"\n    + \"SYSREQ_EDOC_TYPE_COMMENT \"\n    + \"SYSREQ_EDOC_TYPE_EVENT_TEXT \"\n    + \"SYSREQ_EDOC_TYPE_NAME_IN_SINGULAR \"\n    + \"SYSREQ_EDOC_TYPE_NAME_IN_SINGULAR_LOCALIZE_ID \"\n    + \"SYSREQ_EDOC_TYPE_NAME_LOCALIZE_ID \"\n    + \"SYSREQ_EDOC_TYPE_NUMERATION_METHOD \"\n    + \"SYSREQ_EDOC_TYPE_PSEUDO_REQUISITE_CODE \"\n    + \"SYSREQ_EDOC_TYPE_REQ_CODE \"\n    + \"SYSREQ_EDOC_TYPE_REQ_DESCRIPTION \"\n    + \"SYSREQ_EDOC_TYPE_REQ_DESCRIPTION_LOCALIZE_ID \"\n    + \"SYSREQ_EDOC_TYPE_REQ_IS_LEADING \"\n    + \"SYSREQ_EDOC_TYPE_REQ_IS_REQUIRED \"\n    + \"SYSREQ_EDOC_TYPE_REQ_NUMBER \"\n    + \"SYSREQ_EDOC_TYPE_REQ_ON_CHANGE \"\n    + \"SYSREQ_EDOC_TYPE_REQ_ON_CHANGE_EXISTS \"\n    + \"SYSREQ_EDOC_TYPE_REQ_ON_SELECT \"\n    + \"SYSREQ_EDOC_TYPE_REQ_ON_SELECT_KIND \"\n    + \"SYSREQ_EDOC_TYPE_REQ_SECTION \"\n    + \"SYSREQ_EDOC_TYPE_VIEW_CARD \"\n    + \"SYSREQ_EDOC_TYPE_VIEW_CODE \"\n    + \"SYSREQ_EDOC_TYPE_VIEW_COMMENT \"\n    + \"SYSREQ_EDOC_TYPE_VIEW_IS_MAIN \"\n    + \"SYSREQ_EDOC_TYPE_VIEW_NAME \"\n    + \"SYSREQ_EDOC_TYPE_VIEW_NAME_LOCALIZE_ID \"\n    + \"SYSREQ_EDOC_VERSION_AUTHOR \"\n    + \"SYSREQ_EDOC_VERSION_CRC \"\n    + \"SYSREQ_EDOC_VERSION_DATA \"\n    + \"SYSREQ_EDOC_VERSION_EDITOR \"\n    + \"SYSREQ_EDOC_VERSION_EXPORT_DATE \"\n    + \"SYSREQ_EDOC_VERSION_EXPORTER \"\n    + \"SYSREQ_EDOC_VERSION_HIDDEN \"\n    + \"SYSREQ_EDOC_VERSION_LIFE_STAGE \"\n    + \"SYSREQ_EDOC_VERSION_MODIFIED \"\n    + \"SYSREQ_EDOC_VERSION_NOTE \"\n    + \"SYSREQ_EDOC_VERSION_SIGNATURE_TYPE \"\n    + \"SYSREQ_EDOC_VERSION_SIGNED \"\n    + \"SYSREQ_EDOC_VERSION_SIZE \"\n    + \"SYSREQ_EDOC_VERSION_SOURCE \"\n    + \"SYSREQ_EDOC_VERSION_TEXT_MODIFIED \"\n    + \"SYSREQ_EDOCKIND_DEFAULT_VERSION_STATE_CODE \"\n    + \"SYSREQ_FOLDER_KIND \"\n    + \"SYSREQ_FUNC_CATEGORY \"\n    + \"SYSREQ_FUNC_COMMENT \"\n    + \"SYSREQ_FUNC_GROUP \"\n    + \"SYSREQ_FUNC_GROUP_COMMENT \"\n    + \"SYSREQ_FUNC_GROUP_NUMBER \"\n    + \"SYSREQ_FUNC_HELP \"\n    + \"SYSREQ_FUNC_PARAM_DEF_VALUE \"\n    + \"SYSREQ_FUNC_PARAM_IDENT \"\n    + \"SYSREQ_FUNC_PARAM_NUMBER \"\n    + \"SYSREQ_FUNC_PARAM_TYPE \"\n    + \"SYSREQ_FUNC_TEXT \"\n    + \"SYSREQ_GROUP_CATEGORY \"\n    + \"SYSREQ_ID \"\n    + \"SYSREQ_LAST_UPDATE \"\n    + \"SYSREQ_LEADER_REFERENCE \"\n    + \"SYSREQ_LINE_NUMBER \"\n    + \"SYSREQ_MAIN_RECORD_ID \"\n    + \"SYSREQ_NAME \"\n    + \"SYSREQ_NAME_LOCALIZE_ID \"\n    + \"SYSREQ_NOTE \"\n    + \"SYSREQ_ORIGINAL_RECORD \"\n    + \"SYSREQ_OUR_FIRM \"\n    + \"SYSREQ_PROFILING_SETTINGS_BATCH_LOGING \"\n    + \"SYSREQ_PROFILING_SETTINGS_BATCH_SIZE \"\n    + \"SYSREQ_PROFILING_SETTINGS_PROFILING_ENABLED \"\n    + \"SYSREQ_PROFILING_SETTINGS_SQL_PROFILING_ENABLED \"\n    + \"SYSREQ_PROFILING_SETTINGS_START_LOGGED \"\n    + \"SYSREQ_RECORD_STATUS \"\n    + \"SYSREQ_REF_REQ_FIELD_NAME \"\n    + \"SYSREQ_REF_REQ_FORMAT \"\n    + \"SYSREQ_REF_REQ_GENERATED \"\n    + \"SYSREQ_REF_REQ_LENGTH \"\n    + \"SYSREQ_REF_REQ_PRECISION \"\n    + \"SYSREQ_REF_REQ_REFERENCE \"\n    + \"SYSREQ_REF_REQ_SECTION \"\n    + \"SYSREQ_REF_REQ_STORED \"\n    + \"SYSREQ_REF_REQ_TOKENS \"\n    + \"SYSREQ_REF_REQ_TYPE \"\n    + \"SYSREQ_REF_REQ_VIEW \"\n    + \"SYSREQ_REF_TYPE_ACT_CODE \"\n    + \"SYSREQ_REF_TYPE_ACT_DESCRIPTION \"\n    + \"SYSREQ_REF_TYPE_ACT_DESCRIPTION_LOCALIZE_ID \"\n    + \"SYSREQ_REF_TYPE_ACT_ON_EXECUTE \"\n    + \"SYSREQ_REF_TYPE_ACT_ON_EXECUTE_EXISTS \"\n    + \"SYSREQ_REF_TYPE_ACT_SECTION \"\n    + \"SYSREQ_REF_TYPE_ADD_PARAMS \"\n    + \"SYSREQ_REF_TYPE_COMMENT \"\n    + \"SYSREQ_REF_TYPE_COMMON_SETTINGS \"\n    + \"SYSREQ_REF_TYPE_DISPLAY_REQUISITE_NAME \"\n    + \"SYSREQ_REF_TYPE_EVENT_TEXT \"\n    + \"SYSREQ_REF_TYPE_MAIN_LEADING_REF \"\n    + \"SYSREQ_REF_TYPE_NAME_IN_SINGULAR \"\n    + \"SYSREQ_REF_TYPE_NAME_IN_SINGULAR_LOCALIZE_ID \"\n    + \"SYSREQ_REF_TYPE_NAME_LOCALIZE_ID \"\n    + \"SYSREQ_REF_TYPE_NUMERATION_METHOD \"\n    + \"SYSREQ_REF_TYPE_REQ_CODE \"\n    + \"SYSREQ_REF_TYPE_REQ_DESCRIPTION \"\n    + \"SYSREQ_REF_TYPE_REQ_DESCRIPTION_LOCALIZE_ID \"\n    + \"SYSREQ_REF_TYPE_REQ_IS_CONTROL \"\n    + \"SYSREQ_REF_TYPE_REQ_IS_FILTER \"\n    + \"SYSREQ_REF_TYPE_REQ_IS_LEADING \"\n    + \"SYSREQ_REF_TYPE_REQ_IS_REQUIRED \"\n    + \"SYSREQ_REF_TYPE_REQ_NUMBER \"\n    + \"SYSREQ_REF_TYPE_REQ_ON_CHANGE \"\n    + \"SYSREQ_REF_TYPE_REQ_ON_CHANGE_EXISTS \"\n    + \"SYSREQ_REF_TYPE_REQ_ON_SELECT \"\n    + \"SYSREQ_REF_TYPE_REQ_ON_SELECT_KIND \"\n    + \"SYSREQ_REF_TYPE_REQ_SECTION \"\n    + \"SYSREQ_REF_TYPE_VIEW_CARD \"\n    + \"SYSREQ_REF_TYPE_VIEW_CODE \"\n    + \"SYSREQ_REF_TYPE_VIEW_COMMENT \"\n    + \"SYSREQ_REF_TYPE_VIEW_IS_MAIN \"\n    + \"SYSREQ_REF_TYPE_VIEW_NAME \"\n    + \"SYSREQ_REF_TYPE_VIEW_NAME_LOCALIZE_ID \"\n    + \"SYSREQ_REFERENCE_TYPE_ID \"\n    + \"SYSREQ_STATE \"\n    + \"SYSREQ_STATЕ \"\n    + \"SYSREQ_SYSTEM_SETTINGS_VALUE \"\n    + \"SYSREQ_TYPE \"\n    + \"SYSREQ_UNIT \"\n    + \"SYSREQ_UNIT_ID \"\n    + \"SYSREQ_USER_GROUPS_GROUP_FULL_NAME \"\n    + \"SYSREQ_USER_GROUPS_GROUP_NAME \"\n    + \"SYSREQ_USER_GROUPS_GROUP_SERVER_NAME \"\n    + \"SYSREQ_USERS_ACCESS_RIGHTS \"\n    + \"SYSREQ_USERS_AUTHENTICATION \"\n    + \"SYSREQ_USERS_CATEGORY \"\n    + \"SYSREQ_USERS_COMPONENT \"\n    + \"SYSREQ_USERS_COMPONENT_USER_IS_PUBLIC \"\n    + \"SYSREQ_USERS_DOMAIN \"\n    + \"SYSREQ_USERS_FULL_USER_NAME \"\n    + \"SYSREQ_USERS_GROUP \"\n    + \"SYSREQ_USERS_IS_MAIN_SERVER \"\n    + \"SYSREQ_USERS_LOGIN \"\n    + \"SYSREQ_USERS_REFERENCE_USER_IS_PUBLIC \"\n    + \"SYSREQ_USERS_STATUS \"\n    + \"SYSREQ_USERS_USER_CERTIFICATE \"\n    + \"SYSREQ_USERS_USER_CERTIFICATE_INFO \"\n    + \"SYSREQ_USERS_USER_CERTIFICATE_PLUGIN_NAME \"\n    + \"SYSREQ_USERS_USER_CERTIFICATE_PLUGIN_VERSION \"\n    + \"SYSREQ_USERS_USER_CERTIFICATE_STATE \"\n    + \"SYSREQ_USERS_USER_CERTIFICATE_SUBJECT_NAME \"\n    + \"SYSREQ_USERS_USER_CERTIFICATE_THUMBPRINT \"\n    + \"SYSREQ_USERS_USER_DEFAULT_CERTIFICATE \"\n    + \"SYSREQ_USERS_USER_DESCRIPTION \"\n    + \"SYSREQ_USERS_USER_GLOBAL_NAME \"\n    + \"SYSREQ_USERS_USER_LOGIN \"\n    + \"SYSREQ_USERS_USER_MAIN_SERVER \"\n    + \"SYSREQ_USERS_USER_TYPE \"\n    + \"SYSREQ_WORK_RULES_FOLDER_ID \";\n\n  // Result\n  const result_constants = \"RESULT_VAR_NAME RESULT_VAR_NAME_ENG \";\n\n  // Rule identification\n  const rule_identification_constants =\n    \"AUTO_NUMERATION_RULE_ID \"\n    + \"CANT_CHANGE_ID_REQUISITE_RULE_ID \"\n    + \"CANT_CHANGE_OURFIRM_REQUISITE_RULE_ID \"\n    + \"CHECK_CHANGING_REFERENCE_RECORD_USE_RULE_ID \"\n    + \"CHECK_CODE_REQUISITE_RULE_ID \"\n    + \"CHECK_DELETING_REFERENCE_RECORD_USE_RULE_ID \"\n    + \"CHECK_FILTRATER_CHANGES_RULE_ID \"\n    + \"CHECK_RECORD_INTERVAL_RULE_ID \"\n    + \"CHECK_REFERENCE_INTERVAL_RULE_ID \"\n    + \"CHECK_REQUIRED_DATA_FULLNESS_RULE_ID \"\n    + \"CHECK_REQUIRED_REQUISITES_FULLNESS_RULE_ID \"\n    + \"MAKE_RECORD_UNRATIFIED_RULE_ID \"\n    + \"RESTORE_AUTO_NUMERATION_RULE_ID \"\n    + \"SET_FIRM_CONTEXT_FROM_RECORD_RULE_ID \"\n    + \"SET_FIRST_RECORD_IN_LIST_FORM_RULE_ID \"\n    + \"SET_IDSPS_VALUE_RULE_ID \"\n    + \"SET_NEXT_CODE_VALUE_RULE_ID \"\n    + \"SET_OURFIRM_BOUNDS_RULE_ID \"\n    + \"SET_OURFIRM_REQUISITE_RULE_ID \";\n\n  // Script block properties\n  const script_block_properties_constants =\n    \"SCRIPT_BLOCK_AFTER_FINISH_EVENT \"\n    + \"SCRIPT_BLOCK_BEFORE_START_EVENT \"\n    + \"SCRIPT_BLOCK_EXECUTION_RESULTS_PROPERTY \"\n    + \"SCRIPT_BLOCK_NAME_PROPERTY \"\n    + \"SCRIPT_BLOCK_SCRIPT_PROPERTY \";\n\n  // Subtask block properties\n  const subtask_block_properties_constants =\n    \"SUBTASK_BLOCK_ABORT_DEADLINE_PROPERTY \"\n    + \"SUBTASK_BLOCK_AFTER_FINISH_EVENT \"\n    + \"SUBTASK_BLOCK_ASSIGN_PARAMS_EVENT \"\n    + \"SUBTASK_BLOCK_ATTACHMENTS_PROPERTY \"\n    + \"SUBTASK_BLOCK_ATTACHMENTS_RIGHTS_GROUP_PROPERTY \"\n    + \"SUBTASK_BLOCK_ATTACHMENTS_RIGHTS_TYPE_PROPERTY \"\n    + \"SUBTASK_BLOCK_BEFORE_START_EVENT \"\n    + \"SUBTASK_BLOCK_CREATED_TASK_PROPERTY \"\n    + \"SUBTASK_BLOCK_CREATION_EVENT \"\n    + \"SUBTASK_BLOCK_DEADLINE_PROPERTY \"\n    + \"SUBTASK_BLOCK_IMPORTANCE_PROPERTY \"\n    + \"SUBTASK_BLOCK_INITIATOR_PROPERTY \"\n    + \"SUBTASK_BLOCK_IS_RELATIVE_ABORT_DEADLINE_PROPERTY \"\n    + \"SUBTASK_BLOCK_IS_RELATIVE_DEADLINE_PROPERTY \"\n    + \"SUBTASK_BLOCK_JOBS_TYPE_PROPERTY \"\n    + \"SUBTASK_BLOCK_NAME_PROPERTY \"\n    + \"SUBTASK_BLOCK_PARALLEL_ROUTE_PROPERTY \"\n    + \"SUBTASK_BLOCK_PERFORMERS_PROPERTY \"\n    + \"SUBTASK_BLOCK_RELATIVE_ABORT_DEADLINE_TYPE_PROPERTY \"\n    + \"SUBTASK_BLOCK_RELATIVE_DEADLINE_TYPE_PROPERTY \"\n    + \"SUBTASK_BLOCK_REQUIRE_SIGN_PROPERTY \"\n    + \"SUBTASK_BLOCK_STANDARD_ROUTE_PROPERTY \"\n    + \"SUBTASK_BLOCK_START_EVENT \"\n    + \"SUBTASK_BLOCK_STEP_CONTROL_PROPERTY \"\n    + \"SUBTASK_BLOCK_SUBJECT_PROPERTY \"\n    + \"SUBTASK_BLOCK_TASK_CONTROL_PROPERTY \"\n    + \"SUBTASK_BLOCK_TEXT_PROPERTY \"\n    + \"SUBTASK_BLOCK_UNLOCK_ATTACHMENTS_ON_STOP_PROPERTY \"\n    + \"SUBTASK_BLOCK_USE_STANDARD_ROUTE_PROPERTY \"\n    + \"SUBTASK_BLOCK_WAIT_FOR_TASK_COMPLETE_PROPERTY \";\n\n  // System component\n  const system_component_constants =\n    \"SYSCOMP_CONTROL_JOBS \"\n    + \"SYSCOMP_FOLDERS \"\n    + \"SYSCOMP_JOBS \"\n    + \"SYSCOMP_NOTICES \"\n    + \"SYSCOMP_TASKS \";\n\n  // System dialogs\n  const system_dialogs_constants =\n    \"SYSDLG_CREATE_EDOCUMENT \"\n    + \"SYSDLG_CREATE_EDOCUMENT_VERSION \"\n    + \"SYSDLG_CURRENT_PERIOD \"\n    + \"SYSDLG_EDIT_FUNCTION_HELP \"\n    + \"SYSDLG_EDOCUMENT_KINDS_FOR_TEMPLATE \"\n    + \"SYSDLG_EXPORT_MULTIPLE_EDOCUMENTS \"\n    + \"SYSDLG_EXPORT_SINGLE_EDOCUMENT \"\n    + \"SYSDLG_IMPORT_EDOCUMENT \"\n    + \"SYSDLG_MULTIPLE_SELECT \"\n    + \"SYSDLG_SETUP_ACCESS_RIGHTS \"\n    + \"SYSDLG_SETUP_DEFAULT_RIGHTS \"\n    + \"SYSDLG_SETUP_FILTER_CONDITION \"\n    + \"SYSDLG_SETUP_SIGN_RIGHTS \"\n    + \"SYSDLG_SETUP_TASK_OBSERVERS \"\n    + \"SYSDLG_SETUP_TASK_ROUTE \"\n    + \"SYSDLG_SETUP_USERS_LIST \"\n    + \"SYSDLG_SIGN_EDOCUMENT \"\n    + \"SYSDLG_SIGN_MULTIPLE_EDOCUMENTS \";\n\n  // System reference names\n  const system_reference_names_constants =\n    \"SYSREF_ACCESS_RIGHTS_TYPES \"\n    + \"SYSREF_ADMINISTRATION_HISTORY \"\n    + \"SYSREF_ALL_AVAILABLE_COMPONENTS \"\n    + \"SYSREF_ALL_AVAILABLE_PRIVILEGES \"\n    + \"SYSREF_ALL_REPLICATING_COMPONENTS \"\n    + \"SYSREF_AVAILABLE_DEVELOPERS_COMPONENTS \"\n    + \"SYSREF_CALENDAR_EVENTS \"\n    + \"SYSREF_COMPONENT_TOKEN_HISTORY \"\n    + \"SYSREF_COMPONENT_TOKENS \"\n    + \"SYSREF_COMPONENTS \"\n    + \"SYSREF_CONSTANTS \"\n    + \"SYSREF_DATA_RECEIVE_PROTOCOL \"\n    + \"SYSREF_DATA_SEND_PROTOCOL \"\n    + \"SYSREF_DIALOGS \"\n    + \"SYSREF_DIALOGS_REQUISITES \"\n    + \"SYSREF_EDITORS \"\n    + \"SYSREF_EDOC_CARDS \"\n    + \"SYSREF_EDOC_TYPES \"\n    + \"SYSREF_EDOCUMENT_CARD_REQUISITES \"\n    + \"SYSREF_EDOCUMENT_CARD_TYPES \"\n    + \"SYSREF_EDOCUMENT_CARD_TYPES_REFERENCE \"\n    + \"SYSREF_EDOCUMENT_CARDS \"\n    + \"SYSREF_EDOCUMENT_HISTORY \"\n    + \"SYSREF_EDOCUMENT_KINDS \"\n    + \"SYSREF_EDOCUMENT_REQUISITES \"\n    + \"SYSREF_EDOCUMENT_SIGNATURES \"\n    + \"SYSREF_EDOCUMENT_TEMPLATES \"\n    + \"SYSREF_EDOCUMENT_TEXT_STORAGES \"\n    + \"SYSREF_EDOCUMENT_VIEWS \"\n    + \"SYSREF_FILTERER_SETUP_CONFLICTS \"\n    + \"SYSREF_FILTRATER_SETTING_CONFLICTS \"\n    + \"SYSREF_FOLDER_HISTORY \"\n    + \"SYSREF_FOLDERS \"\n    + \"SYSREF_FUNCTION_GROUPS \"\n    + \"SYSREF_FUNCTION_PARAMS \"\n    + \"SYSREF_FUNCTIONS \"\n    + \"SYSREF_JOB_HISTORY \"\n    + \"SYSREF_LINKS \"\n    + \"SYSREF_LOCALIZATION_DICTIONARY \"\n    + \"SYSREF_LOCALIZATION_LANGUAGES \"\n    + \"SYSREF_MODULES \"\n    + \"SYSREF_PRIVILEGES \"\n    + \"SYSREF_RECORD_HISTORY \"\n    + \"SYSREF_REFERENCE_REQUISITES \"\n    + \"SYSREF_REFERENCE_TYPE_VIEWS \"\n    + \"SYSREF_REFERENCE_TYPES \"\n    + \"SYSREF_REFERENCES \"\n    + \"SYSREF_REFERENCES_REQUISITES \"\n    + \"SYSREF_REMOTE_SERVERS \"\n    + \"SYSREF_REPLICATION_SESSIONS_LOG \"\n    + \"SYSREF_REPLICATION_SESSIONS_PROTOCOL \"\n    + \"SYSREF_REPORTS \"\n    + \"SYSREF_ROLES \"\n    + \"SYSREF_ROUTE_BLOCK_GROUPS \"\n    + \"SYSREF_ROUTE_BLOCKS \"\n    + \"SYSREF_SCRIPTS \"\n    + \"SYSREF_SEARCHES \"\n    + \"SYSREF_SERVER_EVENTS \"\n    + \"SYSREF_SERVER_EVENTS_HISTORY \"\n    + \"SYSREF_STANDARD_ROUTE_GROUPS \"\n    + \"SYSREF_STANDARD_ROUTES \"\n    + \"SYSREF_STATUSES \"\n    + \"SYSREF_SYSTEM_SETTINGS \"\n    + \"SYSREF_TASK_HISTORY \"\n    + \"SYSREF_TASK_KIND_GROUPS \"\n    + \"SYSREF_TASK_KINDS \"\n    + \"SYSREF_TASK_RIGHTS \"\n    + \"SYSREF_TASK_SIGNATURES \"\n    + \"SYSREF_TASKS \"\n    + \"SYSREF_UNITS \"\n    + \"SYSREF_USER_GROUPS \"\n    + \"SYSREF_USER_GROUPS_REFERENCE \"\n    + \"SYSREF_USER_SUBSTITUTION \"\n    + \"SYSREF_USERS \"\n    + \"SYSREF_USERS_REFERENCE \"\n    + \"SYSREF_VIEWERS \"\n    + \"SYSREF_WORKING_TIME_CALENDARS \";\n\n  // Table name\n  const table_name_constants =\n    \"ACCESS_RIGHTS_TABLE_NAME \"\n    + \"EDMS_ACCESS_TABLE_NAME \"\n    + \"EDOC_TYPES_TABLE_NAME \";\n\n  // Test\n  const test_constants =\n    \"TEST_DEV_DB_NAME \"\n    + \"TEST_DEV_SYSTEM_CODE \"\n    + \"TEST_EDMS_DB_NAME \"\n    + \"TEST_EDMS_MAIN_CODE \"\n    + \"TEST_EDMS_MAIN_DB_NAME \"\n    + \"TEST_EDMS_SECOND_CODE \"\n    + \"TEST_EDMS_SECOND_DB_NAME \"\n    + \"TEST_EDMS_SYSTEM_CODE \"\n    + \"TEST_ISB5_MAIN_CODE \"\n    + \"TEST_ISB5_SECOND_CODE \"\n    + \"TEST_SQL_SERVER_2005_NAME \"\n    + \"TEST_SQL_SERVER_NAME \";\n\n  // Using the dialog windows\n  const using_the_dialog_windows_constants =\n    \"ATTENTION_CAPTION \"\n    + \"cbsCommandLinks \"\n    + \"cbsDefault \"\n    + \"CONFIRMATION_CAPTION \"\n    + \"ERROR_CAPTION \"\n    + \"INFORMATION_CAPTION \"\n    + \"mrCancel \"\n    + \"mrOk \";\n\n  // Using the document\n  const using_the_document_constants =\n    \"EDOC_VERSION_ACTIVE_STAGE_CODE \"\n    + \"EDOC_VERSION_DESIGN_STAGE_CODE \"\n    + \"EDOC_VERSION_OBSOLETE_STAGE_CODE \";\n\n  // Using the EA and encryption\n  const using_the_EA_and_encryption_constants =\n    \"cpDataEnciphermentEnabled \"\n    + \"cpDigitalSignatureEnabled \"\n    + \"cpID \"\n    + \"cpIssuer \"\n    + \"cpPluginVersion \"\n    + \"cpSerial \"\n    + \"cpSubjectName \"\n    + \"cpSubjSimpleName \"\n    + \"cpValidFromDate \"\n    + \"cpValidToDate \";\n\n  // Using the ISBL-editor\n  const using_the_ISBL_editor_constants =\n    \"ISBL_SYNTAX \" + \"NO_SYNTAX \" + \"XML_SYNTAX \";\n\n  // Wait block properties\n  const wait_block_properties_constants =\n    \"WAIT_BLOCK_AFTER_FINISH_EVENT \"\n    + \"WAIT_BLOCK_BEFORE_START_EVENT \"\n    + \"WAIT_BLOCK_DEADLINE_PROPERTY \"\n    + \"WAIT_BLOCK_IS_RELATIVE_DEADLINE_PROPERTY \"\n    + \"WAIT_BLOCK_NAME_PROPERTY \"\n    + \"WAIT_BLOCK_RELATIVE_DEADLINE_TYPE_PROPERTY \";\n\n  // SYSRES Common\n  const sysres_common_constants =\n    \"SYSRES_COMMON \"\n    + \"SYSRES_CONST \"\n    + \"SYSRES_MBFUNC \"\n    + \"SYSRES_SBDATA \"\n    + \"SYSRES_SBGUI \"\n    + \"SYSRES_SBINTF \"\n    + \"SYSRES_SBREFDSC \"\n    + \"SYSRES_SQLERRORS \"\n    + \"SYSRES_SYSCOMP \";\n\n  // Константы ==> built_in\n  const CONSTANTS =\n    sysres_constants\n    + base_constants\n    + base_group_name_constants\n    + decision_block_properties_constants\n    + file_extension_constants\n    + job_block_properties_constants\n    + language_code_constants\n    + launching_external_applications_constants\n    + link_kind_constants\n    + lock_type_constants\n    + monitor_block_properties_constants\n    + notice_block_properties_constants\n    + object_events_constants\n    + object_params_constants\n    + other_constants\n    + privileges_constants\n    + pseudoreference_code_constants\n    + requisite_ISBCertificateType_values_constants\n    + requisite_ISBEDocStorageType_values_constants\n    + requisite_compType2_values_constants\n    + requisite_name_constants\n    + result_constants\n    + rule_identification_constants\n    + script_block_properties_constants\n    + subtask_block_properties_constants\n    + system_component_constants\n    + system_dialogs_constants\n    + system_reference_names_constants\n    + table_name_constants\n    + test_constants\n    + using_the_dialog_windows_constants\n    + using_the_document_constants\n    + using_the_EA_and_encryption_constants\n    + using_the_ISBL_editor_constants\n    + wait_block_properties_constants\n    + sysres_common_constants;\n\n  // enum TAccountType\n  const TAccountType = \"atUser atGroup atRole \";\n\n  // enum TActionEnabledMode\n  const TActionEnabledMode =\n    \"aemEnabledAlways \"\n    + \"aemDisabledAlways \"\n    + \"aemEnabledOnBrowse \"\n    + \"aemEnabledOnEdit \"\n    + \"aemDisabledOnBrowseEmpty \";\n\n  // enum TAddPosition\n  const TAddPosition = \"apBegin apEnd \";\n\n  // enum TAlignment\n  const TAlignment = \"alLeft alRight \";\n\n  // enum TAreaShowMode\n  const TAreaShowMode =\n    \"asmNever \"\n    + \"asmNoButCustomize \"\n    + \"asmAsLastTime \"\n    + \"asmYesButCustomize \"\n    + \"asmAlways \";\n\n  // enum TCertificateInvalidationReason\n  const TCertificateInvalidationReason = \"cirCommon cirRevoked \";\n\n  // enum TCertificateType\n  const TCertificateType = \"ctSignature ctEncode ctSignatureEncode \";\n\n  // enum TCheckListBoxItemState\n  const TCheckListBoxItemState = \"clbUnchecked clbChecked clbGrayed \";\n\n  // enum TCloseOnEsc\n  const TCloseOnEsc = \"ceISB ceAlways ceNever \";\n\n  // enum TCompType\n  const TCompType =\n    \"ctDocument \"\n    + \"ctReference \"\n    + \"ctScript \"\n    + \"ctUnknown \"\n    + \"ctReport \"\n    + \"ctDialog \"\n    + \"ctFunction \"\n    + \"ctFolder \"\n    + \"ctEDocument \"\n    + \"ctTask \"\n    + \"ctJob \"\n    + \"ctNotice \"\n    + \"ctControlJob \";\n\n  // enum TConditionFormat\n  const TConditionFormat = \"cfInternal cfDisplay \";\n\n  // enum TConnectionIntent\n  const TConnectionIntent = \"ciUnspecified ciWrite ciRead \";\n\n  // enum TContentKind\n  const TContentKind =\n    \"ckFolder \"\n    + \"ckEDocument \"\n    + \"ckTask \"\n    + \"ckJob \"\n    + \"ckComponentToken \"\n    + \"ckAny \"\n    + \"ckReference \"\n    + \"ckScript \"\n    + \"ckReport \"\n    + \"ckDialog \";\n\n  // enum TControlType\n  const TControlType =\n    \"ctISBLEditor \"\n    + \"ctBevel \"\n    + \"ctButton \"\n    + \"ctCheckListBox \"\n    + \"ctComboBox \"\n    + \"ctComboEdit \"\n    + \"ctGrid \"\n    + \"ctDBCheckBox \"\n    + \"ctDBComboBox \"\n    + \"ctDBEdit \"\n    + \"ctDBEllipsis \"\n    + \"ctDBMemo \"\n    + \"ctDBNavigator \"\n    + \"ctDBRadioGroup \"\n    + \"ctDBStatusLabel \"\n    + \"ctEdit \"\n    + \"ctGroupBox \"\n    + \"ctInplaceHint \"\n    + \"ctMemo \"\n    + \"ctPanel \"\n    + \"ctListBox \"\n    + \"ctRadioButton \"\n    + \"ctRichEdit \"\n    + \"ctTabSheet \"\n    + \"ctWebBrowser \"\n    + \"ctImage \"\n    + \"ctHyperLink \"\n    + \"ctLabel \"\n    + \"ctDBMultiEllipsis \"\n    + \"ctRibbon \"\n    + \"ctRichView \"\n    + \"ctInnerPanel \"\n    + \"ctPanelGroup \"\n    + \"ctBitButton \";\n\n  // enum TCriterionContentType\n  const TCriterionContentType =\n    \"cctDate \"\n    + \"cctInteger \"\n    + \"cctNumeric \"\n    + \"cctPick \"\n    + \"cctReference \"\n    + \"cctString \"\n    + \"cctText \";\n\n  // enum TCultureType\n  const TCultureType = \"cltInternal cltPrimary cltGUI \";\n\n  // enum TDataSetEventType\n  const TDataSetEventType =\n    \"dseBeforeOpen \"\n    + \"dseAfterOpen \"\n    + \"dseBeforeClose \"\n    + \"dseAfterClose \"\n    + \"dseOnValidDelete \"\n    + \"dseBeforeDelete \"\n    + \"dseAfterDelete \"\n    + \"dseAfterDeleteOutOfTransaction \"\n    + \"dseOnDeleteError \"\n    + \"dseBeforeInsert \"\n    + \"dseAfterInsert \"\n    + \"dseOnValidUpdate \"\n    + \"dseBeforeUpdate \"\n    + \"dseOnUpdateRatifiedRecord \"\n    + \"dseAfterUpdate \"\n    + \"dseAfterUpdateOutOfTransaction \"\n    + \"dseOnUpdateError \"\n    + \"dseAfterScroll \"\n    + \"dseOnOpenRecord \"\n    + \"dseOnCloseRecord \"\n    + \"dseBeforeCancel \"\n    + \"dseAfterCancel \"\n    + \"dseOnUpdateDeadlockError \"\n    + \"dseBeforeDetailUpdate \"\n    + \"dseOnPrepareUpdate \"\n    + \"dseOnAnyRequisiteChange \";\n\n  // enum TDataSetState\n  const TDataSetState = \"dssEdit dssInsert dssBrowse dssInActive \";\n\n  // enum TDateFormatType\n  const TDateFormatType = \"dftDate dftShortDate dftDateTime dftTimeStamp \";\n\n  // enum TDateOffsetType\n  const TDateOffsetType = \"dotDays dotHours dotMinutes dotSeconds \";\n\n  // enum TDateTimeKind\n  const TDateTimeKind = \"dtkndLocal dtkndUTC \";\n\n  // enum TDeaAccessRights\n  const TDeaAccessRights = \"arNone arView arEdit arFull \";\n\n  // enum TDocumentDefaultAction\n  const TDocumentDefaultAction = \"ddaView ddaEdit \";\n\n  // enum TEditMode\n  const TEditMode =\n    \"emLock \"\n    + \"emEdit \"\n    + \"emSign \"\n    + \"emExportWithLock \"\n    + \"emImportWithUnlock \"\n    + \"emChangeVersionNote \"\n    + \"emOpenForModify \"\n    + \"emChangeLifeStage \"\n    + \"emDelete \"\n    + \"emCreateVersion \"\n    + \"emImport \"\n    + \"emUnlockExportedWithLock \"\n    + \"emStart \"\n    + \"emAbort \"\n    + \"emReInit \"\n    + \"emMarkAsReaded \"\n    + \"emMarkAsUnreaded \"\n    + \"emPerform \"\n    + \"emAccept \"\n    + \"emResume \"\n    + \"emChangeRights \"\n    + \"emEditRoute \"\n    + \"emEditObserver \"\n    + \"emRecoveryFromLocalCopy \"\n    + \"emChangeWorkAccessType \"\n    + \"emChangeEncodeTypeToCertificate \"\n    + \"emChangeEncodeTypeToPassword \"\n    + \"emChangeEncodeTypeToNone \"\n    + \"emChangeEncodeTypeToCertificatePassword \"\n    + \"emChangeStandardRoute \"\n    + \"emGetText \"\n    + \"emOpenForView \"\n    + \"emMoveToStorage \"\n    + \"emCreateObject \"\n    + \"emChangeVersionHidden \"\n    + \"emDeleteVersion \"\n    + \"emChangeLifeCycleStage \"\n    + \"emApprovingSign \"\n    + \"emExport \"\n    + \"emContinue \"\n    + \"emLockFromEdit \"\n    + \"emUnLockForEdit \"\n    + \"emLockForServer \"\n    + \"emUnlockFromServer \"\n    + \"emDelegateAccessRights \"\n    + \"emReEncode \";\n\n  // enum TEditorCloseObservType\n  const TEditorCloseObservType = \"ecotFile ecotProcess \";\n\n  // enum TEdmsApplicationAction\n  const TEdmsApplicationAction = \"eaGet eaCopy eaCreate eaCreateStandardRoute \";\n\n  // enum TEDocumentLockType\n  const TEDocumentLockType = \"edltAll edltNothing edltQuery \";\n\n  // enum TEDocumentStepShowMode\n  const TEDocumentStepShowMode = \"essmText essmCard \";\n\n  // enum TEDocumentStepVersionType\n  const TEDocumentStepVersionType = \"esvtLast esvtLastActive esvtSpecified \";\n\n  // enum TEDocumentStorageFunction\n  const TEDocumentStorageFunction = \"edsfExecutive edsfArchive \";\n\n  // enum TEDocumentStorageType\n  const TEDocumentStorageType = \"edstSQLServer edstFile \";\n\n  // enum TEDocumentVersionSourceType\n  const TEDocumentVersionSourceType =\n    \"edvstNone edvstEDocumentVersionCopy edvstFile edvstTemplate edvstScannedFile \";\n\n  // enum TEDocumentVersionState\n  const TEDocumentVersionState = \"vsDefault vsDesign vsActive vsObsolete \";\n\n  // enum TEncodeType\n  const TEncodeType = \"etNone etCertificate etPassword etCertificatePassword \";\n\n  // enum TExceptionCategory\n  const TExceptionCategory = \"ecException ecWarning ecInformation \";\n\n  // enum TExportedSignaturesType\n  const TExportedSignaturesType = \"estAll estApprovingOnly \";\n\n  // enum TExportedVersionType\n  const TExportedVersionType = \"evtLast evtLastActive evtQuery \";\n\n  // enum TFieldDataType\n  const TFieldDataType =\n    \"fdtString \"\n    + \"fdtNumeric \"\n    + \"fdtInteger \"\n    + \"fdtDate \"\n    + \"fdtText \"\n    + \"fdtUnknown \"\n    + \"fdtWideString \"\n    + \"fdtLargeInteger \";\n\n  // enum TFolderType\n  const TFolderType =\n    \"ftInbox \"\n    + \"ftOutbox \"\n    + \"ftFavorites \"\n    + \"ftCommonFolder \"\n    + \"ftUserFolder \"\n    + \"ftComponents \"\n    + \"ftQuickLaunch \"\n    + \"ftShortcuts \"\n    + \"ftSearch \";\n\n  // enum TGridRowHeight\n  const TGridRowHeight = \"grhAuto \" + \"grhX1 \" + \"grhX2 \" + \"grhX3 \";\n\n  // enum THyperlinkType\n  const THyperlinkType = \"hltText \" + \"hltRTF \" + \"hltHTML \";\n\n  // enum TImageFileFormat\n  const TImageFileFormat =\n    \"iffBMP \"\n    + \"iffJPEG \"\n    + \"iffMultiPageTIFF \"\n    + \"iffSinglePageTIFF \"\n    + \"iffTIFF \"\n    + \"iffPNG \";\n\n  // enum TImageMode\n  const TImageMode = \"im8bGrayscale \" + \"im24bRGB \" + \"im1bMonochrome \";\n\n  // enum TImageType\n  const TImageType = \"itBMP \" + \"itJPEG \" + \"itWMF \" + \"itPNG \";\n\n  // enum TInplaceHintKind\n  const TInplaceHintKind =\n    \"ikhInformation \" + \"ikhWarning \" + \"ikhError \" + \"ikhNoIcon \";\n\n  // enum TISBLContext\n  const TISBLContext =\n    \"icUnknown \"\n    + \"icScript \"\n    + \"icFunction \"\n    + \"icIntegratedReport \"\n    + \"icAnalyticReport \"\n    + \"icDataSetEventHandler \"\n    + \"icActionHandler \"\n    + \"icFormEventHandler \"\n    + \"icLookUpEventHandler \"\n    + \"icRequisiteChangeEventHandler \"\n    + \"icBeforeSearchEventHandler \"\n    + \"icRoleCalculation \"\n    + \"icSelectRouteEventHandler \"\n    + \"icBlockPropertyCalculation \"\n    + \"icBlockQueryParamsEventHandler \"\n    + \"icChangeSearchResultEventHandler \"\n    + \"icBlockEventHandler \"\n    + \"icSubTaskInitEventHandler \"\n    + \"icEDocDataSetEventHandler \"\n    + \"icEDocLookUpEventHandler \"\n    + \"icEDocActionHandler \"\n    + \"icEDocFormEventHandler \"\n    + \"icEDocRequisiteChangeEventHandler \"\n    + \"icStructuredConversionRule \"\n    + \"icStructuredConversionEventBefore \"\n    + \"icStructuredConversionEventAfter \"\n    + \"icWizardEventHandler \"\n    + \"icWizardFinishEventHandler \"\n    + \"icWizardStepEventHandler \"\n    + \"icWizardStepFinishEventHandler \"\n    + \"icWizardActionEnableEventHandler \"\n    + \"icWizardActionExecuteEventHandler \"\n    + \"icCreateJobsHandler \"\n    + \"icCreateNoticesHandler \"\n    + \"icBeforeLookUpEventHandler \"\n    + \"icAfterLookUpEventHandler \"\n    + \"icTaskAbortEventHandler \"\n    + \"icWorkflowBlockActionHandler \"\n    + \"icDialogDataSetEventHandler \"\n    + \"icDialogActionHandler \"\n    + \"icDialogLookUpEventHandler \"\n    + \"icDialogRequisiteChangeEventHandler \"\n    + \"icDialogFormEventHandler \"\n    + \"icDialogValidCloseEventHandler \"\n    + \"icBlockFormEventHandler \"\n    + \"icTaskFormEventHandler \"\n    + \"icReferenceMethod \"\n    + \"icEDocMethod \"\n    + \"icDialogMethod \"\n    + \"icProcessMessageHandler \";\n\n  // enum TItemShow\n  const TItemShow = \"isShow \" + \"isHide \" + \"isByUserSettings \";\n\n  // enum TJobKind\n  const TJobKind = \"jkJob \" + \"jkNotice \" + \"jkControlJob \";\n\n  // enum TJoinType\n  const TJoinType = \"jtInner \" + \"jtLeft \" + \"jtRight \" + \"jtFull \" + \"jtCross \";\n\n  // enum TLabelPos\n  const TLabelPos = \"lbpAbove \" + \"lbpBelow \" + \"lbpLeft \" + \"lbpRight \";\n\n  // enum TLicensingType\n  const TLicensingType = \"eltPerConnection \" + \"eltPerUser \";\n\n  // enum TLifeCycleStageFontColor\n  const TLifeCycleStageFontColor =\n    \"sfcUndefined \"\n    + \"sfcBlack \"\n    + \"sfcGreen \"\n    + \"sfcRed \"\n    + \"sfcBlue \"\n    + \"sfcOrange \"\n    + \"sfcLilac \";\n\n  // enum TLifeCycleStageFontStyle\n  const TLifeCycleStageFontStyle = \"sfsItalic \" + \"sfsStrikeout \" + \"sfsNormal \";\n\n  // enum TLockableDevelopmentComponentType\n  const TLockableDevelopmentComponentType =\n    \"ldctStandardRoute \"\n    + \"ldctWizard \"\n    + \"ldctScript \"\n    + \"ldctFunction \"\n    + \"ldctRouteBlock \"\n    + \"ldctIntegratedReport \"\n    + \"ldctAnalyticReport \"\n    + \"ldctReferenceType \"\n    + \"ldctEDocumentType \"\n    + \"ldctDialog \"\n    + \"ldctServerEvents \";\n\n  // enum TMaxRecordCountRestrictionType\n  const TMaxRecordCountRestrictionType =\n    \"mrcrtNone \" + \"mrcrtUser \" + \"mrcrtMaximal \" + \"mrcrtCustom \";\n\n  // enum TRangeValueType\n  const TRangeValueType =\n    \"vtEqual \" + \"vtGreaterOrEqual \" + \"vtLessOrEqual \" + \"vtRange \";\n\n  // enum TRelativeDate\n  const TRelativeDate =\n    \"rdYesterday \"\n    + \"rdToday \"\n    + \"rdTomorrow \"\n    + \"rdThisWeek \"\n    + \"rdThisMonth \"\n    + \"rdThisYear \"\n    + \"rdNextMonth \"\n    + \"rdNextWeek \"\n    + \"rdLastWeek \"\n    + \"rdLastMonth \";\n\n  // enum TReportDestination\n  const TReportDestination = \"rdWindow \" + \"rdFile \" + \"rdPrinter \";\n\n  // enum TReqDataType\n  const TReqDataType =\n    \"rdtString \"\n    + \"rdtNumeric \"\n    + \"rdtInteger \"\n    + \"rdtDate \"\n    + \"rdtReference \"\n    + \"rdtAccount \"\n    + \"rdtText \"\n    + \"rdtPick \"\n    + \"rdtUnknown \"\n    + \"rdtLargeInteger \"\n    + \"rdtDocument \";\n\n  // enum TRequisiteEventType\n  const TRequisiteEventType = \"reOnChange \" + \"reOnChangeValues \";\n\n  // enum TSBTimeType\n  const TSBTimeType = \"ttGlobal \" + \"ttLocal \" + \"ttUser \" + \"ttSystem \";\n\n  // enum TSearchShowMode\n  const TSearchShowMode =\n    \"ssmBrowse \" + \"ssmSelect \" + \"ssmMultiSelect \" + \"ssmBrowseModal \";\n\n  // enum TSelectMode\n  const TSelectMode = \"smSelect \" + \"smLike \" + \"smCard \";\n\n  // enum TSignatureType\n  const TSignatureType = \"stNone \" + \"stAuthenticating \" + \"stApproving \";\n\n  // enum TSignerContentType\n  const TSignerContentType = \"sctString \" + \"sctStream \";\n\n  // enum TStringsSortType\n  const TStringsSortType = \"sstAnsiSort \" + \"sstNaturalSort \";\n\n  // enum TStringValueType\n  const TStringValueType = \"svtEqual \" + \"svtContain \";\n\n  // enum TStructuredObjectAttributeType\n  const TStructuredObjectAttributeType =\n    \"soatString \"\n    + \"soatNumeric \"\n    + \"soatInteger \"\n    + \"soatDatetime \"\n    + \"soatReferenceRecord \"\n    + \"soatText \"\n    + \"soatPick \"\n    + \"soatBoolean \"\n    + \"soatEDocument \"\n    + \"soatAccount \"\n    + \"soatIntegerCollection \"\n    + \"soatNumericCollection \"\n    + \"soatStringCollection \"\n    + \"soatPickCollection \"\n    + \"soatDatetimeCollection \"\n    + \"soatBooleanCollection \"\n    + \"soatReferenceRecordCollection \"\n    + \"soatEDocumentCollection \"\n    + \"soatAccountCollection \"\n    + \"soatContents \"\n    + \"soatUnknown \";\n\n  // enum TTaskAbortReason\n  const TTaskAbortReason = \"tarAbortByUser \" + \"tarAbortByWorkflowException \";\n\n  // enum TTextValueType\n  const TTextValueType = \"tvtAllWords \" + \"tvtExactPhrase \" + \"tvtAnyWord \";\n\n  // enum TUserObjectStatus\n  const TUserObjectStatus =\n    \"usNone \"\n    + \"usCompleted \"\n    + \"usRedSquare \"\n    + \"usBlueSquare \"\n    + \"usYellowSquare \"\n    + \"usGreenSquare \"\n    + \"usOrangeSquare \"\n    + \"usPurpleSquare \"\n    + \"usFollowUp \";\n\n  // enum TUserType\n  const TUserType =\n    \"utUnknown \"\n    + \"utUser \"\n    + \"utDeveloper \"\n    + \"utAdministrator \"\n    + \"utSystemDeveloper \"\n    + \"utDisconnected \";\n\n  // enum TValuesBuildType\n  const TValuesBuildType =\n    \"btAnd \" + \"btDetailAnd \" + \"btOr \" + \"btNotOr \" + \"btOnly \";\n\n  // enum TViewMode\n  const TViewMode = \"vmView \" + \"vmSelect \" + \"vmNavigation \";\n\n  // enum TViewSelectionMode\n  const TViewSelectionMode =\n    \"vsmSingle \" + \"vsmMultiple \" + \"vsmMultipleCheck \" + \"vsmNoSelection \";\n\n  // enum TWizardActionType\n  const TWizardActionType =\n    \"wfatPrevious \" + \"wfatNext \" + \"wfatCancel \" + \"wfatFinish \";\n\n  // enum TWizardFormElementProperty\n  const TWizardFormElementProperty =\n    \"wfepUndefined \"\n    + \"wfepText3 \"\n    + \"wfepText6 \"\n    + \"wfepText9 \"\n    + \"wfepSpinEdit \"\n    + \"wfepDropDown \"\n    + \"wfepRadioGroup \"\n    + \"wfepFlag \"\n    + \"wfepText12 \"\n    + \"wfepText15 \"\n    + \"wfepText18 \"\n    + \"wfepText21 \"\n    + \"wfepText24 \"\n    + \"wfepText27 \"\n    + \"wfepText30 \"\n    + \"wfepRadioGroupColumn1 \"\n    + \"wfepRadioGroupColumn2 \"\n    + \"wfepRadioGroupColumn3 \";\n\n  // enum TWizardFormElementType\n  const TWizardFormElementType =\n    \"wfetQueryParameter \" + \"wfetText \" + \"wfetDelimiter \" + \"wfetLabel \";\n\n  // enum TWizardParamType\n  const TWizardParamType =\n    \"wptString \"\n    + \"wptInteger \"\n    + \"wptNumeric \"\n    + \"wptBoolean \"\n    + \"wptDateTime \"\n    + \"wptPick \"\n    + \"wptText \"\n    + \"wptUser \"\n    + \"wptUserList \"\n    + \"wptEDocumentInfo \"\n    + \"wptEDocumentInfoList \"\n    + \"wptReferenceRecordInfo \"\n    + \"wptReferenceRecordInfoList \"\n    + \"wptFolderInfo \"\n    + \"wptTaskInfo \"\n    + \"wptContents \"\n    + \"wptFileName \"\n    + \"wptDate \";\n\n  // enum TWizardStepResult\n  const TWizardStepResult =\n    \"wsrComplete \"\n    + \"wsrGoNext \"\n    + \"wsrGoPrevious \"\n    + \"wsrCustom \"\n    + \"wsrCancel \"\n    + \"wsrGoFinal \";\n\n  // enum TWizardStepType\n  const TWizardStepType =\n    \"wstForm \"\n    + \"wstEDocument \"\n    + \"wstTaskCard \"\n    + \"wstReferenceRecordCard \"\n    + \"wstFinal \";\n\n  // enum TWorkAccessType\n  const TWorkAccessType = \"waAll \" + \"waPerformers \" + \"waManual \";\n\n  // enum TWorkflowBlockType\n  const TWorkflowBlockType =\n    \"wsbStart \"\n    + \"wsbFinish \"\n    + \"wsbNotice \"\n    + \"wsbStep \"\n    + \"wsbDecision \"\n    + \"wsbWait \"\n    + \"wsbMonitor \"\n    + \"wsbScript \"\n    + \"wsbConnector \"\n    + \"wsbSubTask \"\n    + \"wsbLifeCycleStage \"\n    + \"wsbPause \";\n\n  // enum TWorkflowDataType\n  const TWorkflowDataType =\n    \"wdtInteger \"\n    + \"wdtFloat \"\n    + \"wdtString \"\n    + \"wdtPick \"\n    + \"wdtDateTime \"\n    + \"wdtBoolean \"\n    + \"wdtTask \"\n    + \"wdtJob \"\n    + \"wdtFolder \"\n    + \"wdtEDocument \"\n    + \"wdtReferenceRecord \"\n    + \"wdtUser \"\n    + \"wdtGroup \"\n    + \"wdtRole \"\n    + \"wdtIntegerCollection \"\n    + \"wdtFloatCollection \"\n    + \"wdtStringCollection \"\n    + \"wdtPickCollection \"\n    + \"wdtDateTimeCollection \"\n    + \"wdtBooleanCollection \"\n    + \"wdtTaskCollection \"\n    + \"wdtJobCollection \"\n    + \"wdtFolderCollection \"\n    + \"wdtEDocumentCollection \"\n    + \"wdtReferenceRecordCollection \"\n    + \"wdtUserCollection \"\n    + \"wdtGroupCollection \"\n    + \"wdtRoleCollection \"\n    + \"wdtContents \"\n    + \"wdtUserList \"\n    + \"wdtSearchDescription \"\n    + \"wdtDeadLine \"\n    + \"wdtPickSet \"\n    + \"wdtAccountCollection \";\n\n  // enum TWorkImportance\n  const TWorkImportance = \"wiLow \" + \"wiNormal \" + \"wiHigh \";\n\n  // enum TWorkRouteType\n  const TWorkRouteType = \"wrtSoft \" + \"wrtHard \";\n\n  // enum TWorkState\n  const TWorkState =\n    \"wsInit \"\n    + \"wsRunning \"\n    + \"wsDone \"\n    + \"wsControlled \"\n    + \"wsAborted \"\n    + \"wsContinued \";\n\n  // enum TWorkTextBuildingMode\n  const TWorkTextBuildingMode =\n    \"wtmFull \" + \"wtmFromCurrent \" + \"wtmOnlyCurrent \";\n\n  // Перечисления\n  const ENUMS =\n    TAccountType\n    + TActionEnabledMode\n    + TAddPosition\n    + TAlignment\n    + TAreaShowMode\n    + TCertificateInvalidationReason\n    + TCertificateType\n    + TCheckListBoxItemState\n    + TCloseOnEsc\n    + TCompType\n    + TConditionFormat\n    + TConnectionIntent\n    + TContentKind\n    + TControlType\n    + TCriterionContentType\n    + TCultureType\n    + TDataSetEventType\n    + TDataSetState\n    + TDateFormatType\n    + TDateOffsetType\n    + TDateTimeKind\n    + TDeaAccessRights\n    + TDocumentDefaultAction\n    + TEditMode\n    + TEditorCloseObservType\n    + TEdmsApplicationAction\n    + TEDocumentLockType\n    + TEDocumentStepShowMode\n    + TEDocumentStepVersionType\n    + TEDocumentStorageFunction\n    + TEDocumentStorageType\n    + TEDocumentVersionSourceType\n    + TEDocumentVersionState\n    + TEncodeType\n    + TExceptionCategory\n    + TExportedSignaturesType\n    + TExportedVersionType\n    + TFieldDataType\n    + TFolderType\n    + TGridRowHeight\n    + THyperlinkType\n    + TImageFileFormat\n    + TImageMode\n    + TImageType\n    + TInplaceHintKind\n    + TISBLContext\n    + TItemShow\n    + TJobKind\n    + TJoinType\n    + TLabelPos\n    + TLicensingType\n    + TLifeCycleStageFontColor\n    + TLifeCycleStageFontStyle\n    + TLockableDevelopmentComponentType\n    + TMaxRecordCountRestrictionType\n    + TRangeValueType\n    + TRelativeDate\n    + TReportDestination\n    + TReqDataType\n    + TRequisiteEventType\n    + TSBTimeType\n    + TSearchShowMode\n    + TSelectMode\n    + TSignatureType\n    + TSignerContentType\n    + TStringsSortType\n    + TStringValueType\n    + TStructuredObjectAttributeType\n    + TTaskAbortReason\n    + TTextValueType\n    + TUserObjectStatus\n    + TUserType\n    + TValuesBuildType\n    + TViewMode\n    + TViewSelectionMode\n    + TWizardActionType\n    + TWizardFormElementProperty\n    + TWizardFormElementType\n    + TWizardParamType\n    + TWizardStepResult\n    + TWizardStepType\n    + TWorkAccessType\n    + TWorkflowBlockType\n    + TWorkflowDataType\n    + TWorkImportance\n    + TWorkRouteType\n    + TWorkState\n    + TWorkTextBuildingMode;\n\n  // Системные функции ==> SYSFUNCTIONS\n  const system_functions =\n    \"AddSubString \"\n    + \"AdjustLineBreaks \"\n    + \"AmountInWords \"\n    + \"Analysis \"\n    + \"ArrayDimCount \"\n    + \"ArrayHighBound \"\n    + \"ArrayLowBound \"\n    + \"ArrayOf \"\n    + \"ArrayReDim \"\n    + \"Assert \"\n    + \"Assigned \"\n    + \"BeginOfMonth \"\n    + \"BeginOfPeriod \"\n    + \"BuildProfilingOperationAnalysis \"\n    + \"CallProcedure \"\n    + \"CanReadFile \"\n    + \"CArrayElement \"\n    + \"CDataSetRequisite \"\n    + \"ChangeDate \"\n    + \"ChangeReferenceDataset \"\n    + \"Char \"\n    + \"CharPos \"\n    + \"CheckParam \"\n    + \"CheckParamValue \"\n    + \"CompareStrings \"\n    + \"ConstantExists \"\n    + \"ControlState \"\n    + \"ConvertDateStr \"\n    + \"Copy \"\n    + \"CopyFile \"\n    + \"CreateArray \"\n    + \"CreateCachedReference \"\n    + \"CreateConnection \"\n    + \"CreateDialog \"\n    + \"CreateDualListDialog \"\n    + \"CreateEditor \"\n    + \"CreateException \"\n    + \"CreateFile \"\n    + \"CreateFolderDialog \"\n    + \"CreateInputDialog \"\n    + \"CreateLinkFile \"\n    + \"CreateList \"\n    + \"CreateLock \"\n    + \"CreateMemoryDataSet \"\n    + \"CreateObject \"\n    + \"CreateOpenDialog \"\n    + \"CreateProgress \"\n    + \"CreateQuery \"\n    + \"CreateReference \"\n    + \"CreateReport \"\n    + \"CreateSaveDialog \"\n    + \"CreateScript \"\n    + \"CreateSQLPivotFunction \"\n    + \"CreateStringList \"\n    + \"CreateTreeListSelectDialog \"\n    + \"CSelectSQL \"\n    + \"CSQL \"\n    + \"CSubString \"\n    + \"CurrentUserID \"\n    + \"CurrentUserName \"\n    + \"CurrentVersion \"\n    + \"DataSetLocateEx \"\n    + \"DateDiff \"\n    + \"DateTimeDiff \"\n    + \"DateToStr \"\n    + \"DayOfWeek \"\n    + \"DeleteFile \"\n    + \"DirectoryExists \"\n    + \"DisableCheckAccessRights \"\n    + \"DisableCheckFullShowingRestriction \"\n    + \"DisableMassTaskSendingRestrictions \"\n    + \"DropTable \"\n    + \"DupeString \"\n    + \"EditText \"\n    + \"EnableCheckAccessRights \"\n    + \"EnableCheckFullShowingRestriction \"\n    + \"EnableMassTaskSendingRestrictions \"\n    + \"EndOfMonth \"\n    + \"EndOfPeriod \"\n    + \"ExceptionExists \"\n    + \"ExceptionsOff \"\n    + \"ExceptionsOn \"\n    + \"Execute \"\n    + \"ExecuteProcess \"\n    + \"Exit \"\n    + \"ExpandEnvironmentVariables \"\n    + \"ExtractFileDrive \"\n    + \"ExtractFileExt \"\n    + \"ExtractFileName \"\n    + \"ExtractFilePath \"\n    + \"ExtractParams \"\n    + \"FileExists \"\n    + \"FileSize \"\n    + \"FindFile \"\n    + \"FindSubString \"\n    + \"FirmContext \"\n    + \"ForceDirectories \"\n    + \"Format \"\n    + \"FormatDate \"\n    + \"FormatNumeric \"\n    + \"FormatSQLDate \"\n    + \"FormatString \"\n    + \"FreeException \"\n    + \"GetComponent \"\n    + \"GetComponentLaunchParam \"\n    + \"GetConstant \"\n    + \"GetLastException \"\n    + \"GetReferenceRecord \"\n    + \"GetRefTypeByRefID \"\n    + \"GetTableID \"\n    + \"GetTempFolder \"\n    + \"IfThen \"\n    + \"In \"\n    + \"IndexOf \"\n    + \"InputDialog \"\n    + \"InputDialogEx \"\n    + \"InteractiveMode \"\n    + \"IsFileLocked \"\n    + \"IsGraphicFile \"\n    + \"IsNumeric \"\n    + \"Length \"\n    + \"LoadString \"\n    + \"LoadStringFmt \"\n    + \"LocalTimeToUTC \"\n    + \"LowerCase \"\n    + \"Max \"\n    + \"MessageBox \"\n    + \"MessageBoxEx \"\n    + \"MimeDecodeBinary \"\n    + \"MimeDecodeString \"\n    + \"MimeEncodeBinary \"\n    + \"MimeEncodeString \"\n    + \"Min \"\n    + \"MoneyInWords \"\n    + \"MoveFile \"\n    + \"NewID \"\n    + \"Now \"\n    + \"OpenFile \"\n    + \"Ord \"\n    + \"Precision \"\n    + \"Raise \"\n    + \"ReadCertificateFromFile \"\n    + \"ReadFile \"\n    + \"ReferenceCodeByID \"\n    + \"ReferenceNumber \"\n    + \"ReferenceRequisiteMode \"\n    + \"ReferenceRequisiteValue \"\n    + \"RegionDateSettings \"\n    + \"RegionNumberSettings \"\n    + \"RegionTimeSettings \"\n    + \"RegRead \"\n    + \"RegWrite \"\n    + \"RenameFile \"\n    + \"Replace \"\n    + \"Round \"\n    + \"SelectServerCode \"\n    + \"SelectSQL \"\n    + \"ServerDateTime \"\n    + \"SetConstant \"\n    + \"SetManagedFolderFieldsState \"\n    + \"ShowConstantsInputDialog \"\n    + \"ShowMessage \"\n    + \"Sleep \"\n    + \"Split \"\n    + \"SQL \"\n    + \"SQL2XLSTAB \"\n    + \"SQLProfilingSendReport \"\n    + \"StrToDate \"\n    + \"SubString \"\n    + \"SubStringCount \"\n    + \"SystemSetting \"\n    + \"Time \"\n    + \"TimeDiff \"\n    + \"Today \"\n    + \"Transliterate \"\n    + \"Trim \"\n    + \"UpperCase \"\n    + \"UserStatus \"\n    + \"UTCToLocalTime \"\n    + \"ValidateXML \"\n    + \"VarIsClear \"\n    + \"VarIsEmpty \"\n    + \"VarIsNull \"\n    + \"WorkTimeDiff \"\n    + \"WriteFile \"\n    + \"WriteFileEx \"\n    + \"WriteObjectHistory \"\n    + \"Анализ \"\n    + \"БазаДанных \"\n    + \"БлокЕсть \"\n    + \"БлокЕстьРасш \"\n    + \"БлокИнфо \"\n    + \"БлокСнять \"\n    + \"БлокСнятьРасш \"\n    + \"БлокУстановить \"\n    + \"Ввод \"\n    + \"ВводМеню \"\n    + \"ВедС \"\n    + \"ВедСпр \"\n    + \"ВерхняяГраницаМассива \"\n    + \"ВнешПрогр \"\n    + \"Восст \"\n    + \"ВременнаяПапка \"\n    + \"Время \"\n    + \"ВыборSQL \"\n    + \"ВыбратьЗапись \"\n    + \"ВыделитьСтр \"\n    + \"Вызвать \"\n    + \"Выполнить \"\n    + \"ВыпПрогр \"\n    + \"ГрафическийФайл \"\n    + \"ГруппаДополнительно \"\n    + \"ДатаВремяСерв \"\n    + \"ДеньНедели \"\n    + \"ДиалогДаНет \"\n    + \"ДлинаСтр \"\n    + \"ДобПодстр \"\n    + \"ЕПусто \"\n    + \"ЕслиТо \"\n    + \"ЕЧисло \"\n    + \"ЗамПодстр \"\n    + \"ЗаписьСправочника \"\n    + \"ЗначПоляСпр \"\n    + \"ИДТипСпр \"\n    + \"ИзвлечьДиск \"\n    + \"ИзвлечьИмяФайла \"\n    + \"ИзвлечьПуть \"\n    + \"ИзвлечьРасширение \"\n    + \"ИзмДат \"\n    + \"ИзменитьРазмерМассива \"\n    + \"ИзмеренийМассива \"\n    + \"ИмяОрг \"\n    + \"ИмяПоляСпр \"\n    + \"Индекс \"\n    + \"ИндикаторЗакрыть \"\n    + \"ИндикаторОткрыть \"\n    + \"ИндикаторШаг \"\n    + \"ИнтерактивныйРежим \"\n    + \"ИтогТблСпр \"\n    + \"КодВидВедСпр \"\n    + \"КодВидСпрПоИД \"\n    + \"КодПоAnalit \"\n    + \"КодСимвола \"\n    + \"КодСпр \"\n    + \"КолПодстр \"\n    + \"КолПроп \"\n    + \"КонМес \"\n    + \"Конст \"\n    + \"КонстЕсть \"\n    + \"КонстЗнач \"\n    + \"КонТран \"\n    + \"КопироватьФайл \"\n    + \"КопияСтр \"\n    + \"КПериод \"\n    + \"КСтрТблСпр \"\n    + \"Макс \"\n    + \"МаксСтрТблСпр \"\n    + \"Массив \"\n    + \"Меню \"\n    + \"МенюРасш \"\n    + \"Мин \"\n    + \"НаборДанныхНайтиРасш \"\n    + \"НаимВидСпр \"\n    + \"НаимПоAnalit \"\n    + \"НаимСпр \"\n    + \"НастроитьПереводыСтрок \"\n    + \"НачМес \"\n    + \"НачТран \"\n    + \"НижняяГраницаМассива \"\n    + \"НомерСпр \"\n    + \"НПериод \"\n    + \"Окно \"\n    + \"Окр \"\n    + \"Окружение \"\n    + \"ОтлИнфДобавить \"\n    + \"ОтлИнфУдалить \"\n    + \"Отчет \"\n    + \"ОтчетАнал \"\n    + \"ОтчетИнт \"\n    + \"ПапкаСуществует \"\n    + \"Пауза \"\n    + \"ПВыборSQL \"\n    + \"ПереименоватьФайл \"\n    + \"Переменные \"\n    + \"ПереместитьФайл \"\n    + \"Подстр \"\n    + \"ПоискПодстр \"\n    + \"ПоискСтр \"\n    + \"ПолучитьИДТаблицы \"\n    + \"ПользовательДополнительно \"\n    + \"ПользовательИД \"\n    + \"ПользовательИмя \"\n    + \"ПользовательСтатус \"\n    + \"Прервать \"\n    + \"ПроверитьПараметр \"\n    + \"ПроверитьПараметрЗнач \"\n    + \"ПроверитьУсловие \"\n    + \"РазбСтр \"\n    + \"РазнВремя \"\n    + \"РазнДат \"\n    + \"РазнДатаВремя \"\n    + \"РазнРабВремя \"\n    + \"РегУстВрем \"\n    + \"РегУстДат \"\n    + \"РегУстЧсл \"\n    + \"РедТекст \"\n    + \"РеестрЗапись \"\n    + \"РеестрСписокИменПарам \"\n    + \"РеестрЧтение \"\n    + \"РеквСпр \"\n    + \"РеквСпрПр \"\n    + \"Сегодня \"\n    + \"Сейчас \"\n    + \"Сервер \"\n    + \"СерверПроцессИД \"\n    + \"СертификатФайлСчитать \"\n    + \"СжПроб \"\n    + \"Символ \"\n    + \"СистемаДиректумКод \"\n    + \"СистемаИнформация \"\n    + \"СистемаКод \"\n    + \"Содержит \"\n    + \"СоединениеЗакрыть \"\n    + \"СоединениеОткрыть \"\n    + \"СоздатьДиалог \"\n    + \"СоздатьДиалогВыбораИзДвухСписков \"\n    + \"СоздатьДиалогВыбораПапки \"\n    + \"СоздатьДиалогОткрытияФайла \"\n    + \"СоздатьДиалогСохраненияФайла \"\n    + \"СоздатьЗапрос \"\n    + \"СоздатьИндикатор \"\n    + \"СоздатьИсключение \"\n    + \"СоздатьКэшированныйСправочник \"\n    + \"СоздатьМассив \"\n    + \"СоздатьНаборДанных \"\n    + \"СоздатьОбъект \"\n    + \"СоздатьОтчет \"\n    + \"СоздатьПапку \"\n    + \"СоздатьРедактор \"\n    + \"СоздатьСоединение \"\n    + \"СоздатьСписок \"\n    + \"СоздатьСписокСтрок \"\n    + \"СоздатьСправочник \"\n    + \"СоздатьСценарий \"\n    + \"СоздСпр \"\n    + \"СостСпр \"\n    + \"Сохр \"\n    + \"СохрСпр \"\n    + \"СписокСистем \"\n    + \"Спр \"\n    + \"Справочник \"\n    + \"СпрБлокЕсть \"\n    + \"СпрБлокСнять \"\n    + \"СпрБлокСнятьРасш \"\n    + \"СпрБлокУстановить \"\n    + \"СпрИзмНабДан \"\n    + \"СпрКод \"\n    + \"СпрНомер \"\n    + \"СпрОбновить \"\n    + \"СпрОткрыть \"\n    + \"СпрОтменить \"\n    + \"СпрПарам \"\n    + \"СпрПолеЗнач \"\n    + \"СпрПолеИмя \"\n    + \"СпрРекв \"\n    + \"СпрРеквВведЗн \"\n    + \"СпрРеквНовые \"\n    + \"СпрРеквПр \"\n    + \"СпрРеквПредЗн \"\n    + \"СпрРеквРежим \"\n    + \"СпрРеквТипТекст \"\n    + \"СпрСоздать \"\n    + \"СпрСост \"\n    + \"СпрСохранить \"\n    + \"СпрТблИтог \"\n    + \"СпрТблСтр \"\n    + \"СпрТблСтрКол \"\n    + \"СпрТблСтрМакс \"\n    + \"СпрТблСтрМин \"\n    + \"СпрТблСтрПред \"\n    + \"СпрТблСтрСлед \"\n    + \"СпрТблСтрСозд \"\n    + \"СпрТблСтрУд \"\n    + \"СпрТекПредст \"\n    + \"СпрУдалить \"\n    + \"СравнитьСтр \"\n    + \"СтрВерхРегистр \"\n    + \"СтрНижнРегистр \"\n    + \"СтрТблСпр \"\n    + \"СумПроп \"\n    + \"Сценарий \"\n    + \"СценарийПарам \"\n    + \"ТекВерсия \"\n    + \"ТекОрг \"\n    + \"Точн \"\n    + \"Тран \"\n    + \"Транслитерация \"\n    + \"УдалитьТаблицу \"\n    + \"УдалитьФайл \"\n    + \"УдСпр \"\n    + \"УдСтрТблСпр \"\n    + \"Уст \"\n    + \"УстановкиКонстант \"\n    + \"ФайлАтрибутСчитать \"\n    + \"ФайлАтрибутУстановить \"\n    + \"ФайлВремя \"\n    + \"ФайлВремяУстановить \"\n    + \"ФайлВыбрать \"\n    + \"ФайлЗанят \"\n    + \"ФайлЗаписать \"\n    + \"ФайлИскать \"\n    + \"ФайлКопировать \"\n    + \"ФайлМожноЧитать \"\n    + \"ФайлОткрыть \"\n    + \"ФайлПереименовать \"\n    + \"ФайлПерекодировать \"\n    + \"ФайлПереместить \"\n    + \"ФайлПросмотреть \"\n    + \"ФайлРазмер \"\n    + \"ФайлСоздать \"\n    + \"ФайлСсылкаСоздать \"\n    + \"ФайлСуществует \"\n    + \"ФайлСчитать \"\n    + \"ФайлУдалить \"\n    + \"ФмтSQLДат \"\n    + \"ФмтДат \"\n    + \"ФмтСтр \"\n    + \"ФмтЧсл \"\n    + \"Формат \"\n    + \"ЦМассивЭлемент \"\n    + \"ЦНаборДанныхРеквизит \"\n    + \"ЦПодстр \";\n\n  // Предопределенные переменные ==> built_in\n  const predefined_variables =\n    \"AltState \"\n    + \"Application \"\n    + \"CallType \"\n    + \"ComponentTokens \"\n    + \"CreatedJobs \"\n    + \"CreatedNotices \"\n    + \"ControlState \"\n    + \"DialogResult \"\n    + \"Dialogs \"\n    + \"EDocuments \"\n    + \"EDocumentVersionSource \"\n    + \"Folders \"\n    + \"GlobalIDs \"\n    + \"Job \"\n    + \"Jobs \"\n    + \"InputValue \"\n    + \"LookUpReference \"\n    + \"LookUpRequisiteNames \"\n    + \"LookUpSearch \"\n    + \"Object \"\n    + \"ParentComponent \"\n    + \"Processes \"\n    + \"References \"\n    + \"Requisite \"\n    + \"ReportName \"\n    + \"Reports \"\n    + \"Result \"\n    + \"Scripts \"\n    + \"Searches \"\n    + \"SelectedAttachments \"\n    + \"SelectedItems \"\n    + \"SelectMode \"\n    + \"Sender \"\n    + \"ServerEvents \"\n    + \"ServiceFactory \"\n    + \"ShiftState \"\n    + \"SubTask \"\n    + \"SystemDialogs \"\n    + \"Tasks \"\n    + \"Wizard \"\n    + \"Wizards \"\n    + \"Work \"\n    + \"ВызовСпособ \"\n    + \"ИмяОтчета \"\n    + \"РеквЗнач \";\n\n  // Интерфейсы ==> type\n  const interfaces =\n    \"IApplication \"\n    + \"IAccessRights \"\n    + \"IAccountRepository \"\n    + \"IAccountSelectionRestrictions \"\n    + \"IAction \"\n    + \"IActionList \"\n    + \"IAdministrationHistoryDescription \"\n    + \"IAnchors \"\n    + \"IApplication \"\n    + \"IArchiveInfo \"\n    + \"IAttachment \"\n    + \"IAttachmentList \"\n    + \"ICheckListBox \"\n    + \"ICheckPointedList \"\n    + \"IColumn \"\n    + \"IComponent \"\n    + \"IComponentDescription \"\n    + \"IComponentToken \"\n    + \"IComponentTokenFactory \"\n    + \"IComponentTokenInfo \"\n    + \"ICompRecordInfo \"\n    + \"IConnection \"\n    + \"IContents \"\n    + \"IControl \"\n    + \"IControlJob \"\n    + \"IControlJobInfo \"\n    + \"IControlList \"\n    + \"ICrypto \"\n    + \"ICrypto2 \"\n    + \"ICustomJob \"\n    + \"ICustomJobInfo \"\n    + \"ICustomListBox \"\n    + \"ICustomObjectWizardStep \"\n    + \"ICustomWork \"\n    + \"ICustomWorkInfo \"\n    + \"IDataSet \"\n    + \"IDataSetAccessInfo \"\n    + \"IDataSigner \"\n    + \"IDateCriterion \"\n    + \"IDateRequisite \"\n    + \"IDateRequisiteDescription \"\n    + \"IDateValue \"\n    + \"IDeaAccessRights \"\n    + \"IDeaObjectInfo \"\n    + \"IDevelopmentComponentLock \"\n    + \"IDialog \"\n    + \"IDialogFactory \"\n    + \"IDialogPickRequisiteItems \"\n    + \"IDialogsFactory \"\n    + \"IDICSFactory \"\n    + \"IDocRequisite \"\n    + \"IDocumentInfo \"\n    + \"IDualListDialog \"\n    + \"IECertificate \"\n    + \"IECertificateInfo \"\n    + \"IECertificates \"\n    + \"IEditControl \"\n    + \"IEditorForm \"\n    + \"IEdmsExplorer \"\n    + \"IEdmsObject \"\n    + \"IEdmsObjectDescription \"\n    + \"IEdmsObjectFactory \"\n    + \"IEdmsObjectInfo \"\n    + \"IEDocument \"\n    + \"IEDocumentAccessRights \"\n    + \"IEDocumentDescription \"\n    + \"IEDocumentEditor \"\n    + \"IEDocumentFactory \"\n    + \"IEDocumentInfo \"\n    + \"IEDocumentStorage \"\n    + \"IEDocumentVersion \"\n    + \"IEDocumentVersionListDialog \"\n    + \"IEDocumentVersionSource \"\n    + \"IEDocumentWizardStep \"\n    + \"IEDocVerSignature \"\n    + \"IEDocVersionState \"\n    + \"IEnabledMode \"\n    + \"IEncodeProvider \"\n    + \"IEncrypter \"\n    + \"IEvent \"\n    + \"IEventList \"\n    + \"IException \"\n    + \"IExternalEvents \"\n    + \"IExternalHandler \"\n    + \"IFactory \"\n    + \"IField \"\n    + \"IFileDialog \"\n    + \"IFolder \"\n    + \"IFolderDescription \"\n    + \"IFolderDialog \"\n    + \"IFolderFactory \"\n    + \"IFolderInfo \"\n    + \"IForEach \"\n    + \"IForm \"\n    + \"IFormTitle \"\n    + \"IFormWizardStep \"\n    + \"IGlobalIDFactory \"\n    + \"IGlobalIDInfo \"\n    + \"IGrid \"\n    + \"IHasher \"\n    + \"IHistoryDescription \"\n    + \"IHyperLinkControl \"\n    + \"IImageButton \"\n    + \"IImageControl \"\n    + \"IInnerPanel \"\n    + \"IInplaceHint \"\n    + \"IIntegerCriterion \"\n    + \"IIntegerList \"\n    + \"IIntegerRequisite \"\n    + \"IIntegerValue \"\n    + \"IISBLEditorForm \"\n    + \"IJob \"\n    + \"IJobDescription \"\n    + \"IJobFactory \"\n    + \"IJobForm \"\n    + \"IJobInfo \"\n    + \"ILabelControl \"\n    + \"ILargeIntegerCriterion \"\n    + \"ILargeIntegerRequisite \"\n    + \"ILargeIntegerValue \"\n    + \"ILicenseInfo \"\n    + \"ILifeCycleStage \"\n    + \"IList \"\n    + \"IListBox \"\n    + \"ILocalIDInfo \"\n    + \"ILocalization \"\n    + \"ILock \"\n    + \"IMemoryDataSet \"\n    + \"IMessagingFactory \"\n    + \"IMetadataRepository \"\n    + \"INotice \"\n    + \"INoticeInfo \"\n    + \"INumericCriterion \"\n    + \"INumericRequisite \"\n    + \"INumericValue \"\n    + \"IObject \"\n    + \"IObjectDescription \"\n    + \"IObjectImporter \"\n    + \"IObjectInfo \"\n    + \"IObserver \"\n    + \"IPanelGroup \"\n    + \"IPickCriterion \"\n    + \"IPickProperty \"\n    + \"IPickRequisite \"\n    + \"IPickRequisiteDescription \"\n    + \"IPickRequisiteItem \"\n    + \"IPickRequisiteItems \"\n    + \"IPickValue \"\n    + \"IPrivilege \"\n    + \"IPrivilegeList \"\n    + \"IProcess \"\n    + \"IProcessFactory \"\n    + \"IProcessMessage \"\n    + \"IProgress \"\n    + \"IProperty \"\n    + \"IPropertyChangeEvent \"\n    + \"IQuery \"\n    + \"IReference \"\n    + \"IReferenceCriterion \"\n    + \"IReferenceEnabledMode \"\n    + \"IReferenceFactory \"\n    + \"IReferenceHistoryDescription \"\n    + \"IReferenceInfo \"\n    + \"IReferenceRecordCardWizardStep \"\n    + \"IReferenceRequisiteDescription \"\n    + \"IReferencesFactory \"\n    + \"IReferenceValue \"\n    + \"IRefRequisite \"\n    + \"IReport \"\n    + \"IReportFactory \"\n    + \"IRequisite \"\n    + \"IRequisiteDescription \"\n    + \"IRequisiteDescriptionList \"\n    + \"IRequisiteFactory \"\n    + \"IRichEdit \"\n    + \"IRouteStep \"\n    + \"IRule \"\n    + \"IRuleList \"\n    + \"ISchemeBlock \"\n    + \"IScript \"\n    + \"IScriptFactory \"\n    + \"ISearchCriteria \"\n    + \"ISearchCriterion \"\n    + \"ISearchDescription \"\n    + \"ISearchFactory \"\n    + \"ISearchFolderInfo \"\n    + \"ISearchForObjectDescription \"\n    + \"ISearchResultRestrictions \"\n    + \"ISecuredContext \"\n    + \"ISelectDialog \"\n    + \"IServerEvent \"\n    + \"IServerEventFactory \"\n    + \"IServiceDialog \"\n    + \"IServiceFactory \"\n    + \"ISignature \"\n    + \"ISignProvider \"\n    + \"ISignProvider2 \"\n    + \"ISignProvider3 \"\n    + \"ISimpleCriterion \"\n    + \"IStringCriterion \"\n    + \"IStringList \"\n    + \"IStringRequisite \"\n    + \"IStringRequisiteDescription \"\n    + \"IStringValue \"\n    + \"ISystemDialogsFactory \"\n    + \"ISystemInfo \"\n    + \"ITabSheet \"\n    + \"ITask \"\n    + \"ITaskAbortReasonInfo \"\n    + \"ITaskCardWizardStep \"\n    + \"ITaskDescription \"\n    + \"ITaskFactory \"\n    + \"ITaskInfo \"\n    + \"ITaskRoute \"\n    + \"ITextCriterion \"\n    + \"ITextRequisite \"\n    + \"ITextValue \"\n    + \"ITreeListSelectDialog \"\n    + \"IUser \"\n    + \"IUserList \"\n    + \"IValue \"\n    + \"IView \"\n    + \"IWebBrowserControl \"\n    + \"IWizard \"\n    + \"IWizardAction \"\n    + \"IWizardFactory \"\n    + \"IWizardFormElement \"\n    + \"IWizardParam \"\n    + \"IWizardPickParam \"\n    + \"IWizardReferenceParam \"\n    + \"IWizardStep \"\n    + \"IWorkAccessRights \"\n    + \"IWorkDescription \"\n    + \"IWorkflowAskableParam \"\n    + \"IWorkflowAskableParams \"\n    + \"IWorkflowBlock \"\n    + \"IWorkflowBlockResult \"\n    + \"IWorkflowEnabledMode \"\n    + \"IWorkflowParam \"\n    + \"IWorkflowPickParam \"\n    + \"IWorkflowReferenceParam \"\n    + \"IWorkState \"\n    + \"IWorkTreeCustomNode \"\n    + \"IWorkTreeJobNode \"\n    + \"IWorkTreeTaskNode \"\n    + \"IXMLEditorForm \"\n    + \"SBCrypto \";\n\n  // built_in : встроенные или библиотечные объекты (константы, перечисления)\n  const BUILTIN = CONSTANTS + ENUMS;\n\n  // class: встроенные наборы значений, системные объекты, фабрики\n  const CLASS = predefined_variables;\n\n  // literal : примитивные типы\n  const LITERAL = \"null true false nil \";\n\n  // number : числа\n  const NUMBERS = {\n    className: \"number\",\n    begin: hljs.NUMBER_RE,\n    relevance: 0\n  };\n\n  // string : строки\n  const STRINGS = {\n    className: \"string\",\n    variants: [\n      {\n        begin: '\"',\n        end: '\"'\n      },\n      {\n        begin: \"'\",\n        end: \"'\"\n      }\n    ]\n  };\n\n  // Токены\n  const DOCTAGS = {\n    className: \"doctag\",\n    begin: \"\\\\b(?:TODO|DONE|BEGIN|END|STUB|CHG|FIXME|NOTE|BUG|XXX)\\\\b\",\n    relevance: 0\n  };\n\n  // Однострочный комментарий\n  const ISBL_LINE_COMMENT_MODE = {\n    className: \"comment\",\n    begin: \"//\",\n    end: \"$\",\n    relevance: 0,\n    contains: [\n      hljs.PHRASAL_WORDS_MODE,\n      DOCTAGS\n    ]\n  };\n\n  // Многострочный комментарий\n  const ISBL_BLOCK_COMMENT_MODE = {\n    className: \"comment\",\n    begin: \"/\\\\*\",\n    end: \"\\\\*/\",\n    relevance: 0,\n    contains: [\n      hljs.PHRASAL_WORDS_MODE,\n      DOCTAGS\n    ]\n  };\n\n  // comment : комментарии\n  const COMMENTS = { variants: [\n    ISBL_LINE_COMMENT_MODE,\n    ISBL_BLOCK_COMMENT_MODE\n  ] };\n\n  // keywords : ключевые слова\n  const KEYWORDS = {\n    $pattern: UNDERSCORE_IDENT_RE,\n    keyword: KEYWORD,\n    built_in: BUILTIN,\n    class: CLASS,\n    literal: LITERAL\n  };\n\n  // methods : методы\n  const METHODS = {\n    begin: \"\\\\.\\\\s*\" + hljs.UNDERSCORE_IDENT_RE,\n    keywords: KEYWORDS,\n    relevance: 0\n  };\n\n  // type : встроенные типы\n  const TYPES = {\n    className: \"type\",\n    begin: \":[ \\\\t]*(\" + interfaces.trim().replace(/\\s/g, \"|\") + \")\",\n    end: \"[ \\\\t]*=\",\n    excludeEnd: true\n  };\n\n  // variables : переменные\n  const VARIABLES = {\n    className: \"variable\",\n    keywords: KEYWORDS,\n    begin: UNDERSCORE_IDENT_RE,\n    relevance: 0,\n    contains: [\n      TYPES,\n      METHODS\n    ]\n  };\n\n  // Имена функций\n  const FUNCTION_TITLE = FUNCTION_NAME_IDENT_RE + \"\\\\(\";\n\n  const TITLE_MODE = {\n    className: \"title\",\n    keywords: {\n      $pattern: UNDERSCORE_IDENT_RE,\n      built_in: system_functions\n    },\n    begin: FUNCTION_TITLE,\n    end: \"\\\\(\",\n    returnBegin: true,\n    excludeEnd: true\n  };\n\n  // function : функции\n  const FUNCTIONS = {\n    className: \"function\",\n    begin: FUNCTION_TITLE,\n    end: \"\\\\)$\",\n    returnBegin: true,\n    keywords: KEYWORDS,\n    illegal: \"[\\\\[\\\\]\\\\|\\\\$\\\\?%,~#@]\",\n    contains: [\n      TITLE_MODE,\n      METHODS,\n      VARIABLES,\n      STRINGS,\n      NUMBERS,\n      COMMENTS\n    ]\n  };\n\n  return {\n    name: 'ISBL',\n    case_insensitive: true,\n    keywords: KEYWORDS,\n    illegal: \"\\\\$|\\\\?|%|,|;$|~|#|@|</\",\n    contains: [\n      FUNCTIONS,\n      TYPES,\n      METHODS,\n      VARIABLES,\n      STRINGS,\n      NUMBERS,\n      COMMENTS\n    ]\n  };\n}\n\nmodule.exports = isbl;\n","// https://docs.oracle.com/javase/specs/jls/se15/html/jls-3.html#jls-3.10\nvar decimalDigits = '[0-9](_*[0-9])*';\nvar frac = `\\\\.(${decimalDigits})`;\nvar hexDigits = '[0-9a-fA-F](_*[0-9a-fA-F])*';\nvar NUMERIC = {\n  className: 'number',\n  variants: [\n    // DecimalFloatingPointLiteral\n    // including ExponentPart\n    { begin: `(\\\\b(${decimalDigits})((${frac})|\\\\.)?|(${frac}))` +\n      `[eE][+-]?(${decimalDigits})[fFdD]?\\\\b` },\n    // excluding ExponentPart\n    { begin: `\\\\b(${decimalDigits})((${frac})[fFdD]?\\\\b|\\\\.([fFdD]\\\\b)?)` },\n    { begin: `(${frac})[fFdD]?\\\\b` },\n    { begin: `\\\\b(${decimalDigits})[fFdD]\\\\b` },\n\n    // HexadecimalFloatingPointLiteral\n    { begin: `\\\\b0[xX]((${hexDigits})\\\\.?|(${hexDigits})?\\\\.(${hexDigits}))` +\n      `[pP][+-]?(${decimalDigits})[fFdD]?\\\\b` },\n\n    // DecimalIntegerLiteral\n    { begin: '\\\\b(0|[1-9](_*[0-9])*)[lL]?\\\\b' },\n\n    // HexIntegerLiteral\n    { begin: `\\\\b0[xX](${hexDigits})[lL]?\\\\b` },\n\n    // OctalIntegerLiteral\n    { begin: '\\\\b0(_*[0-7])*[lL]?\\\\b' },\n\n    // BinaryIntegerLiteral\n    { begin: '\\\\b0[bB][01](_*[01])*[lL]?\\\\b' },\n  ],\n  relevance: 0\n};\n\n/*\nLanguage: Java\nAuthor: Vsevolod Solovyov <vsevolod.solovyov@gmail.com>\nCategory: common, enterprise\nWebsite: https://www.java.com/\n*/\n\n\n/**\n * Allows recursive regex expressions to a given depth\n *\n * ie: recurRegex(\"(abc~~~)\", /~~~/g, 2) becomes:\n * (abc(abc(abc)))\n *\n * @param {string} re\n * @param {RegExp} substitution (should be a g mode regex)\n * @param {number} depth\n * @returns {string}``\n */\nfunction recurRegex(re, substitution, depth) {\n  if (depth === -1) return \"\";\n\n  return re.replace(substitution, _ => {\n    return recurRegex(re, substitution, depth - 1);\n  });\n}\n\n/** @type LanguageFn */\nfunction java(hljs) {\n  const regex = hljs.regex;\n  const JAVA_IDENT_RE = '[\\u00C0-\\u02B8a-zA-Z_$][\\u00C0-\\u02B8a-zA-Z_$0-9]*';\n  const GENERIC_IDENT_RE = JAVA_IDENT_RE\n    + recurRegex('(?:<' + JAVA_IDENT_RE + '~~~(?:\\\\s*,\\\\s*' + JAVA_IDENT_RE + '~~~)*>)?', /~~~/g, 2);\n  const MAIN_KEYWORDS = [\n    'synchronized',\n    'abstract',\n    'private',\n    'var',\n    'static',\n    'if',\n    'const ',\n    'for',\n    'while',\n    'strictfp',\n    'finally',\n    'protected',\n    'import',\n    'native',\n    'final',\n    'void',\n    'enum',\n    'else',\n    'break',\n    'transient',\n    'catch',\n    'instanceof',\n    'volatile',\n    'case',\n    'assert',\n    'package',\n    'default',\n    'public',\n    'try',\n    'switch',\n    'continue',\n    'throws',\n    'protected',\n    'public',\n    'private',\n    'module',\n    'requires',\n    'exports',\n    'do',\n    'sealed',\n    'yield',\n    'permits',\n    'goto',\n    'when'\n  ];\n\n  const BUILT_INS = [\n    'super',\n    'this'\n  ];\n\n  const LITERALS = [\n    'false',\n    'true',\n    'null'\n  ];\n\n  const TYPES = [\n    'char',\n    'boolean',\n    'long',\n    'float',\n    'int',\n    'byte',\n    'short',\n    'double'\n  ];\n\n  const KEYWORDS = {\n    keyword: MAIN_KEYWORDS,\n    literal: LITERALS,\n    type: TYPES,\n    built_in: BUILT_INS\n  };\n\n  const ANNOTATION = {\n    className: 'meta',\n    begin: '@' + JAVA_IDENT_RE,\n    contains: [\n      {\n        begin: /\\(/,\n        end: /\\)/,\n        contains: [ \"self\" ] // allow nested () inside our annotation\n      }\n    ]\n  };\n  const PARAMS = {\n    className: 'params',\n    begin: /\\(/,\n    end: /\\)/,\n    keywords: KEYWORDS,\n    relevance: 0,\n    contains: [ hljs.C_BLOCK_COMMENT_MODE ],\n    endsParent: true\n  };\n\n  return {\n    name: 'Java',\n    aliases: [ 'jsp' ],\n    keywords: KEYWORDS,\n    illegal: /<\\/|#/,\n    contains: [\n      hljs.COMMENT(\n        '/\\\\*\\\\*',\n        '\\\\*/',\n        {\n          relevance: 0,\n          contains: [\n            {\n              // eat up @'s in emails to prevent them to be recognized as doctags\n              begin: /\\w+@/,\n              relevance: 0\n            },\n            {\n              className: 'doctag',\n              begin: '@[A-Za-z]+'\n            }\n          ]\n        }\n      ),\n      // relevance boost\n      {\n        begin: /import java\\.[a-z]+\\./,\n        keywords: \"import\",\n        relevance: 2\n      },\n      hljs.C_LINE_COMMENT_MODE,\n      hljs.C_BLOCK_COMMENT_MODE,\n      {\n        begin: /\"\"\"/,\n        end: /\"\"\"/,\n        className: \"string\",\n        contains: [ hljs.BACKSLASH_ESCAPE ]\n      },\n      hljs.APOS_STRING_MODE,\n      hljs.QUOTE_STRING_MODE,\n      {\n        match: [\n          /\\b(?:class|interface|enum|extends|implements|new)/,\n          /\\s+/,\n          JAVA_IDENT_RE\n        ],\n        className: {\n          1: \"keyword\",\n          3: \"title.class\"\n        }\n      },\n      {\n        // Exceptions for hyphenated keywords\n        match: /non-sealed/,\n        scope: \"keyword\"\n      },\n      {\n        begin: [\n          regex.concat(/(?!else)/, JAVA_IDENT_RE),\n          /\\s+/,\n          JAVA_IDENT_RE,\n          /\\s+/,\n          /=(?!=)/\n        ],\n        className: {\n          1: \"type\",\n          3: \"variable\",\n          5: \"operator\"\n        }\n      },\n      {\n        begin: [\n          /record/,\n          /\\s+/,\n          JAVA_IDENT_RE\n        ],\n        className: {\n          1: \"keyword\",\n          3: \"title.class\"\n        },\n        contains: [\n          PARAMS,\n          hljs.C_LINE_COMMENT_MODE,\n          hljs.C_BLOCK_COMMENT_MODE\n        ]\n      },\n      {\n        // Expression keywords prevent 'keyword Name(...)' from being\n        // recognized as a function definition\n        beginKeywords: 'new throw return else',\n        relevance: 0\n      },\n      {\n        begin: [\n          '(?:' + GENERIC_IDENT_RE + '\\\\s+)',\n          hljs.UNDERSCORE_IDENT_RE,\n          /\\s*(?=\\()/\n        ],\n        className: { 2: \"title.function\" },\n        keywords: KEYWORDS,\n        contains: [\n          {\n            className: 'params',\n            begin: /\\(/,\n            end: /\\)/,\n            keywords: KEYWORDS,\n            relevance: 0,\n            contains: [\n              ANNOTATION,\n              hljs.APOS_STRING_MODE,\n              hljs.QUOTE_STRING_MODE,\n              NUMERIC,\n              hljs.C_BLOCK_COMMENT_MODE\n            ]\n          },\n          hljs.C_LINE_COMMENT_MODE,\n          hljs.C_BLOCK_COMMENT_MODE\n        ]\n      },\n      NUMERIC,\n      ANNOTATION\n    ]\n  };\n}\n\nmodule.exports = java;\n","const IDENT_RE = '[A-Za-z$_][0-9A-Za-z$_]*';\nconst KEYWORDS = [\n  \"as\", // for exports\n  \"in\",\n  \"of\",\n  \"if\",\n  \"for\",\n  \"while\",\n  \"finally\",\n  \"var\",\n  \"new\",\n  \"function\",\n  \"do\",\n  \"return\",\n  \"void\",\n  \"else\",\n  \"break\",\n  \"catch\",\n  \"instanceof\",\n  \"with\",\n  \"throw\",\n  \"case\",\n  \"default\",\n  \"try\",\n  \"switch\",\n  \"continue\",\n  \"typeof\",\n  \"delete\",\n  \"let\",\n  \"yield\",\n  \"const\",\n  \"class\",\n  // JS handles these with a special rule\n  // \"get\",\n  // \"set\",\n  \"debugger\",\n  \"async\",\n  \"await\",\n  \"static\",\n  \"import\",\n  \"from\",\n  \"export\",\n  \"extends\",\n  // It's reached stage 3, which is \"recommended for implementation\":\n  \"using\"\n];\nconst LITERALS = [\n  \"true\",\n  \"false\",\n  \"null\",\n  \"undefined\",\n  \"NaN\",\n  \"Infinity\"\n];\n\n// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects\nconst TYPES = [\n  // Fundamental objects\n  \"Object\",\n  \"Function\",\n  \"Boolean\",\n  \"Symbol\",\n  // numbers and dates\n  \"Math\",\n  \"Date\",\n  \"Number\",\n  \"BigInt\",\n  // text\n  \"String\",\n  \"RegExp\",\n  // Indexed collections\n  \"Array\",\n  \"Float32Array\",\n  \"Float64Array\",\n  \"Int8Array\",\n  \"Uint8Array\",\n  \"Uint8ClampedArray\",\n  \"Int16Array\",\n  \"Int32Array\",\n  \"Uint16Array\",\n  \"Uint32Array\",\n  \"BigInt64Array\",\n  \"BigUint64Array\",\n  // Keyed collections\n  \"Set\",\n  \"Map\",\n  \"WeakSet\",\n  \"WeakMap\",\n  // Structured data\n  \"ArrayBuffer\",\n  \"SharedArrayBuffer\",\n  \"Atomics\",\n  \"DataView\",\n  \"JSON\",\n  // Control abstraction objects\n  \"Promise\",\n  \"Generator\",\n  \"GeneratorFunction\",\n  \"AsyncFunction\",\n  // Reflection\n  \"Reflect\",\n  \"Proxy\",\n  // Internationalization\n  \"Intl\",\n  // WebAssembly\n  \"WebAssembly\"\n];\n\nconst ERROR_TYPES = [\n  \"Error\",\n  \"EvalError\",\n  \"InternalError\",\n  \"RangeError\",\n  \"ReferenceError\",\n  \"SyntaxError\",\n  \"TypeError\",\n  \"URIError\"\n];\n\nconst BUILT_IN_GLOBALS = [\n  \"setInterval\",\n  \"setTimeout\",\n  \"clearInterval\",\n  \"clearTimeout\",\n\n  \"require\",\n  \"exports\",\n\n  \"eval\",\n  \"isFinite\",\n  \"isNaN\",\n  \"parseFloat\",\n  \"parseInt\",\n  \"decodeURI\",\n  \"decodeURIComponent\",\n  \"encodeURI\",\n  \"encodeURIComponent\",\n  \"escape\",\n  \"unescape\"\n];\n\nconst BUILT_IN_VARIABLES = [\n  \"arguments\",\n  \"this\",\n  \"super\",\n  \"console\",\n  \"window\",\n  \"document\",\n  \"localStorage\",\n  \"sessionStorage\",\n  \"module\",\n  \"global\" // Node.js\n];\n\nconst BUILT_INS = [].concat(\n  BUILT_IN_GLOBALS,\n  TYPES,\n  ERROR_TYPES\n);\n\n/*\nLanguage: JavaScript\nDescription: JavaScript (JS) is a lightweight, interpreted, or just-in-time compiled programming language with first-class functions.\nCategory: common, scripting, web\nWebsite: https://developer.mozilla.org/en-US/docs/Web/JavaScript\n*/\n\n\n/** @type LanguageFn */\nfunction javascript(hljs) {\n  const regex = hljs.regex;\n  /**\n   * Takes a string like \"<Booger\" and checks to see\n   * if we can find a matching \"</Booger\" later in the\n   * content.\n   * @param {RegExpMatchArray} match\n   * @param {{after:number}} param1\n   */\n  const hasClosingTag = (match, { after }) => {\n    const tag = \"</\" + match[0].slice(1);\n    const pos = match.input.indexOf(tag, after);\n    return pos !== -1;\n  };\n\n  const IDENT_RE$1 = IDENT_RE;\n  const FRAGMENT = {\n    begin: '<>',\n    end: '</>'\n  };\n  // to avoid some special cases inside isTrulyOpeningTag\n  const XML_SELF_CLOSING = /<[A-Za-z0-9\\\\._:-]+\\s*\\/>/;\n  const XML_TAG = {\n    begin: /<[A-Za-z0-9\\\\._:-]+/,\n    end: /\\/[A-Za-z0-9\\\\._:-]+>|\\/>/,\n    /**\n     * @param {RegExpMatchArray} match\n     * @param {CallbackResponse} response\n     */\n    isTrulyOpeningTag: (match, response) => {\n      const afterMatchIndex = match[0].length + match.index;\n      const nextChar = match.input[afterMatchIndex];\n      if (\n        // HTML should not include another raw `<` inside a tag\n        // nested type?\n        // `<Array<Array<number>>`, etc.\n        nextChar === \"<\" ||\n        // the , gives away that this is not HTML\n        // `<T, A extends keyof T, V>`\n        nextChar === \",\"\n        ) {\n        response.ignoreMatch();\n        return;\n      }\n\n      // `<something>`\n      // Quite possibly a tag, lets look for a matching closing tag...\n      if (nextChar === \">\") {\n        // if we cannot find a matching closing tag, then we\n        // will ignore it\n        if (!hasClosingTag(match, { after: afterMatchIndex })) {\n          response.ignoreMatch();\n        }\n      }\n\n      // `<blah />` (self-closing)\n      // handled by simpleSelfClosing rule\n\n      let m;\n      const afterMatch = match.input.substring(afterMatchIndex);\n\n      // some more template typing stuff\n      //  <T = any>(key?: string) => Modify<\n      if ((m = afterMatch.match(/^\\s*=/))) {\n        response.ignoreMatch();\n        return;\n      }\n\n      // `<From extends string>`\n      // technically this could be HTML, but it smells like a type\n      // NOTE: This is ugh, but added specifically for https://github.com/highlightjs/highlight.js/issues/3276\n      if ((m = afterMatch.match(/^\\s+extends\\s+/))) {\n        if (m.index === 0) {\n          response.ignoreMatch();\n          // eslint-disable-next-line no-useless-return\n          return;\n        }\n      }\n    }\n  };\n  const KEYWORDS$1 = {\n    $pattern: IDENT_RE,\n    keyword: KEYWORDS,\n    literal: LITERALS,\n    built_in: BUILT_INS,\n    \"variable.language\": BUILT_IN_VARIABLES\n  };\n\n  // https://tc39.es/ecma262/#sec-literals-numeric-literals\n  const decimalDigits = '[0-9](_?[0-9])*';\n  const frac = `\\\\.(${decimalDigits})`;\n  // DecimalIntegerLiteral, including Annex B NonOctalDecimalIntegerLiteral\n  // https://tc39.es/ecma262/#sec-additional-syntax-numeric-literals\n  const decimalInteger = `0|[1-9](_?[0-9])*|0[0-7]*[89][0-9]*`;\n  const NUMBER = {\n    className: 'number',\n    variants: [\n      // DecimalLiteral\n      { begin: `(\\\\b(${decimalInteger})((${frac})|\\\\.)?|(${frac}))` +\n        `[eE][+-]?(${decimalDigits})\\\\b` },\n      { begin: `\\\\b(${decimalInteger})\\\\b((${frac})\\\\b|\\\\.)?|(${frac})\\\\b` },\n\n      // DecimalBigIntegerLiteral\n      { begin: `\\\\b(0|[1-9](_?[0-9])*)n\\\\b` },\n\n      // NonDecimalIntegerLiteral\n      { begin: \"\\\\b0[xX][0-9a-fA-F](_?[0-9a-fA-F])*n?\\\\b\" },\n      { begin: \"\\\\b0[bB][0-1](_?[0-1])*n?\\\\b\" },\n      { begin: \"\\\\b0[oO][0-7](_?[0-7])*n?\\\\b\" },\n\n      // LegacyOctalIntegerLiteral (does not include underscore separators)\n      // https://tc39.es/ecma262/#sec-additional-syntax-numeric-literals\n      { begin: \"\\\\b0[0-7]+n?\\\\b\" },\n    ],\n    relevance: 0\n  };\n\n  const SUBST = {\n    className: 'subst',\n    begin: '\\\\$\\\\{',\n    end: '\\\\}',\n    keywords: KEYWORDS$1,\n    contains: [] // defined later\n  };\n  const HTML_TEMPLATE = {\n    begin: '\\.?html`',\n    end: '',\n    starts: {\n      end: '`',\n      returnEnd: false,\n      contains: [\n        hljs.BACKSLASH_ESCAPE,\n        SUBST\n      ],\n      subLanguage: 'xml'\n    }\n  };\n  const CSS_TEMPLATE = {\n    begin: '\\.?css`',\n    end: '',\n    starts: {\n      end: '`',\n      returnEnd: false,\n      contains: [\n        hljs.BACKSLASH_ESCAPE,\n        SUBST\n      ],\n      subLanguage: 'css'\n    }\n  };\n  const GRAPHQL_TEMPLATE = {\n    begin: '\\.?gql`',\n    end: '',\n    starts: {\n      end: '`',\n      returnEnd: false,\n      contains: [\n        hljs.BACKSLASH_ESCAPE,\n        SUBST\n      ],\n      subLanguage: 'graphql'\n    }\n  };\n  const TEMPLATE_STRING = {\n    className: 'string',\n    begin: '`',\n    end: '`',\n    contains: [\n      hljs.BACKSLASH_ESCAPE,\n      SUBST\n    ]\n  };\n  const JSDOC_COMMENT = hljs.COMMENT(\n    /\\/\\*\\*(?!\\/)/,\n    '\\\\*/',\n    {\n      relevance: 0,\n      contains: [\n        {\n          begin: '(?=@[A-Za-z]+)',\n          relevance: 0,\n          contains: [\n            {\n              className: 'doctag',\n              begin: '@[A-Za-z]+'\n            },\n            {\n              className: 'type',\n              begin: '\\\\{',\n              end: '\\\\}',\n              excludeEnd: true,\n              excludeBegin: true,\n              relevance: 0\n            },\n            {\n              className: 'variable',\n              begin: IDENT_RE$1 + '(?=\\\\s*(-)|$)',\n              endsParent: true,\n              relevance: 0\n            },\n            // eat spaces (not newlines) so we can find\n            // types or variables\n            {\n              begin: /(?=[^\\n])\\s/,\n              relevance: 0\n            }\n          ]\n        }\n      ]\n    }\n  );\n  const COMMENT = {\n    className: \"comment\",\n    variants: [\n      JSDOC_COMMENT,\n      hljs.C_BLOCK_COMMENT_MODE,\n      hljs.C_LINE_COMMENT_MODE\n    ]\n  };\n  const SUBST_INTERNALS = [\n    hljs.APOS_STRING_MODE,\n    hljs.QUOTE_STRING_MODE,\n    HTML_TEMPLATE,\n    CSS_TEMPLATE,\n    GRAPHQL_TEMPLATE,\n    TEMPLATE_STRING,\n    // Skip numbers when they are part of a variable name\n    { match: /\\$\\d+/ },\n    NUMBER,\n    // This is intentional:\n    // See https://github.com/highlightjs/highlight.js/issues/3288\n    // hljs.REGEXP_MODE\n  ];\n  SUBST.contains = SUBST_INTERNALS\n    .concat({\n      // we need to pair up {} inside our subst to prevent\n      // it from ending too early by matching another }\n      begin: /\\{/,\n      end: /\\}/,\n      keywords: KEYWORDS$1,\n      contains: [\n        \"self\"\n      ].concat(SUBST_INTERNALS)\n    });\n  const SUBST_AND_COMMENTS = [].concat(COMMENT, SUBST.contains);\n  const PARAMS_CONTAINS = SUBST_AND_COMMENTS.concat([\n    // eat recursive parens in sub expressions\n    {\n      begin: /(\\s*)\\(/,\n      end: /\\)/,\n      keywords: KEYWORDS$1,\n      contains: [\"self\"].concat(SUBST_AND_COMMENTS)\n    }\n  ]);\n  const PARAMS = {\n    className: 'params',\n    // convert this to negative lookbehind in v12\n    begin: /(\\s*)\\(/, // to match the parms with\n    end: /\\)/,\n    excludeBegin: true,\n    excludeEnd: true,\n    keywords: KEYWORDS$1,\n    contains: PARAMS_CONTAINS\n  };\n\n  // ES6 classes\n  const CLASS_OR_EXTENDS = {\n    variants: [\n      // class Car extends vehicle\n      {\n        match: [\n          /class/,\n          /\\s+/,\n          IDENT_RE$1,\n          /\\s+/,\n          /extends/,\n          /\\s+/,\n          regex.concat(IDENT_RE$1, \"(\", regex.concat(/\\./, IDENT_RE$1), \")*\")\n        ],\n        scope: {\n          1: \"keyword\",\n          3: \"title.class\",\n          5: \"keyword\",\n          7: \"title.class.inherited\"\n        }\n      },\n      // class Car\n      {\n        match: [\n          /class/,\n          /\\s+/,\n          IDENT_RE$1\n        ],\n        scope: {\n          1: \"keyword\",\n          3: \"title.class\"\n        }\n      },\n\n    ]\n  };\n\n  const CLASS_REFERENCE = {\n    relevance: 0,\n    match:\n    regex.either(\n      // Hard coded exceptions\n      /\\bJSON/,\n      // Float32Array, OutT\n      /\\b[A-Z][a-z]+([A-Z][a-z]*|\\d)*/,\n      // CSSFactory, CSSFactoryT\n      /\\b[A-Z]{2,}([A-Z][a-z]+|\\d)+([A-Z][a-z]*)*/,\n      // FPs, FPsT\n      /\\b[A-Z]{2,}[a-z]+([A-Z][a-z]+|\\d)*([A-Z][a-z]*)*/,\n      // P\n      // single letters are not highlighted\n      // BLAH\n      // this will be flagged as a UPPER_CASE_CONSTANT instead\n    ),\n    className: \"title.class\",\n    keywords: {\n      _: [\n        // se we still get relevance credit for JS library classes\n        ...TYPES,\n        ...ERROR_TYPES\n      ]\n    }\n  };\n\n  const USE_STRICT = {\n    label: \"use_strict\",\n    className: 'meta',\n    relevance: 10,\n    begin: /^\\s*['\"]use (strict|asm)['\"]/\n  };\n\n  const FUNCTION_DEFINITION = {\n    variants: [\n      {\n        match: [\n          /function/,\n          /\\s+/,\n          IDENT_RE$1,\n          /(?=\\s*\\()/\n        ]\n      },\n      // anonymous function\n      {\n        match: [\n          /function/,\n          /\\s*(?=\\()/\n        ]\n      }\n    ],\n    className: {\n      1: \"keyword\",\n      3: \"title.function\"\n    },\n    label: \"func.def\",\n    contains: [ PARAMS ],\n    illegal: /%/\n  };\n\n  const UPPER_CASE_CONSTANT = {\n    relevance: 0,\n    match: /\\b[A-Z][A-Z_0-9]+\\b/,\n    className: \"variable.constant\"\n  };\n\n  function noneOf(list) {\n    return regex.concat(\"(?!\", list.join(\"|\"), \")\");\n  }\n\n  const FUNCTION_CALL = {\n    match: regex.concat(\n      /\\b/,\n      noneOf([\n        ...BUILT_IN_GLOBALS,\n        \"super\",\n        \"import\"\n      ].map(x => `${x}\\\\s*\\\\(`)),\n      IDENT_RE$1, regex.lookahead(/\\s*\\(/)),\n    className: \"title.function\",\n    relevance: 0\n  };\n\n  const PROPERTY_ACCESS = {\n    begin: regex.concat(/\\./, regex.lookahead(\n      regex.concat(IDENT_RE$1, /(?![0-9A-Za-z$_(])/)\n    )),\n    end: IDENT_RE$1,\n    excludeBegin: true,\n    keywords: \"prototype\",\n    className: \"property\",\n    relevance: 0\n  };\n\n  const GETTER_OR_SETTER = {\n    match: [\n      /get|set/,\n      /\\s+/,\n      IDENT_RE$1,\n      /(?=\\()/\n    ],\n    className: {\n      1: \"keyword\",\n      3: \"title.function\"\n    },\n    contains: [\n      { // eat to avoid empty params\n        begin: /\\(\\)/\n      },\n      PARAMS\n    ]\n  };\n\n  const FUNC_LEAD_IN_RE = '(\\\\(' +\n    '[^()]*(\\\\(' +\n    '[^()]*(\\\\(' +\n    '[^()]*' +\n    '\\\\)[^()]*)*' +\n    '\\\\)[^()]*)*' +\n    '\\\\)|' + hljs.UNDERSCORE_IDENT_RE + ')\\\\s*=>';\n\n  const FUNCTION_VARIABLE = {\n    match: [\n      /const|var|let/, /\\s+/,\n      IDENT_RE$1, /\\s*/,\n      /=\\s*/,\n      /(async\\s*)?/, // async is optional\n      regex.lookahead(FUNC_LEAD_IN_RE)\n    ],\n    keywords: \"async\",\n    className: {\n      1: \"keyword\",\n      3: \"title.function\"\n    },\n    contains: [\n      PARAMS\n    ]\n  };\n\n  return {\n    name: 'JavaScript',\n    aliases: ['js', 'jsx', 'mjs', 'cjs'],\n    keywords: KEYWORDS$1,\n    // this will be extended by TypeScript\n    exports: { PARAMS_CONTAINS, CLASS_REFERENCE },\n    illegal: /#(?![$_A-z])/,\n    contains: [\n      hljs.SHEBANG({\n        label: \"shebang\",\n        binary: \"node\",\n        relevance: 5\n      }),\n      USE_STRICT,\n      hljs.APOS_STRING_MODE,\n      hljs.QUOTE_STRING_MODE,\n      HTML_TEMPLATE,\n      CSS_TEMPLATE,\n      GRAPHQL_TEMPLATE,\n      TEMPLATE_STRING,\n      COMMENT,\n      // Skip numbers when they are part of a variable name\n      { match: /\\$\\d+/ },\n      NUMBER,\n      CLASS_REFERENCE,\n      {\n        scope: 'attr',\n        match: IDENT_RE$1 + regex.lookahead(':'),\n        relevance: 0\n      },\n      FUNCTION_VARIABLE,\n      { // \"value\" container\n        begin: '(' + hljs.RE_STARTERS_RE + '|\\\\b(case|return|throw)\\\\b)\\\\s*',\n        keywords: 'return throw case',\n        relevance: 0,\n        contains: [\n          COMMENT,\n          hljs.REGEXP_MODE,\n          {\n            className: 'function',\n            // we have to count the parens to make sure we actually have the\n            // correct bounding ( ) before the =>.  There could be any number of\n            // sub-expressions inside also surrounded by parens.\n            begin: FUNC_LEAD_IN_RE,\n            returnBegin: true,\n            end: '\\\\s*=>',\n            contains: [\n              {\n                className: 'params',\n                variants: [\n                  {\n                    begin: hljs.UNDERSCORE_IDENT_RE,\n                    relevance: 0\n                  },\n                  {\n                    className: null,\n                    begin: /\\(\\s*\\)/,\n                    skip: true\n                  },\n                  {\n                    begin: /(\\s*)\\(/,\n                    end: /\\)/,\n                    excludeBegin: true,\n                    excludeEnd: true,\n                    keywords: KEYWORDS$1,\n                    contains: PARAMS_CONTAINS\n                  }\n                ]\n              }\n            ]\n          },\n          { // could be a comma delimited list of params to a function call\n            begin: /,/,\n            relevance: 0\n          },\n          {\n            match: /\\s+/,\n            relevance: 0\n          },\n          { // JSX\n            variants: [\n              { begin: FRAGMENT.begin, end: FRAGMENT.end },\n              { match: XML_SELF_CLOSING },\n              {\n                begin: XML_TAG.begin,\n                // we carefully check the opening tag to see if it truly\n                // is a tag and not a false positive\n                'on:begin': XML_TAG.isTrulyOpeningTag,\n                end: XML_TAG.end\n              }\n            ],\n            subLanguage: 'xml',\n            contains: [\n              {\n                begin: XML_TAG.begin,\n                end: XML_TAG.end,\n                skip: true,\n                contains: ['self']\n              }\n            ]\n          }\n        ],\n      },\n      FUNCTION_DEFINITION,\n      {\n        // prevent this from getting swallowed up by function\n        // since they appear \"function like\"\n        beginKeywords: \"while if switch catch for\"\n      },\n      {\n        // we have to count the parens to make sure we actually have the correct\n        // bounding ( ).  There could be any number of sub-expressions inside\n        // also surrounded by parens.\n        begin: '\\\\b(?!function)' + hljs.UNDERSCORE_IDENT_RE +\n          '\\\\(' + // first parens\n          '[^()]*(\\\\(' +\n            '[^()]*(\\\\(' +\n              '[^()]*' +\n            '\\\\)[^()]*)*' +\n          '\\\\)[^()]*)*' +\n          '\\\\)\\\\s*\\\\{', // end parens\n        returnBegin:true,\n        label: \"func.def\",\n        contains: [\n          PARAMS,\n          hljs.inherit(hljs.TITLE_MODE, { begin: IDENT_RE$1, className: \"title.function\" })\n        ]\n      },\n      // catch ... so it won't trigger the property rule below\n      {\n        match: /\\.\\.\\./,\n        relevance: 0\n      },\n      PROPERTY_ACCESS,\n      // hack: prevents detection of keywords in some circumstances\n      // .keyword()\n      // $keyword = x\n      {\n        match: '\\\\$' + IDENT_RE$1,\n        relevance: 0\n      },\n      {\n        match: [ /\\bconstructor(?=\\s*\\()/ ],\n        className: { 1: \"title.function\" },\n        contains: [ PARAMS ]\n      },\n      FUNCTION_CALL,\n      UPPER_CASE_CONSTANT,\n      CLASS_OR_EXTENDS,\n      GETTER_OR_SETTER,\n      {\n        match: /\\$[(.]/ // relevance booster for a pattern common to JS libs: `$(something)` and `$.something`\n      }\n    ]\n  };\n}\n\nmodule.exports = javascript;\n","/*\n Language: JBoss CLI\n Author: Raphaël Parrëe <rparree@edc4it.com>\n Description: language definition jboss cli\n Website: https://docs.jboss.org/author/display/WFLY/Command+Line+Interface\n Category: config\n */\n\nfunction jbossCli(hljs) {\n  const PARAM = {\n    begin: /[\\w-]+ *=/,\n    returnBegin: true,\n    relevance: 0,\n    contains: [\n      {\n        className: 'attr',\n        begin: /[\\w-]+/\n      }\n    ]\n  };\n  const PARAMSBLOCK = {\n    className: 'params',\n    begin: /\\(/,\n    end: /\\)/,\n    contains: [ PARAM ],\n    relevance: 0\n  };\n  const OPERATION = {\n    className: 'function',\n    begin: /:[\\w\\-.]+/,\n    relevance: 0\n  };\n  const PATH = {\n    className: 'string',\n    begin: /\\B([\\/.])[\\w\\-.\\/=]+/\n  };\n  const COMMAND_PARAMS = {\n    className: 'params',\n    begin: /--[\\w\\-=\\/]+/\n  };\n  return {\n    name: 'JBoss CLI',\n    aliases: [ 'wildfly-cli' ],\n    keywords: {\n      $pattern: '[a-z\\-]+',\n      keyword: 'alias batch cd clear command connect connection-factory connection-info data-source deploy '\n      + 'deployment-info deployment-overlay echo echo-dmr help history if jdbc-driver-info jms-queue|20 jms-topic|20 ls '\n      + 'patch pwd quit read-attribute read-operation reload rollout-plan run-batch set shutdown try unalias '\n      + 'undeploy unset version xa-data-source', // module\n      literal: 'true false'\n    },\n    contains: [\n      hljs.HASH_COMMENT_MODE,\n      hljs.QUOTE_STRING_MODE,\n      COMMAND_PARAMS,\n      OPERATION,\n      PATH,\n      PARAMSBLOCK\n    ]\n  };\n}\n\nmodule.exports = jbossCli;\n","/*\nLanguage: JSON\nDescription: JSON (JavaScript Object Notation) is a lightweight data-interchange format.\nAuthor: Ivan Sagalaev <maniac@softwaremaniacs.org>\nWebsite: http://www.json.org\nCategory: common, protocols, web\n*/\n\nfunction json(hljs) {\n  const ATTRIBUTE = {\n    className: 'attr',\n    begin: /\"(\\\\.|[^\\\\\"\\r\\n])*\"(?=\\s*:)/,\n    relevance: 1.01\n  };\n  const PUNCTUATION = {\n    match: /[{}[\\],:]/,\n    className: \"punctuation\",\n    relevance: 0\n  };\n  const LITERALS = [\n    \"true\",\n    \"false\",\n    \"null\"\n  ];\n  // NOTE: normally we would rely on `keywords` for this but using a mode here allows us\n  // - to use the very tight `illegal: \\S` rule later to flag any other character\n  // - as illegal indicating that despite looking like JSON we do not truly have\n  // - JSON and thus improve false-positively greatly since JSON will try and claim\n  // - all sorts of JSON looking stuff\n  const LITERALS_MODE = {\n    scope: \"literal\",\n    beginKeywords: LITERALS.join(\" \"),\n  };\n\n  return {\n    name: 'JSON',\n    aliases: ['jsonc'],\n    keywords:{\n      literal: LITERALS,\n    },\n    contains: [\n      ATTRIBUTE,\n      PUNCTUATION,\n      hljs.QUOTE_STRING_MODE,\n      LITERALS_MODE,\n      hljs.C_NUMBER_MODE,\n      hljs.C_LINE_COMMENT_MODE,\n      hljs.C_BLOCK_COMMENT_MODE\n    ],\n    illegal: '\\\\S'\n  };\n}\n\nmodule.exports = json;\n","/*\nLanguage: Julia\nDescription: Julia is a high-level, high-performance, dynamic programming language.\nAuthor: Kenta Sato <bicycle1885@gmail.com>\nContributors: Alex Arslan <ararslan@comcast.net>, Fredrik Ekre <ekrefredrik@gmail.com>\nWebsite: https://julialang.org\nCategory: scientific\n*/\n\nfunction julia(hljs) {\n  // Since there are numerous special names in Julia, it is too much trouble\n  // to maintain them by hand. Hence these names (i.e. keywords, literals and\n  // built-ins) are automatically generated from Julia 1.5.2 itself through\n  // the following scripts for each.\n\n  // ref: https://docs.julialang.org/en/v1/manual/variables/#Allowed-Variable-Names\n  const VARIABLE_NAME_RE = '[A-Za-z_\\\\u00A1-\\\\uFFFF][A-Za-z_0-9\\\\u00A1-\\\\uFFFF]*';\n\n  // # keyword generator, multi-word keywords handled manually below (Julia 1.5.2)\n  // import REPL.REPLCompletions\n  // res = String[\"in\", \"isa\", \"where\"]\n  // for kw in collect(x.keyword for x in REPLCompletions.complete_keyword(\"\"))\n  //     if !(contains(kw, \" \") || kw == \"struct\")\n  //         push!(res, kw)\n  //     end\n  // end\n  // sort!(unique!(res))\n  // foreach(x -> println(\"\\'\", x, \"\\',\"), res)\n  const KEYWORD_LIST = [\n    'baremodule',\n    'begin',\n    'break',\n    'catch',\n    'ccall',\n    'const',\n    'continue',\n    'do',\n    'else',\n    'elseif',\n    'end',\n    'export',\n    'false',\n    'finally',\n    'for',\n    'function',\n    'global',\n    'if',\n    'import',\n    'in',\n    'isa',\n    'let',\n    'local',\n    'macro',\n    'module',\n    'quote',\n    'return',\n    'true',\n    'try',\n    'using',\n    'where',\n    'while',\n  ];\n\n  // # literal generator (Julia 1.5.2)\n  // import REPL.REPLCompletions\n  // res = String[\"true\", \"false\"]\n  // for compl in filter!(x -> isa(x, REPLCompletions.ModuleCompletion) && (x.parent === Base || x.parent === Core),\n  //                     REPLCompletions.completions(\"\", 0)[1])\n  //     try\n  //         v = eval(Symbol(compl.mod))\n  //         if !(v isa Function || v isa Type || v isa TypeVar || v isa Module || v isa Colon)\n  //             push!(res, compl.mod)\n  //         end\n  //     catch e\n  //     end\n  // end\n  // sort!(unique!(res))\n  // foreach(x -> println(\"\\'\", x, \"\\',\"), res)\n  const LITERAL_LIST = [\n    'ARGS',\n    'C_NULL',\n    'DEPOT_PATH',\n    'ENDIAN_BOM',\n    'ENV',\n    'Inf',\n    'Inf16',\n    'Inf32',\n    'Inf64',\n    'InsertionSort',\n    'LOAD_PATH',\n    'MergeSort',\n    'NaN',\n    'NaN16',\n    'NaN32',\n    'NaN64',\n    'PROGRAM_FILE',\n    'QuickSort',\n    'RoundDown',\n    'RoundFromZero',\n    'RoundNearest',\n    'RoundNearestTiesAway',\n    'RoundNearestTiesUp',\n    'RoundToZero',\n    'RoundUp',\n    'VERSION|0',\n    'devnull',\n    'false',\n    'im',\n    'missing',\n    'nothing',\n    'pi',\n    'stderr',\n    'stdin',\n    'stdout',\n    'true',\n    'undef',\n    'π',\n    'ℯ',\n  ];\n\n  // # built_in generator (Julia 1.5.2)\n  // import REPL.REPLCompletions\n  // res = String[]\n  // for compl in filter!(x -> isa(x, REPLCompletions.ModuleCompletion) && (x.parent === Base || x.parent === Core),\n  //                     REPLCompletions.completions(\"\", 0)[1])\n  //     try\n  //         v = eval(Symbol(compl.mod))\n  //         if (v isa Type || v isa TypeVar) && (compl.mod != \"=>\")\n  //             push!(res, compl.mod)\n  //         end\n  //     catch e\n  //     end\n  // end\n  // sort!(unique!(res))\n  // foreach(x -> println(\"\\'\", x, \"\\',\"), res)\n  const BUILT_IN_LIST = [\n    'AbstractArray',\n    'AbstractChannel',\n    'AbstractChar',\n    'AbstractDict',\n    'AbstractDisplay',\n    'AbstractFloat',\n    'AbstractIrrational',\n    'AbstractMatrix',\n    'AbstractRange',\n    'AbstractSet',\n    'AbstractString',\n    'AbstractUnitRange',\n    'AbstractVecOrMat',\n    'AbstractVector',\n    'Any',\n    'ArgumentError',\n    'Array',\n    'AssertionError',\n    'BigFloat',\n    'BigInt',\n    'BitArray',\n    'BitMatrix',\n    'BitSet',\n    'BitVector',\n    'Bool',\n    'BoundsError',\n    'CapturedException',\n    'CartesianIndex',\n    'CartesianIndices',\n    'Cchar',\n    'Cdouble',\n    'Cfloat',\n    'Channel',\n    'Char',\n    'Cint',\n    'Cintmax_t',\n    'Clong',\n    'Clonglong',\n    'Cmd',\n    'Colon',\n    'Complex',\n    'ComplexF16',\n    'ComplexF32',\n    'ComplexF64',\n    'CompositeException',\n    'Condition',\n    'Cptrdiff_t',\n    'Cshort',\n    'Csize_t',\n    'Cssize_t',\n    'Cstring',\n    'Cuchar',\n    'Cuint',\n    'Cuintmax_t',\n    'Culong',\n    'Culonglong',\n    'Cushort',\n    'Cvoid',\n    'Cwchar_t',\n    'Cwstring',\n    'DataType',\n    'DenseArray',\n    'DenseMatrix',\n    'DenseVecOrMat',\n    'DenseVector',\n    'Dict',\n    'DimensionMismatch',\n    'Dims',\n    'DivideError',\n    'DomainError',\n    'EOFError',\n    'Enum',\n    'ErrorException',\n    'Exception',\n    'ExponentialBackOff',\n    'Expr',\n    'Float16',\n    'Float32',\n    'Float64',\n    'Function',\n    'GlobalRef',\n    'HTML',\n    'IO',\n    'IOBuffer',\n    'IOContext',\n    'IOStream',\n    'IdDict',\n    'IndexCartesian',\n    'IndexLinear',\n    'IndexStyle',\n    'InexactError',\n    'InitError',\n    'Int',\n    'Int128',\n    'Int16',\n    'Int32',\n    'Int64',\n    'Int8',\n    'Integer',\n    'InterruptException',\n    'InvalidStateException',\n    'Irrational',\n    'KeyError',\n    'LinRange',\n    'LineNumberNode',\n    'LinearIndices',\n    'LoadError',\n    'MIME',\n    'Matrix',\n    'Method',\n    'MethodError',\n    'Missing',\n    'MissingException',\n    'Module',\n    'NTuple',\n    'NamedTuple',\n    'Nothing',\n    'Number',\n    'OrdinalRange',\n    'OutOfMemoryError',\n    'OverflowError',\n    'Pair',\n    'PartialQuickSort',\n    'PermutedDimsArray',\n    'Pipe',\n    'ProcessFailedException',\n    'Ptr',\n    'QuoteNode',\n    'Rational',\n    'RawFD',\n    'ReadOnlyMemoryError',\n    'Real',\n    'ReentrantLock',\n    'Ref',\n    'Regex',\n    'RegexMatch',\n    'RoundingMode',\n    'SegmentationFault',\n    'Set',\n    'Signed',\n    'Some',\n    'StackOverflowError',\n    'StepRange',\n    'StepRangeLen',\n    'StridedArray',\n    'StridedMatrix',\n    'StridedVecOrMat',\n    'StridedVector',\n    'String',\n    'StringIndexError',\n    'SubArray',\n    'SubString',\n    'SubstitutionString',\n    'Symbol',\n    'SystemError',\n    'Task',\n    'TaskFailedException',\n    'Text',\n    'TextDisplay',\n    'Timer',\n    'Tuple',\n    'Type',\n    'TypeError',\n    'TypeVar',\n    'UInt',\n    'UInt128',\n    'UInt16',\n    'UInt32',\n    'UInt64',\n    'UInt8',\n    'UndefInitializer',\n    'UndefKeywordError',\n    'UndefRefError',\n    'UndefVarError',\n    'Union',\n    'UnionAll',\n    'UnitRange',\n    'Unsigned',\n    'Val',\n    'Vararg',\n    'VecElement',\n    'VecOrMat',\n    'Vector',\n    'VersionNumber',\n    'WeakKeyDict',\n    'WeakRef',\n  ];\n\n  const KEYWORDS = {\n    $pattern: VARIABLE_NAME_RE,\n    keyword: KEYWORD_LIST,\n    literal: LITERAL_LIST,\n    built_in: BUILT_IN_LIST,\n  };\n\n  // placeholder for recursive self-reference\n  const DEFAULT = {\n    keywords: KEYWORDS,\n    illegal: /<\\//\n  };\n\n  // ref: https://docs.julialang.org/en/v1/manual/integers-and-floating-point-numbers/\n  const NUMBER = {\n    className: 'number',\n    // supported numeric literals:\n    //  * binary literal (e.g. 0x10)\n    //  * octal literal (e.g. 0o76543210)\n    //  * hexadecimal literal (e.g. 0xfedcba876543210)\n    //  * hexadecimal floating point literal (e.g. 0x1p0, 0x1.2p2)\n    //  * decimal literal (e.g. 9876543210, 100_000_000)\n    //  * floating pointe literal (e.g. 1.2, 1.2f, .2, 1., 1.2e10, 1.2e-10)\n    begin: /(\\b0x[\\d_]*(\\.[\\d_]*)?|0x\\.\\d[\\d_]*)p[-+]?\\d+|\\b0[box][a-fA-F0-9][a-fA-F0-9_]*|(\\b\\d[\\d_]*(\\.[\\d_]*)?|\\.\\d[\\d_]*)([eEfF][-+]?\\d+)?/,\n    relevance: 0\n  };\n\n  const CHAR = {\n    className: 'string',\n    begin: /'(.|\\\\[xXuU][a-zA-Z0-9]+)'/\n  };\n\n  const INTERPOLATION = {\n    className: 'subst',\n    begin: /\\$\\(/,\n    end: /\\)/,\n    keywords: KEYWORDS\n  };\n\n  const INTERPOLATED_VARIABLE = {\n    className: 'variable',\n    begin: '\\\\$' + VARIABLE_NAME_RE\n  };\n\n  // TODO: neatly escape normal code in string literal\n  const STRING = {\n    className: 'string',\n    contains: [\n      hljs.BACKSLASH_ESCAPE,\n      INTERPOLATION,\n      INTERPOLATED_VARIABLE\n    ],\n    variants: [\n      {\n        begin: /\\w*\"\"\"/,\n        end: /\"\"\"\\w*/,\n        relevance: 10\n      },\n      {\n        begin: /\\w*\"/,\n        end: /\"\\w*/\n      }\n    ]\n  };\n\n  const COMMAND = {\n    className: 'string',\n    contains: [\n      hljs.BACKSLASH_ESCAPE,\n      INTERPOLATION,\n      INTERPOLATED_VARIABLE\n    ],\n    begin: '`',\n    end: '`'\n  };\n\n  const MACROCALL = {\n    className: 'meta',\n    begin: '@' + VARIABLE_NAME_RE\n  };\n\n  const COMMENT = {\n    className: 'comment',\n    variants: [\n      {\n        begin: '#=',\n        end: '=#',\n        relevance: 10\n      },\n      {\n        begin: '#',\n        end: '$'\n      }\n    ]\n  };\n\n  DEFAULT.name = 'Julia';\n  DEFAULT.contains = [\n    NUMBER,\n    CHAR,\n    STRING,\n    COMMAND,\n    MACROCALL,\n    COMMENT,\n    hljs.HASH_COMMENT_MODE,\n    {\n      className: 'keyword',\n      begin:\n        '\\\\b(((abstract|primitive)\\\\s+)type|(mutable\\\\s+)?struct)\\\\b'\n    },\n    { begin: /<:/ } // relevance booster\n  ];\n  INTERPOLATION.contains = DEFAULT.contains;\n\n  return DEFAULT;\n}\n\nmodule.exports = julia;\n","/*\nLanguage: Julia REPL\nDescription: Julia REPL sessions\nAuthor: Morten Piibeleht <morten.piibeleht@gmail.com>\nWebsite: https://julialang.org\nRequires: julia.js\nCategory: scientific\n\nThe Julia REPL code blocks look something like the following:\n\n  julia> function foo(x)\n             x + 1\n         end\n  foo (generic function with 1 method)\n\nThey start on a new line with \"julia>\". Usually there should also be a space after this, but\nwe also allow the code to start right after the > character. The code may run over multiple\nlines, but the additional lines must start with six spaces (i.e. be indented to match\n\"julia>\"). The rest of the code is assumed to be output from the executed code and will be\nleft un-highlighted.\n\nUsing simply spaces to identify line continuations may get a false-positive if the output\nalso prints out six spaces, but such cases should be rare.\n*/\n\nfunction juliaRepl(hljs) {\n  return {\n    name: 'Julia REPL',\n    contains: [\n      {\n        className: 'meta.prompt',\n        begin: /^julia>/,\n        relevance: 10,\n        starts: {\n          // end the highlighting if we are on a new line and the line does not have at\n          // least six spaces in the beginning\n          end: /^(?![ ]{6})/,\n          subLanguage: 'julia'\n        },\n      },\n    ],\n    // jldoctest Markdown blocks are used in the Julia manual and package docs indicate\n    // code snippets that should be verified when the documentation is built. They can be\n    // either REPL-like or script-like, but are usually REPL-like and therefore we apply\n    // julia-repl highlighting to them. More information can be found in Documenter's\n    // manual: https://juliadocs.github.io/Documenter.jl/latest/man/doctests.html\n    aliases: [ 'jldoctest' ],\n  };\n}\n\nmodule.exports = juliaRepl;\n","// https://docs.oracle.com/javase/specs/jls/se15/html/jls-3.html#jls-3.10\nvar decimalDigits = '[0-9](_*[0-9])*';\nvar frac = `\\\\.(${decimalDigits})`;\nvar hexDigits = '[0-9a-fA-F](_*[0-9a-fA-F])*';\nvar NUMERIC = {\n  className: 'number',\n  variants: [\n    // DecimalFloatingPointLiteral\n    // including ExponentPart\n    { begin: `(\\\\b(${decimalDigits})((${frac})|\\\\.)?|(${frac}))` +\n      `[eE][+-]?(${decimalDigits})[fFdD]?\\\\b` },\n    // excluding ExponentPart\n    { begin: `\\\\b(${decimalDigits})((${frac})[fFdD]?\\\\b|\\\\.([fFdD]\\\\b)?)` },\n    { begin: `(${frac})[fFdD]?\\\\b` },\n    { begin: `\\\\b(${decimalDigits})[fFdD]\\\\b` },\n\n    // HexadecimalFloatingPointLiteral\n    { begin: `\\\\b0[xX]((${hexDigits})\\\\.?|(${hexDigits})?\\\\.(${hexDigits}))` +\n      `[pP][+-]?(${decimalDigits})[fFdD]?\\\\b` },\n\n    // DecimalIntegerLiteral\n    { begin: '\\\\b(0|[1-9](_*[0-9])*)[lL]?\\\\b' },\n\n    // HexIntegerLiteral\n    { begin: `\\\\b0[xX](${hexDigits})[lL]?\\\\b` },\n\n    // OctalIntegerLiteral\n    { begin: '\\\\b0(_*[0-7])*[lL]?\\\\b' },\n\n    // BinaryIntegerLiteral\n    { begin: '\\\\b0[bB][01](_*[01])*[lL]?\\\\b' },\n  ],\n  relevance: 0\n};\n\n/*\n Language: Kotlin\n Description: Kotlin is an OSS statically typed programming language that targets the JVM, Android, JavaScript and Native.\n Author: Sergey Mashkov <cy6erGn0m@gmail.com>\n Website: https://kotlinlang.org\n Category: common\n */\n\n\nfunction kotlin(hljs) {\n  const KEYWORDS = {\n    keyword:\n      'abstract as val var vararg get set class object open private protected public noinline '\n      + 'crossinline dynamic final enum if else do while for when throw try catch finally '\n      + 'import package is in fun override companion reified inline lateinit init '\n      + 'interface annotation data sealed internal infix operator out by constructor super '\n      + 'tailrec where const inner suspend typealias external expect actual',\n    built_in:\n      'Byte Short Char Int Long Boolean Float Double Void Unit Nothing',\n    literal:\n      'true false null'\n  };\n  const KEYWORDS_WITH_LABEL = {\n    className: 'keyword',\n    begin: /\\b(break|continue|return|this)\\b/,\n    starts: { contains: [\n      {\n        className: 'symbol',\n        begin: /@\\w+/\n      }\n    ] }\n  };\n  const LABEL = {\n    className: 'symbol',\n    begin: hljs.UNDERSCORE_IDENT_RE + '@'\n  };\n\n  // for string templates\n  const SUBST = {\n    className: 'subst',\n    begin: /\\$\\{/,\n    end: /\\}/,\n    contains: [ hljs.C_NUMBER_MODE ]\n  };\n  const VARIABLE = {\n    className: 'variable',\n    begin: '\\\\$' + hljs.UNDERSCORE_IDENT_RE\n  };\n  const STRING = {\n    className: 'string',\n    variants: [\n      {\n        begin: '\"\"\"',\n        end: '\"\"\"(?=[^\"])',\n        contains: [\n          VARIABLE,\n          SUBST\n        ]\n      },\n      // Can't use built-in modes easily, as we want to use STRING in the meta\n      // context as 'meta-string' and there's no syntax to remove explicitly set\n      // classNames in built-in modes.\n      {\n        begin: '\\'',\n        end: '\\'',\n        illegal: /\\n/,\n        contains: [ hljs.BACKSLASH_ESCAPE ]\n      },\n      {\n        begin: '\"',\n        end: '\"',\n        illegal: /\\n/,\n        contains: [\n          hljs.BACKSLASH_ESCAPE,\n          VARIABLE,\n          SUBST\n        ]\n      }\n    ]\n  };\n  SUBST.contains.push(STRING);\n\n  const ANNOTATION_USE_SITE = {\n    className: 'meta',\n    begin: '@(?:file|property|field|get|set|receiver|param|setparam|delegate)\\\\s*:(?:\\\\s*' + hljs.UNDERSCORE_IDENT_RE + ')?'\n  };\n  const ANNOTATION = {\n    className: 'meta',\n    begin: '@' + hljs.UNDERSCORE_IDENT_RE,\n    contains: [\n      {\n        begin: /\\(/,\n        end: /\\)/,\n        contains: [\n          hljs.inherit(STRING, { className: 'string' }),\n          \"self\"\n        ]\n      }\n    ]\n  };\n\n  // https://kotlinlang.org/docs/reference/whatsnew11.html#underscores-in-numeric-literals\n  // According to the doc above, the number mode of kotlin is the same as java 8,\n  // so the code below is copied from java.js\n  const KOTLIN_NUMBER_MODE = NUMERIC;\n  const KOTLIN_NESTED_COMMENT = hljs.COMMENT(\n    '/\\\\*', '\\\\*/',\n    { contains: [ hljs.C_BLOCK_COMMENT_MODE ] }\n  );\n  const KOTLIN_PAREN_TYPE = { variants: [\n    {\n      className: 'type',\n      begin: hljs.UNDERSCORE_IDENT_RE\n    },\n    {\n      begin: /\\(/,\n      end: /\\)/,\n      contains: [] // defined later\n    }\n  ] };\n  const KOTLIN_PAREN_TYPE2 = KOTLIN_PAREN_TYPE;\n  KOTLIN_PAREN_TYPE2.variants[1].contains = [ KOTLIN_PAREN_TYPE ];\n  KOTLIN_PAREN_TYPE.variants[1].contains = [ KOTLIN_PAREN_TYPE2 ];\n\n  return {\n    name: 'Kotlin',\n    aliases: [\n      'kt',\n      'kts'\n    ],\n    keywords: KEYWORDS,\n    contains: [\n      hljs.COMMENT(\n        '/\\\\*\\\\*',\n        '\\\\*/',\n        {\n          relevance: 0,\n          contains: [\n            {\n              className: 'doctag',\n              begin: '@[A-Za-z]+'\n            }\n          ]\n        }\n      ),\n      hljs.C_LINE_COMMENT_MODE,\n      KOTLIN_NESTED_COMMENT,\n      KEYWORDS_WITH_LABEL,\n      LABEL,\n      ANNOTATION_USE_SITE,\n      ANNOTATION,\n      {\n        className: 'function',\n        beginKeywords: 'fun',\n        end: '[(]|$',\n        returnBegin: true,\n        excludeEnd: true,\n        keywords: KEYWORDS,\n        relevance: 5,\n        contains: [\n          {\n            begin: hljs.UNDERSCORE_IDENT_RE + '\\\\s*\\\\(',\n            returnBegin: true,\n            relevance: 0,\n            contains: [ hljs.UNDERSCORE_TITLE_MODE ]\n          },\n          {\n            className: 'type',\n            begin: /</,\n            end: />/,\n            keywords: 'reified',\n            relevance: 0\n          },\n          {\n            className: 'params',\n            begin: /\\(/,\n            end: /\\)/,\n            endsParent: true,\n            keywords: KEYWORDS,\n            relevance: 0,\n            contains: [\n              {\n                begin: /:/,\n                end: /[=,\\/]/,\n                endsWithParent: true,\n                contains: [\n                  KOTLIN_PAREN_TYPE,\n                  hljs.C_LINE_COMMENT_MODE,\n                  KOTLIN_NESTED_COMMENT\n                ],\n                relevance: 0\n              },\n              hljs.C_LINE_COMMENT_MODE,\n              KOTLIN_NESTED_COMMENT,\n              ANNOTATION_USE_SITE,\n              ANNOTATION,\n              STRING,\n              hljs.C_NUMBER_MODE\n            ]\n          },\n          KOTLIN_NESTED_COMMENT\n        ]\n      },\n      {\n        begin: [\n          /class|interface|trait/,\n          /\\s+/,\n          hljs.UNDERSCORE_IDENT_RE\n        ],\n        beginScope: {\n          3: \"title.class\"\n        },\n        keywords: 'class interface trait',\n        end: /[:\\{(]|$/,\n        excludeEnd: true,\n        illegal: 'extends implements',\n        contains: [\n          { beginKeywords: 'public protected internal private constructor' },\n          hljs.UNDERSCORE_TITLE_MODE,\n          {\n            className: 'type',\n            begin: /</,\n            end: />/,\n            excludeBegin: true,\n            excludeEnd: true,\n            relevance: 0\n          },\n          {\n            className: 'type',\n            begin: /[,:]\\s*/,\n            end: /[<\\(,){\\s]|$/,\n            excludeBegin: true,\n            returnEnd: true\n          },\n          ANNOTATION_USE_SITE,\n          ANNOTATION\n        ]\n      },\n      STRING,\n      {\n        className: 'meta',\n        begin: \"^#!/usr/bin/env\",\n        end: '$',\n        illegal: '\\n'\n      },\n      KOTLIN_NUMBER_MODE\n    ]\n  };\n}\n\nmodule.exports = kotlin;\n","/*\nLanguage: Lasso\nAuthor: Eric Knibbe <eric@lassosoft.com>\nDescription: Lasso is a language and server platform for database-driven web applications. This definition handles Lasso 9 syntax and LassoScript for Lasso 8.6 and earlier.\nWebsite: http://www.lassosoft.com/What-Is-Lasso\nCategory: database, web\n*/\n\nfunction lasso(hljs) {\n  const LASSO_IDENT_RE = '[a-zA-Z_][\\\\w.]*';\n  const LASSO_ANGLE_RE = '<\\\\?(lasso(script)?|=)';\n  const LASSO_CLOSE_RE = '\\\\]|\\\\?>';\n  const LASSO_KEYWORDS = {\n    $pattern: LASSO_IDENT_RE + '|&[lg]t;',\n    literal:\n      'true false none minimal full all void and or not '\n      + 'bw nbw ew new cn ncn lt lte gt gte eq neq rx nrx ft',\n    built_in:\n      'array date decimal duration integer map pair string tag xml null '\n      + 'boolean bytes keyword list locale queue set stack staticarray '\n      + 'local var variable global data self inherited currentcapture givenblock',\n    keyword:\n      'cache database_names database_schemanames database_tablenames '\n      + 'define_tag define_type email_batch encode_set html_comment handle '\n      + 'handle_error header if inline iterate ljax_target link '\n      + 'link_currentaction link_currentgroup link_currentrecord link_detail '\n      + 'link_firstgroup link_firstrecord link_lastgroup link_lastrecord '\n      + 'link_nextgroup link_nextrecord link_prevgroup link_prevrecord log '\n      + 'loop namespace_using output_none portal private protect records '\n      + 'referer referrer repeating resultset rows search_args '\n      + 'search_arguments select sort_args sort_arguments thread_atomic '\n      + 'value_list while abort case else fail_if fail_ifnot fail if_empty '\n      + 'if_false if_null if_true loop_abort loop_continue loop_count params '\n      + 'params_up return return_value run_children soap_definetag '\n      + 'soap_lastrequest soap_lastresponse tag_name ascending average by '\n      + 'define descending do equals frozen group handle_failure import in '\n      + 'into join let match max min on order parent protected provide public '\n      + 'require returnhome skip split_thread sum take thread to trait type '\n      + 'where with yield yieldhome'\n  };\n  const HTML_COMMENT = hljs.COMMENT(\n    '<!--',\n    '-->',\n    { relevance: 0 }\n  );\n  const LASSO_NOPROCESS = {\n    className: 'meta',\n    begin: '\\\\[noprocess\\\\]',\n    starts: {\n      end: '\\\\[/noprocess\\\\]',\n      returnEnd: true,\n      contains: [ HTML_COMMENT ]\n    }\n  };\n  const LASSO_START = {\n    className: 'meta',\n    begin: '\\\\[/noprocess|' + LASSO_ANGLE_RE\n  };\n  const LASSO_DATAMEMBER = {\n    className: 'symbol',\n    begin: '\\'' + LASSO_IDENT_RE + '\\''\n  };\n  const LASSO_CODE = [\n    hljs.C_LINE_COMMENT_MODE,\n    hljs.C_BLOCK_COMMENT_MODE,\n    hljs.inherit(hljs.C_NUMBER_MODE, { begin: hljs.C_NUMBER_RE + '|(-?infinity|NaN)\\\\b' }),\n    hljs.inherit(hljs.APOS_STRING_MODE, { illegal: null }),\n    hljs.inherit(hljs.QUOTE_STRING_MODE, { illegal: null }),\n    {\n      className: 'string',\n      begin: '`',\n      end: '`'\n    },\n    { // variables\n      variants: [\n        { begin: '[#$]' + LASSO_IDENT_RE },\n        {\n          begin: '#',\n          end: '\\\\d+',\n          illegal: '\\\\W'\n        }\n      ] },\n    {\n      className: 'type',\n      begin: '::\\\\s*',\n      end: LASSO_IDENT_RE,\n      illegal: '\\\\W'\n    },\n    {\n      className: 'params',\n      variants: [\n        {\n          begin: '-(?!infinity)' + LASSO_IDENT_RE,\n          relevance: 0\n        },\n        { begin: '(\\\\.\\\\.\\\\.)' }\n      ]\n    },\n    {\n      begin: /(->|\\.)\\s*/,\n      relevance: 0,\n      contains: [ LASSO_DATAMEMBER ]\n    },\n    {\n      className: 'class',\n      beginKeywords: 'define',\n      returnEnd: true,\n      end: '\\\\(|=>',\n      contains: [ hljs.inherit(hljs.TITLE_MODE, { begin: LASSO_IDENT_RE + '(=(?!>))?|[-+*/%](?!>)' }) ]\n    }\n  ];\n  return {\n    name: 'Lasso',\n    aliases: [\n      'ls',\n      'lassoscript'\n    ],\n    case_insensitive: true,\n    keywords: LASSO_KEYWORDS,\n    contains: [\n      {\n        className: 'meta',\n        begin: LASSO_CLOSE_RE,\n        relevance: 0,\n        starts: { // markup\n          end: '\\\\[|' + LASSO_ANGLE_RE,\n          returnEnd: true,\n          relevance: 0,\n          contains: [ HTML_COMMENT ]\n        }\n      },\n      LASSO_NOPROCESS,\n      LASSO_START,\n      {\n        className: 'meta',\n        begin: '\\\\[no_square_brackets',\n        starts: {\n          end: '\\\\[/no_square_brackets\\\\]', // not implemented in the language\n          keywords: LASSO_KEYWORDS,\n          contains: [\n            {\n              className: 'meta',\n              begin: LASSO_CLOSE_RE,\n              relevance: 0,\n              starts: {\n                end: '\\\\[noprocess\\\\]|' + LASSO_ANGLE_RE,\n                returnEnd: true,\n                contains: [ HTML_COMMENT ]\n              }\n            },\n            LASSO_NOPROCESS,\n            LASSO_START\n          ].concat(LASSO_CODE)\n        }\n      },\n      {\n        className: 'meta',\n        begin: '\\\\[',\n        relevance: 0\n      },\n      {\n        className: 'meta',\n        begin: '^#!',\n        end: 'lasso9$',\n        relevance: 10\n      }\n    ].concat(LASSO_CODE)\n  };\n}\n\nmodule.exports = lasso;\n","/*\nLanguage: LaTeX\nAuthor: Benedikt Wilde <bwilde@posteo.de>\nWebsite: https://www.latex-project.org\nCategory: markup\n*/\n\n/** @type LanguageFn */\nfunction latex(hljs) {\n  const regex = hljs.regex;\n  const KNOWN_CONTROL_WORDS = regex.either(...[\n    '(?:NeedsTeXFormat|RequirePackage|GetIdInfo)',\n    'Provides(?:Expl)?(?:Package|Class|File)',\n    '(?:DeclareOption|ProcessOptions)',\n    '(?:documentclass|usepackage|input|include)',\n    'makeat(?:letter|other)',\n    'ExplSyntax(?:On|Off)',\n    '(?:new|renew|provide)?command',\n    '(?:re)newenvironment',\n    '(?:New|Renew|Provide|Declare)(?:Expandable)?DocumentCommand',\n    '(?:New|Renew|Provide|Declare)DocumentEnvironment',\n    '(?:(?:e|g|x)?def|let)',\n    '(?:begin|end)',\n    '(?:part|chapter|(?:sub){0,2}section|(?:sub)?paragraph)',\n    'caption',\n    '(?:label|(?:eq|page|name)?ref|(?:paren|foot|super)?cite)',\n    '(?:alpha|beta|[Gg]amma|[Dd]elta|(?:var)?epsilon|zeta|eta|[Tt]heta|vartheta)',\n    '(?:iota|(?:var)?kappa|[Ll]ambda|mu|nu|[Xx]i|[Pp]i|varpi|(?:var)rho)',\n    '(?:[Ss]igma|varsigma|tau|[Uu]psilon|[Pp]hi|varphi|chi|[Pp]si|[Oo]mega)',\n    '(?:frac|sum|prod|lim|infty|times|sqrt|leq|geq|left|right|middle|[bB]igg?)',\n    '(?:[lr]angle|q?quad|[lcvdi]?dots|d?dot|hat|tilde|bar)'\n  ].map(word => word + '(?![a-zA-Z@:_])'));\n  const L3_REGEX = new RegExp([\n    // A function \\module_function_name:signature or \\__module_function_name:signature,\n    // where both module and function_name need at least two characters and\n    // function_name may contain single underscores.\n    '(?:__)?[a-zA-Z]{2,}_[a-zA-Z](?:_?[a-zA-Z])+:[a-zA-Z]*',\n    // A variable \\scope_module_and_name_type or \\scope__module_ane_name_type,\n    // where scope is one of l, g or c, type needs at least two characters\n    // and module_and_name may contain single underscores.\n    '[lgc]__?[a-zA-Z](?:_?[a-zA-Z])*_[a-zA-Z]{2,}',\n    // A quark \\q_the_name or \\q__the_name or\n    // scan mark \\s_the_name or \\s__vthe_name,\n    // where variable_name needs at least two characters and\n    // may contain single underscores.\n    '[qs]__?[a-zA-Z](?:_?[a-zA-Z])+',\n    // Other LaTeX3 macro names that are not covered by the three rules above.\n    'use(?:_i)?:[a-zA-Z]*',\n    '(?:else|fi|or):',\n    '(?:if|cs|exp):w',\n    '(?:hbox|vbox):n',\n    '::[a-zA-Z]_unbraced',\n    '::[a-zA-Z:]'\n  ].map(pattern => pattern + '(?![a-zA-Z:_])').join('|'));\n  const L2_VARIANTS = [\n    { begin: /[a-zA-Z@]+/ }, // control word\n    { begin: /[^a-zA-Z@]?/ } // control symbol\n  ];\n  const DOUBLE_CARET_VARIANTS = [\n    { begin: /\\^{6}[0-9a-f]{6}/ },\n    { begin: /\\^{5}[0-9a-f]{5}/ },\n    { begin: /\\^{4}[0-9a-f]{4}/ },\n    { begin: /\\^{3}[0-9a-f]{3}/ },\n    { begin: /\\^{2}[0-9a-f]{2}/ },\n    { begin: /\\^{2}[\\u0000-\\u007f]/ }\n  ];\n  const CONTROL_SEQUENCE = {\n    className: 'keyword',\n    begin: /\\\\/,\n    relevance: 0,\n    contains: [\n      {\n        endsParent: true,\n        begin: KNOWN_CONTROL_WORDS\n      },\n      {\n        endsParent: true,\n        begin: L3_REGEX\n      },\n      {\n        endsParent: true,\n        variants: DOUBLE_CARET_VARIANTS\n      },\n      {\n        endsParent: true,\n        relevance: 0,\n        variants: L2_VARIANTS\n      }\n    ]\n  };\n  const MACRO_PARAM = {\n    className: 'params',\n    relevance: 0,\n    begin: /#+\\d?/\n  };\n  const DOUBLE_CARET_CHAR = {\n    // relevance: 1\n    variants: DOUBLE_CARET_VARIANTS };\n  const SPECIAL_CATCODE = {\n    className: 'built_in',\n    relevance: 0,\n    begin: /[$&^_]/\n  };\n  const MAGIC_COMMENT = {\n    className: 'meta',\n    begin: /% ?!(T[eE]X|tex|BIB|bib)/,\n    end: '$',\n    relevance: 10\n  };\n  const COMMENT = hljs.COMMENT(\n    '%',\n    '$',\n    { relevance: 0 }\n  );\n  const EVERYTHING_BUT_VERBATIM = [\n    CONTROL_SEQUENCE,\n    MACRO_PARAM,\n    DOUBLE_CARET_CHAR,\n    SPECIAL_CATCODE,\n    MAGIC_COMMENT,\n    COMMENT\n  ];\n  const BRACE_GROUP_NO_VERBATIM = {\n    begin: /\\{/,\n    end: /\\}/,\n    relevance: 0,\n    contains: [\n      'self',\n      ...EVERYTHING_BUT_VERBATIM\n    ]\n  };\n  const ARGUMENT_BRACES = hljs.inherit(\n    BRACE_GROUP_NO_VERBATIM,\n    {\n      relevance: 0,\n      endsParent: true,\n      contains: [\n        BRACE_GROUP_NO_VERBATIM,\n        ...EVERYTHING_BUT_VERBATIM\n      ]\n    }\n  );\n  const ARGUMENT_BRACKETS = {\n    begin: /\\[/,\n    end: /\\]/,\n    endsParent: true,\n    relevance: 0,\n    contains: [\n      BRACE_GROUP_NO_VERBATIM,\n      ...EVERYTHING_BUT_VERBATIM\n    ]\n  };\n  const SPACE_GOBBLER = {\n    begin: /\\s+/,\n    relevance: 0\n  };\n  const ARGUMENT_M = [ ARGUMENT_BRACES ];\n  const ARGUMENT_O = [ ARGUMENT_BRACKETS ];\n  const ARGUMENT_AND_THEN = function(arg, starts_mode) {\n    return {\n      contains: [ SPACE_GOBBLER ],\n      starts: {\n        relevance: 0,\n        contains: arg,\n        starts: starts_mode\n      }\n    };\n  };\n  const CSNAME = function(csname, starts_mode) {\n    return {\n      begin: '\\\\\\\\' + csname + '(?![a-zA-Z@:_])',\n      keywords: {\n        $pattern: /\\\\[a-zA-Z]+/,\n        keyword: '\\\\' + csname\n      },\n      relevance: 0,\n      contains: [ SPACE_GOBBLER ],\n      starts: starts_mode\n    };\n  };\n  const BEGIN_ENV = function(envname, starts_mode) {\n    return hljs.inherit(\n      {\n        begin: '\\\\\\\\begin(?=[ \\t]*(\\\\r?\\\\n[ \\t]*)?\\\\{' + envname + '\\\\})',\n        keywords: {\n          $pattern: /\\\\[a-zA-Z]+/,\n          keyword: '\\\\begin'\n        },\n        relevance: 0,\n      },\n      ARGUMENT_AND_THEN(ARGUMENT_M, starts_mode)\n    );\n  };\n  const VERBATIM_DELIMITED_EQUAL = (innerName = \"string\") => {\n    return hljs.END_SAME_AS_BEGIN({\n      className: innerName,\n      begin: /(.|\\r?\\n)/,\n      end: /(.|\\r?\\n)/,\n      excludeBegin: true,\n      excludeEnd: true,\n      endsParent: true\n    });\n  };\n  const VERBATIM_DELIMITED_ENV = function(envname) {\n    return {\n      className: 'string',\n      end: '(?=\\\\\\\\end\\\\{' + envname + '\\\\})'\n    };\n  };\n\n  const VERBATIM_DELIMITED_BRACES = (innerName = \"string\") => {\n    return {\n      relevance: 0,\n      begin: /\\{/,\n      starts: {\n        endsParent: true,\n        contains: [\n          {\n            className: innerName,\n            end: /(?=\\})/,\n            endsParent: true,\n            contains: [\n              {\n                begin: /\\{/,\n                end: /\\}/,\n                relevance: 0,\n                contains: [ \"self\" ]\n              }\n            ],\n          }\n        ]\n      }\n    };\n  };\n  const VERBATIM = [\n    ...[\n      'verb',\n      'lstinline'\n    ].map(csname => CSNAME(csname, { contains: [ VERBATIM_DELIMITED_EQUAL() ] })),\n    CSNAME('mint', ARGUMENT_AND_THEN(ARGUMENT_M, { contains: [ VERBATIM_DELIMITED_EQUAL() ] })),\n    CSNAME('mintinline', ARGUMENT_AND_THEN(ARGUMENT_M, { contains: [\n      VERBATIM_DELIMITED_BRACES(),\n      VERBATIM_DELIMITED_EQUAL()\n    ] })),\n    CSNAME('url', { contains: [\n      VERBATIM_DELIMITED_BRACES(\"link\"),\n      VERBATIM_DELIMITED_BRACES(\"link\")\n    ] }),\n    CSNAME('hyperref', { contains: [ VERBATIM_DELIMITED_BRACES(\"link\") ] }),\n    CSNAME('href', ARGUMENT_AND_THEN(ARGUMENT_O, { contains: [ VERBATIM_DELIMITED_BRACES(\"link\") ] })),\n    ...[].concat(...[\n      '',\n      '\\\\*'\n    ].map(suffix => [\n      BEGIN_ENV('verbatim' + suffix, VERBATIM_DELIMITED_ENV('verbatim' + suffix)),\n      BEGIN_ENV('filecontents' + suffix, ARGUMENT_AND_THEN(ARGUMENT_M, VERBATIM_DELIMITED_ENV('filecontents' + suffix))),\n      ...[\n        '',\n        'B',\n        'L'\n      ].map(prefix =>\n        BEGIN_ENV(prefix + 'Verbatim' + suffix, ARGUMENT_AND_THEN(ARGUMENT_O, VERBATIM_DELIMITED_ENV(prefix + 'Verbatim' + suffix)))\n      )\n    ])),\n    BEGIN_ENV('minted', ARGUMENT_AND_THEN(ARGUMENT_O, ARGUMENT_AND_THEN(ARGUMENT_M, VERBATIM_DELIMITED_ENV('minted')))),\n  ];\n\n  return {\n    name: 'LaTeX',\n    aliases: [ 'tex' ],\n    contains: [\n      ...VERBATIM,\n      ...EVERYTHING_BUT_VERBATIM\n    ]\n  };\n}\n\nmodule.exports = latex;\n","/*\nLanguage: LDIF\nContributors: Jacob Childress <jacobc@gmail.com>\nCategory: enterprise, config\nWebsite: https://en.wikipedia.org/wiki/LDAP_Data_Interchange_Format\n*/\n\n/** @type LanguageFn */\nfunction ldif(hljs) {\n  return {\n    name: 'LDIF',\n    contains: [\n      {\n        className: 'attribute',\n        match: '^dn(?=:)',\n        relevance: 10\n      },\n      {\n        className: 'attribute',\n        match: '^\\\\w+(?=:)'\n      },\n      {\n        className: 'literal',\n        match: '^-'\n      },\n      hljs.HASH_COMMENT_MODE\n    ]\n  };\n}\n\nmodule.exports = ldif;\n","/*\nLanguage: Leaf\nDescription: A Swift-based templating language created for the Vapor project.\nWebsite: https://docs.vapor.codes/leaf/overview\nCategory: template\n*/\n\nfunction leaf(hljs) {\n  const IDENT = /([A-Za-z_][A-Za-z_0-9]*)?/;\n  const LITERALS = [\n    'true',\n    'false',\n    'in'\n  ];\n  const PARAMS = {\n    scope: 'params',\n    begin: /\\(/,\n    end: /\\)(?=\\:?)/,\n    endsParent: true,\n    relevance: 7,\n    contains: [\n      {\n        scope: 'string',\n        begin: '\"',\n        end: '\"'\n      },\n      {\n        scope: 'keyword',\n        match: LITERALS.join(\"|\"),\n      },\n      {\n        scope: 'variable',\n        match: /[A-Za-z_][A-Za-z_0-9]*/\n      },\n      {\n        scope: 'operator',\n        match: /\\+|\\-|\\*|\\/|\\%|\\=\\=|\\=|\\!|\\>|\\<|\\&\\&|\\|\\|/\n      }\n    ]\n  };\n  const INSIDE_DISPATCH = {\n    match: [\n      IDENT,\n      /(?=\\()/,\n    ],\n    scope: {\n      1: \"keyword\"\n    },\n    contains: [ PARAMS ]\n  };\n  PARAMS.contains.unshift(INSIDE_DISPATCH);\n  return {\n    name: 'Leaf',\n    contains: [\n      // #ident():\n      {\n        match: [\n          /#+/,\n          IDENT,\n          /(?=\\()/,\n        ],\n        scope: {\n          1: \"punctuation\",\n          2: \"keyword\"\n        },\n        // will start up after the ending `)` match from line ~44\n        // just to grab the trailing `:` if we can match it\n        starts: {\n          contains: [\n            {\n              match: /\\:/,\n              scope: \"punctuation\"\n            }\n          ]\n        },\n        contains: [\n          PARAMS\n        ],\n      },\n      // #ident or #ident:\n      {\n        match: [\n          /#+/,\n          IDENT,\n          /:?/,\n        ],\n        scope: {\n          1: \"punctuation\",\n          2: \"keyword\",\n          3: \"punctuation\"\n        }\n      },\n    ]\n  };\n}\n\nmodule.exports = leaf;\n","const MODES = (hljs) => {\n  return {\n    IMPORTANT: {\n      scope: 'meta',\n      begin: '!important'\n    },\n    BLOCK_COMMENT: hljs.C_BLOCK_COMMENT_MODE,\n    HEXCOLOR: {\n      scope: 'number',\n      begin: /#(([0-9a-fA-F]{3,4})|(([0-9a-fA-F]{2}){3,4}))\\b/\n    },\n    FUNCTION_DISPATCH: {\n      className: \"built_in\",\n      begin: /[\\w-]+(?=\\()/\n    },\n    ATTRIBUTE_SELECTOR_MODE: {\n      scope: 'selector-attr',\n      begin: /\\[/,\n      end: /\\]/,\n      illegal: '$',\n      contains: [\n        hljs.APOS_STRING_MODE,\n        hljs.QUOTE_STRING_MODE\n      ]\n    },\n    CSS_NUMBER_MODE: {\n      scope: 'number',\n      begin: hljs.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    },\n    CSS_VARIABLE: {\n      className: \"attr\",\n      begin: /--[A-Za-z_][A-Za-z0-9_-]*/\n    }\n  };\n};\n\nconst HTML_TAGS = [\n  'a',\n  'abbr',\n  'address',\n  'article',\n  'aside',\n  'audio',\n  'b',\n  'blockquote',\n  'body',\n  'button',\n  'canvas',\n  'caption',\n  'cite',\n  'code',\n  'dd',\n  'del',\n  'details',\n  'dfn',\n  'div',\n  'dl',\n  'dt',\n  'em',\n  'fieldset',\n  'figcaption',\n  'figure',\n  'footer',\n  'form',\n  'h1',\n  'h2',\n  'h3',\n  'h4',\n  'h5',\n  'h6',\n  'header',\n  'hgroup',\n  'html',\n  'i',\n  'iframe',\n  'img',\n  'input',\n  'ins',\n  'kbd',\n  'label',\n  'legend',\n  'li',\n  'main',\n  'mark',\n  'menu',\n  'nav',\n  'object',\n  'ol',\n  'optgroup',\n  'option',\n  'p',\n  'picture',\n  'q',\n  'quote',\n  'samp',\n  'section',\n  'select',\n  'source',\n  'span',\n  'strong',\n  'summary',\n  'sup',\n  'table',\n  'tbody',\n  'td',\n  'textarea',\n  'tfoot',\n  'th',\n  'thead',\n  'time',\n  'tr',\n  'ul',\n  'var',\n  'video'\n];\n\nconst SVG_TAGS = [\n  'defs',\n  'g',\n  'marker',\n  'mask',\n  'pattern',\n  'svg',\n  'switch',\n  'symbol',\n  'feBlend',\n  'feColorMatrix',\n  'feComponentTransfer',\n  'feComposite',\n  'feConvolveMatrix',\n  'feDiffuseLighting',\n  'feDisplacementMap',\n  'feFlood',\n  'feGaussianBlur',\n  'feImage',\n  'feMerge',\n  'feMorphology',\n  'feOffset',\n  'feSpecularLighting',\n  'feTile',\n  'feTurbulence',\n  'linearGradient',\n  'radialGradient',\n  'stop',\n  'circle',\n  'ellipse',\n  'image',\n  'line',\n  'path',\n  'polygon',\n  'polyline',\n  'rect',\n  'text',\n  'use',\n  'textPath',\n  'tspan',\n  'foreignObject',\n  'clipPath'\n];\n\nconst TAGS = [\n  ...HTML_TAGS,\n  ...SVG_TAGS,\n];\n\n// Sorting, then reversing makes sure longer attributes/elements like\n// `font-weight` are matched fully instead of getting false positives on say `font`\n\nconst MEDIA_FEATURES = [\n  'any-hover',\n  'any-pointer',\n  'aspect-ratio',\n  'color',\n  'color-gamut',\n  'color-index',\n  'device-aspect-ratio',\n  'device-height',\n  'device-width',\n  'display-mode',\n  'forced-colors',\n  'grid',\n  'height',\n  'hover',\n  'inverted-colors',\n  'monochrome',\n  'orientation',\n  'overflow-block',\n  'overflow-inline',\n  'pointer',\n  'prefers-color-scheme',\n  'prefers-contrast',\n  'prefers-reduced-motion',\n  'prefers-reduced-transparency',\n  'resolution',\n  'scan',\n  'scripting',\n  'update',\n  'width',\n  // TODO: find a better solution?\n  'min-width',\n  'max-width',\n  'min-height',\n  'max-height'\n].sort().reverse();\n\n// https://developer.mozilla.org/en-US/docs/Web/CSS/Pseudo-classes\nconst PSEUDO_CLASSES = [\n  'active',\n  'any-link',\n  'blank',\n  'checked',\n  'current',\n  'default',\n  'defined',\n  'dir', // dir()\n  'disabled',\n  'drop',\n  'empty',\n  'enabled',\n  'first',\n  'first-child',\n  'first-of-type',\n  'fullscreen',\n  'future',\n  'focus',\n  'focus-visible',\n  'focus-within',\n  'has', // has()\n  'host', // host or host()\n  'host-context', // host-context()\n  'hover',\n  'indeterminate',\n  'in-range',\n  'invalid',\n  'is', // is()\n  'lang', // lang()\n  'last-child',\n  'last-of-type',\n  'left',\n  'link',\n  'local-link',\n  'not', // not()\n  'nth-child', // nth-child()\n  'nth-col', // nth-col()\n  'nth-last-child', // nth-last-child()\n  'nth-last-col', // nth-last-col()\n  'nth-last-of-type', //nth-last-of-type()\n  'nth-of-type', //nth-of-type()\n  'only-child',\n  'only-of-type',\n  'optional',\n  'out-of-range',\n  'past',\n  'placeholder-shown',\n  'read-only',\n  'read-write',\n  'required',\n  'right',\n  'root',\n  'scope',\n  'target',\n  'target-within',\n  'user-invalid',\n  'valid',\n  'visited',\n  'where' // where()\n].sort().reverse();\n\n// https://developer.mozilla.org/en-US/docs/Web/CSS/Pseudo-elements\nconst PSEUDO_ELEMENTS = [\n  'after',\n  'backdrop',\n  'before',\n  'cue',\n  'cue-region',\n  'first-letter',\n  'first-line',\n  'grammar-error',\n  'marker',\n  'part',\n  'placeholder',\n  'selection',\n  'slotted',\n  'spelling-error'\n].sort().reverse();\n\nconst ATTRIBUTES = [\n  'accent-color',\n  'align-content',\n  'align-items',\n  'align-self',\n  'alignment-baseline',\n  'all',\n  'anchor-name',\n  'animation',\n  'animation-composition',\n  'animation-delay',\n  'animation-direction',\n  'animation-duration',\n  'animation-fill-mode',\n  'animation-iteration-count',\n  'animation-name',\n  'animation-play-state',\n  'animation-range',\n  'animation-range-end',\n  'animation-range-start',\n  'animation-timeline',\n  'animation-timing-function',\n  'appearance',\n  'aspect-ratio',\n  'backdrop-filter',\n  'backface-visibility',\n  'background',\n  'background-attachment',\n  'background-blend-mode',\n  'background-clip',\n  'background-color',\n  'background-image',\n  'background-origin',\n  'background-position',\n  'background-position-x',\n  'background-position-y',\n  'background-repeat',\n  'background-size',\n  'baseline-shift',\n  'block-size',\n  'border',\n  'border-block',\n  'border-block-color',\n  'border-block-end',\n  'border-block-end-color',\n  'border-block-end-style',\n  'border-block-end-width',\n  'border-block-start',\n  'border-block-start-color',\n  'border-block-start-style',\n  'border-block-start-width',\n  'border-block-style',\n  'border-block-width',\n  'border-bottom',\n  'border-bottom-color',\n  'border-bottom-left-radius',\n  'border-bottom-right-radius',\n  'border-bottom-style',\n  'border-bottom-width',\n  'border-collapse',\n  'border-color',\n  'border-end-end-radius',\n  'border-end-start-radius',\n  'border-image',\n  'border-image-outset',\n  'border-image-repeat',\n  'border-image-slice',\n  'border-image-source',\n  'border-image-width',\n  'border-inline',\n  'border-inline-color',\n  'border-inline-end',\n  'border-inline-end-color',\n  'border-inline-end-style',\n  'border-inline-end-width',\n  'border-inline-start',\n  'border-inline-start-color',\n  'border-inline-start-style',\n  'border-inline-start-width',\n  'border-inline-style',\n  'border-inline-width',\n  'border-left',\n  'border-left-color',\n  'border-left-style',\n  'border-left-width',\n  'border-radius',\n  'border-right',\n  'border-right-color',\n  'border-right-style',\n  'border-right-width',\n  'border-spacing',\n  'border-start-end-radius',\n  'border-start-start-radius',\n  'border-style',\n  'border-top',\n  'border-top-color',\n  'border-top-left-radius',\n  'border-top-right-radius',\n  'border-top-style',\n  'border-top-width',\n  'border-width',\n  'bottom',\n  'box-align',\n  'box-decoration-break',\n  'box-direction',\n  'box-flex',\n  'box-flex-group',\n  'box-lines',\n  'box-ordinal-group',\n  'box-orient',\n  'box-pack',\n  'box-shadow',\n  'box-sizing',\n  'break-after',\n  'break-before',\n  'break-inside',\n  'caption-side',\n  'caret-color',\n  'clear',\n  'clip',\n  'clip-path',\n  'clip-rule',\n  'color',\n  'color-interpolation',\n  'color-interpolation-filters',\n  'color-profile',\n  'color-rendering',\n  'color-scheme',\n  'column-count',\n  'column-fill',\n  'column-gap',\n  'column-rule',\n  'column-rule-color',\n  'column-rule-style',\n  'column-rule-width',\n  'column-span',\n  'column-width',\n  'columns',\n  'contain',\n  'contain-intrinsic-block-size',\n  'contain-intrinsic-height',\n  'contain-intrinsic-inline-size',\n  'contain-intrinsic-size',\n  'contain-intrinsic-width',\n  'container',\n  'container-name',\n  'container-type',\n  'content',\n  'content-visibility',\n  'counter-increment',\n  'counter-reset',\n  'counter-set',\n  'cue',\n  'cue-after',\n  'cue-before',\n  'cursor',\n  'cx',\n  'cy',\n  'direction',\n  'display',\n  'dominant-baseline',\n  'empty-cells',\n  'enable-background',\n  'field-sizing',\n  'fill',\n  'fill-opacity',\n  'fill-rule',\n  'filter',\n  'flex',\n  'flex-basis',\n  'flex-direction',\n  'flex-flow',\n  'flex-grow',\n  'flex-shrink',\n  'flex-wrap',\n  'float',\n  'flood-color',\n  'flood-opacity',\n  'flow',\n  'font',\n  'font-display',\n  'font-family',\n  'font-feature-settings',\n  'font-kerning',\n  'font-language-override',\n  'font-optical-sizing',\n  'font-palette',\n  'font-size',\n  'font-size-adjust',\n  'font-smooth',\n  'font-smoothing',\n  'font-stretch',\n  'font-style',\n  'font-synthesis',\n  'font-synthesis-position',\n  'font-synthesis-small-caps',\n  'font-synthesis-style',\n  'font-synthesis-weight',\n  'font-variant',\n  'font-variant-alternates',\n  'font-variant-caps',\n  'font-variant-east-asian',\n  'font-variant-emoji',\n  'font-variant-ligatures',\n  'font-variant-numeric',\n  'font-variant-position',\n  'font-variation-settings',\n  'font-weight',\n  'forced-color-adjust',\n  'gap',\n  'glyph-orientation-horizontal',\n  'glyph-orientation-vertical',\n  'grid',\n  'grid-area',\n  'grid-auto-columns',\n  'grid-auto-flow',\n  'grid-auto-rows',\n  'grid-column',\n  'grid-column-end',\n  'grid-column-start',\n  'grid-gap',\n  'grid-row',\n  'grid-row-end',\n  'grid-row-start',\n  'grid-template',\n  'grid-template-areas',\n  'grid-template-columns',\n  'grid-template-rows',\n  'hanging-punctuation',\n  'height',\n  'hyphenate-character',\n  'hyphenate-limit-chars',\n  'hyphens',\n  'icon',\n  'image-orientation',\n  'image-rendering',\n  'image-resolution',\n  'ime-mode',\n  'initial-letter',\n  'initial-letter-align',\n  'inline-size',\n  'inset',\n  'inset-area',\n  'inset-block',\n  'inset-block-end',\n  'inset-block-start',\n  'inset-inline',\n  'inset-inline-end',\n  'inset-inline-start',\n  'isolation',\n  'justify-content',\n  'justify-items',\n  'justify-self',\n  'kerning',\n  'left',\n  'letter-spacing',\n  'lighting-color',\n  'line-break',\n  'line-height',\n  'line-height-step',\n  'list-style',\n  'list-style-image',\n  'list-style-position',\n  'list-style-type',\n  'margin',\n  'margin-block',\n  'margin-block-end',\n  'margin-block-start',\n  'margin-bottom',\n  'margin-inline',\n  'margin-inline-end',\n  'margin-inline-start',\n  'margin-left',\n  'margin-right',\n  'margin-top',\n  'margin-trim',\n  'marker',\n  'marker-end',\n  'marker-mid',\n  'marker-start',\n  'marks',\n  'mask',\n  'mask-border',\n  'mask-border-mode',\n  'mask-border-outset',\n  'mask-border-repeat',\n  'mask-border-slice',\n  'mask-border-source',\n  'mask-border-width',\n  'mask-clip',\n  'mask-composite',\n  'mask-image',\n  'mask-mode',\n  'mask-origin',\n  'mask-position',\n  'mask-repeat',\n  'mask-size',\n  'mask-type',\n  'masonry-auto-flow',\n  'math-depth',\n  'math-shift',\n  'math-style',\n  'max-block-size',\n  'max-height',\n  'max-inline-size',\n  'max-width',\n  'min-block-size',\n  'min-height',\n  'min-inline-size',\n  'min-width',\n  'mix-blend-mode',\n  'nav-down',\n  'nav-index',\n  'nav-left',\n  'nav-right',\n  'nav-up',\n  'none',\n  'normal',\n  'object-fit',\n  'object-position',\n  'offset',\n  'offset-anchor',\n  'offset-distance',\n  'offset-path',\n  'offset-position',\n  'offset-rotate',\n  'opacity',\n  'order',\n  'orphans',\n  'outline',\n  'outline-color',\n  'outline-offset',\n  'outline-style',\n  'outline-width',\n  'overflow',\n  'overflow-anchor',\n  'overflow-block',\n  'overflow-clip-margin',\n  'overflow-inline',\n  'overflow-wrap',\n  'overflow-x',\n  'overflow-y',\n  'overlay',\n  'overscroll-behavior',\n  'overscroll-behavior-block',\n  'overscroll-behavior-inline',\n  'overscroll-behavior-x',\n  'overscroll-behavior-y',\n  'padding',\n  'padding-block',\n  'padding-block-end',\n  'padding-block-start',\n  'padding-bottom',\n  'padding-inline',\n  'padding-inline-end',\n  'padding-inline-start',\n  'padding-left',\n  'padding-right',\n  'padding-top',\n  'page',\n  'page-break-after',\n  'page-break-before',\n  'page-break-inside',\n  'paint-order',\n  'pause',\n  'pause-after',\n  'pause-before',\n  'perspective',\n  'perspective-origin',\n  'place-content',\n  'place-items',\n  'place-self',\n  'pointer-events',\n  'position',\n  'position-anchor',\n  'position-visibility',\n  'print-color-adjust',\n  'quotes',\n  'r',\n  'resize',\n  'rest',\n  'rest-after',\n  'rest-before',\n  'right',\n  'rotate',\n  'row-gap',\n  'ruby-align',\n  'ruby-position',\n  'scale',\n  'scroll-behavior',\n  'scroll-margin',\n  'scroll-margin-block',\n  'scroll-margin-block-end',\n  'scroll-margin-block-start',\n  'scroll-margin-bottom',\n  'scroll-margin-inline',\n  'scroll-margin-inline-end',\n  'scroll-margin-inline-start',\n  'scroll-margin-left',\n  'scroll-margin-right',\n  'scroll-margin-top',\n  'scroll-padding',\n  'scroll-padding-block',\n  'scroll-padding-block-end',\n  'scroll-padding-block-start',\n  'scroll-padding-bottom',\n  'scroll-padding-inline',\n  'scroll-padding-inline-end',\n  'scroll-padding-inline-start',\n  'scroll-padding-left',\n  'scroll-padding-right',\n  'scroll-padding-top',\n  'scroll-snap-align',\n  'scroll-snap-stop',\n  'scroll-snap-type',\n  'scroll-timeline',\n  'scroll-timeline-axis',\n  'scroll-timeline-name',\n  'scrollbar-color',\n  'scrollbar-gutter',\n  'scrollbar-width',\n  'shape-image-threshold',\n  'shape-margin',\n  'shape-outside',\n  'shape-rendering',\n  'speak',\n  'speak-as',\n  'src', // @font-face\n  'stop-color',\n  'stop-opacity',\n  'stroke',\n  'stroke-dasharray',\n  'stroke-dashoffset',\n  'stroke-linecap',\n  'stroke-linejoin',\n  'stroke-miterlimit',\n  'stroke-opacity',\n  'stroke-width',\n  'tab-size',\n  'table-layout',\n  'text-align',\n  'text-align-all',\n  'text-align-last',\n  'text-anchor',\n  'text-combine-upright',\n  'text-decoration',\n  'text-decoration-color',\n  'text-decoration-line',\n  'text-decoration-skip',\n  'text-decoration-skip-ink',\n  'text-decoration-style',\n  'text-decoration-thickness',\n  'text-emphasis',\n  'text-emphasis-color',\n  'text-emphasis-position',\n  'text-emphasis-style',\n  'text-indent',\n  'text-justify',\n  'text-orientation',\n  'text-overflow',\n  'text-rendering',\n  'text-shadow',\n  'text-size-adjust',\n  'text-transform',\n  'text-underline-offset',\n  'text-underline-position',\n  'text-wrap',\n  'text-wrap-mode',\n  'text-wrap-style',\n  'timeline-scope',\n  'top',\n  'touch-action',\n  'transform',\n  'transform-box',\n  'transform-origin',\n  'transform-style',\n  'transition',\n  'transition-behavior',\n  'transition-delay',\n  'transition-duration',\n  'transition-property',\n  'transition-timing-function',\n  'translate',\n  'unicode-bidi',\n  'user-modify',\n  'user-select',\n  'vector-effect',\n  'vertical-align',\n  'view-timeline',\n  'view-timeline-axis',\n  'view-timeline-inset',\n  'view-timeline-name',\n  'view-transition-name',\n  'visibility',\n  'voice-balance',\n  'voice-duration',\n  'voice-family',\n  'voice-pitch',\n  'voice-range',\n  'voice-rate',\n  'voice-stress',\n  'voice-volume',\n  'white-space',\n  'white-space-collapse',\n  'widows',\n  'width',\n  'will-change',\n  'word-break',\n  'word-spacing',\n  'word-wrap',\n  'writing-mode',\n  'x',\n  'y',\n  'z-index',\n  'zoom'\n].sort().reverse();\n\n// some grammars use them all as a single group\nconst PSEUDO_SELECTORS = PSEUDO_CLASSES.concat(PSEUDO_ELEMENTS).sort().reverse();\n\n/*\nLanguage: Less\nDescription: It's CSS, with just a little more.\nAuthor:   Max Mikhailov <seven.phases.max@gmail.com>\nWebsite: http://lesscss.org\nCategory: common, css, web\n*/\n\n\n/** @type LanguageFn */\nfunction less(hljs) {\n  const modes = MODES(hljs);\n  const PSEUDO_SELECTORS$1 = PSEUDO_SELECTORS;\n\n  const AT_MODIFIERS = \"and or not only\";\n  const IDENT_RE = '[\\\\w-]+'; // yes, Less identifiers may begin with a digit\n  const INTERP_IDENT_RE = '(' + IDENT_RE + '|@\\\\{' + IDENT_RE + '\\\\})';\n\n  /* Generic Modes */\n\n  const RULES = []; const VALUE_MODES = []; // forward def. for recursive modes\n\n  const STRING_MODE = function(c) {\n    return {\n    // Less strings are not multiline (also include '~' for more consistent coloring of \"escaped\" strings)\n      className: 'string',\n      begin: '~?' + c + '.*?' + c\n    };\n  };\n\n  const IDENT_MODE = function(name, begin, relevance) {\n    return {\n      className: name,\n      begin: begin,\n      relevance: relevance\n    };\n  };\n\n  const AT_KEYWORDS = {\n    $pattern: /[a-z-]+/,\n    keyword: AT_MODIFIERS,\n    attribute: MEDIA_FEATURES.join(\" \")\n  };\n\n  const PARENS_MODE = {\n    // used only to properly balance nested parens inside mixin call, def. arg list\n    begin: '\\\\(',\n    end: '\\\\)',\n    contains: VALUE_MODES,\n    keywords: AT_KEYWORDS,\n    relevance: 0\n  };\n\n  // generic Less highlighter (used almost everywhere except selectors):\n  VALUE_MODES.push(\n    hljs.C_LINE_COMMENT_MODE,\n    hljs.C_BLOCK_COMMENT_MODE,\n    STRING_MODE(\"'\"),\n    STRING_MODE('\"'),\n    modes.CSS_NUMBER_MODE, // fixme: it does not include dot for numbers like .5em :(\n    {\n      begin: '(url|data-uri)\\\\(',\n      starts: {\n        className: 'string',\n        end: '[\\\\)\\\\n]',\n        excludeEnd: true\n      }\n    },\n    modes.HEXCOLOR,\n    PARENS_MODE,\n    IDENT_MODE('variable', '@@?' + IDENT_RE, 10),\n    IDENT_MODE('variable', '@\\\\{' + IDENT_RE + '\\\\}'),\n    IDENT_MODE('built_in', '~?`[^`]*?`'), // inline javascript (or whatever host language) *multiline* string\n    { // @media features (it’s here to not duplicate things in AT_RULE_MODE with extra PARENS_MODE overriding):\n      className: 'attribute',\n      begin: IDENT_RE + '\\\\s*:',\n      end: ':',\n      returnBegin: true,\n      excludeEnd: true\n    },\n    modes.IMPORTANT,\n    { beginKeywords: 'and not' },\n    modes.FUNCTION_DISPATCH\n  );\n\n  const VALUE_WITH_RULESETS = VALUE_MODES.concat({\n    begin: /\\{/,\n    end: /\\}/,\n    contains: RULES\n  });\n\n  const MIXIN_GUARD_MODE = {\n    beginKeywords: 'when',\n    endsWithParent: true,\n    contains: [ { beginKeywords: 'and not' } ].concat(VALUE_MODES) // using this form to override VALUE’s 'function' match\n  };\n\n  /* Rule-Level Modes */\n\n  const RULE_MODE = {\n    begin: INTERP_IDENT_RE + '\\\\s*:',\n    returnBegin: true,\n    end: /[;}]/,\n    relevance: 0,\n    contains: [\n      { begin: /-(webkit|moz|ms|o)-/ },\n      modes.CSS_VARIABLE,\n      {\n        className: 'attribute',\n        begin: '\\\\b(' + ATTRIBUTES.join('|') + ')\\\\b',\n        end: /(?=:)/,\n        starts: {\n          endsWithParent: true,\n          illegal: '[<=$]',\n          relevance: 0,\n          contains: VALUE_MODES\n        }\n      }\n    ]\n  };\n\n  const AT_RULE_MODE = {\n    className: 'keyword',\n    begin: '@(import|media|charset|font-face|(-[a-z]+-)?keyframes|supports|document|namespace|page|viewport|host)\\\\b',\n    starts: {\n      end: '[;{}]',\n      keywords: AT_KEYWORDS,\n      returnEnd: true,\n      contains: VALUE_MODES,\n      relevance: 0\n    }\n  };\n\n  // variable definitions and calls\n  const VAR_RULE_MODE = {\n    className: 'variable',\n    variants: [\n      // using more strict pattern for higher relevance to increase chances of Less detection.\n      // this is *the only* Less specific statement used in most of the sources, so...\n      // (we’ll still often loose to the css-parser unless there's '//' comment,\n      // simply because 1 variable just can't beat 99 properties :)\n      {\n        begin: '@' + IDENT_RE + '\\\\s*:',\n        relevance: 15\n      },\n      { begin: '@' + IDENT_RE }\n    ],\n    starts: {\n      end: '[;}]',\n      returnEnd: true,\n      contains: VALUE_WITH_RULESETS\n    }\n  };\n\n  const SELECTOR_MODE = {\n    // first parse unambiguous selectors (i.e. those not starting with tag)\n    // then fall into the scary lookahead-discriminator variant.\n    // this mode also handles mixin definitions and calls\n    variants: [\n      {\n        begin: '[\\\\.#:&\\\\[>]',\n        end: '[;{}]' // mixin calls end with ';'\n      },\n      {\n        begin: INTERP_IDENT_RE,\n        end: /\\{/\n      }\n    ],\n    returnBegin: true,\n    returnEnd: true,\n    illegal: '[<=\\'$\"]',\n    relevance: 0,\n    contains: [\n      hljs.C_LINE_COMMENT_MODE,\n      hljs.C_BLOCK_COMMENT_MODE,\n      MIXIN_GUARD_MODE,\n      IDENT_MODE('keyword', 'all\\\\b'),\n      IDENT_MODE('variable', '@\\\\{' + IDENT_RE + '\\\\}'), // otherwise it’s identified as tag\n      \n      {\n        begin: '\\\\b(' + TAGS.join('|') + ')\\\\b',\n        className: 'selector-tag'\n      },\n      modes.CSS_NUMBER_MODE,\n      IDENT_MODE('selector-tag', INTERP_IDENT_RE, 0),\n      IDENT_MODE('selector-id', '#' + INTERP_IDENT_RE),\n      IDENT_MODE('selector-class', '\\\\.' + INTERP_IDENT_RE, 0),\n      IDENT_MODE('selector-tag', '&', 0),\n      modes.ATTRIBUTE_SELECTOR_MODE,\n      {\n        className: 'selector-pseudo',\n        begin: ':(' + PSEUDO_CLASSES.join('|') + ')'\n      },\n      {\n        className: 'selector-pseudo',\n        begin: ':(:)?(' + PSEUDO_ELEMENTS.join('|') + ')'\n      },\n      {\n        begin: /\\(/,\n        end: /\\)/,\n        relevance: 0,\n        contains: VALUE_WITH_RULESETS\n      }, // argument list of parametric mixins\n      { begin: '!important' }, // eat !important after mixin call or it will be colored as tag\n      modes.FUNCTION_DISPATCH\n    ]\n  };\n\n  const PSEUDO_SELECTOR_MODE = {\n    begin: IDENT_RE + ':(:)?' + `(${PSEUDO_SELECTORS$1.join('|')})`,\n    returnBegin: true,\n    contains: [ SELECTOR_MODE ]\n  };\n\n  RULES.push(\n    hljs.C_LINE_COMMENT_MODE,\n    hljs.C_BLOCK_COMMENT_MODE,\n    AT_RULE_MODE,\n    VAR_RULE_MODE,\n    PSEUDO_SELECTOR_MODE,\n    RULE_MODE,\n    SELECTOR_MODE,\n    MIXIN_GUARD_MODE,\n    modes.FUNCTION_DISPATCH\n  );\n\n  return {\n    name: 'Less',\n    case_insensitive: true,\n    illegal: '[=>\\'/<($\"]',\n    contains: RULES\n  };\n}\n\nmodule.exports = less;\n","/*\nLanguage: Lisp\nDescription: Generic lisp syntax\nAuthor: Vasily Polovnyov <vast@whiteants.net>\nCategory: lisp\n*/\n\nfunction lisp(hljs) {\n  const LISP_IDENT_RE = '[a-zA-Z_\\\\-+\\\\*\\\\/<=>&#][a-zA-Z0-9_\\\\-+*\\\\/<=>&#!]*';\n  const MEC_RE = '\\\\|[^]*?\\\\|';\n  const LISP_SIMPLE_NUMBER_RE = '(-|\\\\+)?\\\\d+(\\\\.\\\\d+|\\\\/\\\\d+)?((d|e|f|l|s|D|E|F|L|S)(\\\\+|-)?\\\\d+)?';\n  const LITERAL = {\n    className: 'literal',\n    begin: '\\\\b(t{1}|nil)\\\\b'\n  };\n  const NUMBER = {\n    className: 'number',\n    variants: [\n      {\n        begin: LISP_SIMPLE_NUMBER_RE,\n        relevance: 0\n      },\n      { begin: '#(b|B)[0-1]+(/[0-1]+)?' },\n      { begin: '#(o|O)[0-7]+(/[0-7]+)?' },\n      { begin: '#(x|X)[0-9a-fA-F]+(/[0-9a-fA-F]+)?' },\n      {\n        begin: '#(c|C)\\\\(' + LISP_SIMPLE_NUMBER_RE + ' +' + LISP_SIMPLE_NUMBER_RE,\n        end: '\\\\)'\n      }\n    ]\n  };\n  const STRING = hljs.inherit(hljs.QUOTE_STRING_MODE, { illegal: null });\n  const COMMENT = hljs.COMMENT(\n    ';', '$',\n    { relevance: 0 }\n  );\n  const VARIABLE = {\n    begin: '\\\\*',\n    end: '\\\\*'\n  };\n  const KEYWORD = {\n    className: 'symbol',\n    begin: '[:&]' + LISP_IDENT_RE\n  };\n  const IDENT = {\n    begin: LISP_IDENT_RE,\n    relevance: 0\n  };\n  const MEC = { begin: MEC_RE };\n  const QUOTED_LIST = {\n    begin: '\\\\(',\n    end: '\\\\)',\n    contains: [\n      'self',\n      LITERAL,\n      STRING,\n      NUMBER,\n      IDENT\n    ]\n  };\n  const QUOTED = {\n    contains: [\n      NUMBER,\n      STRING,\n      VARIABLE,\n      KEYWORD,\n      QUOTED_LIST,\n      IDENT\n    ],\n    variants: [\n      {\n        begin: '[\\'`]\\\\(',\n        end: '\\\\)'\n      },\n      {\n        begin: '\\\\(quote ',\n        end: '\\\\)',\n        keywords: { name: 'quote' }\n      },\n      { begin: '\\'' + MEC_RE }\n    ]\n  };\n  const QUOTED_ATOM = { variants: [\n    { begin: '\\'' + LISP_IDENT_RE },\n    { begin: '#\\'' + LISP_IDENT_RE + '(::' + LISP_IDENT_RE + ')*' }\n  ] };\n  const LIST = {\n    begin: '\\\\(\\\\s*',\n    end: '\\\\)'\n  };\n  const BODY = {\n    endsWithParent: true,\n    relevance: 0\n  };\n  LIST.contains = [\n    {\n      className: 'name',\n      variants: [\n        {\n          begin: LISP_IDENT_RE,\n          relevance: 0,\n        },\n        { begin: MEC_RE }\n      ]\n    },\n    BODY\n  ];\n  BODY.contains = [\n    QUOTED,\n    QUOTED_ATOM,\n    LIST,\n    LITERAL,\n    NUMBER,\n    STRING,\n    COMMENT,\n    VARIABLE,\n    KEYWORD,\n    MEC,\n    IDENT\n  ];\n\n  return {\n    name: 'Lisp',\n    illegal: /\\S/,\n    contains: [\n      NUMBER,\n      hljs.SHEBANG(),\n      LITERAL,\n      STRING,\n      COMMENT,\n      QUOTED,\n      QUOTED_ATOM,\n      LIST,\n      IDENT\n    ]\n  };\n}\n\nmodule.exports = lisp;\n","/*\nLanguage: LiveCode\nAuthor: Ralf Bitter <rabit@revigniter.com>\nDescription: Language definition for LiveCode server accounting for revIgniter (a web application framework) characteristics.\nVersion: 1.1\nDate: 2019-04-17\nCategory: enterprise\n*/\n\nfunction livecodeserver(hljs) {\n  const VARIABLE = {\n    className: 'variable',\n    variants: [\n      { begin: '\\\\b([gtps][A-Z]{1}[a-zA-Z0-9]*)(\\\\[.+\\\\])?(?:\\\\s*?)' },\n      { begin: '\\\\$_[A-Z]+' }\n    ],\n    relevance: 0\n  };\n  const COMMENT_MODES = [\n    hljs.C_BLOCK_COMMENT_MODE,\n    hljs.HASH_COMMENT_MODE,\n    hljs.COMMENT('--', '$'),\n    hljs.COMMENT('[^:]//', '$')\n  ];\n  const TITLE1 = hljs.inherit(hljs.TITLE_MODE, { variants: [\n    { begin: '\\\\b_*rig[A-Z][A-Za-z0-9_\\\\-]*' },\n    { begin: '\\\\b_[a-z0-9\\\\-]+' }\n  ] });\n  const TITLE2 = hljs.inherit(hljs.TITLE_MODE, { begin: '\\\\b([A-Za-z0-9_\\\\-]+)\\\\b' });\n  return {\n    name: 'LiveCode',\n    case_insensitive: false,\n    keywords: {\n      keyword:\n        '$_COOKIE $_FILES $_GET $_GET_BINARY $_GET_RAW $_POST $_POST_BINARY $_POST_RAW $_SESSION $_SERVER '\n        + 'codepoint codepoints segment segments codeunit codeunits sentence sentences trueWord trueWords paragraph '\n        + 'after byte bytes english the until http forever descending using line real8 with seventh '\n        + 'for stdout finally element word words fourth before black ninth sixth characters chars stderr '\n        + 'uInt1 uInt1s uInt2 uInt2s stdin string lines relative rel any fifth items from middle mid '\n        + 'at else of catch then third it file milliseconds seconds second secs sec int1 int1s int4 '\n        + 'int4s internet int2 int2s normal text item last long detailed effective uInt4 uInt4s repeat '\n        + 'end repeat URL in try into switch to words https token binfile each tenth as ticks tick '\n        + 'system real4 by dateItems without char character ascending eighth whole dateTime numeric short '\n        + 'first ftp integer abbreviated abbr abbrev private case while if '\n        + 'div mod wrap and or bitAnd bitNot bitOr bitXor among not in a an within '\n        + 'contains ends with begins the keys of keys',\n      literal:\n        'SIX TEN FORMFEED NINE ZERO NONE SPACE FOUR FALSE COLON CRLF PI COMMA ENDOFFILE EOF EIGHT FIVE '\n        + 'QUOTE EMPTY ONE TRUE RETURN CR LINEFEED RIGHT BACKSLASH NULL SEVEN TAB THREE TWO '\n        + 'six ten formfeed nine zero none space four false colon crlf pi comma endoffile eof eight five '\n        + 'quote empty one true return cr linefeed right backslash null seven tab three two '\n        + 'RIVERSION RISTATE FILE_READ_MODE FILE_WRITE_MODE FILE_WRITE_MODE DIR_WRITE_MODE FILE_READ_UMASK '\n        + 'FILE_WRITE_UMASK DIR_READ_UMASK DIR_WRITE_UMASK',\n      built_in:\n        'put abs acos aliasReference annuity arrayDecode arrayEncode asin atan atan2 average avg avgDev base64Decode '\n        + 'base64Encode baseConvert binaryDecode binaryEncode byteOffset byteToNum cachedURL cachedURLs charToNum '\n        + 'cipherNames codepointOffset codepointProperty codepointToNum codeunitOffset commandNames compound compress '\n        + 'constantNames cos date dateFormat decompress difference directories '\n        + 'diskSpace DNSServers exp exp1 exp2 exp10 extents files flushEvents folders format functionNames geometricMean global '\n        + 'globals hasMemory harmonicMean hostAddress hostAddressToName hostName hostNameToAddress isNumber ISOToMac itemOffset '\n        + 'keys len length libURLErrorData libUrlFormData libURLftpCommand libURLLastHTTPHeaders libURLLastRHHeaders '\n        + 'libUrlMultipartFormAddPart libUrlMultipartFormData libURLVersion lineOffset ln ln1 localNames log log2 log10 '\n        + 'longFilePath lower macToISO matchChunk matchText matrixMultiply max md5Digest median merge messageAuthenticationCode messageDigest millisec '\n        + 'millisecs millisecond milliseconds min monthNames nativeCharToNum normalizeText num number numToByte numToChar '\n        + 'numToCodepoint numToNativeChar offset open openfiles openProcesses openProcessIDs openSockets '\n        + 'paragraphOffset paramCount param params peerAddress pendingMessages platform popStdDev populationStandardDeviation '\n        + 'populationVariance popVariance processID random randomBytes replaceText result revCreateXMLTree revCreateXMLTreeFromFile '\n        + 'revCurrentRecord revCurrentRecordIsFirst revCurrentRecordIsLast revDatabaseColumnCount revDatabaseColumnIsNull '\n        + 'revDatabaseColumnLengths revDatabaseColumnNames revDatabaseColumnNamed revDatabaseColumnNumbered '\n        + 'revDatabaseColumnTypes revDatabaseConnectResult revDatabaseCursors revDatabaseID revDatabaseTableNames '\n        + 'revDatabaseType revDataFromQuery revdb_closeCursor revdb_columnbynumber revdb_columncount revdb_columnisnull '\n        + 'revdb_columnlengths revdb_columnnames revdb_columntypes revdb_commit revdb_connect revdb_connections '\n        + 'revdb_connectionerr revdb_currentrecord revdb_cursorconnection revdb_cursorerr revdb_cursors revdb_dbtype '\n        + 'revdb_disconnect revdb_execute revdb_iseof revdb_isbof revdb_movefirst revdb_movelast revdb_movenext '\n        + 'revdb_moveprev revdb_query revdb_querylist revdb_recordcount revdb_rollback revdb_tablenames '\n        + 'revGetDatabaseDriverPath revNumberOfRecords revOpenDatabase revOpenDatabases revQueryDatabase '\n        + 'revQueryDatabaseBlob revQueryResult revQueryIsAtStart revQueryIsAtEnd revUnixFromMacPath revXMLAttribute '\n        + 'revXMLAttributes revXMLAttributeValues revXMLChildContents revXMLChildNames revXMLCreateTreeFromFileWithNamespaces '\n        + 'revXMLCreateTreeWithNamespaces revXMLDataFromXPathQuery revXMLEvaluateXPath revXMLFirstChild revXMLMatchingNode '\n        + 'revXMLNextSibling revXMLNodeContents revXMLNumberOfChildren revXMLParent revXMLPreviousSibling '\n        + 'revXMLRootNode revXMLRPC_CreateRequest revXMLRPC_Documents revXMLRPC_Error '\n        + 'revXMLRPC_GetHost revXMLRPC_GetMethod revXMLRPC_GetParam revXMLText revXMLRPC_Execute '\n        + 'revXMLRPC_GetParamCount revXMLRPC_GetParamNode revXMLRPC_GetParamType revXMLRPC_GetPath revXMLRPC_GetPort '\n        + 'revXMLRPC_GetProtocol revXMLRPC_GetRequest revXMLRPC_GetResponse revXMLRPC_GetSocket revXMLTree '\n        + 'revXMLTrees revXMLValidateDTD revZipDescribeItem revZipEnumerateItems revZipOpenArchives round sampVariance '\n        + 'sec secs seconds sentenceOffset sha1Digest shell shortFilePath sin specialFolderPath sqrt standardDeviation statRound '\n        + 'stdDev sum sysError systemVersion tan tempName textDecode textEncode tick ticks time to tokenOffset toLower toUpper '\n        + 'transpose truewordOffset trunc uniDecode uniEncode upper URLDecode URLEncode URLStatus uuid value variableNames '\n        + 'variance version waitDepth weekdayNames wordOffset xsltApplyStylesheet xsltApplyStylesheetFromFile xsltLoadStylesheet '\n        + 'xsltLoadStylesheetFromFile add breakpoint cancel clear local variable file word line folder directory URL close socket process '\n        + 'combine constant convert create new alias folder directory decrypt delete variable word line folder '\n        + 'directory URL dispatch divide do encrypt filter get include intersect kill libURLDownloadToFile '\n        + 'libURLFollowHttpRedirects libURLftpUpload libURLftpUploadFile libURLresetAll libUrlSetAuthCallback libURLSetDriver '\n        + 'libURLSetCustomHTTPHeaders libUrlSetExpect100 libURLSetFTPListCommand libURLSetFTPMode libURLSetFTPStopTime '\n        + 'libURLSetStatusCallback load extension loadedExtensions multiply socket prepare process post seek rel relative read from process rename '\n        + 'replace require resetAll resolve revAddXMLNode revAppendXML revCloseCursor revCloseDatabase revCommitDatabase '\n        + 'revCopyFile revCopyFolder revCopyXMLNode revDeleteFolder revDeleteXMLNode revDeleteAllXMLTrees '\n        + 'revDeleteXMLTree revExecuteSQL revGoURL revInsertXMLNode revMoveFolder revMoveToFirstRecord revMoveToLastRecord '\n        + 'revMoveToNextRecord revMoveToPreviousRecord revMoveToRecord revMoveXMLNode revPutIntoXMLNode revRollBackDatabase '\n        + 'revSetDatabaseDriverPath revSetXMLAttribute revXMLRPC_AddParam revXMLRPC_DeleteAllDocuments revXMLAddDTD '\n        + 'revXMLRPC_Free revXMLRPC_FreeAll revXMLRPC_DeleteDocument revXMLRPC_DeleteParam revXMLRPC_SetHost '\n        + 'revXMLRPC_SetMethod revXMLRPC_SetPort revXMLRPC_SetProtocol revXMLRPC_SetSocket revZipAddItemWithData '\n        + 'revZipAddItemWithFile revZipAddUncompressedItemWithData revZipAddUncompressedItemWithFile revZipCancel '\n        + 'revZipCloseArchive revZipDeleteItem revZipExtractItemToFile revZipExtractItemToVariable revZipSetProgressCallback '\n        + 'revZipRenameItem revZipReplaceItemWithData revZipReplaceItemWithFile revZipOpenArchive send set sort split start stop '\n        + 'subtract symmetric union unload vectorDotProduct wait write'\n    },\n    contains: [\n      VARIABLE,\n      {\n        className: 'keyword',\n        begin: '\\\\bend\\\\sif\\\\b'\n      },\n      {\n        className: 'function',\n        beginKeywords: 'function',\n        end: '$',\n        contains: [\n          VARIABLE,\n          TITLE2,\n          hljs.APOS_STRING_MODE,\n          hljs.QUOTE_STRING_MODE,\n          hljs.BINARY_NUMBER_MODE,\n          hljs.C_NUMBER_MODE,\n          TITLE1\n        ]\n      },\n      {\n        className: 'function',\n        begin: '\\\\bend\\\\s+',\n        end: '$',\n        keywords: 'end',\n        contains: [\n          TITLE2,\n          TITLE1\n        ],\n        relevance: 0\n      },\n      {\n        beginKeywords: 'command on',\n        end: '$',\n        contains: [\n          VARIABLE,\n          TITLE2,\n          hljs.APOS_STRING_MODE,\n          hljs.QUOTE_STRING_MODE,\n          hljs.BINARY_NUMBER_MODE,\n          hljs.C_NUMBER_MODE,\n          TITLE1\n        ]\n      },\n      {\n        className: 'meta',\n        variants: [\n          {\n            begin: '<\\\\?(rev|lc|livecode)',\n            relevance: 10\n          },\n          { begin: '<\\\\?' },\n          { begin: '\\\\?>' }\n        ]\n      },\n      hljs.APOS_STRING_MODE,\n      hljs.QUOTE_STRING_MODE,\n      hljs.BINARY_NUMBER_MODE,\n      hljs.C_NUMBER_MODE,\n      TITLE1\n    ].concat(COMMENT_MODES),\n    illegal: ';$|^\\\\[|^=|&|\\\\{'\n  };\n}\n\nmodule.exports = livecodeserver;\n","const KEYWORDS = [\n  \"as\", // for exports\n  \"in\",\n  \"of\",\n  \"if\",\n  \"for\",\n  \"while\",\n  \"finally\",\n  \"var\",\n  \"new\",\n  \"function\",\n  \"do\",\n  \"return\",\n  \"void\",\n  \"else\",\n  \"break\",\n  \"catch\",\n  \"instanceof\",\n  \"with\",\n  \"throw\",\n  \"case\",\n  \"default\",\n  \"try\",\n  \"switch\",\n  \"continue\",\n  \"typeof\",\n  \"delete\",\n  \"let\",\n  \"yield\",\n  \"const\",\n  \"class\",\n  // JS handles these with a special rule\n  // \"get\",\n  // \"set\",\n  \"debugger\",\n  \"async\",\n  \"await\",\n  \"static\",\n  \"import\",\n  \"from\",\n  \"export\",\n  \"extends\",\n  // It's reached stage 3, which is \"recommended for implementation\":\n  \"using\"\n];\nconst LITERALS = [\n  \"true\",\n  \"false\",\n  \"null\",\n  \"undefined\",\n  \"NaN\",\n  \"Infinity\"\n];\n\n// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects\nconst TYPES = [\n  // Fundamental objects\n  \"Object\",\n  \"Function\",\n  \"Boolean\",\n  \"Symbol\",\n  // numbers and dates\n  \"Math\",\n  \"Date\",\n  \"Number\",\n  \"BigInt\",\n  // text\n  \"String\",\n  \"RegExp\",\n  // Indexed collections\n  \"Array\",\n  \"Float32Array\",\n  \"Float64Array\",\n  \"Int8Array\",\n  \"Uint8Array\",\n  \"Uint8ClampedArray\",\n  \"Int16Array\",\n  \"Int32Array\",\n  \"Uint16Array\",\n  \"Uint32Array\",\n  \"BigInt64Array\",\n  \"BigUint64Array\",\n  // Keyed collections\n  \"Set\",\n  \"Map\",\n  \"WeakSet\",\n  \"WeakMap\",\n  // Structured data\n  \"ArrayBuffer\",\n  \"SharedArrayBuffer\",\n  \"Atomics\",\n  \"DataView\",\n  \"JSON\",\n  // Control abstraction objects\n  \"Promise\",\n  \"Generator\",\n  \"GeneratorFunction\",\n  \"AsyncFunction\",\n  // Reflection\n  \"Reflect\",\n  \"Proxy\",\n  // Internationalization\n  \"Intl\",\n  // WebAssembly\n  \"WebAssembly\"\n];\n\nconst ERROR_TYPES = [\n  \"Error\",\n  \"EvalError\",\n  \"InternalError\",\n  \"RangeError\",\n  \"ReferenceError\",\n  \"SyntaxError\",\n  \"TypeError\",\n  \"URIError\"\n];\n\nconst BUILT_IN_GLOBALS = [\n  \"setInterval\",\n  \"setTimeout\",\n  \"clearInterval\",\n  \"clearTimeout\",\n\n  \"require\",\n  \"exports\",\n\n  \"eval\",\n  \"isFinite\",\n  \"isNaN\",\n  \"parseFloat\",\n  \"parseInt\",\n  \"decodeURI\",\n  \"decodeURIComponent\",\n  \"encodeURI\",\n  \"encodeURIComponent\",\n  \"escape\",\n  \"unescape\"\n];\n\nconst BUILT_INS = [].concat(\n  BUILT_IN_GLOBALS,\n  TYPES,\n  ERROR_TYPES\n);\n\n/*\nLanguage: LiveScript\nAuthor: Taneli Vatanen <taneli.vatanen@gmail.com>\nContributors: Jen Evers-Corvina <jen@sevvie.net>\nOrigin: coffeescript.js\nDescription: LiveScript is a programming language that transcompiles to JavaScript. For info about language see http://livescript.net/\nWebsite: https://livescript.net\nCategory: scripting\n*/\n\n\nfunction livescript(hljs) {\n  const LIVESCRIPT_BUILT_INS = [\n    'npm',\n    'print'\n  ];\n  const LIVESCRIPT_LITERALS = [\n    'yes',\n    'no',\n    'on',\n    'off',\n    'it',\n    'that',\n    'void'\n  ];\n  const LIVESCRIPT_KEYWORDS = [\n    'then',\n    'unless',\n    'until',\n    'loop',\n    'of',\n    'by',\n    'when',\n    'and',\n    'or',\n    'is',\n    'isnt',\n    'not',\n    'it',\n    'that',\n    'otherwise',\n    'from',\n    'to',\n    'til',\n    'fallthrough',\n    'case',\n    'enum',\n    'native',\n    'list',\n    'map',\n    '__hasProp',\n    '__extends',\n    '__slice',\n    '__bind',\n    '__indexOf'\n  ];\n  const KEYWORDS$1 = {\n    keyword: KEYWORDS.concat(LIVESCRIPT_KEYWORDS),\n    literal: LITERALS.concat(LIVESCRIPT_LITERALS),\n    built_in: BUILT_INS.concat(LIVESCRIPT_BUILT_INS)\n  };\n  const JS_IDENT_RE = '[A-Za-z$_](?:-[0-9A-Za-z$_]|[0-9A-Za-z$_])*';\n  const TITLE = hljs.inherit(hljs.TITLE_MODE, { begin: JS_IDENT_RE });\n  const SUBST = {\n    className: 'subst',\n    begin: /#\\{/,\n    end: /\\}/,\n    keywords: KEYWORDS$1\n  };\n  const SUBST_SIMPLE = {\n    className: 'subst',\n    begin: /#[A-Za-z$_]/,\n    end: /(?:-[0-9A-Za-z$_]|[0-9A-Za-z$_])*/,\n    keywords: KEYWORDS$1\n  };\n  const EXPRESSIONS = [\n    hljs.BINARY_NUMBER_MODE,\n    {\n      className: 'number',\n      begin: '(\\\\b0[xX][a-fA-F0-9_]+)|(\\\\b\\\\d(\\\\d|_\\\\d)*(\\\\.(\\\\d(\\\\d|_\\\\d)*)?)?(_*[eE]([-+]\\\\d(_\\\\d|\\\\d)*)?)?[_a-z]*)',\n      relevance: 0,\n      starts: {\n        end: '(\\\\s*/)?',\n        relevance: 0\n      } // a number tries to eat the following slash to prevent treating it as a regexp\n    },\n    {\n      className: 'string',\n      variants: [\n        {\n          begin: /'''/,\n          end: /'''/,\n          contains: [ hljs.BACKSLASH_ESCAPE ]\n        },\n        {\n          begin: /'/,\n          end: /'/,\n          contains: [ hljs.BACKSLASH_ESCAPE ]\n        },\n        {\n          begin: /\"\"\"/,\n          end: /\"\"\"/,\n          contains: [\n            hljs.BACKSLASH_ESCAPE,\n            SUBST,\n            SUBST_SIMPLE\n          ]\n        },\n        {\n          begin: /\"/,\n          end: /\"/,\n          contains: [\n            hljs.BACKSLASH_ESCAPE,\n            SUBST,\n            SUBST_SIMPLE\n          ]\n        },\n        {\n          begin: /\\\\/,\n          end: /(\\s|$)/,\n          excludeEnd: true\n        }\n      ]\n    },\n    {\n      className: 'regexp',\n      variants: [\n        {\n          begin: '//',\n          end: '//[gim]*',\n          contains: [\n            SUBST,\n            hljs.HASH_COMMENT_MODE\n          ]\n        },\n        {\n          // regex can't start with space to parse x / 2 / 3 as two divisions\n          // regex can't start with *, and it supports an \"illegal\" in the main mode\n          begin: /\\/(?![ *])(\\\\.|[^\\\\\\n])*?\\/[gim]*(?=\\W)/ }\n      ]\n    },\n    { begin: '@' + JS_IDENT_RE },\n    {\n      begin: '``',\n      end: '``',\n      excludeBegin: true,\n      excludeEnd: true,\n      subLanguage: 'javascript'\n    }\n  ];\n  SUBST.contains = EXPRESSIONS;\n\n  const PARAMS = {\n    className: 'params',\n    begin: '\\\\(',\n    returnBegin: true,\n    /* We need another contained nameless mode to not have every nested\n    pair of parens to be called \"params\" */\n    contains: [\n      {\n        begin: /\\(/,\n        end: /\\)/,\n        keywords: KEYWORDS$1,\n        contains: [ 'self' ].concat(EXPRESSIONS)\n      }\n    ]\n  };\n\n  const SYMBOLS = { begin: '(#=>|=>|\\\\|>>|-?->|!->)' };\n\n  const CLASS_DEFINITION = {\n    variants: [\n      { match: [\n        /class\\s+/,\n        JS_IDENT_RE,\n        /\\s+extends\\s+/,\n        JS_IDENT_RE\n      ] },\n      { match: [\n        /class\\s+/,\n        JS_IDENT_RE\n      ] }\n    ],\n    scope: {\n      2: \"title.class\",\n      4: \"title.class.inherited\"\n    },\n    keywords: KEYWORDS$1\n  };\n\n  return {\n    name: 'LiveScript',\n    aliases: [ 'ls' ],\n    keywords: KEYWORDS$1,\n    illegal: /\\/\\*/,\n    contains: EXPRESSIONS.concat([\n      hljs.COMMENT('\\\\/\\\\*', '\\\\*\\\\/'),\n      hljs.HASH_COMMENT_MODE,\n      SYMBOLS, // relevance booster\n      {\n        className: 'function',\n        contains: [\n          TITLE,\n          PARAMS\n        ],\n        returnBegin: true,\n        variants: [\n          {\n            begin: '(' + JS_IDENT_RE + '\\\\s*(?:=|:=)\\\\s*)?(\\\\(.*\\\\)\\\\s*)?\\\\B->\\\\*?',\n            end: '->\\\\*?'\n          },\n          {\n            begin: '(' + JS_IDENT_RE + '\\\\s*(?:=|:=)\\\\s*)?!?(\\\\(.*\\\\)\\\\s*)?\\\\B[-~]{1,2}>\\\\*?',\n            end: '[-~]{1,2}>\\\\*?'\n          },\n          {\n            begin: '(' + JS_IDENT_RE + '\\\\s*(?:=|:=)\\\\s*)?(\\\\(.*\\\\)\\\\s*)?\\\\B!?[-~]{1,2}>\\\\*?',\n            end: '!?[-~]{1,2}>\\\\*?'\n          }\n        ]\n      },\n      CLASS_DEFINITION,\n      {\n        begin: JS_IDENT_RE + ':',\n        end: ':',\n        returnBegin: true,\n        returnEnd: true,\n        relevance: 0\n      }\n    ])\n  };\n}\n\nmodule.exports = livescript;\n","/*\nLanguage: LLVM IR\nAuthor: Michael Rodler <contact@f0rki.at>\nDescription: language used as intermediate representation in the LLVM compiler framework\nWebsite: https://llvm.org/docs/LangRef.html\nCategory: assembler\nAudit: 2020\n*/\n\n/** @type LanguageFn */\nfunction llvm(hljs) {\n  const regex = hljs.regex;\n  const IDENT_RE = /([-a-zA-Z$._][\\w$.-]*)/;\n  const TYPE = {\n    className: 'type',\n    begin: /\\bi\\d+(?=\\s|\\b)/\n  };\n  const OPERATOR = {\n    className: 'operator',\n    relevance: 0,\n    begin: /=/\n  };\n  const PUNCTUATION = {\n    className: 'punctuation',\n    relevance: 0,\n    begin: /,/\n  };\n  const NUMBER = {\n    className: 'number',\n    variants: [\n      { begin: /[su]?0[xX][KMLHR]?[a-fA-F0-9]+/ },\n      { begin: /[-+]?\\d+(?:[.]\\d+)?(?:[eE][-+]?\\d+(?:[.]\\d+)?)?/ }\n    ],\n    relevance: 0\n  };\n  const LABEL = {\n    className: 'symbol',\n    variants: [ { begin: /^\\s*[a-z]+:/ }, // labels\n    ],\n    relevance: 0\n  };\n  const VARIABLE = {\n    className: 'variable',\n    variants: [\n      { begin: regex.concat(/%/, IDENT_RE) },\n      { begin: /%\\d+/ },\n      { begin: /#\\d+/ },\n    ]\n  };\n  const FUNCTION = {\n    className: 'title',\n    variants: [\n      { begin: regex.concat(/@/, IDENT_RE) },\n      { begin: /@\\d+/ },\n      { begin: regex.concat(/!/, IDENT_RE) },\n      { begin: regex.concat(/!\\d+/, IDENT_RE) },\n      // https://llvm.org/docs/LangRef.html#namedmetadatastructure\n      // obviously a single digit can also be used in this fashion\n      { begin: /!\\d+/ }\n    ]\n  };\n\n  return {\n    name: 'LLVM IR',\n    // TODO: split into different categories of keywords\n    keywords: {\n      keyword: 'begin end true false declare define global '\n        + 'constant private linker_private internal '\n        + 'available_externally linkonce linkonce_odr weak '\n        + 'weak_odr appending dllimport dllexport common '\n        + 'default hidden protected extern_weak external '\n        + 'thread_local zeroinitializer undef null to tail '\n        + 'target triple datalayout volatile nuw nsw nnan '\n        + 'ninf nsz arcp fast exact inbounds align '\n        + 'addrspace section alias module asm sideeffect '\n        + 'gc dbg linker_private_weak attributes blockaddress '\n        + 'initialexec localdynamic localexec prefix unnamed_addr '\n        + 'ccc fastcc coldcc x86_stdcallcc x86_fastcallcc '\n        + 'arm_apcscc arm_aapcscc arm_aapcs_vfpcc ptx_device '\n        + 'ptx_kernel intel_ocl_bicc msp430_intrcc spir_func '\n        + 'spir_kernel x86_64_sysvcc x86_64_win64cc x86_thiscallcc '\n        + 'cc c signext zeroext inreg sret nounwind '\n        + 'noreturn noalias nocapture byval nest readnone '\n        + 'readonly inlinehint noinline alwaysinline optsize ssp '\n        + 'sspreq noredzone noimplicitfloat naked builtin cold '\n        + 'nobuiltin noduplicate nonlazybind optnone returns_twice '\n        + 'sanitize_address sanitize_memory sanitize_thread sspstrong '\n        + 'uwtable returned type opaque eq ne slt sgt '\n        + 'sle sge ult ugt ule uge oeq one olt ogt '\n        + 'ole oge ord uno ueq une x acq_rel acquire '\n        + 'alignstack atomic catch cleanup filter inteldialect '\n        + 'max min monotonic nand personality release seq_cst '\n        + 'singlethread umax umin unordered xchg add fadd '\n        + 'sub fsub mul fmul udiv sdiv fdiv urem srem '\n        + 'frem shl lshr ashr and or xor icmp fcmp '\n        + 'phi call trunc zext sext fptrunc fpext uitofp '\n        + 'sitofp fptoui fptosi inttoptr ptrtoint bitcast '\n        + 'addrspacecast select va_arg ret br switch invoke '\n        + 'unwind unreachable indirectbr landingpad resume '\n        + 'malloc alloca free load store getelementptr '\n        + 'extractelement insertelement shufflevector getresult '\n        + 'extractvalue insertvalue atomicrmw cmpxchg fence '\n        + 'argmemonly',\n      type: 'void half bfloat float double fp128 x86_fp80 ppc_fp128 '\n        + 'x86_amx x86_mmx ptr label token metadata opaque'\n    },\n    contains: [\n      TYPE,\n      // this matches \"empty comments\"...\n      // ...because it's far more likely this is a statement terminator in\n      // another language than an actual comment\n      hljs.COMMENT(/;\\s*$/, null, { relevance: 0 }),\n      hljs.COMMENT(/;/, /$/),\n      {\n        className: 'string',\n        begin: /\"/,\n        end: /\"/,\n        contains: [\n          {\n            className: 'char.escape',\n            match: /\\\\\\d\\d/\n          }\n        ]\n      },\n      FUNCTION,\n      PUNCTUATION,\n      OPERATOR,\n      VARIABLE,\n      LABEL,\n      NUMBER\n    ]\n  };\n}\n\nmodule.exports = llvm;\n","/*\nLanguage: LSL (Linden Scripting Language)\nDescription: The Linden Scripting Language is used in Second Life by Linden Labs.\nAuthor: Builder's Brewery <buildersbrewery@gmail.com>\nWebsite: http://wiki.secondlife.com/wiki/LSL_Portal\nCategory: scripting\n*/\n\nfunction lsl(hljs) {\n  const LSL_STRING_ESCAPE_CHARS = {\n    className: 'subst',\n    begin: /\\\\[tn\"\\\\]/\n  };\n\n  const LSL_STRINGS = {\n    className: 'string',\n    begin: '\"',\n    end: '\"',\n    contains: [ LSL_STRING_ESCAPE_CHARS ]\n  };\n\n  const LSL_NUMBERS = {\n    className: 'number',\n    relevance: 0,\n    begin: hljs.C_NUMBER_RE\n  };\n\n  const LSL_CONSTANTS = {\n    className: 'literal',\n    variants: [\n      { begin: '\\\\b(PI|TWO_PI|PI_BY_TWO|DEG_TO_RAD|RAD_TO_DEG|SQRT2)\\\\b' },\n      { begin: '\\\\b(XP_ERROR_(EXPERIENCES_DISABLED|EXPERIENCE_(DISABLED|SUSPENDED)|INVALID_(EXPERIENCE|PARAMETERS)|KEY_NOT_FOUND|MATURITY_EXCEEDED|NONE|NOT_(FOUND|PERMITTED(_LAND)?)|NO_EXPERIENCE|QUOTA_EXCEEDED|RETRY_UPDATE|STORAGE_EXCEPTION|STORE_DISABLED|THROTTLED|UNKNOWN_ERROR)|JSON_APPEND|STATUS_(PHYSICS|ROTATE_[XYZ]|PHANTOM|SANDBOX|BLOCK_GRAB(_OBJECT)?|(DIE|RETURN)_AT_EDGE|CAST_SHADOWS|OK|MALFORMED_PARAMS|TYPE_MISMATCH|BOUNDS_ERROR|NOT_(FOUND|SUPPORTED)|INTERNAL_ERROR|WHITELIST_FAILED)|AGENT(_(BY_(LEGACY_|USER)NAME|FLYING|ATTACHMENTS|SCRIPTED|MOUSELOOK|SITTING|ON_OBJECT|AWAY|WALKING|IN_AIR|TYPING|CROUCHING|BUSY|ALWAYS_RUN|AUTOPILOT|LIST_(PARCEL(_OWNER)?|REGION)))?|CAMERA_(PITCH|DISTANCE|BEHINDNESS_(ANGLE|LAG)|(FOCUS|POSITION)(_(THRESHOLD|LOCKED|LAG))?|FOCUS_OFFSET|ACTIVE)|ANIM_ON|LOOP|REVERSE|PING_PONG|SMOOTH|ROTATE|SCALE|ALL_SIDES|LINK_(ROOT|SET|ALL_(OTHERS|CHILDREN)|THIS)|ACTIVE|PASS(IVE|_(ALWAYS|IF_NOT_HANDLED|NEVER))|SCRIPTED|CONTROL_(FWD|BACK|(ROT_)?(LEFT|RIGHT)|UP|DOWN|(ML_)?LBUTTON)|PERMISSION_(RETURN_OBJECTS|DEBIT|OVERRIDE_ANIMATIONS|SILENT_ESTATE_MANAGEMENT|TAKE_CONTROLS|TRIGGER_ANIMATION|ATTACH|CHANGE_LINKS|(CONTROL|TRACK)_CAMERA|TELEPORT)|INVENTORY_(TEXTURE|SOUND|OBJECT|SCRIPT|LANDMARK|CLOTHING|NOTECARD|BODYPART|ANIMATION|GESTURE|ALL|NONE)|CHANGED_(INVENTORY|COLOR|SHAPE|SCALE|TEXTURE|LINK|ALLOWED_DROP|OWNER|REGION(_START)?|TELEPORT|MEDIA)|OBJECT_(CLICK_ACTION|HOVER_HEIGHT|LAST_OWNER_ID|(PHYSICS|SERVER|STREAMING)_COST|UNKNOWN_DETAIL|CHARACTER_TIME|PHANTOM|PHYSICS|TEMP_(ATTACHED|ON_REZ)|NAME|DESC|POS|PRIM_(COUNT|EQUIVALENCE)|RETURN_(PARCEL(_OWNER)?|REGION)|REZZER_KEY|ROO?T|VELOCITY|OMEGA|OWNER|GROUP(_TAG)?|CREATOR|ATTACHED_(POINT|SLOTS_AVAILABLE)|RENDER_WEIGHT|(BODY_SHAPE|PATHFINDING)_TYPE|(RUNNING|TOTAL)_SCRIPT_COUNT|TOTAL_INVENTORY_COUNT|SCRIPT_(MEMORY|TIME))|TYPE_(INTEGER|FLOAT|STRING|KEY|VECTOR|ROTATION|INVALID)|(DEBUG|PUBLIC)_CHANNEL|ATTACH_(AVATAR_CENTER|CHEST|HEAD|BACK|PELVIS|MOUTH|CHIN|NECK|NOSE|BELLY|[LR](SHOULDER|HAND|FOOT|EAR|EYE|[UL](ARM|LEG)|HIP)|(LEFT|RIGHT)_PEC|HUD_(CENTER_[12]|TOP_(RIGHT|CENTER|LEFT)|BOTTOM(_(RIGHT|LEFT))?)|[LR]HAND_RING1|TAIL_(BASE|TIP)|[LR]WING|FACE_(JAW|[LR]EAR|[LR]EYE|TOUNGE)|GROIN|HIND_[LR]FOOT)|LAND_(LEVEL|RAISE|LOWER|SMOOTH|NOISE|REVERT)|DATA_(ONLINE|NAME|BORN|SIM_(POS|STATUS|RATING)|PAYINFO)|PAYMENT_INFO_(ON_FILE|USED)|REMOTE_DATA_(CHANNEL|REQUEST|REPLY)|PSYS_(PART_(BF_(ZERO|ONE(_MINUS_(DEST_COLOR|SOURCE_(ALPHA|COLOR)))?|DEST_COLOR|SOURCE_(ALPHA|COLOR))|BLEND_FUNC_(DEST|SOURCE)|FLAGS|(START|END)_(COLOR|ALPHA|SCALE|GLOW)|MAX_AGE|(RIBBON|WIND|INTERP_(COLOR|SCALE)|BOUNCE|FOLLOW_(SRC|VELOCITY)|TARGET_(POS|LINEAR)|EMISSIVE)_MASK)|SRC_(MAX_AGE|PATTERN|ANGLE_(BEGIN|END)|BURST_(RATE|PART_COUNT|RADIUS|SPEED_(MIN|MAX))|ACCEL|TEXTURE|TARGET_KEY|OMEGA|PATTERN_(DROP|EXPLODE|ANGLE(_CONE(_EMPTY)?)?)))|VEHICLE_(REFERENCE_FRAME|TYPE_(NONE|SLED|CAR|BOAT|AIRPLANE|BALLOON)|(LINEAR|ANGULAR)_(FRICTION_TIMESCALE|MOTOR_DIRECTION)|LINEAR_MOTOR_OFFSET|HOVER_(HEIGHT|EFFICIENCY|TIMESCALE)|BUOYANCY|(LINEAR|ANGULAR)_(DEFLECTION_(EFFICIENCY|TIMESCALE)|MOTOR_(DECAY_)?TIMESCALE)|VERTICAL_ATTRACTION_(EFFICIENCY|TIMESCALE)|BANKING_(EFFICIENCY|MIX|TIMESCALE)|FLAG_(NO_DEFLECTION_UP|LIMIT_(ROLL_ONLY|MOTOR_UP)|HOVER_((WATER|TERRAIN|UP)_ONLY|GLOBAL_HEIGHT)|MOUSELOOK_(STEER|BANK)|CAMERA_DECOUPLED))|PRIM_(ALLOW_UNSIT|ALPHA_MODE(_(BLEND|EMISSIVE|MASK|NONE))?|NORMAL|SPECULAR|TYPE(_(BOX|CYLINDER|PRISM|SPHERE|TORUS|TUBE|RING|SCULPT))?|HOLE_(DEFAULT|CIRCLE|SQUARE|TRIANGLE)|MATERIAL(_(STONE|METAL|GLASS|WOOD|FLESH|PLASTIC|RUBBER))?|SHINY_(NONE|LOW|MEDIUM|HIGH)|BUMP_(NONE|BRIGHT|DARK|WOOD|BARK|BRICKS|CHECKER|CONCRETE|TILE|STONE|DISKS|GRAVEL|BLOBS|SIDING|LARGETILE|STUCCO|SUCTION|WEAVE)|TEXGEN_(DEFAULT|PLANAR)|SCRIPTED_SIT_ONLY|SCULPT_(TYPE_(SPHERE|TORUS|PLANE|CYLINDER|MASK)|FLAG_(MIRROR|INVERT))|PHYSICS(_(SHAPE_(CONVEX|NONE|PRIM|TYPE)))?|(POS|ROT)_LOCAL|SLICE|TEXT|FLEXIBLE|POINT_LIGHT|TEMP_ON_REZ|PHANTOM|POSITION|SIT_TARGET|SIZE|ROTATION|TEXTURE|NAME|OMEGA|DESC|LINK_TARGET|COLOR|BUMP_SHINY|FULLBRIGHT|TEXGEN|GLOW|MEDIA_(ALT_IMAGE_ENABLE|CONTROLS|(CURRENT|HOME)_URL|AUTO_(LOOP|PLAY|SCALE|ZOOM)|FIRST_CLICK_INTERACT|(WIDTH|HEIGHT)_PIXELS|WHITELIST(_ENABLE)?|PERMS_(INTERACT|CONTROL)|PARAM_MAX|CONTROLS_(STANDARD|MINI)|PERM_(NONE|OWNER|GROUP|ANYONE)|MAX_(URL_LENGTH|WHITELIST_(SIZE|COUNT)|(WIDTH|HEIGHT)_PIXELS)))|MASK_(BASE|OWNER|GROUP|EVERYONE|NEXT)|PERM_(TRANSFER|MODIFY|COPY|MOVE|ALL)|PARCEL_(MEDIA_COMMAND_(STOP|PAUSE|PLAY|LOOP|TEXTURE|URL|TIME|AGENT|UNLOAD|AUTO_ALIGN|TYPE|SIZE|DESC|LOOP_SET)|FLAG_(ALLOW_(FLY|(GROUP_)?SCRIPTS|LANDMARK|TERRAFORM|DAMAGE|CREATE_(GROUP_)?OBJECTS)|USE_(ACCESS_(GROUP|LIST)|BAN_LIST|LAND_PASS_LIST)|LOCAL_SOUND_ONLY|RESTRICT_PUSHOBJECT|ALLOW_(GROUP|ALL)_OBJECT_ENTRY)|COUNT_(TOTAL|OWNER|GROUP|OTHER|SELECTED|TEMP)|DETAILS_(NAME|DESC|OWNER|GROUP|AREA|ID|SEE_AVATARS))|LIST_STAT_(MAX|MIN|MEAN|MEDIAN|STD_DEV|SUM(_SQUARES)?|NUM_COUNT|GEOMETRIC_MEAN|RANGE)|PAY_(HIDE|DEFAULT)|REGION_FLAG_(ALLOW_DAMAGE|FIXED_SUN|BLOCK_TERRAFORM|SANDBOX|DISABLE_(COLLISIONS|PHYSICS)|BLOCK_FLY|ALLOW_DIRECT_TELEPORT|RESTRICT_PUSHOBJECT)|HTTP_(METHOD|MIMETYPE|BODY_(MAXLENGTH|TRUNCATED)|CUSTOM_HEADER|PRAGMA_NO_CACHE|VERBOSE_THROTTLE|VERIFY_CERT)|SIT_(INVALID_(AGENT|LINK_OBJECT)|NO(T_EXPERIENCE|_(ACCESS|EXPERIENCE_PERMISSION|SIT_TARGET)))|STRING_(TRIM(_(HEAD|TAIL))?)|CLICK_ACTION_(NONE|TOUCH|SIT|BUY|PAY|OPEN(_MEDIA)?|PLAY|ZOOM)|TOUCH_INVALID_FACE|PROFILE_(NONE|SCRIPT_MEMORY)|RC_(DATA_FLAGS|DETECT_PHANTOM|GET_(LINK_NUM|NORMAL|ROOT_KEY)|MAX_HITS|REJECT_(TYPES|AGENTS|(NON)?PHYSICAL|LAND))|RCERR_(CAST_TIME_EXCEEDED|SIM_PERF_LOW|UNKNOWN)|ESTATE_ACCESS_(ALLOWED_(AGENT|GROUP)_(ADD|REMOVE)|BANNED_AGENT_(ADD|REMOVE))|DENSITY|FRICTION|RESTITUTION|GRAVITY_MULTIPLIER|KFM_(COMMAND|CMD_(PLAY|STOP|PAUSE)|MODE|FORWARD|LOOP|PING_PONG|REVERSE|DATA|ROTATION|TRANSLATION)|ERR_(GENERIC|PARCEL_PERMISSIONS|MALFORMED_PARAMS|RUNTIME_PERMISSIONS|THROTTLED)|CHARACTER_(CMD_((SMOOTH_)?STOP|JUMP)|DESIRED_(TURN_)?SPEED|RADIUS|STAY_WITHIN_PARCEL|LENGTH|ORIENTATION|ACCOUNT_FOR_SKIPPED_FRAMES|AVOIDANCE_MODE|TYPE(_([ABCD]|NONE))?|MAX_(DECEL|TURN_RADIUS|(ACCEL|SPEED)))|PURSUIT_(OFFSET|FUZZ_FACTOR|GOAL_TOLERANCE|INTERCEPT)|REQUIRE_LINE_OF_SIGHT|FORCE_DIRECT_PATH|VERTICAL|HORIZONTAL|AVOID_(CHARACTERS|DYNAMIC_OBSTACLES|NONE)|PU_(EVADE_(HIDDEN|SPOTTED)|FAILURE_(DYNAMIC_PATHFINDING_DISABLED|INVALID_(GOAL|START)|NO_(NAVMESH|VALID_DESTINATION)|OTHER|TARGET_GONE|(PARCEL_)?UNREACHABLE)|(GOAL|SLOWDOWN_DISTANCE)_REACHED)|TRAVERSAL_TYPE(_(FAST|NONE|SLOW))?|CONTENT_TYPE_(ATOM|FORM|HTML|JSON|LLSD|RSS|TEXT|XHTML|XML)|GCNP_(RADIUS|STATIC)|(PATROL|WANDER)_PAUSE_AT_WAYPOINTS|OPT_(AVATAR|CHARACTER|EXCLUSION_VOLUME|LEGACY_LINKSET|MATERIAL_VOLUME|OTHER|STATIC_OBSTACLE|WALKABLE)|SIM_STAT_PCT_CHARS_STEPPED)\\\\b' },\n      { begin: '\\\\b(FALSE|TRUE)\\\\b' },\n      { begin: '\\\\b(ZERO_ROTATION)\\\\b' },\n      { begin: '\\\\b(EOF|JSON_(ARRAY|DELETE|FALSE|INVALID|NULL|NUMBER|OBJECT|STRING|TRUE)|NULL_KEY|TEXTURE_(BLANK|DEFAULT|MEDIA|PLYWOOD|TRANSPARENT)|URL_REQUEST_(GRANTED|DENIED))\\\\b' },\n      { begin: '\\\\b(ZERO_VECTOR|TOUCH_INVALID_(TEXCOORD|VECTOR))\\\\b' }\n    ]\n  };\n\n  const LSL_FUNCTIONS = {\n    className: 'built_in',\n    begin: '\\\\b(ll(AgentInExperience|(Create|DataSize|Delete|KeyCount|Keys|Read|Update)KeyValue|GetExperience(Details|ErrorMessage)|ReturnObjectsBy(ID|Owner)|Json(2List|[GS]etValue|ValueType)|Sin|Cos|Tan|Atan2|Sqrt|Pow|Abs|Fabs|Frand|Floor|Ceil|Round|Vec(Mag|Norm|Dist)|Rot(Between|2(Euler|Fwd|Left|Up))|(Euler|Axes)2Rot|Whisper|(Region|Owner)?Say|Shout|Listen(Control|Remove)?|Sensor(Repeat|Remove)?|Detected(Name|Key|Owner|Type|Pos|Vel|Grab|Rot|Group|LinkNumber)|Die|Ground|Wind|([GS]et)(AnimationOverride|MemoryLimit|PrimMediaParams|ParcelMusicURL|Object(Desc|Name)|PhysicsMaterial|Status|Scale|Color|Alpha|Texture|Pos|Rot|Force|Torque)|ResetAnimationOverride|(Scale|Offset|Rotate)Texture|(Rot)?Target(Remove)?|(Stop)?MoveToTarget|Apply(Rotational)?Impulse|Set(KeyframedMotion|ContentType|RegionPos|(Angular)?Velocity|Buoyancy|HoverHeight|ForceAndTorque|TimerEvent|ScriptState|Damage|TextureAnim|Sound(Queueing|Radius)|Vehicle(Type|(Float|Vector|Rotation)Param)|(Touch|Sit)?Text|Camera(Eye|At)Offset|PrimitiveParams|ClickAction|Link(Alpha|Color|PrimitiveParams(Fast)?|Texture(Anim)?|Camera|Media)|RemoteScriptAccessPin|PayPrice|LocalRot)|ScaleByFactor|Get((Max|Min)ScaleFactor|ClosestNavPoint|StaticPath|SimStats|Env|PrimitiveParams|Link(PrimitiveParams|Number(OfSides)?|Key|Name|Media)|HTTPHeader|FreeURLs|Object(Details|PermMask|PrimCount)|Parcel(MaxPrims|Details|Prim(Count|Owners))|Attached(List)?|(SPMax|Free|Used)Memory|Region(Name|TimeDilation|FPS|Corner|AgentCount)|Root(Position|Rotation)|UnixTime|(Parcel|Region)Flags|(Wall|GMT)clock|SimulatorHostname|BoundingBox|GeometricCenter|Creator|NumberOf(Prims|NotecardLines|Sides)|Animation(List)?|(Camera|Local)(Pos|Rot)|Vel|Accel|Omega|Time(stamp|OfDay)|(Object|CenterOf)?Mass|MassMKS|Energy|Owner|(Owner)?Key|SunDirection|Texture(Offset|Scale|Rot)|Inventory(Number|Name|Key|Type|Creator|PermMask)|Permissions(Key)?|StartParameter|List(Length|EntryType)|Date|Agent(Size|Info|Language|List)|LandOwnerAt|NotecardLine|Script(Name|State))|(Get|Reset|GetAndReset)Time|PlaySound(Slave)?|LoopSound(Master|Slave)?|(Trigger|Stop|Preload)Sound|((Get|Delete)Sub|Insert)String|To(Upper|Lower)|Give(InventoryList|Money)|RezObject|(Stop)?LookAt|Sleep|CollisionFilter|(Take|Release)Controls|DetachFromAvatar|AttachToAvatar(Temp)?|InstantMessage|(GetNext)?Email|StopHover|MinEventDelay|RotLookAt|String(Length|Trim)|(Start|Stop)Animation|TargetOmega|Request(Experience)?Permissions|(Create|Break)Link|BreakAllLinks|(Give|Remove)Inventory|Water|PassTouches|Request(Agent|Inventory)Data|TeleportAgent(Home|GlobalCoords)?|ModifyLand|CollisionSound|ResetScript|MessageLinked|PushObject|PassCollisions|AxisAngle2Rot|Rot2(Axis|Angle)|A(cos|sin)|AngleBetween|AllowInventoryDrop|SubStringIndex|List2(CSV|Integer|Json|Float|String|Key|Vector|Rot|List(Strided)?)|DeleteSubList|List(Statistics|Sort|Randomize|(Insert|Find|Replace)List)|EdgeOfWorld|AdjustSoundVolume|Key2Name|TriggerSoundLimited|EjectFromLand|(CSV|ParseString)2List|OverMyLand|SameGroup|UnSit|Ground(Slope|Normal|Contour)|GroundRepel|(Set|Remove)VehicleFlags|SitOnLink|(AvatarOn)?(Link)?SitTarget|Script(Danger|Profiler)|Dialog|VolumeDetect|ResetOtherScript|RemoteLoadScriptPin|(Open|Close)RemoteDataChannel|SendRemoteData|RemoteDataReply|(Integer|String)ToBase64|XorBase64|Log(10)?|Base64To(String|Integer)|ParseStringKeepNulls|RezAtRoot|RequestSimulatorData|ForceMouselook|(Load|Release|(E|Une)scape)URL|ParcelMedia(CommandList|Query)|ModPow|MapDestination|(RemoveFrom|AddTo|Reset)Land(Pass|Ban)List|(Set|Clear)CameraParams|HTTP(Request|Response)|TextBox|DetectedTouch(UV|Face|Pos|(N|Bin)ormal|ST)|(MD5|SHA1|DumpList2)String|Request(Secure)?URL|Clear(Prim|Link)Media|(Link)?ParticleSystem|(Get|Request)(Username|DisplayName)|RegionSayTo|CastRay|GenerateKey|TransferLindenDollars|ManageEstateAccess|(Create|Delete)Character|ExecCharacterCmd|Evade|FleeFrom|NavigateTo|PatrolPoints|Pursue|UpdateCharacter|WanderWithin))\\\\b'\n  };\n\n  return {\n    name: 'LSL (Linden Scripting Language)',\n    illegal: ':',\n    contains: [\n      LSL_STRINGS,\n      {\n        className: 'comment',\n        variants: [\n          hljs.COMMENT('//', '$'),\n          hljs.COMMENT('/\\\\*', '\\\\*/')\n        ],\n        relevance: 0\n      },\n      LSL_NUMBERS,\n      {\n        className: 'section',\n        variants: [\n          { begin: '\\\\b(state|default)\\\\b' },\n          { begin: '\\\\b(state_(entry|exit)|touch(_(start|end))?|(land_)?collision(_(start|end))?|timer|listen|(no_)?sensor|control|(not_)?at_(rot_)?target|money|email|experience_permissions(_denied)?|run_time_permissions|changed|attach|dataserver|moving_(start|end)|link_message|(on|object)_rez|remote_data|http_re(sponse|quest)|path_update|transaction_result)\\\\b' }\n        ]\n      },\n      LSL_FUNCTIONS,\n      LSL_CONSTANTS,\n      {\n        className: 'type',\n        begin: '\\\\b(integer|float|string|key|vector|quaternion|rotation|list)\\\\b'\n      }\n    ]\n  };\n}\n\nmodule.exports = lsl;\n","/*\nLanguage: Lua\nDescription: Lua is a powerful, efficient, lightweight, embeddable scripting language.\nAuthor: Andrew Fedorov <dmmdrs@mail.ru>\nCategory: common, gaming, scripting\nWebsite: https://www.lua.org\n*/\n\nfunction lua(hljs) {\n  const OPENING_LONG_BRACKET = '\\\\[=*\\\\[';\n  const CLOSING_LONG_BRACKET = '\\\\]=*\\\\]';\n  const LONG_BRACKETS = {\n    begin: OPENING_LONG_BRACKET,\n    end: CLOSING_LONG_BRACKET,\n    contains: [ 'self' ]\n  };\n  const COMMENTS = [\n    hljs.COMMENT('--(?!' + OPENING_LONG_BRACKET + ')', '$'),\n    hljs.COMMENT(\n      '--' + OPENING_LONG_BRACKET,\n      CLOSING_LONG_BRACKET,\n      {\n        contains: [ LONG_BRACKETS ],\n        relevance: 10\n      }\n    )\n  ];\n  return {\n    name: 'Lua',\n    aliases: ['pluto'],\n    keywords: {\n      $pattern: hljs.UNDERSCORE_IDENT_RE,\n      literal: \"true false nil\",\n      keyword: \"and break do else elseif end for goto if in local not or repeat return then until while\",\n      built_in:\n        // Metatags and globals:\n        '_G _ENV _VERSION __index __newindex __mode __call __metatable __tostring __len '\n        + '__gc __add __sub __mul __div __mod __pow __concat __unm __eq __lt __le assert '\n        // Standard methods and properties:\n        + 'collectgarbage dofile error getfenv getmetatable ipairs load loadfile loadstring '\n        + 'module next pairs pcall print rawequal rawget rawset require select setfenv '\n        + 'setmetatable tonumber tostring type unpack xpcall arg self '\n        // Library methods and properties (one line per library):\n        + 'coroutine resume yield status wrap create running debug getupvalue '\n        + 'debug sethook getmetatable gethook setmetatable setlocal traceback setfenv getinfo setupvalue getlocal getregistry getfenv '\n        + 'io lines write close flush open output type read stderr stdin input stdout popen tmpfile '\n        + 'math log max acos huge ldexp pi cos tanh pow deg tan cosh sinh random randomseed frexp ceil floor rad abs sqrt modf asin min mod fmod log10 atan2 exp sin atan '\n        + 'os exit setlocale date getenv difftime remove time clock tmpname rename execute package preload loadlib loaded loaders cpath config path seeall '\n        + 'string sub upper len gfind rep find match char dump gmatch reverse byte format gsub lower '\n        + 'table setn insert getn foreachi maxn foreach concat sort remove'\n    },\n    contains: COMMENTS.concat([\n      {\n        className: 'function',\n        beginKeywords: 'function',\n        end: '\\\\)',\n        contains: [\n          hljs.inherit(hljs.TITLE_MODE, { begin: '([_a-zA-Z]\\\\w*\\\\.)*([_a-zA-Z]\\\\w*:)?[_a-zA-Z]\\\\w*' }),\n          {\n            className: 'params',\n            begin: '\\\\(',\n            endsWithParent: true,\n            contains: COMMENTS\n          }\n        ].concat(COMMENTS)\n      },\n      hljs.C_NUMBER_MODE,\n      hljs.APOS_STRING_MODE,\n      hljs.QUOTE_STRING_MODE,\n      {\n        className: 'string',\n        begin: OPENING_LONG_BRACKET,\n        end: CLOSING_LONG_BRACKET,\n        contains: [ LONG_BRACKETS ],\n        relevance: 5\n      }\n    ])\n  };\n}\n\nmodule.exports = lua;\n","/*\nLanguage: Makefile\nAuthor: Ivan Sagalaev <maniac@softwaremaniacs.org>\nContributors: Joël Porquet <joel@porquet.org>\nWebsite: https://www.gnu.org/software/make/manual/html_node/Introduction.html\nCategory: common, build-system\n*/\n\nfunction makefile(hljs) {\n  /* Variables: simple (eg $(var)) and special (eg $@) */\n  const VARIABLE = {\n    className: 'variable',\n    variants: [\n      {\n        begin: '\\\\$\\\\(' + hljs.UNDERSCORE_IDENT_RE + '\\\\)',\n        contains: [ hljs.BACKSLASH_ESCAPE ]\n      },\n      { begin: /\\$[@%<?\\^\\+\\*]/ }\n    ]\n  };\n  /* Quoted string with variables inside */\n  const QUOTE_STRING = {\n    className: 'string',\n    begin: /\"/,\n    end: /\"/,\n    contains: [\n      hljs.BACKSLASH_ESCAPE,\n      VARIABLE\n    ]\n  };\n  /* Function: $(func arg,...) */\n  const FUNC = {\n    className: 'variable',\n    begin: /\\$\\([\\w-]+\\s/,\n    end: /\\)/,\n    keywords: { built_in:\n        'subst patsubst strip findstring filter filter-out sort '\n        + 'word wordlist firstword lastword dir notdir suffix basename '\n        + 'addsuffix addprefix join wildcard realpath abspath error warning '\n        + 'shell origin flavor foreach if or and call eval file value' },\n    contains: [ \n      VARIABLE,\n      QUOTE_STRING // Added QUOTE_STRING as they can be a part of functions\n    ]\n  };\n  /* Variable assignment */\n  const ASSIGNMENT = { begin: '^' + hljs.UNDERSCORE_IDENT_RE + '\\\\s*(?=[:+?]?=)' };\n  /* Meta targets (.PHONY) */\n  const META = {\n    className: 'meta',\n    begin: /^\\.PHONY:/,\n    end: /$/,\n    keywords: {\n      $pattern: /[\\.\\w]+/,\n      keyword: '.PHONY'\n    }\n  };\n  /* Targets */\n  const TARGET = {\n    className: 'section',\n    begin: /^[^\\s]+:/,\n    end: /$/,\n    contains: [ VARIABLE ]\n  };\n  return {\n    name: 'Makefile',\n    aliases: [\n      'mk',\n      'mak',\n      'make',\n    ],\n    keywords: {\n      $pattern: /[\\w-]+/,\n      keyword: 'define endef undefine ifdef ifndef ifeq ifneq else endif '\n      + 'include -include sinclude override export unexport private vpath'\n    },\n    contains: [\n      hljs.HASH_COMMENT_MODE,\n      VARIABLE,\n      QUOTE_STRING,\n      FUNC,\n      ASSIGNMENT,\n      META,\n      TARGET\n    ]\n  };\n}\n\nmodule.exports = makefile;\n","const SYSTEM_SYMBOLS = [\n  \"AASTriangle\",\n  \"AbelianGroup\",\n  \"Abort\",\n  \"AbortKernels\",\n  \"AbortProtect\",\n  \"AbortScheduledTask\",\n  \"Above\",\n  \"Abs\",\n  \"AbsArg\",\n  \"AbsArgPlot\",\n  \"Absolute\",\n  \"AbsoluteCorrelation\",\n  \"AbsoluteCorrelationFunction\",\n  \"AbsoluteCurrentValue\",\n  \"AbsoluteDashing\",\n  \"AbsoluteFileName\",\n  \"AbsoluteOptions\",\n  \"AbsolutePointSize\",\n  \"AbsoluteThickness\",\n  \"AbsoluteTime\",\n  \"AbsoluteTiming\",\n  \"AcceptanceThreshold\",\n  \"AccountingForm\",\n  \"Accumulate\",\n  \"Accuracy\",\n  \"AccuracyGoal\",\n  \"AcousticAbsorbingValue\",\n  \"AcousticImpedanceValue\",\n  \"AcousticNormalVelocityValue\",\n  \"AcousticPDEComponent\",\n  \"AcousticPressureCondition\",\n  \"AcousticRadiationValue\",\n  \"AcousticSoundHardValue\",\n  \"AcousticSoundSoftCondition\",\n  \"ActionDelay\",\n  \"ActionMenu\",\n  \"ActionMenuBox\",\n  \"ActionMenuBoxOptions\",\n  \"Activate\",\n  \"Active\",\n  \"ActiveClassification\",\n  \"ActiveClassificationObject\",\n  \"ActiveItem\",\n  \"ActivePrediction\",\n  \"ActivePredictionObject\",\n  \"ActiveStyle\",\n  \"AcyclicGraphQ\",\n  \"AddOnHelpPath\",\n  \"AddSides\",\n  \"AddTo\",\n  \"AddToSearchIndex\",\n  \"AddUsers\",\n  \"AdjacencyGraph\",\n  \"AdjacencyList\",\n  \"AdjacencyMatrix\",\n  \"AdjacentMeshCells\",\n  \"Adjugate\",\n  \"AdjustmentBox\",\n  \"AdjustmentBoxOptions\",\n  \"AdjustTimeSeriesForecast\",\n  \"AdministrativeDivisionData\",\n  \"AffineHalfSpace\",\n  \"AffineSpace\",\n  \"AffineStateSpaceModel\",\n  \"AffineTransform\",\n  \"After\",\n  \"AggregatedEntityClass\",\n  \"AggregationLayer\",\n  \"AircraftData\",\n  \"AirportData\",\n  \"AirPressureData\",\n  \"AirSoundAttenuation\",\n  \"AirTemperatureData\",\n  \"AiryAi\",\n  \"AiryAiPrime\",\n  \"AiryAiZero\",\n  \"AiryBi\",\n  \"AiryBiPrime\",\n  \"AiryBiZero\",\n  \"AlgebraicIntegerQ\",\n  \"AlgebraicNumber\",\n  \"AlgebraicNumberDenominator\",\n  \"AlgebraicNumberNorm\",\n  \"AlgebraicNumberPolynomial\",\n  \"AlgebraicNumberTrace\",\n  \"AlgebraicRules\",\n  \"AlgebraicRulesData\",\n  \"Algebraics\",\n  \"AlgebraicUnitQ\",\n  \"Alignment\",\n  \"AlignmentMarker\",\n  \"AlignmentPoint\",\n  \"All\",\n  \"AllowAdultContent\",\n  \"AllowChatServices\",\n  \"AllowedCloudExtraParameters\",\n  \"AllowedCloudParameterExtensions\",\n  \"AllowedDimensions\",\n  \"AllowedFrequencyRange\",\n  \"AllowedHeads\",\n  \"AllowGroupClose\",\n  \"AllowIncomplete\",\n  \"AllowInlineCells\",\n  \"AllowKernelInitialization\",\n  \"AllowLooseGrammar\",\n  \"AllowReverseGroupClose\",\n  \"AllowScriptLevelChange\",\n  \"AllowVersionUpdate\",\n  \"AllTrue\",\n  \"Alphabet\",\n  \"AlphabeticOrder\",\n  \"AlphabeticSort\",\n  \"AlphaChannel\",\n  \"AlternateImage\",\n  \"AlternatingFactorial\",\n  \"AlternatingGroup\",\n  \"AlternativeHypothesis\",\n  \"Alternatives\",\n  \"AltitudeMethod\",\n  \"AmbientLight\",\n  \"AmbiguityFunction\",\n  \"AmbiguityList\",\n  \"Analytic\",\n  \"AnatomyData\",\n  \"AnatomyForm\",\n  \"AnatomyPlot3D\",\n  \"AnatomySkinStyle\",\n  \"AnatomyStyling\",\n  \"AnchoredSearch\",\n  \"And\",\n  \"AndersonDarlingTest\",\n  \"AngerJ\",\n  \"AngleBisector\",\n  \"AngleBracket\",\n  \"AnglePath\",\n  \"AnglePath3D\",\n  \"AngleVector\",\n  \"AngularGauge\",\n  \"Animate\",\n  \"AnimatedImage\",\n  \"AnimationCycleOffset\",\n  \"AnimationCycleRepetitions\",\n  \"AnimationDirection\",\n  \"AnimationDisplayTime\",\n  \"AnimationRate\",\n  \"AnimationRepetitions\",\n  \"AnimationRunning\",\n  \"AnimationRunTime\",\n  \"AnimationTimeIndex\",\n  \"AnimationVideo\",\n  \"Animator\",\n  \"AnimatorBox\",\n  \"AnimatorBoxOptions\",\n  \"AnimatorElements\",\n  \"Annotate\",\n  \"Annotation\",\n  \"AnnotationDelete\",\n  \"AnnotationKeys\",\n  \"AnnotationRules\",\n  \"AnnotationValue\",\n  \"Annuity\",\n  \"AnnuityDue\",\n  \"Annulus\",\n  \"AnomalyDetection\",\n  \"AnomalyDetector\",\n  \"AnomalyDetectorFunction\",\n  \"Anonymous\",\n  \"Antialiasing\",\n  \"Antihermitian\",\n  \"AntihermitianMatrixQ\",\n  \"Antisymmetric\",\n  \"AntisymmetricMatrixQ\",\n  \"Antonyms\",\n  \"AnyOrder\",\n  \"AnySubset\",\n  \"AnyTrue\",\n  \"Apart\",\n  \"ApartSquareFree\",\n  \"APIFunction\",\n  \"Appearance\",\n  \"AppearanceElements\",\n  \"AppearanceRules\",\n  \"AppellF1\",\n  \"Append\",\n  \"AppendCheck\",\n  \"AppendLayer\",\n  \"AppendTo\",\n  \"Application\",\n  \"Apply\",\n  \"ApplyReaction\",\n  \"ApplySides\",\n  \"ApplyTo\",\n  \"ArcCos\",\n  \"ArcCosh\",\n  \"ArcCot\",\n  \"ArcCoth\",\n  \"ArcCsc\",\n  \"ArcCsch\",\n  \"ArcCurvature\",\n  \"ARCHProcess\",\n  \"ArcLength\",\n  \"ArcSec\",\n  \"ArcSech\",\n  \"ArcSin\",\n  \"ArcSinDistribution\",\n  \"ArcSinh\",\n  \"ArcTan\",\n  \"ArcTanh\",\n  \"Area\",\n  \"Arg\",\n  \"ArgMax\",\n  \"ArgMin\",\n  \"ArgumentCountQ\",\n  \"ArgumentsOptions\",\n  \"ARIMAProcess\",\n  \"ArithmeticGeometricMean\",\n  \"ARMAProcess\",\n  \"Around\",\n  \"AroundReplace\",\n  \"ARProcess\",\n  \"Array\",\n  \"ArrayComponents\",\n  \"ArrayDepth\",\n  \"ArrayFilter\",\n  \"ArrayFlatten\",\n  \"ArrayMesh\",\n  \"ArrayPad\",\n  \"ArrayPlot\",\n  \"ArrayPlot3D\",\n  \"ArrayQ\",\n  \"ArrayReduce\",\n  \"ArrayResample\",\n  \"ArrayReshape\",\n  \"ArrayRules\",\n  \"Arrays\",\n  \"Arrow\",\n  \"Arrow3DBox\",\n  \"ArrowBox\",\n  \"Arrowheads\",\n  \"ASATriangle\",\n  \"Ask\",\n  \"AskAppend\",\n  \"AskConfirm\",\n  \"AskDisplay\",\n  \"AskedQ\",\n  \"AskedValue\",\n  \"AskFunction\",\n  \"AskState\",\n  \"AskTemplateDisplay\",\n  \"AspectRatio\",\n  \"AspectRatioFixed\",\n  \"Assert\",\n  \"AssessmentFunction\",\n  \"AssessmentResultObject\",\n  \"AssociateTo\",\n  \"Association\",\n  \"AssociationFormat\",\n  \"AssociationMap\",\n  \"AssociationQ\",\n  \"AssociationThread\",\n  \"AssumeDeterministic\",\n  \"Assuming\",\n  \"Assumptions\",\n  \"AstroAngularSeparation\",\n  \"AstroBackground\",\n  \"AstroCenter\",\n  \"AstroDistance\",\n  \"AstroGraphics\",\n  \"AstroGridLines\",\n  \"AstroGridLinesStyle\",\n  \"AstronomicalData\",\n  \"AstroPosition\",\n  \"AstroProjection\",\n  \"AstroRange\",\n  \"AstroRangePadding\",\n  \"AstroReferenceFrame\",\n  \"AstroStyling\",\n  \"AstroZoomLevel\",\n  \"Asymptotic\",\n  \"AsymptoticDSolveValue\",\n  \"AsymptoticEqual\",\n  \"AsymptoticEquivalent\",\n  \"AsymptoticExpectation\",\n  \"AsymptoticGreater\",\n  \"AsymptoticGreaterEqual\",\n  \"AsymptoticIntegrate\",\n  \"AsymptoticLess\",\n  \"AsymptoticLessEqual\",\n  \"AsymptoticOutputTracker\",\n  \"AsymptoticProbability\",\n  \"AsymptoticProduct\",\n  \"AsymptoticRSolveValue\",\n  \"AsymptoticSolve\",\n  \"AsymptoticSum\",\n  \"Asynchronous\",\n  \"AsynchronousTaskObject\",\n  \"AsynchronousTasks\",\n  \"Atom\",\n  \"AtomCoordinates\",\n  \"AtomCount\",\n  \"AtomDiagramCoordinates\",\n  \"AtomLabels\",\n  \"AtomLabelStyle\",\n  \"AtomList\",\n  \"AtomQ\",\n  \"AttachCell\",\n  \"AttachedCell\",\n  \"AttentionLayer\",\n  \"Attributes\",\n  \"Audio\",\n  \"AudioAmplify\",\n  \"AudioAnnotate\",\n  \"AudioAnnotationLookup\",\n  \"AudioBlockMap\",\n  \"AudioCapture\",\n  \"AudioChannelAssignment\",\n  \"AudioChannelCombine\",\n  \"AudioChannelMix\",\n  \"AudioChannels\",\n  \"AudioChannelSeparate\",\n  \"AudioData\",\n  \"AudioDelay\",\n  \"AudioDelete\",\n  \"AudioDevice\",\n  \"AudioDistance\",\n  \"AudioEncoding\",\n  \"AudioFade\",\n  \"AudioFrequencyShift\",\n  \"AudioGenerator\",\n  \"AudioIdentify\",\n  \"AudioInputDevice\",\n  \"AudioInsert\",\n  \"AudioInstanceQ\",\n  \"AudioIntervals\",\n  \"AudioJoin\",\n  \"AudioLabel\",\n  \"AudioLength\",\n  \"AudioLocalMeasurements\",\n  \"AudioLooping\",\n  \"AudioLoudness\",\n  \"AudioMeasurements\",\n  \"AudioNormalize\",\n  \"AudioOutputDevice\",\n  \"AudioOverlay\",\n  \"AudioPad\",\n  \"AudioPan\",\n  \"AudioPartition\",\n  \"AudioPause\",\n  \"AudioPitchShift\",\n  \"AudioPlay\",\n  \"AudioPlot\",\n  \"AudioQ\",\n  \"AudioRecord\",\n  \"AudioReplace\",\n  \"AudioResample\",\n  \"AudioReverb\",\n  \"AudioReverse\",\n  \"AudioSampleRate\",\n  \"AudioSpectralMap\",\n  \"AudioSpectralTransformation\",\n  \"AudioSplit\",\n  \"AudioStop\",\n  \"AudioStream\",\n  \"AudioStreams\",\n  \"AudioTimeStretch\",\n  \"AudioTrackApply\",\n  \"AudioTrackSelection\",\n  \"AudioTrim\",\n  \"AudioType\",\n  \"AugmentedPolyhedron\",\n  \"AugmentedSymmetricPolynomial\",\n  \"Authenticate\",\n  \"Authentication\",\n  \"AuthenticationDialog\",\n  \"AutoAction\",\n  \"Autocomplete\",\n  \"AutocompletionFunction\",\n  \"AutoCopy\",\n  \"AutocorrelationTest\",\n  \"AutoDelete\",\n  \"AutoEvaluateEvents\",\n  \"AutoGeneratedPackage\",\n  \"AutoIndent\",\n  \"AutoIndentSpacings\",\n  \"AutoItalicWords\",\n  \"AutoloadPath\",\n  \"AutoMatch\",\n  \"Automatic\",\n  \"AutomaticImageSize\",\n  \"AutoMultiplicationSymbol\",\n  \"AutoNumberFormatting\",\n  \"AutoOpenNotebooks\",\n  \"AutoOpenPalettes\",\n  \"AutoOperatorRenderings\",\n  \"AutoQuoteCharacters\",\n  \"AutoRefreshed\",\n  \"AutoRemove\",\n  \"AutorunSequencing\",\n  \"AutoScaling\",\n  \"AutoScroll\",\n  \"AutoSpacing\",\n  \"AutoStyleOptions\",\n  \"AutoStyleWords\",\n  \"AutoSubmitting\",\n  \"Axes\",\n  \"AxesEdge\",\n  \"AxesLabel\",\n  \"AxesOrigin\",\n  \"AxesStyle\",\n  \"AxiomaticTheory\",\n  \"Axis\",\n  \"Axis3DBox\",\n  \"Axis3DBoxOptions\",\n  \"AxisBox\",\n  \"AxisBoxOptions\",\n  \"AxisLabel\",\n  \"AxisObject\",\n  \"AxisStyle\",\n  \"BabyMonsterGroupB\",\n  \"Back\",\n  \"BackFaceColor\",\n  \"BackFaceGlowColor\",\n  \"BackFaceOpacity\",\n  \"BackFaceSpecularColor\",\n  \"BackFaceSpecularExponent\",\n  \"BackFaceSurfaceAppearance\",\n  \"BackFaceTexture\",\n  \"Background\",\n  \"BackgroundAppearance\",\n  \"BackgroundTasksSettings\",\n  \"Backslash\",\n  \"Backsubstitution\",\n  \"Backward\",\n  \"Ball\",\n  \"Band\",\n  \"BandpassFilter\",\n  \"BandstopFilter\",\n  \"BarabasiAlbertGraphDistribution\",\n  \"BarChart\",\n  \"BarChart3D\",\n  \"BarcodeImage\",\n  \"BarcodeRecognize\",\n  \"BaringhausHenzeTest\",\n  \"BarLegend\",\n  \"BarlowProschanImportance\",\n  \"BarnesG\",\n  \"BarOrigin\",\n  \"BarSpacing\",\n  \"BartlettHannWindow\",\n  \"BartlettWindow\",\n  \"BaseDecode\",\n  \"BaseEncode\",\n  \"BaseForm\",\n  \"Baseline\",\n  \"BaselinePosition\",\n  \"BaseStyle\",\n  \"BasicRecurrentLayer\",\n  \"BatchNormalizationLayer\",\n  \"BatchSize\",\n  \"BatesDistribution\",\n  \"BattleLemarieWavelet\",\n  \"BayesianMaximization\",\n  \"BayesianMaximizationObject\",\n  \"BayesianMinimization\",\n  \"BayesianMinimizationObject\",\n  \"Because\",\n  \"BeckmannDistribution\",\n  \"Beep\",\n  \"Before\",\n  \"Begin\",\n  \"BeginDialogPacket\",\n  \"BeginPackage\",\n  \"BellB\",\n  \"BellY\",\n  \"Below\",\n  \"BenfordDistribution\",\n  \"BeniniDistribution\",\n  \"BenktanderGibratDistribution\",\n  \"BenktanderWeibullDistribution\",\n  \"BernoulliB\",\n  \"BernoulliDistribution\",\n  \"BernoulliGraphDistribution\",\n  \"BernoulliProcess\",\n  \"BernsteinBasis\",\n  \"BesagL\",\n  \"BesselFilterModel\",\n  \"BesselI\",\n  \"BesselJ\",\n  \"BesselJZero\",\n  \"BesselK\",\n  \"BesselY\",\n  \"BesselYZero\",\n  \"Beta\",\n  \"BetaBinomialDistribution\",\n  \"BetaDistribution\",\n  \"BetaNegativeBinomialDistribution\",\n  \"BetaPrimeDistribution\",\n  \"BetaRegularized\",\n  \"Between\",\n  \"BetweennessCentrality\",\n  \"Beveled\",\n  \"BeveledPolyhedron\",\n  \"BezierCurve\",\n  \"BezierCurve3DBox\",\n  \"BezierCurve3DBoxOptions\",\n  \"BezierCurveBox\",\n  \"BezierCurveBoxOptions\",\n  \"BezierFunction\",\n  \"BilateralFilter\",\n  \"BilateralLaplaceTransform\",\n  \"BilateralZTransform\",\n  \"Binarize\",\n  \"BinaryDeserialize\",\n  \"BinaryDistance\",\n  \"BinaryFormat\",\n  \"BinaryImageQ\",\n  \"BinaryRead\",\n  \"BinaryReadList\",\n  \"BinarySerialize\",\n  \"BinaryWrite\",\n  \"BinCounts\",\n  \"BinLists\",\n  \"BinnedVariogramList\",\n  \"Binomial\",\n  \"BinomialDistribution\",\n  \"BinomialPointProcess\",\n  \"BinomialProcess\",\n  \"BinormalDistribution\",\n  \"BiorthogonalSplineWavelet\",\n  \"BioSequence\",\n  \"BioSequenceBackTranslateList\",\n  \"BioSequenceComplement\",\n  \"BioSequenceInstances\",\n  \"BioSequenceModify\",\n  \"BioSequencePlot\",\n  \"BioSequenceQ\",\n  \"BioSequenceReverseComplement\",\n  \"BioSequenceTranscribe\",\n  \"BioSequenceTranslate\",\n  \"BipartiteGraphQ\",\n  \"BiquadraticFilterModel\",\n  \"BirnbaumImportance\",\n  \"BirnbaumSaundersDistribution\",\n  \"BitAnd\",\n  \"BitClear\",\n  \"BitGet\",\n  \"BitLength\",\n  \"BitNot\",\n  \"BitOr\",\n  \"BitRate\",\n  \"BitSet\",\n  \"BitShiftLeft\",\n  \"BitShiftRight\",\n  \"BitXor\",\n  \"BiweightLocation\",\n  \"BiweightMidvariance\",\n  \"Black\",\n  \"BlackmanHarrisWindow\",\n  \"BlackmanNuttallWindow\",\n  \"BlackmanWindow\",\n  \"Blank\",\n  \"BlankForm\",\n  \"BlankNullSequence\",\n  \"BlankSequence\",\n  \"Blend\",\n  \"Block\",\n  \"BlockchainAddressData\",\n  \"BlockchainBase\",\n  \"BlockchainBlockData\",\n  \"BlockchainContractValue\",\n  \"BlockchainData\",\n  \"BlockchainGet\",\n  \"BlockchainKeyEncode\",\n  \"BlockchainPut\",\n  \"BlockchainTokenData\",\n  \"BlockchainTransaction\",\n  \"BlockchainTransactionData\",\n  \"BlockchainTransactionSign\",\n  \"BlockchainTransactionSubmit\",\n  \"BlockDiagonalMatrix\",\n  \"BlockLowerTriangularMatrix\",\n  \"BlockMap\",\n  \"BlockRandom\",\n  \"BlockUpperTriangularMatrix\",\n  \"BlomqvistBeta\",\n  \"BlomqvistBetaTest\",\n  \"Blue\",\n  \"Blur\",\n  \"Blurring\",\n  \"BodePlot\",\n  \"BohmanWindow\",\n  \"Bold\",\n  \"Bond\",\n  \"BondCount\",\n  \"BondLabels\",\n  \"BondLabelStyle\",\n  \"BondList\",\n  \"BondQ\",\n  \"Bookmarks\",\n  \"Boole\",\n  \"BooleanConsecutiveFunction\",\n  \"BooleanConvert\",\n  \"BooleanCountingFunction\",\n  \"BooleanFunction\",\n  \"BooleanGraph\",\n  \"BooleanMaxterms\",\n  \"BooleanMinimize\",\n  \"BooleanMinterms\",\n  \"BooleanQ\",\n  \"BooleanRegion\",\n  \"Booleans\",\n  \"BooleanStrings\",\n  \"BooleanTable\",\n  \"BooleanVariables\",\n  \"BorderDimensions\",\n  \"BorelTannerDistribution\",\n  \"Bottom\",\n  \"BottomHatTransform\",\n  \"BoundaryDiscretizeGraphics\",\n  \"BoundaryDiscretizeRegion\",\n  \"BoundaryMesh\",\n  \"BoundaryMeshRegion\",\n  \"BoundaryMeshRegionQ\",\n  \"BoundaryStyle\",\n  \"BoundedRegionQ\",\n  \"BoundingRegion\",\n  \"Bounds\",\n  \"Box\",\n  \"BoxBaselineShift\",\n  \"BoxData\",\n  \"BoxDimensions\",\n  \"Boxed\",\n  \"Boxes\",\n  \"BoxForm\",\n  \"BoxFormFormatTypes\",\n  \"BoxFrame\",\n  \"BoxID\",\n  \"BoxMargins\",\n  \"BoxMatrix\",\n  \"BoxObject\",\n  \"BoxRatios\",\n  \"BoxRotation\",\n  \"BoxRotationPoint\",\n  \"BoxStyle\",\n  \"BoxWhiskerChart\",\n  \"Bra\",\n  \"BracketingBar\",\n  \"BraKet\",\n  \"BrayCurtisDistance\",\n  \"BreadthFirstScan\",\n  \"Break\",\n  \"BridgeData\",\n  \"BrightnessEqualize\",\n  \"BroadcastStationData\",\n  \"Brown\",\n  \"BrownForsytheTest\",\n  \"BrownianBridgeProcess\",\n  \"BrowserCategory\",\n  \"BSplineBasis\",\n  \"BSplineCurve\",\n  \"BSplineCurve3DBox\",\n  \"BSplineCurve3DBoxOptions\",\n  \"BSplineCurveBox\",\n  \"BSplineCurveBoxOptions\",\n  \"BSplineFunction\",\n  \"BSplineSurface\",\n  \"BSplineSurface3DBox\",\n  \"BSplineSurface3DBoxOptions\",\n  \"BubbleChart\",\n  \"BubbleChart3D\",\n  \"BubbleScale\",\n  \"BubbleSizes\",\n  \"BuckyballGraph\",\n  \"BuildCompiledComponent\",\n  \"BuildingData\",\n  \"BulletGauge\",\n  \"BusinessDayQ\",\n  \"ButterflyGraph\",\n  \"ButterworthFilterModel\",\n  \"Button\",\n  \"ButtonBar\",\n  \"ButtonBox\",\n  \"ButtonBoxOptions\",\n  \"ButtonCell\",\n  \"ButtonContents\",\n  \"ButtonData\",\n  \"ButtonEvaluator\",\n  \"ButtonExpandable\",\n  \"ButtonFrame\",\n  \"ButtonFunction\",\n  \"ButtonMargins\",\n  \"ButtonMinHeight\",\n  \"ButtonNote\",\n  \"ButtonNotebook\",\n  \"ButtonSource\",\n  \"ButtonStyle\",\n  \"ButtonStyleMenuListing\",\n  \"Byte\",\n  \"ByteArray\",\n  \"ByteArrayFormat\",\n  \"ByteArrayFormatQ\",\n  \"ByteArrayQ\",\n  \"ByteArrayToString\",\n  \"ByteCount\",\n  \"ByteOrdering\",\n  \"C\",\n  \"CachedValue\",\n  \"CacheGraphics\",\n  \"CachePersistence\",\n  \"CalendarConvert\",\n  \"CalendarData\",\n  \"CalendarType\",\n  \"Callout\",\n  \"CalloutMarker\",\n  \"CalloutStyle\",\n  \"CallPacket\",\n  \"CanberraDistance\",\n  \"Cancel\",\n  \"CancelButton\",\n  \"CandlestickChart\",\n  \"CanonicalGraph\",\n  \"CanonicalizePolygon\",\n  \"CanonicalizePolyhedron\",\n  \"CanonicalizeRegion\",\n  \"CanonicalName\",\n  \"CanonicalWarpingCorrespondence\",\n  \"CanonicalWarpingDistance\",\n  \"CantorMesh\",\n  \"CantorStaircase\",\n  \"Canvas\",\n  \"Cap\",\n  \"CapForm\",\n  \"CapitalDifferentialD\",\n  \"Capitalize\",\n  \"CapsuleShape\",\n  \"CaptureRunning\",\n  \"CaputoD\",\n  \"CardinalBSplineBasis\",\n  \"CarlemanLinearize\",\n  \"CarlsonRC\",\n  \"CarlsonRD\",\n  \"CarlsonRE\",\n  \"CarlsonRF\",\n  \"CarlsonRG\",\n  \"CarlsonRJ\",\n  \"CarlsonRK\",\n  \"CarlsonRM\",\n  \"CarmichaelLambda\",\n  \"CaseOrdering\",\n  \"Cases\",\n  \"CaseSensitive\",\n  \"Cashflow\",\n  \"Casoratian\",\n  \"Cast\",\n  \"Catalan\",\n  \"CatalanNumber\",\n  \"Catch\",\n  \"CategoricalDistribution\",\n  \"Catenate\",\n  \"CatenateLayer\",\n  \"CauchyDistribution\",\n  \"CauchyMatrix\",\n  \"CauchyPointProcess\",\n  \"CauchyWindow\",\n  \"CayleyGraph\",\n  \"CDF\",\n  \"CDFDeploy\",\n  \"CDFInformation\",\n  \"CDFWavelet\",\n  \"Ceiling\",\n  \"CelestialSystem\",\n  \"Cell\",\n  \"CellAutoOverwrite\",\n  \"CellBaseline\",\n  \"CellBoundingBox\",\n  \"CellBracketOptions\",\n  \"CellChangeTimes\",\n  \"CellContents\",\n  \"CellContext\",\n  \"CellDingbat\",\n  \"CellDingbatMargin\",\n  \"CellDynamicExpression\",\n  \"CellEditDuplicate\",\n  \"CellElementsBoundingBox\",\n  \"CellElementSpacings\",\n  \"CellEpilog\",\n  \"CellEvaluationDuplicate\",\n  \"CellEvaluationFunction\",\n  \"CellEvaluationLanguage\",\n  \"CellEventActions\",\n  \"CellFrame\",\n  \"CellFrameColor\",\n  \"CellFrameLabelMargins\",\n  \"CellFrameLabels\",\n  \"CellFrameMargins\",\n  \"CellFrameStyle\",\n  \"CellGroup\",\n  \"CellGroupData\",\n  \"CellGrouping\",\n  \"CellGroupingRules\",\n  \"CellHorizontalScrolling\",\n  \"CellID\",\n  \"CellInsertionPointCell\",\n  \"CellLabel\",\n  \"CellLabelAutoDelete\",\n  \"CellLabelMargins\",\n  \"CellLabelPositioning\",\n  \"CellLabelStyle\",\n  \"CellLabelTemplate\",\n  \"CellMargins\",\n  \"CellObject\",\n  \"CellOpen\",\n  \"CellPrint\",\n  \"CellProlog\",\n  \"Cells\",\n  \"CellSize\",\n  \"CellStyle\",\n  \"CellTags\",\n  \"CellTrayPosition\",\n  \"CellTrayWidgets\",\n  \"CellularAutomaton\",\n  \"CensoredDistribution\",\n  \"Censoring\",\n  \"Center\",\n  \"CenterArray\",\n  \"CenterDot\",\n  \"CenteredInterval\",\n  \"CentralFeature\",\n  \"CentralMoment\",\n  \"CentralMomentGeneratingFunction\",\n  \"Cepstrogram\",\n  \"CepstrogramArray\",\n  \"CepstrumArray\",\n  \"CForm\",\n  \"ChampernowneNumber\",\n  \"ChangeOptions\",\n  \"ChannelBase\",\n  \"ChannelBrokerAction\",\n  \"ChannelDatabin\",\n  \"ChannelHistoryLength\",\n  \"ChannelListen\",\n  \"ChannelListener\",\n  \"ChannelListeners\",\n  \"ChannelListenerWait\",\n  \"ChannelObject\",\n  \"ChannelPreSendFunction\",\n  \"ChannelReceiverFunction\",\n  \"ChannelSend\",\n  \"ChannelSubscribers\",\n  \"ChanVeseBinarize\",\n  \"Character\",\n  \"CharacterCounts\",\n  \"CharacterEncoding\",\n  \"CharacterEncodingsPath\",\n  \"CharacteristicFunction\",\n  \"CharacteristicPolynomial\",\n  \"CharacterName\",\n  \"CharacterNormalize\",\n  \"CharacterRange\",\n  \"Characters\",\n  \"ChartBaseStyle\",\n  \"ChartElementData\",\n  \"ChartElementDataFunction\",\n  \"ChartElementFunction\",\n  \"ChartElements\",\n  \"ChartLabels\",\n  \"ChartLayout\",\n  \"ChartLegends\",\n  \"ChartStyle\",\n  \"Chebyshev1FilterModel\",\n  \"Chebyshev2FilterModel\",\n  \"ChebyshevDistance\",\n  \"ChebyshevT\",\n  \"ChebyshevU\",\n  \"Check\",\n  \"CheckAbort\",\n  \"CheckAll\",\n  \"CheckArguments\",\n  \"Checkbox\",\n  \"CheckboxBar\",\n  \"CheckboxBox\",\n  \"CheckboxBoxOptions\",\n  \"ChemicalConvert\",\n  \"ChemicalData\",\n  \"ChemicalFormula\",\n  \"ChemicalInstance\",\n  \"ChemicalReaction\",\n  \"ChessboardDistance\",\n  \"ChiDistribution\",\n  \"ChineseRemainder\",\n  \"ChiSquareDistribution\",\n  \"ChoiceButtons\",\n  \"ChoiceDialog\",\n  \"CholeskyDecomposition\",\n  \"Chop\",\n  \"ChromaticityPlot\",\n  \"ChromaticityPlot3D\",\n  \"ChromaticPolynomial\",\n  \"Circle\",\n  \"CircleBox\",\n  \"CircleDot\",\n  \"CircleMinus\",\n  \"CirclePlus\",\n  \"CirclePoints\",\n  \"CircleThrough\",\n  \"CircleTimes\",\n  \"CirculantGraph\",\n  \"CircularArcThrough\",\n  \"CircularOrthogonalMatrixDistribution\",\n  \"CircularQuaternionMatrixDistribution\",\n  \"CircularRealMatrixDistribution\",\n  \"CircularSymplecticMatrixDistribution\",\n  \"CircularUnitaryMatrixDistribution\",\n  \"Circumsphere\",\n  \"CityData\",\n  \"ClassifierFunction\",\n  \"ClassifierInformation\",\n  \"ClassifierMeasurements\",\n  \"ClassifierMeasurementsObject\",\n  \"Classify\",\n  \"ClassPriors\",\n  \"Clear\",\n  \"ClearAll\",\n  \"ClearAttributes\",\n  \"ClearCookies\",\n  \"ClearPermissions\",\n  \"ClearSystemCache\",\n  \"ClebschGordan\",\n  \"ClickPane\",\n  \"ClickToCopy\",\n  \"ClickToCopyEnabled\",\n  \"Clip\",\n  \"ClipboardNotebook\",\n  \"ClipFill\",\n  \"ClippingStyle\",\n  \"ClipPlanes\",\n  \"ClipPlanesStyle\",\n  \"ClipRange\",\n  \"Clock\",\n  \"ClockGauge\",\n  \"ClockwiseContourIntegral\",\n  \"Close\",\n  \"Closed\",\n  \"CloseKernels\",\n  \"ClosenessCentrality\",\n  \"Closing\",\n  \"ClosingAutoSave\",\n  \"ClosingEvent\",\n  \"CloudAccountData\",\n  \"CloudBase\",\n  \"CloudConnect\",\n  \"CloudConnections\",\n  \"CloudDeploy\",\n  \"CloudDirectory\",\n  \"CloudDisconnect\",\n  \"CloudEvaluate\",\n  \"CloudExport\",\n  \"CloudExpression\",\n  \"CloudExpressions\",\n  \"CloudFunction\",\n  \"CloudGet\",\n  \"CloudImport\",\n  \"CloudLoggingData\",\n  \"CloudObject\",\n  \"CloudObjectInformation\",\n  \"CloudObjectInformationData\",\n  \"CloudObjectNameFormat\",\n  \"CloudObjects\",\n  \"CloudObjectURLType\",\n  \"CloudPublish\",\n  \"CloudPut\",\n  \"CloudRenderingMethod\",\n  \"CloudSave\",\n  \"CloudShare\",\n  \"CloudSubmit\",\n  \"CloudSymbol\",\n  \"CloudUnshare\",\n  \"CloudUserID\",\n  \"ClusterClassify\",\n  \"ClusterDissimilarityFunction\",\n  \"ClusteringComponents\",\n  \"ClusteringMeasurements\",\n  \"ClusteringTree\",\n  \"CMYKColor\",\n  \"Coarse\",\n  \"CodeAssistOptions\",\n  \"Coefficient\",\n  \"CoefficientArrays\",\n  \"CoefficientDomain\",\n  \"CoefficientList\",\n  \"CoefficientRules\",\n  \"CoifletWavelet\",\n  \"Collect\",\n  \"CollinearPoints\",\n  \"Colon\",\n  \"ColonForm\",\n  \"ColorBalance\",\n  \"ColorCombine\",\n  \"ColorConvert\",\n  \"ColorCoverage\",\n  \"ColorData\",\n  \"ColorDataFunction\",\n  \"ColorDetect\",\n  \"ColorDistance\",\n  \"ColorFunction\",\n  \"ColorFunctionBinning\",\n  \"ColorFunctionScaling\",\n  \"Colorize\",\n  \"ColorNegate\",\n  \"ColorOutput\",\n  \"ColorProfileData\",\n  \"ColorQ\",\n  \"ColorQuantize\",\n  \"ColorReplace\",\n  \"ColorRules\",\n  \"ColorSelectorSettings\",\n  \"ColorSeparate\",\n  \"ColorSetter\",\n  \"ColorSetterBox\",\n  \"ColorSetterBoxOptions\",\n  \"ColorSlider\",\n  \"ColorsNear\",\n  \"ColorSpace\",\n  \"ColorToneMapping\",\n  \"Column\",\n  \"ColumnAlignments\",\n  \"ColumnBackgrounds\",\n  \"ColumnForm\",\n  \"ColumnLines\",\n  \"ColumnsEqual\",\n  \"ColumnSpacings\",\n  \"ColumnWidths\",\n  \"CombinatorB\",\n  \"CombinatorC\",\n  \"CombinatorI\",\n  \"CombinatorK\",\n  \"CombinatorS\",\n  \"CombinatorW\",\n  \"CombinatorY\",\n  \"CombinedEntityClass\",\n  \"CombinerFunction\",\n  \"CometData\",\n  \"CommonDefaultFormatTypes\",\n  \"Commonest\",\n  \"CommonestFilter\",\n  \"CommonName\",\n  \"CommonUnits\",\n  \"CommunityBoundaryStyle\",\n  \"CommunityGraphPlot\",\n  \"CommunityLabels\",\n  \"CommunityRegionStyle\",\n  \"CompanyData\",\n  \"CompatibleUnitQ\",\n  \"CompilationOptions\",\n  \"CompilationTarget\",\n  \"Compile\",\n  \"Compiled\",\n  \"CompiledCodeFunction\",\n  \"CompiledComponent\",\n  \"CompiledExpressionDeclaration\",\n  \"CompiledFunction\",\n  \"CompiledLayer\",\n  \"CompilerCallback\",\n  \"CompilerEnvironment\",\n  \"CompilerEnvironmentAppend\",\n  \"CompilerEnvironmentAppendTo\",\n  \"CompilerEnvironmentObject\",\n  \"CompilerOptions\",\n  \"Complement\",\n  \"ComplementedEntityClass\",\n  \"CompleteGraph\",\n  \"CompleteGraphQ\",\n  \"CompleteIntegral\",\n  \"CompleteKaryTree\",\n  \"CompletionsListPacket\",\n  \"Complex\",\n  \"ComplexArrayPlot\",\n  \"ComplexContourPlot\",\n  \"Complexes\",\n  \"ComplexExpand\",\n  \"ComplexInfinity\",\n  \"ComplexityFunction\",\n  \"ComplexListPlot\",\n  \"ComplexPlot\",\n  \"ComplexPlot3D\",\n  \"ComplexRegionPlot\",\n  \"ComplexStreamPlot\",\n  \"ComplexVectorPlot\",\n  \"ComponentMeasurements\",\n  \"ComponentwiseContextMenu\",\n  \"Compose\",\n  \"ComposeList\",\n  \"ComposeSeries\",\n  \"CompositeQ\",\n  \"Composition\",\n  \"CompoundElement\",\n  \"CompoundExpression\",\n  \"CompoundPoissonDistribution\",\n  \"CompoundPoissonProcess\",\n  \"CompoundRenewalProcess\",\n  \"Compress\",\n  \"CompressedData\",\n  \"CompressionLevel\",\n  \"ComputeUncertainty\",\n  \"ConcaveHullMesh\",\n  \"Condition\",\n  \"ConditionalExpression\",\n  \"Conditioned\",\n  \"Cone\",\n  \"ConeBox\",\n  \"ConfidenceLevel\",\n  \"ConfidenceRange\",\n  \"ConfidenceTransform\",\n  \"ConfigurationPath\",\n  \"Confirm\",\n  \"ConfirmAssert\",\n  \"ConfirmBy\",\n  \"ConfirmMatch\",\n  \"ConfirmQuiet\",\n  \"ConformationMethod\",\n  \"ConformAudio\",\n  \"ConformImages\",\n  \"Congruent\",\n  \"ConicGradientFilling\",\n  \"ConicHullRegion\",\n  \"ConicHullRegion3DBox\",\n  \"ConicHullRegion3DBoxOptions\",\n  \"ConicHullRegionBox\",\n  \"ConicHullRegionBoxOptions\",\n  \"ConicOptimization\",\n  \"Conjugate\",\n  \"ConjugateTranspose\",\n  \"Conjunction\",\n  \"Connect\",\n  \"ConnectedComponents\",\n  \"ConnectedGraphComponents\",\n  \"ConnectedGraphQ\",\n  \"ConnectedMeshComponents\",\n  \"ConnectedMoleculeComponents\",\n  \"ConnectedMoleculeQ\",\n  \"ConnectionSettings\",\n  \"ConnectLibraryCallbackFunction\",\n  \"ConnectSystemModelComponents\",\n  \"ConnectSystemModelController\",\n  \"ConnesWindow\",\n  \"ConoverTest\",\n  \"ConservativeConvectionPDETerm\",\n  \"ConsoleMessage\",\n  \"Constant\",\n  \"ConstantArray\",\n  \"ConstantArrayLayer\",\n  \"ConstantImage\",\n  \"ConstantPlusLayer\",\n  \"ConstantRegionQ\",\n  \"Constants\",\n  \"ConstantTimesLayer\",\n  \"ConstellationData\",\n  \"ConstrainedMax\",\n  \"ConstrainedMin\",\n  \"Construct\",\n  \"Containing\",\n  \"ContainsAll\",\n  \"ContainsAny\",\n  \"ContainsExactly\",\n  \"ContainsNone\",\n  \"ContainsOnly\",\n  \"ContentDetectorFunction\",\n  \"ContentFieldOptions\",\n  \"ContentLocationFunction\",\n  \"ContentObject\",\n  \"ContentPadding\",\n  \"ContentsBoundingBox\",\n  \"ContentSelectable\",\n  \"ContentSize\",\n  \"Context\",\n  \"ContextMenu\",\n  \"Contexts\",\n  \"ContextToFileName\",\n  \"Continuation\",\n  \"Continue\",\n  \"ContinuedFraction\",\n  \"ContinuedFractionK\",\n  \"ContinuousAction\",\n  \"ContinuousMarkovProcess\",\n  \"ContinuousTask\",\n  \"ContinuousTimeModelQ\",\n  \"ContinuousWaveletData\",\n  \"ContinuousWaveletTransform\",\n  \"ContourDetect\",\n  \"ContourGraphics\",\n  \"ContourIntegral\",\n  \"ContourLabels\",\n  \"ContourLines\",\n  \"ContourPlot\",\n  \"ContourPlot3D\",\n  \"Contours\",\n  \"ContourShading\",\n  \"ContourSmoothing\",\n  \"ContourStyle\",\n  \"ContraharmonicMean\",\n  \"ContrastiveLossLayer\",\n  \"Control\",\n  \"ControlActive\",\n  \"ControlAlignment\",\n  \"ControlGroupContentsBox\",\n  \"ControllabilityGramian\",\n  \"ControllabilityMatrix\",\n  \"ControllableDecomposition\",\n  \"ControllableModelQ\",\n  \"ControllerDuration\",\n  \"ControllerInformation\",\n  \"ControllerInformationData\",\n  \"ControllerLinking\",\n  \"ControllerManipulate\",\n  \"ControllerMethod\",\n  \"ControllerPath\",\n  \"ControllerState\",\n  \"ControlPlacement\",\n  \"ControlsRendering\",\n  \"ControlType\",\n  \"ConvectionPDETerm\",\n  \"Convergents\",\n  \"ConversionOptions\",\n  \"ConversionRules\",\n  \"ConvertToPostScript\",\n  \"ConvertToPostScriptPacket\",\n  \"ConvexHullMesh\",\n  \"ConvexHullRegion\",\n  \"ConvexOptimization\",\n  \"ConvexPolygonQ\",\n  \"ConvexPolyhedronQ\",\n  \"ConvexRegionQ\",\n  \"ConvolutionLayer\",\n  \"Convolve\",\n  \"ConwayGroupCo1\",\n  \"ConwayGroupCo2\",\n  \"ConwayGroupCo3\",\n  \"CookieFunction\",\n  \"Cookies\",\n  \"CoordinateBoundingBox\",\n  \"CoordinateBoundingBoxArray\",\n  \"CoordinateBounds\",\n  \"CoordinateBoundsArray\",\n  \"CoordinateChartData\",\n  \"CoordinatesToolOptions\",\n  \"CoordinateTransform\",\n  \"CoordinateTransformData\",\n  \"CoplanarPoints\",\n  \"CoprimeQ\",\n  \"Coproduct\",\n  \"CopulaDistribution\",\n  \"Copyable\",\n  \"CopyDatabin\",\n  \"CopyDirectory\",\n  \"CopyFile\",\n  \"CopyFunction\",\n  \"CopyTag\",\n  \"CopyToClipboard\",\n  \"CoreNilpotentDecomposition\",\n  \"CornerFilter\",\n  \"CornerNeighbors\",\n  \"Correlation\",\n  \"CorrelationDistance\",\n  \"CorrelationFunction\",\n  \"CorrelationTest\",\n  \"Cos\",\n  \"Cosh\",\n  \"CoshIntegral\",\n  \"CosineDistance\",\n  \"CosineWindow\",\n  \"CosIntegral\",\n  \"Cot\",\n  \"Coth\",\n  \"CoulombF\",\n  \"CoulombG\",\n  \"CoulombH1\",\n  \"CoulombH2\",\n  \"Count\",\n  \"CountDistinct\",\n  \"CountDistinctBy\",\n  \"CounterAssignments\",\n  \"CounterBox\",\n  \"CounterBoxOptions\",\n  \"CounterClockwiseContourIntegral\",\n  \"CounterEvaluator\",\n  \"CounterFunction\",\n  \"CounterIncrements\",\n  \"CounterStyle\",\n  \"CounterStyleMenuListing\",\n  \"CountRoots\",\n  \"CountryData\",\n  \"Counts\",\n  \"CountsBy\",\n  \"Covariance\",\n  \"CovarianceEstimatorFunction\",\n  \"CovarianceFunction\",\n  \"CoxianDistribution\",\n  \"CoxIngersollRossProcess\",\n  \"CoxModel\",\n  \"CoxModelFit\",\n  \"CramerVonMisesTest\",\n  \"CreateArchive\",\n  \"CreateCellID\",\n  \"CreateChannel\",\n  \"CreateCloudExpression\",\n  \"CreateCompilerEnvironment\",\n  \"CreateDatabin\",\n  \"CreateDataStructure\",\n  \"CreateDataSystemModel\",\n  \"CreateDialog\",\n  \"CreateDirectory\",\n  \"CreateDocument\",\n  \"CreateFile\",\n  \"CreateIntermediateDirectories\",\n  \"CreateLicenseEntitlement\",\n  \"CreateManagedLibraryExpression\",\n  \"CreateNotebook\",\n  \"CreatePacletArchive\",\n  \"CreatePalette\",\n  \"CreatePermissionsGroup\",\n  \"CreateScheduledTask\",\n  \"CreateSearchIndex\",\n  \"CreateSystemModel\",\n  \"CreateTemporary\",\n  \"CreateTypeInstance\",\n  \"CreateUUID\",\n  \"CreateWindow\",\n  \"CriterionFunction\",\n  \"CriticalityFailureImportance\",\n  \"CriticalitySuccessImportance\",\n  \"CriticalSection\",\n  \"Cross\",\n  \"CrossEntropyLossLayer\",\n  \"CrossingCount\",\n  \"CrossingDetect\",\n  \"CrossingPolygon\",\n  \"CrossMatrix\",\n  \"Csc\",\n  \"Csch\",\n  \"CSGRegion\",\n  \"CSGRegionQ\",\n  \"CSGRegionTree\",\n  \"CTCLossLayer\",\n  \"Cube\",\n  \"CubeRoot\",\n  \"Cubics\",\n  \"Cuboid\",\n  \"CuboidBox\",\n  \"CuboidBoxOptions\",\n  \"Cumulant\",\n  \"CumulantGeneratingFunction\",\n  \"CumulativeFeatureImpactPlot\",\n  \"Cup\",\n  \"CupCap\",\n  \"Curl\",\n  \"CurlyDoubleQuote\",\n  \"CurlyQuote\",\n  \"CurrencyConvert\",\n  \"CurrentDate\",\n  \"CurrentImage\",\n  \"CurrentNotebookImage\",\n  \"CurrentScreenImage\",\n  \"CurrentValue\",\n  \"Curry\",\n  \"CurryApplied\",\n  \"CurvatureFlowFilter\",\n  \"CurveClosed\",\n  \"Cyan\",\n  \"CycleGraph\",\n  \"CycleIndexPolynomial\",\n  \"Cycles\",\n  \"CyclicGroup\",\n  \"Cyclotomic\",\n  \"Cylinder\",\n  \"CylinderBox\",\n  \"CylinderBoxOptions\",\n  \"CylindricalDecomposition\",\n  \"CylindricalDecompositionFunction\",\n  \"D\",\n  \"DagumDistribution\",\n  \"DamData\",\n  \"DamerauLevenshteinDistance\",\n  \"DampingFactor\",\n  \"Darker\",\n  \"Dashed\",\n  \"Dashing\",\n  \"DatabaseConnect\",\n  \"DatabaseDisconnect\",\n  \"DatabaseReference\",\n  \"Databin\",\n  \"DatabinAdd\",\n  \"DatabinRemove\",\n  \"Databins\",\n  \"DatabinSubmit\",\n  \"DatabinUpload\",\n  \"DataCompression\",\n  \"DataDistribution\",\n  \"DataRange\",\n  \"DataReversed\",\n  \"Dataset\",\n  \"DatasetDisplayPanel\",\n  \"DatasetTheme\",\n  \"DataStructure\",\n  \"DataStructureQ\",\n  \"Date\",\n  \"DateBounds\",\n  \"Dated\",\n  \"DateDelimiters\",\n  \"DateDifference\",\n  \"DatedUnit\",\n  \"DateFormat\",\n  \"DateFunction\",\n  \"DateGranularity\",\n  \"DateHistogram\",\n  \"DateInterval\",\n  \"DateList\",\n  \"DateListLogPlot\",\n  \"DateListPlot\",\n  \"DateListStepPlot\",\n  \"DateObject\",\n  \"DateObjectQ\",\n  \"DateOverlapsQ\",\n  \"DatePattern\",\n  \"DatePlus\",\n  \"DateRange\",\n  \"DateReduction\",\n  \"DateScale\",\n  \"DateSelect\",\n  \"DateString\",\n  \"DateTicksFormat\",\n  \"DateValue\",\n  \"DateWithinQ\",\n  \"DaubechiesWavelet\",\n  \"DavisDistribution\",\n  \"DawsonF\",\n  \"DayCount\",\n  \"DayCountConvention\",\n  \"DayHemisphere\",\n  \"DaylightQ\",\n  \"DayMatchQ\",\n  \"DayName\",\n  \"DayNightTerminator\",\n  \"DayPlus\",\n  \"DayRange\",\n  \"DayRound\",\n  \"DeBruijnGraph\",\n  \"DeBruijnSequence\",\n  \"Debug\",\n  \"DebugTag\",\n  \"Decapitalize\",\n  \"Decimal\",\n  \"DecimalForm\",\n  \"DeclareCompiledComponent\",\n  \"DeclareKnownSymbols\",\n  \"DeclarePackage\",\n  \"Decompose\",\n  \"DeconvolutionLayer\",\n  \"Decrement\",\n  \"Decrypt\",\n  \"DecryptFile\",\n  \"DedekindEta\",\n  \"DeepSpaceProbeData\",\n  \"Default\",\n  \"Default2DTool\",\n  \"Default3DTool\",\n  \"DefaultAttachedCellStyle\",\n  \"DefaultAxesStyle\",\n  \"DefaultBaseStyle\",\n  \"DefaultBoxStyle\",\n  \"DefaultButton\",\n  \"DefaultColor\",\n  \"DefaultControlPlacement\",\n  \"DefaultDockedCellStyle\",\n  \"DefaultDuplicateCellStyle\",\n  \"DefaultDuration\",\n  \"DefaultElement\",\n  \"DefaultFaceGridsStyle\",\n  \"DefaultFieldHintStyle\",\n  \"DefaultFont\",\n  \"DefaultFontProperties\",\n  \"DefaultFormatType\",\n  \"DefaultFrameStyle\",\n  \"DefaultFrameTicksStyle\",\n  \"DefaultGridLinesStyle\",\n  \"DefaultInlineFormatType\",\n  \"DefaultInputFormatType\",\n  \"DefaultLabelStyle\",\n  \"DefaultMenuStyle\",\n  \"DefaultNaturalLanguage\",\n  \"DefaultNewCellStyle\",\n  \"DefaultNewInlineCellStyle\",\n  \"DefaultNotebook\",\n  \"DefaultOptions\",\n  \"DefaultOutputFormatType\",\n  \"DefaultPrintPrecision\",\n  \"DefaultStyle\",\n  \"DefaultStyleDefinitions\",\n  \"DefaultTextFormatType\",\n  \"DefaultTextInlineFormatType\",\n  \"DefaultTicksStyle\",\n  \"DefaultTooltipStyle\",\n  \"DefaultValue\",\n  \"DefaultValues\",\n  \"Defer\",\n  \"DefineExternal\",\n  \"DefineInputStreamMethod\",\n  \"DefineOutputStreamMethod\",\n  \"DefineResourceFunction\",\n  \"Definition\",\n  \"Degree\",\n  \"DegreeCentrality\",\n  \"DegreeGraphDistribution\",\n  \"DegreeLexicographic\",\n  \"DegreeReverseLexicographic\",\n  \"DEigensystem\",\n  \"DEigenvalues\",\n  \"Deinitialization\",\n  \"Del\",\n  \"DelaunayMesh\",\n  \"Delayed\",\n  \"Deletable\",\n  \"Delete\",\n  \"DeleteAdjacentDuplicates\",\n  \"DeleteAnomalies\",\n  \"DeleteBorderComponents\",\n  \"DeleteCases\",\n  \"DeleteChannel\",\n  \"DeleteCloudExpression\",\n  \"DeleteContents\",\n  \"DeleteDirectory\",\n  \"DeleteDuplicates\",\n  \"DeleteDuplicatesBy\",\n  \"DeleteElements\",\n  \"DeleteFile\",\n  \"DeleteMissing\",\n  \"DeleteObject\",\n  \"DeletePermissionsKey\",\n  \"DeleteSearchIndex\",\n  \"DeleteSmallComponents\",\n  \"DeleteStopwords\",\n  \"DeleteWithContents\",\n  \"DeletionWarning\",\n  \"DelimitedArray\",\n  \"DelimitedSequence\",\n  \"Delimiter\",\n  \"DelimiterAutoMatching\",\n  \"DelimiterFlashTime\",\n  \"DelimiterMatching\",\n  \"Delimiters\",\n  \"DeliveryFunction\",\n  \"Dendrogram\",\n  \"Denominator\",\n  \"DensityGraphics\",\n  \"DensityHistogram\",\n  \"DensityPlot\",\n  \"DensityPlot3D\",\n  \"DependentVariables\",\n  \"Deploy\",\n  \"Deployed\",\n  \"Depth\",\n  \"DepthFirstScan\",\n  \"Derivative\",\n  \"DerivativeFilter\",\n  \"DerivativePDETerm\",\n  \"DerivedKey\",\n  \"DescriptorStateSpace\",\n  \"DesignMatrix\",\n  \"DestroyAfterEvaluation\",\n  \"Det\",\n  \"DeviceClose\",\n  \"DeviceConfigure\",\n  \"DeviceExecute\",\n  \"DeviceExecuteAsynchronous\",\n  \"DeviceObject\",\n  \"DeviceOpen\",\n  \"DeviceOpenQ\",\n  \"DeviceRead\",\n  \"DeviceReadBuffer\",\n  \"DeviceReadLatest\",\n  \"DeviceReadList\",\n  \"DeviceReadTimeSeries\",\n  \"Devices\",\n  \"DeviceStreams\",\n  \"DeviceWrite\",\n  \"DeviceWriteBuffer\",\n  \"DGaussianWavelet\",\n  \"DiacriticalPositioning\",\n  \"Diagonal\",\n  \"DiagonalizableMatrixQ\",\n  \"DiagonalMatrix\",\n  \"DiagonalMatrixQ\",\n  \"Dialog\",\n  \"DialogIndent\",\n  \"DialogInput\",\n  \"DialogLevel\",\n  \"DialogNotebook\",\n  \"DialogProlog\",\n  \"DialogReturn\",\n  \"DialogSymbols\",\n  \"Diamond\",\n  \"DiamondMatrix\",\n  \"DiceDissimilarity\",\n  \"DictionaryLookup\",\n  \"DictionaryWordQ\",\n  \"DifferenceDelta\",\n  \"DifferenceOrder\",\n  \"DifferenceQuotient\",\n  \"DifferenceRoot\",\n  \"DifferenceRootReduce\",\n  \"Differences\",\n  \"DifferentialD\",\n  \"DifferentialRoot\",\n  \"DifferentialRootReduce\",\n  \"DifferentiatorFilter\",\n  \"DiffusionPDETerm\",\n  \"DiggleGatesPointProcess\",\n  \"DiggleGrattonPointProcess\",\n  \"DigitalSignature\",\n  \"DigitBlock\",\n  \"DigitBlockMinimum\",\n  \"DigitCharacter\",\n  \"DigitCount\",\n  \"DigitQ\",\n  \"DihedralAngle\",\n  \"DihedralGroup\",\n  \"Dilation\",\n  \"DimensionalCombinations\",\n  \"DimensionalMeshComponents\",\n  \"DimensionReduce\",\n  \"DimensionReducerFunction\",\n  \"DimensionReduction\",\n  \"Dimensions\",\n  \"DiracComb\",\n  \"DiracDelta\",\n  \"DirectedEdge\",\n  \"DirectedEdges\",\n  \"DirectedGraph\",\n  \"DirectedGraphQ\",\n  \"DirectedInfinity\",\n  \"Direction\",\n  \"DirectionalLight\",\n  \"Directive\",\n  \"Directory\",\n  \"DirectoryName\",\n  \"DirectoryQ\",\n  \"DirectoryStack\",\n  \"DirichletBeta\",\n  \"DirichletCharacter\",\n  \"DirichletCondition\",\n  \"DirichletConvolve\",\n  \"DirichletDistribution\",\n  \"DirichletEta\",\n  \"DirichletL\",\n  \"DirichletLambda\",\n  \"DirichletTransform\",\n  \"DirichletWindow\",\n  \"DisableConsolePrintPacket\",\n  \"DisableFormatting\",\n  \"DiscreteAsymptotic\",\n  \"DiscreteChirpZTransform\",\n  \"DiscreteConvolve\",\n  \"DiscreteDelta\",\n  \"DiscreteHadamardTransform\",\n  \"DiscreteIndicator\",\n  \"DiscreteInputOutputModel\",\n  \"DiscreteLimit\",\n  \"DiscreteLQEstimatorGains\",\n  \"DiscreteLQRegulatorGains\",\n  \"DiscreteLyapunovSolve\",\n  \"DiscreteMarkovProcess\",\n  \"DiscreteMaxLimit\",\n  \"DiscreteMinLimit\",\n  \"DiscretePlot\",\n  \"DiscretePlot3D\",\n  \"DiscreteRatio\",\n  \"DiscreteRiccatiSolve\",\n  \"DiscreteShift\",\n  \"DiscreteTimeModelQ\",\n  \"DiscreteUniformDistribution\",\n  \"DiscreteVariables\",\n  \"DiscreteWaveletData\",\n  \"DiscreteWaveletPacketTransform\",\n  \"DiscreteWaveletTransform\",\n  \"DiscretizeGraphics\",\n  \"DiscretizeRegion\",\n  \"Discriminant\",\n  \"DisjointQ\",\n  \"Disjunction\",\n  \"Disk\",\n  \"DiskBox\",\n  \"DiskBoxOptions\",\n  \"DiskMatrix\",\n  \"DiskSegment\",\n  \"Dispatch\",\n  \"DispatchQ\",\n  \"DispersionEstimatorFunction\",\n  \"Display\",\n  \"DisplayAllSteps\",\n  \"DisplayEndPacket\",\n  \"DisplayForm\",\n  \"DisplayFunction\",\n  \"DisplayPacket\",\n  \"DisplayRules\",\n  \"DisplayString\",\n  \"DisplayTemporary\",\n  \"DisplayWith\",\n  \"DisplayWithRef\",\n  \"DisplayWithVariable\",\n  \"DistanceFunction\",\n  \"DistanceMatrix\",\n  \"DistanceTransform\",\n  \"Distribute\",\n  \"Distributed\",\n  \"DistributedContexts\",\n  \"DistributeDefinitions\",\n  \"DistributionChart\",\n  \"DistributionDomain\",\n  \"DistributionFitTest\",\n  \"DistributionParameterAssumptions\",\n  \"DistributionParameterQ\",\n  \"Dithering\",\n  \"Div\",\n  \"Divergence\",\n  \"Divide\",\n  \"DivideBy\",\n  \"Dividers\",\n  \"DivideSides\",\n  \"Divisible\",\n  \"Divisors\",\n  \"DivisorSigma\",\n  \"DivisorSum\",\n  \"DMSList\",\n  \"DMSString\",\n  \"Do\",\n  \"DockedCell\",\n  \"DockedCells\",\n  \"DocumentGenerator\",\n  \"DocumentGeneratorInformation\",\n  \"DocumentGeneratorInformationData\",\n  \"DocumentGenerators\",\n  \"DocumentNotebook\",\n  \"DocumentWeightingRules\",\n  \"Dodecahedron\",\n  \"DomainRegistrationInformation\",\n  \"DominantColors\",\n  \"DominatorTreeGraph\",\n  \"DominatorVertexList\",\n  \"DOSTextFormat\",\n  \"Dot\",\n  \"DotDashed\",\n  \"DotEqual\",\n  \"DotLayer\",\n  \"DotPlusLayer\",\n  \"Dotted\",\n  \"DoubleBracketingBar\",\n  \"DoubleContourIntegral\",\n  \"DoubleDownArrow\",\n  \"DoubleLeftArrow\",\n  \"DoubleLeftRightArrow\",\n  \"DoubleLeftTee\",\n  \"DoubleLongLeftArrow\",\n  \"DoubleLongLeftRightArrow\",\n  \"DoubleLongRightArrow\",\n  \"DoubleRightArrow\",\n  \"DoubleRightTee\",\n  \"DoubleUpArrow\",\n  \"DoubleUpDownArrow\",\n  \"DoubleVerticalBar\",\n  \"DoublyInfinite\",\n  \"Down\",\n  \"DownArrow\",\n  \"DownArrowBar\",\n  \"DownArrowUpArrow\",\n  \"DownLeftRightVector\",\n  \"DownLeftTeeVector\",\n  \"DownLeftVector\",\n  \"DownLeftVectorBar\",\n  \"DownRightTeeVector\",\n  \"DownRightVector\",\n  \"DownRightVectorBar\",\n  \"Downsample\",\n  \"DownTee\",\n  \"DownTeeArrow\",\n  \"DownValues\",\n  \"DownValuesFunction\",\n  \"DragAndDrop\",\n  \"DrawBackFaces\",\n  \"DrawEdges\",\n  \"DrawFrontFaces\",\n  \"DrawHighlighted\",\n  \"DrazinInverse\",\n  \"Drop\",\n  \"DropoutLayer\",\n  \"DropShadowing\",\n  \"DSolve\",\n  \"DSolveChangeVariables\",\n  \"DSolveValue\",\n  \"Dt\",\n  \"DualLinearProgramming\",\n  \"DualPlanarGraph\",\n  \"DualPolyhedron\",\n  \"DualSystemsModel\",\n  \"DumpGet\",\n  \"DumpSave\",\n  \"DuplicateFreeQ\",\n  \"Duration\",\n  \"Dynamic\",\n  \"DynamicBox\",\n  \"DynamicBoxOptions\",\n  \"DynamicEvaluationTimeout\",\n  \"DynamicGeoGraphics\",\n  \"DynamicImage\",\n  \"DynamicLocation\",\n  \"DynamicModule\",\n  \"DynamicModuleBox\",\n  \"DynamicModuleBoxOptions\",\n  \"DynamicModuleParent\",\n  \"DynamicModuleValues\",\n  \"DynamicName\",\n  \"DynamicNamespace\",\n  \"DynamicReference\",\n  \"DynamicSetting\",\n  \"DynamicUpdating\",\n  \"DynamicWrapper\",\n  \"DynamicWrapperBox\",\n  \"DynamicWrapperBoxOptions\",\n  \"E\",\n  \"EarthImpactData\",\n  \"EarthquakeData\",\n  \"EccentricityCentrality\",\n  \"Echo\",\n  \"EchoEvaluation\",\n  \"EchoFunction\",\n  \"EchoLabel\",\n  \"EchoTiming\",\n  \"EclipseType\",\n  \"EdgeAdd\",\n  \"EdgeBetweennessCentrality\",\n  \"EdgeCapacity\",\n  \"EdgeCapForm\",\n  \"EdgeChromaticNumber\",\n  \"EdgeColor\",\n  \"EdgeConnectivity\",\n  \"EdgeContract\",\n  \"EdgeCost\",\n  \"EdgeCount\",\n  \"EdgeCoverQ\",\n  \"EdgeCycleMatrix\",\n  \"EdgeDashing\",\n  \"EdgeDelete\",\n  \"EdgeDetect\",\n  \"EdgeForm\",\n  \"EdgeIndex\",\n  \"EdgeJoinForm\",\n  \"EdgeLabeling\",\n  \"EdgeLabels\",\n  \"EdgeLabelStyle\",\n  \"EdgeList\",\n  \"EdgeOpacity\",\n  \"EdgeQ\",\n  \"EdgeRenderingFunction\",\n  \"EdgeRules\",\n  \"EdgeShapeFunction\",\n  \"EdgeStyle\",\n  \"EdgeTaggedGraph\",\n  \"EdgeTaggedGraphQ\",\n  \"EdgeTags\",\n  \"EdgeThickness\",\n  \"EdgeTransitiveGraphQ\",\n  \"EdgeValueRange\",\n  \"EdgeValueSizes\",\n  \"EdgeWeight\",\n  \"EdgeWeightedGraphQ\",\n  \"Editable\",\n  \"EditButtonSettings\",\n  \"EditCellTagsSettings\",\n  \"EditDistance\",\n  \"EffectiveInterest\",\n  \"Eigensystem\",\n  \"Eigenvalues\",\n  \"EigenvectorCentrality\",\n  \"Eigenvectors\",\n  \"Element\",\n  \"ElementData\",\n  \"ElementwiseLayer\",\n  \"ElidedForms\",\n  \"Eliminate\",\n  \"EliminationOrder\",\n  \"Ellipsoid\",\n  \"EllipticE\",\n  \"EllipticExp\",\n  \"EllipticExpPrime\",\n  \"EllipticF\",\n  \"EllipticFilterModel\",\n  \"EllipticK\",\n  \"EllipticLog\",\n  \"EllipticNomeQ\",\n  \"EllipticPi\",\n  \"EllipticReducedHalfPeriods\",\n  \"EllipticTheta\",\n  \"EllipticThetaPrime\",\n  \"EmbedCode\",\n  \"EmbeddedHTML\",\n  \"EmbeddedService\",\n  \"EmbeddedSQLEntityClass\",\n  \"EmbeddedSQLExpression\",\n  \"EmbeddingLayer\",\n  \"EmbeddingObject\",\n  \"EmitSound\",\n  \"EmphasizeSyntaxErrors\",\n  \"EmpiricalDistribution\",\n  \"Empty\",\n  \"EmptyGraphQ\",\n  \"EmptyRegion\",\n  \"EmptySpaceF\",\n  \"EnableConsolePrintPacket\",\n  \"Enabled\",\n  \"Enclose\",\n  \"Encode\",\n  \"Encrypt\",\n  \"EncryptedObject\",\n  \"EncryptFile\",\n  \"End\",\n  \"EndAdd\",\n  \"EndDialogPacket\",\n  \"EndOfBuffer\",\n  \"EndOfFile\",\n  \"EndOfLine\",\n  \"EndOfString\",\n  \"EndPackage\",\n  \"EngineEnvironment\",\n  \"EngineeringForm\",\n  \"Enter\",\n  \"EnterExpressionPacket\",\n  \"EnterTextPacket\",\n  \"Entity\",\n  \"EntityClass\",\n  \"EntityClassList\",\n  \"EntityCopies\",\n  \"EntityFunction\",\n  \"EntityGroup\",\n  \"EntityInstance\",\n  \"EntityList\",\n  \"EntityPrefetch\",\n  \"EntityProperties\",\n  \"EntityProperty\",\n  \"EntityPropertyClass\",\n  \"EntityRegister\",\n  \"EntityStore\",\n  \"EntityStores\",\n  \"EntityTypeName\",\n  \"EntityUnregister\",\n  \"EntityValue\",\n  \"Entropy\",\n  \"EntropyFilter\",\n  \"Environment\",\n  \"Epilog\",\n  \"EpilogFunction\",\n  \"Equal\",\n  \"EqualColumns\",\n  \"EqualRows\",\n  \"EqualTilde\",\n  \"EqualTo\",\n  \"EquatedTo\",\n  \"Equilibrium\",\n  \"EquirippleFilterKernel\",\n  \"Equivalent\",\n  \"Erf\",\n  \"Erfc\",\n  \"Erfi\",\n  \"ErlangB\",\n  \"ErlangC\",\n  \"ErlangDistribution\",\n  \"Erosion\",\n  \"ErrorBox\",\n  \"ErrorBoxOptions\",\n  \"ErrorNorm\",\n  \"ErrorPacket\",\n  \"ErrorsDialogSettings\",\n  \"EscapeRadius\",\n  \"EstimatedBackground\",\n  \"EstimatedDistribution\",\n  \"EstimatedPointNormals\",\n  \"EstimatedPointProcess\",\n  \"EstimatedProcess\",\n  \"EstimatedVariogramModel\",\n  \"EstimatorGains\",\n  \"EstimatorRegulator\",\n  \"EuclideanDistance\",\n  \"EulerAngles\",\n  \"EulerCharacteristic\",\n  \"EulerE\",\n  \"EulerGamma\",\n  \"EulerianGraphQ\",\n  \"EulerMatrix\",\n  \"EulerPhi\",\n  \"Evaluatable\",\n  \"Evaluate\",\n  \"Evaluated\",\n  \"EvaluatePacket\",\n  \"EvaluateScheduledTask\",\n  \"EvaluationBox\",\n  \"EvaluationCell\",\n  \"EvaluationCompletionAction\",\n  \"EvaluationData\",\n  \"EvaluationElements\",\n  \"EvaluationEnvironment\",\n  \"EvaluationMode\",\n  \"EvaluationMonitor\",\n  \"EvaluationNotebook\",\n  \"EvaluationObject\",\n  \"EvaluationOrder\",\n  \"EvaluationPrivileges\",\n  \"EvaluationRateLimit\",\n  \"Evaluator\",\n  \"EvaluatorNames\",\n  \"EvenQ\",\n  \"EventData\",\n  \"EventEvaluator\",\n  \"EventHandler\",\n  \"EventHandlerTag\",\n  \"EventLabels\",\n  \"EventSeries\",\n  \"ExactBlackmanWindow\",\n  \"ExactNumberQ\",\n  \"ExactRootIsolation\",\n  \"ExampleData\",\n  \"Except\",\n  \"ExcludedContexts\",\n  \"ExcludedForms\",\n  \"ExcludedLines\",\n  \"ExcludedPhysicalQuantities\",\n  \"ExcludePods\",\n  \"Exclusions\",\n  \"ExclusionsStyle\",\n  \"Exists\",\n  \"Exit\",\n  \"ExitDialog\",\n  \"ExoplanetData\",\n  \"Exp\",\n  \"Expand\",\n  \"ExpandAll\",\n  \"ExpandDenominator\",\n  \"ExpandFileName\",\n  \"ExpandNumerator\",\n  \"Expectation\",\n  \"ExpectationE\",\n  \"ExpectedValue\",\n  \"ExpGammaDistribution\",\n  \"ExpIntegralE\",\n  \"ExpIntegralEi\",\n  \"ExpirationDate\",\n  \"Exponent\",\n  \"ExponentFunction\",\n  \"ExponentialDistribution\",\n  \"ExponentialFamily\",\n  \"ExponentialGeneratingFunction\",\n  \"ExponentialMovingAverage\",\n  \"ExponentialPowerDistribution\",\n  \"ExponentPosition\",\n  \"ExponentStep\",\n  \"Export\",\n  \"ExportAutoReplacements\",\n  \"ExportByteArray\",\n  \"ExportForm\",\n  \"ExportPacket\",\n  \"ExportString\",\n  \"Expression\",\n  \"ExpressionCell\",\n  \"ExpressionGraph\",\n  \"ExpressionPacket\",\n  \"ExpressionTree\",\n  \"ExpressionUUID\",\n  \"ExpToTrig\",\n  \"ExtendedEntityClass\",\n  \"ExtendedGCD\",\n  \"Extension\",\n  \"ExtentElementFunction\",\n  \"ExtentMarkers\",\n  \"ExtentSize\",\n  \"ExternalBundle\",\n  \"ExternalCall\",\n  \"ExternalDataCharacterEncoding\",\n  \"ExternalEvaluate\",\n  \"ExternalFunction\",\n  \"ExternalFunctionName\",\n  \"ExternalIdentifier\",\n  \"ExternalObject\",\n  \"ExternalOptions\",\n  \"ExternalSessionObject\",\n  \"ExternalSessions\",\n  \"ExternalStorageBase\",\n  \"ExternalStorageDownload\",\n  \"ExternalStorageGet\",\n  \"ExternalStorageObject\",\n  \"ExternalStoragePut\",\n  \"ExternalStorageUpload\",\n  \"ExternalTypeSignature\",\n  \"ExternalValue\",\n  \"Extract\",\n  \"ExtractArchive\",\n  \"ExtractLayer\",\n  \"ExtractPacletArchive\",\n  \"ExtremeValueDistribution\",\n  \"FaceAlign\",\n  \"FaceForm\",\n  \"FaceGrids\",\n  \"FaceGridsStyle\",\n  \"FaceRecognize\",\n  \"FacialFeatures\",\n  \"Factor\",\n  \"FactorComplete\",\n  \"Factorial\",\n  \"Factorial2\",\n  \"FactorialMoment\",\n  \"FactorialMomentGeneratingFunction\",\n  \"FactorialPower\",\n  \"FactorInteger\",\n  \"FactorList\",\n  \"FactorSquareFree\",\n  \"FactorSquareFreeList\",\n  \"FactorTerms\",\n  \"FactorTermsList\",\n  \"Fail\",\n  \"Failure\",\n  \"FailureAction\",\n  \"FailureDistribution\",\n  \"FailureQ\",\n  \"False\",\n  \"FareySequence\",\n  \"FARIMAProcess\",\n  \"FeatureDistance\",\n  \"FeatureExtract\",\n  \"FeatureExtraction\",\n  \"FeatureExtractor\",\n  \"FeatureExtractorFunction\",\n  \"FeatureImpactPlot\",\n  \"FeatureNames\",\n  \"FeatureNearest\",\n  \"FeatureSpacePlot\",\n  \"FeatureSpacePlot3D\",\n  \"FeatureTypes\",\n  \"FeatureValueDependencyPlot\",\n  \"FeatureValueImpactPlot\",\n  \"FEDisableConsolePrintPacket\",\n  \"FeedbackLinearize\",\n  \"FeedbackSector\",\n  \"FeedbackSectorStyle\",\n  \"FeedbackType\",\n  \"FEEnableConsolePrintPacket\",\n  \"FetalGrowthData\",\n  \"Fibonacci\",\n  \"Fibonorial\",\n  \"FieldCompletionFunction\",\n  \"FieldHint\",\n  \"FieldHintStyle\",\n  \"FieldMasked\",\n  \"FieldSize\",\n  \"File\",\n  \"FileBaseName\",\n  \"FileByteCount\",\n  \"FileConvert\",\n  \"FileDate\",\n  \"FileExistsQ\",\n  \"FileExtension\",\n  \"FileFormat\",\n  \"FileFormatProperties\",\n  \"FileFormatQ\",\n  \"FileHandler\",\n  \"FileHash\",\n  \"FileInformation\",\n  \"FileName\",\n  \"FileNameDepth\",\n  \"FileNameDialogSettings\",\n  \"FileNameDrop\",\n  \"FileNameForms\",\n  \"FileNameJoin\",\n  \"FileNames\",\n  \"FileNameSetter\",\n  \"FileNameSplit\",\n  \"FileNameTake\",\n  \"FileNameToFormatList\",\n  \"FilePrint\",\n  \"FileSize\",\n  \"FileSystemMap\",\n  \"FileSystemScan\",\n  \"FileSystemTree\",\n  \"FileTemplate\",\n  \"FileTemplateApply\",\n  \"FileType\",\n  \"FilledCurve\",\n  \"FilledCurveBox\",\n  \"FilledCurveBoxOptions\",\n  \"FilledTorus\",\n  \"FillForm\",\n  \"Filling\",\n  \"FillingStyle\",\n  \"FillingTransform\",\n  \"FilteredEntityClass\",\n  \"FilterRules\",\n  \"FinancialBond\",\n  \"FinancialData\",\n  \"FinancialDerivative\",\n  \"FinancialIndicator\",\n  \"Find\",\n  \"FindAnomalies\",\n  \"FindArgMax\",\n  \"FindArgMin\",\n  \"FindChannels\",\n  \"FindClique\",\n  \"FindClusters\",\n  \"FindCookies\",\n  \"FindCurvePath\",\n  \"FindCycle\",\n  \"FindDevices\",\n  \"FindDistribution\",\n  \"FindDistributionParameters\",\n  \"FindDivisions\",\n  \"FindEdgeColoring\",\n  \"FindEdgeCover\",\n  \"FindEdgeCut\",\n  \"FindEdgeIndependentPaths\",\n  \"FindEquationalProof\",\n  \"FindEulerianCycle\",\n  \"FindExternalEvaluators\",\n  \"FindFaces\",\n  \"FindFile\",\n  \"FindFit\",\n  \"FindFormula\",\n  \"FindFundamentalCycles\",\n  \"FindGeneratingFunction\",\n  \"FindGeoLocation\",\n  \"FindGeometricConjectures\",\n  \"FindGeometricTransform\",\n  \"FindGraphCommunities\",\n  \"FindGraphIsomorphism\",\n  \"FindGraphPartition\",\n  \"FindHamiltonianCycle\",\n  \"FindHamiltonianPath\",\n  \"FindHiddenMarkovStates\",\n  \"FindImageText\",\n  \"FindIndependentEdgeSet\",\n  \"FindIndependentVertexSet\",\n  \"FindInstance\",\n  \"FindIntegerNullVector\",\n  \"FindIsomers\",\n  \"FindIsomorphicSubgraph\",\n  \"FindKClan\",\n  \"FindKClique\",\n  \"FindKClub\",\n  \"FindKPlex\",\n  \"FindLibrary\",\n  \"FindLinearRecurrence\",\n  \"FindList\",\n  \"FindMatchingColor\",\n  \"FindMaximum\",\n  \"FindMaximumCut\",\n  \"FindMaximumFlow\",\n  \"FindMaxValue\",\n  \"FindMeshDefects\",\n  \"FindMinimum\",\n  \"FindMinimumCostFlow\",\n  \"FindMinimumCut\",\n  \"FindMinValue\",\n  \"FindMoleculeSubstructure\",\n  \"FindPath\",\n  \"FindPeaks\",\n  \"FindPermutation\",\n  \"FindPlanarColoring\",\n  \"FindPointProcessParameters\",\n  \"FindPostmanTour\",\n  \"FindProcessParameters\",\n  \"FindRegionTransform\",\n  \"FindRepeat\",\n  \"FindRoot\",\n  \"FindSequenceFunction\",\n  \"FindSettings\",\n  \"FindShortestPath\",\n  \"FindShortestTour\",\n  \"FindSpanningTree\",\n  \"FindSubgraphIsomorphism\",\n  \"FindSystemModelEquilibrium\",\n  \"FindTextualAnswer\",\n  \"FindThreshold\",\n  \"FindTransientRepeat\",\n  \"FindVertexColoring\",\n  \"FindVertexCover\",\n  \"FindVertexCut\",\n  \"FindVertexIndependentPaths\",\n  \"Fine\",\n  \"FinishDynamic\",\n  \"FiniteAbelianGroupCount\",\n  \"FiniteGroupCount\",\n  \"FiniteGroupData\",\n  \"First\",\n  \"FirstCase\",\n  \"FirstPassageTimeDistribution\",\n  \"FirstPosition\",\n  \"FischerGroupFi22\",\n  \"FischerGroupFi23\",\n  \"FischerGroupFi24Prime\",\n  \"FisherHypergeometricDistribution\",\n  \"FisherRatioTest\",\n  \"FisherZDistribution\",\n  \"Fit\",\n  \"FitAll\",\n  \"FitRegularization\",\n  \"FittedModel\",\n  \"FixedOrder\",\n  \"FixedPoint\",\n  \"FixedPointList\",\n  \"FlashSelection\",\n  \"Flat\",\n  \"FlatShading\",\n  \"Flatten\",\n  \"FlattenAt\",\n  \"FlattenLayer\",\n  \"FlatTopWindow\",\n  \"FlightData\",\n  \"FlipView\",\n  \"Floor\",\n  \"FlowPolynomial\",\n  \"Fold\",\n  \"FoldList\",\n  \"FoldPair\",\n  \"FoldPairList\",\n  \"FoldWhile\",\n  \"FoldWhileList\",\n  \"FollowRedirects\",\n  \"Font\",\n  \"FontColor\",\n  \"FontFamily\",\n  \"FontForm\",\n  \"FontName\",\n  \"FontOpacity\",\n  \"FontPostScriptName\",\n  \"FontProperties\",\n  \"FontReencoding\",\n  \"FontSize\",\n  \"FontSlant\",\n  \"FontSubstitutions\",\n  \"FontTracking\",\n  \"FontVariations\",\n  \"FontWeight\",\n  \"For\",\n  \"ForAll\",\n  \"ForAllType\",\n  \"ForceVersionInstall\",\n  \"Format\",\n  \"FormatRules\",\n  \"FormatType\",\n  \"FormatTypeAutoConvert\",\n  \"FormatValues\",\n  \"FormBox\",\n  \"FormBoxOptions\",\n  \"FormControl\",\n  \"FormFunction\",\n  \"FormLayoutFunction\",\n  \"FormObject\",\n  \"FormPage\",\n  \"FormProtectionMethod\",\n  \"FormTheme\",\n  \"FormulaData\",\n  \"FormulaLookup\",\n  \"FortranForm\",\n  \"Forward\",\n  \"ForwardBackward\",\n  \"ForwardCloudCredentials\",\n  \"Fourier\",\n  \"FourierCoefficient\",\n  \"FourierCosCoefficient\",\n  \"FourierCosSeries\",\n  \"FourierCosTransform\",\n  \"FourierDCT\",\n  \"FourierDCTFilter\",\n  \"FourierDCTMatrix\",\n  \"FourierDST\",\n  \"FourierDSTMatrix\",\n  \"FourierMatrix\",\n  \"FourierParameters\",\n  \"FourierSequenceTransform\",\n  \"FourierSeries\",\n  \"FourierSinCoefficient\",\n  \"FourierSinSeries\",\n  \"FourierSinTransform\",\n  \"FourierTransform\",\n  \"FourierTrigSeries\",\n  \"FoxH\",\n  \"FoxHReduce\",\n  \"FractionalBrownianMotionProcess\",\n  \"FractionalD\",\n  \"FractionalGaussianNoiseProcess\",\n  \"FractionalPart\",\n  \"FractionBox\",\n  \"FractionBoxOptions\",\n  \"FractionLine\",\n  \"Frame\",\n  \"FrameBox\",\n  \"FrameBoxOptions\",\n  \"Framed\",\n  \"FrameInset\",\n  \"FrameLabel\",\n  \"Frameless\",\n  \"FrameListVideo\",\n  \"FrameMargins\",\n  \"FrameRate\",\n  \"FrameStyle\",\n  \"FrameTicks\",\n  \"FrameTicksStyle\",\n  \"FRatioDistribution\",\n  \"FrechetDistribution\",\n  \"FreeQ\",\n  \"FrenetSerretSystem\",\n  \"FrequencySamplingFilterKernel\",\n  \"FresnelC\",\n  \"FresnelF\",\n  \"FresnelG\",\n  \"FresnelS\",\n  \"Friday\",\n  \"FrobeniusNumber\",\n  \"FrobeniusSolve\",\n  \"FromAbsoluteTime\",\n  \"FromCharacterCode\",\n  \"FromCoefficientRules\",\n  \"FromContinuedFraction\",\n  \"FromDate\",\n  \"FromDateString\",\n  \"FromDigits\",\n  \"FromDMS\",\n  \"FromEntity\",\n  \"FromJulianDate\",\n  \"FromLetterNumber\",\n  \"FromPolarCoordinates\",\n  \"FromRawPointer\",\n  \"FromRomanNumeral\",\n  \"FromSphericalCoordinates\",\n  \"FromUnixTime\",\n  \"Front\",\n  \"FrontEndDynamicExpression\",\n  \"FrontEndEventActions\",\n  \"FrontEndExecute\",\n  \"FrontEndObject\",\n  \"FrontEndResource\",\n  \"FrontEndResourceString\",\n  \"FrontEndStackSize\",\n  \"FrontEndToken\",\n  \"FrontEndTokenExecute\",\n  \"FrontEndValueCache\",\n  \"FrontEndVersion\",\n  \"FrontFaceColor\",\n  \"FrontFaceGlowColor\",\n  \"FrontFaceOpacity\",\n  \"FrontFaceSpecularColor\",\n  \"FrontFaceSpecularExponent\",\n  \"FrontFaceSurfaceAppearance\",\n  \"FrontFaceTexture\",\n  \"Full\",\n  \"FullAxes\",\n  \"FullDefinition\",\n  \"FullForm\",\n  \"FullGraphics\",\n  \"FullInformationOutputRegulator\",\n  \"FullOptions\",\n  \"FullRegion\",\n  \"FullSimplify\",\n  \"Function\",\n  \"FunctionAnalytic\",\n  \"FunctionBijective\",\n  \"FunctionCompile\",\n  \"FunctionCompileExport\",\n  \"FunctionCompileExportByteArray\",\n  \"FunctionCompileExportLibrary\",\n  \"FunctionCompileExportString\",\n  \"FunctionContinuous\",\n  \"FunctionConvexity\",\n  \"FunctionDeclaration\",\n  \"FunctionDiscontinuities\",\n  \"FunctionDomain\",\n  \"FunctionExpand\",\n  \"FunctionInjective\",\n  \"FunctionInterpolation\",\n  \"FunctionLayer\",\n  \"FunctionMeromorphic\",\n  \"FunctionMonotonicity\",\n  \"FunctionPeriod\",\n  \"FunctionPoles\",\n  \"FunctionRange\",\n  \"FunctionSign\",\n  \"FunctionSingularities\",\n  \"FunctionSpace\",\n  \"FunctionSurjective\",\n  \"FussellVeselyImportance\",\n  \"GaborFilter\",\n  \"GaborMatrix\",\n  \"GaborWavelet\",\n  \"GainMargins\",\n  \"GainPhaseMargins\",\n  \"GalaxyData\",\n  \"GalleryView\",\n  \"Gamma\",\n  \"GammaDistribution\",\n  \"GammaRegularized\",\n  \"GapPenalty\",\n  \"GARCHProcess\",\n  \"GatedRecurrentLayer\",\n  \"Gather\",\n  \"GatherBy\",\n  \"GaugeFaceElementFunction\",\n  \"GaugeFaceStyle\",\n  \"GaugeFrameElementFunction\",\n  \"GaugeFrameSize\",\n  \"GaugeFrameStyle\",\n  \"GaugeLabels\",\n  \"GaugeMarkers\",\n  \"GaugeStyle\",\n  \"GaussianFilter\",\n  \"GaussianIntegers\",\n  \"GaussianMatrix\",\n  \"GaussianOrthogonalMatrixDistribution\",\n  \"GaussianSymplecticMatrixDistribution\",\n  \"GaussianUnitaryMatrixDistribution\",\n  \"GaussianWindow\",\n  \"GCD\",\n  \"GegenbauerC\",\n  \"General\",\n  \"GeneralizedLinearModelFit\",\n  \"GenerateAsymmetricKeyPair\",\n  \"GenerateConditions\",\n  \"GeneratedAssetFormat\",\n  \"GeneratedAssetLocation\",\n  \"GeneratedCell\",\n  \"GeneratedCellStyles\",\n  \"GeneratedDocumentBinding\",\n  \"GenerateDerivedKey\",\n  \"GenerateDigitalSignature\",\n  \"GenerateDocument\",\n  \"GeneratedParameters\",\n  \"GeneratedQuantityMagnitudes\",\n  \"GenerateFileSignature\",\n  \"GenerateHTTPResponse\",\n  \"GenerateSecuredAuthenticationKey\",\n  \"GenerateSymmetricKey\",\n  \"GeneratingFunction\",\n  \"GeneratorDescription\",\n  \"GeneratorHistoryLength\",\n  \"GeneratorOutputType\",\n  \"Generic\",\n  \"GenericCylindricalDecomposition\",\n  \"GenomeData\",\n  \"GenomeLookup\",\n  \"GeoAntipode\",\n  \"GeoArea\",\n  \"GeoArraySize\",\n  \"GeoBackground\",\n  \"GeoBoundary\",\n  \"GeoBoundingBox\",\n  \"GeoBounds\",\n  \"GeoBoundsRegion\",\n  \"GeoBoundsRegionBoundary\",\n  \"GeoBubbleChart\",\n  \"GeoCenter\",\n  \"GeoCircle\",\n  \"GeoContourPlot\",\n  \"GeoDensityPlot\",\n  \"GeodesicClosing\",\n  \"GeodesicDilation\",\n  \"GeodesicErosion\",\n  \"GeodesicOpening\",\n  \"GeodesicPolyhedron\",\n  \"GeoDestination\",\n  \"GeodesyData\",\n  \"GeoDirection\",\n  \"GeoDisk\",\n  \"GeoDisplacement\",\n  \"GeoDistance\",\n  \"GeoDistanceList\",\n  \"GeoElevationData\",\n  \"GeoEntities\",\n  \"GeoGraphics\",\n  \"GeoGraphPlot\",\n  \"GeoGraphValuePlot\",\n  \"GeogravityModelData\",\n  \"GeoGridDirectionDifference\",\n  \"GeoGridLines\",\n  \"GeoGridLinesStyle\",\n  \"GeoGridPosition\",\n  \"GeoGridRange\",\n  \"GeoGridRangePadding\",\n  \"GeoGridUnitArea\",\n  \"GeoGridUnitDistance\",\n  \"GeoGridVector\",\n  \"GeoGroup\",\n  \"GeoHemisphere\",\n  \"GeoHemisphereBoundary\",\n  \"GeoHistogram\",\n  \"GeoIdentify\",\n  \"GeoImage\",\n  \"GeoLabels\",\n  \"GeoLength\",\n  \"GeoListPlot\",\n  \"GeoLocation\",\n  \"GeologicalPeriodData\",\n  \"GeomagneticModelData\",\n  \"GeoMarker\",\n  \"GeometricAssertion\",\n  \"GeometricBrownianMotionProcess\",\n  \"GeometricDistribution\",\n  \"GeometricMean\",\n  \"GeometricMeanFilter\",\n  \"GeometricOptimization\",\n  \"GeometricScene\",\n  \"GeometricStep\",\n  \"GeometricStylingRules\",\n  \"GeometricTest\",\n  \"GeometricTransformation\",\n  \"GeometricTransformation3DBox\",\n  \"GeometricTransformation3DBoxOptions\",\n  \"GeometricTransformationBox\",\n  \"GeometricTransformationBoxOptions\",\n  \"GeoModel\",\n  \"GeoNearest\",\n  \"GeoOrientationData\",\n  \"GeoPath\",\n  \"GeoPolygon\",\n  \"GeoPosition\",\n  \"GeoPositionENU\",\n  \"GeoPositionXYZ\",\n  \"GeoProjection\",\n  \"GeoProjectionData\",\n  \"GeoRange\",\n  \"GeoRangePadding\",\n  \"GeoRegionValuePlot\",\n  \"GeoResolution\",\n  \"GeoScaleBar\",\n  \"GeoServer\",\n  \"GeoSmoothHistogram\",\n  \"GeoStreamPlot\",\n  \"GeoStyling\",\n  \"GeoStylingImageFunction\",\n  \"GeoVariant\",\n  \"GeoVector\",\n  \"GeoVectorENU\",\n  \"GeoVectorPlot\",\n  \"GeoVectorXYZ\",\n  \"GeoVisibleRegion\",\n  \"GeoVisibleRegionBoundary\",\n  \"GeoWithinQ\",\n  \"GeoZoomLevel\",\n  \"GestureHandler\",\n  \"GestureHandlerTag\",\n  \"Get\",\n  \"GetContext\",\n  \"GetEnvironment\",\n  \"GetFileName\",\n  \"GetLinebreakInformationPacket\",\n  \"GibbsPointProcess\",\n  \"Glaisher\",\n  \"GlobalClusteringCoefficient\",\n  \"GlobalPreferences\",\n  \"GlobalSession\",\n  \"Glow\",\n  \"GoldenAngle\",\n  \"GoldenRatio\",\n  \"GompertzMakehamDistribution\",\n  \"GoochShading\",\n  \"GoodmanKruskalGamma\",\n  \"GoodmanKruskalGammaTest\",\n  \"Goto\",\n  \"GouraudShading\",\n  \"Grad\",\n  \"Gradient\",\n  \"GradientFilter\",\n  \"GradientFittedMesh\",\n  \"GradientOrientationFilter\",\n  \"GrammarApply\",\n  \"GrammarRules\",\n  \"GrammarToken\",\n  \"Graph\",\n  \"Graph3D\",\n  \"GraphAssortativity\",\n  \"GraphAutomorphismGroup\",\n  \"GraphCenter\",\n  \"GraphComplement\",\n  \"GraphData\",\n  \"GraphDensity\",\n  \"GraphDiameter\",\n  \"GraphDifference\",\n  \"GraphDisjointUnion\",\n  \"GraphDistance\",\n  \"GraphDistanceMatrix\",\n  \"GraphEmbedding\",\n  \"GraphHighlight\",\n  \"GraphHighlightStyle\",\n  \"GraphHub\",\n  \"Graphics\",\n  \"Graphics3D\",\n  \"Graphics3DBox\",\n  \"Graphics3DBoxOptions\",\n  \"GraphicsArray\",\n  \"GraphicsBaseline\",\n  \"GraphicsBox\",\n  \"GraphicsBoxOptions\",\n  \"GraphicsColor\",\n  \"GraphicsColumn\",\n  \"GraphicsComplex\",\n  \"GraphicsComplex3DBox\",\n  \"GraphicsComplex3DBoxOptions\",\n  \"GraphicsComplexBox\",\n  \"GraphicsComplexBoxOptions\",\n  \"GraphicsContents\",\n  \"GraphicsData\",\n  \"GraphicsGrid\",\n  \"GraphicsGridBox\",\n  \"GraphicsGroup\",\n  \"GraphicsGroup3DBox\",\n  \"GraphicsGroup3DBoxOptions\",\n  \"GraphicsGroupBox\",\n  \"GraphicsGroupBoxOptions\",\n  \"GraphicsGrouping\",\n  \"GraphicsHighlightColor\",\n  \"GraphicsRow\",\n  \"GraphicsSpacing\",\n  \"GraphicsStyle\",\n  \"GraphIntersection\",\n  \"GraphJoin\",\n  \"GraphLayerLabels\",\n  \"GraphLayers\",\n  \"GraphLayerStyle\",\n  \"GraphLayout\",\n  \"GraphLinkEfficiency\",\n  \"GraphPeriphery\",\n  \"GraphPlot\",\n  \"GraphPlot3D\",\n  \"GraphPower\",\n  \"GraphProduct\",\n  \"GraphPropertyDistribution\",\n  \"GraphQ\",\n  \"GraphRadius\",\n  \"GraphReciprocity\",\n  \"GraphRoot\",\n  \"GraphStyle\",\n  \"GraphSum\",\n  \"GraphTree\",\n  \"GraphUnion\",\n  \"Gray\",\n  \"GrayLevel\",\n  \"Greater\",\n  \"GreaterEqual\",\n  \"GreaterEqualLess\",\n  \"GreaterEqualThan\",\n  \"GreaterFullEqual\",\n  \"GreaterGreater\",\n  \"GreaterLess\",\n  \"GreaterSlantEqual\",\n  \"GreaterThan\",\n  \"GreaterTilde\",\n  \"GreekStyle\",\n  \"Green\",\n  \"GreenFunction\",\n  \"Grid\",\n  \"GridBaseline\",\n  \"GridBox\",\n  \"GridBoxAlignment\",\n  \"GridBoxBackground\",\n  \"GridBoxDividers\",\n  \"GridBoxFrame\",\n  \"GridBoxItemSize\",\n  \"GridBoxItemStyle\",\n  \"GridBoxOptions\",\n  \"GridBoxSpacings\",\n  \"GridCreationSettings\",\n  \"GridDefaultElement\",\n  \"GridElementStyleOptions\",\n  \"GridFrame\",\n  \"GridFrameMargins\",\n  \"GridGraph\",\n  \"GridLines\",\n  \"GridLinesStyle\",\n  \"GridVideo\",\n  \"GroebnerBasis\",\n  \"GroupActionBase\",\n  \"GroupBy\",\n  \"GroupCentralizer\",\n  \"GroupElementFromWord\",\n  \"GroupElementPosition\",\n  \"GroupElementQ\",\n  \"GroupElements\",\n  \"GroupElementToWord\",\n  \"GroupGenerators\",\n  \"Groupings\",\n  \"GroupMultiplicationTable\",\n  \"GroupOpenerColor\",\n  \"GroupOpenerInsideFrame\",\n  \"GroupOrbits\",\n  \"GroupOrder\",\n  \"GroupPageBreakWithin\",\n  \"GroupSetwiseStabilizer\",\n  \"GroupStabilizer\",\n  \"GroupStabilizerChain\",\n  \"GroupTogetherGrouping\",\n  \"GroupTogetherNestedGrouping\",\n  \"GrowCutComponents\",\n  \"Gudermannian\",\n  \"GuidedFilter\",\n  \"GumbelDistribution\",\n  \"HaarWavelet\",\n  \"HadamardMatrix\",\n  \"HalfLine\",\n  \"HalfNormalDistribution\",\n  \"HalfPlane\",\n  \"HalfSpace\",\n  \"HalftoneShading\",\n  \"HamiltonianGraphQ\",\n  \"HammingDistance\",\n  \"HammingWindow\",\n  \"HandlerFunctions\",\n  \"HandlerFunctionsKeys\",\n  \"HankelH1\",\n  \"HankelH2\",\n  \"HankelMatrix\",\n  \"HankelTransform\",\n  \"HannPoissonWindow\",\n  \"HannWindow\",\n  \"HaradaNortonGroupHN\",\n  \"HararyGraph\",\n  \"HardcorePointProcess\",\n  \"HarmonicMean\",\n  \"HarmonicMeanFilter\",\n  \"HarmonicNumber\",\n  \"Hash\",\n  \"HatchFilling\",\n  \"HatchShading\",\n  \"Haversine\",\n  \"HazardFunction\",\n  \"Head\",\n  \"HeadCompose\",\n  \"HeaderAlignment\",\n  \"HeaderBackground\",\n  \"HeaderDisplayFunction\",\n  \"HeaderLines\",\n  \"Headers\",\n  \"HeaderSize\",\n  \"HeaderStyle\",\n  \"Heads\",\n  \"HeatFluxValue\",\n  \"HeatInsulationValue\",\n  \"HeatOutflowValue\",\n  \"HeatRadiationValue\",\n  \"HeatSymmetryValue\",\n  \"HeatTemperatureCondition\",\n  \"HeatTransferPDEComponent\",\n  \"HeatTransferValue\",\n  \"HeavisideLambda\",\n  \"HeavisidePi\",\n  \"HeavisideTheta\",\n  \"HeldGroupHe\",\n  \"HeldPart\",\n  \"HelmholtzPDEComponent\",\n  \"HelpBrowserLookup\",\n  \"HelpBrowserNotebook\",\n  \"HelpBrowserSettings\",\n  \"HelpViewerSettings\",\n  \"Here\",\n  \"HermiteDecomposition\",\n  \"HermiteH\",\n  \"Hermitian\",\n  \"HermitianMatrixQ\",\n  \"HessenbergDecomposition\",\n  \"Hessian\",\n  \"HeunB\",\n  \"HeunBPrime\",\n  \"HeunC\",\n  \"HeunCPrime\",\n  \"HeunD\",\n  \"HeunDPrime\",\n  \"HeunG\",\n  \"HeunGPrime\",\n  \"HeunT\",\n  \"HeunTPrime\",\n  \"HexadecimalCharacter\",\n  \"Hexahedron\",\n  \"HexahedronBox\",\n  \"HexahedronBoxOptions\",\n  \"HiddenItems\",\n  \"HiddenMarkovProcess\",\n  \"HiddenSurface\",\n  \"Highlighted\",\n  \"HighlightGraph\",\n  \"HighlightImage\",\n  \"HighlightMesh\",\n  \"HighlightString\",\n  \"HighpassFilter\",\n  \"HigmanSimsGroupHS\",\n  \"HilbertCurve\",\n  \"HilbertFilter\",\n  \"HilbertMatrix\",\n  \"Histogram\",\n  \"Histogram3D\",\n  \"HistogramDistribution\",\n  \"HistogramList\",\n  \"HistogramPointDensity\",\n  \"HistogramTransform\",\n  \"HistogramTransformInterpolation\",\n  \"HistoricalPeriodData\",\n  \"HitMissTransform\",\n  \"HITSCentrality\",\n  \"HjorthDistribution\",\n  \"HodgeDual\",\n  \"HoeffdingD\",\n  \"HoeffdingDTest\",\n  \"Hold\",\n  \"HoldAll\",\n  \"HoldAllComplete\",\n  \"HoldComplete\",\n  \"HoldFirst\",\n  \"HoldForm\",\n  \"HoldPattern\",\n  \"HoldRest\",\n  \"HolidayCalendar\",\n  \"HomeDirectory\",\n  \"HomePage\",\n  \"Horizontal\",\n  \"HorizontalForm\",\n  \"HorizontalGauge\",\n  \"HorizontalScrollPosition\",\n  \"HornerForm\",\n  \"HostLookup\",\n  \"HotellingTSquareDistribution\",\n  \"HoytDistribution\",\n  \"HTMLSave\",\n  \"HTTPErrorResponse\",\n  \"HTTPRedirect\",\n  \"HTTPRequest\",\n  \"HTTPRequestData\",\n  \"HTTPResponse\",\n  \"Hue\",\n  \"HumanGrowthData\",\n  \"HumpDownHump\",\n  \"HumpEqual\",\n  \"HurwitzLerchPhi\",\n  \"HurwitzZeta\",\n  \"HyperbolicDistribution\",\n  \"HypercubeGraph\",\n  \"HyperexponentialDistribution\",\n  \"Hyperfactorial\",\n  \"Hypergeometric0F1\",\n  \"Hypergeometric0F1Regularized\",\n  \"Hypergeometric1F1\",\n  \"Hypergeometric1F1Regularized\",\n  \"Hypergeometric2F1\",\n  \"Hypergeometric2F1Regularized\",\n  \"HypergeometricDistribution\",\n  \"HypergeometricPFQ\",\n  \"HypergeometricPFQRegularized\",\n  \"HypergeometricU\",\n  \"Hyperlink\",\n  \"HyperlinkAction\",\n  \"HyperlinkCreationSettings\",\n  \"Hyperplane\",\n  \"Hyphenation\",\n  \"HyphenationOptions\",\n  \"HypoexponentialDistribution\",\n  \"HypothesisTestData\",\n  \"I\",\n  \"IconData\",\n  \"Iconize\",\n  \"IconizedObject\",\n  \"IconRules\",\n  \"Icosahedron\",\n  \"Identity\",\n  \"IdentityMatrix\",\n  \"If\",\n  \"IfCompiled\",\n  \"IgnoreCase\",\n  \"IgnoreDiacritics\",\n  \"IgnoreIsotopes\",\n  \"IgnorePunctuation\",\n  \"IgnoreSpellCheck\",\n  \"IgnoreStereochemistry\",\n  \"IgnoringInactive\",\n  \"Im\",\n  \"Image\",\n  \"Image3D\",\n  \"Image3DProjection\",\n  \"Image3DSlices\",\n  \"ImageAccumulate\",\n  \"ImageAdd\",\n  \"ImageAdjust\",\n  \"ImageAlign\",\n  \"ImageApply\",\n  \"ImageApplyIndexed\",\n  \"ImageAspectRatio\",\n  \"ImageAssemble\",\n  \"ImageAugmentationLayer\",\n  \"ImageBoundingBoxes\",\n  \"ImageCache\",\n  \"ImageCacheValid\",\n  \"ImageCapture\",\n  \"ImageCaptureFunction\",\n  \"ImageCases\",\n  \"ImageChannels\",\n  \"ImageClip\",\n  \"ImageCollage\",\n  \"ImageColorSpace\",\n  \"ImageCompose\",\n  \"ImageContainsQ\",\n  \"ImageContents\",\n  \"ImageConvolve\",\n  \"ImageCooccurrence\",\n  \"ImageCorners\",\n  \"ImageCorrelate\",\n  \"ImageCorrespondingPoints\",\n  \"ImageCrop\",\n  \"ImageData\",\n  \"ImageDeconvolve\",\n  \"ImageDemosaic\",\n  \"ImageDifference\",\n  \"ImageDimensions\",\n  \"ImageDisplacements\",\n  \"ImageDistance\",\n  \"ImageEditMode\",\n  \"ImageEffect\",\n  \"ImageExposureCombine\",\n  \"ImageFeatureTrack\",\n  \"ImageFileApply\",\n  \"ImageFileFilter\",\n  \"ImageFileScan\",\n  \"ImageFilter\",\n  \"ImageFocusCombine\",\n  \"ImageForestingComponents\",\n  \"ImageFormattingWidth\",\n  \"ImageForwardTransformation\",\n  \"ImageGraphics\",\n  \"ImageHistogram\",\n  \"ImageIdentify\",\n  \"ImageInstanceQ\",\n  \"ImageKeypoints\",\n  \"ImageLabels\",\n  \"ImageLegends\",\n  \"ImageLevels\",\n  \"ImageLines\",\n  \"ImageMargins\",\n  \"ImageMarker\",\n  \"ImageMarkers\",\n  \"ImageMeasurements\",\n  \"ImageMesh\",\n  \"ImageMultiply\",\n  \"ImageOffset\",\n  \"ImagePad\",\n  \"ImagePadding\",\n  \"ImagePartition\",\n  \"ImagePeriodogram\",\n  \"ImagePerspectiveTransformation\",\n  \"ImagePosition\",\n  \"ImagePreviewFunction\",\n  \"ImagePyramid\",\n  \"ImagePyramidApply\",\n  \"ImageQ\",\n  \"ImageRangeCache\",\n  \"ImageRecolor\",\n  \"ImageReflect\",\n  \"ImageRegion\",\n  \"ImageResize\",\n  \"ImageResolution\",\n  \"ImageRestyle\",\n  \"ImageRotate\",\n  \"ImageRotated\",\n  \"ImageSaliencyFilter\",\n  \"ImageScaled\",\n  \"ImageScan\",\n  \"ImageSize\",\n  \"ImageSizeAction\",\n  \"ImageSizeCache\",\n  \"ImageSizeMultipliers\",\n  \"ImageSizeRaw\",\n  \"ImageStitch\",\n  \"ImageSubtract\",\n  \"ImageTake\",\n  \"ImageTransformation\",\n  \"ImageTrim\",\n  \"ImageType\",\n  \"ImageValue\",\n  \"ImageValuePositions\",\n  \"ImageVectorscopePlot\",\n  \"ImageWaveformPlot\",\n  \"ImagingDevice\",\n  \"ImplicitD\",\n  \"ImplicitRegion\",\n  \"Implies\",\n  \"Import\",\n  \"ImportAutoReplacements\",\n  \"ImportByteArray\",\n  \"ImportedObject\",\n  \"ImportOptions\",\n  \"ImportString\",\n  \"ImprovementImportance\",\n  \"In\",\n  \"Inactivate\",\n  \"Inactive\",\n  \"InactiveStyle\",\n  \"IncidenceGraph\",\n  \"IncidenceList\",\n  \"IncidenceMatrix\",\n  \"IncludeAromaticBonds\",\n  \"IncludeConstantBasis\",\n  \"IncludedContexts\",\n  \"IncludeDefinitions\",\n  \"IncludeDirectories\",\n  \"IncludeFileExtension\",\n  \"IncludeGeneratorTasks\",\n  \"IncludeHydrogens\",\n  \"IncludeInflections\",\n  \"IncludeMetaInformation\",\n  \"IncludePods\",\n  \"IncludeQuantities\",\n  \"IncludeRelatedTables\",\n  \"IncludeSingularSolutions\",\n  \"IncludeSingularTerm\",\n  \"IncludeWindowTimes\",\n  \"Increment\",\n  \"IndefiniteMatrixQ\",\n  \"Indent\",\n  \"IndentingNewlineSpacings\",\n  \"IndentMaxFraction\",\n  \"IndependenceTest\",\n  \"IndependentEdgeSetQ\",\n  \"IndependentPhysicalQuantity\",\n  \"IndependentUnit\",\n  \"IndependentUnitDimension\",\n  \"IndependentVertexSetQ\",\n  \"Indeterminate\",\n  \"IndeterminateThreshold\",\n  \"IndexCreationOptions\",\n  \"Indexed\",\n  \"IndexEdgeTaggedGraph\",\n  \"IndexGraph\",\n  \"IndexTag\",\n  \"Inequality\",\n  \"InertEvaluate\",\n  \"InertExpression\",\n  \"InexactNumberQ\",\n  \"InexactNumbers\",\n  \"InfiniteFuture\",\n  \"InfiniteLine\",\n  \"InfiniteLineThrough\",\n  \"InfinitePast\",\n  \"InfinitePlane\",\n  \"Infinity\",\n  \"Infix\",\n  \"InflationAdjust\",\n  \"InflationMethod\",\n  \"Information\",\n  \"InformationData\",\n  \"InformationDataGrid\",\n  \"Inherited\",\n  \"InheritScope\",\n  \"InhomogeneousPoissonPointProcess\",\n  \"InhomogeneousPoissonProcess\",\n  \"InitialEvaluationHistory\",\n  \"Initialization\",\n  \"InitializationCell\",\n  \"InitializationCellEvaluation\",\n  \"InitializationCellWarning\",\n  \"InitializationObject\",\n  \"InitializationObjects\",\n  \"InitializationValue\",\n  \"Initialize\",\n  \"InitialSeeding\",\n  \"InlineCounterAssignments\",\n  \"InlineCounterIncrements\",\n  \"InlineRules\",\n  \"Inner\",\n  \"InnerPolygon\",\n  \"InnerPolyhedron\",\n  \"Inpaint\",\n  \"Input\",\n  \"InputAliases\",\n  \"InputAssumptions\",\n  \"InputAutoReplacements\",\n  \"InputField\",\n  \"InputFieldBox\",\n  \"InputFieldBoxOptions\",\n  \"InputForm\",\n  \"InputGrouping\",\n  \"InputNamePacket\",\n  \"InputNotebook\",\n  \"InputPacket\",\n  \"InputPorts\",\n  \"InputSettings\",\n  \"InputStream\",\n  \"InputString\",\n  \"InputStringPacket\",\n  \"InputToBoxFormPacket\",\n  \"Insert\",\n  \"InsertionFunction\",\n  \"InsertionPointObject\",\n  \"InsertLinebreaks\",\n  \"InsertResults\",\n  \"Inset\",\n  \"Inset3DBox\",\n  \"Inset3DBoxOptions\",\n  \"InsetBox\",\n  \"InsetBoxOptions\",\n  \"Insphere\",\n  \"Install\",\n  \"InstallService\",\n  \"InstanceNormalizationLayer\",\n  \"InString\",\n  \"Integer\",\n  \"IntegerDigits\",\n  \"IntegerExponent\",\n  \"IntegerLength\",\n  \"IntegerName\",\n  \"IntegerPart\",\n  \"IntegerPartitions\",\n  \"IntegerQ\",\n  \"IntegerReverse\",\n  \"Integers\",\n  \"IntegerString\",\n  \"Integral\",\n  \"Integrate\",\n  \"IntegrateChangeVariables\",\n  \"Interactive\",\n  \"InteractiveTradingChart\",\n  \"InterfaceSwitched\",\n  \"Interlaced\",\n  \"Interleaving\",\n  \"InternallyBalancedDecomposition\",\n  \"InterpolatingFunction\",\n  \"InterpolatingPolynomial\",\n  \"Interpolation\",\n  \"InterpolationOrder\",\n  \"InterpolationPoints\",\n  \"InterpolationPrecision\",\n  \"Interpretation\",\n  \"InterpretationBox\",\n  \"InterpretationBoxOptions\",\n  \"InterpretationFunction\",\n  \"Interpreter\",\n  \"InterpretTemplate\",\n  \"InterquartileRange\",\n  \"Interrupt\",\n  \"InterruptSettings\",\n  \"IntersectedEntityClass\",\n  \"IntersectingQ\",\n  \"Intersection\",\n  \"Interval\",\n  \"IntervalIntersection\",\n  \"IntervalMarkers\",\n  \"IntervalMarkersStyle\",\n  \"IntervalMemberQ\",\n  \"IntervalSlider\",\n  \"IntervalUnion\",\n  \"Into\",\n  \"Inverse\",\n  \"InverseBetaRegularized\",\n  \"InverseBilateralLaplaceTransform\",\n  \"InverseBilateralZTransform\",\n  \"InverseCDF\",\n  \"InverseChiSquareDistribution\",\n  \"InverseContinuousWaveletTransform\",\n  \"InverseDistanceTransform\",\n  \"InverseEllipticNomeQ\",\n  \"InverseErf\",\n  \"InverseErfc\",\n  \"InverseFourier\",\n  \"InverseFourierCosTransform\",\n  \"InverseFourierSequenceTransform\",\n  \"InverseFourierSinTransform\",\n  \"InverseFourierTransform\",\n  \"InverseFunction\",\n  \"InverseFunctions\",\n  \"InverseGammaDistribution\",\n  \"InverseGammaRegularized\",\n  \"InverseGaussianDistribution\",\n  \"InverseGudermannian\",\n  \"InverseHankelTransform\",\n  \"InverseHaversine\",\n  \"InverseImagePyramid\",\n  \"InverseJacobiCD\",\n  \"InverseJacobiCN\",\n  \"InverseJacobiCS\",\n  \"InverseJacobiDC\",\n  \"InverseJacobiDN\",\n  \"InverseJacobiDS\",\n  \"InverseJacobiNC\",\n  \"InverseJacobiND\",\n  \"InverseJacobiNS\",\n  \"InverseJacobiSC\",\n  \"InverseJacobiSD\",\n  \"InverseJacobiSN\",\n  \"InverseLaplaceTransform\",\n  \"InverseMellinTransform\",\n  \"InversePermutation\",\n  \"InverseRadon\",\n  \"InverseRadonTransform\",\n  \"InverseSeries\",\n  \"InverseShortTimeFourier\",\n  \"InverseSpectrogram\",\n  \"InverseSurvivalFunction\",\n  \"InverseTransformedRegion\",\n  \"InverseWaveletTransform\",\n  \"InverseWeierstrassP\",\n  \"InverseWishartMatrixDistribution\",\n  \"InverseZTransform\",\n  \"Invisible\",\n  \"InvisibleApplication\",\n  \"InvisibleTimes\",\n  \"IPAddress\",\n  \"IrreduciblePolynomialQ\",\n  \"IslandData\",\n  \"IsolatingInterval\",\n  \"IsomorphicGraphQ\",\n  \"IsomorphicSubgraphQ\",\n  \"IsotopeData\",\n  \"Italic\",\n  \"Item\",\n  \"ItemAspectRatio\",\n  \"ItemBox\",\n  \"ItemBoxOptions\",\n  \"ItemDisplayFunction\",\n  \"ItemSize\",\n  \"ItemStyle\",\n  \"ItoProcess\",\n  \"JaccardDissimilarity\",\n  \"JacobiAmplitude\",\n  \"Jacobian\",\n  \"JacobiCD\",\n  \"JacobiCN\",\n  \"JacobiCS\",\n  \"JacobiDC\",\n  \"JacobiDN\",\n  \"JacobiDS\",\n  \"JacobiEpsilon\",\n  \"JacobiNC\",\n  \"JacobiND\",\n  \"JacobiNS\",\n  \"JacobiP\",\n  \"JacobiSC\",\n  \"JacobiSD\",\n  \"JacobiSN\",\n  \"JacobiSymbol\",\n  \"JacobiZeta\",\n  \"JacobiZN\",\n  \"JankoGroupJ1\",\n  \"JankoGroupJ2\",\n  \"JankoGroupJ3\",\n  \"JankoGroupJ4\",\n  \"JarqueBeraALMTest\",\n  \"JohnsonDistribution\",\n  \"Join\",\n  \"JoinAcross\",\n  \"Joined\",\n  \"JoinedCurve\",\n  \"JoinedCurveBox\",\n  \"JoinedCurveBoxOptions\",\n  \"JoinForm\",\n  \"JordanDecomposition\",\n  \"JordanModelDecomposition\",\n  \"JulianDate\",\n  \"JuliaSetBoettcher\",\n  \"JuliaSetIterationCount\",\n  \"JuliaSetPlot\",\n  \"JuliaSetPoints\",\n  \"K\",\n  \"KagiChart\",\n  \"KaiserBesselWindow\",\n  \"KaiserWindow\",\n  \"KalmanEstimator\",\n  \"KalmanFilter\",\n  \"KarhunenLoeveDecomposition\",\n  \"KaryTree\",\n  \"KatzCentrality\",\n  \"KCoreComponents\",\n  \"KDistribution\",\n  \"KEdgeConnectedComponents\",\n  \"KEdgeConnectedGraphQ\",\n  \"KeepExistingVersion\",\n  \"KelvinBei\",\n  \"KelvinBer\",\n  \"KelvinKei\",\n  \"KelvinKer\",\n  \"KendallTau\",\n  \"KendallTauTest\",\n  \"KernelConfiguration\",\n  \"KernelExecute\",\n  \"KernelFunction\",\n  \"KernelMixtureDistribution\",\n  \"KernelObject\",\n  \"Kernels\",\n  \"Ket\",\n  \"Key\",\n  \"KeyCollisionFunction\",\n  \"KeyComplement\",\n  \"KeyDrop\",\n  \"KeyDropFrom\",\n  \"KeyExistsQ\",\n  \"KeyFreeQ\",\n  \"KeyIntersection\",\n  \"KeyMap\",\n  \"KeyMemberQ\",\n  \"KeypointStrength\",\n  \"Keys\",\n  \"KeySelect\",\n  \"KeySort\",\n  \"KeySortBy\",\n  \"KeyTake\",\n  \"KeyUnion\",\n  \"KeyValueMap\",\n  \"KeyValuePattern\",\n  \"Khinchin\",\n  \"KillProcess\",\n  \"KirchhoffGraph\",\n  \"KirchhoffMatrix\",\n  \"KleinInvariantJ\",\n  \"KnapsackSolve\",\n  \"KnightTourGraph\",\n  \"KnotData\",\n  \"KnownUnitQ\",\n  \"KochCurve\",\n  \"KolmogorovSmirnovTest\",\n  \"KroneckerDelta\",\n  \"KroneckerModelDecomposition\",\n  \"KroneckerProduct\",\n  \"KroneckerSymbol\",\n  \"KuiperTest\",\n  \"KumaraswamyDistribution\",\n  \"Kurtosis\",\n  \"KuwaharaFilter\",\n  \"KVertexConnectedComponents\",\n  \"KVertexConnectedGraphQ\",\n  \"LABColor\",\n  \"Label\",\n  \"Labeled\",\n  \"LabeledSlider\",\n  \"LabelingFunction\",\n  \"LabelingSize\",\n  \"LabelStyle\",\n  \"LabelVisibility\",\n  \"LaguerreL\",\n  \"LakeData\",\n  \"LambdaComponents\",\n  \"LambertW\",\n  \"LameC\",\n  \"LameCPrime\",\n  \"LameEigenvalueA\",\n  \"LameEigenvalueB\",\n  \"LameS\",\n  \"LameSPrime\",\n  \"LaminaData\",\n  \"LanczosWindow\",\n  \"LandauDistribution\",\n  \"Language\",\n  \"LanguageCategory\",\n  \"LanguageData\",\n  \"LanguageIdentify\",\n  \"LanguageOptions\",\n  \"LaplaceDistribution\",\n  \"LaplaceTransform\",\n  \"Laplacian\",\n  \"LaplacianFilter\",\n  \"LaplacianGaussianFilter\",\n  \"LaplacianPDETerm\",\n  \"Large\",\n  \"Larger\",\n  \"Last\",\n  \"Latitude\",\n  \"LatitudeLongitude\",\n  \"LatticeData\",\n  \"LatticeReduce\",\n  \"Launch\",\n  \"LaunchKernels\",\n  \"LayeredGraphPlot\",\n  \"LayeredGraphPlot3D\",\n  \"LayerSizeFunction\",\n  \"LayoutInformation\",\n  \"LCHColor\",\n  \"LCM\",\n  \"LeaderSize\",\n  \"LeafCount\",\n  \"LeapVariant\",\n  \"LeapYearQ\",\n  \"LearnDistribution\",\n  \"LearnedDistribution\",\n  \"LearningRate\",\n  \"LearningRateMultipliers\",\n  \"LeastSquares\",\n  \"LeastSquaresFilterKernel\",\n  \"Left\",\n  \"LeftArrow\",\n  \"LeftArrowBar\",\n  \"LeftArrowRightArrow\",\n  \"LeftDownTeeVector\",\n  \"LeftDownVector\",\n  \"LeftDownVectorBar\",\n  \"LeftRightArrow\",\n  \"LeftRightVector\",\n  \"LeftTee\",\n  \"LeftTeeArrow\",\n  \"LeftTeeVector\",\n  \"LeftTriangle\",\n  \"LeftTriangleBar\",\n  \"LeftTriangleEqual\",\n  \"LeftUpDownVector\",\n  \"LeftUpTeeVector\",\n  \"LeftUpVector\",\n  \"LeftUpVectorBar\",\n  \"LeftVector\",\n  \"LeftVectorBar\",\n  \"LegendAppearance\",\n  \"Legended\",\n  \"LegendFunction\",\n  \"LegendLabel\",\n  \"LegendLayout\",\n  \"LegendMargins\",\n  \"LegendMarkers\",\n  \"LegendMarkerSize\",\n  \"LegendreP\",\n  \"LegendreQ\",\n  \"LegendreType\",\n  \"Length\",\n  \"LengthWhile\",\n  \"LerchPhi\",\n  \"Less\",\n  \"LessEqual\",\n  \"LessEqualGreater\",\n  \"LessEqualThan\",\n  \"LessFullEqual\",\n  \"LessGreater\",\n  \"LessLess\",\n  \"LessSlantEqual\",\n  \"LessThan\",\n  \"LessTilde\",\n  \"LetterCharacter\",\n  \"LetterCounts\",\n  \"LetterNumber\",\n  \"LetterQ\",\n  \"Level\",\n  \"LeveneTest\",\n  \"LeviCivitaTensor\",\n  \"LevyDistribution\",\n  \"Lexicographic\",\n  \"LexicographicOrder\",\n  \"LexicographicSort\",\n  \"LibraryDataType\",\n  \"LibraryFunction\",\n  \"LibraryFunctionDeclaration\",\n  \"LibraryFunctionError\",\n  \"LibraryFunctionInformation\",\n  \"LibraryFunctionLoad\",\n  \"LibraryFunctionUnload\",\n  \"LibraryLoad\",\n  \"LibraryUnload\",\n  \"LicenseEntitlementObject\",\n  \"LicenseEntitlements\",\n  \"LicenseID\",\n  \"LicensingSettings\",\n  \"LiftingFilterData\",\n  \"LiftingWaveletTransform\",\n  \"LightBlue\",\n  \"LightBrown\",\n  \"LightCyan\",\n  \"Lighter\",\n  \"LightGray\",\n  \"LightGreen\",\n  \"Lighting\",\n  \"LightingAngle\",\n  \"LightMagenta\",\n  \"LightOrange\",\n  \"LightPink\",\n  \"LightPurple\",\n  \"LightRed\",\n  \"LightSources\",\n  \"LightYellow\",\n  \"Likelihood\",\n  \"Limit\",\n  \"LimitsPositioning\",\n  \"LimitsPositioningTokens\",\n  \"LindleyDistribution\",\n  \"Line\",\n  \"Line3DBox\",\n  \"Line3DBoxOptions\",\n  \"LinearFilter\",\n  \"LinearFractionalOptimization\",\n  \"LinearFractionalTransform\",\n  \"LinearGradientFilling\",\n  \"LinearGradientImage\",\n  \"LinearizingTransformationData\",\n  \"LinearLayer\",\n  \"LinearModelFit\",\n  \"LinearOffsetFunction\",\n  \"LinearOptimization\",\n  \"LinearProgramming\",\n  \"LinearRecurrence\",\n  \"LinearSolve\",\n  \"LinearSolveFunction\",\n  \"LineBox\",\n  \"LineBoxOptions\",\n  \"LineBreak\",\n  \"LinebreakAdjustments\",\n  \"LineBreakChart\",\n  \"LinebreakSemicolonWeighting\",\n  \"LineBreakWithin\",\n  \"LineColor\",\n  \"LineGraph\",\n  \"LineIndent\",\n  \"LineIndentMaxFraction\",\n  \"LineIntegralConvolutionPlot\",\n  \"LineIntegralConvolutionScale\",\n  \"LineLegend\",\n  \"LineOpacity\",\n  \"LineSpacing\",\n  \"LineWrapParts\",\n  \"LinkActivate\",\n  \"LinkClose\",\n  \"LinkConnect\",\n  \"LinkConnectedQ\",\n  \"LinkCreate\",\n  \"LinkError\",\n  \"LinkFlush\",\n  \"LinkFunction\",\n  \"LinkHost\",\n  \"LinkInterrupt\",\n  \"LinkLaunch\",\n  \"LinkMode\",\n  \"LinkObject\",\n  \"LinkOpen\",\n  \"LinkOptions\",\n  \"LinkPatterns\",\n  \"LinkProtocol\",\n  \"LinkRankCentrality\",\n  \"LinkRead\",\n  \"LinkReadHeld\",\n  \"LinkReadyQ\",\n  \"Links\",\n  \"LinkService\",\n  \"LinkWrite\",\n  \"LinkWriteHeld\",\n  \"LiouvilleLambda\",\n  \"List\",\n  \"Listable\",\n  \"ListAnimate\",\n  \"ListContourPlot\",\n  \"ListContourPlot3D\",\n  \"ListConvolve\",\n  \"ListCorrelate\",\n  \"ListCurvePathPlot\",\n  \"ListDeconvolve\",\n  \"ListDensityPlot\",\n  \"ListDensityPlot3D\",\n  \"Listen\",\n  \"ListFormat\",\n  \"ListFourierSequenceTransform\",\n  \"ListInterpolation\",\n  \"ListLineIntegralConvolutionPlot\",\n  \"ListLinePlot\",\n  \"ListLinePlot3D\",\n  \"ListLogLinearPlot\",\n  \"ListLogLogPlot\",\n  \"ListLogPlot\",\n  \"ListPicker\",\n  \"ListPickerBox\",\n  \"ListPickerBoxBackground\",\n  \"ListPickerBoxOptions\",\n  \"ListPlay\",\n  \"ListPlot\",\n  \"ListPlot3D\",\n  \"ListPointPlot3D\",\n  \"ListPolarPlot\",\n  \"ListQ\",\n  \"ListSliceContourPlot3D\",\n  \"ListSliceDensityPlot3D\",\n  \"ListSliceVectorPlot3D\",\n  \"ListStepPlot\",\n  \"ListStreamDensityPlot\",\n  \"ListStreamPlot\",\n  \"ListStreamPlot3D\",\n  \"ListSurfacePlot3D\",\n  \"ListVectorDensityPlot\",\n  \"ListVectorDisplacementPlot\",\n  \"ListVectorDisplacementPlot3D\",\n  \"ListVectorPlot\",\n  \"ListVectorPlot3D\",\n  \"ListZTransform\",\n  \"Literal\",\n  \"LiteralSearch\",\n  \"LiteralType\",\n  \"LoadCompiledComponent\",\n  \"LocalAdaptiveBinarize\",\n  \"LocalCache\",\n  \"LocalClusteringCoefficient\",\n  \"LocalEvaluate\",\n  \"LocalizeDefinitions\",\n  \"LocalizeVariables\",\n  \"LocalObject\",\n  \"LocalObjects\",\n  \"LocalResponseNormalizationLayer\",\n  \"LocalSubmit\",\n  \"LocalSymbol\",\n  \"LocalTime\",\n  \"LocalTimeZone\",\n  \"LocationEquivalenceTest\",\n  \"LocationTest\",\n  \"Locator\",\n  \"LocatorAutoCreate\",\n  \"LocatorBox\",\n  \"LocatorBoxOptions\",\n  \"LocatorCentering\",\n  \"LocatorPane\",\n  \"LocatorPaneBox\",\n  \"LocatorPaneBoxOptions\",\n  \"LocatorRegion\",\n  \"Locked\",\n  \"Log\",\n  \"Log10\",\n  \"Log2\",\n  \"LogBarnesG\",\n  \"LogGamma\",\n  \"LogGammaDistribution\",\n  \"LogicalExpand\",\n  \"LogIntegral\",\n  \"LogisticDistribution\",\n  \"LogisticSigmoid\",\n  \"LogitModelFit\",\n  \"LogLikelihood\",\n  \"LogLinearPlot\",\n  \"LogLogisticDistribution\",\n  \"LogLogPlot\",\n  \"LogMultinormalDistribution\",\n  \"LogNormalDistribution\",\n  \"LogPlot\",\n  \"LogRankTest\",\n  \"LogSeriesDistribution\",\n  \"LongEqual\",\n  \"Longest\",\n  \"LongestCommonSequence\",\n  \"LongestCommonSequencePositions\",\n  \"LongestCommonSubsequence\",\n  \"LongestCommonSubsequencePositions\",\n  \"LongestMatch\",\n  \"LongestOrderedSequence\",\n  \"LongForm\",\n  \"Longitude\",\n  \"LongLeftArrow\",\n  \"LongLeftRightArrow\",\n  \"LongRightArrow\",\n  \"LongShortTermMemoryLayer\",\n  \"Lookup\",\n  \"Loopback\",\n  \"LoopFreeGraphQ\",\n  \"Looping\",\n  \"LossFunction\",\n  \"LowerCaseQ\",\n  \"LowerLeftArrow\",\n  \"LowerRightArrow\",\n  \"LowerTriangularize\",\n  \"LowerTriangularMatrix\",\n  \"LowerTriangularMatrixQ\",\n  \"LowpassFilter\",\n  \"LQEstimatorGains\",\n  \"LQGRegulator\",\n  \"LQOutputRegulatorGains\",\n  \"LQRegulatorGains\",\n  \"LUBackSubstitution\",\n  \"LucasL\",\n  \"LuccioSamiComponents\",\n  \"LUDecomposition\",\n  \"LunarEclipse\",\n  \"LUVColor\",\n  \"LyapunovSolve\",\n  \"LyonsGroupLy\",\n  \"MachineID\",\n  \"MachineName\",\n  \"MachineNumberQ\",\n  \"MachinePrecision\",\n  \"MacintoshSystemPageSetup\",\n  \"Magenta\",\n  \"Magnification\",\n  \"Magnify\",\n  \"MailAddressValidation\",\n  \"MailExecute\",\n  \"MailFolder\",\n  \"MailItem\",\n  \"MailReceiverFunction\",\n  \"MailResponseFunction\",\n  \"MailSearch\",\n  \"MailServerConnect\",\n  \"MailServerConnection\",\n  \"MailSettings\",\n  \"MainSolve\",\n  \"MaintainDynamicCaches\",\n  \"Majority\",\n  \"MakeBoxes\",\n  \"MakeExpression\",\n  \"MakeRules\",\n  \"ManagedLibraryExpressionID\",\n  \"ManagedLibraryExpressionQ\",\n  \"MandelbrotSetBoettcher\",\n  \"MandelbrotSetDistance\",\n  \"MandelbrotSetIterationCount\",\n  \"MandelbrotSetMemberQ\",\n  \"MandelbrotSetPlot\",\n  \"MangoldtLambda\",\n  \"ManhattanDistance\",\n  \"Manipulate\",\n  \"Manipulator\",\n  \"MannedSpaceMissionData\",\n  \"MannWhitneyTest\",\n  \"MantissaExponent\",\n  \"Manual\",\n  \"Map\",\n  \"MapAll\",\n  \"MapApply\",\n  \"MapAt\",\n  \"MapIndexed\",\n  \"MAProcess\",\n  \"MapThread\",\n  \"MarchenkoPasturDistribution\",\n  \"MarcumQ\",\n  \"MardiaCombinedTest\",\n  \"MardiaKurtosisTest\",\n  \"MardiaSkewnessTest\",\n  \"MarginalDistribution\",\n  \"MarkovProcessProperties\",\n  \"Masking\",\n  \"MassConcentrationCondition\",\n  \"MassFluxValue\",\n  \"MassImpermeableBoundaryValue\",\n  \"MassOutflowValue\",\n  \"MassSymmetryValue\",\n  \"MassTransferValue\",\n  \"MassTransportPDEComponent\",\n  \"MatchingDissimilarity\",\n  \"MatchLocalNameQ\",\n  \"MatchLocalNames\",\n  \"MatchQ\",\n  \"Material\",\n  \"MaterialShading\",\n  \"MaternPointProcess\",\n  \"MathematicalFunctionData\",\n  \"MathematicaNotation\",\n  \"MathieuC\",\n  \"MathieuCharacteristicA\",\n  \"MathieuCharacteristicB\",\n  \"MathieuCharacteristicExponent\",\n  \"MathieuCPrime\",\n  \"MathieuGroupM11\",\n  \"MathieuGroupM12\",\n  \"MathieuGroupM22\",\n  \"MathieuGroupM23\",\n  \"MathieuGroupM24\",\n  \"MathieuS\",\n  \"MathieuSPrime\",\n  \"MathMLForm\",\n  \"MathMLText\",\n  \"Matrices\",\n  \"MatrixExp\",\n  \"MatrixForm\",\n  \"MatrixFunction\",\n  \"MatrixLog\",\n  \"MatrixNormalDistribution\",\n  \"MatrixPlot\",\n  \"MatrixPower\",\n  \"MatrixPropertyDistribution\",\n  \"MatrixQ\",\n  \"MatrixRank\",\n  \"MatrixTDistribution\",\n  \"Max\",\n  \"MaxBend\",\n  \"MaxCellMeasure\",\n  \"MaxColorDistance\",\n  \"MaxDate\",\n  \"MaxDetect\",\n  \"MaxDisplayedChildren\",\n  \"MaxDuration\",\n  \"MaxExtraBandwidths\",\n  \"MaxExtraConditions\",\n  \"MaxFeatureDisplacement\",\n  \"MaxFeatures\",\n  \"MaxFilter\",\n  \"MaximalBy\",\n  \"Maximize\",\n  \"MaxItems\",\n  \"MaxIterations\",\n  \"MaxLimit\",\n  \"MaxMemoryUsed\",\n  \"MaxMixtureKernels\",\n  \"MaxOverlapFraction\",\n  \"MaxPlotPoints\",\n  \"MaxPoints\",\n  \"MaxRecursion\",\n  \"MaxStableDistribution\",\n  \"MaxStepFraction\",\n  \"MaxSteps\",\n  \"MaxStepSize\",\n  \"MaxTrainingRounds\",\n  \"MaxValue\",\n  \"MaxwellDistribution\",\n  \"MaxWordGap\",\n  \"McLaughlinGroupMcL\",\n  \"Mean\",\n  \"MeanAbsoluteLossLayer\",\n  \"MeanAround\",\n  \"MeanClusteringCoefficient\",\n  \"MeanDegreeConnectivity\",\n  \"MeanDeviation\",\n  \"MeanFilter\",\n  \"MeanGraphDistance\",\n  \"MeanNeighborDegree\",\n  \"MeanPointDensity\",\n  \"MeanShift\",\n  \"MeanShiftFilter\",\n  \"MeanSquaredLossLayer\",\n  \"Median\",\n  \"MedianDeviation\",\n  \"MedianFilter\",\n  \"MedicalTestData\",\n  \"Medium\",\n  \"MeijerG\",\n  \"MeijerGReduce\",\n  \"MeixnerDistribution\",\n  \"MellinConvolve\",\n  \"MellinTransform\",\n  \"MemberQ\",\n  \"MemoryAvailable\",\n  \"MemoryConstrained\",\n  \"MemoryConstraint\",\n  \"MemoryInUse\",\n  \"MengerMesh\",\n  \"Menu\",\n  \"MenuAppearance\",\n  \"MenuCommandKey\",\n  \"MenuEvaluator\",\n  \"MenuItem\",\n  \"MenuList\",\n  \"MenuPacket\",\n  \"MenuSortingValue\",\n  \"MenuStyle\",\n  \"MenuView\",\n  \"Merge\",\n  \"MergeDifferences\",\n  \"MergingFunction\",\n  \"MersennePrimeExponent\",\n  \"MersennePrimeExponentQ\",\n  \"Mesh\",\n  \"MeshCellCentroid\",\n  \"MeshCellCount\",\n  \"MeshCellHighlight\",\n  \"MeshCellIndex\",\n  \"MeshCellLabel\",\n  \"MeshCellMarker\",\n  \"MeshCellMeasure\",\n  \"MeshCellQuality\",\n  \"MeshCells\",\n  \"MeshCellShapeFunction\",\n  \"MeshCellStyle\",\n  \"MeshConnectivityGraph\",\n  \"MeshCoordinates\",\n  \"MeshFunctions\",\n  \"MeshPrimitives\",\n  \"MeshQualityGoal\",\n  \"MeshRange\",\n  \"MeshRefinementFunction\",\n  \"MeshRegion\",\n  \"MeshRegionQ\",\n  \"MeshShading\",\n  \"MeshStyle\",\n  \"Message\",\n  \"MessageDialog\",\n  \"MessageList\",\n  \"MessageName\",\n  \"MessageObject\",\n  \"MessageOptions\",\n  \"MessagePacket\",\n  \"Messages\",\n  \"MessagesNotebook\",\n  \"MetaCharacters\",\n  \"MetaInformation\",\n  \"MeteorShowerData\",\n  \"Method\",\n  \"MethodOptions\",\n  \"MexicanHatWavelet\",\n  \"MeyerWavelet\",\n  \"Midpoint\",\n  \"MIMETypeToFormatList\",\n  \"Min\",\n  \"MinColorDistance\",\n  \"MinDate\",\n  \"MinDetect\",\n  \"MineralData\",\n  \"MinFilter\",\n  \"MinimalBy\",\n  \"MinimalPolynomial\",\n  \"MinimalStateSpaceModel\",\n  \"Minimize\",\n  \"MinimumTimeIncrement\",\n  \"MinIntervalSize\",\n  \"MinkowskiQuestionMark\",\n  \"MinLimit\",\n  \"MinMax\",\n  \"MinorPlanetData\",\n  \"Minors\",\n  \"MinPointSeparation\",\n  \"MinRecursion\",\n  \"MinSize\",\n  \"MinStableDistribution\",\n  \"Minus\",\n  \"MinusPlus\",\n  \"MinValue\",\n  \"Missing\",\n  \"MissingBehavior\",\n  \"MissingDataMethod\",\n  \"MissingDataRules\",\n  \"MissingQ\",\n  \"MissingString\",\n  \"MissingStyle\",\n  \"MissingValuePattern\",\n  \"MissingValueSynthesis\",\n  \"MittagLefflerE\",\n  \"MixedFractionParts\",\n  \"MixedGraphQ\",\n  \"MixedMagnitude\",\n  \"MixedRadix\",\n  \"MixedRadixQuantity\",\n  \"MixedUnit\",\n  \"MixtureDistribution\",\n  \"Mod\",\n  \"Modal\",\n  \"Mode\",\n  \"ModelPredictiveController\",\n  \"Modular\",\n  \"ModularInverse\",\n  \"ModularLambda\",\n  \"Module\",\n  \"Modulus\",\n  \"MoebiusMu\",\n  \"Molecule\",\n  \"MoleculeAlign\",\n  \"MoleculeContainsQ\",\n  \"MoleculeDraw\",\n  \"MoleculeEquivalentQ\",\n  \"MoleculeFreeQ\",\n  \"MoleculeGraph\",\n  \"MoleculeMatchQ\",\n  \"MoleculeMaximumCommonSubstructure\",\n  \"MoleculeModify\",\n  \"MoleculeName\",\n  \"MoleculePattern\",\n  \"MoleculePlot\",\n  \"MoleculePlot3D\",\n  \"MoleculeProperty\",\n  \"MoleculeQ\",\n  \"MoleculeRecognize\",\n  \"MoleculeSubstructureCount\",\n  \"MoleculeValue\",\n  \"Moment\",\n  \"MomentConvert\",\n  \"MomentEvaluate\",\n  \"MomentGeneratingFunction\",\n  \"MomentOfInertia\",\n  \"Monday\",\n  \"Monitor\",\n  \"MonomialList\",\n  \"MonomialOrder\",\n  \"MonsterGroupM\",\n  \"MoonPhase\",\n  \"MoonPosition\",\n  \"MorletWavelet\",\n  \"MorphologicalBinarize\",\n  \"MorphologicalBranchPoints\",\n  \"MorphologicalComponents\",\n  \"MorphologicalEulerNumber\",\n  \"MorphologicalGraph\",\n  \"MorphologicalPerimeter\",\n  \"MorphologicalTransform\",\n  \"MortalityData\",\n  \"Most\",\n  \"MountainData\",\n  \"MouseAnnotation\",\n  \"MouseAppearance\",\n  \"MouseAppearanceTag\",\n  \"MouseButtons\",\n  \"Mouseover\",\n  \"MousePointerNote\",\n  \"MousePosition\",\n  \"MovieData\",\n  \"MovingAverage\",\n  \"MovingMap\",\n  \"MovingMedian\",\n  \"MoyalDistribution\",\n  \"MultiaxisArrangement\",\n  \"Multicolumn\",\n  \"MultiedgeStyle\",\n  \"MultigraphQ\",\n  \"MultilaunchWarning\",\n  \"MultiLetterItalics\",\n  \"MultiLetterStyle\",\n  \"MultilineFunction\",\n  \"Multinomial\",\n  \"MultinomialDistribution\",\n  \"MultinormalDistribution\",\n  \"MultiplicativeOrder\",\n  \"Multiplicity\",\n  \"MultiplySides\",\n  \"MultiscriptBoxOptions\",\n  \"Multiselection\",\n  \"MultivariateHypergeometricDistribution\",\n  \"MultivariatePoissonDistribution\",\n  \"MultivariateTDistribution\",\n  \"N\",\n  \"NakagamiDistribution\",\n  \"NameQ\",\n  \"Names\",\n  \"NamespaceBox\",\n  \"NamespaceBoxOptions\",\n  \"Nand\",\n  \"NArgMax\",\n  \"NArgMin\",\n  \"NBernoulliB\",\n  \"NBodySimulation\",\n  \"NBodySimulationData\",\n  \"NCache\",\n  \"NCaputoD\",\n  \"NDEigensystem\",\n  \"NDEigenvalues\",\n  \"NDSolve\",\n  \"NDSolveValue\",\n  \"Nearest\",\n  \"NearestFunction\",\n  \"NearestMeshCells\",\n  \"NearestNeighborG\",\n  \"NearestNeighborGraph\",\n  \"NearestTo\",\n  \"NebulaData\",\n  \"NeedlemanWunschSimilarity\",\n  \"Needs\",\n  \"Negative\",\n  \"NegativeBinomialDistribution\",\n  \"NegativeDefiniteMatrixQ\",\n  \"NegativeIntegers\",\n  \"NegativelyOrientedPoints\",\n  \"NegativeMultinomialDistribution\",\n  \"NegativeRationals\",\n  \"NegativeReals\",\n  \"NegativeSemidefiniteMatrixQ\",\n  \"NeighborhoodData\",\n  \"NeighborhoodGraph\",\n  \"Nest\",\n  \"NestedGreaterGreater\",\n  \"NestedLessLess\",\n  \"NestedScriptRules\",\n  \"NestGraph\",\n  \"NestList\",\n  \"NestTree\",\n  \"NestWhile\",\n  \"NestWhileList\",\n  \"NetAppend\",\n  \"NetArray\",\n  \"NetArrayLayer\",\n  \"NetBidirectionalOperator\",\n  \"NetChain\",\n  \"NetDecoder\",\n  \"NetDelete\",\n  \"NetDrop\",\n  \"NetEncoder\",\n  \"NetEvaluationMode\",\n  \"NetExternalObject\",\n  \"NetExtract\",\n  \"NetFlatten\",\n  \"NetFoldOperator\",\n  \"NetGANOperator\",\n  \"NetGraph\",\n  \"NetInformation\",\n  \"NetInitialize\",\n  \"NetInsert\",\n  \"NetInsertSharedArrays\",\n  \"NetJoin\",\n  \"NetMapOperator\",\n  \"NetMapThreadOperator\",\n  \"NetMeasurements\",\n  \"NetModel\",\n  \"NetNestOperator\",\n  \"NetPairEmbeddingOperator\",\n  \"NetPort\",\n  \"NetPortGradient\",\n  \"NetPrepend\",\n  \"NetRename\",\n  \"NetReplace\",\n  \"NetReplacePart\",\n  \"NetSharedArray\",\n  \"NetStateObject\",\n  \"NetTake\",\n  \"NetTrain\",\n  \"NetTrainResultsObject\",\n  \"NetUnfold\",\n  \"NetworkPacketCapture\",\n  \"NetworkPacketRecording\",\n  \"NetworkPacketRecordingDuring\",\n  \"NetworkPacketTrace\",\n  \"NeumannValue\",\n  \"NevilleThetaC\",\n  \"NevilleThetaD\",\n  \"NevilleThetaN\",\n  \"NevilleThetaS\",\n  \"NewPrimitiveStyle\",\n  \"NExpectation\",\n  \"Next\",\n  \"NextCell\",\n  \"NextDate\",\n  \"NextPrime\",\n  \"NextScheduledTaskTime\",\n  \"NeymanScottPointProcess\",\n  \"NFractionalD\",\n  \"NHoldAll\",\n  \"NHoldFirst\",\n  \"NHoldRest\",\n  \"NicholsGridLines\",\n  \"NicholsPlot\",\n  \"NightHemisphere\",\n  \"NIntegrate\",\n  \"NMaximize\",\n  \"NMaxValue\",\n  \"NMinimize\",\n  \"NMinValue\",\n  \"NominalScale\",\n  \"NominalVariables\",\n  \"NonAssociative\",\n  \"NoncentralBetaDistribution\",\n  \"NoncentralChiSquareDistribution\",\n  \"NoncentralFRatioDistribution\",\n  \"NoncentralStudentTDistribution\",\n  \"NonCommutativeMultiply\",\n  \"NonConstants\",\n  \"NondimensionalizationTransform\",\n  \"None\",\n  \"NoneTrue\",\n  \"NonlinearModelFit\",\n  \"NonlinearStateSpaceModel\",\n  \"NonlocalMeansFilter\",\n  \"NonNegative\",\n  \"NonNegativeIntegers\",\n  \"NonNegativeRationals\",\n  \"NonNegativeReals\",\n  \"NonPositive\",\n  \"NonPositiveIntegers\",\n  \"NonPositiveRationals\",\n  \"NonPositiveReals\",\n  \"Nor\",\n  \"NorlundB\",\n  \"Norm\",\n  \"Normal\",\n  \"NormalDistribution\",\n  \"NormalGrouping\",\n  \"NormalizationLayer\",\n  \"Normalize\",\n  \"Normalized\",\n  \"NormalizedSquaredEuclideanDistance\",\n  \"NormalMatrixQ\",\n  \"NormalsFunction\",\n  \"NormFunction\",\n  \"Not\",\n  \"NotCongruent\",\n  \"NotCupCap\",\n  \"NotDoubleVerticalBar\",\n  \"Notebook\",\n  \"NotebookApply\",\n  \"NotebookAutoSave\",\n  \"NotebookBrowseDirectory\",\n  \"NotebookClose\",\n  \"NotebookConvertSettings\",\n  \"NotebookCreate\",\n  \"NotebookDefault\",\n  \"NotebookDelete\",\n  \"NotebookDirectory\",\n  \"NotebookDynamicExpression\",\n  \"NotebookEvaluate\",\n  \"NotebookEventActions\",\n  \"NotebookFileName\",\n  \"NotebookFind\",\n  \"NotebookGet\",\n  \"NotebookImport\",\n  \"NotebookInformation\",\n  \"NotebookInterfaceObject\",\n  \"NotebookLocate\",\n  \"NotebookObject\",\n  \"NotebookOpen\",\n  \"NotebookPath\",\n  \"NotebookPrint\",\n  \"NotebookPut\",\n  \"NotebookRead\",\n  \"Notebooks\",\n  \"NotebookSave\",\n  \"NotebookSelection\",\n  \"NotebooksMenu\",\n  \"NotebookTemplate\",\n  \"NotebookWrite\",\n  \"NotElement\",\n  \"NotEqualTilde\",\n  \"NotExists\",\n  \"NotGreater\",\n  \"NotGreaterEqual\",\n  \"NotGreaterFullEqual\",\n  \"NotGreaterGreater\",\n  \"NotGreaterLess\",\n  \"NotGreaterSlantEqual\",\n  \"NotGreaterTilde\",\n  \"Nothing\",\n  \"NotHumpDownHump\",\n  \"NotHumpEqual\",\n  \"NotificationFunction\",\n  \"NotLeftTriangle\",\n  \"NotLeftTriangleBar\",\n  \"NotLeftTriangleEqual\",\n  \"NotLess\",\n  \"NotLessEqual\",\n  \"NotLessFullEqual\",\n  \"NotLessGreater\",\n  \"NotLessLess\",\n  \"NotLessSlantEqual\",\n  \"NotLessTilde\",\n  \"NotNestedGreaterGreater\",\n  \"NotNestedLessLess\",\n  \"NotPrecedes\",\n  \"NotPrecedesEqual\",\n  \"NotPrecedesSlantEqual\",\n  \"NotPrecedesTilde\",\n  \"NotReverseElement\",\n  \"NotRightTriangle\",\n  \"NotRightTriangleBar\",\n  \"NotRightTriangleEqual\",\n  \"NotSquareSubset\",\n  \"NotSquareSubsetEqual\",\n  \"NotSquareSuperset\",\n  \"NotSquareSupersetEqual\",\n  \"NotSubset\",\n  \"NotSubsetEqual\",\n  \"NotSucceeds\",\n  \"NotSucceedsEqual\",\n  \"NotSucceedsSlantEqual\",\n  \"NotSucceedsTilde\",\n  \"NotSuperset\",\n  \"NotSupersetEqual\",\n  \"NotTilde\",\n  \"NotTildeEqual\",\n  \"NotTildeFullEqual\",\n  \"NotTildeTilde\",\n  \"NotVerticalBar\",\n  \"Now\",\n  \"NoWhitespace\",\n  \"NProbability\",\n  \"NProduct\",\n  \"NProductFactors\",\n  \"NRoots\",\n  \"NSolve\",\n  \"NSolveValues\",\n  \"NSum\",\n  \"NSumTerms\",\n  \"NuclearExplosionData\",\n  \"NuclearReactorData\",\n  \"Null\",\n  \"NullRecords\",\n  \"NullSpace\",\n  \"NullWords\",\n  \"Number\",\n  \"NumberCompose\",\n  \"NumberDecompose\",\n  \"NumberDigit\",\n  \"NumberExpand\",\n  \"NumberFieldClassNumber\",\n  \"NumberFieldDiscriminant\",\n  \"NumberFieldFundamentalUnits\",\n  \"NumberFieldIntegralBasis\",\n  \"NumberFieldNormRepresentatives\",\n  \"NumberFieldRegulator\",\n  \"NumberFieldRootsOfUnity\",\n  \"NumberFieldSignature\",\n  \"NumberForm\",\n  \"NumberFormat\",\n  \"NumberLinePlot\",\n  \"NumberMarks\",\n  \"NumberMultiplier\",\n  \"NumberPadding\",\n  \"NumberPoint\",\n  \"NumberQ\",\n  \"NumberSeparator\",\n  \"NumberSigns\",\n  \"NumberString\",\n  \"Numerator\",\n  \"NumeratorDenominator\",\n  \"NumericalOrder\",\n  \"NumericalSort\",\n  \"NumericArray\",\n  \"NumericArrayQ\",\n  \"NumericArrayType\",\n  \"NumericFunction\",\n  \"NumericQ\",\n  \"NuttallWindow\",\n  \"NValues\",\n  \"NyquistGridLines\",\n  \"NyquistPlot\",\n  \"O\",\n  \"ObjectExistsQ\",\n  \"ObservabilityGramian\",\n  \"ObservabilityMatrix\",\n  \"ObservableDecomposition\",\n  \"ObservableModelQ\",\n  \"OceanData\",\n  \"Octahedron\",\n  \"OddQ\",\n  \"Off\",\n  \"Offset\",\n  \"OLEData\",\n  \"On\",\n  \"ONanGroupON\",\n  \"Once\",\n  \"OneIdentity\",\n  \"Opacity\",\n  \"OpacityFunction\",\n  \"OpacityFunctionScaling\",\n  \"Open\",\n  \"OpenAppend\",\n  \"Opener\",\n  \"OpenerBox\",\n  \"OpenerBoxOptions\",\n  \"OpenerView\",\n  \"OpenFunctionInspectorPacket\",\n  \"Opening\",\n  \"OpenRead\",\n  \"OpenSpecialOptions\",\n  \"OpenTemporary\",\n  \"OpenWrite\",\n  \"Operate\",\n  \"OperatingSystem\",\n  \"OperatorApplied\",\n  \"OptimumFlowData\",\n  \"Optional\",\n  \"OptionalElement\",\n  \"OptionInspectorSettings\",\n  \"OptionQ\",\n  \"Options\",\n  \"OptionsPacket\",\n  \"OptionsPattern\",\n  \"OptionValue\",\n  \"OptionValueBox\",\n  \"OptionValueBoxOptions\",\n  \"Or\",\n  \"Orange\",\n  \"Order\",\n  \"OrderDistribution\",\n  \"OrderedQ\",\n  \"Ordering\",\n  \"OrderingBy\",\n  \"OrderingLayer\",\n  \"Orderless\",\n  \"OrderlessPatternSequence\",\n  \"OrdinalScale\",\n  \"OrnsteinUhlenbeckProcess\",\n  \"Orthogonalize\",\n  \"OrthogonalMatrixQ\",\n  \"Out\",\n  \"Outer\",\n  \"OuterPolygon\",\n  \"OuterPolyhedron\",\n  \"OutputAutoOverwrite\",\n  \"OutputControllabilityMatrix\",\n  \"OutputControllableModelQ\",\n  \"OutputForm\",\n  \"OutputFormData\",\n  \"OutputGrouping\",\n  \"OutputMathEditExpression\",\n  \"OutputNamePacket\",\n  \"OutputPorts\",\n  \"OutputResponse\",\n  \"OutputSizeLimit\",\n  \"OutputStream\",\n  \"Over\",\n  \"OverBar\",\n  \"OverDot\",\n  \"Overflow\",\n  \"OverHat\",\n  \"Overlaps\",\n  \"Overlay\",\n  \"OverlayBox\",\n  \"OverlayBoxOptions\",\n  \"OverlayVideo\",\n  \"Overscript\",\n  \"OverscriptBox\",\n  \"OverscriptBoxOptions\",\n  \"OverTilde\",\n  \"OverVector\",\n  \"OverwriteTarget\",\n  \"OwenT\",\n  \"OwnValues\",\n  \"Package\",\n  \"PackingMethod\",\n  \"PackPaclet\",\n  \"PacletDataRebuild\",\n  \"PacletDirectoryAdd\",\n  \"PacletDirectoryLoad\",\n  \"PacletDirectoryRemove\",\n  \"PacletDirectoryUnload\",\n  \"PacletDisable\",\n  \"PacletEnable\",\n  \"PacletFind\",\n  \"PacletFindRemote\",\n  \"PacletInformation\",\n  \"PacletInstall\",\n  \"PacletInstallSubmit\",\n  \"PacletNewerQ\",\n  \"PacletObject\",\n  \"PacletObjectQ\",\n  \"PacletSite\",\n  \"PacletSiteObject\",\n  \"PacletSiteRegister\",\n  \"PacletSites\",\n  \"PacletSiteUnregister\",\n  \"PacletSiteUpdate\",\n  \"PacletSymbol\",\n  \"PacletUninstall\",\n  \"PacletUpdate\",\n  \"PaddedForm\",\n  \"Padding\",\n  \"PaddingLayer\",\n  \"PaddingSize\",\n  \"PadeApproximant\",\n  \"PadLeft\",\n  \"PadRight\",\n  \"PageBreakAbove\",\n  \"PageBreakBelow\",\n  \"PageBreakWithin\",\n  \"PageFooterLines\",\n  \"PageFooters\",\n  \"PageHeaderLines\",\n  \"PageHeaders\",\n  \"PageHeight\",\n  \"PageRankCentrality\",\n  \"PageTheme\",\n  \"PageWidth\",\n  \"Pagination\",\n  \"PairCorrelationG\",\n  \"PairedBarChart\",\n  \"PairedHistogram\",\n  \"PairedSmoothHistogram\",\n  \"PairedTTest\",\n  \"PairedZTest\",\n  \"PaletteNotebook\",\n  \"PalettePath\",\n  \"PalettesMenuSettings\",\n  \"PalindromeQ\",\n  \"Pane\",\n  \"PaneBox\",\n  \"PaneBoxOptions\",\n  \"Panel\",\n  \"PanelBox\",\n  \"PanelBoxOptions\",\n  \"Paneled\",\n  \"PaneSelector\",\n  \"PaneSelectorBox\",\n  \"PaneSelectorBoxOptions\",\n  \"PaperWidth\",\n  \"ParabolicCylinderD\",\n  \"ParagraphIndent\",\n  \"ParagraphSpacing\",\n  \"ParallelArray\",\n  \"ParallelAxisPlot\",\n  \"ParallelCombine\",\n  \"ParallelDo\",\n  \"Parallelepiped\",\n  \"ParallelEvaluate\",\n  \"Parallelization\",\n  \"Parallelize\",\n  \"ParallelKernels\",\n  \"ParallelMap\",\n  \"ParallelNeeds\",\n  \"Parallelogram\",\n  \"ParallelProduct\",\n  \"ParallelSubmit\",\n  \"ParallelSum\",\n  \"ParallelTable\",\n  \"ParallelTry\",\n  \"Parameter\",\n  \"ParameterEstimator\",\n  \"ParameterMixtureDistribution\",\n  \"ParameterVariables\",\n  \"ParametricConvexOptimization\",\n  \"ParametricFunction\",\n  \"ParametricNDSolve\",\n  \"ParametricNDSolveValue\",\n  \"ParametricPlot\",\n  \"ParametricPlot3D\",\n  \"ParametricRampLayer\",\n  \"ParametricRegion\",\n  \"ParentBox\",\n  \"ParentCell\",\n  \"ParentConnect\",\n  \"ParentDirectory\",\n  \"ParentEdgeLabel\",\n  \"ParentEdgeLabelFunction\",\n  \"ParentEdgeLabelStyle\",\n  \"ParentEdgeShapeFunction\",\n  \"ParentEdgeStyle\",\n  \"ParentEdgeStyleFunction\",\n  \"ParentForm\",\n  \"Parenthesize\",\n  \"ParentList\",\n  \"ParentNotebook\",\n  \"ParetoDistribution\",\n  \"ParetoPickandsDistribution\",\n  \"ParkData\",\n  \"Part\",\n  \"PartBehavior\",\n  \"PartialCorrelationFunction\",\n  \"PartialD\",\n  \"ParticleAcceleratorData\",\n  \"ParticleData\",\n  \"Partition\",\n  \"PartitionGranularity\",\n  \"PartitionsP\",\n  \"PartitionsQ\",\n  \"PartLayer\",\n  \"PartOfSpeech\",\n  \"PartProtection\",\n  \"ParzenWindow\",\n  \"PascalDistribution\",\n  \"PassEventsDown\",\n  \"PassEventsUp\",\n  \"Paste\",\n  \"PasteAutoQuoteCharacters\",\n  \"PasteBoxFormInlineCells\",\n  \"PasteButton\",\n  \"Path\",\n  \"PathGraph\",\n  \"PathGraphQ\",\n  \"Pattern\",\n  \"PatternFilling\",\n  \"PatternReaction\",\n  \"PatternSequence\",\n  \"PatternTest\",\n  \"PauliMatrix\",\n  \"PaulWavelet\",\n  \"Pause\",\n  \"PausedTime\",\n  \"PDF\",\n  \"PeakDetect\",\n  \"PeanoCurve\",\n  \"PearsonChiSquareTest\",\n  \"PearsonCorrelationTest\",\n  \"PearsonDistribution\",\n  \"PenttinenPointProcess\",\n  \"PercentForm\",\n  \"PerfectNumber\",\n  \"PerfectNumberQ\",\n  \"PerformanceGoal\",\n  \"Perimeter\",\n  \"PeriodicBoundaryCondition\",\n  \"PeriodicInterpolation\",\n  \"Periodogram\",\n  \"PeriodogramArray\",\n  \"Permanent\",\n  \"Permissions\",\n  \"PermissionsGroup\",\n  \"PermissionsGroupMemberQ\",\n  \"PermissionsGroups\",\n  \"PermissionsKey\",\n  \"PermissionsKeys\",\n  \"PermutationCycles\",\n  \"PermutationCyclesQ\",\n  \"PermutationGroup\",\n  \"PermutationLength\",\n  \"PermutationList\",\n  \"PermutationListQ\",\n  \"PermutationMatrix\",\n  \"PermutationMax\",\n  \"PermutationMin\",\n  \"PermutationOrder\",\n  \"PermutationPower\",\n  \"PermutationProduct\",\n  \"PermutationReplace\",\n  \"Permutations\",\n  \"PermutationSupport\",\n  \"Permute\",\n  \"PeronaMalikFilter\",\n  \"Perpendicular\",\n  \"PerpendicularBisector\",\n  \"PersistenceLocation\",\n  \"PersistenceTime\",\n  \"PersistentObject\",\n  \"PersistentObjects\",\n  \"PersistentSymbol\",\n  \"PersistentValue\",\n  \"PersonData\",\n  \"PERTDistribution\",\n  \"PetersenGraph\",\n  \"PhaseMargins\",\n  \"PhaseRange\",\n  \"PhongShading\",\n  \"PhysicalSystemData\",\n  \"Pi\",\n  \"Pick\",\n  \"PickedElements\",\n  \"PickMode\",\n  \"PIDData\",\n  \"PIDDerivativeFilter\",\n  \"PIDFeedforward\",\n  \"PIDTune\",\n  \"Piecewise\",\n  \"PiecewiseExpand\",\n  \"PieChart\",\n  \"PieChart3D\",\n  \"PillaiTrace\",\n  \"PillaiTraceTest\",\n  \"PingTime\",\n  \"Pink\",\n  \"PitchRecognize\",\n  \"Pivoting\",\n  \"PixelConstrained\",\n  \"PixelValue\",\n  \"PixelValuePositions\",\n  \"Placed\",\n  \"Placeholder\",\n  \"PlaceholderLayer\",\n  \"PlaceholderReplace\",\n  \"Plain\",\n  \"PlanarAngle\",\n  \"PlanarFaceList\",\n  \"PlanarGraph\",\n  \"PlanarGraphQ\",\n  \"PlanckRadiationLaw\",\n  \"PlaneCurveData\",\n  \"PlanetaryMoonData\",\n  \"PlanetData\",\n  \"PlantData\",\n  \"Play\",\n  \"PlaybackSettings\",\n  \"PlayRange\",\n  \"Plot\",\n  \"Plot3D\",\n  \"Plot3Matrix\",\n  \"PlotDivision\",\n  \"PlotJoined\",\n  \"PlotLabel\",\n  \"PlotLabels\",\n  \"PlotLayout\",\n  \"PlotLegends\",\n  \"PlotMarkers\",\n  \"PlotPoints\",\n  \"PlotRange\",\n  \"PlotRangeClipping\",\n  \"PlotRangeClipPlanesStyle\",\n  \"PlotRangePadding\",\n  \"PlotRegion\",\n  \"PlotStyle\",\n  \"PlotTheme\",\n  \"Pluralize\",\n  \"Plus\",\n  \"PlusMinus\",\n  \"Pochhammer\",\n  \"PodStates\",\n  \"PodWidth\",\n  \"Point\",\n  \"Point3DBox\",\n  \"Point3DBoxOptions\",\n  \"PointBox\",\n  \"PointBoxOptions\",\n  \"PointCountDistribution\",\n  \"PointDensity\",\n  \"PointDensityFunction\",\n  \"PointFigureChart\",\n  \"PointLegend\",\n  \"PointLight\",\n  \"PointProcessEstimator\",\n  \"PointProcessFitTest\",\n  \"PointProcessParameterAssumptions\",\n  \"PointProcessParameterQ\",\n  \"PointSize\",\n  \"PointStatisticFunction\",\n  \"PointValuePlot\",\n  \"PoissonConsulDistribution\",\n  \"PoissonDistribution\",\n  \"PoissonPDEComponent\",\n  \"PoissonPointProcess\",\n  \"PoissonProcess\",\n  \"PoissonWindow\",\n  \"PolarAxes\",\n  \"PolarAxesOrigin\",\n  \"PolarGridLines\",\n  \"PolarPlot\",\n  \"PolarTicks\",\n  \"PoleZeroMarkers\",\n  \"PolyaAeppliDistribution\",\n  \"PolyGamma\",\n  \"Polygon\",\n  \"Polygon3DBox\",\n  \"Polygon3DBoxOptions\",\n  \"PolygonalNumber\",\n  \"PolygonAngle\",\n  \"PolygonBox\",\n  \"PolygonBoxOptions\",\n  \"PolygonCoordinates\",\n  \"PolygonDecomposition\",\n  \"PolygonHoleScale\",\n  \"PolygonIntersections\",\n  \"PolygonScale\",\n  \"Polyhedron\",\n  \"PolyhedronAngle\",\n  \"PolyhedronBox\",\n  \"PolyhedronBoxOptions\",\n  \"PolyhedronCoordinates\",\n  \"PolyhedronData\",\n  \"PolyhedronDecomposition\",\n  \"PolyhedronGenus\",\n  \"PolyLog\",\n  \"PolynomialExpressionQ\",\n  \"PolynomialExtendedGCD\",\n  \"PolynomialForm\",\n  \"PolynomialGCD\",\n  \"PolynomialLCM\",\n  \"PolynomialMod\",\n  \"PolynomialQ\",\n  \"PolynomialQuotient\",\n  \"PolynomialQuotientRemainder\",\n  \"PolynomialReduce\",\n  \"PolynomialRemainder\",\n  \"Polynomials\",\n  \"PolynomialSumOfSquaresList\",\n  \"PoolingLayer\",\n  \"PopupMenu\",\n  \"PopupMenuBox\",\n  \"PopupMenuBoxOptions\",\n  \"PopupView\",\n  \"PopupWindow\",\n  \"Position\",\n  \"PositionIndex\",\n  \"PositionLargest\",\n  \"PositionSmallest\",\n  \"Positive\",\n  \"PositiveDefiniteMatrixQ\",\n  \"PositiveIntegers\",\n  \"PositivelyOrientedPoints\",\n  \"PositiveRationals\",\n  \"PositiveReals\",\n  \"PositiveSemidefiniteMatrixQ\",\n  \"PossibleZeroQ\",\n  \"Postfix\",\n  \"PostScript\",\n  \"Power\",\n  \"PowerDistribution\",\n  \"PowerExpand\",\n  \"PowerMod\",\n  \"PowerModList\",\n  \"PowerRange\",\n  \"PowerSpectralDensity\",\n  \"PowersRepresentations\",\n  \"PowerSymmetricPolynomial\",\n  \"Precedence\",\n  \"PrecedenceForm\",\n  \"Precedes\",\n  \"PrecedesEqual\",\n  \"PrecedesSlantEqual\",\n  \"PrecedesTilde\",\n  \"Precision\",\n  \"PrecisionGoal\",\n  \"PreDecrement\",\n  \"Predict\",\n  \"PredictionRoot\",\n  \"PredictorFunction\",\n  \"PredictorInformation\",\n  \"PredictorMeasurements\",\n  \"PredictorMeasurementsObject\",\n  \"PreemptProtect\",\n  \"PreferencesPath\",\n  \"PreferencesSettings\",\n  \"Prefix\",\n  \"PreIncrement\",\n  \"Prepend\",\n  \"PrependLayer\",\n  \"PrependTo\",\n  \"PreprocessingRules\",\n  \"PreserveColor\",\n  \"PreserveImageOptions\",\n  \"Previous\",\n  \"PreviousCell\",\n  \"PreviousDate\",\n  \"PriceGraphDistribution\",\n  \"PrimaryPlaceholder\",\n  \"Prime\",\n  \"PrimeNu\",\n  \"PrimeOmega\",\n  \"PrimePi\",\n  \"PrimePowerQ\",\n  \"PrimeQ\",\n  \"Primes\",\n  \"PrimeZetaP\",\n  \"PrimitivePolynomialQ\",\n  \"PrimitiveRoot\",\n  \"PrimitiveRootList\",\n  \"PrincipalComponents\",\n  \"PrincipalValue\",\n  \"Print\",\n  \"PrintableASCIIQ\",\n  \"PrintAction\",\n  \"PrintForm\",\n  \"PrintingCopies\",\n  \"PrintingOptions\",\n  \"PrintingPageRange\",\n  \"PrintingStartingPageNumber\",\n  \"PrintingStyleEnvironment\",\n  \"Printout3D\",\n  \"Printout3DPreviewer\",\n  \"PrintPrecision\",\n  \"PrintTemporary\",\n  \"Prism\",\n  \"PrismBox\",\n  \"PrismBoxOptions\",\n  \"PrivateCellOptions\",\n  \"PrivateEvaluationOptions\",\n  \"PrivateFontOptions\",\n  \"PrivateFrontEndOptions\",\n  \"PrivateKey\",\n  \"PrivateNotebookOptions\",\n  \"PrivatePaths\",\n  \"Probability\",\n  \"ProbabilityDistribution\",\n  \"ProbabilityPlot\",\n  \"ProbabilityPr\",\n  \"ProbabilityScalePlot\",\n  \"ProbitModelFit\",\n  \"ProcessConnection\",\n  \"ProcessDirectory\",\n  \"ProcessEnvironment\",\n  \"Processes\",\n  \"ProcessEstimator\",\n  \"ProcessInformation\",\n  \"ProcessObject\",\n  \"ProcessParameterAssumptions\",\n  \"ProcessParameterQ\",\n  \"ProcessStateDomain\",\n  \"ProcessStatus\",\n  \"ProcessTimeDomain\",\n  \"Product\",\n  \"ProductDistribution\",\n  \"ProductLog\",\n  \"ProgressIndicator\",\n  \"ProgressIndicatorBox\",\n  \"ProgressIndicatorBoxOptions\",\n  \"ProgressReporting\",\n  \"Projection\",\n  \"Prolog\",\n  \"PromptForm\",\n  \"ProofObject\",\n  \"PropagateAborts\",\n  \"Properties\",\n  \"Property\",\n  \"PropertyList\",\n  \"PropertyValue\",\n  \"Proportion\",\n  \"Proportional\",\n  \"Protect\",\n  \"Protected\",\n  \"ProteinData\",\n  \"Pruning\",\n  \"PseudoInverse\",\n  \"PsychrometricPropertyData\",\n  \"PublicKey\",\n  \"PublisherID\",\n  \"PulsarData\",\n  \"PunctuationCharacter\",\n  \"Purple\",\n  \"Put\",\n  \"PutAppend\",\n  \"Pyramid\",\n  \"PyramidBox\",\n  \"PyramidBoxOptions\",\n  \"QBinomial\",\n  \"QFactorial\",\n  \"QGamma\",\n  \"QHypergeometricPFQ\",\n  \"QnDispersion\",\n  \"QPochhammer\",\n  \"QPolyGamma\",\n  \"QRDecomposition\",\n  \"QuadraticIrrationalQ\",\n  \"QuadraticOptimization\",\n  \"Quantile\",\n  \"QuantilePlot\",\n  \"Quantity\",\n  \"QuantityArray\",\n  \"QuantityDistribution\",\n  \"QuantityForm\",\n  \"QuantityMagnitude\",\n  \"QuantityQ\",\n  \"QuantityUnit\",\n  \"QuantityVariable\",\n  \"QuantityVariableCanonicalUnit\",\n  \"QuantityVariableDimensions\",\n  \"QuantityVariableIdentifier\",\n  \"QuantityVariablePhysicalQuantity\",\n  \"Quartics\",\n  \"QuartileDeviation\",\n  \"Quartiles\",\n  \"QuartileSkewness\",\n  \"Query\",\n  \"QuestionGenerator\",\n  \"QuestionInterface\",\n  \"QuestionObject\",\n  \"QuestionSelector\",\n  \"QueueingNetworkProcess\",\n  \"QueueingProcess\",\n  \"QueueProperties\",\n  \"Quiet\",\n  \"QuietEcho\",\n  \"Quit\",\n  \"Quotient\",\n  \"QuotientRemainder\",\n  \"RadialAxisPlot\",\n  \"RadialGradientFilling\",\n  \"RadialGradientImage\",\n  \"RadialityCentrality\",\n  \"RadicalBox\",\n  \"RadicalBoxOptions\",\n  \"RadioButton\",\n  \"RadioButtonBar\",\n  \"RadioButtonBox\",\n  \"RadioButtonBoxOptions\",\n  \"Radon\",\n  \"RadonTransform\",\n  \"RamanujanTau\",\n  \"RamanujanTauL\",\n  \"RamanujanTauTheta\",\n  \"RamanujanTauZ\",\n  \"Ramp\",\n  \"Random\",\n  \"RandomArrayLayer\",\n  \"RandomChoice\",\n  \"RandomColor\",\n  \"RandomComplex\",\n  \"RandomDate\",\n  \"RandomEntity\",\n  \"RandomFunction\",\n  \"RandomGeneratorState\",\n  \"RandomGeoPosition\",\n  \"RandomGraph\",\n  \"RandomImage\",\n  \"RandomInstance\",\n  \"RandomInteger\",\n  \"RandomPermutation\",\n  \"RandomPoint\",\n  \"RandomPointConfiguration\",\n  \"RandomPolygon\",\n  \"RandomPolyhedron\",\n  \"RandomPrime\",\n  \"RandomReal\",\n  \"RandomSample\",\n  \"RandomSeed\",\n  \"RandomSeeding\",\n  \"RandomTime\",\n  \"RandomTree\",\n  \"RandomVariate\",\n  \"RandomWalkProcess\",\n  \"RandomWord\",\n  \"Range\",\n  \"RangeFilter\",\n  \"RangeSpecification\",\n  \"RankedMax\",\n  \"RankedMin\",\n  \"RarerProbability\",\n  \"Raster\",\n  \"Raster3D\",\n  \"Raster3DBox\",\n  \"Raster3DBoxOptions\",\n  \"RasterArray\",\n  \"RasterBox\",\n  \"RasterBoxOptions\",\n  \"Rasterize\",\n  \"RasterSize\",\n  \"Rational\",\n  \"RationalExpressionQ\",\n  \"RationalFunctions\",\n  \"Rationalize\",\n  \"Rationals\",\n  \"Ratios\",\n  \"RawArray\",\n  \"RawBoxes\",\n  \"RawData\",\n  \"RawMedium\",\n  \"RayleighDistribution\",\n  \"Re\",\n  \"ReactionBalance\",\n  \"ReactionBalancedQ\",\n  \"ReactionPDETerm\",\n  \"Read\",\n  \"ReadByteArray\",\n  \"ReadLine\",\n  \"ReadList\",\n  \"ReadProtected\",\n  \"ReadString\",\n  \"Real\",\n  \"RealAbs\",\n  \"RealBlockDiagonalForm\",\n  \"RealDigits\",\n  \"RealExponent\",\n  \"Reals\",\n  \"RealSign\",\n  \"Reap\",\n  \"RebuildPacletData\",\n  \"RecalibrationFunction\",\n  \"RecognitionPrior\",\n  \"RecognitionThreshold\",\n  \"ReconstructionMesh\",\n  \"Record\",\n  \"RecordLists\",\n  \"RecordSeparators\",\n  \"Rectangle\",\n  \"RectangleBox\",\n  \"RectangleBoxOptions\",\n  \"RectangleChart\",\n  \"RectangleChart3D\",\n  \"RectangularRepeatingElement\",\n  \"RecurrenceFilter\",\n  \"RecurrenceTable\",\n  \"RecurringDigitsForm\",\n  \"Red\",\n  \"Reduce\",\n  \"RefBox\",\n  \"ReferenceLineStyle\",\n  \"ReferenceMarkers\",\n  \"ReferenceMarkerStyle\",\n  \"Refine\",\n  \"ReflectionMatrix\",\n  \"ReflectionTransform\",\n  \"Refresh\",\n  \"RefreshRate\",\n  \"Region\",\n  \"RegionBinarize\",\n  \"RegionBoundary\",\n  \"RegionBoundaryStyle\",\n  \"RegionBounds\",\n  \"RegionCentroid\",\n  \"RegionCongruent\",\n  \"RegionConvert\",\n  \"RegionDifference\",\n  \"RegionDilation\",\n  \"RegionDimension\",\n  \"RegionDisjoint\",\n  \"RegionDistance\",\n  \"RegionDistanceFunction\",\n  \"RegionEmbeddingDimension\",\n  \"RegionEqual\",\n  \"RegionErosion\",\n  \"RegionFillingStyle\",\n  \"RegionFit\",\n  \"RegionFunction\",\n  \"RegionImage\",\n  \"RegionIntersection\",\n  \"RegionMeasure\",\n  \"RegionMember\",\n  \"RegionMemberFunction\",\n  \"RegionMoment\",\n  \"RegionNearest\",\n  \"RegionNearestFunction\",\n  \"RegionPlot\",\n  \"RegionPlot3D\",\n  \"RegionProduct\",\n  \"RegionQ\",\n  \"RegionResize\",\n  \"RegionSimilar\",\n  \"RegionSize\",\n  \"RegionSymmetricDifference\",\n  \"RegionUnion\",\n  \"RegionWithin\",\n  \"RegisterExternalEvaluator\",\n  \"RegularExpression\",\n  \"Regularization\",\n  \"RegularlySampledQ\",\n  \"RegularPolygon\",\n  \"ReIm\",\n  \"ReImLabels\",\n  \"ReImPlot\",\n  \"ReImStyle\",\n  \"Reinstall\",\n  \"RelationalDatabase\",\n  \"RelationGraph\",\n  \"Release\",\n  \"ReleaseHold\",\n  \"ReliabilityDistribution\",\n  \"ReliefImage\",\n  \"ReliefPlot\",\n  \"RemoteAuthorizationCaching\",\n  \"RemoteBatchJobAbort\",\n  \"RemoteBatchJobObject\",\n  \"RemoteBatchJobs\",\n  \"RemoteBatchMapSubmit\",\n  \"RemoteBatchSubmissionEnvironment\",\n  \"RemoteBatchSubmit\",\n  \"RemoteConnect\",\n  \"RemoteConnectionObject\",\n  \"RemoteEvaluate\",\n  \"RemoteFile\",\n  \"RemoteInputFiles\",\n  \"RemoteKernelObject\",\n  \"RemoteProviderSettings\",\n  \"RemoteRun\",\n  \"RemoteRunProcess\",\n  \"RemovalConditions\",\n  \"Remove\",\n  \"RemoveAlphaChannel\",\n  \"RemoveAsynchronousTask\",\n  \"RemoveAudioStream\",\n  \"RemoveBackground\",\n  \"RemoveChannelListener\",\n  \"RemoveChannelSubscribers\",\n  \"Removed\",\n  \"RemoveDiacritics\",\n  \"RemoveInputStreamMethod\",\n  \"RemoveOutputStreamMethod\",\n  \"RemoveProperty\",\n  \"RemoveScheduledTask\",\n  \"RemoveUsers\",\n  \"RemoveVideoStream\",\n  \"RenameDirectory\",\n  \"RenameFile\",\n  \"RenderAll\",\n  \"RenderingOptions\",\n  \"RenewalProcess\",\n  \"RenkoChart\",\n  \"RepairMesh\",\n  \"Repeated\",\n  \"RepeatedNull\",\n  \"RepeatedString\",\n  \"RepeatedTiming\",\n  \"RepeatingElement\",\n  \"Replace\",\n  \"ReplaceAll\",\n  \"ReplaceAt\",\n  \"ReplaceHeldPart\",\n  \"ReplaceImageValue\",\n  \"ReplaceList\",\n  \"ReplacePart\",\n  \"ReplacePixelValue\",\n  \"ReplaceRepeated\",\n  \"ReplicateLayer\",\n  \"RequiredPhysicalQuantities\",\n  \"Resampling\",\n  \"ResamplingAlgorithmData\",\n  \"ResamplingMethod\",\n  \"Rescale\",\n  \"RescalingTransform\",\n  \"ResetDirectory\",\n  \"ResetScheduledTask\",\n  \"ReshapeLayer\",\n  \"Residue\",\n  \"ResidueSum\",\n  \"ResizeLayer\",\n  \"Resolve\",\n  \"ResolveContextAliases\",\n  \"ResourceAcquire\",\n  \"ResourceData\",\n  \"ResourceFunction\",\n  \"ResourceObject\",\n  \"ResourceRegister\",\n  \"ResourceRemove\",\n  \"ResourceSearch\",\n  \"ResourceSubmissionObject\",\n  \"ResourceSubmit\",\n  \"ResourceSystemBase\",\n  \"ResourceSystemPath\",\n  \"ResourceUpdate\",\n  \"ResourceVersion\",\n  \"ResponseForm\",\n  \"Rest\",\n  \"RestartInterval\",\n  \"Restricted\",\n  \"Resultant\",\n  \"ResumePacket\",\n  \"Return\",\n  \"ReturnCreatesNewCell\",\n  \"ReturnEntersInput\",\n  \"ReturnExpressionPacket\",\n  \"ReturnInputFormPacket\",\n  \"ReturnPacket\",\n  \"ReturnReceiptFunction\",\n  \"ReturnTextPacket\",\n  \"Reverse\",\n  \"ReverseApplied\",\n  \"ReverseBiorthogonalSplineWavelet\",\n  \"ReverseElement\",\n  \"ReverseEquilibrium\",\n  \"ReverseGraph\",\n  \"ReverseSort\",\n  \"ReverseSortBy\",\n  \"ReverseUpEquilibrium\",\n  \"RevolutionAxis\",\n  \"RevolutionPlot3D\",\n  \"RGBColor\",\n  \"RiccatiSolve\",\n  \"RiceDistribution\",\n  \"RidgeFilter\",\n  \"RiemannR\",\n  \"RiemannSiegelTheta\",\n  \"RiemannSiegelZ\",\n  \"RiemannXi\",\n  \"Riffle\",\n  \"Right\",\n  \"RightArrow\",\n  \"RightArrowBar\",\n  \"RightArrowLeftArrow\",\n  \"RightComposition\",\n  \"RightCosetRepresentative\",\n  \"RightDownTeeVector\",\n  \"RightDownVector\",\n  \"RightDownVectorBar\",\n  \"RightTee\",\n  \"RightTeeArrow\",\n  \"RightTeeVector\",\n  \"RightTriangle\",\n  \"RightTriangleBar\",\n  \"RightTriangleEqual\",\n  \"RightUpDownVector\",\n  \"RightUpTeeVector\",\n  \"RightUpVector\",\n  \"RightUpVectorBar\",\n  \"RightVector\",\n  \"RightVectorBar\",\n  \"RipleyK\",\n  \"RipleyRassonRegion\",\n  \"RiskAchievementImportance\",\n  \"RiskReductionImportance\",\n  \"RobustConvexOptimization\",\n  \"RogersTanimotoDissimilarity\",\n  \"RollPitchYawAngles\",\n  \"RollPitchYawMatrix\",\n  \"RomanNumeral\",\n  \"Root\",\n  \"RootApproximant\",\n  \"RootIntervals\",\n  \"RootLocusPlot\",\n  \"RootMeanSquare\",\n  \"RootOfUnityQ\",\n  \"RootReduce\",\n  \"Roots\",\n  \"RootSum\",\n  \"RootTree\",\n  \"Rotate\",\n  \"RotateLabel\",\n  \"RotateLeft\",\n  \"RotateRight\",\n  \"RotationAction\",\n  \"RotationBox\",\n  \"RotationBoxOptions\",\n  \"RotationMatrix\",\n  \"RotationTransform\",\n  \"Round\",\n  \"RoundImplies\",\n  \"RoundingRadius\",\n  \"Row\",\n  \"RowAlignments\",\n  \"RowBackgrounds\",\n  \"RowBox\",\n  \"RowHeights\",\n  \"RowLines\",\n  \"RowMinHeight\",\n  \"RowReduce\",\n  \"RowsEqual\",\n  \"RowSpacings\",\n  \"RSolve\",\n  \"RSolveValue\",\n  \"RudinShapiro\",\n  \"RudvalisGroupRu\",\n  \"Rule\",\n  \"RuleCondition\",\n  \"RuleDelayed\",\n  \"RuleForm\",\n  \"RulePlot\",\n  \"RulerUnits\",\n  \"RulesTree\",\n  \"Run\",\n  \"RunProcess\",\n  \"RunScheduledTask\",\n  \"RunThrough\",\n  \"RuntimeAttributes\",\n  \"RuntimeOptions\",\n  \"RussellRaoDissimilarity\",\n  \"SameAs\",\n  \"SameQ\",\n  \"SameTest\",\n  \"SameTestProperties\",\n  \"SampledEntityClass\",\n  \"SampleDepth\",\n  \"SampledSoundFunction\",\n  \"SampledSoundList\",\n  \"SampleRate\",\n  \"SamplingPeriod\",\n  \"SARIMAProcess\",\n  \"SARMAProcess\",\n  \"SASTriangle\",\n  \"SatelliteData\",\n  \"SatisfiabilityCount\",\n  \"SatisfiabilityInstances\",\n  \"SatisfiableQ\",\n  \"Saturday\",\n  \"Save\",\n  \"Saveable\",\n  \"SaveAutoDelete\",\n  \"SaveConnection\",\n  \"SaveDefinitions\",\n  \"SavitzkyGolayMatrix\",\n  \"SawtoothWave\",\n  \"Scale\",\n  \"Scaled\",\n  \"ScaleDivisions\",\n  \"ScaledMousePosition\",\n  \"ScaleOrigin\",\n  \"ScalePadding\",\n  \"ScaleRanges\",\n  \"ScaleRangeStyle\",\n  \"ScalingFunctions\",\n  \"ScalingMatrix\",\n  \"ScalingTransform\",\n  \"Scan\",\n  \"ScheduledTask\",\n  \"ScheduledTaskActiveQ\",\n  \"ScheduledTaskInformation\",\n  \"ScheduledTaskInformationData\",\n  \"ScheduledTaskObject\",\n  \"ScheduledTasks\",\n  \"SchurDecomposition\",\n  \"ScientificForm\",\n  \"ScientificNotationThreshold\",\n  \"ScorerGi\",\n  \"ScorerGiPrime\",\n  \"ScorerHi\",\n  \"ScorerHiPrime\",\n  \"ScreenRectangle\",\n  \"ScreenStyleEnvironment\",\n  \"ScriptBaselineShifts\",\n  \"ScriptForm\",\n  \"ScriptLevel\",\n  \"ScriptMinSize\",\n  \"ScriptRules\",\n  \"ScriptSizeMultipliers\",\n  \"Scrollbars\",\n  \"ScrollingOptions\",\n  \"ScrollPosition\",\n  \"SearchAdjustment\",\n  \"SearchIndexObject\",\n  \"SearchIndices\",\n  \"SearchQueryString\",\n  \"SearchResultObject\",\n  \"Sec\",\n  \"Sech\",\n  \"SechDistribution\",\n  \"SecondOrderConeOptimization\",\n  \"SectionGrouping\",\n  \"SectorChart\",\n  \"SectorChart3D\",\n  \"SectorOrigin\",\n  \"SectorSpacing\",\n  \"SecuredAuthenticationKey\",\n  \"SecuredAuthenticationKeys\",\n  \"SecurityCertificate\",\n  \"SeedRandom\",\n  \"Select\",\n  \"Selectable\",\n  \"SelectComponents\",\n  \"SelectedCells\",\n  \"SelectedNotebook\",\n  \"SelectFirst\",\n  \"Selection\",\n  \"SelectionAnimate\",\n  \"SelectionCell\",\n  \"SelectionCellCreateCell\",\n  \"SelectionCellDefaultStyle\",\n  \"SelectionCellParentStyle\",\n  \"SelectionCreateCell\",\n  \"SelectionDebuggerTag\",\n  \"SelectionEvaluate\",\n  \"SelectionEvaluateCreateCell\",\n  \"SelectionMove\",\n  \"SelectionPlaceholder\",\n  \"SelectWithContents\",\n  \"SelfLoops\",\n  \"SelfLoopStyle\",\n  \"SemanticImport\",\n  \"SemanticImportString\",\n  \"SemanticInterpretation\",\n  \"SemialgebraicComponentInstances\",\n  \"SemidefiniteOptimization\",\n  \"SendMail\",\n  \"SendMessage\",\n  \"Sequence\",\n  \"SequenceAlignment\",\n  \"SequenceAttentionLayer\",\n  \"SequenceCases\",\n  \"SequenceCount\",\n  \"SequenceFold\",\n  \"SequenceFoldList\",\n  \"SequenceForm\",\n  \"SequenceHold\",\n  \"SequenceIndicesLayer\",\n  \"SequenceLastLayer\",\n  \"SequenceMostLayer\",\n  \"SequencePosition\",\n  \"SequencePredict\",\n  \"SequencePredictorFunction\",\n  \"SequenceReplace\",\n  \"SequenceRestLayer\",\n  \"SequenceReverseLayer\",\n  \"SequenceSplit\",\n  \"Series\",\n  \"SeriesCoefficient\",\n  \"SeriesData\",\n  \"SeriesTermGoal\",\n  \"ServiceConnect\",\n  \"ServiceDisconnect\",\n  \"ServiceExecute\",\n  \"ServiceObject\",\n  \"ServiceRequest\",\n  \"ServiceResponse\",\n  \"ServiceSubmit\",\n  \"SessionSubmit\",\n  \"SessionTime\",\n  \"Set\",\n  \"SetAccuracy\",\n  \"SetAlphaChannel\",\n  \"SetAttributes\",\n  \"Setbacks\",\n  \"SetCloudDirectory\",\n  \"SetCookies\",\n  \"SetDelayed\",\n  \"SetDirectory\",\n  \"SetEnvironment\",\n  \"SetFileDate\",\n  \"SetFileFormatProperties\",\n  \"SetOptions\",\n  \"SetOptionsPacket\",\n  \"SetPermissions\",\n  \"SetPrecision\",\n  \"SetProperty\",\n  \"SetSecuredAuthenticationKey\",\n  \"SetSelectedNotebook\",\n  \"SetSharedFunction\",\n  \"SetSharedVariable\",\n  \"SetStreamPosition\",\n  \"SetSystemModel\",\n  \"SetSystemOptions\",\n  \"Setter\",\n  \"SetterBar\",\n  \"SetterBox\",\n  \"SetterBoxOptions\",\n  \"Setting\",\n  \"SetUsers\",\n  \"Shading\",\n  \"Shallow\",\n  \"ShannonWavelet\",\n  \"ShapiroWilkTest\",\n  \"Share\",\n  \"SharingList\",\n  \"Sharpen\",\n  \"ShearingMatrix\",\n  \"ShearingTransform\",\n  \"ShellRegion\",\n  \"ShenCastanMatrix\",\n  \"ShiftedGompertzDistribution\",\n  \"ShiftRegisterSequence\",\n  \"Short\",\n  \"ShortDownArrow\",\n  \"Shortest\",\n  \"ShortestMatch\",\n  \"ShortestPathFunction\",\n  \"ShortLeftArrow\",\n  \"ShortRightArrow\",\n  \"ShortTimeFourier\",\n  \"ShortTimeFourierData\",\n  \"ShortUpArrow\",\n  \"Show\",\n  \"ShowAutoConvert\",\n  \"ShowAutoSpellCheck\",\n  \"ShowAutoStyles\",\n  \"ShowCellBracket\",\n  \"ShowCellLabel\",\n  \"ShowCellTags\",\n  \"ShowClosedCellArea\",\n  \"ShowCodeAssist\",\n  \"ShowContents\",\n  \"ShowControls\",\n  \"ShowCursorTracker\",\n  \"ShowGroupOpenCloseIcon\",\n  \"ShowGroupOpener\",\n  \"ShowInvisibleCharacters\",\n  \"ShowPageBreaks\",\n  \"ShowPredictiveInterface\",\n  \"ShowSelection\",\n  \"ShowShortBoxForm\",\n  \"ShowSpecialCharacters\",\n  \"ShowStringCharacters\",\n  \"ShowSyntaxStyles\",\n  \"ShrinkingDelay\",\n  \"ShrinkWrapBoundingBox\",\n  \"SiderealTime\",\n  \"SiegelTheta\",\n  \"SiegelTukeyTest\",\n  \"SierpinskiCurve\",\n  \"SierpinskiMesh\",\n  \"Sign\",\n  \"Signature\",\n  \"SignedRankTest\",\n  \"SignedRegionDistance\",\n  \"SignificanceLevel\",\n  \"SignPadding\",\n  \"SignTest\",\n  \"SimilarityRules\",\n  \"SimpleGraph\",\n  \"SimpleGraphQ\",\n  \"SimplePolygonQ\",\n  \"SimplePolyhedronQ\",\n  \"Simplex\",\n  \"Simplify\",\n  \"Sin\",\n  \"Sinc\",\n  \"SinghMaddalaDistribution\",\n  \"SingleEvaluation\",\n  \"SingleLetterItalics\",\n  \"SingleLetterStyle\",\n  \"SingularValueDecomposition\",\n  \"SingularValueList\",\n  \"SingularValuePlot\",\n  \"SingularValues\",\n  \"Sinh\",\n  \"SinhIntegral\",\n  \"SinIntegral\",\n  \"SixJSymbol\",\n  \"Skeleton\",\n  \"SkeletonTransform\",\n  \"SkellamDistribution\",\n  \"Skewness\",\n  \"SkewNormalDistribution\",\n  \"SkinStyle\",\n  \"Skip\",\n  \"SliceContourPlot3D\",\n  \"SliceDensityPlot3D\",\n  \"SliceDistribution\",\n  \"SliceVectorPlot3D\",\n  \"Slider\",\n  \"Slider2D\",\n  \"Slider2DBox\",\n  \"Slider2DBoxOptions\",\n  \"SliderBox\",\n  \"SliderBoxOptions\",\n  \"SlideShowVideo\",\n  \"SlideView\",\n  \"Slot\",\n  \"SlotSequence\",\n  \"Small\",\n  \"SmallCircle\",\n  \"Smaller\",\n  \"SmithDecomposition\",\n  \"SmithDelayCompensator\",\n  \"SmithWatermanSimilarity\",\n  \"SmoothDensityHistogram\",\n  \"SmoothHistogram\",\n  \"SmoothHistogram3D\",\n  \"SmoothKernelDistribution\",\n  \"SmoothPointDensity\",\n  \"SnDispersion\",\n  \"Snippet\",\n  \"SnippetsVideo\",\n  \"SnubPolyhedron\",\n  \"SocialMediaData\",\n  \"Socket\",\n  \"SocketConnect\",\n  \"SocketListen\",\n  \"SocketListener\",\n  \"SocketObject\",\n  \"SocketOpen\",\n  \"SocketReadMessage\",\n  \"SocketReadyQ\",\n  \"Sockets\",\n  \"SocketWaitAll\",\n  \"SocketWaitNext\",\n  \"SoftmaxLayer\",\n  \"SokalSneathDissimilarity\",\n  \"SolarEclipse\",\n  \"SolarSystemFeatureData\",\n  \"SolarTime\",\n  \"SolidAngle\",\n  \"SolidBoundaryLoadValue\",\n  \"SolidData\",\n  \"SolidDisplacementCondition\",\n  \"SolidFixedCondition\",\n  \"SolidMechanicsPDEComponent\",\n  \"SolidMechanicsStrain\",\n  \"SolidMechanicsStress\",\n  \"SolidRegionQ\",\n  \"Solve\",\n  \"SolveAlways\",\n  \"SolveDelayed\",\n  \"SolveValues\",\n  \"Sort\",\n  \"SortBy\",\n  \"SortedBy\",\n  \"SortedEntityClass\",\n  \"Sound\",\n  \"SoundAndGraphics\",\n  \"SoundNote\",\n  \"SoundVolume\",\n  \"SourceLink\",\n  \"SourcePDETerm\",\n  \"Sow\",\n  \"Space\",\n  \"SpaceCurveData\",\n  \"SpaceForm\",\n  \"Spacer\",\n  \"Spacings\",\n  \"Span\",\n  \"SpanAdjustments\",\n  \"SpanCharacterRounding\",\n  \"SpanFromAbove\",\n  \"SpanFromBoth\",\n  \"SpanFromLeft\",\n  \"SpanLineThickness\",\n  \"SpanMaxSize\",\n  \"SpanMinSize\",\n  \"SpanningCharacters\",\n  \"SpanSymmetric\",\n  \"SparseArray\",\n  \"SparseArrayQ\",\n  \"SpatialBinnedPointData\",\n  \"SpatialBoundaryCorrection\",\n  \"SpatialEstimate\",\n  \"SpatialEstimatorFunction\",\n  \"SpatialGraphDistribution\",\n  \"SpatialJ\",\n  \"SpatialMedian\",\n  \"SpatialNoiseLevel\",\n  \"SpatialObservationRegionQ\",\n  \"SpatialPointData\",\n  \"SpatialPointSelect\",\n  \"SpatialRandomnessTest\",\n  \"SpatialTransformationLayer\",\n  \"SpatialTrendFunction\",\n  \"Speak\",\n  \"SpeakerMatchQ\",\n  \"SpearmanRankTest\",\n  \"SpearmanRho\",\n  \"SpeciesData\",\n  \"SpecificityGoal\",\n  \"SpectralLineData\",\n  \"Spectrogram\",\n  \"SpectrogramArray\",\n  \"Specularity\",\n  \"SpeechCases\",\n  \"SpeechInterpreter\",\n  \"SpeechRecognize\",\n  \"SpeechSynthesize\",\n  \"SpellingCorrection\",\n  \"SpellingCorrectionList\",\n  \"SpellingDictionaries\",\n  \"SpellingDictionariesPath\",\n  \"SpellingOptions\",\n  \"Sphere\",\n  \"SphereBox\",\n  \"SphereBoxOptions\",\n  \"SpherePoints\",\n  \"SphericalBesselJ\",\n  \"SphericalBesselY\",\n  \"SphericalHankelH1\",\n  \"SphericalHankelH2\",\n  \"SphericalHarmonicY\",\n  \"SphericalPlot3D\",\n  \"SphericalRegion\",\n  \"SphericalShell\",\n  \"SpheroidalEigenvalue\",\n  \"SpheroidalJoiningFactor\",\n  \"SpheroidalPS\",\n  \"SpheroidalPSPrime\",\n  \"SpheroidalQS\",\n  \"SpheroidalQSPrime\",\n  \"SpheroidalRadialFactor\",\n  \"SpheroidalS1\",\n  \"SpheroidalS1Prime\",\n  \"SpheroidalS2\",\n  \"SpheroidalS2Prime\",\n  \"Splice\",\n  \"SplicedDistribution\",\n  \"SplineClosed\",\n  \"SplineDegree\",\n  \"SplineKnots\",\n  \"SplineWeights\",\n  \"Split\",\n  \"SplitBy\",\n  \"SpokenString\",\n  \"SpotLight\",\n  \"Sqrt\",\n  \"SqrtBox\",\n  \"SqrtBoxOptions\",\n  \"Square\",\n  \"SquaredEuclideanDistance\",\n  \"SquareFreeQ\",\n  \"SquareIntersection\",\n  \"SquareMatrixQ\",\n  \"SquareRepeatingElement\",\n  \"SquaresR\",\n  \"SquareSubset\",\n  \"SquareSubsetEqual\",\n  \"SquareSuperset\",\n  \"SquareSupersetEqual\",\n  \"SquareUnion\",\n  \"SquareWave\",\n  \"SSSTriangle\",\n  \"StabilityMargins\",\n  \"StabilityMarginsStyle\",\n  \"StableDistribution\",\n  \"Stack\",\n  \"StackBegin\",\n  \"StackComplete\",\n  \"StackedDateListPlot\",\n  \"StackedListPlot\",\n  \"StackInhibit\",\n  \"StadiumShape\",\n  \"StandardAtmosphereData\",\n  \"StandardDeviation\",\n  \"StandardDeviationFilter\",\n  \"StandardForm\",\n  \"Standardize\",\n  \"Standardized\",\n  \"StandardOceanData\",\n  \"StandbyDistribution\",\n  \"Star\",\n  \"StarClusterData\",\n  \"StarData\",\n  \"StarGraph\",\n  \"StartAsynchronousTask\",\n  \"StartExternalSession\",\n  \"StartingStepSize\",\n  \"StartOfLine\",\n  \"StartOfString\",\n  \"StartProcess\",\n  \"StartScheduledTask\",\n  \"StartupSound\",\n  \"StartWebSession\",\n  \"StateDimensions\",\n  \"StateFeedbackGains\",\n  \"StateOutputEstimator\",\n  \"StateResponse\",\n  \"StateSpaceModel\",\n  \"StateSpaceRealization\",\n  \"StateSpaceTransform\",\n  \"StateTransformationLinearize\",\n  \"StationaryDistribution\",\n  \"StationaryWaveletPacketTransform\",\n  \"StationaryWaveletTransform\",\n  \"StatusArea\",\n  \"StatusCentrality\",\n  \"StepMonitor\",\n  \"StereochemistryElements\",\n  \"StieltjesGamma\",\n  \"StippleShading\",\n  \"StirlingS1\",\n  \"StirlingS2\",\n  \"StopAsynchronousTask\",\n  \"StoppingPowerData\",\n  \"StopScheduledTask\",\n  \"StrataVariables\",\n  \"StratonovichProcess\",\n  \"StraussHardcorePointProcess\",\n  \"StraussPointProcess\",\n  \"StreamColorFunction\",\n  \"StreamColorFunctionScaling\",\n  \"StreamDensityPlot\",\n  \"StreamMarkers\",\n  \"StreamPlot\",\n  \"StreamPlot3D\",\n  \"StreamPoints\",\n  \"StreamPosition\",\n  \"Streams\",\n  \"StreamScale\",\n  \"StreamStyle\",\n  \"StrictInequalities\",\n  \"String\",\n  \"StringBreak\",\n  \"StringByteCount\",\n  \"StringCases\",\n  \"StringContainsQ\",\n  \"StringCount\",\n  \"StringDelete\",\n  \"StringDrop\",\n  \"StringEndsQ\",\n  \"StringExpression\",\n  \"StringExtract\",\n  \"StringForm\",\n  \"StringFormat\",\n  \"StringFormatQ\",\n  \"StringFreeQ\",\n  \"StringInsert\",\n  \"StringJoin\",\n  \"StringLength\",\n  \"StringMatchQ\",\n  \"StringPadLeft\",\n  \"StringPadRight\",\n  \"StringPart\",\n  \"StringPartition\",\n  \"StringPosition\",\n  \"StringQ\",\n  \"StringRepeat\",\n  \"StringReplace\",\n  \"StringReplaceList\",\n  \"StringReplacePart\",\n  \"StringReverse\",\n  \"StringRiffle\",\n  \"StringRotateLeft\",\n  \"StringRotateRight\",\n  \"StringSkeleton\",\n  \"StringSplit\",\n  \"StringStartsQ\",\n  \"StringTake\",\n  \"StringTakeDrop\",\n  \"StringTemplate\",\n  \"StringToByteArray\",\n  \"StringToStream\",\n  \"StringTrim\",\n  \"StripBoxes\",\n  \"StripOnInput\",\n  \"StripStyleOnPaste\",\n  \"StripWrapperBoxes\",\n  \"StrokeForm\",\n  \"Struckthrough\",\n  \"StructuralImportance\",\n  \"StructuredArray\",\n  \"StructuredArrayHeadQ\",\n  \"StructuredSelection\",\n  \"StruveH\",\n  \"StruveL\",\n  \"Stub\",\n  \"StudentTDistribution\",\n  \"Style\",\n  \"StyleBox\",\n  \"StyleBoxAutoDelete\",\n  \"StyleData\",\n  \"StyleDefinitions\",\n  \"StyleForm\",\n  \"StyleHints\",\n  \"StyleKeyMapping\",\n  \"StyleMenuListing\",\n  \"StyleNameDialogSettings\",\n  \"StyleNames\",\n  \"StylePrint\",\n  \"StyleSheetPath\",\n  \"Subdivide\",\n  \"Subfactorial\",\n  \"Subgraph\",\n  \"SubMinus\",\n  \"SubPlus\",\n  \"SubresultantPolynomialRemainders\",\n  \"SubresultantPolynomials\",\n  \"Subresultants\",\n  \"Subscript\",\n  \"SubscriptBox\",\n  \"SubscriptBoxOptions\",\n  \"Subscripted\",\n  \"Subsequences\",\n  \"Subset\",\n  \"SubsetCases\",\n  \"SubsetCount\",\n  \"SubsetEqual\",\n  \"SubsetMap\",\n  \"SubsetPosition\",\n  \"SubsetQ\",\n  \"SubsetReplace\",\n  \"Subsets\",\n  \"SubStar\",\n  \"SubstitutionSystem\",\n  \"Subsuperscript\",\n  \"SubsuperscriptBox\",\n  \"SubsuperscriptBoxOptions\",\n  \"SubtitleEncoding\",\n  \"SubtitleTrackSelection\",\n  \"Subtract\",\n  \"SubtractFrom\",\n  \"SubtractSides\",\n  \"SubValues\",\n  \"Succeeds\",\n  \"SucceedsEqual\",\n  \"SucceedsSlantEqual\",\n  \"SucceedsTilde\",\n  \"Success\",\n  \"SuchThat\",\n  \"Sum\",\n  \"SumConvergence\",\n  \"SummationLayer\",\n  \"Sunday\",\n  \"SunPosition\",\n  \"Sunrise\",\n  \"Sunset\",\n  \"SuperDagger\",\n  \"SuperMinus\",\n  \"SupernovaData\",\n  \"SuperPlus\",\n  \"Superscript\",\n  \"SuperscriptBox\",\n  \"SuperscriptBoxOptions\",\n  \"Superset\",\n  \"SupersetEqual\",\n  \"SuperStar\",\n  \"Surd\",\n  \"SurdForm\",\n  \"SurfaceAppearance\",\n  \"SurfaceArea\",\n  \"SurfaceColor\",\n  \"SurfaceData\",\n  \"SurfaceGraphics\",\n  \"SurvivalDistribution\",\n  \"SurvivalFunction\",\n  \"SurvivalModel\",\n  \"SurvivalModelFit\",\n  \"SuspendPacket\",\n  \"SuzukiDistribution\",\n  \"SuzukiGroupSuz\",\n  \"SwatchLegend\",\n  \"Switch\",\n  \"Symbol\",\n  \"SymbolName\",\n  \"SymletWavelet\",\n  \"Symmetric\",\n  \"SymmetricDifference\",\n  \"SymmetricGroup\",\n  \"SymmetricKey\",\n  \"SymmetricMatrixQ\",\n  \"SymmetricPolynomial\",\n  \"SymmetricReduction\",\n  \"Symmetrize\",\n  \"SymmetrizedArray\",\n  \"SymmetrizedArrayRules\",\n  \"SymmetrizedDependentComponents\",\n  \"SymmetrizedIndependentComponents\",\n  \"SymmetrizedReplacePart\",\n  \"SynchronousInitialization\",\n  \"SynchronousUpdating\",\n  \"Synonyms\",\n  \"Syntax\",\n  \"SyntaxForm\",\n  \"SyntaxInformation\",\n  \"SyntaxLength\",\n  \"SyntaxPacket\",\n  \"SyntaxQ\",\n  \"SynthesizeMissingValues\",\n  \"SystemCredential\",\n  \"SystemCredentialData\",\n  \"SystemCredentialKey\",\n  \"SystemCredentialKeys\",\n  \"SystemCredentialStoreObject\",\n  \"SystemDialogInput\",\n  \"SystemException\",\n  \"SystemGet\",\n  \"SystemHelpPath\",\n  \"SystemInformation\",\n  \"SystemInformationData\",\n  \"SystemInstall\",\n  \"SystemModel\",\n  \"SystemModeler\",\n  \"SystemModelExamples\",\n  \"SystemModelLinearize\",\n  \"SystemModelMeasurements\",\n  \"SystemModelParametricSimulate\",\n  \"SystemModelPlot\",\n  \"SystemModelProgressReporting\",\n  \"SystemModelReliability\",\n  \"SystemModels\",\n  \"SystemModelSimulate\",\n  \"SystemModelSimulateSensitivity\",\n  \"SystemModelSimulationData\",\n  \"SystemOpen\",\n  \"SystemOptions\",\n  \"SystemProcessData\",\n  \"SystemProcesses\",\n  \"SystemsConnectionsModel\",\n  \"SystemsModelControllerData\",\n  \"SystemsModelDelay\",\n  \"SystemsModelDelayApproximate\",\n  \"SystemsModelDelete\",\n  \"SystemsModelDimensions\",\n  \"SystemsModelExtract\",\n  \"SystemsModelFeedbackConnect\",\n  \"SystemsModelLabels\",\n  \"SystemsModelLinearity\",\n  \"SystemsModelMerge\",\n  \"SystemsModelOrder\",\n  \"SystemsModelParallelConnect\",\n  \"SystemsModelSeriesConnect\",\n  \"SystemsModelStateFeedbackConnect\",\n  \"SystemsModelVectorRelativeOrders\",\n  \"SystemStub\",\n  \"SystemTest\",\n  \"Tab\",\n  \"TabFilling\",\n  \"Table\",\n  \"TableAlignments\",\n  \"TableDepth\",\n  \"TableDirections\",\n  \"TableForm\",\n  \"TableHeadings\",\n  \"TableSpacing\",\n  \"TableView\",\n  \"TableViewBox\",\n  \"TableViewBoxAlignment\",\n  \"TableViewBoxBackground\",\n  \"TableViewBoxHeaders\",\n  \"TableViewBoxItemSize\",\n  \"TableViewBoxItemStyle\",\n  \"TableViewBoxOptions\",\n  \"TabSpacings\",\n  \"TabView\",\n  \"TabViewBox\",\n  \"TabViewBoxOptions\",\n  \"TagBox\",\n  \"TagBoxNote\",\n  \"TagBoxOptions\",\n  \"TaggingRules\",\n  \"TagSet\",\n  \"TagSetDelayed\",\n  \"TagStyle\",\n  \"TagUnset\",\n  \"Take\",\n  \"TakeDrop\",\n  \"TakeLargest\",\n  \"TakeLargestBy\",\n  \"TakeList\",\n  \"TakeSmallest\",\n  \"TakeSmallestBy\",\n  \"TakeWhile\",\n  \"Tally\",\n  \"Tan\",\n  \"Tanh\",\n  \"TargetDevice\",\n  \"TargetFunctions\",\n  \"TargetSystem\",\n  \"TargetUnits\",\n  \"TaskAbort\",\n  \"TaskExecute\",\n  \"TaskObject\",\n  \"TaskRemove\",\n  \"TaskResume\",\n  \"Tasks\",\n  \"TaskSuspend\",\n  \"TaskWait\",\n  \"TautologyQ\",\n  \"TelegraphProcess\",\n  \"TemplateApply\",\n  \"TemplateArgBox\",\n  \"TemplateBox\",\n  \"TemplateBoxOptions\",\n  \"TemplateEvaluate\",\n  \"TemplateExpression\",\n  \"TemplateIf\",\n  \"TemplateObject\",\n  \"TemplateSequence\",\n  \"TemplateSlot\",\n  \"TemplateSlotSequence\",\n  \"TemplateUnevaluated\",\n  \"TemplateVerbatim\",\n  \"TemplateWith\",\n  \"TemporalData\",\n  \"TemporalRegularity\",\n  \"Temporary\",\n  \"TemporaryVariable\",\n  \"TensorContract\",\n  \"TensorDimensions\",\n  \"TensorExpand\",\n  \"TensorProduct\",\n  \"TensorQ\",\n  \"TensorRank\",\n  \"TensorReduce\",\n  \"TensorSymmetry\",\n  \"TensorTranspose\",\n  \"TensorWedge\",\n  \"TerminatedEvaluation\",\n  \"TernaryListPlot\",\n  \"TernaryPlotCorners\",\n  \"TestID\",\n  \"TestReport\",\n  \"TestReportObject\",\n  \"TestResultObject\",\n  \"Tetrahedron\",\n  \"TetrahedronBox\",\n  \"TetrahedronBoxOptions\",\n  \"TeXForm\",\n  \"TeXSave\",\n  \"Text\",\n  \"Text3DBox\",\n  \"Text3DBoxOptions\",\n  \"TextAlignment\",\n  \"TextBand\",\n  \"TextBoundingBox\",\n  \"TextBox\",\n  \"TextCases\",\n  \"TextCell\",\n  \"TextClipboardType\",\n  \"TextContents\",\n  \"TextData\",\n  \"TextElement\",\n  \"TextForm\",\n  \"TextGrid\",\n  \"TextJustification\",\n  \"TextLine\",\n  \"TextPacket\",\n  \"TextParagraph\",\n  \"TextPosition\",\n  \"TextRecognize\",\n  \"TextSearch\",\n  \"TextSearchReport\",\n  \"TextSentences\",\n  \"TextString\",\n  \"TextStructure\",\n  \"TextStyle\",\n  \"TextTranslation\",\n  \"Texture\",\n  \"TextureCoordinateFunction\",\n  \"TextureCoordinateScaling\",\n  \"TextWords\",\n  \"Therefore\",\n  \"ThermodynamicData\",\n  \"ThermometerGauge\",\n  \"Thick\",\n  \"Thickness\",\n  \"Thin\",\n  \"Thinning\",\n  \"ThisLink\",\n  \"ThomasPointProcess\",\n  \"ThompsonGroupTh\",\n  \"Thread\",\n  \"Threaded\",\n  \"ThreadingLayer\",\n  \"ThreeJSymbol\",\n  \"Threshold\",\n  \"Through\",\n  \"Throw\",\n  \"ThueMorse\",\n  \"Thumbnail\",\n  \"Thursday\",\n  \"TickDirection\",\n  \"TickLabelOrientation\",\n  \"TickLabelPositioning\",\n  \"TickLabels\",\n  \"TickLengths\",\n  \"TickPositions\",\n  \"Ticks\",\n  \"TicksStyle\",\n  \"TideData\",\n  \"Tilde\",\n  \"TildeEqual\",\n  \"TildeFullEqual\",\n  \"TildeTilde\",\n  \"TimeConstrained\",\n  \"TimeConstraint\",\n  \"TimeDirection\",\n  \"TimeFormat\",\n  \"TimeGoal\",\n  \"TimelinePlot\",\n  \"TimeObject\",\n  \"TimeObjectQ\",\n  \"TimeRemaining\",\n  \"Times\",\n  \"TimesBy\",\n  \"TimeSeries\",\n  \"TimeSeriesAggregate\",\n  \"TimeSeriesForecast\",\n  \"TimeSeriesInsert\",\n  \"TimeSeriesInvertibility\",\n  \"TimeSeriesMap\",\n  \"TimeSeriesMapThread\",\n  \"TimeSeriesModel\",\n  \"TimeSeriesModelFit\",\n  \"TimeSeriesResample\",\n  \"TimeSeriesRescale\",\n  \"TimeSeriesShift\",\n  \"TimeSeriesThread\",\n  \"TimeSeriesWindow\",\n  \"TimeSystem\",\n  \"TimeSystemConvert\",\n  \"TimeUsed\",\n  \"TimeValue\",\n  \"TimeWarpingCorrespondence\",\n  \"TimeWarpingDistance\",\n  \"TimeZone\",\n  \"TimeZoneConvert\",\n  \"TimeZoneOffset\",\n  \"Timing\",\n  \"Tiny\",\n  \"TitleGrouping\",\n  \"TitsGroupT\",\n  \"ToBoxes\",\n  \"ToCharacterCode\",\n  \"ToColor\",\n  \"ToContinuousTimeModel\",\n  \"ToDate\",\n  \"Today\",\n  \"ToDiscreteTimeModel\",\n  \"ToEntity\",\n  \"ToeplitzMatrix\",\n  \"ToExpression\",\n  \"ToFileName\",\n  \"Together\",\n  \"Toggle\",\n  \"ToggleFalse\",\n  \"Toggler\",\n  \"TogglerBar\",\n  \"TogglerBox\",\n  \"TogglerBoxOptions\",\n  \"ToHeldExpression\",\n  \"ToInvertibleTimeSeries\",\n  \"TokenWords\",\n  \"Tolerance\",\n  \"ToLowerCase\",\n  \"Tomorrow\",\n  \"ToNumberField\",\n  \"TooBig\",\n  \"Tooltip\",\n  \"TooltipBox\",\n  \"TooltipBoxOptions\",\n  \"TooltipDelay\",\n  \"TooltipStyle\",\n  \"ToonShading\",\n  \"Top\",\n  \"TopHatTransform\",\n  \"ToPolarCoordinates\",\n  \"TopologicalSort\",\n  \"ToRadicals\",\n  \"ToRawPointer\",\n  \"ToRules\",\n  \"Torus\",\n  \"TorusGraph\",\n  \"ToSphericalCoordinates\",\n  \"ToString\",\n  \"Total\",\n  \"TotalHeight\",\n  \"TotalLayer\",\n  \"TotalVariationFilter\",\n  \"TotalWidth\",\n  \"TouchPosition\",\n  \"TouchscreenAutoZoom\",\n  \"TouchscreenControlPlacement\",\n  \"ToUpperCase\",\n  \"TourVideo\",\n  \"Tr\",\n  \"Trace\",\n  \"TraceAbove\",\n  \"TraceAction\",\n  \"TraceBackward\",\n  \"TraceDepth\",\n  \"TraceDialog\",\n  \"TraceForward\",\n  \"TraceInternal\",\n  \"TraceLevel\",\n  \"TraceOff\",\n  \"TraceOn\",\n  \"TraceOriginal\",\n  \"TracePrint\",\n  \"TraceScan\",\n  \"TrackCellChangeTimes\",\n  \"TrackedSymbols\",\n  \"TrackingFunction\",\n  \"TracyWidomDistribution\",\n  \"TradingChart\",\n  \"TraditionalForm\",\n  \"TraditionalFunctionNotation\",\n  \"TraditionalNotation\",\n  \"TraditionalOrder\",\n  \"TrainImageContentDetector\",\n  \"TrainingProgressCheckpointing\",\n  \"TrainingProgressFunction\",\n  \"TrainingProgressMeasurements\",\n  \"TrainingProgressReporting\",\n  \"TrainingStoppingCriterion\",\n  \"TrainingUpdateSchedule\",\n  \"TrainTextContentDetector\",\n  \"TransferFunctionCancel\",\n  \"TransferFunctionExpand\",\n  \"TransferFunctionFactor\",\n  \"TransferFunctionModel\",\n  \"TransferFunctionPoles\",\n  \"TransferFunctionTransform\",\n  \"TransferFunctionZeros\",\n  \"TransformationClass\",\n  \"TransformationFunction\",\n  \"TransformationFunctions\",\n  \"TransformationMatrix\",\n  \"TransformedDistribution\",\n  \"TransformedField\",\n  \"TransformedProcess\",\n  \"TransformedRegion\",\n  \"TransitionDirection\",\n  \"TransitionDuration\",\n  \"TransitionEffect\",\n  \"TransitiveClosureGraph\",\n  \"TransitiveReductionGraph\",\n  \"Translate\",\n  \"TranslationOptions\",\n  \"TranslationTransform\",\n  \"Transliterate\",\n  \"Transparent\",\n  \"TransparentColor\",\n  \"Transpose\",\n  \"TransposeLayer\",\n  \"TrapEnterKey\",\n  \"TrapSelection\",\n  \"TravelDirections\",\n  \"TravelDirectionsData\",\n  \"TravelDistance\",\n  \"TravelDistanceList\",\n  \"TravelMethod\",\n  \"TravelTime\",\n  \"Tree\",\n  \"TreeCases\",\n  \"TreeChildren\",\n  \"TreeCount\",\n  \"TreeData\",\n  \"TreeDelete\",\n  \"TreeDepth\",\n  \"TreeElementCoordinates\",\n  \"TreeElementLabel\",\n  \"TreeElementLabelFunction\",\n  \"TreeElementLabelStyle\",\n  \"TreeElementShape\",\n  \"TreeElementShapeFunction\",\n  \"TreeElementSize\",\n  \"TreeElementSizeFunction\",\n  \"TreeElementStyle\",\n  \"TreeElementStyleFunction\",\n  \"TreeExpression\",\n  \"TreeExtract\",\n  \"TreeFold\",\n  \"TreeForm\",\n  \"TreeGraph\",\n  \"TreeGraphQ\",\n  \"TreeInsert\",\n  \"TreeLayout\",\n  \"TreeLeafCount\",\n  \"TreeLeafQ\",\n  \"TreeLeaves\",\n  \"TreeLevel\",\n  \"TreeMap\",\n  \"TreeMapAt\",\n  \"TreeOutline\",\n  \"TreePlot\",\n  \"TreePosition\",\n  \"TreeQ\",\n  \"TreeReplacePart\",\n  \"TreeRules\",\n  \"TreeScan\",\n  \"TreeSelect\",\n  \"TreeSize\",\n  \"TreeTraversalOrder\",\n  \"TrendStyle\",\n  \"Triangle\",\n  \"TriangleCenter\",\n  \"TriangleConstruct\",\n  \"TriangleMeasurement\",\n  \"TriangleWave\",\n  \"TriangularDistribution\",\n  \"TriangulateMesh\",\n  \"Trig\",\n  \"TrigExpand\",\n  \"TrigFactor\",\n  \"TrigFactorList\",\n  \"Trigger\",\n  \"TrigReduce\",\n  \"TrigToExp\",\n  \"TrimmedMean\",\n  \"TrimmedVariance\",\n  \"TropicalStormData\",\n  \"True\",\n  \"TrueQ\",\n  \"TruncatedDistribution\",\n  \"TruncatedPolyhedron\",\n  \"TsallisQExponentialDistribution\",\n  \"TsallisQGaussianDistribution\",\n  \"TTest\",\n  \"Tube\",\n  \"TubeBezierCurveBox\",\n  \"TubeBezierCurveBoxOptions\",\n  \"TubeBox\",\n  \"TubeBoxOptions\",\n  \"TubeBSplineCurveBox\",\n  \"TubeBSplineCurveBoxOptions\",\n  \"Tuesday\",\n  \"TukeyLambdaDistribution\",\n  \"TukeyWindow\",\n  \"TunnelData\",\n  \"Tuples\",\n  \"TuranGraph\",\n  \"TuringMachine\",\n  \"TuttePolynomial\",\n  \"TwoWayRule\",\n  \"Typed\",\n  \"TypeDeclaration\",\n  \"TypeEvaluate\",\n  \"TypeHint\",\n  \"TypeOf\",\n  \"TypeSpecifier\",\n  \"UnateQ\",\n  \"Uncompress\",\n  \"UnconstrainedParameters\",\n  \"Undefined\",\n  \"UnderBar\",\n  \"Underflow\",\n  \"Underlined\",\n  \"Underoverscript\",\n  \"UnderoverscriptBox\",\n  \"UnderoverscriptBoxOptions\",\n  \"Underscript\",\n  \"UnderscriptBox\",\n  \"UnderscriptBoxOptions\",\n  \"UnderseaFeatureData\",\n  \"UndirectedEdge\",\n  \"UndirectedGraph\",\n  \"UndirectedGraphQ\",\n  \"UndoOptions\",\n  \"UndoTrackedVariables\",\n  \"Unequal\",\n  \"UnequalTo\",\n  \"Unevaluated\",\n  \"UniformDistribution\",\n  \"UniformGraphDistribution\",\n  \"UniformPolyhedron\",\n  \"UniformSumDistribution\",\n  \"Uninstall\",\n  \"Union\",\n  \"UnionedEntityClass\",\n  \"UnionPlus\",\n  \"Unique\",\n  \"UniqueElements\",\n  \"UnitaryMatrixQ\",\n  \"UnitBox\",\n  \"UnitConvert\",\n  \"UnitDimensions\",\n  \"Unitize\",\n  \"UnitRootTest\",\n  \"UnitSimplify\",\n  \"UnitStep\",\n  \"UnitSystem\",\n  \"UnitTriangle\",\n  \"UnitVector\",\n  \"UnitVectorLayer\",\n  \"UnityDimensions\",\n  \"UniverseModelData\",\n  \"UniversityData\",\n  \"UnixTime\",\n  \"UnlabeledTree\",\n  \"UnmanageObject\",\n  \"Unprotect\",\n  \"UnregisterExternalEvaluator\",\n  \"UnsameQ\",\n  \"UnsavedVariables\",\n  \"Unset\",\n  \"UnsetShared\",\n  \"Until\",\n  \"UntrackedVariables\",\n  \"Up\",\n  \"UpArrow\",\n  \"UpArrowBar\",\n  \"UpArrowDownArrow\",\n  \"Update\",\n  \"UpdateDynamicObjects\",\n  \"UpdateDynamicObjectsSynchronous\",\n  \"UpdateInterval\",\n  \"UpdatePacletSites\",\n  \"UpdateSearchIndex\",\n  \"UpDownArrow\",\n  \"UpEquilibrium\",\n  \"UpperCaseQ\",\n  \"UpperLeftArrow\",\n  \"UpperRightArrow\",\n  \"UpperTriangularize\",\n  \"UpperTriangularMatrix\",\n  \"UpperTriangularMatrixQ\",\n  \"Upsample\",\n  \"UpSet\",\n  \"UpSetDelayed\",\n  \"UpTee\",\n  \"UpTeeArrow\",\n  \"UpTo\",\n  \"UpValues\",\n  \"URL\",\n  \"URLBuild\",\n  \"URLDecode\",\n  \"URLDispatcher\",\n  \"URLDownload\",\n  \"URLDownloadSubmit\",\n  \"URLEncode\",\n  \"URLExecute\",\n  \"URLExpand\",\n  \"URLFetch\",\n  \"URLFetchAsynchronous\",\n  \"URLParse\",\n  \"URLQueryDecode\",\n  \"URLQueryEncode\",\n  \"URLRead\",\n  \"URLResponseTime\",\n  \"URLSave\",\n  \"URLSaveAsynchronous\",\n  \"URLShorten\",\n  \"URLSubmit\",\n  \"UseEmbeddedLibrary\",\n  \"UseGraphicsRange\",\n  \"UserDefinedWavelet\",\n  \"Using\",\n  \"UsingFrontEnd\",\n  \"UtilityFunction\",\n  \"V2Get\",\n  \"ValenceErrorHandling\",\n  \"ValenceFilling\",\n  \"ValidationLength\",\n  \"ValidationSet\",\n  \"ValueBox\",\n  \"ValueBoxOptions\",\n  \"ValueDimensions\",\n  \"ValueForm\",\n  \"ValuePreprocessingFunction\",\n  \"ValueQ\",\n  \"Values\",\n  \"ValuesData\",\n  \"VandermondeMatrix\",\n  \"Variables\",\n  \"Variance\",\n  \"VarianceEquivalenceTest\",\n  \"VarianceEstimatorFunction\",\n  \"VarianceGammaDistribution\",\n  \"VarianceGammaPointProcess\",\n  \"VarianceTest\",\n  \"VariogramFunction\",\n  \"VariogramModel\",\n  \"VectorAngle\",\n  \"VectorAround\",\n  \"VectorAspectRatio\",\n  \"VectorColorFunction\",\n  \"VectorColorFunctionScaling\",\n  \"VectorDensityPlot\",\n  \"VectorDisplacementPlot\",\n  \"VectorDisplacementPlot3D\",\n  \"VectorGlyphData\",\n  \"VectorGreater\",\n  \"VectorGreaterEqual\",\n  \"VectorLess\",\n  \"VectorLessEqual\",\n  \"VectorMarkers\",\n  \"VectorPlot\",\n  \"VectorPlot3D\",\n  \"VectorPoints\",\n  \"VectorQ\",\n  \"VectorRange\",\n  \"Vectors\",\n  \"VectorScale\",\n  \"VectorScaling\",\n  \"VectorSizes\",\n  \"VectorStyle\",\n  \"Vee\",\n  \"Verbatim\",\n  \"Verbose\",\n  \"VerificationTest\",\n  \"VerifyConvergence\",\n  \"VerifyDerivedKey\",\n  \"VerifyDigitalSignature\",\n  \"VerifyFileSignature\",\n  \"VerifyInterpretation\",\n  \"VerifySecurityCertificates\",\n  \"VerifySolutions\",\n  \"VerifyTestAssumptions\",\n  \"VersionedPreferences\",\n  \"VertexAdd\",\n  \"VertexCapacity\",\n  \"VertexChromaticNumber\",\n  \"VertexColors\",\n  \"VertexComponent\",\n  \"VertexConnectivity\",\n  \"VertexContract\",\n  \"VertexCoordinateRules\",\n  \"VertexCoordinates\",\n  \"VertexCorrelationSimilarity\",\n  \"VertexCosineSimilarity\",\n  \"VertexCount\",\n  \"VertexCoverQ\",\n  \"VertexDataCoordinates\",\n  \"VertexDegree\",\n  \"VertexDelete\",\n  \"VertexDiceSimilarity\",\n  \"VertexEccentricity\",\n  \"VertexInComponent\",\n  \"VertexInComponentGraph\",\n  \"VertexInDegree\",\n  \"VertexIndex\",\n  \"VertexJaccardSimilarity\",\n  \"VertexLabeling\",\n  \"VertexLabels\",\n  \"VertexLabelStyle\",\n  \"VertexList\",\n  \"VertexNormals\",\n  \"VertexOutComponent\",\n  \"VertexOutComponentGraph\",\n  \"VertexOutDegree\",\n  \"VertexQ\",\n  \"VertexRenderingFunction\",\n  \"VertexReplace\",\n  \"VertexShape\",\n  \"VertexShapeFunction\",\n  \"VertexSize\",\n  \"VertexStyle\",\n  \"VertexTextureCoordinates\",\n  \"VertexTransitiveGraphQ\",\n  \"VertexWeight\",\n  \"VertexWeightedGraphQ\",\n  \"Vertical\",\n  \"VerticalBar\",\n  \"VerticalForm\",\n  \"VerticalGauge\",\n  \"VerticalSeparator\",\n  \"VerticalSlider\",\n  \"VerticalTilde\",\n  \"Video\",\n  \"VideoCapture\",\n  \"VideoCombine\",\n  \"VideoDelete\",\n  \"VideoEncoding\",\n  \"VideoExtractFrames\",\n  \"VideoFrameList\",\n  \"VideoFrameMap\",\n  \"VideoGenerator\",\n  \"VideoInsert\",\n  \"VideoIntervals\",\n  \"VideoJoin\",\n  \"VideoMap\",\n  \"VideoMapList\",\n  \"VideoMapTimeSeries\",\n  \"VideoPadding\",\n  \"VideoPause\",\n  \"VideoPlay\",\n  \"VideoQ\",\n  \"VideoRecord\",\n  \"VideoReplace\",\n  \"VideoScreenCapture\",\n  \"VideoSplit\",\n  \"VideoStop\",\n  \"VideoStream\",\n  \"VideoStreams\",\n  \"VideoTimeStretch\",\n  \"VideoTrackSelection\",\n  \"VideoTranscode\",\n  \"VideoTransparency\",\n  \"VideoTrim\",\n  \"ViewAngle\",\n  \"ViewCenter\",\n  \"ViewMatrix\",\n  \"ViewPoint\",\n  \"ViewPointSelectorSettings\",\n  \"ViewPort\",\n  \"ViewProjection\",\n  \"ViewRange\",\n  \"ViewVector\",\n  \"ViewVertical\",\n  \"VirtualGroupData\",\n  \"Visible\",\n  \"VisibleCell\",\n  \"VoiceStyleData\",\n  \"VoigtDistribution\",\n  \"VolcanoData\",\n  \"Volume\",\n  \"VonMisesDistribution\",\n  \"VoronoiMesh\",\n  \"WaitAll\",\n  \"WaitAsynchronousTask\",\n  \"WaitNext\",\n  \"WaitUntil\",\n  \"WakebyDistribution\",\n  \"WalleniusHypergeometricDistribution\",\n  \"WaringYuleDistribution\",\n  \"WarpingCorrespondence\",\n  \"WarpingDistance\",\n  \"WatershedComponents\",\n  \"WatsonUSquareTest\",\n  \"WattsStrogatzGraphDistribution\",\n  \"WaveletBestBasis\",\n  \"WaveletFilterCoefficients\",\n  \"WaveletImagePlot\",\n  \"WaveletListPlot\",\n  \"WaveletMapIndexed\",\n  \"WaveletMatrixPlot\",\n  \"WaveletPhi\",\n  \"WaveletPsi\",\n  \"WaveletScale\",\n  \"WaveletScalogram\",\n  \"WaveletThreshold\",\n  \"WavePDEComponent\",\n  \"WeaklyConnectedComponents\",\n  \"WeaklyConnectedGraphComponents\",\n  \"WeaklyConnectedGraphQ\",\n  \"WeakStationarity\",\n  \"WeatherData\",\n  \"WeatherForecastData\",\n  \"WebAudioSearch\",\n  \"WebColumn\",\n  \"WebElementObject\",\n  \"WeberE\",\n  \"WebExecute\",\n  \"WebImage\",\n  \"WebImageSearch\",\n  \"WebItem\",\n  \"WebPageMetaInformation\",\n  \"WebRow\",\n  \"WebSearch\",\n  \"WebSessionObject\",\n  \"WebSessions\",\n  \"WebWindowObject\",\n  \"Wedge\",\n  \"Wednesday\",\n  \"WeibullDistribution\",\n  \"WeierstrassE1\",\n  \"WeierstrassE2\",\n  \"WeierstrassE3\",\n  \"WeierstrassEta1\",\n  \"WeierstrassEta2\",\n  \"WeierstrassEta3\",\n  \"WeierstrassHalfPeriods\",\n  \"WeierstrassHalfPeriodW1\",\n  \"WeierstrassHalfPeriodW2\",\n  \"WeierstrassHalfPeriodW3\",\n  \"WeierstrassInvariantG2\",\n  \"WeierstrassInvariantG3\",\n  \"WeierstrassInvariants\",\n  \"WeierstrassP\",\n  \"WeierstrassPPrime\",\n  \"WeierstrassSigma\",\n  \"WeierstrassZeta\",\n  \"WeightedAdjacencyGraph\",\n  \"WeightedAdjacencyMatrix\",\n  \"WeightedData\",\n  \"WeightedGraphQ\",\n  \"Weights\",\n  \"WelchWindow\",\n  \"WheelGraph\",\n  \"WhenEvent\",\n  \"Which\",\n  \"While\",\n  \"White\",\n  \"WhiteNoiseProcess\",\n  \"WhitePoint\",\n  \"Whitespace\",\n  \"WhitespaceCharacter\",\n  \"WhittakerM\",\n  \"WhittakerW\",\n  \"WholeCellGroupOpener\",\n  \"WienerFilter\",\n  \"WienerProcess\",\n  \"WignerD\",\n  \"WignerSemicircleDistribution\",\n  \"WikidataData\",\n  \"WikidataSearch\",\n  \"WikipediaData\",\n  \"WikipediaSearch\",\n  \"WilksW\",\n  \"WilksWTest\",\n  \"WindDirectionData\",\n  \"WindingCount\",\n  \"WindingPolygon\",\n  \"WindowClickSelect\",\n  \"WindowElements\",\n  \"WindowFloating\",\n  \"WindowFrame\",\n  \"WindowFrameElements\",\n  \"WindowMargins\",\n  \"WindowMovable\",\n  \"WindowOpacity\",\n  \"WindowPersistentStyles\",\n  \"WindowSelected\",\n  \"WindowSize\",\n  \"WindowStatusArea\",\n  \"WindowTitle\",\n  \"WindowToolbars\",\n  \"WindowWidth\",\n  \"WindSpeedData\",\n  \"WindVectorData\",\n  \"WinsorizedMean\",\n  \"WinsorizedVariance\",\n  \"WishartMatrixDistribution\",\n  \"With\",\n  \"WithCleanup\",\n  \"WithLock\",\n  \"WolframAlpha\",\n  \"WolframAlphaDate\",\n  \"WolframAlphaQuantity\",\n  \"WolframAlphaResult\",\n  \"WolframCloudSettings\",\n  \"WolframLanguageData\",\n  \"Word\",\n  \"WordBoundary\",\n  \"WordCharacter\",\n  \"WordCloud\",\n  \"WordCount\",\n  \"WordCounts\",\n  \"WordData\",\n  \"WordDefinition\",\n  \"WordFrequency\",\n  \"WordFrequencyData\",\n  \"WordList\",\n  \"WordOrientation\",\n  \"WordSearch\",\n  \"WordSelectionFunction\",\n  \"WordSeparators\",\n  \"WordSpacings\",\n  \"WordStem\",\n  \"WordTranslation\",\n  \"WorkingPrecision\",\n  \"WrapAround\",\n  \"Write\",\n  \"WriteLine\",\n  \"WriteString\",\n  \"Wronskian\",\n  \"XMLElement\",\n  \"XMLObject\",\n  \"XMLTemplate\",\n  \"Xnor\",\n  \"Xor\",\n  \"XYZColor\",\n  \"Yellow\",\n  \"Yesterday\",\n  \"YuleDissimilarity\",\n  \"ZernikeR\",\n  \"ZeroSymmetric\",\n  \"ZeroTest\",\n  \"ZeroWidthTimes\",\n  \"Zeta\",\n  \"ZetaZero\",\n  \"ZIPCodeData\",\n  \"ZipfDistribution\",\n  \"ZoomCenter\",\n  \"ZoomFactor\",\n  \"ZTest\",\n  \"ZTransform\",\n  \"$Aborted\",\n  \"$ActivationGroupID\",\n  \"$ActivationKey\",\n  \"$ActivationUserRegistered\",\n  \"$AddOnsDirectory\",\n  \"$AllowDataUpdates\",\n  \"$AllowExternalChannelFunctions\",\n  \"$AllowInternet\",\n  \"$AssertFunction\",\n  \"$Assumptions\",\n  \"$AsynchronousTask\",\n  \"$AudioDecoders\",\n  \"$AudioEncoders\",\n  \"$AudioInputDevices\",\n  \"$AudioOutputDevices\",\n  \"$BaseDirectory\",\n  \"$BasePacletsDirectory\",\n  \"$BatchInput\",\n  \"$BatchOutput\",\n  \"$BlockchainBase\",\n  \"$BoxForms\",\n  \"$ByteOrdering\",\n  \"$CacheBaseDirectory\",\n  \"$Canceled\",\n  \"$ChannelBase\",\n  \"$CharacterEncoding\",\n  \"$CharacterEncodings\",\n  \"$CloudAccountName\",\n  \"$CloudBase\",\n  \"$CloudConnected\",\n  \"$CloudConnection\",\n  \"$CloudCreditsAvailable\",\n  \"$CloudEvaluation\",\n  \"$CloudExpressionBase\",\n  \"$CloudObjectNameFormat\",\n  \"$CloudObjectURLType\",\n  \"$CloudRootDirectory\",\n  \"$CloudSymbolBase\",\n  \"$CloudUserID\",\n  \"$CloudUserUUID\",\n  \"$CloudVersion\",\n  \"$CloudVersionNumber\",\n  \"$CloudWolframEngineVersionNumber\",\n  \"$CommandLine\",\n  \"$CompilationTarget\",\n  \"$CompilerEnvironment\",\n  \"$ConditionHold\",\n  \"$ConfiguredKernels\",\n  \"$Context\",\n  \"$ContextAliases\",\n  \"$ContextPath\",\n  \"$ControlActiveSetting\",\n  \"$Cookies\",\n  \"$CookieStore\",\n  \"$CreationDate\",\n  \"$CryptographicEllipticCurveNames\",\n  \"$CurrentLink\",\n  \"$CurrentTask\",\n  \"$CurrentWebSession\",\n  \"$DataStructures\",\n  \"$DateStringFormat\",\n  \"$DefaultAudioInputDevice\",\n  \"$DefaultAudioOutputDevice\",\n  \"$DefaultFont\",\n  \"$DefaultFrontEnd\",\n  \"$DefaultImagingDevice\",\n  \"$DefaultKernels\",\n  \"$DefaultLocalBase\",\n  \"$DefaultLocalKernel\",\n  \"$DefaultMailbox\",\n  \"$DefaultNetworkInterface\",\n  \"$DefaultPath\",\n  \"$DefaultProxyRules\",\n  \"$DefaultRemoteBatchSubmissionEnvironment\",\n  \"$DefaultRemoteKernel\",\n  \"$DefaultSystemCredentialStore\",\n  \"$Display\",\n  \"$DisplayFunction\",\n  \"$DistributedContexts\",\n  \"$DynamicEvaluation\",\n  \"$Echo\",\n  \"$EmbedCodeEnvironments\",\n  \"$EmbeddableServices\",\n  \"$EntityStores\",\n  \"$Epilog\",\n  \"$EvaluationCloudBase\",\n  \"$EvaluationCloudObject\",\n  \"$EvaluationEnvironment\",\n  \"$ExportFormats\",\n  \"$ExternalIdentifierTypes\",\n  \"$ExternalStorageBase\",\n  \"$Failed\",\n  \"$FinancialDataSource\",\n  \"$FontFamilies\",\n  \"$FormatType\",\n  \"$FrontEnd\",\n  \"$FrontEndSession\",\n  \"$GeneratedAssetLocation\",\n  \"$GeoEntityTypes\",\n  \"$GeoLocation\",\n  \"$GeoLocationCity\",\n  \"$GeoLocationCountry\",\n  \"$GeoLocationPrecision\",\n  \"$GeoLocationSource\",\n  \"$HistoryLength\",\n  \"$HomeDirectory\",\n  \"$HTMLExportRules\",\n  \"$HTTPCookies\",\n  \"$HTTPRequest\",\n  \"$IgnoreEOF\",\n  \"$ImageFormattingWidth\",\n  \"$ImageResolution\",\n  \"$ImagingDevice\",\n  \"$ImagingDevices\",\n  \"$ImportFormats\",\n  \"$IncomingMailSettings\",\n  \"$InitialDirectory\",\n  \"$Initialization\",\n  \"$InitializationContexts\",\n  \"$Input\",\n  \"$InputFileName\",\n  \"$InputStreamMethods\",\n  \"$Inspector\",\n  \"$InstallationDate\",\n  \"$InstallationDirectory\",\n  \"$InterfaceEnvironment\",\n  \"$InterpreterTypes\",\n  \"$IterationLimit\",\n  \"$KernelCount\",\n  \"$KernelID\",\n  \"$Language\",\n  \"$LaunchDirectory\",\n  \"$LibraryPath\",\n  \"$LicenseExpirationDate\",\n  \"$LicenseID\",\n  \"$LicenseProcesses\",\n  \"$LicenseServer\",\n  \"$LicenseSubprocesses\",\n  \"$LicenseType\",\n  \"$Line\",\n  \"$Linked\",\n  \"$LinkSupported\",\n  \"$LoadedFiles\",\n  \"$LocalBase\",\n  \"$LocalSymbolBase\",\n  \"$MachineAddresses\",\n  \"$MachineDomain\",\n  \"$MachineDomains\",\n  \"$MachineEpsilon\",\n  \"$MachineID\",\n  \"$MachineName\",\n  \"$MachinePrecision\",\n  \"$MachineType\",\n  \"$MaxDisplayedChildren\",\n  \"$MaxExtraPrecision\",\n  \"$MaxLicenseProcesses\",\n  \"$MaxLicenseSubprocesses\",\n  \"$MaxMachineNumber\",\n  \"$MaxNumber\",\n  \"$MaxPiecewiseCases\",\n  \"$MaxPrecision\",\n  \"$MaxRootDegree\",\n  \"$MessageGroups\",\n  \"$MessageList\",\n  \"$MessagePrePrint\",\n  \"$Messages\",\n  \"$MinMachineNumber\",\n  \"$MinNumber\",\n  \"$MinorReleaseNumber\",\n  \"$MinPrecision\",\n  \"$MobilePhone\",\n  \"$ModuleNumber\",\n  \"$NetworkConnected\",\n  \"$NetworkInterfaces\",\n  \"$NetworkLicense\",\n  \"$NewMessage\",\n  \"$NewSymbol\",\n  \"$NotebookInlineStorageLimit\",\n  \"$Notebooks\",\n  \"$NoValue\",\n  \"$NumberMarks\",\n  \"$Off\",\n  \"$OperatingSystem\",\n  \"$Output\",\n  \"$OutputForms\",\n  \"$OutputSizeLimit\",\n  \"$OutputStreamMethods\",\n  \"$Packages\",\n  \"$ParentLink\",\n  \"$ParentProcessID\",\n  \"$PasswordFile\",\n  \"$PatchLevelID\",\n  \"$Path\",\n  \"$PathnameSeparator\",\n  \"$PerformanceGoal\",\n  \"$Permissions\",\n  \"$PermissionsGroupBase\",\n  \"$PersistenceBase\",\n  \"$PersistencePath\",\n  \"$PipeSupported\",\n  \"$PlotTheme\",\n  \"$Post\",\n  \"$Pre\",\n  \"$PreferencesDirectory\",\n  \"$PreInitialization\",\n  \"$PrePrint\",\n  \"$PreRead\",\n  \"$PrintForms\",\n  \"$PrintLiteral\",\n  \"$Printout3DPreviewer\",\n  \"$ProcessID\",\n  \"$ProcessorCount\",\n  \"$ProcessorType\",\n  \"$ProductInformation\",\n  \"$ProgramName\",\n  \"$ProgressReporting\",\n  \"$PublisherID\",\n  \"$RandomGeneratorState\",\n  \"$RandomState\",\n  \"$RecursionLimit\",\n  \"$RegisteredDeviceClasses\",\n  \"$RegisteredUserName\",\n  \"$ReleaseNumber\",\n  \"$RequesterAddress\",\n  \"$RequesterCloudUserID\",\n  \"$RequesterCloudUserUUID\",\n  \"$RequesterWolframID\",\n  \"$RequesterWolframUUID\",\n  \"$ResourceSystemBase\",\n  \"$ResourceSystemPath\",\n  \"$RootDirectory\",\n  \"$ScheduledTask\",\n  \"$ScriptCommandLine\",\n  \"$ScriptInputString\",\n  \"$SecuredAuthenticationKeyTokens\",\n  \"$ServiceCreditsAvailable\",\n  \"$Services\",\n  \"$SessionID\",\n  \"$SetParentLink\",\n  \"$SharedFunctions\",\n  \"$SharedVariables\",\n  \"$SoundDisplay\",\n  \"$SoundDisplayFunction\",\n  \"$SourceLink\",\n  \"$SSHAuthentication\",\n  \"$SubtitleDecoders\",\n  \"$SubtitleEncoders\",\n  \"$SummaryBoxDataSizeLimit\",\n  \"$SuppressInputFormHeads\",\n  \"$SynchronousEvaluation\",\n  \"$SyntaxHandler\",\n  \"$System\",\n  \"$SystemCharacterEncoding\",\n  \"$SystemCredentialStore\",\n  \"$SystemID\",\n  \"$SystemMemory\",\n  \"$SystemShell\",\n  \"$SystemTimeZone\",\n  \"$SystemWordLength\",\n  \"$TargetSystems\",\n  \"$TemplatePath\",\n  \"$TemporaryDirectory\",\n  \"$TemporaryPrefix\",\n  \"$TestFileName\",\n  \"$TextStyle\",\n  \"$TimedOut\",\n  \"$TimeUnit\",\n  \"$TimeZone\",\n  \"$TimeZoneEntity\",\n  \"$TopDirectory\",\n  \"$TraceOff\",\n  \"$TraceOn\",\n  \"$TracePattern\",\n  \"$TracePostAction\",\n  \"$TracePreAction\",\n  \"$UnitSystem\",\n  \"$Urgent\",\n  \"$UserAddOnsDirectory\",\n  \"$UserAgentLanguages\",\n  \"$UserAgentMachine\",\n  \"$UserAgentName\",\n  \"$UserAgentOperatingSystem\",\n  \"$UserAgentString\",\n  \"$UserAgentVersion\",\n  \"$UserBaseDirectory\",\n  \"$UserBasePacletsDirectory\",\n  \"$UserDocumentsDirectory\",\n  \"$Username\",\n  \"$UserName\",\n  \"$UserURLBase\",\n  \"$Version\",\n  \"$VersionNumber\",\n  \"$VideoDecoders\",\n  \"$VideoEncoders\",\n  \"$VoiceStyles\",\n  \"$WolframDocumentsDirectory\",\n  \"$WolframID\",\n  \"$WolframUUID\"\n];\n\n/*\nLanguage: Wolfram Language\nDescription: The Wolfram Language is the programming language used in Wolfram Mathematica, a modern technical computing system spanning most areas of technical computing.\nAuthors: Patrick Scheibe <patrick@halirutan.de>, Robert Jacobson <robertjacobson@acm.org>\nWebsite: https://www.wolfram.com/mathematica/\nCategory: scientific\n*/\n\n\n/** @type LanguageFn */\nfunction mathematica(hljs) {\n  const regex = hljs.regex;\n  /*\n  This rather scary looking matching of Mathematica numbers is carefully explained by Robert Jacobson here:\n  https://wltools.github.io/LanguageSpec/Specification/Syntax/Number-representations/\n   */\n  const BASE_RE = /([2-9]|[1-2]\\d|[3][0-5])\\^\\^/;\n  const BASE_DIGITS_RE = /(\\w*\\.\\w+|\\w+\\.\\w*|\\w+)/;\n  const NUMBER_RE = /(\\d*\\.\\d+|\\d+\\.\\d*|\\d+)/;\n  const BASE_NUMBER_RE = regex.either(regex.concat(BASE_RE, BASE_DIGITS_RE), NUMBER_RE);\n\n  const ACCURACY_RE = /``[+-]?(\\d*\\.\\d+|\\d+\\.\\d*|\\d+)/;\n  const PRECISION_RE = /`([+-]?(\\d*\\.\\d+|\\d+\\.\\d*|\\d+))?/;\n  const APPROXIMATE_NUMBER_RE = regex.either(ACCURACY_RE, PRECISION_RE);\n\n  const SCIENTIFIC_NOTATION_RE = /\\*\\^[+-]?\\d+/;\n\n  const MATHEMATICA_NUMBER_RE = regex.concat(\n    BASE_NUMBER_RE,\n    regex.optional(APPROXIMATE_NUMBER_RE),\n    regex.optional(SCIENTIFIC_NOTATION_RE)\n  );\n\n  const NUMBERS = {\n    className: 'number',\n    relevance: 0,\n    begin: MATHEMATICA_NUMBER_RE\n  };\n\n  const SYMBOL_RE = /[a-zA-Z$][a-zA-Z0-9$]*/;\n  const SYSTEM_SYMBOLS_SET = new Set(SYSTEM_SYMBOLS);\n  /** @type {Mode} */\n  const SYMBOLS = { variants: [\n    {\n      className: 'builtin-symbol',\n      begin: SYMBOL_RE,\n      // for performance out of fear of regex.either(...Mathematica.SYSTEM_SYMBOLS)\n      \"on:begin\": (match, response) => {\n        if (!SYSTEM_SYMBOLS_SET.has(match[0])) response.ignoreMatch();\n      }\n    },\n    {\n      className: 'symbol',\n      relevance: 0,\n      begin: SYMBOL_RE\n    }\n  ] };\n\n  const NAMED_CHARACTER = {\n    className: 'named-character',\n    begin: /\\\\\\[[$a-zA-Z][$a-zA-Z0-9]+\\]/\n  };\n\n  const OPERATORS = {\n    className: 'operator',\n    relevance: 0,\n    begin: /[+\\-*/,;.:@~=><&|_`'^?!%]+/\n  };\n  const PATTERNS = {\n    className: 'pattern',\n    relevance: 0,\n    begin: /([a-zA-Z$][a-zA-Z0-9$]*)?_+([a-zA-Z$][a-zA-Z0-9$]*)?/\n  };\n\n  const SLOTS = {\n    className: 'slot',\n    relevance: 0,\n    begin: /#[a-zA-Z$][a-zA-Z0-9$]*|#+[0-9]?/\n  };\n\n  const BRACES = {\n    className: 'brace',\n    relevance: 0,\n    begin: /[[\\](){}]/\n  };\n\n  const MESSAGES = {\n    className: 'message-name',\n    relevance: 0,\n    begin: regex.concat(\"::\", SYMBOL_RE)\n  };\n\n  return {\n    name: 'Mathematica',\n    aliases: [\n      'mma',\n      'wl'\n    ],\n    classNameAliases: {\n      brace: 'punctuation',\n      pattern: 'type',\n      slot: 'type',\n      symbol: 'variable',\n      'named-character': 'variable',\n      'builtin-symbol': 'built_in',\n      'message-name': 'string'\n    },\n    contains: [\n      hljs.COMMENT(/\\(\\*/, /\\*\\)/, { contains: [ 'self' ] }),\n      PATTERNS,\n      SLOTS,\n      MESSAGES,\n      SYMBOLS,\n      NAMED_CHARACTER,\n      hljs.QUOTE_STRING_MODE,\n      NUMBERS,\n      OPERATORS,\n      BRACES\n    ]\n  };\n}\n\nmodule.exports = mathematica;\n","/*\nLanguage: Matlab\nAuthor: Denis Bardadym <bardadymchik@gmail.com>\nContributors: Eugene Nizhibitsky <nizhibitsky@ya.ru>, Egor Rogov <e.rogov@postgrespro.ru>\nWebsite: https://www.mathworks.com/products/matlab.html\nCategory: scientific\n*/\n\n/*\n  Formal syntax is not published, helpful link:\n  https://github.com/kornilova-l/matlab-IntelliJ-plugin/blob/master/src/main/grammar/Matlab.bnf\n*/\nfunction matlab(hljs) {\n  const TRANSPOSE_RE = '(\\'|\\\\.\\')+';\n  const TRANSPOSE = {\n    relevance: 0,\n    contains: [ { begin: TRANSPOSE_RE } ]\n  };\n\n  return {\n    name: 'Matlab',\n    keywords: {\n      keyword:\n        'arguments break case catch classdef continue else elseif end enumeration events for function '\n        + 'global if methods otherwise parfor persistent properties return spmd switch try while',\n      built_in:\n        'sin sind sinh asin asind asinh cos cosd cosh acos acosd acosh tan tand tanh atan '\n        + 'atand atan2 atanh sec secd sech asec asecd asech csc cscd csch acsc acscd acsch cot '\n        + 'cotd coth acot acotd acoth hypot exp expm1 log log1p log10 log2 pow2 realpow reallog '\n        + 'realsqrt sqrt nthroot nextpow2 abs angle complex conj imag real unwrap isreal '\n        + 'cplxpair fix floor ceil round mod rem sign airy besselj bessely besselh besseli '\n        + 'besselk beta betainc betaln ellipj ellipke erf erfc erfcx erfinv expint gamma '\n        + 'gammainc gammaln psi legendre cross dot factor isprime primes gcd lcm rat rats perms '\n        + 'nchoosek factorial cart2sph cart2pol pol2cart sph2cart hsv2rgb rgb2hsv zeros ones '\n        + 'eye repmat rand randn linspace logspace freqspace meshgrid accumarray size length '\n        + 'ndims numel disp isempty isequal isequalwithequalnans cat reshape diag blkdiag tril '\n        + 'triu fliplr flipud flipdim rot90 find sub2ind ind2sub bsxfun ndgrid permute ipermute '\n        + 'shiftdim circshift squeeze isscalar isvector ans eps realmax realmin pi i|0 inf nan '\n        + 'isnan isinf isfinite j|0 why compan gallery hadamard hankel hilb invhilb magic pascal '\n        + 'rosser toeplitz vander wilkinson max min nanmax nanmin mean nanmean type table '\n        + 'readtable writetable sortrows sort figure plot plot3 scatter scatter3 cellfun '\n        + 'legend intersect ismember procrustes hold num2cell '\n    },\n    illegal: '(//|\"|#|/\\\\*|\\\\s+/\\\\w+)',\n    contains: [\n      {\n        className: 'function',\n        beginKeywords: 'function',\n        end: '$',\n        contains: [\n          hljs.UNDERSCORE_TITLE_MODE,\n          {\n            className: 'params',\n            variants: [\n              {\n                begin: '\\\\(',\n                end: '\\\\)'\n              },\n              {\n                begin: '\\\\[',\n                end: '\\\\]'\n              }\n            ]\n          }\n        ]\n      },\n      {\n        className: 'built_in',\n        begin: /true|false/,\n        relevance: 0,\n        starts: TRANSPOSE\n      },\n      {\n        begin: '[a-zA-Z][a-zA-Z_0-9]*' + TRANSPOSE_RE,\n        relevance: 0\n      },\n      {\n        className: 'number',\n        begin: hljs.C_NUMBER_RE,\n        relevance: 0,\n        starts: TRANSPOSE\n      },\n      {\n        className: 'string',\n        begin: '\\'',\n        end: '\\'',\n        contains: [ { begin: '\\'\\'' } ]\n      },\n      {\n        begin: /\\]|\\}|\\)/,\n        relevance: 0,\n        starts: TRANSPOSE\n      },\n      {\n        className: 'string',\n        begin: '\"',\n        end: '\"',\n        contains: [ { begin: '\"\"' } ],\n        starts: TRANSPOSE\n      },\n      hljs.COMMENT('^\\\\s*%\\\\{\\\\s*$', '^\\\\s*%\\\\}\\\\s*$'),\n      hljs.COMMENT('%', '$')\n    ]\n  };\n}\n\nmodule.exports = matlab;\n","/*\nLanguage: Maxima\nAuthor: Robert Dodier <robert.dodier@gmail.com>\nWebsite: http://maxima.sourceforge.net\nCategory: scientific\n*/\n\nfunction maxima(hljs) {\n  const KEYWORDS =\n    'if then else elseif for thru do while unless step in and or not';\n  const LITERALS =\n    'true false unknown inf minf ind und %e %i %pi %phi %gamma';\n  const BUILTIN_FUNCTIONS =\n    ' abasep abs absint absolute_real_time acos acosh acot acoth acsc acsch activate'\n    + ' addcol add_edge add_edges addmatrices addrow add_vertex add_vertices adjacency_matrix'\n    + ' adjoin adjoint af agd airy airy_ai airy_bi airy_dai airy_dbi algsys alg_type'\n    + ' alias allroots alphacharp alphanumericp amortization %and annuity_fv'\n    + ' annuity_pv antid antidiff AntiDifference append appendfile apply apply1 apply2'\n    + ' applyb1 apropos args arit_amortization arithmetic arithsum array arrayapply'\n    + ' arrayinfo arraymake arraysetapply ascii asec asech asin asinh askinteger'\n    + ' asksign assoc assoc_legendre_p assoc_legendre_q assume assume_external_byte_order'\n    + ' asympa at atan atan2 atanh atensimp atom atvalue augcoefmatrix augmented_lagrangian_method'\n    + ' av average_degree backtrace bars barsplot barsplot_description base64 base64_decode'\n    + ' bashindices batch batchload bc2 bdvac belln benefit_cost bern bernpoly bernstein_approx'\n    + ' bernstein_expand bernstein_poly bessel bessel_i bessel_j bessel_k bessel_simplify'\n    + ' bessel_y beta beta_incomplete beta_incomplete_generalized beta_incomplete_regularized'\n    + ' bezout bfallroots bffac bf_find_root bf_fmin_cobyla bfhzeta bfloat bfloatp'\n    + ' bfpsi bfpsi0 bfzeta biconnected_components bimetric binomial bipartition'\n    + ' block blockmatrixp bode_gain bode_phase bothcoef box boxplot boxplot_description'\n    + ' break bug_report build_info|10 buildq build_sample burn cabs canform canten'\n    + ' cardinality carg cartan cartesian_product catch cauchy_matrix cbffac cdf_bernoulli'\n    + ' cdf_beta cdf_binomial cdf_cauchy cdf_chi2 cdf_continuous_uniform cdf_discrete_uniform'\n    + ' cdf_exp cdf_f cdf_gamma cdf_general_finite_discrete cdf_geometric cdf_gumbel'\n    + ' cdf_hypergeometric cdf_laplace cdf_logistic cdf_lognormal cdf_negative_binomial'\n    + ' cdf_noncentral_chi2 cdf_noncentral_student_t cdf_normal cdf_pareto cdf_poisson'\n    + ' cdf_rank_sum cdf_rayleigh cdf_signed_rank cdf_student_t cdf_weibull cdisplay'\n    + ' ceiling central_moment cequal cequalignore cf cfdisrep cfexpand cgeodesic'\n    + ' cgreaterp cgreaterpignore changename changevar chaosgame charat charfun charfun2'\n    + ' charlist charp charpoly chdir chebyshev_t chebyshev_u checkdiv check_overlaps'\n    + ' chinese cholesky christof chromatic_index chromatic_number cint circulant_graph'\n    + ' clear_edge_weight clear_rules clear_vertex_label clebsch_gordan clebsch_graph'\n    + ' clessp clesspignore close closefile cmetric coeff coefmatrix cograd col collapse'\n    + ' collectterms columnop columnspace columnswap columnvector combination combine'\n    + ' comp2pui compare compfile compile compile_file complement_graph complete_bipartite_graph'\n    + ' complete_graph complex_number_p components compose_functions concan concat'\n    + ' conjugate conmetderiv connected_components connect_vertices cons constant'\n    + ' constantp constituent constvalue cont2part content continuous_freq contortion'\n    + ' contour_plot contract contract_edge contragrad contrib_ode convert coord'\n    + ' copy copy_file copy_graph copylist copymatrix cor cos cosh cot coth cov cov1'\n    + ' covdiff covect covers crc24sum create_graph create_list csc csch csetup cspline'\n    + ' ctaylor ct_coordsys ctransform ctranspose cube_graph cuboctahedron_graph'\n    + ' cunlisp cv cycle_digraph cycle_graph cylindrical days360 dblint deactivate'\n    + ' declare declare_constvalue declare_dimensions declare_fundamental_dimensions'\n    + ' declare_fundamental_units declare_qty declare_translated declare_unit_conversion'\n    + ' declare_units declare_weights decsym defcon define define_alt_display define_variable'\n    + ' defint defmatch defrule defstruct deftaylor degree_sequence del delete deleten'\n    + ' delta demo demoivre denom depends derivdegree derivlist describe desolve'\n    + ' determinant dfloat dgauss_a dgauss_b dgeev dgemm dgeqrf dgesv dgesvd diag'\n    + ' diagmatrix diag_matrix diagmatrixp diameter diff digitcharp dimacs_export'\n    + ' dimacs_import dimension dimensionless dimensions dimensions_as_list direct'\n    + ' directory discrete_freq disjoin disjointp disolate disp dispcon dispform'\n    + ' dispfun dispJordan display disprule dispterms distrib divide divisors divsum'\n    + ' dkummer_m dkummer_u dlange dodecahedron_graph dotproduct dotsimp dpart'\n    + ' draw draw2d draw3d drawdf draw_file draw_graph dscalar echelon edge_coloring'\n    + ' edge_connectivity edges eigens_by_jacobi eigenvalues eigenvectors eighth'\n    + ' einstein eivals eivects elapsed_real_time elapsed_run_time ele2comp ele2polynome'\n    + ' ele2pui elem elementp elevation_grid elim elim_allbut eliminate eliminate_using'\n    + ' ellipse elliptic_e elliptic_ec elliptic_eu elliptic_f elliptic_kc elliptic_pi'\n    + ' ematrix empty_graph emptyp endcons entermatrix entertensor entier equal equalp'\n    + ' equiv_classes erf erfc erf_generalized erfi errcatch error errormsg errors'\n    + ' euler ev eval_string evenp every evolution evolution2d evundiff example exp'\n    + ' expand expandwrt expandwrt_factored expint expintegral_chi expintegral_ci'\n    + ' expintegral_e expintegral_e1 expintegral_ei expintegral_e_simplify expintegral_li'\n    + ' expintegral_shi expintegral_si explicit explose exponentialize express expt'\n    + ' exsec extdiff extract_linear_equations extremal_subset ezgcd %f f90 facsum'\n    + ' factcomb factor factorfacsum factorial factorout factorsum facts fast_central_elements'\n    + ' fast_linsolve fasttimes featurep fernfale fft fib fibtophi fifth filename_merge'\n    + ' file_search file_type fillarray findde find_root find_root_abs find_root_error'\n    + ' find_root_rel first fix flatten flength float floatnump floor flower_snark'\n    + ' flush flush1deriv flushd flushnd flush_output fmin_cobyla forget fortran'\n    + ' fourcos fourexpand fourier fourier_elim fourint fourintcos fourintsin foursimp'\n    + ' foursin fourth fposition frame_bracket freeof freshline fresnel_c fresnel_s'\n    + ' from_adjacency_matrix frucht_graph full_listify fullmap fullmapl fullratsimp'\n    + ' fullratsubst fullsetify funcsolve fundamental_dimensions fundamental_units'\n    + ' fundef funmake funp fv g0 g1 gamma gamma_greek gamma_incomplete gamma_incomplete_generalized'\n    + ' gamma_incomplete_regularized gauss gauss_a gauss_b gaussprob gcd gcdex gcdivide'\n    + ' gcfac gcfactor gd generalized_lambert_w genfact gen_laguerre genmatrix gensym'\n    + ' geo_amortization geo_annuity_fv geo_annuity_pv geomap geometric geometric_mean'\n    + ' geosum get getcurrentdirectory get_edge_weight getenv get_lu_factors get_output_stream_string'\n    + ' get_pixel get_plot_option get_tex_environment get_tex_environment_default'\n    + ' get_vertex_label gfactor gfactorsum ggf girth global_variances gn gnuplot_close'\n    + ' gnuplot_replot gnuplot_reset gnuplot_restart gnuplot_start go Gosper GosperSum'\n    + ' gr2d gr3d gradef gramschmidt graph6_decode graph6_encode graph6_export graph6_import'\n    + ' graph_center graph_charpoly graph_eigenvalues graph_flow graph_order graph_periphery'\n    + ' graph_product graph_size graph_union great_rhombicosidodecahedron_graph great_rhombicuboctahedron_graph'\n    + ' grid_graph grind grobner_basis grotzch_graph hamilton_cycle hamilton_path'\n    + ' hankel hankel_1 hankel_2 harmonic harmonic_mean hav heawood_graph hermite'\n    + ' hessian hgfred hilbertmap hilbert_matrix hipow histogram histogram_description'\n    + ' hodge horner hypergeometric i0 i1 %ibes ic1 ic2 ic_convert ichr1 ichr2 icosahedron_graph'\n    + ' icosidodecahedron_graph icurvature ident identfor identity idiff idim idummy'\n    + ' ieqn %if ifactors iframes ifs igcdex igeodesic_coords ilt image imagpart'\n    + ' imetric implicit implicit_derivative implicit_plot indexed_tensor indices'\n    + ' induced_subgraph inferencep inference_result infix info_display init_atensor'\n    + ' init_ctensor in_neighbors innerproduct inpart inprod inrt integerp integer_partitions'\n    + ' integrate intersect intersection intervalp intopois intosum invariant1 invariant2'\n    + ' inverse_fft inverse_jacobi_cd inverse_jacobi_cn inverse_jacobi_cs inverse_jacobi_dc'\n    + ' inverse_jacobi_dn inverse_jacobi_ds inverse_jacobi_nc inverse_jacobi_nd inverse_jacobi_ns'\n    + ' inverse_jacobi_sc inverse_jacobi_sd inverse_jacobi_sn invert invert_by_adjoint'\n    + ' invert_by_lu inv_mod irr is is_biconnected is_bipartite is_connected is_digraph'\n    + ' is_edge_in_graph is_graph is_graph_or_digraph ishow is_isomorphic isolate'\n    + ' isomorphism is_planar isqrt isreal_p is_sconnected is_tree is_vertex_in_graph'\n    + ' items_inference %j j0 j1 jacobi jacobian jacobi_cd jacobi_cn jacobi_cs jacobi_dc'\n    + ' jacobi_dn jacobi_ds jacobi_nc jacobi_nd jacobi_ns jacobi_p jacobi_sc jacobi_sd'\n    + ' jacobi_sn JF jn join jordan julia julia_set julia_sin %k kdels kdelta kill'\n    + ' killcontext kostka kron_delta kronecker_product kummer_m kummer_u kurtosis'\n    + ' kurtosis_bernoulli kurtosis_beta kurtosis_binomial kurtosis_chi2 kurtosis_continuous_uniform'\n    + ' kurtosis_discrete_uniform kurtosis_exp kurtosis_f kurtosis_gamma kurtosis_general_finite_discrete'\n    + ' kurtosis_geometric kurtosis_gumbel kurtosis_hypergeometric kurtosis_laplace'\n    + ' kurtosis_logistic kurtosis_lognormal kurtosis_negative_binomial kurtosis_noncentral_chi2'\n    + ' kurtosis_noncentral_student_t kurtosis_normal kurtosis_pareto kurtosis_poisson'\n    + ' kurtosis_rayleigh kurtosis_student_t kurtosis_weibull label labels lagrange'\n    + ' laguerre lambda lambert_w laplace laplacian_matrix last lbfgs lc2kdt lcharp'\n    + ' lc_l lcm lc_u ldefint ldisp ldisplay legendre_p legendre_q leinstein length'\n    + ' let letrules letsimp levi_civita lfreeof lgtreillis lhs li liediff limit'\n    + ' Lindstedt linear linearinterpol linear_program linear_regression line_graph'\n    + ' linsolve listarray list_correlations listify list_matrix_entries list_nc_monomials'\n    + ' listoftens listofvars listp lmax lmin load loadfile local locate_matrix_entry'\n    + ' log logcontract log_gamma lopow lorentz_gauge lowercasep lpart lratsubst'\n    + ' lreduce lriemann lsquares_estimates lsquares_estimates_approximate lsquares_estimates_exact'\n    + ' lsquares_mse lsquares_residual_mse lsquares_residuals lsum ltreillis lu_backsub'\n    + ' lucas lu_factor %m macroexpand macroexpand1 make_array makebox makefact makegamma'\n    + ' make_graph make_level_picture makelist makeOrders make_poly_continent make_poly_country'\n    + ' make_polygon make_random_state make_rgb_picture makeset make_string_input_stream'\n    + ' make_string_output_stream make_transform mandelbrot mandelbrot_set map mapatom'\n    + ' maplist matchdeclare matchfix mat_cond mat_fullunblocker mat_function mathml_display'\n    + ' mat_norm matrix matrixmap matrixp matrix_size mattrace mat_trace mat_unblocker'\n    + ' max max_clique max_degree max_flow maximize_lp max_independent_set max_matching'\n    + ' maybe md5sum mean mean_bernoulli mean_beta mean_binomial mean_chi2 mean_continuous_uniform'\n    + ' mean_deviation mean_discrete_uniform mean_exp mean_f mean_gamma mean_general_finite_discrete'\n    + ' mean_geometric mean_gumbel mean_hypergeometric mean_laplace mean_logistic'\n    + ' mean_lognormal mean_negative_binomial mean_noncentral_chi2 mean_noncentral_student_t'\n    + ' mean_normal mean_pareto mean_poisson mean_rayleigh mean_student_t mean_weibull'\n    + ' median median_deviation member mesh metricexpandall mgf1_sha1 min min_degree'\n    + ' min_edge_cut minfactorial minimalPoly minimize_lp minimum_spanning_tree minor'\n    + ' minpack_lsquares minpack_solve min_vertex_cover min_vertex_cut mkdir mnewton'\n    + ' mod mode_declare mode_identity ModeMatrix moebius mon2schur mono monomial_dimensions'\n    + ' multibernstein_poly multi_display_for_texinfo multi_elem multinomial multinomial_coeff'\n    + ' multi_orbit multiplot_mode multi_pui multsym multthru mycielski_graph nary'\n    + ' natural_unit nc_degree ncexpt ncharpoly negative_picture neighbors new newcontext'\n    + ' newdet new_graph newline newton new_variable next_prime nicedummies niceindices'\n    + ' ninth nofix nonarray noncentral_moment nonmetricity nonnegintegerp nonscalarp'\n    + ' nonzeroandfreeof notequal nounify nptetrad npv nroots nterms ntermst'\n    + ' nthroot nullity nullspace num numbered_boundaries numberp number_to_octets'\n    + ' num_distinct_partitions numerval numfactor num_partitions nusum nzeta nzetai'\n    + ' nzetar octets_to_number octets_to_oid odd_girth oddp ode2 ode_check odelin'\n    + ' oid_to_octets op opena opena_binary openr openr_binary openw openw_binary'\n    + ' operatorp opsubst optimize %or orbit orbits ordergreat ordergreatp orderless'\n    + ' orderlessp orthogonal_complement orthopoly_recur orthopoly_weight outermap'\n    + ' out_neighbors outofpois pade parabolic_cylinder_d parametric parametric_surface'\n    + ' parg parGosper parse_string parse_timedate part part2cont partfrac partition'\n    + ' partition_set partpol path_digraph path_graph pathname_directory pathname_name'\n    + ' pathname_type pdf_bernoulli pdf_beta pdf_binomial pdf_cauchy pdf_chi2 pdf_continuous_uniform'\n    + ' pdf_discrete_uniform pdf_exp pdf_f pdf_gamma pdf_general_finite_discrete'\n    + ' pdf_geometric pdf_gumbel pdf_hypergeometric pdf_laplace pdf_logistic pdf_lognormal'\n    + ' pdf_negative_binomial pdf_noncentral_chi2 pdf_noncentral_student_t pdf_normal'\n    + ' pdf_pareto pdf_poisson pdf_rank_sum pdf_rayleigh pdf_signed_rank pdf_student_t'\n    + ' pdf_weibull pearson_skewness permanent permut permutation permutations petersen_graph'\n    + ' petrov pickapart picture_equalp picturep piechart piechart_description planar_embedding'\n    + ' playback plog plot2d plot3d plotdf ploteq plsquares pochhammer points poisdiff'\n    + ' poisexpt poisint poismap poisplus poissimp poissubst poistimes poistrim polar'\n    + ' polarform polartorect polar_to_xy poly_add poly_buchberger poly_buchberger_criterion'\n    + ' poly_colon_ideal poly_content polydecomp poly_depends_p poly_elimination_ideal'\n    + ' poly_exact_divide poly_expand poly_expt poly_gcd polygon poly_grobner poly_grobner_equal'\n    + ' poly_grobner_member poly_grobner_subsetp poly_ideal_intersection poly_ideal_polysaturation'\n    + ' poly_ideal_polysaturation1 poly_ideal_saturation poly_ideal_saturation1 poly_lcm'\n    + ' poly_minimization polymod poly_multiply polynome2ele polynomialp poly_normal_form'\n    + ' poly_normalize poly_normalize_list poly_polysaturation_extension poly_primitive_part'\n    + ' poly_pseudo_divide poly_reduced_grobner poly_reduction poly_saturation_extension'\n    + ' poly_s_polynomial poly_subtract polytocompanion pop postfix potential power_mod'\n    + ' powerseries powerset prefix prev_prime primep primes principal_components'\n    + ' print printf printfile print_graph printpois printprops prodrac product properties'\n    + ' propvars psi psubst ptriangularize pui pui2comp pui2ele pui2polynome pui_direct'\n    + ' puireduc push put pv qput qrange qty quad_control quad_qag quad_qagi quad_qagp'\n    + ' quad_qags quad_qawc quad_qawf quad_qawo quad_qaws quadrilateral quantile'\n    + ' quantile_bernoulli quantile_beta quantile_binomial quantile_cauchy quantile_chi2'\n    + ' quantile_continuous_uniform quantile_discrete_uniform quantile_exp quantile_f'\n    + ' quantile_gamma quantile_general_finite_discrete quantile_geometric quantile_gumbel'\n    + ' quantile_hypergeometric quantile_laplace quantile_logistic quantile_lognormal'\n    + ' quantile_negative_binomial quantile_noncentral_chi2 quantile_noncentral_student_t'\n    + ' quantile_normal quantile_pareto quantile_poisson quantile_rayleigh quantile_student_t'\n    + ' quantile_weibull quartile_skewness quit qunit quotient racah_v racah_w radcan'\n    + ' radius random random_bernoulli random_beta random_binomial random_bipartite_graph'\n    + ' random_cauchy random_chi2 random_continuous_uniform random_digraph random_discrete_uniform'\n    + ' random_exp random_f random_gamma random_general_finite_discrete random_geometric'\n    + ' random_graph random_graph1 random_gumbel random_hypergeometric random_laplace'\n    + ' random_logistic random_lognormal random_negative_binomial random_network'\n    + ' random_noncentral_chi2 random_noncentral_student_t random_normal random_pareto'\n    + ' random_permutation random_poisson random_rayleigh random_regular_graph random_student_t'\n    + ' random_tournament random_tree random_weibull range rank rat ratcoef ratdenom'\n    + ' ratdiff ratdisrep ratexpand ratinterpol rational rationalize ratnumer ratnump'\n    + ' ratp ratsimp ratsubst ratvars ratweight read read_array read_binary_array'\n    + ' read_binary_list read_binary_matrix readbyte readchar read_hashed_array readline'\n    + ' read_list read_matrix read_nested_list readonly read_xpm real_imagpart_to_conjugate'\n    + ' realpart realroots rearray rectangle rectform rectform_log_if_constant recttopolar'\n    + ' rediff reduce_consts reduce_order region region_boundaries region_boundaries_plus'\n    + ' rem remainder remarray rembox remcomps remcon remcoord remfun remfunction'\n    + ' remlet remove remove_constvalue remove_dimensions remove_edge remove_fundamental_dimensions'\n    + ' remove_fundamental_units remove_plot_option remove_vertex rempart remrule'\n    + ' remsym remvalue rename rename_file reset reset_displays residue resolvante'\n    + ' resolvante_alternee1 resolvante_bipartite resolvante_diedrale resolvante_klein'\n    + ' resolvante_klein3 resolvante_produit_sym resolvante_unitaire resolvante_vierer'\n    + ' rest resultant return reveal reverse revert revert2 rgb2level rhs ricci riemann'\n    + ' rinvariant risch rk rmdir rncombine romberg room rootscontract round row'\n    + ' rowop rowswap rreduce run_testsuite %s save saving scalarp scaled_bessel_i'\n    + ' scaled_bessel_i0 scaled_bessel_i1 scalefactors scanmap scatterplot scatterplot_description'\n    + ' scene schur2comp sconcat scopy scsimp scurvature sdowncase sec sech second'\n    + ' sequal sequalignore set_alt_display setdifference set_draw_defaults set_edge_weight'\n    + ' setelmx setequalp setify setp set_partitions set_plot_option set_prompt set_random_state'\n    + ' set_tex_environment set_tex_environment_default setunits setup_autoload set_up_dot_simplifications'\n    + ' set_vertex_label seventh sexplode sf sha1sum sha256sum shortest_path shortest_weighted_path'\n    + ' show showcomps showratvars sierpinskiale sierpinskimap sign signum similaritytransform'\n    + ' simp_inequality simplify_sum simplode simpmetderiv simtran sin sinh sinsert'\n    + ' sinvertcase sixth skewness skewness_bernoulli skewness_beta skewness_binomial'\n    + ' skewness_chi2 skewness_continuous_uniform skewness_discrete_uniform skewness_exp'\n    + ' skewness_f skewness_gamma skewness_general_finite_discrete skewness_geometric'\n    + ' skewness_gumbel skewness_hypergeometric skewness_laplace skewness_logistic'\n    + ' skewness_lognormal skewness_negative_binomial skewness_noncentral_chi2 skewness_noncentral_student_t'\n    + ' skewness_normal skewness_pareto skewness_poisson skewness_rayleigh skewness_student_t'\n    + ' skewness_weibull slength smake small_rhombicosidodecahedron_graph small_rhombicuboctahedron_graph'\n    + ' smax smin smismatch snowmap snub_cube_graph snub_dodecahedron_graph solve'\n    + ' solve_rec solve_rec_rat some somrac sort sparse6_decode sparse6_encode sparse6_export'\n    + ' sparse6_import specint spherical spherical_bessel_j spherical_bessel_y spherical_hankel1'\n    + ' spherical_hankel2 spherical_harmonic spherical_to_xyz splice split sposition'\n    + ' sprint sqfr sqrt sqrtdenest sremove sremovefirst sreverse ssearch ssort sstatus'\n    + ' ssubst ssubstfirst staircase standardize standardize_inverse_trig starplot'\n    + ' starplot_description status std std1 std_bernoulli std_beta std_binomial'\n    + ' std_chi2 std_continuous_uniform std_discrete_uniform std_exp std_f std_gamma'\n    + ' std_general_finite_discrete std_geometric std_gumbel std_hypergeometric std_laplace'\n    + ' std_logistic std_lognormal std_negative_binomial std_noncentral_chi2 std_noncentral_student_t'\n    + ' std_normal std_pareto std_poisson std_rayleigh std_student_t std_weibull'\n    + ' stemplot stirling stirling1 stirling2 strim striml strimr string stringout'\n    + ' stringp strong_components struve_h struve_l sublis sublist sublist_indices'\n    + ' submatrix subsample subset subsetp subst substinpart subst_parallel substpart'\n    + ' substring subvar subvarp sum sumcontract summand_to_rec supcase supcontext'\n    + ' symbolp symmdifference symmetricp system take_channel take_inference tan'\n    + ' tanh taylor taylorinfo taylorp taylor_simplifier taytorat tcl_output tcontract'\n    + ' tellrat tellsimp tellsimpafter tentex tenth test_mean test_means_difference'\n    + ' test_normality test_proportion test_proportions_difference test_rank_sum'\n    + ' test_sign test_signed_rank test_variance test_variance_ratio tex tex1 tex_display'\n    + ' texput %th third throw time timedate timer timer_info tldefint tlimit todd_coxeter'\n    + ' toeplitz tokens to_lisp topological_sort to_poly to_poly_solve totaldisrep'\n    + ' totalfourier totient tpartpol trace tracematrix trace_options transform_sample'\n    + ' translate translate_file transpose treefale tree_reduce treillis treinat'\n    + ' triangle triangularize trigexpand trigrat trigreduce trigsimp trunc truncate'\n    + ' truncated_cube_graph truncated_dodecahedron_graph truncated_icosahedron_graph'\n    + ' truncated_tetrahedron_graph tr_warnings_get tube tutte_graph ueivects uforget'\n    + ' ultraspherical underlying_graph undiff union unique uniteigenvectors unitp'\n    + ' units unit_step unitvector unorder unsum untellrat untimer'\n    + ' untrace uppercasep uricci uriemann uvect vandermonde_matrix var var1 var_bernoulli'\n    + ' var_beta var_binomial var_chi2 var_continuous_uniform var_discrete_uniform'\n    + ' var_exp var_f var_gamma var_general_finite_discrete var_geometric var_gumbel'\n    + ' var_hypergeometric var_laplace var_logistic var_lognormal var_negative_binomial'\n    + ' var_noncentral_chi2 var_noncentral_student_t var_normal var_pareto var_poisson'\n    + ' var_rayleigh var_student_t var_weibull vector vectorpotential vectorsimp'\n    + ' verbify vers vertex_coloring vertex_connectivity vertex_degree vertex_distance'\n    + ' vertex_eccentricity vertex_in_degree vertex_out_degree vertices vertices_to_cycle'\n    + ' vertices_to_path %w weyl wheel_graph wiener_index wigner_3j wigner_6j'\n    + ' wigner_9j with_stdout write_binary_data writebyte write_data writefile wronskian'\n    + ' xreduce xthru %y Zeilberger zeroequiv zerofor zeromatrix zeromatrixp zeta'\n    + ' zgeev zheev zlange zn_add_table zn_carmichael_lambda zn_characteristic_factors'\n    + ' zn_determinant zn_factor_generators zn_invert_by_lu zn_log zn_mult_table'\n    + ' absboxchar activecontexts adapt_depth additive adim aform algebraic'\n    + ' algepsilon algexact aliases allbut all_dotsimp_denoms allocation allsym alphabetic'\n    + ' animation antisymmetric arrays askexp assume_pos assume_pos_pred assumescalar'\n    + ' asymbol atomgrad atrig1 axes axis_3d axis_bottom axis_left axis_right axis_top'\n    + ' azimuth background background_color backsubst berlefact bernstein_explicit'\n    + ' besselexpand beta_args_sum_to_integer beta_expand bftorat bftrunc bindtest'\n    + ' border boundaries_array box boxchar breakup %c capping cauchysum cbrange'\n    + ' cbtics center cflength cframe_flag cnonmet_flag color color_bar color_bar_tics'\n    + ' colorbox columns commutative complex cone context contexts contour contour_levels'\n    + ' cosnpiflag ctaypov ctaypt ctayswitch ctayvar ct_coords ctorsion_flag ctrgsimp'\n    + ' cube current_let_rule_package cylinder data_file_name debugmode decreasing'\n    + ' default_let_rule_package delay dependencies derivabbrev derivsubst detout'\n    + ' diagmetric diff dim dimensions dispflag display2d|10 display_format_internal'\n    + ' distribute_over doallmxops domain domxexpt domxmxops domxnctimes dontfactor'\n    + ' doscmxops doscmxplus dot0nscsimp dot0simp dot1simp dotassoc dotconstrules'\n    + ' dotdistrib dotexptsimp dotident dotscrules draw_graph_program draw_realpart'\n    + ' edge_color edge_coloring edge_partition edge_type edge_width %edispflag'\n    + ' elevation %emode endphi endtheta engineering_format_floats enhanced3d %enumer'\n    + ' epsilon_lp erfflag erf_representation errormsg error_size error_syms error_type'\n    + ' %e_to_numlog eval even evenfun evflag evfun ev_point expandwrt_denom expintexpand'\n    + ' expintrep expon expop exptdispflag exptisolate exptsubst facexpand facsum_combine'\n    + ' factlim factorflag factorial_expand factors_only fb feature features'\n    + ' file_name file_output_append file_search_demo file_search_lisp file_search_maxima|10'\n    + ' file_search_tests file_search_usage file_type_lisp file_type_maxima|10 fill_color'\n    + ' fill_density filled_func fixed_vertices flipflag float2bf font font_size'\n    + ' fortindent fortspaces fpprec fpprintprec functions gamma_expand gammalim'\n    + ' gdet genindex gensumnum GGFCFMAX GGFINFINITY globalsolve gnuplot_command'\n    + ' gnuplot_curve_styles gnuplot_curve_titles gnuplot_default_term_command gnuplot_dumb_term_command'\n    + ' gnuplot_file_args gnuplot_file_name gnuplot_out_file gnuplot_pdf_term_command'\n    + ' gnuplot_pm3d gnuplot_png_term_command gnuplot_postamble gnuplot_preamble'\n    + ' gnuplot_ps_term_command gnuplot_svg_term_command gnuplot_term gnuplot_view_args'\n    + ' Gosper_in_Zeilberger gradefs grid grid2d grind halfangles head_angle head_both'\n    + ' head_length head_type height hypergeometric_representation %iargs ibase'\n    + ' icc1 icc2 icounter idummyx ieqnprint ifb ifc1 ifc2 ifg ifgi ifr iframe_bracket_form'\n    + ' ifri igeowedge_flag ikt1 ikt2 imaginary inchar increasing infeval'\n    + ' infinity inflag infolists inm inmc1 inmc2 intanalysis integer integervalued'\n    + ' integrate_use_rootsof integration_constant integration_constant_counter interpolate_color'\n    + ' intfaclim ip_grid ip_grid_in irrational isolate_wrt_times iterations itr'\n    + ' julia_parameter %k1 %k2 keepfloat key key_pos kinvariant kt label label_alignment'\n    + ' label_orientation labels lassociative lbfgs_ncorrections lbfgs_nfeval_max'\n    + ' leftjust legend letrat let_rule_packages lfg lg lhospitallim limsubst linear'\n    + ' linear_solver linechar linel|10 linenum line_type linewidth line_width linsolve_params'\n    + ' linsolvewarn lispdisp listarith listconstvars listdummyvars lmxchar load_pathname'\n    + ' loadprint logabs logarc logcb logconcoeffp logexpand lognegint logsimp logx'\n    + ' logx_secondary logy logy_secondary logz lriem m1pbranch macroexpansion macros'\n    + ' mainvar manual_demo maperror mapprint matrix_element_add matrix_element_mult'\n    + ' matrix_element_transpose maxapplydepth maxapplyheight maxima_tempdir|10 maxima_userdir|10'\n    + ' maxnegex MAX_ORD maxposex maxpsifracdenom maxpsifracnum maxpsinegint maxpsiposint'\n    + ' maxtayorder mesh_lines_color method mod_big_prime mode_check_errorp'\n    + ' mode_checkp mode_check_warnp mod_test mod_threshold modular_linear_solver'\n    + ' modulus multiplicative multiplicities myoptions nary negdistrib negsumdispflag'\n    + ' newline newtonepsilon newtonmaxiter nextlayerfactor niceindicespref nm nmc'\n    + ' noeval nolabels nonegative_lp noninteger nonscalar noun noundisp nouns np'\n    + ' npi nticks ntrig numer numer_pbranch obase odd oddfun opacity opproperties'\n    + ' opsubst optimprefix optionset orientation origin orthopoly_returns_intervals'\n    + ' outative outchar packagefile palette partswitch pdf_file pfeformat phiresolution'\n    + ' %piargs piece pivot_count_sx pivot_max_sx plot_format plot_options plot_realpart'\n    + ' png_file pochhammer_max_index points pointsize point_size points_joined point_type'\n    + ' poislim poisson poly_coefficient_ring poly_elimination_order polyfactor poly_grobner_algorithm'\n    + ' poly_grobner_debug poly_monomial_order poly_primary_elimination_order poly_return_term_list'\n    + ' poly_secondary_elimination_order poly_top_reduction_only posfun position'\n    + ' powerdisp pred prederror primep_number_of_tests product_use_gamma program'\n    + ' programmode promote_float_to_bigfloat prompt proportional_axes props psexpand'\n    + ' ps_file radexpand radius radsubstflag rassociative ratalgdenom ratchristof'\n    + ' ratdenomdivide rateinstein ratepsilon ratfac rational ratmx ratprint ratriemann'\n    + ' ratsimpexpons ratvarswitch ratweights ratweyl ratwtlvl real realonly redraw'\n    + ' refcheck resolution restart resultant ric riem rmxchar %rnum_list rombergabs'\n    + ' rombergit rombergmin rombergtol rootsconmode rootsepsilon run_viewer same_xy'\n    + ' same_xyz savedef savefactors scalar scalarmatrixp scale scale_lp setcheck'\n    + ' setcheckbreak setval show_edge_color show_edges show_edge_type show_edge_width'\n    + ' show_id show_label showtime show_vertex_color show_vertex_size show_vertex_type'\n    + ' show_vertices show_weight simp simplified_output simplify_products simpproduct'\n    + ' simpsum sinnpiflag solvedecomposes solveexplicit solvefactors solvenullwarn'\n    + ' solveradcan solvetrigwarn space sparse sphere spring_embedding_depth sqrtdispflag'\n    + ' stardisp startphi starttheta stats_numer stringdisp structures style sublis_apply_lambda'\n    + ' subnumsimp sumexpand sumsplitfact surface surface_hide svg_file symmetric'\n    + ' tab taylordepth taylor_logexpand taylor_order_coefficients taylor_truncate_polynomials'\n    + ' tensorkill terminal testsuite_files thetaresolution timer_devalue title tlimswitch'\n    + ' tr track transcompile transform transform_xy translate_fast_arrays transparent'\n    + ' transrun tr_array_as_ref tr_bound_function_applyp tr_file_tty_messagesp tr_float_can_branch_complex'\n    + ' tr_function_call_default trigexpandplus trigexpandtimes triginverses trigsign'\n    + ' trivial_solutions tr_numer tr_optimize_max_loop tr_semicompile tr_state_vars'\n    + ' tr_warn_bad_function_calls tr_warn_fexpr tr_warn_meval tr_warn_mode'\n    + ' tr_warn_undeclared tr_warn_undefined_variable tstep ttyoff tube_extremes'\n    + ' ufg ug %unitexpand unit_vectors uric uriem use_fast_arrays user_preamble'\n    + ' usersetunits values vect_cross verbose vertex_color vertex_coloring vertex_partition'\n    + ' vertex_size vertex_type view warnings weyl width windowname windowtitle wired_surface'\n    + ' wireframe xaxis xaxis_color xaxis_secondary xaxis_type xaxis_width xlabel'\n    + ' xlabel_secondary xlength xrange xrange_secondary xtics xtics_axis xtics_rotate'\n    + ' xtics_rotate_secondary xtics_secondary xtics_secondary_axis xu_grid x_voxel'\n    + ' xy_file xyplane xy_scale yaxis yaxis_color yaxis_secondary yaxis_type yaxis_width'\n    + ' ylabel ylabel_secondary ylength yrange yrange_secondary ytics ytics_axis'\n    + ' ytics_rotate ytics_rotate_secondary ytics_secondary ytics_secondary_axis'\n    + ' yv_grid y_voxel yx_ratio zaxis zaxis_color zaxis_type zaxis_width zeroa zerob'\n    + ' zerobern zeta%pi zlabel zlabel_rotate zlength zmin zn_primroot_limit zn_primroot_pretest';\n  const SYMBOLS = '_ __ %|0 %%|0';\n\n  return {\n    name: 'Maxima',\n    keywords: {\n      $pattern: '[A-Za-z_%][0-9A-Za-z_%]*',\n      keyword: KEYWORDS,\n      literal: LITERALS,\n      built_in: BUILTIN_FUNCTIONS,\n      symbol: SYMBOLS\n    },\n    contains: [\n      {\n        className: 'comment',\n        begin: '/\\\\*',\n        end: '\\\\*/',\n        contains: [ 'self' ]\n      },\n      hljs.QUOTE_STRING_MODE,\n      {\n        className: 'number',\n        relevance: 0,\n        variants: [\n          {\n            // float number w/ exponent\n            // hmm, I wonder if we ought to include other exponent markers?\n            begin: '\\\\b(\\\\d+|\\\\d+\\\\.|\\\\.\\\\d+|\\\\d+\\\\.\\\\d+)[Ee][-+]?\\\\d+\\\\b' },\n          {\n            // bigfloat number\n            begin: '\\\\b(\\\\d+|\\\\d+\\\\.|\\\\.\\\\d+|\\\\d+\\\\.\\\\d+)[Bb][-+]?\\\\d+\\\\b',\n            relevance: 10\n          },\n          {\n            // float number w/out exponent\n            // Doesn't seem to recognize floats which start with '.'\n            begin: '\\\\b(\\\\.\\\\d+|\\\\d+\\\\.\\\\d+)\\\\b' },\n          {\n            // integer in base up to 36\n            // Doesn't seem to recognize integers which end with '.'\n            begin: '\\\\b(\\\\d+|0[0-9A-Za-z]+)\\\\.?\\\\b' }\n        ]\n      }\n    ],\n    illegal: /@/\n  };\n}\n\nmodule.exports = maxima;\n","/*\nLanguage: MEL\nDescription: Maya Embedded Language\nAuthor: Shuen-Huei Guan <drake.guan@gmail.com>\nWebsite: http://www.autodesk.com/products/autodesk-maya/overview\nCategory: graphics\n*/\n\nfunction mel(hljs) {\n  return {\n    name: 'MEL',\n    keywords:\n      'int float string vector matrix if else switch case default while do for in break '\n      + 'continue global proc return about abs addAttr addAttributeEditorNodeHelp addDynamic '\n      + 'addNewShelfTab addPP addPanelCategory addPrefixToName advanceToNextDrivenKey '\n      + 'affectedNet affects aimConstraint air alias aliasAttr align alignCtx alignCurve '\n      + 'alignSurface allViewFit ambientLight angle angleBetween animCone animCurveEditor '\n      + 'animDisplay animView annotate appendStringArray applicationName applyAttrPreset '\n      + 'applyTake arcLenDimContext arcLengthDimension arclen arrayMapper art3dPaintCtx '\n      + 'artAttrCtx artAttrPaintVertexCtx artAttrSkinPaintCtx artAttrTool artBuildPaintMenu '\n      + 'artFluidAttrCtx artPuttyCtx artSelectCtx artSetPaintCtx artUserPaintCtx assignCommand '\n      + 'assignInputDevice assignViewportFactories attachCurve attachDeviceAttr attachSurface '\n      + 'attrColorSliderGrp attrCompatibility attrControlGrp attrEnumOptionMenu '\n      + 'attrEnumOptionMenuGrp attrFieldGrp attrFieldSliderGrp attrNavigationControlGrp '\n      + 'attrPresetEditWin attributeExists attributeInfo attributeMenu attributeQuery '\n      + 'autoKeyframe autoPlace bakeClip bakeFluidShading bakePartialHistory bakeResults '\n      + 'bakeSimulation basename basenameEx batchRender bessel bevel bevelPlus binMembership '\n      + 'bindSkin blend2 blendShape blendShapeEditor blendShapePanel blendTwoAttr blindDataType '\n      + 'boneLattice boundary boxDollyCtx boxZoomCtx bufferCurve buildBookmarkMenu '\n      + 'buildKeyframeMenu button buttonManip CBG cacheFile cacheFileCombine cacheFileMerge '\n      + 'cacheFileTrack camera cameraView canCreateManip canvas capitalizeString catch '\n      + 'catchQuiet ceil changeSubdivComponentDisplayLevel changeSubdivRegion channelBox '\n      + 'character characterMap characterOutlineEditor characterize chdir checkBox checkBoxGrp '\n      + 'checkDefaultRenderGlobals choice circle circularFillet clamp clear clearCache clip '\n      + 'clipEditor clipEditorCurrentTimeCtx clipSchedule clipSchedulerOutliner clipTrimBefore '\n      + 'closeCurve closeSurface cluster cmdFileOutput cmdScrollFieldExecuter '\n      + 'cmdScrollFieldReporter cmdShell coarsenSubdivSelectionList collision color '\n      + 'colorAtPoint colorEditor colorIndex colorIndexSliderGrp colorSliderButtonGrp '\n      + 'colorSliderGrp columnLayout commandEcho commandLine commandPort compactHairSystem '\n      + 'componentEditor compositingInterop computePolysetVolume condition cone confirmDialog '\n      + 'connectAttr connectControl connectDynamic connectJoint connectionInfo constrain '\n      + 'constrainValue constructionHistory container containsMultibyte contextInfo control '\n      + 'convertFromOldLayers convertIffToPsd convertLightmap convertSolidTx convertTessellation '\n      + 'convertUnit copyArray copyFlexor copyKey copySkinWeights cos cpButton cpCache '\n      + 'cpClothSet cpCollision cpConstraint cpConvClothToMesh cpForces cpGetSolverAttr cpPanel '\n      + 'cpProperty cpRigidCollisionFilter cpSeam cpSetEdit cpSetSolverAttr cpSolver '\n      + 'cpSolverTypes cpTool cpUpdateClothUVs createDisplayLayer createDrawCtx createEditor '\n      + 'createLayeredPsdFile createMotionField createNewShelf createNode createRenderLayer '\n      + 'createSubdivRegion cross crossProduct ctxAbort ctxCompletion ctxEditMode ctxTraverse '\n      + 'currentCtx currentTime currentTimeCtx currentUnit curve curveAddPtCtx '\n      + 'curveCVCtx curveEPCtx curveEditorCtx curveIntersect curveMoveEPCtx curveOnSurface '\n      + 'curveSketchCtx cutKey cycleCheck cylinder dagPose date defaultLightListCheckBox '\n      + 'defaultNavigation defineDataServer defineVirtualDevice deformer deg_to_rad delete '\n      + 'deleteAttr deleteShadingGroupsAndMaterials deleteShelfTab deleteUI deleteUnusedBrushes '\n      + 'delrandstr detachCurve detachDeviceAttr detachSurface deviceEditor devicePanel dgInfo '\n      + 'dgdirty dgeval dgtimer dimWhen directKeyCtx directionalLight dirmap dirname disable '\n      + 'disconnectAttr disconnectJoint diskCache displacementToPoly displayAffected '\n      + 'displayColor displayCull displayLevelOfDetail displayPref displayRGBColor '\n      + 'displaySmoothness displayStats displayString displaySurface distanceDimContext '\n      + 'distanceDimension doBlur dolly dollyCtx dopeSheetEditor dot dotProduct '\n      + 'doubleProfileBirailSurface drag dragAttrContext draggerContext dropoffLocator '\n      + 'duplicate duplicateCurve duplicateSurface dynCache dynControl dynExport dynExpression '\n      + 'dynGlobals dynPaintEditor dynParticleCtx dynPref dynRelEdPanel dynRelEditor '\n      + 'dynamicLoad editAttrLimits editDisplayLayerGlobals editDisplayLayerMembers '\n      + 'editRenderLayerAdjustment editRenderLayerGlobals editRenderLayerMembers editor '\n      + 'editorTemplate effector emit emitter enableDevice encodeString endString endsWith env '\n      + 'equivalent equivalentTol erf error eval evalDeferred evalEcho event '\n      + 'exactWorldBoundingBox exclusiveLightCheckBox exec executeForEachObject exists exp '\n      + 'expression expressionEditorListen extendCurve extendSurface extrude fcheck fclose feof '\n      + 'fflush fgetline fgetword file fileBrowserDialog fileDialog fileExtension fileInfo '\n      + 'filetest filletCurve filter filterCurve filterExpand filterStudioImport '\n      + 'findAllIntersections findAnimCurves findKeyframe findMenuItem findRelatedSkinCluster '\n      + 'finder firstParentOf fitBspline flexor floatEq floatField floatFieldGrp floatScrollBar '\n      + 'floatSlider floatSlider2 floatSliderButtonGrp floatSliderGrp floor flow fluidCacheInfo '\n      + 'fluidEmitter fluidVoxelInfo flushUndo fmod fontDialog fopen formLayout format fprint '\n      + 'frameLayout fread freeFormFillet frewind fromNativePath fwrite gamma gauss '\n      + 'geometryConstraint getApplicationVersionAsFloat getAttr getClassification '\n      + 'getDefaultBrush getFileList getFluidAttr getInputDeviceRange getMayaPanelTypes '\n      + 'getModifiers getPanel getParticleAttr getPluginResource getenv getpid glRender '\n      + 'glRenderEditor globalStitch gmatch goal gotoBindPose grabColor gradientControl '\n      + 'gradientControlNoAttr graphDollyCtx graphSelectContext graphTrackCtx gravity grid '\n      + 'gridLayout group groupObjectsByName HfAddAttractorToAS HfAssignAS HfBuildEqualMap '\n      + 'HfBuildFurFiles HfBuildFurImages HfCancelAFR HfConnectASToHF HfCreateAttractor '\n      + 'HfDeleteAS HfEditAS HfPerformCreateAS HfRemoveAttractorFromAS HfSelectAttached '\n      + 'HfSelectAttractors HfUnAssignAS hardenPointCurve hardware hardwareRenderPanel '\n      + 'headsUpDisplay headsUpMessage help helpLine hermite hide hilite hitTest hotBox hotkey '\n      + 'hotkeyCheck hsv_to_rgb hudButton hudSlider hudSliderButton hwReflectionMap hwRender '\n      + 'hwRenderLoad hyperGraph hyperPanel hyperShade hypot iconTextButton iconTextCheckBox '\n      + 'iconTextRadioButton iconTextRadioCollection iconTextScrollList iconTextStaticLabel '\n      + 'ikHandle ikHandleCtx ikHandleDisplayScale ikSolver ikSplineHandleCtx ikSystem '\n      + 'ikSystemInfo ikfkDisplayMethod illustratorCurves image imfPlugins inheritTransform '\n      + 'insertJoint insertJointCtx insertKeyCtx insertKnotCurve insertKnotSurface instance '\n      + 'instanceable instancer intField intFieldGrp intScrollBar intSlider intSliderGrp '\n      + 'interToUI internalVar intersect iprEngine isAnimCurve isConnected isDirty isParentOf '\n      + 'isSameObject isTrue isValidObjectName isValidString isValidUiName isolateSelect '\n      + 'itemFilter itemFilterAttr itemFilterRender itemFilterType joint jointCluster jointCtx '\n      + 'jointDisplayScale jointLattice keyTangent keyframe keyframeOutliner '\n      + 'keyframeRegionCurrentTimeCtx keyframeRegionDirectKeyCtx keyframeRegionDollyCtx '\n      + 'keyframeRegionInsertKeyCtx keyframeRegionMoveKeyCtx keyframeRegionScaleKeyCtx '\n      + 'keyframeRegionSelectKeyCtx keyframeRegionSetKeyCtx keyframeRegionTrackCtx '\n      + 'keyframeStats lassoContext lattice latticeDeformKeyCtx launch launchImageEditor '\n      + 'layerButton layeredShaderPort layeredTexturePort layout layoutDialog lightList '\n      + 'lightListEditor lightListPanel lightlink lineIntersection linearPrecision linstep '\n      + 'listAnimatable listAttr listCameras listConnections listDeviceAttachments listHistory '\n      + 'listInputDeviceAxes listInputDeviceButtons listInputDevices listMenuAnnotation '\n      + 'listNodeTypes listPanelCategories listRelatives listSets listTransforms '\n      + 'listUnselected listerEditor loadFluid loadNewShelf loadPlugin '\n      + 'loadPluginLanguageResources loadPrefObjects localizedPanelLabel lockNode loft log '\n      + 'longNameOf lookThru ls lsThroughFilter lsType lsUI Mayatomr mag makeIdentity makeLive '\n      + 'makePaintable makeRoll makeSingleSurface makeTubeOn makebot manipMoveContext '\n      + 'manipMoveLimitsCtx manipOptions manipRotateContext manipRotateLimitsCtx '\n      + 'manipScaleContext manipScaleLimitsCtx marker match max memory menu menuBarLayout '\n      + 'menuEditor menuItem menuItemToShelf menuSet menuSetPref messageLine min minimizeApp '\n      + 'mirrorJoint modelCurrentTimeCtx modelEditor modelPanel mouse movIn movOut move '\n      + 'moveIKtoFK moveKeyCtx moveVertexAlongDirection multiProfileBirailSurface mute '\n      + 'nParticle nameCommand nameField namespace namespaceInfo newPanelItems newton nodeCast '\n      + 'nodeIconButton nodeOutliner nodePreset nodeType noise nonLinear normalConstraint '\n      + 'normalize nurbsBoolean nurbsCopyUVSet nurbsCube nurbsEditUV nurbsPlane nurbsSelect '\n      + 'nurbsSquare nurbsToPoly nurbsToPolygonsPref nurbsToSubdiv nurbsToSubdivPref '\n      + 'nurbsUVSet nurbsViewDirectionVector objExists objectCenter objectLayer objectType '\n      + 'objectTypeUI obsoleteProc oceanNurbsPreviewPlane offsetCurve offsetCurveOnSurface '\n      + 'offsetSurface openGLExtension openMayaPref optionMenu optionMenuGrp optionVar orbit '\n      + 'orbitCtx orientConstraint outlinerEditor outlinerPanel overrideModifier '\n      + 'paintEffectsDisplay pairBlend palettePort paneLayout panel panelConfiguration '\n      + 'panelHistory paramDimContext paramDimension paramLocator parent parentConstraint '\n      + 'particle particleExists particleInstancer particleRenderInfo partition pasteKey '\n      + 'pathAnimation pause pclose percent performanceOptions pfxstrokes pickWalk picture '\n      + 'pixelMove planarSrf plane play playbackOptions playblast plugAttr plugNode pluginInfo '\n      + 'pluginResourceUtil pointConstraint pointCurveConstraint pointLight pointMatrixMult '\n      + 'pointOnCurve pointOnSurface pointPosition poleVectorConstraint polyAppend '\n      + 'polyAppendFacetCtx polyAppendVertex polyAutoProjection polyAverageNormal '\n      + 'polyAverageVertex polyBevel polyBlendColor polyBlindData polyBoolOp polyBridgeEdge '\n      + 'polyCacheMonitor polyCheck polyChipOff polyClipboard polyCloseBorder polyCollapseEdge '\n      + 'polyCollapseFacet polyColorBlindData polyColorDel polyColorPerVertex polyColorSet '\n      + 'polyCompare polyCone polyCopyUV polyCrease polyCreaseCtx polyCreateFacet '\n      + 'polyCreateFacetCtx polyCube polyCut polyCutCtx polyCylinder polyCylindricalProjection '\n      + 'polyDelEdge polyDelFacet polyDelVertex polyDuplicateAndConnect polyDuplicateEdge '\n      + 'polyEditUV polyEditUVShell polyEvaluate polyExtrudeEdge polyExtrudeFacet '\n      + 'polyExtrudeVertex polyFlipEdge polyFlipUV polyForceUV polyGeoSampler polyHelix '\n      + 'polyInfo polyInstallAction polyLayoutUV polyListComponentConversion polyMapCut '\n      + 'polyMapDel polyMapSew polyMapSewMove polyMergeEdge polyMergeEdgeCtx polyMergeFacet '\n      + 'polyMergeFacetCtx polyMergeUV polyMergeVertex polyMirrorFace polyMoveEdge '\n      + 'polyMoveFacet polyMoveFacetUV polyMoveUV polyMoveVertex polyNormal polyNormalPerVertex '\n      + 'polyNormalizeUV polyOptUvs polyOptions polyOutput polyPipe polyPlanarProjection '\n      + 'polyPlane polyPlatonicSolid polyPoke polyPrimitive polyPrism polyProjection '\n      + 'polyPyramid polyQuad polyQueryBlindData polyReduce polySelect polySelectConstraint '\n      + 'polySelectConstraintMonitor polySelectCtx polySelectEditCtx polySeparate '\n      + 'polySetToFaceNormal polySewEdge polyShortestPathCtx polySmooth polySoftEdge '\n      + 'polySphere polySphericalProjection polySplit polySplitCtx polySplitEdge polySplitRing '\n      + 'polySplitVertex polyStraightenUVBorder polySubdivideEdge polySubdivideFacet '\n      + 'polyToSubdiv polyTorus polyTransfer polyTriangulate polyUVSet polyUnite polyWedgeFace '\n      + 'popen popupMenu pose pow preloadRefEd print progressBar progressWindow projFileViewer '\n      + 'projectCurve projectTangent projectionContext projectionManip promptDialog propModCtx '\n      + 'propMove psdChannelOutliner psdEditTextureFile psdExport psdTextureFile putenv pwd '\n      + 'python querySubdiv quit rad_to_deg radial radioButton radioButtonGrp radioCollection '\n      + 'radioMenuItemCollection rampColorPort rand randomizeFollicles randstate rangeControl '\n      + 'readTake rebuildCurve rebuildSurface recordAttr recordDevice redo reference '\n      + 'referenceEdit referenceQuery refineSubdivSelectionList refresh refreshAE '\n      + 'registerPluginResource rehash reloadImage removeJoint removeMultiInstance '\n      + 'removePanelCategory rename renameAttr renameSelectionList renameUI render '\n      + 'renderGlobalsNode renderInfo renderLayerButton renderLayerParent '\n      + 'renderLayerPostProcess renderLayerUnparent renderManip renderPartition '\n      + 'renderQualityNode renderSettings renderThumbnailUpdate renderWindowEditor '\n      + 'renderWindowSelectContext renderer reorder reorderDeformers requires reroot '\n      + 'resampleFluid resetAE resetPfxToPolyCamera resetTool resolutionNode retarget '\n      + 'reverseCurve reverseSurface revolve rgb_to_hsv rigidBody rigidSolver roll rollCtx '\n      + 'rootOf rot rotate rotationInterpolation roundConstantRadius rowColumnLayout rowLayout '\n      + 'runTimeCommand runup sampleImage saveAllShelves saveAttrPreset saveFluid saveImage '\n      + 'saveInitialState saveMenu savePrefObjects savePrefs saveShelf saveToolSettings scale '\n      + 'scaleBrushBrightness scaleComponents scaleConstraint scaleKey scaleKeyCtx sceneEditor '\n      + 'sceneUIReplacement scmh scriptCtx scriptEditorInfo scriptJob scriptNode scriptTable '\n      + 'scriptToShelf scriptedPanel scriptedPanelType scrollField scrollLayout sculpt '\n      + 'searchPathArray seed selLoadSettings select selectContext selectCurveCV selectKey '\n      + 'selectKeyCtx selectKeyframeRegionCtx selectMode selectPref selectPriority selectType '\n      + 'selectedNodes selectionConnection separator setAttr setAttrEnumResource '\n      + 'setAttrMapping setAttrNiceNameResource setConstraintRestPosition '\n      + 'setDefaultShadingGroup setDrivenKeyframe setDynamic setEditCtx setEditor setFluidAttr '\n      + 'setFocus setInfinity setInputDeviceMapping setKeyCtx setKeyPath setKeyframe '\n      + 'setKeyframeBlendshapeTargetWts setMenuMode setNodeNiceNameResource setNodeTypeFlag '\n      + 'setParent setParticleAttr setPfxToPolyCamera setPluginResource setProject '\n      + 'setStampDensity setStartupMessage setState setToolTo setUITemplate setXformManip sets '\n      + 'shadingConnection shadingGeometryRelCtx shadingLightRelCtx shadingNetworkCompare '\n      + 'shadingNode shapeCompare shelfButton shelfLayout shelfTabLayout shellField '\n      + 'shortNameOf showHelp showHidden showManipCtx showSelectionInTitle '\n      + 'showShadingGroupAttrEditor showWindow sign simplify sin singleProfileBirailSurface '\n      + 'size sizeBytes skinCluster skinPercent smoothCurve smoothTangentSurface smoothstep '\n      + 'snap2to2 snapKey snapMode snapTogetherCtx snapshot soft softMod softModCtx sort sound '\n      + 'soundControl source spaceLocator sphere sphrand spotLight spotLightPreviewPort '\n      + 'spreadSheetEditor spring sqrt squareSurface srtContext stackTrace startString '\n      + 'startsWith stitchAndExplodeShell stitchSurface stitchSurfacePoints strcmp '\n      + 'stringArrayCatenate stringArrayContains stringArrayCount stringArrayInsertAtIndex '\n      + 'stringArrayIntersector stringArrayRemove stringArrayRemoveAtIndex '\n      + 'stringArrayRemoveDuplicates stringArrayRemoveExact stringArrayToString '\n      + 'stringToStringArray strip stripPrefixFromName stroke subdAutoProjection '\n      + 'subdCleanTopology subdCollapse subdDuplicateAndConnect subdEditUV '\n      + 'subdListComponentConversion subdMapCut subdMapSewMove subdMatchTopology subdMirror '\n      + 'subdToBlind subdToPoly subdTransferUVsToCache subdiv subdivCrease '\n      + 'subdivDisplaySmoothness substitute substituteAllString substituteGeometry substring '\n      + 'surface surfaceSampler surfaceShaderList swatchDisplayPort switchTable symbolButton '\n      + 'symbolCheckBox sysFile system tabLayout tan tangentConstraint texLatticeDeformContext '\n      + 'texManipContext texMoveContext texMoveUVShellContext texRotateContext texScaleContext '\n      + 'texSelectContext texSelectShortestPathCtx texSmudgeUVContext texWinToolCtx text '\n      + 'textCurves textField textFieldButtonGrp textFieldGrp textManip textScrollList '\n      + 'textToShelf textureDisplacePlane textureHairColor texturePlacementContext '\n      + 'textureWindow threadCount threePointArcCtx timeControl timePort timerX toNativePath '\n      + 'toggle toggleAxis toggleWindowVisibility tokenize tokenizeList tolerance tolower '\n      + 'toolButton toolCollection toolDropped toolHasOptions toolPropertyWindow torus toupper '\n      + 'trace track trackCtx transferAttributes transformCompare transformLimits translator '\n      + 'trim trunc truncateFluidCache truncateHairCache tumble tumbleCtx turbulence '\n      + 'twoPointArcCtx uiRes uiTemplate unassignInputDevice undo undoInfo ungroup uniform unit '\n      + 'unloadPlugin untangleUV untitledFileName untrim upAxis updateAE userCtx uvLink '\n      + 'uvSnapshot validateShelfName vectorize view2dToolCtx viewCamera viewClipPlane '\n      + 'viewFit viewHeadOn viewLookAt viewManip viewPlace viewSet visor volumeAxis vortex '\n      + 'waitCursor warning webBrowser webBrowserPrefs whatIs window windowPref wire '\n      + 'wireContext workspace wrinkle wrinkleContext writeTake xbmLangPathList xform',\n    illegal: '</',\n    contains: [\n      hljs.C_NUMBER_MODE,\n      hljs.APOS_STRING_MODE,\n      hljs.QUOTE_STRING_MODE,\n      {\n        className: 'string',\n        begin: '`',\n        end: '`',\n        contains: [ hljs.BACKSLASH_ESCAPE ]\n      },\n      { // eats variables\n        begin: /[$%@](\\^\\w\\b|#\\w+|[^\\s\\w{]|\\{\\w+\\}|\\w+)/ },\n      hljs.C_LINE_COMMENT_MODE,\n      hljs.C_BLOCK_COMMENT_MODE\n    ]\n  };\n}\n\nmodule.exports = mel;\n","/*\nLanguage: Mercury\nAuthor: mucaho <mkucko@gmail.com>\nDescription: Mercury is a logic/functional programming language which combines the clarity and expressiveness of declarative programming with advanced static analysis and error detection features.\nWebsite: https://www.mercurylang.org\nCategory: functional\n*/\n\nfunction mercury(hljs) {\n  const KEYWORDS = {\n    keyword:\n      'module use_module import_module include_module end_module initialise '\n      + 'mutable initialize finalize finalise interface implementation pred '\n      + 'mode func type inst solver any_pred any_func is semidet det nondet '\n      + 'multi erroneous failure cc_nondet cc_multi typeclass instance where '\n      + 'pragma promise external trace atomic or_else require_complete_switch '\n      + 'require_det require_semidet require_multi require_nondet '\n      + 'require_cc_multi require_cc_nondet require_erroneous require_failure',\n    meta:\n      // pragma\n      'inline no_inline type_spec source_file fact_table obsolete memo '\n      + 'loop_check minimal_model terminates does_not_terminate '\n      + 'check_termination promise_equivalent_clauses '\n      // preprocessor\n      + 'foreign_proc foreign_decl foreign_code foreign_type '\n      + 'foreign_import_module foreign_export_enum foreign_export '\n      + 'foreign_enum may_call_mercury will_not_call_mercury thread_safe '\n      + 'not_thread_safe maybe_thread_safe promise_pure promise_semipure '\n      + 'tabled_for_io local untrailed trailed attach_to_io_state '\n      + 'can_pass_as_mercury_type stable will_not_throw_exception '\n      + 'may_modify_trail will_not_modify_trail may_duplicate '\n      + 'may_not_duplicate affects_liveness does_not_affect_liveness '\n      + 'doesnt_affect_liveness no_sharing unknown_sharing sharing',\n    built_in:\n      'some all not if then else true fail false try catch catch_any '\n      + 'semidet_true semidet_false semidet_fail impure_true impure semipure'\n  };\n\n  const COMMENT = hljs.COMMENT('%', '$');\n\n  const NUMCODE = {\n    className: 'number',\n    begin: \"0'.\\\\|0[box][0-9a-fA-F]*\"\n  };\n\n  const ATOM = hljs.inherit(hljs.APOS_STRING_MODE, { relevance: 0 });\n  const STRING = hljs.inherit(hljs.QUOTE_STRING_MODE, { relevance: 0 });\n  const STRING_FMT = {\n    className: 'subst',\n    begin: '\\\\\\\\[abfnrtv]\\\\|\\\\\\\\x[0-9a-fA-F]*\\\\\\\\\\\\|%[-+# *.0-9]*[dioxXucsfeEgGp]',\n    relevance: 0\n  };\n  STRING.contains = STRING.contains.slice(); // we need our own copy of contains\n  STRING.contains.push(STRING_FMT);\n\n  const IMPLICATION = {\n    className: 'built_in',\n    variants: [\n      { begin: '<=>' },\n      {\n        begin: '<=',\n        relevance: 0\n      },\n      {\n        begin: '=>',\n        relevance: 0\n      },\n      { begin: '/\\\\\\\\' },\n      { begin: '\\\\\\\\/' }\n    ]\n  };\n\n  const HEAD_BODY_CONJUNCTION = {\n    className: 'built_in',\n    variants: [\n      { begin: ':-\\\\|-->' },\n      {\n        begin: '=',\n        relevance: 0\n      }\n    ]\n  };\n\n  return {\n    name: 'Mercury',\n    aliases: [\n      'm',\n      'moo'\n    ],\n    keywords: KEYWORDS,\n    contains: [\n      IMPLICATION,\n      HEAD_BODY_CONJUNCTION,\n      COMMENT,\n      hljs.C_BLOCK_COMMENT_MODE,\n      NUMCODE,\n      hljs.NUMBER_MODE,\n      ATOM,\n      STRING,\n      { // relevance booster\n        begin: /:-/ },\n      { // relevance booster\n        begin: /\\.$/ }\n    ]\n  };\n}\n\nmodule.exports = mercury;\n","/*\nLanguage: MIPS Assembly\nAuthor: Nebuleon Fumika <nebuleon.fumika@gmail.com>\nDescription: MIPS Assembly (up to MIPS32R2)\nWebsite: https://en.wikipedia.org/wiki/MIPS_architecture\nCategory: assembler\n*/\n\nfunction mipsasm(hljs) {\n  // local labels: %?[FB]?[AT]?\\d{1,2}\\w+\n  return {\n    name: 'MIPS Assembly',\n    case_insensitive: true,\n    aliases: [ 'mips' ],\n    keywords: {\n      $pattern: '\\\\.?' + hljs.IDENT_RE,\n      meta:\n        // GNU preprocs\n        '.2byte .4byte .align .ascii .asciz .balign .byte .code .data .else .end .endif .endm .endr .equ .err .exitm .extern .global .hword .if .ifdef .ifndef .include .irp .long .macro .rept .req .section .set .skip .space .text .word .ltorg ',\n      built_in:\n        '$0 $1 $2 $3 $4 $5 $6 $7 $8 $9 $10 $11 $12 $13 $14 $15 ' // integer registers\n        + '$16 $17 $18 $19 $20 $21 $22 $23 $24 $25 $26 $27 $28 $29 $30 $31 ' // integer registers\n        + 'zero at v0 v1 a0 a1 a2 a3 a4 a5 a6 a7 ' // integer register aliases\n        + 't0 t1 t2 t3 t4 t5 t6 t7 t8 t9 s0 s1 s2 s3 s4 s5 s6 s7 s8 ' // integer register aliases\n        + 'k0 k1 gp sp fp ra ' // integer register aliases\n        + '$f0 $f1 $f2 $f2 $f4 $f5 $f6 $f7 $f8 $f9 $f10 $f11 $f12 $f13 $f14 $f15 ' // floating-point registers\n        + '$f16 $f17 $f18 $f19 $f20 $f21 $f22 $f23 $f24 $f25 $f26 $f27 $f28 $f29 $f30 $f31 ' // floating-point registers\n        + 'Context Random EntryLo0 EntryLo1 Context PageMask Wired EntryHi ' // Coprocessor 0 registers\n        + 'HWREna BadVAddr Count Compare SR IntCtl SRSCtl SRSMap Cause EPC PRId ' // Coprocessor 0 registers\n        + 'EBase Config Config1 Config2 Config3 LLAddr Debug DEPC DESAVE CacheErr ' // Coprocessor 0 registers\n        + 'ECC ErrorEPC TagLo DataLo TagHi DataHi WatchLo WatchHi PerfCtl PerfCnt ' // Coprocessor 0 registers\n    },\n    contains: [\n      {\n        className: 'keyword',\n        begin: '\\\\b(' // mnemonics\n            // 32-bit integer instructions\n            + 'addi?u?|andi?|b(al)?|beql?|bgez(al)?l?|bgtzl?|blezl?|bltz(al)?l?|'\n            + 'bnel?|cl[oz]|divu?|ext|ins|j(al)?|jalr(\\\\.hb)?|jr(\\\\.hb)?|lbu?|lhu?|'\n            + 'll|lui|lw[lr]?|maddu?|mfhi|mflo|movn|movz|move|msubu?|mthi|mtlo|mul|'\n            + 'multu?|nop|nor|ori?|rotrv?|sb|sc|se[bh]|sh|sllv?|slti?u?|srav?|'\n            + 'srlv?|subu?|sw[lr]?|xori?|wsbh|'\n            // floating-point instructions\n            + 'abs\\\\.[sd]|add\\\\.[sd]|alnv.ps|bc1[ft]l?|'\n            + 'c\\\\.(s?f|un|u?eq|[ou]lt|[ou]le|ngle?|seq|l[et]|ng[et])\\\\.[sd]|'\n            + '(ceil|floor|round|trunc)\\\\.[lw]\\\\.[sd]|cfc1|cvt\\\\.d\\\\.[lsw]|'\n            + 'cvt\\\\.l\\\\.[dsw]|cvt\\\\.ps\\\\.s|cvt\\\\.s\\\\.[dlw]|cvt\\\\.s\\\\.p[lu]|cvt\\\\.w\\\\.[dls]|'\n            + 'div\\\\.[ds]|ldx?c1|luxc1|lwx?c1|madd\\\\.[sd]|mfc1|mov[fntz]?\\\\.[ds]|'\n            + 'msub\\\\.[sd]|mth?c1|mul\\\\.[ds]|neg\\\\.[ds]|nmadd\\\\.[ds]|nmsub\\\\.[ds]|'\n            + 'p[lu][lu]\\\\.ps|recip\\\\.fmt|r?sqrt\\\\.[ds]|sdx?c1|sub\\\\.[ds]|suxc1|'\n            + 'swx?c1|'\n            // system control instructions\n            + 'break|cache|d?eret|[de]i|ehb|mfc0|mtc0|pause|prefx?|rdhwr|'\n            + 'rdpgpr|sdbbp|ssnop|synci?|syscall|teqi?|tgei?u?|tlb(p|r|w[ir])|'\n            + 'tlti?u?|tnei?|wait|wrpgpr'\n        + ')',\n        end: '\\\\s'\n      },\n      // lines ending with ; or # aren't really comments, probably auto-detect fail\n      hljs.COMMENT('[;#](?!\\\\s*$)', '$'),\n      hljs.C_BLOCK_COMMENT_MODE,\n      hljs.QUOTE_STRING_MODE,\n      {\n        className: 'string',\n        begin: '\\'',\n        end: '[^\\\\\\\\]\\'',\n        relevance: 0\n      },\n      {\n        className: 'title',\n        begin: '\\\\|',\n        end: '\\\\|',\n        illegal: '\\\\n',\n        relevance: 0\n      },\n      {\n        className: 'number',\n        variants: [\n          { // hex\n            begin: '0x[0-9a-f]+' },\n          { // bare number\n            begin: '\\\\b-?\\\\d+' }\n        ],\n        relevance: 0\n      },\n      {\n        className: 'symbol',\n        variants: [\n          { // GNU MIPS syntax\n            begin: '^\\\\s*[a-z_\\\\.\\\\$][a-z0-9_\\\\.\\\\$]+:' },\n          { // numbered local labels\n            begin: '^\\\\s*[0-9]+:' },\n          { // number local label reference (backwards, forwards)\n            begin: '[0-9]+[bf]' }\n        ],\n        relevance: 0\n      }\n    ],\n    // forward slashes are not allowed\n    illegal: /\\//\n  };\n}\n\nmodule.exports = mipsasm;\n","/*\nLanguage: Mizar\nDescription: The Mizar Language is a formal language derived from the mathematical vernacular.\nAuthor: Kelley van Evert <kelleyvanevert@gmail.com>\nWebsite: http://mizar.org/language/\nCategory: scientific\n*/\n\nfunction mizar(hljs) {\n  return {\n    name: 'Mizar',\n    keywords:\n      'environ vocabularies notations constructors definitions '\n      + 'registrations theorems schemes requirements begin end definition '\n      + 'registration cluster existence pred func defpred deffunc theorem '\n      + 'proof let take assume then thus hence ex for st holds consider '\n      + 'reconsider such that and in provided of as from be being by means '\n      + 'equals implies iff redefine define now not or attr is mode '\n      + 'suppose per cases set thesis contradiction scheme reserve struct '\n      + 'correctness compatibility coherence symmetry assymetry '\n      + 'reflexivity irreflexivity connectedness uniqueness commutativity '\n      + 'idempotence involutiveness projectivity',\n    contains: [ hljs.COMMENT('::', '$') ]\n  };\n}\n\nmodule.exports = mizar;\n","/*\nLanguage: Perl\nAuthor: Peter Leonov <gojpeg@yandex.ru>\nWebsite: https://www.perl.org\nCategory: common\n*/\n\n/** @type LanguageFn */\nfunction perl(hljs) {\n  const regex = hljs.regex;\n  const KEYWORDS = [\n    'abs',\n    'accept',\n    'alarm',\n    'and',\n    'atan2',\n    'bind',\n    'binmode',\n    'bless',\n    'break',\n    'caller',\n    'chdir',\n    'chmod',\n    'chomp',\n    'chop',\n    'chown',\n    'chr',\n    'chroot',\n    'class',\n    'close',\n    'closedir',\n    'connect',\n    'continue',\n    'cos',\n    'crypt',\n    'dbmclose',\n    'dbmopen',\n    'defined',\n    'delete',\n    'die',\n    'do',\n    'dump',\n    'each',\n    'else',\n    'elsif',\n    'endgrent',\n    'endhostent',\n    'endnetent',\n    'endprotoent',\n    'endpwent',\n    'endservent',\n    'eof',\n    'eval',\n    'exec',\n    'exists',\n    'exit',\n    'exp',\n    'fcntl',\n    'field',\n    'fileno',\n    'flock',\n    'for',\n    'foreach',\n    'fork',\n    'format',\n    'formline',\n    'getc',\n    'getgrent',\n    'getgrgid',\n    'getgrnam',\n    'gethostbyaddr',\n    'gethostbyname',\n    'gethostent',\n    'getlogin',\n    'getnetbyaddr',\n    'getnetbyname',\n    'getnetent',\n    'getpeername',\n    'getpgrp',\n    'getpriority',\n    'getprotobyname',\n    'getprotobynumber',\n    'getprotoent',\n    'getpwent',\n    'getpwnam',\n    'getpwuid',\n    'getservbyname',\n    'getservbyport',\n    'getservent',\n    'getsockname',\n    'getsockopt',\n    'given',\n    'glob',\n    'gmtime',\n    'goto',\n    'grep',\n    'gt',\n    'hex',\n    'if',\n    'index',\n    'int',\n    'ioctl',\n    'join',\n    'keys',\n    'kill',\n    'last',\n    'lc',\n    'lcfirst',\n    'length',\n    'link',\n    'listen',\n    'local',\n    'localtime',\n    'log',\n    'lstat',\n    'lt',\n    'ma',\n    'map',\n    'method',\n    'mkdir',\n    'msgctl',\n    'msgget',\n    'msgrcv',\n    'msgsnd',\n    'my',\n    'ne',\n    'next',\n    'no',\n    'not',\n    'oct',\n    'open',\n    'opendir',\n    'or',\n    'ord',\n    'our',\n    'pack',\n    'package',\n    'pipe',\n    'pop',\n    'pos',\n    'print',\n    'printf',\n    'prototype',\n    'push',\n    'q|0',\n    'qq',\n    'quotemeta',\n    'qw',\n    'qx',\n    'rand',\n    'read',\n    'readdir',\n    'readline',\n    'readlink',\n    'readpipe',\n    'recv',\n    'redo',\n    'ref',\n    'rename',\n    'require',\n    'reset',\n    'return',\n    'reverse',\n    'rewinddir',\n    'rindex',\n    'rmdir',\n    'say',\n    'scalar',\n    'seek',\n    'seekdir',\n    'select',\n    'semctl',\n    'semget',\n    'semop',\n    'send',\n    'setgrent',\n    'sethostent',\n    'setnetent',\n    'setpgrp',\n    'setpriority',\n    'setprotoent',\n    'setpwent',\n    'setservent',\n    'setsockopt',\n    'shift',\n    'shmctl',\n    'shmget',\n    'shmread',\n    'shmwrite',\n    'shutdown',\n    'sin',\n    'sleep',\n    'socket',\n    'socketpair',\n    'sort',\n    'splice',\n    'split',\n    'sprintf',\n    'sqrt',\n    'srand',\n    'stat',\n    'state',\n    'study',\n    'sub',\n    'substr',\n    'symlink',\n    'syscall',\n    'sysopen',\n    'sysread',\n    'sysseek',\n    'system',\n    'syswrite',\n    'tell',\n    'telldir',\n    'tie',\n    'tied',\n    'time',\n    'times',\n    'tr',\n    'truncate',\n    'uc',\n    'ucfirst',\n    'umask',\n    'undef',\n    'unless',\n    'unlink',\n    'unpack',\n    'unshift',\n    'untie',\n    'until',\n    'use',\n    'utime',\n    'values',\n    'vec',\n    'wait',\n    'waitpid',\n    'wantarray',\n    'warn',\n    'when',\n    'while',\n    'write',\n    'x|0',\n    'xor',\n    'y|0'\n  ];\n\n  // https://perldoc.perl.org/perlre#Modifiers\n  const REGEX_MODIFIERS = /[dualxmsipngr]{0,12}/; // aa and xx are valid, making max length 12\n  const PERL_KEYWORDS = {\n    $pattern: /[\\w.]+/,\n    keyword: KEYWORDS.join(\" \")\n  };\n  const SUBST = {\n    className: 'subst',\n    begin: '[$@]\\\\{',\n    end: '\\\\}',\n    keywords: PERL_KEYWORDS\n  };\n  const METHOD = {\n    begin: /->\\{/,\n    end: /\\}/\n    // contains defined later\n  };\n  const ATTR = {\n    scope: 'attr',\n    match: /\\s+:\\s*\\w+(\\s*\\(.*?\\))?/,\n  };\n  const VAR = {\n    scope: 'variable',\n    variants: [\n      { begin: /\\$\\d/ },\n      { begin: regex.concat(\n        /[$%@](?!\")(\\^\\w\\b|#\\w+(::\\w+)*|\\{\\w+\\}|\\w+(::\\w*)*)/,\n        // negative look-ahead tries to avoid matching patterns that are not\n        // Perl at all like $ident$, @ident@, etc.\n        `(?![A-Za-z])(?![@$%])`\n        )\n      },\n      {\n        // Only $= is a special Perl variable and one can't declare @= or %=.\n        begin: /[$%@](?!\")[^\\s\\w{=]|\\$=/,\n        relevance: 0\n      }\n    ],\n    contains: [ ATTR ],\n  };\n  const NUMBER = {\n    className: 'number',\n    variants: [\n      // decimal numbers:\n      // include the case where a number starts with a dot (eg. .9), and\n      // the leading 0? avoids mixing the first and second match on 0.x cases\n      { match: /0?\\.[0-9][0-9_]+\\b/ },\n      // include the special versioned number (eg. v5.38)\n      { match: /\\bv?(0|[1-9][0-9_]*(\\.[0-9_]+)?|[1-9][0-9_]*)\\b/ },\n      // non-decimal numbers:\n      { match: /\\b0[0-7][0-7_]*\\b/ },\n      { match: /\\b0x[0-9a-fA-F][0-9a-fA-F_]*\\b/ },\n      { match: /\\b0b[0-1][0-1_]*\\b/ },\n    ],\n    relevance: 0\n  };\n  const STRING_CONTAINS = [\n    hljs.BACKSLASH_ESCAPE,\n    SUBST,\n    VAR\n  ];\n  const REGEX_DELIMS = [\n    /!/,\n    /\\//,\n    /\\|/,\n    /\\?/,\n    /'/,\n    /\"/, // valid but infrequent and weird\n    /#/ // valid but infrequent and weird\n  ];\n  /**\n   * @param {string|RegExp} prefix\n   * @param {string|RegExp} open\n   * @param {string|RegExp} close\n   */\n  const PAIRED_DOUBLE_RE = (prefix, open, close = '\\\\1') => {\n    const middle = (close === '\\\\1')\n      ? close\n      : regex.concat(close, open);\n    return regex.concat(\n      regex.concat(\"(?:\", prefix, \")\"),\n      open,\n      /(?:\\\\.|[^\\\\\\/])*?/,\n      middle,\n      /(?:\\\\.|[^\\\\\\/])*?/,\n      close,\n      REGEX_MODIFIERS\n    );\n  };\n  /**\n   * @param {string|RegExp} prefix\n   * @param {string|RegExp} open\n   * @param {string|RegExp} close\n   */\n  const PAIRED_RE = (prefix, open, close) => {\n    return regex.concat(\n      regex.concat(\"(?:\", prefix, \")\"),\n      open,\n      /(?:\\\\.|[^\\\\\\/])*?/,\n      close,\n      REGEX_MODIFIERS\n    );\n  };\n  const PERL_DEFAULT_CONTAINS = [\n    VAR,\n    hljs.HASH_COMMENT_MODE,\n    hljs.COMMENT(\n      /^=\\w/,\n      /=cut/,\n      { endsWithParent: true }\n    ),\n    METHOD,\n    {\n      className: 'string',\n      contains: STRING_CONTAINS,\n      variants: [\n        {\n          begin: 'q[qwxr]?\\\\s*\\\\(',\n          end: '\\\\)',\n          relevance: 5\n        },\n        {\n          begin: 'q[qwxr]?\\\\s*\\\\[',\n          end: '\\\\]',\n          relevance: 5\n        },\n        {\n          begin: 'q[qwxr]?\\\\s*\\\\{',\n          end: '\\\\}',\n          relevance: 5\n        },\n        {\n          begin: 'q[qwxr]?\\\\s*\\\\|',\n          end: '\\\\|',\n          relevance: 5\n        },\n        {\n          begin: 'q[qwxr]?\\\\s*<',\n          end: '>',\n          relevance: 5\n        },\n        {\n          begin: 'qw\\\\s+q',\n          end: 'q',\n          relevance: 5\n        },\n        {\n          begin: '\\'',\n          end: '\\'',\n          contains: [ hljs.BACKSLASH_ESCAPE ]\n        },\n        {\n          begin: '\"',\n          end: '\"'\n        },\n        {\n          begin: '`',\n          end: '`',\n          contains: [ hljs.BACKSLASH_ESCAPE ]\n        },\n        {\n          begin: /\\{\\w+\\}/,\n          relevance: 0\n        },\n        {\n          begin: '-?\\\\w+\\\\s*=>',\n          relevance: 0\n        }\n      ]\n    },\n    NUMBER,\n    { // regexp container\n      begin: '(\\\\/\\\\/|' + hljs.RE_STARTERS_RE + '|\\\\b(split|return|print|reverse|grep)\\\\b)\\\\s*',\n      keywords: 'split return print reverse grep',\n      relevance: 0,\n      contains: [\n        hljs.HASH_COMMENT_MODE,\n        {\n          className: 'regexp',\n          variants: [\n            // allow matching common delimiters\n            { begin: PAIRED_DOUBLE_RE(\"s|tr|y\", regex.either(...REGEX_DELIMS, { capture: true })) },\n            // and then paired delmis\n            { begin: PAIRED_DOUBLE_RE(\"s|tr|y\", \"\\\\(\", \"\\\\)\") },\n            { begin: PAIRED_DOUBLE_RE(\"s|tr|y\", \"\\\\[\", \"\\\\]\") },\n            { begin: PAIRED_DOUBLE_RE(\"s|tr|y\", \"\\\\{\", \"\\\\}\") }\n          ],\n          relevance: 2\n        },\n        {\n          className: 'regexp',\n          variants: [\n            {\n              // could be a comment in many languages so do not count\n              // as relevant\n              begin: /(m|qr)\\/\\//,\n              relevance: 0\n            },\n            // prefix is optional with /regex/\n            { begin: PAIRED_RE(\"(?:m|qr)?\", /\\//, /\\//) },\n            // allow matching common delimiters\n            { begin: PAIRED_RE(\"m|qr\", regex.either(...REGEX_DELIMS, { capture: true }), /\\1/) },\n            // allow common paired delmins\n            { begin: PAIRED_RE(\"m|qr\", /\\(/, /\\)/) },\n            { begin: PAIRED_RE(\"m|qr\", /\\[/, /\\]/) },\n            { begin: PAIRED_RE(\"m|qr\", /\\{/, /\\}/) }\n          ]\n        }\n      ]\n    },\n    {\n      className: 'function',\n      beginKeywords: 'sub method',\n      end: '(\\\\s*\\\\(.*?\\\\))?[;{]',\n      excludeEnd: true,\n      relevance: 5,\n      contains: [ hljs.TITLE_MODE, ATTR ]\n    },\n    {\n      className: 'class',\n      beginKeywords: 'class',\n      end: '[;{]',\n      excludeEnd: true,\n      relevance: 5,\n      contains: [ hljs.TITLE_MODE, ATTR, NUMBER ]\n    },\n    {\n      begin: '-\\\\w\\\\b',\n      relevance: 0\n    },\n    {\n      begin: \"^__DATA__$\",\n      end: \"^__END__$\",\n      subLanguage: 'mojolicious',\n      contains: [\n        {\n          begin: \"^@@.*\",\n          end: \"$\",\n          className: \"comment\"\n        }\n      ]\n    }\n  ];\n  SUBST.contains = PERL_DEFAULT_CONTAINS;\n  METHOD.contains = PERL_DEFAULT_CONTAINS;\n\n  return {\n    name: 'Perl',\n    aliases: [\n      'pl',\n      'pm'\n    ],\n    keywords: PERL_KEYWORDS,\n    contains: PERL_DEFAULT_CONTAINS\n  };\n}\n\nmodule.exports = perl;\n","/*\nLanguage: Mojolicious\nRequires: xml.js, perl.js\nAuthor: Dotan Dimet <dotan@corky.net>\nDescription: Mojolicious .ep (Embedded Perl) templates\nWebsite: https://mojolicious.org\nCategory: template\n*/\nfunction mojolicious(hljs) {\n  return {\n    name: 'Mojolicious',\n    subLanguage: 'xml',\n    contains: [\n      {\n        className: 'meta',\n        begin: '^__(END|DATA)__$'\n      },\n      // mojolicious line\n      {\n        begin: \"^\\\\s*%{1,2}={0,2}\",\n        end: '$',\n        subLanguage: 'perl'\n      },\n      // mojolicious block\n      {\n        begin: \"<%{1,2}={0,2}\",\n        end: \"={0,1}%>\",\n        subLanguage: 'perl',\n        excludeBegin: true,\n        excludeEnd: true\n      }\n    ]\n  };\n}\n\nmodule.exports = mojolicious;\n","/*\nLanguage: Monkey\nDescription: Monkey2 is an easy to use, cross platform, games oriented programming language from Blitz Research.\nAuthor: Arthur Bikmullin <devolonter@gmail.com>\nWebsite: https://blitzresearch.itch.io/monkey2\nCategory: gaming\n*/\n\nfunction monkey(hljs) {\n  const NUMBER = {\n    className: 'number',\n    relevance: 0,\n    variants: [\n      { begin: '[$][a-fA-F0-9]+' },\n      hljs.NUMBER_MODE\n    ]\n  };\n  const FUNC_DEFINITION = {\n    variants: [\n      { match: [\n        /(function|method)/,\n        /\\s+/,\n        hljs.UNDERSCORE_IDENT_RE,\n      ] },\n    ],\n    scope: {\n      1: \"keyword\",\n      3: \"title.function\"\n    }\n  };\n  const CLASS_DEFINITION = {\n    variants: [\n      { match: [\n        /(class|interface|extends|implements)/,\n        /\\s+/,\n        hljs.UNDERSCORE_IDENT_RE,\n      ] },\n    ],\n    scope: {\n      1: \"keyword\",\n      3: \"title.class\"\n    }\n  };\n  const BUILT_INS = [\n    \"DebugLog\",\n    \"DebugStop\",\n    \"Error\",\n    \"Print\",\n    \"ACos\",\n    \"ACosr\",\n    \"ASin\",\n    \"ASinr\",\n    \"ATan\",\n    \"ATan2\",\n    \"ATan2r\",\n    \"ATanr\",\n    \"Abs\",\n    \"Abs\",\n    \"Ceil\",\n    \"Clamp\",\n    \"Clamp\",\n    \"Cos\",\n    \"Cosr\",\n    \"Exp\",\n    \"Floor\",\n    \"Log\",\n    \"Max\",\n    \"Max\",\n    \"Min\",\n    \"Min\",\n    \"Pow\",\n    \"Sgn\",\n    \"Sgn\",\n    \"Sin\",\n    \"Sinr\",\n    \"Sqrt\",\n    \"Tan\",\n    \"Tanr\",\n    \"Seed\",\n    \"PI\",\n    \"HALFPI\",\n    \"TWOPI\"\n  ];\n  const LITERALS = [\n    \"true\",\n    \"false\",\n    \"null\"\n  ];\n  const KEYWORDS = [\n    \"public\",\n    \"private\",\n    \"property\",\n    \"continue\",\n    \"exit\",\n    \"extern\",\n    \"new\",\n    \"try\",\n    \"catch\",\n    \"eachin\",\n    \"not\",\n    \"abstract\",\n    \"final\",\n    \"select\",\n    \"case\",\n    \"default\",\n    \"const\",\n    \"local\",\n    \"global\",\n    \"field\",\n    \"end\",\n    \"if\",\n    \"then\",\n    \"else\",\n    \"elseif\",\n    \"endif\",\n    \"while\",\n    \"wend\",\n    \"repeat\",\n    \"until\",\n    \"forever\",\n    \"for\",\n    \"to\",\n    \"step\",\n    \"next\",\n    \"return\",\n    \"module\",\n    \"inline\",\n    \"throw\",\n    \"import\",\n    // not positive, but these are not literals\n    \"and\",\n    \"or\",\n    \"shl\",\n    \"shr\",\n    \"mod\"\n  ];\n\n  return {\n    name: 'Monkey',\n    case_insensitive: true,\n    keywords: {\n      keyword: KEYWORDS,\n      built_in: BUILT_INS,\n      literal: LITERALS\n    },\n    illegal: /\\/\\*/,\n    contains: [\n      hljs.COMMENT('#rem', '#end'),\n      hljs.COMMENT(\n        \"'\",\n        '$',\n        { relevance: 0 }\n      ),\n      FUNC_DEFINITION,\n      CLASS_DEFINITION,\n      {\n        className: 'variable.language',\n        begin: /\\b(self|super)\\b/\n      },\n      {\n        className: 'meta',\n        begin: /\\s*#/,\n        end: '$',\n        keywords: { keyword: 'if else elseif endif end then' }\n      },\n      {\n        match: [\n          /^\\s*/,\n          /strict\\b/\n        ],\n        scope: { 2: \"meta\" }\n      },\n      {\n        beginKeywords: 'alias',\n        end: '=',\n        contains: [ hljs.UNDERSCORE_TITLE_MODE ]\n      },\n      hljs.QUOTE_STRING_MODE,\n      NUMBER\n    ]\n  };\n}\n\nmodule.exports = monkey;\n","/*\nLanguage: MoonScript\nAuthor: Billy Quith <chinbillybilbo@gmail.com>\nDescription: MoonScript is a programming language that transcompiles to Lua.\nOrigin: coffeescript.js\nWebsite: http://moonscript.org/\nCategory: scripting\n*/\n\nfunction moonscript(hljs) {\n  const KEYWORDS = {\n    keyword:\n      // Moonscript keywords\n      'if then not for in while do return else elseif break continue switch and or '\n      + 'unless when class extends super local import export from using',\n    literal:\n      'true false nil',\n    built_in:\n      '_G _VERSION assert collectgarbage dofile error getfenv getmetatable ipairs load '\n      + 'loadfile loadstring module next pairs pcall print rawequal rawget rawset require '\n      + 'select setfenv setmetatable tonumber tostring type unpack xpcall coroutine debug '\n      + 'io math os package string table'\n  };\n  const JS_IDENT_RE = '[A-Za-z$_][0-9A-Za-z$_]*';\n  const SUBST = {\n    className: 'subst',\n    begin: /#\\{/,\n    end: /\\}/,\n    keywords: KEYWORDS\n  };\n  const EXPRESSIONS = [\n    hljs.inherit(hljs.C_NUMBER_MODE,\n      { starts: {\n        end: '(\\\\s*/)?',\n        relevance: 0\n      } }), // a number tries to eat the following slash to prevent treating it as a regexp\n    {\n      className: 'string',\n      variants: [\n        {\n          begin: /'/,\n          end: /'/,\n          contains: [ hljs.BACKSLASH_ESCAPE ]\n        },\n        {\n          begin: /\"/,\n          end: /\"/,\n          contains: [\n            hljs.BACKSLASH_ESCAPE,\n            SUBST\n          ]\n        }\n      ]\n    },\n    {\n      className: 'built_in',\n      begin: '@__' + hljs.IDENT_RE\n    },\n    { begin: '@' + hljs.IDENT_RE // relevance booster on par with CoffeeScript\n    },\n    { begin: hljs.IDENT_RE + '\\\\\\\\' + hljs.IDENT_RE // inst\\method\n    }\n  ];\n  SUBST.contains = EXPRESSIONS;\n\n  const TITLE = hljs.inherit(hljs.TITLE_MODE, { begin: JS_IDENT_RE });\n  const POSSIBLE_PARAMS_RE = '(\\\\(.*\\\\)\\\\s*)?\\\\B[-=]>';\n  const PARAMS = {\n    className: 'params',\n    begin: '\\\\([^\\\\(]',\n    returnBegin: true,\n    /* We need another contained nameless mode to not have every nested\n    pair of parens to be called \"params\" */\n    contains: [\n      {\n        begin: /\\(/,\n        end: /\\)/,\n        keywords: KEYWORDS,\n        contains: [ 'self' ].concat(EXPRESSIONS)\n      }\n    ]\n  };\n\n  return {\n    name: 'MoonScript',\n    aliases: [ 'moon' ],\n    keywords: KEYWORDS,\n    illegal: /\\/\\*/,\n    contains: EXPRESSIONS.concat([\n      hljs.COMMENT('--', '$'),\n      {\n        className: 'function', // function: -> =>\n        begin: '^\\\\s*' + JS_IDENT_RE + '\\\\s*=\\\\s*' + POSSIBLE_PARAMS_RE,\n        end: '[-=]>',\n        returnBegin: true,\n        contains: [\n          TITLE,\n          PARAMS\n        ]\n      },\n      {\n        begin: /[\\(,:=]\\s*/, // anonymous function start\n        relevance: 0,\n        contains: [\n          {\n            className: 'function',\n            begin: POSSIBLE_PARAMS_RE,\n            end: '[-=]>',\n            returnBegin: true,\n            contains: [ PARAMS ]\n          }\n        ]\n      },\n      {\n        className: 'class',\n        beginKeywords: 'class',\n        end: '$',\n        illegal: /[:=\"\\[\\]]/,\n        contains: [\n          {\n            beginKeywords: 'extends',\n            endsWithParent: true,\n            illegal: /[:=\"\\[\\]]/,\n            contains: [ TITLE ]\n          },\n          TITLE\n        ]\n      },\n      {\n        className: 'name', // table\n        begin: JS_IDENT_RE + ':',\n        end: ':',\n        returnBegin: true,\n        returnEnd: true,\n        relevance: 0\n      }\n    ])\n  };\n}\n\nmodule.exports = moonscript;\n","/*\n Language: N1QL\n Author: Andres Täht <andres.taht@gmail.com>\n Contributors: Rene Saarsoo <nene@triin.net>\n Description: Couchbase query language\n Website: https://www.couchbase.com/products/n1ql\n Category: database\n */\n\nfunction n1ql(hljs) {\n  // Taken from http://developer.couchbase.com/documentation/server/current/n1ql/n1ql-language-reference/reservedwords.html\n  const KEYWORDS = [\n    \"all\",\n    \"alter\",\n    \"analyze\",\n    \"and\",\n    \"any\",\n    \"array\",\n    \"as\",\n    \"asc\",\n    \"begin\",\n    \"between\",\n    \"binary\",\n    \"boolean\",\n    \"break\",\n    \"bucket\",\n    \"build\",\n    \"by\",\n    \"call\",\n    \"case\",\n    \"cast\",\n    \"cluster\",\n    \"collate\",\n    \"collection\",\n    \"commit\",\n    \"connect\",\n    \"continue\",\n    \"correlate\",\n    \"cover\",\n    \"create\",\n    \"database\",\n    \"dataset\",\n    \"datastore\",\n    \"declare\",\n    \"decrement\",\n    \"delete\",\n    \"derived\",\n    \"desc\",\n    \"describe\",\n    \"distinct\",\n    \"do\",\n    \"drop\",\n    \"each\",\n    \"element\",\n    \"else\",\n    \"end\",\n    \"every\",\n    \"except\",\n    \"exclude\",\n    \"execute\",\n    \"exists\",\n    \"explain\",\n    \"fetch\",\n    \"first\",\n    \"flatten\",\n    \"for\",\n    \"force\",\n    \"from\",\n    \"function\",\n    \"grant\",\n    \"group\",\n    \"gsi\",\n    \"having\",\n    \"if\",\n    \"ignore\",\n    \"ilike\",\n    \"in\",\n    \"include\",\n    \"increment\",\n    \"index\",\n    \"infer\",\n    \"inline\",\n    \"inner\",\n    \"insert\",\n    \"intersect\",\n    \"into\",\n    \"is\",\n    \"join\",\n    \"key\",\n    \"keys\",\n    \"keyspace\",\n    \"known\",\n    \"last\",\n    \"left\",\n    \"let\",\n    \"letting\",\n    \"like\",\n    \"limit\",\n    \"lsm\",\n    \"map\",\n    \"mapping\",\n    \"matched\",\n    \"materialized\",\n    \"merge\",\n    \"minus\",\n    \"namespace\",\n    \"nest\",\n    \"not\",\n    \"number\",\n    \"object\",\n    \"offset\",\n    \"on\",\n    \"option\",\n    \"or\",\n    \"order\",\n    \"outer\",\n    \"over\",\n    \"parse\",\n    \"partition\",\n    \"password\",\n    \"path\",\n    \"pool\",\n    \"prepare\",\n    \"primary\",\n    \"private\",\n    \"privilege\",\n    \"procedure\",\n    \"public\",\n    \"raw\",\n    \"realm\",\n    \"reduce\",\n    \"rename\",\n    \"return\",\n    \"returning\",\n    \"revoke\",\n    \"right\",\n    \"role\",\n    \"rollback\",\n    \"satisfies\",\n    \"schema\",\n    \"select\",\n    \"self\",\n    \"semi\",\n    \"set\",\n    \"show\",\n    \"some\",\n    \"start\",\n    \"statistics\",\n    \"string\",\n    \"system\",\n    \"then\",\n    \"to\",\n    \"transaction\",\n    \"trigger\",\n    \"truncate\",\n    \"under\",\n    \"union\",\n    \"unique\",\n    \"unknown\",\n    \"unnest\",\n    \"unset\",\n    \"update\",\n    \"upsert\",\n    \"use\",\n    \"user\",\n    \"using\",\n    \"validate\",\n    \"value\",\n    \"valued\",\n    \"values\",\n    \"via\",\n    \"view\",\n    \"when\",\n    \"where\",\n    \"while\",\n    \"with\",\n    \"within\",\n    \"work\",\n    \"xor\"\n  ];\n  // Taken from http://developer.couchbase.com/documentation/server/4.5/n1ql/n1ql-language-reference/literals.html\n  const LITERALS = [\n    \"true\",\n    \"false\",\n    \"null\",\n    \"missing|5\"\n  ];\n  // Taken from http://developer.couchbase.com/documentation/server/4.5/n1ql/n1ql-language-reference/functions.html\n  const BUILT_INS = [\n    \"array_agg\",\n    \"array_append\",\n    \"array_concat\",\n    \"array_contains\",\n    \"array_count\",\n    \"array_distinct\",\n    \"array_ifnull\",\n    \"array_length\",\n    \"array_max\",\n    \"array_min\",\n    \"array_position\",\n    \"array_prepend\",\n    \"array_put\",\n    \"array_range\",\n    \"array_remove\",\n    \"array_repeat\",\n    \"array_replace\",\n    \"array_reverse\",\n    \"array_sort\",\n    \"array_sum\",\n    \"avg\",\n    \"count\",\n    \"max\",\n    \"min\",\n    \"sum\",\n    \"greatest\",\n    \"least\",\n    \"ifmissing\",\n    \"ifmissingornull\",\n    \"ifnull\",\n    \"missingif\",\n    \"nullif\",\n    \"ifinf\",\n    \"ifnan\",\n    \"ifnanorinf\",\n    \"naninf\",\n    \"neginfif\",\n    \"posinfif\",\n    \"clock_millis\",\n    \"clock_str\",\n    \"date_add_millis\",\n    \"date_add_str\",\n    \"date_diff_millis\",\n    \"date_diff_str\",\n    \"date_part_millis\",\n    \"date_part_str\",\n    \"date_trunc_millis\",\n    \"date_trunc_str\",\n    \"duration_to_str\",\n    \"millis\",\n    \"str_to_millis\",\n    \"millis_to_str\",\n    \"millis_to_utc\",\n    \"millis_to_zone_name\",\n    \"now_millis\",\n    \"now_str\",\n    \"str_to_duration\",\n    \"str_to_utc\",\n    \"str_to_zone_name\",\n    \"decode_json\",\n    \"encode_json\",\n    \"encoded_size\",\n    \"poly_length\",\n    \"base64\",\n    \"base64_encode\",\n    \"base64_decode\",\n    \"meta\",\n    \"uuid\",\n    \"abs\",\n    \"acos\",\n    \"asin\",\n    \"atan\",\n    \"atan2\",\n    \"ceil\",\n    \"cos\",\n    \"degrees\",\n    \"e\",\n    \"exp\",\n    \"ln\",\n    \"log\",\n    \"floor\",\n    \"pi\",\n    \"power\",\n    \"radians\",\n    \"random\",\n    \"round\",\n    \"sign\",\n    \"sin\",\n    \"sqrt\",\n    \"tan\",\n    \"trunc\",\n    \"object_length\",\n    \"object_names\",\n    \"object_pairs\",\n    \"object_inner_pairs\",\n    \"object_values\",\n    \"object_inner_values\",\n    \"object_add\",\n    \"object_put\",\n    \"object_remove\",\n    \"object_unwrap\",\n    \"regexp_contains\",\n    \"regexp_like\",\n    \"regexp_position\",\n    \"regexp_replace\",\n    \"contains\",\n    \"initcap\",\n    \"length\",\n    \"lower\",\n    \"ltrim\",\n    \"position\",\n    \"repeat\",\n    \"replace\",\n    \"rtrim\",\n    \"split\",\n    \"substr\",\n    \"title\",\n    \"trim\",\n    \"upper\",\n    \"isarray\",\n    \"isatom\",\n    \"isboolean\",\n    \"isnumber\",\n    \"isobject\",\n    \"isstring\",\n    \"type\",\n    \"toarray\",\n    \"toatom\",\n    \"toboolean\",\n    \"tonumber\",\n    \"toobject\",\n    \"tostring\"\n  ];\n\n  return {\n    name: 'N1QL',\n    case_insensitive: true,\n    contains: [\n      {\n        beginKeywords:\n          'build create index delete drop explain infer|10 insert merge prepare select update upsert|10',\n        end: /;/,\n        keywords: {\n          keyword: KEYWORDS,\n          literal: LITERALS,\n          built_in: BUILT_INS\n        },\n        contains: [\n          {\n            className: 'string',\n            begin: '\\'',\n            end: '\\'',\n            contains: [ hljs.BACKSLASH_ESCAPE ]\n          },\n          {\n            className: 'string',\n            begin: '\"',\n            end: '\"',\n            contains: [ hljs.BACKSLASH_ESCAPE ]\n          },\n          {\n            className: 'symbol',\n            begin: '`',\n            end: '`',\n            contains: [ hljs.BACKSLASH_ESCAPE ]\n          },\n          hljs.C_NUMBER_MODE,\n          hljs.C_BLOCK_COMMENT_MODE\n        ]\n      },\n      hljs.C_BLOCK_COMMENT_MODE\n    ]\n  };\n}\n\nmodule.exports = n1ql;\n","/*\nLanguage: NestedText\nDescription: NestedText is a file format for holding data that is to be entered, edited, or viewed by people.\nWebsite: https://nestedtext.org/\nCategory: config\n*/\n\n/** @type LanguageFn */\nfunction nestedtext(hljs) {\n  const NESTED = {\n    match: [\n      /^\\s*(?=\\S)/, // have to look forward here to avoid polynomial backtracking\n      /[^:]+/,\n      /:\\s*/,\n      /$/\n    ],\n    className: {\n      2: \"attribute\",\n      3: \"punctuation\"\n    }\n  };\n  const DICTIONARY_ITEM = {\n    match: [\n      /^\\s*(?=\\S)/, // have to look forward here to avoid polynomial backtracking\n      /[^:]*[^: ]/,\n      /[ ]*:/,\n      /[ ]/,\n      /.*$/\n    ],\n    className: {\n      2: \"attribute\",\n      3: \"punctuation\",\n      5: \"string\"\n    }\n  };\n  const STRING = {\n    match: [\n      /^\\s*/,\n      />/,\n      /[ ]/,\n      /.*$/\n    ],\n    className: {\n      2: \"punctuation\",\n      4: \"string\"\n    }\n  };\n  const LIST_ITEM = {\n    variants: [\n      { match: [\n        /^\\s*/,\n        /-/,\n        /[ ]/,\n        /.*$/\n      ] },\n      { match: [\n        /^\\s*/,\n        /-$/\n      ] }\n    ],\n    className: {\n      2: \"bullet\",\n      4: \"string\"\n    }\n  };\n\n  return {\n    name: 'Nested Text',\n    aliases: [ 'nt' ],\n    contains: [\n      hljs.inherit(hljs.HASH_COMMENT_MODE, {\n        begin: /^\\s*(?=#)/,\n        excludeBegin: true\n      }),\n      LIST_ITEM,\n      STRING,\n      NESTED,\n      DICTIONARY_ITEM\n    ]\n  };\n}\n\nmodule.exports = nestedtext;\n","/*\nLanguage: Nginx config\nAuthor: Peter Leonov <gojpeg@yandex.ru>\nContributors: Ivan Sagalaev <maniac@softwaremaniacs.org>\nCategory: config, web\nWebsite: https://www.nginx.com\n*/\n\n/** @type LanguageFn */\nfunction nginx(hljs) {\n  const regex = hljs.regex;\n  const VAR = {\n    className: 'variable',\n    variants: [\n      { begin: /\\$\\d+/ },\n      { begin: /\\$\\{\\w+\\}/ },\n      { begin: regex.concat(/[$@]/, hljs.UNDERSCORE_IDENT_RE) }\n    ]\n  };\n  const LITERALS = [\n    \"on\",\n    \"off\",\n    \"yes\",\n    \"no\",\n    \"true\",\n    \"false\",\n    \"none\",\n    \"blocked\",\n    \"debug\",\n    \"info\",\n    \"notice\",\n    \"warn\",\n    \"error\",\n    \"crit\",\n    \"select\",\n    \"break\",\n    \"last\",\n    \"permanent\",\n    \"redirect\",\n    \"kqueue\",\n    \"rtsig\",\n    \"epoll\",\n    \"poll\",\n    \"/dev/poll\"\n  ];\n  const DEFAULT = {\n    endsWithParent: true,\n    keywords: {\n      $pattern: /[a-z_]{2,}|\\/dev\\/poll/,\n      literal: LITERALS\n    },\n    relevance: 0,\n    illegal: '=>',\n    contains: [\n      hljs.HASH_COMMENT_MODE,\n      {\n        className: 'string',\n        contains: [\n          hljs.BACKSLASH_ESCAPE,\n          VAR\n        ],\n        variants: [\n          {\n            begin: /\"/,\n            end: /\"/\n          },\n          {\n            begin: /'/,\n            end: /'/\n          }\n        ]\n      },\n      // this swallows entire URLs to avoid detecting numbers within\n      {\n        begin: '([a-z]+):/',\n        end: '\\\\s',\n        endsWithParent: true,\n        excludeEnd: true,\n        contains: [ VAR ]\n      },\n      {\n        className: 'regexp',\n        contains: [\n          hljs.BACKSLASH_ESCAPE,\n          VAR\n        ],\n        variants: [\n          {\n            begin: \"\\\\s\\\\^\",\n            end: \"\\\\s|\\\\{|;\",\n            returnEnd: true\n          },\n          // regexp locations (~, ~*)\n          {\n            begin: \"~\\\\*?\\\\s+\",\n            end: \"\\\\s|\\\\{|;\",\n            returnEnd: true\n          },\n          // *.example.com\n          { begin: \"\\\\*(\\\\.[a-z\\\\-]+)+\" },\n          // sub.example.*\n          { begin: \"([a-z\\\\-]+\\\\.)+\\\\*\" }\n        ]\n      },\n      // IP\n      {\n        className: 'number',\n        begin: '\\\\b\\\\d{1,3}\\\\.\\\\d{1,3}\\\\.\\\\d{1,3}\\\\.\\\\d{1,3}(:\\\\d{1,5})?\\\\b'\n      },\n      // units\n      {\n        className: 'number',\n        begin: '\\\\b\\\\d+[kKmMgGdshdwy]?\\\\b',\n        relevance: 0\n      },\n      VAR\n    ]\n  };\n\n  return {\n    name: 'Nginx config',\n    aliases: [ 'nginxconf' ],\n    contains: [\n      hljs.HASH_COMMENT_MODE,\n      {\n        beginKeywords: \"upstream location\",\n        end: /;|\\{/,\n        contains: DEFAULT.contains,\n        keywords: { section: \"upstream location\" }\n      },\n      {\n        className: 'section',\n        begin: regex.concat(hljs.UNDERSCORE_IDENT_RE + regex.lookahead(/\\s+\\{/)),\n        relevance: 0\n      },\n      {\n        begin: regex.lookahead(hljs.UNDERSCORE_IDENT_RE + '\\\\s'),\n        end: ';|\\\\{',\n        contains: [\n          {\n            className: 'attribute',\n            begin: hljs.UNDERSCORE_IDENT_RE,\n            starts: DEFAULT\n          }\n        ],\n        relevance: 0\n      }\n    ],\n    illegal: '[^\\\\s\\\\}\\\\{]'\n  };\n}\n\nmodule.exports = nginx;\n","/*\nLanguage: Nim\nDescription: Nim is a statically typed compiled systems programming language.\nWebsite: https://nim-lang.org\nCategory: system\n*/\n\nfunction nim(hljs) {\n  const TYPES = [\n    \"int\",\n    \"int8\",\n    \"int16\",\n    \"int32\",\n    \"int64\",\n    \"uint\",\n    \"uint8\",\n    \"uint16\",\n    \"uint32\",\n    \"uint64\",\n    \"float\",\n    \"float32\",\n    \"float64\",\n    \"bool\",\n    \"char\",\n    \"string\",\n    \"cstring\",\n    \"pointer\",\n    \"expr\",\n    \"stmt\",\n    \"void\",\n    \"auto\",\n    \"any\",\n    \"range\",\n    \"array\",\n    \"openarray\",\n    \"varargs\",\n    \"seq\",\n    \"set\",\n    \"clong\",\n    \"culong\",\n    \"cchar\",\n    \"cschar\",\n    \"cshort\",\n    \"cint\",\n    \"csize\",\n    \"clonglong\",\n    \"cfloat\",\n    \"cdouble\",\n    \"clongdouble\",\n    \"cuchar\",\n    \"cushort\",\n    \"cuint\",\n    \"culonglong\",\n    \"cstringarray\",\n    \"semistatic\"\n  ];\n  const KEYWORDS = [\n    \"addr\",\n    \"and\",\n    \"as\",\n    \"asm\",\n    \"bind\",\n    \"block\",\n    \"break\",\n    \"case\",\n    \"cast\",\n    \"concept\",\n    \"const\",\n    \"continue\",\n    \"converter\",\n    \"defer\",\n    \"discard\",\n    \"distinct\",\n    \"div\",\n    \"do\",\n    \"elif\",\n    \"else\",\n    \"end\",\n    \"enum\",\n    \"except\",\n    \"export\",\n    \"finally\",\n    \"for\",\n    \"from\",\n    \"func\",\n    \"generic\",\n    \"guarded\",\n    \"if\",\n    \"import\",\n    \"in\",\n    \"include\",\n    \"interface\",\n    \"is\",\n    \"isnot\",\n    \"iterator\",\n    \"let\",\n    \"macro\",\n    \"method\",\n    \"mixin\",\n    \"mod\",\n    \"nil\",\n    \"not\",\n    \"notin\",\n    \"object\",\n    \"of\",\n    \"or\",\n    \"out\",\n    \"proc\",\n    \"ptr\",\n    \"raise\",\n    \"ref\",\n    \"return\",\n    \"shared\",\n    \"shl\",\n    \"shr\",\n    \"static\",\n    \"template\",\n    \"try\",\n    \"tuple\",\n    \"type\",\n    \"using\",\n    \"var\",\n    \"when\",\n    \"while\",\n    \"with\",\n    \"without\",\n    \"xor\",\n    \"yield\"\n  ];\n  const BUILT_INS = [\n    \"stdin\",\n    \"stdout\",\n    \"stderr\",\n    \"result\"\n  ];\n  const LITERALS = [\n    \"true\",\n    \"false\"\n  ];\n  return {\n    name: 'Nim',\n    keywords: {\n      keyword: KEYWORDS,\n      literal: LITERALS,\n      type: TYPES,\n      built_in: BUILT_INS\n    },\n    contains: [\n      {\n        className: 'meta', // Actually pragma\n        begin: /\\{\\./,\n        end: /\\.\\}/,\n        relevance: 10\n      },\n      {\n        className: 'string',\n        begin: /[a-zA-Z]\\w*\"/,\n        end: /\"/,\n        contains: [ { begin: /\"\"/ } ]\n      },\n      {\n        className: 'string',\n        begin: /([a-zA-Z]\\w*)?\"\"\"/,\n        end: /\"\"\"/\n      },\n      hljs.QUOTE_STRING_MODE,\n      {\n        className: 'type',\n        begin: /\\b[A-Z]\\w+\\b/,\n        relevance: 0\n      },\n      {\n        className: 'number',\n        relevance: 0,\n        variants: [\n          { begin: /\\b(0[xX][0-9a-fA-F][_0-9a-fA-F]*)('?[iIuU](8|16|32|64))?/ },\n          { begin: /\\b(0o[0-7][_0-7]*)('?[iIuUfF](8|16|32|64))?/ },\n          { begin: /\\b(0(b|B)[01][_01]*)('?[iIuUfF](8|16|32|64))?/ },\n          { begin: /\\b(\\d[_\\d]*)('?[iIuUfF](8|16|32|64))?/ }\n        ]\n      },\n      hljs.HASH_COMMENT_MODE\n    ]\n  };\n}\n\nmodule.exports = nim;\n","/*\nLanguage: Nix\nAuthor: Domen Kožar <domen@dev.si>\nDescription: Nix functional language\nWebsite: http://nixos.org/nix\nCategory: system\n*/\n\n/** @type LanguageFn */\nfunction nix(hljs) {\n  const regex = hljs.regex;\n  const KEYWORDS = {\n    keyword: [\n      \"assert\",\n      \"else\",\n      \"if\",\n      \"in\",\n      \"inherit\",\n      \"let\",\n      \"or\",\n      \"rec\",\n      \"then\",\n      \"with\",\n    ],\n    literal: [\n      \"true\",\n      \"false\",\n      \"null\",\n    ],\n    built_in: [\n      // toplevel builtins\n      \"abort\",\n      \"baseNameOf\",\n      \"builtins\",\n      \"derivation\",\n      \"derivationStrict\",\n      \"dirOf\",\n      \"fetchGit\",\n      \"fetchMercurial\",\n      \"fetchTarball\",\n      \"fetchTree\",\n      \"fromTOML\",\n      \"import\",\n      \"isNull\",\n      \"map\",\n      \"placeholder\",\n      \"removeAttrs\",\n      \"scopedImport\",\n      \"throw\",\n      \"toString\",\n    ],\n  };\n\n  const BUILTINS = {\n    scope: 'built_in',\n    match: regex.either(...[\n      \"abort\",\n      \"add\",\n      \"addDrvOutputDependencies\",\n      \"addErrorContext\",\n      \"all\",\n      \"any\",\n      \"appendContext\",\n      \"attrNames\",\n      \"attrValues\",\n      \"baseNameOf\",\n      \"bitAnd\",\n      \"bitOr\",\n      \"bitXor\",\n      \"break\",\n      \"builtins\",\n      \"catAttrs\",\n      \"ceil\",\n      \"compareVersions\",\n      \"concatLists\",\n      \"concatMap\",\n      \"concatStringsSep\",\n      \"convertHash\",\n      \"currentSystem\",\n      \"currentTime\",\n      \"deepSeq\",\n      \"derivation\",\n      \"derivationStrict\",\n      \"dirOf\",\n      \"div\",\n      \"elem\",\n      \"elemAt\",\n      \"false\",\n      \"fetchGit\",\n      \"fetchMercurial\",\n      \"fetchTarball\",\n      \"fetchTree\",\n      \"fetchurl\",\n      \"filter\",\n      \"filterSource\",\n      \"findFile\",\n      \"flakeRefToString\",\n      \"floor\",\n      \"foldl'\",\n      \"fromJSON\",\n      \"fromTOML\",\n      \"functionArgs\",\n      \"genList\",\n      \"genericClosure\",\n      \"getAttr\",\n      \"getContext\",\n      \"getEnv\",\n      \"getFlake\",\n      \"groupBy\",\n      \"hasAttr\",\n      \"hasContext\",\n      \"hashFile\",\n      \"hashString\",\n      \"head\",\n      \"import\",\n      \"intersectAttrs\",\n      \"isAttrs\",\n      \"isBool\",\n      \"isFloat\",\n      \"isFunction\",\n      \"isInt\",\n      \"isList\",\n      \"isNull\",\n      \"isPath\",\n      \"isString\",\n      \"langVersion\",\n      \"length\",\n      \"lessThan\",\n      \"listToAttrs\",\n      \"map\",\n      \"mapAttrs\",\n      \"match\",\n      \"mul\",\n      \"nixPath\",\n      \"nixVersion\",\n      \"null\",\n      \"parseDrvName\",\n      \"parseFlakeRef\",\n      \"partition\",\n      \"path\",\n      \"pathExists\",\n      \"placeholder\",\n      \"readDir\",\n      \"readFile\",\n      \"readFileType\",\n      \"removeAttrs\",\n      \"replaceStrings\",\n      \"scopedImport\",\n      \"seq\",\n      \"sort\",\n      \"split\",\n      \"splitVersion\",\n      \"storeDir\",\n      \"storePath\",\n      \"stringLength\",\n      \"sub\",\n      \"substring\",\n      \"tail\",\n      \"throw\",\n      \"toFile\",\n      \"toJSON\",\n      \"toPath\",\n      \"toString\",\n      \"toXML\",\n      \"trace\",\n      \"traceVerbose\",\n      \"true\",\n      \"tryEval\",\n      \"typeOf\",\n      \"unsafeDiscardOutputDependency\",\n      \"unsafeDiscardStringContext\",\n      \"unsafeGetAttrPos\",\n      \"warn\",\n      \"zipAttrsWith\",\n    ].map(b => `builtins\\\\.${b}`)),\n    relevance: 10,\n  };\n\n  const IDENTIFIER_REGEX = '[A-Za-z_][A-Za-z0-9_\\'-]*';\n\n  const LOOKUP_PATH = {\n    scope: 'symbol',\n    match: new RegExp(`<${IDENTIFIER_REGEX}(/${IDENTIFIER_REGEX})*>`),\n  };\n\n  const PATH_PIECE = \"[A-Za-z0-9_\\\\+\\\\.-]+\";\n  const PATH = {\n    scope: 'symbol',\n    match: new RegExp(`(\\\\.\\\\.|\\\\.|~)?/(${PATH_PIECE})?(/${PATH_PIECE})*(?=[\\\\s;])`),\n  };\n\n  const OPERATOR_WITHOUT_MINUS_REGEX = regex.either(...[\n    '==',\n    '=',\n    '\\\\+\\\\+',\n    '\\\\+',\n    '<=',\n    '<\\\\|',\n    '<',\n    '>=',\n    '>',\n    '->',\n    '//',\n    '/',\n    '!=',\n    '!',\n    '\\\\|\\\\|',\n    '\\\\|>',\n    '\\\\?',\n    '\\\\*',\n    '&&',\n  ]);\n\n  const OPERATOR = {\n    scope: 'operator',\n    match: regex.concat(OPERATOR_WITHOUT_MINUS_REGEX, /(?!-)/),\n    relevance: 0,\n  };\n\n  // '-' is being handled by itself to ensure we are able to tell the difference\n  // between a dash in an identifier and a minus operator\n  const NUMBER = {\n    scope: 'number',\n    match: new RegExp(`${hljs.NUMBER_RE}(?!-)`),\n    relevance: 0,\n  };\n  const MINUS_OPERATOR = {\n    variants: [\n      {\n        scope: 'operator',\n        beforeMatch: /\\s/,\n        // The (?!>) is used to ensure this doesn't collide with the '->' operator\n        begin: /-(?!>)/,\n      },\n      {\n        begin: [\n          new RegExp(`${hljs.NUMBER_RE}`),\n          /-/,\n          /(?!>)/,\n        ],\n        beginScope: {\n          1: 'number',\n          2: 'operator'\n        },\n      },\n      {\n        begin: [\n          OPERATOR_WITHOUT_MINUS_REGEX,\n          /-/,\n          /(?!>)/,\n        ],\n        beginScope: {\n          1: 'operator',\n          2: 'operator'\n        },\n      },\n    ],\n    relevance: 0,\n  };\n\n  const ATTRS = {\n    beforeMatch: /(^|\\{|;)\\s*/,\n    begin: new RegExp(`${IDENTIFIER_REGEX}(\\\\.${IDENTIFIER_REGEX})*\\\\s*=(?!=)`),\n    returnBegin: true,\n    relevance: 0,\n    contains: [\n      {\n        scope: 'attr',\n        match: new RegExp(`${IDENTIFIER_REGEX}(\\\\.${IDENTIFIER_REGEX})*(?=\\\\s*=)`),\n        relevance: 0.2,\n      }\n    ],\n  };\n\n  const NORMAL_ESCAPED_DOLLAR = {\n    scope: 'char.escape',\n    match: /\\\\\\$/,\n  };\n  const INDENTED_ESCAPED_DOLLAR = {\n    scope: 'char.escape',\n    match: /''\\$/,\n  };\n  const ANTIQUOTE = {\n    scope: 'subst',\n    begin: /\\$\\{/,\n    end: /\\}/,\n    keywords: KEYWORDS,\n  };\n  const ESCAPED_DOUBLEQUOTE = {\n    scope: 'char.escape',\n    match: /'''/,\n  };\n  const ESCAPED_LITERAL = {\n    scope: 'char.escape',\n    match: /\\\\(?!\\$)./,\n  };\n  const STRING = {\n    scope: 'string',\n    variants: [\n      {\n        begin: \"''\",\n        end: \"''\",\n        contains: [\n          INDENTED_ESCAPED_DOLLAR,\n          ANTIQUOTE,\n          ESCAPED_DOUBLEQUOTE,\n          ESCAPED_LITERAL,\n        ],\n      },\n      {\n        begin: '\"',\n        end: '\"',\n        contains: [\n          NORMAL_ESCAPED_DOLLAR,\n          ANTIQUOTE,\n          ESCAPED_LITERAL,\n        ],\n      },\n    ],\n  };\n\n  const FUNCTION_PARAMS = {\n    scope: 'params',\n    match: new RegExp(`${IDENTIFIER_REGEX}\\\\s*:(?=\\\\s)`),\n  };\n\n  const EXPRESSIONS = [\n    NUMBER,\n    hljs.HASH_COMMENT_MODE,\n    hljs.C_BLOCK_COMMENT_MODE,\n    hljs.COMMENT(\n      /\\/\\*\\*(?!\\/)/,\n      /\\*\\//,\n      {\n        subLanguage: 'markdown',\n        relevance: 0\n      }\n    ),\n    BUILTINS,\n    STRING,\n    LOOKUP_PATH,\n    PATH,\n    FUNCTION_PARAMS,\n    ATTRS,\n    MINUS_OPERATOR,\n    OPERATOR,\n  ];\n\n  ANTIQUOTE.contains = EXPRESSIONS;\n\n  const REPL = [\n    {\n      scope: 'meta.prompt',\n      match: /^nix-repl>(?=\\s)/,\n      relevance: 10,\n    },\n    {\n      scope: 'meta',\n      beforeMatch: /\\s+/,\n      begin: /:([a-z]+|\\?)/,\n    },\n  ];\n\n  return {\n    name: 'Nix',\n    aliases: [ \"nixos\" ],\n    keywords: KEYWORDS,\n    contains: EXPRESSIONS.concat(REPL),\n  };\n}\n\nmodule.exports = nix;\n","/*\nLanguage: Node REPL\nRequires: javascript.js\nAuthor: Marat Nagayev <nagaevmt@yandex.ru>\nCategory: scripting\n*/\n\n/** @type LanguageFn */\nfunction nodeRepl(hljs) {\n  return {\n    name: 'Node REPL',\n    contains: [\n      {\n        className: 'meta.prompt',\n        starts: {\n          // a space separates the REPL prefix from the actual code\n          // this is purely for cleaner HTML output\n          end: / |$/,\n          starts: {\n            end: '$',\n            subLanguage: 'javascript'\n          }\n        },\n        variants: [\n          { begin: /^>(?=[ ]|$)/ },\n          { begin: /^\\.\\.\\.(?=[ ]|$)/ }\n        ]\n      }\n    ]\n  };\n}\n\nmodule.exports = nodeRepl;\n","/*\nLanguage: NSIS\nDescription: Nullsoft Scriptable Install System\nAuthor: Jan T. Sott <jan.sott@gmail.com>\nWebsite: https://nsis.sourceforge.io/Main_Page\nCategory: scripting\n*/\n\n\nfunction nsis(hljs) {\n  const regex = hljs.regex;\n  const LANGUAGE_CONSTANTS = [\n    \"ADMINTOOLS\",\n    \"APPDATA\",\n    \"CDBURN_AREA\",\n    \"CMDLINE\",\n    \"COMMONFILES32\",\n    \"COMMONFILES64\",\n    \"COMMONFILES\",\n    \"COOKIES\",\n    \"DESKTOP\",\n    \"DOCUMENTS\",\n    \"EXEDIR\",\n    \"EXEFILE\",\n    \"EXEPATH\",\n    \"FAVORITES\",\n    \"FONTS\",\n    \"HISTORY\",\n    \"HWNDPARENT\",\n    \"INSTDIR\",\n    \"INTERNET_CACHE\",\n    \"LANGUAGE\",\n    \"LOCALAPPDATA\",\n    \"MUSIC\",\n    \"NETHOOD\",\n    \"OUTDIR\",\n    \"PICTURES\",\n    \"PLUGINSDIR\",\n    \"PRINTHOOD\",\n    \"PROFILE\",\n    \"PROGRAMFILES32\",\n    \"PROGRAMFILES64\",\n    \"PROGRAMFILES\",\n    \"QUICKLAUNCH\",\n    \"RECENT\",\n    \"RESOURCES_LOCALIZED\",\n    \"RESOURCES\",\n    \"SENDTO\",\n    \"SMPROGRAMS\",\n    \"SMSTARTUP\",\n    \"STARTMENU\",\n    \"SYSDIR\",\n    \"TEMP\",\n    \"TEMPLATES\",\n    \"VIDEOS\",\n    \"WINDIR\"\n  ];\n\n  const PARAM_NAMES = [\n    \"ARCHIVE\",\n    \"FILE_ATTRIBUTE_ARCHIVE\",\n    \"FILE_ATTRIBUTE_NORMAL\",\n    \"FILE_ATTRIBUTE_OFFLINE\",\n    \"FILE_ATTRIBUTE_READONLY\",\n    \"FILE_ATTRIBUTE_SYSTEM\",\n    \"FILE_ATTRIBUTE_TEMPORARY\",\n    \"HKCR\",\n    \"HKCU\",\n    \"HKDD\",\n    \"HKEY_CLASSES_ROOT\",\n    \"HKEY_CURRENT_CONFIG\",\n    \"HKEY_CURRENT_USER\",\n    \"HKEY_DYN_DATA\",\n    \"HKEY_LOCAL_MACHINE\",\n    \"HKEY_PERFORMANCE_DATA\",\n    \"HKEY_USERS\",\n    \"HKLM\",\n    \"HKPD\",\n    \"HKU\",\n    \"IDABORT\",\n    \"IDCANCEL\",\n    \"IDIGNORE\",\n    \"IDNO\",\n    \"IDOK\",\n    \"IDRETRY\",\n    \"IDYES\",\n    \"MB_ABORTRETRYIGNORE\",\n    \"MB_DEFBUTTON1\",\n    \"MB_DEFBUTTON2\",\n    \"MB_DEFBUTTON3\",\n    \"MB_DEFBUTTON4\",\n    \"MB_ICONEXCLAMATION\",\n    \"MB_ICONINFORMATION\",\n    \"MB_ICONQUESTION\",\n    \"MB_ICONSTOP\",\n    \"MB_OK\",\n    \"MB_OKCANCEL\",\n    \"MB_RETRYCANCEL\",\n    \"MB_RIGHT\",\n    \"MB_RTLREADING\",\n    \"MB_SETFOREGROUND\",\n    \"MB_TOPMOST\",\n    \"MB_USERICON\",\n    \"MB_YESNO\",\n    \"NORMAL\",\n    \"OFFLINE\",\n    \"READONLY\",\n    \"SHCTX\",\n    \"SHELL_CONTEXT\",\n    \"SYSTEM|TEMPORARY\",\n  ];\n\n  const COMPILER_FLAGS = [\n    \"addincludedir\",\n    \"addplugindir\",\n    \"appendfile\",\n    \"assert\",\n    \"cd\",\n    \"define\",\n    \"delfile\",\n    \"echo\",\n    \"else\",\n    \"endif\",\n    \"error\",\n    \"execute\",\n    \"finalize\",\n    \"getdllversion\",\n    \"gettlbversion\",\n    \"if\",\n    \"ifdef\",\n    \"ifmacrodef\",\n    \"ifmacrondef\",\n    \"ifndef\",\n    \"include\",\n    \"insertmacro\",\n    \"macro\",\n    \"macroend\",\n    \"makensis\",\n    \"packhdr\",\n    \"searchparse\",\n    \"searchreplace\",\n    \"system\",\n    \"tempfile\",\n    \"undef\",\n    \"uninstfinalize\",\n    \"verbose\",\n    \"warning\",\n  ];\n\n  const CONSTANTS = {\n    className: 'variable.constant',\n    begin: regex.concat(/\\$/, regex.either(...LANGUAGE_CONSTANTS))\n  };\n\n  const DEFINES = {\n    // ${defines}\n    className: 'variable',\n    begin: /\\$+\\{[\\!\\w.:-]+\\}/\n  };\n\n  const VARIABLES = {\n    // $variables\n    className: 'variable',\n    begin: /\\$+\\w[\\w\\.]*/,\n    illegal: /\\(\\)\\{\\}/\n  };\n\n  const LANGUAGES = {\n    // $(language_strings)\n    className: 'variable',\n    begin: /\\$+\\([\\w^.:!-]+\\)/\n  };\n\n  const PARAMETERS = {\n    // command parameters\n    className: 'params',\n    begin: regex.either(...PARAM_NAMES)\n  };\n\n  const COMPILER = {\n    // !compiler_flags\n    className: 'keyword',\n    begin: regex.concat(\n      /!/,\n      regex.either(...COMPILER_FLAGS)\n    )\n  };\n\n  const ESCAPE_CHARS = {\n    // $\\n, $\\r, $\\t, $$\n    className: 'char.escape',\n    begin: /\\$(\\\\[nrt]|\\$)/\n  };\n\n  const PLUGINS = {\n    // plug::ins\n    className: 'title.function',\n    begin: /\\w+::\\w+/\n  };\n\n  const STRING = {\n    className: 'string',\n    variants: [\n      {\n        begin: '\"',\n        end: '\"'\n      },\n      {\n        begin: '\\'',\n        end: '\\''\n      },\n      {\n        begin: '`',\n        end: '`'\n      }\n    ],\n    illegal: /\\n/,\n    contains: [\n      ESCAPE_CHARS,\n      CONSTANTS,\n      DEFINES,\n      VARIABLES,\n      LANGUAGES\n    ]\n  };\n\n  const KEYWORDS = [\n    \"Abort\",\n    \"AddBrandingImage\",\n    \"AddSize\",\n    \"AllowRootDirInstall\",\n    \"AllowSkipFiles\",\n    \"AutoCloseWindow\",\n    \"BGFont\",\n    \"BGGradient\",\n    \"BrandingText\",\n    \"BringToFront\",\n    \"Call\",\n    \"CallInstDLL\",\n    \"Caption\",\n    \"ChangeUI\",\n    \"CheckBitmap\",\n    \"ClearErrors\",\n    \"CompletedText\",\n    \"ComponentText\",\n    \"CopyFiles\",\n    \"CRCCheck\",\n    \"CreateDirectory\",\n    \"CreateFont\",\n    \"CreateShortCut\",\n    \"Delete\",\n    \"DeleteINISec\",\n    \"DeleteINIStr\",\n    \"DeleteRegKey\",\n    \"DeleteRegValue\",\n    \"DetailPrint\",\n    \"DetailsButtonText\",\n    \"DirText\",\n    \"DirVar\",\n    \"DirVerify\",\n    \"EnableWindow\",\n    \"EnumRegKey\",\n    \"EnumRegValue\",\n    \"Exch\",\n    \"Exec\",\n    \"ExecShell\",\n    \"ExecShellWait\",\n    \"ExecWait\",\n    \"ExpandEnvStrings\",\n    \"File\",\n    \"FileBufSize\",\n    \"FileClose\",\n    \"FileErrorText\",\n    \"FileOpen\",\n    \"FileRead\",\n    \"FileReadByte\",\n    \"FileReadUTF16LE\",\n    \"FileReadWord\",\n    \"FileWriteUTF16LE\",\n    \"FileSeek\",\n    \"FileWrite\",\n    \"FileWriteByte\",\n    \"FileWriteWord\",\n    \"FindClose\",\n    \"FindFirst\",\n    \"FindNext\",\n    \"FindWindow\",\n    \"FlushINI\",\n    \"GetCurInstType\",\n    \"GetCurrentAddress\",\n    \"GetDlgItem\",\n    \"GetDLLVersion\",\n    \"GetDLLVersionLocal\",\n    \"GetErrorLevel\",\n    \"GetFileTime\",\n    \"GetFileTimeLocal\",\n    \"GetFullPathName\",\n    \"GetFunctionAddress\",\n    \"GetInstDirError\",\n    \"GetKnownFolderPath\",\n    \"GetLabelAddress\",\n    \"GetTempFileName\",\n    \"GetWinVer\",\n    \"Goto\",\n    \"HideWindow\",\n    \"Icon\",\n    \"IfAbort\",\n    \"IfErrors\",\n    \"IfFileExists\",\n    \"IfRebootFlag\",\n    \"IfRtlLanguage\",\n    \"IfShellVarContextAll\",\n    \"IfSilent\",\n    \"InitPluginsDir\",\n    \"InstallButtonText\",\n    \"InstallColors\",\n    \"InstallDir\",\n    \"InstallDirRegKey\",\n    \"InstProgressFlags\",\n    \"InstType\",\n    \"InstTypeGetText\",\n    \"InstTypeSetText\",\n    \"Int64Cmp\",\n    \"Int64CmpU\",\n    \"Int64Fmt\",\n    \"IntCmp\",\n    \"IntCmpU\",\n    \"IntFmt\",\n    \"IntOp\",\n    \"IntPtrCmp\",\n    \"IntPtrCmpU\",\n    \"IntPtrOp\",\n    \"IsWindow\",\n    \"LangString\",\n    \"LicenseBkColor\",\n    \"LicenseData\",\n    \"LicenseForceSelection\",\n    \"LicenseLangString\",\n    \"LicenseText\",\n    \"LoadAndSetImage\",\n    \"LoadLanguageFile\",\n    \"LockWindow\",\n    \"LogSet\",\n    \"LogText\",\n    \"ManifestDPIAware\",\n    \"ManifestLongPathAware\",\n    \"ManifestMaxVersionTested\",\n    \"ManifestSupportedOS\",\n    \"MessageBox\",\n    \"MiscButtonText\",\n    \"Name|0\",\n    \"Nop\",\n    \"OutFile\",\n    \"Page\",\n    \"PageCallbacks\",\n    \"PEAddResource\",\n    \"PEDllCharacteristics\",\n    \"PERemoveResource\",\n    \"PESubsysVer\",\n    \"Pop\",\n    \"Push\",\n    \"Quit\",\n    \"ReadEnvStr\",\n    \"ReadINIStr\",\n    \"ReadRegDWORD\",\n    \"ReadRegStr\",\n    \"Reboot\",\n    \"RegDLL\",\n    \"Rename\",\n    \"RequestExecutionLevel\",\n    \"ReserveFile\",\n    \"Return\",\n    \"RMDir\",\n    \"SearchPath\",\n    \"SectionGetFlags\",\n    \"SectionGetInstTypes\",\n    \"SectionGetSize\",\n    \"SectionGetText\",\n    \"SectionIn\",\n    \"SectionSetFlags\",\n    \"SectionSetInstTypes\",\n    \"SectionSetSize\",\n    \"SectionSetText\",\n    \"SendMessage\",\n    \"SetAutoClose\",\n    \"SetBrandingImage\",\n    \"SetCompress\",\n    \"SetCompressor\",\n    \"SetCompressorDictSize\",\n    \"SetCtlColors\",\n    \"SetCurInstType\",\n    \"SetDatablockOptimize\",\n    \"SetDateSave\",\n    \"SetDetailsPrint\",\n    \"SetDetailsView\",\n    \"SetErrorLevel\",\n    \"SetErrors\",\n    \"SetFileAttributes\",\n    \"SetFont\",\n    \"SetOutPath\",\n    \"SetOverwrite\",\n    \"SetRebootFlag\",\n    \"SetRegView\",\n    \"SetShellVarContext\",\n    \"SetSilent\",\n    \"ShowInstDetails\",\n    \"ShowUninstDetails\",\n    \"ShowWindow\",\n    \"SilentInstall\",\n    \"SilentUnInstall\",\n    \"Sleep\",\n    \"SpaceTexts\",\n    \"StrCmp\",\n    \"StrCmpS\",\n    \"StrCpy\",\n    \"StrLen\",\n    \"SubCaption\",\n    \"Unicode\",\n    \"UninstallButtonText\",\n    \"UninstallCaption\",\n    \"UninstallIcon\",\n    \"UninstallSubCaption\",\n    \"UninstallText\",\n    \"UninstPage\",\n    \"UnRegDLL\",\n    \"Var\",\n    \"VIAddVersionKey\",\n    \"VIFileVersion\",\n    \"VIProductVersion\",\n    \"WindowIcon\",\n    \"WriteINIStr\",\n    \"WriteRegBin\",\n    \"WriteRegDWORD\",\n    \"WriteRegExpandStr\",\n    \"WriteRegMultiStr\",\n    \"WriteRegNone\",\n    \"WriteRegStr\",\n    \"WriteUninstaller\",\n    \"XPStyle\"\n  ];\n\n  const LITERALS = [\n    \"admin\",\n    \"all\",\n    \"auto\",\n    \"both\",\n    \"bottom\",\n    \"bzip2\",\n    \"colored\",\n    \"components\",\n    \"current\",\n    \"custom\",\n    \"directory\",\n    \"false\",\n    \"force\",\n    \"hide\",\n    \"highest\",\n    \"ifdiff\",\n    \"ifnewer\",\n    \"instfiles\",\n    \"lastused\",\n    \"leave\",\n    \"left\",\n    \"license\",\n    \"listonly\",\n    \"lzma\",\n    \"nevershow\",\n    \"none\",\n    \"normal\",\n    \"notset\",\n    \"off\",\n    \"on\",\n    \"open\",\n    \"print\",\n    \"right\",\n    \"show\",\n    \"silent\",\n    \"silentlog\",\n    \"smooth\",\n    \"textonly\",\n    \"top\",\n    \"true\",\n    \"try\",\n    \"un.components\",\n    \"un.custom\",\n    \"un.directory\",\n    \"un.instfiles\",\n    \"un.license\",\n    \"uninstConfirm\",\n    \"user\",\n    \"Win10\",\n    \"Win7\",\n    \"Win8\",\n    \"WinVista\",\n    \"zlib\"\n  ];\n\n  const FUNCTION_DEFINITION = {\n    match: [\n      /Function/,\n      /\\s+/,\n      regex.concat(/(\\.)?/, hljs.IDENT_RE)\n    ],\n    scope: {\n      1: \"keyword\",\n      3: \"title.function\"\n    }\n  };\n\n  // Var Custom.Variable.Name.Item\n  // Var /GLOBAL Custom.Variable.Name.Item\n  const VARIABLE_NAME_RE = /[A-Za-z][\\w.]*/;\n  const VARIABLE_DEFINITION = {\n    match: [\n      /Var/,\n      /\\s+/,\n      /(?:\\/GLOBAL\\s+)?/,\n      VARIABLE_NAME_RE\n    ],\n    scope: {\n      1: \"keyword\",\n      3: \"params\",\n      4: \"variable\"\n    }\n  };\n\n  return {\n    name: 'NSIS',\n    case_insensitive: true,\n    keywords: {\n      keyword: KEYWORDS,\n      literal: LITERALS\n    },\n    contains: [\n      hljs.HASH_COMMENT_MODE,\n      hljs.C_BLOCK_COMMENT_MODE,\n      hljs.COMMENT(\n        ';',\n        '$',\n        { relevance: 0 }\n      ),\n      VARIABLE_DEFINITION,\n      FUNCTION_DEFINITION,\n      { beginKeywords: 'Function PageEx Section SectionGroup FunctionEnd SectionEnd', },\n      STRING,\n      COMPILER,\n      DEFINES,\n      VARIABLES,\n      LANGUAGES,\n      PARAMETERS,\n      PLUGINS,\n      hljs.NUMBER_MODE\n    ]\n  };\n}\n\nmodule.exports = nsis;\n","/*\nLanguage: Objective-C\nAuthor: Valerii Hiora <valerii.hiora@gmail.com>\nContributors: Angel G. Olloqui <angelgarcia.mail@gmail.com>, Matt Diephouse <matt@diephouse.com>, Andrew Farmer <ahfarmer@gmail.com>, Minh Nguyễn <mxn@1ec5.org>\nWebsite: https://developer.apple.com/documentation/objectivec\nCategory: common\n*/\n\nfunction objectivec(hljs) {\n  const API_CLASS = {\n    className: 'built_in',\n    begin: '\\\\b(AV|CA|CF|CG|CI|CL|CM|CN|CT|MK|MP|MTK|MTL|NS|SCN|SK|UI|WK|XC)\\\\w+'\n  };\n  const IDENTIFIER_RE = /[a-zA-Z@][a-zA-Z0-9_]*/;\n  const TYPES = [\n    \"int\",\n    \"float\",\n    \"char\",\n    \"unsigned\",\n    \"signed\",\n    \"short\",\n    \"long\",\n    \"double\",\n    \"wchar_t\",\n    \"unichar\",\n    \"void\",\n    \"bool\",\n    \"BOOL\",\n    \"id|0\",\n    \"_Bool\"\n  ];\n  const KWS = [\n    \"while\",\n    \"export\",\n    \"sizeof\",\n    \"typedef\",\n    \"const\",\n    \"struct\",\n    \"for\",\n    \"union\",\n    \"volatile\",\n    \"static\",\n    \"mutable\",\n    \"if\",\n    \"do\",\n    \"return\",\n    \"goto\",\n    \"enum\",\n    \"else\",\n    \"break\",\n    \"extern\",\n    \"asm\",\n    \"case\",\n    \"default\",\n    \"register\",\n    \"explicit\",\n    \"typename\",\n    \"switch\",\n    \"continue\",\n    \"inline\",\n    \"readonly\",\n    \"assign\",\n    \"readwrite\",\n    \"self\",\n    \"@synchronized\",\n    \"id\",\n    \"typeof\",\n    \"nonatomic\",\n    \"IBOutlet\",\n    \"IBAction\",\n    \"strong\",\n    \"weak\",\n    \"copy\",\n    \"in\",\n    \"out\",\n    \"inout\",\n    \"bycopy\",\n    \"byref\",\n    \"oneway\",\n    \"__strong\",\n    \"__weak\",\n    \"__block\",\n    \"__autoreleasing\",\n    \"@private\",\n    \"@protected\",\n    \"@public\",\n    \"@try\",\n    \"@property\",\n    \"@end\",\n    \"@throw\",\n    \"@catch\",\n    \"@finally\",\n    \"@autoreleasepool\",\n    \"@synthesize\",\n    \"@dynamic\",\n    \"@selector\",\n    \"@optional\",\n    \"@required\",\n    \"@encode\",\n    \"@package\",\n    \"@import\",\n    \"@defs\",\n    \"@compatibility_alias\",\n    \"__bridge\",\n    \"__bridge_transfer\",\n    \"__bridge_retained\",\n    \"__bridge_retain\",\n    \"__covariant\",\n    \"__contravariant\",\n    \"__kindof\",\n    \"_Nonnull\",\n    \"_Nullable\",\n    \"_Null_unspecified\",\n    \"__FUNCTION__\",\n    \"__PRETTY_FUNCTION__\",\n    \"__attribute__\",\n    \"getter\",\n    \"setter\",\n    \"retain\",\n    \"unsafe_unretained\",\n    \"nonnull\",\n    \"nullable\",\n    \"null_unspecified\",\n    \"null_resettable\",\n    \"class\",\n    \"instancetype\",\n    \"NS_DESIGNATED_INITIALIZER\",\n    \"NS_UNAVAILABLE\",\n    \"NS_REQUIRES_SUPER\",\n    \"NS_RETURNS_INNER_POINTER\",\n    \"NS_INLINE\",\n    \"NS_AVAILABLE\",\n    \"NS_DEPRECATED\",\n    \"NS_ENUM\",\n    \"NS_OPTIONS\",\n    \"NS_SWIFT_UNAVAILABLE\",\n    \"NS_ASSUME_NONNULL_BEGIN\",\n    \"NS_ASSUME_NONNULL_END\",\n    \"NS_REFINED_FOR_SWIFT\",\n    \"NS_SWIFT_NAME\",\n    \"NS_SWIFT_NOTHROW\",\n    \"NS_DURING\",\n    \"NS_HANDLER\",\n    \"NS_ENDHANDLER\",\n    \"NS_VALUERETURN\",\n    \"NS_VOIDRETURN\"\n  ];\n  const LITERALS = [\n    \"false\",\n    \"true\",\n    \"FALSE\",\n    \"TRUE\",\n    \"nil\",\n    \"YES\",\n    \"NO\",\n    \"NULL\"\n  ];\n  const BUILT_INS = [\n    \"dispatch_once_t\",\n    \"dispatch_queue_t\",\n    \"dispatch_sync\",\n    \"dispatch_async\",\n    \"dispatch_once\"\n  ];\n  const KEYWORDS = {\n    \"variable.language\": [\n      \"this\",\n      \"super\"\n    ],\n    $pattern: IDENTIFIER_RE,\n    keyword: KWS,\n    literal: LITERALS,\n    built_in: BUILT_INS,\n    type: TYPES\n  };\n  const CLASS_KEYWORDS = {\n    $pattern: IDENTIFIER_RE,\n    keyword: [\n      \"@interface\",\n      \"@class\",\n      \"@protocol\",\n      \"@implementation\"\n    ]\n  };\n  return {\n    name: 'Objective-C',\n    aliases: [\n      'mm',\n      'objc',\n      'obj-c',\n      'obj-c++',\n      'objective-c++'\n    ],\n    keywords: KEYWORDS,\n    illegal: '</',\n    contains: [\n      API_CLASS,\n      hljs.C_LINE_COMMENT_MODE,\n      hljs.C_BLOCK_COMMENT_MODE,\n      hljs.C_NUMBER_MODE,\n      hljs.QUOTE_STRING_MODE,\n      hljs.APOS_STRING_MODE,\n      {\n        className: 'string',\n        variants: [\n          {\n            begin: '@\"',\n            end: '\"',\n            illegal: '\\\\n',\n            contains: [ hljs.BACKSLASH_ESCAPE ]\n          }\n        ]\n      },\n      {\n        className: 'meta',\n        begin: /#\\s*[a-z]+\\b/,\n        end: /$/,\n        keywords: { keyword:\n            'if else elif endif define undef warning error line '\n            + 'pragma ifdef ifndef include' },\n        contains: [\n          {\n            begin: /\\\\\\n/,\n            relevance: 0\n          },\n          hljs.inherit(hljs.QUOTE_STRING_MODE, { className: 'string' }),\n          {\n            className: 'string',\n            begin: /<.*?>/,\n            end: /$/,\n            illegal: '\\\\n'\n          },\n          hljs.C_LINE_COMMENT_MODE,\n          hljs.C_BLOCK_COMMENT_MODE\n        ]\n      },\n      {\n        className: 'class',\n        begin: '(' + CLASS_KEYWORDS.keyword.join('|') + ')\\\\b',\n        end: /(\\{|$)/,\n        excludeEnd: true,\n        keywords: CLASS_KEYWORDS,\n        contains: [ hljs.UNDERSCORE_TITLE_MODE ]\n      },\n      {\n        begin: '\\\\.' + hljs.UNDERSCORE_IDENT_RE,\n        relevance: 0\n      }\n    ]\n  };\n}\n\nmodule.exports = objectivec;\n","/*\nLanguage: OCaml\nAuthor: Mehdi Dogguy <mehdi@dogguy.org>\nContributors: Nicolas Braud-Santoni <nicolas.braud-santoni@ens-cachan.fr>, Mickael Delahaye <mickael.delahaye@gmail.com>\nDescription: OCaml language definition.\nWebsite: https://ocaml.org\nCategory: functional\n*/\n\nfunction ocaml(hljs) {\n  /* missing support for heredoc-like string (OCaml 4.0.2+) */\n  return {\n    name: 'OCaml',\n    aliases: [ 'ml' ],\n    keywords: {\n      $pattern: '[a-z_]\\\\w*!?',\n      keyword:\n        'and as assert asr begin class constraint do done downto else end '\n        + 'exception external for fun function functor if in include '\n        + 'inherit! inherit initializer land lazy let lor lsl lsr lxor match method!|10 method '\n        + 'mod module mutable new object of open! open or private rec sig struct '\n        + 'then to try type val! val virtual when while with '\n        /* camlp4 */\n        + 'parser value',\n      built_in:\n        /* built-in types */\n        'array bool bytes char exn|5 float int int32 int64 list lazy_t|5 nativeint|5 string unit '\n        /* (some) types in Pervasives */\n        + 'in_channel out_channel ref',\n      literal:\n        'true false'\n    },\n    illegal: /\\/\\/|>>/,\n    contains: [\n      {\n        className: 'literal',\n        begin: '\\\\[(\\\\|\\\\|)?\\\\]|\\\\(\\\\)',\n        relevance: 0\n      },\n      hljs.COMMENT(\n        '\\\\(\\\\*',\n        '\\\\*\\\\)',\n        { contains: [ 'self' ] }\n      ),\n      { /* type variable */\n        className: 'symbol',\n        begin: '\\'[A-Za-z_](?!\\')[\\\\w\\']*'\n        /* the grammar is ambiguous on how 'a'b should be interpreted but not the compiler */\n      },\n      { /* polymorphic variant */\n        className: 'type',\n        begin: '`[A-Z][\\\\w\\']*'\n      },\n      { /* module or constructor */\n        className: 'type',\n        begin: '\\\\b[A-Z][\\\\w\\']*',\n        relevance: 0\n      },\n      { /* don't color identifiers, but safely catch all identifiers with ' */\n        begin: '[a-z_]\\\\w*\\'[\\\\w\\']*',\n        relevance: 0\n      },\n      hljs.inherit(hljs.APOS_STRING_MODE, {\n        className: 'string',\n        relevance: 0\n      }),\n      hljs.inherit(hljs.QUOTE_STRING_MODE, { illegal: null }),\n      {\n        className: 'number',\n        begin:\n          '\\\\b(0[xX][a-fA-F0-9_]+[Lln]?|'\n          + '0[oO][0-7_]+[Lln]?|'\n          + '0[bB][01_]+[Lln]?|'\n          + '[0-9][0-9_]*([Lln]|(\\\\.[0-9_]*)?([eE][-+]?[0-9_]+)?)?)',\n        relevance: 0\n      },\n      { begin: /->/ // relevance booster\n      }\n    ]\n  };\n}\n\nmodule.exports = ocaml;\n","/*\nLanguage: OpenSCAD\nAuthor: Dan Panzarella <alsoelp@gmail.com>\nDescription: OpenSCAD is a language for the 3D CAD modeling software of the same name.\nWebsite: https://www.openscad.org\nCategory: scientific\n*/\n\nfunction openscad(hljs) {\n  const SPECIAL_VARS = {\n    className: 'keyword',\n    begin: '\\\\$(f[asn]|t|vp[rtd]|children)'\n  };\n  const LITERALS = {\n    className: 'literal',\n    begin: 'false|true|PI|undef'\n  };\n  const NUMBERS = {\n    className: 'number',\n    begin: '\\\\b\\\\d+(\\\\.\\\\d+)?(e-?\\\\d+)?', // adds 1e5, 1e-10\n    relevance: 0\n  };\n  const STRING = hljs.inherit(hljs.QUOTE_STRING_MODE, { illegal: null });\n  const PREPRO = {\n    className: 'meta',\n    keywords: { keyword: 'include use' },\n    begin: 'include|use <',\n    end: '>'\n  };\n  const PARAMS = {\n    className: 'params',\n    begin: '\\\\(',\n    end: '\\\\)',\n    contains: [\n      'self',\n      NUMBERS,\n      STRING,\n      SPECIAL_VARS,\n      LITERALS\n    ]\n  };\n  const MODIFIERS = {\n    begin: '[*!#%]',\n    relevance: 0\n  };\n  const FUNCTIONS = {\n    className: 'function',\n    beginKeywords: 'module function',\n    end: /=|\\{/,\n    contains: [\n      PARAMS,\n      hljs.UNDERSCORE_TITLE_MODE\n    ]\n  };\n\n  return {\n    name: 'OpenSCAD',\n    aliases: [ 'scad' ],\n    keywords: {\n      keyword: 'function module include use for intersection_for if else \\\\%',\n      literal: 'false true PI undef',\n      built_in: 'circle square polygon text sphere cube cylinder polyhedron translate rotate scale resize mirror multmatrix color offset hull minkowski union difference intersection abs sign sin cos tan acos asin atan atan2 floor round ceil ln log pow sqrt exp rands min max concat lookup str chr search version version_num norm cross parent_module echo import import_dxf dxf_linear_extrude linear_extrude rotate_extrude surface projection render children dxf_cross dxf_dim let assign'\n    },\n    contains: [\n      hljs.C_LINE_COMMENT_MODE,\n      hljs.C_BLOCK_COMMENT_MODE,\n      NUMBERS,\n      PREPRO,\n      STRING,\n      SPECIAL_VARS,\n      MODIFIERS,\n      FUNCTIONS\n    ]\n  };\n}\n\nmodule.exports = openscad;\n","/*\nLanguage: Oxygene\nAuthor: Carlo Kok <ck@remobjects.com>\nDescription: Oxygene is built on the foundation of Object Pascal, revamped and extended to be a modern language for the twenty-first century.\nWebsite: https://www.elementscompiler.com/elements/default.aspx\nCategory: build-system\n*/\n\nfunction oxygene(hljs) {\n  const OXYGENE_KEYWORDS = {\n    $pattern: /\\.?\\w+/,\n    keyword:\n      'abstract add and array as asc aspect assembly async begin break block by case class concat const copy constructor continue '\n      + 'create default delegate desc distinct div do downto dynamic each else empty end ensure enum equals event except exit extension external false '\n      + 'final finalize finalizer finally flags for forward from function future global group has if implementation implements implies in index inherited '\n      + 'inline interface into invariants is iterator join locked locking loop matching method mod module namespace nested new nil not notify nullable of '\n      + 'old on operator or order out override parallel params partial pinned private procedure property protected public queryable raise read readonly '\n      + 'record reintroduce remove repeat require result reverse sealed select self sequence set shl shr skip static step soft take then to true try tuple '\n      + 'type union unit unsafe until uses using var virtual raises volatile where while with write xor yield await mapped deprecated stdcall cdecl pascal '\n      + 'register safecall overload library platform reference packed strict published autoreleasepool selector strong weak unretained'\n  };\n  const CURLY_COMMENT = hljs.COMMENT(\n    /\\{/,\n    /\\}/,\n    { relevance: 0 }\n  );\n  const PAREN_COMMENT = hljs.COMMENT(\n    '\\\\(\\\\*',\n    '\\\\*\\\\)',\n    { relevance: 10 }\n  );\n  const STRING = {\n    className: 'string',\n    begin: '\\'',\n    end: '\\'',\n    contains: [ { begin: '\\'\\'' } ]\n  };\n  const CHAR_STRING = {\n    className: 'string',\n    begin: '(#\\\\d+)+'\n  };\n  const FUNCTION = {\n    beginKeywords: 'function constructor destructor procedure method',\n    end: '[:;]',\n    keywords: 'function constructor|10 destructor|10 procedure|10 method|10',\n    contains: [\n      hljs.inherit(hljs.TITLE_MODE, { scope: \"title.function\" }),\n      {\n        className: 'params',\n        begin: '\\\\(',\n        end: '\\\\)',\n        keywords: OXYGENE_KEYWORDS,\n        contains: [\n          STRING,\n          CHAR_STRING\n        ]\n      },\n      CURLY_COMMENT,\n      PAREN_COMMENT\n    ]\n  };\n\n  const SEMICOLON = {\n    scope: \"punctuation\",\n    match: /;/,\n    relevance: 0\n  };\n\n  return {\n    name: 'Oxygene',\n    case_insensitive: true,\n    keywords: OXYGENE_KEYWORDS,\n    illegal: '(\"|\\\\$[G-Zg-z]|\\\\/\\\\*|</|=>|->)',\n    contains: [\n      CURLY_COMMENT,\n      PAREN_COMMENT,\n      hljs.C_LINE_COMMENT_MODE,\n      STRING,\n      CHAR_STRING,\n      hljs.NUMBER_MODE,\n      FUNCTION,\n      SEMICOLON\n    ]\n  };\n}\n\nmodule.exports = oxygene;\n","/*\nLanguage: Parser3\nRequires: xml.js\nAuthor: Oleg Volchkov <oleg@volchkov.net>\nWebsite: https://www.parser.ru/en/\nCategory: template\n*/\n\nfunction parser3(hljs) {\n  const CURLY_SUBCOMMENT = hljs.COMMENT(\n    /\\{/,\n    /\\}/,\n    { contains: [ 'self' ] }\n  );\n  return {\n    name: 'Parser3',\n    subLanguage: 'xml',\n    relevance: 0,\n    contains: [\n      hljs.COMMENT('^#', '$'),\n      hljs.COMMENT(\n        /\\^rem\\{/,\n        /\\}/,\n        {\n          relevance: 10,\n          contains: [ CURLY_SUBCOMMENT ]\n        }\n      ),\n      {\n        className: 'meta',\n        begin: '^@(?:BASE|USE|CLASS|OPTIONS)$',\n        relevance: 10\n      },\n      {\n        className: 'title',\n        begin: '@[\\\\w\\\\-]+\\\\[[\\\\w^;\\\\-]*\\\\](?:\\\\[[\\\\w^;\\\\-]*\\\\])?(?:.*)$'\n      },\n      {\n        className: 'variable',\n        begin: /\\$\\{?[\\w\\-.:]+\\}?/\n      },\n      {\n        className: 'keyword',\n        begin: /\\^[\\w\\-.:]+/\n      },\n      {\n        className: 'number',\n        begin: '\\\\^#[0-9a-fA-F]+'\n      },\n      hljs.C_NUMBER_MODE\n    ]\n  };\n}\n\nmodule.exports = parser3;\n","/*\nLanguage: Packet Filter config\nDescription: pf.conf — packet filter configuration file (OpenBSD)\nAuthor: Peter Piwowarski <oldlaptop654@aol.com>\nWebsite: http://man.openbsd.org/pf.conf\nCategory: config\n*/\n\nfunction pf(hljs) {\n  const MACRO = {\n    className: 'variable',\n    begin: /\\$[\\w\\d#@][\\w\\d_]*/,\n    relevance: 0\n  };\n  const TABLE = {\n    className: 'variable',\n    begin: /<(?!\\/)/,\n    end: />/\n  };\n\n  return {\n    name: 'Packet Filter config',\n    aliases: [ 'pf.conf' ],\n    keywords: {\n      $pattern: /[a-z0-9_<>-]+/,\n      built_in: /* block match pass are \"actions\" in pf.conf(5), the rest are\n                 * lexically similar top-level commands.\n                 */\n        'block match pass load anchor|5 antispoof|10 set table',\n      keyword:\n        'in out log quick on rdomain inet inet6 proto from port os to route '\n        + 'allow-opts divert-packet divert-reply divert-to flags group icmp-type '\n        + 'icmp6-type label once probability recieved-on rtable prio queue '\n        + 'tos tag tagged user keep fragment for os drop '\n        + 'af-to|10 binat-to|10 nat-to|10 rdr-to|10 bitmask least-stats random round-robin '\n        + 'source-hash static-port '\n        + 'dup-to reply-to route-to '\n        + 'parent bandwidth default min max qlimit '\n        + 'block-policy debug fingerprints hostid limit loginterface optimization '\n        + 'reassemble ruleset-optimization basic none profile skip state-defaults '\n        + 'state-policy timeout '\n        + 'const counters persist '\n        + 'no modulate synproxy state|5 floating if-bound no-sync pflow|10 sloppy '\n        + 'source-track global rule max-src-nodes max-src-states max-src-conn '\n        + 'max-src-conn-rate overload flush '\n        + 'scrub|5 max-mss min-ttl no-df|10 random-id',\n      literal:\n        'all any no-route self urpf-failed egress|5 unknown'\n    },\n    contains: [\n      hljs.HASH_COMMENT_MODE,\n      hljs.NUMBER_MODE,\n      hljs.QUOTE_STRING_MODE,\n      MACRO,\n      TABLE\n    ]\n  };\n}\n\nmodule.exports = pf;\n","/*\nLanguage: PostgreSQL and PL/pgSQL\nAuthor: Egor Rogov (e.rogov@postgrespro.ru)\nWebsite: https://www.postgresql.org/docs/11/sql.html\nDescription:\n    This language incorporates both PostgreSQL SQL dialect and PL/pgSQL language.\n    It is based on PostgreSQL version 11. Some notes:\n    - Text in double-dollar-strings is _always_ interpreted as some programming code. Text\n      in ordinary quotes is _never_ interpreted that way and highlighted just as a string.\n    - There are quite a bit \"special cases\". That's because many keywords are not strictly\n      they are keywords in some contexts and ordinary identifiers in others. Only some\n      of such cases are handled; you still can get some of your identifiers highlighted\n      wrong way.\n    - Function names deliberately are not highlighted. There is no way to tell function\n      call from other constructs, hence we can't highlight _all_ function names. And\n      some names highlighted while others not looks ugly.\nCategory: database\n*/\n\nfunction pgsql(hljs) {\n  const COMMENT_MODE = hljs.COMMENT('--', '$');\n  const UNQUOTED_IDENT = '[a-zA-Z_][a-zA-Z_0-9$]*';\n  const DOLLAR_STRING = '\\\\$([a-zA-Z_]?|[a-zA-Z_][a-zA-Z_0-9]*)\\\\$';\n  const LABEL = '<<\\\\s*' + UNQUOTED_IDENT + '\\\\s*>>';\n\n  const SQL_KW =\n    // https://www.postgresql.org/docs/11/static/sql-keywords-appendix.html\n    // https://www.postgresql.org/docs/11/static/sql-commands.html\n    // SQL commands (starting words)\n    'ABORT ALTER ANALYZE BEGIN CALL CHECKPOINT|10 CLOSE CLUSTER COMMENT COMMIT COPY CREATE DEALLOCATE DECLARE '\n    + 'DELETE DISCARD DO DROP END EXECUTE EXPLAIN FETCH GRANT IMPORT INSERT LISTEN LOAD LOCK MOVE NOTIFY '\n    + 'PREPARE REASSIGN|10 REFRESH REINDEX RELEASE RESET REVOKE ROLLBACK SAVEPOINT SECURITY SELECT SET SHOW '\n    + 'START TRUNCATE UNLISTEN|10 UPDATE VACUUM|10 VALUES '\n    // SQL commands (others)\n    + 'AGGREGATE COLLATION CONVERSION|10 DATABASE DEFAULT PRIVILEGES DOMAIN TRIGGER EXTENSION FOREIGN '\n    + 'WRAPPER|10 TABLE FUNCTION GROUP LANGUAGE LARGE OBJECT MATERIALIZED VIEW OPERATOR CLASS '\n    + 'FAMILY POLICY PUBLICATION|10 ROLE RULE SCHEMA SEQUENCE SERVER STATISTICS SUBSCRIPTION SYSTEM '\n    + 'TABLESPACE CONFIGURATION DICTIONARY PARSER TEMPLATE TYPE USER MAPPING PREPARED ACCESS '\n    + 'METHOD CAST AS TRANSFORM TRANSACTION OWNED TO INTO SESSION AUTHORIZATION '\n    + 'INDEX PROCEDURE ASSERTION '\n    // additional reserved key words\n    + 'ALL ANALYSE AND ANY ARRAY ASC ASYMMETRIC|10 BOTH CASE CHECK '\n    + 'COLLATE COLUMN CONCURRENTLY|10 CONSTRAINT CROSS '\n    + 'DEFERRABLE RANGE '\n    + 'DESC DISTINCT ELSE EXCEPT FOR FREEZE|10 FROM FULL HAVING '\n    + 'ILIKE IN INITIALLY INNER INTERSECT IS ISNULL JOIN LATERAL LEADING LIKE LIMIT '\n    + 'NATURAL NOT NOTNULL NULL OFFSET ON ONLY OR ORDER OUTER OVERLAPS PLACING PRIMARY '\n    + 'REFERENCES RETURNING SIMILAR SOME SYMMETRIC TABLESAMPLE THEN '\n    + 'TRAILING UNION UNIQUE USING VARIADIC|10 VERBOSE WHEN WHERE WINDOW WITH '\n    // some of non-reserved (which are used in clauses or as PL/pgSQL keyword)\n    + 'BY RETURNS INOUT OUT SETOF|10 IF STRICT CURRENT CONTINUE OWNER LOCATION OVER PARTITION WITHIN '\n    + 'BETWEEN ESCAPE EXTERNAL INVOKER DEFINER WORK RENAME VERSION CONNECTION CONNECT '\n    + 'TABLES TEMP TEMPORARY FUNCTIONS SEQUENCES TYPES SCHEMAS OPTION CASCADE RESTRICT ADD ADMIN '\n    + 'EXISTS VALID VALIDATE ENABLE DISABLE REPLICA|10 ALWAYS PASSING COLUMNS PATH '\n    + 'REF VALUE OVERRIDING IMMUTABLE STABLE VOLATILE BEFORE AFTER EACH ROW PROCEDURAL '\n    + 'ROUTINE NO HANDLER VALIDATOR OPTIONS STORAGE OIDS|10 WITHOUT INHERIT DEPENDS CALLED '\n    + 'INPUT LEAKPROOF|10 COST ROWS NOWAIT SEARCH UNTIL ENCRYPTED|10 PASSWORD CONFLICT|10 '\n    + 'INSTEAD INHERITS CHARACTERISTICS WRITE CURSOR ALSO STATEMENT SHARE EXCLUSIVE INLINE '\n    + 'ISOLATION REPEATABLE READ COMMITTED SERIALIZABLE UNCOMMITTED LOCAL GLOBAL SQL PROCEDURES '\n    + 'RECURSIVE SNAPSHOT ROLLUP CUBE TRUSTED|10 INCLUDE FOLLOWING PRECEDING UNBOUNDED RANGE GROUPS '\n    + 'UNENCRYPTED|10 SYSID FORMAT DELIMITER HEADER QUOTE ENCODING FILTER OFF '\n    // some parameters of VACUUM/ANALYZE/EXPLAIN\n    + 'FORCE_QUOTE FORCE_NOT_NULL FORCE_NULL COSTS BUFFERS TIMING SUMMARY DISABLE_PAGE_SKIPPING '\n    //\n    + 'RESTART CYCLE GENERATED IDENTITY DEFERRED IMMEDIATE LEVEL LOGGED UNLOGGED '\n    + 'OF NOTHING NONE EXCLUDE ATTRIBUTE '\n    // from GRANT (not keywords actually)\n    + 'USAGE ROUTINES '\n    // actually literals, but look better this way (due to IS TRUE, IS FALSE, ISNULL etc)\n    + 'TRUE FALSE NAN INFINITY ';\n\n  const ROLE_ATTRS = // only those not in keywrods already\n    'SUPERUSER NOSUPERUSER CREATEDB NOCREATEDB CREATEROLE NOCREATEROLE INHERIT NOINHERIT '\n    + 'LOGIN NOLOGIN REPLICATION NOREPLICATION BYPASSRLS NOBYPASSRLS ';\n\n  const PLPGSQL_KW =\n    'ALIAS BEGIN CONSTANT DECLARE END EXCEPTION RETURN PERFORM|10 RAISE GET DIAGNOSTICS '\n    + 'STACKED|10 FOREACH LOOP ELSIF EXIT WHILE REVERSE SLICE DEBUG LOG INFO NOTICE WARNING ASSERT '\n    + 'OPEN ';\n\n  const TYPES =\n    // https://www.postgresql.org/docs/11/static/datatype.html\n    'BIGINT INT8 BIGSERIAL SERIAL8 BIT VARYING VARBIT BOOLEAN BOOL BOX BYTEA CHARACTER CHAR VARCHAR '\n    + 'CIDR CIRCLE DATE DOUBLE PRECISION FLOAT8 FLOAT INET INTEGER INT INT4 INTERVAL JSON JSONB LINE LSEG|10 '\n    + 'MACADDR MACADDR8 MONEY NUMERIC DEC DECIMAL PATH POINT POLYGON REAL FLOAT4 SMALLINT INT2 '\n    + 'SMALLSERIAL|10 SERIAL2|10 SERIAL|10 SERIAL4|10 TEXT TIME ZONE TIMETZ|10 TIMESTAMP TIMESTAMPTZ|10 TSQUERY|10 TSVECTOR|10 '\n    + 'TXID_SNAPSHOT|10 UUID XML NATIONAL NCHAR '\n    + 'INT4RANGE|10 INT8RANGE|10 NUMRANGE|10 TSRANGE|10 TSTZRANGE|10 DATERANGE|10 '\n    // pseudotypes\n    + 'ANYELEMENT ANYARRAY ANYNONARRAY ANYENUM ANYRANGE CSTRING INTERNAL '\n    + 'RECORD PG_DDL_COMMAND VOID UNKNOWN OPAQUE REFCURSOR '\n    // spec. type\n    + 'NAME '\n    // OID-types\n    + 'OID REGPROC|10 REGPROCEDURE|10 REGOPER|10 REGOPERATOR|10 REGCLASS|10 REGTYPE|10 REGROLE|10 '\n    + 'REGNAMESPACE|10 REGCONFIG|10 REGDICTIONARY|10 ';// +\n\n  const TYPES_RE =\n    TYPES.trim()\n      .split(' ')\n      .map(function(val) { return val.split('|')[0]; })\n      .join('|');\n\n  const SQL_BI =\n    'CURRENT_TIME CURRENT_TIMESTAMP CURRENT_USER CURRENT_CATALOG|10 CURRENT_DATE LOCALTIME LOCALTIMESTAMP '\n    + 'CURRENT_ROLE|10 CURRENT_SCHEMA|10 SESSION_USER PUBLIC ';\n\n  const PLPGSQL_BI =\n    'FOUND NEW OLD TG_NAME|10 TG_WHEN|10 TG_LEVEL|10 TG_OP|10 TG_RELID|10 TG_RELNAME|10 '\n    + 'TG_TABLE_NAME|10 TG_TABLE_SCHEMA|10 TG_NARGS|10 TG_ARGV|10 TG_EVENT|10 TG_TAG|10 '\n    // get diagnostics\n    + 'ROW_COUNT RESULT_OID|10 PG_CONTEXT|10 RETURNED_SQLSTATE COLUMN_NAME CONSTRAINT_NAME '\n    + 'PG_DATATYPE_NAME|10 MESSAGE_TEXT TABLE_NAME SCHEMA_NAME PG_EXCEPTION_DETAIL|10 '\n    + 'PG_EXCEPTION_HINT|10 PG_EXCEPTION_CONTEXT|10 ';\n\n  const PLPGSQL_EXCEPTIONS =\n    // exceptions https://www.postgresql.org/docs/current/static/errcodes-appendix.html\n    'SQLSTATE SQLERRM|10 '\n    + 'SUCCESSFUL_COMPLETION WARNING DYNAMIC_RESULT_SETS_RETURNED IMPLICIT_ZERO_BIT_PADDING '\n    + 'NULL_VALUE_ELIMINATED_IN_SET_FUNCTION PRIVILEGE_NOT_GRANTED PRIVILEGE_NOT_REVOKED '\n    + 'STRING_DATA_RIGHT_TRUNCATION DEPRECATED_FEATURE NO_DATA NO_ADDITIONAL_DYNAMIC_RESULT_SETS_RETURNED '\n    + 'SQL_STATEMENT_NOT_YET_COMPLETE CONNECTION_EXCEPTION CONNECTION_DOES_NOT_EXIST CONNECTION_FAILURE '\n    + 'SQLCLIENT_UNABLE_TO_ESTABLISH_SQLCONNECTION SQLSERVER_REJECTED_ESTABLISHMENT_OF_SQLCONNECTION '\n    + 'TRANSACTION_RESOLUTION_UNKNOWN PROTOCOL_VIOLATION TRIGGERED_ACTION_EXCEPTION FEATURE_NOT_SUPPORTED '\n    + 'INVALID_TRANSACTION_INITIATION LOCATOR_EXCEPTION INVALID_LOCATOR_SPECIFICATION INVALID_GRANTOR '\n    + 'INVALID_GRANT_OPERATION INVALID_ROLE_SPECIFICATION DIAGNOSTICS_EXCEPTION '\n    + 'STACKED_DIAGNOSTICS_ACCESSED_WITHOUT_ACTIVE_HANDLER CASE_NOT_FOUND CARDINALITY_VIOLATION '\n    + 'DATA_EXCEPTION ARRAY_SUBSCRIPT_ERROR CHARACTER_NOT_IN_REPERTOIRE DATETIME_FIELD_OVERFLOW '\n    + 'DIVISION_BY_ZERO ERROR_IN_ASSIGNMENT ESCAPE_CHARACTER_CONFLICT INDICATOR_OVERFLOW '\n    + 'INTERVAL_FIELD_OVERFLOW INVALID_ARGUMENT_FOR_LOGARITHM INVALID_ARGUMENT_FOR_NTILE_FUNCTION '\n    + 'INVALID_ARGUMENT_FOR_NTH_VALUE_FUNCTION INVALID_ARGUMENT_FOR_POWER_FUNCTION '\n    + 'INVALID_ARGUMENT_FOR_WIDTH_BUCKET_FUNCTION INVALID_CHARACTER_VALUE_FOR_CAST '\n    + 'INVALID_DATETIME_FORMAT INVALID_ESCAPE_CHARACTER INVALID_ESCAPE_OCTET INVALID_ESCAPE_SEQUENCE '\n    + 'NONSTANDARD_USE_OF_ESCAPE_CHARACTER INVALID_INDICATOR_PARAMETER_VALUE INVALID_PARAMETER_VALUE '\n    + 'INVALID_REGULAR_EXPRESSION INVALID_ROW_COUNT_IN_LIMIT_CLAUSE '\n    + 'INVALID_ROW_COUNT_IN_RESULT_OFFSET_CLAUSE INVALID_TABLESAMPLE_ARGUMENT INVALID_TABLESAMPLE_REPEAT '\n    + 'INVALID_TIME_ZONE_DISPLACEMENT_VALUE INVALID_USE_OF_ESCAPE_CHARACTER MOST_SPECIFIC_TYPE_MISMATCH '\n    + 'NULL_VALUE_NOT_ALLOWED NULL_VALUE_NO_INDICATOR_PARAMETER NUMERIC_VALUE_OUT_OF_RANGE '\n    + 'SEQUENCE_GENERATOR_LIMIT_EXCEEDED STRING_DATA_LENGTH_MISMATCH STRING_DATA_RIGHT_TRUNCATION '\n    + 'SUBSTRING_ERROR TRIM_ERROR UNTERMINATED_C_STRING ZERO_LENGTH_CHARACTER_STRING '\n    + 'FLOATING_POINT_EXCEPTION INVALID_TEXT_REPRESENTATION INVALID_BINARY_REPRESENTATION '\n    + 'BAD_COPY_FILE_FORMAT UNTRANSLATABLE_CHARACTER NOT_AN_XML_DOCUMENT INVALID_XML_DOCUMENT '\n    + 'INVALID_XML_CONTENT INVALID_XML_COMMENT INVALID_XML_PROCESSING_INSTRUCTION '\n    + 'INTEGRITY_CONSTRAINT_VIOLATION RESTRICT_VIOLATION NOT_NULL_VIOLATION FOREIGN_KEY_VIOLATION '\n    + 'UNIQUE_VIOLATION CHECK_VIOLATION EXCLUSION_VIOLATION INVALID_CURSOR_STATE '\n    + 'INVALID_TRANSACTION_STATE ACTIVE_SQL_TRANSACTION BRANCH_TRANSACTION_ALREADY_ACTIVE '\n    + 'HELD_CURSOR_REQUIRES_SAME_ISOLATION_LEVEL INAPPROPRIATE_ACCESS_MODE_FOR_BRANCH_TRANSACTION '\n    + 'INAPPROPRIATE_ISOLATION_LEVEL_FOR_BRANCH_TRANSACTION '\n    + 'NO_ACTIVE_SQL_TRANSACTION_FOR_BRANCH_TRANSACTION READ_ONLY_SQL_TRANSACTION '\n    + 'SCHEMA_AND_DATA_STATEMENT_MIXING_NOT_SUPPORTED NO_ACTIVE_SQL_TRANSACTION '\n    + 'IN_FAILED_SQL_TRANSACTION IDLE_IN_TRANSACTION_SESSION_TIMEOUT INVALID_SQL_STATEMENT_NAME '\n    + 'TRIGGERED_DATA_CHANGE_VIOLATION INVALID_AUTHORIZATION_SPECIFICATION INVALID_PASSWORD '\n    + 'DEPENDENT_PRIVILEGE_DESCRIPTORS_STILL_EXIST DEPENDENT_OBJECTS_STILL_EXIST '\n    + 'INVALID_TRANSACTION_TERMINATION SQL_ROUTINE_EXCEPTION FUNCTION_EXECUTED_NO_RETURN_STATEMENT '\n    + 'MODIFYING_SQL_DATA_NOT_PERMITTED PROHIBITED_SQL_STATEMENT_ATTEMPTED '\n    + 'READING_SQL_DATA_NOT_PERMITTED INVALID_CURSOR_NAME EXTERNAL_ROUTINE_EXCEPTION '\n    + 'CONTAINING_SQL_NOT_PERMITTED MODIFYING_SQL_DATA_NOT_PERMITTED '\n    + 'PROHIBITED_SQL_STATEMENT_ATTEMPTED READING_SQL_DATA_NOT_PERMITTED '\n    + 'EXTERNAL_ROUTINE_INVOCATION_EXCEPTION INVALID_SQLSTATE_RETURNED NULL_VALUE_NOT_ALLOWED '\n    + 'TRIGGER_PROTOCOL_VIOLATED SRF_PROTOCOL_VIOLATED EVENT_TRIGGER_PROTOCOL_VIOLATED '\n    + 'SAVEPOINT_EXCEPTION INVALID_SAVEPOINT_SPECIFICATION INVALID_CATALOG_NAME '\n    + 'INVALID_SCHEMA_NAME TRANSACTION_ROLLBACK TRANSACTION_INTEGRITY_CONSTRAINT_VIOLATION '\n    + 'SERIALIZATION_FAILURE STATEMENT_COMPLETION_UNKNOWN DEADLOCK_DETECTED '\n    + 'SYNTAX_ERROR_OR_ACCESS_RULE_VIOLATION SYNTAX_ERROR INSUFFICIENT_PRIVILEGE CANNOT_COERCE '\n    + 'GROUPING_ERROR WINDOWING_ERROR INVALID_RECURSION INVALID_FOREIGN_KEY INVALID_NAME '\n    + 'NAME_TOO_LONG RESERVED_NAME DATATYPE_MISMATCH INDETERMINATE_DATATYPE COLLATION_MISMATCH '\n    + 'INDETERMINATE_COLLATION WRONG_OBJECT_TYPE GENERATED_ALWAYS UNDEFINED_COLUMN '\n    + 'UNDEFINED_FUNCTION UNDEFINED_TABLE UNDEFINED_PARAMETER UNDEFINED_OBJECT '\n    + 'DUPLICATE_COLUMN DUPLICATE_CURSOR DUPLICATE_DATABASE DUPLICATE_FUNCTION '\n    + 'DUPLICATE_PREPARED_STATEMENT DUPLICATE_SCHEMA DUPLICATE_TABLE DUPLICATE_ALIAS '\n    + 'DUPLICATE_OBJECT AMBIGUOUS_COLUMN AMBIGUOUS_FUNCTION AMBIGUOUS_PARAMETER AMBIGUOUS_ALIAS '\n    + 'INVALID_COLUMN_REFERENCE INVALID_COLUMN_DEFINITION INVALID_CURSOR_DEFINITION '\n    + 'INVALID_DATABASE_DEFINITION INVALID_FUNCTION_DEFINITION '\n    + 'INVALID_PREPARED_STATEMENT_DEFINITION INVALID_SCHEMA_DEFINITION INVALID_TABLE_DEFINITION '\n    + 'INVALID_OBJECT_DEFINITION WITH_CHECK_OPTION_VIOLATION INSUFFICIENT_RESOURCES DISK_FULL '\n    + 'OUT_OF_MEMORY TOO_MANY_CONNECTIONS CONFIGURATION_LIMIT_EXCEEDED PROGRAM_LIMIT_EXCEEDED '\n    + 'STATEMENT_TOO_COMPLEX TOO_MANY_COLUMNS TOO_MANY_ARGUMENTS OBJECT_NOT_IN_PREREQUISITE_STATE '\n    + 'OBJECT_IN_USE CANT_CHANGE_RUNTIME_PARAM LOCK_NOT_AVAILABLE OPERATOR_INTERVENTION '\n    + 'QUERY_CANCELED ADMIN_SHUTDOWN CRASH_SHUTDOWN CANNOT_CONNECT_NOW DATABASE_DROPPED '\n    + 'SYSTEM_ERROR IO_ERROR UNDEFINED_FILE DUPLICATE_FILE SNAPSHOT_TOO_OLD CONFIG_FILE_ERROR '\n    + 'LOCK_FILE_EXISTS FDW_ERROR FDW_COLUMN_NAME_NOT_FOUND FDW_DYNAMIC_PARAMETER_VALUE_NEEDED '\n    + 'FDW_FUNCTION_SEQUENCE_ERROR FDW_INCONSISTENT_DESCRIPTOR_INFORMATION '\n    + 'FDW_INVALID_ATTRIBUTE_VALUE FDW_INVALID_COLUMN_NAME FDW_INVALID_COLUMN_NUMBER '\n    + 'FDW_INVALID_DATA_TYPE FDW_INVALID_DATA_TYPE_DESCRIPTORS '\n    + 'FDW_INVALID_DESCRIPTOR_FIELD_IDENTIFIER FDW_INVALID_HANDLE FDW_INVALID_OPTION_INDEX '\n    + 'FDW_INVALID_OPTION_NAME FDW_INVALID_STRING_LENGTH_OR_BUFFER_LENGTH '\n    + 'FDW_INVALID_STRING_FORMAT FDW_INVALID_USE_OF_NULL_POINTER FDW_TOO_MANY_HANDLES '\n    + 'FDW_OUT_OF_MEMORY FDW_NO_SCHEMAS FDW_OPTION_NAME_NOT_FOUND FDW_REPLY_HANDLE '\n    + 'FDW_SCHEMA_NOT_FOUND FDW_TABLE_NOT_FOUND FDW_UNABLE_TO_CREATE_EXECUTION '\n    + 'FDW_UNABLE_TO_CREATE_REPLY FDW_UNABLE_TO_ESTABLISH_CONNECTION PLPGSQL_ERROR '\n    + 'RAISE_EXCEPTION NO_DATA_FOUND TOO_MANY_ROWS ASSERT_FAILURE INTERNAL_ERROR DATA_CORRUPTED '\n    + 'INDEX_CORRUPTED ';\n\n  const FUNCTIONS =\n    // https://www.postgresql.org/docs/11/static/functions-aggregate.html\n    'ARRAY_AGG AVG BIT_AND BIT_OR BOOL_AND BOOL_OR COUNT EVERY JSON_AGG JSONB_AGG JSON_OBJECT_AGG '\n    + 'JSONB_OBJECT_AGG MAX MIN MODE STRING_AGG SUM XMLAGG '\n    + 'CORR COVAR_POP COVAR_SAMP REGR_AVGX REGR_AVGY REGR_COUNT REGR_INTERCEPT REGR_R2 REGR_SLOPE '\n    + 'REGR_SXX REGR_SXY REGR_SYY STDDEV STDDEV_POP STDDEV_SAMP VARIANCE VAR_POP VAR_SAMP '\n    + 'PERCENTILE_CONT PERCENTILE_DISC '\n    // https://www.postgresql.org/docs/11/static/functions-window.html\n    + 'ROW_NUMBER RANK DENSE_RANK PERCENT_RANK CUME_DIST NTILE LAG LEAD FIRST_VALUE LAST_VALUE NTH_VALUE '\n    // https://www.postgresql.org/docs/11/static/functions-comparison.html\n    + 'NUM_NONNULLS NUM_NULLS '\n    // https://www.postgresql.org/docs/11/static/functions-math.html\n    + 'ABS CBRT CEIL CEILING DEGREES DIV EXP FLOOR LN LOG MOD PI POWER RADIANS ROUND SCALE SIGN SQRT '\n    + 'TRUNC WIDTH_BUCKET '\n    + 'RANDOM SETSEED '\n    + 'ACOS ACOSD ASIN ASIND ATAN ATAND ATAN2 ATAN2D COS COSD COT COTD SIN SIND TAN TAND '\n    // https://www.postgresql.org/docs/11/static/functions-string.html\n    + 'BIT_LENGTH CHAR_LENGTH CHARACTER_LENGTH LOWER OCTET_LENGTH OVERLAY POSITION SUBSTRING TREAT TRIM UPPER '\n    + 'ASCII BTRIM CHR CONCAT CONCAT_WS CONVERT CONVERT_FROM CONVERT_TO DECODE ENCODE INITCAP '\n    + 'LEFT LENGTH LPAD LTRIM MD5 PARSE_IDENT PG_CLIENT_ENCODING QUOTE_IDENT|10 QUOTE_LITERAL|10 '\n    + 'QUOTE_NULLABLE|10 REGEXP_MATCH REGEXP_MATCHES REGEXP_REPLACE REGEXP_SPLIT_TO_ARRAY '\n    + 'REGEXP_SPLIT_TO_TABLE REPEAT REPLACE REVERSE RIGHT RPAD RTRIM SPLIT_PART STRPOS SUBSTR '\n    + 'TO_ASCII TO_HEX TRANSLATE '\n    // https://www.postgresql.org/docs/11/static/functions-binarystring.html\n    + 'OCTET_LENGTH GET_BIT GET_BYTE SET_BIT SET_BYTE '\n    // https://www.postgresql.org/docs/11/static/functions-formatting.html\n    + 'TO_CHAR TO_DATE TO_NUMBER TO_TIMESTAMP '\n    // https://www.postgresql.org/docs/11/static/functions-datetime.html\n    + 'AGE CLOCK_TIMESTAMP|10 DATE_PART DATE_TRUNC ISFINITE JUSTIFY_DAYS JUSTIFY_HOURS JUSTIFY_INTERVAL '\n    + 'MAKE_DATE MAKE_INTERVAL|10 MAKE_TIME MAKE_TIMESTAMP|10 MAKE_TIMESTAMPTZ|10 NOW STATEMENT_TIMESTAMP|10 '\n    + 'TIMEOFDAY TRANSACTION_TIMESTAMP|10 '\n    // https://www.postgresql.org/docs/11/static/functions-enum.html\n    + 'ENUM_FIRST ENUM_LAST ENUM_RANGE '\n    // https://www.postgresql.org/docs/11/static/functions-geometry.html\n    + 'AREA CENTER DIAMETER HEIGHT ISCLOSED ISOPEN NPOINTS PCLOSE POPEN RADIUS WIDTH '\n    + 'BOX BOUND_BOX CIRCLE LINE LSEG PATH POLYGON '\n    // https://www.postgresql.org/docs/11/static/functions-net.html\n    + 'ABBREV BROADCAST HOST HOSTMASK MASKLEN NETMASK NETWORK SET_MASKLEN TEXT INET_SAME_FAMILY '\n    + 'INET_MERGE MACADDR8_SET7BIT '\n    // https://www.postgresql.org/docs/11/static/functions-textsearch.html\n    + 'ARRAY_TO_TSVECTOR GET_CURRENT_TS_CONFIG NUMNODE PLAINTO_TSQUERY PHRASETO_TSQUERY WEBSEARCH_TO_TSQUERY '\n    + 'QUERYTREE SETWEIGHT STRIP TO_TSQUERY TO_TSVECTOR JSON_TO_TSVECTOR JSONB_TO_TSVECTOR TS_DELETE '\n    + 'TS_FILTER TS_HEADLINE TS_RANK TS_RANK_CD TS_REWRITE TSQUERY_PHRASE TSVECTOR_TO_ARRAY '\n    + 'TSVECTOR_UPDATE_TRIGGER TSVECTOR_UPDATE_TRIGGER_COLUMN '\n    // https://www.postgresql.org/docs/11/static/functions-xml.html\n    + 'XMLCOMMENT XMLCONCAT XMLELEMENT XMLFOREST XMLPI XMLROOT '\n    + 'XMLEXISTS XML_IS_WELL_FORMED XML_IS_WELL_FORMED_DOCUMENT XML_IS_WELL_FORMED_CONTENT '\n    + 'XPATH XPATH_EXISTS XMLTABLE XMLNAMESPACES '\n    + 'TABLE_TO_XML TABLE_TO_XMLSCHEMA TABLE_TO_XML_AND_XMLSCHEMA '\n    + 'QUERY_TO_XML QUERY_TO_XMLSCHEMA QUERY_TO_XML_AND_XMLSCHEMA '\n    + 'CURSOR_TO_XML CURSOR_TO_XMLSCHEMA '\n    + 'SCHEMA_TO_XML SCHEMA_TO_XMLSCHEMA SCHEMA_TO_XML_AND_XMLSCHEMA '\n    + 'DATABASE_TO_XML DATABASE_TO_XMLSCHEMA DATABASE_TO_XML_AND_XMLSCHEMA '\n    + 'XMLATTRIBUTES '\n    // https://www.postgresql.org/docs/11/static/functions-json.html\n    + 'TO_JSON TO_JSONB ARRAY_TO_JSON ROW_TO_JSON JSON_BUILD_ARRAY JSONB_BUILD_ARRAY JSON_BUILD_OBJECT '\n    + 'JSONB_BUILD_OBJECT JSON_OBJECT JSONB_OBJECT JSON_ARRAY_LENGTH JSONB_ARRAY_LENGTH JSON_EACH '\n    + 'JSONB_EACH JSON_EACH_TEXT JSONB_EACH_TEXT JSON_EXTRACT_PATH JSONB_EXTRACT_PATH '\n    + 'JSON_OBJECT_KEYS JSONB_OBJECT_KEYS JSON_POPULATE_RECORD JSONB_POPULATE_RECORD JSON_POPULATE_RECORDSET '\n    + 'JSONB_POPULATE_RECORDSET JSON_ARRAY_ELEMENTS JSONB_ARRAY_ELEMENTS JSON_ARRAY_ELEMENTS_TEXT '\n    + 'JSONB_ARRAY_ELEMENTS_TEXT JSON_TYPEOF JSONB_TYPEOF JSON_TO_RECORD JSONB_TO_RECORD JSON_TO_RECORDSET '\n    + 'JSONB_TO_RECORDSET JSON_STRIP_NULLS JSONB_STRIP_NULLS JSONB_SET JSONB_INSERT JSONB_PRETTY '\n    // https://www.postgresql.org/docs/11/static/functions-sequence.html\n    + 'CURRVAL LASTVAL NEXTVAL SETVAL '\n    // https://www.postgresql.org/docs/11/static/functions-conditional.html\n    + 'COALESCE NULLIF GREATEST LEAST '\n    // https://www.postgresql.org/docs/11/static/functions-array.html\n    + 'ARRAY_APPEND ARRAY_CAT ARRAY_NDIMS ARRAY_DIMS ARRAY_FILL ARRAY_LENGTH ARRAY_LOWER ARRAY_POSITION '\n    + 'ARRAY_POSITIONS ARRAY_PREPEND ARRAY_REMOVE ARRAY_REPLACE ARRAY_TO_STRING ARRAY_UPPER CARDINALITY '\n    + 'STRING_TO_ARRAY UNNEST '\n    // https://www.postgresql.org/docs/11/static/functions-range.html\n    + 'ISEMPTY LOWER_INC UPPER_INC LOWER_INF UPPER_INF RANGE_MERGE '\n    // https://www.postgresql.org/docs/11/static/functions-srf.html\n    + 'GENERATE_SERIES GENERATE_SUBSCRIPTS '\n    // https://www.postgresql.org/docs/11/static/functions-info.html\n    + 'CURRENT_DATABASE CURRENT_QUERY CURRENT_SCHEMA|10 CURRENT_SCHEMAS|10 INET_CLIENT_ADDR INET_CLIENT_PORT '\n    + 'INET_SERVER_ADDR INET_SERVER_PORT ROW_SECURITY_ACTIVE FORMAT_TYPE '\n    + 'TO_REGCLASS TO_REGPROC TO_REGPROCEDURE TO_REGOPER TO_REGOPERATOR TO_REGTYPE TO_REGNAMESPACE TO_REGROLE '\n    + 'COL_DESCRIPTION OBJ_DESCRIPTION SHOBJ_DESCRIPTION '\n    + 'TXID_CURRENT TXID_CURRENT_IF_ASSIGNED TXID_CURRENT_SNAPSHOT TXID_SNAPSHOT_XIP TXID_SNAPSHOT_XMAX '\n    + 'TXID_SNAPSHOT_XMIN TXID_VISIBLE_IN_SNAPSHOT TXID_STATUS '\n    // https://www.postgresql.org/docs/11/static/functions-admin.html\n    + 'CURRENT_SETTING SET_CONFIG BRIN_SUMMARIZE_NEW_VALUES BRIN_SUMMARIZE_RANGE BRIN_DESUMMARIZE_RANGE '\n    + 'GIN_CLEAN_PENDING_LIST '\n    // https://www.postgresql.org/docs/11/static/functions-trigger.html\n    + 'SUPPRESS_REDUNDANT_UPDATES_TRIGGER '\n    // ihttps://www.postgresql.org/docs/devel/static/lo-funcs.html\n    + 'LO_FROM_BYTEA LO_PUT LO_GET LO_CREAT LO_CREATE LO_UNLINK LO_IMPORT LO_EXPORT LOREAD LOWRITE '\n    //\n    + 'GROUPING CAST ';\n\n  const FUNCTIONS_RE =\n      FUNCTIONS.trim()\n        .split(' ')\n        .map(function(val) { return val.split('|')[0]; })\n        .join('|');\n\n  return {\n    name: 'PostgreSQL',\n    aliases: [\n      'postgres',\n      'postgresql'\n    ],\n    supersetOf: \"sql\",\n    case_insensitive: true,\n    keywords: {\n      keyword:\n            SQL_KW + PLPGSQL_KW + ROLE_ATTRS,\n      built_in:\n            SQL_BI + PLPGSQL_BI + PLPGSQL_EXCEPTIONS\n    },\n    // Forbid some cunstructs from other languages to improve autodetect. In fact\n    // \"[a-z]:\" is legal (as part of array slice), but improbabal.\n    illegal: /:==|\\W\\s*\\(\\*|(^|\\s)\\$[a-z]|\\{\\{|[a-z]:\\s*$|\\.\\.\\.|TO:|DO:/,\n    contains: [\n      // special handling of some words, which are reserved only in some contexts\n      {\n        className: 'keyword',\n        variants: [\n          { begin: /\\bTEXT\\s*SEARCH\\b/ },\n          { begin: /\\b(PRIMARY|FOREIGN|FOR(\\s+NO)?)\\s+KEY\\b/ },\n          { begin: /\\bPARALLEL\\s+(UNSAFE|RESTRICTED|SAFE)\\b/ },\n          { begin: /\\bSTORAGE\\s+(PLAIN|EXTERNAL|EXTENDED|MAIN)\\b/ },\n          { begin: /\\bMATCH\\s+(FULL|PARTIAL|SIMPLE)\\b/ },\n          { begin: /\\bNULLS\\s+(FIRST|LAST)\\b/ },\n          { begin: /\\bEVENT\\s+TRIGGER\\b/ },\n          { begin: /\\b(MAPPING|OR)\\s+REPLACE\\b/ },\n          { begin: /\\b(FROM|TO)\\s+(PROGRAM|STDIN|STDOUT)\\b/ },\n          { begin: /\\b(SHARE|EXCLUSIVE)\\s+MODE\\b/ },\n          { begin: /\\b(LEFT|RIGHT)\\s+(OUTER\\s+)?JOIN\\b/ },\n          { begin: /\\b(FETCH|MOVE)\\s+(NEXT|PRIOR|FIRST|LAST|ABSOLUTE|RELATIVE|FORWARD|BACKWARD)\\b/ },\n          { begin: /\\bPRESERVE\\s+ROWS\\b/ },\n          { begin: /\\bDISCARD\\s+PLANS\\b/ },\n          { begin: /\\bREFERENCING\\s+(OLD|NEW)\\b/ },\n          { begin: /\\bSKIP\\s+LOCKED\\b/ },\n          { begin: /\\bGROUPING\\s+SETS\\b/ },\n          { begin: /\\b(BINARY|INSENSITIVE|SCROLL|NO\\s+SCROLL)\\s+(CURSOR|FOR)\\b/ },\n          { begin: /\\b(WITH|WITHOUT)\\s+HOLD\\b/ },\n          { begin: /\\bWITH\\s+(CASCADED|LOCAL)\\s+CHECK\\s+OPTION\\b/ },\n          { begin: /\\bEXCLUDE\\s+(TIES|NO\\s+OTHERS)\\b/ },\n          { begin: /\\bFORMAT\\s+(TEXT|XML|JSON|YAML)\\b/ },\n          { begin: /\\bSET\\s+((SESSION|LOCAL)\\s+)?NAMES\\b/ },\n          { begin: /\\bIS\\s+(NOT\\s+)?UNKNOWN\\b/ },\n          { begin: /\\bSECURITY\\s+LABEL\\b/ },\n          { begin: /\\bSTANDALONE\\s+(YES|NO|NO\\s+VALUE)\\b/ },\n          { begin: /\\bWITH\\s+(NO\\s+)?DATA\\b/ },\n          { begin: /\\b(FOREIGN|SET)\\s+DATA\\b/ },\n          { begin: /\\bSET\\s+(CATALOG|CONSTRAINTS)\\b/ },\n          { begin: /\\b(WITH|FOR)\\s+ORDINALITY\\b/ },\n          { begin: /\\bIS\\s+(NOT\\s+)?DOCUMENT\\b/ },\n          { begin: /\\bXML\\s+OPTION\\s+(DOCUMENT|CONTENT)\\b/ },\n          { begin: /\\b(STRIP|PRESERVE)\\s+WHITESPACE\\b/ },\n          { begin: /\\bNO\\s+(ACTION|MAXVALUE|MINVALUE)\\b/ },\n          { begin: /\\bPARTITION\\s+BY\\s+(RANGE|LIST|HASH)\\b/ },\n          { begin: /\\bAT\\s+TIME\\s+ZONE\\b/ },\n          { begin: /\\bGRANTED\\s+BY\\b/ },\n          { begin: /\\bRETURN\\s+(QUERY|NEXT)\\b/ },\n          { begin: /\\b(ATTACH|DETACH)\\s+PARTITION\\b/ },\n          { begin: /\\bFORCE\\s+ROW\\s+LEVEL\\s+SECURITY\\b/ },\n          { begin: /\\b(INCLUDING|EXCLUDING)\\s+(COMMENTS|CONSTRAINTS|DEFAULTS|IDENTITY|INDEXES|STATISTICS|STORAGE|ALL)\\b/ },\n          { begin: /\\bAS\\s+(ASSIGNMENT|IMPLICIT|PERMISSIVE|RESTRICTIVE|ENUM|RANGE)\\b/ }\n        ]\n      },\n      // functions named as keywords, followed by '('\n      { begin: /\\b(FORMAT|FAMILY|VERSION)\\s*\\(/\n        // keywords: { built_in: 'FORMAT FAMILY VERSION' }\n      },\n      // INCLUDE ( ... ) in index_parameters in CREATE TABLE\n      {\n        begin: /\\bINCLUDE\\s*\\(/,\n        keywords: 'INCLUDE'\n      },\n      // not highlight RANGE if not in frame_clause (not 100% correct, but seems satisfactory)\n      { begin: /\\bRANGE(?!\\s*(BETWEEN|UNBOUNDED|CURRENT|[-0-9]+))/ },\n      // disable highlighting in commands CREATE AGGREGATE/COLLATION/DATABASE/OPERTOR/TEXT SEARCH .../TYPE\n      // and in PL/pgSQL RAISE ... USING\n      { begin: /\\b(VERSION|OWNER|TEMPLATE|TABLESPACE|CONNECTION\\s+LIMIT|PROCEDURE|RESTRICT|JOIN|PARSER|COPY|START|END|COLLATION|INPUT|ANALYZE|STORAGE|LIKE|DEFAULT|DELIMITER|ENCODING|COLUMN|CONSTRAINT|TABLE|SCHEMA)\\s*=/ },\n      // PG_smth; HAS_some_PRIVILEGE\n      {\n        // className: 'built_in',\n        begin: /\\b(PG_\\w+?|HAS_[A-Z_]+_PRIVILEGE)\\b/,\n        relevance: 10\n      },\n      // extract\n      {\n        begin: /\\bEXTRACT\\s*\\(/,\n        end: /\\bFROM\\b/,\n        returnEnd: true,\n        keywords: {\n          // built_in: 'EXTRACT',\n          type: 'CENTURY DAY DECADE DOW DOY EPOCH HOUR ISODOW ISOYEAR MICROSECONDS '\n                        + 'MILLENNIUM MILLISECONDS MINUTE MONTH QUARTER SECOND TIMEZONE TIMEZONE_HOUR '\n                        + 'TIMEZONE_MINUTE WEEK YEAR' }\n      },\n      // xmlelement, xmlpi - special NAME\n      {\n        begin: /\\b(XMLELEMENT|XMLPI)\\s*\\(\\s*NAME/,\n        keywords: {\n          // built_in: 'XMLELEMENT XMLPI',\n          keyword: 'NAME' }\n      },\n      // xmlparse, xmlserialize\n      {\n        begin: /\\b(XMLPARSE|XMLSERIALIZE)\\s*\\(\\s*(DOCUMENT|CONTENT)/,\n        keywords: {\n          // built_in: 'XMLPARSE XMLSERIALIZE',\n          keyword: 'DOCUMENT CONTENT' }\n      },\n      // Sequences. We actually skip everything between CACHE|INCREMENT|MAXVALUE|MINVALUE and\n      // nearest following numeric constant. Without with trick we find a lot of \"keywords\"\n      // in 'avrasm' autodetection test...\n      {\n        beginKeywords: 'CACHE INCREMENT MAXVALUE MINVALUE',\n        end: hljs.C_NUMBER_RE,\n        returnEnd: true,\n        keywords: 'BY CACHE INCREMENT MAXVALUE MINVALUE'\n      },\n      // WITH|WITHOUT TIME ZONE as part of datatype\n      {\n        className: 'type',\n        begin: /\\b(WITH|WITHOUT)\\s+TIME\\s+ZONE\\b/\n      },\n      // INTERVAL optional fields\n      {\n        className: 'type',\n        begin: /\\bINTERVAL\\s+(YEAR|MONTH|DAY|HOUR|MINUTE|SECOND)(\\s+TO\\s+(MONTH|HOUR|MINUTE|SECOND))?\\b/\n      },\n      // Pseudo-types which allowed only as return type\n      {\n        begin: /\\bRETURNS\\s+(LANGUAGE_HANDLER|TRIGGER|EVENT_TRIGGER|FDW_HANDLER|INDEX_AM_HANDLER|TSM_HANDLER)\\b/,\n        keywords: {\n          keyword: 'RETURNS',\n          type: 'LANGUAGE_HANDLER TRIGGER EVENT_TRIGGER FDW_HANDLER INDEX_AM_HANDLER TSM_HANDLER'\n        }\n      },\n      // Known functions - only when followed by '('\n      { begin: '\\\\b(' + FUNCTIONS_RE + ')\\\\s*\\\\('\n        // keywords: { built_in: FUNCTIONS }\n      },\n      // Types\n      { begin: '\\\\.(' + TYPES_RE + ')\\\\b' // prevent highlight as type, say, 'oid' in 'pgclass.oid'\n      },\n      {\n        begin: '\\\\b(' + TYPES_RE + ')\\\\s+PATH\\\\b', // in XMLTABLE\n        keywords: {\n          keyword: 'PATH', // hopefully no one would use PATH type in XMLTABLE...\n          type: TYPES.replace('PATH ', '')\n        }\n      },\n      {\n        className: 'type',\n        begin: '\\\\b(' + TYPES_RE + ')\\\\b'\n      },\n      // Strings, see https://www.postgresql.org/docs/11/static/sql-syntax-lexical.html#SQL-SYNTAX-CONSTANTS\n      {\n        className: 'string',\n        begin: '\\'',\n        end: '\\'',\n        contains: [ { begin: '\\'\\'' } ]\n      },\n      {\n        className: 'string',\n        begin: '(e|E|u&|U&)\\'',\n        end: '\\'',\n        contains: [ { begin: '\\\\\\\\.' } ],\n        relevance: 10\n      },\n      hljs.END_SAME_AS_BEGIN({\n        begin: DOLLAR_STRING,\n        end: DOLLAR_STRING,\n        contains: [\n          {\n            // actually we want them all except SQL; listed are those with known implementations\n            // and XML + JSON just in case\n            subLanguage: [\n              'pgsql',\n              'perl',\n              'python',\n              'tcl',\n              'r',\n              'lua',\n              'java',\n              'php',\n              'ruby',\n              'bash',\n              'scheme',\n              'xml',\n              'json'\n            ],\n            endsWithParent: true\n          }\n        ]\n      }),\n      // identifiers in quotes\n      {\n        begin: '\"',\n        end: '\"',\n        contains: [ { begin: '\"\"' } ]\n      },\n      // numbers\n      hljs.C_NUMBER_MODE,\n      // comments\n      hljs.C_BLOCK_COMMENT_MODE,\n      COMMENT_MODE,\n      // PL/pgSQL staff\n      // %ROWTYPE, %TYPE, $n\n      {\n        className: 'meta',\n        variants: [\n          { // %TYPE, %ROWTYPE\n            begin: '%(ROW)?TYPE',\n            relevance: 10\n          },\n          { // $n\n            begin: '\\\\$\\\\d+' },\n          { // #compiler option\n            begin: '^#\\\\w',\n            end: '$'\n          }\n        ]\n      },\n      // <<labeles>>\n      {\n        className: 'symbol',\n        begin: LABEL,\n        relevance: 10\n      }\n    ]\n  };\n}\n\nmodule.exports = pgsql;\n","/*\nLanguage: PHP\nAuthor: Victor Karamzin <Victor.Karamzin@enterra-inc.com>\nContributors: Evgeny Stepanischev <imbolk@gmail.com>, Ivan Sagalaev <maniac@softwaremaniacs.org>\nWebsite: https://www.php.net\nCategory: common\n*/\n\n/**\n * @param {HLJSApi} hljs\n * @returns {LanguageDetail}\n * */\nfunction php(hljs) {\n  const regex = hljs.regex;\n  // negative look-ahead tries to avoid matching patterns that are not\n  // Perl at all like $ident$, @ident@, etc.\n  const NOT_PERL_ETC = /(?![A-Za-z0-9])(?![$])/;\n  const IDENT_RE = regex.concat(\n    /[a-zA-Z_\\x7f-\\xff][a-zA-Z0-9_\\x7f-\\xff]*/,\n    NOT_PERL_ETC);\n  // Will not detect camelCase classes\n  const PASCAL_CASE_CLASS_NAME_RE = regex.concat(\n    /(\\\\?[A-Z][a-z0-9_\\x7f-\\xff]+|\\\\?[A-Z]+(?=[A-Z][a-z0-9_\\x7f-\\xff])){1,}/,\n    NOT_PERL_ETC);\n  const UPCASE_NAME_RE = regex.concat(\n    /[A-Z]+/,\n    NOT_PERL_ETC);\n  const VARIABLE = {\n    scope: 'variable',\n    match: '\\\\$+' + IDENT_RE,\n  };\n  const PREPROCESSOR = {\n    scope: \"meta\",\n    variants: [\n      { begin: /<\\?php/, relevance: 10 }, // boost for obvious PHP\n      { begin: /<\\?=/ },\n      // less relevant per PSR-1 which says not to use short-tags\n      { begin: /<\\?/, relevance: 0.1 },\n      { begin: /\\?>/ } // end php tag\n    ]\n  };\n  const SUBST = {\n    scope: 'subst',\n    variants: [\n      { begin: /\\$\\w+/ },\n      {\n        begin: /\\{\\$/,\n        end: /\\}/\n      }\n    ]\n  };\n  const SINGLE_QUOTED = hljs.inherit(hljs.APOS_STRING_MODE, { illegal: null, });\n  const DOUBLE_QUOTED = hljs.inherit(hljs.QUOTE_STRING_MODE, {\n    illegal: null,\n    contains: hljs.QUOTE_STRING_MODE.contains.concat(SUBST),\n  });\n\n  const HEREDOC = {\n    begin: /<<<[ \\t]*(?:(\\w+)|\"(\\w+)\")\\n/,\n    end: /[ \\t]*(\\w+)\\b/,\n    contains: hljs.QUOTE_STRING_MODE.contains.concat(SUBST),\n    'on:begin': (m, resp) => { resp.data._beginMatch = m[1] || m[2]; },\n    'on:end': (m, resp) => { if (resp.data._beginMatch !== m[1]) resp.ignoreMatch(); },\n  };\n\n  const NOWDOC = hljs.END_SAME_AS_BEGIN({\n    begin: /<<<[ \\t]*'(\\w+)'\\n/,\n    end: /[ \\t]*(\\w+)\\b/,\n  });\n  // list of valid whitespaces because non-breaking space might be part of a IDENT_RE\n  const WHITESPACE = '[ \\t\\n]';\n  const STRING = {\n    scope: 'string',\n    variants: [\n      DOUBLE_QUOTED,\n      SINGLE_QUOTED,\n      HEREDOC,\n      NOWDOC\n    ]\n  };\n  const NUMBER = {\n    scope: 'number',\n    variants: [\n      { begin: `\\\\b0[bB][01]+(?:_[01]+)*\\\\b` }, // Binary w/ underscore support\n      { begin: `\\\\b0[oO][0-7]+(?:_[0-7]+)*\\\\b` }, // Octals w/ underscore support\n      { begin: `\\\\b0[xX][\\\\da-fA-F]+(?:_[\\\\da-fA-F]+)*\\\\b` }, // Hex w/ underscore support\n      // Decimals w/ underscore support, with optional fragments and scientific exponent (e) suffix.\n      { begin: `(?:\\\\b\\\\d+(?:_\\\\d+)*(\\\\.(?:\\\\d+(?:_\\\\d+)*))?|\\\\B\\\\.\\\\d+)(?:[eE][+-]?\\\\d+)?` }\n    ],\n    relevance: 0\n  };\n  const LITERALS = [\n    \"false\",\n    \"null\",\n    \"true\"\n  ];\n  const KWS = [\n    // Magic constants:\n    // <https://www.php.net/manual/en/language.constants.predefined.php>\n    \"__CLASS__\",\n    \"__DIR__\",\n    \"__FILE__\",\n    \"__FUNCTION__\",\n    \"__COMPILER_HALT_OFFSET__\",\n    \"__LINE__\",\n    \"__METHOD__\",\n    \"__NAMESPACE__\",\n    \"__TRAIT__\",\n    // Function that look like language construct or language construct that look like function:\n    // List of keywords that may not require parenthesis\n    \"die\",\n    \"echo\",\n    \"exit\",\n    \"include\",\n    \"include_once\",\n    \"print\",\n    \"require\",\n    \"require_once\",\n    // These are not language construct (function) but operate on the currently-executing function and can access the current symbol table\n    // 'compact extract func_get_arg func_get_args func_num_args get_called_class get_parent_class ' +\n    // Other keywords:\n    // <https://www.php.net/manual/en/reserved.php>\n    // <https://www.php.net/manual/en/language.types.type-juggling.php>\n    \"array\",\n    \"abstract\",\n    \"and\",\n    \"as\",\n    \"binary\",\n    \"bool\",\n    \"boolean\",\n    \"break\",\n    \"callable\",\n    \"case\",\n    \"catch\",\n    \"class\",\n    \"clone\",\n    \"const\",\n    \"continue\",\n    \"declare\",\n    \"default\",\n    \"do\",\n    \"double\",\n    \"else\",\n    \"elseif\",\n    \"empty\",\n    \"enddeclare\",\n    \"endfor\",\n    \"endforeach\",\n    \"endif\",\n    \"endswitch\",\n    \"endwhile\",\n    \"enum\",\n    \"eval\",\n    \"extends\",\n    \"final\",\n    \"finally\",\n    \"float\",\n    \"for\",\n    \"foreach\",\n    \"from\",\n    \"global\",\n    \"goto\",\n    \"if\",\n    \"implements\",\n    \"instanceof\",\n    \"insteadof\",\n    \"int\",\n    \"integer\",\n    \"interface\",\n    \"isset\",\n    \"iterable\",\n    \"list\",\n    \"match|0\",\n    \"mixed\",\n    \"new\",\n    \"never\",\n    \"object\",\n    \"or\",\n    \"private\",\n    \"protected\",\n    \"public\",\n    \"readonly\",\n    \"real\",\n    \"return\",\n    \"string\",\n    \"switch\",\n    \"throw\",\n    \"trait\",\n    \"try\",\n    \"unset\",\n    \"use\",\n    \"var\",\n    \"void\",\n    \"while\",\n    \"xor\",\n    \"yield\"\n  ];\n\n  const BUILT_INS = [\n    // Standard PHP library:\n    // <https://www.php.net/manual/en/book.spl.php>\n    \"Error|0\",\n    \"AppendIterator\",\n    \"ArgumentCountError\",\n    \"ArithmeticError\",\n    \"ArrayIterator\",\n    \"ArrayObject\",\n    \"AssertionError\",\n    \"BadFunctionCallException\",\n    \"BadMethodCallException\",\n    \"CachingIterator\",\n    \"CallbackFilterIterator\",\n    \"CompileError\",\n    \"Countable\",\n    \"DirectoryIterator\",\n    \"DivisionByZeroError\",\n    \"DomainException\",\n    \"EmptyIterator\",\n    \"ErrorException\",\n    \"Exception\",\n    \"FilesystemIterator\",\n    \"FilterIterator\",\n    \"GlobIterator\",\n    \"InfiniteIterator\",\n    \"InvalidArgumentException\",\n    \"IteratorIterator\",\n    \"LengthException\",\n    \"LimitIterator\",\n    \"LogicException\",\n    \"MultipleIterator\",\n    \"NoRewindIterator\",\n    \"OutOfBoundsException\",\n    \"OutOfRangeException\",\n    \"OuterIterator\",\n    \"OverflowException\",\n    \"ParentIterator\",\n    \"ParseError\",\n    \"RangeException\",\n    \"RecursiveArrayIterator\",\n    \"RecursiveCachingIterator\",\n    \"RecursiveCallbackFilterIterator\",\n    \"RecursiveDirectoryIterator\",\n    \"RecursiveFilterIterator\",\n    \"RecursiveIterator\",\n    \"RecursiveIteratorIterator\",\n    \"RecursiveRegexIterator\",\n    \"RecursiveTreeIterator\",\n    \"RegexIterator\",\n    \"RuntimeException\",\n    \"SeekableIterator\",\n    \"SplDoublyLinkedList\",\n    \"SplFileInfo\",\n    \"SplFileObject\",\n    \"SplFixedArray\",\n    \"SplHeap\",\n    \"SplMaxHeap\",\n    \"SplMinHeap\",\n    \"SplObjectStorage\",\n    \"SplObserver\",\n    \"SplPriorityQueue\",\n    \"SplQueue\",\n    \"SplStack\",\n    \"SplSubject\",\n    \"SplTempFileObject\",\n    \"TypeError\",\n    \"UnderflowException\",\n    \"UnexpectedValueException\",\n    \"UnhandledMatchError\",\n    // Reserved interfaces:\n    // <https://www.php.net/manual/en/reserved.interfaces.php>\n    \"ArrayAccess\",\n    \"BackedEnum\",\n    \"Closure\",\n    \"Fiber\",\n    \"Generator\",\n    \"Iterator\",\n    \"IteratorAggregate\",\n    \"Serializable\",\n    \"Stringable\",\n    \"Throwable\",\n    \"Traversable\",\n    \"UnitEnum\",\n    \"WeakReference\",\n    \"WeakMap\",\n    // Reserved classes:\n    // <https://www.php.net/manual/en/reserved.classes.php>\n    \"Directory\",\n    \"__PHP_Incomplete_Class\",\n    \"parent\",\n    \"php_user_filter\",\n    \"self\",\n    \"static\",\n    \"stdClass\"\n  ];\n\n  /** Dual-case keywords\n   *\n   * [\"then\",\"FILE\"] =>\n   *     [\"then\", \"THEN\", \"FILE\", \"file\"]\n   *\n   * @param {string[]} items */\n  const dualCase = (items) => {\n    /** @type string[] */\n    const result = [];\n    items.forEach(item => {\n      result.push(item);\n      if (item.toLowerCase() === item) {\n        result.push(item.toUpperCase());\n      } else {\n        result.push(item.toLowerCase());\n      }\n    });\n    return result;\n  };\n\n  const KEYWORDS = {\n    keyword: KWS,\n    literal: dualCase(LITERALS),\n    built_in: BUILT_INS,\n  };\n\n  /**\n   * @param {string[]} items */\n  const normalizeKeywords = (items) => {\n    return items.map(item => {\n      return item.replace(/\\|\\d+$/, \"\");\n    });\n  };\n\n  const CONSTRUCTOR_CALL = { variants: [\n    {\n      match: [\n        /new/,\n        regex.concat(WHITESPACE, \"+\"),\n        // to prevent built ins from being confused as the class constructor call\n        regex.concat(\"(?!\", normalizeKeywords(BUILT_INS).join(\"\\\\b|\"), \"\\\\b)\"),\n        PASCAL_CASE_CLASS_NAME_RE,\n      ],\n      scope: {\n        1: \"keyword\",\n        4: \"title.class\",\n      },\n    }\n  ] };\n\n  const CONSTANT_REFERENCE = regex.concat(IDENT_RE, \"\\\\b(?!\\\\()\");\n\n  const LEFT_AND_RIGHT_SIDE_OF_DOUBLE_COLON = { variants: [\n    {\n      match: [\n        regex.concat(\n          /::/,\n          regex.lookahead(/(?!class\\b)/)\n        ),\n        CONSTANT_REFERENCE,\n      ],\n      scope: { 2: \"variable.constant\", },\n    },\n    {\n      match: [\n        /::/,\n        /class/,\n      ],\n      scope: { 2: \"variable.language\", },\n    },\n    {\n      match: [\n        PASCAL_CASE_CLASS_NAME_RE,\n        regex.concat(\n          /::/,\n          regex.lookahead(/(?!class\\b)/)\n        ),\n        CONSTANT_REFERENCE,\n      ],\n      scope: {\n        1: \"title.class\",\n        3: \"variable.constant\",\n      },\n    },\n    {\n      match: [\n        PASCAL_CASE_CLASS_NAME_RE,\n        regex.concat(\n          \"::\",\n          regex.lookahead(/(?!class\\b)/)\n        ),\n      ],\n      scope: { 1: \"title.class\", },\n    },\n    {\n      match: [\n        PASCAL_CASE_CLASS_NAME_RE,\n        /::/,\n        /class/,\n      ],\n      scope: {\n        1: \"title.class\",\n        3: \"variable.language\",\n      },\n    }\n  ] };\n\n  const NAMED_ARGUMENT = {\n    scope: 'attr',\n    match: regex.concat(IDENT_RE, regex.lookahead(':'), regex.lookahead(/(?!::)/)),\n  };\n  const PARAMS_MODE = {\n    relevance: 0,\n    begin: /\\(/,\n    end: /\\)/,\n    keywords: KEYWORDS,\n    contains: [\n      NAMED_ARGUMENT,\n      VARIABLE,\n      LEFT_AND_RIGHT_SIDE_OF_DOUBLE_COLON,\n      hljs.C_BLOCK_COMMENT_MODE,\n      STRING,\n      NUMBER,\n      CONSTRUCTOR_CALL,\n    ],\n  };\n  const FUNCTION_INVOKE = {\n    relevance: 0,\n    match: [\n      /\\b/,\n      // to prevent keywords from being confused as the function title\n      regex.concat(\"(?!fn\\\\b|function\\\\b|\", normalizeKeywords(KWS).join(\"\\\\b|\"), \"|\", normalizeKeywords(BUILT_INS).join(\"\\\\b|\"), \"\\\\b)\"),\n      IDENT_RE,\n      regex.concat(WHITESPACE, \"*\"),\n      regex.lookahead(/(?=\\()/)\n    ],\n    scope: { 3: \"title.function.invoke\", },\n    contains: [ PARAMS_MODE ]\n  };\n  PARAMS_MODE.contains.push(FUNCTION_INVOKE);\n\n  const ATTRIBUTE_CONTAINS = [\n    NAMED_ARGUMENT,\n    LEFT_AND_RIGHT_SIDE_OF_DOUBLE_COLON,\n    hljs.C_BLOCK_COMMENT_MODE,\n    STRING,\n    NUMBER,\n    CONSTRUCTOR_CALL,\n  ];\n\n  const ATTRIBUTES = {\n    begin: regex.concat(/#\\[\\s*\\\\?/,\n      regex.either(\n        PASCAL_CASE_CLASS_NAME_RE,\n        UPCASE_NAME_RE\n      )\n    ),\n    beginScope: \"meta\",\n    end: /]/,\n    endScope: \"meta\",\n    keywords: {\n      literal: LITERALS,\n      keyword: [\n        'new',\n        'array',\n      ]\n    },\n    contains: [\n      {\n        begin: /\\[/,\n        end: /]/,\n        keywords: {\n          literal: LITERALS,\n          keyword: [\n            'new',\n            'array',\n          ]\n        },\n        contains: [\n          'self',\n          ...ATTRIBUTE_CONTAINS,\n        ]\n      },\n      ...ATTRIBUTE_CONTAINS,\n      {\n        scope: 'meta',\n        variants: [\n          { match: PASCAL_CASE_CLASS_NAME_RE },\n          { match: UPCASE_NAME_RE }\n        ]\n      }\n    ]\n  };\n\n  return {\n    case_insensitive: false,\n    keywords: KEYWORDS,\n    contains: [\n      ATTRIBUTES,\n      hljs.HASH_COMMENT_MODE,\n      hljs.COMMENT('//', '$'),\n      hljs.COMMENT(\n        '/\\\\*',\n        '\\\\*/',\n        { contains: [\n          {\n            scope: 'doctag',\n            match: '@[A-Za-z]+'\n          }\n        ] }\n      ),\n      {\n        match: /__halt_compiler\\(\\);/,\n        keywords: '__halt_compiler',\n        starts: {\n          scope: \"comment\",\n          end: hljs.MATCH_NOTHING_RE,\n          contains: [\n            {\n              match: /\\?>/,\n              scope: \"meta\",\n              endsParent: true\n            }\n          ]\n        }\n      },\n      PREPROCESSOR,\n      {\n        scope: 'variable.language',\n        match: /\\$this\\b/\n      },\n      VARIABLE,\n      FUNCTION_INVOKE,\n      LEFT_AND_RIGHT_SIDE_OF_DOUBLE_COLON,\n      {\n        match: [\n          /const/,\n          /\\s/,\n          IDENT_RE,\n        ],\n        scope: {\n          1: \"keyword\",\n          3: \"variable.constant\",\n        },\n      },\n      CONSTRUCTOR_CALL,\n      {\n        scope: 'function',\n        relevance: 0,\n        beginKeywords: 'fn function',\n        end: /[;{]/,\n        excludeEnd: true,\n        illegal: '[$%\\\\[]',\n        contains: [\n          { beginKeywords: 'use', },\n          hljs.UNDERSCORE_TITLE_MODE,\n          {\n            begin: '=>', // No markup, just a relevance booster\n            endsParent: true\n          },\n          {\n            scope: 'params',\n            begin: '\\\\(',\n            end: '\\\\)',\n            excludeBegin: true,\n            excludeEnd: true,\n            keywords: KEYWORDS,\n            contains: [\n              'self',\n              ATTRIBUTES,\n              VARIABLE,\n              LEFT_AND_RIGHT_SIDE_OF_DOUBLE_COLON,\n              hljs.C_BLOCK_COMMENT_MODE,\n              STRING,\n              NUMBER\n            ]\n          },\n        ]\n      },\n      {\n        scope: 'class',\n        variants: [\n          {\n            beginKeywords: \"enum\",\n            illegal: /[($\"]/\n          },\n          {\n            beginKeywords: \"class interface trait\",\n            illegal: /[:($\"]/\n          }\n        ],\n        relevance: 0,\n        end: /\\{/,\n        excludeEnd: true,\n        contains: [\n          { beginKeywords: 'extends implements' },\n          hljs.UNDERSCORE_TITLE_MODE\n        ]\n      },\n      // both use and namespace still use \"old style\" rules (vs multi-match)\n      // because the namespace name can include `\\` and we still want each\n      // element to be treated as its own *individual* title\n      {\n        beginKeywords: 'namespace',\n        relevance: 0,\n        end: ';',\n        illegal: /[.']/,\n        contains: [ hljs.inherit(hljs.UNDERSCORE_TITLE_MODE, { scope: \"title.class\" }) ]\n      },\n      {\n        beginKeywords: 'use',\n        relevance: 0,\n        end: ';',\n        contains: [\n          // TODO: title.function vs title.class\n          {\n            match: /\\b(as|const|function)\\b/,\n            scope: \"keyword\"\n          },\n          // TODO: could be title.class or title.function\n          hljs.UNDERSCORE_TITLE_MODE\n        ]\n      },\n      STRING,\n      NUMBER,\n    ]\n  };\n}\n\nmodule.exports = php;\n","/*\nLanguage: PHP Template\nRequires: xml.js, php.js\nAuthor: Josh Goebel <hello@joshgoebel.com>\nWebsite: https://www.php.net\nCategory: common\n*/\n\nfunction phpTemplate(hljs) {\n  return {\n    name: \"PHP template\",\n    subLanguage: 'xml',\n    contains: [\n      {\n        begin: /<\\?(php|=)?/,\n        end: /\\?>/,\n        subLanguage: 'php',\n        contains: [\n          // We don't want the php closing tag ?> to close the PHP block when\n          // inside any of the following blocks:\n          {\n            begin: '/\\\\*',\n            end: '\\\\*/',\n            skip: true\n          },\n          {\n            begin: 'b\"',\n            end: '\"',\n            skip: true\n          },\n          {\n            begin: 'b\\'',\n            end: '\\'',\n            skip: true\n          },\n          hljs.inherit(hljs.APOS_STRING_MODE, {\n            illegal: null,\n            className: null,\n            contains: null,\n            skip: true\n          }),\n          hljs.inherit(hljs.QUOTE_STRING_MODE, {\n            illegal: null,\n            className: null,\n            contains: null,\n            skip: true\n          })\n        ]\n      }\n    ]\n  };\n}\n\nmodule.exports = phpTemplate;\n","/*\nLanguage: Plain text\nAuthor: Egor Rogov (e.rogov@postgrespro.ru)\nDescription: Plain text without any highlighting.\nCategory: common\n*/\n\nfunction plaintext(hljs) {\n  return {\n    name: 'Plain text',\n    aliases: [\n      'text',\n      'txt'\n    ],\n    disableAutodetect: true\n  };\n}\n\nmodule.exports = plaintext;\n","/*\nLanguage: Pony\nAuthor: Joe Eli McIlvain <joe.eli.mac@gmail.com>\nDescription: Pony is an open-source, object-oriented, actor-model,\n             capabilities-secure, high performance programming language.\nWebsite: https://www.ponylang.io\nCategory: system\n*/\n\nfunction pony(hljs) {\n  const KEYWORDS = {\n    keyword:\n      'actor addressof and as be break class compile_error compile_intrinsic '\n      + 'consume continue delegate digestof do else elseif embed end error '\n      + 'for fun if ifdef in interface is isnt lambda let match new not object '\n      + 'or primitive recover repeat return struct then trait try type until '\n      + 'use var where while with xor',\n    meta:\n      'iso val tag trn box ref',\n    literal:\n      'this false true'\n  };\n\n  const TRIPLE_QUOTE_STRING_MODE = {\n    className: 'string',\n    begin: '\"\"\"',\n    end: '\"\"\"',\n    relevance: 10\n  };\n\n  const QUOTE_STRING_MODE = {\n    className: 'string',\n    begin: '\"',\n    end: '\"',\n    contains: [ hljs.BACKSLASH_ESCAPE ]\n  };\n\n  const SINGLE_QUOTE_CHAR_MODE = {\n    className: 'string',\n    begin: '\\'',\n    end: '\\'',\n    contains: [ hljs.BACKSLASH_ESCAPE ],\n    relevance: 0\n  };\n\n  const TYPE_NAME = {\n    className: 'type',\n    begin: '\\\\b_?[A-Z][\\\\w]*',\n    relevance: 0\n  };\n\n  const PRIMED_NAME = {\n    begin: hljs.IDENT_RE + '\\'',\n    relevance: 0\n  };\n\n  const NUMBER_MODE = {\n    className: 'number',\n    begin: '(-?)(\\\\b0[xX][a-fA-F0-9]+|\\\\b0[bB][01]+|(\\\\b\\\\d+(_\\\\d+)?(\\\\.\\\\d*)?|\\\\.\\\\d+)([eE][-+]?\\\\d+)?)',\n    relevance: 0\n  };\n\n  /**\n   * The `FUNCTION` and `CLASS` modes were intentionally removed to simplify\n   * highlighting and fix cases like\n   * ```\n   * interface Iterator[A: A]\n   *   fun has_next(): Bool\n   *   fun next(): A?\n   * ```\n   * where it is valid to have a function head without a body\n   */\n\n  return {\n    name: 'Pony',\n    keywords: KEYWORDS,\n    contains: [\n      TYPE_NAME,\n      TRIPLE_QUOTE_STRING_MODE,\n      QUOTE_STRING_MODE,\n      SINGLE_QUOTE_CHAR_MODE,\n      PRIMED_NAME,\n      NUMBER_MODE,\n      hljs.C_LINE_COMMENT_MODE,\n      hljs.C_BLOCK_COMMENT_MODE\n    ]\n  };\n}\n\nmodule.exports = pony;\n","/*\nLanguage: PowerShell\nDescription: PowerShell is a task-based command-line shell and scripting language built on .NET.\nAuthor: David Mohundro <david@mohundro.com>\nContributors: Nicholas Blumhardt <nblumhardt@nblumhardt.com>, Victor Zhou <OiCMudkips@users.noreply.github.com>, Nicolas Le Gall <contact@nlegall.fr>\nWebsite: https://docs.microsoft.com/en-us/powershell/\nCategory: scripting\n*/\n\nfunction powershell(hljs) {\n  const TYPES = [\n    \"string\",\n    \"char\",\n    \"byte\",\n    \"int\",\n    \"long\",\n    \"bool\",\n    \"decimal\",\n    \"single\",\n    \"double\",\n    \"DateTime\",\n    \"xml\",\n    \"array\",\n    \"hashtable\",\n    \"void\"\n  ];\n\n  // https://docs.microsoft.com/en-us/powershell/scripting/developer/cmdlet/approved-verbs-for-windows-powershell-commands\n  const VALID_VERBS =\n    'Add|Clear|Close|Copy|Enter|Exit|Find|Format|Get|Hide|Join|Lock|'\n    + 'Move|New|Open|Optimize|Pop|Push|Redo|Remove|Rename|Reset|Resize|'\n    + 'Search|Select|Set|Show|Skip|Split|Step|Switch|Undo|Unlock|'\n    + 'Watch|Backup|Checkpoint|Compare|Compress|Convert|ConvertFrom|'\n    + 'ConvertTo|Dismount|Edit|Expand|Export|Group|Import|Initialize|'\n    + 'Limit|Merge|Mount|Out|Publish|Restore|Save|Sync|Unpublish|Update|'\n    + 'Approve|Assert|Build|Complete|Confirm|Deny|Deploy|Disable|Enable|Install|Invoke|'\n    + 'Register|Request|Restart|Resume|Start|Stop|Submit|Suspend|Uninstall|'\n    + 'Unregister|Wait|Debug|Measure|Ping|Repair|Resolve|Test|Trace|Connect|'\n    + 'Disconnect|Read|Receive|Send|Write|Block|Grant|Protect|Revoke|Unblock|'\n    + 'Unprotect|Use|ForEach|Sort|Tee|Where';\n\n  const COMPARISON_OPERATORS =\n    '-and|-as|-band|-bnot|-bor|-bxor|-casesensitive|-ccontains|-ceq|-cge|-cgt|'\n    + '-cle|-clike|-clt|-cmatch|-cne|-cnotcontains|-cnotlike|-cnotmatch|-contains|'\n    + '-creplace|-csplit|-eq|-exact|-f|-file|-ge|-gt|-icontains|-ieq|-ige|-igt|'\n    + '-ile|-ilike|-ilt|-imatch|-in|-ine|-inotcontains|-inotlike|-inotmatch|'\n    + '-ireplace|-is|-isnot|-isplit|-join|-le|-like|-lt|-match|-ne|-not|'\n    + '-notcontains|-notin|-notlike|-notmatch|-or|-regex|-replace|-shl|-shr|'\n    + '-split|-wildcard|-xor';\n\n  const KEYWORDS = {\n    $pattern: /-?[A-z\\.\\-]+\\b/,\n    keyword:\n      'if else foreach return do while until elseif begin for trap data dynamicparam '\n      + 'end break throw param continue finally in switch exit filter try process catch '\n      + 'hidden static parameter',\n    // \"echo\" relevance has been set to 0 to avoid auto-detect conflicts with shell transcripts\n    built_in:\n      'ac asnp cat cd CFS chdir clc clear clhy cli clp cls clv cnsn compare copy cp '\n      + 'cpi cpp curl cvpa dbp del diff dir dnsn ebp echo|0 epal epcsv epsn erase etsn exsn fc fhx '\n      + 'fl ft fw gal gbp gc gcb gci gcm gcs gdr gerr ghy gi gin gjb gl gm gmo gp gps gpv group '\n      + 'gsn gsnp gsv gtz gu gv gwmi h history icm iex ihy ii ipal ipcsv ipmo ipsn irm ise iwmi '\n      + 'iwr kill lp ls man md measure mi mount move mp mv nal ndr ni nmo npssc nsn nv ogv oh '\n      + 'popd ps pushd pwd r rbp rcjb rcsn rd rdr ren ri rjb rm rmdir rmo rni rnp rp rsn rsnp '\n      + 'rujb rv rvpa rwmi sajb sal saps sasv sbp sc scb select set shcm si sl sleep sls sort sp '\n      + 'spjb spps spsv start stz sujb sv swmi tee trcm type wget where wjb write'\n    // TODO: 'validate[A-Z]+' can't work in keywords\n  };\n\n  const TITLE_NAME_RE = /\\w[\\w\\d]*((-)[\\w\\d]+)*/;\n\n  const BACKTICK_ESCAPE = {\n    begin: '`[\\\\s\\\\S]',\n    relevance: 0\n  };\n\n  const VAR = {\n    className: 'variable',\n    variants: [\n      { begin: /\\$\\B/ },\n      {\n        className: 'keyword',\n        begin: /\\$this/\n      },\n      { begin: /\\$[\\w\\d][\\w\\d_:]*/ }\n    ]\n  };\n\n  const LITERAL = {\n    className: 'literal',\n    begin: /\\$(null|true|false)\\b/\n  };\n\n  const QUOTE_STRING = {\n    className: \"string\",\n    variants: [\n      {\n        begin: /\"/,\n        end: /\"/\n      },\n      {\n        begin: /@\"/,\n        end: /^\"@/\n      }\n    ],\n    contains: [\n      BACKTICK_ESCAPE,\n      VAR,\n      {\n        className: 'variable',\n        begin: /\\$[A-z]/,\n        end: /[^A-z]/\n      }\n    ]\n  };\n\n  const APOS_STRING = {\n    className: 'string',\n    variants: [\n      {\n        begin: /'/,\n        end: /'/\n      },\n      {\n        begin: /@'/,\n        end: /^'@/\n      }\n    ]\n  };\n\n  const PS_HELPTAGS = {\n    className: \"doctag\",\n    variants: [\n      /* no paramater help tags */\n      { begin: /\\.(synopsis|description|example|inputs|outputs|notes|link|component|role|functionality)/ },\n      /* one parameter help tags */\n      { begin: /\\.(parameter|forwardhelptargetname|forwardhelpcategory|remotehelprunspace|externalhelp)\\s+\\S+/ }\n    ]\n  };\n\n  const PS_COMMENT = hljs.inherit(\n    hljs.COMMENT(null, null),\n    {\n      variants: [\n        /* single-line comment */\n        {\n          begin: /#/,\n          end: /$/\n        },\n        /* multi-line comment */\n        {\n          begin: /<#/,\n          end: /#>/\n        }\n      ],\n      contains: [ PS_HELPTAGS ]\n    }\n  );\n\n  const CMDLETS = {\n    className: 'built_in',\n    variants: [ { begin: '('.concat(VALID_VERBS, ')+(-)[\\\\w\\\\d]+') } ]\n  };\n\n  const PS_CLASS = {\n    className: 'class',\n    beginKeywords: 'class enum',\n    end: /\\s*[{]/,\n    excludeEnd: true,\n    relevance: 0,\n    contains: [ hljs.TITLE_MODE ]\n  };\n\n  const PS_FUNCTION = {\n    className: 'function',\n    begin: /function\\s+/,\n    end: /\\s*\\{|$/,\n    excludeEnd: true,\n    returnBegin: true,\n    relevance: 0,\n    contains: [\n      {\n        begin: \"function\",\n        relevance: 0,\n        className: \"keyword\"\n      },\n      {\n        className: \"title\",\n        begin: TITLE_NAME_RE,\n        relevance: 0\n      },\n      {\n        begin: /\\(/,\n        end: /\\)/,\n        className: \"params\",\n        relevance: 0,\n        contains: [ VAR ]\n      }\n      // CMDLETS\n    ]\n  };\n\n  // Using statment, plus type, plus assembly name.\n  const PS_USING = {\n    begin: /using\\s/,\n    end: /$/,\n    returnBegin: true,\n    contains: [\n      QUOTE_STRING,\n      APOS_STRING,\n      {\n        className: 'keyword',\n        begin: /(using|assembly|command|module|namespace|type)/\n      }\n    ]\n  };\n\n  // Comperison operators & function named parameters.\n  const PS_ARGUMENTS = { variants: [\n    // PS literals are pretty verbose so it's a good idea to accent them a bit.\n    {\n      className: 'operator',\n      begin: '('.concat(COMPARISON_OPERATORS, ')\\\\b')\n    },\n    {\n      className: 'literal',\n      begin: /(-){1,2}[\\w\\d-]+/,\n      relevance: 0\n    }\n  ] };\n\n  const HASH_SIGNS = {\n    className: 'selector-tag',\n    begin: /@\\B/,\n    relevance: 0\n  };\n\n  // It's a very general rule so I'll narrow it a bit with some strict boundaries\n  // to avoid any possible false-positive collisions!\n  const PS_METHODS = {\n    className: 'function',\n    begin: /\\[.*\\]\\s*[\\w]+[ ]??\\(/,\n    end: /$/,\n    returnBegin: true,\n    relevance: 0,\n    contains: [\n      {\n        className: 'keyword',\n        begin: '('.concat(\n          KEYWORDS.keyword.toString().replace(/\\s/g, '|'\n          ), ')\\\\b'),\n        endsParent: true,\n        relevance: 0\n      },\n      hljs.inherit(hljs.TITLE_MODE, { endsParent: true })\n    ]\n  };\n\n  const GENTLEMANS_SET = [\n    // STATIC_MEMBER,\n    PS_METHODS,\n    PS_COMMENT,\n    BACKTICK_ESCAPE,\n    hljs.NUMBER_MODE,\n    QUOTE_STRING,\n    APOS_STRING,\n    // PS_NEW_OBJECT_TYPE,\n    CMDLETS,\n    VAR,\n    LITERAL,\n    HASH_SIGNS\n  ];\n\n  const PS_TYPE = {\n    begin: /\\[/,\n    end: /\\]/,\n    excludeBegin: true,\n    excludeEnd: true,\n    relevance: 0,\n    contains: [].concat(\n      'self',\n      GENTLEMANS_SET,\n      {\n        begin: \"(\" + TYPES.join(\"|\") + \")\",\n        className: \"built_in\",\n        relevance: 0\n      },\n      {\n        className: 'type',\n        begin: /[\\.\\w\\d]+/,\n        relevance: 0\n      }\n    )\n  };\n\n  PS_METHODS.contains.unshift(PS_TYPE);\n\n  return {\n    name: 'PowerShell',\n    aliases: [\n      \"pwsh\",\n      \"ps\",\n      \"ps1\"\n    ],\n    case_insensitive: true,\n    keywords: KEYWORDS,\n    contains: GENTLEMANS_SET.concat(\n      PS_CLASS,\n      PS_FUNCTION,\n      PS_USING,\n      PS_ARGUMENTS,\n      PS_TYPE\n    )\n  };\n}\n\nmodule.exports = powershell;\n","/*\nLanguage: Processing\nDescription: Processing is a flexible software sketchbook and a language for learning how to code within the context of the visual arts.\nAuthor: Erik Paluka <erik.paluka@gmail.com>\nWebsite: https://processing.org\nCategory: graphics\n*/\n\nfunction processing(hljs) {\n  const regex = hljs.regex;\n  const BUILT_INS = [\n    \"displayHeight\",\n    \"displayWidth\",\n    \"mouseY\",\n    \"mouseX\",\n    \"mousePressed\",\n    \"pmouseX\",\n    \"pmouseY\",\n    \"key\",\n    \"keyCode\",\n    \"pixels\",\n    \"focused\",\n    \"frameCount\",\n    \"frameRate\",\n    \"height\",\n    \"width\",\n    \"size\",\n    \"createGraphics\",\n    \"beginDraw\",\n    \"createShape\",\n    \"loadShape\",\n    \"PShape\",\n    \"arc\",\n    \"ellipse\",\n    \"line\",\n    \"point\",\n    \"quad\",\n    \"rect\",\n    \"triangle\",\n    \"bezier\",\n    \"bezierDetail\",\n    \"bezierPoint\",\n    \"bezierTangent\",\n    \"curve\",\n    \"curveDetail\",\n    \"curvePoint\",\n    \"curveTangent\",\n    \"curveTightness\",\n    \"shape\",\n    \"shapeMode\",\n    \"beginContour\",\n    \"beginShape\",\n    \"bezierVertex\",\n    \"curveVertex\",\n    \"endContour\",\n    \"endShape\",\n    \"quadraticVertex\",\n    \"vertex\",\n    \"ellipseMode\",\n    \"noSmooth\",\n    \"rectMode\",\n    \"smooth\",\n    \"strokeCap\",\n    \"strokeJoin\",\n    \"strokeWeight\",\n    \"mouseClicked\",\n    \"mouseDragged\",\n    \"mouseMoved\",\n    \"mousePressed\",\n    \"mouseReleased\",\n    \"mouseWheel\",\n    \"keyPressed\",\n    \"keyPressedkeyReleased\",\n    \"keyTyped\",\n    \"print\",\n    \"println\",\n    \"save\",\n    \"saveFrame\",\n    \"day\",\n    \"hour\",\n    \"millis\",\n    \"minute\",\n    \"month\",\n    \"second\",\n    \"year\",\n    \"background\",\n    \"clear\",\n    \"colorMode\",\n    \"fill\",\n    \"noFill\",\n    \"noStroke\",\n    \"stroke\",\n    \"alpha\",\n    \"blue\",\n    \"brightness\",\n    \"color\",\n    \"green\",\n    \"hue\",\n    \"lerpColor\",\n    \"red\",\n    \"saturation\",\n    \"modelX\",\n    \"modelY\",\n    \"modelZ\",\n    \"screenX\",\n    \"screenY\",\n    \"screenZ\",\n    \"ambient\",\n    \"emissive\",\n    \"shininess\",\n    \"specular\",\n    \"add\",\n    \"createImage\",\n    \"beginCamera\",\n    \"camera\",\n    \"endCamera\",\n    \"frustum\",\n    \"ortho\",\n    \"perspective\",\n    \"printCamera\",\n    \"printProjection\",\n    \"cursor\",\n    \"frameRate\",\n    \"noCursor\",\n    \"exit\",\n    \"loop\",\n    \"noLoop\",\n    \"popStyle\",\n    \"pushStyle\",\n    \"redraw\",\n    \"binary\",\n    \"boolean\",\n    \"byte\",\n    \"char\",\n    \"float\",\n    \"hex\",\n    \"int\",\n    \"str\",\n    \"unbinary\",\n    \"unhex\",\n    \"join\",\n    \"match\",\n    \"matchAll\",\n    \"nf\",\n    \"nfc\",\n    \"nfp\",\n    \"nfs\",\n    \"split\",\n    \"splitTokens\",\n    \"trim\",\n    \"append\",\n    \"arrayCopy\",\n    \"concat\",\n    \"expand\",\n    \"reverse\",\n    \"shorten\",\n    \"sort\",\n    \"splice\",\n    \"subset\",\n    \"box\",\n    \"sphere\",\n    \"sphereDetail\",\n    \"createInput\",\n    \"createReader\",\n    \"loadBytes\",\n    \"loadJSONArray\",\n    \"loadJSONObject\",\n    \"loadStrings\",\n    \"loadTable\",\n    \"loadXML\",\n    \"open\",\n    \"parseXML\",\n    \"saveTable\",\n    \"selectFolder\",\n    \"selectInput\",\n    \"beginRaw\",\n    \"beginRecord\",\n    \"createOutput\",\n    \"createWriter\",\n    \"endRaw\",\n    \"endRecord\",\n    \"PrintWritersaveBytes\",\n    \"saveJSONArray\",\n    \"saveJSONObject\",\n    \"saveStream\",\n    \"saveStrings\",\n    \"saveXML\",\n    \"selectOutput\",\n    \"popMatrix\",\n    \"printMatrix\",\n    \"pushMatrix\",\n    \"resetMatrix\",\n    \"rotate\",\n    \"rotateX\",\n    \"rotateY\",\n    \"rotateZ\",\n    \"scale\",\n    \"shearX\",\n    \"shearY\",\n    \"translate\",\n    \"ambientLight\",\n    \"directionalLight\",\n    \"lightFalloff\",\n    \"lights\",\n    \"lightSpecular\",\n    \"noLights\",\n    \"normal\",\n    \"pointLight\",\n    \"spotLight\",\n    \"image\",\n    \"imageMode\",\n    \"loadImage\",\n    \"noTint\",\n    \"requestImage\",\n    \"tint\",\n    \"texture\",\n    \"textureMode\",\n    \"textureWrap\",\n    \"blend\",\n    \"copy\",\n    \"filter\",\n    \"get\",\n    \"loadPixels\",\n    \"set\",\n    \"updatePixels\",\n    \"blendMode\",\n    \"loadShader\",\n    \"PShaderresetShader\",\n    \"shader\",\n    \"createFont\",\n    \"loadFont\",\n    \"text\",\n    \"textFont\",\n    \"textAlign\",\n    \"textLeading\",\n    \"textMode\",\n    \"textSize\",\n    \"textWidth\",\n    \"textAscent\",\n    \"textDescent\",\n    \"abs\",\n    \"ceil\",\n    \"constrain\",\n    \"dist\",\n    \"exp\",\n    \"floor\",\n    \"lerp\",\n    \"log\",\n    \"mag\",\n    \"map\",\n    \"max\",\n    \"min\",\n    \"norm\",\n    \"pow\",\n    \"round\",\n    \"sq\",\n    \"sqrt\",\n    \"acos\",\n    \"asin\",\n    \"atan\",\n    \"atan2\",\n    \"cos\",\n    \"degrees\",\n    \"radians\",\n    \"sin\",\n    \"tan\",\n    \"noise\",\n    \"noiseDetail\",\n    \"noiseSeed\",\n    \"random\",\n    \"randomGaussian\",\n    \"randomSeed\"\n  ];\n  const IDENT = hljs.IDENT_RE;\n  const FUNC_NAME = { variants: [\n    {\n      match: regex.concat(regex.either(...BUILT_INS), regex.lookahead(/\\s*\\(/)),\n      className: \"built_in\"\n    },\n    {\n      relevance: 0,\n      match: regex.concat(\n        /\\b(?!for|if|while)/,\n        IDENT, regex.lookahead(/\\s*\\(/)),\n      className: \"title.function\"\n    }\n  ] };\n  const NEW_CLASS = {\n    match: [\n      /new\\s+/,\n      IDENT\n    ],\n    className: {\n      1: \"keyword\",\n      2: \"class.title\"\n    }\n  };\n  const PROPERTY = {\n    relevance: 0,\n    match: [\n      /\\./,\n      IDENT\n    ],\n    className: { 2: \"property\" }\n  };\n  const CLASS = {\n    variants: [\n      { match: [\n        /class/,\n        /\\s+/,\n        IDENT,\n        /\\s+/,\n        /extends/,\n        /\\s+/,\n        IDENT\n      ] },\n      { match: [\n        /class/,\n        /\\s+/,\n        IDENT\n      ] }\n    ],\n    className: {\n      1: \"keyword\",\n      3: \"title.class\",\n      5: \"keyword\",\n      7: \"title.class.inherited\"\n    }\n  };\n\n  const TYPES = [\n    \"boolean\",\n    \"byte\",\n    \"char\",\n    \"color\",\n    \"double\",\n    \"float\",\n    \"int\",\n    \"long\",\n    \"short\",\n  ];\n  const CLASSES = [\n    \"BufferedReader\",\n    \"PVector\",\n    \"PFont\",\n    \"PImage\",\n    \"PGraphics\",\n    \"HashMap\",\n    \"String\",\n    \"Array\",\n    \"FloatDict\",\n    \"ArrayList\",\n    \"FloatList\",\n    \"IntDict\",\n    \"IntList\",\n    \"JSONArray\",\n    \"JSONObject\",\n    \"Object\",\n    \"StringDict\",\n    \"StringList\",\n    \"Table\",\n    \"TableRow\",\n    \"XML\"\n  ];\n  const JAVA_KEYWORDS = [\n    \"abstract\",\n    \"assert\",\n    \"break\",\n    \"case\",\n    \"catch\",\n    \"const\",\n    \"continue\",\n    \"default\",\n    \"else\",\n    \"enum\",\n    \"final\",\n    \"finally\",\n    \"for\",\n    \"if\",\n    \"import\",\n    \"instanceof\",\n    \"long\",\n    \"native\",\n    \"new\",\n    \"package\",\n    \"private\",\n    \"private\",\n    \"protected\",\n    \"protected\",\n    \"public\",\n    \"public\",\n    \"return\",\n    \"static\",\n    \"strictfp\",\n    \"switch\",\n    \"synchronized\",\n    \"throw\",\n    \"throws\",\n    \"transient\",\n    \"try\",\n    \"void\",\n    \"volatile\",\n    \"while\"\n  ];\n\n  return {\n    name: 'Processing',\n    aliases: [ 'pde' ],\n    keywords: {\n      keyword: [ ...JAVA_KEYWORDS ],\n      literal: 'P2D P3D HALF_PI PI QUARTER_PI TAU TWO_PI null true false',\n      title: 'setup draw',\n      variable: \"super this\",\n      built_in: [\n        ...BUILT_INS,\n        ...CLASSES\n      ],\n      type: TYPES\n    },\n    contains: [\n      CLASS,\n      NEW_CLASS,\n      FUNC_NAME,\n      PROPERTY,\n      hljs.C_LINE_COMMENT_MODE,\n      hljs.C_BLOCK_COMMENT_MODE,\n      hljs.APOS_STRING_MODE,\n      hljs.QUOTE_STRING_MODE,\n      hljs.C_NUMBER_MODE\n    ]\n  };\n}\n\nmodule.exports = processing;\n","/*\nLanguage: Python profiler\nDescription: Python profiler results\nAuthor: Brian Beck <exogen@gmail.com>\n*/\n\nfunction profile(hljs) {\n  return {\n    name: 'Python profiler',\n    contains: [\n      hljs.C_NUMBER_MODE,\n      {\n        begin: '[a-zA-Z_][\\\\da-zA-Z_]+\\\\.[\\\\da-zA-Z_]{1,3}',\n        end: ':',\n        excludeEnd: true\n      },\n      {\n        begin: '(ncalls|tottime|cumtime)',\n        end: '$',\n        keywords: 'ncalls tottime|10 cumtime|10 filename',\n        relevance: 10\n      },\n      {\n        begin: 'function calls',\n        end: '$',\n        contains: [ hljs.C_NUMBER_MODE ],\n        relevance: 10\n      },\n      hljs.APOS_STRING_MODE,\n      hljs.QUOTE_STRING_MODE,\n      {\n        className: 'string',\n        begin: '\\\\(',\n        end: '\\\\)$',\n        excludeBegin: true,\n        excludeEnd: true,\n        relevance: 0\n      }\n    ]\n  };\n}\n\nmodule.exports = profile;\n","/*\nLanguage: Prolog\nDescription: Prolog is a general purpose logic programming language associated with artificial intelligence and computational linguistics.\nAuthor: Raivo Laanemets <raivo@infdot.com>\nWebsite: https://en.wikipedia.org/wiki/Prolog\nCategory: functional\n*/\n\nfunction prolog(hljs) {\n  const ATOM = {\n\n    begin: /[a-z][A-Za-z0-9_]*/,\n    relevance: 0\n  };\n\n  const VAR = {\n\n    className: 'symbol',\n    variants: [\n      { begin: /[A-Z][a-zA-Z0-9_]*/ },\n      { begin: /_[A-Za-z0-9_]*/ }\n    ],\n    relevance: 0\n  };\n\n  const PARENTED = {\n\n    begin: /\\(/,\n    end: /\\)/,\n    relevance: 0\n  };\n\n  const LIST = {\n\n    begin: /\\[/,\n    end: /\\]/\n  };\n\n  const LINE_COMMENT = {\n\n    className: 'comment',\n    begin: /%/,\n    end: /$/,\n    contains: [ hljs.PHRASAL_WORDS_MODE ]\n  };\n\n  const BACKTICK_STRING = {\n\n    className: 'string',\n    begin: /`/,\n    end: /`/,\n    contains: [ hljs.BACKSLASH_ESCAPE ]\n  };\n\n  const CHAR_CODE = {\n    className: 'string', // 0'a etc.\n    begin: /0'(\\\\'|.)/\n  };\n\n  const SPACE_CODE = {\n    className: 'string',\n    begin: /0'\\\\s/ // 0'\\s\n  };\n\n  const PRED_OP = { // relevance booster\n    begin: /:-/ };\n\n  const inner = [\n\n    ATOM,\n    VAR,\n    PARENTED,\n    PRED_OP,\n    LIST,\n    LINE_COMMENT,\n    hljs.C_BLOCK_COMMENT_MODE,\n    hljs.QUOTE_STRING_MODE,\n    hljs.APOS_STRING_MODE,\n    BACKTICK_STRING,\n    CHAR_CODE,\n    SPACE_CODE,\n    hljs.C_NUMBER_MODE\n  ];\n\n  PARENTED.contains = inner;\n  LIST.contains = inner;\n\n  return {\n    name: 'Prolog',\n    contains: inner.concat([\n      { // relevance booster\n        begin: /\\.$/ }\n    ])\n  };\n}\n\nmodule.exports = prolog;\n","/*\nLanguage: .properties\nContributors: Valentin Aitken <valentin@nalisbg.com>, Egor Rogov <e.rogov@postgrespro.ru>\nWebsite: https://en.wikipedia.org/wiki/.properties\nCategory: config\n*/\n\n/** @type LanguageFn */\nfunction properties(hljs) {\n  // whitespaces: space, tab, formfeed\n  const WS0 = '[ \\\\t\\\\f]*';\n  const WS1 = '[ \\\\t\\\\f]+';\n  // delimiter\n  const EQUAL_DELIM = WS0 + '[:=]' + WS0;\n  const WS_DELIM = WS1;\n  const DELIM = '(' + EQUAL_DELIM + '|' + WS_DELIM + ')';\n  const KEY = '([^\\\\\\\\:= \\\\t\\\\f\\\\n]|\\\\\\\\.)+';\n\n  const DELIM_AND_VALUE = {\n    // skip DELIM\n    end: DELIM,\n    relevance: 0,\n    starts: {\n      // value: everything until end of line (again, taking into account backslashes)\n      className: 'string',\n      end: /$/,\n      relevance: 0,\n      contains: [\n        { begin: '\\\\\\\\\\\\\\\\' },\n        { begin: '\\\\\\\\\\\\n' }\n      ]\n    }\n  };\n\n  return {\n    name: '.properties',\n    disableAutodetect: true,\n    case_insensitive: true,\n    illegal: /\\S/,\n    contains: [\n      hljs.COMMENT('^\\\\s*[!#]', '$'),\n      // key: everything until whitespace or = or : (taking into account backslashes)\n      // case of a key-value pair\n      {\n        returnBegin: true,\n        variants: [\n          { begin: KEY + EQUAL_DELIM },\n          { begin: KEY + WS_DELIM }\n        ],\n        contains: [\n          {\n            className: 'attr',\n            begin: KEY,\n            endsParent: true\n          }\n        ],\n        starts: DELIM_AND_VALUE\n      },\n      // case of an empty key\n      {\n        className: 'attr',\n        begin: KEY + WS0 + '$'\n      }\n    ]\n  };\n}\n\nmodule.exports = properties;\n","/*\nLanguage: Protocol Buffers\nAuthor: Dan Tao <daniel.tao@gmail.com>\nDescription: Protocol buffer message definition format\nWebsite: https://developers.google.com/protocol-buffers/docs/proto3\nCategory: protocols\n*/\n\nfunction protobuf(hljs) {\n  const KEYWORDS = [\n    \"package\",\n    \"import\",\n    \"option\",\n    \"optional\",\n    \"required\",\n    \"repeated\",\n    \"group\",\n    \"oneof\"\n  ];\n  const TYPES = [\n    \"double\",\n    \"float\",\n    \"int32\",\n    \"int64\",\n    \"uint32\",\n    \"uint64\",\n    \"sint32\",\n    \"sint64\",\n    \"fixed32\",\n    \"fixed64\",\n    \"sfixed32\",\n    \"sfixed64\",\n    \"bool\",\n    \"string\",\n    \"bytes\"\n  ];\n  const CLASS_DEFINITION = {\n    match: [\n      /(message|enum|service)\\s+/,\n      hljs.IDENT_RE\n    ],\n    scope: {\n      1: \"keyword\",\n      2: \"title.class\"\n    }\n  };\n\n  return {\n    name: 'Protocol Buffers',\n    aliases: ['proto'],\n    keywords: {\n      keyword: KEYWORDS,\n      type: TYPES,\n      literal: [\n        'true',\n        'false'\n      ]\n    },\n    contains: [\n      hljs.QUOTE_STRING_MODE,\n      hljs.NUMBER_MODE,\n      hljs.C_LINE_COMMENT_MODE,\n      hljs.C_BLOCK_COMMENT_MODE,\n      CLASS_DEFINITION,\n      {\n        className: 'function',\n        beginKeywords: 'rpc',\n        end: /[{;]/,\n        excludeEnd: true,\n        keywords: 'rpc returns'\n      },\n      { // match enum items (relevance)\n        // BLAH = ...;\n        begin: /^\\s*[A-Z_]+(?=\\s*=[^\\n]+;$)/ }\n    ]\n  };\n}\n\nmodule.exports = protobuf;\n","/*\nLanguage: Puppet\nAuthor: Jose Molina Colmenero <gaudy41@gmail.com>\nWebsite: https://puppet.com/docs\nCategory: config\n*/\n\nfunction puppet(hljs) {\n  const PUPPET_KEYWORDS = {\n    keyword:\n    /* language keywords */\n      'and case default else elsif false if in import enherits node or true undef unless main settings $string ',\n    literal:\n    /* metaparameters */\n      'alias audit before loglevel noop require subscribe tag '\n      /* normal attributes */\n      + 'owner ensure group mode name|0 changes context force incl lens load_path onlyif provider returns root show_diff type_check '\n      + 'en_address ip_address realname command environment hour monute month monthday special target weekday '\n      + 'creates cwd ogoutput refresh refreshonly tries try_sleep umask backup checksum content ctime force ignore '\n      + 'links mtime purge recurse recurselimit replace selinux_ignore_defaults selrange selrole seltype seluser source '\n      + 'souirce_permissions sourceselect validate_cmd validate_replacement allowdupe attribute_membership auth_membership forcelocal gid '\n      + 'ia_load_module members system host_aliases ip allowed_trunk_vlans description device_url duplex encapsulation etherchannel '\n      + 'native_vlan speed principals allow_root auth_class auth_type authenticate_user k_of_n mechanisms rule session_owner shared options '\n      + 'device fstype enable hasrestart directory present absent link atboot blockdevice device dump pass remounts poller_tag use '\n      + 'message withpath adminfile allow_virtual allowcdrom category configfiles flavor install_options instance package_settings platform '\n      + 'responsefile status uninstall_options vendor unless_system_user unless_uid binary control flags hasstatus manifest pattern restart running '\n      + 'start stop allowdupe auths expiry gid groups home iterations key_membership keys managehome membership password password_max_age '\n      + 'password_min_age profile_membership profiles project purge_ssh_keys role_membership roles salt shell uid baseurl cost descr enabled '\n      + 'enablegroups exclude failovermethod gpgcheck gpgkey http_caching include includepkgs keepalive metadata_expire metalink mirrorlist '\n      + 'priority protect proxy proxy_password proxy_username repo_gpgcheck s3_enabled skip_if_unavailable sslcacert sslclientcert sslclientkey '\n      + 'sslverify mounted',\n    built_in:\n    /* core facts */\n      'architecture augeasversion blockdevices boardmanufacturer boardproductname boardserialnumber cfkey dhcp_servers '\n      + 'domain ec2_ ec2_userdata facterversion filesystems ldom fqdn gid hardwareisa hardwaremodel hostname id|0 interfaces '\n      + 'ipaddress ipaddress_ ipaddress6 ipaddress6_ iphostnumber is_virtual kernel kernelmajversion kernelrelease kernelversion '\n      + 'kernelrelease kernelversion lsbdistcodename lsbdistdescription lsbdistid lsbdistrelease lsbmajdistrelease lsbminordistrelease '\n      + 'lsbrelease macaddress macaddress_ macosx_buildversion macosx_productname macosx_productversion macosx_productverson_major '\n      + 'macosx_productversion_minor manufacturer memoryfree memorysize netmask metmask_ network_ operatingsystem operatingsystemmajrelease '\n      + 'operatingsystemrelease osfamily partitions path physicalprocessorcount processor processorcount productname ps puppetversion '\n      + 'rubysitedir rubyversion selinux selinux_config_mode selinux_config_policy selinux_current_mode selinux_current_mode selinux_enforced '\n      + 'selinux_policyversion serialnumber sp_ sshdsakey sshecdsakey sshrsakey swapencrypted swapfree swapsize timezone type uniqueid uptime '\n      + 'uptime_days uptime_hours uptime_seconds uuid virtual vlans xendomains zfs_version zonenae zones zpool_version'\n  };\n\n  const COMMENT = hljs.COMMENT('#', '$');\n\n  const IDENT_RE = '([A-Za-z_]|::)(\\\\w|::)*';\n\n  const TITLE = hljs.inherit(hljs.TITLE_MODE, { begin: IDENT_RE });\n\n  const VARIABLE = {\n    className: 'variable',\n    begin: '\\\\$' + IDENT_RE\n  };\n\n  const STRING = {\n    className: 'string',\n    contains: [\n      hljs.BACKSLASH_ESCAPE,\n      VARIABLE\n    ],\n    variants: [\n      {\n        begin: /'/,\n        end: /'/\n      },\n      {\n        begin: /\"/,\n        end: /\"/\n      }\n    ]\n  };\n\n  return {\n    name: 'Puppet',\n    aliases: [ 'pp' ],\n    contains: [\n      COMMENT,\n      VARIABLE,\n      STRING,\n      {\n        beginKeywords: 'class',\n        end: '\\\\{|;',\n        illegal: /=/,\n        contains: [\n          TITLE,\n          COMMENT\n        ]\n      },\n      {\n        beginKeywords: 'define',\n        end: /\\{/,\n        contains: [\n          {\n            className: 'section',\n            begin: hljs.IDENT_RE,\n            endsParent: true\n          }\n        ]\n      },\n      {\n        begin: hljs.IDENT_RE + '\\\\s+\\\\{',\n        returnBegin: true,\n        end: /\\S/,\n        contains: [\n          {\n            className: 'keyword',\n            begin: hljs.IDENT_RE,\n            relevance: 0.2\n          },\n          {\n            begin: /\\{/,\n            end: /\\}/,\n            keywords: PUPPET_KEYWORDS,\n            relevance: 0,\n            contains: [\n              STRING,\n              COMMENT,\n              {\n                begin: '[a-zA-Z_]+\\\\s*=>',\n                returnBegin: true,\n                end: '=>',\n                contains: [\n                  {\n                    className: 'attr',\n                    begin: hljs.IDENT_RE\n                  }\n                ]\n              },\n              {\n                className: 'number',\n                begin: '(\\\\b0[0-7_]+)|(\\\\b0x[0-9a-fA-F_]+)|(\\\\b[1-9][0-9_]*(\\\\.[0-9_]+)?)|[0_]\\\\b',\n                relevance: 0\n              },\n              VARIABLE\n            ]\n          }\n        ],\n        relevance: 0\n      }\n    ]\n  };\n}\n\nmodule.exports = puppet;\n","/*\nLanguage: PureBASIC\nAuthor: Tristano Ajmone <tajmone@gmail.com>\nDescription: Syntax highlighting for PureBASIC (v.5.00-5.60). No inline ASM highlighting. (v.1.2, May 2017)\nCredits: I've taken inspiration from the PureBasic language file for GeSHi, created by Gustavo Julio Fiorenza (GuShH).\nWebsite: https://www.purebasic.com\nCategory: system\n*/\n\n// Base deafult colors in PB IDE: background: #FFFFDF; foreground: #000000;\n\nfunction purebasic(hljs) {\n  const STRINGS = { // PB IDE color: #0080FF (Azure Radiance)\n    className: 'string',\n    begin: '(~)?\"',\n    end: '\"',\n    illegal: '\\\\n'\n  };\n  const CONSTANTS = { // PB IDE color: #924B72 (Cannon Pink)\n    //  \"#\" + a letter or underscore + letters, digits or underscores + (optional) \"$\"\n    className: 'symbol',\n    begin: '#[a-zA-Z_]\\\\w*\\\\$?'\n  };\n\n  return {\n    name: 'PureBASIC',\n    aliases: [\n      'pb',\n      'pbi'\n    ],\n    keywords: // PB IDE color: #006666 (Blue Stone) + Bold\n      // Keywords from all version of PureBASIC 5.00 upward ...\n      'Align And Array As Break CallDebugger Case CompilerCase CompilerDefault '\n      + 'CompilerElse CompilerElseIf CompilerEndIf CompilerEndSelect CompilerError '\n      + 'CompilerIf CompilerSelect CompilerWarning Continue Data DataSection Debug '\n      + 'DebugLevel Declare DeclareC DeclareCDLL DeclareDLL DeclareModule Default '\n      + 'Define Dim DisableASM DisableDebugger DisableExplicit Else ElseIf EnableASM '\n      + 'EnableDebugger EnableExplicit End EndDataSection EndDeclareModule EndEnumeration '\n      + 'EndIf EndImport EndInterface EndMacro EndModule EndProcedure EndSelect '\n      + 'EndStructure EndStructureUnion EndWith Enumeration EnumerationBinary Extends '\n      + 'FakeReturn For ForEach ForEver Global Gosub Goto If Import ImportC '\n      + 'IncludeBinary IncludeFile IncludePath Interface List Macro MacroExpandedCount '\n      + 'Map Module NewList NewMap Next Not Or Procedure ProcedureC '\n      + 'ProcedureCDLL ProcedureDLL ProcedureReturn Protected Prototype PrototypeC ReDim '\n      + 'Read Repeat Restore Return Runtime Select Shared Static Step Structure '\n      + 'StructureUnion Swap Threaded To UndefineMacro Until Until  UnuseModule '\n      + 'UseModule Wend While With XIncludeFile XOr',\n    contains: [\n      // COMMENTS | PB IDE color: #00AAAA (Persian Green)\n      hljs.COMMENT(';', '$', { relevance: 0 }),\n\n      { // PROCEDURES DEFINITIONS\n        className: 'function',\n        begin: '\\\\b(Procedure|Declare)(C|CDLL|DLL)?\\\\b',\n        end: '\\\\(',\n        excludeEnd: true,\n        returnBegin: true,\n        contains: [\n          { // PROCEDURE KEYWORDS | PB IDE color: #006666 (Blue Stone) + Bold\n            className: 'keyword',\n            begin: '(Procedure|Declare)(C|CDLL|DLL)?',\n            excludeEnd: true\n          },\n          { // PROCEDURE RETURN TYPE SETTING | PB IDE color: #000000 (Black)\n            className: 'type',\n            begin: '\\\\.\\\\w*'\n            // end: ' ',\n          },\n          hljs.UNDERSCORE_TITLE_MODE // PROCEDURE NAME | PB IDE color: #006666 (Blue Stone)\n        ]\n      },\n      STRINGS,\n      CONSTANTS\n    ]\n  };\n}\n\n/*  ==============================================================================\n                                      CHANGELOG\n    ==============================================================================\n    - v.1.2 (2017-05-12)\n        -- BUG-FIX: Some keywords were accidentally joyned together. Now fixed.\n    - v.1.1 (2017-04-30)\n        -- Updated to PureBASIC 5.60.\n        -- Keywords list now built by extracting them from the PureBASIC SDK's\n           \"SyntaxHilighting.dll\" (from each PureBASIC version). Tokens from each\n           version are added to the list, and renamed or removed tokens are kept\n           for the sake of covering all versions of the language from PureBASIC\n           v5.00 upward. (NOTE: currently, there are no renamed or deprecated\n           tokens in the keywords list). For more info, see:\n           -- http://www.purebasic.fr/english/viewtopic.php?&p=506269\n           -- https://github.com/tajmone/purebasic-archives/tree/master/syntax-highlighting/guidelines\n    - v.1.0 (April 2016)\n        -- First release\n        -- Keywords list taken and adapted from GuShH's (Gustavo Julio Fiorenza)\n           PureBasic language file for GeSHi:\n           -- https://github.com/easybook/geshi/blob/master/geshi/purebasic.php\n*/\n\nmodule.exports = purebasic;\n","/*\nLanguage: Python\nDescription: Python is an interpreted, object-oriented, high-level programming language with dynamic semantics.\nWebsite: https://www.python.org\nCategory: common\n*/\n\nfunction python(hljs) {\n  const regex = hljs.regex;\n  const IDENT_RE = /[\\p{XID_Start}_]\\p{XID_Continue}*/u;\n  const RESERVED_WORDS = [\n    'and',\n    'as',\n    'assert',\n    'async',\n    'await',\n    'break',\n    'case',\n    'class',\n    'continue',\n    'def',\n    'del',\n    'elif',\n    'else',\n    'except',\n    'finally',\n    'for',\n    'from',\n    'global',\n    'if',\n    'import',\n    'in',\n    'is',\n    'lambda',\n    'match',\n    'nonlocal|10',\n    'not',\n    'or',\n    'pass',\n    'raise',\n    'return',\n    'try',\n    'while',\n    'with',\n    'yield'\n  ];\n\n  const BUILT_INS = [\n    '__import__',\n    'abs',\n    'all',\n    'any',\n    'ascii',\n    'bin',\n    'bool',\n    'breakpoint',\n    'bytearray',\n    'bytes',\n    'callable',\n    'chr',\n    'classmethod',\n    'compile',\n    'complex',\n    'delattr',\n    'dict',\n    'dir',\n    'divmod',\n    'enumerate',\n    'eval',\n    'exec',\n    'filter',\n    'float',\n    'format',\n    'frozenset',\n    'getattr',\n    'globals',\n    'hasattr',\n    'hash',\n    'help',\n    'hex',\n    'id',\n    'input',\n    'int',\n    'isinstance',\n    'issubclass',\n    'iter',\n    'len',\n    'list',\n    'locals',\n    'map',\n    'max',\n    'memoryview',\n    'min',\n    'next',\n    'object',\n    'oct',\n    'open',\n    'ord',\n    'pow',\n    'print',\n    'property',\n    'range',\n    'repr',\n    'reversed',\n    'round',\n    'set',\n    'setattr',\n    'slice',\n    'sorted',\n    'staticmethod',\n    'str',\n    'sum',\n    'super',\n    'tuple',\n    'type',\n    'vars',\n    'zip'\n  ];\n\n  const LITERALS = [\n    '__debug__',\n    'Ellipsis',\n    'False',\n    'None',\n    'NotImplemented',\n    'True'\n  ];\n\n  // https://docs.python.org/3/library/typing.html\n  // TODO: Could these be supplemented by a CamelCase matcher in certain\n  // contexts, leaving these remaining only for relevance hinting?\n  const TYPES = [\n    \"Any\",\n    \"Callable\",\n    \"Coroutine\",\n    \"Dict\",\n    \"List\",\n    \"Literal\",\n    \"Generic\",\n    \"Optional\",\n    \"Sequence\",\n    \"Set\",\n    \"Tuple\",\n    \"Type\",\n    \"Union\"\n  ];\n\n  const KEYWORDS = {\n    $pattern: /[A-Za-z]\\w+|__\\w+__/,\n    keyword: RESERVED_WORDS,\n    built_in: BUILT_INS,\n    literal: LITERALS,\n    type: TYPES\n  };\n\n  const PROMPT = {\n    className: 'meta',\n    begin: /^(>>>|\\.\\.\\.) /\n  };\n\n  const SUBST = {\n    className: 'subst',\n    begin: /\\{/,\n    end: /\\}/,\n    keywords: KEYWORDS,\n    illegal: /#/\n  };\n\n  const LITERAL_BRACKET = {\n    begin: /\\{\\{/,\n    relevance: 0\n  };\n\n  const STRING = {\n    className: 'string',\n    contains: [ hljs.BACKSLASH_ESCAPE ],\n    variants: [\n      {\n        begin: /([uU]|[bB]|[rR]|[bB][rR]|[rR][bB])?'''/,\n        end: /'''/,\n        contains: [\n          hljs.BACKSLASH_ESCAPE,\n          PROMPT\n        ],\n        relevance: 10\n      },\n      {\n        begin: /([uU]|[bB]|[rR]|[bB][rR]|[rR][bB])?\"\"\"/,\n        end: /\"\"\"/,\n        contains: [\n          hljs.BACKSLASH_ESCAPE,\n          PROMPT\n        ],\n        relevance: 10\n      },\n      {\n        begin: /([fF][rR]|[rR][fF]|[fF])'''/,\n        end: /'''/,\n        contains: [\n          hljs.BACKSLASH_ESCAPE,\n          PROMPT,\n          LITERAL_BRACKET,\n          SUBST\n        ]\n      },\n      {\n        begin: /([fF][rR]|[rR][fF]|[fF])\"\"\"/,\n        end: /\"\"\"/,\n        contains: [\n          hljs.BACKSLASH_ESCAPE,\n          PROMPT,\n          LITERAL_BRACKET,\n          SUBST\n        ]\n      },\n      {\n        begin: /([uU]|[rR])'/,\n        end: /'/,\n        relevance: 10\n      },\n      {\n        begin: /([uU]|[rR])\"/,\n        end: /\"/,\n        relevance: 10\n      },\n      {\n        begin: /([bB]|[bB][rR]|[rR][bB])'/,\n        end: /'/\n      },\n      {\n        begin: /([bB]|[bB][rR]|[rR][bB])\"/,\n        end: /\"/\n      },\n      {\n        begin: /([fF][rR]|[rR][fF]|[fF])'/,\n        end: /'/,\n        contains: [\n          hljs.BACKSLASH_ESCAPE,\n          LITERAL_BRACKET,\n          SUBST\n        ]\n      },\n      {\n        begin: /([fF][rR]|[rR][fF]|[fF])\"/,\n        end: /\"/,\n        contains: [\n          hljs.BACKSLASH_ESCAPE,\n          LITERAL_BRACKET,\n          SUBST\n        ]\n      },\n      hljs.APOS_STRING_MODE,\n      hljs.QUOTE_STRING_MODE\n    ]\n  };\n\n  // https://docs.python.org/3.9/reference/lexical_analysis.html#numeric-literals\n  const digitpart = '[0-9](_?[0-9])*';\n  const pointfloat = `(\\\\b(${digitpart}))?\\\\.(${digitpart})|\\\\b(${digitpart})\\\\.`;\n  // Whitespace after a number (or any lexical token) is needed only if its absence\n  // would change the tokenization\n  // https://docs.python.org/3.9/reference/lexical_analysis.html#whitespace-between-tokens\n  // We deviate slightly, requiring a word boundary or a keyword\n  // to avoid accidentally recognizing *prefixes* (e.g., `0` in `0x41` or `08` or `0__1`)\n  const lookahead = `\\\\b|${RESERVED_WORDS.join('|')}`;\n  const NUMBER = {\n    className: 'number',\n    relevance: 0,\n    variants: [\n      // exponentfloat, pointfloat\n      // https://docs.python.org/3.9/reference/lexical_analysis.html#floating-point-literals\n      // optionally imaginary\n      // https://docs.python.org/3.9/reference/lexical_analysis.html#imaginary-literals\n      // Note: no leading \\b because floats can start with a decimal point\n      // and we don't want to mishandle e.g. `fn(.5)`,\n      // no trailing \\b for pointfloat because it can end with a decimal point\n      // and we don't want to mishandle e.g. `0..hex()`; this should be safe\n      // because both MUST contain a decimal point and so cannot be confused with\n      // the interior part of an identifier\n      {\n        begin: `(\\\\b(${digitpart})|(${pointfloat}))[eE][+-]?(${digitpart})[jJ]?(?=${lookahead})`\n      },\n      {\n        begin: `(${pointfloat})[jJ]?`\n      },\n\n      // decinteger, bininteger, octinteger, hexinteger\n      // https://docs.python.org/3.9/reference/lexical_analysis.html#integer-literals\n      // optionally \"long\" in Python 2\n      // https://docs.python.org/2.7/reference/lexical_analysis.html#integer-and-long-integer-literals\n      // decinteger is optionally imaginary\n      // https://docs.python.org/3.9/reference/lexical_analysis.html#imaginary-literals\n      {\n        begin: `\\\\b([1-9](_?[0-9])*|0+(_?0)*)[lLjJ]?(?=${lookahead})`\n      },\n      {\n        begin: `\\\\b0[bB](_?[01])+[lL]?(?=${lookahead})`\n      },\n      {\n        begin: `\\\\b0[oO](_?[0-7])+[lL]?(?=${lookahead})`\n      },\n      {\n        begin: `\\\\b0[xX](_?[0-9a-fA-F])+[lL]?(?=${lookahead})`\n      },\n\n      // imagnumber (digitpart-based)\n      // https://docs.python.org/3.9/reference/lexical_analysis.html#imaginary-literals\n      {\n        begin: `\\\\b(${digitpart})[jJ](?=${lookahead})`\n      }\n    ]\n  };\n  const COMMENT_TYPE = {\n    className: \"comment\",\n    begin: regex.lookahead(/# type:/),\n    end: /$/,\n    keywords: KEYWORDS,\n    contains: [\n      { // prevent keywords from coloring `type`\n        begin: /# type:/\n      },\n      // comment within a datatype comment includes no keywords\n      {\n        begin: /#/,\n        end: /\\b\\B/,\n        endsWithParent: true\n      }\n    ]\n  };\n  const PARAMS = {\n    className: 'params',\n    variants: [\n      // Exclude params in functions without params\n      {\n        className: \"\",\n        begin: /\\(\\s*\\)/,\n        skip: true\n      },\n      {\n        begin: /\\(/,\n        end: /\\)/,\n        excludeBegin: true,\n        excludeEnd: true,\n        keywords: KEYWORDS,\n        contains: [\n          'self',\n          PROMPT,\n          NUMBER,\n          STRING,\n          hljs.HASH_COMMENT_MODE\n        ]\n      }\n    ]\n  };\n  SUBST.contains = [\n    STRING,\n    NUMBER,\n    PROMPT\n  ];\n\n  return {\n    name: 'Python',\n    aliases: [\n      'py',\n      'gyp',\n      'ipython'\n    ],\n    unicodeRegex: true,\n    keywords: KEYWORDS,\n    illegal: /(<\\/|\\?)|=>/,\n    contains: [\n      PROMPT,\n      NUMBER,\n      {\n        // very common convention\n        scope: 'variable.language',\n        match: /\\bself\\b/\n      },\n      {\n        // eat \"if\" prior to string so that it won't accidentally be\n        // labeled as an f-string\n        beginKeywords: \"if\",\n        relevance: 0\n      },\n      { match: /\\bor\\b/, scope: \"keyword\" },\n      STRING,\n      COMMENT_TYPE,\n      hljs.HASH_COMMENT_MODE,\n      {\n        match: [\n          /\\bdef/, /\\s+/,\n          IDENT_RE,\n        ],\n        scope: {\n          1: \"keyword\",\n          3: \"title.function\"\n        },\n        contains: [ PARAMS ]\n      },\n      {\n        variants: [\n          {\n            match: [\n              /\\bclass/, /\\s+/,\n              IDENT_RE, /\\s*/,\n              /\\(\\s*/, IDENT_RE,/\\s*\\)/\n            ],\n          },\n          {\n            match: [\n              /\\bclass/, /\\s+/,\n              IDENT_RE\n            ],\n          }\n        ],\n        scope: {\n          1: \"keyword\",\n          3: \"title.class\",\n          6: \"title.class.inherited\",\n        }\n      },\n      {\n        className: 'meta',\n        begin: /^[\\t ]*@/,\n        end: /(?=#)|$/,\n        contains: [\n          NUMBER,\n          PARAMS,\n          STRING\n        ]\n      }\n    ]\n  };\n}\n\nmodule.exports = python;\n","/*\nLanguage: Python REPL\nRequires: python.js\nAuthor: Josh Goebel <hello@joshgoebel.com>\nCategory: common\n*/\n\nfunction pythonRepl(hljs) {\n  return {\n    aliases: [ 'pycon' ],\n    contains: [\n      {\n        className: 'meta.prompt',\n        starts: {\n          // a space separates the REPL prefix from the actual code\n          // this is purely for cleaner HTML output\n          end: / |$/,\n          starts: {\n            end: '$',\n            subLanguage: 'python'\n          }\n        },\n        variants: [\n          { begin: /^>>>(?=[ ]|$)/ },\n          { begin: /^\\.\\.\\.(?=[ ]|$)/ }\n        ]\n      }\n    ]\n  };\n}\n\nmodule.exports = pythonRepl;\n","/*\nLanguage: Q\nDescription: Q is a vector-based functional paradigm programming language built into the kdb+ database.\n             (K/Q/Kdb+ from Kx Systems)\nAuthor: Sergey Vidyuk <svidyuk@gmail.com>\nWebsite: https://kx.com/connect-with-us/developers/\nCategory: enterprise, functional, database\n*/\n\nfunction q(hljs) {\n  const KEYWORDS = {\n    $pattern: /(`?)[A-Za-z0-9_]+\\b/,\n    keyword:\n      'do while select delete by update from',\n    literal:\n      '0b 1b',\n    built_in:\n      'neg not null string reciprocal floor ceiling signum mod xbar xlog and or each scan over prior mmu lsq inv md5 ltime gtime count first var dev med cov cor all any rand sums prds mins maxs fills deltas ratios avgs differ prev next rank reverse iasc idesc asc desc msum mcount mavg mdev xrank mmin mmax xprev rotate distinct group where flip type key til get value attr cut set upsert raze union inter except cross sv vs sublist enlist read0 read1 hopen hclose hdel hsym hcount peach system ltrim rtrim trim lower upper ssr view tables views cols xcols keys xkey xcol xasc xdesc fkeys meta lj aj aj0 ij pj asof uj ww wj wj1 fby xgroup ungroup ej save load rsave rload show csv parse eval min max avg wavg wsum sin cos tan sum',\n    type:\n      '`float `double int `timestamp `timespan `datetime `time `boolean `symbol `char `byte `short `long `real `month `date `minute `second `guid'\n  };\n\n  return {\n    name: 'Q',\n    aliases: [\n      'k',\n      'kdb'\n    ],\n    keywords: KEYWORDS,\n    contains: [\n      hljs.C_LINE_COMMENT_MODE,\n      hljs.QUOTE_STRING_MODE,\n      hljs.C_NUMBER_MODE\n    ]\n  };\n}\n\nmodule.exports = q;\n","/*\nLanguage: QML\nRequires: javascript.js, xml.js\nAuthor: John Foster <jfoster@esri.com>\nDescription: Syntax highlighting for the Qt Quick QML scripting language, based mostly off\n             the JavaScript parser.\nWebsite: https://doc.qt.io/qt-5/qmlapplications.html\nCategory: scripting\n*/\n\nfunction qml(hljs) {\n  const regex = hljs.regex;\n  const KEYWORDS = {\n    keyword:\n      'in of on if for while finally var new function do return void else break catch '\n      + 'instanceof with throw case default try this switch continue typeof delete '\n      + 'let yield const export super debugger as async await import',\n    literal:\n      'true false null undefined NaN Infinity',\n    built_in:\n      'eval isFinite isNaN parseFloat parseInt decodeURI decodeURIComponent '\n      + 'encodeURI encodeURIComponent escape unescape Object Function Boolean Error '\n      + 'EvalError InternalError RangeError ReferenceError StopIteration SyntaxError '\n      + 'TypeError URIError Number Math Date String RegExp Array Float32Array '\n      + 'Float64Array Int16Array Int32Array Int8Array Uint16Array Uint32Array '\n      + 'Uint8Array Uint8ClampedArray ArrayBuffer DataView JSON Intl arguments require '\n      + 'module console window document Symbol Set Map WeakSet WeakMap Proxy Reflect '\n      + 'Behavior bool color coordinate date double enumeration font geocircle georectangle '\n      + 'geoshape int list matrix4x4 parent point quaternion real rect '\n      + 'size string url variant vector2d vector3d vector4d '\n      + 'Promise'\n  };\n\n  const QML_IDENT_RE = '[a-zA-Z_][a-zA-Z0-9\\\\._]*';\n\n  // Isolate property statements. Ends at a :, =, ;, ,, a comment or end of line.\n  // Use property class.\n  const PROPERTY = {\n    className: 'keyword',\n    begin: '\\\\bproperty\\\\b',\n    starts: {\n      className: 'string',\n      end: '(:|=|;|,|//|/\\\\*|$)',\n      returnEnd: true\n    }\n  };\n\n  // Isolate signal statements. Ends at a ) a comment or end of line.\n  // Use property class.\n  const SIGNAL = {\n    className: 'keyword',\n    begin: '\\\\bsignal\\\\b',\n    starts: {\n      className: 'string',\n      end: '(\\\\(|:|=|;|,|//|/\\\\*|$)',\n      returnEnd: true\n    }\n  };\n\n  // id: is special in QML. When we see id: we want to mark the id: as attribute and\n  // emphasize the token following.\n  const ID_ID = {\n    className: 'attribute',\n    begin: '\\\\bid\\\\s*:',\n    starts: {\n      className: 'string',\n      end: QML_IDENT_RE,\n      returnEnd: false\n    }\n  };\n\n  // Find QML object attribute. An attribute is a QML identifier followed by :.\n  // Unfortunately it's hard to know where it ends, as it may contain scalars,\n  // objects, object definitions, or javascript. The true end is either when the parent\n  // ends or the next attribute is detected.\n  const QML_ATTRIBUTE = {\n    begin: QML_IDENT_RE + '\\\\s*:',\n    returnBegin: true,\n    contains: [\n      {\n        className: 'attribute',\n        begin: QML_IDENT_RE,\n        end: '\\\\s*:',\n        excludeEnd: true,\n        relevance: 0\n      }\n    ],\n    relevance: 0\n  };\n\n  // Find QML object. A QML object is a QML identifier followed by { and ends at the matching }.\n  // All we really care about is finding IDENT followed by { and just mark up the IDENT and ignore the {.\n  const QML_OBJECT = {\n    begin: regex.concat(QML_IDENT_RE, /\\s*\\{/),\n    end: /\\{/,\n    returnBegin: true,\n    relevance: 0,\n    contains: [ hljs.inherit(hljs.TITLE_MODE, { begin: QML_IDENT_RE }) ]\n  };\n\n  return {\n    name: 'QML',\n    aliases: [ 'qt' ],\n    case_insensitive: false,\n    keywords: KEYWORDS,\n    contains: [\n      {\n        className: 'meta',\n        begin: /^\\s*['\"]use (strict|asm)['\"]/\n      },\n      hljs.APOS_STRING_MODE,\n      hljs.QUOTE_STRING_MODE,\n      { // template string\n        className: 'string',\n        begin: '`',\n        end: '`',\n        contains: [\n          hljs.BACKSLASH_ESCAPE,\n          {\n            className: 'subst',\n            begin: '\\\\$\\\\{',\n            end: '\\\\}'\n          }\n        ]\n      },\n      hljs.C_LINE_COMMENT_MODE,\n      hljs.C_BLOCK_COMMENT_MODE,\n      {\n        className: 'number',\n        variants: [\n          { begin: '\\\\b(0[bB][01]+)' },\n          { begin: '\\\\b(0[oO][0-7]+)' },\n          { begin: hljs.C_NUMBER_RE }\n        ],\n        relevance: 0\n      },\n      { // \"value\" container\n        begin: '(' + hljs.RE_STARTERS_RE + '|\\\\b(case|return|throw)\\\\b)\\\\s*',\n        keywords: 'return throw case',\n        contains: [\n          hljs.C_LINE_COMMENT_MODE,\n          hljs.C_BLOCK_COMMENT_MODE,\n          hljs.REGEXP_MODE,\n          { // E4X / JSX\n            begin: /</,\n            end: />\\s*[);\\]]/,\n            relevance: 0,\n            subLanguage: 'xml'\n          }\n        ],\n        relevance: 0\n      },\n      SIGNAL,\n      PROPERTY,\n      {\n        className: 'function',\n        beginKeywords: 'function',\n        end: /\\{/,\n        excludeEnd: true,\n        contains: [\n          hljs.inherit(hljs.TITLE_MODE, { begin: /[A-Za-z$_][0-9A-Za-z$_]*/ }),\n          {\n            className: 'params',\n            begin: /\\(/,\n            end: /\\)/,\n            excludeBegin: true,\n            excludeEnd: true,\n            contains: [\n              hljs.C_LINE_COMMENT_MODE,\n              hljs.C_BLOCK_COMMENT_MODE\n            ]\n          }\n        ],\n        illegal: /\\[|%/\n      },\n      {\n        // hack: prevents detection of keywords after dots\n        begin: '\\\\.' + hljs.IDENT_RE,\n        relevance: 0\n      },\n      ID_ID,\n      QML_ATTRIBUTE,\n      QML_OBJECT\n    ],\n    illegal: /#/\n  };\n}\n\nmodule.exports = qml;\n","/*\nLanguage: R\nDescription: R is a free software environment for statistical computing and graphics.\nAuthor: Joe Cheng <joe@rstudio.org>\nContributors: Konrad Rudolph <konrad.rudolph@gmail.com>\nWebsite: https://www.r-project.org\nCategory: common,scientific\n*/\n\n/** @type LanguageFn */\nfunction r(hljs) {\n  const regex = hljs.regex;\n  // Identifiers in R cannot start with `_`, but they can start with `.` if it\n  // is not immediately followed by a digit.\n  // R also supports quoted identifiers, which are near-arbitrary sequences\n  // delimited by backticks (`…`), which may contain escape sequences. These are\n  // handled in a separate mode. See `test/markup/r/names.txt` for examples.\n  // FIXME: Support Unicode identifiers.\n  const IDENT_RE = /(?:(?:[a-zA-Z]|\\.[._a-zA-Z])[._a-zA-Z0-9]*)|\\.(?!\\d)/;\n  const NUMBER_TYPES_RE = regex.either(\n    // Special case: only hexadecimal binary powers can contain fractions\n    /0[xX][0-9a-fA-F]+\\.[0-9a-fA-F]*[pP][+-]?\\d+i?/,\n    // Hexadecimal numbers without fraction and optional binary power\n    /0[xX][0-9a-fA-F]+(?:[pP][+-]?\\d+)?[Li]?/,\n    // Decimal numbers\n    /(?:\\d+(?:\\.\\d*)?|\\.\\d+)(?:[eE][+-]?\\d+)?[Li]?/\n  );\n  const OPERATORS_RE = /[=!<>:]=|\\|\\||&&|:::?|<-|<<-|->>|->|\\|>|[-+*\\/?!$&|:<=>@^~]|\\*\\*/;\n  const PUNCTUATION_RE = regex.either(\n    /[()]/,\n    /[{}]/,\n    /\\[\\[/,\n    /[[\\]]/,\n    /\\\\/,\n    /,/\n  );\n\n  return {\n    name: 'R',\n\n    keywords: {\n      $pattern: IDENT_RE,\n      keyword:\n        'function if in break next repeat else for while',\n      literal:\n        'NULL NA TRUE FALSE Inf NaN NA_integer_|10 NA_real_|10 '\n        + 'NA_character_|10 NA_complex_|10',\n      built_in:\n        // Builtin constants\n        'LETTERS letters month.abb month.name pi T F '\n        // Primitive functions\n        // These are all the functions in `base` that are implemented as a\n        // `.Primitive`, minus those functions that are also keywords.\n        + 'abs acos acosh all any anyNA Arg as.call as.character '\n        + 'as.complex as.double as.environment as.integer as.logical '\n        + 'as.null.default as.numeric as.raw asin asinh atan atanh attr '\n        + 'attributes baseenv browser c call ceiling class Conj cos cosh '\n        + 'cospi cummax cummin cumprod cumsum digamma dim dimnames '\n        + 'emptyenv exp expression floor forceAndCall gamma gc.time '\n        + 'globalenv Im interactive invisible is.array is.atomic is.call '\n        + 'is.character is.complex is.double is.environment is.expression '\n        + 'is.finite is.function is.infinite is.integer is.language '\n        + 'is.list is.logical is.matrix is.na is.name is.nan is.null '\n        + 'is.numeric is.object is.pairlist is.raw is.recursive is.single '\n        + 'is.symbol lazyLoadDBfetch length lgamma list log max min '\n        + 'missing Mod names nargs nzchar oldClass on.exit pos.to.env '\n        + 'proc.time prod quote range Re rep retracemem return round '\n        + 'seq_along seq_len seq.int sign signif sin sinh sinpi sqrt '\n        + 'standardGeneric substitute sum switch tan tanh tanpi tracemem '\n        + 'trigamma trunc unclass untracemem UseMethod xtfrm',\n    },\n\n    contains: [\n      // Roxygen comments\n      hljs.COMMENT(\n        /#'/,\n        /$/,\n        { contains: [\n          {\n            // Handle `@examples` separately to cause all subsequent code\n            // until the next `@`-tag on its own line to be kept as-is,\n            // preventing highlighting. This code is example R code, so nested\n            // doctags shouldn’t be treated as such. See\n            // `test/markup/r/roxygen.txt` for an example.\n            scope: 'doctag',\n            match: /@examples/,\n            starts: {\n              end: regex.lookahead(regex.either(\n                // end if another doc comment\n                /\\n^#'\\s*(?=@[a-zA-Z]+)/,\n                // or a line with no comment\n                /\\n^(?!#')/\n              )),\n              endsParent: true\n            }\n          },\n          {\n            // Handle `@param` to highlight the parameter name following\n            // after.\n            scope: 'doctag',\n            begin: '@param',\n            end: /$/,\n            contains: [\n              {\n                scope: 'variable',\n                variants: [\n                  { match: IDENT_RE },\n                  { match: /`(?:\\\\.|[^`\\\\])+`/ }\n                ],\n                endsParent: true\n              }\n            ]\n          },\n          {\n            scope: 'doctag',\n            match: /@[a-zA-Z]+/\n          },\n          {\n            scope: 'keyword',\n            match: /\\\\[a-zA-Z]+/\n          }\n        ] }\n      ),\n\n      hljs.HASH_COMMENT_MODE,\n\n      {\n        scope: 'string',\n        contains: [ hljs.BACKSLASH_ESCAPE ],\n        variants: [\n          hljs.END_SAME_AS_BEGIN({\n            begin: /[rR]\"(-*)\\(/,\n            end: /\\)(-*)\"/\n          }),\n          hljs.END_SAME_AS_BEGIN({\n            begin: /[rR]\"(-*)\\{/,\n            end: /\\}(-*)\"/\n          }),\n          hljs.END_SAME_AS_BEGIN({\n            begin: /[rR]\"(-*)\\[/,\n            end: /\\](-*)\"/\n          }),\n          hljs.END_SAME_AS_BEGIN({\n            begin: /[rR]'(-*)\\(/,\n            end: /\\)(-*)'/\n          }),\n          hljs.END_SAME_AS_BEGIN({\n            begin: /[rR]'(-*)\\{/,\n            end: /\\}(-*)'/\n          }),\n          hljs.END_SAME_AS_BEGIN({\n            begin: /[rR]'(-*)\\[/,\n            end: /\\](-*)'/\n          }),\n          {\n            begin: '\"',\n            end: '\"',\n            relevance: 0\n          },\n          {\n            begin: \"'\",\n            end: \"'\",\n            relevance: 0\n          }\n        ],\n      },\n\n      // Matching numbers immediately following punctuation and operators is\n      // tricky since we need to look at the character ahead of a number to\n      // ensure the number is not part of an identifier, and we cannot use\n      // negative look-behind assertions. So instead we explicitly handle all\n      // possible combinations of (operator|punctuation), number.\n      // TODO: replace with negative look-behind when available\n      // { begin: /(?<![a-zA-Z0-9._])0[xX][0-9a-fA-F]+\\.[0-9a-fA-F]*[pP][+-]?\\d+i?/ },\n      // { begin: /(?<![a-zA-Z0-9._])0[xX][0-9a-fA-F]+([pP][+-]?\\d+)?[Li]?/ },\n      // { begin: /(?<![a-zA-Z0-9._])(\\d+(\\.\\d*)?|\\.\\d+)([eE][+-]?\\d+)?[Li]?/ }\n      {\n        relevance: 0,\n        variants: [\n          {\n            scope: {\n              1: 'operator',\n              2: 'number'\n            },\n            match: [\n              OPERATORS_RE,\n              NUMBER_TYPES_RE\n            ]\n          },\n          {\n            scope: {\n              1: 'operator',\n              2: 'number'\n            },\n            match: [\n              /%[^%]*%/,\n              NUMBER_TYPES_RE\n            ]\n          },\n          {\n            scope: {\n              1: 'punctuation',\n              2: 'number'\n            },\n            match: [\n              PUNCTUATION_RE,\n              NUMBER_TYPES_RE\n            ]\n          },\n          {\n            scope: { 2: 'number' },\n            match: [\n              /[^a-zA-Z0-9._]|^/, // not part of an identifier, or start of document\n              NUMBER_TYPES_RE\n            ]\n          }\n        ]\n      },\n\n      // Operators/punctuation when they're not directly followed by numbers\n      {\n        // Relevance boost for the most common assignment form.\n        scope: { 3: 'operator' },\n        match: [\n          IDENT_RE,\n          /\\s+/,\n          /<-/,\n          /\\s+/\n        ]\n      },\n\n      {\n        scope: 'operator',\n        relevance: 0,\n        variants: [\n          { match: OPERATORS_RE },\n          { match: /%[^%]*%/ }\n        ]\n      },\n\n      {\n        scope: 'punctuation',\n        relevance: 0,\n        match: PUNCTUATION_RE\n      },\n\n      {\n        // Escaped identifier\n        begin: '`',\n        end: '`',\n        contains: [ { begin: /\\\\./ } ]\n      }\n    ]\n  };\n}\n\nmodule.exports = r;\n","/*\nLanguage: ReasonML\nDescription: Reason lets you write simple, fast and quality type safe code while leveraging both the JavaScript & OCaml ecosystems.\nWebsite: https://reasonml.github.io\nAuthor: Gidi Meir Morris <oss@gidi.io>\nCategory: functional\n*/\nfunction reasonml(hljs) {\n  const BUILT_IN_TYPES = [\n    \"array\",\n    \"bool\",\n    \"bytes\",\n    \"char\",\n    \"exn|5\",\n    \"float\",\n    \"int\",\n    \"int32\",\n    \"int64\",\n    \"list\",\n    \"lazy_t|5\",\n    \"nativeint|5\",\n    \"ref\",\n    \"string\",\n    \"unit\",\n  ];\n  return {\n    name: 'ReasonML',\n    aliases: [ 're' ],\n    keywords: {\n      $pattern:  /[a-z_]\\w*!?/,\n      keyword: [\n        \"and\",\n        \"as\",\n        \"asr\",\n        \"assert\",\n        \"begin\",\n        \"class\",\n        \"constraint\",\n        \"do\",\n        \"done\",\n        \"downto\",\n        \"else\",\n        \"end\",\n        \"esfun\",\n        \"exception\",\n        \"external\",\n        \"for\",\n        \"fun\",\n        \"function\",\n        \"functor\",\n        \"if\",\n        \"in\",\n        \"include\",\n        \"inherit\",\n        \"initializer\",\n        \"land\",\n        \"lazy\",\n        \"let\",\n        \"lor\",\n        \"lsl\",\n        \"lsr\",\n        \"lxor\",\n        \"mod\",\n        \"module\",\n        \"mutable\",\n        \"new\",\n        \"nonrec\",\n        \"object\",\n        \"of\",\n        \"open\",\n        \"or\",\n        \"pri\",\n        \"pub\",\n        \"rec\",\n        \"sig\",\n        \"struct\",\n        \"switch\",\n        \"then\",\n        \"to\",\n        \"try\",\n        \"type\",\n        \"val\",\n        \"virtual\",\n        \"when\",\n        \"while\",\n        \"with\",\n      ],\n      built_in: BUILT_IN_TYPES,\n      literal: [\"true\", \"false\"],\n    },\n    illegal: /(:-|:=|\\$\\{|\\+=)/,\n    contains: [\n      {\n        scope: 'literal',\n        match: /\\[(\\|\\|)?\\]|\\(\\)/,\n        relevance: 0\n      },\n      hljs.C_LINE_COMMENT_MODE,\n      hljs.COMMENT(/\\/\\*/, /\\*\\//, { illegal: /^(#,\\/\\/)/ }),\n      { /* type variable */\n        scope: 'symbol',\n        match: /\\'[A-Za-z_](?!\\')[\\w\\']*/\n        /* the grammar is ambiguous on how 'a'b should be interpreted but not the compiler */\n      },\n      { /* polymorphic variant */\n        scope: 'type',\n        match: /`[A-Z][\\w\\']*/\n      },\n      { /* module or constructor */\n        scope: 'type',\n        match: /\\b[A-Z][\\w\\']*/,\n        relevance: 0\n      },\n      { /* don't color identifiers, but safely catch all identifiers with ' */\n      match: /[a-z_]\\w*\\'[\\w\\']*/,\n        relevance: 0\n      },\n      {\n        scope: 'operator',\n        match: /\\s+(\\|\\||\\+[\\+\\.]?|\\*[\\*\\/\\.]?|\\/[\\.]?|\\.\\.\\.|\\|>|&&|===?)\\s+/,\n        relevance: 0\n      },      \n      hljs.inherit(hljs.APOS_STRING_MODE, {\n        scope: 'string',\n        relevance: 0\n      }),\n      hljs.inherit(hljs.QUOTE_STRING_MODE, { illegal: null }),\n      {\n        scope: 'number',\n        variants: [\n          { match: /\\b0[xX][a-fA-F0-9_]+[Lln]?/ },\n          { match: /\\b0[oO][0-7_]+[Lln]?/ },\n          { match: /\\b0[bB][01_]+[Lln]?/ },\n          { match: /\\b[0-9][0-9_]*([Lln]|(\\.[0-9_]*)?([eE][-+]?[0-9_]+)?)/ },\n        ],\n        relevance: 0\n      },\n    ]\n  };\n}\n\nmodule.exports = reasonml;\n","/*\nLanguage: RenderMan RIB\nAuthor: Konstantin Evdokimenko <qewerty@gmail.com>\nContributors: Shuen-Huei Guan <drake.guan@gmail.com>\nWebsite: https://renderman.pixar.com/resources/RenderMan_20/ribBinding.html\nCategory: graphics\n*/\n\nfunction rib(hljs) {\n  return {\n    name: 'RenderMan RIB',\n    keywords:\n      'ArchiveRecord AreaLightSource Atmosphere Attribute AttributeBegin AttributeEnd Basis '\n      + 'Begin Blobby Bound Clipping ClippingPlane Color ColorSamples ConcatTransform Cone '\n      + 'CoordinateSystem CoordSysTransform CropWindow Curves Cylinder DepthOfField Detail '\n      + 'DetailRange Disk Displacement Display End ErrorHandler Exposure Exterior Format '\n      + 'FrameAspectRatio FrameBegin FrameEnd GeneralPolygon GeometricApproximation Geometry '\n      + 'Hider Hyperboloid Identity Illuminate Imager Interior LightSource '\n      + 'MakeCubeFaceEnvironment MakeLatLongEnvironment MakeShadow MakeTexture Matte '\n      + 'MotionBegin MotionEnd NuPatch ObjectBegin ObjectEnd ObjectInstance Opacity Option '\n      + 'Orientation Paraboloid Patch PatchMesh Perspective PixelFilter PixelSamples '\n      + 'PixelVariance Points PointsGeneralPolygons PointsPolygons Polygon Procedural Projection '\n      + 'Quantize ReadArchive RelativeDetail ReverseOrientation Rotate Scale ScreenWindow '\n      + 'ShadingInterpolation ShadingRate Shutter Sides Skew SolidBegin SolidEnd Sphere '\n      + 'SubdivisionMesh Surface TextureCoordinates Torus Transform TransformBegin TransformEnd '\n      + 'TransformPoints Translate TrimCurve WorldBegin WorldEnd',\n    illegal: '</',\n    contains: [\n      hljs.HASH_COMMENT_MODE,\n      hljs.C_NUMBER_MODE,\n      hljs.APOS_STRING_MODE,\n      hljs.QUOTE_STRING_MODE\n    ]\n  };\n}\n\nmodule.exports = rib;\n","/*\nLanguage: Roboconf\nAuthor: Vincent Zurczak <vzurczak@linagora.com>\nDescription: Syntax highlighting for Roboconf's DSL\nWebsite: http://roboconf.net\nCategory: config\n*/\n\nfunction roboconf(hljs) {\n  const IDENTIFIER = '[a-zA-Z-_][^\\\\n{]+\\\\{';\n\n  const PROPERTY = {\n    className: 'attribute',\n    begin: /[a-zA-Z-_]+/,\n    end: /\\s*:/,\n    excludeEnd: true,\n    starts: {\n      end: ';',\n      relevance: 0,\n      contains: [\n        {\n          className: 'variable',\n          begin: /\\.[a-zA-Z-_]+/\n        },\n        {\n          className: 'keyword',\n          begin: /\\(optional\\)/\n        }\n      ]\n    }\n  };\n\n  return {\n    name: 'Roboconf',\n    aliases: [\n      'graph',\n      'instances'\n    ],\n    case_insensitive: true,\n    keywords: 'import',\n    contains: [\n      // Facet sections\n      {\n        begin: '^facet ' + IDENTIFIER,\n        end: /\\}/,\n        keywords: 'facet',\n        contains: [\n          PROPERTY,\n          hljs.HASH_COMMENT_MODE\n        ]\n      },\n\n      // Instance sections\n      {\n        begin: '^\\\\s*instance of ' + IDENTIFIER,\n        end: /\\}/,\n        keywords: 'name count channels instance-data instance-state instance of',\n        illegal: /\\S/,\n        contains: [\n          'self',\n          PROPERTY,\n          hljs.HASH_COMMENT_MODE\n        ]\n      },\n\n      // Component sections\n      {\n        begin: '^' + IDENTIFIER,\n        end: /\\}/,\n        contains: [\n          PROPERTY,\n          hljs.HASH_COMMENT_MODE\n        ]\n      },\n\n      // Comments\n      hljs.HASH_COMMENT_MODE\n    ]\n  };\n}\n\nmodule.exports = roboconf;\n","/*\nLanguage: MikroTik RouterOS script\nAuthor: Ivan Dementev <ivan_div@mail.ru>\nDescription: Scripting host provides a way to automate some router maintenance tasks by means of executing user-defined scripts bounded to some event occurrence\nWebsite: https://wiki.mikrotik.com/wiki/Manual:Scripting\nCategory: scripting\n*/\n\n// Colors from RouterOS terminal:\n//   green        - #0E9A00\n//   teal         - #0C9A9A\n//   purple       - #99069A\n//   light-brown  - #9A9900\n\nfunction routeros(hljs) {\n  const STATEMENTS = 'foreach do while for if from to step else on-error and or not in';\n\n  // Global commands: Every global command should start with \":\" token, otherwise it will be treated as variable.\n  const GLOBAL_COMMANDS = 'global local beep delay put len typeof pick log time set find environment terminal error execute parse resolve toarray tobool toid toip toip6 tonum tostr totime';\n\n  // Common commands: Following commands available from most sub-menus:\n  const COMMON_COMMANDS = 'add remove enable disable set get print export edit find run debug error info warning';\n\n  const LITERALS = 'true false yes no nothing nil null';\n\n  const OBJECTS = 'traffic-flow traffic-generator firewall scheduler aaa accounting address-list address align area bandwidth-server bfd bgp bridge client clock community config connection console customer default dhcp-client dhcp-server discovery dns e-mail ethernet filter firmware gps graphing group hardware health hotspot identity igmp-proxy incoming instance interface ip ipsec ipv6 irq l2tp-server lcd ldp logging mac-server mac-winbox mangle manual mirror mme mpls nat nd neighbor network note ntp ospf ospf-v3 ovpn-server page peer pim ping policy pool port ppp pppoe-client pptp-server prefix profile proposal proxy queue radius resource rip ripng route routing screen script security-profiles server service service-port settings shares smb sms sniffer snmp snooper socks sstp-server system tool tracking type upgrade upnp user-manager users user vlan secret vrrp watchdog web-access wireless pptp pppoe lan wan layer7-protocol lease simple raw';\n\n  const VAR = {\n    className: 'variable',\n    variants: [\n      { begin: /\\$[\\w\\d#@][\\w\\d_]*/ },\n      { begin: /\\$\\{(.*?)\\}/ }\n    ]\n  };\n\n  const QUOTE_STRING = {\n    className: 'string',\n    begin: /\"/,\n    end: /\"/,\n    contains: [\n      hljs.BACKSLASH_ESCAPE,\n      VAR,\n      {\n        className: 'variable',\n        begin: /\\$\\(/,\n        end: /\\)/,\n        contains: [ hljs.BACKSLASH_ESCAPE ]\n      }\n    ]\n  };\n\n  const APOS_STRING = {\n    className: 'string',\n    begin: /'/,\n    end: /'/\n  };\n\n  return {\n    name: 'MikroTik RouterOS script',\n    aliases: [ 'mikrotik' ],\n    case_insensitive: true,\n    keywords: {\n      $pattern: /:?[\\w-]+/,\n      literal: LITERALS,\n      keyword: STATEMENTS + ' :' + STATEMENTS.split(' ').join(' :') + ' :' + GLOBAL_COMMANDS.split(' ').join(' :')\n    },\n    contains: [\n      { // illegal syntax\n        variants: [\n          { // -- comment\n            begin: /\\/\\*/,\n            end: /\\*\\//\n          },\n          { // Stan comment\n            begin: /\\/\\//,\n            end: /$/\n          },\n          { // HTML tags\n            begin: /<\\//,\n            end: />/\n          }\n        ],\n        illegal: /./\n      },\n      hljs.COMMENT('^#', '$'),\n      QUOTE_STRING,\n      APOS_STRING,\n      VAR,\n      // attribute=value\n      {\n        // > is to avoid matches with => in other grammars\n        begin: /[\\w-]+=([^\\s{}[\\]()>]+)/,\n        relevance: 0,\n        returnBegin: true,\n        contains: [\n          {\n            className: 'attribute',\n            begin: /[^=]+/\n          },\n          {\n            begin: /=/,\n            endsWithParent: true,\n            relevance: 0,\n            contains: [\n              QUOTE_STRING,\n              APOS_STRING,\n              VAR,\n              {\n                className: 'literal',\n                begin: '\\\\b(' + LITERALS.split(' ').join('|') + ')\\\\b'\n              },\n              {\n                // Do not format unclassified values. Needed to exclude highlighting of values as built_in.\n                begin: /(\"[^\"]*\"|[^\\s{}[\\]]+)/ }\n              /*\n              {\n                // IPv4 addresses and subnets\n                className: 'number',\n                variants: [\n                  {begin: IPADDR_wBITMASK+'(,'+IPADDR_wBITMASK+')*'}, //192.168.0.0/24,1.2.3.0/24\n                  {begin: IPADDR+'-'+IPADDR},       // 192.168.0.1-192.168.0.3\n                  {begin: IPADDR+'(,'+IPADDR+')*'}, // 192.168.0.1,192.168.0.34,192.168.24.1,192.168.0.1\n                ]\n              },\n              {\n                // MAC addresses and DHCP Client IDs\n                className: 'number',\n                begin: /\\b(1:)?([0-9A-Fa-f]{1,2}[:-]){5}([0-9A-Fa-f]){1,2}\\b/,\n              },\n              */\n            ]\n          }\n        ]\n      },\n      {\n        // HEX values\n        className: 'number',\n        begin: /\\*[0-9a-fA-F]+/\n      },\n      {\n        begin: '\\\\b(' + COMMON_COMMANDS.split(' ').join('|') + ')([\\\\s[(\\\\]|])',\n        returnBegin: true,\n        contains: [\n          {\n            className: 'built_in', // 'function',\n            begin: /\\w+/\n          }\n        ]\n      },\n      {\n        className: 'built_in',\n        variants: [\n          { begin: '(\\\\.\\\\./|/|\\\\s)((' + OBJECTS.split(' ').join('|') + ');?\\\\s)+' },\n          {\n            begin: /\\.\\./,\n            relevance: 0\n          }\n        ]\n      }\n    ]\n  };\n}\n\nmodule.exports = routeros;\n","/*\nLanguage: RenderMan RSL\nAuthor: Konstantin Evdokimenko <qewerty@gmail.com>\nContributors: Shuen-Huei Guan <drake.guan@gmail.com>\nWebsite: https://renderman.pixar.com/resources/RenderMan_20/shadingLanguage.html\nCategory: graphics\n*/\n\nfunction rsl(hljs) {\n  const BUILT_INS = [\n    \"abs\",\n    \"acos\",\n    \"ambient\",\n    \"area\",\n    \"asin\",\n    \"atan\",\n    \"atmosphere\",\n    \"attribute\",\n    \"calculatenormal\",\n    \"ceil\",\n    \"cellnoise\",\n    \"clamp\",\n    \"comp\",\n    \"concat\",\n    \"cos\",\n    \"degrees\",\n    \"depth\",\n    \"Deriv\",\n    \"diffuse\",\n    \"distance\",\n    \"Du\",\n    \"Dv\",\n    \"environment\",\n    \"exp\",\n    \"faceforward\",\n    \"filterstep\",\n    \"floor\",\n    \"format\",\n    \"fresnel\",\n    \"incident\",\n    \"length\",\n    \"lightsource\",\n    \"log\",\n    \"match\",\n    \"max\",\n    \"min\",\n    \"mod\",\n    \"noise\",\n    \"normalize\",\n    \"ntransform\",\n    \"opposite\",\n    \"option\",\n    \"phong\",\n    \"pnoise\",\n    \"pow\",\n    \"printf\",\n    \"ptlined\",\n    \"radians\",\n    \"random\",\n    \"reflect\",\n    \"refract\",\n    \"renderinfo\",\n    \"round\",\n    \"setcomp\",\n    \"setxcomp\",\n    \"setycomp\",\n    \"setzcomp\",\n    \"shadow\",\n    \"sign\",\n    \"sin\",\n    \"smoothstep\",\n    \"specular\",\n    \"specularbrdf\",\n    \"spline\",\n    \"sqrt\",\n    \"step\",\n    \"tan\",\n    \"texture\",\n    \"textureinfo\",\n    \"trace\",\n    \"transform\",\n    \"vtransform\",\n    \"xcomp\",\n    \"ycomp\",\n    \"zcomp\"\n  ];\n\n  const TYPES = [\n    \"matrix\",\n    \"float\",\n    \"color\",\n    \"point\",\n    \"normal\",\n    \"vector\"\n  ];\n\n  const KEYWORDS = [\n    \"while\",\n    \"for\",\n    \"if\",\n    \"do\",\n    \"return\",\n    \"else\",\n    \"break\",\n    \"extern\",\n    \"continue\"\n  ];\n\n  const CLASS_DEFINITION = {\n    match: [\n      /(surface|displacement|light|volume|imager)/,\n      /\\s+/,\n      hljs.IDENT_RE,\n    ],\n    scope: {\n      1: \"keyword\",\n      3: \"title.class\",\n    }\n  };\n\n  return {\n    name: 'RenderMan RSL',\n    keywords: {\n      keyword: KEYWORDS,\n      built_in: BUILT_INS,\n      type: TYPES\n    },\n    illegal: '</',\n    contains: [\n      hljs.C_LINE_COMMENT_MODE,\n      hljs.C_BLOCK_COMMENT_MODE,\n      hljs.QUOTE_STRING_MODE,\n      hljs.APOS_STRING_MODE,\n      hljs.C_NUMBER_MODE,\n      {\n        className: 'meta',\n        begin: '#',\n        end: '$'\n      },\n      CLASS_DEFINITION,\n      {\n        beginKeywords: 'illuminate illuminance gather',\n        end: '\\\\('\n      }\n    ]\n  };\n}\n\nmodule.exports = rsl;\n","/*\nLanguage: Oracle Rules Language\nAuthor: Jason Jacobson <jason.a.jacobson@gmail.com>\nDescription: The Oracle Utilities Rules Language is used to program the Oracle Utilities Applications acquired from LODESTAR Corporation.  The products include Billing Component, LPSS, Pricing Component etc. through version 1.6.1.\nWebsite: https://docs.oracle.com/cd/E17904_01/dev.1111/e10227/rlref.htm\nCategory: enterprise\n*/\n\nfunction ruleslanguage(hljs) {\n  return {\n    name: 'Oracle Rules Language',\n    keywords: {\n      keyword:\n        'BILL_PERIOD BILL_START BILL_STOP RS_EFFECTIVE_START RS_EFFECTIVE_STOP RS_JURIS_CODE RS_OPCO_CODE '\n        + 'INTDADDATTRIBUTE|5 INTDADDVMSG|5 INTDBLOCKOP|5 INTDBLOCKOPNA|5 INTDCLOSE|5 INTDCOUNT|5 '\n        + 'INTDCOUNTSTATUSCODE|5 INTDCREATEMASK|5 INTDCREATEDAYMASK|5 INTDCREATEFACTORMASK|5 '\n        + 'INTDCREATEHANDLE|5 INTDCREATEOVERRIDEDAYMASK|5 INTDCREATEOVERRIDEMASK|5 '\n        + 'INTDCREATESTATUSCODEMASK|5 INTDCREATETOUPERIOD|5 INTDDELETE|5 INTDDIPTEST|5 INTDEXPORT|5 '\n        + 'INTDGETERRORCODE|5 INTDGETERRORMESSAGE|5 INTDISEQUAL|5 INTDJOIN|5 INTDLOAD|5 INTDLOADACTUALCUT|5 '\n        + 'INTDLOADDATES|5 INTDLOADHIST|5 INTDLOADLIST|5 INTDLOADLISTDATES|5 INTDLOADLISTENERGY|5 '\n        + 'INTDLOADLISTHIST|5 INTDLOADRELATEDCHANNEL|5 INTDLOADSP|5 INTDLOADSTAGING|5 INTDLOADUOM|5 '\n        + 'INTDLOADUOMDATES|5 INTDLOADUOMHIST|5 INTDLOADVERSION|5 INTDOPEN|5 INTDREADFIRST|5 INTDREADNEXT|5 '\n        + 'INTDRECCOUNT|5 INTDRELEASE|5 INTDREPLACE|5 INTDROLLAVG|5 INTDROLLPEAK|5 INTDSCALAROP|5 INTDSCALE|5 '\n        + 'INTDSETATTRIBUTE|5 INTDSETDSTPARTICIPANT|5 INTDSETSTRING|5 INTDSETVALUE|5 INTDSETVALUESTATUS|5 '\n        + 'INTDSHIFTSTARTTIME|5 INTDSMOOTH|5 INTDSORT|5 INTDSPIKETEST|5 INTDSUBSET|5 INTDTOU|5 '\n        + 'INTDTOURELEASE|5 INTDTOUVALUE|5 INTDUPDATESTATS|5 INTDVALUE|5 STDEV INTDDELETEEX|5 '\n        + 'INTDLOADEXACTUAL|5 INTDLOADEXCUT|5 INTDLOADEXDATES|5 INTDLOADEX|5 INTDLOADEXRELATEDCHANNEL|5 '\n        + 'INTDSAVEEX|5 MVLOAD|5 MVLOADACCT|5 MVLOADACCTDATES|5 MVLOADACCTHIST|5 MVLOADDATES|5 MVLOADHIST|5 '\n        + 'MVLOADLIST|5 MVLOADLISTDATES|5 MVLOADLISTHIST|5 IF FOR NEXT DONE SELECT END CALL ABORT CLEAR CHANNEL FACTOR LIST NUMBER '\n        + 'OVERRIDE SET WEEK DISTRIBUTIONNODE ELSE WHEN THEN OTHERWISE IENUM CSV INCLUDE LEAVE RIDER SAVE DELETE '\n        + 'NOVALUE SECTION WARN SAVE_UPDATE DETERMINANT LABEL REPORT REVENUE EACH '\n        + 'IN FROM TOTAL CHARGE BLOCK AND OR CSV_FILE RATE_CODE AUXILIARY_DEMAND '\n        + 'UIDACCOUNT RS BILL_PERIOD_SELECT HOURS_PER_MONTH INTD_ERROR_STOP SEASON_SCHEDULE_NAME '\n        + 'ACCOUNTFACTOR ARRAYUPPERBOUND CALLSTOREDPROC GETADOCONNECTION GETCONNECT GETDATASOURCE '\n        + 'GETQUALIFIER GETUSERID HASVALUE LISTCOUNT LISTOP LISTUPDATE LISTVALUE PRORATEFACTOR RSPRORATE '\n        + 'SETBINPATH SETDBMONITOR WQ_OPEN BILLINGHOURS DATE DATEFROMFLOAT DATETIMEFROMSTRING '\n        + 'DATETIMETOSTRING DATETOFLOAT DAY DAYDIFF DAYNAME DBDATETIME HOUR MINUTE MONTH MONTHDIFF '\n        + 'MONTHHOURS MONTHNAME ROUNDDATE SAMEWEEKDAYLASTYEAR SECOND WEEKDAY WEEKDIFF YEAR YEARDAY '\n        + 'YEARSTR COMPSUM HISTCOUNT HISTMAX HISTMIN HISTMINNZ HISTVALUE MAXNRANGE MAXRANGE MINRANGE '\n        + 'COMPIKVA COMPKVA COMPKVARFROMKQKW COMPLF IDATTR FLAG LF2KW LF2KWH MAXKW POWERFACTOR '\n        + 'READING2USAGE AVGSEASON MAXSEASON MONTHLYMERGE SEASONVALUE SUMSEASON ACCTREADDATES '\n        + 'ACCTTABLELOAD CONFIGADD CONFIGGET CREATEOBJECT CREATEREPORT EMAILCLIENT EXPBLKMDMUSAGE '\n        + 'EXPMDMUSAGE EXPORT_USAGE FACTORINEFFECT GETUSERSPECIFIEDSTOP INEFFECT ISHOLIDAY RUNRATE '\n        + 'SAVE_PROFILE SETREPORTTITLE USEREXIT WATFORRUNRATE TO TABLE ACOS ASIN ATAN ATAN2 BITAND CEIL '\n        + 'COS COSECANT COSH COTANGENT DIVQUOT DIVREM EXP FABS FLOOR FMOD FREPM FREXPN LOG LOG10 MAX MAXN '\n        + 'MIN MINNZ MODF POW ROUND ROUND2VALUE ROUNDINT SECANT SIN SINH SQROOT TAN TANH FLOAT2STRING '\n        + 'FLOAT2STRINGNC INSTR LEFT LEN LTRIM MID RIGHT RTRIM STRING STRINGNC TOLOWER TOUPPER TRIM '\n        + 'NUMDAYS READ_DATE STAGING',\n      built_in:\n        'IDENTIFIER OPTIONS XML_ELEMENT XML_OP XML_ELEMENT_OF DOMDOCCREATE DOMDOCLOADFILE DOMDOCLOADXML '\n        + 'DOMDOCSAVEFILE DOMDOCGETROOT DOMDOCADDPI DOMNODEGETNAME DOMNODEGETTYPE DOMNODEGETVALUE DOMNODEGETCHILDCT '\n        + 'DOMNODEGETFIRSTCHILD DOMNODEGETSIBLING DOMNODECREATECHILDELEMENT DOMNODESETATTRIBUTE '\n        + 'DOMNODEGETCHILDELEMENTCT DOMNODEGETFIRSTCHILDELEMENT DOMNODEGETSIBLINGELEMENT DOMNODEGETATTRIBUTECT '\n        + 'DOMNODEGETATTRIBUTEI DOMNODEGETATTRIBUTEBYNAME DOMNODEGETBYNAME'\n    },\n    contains: [\n      hljs.C_LINE_COMMENT_MODE,\n      hljs.C_BLOCK_COMMENT_MODE,\n      hljs.APOS_STRING_MODE,\n      hljs.QUOTE_STRING_MODE,\n      hljs.C_NUMBER_MODE,\n      {\n        className: 'literal',\n        variants: [\n          { // looks like #-comment\n            begin: '#\\\\s+',\n            relevance: 0\n          },\n          { begin: '#[a-zA-Z .]+' }\n        ]\n      }\n    ]\n  };\n}\n\nmodule.exports = ruleslanguage;\n","/*\nLanguage: Rust\nAuthor: Andrey Vlasovskikh <andrey.vlasovskikh@gmail.com>\nContributors: Roman Shmatov <romanshmatov@gmail.com>, Kasper Andersen <kma_untrusted@protonmail.com>\nWebsite: https://www.rust-lang.org\nCategory: common, system\n*/\n\n/** @type LanguageFn */\n\nfunction rust(hljs) {\n  const regex = hljs.regex;\n  // ============================================\n  // Added to support the r# keyword, which is a raw identifier in Rust.\n  const RAW_IDENTIFIER = /(r#)?/;\n  const UNDERSCORE_IDENT_RE = regex.concat(RAW_IDENTIFIER, hljs.UNDERSCORE_IDENT_RE);\n  const IDENT_RE = regex.concat(RAW_IDENTIFIER, hljs.IDENT_RE);\n  // ============================================\n  const FUNCTION_INVOKE = {\n    className: \"title.function.invoke\",\n    relevance: 0,\n    begin: regex.concat(\n      /\\b/,\n      /(?!let|for|while|if|else|match\\b)/,\n      IDENT_RE,\n      regex.lookahead(/\\s*\\(/))\n  };\n  const NUMBER_SUFFIX = '([ui](8|16|32|64|128|size)|f(32|64))\\?';\n  const KEYWORDS = [\n    \"abstract\",\n    \"as\",\n    \"async\",\n    \"await\",\n    \"become\",\n    \"box\",\n    \"break\",\n    \"const\",\n    \"continue\",\n    \"crate\",\n    \"do\",\n    \"dyn\",\n    \"else\",\n    \"enum\",\n    \"extern\",\n    \"false\",\n    \"final\",\n    \"fn\",\n    \"for\",\n    \"if\",\n    \"impl\",\n    \"in\",\n    \"let\",\n    \"loop\",\n    \"macro\",\n    \"match\",\n    \"mod\",\n    \"move\",\n    \"mut\",\n    \"override\",\n    \"priv\",\n    \"pub\",\n    \"ref\",\n    \"return\",\n    \"self\",\n    \"Self\",\n    \"static\",\n    \"struct\",\n    \"super\",\n    \"trait\",\n    \"true\",\n    \"try\",\n    \"type\",\n    \"typeof\",\n    \"union\",\n    \"unsafe\",\n    \"unsized\",\n    \"use\",\n    \"virtual\",\n    \"where\",\n    \"while\",\n    \"yield\"\n  ];\n  const LITERALS = [\n    \"true\",\n    \"false\",\n    \"Some\",\n    \"None\",\n    \"Ok\",\n    \"Err\"\n  ];\n  const BUILTINS = [\n    // functions\n    'drop ',\n    // traits\n    \"Copy\",\n    \"Send\",\n    \"Sized\",\n    \"Sync\",\n    \"Drop\",\n    \"Fn\",\n    \"FnMut\",\n    \"FnOnce\",\n    \"ToOwned\",\n    \"Clone\",\n    \"Debug\",\n    \"PartialEq\",\n    \"PartialOrd\",\n    \"Eq\",\n    \"Ord\",\n    \"AsRef\",\n    \"AsMut\",\n    \"Into\",\n    \"From\",\n    \"Default\",\n    \"Iterator\",\n    \"Extend\",\n    \"IntoIterator\",\n    \"DoubleEndedIterator\",\n    \"ExactSizeIterator\",\n    \"SliceConcatExt\",\n    \"ToString\",\n    // macros\n    \"assert!\",\n    \"assert_eq!\",\n    \"bitflags!\",\n    \"bytes!\",\n    \"cfg!\",\n    \"col!\",\n    \"concat!\",\n    \"concat_idents!\",\n    \"debug_assert!\",\n    \"debug_assert_eq!\",\n    \"env!\",\n    \"eprintln!\",\n    \"panic!\",\n    \"file!\",\n    \"format!\",\n    \"format_args!\",\n    \"include_bytes!\",\n    \"include_str!\",\n    \"line!\",\n    \"local_data_key!\",\n    \"module_path!\",\n    \"option_env!\",\n    \"print!\",\n    \"println!\",\n    \"select!\",\n    \"stringify!\",\n    \"try!\",\n    \"unimplemented!\",\n    \"unreachable!\",\n    \"vec!\",\n    \"write!\",\n    \"writeln!\",\n    \"macro_rules!\",\n    \"assert_ne!\",\n    \"debug_assert_ne!\"\n  ];\n  const TYPES = [\n    \"i8\",\n    \"i16\",\n    \"i32\",\n    \"i64\",\n    \"i128\",\n    \"isize\",\n    \"u8\",\n    \"u16\",\n    \"u32\",\n    \"u64\",\n    \"u128\",\n    \"usize\",\n    \"f32\",\n    \"f64\",\n    \"str\",\n    \"char\",\n    \"bool\",\n    \"Box\",\n    \"Option\",\n    \"Result\",\n    \"String\",\n    \"Vec\"\n  ];\n  return {\n    name: 'Rust',\n    aliases: [ 'rs' ],\n    keywords: {\n      $pattern: hljs.IDENT_RE + '!?',\n      type: TYPES,\n      keyword: KEYWORDS,\n      literal: LITERALS,\n      built_in: BUILTINS\n    },\n    illegal: '</',\n    contains: [\n      hljs.C_LINE_COMMENT_MODE,\n      hljs.COMMENT('/\\\\*', '\\\\*/', { contains: [ 'self' ] }),\n      hljs.inherit(hljs.QUOTE_STRING_MODE, {\n        begin: /b?\"/,\n        illegal: null\n      }),\n      {\n        className: 'symbol',\n        // negative lookahead to avoid matching `'`\n        begin: /'[a-zA-Z_][a-zA-Z0-9_]*(?!')/\n      },\n      {\n        scope: 'string',\n        variants: [\n          { begin: /b?r(#*)\"(.|\\n)*?\"\\1(?!#)/ },\n          {\n            begin: /b?'/,\n            end: /'/,\n            contains: [\n              {\n                scope: \"char.escape\",\n                match: /\\\\('|\\w|x\\w{2}|u\\w{4}|U\\w{8})/\n              }\n            ]\n          }\n        ]\n      },\n      {\n        className: 'number',\n        variants: [\n          { begin: '\\\\b0b([01_]+)' + NUMBER_SUFFIX },\n          { begin: '\\\\b0o([0-7_]+)' + NUMBER_SUFFIX },\n          { begin: '\\\\b0x([A-Fa-f0-9_]+)' + NUMBER_SUFFIX },\n          { begin: '\\\\b(\\\\d[\\\\d_]*(\\\\.[0-9_]+)?([eE][+-]?[0-9_]+)?)'\n                   + NUMBER_SUFFIX }\n        ],\n        relevance: 0\n      },\n      {\n        begin: [\n          /fn/,\n          /\\s+/,\n          UNDERSCORE_IDENT_RE\n        ],\n        className: {\n          1: \"keyword\",\n          3: \"title.function\"\n        }\n      },\n      {\n        className: 'meta',\n        begin: '#!?\\\\[',\n        end: '\\\\]',\n        contains: [\n          {\n            className: 'string',\n            begin: /\"/,\n            end: /\"/,\n            contains: [\n              hljs.BACKSLASH_ESCAPE\n            ]\n          }\n        ]\n      },\n      {\n        begin: [\n          /let/,\n          /\\s+/,\n          /(?:mut\\s+)?/,\n          UNDERSCORE_IDENT_RE\n        ],\n        className: {\n          1: \"keyword\",\n          3: \"keyword\",\n          4: \"variable\"\n        }\n      },\n      // must come before impl/for rule later\n      {\n        begin: [\n          /for/,\n          /\\s+/,\n          UNDERSCORE_IDENT_RE,\n          /\\s+/,\n          /in/\n        ],\n        className: {\n          1: \"keyword\",\n          3: \"variable\",\n          5: \"keyword\"\n        }\n      },\n      {\n        begin: [\n          /type/,\n          /\\s+/,\n          UNDERSCORE_IDENT_RE\n        ],\n        className: {\n          1: \"keyword\",\n          3: \"title.class\"\n        }\n      },\n      {\n        begin: [\n          /(?:trait|enum|struct|union|impl|for)/,\n          /\\s+/,\n          UNDERSCORE_IDENT_RE\n        ],\n        className: {\n          1: \"keyword\",\n          3: \"title.class\"\n        }\n      },\n      {\n        begin: hljs.IDENT_RE + '::',\n        keywords: {\n          keyword: \"Self\",\n          built_in: BUILTINS,\n          type: TYPES\n        }\n      },\n      {\n        className: \"punctuation\",\n        begin: '->'\n      },\n      FUNCTION_INVOKE\n    ]\n  };\n}\n\nmodule.exports = rust;\n","/*\nLanguage: SAS\nAuthor: Mauricio Caceres <mauricio.caceres.bravo@gmail.com>\nDescription: Syntax Highlighting for SAS\nCategory: scientific\n*/\n\n/** @type LanguageFn */\nfunction sas(hljs) {\n  const regex = hljs.regex;\n  // Data step and PROC SQL statements\n  const SAS_KEYWORDS = [\n    \"do\",\n    \"if\",\n    \"then\",\n    \"else\",\n    \"end\",\n    \"until\",\n    \"while\",\n    \"abort\",\n    \"array\",\n    \"attrib\",\n    \"by\",\n    \"call\",\n    \"cards\",\n    \"cards4\",\n    \"catname\",\n    \"continue\",\n    \"datalines\",\n    \"datalines4\",\n    \"delete\",\n    \"delim\",\n    \"delimiter\",\n    \"display\",\n    \"dm\",\n    \"drop\",\n    \"endsas\",\n    \"error\",\n    \"file\",\n    \"filename\",\n    \"footnote\",\n    \"format\",\n    \"goto\",\n    \"in\",\n    \"infile\",\n    \"informat\",\n    \"input\",\n    \"keep\",\n    \"label\",\n    \"leave\",\n    \"length\",\n    \"libname\",\n    \"link\",\n    \"list\",\n    \"lostcard\",\n    \"merge\",\n    \"missing\",\n    \"modify\",\n    \"options\",\n    \"output\",\n    \"out\",\n    \"page\",\n    \"put\",\n    \"redirect\",\n    \"remove\",\n    \"rename\",\n    \"replace\",\n    \"retain\",\n    \"return\",\n    \"select\",\n    \"set\",\n    \"skip\",\n    \"startsas\",\n    \"stop\",\n    \"title\",\n    \"update\",\n    \"waitsas\",\n    \"where\",\n    \"window\",\n    \"x|0\",\n    \"systask\",\n    \"add\",\n    \"and\",\n    \"alter\",\n    \"as\",\n    \"cascade\",\n    \"check\",\n    \"create\",\n    \"delete\",\n    \"describe\",\n    \"distinct\",\n    \"drop\",\n    \"foreign\",\n    \"from\",\n    \"group\",\n    \"having\",\n    \"index\",\n    \"insert\",\n    \"into\",\n    \"in\",\n    \"key\",\n    \"like\",\n    \"message\",\n    \"modify\",\n    \"msgtype\",\n    \"not\",\n    \"null\",\n    \"on\",\n    \"or\",\n    \"order\",\n    \"primary\",\n    \"references\",\n    \"reset\",\n    \"restrict\",\n    \"select\",\n    \"set\",\n    \"table\",\n    \"unique\",\n    \"update\",\n    \"validate\",\n    \"view\",\n    \"where\"\n  ];\n\n  // Built-in SAS functions\n  const FUNCTIONS = [\n    \"abs\",\n    \"addr\",\n    \"airy\",\n    \"arcos\",\n    \"arsin\",\n    \"atan\",\n    \"attrc\",\n    \"attrn\",\n    \"band\",\n    \"betainv\",\n    \"blshift\",\n    \"bnot\",\n    \"bor\",\n    \"brshift\",\n    \"bxor\",\n    \"byte\",\n    \"cdf\",\n    \"ceil\",\n    \"cexist\",\n    \"cinv\",\n    \"close\",\n    \"cnonct\",\n    \"collate\",\n    \"compbl\",\n    \"compound\",\n    \"compress\",\n    \"cos\",\n    \"cosh\",\n    \"css\",\n    \"curobs\",\n    \"cv\",\n    \"daccdb\",\n    \"daccdbsl\",\n    \"daccsl\",\n    \"daccsyd\",\n    \"dacctab\",\n    \"dairy\",\n    \"date\",\n    \"datejul\",\n    \"datepart\",\n    \"datetime\",\n    \"day\",\n    \"dclose\",\n    \"depdb\",\n    \"depdbsl\",\n    \"depdbsl\",\n    \"depsl\",\n    \"depsl\",\n    \"depsyd\",\n    \"depsyd\",\n    \"deptab\",\n    \"deptab\",\n    \"dequote\",\n    \"dhms\",\n    \"dif\",\n    \"digamma\",\n    \"dim\",\n    \"dinfo\",\n    \"dnum\",\n    \"dopen\",\n    \"doptname\",\n    \"doptnum\",\n    \"dread\",\n    \"dropnote\",\n    \"dsname\",\n    \"erf\",\n    \"erfc\",\n    \"exist\",\n    \"exp\",\n    \"fappend\",\n    \"fclose\",\n    \"fcol\",\n    \"fdelete\",\n    \"fetch\",\n    \"fetchobs\",\n    \"fexist\",\n    \"fget\",\n    \"fileexist\",\n    \"filename\",\n    \"fileref\",\n    \"finfo\",\n    \"finv\",\n    \"fipname\",\n    \"fipnamel\",\n    \"fipstate\",\n    \"floor\",\n    \"fnonct\",\n    \"fnote\",\n    \"fopen\",\n    \"foptname\",\n    \"foptnum\",\n    \"fpoint\",\n    \"fpos\",\n    \"fput\",\n    \"fread\",\n    \"frewind\",\n    \"frlen\",\n    \"fsep\",\n    \"fuzz\",\n    \"fwrite\",\n    \"gaminv\",\n    \"gamma\",\n    \"getoption\",\n    \"getvarc\",\n    \"getvarn\",\n    \"hbound\",\n    \"hms\",\n    \"hosthelp\",\n    \"hour\",\n    \"ibessel\",\n    \"index\",\n    \"indexc\",\n    \"indexw\",\n    \"input\",\n    \"inputc\",\n    \"inputn\",\n    \"int\",\n    \"intck\",\n    \"intnx\",\n    \"intrr\",\n    \"irr\",\n    \"jbessel\",\n    \"juldate\",\n    \"kurtosis\",\n    \"lag\",\n    \"lbound\",\n    \"left\",\n    \"length\",\n    \"lgamma\",\n    \"libname\",\n    \"libref\",\n    \"log\",\n    \"log10\",\n    \"log2\",\n    \"logpdf\",\n    \"logpmf\",\n    \"logsdf\",\n    \"lowcase\",\n    \"max\",\n    \"mdy\",\n    \"mean\",\n    \"min\",\n    \"minute\",\n    \"mod\",\n    \"month\",\n    \"mopen\",\n    \"mort\",\n    \"n\",\n    \"netpv\",\n    \"nmiss\",\n    \"normal\",\n    \"note\",\n    \"npv\",\n    \"open\",\n    \"ordinal\",\n    \"pathname\",\n    \"pdf\",\n    \"peek\",\n    \"peekc\",\n    \"pmf\",\n    \"point\",\n    \"poisson\",\n    \"poke\",\n    \"probbeta\",\n    \"probbnml\",\n    \"probchi\",\n    \"probf\",\n    \"probgam\",\n    \"probhypr\",\n    \"probit\",\n    \"probnegb\",\n    \"probnorm\",\n    \"probt\",\n    \"put\",\n    \"putc\",\n    \"putn\",\n    \"qtr\",\n    \"quote\",\n    \"ranbin\",\n    \"rancau\",\n    \"ranexp\",\n    \"rangam\",\n    \"range\",\n    \"rank\",\n    \"rannor\",\n    \"ranpoi\",\n    \"rantbl\",\n    \"rantri\",\n    \"ranuni\",\n    \"repeat\",\n    \"resolve\",\n    \"reverse\",\n    \"rewind\",\n    \"right\",\n    \"round\",\n    \"saving\",\n    \"scan\",\n    \"sdf\",\n    \"second\",\n    \"sign\",\n    \"sin\",\n    \"sinh\",\n    \"skewness\",\n    \"soundex\",\n    \"spedis\",\n    \"sqrt\",\n    \"std\",\n    \"stderr\",\n    \"stfips\",\n    \"stname\",\n    \"stnamel\",\n    \"substr\",\n    \"sum\",\n    \"symget\",\n    \"sysget\",\n    \"sysmsg\",\n    \"sysprod\",\n    \"sysrc\",\n    \"system\",\n    \"tan\",\n    \"tanh\",\n    \"time\",\n    \"timepart\",\n    \"tinv\",\n    \"tnonct\",\n    \"today\",\n    \"translate\",\n    \"tranwrd\",\n    \"trigamma\",\n    \"trim\",\n    \"trimn\",\n    \"trunc\",\n    \"uniform\",\n    \"upcase\",\n    \"uss\",\n    \"var\",\n    \"varfmt\",\n    \"varinfmt\",\n    \"varlabel\",\n    \"varlen\",\n    \"varname\",\n    \"varnum\",\n    \"varray\",\n    \"varrayx\",\n    \"vartype\",\n    \"verify\",\n    \"vformat\",\n    \"vformatd\",\n    \"vformatdx\",\n    \"vformatn\",\n    \"vformatnx\",\n    \"vformatw\",\n    \"vformatwx\",\n    \"vformatx\",\n    \"vinarray\",\n    \"vinarrayx\",\n    \"vinformat\",\n    \"vinformatd\",\n    \"vinformatdx\",\n    \"vinformatn\",\n    \"vinformatnx\",\n    \"vinformatw\",\n    \"vinformatwx\",\n    \"vinformatx\",\n    \"vlabel\",\n    \"vlabelx\",\n    \"vlength\",\n    \"vlengthx\",\n    \"vname\",\n    \"vnamex\",\n    \"vtype\",\n    \"vtypex\",\n    \"weekday\",\n    \"year\",\n    \"yyq\",\n    \"zipfips\",\n    \"zipname\",\n    \"zipnamel\",\n    \"zipstate\"\n  ];\n\n  // Built-in macro functions\n  const MACRO_FUNCTIONS = [\n    \"bquote\",\n    \"nrbquote\",\n    \"cmpres\",\n    \"qcmpres\",\n    \"compstor\",\n    \"datatyp\",\n    \"display\",\n    \"do\",\n    \"else\",\n    \"end\",\n    \"eval\",\n    \"global\",\n    \"goto\",\n    \"if\",\n    \"index\",\n    \"input\",\n    \"keydef\",\n    \"label\",\n    \"left\",\n    \"length\",\n    \"let\",\n    \"local\",\n    \"lowcase\",\n    \"macro\",\n    \"mend\",\n    \"nrbquote\",\n    \"nrquote\",\n    \"nrstr\",\n    \"put\",\n    \"qcmpres\",\n    \"qleft\",\n    \"qlowcase\",\n    \"qscan\",\n    \"qsubstr\",\n    \"qsysfunc\",\n    \"qtrim\",\n    \"quote\",\n    \"qupcase\",\n    \"scan\",\n    \"str\",\n    \"substr\",\n    \"superq\",\n    \"syscall\",\n    \"sysevalf\",\n    \"sysexec\",\n    \"sysfunc\",\n    \"sysget\",\n    \"syslput\",\n    \"sysprod\",\n    \"sysrc\",\n    \"sysrput\",\n    \"then\",\n    \"to\",\n    \"trim\",\n    \"unquote\",\n    \"until\",\n    \"upcase\",\n    \"verify\",\n    \"while\",\n    \"window\"\n  ];\n\n  const LITERALS = [\n    \"null\",\n    \"missing\",\n    \"_all_\",\n    \"_automatic_\",\n    \"_character_\",\n    \"_infile_\",\n    \"_n_\",\n    \"_name_\",\n    \"_null_\",\n    \"_numeric_\",\n    \"_user_\",\n    \"_webout_\"\n  ];\n\n  return {\n    name: 'SAS',\n    case_insensitive: true,\n    keywords: {\n      literal: LITERALS,\n      keyword: SAS_KEYWORDS\n    },\n    contains: [\n      {\n        // Distinct highlight for proc <proc>, data, run, quit\n        className: 'keyword',\n        begin: /^\\s*(proc [\\w\\d_]+|data|run|quit)[\\s;]/\n      },\n      {\n        // Macro variables\n        className: 'variable',\n        begin: /&[a-zA-Z_&][a-zA-Z0-9_]*\\.?/\n      },\n      {\n        begin: [\n          /^\\s*/,\n          /datalines;|cards;/,\n          /(?:.*\\n)+/,\n          /^\\s*;\\s*$/\n        ],\n        className: {\n          2: \"keyword\",\n          3: \"string\"\n        }\n      },\n      {\n        begin: [\n          /%mend|%macro/,\n          /\\s+/,\n          /[a-zA-Z_&][a-zA-Z0-9_]*/\n        ],\n        className: {\n          1: \"built_in\",\n          3: \"title.function\"\n        }\n      },\n      { // Built-in macro variables\n        className: 'built_in',\n        begin: '%' + regex.either(...MACRO_FUNCTIONS)\n      },\n      {\n        // User-defined macro functions\n        className: 'title.function',\n        begin: /%[a-zA-Z_][a-zA-Z_0-9]*/\n      },\n      {\n        // TODO: this is most likely an incorrect classification\n        // built_in may need more nuance\n        // https://github.com/highlightjs/highlight.js/issues/2521\n        className: 'meta',\n        begin: regex.either(...FUNCTIONS) + '(?=\\\\()'\n      },\n      {\n        className: 'string',\n        variants: [\n          hljs.APOS_STRING_MODE,\n          hljs.QUOTE_STRING_MODE\n        ]\n      },\n      hljs.COMMENT('\\\\*', ';'),\n      hljs.C_BLOCK_COMMENT_MODE\n    ]\n  };\n}\n\nmodule.exports = sas;\n","/*\nLanguage: Scala\nCategory: functional\nAuthor: Jan Berkel <jan.berkel@gmail.com>\nContributors: Erik Osheim <d_m@plastic-idolatry.com>\nWebsite: https://www.scala-lang.org\n*/\n\nfunction scala(hljs) {\n  const regex = hljs.regex;\n  const ANNOTATION = {\n    className: 'meta',\n    begin: '@[A-Za-z]+'\n  };\n\n  // used in strings for escaping/interpolation/substitution\n  const SUBST = {\n    className: 'subst',\n    variants: [\n      { begin: '\\\\$[A-Za-z0-9_]+' },\n      {\n        begin: /\\$\\{/,\n        end: /\\}/\n      }\n    ]\n  };\n\n  const STRING = {\n    className: 'string',\n    variants: [\n      {\n        begin: '\"\"\"',\n        end: '\"\"\"'\n      },\n      {\n        begin: '\"',\n        end: '\"',\n        illegal: '\\\\n',\n        contains: [ hljs.BACKSLASH_ESCAPE ]\n      },\n      {\n        begin: '[a-z]+\"',\n        end: '\"',\n        illegal: '\\\\n',\n        contains: [\n          hljs.BACKSLASH_ESCAPE,\n          SUBST\n        ]\n      },\n      {\n        className: 'string',\n        begin: '[a-z]+\"\"\"',\n        end: '\"\"\"',\n        contains: [ SUBST ],\n        relevance: 10\n      }\n    ]\n\n  };\n\n  const TYPE = {\n    className: 'type',\n    begin: '\\\\b[A-Z][A-Za-z0-9_]*',\n    relevance: 0\n  };\n\n  const NAME = {\n    className: 'title',\n    begin: /[^0-9\\n\\t \"'(),.`{}\\[\\]:;][^\\n\\t \"'(),.`{}\\[\\]:;]+|[^0-9\\n\\t \"'(),.`{}\\[\\]:;=]/,\n    relevance: 0\n  };\n\n  const CLASS = {\n    className: 'class',\n    beginKeywords: 'class object trait type',\n    end: /[:={\\[\\n;]/,\n    excludeEnd: true,\n    contains: [\n      hljs.C_LINE_COMMENT_MODE,\n      hljs.C_BLOCK_COMMENT_MODE,\n      {\n        beginKeywords: 'extends with',\n        relevance: 10\n      },\n      {\n        begin: /\\[/,\n        end: /\\]/,\n        excludeBegin: true,\n        excludeEnd: true,\n        relevance: 0,\n        contains: [ \n          TYPE, \n          hljs.C_LINE_COMMENT_MODE, \n          hljs.C_BLOCK_COMMENT_MODE, \n        ]\n      },\n      {\n        className: 'params',\n        begin: /\\(/,\n        end: /\\)/,\n        excludeBegin: true,\n        excludeEnd: true,\n        relevance: 0,\n        contains: [ \n          TYPE, \n          hljs.C_LINE_COMMENT_MODE, \n          hljs.C_BLOCK_COMMENT_MODE, \n        ]\n      },\n      NAME\n    ]\n  };\n\n  const METHOD = {\n    className: 'function',\n    beginKeywords: 'def',\n    end: regex.lookahead(/[:={\\[(\\n;]/),\n    contains: [ NAME ]\n  };\n\n  const EXTENSION = {\n    begin: [\n      /^\\s*/, // Is first token on the line\n      'extension',\n      /\\s+(?=[[(])/, // followed by at least one space and `[` or `(`\n    ],\n    beginScope: { 2: \"keyword\", }\n  };\n\n  const END = {\n    begin: [\n      /^\\s*/, // Is first token on the line\n      /end/,\n      /\\s+/,\n      /(extension\\b)?/, // `extension` is the only marker that follows an `end` that cannot be captured by another rule.\n    ],\n    beginScope: {\n      2: \"keyword\",\n      4: \"keyword\",\n    }\n  };\n\n  // TODO: use negative look-behind in future\n  //       /(?<!\\.)\\binline(?=\\s)/\n  const INLINE_MODES = [\n    { match: /\\.inline\\b/ },\n    {\n      begin: /\\binline(?=\\s)/,\n      keywords: 'inline'\n    }\n  ];\n\n  const USING_PARAM_CLAUSE = {\n    begin: [\n      /\\(\\s*/, // Opening `(` of a parameter or argument list\n      /using/,\n      /\\s+(?!\\))/, // Spaces not followed by `)`\n    ],\n    beginScope: { 2: \"keyword\", }\n  };\n\n  // glob all non-whitespace characters as a \"string\"\n  // sourced from https://github.com/scala/docs.scala-lang/pull/2845\n  const DIRECTIVE_VALUE = {\n    className: 'string',\n    begin: /\\S+/,\n  };\n\n  // directives\n  // sourced from https://github.com/scala/docs.scala-lang/pull/2845\n  const USING_DIRECTIVE = {\n    begin: [\n      '//>',\n      /\\s+/,\n      /using/,\n      /\\s+/,\n      /\\S+/\n    ],\n    beginScope: {\n      1: \"comment\",\n      3: \"keyword\",\n      5: \"type\"\n    },\n    end: /$/,\n    contains: [\n      DIRECTIVE_VALUE,\n    ]\n  };\n\n  return {\n    name: 'Scala',\n    keywords: {\n      literal: 'true false null',\n      keyword: 'type yield lazy override def with val var sealed abstract private trait object if then forSome for while do throw finally protected extends import final return else break new catch super class case package default try this match continue throws implicit export enum given transparent'\n    },\n    contains: [\n      USING_DIRECTIVE,\n      hljs.C_LINE_COMMENT_MODE,\n      hljs.C_BLOCK_COMMENT_MODE,\n      STRING,\n      TYPE,\n      METHOD,\n      CLASS,\n      hljs.C_NUMBER_MODE,\n      EXTENSION,\n      END,\n      ...INLINE_MODES,\n      USING_PARAM_CLAUSE,\n      ANNOTATION\n    ]\n  };\n}\n\nmodule.exports = scala;\n","/*\nLanguage: Scheme\nDescription: Scheme is a programming language in the Lisp family.\n             (keywords based on http://community.schemewiki.org/?scheme-keywords)\nAuthor: JP Verkamp <me@jverkamp.com>\nContributors: Ivan Sagalaev <maniac@softwaremaniacs.org>\nOrigin: clojure.js\nWebsite: http://community.schemewiki.org/?what-is-scheme\nCategory: lisp\n*/\n\nfunction scheme(hljs) {\n  const SCHEME_IDENT_RE = '[^\\\\(\\\\)\\\\[\\\\]\\\\{\\\\}\",\\'`;#|\\\\\\\\\\\\s]+';\n  const SCHEME_SIMPLE_NUMBER_RE = '(-|\\\\+)?\\\\d+([./]\\\\d+)?';\n  const SCHEME_COMPLEX_NUMBER_RE = SCHEME_SIMPLE_NUMBER_RE + '[+\\\\-]' + SCHEME_SIMPLE_NUMBER_RE + 'i';\n  const KEYWORDS = {\n    $pattern: SCHEME_IDENT_RE,\n    built_in:\n      'case-lambda call/cc class define-class exit-handler field import '\n      + 'inherit init-field interface let*-values let-values let/ec mixin '\n      + 'opt-lambda override protect provide public rename require '\n      + 'require-for-syntax syntax syntax-case syntax-error unit/sig unless '\n      + 'when with-syntax and begin call-with-current-continuation '\n      + 'call-with-input-file call-with-output-file case cond define '\n      + 'define-syntax delay do dynamic-wind else for-each if lambda let let* '\n      + 'let-syntax letrec letrec-syntax map or syntax-rules \\' * + , ,@ - ... / '\n      + '; < <= = => > >= ` abs acos angle append apply asin assoc assq assv atan '\n      + 'boolean? caar cadr call-with-input-file call-with-output-file '\n      + 'call-with-values car cdddar cddddr cdr ceiling char->integer '\n      + 'char-alphabetic? char-ci<=? char-ci<? char-ci=? char-ci>=? char-ci>? '\n      + 'char-downcase char-lower-case? char-numeric? char-ready? char-upcase '\n      + 'char-upper-case? char-whitespace? char<=? char<? char=? char>=? char>? '\n      + 'char? close-input-port close-output-port complex? cons cos '\n      + 'current-input-port current-output-port denominator display eof-object? '\n      + 'eq? equal? eqv? eval even? exact->inexact exact? exp expt floor '\n      + 'force gcd imag-part inexact->exact inexact? input-port? integer->char '\n      + 'integer? interaction-environment lcm length list list->string '\n      + 'list->vector list-ref list-tail list? load log magnitude make-polar '\n      + 'make-rectangular make-string make-vector max member memq memv min '\n      + 'modulo negative? newline not null-environment null? number->string '\n      + 'number? numerator odd? open-input-file open-output-file output-port? '\n      + 'pair? peek-char port? positive? procedure? quasiquote quote quotient '\n      + 'rational? rationalize read read-char real-part real? remainder reverse '\n      + 'round scheme-report-environment set! set-car! set-cdr! sin sqrt string '\n      + 'string->list string->number string->symbol string-append string-ci<=? '\n      + 'string-ci<? string-ci=? string-ci>=? string-ci>? string-copy '\n      + 'string-fill! string-length string-ref string-set! string<=? string<? '\n      + 'string=? string>=? string>? string? substring symbol->string symbol? '\n      + 'tan transcript-off transcript-on truncate values vector '\n      + 'vector->list vector-fill! vector-length vector-ref vector-set! '\n      + 'with-input-from-file with-output-to-file write write-char zero?'\n  };\n\n  const LITERAL = {\n    className: 'literal',\n    begin: '(#t|#f|#\\\\\\\\' + SCHEME_IDENT_RE + '|#\\\\\\\\.)'\n  };\n\n  const NUMBER = {\n    className: 'number',\n    variants: [\n      {\n        begin: SCHEME_SIMPLE_NUMBER_RE,\n        relevance: 0\n      },\n      {\n        begin: SCHEME_COMPLEX_NUMBER_RE,\n        relevance: 0\n      },\n      { begin: '#b[0-1]+(/[0-1]+)?' },\n      { begin: '#o[0-7]+(/[0-7]+)?' },\n      { begin: '#x[0-9a-f]+(/[0-9a-f]+)?' }\n    ]\n  };\n\n  const STRING = hljs.QUOTE_STRING_MODE;\n\n  const COMMENT_MODES = [\n    hljs.COMMENT(\n      ';',\n      '$',\n      { relevance: 0 }\n    ),\n    hljs.COMMENT('#\\\\|', '\\\\|#')\n  ];\n\n  const IDENT = {\n    begin: SCHEME_IDENT_RE,\n    relevance: 0\n  };\n\n  const QUOTED_IDENT = {\n    className: 'symbol',\n    begin: '\\'' + SCHEME_IDENT_RE\n  };\n\n  const BODY = {\n    endsWithParent: true,\n    relevance: 0\n  };\n\n  const QUOTED_LIST = {\n    variants: [\n      { begin: /'/ },\n      { begin: '`' }\n    ],\n    contains: [\n      {\n        begin: '\\\\(',\n        end: '\\\\)',\n        contains: [\n          'self',\n          LITERAL,\n          STRING,\n          NUMBER,\n          IDENT,\n          QUOTED_IDENT\n        ]\n      }\n    ]\n  };\n\n  const NAME = {\n    className: 'name',\n    relevance: 0,\n    begin: SCHEME_IDENT_RE,\n    keywords: KEYWORDS\n  };\n\n  const LAMBDA = {\n    begin: /lambda/,\n    endsWithParent: true,\n    returnBegin: true,\n    contains: [\n      NAME,\n      {\n        endsParent: true,\n        variants: [\n          {\n            begin: /\\(/,\n            end: /\\)/\n          },\n          {\n            begin: /\\[/,\n            end: /\\]/\n          }\n        ],\n        contains: [ IDENT ]\n      }\n    ]\n  };\n\n  const LIST = {\n    variants: [\n      {\n        begin: '\\\\(',\n        end: '\\\\)'\n      },\n      {\n        begin: '\\\\[',\n        end: '\\\\]'\n      }\n    ],\n    contains: [\n      LAMBDA,\n      NAME,\n      BODY\n    ]\n  };\n\n  BODY.contains = [\n    LITERAL,\n    NUMBER,\n    STRING,\n    IDENT,\n    QUOTED_IDENT,\n    QUOTED_LIST,\n    LIST\n  ].concat(COMMENT_MODES);\n\n  return {\n    name: 'Scheme',\n    aliases: ['scm'],\n    illegal: /\\S/,\n    contains: [\n      hljs.SHEBANG(),\n      NUMBER,\n      STRING,\n      QUOTED_IDENT,\n      QUOTED_LIST,\n      LIST\n    ].concat(COMMENT_MODES)\n  };\n}\n\nmodule.exports = scheme;\n","/*\nLanguage: Scilab\nAuthor: Sylvestre Ledru <sylvestre.ledru@scilab-enterprises.com>\nOrigin: matlab.js\nDescription: Scilab is a port from Matlab\nWebsite: https://www.scilab.org\nCategory: scientific\n*/\n\nfunction scilab(hljs) {\n  const COMMON_CONTAINS = [\n    hljs.C_NUMBER_MODE,\n    {\n      className: 'string',\n      begin: '\\'|\\\"',\n      end: '\\'|\\\"',\n      contains: [\n        hljs.BACKSLASH_ESCAPE,\n        { begin: '\\'\\'' }\n      ]\n    }\n  ];\n\n  return {\n    name: 'Scilab',\n    aliases: [ 'sci' ],\n    keywords: {\n      $pattern: /%?\\w+/,\n      keyword: 'abort break case clear catch continue do elseif else endfunction end for function '\n        + 'global if pause return resume select try then while',\n      literal:\n        '%f %F %t %T %pi %eps %inf %nan %e %i %z %s',\n      built_in: // Scilab has more than 2000 functions. Just list the most commons\n       'abs and acos asin atan ceil cd chdir clearglobal cosh cos cumprod deff disp error '\n       + 'exec execstr exists exp eye gettext floor fprintf fread fsolve imag isdef isempty '\n       + 'isinfisnan isvector lasterror length load linspace list listfiles log10 log2 log '\n       + 'max min msprintf mclose mopen ones or pathconvert poly printf prod pwd rand real '\n       + 'round sinh sin size gsort sprintf sqrt strcat strcmps tring sum system tanh tan '\n       + 'type typename warning zeros matrix'\n    },\n    illegal: '(\"|#|/\\\\*|\\\\s+/\\\\w+)',\n    contains: [\n      {\n        className: 'function',\n        beginKeywords: 'function',\n        end: '$',\n        contains: [\n          hljs.UNDERSCORE_TITLE_MODE,\n          {\n            className: 'params',\n            begin: '\\\\(',\n            end: '\\\\)'\n          }\n        ]\n      },\n      // seems to be a guard against [ident]' or [ident].\n      // perhaps to prevent attributes from flagging as keywords?\n      {\n        begin: '[a-zA-Z_][a-zA-Z_0-9]*[\\\\.\\']+',\n        relevance: 0\n      },\n      {\n        begin: '\\\\[',\n        end: '\\\\][\\\\.\\']*',\n        relevance: 0,\n        contains: COMMON_CONTAINS\n      },\n      hljs.COMMENT('//', '$')\n    ].concat(COMMON_CONTAINS)\n  };\n}\n\nmodule.exports = scilab;\n","const MODES = (hljs) => {\n  return {\n    IMPORTANT: {\n      scope: 'meta',\n      begin: '!important'\n    },\n    BLOCK_COMMENT: hljs.C_BLOCK_COMMENT_MODE,\n    HEXCOLOR: {\n      scope: 'number',\n      begin: /#(([0-9a-fA-F]{3,4})|(([0-9a-fA-F]{2}){3,4}))\\b/\n    },\n    FUNCTION_DISPATCH: {\n      className: \"built_in\",\n      begin: /[\\w-]+(?=\\()/\n    },\n    ATTRIBUTE_SELECTOR_MODE: {\n      scope: 'selector-attr',\n      begin: /\\[/,\n      end: /\\]/,\n      illegal: '$',\n      contains: [\n        hljs.APOS_STRING_MODE,\n        hljs.QUOTE_STRING_MODE\n      ]\n    },\n    CSS_NUMBER_MODE: {\n      scope: 'number',\n      begin: hljs.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    },\n    CSS_VARIABLE: {\n      className: \"attr\",\n      begin: /--[A-Za-z_][A-Za-z0-9_-]*/\n    }\n  };\n};\n\nconst HTML_TAGS = [\n  'a',\n  'abbr',\n  'address',\n  'article',\n  'aside',\n  'audio',\n  'b',\n  'blockquote',\n  'body',\n  'button',\n  'canvas',\n  'caption',\n  'cite',\n  'code',\n  'dd',\n  'del',\n  'details',\n  'dfn',\n  'div',\n  'dl',\n  'dt',\n  'em',\n  'fieldset',\n  'figcaption',\n  'figure',\n  'footer',\n  'form',\n  'h1',\n  'h2',\n  'h3',\n  'h4',\n  'h5',\n  'h6',\n  'header',\n  'hgroup',\n  'html',\n  'i',\n  'iframe',\n  'img',\n  'input',\n  'ins',\n  'kbd',\n  'label',\n  'legend',\n  'li',\n  'main',\n  'mark',\n  'menu',\n  'nav',\n  'object',\n  'ol',\n  'optgroup',\n  'option',\n  'p',\n  'picture',\n  'q',\n  'quote',\n  'samp',\n  'section',\n  'select',\n  'source',\n  'span',\n  'strong',\n  'summary',\n  'sup',\n  'table',\n  'tbody',\n  'td',\n  'textarea',\n  'tfoot',\n  'th',\n  'thead',\n  'time',\n  'tr',\n  'ul',\n  'var',\n  'video'\n];\n\nconst SVG_TAGS = [\n  'defs',\n  'g',\n  'marker',\n  'mask',\n  'pattern',\n  'svg',\n  'switch',\n  'symbol',\n  'feBlend',\n  'feColorMatrix',\n  'feComponentTransfer',\n  'feComposite',\n  'feConvolveMatrix',\n  'feDiffuseLighting',\n  'feDisplacementMap',\n  'feFlood',\n  'feGaussianBlur',\n  'feImage',\n  'feMerge',\n  'feMorphology',\n  'feOffset',\n  'feSpecularLighting',\n  'feTile',\n  'feTurbulence',\n  'linearGradient',\n  'radialGradient',\n  'stop',\n  'circle',\n  'ellipse',\n  'image',\n  'line',\n  'path',\n  'polygon',\n  'polyline',\n  'rect',\n  'text',\n  'use',\n  'textPath',\n  'tspan',\n  'foreignObject',\n  'clipPath'\n];\n\nconst TAGS = [\n  ...HTML_TAGS,\n  ...SVG_TAGS,\n];\n\n// Sorting, then reversing makes sure longer attributes/elements like\n// `font-weight` are matched fully instead of getting false positives on say `font`\n\nconst MEDIA_FEATURES = [\n  'any-hover',\n  'any-pointer',\n  'aspect-ratio',\n  'color',\n  'color-gamut',\n  'color-index',\n  'device-aspect-ratio',\n  'device-height',\n  'device-width',\n  'display-mode',\n  'forced-colors',\n  'grid',\n  'height',\n  'hover',\n  'inverted-colors',\n  'monochrome',\n  'orientation',\n  'overflow-block',\n  'overflow-inline',\n  'pointer',\n  'prefers-color-scheme',\n  'prefers-contrast',\n  'prefers-reduced-motion',\n  'prefers-reduced-transparency',\n  'resolution',\n  'scan',\n  'scripting',\n  'update',\n  'width',\n  // TODO: find a better solution?\n  'min-width',\n  'max-width',\n  'min-height',\n  'max-height'\n].sort().reverse();\n\n// https://developer.mozilla.org/en-US/docs/Web/CSS/Pseudo-classes\nconst PSEUDO_CLASSES = [\n  'active',\n  'any-link',\n  'blank',\n  'checked',\n  'current',\n  'default',\n  'defined',\n  'dir', // dir()\n  'disabled',\n  'drop',\n  'empty',\n  'enabled',\n  'first',\n  'first-child',\n  'first-of-type',\n  'fullscreen',\n  'future',\n  'focus',\n  'focus-visible',\n  'focus-within',\n  'has', // has()\n  'host', // host or host()\n  'host-context', // host-context()\n  'hover',\n  'indeterminate',\n  'in-range',\n  'invalid',\n  'is', // is()\n  'lang', // lang()\n  'last-child',\n  'last-of-type',\n  'left',\n  'link',\n  'local-link',\n  'not', // not()\n  'nth-child', // nth-child()\n  'nth-col', // nth-col()\n  'nth-last-child', // nth-last-child()\n  'nth-last-col', // nth-last-col()\n  'nth-last-of-type', //nth-last-of-type()\n  'nth-of-type', //nth-of-type()\n  'only-child',\n  'only-of-type',\n  'optional',\n  'out-of-range',\n  'past',\n  'placeholder-shown',\n  'read-only',\n  'read-write',\n  'required',\n  'right',\n  'root',\n  'scope',\n  'target',\n  'target-within',\n  'user-invalid',\n  'valid',\n  'visited',\n  'where' // where()\n].sort().reverse();\n\n// https://developer.mozilla.org/en-US/docs/Web/CSS/Pseudo-elements\nconst PSEUDO_ELEMENTS = [\n  'after',\n  'backdrop',\n  'before',\n  'cue',\n  'cue-region',\n  'first-letter',\n  'first-line',\n  'grammar-error',\n  'marker',\n  'part',\n  'placeholder',\n  'selection',\n  'slotted',\n  'spelling-error'\n].sort().reverse();\n\nconst ATTRIBUTES = [\n  'accent-color',\n  'align-content',\n  'align-items',\n  'align-self',\n  'alignment-baseline',\n  'all',\n  'anchor-name',\n  'animation',\n  'animation-composition',\n  'animation-delay',\n  'animation-direction',\n  'animation-duration',\n  'animation-fill-mode',\n  'animation-iteration-count',\n  'animation-name',\n  'animation-play-state',\n  'animation-range',\n  'animation-range-end',\n  'animation-range-start',\n  'animation-timeline',\n  'animation-timing-function',\n  'appearance',\n  'aspect-ratio',\n  'backdrop-filter',\n  'backface-visibility',\n  'background',\n  'background-attachment',\n  'background-blend-mode',\n  'background-clip',\n  'background-color',\n  'background-image',\n  'background-origin',\n  'background-position',\n  'background-position-x',\n  'background-position-y',\n  'background-repeat',\n  'background-size',\n  'baseline-shift',\n  'block-size',\n  'border',\n  'border-block',\n  'border-block-color',\n  'border-block-end',\n  'border-block-end-color',\n  'border-block-end-style',\n  'border-block-end-width',\n  'border-block-start',\n  'border-block-start-color',\n  'border-block-start-style',\n  'border-block-start-width',\n  'border-block-style',\n  'border-block-width',\n  'border-bottom',\n  'border-bottom-color',\n  'border-bottom-left-radius',\n  'border-bottom-right-radius',\n  'border-bottom-style',\n  'border-bottom-width',\n  'border-collapse',\n  'border-color',\n  'border-end-end-radius',\n  'border-end-start-radius',\n  'border-image',\n  'border-image-outset',\n  'border-image-repeat',\n  'border-image-slice',\n  'border-image-source',\n  'border-image-width',\n  'border-inline',\n  'border-inline-color',\n  'border-inline-end',\n  'border-inline-end-color',\n  'border-inline-end-style',\n  'border-inline-end-width',\n  'border-inline-start',\n  'border-inline-start-color',\n  'border-inline-start-style',\n  'border-inline-start-width',\n  'border-inline-style',\n  'border-inline-width',\n  'border-left',\n  'border-left-color',\n  'border-left-style',\n  'border-left-width',\n  'border-radius',\n  'border-right',\n  'border-right-color',\n  'border-right-style',\n  'border-right-width',\n  'border-spacing',\n  'border-start-end-radius',\n  'border-start-start-radius',\n  'border-style',\n  'border-top',\n  'border-top-color',\n  'border-top-left-radius',\n  'border-top-right-radius',\n  'border-top-style',\n  'border-top-width',\n  'border-width',\n  'bottom',\n  'box-align',\n  'box-decoration-break',\n  'box-direction',\n  'box-flex',\n  'box-flex-group',\n  'box-lines',\n  'box-ordinal-group',\n  'box-orient',\n  'box-pack',\n  'box-shadow',\n  'box-sizing',\n  'break-after',\n  'break-before',\n  'break-inside',\n  'caption-side',\n  'caret-color',\n  'clear',\n  'clip',\n  'clip-path',\n  'clip-rule',\n  'color',\n  'color-interpolation',\n  'color-interpolation-filters',\n  'color-profile',\n  'color-rendering',\n  'color-scheme',\n  'column-count',\n  'column-fill',\n  'column-gap',\n  'column-rule',\n  'column-rule-color',\n  'column-rule-style',\n  'column-rule-width',\n  'column-span',\n  'column-width',\n  'columns',\n  'contain',\n  'contain-intrinsic-block-size',\n  'contain-intrinsic-height',\n  'contain-intrinsic-inline-size',\n  'contain-intrinsic-size',\n  'contain-intrinsic-width',\n  'container',\n  'container-name',\n  'container-type',\n  'content',\n  'content-visibility',\n  'counter-increment',\n  'counter-reset',\n  'counter-set',\n  'cue',\n  'cue-after',\n  'cue-before',\n  'cursor',\n  'cx',\n  'cy',\n  'direction',\n  'display',\n  'dominant-baseline',\n  'empty-cells',\n  'enable-background',\n  'field-sizing',\n  'fill',\n  'fill-opacity',\n  'fill-rule',\n  'filter',\n  'flex',\n  'flex-basis',\n  'flex-direction',\n  'flex-flow',\n  'flex-grow',\n  'flex-shrink',\n  'flex-wrap',\n  'float',\n  'flood-color',\n  'flood-opacity',\n  'flow',\n  'font',\n  'font-display',\n  'font-family',\n  'font-feature-settings',\n  'font-kerning',\n  'font-language-override',\n  'font-optical-sizing',\n  'font-palette',\n  'font-size',\n  'font-size-adjust',\n  'font-smooth',\n  'font-smoothing',\n  'font-stretch',\n  'font-style',\n  'font-synthesis',\n  'font-synthesis-position',\n  'font-synthesis-small-caps',\n  'font-synthesis-style',\n  'font-synthesis-weight',\n  'font-variant',\n  'font-variant-alternates',\n  'font-variant-caps',\n  'font-variant-east-asian',\n  'font-variant-emoji',\n  'font-variant-ligatures',\n  'font-variant-numeric',\n  'font-variant-position',\n  'font-variation-settings',\n  'font-weight',\n  'forced-color-adjust',\n  'gap',\n  'glyph-orientation-horizontal',\n  'glyph-orientation-vertical',\n  'grid',\n  'grid-area',\n  'grid-auto-columns',\n  'grid-auto-flow',\n  'grid-auto-rows',\n  'grid-column',\n  'grid-column-end',\n  'grid-column-start',\n  'grid-gap',\n  'grid-row',\n  'grid-row-end',\n  'grid-row-start',\n  'grid-template',\n  'grid-template-areas',\n  'grid-template-columns',\n  'grid-template-rows',\n  'hanging-punctuation',\n  'height',\n  'hyphenate-character',\n  'hyphenate-limit-chars',\n  'hyphens',\n  'icon',\n  'image-orientation',\n  'image-rendering',\n  'image-resolution',\n  'ime-mode',\n  'initial-letter',\n  'initial-letter-align',\n  'inline-size',\n  'inset',\n  'inset-area',\n  'inset-block',\n  'inset-block-end',\n  'inset-block-start',\n  'inset-inline',\n  'inset-inline-end',\n  'inset-inline-start',\n  'isolation',\n  'justify-content',\n  'justify-items',\n  'justify-self',\n  'kerning',\n  'left',\n  'letter-spacing',\n  'lighting-color',\n  'line-break',\n  'line-height',\n  'line-height-step',\n  'list-style',\n  'list-style-image',\n  'list-style-position',\n  'list-style-type',\n  'margin',\n  'margin-block',\n  'margin-block-end',\n  'margin-block-start',\n  'margin-bottom',\n  'margin-inline',\n  'margin-inline-end',\n  'margin-inline-start',\n  'margin-left',\n  'margin-right',\n  'margin-top',\n  'margin-trim',\n  'marker',\n  'marker-end',\n  'marker-mid',\n  'marker-start',\n  'marks',\n  'mask',\n  'mask-border',\n  'mask-border-mode',\n  'mask-border-outset',\n  'mask-border-repeat',\n  'mask-border-slice',\n  'mask-border-source',\n  'mask-border-width',\n  'mask-clip',\n  'mask-composite',\n  'mask-image',\n  'mask-mode',\n  'mask-origin',\n  'mask-position',\n  'mask-repeat',\n  'mask-size',\n  'mask-type',\n  'masonry-auto-flow',\n  'math-depth',\n  'math-shift',\n  'math-style',\n  'max-block-size',\n  'max-height',\n  'max-inline-size',\n  'max-width',\n  'min-block-size',\n  'min-height',\n  'min-inline-size',\n  'min-width',\n  'mix-blend-mode',\n  'nav-down',\n  'nav-index',\n  'nav-left',\n  'nav-right',\n  'nav-up',\n  'none',\n  'normal',\n  'object-fit',\n  'object-position',\n  'offset',\n  'offset-anchor',\n  'offset-distance',\n  'offset-path',\n  'offset-position',\n  'offset-rotate',\n  'opacity',\n  'order',\n  'orphans',\n  'outline',\n  'outline-color',\n  'outline-offset',\n  'outline-style',\n  'outline-width',\n  'overflow',\n  'overflow-anchor',\n  'overflow-block',\n  'overflow-clip-margin',\n  'overflow-inline',\n  'overflow-wrap',\n  'overflow-x',\n  'overflow-y',\n  'overlay',\n  'overscroll-behavior',\n  'overscroll-behavior-block',\n  'overscroll-behavior-inline',\n  'overscroll-behavior-x',\n  'overscroll-behavior-y',\n  'padding',\n  'padding-block',\n  'padding-block-end',\n  'padding-block-start',\n  'padding-bottom',\n  'padding-inline',\n  'padding-inline-end',\n  'padding-inline-start',\n  'padding-left',\n  'padding-right',\n  'padding-top',\n  'page',\n  'page-break-after',\n  'page-break-before',\n  'page-break-inside',\n  'paint-order',\n  'pause',\n  'pause-after',\n  'pause-before',\n  'perspective',\n  'perspective-origin',\n  'place-content',\n  'place-items',\n  'place-self',\n  'pointer-events',\n  'position',\n  'position-anchor',\n  'position-visibility',\n  'print-color-adjust',\n  'quotes',\n  'r',\n  'resize',\n  'rest',\n  'rest-after',\n  'rest-before',\n  'right',\n  'rotate',\n  'row-gap',\n  'ruby-align',\n  'ruby-position',\n  'scale',\n  'scroll-behavior',\n  'scroll-margin',\n  'scroll-margin-block',\n  'scroll-margin-block-end',\n  'scroll-margin-block-start',\n  'scroll-margin-bottom',\n  'scroll-margin-inline',\n  'scroll-margin-inline-end',\n  'scroll-margin-inline-start',\n  'scroll-margin-left',\n  'scroll-margin-right',\n  'scroll-margin-top',\n  'scroll-padding',\n  'scroll-padding-block',\n  'scroll-padding-block-end',\n  'scroll-padding-block-start',\n  'scroll-padding-bottom',\n  'scroll-padding-inline',\n  'scroll-padding-inline-end',\n  'scroll-padding-inline-start',\n  'scroll-padding-left',\n  'scroll-padding-right',\n  'scroll-padding-top',\n  'scroll-snap-align',\n  'scroll-snap-stop',\n  'scroll-snap-type',\n  'scroll-timeline',\n  'scroll-timeline-axis',\n  'scroll-timeline-name',\n  'scrollbar-color',\n  'scrollbar-gutter',\n  'scrollbar-width',\n  'shape-image-threshold',\n  'shape-margin',\n  'shape-outside',\n  'shape-rendering',\n  'speak',\n  'speak-as',\n  'src', // @font-face\n  'stop-color',\n  'stop-opacity',\n  'stroke',\n  'stroke-dasharray',\n  'stroke-dashoffset',\n  'stroke-linecap',\n  'stroke-linejoin',\n  'stroke-miterlimit',\n  'stroke-opacity',\n  'stroke-width',\n  'tab-size',\n  'table-layout',\n  'text-align',\n  'text-align-all',\n  'text-align-last',\n  'text-anchor',\n  'text-combine-upright',\n  'text-decoration',\n  'text-decoration-color',\n  'text-decoration-line',\n  'text-decoration-skip',\n  'text-decoration-skip-ink',\n  'text-decoration-style',\n  'text-decoration-thickness',\n  'text-emphasis',\n  'text-emphasis-color',\n  'text-emphasis-position',\n  'text-emphasis-style',\n  'text-indent',\n  'text-justify',\n  'text-orientation',\n  'text-overflow',\n  'text-rendering',\n  'text-shadow',\n  'text-size-adjust',\n  'text-transform',\n  'text-underline-offset',\n  'text-underline-position',\n  'text-wrap',\n  'text-wrap-mode',\n  'text-wrap-style',\n  'timeline-scope',\n  'top',\n  'touch-action',\n  'transform',\n  'transform-box',\n  'transform-origin',\n  'transform-style',\n  'transition',\n  'transition-behavior',\n  'transition-delay',\n  'transition-duration',\n  'transition-property',\n  'transition-timing-function',\n  'translate',\n  'unicode-bidi',\n  'user-modify',\n  'user-select',\n  'vector-effect',\n  'vertical-align',\n  'view-timeline',\n  'view-timeline-axis',\n  'view-timeline-inset',\n  'view-timeline-name',\n  'view-transition-name',\n  'visibility',\n  'voice-balance',\n  'voice-duration',\n  'voice-family',\n  'voice-pitch',\n  'voice-range',\n  'voice-rate',\n  'voice-stress',\n  'voice-volume',\n  'white-space',\n  'white-space-collapse',\n  'widows',\n  'width',\n  'will-change',\n  'word-break',\n  'word-spacing',\n  'word-wrap',\n  'writing-mode',\n  'x',\n  'y',\n  'z-index',\n  'zoom'\n].sort().reverse();\n\n/*\nLanguage: SCSS\nDescription: Scss is an extension of the syntax of CSS.\nAuthor: Kurt Emch <kurt@kurtemch.com>\nWebsite: https://sass-lang.com\nCategory: common, css, web\n*/\n\n\n/** @type LanguageFn */\nfunction scss(hljs) {\n  const modes = MODES(hljs);\n  const PSEUDO_ELEMENTS$1 = PSEUDO_ELEMENTS;\n  const PSEUDO_CLASSES$1 = PSEUDO_CLASSES;\n\n  const AT_IDENTIFIER = '@[a-z-]+'; // @font-face\n  const AT_MODIFIERS = \"and or not only\";\n  const IDENT_RE = '[a-zA-Z-][a-zA-Z0-9_-]*';\n  const VARIABLE = {\n    className: 'variable',\n    begin: '(\\\\$' + IDENT_RE + ')\\\\b',\n    relevance: 0\n  };\n\n  return {\n    name: 'SCSS',\n    case_insensitive: true,\n    illegal: '[=/|\\']',\n    contains: [\n      hljs.C_LINE_COMMENT_MODE,\n      hljs.C_BLOCK_COMMENT_MODE,\n      // to recognize keyframe 40% etc which are outside the scope of our\n      // attribute value mode\n      modes.CSS_NUMBER_MODE,\n      {\n        className: 'selector-id',\n        begin: '#[A-Za-z0-9_-]+',\n        relevance: 0\n      },\n      {\n        className: 'selector-class',\n        begin: '\\\\.[A-Za-z0-9_-]+',\n        relevance: 0\n      },\n      modes.ATTRIBUTE_SELECTOR_MODE,\n      {\n        className: 'selector-tag',\n        begin: '\\\\b(' + TAGS.join('|') + ')\\\\b',\n        // was there, before, but why?\n        relevance: 0\n      },\n      {\n        className: 'selector-pseudo',\n        begin: ':(' + PSEUDO_CLASSES$1.join('|') + ')'\n      },\n      {\n        className: 'selector-pseudo',\n        begin: ':(:)?(' + PSEUDO_ELEMENTS$1.join('|') + ')'\n      },\n      VARIABLE,\n      { // pseudo-selector params\n        begin: /\\(/,\n        end: /\\)/,\n        contains: [ modes.CSS_NUMBER_MODE ]\n      },\n      modes.CSS_VARIABLE,\n      {\n        className: 'attribute',\n        begin: '\\\\b(' + ATTRIBUTES.join('|') + ')\\\\b'\n      },\n      { begin: '\\\\b(whitespace|wait|w-resize|visible|vertical-text|vertical-ideographic|uppercase|upper-roman|upper-alpha|underline|transparent|top|thin|thick|text|text-top|text-bottom|tb-rl|table-header-group|table-footer-group|sw-resize|super|strict|static|square|solid|small-caps|separate|se-resize|scroll|s-resize|rtl|row-resize|ridge|right|repeat|repeat-y|repeat-x|relative|progress|pointer|overline|outside|outset|oblique|nowrap|not-allowed|normal|none|nw-resize|no-repeat|no-drop|newspaper|ne-resize|n-resize|move|middle|medium|ltr|lr-tb|lowercase|lower-roman|lower-alpha|loose|list-item|line|line-through|line-edge|lighter|left|keep-all|justify|italic|inter-word|inter-ideograph|inside|inset|inline|inline-block|inherit|inactive|ideograph-space|ideograph-parenthesis|ideograph-numeric|ideograph-alpha|horizontal|hidden|help|hand|groove|fixed|ellipsis|e-resize|double|dotted|distribute|distribute-space|distribute-letter|distribute-all-lines|disc|disabled|default|decimal|dashed|crosshair|collapse|col-resize|circle|char|center|capitalize|break-word|break-all|bottom|both|bolder|bold|block|bidi-override|below|baseline|auto|always|all-scroll|absolute|table|table-cell)\\\\b' },\n      {\n        begin: /:/,\n        end: /[;}{]/,\n        relevance: 0,\n        contains: [\n          modes.BLOCK_COMMENT,\n          VARIABLE,\n          modes.HEXCOLOR,\n          modes.CSS_NUMBER_MODE,\n          hljs.QUOTE_STRING_MODE,\n          hljs.APOS_STRING_MODE,\n          modes.IMPORTANT,\n          modes.FUNCTION_DISPATCH\n        ]\n      },\n      // matching these here allows us to treat them more like regular CSS\n      // rules so everything between the {} gets regular rule highlighting,\n      // which is what we want for page and font-face\n      {\n        begin: '@(page|font-face)',\n        keywords: {\n          $pattern: AT_IDENTIFIER,\n          keyword: '@page @font-face'\n        }\n      },\n      {\n        begin: '@',\n        end: '[{;]',\n        returnBegin: true,\n        keywords: {\n          $pattern: /[a-z-]+/,\n          keyword: AT_MODIFIERS,\n          attribute: MEDIA_FEATURES.join(\" \")\n        },\n        contains: [\n          {\n            begin: AT_IDENTIFIER,\n            className: \"keyword\"\n          },\n          {\n            begin: /[a-z-]+(?=:)/,\n            className: \"attribute\"\n          },\n          VARIABLE,\n          hljs.QUOTE_STRING_MODE,\n          hljs.APOS_STRING_MODE,\n          modes.HEXCOLOR,\n          modes.CSS_NUMBER_MODE\n        ]\n      },\n      modes.FUNCTION_DISPATCH\n    ]\n  };\n}\n\nmodule.exports = scss;\n","/*\nLanguage: Shell Session\nRequires: bash.js\nAuthor: TSUYUSATO Kitsune <make.just.on@gmail.com>\nCategory: common\nAudit: 2020\n*/\n\n/** @type LanguageFn */\nfunction shell(hljs) {\n  return {\n    name: 'Shell Session',\n    aliases: [\n      'console',\n      'shellsession'\n    ],\n    contains: [\n      {\n        className: 'meta.prompt',\n        // We cannot add \\s (spaces) in the regular expression otherwise it will be too broad and produce unexpected result.\n        // For instance, in the following example, it would match \"echo /path/to/home >\" as a prompt:\n        // echo /path/to/home > t.exe\n        begin: /^\\s{0,3}[/~\\w\\d[\\]()@-]*[>%$#][ ]?/,\n        starts: {\n          end: /[^\\\\](?=\\s*$)/,\n          subLanguage: 'bash'\n        }\n      }\n    ]\n  };\n}\n\nmodule.exports = shell;\n","/*\nLanguage: Smali\nAuthor: Dennis Titze <dennis.titze@gmail.com>\nDescription: Basic Smali highlighting\nWebsite: https://github.com/JesusFreke/smali\nCategory: assembler\n*/\n\nfunction smali(hljs) {\n  const smali_instr_low_prio = [\n    'add',\n    'and',\n    'cmp',\n    'cmpg',\n    'cmpl',\n    'const',\n    'div',\n    'double',\n    'float',\n    'goto',\n    'if',\n    'int',\n    'long',\n    'move',\n    'mul',\n    'neg',\n    'new',\n    'nop',\n    'not',\n    'or',\n    'rem',\n    'return',\n    'shl',\n    'shr',\n    'sput',\n    'sub',\n    'throw',\n    'ushr',\n    'xor'\n  ];\n  const smali_instr_high_prio = [\n    'aget',\n    'aput',\n    'array',\n    'check',\n    'execute',\n    'fill',\n    'filled',\n    'goto/16',\n    'goto/32',\n    'iget',\n    'instance',\n    'invoke',\n    'iput',\n    'monitor',\n    'packed',\n    'sget',\n    'sparse'\n  ];\n  const smali_keywords = [\n    'transient',\n    'constructor',\n    'abstract',\n    'final',\n    'synthetic',\n    'public',\n    'private',\n    'protected',\n    'static',\n    'bridge',\n    'system'\n  ];\n  return {\n    name: 'Smali',\n    contains: [\n      {\n        className: 'string',\n        begin: '\"',\n        end: '\"',\n        relevance: 0\n      },\n      hljs.COMMENT(\n        '#',\n        '$',\n        { relevance: 0 }\n      ),\n      {\n        className: 'keyword',\n        variants: [\n          { begin: '\\\\s*\\\\.end\\\\s[a-zA-Z0-9]*' },\n          {\n            begin: '^[ ]*\\\\.[a-zA-Z]*',\n            relevance: 0\n          },\n          {\n            begin: '\\\\s:[a-zA-Z_0-9]*',\n            relevance: 0\n          },\n          { begin: '\\\\s(' + smali_keywords.join('|') + ')' }\n        ]\n      },\n      {\n        className: 'built_in',\n        variants: [\n          { begin: '\\\\s(' + smali_instr_low_prio.join('|') + ')\\\\s' },\n          {\n            begin: '\\\\s(' + smali_instr_low_prio.join('|') + ')((-|/)[a-zA-Z0-9]+)+\\\\s',\n            relevance: 10\n          },\n          {\n            begin: '\\\\s(' + smali_instr_high_prio.join('|') + ')((-|/)[a-zA-Z0-9]+)*\\\\s',\n            relevance: 10\n          }\n        ]\n      },\n      {\n        className: 'class',\n        begin: 'L[^\\(;:\\n]*;',\n        relevance: 0\n      },\n      { begin: '[vp][0-9]+' }\n    ]\n  };\n}\n\nmodule.exports = smali;\n","/*\nLanguage: Smalltalk\nDescription: Smalltalk is an object-oriented, dynamically typed reflective programming language.\nAuthor: Vladimir Gubarkov <xonixx@gmail.com>\nWebsite: https://en.wikipedia.org/wiki/Smalltalk\nCategory: system\n*/\n\nfunction smalltalk(hljs) {\n  const VAR_IDENT_RE = '[a-z][a-zA-Z0-9_]*';\n  const CHAR = {\n    className: 'string',\n    begin: '\\\\$.{1}'\n  };\n  const SYMBOL = {\n    className: 'symbol',\n    begin: '#' + hljs.UNDERSCORE_IDENT_RE\n  };\n  return {\n    name: 'Smalltalk',\n    aliases: [ 'st' ],\n    keywords: [\n      \"self\",\n      \"super\",\n      \"nil\",\n      \"true\",\n      \"false\",\n      \"thisContext\"\n    ],\n    contains: [\n      hljs.COMMENT('\"', '\"'),\n      hljs.APOS_STRING_MODE,\n      {\n        className: 'type',\n        begin: '\\\\b[A-Z][A-Za-z0-9_]*',\n        relevance: 0\n      },\n      {\n        begin: VAR_IDENT_RE + ':',\n        relevance: 0\n      },\n      hljs.C_NUMBER_MODE,\n      SYMBOL,\n      CHAR,\n      {\n        // This looks more complicated than needed to avoid combinatorial\n        // explosion under V8. It effectively means `| var1 var2 ... |` with\n        // whitespace adjacent to `|` being optional.\n        begin: '\\\\|[ ]*' + VAR_IDENT_RE + '([ ]+' + VAR_IDENT_RE + ')*[ ]*\\\\|',\n        returnBegin: true,\n        end: /\\|/,\n        illegal: /\\S/,\n        contains: [ { begin: '(\\\\|[ ]*)?' + VAR_IDENT_RE } ]\n      },\n      {\n        begin: '#\\\\(',\n        end: '\\\\)',\n        contains: [\n          hljs.APOS_STRING_MODE,\n          CHAR,\n          hljs.C_NUMBER_MODE,\n          SYMBOL\n        ]\n      }\n    ]\n  };\n}\n\nmodule.exports = smalltalk;\n","/*\nLanguage: SML (Standard ML)\nAuthor: Edwin Dalorzo <edwin@dalorzo.org>\nDescription: SML language definition.\nWebsite: https://www.smlnj.org\nOrigin: ocaml.js\nCategory: functional\n*/\nfunction sml(hljs) {\n  return {\n    name: 'SML (Standard ML)',\n    aliases: [ 'ml' ],\n    keywords: {\n      $pattern: '[a-z_]\\\\w*!?',\n      keyword:\n        /* according to Definition of Standard ML 97  */\n        'abstype and andalso as case datatype do else end eqtype '\n        + 'exception fn fun functor handle if in include infix infixr '\n        + 'let local nonfix of op open orelse raise rec sharing sig '\n        + 'signature struct structure then type val with withtype where while',\n      built_in:\n        /* built-in types according to basis library */\n        'array bool char exn int list option order real ref string substring vector unit word',\n      literal:\n        'true false NONE SOME LESS EQUAL GREATER nil'\n    },\n    illegal: /\\/\\/|>>/,\n    contains: [\n      {\n        className: 'literal',\n        begin: /\\[(\\|\\|)?\\]|\\(\\)/,\n        relevance: 0\n      },\n      hljs.COMMENT(\n        '\\\\(\\\\*',\n        '\\\\*\\\\)',\n        { contains: [ 'self' ] }\n      ),\n      { /* type variable */\n        className: 'symbol',\n        begin: '\\'[A-Za-z_](?!\\')[\\\\w\\']*'\n        /* the grammar is ambiguous on how 'a'b should be interpreted but not the compiler */\n      },\n      { /* polymorphic variant */\n        className: 'type',\n        begin: '`[A-Z][\\\\w\\']*'\n      },\n      { /* module or constructor */\n        className: 'type',\n        begin: '\\\\b[A-Z][\\\\w\\']*',\n        relevance: 0\n      },\n      { /* don't color identifiers, but safely catch all identifiers with ' */\n        begin: '[a-z_]\\\\w*\\'[\\\\w\\']*' },\n      hljs.inherit(hljs.APOS_STRING_MODE, {\n        className: 'string',\n        relevance: 0\n      }),\n      hljs.inherit(hljs.QUOTE_STRING_MODE, { illegal: null }),\n      {\n        className: 'number',\n        begin:\n          '\\\\b(0[xX][a-fA-F0-9_]+[Lln]?|'\n          + '0[oO][0-7_]+[Lln]?|'\n          + '0[bB][01_]+[Lln]?|'\n          + '[0-9][0-9_]*([Lln]|(\\\\.[0-9_]*)?([eE][-+]?[0-9_]+)?)?)',\n        relevance: 0\n      },\n      { begin: /[-=]>/ // relevance booster\n      }\n    ]\n  };\n}\n\nmodule.exports = sml;\n","/*\nLanguage: SQF\nAuthor: Søren Enevoldsen <senevoldsen90@gmail.com>\nContributors: Marvin Saignat <contact@zgmrvn.com>, Dedmen Miller <dedmen@dedmen.de>, Leopard20\nDescription: Scripting language for the Arma game series\nWebsite: https://community.bistudio.com/wiki/SQF_syntax\nCategory: scripting\nLast update: 07.01.2023, Arma 3 v2.11\n*/\n\n/*\n////////////////////////////////////////////////////////////////////////////////////////////\n  * Author: Leopard20\n  \n  * Description:\n  This script can be used to dump all commands to the clipboard.\n  Make sure you're using the Diag EXE to dump all of the commands.\n  \n  * How to use:\n  Simply replace the _KEYWORDS and _LITERAL arrays with the one from this sqf.js file.\n  Execute the script from the debug console.\n  All commands will be copied to the clipboard.\n////////////////////////////////////////////////////////////////////////////////////////////\n_KEYWORDS = ['if'];                                                //Array of all KEYWORDS\n_LITERALS = ['west'];                                              //Array of all LITERALS\n_allCommands = createHashMap;\n{\n  _type = _x select [0,1];\n  if (_type != \"t\") then {\n    _command_lowercase = ((_x select [2]) splitString \" \")#((([\"n\", \"u\", \"b\"] find _type) - 1) max 0);\n    _command_uppercase = supportInfo (\"i:\" + _command_lowercase) # 0 # 2;\n    _allCommands set [_command_lowercase, _command_uppercase];\n  };\n} forEach supportInfo \"\";\n_allCommands = _allCommands toArray false;\n_allCommands sort true;                                            //sort by lowercase\n_allCommands = ((_allCommands apply {_x#1}) -_KEYWORDS)-_LITERALS; //remove KEYWORDS and LITERALS\ncopyToClipboard (str (_allCommands select {_x regexMatch \"\\w+\"}) regexReplace [\"\"\"\", \"'\"] regexReplace [\",\", \",\\n\"]);\n*/\n\nfunction sqf(hljs) {\n  // In SQF, a local variable starts with _\n  const VARIABLE = {\n    className: 'variable',\n    begin: /\\b_+[a-zA-Z]\\w*/\n  };\n\n  // In SQF, a function should fit myTag_fnc_myFunction pattern\n  // https://community.bistudio.com/wiki/Functions_Library_(Arma_3)#Adding_a_Function\n  const FUNCTION = {\n    className: 'title',\n    begin: /[a-zA-Z][a-zA-Z_0-9]*_fnc_[a-zA-Z_0-9]+/\n  };\n\n  // In SQF strings, quotes matching the start are escaped by adding a consecutive.\n  // Example of single escaped quotes: \" \"\" \" and  ' '' '.\n  const STRINGS = {\n    className: 'string',\n    variants: [\n      {\n        begin: '\"',\n        end: '\"',\n        contains: [\n          {\n            begin: '\"\"',\n            relevance: 0\n          }\n        ]\n      },\n      {\n        begin: '\\'',\n        end: '\\'',\n        contains: [\n          {\n            begin: '\\'\\'',\n            relevance: 0\n          }\n        ]\n      }\n    ]\n  };\n\n  const KEYWORDS = [\n    'break',\n    'breakWith',\n    'breakOut',\n    'breakTo',\n    'case',\n    'catch',\n    'continue',\n    'continueWith',\n    'default',\n    'do',\n    'else',\n    'exit',\n    'exitWith',\n    'for',\n    'forEach',\n    'from',\n    'if',\n    'local',\n    'private',\n    'switch',\n    'step',\n    'then',\n    'throw',\n    'to',\n    'try',\n    'waitUntil',\n    'while',\n    'with'\n  ];\n\n  const LITERAL = [\n    'blufor',\n    'civilian',\n    'configNull',\n    'controlNull',\n    'displayNull',\n    'diaryRecordNull',\n    'east',\n    'endl',\n    'false',\n    'grpNull',\n    'independent',\n    'lineBreak',\n    'locationNull',\n    'nil',\n    'objNull',\n    'opfor',\n    'pi',\n    'resistance',\n    'scriptNull',\n    'sideAmbientLife',\n    'sideEmpty',\n    'sideEnemy',\n    'sideFriendly',\n    'sideLogic',\n    'sideUnknown',\n    'taskNull',\n    'teamMemberNull',\n    'true',\n    'west'\n  ];\n\n  const BUILT_IN = [\n    'abs',\n    'accTime',\n    'acos',\n    'action',\n    'actionIDs',\n    'actionKeys',\n    'actionKeysEx',\n    'actionKeysImages',\n    'actionKeysNames',\n    'actionKeysNamesArray',\n    'actionName',\n    'actionParams',\n    'activateAddons',\n    'activatedAddons',\n    'activateKey',\n    'activeTitleEffectParams',\n    'add3DENConnection',\n    'add3DENEventHandler',\n    'add3DENLayer',\n    'addAction',\n    'addBackpack',\n    'addBackpackCargo',\n    'addBackpackCargoGlobal',\n    'addBackpackGlobal',\n    'addBinocularItem',\n    'addCamShake',\n    'addCuratorAddons',\n    'addCuratorCameraArea',\n    'addCuratorEditableObjects',\n    'addCuratorEditingArea',\n    'addCuratorPoints',\n    'addEditorObject',\n    'addEventHandler',\n    'addForce',\n    'addForceGeneratorRTD',\n    'addGoggles',\n    'addGroupIcon',\n    'addHandgunItem',\n    'addHeadgear',\n    'addItem',\n    'addItemCargo',\n    'addItemCargoGlobal',\n    'addItemPool',\n    'addItemToBackpack',\n    'addItemToUniform',\n    'addItemToVest',\n    'addLiveStats',\n    'addMagazine',\n    'addMagazineAmmoCargo',\n    'addMagazineCargo',\n    'addMagazineCargoGlobal',\n    'addMagazineGlobal',\n    'addMagazinePool',\n    'addMagazines',\n    'addMagazineTurret',\n    'addMenu',\n    'addMenuItem',\n    'addMissionEventHandler',\n    'addMPEventHandler',\n    'addMusicEventHandler',\n    'addonFiles',\n    'addOwnedMine',\n    'addPlayerScores',\n    'addPrimaryWeaponItem',\n    'addPublicVariableEventHandler',\n    'addRating',\n    'addResources',\n    'addScore',\n    'addScoreSide',\n    'addSecondaryWeaponItem',\n    'addSwitchableUnit',\n    'addTeamMember',\n    'addToRemainsCollector',\n    'addTorque',\n    'addUniform',\n    'addUserActionEventHandler',\n    'addVehicle',\n    'addVest',\n    'addWaypoint',\n    'addWeapon',\n    'addWeaponCargo',\n    'addWeaponCargoGlobal',\n    'addWeaponGlobal',\n    'addWeaponItem',\n    'addWeaponPool',\n    'addWeaponTurret',\n    'addWeaponWithAttachmentsCargo',\n    'addWeaponWithAttachmentsCargoGlobal',\n    'admin',\n    'agent',\n    'agents',\n    'AGLToASL',\n    'aimedAtTarget',\n    'aimPos',\n    'airDensityCurveRTD',\n    'airDensityRTD',\n    'airplaneThrottle',\n    'airportSide',\n    'AISFinishHeal',\n    'alive',\n    'all3DENEntities',\n    'allActiveTitleEffects',\n    'allAddonsInfo',\n    'allAirports',\n    'allControls',\n    'allCurators',\n    'allCutLayers',\n    'allDead',\n    'allDeadMen',\n    'allDiaryRecords',\n    'allDiarySubjects',\n    'allDisplays',\n    'allEnv3DSoundSources',\n    'allGroups',\n    'allLODs',\n    'allMapMarkers',\n    'allMines',\n    'allMissionObjects',\n    'allObjects',\n    'allow3DMode',\n    'allowCrewInImmobile',\n    'allowCuratorLogicIgnoreAreas',\n    'allowDamage',\n    'allowDammage',\n    'allowedService',\n    'allowFileOperations',\n    'allowFleeing',\n    'allowGetIn',\n    'allowService',\n    'allowSprint',\n    'allPlayers',\n    'allSimpleObjects',\n    'allSites',\n    'allTurrets',\n    'allUnits',\n    'allUnitsUAV',\n    'allUsers',\n    'allVariables',\n    'ambientTemperature',\n    'ammo',\n    'ammoOnPylon',\n    'and',\n    'animate',\n    'animateBay',\n    'animateDoor',\n    'animatePylon',\n    'animateSource',\n    'animationNames',\n    'animationPhase',\n    'animationSourcePhase',\n    'animationState',\n    'apertureParams',\n    'append',\n    'apply',\n    'armoryPoints',\n    'arrayIntersect',\n    'asin',\n    'ASLToAGL',\n    'ASLToATL',\n    'assert',\n    'assignAsCargo',\n    'assignAsCargoIndex',\n    'assignAsCommander',\n    'assignAsDriver',\n    'assignAsGunner',\n    'assignAsTurret',\n    'assignCurator',\n    'assignedCargo',\n    'assignedCommander',\n    'assignedDriver',\n    'assignedGroup',\n    'assignedGunner',\n    'assignedItems',\n    'assignedTarget',\n    'assignedTeam',\n    'assignedVehicle',\n    'assignedVehicleRole',\n    'assignedVehicles',\n    'assignItem',\n    'assignTeam',\n    'assignToAirport',\n    'atan',\n    'atan2',\n    'atg',\n    'ATLToASL',\n    'attachedObject',\n    'attachedObjects',\n    'attachedTo',\n    'attachObject',\n    'attachTo',\n    'attackEnabled',\n    'awake',\n    'backpack',\n    'backpackCargo',\n    'backpackContainer',\n    'backpackItems',\n    'backpackMagazines',\n    'backpackSpaceFor',\n    'behaviour',\n    'benchmark',\n    'bezierInterpolation',\n    'binocular',\n    'binocularItems',\n    'binocularMagazine',\n    'boundingBox',\n    'boundingBoxReal',\n    'boundingCenter',\n    'brakesDisabled',\n    'briefingName',\n    'buildingExit',\n    'buildingPos',\n    'buldozer_EnableRoadDiag',\n    'buldozer_IsEnabledRoadDiag',\n    'buldozer_LoadNewRoads',\n    'buldozer_reloadOperMap',\n    'buttonAction',\n    'buttonSetAction',\n    'cadetMode',\n    'calculatePath',\n    'calculatePlayerVisibilityByFriendly',\n    'call',\n    'callExtension',\n    'camCommand',\n    'camCommit',\n    'camCommitPrepared',\n    'camCommitted',\n    'camConstuctionSetParams',\n    'camCreate',\n    'camDestroy',\n    'cameraEffect',\n    'cameraEffectEnableHUD',\n    'cameraInterest',\n    'cameraOn',\n    'cameraView',\n    'campaignConfigFile',\n    'camPreload',\n    'camPreloaded',\n    'camPrepareBank',\n    'camPrepareDir',\n    'camPrepareDive',\n    'camPrepareFocus',\n    'camPrepareFov',\n    'camPrepareFovRange',\n    'camPreparePos',\n    'camPrepareRelPos',\n    'camPrepareTarget',\n    'camSetBank',\n    'camSetDir',\n    'camSetDive',\n    'camSetFocus',\n    'camSetFov',\n    'camSetFovRange',\n    'camSetPos',\n    'camSetRelPos',\n    'camSetTarget',\n    'camTarget',\n    'camUseNVG',\n    'canAdd',\n    'canAddItemToBackpack',\n    'canAddItemToUniform',\n    'canAddItemToVest',\n    'cancelSimpleTaskDestination',\n    'canDeployWeapon',\n    'canFire',\n    'canMove',\n    'canSlingLoad',\n    'canStand',\n    'canSuspend',\n    'canTriggerDynamicSimulation',\n    'canUnloadInCombat',\n    'canVehicleCargo',\n    'captive',\n    'captiveNum',\n    'cbChecked',\n    'cbSetChecked',\n    'ceil',\n    'channelEnabled',\n    'cheatsEnabled',\n    'checkAIFeature',\n    'checkVisibility',\n    'className',\n    'clear3DENAttribute',\n    'clear3DENInventory',\n    'clearAllItemsFromBackpack',\n    'clearBackpackCargo',\n    'clearBackpackCargoGlobal',\n    'clearForcesRTD',\n    'clearGroupIcons',\n    'clearItemCargo',\n    'clearItemCargoGlobal',\n    'clearItemPool',\n    'clearMagazineCargo',\n    'clearMagazineCargoGlobal',\n    'clearMagazinePool',\n    'clearOverlay',\n    'clearRadio',\n    'clearWeaponCargo',\n    'clearWeaponCargoGlobal',\n    'clearWeaponPool',\n    'clientOwner',\n    'closeDialog',\n    'closeDisplay',\n    'closeOverlay',\n    'collapseObjectTree',\n    'collect3DENHistory',\n    'collectiveRTD',\n    'collisionDisabledWith',\n    'combatBehaviour',\n    'combatMode',\n    'commandArtilleryFire',\n    'commandChat',\n    'commander',\n    'commandFire',\n    'commandFollow',\n    'commandFSM',\n    'commandGetOut',\n    'commandingMenu',\n    'commandMove',\n    'commandRadio',\n    'commandStop',\n    'commandSuppressiveFire',\n    'commandTarget',\n    'commandWatch',\n    'comment',\n    'commitOverlay',\n    'compatibleItems',\n    'compatibleMagazines',\n    'compile',\n    'compileFinal',\n    'compileScript',\n    'completedFSM',\n    'composeText',\n    'configClasses',\n    'configFile',\n    'configHierarchy',\n    'configName',\n    'configOf',\n    'configProperties',\n    'configSourceAddonList',\n    'configSourceMod',\n    'configSourceModList',\n    'confirmSensorTarget',\n    'connectTerminalToUAV',\n    'connectToServer',\n    'controlsGroupCtrl',\n    'conversationDisabled',\n    'copyFromClipboard',\n    'copyToClipboard',\n    'copyWaypoints',\n    'cos',\n    'count',\n    'countEnemy',\n    'countFriendly',\n    'countSide',\n    'countType',\n    'countUnknown',\n    'create3DENComposition',\n    'create3DENEntity',\n    'createAgent',\n    'createCenter',\n    'createDialog',\n    'createDiaryLink',\n    'createDiaryRecord',\n    'createDiarySubject',\n    'createDisplay',\n    'createGearDialog',\n    'createGroup',\n    'createGuardedPoint',\n    'createHashMap',\n    'createHashMapFromArray',\n    'createLocation',\n    'createMarker',\n    'createMarkerLocal',\n    'createMenu',\n    'createMine',\n    'createMissionDisplay',\n    'createMPCampaignDisplay',\n    'createSimpleObject',\n    'createSimpleTask',\n    'createSite',\n    'createSoundSource',\n    'createTask',\n    'createTeam',\n    'createTrigger',\n    'createUnit',\n    'createVehicle',\n    'createVehicleCrew',\n    'createVehicleLocal',\n    'crew',\n    'ctAddHeader',\n    'ctAddRow',\n    'ctClear',\n    'ctCurSel',\n    'ctData',\n    'ctFindHeaderRows',\n    'ctFindRowHeader',\n    'ctHeaderControls',\n    'ctHeaderCount',\n    'ctRemoveHeaders',\n    'ctRemoveRows',\n    'ctrlActivate',\n    'ctrlAddEventHandler',\n    'ctrlAngle',\n    'ctrlAnimateModel',\n    'ctrlAnimationPhaseModel',\n    'ctrlAt',\n    'ctrlAutoScrollDelay',\n    'ctrlAutoScrollRewind',\n    'ctrlAutoScrollSpeed',\n    'ctrlBackgroundColor',\n    'ctrlChecked',\n    'ctrlClassName',\n    'ctrlCommit',\n    'ctrlCommitted',\n    'ctrlCreate',\n    'ctrlDelete',\n    'ctrlEnable',\n    'ctrlEnabled',\n    'ctrlFade',\n    'ctrlFontHeight',\n    'ctrlForegroundColor',\n    'ctrlHTMLLoaded',\n    'ctrlIDC',\n    'ctrlIDD',\n    'ctrlMapAnimAdd',\n    'ctrlMapAnimClear',\n    'ctrlMapAnimCommit',\n    'ctrlMapAnimDone',\n    'ctrlMapCursor',\n    'ctrlMapMouseOver',\n    'ctrlMapPosition',\n    'ctrlMapScale',\n    'ctrlMapScreenToWorld',\n    'ctrlMapSetPosition',\n    'ctrlMapWorldToScreen',\n    'ctrlModel',\n    'ctrlModelDirAndUp',\n    'ctrlModelScale',\n    'ctrlMousePosition',\n    'ctrlParent',\n    'ctrlParentControlsGroup',\n    'ctrlPosition',\n    'ctrlRemoveAllEventHandlers',\n    'ctrlRemoveEventHandler',\n    'ctrlScale',\n    'ctrlScrollValues',\n    'ctrlSetActiveColor',\n    'ctrlSetAngle',\n    'ctrlSetAutoScrollDelay',\n    'ctrlSetAutoScrollRewind',\n    'ctrlSetAutoScrollSpeed',\n    'ctrlSetBackgroundColor',\n    'ctrlSetChecked',\n    'ctrlSetDisabledColor',\n    'ctrlSetEventHandler',\n    'ctrlSetFade',\n    'ctrlSetFocus',\n    'ctrlSetFont',\n    'ctrlSetFontH1',\n    'ctrlSetFontH1B',\n    'ctrlSetFontH2',\n    'ctrlSetFontH2B',\n    'ctrlSetFontH3',\n    'ctrlSetFontH3B',\n    'ctrlSetFontH4',\n    'ctrlSetFontH4B',\n    'ctrlSetFontH5',\n    'ctrlSetFontH5B',\n    'ctrlSetFontH6',\n    'ctrlSetFontH6B',\n    'ctrlSetFontHeight',\n    'ctrlSetFontHeightH1',\n    'ctrlSetFontHeightH2',\n    'ctrlSetFontHeightH3',\n    'ctrlSetFontHeightH4',\n    'ctrlSetFontHeightH5',\n    'ctrlSetFontHeightH6',\n    'ctrlSetFontHeightSecondary',\n    'ctrlSetFontP',\n    'ctrlSetFontPB',\n    'ctrlSetFontSecondary',\n    'ctrlSetForegroundColor',\n    'ctrlSetModel',\n    'ctrlSetModelDirAndUp',\n    'ctrlSetModelScale',\n    'ctrlSetMousePosition',\n    'ctrlSetPixelPrecision',\n    'ctrlSetPosition',\n    'ctrlSetPositionH',\n    'ctrlSetPositionW',\n    'ctrlSetPositionX',\n    'ctrlSetPositionY',\n    'ctrlSetScale',\n    'ctrlSetScrollValues',\n    'ctrlSetShadow',\n    'ctrlSetStructuredText',\n    'ctrlSetText',\n    'ctrlSetTextColor',\n    'ctrlSetTextColorSecondary',\n    'ctrlSetTextSecondary',\n    'ctrlSetTextSelection',\n    'ctrlSetTooltip',\n    'ctrlSetTooltipColorBox',\n    'ctrlSetTooltipColorShade',\n    'ctrlSetTooltipColorText',\n    'ctrlSetTooltipMaxWidth',\n    'ctrlSetURL',\n    'ctrlSetURLOverlayMode',\n    'ctrlShadow',\n    'ctrlShow',\n    'ctrlShown',\n    'ctrlStyle',\n    'ctrlText',\n    'ctrlTextColor',\n    'ctrlTextHeight',\n    'ctrlTextSecondary',\n    'ctrlTextSelection',\n    'ctrlTextWidth',\n    'ctrlTooltip',\n    'ctrlType',\n    'ctrlURL',\n    'ctrlURLOverlayMode',\n    'ctrlVisible',\n    'ctRowControls',\n    'ctRowCount',\n    'ctSetCurSel',\n    'ctSetData',\n    'ctSetHeaderTemplate',\n    'ctSetRowTemplate',\n    'ctSetValue',\n    'ctValue',\n    'curatorAddons',\n    'curatorCamera',\n    'curatorCameraArea',\n    'curatorCameraAreaCeiling',\n    'curatorCoef',\n    'curatorEditableObjects',\n    'curatorEditingArea',\n    'curatorEditingAreaType',\n    'curatorMouseOver',\n    'curatorPoints',\n    'curatorRegisteredObjects',\n    'curatorSelected',\n    'curatorWaypointCost',\n    'current3DENOperation',\n    'currentChannel',\n    'currentCommand',\n    'currentMagazine',\n    'currentMagazineDetail',\n    'currentMagazineDetailTurret',\n    'currentMagazineTurret',\n    'currentMuzzle',\n    'currentNamespace',\n    'currentPilot',\n    'currentTask',\n    'currentTasks',\n    'currentThrowable',\n    'currentVisionMode',\n    'currentWaypoint',\n    'currentWeapon',\n    'currentWeaponMode',\n    'currentWeaponTurret',\n    'currentZeroing',\n    'cursorObject',\n    'cursorTarget',\n    'customChat',\n    'customRadio',\n    'customWaypointPosition',\n    'cutFadeOut',\n    'cutObj',\n    'cutRsc',\n    'cutText',\n    'damage',\n    'date',\n    'dateToNumber',\n    'dayTime',\n    'deActivateKey',\n    'debriefingText',\n    'debugFSM',\n    'debugLog',\n    'decayGraphValues',\n    'deg',\n    'delete3DENEntities',\n    'deleteAt',\n    'deleteCenter',\n    'deleteCollection',\n    'deleteEditorObject',\n    'deleteGroup',\n    'deleteGroupWhenEmpty',\n    'deleteIdentity',\n    'deleteLocation',\n    'deleteMarker',\n    'deleteMarkerLocal',\n    'deleteRange',\n    'deleteResources',\n    'deleteSite',\n    'deleteStatus',\n    'deleteTeam',\n    'deleteVehicle',\n    'deleteVehicleCrew',\n    'deleteWaypoint',\n    'detach',\n    'detectedMines',\n    'diag_activeMissionFSMs',\n    'diag_activeScripts',\n    'diag_activeSQFScripts',\n    'diag_activeSQSScripts',\n    'diag_allMissionEventHandlers',\n    'diag_captureFrame',\n    'diag_captureFrameToFile',\n    'diag_captureSlowFrame',\n    'diag_codePerformance',\n    'diag_deltaTime',\n    'diag_drawmode',\n    'diag_dumpCalltraceToLog',\n    'diag_dumpScriptAssembly',\n    'diag_dumpTerrainSynth',\n    'diag_dynamicSimulationEnd',\n    'diag_enable',\n    'diag_enabled',\n    'diag_exportConfig',\n    'diag_exportTerrainSVG',\n    'diag_fps',\n    'diag_fpsmin',\n    'diag_frameno',\n    'diag_getTerrainSegmentOffset',\n    'diag_lightNewLoad',\n    'diag_list',\n    'diag_localized',\n    'diag_log',\n    'diag_logSlowFrame',\n    'diag_mergeConfigFile',\n    'diag_recordTurretLimits',\n    'diag_resetFSM',\n    'diag_resetshapes',\n    'diag_scope',\n    'diag_setLightNew',\n    'diag_stacktrace',\n    'diag_tickTime',\n    'diag_toggle',\n    'dialog',\n    'diarySubjectExists',\n    'didJIP',\n    'didJIPOwner',\n    'difficulty',\n    'difficultyEnabled',\n    'difficultyEnabledRTD',\n    'difficultyOption',\n    'direction',\n    'directionStabilizationEnabled',\n    'directSay',\n    'disableAI',\n    'disableBrakes',\n    'disableCollisionWith',\n    'disableConversation',\n    'disableDebriefingStats',\n    'disableMapIndicators',\n    'disableNVGEquipment',\n    'disableRemoteSensors',\n    'disableSerialization',\n    'disableTIEquipment',\n    'disableUAVConnectability',\n    'disableUserInput',\n    'displayAddEventHandler',\n    'displayChild',\n    'displayCtrl',\n    'displayParent',\n    'displayRemoveAllEventHandlers',\n    'displayRemoveEventHandler',\n    'displaySetEventHandler',\n    'displayUniqueName',\n    'displayUpdate',\n    'dissolveTeam',\n    'distance',\n    'distance2D',\n    'distanceSqr',\n    'distributionRegion',\n    'do3DENAction',\n    'doArtilleryFire',\n    'doFire',\n    'doFollow',\n    'doFSM',\n    'doGetOut',\n    'doMove',\n    'doorPhase',\n    'doStop',\n    'doSuppressiveFire',\n    'doTarget',\n    'doWatch',\n    'drawArrow',\n    'drawEllipse',\n    'drawIcon',\n    'drawIcon3D',\n    'drawLaser',\n    'drawLine',\n    'drawLine3D',\n    'drawLink',\n    'drawLocation',\n    'drawPolygon',\n    'drawRectangle',\n    'drawTriangle',\n    'driver',\n    'drop',\n    'dynamicSimulationDistance',\n    'dynamicSimulationDistanceCoef',\n    'dynamicSimulationEnabled',\n    'dynamicSimulationSystemEnabled',\n    'echo',\n    'edit3DENMissionAttributes',\n    'editObject',\n    'editorSetEventHandler',\n    'effectiveCommander',\n    'elevatePeriscope',\n    'emptyPositions',\n    'enableAI',\n    'enableAIFeature',\n    'enableAimPrecision',\n    'enableAttack',\n    'enableAudioFeature',\n    'enableAutoStartUpRTD',\n    'enableAutoTrimRTD',\n    'enableCamShake',\n    'enableCaustics',\n    'enableChannel',\n    'enableCollisionWith',\n    'enableCopilot',\n    'enableDebriefingStats',\n    'enableDiagLegend',\n    'enableDirectionStabilization',\n    'enableDynamicSimulation',\n    'enableDynamicSimulationSystem',\n    'enableEndDialog',\n    'enableEngineArtillery',\n    'enableEnvironment',\n    'enableFatigue',\n    'enableGunLights',\n    'enableInfoPanelComponent',\n    'enableIRLasers',\n    'enableMimics',\n    'enablePersonTurret',\n    'enableRadio',\n    'enableReload',\n    'enableRopeAttach',\n    'enableSatNormalOnDetail',\n    'enableSaving',\n    'enableSentences',\n    'enableSimulation',\n    'enableSimulationGlobal',\n    'enableStamina',\n    'enableStressDamage',\n    'enableTeamSwitch',\n    'enableTraffic',\n    'enableUAVConnectability',\n    'enableUAVWaypoints',\n    'enableVehicleCargo',\n    'enableVehicleSensor',\n    'enableWeaponDisassembly',\n    'endLoadingScreen',\n    'endMission',\n    'engineOn',\n    'enginesIsOnRTD',\n    'enginesPowerRTD',\n    'enginesRpmRTD',\n    'enginesTorqueRTD',\n    'entities',\n    'environmentEnabled',\n    'environmentVolume',\n    'equipmentDisabled',\n    'estimatedEndServerTime',\n    'estimatedTimeLeft',\n    'evalObjectArgument',\n    'everyBackpack',\n    'everyContainer',\n    'exec',\n    'execEditorScript',\n    'execFSM',\n    'execVM',\n    'exp',\n    'expectedDestination',\n    'exportJIPMessages',\n    'eyeDirection',\n    'eyePos',\n    'face',\n    'faction',\n    'fadeEnvironment',\n    'fadeMusic',\n    'fadeRadio',\n    'fadeSound',\n    'fadeSpeech',\n    'failMission',\n    'fileExists',\n    'fillWeaponsFromPool',\n    'find',\n    'findAny',\n    'findCover',\n    'findDisplay',\n    'findEditorObject',\n    'findEmptyPosition',\n    'findEmptyPositionReady',\n    'findIf',\n    'findNearestEnemy',\n    'finishMissionInit',\n    'finite',\n    'fire',\n    'fireAtTarget',\n    'firstBackpack',\n    'flag',\n    'flagAnimationPhase',\n    'flagOwner',\n    'flagSide',\n    'flagTexture',\n    'flatten',\n    'fleeing',\n    'floor',\n    'flyInHeight',\n    'flyInHeightASL',\n    'focusedCtrl',\n    'fog',\n    'fogForecast',\n    'fogParams',\n    'forceAddUniform',\n    'forceAtPositionRTD',\n    'forceCadetDifficulty',\n    'forcedMap',\n    'forceEnd',\n    'forceFlagTexture',\n    'forceFollowRoad',\n    'forceGeneratorRTD',\n    'forceMap',\n    'forceRespawn',\n    'forceSpeed',\n    'forceUnicode',\n    'forceWalk',\n    'forceWeaponFire',\n    'forceWeatherChange',\n    'forEachMember',\n    'forEachMemberAgent',\n    'forEachMemberTeam',\n    'forgetTarget',\n    'format',\n    'formation',\n    'formationDirection',\n    'formationLeader',\n    'formationMembers',\n    'formationPosition',\n    'formationTask',\n    'formatText',\n    'formLeader',\n    'freeExtension',\n    'freeLook',\n    'fromEditor',\n    'fuel',\n    'fullCrew',\n    'gearIDCAmmoCount',\n    'gearSlotAmmoCount',\n    'gearSlotData',\n    'gestureState',\n    'get',\n    'get3DENActionState',\n    'get3DENAttribute',\n    'get3DENCamera',\n    'get3DENConnections',\n    'get3DENEntity',\n    'get3DENEntityID',\n    'get3DENGrid',\n    'get3DENIconsVisible',\n    'get3DENLayerEntities',\n    'get3DENLinesVisible',\n    'get3DENMissionAttribute',\n    'get3DENMouseOver',\n    'get3DENSelected',\n    'getAimingCoef',\n    'getAllEnv3DSoundControllers',\n    'getAllEnvSoundControllers',\n    'getAllHitPointsDamage',\n    'getAllOwnedMines',\n    'getAllPylonsInfo',\n    'getAllSoundControllers',\n    'getAllUnitTraits',\n    'getAmmoCargo',\n    'getAnimAimPrecision',\n    'getAnimSpeedCoef',\n    'getArray',\n    'getArtilleryAmmo',\n    'getArtilleryComputerSettings',\n    'getArtilleryETA',\n    'getAssetDLCInfo',\n    'getAssignedCuratorLogic',\n    'getAssignedCuratorUnit',\n    'getAttackTarget',\n    'getAudioOptionVolumes',\n    'getBackpackCargo',\n    'getBleedingRemaining',\n    'getBurningValue',\n    'getCalculatePlayerVisibilityByFriendly',\n    'getCameraViewDirection',\n    'getCargoIndex',\n    'getCenterOfMass',\n    'getClientState',\n    'getClientStateNumber',\n    'getCompatiblePylonMagazines',\n    'getConnectedUAV',\n    'getConnectedUAVUnit',\n    'getContainerMaxLoad',\n    'getCorpse',\n    'getCruiseControl',\n    'getCursorObjectParams',\n    'getCustomAimCoef',\n    'getCustomSoundController',\n    'getCustomSoundControllerCount',\n    'getDammage',\n    'getDebriefingText',\n    'getDescription',\n    'getDir',\n    'getDirVisual',\n    'getDiverState',\n    'getDLCAssetsUsage',\n    'getDLCAssetsUsageByName',\n    'getDLCs',\n    'getDLCUsageTime',\n    'getEditorCamera',\n    'getEditorMode',\n    'getEditorObjectScope',\n    'getElevationOffset',\n    'getEngineTargetRPMRTD',\n    'getEnv3DSoundController',\n    'getEnvSoundController',\n    'getEventHandlerInfo',\n    'getFatigue',\n    'getFieldManualStartPage',\n    'getForcedFlagTexture',\n    'getForcedSpeed',\n    'getFriend',\n    'getFSMVariable',\n    'getFuelCargo',\n    'getGraphValues',\n    'getGroupIcon',\n    'getGroupIconParams',\n    'getGroupIcons',\n    'getHideFrom',\n    'getHit',\n    'getHitIndex',\n    'getHitPointDamage',\n    'getItemCargo',\n    'getLighting',\n    'getLightingAt',\n    'getLoadedModsInfo',\n    'getMagazineCargo',\n    'getMarkerColor',\n    'getMarkerPos',\n    'getMarkerSize',\n    'getMarkerType',\n    'getMass',\n    'getMissionConfig',\n    'getMissionConfigValue',\n    'getMissionDLCs',\n    'getMissionLayerEntities',\n    'getMissionLayers',\n    'getMissionPath',\n    'getModelInfo',\n    'getMousePosition',\n    'getMusicPlayedTime',\n    'getNumber',\n    'getObjectArgument',\n    'getObjectChildren',\n    'getObjectDLC',\n    'getObjectFOV',\n    'getObjectID',\n    'getObjectMaterials',\n    'getObjectProxy',\n    'getObjectScale',\n    'getObjectTextures',\n    'getObjectType',\n    'getObjectViewDistance',\n    'getOpticsMode',\n    'getOrDefault',\n    'getOrDefaultCall',\n    'getOxygenRemaining',\n    'getPersonUsedDLCs',\n    'getPilotCameraDirection',\n    'getPilotCameraPosition',\n    'getPilotCameraRotation',\n    'getPilotCameraTarget',\n    'getPiPViewDistance',\n    'getPlateNumber',\n    'getPlayerChannel',\n    'getPlayerID',\n    'getPlayerScores',\n    'getPlayerUID',\n    'getPlayerVoNVolume',\n    'getPos',\n    'getPosASL',\n    'getPosASLVisual',\n    'getPosASLW',\n    'getPosATL',\n    'getPosATLVisual',\n    'getPosVisual',\n    'getPosWorld',\n    'getPosWorldVisual',\n    'getPylonMagazines',\n    'getRelDir',\n    'getRelPos',\n    'getRemoteSensorsDisabled',\n    'getRepairCargo',\n    'getResolution',\n    'getRoadInfo',\n    'getRotorBrakeRTD',\n    'getSensorTargets',\n    'getSensorThreats',\n    'getShadowDistance',\n    'getShotParents',\n    'getSlingLoad',\n    'getSoundController',\n    'getSoundControllerResult',\n    'getSpeed',\n    'getStamina',\n    'getStatValue',\n    'getSteamFriendsServers',\n    'getSubtitleOptions',\n    'getSuppression',\n    'getTerrainGrid',\n    'getTerrainHeight',\n    'getTerrainHeightASL',\n    'getTerrainInfo',\n    'getText',\n    'getTextRaw',\n    'getTextureInfo',\n    'getTextWidth',\n    'getTiParameters',\n    'getTotalDLCUsageTime',\n    'getTrimOffsetRTD',\n    'getTurretLimits',\n    'getTurretOpticsMode',\n    'getUnitFreefallInfo',\n    'getUnitLoadout',\n    'getUnitTrait',\n    'getUnloadInCombat',\n    'getUserInfo',\n    'getUserMFDText',\n    'getUserMFDValue',\n    'getVariable',\n    'getVehicleCargo',\n    'getVehicleTiPars',\n    'getWeaponCargo',\n    'getWeaponSway',\n    'getWingsOrientationRTD',\n    'getWingsPositionRTD',\n    'getWPPos',\n    'glanceAt',\n    'globalChat',\n    'globalRadio',\n    'goggles',\n    'goto',\n    'group',\n    'groupChat',\n    'groupFromNetId',\n    'groupIconSelectable',\n    'groupIconsVisible',\n    'groupID',\n    'groupOwner',\n    'groupRadio',\n    'groups',\n    'groupSelectedUnits',\n    'groupSelectUnit',\n    'gunner',\n    'gusts',\n    'halt',\n    'handgunItems',\n    'handgunMagazine',\n    'handgunWeapon',\n    'handsHit',\n    'hashValue',\n    'hasInterface',\n    'hasPilotCamera',\n    'hasWeapon',\n    'hcAllGroups',\n    'hcGroupParams',\n    'hcLeader',\n    'hcRemoveAllGroups',\n    'hcRemoveGroup',\n    'hcSelected',\n    'hcSelectGroup',\n    'hcSetGroup',\n    'hcShowBar',\n    'hcShownBar',\n    'headgear',\n    'hideBody',\n    'hideObject',\n    'hideObjectGlobal',\n    'hideSelection',\n    'hint',\n    'hintC',\n    'hintCadet',\n    'hintSilent',\n    'hmd',\n    'hostMission',\n    'htmlLoad',\n    'HUDMovementLevels',\n    'humidity',\n    'image',\n    'importAllGroups',\n    'importance',\n    'in',\n    'inArea',\n    'inAreaArray',\n    'incapacitatedState',\n    'inflame',\n    'inflamed',\n    'infoPanel',\n    'infoPanelComponentEnabled',\n    'infoPanelComponents',\n    'infoPanels',\n    'inGameUISetEventHandler',\n    'inheritsFrom',\n    'initAmbientLife',\n    'inPolygon',\n    'inputAction',\n    'inputController',\n    'inputMouse',\n    'inRangeOfArtillery',\n    'insert',\n    'insertEditorObject',\n    'intersect',\n    'is3DEN',\n    'is3DENMultiplayer',\n    'is3DENPreview',\n    'isAbleToBreathe',\n    'isActionMenuVisible',\n    'isAgent',\n    'isAimPrecisionEnabled',\n    'isAllowedCrewInImmobile',\n    'isArray',\n    'isAutoHoverOn',\n    'isAutonomous',\n    'isAutoStartUpEnabledRTD',\n    'isAutotest',\n    'isAutoTrimOnRTD',\n    'isAwake',\n    'isBleeding',\n    'isBurning',\n    'isClass',\n    'isCollisionLightOn',\n    'isCopilotEnabled',\n    'isDamageAllowed',\n    'isDedicated',\n    'isDLCAvailable',\n    'isEngineOn',\n    'isEqualRef',\n    'isEqualTo',\n    'isEqualType',\n    'isEqualTypeAll',\n    'isEqualTypeAny',\n    'isEqualTypeArray',\n    'isEqualTypeParams',\n    'isFilePatchingEnabled',\n    'isFinal',\n    'isFlashlightOn',\n    'isFlatEmpty',\n    'isForcedWalk',\n    'isFormationLeader',\n    'isGameFocused',\n    'isGamePaused',\n    'isGroupDeletedWhenEmpty',\n    'isHidden',\n    'isInRemainsCollector',\n    'isInstructorFigureEnabled',\n    'isIRLaserOn',\n    'isKeyActive',\n    'isKindOf',\n    'isLaserOn',\n    'isLightOn',\n    'isLocalized',\n    'isManualFire',\n    'isMarkedForCollection',\n    'isMissionProfileNamespaceLoaded',\n    'isMultiplayer',\n    'isMultiplayerSolo',\n    'isNil',\n    'isNotEqualRef',\n    'isNotEqualTo',\n    'isNull',\n    'isNumber',\n    'isObjectHidden',\n    'isObjectRTD',\n    'isOnRoad',\n    'isPiPEnabled',\n    'isPlayer',\n    'isRealTime',\n    'isRemoteExecuted',\n    'isRemoteExecutedJIP',\n    'isSaving',\n    'isSensorTargetConfirmed',\n    'isServer',\n    'isShowing3DIcons',\n    'isSimpleObject',\n    'isSprintAllowed',\n    'isStaminaEnabled',\n    'isSteamMission',\n    'isSteamOverlayEnabled',\n    'isStreamFriendlyUIEnabled',\n    'isStressDamageEnabled',\n    'isText',\n    'isTouchingGround',\n    'isTurnedOut',\n    'isTutHintsEnabled',\n    'isUAVConnectable',\n    'isUAVConnected',\n    'isUIContext',\n    'isUniformAllowed',\n    'isVehicleCargo',\n    'isVehicleRadarOn',\n    'isVehicleSensorEnabled',\n    'isWalking',\n    'isWeaponDeployed',\n    'isWeaponRested',\n    'itemCargo',\n    'items',\n    'itemsWithMagazines',\n    'join',\n    'joinAs',\n    'joinAsSilent',\n    'joinSilent',\n    'joinString',\n    'kbAddDatabase',\n    'kbAddDatabaseTargets',\n    'kbAddTopic',\n    'kbHasTopic',\n    'kbReact',\n    'kbRemoveTopic',\n    'kbTell',\n    'kbWasSaid',\n    'keyImage',\n    'keyName',\n    'keys',\n    'knowsAbout',\n    'land',\n    'landAt',\n    'landResult',\n    'language',\n    'laserTarget',\n    'lbAdd',\n    'lbClear',\n    'lbColor',\n    'lbColorRight',\n    'lbCurSel',\n    'lbData',\n    'lbDelete',\n    'lbIsSelected',\n    'lbPicture',\n    'lbPictureRight',\n    'lbSelection',\n    'lbSetColor',\n    'lbSetColorRight',\n    'lbSetCurSel',\n    'lbSetData',\n    'lbSetPicture',\n    'lbSetPictureColor',\n    'lbSetPictureColorDisabled',\n    'lbSetPictureColorSelected',\n    'lbSetPictureRight',\n    'lbSetPictureRightColor',\n    'lbSetPictureRightColorDisabled',\n    'lbSetPictureRightColorSelected',\n    'lbSetSelectColor',\n    'lbSetSelectColorRight',\n    'lbSetSelected',\n    'lbSetText',\n    'lbSetTextRight',\n    'lbSetTooltip',\n    'lbSetValue',\n    'lbSize',\n    'lbSort',\n    'lbSortBy',\n    'lbSortByValue',\n    'lbText',\n    'lbTextRight',\n    'lbTooltip',\n    'lbValue',\n    'leader',\n    'leaderboardDeInit',\n    'leaderboardGetRows',\n    'leaderboardInit',\n    'leaderboardRequestRowsFriends',\n    'leaderboardRequestRowsGlobal',\n    'leaderboardRequestRowsGlobalAroundUser',\n    'leaderboardsRequestUploadScore',\n    'leaderboardsRequestUploadScoreKeepBest',\n    'leaderboardState',\n    'leaveVehicle',\n    'libraryCredits',\n    'libraryDisclaimers',\n    'lifeState',\n    'lightAttachObject',\n    'lightDetachObject',\n    'lightIsOn',\n    'lightnings',\n    'limitSpeed',\n    'linearConversion',\n    'lineIntersects',\n    'lineIntersectsObjs',\n    'lineIntersectsSurfaces',\n    'lineIntersectsWith',\n    'linkItem',\n    'list',\n    'listObjects',\n    'listRemoteTargets',\n    'listVehicleSensors',\n    'ln',\n    'lnbAddArray',\n    'lnbAddColumn',\n    'lnbAddRow',\n    'lnbClear',\n    'lnbColor',\n    'lnbColorRight',\n    'lnbCurSelRow',\n    'lnbData',\n    'lnbDeleteColumn',\n    'lnbDeleteRow',\n    'lnbGetColumnsPosition',\n    'lnbPicture',\n    'lnbPictureRight',\n    'lnbSetColor',\n    'lnbSetColorRight',\n    'lnbSetColumnsPos',\n    'lnbSetCurSelRow',\n    'lnbSetData',\n    'lnbSetPicture',\n    'lnbSetPictureColor',\n    'lnbSetPictureColorRight',\n    'lnbSetPictureColorSelected',\n    'lnbSetPictureColorSelectedRight',\n    'lnbSetPictureRight',\n    'lnbSetText',\n    'lnbSetTextRight',\n    'lnbSetTooltip',\n    'lnbSetValue',\n    'lnbSize',\n    'lnbSort',\n    'lnbSortBy',\n    'lnbSortByValue',\n    'lnbText',\n    'lnbTextRight',\n    'lnbValue',\n    'load',\n    'loadAbs',\n    'loadBackpack',\n    'loadConfig',\n    'loadFile',\n    'loadGame',\n    'loadIdentity',\n    'loadMagazine',\n    'loadOverlay',\n    'loadStatus',\n    'loadUniform',\n    'loadVest',\n    'localize',\n    'localNamespace',\n    'locationPosition',\n    'lock',\n    'lockCameraTo',\n    'lockCargo',\n    'lockDriver',\n    'locked',\n    'lockedCameraTo',\n    'lockedCargo',\n    'lockedDriver',\n    'lockedInventory',\n    'lockedTurret',\n    'lockIdentity',\n    'lockInventory',\n    'lockTurret',\n    'lockWp',\n    'log',\n    'logEntities',\n    'logNetwork',\n    'logNetworkTerminate',\n    'lookAt',\n    'lookAtPos',\n    'magazineCargo',\n    'magazines',\n    'magazinesAllTurrets',\n    'magazinesAmmo',\n    'magazinesAmmoCargo',\n    'magazinesAmmoFull',\n    'magazinesDetail',\n    'magazinesDetailBackpack',\n    'magazinesDetailUniform',\n    'magazinesDetailVest',\n    'magazinesTurret',\n    'magazineTurretAmmo',\n    'mapAnimAdd',\n    'mapAnimClear',\n    'mapAnimCommit',\n    'mapAnimDone',\n    'mapCenterOnCamera',\n    'mapGridPosition',\n    'markAsFinishedOnSteam',\n    'markerAlpha',\n    'markerBrush',\n    'markerChannel',\n    'markerColor',\n    'markerDir',\n    'markerPolyline',\n    'markerPos',\n    'markerShadow',\n    'markerShape',\n    'markerSize',\n    'markerText',\n    'markerType',\n    'matrixMultiply',\n    'matrixTranspose',\n    'max',\n    'maxLoad',\n    'members',\n    'menuAction',\n    'menuAdd',\n    'menuChecked',\n    'menuClear',\n    'menuCollapse',\n    'menuData',\n    'menuDelete',\n    'menuEnable',\n    'menuEnabled',\n    'menuExpand',\n    'menuHover',\n    'menuPicture',\n    'menuSetAction',\n    'menuSetCheck',\n    'menuSetData',\n    'menuSetPicture',\n    'menuSetShortcut',\n    'menuSetText',\n    'menuSetURL',\n    'menuSetValue',\n    'menuShortcut',\n    'menuShortcutText',\n    'menuSize',\n    'menuSort',\n    'menuText',\n    'menuURL',\n    'menuValue',\n    'merge',\n    'min',\n    'mineActive',\n    'mineDetectedBy',\n    'missileTarget',\n    'missileTargetPos',\n    'missionConfigFile',\n    'missionDifficulty',\n    'missionEnd',\n    'missionName',\n    'missionNameSource',\n    'missionNamespace',\n    'missionProfileNamespace',\n    'missionStart',\n    'missionVersion',\n    'mod',\n    'modelToWorld',\n    'modelToWorldVisual',\n    'modelToWorldVisualWorld',\n    'modelToWorldWorld',\n    'modParams',\n    'moonIntensity',\n    'moonPhase',\n    'morale',\n    'move',\n    'move3DENCamera',\n    'moveInAny',\n    'moveInCargo',\n    'moveInCommander',\n    'moveInDriver',\n    'moveInGunner',\n    'moveInTurret',\n    'moveObjectToEnd',\n    'moveOut',\n    'moveTime',\n    'moveTo',\n    'moveToCompleted',\n    'moveToFailed',\n    'musicVolume',\n    'name',\n    'namedProperties',\n    'nameSound',\n    'nearEntities',\n    'nearestBuilding',\n    'nearestLocation',\n    'nearestLocations',\n    'nearestLocationWithDubbing',\n    'nearestMines',\n    'nearestObject',\n    'nearestObjects',\n    'nearestTerrainObjects',\n    'nearObjects',\n    'nearObjectsReady',\n    'nearRoads',\n    'nearSupplies',\n    'nearTargets',\n    'needReload',\n    'needService',\n    'netId',\n    'netObjNull',\n    'newOverlay',\n    'nextMenuItemIndex',\n    'nextWeatherChange',\n    'nMenuItems',\n    'not',\n    'numberOfEnginesRTD',\n    'numberToDate',\n    'objectCurators',\n    'objectFromNetId',\n    'objectParent',\n    'objStatus',\n    'onBriefingGroup',\n    'onBriefingNotes',\n    'onBriefingPlan',\n    'onBriefingTeamSwitch',\n    'onCommandModeChanged',\n    'onDoubleClick',\n    'onEachFrame',\n    'onGroupIconClick',\n    'onGroupIconOverEnter',\n    'onGroupIconOverLeave',\n    'onHCGroupSelectionChanged',\n    'onMapSingleClick',\n    'onPlayerConnected',\n    'onPlayerDisconnected',\n    'onPreloadFinished',\n    'onPreloadStarted',\n    'onShowNewObject',\n    'onTeamSwitch',\n    'openCuratorInterface',\n    'openDLCPage',\n    'openGPS',\n    'openMap',\n    'openSteamApp',\n    'openYoutubeVideo',\n    'or',\n    'orderGetIn',\n    'overcast',\n    'overcastForecast',\n    'owner',\n    'param',\n    'params',\n    'parseNumber',\n    'parseSimpleArray',\n    'parseText',\n    'parsingNamespace',\n    'particlesQuality',\n    'periscopeElevation',\n    'pickWeaponPool',\n    'pitch',\n    'pixelGrid',\n    'pixelGridBase',\n    'pixelGridNoUIScale',\n    'pixelH',\n    'pixelW',\n    'playableSlotsNumber',\n    'playableUnits',\n    'playAction',\n    'playActionNow',\n    'player',\n    'playerRespawnTime',\n    'playerSide',\n    'playersNumber',\n    'playGesture',\n    'playMission',\n    'playMove',\n    'playMoveNow',\n    'playMusic',\n    'playScriptedMission',\n    'playSound',\n    'playSound3D',\n    'playSoundUI',\n    'pose',\n    'position',\n    'positionCameraToWorld',\n    'posScreenToWorld',\n    'posWorldToScreen',\n    'ppEffectAdjust',\n    'ppEffectCommit',\n    'ppEffectCommitted',\n    'ppEffectCreate',\n    'ppEffectDestroy',\n    'ppEffectEnable',\n    'ppEffectEnabled',\n    'ppEffectForceInNVG',\n    'precision',\n    'preloadCamera',\n    'preloadObject',\n    'preloadSound',\n    'preloadTitleObj',\n    'preloadTitleRsc',\n    'preprocessFile',\n    'preprocessFileLineNumbers',\n    'primaryWeapon',\n    'primaryWeaponItems',\n    'primaryWeaponMagazine',\n    'priority',\n    'processDiaryLink',\n    'productVersion',\n    'profileName',\n    'profileNamespace',\n    'profileNameSteam',\n    'progressLoadingScreen',\n    'progressPosition',\n    'progressSetPosition',\n    'publicVariable',\n    'publicVariableClient',\n    'publicVariableServer',\n    'pushBack',\n    'pushBackUnique',\n    'putWeaponPool',\n    'queryItemsPool',\n    'queryMagazinePool',\n    'queryWeaponPool',\n    'rad',\n    'radioChannelAdd',\n    'radioChannelCreate',\n    'radioChannelInfo',\n    'radioChannelRemove',\n    'radioChannelSetCallSign',\n    'radioChannelSetLabel',\n    'radioEnabled',\n    'radioVolume',\n    'rain',\n    'rainbow',\n    'rainParams',\n    'random',\n    'rank',\n    'rankId',\n    'rating',\n    'rectangular',\n    'regexFind',\n    'regexMatch',\n    'regexReplace',\n    'registeredTasks',\n    'registerTask',\n    'reload',\n    'reloadEnabled',\n    'remoteControl',\n    'remoteExec',\n    'remoteExecCall',\n    'remoteExecutedOwner',\n    'remove3DENConnection',\n    'remove3DENEventHandler',\n    'remove3DENLayer',\n    'removeAction',\n    'removeAll3DENEventHandlers',\n    'removeAllActions',\n    'removeAllAssignedItems',\n    'removeAllBinocularItems',\n    'removeAllContainers',\n    'removeAllCuratorAddons',\n    'removeAllCuratorCameraAreas',\n    'removeAllCuratorEditingAreas',\n    'removeAllEventHandlers',\n    'removeAllHandgunItems',\n    'removeAllItems',\n    'removeAllItemsWithMagazines',\n    'removeAllMissionEventHandlers',\n    'removeAllMPEventHandlers',\n    'removeAllMusicEventHandlers',\n    'removeAllOwnedMines',\n    'removeAllPrimaryWeaponItems',\n    'removeAllSecondaryWeaponItems',\n    'removeAllUserActionEventHandlers',\n    'removeAllWeapons',\n    'removeBackpack',\n    'removeBackpackGlobal',\n    'removeBinocularItem',\n    'removeCuratorAddons',\n    'removeCuratorCameraArea',\n    'removeCuratorEditableObjects',\n    'removeCuratorEditingArea',\n    'removeDiaryRecord',\n    'removeDiarySubject',\n    'removeDrawIcon',\n    'removeDrawLinks',\n    'removeEventHandler',\n    'removeFromRemainsCollector',\n    'removeGoggles',\n    'removeGroupIcon',\n    'removeHandgunItem',\n    'removeHeadgear',\n    'removeItem',\n    'removeItemFromBackpack',\n    'removeItemFromUniform',\n    'removeItemFromVest',\n    'removeItems',\n    'removeMagazine',\n    'removeMagazineGlobal',\n    'removeMagazines',\n    'removeMagazinesTurret',\n    'removeMagazineTurret',\n    'removeMenuItem',\n    'removeMissionEventHandler',\n    'removeMPEventHandler',\n    'removeMusicEventHandler',\n    'removeOwnedMine',\n    'removePrimaryWeaponItem',\n    'removeSecondaryWeaponItem',\n    'removeSimpleTask',\n    'removeSwitchableUnit',\n    'removeTeamMember',\n    'removeUniform',\n    'removeUserActionEventHandler',\n    'removeVest',\n    'removeWeapon',\n    'removeWeaponAttachmentCargo',\n    'removeWeaponCargo',\n    'removeWeaponGlobal',\n    'removeWeaponTurret',\n    'reportRemoteTarget',\n    'requiredVersion',\n    'resetCamShake',\n    'resetSubgroupDirection',\n    'resize',\n    'resources',\n    'respawnVehicle',\n    'restartEditorCamera',\n    'reveal',\n    'revealMine',\n    'reverse',\n    'reversedMouseY',\n    'roadAt',\n    'roadsConnectedTo',\n    'roleDescription',\n    'ropeAttachedObjects',\n    'ropeAttachedTo',\n    'ropeAttachEnabled',\n    'ropeAttachTo',\n    'ropeCreate',\n    'ropeCut',\n    'ropeDestroy',\n    'ropeDetach',\n    'ropeEndPosition',\n    'ropeLength',\n    'ropes',\n    'ropesAttachedTo',\n    'ropeSegments',\n    'ropeUnwind',\n    'ropeUnwound',\n    'rotorsForcesRTD',\n    'rotorsRpmRTD',\n    'round',\n    'runInitScript',\n    'safeZoneH',\n    'safeZoneW',\n    'safeZoneWAbs',\n    'safeZoneX',\n    'safeZoneXAbs',\n    'safeZoneY',\n    'save3DENInventory',\n    'saveGame',\n    'saveIdentity',\n    'saveJoysticks',\n    'saveMissionProfileNamespace',\n    'saveOverlay',\n    'saveProfileNamespace',\n    'saveStatus',\n    'saveVar',\n    'savingEnabled',\n    'say',\n    'say2D',\n    'say3D',\n    'scopeName',\n    'score',\n    'scoreSide',\n    'screenshot',\n    'screenToWorld',\n    'scriptDone',\n    'scriptName',\n    'scudState',\n    'secondaryWeapon',\n    'secondaryWeaponItems',\n    'secondaryWeaponMagazine',\n    'select',\n    'selectBestPlaces',\n    'selectDiarySubject',\n    'selectedEditorObjects',\n    'selectEditorObject',\n    'selectionNames',\n    'selectionPosition',\n    'selectionVectorDirAndUp',\n    'selectLeader',\n    'selectMax',\n    'selectMin',\n    'selectNoPlayer',\n    'selectPlayer',\n    'selectRandom',\n    'selectRandomWeighted',\n    'selectWeapon',\n    'selectWeaponTurret',\n    'sendAUMessage',\n    'sendSimpleCommand',\n    'sendTask',\n    'sendTaskResult',\n    'sendUDPMessage',\n    'sentencesEnabled',\n    'serverCommand',\n    'serverCommandAvailable',\n    'serverCommandExecutable',\n    'serverName',\n    'serverNamespace',\n    'serverTime',\n    'set',\n    'set3DENAttribute',\n    'set3DENAttributes',\n    'set3DENGrid',\n    'set3DENIconsVisible',\n    'set3DENLayer',\n    'set3DENLinesVisible',\n    'set3DENLogicType',\n    'set3DENMissionAttribute',\n    'set3DENMissionAttributes',\n    'set3DENModelsVisible',\n    'set3DENObjectType',\n    'set3DENSelected',\n    'setAccTime',\n    'setActualCollectiveRTD',\n    'setAirplaneThrottle',\n    'setAirportSide',\n    'setAmmo',\n    'setAmmoCargo',\n    'setAmmoOnPylon',\n    'setAnimSpeedCoef',\n    'setAperture',\n    'setApertureNew',\n    'setArmoryPoints',\n    'setAttributes',\n    'setAutonomous',\n    'setBehaviour',\n    'setBehaviourStrong',\n    'setBleedingRemaining',\n    'setBrakesRTD',\n    'setCameraInterest',\n    'setCamShakeDefParams',\n    'setCamShakeParams',\n    'setCamUseTi',\n    'setCaptive',\n    'setCenterOfMass',\n    'setCollisionLight',\n    'setCombatBehaviour',\n    'setCombatMode',\n    'setCompassOscillation',\n    'setConvoySeparation',\n    'setCruiseControl',\n    'setCuratorCameraAreaCeiling',\n    'setCuratorCoef',\n    'setCuratorEditingAreaType',\n    'setCuratorWaypointCost',\n    'setCurrentChannel',\n    'setCurrentTask',\n    'setCurrentWaypoint',\n    'setCustomAimCoef',\n    'SetCustomMissionData',\n    'setCustomSoundController',\n    'setCustomWeightRTD',\n    'setDamage',\n    'setDammage',\n    'setDate',\n    'setDebriefingText',\n    'setDefaultCamera',\n    'setDestination',\n    'setDetailMapBlendPars',\n    'setDiaryRecordText',\n    'setDiarySubjectPicture',\n    'setDir',\n    'setDirection',\n    'setDrawIcon',\n    'setDriveOnPath',\n    'setDropInterval',\n    'setDynamicSimulationDistance',\n    'setDynamicSimulationDistanceCoef',\n    'setEditorMode',\n    'setEditorObjectScope',\n    'setEffectCondition',\n    'setEffectiveCommander',\n    'setEngineRpmRTD',\n    'setFace',\n    'setFaceanimation',\n    'setFatigue',\n    'setFeatureType',\n    'setFlagAnimationPhase',\n    'setFlagOwner',\n    'setFlagSide',\n    'setFlagTexture',\n    'setFog',\n    'setForceGeneratorRTD',\n    'setFormation',\n    'setFormationTask',\n    'setFormDir',\n    'setFriend',\n    'setFromEditor',\n    'setFSMVariable',\n    'setFuel',\n    'setFuelCargo',\n    'setGroupIcon',\n    'setGroupIconParams',\n    'setGroupIconsSelectable',\n    'setGroupIconsVisible',\n    'setGroupid',\n    'setGroupIdGlobal',\n    'setGroupOwner',\n    'setGusts',\n    'setHideBehind',\n    'setHit',\n    'setHitIndex',\n    'setHitPointDamage',\n    'setHorizonParallaxCoef',\n    'setHUDMovementLevels',\n    'setHumidity',\n    'setIdentity',\n    'setImportance',\n    'setInfoPanel',\n    'setLeader',\n    'setLightAmbient',\n    'setLightAttenuation',\n    'setLightBrightness',\n    'setLightColor',\n    'setLightConePars',\n    'setLightDayLight',\n    'setLightFlareMaxDistance',\n    'setLightFlareSize',\n    'setLightIntensity',\n    'setLightIR',\n    'setLightnings',\n    'setLightUseFlare',\n    'setLightVolumeShape',\n    'setLocalWindParams',\n    'setMagazineTurretAmmo',\n    'setMarkerAlpha',\n    'setMarkerAlphaLocal',\n    'setMarkerBrush',\n    'setMarkerBrushLocal',\n    'setMarkerColor',\n    'setMarkerColorLocal',\n    'setMarkerDir',\n    'setMarkerDirLocal',\n    'setMarkerPolyline',\n    'setMarkerPolylineLocal',\n    'setMarkerPos',\n    'setMarkerPosLocal',\n    'setMarkerShadow',\n    'setMarkerShadowLocal',\n    'setMarkerShape',\n    'setMarkerShapeLocal',\n    'setMarkerSize',\n    'setMarkerSizeLocal',\n    'setMarkerText',\n    'setMarkerTextLocal',\n    'setMarkerType',\n    'setMarkerTypeLocal',\n    'setMass',\n    'setMaxLoad',\n    'setMimic',\n    'setMissileTarget',\n    'setMissileTargetPos',\n    'setMousePosition',\n    'setMusicEffect',\n    'setMusicEventHandler',\n    'setName',\n    'setNameSound',\n    'setObjectArguments',\n    'setObjectMaterial',\n    'setObjectMaterialGlobal',\n    'setObjectProxy',\n    'setObjectScale',\n    'setObjectTexture',\n    'setObjectTextureGlobal',\n    'setObjectViewDistance',\n    'setOpticsMode',\n    'setOvercast',\n    'setOwner',\n    'setOxygenRemaining',\n    'setParticleCircle',\n    'setParticleClass',\n    'setParticleFire',\n    'setParticleParams',\n    'setParticleRandom',\n    'setPilotCameraDirection',\n    'setPilotCameraRotation',\n    'setPilotCameraTarget',\n    'setPilotLight',\n    'setPiPEffect',\n    'setPiPViewDistance',\n    'setPitch',\n    'setPlateNumber',\n    'setPlayable',\n    'setPlayerRespawnTime',\n    'setPlayerVoNVolume',\n    'setPos',\n    'setPosASL',\n    'setPosASL2',\n    'setPosASLW',\n    'setPosATL',\n    'setPosition',\n    'setPosWorld',\n    'setPylonLoadout',\n    'setPylonsPriority',\n    'setRadioMsg',\n    'setRain',\n    'setRainbow',\n    'setRandomLip',\n    'setRank',\n    'setRectangular',\n    'setRepairCargo',\n    'setRotorBrakeRTD',\n    'setShadowDistance',\n    'setShotParents',\n    'setSide',\n    'setSimpleTaskAlwaysVisible',\n    'setSimpleTaskCustomData',\n    'setSimpleTaskDescription',\n    'setSimpleTaskDestination',\n    'setSimpleTaskTarget',\n    'setSimpleTaskType',\n    'setSimulWeatherLayers',\n    'setSize',\n    'setSkill',\n    'setSlingLoad',\n    'setSoundEffect',\n    'setSpeaker',\n    'setSpeech',\n    'setSpeedMode',\n    'setStamina',\n    'setStaminaScheme',\n    'setStatValue',\n    'setSuppression',\n    'setSystemOfUnits',\n    'setTargetAge',\n    'setTaskMarkerOffset',\n    'setTaskResult',\n    'setTaskState',\n    'setTerrainGrid',\n    'setTerrainHeight',\n    'setText',\n    'setTimeMultiplier',\n    'setTiParameter',\n    'setTitleEffect',\n    'setTowParent',\n    'setTrafficDensity',\n    'setTrafficDistance',\n    'setTrafficGap',\n    'setTrafficSpeed',\n    'setTriggerActivation',\n    'setTriggerArea',\n    'setTriggerInterval',\n    'setTriggerStatements',\n    'setTriggerText',\n    'setTriggerTimeout',\n    'setTriggerType',\n    'setTurretLimits',\n    'setTurretOpticsMode',\n    'setType',\n    'setUnconscious',\n    'setUnitAbility',\n    'setUnitCombatMode',\n    'setUnitFreefallHeight',\n    'setUnitLoadout',\n    'setUnitPos',\n    'setUnitPosWeak',\n    'setUnitRank',\n    'setUnitRecoilCoefficient',\n    'setUnitTrait',\n    'setUnloadInCombat',\n    'setUserActionText',\n    'setUserMFDText',\n    'setUserMFDValue',\n    'setVariable',\n    'setVectorDir',\n    'setVectorDirAndUp',\n    'setVectorUp',\n    'setVehicleAmmo',\n    'setVehicleAmmoDef',\n    'setVehicleArmor',\n    'setVehicleCargo',\n    'setVehicleId',\n    'setVehicleLock',\n    'setVehiclePosition',\n    'setVehicleRadar',\n    'setVehicleReceiveRemoteTargets',\n    'setVehicleReportOwnPosition',\n    'setVehicleReportRemoteTargets',\n    'setVehicleTiPars',\n    'setVehicleVarName',\n    'setVelocity',\n    'setVelocityModelSpace',\n    'setVelocityTransformation',\n    'setViewDistance',\n    'setVisibleIfTreeCollapsed',\n    'setWantedRPMRTD',\n    'setWaves',\n    'setWaypointBehaviour',\n    'setWaypointCombatMode',\n    'setWaypointCompletionRadius',\n    'setWaypointDescription',\n    'setWaypointForceBehaviour',\n    'setWaypointFormation',\n    'setWaypointHousePosition',\n    'setWaypointLoiterAltitude',\n    'setWaypointLoiterRadius',\n    'setWaypointLoiterType',\n    'setWaypointName',\n    'setWaypointPosition',\n    'setWaypointScript',\n    'setWaypointSpeed',\n    'setWaypointStatements',\n    'setWaypointTimeout',\n    'setWaypointType',\n    'setWaypointVisible',\n    'setWeaponReloadingTime',\n    'setWeaponZeroing',\n    'setWind',\n    'setWindDir',\n    'setWindForce',\n    'setWindStr',\n    'setWingForceScaleRTD',\n    'setWPPos',\n    'show3DIcons',\n    'showChat',\n    'showCinemaBorder',\n    'showCommandingMenu',\n    'showCompass',\n    'showCuratorCompass',\n    'showGps',\n    'showHUD',\n    'showLegend',\n    'showMap',\n    'shownArtilleryComputer',\n    'shownChat',\n    'shownCompass',\n    'shownCuratorCompass',\n    'showNewEditorObject',\n    'shownGps',\n    'shownHUD',\n    'shownMap',\n    'shownPad',\n    'shownRadio',\n    'shownScoretable',\n    'shownSubtitles',\n    'shownUAVFeed',\n    'shownWarrant',\n    'shownWatch',\n    'showPad',\n    'showRadio',\n    'showScoretable',\n    'showSubtitles',\n    'showUAVFeed',\n    'showWarrant',\n    'showWatch',\n    'showWaypoint',\n    'showWaypoints',\n    'side',\n    'sideChat',\n    'sideRadio',\n    'simpleTasks',\n    'simulationEnabled',\n    'simulCloudDensity',\n    'simulCloudOcclusion',\n    'simulInClouds',\n    'simulWeatherSync',\n    'sin',\n    'size',\n    'sizeOf',\n    'skill',\n    'skillFinal',\n    'skipTime',\n    'sleep',\n    'sliderPosition',\n    'sliderRange',\n    'sliderSetPosition',\n    'sliderSetRange',\n    'sliderSetSpeed',\n    'sliderSpeed',\n    'slingLoadAssistantShown',\n    'soldierMagazines',\n    'someAmmo',\n    'sort',\n    'soundVolume',\n    'spawn',\n    'speaker',\n    'speechVolume',\n    'speed',\n    'speedMode',\n    'splitString',\n    'sqrt',\n    'squadParams',\n    'stance',\n    'startLoadingScreen',\n    'stop',\n    'stopEngineRTD',\n    'stopped',\n    'str',\n    'sunOrMoon',\n    'supportInfo',\n    'suppressFor',\n    'surfaceIsWater',\n    'surfaceNormal',\n    'surfaceTexture',\n    'surfaceType',\n    'swimInDepth',\n    'switchableUnits',\n    'switchAction',\n    'switchCamera',\n    'switchGesture',\n    'switchLight',\n    'switchMove',\n    'synchronizedObjects',\n    'synchronizedTriggers',\n    'synchronizedWaypoints',\n    'synchronizeObjectsAdd',\n    'synchronizeObjectsRemove',\n    'synchronizeTrigger',\n    'synchronizeWaypoint',\n    'systemChat',\n    'systemOfUnits',\n    'systemTime',\n    'systemTimeUTC',\n    'tan',\n    'targetKnowledge',\n    'targets',\n    'targetsAggregate',\n    'targetsQuery',\n    'taskAlwaysVisible',\n    'taskChildren',\n    'taskCompleted',\n    'taskCustomData',\n    'taskDescription',\n    'taskDestination',\n    'taskHint',\n    'taskMarkerOffset',\n    'taskName',\n    'taskParent',\n    'taskResult',\n    'taskState',\n    'taskType',\n    'teamMember',\n    'teamName',\n    'teams',\n    'teamSwitch',\n    'teamSwitchEnabled',\n    'teamType',\n    'terminate',\n    'terrainIntersect',\n    'terrainIntersectASL',\n    'terrainIntersectAtASL',\n    'text',\n    'textLog',\n    'textLogFormat',\n    'tg',\n    'time',\n    'timeMultiplier',\n    'titleCut',\n    'titleFadeOut',\n    'titleObj',\n    'titleRsc',\n    'titleText',\n    'toArray',\n    'toFixed',\n    'toLower',\n    'toLowerANSI',\n    'toString',\n    'toUpper',\n    'toUpperANSI',\n    'triggerActivated',\n    'triggerActivation',\n    'triggerAmmo',\n    'triggerArea',\n    'triggerAttachedVehicle',\n    'triggerAttachObject',\n    'triggerAttachVehicle',\n    'triggerDynamicSimulation',\n    'triggerInterval',\n    'triggerStatements',\n    'triggerText',\n    'triggerTimeout',\n    'triggerTimeoutCurrent',\n    'triggerType',\n    'trim',\n    'turretLocal',\n    'turretOwner',\n    'turretUnit',\n    'tvAdd',\n    'tvClear',\n    'tvCollapse',\n    'tvCollapseAll',\n    'tvCount',\n    'tvCurSel',\n    'tvData',\n    'tvDelete',\n    'tvExpand',\n    'tvExpandAll',\n    'tvIsSelected',\n    'tvPicture',\n    'tvPictureRight',\n    'tvSelection',\n    'tvSetColor',\n    'tvSetCurSel',\n    'tvSetData',\n    'tvSetPicture',\n    'tvSetPictureColor',\n    'tvSetPictureColorDisabled',\n    'tvSetPictureColorSelected',\n    'tvSetPictureRight',\n    'tvSetPictureRightColor',\n    'tvSetPictureRightColorDisabled',\n    'tvSetPictureRightColorSelected',\n    'tvSetSelectColor',\n    'tvSetSelected',\n    'tvSetText',\n    'tvSetTooltip',\n    'tvSetValue',\n    'tvSort',\n    'tvSortAll',\n    'tvSortByValue',\n    'tvSortByValueAll',\n    'tvText',\n    'tvTooltip',\n    'tvValue',\n    'type',\n    'typeName',\n    'typeOf',\n    'UAVControl',\n    'uiNamespace',\n    'uiSleep',\n    'unassignCurator',\n    'unassignItem',\n    'unassignTeam',\n    'unassignVehicle',\n    'underwater',\n    'uniform',\n    'uniformContainer',\n    'uniformItems',\n    'uniformMagazines',\n    'uniqueUnitItems',\n    'unitAddons',\n    'unitAimPosition',\n    'unitAimPositionVisual',\n    'unitBackpack',\n    'unitCombatMode',\n    'unitIsUAV',\n    'unitPos',\n    'unitReady',\n    'unitRecoilCoefficient',\n    'units',\n    'unitsBelowHeight',\n    'unitTurret',\n    'unlinkItem',\n    'unlockAchievement',\n    'unregisterTask',\n    'updateDrawIcon',\n    'updateMenuItem',\n    'updateObjectTree',\n    'useAIOperMapObstructionTest',\n    'useAISteeringComponent',\n    'useAudioTimeForMoves',\n    'userInputDisabled',\n    'values',\n    'vectorAdd',\n    'vectorCos',\n    'vectorCrossProduct',\n    'vectorDiff',\n    'vectorDir',\n    'vectorDirVisual',\n    'vectorDistance',\n    'vectorDistanceSqr',\n    'vectorDotProduct',\n    'vectorFromTo',\n    'vectorLinearConversion',\n    'vectorMagnitude',\n    'vectorMagnitudeSqr',\n    'vectorModelToWorld',\n    'vectorModelToWorldVisual',\n    'vectorMultiply',\n    'vectorNormalized',\n    'vectorUp',\n    'vectorUpVisual',\n    'vectorWorldToModel',\n    'vectorWorldToModelVisual',\n    'vehicle',\n    'vehicleCargoEnabled',\n    'vehicleChat',\n    'vehicleMoveInfo',\n    'vehicleRadio',\n    'vehicleReceiveRemoteTargets',\n    'vehicleReportOwnPosition',\n    'vehicleReportRemoteTargets',\n    'vehicles',\n    'vehicleVarName',\n    'velocity',\n    'velocityModelSpace',\n    'verifySignature',\n    'vest',\n    'vestContainer',\n    'vestItems',\n    'vestMagazines',\n    'viewDistance',\n    'visibleCompass',\n    'visibleGps',\n    'visibleMap',\n    'visiblePosition',\n    'visiblePositionASL',\n    'visibleScoretable',\n    'visibleWatch',\n    'waves',\n    'waypointAttachedObject',\n    'waypointAttachedVehicle',\n    'waypointAttachObject',\n    'waypointAttachVehicle',\n    'waypointBehaviour',\n    'waypointCombatMode',\n    'waypointCompletionRadius',\n    'waypointDescription',\n    'waypointForceBehaviour',\n    'waypointFormation',\n    'waypointHousePosition',\n    'waypointLoiterAltitude',\n    'waypointLoiterRadius',\n    'waypointLoiterType',\n    'waypointName',\n    'waypointPosition',\n    'waypoints',\n    'waypointScript',\n    'waypointsEnabledUAV',\n    'waypointShow',\n    'waypointSpeed',\n    'waypointStatements',\n    'waypointTimeout',\n    'waypointTimeoutCurrent',\n    'waypointType',\n    'waypointVisible',\n    'weaponAccessories',\n    'weaponAccessoriesCargo',\n    'weaponCargo',\n    'weaponDirection',\n    'weaponInertia',\n    'weaponLowered',\n    'weaponReloadingTime',\n    'weapons',\n    'weaponsInfo',\n    'weaponsItems',\n    'weaponsItemsCargo',\n    'weaponState',\n    'weaponsTurret',\n    'weightRTD',\n    'WFSideText',\n    'wind',\n    'windDir',\n    'windRTD',\n    'windStr',\n    'wingsForcesRTD',\n    'worldName',\n    'worldSize',\n    'worldToModel',\n    'worldToModelVisual',\n    'worldToScreen'\n  ];\n  \n  // list of keywords from:\n  // https://community.bistudio.com/wiki/PreProcessor_Commands\n  const PREPROCESSOR = {\n    className: 'meta',\n    begin: /#\\s*[a-z]+\\b/,\n    end: /$/,\n    keywords: 'define undef ifdef ifndef else endif include if',\n    contains: [\n      {\n        begin: /\\\\\\n/,\n        relevance: 0\n      },\n      hljs.inherit(STRINGS, { className: 'string' }),\n      {\n        begin: /<[^\\n>]*>/,\n        end: /$/,\n        illegal: '\\\\n'\n      },\n      hljs.C_LINE_COMMENT_MODE,\n      hljs.C_BLOCK_COMMENT_MODE\n    ]\n  };\n  \n  return {\n    name: 'SQF',\n    case_insensitive: true,\n    keywords: {\n      keyword: KEYWORDS,\n      built_in: BUILT_IN,\n      literal: LITERAL\n    },\n    contains: [\n      hljs.C_LINE_COMMENT_MODE,\n      hljs.C_BLOCK_COMMENT_MODE,\n      hljs.NUMBER_MODE,\n      VARIABLE,\n      FUNCTION,\n      STRINGS,\n      PREPROCESSOR\n    ],\n    illegal: [\n      //$ is only valid when used with Hex numbers (e.g. $FF)\n      /\\$[^a-fA-F0-9]/, \n      /\\w\\$/,\n      /\\?/,      //There's no ? in SQF\n      /@/,       //There's no @ in SQF\n      // Brute-force-fixing the build error. See https://github.com/highlightjs/highlight.js/pull/3193#issuecomment-843088729\n      / \\| /,\n      // . is only used in numbers\n      /[a-zA-Z_]\\./,\n      /\\:\\=/,\n      /\\[\\:/\n    ]\n  };\n}\n\nmodule.exports = sqf;\n","/*\n Language: SQL\n Website: https://en.wikipedia.org/wiki/SQL\n Category: common, database\n */\n\n/*\n\nGoals:\n\nSQL is intended to highlight basic/common SQL keywords and expressions\n\n- If pretty much every single SQL server includes supports, then it's a canidate.\n- It is NOT intended to include tons of vendor specific keywords (Oracle, MySQL,\n  PostgreSQL) although the list of data types is purposely a bit more expansive.\n- For more specific SQL grammars please see:\n  - PostgreSQL and PL/pgSQL - core\n  - T-SQL - https://github.com/highlightjs/highlightjs-tsql\n  - sql_more (core)\n\n */\n\nfunction sql(hljs) {\n  const regex = hljs.regex;\n  const COMMENT_MODE = hljs.COMMENT('--', '$');\n  const STRING = {\n    scope: 'string',\n    variants: [\n      {\n        begin: /'/,\n        end: /'/,\n        contains: [ { match: /''/ } ]\n      }\n    ]\n  };\n  const QUOTED_IDENTIFIER = {\n    begin: /\"/,\n    end: /\"/,\n    contains: [ { match: /\"\"/ } ]\n  };\n\n  const LITERALS = [\n    \"true\",\n    \"false\",\n    // Not sure it's correct to call NULL literal, and clauses like IS [NOT] NULL look strange that way.\n    // \"null\",\n    \"unknown\"\n  ];\n\n  const MULTI_WORD_TYPES = [\n    \"double precision\",\n    \"large object\",\n    \"with timezone\",\n    \"without timezone\"\n  ];\n\n  const TYPES = [\n    'bigint',\n    'binary',\n    'blob',\n    'boolean',\n    'char',\n    'character',\n    'clob',\n    'date',\n    'dec',\n    'decfloat',\n    'decimal',\n    'float',\n    'int',\n    'integer',\n    'interval',\n    'nchar',\n    'nclob',\n    'national',\n    'numeric',\n    'real',\n    'row',\n    'smallint',\n    'time',\n    'timestamp',\n    'varchar',\n    'varying', // modifier (character varying)\n    'varbinary'\n  ];\n\n  const NON_RESERVED_WORDS = [\n    \"add\",\n    \"asc\",\n    \"collation\",\n    \"desc\",\n    \"final\",\n    \"first\",\n    \"last\",\n    \"view\"\n  ];\n\n  // https://jakewheat.github.io/sql-overview/sql-2016-foundation-grammar.html#reserved-word\n  const RESERVED_WORDS = [\n    \"abs\",\n    \"acos\",\n    \"all\",\n    \"allocate\",\n    \"alter\",\n    \"and\",\n    \"any\",\n    \"are\",\n    \"array\",\n    \"array_agg\",\n    \"array_max_cardinality\",\n    \"as\",\n    \"asensitive\",\n    \"asin\",\n    \"asymmetric\",\n    \"at\",\n    \"atan\",\n    \"atomic\",\n    \"authorization\",\n    \"avg\",\n    \"begin\",\n    \"begin_frame\",\n    \"begin_partition\",\n    \"between\",\n    \"bigint\",\n    \"binary\",\n    \"blob\",\n    \"boolean\",\n    \"both\",\n    \"by\",\n    \"call\",\n    \"called\",\n    \"cardinality\",\n    \"cascaded\",\n    \"case\",\n    \"cast\",\n    \"ceil\",\n    \"ceiling\",\n    \"char\",\n    \"char_length\",\n    \"character\",\n    \"character_length\",\n    \"check\",\n    \"classifier\",\n    \"clob\",\n    \"close\",\n    \"coalesce\",\n    \"collate\",\n    \"collect\",\n    \"column\",\n    \"commit\",\n    \"condition\",\n    \"connect\",\n    \"constraint\",\n    \"contains\",\n    \"convert\",\n    \"copy\",\n    \"corr\",\n    \"corresponding\",\n    \"cos\",\n    \"cosh\",\n    \"count\",\n    \"covar_pop\",\n    \"covar_samp\",\n    \"create\",\n    \"cross\",\n    \"cube\",\n    \"cume_dist\",\n    \"current\",\n    \"current_catalog\",\n    \"current_date\",\n    \"current_default_transform_group\",\n    \"current_path\",\n    \"current_role\",\n    \"current_row\",\n    \"current_schema\",\n    \"current_time\",\n    \"current_timestamp\",\n    \"current_path\",\n    \"current_role\",\n    \"current_transform_group_for_type\",\n    \"current_user\",\n    \"cursor\",\n    \"cycle\",\n    \"date\",\n    \"day\",\n    \"deallocate\",\n    \"dec\",\n    \"decimal\",\n    \"decfloat\",\n    \"declare\",\n    \"default\",\n    \"define\",\n    \"delete\",\n    \"dense_rank\",\n    \"deref\",\n    \"describe\",\n    \"deterministic\",\n    \"disconnect\",\n    \"distinct\",\n    \"double\",\n    \"drop\",\n    \"dynamic\",\n    \"each\",\n    \"element\",\n    \"else\",\n    \"empty\",\n    \"end\",\n    \"end_frame\",\n    \"end_partition\",\n    \"end-exec\",\n    \"equals\",\n    \"escape\",\n    \"every\",\n    \"except\",\n    \"exec\",\n    \"execute\",\n    \"exists\",\n    \"exp\",\n    \"external\",\n    \"extract\",\n    \"false\",\n    \"fetch\",\n    \"filter\",\n    \"first_value\",\n    \"float\",\n    \"floor\",\n    \"for\",\n    \"foreign\",\n    \"frame_row\",\n    \"free\",\n    \"from\",\n    \"full\",\n    \"function\",\n    \"fusion\",\n    \"get\",\n    \"global\",\n    \"grant\",\n    \"group\",\n    \"grouping\",\n    \"groups\",\n    \"having\",\n    \"hold\",\n    \"hour\",\n    \"identity\",\n    \"in\",\n    \"indicator\",\n    \"initial\",\n    \"inner\",\n    \"inout\",\n    \"insensitive\",\n    \"insert\",\n    \"int\",\n    \"integer\",\n    \"intersect\",\n    \"intersection\",\n    \"interval\",\n    \"into\",\n    \"is\",\n    \"join\",\n    \"json_array\",\n    \"json_arrayagg\",\n    \"json_exists\",\n    \"json_object\",\n    \"json_objectagg\",\n    \"json_query\",\n    \"json_table\",\n    \"json_table_primitive\",\n    \"json_value\",\n    \"lag\",\n    \"language\",\n    \"large\",\n    \"last_value\",\n    \"lateral\",\n    \"lead\",\n    \"leading\",\n    \"left\",\n    \"like\",\n    \"like_regex\",\n    \"listagg\",\n    \"ln\",\n    \"local\",\n    \"localtime\",\n    \"localtimestamp\",\n    \"log\",\n    \"log10\",\n    \"lower\",\n    \"match\",\n    \"match_number\",\n    \"match_recognize\",\n    \"matches\",\n    \"max\",\n    \"member\",\n    \"merge\",\n    \"method\",\n    \"min\",\n    \"minute\",\n    \"mod\",\n    \"modifies\",\n    \"module\",\n    \"month\",\n    \"multiset\",\n    \"national\",\n    \"natural\",\n    \"nchar\",\n    \"nclob\",\n    \"new\",\n    \"no\",\n    \"none\",\n    \"normalize\",\n    \"not\",\n    \"nth_value\",\n    \"ntile\",\n    \"null\",\n    \"nullif\",\n    \"numeric\",\n    \"octet_length\",\n    \"occurrences_regex\",\n    \"of\",\n    \"offset\",\n    \"old\",\n    \"omit\",\n    \"on\",\n    \"one\",\n    \"only\",\n    \"open\",\n    \"or\",\n    \"order\",\n    \"out\",\n    \"outer\",\n    \"over\",\n    \"overlaps\",\n    \"overlay\",\n    \"parameter\",\n    \"partition\",\n    \"pattern\",\n    \"per\",\n    \"percent\",\n    \"percent_rank\",\n    \"percentile_cont\",\n    \"percentile_disc\",\n    \"period\",\n    \"portion\",\n    \"position\",\n    \"position_regex\",\n    \"power\",\n    \"precedes\",\n    \"precision\",\n    \"prepare\",\n    \"primary\",\n    \"procedure\",\n    \"ptf\",\n    \"range\",\n    \"rank\",\n    \"reads\",\n    \"real\",\n    \"recursive\",\n    \"ref\",\n    \"references\",\n    \"referencing\",\n    \"regr_avgx\",\n    \"regr_avgy\",\n    \"regr_count\",\n    \"regr_intercept\",\n    \"regr_r2\",\n    \"regr_slope\",\n    \"regr_sxx\",\n    \"regr_sxy\",\n    \"regr_syy\",\n    \"release\",\n    \"result\",\n    \"return\",\n    \"returns\",\n    \"revoke\",\n    \"right\",\n    \"rollback\",\n    \"rollup\",\n    \"row\",\n    \"row_number\",\n    \"rows\",\n    \"running\",\n    \"savepoint\",\n    \"scope\",\n    \"scroll\",\n    \"search\",\n    \"second\",\n    \"seek\",\n    \"select\",\n    \"sensitive\",\n    \"session_user\",\n    \"set\",\n    \"show\",\n    \"similar\",\n    \"sin\",\n    \"sinh\",\n    \"skip\",\n    \"smallint\",\n    \"some\",\n    \"specific\",\n    \"specifictype\",\n    \"sql\",\n    \"sqlexception\",\n    \"sqlstate\",\n    \"sqlwarning\",\n    \"sqrt\",\n    \"start\",\n    \"static\",\n    \"stddev_pop\",\n    \"stddev_samp\",\n    \"submultiset\",\n    \"subset\",\n    \"substring\",\n    \"substring_regex\",\n    \"succeeds\",\n    \"sum\",\n    \"symmetric\",\n    \"system\",\n    \"system_time\",\n    \"system_user\",\n    \"table\",\n    \"tablesample\",\n    \"tan\",\n    \"tanh\",\n    \"then\",\n    \"time\",\n    \"timestamp\",\n    \"timezone_hour\",\n    \"timezone_minute\",\n    \"to\",\n    \"trailing\",\n    \"translate\",\n    \"translate_regex\",\n    \"translation\",\n    \"treat\",\n    \"trigger\",\n    \"trim\",\n    \"trim_array\",\n    \"true\",\n    \"truncate\",\n    \"uescape\",\n    \"union\",\n    \"unique\",\n    \"unknown\",\n    \"unnest\",\n    \"update\",\n    \"upper\",\n    \"user\",\n    \"using\",\n    \"value\",\n    \"values\",\n    \"value_of\",\n    \"var_pop\",\n    \"var_samp\",\n    \"varbinary\",\n    \"varchar\",\n    \"varying\",\n    \"versioning\",\n    \"when\",\n    \"whenever\",\n    \"where\",\n    \"width_bucket\",\n    \"window\",\n    \"with\",\n    \"within\",\n    \"without\",\n    \"year\",\n  ];\n\n  // these are reserved words we have identified to be functions\n  // and should only be highlighted in a dispatch-like context\n  // ie, array_agg(...), etc.\n  const RESERVED_FUNCTIONS = [\n    \"abs\",\n    \"acos\",\n    \"array_agg\",\n    \"asin\",\n    \"atan\",\n    \"avg\",\n    \"cast\",\n    \"ceil\",\n    \"ceiling\",\n    \"coalesce\",\n    \"corr\",\n    \"cos\",\n    \"cosh\",\n    \"count\",\n    \"covar_pop\",\n    \"covar_samp\",\n    \"cume_dist\",\n    \"dense_rank\",\n    \"deref\",\n    \"element\",\n    \"exp\",\n    \"extract\",\n    \"first_value\",\n    \"floor\",\n    \"json_array\",\n    \"json_arrayagg\",\n    \"json_exists\",\n    \"json_object\",\n    \"json_objectagg\",\n    \"json_query\",\n    \"json_table\",\n    \"json_table_primitive\",\n    \"json_value\",\n    \"lag\",\n    \"last_value\",\n    \"lead\",\n    \"listagg\",\n    \"ln\",\n    \"log\",\n    \"log10\",\n    \"lower\",\n    \"max\",\n    \"min\",\n    \"mod\",\n    \"nth_value\",\n    \"ntile\",\n    \"nullif\",\n    \"percent_rank\",\n    \"percentile_cont\",\n    \"percentile_disc\",\n    \"position\",\n    \"position_regex\",\n    \"power\",\n    \"rank\",\n    \"regr_avgx\",\n    \"regr_avgy\",\n    \"regr_count\",\n    \"regr_intercept\",\n    \"regr_r2\",\n    \"regr_slope\",\n    \"regr_sxx\",\n    \"regr_sxy\",\n    \"regr_syy\",\n    \"row_number\",\n    \"sin\",\n    \"sinh\",\n    \"sqrt\",\n    \"stddev_pop\",\n    \"stddev_samp\",\n    \"substring\",\n    \"substring_regex\",\n    \"sum\",\n    \"tan\",\n    \"tanh\",\n    \"translate\",\n    \"translate_regex\",\n    \"treat\",\n    \"trim\",\n    \"trim_array\",\n    \"unnest\",\n    \"upper\",\n    \"value_of\",\n    \"var_pop\",\n    \"var_samp\",\n    \"width_bucket\",\n  ];\n\n  // these functions can\n  const POSSIBLE_WITHOUT_PARENS = [\n    \"current_catalog\",\n    \"current_date\",\n    \"current_default_transform_group\",\n    \"current_path\",\n    \"current_role\",\n    \"current_schema\",\n    \"current_transform_group_for_type\",\n    \"current_user\",\n    \"session_user\",\n    \"system_time\",\n    \"system_user\",\n    \"current_time\",\n    \"localtime\",\n    \"current_timestamp\",\n    \"localtimestamp\"\n  ];\n\n  // those exist to boost relevance making these very\n  // \"SQL like\" keyword combos worth +1 extra relevance\n  const COMBOS = [\n    \"create table\",\n    \"insert into\",\n    \"primary key\",\n    \"foreign key\",\n    \"not null\",\n    \"alter table\",\n    \"add constraint\",\n    \"grouping sets\",\n    \"on overflow\",\n    \"character set\",\n    \"respect nulls\",\n    \"ignore nulls\",\n    \"nulls first\",\n    \"nulls last\",\n    \"depth first\",\n    \"breadth first\"\n  ];\n\n  const FUNCTIONS = RESERVED_FUNCTIONS;\n\n  const KEYWORDS = [\n    ...RESERVED_WORDS,\n    ...NON_RESERVED_WORDS\n  ].filter((keyword) => {\n    return !RESERVED_FUNCTIONS.includes(keyword);\n  });\n\n  const VARIABLE = {\n    scope: \"variable\",\n    match: /@[a-z0-9][a-z0-9_]*/,\n  };\n\n  const OPERATOR = {\n    scope: \"operator\",\n    match: /[-+*/=%^~]|&&?|\\|\\|?|!=?|<(?:=>?|<|>)?|>[>=]?/,\n    relevance: 0,\n  };\n\n  const FUNCTION_CALL = {\n    match: regex.concat(/\\b/, regex.either(...FUNCTIONS), /\\s*\\(/),\n    relevance: 0,\n    keywords: { built_in: FUNCTIONS }\n  };\n\n  // turns a multi-word keyword combo into a regex that doesn't\n  // care about extra whitespace etc.\n  // input: \"START QUERY\"\n  // output: /\\bSTART\\s+QUERY\\b/\n  function kws_to_regex(list) {\n    return regex.concat(\n      /\\b/,\n      regex.either(...list.map((kw) => {\n        return kw.replace(/\\s+/, \"\\\\s+\")\n      })),\n      /\\b/\n    )\n  }\n\n  const MULTI_WORD_KEYWORDS = {\n    scope: \"keyword\",\n    match: kws_to_regex(COMBOS),\n    relevance: 0,\n  };\n\n  // keywords with less than 3 letters are reduced in relevancy\n  function reduceRelevancy(list, {\n    exceptions, when\n  } = {}) {\n    const qualifyFn = when;\n    exceptions = exceptions || [];\n    return list.map((item) => {\n      if (item.match(/\\|\\d+$/) || exceptions.includes(item)) {\n        return item;\n      } else if (qualifyFn(item)) {\n        return `${item}|0`;\n      } else {\n        return item;\n      }\n    });\n  }\n\n  return {\n    name: 'SQL',\n    case_insensitive: true,\n    // does not include {} or HTML tags `</`\n    illegal: /[{}]|<\\//,\n    keywords: {\n      $pattern: /\\b[\\w\\.]+/,\n      keyword:\n        reduceRelevancy(KEYWORDS, { when: (x) => x.length < 3 }),\n      literal: LITERALS,\n      type: TYPES,\n      built_in: POSSIBLE_WITHOUT_PARENS\n    },\n    contains: [\n      {\n        scope: \"type\",\n        match: kws_to_regex(MULTI_WORD_TYPES)\n      },\n      MULTI_WORD_KEYWORDS,\n      FUNCTION_CALL,\n      VARIABLE,\n      STRING,\n      QUOTED_IDENTIFIER,\n      hljs.C_NUMBER_MODE,\n      hljs.C_BLOCK_COMMENT_MODE,\n      COMMENT_MODE,\n      OPERATOR\n    ]\n  };\n}\n\nmodule.exports = sql;\n","/*\nLanguage: Stan\nDescription: The Stan probabilistic programming language\nAuthor: Sean Pinkney <sean.pinkney@gmail.com>\nWebsite: http://mc-stan.org/\nCategory: scientific\n*/\n\nfunction stan(hljs) {\n  const regex = hljs.regex;\n  // variable names cannot conflict with block identifiers\n  const BLOCKS = [\n    'functions',\n    'model',\n    'data',\n    'parameters',\n    'quantities',\n    'transformed',\n    'generated'\n  ];\n\n  const STATEMENTS = [\n    'for',\n    'in',\n    'if',\n    'else',\n    'while',\n    'break',\n    'continue',\n    'return'\n  ];\n\n  const TYPES = [\n    'array',\n    'tuple',\n    'complex',\n    'int',\n    'real',\n    'vector',\n    'complex_vector',\n    'ordered',\n    'positive_ordered',\n    'simplex',\n    'unit_vector',\n    'row_vector',\n    'complex_row_vector',\n    'matrix',\n    'complex_matrix',\n    'cholesky_factor_corr|10',\n    'cholesky_factor_cov|10',\n    'corr_matrix|10',\n    'cov_matrix|10',\n    'void'\n  ];\n\n  // to get the functions list\n  // clone the [stan-docs repo](https://github.com/stan-dev/docs)\n  // then cd into it and run this bash script https://gist.github.com/joshgoebel/dcd33f82d4059a907c986049893843cf\n  //\n  // the output files are\n  // distributions_quoted.txt\n  // functions_quoted.txt\n\n  const FUNCTIONS = [\n    'abs',\n    'acos',\n    'acosh',\n    'add_diag',\n    'algebra_solver',\n    'algebra_solver_newton',\n    'append_array',\n    'append_col',\n    'append_row',\n    'asin',\n    'asinh',\n    'atan',\n    'atan2',\n    'atanh',\n    'bessel_first_kind',\n    'bessel_second_kind',\n    'binary_log_loss',\n    'block',\n    'cbrt',\n    'ceil',\n    'chol2inv',\n    'cholesky_decompose',\n    'choose',\n    'col',\n    'cols',\n    'columns_dot_product',\n    'columns_dot_self',\n    'complex_schur_decompose',\n    'complex_schur_decompose_t',\n    'complex_schur_decompose_u',\n    'conj',\n    'cos',\n    'cosh',\n    'cov_exp_quad',\n    'crossprod',\n    'csr_extract',\n    'csr_extract_u',\n    'csr_extract_v',\n    'csr_extract_w',\n    'csr_matrix_times_vector',\n    'csr_to_dense_matrix',\n    'cumulative_sum',\n    'dae',\n    'dae_tol',\n    'determinant',\n    'diag_matrix',\n    'diagonal',\n    'diag_post_multiply',\n    'diag_pre_multiply',\n    'digamma',\n    'dims',\n    'distance',\n    'dot_product',\n    'dot_self',\n    'eigendecompose',\n    'eigendecompose_sym',\n    'eigenvalues',\n    'eigenvalues_sym',\n    'eigenvectors',\n    'eigenvectors_sym',\n    'erf',\n    'erfc',\n    'exp',\n    'exp2',\n    'expm1',\n    'falling_factorial',\n    'fdim',\n    'fft',\n    'fft2',\n    'floor',\n    'fma',\n    'fmax',\n    'fmin',\n    'fmod',\n    'gamma_p',\n    'gamma_q',\n    'generalized_inverse',\n    'get_imag',\n    'get_real',\n    'head',\n    'hmm_hidden_state_prob',\n    'hmm_marginal',\n    'hypot',\n    'identity_matrix',\n    'inc_beta',\n    'integrate_1d',\n    'integrate_ode',\n    'integrate_ode_adams',\n    'integrate_ode_bdf',\n    'integrate_ode_rk45',\n    'int_step',\n    'inv',\n    'inv_cloglog',\n    'inv_erfc',\n    'inverse',\n    'inverse_spd',\n    'inv_fft',\n    'inv_fft2',\n    'inv_inc_beta',\n    'inv_logit',\n    'inv_Phi',\n    'inv_sqrt',\n    'inv_square',\n    'is_inf',\n    'is_nan',\n    'lambert_w0',\n    'lambert_wm1',\n    'lbeta',\n    'lchoose',\n    'ldexp',\n    'lgamma',\n    'linspaced_array',\n    'linspaced_int_array',\n    'linspaced_row_vector',\n    'linspaced_vector',\n    'lmgamma',\n    'lmultiply',\n    'log',\n    'log1m',\n    'log1m_exp',\n    'log1m_inv_logit',\n    'log1p',\n    'log1p_exp',\n    'log_determinant',\n    'log_diff_exp',\n    'log_falling_factorial',\n    'log_inv_logit',\n    'log_inv_logit_diff',\n    'logit',\n    'log_mix',\n    'log_modified_bessel_first_kind',\n    'log_rising_factorial',\n    'log_softmax',\n    'log_sum_exp',\n    'machine_precision',\n    'map_rect',\n    'matrix_exp',\n    'matrix_exp_multiply',\n    'matrix_power',\n    'max',\n    'mdivide_left_spd',\n    'mdivide_left_tri_low',\n    'mdivide_right_spd',\n    'mdivide_right_tri_low',\n    'mean',\n    'min',\n    'modified_bessel_first_kind',\n    'modified_bessel_second_kind',\n    'multiply_lower_tri_self_transpose',\n    'negative_infinity',\n    'norm',\n    'norm1',\n    'norm2',\n    'not_a_number',\n    'num_elements',\n    'ode_adams',\n    'ode_adams_tol',\n    'ode_adjoint_tol_ctl',\n    'ode_bdf',\n    'ode_bdf_tol',\n    'ode_ckrk',\n    'ode_ckrk_tol',\n    'ode_rk45',\n    'ode_rk45_tol',\n    'one_hot_array',\n    'one_hot_int_array',\n    'one_hot_row_vector',\n    'one_hot_vector',\n    'ones_array',\n    'ones_int_array',\n    'ones_row_vector',\n    'ones_vector',\n    'owens_t',\n    'Phi',\n    'Phi_approx',\n    'polar',\n    'positive_infinity',\n    'pow',\n    'print',\n    'prod',\n    'proj',\n    'qr',\n    'qr_Q',\n    'qr_R',\n    'qr_thin',\n    'qr_thin_Q',\n    'qr_thin_R',\n    'quad_form',\n    'quad_form_diag',\n    'quad_form_sym',\n    'quantile',\n    'rank',\n    'reduce_sum',\n    'reject',\n    'rep_array',\n    'rep_matrix',\n    'rep_row_vector',\n    'rep_vector',\n    'reverse',\n    'rising_factorial',\n    'round',\n    'row',\n    'rows',\n    'rows_dot_product',\n    'rows_dot_self',\n    'scale_matrix_exp_multiply',\n    'sd',\n    'segment',\n    'sin',\n    'singular_values',\n    'sinh',\n    'size',\n    'softmax',\n    'sort_asc',\n    'sort_desc',\n    'sort_indices_asc',\n    'sort_indices_desc',\n    'sqrt',\n    'square',\n    'squared_distance',\n    'step',\n    'sub_col',\n    'sub_row',\n    'sum',\n    'svd',\n    'svd_U',\n    'svd_V',\n    'symmetrize_from_lower_tri',\n    'tail',\n    'tan',\n    'tanh',\n    'target',\n    'tcrossprod',\n    'tgamma',\n    'to_array_1d',\n    'to_array_2d',\n    'to_complex',\n    'to_int',\n    'to_matrix',\n    'to_row_vector',\n    'to_vector',\n    'trace',\n    'trace_gen_quad_form',\n    'trace_quad_form',\n    'trigamma',\n    'trunc',\n    'uniform_simplex',\n    'variance',\n    'zeros_array',\n    'zeros_int_array',\n    'zeros_row_vector'\n  ];\n\n  const DISTRIBUTIONS = [\n    'bernoulli',\n    'bernoulli_logit',\n    'bernoulli_logit_glm',\n    'beta',\n    'beta_binomial',\n    'beta_proportion',\n    'binomial',\n    'binomial_logit',\n    'categorical',\n    'categorical_logit',\n    'categorical_logit_glm',\n    'cauchy',\n    'chi_square',\n    'dirichlet',\n    'discrete_range',\n    'double_exponential',\n    'exp_mod_normal',\n    'exponential',\n    'frechet',\n    'gamma',\n    'gaussian_dlm_obs',\n    'gumbel',\n    'hmm_latent',\n    'hypergeometric',\n    'inv_chi_square',\n    'inv_gamma',\n    'inv_wishart',\n    'inv_wishart_cholesky',\n    'lkj_corr',\n    'lkj_corr_cholesky',\n    'logistic',\n    'loglogistic',\n    'lognormal',\n    'multi_gp',\n    'multi_gp_cholesky',\n    'multinomial',\n    'multinomial_logit',\n    'multi_normal',\n    'multi_normal_cholesky',\n    'multi_normal_prec',\n    'multi_student_cholesky_t',\n    'multi_student_t',\n    'multi_student_t_cholesky',\n    'neg_binomial',\n    'neg_binomial_2',\n    'neg_binomial_2_log',\n    'neg_binomial_2_log_glm',\n    'normal',\n    'normal_id_glm',\n    'ordered_logistic',\n    'ordered_logistic_glm',\n    'ordered_probit',\n    'pareto',\n    'pareto_type_2',\n    'poisson',\n    'poisson_log',\n    'poisson_log_glm',\n    'rayleigh',\n    'scaled_inv_chi_square',\n    'skew_double_exponential',\n    'skew_normal',\n    'std_normal',\n    'std_normal_log',\n    'student_t',\n    'uniform',\n    'von_mises',\n    'weibull',\n    'wiener',\n    'wishart',\n    'wishart_cholesky'\n  ];\n\n  const BLOCK_COMMENT = hljs.COMMENT(\n    /\\/\\*/,\n    /\\*\\//,\n    {\n      relevance: 0,\n      contains: [\n        {\n          scope: 'doctag',\n          match: /@(return|param)/\n        }\n      ]\n    }\n  );\n\n  const INCLUDE = {\n    scope: 'meta',\n    begin: /#include\\b/,\n    end: /$/,\n    contains: [\n      {\n        match: /[a-z][a-z-._]+/,\n        scope: 'string'\n      },\n      hljs.C_LINE_COMMENT_MODE\n    ]\n  };\n\n  const RANGE_CONSTRAINTS = [\n    \"lower\",\n    \"upper\",\n    \"offset\",\n    \"multiplier\"\n  ];\n\n  return {\n    name: 'Stan',\n    aliases: [ 'stanfuncs' ],\n    keywords: {\n      $pattern: hljs.IDENT_RE,\n      title: BLOCKS,\n      type: TYPES,\n      keyword: STATEMENTS,\n      built_in: FUNCTIONS\n    },\n    contains: [\n      hljs.C_LINE_COMMENT_MODE,\n      INCLUDE,\n      hljs.HASH_COMMENT_MODE,\n      BLOCK_COMMENT,\n      {\n        scope: 'built_in',\n        match: /\\s(pi|e|sqrt2|log2|log10)(?=\\()/,\n        relevance: 0\n      },\n      {\n        match: regex.concat(/[<,]\\s*/, regex.either(...RANGE_CONSTRAINTS), /\\s*=/),\n        keywords: RANGE_CONSTRAINTS\n      },\n      {\n        scope: 'keyword',\n        match: /\\btarget(?=\\s*\\+=)/,\n      },\n      {\n        // highlights the 'T' in T[,] for only Stan language distributrions\n        match: [\n          /~\\s*/,\n          regex.either(...DISTRIBUTIONS),\n          /(?:\\(\\))/,\n          /\\s*T(?=\\s*\\[)/\n        ],\n        scope: {\n          2: \"built_in\",\n          4: \"keyword\"\n        }\n      },\n      {\n        // highlights distributions that end with special endings\n        scope: 'built_in',\n        keywords: DISTRIBUTIONS,\n        begin: regex.concat(/\\w*/, regex.either(...DISTRIBUTIONS), /(_lpdf|_lupdf|_lpmf|_cdf|_lcdf|_lccdf|_qf)(?=\\s*[\\(.*\\)])/)\n      },\n      {\n        // highlights distributions after ~\n        begin: [\n          /~/,\n          /\\s*/,\n          regex.concat(regex.either(...DISTRIBUTIONS), /(?=\\s*[\\(.*\\)])/)\n        ],\n        scope: { 3: \"built_in\" }\n      },\n      {\n        // highlights user defined distributions after ~\n        begin: [\n          /~/,\n          /\\s*\\w+(?=\\s*[\\(.*\\)])/,\n          '(?!.*/\\b(' + regex.either(...DISTRIBUTIONS) + ')\\b)'\n        ],\n        scope: { 2: \"title.function\" }\n      },\n      {\n        // highlights user defined distributions with special endings\n        scope: 'title.function',\n        begin: /\\w*(_lpdf|_lupdf|_lpmf|_cdf|_lcdf|_lccdf|_qf)(?=\\s*[\\(.*\\)])/\n      },\n      {\n        scope: 'number',\n        match: regex.concat(\n          // Comes from @RunDevelopment accessed 11/29/2021 at\n          // https://github.com/PrismJS/prism/blob/c53ad2e65b7193ab4f03a1797506a54bbb33d5a2/components/prism-stan.js#L56\n\n          // start of big noncapture group which\n          // 1. gets numbers that are by themselves\n          // 2. numbers that are separated by _\n          // 3. numbers that are separted by .\n          /(?:\\b\\d+(?:_\\d+)*(?:\\.(?:\\d+(?:_\\d+)*)?)?|\\B\\.\\d+(?:_\\d+)*)/,\n          // grabs scientific notation\n          // grabs complex numbers with i\n          /(?:[eE][+-]?\\d+(?:_\\d+)*)?i?(?!\\w)/\n        ),\n        relevance: 0\n      },\n      {\n        scope: 'string',\n        begin: /\"/,\n        end: /\"/\n      }\n    ]\n  };\n}\n\nmodule.exports = stan;\n","/*\nLanguage: Stata\nAuthor: Brian Quistorff <bquistorff@gmail.com>\nContributors: Drew McDonald <drewmcdo@gmail.com>\nDescription: Stata is a general-purpose statistical software package created in 1985 by StataCorp.\nWebsite: https://en.wikipedia.org/wiki/Stata\nCategory: scientific\n*/\n\n/*\n  This is a fork and modification of Drew McDonald's file (https://github.com/drewmcdonald/stata-highlighting). I have also included a list of builtin commands from https://bugs.kde.org/show_bug.cgi?id=135646.\n*/\n\nfunction stata(hljs) {\n  return {\n    name: 'Stata',\n    aliases: [\n      'do',\n      'ado'\n    ],\n    case_insensitive: true,\n    keywords: 'if else in foreach for forv forva forval forvalu forvalue forvalues by bys bysort xi quietly qui capture about ac ac_7 acprplot acprplot_7 adjust ado adopath adoupdate alpha ameans an ano anov anova anova_estat anova_terms anovadef aorder ap app appe appen append arch arch_dr arch_estat arch_p archlm areg areg_p args arima arima_dr arima_estat arima_p as asmprobit asmprobit_estat asmprobit_lf asmprobit_mfx__dlg asmprobit_p ass asse asser assert avplot avplot_7 avplots avplots_7 bcskew0 bgodfrey bias binreg bip0_lf biplot bipp_lf bipr_lf bipr_p biprobit bitest bitesti bitowt blogit bmemsize boot bootsamp bootstrap bootstrap_8 boxco_l boxco_p boxcox boxcox_6 boxcox_p bprobit br break brier bro brow brows browse brr brrstat bs bs_7 bsampl_w bsample bsample_7 bsqreg bstat bstat_7 bstat_8 bstrap bstrap_7 bubble bubbleplot ca ca_estat ca_p cabiplot camat canon canon_8 canon_8_p canon_estat canon_p cap caprojection capt captu captur capture cat cc cchart cchart_7 cci cd censobs_table centile cf char chdir checkdlgfiles checkestimationsample checkhlpfiles checksum chelp ci cii cl class classutil clear cli clis clist clo clog clog_lf clog_p clogi clogi_sw clogit clogit_lf clogit_p clogitp clogl_sw cloglog clonevar clslistarray cluster cluster_measures cluster_stop cluster_tree cluster_tree_8 clustermat cmdlog cnr cnre cnreg cnreg_p cnreg_sw cnsreg codebook collaps4 collapse colormult_nb colormult_nw compare compress conf confi confir confirm conren cons const constr constra constrai constrain constraint continue contract copy copyright copysource cor corc corr corr2data corr_anti corr_kmo corr_smc corre correl correla correlat correlate corrgram cou coun count cox cox_p cox_sw coxbase coxhaz coxvar cprplot cprplot_7 crc cret cretu cretur creturn cross cs cscript cscript_log csi ct ct_is ctset ctst_5 ctst_st cttost cumsp cumsp_7 cumul cusum cusum_7 cutil d|0 datasig datasign datasigna datasignat datasignatu datasignatur datasignature datetof db dbeta de dec deco decod decode deff des desc descr descri describ describe destring dfbeta dfgls dfuller di di_g dir dirstats dis discard disp disp_res disp_s displ displa display distinct do doe doed doedi doedit dotplot dotplot_7 dprobit drawnorm drop ds ds_util dstdize duplicates durbina dwstat dydx e|0 ed edi edit egen eivreg emdef en enc enco encod encode eq erase ereg ereg_lf ereg_p ereg_sw ereghet ereghet_glf ereghet_glf_sh ereghet_gp ereghet_ilf ereghet_ilf_sh ereghet_ip eret eretu eretur ereturn err erro error esize est est_cfexist est_cfname est_clickable est_expand est_hold est_table est_unhold est_unholdok estat estat_default estat_summ estat_vce_only esti estimates etodow etof etomdy ex exi exit expand expandcl fac fact facto factor factor_estat factor_p factor_pca_rotated factor_rotate factormat fcast fcast_compute fcast_graph fdades fdadesc fdadescr fdadescri fdadescrib fdadescribe fdasav fdasave fdause fh_st file open file read file close file filefilter fillin find_hlp_file findfile findit findit_7 fit fl fli flis flist for5_0 forest forestplot form forma format fpredict frac_154 frac_adj frac_chk frac_cox frac_ddp frac_dis frac_dv frac_in frac_mun frac_pp frac_pq frac_pv frac_wgt frac_xo fracgen fracplot fracplot_7 fracpoly fracpred fron_ex fron_hn fron_p fron_tn fron_tn2 frontier ftodate ftoe ftomdy ftowdate funnel funnelplot g|0 gamhet_glf gamhet_gp gamhet_ilf gamhet_ip gamma gamma_d2 gamma_p gamma_sw gammahet gdi_hexagon gdi_spokes ge gen gene gener genera generat generate genrank genstd genvmean gettoken gl gladder gladder_7 glim_l01 glim_l02 glim_l03 glim_l04 glim_l05 glim_l06 glim_l07 glim_l08 glim_l09 glim_l10 glim_l11 glim_l12 glim_lf glim_mu glim_nw1 glim_nw2 glim_nw3 glim_p glim_v1 glim_v2 glim_v3 glim_v4 glim_v5 glim_v6 glim_v7 glm glm_6 glm_p glm_sw glmpred glo glob globa global glogit glogit_8 glogit_p gmeans gnbre_lf gnbreg gnbreg_5 gnbreg_p gomp_lf gompe_sw gomper_p gompertz gompertzhet gomphet_glf gomphet_glf_sh gomphet_gp gomphet_ilf gomphet_ilf_sh gomphet_ip gphdot gphpen gphprint gprefs gprobi_p gprobit gprobit_8 gr gr7 gr_copy gr_current gr_db gr_describe gr_dir gr_draw gr_draw_replay gr_drop gr_edit gr_editviewopts gr_example gr_example2 gr_export gr_print gr_qscheme gr_query gr_read gr_rename gr_replay gr_save gr_set gr_setscheme gr_table gr_undo gr_use graph graph7 grebar greigen greigen_7 greigen_8 grmeanby grmeanby_7 gs_fileinfo gs_filetype gs_graphinfo gs_stat gsort gwood h|0 hadimvo hareg hausman haver he heck_d2 heckma_p heckman heckp_lf heckpr_p heckprob hel help hereg hetpr_lf hetpr_p hetprob hettest hexdump hilite hist hist_7 histogram hlogit hlu hmeans hotel hotelling hprobit hreg hsearch icd9 icd9_ff icd9p iis impute imtest inbase include inf infi infil infile infix inp inpu input ins insheet insp inspe inspec inspect integ inten intreg intreg_7 intreg_p intrg2_ll intrg_ll intrg_ll2 ipolate iqreg ir irf irf_create irfm iri is_svy is_svysum isid istdize ivprob_1_lf ivprob_lf ivprobit ivprobit_p ivreg ivreg_footnote ivtob_1_lf ivtob_lf ivtobit ivtobit_p jackknife jacknife jknife jknife_6 jknife_8 jkstat joinby kalarma1 kap kap_3 kapmeier kappa kapwgt kdensity kdensity_7 keep ksm ksmirnov ktau kwallis l|0 la lab labbe labbeplot labe label labelbook ladder levels levelsof leverage lfit lfit_p li lincom line linktest lis list lloghet_glf lloghet_glf_sh lloghet_gp lloghet_ilf lloghet_ilf_sh lloghet_ip llogi_sw llogis_p llogist llogistic llogistichet lnorm_lf lnorm_sw lnorma_p lnormal lnormalhet lnormhet_glf lnormhet_glf_sh lnormhet_gp lnormhet_ilf lnormhet_ilf_sh lnormhet_ip lnskew0 loadingplot loc loca local log logi logis_lf logistic logistic_p logit logit_estat logit_p loglogs logrank loneway lookfor lookup lowess lowess_7 lpredict lrecomp lroc lroc_7 lrtest ls lsens lsens_7 lsens_x lstat ltable ltable_7 ltriang lv lvr2plot lvr2plot_7 m|0 ma mac macr macro makecns man manova manova_estat manova_p manovatest mantel mark markin markout marksample mat mat_capp mat_order mat_put_rr mat_rapp mata mata_clear mata_describe mata_drop mata_matdescribe mata_matsave mata_matuse mata_memory mata_mlib mata_mosave mata_rename mata_which matalabel matcproc matlist matname matr matri matrix matrix_input__dlg matstrik mcc mcci md0_ md1_ md1debug_ md2_ md2debug_ mds mds_estat mds_p mdsconfig mdslong mdsmat mdsshepard mdytoe mdytof me_derd mean means median memory memsize menl meqparse mer merg merge meta mfp mfx mhelp mhodds minbound mixed_ll mixed_ll_reparm mkassert mkdir mkmat mkspline ml ml_5 ml_adjs ml_bhhhs ml_c_d ml_check ml_clear ml_cnt ml_debug ml_defd ml_e0 ml_e0_bfgs ml_e0_cycle ml_e0_dfp ml_e0i ml_e1 ml_e1_bfgs ml_e1_bhhh ml_e1_cycle ml_e1_dfp ml_e2 ml_e2_cycle ml_ebfg0 ml_ebfr0 ml_ebfr1 ml_ebh0q ml_ebhh0 ml_ebhr0 ml_ebr0i ml_ecr0i ml_edfp0 ml_edfr0 ml_edfr1 ml_edr0i ml_eds ml_eer0i ml_egr0i ml_elf ml_elf_bfgs ml_elf_bhhh ml_elf_cycle ml_elf_dfp ml_elfi ml_elfs ml_enr0i ml_enrr0 ml_erdu0 ml_erdu0_bfgs ml_erdu0_bhhh ml_erdu0_bhhhq ml_erdu0_cycle ml_erdu0_dfp ml_erdu0_nrbfgs ml_exde ml_footnote ml_geqnr ml_grad0 ml_graph ml_hbhhh ml_hd0 ml_hold ml_init ml_inv ml_log ml_max ml_mlout ml_mlout_8 ml_model ml_nb0 ml_opt ml_p ml_plot ml_query ml_rdgrd ml_repor ml_s_e ml_score ml_searc ml_technique ml_unhold mleval mlf_ mlmatbysum mlmatsum mlog mlogi mlogit mlogit_footnote mlogit_p mlopts mlsum mlvecsum mnl0_ mor more mov move mprobit mprobit_lf mprobit_p mrdu0_ mrdu1_ mvdecode mvencode mvreg mvreg_estat n|0 nbreg nbreg_al nbreg_lf nbreg_p nbreg_sw nestreg net newey newey_7 newey_p news nl nl_7 nl_9 nl_9_p nl_p nl_p_7 nlcom nlcom_p nlexp2 nlexp2_7 nlexp2a nlexp2a_7 nlexp3 nlexp3_7 nlgom3 nlgom3_7 nlgom4 nlgom4_7 nlinit nllog3 nllog3_7 nllog4 nllog4_7 nlog_rd nlogit nlogit_p nlogitgen nlogittree nlpred no nobreak noi nois noisi noisil noisily note notes notes_dlg nptrend numlabel numlist odbc old_ver olo olog ologi ologi_sw ologit ologit_p ologitp on one onew onewa oneway op_colnm op_comp op_diff op_inv op_str opr opro oprob oprob_sw oprobi oprobi_p oprobit oprobitp opts_exclusive order orthog orthpoly ou out outf outfi outfil outfile outs outsh outshe outshee outsheet ovtest pac pac_7 palette parse parse_dissim pause pca pca_8 pca_display pca_estat pca_p pca_rotate pcamat pchart pchart_7 pchi pchi_7 pcorr pctile pentium pergram pergram_7 permute permute_8 personal peto_st pkcollapse pkcross pkequiv pkexamine pkexamine_7 pkshape pksumm pksumm_7 pl plo plot plugin pnorm pnorm_7 poisgof poiss_lf poiss_sw poisso_p poisson poisson_estat post postclose postfile postutil pperron pr prais prais_e prais_e2 prais_p predict predictnl preserve print pro prob probi probit probit_estat probit_p proc_time procoverlay procrustes procrustes_estat procrustes_p profiler prog progr progra program prop proportion prtest prtesti pwcorr pwd q\\\\s qby qbys qchi qchi_7 qladder qladder_7 qnorm qnorm_7 qqplot qqplot_7 qreg qreg_c qreg_p qreg_sw qu quadchk quantile quantile_7 que quer query range ranksum ratio rchart rchart_7 rcof recast reclink recode reg reg3 reg3_p regdw regr regre regre_p2 regres regres_p regress regress_estat regriv_p remap ren rena renam rename renpfix repeat replace report reshape restore ret retu retur return rm rmdir robvar roccomp roccomp_7 roccomp_8 rocf_lf rocfit rocfit_8 rocgold rocplot rocplot_7 roctab roctab_7 rolling rologit rologit_p rot rota rotat rotate rotatemat rreg rreg_p ru run runtest rvfplot rvfplot_7 rvpplot rvpplot_7 sa safesum sample sampsi sav save savedresults saveold sc sca scal scala scalar scatter scm_mine sco scob_lf scob_p scobi_sw scobit scor score scoreplot scoreplot_help scree screeplot screeplot_help sdtest sdtesti se search separate seperate serrbar serrbar_7 serset set set_defaults sfrancia sh she shel shell shewhart shewhart_7 signestimationsample signrank signtest simul simul_7 simulate simulate_8 sktest sleep slogit slogit_d2 slogit_p smooth snapspan so sor sort spearman spikeplot spikeplot_7 spikeplt spline_x split sqreg sqreg_p sret sretu sretur sreturn ssc st st_ct st_hc st_hcd st_hcd_sh st_is st_issys st_note st_promo st_set st_show st_smpl st_subid stack statsby statsby_8 stbase stci stci_7 stcox stcox_estat stcox_fr stcox_fr_ll stcox_p stcox_sw stcoxkm stcoxkm_7 stcstat stcurv stcurve stcurve_7 stdes stem stepwise stereg stfill stgen stir stjoin stmc stmh stphplot stphplot_7 stphtest stphtest_7 stptime strate strate_7 streg streg_sw streset sts sts_7 stset stsplit stsum sttocc sttoct stvary stweib su suest suest_8 sum summ summa summar summari summariz summarize sunflower sureg survcurv survsum svar svar_p svmat svy svy_disp svy_dreg svy_est svy_est_7 svy_estat svy_get svy_gnbreg_p svy_head svy_header svy_heckman_p svy_heckprob_p svy_intreg_p svy_ivreg_p svy_logistic_p svy_logit_p svy_mlogit_p svy_nbreg_p svy_ologit_p svy_oprobit_p svy_poisson_p svy_probit_p svy_regress_p svy_sub svy_sub_7 svy_x svy_x_7 svy_x_p svydes svydes_8 svygen svygnbreg svyheckman svyheckprob svyintreg svyintreg_7 svyintrg svyivreg svylc svylog_p svylogit svymarkout svymarkout_8 svymean svymlog svymlogit svynbreg svyolog svyologit svyoprob svyoprobit svyopts svypois svypois_7 svypoisson svyprobit svyprobt svyprop svyprop_7 svyratio svyreg svyreg_p svyregress svyset svyset_7 svyset_8 svytab svytab_7 svytest svytotal sw sw_8 swcnreg swcox swereg swilk swlogis swlogit swologit swoprbt swpois swprobit swqreg swtobit swweib symmetry symmi symplot symplot_7 syntax sysdescribe sysdir sysuse szroeter ta tab tab1 tab2 tab_or tabd tabdi tabdis tabdisp tabi table tabodds tabodds_7 tabstat tabu tabul tabula tabulat tabulate te tempfile tempname tempvar tes test testnl testparm teststd tetrachoric time_it timer tis tob tobi tobit tobit_p tobit_sw token tokeni tokeniz tokenize tostring total translate translator transmap treat_ll treatr_p treatreg trim trimfill trnb_cons trnb_mean trpoiss_d2 trunc_ll truncr_p truncreg tsappend tset tsfill tsline tsline_ex tsreport tsrevar tsrline tsset tssmooth tsunab ttest ttesti tut_chk tut_wait tutorial tw tware_st two twoway twoway__fpfit_serset twoway__function_gen twoway__histogram_gen twoway__ipoint_serset twoway__ipoints_serset twoway__kdensity_gen twoway__lfit_serset twoway__normgen_gen twoway__pci_serset twoway__qfit_serset twoway__scatteri_serset twoway__sunflower_gen twoway_ksm_serset ty typ type typeof u|0 unab unabbrev unabcmd update us use uselabel var var_mkcompanion var_p varbasic varfcast vargranger varirf varirf_add varirf_cgraph varirf_create varirf_ctable varirf_describe varirf_dir varirf_drop varirf_erase varirf_graph varirf_ograph varirf_rename varirf_set varirf_table varlist varlmar varnorm varsoc varstable varstable_w varstable_w2 varwle vce vec vec_fevd vec_mkphi vec_p vec_p_w vecirf_create veclmar veclmar_w vecnorm vecnorm_w vecrank vecstable verinst vers versi versio version view viewsource vif vwls wdatetof webdescribe webseek webuse weib1_lf weib2_lf weib_lf weib_lf0 weibhet_glf weibhet_glf_sh weibhet_glfa weibhet_glfa_sh weibhet_gp weibhet_ilf weibhet_ilf_sh weibhet_ilfa weibhet_ilfa_sh weibhet_ip weibu_sw weibul_p weibull weibull_c weibull_s weibullhet wh whelp whi which whil while wilc_st wilcoxon win wind windo window winexec wntestb wntestb_7 wntestq xchart xchart_7 xcorr xcorr_7 xi xi_6 xmlsav xmlsave xmluse xpose xsh xshe xshel xshell xt_iis xt_tis xtab_p xtabond xtbin_p xtclog xtcloglog xtcloglog_8 xtcloglog_d2 xtcloglog_pa_p xtcloglog_re_p xtcnt_p xtcorr xtdata xtdes xtfront_p xtfrontier xtgee xtgee_elink xtgee_estat xtgee_makeivar xtgee_p xtgee_plink xtgls xtgls_p xthaus xthausman xtht_p xthtaylor xtile xtint_p xtintreg xtintreg_8 xtintreg_d2 xtintreg_p xtivp_1 xtivp_2 xtivreg xtline xtline_ex xtlogit xtlogit_8 xtlogit_d2 xtlogit_fe_p xtlogit_pa_p xtlogit_re_p xtmixed xtmixed_estat xtmixed_p xtnb_fe xtnb_lf xtnbreg xtnbreg_pa_p xtnbreg_refe_p xtpcse xtpcse_p xtpois xtpoisson xtpoisson_d2 xtpoisson_pa_p xtpoisson_refe_p xtpred xtprobit xtprobit_8 xtprobit_d2 xtprobit_re_p xtps_fe xtps_lf xtps_ren xtps_ren_8 xtrar_p xtrc xtrc_p xtrchh xtrefe_p xtreg xtreg_be xtreg_fe xtreg_ml xtreg_pa_p xtreg_re xtregar xtrere_p xtset xtsf_ll xtsf_llti xtsum xttab xttest0 xttobit xttobit_8 xttobit_p xttrans yx yxview__barlike_draw yxview_area_draw yxview_bar_draw yxview_dot_draw yxview_dropline_draw yxview_function_draw yxview_iarrow_draw yxview_ilabels_draw yxview_normal_draw yxview_pcarrow_draw yxview_pcbarrow_draw yxview_pccapsym_draw yxview_pcscatter_draw yxview_pcspike_draw yxview_rarea_draw yxview_rbar_draw yxview_rbarm_draw yxview_rcap_draw yxview_rcapsym_draw yxview_rconnected_draw yxview_rline_draw yxview_rscatter_draw yxview_rspike_draw yxview_spike_draw yxview_sunflower_draw zap_s zinb zinb_llf zinb_plf zip zip_llf zip_p zip_plf zt_ct_5 zt_hc_5 zt_hcd_5 zt_is_5 zt_iss_5 zt_sho_5 zt_smp_5 ztbase_5 ztcox_5 ztdes_5 ztereg_5 ztfill_5 ztgen_5 ztir_5 ztjoin_5 ztnb ztnb_p ztp ztp_p zts_5 ztset_5 ztspli_5 ztsum_5 zttoct_5 ztvary_5 ztweib_5',\n    contains: [\n      {\n        className: 'symbol',\n        begin: /`[a-zA-Z0-9_]+'/\n      },\n      {\n        className: 'variable',\n        begin: /\\$\\{?[a-zA-Z0-9_]+\\}?/,\n        relevance: 0\n      },\n      {\n        className: 'string',\n        variants: [\n          { begin: '`\"[^\\r\\n]*?\"\\'' },\n          { begin: '\"[^\\r\\n\"]*\"' }\n        ]\n      },\n\n      {\n        className: 'built_in',\n        variants: [ { begin: '\\\\b(abs|acos|asin|atan|atan2|atanh|ceil|cloglog|comb|cos|digamma|exp|floor|invcloglog|invlogit|ln|lnfact|lnfactorial|lngamma|log|log10|max|min|mod|reldif|round|sign|sin|sqrt|sum|tan|tanh|trigamma|trunc|betaden|Binomial|binorm|binormal|chi2|chi2tail|dgammapda|dgammapdada|dgammapdadx|dgammapdx|dgammapdxdx|F|Fden|Ftail|gammaden|gammap|ibeta|invbinomial|invchi2|invchi2tail|invF|invFtail|invgammap|invibeta|invnchi2|invnFtail|invnibeta|invnorm|invnormal|invttail|nbetaden|nchi2|nFden|nFtail|nibeta|norm|normal|normalden|normd|npnchi2|tden|ttail|uniform|abbrev|char|index|indexnot|length|lower|ltrim|match|plural|proper|real|regexm|regexr|regexs|reverse|rtrim|string|strlen|strlower|strltrim|strmatch|strofreal|strpos|strproper|strreverse|strrtrim|strtrim|strupper|subinstr|subinword|substr|trim|upper|word|wordcount|_caller|autocode|byteorder|chop|clip|cond|e|epsdouble|epsfloat|group|inlist|inrange|irecode|matrix|maxbyte|maxdouble|maxfloat|maxint|maxlong|mi|minbyte|mindouble|minfloat|minint|minlong|missing|r|recode|replay|return|s|scalar|d|date|day|dow|doy|halfyear|mdy|month|quarter|week|year|d|daily|dofd|dofh|dofm|dofq|dofw|dofy|h|halfyearly|hofd|m|mofd|monthly|q|qofd|quarterly|tin|twithin|w|weekly|wofd|y|yearly|yh|ym|yofd|yq|yw|cholesky|colnumb|colsof|corr|det|diag|diag0cnt|el|get|hadamard|I|inv|invsym|issym|issymmetric|J|matmissing|matuniform|mreldif|nullmat|rownumb|rowsof|sweep|syminv|trace|vec|vecdiag)(?=\\\\()' } ]\n      },\n\n      hljs.COMMENT('^[ \\t]*\\\\*.*$', false),\n      hljs.C_LINE_COMMENT_MODE,\n      hljs.C_BLOCK_COMMENT_MODE\n    ]\n  };\n}\n\nmodule.exports = stata;\n","/*\nLanguage: STEP Part 21\nContributors: Adam Joseph Cook <adam.joseph.cook@gmail.com>\nDescription: Syntax highlighter for STEP Part 21 files (ISO 10303-21).\nWebsite: https://en.wikipedia.org/wiki/ISO_10303-21\nCategory: syntax\n*/\n\nfunction step21(hljs) {\n  const STEP21_IDENT_RE = '[A-Z_][A-Z0-9_.]*';\n  const STEP21_KEYWORDS = {\n    $pattern: STEP21_IDENT_RE,\n    keyword: [\n      \"HEADER\",\n      \"ENDSEC\",\n      \"DATA\"\n    ]\n  };\n  const STEP21_START = {\n    className: 'meta',\n    begin: 'ISO-10303-21;',\n    relevance: 10\n  };\n  const STEP21_CLOSE = {\n    className: 'meta',\n    begin: 'END-ISO-10303-21;',\n    relevance: 10\n  };\n\n  return {\n    name: 'STEP Part 21',\n    aliases: [\n      'p21',\n      'step',\n      'stp'\n    ],\n    case_insensitive: true, // STEP 21 is case insensitive in theory, in practice all non-comments are capitalized.\n    keywords: STEP21_KEYWORDS,\n    contains: [\n      STEP21_START,\n      STEP21_CLOSE,\n      hljs.C_LINE_COMMENT_MODE,\n      hljs.C_BLOCK_COMMENT_MODE,\n      hljs.COMMENT('/\\\\*\\\\*!', '\\\\*/'),\n      hljs.C_NUMBER_MODE,\n      hljs.inherit(hljs.APOS_STRING_MODE, { illegal: null }),\n      hljs.inherit(hljs.QUOTE_STRING_MODE, { illegal: null }),\n      {\n        className: 'string',\n        begin: \"'\",\n        end: \"'\"\n      },\n      {\n        className: 'symbol',\n        variants: [\n          {\n            begin: '#',\n            end: '\\\\d+',\n            illegal: '\\\\W'\n          }\n        ]\n      }\n    ]\n  };\n}\n\nmodule.exports = step21;\n","const MODES = (hljs) => {\n  return {\n    IMPORTANT: {\n      scope: 'meta',\n      begin: '!important'\n    },\n    BLOCK_COMMENT: hljs.C_BLOCK_COMMENT_MODE,\n    HEXCOLOR: {\n      scope: 'number',\n      begin: /#(([0-9a-fA-F]{3,4})|(([0-9a-fA-F]{2}){3,4}))\\b/\n    },\n    FUNCTION_DISPATCH: {\n      className: \"built_in\",\n      begin: /[\\w-]+(?=\\()/\n    },\n    ATTRIBUTE_SELECTOR_MODE: {\n      scope: 'selector-attr',\n      begin: /\\[/,\n      end: /\\]/,\n      illegal: '$',\n      contains: [\n        hljs.APOS_STRING_MODE,\n        hljs.QUOTE_STRING_MODE\n      ]\n    },\n    CSS_NUMBER_MODE: {\n      scope: 'number',\n      begin: hljs.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    },\n    CSS_VARIABLE: {\n      className: \"attr\",\n      begin: /--[A-Za-z_][A-Za-z0-9_-]*/\n    }\n  };\n};\n\nconst HTML_TAGS = [\n  'a',\n  'abbr',\n  'address',\n  'article',\n  'aside',\n  'audio',\n  'b',\n  'blockquote',\n  'body',\n  'button',\n  'canvas',\n  'caption',\n  'cite',\n  'code',\n  'dd',\n  'del',\n  'details',\n  'dfn',\n  'div',\n  'dl',\n  'dt',\n  'em',\n  'fieldset',\n  'figcaption',\n  'figure',\n  'footer',\n  'form',\n  'h1',\n  'h2',\n  'h3',\n  'h4',\n  'h5',\n  'h6',\n  'header',\n  'hgroup',\n  'html',\n  'i',\n  'iframe',\n  'img',\n  'input',\n  'ins',\n  'kbd',\n  'label',\n  'legend',\n  'li',\n  'main',\n  'mark',\n  'menu',\n  'nav',\n  'object',\n  'ol',\n  'optgroup',\n  'option',\n  'p',\n  'picture',\n  'q',\n  'quote',\n  'samp',\n  'section',\n  'select',\n  'source',\n  'span',\n  'strong',\n  'summary',\n  'sup',\n  'table',\n  'tbody',\n  'td',\n  'textarea',\n  'tfoot',\n  'th',\n  'thead',\n  'time',\n  'tr',\n  'ul',\n  'var',\n  'video'\n];\n\nconst SVG_TAGS = [\n  'defs',\n  'g',\n  'marker',\n  'mask',\n  'pattern',\n  'svg',\n  'switch',\n  'symbol',\n  'feBlend',\n  'feColorMatrix',\n  'feComponentTransfer',\n  'feComposite',\n  'feConvolveMatrix',\n  'feDiffuseLighting',\n  'feDisplacementMap',\n  'feFlood',\n  'feGaussianBlur',\n  'feImage',\n  'feMerge',\n  'feMorphology',\n  'feOffset',\n  'feSpecularLighting',\n  'feTile',\n  'feTurbulence',\n  'linearGradient',\n  'radialGradient',\n  'stop',\n  'circle',\n  'ellipse',\n  'image',\n  'line',\n  'path',\n  'polygon',\n  'polyline',\n  'rect',\n  'text',\n  'use',\n  'textPath',\n  'tspan',\n  'foreignObject',\n  'clipPath'\n];\n\nconst TAGS = [\n  ...HTML_TAGS,\n  ...SVG_TAGS,\n];\n\n// Sorting, then reversing makes sure longer attributes/elements like\n// `font-weight` are matched fully instead of getting false positives on say `font`\n\nconst MEDIA_FEATURES = [\n  'any-hover',\n  'any-pointer',\n  'aspect-ratio',\n  'color',\n  'color-gamut',\n  'color-index',\n  'device-aspect-ratio',\n  'device-height',\n  'device-width',\n  'display-mode',\n  'forced-colors',\n  'grid',\n  'height',\n  'hover',\n  'inverted-colors',\n  'monochrome',\n  'orientation',\n  'overflow-block',\n  'overflow-inline',\n  'pointer',\n  'prefers-color-scheme',\n  'prefers-contrast',\n  'prefers-reduced-motion',\n  'prefers-reduced-transparency',\n  'resolution',\n  'scan',\n  'scripting',\n  'update',\n  'width',\n  // TODO: find a better solution?\n  'min-width',\n  'max-width',\n  'min-height',\n  'max-height'\n].sort().reverse();\n\n// https://developer.mozilla.org/en-US/docs/Web/CSS/Pseudo-classes\nconst PSEUDO_CLASSES = [\n  'active',\n  'any-link',\n  'blank',\n  'checked',\n  'current',\n  'default',\n  'defined',\n  'dir', // dir()\n  'disabled',\n  'drop',\n  'empty',\n  'enabled',\n  'first',\n  'first-child',\n  'first-of-type',\n  'fullscreen',\n  'future',\n  'focus',\n  'focus-visible',\n  'focus-within',\n  'has', // has()\n  'host', // host or host()\n  'host-context', // host-context()\n  'hover',\n  'indeterminate',\n  'in-range',\n  'invalid',\n  'is', // is()\n  'lang', // lang()\n  'last-child',\n  'last-of-type',\n  'left',\n  'link',\n  'local-link',\n  'not', // not()\n  'nth-child', // nth-child()\n  'nth-col', // nth-col()\n  'nth-last-child', // nth-last-child()\n  'nth-last-col', // nth-last-col()\n  'nth-last-of-type', //nth-last-of-type()\n  'nth-of-type', //nth-of-type()\n  'only-child',\n  'only-of-type',\n  'optional',\n  'out-of-range',\n  'past',\n  'placeholder-shown',\n  'read-only',\n  'read-write',\n  'required',\n  'right',\n  'root',\n  'scope',\n  'target',\n  'target-within',\n  'user-invalid',\n  'valid',\n  'visited',\n  'where' // where()\n].sort().reverse();\n\n// https://developer.mozilla.org/en-US/docs/Web/CSS/Pseudo-elements\nconst PSEUDO_ELEMENTS = [\n  'after',\n  'backdrop',\n  'before',\n  'cue',\n  'cue-region',\n  'first-letter',\n  'first-line',\n  'grammar-error',\n  'marker',\n  'part',\n  'placeholder',\n  'selection',\n  'slotted',\n  'spelling-error'\n].sort().reverse();\n\nconst ATTRIBUTES = [\n  'accent-color',\n  'align-content',\n  'align-items',\n  'align-self',\n  'alignment-baseline',\n  'all',\n  'anchor-name',\n  'animation',\n  'animation-composition',\n  'animation-delay',\n  'animation-direction',\n  'animation-duration',\n  'animation-fill-mode',\n  'animation-iteration-count',\n  'animation-name',\n  'animation-play-state',\n  'animation-range',\n  'animation-range-end',\n  'animation-range-start',\n  'animation-timeline',\n  'animation-timing-function',\n  'appearance',\n  'aspect-ratio',\n  'backdrop-filter',\n  'backface-visibility',\n  'background',\n  'background-attachment',\n  'background-blend-mode',\n  'background-clip',\n  'background-color',\n  'background-image',\n  'background-origin',\n  'background-position',\n  'background-position-x',\n  'background-position-y',\n  'background-repeat',\n  'background-size',\n  'baseline-shift',\n  'block-size',\n  'border',\n  'border-block',\n  'border-block-color',\n  'border-block-end',\n  'border-block-end-color',\n  'border-block-end-style',\n  'border-block-end-width',\n  'border-block-start',\n  'border-block-start-color',\n  'border-block-start-style',\n  'border-block-start-width',\n  'border-block-style',\n  'border-block-width',\n  'border-bottom',\n  'border-bottom-color',\n  'border-bottom-left-radius',\n  'border-bottom-right-radius',\n  'border-bottom-style',\n  'border-bottom-width',\n  'border-collapse',\n  'border-color',\n  'border-end-end-radius',\n  'border-end-start-radius',\n  'border-image',\n  'border-image-outset',\n  'border-image-repeat',\n  'border-image-slice',\n  'border-image-source',\n  'border-image-width',\n  'border-inline',\n  'border-inline-color',\n  'border-inline-end',\n  'border-inline-end-color',\n  'border-inline-end-style',\n  'border-inline-end-width',\n  'border-inline-start',\n  'border-inline-start-color',\n  'border-inline-start-style',\n  'border-inline-start-width',\n  'border-inline-style',\n  'border-inline-width',\n  'border-left',\n  'border-left-color',\n  'border-left-style',\n  'border-left-width',\n  'border-radius',\n  'border-right',\n  'border-right-color',\n  'border-right-style',\n  'border-right-width',\n  'border-spacing',\n  'border-start-end-radius',\n  'border-start-start-radius',\n  'border-style',\n  'border-top',\n  'border-top-color',\n  'border-top-left-radius',\n  'border-top-right-radius',\n  'border-top-style',\n  'border-top-width',\n  'border-width',\n  'bottom',\n  'box-align',\n  'box-decoration-break',\n  'box-direction',\n  'box-flex',\n  'box-flex-group',\n  'box-lines',\n  'box-ordinal-group',\n  'box-orient',\n  'box-pack',\n  'box-shadow',\n  'box-sizing',\n  'break-after',\n  'break-before',\n  'break-inside',\n  'caption-side',\n  'caret-color',\n  'clear',\n  'clip',\n  'clip-path',\n  'clip-rule',\n  'color',\n  'color-interpolation',\n  'color-interpolation-filters',\n  'color-profile',\n  'color-rendering',\n  'color-scheme',\n  'column-count',\n  'column-fill',\n  'column-gap',\n  'column-rule',\n  'column-rule-color',\n  'column-rule-style',\n  'column-rule-width',\n  'column-span',\n  'column-width',\n  'columns',\n  'contain',\n  'contain-intrinsic-block-size',\n  'contain-intrinsic-height',\n  'contain-intrinsic-inline-size',\n  'contain-intrinsic-size',\n  'contain-intrinsic-width',\n  'container',\n  'container-name',\n  'container-type',\n  'content',\n  'content-visibility',\n  'counter-increment',\n  'counter-reset',\n  'counter-set',\n  'cue',\n  'cue-after',\n  'cue-before',\n  'cursor',\n  'cx',\n  'cy',\n  'direction',\n  'display',\n  'dominant-baseline',\n  'empty-cells',\n  'enable-background',\n  'field-sizing',\n  'fill',\n  'fill-opacity',\n  'fill-rule',\n  'filter',\n  'flex',\n  'flex-basis',\n  'flex-direction',\n  'flex-flow',\n  'flex-grow',\n  'flex-shrink',\n  'flex-wrap',\n  'float',\n  'flood-color',\n  'flood-opacity',\n  'flow',\n  'font',\n  'font-display',\n  'font-family',\n  'font-feature-settings',\n  'font-kerning',\n  'font-language-override',\n  'font-optical-sizing',\n  'font-palette',\n  'font-size',\n  'font-size-adjust',\n  'font-smooth',\n  'font-smoothing',\n  'font-stretch',\n  'font-style',\n  'font-synthesis',\n  'font-synthesis-position',\n  'font-synthesis-small-caps',\n  'font-synthesis-style',\n  'font-synthesis-weight',\n  'font-variant',\n  'font-variant-alternates',\n  'font-variant-caps',\n  'font-variant-east-asian',\n  'font-variant-emoji',\n  'font-variant-ligatures',\n  'font-variant-numeric',\n  'font-variant-position',\n  'font-variation-settings',\n  'font-weight',\n  'forced-color-adjust',\n  'gap',\n  'glyph-orientation-horizontal',\n  'glyph-orientation-vertical',\n  'grid',\n  'grid-area',\n  'grid-auto-columns',\n  'grid-auto-flow',\n  'grid-auto-rows',\n  'grid-column',\n  'grid-column-end',\n  'grid-column-start',\n  'grid-gap',\n  'grid-row',\n  'grid-row-end',\n  'grid-row-start',\n  'grid-template',\n  'grid-template-areas',\n  'grid-template-columns',\n  'grid-template-rows',\n  'hanging-punctuation',\n  'height',\n  'hyphenate-character',\n  'hyphenate-limit-chars',\n  'hyphens',\n  'icon',\n  'image-orientation',\n  'image-rendering',\n  'image-resolution',\n  'ime-mode',\n  'initial-letter',\n  'initial-letter-align',\n  'inline-size',\n  'inset',\n  'inset-area',\n  'inset-block',\n  'inset-block-end',\n  'inset-block-start',\n  'inset-inline',\n  'inset-inline-end',\n  'inset-inline-start',\n  'isolation',\n  'justify-content',\n  'justify-items',\n  'justify-self',\n  'kerning',\n  'left',\n  'letter-spacing',\n  'lighting-color',\n  'line-break',\n  'line-height',\n  'line-height-step',\n  'list-style',\n  'list-style-image',\n  'list-style-position',\n  'list-style-type',\n  'margin',\n  'margin-block',\n  'margin-block-end',\n  'margin-block-start',\n  'margin-bottom',\n  'margin-inline',\n  'margin-inline-end',\n  'margin-inline-start',\n  'margin-left',\n  'margin-right',\n  'margin-top',\n  'margin-trim',\n  'marker',\n  'marker-end',\n  'marker-mid',\n  'marker-start',\n  'marks',\n  'mask',\n  'mask-border',\n  'mask-border-mode',\n  'mask-border-outset',\n  'mask-border-repeat',\n  'mask-border-slice',\n  'mask-border-source',\n  'mask-border-width',\n  'mask-clip',\n  'mask-composite',\n  'mask-image',\n  'mask-mode',\n  'mask-origin',\n  'mask-position',\n  'mask-repeat',\n  'mask-size',\n  'mask-type',\n  'masonry-auto-flow',\n  'math-depth',\n  'math-shift',\n  'math-style',\n  'max-block-size',\n  'max-height',\n  'max-inline-size',\n  'max-width',\n  'min-block-size',\n  'min-height',\n  'min-inline-size',\n  'min-width',\n  'mix-blend-mode',\n  'nav-down',\n  'nav-index',\n  'nav-left',\n  'nav-right',\n  'nav-up',\n  'none',\n  'normal',\n  'object-fit',\n  'object-position',\n  'offset',\n  'offset-anchor',\n  'offset-distance',\n  'offset-path',\n  'offset-position',\n  'offset-rotate',\n  'opacity',\n  'order',\n  'orphans',\n  'outline',\n  'outline-color',\n  'outline-offset',\n  'outline-style',\n  'outline-width',\n  'overflow',\n  'overflow-anchor',\n  'overflow-block',\n  'overflow-clip-margin',\n  'overflow-inline',\n  'overflow-wrap',\n  'overflow-x',\n  'overflow-y',\n  'overlay',\n  'overscroll-behavior',\n  'overscroll-behavior-block',\n  'overscroll-behavior-inline',\n  'overscroll-behavior-x',\n  'overscroll-behavior-y',\n  'padding',\n  'padding-block',\n  'padding-block-end',\n  'padding-block-start',\n  'padding-bottom',\n  'padding-inline',\n  'padding-inline-end',\n  'padding-inline-start',\n  'padding-left',\n  'padding-right',\n  'padding-top',\n  'page',\n  'page-break-after',\n  'page-break-before',\n  'page-break-inside',\n  'paint-order',\n  'pause',\n  'pause-after',\n  'pause-before',\n  'perspective',\n  'perspective-origin',\n  'place-content',\n  'place-items',\n  'place-self',\n  'pointer-events',\n  'position',\n  'position-anchor',\n  'position-visibility',\n  'print-color-adjust',\n  'quotes',\n  'r',\n  'resize',\n  'rest',\n  'rest-after',\n  'rest-before',\n  'right',\n  'rotate',\n  'row-gap',\n  'ruby-align',\n  'ruby-position',\n  'scale',\n  'scroll-behavior',\n  'scroll-margin',\n  'scroll-margin-block',\n  'scroll-margin-block-end',\n  'scroll-margin-block-start',\n  'scroll-margin-bottom',\n  'scroll-margin-inline',\n  'scroll-margin-inline-end',\n  'scroll-margin-inline-start',\n  'scroll-margin-left',\n  'scroll-margin-right',\n  'scroll-margin-top',\n  'scroll-padding',\n  'scroll-padding-block',\n  'scroll-padding-block-end',\n  'scroll-padding-block-start',\n  'scroll-padding-bottom',\n  'scroll-padding-inline',\n  'scroll-padding-inline-end',\n  'scroll-padding-inline-start',\n  'scroll-padding-left',\n  'scroll-padding-right',\n  'scroll-padding-top',\n  'scroll-snap-align',\n  'scroll-snap-stop',\n  'scroll-snap-type',\n  'scroll-timeline',\n  'scroll-timeline-axis',\n  'scroll-timeline-name',\n  'scrollbar-color',\n  'scrollbar-gutter',\n  'scrollbar-width',\n  'shape-image-threshold',\n  'shape-margin',\n  'shape-outside',\n  'shape-rendering',\n  'speak',\n  'speak-as',\n  'src', // @font-face\n  'stop-color',\n  'stop-opacity',\n  'stroke',\n  'stroke-dasharray',\n  'stroke-dashoffset',\n  'stroke-linecap',\n  'stroke-linejoin',\n  'stroke-miterlimit',\n  'stroke-opacity',\n  'stroke-width',\n  'tab-size',\n  'table-layout',\n  'text-align',\n  'text-align-all',\n  'text-align-last',\n  'text-anchor',\n  'text-combine-upright',\n  'text-decoration',\n  'text-decoration-color',\n  'text-decoration-line',\n  'text-decoration-skip',\n  'text-decoration-skip-ink',\n  'text-decoration-style',\n  'text-decoration-thickness',\n  'text-emphasis',\n  'text-emphasis-color',\n  'text-emphasis-position',\n  'text-emphasis-style',\n  'text-indent',\n  'text-justify',\n  'text-orientation',\n  'text-overflow',\n  'text-rendering',\n  'text-shadow',\n  'text-size-adjust',\n  'text-transform',\n  'text-underline-offset',\n  'text-underline-position',\n  'text-wrap',\n  'text-wrap-mode',\n  'text-wrap-style',\n  'timeline-scope',\n  'top',\n  'touch-action',\n  'transform',\n  'transform-box',\n  'transform-origin',\n  'transform-style',\n  'transition',\n  'transition-behavior',\n  'transition-delay',\n  'transition-duration',\n  'transition-property',\n  'transition-timing-function',\n  'translate',\n  'unicode-bidi',\n  'user-modify',\n  'user-select',\n  'vector-effect',\n  'vertical-align',\n  'view-timeline',\n  'view-timeline-axis',\n  'view-timeline-inset',\n  'view-timeline-name',\n  'view-transition-name',\n  'visibility',\n  'voice-balance',\n  'voice-duration',\n  'voice-family',\n  'voice-pitch',\n  'voice-range',\n  'voice-rate',\n  'voice-stress',\n  'voice-volume',\n  'white-space',\n  'white-space-collapse',\n  'widows',\n  'width',\n  'will-change',\n  'word-break',\n  'word-spacing',\n  'word-wrap',\n  'writing-mode',\n  'x',\n  'y',\n  'z-index',\n  'zoom'\n].sort().reverse();\n\n/*\nLanguage: Stylus\nAuthor: Bryant Williams <b.n.williams@gmail.com>\nDescription: Stylus is an expressive, robust, feature-rich CSS language built for nodejs.\nWebsite: https://github.com/stylus/stylus\nCategory: css, web\n*/\n\n\n/** @type LanguageFn */\nfunction stylus(hljs) {\n  const modes = MODES(hljs);\n\n  const AT_MODIFIERS = \"and or not only\";\n  const VARIABLE = {\n    className: 'variable',\n    begin: '\\\\$' + hljs.IDENT_RE\n  };\n\n  const AT_KEYWORDS = [\n    'charset',\n    'css',\n    'debug',\n    'extend',\n    'font-face',\n    'for',\n    'import',\n    'include',\n    'keyframes',\n    'media',\n    'mixin',\n    'page',\n    'warn',\n    'while'\n  ];\n\n  const LOOKAHEAD_TAG_END = '(?=[.\\\\s\\\\n[:,(])';\n\n  // illegals\n  const ILLEGAL = [\n    '\\\\?',\n    '(\\\\bReturn\\\\b)', // monkey\n    '(\\\\bEnd\\\\b)', // monkey\n    '(\\\\bend\\\\b)', // vbscript\n    '(\\\\bdef\\\\b)', // gradle\n    ';', // a whole lot of languages\n    '#\\\\s', // markdown\n    '\\\\*\\\\s', // markdown\n    '===\\\\s', // markdown\n    '\\\\|',\n    '%' // prolog\n  ];\n\n  return {\n    name: 'Stylus',\n    aliases: [ 'styl' ],\n    case_insensitive: false,\n    keywords: 'if else for in',\n    illegal: '(' + ILLEGAL.join('|') + ')',\n    contains: [\n\n      // strings\n      hljs.QUOTE_STRING_MODE,\n      hljs.APOS_STRING_MODE,\n\n      // comments\n      hljs.C_LINE_COMMENT_MODE,\n      hljs.C_BLOCK_COMMENT_MODE,\n\n      // hex colors\n      modes.HEXCOLOR,\n\n      // class tag\n      {\n        begin: '\\\\.[a-zA-Z][a-zA-Z0-9_-]*' + LOOKAHEAD_TAG_END,\n        className: 'selector-class'\n      },\n\n      // id tag\n      {\n        begin: '#[a-zA-Z][a-zA-Z0-9_-]*' + LOOKAHEAD_TAG_END,\n        className: 'selector-id'\n      },\n\n      // tags\n      {\n        begin: '\\\\b(' + TAGS.join('|') + ')' + LOOKAHEAD_TAG_END,\n        className: 'selector-tag'\n      },\n\n      // psuedo selectors\n      {\n        className: 'selector-pseudo',\n        begin: '&?:(' + PSEUDO_CLASSES.join('|') + ')' + LOOKAHEAD_TAG_END\n      },\n      {\n        className: 'selector-pseudo',\n        begin: '&?:(:)?(' + PSEUDO_ELEMENTS.join('|') + ')' + LOOKAHEAD_TAG_END\n      },\n\n      modes.ATTRIBUTE_SELECTOR_MODE,\n\n      {\n        className: \"keyword\",\n        begin: /@media/,\n        starts: {\n          end: /[{;}]/,\n          keywords: {\n            $pattern: /[a-z-]+/,\n            keyword: AT_MODIFIERS,\n            attribute: MEDIA_FEATURES.join(\" \")\n          },\n          contains: [ modes.CSS_NUMBER_MODE ]\n        }\n      },\n\n      // @ keywords\n      {\n        className: 'keyword',\n        begin: '\\@((-(o|moz|ms|webkit)-)?(' + AT_KEYWORDS.join('|') + '))\\\\b'\n      },\n\n      // variables\n      VARIABLE,\n\n      // dimension\n      modes.CSS_NUMBER_MODE,\n\n      // functions\n      //  - only from beginning of line + whitespace\n      {\n        className: 'function',\n        begin: '^[a-zA-Z][a-zA-Z0-9_\\-]*\\\\(.*\\\\)',\n        illegal: '[\\\\n]',\n        returnBegin: true,\n        contains: [\n          {\n            className: 'title',\n            begin: '\\\\b[a-zA-Z][a-zA-Z0-9_\\-]*'\n          },\n          {\n            className: 'params',\n            begin: /\\(/,\n            end: /\\)/,\n            contains: [\n              modes.HEXCOLOR,\n              VARIABLE,\n              hljs.APOS_STRING_MODE,\n              modes.CSS_NUMBER_MODE,\n              hljs.QUOTE_STRING_MODE\n            ]\n          }\n        ]\n      },\n\n      // css variables\n      modes.CSS_VARIABLE,\n\n      // attributes\n      //  - only from beginning of line + whitespace\n      //  - must have whitespace after it\n      {\n        className: 'attribute',\n        begin: '\\\\b(' + ATTRIBUTES.join('|') + ')\\\\b',\n        starts: {\n          // value container\n          end: /;|$/,\n          contains: [\n            modes.HEXCOLOR,\n            VARIABLE,\n            hljs.APOS_STRING_MODE,\n            hljs.QUOTE_STRING_MODE,\n            modes.CSS_NUMBER_MODE,\n            hljs.C_BLOCK_COMMENT_MODE,\n            modes.IMPORTANT,\n            modes.FUNCTION_DISPATCH\n          ],\n          illegal: /\\./,\n          relevance: 0\n        }\n      },\n      modes.FUNCTION_DISPATCH\n    ]\n  };\n}\n\nmodule.exports = stylus;\n","/*\nLanguage: SubUnit\nAuthor: Sergey Bronnikov <sergeyb@bronevichok.ru>\nWebsite: https://pypi.org/project/python-subunit/\nCategory: protocols\n*/\n\nfunction subunit(hljs) {\n  const DETAILS = {\n    className: 'string',\n    begin: '\\\\[\\n(multipart)?',\n    end: '\\\\]\\n'\n  };\n  const TIME = {\n    className: 'string',\n    begin: '\\\\d{4}-\\\\d{2}-\\\\d{2}(\\\\s+)\\\\d{2}:\\\\d{2}:\\\\d{2}\\.\\\\d+Z'\n  };\n  const PROGRESSVALUE = {\n    className: 'string',\n    begin: '(\\\\+|-)\\\\d+'\n  };\n  const KEYWORDS = {\n    className: 'keyword',\n    relevance: 10,\n    variants: [\n      { begin: '^(test|testing|success|successful|failure|error|skip|xfail|uxsuccess)(:?)\\\\s+(test)?' },\n      { begin: '^progress(:?)(\\\\s+)?(pop|push)?' },\n      { begin: '^tags:' },\n      { begin: '^time:' }\n    ]\n  };\n  return {\n    name: 'SubUnit',\n    case_insensitive: true,\n    contains: [\n      DETAILS,\n      TIME,\n      PROGRESSVALUE,\n      KEYWORDS\n    ]\n  };\n}\n\nmodule.exports = subunit;\n","/**\n * @param {string} value\n * @returns {RegExp}\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 } re\n * @returns {string}\n */\nfunction lookahead(re) {\n  return concat('(?=', re, ')');\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 { Array<string | RegExp | Object> } args\n * @returns {object}\n */\nfunction stripOptionsFromArgs(args) {\n  const opts = args[args.length - 1];\n\n  if (typeof opts === 'object' && opts.constructor === Object) {\n    args.splice(args.length - 1, 1);\n    return opts;\n  } else {\n    return {};\n  }\n}\n\n/** @typedef { {capture?: boolean} } RegexEitherOptions */\n\n/**\n * Any of the passed expresssions may match\n *\n * Creates a huge this | this | that | that match\n * @param {(RegExp | string)[] | [...(RegExp | string)[], RegexEitherOptions]} args\n * @returns {string}\n */\nfunction either(...args) {\n  /** @type { object & {capture?: boolean} }  */\n  const opts = stripOptionsFromArgs(args);\n  const joined = '('\n    + (opts.capture ? \"\" : \"?:\")\n    + args.map((x) => source(x)).join(\"|\") + \")\";\n  return joined;\n}\n\nconst keywordWrapper = keyword => concat(\n  /\\b/,\n  keyword,\n  /\\w$/.test(keyword) ? /\\b/ : /\\B/\n);\n\n// Keywords that require a leading dot.\nconst dotKeywords = [\n  'Protocol', // contextual\n  'Type' // contextual\n].map(keywordWrapper);\n\n// Keywords that may have a leading dot.\nconst optionalDotKeywords = [\n  'init',\n  'self'\n].map(keywordWrapper);\n\n// should register as keyword, not type\nconst keywordTypes = [\n  'Any',\n  'Self'\n];\n\n// Regular keywords and literals.\nconst keywords = [\n  // strings below will be fed into the regular `keywords` engine while regex\n  // will result in additional modes being created to scan for those keywords to\n  // avoid conflicts with other rules\n  'actor',\n  'any', // contextual\n  'associatedtype',\n  'async',\n  'await',\n  /as\\?/, // operator\n  /as!/, // operator\n  'as', // operator\n  'borrowing', // contextual\n  'break',\n  'case',\n  'catch',\n  'class',\n  'consume', // contextual\n  'consuming', // contextual\n  'continue',\n  'convenience', // contextual\n  'copy', // contextual\n  'default',\n  'defer',\n  'deinit',\n  'didSet', // contextual\n  'distributed',\n  'do',\n  'dynamic', // contextual\n  'each',\n  'else',\n  'enum',\n  'extension',\n  'fallthrough',\n  /fileprivate\\(set\\)/,\n  'fileprivate',\n  'final', // contextual\n  'for',\n  'func',\n  'get', // contextual\n  'guard',\n  'if',\n  'import',\n  'indirect', // contextual\n  'infix', // contextual\n  /init\\?/,\n  /init!/,\n  'inout',\n  /internal\\(set\\)/,\n  'internal',\n  'in',\n  'is', // operator\n  'isolated', // contextual\n  'nonisolated', // contextual\n  'lazy', // contextual\n  'let',\n  'macro',\n  'mutating', // contextual\n  'nonmutating', // contextual\n  /open\\(set\\)/, // contextual\n  'open', // contextual\n  'operator',\n  'optional', // contextual\n  'override', // contextual\n  'package',\n  'postfix', // contextual\n  'precedencegroup',\n  'prefix', // contextual\n  /private\\(set\\)/,\n  'private',\n  'protocol',\n  /public\\(set\\)/,\n  'public',\n  'repeat',\n  'required', // contextual\n  'rethrows',\n  'return',\n  'set', // contextual\n  'some', // contextual\n  'static',\n  'struct',\n  'subscript',\n  'super',\n  'switch',\n  'throws',\n  'throw',\n  /try\\?/, // operator\n  /try!/, // operator\n  'try', // operator\n  'typealias',\n  /unowned\\(safe\\)/, // contextual\n  /unowned\\(unsafe\\)/, // contextual\n  'unowned', // contextual\n  'var',\n  'weak', // contextual\n  'where',\n  'while',\n  'willSet' // contextual\n];\n\n// NOTE: Contextual keywords are reserved only in specific contexts.\n// Ideally, these should be matched using modes to avoid false positives.\n\n// Literals.\nconst literals = [\n  'false',\n  'nil',\n  'true'\n];\n\n// Keywords used in precedence groups.\nconst precedencegroupKeywords = [\n  'assignment',\n  'associativity',\n  'higherThan',\n  'left',\n  'lowerThan',\n  'none',\n  'right'\n];\n\n// Keywords that start with a number sign (#).\n// #(un)available is handled separately.\nconst numberSignKeywords = [\n  '#colorLiteral',\n  '#column',\n  '#dsohandle',\n  '#else',\n  '#elseif',\n  '#endif',\n  '#error',\n  '#file',\n  '#fileID',\n  '#fileLiteral',\n  '#filePath',\n  '#function',\n  '#if',\n  '#imageLiteral',\n  '#keyPath',\n  '#line',\n  '#selector',\n  '#sourceLocation',\n  '#warning'\n];\n\n// Global functions in the Standard Library.\nconst builtIns = [\n  'abs',\n  'all',\n  'any',\n  'assert',\n  'assertionFailure',\n  'debugPrint',\n  'dump',\n  'fatalError',\n  'getVaList',\n  'isKnownUniquelyReferenced',\n  'max',\n  'min',\n  'numericCast',\n  'pointwiseMax',\n  'pointwiseMin',\n  'precondition',\n  'preconditionFailure',\n  'print',\n  'readLine',\n  'repeatElement',\n  'sequence',\n  'stride',\n  'swap',\n  'swift_unboxFromSwiftValueWithType',\n  'transcode',\n  'type',\n  'unsafeBitCast',\n  'unsafeDowncast',\n  'withExtendedLifetime',\n  'withUnsafeMutablePointer',\n  'withUnsafePointer',\n  'withVaList',\n  'withoutActuallyEscaping',\n  'zip'\n];\n\n// Valid first characters for operators.\nconst operatorHead = either(\n  /[/=\\-+!*%<>&|^~?]/,\n  /[\\u00A1-\\u00A7]/,\n  /[\\u00A9\\u00AB]/,\n  /[\\u00AC\\u00AE]/,\n  /[\\u00B0\\u00B1]/,\n  /[\\u00B6\\u00BB\\u00BF\\u00D7\\u00F7]/,\n  /[\\u2016-\\u2017]/,\n  /[\\u2020-\\u2027]/,\n  /[\\u2030-\\u203E]/,\n  /[\\u2041-\\u2053]/,\n  /[\\u2055-\\u205E]/,\n  /[\\u2190-\\u23FF]/,\n  /[\\u2500-\\u2775]/,\n  /[\\u2794-\\u2BFF]/,\n  /[\\u2E00-\\u2E7F]/,\n  /[\\u3001-\\u3003]/,\n  /[\\u3008-\\u3020]/,\n  /[\\u3030]/\n);\n\n// Valid characters for operators.\nconst operatorCharacter = either(\n  operatorHead,\n  /[\\u0300-\\u036F]/,\n  /[\\u1DC0-\\u1DFF]/,\n  /[\\u20D0-\\u20FF]/,\n  /[\\uFE00-\\uFE0F]/,\n  /[\\uFE20-\\uFE2F]/\n  // TODO: The following characters are also allowed, but the regex isn't supported yet.\n  // /[\\u{E0100}-\\u{E01EF}]/u\n);\n\n// Valid operator.\nconst operator = concat(operatorHead, operatorCharacter, '*');\n\n// Valid first characters for identifiers.\nconst identifierHead = either(\n  /[a-zA-Z_]/,\n  /[\\u00A8\\u00AA\\u00AD\\u00AF\\u00B2-\\u00B5\\u00B7-\\u00BA]/,\n  /[\\u00BC-\\u00BE\\u00C0-\\u00D6\\u00D8-\\u00F6\\u00F8-\\u00FF]/,\n  /[\\u0100-\\u02FF\\u0370-\\u167F\\u1681-\\u180D\\u180F-\\u1DBF]/,\n  /[\\u1E00-\\u1FFF]/,\n  /[\\u200B-\\u200D\\u202A-\\u202E\\u203F-\\u2040\\u2054\\u2060-\\u206F]/,\n  /[\\u2070-\\u20CF\\u2100-\\u218F\\u2460-\\u24FF\\u2776-\\u2793]/,\n  /[\\u2C00-\\u2DFF\\u2E80-\\u2FFF]/,\n  /[\\u3004-\\u3007\\u3021-\\u302F\\u3031-\\u303F\\u3040-\\uD7FF]/,\n  /[\\uF900-\\uFD3D\\uFD40-\\uFDCF\\uFDF0-\\uFE1F\\uFE30-\\uFE44]/,\n  /[\\uFE47-\\uFEFE\\uFF00-\\uFFFD]/ // Should be /[\\uFE47-\\uFFFD]/, but we have to exclude FEFF.\n  // The following characters are also allowed, but the regexes aren't supported yet.\n  // /[\\u{10000}-\\u{1FFFD}\\u{20000-\\u{2FFFD}\\u{30000}-\\u{3FFFD}\\u{40000}-\\u{4FFFD}]/u,\n  // /[\\u{50000}-\\u{5FFFD}\\u{60000-\\u{6FFFD}\\u{70000}-\\u{7FFFD}\\u{80000}-\\u{8FFFD}]/u,\n  // /[\\u{90000}-\\u{9FFFD}\\u{A0000-\\u{AFFFD}\\u{B0000}-\\u{BFFFD}\\u{C0000}-\\u{CFFFD}]/u,\n  // /[\\u{D0000}-\\u{DFFFD}\\u{E0000-\\u{EFFFD}]/u\n);\n\n// Valid characters for identifiers.\nconst identifierCharacter = either(\n  identifierHead,\n  /\\d/,\n  /[\\u0300-\\u036F\\u1DC0-\\u1DFF\\u20D0-\\u20FF\\uFE20-\\uFE2F]/\n);\n\n// Valid identifier.\nconst identifier = concat(identifierHead, identifierCharacter, '*');\n\n// Valid type identifier.\nconst typeIdentifier = concat(/[A-Z]/, identifierCharacter, '*');\n\n// Built-in attributes, which are highlighted as keywords.\n// @available is handled separately.\n// https://docs.swift.org/swift-book/documentation/the-swift-programming-language/attributes\nconst keywordAttributes = [\n  'attached',\n  'autoclosure',\n  concat(/convention\\(/, either('swift', 'block', 'c'), /\\)/),\n  'discardableResult',\n  'dynamicCallable',\n  'dynamicMemberLookup',\n  'escaping',\n  'freestanding',\n  'frozen',\n  'GKInspectable',\n  'IBAction',\n  'IBDesignable',\n  'IBInspectable',\n  'IBOutlet',\n  'IBSegueAction',\n  'inlinable',\n  'main',\n  'nonobjc',\n  'NSApplicationMain',\n  'NSCopying',\n  'NSManaged',\n  concat(/objc\\(/, identifier, /\\)/),\n  'objc',\n  'objcMembers',\n  'propertyWrapper',\n  'requires_stored_property_inits',\n  'resultBuilder',\n  'Sendable',\n  'testable',\n  'UIApplicationMain',\n  'unchecked',\n  'unknown',\n  'usableFromInline',\n  'warn_unqualified_access'\n];\n\n// Contextual keywords used in @available and #(un)available.\nconst availabilityKeywords = [\n  'iOS',\n  'iOSApplicationExtension',\n  'macOS',\n  'macOSApplicationExtension',\n  'macCatalyst',\n  'macCatalystApplicationExtension',\n  'watchOS',\n  'watchOSApplicationExtension',\n  'tvOS',\n  'tvOSApplicationExtension',\n  'swift'\n];\n\n/*\nLanguage: Swift\nDescription: Swift is a general-purpose programming language built using a modern approach to safety, performance, and software design patterns.\nAuthor: Steven Van Impe <steven.vanimpe@icloud.com>\nContributors: Chris Eidhof <chris@eidhof.nl>, Nate Cook <natecook@gmail.com>, Alexander Lichter <manniL@gmx.net>, Richard Gibson <gibson042@github>\nWebsite: https://swift.org\nCategory: common, system\n*/\n\n\n/** @type LanguageFn */\nfunction swift(hljs) {\n  const WHITESPACE = {\n    match: /\\s+/,\n    relevance: 0\n  };\n  // https://docs.swift.org/swift-book/ReferenceManual/LexicalStructure.html#ID411\n  const BLOCK_COMMENT = hljs.COMMENT(\n    '/\\\\*',\n    '\\\\*/',\n    { contains: [ 'self' ] }\n  );\n  const COMMENTS = [\n    hljs.C_LINE_COMMENT_MODE,\n    BLOCK_COMMENT\n  ];\n\n  // https://docs.swift.org/swift-book/ReferenceManual/LexicalStructure.html#ID413\n  // https://docs.swift.org/swift-book/ReferenceManual/zzSummaryOfTheGrammar.html\n  const DOT_KEYWORD = {\n    match: [\n      /\\./,\n      either(...dotKeywords, ...optionalDotKeywords)\n    ],\n    className: { 2: \"keyword\" }\n  };\n  const KEYWORD_GUARD = {\n    // Consume .keyword to prevent highlighting properties and methods as keywords.\n    match: concat(/\\./, either(...keywords)),\n    relevance: 0\n  };\n  const PLAIN_KEYWORDS = keywords\n    .filter(kw => typeof kw === 'string')\n    .concat([ \"_|0\" ]); // seems common, so 0 relevance\n  const REGEX_KEYWORDS = keywords\n    .filter(kw => typeof kw !== 'string') // find regex\n    .concat(keywordTypes)\n    .map(keywordWrapper);\n  const KEYWORD = { variants: [\n    {\n      className: 'keyword',\n      match: either(...REGEX_KEYWORDS, ...optionalDotKeywords)\n    }\n  ] };\n  // find all the regular keywords\n  const KEYWORDS = {\n    $pattern: either(\n      /\\b\\w+/, // regular keywords\n      /#\\w+/ // number keywords\n    ),\n    keyword: PLAIN_KEYWORDS\n      .concat(numberSignKeywords),\n    literal: literals\n  };\n  const KEYWORD_MODES = [\n    DOT_KEYWORD,\n    KEYWORD_GUARD,\n    KEYWORD\n  ];\n\n  // https://github.com/apple/swift/tree/main/stdlib/public/core\n  const BUILT_IN_GUARD = {\n    // Consume .built_in to prevent highlighting properties and methods.\n    match: concat(/\\./, either(...builtIns)),\n    relevance: 0\n  };\n  const BUILT_IN = {\n    className: 'built_in',\n    match: concat(/\\b/, either(...builtIns), /(?=\\()/)\n  };\n  const BUILT_INS = [\n    BUILT_IN_GUARD,\n    BUILT_IN\n  ];\n\n  // https://docs.swift.org/swift-book/ReferenceManual/LexicalStructure.html#ID418\n  const OPERATOR_GUARD = {\n    // Prevent -> from being highlighting as an operator.\n    match: /->/,\n    relevance: 0\n  };\n  const OPERATOR = {\n    className: 'operator',\n    relevance: 0,\n    variants: [\n      { match: operator },\n      {\n        // dot-operator: only operators that start with a dot are allowed to use dots as\n        // characters (..., ...<, .*, etc). So there rule here is: a dot followed by one or more\n        // characters that may also include dots.\n        match: `\\\\.(\\\\.|${operatorCharacter})+` }\n    ]\n  };\n  const OPERATORS = [\n    OPERATOR_GUARD,\n    OPERATOR\n  ];\n\n  // https://docs.swift.org/swift-book/ReferenceManual/LexicalStructure.html#grammar_numeric-literal\n  // TODO: Update for leading `-` after lookbehind is supported everywhere\n  const decimalDigits = '([0-9]_*)+';\n  const hexDigits = '([0-9a-fA-F]_*)+';\n  const NUMBER = {\n    className: 'number',\n    relevance: 0,\n    variants: [\n      // decimal floating-point-literal (subsumes decimal-literal)\n      { match: `\\\\b(${decimalDigits})(\\\\.(${decimalDigits}))?` + `([eE][+-]?(${decimalDigits}))?\\\\b` },\n      // hexadecimal floating-point-literal (subsumes hexadecimal-literal)\n      { match: `\\\\b0x(${hexDigits})(\\\\.(${hexDigits}))?` + `([pP][+-]?(${decimalDigits}))?\\\\b` },\n      // octal-literal\n      { match: /\\b0o([0-7]_*)+\\b/ },\n      // binary-literal\n      { match: /\\b0b([01]_*)+\\b/ }\n    ]\n  };\n\n  // https://docs.swift.org/swift-book/ReferenceManual/LexicalStructure.html#grammar_string-literal\n  const ESCAPED_CHARACTER = (rawDelimiter = \"\") => ({\n    className: 'subst',\n    variants: [\n      { match: concat(/\\\\/, rawDelimiter, /[0\\\\tnr\"']/) },\n      { match: concat(/\\\\/, rawDelimiter, /u\\{[0-9a-fA-F]{1,8}\\}/) }\n    ]\n  });\n  const ESCAPED_NEWLINE = (rawDelimiter = \"\") => ({\n    className: 'subst',\n    match: concat(/\\\\/, rawDelimiter, /[\\t ]*(?:[\\r\\n]|\\r\\n)/)\n  });\n  const INTERPOLATION = (rawDelimiter = \"\") => ({\n    className: 'subst',\n    label: \"interpol\",\n    begin: concat(/\\\\/, rawDelimiter, /\\(/),\n    end: /\\)/\n  });\n  const MULTILINE_STRING = (rawDelimiter = \"\") => ({\n    begin: concat(rawDelimiter, /\"\"\"/),\n    end: concat(/\"\"\"/, rawDelimiter),\n    contains: [\n      ESCAPED_CHARACTER(rawDelimiter),\n      ESCAPED_NEWLINE(rawDelimiter),\n      INTERPOLATION(rawDelimiter)\n    ]\n  });\n  const SINGLE_LINE_STRING = (rawDelimiter = \"\") => ({\n    begin: concat(rawDelimiter, /\"/),\n    end: concat(/\"/, rawDelimiter),\n    contains: [\n      ESCAPED_CHARACTER(rawDelimiter),\n      INTERPOLATION(rawDelimiter)\n    ]\n  });\n  const STRING = {\n    className: 'string',\n    variants: [\n      MULTILINE_STRING(),\n      MULTILINE_STRING(\"#\"),\n      MULTILINE_STRING(\"##\"),\n      MULTILINE_STRING(\"###\"),\n      SINGLE_LINE_STRING(),\n      SINGLE_LINE_STRING(\"#\"),\n      SINGLE_LINE_STRING(\"##\"),\n      SINGLE_LINE_STRING(\"###\")\n    ]\n  };\n\n  const REGEXP_CONTENTS = [\n    hljs.BACKSLASH_ESCAPE,\n    {\n      begin: /\\[/,\n      end: /\\]/,\n      relevance: 0,\n      contains: [ hljs.BACKSLASH_ESCAPE ]\n    }\n  ];\n\n  const BARE_REGEXP_LITERAL = {\n    begin: /\\/[^\\s](?=[^/\\n]*\\/)/,\n    end: /\\//,\n    contains: REGEXP_CONTENTS\n  };\n\n  const EXTENDED_REGEXP_LITERAL = (rawDelimiter) => {\n    const begin = concat(rawDelimiter, /\\//);\n    const end = concat(/\\//, rawDelimiter);\n    return {\n      begin,\n      end,\n      contains: [\n        ...REGEXP_CONTENTS,\n        {\n          scope: \"comment\",\n          begin: `#(?!.*${end})`,\n          end: /$/,\n        },\n      ],\n    };\n  };\n\n  // https://docs.swift.org/swift-book/documentation/the-swift-programming-language/lexicalstructure/#Regular-Expression-Literals\n  const REGEXP = {\n    scope: \"regexp\",\n    variants: [\n      EXTENDED_REGEXP_LITERAL('###'),\n      EXTENDED_REGEXP_LITERAL('##'),\n      EXTENDED_REGEXP_LITERAL('#'),\n      BARE_REGEXP_LITERAL\n    ]\n  };\n\n  // https://docs.swift.org/swift-book/ReferenceManual/LexicalStructure.html#ID412\n  const QUOTED_IDENTIFIER = { match: concat(/`/, identifier, /`/) };\n  const IMPLICIT_PARAMETER = {\n    className: 'variable',\n    match: /\\$\\d+/\n  };\n  const PROPERTY_WRAPPER_PROJECTION = {\n    className: 'variable',\n    match: `\\\\$${identifierCharacter}+`\n  };\n  const IDENTIFIERS = [\n    QUOTED_IDENTIFIER,\n    IMPLICIT_PARAMETER,\n    PROPERTY_WRAPPER_PROJECTION\n  ];\n\n  // https://docs.swift.org/swift-book/ReferenceManual/Attributes.html\n  const AVAILABLE_ATTRIBUTE = {\n    match: /(@|#(un)?)available/,\n    scope: 'keyword',\n    starts: { contains: [\n      {\n        begin: /\\(/,\n        end: /\\)/,\n        keywords: availabilityKeywords,\n        contains: [\n          ...OPERATORS,\n          NUMBER,\n          STRING\n        ]\n      }\n    ] }\n  };\n\n  const KEYWORD_ATTRIBUTE = {\n    scope: 'keyword',\n    match: concat(/@/, either(...keywordAttributes), lookahead(either(/\\(/, /\\s+/))),\n  };\n\n  const USER_DEFINED_ATTRIBUTE = {\n    scope: 'meta',\n    match: concat(/@/, identifier)\n  };\n\n  const ATTRIBUTES = [\n    AVAILABLE_ATTRIBUTE,\n    KEYWORD_ATTRIBUTE,\n    USER_DEFINED_ATTRIBUTE\n  ];\n\n  // https://docs.swift.org/swift-book/ReferenceManual/Types.html\n  const TYPE = {\n    match: lookahead(/\\b[A-Z]/),\n    relevance: 0,\n    contains: [\n      { // Common Apple frameworks, for relevance boost\n        className: 'type',\n        match: concat(/(AV|CA|CF|CG|CI|CL|CM|CN|CT|MK|MP|MTK|MTL|NS|SCN|SK|UI|WK|XC)/, identifierCharacter, '+')\n      },\n      { // Type identifier\n        className: 'type',\n        match: typeIdentifier,\n        relevance: 0\n      },\n      { // Optional type\n        match: /[?!]+/,\n        relevance: 0\n      },\n      { // Variadic parameter\n        match: /\\.\\.\\./,\n        relevance: 0\n      },\n      { // Protocol composition\n        match: concat(/\\s+&\\s+/, lookahead(typeIdentifier)),\n        relevance: 0\n      }\n    ]\n  };\n  const GENERIC_ARGUMENTS = {\n    begin: /</,\n    end: />/,\n    keywords: KEYWORDS,\n    contains: [\n      ...COMMENTS,\n      ...KEYWORD_MODES,\n      ...ATTRIBUTES,\n      OPERATOR_GUARD,\n      TYPE\n    ]\n  };\n  TYPE.contains.push(GENERIC_ARGUMENTS);\n\n  // https://docs.swift.org/swift-book/ReferenceManual/Expressions.html#ID552\n  // Prevents element names from being highlighted as keywords.\n  const TUPLE_ELEMENT_NAME = {\n    match: concat(identifier, /\\s*:/),\n    keywords: \"_|0\",\n    relevance: 0\n  };\n  // Matches tuples as well as the parameter list of a function type.\n  const TUPLE = {\n    begin: /\\(/,\n    end: /\\)/,\n    relevance: 0,\n    keywords: KEYWORDS,\n    contains: [\n      'self',\n      TUPLE_ELEMENT_NAME,\n      ...COMMENTS,\n      REGEXP,\n      ...KEYWORD_MODES,\n      ...BUILT_INS,\n      ...OPERATORS,\n      NUMBER,\n      STRING,\n      ...IDENTIFIERS,\n      ...ATTRIBUTES,\n      TYPE\n    ]\n  };\n\n  const GENERIC_PARAMETERS = {\n    begin: /</,\n    end: />/,\n    keywords: 'repeat each',\n    contains: [\n      ...COMMENTS,\n      TYPE\n    ]\n  };\n  const FUNCTION_PARAMETER_NAME = {\n    begin: either(\n      lookahead(concat(identifier, /\\s*:/)),\n      lookahead(concat(identifier, /\\s+/, identifier, /\\s*:/))\n    ),\n    end: /:/,\n    relevance: 0,\n    contains: [\n      {\n        className: 'keyword',\n        match: /\\b_\\b/\n      },\n      {\n        className: 'params',\n        match: identifier\n      }\n    ]\n  };\n  const FUNCTION_PARAMETERS = {\n    begin: /\\(/,\n    end: /\\)/,\n    keywords: KEYWORDS,\n    contains: [\n      FUNCTION_PARAMETER_NAME,\n      ...COMMENTS,\n      ...KEYWORD_MODES,\n      ...OPERATORS,\n      NUMBER,\n      STRING,\n      ...ATTRIBUTES,\n      TYPE,\n      TUPLE\n    ],\n    endsParent: true,\n    illegal: /[\"']/\n  };\n  // https://docs.swift.org/swift-book/ReferenceManual/Declarations.html#ID362\n  // https://docs.swift.org/swift-book/documentation/the-swift-programming-language/declarations/#Macro-Declaration\n  const FUNCTION_OR_MACRO = {\n    match: [\n      /(func|macro)/,\n      /\\s+/,\n      either(QUOTED_IDENTIFIER.match, identifier, operator)\n    ],\n    className: {\n      1: \"keyword\",\n      3: \"title.function\"\n    },\n    contains: [\n      GENERIC_PARAMETERS,\n      FUNCTION_PARAMETERS,\n      WHITESPACE\n    ],\n    illegal: [\n      /\\[/,\n      /%/\n    ]\n  };\n\n  // https://docs.swift.org/swift-book/ReferenceManual/Declarations.html#ID375\n  // https://docs.swift.org/swift-book/ReferenceManual/Declarations.html#ID379\n  const INIT_SUBSCRIPT = {\n    match: [\n      /\\b(?:subscript|init[?!]?)/,\n      /\\s*(?=[<(])/,\n    ],\n    className: { 1: \"keyword\" },\n    contains: [\n      GENERIC_PARAMETERS,\n      FUNCTION_PARAMETERS,\n      WHITESPACE\n    ],\n    illegal: /\\[|%/\n  };\n  // https://docs.swift.org/swift-book/ReferenceManual/Declarations.html#ID380\n  const OPERATOR_DECLARATION = {\n    match: [\n      /operator/,\n      /\\s+/,\n      operator\n    ],\n    className: {\n      1: \"keyword\",\n      3: \"title\"\n    }\n  };\n\n  // https://docs.swift.org/swift-book/ReferenceManual/Declarations.html#ID550\n  const PRECEDENCEGROUP = {\n    begin: [\n      /precedencegroup/,\n      /\\s+/,\n      typeIdentifier\n    ],\n    className: {\n      1: \"keyword\",\n      3: \"title\"\n    },\n    contains: [ TYPE ],\n    keywords: [\n      ...precedencegroupKeywords,\n      ...literals\n    ],\n    end: /}/\n  };\n\n  const CLASS_FUNC_DECLARATION = {\n    match: [\n      /class\\b/,          \n      /\\s+/,\n      /func\\b/,\n      /\\s+/,\n      /\\b[A-Za-z_][A-Za-z0-9_]*\\b/ \n    ],\n    scope: {\n      1: \"keyword\",\n      3: \"keyword\",\n      5: \"title.function\"\n    }\n  };\n\n  const CLASS_VAR_DECLARATION = {\n    match: [\n      /class\\b/,\n      /\\s+/,          \n      /var\\b/, \n    ],\n    scope: {\n      1: \"keyword\",\n      3: \"keyword\"\n    }\n  };\n\n  const TYPE_DECLARATION = {\n    begin: [\n      /(struct|protocol|class|extension|enum|actor)/,\n      /\\s+/,\n      identifier,\n      /\\s*/,\n    ],\n    beginScope: {\n      1: \"keyword\",\n      3: \"title.class\"\n    },\n    keywords: KEYWORDS,\n    contains: [\n      GENERIC_PARAMETERS,\n      ...KEYWORD_MODES,\n      {\n        begin: /:/,\n        end: /\\{/,\n        keywords: KEYWORDS,\n        contains: [\n          {\n            scope: \"title.class.inherited\",\n            match: typeIdentifier,\n          },\n          ...KEYWORD_MODES,\n        ],\n        relevance: 0,\n      },\n    ]\n  };\n\n  // Add supported submodes to string interpolation.\n  for (const variant of STRING.variants) {\n    const interpolation = variant.contains.find(mode => mode.label === \"interpol\");\n    // TODO: Interpolation can contain any expression, so there's room for improvement here.\n    interpolation.keywords = KEYWORDS;\n    const submodes = [\n      ...KEYWORD_MODES,\n      ...BUILT_INS,\n      ...OPERATORS,\n      NUMBER,\n      STRING,\n      ...IDENTIFIERS\n    ];\n    interpolation.contains = [\n      ...submodes,\n      {\n        begin: /\\(/,\n        end: /\\)/,\n        contains: [\n          'self',\n          ...submodes\n        ]\n      }\n    ];\n  }\n\n  return {\n    name: 'Swift',\n    keywords: KEYWORDS,\n    contains: [\n      ...COMMENTS,\n      FUNCTION_OR_MACRO,\n      INIT_SUBSCRIPT,\n      CLASS_FUNC_DECLARATION,\n      CLASS_VAR_DECLARATION,\n      TYPE_DECLARATION,\n      OPERATOR_DECLARATION,\n      PRECEDENCEGROUP,\n      {\n        beginKeywords: 'import',\n        end: /$/,\n        contains: [ ...COMMENTS ],\n        relevance: 0\n      },\n      REGEXP,\n      ...KEYWORD_MODES,\n      ...BUILT_INS,\n      ...OPERATORS,\n      NUMBER,\n      STRING,\n      ...IDENTIFIERS,\n      ...ATTRIBUTES,\n      TYPE,\n      TUPLE\n    ]\n  };\n}\n\nmodule.exports = swift;\n","/*\nLanguage: Tagger Script\nAuthor: Philipp Wolfer <ph.wolfer@gmail.com>\nDescription: Syntax Highlighting for the Tagger Script as used by MusicBrainz Picard.\nWebsite: https://picard.musicbrainz.org\nCategory: scripting\n */\nfunction taggerscript(hljs) {\n  const NOOP = {\n    className: 'comment',\n    begin: /\\$noop\\(/,\n    end: /\\)/,\n    contains: [\n      { begin: /\\\\[()]/ },\n      {\n        begin: /\\(/,\n        end: /\\)/,\n        contains: [\n          { begin: /\\\\[()]/ },\n          'self'\n        ]\n      }\n    ],\n    relevance: 10\n  };\n\n  const FUNCTION = {\n    className: 'keyword',\n    begin: /\\$[_a-zA-Z0-9]+(?=\\()/\n  };\n\n  const VARIABLE = {\n    className: 'variable',\n    begin: /%[_a-zA-Z0-9:]+%/\n  };\n\n  const ESCAPE_SEQUENCE_UNICODE = {\n    className: 'symbol',\n    begin: /\\\\u[a-fA-F0-9]{4}/\n  };\n\n  const ESCAPE_SEQUENCE = {\n    className: 'symbol',\n    begin: /\\\\[\\\\nt$%,()]/\n  };\n\n  return {\n    name: 'Tagger Script',\n    contains: [\n      NOOP,\n      FUNCTION,\n      VARIABLE,\n      ESCAPE_SEQUENCE,\n      ESCAPE_SEQUENCE_UNICODE\n    ]\n  };\n}\n\nmodule.exports = taggerscript;\n","/*\nLanguage: YAML\nDescription: Yet Another Markdown Language\nAuthor: Stefan Wienert <stwienert@gmail.com>\nContributors: Carl Baxter <carl@cbax.tech>\nRequires: ruby.js\nWebsite: https://yaml.org\nCategory: common, config\n*/\nfunction yaml(hljs) {\n  const LITERALS = 'true false yes no null';\n\n  // YAML spec allows non-reserved URI characters in tags.\n  const URI_CHARACTERS = '[\\\\w#;/?:@&=+$,.~*\\'()[\\\\]]+';\n\n  // Define keys as starting with a word character\n  // ...containing word chars, spaces, colons, forward-slashes, hyphens and periods\n  // ...and ending with a colon followed immediately by a space, tab or newline.\n  // The YAML spec allows for much more than this, but this covers most use-cases.\n  const KEY = {\n    className: 'attr',\n    variants: [\n      // added brackets support and special char support\n      { begin: /[\\w*@][\\w*@ :()\\./-]*:(?=[ \\t]|$)/ },\n      { // double quoted keys - with brackets and special char support\n        begin: /\"[\\w*@][\\w*@ :()\\./-]*\":(?=[ \\t]|$)/ },\n      { // single quoted keys - with brackets and special char support\n        begin: /'[\\w*@][\\w*@ :()\\./-]*':(?=[ \\t]|$)/ },\n    ]\n  };\n  \n  const TEMPLATE_VARIABLES = {\n    className: 'template-variable',\n    variants: [\n      { // jinja templates Ansible\n        begin: /\\{\\{/,\n        end: /\\}\\}/\n      },\n      { // Ruby i18n\n        begin: /%\\{/,\n        end: /\\}/\n      }\n    ]\n  };\n\n  const SINGLE_QUOTE_STRING = {\n    className: 'string',\n    relevance: 0,\n    begin: /'/,\n    end: /'/,\n    contains: [\n      {\n        match: /''/,\n        scope: 'char.escape',\n        relevance: 0\n      }\n    ]\n  };\n\n  const STRING = {\n    className: 'string',\n    relevance: 0,\n    variants: [\n      {\n        begin: /\"/,\n        end: /\"/\n      },\n      { begin: /\\S+/ }\n    ],\n    contains: [\n      hljs.BACKSLASH_ESCAPE,\n      TEMPLATE_VARIABLES\n    ]\n  };\n\n  // Strings inside of value containers (objects) can't contain braces,\n  // brackets, or commas\n  const CONTAINER_STRING = hljs.inherit(STRING, { variants: [\n    {\n      begin: /'/,\n      end: /'/,\n      contains: [\n        {\n          begin: /''/,\n          relevance: 0\n        }\n      ]\n    },\n    {\n      begin: /\"/,\n      end: /\"/\n    },\n    { begin: /[^\\s,{}[\\]]+/ }\n  ] });\n\n  const DATE_RE = '[0-9]{4}(-[0-9][0-9]){0,2}';\n  const TIME_RE = '([Tt \\\\t][0-9][0-9]?(:[0-9][0-9]){2})?';\n  const FRACTION_RE = '(\\\\.[0-9]*)?';\n  const ZONE_RE = '([ \\\\t])*(Z|[-+][0-9][0-9]?(:[0-9][0-9])?)?';\n  const TIMESTAMP = {\n    className: 'number',\n    begin: '\\\\b' + DATE_RE + TIME_RE + FRACTION_RE + ZONE_RE + '\\\\b'\n  };\n\n  const VALUE_CONTAINER = {\n    end: ',',\n    endsWithParent: true,\n    excludeEnd: true,\n    keywords: LITERALS,\n    relevance: 0\n  };\n  const OBJECT = {\n    begin: /\\{/,\n    end: /\\}/,\n    contains: [ VALUE_CONTAINER ],\n    illegal: '\\\\n',\n    relevance: 0\n  };\n  const ARRAY = {\n    begin: '\\\\[',\n    end: '\\\\]',\n    contains: [ VALUE_CONTAINER ],\n    illegal: '\\\\n',\n    relevance: 0\n  };\n\n  const MODES = [\n    KEY,\n    {\n      className: 'meta',\n      begin: '^---\\\\s*$',\n      relevance: 10\n    },\n    { // multi line string\n      // Blocks start with a | or > followed by a newline\n      //\n      // Indentation of subsequent lines must be the same to\n      // be considered part of the block\n      className: 'string',\n      begin: '[\\\\|>]([1-9]?[+-])?[ ]*\\\\n( +)[^ ][^\\\\n]*\\\\n(\\\\2[^\\\\n]+\\\\n?)*'\n    },\n    { // Ruby/Rails erb\n      begin: '<%[%=-]?',\n      end: '[%-]?%>',\n      subLanguage: 'ruby',\n      excludeBegin: true,\n      excludeEnd: true,\n      relevance: 0\n    },\n    { // named tags\n      className: 'type',\n      begin: '!\\\\w+!' + URI_CHARACTERS\n    },\n    // https://yaml.org/spec/1.2/spec.html#id2784064\n    { // verbatim tags\n      className: 'type',\n      begin: '!<' + URI_CHARACTERS + \">\"\n    },\n    { // primary tags\n      className: 'type',\n      begin: '!' + URI_CHARACTERS\n    },\n    { // secondary tags\n      className: 'type',\n      begin: '!!' + URI_CHARACTERS\n    },\n    { // fragment id &ref\n      className: 'meta',\n      begin: '&' + hljs.UNDERSCORE_IDENT_RE + '$'\n    },\n    { // fragment reference *ref\n      className: 'meta',\n      begin: '\\\\*' + hljs.UNDERSCORE_IDENT_RE + '$'\n    },\n    { // array listing\n      className: 'bullet',\n      // TODO: remove |$ hack when we have proper look-ahead support\n      begin: '-(?=[ ]|$)',\n      relevance: 0\n    },\n    hljs.HASH_COMMENT_MODE,\n    {\n      beginKeywords: LITERALS,\n      keywords: { literal: LITERALS }\n    },\n    TIMESTAMP,\n    // numbers are any valid C-style number that\n    // sit isolated from other words\n    {\n      className: 'number',\n      begin: hljs.C_NUMBER_RE + '\\\\b',\n      relevance: 0\n    },\n    OBJECT,\n    ARRAY,\n    SINGLE_QUOTE_STRING,\n    STRING\n  ];\n\n  const VALUE_MODES = [ ...MODES ];\n  VALUE_MODES.pop();\n  VALUE_MODES.push(CONTAINER_STRING);\n  VALUE_CONTAINER.contains = VALUE_MODES;\n\n  return {\n    name: 'YAML',\n    case_insensitive: true,\n    aliases: [ 'yml' ],\n    contains: MODES\n  };\n}\n\nmodule.exports = yaml;\n","/*\nLanguage: Test Anything Protocol\nDescription: TAP, the Test Anything Protocol, is a simple text-based interface between testing modules in a test harness.\nRequires: yaml.js\nAuthor: Sergey Bronnikov <sergeyb@bronevichok.ru>\nWebsite: https://testanything.org\n*/\n\nfunction tap(hljs) {\n  return {\n    name: 'Test Anything Protocol',\n    case_insensitive: true,\n    contains: [\n      hljs.HASH_COMMENT_MODE,\n      // version of format and total amount of testcases\n      {\n        className: 'meta',\n        variants: [\n          { begin: '^TAP version (\\\\d+)$' },\n          { begin: '^1\\\\.\\\\.(\\\\d+)$' }\n        ]\n      },\n      // YAML block\n      {\n        begin: /---$/,\n        end: '\\\\.\\\\.\\\\.$',\n        subLanguage: 'yaml',\n        relevance: 0\n      },\n      // testcase number\n      {\n        className: 'number',\n        begin: ' (\\\\d+) '\n      },\n      // testcase status and description\n      {\n        className: 'symbol',\n        variants: [\n          { begin: '^ok' },\n          { begin: '^not ok' }\n        ]\n      }\n    ]\n  };\n}\n\nmodule.exports = tap;\n","/*\nLanguage: Tcl\nDescription: Tcl is a very simple programming language.\nAuthor: Radek Liska <radekliska@gmail.com>\nWebsite: https://www.tcl.tk/about/language.html\nCategory: scripting\n*/\n\nfunction tcl(hljs) {\n  const regex = hljs.regex;\n  const TCL_IDENT = /[a-zA-Z_][a-zA-Z0-9_]*/;\n\n  const NUMBER = {\n    className: 'number',\n    variants: [\n      hljs.BINARY_NUMBER_MODE,\n      hljs.C_NUMBER_MODE\n    ]\n  };\n\n  const KEYWORDS = [\n    \"after\",\n    \"append\",\n    \"apply\",\n    \"array\",\n    \"auto_execok\",\n    \"auto_import\",\n    \"auto_load\",\n    \"auto_mkindex\",\n    \"auto_mkindex_old\",\n    \"auto_qualify\",\n    \"auto_reset\",\n    \"bgerror\",\n    \"binary\",\n    \"break\",\n    \"catch\",\n    \"cd\",\n    \"chan\",\n    \"clock\",\n    \"close\",\n    \"concat\",\n    \"continue\",\n    \"dde\",\n    \"dict\",\n    \"encoding\",\n    \"eof\",\n    \"error\",\n    \"eval\",\n    \"exec\",\n    \"exit\",\n    \"expr\",\n    \"fblocked\",\n    \"fconfigure\",\n    \"fcopy\",\n    \"file\",\n    \"fileevent\",\n    \"filename\",\n    \"flush\",\n    \"for\",\n    \"foreach\",\n    \"format\",\n    \"gets\",\n    \"glob\",\n    \"global\",\n    \"history\",\n    \"http\",\n    \"if\",\n    \"incr\",\n    \"info\",\n    \"interp\",\n    \"join\",\n    \"lappend|10\",\n    \"lassign|10\",\n    \"lindex|10\",\n    \"linsert|10\",\n    \"list\",\n    \"llength|10\",\n    \"load\",\n    \"lrange|10\",\n    \"lrepeat|10\",\n    \"lreplace|10\",\n    \"lreverse|10\",\n    \"lsearch|10\",\n    \"lset|10\",\n    \"lsort|10\",\n    \"mathfunc\",\n    \"mathop\",\n    \"memory\",\n    \"msgcat\",\n    \"namespace\",\n    \"open\",\n    \"package\",\n    \"parray\",\n    \"pid\",\n    \"pkg::create\",\n    \"pkg_mkIndex\",\n    \"platform\",\n    \"platform::shell\",\n    \"proc\",\n    \"puts\",\n    \"pwd\",\n    \"read\",\n    \"refchan\",\n    \"regexp\",\n    \"registry\",\n    \"regsub|10\",\n    \"rename\",\n    \"return\",\n    \"safe\",\n    \"scan\",\n    \"seek\",\n    \"set\",\n    \"socket\",\n    \"source\",\n    \"split\",\n    \"string\",\n    \"subst\",\n    \"switch\",\n    \"tcl_endOfWord\",\n    \"tcl_findLibrary\",\n    \"tcl_startOfNextWord\",\n    \"tcl_startOfPreviousWord\",\n    \"tcl_wordBreakAfter\",\n    \"tcl_wordBreakBefore\",\n    \"tcltest\",\n    \"tclvars\",\n    \"tell\",\n    \"time\",\n    \"tm\",\n    \"trace\",\n    \"unknown\",\n    \"unload\",\n    \"unset\",\n    \"update\",\n    \"uplevel\",\n    \"upvar\",\n    \"variable\",\n    \"vwait\",\n    \"while\"\n  ];\n\n  return {\n    name: 'Tcl',\n    aliases: [ 'tk' ],\n    keywords: KEYWORDS,\n    contains: [\n      hljs.COMMENT(';[ \\\\t]*#', '$'),\n      hljs.COMMENT('^[ \\\\t]*#', '$'),\n      {\n        beginKeywords: 'proc',\n        end: '[\\\\{]',\n        excludeEnd: true,\n        contains: [\n          {\n            className: 'title',\n            begin: '[ \\\\t\\\\n\\\\r]+(::)?[a-zA-Z_]((::)?[a-zA-Z0-9_])*',\n            end: '[ \\\\t\\\\n\\\\r]',\n            endsWithParent: true,\n            excludeEnd: true\n          }\n        ]\n      },\n      {\n        className: \"variable\",\n        variants: [\n          { begin: regex.concat(\n            /\\$/,\n            regex.optional(/::/),\n            TCL_IDENT,\n            '(::',\n            TCL_IDENT,\n            ')*'\n          ) },\n          {\n            begin: '\\\\$\\\\{(::)?[a-zA-Z_]((::)?[a-zA-Z0-9_])*',\n            end: '\\\\}',\n            contains: [ NUMBER ]\n          }\n        ]\n      },\n      {\n        className: 'string',\n        contains: [ hljs.BACKSLASH_ESCAPE ],\n        variants: [ hljs.inherit(hljs.QUOTE_STRING_MODE, { illegal: null }) ]\n      },\n      NUMBER\n    ]\n  };\n}\n\nmodule.exports = tcl;\n","/*\nLanguage: Thrift\nAuthor: Oleg Efimov <efimovov@gmail.com>\nDescription: Thrift message definition format\nWebsite: https://thrift.apache.org\nCategory: protocols\n*/\n\nfunction thrift(hljs) {\n  const TYPES = [\n    \"bool\",\n    \"byte\",\n    \"i16\",\n    \"i32\",\n    \"i64\",\n    \"double\",\n    \"string\",\n    \"binary\"\n  ];\n  const KEYWORDS = [\n    \"namespace\",\n    \"const\",\n    \"typedef\",\n    \"struct\",\n    \"enum\",\n    \"service\",\n    \"exception\",\n    \"void\",\n    \"oneway\",\n    \"set\",\n    \"list\",\n    \"map\",\n    \"required\",\n    \"optional\"\n  ];\n  return {\n    name: 'Thrift',\n    keywords: {\n      keyword: KEYWORDS,\n      type: TYPES,\n      literal: 'true false'\n    },\n    contains: [\n      hljs.QUOTE_STRING_MODE,\n      hljs.NUMBER_MODE,\n      hljs.C_LINE_COMMENT_MODE,\n      hljs.C_BLOCK_COMMENT_MODE,\n      {\n        className: 'class',\n        beginKeywords: 'struct enum service exception',\n        end: /\\{/,\n        illegal: /\\n/,\n        contains: [\n          hljs.inherit(hljs.TITLE_MODE, {\n            // hack: eating everything after the first title\n            starts: {\n              endsWithParent: true,\n              excludeEnd: true\n            } })\n        ]\n      },\n      {\n        begin: '\\\\b(set|list|map)\\\\s*<',\n        keywords: { type: [\n          ...TYPES,\n          \"set\",\n          \"list\",\n          \"map\"\n        ] },\n        end: '>',\n        contains: [ 'self' ]\n      }\n    ]\n  };\n}\n\nmodule.exports = thrift;\n","/*\nLanguage: TP\nAuthor: Jay Strybis <jay.strybis@gmail.com>\nDescription: FANUC TP programming language (TPP).\nCategory: hardware\n*/\n\nfunction tp(hljs) {\n  const TPID = {\n    className: 'number',\n    begin: '[1-9][0-9]*', /* no leading zeros */\n    relevance: 0\n  };\n  const TPLABEL = {\n    className: 'symbol',\n    begin: ':[^\\\\]]+'\n  };\n  const TPDATA = {\n    className: 'built_in',\n    begin: '(AR|P|PAYLOAD|PR|R|SR|RSR|LBL|VR|UALM|MESSAGE|UTOOL|UFRAME|TIMER|'\n    + 'TIMER_OVERFLOW|JOINT_MAX_SPEED|RESUME_PROG|DIAG_REC)\\\\[',\n    end: '\\\\]',\n    contains: [\n      'self',\n      TPID,\n      TPLABEL\n    ]\n  };\n  const TPIO = {\n    className: 'built_in',\n    begin: '(AI|AO|DI|DO|F|RI|RO|UI|UO|GI|GO|SI|SO)\\\\[',\n    end: '\\\\]',\n    contains: [\n      'self',\n      TPID,\n      hljs.QUOTE_STRING_MODE, /* for pos section at bottom */\n      TPLABEL\n    ]\n  };\n\n  const KEYWORDS = [\n    \"ABORT\",\n    \"ACC\",\n    \"ADJUST\",\n    \"AND\",\n    \"AP_LD\",\n    \"BREAK\",\n    \"CALL\",\n    \"CNT\",\n    \"COL\",\n    \"CONDITION\",\n    \"CONFIG\",\n    \"DA\",\n    \"DB\",\n    \"DIV\",\n    \"DETECT\",\n    \"ELSE\",\n    \"END\",\n    \"ENDFOR\",\n    \"ERR_NUM\",\n    \"ERROR_PROG\",\n    \"FINE\",\n    \"FOR\",\n    \"GP\",\n    \"GUARD\",\n    \"INC\",\n    \"IF\",\n    \"JMP\",\n    \"LINEAR_MAX_SPEED\",\n    \"LOCK\",\n    \"MOD\",\n    \"MONITOR\",\n    \"OFFSET\",\n    \"Offset\",\n    \"OR\",\n    \"OVERRIDE\",\n    \"PAUSE\",\n    \"PREG\",\n    \"PTH\",\n    \"RT_LD\",\n    \"RUN\",\n    \"SELECT\",\n    \"SKIP\",\n    \"Skip\",\n    \"TA\",\n    \"TB\",\n    \"TO\",\n    \"TOOL_OFFSET\",\n    \"Tool_Offset\",\n    \"UF\",\n    \"UT\",\n    \"UFRAME_NUM\",\n    \"UTOOL_NUM\",\n    \"UNLOCK\",\n    \"WAIT\",\n    \"X\",\n    \"Y\",\n    \"Z\",\n    \"W\",\n    \"P\",\n    \"R\",\n    \"STRLEN\",\n    \"SUBSTR\",\n    \"FINDSTR\",\n    \"VOFFSET\",\n    \"PROG\",\n    \"ATTR\",\n    \"MN\",\n    \"POS\"\n  ];\n  const LITERALS = [\n    \"ON\",\n    \"OFF\",\n    \"max_speed\",\n    \"LPOS\",\n    \"JPOS\",\n    \"ENABLE\",\n    \"DISABLE\",\n    \"START\",\n    \"STOP\",\n    \"RESET\"\n  ];\n\n  return {\n    name: 'TP',\n    keywords: {\n      keyword: KEYWORDS,\n      literal: LITERALS\n    },\n    contains: [\n      TPDATA,\n      TPIO,\n      {\n        className: 'keyword',\n        begin: '/(PROG|ATTR|MN|POS|END)\\\\b'\n      },\n      {\n        /* this is for cases like ,CALL */\n        className: 'keyword',\n        begin: '(CALL|RUN|POINT_LOGIC|LBL)\\\\b'\n      },\n      {\n        /* this is for cases like CNT100 where the default lexemes do not\n         * separate the keyword and the number */\n        className: 'keyword',\n        begin: '\\\\b(ACC|CNT|Skip|Offset|PSPD|RT_LD|AP_LD|Tool_Offset)'\n      },\n      {\n        /* to catch numbers that do not have a word boundary on the left */\n        className: 'number',\n        begin: '\\\\d+(sec|msec|mm/sec|cm/min|inch/min|deg/sec|mm|in|cm)?\\\\b',\n        relevance: 0\n      },\n      hljs.COMMENT('//', '[;$]'),\n      hljs.COMMENT('!', '[;$]'),\n      hljs.COMMENT('--eg:', '$'),\n      hljs.QUOTE_STRING_MODE,\n      {\n        className: 'string',\n        begin: '\\'',\n        end: '\\''\n      },\n      hljs.C_NUMBER_MODE,\n      {\n        className: 'variable',\n        begin: '\\\\$[A-Za-z0-9_]+'\n      }\n    ]\n  };\n}\n\nmodule.exports = tp;\n","/*\nLanguage: Twig\nRequires: xml.js\nAuthor: Luke Holder <lukemh@gmail.com>\nDescription: Twig is a templating language for PHP\nWebsite: https://twig.symfony.com\nCategory: template\n*/\n\nfunction twig(hljs) {\n  const regex = hljs.regex;\n  const FUNCTION_NAMES = [\n    \"absolute_url\",\n    \"asset|0\",\n    \"asset_version\",\n    \"attribute\",\n    \"block\",\n    \"constant\",\n    \"controller|0\",\n    \"country_timezones\",\n    \"csrf_token\",\n    \"cycle\",\n    \"date\",\n    \"dump\",\n    \"expression\",\n    \"form|0\",\n    \"form_end\",\n    \"form_errors\",\n    \"form_help\",\n    \"form_label\",\n    \"form_rest\",\n    \"form_row\",\n    \"form_start\",\n    \"form_widget\",\n    \"html_classes\",\n    \"include\",\n    \"is_granted\",\n    \"logout_path\",\n    \"logout_url\",\n    \"max\",\n    \"min\",\n    \"parent\",\n    \"path|0\",\n    \"random\",\n    \"range\",\n    \"relative_path\",\n    \"render\",\n    \"render_esi\",\n    \"source\",\n    \"template_from_string\",\n    \"url|0\"\n  ];\n\n  const FILTERS = [\n    \"abs\",\n    \"abbr_class\",\n    \"abbr_method\",\n    \"batch\",\n    \"capitalize\",\n    \"column\",\n    \"convert_encoding\",\n    \"country_name\",\n    \"currency_name\",\n    \"currency_symbol\",\n    \"data_uri\",\n    \"date\",\n    \"date_modify\",\n    \"default\",\n    \"escape\",\n    \"file_excerpt\",\n    \"file_link\",\n    \"file_relative\",\n    \"filter\",\n    \"first\",\n    \"format\",\n    \"format_args\",\n    \"format_args_as_text\",\n    \"format_currency\",\n    \"format_date\",\n    \"format_datetime\",\n    \"format_file\",\n    \"format_file_from_text\",\n    \"format_number\",\n    \"format_time\",\n    \"html_to_markdown\",\n    \"humanize\",\n    \"inky_to_html\",\n    \"inline_css\",\n    \"join\",\n    \"json_encode\",\n    \"keys\",\n    \"language_name\",\n    \"last\",\n    \"length\",\n    \"locale_name\",\n    \"lower\",\n    \"map\",\n    \"markdown\",\n    \"markdown_to_html\",\n    \"merge\",\n    \"nl2br\",\n    \"number_format\",\n    \"raw\",\n    \"reduce\",\n    \"replace\",\n    \"reverse\",\n    \"round\",\n    \"slice\",\n    \"slug\",\n    \"sort\",\n    \"spaceless\",\n    \"split\",\n    \"striptags\",\n    \"timezone_name\",\n    \"title\",\n    \"trans\",\n    \"transchoice\",\n    \"trim\",\n    \"u|0\",\n    \"upper\",\n    \"url_encode\",\n    \"yaml_dump\",\n    \"yaml_encode\"\n  ];\n\n  let TAG_NAMES = [\n    \"apply\",\n    \"autoescape\",\n    \"block\",\n    \"cache\",\n    \"deprecated\",\n    \"do\",\n    \"embed\",\n    \"extends\",\n    \"filter\",\n    \"flush\",\n    \"for\",\n    \"form_theme\",\n    \"from\",\n    \"if\",\n    \"import\",\n    \"include\",\n    \"macro\",\n    \"sandbox\",\n    \"set\",\n    \"stopwatch\",\n    \"trans\",\n    \"trans_default_domain\",\n    \"transchoice\",\n    \"use\",\n    \"verbatim\",\n    \"with\"\n  ];\n\n  TAG_NAMES = TAG_NAMES.concat(TAG_NAMES.map(t => `end${t}`));\n\n  const STRING = {\n    scope: 'string',\n    variants: [\n      {\n        begin: /'/,\n        end: /'/\n      },\n      {\n        begin: /\"/,\n        end: /\"/\n      },\n    ]\n  };\n\n  const NUMBER = {\n    scope: \"number\",\n    match: /\\d+/\n  };\n\n  const PARAMS = {\n    begin: /\\(/,\n    end: /\\)/,\n    excludeBegin: true,\n    excludeEnd: true,\n    contains: [\n      STRING,\n      NUMBER\n    ]\n  };\n\n\n  const FUNCTIONS = {\n    beginKeywords: FUNCTION_NAMES.join(\" \"),\n    keywords: { name: FUNCTION_NAMES },\n    relevance: 0,\n    contains: [ PARAMS ]\n  };\n\n  const FILTER = {\n    match: /\\|(?=[A-Za-z_]+:?)/,\n    beginScope: \"punctuation\",\n    relevance: 0,\n    contains: [\n      {\n        match: /[A-Za-z_]+:?/,\n        keywords: FILTERS\n      },\n    ]\n  };\n\n  const tagNamed = (tagnames, { relevance }) => {\n    return {\n      beginScope: {\n        1: 'template-tag',\n        3: 'name'\n      },\n      relevance: relevance || 2,\n      endScope: 'template-tag',\n      begin: [\n        /\\{%/,\n        /\\s*/,\n        regex.either(...tagnames)\n      ],\n      end: /%\\}/,\n      keywords: \"in\",\n      contains: [\n        FILTER,\n        FUNCTIONS,\n        STRING,\n        NUMBER\n      ]\n    };\n  };\n\n  const CUSTOM_TAG_RE = /[a-z_]+/;\n  const TAG = tagNamed(TAG_NAMES, { relevance: 2 });\n  const CUSTOM_TAG = tagNamed([ CUSTOM_TAG_RE ], { relevance: 1 });\n\n  return {\n    name: 'Twig',\n    aliases: [ 'craftcms' ],\n    case_insensitive: true,\n    subLanguage: 'xml',\n    contains: [\n      hljs.COMMENT(/\\{#/, /#\\}/),\n      TAG,\n      CUSTOM_TAG,\n      {\n        className: 'template-variable',\n        begin: /\\{\\{/,\n        end: /\\}\\}/,\n        contains: [\n          'self',\n          FILTER,\n          FUNCTIONS,\n          STRING,\n          NUMBER\n        ]\n      }\n    ]\n  };\n}\n\nmodule.exports = twig;\n","const IDENT_RE = '[A-Za-z$_][0-9A-Za-z$_]*';\nconst KEYWORDS = [\n  \"as\", // for exports\n  \"in\",\n  \"of\",\n  \"if\",\n  \"for\",\n  \"while\",\n  \"finally\",\n  \"var\",\n  \"new\",\n  \"function\",\n  \"do\",\n  \"return\",\n  \"void\",\n  \"else\",\n  \"break\",\n  \"catch\",\n  \"instanceof\",\n  \"with\",\n  \"throw\",\n  \"case\",\n  \"default\",\n  \"try\",\n  \"switch\",\n  \"continue\",\n  \"typeof\",\n  \"delete\",\n  \"let\",\n  \"yield\",\n  \"const\",\n  \"class\",\n  // JS handles these with a special rule\n  // \"get\",\n  // \"set\",\n  \"debugger\",\n  \"async\",\n  \"await\",\n  \"static\",\n  \"import\",\n  \"from\",\n  \"export\",\n  \"extends\",\n  // It's reached stage 3, which is \"recommended for implementation\":\n  \"using\"\n];\nconst LITERALS = [\n  \"true\",\n  \"false\",\n  \"null\",\n  \"undefined\",\n  \"NaN\",\n  \"Infinity\"\n];\n\n// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects\nconst TYPES = [\n  // Fundamental objects\n  \"Object\",\n  \"Function\",\n  \"Boolean\",\n  \"Symbol\",\n  // numbers and dates\n  \"Math\",\n  \"Date\",\n  \"Number\",\n  \"BigInt\",\n  // text\n  \"String\",\n  \"RegExp\",\n  // Indexed collections\n  \"Array\",\n  \"Float32Array\",\n  \"Float64Array\",\n  \"Int8Array\",\n  \"Uint8Array\",\n  \"Uint8ClampedArray\",\n  \"Int16Array\",\n  \"Int32Array\",\n  \"Uint16Array\",\n  \"Uint32Array\",\n  \"BigInt64Array\",\n  \"BigUint64Array\",\n  // Keyed collections\n  \"Set\",\n  \"Map\",\n  \"WeakSet\",\n  \"WeakMap\",\n  // Structured data\n  \"ArrayBuffer\",\n  \"SharedArrayBuffer\",\n  \"Atomics\",\n  \"DataView\",\n  \"JSON\",\n  // Control abstraction objects\n  \"Promise\",\n  \"Generator\",\n  \"GeneratorFunction\",\n  \"AsyncFunction\",\n  // Reflection\n  \"Reflect\",\n  \"Proxy\",\n  // Internationalization\n  \"Intl\",\n  // WebAssembly\n  \"WebAssembly\"\n];\n\nconst ERROR_TYPES = [\n  \"Error\",\n  \"EvalError\",\n  \"InternalError\",\n  \"RangeError\",\n  \"ReferenceError\",\n  \"SyntaxError\",\n  \"TypeError\",\n  \"URIError\"\n];\n\nconst BUILT_IN_GLOBALS = [\n  \"setInterval\",\n  \"setTimeout\",\n  \"clearInterval\",\n  \"clearTimeout\",\n\n  \"require\",\n  \"exports\",\n\n  \"eval\",\n  \"isFinite\",\n  \"isNaN\",\n  \"parseFloat\",\n  \"parseInt\",\n  \"decodeURI\",\n  \"decodeURIComponent\",\n  \"encodeURI\",\n  \"encodeURIComponent\",\n  \"escape\",\n  \"unescape\"\n];\n\nconst BUILT_IN_VARIABLES = [\n  \"arguments\",\n  \"this\",\n  \"super\",\n  \"console\",\n  \"window\",\n  \"document\",\n  \"localStorage\",\n  \"sessionStorage\",\n  \"module\",\n  \"global\" // Node.js\n];\n\nconst BUILT_INS = [].concat(\n  BUILT_IN_GLOBALS,\n  TYPES,\n  ERROR_TYPES\n);\n\n/*\nLanguage: JavaScript\nDescription: JavaScript (JS) is a lightweight, interpreted, or just-in-time compiled programming language with first-class functions.\nCategory: common, scripting, web\nWebsite: https://developer.mozilla.org/en-US/docs/Web/JavaScript\n*/\n\n\n/** @type LanguageFn */\nfunction javascript(hljs) {\n  const regex = hljs.regex;\n  /**\n   * Takes a string like \"<Booger\" and checks to see\n   * if we can find a matching \"</Booger\" later in the\n   * content.\n   * @param {RegExpMatchArray} match\n   * @param {{after:number}} param1\n   */\n  const hasClosingTag = (match, { after }) => {\n    const tag = \"</\" + match[0].slice(1);\n    const pos = match.input.indexOf(tag, after);\n    return pos !== -1;\n  };\n\n  const IDENT_RE$1 = IDENT_RE;\n  const FRAGMENT = {\n    begin: '<>',\n    end: '</>'\n  };\n  // to avoid some special cases inside isTrulyOpeningTag\n  const XML_SELF_CLOSING = /<[A-Za-z0-9\\\\._:-]+\\s*\\/>/;\n  const XML_TAG = {\n    begin: /<[A-Za-z0-9\\\\._:-]+/,\n    end: /\\/[A-Za-z0-9\\\\._:-]+>|\\/>/,\n    /**\n     * @param {RegExpMatchArray} match\n     * @param {CallbackResponse} response\n     */\n    isTrulyOpeningTag: (match, response) => {\n      const afterMatchIndex = match[0].length + match.index;\n      const nextChar = match.input[afterMatchIndex];\n      if (\n        // HTML should not include another raw `<` inside a tag\n        // nested type?\n        // `<Array<Array<number>>`, etc.\n        nextChar === \"<\" ||\n        // the , gives away that this is not HTML\n        // `<T, A extends keyof T, V>`\n        nextChar === \",\"\n        ) {\n        response.ignoreMatch();\n        return;\n      }\n\n      // `<something>`\n      // Quite possibly a tag, lets look for a matching closing tag...\n      if (nextChar === \">\") {\n        // if we cannot find a matching closing tag, then we\n        // will ignore it\n        if (!hasClosingTag(match, { after: afterMatchIndex })) {\n          response.ignoreMatch();\n        }\n      }\n\n      // `<blah />` (self-closing)\n      // handled by simpleSelfClosing rule\n\n      let m;\n      const afterMatch = match.input.substring(afterMatchIndex);\n\n      // some more template typing stuff\n      //  <T = any>(key?: string) => Modify<\n      if ((m = afterMatch.match(/^\\s*=/))) {\n        response.ignoreMatch();\n        return;\n      }\n\n      // `<From extends string>`\n      // technically this could be HTML, but it smells like a type\n      // NOTE: This is ugh, but added specifically for https://github.com/highlightjs/highlight.js/issues/3276\n      if ((m = afterMatch.match(/^\\s+extends\\s+/))) {\n        if (m.index === 0) {\n          response.ignoreMatch();\n          // eslint-disable-next-line no-useless-return\n          return;\n        }\n      }\n    }\n  };\n  const KEYWORDS$1 = {\n    $pattern: IDENT_RE,\n    keyword: KEYWORDS,\n    literal: LITERALS,\n    built_in: BUILT_INS,\n    \"variable.language\": BUILT_IN_VARIABLES\n  };\n\n  // https://tc39.es/ecma262/#sec-literals-numeric-literals\n  const decimalDigits = '[0-9](_?[0-9])*';\n  const frac = `\\\\.(${decimalDigits})`;\n  // DecimalIntegerLiteral, including Annex B NonOctalDecimalIntegerLiteral\n  // https://tc39.es/ecma262/#sec-additional-syntax-numeric-literals\n  const decimalInteger = `0|[1-9](_?[0-9])*|0[0-7]*[89][0-9]*`;\n  const NUMBER = {\n    className: 'number',\n    variants: [\n      // DecimalLiteral\n      { begin: `(\\\\b(${decimalInteger})((${frac})|\\\\.)?|(${frac}))` +\n        `[eE][+-]?(${decimalDigits})\\\\b` },\n      { begin: `\\\\b(${decimalInteger})\\\\b((${frac})\\\\b|\\\\.)?|(${frac})\\\\b` },\n\n      // DecimalBigIntegerLiteral\n      { begin: `\\\\b(0|[1-9](_?[0-9])*)n\\\\b` },\n\n      // NonDecimalIntegerLiteral\n      { begin: \"\\\\b0[xX][0-9a-fA-F](_?[0-9a-fA-F])*n?\\\\b\" },\n      { begin: \"\\\\b0[bB][0-1](_?[0-1])*n?\\\\b\" },\n      { begin: \"\\\\b0[oO][0-7](_?[0-7])*n?\\\\b\" },\n\n      // LegacyOctalIntegerLiteral (does not include underscore separators)\n      // https://tc39.es/ecma262/#sec-additional-syntax-numeric-literals\n      { begin: \"\\\\b0[0-7]+n?\\\\b\" },\n    ],\n    relevance: 0\n  };\n\n  const SUBST = {\n    className: 'subst',\n    begin: '\\\\$\\\\{',\n    end: '\\\\}',\n    keywords: KEYWORDS$1,\n    contains: [] // defined later\n  };\n  const HTML_TEMPLATE = {\n    begin: '\\.?html`',\n    end: '',\n    starts: {\n      end: '`',\n      returnEnd: false,\n      contains: [\n        hljs.BACKSLASH_ESCAPE,\n        SUBST\n      ],\n      subLanguage: 'xml'\n    }\n  };\n  const CSS_TEMPLATE = {\n    begin: '\\.?css`',\n    end: '',\n    starts: {\n      end: '`',\n      returnEnd: false,\n      contains: [\n        hljs.BACKSLASH_ESCAPE,\n        SUBST\n      ],\n      subLanguage: 'css'\n    }\n  };\n  const GRAPHQL_TEMPLATE = {\n    begin: '\\.?gql`',\n    end: '',\n    starts: {\n      end: '`',\n      returnEnd: false,\n      contains: [\n        hljs.BACKSLASH_ESCAPE,\n        SUBST\n      ],\n      subLanguage: 'graphql'\n    }\n  };\n  const TEMPLATE_STRING = {\n    className: 'string',\n    begin: '`',\n    end: '`',\n    contains: [\n      hljs.BACKSLASH_ESCAPE,\n      SUBST\n    ]\n  };\n  const JSDOC_COMMENT = hljs.COMMENT(\n    /\\/\\*\\*(?!\\/)/,\n    '\\\\*/',\n    {\n      relevance: 0,\n      contains: [\n        {\n          begin: '(?=@[A-Za-z]+)',\n          relevance: 0,\n          contains: [\n            {\n              className: 'doctag',\n              begin: '@[A-Za-z]+'\n            },\n            {\n              className: 'type',\n              begin: '\\\\{',\n              end: '\\\\}',\n              excludeEnd: true,\n              excludeBegin: true,\n              relevance: 0\n            },\n            {\n              className: 'variable',\n              begin: IDENT_RE$1 + '(?=\\\\s*(-)|$)',\n              endsParent: true,\n              relevance: 0\n            },\n            // eat spaces (not newlines) so we can find\n            // types or variables\n            {\n              begin: /(?=[^\\n])\\s/,\n              relevance: 0\n            }\n          ]\n        }\n      ]\n    }\n  );\n  const COMMENT = {\n    className: \"comment\",\n    variants: [\n      JSDOC_COMMENT,\n      hljs.C_BLOCK_COMMENT_MODE,\n      hljs.C_LINE_COMMENT_MODE\n    ]\n  };\n  const SUBST_INTERNALS = [\n    hljs.APOS_STRING_MODE,\n    hljs.QUOTE_STRING_MODE,\n    HTML_TEMPLATE,\n    CSS_TEMPLATE,\n    GRAPHQL_TEMPLATE,\n    TEMPLATE_STRING,\n    // Skip numbers when they are part of a variable name\n    { match: /\\$\\d+/ },\n    NUMBER,\n    // This is intentional:\n    // See https://github.com/highlightjs/highlight.js/issues/3288\n    // hljs.REGEXP_MODE\n  ];\n  SUBST.contains = SUBST_INTERNALS\n    .concat({\n      // we need to pair up {} inside our subst to prevent\n      // it from ending too early by matching another }\n      begin: /\\{/,\n      end: /\\}/,\n      keywords: KEYWORDS$1,\n      contains: [\n        \"self\"\n      ].concat(SUBST_INTERNALS)\n    });\n  const SUBST_AND_COMMENTS = [].concat(COMMENT, SUBST.contains);\n  const PARAMS_CONTAINS = SUBST_AND_COMMENTS.concat([\n    // eat recursive parens in sub expressions\n    {\n      begin: /(\\s*)\\(/,\n      end: /\\)/,\n      keywords: KEYWORDS$1,\n      contains: [\"self\"].concat(SUBST_AND_COMMENTS)\n    }\n  ]);\n  const PARAMS = {\n    className: 'params',\n    // convert this to negative lookbehind in v12\n    begin: /(\\s*)\\(/, // to match the parms with\n    end: /\\)/,\n    excludeBegin: true,\n    excludeEnd: true,\n    keywords: KEYWORDS$1,\n    contains: PARAMS_CONTAINS\n  };\n\n  // ES6 classes\n  const CLASS_OR_EXTENDS = {\n    variants: [\n      // class Car extends vehicle\n      {\n        match: [\n          /class/,\n          /\\s+/,\n          IDENT_RE$1,\n          /\\s+/,\n          /extends/,\n          /\\s+/,\n          regex.concat(IDENT_RE$1, \"(\", regex.concat(/\\./, IDENT_RE$1), \")*\")\n        ],\n        scope: {\n          1: \"keyword\",\n          3: \"title.class\",\n          5: \"keyword\",\n          7: \"title.class.inherited\"\n        }\n      },\n      // class Car\n      {\n        match: [\n          /class/,\n          /\\s+/,\n          IDENT_RE$1\n        ],\n        scope: {\n          1: \"keyword\",\n          3: \"title.class\"\n        }\n      },\n\n    ]\n  };\n\n  const CLASS_REFERENCE = {\n    relevance: 0,\n    match:\n    regex.either(\n      // Hard coded exceptions\n      /\\bJSON/,\n      // Float32Array, OutT\n      /\\b[A-Z][a-z]+([A-Z][a-z]*|\\d)*/,\n      // CSSFactory, CSSFactoryT\n      /\\b[A-Z]{2,}([A-Z][a-z]+|\\d)+([A-Z][a-z]*)*/,\n      // FPs, FPsT\n      /\\b[A-Z]{2,}[a-z]+([A-Z][a-z]+|\\d)*([A-Z][a-z]*)*/,\n      // P\n      // single letters are not highlighted\n      // BLAH\n      // this will be flagged as a UPPER_CASE_CONSTANT instead\n    ),\n    className: \"title.class\",\n    keywords: {\n      _: [\n        // se we still get relevance credit for JS library classes\n        ...TYPES,\n        ...ERROR_TYPES\n      ]\n    }\n  };\n\n  const USE_STRICT = {\n    label: \"use_strict\",\n    className: 'meta',\n    relevance: 10,\n    begin: /^\\s*['\"]use (strict|asm)['\"]/\n  };\n\n  const FUNCTION_DEFINITION = {\n    variants: [\n      {\n        match: [\n          /function/,\n          /\\s+/,\n          IDENT_RE$1,\n          /(?=\\s*\\()/\n        ]\n      },\n      // anonymous function\n      {\n        match: [\n          /function/,\n          /\\s*(?=\\()/\n        ]\n      }\n    ],\n    className: {\n      1: \"keyword\",\n      3: \"title.function\"\n    },\n    label: \"func.def\",\n    contains: [ PARAMS ],\n    illegal: /%/\n  };\n\n  const UPPER_CASE_CONSTANT = {\n    relevance: 0,\n    match: /\\b[A-Z][A-Z_0-9]+\\b/,\n    className: \"variable.constant\"\n  };\n\n  function noneOf(list) {\n    return regex.concat(\"(?!\", list.join(\"|\"), \")\");\n  }\n\n  const FUNCTION_CALL = {\n    match: regex.concat(\n      /\\b/,\n      noneOf([\n        ...BUILT_IN_GLOBALS,\n        \"super\",\n        \"import\"\n      ].map(x => `${x}\\\\s*\\\\(`)),\n      IDENT_RE$1, regex.lookahead(/\\s*\\(/)),\n    className: \"title.function\",\n    relevance: 0\n  };\n\n  const PROPERTY_ACCESS = {\n    begin: regex.concat(/\\./, regex.lookahead(\n      regex.concat(IDENT_RE$1, /(?![0-9A-Za-z$_(])/)\n    )),\n    end: IDENT_RE$1,\n    excludeBegin: true,\n    keywords: \"prototype\",\n    className: \"property\",\n    relevance: 0\n  };\n\n  const GETTER_OR_SETTER = {\n    match: [\n      /get|set/,\n      /\\s+/,\n      IDENT_RE$1,\n      /(?=\\()/\n    ],\n    className: {\n      1: \"keyword\",\n      3: \"title.function\"\n    },\n    contains: [\n      { // eat to avoid empty params\n        begin: /\\(\\)/\n      },\n      PARAMS\n    ]\n  };\n\n  const FUNC_LEAD_IN_RE = '(\\\\(' +\n    '[^()]*(\\\\(' +\n    '[^()]*(\\\\(' +\n    '[^()]*' +\n    '\\\\)[^()]*)*' +\n    '\\\\)[^()]*)*' +\n    '\\\\)|' + hljs.UNDERSCORE_IDENT_RE + ')\\\\s*=>';\n\n  const FUNCTION_VARIABLE = {\n    match: [\n      /const|var|let/, /\\s+/,\n      IDENT_RE$1, /\\s*/,\n      /=\\s*/,\n      /(async\\s*)?/, // async is optional\n      regex.lookahead(FUNC_LEAD_IN_RE)\n    ],\n    keywords: \"async\",\n    className: {\n      1: \"keyword\",\n      3: \"title.function\"\n    },\n    contains: [\n      PARAMS\n    ]\n  };\n\n  return {\n    name: 'JavaScript',\n    aliases: ['js', 'jsx', 'mjs', 'cjs'],\n    keywords: KEYWORDS$1,\n    // this will be extended by TypeScript\n    exports: { PARAMS_CONTAINS, CLASS_REFERENCE },\n    illegal: /#(?![$_A-z])/,\n    contains: [\n      hljs.SHEBANG({\n        label: \"shebang\",\n        binary: \"node\",\n        relevance: 5\n      }),\n      USE_STRICT,\n      hljs.APOS_STRING_MODE,\n      hljs.QUOTE_STRING_MODE,\n      HTML_TEMPLATE,\n      CSS_TEMPLATE,\n      GRAPHQL_TEMPLATE,\n      TEMPLATE_STRING,\n      COMMENT,\n      // Skip numbers when they are part of a variable name\n      { match: /\\$\\d+/ },\n      NUMBER,\n      CLASS_REFERENCE,\n      {\n        scope: 'attr',\n        match: IDENT_RE$1 + regex.lookahead(':'),\n        relevance: 0\n      },\n      FUNCTION_VARIABLE,\n      { // \"value\" container\n        begin: '(' + hljs.RE_STARTERS_RE + '|\\\\b(case|return|throw)\\\\b)\\\\s*',\n        keywords: 'return throw case',\n        relevance: 0,\n        contains: [\n          COMMENT,\n          hljs.REGEXP_MODE,\n          {\n            className: 'function',\n            // we have to count the parens to make sure we actually have the\n            // correct bounding ( ) before the =>.  There could be any number of\n            // sub-expressions inside also surrounded by parens.\n            begin: FUNC_LEAD_IN_RE,\n            returnBegin: true,\n            end: '\\\\s*=>',\n            contains: [\n              {\n                className: 'params',\n                variants: [\n                  {\n                    begin: hljs.UNDERSCORE_IDENT_RE,\n                    relevance: 0\n                  },\n                  {\n                    className: null,\n                    begin: /\\(\\s*\\)/,\n                    skip: true\n                  },\n                  {\n                    begin: /(\\s*)\\(/,\n                    end: /\\)/,\n                    excludeBegin: true,\n                    excludeEnd: true,\n                    keywords: KEYWORDS$1,\n                    contains: PARAMS_CONTAINS\n                  }\n                ]\n              }\n            ]\n          },\n          { // could be a comma delimited list of params to a function call\n            begin: /,/,\n            relevance: 0\n          },\n          {\n            match: /\\s+/,\n            relevance: 0\n          },\n          { // JSX\n            variants: [\n              { begin: FRAGMENT.begin, end: FRAGMENT.end },\n              { match: XML_SELF_CLOSING },\n              {\n                begin: XML_TAG.begin,\n                // we carefully check the opening tag to see if it truly\n                // is a tag and not a false positive\n                'on:begin': XML_TAG.isTrulyOpeningTag,\n                end: XML_TAG.end\n              }\n            ],\n            subLanguage: 'xml',\n            contains: [\n              {\n                begin: XML_TAG.begin,\n                end: XML_TAG.end,\n                skip: true,\n                contains: ['self']\n              }\n            ]\n          }\n        ],\n      },\n      FUNCTION_DEFINITION,\n      {\n        // prevent this from getting swallowed up by function\n        // since they appear \"function like\"\n        beginKeywords: \"while if switch catch for\"\n      },\n      {\n        // we have to count the parens to make sure we actually have the correct\n        // bounding ( ).  There could be any number of sub-expressions inside\n        // also surrounded by parens.\n        begin: '\\\\b(?!function)' + hljs.UNDERSCORE_IDENT_RE +\n          '\\\\(' + // first parens\n          '[^()]*(\\\\(' +\n            '[^()]*(\\\\(' +\n              '[^()]*' +\n            '\\\\)[^()]*)*' +\n          '\\\\)[^()]*)*' +\n          '\\\\)\\\\s*\\\\{', // end parens\n        returnBegin:true,\n        label: \"func.def\",\n        contains: [\n          PARAMS,\n          hljs.inherit(hljs.TITLE_MODE, { begin: IDENT_RE$1, className: \"title.function\" })\n        ]\n      },\n      // catch ... so it won't trigger the property rule below\n      {\n        match: /\\.\\.\\./,\n        relevance: 0\n      },\n      PROPERTY_ACCESS,\n      // hack: prevents detection of keywords in some circumstances\n      // .keyword()\n      // $keyword = x\n      {\n        match: '\\\\$' + IDENT_RE$1,\n        relevance: 0\n      },\n      {\n        match: [ /\\bconstructor(?=\\s*\\()/ ],\n        className: { 1: \"title.function\" },\n        contains: [ PARAMS ]\n      },\n      FUNCTION_CALL,\n      UPPER_CASE_CONSTANT,\n      CLASS_OR_EXTENDS,\n      GETTER_OR_SETTER,\n      {\n        match: /\\$[(.]/ // relevance booster for a pattern common to JS libs: `$(something)` and `$.something`\n      }\n    ]\n  };\n}\n\n/*\nLanguage: TypeScript\nAuthor: Panu Horsmalahti <panu.horsmalahti@iki.fi>\nContributors: Ike Ku <dempfi@yahoo.com>\nDescription: TypeScript is a strict superset of JavaScript\nWebsite: https://www.typescriptlang.org\nCategory: common, scripting\n*/\n\n\n/** @type LanguageFn */\nfunction typescript(hljs) {\n  const regex = hljs.regex;\n  const tsLanguage = javascript(hljs);\n\n  const IDENT_RE$1 = IDENT_RE;\n  const TYPES = [\n    \"any\",\n    \"void\",\n    \"number\",\n    \"boolean\",\n    \"string\",\n    \"object\",\n    \"never\",\n    \"symbol\",\n    \"bigint\",\n    \"unknown\"\n  ];\n  const NAMESPACE = {\n    begin: [\n      /namespace/,\n      /\\s+/,\n      hljs.IDENT_RE\n    ],\n    beginScope: {\n      1: \"keyword\",\n      3: \"title.class\"\n    }\n  };\n  const INTERFACE = {\n    beginKeywords: 'interface',\n    end: /\\{/,\n    excludeEnd: true,\n    keywords: {\n      keyword: 'interface extends',\n      built_in: TYPES\n    },\n    contains: [ tsLanguage.exports.CLASS_REFERENCE ]\n  };\n  const USE_STRICT = {\n    className: 'meta',\n    relevance: 10,\n    begin: /^\\s*['\"]use strict['\"]/\n  };\n  const TS_SPECIFIC_KEYWORDS = [\n    \"type\",\n    // \"namespace\",\n    \"interface\",\n    \"public\",\n    \"private\",\n    \"protected\",\n    \"implements\",\n    \"declare\",\n    \"abstract\",\n    \"readonly\",\n    \"enum\",\n    \"override\",\n    \"satisfies\"\n  ];\n  /*\n    namespace is a TS keyword but it's fine to use it as a variable name too.\n    const message = 'foo';\n    const namespace = 'bar';\n  */\n  const KEYWORDS$1 = {\n    $pattern: IDENT_RE,\n    keyword: KEYWORDS.concat(TS_SPECIFIC_KEYWORDS),\n    literal: LITERALS,\n    built_in: BUILT_INS.concat(TYPES),\n    \"variable.language\": BUILT_IN_VARIABLES\n  };\n\n  const DECORATOR = {\n    className: 'meta',\n    begin: '@' + IDENT_RE$1,\n  };\n\n  const swapMode = (mode, label, replacement) => {\n    const indx = mode.contains.findIndex(m => m.label === label);\n    if (indx === -1) { throw new Error(\"can not find mode to replace\"); }\n\n    mode.contains.splice(indx, 1, replacement);\n  };\n\n\n  // this should update anywhere keywords is used since\n  // it will be the same actual JS object\n  Object.assign(tsLanguage.keywords, KEYWORDS$1);\n\n  tsLanguage.exports.PARAMS_CONTAINS.push(DECORATOR);\n\n  // highlight the function params\n  const ATTRIBUTE_HIGHLIGHT = tsLanguage.contains.find(c => c.scope === \"attr\");\n\n  // take default attr rule and extend it to support optionals\n  const OPTIONAL_KEY_OR_ARGUMENT = Object.assign({},\n    ATTRIBUTE_HIGHLIGHT,\n    { match: regex.concat(IDENT_RE$1, regex.lookahead(/\\s*\\?:/)) }\n  );\n  tsLanguage.exports.PARAMS_CONTAINS.push([\n    tsLanguage.exports.CLASS_REFERENCE, // class reference for highlighting the params types\n    ATTRIBUTE_HIGHLIGHT, // highlight the params key\n    OPTIONAL_KEY_OR_ARGUMENT, // Added for optional property assignment highlighting\n  ]);\n\n  // Add the optional property assignment highlighting for objects or classes\n  tsLanguage.contains = tsLanguage.contains.concat([\n    DECORATOR,\n    NAMESPACE,\n    INTERFACE,\n    OPTIONAL_KEY_OR_ARGUMENT, // Added for optional property assignment highlighting\n  ]);\n\n  // TS gets a simpler shebang rule than JS\n  swapMode(tsLanguage, \"shebang\", hljs.SHEBANG());\n  // JS use strict rule purposely excludes `asm` which makes no sense\n  swapMode(tsLanguage, \"use_strict\", USE_STRICT);\n\n  const functionDeclaration = tsLanguage.contains.find(m => m.label === \"func.def\");\n  functionDeclaration.relevance = 0; // () => {} is more typical in TypeScript\n\n  Object.assign(tsLanguage, {\n    name: 'TypeScript',\n    aliases: [\n      'ts',\n      'tsx',\n      'mts',\n      'cts'\n    ]\n  });\n\n  return tsLanguage;\n}\n\nmodule.exports = typescript;\n","/*\nLanguage: Vala\nAuthor: Antono Vasiljev <antono.vasiljev@gmail.com>\nDescription: Vala is a new programming language that aims to bring modern programming language features to GNOME developers without imposing any additional runtime requirements and without using a different ABI compared to applications and libraries written in C.\nWebsite: https://wiki.gnome.org/Projects/Vala\nCategory: system\n*/\n\nfunction vala(hljs) {\n  return {\n    name: 'Vala',\n    keywords: {\n      keyword:\n        // Value types\n        'char uchar unichar int uint long ulong short ushort int8 int16 int32 int64 uint8 '\n        + 'uint16 uint32 uint64 float double bool struct enum string void '\n        // Reference types\n        + 'weak unowned owned '\n        // Modifiers\n        + 'async signal static abstract interface override virtual delegate '\n        // Control Structures\n        + 'if while do for foreach else switch case break default return try catch '\n        // Visibility\n        + 'public private protected internal '\n        // Other\n        + 'using new this get set const stdout stdin stderr var',\n      built_in:\n        'DBus GLib CCode Gee Object Gtk Posix',\n      literal:\n        'false true null'\n    },\n    contains: [\n      {\n        className: 'class',\n        beginKeywords: 'class interface namespace',\n        end: /\\{/,\n        excludeEnd: true,\n        illegal: '[^,:\\\\n\\\\s\\\\.]',\n        contains: [ hljs.UNDERSCORE_TITLE_MODE ]\n      },\n      hljs.C_LINE_COMMENT_MODE,\n      hljs.C_BLOCK_COMMENT_MODE,\n      {\n        className: 'string',\n        begin: '\"\"\"',\n        end: '\"\"\"',\n        relevance: 5\n      },\n      hljs.APOS_STRING_MODE,\n      hljs.QUOTE_STRING_MODE,\n      hljs.C_NUMBER_MODE,\n      {\n        className: 'meta',\n        begin: '^#',\n        end: '$',\n      }\n    ]\n  };\n}\n\nmodule.exports = vala;\n","/*\nLanguage: Visual Basic .NET\nDescription: Visual Basic .NET (VB.NET) is a multi-paradigm, object-oriented programming language, implemented on the .NET Framework.\nAuthors: Poren Chiang <ren.chiang@gmail.com>, Jan Pilzer\nWebsite: https://docs.microsoft.com/dotnet/visual-basic/getting-started\nCategory: common\n*/\n\n/** @type LanguageFn */\nfunction vbnet(hljs) {\n  const regex = hljs.regex;\n  /**\n   * Character Literal\n   * Either a single character (\"a\"C) or an escaped double quote (\"\"\"\"C).\n   */\n  const CHARACTER = {\n    className: 'string',\n    begin: /\"(\"\"|[^/n])\"C\\b/\n  };\n\n  const STRING = {\n    className: 'string',\n    begin: /\"/,\n    end: /\"/,\n    illegal: /\\n/,\n    contains: [\n      {\n        // double quote escape\n        begin: /\"\"/ }\n    ]\n  };\n\n  /** Date Literals consist of a date, a time, or both separated by whitespace, surrounded by # */\n  const MM_DD_YYYY = /\\d{1,2}\\/\\d{1,2}\\/\\d{4}/;\n  const YYYY_MM_DD = /\\d{4}-\\d{1,2}-\\d{1,2}/;\n  const TIME_12H = /(\\d|1[012])(:\\d+){0,2} *(AM|PM)/;\n  const TIME_24H = /\\d{1,2}(:\\d{1,2}){1,2}/;\n  const DATE = {\n    className: 'literal',\n    variants: [\n      {\n        // #YYYY-MM-DD# (ISO-Date) or #M/D/YYYY# (US-Date)\n        begin: regex.concat(/# */, regex.either(YYYY_MM_DD, MM_DD_YYYY), / *#/) },\n      {\n        // #H:mm[:ss]# (24h Time)\n        begin: regex.concat(/# */, TIME_24H, / *#/) },\n      {\n        // #h[:mm[:ss]] A# (12h Time)\n        begin: regex.concat(/# */, TIME_12H, / *#/) },\n      {\n        // date plus time\n        begin: regex.concat(\n          /# */,\n          regex.either(YYYY_MM_DD, MM_DD_YYYY),\n          / +/,\n          regex.either(TIME_12H, TIME_24H),\n          / *#/\n        ) }\n    ]\n  };\n\n  const NUMBER = {\n    className: 'number',\n    relevance: 0,\n    variants: [\n      {\n        // Float\n        begin: /\\b\\d[\\d_]*((\\.[\\d_]+(E[+-]?[\\d_]+)?)|(E[+-]?[\\d_]+))[RFD@!#]?/ },\n      {\n        // Integer (base 10)\n        begin: /\\b\\d[\\d_]*((U?[SIL])|[%&])?/ },\n      {\n        // Integer (base 16)\n        begin: /&H[\\dA-F_]+((U?[SIL])|[%&])?/ },\n      {\n        // Integer (base 8)\n        begin: /&O[0-7_]+((U?[SIL])|[%&])?/ },\n      {\n        // Integer (base 2)\n        begin: /&B[01_]+((U?[SIL])|[%&])?/ }\n    ]\n  };\n\n  const LABEL = {\n    className: 'label',\n    begin: /^\\w+:/\n  };\n\n  const DOC_COMMENT = hljs.COMMENT(/'''/, /$/, { contains: [\n    {\n      className: 'doctag',\n      begin: /<\\/?/,\n      end: />/\n    }\n  ] });\n\n  const COMMENT = hljs.COMMENT(null, /$/, { variants: [\n    { begin: /'/ },\n    {\n      // TODO: Use multi-class for leading spaces\n      begin: /([\\t ]|^)REM(?=\\s)/ }\n  ] });\n\n  const DIRECTIVES = {\n    className: 'meta',\n    // TODO: Use multi-class for indentation once available\n    begin: /[\\t ]*#(const|disable|else|elseif|enable|end|externalsource|if|region)\\b/,\n    end: /$/,\n    keywords: { keyword:\n        'const disable else elseif enable end externalsource if region then' },\n    contains: [ COMMENT ]\n  };\n\n  return {\n    name: 'Visual Basic .NET',\n    aliases: [ 'vb' ],\n    case_insensitive: true,\n    classNameAliases: { label: 'symbol' },\n    keywords: {\n      keyword:\n        'addhandler alias aggregate ansi as async assembly auto binary by byref byval ' /* a-b */\n        + 'call case catch class compare const continue custom declare default delegate dim distinct do ' /* c-d */\n        + 'each equals else elseif end enum erase error event exit explicit finally for friend from function ' /* e-f */\n        + 'get global goto group handles if implements imports in inherits interface into iterator ' /* g-i */\n        + 'join key let lib loop me mid module mustinherit mustoverride mybase myclass ' /* j-m */\n        + 'namespace narrowing new next notinheritable notoverridable ' /* n */\n        + 'of off on operator option optional order overloads overridable overrides ' /* o */\n        + 'paramarray partial preserve private property protected public ' /* p */\n        + 'raiseevent readonly redim removehandler resume return ' /* r */\n        + 'select set shadows shared skip static step stop structure strict sub synclock ' /* s */\n        + 'take text then throw to try unicode until using when where while widening with withevents writeonly yield' /* t-y */,\n      built_in:\n        // Operators https://docs.microsoft.com/dotnet/visual-basic/language-reference/operators\n        'addressof and andalso await directcast gettype getxmlnamespace is isfalse isnot istrue like mod nameof new not or orelse trycast typeof xor '\n        // Type Conversion Functions https://docs.microsoft.com/dotnet/visual-basic/language-reference/functions/type-conversion-functions\n        + 'cbool cbyte cchar cdate cdbl cdec cint clng cobj csbyte cshort csng cstr cuint culng cushort',\n      type:\n        // Data types https://docs.microsoft.com/dotnet/visual-basic/language-reference/data-types\n        'boolean byte char date decimal double integer long object sbyte short single string uinteger ulong ushort',\n      literal: 'true false nothing'\n    },\n    illegal:\n      '//|\\\\{|\\\\}|endif|gosub|variant|wend|^\\\\$ ' /* reserved deprecated keywords */,\n    contains: [\n      CHARACTER,\n      STRING,\n      DATE,\n      NUMBER,\n      LABEL,\n      DOC_COMMENT,\n      COMMENT,\n      DIRECTIVES\n    ]\n  };\n}\n\nmodule.exports = vbnet;\n","/*\nLanguage: VBScript\nDescription: VBScript (\"Microsoft Visual Basic Scripting Edition\") is an Active Scripting language developed by Microsoft that is modeled on Visual Basic.\nAuthor: Nikita Ledyaev <lenikita@yandex.ru>\nContributors: Michal Gabrukiewicz <mgabru@gmail.com>\nWebsite: https://en.wikipedia.org/wiki/VBScript\nCategory: scripting\n*/\n\n/** @type LanguageFn */\nfunction vbscript(hljs) {\n  const regex = hljs.regex;\n  const BUILT_IN_FUNCTIONS = [\n    \"lcase\",\n    \"month\",\n    \"vartype\",\n    \"instrrev\",\n    \"ubound\",\n    \"setlocale\",\n    \"getobject\",\n    \"rgb\",\n    \"getref\",\n    \"string\",\n    \"weekdayname\",\n    \"rnd\",\n    \"dateadd\",\n    \"monthname\",\n    \"now\",\n    \"day\",\n    \"minute\",\n    \"isarray\",\n    \"cbool\",\n    \"round\",\n    \"formatcurrency\",\n    \"conversions\",\n    \"csng\",\n    \"timevalue\",\n    \"second\",\n    \"year\",\n    \"space\",\n    \"abs\",\n    \"clng\",\n    \"timeserial\",\n    \"fixs\",\n    \"len\",\n    \"asc\",\n    \"isempty\",\n    \"maths\",\n    \"dateserial\",\n    \"atn\",\n    \"timer\",\n    \"isobject\",\n    \"filter\",\n    \"weekday\",\n    \"datevalue\",\n    \"ccur\",\n    \"isdate\",\n    \"instr\",\n    \"datediff\",\n    \"formatdatetime\",\n    \"replace\",\n    \"isnull\",\n    \"right\",\n    \"sgn\",\n    \"array\",\n    \"snumeric\",\n    \"log\",\n    \"cdbl\",\n    \"hex\",\n    \"chr\",\n    \"lbound\",\n    \"msgbox\",\n    \"ucase\",\n    \"getlocale\",\n    \"cos\",\n    \"cdate\",\n    \"cbyte\",\n    \"rtrim\",\n    \"join\",\n    \"hour\",\n    \"oct\",\n    \"typename\",\n    \"trim\",\n    \"strcomp\",\n    \"int\",\n    \"createobject\",\n    \"loadpicture\",\n    \"tan\",\n    \"formatnumber\",\n    \"mid\",\n    \"split\",\n    \"cint\",\n    \"sin\",\n    \"datepart\",\n    \"ltrim\",\n    \"sqr\",\n    \"time\",\n    \"derived\",\n    \"eval\",\n    \"date\",\n    \"formatpercent\",\n    \"exp\",\n    \"inputbox\",\n    \"left\",\n    \"ascw\",\n    \"chrw\",\n    \"regexp\",\n    \"cstr\",\n    \"err\"\n  ];\n  const BUILT_IN_OBJECTS = [\n    \"server\",\n    \"response\",\n    \"request\",\n    // take no arguments so can be called without ()\n    \"scriptengine\",\n    \"scriptenginebuildversion\",\n    \"scriptengineminorversion\",\n    \"scriptenginemajorversion\"\n  ];\n\n  const BUILT_IN_CALL = {\n    begin: regex.concat(regex.either(...BUILT_IN_FUNCTIONS), \"\\\\s*\\\\(\"),\n    // relevance 0 because this is acting as a beginKeywords really\n    relevance: 0,\n    keywords: { built_in: BUILT_IN_FUNCTIONS }\n  };\n\n  const LITERALS = [\n    \"true\",\n    \"false\",\n    \"null\",\n    \"nothing\",\n    \"empty\"\n  ];\n\n  const KEYWORDS = [\n    \"call\",\n    \"class\",\n    \"const\",\n    \"dim\",\n    \"do\",\n    \"loop\",\n    \"erase\",\n    \"execute\",\n    \"executeglobal\",\n    \"exit\",\n    \"for\",\n    \"each\",\n    \"next\",\n    \"function\",\n    \"if\",\n    \"then\",\n    \"else\",\n    \"on\",\n    \"error\",\n    \"option\",\n    \"explicit\",\n    \"new\",\n    \"private\",\n    \"property\",\n    \"let\",\n    \"get\",\n    \"public\",\n    \"randomize\",\n    \"redim\",\n    \"rem\",\n    \"select\",\n    \"case\",\n    \"set\",\n    \"stop\",\n    \"sub\",\n    \"while\",\n    \"wend\",\n    \"with\",\n    \"end\",\n    \"to\",\n    \"elseif\",\n    \"is\",\n    \"or\",\n    \"xor\",\n    \"and\",\n    \"not\",\n    \"class_initialize\",\n    \"class_terminate\",\n    \"default\",\n    \"preserve\",\n    \"in\",\n    \"me\",\n    \"byval\",\n    \"byref\",\n    \"step\",\n    \"resume\",\n    \"goto\"\n  ];\n\n  return {\n    name: 'VBScript',\n    aliases: [ 'vbs' ],\n    case_insensitive: true,\n    keywords: {\n      keyword: KEYWORDS,\n      built_in: BUILT_IN_OBJECTS,\n      literal: LITERALS\n    },\n    illegal: '//',\n    contains: [\n      BUILT_IN_CALL,\n      hljs.inherit(hljs.QUOTE_STRING_MODE, { contains: [ { begin: '\"\"' } ] }),\n      hljs.COMMENT(\n        /'/,\n        /$/,\n        { relevance: 0 }\n      ),\n      hljs.C_NUMBER_MODE\n    ]\n  };\n}\n\nmodule.exports = vbscript;\n","/*\nLanguage: VBScript in HTML\nRequires: xml.js, vbscript.js\nAuthor: Ivan Sagalaev <maniac@softwaremaniacs.org>\nDescription: \"Bridge\" language defining fragments of VBScript in HTML within <% .. %>\nWebsite: https://en.wikipedia.org/wiki/VBScript\nCategory: scripting\n*/\n\nfunction vbscriptHtml(hljs) {\n  return {\n    name: 'VBScript in HTML',\n    subLanguage: 'xml',\n    contains: [\n      {\n        begin: '<%',\n        end: '%>',\n        subLanguage: 'vbscript'\n      }\n    ]\n  };\n}\n\nmodule.exports = vbscriptHtml;\n","/*\nLanguage: Verilog\nAuthor: Jon Evans <jon@craftyjon.com>\nContributors: Boone Severson <boone.severson@gmail.com>\nDescription: Verilog is a hardware description language used in electronic design automation to describe digital and mixed-signal systems. This highlighter supports Verilog and SystemVerilog through IEEE 1800-2012.\nWebsite: http://www.verilog.com\nCategory: hardware\n*/\n\nfunction verilog(hljs) {\n  const regex = hljs.regex;\n  const KEYWORDS = {\n    $pattern: /\\$?[\\w]+(\\$[\\w]+)*/,\n    keyword: [\n      \"accept_on\",\n      \"alias\",\n      \"always\",\n      \"always_comb\",\n      \"always_ff\",\n      \"always_latch\",\n      \"and\",\n      \"assert\",\n      \"assign\",\n      \"assume\",\n      \"automatic\",\n      \"before\",\n      \"begin\",\n      \"bind\",\n      \"bins\",\n      \"binsof\",\n      \"bit\",\n      \"break\",\n      \"buf|0\",\n      \"bufif0\",\n      \"bufif1\",\n      \"byte\",\n      \"case\",\n      \"casex\",\n      \"casez\",\n      \"cell\",\n      \"chandle\",\n      \"checker\",\n      \"class\",\n      \"clocking\",\n      \"cmos\",\n      \"config\",\n      \"const\",\n      \"constraint\",\n      \"context\",\n      \"continue\",\n      \"cover\",\n      \"covergroup\",\n      \"coverpoint\",\n      \"cross\",\n      \"deassign\",\n      \"default\",\n      \"defparam\",\n      \"design\",\n      \"disable\",\n      \"dist\",\n      \"do\",\n      \"edge\",\n      \"else\",\n      \"end\",\n      \"endcase\",\n      \"endchecker\",\n      \"endclass\",\n      \"endclocking\",\n      \"endconfig\",\n      \"endfunction\",\n      \"endgenerate\",\n      \"endgroup\",\n      \"endinterface\",\n      \"endmodule\",\n      \"endpackage\",\n      \"endprimitive\",\n      \"endprogram\",\n      \"endproperty\",\n      \"endspecify\",\n      \"endsequence\",\n      \"endtable\",\n      \"endtask\",\n      \"enum\",\n      \"event\",\n      \"eventually\",\n      \"expect\",\n      \"export\",\n      \"extends\",\n      \"extern\",\n      \"final\",\n      \"first_match\",\n      \"for\",\n      \"force\",\n      \"foreach\",\n      \"forever\",\n      \"fork\",\n      \"forkjoin\",\n      \"function\",\n      \"generate|5\",\n      \"genvar\",\n      \"global\",\n      \"highz0\",\n      \"highz1\",\n      \"if\",\n      \"iff\",\n      \"ifnone\",\n      \"ignore_bins\",\n      \"illegal_bins\",\n      \"implements\",\n      \"implies\",\n      \"import\",\n      \"incdir\",\n      \"include\",\n      \"initial\",\n      \"inout\",\n      \"input\",\n      \"inside\",\n      \"instance\",\n      \"int\",\n      \"integer\",\n      \"interconnect\",\n      \"interface\",\n      \"intersect\",\n      \"join\",\n      \"join_any\",\n      \"join_none\",\n      \"large\",\n      \"let\",\n      \"liblist\",\n      \"library\",\n      \"local\",\n      \"localparam\",\n      \"logic\",\n      \"longint\",\n      \"macromodule\",\n      \"matches\",\n      \"medium\",\n      \"modport\",\n      \"module\",\n      \"nand\",\n      \"negedge\",\n      \"nettype\",\n      \"new\",\n      \"nexttime\",\n      \"nmos\",\n      \"nor\",\n      \"noshowcancelled\",\n      \"not\",\n      \"notif0\",\n      \"notif1\",\n      \"or\",\n      \"output\",\n      \"package\",\n      \"packed\",\n      \"parameter\",\n      \"pmos\",\n      \"posedge\",\n      \"primitive\",\n      \"priority\",\n      \"program\",\n      \"property\",\n      \"protected\",\n      \"pull0\",\n      \"pull1\",\n      \"pulldown\",\n      \"pullup\",\n      \"pulsestyle_ondetect\",\n      \"pulsestyle_onevent\",\n      \"pure\",\n      \"rand\",\n      \"randc\",\n      \"randcase\",\n      \"randsequence\",\n      \"rcmos\",\n      \"real\",\n      \"realtime\",\n      \"ref\",\n      \"reg\",\n      \"reject_on\",\n      \"release\",\n      \"repeat\",\n      \"restrict\",\n      \"return\",\n      \"rnmos\",\n      \"rpmos\",\n      \"rtran\",\n      \"rtranif0\",\n      \"rtranif1\",\n      \"s_always\",\n      \"s_eventually\",\n      \"s_nexttime\",\n      \"s_until\",\n      \"s_until_with\",\n      \"scalared\",\n      \"sequence\",\n      \"shortint\",\n      \"shortreal\",\n      \"showcancelled\",\n      \"signed\",\n      \"small\",\n      \"soft\",\n      \"solve\",\n      \"specify\",\n      \"specparam\",\n      \"static\",\n      \"string\",\n      \"strong\",\n      \"strong0\",\n      \"strong1\",\n      \"struct\",\n      \"super\",\n      \"supply0\",\n      \"supply1\",\n      \"sync_accept_on\",\n      \"sync_reject_on\",\n      \"table\",\n      \"tagged\",\n      \"task\",\n      \"this\",\n      \"throughout\",\n      \"time\",\n      \"timeprecision\",\n      \"timeunit\",\n      \"tran\",\n      \"tranif0\",\n      \"tranif1\",\n      \"tri\",\n      \"tri0\",\n      \"tri1\",\n      \"triand\",\n      \"trior\",\n      \"trireg\",\n      \"type\",\n      \"typedef\",\n      \"union\",\n      \"unique\",\n      \"unique0\",\n      \"unsigned\",\n      \"until\",\n      \"until_with\",\n      \"untyped\",\n      \"use\",\n      \"uwire\",\n      \"var\",\n      \"vectored\",\n      \"virtual\",\n      \"void\",\n      \"wait\",\n      \"wait_order\",\n      \"wand\",\n      \"weak\",\n      \"weak0\",\n      \"weak1\",\n      \"while\",\n      \"wildcard\",\n      \"wire\",\n      \"with\",\n      \"within\",\n      \"wor\",\n      \"xnor\",\n      \"xor\"\n    ],\n    literal: [ 'null' ],\n    built_in: [\n      \"$finish\",\n      \"$stop\",\n      \"$exit\",\n      \"$fatal\",\n      \"$error\",\n      \"$warning\",\n      \"$info\",\n      \"$realtime\",\n      \"$time\",\n      \"$printtimescale\",\n      \"$bitstoreal\",\n      \"$bitstoshortreal\",\n      \"$itor\",\n      \"$signed\",\n      \"$cast\",\n      \"$bits\",\n      \"$stime\",\n      \"$timeformat\",\n      \"$realtobits\",\n      \"$shortrealtobits\",\n      \"$rtoi\",\n      \"$unsigned\",\n      \"$asserton\",\n      \"$assertkill\",\n      \"$assertpasson\",\n      \"$assertfailon\",\n      \"$assertnonvacuouson\",\n      \"$assertoff\",\n      \"$assertcontrol\",\n      \"$assertpassoff\",\n      \"$assertfailoff\",\n      \"$assertvacuousoff\",\n      \"$isunbounded\",\n      \"$sampled\",\n      \"$fell\",\n      \"$changed\",\n      \"$past_gclk\",\n      \"$fell_gclk\",\n      \"$changed_gclk\",\n      \"$rising_gclk\",\n      \"$steady_gclk\",\n      \"$coverage_control\",\n      \"$coverage_get\",\n      \"$coverage_save\",\n      \"$set_coverage_db_name\",\n      \"$rose\",\n      \"$stable\",\n      \"$past\",\n      \"$rose_gclk\",\n      \"$stable_gclk\",\n      \"$future_gclk\",\n      \"$falling_gclk\",\n      \"$changing_gclk\",\n      \"$display\",\n      \"$coverage_get_max\",\n      \"$coverage_merge\",\n      \"$get_coverage\",\n      \"$load_coverage_db\",\n      \"$typename\",\n      \"$unpacked_dimensions\",\n      \"$left\",\n      \"$low\",\n      \"$increment\",\n      \"$clog2\",\n      \"$ln\",\n      \"$log10\",\n      \"$exp\",\n      \"$sqrt\",\n      \"$pow\",\n      \"$floor\",\n      \"$ceil\",\n      \"$sin\",\n      \"$cos\",\n      \"$tan\",\n      \"$countbits\",\n      \"$onehot\",\n      \"$isunknown\",\n      \"$fatal\",\n      \"$warning\",\n      \"$dimensions\",\n      \"$right\",\n      \"$high\",\n      \"$size\",\n      \"$asin\",\n      \"$acos\",\n      \"$atan\",\n      \"$atan2\",\n      \"$hypot\",\n      \"$sinh\",\n      \"$cosh\",\n      \"$tanh\",\n      \"$asinh\",\n      \"$acosh\",\n      \"$atanh\",\n      \"$countones\",\n      \"$onehot0\",\n      \"$error\",\n      \"$info\",\n      \"$random\",\n      \"$dist_chi_square\",\n      \"$dist_erlang\",\n      \"$dist_exponential\",\n      \"$dist_normal\",\n      \"$dist_poisson\",\n      \"$dist_t\",\n      \"$dist_uniform\",\n      \"$q_initialize\",\n      \"$q_remove\",\n      \"$q_exam\",\n      \"$async$and$array\",\n      \"$async$nand$array\",\n      \"$async$or$array\",\n      \"$async$nor$array\",\n      \"$sync$and$array\",\n      \"$sync$nand$array\",\n      \"$sync$or$array\",\n      \"$sync$nor$array\",\n      \"$q_add\",\n      \"$q_full\",\n      \"$psprintf\",\n      \"$async$and$plane\",\n      \"$async$nand$plane\",\n      \"$async$or$plane\",\n      \"$async$nor$plane\",\n      \"$sync$and$plane\",\n      \"$sync$nand$plane\",\n      \"$sync$or$plane\",\n      \"$sync$nor$plane\",\n      \"$system\",\n      \"$display\",\n      \"$displayb\",\n      \"$displayh\",\n      \"$displayo\",\n      \"$strobe\",\n      \"$strobeb\",\n      \"$strobeh\",\n      \"$strobeo\",\n      \"$write\",\n      \"$readmemb\",\n      \"$readmemh\",\n      \"$writememh\",\n      \"$value$plusargs\",\n      \"$dumpvars\",\n      \"$dumpon\",\n      \"$dumplimit\",\n      \"$dumpports\",\n      \"$dumpportson\",\n      \"$dumpportslimit\",\n      \"$writeb\",\n      \"$writeh\",\n      \"$writeo\",\n      \"$monitor\",\n      \"$monitorb\",\n      \"$monitorh\",\n      \"$monitoro\",\n      \"$writememb\",\n      \"$dumpfile\",\n      \"$dumpoff\",\n      \"$dumpall\",\n      \"$dumpflush\",\n      \"$dumpportsoff\",\n      \"$dumpportsall\",\n      \"$dumpportsflush\",\n      \"$fclose\",\n      \"$fdisplay\",\n      \"$fdisplayb\",\n      \"$fdisplayh\",\n      \"$fdisplayo\",\n      \"$fstrobe\",\n      \"$fstrobeb\",\n      \"$fstrobeh\",\n      \"$fstrobeo\",\n      \"$swrite\",\n      \"$swriteb\",\n      \"$swriteh\",\n      \"$swriteo\",\n      \"$fscanf\",\n      \"$fread\",\n      \"$fseek\",\n      \"$fflush\",\n      \"$feof\",\n      \"$fopen\",\n      \"$fwrite\",\n      \"$fwriteb\",\n      \"$fwriteh\",\n      \"$fwriteo\",\n      \"$fmonitor\",\n      \"$fmonitorb\",\n      \"$fmonitorh\",\n      \"$fmonitoro\",\n      \"$sformat\",\n      \"$sformatf\",\n      \"$fgetc\",\n      \"$ungetc\",\n      \"$fgets\",\n      \"$sscanf\",\n      \"$rewind\",\n      \"$ftell\",\n      \"$ferror\"\n    ]\n  };\n  const BUILT_IN_CONSTANTS = [\n    \"__FILE__\",\n    \"__LINE__\"\n  ];\n  const DIRECTIVES = [\n    \"begin_keywords\",\n    \"celldefine\",\n    \"default_nettype\",\n    \"default_decay_time\",\n    \"default_trireg_strength\",\n    \"define\",\n    \"delay_mode_distributed\",\n    \"delay_mode_path\",\n    \"delay_mode_unit\",\n    \"delay_mode_zero\",\n    \"else\",\n    \"elsif\",\n    \"end_keywords\",\n    \"endcelldefine\",\n    \"endif\",\n    \"ifdef\",\n    \"ifndef\",\n    \"include\",\n    \"line\",\n    \"nounconnected_drive\",\n    \"pragma\",\n    \"resetall\",\n    \"timescale\",\n    \"unconnected_drive\",\n    \"undef\",\n    \"undefineall\"\n  ];\n\n  return {\n    name: 'Verilog',\n    aliases: [\n      'v',\n      'sv',\n      'svh'\n    ],\n    case_insensitive: false,\n    keywords: KEYWORDS,\n    contains: [\n      hljs.C_BLOCK_COMMENT_MODE,\n      hljs.C_LINE_COMMENT_MODE,\n      hljs.QUOTE_STRING_MODE,\n      {\n        scope: 'number',\n        contains: [ hljs.BACKSLASH_ESCAPE ],\n        variants: [\n          { begin: /\\b((\\d+'([bhodBHOD]))[0-9xzXZa-fA-F_]+)/ },\n          { begin: /\\B(('([bhodBHOD]))[0-9xzXZa-fA-F_]+)/ },\n          { // decimal\n            begin: /\\b[0-9][0-9_]*/,\n            relevance: 0\n          }\n        ]\n      },\n      /* parameters to instances */\n      {\n        scope: 'variable',\n        variants: [\n          { begin: '#\\\\((?!parameter).+\\\\)' },\n          {\n            begin: '\\\\.\\\\w+',\n            relevance: 0\n          }\n        ]\n      },\n      {\n        scope: 'variable.constant',\n        match: regex.concat(/`/, regex.either(...BUILT_IN_CONSTANTS)),\n      },\n      {\n        scope: 'meta',\n        begin: regex.concat(/`/, regex.either(...DIRECTIVES)),\n        end: /$|\\/\\/|\\/\\*/,\n        returnEnd: true,\n        keywords: DIRECTIVES\n      }\n    ]\n  };\n}\n\nmodule.exports = verilog;\n","/*\nLanguage: VHDL\nAuthor: Igor Kalnitsky <igor@kalnitsky.org>\nContributors: Daniel C.K. Kho <daniel.kho@tauhop.com>, Guillaume Savaton <guillaume.savaton@eseo.fr>\nDescription: VHDL is a hardware description language used in electronic design automation to describe digital and mixed-signal systems.\nWebsite: https://en.wikipedia.org/wiki/VHDL\nCategory: hardware\n*/\n\nfunction vhdl(hljs) {\n  // Regular expression for VHDL numeric literals.\n\n  // Decimal literal:\n  const INTEGER_RE = '\\\\d(_|\\\\d)*';\n  const EXPONENT_RE = '[eE][-+]?' + INTEGER_RE;\n  const DECIMAL_LITERAL_RE = INTEGER_RE + '(\\\\.' + INTEGER_RE + ')?' + '(' + EXPONENT_RE + ')?';\n  // Based literal:\n  const BASED_INTEGER_RE = '\\\\w+';\n  const BASED_LITERAL_RE = INTEGER_RE + '#' + BASED_INTEGER_RE + '(\\\\.' + BASED_INTEGER_RE + ')?' + '#' + '(' + EXPONENT_RE + ')?';\n\n  const NUMBER_RE = '\\\\b(' + BASED_LITERAL_RE + '|' + DECIMAL_LITERAL_RE + ')';\n\n  const KEYWORDS = [\n    \"abs\",\n    \"access\",\n    \"after\",\n    \"alias\",\n    \"all\",\n    \"and\",\n    \"architecture\",\n    \"array\",\n    \"assert\",\n    \"assume\",\n    \"assume_guarantee\",\n    \"attribute\",\n    \"begin\",\n    \"block\",\n    \"body\",\n    \"buffer\",\n    \"bus\",\n    \"case\",\n    \"component\",\n    \"configuration\",\n    \"constant\",\n    \"context\",\n    \"cover\",\n    \"disconnect\",\n    \"downto\",\n    \"default\",\n    \"else\",\n    \"elsif\",\n    \"end\",\n    \"entity\",\n    \"exit\",\n    \"fairness\",\n    \"file\",\n    \"for\",\n    \"force\",\n    \"function\",\n    \"generate\",\n    \"generic\",\n    \"group\",\n    \"guarded\",\n    \"if\",\n    \"impure\",\n    \"in\",\n    \"inertial\",\n    \"inout\",\n    \"is\",\n    \"label\",\n    \"library\",\n    \"linkage\",\n    \"literal\",\n    \"loop\",\n    \"map\",\n    \"mod\",\n    \"nand\",\n    \"new\",\n    \"next\",\n    \"nor\",\n    \"not\",\n    \"null\",\n    \"of\",\n    \"on\",\n    \"open\",\n    \"or\",\n    \"others\",\n    \"out\",\n    \"package\",\n    \"parameter\",\n    \"port\",\n    \"postponed\",\n    \"procedure\",\n    \"process\",\n    \"property\",\n    \"protected\",\n    \"pure\",\n    \"range\",\n    \"record\",\n    \"register\",\n    \"reject\",\n    \"release\",\n    \"rem\",\n    \"report\",\n    \"restrict\",\n    \"restrict_guarantee\",\n    \"return\",\n    \"rol\",\n    \"ror\",\n    \"select\",\n    \"sequence\",\n    \"severity\",\n    \"shared\",\n    \"signal\",\n    \"sla\",\n    \"sll\",\n    \"sra\",\n    \"srl\",\n    \"strong\",\n    \"subtype\",\n    \"then\",\n    \"to\",\n    \"transport\",\n    \"type\",\n    \"unaffected\",\n    \"units\",\n    \"until\",\n    \"use\",\n    \"variable\",\n    \"view\",\n    \"vmode\",\n    \"vprop\",\n    \"vunit\",\n    \"wait\",\n    \"when\",\n    \"while\",\n    \"with\",\n    \"xnor\",\n    \"xor\"\n  ];\n  const BUILT_INS = [\n    \"boolean\",\n    \"bit\",\n    \"character\",\n    \"integer\",\n    \"time\",\n    \"delay_length\",\n    \"natural\",\n    \"positive\",\n    \"string\",\n    \"bit_vector\",\n    \"file_open_kind\",\n    \"file_open_status\",\n    \"std_logic\",\n    \"std_logic_vector\",\n    \"unsigned\",\n    \"signed\",\n    \"boolean_vector\",\n    \"integer_vector\",\n    \"std_ulogic\",\n    \"std_ulogic_vector\",\n    \"unresolved_unsigned\",\n    \"u_unsigned\",\n    \"unresolved_signed\",\n    \"u_signed\",\n    \"real_vector\",\n    \"time_vector\"\n  ];\n  const LITERALS = [\n    // severity_level\n    \"false\",\n    \"true\",\n    \"note\",\n    \"warning\",\n    \"error\",\n    \"failure\",\n    // textio\n    \"line\",\n    \"text\",\n    \"side\",\n    \"width\"\n  ];\n\n  return {\n    name: 'VHDL',\n    case_insensitive: true,\n    keywords: {\n      keyword: KEYWORDS,\n      built_in: BUILT_INS,\n      literal: LITERALS\n    },\n    illegal: /\\{/,\n    contains: [\n      hljs.C_BLOCK_COMMENT_MODE, // VHDL-2008 block commenting.\n      hljs.COMMENT('--', '$'),\n      hljs.QUOTE_STRING_MODE,\n      {\n        className: 'number',\n        begin: NUMBER_RE,\n        relevance: 0\n      },\n      {\n        className: 'string',\n        begin: '\\'(U|X|0|1|Z|W|L|H|-)\\'',\n        contains: [ hljs.BACKSLASH_ESCAPE ]\n      },\n      {\n        className: 'symbol',\n        begin: '\\'[A-Za-z](_?[A-Za-z0-9])*',\n        contains: [ hljs.BACKSLASH_ESCAPE ]\n      }\n    ]\n  };\n}\n\nmodule.exports = vhdl;\n","/*\nLanguage: Vim Script\nAuthor: Jun Yang <yangjvn@126.com>\nDescription: full keyword and built-in from http://vimdoc.sourceforge.net/htmldoc/\nWebsite: https://www.vim.org\nCategory: scripting\n*/\n\nfunction vim(hljs) {\n  return {\n    name: 'Vim Script',\n    keywords: {\n      $pattern: /[!#@\\w]+/,\n      keyword:\n        // express version except: ! & * < = > !! # @ @@\n        'N|0 P|0 X|0 a|0 ab abc abo al am an|0 ar arga argd arge argdo argg argl argu as au aug aun b|0 bN ba bad bd be bel bf bl bm bn bo bp br brea breaka breakd breakl bro bufdo buffers bun bw c|0 cN cNf ca cabc caddb cad caddf cal cat cb cc ccl cd ce cex cf cfir cgetb cgete cg changes chd che checkt cl cla clo cm cmapc cme cn cnew cnf cno cnorea cnoreme co col colo com comc comp con conf cope '\n        + 'cp cpf cq cr cs cst cu cuna cunme cw delm deb debugg delc delf dif diffg diffo diffp diffpu diffs diffthis dig di dl dell dj dli do doautoa dp dr ds dsp e|0 ea ec echoe echoh echom echon el elsei em en endfo endf endt endw ene ex exe exi exu f|0 files filet fin fina fini fir fix fo foldc foldd folddoc foldo for fu go gr grepa gu gv ha helpf helpg helpt hi hid his ia iabc if ij il im imapc '\n        + 'ime ino inorea inoreme int is isp iu iuna iunme j|0 ju k|0 keepa kee keepj lN lNf l|0 lad laddb laddf la lan lat lb lc lch lcl lcs le lefta let lex lf lfir lgetb lgete lg lgr lgrepa lh ll lla lli lmak lm lmapc lne lnew lnf ln loadk lo loc lockv lol lope lp lpf lr ls lt lu lua luad luaf lv lvimgrepa lw m|0 ma mak map mapc marks mat me menut mes mk mks mksp mkv mkvie mod mz mzf nbc nb nbs new nm nmapc nme nn nnoreme noa no noh norea noreme norm nu nun nunme ol o|0 om omapc ome on ono onoreme opt ou ounme ow p|0 '\n        + 'profd prof pro promptr pc ped pe perld po popu pp pre prev ps pt ptN ptf ptj ptl ptn ptp ptr pts pu pw py3 python3 py3d py3f py pyd pyf quita qa rec red redi redr redraws reg res ret retu rew ri rightb rub rubyd rubyf rund ru rv sN san sa sal sav sb sbN sba sbf sbl sbm sbn sbp sbr scrip scripte scs se setf setg setl sf sfir sh sim sig sil sl sla sm smap smapc sme sn sni sno snor snoreme sor '\n        + 'so spelld spe spelli spellr spellu spellw sp spr sre st sta startg startr star stopi stj sts sun sunm sunme sus sv sw sy synti sync tN tabN tabc tabdo tabe tabf tabfir tabl tabm tabnew '\n        + 'tabn tabo tabp tabr tabs tab ta tags tc tcld tclf te tf th tj tl tm tn to tp tr try ts tu u|0 undoj undol una unh unl unlo unm unme uns up ve verb vert vim vimgrepa vi viu vie vm vmapc vme vne vn vnoreme vs vu vunme windo w|0 wN wa wh wi winc winp wn wp wq wqa ws wu wv x|0 xa xmapc xm xme xn xnoreme xu xunme y|0 z|0 ~ '\n        // full version\n        + 'Next Print append abbreviate abclear aboveleft all amenu anoremenu args argadd argdelete argedit argglobal arglocal argument ascii autocmd augroup aunmenu buffer bNext ball badd bdelete behave belowright bfirst blast bmodified bnext botright bprevious brewind break breakadd breakdel breaklist browse bunload '\n        + 'bwipeout change cNext cNfile cabbrev cabclear caddbuffer caddexpr caddfile call catch cbuffer cclose center cexpr cfile cfirst cgetbuffer cgetexpr cgetfile chdir checkpath checktime clist clast close cmap cmapclear cmenu cnext cnewer cnfile cnoremap cnoreabbrev cnoremenu copy colder colorscheme command comclear compiler continue confirm copen cprevious cpfile cquit crewind cscope cstag cunmap '\n        + 'cunabbrev cunmenu cwindow delete delmarks debug debuggreedy delcommand delfunction diffupdate diffget diffoff diffpatch diffput diffsplit digraphs display deletel djump dlist doautocmd doautoall deletep drop dsearch dsplit edit earlier echo echoerr echohl echomsg else elseif emenu endif endfor '\n        + 'endfunction endtry endwhile enew execute exit exusage file filetype find finally finish first fixdel fold foldclose folddoopen folddoclosed foldopen function global goto grep grepadd gui gvim hardcopy help helpfind helpgrep helptags highlight hide history insert iabbrev iabclear ijump ilist imap '\n        + 'imapclear imenu inoremap inoreabbrev inoremenu intro isearch isplit iunmap iunabbrev iunmenu join jumps keepalt keepmarks keepjumps lNext lNfile list laddexpr laddbuffer laddfile last language later lbuffer lcd lchdir lclose lcscope left leftabove lexpr lfile lfirst lgetbuffer lgetexpr lgetfile lgrep lgrepadd lhelpgrep llast llist lmake lmap lmapclear lnext lnewer lnfile lnoremap loadkeymap loadview '\n        + 'lockmarks lockvar lolder lopen lprevious lpfile lrewind ltag lunmap luado luafile lvimgrep lvimgrepadd lwindow move mark make mapclear match menu menutranslate messages mkexrc mksession mkspell mkvimrc mkview mode mzscheme mzfile nbclose nbkey nbsart next nmap nmapclear nmenu nnoremap '\n        + 'nnoremenu noautocmd noremap nohlsearch noreabbrev noremenu normal number nunmap nunmenu oldfiles open omap omapclear omenu only onoremap onoremenu options ounmap ounmenu ownsyntax print profdel profile promptfind promptrepl pclose pedit perl perldo pop popup ppop preserve previous psearch ptag ptNext '\n        + 'ptfirst ptjump ptlast ptnext ptprevious ptrewind ptselect put pwd py3do py3file python pydo pyfile quit quitall qall read recover redo redir redraw redrawstatus registers resize retab return rewind right rightbelow ruby rubydo rubyfile rundo runtime rviminfo substitute sNext sandbox sargument sall saveas sbuffer sbNext sball sbfirst sblast sbmodified sbnext sbprevious sbrewind scriptnames scriptencoding '\n        + 'scscope set setfiletype setglobal setlocal sfind sfirst shell simalt sign silent sleep slast smagic smapclear smenu snext sniff snomagic snoremap snoremenu sort source spelldump spellgood spellinfo spellrepall spellundo spellwrong split sprevious srewind stop stag startgreplace startreplace '\n        + 'startinsert stopinsert stjump stselect sunhide sunmap sunmenu suspend sview swapname syntax syntime syncbind tNext tabNext tabclose tabedit tabfind tabfirst tablast tabmove tabnext tabonly tabprevious tabrewind tag tcl tcldo tclfile tearoff tfirst throw tjump tlast tmenu tnext topleft tprevious ' + 'trewind tselect tunmenu undo undojoin undolist unabbreviate unhide unlet unlockvar unmap unmenu unsilent update vglobal version verbose vertical vimgrep vimgrepadd visual viusage view vmap vmapclear vmenu vnew '\n        + 'vnoremap vnoremenu vsplit vunmap vunmenu write wNext wall while winsize wincmd winpos wnext wprevious wqall wsverb wundo wviminfo xit xall xmapclear xmap xmenu xnoremap xnoremenu xunmap xunmenu yank',\n      built_in: // built in func\n        'synIDtrans atan2 range matcharg did_filetype asin feedkeys xor argv '\n        + 'complete_check add getwinposx getqflist getwinposy screencol '\n        + 'clearmatches empty extend getcmdpos mzeval garbagecollect setreg '\n        + 'ceil sqrt diff_hlID inputsecret get getfperm getpid filewritable '\n        + 'shiftwidth max sinh isdirectory synID system inputrestore winline '\n        + 'atan visualmode inputlist tabpagewinnr round getregtype mapcheck '\n        + 'hasmapto histdel argidx findfile sha256 exists toupper getcmdline '\n        + 'taglist string getmatches bufnr strftime winwidth bufexists '\n        + 'strtrans tabpagebuflist setcmdpos remote_read printf setloclist '\n        + 'getpos getline bufwinnr float2nr len getcmdtype diff_filler luaeval '\n        + 'resolve libcallnr foldclosedend reverse filter has_key bufname '\n        + 'str2float strlen setline getcharmod setbufvar index searchpos '\n        + 'shellescape undofile foldclosed setqflist buflisted strchars str2nr '\n        + 'virtcol floor remove undotree remote_expr winheight gettabwinvar '\n        + 'reltime cursor tabpagenr finddir localtime acos getloclist search '\n        + 'tanh matchend rename gettabvar strdisplaywidth type abs py3eval '\n        + 'setwinvar tolower wildmenumode log10 spellsuggest bufloaded '\n        + 'synconcealed nextnonblank server2client complete settabwinvar '\n        + 'executable input wincol setmatches getftype hlID inputsave '\n        + 'searchpair or screenrow line settabvar histadd deepcopy strpart '\n        + 'remote_peek and eval getftime submatch screenchar winsaveview '\n        + 'matchadd mkdir screenattr getfontname libcall reltimestr getfsize '\n        + 'winnr invert pow getbufline byte2line soundfold repeat fnameescape '\n        + 'tagfiles sin strwidth spellbadword trunc maparg log lispindent '\n        + 'hostname setpos globpath remote_foreground getchar synIDattr '\n        + 'fnamemodify cscope_connection stridx winbufnr indent min '\n        + 'complete_add nr2char searchpairpos inputdialog values matchlist '\n        + 'items hlexists strridx browsedir expand fmod pathshorten line2byte '\n        + 'argc count getwinvar glob foldtextresult getreg foreground cosh '\n        + 'matchdelete has char2nr simplify histget searchdecl iconv '\n        + 'winrestcmd pumvisible writefile foldlevel haslocaldir keys cos '\n        + 'matchstr foldtext histnr tan tempname getcwd byteidx getbufvar '\n        + 'islocked escape eventhandler remote_send serverlist winrestview '\n        + 'synstack pyeval prevnonblank readfile cindent filereadable changenr '\n        + 'exp'\n    },\n    illegal: /;/,\n    contains: [\n      hljs.NUMBER_MODE,\n      {\n        className: 'string',\n        begin: '\\'',\n        end: '\\'',\n        illegal: '\\\\n'\n      },\n\n      /*\n      A double quote can start either a string or a line comment. Strings are\n      ended before the end of a line by another double quote and can contain\n      escaped double-quotes and post-escaped line breaks.\n\n      Also, any double quote at the beginning of a line is a comment but we\n      don't handle that properly at the moment: any double quote inside will\n      turn them into a string. Handling it properly will require a smarter\n      parser.\n      */\n      {\n        className: 'string',\n        begin: /\"(\\\\\"|\\n\\\\|[^\"\\n])*\"/\n      },\n      hljs.COMMENT('\"', '$'),\n\n      {\n        className: 'variable',\n        begin: /[bwtglsav]:[\\w\\d_]+/\n      },\n      {\n        begin: [\n          /\\b(?:function|function!)/,\n          /\\s+/,\n          hljs.IDENT_RE\n        ],\n        className: {\n          1: \"keyword\",\n          3: \"title\"\n        },\n        end: '$',\n        relevance: 0,\n        contains: [\n          {\n            className: 'params',\n            begin: '\\\\(',\n            end: '\\\\)'\n          }\n        ]\n      },\n      {\n        className: 'symbol',\n        begin: /<[\\w-]+>/\n      }\n    ]\n  };\n}\n\nmodule.exports = vim;\n","/*\nLanguage: WebAssembly\nWebsite: https://webassembly.org\nDescription:  Wasm is designed as a portable compilation target for programming languages, enabling deployment on the web for client and server applications.\nCategory: web, common\nAudit: 2020\n*/\n\n/** @type LanguageFn */\nfunction wasm(hljs) {\n  hljs.regex;\n  const BLOCK_COMMENT = hljs.COMMENT(/\\(;/, /;\\)/);\n  BLOCK_COMMENT.contains.push(\"self\");\n  const LINE_COMMENT = hljs.COMMENT(/;;/, /$/);\n\n  const KWS = [\n    \"anyfunc\",\n    \"block\",\n    \"br\",\n    \"br_if\",\n    \"br_table\",\n    \"call\",\n    \"call_indirect\",\n    \"data\",\n    \"drop\",\n    \"elem\",\n    \"else\",\n    \"end\",\n    \"export\",\n    \"func\",\n    \"global.get\",\n    \"global.set\",\n    \"local.get\",\n    \"local.set\",\n    \"local.tee\",\n    \"get_global\",\n    \"get_local\",\n    \"global\",\n    \"if\",\n    \"import\",\n    \"local\",\n    \"loop\",\n    \"memory\",\n    \"memory.grow\",\n    \"memory.size\",\n    \"module\",\n    \"mut\",\n    \"nop\",\n    \"offset\",\n    \"param\",\n    \"result\",\n    \"return\",\n    \"select\",\n    \"set_global\",\n    \"set_local\",\n    \"start\",\n    \"table\",\n    \"tee_local\",\n    \"then\",\n    \"type\",\n    \"unreachable\"\n  ];\n\n  const FUNCTION_REFERENCE = {\n    begin: [\n      /(?:func|call|call_indirect)/,\n      /\\s+/,\n      /\\$[^\\s)]+/\n    ],\n    className: {\n      1: \"keyword\",\n      3: \"title.function\"\n    }\n  };\n\n  const ARGUMENT = {\n    className: \"variable\",\n    begin: /\\$[\\w_]+/\n  };\n\n  const PARENS = {\n    match: /(\\((?!;)|\\))+/,\n    className: \"punctuation\",\n    relevance: 0\n  };\n\n  const NUMBER = {\n    className: \"number\",\n    relevance: 0,\n    // borrowed from Prism, TODO: split out into variants\n    match: /[+-]?\\b(?:\\d(?:_?\\d)*(?:\\.\\d(?:_?\\d)*)?(?:[eE][+-]?\\d(?:_?\\d)*)?|0x[\\da-fA-F](?:_?[\\da-fA-F])*(?:\\.[\\da-fA-F](?:_?[\\da-fA-D])*)?(?:[pP][+-]?\\d(?:_?\\d)*)?)\\b|\\binf\\b|\\bnan(?::0x[\\da-fA-F](?:_?[\\da-fA-D])*)?\\b/\n  };\n\n  const TYPE = {\n    // look-ahead prevents us from gobbling up opcodes\n    match: /(i32|i64|f32|f64)(?!\\.)/,\n    className: \"type\"\n  };\n\n  const MATH_OPERATIONS = {\n    className: \"keyword\",\n    // borrowed from Prism, TODO: split out into variants\n    match: /\\b(f32|f64|i32|i64)(?:\\.(?:abs|add|and|ceil|clz|const|convert_[su]\\/i(?:32|64)|copysign|ctz|demote\\/f64|div(?:_[su])?|eqz?|extend_[su]\\/i32|floor|ge(?:_[su])?|gt(?:_[su])?|le(?:_[su])?|load(?:(?:8|16|32)_[su])?|lt(?:_[su])?|max|min|mul|nearest|neg?|or|popcnt|promote\\/f32|reinterpret\\/[fi](?:32|64)|rem_[su]|rot[lr]|shl|shr_[su]|store(?:8|16|32)?|sqrt|sub|trunc(?:_[su]\\/f(?:32|64))?|wrap\\/i64|xor))\\b/\n  };\n\n  const OFFSET_ALIGN = {\n    match: [\n      /(?:offset|align)/,\n      /\\s*/,\n      /=/\n    ],\n    className: {\n      1: \"keyword\",\n      3: \"operator\"\n    }\n  };\n\n  return {\n    name: 'WebAssembly',\n    keywords: {\n      $pattern: /[\\w.]+/,\n      keyword: KWS\n    },\n    contains: [\n      LINE_COMMENT,\n      BLOCK_COMMENT,\n      OFFSET_ALIGN,\n      ARGUMENT,\n      PARENS,\n      FUNCTION_REFERENCE,\n      hljs.QUOTE_STRING_MODE,\n      TYPE,\n      MATH_OPERATIONS,\n      NUMBER\n    ]\n  };\n}\n\nmodule.exports = wasm;\n","/*\nLanguage: Wren\nDescription: Think Smalltalk in a Lua-sized package with a dash of Erlang and wrapped up in a familiar, modern syntax.\nCategory: scripting\nAuthor: @joshgoebel\nMaintainer: @joshgoebel\nWebsite: https://wren.io/\n*/\n\n/** @type LanguageFn */\nfunction wren(hljs) {\n  const regex = hljs.regex;\n  const IDENT_RE = /[a-zA-Z]\\w*/;\n  const KEYWORDS = [\n    \"as\",\n    \"break\",\n    \"class\",\n    \"construct\",\n    \"continue\",\n    \"else\",\n    \"for\",\n    \"foreign\",\n    \"if\",\n    \"import\",\n    \"in\",\n    \"is\",\n    \"return\",\n    \"static\",\n    \"var\",\n    \"while\"\n  ];\n  const LITERALS = [\n    \"true\",\n    \"false\",\n    \"null\"\n  ];\n  const LANGUAGE_VARS = [\n    \"this\",\n    \"super\"\n  ];\n  const CORE_CLASSES = [\n    \"Bool\",\n    \"Class\",\n    \"Fiber\",\n    \"Fn\",\n    \"List\",\n    \"Map\",\n    \"Null\",\n    \"Num\",\n    \"Object\",\n    \"Range\",\n    \"Sequence\",\n    \"String\",\n    \"System\"\n  ];\n  const OPERATORS = [\n    \"-\",\n    \"~\",\n    /\\*/,\n    \"%\",\n    /\\.\\.\\./,\n    /\\.\\./,\n    /\\+/,\n    \"<<\",\n    \">>\",\n    \">=\",\n    \"<=\",\n    \"<\",\n    \">\",\n    /\\^/,\n    /!=/,\n    /!/,\n    /\\bis\\b/,\n    \"==\",\n    \"&&\",\n    \"&\",\n    /\\|\\|/,\n    /\\|/,\n    /\\?:/,\n    \"=\"\n  ];\n  const FUNCTION = {\n    relevance: 0,\n    match: regex.concat(/\\b(?!(if|while|for|else|super)\\b)/, IDENT_RE, /(?=\\s*[({])/),\n    className: \"title.function\"\n  };\n  const FUNCTION_DEFINITION = {\n    match: regex.concat(\n      regex.either(\n        regex.concat(/\\b(?!(if|while|for|else|super)\\b)/, IDENT_RE),\n        regex.either(...OPERATORS)\n      ),\n      /(?=\\s*\\([^)]+\\)\\s*\\{)/),\n    className: \"title.function\",\n    starts: { contains: [\n      {\n        begin: /\\(/,\n        end: /\\)/,\n        contains: [\n          {\n            relevance: 0,\n            scope: \"params\",\n            match: IDENT_RE\n          }\n        ]\n      }\n    ] }\n  };\n  const CLASS_DEFINITION = {\n    variants: [\n      { match: [\n        /class\\s+/,\n        IDENT_RE,\n        /\\s+is\\s+/,\n        IDENT_RE\n      ] },\n      { match: [\n        /class\\s+/,\n        IDENT_RE\n      ] }\n    ],\n    scope: {\n      2: \"title.class\",\n      4: \"title.class.inherited\"\n    },\n    keywords: KEYWORDS\n  };\n\n  const OPERATOR = {\n    relevance: 0,\n    match: regex.either(...OPERATORS),\n    className: \"operator\"\n  };\n\n  const TRIPLE_STRING = {\n    className: \"string\",\n    begin: /\"\"\"/,\n    end: /\"\"\"/\n  };\n\n  const PROPERTY = {\n    className: \"property\",\n    begin: regex.concat(/\\./, regex.lookahead(IDENT_RE)),\n    end: IDENT_RE,\n    excludeBegin: true,\n    relevance: 0\n  };\n\n  const FIELD = {\n    relevance: 0,\n    match: regex.concat(/\\b_/, IDENT_RE),\n    scope: \"variable\"\n  };\n\n  // CamelCase\n  const CLASS_REFERENCE = {\n    relevance: 0,\n    match: /\\b[A-Z]+[a-z]+([A-Z]+[a-z]+)*/,\n    scope: \"title.class\",\n    keywords: { _: CORE_CLASSES }\n  };\n\n  // TODO: add custom number modes\n  const NUMBER = hljs.C_NUMBER_MODE;\n\n  const SETTER = {\n    match: [\n      IDENT_RE,\n      /\\s*/,\n      /=/,\n      /\\s*/,\n      /\\(/,\n      IDENT_RE,\n      /\\)\\s*\\{/\n    ],\n    scope: {\n      1: \"title.function\",\n      3: \"operator\",\n      6: \"params\"\n    }\n  };\n\n  const COMMENT_DOCS = hljs.COMMENT(\n    /\\/\\*\\*/,\n    /\\*\\//,\n    { contains: [\n      {\n        match: /@[a-z]+/,\n        scope: \"doctag\"\n      },\n      \"self\"\n    ] }\n  );\n  const SUBST = {\n    scope: \"subst\",\n    begin: /%\\(/,\n    end: /\\)/,\n    contains: [\n      NUMBER,\n      CLASS_REFERENCE,\n      FUNCTION,\n      FIELD,\n      OPERATOR\n    ]\n  };\n  const STRING = {\n    scope: \"string\",\n    begin: /\"/,\n    end: /\"/,\n    contains: [\n      SUBST,\n      {\n        scope: \"char.escape\",\n        variants: [\n          { match: /\\\\\\\\|\\\\[\"0%abefnrtv]/ },\n          { match: /\\\\x[0-9A-F]{2}/ },\n          { match: /\\\\u[0-9A-F]{4}/ },\n          { match: /\\\\U[0-9A-F]{8}/ }\n        ]\n      }\n    ]\n  };\n  SUBST.contains.push(STRING);\n\n  const ALL_KWS = [\n    ...KEYWORDS,\n    ...LANGUAGE_VARS,\n    ...LITERALS\n  ];\n  const VARIABLE = {\n    relevance: 0,\n    match: regex.concat(\n      \"\\\\b(?!\",\n      ALL_KWS.join(\"|\"),\n      \"\\\\b)\",\n      /[a-zA-Z_]\\w*(?:[?!]|\\b)/\n    ),\n    className: \"variable\"\n  };\n\n  // TODO: reconsider this in the future\n  const ATTRIBUTE = {\n    // scope: \"meta\",\n    scope: \"comment\",\n    variants: [\n      {\n        begin: [\n          /#!?/,\n          /[A-Za-z_]+(?=\\()/\n        ],\n        beginScope: {\n          // 2: \"attr\"\n        },\n        keywords: { literal: LITERALS },\n        contains: [\n          // NUMBER,\n          // VARIABLE\n        ],\n        end: /\\)/\n      },\n      {\n        begin: [\n          /#!?/,\n          /[A-Za-z_]+/\n        ],\n        beginScope: {\n          // 2: \"attr\"\n        },\n        end: /$/\n      }\n    ]\n  };\n\n  return {\n    name: \"Wren\",\n    keywords: {\n      keyword: KEYWORDS,\n      \"variable.language\": LANGUAGE_VARS,\n      literal: LITERALS\n    },\n    contains: [\n      ATTRIBUTE,\n      NUMBER,\n      STRING,\n      TRIPLE_STRING,\n      COMMENT_DOCS,\n      hljs.C_LINE_COMMENT_MODE,\n      hljs.C_BLOCK_COMMENT_MODE,\n      CLASS_REFERENCE,\n      CLASS_DEFINITION,\n      SETTER,\n      FUNCTION_DEFINITION,\n      FUNCTION,\n      OPERATOR,\n      FIELD,\n      PROPERTY,\n      VARIABLE\n    ]\n  };\n}\n\nmodule.exports = wren;\n","/*\nLanguage: Intel x86 Assembly\nAuthor: innocenat <innocenat@gmail.com>\nDescription: x86 assembly language using Intel's mnemonic and NASM syntax\nWebsite: https://en.wikipedia.org/wiki/X86_assembly_language\nCategory: assembler\n*/\n\nfunction x86asm(hljs) {\n  return {\n    name: 'Intel x86 Assembly',\n    case_insensitive: true,\n    keywords: {\n      $pattern: '[.%]?' + hljs.IDENT_RE,\n      keyword:\n        'lock rep repe repz repne repnz xaquire xrelease bnd nobnd '\n        + 'aaa aad aam aas adc add and arpl bb0_reset bb1_reset bound bsf bsr bswap bt btc btr bts call cbw cdq cdqe clc cld cli clts cmc cmp cmpsb cmpsd cmpsq cmpsw cmpxchg cmpxchg486 cmpxchg8b cmpxchg16b cpuid cpu_read cpu_write cqo cwd cwde daa das dec div dmint emms enter equ f2xm1 fabs fadd faddp fbld fbstp fchs fclex fcmovb fcmovbe fcmove fcmovnb fcmovnbe fcmovne fcmovnu fcmovu fcom fcomi fcomip fcomp fcompp fcos fdecstp fdisi fdiv fdivp fdivr fdivrp femms feni ffree ffreep fiadd ficom ficomp fidiv fidivr fild fimul fincstp finit fist fistp fisttp fisub fisubr fld fld1 fldcw fldenv fldl2e fldl2t fldlg2 fldln2 fldpi fldz fmul fmulp fnclex fndisi fneni fninit fnop fnsave fnstcw fnstenv fnstsw fpatan fprem fprem1 fptan frndint frstor fsave fscale fsetpm fsin fsincos fsqrt fst fstcw fstenv fstp fstsw fsub fsubp fsubr fsubrp ftst fucom fucomi fucomip fucomp fucompp fxam fxch fxtract fyl2x fyl2xp1 hlt ibts icebp idiv imul in inc incbin insb insd insw int int01 int1 int03 int3 into invd invpcid invlpg invlpga iret iretd iretq iretw jcxz jecxz jrcxz jmp jmpe lahf lar lds lea leave les lfence lfs lgdt lgs lidt lldt lmsw loadall loadall286 lodsb lodsd lodsq lodsw loop loope loopne loopnz loopz lsl lss ltr mfence monitor mov movd movq movsb movsd movsq movsw movsx movsxd movzx mul mwait neg nop not or out outsb outsd outsw packssdw packsswb packuswb paddb paddd paddsb paddsiw paddsw paddusb paddusw paddw pand pandn pause paveb pavgusb pcmpeqb pcmpeqd pcmpeqw pcmpgtb pcmpgtd pcmpgtw pdistib pf2id pfacc pfadd pfcmpeq pfcmpge pfcmpgt pfmax pfmin pfmul pfrcp pfrcpit1 pfrcpit2 pfrsqit1 pfrsqrt pfsub pfsubr pi2fd pmachriw pmaddwd pmagw pmulhriw pmulhrwa pmulhrwc pmulhw pmullw pmvgezb pmvlzb pmvnzb pmvzb pop popa popad popaw popf popfd popfq popfw por prefetch prefetchw pslld psllq psllw psrad psraw psrld psrlq psrlw psubb psubd psubsb psubsiw psubsw psubusb psubusw psubw punpckhbw punpckhdq punpckhwd punpcklbw punpckldq punpcklwd push pusha pushad pushaw pushf pushfd pushfq pushfw pxor rcl rcr rdshr rdmsr rdpmc rdtsc rdtscp ret retf retn rol ror rdm rsdc rsldt rsm rsts sahf sal salc sar sbb scasb scasd scasq scasw sfence sgdt shl shld shr shrd sidt sldt skinit smi smint smintold smsw stc std sti stosb stosd stosq stosw str sub svdc svldt svts swapgs syscall sysenter sysexit sysret test ud0 ud1 ud2b ud2 ud2a umov verr verw fwait wbinvd wrshr wrmsr xadd xbts xchg xlatb xlat xor cmove cmovz cmovne cmovnz cmova cmovnbe cmovae cmovnb cmovb cmovnae cmovbe cmovna cmovg cmovnle cmovge cmovnl cmovl cmovnge cmovle cmovng cmovc cmovnc cmovo cmovno cmovs cmovns cmovp cmovpe cmovnp cmovpo je jz jne jnz ja jnbe jae jnb jb jnae jbe jna jg jnle jge jnl jl jnge jle jng jc jnc jo jno js jns jpo jnp jpe jp sete setz setne setnz seta setnbe setae setnb setnc setb setnae setcset setbe setna setg setnle setge setnl setl setnge setle setng sets setns seto setno setpe setp setpo setnp addps addss andnps andps cmpeqps cmpeqss cmpleps cmpless cmpltps cmpltss cmpneqps cmpneqss cmpnleps cmpnless cmpnltps cmpnltss cmpordps cmpordss cmpunordps cmpunordss cmpps cmpss comiss cvtpi2ps cvtps2pi cvtsi2ss cvtss2si cvttps2pi cvttss2si divps divss ldmxcsr maxps maxss minps minss movaps movhps movlhps movlps movhlps movmskps movntps movss movups mulps mulss orps rcpps rcpss rsqrtps rsqrtss shufps sqrtps sqrtss stmxcsr subps subss ucomiss unpckhps unpcklps xorps fxrstor fxrstor64 fxsave fxsave64 xgetbv xsetbv xsave xsave64 xsaveopt xsaveopt64 xrstor xrstor64 prefetchnta prefetcht0 prefetcht1 prefetcht2 maskmovq movntq pavgb pavgw pextrw pinsrw pmaxsw pmaxub pminsw pminub pmovmskb pmulhuw psadbw pshufw pf2iw pfnacc pfpnacc pi2fw pswapd maskmovdqu clflush movntdq movnti movntpd movdqa movdqu movdq2q movq2dq paddq pmuludq pshufd pshufhw pshuflw pslldq psrldq psubq punpckhqdq punpcklqdq addpd addsd andnpd andpd cmpeqpd cmpeqsd cmplepd cmplesd cmpltpd cmpltsd cmpneqpd cmpneqsd cmpnlepd cmpnlesd cmpnltpd cmpnltsd cmpordpd cmpordsd cmpunordpd cmpunordsd cmppd comisd cvtdq2pd cvtdq2ps cvtpd2dq cvtpd2pi cvtpd2ps cvtpi2pd cvtps2dq cvtps2pd cvtsd2si cvtsd2ss cvtsi2sd cvtss2sd cvttpd2pi cvttpd2dq cvttps2dq cvttsd2si divpd divsd maxpd maxsd minpd minsd movapd movhpd movlpd movmskpd movupd mulpd mulsd orpd shufpd sqrtpd sqrtsd subpd subsd ucomisd unpckhpd unpcklpd xorpd addsubpd addsubps haddpd haddps hsubpd hsubps lddqu movddup movshdup movsldup clgi stgi vmcall vmclear vmfunc vmlaunch vmload vmmcall vmptrld vmptrst vmread vmresume vmrun vmsave vmwrite vmxoff vmxon invept invvpid pabsb pabsw pabsd palignr phaddw phaddd phaddsw phsubw phsubd phsubsw pmaddubsw pmulhrsw pshufb psignb psignw psignd extrq insertq movntsd movntss lzcnt blendpd blendps blendvpd blendvps dppd dpps extractps insertps movntdqa mpsadbw packusdw pblendvb pblendw pcmpeqq pextrb pextrd pextrq phminposuw pinsrb pinsrd pinsrq pmaxsb pmaxsd pmaxud pmaxuw pminsb pminsd pminud pminuw pmovsxbw pmovsxbd pmovsxbq pmovsxwd pmovsxwq pmovsxdq pmovzxbw pmovzxbd pmovzxbq pmovzxwd pmovzxwq pmovzxdq pmuldq pmulld ptest roundpd roundps roundsd roundss crc32 pcmpestri pcmpestrm pcmpistri pcmpistrm pcmpgtq popcnt getsec pfrcpv pfrsqrtv movbe aesenc aesenclast aesdec aesdeclast aesimc aeskeygenassist vaesenc vaesenclast vaesdec vaesdeclast vaesimc vaeskeygenassist vaddpd vaddps vaddsd vaddss vaddsubpd vaddsubps vandpd vandps vandnpd vandnps vblendpd vblendps vblendvpd vblendvps vbroadcastss vbroadcastsd vbroadcastf128 vcmpeq_ospd vcmpeqpd vcmplt_ospd vcmpltpd vcmple_ospd vcmplepd vcmpunord_qpd vcmpunordpd vcmpneq_uqpd vcmpneqpd vcmpnlt_uspd vcmpnltpd vcmpnle_uspd vcmpnlepd vcmpord_qpd vcmpordpd vcmpeq_uqpd vcmpnge_uspd vcmpngepd vcmpngt_uspd vcmpngtpd vcmpfalse_oqpd vcmpfalsepd vcmpneq_oqpd vcmpge_ospd vcmpgepd vcmpgt_ospd vcmpgtpd vcmptrue_uqpd vcmptruepd vcmplt_oqpd vcmple_oqpd vcmpunord_spd vcmpneq_uspd vcmpnlt_uqpd vcmpnle_uqpd vcmpord_spd vcmpeq_uspd vcmpnge_uqpd vcmpngt_uqpd vcmpfalse_ospd vcmpneq_ospd vcmpge_oqpd vcmpgt_oqpd vcmptrue_uspd vcmppd vcmpeq_osps vcmpeqps vcmplt_osps vcmpltps vcmple_osps vcmpleps vcmpunord_qps vcmpunordps vcmpneq_uqps vcmpneqps vcmpnlt_usps vcmpnltps vcmpnle_usps vcmpnleps vcmpord_qps vcmpordps vcmpeq_uqps vcmpnge_usps vcmpngeps vcmpngt_usps vcmpngtps vcmpfalse_oqps vcmpfalseps vcmpneq_oqps vcmpge_osps vcmpgeps vcmpgt_osps vcmpgtps vcmptrue_uqps vcmptrueps vcmplt_oqps vcmple_oqps vcmpunord_sps vcmpneq_usps vcmpnlt_uqps vcmpnle_uqps vcmpord_sps vcmpeq_usps vcmpnge_uqps vcmpngt_uqps vcmpfalse_osps vcmpneq_osps vcmpge_oqps vcmpgt_oqps vcmptrue_usps vcmpps vcmpeq_ossd vcmpeqsd vcmplt_ossd vcmpltsd vcmple_ossd vcmplesd vcmpunord_qsd vcmpunordsd vcmpneq_uqsd vcmpneqsd vcmpnlt_ussd vcmpnltsd vcmpnle_ussd vcmpnlesd vcmpord_qsd vcmpordsd vcmpeq_uqsd vcmpnge_ussd vcmpngesd vcmpngt_ussd vcmpngtsd vcmpfalse_oqsd vcmpfalsesd vcmpneq_oqsd vcmpge_ossd vcmpgesd vcmpgt_ossd vcmpgtsd vcmptrue_uqsd vcmptruesd vcmplt_oqsd vcmple_oqsd vcmpunord_ssd vcmpneq_ussd vcmpnlt_uqsd vcmpnle_uqsd vcmpord_ssd vcmpeq_ussd vcmpnge_uqsd vcmpngt_uqsd vcmpfalse_ossd vcmpneq_ossd vcmpge_oqsd vcmpgt_oqsd vcmptrue_ussd vcmpsd vcmpeq_osss vcmpeqss vcmplt_osss vcmpltss vcmple_osss vcmpless vcmpunord_qss vcmpunordss vcmpneq_uqss vcmpneqss vcmpnlt_usss vcmpnltss vcmpnle_usss vcmpnless vcmpord_qss vcmpordss vcmpeq_uqss vcmpnge_usss vcmpngess vcmpngt_usss vcmpngtss vcmpfalse_oqss vcmpfalsess vcmpneq_oqss vcmpge_osss vcmpgess vcmpgt_osss vcmpgtss vcmptrue_uqss vcmptruess vcmplt_oqss vcmple_oqss vcmpunord_sss vcmpneq_usss vcmpnlt_uqss vcmpnle_uqss vcmpord_sss vcmpeq_usss vcmpnge_uqss vcmpngt_uqss vcmpfalse_osss vcmpneq_osss vcmpge_oqss vcmpgt_oqss vcmptrue_usss vcmpss vcomisd vcomiss vcvtdq2pd vcvtdq2ps vcvtpd2dq vcvtpd2ps vcvtps2dq vcvtps2pd vcvtsd2si vcvtsd2ss vcvtsi2sd vcvtsi2ss vcvtss2sd vcvtss2si vcvttpd2dq vcvttps2dq vcvttsd2si vcvttss2si vdivpd vdivps vdivsd vdivss vdppd vdpps vextractf128 vextractps vhaddpd vhaddps vhsubpd vhsubps vinsertf128 vinsertps vlddqu vldqqu vldmxcsr vmaskmovdqu vmaskmovps vmaskmovpd vmaxpd vmaxps vmaxsd vmaxss vminpd vminps vminsd vminss vmovapd vmovaps vmovd vmovq vmovddup vmovdqa vmovqqa vmovdqu vmovqqu vmovhlps vmovhpd vmovhps vmovlhps vmovlpd vmovlps vmovmskpd vmovmskps vmovntdq vmovntqq vmovntdqa vmovntpd vmovntps vmovsd vmovshdup vmovsldup vmovss vmovupd vmovups vmpsadbw vmulpd vmulps vmulsd vmulss vorpd vorps vpabsb vpabsw vpabsd vpacksswb vpackssdw vpackuswb vpackusdw vpaddb vpaddw vpaddd vpaddq vpaddsb vpaddsw vpaddusb vpaddusw vpalignr vpand vpandn vpavgb vpavgw vpblendvb vpblendw vpcmpestri vpcmpestrm vpcmpistri vpcmpistrm vpcmpeqb vpcmpeqw vpcmpeqd vpcmpeqq vpcmpgtb vpcmpgtw vpcmpgtd vpcmpgtq vpermilpd vpermilps vperm2f128 vpextrb vpextrw vpextrd vpextrq vphaddw vphaddd vphaddsw vphminposuw vphsubw vphsubd vphsubsw vpinsrb vpinsrw vpinsrd vpinsrq vpmaddwd vpmaddubsw vpmaxsb vpmaxsw vpmaxsd vpmaxub vpmaxuw vpmaxud vpminsb vpminsw vpminsd vpminub vpminuw vpminud vpmovmskb vpmovsxbw vpmovsxbd vpmovsxbq vpmovsxwd vpmovsxwq vpmovsxdq vpmovzxbw vpmovzxbd vpmovzxbq vpmovzxwd vpmovzxwq vpmovzxdq vpmulhuw vpmulhrsw vpmulhw vpmullw vpmulld vpmuludq vpmuldq vpor vpsadbw vpshufb vpshufd vpshufhw vpshuflw vpsignb vpsignw vpsignd vpslldq vpsrldq vpsllw vpslld vpsllq vpsraw vpsrad vpsrlw vpsrld vpsrlq vptest vpsubb vpsubw vpsubd vpsubq vpsubsb vpsubsw vpsubusb vpsubusw vpunpckhbw vpunpckhwd vpunpckhdq vpunpckhqdq vpunpcklbw vpunpcklwd vpunpckldq vpunpcklqdq vpxor vrcpps vrcpss vrsqrtps vrsqrtss vroundpd vroundps vroundsd vroundss vshufpd vshufps vsqrtpd vsqrtps vsqrtsd vsqrtss vstmxcsr vsubpd vsubps vsubsd vsubss vtestps vtestpd vucomisd vucomiss vunpckhpd vunpckhps vunpcklpd vunpcklps vxorpd vxorps vzeroall vzeroupper pclmullqlqdq pclmulhqlqdq pclmullqhqdq pclmulhqhqdq pclmulqdq vpclmullqlqdq vpclmulhqlqdq vpclmullqhqdq vpclmulhqhqdq vpclmulqdq vfmadd132ps vfmadd132pd vfmadd312ps vfmadd312pd vfmadd213ps vfmadd213pd vfmadd123ps vfmadd123pd vfmadd231ps vfmadd231pd vfmadd321ps vfmadd321pd vfmaddsub132ps vfmaddsub132pd vfmaddsub312ps vfmaddsub312pd vfmaddsub213ps vfmaddsub213pd vfmaddsub123ps vfmaddsub123pd vfmaddsub231ps vfmaddsub231pd vfmaddsub321ps vfmaddsub321pd vfmsub132ps vfmsub132pd vfmsub312ps vfmsub312pd vfmsub213ps vfmsub213pd vfmsub123ps vfmsub123pd vfmsub231ps vfmsub231pd vfmsub321ps vfmsub321pd vfmsubadd132ps vfmsubadd132pd vfmsubadd312ps vfmsubadd312pd vfmsubadd213ps vfmsubadd213pd vfmsubadd123ps vfmsubadd123pd vfmsubadd231ps vfmsubadd231pd vfmsubadd321ps vfmsubadd321pd vfnmadd132ps vfnmadd132pd vfnmadd312ps vfnmadd312pd vfnmadd213ps vfnmadd213pd vfnmadd123ps vfnmadd123pd vfnmadd231ps vfnmadd231pd vfnmadd321ps vfnmadd321pd vfnmsub132ps vfnmsub132pd vfnmsub312ps vfnmsub312pd vfnmsub213ps vfnmsub213pd vfnmsub123ps vfnmsub123pd vfnmsub231ps vfnmsub231pd vfnmsub321ps vfnmsub321pd vfmadd132ss vfmadd132sd vfmadd312ss vfmadd312sd vfmadd213ss vfmadd213sd vfmadd123ss vfmadd123sd vfmadd231ss vfmadd231sd vfmadd321ss vfmadd321sd vfmsub132ss vfmsub132sd vfmsub312ss vfmsub312sd vfmsub213ss vfmsub213sd vfmsub123ss vfmsub123sd vfmsub231ss vfmsub231sd vfmsub321ss vfmsub321sd vfnmadd132ss vfnmadd132sd vfnmadd312ss vfnmadd312sd vfnmadd213ss vfnmadd213sd vfnmadd123ss vfnmadd123sd vfnmadd231ss vfnmadd231sd vfnmadd321ss vfnmadd321sd vfnmsub132ss vfnmsub132sd vfnmsub312ss vfnmsub312sd vfnmsub213ss vfnmsub213sd vfnmsub123ss vfnmsub123sd vfnmsub231ss vfnmsub231sd vfnmsub321ss vfnmsub321sd rdfsbase rdgsbase rdrand wrfsbase wrgsbase vcvtph2ps vcvtps2ph adcx adox rdseed clac stac xstore xcryptecb xcryptcbc xcryptctr xcryptcfb xcryptofb montmul xsha1 xsha256 llwpcb slwpcb lwpval lwpins vfmaddpd vfmaddps vfmaddsd vfmaddss vfmaddsubpd vfmaddsubps vfmsubaddpd vfmsubaddps vfmsubpd vfmsubps vfmsubsd vfmsubss vfnmaddpd vfnmaddps vfnmaddsd vfnmaddss vfnmsubpd vfnmsubps vfnmsubsd vfnmsubss vfrczpd vfrczps vfrczsd vfrczss vpcmov vpcomb vpcomd vpcomq vpcomub vpcomud vpcomuq vpcomuw vpcomw vphaddbd vphaddbq vphaddbw vphadddq vphaddubd vphaddubq vphaddubw vphaddudq vphadduwd vphadduwq vphaddwd vphaddwq vphsubbw vphsubdq vphsubwd vpmacsdd vpmacsdqh vpmacsdql vpmacssdd vpmacssdqh vpmacssdql vpmacsswd vpmacssww vpmacswd vpmacsww vpmadcsswd vpmadcswd vpperm vprotb vprotd vprotq vprotw vpshab vpshad vpshaq vpshaw vpshlb vpshld vpshlq vpshlw vbroadcasti128 vpblendd vpbroadcastb vpbroadcastw vpbroadcastd vpbroadcastq vpermd vpermpd vpermps vpermq vperm2i128 vextracti128 vinserti128 vpmaskmovd vpmaskmovq vpsllvd vpsllvq vpsravd vpsrlvd vpsrlvq vgatherdpd vgatherqpd vgatherdps vgatherqps vpgatherdd vpgatherqd vpgatherdq vpgatherqq xabort xbegin xend xtest andn bextr blci blcic blsi blsic blcfill blsfill blcmsk blsmsk blsr blcs bzhi mulx pdep pext rorx sarx shlx shrx tzcnt tzmsk t1mskc valignd valignq vblendmpd vblendmps vbroadcastf32x4 vbroadcastf64x4 vbroadcasti32x4 vbroadcasti64x4 vcompresspd vcompressps vcvtpd2udq vcvtps2udq vcvtsd2usi vcvtss2usi vcvttpd2udq vcvttps2udq vcvttsd2usi vcvttss2usi vcvtudq2pd vcvtudq2ps vcvtusi2sd vcvtusi2ss vexpandpd vexpandps vextractf32x4 vextractf64x4 vextracti32x4 vextracti64x4 vfixupimmpd vfixupimmps vfixupimmsd vfixupimmss vgetexppd vgetexpps vgetexpsd vgetexpss vgetmantpd vgetmantps vgetmantsd vgetmantss vinsertf32x4 vinsertf64x4 vinserti32x4 vinserti64x4 vmovdqa32 vmovdqa64 vmovdqu32 vmovdqu64 vpabsq vpandd vpandnd vpandnq vpandq vpblendmd vpblendmq vpcmpltd vpcmpled vpcmpneqd vpcmpnltd vpcmpnled vpcmpd vpcmpltq vpcmpleq vpcmpneqq vpcmpnltq vpcmpnleq vpcmpq vpcmpequd vpcmpltud vpcmpleud vpcmpnequd vpcmpnltud vpcmpnleud vpcmpud vpcmpequq vpcmpltuq vpcmpleuq vpcmpnequq vpcmpnltuq vpcmpnleuq vpcmpuq vpcompressd vpcompressq vpermi2d vpermi2pd vpermi2ps vpermi2q vpermt2d vpermt2pd vpermt2ps vpermt2q vpexpandd vpexpandq vpmaxsq vpmaxuq vpminsq vpminuq vpmovdb vpmovdw vpmovqb vpmovqd vpmovqw vpmovsdb vpmovsdw vpmovsqb vpmovsqd vpmovsqw vpmovusdb vpmovusdw vpmovusqb vpmovusqd vpmovusqw vpord vporq vprold vprolq vprolvd vprolvq vprord vprorq vprorvd vprorvq vpscatterdd vpscatterdq vpscatterqd vpscatterqq vpsraq vpsravq vpternlogd vpternlogq vptestmd vptestmq vptestnmd vptestnmq vpxord vpxorq vrcp14pd vrcp14ps vrcp14sd vrcp14ss vrndscalepd vrndscaleps vrndscalesd vrndscaless vrsqrt14pd vrsqrt14ps vrsqrt14sd vrsqrt14ss vscalefpd vscalefps vscalefsd vscalefss vscatterdpd vscatterdps vscatterqpd vscatterqps vshuff32x4 vshuff64x2 vshufi32x4 vshufi64x2 kandnw kandw kmovw knotw kortestw korw kshiftlw kshiftrw kunpckbw kxnorw kxorw vpbroadcastmb2q vpbroadcastmw2d vpconflictd vpconflictq vplzcntd vplzcntq vexp2pd vexp2ps vrcp28pd vrcp28ps vrcp28sd vrcp28ss vrsqrt28pd vrsqrt28ps vrsqrt28sd vrsqrt28ss vgatherpf0dpd vgatherpf0dps vgatherpf0qpd vgatherpf0qps vgatherpf1dpd vgatherpf1dps vgatherpf1qpd vgatherpf1qps vscatterpf0dpd vscatterpf0dps vscatterpf0qpd vscatterpf0qps vscatterpf1dpd vscatterpf1dps vscatterpf1qpd vscatterpf1qps prefetchwt1 bndmk bndcl bndcu bndcn bndmov bndldx bndstx sha1rnds4 sha1nexte sha1msg1 sha1msg2 sha256rnds2 sha256msg1 sha256msg2 hint_nop0 hint_nop1 hint_nop2 hint_nop3 hint_nop4 hint_nop5 hint_nop6 hint_nop7 hint_nop8 hint_nop9 hint_nop10 hint_nop11 hint_nop12 hint_nop13 hint_nop14 hint_nop15 hint_nop16 hint_nop17 hint_nop18 hint_nop19 hint_nop20 hint_nop21 hint_nop22 hint_nop23 hint_nop24 hint_nop25 hint_nop26 hint_nop27 hint_nop28 hint_nop29 hint_nop30 hint_nop31 hint_nop32 hint_nop33 hint_nop34 hint_nop35 hint_nop36 hint_nop37 hint_nop38 hint_nop39 hint_nop40 hint_nop41 hint_nop42 hint_nop43 hint_nop44 hint_nop45 hint_nop46 hint_nop47 hint_nop48 hint_nop49 hint_nop50 hint_nop51 hint_nop52 hint_nop53 hint_nop54 hint_nop55 hint_nop56 hint_nop57 hint_nop58 hint_nop59 hint_nop60 hint_nop61 hint_nop62 hint_nop63',\n      built_in:\n        // Instruction pointer\n        'ip eip rip '\n        // 8-bit registers\n        + 'al ah bl bh cl ch dl dh sil dil bpl spl r8b r9b r10b r11b r12b r13b r14b r15b '\n        // 16-bit registers\n        + 'ax bx cx dx si di bp sp r8w r9w r10w r11w r12w r13w r14w r15w '\n        // 32-bit registers\n        + 'eax ebx ecx edx esi edi ebp esp eip r8d r9d r10d r11d r12d r13d r14d r15d '\n        // 64-bit registers\n        + 'rax rbx rcx rdx rsi rdi rbp rsp r8 r9 r10 r11 r12 r13 r14 r15 '\n        // Segment registers\n        + 'cs ds es fs gs ss '\n        // Floating point stack registers\n        + 'st st0 st1 st2 st3 st4 st5 st6 st7 '\n        // MMX Registers\n        + 'mm0 mm1 mm2 mm3 mm4 mm5 mm6 mm7 '\n        // SSE registers\n        + 'xmm0  xmm1  xmm2  xmm3  xmm4  xmm5  xmm6  xmm7  xmm8  xmm9 xmm10  xmm11 xmm12 xmm13 xmm14 xmm15 '\n        + 'xmm16 xmm17 xmm18 xmm19 xmm20 xmm21 xmm22 xmm23 xmm24 xmm25 xmm26 xmm27 xmm28 xmm29 xmm30 xmm31 '\n        // AVX registers\n        + 'ymm0  ymm1  ymm2  ymm3  ymm4  ymm5  ymm6  ymm7  ymm8  ymm9 ymm10  ymm11 ymm12 ymm13 ymm14 ymm15 '\n        + 'ymm16 ymm17 ymm18 ymm19 ymm20 ymm21 ymm22 ymm23 ymm24 ymm25 ymm26 ymm27 ymm28 ymm29 ymm30 ymm31 '\n        // AVX-512F registers\n        + 'zmm0  zmm1  zmm2  zmm3  zmm4  zmm5  zmm6  zmm7  zmm8  zmm9 zmm10  zmm11 zmm12 zmm13 zmm14 zmm15 '\n        + 'zmm16 zmm17 zmm18 zmm19 zmm20 zmm21 zmm22 zmm23 zmm24 zmm25 zmm26 zmm27 zmm28 zmm29 zmm30 zmm31 '\n        // AVX-512F mask registers\n        + 'k0 k1 k2 k3 k4 k5 k6 k7 '\n        // Bound (MPX) register\n        + 'bnd0 bnd1 bnd2 bnd3 '\n        // Special register\n        + 'cr0 cr1 cr2 cr3 cr4 cr8 dr0 dr1 dr2 dr3 dr8 tr3 tr4 tr5 tr6 tr7 '\n        // NASM altreg package\n        + 'r0 r1 r2 r3 r4 r5 r6 r7 r0b r1b r2b r3b r4b r5b r6b r7b '\n        + 'r0w r1w r2w r3w r4w r5w r6w r7w r0d r1d r2d r3d r4d r5d r6d r7d '\n        + 'r0h r1h r2h r3h '\n        + 'r0l r1l r2l r3l r4l r5l r6l r7l r8l r9l r10l r11l r12l r13l r14l r15l '\n\n        + 'db dw dd dq dt ddq do dy dz '\n        + 'resb resw resd resq rest resdq reso resy resz '\n        + 'incbin equ times '\n        + 'byte word dword qword nosplit rel abs seg wrt strict near far a32 ptr',\n\n      meta:\n        '%define %xdefine %+ %undef %defstr %deftok %assign %strcat %strlen %substr %rotate %elif %else %endif '\n        + '%if %ifmacro %ifctx %ifidn %ifidni %ifid %ifnum %ifstr %iftoken %ifempty %ifenv %error %warning %fatal %rep '\n        + '%endrep %include %push %pop %repl %pathsearch %depend %use %arg %stacksize %local %line %comment %endcomment '\n        + '.nolist '\n        + '__FILE__ __LINE__ __SECT__  __BITS__ __OUTPUT_FORMAT__ __DATE__ __TIME__ __DATE_NUM__ __TIME_NUM__ '\n        + '__UTC_DATE__ __UTC_TIME__ __UTC_DATE_NUM__ __UTC_TIME_NUM__  __PASS__ struc endstruc istruc at iend '\n        + 'align alignb sectalign daz nodaz up down zero default option assume public '\n\n        + 'bits use16 use32 use64 default section segment absolute extern global common cpu float '\n        + '__utf16__ __utf16le__ __utf16be__ __utf32__ __utf32le__ __utf32be__ '\n        + '__float8__ __float16__ __float32__ __float64__ __float80m__ __float80e__ __float128l__ __float128h__ '\n        + '__Infinity__ __QNaN__ __SNaN__ Inf NaN QNaN SNaN float8 float16 float32 float64 float80m float80e '\n        + 'float128l float128h __FLOAT_DAZ__ __FLOAT_ROUND__ __FLOAT__'\n    },\n    contains: [\n      hljs.COMMENT(\n        ';',\n        '$',\n        { relevance: 0 }\n      ),\n      {\n        className: 'number',\n        variants: [\n          // Float number and x87 BCD\n          {\n            begin: '\\\\b(?:([0-9][0-9_]*)?\\\\.[0-9_]*(?:[eE][+-]?[0-9_]+)?|'\n                   + '(0[Xx])?[0-9][0-9_]*(\\\\.[0-9_]*)?(?:[pP](?:[+-]?[0-9_]+)?)?)\\\\b',\n            relevance: 0\n          },\n\n          // Hex number in $\n          {\n            begin: '\\\\$[0-9][0-9A-Fa-f]*',\n            relevance: 0\n          },\n\n          // Number in H,D,T,Q,O,B,Y suffix\n          { begin: '\\\\b(?:[0-9A-Fa-f][0-9A-Fa-f_]*[Hh]|[0-9][0-9_]*[DdTt]?|[0-7][0-7_]*[QqOo]|[0-1][0-1_]*[BbYy])\\\\b' },\n\n          // Number in X,D,T,Q,O,B,Y prefix\n          { begin: '\\\\b(?:0[Xx][0-9A-Fa-f_]+|0[DdTt][0-9_]+|0[QqOo][0-7_]+|0[BbYy][0-1_]+)\\\\b' }\n        ]\n      },\n      // Double quote string\n      hljs.QUOTE_STRING_MODE,\n      {\n        className: 'string',\n        variants: [\n          // Single-quoted string\n          {\n            begin: '\\'',\n            end: '[^\\\\\\\\]\\''\n          },\n          // Backquoted string\n          {\n            begin: '`',\n            end: '[^\\\\\\\\]`'\n          }\n        ],\n        relevance: 0\n      },\n      {\n        className: 'symbol',\n        variants: [\n          // Global label and local label\n          { begin: '^\\\\s*[A-Za-z._?][A-Za-z0-9_$#@~.?]*(:|\\\\s+label)' },\n          // Macro-local label\n          { begin: '^\\\\s*%%[A-Za-z0-9_$#@~.?]*:' }\n        ],\n        relevance: 0\n      },\n      // Macro parameter\n      {\n        className: 'subst',\n        begin: '%[0-9]+',\n        relevance: 0\n      },\n      // Macro parameter\n      {\n        className: 'subst',\n        begin: '%!\\S+',\n        relevance: 0\n      },\n      {\n        className: 'meta',\n        begin: /^\\s*\\.[\\w_-]+/\n      }\n    ]\n  };\n}\n\nmodule.exports = x86asm;\n","/*\nLanguage: XL\nAuthor: Christophe de Dinechin <christophe@taodyne.com>\nDescription: An extensible programming language, based on parse tree rewriting\nWebsite: http://xlr.sf.net\n*/\n\nfunction xl(hljs) {\n  const KWS = [\n    \"if\",\n    \"then\",\n    \"else\",\n    \"do\",\n    \"while\",\n    \"until\",\n    \"for\",\n    \"loop\",\n    \"import\",\n    \"with\",\n    \"is\",\n    \"as\",\n    \"where\",\n    \"when\",\n    \"by\",\n    \"data\",\n    \"constant\",\n    \"integer\",\n    \"real\",\n    \"text\",\n    \"name\",\n    \"boolean\",\n    \"symbol\",\n    \"infix\",\n    \"prefix\",\n    \"postfix\",\n    \"block\",\n    \"tree\"\n  ];\n  const BUILT_INS = [\n    \"in\",\n    \"mod\",\n    \"rem\",\n    \"and\",\n    \"or\",\n    \"xor\",\n    \"not\",\n    \"abs\",\n    \"sign\",\n    \"floor\",\n    \"ceil\",\n    \"sqrt\",\n    \"sin\",\n    \"cos\",\n    \"tan\",\n    \"asin\",\n    \"acos\",\n    \"atan\",\n    \"exp\",\n    \"expm1\",\n    \"log\",\n    \"log2\",\n    \"log10\",\n    \"log1p\",\n    \"pi\",\n    \"at\",\n    \"text_length\",\n    \"text_range\",\n    \"text_find\",\n    \"text_replace\",\n    \"contains\",\n    \"page\",\n    \"slide\",\n    \"basic_slide\",\n    \"title_slide\",\n    \"title\",\n    \"subtitle\",\n    \"fade_in\",\n    \"fade_out\",\n    \"fade_at\",\n    \"clear_color\",\n    \"color\",\n    \"line_color\",\n    \"line_width\",\n    \"texture_wrap\",\n    \"texture_transform\",\n    \"texture\",\n    \"scale_?x\",\n    \"scale_?y\",\n    \"scale_?z?\",\n    \"translate_?x\",\n    \"translate_?y\",\n    \"translate_?z?\",\n    \"rotate_?x\",\n    \"rotate_?y\",\n    \"rotate_?z?\",\n    \"rectangle\",\n    \"circle\",\n    \"ellipse\",\n    \"sphere\",\n    \"path\",\n    \"line_to\",\n    \"move_to\",\n    \"quad_to\",\n    \"curve_to\",\n    \"theme\",\n    \"background\",\n    \"contents\",\n    \"locally\",\n    \"time\",\n    \"mouse_?x\",\n    \"mouse_?y\",\n    \"mouse_buttons\"\n  ];\n  const BUILTIN_MODULES = [\n    \"ObjectLoader\",\n    \"Animate\",\n    \"MovieCredits\",\n    \"Slides\",\n    \"Filters\",\n    \"Shading\",\n    \"Materials\",\n    \"LensFlare\",\n    \"Mapping\",\n    \"VLCAudioVideo\",\n    \"StereoDecoder\",\n    \"PointCloud\",\n    \"NetworkAccess\",\n    \"RemoteControl\",\n    \"RegExp\",\n    \"ChromaKey\",\n    \"Snowfall\",\n    \"NodeJS\",\n    \"Speech\",\n    \"Charts\"\n  ];\n  const LITERALS = [\n    \"true\",\n    \"false\",\n    \"nil\"\n  ];\n  const KEYWORDS = {\n    $pattern: /[a-zA-Z][a-zA-Z0-9_?]*/,\n    keyword: KWS,\n    literal: LITERALS,\n    built_in: BUILT_INS.concat(BUILTIN_MODULES)\n  };\n\n  const DOUBLE_QUOTE_TEXT = {\n    className: 'string',\n    begin: '\"',\n    end: '\"',\n    illegal: '\\\\n'\n  };\n  const SINGLE_QUOTE_TEXT = {\n    className: 'string',\n    begin: '\\'',\n    end: '\\'',\n    illegal: '\\\\n'\n  };\n  const LONG_TEXT = {\n    className: 'string',\n    begin: '<<',\n    end: '>>'\n  };\n  const BASED_NUMBER = {\n    className: 'number',\n    begin: '[0-9]+#[0-9A-Z_]+(\\\\.[0-9-A-Z_]+)?#?([Ee][+-]?[0-9]+)?'\n  };\n  const IMPORT = {\n    beginKeywords: 'import',\n    end: '$',\n    keywords: KEYWORDS,\n    contains: [ DOUBLE_QUOTE_TEXT ]\n  };\n  const FUNCTION_DEFINITION = {\n    className: 'function',\n    begin: /[a-z][^\\n]*->/,\n    returnBegin: true,\n    end: /->/,\n    contains: [\n      hljs.inherit(hljs.TITLE_MODE, { starts: {\n        endsWithParent: true,\n        keywords: KEYWORDS\n      } })\n    ]\n  };\n  return {\n    name: 'XL',\n    aliases: [ 'tao' ],\n    keywords: KEYWORDS,\n    contains: [\n      hljs.C_LINE_COMMENT_MODE,\n      hljs.C_BLOCK_COMMENT_MODE,\n      DOUBLE_QUOTE_TEXT,\n      SINGLE_QUOTE_TEXT,\n      LONG_TEXT,\n      FUNCTION_DEFINITION,\n      IMPORT,\n      BASED_NUMBER,\n      hljs.NUMBER_MODE\n    ]\n  };\n}\n\nmodule.exports = xl;\n","/*\nLanguage: XQuery\nAuthor: Dirk Kirsten <dk@basex.org>\nContributor: Duncan Paterson\nDescription: Supports XQuery 3.1 including XQuery Update 3, so also XPath (as it is a superset)\nRefactored to process xml constructor syntax and function-bodies. Added missing data-types, xpath operands, inbuilt functions, and query prologs\nWebsite: https://www.w3.org/XML/Query/\nCategory: functional\nAudit: 2020\n*/\n\n/** @type LanguageFn */\nfunction xquery(_hljs) {\n  // see https://www.w3.org/TR/xquery/#id-terminal-delimitation\n  const KEYWORDS = [\n    \"module\",\n    \"schema\",\n    \"namespace\",\n    \"boundary-space\",\n    \"preserve\",\n    \"no-preserve\",\n    \"strip\",\n    \"default\",\n    \"collation\",\n    \"base-uri\",\n    \"ordering\",\n    \"context\",\n    \"decimal-format\",\n    \"decimal-separator\",\n    \"copy-namespaces\",\n    \"empty-sequence\",\n    \"except\",\n    \"exponent-separator\",\n    \"external\",\n    \"grouping-separator\",\n    \"inherit\",\n    \"no-inherit\",\n    \"lax\",\n    \"minus-sign\",\n    \"per-mille\",\n    \"percent\",\n    \"schema-attribute\",\n    \"schema-element\",\n    \"strict\",\n    \"unordered\",\n    \"zero-digit\",\n    \"declare\",\n    \"import\",\n    \"option\",\n    \"function\",\n    \"validate\",\n    \"variable\",\n    \"for\",\n    \"at\",\n    \"in\",\n    \"let\",\n    \"where\",\n    \"order\",\n    \"group\",\n    \"by\",\n    \"return\",\n    \"if\",\n    \"then\",\n    \"else\",\n    \"tumbling\",\n    \"sliding\",\n    \"window\",\n    \"start\",\n    \"when\",\n    \"only\",\n    \"end\",\n    \"previous\",\n    \"next\",\n    \"stable\",\n    \"ascending\",\n    \"descending\",\n    \"allowing\",\n    \"empty\",\n    \"greatest\",\n    \"least\",\n    \"some\",\n    \"every\",\n    \"satisfies\",\n    \"switch\",\n    \"case\",\n    \"typeswitch\",\n    \"try\",\n    \"catch\",\n    \"and\",\n    \"or\",\n    \"to\",\n    \"union\",\n    \"intersect\",\n    \"instance\",\n    \"of\",\n    \"treat\",\n    \"as\",\n    \"castable\",\n    \"cast\",\n    \"map\",\n    \"array\",\n    \"delete\",\n    \"insert\",\n    \"into\",\n    \"replace\",\n    \"value\",\n    \"rename\",\n    \"copy\",\n    \"modify\",\n    \"update\"\n  ];\n\n  // Node Types (sorted by inheritance)\n  // atomic types (sorted by inheritance)\n  const TYPES = [\n    \"item\",\n    \"document-node\",\n    \"node\",\n    \"attribute\",\n    \"document\",\n    \"element\",\n    \"comment\",\n    \"namespace\",\n    \"namespace-node\",\n    \"processing-instruction\",\n    \"text\",\n    \"construction\",\n    \"xs:anyAtomicType\",\n    \"xs:untypedAtomic\",\n    \"xs:duration\",\n    \"xs:time\",\n    \"xs:decimal\",\n    \"xs:float\",\n    \"xs:double\",\n    \"xs:gYearMonth\",\n    \"xs:gYear\",\n    \"xs:gMonthDay\",\n    \"xs:gMonth\",\n    \"xs:gDay\",\n    \"xs:boolean\",\n    \"xs:base64Binary\",\n    \"xs:hexBinary\",\n    \"xs:anyURI\",\n    \"xs:QName\",\n    \"xs:NOTATION\",\n    \"xs:dateTime\",\n    \"xs:dateTimeStamp\",\n    \"xs:date\",\n    \"xs:string\",\n    \"xs:normalizedString\",\n    \"xs:token\",\n    \"xs:language\",\n    \"xs:NMTOKEN\",\n    \"xs:Name\",\n    \"xs:NCName\",\n    \"xs:ID\",\n    \"xs:IDREF\",\n    \"xs:ENTITY\",\n    \"xs:integer\",\n    \"xs:nonPositiveInteger\",\n    \"xs:negativeInteger\",\n    \"xs:long\",\n    \"xs:int\",\n    \"xs:short\",\n    \"xs:byte\",\n    \"xs:nonNegativeInteger\",\n    \"xs:unisignedLong\",\n    \"xs:unsignedInt\",\n    \"xs:unsignedShort\",\n    \"xs:unsignedByte\",\n    \"xs:positiveInteger\",\n    \"xs:yearMonthDuration\",\n    \"xs:dayTimeDuration\"\n  ];\n\n  const LITERALS = [\n    \"eq\",\n    \"ne\",\n    \"lt\",\n    \"le\",\n    \"gt\",\n    \"ge\",\n    \"is\",\n    \"self::\",\n    \"child::\",\n    \"descendant::\",\n    \"descendant-or-self::\",\n    \"attribute::\",\n    \"following::\",\n    \"following-sibling::\",\n    \"parent::\",\n    \"ancestor::\",\n    \"ancestor-or-self::\",\n    \"preceding::\",\n    \"preceding-sibling::\",\n    \"NaN\"\n  ];\n\n  // functions (TODO: find regex for op: without breaking build)\n  const BUILT_IN = {\n    className: 'built_in',\n    variants: [\n      {\n        begin: /\\barray:/,\n        end: /(?:append|filter|flatten|fold-(?:left|right)|for-each(?:-pair)?|get|head|insert-before|join|put|remove|reverse|size|sort|subarray|tail)\\b/\n      },\n      {\n        begin: /\\bmap:/,\n        end: /(?:contains|entry|find|for-each|get|keys|merge|put|remove|size)\\b/\n      },\n      {\n        begin: /\\bmath:/,\n        end: /(?:a(?:cos|sin|tan[2]?)|cos|exp(?:10)?|log(?:10)?|pi|pow|sin|sqrt|tan)\\b/\n      },\n      {\n        begin: /\\bop:/,\n        end: /\\(/,\n        excludeEnd: true\n      },\n      {\n        begin: /\\bfn:/,\n        end: /\\(/,\n        excludeEnd: true\n      },\n      // do not highlight inbuilt strings as variable or xml element names\n      { begin: /[^</$:'\"-]\\b(?:abs|accumulator-(?:after|before)|adjust-(?:date(?:Time)?|time)-to-timezone|analyze-string|apply|available-(?:environment-variables|system-properties)|avg|base-uri|boolean|ceiling|codepoints?-(?:equal|to-string)|collation-key|collection|compare|concat|contains(?:-token)?|copy-of|count|current(?:-)?(?:date(?:Time)?|time|group(?:ing-key)?|output-uri|merge-(?:group|key))?data|dateTime|days?-from-(?:date(?:Time)?|duration)|deep-equal|default-(?:collation|language)|distinct-values|document(?:-uri)?|doc(?:-available)?|element-(?:available|with-id)|empty|encode-for-uri|ends-with|environment-variable|error|escape-html-uri|exactly-one|exists|false|filter|floor|fold-(?:left|right)|for-each(?:-pair)?|format-(?:date(?:Time)?|time|integer|number)|function-(?:arity|available|lookup|name)|generate-id|has-children|head|hours-from-(?:dateTime|duration|time)|id(?:ref)?|implicit-timezone|in-scope-prefixes|index-of|innermost|insert-before|iri-to-uri|json-(?:doc|to-xml)|key|lang|last|load-xquery-module|local-name(?:-from-QName)?|(?:lower|upper)-case|matches|max|minutes-from-(?:dateTime|duration|time)|min|months?-from-(?:date(?:Time)?|duration)|name(?:space-uri-?(?:for-prefix|from-QName)?)?|nilled|node-name|normalize-(?:space|unicode)|not|number|one-or-more|outermost|parse-(?:ietf-date|json)|path|position|(?:prefix-from-)?QName|random-number-generator|regex-group|remove|replace|resolve-(?:QName|uri)|reverse|root|round(?:-half-to-even)?|seconds-from-(?:dateTime|duration|time)|snapshot|sort|starts-with|static-base-uri|stream-available|string-?(?:join|length|to-codepoints)?|subsequence|substring-?(?:after|before)?|sum|system-property|tail|timezone-from-(?:date(?:Time)?|time)|tokenize|trace|trans(?:form|late)|true|type-available|unordered|unparsed-(?:entity|text)?-?(?:public-id|uri|available|lines)?|uri-collection|xml-to-json|years?-from-(?:date(?:Time)?|duration)|zero-or-one)\\b/ },\n      {\n        begin: /\\blocal:/,\n        end: /\\(/,\n        excludeEnd: true\n      },\n      {\n        begin: /\\bzip:/,\n        end: /(?:zip-file|(?:xml|html|text|binary)-entry| (?:update-)?entries)\\b/\n      },\n      {\n        begin: /\\b(?:util|db|functx|app|xdmp|xmldb):/,\n        end: /\\(/,\n        excludeEnd: true\n      }\n    ]\n  };\n\n  const TITLE = {\n    className: 'title',\n    begin: /\\bxquery version \"[13]\\.[01]\"\\s?(?:encoding \".+\")?/,\n    end: /;/\n  };\n\n  const VAR = {\n    className: 'variable',\n    begin: /[$][\\w\\-:]+/\n  };\n\n  const NUMBER = {\n    className: 'number',\n    begin: /(\\b0[0-7_]+)|(\\b0x[0-9a-fA-F_]+)|(\\b[1-9][0-9_]*(\\.[0-9_]+)?)|[0_]\\b/,\n    relevance: 0\n  };\n\n  const STRING = {\n    className: 'string',\n    variants: [\n      {\n        begin: /\"/,\n        end: /\"/,\n        contains: [\n          {\n            begin: /\"\"/,\n            relevance: 0\n          }\n        ]\n      },\n      {\n        begin: /'/,\n        end: /'/,\n        contains: [\n          {\n            begin: /''/,\n            relevance: 0\n          }\n        ]\n      }\n    ]\n  };\n\n  const ANNOTATION = {\n    className: 'meta',\n    begin: /%[\\w\\-:]+/\n  };\n\n  const COMMENT = {\n    className: 'comment',\n    begin: /\\(:/,\n    end: /:\\)/,\n    relevance: 10,\n    contains: [\n      {\n        className: 'doctag',\n        begin: /@\\w+/\n      }\n    ]\n  };\n\n  // see https://www.w3.org/TR/xquery/#id-computedConstructors\n  // mocha: computed_inbuilt\n  // see https://www.regexpal.com/?fam=99749\n  const COMPUTED = {\n    beginKeywords: 'element attribute comment document processing-instruction',\n    end: /\\{/,\n    excludeEnd: true\n  };\n\n  // mocha: direct_method\n  const DIRECT = {\n    begin: /<([\\w._:-]+)(\\s+\\S*=('|\").*('|\"))?>/,\n    end: /(\\/[\\w._:-]+>)/,\n    subLanguage: 'xml',\n    contains: [\n      {\n        begin: /\\{/,\n        end: /\\}/,\n        subLanguage: 'xquery'\n      },\n      'self'\n    ]\n  };\n\n  const CONTAINS = [\n    VAR,\n    BUILT_IN,\n    STRING,\n    NUMBER,\n    COMMENT,\n    ANNOTATION,\n    TITLE,\n    COMPUTED,\n    DIRECT\n  ];\n\n  return {\n    name: 'XQuery',\n    aliases: [\n      'xpath',\n      'xq',\n      'xqm'\n    ],\n    case_insensitive: false,\n    illegal: /(proc)|(abstract)|(extends)|(until)|(#)/,\n    keywords: {\n      $pattern: /[a-zA-Z$][a-zA-Z0-9_:-]*/,\n      keyword: KEYWORDS,\n      type: TYPES,\n      literal: LITERALS\n    },\n    contains: CONTAINS\n  };\n}\n\nmodule.exports = xquery;\n","/*\n Language: Zephir\n Description: Zephir, an open source, high-level language designed to ease the creation and maintainability of extensions for PHP with a focus on type and memory safety.\n Author: Oleg Efimov <efimovov@gmail.com>\n Website: https://zephir-lang.com/en\n Category: web\n Audit: 2020\n */\n\n/** @type LanguageFn */\nfunction zephir(hljs) {\n  const STRING = {\n    className: 'string',\n    contains: [ hljs.BACKSLASH_ESCAPE ],\n    variants: [\n      hljs.inherit(hljs.APOS_STRING_MODE, { illegal: null }),\n      hljs.inherit(hljs.QUOTE_STRING_MODE, { illegal: null })\n    ]\n  };\n  const TITLE_MODE = hljs.UNDERSCORE_TITLE_MODE;\n  const NUMBER = { variants: [\n    hljs.BINARY_NUMBER_MODE,\n    hljs.C_NUMBER_MODE\n  ] };\n  const KEYWORDS =\n    // classes and objects\n    'namespace class interface use extends '\n    + 'function return '\n    + 'abstract final public protected private static deprecated '\n    // error handling\n    + 'throw try catch Exception '\n    // keyword-ish things their website does NOT seem to highlight (in their own snippets)\n    // 'typeof fetch in ' +\n    // operators/helpers\n    + 'echo empty isset instanceof unset '\n    // assignment/variables\n    + 'let var new const self '\n    // control\n    + 'require '\n    + 'if else elseif switch case default '\n    + 'do while loop for continue break '\n    + 'likely unlikely '\n    // magic constants\n    // https://github.com/phalcon/zephir/blob/master/Library/Expression/Constants.php\n    + '__LINE__ __FILE__ __DIR__ __FUNCTION__ __CLASS__ __TRAIT__ __METHOD__ __NAMESPACE__ '\n    // types - https://docs.zephir-lang.com/0.12/en/types\n    + 'array boolean float double integer object resource string '\n    + 'char long unsigned bool int uint ulong uchar '\n    // built-ins\n    + 'true false null undefined';\n\n  return {\n    name: 'Zephir',\n    aliases: [ 'zep' ],\n    keywords: KEYWORDS,\n    contains: [\n      hljs.C_LINE_COMMENT_MODE,\n      hljs.COMMENT(\n        /\\/\\*/,\n        /\\*\\//,\n        { contains: [\n          {\n            className: 'doctag',\n            begin: /@[A-Za-z]+/\n          }\n        ] }\n      ),\n      {\n        className: 'string',\n        begin: /<<<['\"]?\\w+['\"]?$/,\n        end: /^\\w+;/,\n        contains: [ hljs.BACKSLASH_ESCAPE ]\n      },\n      {\n        // swallow composed identifiers to avoid parsing them as keywords\n        begin: /(::|->)+[a-zA-Z_\\x7f-\\xff][a-zA-Z0-9_\\x7f-\\xff]*/ },\n      {\n        className: 'function',\n        beginKeywords: 'function fn',\n        end: /[;{]/,\n        excludeEnd: true,\n        illegal: /\\$|\\[|%/,\n        contains: [\n          TITLE_MODE,\n          {\n            className: 'params',\n            begin: /\\(/,\n            end: /\\)/,\n            keywords: KEYWORDS,\n            contains: [\n              'self',\n              hljs.C_BLOCK_COMMENT_MODE,\n              STRING,\n              NUMBER\n            ]\n          }\n        ]\n      },\n      {\n        className: 'class',\n        beginKeywords: 'class interface',\n        end: /\\{/,\n        excludeEnd: true,\n        illegal: /[:($\"]/,\n        contains: [\n          { beginKeywords: 'extends implements' },\n          TITLE_MODE\n        ]\n      },\n      {\n        beginKeywords: 'namespace',\n        end: /;/,\n        illegal: /[.']/,\n        contains: [ TITLE_MODE ]\n      },\n      {\n        beginKeywords: 'use',\n        end: /;/,\n        contains: [ TITLE_MODE ]\n      },\n      { begin: /=>/ // No markup, just a relevance booster\n      },\n      STRING,\n      NUMBER\n    ]\n  };\n}\n\nmodule.exports = zephir;\n","var __defProp = Object.defineProperty;\nvar __defProps = Object.defineProperties;\nvar __getOwnPropDesc = Object.getOwnPropertyDescriptor;\nvar __getOwnPropDescs = Object.getOwnPropertyDescriptors;\nvar __getOwnPropNames = Object.getOwnPropertyNames;\nvar __getOwnPropSymbols = Object.getOwnPropertySymbols;\nvar __hasOwnProp = Object.prototype.hasOwnProperty;\nvar __propIsEnum = Object.prototype.propertyIsEnumerable;\nvar __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;\nvar __spreadValues = (a, b) => {\n  for (var prop in b || (b = {}))\n    if (__hasOwnProp.call(b, prop))\n      __defNormalProp(a, prop, b[prop]);\n  if (__getOwnPropSymbols)\n    for (var prop of __getOwnPropSymbols(b)) {\n      if (__propIsEnum.call(b, prop))\n        __defNormalProp(a, prop, b[prop]);\n    }\n  return a;\n};\nvar __spreadProps = (a, b) => __defProps(a, __getOwnPropDescs(b));\nvar __export = (target, all) => {\n  for (var name in all)\n    __defProp(target, name, { get: all[name], enumerable: true });\n};\nvar __copyProps = (to, from, except, desc) => {\n  if (from && typeof from === \"object\" || typeof from === \"function\") {\n    for (let key of __getOwnPropNames(from))\n      if (!__hasOwnProp.call(to, key) && key !== except)\n        __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });\n  }\n  return to;\n};\nvar __toCommonJS = (mod) => __copyProps(__defProp({}, \"__esModule\", { value: true }), mod);\nvar core_exports = {};\n__export(core_exports, {\n  default: () => core\n});\nmodule.exports = __toCommonJS(core_exports);\nfunction registerLangs(hljs, register) {\n  for (const [lang, fn] of Object.entries(register)) {\n    hljs.registerLanguage(lang, fn);\n  }\n}\nfunction highlight(md, hljs, ignoreIllegals, code, lang) {\n  try {\n    return hljs.highlight(code, { language: lang !== \"\" ? lang : \"plaintext\", ignoreIllegals }).value;\n  } catch (e) {\n    return md.utils.escapeHtml(code);\n  }\n}\nfunction highlightAuto(md, hljs, ignoreIllegals, code, lang) {\n  if (lang !== \"\") {\n    return highlight(md, hljs, ignoreIllegals, code, lang);\n  }\n  try {\n    return hljs.highlightAuto(code).value;\n  } catch (e) {\n    return md.utils.escapeHtml(code);\n  }\n}\nfunction wrapCodeRenderer(renderer) {\n  return function wrappedRenderer(...args) {\n    return renderer(...args).replace(/<code class=\"/g, '<code class=\"hljs ').replace(/<code>/g, '<code class=\"hljs\">');\n  };\n}\nfunction inlineCodeLanguageRule(state) {\n  var _a, _b;\n  for (const parentToken of state.tokens) {\n    if (parentToken.type !== \"inline\") {\n      continue;\n    }\n    if (parentToken.children == null) {\n      continue;\n    }\n    for (const [i, token] of parentToken.children.entries()) {\n      if (token.type !== \"code_inline\") {\n        continue;\n      }\n      const next = parentToken.children[i + 1];\n      if (next == null) {\n        continue;\n      }\n      const match = /^{:?\\.([^}]+)}/.exec(next.content);\n      if (match == null) {\n        continue;\n      }\n      const lang = match[1];\n      next.content = next.content.slice(match[0].length);\n      let className = (_a = token.attrGet(\"class\")) != null ? _a : \"\";\n      className += `${(_b = state.md.options.langPrefix) != null ? _b : \"language-\"}${lang}`;\n      token.attrSet(\"class\", className);\n      token.meta = __spreadProps(__spreadValues({}, token.meta), { highlightLanguage: lang });\n    }\n  }\n}\nfunction inlineCodeRenderer(tokens, idx, options, env, slf) {\n  var _a, _b;\n  const token = tokens[idx];\n  if (options.highlight == null) {\n    throw new Error(\"`options.highlight` was null, this is not supposed to happen\");\n  }\n  const highlighted = options.highlight(token.content, (_b = (_a = token.meta) == null ? void 0 : _a.highlightLanguage) != null ? _b : \"\", \"\");\n  return `<code${slf.renderAttrs(token)}>${highlighted}</code>`;\n}\nfunction core(md, opts) {\n  const optsWithDefaults = __spreadValues(__spreadValues({}, core.defaults), opts);\n  if (optsWithDefaults.hljs == null) {\n    throw new Error(\"Please pass a highlight.js instance for the required `hljs` option.\");\n  }\n  if (optsWithDefaults.register != null) {\n    registerLangs(optsWithDefaults.hljs, optsWithDefaults.register);\n  }\n  md.options.highlight = (optsWithDefaults.auto ? highlightAuto : highlight).bind(null, md, optsWithDefaults.hljs, optsWithDefaults.ignoreIllegals);\n  if (md.renderer.rules.fence != null) {\n    md.renderer.rules.fence = wrapCodeRenderer(md.renderer.rules.fence);\n  }\n  if (optsWithDefaults.code && md.renderer.rules.code_block != null) {\n    md.renderer.rules.code_block = wrapCodeRenderer(md.renderer.rules.code_block);\n  }\n  if (optsWithDefaults.inline) {\n    md.core.ruler.before(\"linkify\", \"inline_code_language\", inlineCodeLanguageRule);\n    md.renderer.rules.code_inline = wrapCodeRenderer(inlineCodeRenderer);\n  }\n}\ncore.defaults = {\n  auto: false,\n  code: false,\n  inline: false,\n  ignoreIllegals: false\n};\n","var __create = Object.create;\nvar __defProp = Object.defineProperty;\nvar __getOwnPropDesc = Object.getOwnPropertyDescriptor;\nvar __getOwnPropNames = Object.getOwnPropertyNames;\nvar __getOwnPropSymbols = Object.getOwnPropertySymbols;\nvar __getProtoOf = Object.getPrototypeOf;\nvar __hasOwnProp = Object.prototype.hasOwnProperty;\nvar __propIsEnum = Object.prototype.propertyIsEnumerable;\nvar __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;\nvar __spreadValues = (a, b) => {\n  for (var prop in b || (b = {}))\n    if (__hasOwnProp.call(b, prop))\n      __defNormalProp(a, prop, b[prop]);\n  if (__getOwnPropSymbols)\n    for (var prop of __getOwnPropSymbols(b)) {\n      if (__propIsEnum.call(b, prop))\n        __defNormalProp(a, prop, b[prop]);\n    }\n  return a;\n};\nvar __export = (target, all) => {\n  for (var name in all)\n    __defProp(target, name, { get: all[name], enumerable: true });\n};\nvar __copyProps = (to, from, except, desc) => {\n  if (from && typeof from === \"object\" || typeof from === \"function\") {\n    for (let key of __getOwnPropNames(from))\n      if (!__hasOwnProp.call(to, key) && key !== except)\n        __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });\n  }\n  return to;\n};\nvar __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(isNodeMode || !mod || !mod.__esModule ? __defProp(target, \"default\", { value: mod, enumerable: true }) : target, mod));\nvar __toCommonJS = (mod) => __copyProps(__defProp({}, \"__esModule\", { value: true }), mod);\nvar src_exports = {};\n__export(src_exports, {\n  default: () => highlightjs\n});\nmodule.exports = __toCommonJS(src_exports);\nvar import_highlight = __toESM(require(\"highlight.js\"));\nvar import_core = __toESM(require(\"./core.js\"));\nfunction highlightjs(md, opts) {\n  opts = __spreadValues(__spreadValues({}, highlightjs.defaults), opts);\n  if (opts.hljs == null) {\n    opts.hljs = import_highlight.default;\n  }\n  return (0, import_core.default)(md, opts);\n}\nhighlightjs.defaults = {\n  auto: true,\n  code: true,\n  inline: false,\n  ignoreIllegals: true\n};\n","module.exports = require('./dist').default\n","<template>\n  <div class=\"markdown-renderer\" v-html=\"renderedContent\"></div>\n</template>\n\n<script setup lang=\"ts\">\nimport { computed } from 'vue'\nimport MarkdownIt from 'markdown-it'\nimport markdownItKatex from 'markdown-it-katex'\nimport markdownItHighlight from 'markdown-it-highlightjs'\nimport 'katex/dist/katex.min.css'\nimport 'highlight.js/styles/atom-one-dark.css'\n\ninterface Props {\n  content: string\n  components?: Record<string, any>\n}\n\nconst props = defineProps<Props>()\n\n// 配置markdown-it\nconst md = new MarkdownIt({\n  html: true,\n  linkify: true,\n  typographer: true,\n  breaks: true\n})\n  .use(markdownItKatex, {\n    strict: false,\n    trust: (context: any) => ['\\\\htmlClass', '\\\\htmlId', '\\\\htmlStyle', '\\\\htmlData'].includes(context.command),\n    macros: {\n      \"\\\\eqref\": \"\\\\href{###1}{(\\\\text{#1})}\",\n      \"\\\\ref\": \"\\\\href{###1}{\\\\text{#1}}\",\n      \"\\\\label\": \"\\\\htmlId{#1}{}\"\n    }\n  })\n  .use(markdownItHighlight, {\n    auto: true,\n    code: true\n  })\n\n// 自定义渲染器\nconst renderedContent = computed(() => {\n  let content = props.content || ''\n  \n  // 处理自定义组件\n  if (props.components) {\n    Object.keys(props.components).forEach(componentName => {\n      const regex = new RegExp(`<${componentName}[^>]*>([^<]*)<\\/${componentName}>`, 'gi')\n      content = content.replace(regex, (match, children) => {\n        const component = props.components![componentName]\n        if (typeof component === 'function') {\n          return component({ children })\n        }\n        return match\n      })\n    })\n  }\n  \n  // 处理图片\n  content = content.replace(/<img([^>]*)>/gi, (_match, attrs) => {\n    return `<img${attrs} class=\"max-w-full object-contain\" style=\"max-height: 400px;\">`\n  })\n  \n  // 处理表格\n  content = content.replace(/<table([^>]*)>/gi, '<table$1 class=\"min-w-full divide-y divide-gray-200 dark:divide-gray-700\">')\n  content = content.replace(/<th([^>]*)>/gi, '<th$1 class=\"px-6 py-3 text-left text-xs font-medium text-gray-500 dark:text-gray-300 uppercase tracking-wider\">')\n  content = content.replace(/<td([^>]*)>/gi, '<td$1 class=\"px-6 py-4 whitespace-nowrap text-sm text-gray-900 dark:text-gray-100\">')\n  \n  // 处理代码块\n  content = content.replace(/<pre><code([^>]*)>/gi, '<pre class=\"bg-gray-100 dark:bg-gray-800 rounded-lg p-4 overflow-x-auto\"><code$1>')\n  \n  // 处理内联代码\n  content = content.replace(/<code([^>]*?)>([^<]+)<\\/code>/gi, '<code$1 class=\"bg-gray-100 dark:bg-gray-800 px-2 py-1 rounded text-sm\">$2</code>')\n  \n  return md.render(content)\n})\n</script>\n\n<style scoped>\n.markdown-renderer {\n  line-height: 1.6;\n  word-wrap: break-word;\n}\n\n.markdown-renderer :deep(h1) {\n  @apply text-2xl font-bold mb-4 text-gray-900 dark:text-gray-100;\n}\n\n.markdown-renderer :deep(h2) {\n  @apply text-xl font-bold mb-3 text-gray-900 dark:text-gray-100;\n}\n\n.markdown-renderer :deep(h3) {\n  @apply text-lg font-bold mb-2 text-gray-900 dark:text-gray-100;\n}\n\n.markdown-renderer :deep(p) {\n  @apply mb-4 text-gray-700 dark:text-gray-300;\n}\n\n.markdown-renderer :deep(ul) {\n  @apply list-disc list-inside mb-4 text-gray-700 dark:text-gray-300;\n}\n\n.markdown-renderer :deep(ol) {\n  @apply list-decimal list-inside mb-4 text-gray-700 dark:text-gray-300;\n}\n\n.markdown-renderer :deep(li) {\n  @apply mb-1;\n}\n\n.markdown-renderer :deep(blockquote) {\n  @apply border-l-4 border-blue-500 pl-4 py-2 mb-4 bg-gray-50 dark:bg-gray-800 text-gray-700 dark:text-gray-300;\n}\n\n.markdown-renderer :deep(a) {\n  @apply text-blue-600 dark:text-blue-400 hover:underline;\n}\n\n.markdown-renderer :deep(strong) {\n  @apply font-bold;\n}\n\n.markdown-renderer :deep(em) {\n  @apply italic;\n}\n\n.markdown-renderer :deep(hr) {\n  @apply border-gray-300 dark:border-gray-600 my-8;\n}\n\n/* 表格样式 */\n.markdown-renderer :deep(table) {\n  @apply w-full border-collapse border border-gray-300 dark:border-gray-600;\n}\n\n.markdown-renderer :deep(thead) {\n  @apply bg-gray-50 dark:bg-gray-700;\n}\n\n.markdown-renderer :deep(tbody tr:nth-child(even)) {\n  @apply bg-gray-50 dark:bg-gray-800;\n}\n\n.markdown-renderer :deep(th),\n.markdown-renderer :deep(td) {\n  @apply border border-gray-300 dark:border-gray-600 px-4 py-2 text-left;\n}\n\n/* 代码样式 */\n.markdown-renderer :deep(pre) {\n  @apply relative;\n}\n\n.markdown-renderer :deep(pre code) {\n  @apply text-sm;\n}\n\n/* KaTeX数学公式样式 */\n.markdown-renderer :deep(.katex) {\n  font-size: 1.1em;\n}\n\n.markdown-renderer :deep(.katex-display) {\n  margin: 1em 0;\n  text-align: center;\n}\n</style>\n","<template>\r\n  <div class=\"chat-feedback flex items-center space-x-2 mt-2\">\r\n    <el-button size=\"small\" @click=\"handleLike\" class=\"feedback-btn\">\r\n      <!-- 点赞图标 -->\r\n      <svg width=\"14\" height=\"14\" viewBox=\"0 0 24 24\" fill=\"currentColor\">\r\n        <path d=\"M1 21h4V9H1v12zm22-11c0-1.1-.9-2-2-2h-6.31l.95-4.57.03-.32c0-.41-.17-.79-.44-1.06L14.17 1 7.59 7.59C7.22 7.95 7 8.45 7 9v10c0 1.1.9 2 2 2h9c.83 0 1.54-.5 1.84-1.22l3.02-7.05c.09-.23.14-.47.14-.73v-2z\"/>\r\n      </svg>\r\n    </el-button>\r\n    <el-button size=\"small\" @click=\"handleDislike\" class=\"feedback-btn\">\r\n      <!-- 点踩图标 -->\r\n      <svg width=\"14\" height=\"14\" viewBox=\"0 0 24 24\" fill=\"currentColor\">\r\n        <path d=\"M15 3H6c-.83 0-1.54.5-1.84 1.22l-3.02 7.05c-.09.23-.14.47-.14.73v2c0 1.1.9 2 2 2h6.31l-.95 4.57-.03.32c0 .41.17.79.44 1.06L9.83 23l6.59-6.59c.36-.36.58-.86.58-1.41V5c0-1.1-.9-2-2-2zm4 0v12h4V3h-4z\"/>\r\n      </svg>\r\n    </el-button>\r\n    <el-button size=\"small\" @click=\"handleShare\" class=\"feedback-btn\">\r\n      <!-- 分享图标 -->\r\n      <svg width=\"14\" height=\"14\" viewBox=\"0 0 24 24\" fill=\"currentColor\">\r\n        <path d=\"M18 16.08c-.76 0-1.44.3-1.96.77L8.91 12.7c.05-.23.09-.46.09-.7s-.04-.47-.09-.7l7.05-4.11c.54.5 1.25.81 2.04.81 1.66 0 3-1.34 3-3s-1.34-3-3-3-3 1.34-3 3c0 .24.04.47.09.7L8.04 9.81C7.5 9.31 6.79 9 6 9c-1.66 0-3 1.34-3 3s1.34 3 3 3c.79 0 1.5-.31 2.04-.81l7.12 4.16c-.05.21-.08.43-.08.65 0 1.61 1.31 2.92 2.92 2.92 1.61 0 2.92-1.31 2.92-2.92s-1.31-2.92-2.92-2.92z\"/>\r\n      </svg>\r\n    </el-button>\r\n  </div>\r\n</template>\r\n\r\n<script setup lang=\"ts\">\r\n\r\ninterface Props {\r\n  content: any\r\n}\r\n\r\ndefineProps<Props>()\r\n\r\nconst handleLike = () => {\r\n  console.log('点赞')\r\n}\r\n\r\nconst handleDislike = () => {\r\n  console.log('点踩')\r\n}\r\n\r\nconst handleShare = () => {\r\n  console.log('分享')\r\n}\r\n</script>\r\n\r\n","<template>\r\n  <!-- 复制图标 -->\r\n  <svg width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"currentColor\">\r\n    <path d=\"M16 1H4c-1.1 0-2 .9-2 2v14h2V3h12V1zm3 4H8c-1.1 0-2 .9-2 2v14c0 1.1.9 2 2 2h11c1.1 0 2-.9 2-2V7c0-1.1-.9-2-2-2zm0 16H8V7h11v14z\"/>\r\n  </svg>\r\n</template>\r\n\r\n<script setup lang=\"ts\">\r\n// 无需导入\r\n</script>\r\n\r\n","<template>\r\n  <!-- 代码图标 -->\r\n  <svg width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"currentColor\">\r\n    <path d=\"M9.4 16.6L4.8 12l4.6-4.6L8 6l-6 6 6 6 1.4-1.4zm5.2 0L19.2 12l-4.6-4.6L16 6l6 6-6 6-1.4-1.4z\"/>\r\n  </svg>\r\n</template>\r\n\r\n<script setup lang=\"ts\">\r\n// 无需导入\r\n</script>\r\n\r\n","<template>\n  <div class=\"flex flex-1 gap-3 mt-6\">\n    <!-- 头像 -->\n    <div class=\"flex flex-shrink-0 items-start\">\n      <UserIcon v-if=\"!isRobot\" />\n      <RobotIcon v-else :model=\"content.model_name\" />\n    </div>\n    \n    <div :class=\"`flex ${scene === 'chat_agent' && !content.thinking ? 'flex-1' : ''} overflow-hidden`\">\n      <!-- 用户消息 -->\n      <div v-if=\"!isRobot\" class=\"flex flex-1 relative group\">\n        <div \n          class=\"flex-1 text-sm text-[#1c2533] dark:text-white\"\n          style=\"white-space: pre-wrap; word-break: break-word;\"\n        >\n          <div v-if=\"typeof content.context === 'string'\">\n            <MarkdownRenderer \n              :content=\"preprocessLaTeX(formatMarkdownVal(parsedContent.value))\"\n              :components=\"markdownComponents\"\n            />\n          </div>\n        </div>\n        \n        <!-- 复制按钮 -->\n        <div \n          v-if=\"typeof content.context === 'string' && content.context.trim()\"\n          class=\"absolute right-0 top-0 opacity-0 group-hover:opacity-100 transition-opacity duration-200\"\n        >\n          <button\n            class=\"flex items-center justify-center w-8 h-8 text-[#525964] dark:text-[rgba(255,255,255,0.6)] hover:text-[#1677ff] dark:hover:text-white transition-colors\"\n            @click=\"copyToClipboard\"\n            title=\"复制到剪贴板\"\n          >\n            <CopyIcon />\n          </button>\n        </div>\n      </div>\n      \n      <!-- AI回复 -->\n      <div v-if=\"isRobot\" class=\"flex flex-1 flex-col w-full\">\n        <div class=\"bg-white dark:bg-[rgba(255,255,255,0.16)] p-4 rounded-2xl rounded-tl-none mb-2\">\n          <!-- 对象类型内容 -->\n          <div v-if=\"typeof content.context === 'object'\">\n            {{ `[${(content.context as any).template_name}]: ` }}\n            <span class=\"text-theme-primary cursor-pointer\" @click=\"$emit('linkClick')\">\n              <CodeIcon class=\"mr-1\" />\n              {{ (content.context as any).template_introduce || 'More Details' }}\n            </span>\n          </div>\n          \n          <!-- Agent场景的字符串内容 -->\n          <div v-if=\"typeof content.context === 'string' && scene === 'chat_agent'\">\n            <MarkdownRenderer \n              :content=\"preprocessLaTeX(formatMarkdownValForAgent(parsedContent.value))\"\n              :components=\"markdownComponents\"\n            />\n          </div>\n          \n          <!-- 普通场景的字符串内容 -->\n          <div v-if=\"typeof content.context === 'string' && scene !== 'chat_agent'\">\n            <MarkdownRenderer \n              :content=\"preprocessLaTeX(formatMarkdownVal(parsedContent.value))\"\n              :components=\"{ ...markdownComponents, ...extraMarkdownComponents }\"\n            />\n          </div>\n          \n          <!-- 思考状态 -->\n          <div v-if=\"content.thinking && !content.context\" class=\"flex items-center gap-2\">\n            <span class=\"flex text-sm text-[#1c2533] dark:text-white\">思考中...</span>\n            <div class=\"flex\">\n              <div class=\"w-1 h-1 rounded-full mx-1 animate-pulse1\"></div>\n              <div class=\"w-1 h-1 rounded-full mx-1 animate-pulse2\"></div>\n              <div class=\"w-1 h-1 rounded-full mx-1 animate-pulse3\"></div>\n            </div>\n          </div>\n        </div>\n        \n        <!-- 反馈组件 -->\n        <ChatFeedback :content=\"content\" />\n      </div>\n    </div>\n  </div>\n</template>\n\n<script setup lang=\"ts\">\nimport { computed } from 'vue'\nimport { useRoute } from 'vue-router'\nimport { ElMessage } from 'element-plus'\nimport type { ChatMessage, DBGPTView } from '@/types/chat'\n\nimport UserIcon from './UserIcon.vue'\nimport RobotIcon from './RobotIcon.vue'\nimport MarkdownRenderer from './MarkdownRenderer.vue'\nimport ChatFeedback from './ChatFeedback.vue'\nimport CopyIcon from '@/components/icons/CopyIcon.vue'\nimport CodeIcon from '@/components/icons/CodeIcon.vue'\n\ninterface Props {\n  content: ChatMessage\n}\n\nconst props = defineProps<Props>()\n\ndefineEmits<{\n  linkClick: []\n}>()\n\nconst route = useRoute()\n\n// 计算属性\nconst scene = computed(() => route.query.scene as string || '')\nconst isRobot = computed(() => props.content.role === 'view')\n\n// 解析内容和插件上下文\nconst parsedContent = computed(() => {\n  if (typeof props.content.context !== 'string') {\n    return {\n      relations: [],\n      value: '',\n      cachePluginContext: []\n    }\n  }\n  \n  const [value, relation] = props.content.context.split('\\trelations:')\n  const relations = relation ? relation.split(',') : []\n  const cachePluginContext: DBGPTView[] = []\n  \n  let cacheIndex = 0\n  const result = value.replace(/<dbgpt-view[^>]*>[^<]*<\\/dbgpt-view>/gi, matchVal => {\n    try {\n      const pluginVal = matchVal.replaceAll('\\n', '\\\\n').replace(/<[^>]*>|<\\/[^>]*>/gm, '')\n      const pluginContext = JSON.parse(pluginVal) as DBGPTView\n      const replacement = `<custom-view>${cacheIndex}</custom-view>`\n      \n      cachePluginContext.push({\n        ...pluginContext,\n        result: formatMarkdownVal(pluginContext.result ?? '')\n      })\n      cacheIndex++\n      \n      return replacement\n    } catch (e) {\n      console.error('Parse plugin error:', e)\n      return matchVal\n    }\n  })\n  \n  return {\n    relations,\n    cachePluginContext,\n    value: result\n  }\n})\n\n// 插件状态映射\nconst pluginViewStatusMapper: Record<DBGPTView['status'], { bgClass: string; icon: string }> = {\n  todo: { bgClass: 'bg-gray-500', icon: 'clock' },\n  runing: { bgClass: 'bg-blue-500', icon: 'loading' },\n  failed: { bgClass: 'bg-red-500', icon: 'close' },\n  completed: { bgClass: 'bg-green-500', icon: 'check' }\n}\n\n// 扩展Markdown组件\nconst extraMarkdownComponents = computed(() => ({\n  'custom-view': (props: { children: string }) => {\n    const index = +props.children\n    if (!parsedContent.value.cachePluginContext[index]) {\n      return props.children\n    }\n    \n    const { name, status, err_msg, result } = parsedContent.value.cachePluginContext[index]\n    const { bgClass, icon } = pluginViewStatusMapper[status] ?? {}\n    \n    return `\n      <div class=\"bg-white dark:bg-[#212121] rounded-lg overflow-hidden my-2 flex flex-col lg:max-w-[80%]\">\n        <div class=\"flex px-4 md:px-6 py-2 items-center text-white text-sm ${bgClass}\">\n          ${name}\n          <i class=\"ml-2 icon-${icon}\"></i>\n        </div>\n        ${result ? `\n          <div class=\"px-4 md:px-6 py-4 text-sm\">\n            ${result}\n          </div>\n        ` : `\n          <div class=\"px-4 md:px-6 py-4 text-sm\">${err_msg}</div>\n        `}\n      </div>\n    `\n  }\n}))\n\n// 基础Markdown组件配置\nconst markdownComponents = {\n  img: (props: { src: string; alt?: string }) => ({\n    ...props,\n    class: 'max-w-full md:max-w-[80%] lg:max-w-[70%] object-contain',\n    style: 'max-height: 200px'\n  })\n}\n\n// 方法\nconst copyToClipboard = async () => {\n  if (typeof props.content.context === 'string') {\n    try {\n      await navigator.clipboard.writeText(props.content.context)\n      ElMessage.success('复制成功')\n    } catch (err) {\n      console.error('复制失败:', err)\n      ElMessage.error('复制失败')\n    }\n  }\n}\n\nconst formatMarkdownVal = (val: string) => {\n  return val.replace(/<table(\\w*=[^>]+)>/gi, '<table $1>').replace(/<tr(\\w*=[^>]+)>/gi, '<tr $1>')\n}\n\nconst formatMarkdownValForAgent = (val: string) => {\n  return val?.replace(/<table(\\w*=[^>]+)>/gi, '<table $1>').replace(/<tr(\\w*=[^>]+)>/gi, '<tr $1>')\n}\n\nconst preprocessLaTeX = (content: string) => {\n  // LaTeX预处理逻辑\n  return content\n    .replace(/\\\\\\[/g, '$$')\n    .replace(/\\\\\\]/g, '$$')\n    .replace(/\\\\\\(/g, '$')\n    .replace(/\\\\\\)/g, '$')\n}\n</script>\n\n<style scoped>\n/* 思考动画 */\n@keyframes pulse1 {\n  0%, 100% { transform: scale(1); background-color: #bdc0c4; }\n  33.333% { transform: scale(1.5); background-color: #525964; }\n}\n\n@keyframes pulse2 {\n  0%, 100% { transform: scale(1); background-color: #bdc0c4; }\n  33.333% { transform: scale(1.0); background-color: #bdc0c4; }\n  66.666% { transform: scale(1.5); background-color: #525964; }\n}\n\n@keyframes pulse3 {\n  0%, 66.666% { transform: scale(1); background-color: #bdc0c4; }\n  100% { transform: scale(1.5); background-color: #525964; }\n}\n\n.animate-pulse1 {\n  animation: pulse1 1.2s infinite;\n}\n\n.animate-pulse2 {\n  animation: pulse2 1.2s infinite;\n}\n\n.animate-pulse3 {\n  animation: pulse3 1.2s infinite;\n}\n</style>\n","<template>\r\n  <div class=\"chat-input-panel bg-white dark:bg-gray-800 border-t border-gray-200 dark:border-gray-700 p-4\">\r\n    <div class=\"flex items-end space-x-3\">\r\n      <div class=\"flex-1\">\r\n        <el-input\r\n          v-model=\"inputMessage\"\r\n          type=\"textarea\"\r\n          :rows=\"3\"\r\n          placeholder=\"输入您的消息...\"\r\n          @keydown.enter.prevent=\"handleEnter\"\r\n          :disabled=\"isLoading\"\r\n        />\r\n      </div>\r\n      <div class=\"flex flex-col space-y-2\">\r\n        <el-button\r\n          type=\"primary\"\r\n          @click=\"sendMessage\"\r\n          :loading=\"isLoading\"\r\n          :disabled=\"!inputMessage.trim()\"\r\n        >\r\n          发送\r\n        </el-button>\r\n        <el-button\r\n          v-if=\"canAbort\"\r\n          type=\"danger\"\r\n          size=\"small\"\r\n          @click=\"abortChat\"\r\n        >\r\n          停止\r\n        </el-button>\r\n      </div>\r\n    </div>\r\n  </div>\r\n</template>\r\n\r\n<script setup lang=\"ts\">\r\nimport { ref, computed } from 'vue'\r\nimport { useChatStore } from '@/stores/chatStore'\r\n\r\nconst chatStore = useChatStore()\r\n\r\nconst inputMessage = ref('')\r\n\r\nconst isLoading = computed(() => chatStore.replyLoading)\r\nconst canAbort = computed(() => chatStore.canAbort)\r\n\r\nconst emit = defineEmits<{\r\n  sendMessage: [content: string]\r\n}>()\r\n\r\nconst sendMessage = () => {\r\n  if (!inputMessage.value.trim() || isLoading.value) return\r\n  \r\n  emit('sendMessage', inputMessage.value)\r\n  inputMessage.value = ''\r\n}\r\n\r\nconst handleEnter = (event: KeyboardEvent) => {\r\n  if (event.shiftKey) {\r\n    // Shift+Enter 换行\r\n    return\r\n  } else {\r\n    // Enter 发送\r\n    event.preventDefault()\r\n    sendMessage()\r\n  }\r\n}\r\n\r\nconst abortChat = () => {\r\n  console.log('中止聊天')\r\n}\r\n</script>\r\n\r\n","<template>\r\n  <div ref=\"editorRef\" class=\"monaco-editor w-full h-full\"></div>\r\n</template>\r\n\r\n<script setup lang=\"ts\">\r\nimport { ref, onMounted, watch } from 'vue'\r\n\r\ninterface Props {\r\n  value?: string\r\n  language?: string\r\n  height?: number\r\n  readOnly?: boolean\r\n}\r\n\r\nconst props = withDefaults(defineProps<Props>(), {\r\n  value: '',\r\n  language: 'javascript',\r\n  height: 300,\r\n  readOnly: false\r\n})\r\n\r\nconst emit = defineEmits<{\r\n  'update:value': [value: string]\r\n}>()\r\n\r\nconst editorRef = ref<HTMLDivElement>()\r\n\r\nonMounted(() => {\r\n  // 简单的文本编辑器实现\r\n  if (editorRef.value) {\r\n    editorRef.value.innerHTML = `\r\n      <textarea \r\n        style=\"width: 100%; height: ${props.height}px; border: 1px solid #ccc; padding: 10px; font-family: monospace;\"\r\n        placeholder=\"代码编辑器\"\r\n      >${props.value}</textarea>\r\n    `\r\n    \r\n    const textarea = editorRef.value.querySelector('textarea')\r\n    if (textarea) {\r\n      textarea.addEventListener('input', (e) => {\r\n        emit('update:value', (e.target as HTMLTextAreaElement).value)\r\n      })\r\n    }\r\n  }\r\n})\r\n\r\nwatch(() => props.value, (newValue) => {\r\n  const textarea = editorRef.value?.querySelector('textarea')\r\n  if (textarea && textarea.value !== newValue) {\r\n    textarea.value = newValue\r\n  }\r\n})\r\n</script>\r\n\r\n","<template>\r\n  <!-- 向上箭头图标 -->\r\n  <svg width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"currentColor\">\r\n    <path d=\"M7.41 15.41L12 10.83l4.59 4.58L18 14l-6-6-6 6z\"/>\r\n  </svg>\r\n</template>\r\n\r\n<script setup lang=\"ts\">\r\n// 无需导入\r\n</script>\r\n\r\n","<template>\r\n  <!-- 向下箭头图标 -->\r\n  <svg width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"currentColor\">\r\n    <path d=\"M7.41 8.59L12 13.17l4.59-4.58L18 10l-6 6-6-6 1.41-1.41z\"/>\r\n  </svg>\r\n</template>\r\n\r\n<script setup lang=\"ts\">\r\n// 无需导入\r\n</script>\r\n\r\n","<template>\n  <div class=\"chat-container flex flex-col h-full\">\n    <!-- 聊天头部 -->\n    <ChatHeader :is-scroll-to-top=\"isScrollToTop\" />\n    \n    <!-- 聊天内容容器 -->\n    <div class=\"flex flex-1 overflow-hidden relative\">\n      <div \n        ref=\"scrollRef\" \n        class=\"h-full w-full mx-auto overflow-y-auto\"\n        @scroll=\"handleScroll\"\n      >\n        <!-- 聊天消息列表 -->\n        <div class=\"flex flex-col w-5/6 mx-auto pb-20\">\n          <template v-if=\"showMessages.length\">\n            <ChatContent\n              v-for=\"(content, index) in showMessages\"\n              :key=\"content.key || index\"\n              :content=\"content\"\n              @link-click=\"handleLinkClick(content)\"\n            />\n          </template>\n          \n          <!-- 空状态 -->\n          <div v-else-if=\"!chatStore.replyLoading\" class=\"flex flex-col items-center justify-center h-64\">\n            <div class=\"text-gray-400 dark:text-gray-500 text-lg mb-2\">开始您的对话</div>\n            <div class=\"text-gray-300 dark:text-gray-600 text-sm\">输入消息开始与AI助手交流</div>\n          </div>\n        </div>\n      </div>\n      \n      <!-- 滚动按钮 -->\n      <div \n        v-if=\"showScrollButtons\" \n        class=\"absolute right-4 md:right-6 bottom-[120px] md:bottom-[100px] flex flex-col gap-2 z-[999]\"\n      >\n        <button\n          v-if=\"!isAtTop\"\n          @click=\"scrollToTop\"\n          class=\"w-9 h-9 md:w-10 md:h-10 bg-white dark:bg-[rgba(255,255,255,0.2)] border border-gray-200 dark:border-[rgba(255,255,255,0.2)] rounded-full flex items-center justify-center shadow-md hover:shadow-lg transition-all duration-200\"\n          aria-label=\"滚动到顶部\"\n        >\n          <ArrowUpIcon class=\"text-[#525964] dark:text-[rgba(255,255,255,0.85)] text-sm md:text-base\" />\n        </button>\n        \n        <button\n          v-if=\"!isAtBottom\"\n          @click=\"scrollToBottom\"\n          class=\"w-9 h-9 md:w-10 md:h-10 bg-white dark:bg-[rgba(255,255,255,0.2)] border border-gray-200 dark:border-[rgba(255,255,255,0.2)] rounded-full flex items-center justify-center shadow-md hover:shadow-lg transition-all duration-200\"\n          aria-label=\"滚动到底部\"\n        >\n          <ArrowDownIcon class=\"text-[#525964] dark:text-[rgba(255,255,255,0.85)] text-sm md:text-base\" />\n        </button>\n      </div>\n    </div>\n    \n    <!-- 聊天输入面板 -->\n    <ChatInputPanel @send-message=\"handleSendMessage\" />\n    \n    <!-- JSON查看器模态框 -->\n    <el-dialog \n      v-model=\"jsonModalVisible\" \n      title=\"JSON Editor\" \n      width=\"60%\"\n      :show-close=\"true\"\n    >\n      <MonacoEditor \n        v-model=\"jsonValue\" \n        language=\"json\" \n        :height=\"500\"\n        :read-only=\"true\"\n      />\n    </el-dialog>\n  </div>\n</template>\n\n<script setup lang=\"ts\">\nimport { ref, computed, onMounted, onUnmounted, watch, nextTick } from 'vue'\nimport { useChatStore } from '@/stores/chatStore'\nimport { useChat } from '@/composables/useChat'\nimport type { ChatMessage, UserChatContent } from '@/types/chat'\n// 简单的UUID生成器\nconst generateUUID = () => {\n  return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function(c) {\n    const r = Math.random() * 16 | 0\n    const v = c === 'x' ? r : (r & 0x3 | 0x8)\n    return v.toString(16)\n  })\n}\n// 简单的深拷贝函数\nconst cloneDeep = <T>(obj: T): T => {\n  if (obj === null || typeof obj !== 'object') return obj\n  if (obj instanceof Date) return new Date(obj.getTime()) as any\n  if (obj instanceof Array) return obj.map(item => cloneDeep(item)) as any\n  if (typeof obj === 'object') {\n    const clonedObj = {} as any\n    for (const key in obj) {\n      if (obj.hasOwnProperty(key)) {\n        clonedObj[key] = cloneDeep(obj[key])\n      }\n    }\n    return clonedObj\n  }\n  return obj\n}\n\nimport ChatHeader from './ChatHeader.vue'\nimport ChatContent from './ChatContent.vue'\nimport ChatInputPanel from './ChatInputPanel.vue'\nimport MonacoEditor from './MonacoEditor.vue'\nimport ArrowUpIcon from '@/components/icons/ArrowUpIcon.vue'\nimport ArrowDownIcon from '@/components/icons/ArrowDownIcon.vue'\n\nconst chatStore = useChatStore()\nconst { handleChat } = useChat({\n  app_code: chatStore.currentDialogInfo.app_code\n})\n\n// 响应式数据\nconst scrollRef = ref<HTMLDivElement>()\nconst isScrollToTop = ref(false)\nconst showScrollButtons = ref(false)\nconst isAtTop = ref(true)\nconst isAtBottom = ref(false)\nconst allowAutoScroll = ref(true)\nconst animationFrameRef = ref<number | null>(null)\nconst jsonModalVisible = ref(false)\nconst jsonValue = ref('')\n\n// 计算属性\nconst showMessages = computed(() => {\n  const tempMessages: ChatMessage[] = cloneDeep(chatStore.history)\n  return tempMessages\n    .filter(item => ['view', 'human'].includes(item.role))\n    .map(item => ({\n      ...item,\n      key: item.key || generateUUID()\n    }))\n})\n\nconst lastMessage = computed(() => {\n  const history = chatStore.history\n  const last = history[history.length - 1]\n  return last ? { context: last.context, thinking: last.thinking } : null\n})\n\n// 滚动处理\nconst handleScroll = () => {\n  if (!scrollRef.value) return\n  \n  const container = scrollRef.value\n  const scrollTop = container.scrollTop\n  const scrollHeight = container.scrollHeight\n  const clientHeight = container.clientHeight\n  const buffer = 20\n  \n  // 检查滚动方向\n  const lastScrollTop = Number(container.dataset.lastScrollTop) || 0\n  const direction = scrollTop > lastScrollTop ? 'down' : 'up'\n  container.dataset.lastScrollTop = String(scrollTop)\n  \n  // 只在向下滚动时允许自动滚动\n  allowAutoScroll.value = direction === 'down'\n  \n  // 检查是否在顶部\n  isAtTop.value = scrollTop <= buffer\n  \n  // 检查是否在底部\n  isAtBottom.value = scrollTop + clientHeight >= scrollHeight - buffer\n  \n  // 头部可见性\n  isScrollToTop.value = scrollTop >= 42 + 32\n  \n  // 显示滚动按钮\n  const isScrollable = scrollHeight > clientHeight\n  showScrollButtons.value = isScrollable\n}\n\n// 平滑滚动到底部\nconst scrollToBottomSmooth = (forceScroll = false) => {\n  if (!scrollRef.value) return\n  \n  if (!forceScroll && !allowAutoScroll.value) return\n  \n  const container = scrollRef.value\n  const { scrollTop, scrollHeight, clientHeight } = container\n  \n  const buffer = Math.max(50, clientHeight * 0.1)\n  const isNearBottom = scrollTop + clientHeight >= scrollHeight - buffer\n  \n  if (!isNearBottom && !forceScroll) return\n  \n  // 清除之前的动画帧\n  if (animationFrameRef.value) {\n    cancelAnimationFrame(animationFrameRef.value)\n  }\n  \n  animationFrameRef.value = requestAnimationFrame(() => {\n    if (scrollRef.value) {\n      scrollRef.value.scrollTo({\n        top: scrollRef.value.scrollHeight,\n        behavior: forceScroll ? 'smooth' : 'auto'\n      })\n    }\n    animationFrameRef.value = null\n  })\n}\n\n// 滚动到顶部\nconst scrollToTop = () => {\n  if (scrollRef.value) {\n    scrollRef.value.scrollTo({\n      top: 0,\n      behavior: 'smooth'\n    })\n  }\n}\n\n// 滚动到底部\nconst scrollToBottom = () => {\n  if (scrollRef.value) {\n    scrollRef.value.scrollTo({\n      top: scrollRef.value.scrollHeight,\n      behavior: 'smooth'\n    })\n  }\n}\n\n// 处理发送消息\nconst handleSendMessage = async (content: UserChatContent, extraData?: Record<string, any>) => {\n  await handleChat(content, extraData)\n}\n\n// 处理链接点击\nconst handleLinkClick = (content: ChatMessage) => {\n  jsonModalVisible.value = true\n  jsonValue.value = JSON.stringify(content.context, null, 2)\n}\n\n// 监听历史消息变化\nconst prevHistoryLength = ref(chatStore.history.length)\n\nwatch(() => chatStore.history.length, (newLength) => {\n  const isNewMessage = newLength > prevHistoryLength.value\n  \n  if (isNewMessage) {\n    nextTick(() => {\n      scrollToBottomSmooth(true)\n    })\n    prevHistoryLength.value = newLength\n  } else {\n    nextTick(() => {\n      scrollToBottomSmooth(false)\n    })\n  }\n})\n\n// 监听消息内容变化（流式更新）\nwatch(() => lastMessage.value?.context, () => {\n  if (chatStore.history.length === prevHistoryLength.value) {\n    nextTick(() => {\n      scrollToBottomSmooth(false)\n    })\n  }\n})\n\n// 生命周期\nonMounted(() => {\n  if (scrollRef.value) {\n    scrollRef.value.addEventListener('scroll', handleScroll)\n    \n    // 初始检查是否可滚动\n    const isScrollable = scrollRef.value.scrollHeight > scrollRef.value.clientHeight\n    showScrollButtons.value = isScrollable\n  }\n})\n\nonUnmounted(() => {\n  if (scrollRef.value) {\n    scrollRef.value.removeEventListener('scroll', handleScroll)\n  }\n  \n  if (animationFrameRef.value) {\n    cancelAnimationFrame(animationFrameRef.value)\n  }\n})\n</script>\n\n<style scoped>\n.chat-container {\n  background: linear-gradient(to bottom, transparent, rgba(0, 0, 0, 0.02));\n}\n\n.dark .chat-container {\n  background: linear-gradient(to bottom, transparent, rgba(255, 255, 255, 0.02));\n}\n\n/* 防止滚动条影响布局宽度 */\n.overflow-y-auto {\n  scrollbar-gutter: stable;\n}\n</style>\n","<template>\r\n  <div class=\"chat-sider bg-white dark:bg-gray-800 border-r border-gray-200 dark:border-gray-700 h-full\">\r\n    <div class=\"p-4\">\r\n      <h3 class=\"text-lg font-semibold text-gray-900 dark:text-white mb-4\">对话列表</h3>\r\n      <div v-if=\"listLoading\" class=\"text-center py-8\">\r\n        <div class=\"animate-spin text-2xl\">⏳</div>\r\n        <p class=\"text-gray-500 mt-2\">加载中...</p>\r\n      </div>\r\n      <div v-else-if=\"dialogueList.length === 0\" class=\"text-center py-8\">\r\n        <p class=\"text-gray-500\">暂无对话</p>\r\n      </div>\r\n      <div v-else class=\"space-y-2\">\r\n        <div\r\n          v-for=\"(dialogue, index) in dialogueList\"\r\n          :key=\"dialogue?.id || index\"\r\n          class=\"p-3 rounded-lg hover:bg-gray-100 dark:hover:bg-gray-700 cursor-pointer\"\r\n          @click=\"selectDialogue(dialogue)\"\r\n        >\r\n          <p class=\"text-sm font-medium text-gray-900 dark:text-white truncate\">\r\n            {{ dialogue?.title || '新对话' }}\r\n          </p>\r\n          <p class=\"text-xs text-gray-500 dark:text-gray-400 mt-1\">\r\n            {{ formatTime(dialogue?.update_time) }}\r\n          </p>\r\n        </div>\r\n      </div>\r\n    </div>\r\n  </div>\r\n</template>\r\n\r\n<script setup lang=\"ts\">\r\n// 移除Element Plus图标导入\r\n\r\ninterface Props {\r\n  dialogueList: any[]\r\n  listLoading: boolean\r\n  historyLoading: boolean\r\n}\r\n\r\ndefineProps<Props>()\r\n\r\ndefineEmits<{\r\n  refresh: []\r\n}>()\r\n\r\nconst selectDialogue = (dialogue: any) => {\r\n  if (dialogue && dialogue.id) {\r\n    console.log('选择对话:', dialogue)\r\n    // 这里可以添加选择对话的逻辑\r\n  }\r\n}\r\n\r\nconst formatTime = (time: string | undefined) => {\r\n  if (!time) return '未知时间'\r\n  try {\r\n    return new Date(time).toLocaleString()\r\n  } catch (error) {\r\n    return '时间格式错误'\r\n  }\r\n}\r\n</script>\r\n\r\n","<template>\r\n  <div class=\"chat-default flex items-center justify-center h-full bg-gradient-light dark:bg-gradient-dark\">\r\n    <div class=\"text-center\">\r\n      <div class=\"w-24 h-24 bg-gradient-to-r from-blue-500 to-purple-600 rounded-full flex items-center justify-center mx-auto mb-6\">\r\n        <div class=\"text-4xl text-white\">💬</div>\r\n      </div>\r\n      <h2 class=\"text-3xl font-bold text-gray-900 dark:text-white mb-4\">欢迎使用AI助手</h2>\r\n      <p class=\"text-xl text-gray-600 dark:text-gray-300 mb-8 max-w-md\">\r\n        我是您的智能助手，可以帮您解答问题、分析数据、生成内容等\r\n      </p>\r\n      <div class=\"flex flex-col sm:flex-row gap-4 justify-center\">\r\n        <el-button type=\"primary\" size=\"large\" @click=\"startChat\">\r\n          💬 开始对话\r\n        </el-button>\r\n        <el-button size=\"large\" @click=\"viewExamples\">\r\n          👁️ 查看示例\r\n        </el-button>\r\n      </div>\r\n    </div>\r\n  </div>\r\n</template>\r\n\r\n<script setup lang=\"ts\">\r\nimport { useRouter } from 'vue-router'\r\n// 移除Element Plus图标导入\r\n\r\nconst router = useRouter()\r\n\r\nconst startChat = () => {\r\n  router.push('/chat')\r\n}\r\n\r\nconst viewExamples = () => {\r\n  router.push('/examples')\r\n}\r\n</script>\r\n\r\n<style scoped>\r\n.bg-gradient-light {\r\n  background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);\r\n}\r\n\r\n.dark .bg-gradient-dark {\r\n  background: linear-gradient(135deg, #1a1a2e 0%, #16213e 100%);\r\n}\r\n</style>\r\n\r\n","<template>\r\n  <div class=\"db-editor h-full flex flex-col\">\r\n    <div class=\"bg-white dark:bg-gray-800 border-b border-gray-200 dark:border-gray-700 p-4\">\r\n      <h2 class=\"text-lg font-semibold text-gray-900 dark:text-white\">数据库编辑器</h2>\r\n    </div>\r\n    <div class=\"flex-1 p-4\">\r\n      <div class=\"bg-gray-100 dark:bg-gray-700 rounded-lg p-8 text-center\">\r\n        <div class=\"text-4xl text-gray-400 mb-4\">🗄️</div>\r\n        <p class=\"text-gray-600 dark:text-gray-300\">数据库编辑器功能正在开发中...</p>\r\n      </div>\r\n    </div>\r\n  </div>\r\n</template>\r\n\r\n<script setup lang=\"ts\">\r\n// 移除Element Plus图标导入，使用emoji替代\r\n</script>\r\n\r\n","<template>\r\n  <div class=\"chart-renderer\">\r\n    <!-- 柱状图 -->\r\n    <div v-if=\"chartData.type === 'bar'\" class=\"bar-chart space-y-2\">\r\n      <div \r\n        v-for=\"(value, index) in chartData.data.values\" \r\n        :key=\"index\" \r\n        class=\"flex items-center space-x-3\"\r\n      >\r\n        <span class=\"w-12 text-sm text-gray-600 dark:text-gray-400 text-right\">\r\n          {{ chartData.data.labels[index] }}\r\n        </span>\r\n        <div class=\"flex-1 bg-gray-200 dark:bg-gray-700 rounded-full h-6 relative\">\r\n          <div \r\n            class=\"bg-gradient-to-r from-blue-500 to-purple-500 h-6 rounded-full flex items-center justify-end pr-2 text-white text-xs font-medium transition-all duration-1000 ease-out\"\r\n            :style=\"{ width: (value / maxValue) * 100 + '%' }\"\r\n          >\r\n            {{ value }}\r\n          </div>\r\n        </div>\r\n      </div>\r\n    </div>\r\n\r\n    <!-- 折线图（简化为卡片展示） -->\r\n    <div v-else-if=\"chartData.type === 'line'\" class=\"line-chart\">\r\n      <div class=\"grid grid-cols-2 md:grid-cols-3 gap-3\">\r\n        <div \r\n          v-for=\"(value, index) in chartData.data.values\" \r\n          :key=\"index\" \r\n          class=\"bg-white dark:bg-gray-700 p-3 rounded-lg border border-gray-200 dark:border-gray-600 hover:shadow-md transition-shadow\"\r\n        >\r\n          <div class=\"text-xs text-gray-500 dark:text-gray-400 mb-1\">\r\n            {{ chartData.data.labels[index] }}\r\n          </div>\r\n          <div class=\"text-lg font-bold text-blue-600 dark:text-blue-400\">\r\n            {{ value }}\r\n          </div>\r\n          <div class=\"text-xs text-gray-400 mt-1\">\r\n            {{ index > 0 ? (value > chartData.data.values[index-1] ? '↗️' : '↘️') : '📊' }}\r\n          </div>\r\n        </div>\r\n      </div>\r\n    </div>\r\n\r\n    <!-- 饼图（简化为进度条列表） -->\r\n    <div v-else-if=\"chartData.type === 'pie'\" class=\"pie-chart space-y-4\">\r\n      <div \r\n        v-for=\"(item, index) in chartData.data\" \r\n        :key=\"index\" \r\n        class=\"flex items-center justify-between\"\r\n      >\r\n        <div class=\"flex items-center space-x-3\">\r\n          <div \r\n            class=\"w-3 h-3 rounded-full\"\r\n            :style=\"{ backgroundColor: getColor(index) }\"\r\n          ></div>\r\n          <span class=\"text-gray-700 dark:text-gray-300 text-sm\">{{ item.name }}</span>\r\n        </div>\r\n        <div class=\"flex items-center space-x-3\">\r\n          <div class=\"w-24 bg-gray-200 dark:bg-gray-700 rounded-full h-2\">\r\n            <div \r\n              class=\"h-2 rounded-full transition-all duration-1000 ease-out\"\r\n              :style=\"{ \r\n                width: item.value + '%',\r\n                backgroundColor: getColor(index)\r\n              }\"\r\n            ></div>\r\n          </div>\r\n          <span class=\"text-sm font-medium text-gray-600 dark:text-gray-400 w-10 text-right\">\r\n            {{ item.value }}%\r\n          </span>\r\n        </div>\r\n      </div>\r\n    </div>\r\n  </div>\r\n</template>\r\n\r\n<script setup lang=\"ts\">\r\nimport { computed } from 'vue'\r\n\r\ninterface ChartData {\r\n  type: 'bar' | 'line' | 'pie'\r\n  title: string\r\n  data: any\r\n}\r\n\r\nconst props = defineProps<{\r\n  chartData: ChartData\r\n}>()\r\n\r\n// 计算最大值（用于柱状图）\r\nconst maxValue = computed(() => {\r\n  if (props.chartData.type === 'bar') {\r\n    return Math.max(...props.chartData.data.values)\r\n  }\r\n  return 100\r\n})\r\n\r\n// 获取颜色（用于饼图）\r\nconst getColor = (index: number) => {\r\n  const colors = [\r\n    '#3B82F6', // blue\r\n    '#8B5CF6', // purple\r\n    '#06B6D4', // cyan\r\n    '#10B981', // emerald\r\n    '#F59E0B', // amber\r\n    '#EF4444', // red\r\n    '#6366F1', // indigo\r\n    '#EC4899'  // pink\r\n  ]\r\n  return colors[index % colors.length]\r\n}\r\n</script>\r\n\r\n<style scoped>\r\n.chart-renderer {\r\n  font-family: 'Inter', -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif;\r\n}\r\n\r\n/* 动画效果 */\r\n.bar-chart > div {\r\n  animation: slideInLeft 0.6s ease-out;\r\n  animation-fill-mode: both;\r\n}\r\n\r\n.bar-chart > div:nth-child(1) { animation-delay: 0.1s; }\r\n.bar-chart > div:nth-child(2) { animation-delay: 0.2s; }\r\n.bar-chart > div:nth-child(3) { animation-delay: 0.3s; }\r\n.bar-chart > div:nth-child(4) { animation-delay: 0.4s; }\r\n.bar-chart > div:nth-child(5) { animation-delay: 0.5s; }\r\n.bar-chart > div:nth-child(6) { animation-delay: 0.6s; }\r\n\r\n.line-chart > div > div {\r\n  animation: fadeInUp 0.6s ease-out;\r\n  animation-fill-mode: both;\r\n}\r\n\r\n.line-chart > div > div:nth-child(1) { animation-delay: 0.1s; }\r\n.line-chart > div > div:nth-child(2) { animation-delay: 0.2s; }\r\n.line-chart > div > div:nth-child(3) { animation-delay: 0.3s; }\r\n.line-chart > div > div:nth-child(4) { animation-delay: 0.4s; }\r\n.line-chart > div > div:nth-child(5) { animation-delay: 0.5s; }\r\n.line-chart > div > div:nth-child(6) { animation-delay: 0.6s; }\r\n\r\n.pie-chart > div {\r\n  animation: slideInRight 0.6s ease-out;\r\n  animation-fill-mode: both;\r\n}\r\n\r\n.pie-chart > div:nth-child(1) { animation-delay: 0.1s; }\r\n.pie-chart > div:nth-child(2) { animation-delay: 0.2s; }\r\n.pie-chart > div:nth-child(3) { animation-delay: 0.3s; }\r\n.pie-chart > div:nth-child(4) { animation-delay: 0.4s; }\r\n\r\n@keyframes slideInLeft {\r\n  from {\r\n    opacity: 0;\r\n    transform: translateX(-20px);\r\n  }\r\n  to {\r\n    opacity: 1;\r\n    transform: translateX(0);\r\n  }\r\n}\r\n\r\n@keyframes fadeInUp {\r\n  from {\r\n    opacity: 0;\r\n    transform: translateY(10px);\r\n  }\r\n  to {\r\n    opacity: 1;\r\n    transform: translateY(0);\r\n  }\r\n}\r\n\r\n@keyframes slideInRight {\r\n  from {\r\n    opacity: 0;\r\n    transform: translateX(20px);\r\n  }\r\n  to {\r\n    opacity: 1;\r\n    transform: translateX(0);\r\n  }\r\n}\r\n</style>\r\n","<template>\n  <div class=\"agent-content-renderer\">\n    <!-- 按顺序渲染解析后的内容 -->\n    <template v-if=\"orderedContent && orderedContent.length > 0\">\n      <template v-for=\"(item, itemIndex) in orderedContent\" :key=\"itemIndex\">\n        <!-- 单个Agent Plan（独立的折叠面板） -->\n        <div v-if=\"item.type === 'agent-plan' && item.data\" class=\"agent-plan-container\" :data-index=\"itemIndex\">\n          <el-collapse class=\"agent-plans-collapse\">\n            <el-collapse-item :name=\"'0'\" class=\"agent-plan-item\">\n              <template #title>\n                <div class=\"agent-plan-header\">\n                  <span class=\"plan-title\">{{ (item.data as AgentPlan).name }}{{ (item.data as AgentPlan).agent ? ` - ${(item.data as AgentPlan).agent}` : '' }}</span>\n                  <el-icon v-if=\"(item.data as AgentPlan).status === 'complete'\" class=\"status-icon status-complete\">\n                    <Check />\n                  </el-icon>\n                  <el-icon v-else-if=\"(item.data as AgentPlan).status === 'running'\" class=\"status-icon status-running\">\n                    <Loading />\n                  </el-icon>\n                  <el-icon v-else class=\"status-icon status-todo\">\n                    <Clock />\n                  </el-icon>\n                </div>\n              </template>\n              <div class=\"agent-plan-content\">\n                <!-- 递归渲染plan内的markdown（可能包含图表等） -->\n                <DBGPTRenderer \n                  v-if=\"(item.data as AgentPlan).markdown\"\n                  :content=\"(item.data as AgentPlan).markdown\"\n                />\n              </div>\n            </el-collapse-item>\n          </el-collapse>\n        </div>\n\n        <!-- Agent Messages -->\n        <div v-else-if=\"item.type === 'agent-message' && item.data\" class=\"agent-message-item\">\n          <div class=\"agent-message-header\">\n            <span class=\"sender\">{{ (item.data as AgentMessage).sender }}</span>\n            <span class=\"arrow\">→</span>\n            <span class=\"receiver\">{{ (item.data as AgentMessage).receiver }}</span>\n          </div>\n          <div v-html=\"renderMarkdown((item.data as AgentMessage).markdown)\" class=\"content-html\"></div>\n        </div>\n\n        <!-- 普通文本内容 -->\n        <div v-else-if=\"item.type === 'text' && item.content.trim()\" class=\"text-content\">\n          <div v-html=\"renderMarkdown(item.content)\" class=\"content-html\"></div>\n        </div>\n      </template>\n    </template>\n    \n    <!-- 兜底：如果没有解析内容，显示原始内容 -->\n    <div v-else v-html=\"renderMarkdown(props.content)\" class=\"content-html\"></div>\n  </div>\n</template>\n\n<script setup lang=\"ts\">\nimport { computed } from 'vue'\nimport { marked } from 'marked'\nimport DOMPurify from 'dompurify'\nimport { ElCollapse, ElCollapseItem, ElIcon } from 'element-plus'\nimport { Check, Clock, Loading } from '@element-plus/icons-vue'\nimport DBGPTRenderer from './DBGPTRenderer.vue'\n\n/* 类型定义模块 */\ninterface AgentPlan {\n  name: string\n  num?: number\n  status?: 'complete' | 'todo' | 'running'\n  agent?: string\n  markdown: string\n}\n\ninterface AgentMessage {\n  sender: string\n  receiver: string\n  model?: string\n  markdown: string\n}\n\ninterface ContentItem {\n  type: 'text' | 'agent-plan' | 'agent-message'\n  position: number  // 在原文中的位置\n  content: string\n  data?: AgentPlan | AgentMessage\n}\n/* 类型定义模块end */\n\nconst props = defineProps<{\n  content: string\n}>()\n\n/* 内容解析模块 */\n/**\n * 功能描述: 按顺序解析内容，保持原始顺序\n * 参数: {string} content - 原始内容\n * 返回: {ContentItem[]} - 有序的内容项数组\n */\nconst parseOrderedContent = (content: string): ContentItem[] => {\n  const items: ContentItem[] = []\n  \n  // 1. 查找所有agent-plans块\n  const agentPlansRegex = /```agent-plans\\n(\\[[\\s\\S]*?\\])\\n```/g\n  let match: RegExpExecArray | null\n  \n  // eslint-disable-next-line no-cond-assign\n  while ((match = agentPlansRegex.exec(content)) !== null) {\n    try {\n      const plans = JSON.parse(match[1]) as AgentPlan[]\n      const blockStart = match.index\n      \n      // 将每个plan作为独立项添加\n      plans.forEach((plan, idx) => {\n        items.push({\n          type: 'agent-plan',\n          position: blockStart + idx * 0.1, // 确保同一块内的plans按顺序排列\n          content: match![0],\n          data: plan\n        })\n      })\n    } catch (e) {\n      console.warn('解析agent-plans失败:', e)\n    }\n  }\n  \n  // 2. 查找所有agent-messages块\n  const agentMessagesRegex = /```agent-messages\\n(\\[[\\s\\S]*?\\])\\n```/g\n  // eslint-disable-next-line no-cond-assign\n  while ((match = agentMessagesRegex.exec(content)) !== null) {\n    try {\n      const messages = JSON.parse(match[1]) as AgentMessage[]\n      const blockStart = match.index\n      \n      // 将每个message作为独立项添加\n      messages.forEach((message, idx) => {\n        items.push({\n          type: 'agent-message',\n          position: blockStart + idx * 0.1,\n          content: match![0],\n          data: message\n        })\n      })\n    } catch (e) {\n      console.warn('解析agent-messages失败:', e)\n    }\n  }\n  \n  // 3. 提取文本内容（移除所有特殊块后剩余的文本）\n  let textContent = content\n  \n  // 移除所有agent-plans块\n  textContent = textContent.replace(/```agent-plans\\n\\[[\\s\\S]*?\\]\\n```/g, '__PLACEHOLDER__')\n  \n  // 移除所有agent-messages块\n  textContent = textContent.replace(/```agent-messages\\n\\[[\\s\\S]*?\\]\\n```/g, '__PLACEHOLDER__')\n  \n  // 按__PLACEHOLDER__分割文本\n  const textParts = textContent.split('__PLACEHOLDER__')\n  \n  // 计算每个文本部分的原始位置\n  let currentPos = 0\n  textParts.forEach((text) => {\n    if (text.trim()) {\n      // 找到这段文本在原内容中的位置\n      const textPos = content.indexOf(text, currentPos)\n      if (textPos >= 0) {\n        items.push({\n          type: 'text',\n          position: textPos,\n          content: text\n        })\n        currentPos = textPos + text.length\n      }\n    }\n  })\n  \n  // 4. 按position排序\n  return items.sort((a, b) => a.position - b.position)\n}\n\n// 计算有序内容\nconst orderedContent = computed(() => {\n  return parseOrderedContent(props.content)\n})\n/* 内容解析模块end */\n\n/* Markdown渲染模块 */\n/**\n * 功能描述: 渲染Markdown为HTML\n * 参数: {string} text - Markdown文本\n * 返回: {string} - 安全的HTML字符串\n */\nconst renderMarkdown = (text: string): string => {\n  if (!text) return ''\n  \n  try {\n    const rawHtml = marked.parse(text, {\n      breaks: true,\n      gfm: true\n    })\n    \n    return DOMPurify.sanitize(rawHtml as string, {\n      ADD_TAGS: ['iframe'],\n      ADD_ATTR: ['allow', 'allowfullscreen', 'frameborder', 'scrolling']\n    })\n  } catch (error) {\n    console.error('Markdown渲染失败:', error)\n    return text\n  }\n}\n/* Markdown渲染模块end */\n</script>\n\n<style scoped>\n/* 单个Agent Plan容器样式 */\n.agent-plan-container {\n  margin: 12px 0;\n}\n\n.agent-plans-collapse {\n  border: none !important;\n}\n\n.agent-plans-collapse :deep(.el-collapse-item) {\n  border: 1px solid #e9ecef;\n  border-radius: 8px;\n  overflow: hidden;\n  transition: all 0.3s ease;\n}\n\n.dark .agent-plans-collapse :deep(.el-collapse-item) {\n  border-color: #374151;\n}\n\n.agent-plans-collapse :deep(.el-collapse-item:hover) {\n  border-color: #3b82f6;\n  box-shadow: 0 2px 8px rgba(59, 130, 246, 0.1);\n}\n\n.agent-plans-collapse :deep(.el-collapse-item__header) {\n  background: #f3f4f6;\n  border: none;\n  padding: 8px 12px !important;\n  font-weight: 500;\n  transition: background 0.2s ease;\n  height: auto !important;\n  min-height: auto !important;\n  line-height: 1.5 !important;\n  flex-direction: row-reverse;\n}\n\n.dark .agent-plans-collapse :deep(.el-collapse-item__header) {\n  background: #1f2937;\n  color: #e5e7eb;\n}\n\n/* 箭头间距 */\n.agent-plans-collapse :deep(.el-collapse-item__arrow) {\n  margin-right: 12px;\n  margin-left: 0;\n}\n\n.agent-plans-collapse :deep(.el-collapse-item__header:hover) {\n  background: #e5e7eb;\n}\n\n.dark .agent-plans-collapse :deep(.el-collapse-item__header:hover) {\n  background: #374151;\n}\n\n.agent-plans-collapse :deep(.el-collapse-item.is-active .el-collapse-item__header) {\n  background: #ffffff;\n  border-bottom: 1px solid #e9ecef;\n}\n\n.dark .agent-plans-collapse :deep(.el-collapse-item.is-active .el-collapse-item__header) {\n  background: #1f2937;\n  border-bottom-color: #374151;\n}\n\n.agent-plans-collapse :deep(.el-collapse-item__wrap) {\n  border: none;\n  background: #ffffff;\n}\n\n.dark .agent-plans-collapse :deep(.el-collapse-item__wrap) {\n  background: #1f2937;\n}\n\n.agent-plans-collapse :deep(.el-collapse-item__content) {\n  padding: 0;\n  color: inherit;\n}\n\n.agent-plan-header {\n  display: flex;\n  justify-content: space-between;\n  align-items: center;\n  width: 100%;\n  gap: 12px;\n}\n\n.plan-title {\n  font-size: 15px;\n  color: #333;\n  flex: 1;\n}\n\n.dark .plan-title {\n  color: #e5e7eb;\n}\n\n.status-icon {\n  font-size: 20px;\n  flex-shrink: 0;\n}\n\n.status-complete {\n  color: #10b981;\n}\n\n.status-running {\n  color: #3b82f6;\n  animation: rotate-loading 1s linear infinite;\n}\n\n.status-todo {\n  color: #9ca3af;\n}\n\n@keyframes rotate-loading {\n  from {\n    transform: rotate(0deg);\n  }\n  to {\n    transform: rotate(360deg);\n  }\n}\n\n.agent-plan-content {\n  padding: 12px 16px;\n  background: #ffffff;\n  font-size: 14.4px;\n  line-height: 1.6;\n}\n\n.dark .agent-plan-content {\n  background: #1f2937;\n}\n\n/* Agent Messages 样式 */\n.agent-message-item {\n  margin: 12px 0;\n  padding: 14px 16px;\n  border-left: 3px solid #3b82f6;\n  background: #f8f9fa;\n  border-radius: 0 8px 8px 0;\n}\n\n.dark .agent-message-item {\n  background: #1f2937;\n  border-left-color: #60a5fa;\n}\n\n.agent-message-header {\n  display: flex;\n  align-items: center;\n  gap: 8px;\n  margin-bottom: 8px;\n  font-size: 13px;\n  color: #6b7280;\n}\n\n.dark .agent-message-header {\n  color: #9ca3af;\n}\n\n.sender {\n  font-weight: 600;\n  color: #3b82f6;\n}\n\n.dark .sender {\n  color: #60a5fa;\n}\n\n.arrow {\n  color: #9ca3af;\n}\n\n.receiver {\n  font-weight: 600;\n  color: #10b981;\n}\n\n.dark .receiver {\n  color: #34d399;\n}\n\n/* 文本内容样式 */\n.text-content {\n  margin: 8px 0;\n}\n\n.content-html {\n  line-height: 1.6;\n  word-break: break-word;\n}\n\n.content-html :deep(h1),\n.content-html :deep(h2),\n.content-html :deep(h3) {\n  margin-top: 16px;\n  margin-bottom: 8px;\n  font-weight: 600;\n  color: #1f2937;\n}\n\n.dark .content-html :deep(h1),\n.dark .content-html :deep(h2),\n.dark .content-html :deep(h3) {\n  color: #f3f4f6;\n}\n\n.content-html :deep(p) {\n  margin: 8px 0;\n  color: #374151;\n}\n\n.dark .content-html :deep(p) {\n  color: #d1d5db;\n}\n\n.content-html :deep(ul),\n.content-html :deep(ol) {\n  margin: 8px 0;\n  padding-left: 24px;\n}\n\n.content-html :deep(code) {\n  background: #f3f4f6;\n  padding: 2px 4px;\n  border-radius: 4px;\n  font-size: 0.875em;\n  font-family: 'Courier New', monospace;\n  color: #e11d48;\n}\n\n.dark .content-html :deep(code) {\n  background: #374151;\n  color: #fca5a5;\n}\n\n.content-html :deep(pre) {\n  background: #1f2937;\n  color: #f9fafb;\n  padding: 16px;\n  border-radius: 8px;\n  overflow-x: auto;\n  margin: 8px 0;\n}\n\n.dark .content-html :deep(pre) {\n  background: #111827;\n}\n\n.content-html :deep(pre code) {\n  background: transparent;\n  padding: 0;\n  color: inherit;\n}\n\n.content-html :deep(strong) {\n  font-weight: 600;\n}\n\n.content-html :deep(a) {\n  color: #3b82f6;\n  text-decoration: underline;\n}\n\n.dark .content-html :deep(a) {\n  color: #60a5fa;\n}\n\n.content-html :deep(blockquote) {\n  border-left: 3px solid #d1d5db;\n  padding-left: 16px;\n  margin: 8px 0;\n  color: #6b7280;\n}\n\n.dark .content-html :deep(blockquote) {\n  border-left-color: #4b5563;\n  color: #9ca3af;\n}\n</style>\n\n","<template>\n  <div class=\"simple-chart-renderer\">\n    <div class=\"bg-gray-50 dark:bg-gray-700 rounded-lg p-4\">\n      <h4 v-if=\"data.title\" class=\"text-lg font-semibold text-gray-800 dark:text-gray-200 mb-4 text-center\">\n        {{ data.title }}\n      </h4>\n      \n      <!-- 柱状图 -->\n      <div v-if=\"data.type === 'bar'\" class=\"bar-chart\">\n        <div class=\"chart-container h-64 flex items-end justify-center space-x-2\">\n          <div\n            v-for=\"(value, index) in data.data.values\"\n            :key=\"index\"\n            class=\"bar-item flex flex-col items-center\"\n          >\n            <div class=\"text-xs text-gray-600 dark:text-gray-400 mb-1\">{{ value }}</div>\n            <div\n              class=\"bg-gradient-to-t from-blue-600 to-blue-400 rounded-t transition-all duration-1000 ease-out\"\n              :style=\"{\n                height: `${(value / Math.max(...data.data.values)) * 200}px`,\n                width: '40px'\n              }\"\n            ></div>\n            <div class=\"text-xs text-gray-700 dark:text-gray-300 mt-2\">\n              {{ data.data.months[index] }}\n            </div>\n          </div>\n        </div>\n      </div>\n      \n      <!-- 折线图 -->\n      <div v-else-if=\"data.type === 'line'\" class=\"line-chart\">\n        <div class=\"chart-container h-64 relative\">\n          <svg class=\"w-full h-full\" viewBox=\"0 0 400 200\">\n            <!-- 网格线 -->\n            <defs>\n              <pattern id=\"grid\" width=\"40\" height=\"20\" patternUnits=\"userSpaceOnUse\">\n                <path d=\"M 40 0 L 0 0 0 20\" fill=\"none\" stroke=\"#e5e7eb\" stroke-width=\"0.5\"/>\n              </pattern>\n            </defs>\n            <rect width=\"100%\" height=\"100%\" fill=\"url(#grid)\" />\n            \n            <!-- 折线 -->\n            <polyline\n              :points=\"linePoints\"\n              fill=\"none\"\n              stroke=\"url(#lineGradient)\"\n              stroke-width=\"3\"\n              stroke-linecap=\"round\"\n              stroke-linejoin=\"round\"\n            />\n            \n            <!-- 渐变定义 -->\n            <defs>\n              <linearGradient id=\"lineGradient\" x1=\"0%\" y1=\"0%\" x2=\"100%\" y2=\"0%\">\n                <stop offset=\"0%\" style=\"stop-color:#8b5cf6;stop-opacity:1\" />\n                <stop offset=\"100%\" style=\"stop-color:#3b82f6;stop-opacity:1\" />\n              </linearGradient>\n              <linearGradient id=\"areaGradient\" x1=\"0%\" y1=\"0%\" x2=\"0%\" y2=\"100%\">\n                <stop offset=\"0%\" style=\"stop-color:#8b5cf6;stop-opacity:0.3\" />\n                <stop offset=\"100%\" style=\"stop-color:#8b5cf6;stop-opacity:0.1\" />\n              </linearGradient>\n            </defs>\n            \n            <!-- 填充区域 -->\n            <polygon\n              :points=\"areaPoints\"\n              fill=\"url(#areaGradient)\"\n            />\n            \n            <!-- 数据点 -->\n            <circle\n              v-for=\"(point, index) in linePointsArray\"\n              :key=\"index\"\n              :cx=\"point.x\"\n              :cy=\"point.y\"\n              r=\"4\"\n              fill=\"#8b5cf6\"\n              class=\"animate-pulse\"\n            />\n          </svg>\n          \n          <!-- X轴标签 -->\n          <div class=\"flex justify-between mt-2 px-4\">\n            <span\n              v-for=\"label in data.data.months || data.data.days\"\n              :key=\"label\"\n              class=\"text-xs text-gray-600 dark:text-gray-400\"\n            >\n              {{ label }}\n            </span>\n          </div>\n        </div>\n      </div>\n      \n      <!-- 饼图 -->\n      <div v-else-if=\"data.type === 'pie'\" class=\"pie-chart\">\n        <div class=\"flex items-center justify-center h-64\">\n          <div class=\"relative\">\n            <svg width=\"200\" height=\"200\" viewBox=\"0 0 200 200\">\n              <g transform=\"translate(100, 100)\">\n                <path\n                  v-for=\"(segment, index) in pieSegments\"\n                  :key=\"index\"\n                  :d=\"segment.path\"\n                  :fill=\"segment.color\"\n                  :stroke=\"'white'\"\n                  :stroke-width=\"2\"\n                  class=\"transition-all duration-500 hover:opacity-80\"\n                />\n              </g>\n            </svg>\n            \n            <!-- 图例 -->\n            <div class=\"absolute left-full ml-4 top-1/2 transform -translate-y-1/2 space-y-2\">\n              <div\n                v-for=\"(item, index) in data.data\"\n                :key=\"index\"\n                class=\"flex items-center space-x-2\"\n              >\n                <div\n                  class=\"w-3 h-3 rounded-full\"\n                  :style=\"{ backgroundColor: pieColors[index % pieColors.length] }\"\n                ></div>\n                <span class=\"text-sm text-gray-700 dark:text-gray-300\">\n                  {{ item.name }}: {{ item.value }}%\n                </span>\n              </div>\n            </div>\n          </div>\n        </div>\n      </div>\n      \n      <!-- 其他类型的占位符 -->\n      <div v-else class=\"flex items-center justify-center h-64\">\n        <div class=\"text-center\">\n          <div class=\"text-4xl mb-2\">📊</div>\n          <div class=\"text-gray-600 dark:text-gray-400\">\n            {{ data.type }} 图表\n          </div>\n        </div>\n      </div>\n    </div>\n  </div>\n</template>\n\n<script setup lang=\"ts\">\nimport { computed } from 'vue'\n\ninterface Props {\n  data: {\n    type: 'bar' | 'line' | 'pie' | 'scatter'\n    title?: string\n    data: any\n  }\n}\n\nconst props = defineProps<Props>()\n\n// 饼图颜色\nconst pieColors = [\n  '#3b82f6', '#8b5cf6', '#06d6a0', '#ffd60a', \n  '#ff6b6b', '#4ecdc4', '#45b7d1', '#f9ca24'\n]\n\n// 计算折线图的点\nconst linePointsArray = computed(() => {\n  if (props.data.type !== 'line' || !props.data.data.values) return []\n  \n  const values = props.data.data.values\n  const maxValue = Math.max(...values)\n  const minValue = Math.min(...values)\n  const range = maxValue - minValue || 1\n  \n  return values.map((value: number, index: number) => ({\n    x: (index / (values.length - 1)) * 320 + 40, // 留边距\n    y: 180 - ((value - minValue) / range) * 160 + 10 // 反转Y轴，留边距\n  }))\n})\n\n// 折线图路径点字符串\nconst linePoints = computed(() => {\n  return linePointsArray.value.map((point: any) => `${point.x},${point.y}`).join(' ')\n})\n\n// 折线图填充区域点字符串\nconst areaPoints = computed(() => {\n  if (linePointsArray.value.length === 0) return ''\n  const points = linePointsArray.value.map((point: any) => `${point.x},${point.y}`).join(' ')\n  const firstX = linePointsArray.value[0].x\n  const lastX = linePointsArray.value[linePointsArray.value.length - 1].x\n  return `${firstX},190 ${points} ${lastX},190`\n})\n\n// 计算饼图扇形\nconst pieSegments = computed(() => {\n  if (props.data.type !== 'pie' || !props.data.data) return []\n  \n  const data = props.data.data\n  const total = data.reduce((sum: number, item: any) => sum + item.value, 0)\n  let currentAngle = 0\n  \n  return data.map((item: any, index: number) => {\n    const angle = (item.value / total) * 2 * Math.PI\n    const startAngle = currentAngle\n    const endAngle = currentAngle + angle\n    \n    const x1 = Math.cos(startAngle) * 80\n    const y1 = Math.sin(startAngle) * 80\n    const x2 = Math.cos(endAngle) * 80\n    const y2 = Math.sin(endAngle) * 80\n    \n    const largeArcFlag = angle > Math.PI ? 1 : 0\n    \n    const path = [\n      'M', 0, 0,\n      'L', x1, y1,\n      'A', 80, 80, 0, largeArcFlag, 1, x2, y2,\n      'Z'\n    ].join(' ')\n    \n    currentAngle += angle\n    \n    return {\n      path,\n      color: pieColors[index % pieColors.length]\n    }\n  })\n})\n</script>\n\n<style scoped>\n.simple-chart-renderer {\n  animation: fadeInScale 0.6s ease-out;\n}\n\n@keyframes fadeInScale {\n  from {\n    opacity: 0;\n    transform: scale(0.95);\n  }\n  to {\n    opacity: 1;\n    transform: scale(1);\n  }\n}\n\n.bar-item {\n  animation: slideUp 0.8s ease-out;\n  animation-fill-mode: both;\n}\n\n.bar-item:nth-child(1) { animation-delay: 0.1s; }\n.bar-item:nth-child(2) { animation-delay: 0.2s; }\n.bar-item:nth-child(3) { animation-delay: 0.3s; }\n.bar-item:nth-child(4) { animation-delay: 0.4s; }\n.bar-item:nth-child(5) { animation-delay: 0.5s; }\n.bar-item:nth-child(6) { animation-delay: 0.6s; }\n\n@keyframes slideUp {\n  from {\n    transform: scaleY(0);\n    transform-origin: bottom;\n  }\n  to {\n    transform: scaleY(1);\n    transform-origin: bottom;\n  }\n}\n\nsvg polyline {\n  stroke-dasharray: 1000;\n  stroke-dashoffset: 1000;\n  animation: drawLine 2s ease-out forwards;\n}\n\n@keyframes drawLine {\n  to {\n    stroke-dashoffset: 0;\n  }\n}\n\nsvg polygon {\n  opacity: 0;\n  animation: fadeIn 1s ease-out 1s forwards;\n}\n\n@keyframes fadeIn {\n  to {\n    opacity: 1;\n  }\n}\n</style>\n","<template>\n  <div class=\"echarts-renderer\">\n    <div class=\"bg-gray-50 dark:bg-gray-700 rounded-lg p-4\">\n      <h4 v-if=\"data.title\" class=\"text-lg font-semibold text-gray-800 dark:text-gray-200 mb-4 text-center\">\n        {{ data.title }}\n      </h4>\n      <div \n        ref=\"chartContainer\" \n        class=\"w-full\"\n        :style=\"{ height: chartHeight + 'px' }\"\n      ></div>\n    </div>\n  </div>\n</template>\n\n<script setup lang=\"ts\">\nimport { ref, onMounted, onUnmounted, watch, nextTick } from 'vue'\n\n/* \n * ECharts 动态导入声明\n * 由于 echarts 是可选依赖，这里声明全局类型\n */\ndeclare const echarts: typeof import('echarts')\n\ninterface Props {\n  data: {\n    type: 'bar' | 'line' | 'pie' | 'scatter'\n    title?: string\n    data: any\n  }\n  height?: number\n}\n\nconst props = withDefaults(defineProps<Props>(), {\n  height: 400\n})\n\nconst chartContainer = ref<HTMLElement>()\nconst chartInstance = ref<echarts.ECharts>()\nconst chartHeight = ref(props.height)\n\n// 根据图表类型生成配置\nconst generateChartOption = () => {\n  const { type, data } = props.data\n  \n  const baseOption = {\n    backgroundColor: 'transparent',\n    textStyle: {\n      color: '#374151'\n    },\n    grid: {\n      left: '3%',\n      right: '4%',\n      bottom: '3%',\n      containLabel: true\n    },\n    tooltip: {\n      trigger: 'axis',\n      backgroundColor: 'rgba(255, 255, 255, 0.9)',\n      borderColor: '#e5e7eb',\n      textStyle: {\n        color: '#374151'\n      }\n    },\n    animation: true,\n    animationDuration: 1000,\n    animationEasing: 'cubicOut'\n  }\n  \n  switch (type) {\n    case 'bar':\n      return {\n        ...baseOption,\n        xAxis: {\n          type: 'category',\n          data: data.months || data.categories || [],\n          axisLine: {\n            lineStyle: { color: '#d1d5db' }\n          },\n          axisLabel: {\n            color: '#6b7280'\n          }\n        },\n        yAxis: {\n          type: 'value',\n          axisLine: {\n            lineStyle: { color: '#d1d5db' }\n          },\n          axisLabel: {\n            color: '#6b7280'\n          },\n          splitLine: {\n            lineStyle: { color: '#f3f4f6' }\n          }\n        },\n        series: [{\n          data: data.values || [],\n          type: 'bar',\n          itemStyle: {\n            color: new echarts.graphic.LinearGradient(0, 0, 0, 1, [\n              { offset: 0, color: '#3b82f6' },\n              { offset: 1, color: '#1d4ed8' }\n            ])\n          },\n          emphasis: {\n            itemStyle: {\n              color: new echarts.graphic.LinearGradient(0, 0, 0, 1, [\n                { offset: 0, color: '#60a5fa' },\n                { offset: 1, color: '#3b82f6' }\n              ])\n            }\n          }\n        }]\n      }\n      \n    case 'line':\n      return {\n        ...baseOption,\n        xAxis: {\n          type: 'category',\n          data: data.months || data.days || data.categories || [],\n          axisLine: {\n            lineStyle: { color: '#d1d5db' }\n          },\n          axisLabel: {\n            color: '#6b7280'\n          }\n        },\n        yAxis: {\n          type: 'value',\n          axisLine: {\n            lineStyle: { color: '#d1d5db' }\n          },\n          axisLabel: {\n            color: '#6b7280'\n          },\n          splitLine: {\n            lineStyle: { color: '#f3f4f6' }\n          }\n        },\n        series: [{\n          data: data.values || [],\n          type: 'line',\n          smooth: true,\n          lineStyle: {\n            color: '#8b5cf6',\n            width: 3\n          },\n          itemStyle: {\n            color: '#8b5cf6'\n          },\n          areaStyle: {\n            color: new echarts.graphic.LinearGradient(0, 0, 0, 1, [\n              { offset: 0, color: 'rgba(139, 92, 246, 0.3)' },\n              { offset: 1, color: 'rgba(139, 92, 246, 0.1)' }\n            ])\n          }\n        }]\n      }\n      \n    case 'pie':\n      chartHeight.value = 350\n      return {\n        ...baseOption,\n        tooltip: {\n          trigger: 'item',\n          formatter: '{a} <br/>{b}: {c}% ({d}%)',\n          backgroundColor: 'rgba(255, 255, 255, 0.9)',\n          borderColor: '#e5e7eb',\n          textStyle: {\n            color: '#374151'\n          }\n        },\n        legend: {\n          orient: 'vertical',\n          left: 'left',\n          textStyle: {\n            color: '#6b7280'\n          }\n        },\n        series: [{\n          name: '份额',\n          type: 'pie',\n          radius: ['40%', '70%'],\n          center: ['60%', '50%'],\n          data: data.map((item: any, index: number) => ({\n            ...item,\n            itemStyle: {\n              color: [\n                '#3b82f6', '#8b5cf6', '#06d6a0', '#ffd60a', \n                '#ff6b6b', '#4ecdc4', '#45b7d1', '#f9ca24'\n              ][index % 8]\n            }\n          })),\n          emphasis: {\n            itemStyle: {\n              shadowBlur: 10,\n              shadowOffsetX: 0,\n              shadowColor: 'rgba(0, 0, 0, 0.5)'\n            }\n          },\n          label: {\n            formatter: '{b}: {c}%'\n          }\n        }]\n      }\n      \n    case 'scatter':\n      return {\n        ...baseOption,\n        xAxis: {\n          type: 'value',\n          axisLine: {\n            lineStyle: { color: '#d1d5db' }\n          },\n          axisLabel: {\n            color: '#6b7280'\n          },\n          splitLine: {\n            lineStyle: { color: '#f3f4f6' }\n          }\n        },\n        yAxis: {\n          type: 'value',\n          axisLine: {\n            lineStyle: { color: '#d1d5db' }\n          },\n          axisLabel: {\n            color: '#6b7280'\n          },\n          splitLine: {\n            lineStyle: { color: '#f3f4f6' }\n          }\n        },\n        series: [{\n          data: data.points || [],\n          type: 'scatter',\n          itemStyle: {\n            color: '#06d6a0'\n          },\n          emphasis: {\n            itemStyle: {\n              color: '#04c2a0'\n            }\n          }\n        }]\n      }\n      \n    default:\n      return baseOption\n  }\n}\n\n// 初始化图表\nconst initChart = async () => {\n  await nextTick()\n  if (!chartContainer.value) return\n  \n  chartInstance.value = echarts.init(chartContainer.value)\n  const option = generateChartOption()\n  chartInstance.value.setOption(option)\n  \n  // 响应式调整\n  window.addEventListener('resize', handleResize)\n}\n\n// 处理窗口大小变化\nconst handleResize = () => {\n  if (chartInstance.value) {\n    chartInstance.value.resize()\n  }\n}\n\n// 销毁图表\nconst destroyChart = () => {\n  if (chartInstance.value) {\n    chartInstance.value.dispose()\n    chartInstance.value = undefined\n  }\n  window.removeEventListener('resize', handleResize)\n}\n\n// 监听数据变化\nwatch(() => props.data, () => {\n  if (chartInstance.value) {\n    const option = generateChartOption()\n    chartInstance.value.setOption(option, true)\n  }\n}, { deep: true })\n\n// 监听主题变化\nwatch(() => document.documentElement.getAttribute('data-theme'), (theme) => {\n  if (chartInstance.value) {\n    const option: any = generateChartOption()\n    // 根据主题调整颜色\n    if (theme === 'dark') {\n      option.textStyle = { color: '#e5e7eb' }\n      if (option.xAxis) {\n        option.xAxis.axisLine.lineStyle.color = '#4b5563'\n        option.xAxis.axisLabel.color = '#9ca3af'\n      }\n      if (option.yAxis) {\n        option.yAxis.axisLine.lineStyle.color = '#4b5563'\n        option.yAxis.axisLabel.color = '#9ca3af'\n        option.yAxis.splitLine.lineStyle.color = '#374151'\n      }\n      if (option.legend) {\n        option.legend.textStyle.color = '#9ca3af'\n      }\n    }\n    chartInstance.value.setOption(option, true)\n  }\n})\n\nonMounted(() => {\n  initChart()\n})\n\nonUnmounted(() => {\n  destroyChart()\n})\n</script>\n\n<style scoped>\n.echarts-renderer {\n  animation: fadeInScale 0.6s ease-out;\n}\n\n@keyframes fadeInScale {\n  from {\n    opacity: 0;\n    transform: scale(0.95);\n  }\n  to {\n    opacity: 1;\n    transform: scale(1);\n  }\n}\n</style>\n","/******************************************************************************\nCopyright (c) Microsoft Corporation.\n\nPermission to use, copy, modify, and/or distribute this software for any\npurpose with or without fee is hereby granted.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\nPERFORMANCE OF THIS SOFTWARE.\n***************************************************************************** */\n/* global Reflect, Promise, SuppressedError, Symbol, Iterator */\n\nvar extendStatics = function(d, b) {\n  extendStatics = Object.setPrototypeOf ||\n      ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n      function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n  return extendStatics(d, b);\n};\n\nexport function __extends(d, b) {\n  if (typeof b !== \"function\" && b !== null)\n      throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n  extendStatics(d, b);\n  function __() { this.constructor = d; }\n  d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n}\n\nexport var __assign = function() {\n  __assign = Object.assign || function __assign(t) {\n      for (var s, i = 1, n = arguments.length; i < n; i++) {\n          s = arguments[i];\n          for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\n      }\n      return t;\n  }\n  return __assign.apply(this, arguments);\n}\n\nexport function __rest(s, e) {\n  var t = {};\n  for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\n      t[p] = s[p];\n  if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\n      for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\n          if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\n              t[p[i]] = s[p[i]];\n      }\n  return t;\n}\n\nexport function __decorate(decorators, target, key, desc) {\n  var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n  if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n  else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n  return c > 3 && r && Object.defineProperty(target, key, r), r;\n}\n\nexport function __param(paramIndex, decorator) {\n  return function (target, key) { decorator(target, key, paramIndex); }\n}\n\nexport function __esDecorate(ctor, descriptorIn, decorators, contextIn, initializers, extraInitializers) {\n  function accept(f) { if (f !== void 0 && typeof f !== \"function\") throw new TypeError(\"Function expected\"); return f; }\n  var kind = contextIn.kind, key = kind === \"getter\" ? \"get\" : kind === \"setter\" ? \"set\" : \"value\";\n  var target = !descriptorIn && ctor ? contextIn[\"static\"] ? ctor : ctor.prototype : null;\n  var descriptor = descriptorIn || (target ? Object.getOwnPropertyDescriptor(target, contextIn.name) : {});\n  var _, done = false;\n  for (var i = decorators.length - 1; i >= 0; i--) {\n      var context = {};\n      for (var p in contextIn) context[p] = p === \"access\" ? {} : contextIn[p];\n      for (var p in contextIn.access) context.access[p] = contextIn.access[p];\n      context.addInitializer = function (f) { if (done) throw new TypeError(\"Cannot add initializers after decoration has completed\"); extraInitializers.push(accept(f || null)); };\n      var result = (0, decorators[i])(kind === \"accessor\" ? { get: descriptor.get, set: descriptor.set } : descriptor[key], context);\n      if (kind === \"accessor\") {\n          if (result === void 0) continue;\n          if (result === null || typeof result !== \"object\") throw new TypeError(\"Object expected\");\n          if (_ = accept(result.get)) descriptor.get = _;\n          if (_ = accept(result.set)) descriptor.set = _;\n          if (_ = accept(result.init)) initializers.unshift(_);\n      }\n      else if (_ = accept(result)) {\n          if (kind === \"field\") initializers.unshift(_);\n          else descriptor[key] = _;\n      }\n  }\n  if (target) Object.defineProperty(target, contextIn.name, descriptor);\n  done = true;\n};\n\nexport function __runInitializers(thisArg, initializers, value) {\n  var useValue = arguments.length > 2;\n  for (var i = 0; i < initializers.length; i++) {\n      value = useValue ? initializers[i].call(thisArg, value) : initializers[i].call(thisArg);\n  }\n  return useValue ? value : void 0;\n};\n\nexport function __propKey(x) {\n  return typeof x === \"symbol\" ? x : \"\".concat(x);\n};\n\nexport function __setFunctionName(f, name, prefix) {\n  if (typeof name === \"symbol\") name = name.description ? \"[\".concat(name.description, \"]\") : \"\";\n  return Object.defineProperty(f, \"name\", { configurable: true, value: prefix ? \"\".concat(prefix, \" \", name) : name });\n};\n\nexport function __metadata(metadataKey, metadataValue) {\n  if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(metadataKey, metadataValue);\n}\n\nexport function __awaiter(thisArg, _arguments, P, generator) {\n  function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n  return new (P || (P = Promise))(function (resolve, reject) {\n      function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n      function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n      function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n      step((generator = generator.apply(thisArg, _arguments || [])).next());\n  });\n}\n\nexport function __generator(thisArg, body) {\n  var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g = Object.create((typeof Iterator === \"function\" ? Iterator : Object).prototype);\n  return g.next = verb(0), g[\"throw\"] = verb(1), g[\"return\"] = verb(2), typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\n  function verb(n) { return function (v) { return step([n, v]); }; }\n  function step(op) {\n      if (f) throw new TypeError(\"Generator is already executing.\");\n      while (g && (g = 0, op[0] && (_ = 0)), _) try {\n          if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\n          if (y = 0, t) op = [op[0] & 2, t.value];\n          switch (op[0]) {\n              case 0: case 1: t = op; break;\n              case 4: _.label++; return { value: op[1], done: false };\n              case 5: _.label++; y = op[1]; op = [0]; continue;\n              case 7: op = _.ops.pop(); _.trys.pop(); continue;\n              default:\n                  if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\n                  if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\n                  if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\n                  if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\n                  if (t[2]) _.ops.pop();\n                  _.trys.pop(); continue;\n          }\n          op = body.call(thisArg, _);\n      } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\n      if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\n  }\n}\n\nexport var __createBinding = Object.create ? (function(o, m, k, k2) {\n  if (k2 === undefined) k2 = k;\n  var desc = Object.getOwnPropertyDescriptor(m, k);\n  if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\n      desc = { enumerable: true, get: function() { return m[k]; } };\n  }\n  Object.defineProperty(o, k2, desc);\n}) : (function(o, m, k, k2) {\n  if (k2 === undefined) k2 = k;\n  o[k2] = m[k];\n});\n\nexport function __exportStar(m, o) {\n  for (var p in m) if (p !== \"default\" && !Object.prototype.hasOwnProperty.call(o, p)) __createBinding(o, m, p);\n}\n\nexport function __values(o) {\n  var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\n  if (m) return m.call(o);\n  if (o && typeof o.length === \"number\") return {\n      next: function () {\n          if (o && i >= o.length) o = void 0;\n          return { value: o && o[i++], done: !o };\n      }\n  };\n  throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\n}\n\nexport function __read(o, n) {\n  var m = typeof Symbol === \"function\" && o[Symbol.iterator];\n  if (!m) return o;\n  var i = m.call(o), r, ar = [], e;\n  try {\n      while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\n  }\n  catch (error) { e = { error: error }; }\n  finally {\n      try {\n          if (r && !r.done && (m = i[\"return\"])) m.call(i);\n      }\n      finally { if (e) throw e.error; }\n  }\n  return ar;\n}\n\n/** @deprecated */\nexport function __spread() {\n  for (var ar = [], i = 0; i < arguments.length; i++)\n      ar = ar.concat(__read(arguments[i]));\n  return ar;\n}\n\n/** @deprecated */\nexport function __spreadArrays() {\n  for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;\n  for (var r = Array(s), k = 0, i = 0; i < il; i++)\n      for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)\n          r[k] = a[j];\n  return r;\n}\n\nexport function __spreadArray(to, from, pack) {\n  if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {\n      if (ar || !(i in from)) {\n          if (!ar) ar = Array.prototype.slice.call(from, 0, i);\n          ar[i] = from[i];\n      }\n  }\n  return to.concat(ar || Array.prototype.slice.call(from));\n}\n\nexport function __await(v) {\n  return this instanceof __await ? (this.v = v, this) : new __await(v);\n}\n\nexport function __asyncGenerator(thisArg, _arguments, generator) {\n  if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\n  var g = generator.apply(thisArg, _arguments || []), i, q = [];\n  return i = Object.create((typeof AsyncIterator === \"function\" ? AsyncIterator : Object).prototype), verb(\"next\"), verb(\"throw\"), verb(\"return\", awaitReturn), i[Symbol.asyncIterator] = function () { return this; }, i;\n  function awaitReturn(f) { return function (v) { return Promise.resolve(v).then(f, reject); }; }\n  function verb(n, f) { if (g[n]) { i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; if (f) i[n] = f(i[n]); } }\n  function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }\n  function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }\n  function fulfill(value) { resume(\"next\", value); }\n  function reject(value) { resume(\"throw\", value); }\n  function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }\n}\n\nexport function __asyncDelegator(o) {\n  var i, p;\n  return i = {}, verb(\"next\"), verb(\"throw\", function (e) { throw e; }), verb(\"return\"), i[Symbol.iterator] = function () { return this; }, i;\n  function verb(n, f) { i[n] = o[n] ? function (v) { return (p = !p) ? { value: __await(o[n](v)), done: false } : f ? f(v) : v; } : f; }\n}\n\nexport function __asyncValues(o) {\n  if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\n  var m = o[Symbol.asyncIterator], i;\n  return m ? m.call(o) : (o = typeof __values === \"function\" ? __values(o) : o[Symbol.iterator](), i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i);\n  function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }\n  function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }\n}\n\nexport function __makeTemplateObject(cooked, raw) {\n  if (Object.defineProperty) { Object.defineProperty(cooked, \"raw\", { value: raw }); } else { cooked.raw = raw; }\n  return cooked;\n};\n\nvar __setModuleDefault = Object.create ? (function(o, v) {\n  Object.defineProperty(o, \"default\", { enumerable: true, value: v });\n}) : function(o, v) {\n  o[\"default\"] = v;\n};\n\nvar ownKeys = function(o) {\n  ownKeys = Object.getOwnPropertyNames || function (o) {\n    var ar = [];\n    for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;\n    return ar;\n  };\n  return ownKeys(o);\n};\n\nexport function __importStar(mod) {\n  if (mod && mod.__esModule) return mod;\n  var result = {};\n  if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== \"default\") __createBinding(result, mod, k[i]);\n  __setModuleDefault(result, mod);\n  return result;\n}\n\nexport function __importDefault(mod) {\n  return (mod && mod.__esModule) ? mod : { default: mod };\n}\n\nexport function __classPrivateFieldGet(receiver, state, kind, f) {\n  if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a getter\");\n  if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot read private member from an object whose class did not declare it\");\n  return kind === \"m\" ? f : kind === \"a\" ? f.call(receiver) : f ? f.value : state.get(receiver);\n}\n\nexport function __classPrivateFieldSet(receiver, state, value, kind, f) {\n  if (kind === \"m\") throw new TypeError(\"Private method is not writable\");\n  if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a setter\");\n  if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot write private member to an object whose class did not declare it\");\n  return (kind === \"a\" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;\n}\n\nexport function __classPrivateFieldIn(state, receiver) {\n  if (receiver === null || (typeof receiver !== \"object\" && typeof receiver !== \"function\")) throw new TypeError(\"Cannot use 'in' operator on non-object\");\n  return typeof state === \"function\" ? receiver === state : state.has(receiver);\n}\n\nexport function __addDisposableResource(env, value, async) {\n  if (value !== null && value !== void 0) {\n    if (typeof value !== \"object\" && typeof value !== \"function\") throw new TypeError(\"Object expected.\");\n    var dispose, inner;\n    if (async) {\n      if (!Symbol.asyncDispose) throw new TypeError(\"Symbol.asyncDispose is not defined.\");\n      dispose = value[Symbol.asyncDispose];\n    }\n    if (dispose === void 0) {\n      if (!Symbol.dispose) throw new TypeError(\"Symbol.dispose is not defined.\");\n      dispose = value[Symbol.dispose];\n      if (async) inner = dispose;\n    }\n    if (typeof dispose !== \"function\") throw new TypeError(\"Object not disposable.\");\n    if (inner) dispose = function() { try { inner.call(this); } catch (e) { return Promise.reject(e); } };\n    env.stack.push({ value: value, dispose: dispose, async: async });\n  }\n  else if (async) {\n    env.stack.push({ async: true });\n  }\n  return value;\n}\n\nvar _SuppressedError = typeof SuppressedError === \"function\" ? SuppressedError : function (error, suppressed, message) {\n  var e = new Error(message);\n  return e.name = \"SuppressedError\", e.error = error, e.suppressed = suppressed, e;\n};\n\nexport function __disposeResources(env) {\n  function fail(e) {\n    env.error = env.hasError ? new _SuppressedError(e, env.error, \"An error was suppressed during disposal.\") : e;\n    env.hasError = true;\n  }\n  var r, s = 0;\n  function next() {\n    while (r = env.stack.pop()) {\n      try {\n        if (!r.async && s === 1) return s = 0, env.stack.push(r), Promise.resolve().then(next);\n        if (r.dispose) {\n          var result = r.dispose.call(r.value);\n          if (r.async) return s |= 2, Promise.resolve(result).then(next, function(e) { fail(e); return next(); });\n        }\n        else s |= 1;\n      }\n      catch (e) {\n        fail(e);\n      }\n    }\n    if (s === 1) return env.hasError ? Promise.reject(env.error) : Promise.resolve();\n    if (env.hasError) throw env.error;\n  }\n  return next();\n}\n\nexport function __rewriteRelativeImportExtension(path, preserveJsx) {\n  if (typeof path === \"string\" && /^\\.\\.?\\//.test(path)) {\n      return path.replace(/\\.(tsx)$|((?:\\.d)?)((?:\\.[^./]+?)?)\\.([cm]?)ts$/i, function (m, tsx, d, ext, cm) {\n          return tsx ? preserveJsx ? \".jsx\" : \".js\" : d && (!ext || !cm) ? m : (d + ext + \".\" + cm.toLowerCase() + \"js\");\n      });\n  }\n  return path;\n}\n\nexport default {\n  __extends,\n  __assign,\n  __rest,\n  __decorate,\n  __param,\n  __esDecorate,\n  __runInitializers,\n  __propKey,\n  __setFunctionName,\n  __metadata,\n  __awaiter,\n  __generator,\n  __createBinding,\n  __exportStar,\n  __values,\n  __read,\n  __spread,\n  __spreadArrays,\n  __spreadArray,\n  __await,\n  __asyncGenerator,\n  __asyncDelegator,\n  __asyncValues,\n  __makeTemplateObject,\n  __importStar,\n  __importDefault,\n  __classPrivateFieldGet,\n  __classPrivateFieldSet,\n  __classPrivateFieldIn,\n  __addDisposableResource,\n  __disposeResources,\n  __rewriteRelativeImportExtension,\n};\n","var isArrayLike = function (value) {\n    /**\n     * isArrayLike([1, 2, 3]) => true\n     * isArrayLike(document.body.children) => true\n     * isArrayLike('abc') => true\n     * isArrayLike(Function) => false\n     */\n    return value !== null && typeof value !== 'function' && isFinite(value.length);\n};\nexport default isArrayLike;\n//# sourceMappingURL=is-array-like.js.map","import isArrayLike from './is-array-like';\nvar contains = function (arr, value) {\n    if (!isArrayLike(arr)) {\n        return false;\n    }\n    return arr.indexOf(value) > -1;\n};\nexport default contains;\n//# sourceMappingURL=contains.js.map","import isArrayLike from './is-array-like';\nvar filter = function (arr, func) {\n    if (!isArrayLike(arr)) {\n        return arr;\n    }\n    var result = [];\n    for (var index = 0; index < arr.length; index++) {\n        var value = arr[index];\n        if (func(value, index)) {\n            result.push(value);\n        }\n    }\n    return result;\n};\nexport default filter;\n//# sourceMappingURL=filter.js.map","var toString = {}.toString;\nvar isType = function (value, type) { return toString.call(value) === '[object ' + type + ']'; };\nexport default isType;\n//# sourceMappingURL=is-type.js.map","/**\n * 是否为函数\n * @param  {*} fn 对象\n * @return {Boolean}  是否函数\n */\nimport isType from './is-type';\nexport default (function (value) {\n    return isType(value, 'Function');\n});\n//# sourceMappingURL=is-function.js.map","// isFinite,\nvar isNil = function (value) {\n    /**\n     * isNil(null) => true\n     * isNil() => true\n     */\n    return value === null || value === undefined;\n};\nexport default isNil;\n//# sourceMappingURL=is-nil.js.map","import isType from './is-type';\nexport default (function (value) {\n    return Array.isArray ?\n        Array.isArray(value) :\n        isType(value, 'Array');\n});\n//# sourceMappingURL=is-array.js.map","export default (function (value) {\n    /**\n     * isObject({}) => true\n     * isObject([1, 2, 3]) => true\n     * isObject(Function) => true\n     * isObject(null) => false\n     */\n    var type = typeof value;\n    return value !== null && type === 'object' || type === 'function';\n});\n//# sourceMappingURL=is-object.js.map","import isArray from './is-array';\nimport isObject from './is-object';\nfunction each(elements, func) {\n    if (!elements) {\n        return;\n    }\n    var rst;\n    if (isArray(elements)) {\n        for (var i = 0, len = elements.length; i < len; i++) {\n            rst = func(elements[i], i);\n            if (rst === false) {\n                break;\n            }\n        }\n    }\n    else if (isObject(elements)) {\n        for (var k in elements) {\n            if (elements.hasOwnProperty(k)) {\n                rst = func(elements[k], k);\n                if (rst === false) {\n                    break;\n                }\n            }\n        }\n    }\n}\nexport default each;\n//# sourceMappingURL=each.js.map","import each from './each';\nimport isFunction from './is-function';\nvar keys = Object.keys ? function (obj) { return Object.keys(obj); } : function (obj) {\n    var result = [];\n    each(obj, function (value, key) {\n        if (!(isFunction(obj) && key === 'prototype')) {\n            result.push(key);\n        }\n    });\n    return result;\n};\nexport default keys;\n//# sourceMappingURL=keys.js.map","import isNil from './is-nil';\nimport keys from './keys';\nfunction isMatch(obj, attrs) {\n    var _keys = keys(attrs);\n    var length = _keys.length;\n    if (isNil(obj))\n        return !length;\n    for (var i = 0; i < length; i += 1) {\n        var key = _keys[i];\n        if (attrs[key] !== obj[key] || !(key in obj)) {\n            return false;\n        }\n    }\n    return true;\n}\nexport default isMatch;\n//# sourceMappingURL=is-match.js.map","var isObjectLike = function (value) {\n    /**\n     * isObjectLike({}) => true\n     * isObjectLike([1, 2, 3]) => true\n     * isObjectLike(Function) => false\n     * isObjectLike(null) => false\n     */\n    return typeof value === 'object' && value !== null;\n};\nexport default isObjectLike;\n//# sourceMappingURL=is-object-like.js.map","import isObjectLike from './is-object-like';\nimport isType from './is-type';\nvar isPlainObject = function (value) {\n    /**\n     * isObjectLike(new Foo) => false\n     * isObjectLike([1, 2, 3]) => false\n     * isObjectLike({ x: 0, y: 0 }) => true\n     * isObjectLike(Object.create(null)) => true\n     */\n    if (!isObjectLike(value) || !isType(value, 'Object')) {\n        return false;\n    }\n    if (Object.getPrototypeOf(value) === null) {\n        return true;\n    }\n    var proto = value;\n    while (Object.getPrototypeOf(proto) !== null) {\n        proto = Object.getPrototypeOf(proto);\n    }\n    return Object.getPrototypeOf(value) === proto;\n};\nexport default isPlainObject;\n//# sourceMappingURL=is-plain-object.js.map","import isFunction from './is-function';\nimport isMatch from './is-match';\nimport isArray from './is-array';\nimport isPlainObject from './is-plain-object';\nfunction find(arr, predicate) {\n    if (!isArray(arr))\n        return null;\n    var _predicate;\n    if (isFunction(predicate)) {\n        _predicate = predicate;\n    }\n    if (isPlainObject(predicate)) {\n        _predicate = function (a) { return isMatch(a, predicate); };\n    }\n    if (_predicate) {\n        for (var i = 0; i < arr.length; i += 1) {\n            if (_predicate(arr[i])) {\n                return arr[i];\n            }\n        }\n    }\n    return null;\n}\nexport default find;\n//# sourceMappingURL=find.js.map","function findIndex(arr, predicate, fromIndex) {\n    if (fromIndex === void 0) { fromIndex = 0; }\n    for (var i = fromIndex; i < arr.length; i++) {\n        if (predicate(arr[i], i)) {\n            // 找到终止循环\n            return i;\n        }\n    }\n    return -1;\n}\nexport default findIndex;\n//# sourceMappingURL=find-index.js.map","import isNil from './is-nil';\nimport isArray from './is-array';\nvar firstValue = function (data, name) {\n    var rst = null;\n    for (var i = 0; i < data.length; i++) {\n        var obj = data[i];\n        var value = obj[name];\n        if (!isNil(value)) {\n            if (isArray(value)) {\n                rst = value[0]; // todo 这里是否应该使用递归，调用 firstValue @绝云\n            }\n            else {\n                rst = value;\n            }\n            break;\n        }\n    }\n    return rst;\n};\nexport default firstValue;\n//# sourceMappingURL=first-value.js.map","import isArray from './is-array';\n/**\n * Flattens `array` a single level deep.\n *\n * @param {Array} arr The array to flatten.\n * @return {Array} Returns the new flattened array.\n * @example\n *\n * flatten([1, [2, [3, [4]], 5]]);  // => [1, 2, [3, [4]], 5]\n */\nvar flatten = function (arr) {\n    if (!isArray(arr)) {\n        return [];\n    }\n    var rst = [];\n    for (var i = 0; i < arr.length; i++) {\n        rst = rst.concat(arr[i]);\n    }\n    return rst;\n};\nexport default flatten;\n//# sourceMappingURL=flatten.js.map","import isArray from './is-array';\n/**\n * @param {Array} arr The array to iterate over.\n * @return {*} Returns the maximum value.\n * @example\n *\n * max([1, 2]);\n * // => 2\n *\n * max([]);\n * // => undefined\n *\n * const data = new Array(1250010).fill(1).map((d,idx) => idx);\n *\n * max(data);\n * // => 1250010\n * // Math.max(...data) will encounter \"Maximum call stack size exceeded\" error\n */\nexport default (function (arr) {\n    if (!isArray(arr)) {\n        return undefined;\n    }\n    return arr.reduce(function (prev, curr) {\n        return Math.max(prev, curr);\n    }, arr[0]);\n});\n//# sourceMappingURL=max.js.map","import isArray from './is-array';\n/**\n * @param {Array} arr The array to iterate over.\n * @return {*} Returns the minimum value.\n * @example\n *\n * min([1, 2]);\n * // => 1\n *\n * min([]);\n * // => undefined\n *\n * const data = new Array(1250010).fill(1).map((d,idx) => idx);\n *\n * min(data);\n * // => 1250010\n * // Math.min(...data) will encounter \"Maximum call stack size exceeded\" error\n */\nexport default (function (arr) {\n    if (!isArray(arr)) {\n        return undefined;\n    }\n    return arr.reduce(function (prev, curr) {\n        return Math.min(prev, curr);\n    }, arr[0]);\n});\n//# sourceMappingURL=min.js.map","import isArray from './is-array';\nimport { default as getMax } from './max';\nimport { default as getMin } from './min';\nvar getRange = function (values) {\n    // 存在 NaN 时，min,max 判定会出问题\n    var filterValues = values.filter(function (v) { return !isNaN(v); });\n    if (!filterValues.length) {\n        // 如果没有数值则直接返回0\n        return {\n            min: 0,\n            max: 0,\n        };\n    }\n    if (isArray(values[0])) {\n        var tmp = [];\n        for (var i = 0; i < values.length; i++) {\n            tmp = tmp.concat(values[i]);\n        }\n        filterValues = tmp;\n    }\n    var max = getMax(filterValues);\n    var min = getMin(filterValues);\n    return {\n        min: min,\n        max: max,\n    };\n};\nexport default getRange;\n//# sourceMappingURL=get-range.js.map","import isArrayLike from './is-array-like';\nvar splice = Array.prototype.splice;\nvar pullAt = function pullAt(arr, indexes) {\n    if (!isArrayLike(arr)) {\n        return [];\n    }\n    var length = arr ? indexes.length : 0;\n    var last = length - 1;\n    while (length--) {\n        var previous = void 0;\n        var index = indexes[length];\n        if (length === last || index !== previous) {\n            previous = index;\n            splice.call(arr, index, 1);\n        }\n    }\n    return arr;\n};\nexport default pullAt;\n//# sourceMappingURL=pull-at.js.map","import each from './each';\nimport isArray from './is-array';\nimport isPlainObject from './is-plain-object';\nvar reduce = function (arr, fn, init) {\n    if (!isArray(arr) && !isPlainObject(arr)) {\n        return arr;\n    }\n    var result = init;\n    each(arr, function (data, i) {\n        result = fn(result, data, i);\n    });\n    return result;\n};\nexport default reduce;\n//# sourceMappingURL=reduce.js.map","import isArrayLike from './is-array-like';\nimport pullAt from './pull-at';\nvar remove = function (arr, predicate) {\n    /**\n     * const arr = [1, 2, 3, 4]\n     * const evens = remove(arr, n => n % 2 == 0)\n     * console.log(arr) // => [1, 3]\n     * console.log(evens) // => [2, 4]\n     */\n    var result = [];\n    if (!isArrayLike(arr)) {\n        return result;\n    }\n    var i = -1;\n    var indexes = [];\n    var length = arr.length;\n    while (++i < length) {\n        var value = arr[i];\n        if (predicate(value, i, arr)) {\n            result.push(value);\n            indexes.push(i);\n        }\n    }\n    pullAt(arr, indexes);\n    return result;\n};\nexport default remove;\n//# sourceMappingURL=remove.js.map","import isType from './is-type';\nexport default (function (str) {\n    return isType(str, 'String');\n});\n//# sourceMappingURL=is-string.js.map","export default function uniq(arr, cache) {\n    if (cache === void 0) { cache = new Map(); }\n    var r = [];\n    if (Array.isArray(arr)) {\n        for (var i = 0, len = arr.length; i < len; i++) {\n            var item = arr[i];\n            // 加一个 cache，提升性能\n            if (!cache.has(item)) {\n                r.push(item);\n                cache.set(item, true);\n            }\n        }\n    }\n    return r;\n}\n//# sourceMappingURL=uniq.js.map","import isArray from './is-array';\nimport isNil from './is-nil';\nexport default (function (data, name) {\n    var rst = [];\n    var tmpMap = {};\n    for (var i = 0; i < data.length; i++) {\n        var obj = data[i];\n        var value = obj[name];\n        if (!isNil(value)) {\n            // flatten\n            if (!isArray(value)) {\n                value = [value];\n            }\n            for (var j = 0; j < value.length; j++) {\n                var val = value[j];\n                // unique\n                if (!tmpMap[val]) {\n                    rst.push(val);\n                    tmpMap[val] = true;\n                }\n            }\n        }\n    }\n    return rst;\n});\n//# sourceMappingURL=values-of-key.js.map","import isArrayLike from './is-array-like';\nexport default function head(o) {\n    if (isArrayLike(o)) {\n        return o[0];\n    }\n    return undefined;\n}\n//# sourceMappingURL=head.js.map","import isArrayLike from './is-array-like';\nexport default function last(o) {\n    if (isArrayLike(o)) {\n        var arr = o;\n        return arr[arr.length - 1];\n    }\n    return undefined;\n}\n//# sourceMappingURL=last.js.map","/**\n * 只要有一个不满足条件就返回 false\n * @param arr\n * @param func\n */\nvar every = function (arr, func) {\n    for (var i = 0; i < arr.length; i++) {\n        if (!func(arr[i], i))\n            return false;\n    }\n    return true;\n};\nexport default every;\n//# sourceMappingURL=every.js.map","/**\n * 只要有一个满足条件就返回 true\n * @param arr\n * @param func\n */\nvar some = function (arr, func) {\n    for (var i = 0; i < arr.length; i++) {\n        if (func(arr[i], i))\n            return true;\n    }\n    return false;\n};\nexport default some;\n//# sourceMappingURL=some.js.map","import isArray from './is-array';\nimport isFunction from './is-function';\nvar hasOwnProperty = Object.prototype.hasOwnProperty;\nfunction groupBy(data, condition) {\n    if (!condition || !isArray(data)) {\n        return {};\n    }\n    var result = {};\n    // 兼容方法和 字符串的写法\n    var predicate = isFunction(condition) ? condition : function (item) { return item[condition]; };\n    var key;\n    for (var i = 0; i < data.length; i++) {\n        var item = data[i];\n        key = predicate(item);\n        if (hasOwnProperty.call(result, key)) {\n            result[key].push(item);\n        }\n        else {\n            result[key] = [item];\n        }\n    }\n    return result;\n}\nexport default groupBy;\n//# sourceMappingURL=group-by.js.map","var clamp = function (a, min, max) {\n    if (a < min) {\n        return min;\n    }\n    else if (a > max) {\n        return max;\n    }\n    return a;\n};\nexport default clamp;\n//# sourceMappingURL=clamp.js.map","var fixedBase = function (v, base) {\n    var str = base.toString();\n    var index = str.indexOf('.');\n    if (index === -1) {\n        return Math.round(v);\n    }\n    var length = str.substr(index + 1).length;\n    if (length > 20) {\n        length = 20;\n    }\n    return parseFloat(v.toFixed(length));\n};\nexport default fixedBase;\n//# sourceMappingURL=fixed-base.js.map","/**\n * 判断是否数字\n * @return {Boolean} 是否数字\n */\nimport isType from './is-type';\nvar isNumber = function (value) {\n    return isType(value, 'Number');\n};\nexport default isNumber;\n//# sourceMappingURL=is-number.js.map","var PRECISION = 0.00001; // numbers less than this is considered as 0\nexport default function isNumberEqual(a, b, precision) {\n    if (precision === void 0) { precision = PRECISION; }\n    return Math.abs((a - b)) < precision;\n}\n;\n//# sourceMappingURL=is-number-equal.js.map","import isArray from './is-array';\nimport isFunction from './is-function';\n/**\n * @param {Array} arr The array to iterate over.\n * @param {Function} [fn] The iteratee invoked per element.\n * @return {*} Returns the maximum value.\n * @example\n *\n * var objects = [{ 'n': 1 }, { 'n': 2 }];\n *\n * maxBy(objects, function(o) { return o.n; });\n * // => { 'n': 2 }\n *\n * maxBy(objects, 'n');\n * // => { 'n': 2 }\n */\nexport default (function (arr, fn) {\n    if (!isArray(arr)) {\n        return undefined;\n    }\n    var maxItem;\n    var max = -Infinity;\n    for (var i = 0; i < arr.length; i++) {\n        var item = arr[i];\n        var v = isFunction(fn) ? fn(item) : item[fn];\n        if (v > max) {\n            maxItem = item;\n            max = v;\n        }\n    }\n    return maxItem;\n});\n//# sourceMappingURL=max-by.js.map","var mod = function (n, m) {\n    return ((n % m) + m) % m;\n};\nexport default mod;\n//# sourceMappingURL=mod.js.map","var RADIAN = Math.PI / 180;\nvar toRadian = function (degree) {\n    return RADIAN * degree;\n};\nexport default toRadian;\n//# sourceMappingURL=to-radian.js.map","export default (function (obj, key) { return obj.hasOwnProperty(key); });\n//# sourceMappingURL=has.js.map","import each from './each';\nimport isFunction from './is-function';\n// @ts-ignore\nvar values = Object.values ? function (obj) { return Object.values(obj); } : function (obj) {\n    var result = [];\n    each(obj, function (value, key) {\n        if (!(isFunction(obj) && key === 'prototype')) {\n            result.push(value);\n        }\n    });\n    return result;\n};\nexport default values;\n//# sourceMappingURL=values.js.map","import isNil from './is-nil';\nexport default (function (value) {\n    if (isNil(value))\n        return '';\n    return value.toString();\n});\n//# sourceMappingURL=to-string.js.map","import toString from './to-string';\nvar lowerCase = function (str) {\n    return toString(str).toLowerCase();\n};\nexport default lowerCase;\n//# sourceMappingURL=lower-case.js.map","function substitute(str, o) {\n    if (!str || !o) {\n        return str;\n    }\n    return str.replace(/\\\\?\\{([^{}]+)\\}/g, function (match, name) {\n        if (match.charAt(0) === '\\\\') {\n            return match.slice(1);\n        }\n        return (o[name] === undefined) ? '' : o[name];\n    });\n}\nexport default substitute;\n//# sourceMappingURL=substitute.js.map","import toString from './to-string';\nvar upperFirst = function (value) {\n    var str = toString(value);\n    return str.charAt(0).toUpperCase() + str.substring(1);\n};\nexport default upperFirst;\n//# sourceMappingURL=upper-first.js.map","var toString = {}.toString;\nvar getType = function (value) {\n    return toString.call(value).replace(/^\\[object /, '').replace(/]$/, '');\n};\nexport default getType;\n//# sourceMappingURL=get-type.js.map","/**\n * 是否是布尔类型\n *\n * @param {Object} value 测试的值\n * @return {Boolean}\n */\nimport isType from './is-type';\nvar isBoolean = function (value) {\n    return isType(value, 'Boolean');\n};\nexport default isBoolean;\n//# sourceMappingURL=is-boolean.js.map","import isType from './is-type';\nvar isDate = function (value) {\n    return isType(value, 'Date');\n};\nexport default isDate;\n//# sourceMappingURL=is-date.js.map","var objectProto = Object.prototype;\nvar isPrototype = function (value) {\n    var Ctor = value && value.constructor;\n    var proto = (typeof Ctor === 'function' && Ctor.prototype) || objectProto;\n    return value === proto;\n};\nexport default isPrototype;\n//# sourceMappingURL=is-prototype.js.map","var isUndefined = function (value) {\n    return value === undefined;\n};\nexport default isUndefined;\n//# sourceMappingURL=is-undefined.js.map","/**\n * 判断是否HTML元素\n * @return {Boolean} 是否HTML元素\n */\nvar isElement = function (o) {\n    return o instanceof Element || o instanceof HTMLDocument;\n};\nexport default isElement;\n//# sourceMappingURL=is-element.js.map","// FIXME: Mutable param should be forbidden in static lang.\nfunction _mix(dist, obj) {\n    for (var key in obj) {\n        if (obj.hasOwnProperty(key) && key !== 'constructor' && obj[key] !== undefined) {\n            dist[key] = obj[key];\n        }\n    }\n}\nexport default function mix(dist, src1, src2, src3) {\n    if (src1)\n        _mix(dist, src1);\n    if (src2)\n        _mix(dist, src2);\n    if (src3)\n        _mix(dist, src3);\n    return dist;\n}\n//# sourceMappingURL=mix.js.map","import isArray from './is-array';\nvar clone = function (obj) {\n    if (typeof obj !== 'object' || obj === null) {\n        return obj;\n    }\n    var rst;\n    if (isArray(obj)) {\n        rst = [];\n        for (var i = 0, l = obj.length; i < l; i++) {\n            if (typeof obj[i] === 'object' && obj[i] != null) {\n                rst[i] = clone(obj[i]);\n            }\n            else {\n                rst[i] = obj[i];\n            }\n        }\n    }\n    else {\n        rst = {};\n        for (var k in obj) {\n            if (typeof obj[k] === 'object' && obj[k] != null) {\n                rst[k] = clone(obj[k]);\n            }\n            else {\n                rst[k] = obj[k];\n            }\n        }\n    }\n    return rst;\n};\nexport default clone;\n//# sourceMappingURL=clone.js.map","function debounce(func, wait, immediate) {\n    var timeout;\n    return function () {\n        var context = this, args = arguments;\n        var later = function () {\n            timeout = null;\n            if (!immediate) {\n                func.apply(context, args);\n            }\n        };\n        var callNow = immediate && !timeout;\n        clearTimeout(timeout);\n        timeout = setTimeout(later, wait);\n        if (callNow) {\n            func.apply(context, args);\n        }\n    };\n}\nexport default debounce;\n//# sourceMappingURL=debounce.js.map","import isFunction from './is-function';\n/**\n * _.memoize(calColor);\n * _.memoize(calColor, (...args) => args[0]);\n * @param f\n * @param resolver\n */\nexport default (function (f, resolver) {\n    if (!isFunction(f)) {\n        throw new TypeError('Expected a function');\n    }\n    var memoized = function () {\n        var args = [];\n        for (var _i = 0; _i < arguments.length; _i++) {\n            args[_i] = arguments[_i];\n        }\n        // 使用方法构造 key，如果不存在 resolver，则直接取第一个参数作为 key\n        var key = resolver ? resolver.apply(this, args) : args[0];\n        var cache = memoized.cache;\n        if (cache.has(key)) {\n            return cache.get(key);\n        }\n        var result = f.apply(this, args);\n        // 缓存起来\n        cache.set(key, result);\n        return result;\n    };\n    memoized.cache = new Map();\n    return memoized;\n});\n//# sourceMappingURL=memoize.js.map","import isArray from './is-array';\nimport isPlainObject from './is-plain-object';\nvar MAX_MIX_LEVEL = 5;\nfunction _deepMix(dist, src, level, maxLevel) {\n    level = level || 0;\n    maxLevel = maxLevel || MAX_MIX_LEVEL;\n    for (var key in src) {\n        if (src.hasOwnProperty(key)) {\n            var value = src[key];\n            if (value !== null && isPlainObject(value)) {\n                if (!isPlainObject(dist[key])) {\n                    dist[key] = {};\n                }\n                if (level < maxLevel) {\n                    _deepMix(dist[key], value, level + 1, maxLevel);\n                }\n                else {\n                    dist[key] = src[key];\n                }\n            }\n            else if (isArray(value)) {\n                dist[key] = [];\n                dist[key] = dist[key].concat(value);\n            }\n            else if (value !== undefined) {\n                dist[key] = value;\n            }\n        }\n    }\n}\n// todo 重写\nvar deepMix = function (rst) {\n    var args = [];\n    for (var _i = 1; _i < arguments.length; _i++) {\n        args[_i - 1] = arguments[_i];\n    }\n    for (var i = 0; i < args.length; i += 1) {\n        _deepMix(rst, args[i]);\n    }\n    return rst;\n};\nexport default deepMix;\n//# sourceMappingURL=deep-mix.js.map","import isArrayLike from './is-array-like';\nvar indexOf = function (arr, obj) {\n    if (!isArrayLike(arr)) {\n        return -1;\n    }\n    var m = Array.prototype.indexOf;\n    if (m) {\n        return m.call(arr, obj);\n    }\n    var index = -1;\n    for (var i = 0; i < arr.length; i++) {\n        if (arr[i] === obj) {\n            index = i;\n            break;\n        }\n    }\n    return index;\n};\nexport default indexOf;\n//# sourceMappingURL=index-of.js.map","import isNil from './is-nil';\nimport isArrayLike from './is-array-like';\nimport getType from './get-type';\nimport isPrototype from './is-prototype';\nvar hasOwnProperty = Object.prototype.hasOwnProperty;\nfunction isEmpty(value) {\n    /**\n     * isEmpty(null) => true\n     * isEmpty() => true\n     * isEmpty(true) => true\n     * isEmpty(1) => true\n     * isEmpty([1, 2, 3]) => false\n     * isEmpty('abc') => false\n     * isEmpty({ a: 1 }) => false\n     */\n    if (isNil(value)) {\n        return true;\n    }\n    if (isArrayLike(value)) {\n        return !value.length;\n    }\n    var type = getType(value);\n    if (type === 'Map' || type === 'Set') {\n        return !value.size;\n    }\n    if (isPrototype(value)) {\n        return !Object.keys(value).length;\n    }\n    for (var key in value) {\n        if (hasOwnProperty.call(value, key)) {\n            return false;\n        }\n    }\n    return true;\n}\nexport default isEmpty;\n//# sourceMappingURL=is-empty.js.map","import isObjectLike from './is-object-like';\nimport isArrayLike from './is-array-like';\nimport isString from './is-string';\nvar isEqual = function (value, other) {\n    if (value === other) {\n        return true;\n    }\n    if (!value || !other) {\n        return false;\n    }\n    if (isString(value) || isString(other)) {\n        return false;\n    }\n    if (isArrayLike(value) || isArrayLike(other)) {\n        if (value.length !== other.length) {\n            return false;\n        }\n        var rst = true;\n        for (var i = 0; i < value.length; i++) {\n            rst = isEqual(value[i], other[i]);\n            if (!rst) {\n                break;\n            }\n        }\n        return rst;\n    }\n    if (isObjectLike(value) || isObjectLike(other)) {\n        var valueKeys = Object.keys(value);\n        var otherKeys = Object.keys(other);\n        if (valueKeys.length !== otherKeys.length) {\n            return false;\n        }\n        var rst = true;\n        for (var i = 0; i < valueKeys.length; i++) {\n            rst = isEqual(value[valueKeys[i]], other[valueKeys[i]]);\n            if (!rst) {\n                break;\n            }\n        }\n        return rst;\n    }\n    return false;\n};\nexport default isEqual;\n//# sourceMappingURL=is-equal.js.map","import isArrayLike from './is-array-like';\nvar map = function (arr, func) {\n    if (!isArrayLike(arr)) {\n        // @ts-ignore\n        return arr;\n    }\n    var result = [];\n    for (var index = 0; index < arr.length; index++) {\n        var value = arr[index];\n        result.push(func(value, index));\n    }\n    return result;\n};\nexport default map;\n//# sourceMappingURL=map.js.map","import isString from './is-string';\n/**\n * https://github.com/developit/dlv/blob/master/index.js\n * @param obj\n * @param key\n * @param defaultValue\n */\nexport default (function (obj, key, defaultValue) {\n    var p = 0;\n    var keyArr = isString(key) ? key.split('.') : key;\n    while (obj && p < keyArr.length) {\n        obj = obj[keyArr[p++]];\n    }\n    return (obj === undefined || p < keyArr.length) ? defaultValue : obj;\n});\n//# sourceMappingURL=get.js.map","import isObject from './is-object';\nimport isString from './is-string';\nimport isNumber from './is-number';\n/**\n * https://github.com/developit/dlv/blob/master/index.js\n * @param obj\n * @param path\n * @param value\n */\nexport default (function (obj, path, value) {\n    var o = obj;\n    var keyArr = isString(path) ? path.split('.') : path;\n    keyArr.forEach(function (key, idx) {\n        // 不是最后一个\n        if (idx < keyArr.length - 1) {\n            if (!isObject(o[key])) {\n                o[key] = isNumber(keyArr[idx + 1]) ? [] : {};\n            }\n            o = o[key];\n        }\n        else {\n            o[key] = value;\n        }\n    });\n    return obj;\n});\n//# sourceMappingURL=set.js.map","import each from './each';\nimport isPlainObject from './is-plain-object';\nvar hasOwnProperty = Object.prototype.hasOwnProperty;\nexport default (function (object, keys) {\n    if (object === null || !isPlainObject(object)) {\n        return {};\n    }\n    var result = {};\n    each(keys, function (key) {\n        if (hasOwnProperty.call(object, key)) {\n            result[key] = object[key];\n        }\n    });\n    return result;\n});\n//# sourceMappingURL=pick.js.map","import reduce from './reduce';\nexport default (function (obj, keys) {\n    return reduce(obj, function (r, curr, key) {\n        if (!keys.includes(key)) {\n            r[key] = curr;\n        }\n        return r;\n    }, {});\n});\n//# sourceMappingURL=omit.js.map","export default (function (func, wait, options) {\n    var timeout, context, args, result;\n    var previous = 0;\n    if (!options)\n        options = {};\n    var later = function () {\n        previous = options.leading === false ? 0 : Date.now();\n        timeout = null;\n        result = func.apply(context, args);\n        if (!timeout)\n            context = args = null;\n    };\n    var throttled = function () {\n        var now = Date.now();\n        if (!previous && options.leading === false)\n            previous = now;\n        var remaining = wait - (now - previous);\n        context = this;\n        args = arguments;\n        if (remaining <= 0 || remaining > wait) {\n            if (timeout) {\n                clearTimeout(timeout);\n                timeout = null;\n            }\n            previous = now;\n            result = func.apply(context, args);\n            if (!timeout)\n                context = args = null;\n        }\n        else if (!timeout && options.trailing !== false) {\n            timeout = setTimeout(later, remaining);\n        }\n        return result;\n    };\n    throttled.cancel = function () {\n        clearTimeout(timeout);\n        previous = 0;\n        timeout = context = args = null;\n    };\n    return throttled;\n});\n//# sourceMappingURL=throttle.js.map","var map = {};\nexport default (function (prefix) {\n    prefix = prefix || 'g';\n    if (!map[prefix]) {\n        map[prefix] = 1;\n    }\n    else {\n        map[prefix] += 1;\n    }\n    return prefix + map[prefix];\n});\n//# sourceMappingURL=unique-id.js.map","export default (function () { });\n//# sourceMappingURL=noop.js.map","import isNil from './is-nil';\nimport isArraylike from './is-array-like';\nexport default function size(o) {\n    if (isNil(o)) {\n        return 0;\n    }\n    if (isArraylike(o)) {\n        return o.length;\n    }\n    return Object.keys(o).length;\n}\n//# sourceMappingURL=size.js.map","import { __spreadArrays } from \"tslib\";\nimport values from './values';\nimport memoize from './memoize';\nimport isString from './is-string';\nvar ctx;\n/**\n * 计算文本的宽度\n */\nexport default memoize(function (text, font) {\n    if (font === void 0) { font = {}; }\n    var fontSize = font.fontSize, fontFamily = font.fontFamily, fontWeight = font.fontWeight, fontStyle = font.fontStyle, fontVariant = font.fontVariant;\n    if (!ctx) {\n        ctx = document.createElement('canvas').getContext('2d');\n    }\n    ctx.font = [fontStyle, fontVariant, fontWeight, fontSize + \"px\", fontFamily].join(' ');\n    return ctx.measureText(isString(text) ? text : '').width;\n}, function (text, font) {\n    if (font === void 0) { font = {}; }\n    return __spreadArrays([text], values(font)).join('');\n});\n//# sourceMappingURL=measure-text-width.js.map","/**\n * view 中三层 group 分层 key\n */\nexport var LAYER;\n(function (LAYER) {\n    /** 前景层 */\n    LAYER[\"FORE\"] = \"fore\";\n    /** 中间层 */\n    LAYER[\"MID\"] = \"mid\";\n    /** 背景层 */\n    LAYER[\"BG\"] = \"bg\";\n})(LAYER || (LAYER = {}));\n/**\n * 组件在画布的布局方位 12 方位\n */\nexport var DIRECTION;\n(function (DIRECTION) {\n    DIRECTION[\"TOP\"] = \"top\";\n    DIRECTION[\"TOP_LEFT\"] = \"top-left\";\n    DIRECTION[\"TOP_RIGHT\"] = \"top-right\";\n    DIRECTION[\"RIGHT\"] = \"right\";\n    DIRECTION[\"RIGHT_TOP\"] = \"right-top\";\n    DIRECTION[\"RIGHT_BOTTOM\"] = \"right-bottom\";\n    DIRECTION[\"LEFT\"] = \"left\";\n    DIRECTION[\"LEFT_TOP\"] = \"left-top\";\n    DIRECTION[\"LEFT_BOTTOM\"] = \"left-bottom\";\n    DIRECTION[\"BOTTOM\"] = \"bottom\";\n    DIRECTION[\"BOTTOM_LEFT\"] = \"bottom-left\";\n    DIRECTION[\"BOTTOM_RIGHT\"] = \"bottom-right\";\n    DIRECTION[\"RADIUS\"] = \"radius\";\n    DIRECTION[\"CIRCLE\"] = \"circle\";\n    // no direction information\n    DIRECTION[\"NONE\"] = \"none\";\n})(DIRECTION || (DIRECTION = {}));\n/**\n * 组件的类型，可能会影响到布局算法\n */\nexport var COMPONENT_TYPE;\n(function (COMPONENT_TYPE) {\n    /** axis 组件 */\n    COMPONENT_TYPE[\"AXIS\"] = \"axis\";\n    /** grid 组件 */\n    COMPONENT_TYPE[\"GRID\"] = \"grid\";\n    /** legend 组件 */\n    COMPONENT_TYPE[\"LEGEND\"] = \"legend\";\n    /** tooltip 组件 */\n    COMPONENT_TYPE[\"TOOLTIP\"] = \"tooltip\";\n    /** annotation 组件 */\n    COMPONENT_TYPE[\"ANNOTATION\"] = \"annotation\";\n    /** 缩略轴组件 */\n    COMPONENT_TYPE[\"SLIDER\"] = \"slider\";\n    /** 滚动条组件 */\n    COMPONENT_TYPE[\"SCROLLBAR\"] = \"scrollbar\";\n    /** 其他组件，自定义组件 */\n    COMPONENT_TYPE[\"OTHER\"] = \"other\";\n})(COMPONENT_TYPE || (COMPONENT_TYPE = {}));\n/**\n * 三层 group 的 z index\n */\nexport var GROUP_Z_INDEX = {\n    FORE: 3,\n    MID: 2,\n    BG: 1,\n};\n/**\n * View 的生命周期阶段（和 3.x 的生命周期略有不同）\n * 我们需要先确定在那写场景需要用到生命周期，如果只是为了在生命周期插入一下什么组件之类的，那么在现有架构就是不需要的\n */\nexport var VIEW_LIFE_CIRCLE;\n(function (VIEW_LIFE_CIRCLE) {\n    VIEW_LIFE_CIRCLE[\"BEFORE_RENDER\"] = \"beforerender\";\n    VIEW_LIFE_CIRCLE[\"AFTER_RENDER\"] = \"afterrender\";\n    VIEW_LIFE_CIRCLE[\"BEFORE_PAINT\"] = \"beforepaint\";\n    VIEW_LIFE_CIRCLE[\"AFTER_PAINT\"] = \"afterpaint\";\n    VIEW_LIFE_CIRCLE[\"BEFORE_CHANGE_DATA\"] = \"beforechangedata\";\n    VIEW_LIFE_CIRCLE[\"AFTER_CHANGE_DATA\"] = \"afterchangedata\";\n    VIEW_LIFE_CIRCLE[\"BEFORE_CLEAR\"] = \"beforeclear\";\n    VIEW_LIFE_CIRCLE[\"AFTER_CLEAR\"] = \"afterclear\";\n    VIEW_LIFE_CIRCLE[\"BEFORE_DESTROY\"] = \"beforedestroy\";\n    VIEW_LIFE_CIRCLE[\"BEFORE_CHANGE_SIZE\"] = \"beforechangesize\";\n    VIEW_LIFE_CIRCLE[\"AFTER_CHANGE_SIZE\"] = \"afterchangesize\";\n})(VIEW_LIFE_CIRCLE || (VIEW_LIFE_CIRCLE = {}));\n/**\n * geometry 的生命周期\n */\nexport var GEOMETRY_LIFE_CIRCLE;\n(function (GEOMETRY_LIFE_CIRCLE) {\n    GEOMETRY_LIFE_CIRCLE[\"BEFORE_DRAW_ANIMATE\"] = \"beforeanimate\";\n    GEOMETRY_LIFE_CIRCLE[\"AFTER_DRAW_ANIMATE\"] = \"afteranimate\";\n    GEOMETRY_LIFE_CIRCLE[\"BEFORE_RENDER_LABEL\"] = \"beforerenderlabel\";\n    GEOMETRY_LIFE_CIRCLE[\"AFTER_RENDER_LABEL\"] = \"afterrenderlabel\";\n})(GEOMETRY_LIFE_CIRCLE || (GEOMETRY_LIFE_CIRCLE = {}));\n/**\n * 绘图区的事件列表\n */\nexport var PLOT_EVENTS;\n(function (PLOT_EVENTS) {\n    // mouse 事件\n    PLOT_EVENTS[\"MOUSE_ENTER\"] = \"plot:mouseenter\";\n    PLOT_EVENTS[\"MOUSE_DOWN\"] = \"plot:mousedown\";\n    PLOT_EVENTS[\"MOUSE_MOVE\"] = \"plot:mousemove\";\n    PLOT_EVENTS[\"MOUSE_UP\"] = \"plot:mouseup\";\n    PLOT_EVENTS[\"MOUSE_LEAVE\"] = \"plot:mouseleave\";\n    // 移动端事件\n    PLOT_EVENTS[\"TOUCH_START\"] = \"plot:touchstart\";\n    PLOT_EVENTS[\"TOUCH_MOVE\"] = \"plot:touchmove\";\n    PLOT_EVENTS[\"TOUCH_END\"] = \"plot:touchend\";\n    PLOT_EVENTS[\"TOUCH_CANCEL\"] = \"plot:touchcancel\";\n    // click 事件\n    PLOT_EVENTS[\"CLICK\"] = \"plot:click\";\n    PLOT_EVENTS[\"DBLCLICK\"] = \"plot:dblclick\";\n    PLOT_EVENTS[\"CONTEXTMENU\"] = \"plot:contextmenu\";\n    PLOT_EVENTS[\"LEAVE\"] = \"plot:leave\";\n    PLOT_EVENTS[\"ENTER\"] = \"plot:enter\";\n})(PLOT_EVENTS || (PLOT_EVENTS = {}));\n/**\n * Element 图形交互状态\n */\nexport var ELEMENT_STATE;\n(function (ELEMENT_STATE) {\n    ELEMENT_STATE[\"ACTIVE\"] = \"active\";\n    ELEMENT_STATE[\"INACTIVE\"] = \"inactive\";\n    ELEMENT_STATE[\"SELECTED\"] = \"selected\";\n    ELEMENT_STATE[\"DEFAULT\"] = \"default\";\n})(ELEMENT_STATE || (ELEMENT_STATE = {}));\n/** 参与分组的图形属性名 */\nexport var GROUP_ATTRS = ['color', 'shape', 'size'];\n/** 存储原始数据的字段名 */\nexport var FIELD_ORIGIN = '_origin';\n/** 最小的图表宽度 */\nexport var MIN_CHART_WIDTH = 1;\n/** 最小的图表高度 */\nexport var MIN_CHART_HEIGHT = 1;\n/** 辅助组件占图表的尺寸的最大比例：如图表上方的图例最多占图表高度的25% */\nexport var COMPONENT_MAX_VIEW_PERCENTAGE = 0.25;\n//# sourceMappingURL=constant.js.map","/**\n * 创建DOM 节点\n * @param  {String} str Dom 字符串\n * @return {HTMLElement}  DOM 节点\n */\nvar TABLE;\nvar TABLE_TR;\nvar FRAGMENT_REG;\nvar CONTAINERS;\nfunction initConstants() {\n    TABLE = document.createElement('table');\n    TABLE_TR = document.createElement('tr');\n    FRAGMENT_REG = /^\\s*<(\\w+|!)[^>]*>/;\n    CONTAINERS = {\n        tr: document.createElement('tbody'),\n        tbody: TABLE,\n        thead: TABLE,\n        tfoot: TABLE,\n        td: TABLE_TR,\n        th: TABLE_TR,\n        '*': document.createElement('div'),\n    };\n}\nexport default function createDom(str) {\n    if (!TABLE) {\n        initConstants();\n    }\n    var name = FRAGMENT_REG.test(str) && RegExp.$1;\n    if (!name || !(name in CONTAINERS)) {\n        name = '*';\n    }\n    var container = CONTAINERS[name];\n    str = typeof str === 'string' ? str.replace(/(^\\s*)|(\\s*$)/g, '') : str;\n    container.innerHTML = '' + str;\n    var dom = container.childNodes[0];\n    if (dom && container.contains(dom)) {\n        container.removeChild(dom);\n    }\n    return dom;\n}\n//# sourceMappingURL=create-dom.js.map","var ENGINES = {};\n/**\n * 通过名字获取渲染 engine\n * @param name 渲染引擎名字\n * @returns G engine\n */\nexport function getEngine(name) {\n    var G = ENGINES[name];\n    if (!G) {\n        throw new Error(\"G engine '\".concat(name, \"' is not exist, please register it at first.\"));\n    }\n    return G;\n}\n/**\n * 注册渲染引擎\n * @param name\n * @param engine\n */\nexport function registerEngine(name, engine) {\n    ENGINES[name] = engine;\n}\n//# sourceMappingURL=index.js.map","export default function addEventListener(target, eventType, callback) {\n    if (target) {\n        if (typeof target.addEventListener === 'function') {\n            target.addEventListener(eventType, callback, false);\n            return {\n                remove: function () {\n                    target.removeEventListener(eventType, callback, false);\n                },\n            };\n            // @ts-ignore\n        }\n        if (typeof target.attachEvent === 'function') {\n            // @ts-ignore\n            target.attachEvent('on' + eventType, callback);\n            return {\n                remove: function () {\n                    // @ts-ignore\n                    target.detachEvent('on' + eventType, callback);\n                },\n            };\n        }\n    }\n}\n//# sourceMappingURL=add-event-listener.js.map","/**\n * 获取样式\n * @param  {Object} dom DOM节点\n * @param  {String} name 样式名\n * @param  {Any} defaultValue 默认值\n * @return {String} 属性值\n */\nexport default function getStyle(dom, name, defaultValue) {\n    var v;\n    try {\n        v = window.getComputedStyle ?\n            window.getComputedStyle(dom, null)[name] :\n            dom.style[name]; // 一般不会走到这个逻辑，dom.style 获取的是标签 style 属性，也不准确\n    }\n    catch (e) {\n        // do nothing\n    }\n    finally {\n        v = v === undefined ? defaultValue : v;\n    }\n    return v;\n}\n//# sourceMappingURL=get-style.js.map","import getStyle from './get-style';\nimport getHeight from './get-height';\nexport default function getOuterHeight(el, defaultValue) {\n    var height = getHeight(el, defaultValue);\n    var bTop = parseFloat(getStyle(el, 'borderTopWidth')) || 0;\n    var pTop = parseFloat(getStyle(el, 'paddingTop')) || 0;\n    var pBottom = parseFloat(getStyle(el, 'paddingBottom')) || 0;\n    var bBottom = parseFloat(getStyle(el, 'borderBottomWidth')) || 0;\n    var mTop = parseFloat(getStyle(el, 'marginTop')) || 0;\n    var mBottom = parseFloat(getStyle(el, 'marginBottom')) || 0;\n    return height + bTop + bBottom + pTop + pBottom + mTop + mBottom;\n}\n//# sourceMappingURL=get-outer-height.js.map","import getStyle from './get-style';\nexport default function getHeight(el, defaultValue) {\n    var height = getStyle(el, 'height', defaultValue);\n    if (height === 'auto') {\n        height = el.offsetHeight;\n    }\n    return parseFloat(height);\n}\n//# sourceMappingURL=get-height.js.map","import getStyle from './get-style';\nimport getWidth from './get-width';\nexport default function getOuterWidth(el, defaultValue) {\n    var width = getWidth(el, defaultValue);\n    var bLeft = parseFloat(getStyle(el, 'borderLeftWidth')) || 0;\n    var pLeft = parseFloat(getStyle(el, 'paddingLeft')) || 0;\n    var pRight = parseFloat(getStyle(el, 'paddingRight')) || 0;\n    var bRight = parseFloat(getStyle(el, 'borderRightWidth')) || 0;\n    var mRight = parseFloat(getStyle(el, 'marginRight')) || 0;\n    var mLeft = parseFloat(getStyle(el, 'marginLeft')) || 0;\n    return width + bLeft + bRight + pLeft + pRight + mLeft + mRight;\n}\n//# sourceMappingURL=get-outer-width.js.map","import getStyle from './get-style';\nexport default function getHeight(el, defaultValue) {\n    var width = getStyle(el, 'width', defaultValue);\n    if (width === 'auto') {\n        width = el.offsetWidth;\n    }\n    return parseFloat(width);\n}\n//# sourceMappingURL=get-width.js.map","export default function modifyCSS(dom, css) {\n    if (dom) {\n        for (var key in css) {\n            if (css.hasOwnProperty(key)) {\n                dom.style[key] = css[key];\n            }\n        }\n    }\n    return dom;\n}\n//# sourceMappingURL=modify-css.js.map","import { MIN_CHART_HEIGHT, MIN_CHART_WIDTH } from '../constant';\n/**\n * get the element's bounding size\n * @param ele dom element\n * @returns the element width and height\n */\nfunction getElementSize(ele) {\n    var style = getComputedStyle(ele);\n    return {\n        width: (ele.clientWidth || parseInt(style.width, 10)) -\n            parseInt(style.paddingLeft, 10) -\n            parseInt(style.paddingRight, 10),\n        height: (ele.clientHeight || parseInt(style.height, 10)) -\n            parseInt(style.paddingTop, 10) -\n            parseInt(style.paddingBottom, 10),\n    };\n}\n/**\n * is value a valid number\n * @param v the input value\n * @returns whether it is a number\n */\nfunction isNumber(v) {\n    return typeof v === 'number' && !isNaN(v);\n}\n/**\n * @ignore\n * calculate the chart size\n * @param ele DOM element\n * @param autoFit should auto fit\n * @param width chart width which is set by user\n * @param height chart height which is set by user\n * @returns the chart width and height\n */\nexport function getChartSize(ele, autoFit, width, height) {\n    var w = width;\n    var h = height;\n    if (autoFit) {\n        var size = getElementSize(ele);\n        w = size.width ? size.width : w;\n        h = size.height ? size.height : h;\n    }\n    return {\n        width: Math.max(isNumber(w) ? w : MIN_CHART_WIDTH, MIN_CHART_WIDTH),\n        height: Math.max(isNumber(h) ? h : MIN_CHART_HEIGHT, MIN_CHART_HEIGHT),\n    };\n}\n/**\n * @ignore\n * remove html element from its parent\n * @param dom\n */\nexport function removeDom(dom) {\n    var parent = dom.parentNode;\n    if (parent) {\n        parent.removeChild(dom);\n    }\n}\n/** @ignore */\nexport { createDom, modifyCSS } from '@antv/dom-util';\n//# sourceMappingURL=dom.js.map","var WILDCARD = '*';\n/* event-emitter */\nvar EventEmitter = /** @class */ (function () {\n    function EventEmitter() {\n        this._events = {};\n    }\n    /**\n     * 监听一个事件\n     * @param evt\n     * @param callback\n     * @param once\n     */\n    EventEmitter.prototype.on = function (evt, callback, once) {\n        if (!this._events[evt]) {\n            this._events[evt] = [];\n        }\n        this._events[evt].push({\n            callback: callback,\n            once: !!once,\n        });\n        return this;\n    };\n    /**\n     * 监听一个事件一次\n     * @param evt\n     * @param callback\n     */\n    EventEmitter.prototype.once = function (evt, callback) {\n        return this.on(evt, callback, true);\n    };\n    /**\n     * 触发一个事件\n     * @param evt\n     * @param args\n     */\n    EventEmitter.prototype.emit = function (evt) {\n        var _this = this;\n        var args = [];\n        for (var _i = 1; _i < arguments.length; _i++) {\n            args[_i - 1] = arguments[_i];\n        }\n        var events = this._events[evt] || [];\n        var wildcardEvents = this._events[WILDCARD] || [];\n        // 实际的处理 emit 方法\n        var doEmit = function (es) {\n            var length = es.length;\n            for (var i = 0; i < length; i++) {\n                if (!es[i]) {\n                    continue;\n                }\n                var _a = es[i], callback = _a.callback, once = _a.once;\n                if (once) {\n                    es.splice(i, 1);\n                    if (es.length === 0) {\n                        delete _this._events[evt];\n                    }\n                    length--;\n                    i--;\n                }\n                callback.apply(_this, args);\n            }\n        };\n        doEmit(events);\n        doEmit(wildcardEvents);\n    };\n    /**\n     * 取消监听一个事件，或者一个channel\n     * @param evt\n     * @param callback\n     */\n    EventEmitter.prototype.off = function (evt, callback) {\n        if (!evt) {\n            // evt 为空全部清除\n            this._events = {};\n        }\n        else {\n            if (!callback) {\n                // evt 存在，callback 为空，清除事件所有方法\n                delete this._events[evt];\n            }\n            else {\n                // evt 存在，callback 存在，清除匹配的\n                var events = this._events[evt] || [];\n                var length_1 = events.length;\n                for (var i = 0; i < length_1; i++) {\n                    if (events[i].callback === callback) {\n                        events.splice(i, 1);\n                        length_1--;\n                        i--;\n                    }\n                }\n                if (events.length === 0) {\n                    delete this._events[evt];\n                }\n            }\n        }\n        return this;\n    };\n    /* 当前所有的事件 */\n    EventEmitter.prototype.getEvents = function () {\n        return this._events;\n    };\n    return EventEmitter;\n}());\nexport default EventEmitter;\n//# sourceMappingURL=index.js.map","import { __extends } from \"tslib\";\nimport EE from '@antv/event-emitter';\n/**\n * G2 Chart、View、Geometry 以及 Element 等的基类，提供事件以及一些通用的方法。\n */\nvar Base = /** @class */ (function (_super) {\n    __extends(Base, _super);\n    function Base(cfg) {\n        var _this = _super.call(this) || this;\n        /** 标识对象是否已销毁 */\n        _this.destroyed = false;\n        var _a = cfg.visible, visible = _a === void 0 ? true : _a;\n        _this.visible = visible;\n        return _this;\n    }\n    /**\n     * 显示。\n     */\n    Base.prototype.show = function () {\n        var visible = this.visible;\n        if (!visible) {\n            this.changeVisible(true);\n        }\n    };\n    /**\n     * 隐藏。\n     */\n    Base.prototype.hide = function () {\n        var visible = this.visible;\n        if (visible) {\n            this.changeVisible(false);\n        }\n    };\n    /**\n     * 销毁。\n     */\n    Base.prototype.destroy = function () {\n        this.off();\n        this.destroyed = true;\n    };\n    /**\n     * 显示或者隐藏。\n     * @param visible\n     * @returns\n     */\n    Base.prototype.changeVisible = function (visible) {\n        if (this.visible === visible) {\n            return;\n        }\n        this.visible = visible;\n    };\n    return Base;\n}(EE));\nexport default Base;\n//# sourceMappingURL=base.js.map","var isArrayLike = function (value) {\n    /**\n     * isArrayLike([1, 2, 3]) => true\n     * isArrayLike(document.body.children) => true\n     * isArrayLike('abc') => true\n     * isArrayLike(Function) => false\n     */\n    return value !== null && typeof value !== 'function' && isFinite(value.length);\n};\nexport default isArrayLike;\n//# sourceMappingURL=is-array-like.js.map","var toString = {}.toString;\nvar isType = function (value, type) { return toString.call(value) === '[object ' + type + ']'; };\nexport default isType;\n//# sourceMappingURL=is-type.js.map","/**\n * 是否为函数\n * @param  {*} fn 对象\n * @return {Boolean}  是否函数\n */\nimport isType from './is-type';\nexport default (function (value) {\n    return isType(value, 'Function');\n});\n//# sourceMappingURL=is-function.js.map","// isFinite,\nvar isNil = function (value) {\n    /**\n     * isNil(null) => true\n     * isNil() => true\n     */\n    return value === null || value === undefined;\n};\nexport default isNil;\n//# sourceMappingURL=is-nil.js.map","import isType from './is-type';\nexport default (function (value) {\n    return Array.isArray ?\n        Array.isArray(value) :\n        isType(value, 'Array');\n});\n//# sourceMappingURL=is-array.js.map","export default (function (value) {\n    /**\n     * isObject({}) => true\n     * isObject([1, 2, 3]) => true\n     * isObject(Function) => true\n     * isObject(null) => false\n     */\n    var type = typeof value;\n    return value !== null && type === 'object' || type === 'function';\n});\n//# sourceMappingURL=is-object.js.map","import isArray from './is-array';\nimport isObject from './is-object';\nfunction each(elements, func) {\n    if (!elements) {\n        return;\n    }\n    var rst;\n    if (isArray(elements)) {\n        for (var i = 0, len = elements.length; i < len; i++) {\n            rst = func(elements[i], i);\n            if (rst === false) {\n                break;\n            }\n        }\n    }\n    else if (isObject(elements)) {\n        for (var k in elements) {\n            if (elements.hasOwnProperty(k)) {\n                rst = func(elements[k], k);\n                if (rst === false) {\n                    break;\n                }\n            }\n        }\n    }\n}\nexport default each;\n//# sourceMappingURL=each.js.map","var isObjectLike = function (value) {\n    /**\n     * isObjectLike({}) => true\n     * isObjectLike([1, 2, 3]) => true\n     * isObjectLike(Function) => false\n     * isObjectLike(null) => false\n     */\n    return typeof value === 'object' && value !== null;\n};\nexport default isObjectLike;\n//# sourceMappingURL=is-object-like.js.map","import isArray from './is-array';\n/**\n * @param {Array} arr The array to iterate over.\n * @return {*} Returns the maximum value.\n * @example\n *\n * max([1, 2]);\n * // => 2\n *\n * max([]);\n * // => undefined\n *\n * const data = new Array(1250010).fill(1).map((d,idx) => idx);\n *\n * max(data);\n * // => 1250010\n * // Math.max(...data) will encounter \"Maximum call stack size exceeded\" error\n */\nexport default (function (arr) {\n    if (!isArray(arr)) {\n        return undefined;\n    }\n    return arr.reduce(function (prev, curr) {\n        return Math.max(prev, curr);\n    }, arr[0]);\n});\n//# sourceMappingURL=max.js.map","import isArray from './is-array';\n/**\n * @param {Array} arr The array to iterate over.\n * @return {*} Returns the minimum value.\n * @example\n *\n * min([1, 2]);\n * // => 1\n *\n * min([]);\n * // => undefined\n *\n * const data = new Array(1250010).fill(1).map((d,idx) => idx);\n *\n * min(data);\n * // => 1250010\n * // Math.min(...data) will encounter \"Maximum call stack size exceeded\" error\n */\nexport default (function (arr) {\n    if (!isArray(arr)) {\n        return undefined;\n    }\n    return arr.reduce(function (prev, curr) {\n        return Math.min(prev, curr);\n    }, arr[0]);\n});\n//# sourceMappingURL=min.js.map","import isType from './is-type';\nexport default (function (str) {\n    return isType(str, 'String');\n});\n//# sourceMappingURL=is-string.js.map","/**\n * 判断是否数字\n * @return {Boolean} 是否数字\n */\nimport isType from './is-type';\nvar isNumber = function (value) {\n    return isType(value, 'Number');\n};\nexport default isNumber;\n//# sourceMappingURL=is-number.js.map","var mod = function (n, m) {\n    return ((n % m) + m) % m;\n};\nexport default mod;\n//# sourceMappingURL=mod.js.map","var RADIAN = Math.PI / 180;\nvar toRadian = function (degree) {\n    return RADIAN * degree;\n};\nexport default toRadian;\n//# sourceMappingURL=to-radian.js.map","import each from './each';\nimport isFunction from './is-function';\n// @ts-ignore\nvar values = Object.values ? function (obj) { return Object.values(obj); } : function (obj) {\n    var result = [];\n    each(obj, function (value, key) {\n        if (!(isFunction(obj) && key === 'prototype')) {\n            result.push(value);\n        }\n    });\n    return result;\n};\nexport default values;\n//# sourceMappingURL=values.js.map","import toString from './to-string';\nvar upperFirst = function (value) {\n    var str = toString(value);\n    return str.charAt(0).toUpperCase() + str.substring(1);\n};\nexport default upperFirst;\n//# sourceMappingURL=upper-first.js.map","import isNil from './is-nil';\nexport default (function (value) {\n    if (isNil(value))\n        return '';\n    return value.toString();\n});\n//# sourceMappingURL=to-string.js.map","// FIXME: Mutable param should be forbidden in static lang.\nfunction _mix(dist, obj) {\n    for (var key in obj) {\n        if (obj.hasOwnProperty(key) && key !== 'constructor' && obj[key] !== undefined) {\n            dist[key] = obj[key];\n        }\n    }\n}\nexport default function mix(dist, src1, src2, src3) {\n    if (src1)\n        _mix(dist, src1);\n    if (src2)\n        _mix(dist, src2);\n    if (src3)\n        _mix(dist, src3);\n    return dist;\n}\n//# sourceMappingURL=mix.js.map","import isObjectLike from './is-object-like';\nimport isArrayLike from './is-array-like';\nimport isString from './is-string';\nvar isEqual = function (value, other) {\n    if (value === other) {\n        return true;\n    }\n    if (!value || !other) {\n        return false;\n    }\n    if (isString(value) || isString(other)) {\n        return false;\n    }\n    if (isArrayLike(value) || isArrayLike(other)) {\n        if (value.length !== other.length) {\n            return false;\n        }\n        var rst = true;\n        for (var i = 0; i < value.length; i++) {\n            rst = isEqual(value[i], other[i]);\n            if (!rst) {\n                break;\n            }\n        }\n        return rst;\n    }\n    if (isObjectLike(value) || isObjectLike(other)) {\n        var valueKeys = Object.keys(value);\n        var otherKeys = Object.keys(other);\n        if (valueKeys.length !== otherKeys.length) {\n            return false;\n        }\n        var rst = true;\n        for (var i = 0; i < valueKeys.length; i++) {\n            rst = isEqual(value[valueKeys[i]], other[valueKeys[i]]);\n            if (!rst) {\n                break;\n            }\n        }\n        return rst;\n    }\n    return false;\n};\nexport default isEqual;\n//# sourceMappingURL=is-equal.js.map","var map = {};\nexport default (function (prefix) {\n    prefix = prefix || 'g';\n    if (!map[prefix]) {\n        map[prefix] = 1;\n    }\n    else {\n        map[prefix] += 1;\n    }\n    return prefix + map[prefix];\n});\n//# sourceMappingURL=unique-id.js.map","export default (function () { });\n//# sourceMappingURL=noop.js.map","import { __spreadArrays } from \"tslib\";\nimport values from './values';\nimport memoize from './memoize';\nimport isString from './is-string';\nvar ctx;\n/**\n * 计算文本的宽度\n */\nexport default memoize(function (text, font) {\n    if (font === void 0) { font = {}; }\n    var fontSize = font.fontSize, fontFamily = font.fontFamily, fontWeight = font.fontWeight, fontStyle = font.fontStyle, fontVariant = font.fontVariant;\n    if (!ctx) {\n        ctx = document.createElement('canvas').getContext('2d');\n    }\n    ctx.font = [fontStyle, fontVariant, fontWeight, fontSize + \"px\", fontFamily].join(' ');\n    return ctx.measureText(isString(text) ? text : '').width;\n}, function (text, font) {\n    if (font === void 0) { font = {}; }\n    return __spreadArrays([text], values(font)).join('');\n});\n//# sourceMappingURL=measure-text-width.js.map","import isFunction from './is-function';\n/**\n * _.memoize(calColor);\n * _.memoize(calColor, (...args) => args[0]);\n * @param f\n * @param resolver\n */\nexport default (function (f, resolver) {\n    if (!isFunction(f)) {\n        throw new TypeError('Expected a function');\n    }\n    var memoized = function () {\n        var args = [];\n        for (var _i = 0; _i < arguments.length; _i++) {\n            args[_i] = arguments[_i];\n        }\n        // 使用方法构造 key，如果不存在 resolver，则直接取第一个参数作为 key\n        var key = resolver ? resolver.apply(this, args) : args[0];\n        var cache = memoized.cache;\n        if (cache.has(key)) {\n            return cache.get(key);\n        }\n        var result = f.apply(this, args);\n        // 缓存起来\n        cache.set(key, result);\n        return result;\n    };\n    memoized.cache = new Map();\n    return memoized;\n});\n//# sourceMappingURL=memoize.js.map","import { each, isArray } from '@antv/util';\nvar SPACES = '\\x09\\x0a\\x0b\\x0c\\x0d\\x20\\xa0\\u1680\\u180e\\u2000\\u2001\\u2002\\u2003\\u2004\\u2005\\u2006\\u2007\\u2008\\u2009\\u200a\\u202f\\u205f\\u3000\\u2028\\u2029';\nvar PATH_COMMAND = new RegExp(\"([a-z])[\" + SPACES + \",]*((-?\\\\d*\\\\.?\\\\d*(?:e[\\\\-+]?\\\\d+)?[\" + SPACES + \"]*,?[\" + SPACES + \"]*)+)\", 'ig');\nvar PATH_VALUES = new RegExp(\"(-?\\\\d*\\\\.?\\\\d*(?:e[\\\\-+]?\\\\d+)?)[\" + SPACES + \"]*,?[\" + SPACES + \"]*\", 'ig');\n// Parse given path string into an array of arrays of path segments\nvar parsePathString = function (pathString) {\n    if (!pathString) {\n        return null;\n    }\n    if (isArray(pathString)) {\n        return pathString;\n    }\n    var paramCounts = {\n        a: 7,\n        c: 6,\n        o: 2,\n        h: 1,\n        l: 2,\n        m: 2,\n        r: 4,\n        q: 4,\n        s: 4,\n        t: 2,\n        v: 1,\n        u: 3,\n        z: 0,\n    };\n    var data = [];\n    String(pathString).replace(PATH_COMMAND, function (a, b, c) {\n        var params = [];\n        var name = b.toLowerCase();\n        c.replace(PATH_VALUES, function (a, b) {\n            b && params.push(+b);\n        });\n        if (name === 'm' && params.length > 2) {\n            data.push([b].concat(params.splice(0, 2)));\n            name = 'l';\n            b = b === 'm' ? 'l' : 'L';\n        }\n        if (name === 'o' && params.length === 1) {\n            data.push([b, params[0]]);\n        }\n        if (name === 'r') {\n            data.push([b].concat(params));\n        }\n        else {\n            while (params.length >= paramCounts[name]) {\n                data.push([b].concat(params.splice(0, paramCounts[name])));\n                if (!paramCounts[name]) {\n                    break;\n                }\n            }\n        }\n        return pathString;\n    });\n    return data;\n};\n// http://schepers.cc/getting-to-the-point\nvar catmullRomToBezier = function (crp, z) {\n    var d = [];\n    // @ts-ignore\n    for (var i = 0, iLen = crp.length; iLen - 2 * !z > i; i += 2) {\n        var p = [\n            {\n                x: +crp[i - 2],\n                y: +crp[i - 1],\n            },\n            {\n                x: +crp[i],\n                y: +crp[i + 1],\n            },\n            {\n                x: +crp[i + 2],\n                y: +crp[i + 3],\n            },\n            {\n                x: +crp[i + 4],\n                y: +crp[i + 5],\n            },\n        ];\n        if (z) {\n            if (!i) {\n                p[0] = {\n                    x: +crp[iLen - 2],\n                    y: +crp[iLen - 1],\n                };\n            }\n            else if (iLen - 4 === i) {\n                p[3] = {\n                    x: +crp[0],\n                    y: +crp[1],\n                };\n            }\n            else if (iLen - 2 === i) {\n                p[2] = {\n                    x: +crp[0],\n                    y: +crp[1],\n                };\n                p[3] = {\n                    x: +crp[2],\n                    y: +crp[3],\n                };\n            }\n        }\n        else {\n            if (iLen - 4 === i) {\n                p[3] = p[2];\n            }\n            else if (!i) {\n                p[0] = {\n                    x: +crp[i],\n                    y: +crp[i + 1],\n                };\n            }\n        }\n        d.push([\n            'C',\n            (-p[0].x + 6 * p[1].x + p[2].x) / 6,\n            (-p[0].y + 6 * p[1].y + p[2].y) / 6,\n            (p[1].x + 6 * p[2].x - p[3].x) / 6,\n            (p[1].y + 6 * p[2].y - p[3].y) / 6,\n            p[2].x,\n            p[2].y,\n        ]);\n    }\n    return d;\n};\nvar ellipsePath = function (x, y, rx, ry, a) {\n    var res = [];\n    if (a === null && ry === null) {\n        ry = rx;\n    }\n    x = +x;\n    y = +y;\n    rx = +rx;\n    ry = +ry;\n    if (a !== null) {\n        var rad = Math.PI / 180;\n        var x1 = x + rx * Math.cos(-ry * rad);\n        var x2 = x + rx * Math.cos(-a * rad);\n        var y1 = y + rx * Math.sin(-ry * rad);\n        var y2 = y + rx * Math.sin(-a * rad);\n        res = [\n            ['M', x1, y1],\n            ['A', rx, rx, 0, +(a - ry > 180), 0, x2, y2],\n        ];\n    }\n    else {\n        res = [['M', x, y], ['m', 0, -ry], ['a', rx, ry, 0, 1, 1, 0, 2 * ry], ['a', rx, ry, 0, 1, 1, 0, -2 * ry], ['z']];\n    }\n    return res;\n};\nvar pathToAbsolute = function (pathArray) {\n    pathArray = parsePathString(pathArray);\n    if (!pathArray || !pathArray.length) {\n        return [['M', 0, 0]];\n    }\n    var res = [];\n    var x = 0;\n    var y = 0;\n    var mx = 0;\n    var my = 0;\n    var start = 0;\n    var pa0;\n    var dots;\n    if (pathArray[0][0] === 'M') {\n        x = +pathArray[0][1];\n        y = +pathArray[0][2];\n        mx = x;\n        my = y;\n        start++;\n        res[0] = ['M', x, y];\n    }\n    var crz = pathArray.length === 3 &&\n        pathArray[0][0] === 'M' &&\n        pathArray[1][0].toUpperCase() === 'R' &&\n        pathArray[2][0].toUpperCase() === 'Z';\n    for (var r = void 0, pa = void 0, i = start, ii = pathArray.length; i < ii; i++) {\n        res.push((r = []));\n        pa = pathArray[i];\n        pa0 = pa[0];\n        if (pa0 !== pa0.toUpperCase()) {\n            r[0] = pa0.toUpperCase();\n            switch (r[0]) {\n                case 'A':\n                    r[1] = pa[1];\n                    r[2] = pa[2];\n                    r[3] = pa[3];\n                    r[4] = pa[4];\n                    r[5] = pa[5];\n                    r[6] = +pa[6] + x;\n                    r[7] = +pa[7] + y;\n                    break;\n                case 'V':\n                    r[1] = +pa[1] + y;\n                    break;\n                case 'H':\n                    r[1] = +pa[1] + x;\n                    break;\n                case 'R':\n                    dots = [x, y].concat(pa.slice(1));\n                    for (var j = 2, jj = dots.length; j < jj; j++) {\n                        dots[j] = +dots[j] + x;\n                        dots[++j] = +dots[j] + y;\n                    }\n                    res.pop();\n                    res = res.concat(catmullRomToBezier(dots, crz));\n                    break;\n                case 'O':\n                    res.pop();\n                    dots = ellipsePath(x, y, pa[1], pa[2]);\n                    dots.push(dots[0]);\n                    res = res.concat(dots);\n                    break;\n                case 'U':\n                    res.pop();\n                    res = res.concat(ellipsePath(x, y, pa[1], pa[2], pa[3]));\n                    r = ['U'].concat(res[res.length - 1].slice(-2));\n                    break;\n                case 'M':\n                    mx = +pa[1] + x;\n                    my = +pa[2] + y;\n                    break; // for lint\n                default:\n                    for (var j = 1, jj = pa.length; j < jj; j++) {\n                        r[j] = +pa[j] + (j % 2 ? x : y);\n                    }\n            }\n        }\n        else if (pa0 === 'R') {\n            dots = [x, y].concat(pa.slice(1));\n            res.pop();\n            res = res.concat(catmullRomToBezier(dots, crz));\n            r = ['R'].concat(pa.slice(-2));\n        }\n        else if (pa0 === 'O') {\n            res.pop();\n            dots = ellipsePath(x, y, pa[1], pa[2]);\n            dots.push(dots[0]);\n            res = res.concat(dots);\n        }\n        else if (pa0 === 'U') {\n            res.pop();\n            res = res.concat(ellipsePath(x, y, pa[1], pa[2], pa[3]));\n            r = ['U'].concat(res[res.length - 1].slice(-2));\n        }\n        else {\n            for (var k = 0, kk = pa.length; k < kk; k++) {\n                r[k] = pa[k];\n            }\n        }\n        pa0 = pa0.toUpperCase();\n        if (pa0 !== 'O') {\n            switch (r[0]) {\n                case 'Z':\n                    x = +mx;\n                    y = +my;\n                    break;\n                case 'H':\n                    x = r[1];\n                    break;\n                case 'V':\n                    y = r[1];\n                    break;\n                case 'M':\n                    mx = r[r.length - 2];\n                    my = r[r.length - 1];\n                    break; // for lint\n                default:\n                    x = r[r.length - 2];\n                    y = r[r.length - 1];\n            }\n        }\n    }\n    return res;\n};\nvar l2c = function (x1, y1, x2, y2) {\n    return [x1, y1, x2, y2, x2, y2];\n};\nvar q2c = function (x1, y1, ax, ay, x2, y2) {\n    var _13 = 1 / 3;\n    var _23 = 2 / 3;\n    return [_13 * x1 + _23 * ax, _13 * y1 + _23 * ay, _13 * x2 + _23 * ax, _13 * y2 + _23 * ay, x2, y2];\n};\nvar a2c = function (x1, y1, rx, ry, angle, large_arc_flag, sweep_flag, x2, y2, recursive) {\n    // for more information of where this math came from visit:\n    // http://www.w3.org/TR/SVG11/implnote.html#ArcImplementationNotes\n    if (rx === ry) {\n        rx += 1;\n    }\n    var _120 = (Math.PI * 120) / 180;\n    var rad = (Math.PI / 180) * (+angle || 0);\n    var res = [];\n    var xy;\n    var f1;\n    var f2;\n    var cx;\n    var cy;\n    var rotate = function (x, y, rad) {\n        var X = x * Math.cos(rad) - y * Math.sin(rad);\n        var Y = x * Math.sin(rad) + y * Math.cos(rad);\n        return {\n            x: X,\n            y: Y,\n        };\n    };\n    if (!recursive) {\n        xy = rotate(x1, y1, -rad);\n        x1 = xy.x;\n        y1 = xy.y;\n        xy = rotate(x2, y2, -rad);\n        x2 = xy.x;\n        y2 = xy.y;\n        if (x1 === x2 && y1 === y2) {\n            // 若弧的起始点和终点重叠则错开一点\n            x2 += 1;\n            y2 += 1;\n        }\n        // const cos = Math.cos(Math.PI / 180 * angle);\n        // const sin = Math.sin(Math.PI / 180 * angle);\n        var x = (x1 - x2) / 2;\n        var y = (y1 - y2) / 2;\n        var h = (x * x) / (rx * rx) + (y * y) / (ry * ry);\n        if (h > 1) {\n            h = Math.sqrt(h);\n            rx = h * rx;\n            ry = h * ry;\n        }\n        var rx2 = rx * rx;\n        var ry2 = ry * ry;\n        var k = (large_arc_flag === sweep_flag ? -1 : 1) *\n            Math.sqrt(Math.abs((rx2 * ry2 - rx2 * y * y - ry2 * x * x) / (rx2 * y * y + ry2 * x * x)));\n        cx = (k * rx * y) / ry + (x1 + x2) / 2;\n        cy = (k * -ry * x) / rx + (y1 + y2) / 2;\n        // @ts-ignore\n        f1 = Math.asin(((y1 - cy) / ry).toFixed(9));\n        // @ts-ignore\n        f2 = Math.asin(((y2 - cy) / ry).toFixed(9));\n        f1 = x1 < cx ? Math.PI - f1 : f1;\n        f2 = x2 < cx ? Math.PI - f2 : f2;\n        f1 < 0 && (f1 = Math.PI * 2 + f1);\n        f2 < 0 && (f2 = Math.PI * 2 + f2);\n        if (sweep_flag && f1 > f2) {\n            f1 = f1 - Math.PI * 2;\n        }\n        if (!sweep_flag && f2 > f1) {\n            f2 = f2 - Math.PI * 2;\n        }\n    }\n    else {\n        f1 = recursive[0];\n        f2 = recursive[1];\n        cx = recursive[2];\n        cy = recursive[3];\n    }\n    var df = f2 - f1;\n    if (Math.abs(df) > _120) {\n        var f2old = f2;\n        var x2old = x2;\n        var y2old = y2;\n        f2 = f1 + _120 * (sweep_flag && f2 > f1 ? 1 : -1);\n        x2 = cx + rx * Math.cos(f2);\n        y2 = cy + ry * Math.sin(f2);\n        res = a2c(x2, y2, rx, ry, angle, 0, sweep_flag, x2old, y2old, [f2, f2old, cx, cy]);\n    }\n    df = f2 - f1;\n    var c1 = Math.cos(f1);\n    var s1 = Math.sin(f1);\n    var c2 = Math.cos(f2);\n    var s2 = Math.sin(f2);\n    var t = Math.tan(df / 4);\n    var hx = (4 / 3) * rx * t;\n    var hy = (4 / 3) * ry * t;\n    var m1 = [x1, y1];\n    var m2 = [x1 + hx * s1, y1 - hy * c1];\n    var m3 = [x2 + hx * s2, y2 - hy * c2];\n    var m4 = [x2, y2];\n    m2[0] = 2 * m1[0] - m2[0];\n    m2[1] = 2 * m1[1] - m2[1];\n    if (recursive) {\n        return [m2, m3, m4].concat(res);\n    }\n    res = [m2, m3, m4].concat(res).join().split(',');\n    var newres = [];\n    for (var i = 0, ii = res.length; i < ii; i++) {\n        newres[i] = i % 2 ? rotate(res[i - 1], res[i], rad).y : rotate(res[i], res[i + 1], rad).x;\n    }\n    return newres;\n};\nvar pathToCurve = function (path, path2) {\n    var p = pathToAbsolute(path);\n    var p2 = path2 && pathToAbsolute(path2);\n    var attrs = {\n        x: 0,\n        y: 0,\n        bx: 0,\n        by: 0,\n        X: 0,\n        Y: 0,\n        qx: null,\n        qy: null,\n    };\n    var attrs2 = {\n        x: 0,\n        y: 0,\n        bx: 0,\n        by: 0,\n        X: 0,\n        Y: 0,\n        qx: null,\n        qy: null,\n    };\n    var pcoms1 = []; // path commands of original path p\n    var pcoms2 = []; // path commands of original path p2\n    var pfirst = ''; // temporary holder for original path command\n    var pcom = ''; // holder for previous path command of original path\n    var ii;\n    var processPath = function (path, d, pcom) {\n        var nx;\n        var ny;\n        if (!path) {\n            return ['C', d.x, d.y, d.x, d.y, d.x, d.y];\n        }\n        !(path[0] in\n            {\n                T: 1,\n                Q: 1,\n            }) && (d.qx = d.qy = null);\n        switch (path[0]) {\n            case 'M':\n                d.X = path[1];\n                d.Y = path[2];\n                break;\n            case 'A':\n                path = ['C'].concat(a2c.apply(0, [d.x, d.y].concat(path.slice(1))));\n                break;\n            case 'S':\n                if (pcom === 'C' || pcom === 'S') {\n                    // In \"S\" case we have to take into account, if the previous command is C/S.\n                    nx = d.x * 2 - d.bx; // And reflect the previous\n                    ny = d.y * 2 - d.by; // command's control point relative to the current point.\n                }\n                else {\n                    // or some else or nothing\n                    nx = d.x;\n                    ny = d.y;\n                }\n                path = ['C', nx, ny].concat(path.slice(1));\n                break;\n            case 'T':\n                if (pcom === 'Q' || pcom === 'T') {\n                    // In \"T\" case we have to take into account, if the previous command is Q/T.\n                    d.qx = d.x * 2 - d.qx; // And make a reflection similar\n                    d.qy = d.y * 2 - d.qy; // to case \"S\".\n                }\n                else {\n                    // or something else or nothing\n                    d.qx = d.x;\n                    d.qy = d.y;\n                }\n                path = ['C'].concat(q2c(d.x, d.y, d.qx, d.qy, path[1], path[2]));\n                break;\n            case 'Q':\n                d.qx = path[1];\n                d.qy = path[2];\n                path = ['C'].concat(q2c(d.x, d.y, path[1], path[2], path[3], path[4]));\n                break;\n            case 'L':\n                path = ['C'].concat(l2c(d.x, d.y, path[1], path[2]));\n                break;\n            case 'H':\n                path = ['C'].concat(l2c(d.x, d.y, path[1], d.y));\n                break;\n            case 'V':\n                path = ['C'].concat(l2c(d.x, d.y, d.x, path[1]));\n                break;\n            case 'Z':\n                path = ['C'].concat(l2c(d.x, d.y, d.X, d.Y));\n                break;\n            default:\n                break;\n        }\n        return path;\n    };\n    var fixArc = function (pp, i) {\n        if (pp[i].length > 7) {\n            pp[i].shift();\n            var pi = pp[i];\n            while (pi.length) {\n                pcoms1[i] = 'A'; // if created multiple C:s, their original seg is saved\n                p2 && (pcoms2[i] = 'A'); // the same as above\n                pp.splice(i++, 0, ['C'].concat(pi.splice(0, 6)));\n            }\n            pp.splice(i, 1);\n            ii = Math.max(p.length, (p2 && p2.length) || 0);\n        }\n    };\n    var fixM = function (path1, path2, a1, a2, i) {\n        if (path1 && path2 && path1[i][0] === 'M' && path2[i][0] !== 'M') {\n            path2.splice(i, 0, ['M', a2.x, a2.y]);\n            a1.bx = 0;\n            a1.by = 0;\n            a1.x = path1[i][1];\n            a1.y = path1[i][2];\n            ii = Math.max(p.length, (p2 && p2.length) || 0);\n        }\n    };\n    ii = Math.max(p.length, (p2 && p2.length) || 0);\n    for (var i = 0; i < ii; i++) {\n        p[i] && (pfirst = p[i][0]); // save current path command\n        if (pfirst !== 'C') {\n            // C is not saved yet, because it may be result of conversion\n            pcoms1[i] = pfirst; // Save current path command\n            i && (pcom = pcoms1[i - 1]); // Get previous path command pcom\n        }\n        p[i] = processPath(p[i], attrs, pcom); // Previous path command is inputted to processPath\n        if (pcoms1[i] !== 'A' && pfirst === 'C')\n            pcoms1[i] = 'C'; // A is the only command\n        // which may produce multiple C:s\n        // so we have to make sure that C is also C in original path\n        fixArc(p, i); // fixArc adds also the right amount of A:s to pcoms1\n        if (p2) {\n            // the same procedures is done to p2\n            p2[i] && (pfirst = p2[i][0]);\n            if (pfirst !== 'C') {\n                pcoms2[i] = pfirst;\n                i && (pcom = pcoms2[i - 1]);\n            }\n            p2[i] = processPath(p2[i], attrs2, pcom);\n            if (pcoms2[i] !== 'A' && pfirst === 'C') {\n                pcoms2[i] = 'C';\n            }\n            fixArc(p2, i);\n        }\n        fixM(p, p2, attrs, attrs2, i);\n        fixM(p2, p, attrs2, attrs, i);\n        var seg = p[i];\n        var seg2 = p2 && p2[i];\n        var seglen = seg.length;\n        var seg2len = p2 && seg2.length;\n        attrs.x = seg[seglen - 2];\n        attrs.y = seg[seglen - 1];\n        attrs.bx = parseFloat(seg[seglen - 4]) || attrs.x;\n        attrs.by = parseFloat(seg[seglen - 3]) || attrs.y;\n        attrs2.bx = p2 && (parseFloat(seg2[seg2len - 4]) || attrs2.x);\n        attrs2.by = p2 && (parseFloat(seg2[seg2len - 3]) || attrs2.y);\n        attrs2.x = p2 && seg2[seg2len - 2];\n        attrs2.y = p2 && seg2[seg2len - 1];\n    }\n    return p2 ? [p, p2] : p;\n};\nvar p2s = /,?([a-z]),?/gi;\nvar parsePathArray = function (path) {\n    return path.join(',').replace(p2s, '$1');\n};\nvar base3 = function (t, p1, p2, p3, p4) {\n    var t1 = -3 * p1 + 9 * p2 - 9 * p3 + 3 * p4;\n    var t2 = t * t1 + 6 * p1 - 12 * p2 + 6 * p3;\n    return t * t2 - 3 * p1 + 3 * p2;\n};\nvar bezlen = function (x1, y1, x2, y2, x3, y3, x4, y4, z) {\n    if (z === null) {\n        z = 1;\n    }\n    z = z > 1 ? 1 : z < 0 ? 0 : z;\n    var z2 = z / 2;\n    var n = 12;\n    var Tvalues = [\n        -0.1252, 0.1252, -0.3678, 0.3678, -0.5873, 0.5873, -0.7699, 0.7699, -0.9041, 0.9041, -0.9816, 0.9816,\n    ];\n    var Cvalues = [0.2491, 0.2491, 0.2335, 0.2335, 0.2032, 0.2032, 0.1601, 0.1601, 0.1069, 0.1069, 0.0472, 0.0472];\n    var sum = 0;\n    for (var i = 0; i < n; i++) {\n        var ct = z2 * Tvalues[i] + z2;\n        var xbase = base3(ct, x1, x2, x3, x4);\n        var ybase = base3(ct, y1, y2, y3, y4);\n        var comb = xbase * xbase + ybase * ybase;\n        sum += Cvalues[i] * Math.sqrt(comb);\n    }\n    return z2 * sum;\n};\nvar curveDim = function (x0, y0, x1, y1, x2, y2, x3, y3) {\n    var tvalues = [];\n    var bounds = [[], []];\n    var a;\n    var b;\n    var c;\n    var t;\n    for (var i = 0; i < 2; ++i) {\n        if (i === 0) {\n            b = 6 * x0 - 12 * x1 + 6 * x2;\n            a = -3 * x0 + 9 * x1 - 9 * x2 + 3 * x3;\n            c = 3 * x1 - 3 * x0;\n        }\n        else {\n            b = 6 * y0 - 12 * y1 + 6 * y2;\n            a = -3 * y0 + 9 * y1 - 9 * y2 + 3 * y3;\n            c = 3 * y1 - 3 * y0;\n        }\n        if (Math.abs(a) < 1e-12) {\n            if (Math.abs(b) < 1e-12) {\n                continue;\n            }\n            t = -c / b;\n            if (t > 0 && t < 1) {\n                tvalues.push(t);\n            }\n            continue;\n        }\n        var b2ac = b * b - 4 * c * a;\n        var sqrtb2ac = Math.sqrt(b2ac);\n        if (b2ac < 0) {\n            continue;\n        }\n        var t1 = (-b + sqrtb2ac) / (2 * a);\n        if (t1 > 0 && t1 < 1) {\n            tvalues.push(t1);\n        }\n        var t2 = (-b - sqrtb2ac) / (2 * a);\n        if (t2 > 0 && t2 < 1) {\n            tvalues.push(t2);\n        }\n    }\n    var j = tvalues.length;\n    var jlen = j;\n    var mt;\n    while (j--) {\n        t = tvalues[j];\n        mt = 1 - t;\n        bounds[0][j] = mt * mt * mt * x0 + 3 * mt * mt * t * x1 + 3 * mt * t * t * x2 + t * t * t * x3;\n        bounds[1][j] = mt * mt * mt * y0 + 3 * mt * mt * t * y1 + 3 * mt * t * t * y2 + t * t * t * y3;\n    }\n    bounds[0][jlen] = x0;\n    bounds[1][jlen] = y0;\n    bounds[0][jlen + 1] = x3;\n    bounds[1][jlen + 1] = y3;\n    bounds[0].length = bounds[1].length = jlen + 2;\n    return {\n        min: {\n            x: Math.min.apply(0, bounds[0]),\n            y: Math.min.apply(0, bounds[1]),\n        },\n        max: {\n            x: Math.max.apply(0, bounds[0]),\n            y: Math.max.apply(0, bounds[1]),\n        },\n    };\n};\nvar intersect = function (x1, y1, x2, y2, x3, y3, x4, y4) {\n    if (Math.max(x1, x2) < Math.min(x3, x4) ||\n        Math.min(x1, x2) > Math.max(x3, x4) ||\n        Math.max(y1, y2) < Math.min(y3, y4) ||\n        Math.min(y1, y2) > Math.max(y3, y4)) {\n        return;\n    }\n    var nx = (x1 * y2 - y1 * x2) * (x3 - x4) - (x1 - x2) * (x3 * y4 - y3 * x4);\n    var ny = (x1 * y2 - y1 * x2) * (y3 - y4) - (y1 - y2) * (x3 * y4 - y3 * x4);\n    var denominator = (x1 - x2) * (y3 - y4) - (y1 - y2) * (x3 - x4);\n    if (!denominator) {\n        return;\n    }\n    var px = nx / denominator;\n    var py = ny / denominator;\n    var px2 = +px.toFixed(2);\n    var py2 = +py.toFixed(2);\n    if (px2 < +Math.min(x1, x2).toFixed(2) ||\n        px2 > +Math.max(x1, x2).toFixed(2) ||\n        px2 < +Math.min(x3, x4).toFixed(2) ||\n        px2 > +Math.max(x3, x4).toFixed(2) ||\n        py2 < +Math.min(y1, y2).toFixed(2) ||\n        py2 > +Math.max(y1, y2).toFixed(2) ||\n        py2 < +Math.min(y3, y4).toFixed(2) ||\n        py2 > +Math.max(y3, y4).toFixed(2)) {\n        return;\n    }\n    return {\n        x: px,\n        y: py,\n    };\n};\nvar isPointInsideBBox = function (bbox, x, y) {\n    return x >= bbox.x && x <= bbox.x + bbox.width && y >= bbox.y && y <= bbox.y + bbox.height;\n};\nvar rectPath = function (x, y, w, h, r) {\n    if (r) {\n        return [\n            ['M', +x + +r, y],\n            ['l', w - r * 2, 0],\n            ['a', r, r, 0, 0, 1, r, r],\n            ['l', 0, h - r * 2],\n            ['a', r, r, 0, 0, 1, -r, r],\n            ['l', r * 2 - w, 0],\n            ['a', r, r, 0, 0, 1, -r, -r],\n            ['l', 0, r * 2 - h],\n            ['a', r, r, 0, 0, 1, r, -r],\n            ['z'],\n        ];\n    }\n    var res = [['M', x, y], ['l', w, 0], ['l', 0, h], ['l', -w, 0], ['z']];\n    // @ts-ignore\n    res.parsePathArray = parsePathArray;\n    return res;\n};\nvar box = function (x, y, width, height) {\n    if (x === null) {\n        x = y = width = height = 0;\n    }\n    if (y === null) {\n        y = x.y;\n        width = x.width;\n        height = x.height;\n        x = x.x;\n    }\n    return {\n        x: x,\n        y: y,\n        width: width,\n        w: width,\n        height: height,\n        h: height,\n        x2: x + width,\n        y2: y + height,\n        cx: x + width / 2,\n        cy: y + height / 2,\n        r1: Math.min(width, height) / 2,\n        r2: Math.max(width, height) / 2,\n        r0: Math.sqrt(width * width + height * height) / 2,\n        path: rectPath(x, y, width, height),\n        vb: [x, y, width, height].join(' '),\n    };\n};\nvar isBBoxIntersect = function (bbox1, bbox2) {\n    bbox1 = box(bbox1);\n    bbox2 = box(bbox2);\n    return (isPointInsideBBox(bbox2, bbox1.x, bbox1.y) ||\n        isPointInsideBBox(bbox2, bbox1.x2, bbox1.y) ||\n        isPointInsideBBox(bbox2, bbox1.x, bbox1.y2) ||\n        isPointInsideBBox(bbox2, bbox1.x2, bbox1.y2) ||\n        isPointInsideBBox(bbox1, bbox2.x, bbox2.y) ||\n        isPointInsideBBox(bbox1, bbox2.x2, bbox2.y) ||\n        isPointInsideBBox(bbox1, bbox2.x, bbox2.y2) ||\n        isPointInsideBBox(bbox1, bbox2.x2, bbox2.y2) ||\n        (((bbox1.x < bbox2.x2 && bbox1.x > bbox2.x) || (bbox2.x < bbox1.x2 && bbox2.x > bbox1.x)) &&\n            ((bbox1.y < bbox2.y2 && bbox1.y > bbox2.y) || (bbox2.y < bbox1.y2 && bbox2.y > bbox1.y))));\n};\nvar bezierBBox = function (p1x, p1y, c1x, c1y, c2x, c2y, p2x, p2y) {\n    if (!isArray(p1x)) {\n        p1x = [p1x, p1y, c1x, c1y, c2x, c2y, p2x, p2y];\n    }\n    var bbox = curveDim.apply(null, p1x);\n    return box(bbox.min.x, bbox.min.y, bbox.max.x - bbox.min.x, bbox.max.y - bbox.min.y);\n};\nvar findDotsAtSegment = function (p1x, p1y, c1x, c1y, c2x, c2y, p2x, p2y, t) {\n    var t1 = 1 - t;\n    var t13 = Math.pow(t1, 3);\n    var t12 = Math.pow(t1, 2);\n    var t2 = t * t;\n    var t3 = t2 * t;\n    var x = t13 * p1x + t12 * 3 * t * c1x + t1 * 3 * t * t * c2x + t3 * p2x;\n    var y = t13 * p1y + t12 * 3 * t * c1y + t1 * 3 * t * t * c2y + t3 * p2y;\n    var mx = p1x + 2 * t * (c1x - p1x) + t2 * (c2x - 2 * c1x + p1x);\n    var my = p1y + 2 * t * (c1y - p1y) + t2 * (c2y - 2 * c1y + p1y);\n    var nx = c1x + 2 * t * (c2x - c1x) + t2 * (p2x - 2 * c2x + c1x);\n    var ny = c1y + 2 * t * (c2y - c1y) + t2 * (p2y - 2 * c2y + c1y);\n    var ax = t1 * p1x + t * c1x;\n    var ay = t1 * p1y + t * c1y;\n    var cx = t1 * c2x + t * p2x;\n    var cy = t1 * c2y + t * p2y;\n    var alpha = 90 - (Math.atan2(mx - nx, my - ny) * 180) / Math.PI;\n    // (mx > nx || my < ny) && (alpha += 180);\n    return {\n        x: x,\n        y: y,\n        m: {\n            x: mx,\n            y: my,\n        },\n        n: {\n            x: nx,\n            y: ny,\n        },\n        start: {\n            x: ax,\n            y: ay,\n        },\n        end: {\n            x: cx,\n            y: cy,\n        },\n        alpha: alpha,\n    };\n};\nvar interHelper = function (bez1, bez2, justCount) {\n    var bbox1 = bezierBBox(bez1);\n    var bbox2 = bezierBBox(bez2);\n    if (!isBBoxIntersect(bbox1, bbox2)) {\n        return justCount ? 0 : [];\n    }\n    var l1 = bezlen.apply(0, bez1);\n    var l2 = bezlen.apply(0, bez2);\n    var n1 = ~~(l1 / 8);\n    var n2 = ~~(l2 / 8);\n    var dots1 = [];\n    var dots2 = [];\n    var xy = {};\n    var res = justCount ? 0 : [];\n    for (var i = 0; i < n1 + 1; i++) {\n        var d = findDotsAtSegment.apply(0, bez1.concat(i / n1));\n        dots1.push({\n            x: d.x,\n            y: d.y,\n            t: i / n1,\n        });\n    }\n    for (var i = 0; i < n2 + 1; i++) {\n        var d = findDotsAtSegment.apply(0, bez2.concat(i / n2));\n        dots2.push({\n            x: d.x,\n            y: d.y,\n            t: i / n2,\n        });\n    }\n    for (var i = 0; i < n1; i++) {\n        for (var j = 0; j < n2; j++) {\n            var di = dots1[i];\n            var di1 = dots1[i + 1];\n            var dj = dots2[j];\n            var dj1 = dots2[j + 1];\n            var ci = Math.abs(di1.x - di.x) < 0.001 ? 'y' : 'x';\n            var cj = Math.abs(dj1.x - dj.x) < 0.001 ? 'y' : 'x';\n            var is = intersect(di.x, di.y, di1.x, di1.y, dj.x, dj.y, dj1.x, dj1.y);\n            if (is) {\n                if (xy[is.x.toFixed(4)] === is.y.toFixed(4)) {\n                    continue;\n                }\n                xy[is.x.toFixed(4)] = is.y.toFixed(4);\n                var t1 = di.t + Math.abs((is[ci] - di[ci]) / (di1[ci] - di[ci])) * (di1.t - di.t);\n                var t2 = dj.t + Math.abs((is[cj] - dj[cj]) / (dj1[cj] - dj[cj])) * (dj1.t - dj.t);\n                if (t1 >= 0 && t1 <= 1 && t2 >= 0 && t2 <= 1) {\n                    if (justCount) {\n                        // @ts-ignore\n                        res += 1;\n                    }\n                    else {\n                        // @ts-ignore\n                        res.push({\n                            x: is.x,\n                            y: is.y,\n                            t1: t1,\n                            t2: t2,\n                        });\n                    }\n                }\n            }\n        }\n    }\n    return res;\n};\nvar interPathHelper = function (path1, path2, justCount) {\n    path1 = pathToCurve(path1);\n    path2 = pathToCurve(path2);\n    var x1;\n    var y1;\n    var x2;\n    var y2;\n    var x1m;\n    var y1m;\n    var x2m;\n    var y2m;\n    var bez1;\n    var bez2;\n    var res = justCount ? 0 : [];\n    for (var i = 0, ii = path1.length; i < ii; i++) {\n        var pi = path1[i];\n        if (pi[0] === 'M') {\n            x1 = x1m = pi[1];\n            y1 = y1m = pi[2];\n        }\n        else {\n            if (pi[0] === 'C') {\n                bez1 = [x1, y1].concat(pi.slice(1));\n                x1 = bez1[6];\n                y1 = bez1[7];\n            }\n            else {\n                bez1 = [x1, y1, x1, y1, x1m, y1m, x1m, y1m];\n                x1 = x1m;\n                y1 = y1m;\n            }\n            for (var j = 0, jj = path2.length; j < jj; j++) {\n                var pj = path2[j];\n                if (pj[0] === 'M') {\n                    x2 = x2m = pj[1];\n                    y2 = y2m = pj[2];\n                }\n                else {\n                    if (pj[0] === 'C') {\n                        bez2 = [x2, y2].concat(pj.slice(1));\n                        x2 = bez2[6];\n                        y2 = bez2[7];\n                    }\n                    else {\n                        bez2 = [x2, y2, x2, y2, x2m, y2m, x2m, y2m];\n                        x2 = x2m;\n                        y2 = y2m;\n                    }\n                    var intr = interHelper(bez1, bez2, justCount);\n                    if (justCount) {\n                        // @ts-ignore\n                        res += intr;\n                    }\n                    else {\n                        // @ts-ignore\n                        for (var k = 0, kk = intr.length; k < kk; k++) {\n                            intr[k].segment1 = i;\n                            intr[k].segment2 = j;\n                            intr[k].bez1 = bez1;\n                            intr[k].bez2 = bez2;\n                        }\n                        // @ts-ignore\n                        res = res.concat(intr);\n                    }\n                }\n            }\n        }\n    }\n    return res;\n};\nvar intersection = function (path1, path2) {\n    return interPathHelper(path1, path2);\n};\nfunction decasteljau(points, t) {\n    var left = [];\n    var right = [];\n    function recurse(points, t) {\n        if (points.length === 1) {\n            left.push(points[0]);\n            right.push(points[0]);\n        }\n        else {\n            var middlePoints = [];\n            for (var i = 0; i < points.length - 1; i++) {\n                if (i === 0) {\n                    left.push(points[0]);\n                }\n                if (i === points.length - 2) {\n                    right.push(points[i + 1]);\n                }\n                middlePoints[i] = [\n                    (1 - t) * points[i][0] + t * points[i + 1][0],\n                    (1 - t) * points[i][1] + t * points[i + 1][1],\n                ];\n            }\n            recurse(middlePoints, t);\n        }\n    }\n    if (points.length) {\n        recurse(points, t);\n    }\n    return { left: left, right: right.reverse() };\n}\nfunction splitCurve(start, end, count) {\n    var points = [[start[1], start[2]]];\n    count = count || 2;\n    var segments = [];\n    if (end[0] === 'A') {\n        points.push(end[6]);\n        points.push(end[7]);\n    }\n    else if (end[0] === 'C') {\n        points.push([end[1], end[2]]);\n        points.push([end[3], end[4]]);\n        points.push([end[5], end[6]]);\n    }\n    else if (end[0] === 'S' || end[0] === 'Q') {\n        points.push([end[1], end[2]]);\n        points.push([end[3], end[4]]);\n    }\n    else {\n        points.push([end[1], end[2]]);\n    }\n    var leftSegments = points;\n    var t = 1 / count;\n    for (var i = 0; i < count - 1; i++) {\n        var rt = t / (1 - t * i);\n        var split = decasteljau(leftSegments, rt);\n        segments.push(split.left);\n        leftSegments = split.right;\n    }\n    segments.push(leftSegments);\n    var result = segments.map(function (segment) {\n        var cmd = [];\n        if (segment.length === 4) {\n            cmd.push('C');\n            cmd = cmd.concat(segment[2]);\n        }\n        if (segment.length >= 3) {\n            if (segment.length === 3) {\n                cmd.push('Q');\n            }\n            cmd = cmd.concat(segment[1]);\n        }\n        if (segment.length === 2) {\n            cmd.push('L');\n        }\n        cmd = cmd.concat(segment[segment.length - 1]);\n        return cmd;\n    });\n    return result;\n}\nvar splitSegment = function (start, end, count) {\n    if (count === 1) {\n        return [[].concat(start)];\n    }\n    var segments = [];\n    if (end[0] === 'L' || end[0] === 'C' || end[0] === 'Q') {\n        segments = segments.concat(splitCurve(start, end, count));\n    }\n    else {\n        var temp = [].concat(start);\n        if (temp[0] === 'M') {\n            temp[0] = 'L';\n        }\n        for (var i = 0; i <= count - 1; i++) {\n            segments.push(temp);\n        }\n    }\n    return segments;\n};\nvar fillPath = function (source, target) {\n    if (source.length === 1) {\n        return source;\n    }\n    var sourceLen = source.length - 1;\n    var targetLen = target.length - 1;\n    var ratio = sourceLen / targetLen;\n    var segmentsToFill = [];\n    if (source.length === 1 && source[0][0] === 'M') {\n        for (var i = 0; i < targetLen - sourceLen; i++) {\n            source.push(source[0]);\n        }\n        return source;\n    }\n    for (var i = 0; i < targetLen; i++) {\n        var index = Math.floor(ratio * i);\n        segmentsToFill[index] = (segmentsToFill[index] || 0) + 1;\n    }\n    var filled = segmentsToFill.reduce(function (filled, count, i) {\n        if (i === sourceLen) {\n            return filled.concat(source[sourceLen]);\n        }\n        return filled.concat(splitSegment(source[i], source[i + 1], count));\n    }, []);\n    filled.unshift(source[0]);\n    if (target[targetLen] === 'Z' || target[targetLen] === 'z') {\n        filled.push('Z');\n    }\n    return filled;\n};\nvar isEqual = function (obj1, obj2) {\n    if (obj1.length !== obj2.length) {\n        return false;\n    }\n    var result = true;\n    each(obj1, function (item, i) {\n        if (item !== obj2[i]) {\n            result = false;\n            return false;\n        }\n    });\n    return result;\n};\nfunction getMinDiff(del, add, modify) {\n    var type = null;\n    var min = modify;\n    if (add < min) {\n        min = add;\n        type = 'add';\n    }\n    if (del < min) {\n        min = del;\n        type = 'del';\n    }\n    return {\n        type: type,\n        min: min,\n    };\n}\n/*\n * https://en.wikipedia.org/wiki/Levenshtein_distance\n * 计算两条path的编辑距离\n */\nvar levenshteinDistance = function (source, target) {\n    var sourceLen = source.length;\n    var targetLen = target.length;\n    var sourceSegment;\n    var targetSegment;\n    var temp = 0;\n    if (sourceLen === 0 || targetLen === 0) {\n        return null;\n    }\n    var dist = [];\n    for (var i = 0; i <= sourceLen; i++) {\n        dist[i] = [];\n        dist[i][0] = { min: i };\n    }\n    for (var j = 0; j <= targetLen; j++) {\n        dist[0][j] = { min: j };\n    }\n    for (var i = 1; i <= sourceLen; i++) {\n        sourceSegment = source[i - 1];\n        for (var j = 1; j <= targetLen; j++) {\n            targetSegment = target[j - 1];\n            if (isEqual(sourceSegment, targetSegment)) {\n                temp = 0;\n            }\n            else {\n                temp = 1;\n            }\n            var del = dist[i - 1][j].min + 1;\n            var add = dist[i][j - 1].min + 1;\n            var modify = dist[i - 1][j - 1].min + temp;\n            dist[i][j] = getMinDiff(del, add, modify);\n        }\n    }\n    return dist;\n};\nvar fillPathByDiff = function (source, target) {\n    var diffMatrix = levenshteinDistance(source, target);\n    var sourceLen = source.length;\n    var targetLen = target.length;\n    var changes = [];\n    var index = 1;\n    var minPos = 1;\n    // 如果source和target不是完全不相等\n    if (diffMatrix[sourceLen][targetLen].min !== sourceLen) {\n        // 获取从source到target所需改动\n        for (var i = 1; i <= sourceLen; i++) {\n            var min = diffMatrix[i][i].min;\n            minPos = i;\n            for (var j = index; j <= targetLen; j++) {\n                if (diffMatrix[i][j].min < min) {\n                    min = diffMatrix[i][j].min;\n                    minPos = j;\n                }\n            }\n            index = minPos;\n            if (diffMatrix[i][index].type) {\n                changes.push({ index: i - 1, type: diffMatrix[i][index].type });\n            }\n        }\n        // 对source进行增删path\n        for (var i = changes.length - 1; i >= 0; i--) {\n            index = changes[i].index;\n            if (changes[i].type === 'add') {\n                source.splice(index, 0, [].concat(source[index]));\n            }\n            else {\n                source.splice(index, 1);\n            }\n        }\n    }\n    // source尾部补齐\n    sourceLen = source.length;\n    var diff = targetLen - sourceLen;\n    if (sourceLen < targetLen) {\n        for (var i = 0; i < diff; i++) {\n            if (source[sourceLen - 1][0] === 'z' || source[sourceLen - 1][0] === 'Z') {\n                source.splice(sourceLen - 2, 0, source[sourceLen - 2]);\n            }\n            else {\n                source.push(source[sourceLen - 1]);\n            }\n            sourceLen += 1;\n        }\n    }\n    return source;\n};\n// 将两个点均分成count个点\nfunction _splitPoints(points, former, count) {\n    var result = [].concat(points);\n    var index;\n    var t = 1 / (count + 1);\n    var formerEnd = _getSegmentPoints(former)[0];\n    for (var i = 1; i <= count; i++) {\n        t *= i;\n        index = Math.floor(points.length * t);\n        if (index === 0) {\n            result.unshift([formerEnd[0] * t + points[index][0] * (1 - t), formerEnd[1] * t + points[index][1] * (1 - t)]);\n        }\n        else {\n            result.splice(index, 0, [\n                formerEnd[0] * t + points[index][0] * (1 - t),\n                formerEnd[1] * t + points[index][1] * (1 - t),\n            ]);\n        }\n    }\n    return result;\n}\n/*\n * 抽取pathSegment中的关键点\n * M,L,A,Q,H,V一个端点\n * Q, S抽取一个端点，一个控制点\n * C抽取一个端点，两个控制点\n */\nfunction _getSegmentPoints(segment) {\n    var points = [];\n    switch (segment[0]) {\n        case 'M':\n            points.push([segment[1], segment[2]]);\n            break;\n        case 'L':\n            points.push([segment[1], segment[2]]);\n            break;\n        case 'A':\n            points.push([segment[6], segment[7]]);\n            break;\n        case 'Q':\n            points.push([segment[3], segment[4]]);\n            points.push([segment[1], segment[2]]);\n            break;\n        case 'T':\n            points.push([segment[1], segment[2]]);\n            break;\n        case 'C':\n            points.push([segment[5], segment[6]]);\n            points.push([segment[1], segment[2]]);\n            points.push([segment[3], segment[4]]);\n            break;\n        case 'S':\n            points.push([segment[3], segment[4]]);\n            points.push([segment[1], segment[2]]);\n            break;\n        case 'H':\n            points.push([segment[1], segment[1]]);\n            break;\n        case 'V':\n            points.push([segment[1], segment[1]]);\n            break;\n        default:\n    }\n    return points;\n}\nvar formatPath = function (fromPath, toPath) {\n    if (fromPath.length <= 1) {\n        return fromPath;\n    }\n    var points;\n    for (var i = 0; i < toPath.length; i++) {\n        if (fromPath[i][0] !== toPath[i][0]) {\n            // 获取fromPath的pathSegment的端点，根据toPath的指令对其改造\n            points = _getSegmentPoints(fromPath[i]);\n            switch (toPath[i][0]) {\n                case 'M':\n                    fromPath[i] = ['M'].concat(points[0]);\n                    break;\n                case 'L':\n                    fromPath[i] = ['L'].concat(points[0]);\n                    break;\n                case 'A':\n                    fromPath[i] = [].concat(toPath[i]);\n                    fromPath[i][6] = points[0][0];\n                    fromPath[i][7] = points[0][1];\n                    break;\n                case 'Q':\n                    if (points.length < 2) {\n                        if (i > 0) {\n                            points = _splitPoints(points, fromPath[i - 1], 1);\n                        }\n                        else {\n                            fromPath[i] = toPath[i];\n                            break;\n                        }\n                    }\n                    fromPath[i] = ['Q'].concat(points.reduce(function (arr, i) {\n                        return arr.concat(i);\n                    }, []));\n                    break;\n                case 'T':\n                    fromPath[i] = ['T'].concat(points[0]);\n                    break;\n                case 'C':\n                    if (points.length < 3) {\n                        if (i > 0) {\n                            points = _splitPoints(points, fromPath[i - 1], 2);\n                        }\n                        else {\n                            fromPath[i] = toPath[i];\n                            break;\n                        }\n                    }\n                    fromPath[i] = ['C'].concat(points.reduce(function (arr, i) {\n                        return arr.concat(i);\n                    }, []));\n                    break;\n                case 'S':\n                    if (points.length < 2) {\n                        if (i > 0) {\n                            points = _splitPoints(points, fromPath[i - 1], 1);\n                        }\n                        else {\n                            fromPath[i] = toPath[i];\n                            break;\n                        }\n                    }\n                    fromPath[i] = ['S'].concat(points.reduce(function (arr, i) {\n                        return arr.concat(i);\n                    }, []));\n                    break;\n                default:\n                    fromPath[i] = toPath[i];\n            }\n        }\n    }\n    return fromPath;\n};\nexport { catmullRomToBezier, fillPath, fillPathByDiff, formatPath, intersection, parsePathArray, parsePathString, pathToAbsolute, pathToCurve, rectPath, };\n//# sourceMappingURL=path.js.map","var GraphEvent = /** @class */ (function () {\n    function GraphEvent(type, event) {\n        /**\n         * 是否允许冒泡\n         * @type {boolean}\n         */\n        this.bubbles = true;\n        /**\n         * 触发对象\n         * @type {object}\n         */\n        this.target = null;\n        /**\n         * 监听对象\n         * @type {object}\n         */\n        this.currentTarget = null;\n        /**\n         * 委托对象\n         * @type {object}\n         */\n        this.delegateTarget = null;\n        /**\n         * 委托事件监听对象的代理对象，即 ev.delegateObject = ev.currentTarget.get('delegateObject')\n         * @type {object}\n         */\n        this.delegateObject = null;\n        /**\n         * 是否阻止了原生事件\n         * @type {boolean}\n         */\n        this.defaultPrevented = false;\n        /**\n         * 是否阻止传播（向上冒泡）\n         * @type {boolean}\n         */\n        this.propagationStopped = false;\n        /**\n         * 触发事件的图形\n         * @type {IShape}\n         */\n        this.shape = null;\n        /**\n         * 开始触发事件的图形\n         * @type {IShape}\n         */\n        this.fromShape = null;\n        /**\n         * 事件结束时的触发图形\n         * @type {IShape}\n         */\n        this.toShape = null;\n        // 触发事件的路径\n        this.propagationPath = [];\n        this.type = type;\n        this.name = type;\n        this.originalEvent = event;\n        this.timeStamp = event.timeStamp;\n    }\n    /**\n     * 阻止浏览器默认的行为\n     */\n    GraphEvent.prototype.preventDefault = function () {\n        this.defaultPrevented = true;\n        if (this.originalEvent.preventDefault) {\n            this.originalEvent.preventDefault();\n        }\n    };\n    /**\n     * 阻止冒泡\n     */\n    GraphEvent.prototype.stopPropagation = function () {\n        this.propagationStopped = true;\n    };\n    GraphEvent.prototype.toString = function () {\n        var type = this.type;\n        return \"[Event (type=\" + type + \")]\";\n    };\n    GraphEvent.prototype.save = function () { };\n    GraphEvent.prototype.restore = function () { };\n    return GraphEvent;\n}());\nexport default GraphEvent;\n//# sourceMappingURL=graph-event.js.map","export function removeFromArray(arr, obj) {\n    var index = arr.indexOf(obj);\n    if (index !== -1) {\n        arr.splice(index, 1);\n    }\n}\nexport var isBrowser = typeof window !== 'undefined' && typeof window.document !== 'undefined';\nexport { isNil, isFunction, isString, isObject, isArray, mix, each, upperFirst } from '@antv/util';\n// 是否元素的父容器\nexport function isParent(container, shape) {\n    // 所有 shape 都是 canvas 的子元素\n    if (container.isCanvas()) {\n        return true;\n    }\n    var parent = shape.getParent();\n    var isParent = false;\n    while (parent) {\n        if (parent === container) {\n            isParent = true;\n            break;\n        }\n        parent = parent.getParent();\n    }\n    return isParent;\n}\nexport function isAllowCapture(element) {\n    // @ts-ignore\n    return element.cfg.visible && element.cfg.capture;\n}\n//# sourceMappingURL=util.js.map","import { __extends } from \"tslib\";\nimport EE from '@antv/event-emitter';\nimport { mix } from '../util/util';\nvar Base = /** @class */ (function (_super) {\n    __extends(Base, _super);\n    function Base(cfg) {\n        var _this = _super.call(this) || this;\n        /**\n         * 是否被销毁\n         * @type {boolean}\n         */\n        _this.destroyed = false;\n        var defaultCfg = _this.getDefaultCfg();\n        _this.cfg = mix(defaultCfg, cfg);\n        return _this;\n    }\n    /**\n     * @protected\n     * 默认的配置项\n     * @returns {object} 默认的配置项\n     */\n    Base.prototype.getDefaultCfg = function () {\n        return {};\n    };\n    // 实现接口的方法\n    Base.prototype.get = function (name) {\n        return this.cfg[name];\n    };\n    // 实现接口的方法\n    Base.prototype.set = function (name, value) {\n        this.cfg[name] = value;\n    };\n    // 实现接口的方法\n    Base.prototype.destroy = function () {\n        this.cfg = {\n            destroyed: true,\n        };\n        this.off();\n        this.destroyed = true;\n    };\n    return Base;\n}(EE));\nexport default Base;\n//# sourceMappingURL=base.js.map","var __spreadArray = (this && this.__spreadArray) || function (to, from, pack) {\n    if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {\n        if (ar || !(i in from)) {\n            if (!ar) ar = Array.prototype.slice.call(from, 0, i);\n            ar[i] = from[i];\n        }\n    }\n    return to.concat(ar || Array.prototype.slice.call(from));\n};\nvar BrowserInfo = /** @class */ (function () {\n    function BrowserInfo(name, version, os) {\n        this.name = name;\n        this.version = version;\n        this.os = os;\n        this.type = 'browser';\n    }\n    return BrowserInfo;\n}());\nexport { BrowserInfo };\nvar NodeInfo = /** @class */ (function () {\n    function NodeInfo(version) {\n        this.version = version;\n        this.type = 'node';\n        this.name = 'node';\n        this.os = process.platform;\n    }\n    return NodeInfo;\n}());\nexport { NodeInfo };\nvar SearchBotDeviceInfo = /** @class */ (function () {\n    function SearchBotDeviceInfo(name, version, os, bot) {\n        this.name = name;\n        this.version = version;\n        this.os = os;\n        this.bot = bot;\n        this.type = 'bot-device';\n    }\n    return SearchBotDeviceInfo;\n}());\nexport { SearchBotDeviceInfo };\nvar BotInfo = /** @class */ (function () {\n    function BotInfo() {\n        this.type = 'bot';\n        this.bot = true; // NOTE: deprecated test name instead\n        this.name = 'bot';\n        this.version = null;\n        this.os = null;\n    }\n    return BotInfo;\n}());\nexport { BotInfo };\nvar ReactNativeInfo = /** @class */ (function () {\n    function ReactNativeInfo() {\n        this.type = 'react-native';\n        this.name = 'react-native';\n        this.version = null;\n        this.os = null;\n    }\n    return ReactNativeInfo;\n}());\nexport { ReactNativeInfo };\n// tslint:disable-next-line:max-line-length\nvar SEARCHBOX_UA_REGEX = /alexa|bot|crawl(er|ing)|facebookexternalhit|feedburner|google web preview|nagios|postrank|pingdom|slurp|spider|yahoo!|yandex/;\nvar SEARCHBOT_OS_REGEX = /(nuhk|curl|Googlebot|Yammybot|Openbot|Slurp|MSNBot|Ask\\ Jeeves\\/Teoma|ia_archiver)/;\nvar REQUIRED_VERSION_PARTS = 3;\nvar userAgentRules = [\n    ['aol', /AOLShield\\/([0-9\\._]+)/],\n    ['edge', /Edge\\/([0-9\\._]+)/],\n    ['edge-ios', /EdgiOS\\/([0-9\\._]+)/],\n    ['yandexbrowser', /YaBrowser\\/([0-9\\._]+)/],\n    ['kakaotalk', /KAKAOTALK\\s([0-9\\.]+)/],\n    ['samsung', /SamsungBrowser\\/([0-9\\.]+)/],\n    ['silk', /\\bSilk\\/([0-9._-]+)\\b/],\n    ['miui', /MiuiBrowser\\/([0-9\\.]+)$/],\n    ['beaker', /BeakerBrowser\\/([0-9\\.]+)/],\n    ['edge-chromium', /EdgA?\\/([0-9\\.]+)/],\n    [\n        'chromium-webview',\n        /(?!Chrom.*OPR)wv\\).*Chrom(?:e|ium)\\/([0-9\\.]+)(:?\\s|$)/,\n    ],\n    ['chrome', /(?!Chrom.*OPR)Chrom(?:e|ium)\\/([0-9\\.]+)(:?\\s|$)/],\n    ['phantomjs', /PhantomJS\\/([0-9\\.]+)(:?\\s|$)/],\n    ['crios', /CriOS\\/([0-9\\.]+)(:?\\s|$)/],\n    ['firefox', /Firefox\\/([0-9\\.]+)(?:\\s|$)/],\n    ['fxios', /FxiOS\\/([0-9\\.]+)/],\n    ['opera-mini', /Opera Mini.*Version\\/([0-9\\.]+)/],\n    ['opera', /Opera\\/([0-9\\.]+)(?:\\s|$)/],\n    ['opera', /OPR\\/([0-9\\.]+)(:?\\s|$)/],\n    ['pie', /^Microsoft Pocket Internet Explorer\\/(\\d+\\.\\d+)$/],\n    ['pie', /^Mozilla\\/\\d\\.\\d+\\s\\(compatible;\\s(?:MSP?IE|MSInternet Explorer) (\\d+\\.\\d+);.*Windows CE.*\\)$/],\n    ['netfront', /^Mozilla\\/\\d\\.\\d+.*NetFront\\/(\\d.\\d)/],\n    ['ie', /Trident\\/7\\.0.*rv\\:([0-9\\.]+).*\\).*Gecko$/],\n    ['ie', /MSIE\\s([0-9\\.]+);.*Trident\\/[4-7].0/],\n    ['ie', /MSIE\\s(7\\.0)/],\n    ['bb10', /BB10;\\sTouch.*Version\\/([0-9\\.]+)/],\n    ['android', /Android\\s([0-9\\.]+)/],\n    ['ios', /Version\\/([0-9\\._]+).*Mobile.*Safari.*/],\n    ['safari', /Version\\/([0-9\\._]+).*Safari/],\n    ['facebook', /FB[AS]V\\/([0-9\\.]+)/],\n    ['instagram', /Instagram\\s([0-9\\.]+)/],\n    ['ios-webview', /AppleWebKit\\/([0-9\\.]+).*Mobile/],\n    ['ios-webview', /AppleWebKit\\/([0-9\\.]+).*Gecko\\)$/],\n    ['curl', /^curl\\/([0-9\\.]+)$/],\n    ['searchbot', SEARCHBOX_UA_REGEX],\n];\nvar operatingSystemRules = [\n    ['iOS', /iP(hone|od|ad)/],\n    ['Android OS', /Android/],\n    ['BlackBerry OS', /BlackBerry|BB10/],\n    ['Windows Mobile', /IEMobile/],\n    ['Amazon OS', /Kindle/],\n    ['Windows 3.11', /Win16/],\n    ['Windows 95', /(Windows 95)|(Win95)|(Windows_95)/],\n    ['Windows 98', /(Windows 98)|(Win98)/],\n    ['Windows 2000', /(Windows NT 5.0)|(Windows 2000)/],\n    ['Windows XP', /(Windows NT 5.1)|(Windows XP)/],\n    ['Windows Server 2003', /(Windows NT 5.2)/],\n    ['Windows Vista', /(Windows NT 6.0)/],\n    ['Windows 7', /(Windows NT 6.1)/],\n    ['Windows 8', /(Windows NT 6.2)/],\n    ['Windows 8.1', /(Windows NT 6.3)/],\n    ['Windows 10', /(Windows NT 10.0)/],\n    ['Windows ME', /Windows ME/],\n    ['Windows CE', /Windows CE|WinCE|Microsoft Pocket Internet Explorer/],\n    ['Open BSD', /OpenBSD/],\n    ['Sun OS', /SunOS/],\n    ['Chrome OS', /CrOS/],\n    ['Linux', /(Linux)|(X11)/],\n    ['Mac OS', /(Mac_PowerPC)|(Macintosh)/],\n    ['QNX', /QNX/],\n    ['BeOS', /BeOS/],\n    ['OS/2', /OS\\/2/],\n];\nexport function detect(userAgent) {\n    if (!!userAgent) {\n        return parseUserAgent(userAgent);\n    }\n    if (typeof document === 'undefined' &&\n        typeof navigator !== 'undefined' &&\n        navigator.product === 'ReactNative') {\n        return new ReactNativeInfo();\n    }\n    if (typeof navigator !== 'undefined') {\n        return parseUserAgent(navigator.userAgent);\n    }\n    return getNodeVersion();\n}\nfunction matchUserAgent(ua) {\n    // opted for using reduce here rather than Array#first with a regex.test call\n    // this is primarily because using the reduce we only perform the regex\n    // execution once rather than once for the test and for the exec again below\n    // probably something that needs to be benchmarked though\n    return (ua !== '' &&\n        userAgentRules.reduce(function (matched, _a) {\n            var browser = _a[0], regex = _a[1];\n            if (matched) {\n                return matched;\n            }\n            var uaMatch = regex.exec(ua);\n            return !!uaMatch && [browser, uaMatch];\n        }, false));\n}\nexport function browserName(ua) {\n    var data = matchUserAgent(ua);\n    return data ? data[0] : null;\n}\nexport function parseUserAgent(ua) {\n    var matchedRule = matchUserAgent(ua);\n    if (!matchedRule) {\n        return null;\n    }\n    var name = matchedRule[0], match = matchedRule[1];\n    if (name === 'searchbot') {\n        return new BotInfo();\n    }\n    // Do not use RegExp for split operation as some browser do not support it (See: http://blog.stevenlevithan.com/archives/cross-browser-split)\n    var versionParts = match[1] && match[1].split('.').join('_').split('_').slice(0, 3);\n    if (versionParts) {\n        if (versionParts.length < REQUIRED_VERSION_PARTS) {\n            versionParts = __spreadArray(__spreadArray([], versionParts, true), createVersionParts(REQUIRED_VERSION_PARTS - versionParts.length), true);\n        }\n    }\n    else {\n        versionParts = [];\n    }\n    var version = versionParts.join('.');\n    var os = detectOS(ua);\n    var searchBotMatch = SEARCHBOT_OS_REGEX.exec(ua);\n    if (searchBotMatch && searchBotMatch[1]) {\n        return new SearchBotDeviceInfo(name, version, os, searchBotMatch[1]);\n    }\n    return new BrowserInfo(name, version, os);\n}\nexport function detectOS(ua) {\n    for (var ii = 0, count = operatingSystemRules.length; ii < count; ii++) {\n        var _a = operatingSystemRules[ii], os = _a[0], regex = _a[1];\n        var match = regex.exec(ua);\n        if (match) {\n            return os;\n        }\n    }\n    return null;\n}\nexport function getNodeVersion() {\n    var isNode = typeof process !== 'undefined' && process.version;\n    return isNode ? new NodeInfo(process.version.slice(1)) : null;\n}\nfunction createVersionParts(count) {\n    var output = [];\n    for (var ii = 0; ii < count; ii++) {\n        output.push('0');\n    }\n    return output;\n}\n","/**\n * Common utilities\n * @module glMatrix\n */\n\n// Configuration Constants\nexport var EPSILON = 0.000001;\nexport var ARRAY_TYPE = typeof Float32Array !== \"undefined\" ? Float32Array : Array;\nexport var RANDOM = Math.random;\nexport var ANGLE_ORDER = \"zyx\";\n\n/**\n * Symmetric round\n * see https://www.npmjs.com/package/round-half-up-symmetric#user-content-detailed-background\n *\n * @param {Number} a value to round\n */\nexport function round(a) {\n  if (a >= 0) return Math.round(a);\n  return a % 0.5 === 0 ? Math.floor(a) : Math.round(a);\n}\n\n/**\n * Sets the type of array used when creating new vectors and matrices\n *\n * @param {Float32ArrayConstructor | ArrayConstructor} type Array type, such as Float32Array or Array\n */\nexport function setMatrixArrayType(type) {\n  ARRAY_TYPE = type;\n}\nvar degree = Math.PI / 180;\nvar radian = 180 / Math.PI;\n\n/**\n * Convert Degree To Radian\n *\n * @param {Number} a Angle in Degrees\n */\nexport function toRadian(a) {\n  return a * degree;\n}\n\n/**\n * Convert Radian To Degree\n *\n * @param {Number} a Angle in Radians\n */\nexport function toDegree(a) {\n  return a * radian;\n}\n\n/**\n * Tests whether or not the arguments have approximately the same value, within an absolute\n * or relative tolerance of glMatrix.EPSILON (an absolute tolerance is used for values less\n * than or equal to 1.0, and a relative tolerance is used for larger values)\n *\n * @param {Number} a          The first number to test.\n * @param {Number} b          The second number to test.\n * @param {Number} tolerance  Absolute or relative tolerance (default glMatrix.EPSILON)\n * @returns {Boolean} True if the numbers are approximately equal, false otherwise.\n */\nexport function equals(a, b) {\n  var tolerance = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : EPSILON;\n  return Math.abs(a - b) <= tolerance * Math.max(1, Math.abs(a), Math.abs(b));\n}","import * as glMatrix from \"./common.js\";\n\n/**\n * 3 Dimensional Vector\n * @module vec3\n */\n\n/**\n * Creates a new, empty vec3\n *\n * @returns {vec3} a new 3D vector\n */\nexport function create() {\n  var out = new glMatrix.ARRAY_TYPE(3);\n  if (glMatrix.ARRAY_TYPE != Float32Array) {\n    out[0] = 0;\n    out[1] = 0;\n    out[2] = 0;\n  }\n  return out;\n}\n\n/**\n * Creates a new vec3 initialized with values from an existing vector\n *\n * @param {ReadonlyVec3} a vector to clone\n * @returns {vec3} a new 3D vector\n */\nexport function clone(a) {\n  var out = new glMatrix.ARRAY_TYPE(3);\n  out[0] = a[0];\n  out[1] = a[1];\n  out[2] = a[2];\n  return out;\n}\n\n/**\n * Calculates the length of a vec3\n *\n * @param {ReadonlyVec3} a vector to calculate length of\n * @returns {Number} length of a\n */\nexport function length(a) {\n  var x = a[0];\n  var y = a[1];\n  var z = a[2];\n  return Math.sqrt(x * x + y * y + z * z);\n}\n\n/**\n * Creates a new vec3 initialized with the given values\n *\n * @param {Number} x X component\n * @param {Number} y Y component\n * @param {Number} z Z component\n * @returns {vec3} a new 3D vector\n */\nexport function fromValues(x, y, z) {\n  var out = new glMatrix.ARRAY_TYPE(3);\n  out[0] = x;\n  out[1] = y;\n  out[2] = z;\n  return out;\n}\n\n/**\n * Copy the values from one vec3 to another\n *\n * @param {vec3} out the receiving vector\n * @param {ReadonlyVec3} a the source vector\n * @returns {vec3} out\n */\nexport function copy(out, a) {\n  out[0] = a[0];\n  out[1] = a[1];\n  out[2] = a[2];\n  return out;\n}\n\n/**\n * Set the components of a vec3 to the given values\n *\n * @param {vec3} out the receiving vector\n * @param {Number} x X component\n * @param {Number} y Y component\n * @param {Number} z Z component\n * @returns {vec3} out\n */\nexport function set(out, x, y, z) {\n  out[0] = x;\n  out[1] = y;\n  out[2] = z;\n  return out;\n}\n\n/**\n * Adds two vec3's\n *\n * @param {vec3} out the receiving vector\n * @param {ReadonlyVec3} a the first operand\n * @param {ReadonlyVec3} b the second operand\n * @returns {vec3} out\n */\nexport function add(out, a, b) {\n  out[0] = a[0] + b[0];\n  out[1] = a[1] + b[1];\n  out[2] = a[2] + b[2];\n  return out;\n}\n\n/**\n * Subtracts vector b from vector a\n *\n * @param {vec3} out the receiving vector\n * @param {ReadonlyVec3} a the first operand\n * @param {ReadonlyVec3} b the second operand\n * @returns {vec3} out\n */\nexport function subtract(out, a, b) {\n  out[0] = a[0] - b[0];\n  out[1] = a[1] - b[1];\n  out[2] = a[2] - b[2];\n  return out;\n}\n\n/**\n * Multiplies two vec3's\n *\n * @param {vec3} out the receiving vector\n * @param {ReadonlyVec3} a the first operand\n * @param {ReadonlyVec3} b the second operand\n * @returns {vec3} out\n */\nexport function multiply(out, a, b) {\n  out[0] = a[0] * b[0];\n  out[1] = a[1] * b[1];\n  out[2] = a[2] * b[2];\n  return out;\n}\n\n/**\n * Divides two vec3's\n *\n * @param {vec3} out the receiving vector\n * @param {ReadonlyVec3} a the first operand\n * @param {ReadonlyVec3} b the second operand\n * @returns {vec3} out\n */\nexport function divide(out, a, b) {\n  out[0] = a[0] / b[0];\n  out[1] = a[1] / b[1];\n  out[2] = a[2] / b[2];\n  return out;\n}\n\n/**\n * Math.ceil the components of a vec3\n *\n * @param {vec3} out the receiving vector\n * @param {ReadonlyVec3} a vector to ceil\n * @returns {vec3} out\n */\nexport function ceil(out, a) {\n  out[0] = Math.ceil(a[0]);\n  out[1] = Math.ceil(a[1]);\n  out[2] = Math.ceil(a[2]);\n  return out;\n}\n\n/**\n * Math.floor the components of a vec3\n *\n * @param {vec3} out the receiving vector\n * @param {ReadonlyVec3} a vector to floor\n * @returns {vec3} out\n */\nexport function floor(out, a) {\n  out[0] = Math.floor(a[0]);\n  out[1] = Math.floor(a[1]);\n  out[2] = Math.floor(a[2]);\n  return out;\n}\n\n/**\n * Returns the minimum of two vec3's\n *\n * @param {vec3} out the receiving vector\n * @param {ReadonlyVec3} a the first operand\n * @param {ReadonlyVec3} b the second operand\n * @returns {vec3} out\n */\nexport function min(out, a, b) {\n  out[0] = Math.min(a[0], b[0]);\n  out[1] = Math.min(a[1], b[1]);\n  out[2] = Math.min(a[2], b[2]);\n  return out;\n}\n\n/**\n * Returns the maximum of two vec3's\n *\n * @param {vec3} out the receiving vector\n * @param {ReadonlyVec3} a the first operand\n * @param {ReadonlyVec3} b the second operand\n * @returns {vec3} out\n */\nexport function max(out, a, b) {\n  out[0] = Math.max(a[0], b[0]);\n  out[1] = Math.max(a[1], b[1]);\n  out[2] = Math.max(a[2], b[2]);\n  return out;\n}\n\n/**\n * symmetric round the components of a vec3\n *\n * @param {vec3} out the receiving vector\n * @param {ReadonlyVec3} a vector to round\n * @returns {vec3} out\n */\nexport function round(out, a) {\n  out[0] = glMatrix.round(a[0]);\n  out[1] = glMatrix.round(a[1]);\n  out[2] = glMatrix.round(a[2]);\n  return out;\n}\n\n/**\n * Scales a vec3 by a scalar number\n *\n * @param {vec3} out the receiving vector\n * @param {ReadonlyVec3} a the vector to scale\n * @param {Number} b amount to scale the vector by\n * @returns {vec3} out\n */\nexport function scale(out, a, b) {\n  out[0] = a[0] * b;\n  out[1] = a[1] * b;\n  out[2] = a[2] * b;\n  return out;\n}\n\n/**\n * Adds two vec3's after scaling the second operand by a scalar value\n *\n * @param {vec3} out the receiving vector\n * @param {ReadonlyVec3} a the first operand\n * @param {ReadonlyVec3} b the second operand\n * @param {Number} scale the amount to scale b by before adding\n * @returns {vec3} out\n */\nexport function scaleAndAdd(out, a, b, scale) {\n  out[0] = a[0] + b[0] * scale;\n  out[1] = a[1] + b[1] * scale;\n  out[2] = a[2] + b[2] * scale;\n  return out;\n}\n\n/**\n * Calculates the euclidian distance between two vec3's\n *\n * @param {ReadonlyVec3} a the first operand\n * @param {ReadonlyVec3} b the second operand\n * @returns {Number} distance between a and b\n */\nexport function distance(a, b) {\n  var x = b[0] - a[0];\n  var y = b[1] - a[1];\n  var z = b[2] - a[2];\n  return Math.sqrt(x * x + y * y + z * z);\n}\n\n/**\n * Calculates the squared euclidian distance between two vec3's\n *\n * @param {ReadonlyVec3} a the first operand\n * @param {ReadonlyVec3} b the second operand\n * @returns {Number} squared distance between a and b\n */\nexport function squaredDistance(a, b) {\n  var x = b[0] - a[0];\n  var y = b[1] - a[1];\n  var z = b[2] - a[2];\n  return x * x + y * y + z * z;\n}\n\n/**\n * Calculates the squared length of a vec3\n *\n * @param {ReadonlyVec3} a vector to calculate squared length of\n * @returns {Number} squared length of a\n */\nexport function squaredLength(a) {\n  var x = a[0];\n  var y = a[1];\n  var z = a[2];\n  return x * x + y * y + z * z;\n}\n\n/**\n * Negates the components of a vec3\n *\n * @param {vec3} out the receiving vector\n * @param {ReadonlyVec3} a vector to negate\n * @returns {vec3} out\n */\nexport function negate(out, a) {\n  out[0] = -a[0];\n  out[1] = -a[1];\n  out[2] = -a[2];\n  return out;\n}\n\n/**\n * Returns the inverse of the components of a vec3\n *\n * @param {vec3} out the receiving vector\n * @param {ReadonlyVec3} a vector to invert\n * @returns {vec3} out\n */\nexport function inverse(out, a) {\n  out[0] = 1.0 / a[0];\n  out[1] = 1.0 / a[1];\n  out[2] = 1.0 / a[2];\n  return out;\n}\n\n/**\n * Normalize a vec3\n *\n * @param {vec3} out the receiving vector\n * @param {ReadonlyVec3} a vector to normalize\n * @returns {vec3} out\n */\nexport function normalize(out, a) {\n  var x = a[0];\n  var y = a[1];\n  var z = a[2];\n  var len = x * x + y * y + z * z;\n  if (len > 0) {\n    //TODO: evaluate use of glm_invsqrt here?\n    len = 1 / Math.sqrt(len);\n  }\n  out[0] = a[0] * len;\n  out[1] = a[1] * len;\n  out[2] = a[2] * len;\n  return out;\n}\n\n/**\n * Calculates the dot product of two vec3's\n *\n * @param {ReadonlyVec3} a the first operand\n * @param {ReadonlyVec3} b the second operand\n * @returns {Number} dot product of a and b\n */\nexport function dot(a, b) {\n  return a[0] * b[0] + a[1] * b[1] + a[2] * b[2];\n}\n\n/**\n * Computes the cross product of two vec3's\n *\n * @param {vec3} out the receiving vector\n * @param {ReadonlyVec3} a the first operand\n * @param {ReadonlyVec3} b the second operand\n * @returns {vec3} out\n */\nexport function cross(out, a, b) {\n  var ax = a[0],\n    ay = a[1],\n    az = a[2];\n  var bx = b[0],\n    by = b[1],\n    bz = b[2];\n  out[0] = ay * bz - az * by;\n  out[1] = az * bx - ax * bz;\n  out[2] = ax * by - ay * bx;\n  return out;\n}\n\n/**\n * Performs a linear interpolation between two vec3's\n *\n * @param {vec3} out the receiving vector\n * @param {ReadonlyVec3} a the first operand\n * @param {ReadonlyVec3} b the second operand\n * @param {Number} t interpolation amount, in the range [0-1], between the two inputs\n * @returns {vec3} out\n */\nexport function lerp(out, a, b, t) {\n  var ax = a[0];\n  var ay = a[1];\n  var az = a[2];\n  out[0] = ax + t * (b[0] - ax);\n  out[1] = ay + t * (b[1] - ay);\n  out[2] = az + t * (b[2] - az);\n  return out;\n}\n\n/**\n * Performs a spherical linear interpolation between two vec3's\n *\n * @param {vec3} out the receiving vector\n * @param {ReadonlyVec3} a the first operand\n * @param {ReadonlyVec3} b the second operand\n * @param {Number} t interpolation amount, in the range [0-1], between the two inputs\n * @returns {vec3} out\n */\nexport function slerp(out, a, b, t) {\n  var angle = Math.acos(Math.min(Math.max(dot(a, b), -1), 1));\n  var sinTotal = Math.sin(angle);\n  var ratioA = Math.sin((1 - t) * angle) / sinTotal;\n  var ratioB = Math.sin(t * angle) / sinTotal;\n  out[0] = ratioA * a[0] + ratioB * b[0];\n  out[1] = ratioA * a[1] + ratioB * b[1];\n  out[2] = ratioA * a[2] + ratioB * b[2];\n  return out;\n}\n\n/**\n * Performs a hermite interpolation with two control points\n *\n * @param {vec3} out the receiving vector\n * @param {ReadonlyVec3} a the first operand\n * @param {ReadonlyVec3} b the second operand\n * @param {ReadonlyVec3} c the third operand\n * @param {ReadonlyVec3} d the fourth operand\n * @param {Number} t interpolation amount, in the range [0-1], between the two inputs\n * @returns {vec3} out\n */\nexport function hermite(out, a, b, c, d, t) {\n  var factorTimes2 = t * t;\n  var factor1 = factorTimes2 * (2 * t - 3) + 1;\n  var factor2 = factorTimes2 * (t - 2) + t;\n  var factor3 = factorTimes2 * (t - 1);\n  var factor4 = factorTimes2 * (3 - 2 * t);\n  out[0] = a[0] * factor1 + b[0] * factor2 + c[0] * factor3 + d[0] * factor4;\n  out[1] = a[1] * factor1 + b[1] * factor2 + c[1] * factor3 + d[1] * factor4;\n  out[2] = a[2] * factor1 + b[2] * factor2 + c[2] * factor3 + d[2] * factor4;\n  return out;\n}\n\n/**\n * Performs a bezier interpolation with two control points\n *\n * @param {vec3} out the receiving vector\n * @param {ReadonlyVec3} a the first operand\n * @param {ReadonlyVec3} b the second operand\n * @param {ReadonlyVec3} c the third operand\n * @param {ReadonlyVec3} d the fourth operand\n * @param {Number} t interpolation amount, in the range [0-1], between the two inputs\n * @returns {vec3} out\n */\nexport function bezier(out, a, b, c, d, t) {\n  var inverseFactor = 1 - t;\n  var inverseFactorTimesTwo = inverseFactor * inverseFactor;\n  var factorTimes2 = t * t;\n  var factor1 = inverseFactorTimesTwo * inverseFactor;\n  var factor2 = 3 * t * inverseFactorTimesTwo;\n  var factor3 = 3 * factorTimes2 * inverseFactor;\n  var factor4 = factorTimes2 * t;\n  out[0] = a[0] * factor1 + b[0] * factor2 + c[0] * factor3 + d[0] * factor4;\n  out[1] = a[1] * factor1 + b[1] * factor2 + c[1] * factor3 + d[1] * factor4;\n  out[2] = a[2] * factor1 + b[2] * factor2 + c[2] * factor3 + d[2] * factor4;\n  return out;\n}\n\n/**\n * Generates a random vector with the given scale\n *\n * @param {vec3} out the receiving vector\n * @param {Number} [scale] Length of the resulting vector. If omitted, a unit vector will be returned\n * @returns {vec3} out\n */\nexport function random(out, scale) {\n  scale = scale === undefined ? 1.0 : scale;\n  var r = glMatrix.RANDOM() * 2.0 * Math.PI;\n  var z = glMatrix.RANDOM() * 2.0 - 1.0;\n  var zScale = Math.sqrt(1.0 - z * z) * scale;\n  out[0] = Math.cos(r) * zScale;\n  out[1] = Math.sin(r) * zScale;\n  out[2] = z * scale;\n  return out;\n}\n\n/**\n * Transforms the vec3 with a mat4.\n * 4th vector component is implicitly '1'\n *\n * @param {vec3} out the receiving vector\n * @param {ReadonlyVec3} a the vector to transform\n * @param {ReadonlyMat4} m matrix to transform with\n * @returns {vec3} out\n */\nexport function transformMat4(out, a, m) {\n  var x = a[0],\n    y = a[1],\n    z = a[2];\n  var w = m[3] * x + m[7] * y + m[11] * z + m[15];\n  w = w || 1.0;\n  out[0] = (m[0] * x + m[4] * y + m[8] * z + m[12]) / w;\n  out[1] = (m[1] * x + m[5] * y + m[9] * z + m[13]) / w;\n  out[2] = (m[2] * x + m[6] * y + m[10] * z + m[14]) / w;\n  return out;\n}\n\n/**\n * Transforms the vec3 with a mat3.\n *\n * @param {vec3} out the receiving vector\n * @param {ReadonlyVec3} a the vector to transform\n * @param {ReadonlyMat3} m the 3x3 matrix to transform with\n * @returns {vec3} out\n */\nexport function transformMat3(out, a, m) {\n  var x = a[0],\n    y = a[1],\n    z = a[2];\n  out[0] = x * m[0] + y * m[3] + z * m[6];\n  out[1] = x * m[1] + y * m[4] + z * m[7];\n  out[2] = x * m[2] + y * m[5] + z * m[8];\n  return out;\n}\n\n/**\n * Transforms the vec3 with a quat\n * Can also be used for dual quaternions. (Multiply it with the real part)\n *\n * @param {vec3} out the receiving vector\n * @param {ReadonlyVec3} a the vector to transform\n * @param {ReadonlyQuat} q normalized quaternion to transform with\n * @returns {vec3} out\n */\nexport function transformQuat(out, a, q) {\n  // Fast Vector Rotation using Quaternions by Robert Eisele\n  // https://raw.org/proof/vector-rotation-using-quaternions/\n\n  var qx = q[0],\n    qy = q[1],\n    qz = q[2],\n    qw = q[3];\n  var vx = a[0],\n    vy = a[1],\n    vz = a[2];\n\n  // t = q x v\n  var tx = qy * vz - qz * vy;\n  var ty = qz * vx - qx * vz;\n  var tz = qx * vy - qy * vx;\n\n  // t = 2t\n  tx = tx + tx;\n  ty = ty + ty;\n  tz = tz + tz;\n\n  // v + w t + q x t\n  out[0] = vx + qw * tx + qy * tz - qz * ty;\n  out[1] = vy + qw * ty + qz * tx - qx * tz;\n  out[2] = vz + qw * tz + qx * ty - qy * tx;\n  return out;\n}\n\n/**\n * Rotate a 3D vector around the x-axis\n * @param {vec3} out The receiving vec3\n * @param {ReadonlyVec3} a The vec3 point to rotate\n * @param {ReadonlyVec3} b The origin of the rotation\n * @param {Number} rad The angle of rotation in radians\n * @returns {vec3} out\n */\nexport function rotateX(out, a, b, rad) {\n  var p = [],\n    r = [];\n  //Translate point to the origin\n  p[0] = a[0] - b[0];\n  p[1] = a[1] - b[1];\n  p[2] = a[2] - b[2];\n\n  //perform rotation\n  r[0] = p[0];\n  r[1] = p[1] * Math.cos(rad) - p[2] * Math.sin(rad);\n  r[2] = p[1] * Math.sin(rad) + p[2] * Math.cos(rad);\n\n  //translate to correct position\n  out[0] = r[0] + b[0];\n  out[1] = r[1] + b[1];\n  out[2] = r[2] + b[2];\n  return out;\n}\n\n/**\n * Rotate a 3D vector around the y-axis\n * @param {vec3} out The receiving vec3\n * @param {ReadonlyVec3} a The vec3 point to rotate\n * @param {ReadonlyVec3} b The origin of the rotation\n * @param {Number} rad The angle of rotation in radians\n * @returns {vec3} out\n */\nexport function rotateY(out, a, b, rad) {\n  var p = [],\n    r = [];\n  //Translate point to the origin\n  p[0] = a[0] - b[0];\n  p[1] = a[1] - b[1];\n  p[2] = a[2] - b[2];\n\n  //perform rotation\n  r[0] = p[2] * Math.sin(rad) + p[0] * Math.cos(rad);\n  r[1] = p[1];\n  r[2] = p[2] * Math.cos(rad) - p[0] * Math.sin(rad);\n\n  //translate to correct position\n  out[0] = r[0] + b[0];\n  out[1] = r[1] + b[1];\n  out[2] = r[2] + b[2];\n  return out;\n}\n\n/**\n * Rotate a 3D vector around the z-axis\n * @param {vec3} out The receiving vec3\n * @param {ReadonlyVec3} a The vec3 point to rotate\n * @param {ReadonlyVec3} b The origin of the rotation\n * @param {Number} rad The angle of rotation in radians\n * @returns {vec3} out\n */\nexport function rotateZ(out, a, b, rad) {\n  var p = [],\n    r = [];\n  //Translate point to the origin\n  p[0] = a[0] - b[0];\n  p[1] = a[1] - b[1];\n  p[2] = a[2] - b[2];\n\n  //perform rotation\n  r[0] = p[0] * Math.cos(rad) - p[1] * Math.sin(rad);\n  r[1] = p[0] * Math.sin(rad) + p[1] * Math.cos(rad);\n  r[2] = p[2];\n\n  //translate to correct position\n  out[0] = r[0] + b[0];\n  out[1] = r[1] + b[1];\n  out[2] = r[2] + b[2];\n  return out;\n}\n\n/**\n * Get the angle between two 3D vectors\n * @param {ReadonlyVec3} a The first operand\n * @param {ReadonlyVec3} b The second operand\n * @returns {Number} The angle in radians\n */\nexport function angle(a, b) {\n  var ax = a[0],\n    ay = a[1],\n    az = a[2],\n    bx = b[0],\n    by = b[1],\n    bz = b[2],\n    mag = Math.sqrt((ax * ax + ay * ay + az * az) * (bx * bx + by * by + bz * bz)),\n    cosine = mag && dot(a, b) / mag;\n  return Math.acos(Math.min(Math.max(cosine, -1), 1));\n}\n\n/**\n * Set the components of a vec3 to zero\n *\n * @param {vec3} out the receiving vector\n * @returns {vec3} out\n */\nexport function zero(out) {\n  out[0] = 0.0;\n  out[1] = 0.0;\n  out[2] = 0.0;\n  return out;\n}\n\n/**\n * Returns a string representation of a vector\n *\n * @param {ReadonlyVec3} a vector to represent as a string\n * @returns {String} string representation of the vector\n */\nexport function str(a) {\n  return \"vec3(\" + a[0] + \", \" + a[1] + \", \" + a[2] + \")\";\n}\n\n/**\n * Returns whether or not the vectors have exactly the same elements in the same position (when compared with ===)\n *\n * @param {ReadonlyVec3} a The first vector.\n * @param {ReadonlyVec3} b The second vector.\n * @returns {Boolean} True if the vectors are equal, false otherwise.\n */\nexport function exactEquals(a, b) {\n  return a[0] === b[0] && a[1] === b[1] && a[2] === b[2];\n}\n\n/**\n * Returns whether or not the vectors have approximately the same elements in the same position.\n *\n * @param {ReadonlyVec3} a The first vector.\n * @param {ReadonlyVec3} b The second vector.\n * @returns {Boolean} True if the vectors are equal, false otherwise.\n */\nexport function equals(a, b) {\n  var a0 = a[0],\n    a1 = a[1],\n    a2 = a[2];\n  var b0 = b[0],\n    b1 = b[1],\n    b2 = b[2];\n  return Math.abs(a0 - b0) <= glMatrix.EPSILON * Math.max(1.0, Math.abs(a0), Math.abs(b0)) && Math.abs(a1 - b1) <= glMatrix.EPSILON * Math.max(1.0, Math.abs(a1), Math.abs(b1)) && Math.abs(a2 - b2) <= glMatrix.EPSILON * Math.max(1.0, Math.abs(a2), Math.abs(b2));\n}\n\n/**\n * Alias for {@link vec3.subtract}\n * @function\n */\nexport var sub = subtract;\n\n/**\n * Alias for {@link vec3.multiply}\n * @function\n */\nexport var mul = multiply;\n\n/**\n * Alias for {@link vec3.divide}\n * @function\n */\nexport var div = divide;\n\n/**\n * Alias for {@link vec3.distance}\n * @function\n */\nexport var dist = distance;\n\n/**\n * Alias for {@link vec3.squaredDistance}\n * @function\n */\nexport var sqrDist = squaredDistance;\n\n/**\n * Alias for {@link vec3.length}\n * @function\n */\nexport var len = length;\n\n/**\n * Alias for {@link vec3.squaredLength}\n * @function\n */\nexport var sqrLen = squaredLength;\n\n/**\n * Perform some operation over an array of vec3s.\n *\n * @param {Array} a the array of vectors to iterate over\n * @param {Number} stride Number of elements between the start of each vec3. If 0 assumes tightly packed\n * @param {Number} offset Number of elements to skip at the beginning of the array\n * @param {Number} count Number of vec3s to iterate over. If 0 iterates over entire array\n * @param {Function} fn Function to call for each vector in the array\n * @param {Object} [arg] additional argument to pass to fn\n * @returns {Array} a\n * @function\n */\nexport var forEach = function () {\n  var vec = create();\n  return function (a, stride, offset, count, fn, arg) {\n    var i, l;\n    if (!stride) {\n      stride = 3;\n    }\n    if (!offset) {\n      offset = 0;\n    }\n    if (count) {\n      l = Math.min(count * stride + offset, a.length);\n    } else {\n      l = a.length;\n    }\n    for (i = offset; i < l; i += stride) {\n      vec[0] = a[i];\n      vec[1] = a[i + 1];\n      vec[2] = a[i + 2];\n      fn(vec, vec, arg);\n      a[i] = vec[0];\n      a[i + 1] = vec[1];\n      a[i + 2] = vec[2];\n    }\n    return a;\n  };\n}();","import * as glMatrix from \"./common.js\";\n\n/**\n * 3x3 Matrix\n * @module mat3\n */\n\n/**\n * Creates a new identity mat3\n *\n * @returns {mat3} a new 3x3 matrix\n */\nexport function create() {\n  var out = new glMatrix.ARRAY_TYPE(9);\n  if (glMatrix.ARRAY_TYPE != Float32Array) {\n    out[1] = 0;\n    out[2] = 0;\n    out[3] = 0;\n    out[5] = 0;\n    out[6] = 0;\n    out[7] = 0;\n  }\n  out[0] = 1;\n  out[4] = 1;\n  out[8] = 1;\n  return out;\n}\n\n/**\n * Copies the upper-left 3x3 values into the given mat3.\n *\n * @param {mat3} out the receiving 3x3 matrix\n * @param {ReadonlyMat4} a   the source 4x4 matrix\n * @returns {mat3} out\n */\nexport function fromMat4(out, a) {\n  out[0] = a[0];\n  out[1] = a[1];\n  out[2] = a[2];\n  out[3] = a[4];\n  out[4] = a[5];\n  out[5] = a[6];\n  out[6] = a[8];\n  out[7] = a[9];\n  out[8] = a[10];\n  return out;\n}\n\n/**\n * Creates a new mat3 initialized with values from an existing matrix\n *\n * @param {ReadonlyMat3} a matrix to clone\n * @returns {mat3} a new 3x3 matrix\n */\nexport function clone(a) {\n  var out = new glMatrix.ARRAY_TYPE(9);\n  out[0] = a[0];\n  out[1] = a[1];\n  out[2] = a[2];\n  out[3] = a[3];\n  out[4] = a[4];\n  out[5] = a[5];\n  out[6] = a[6];\n  out[7] = a[7];\n  out[8] = a[8];\n  return out;\n}\n\n/**\n * Copy the values from one mat3 to another\n *\n * @param {mat3} out the receiving matrix\n * @param {ReadonlyMat3} a the source matrix\n * @returns {mat3} out\n */\nexport function copy(out, a) {\n  out[0] = a[0];\n  out[1] = a[1];\n  out[2] = a[2];\n  out[3] = a[3];\n  out[4] = a[4];\n  out[5] = a[5];\n  out[6] = a[6];\n  out[7] = a[7];\n  out[8] = a[8];\n  return out;\n}\n\n/**\n * Create a new mat3 with the given values\n *\n * @param {Number} m00 Component in column 0, row 0 position (index 0)\n * @param {Number} m01 Component in column 0, row 1 position (index 1)\n * @param {Number} m02 Component in column 0, row 2 position (index 2)\n * @param {Number} m10 Component in column 1, row 0 position (index 3)\n * @param {Number} m11 Component in column 1, row 1 position (index 4)\n * @param {Number} m12 Component in column 1, row 2 position (index 5)\n * @param {Number} m20 Component in column 2, row 0 position (index 6)\n * @param {Number} m21 Component in column 2, row 1 position (index 7)\n * @param {Number} m22 Component in column 2, row 2 position (index 8)\n * @returns {mat3} A new mat3\n */\nexport function fromValues(m00, m01, m02, m10, m11, m12, m20, m21, m22) {\n  var out = new glMatrix.ARRAY_TYPE(9);\n  out[0] = m00;\n  out[1] = m01;\n  out[2] = m02;\n  out[3] = m10;\n  out[4] = m11;\n  out[5] = m12;\n  out[6] = m20;\n  out[7] = m21;\n  out[8] = m22;\n  return out;\n}\n\n/**\n * Set the components of a mat3 to the given values\n *\n * @param {mat3} out the receiving matrix\n * @param {Number} m00 Component in column 0, row 0 position (index 0)\n * @param {Number} m01 Component in column 0, row 1 position (index 1)\n * @param {Number} m02 Component in column 0, row 2 position (index 2)\n * @param {Number} m10 Component in column 1, row 0 position (index 3)\n * @param {Number} m11 Component in column 1, row 1 position (index 4)\n * @param {Number} m12 Component in column 1, row 2 position (index 5)\n * @param {Number} m20 Component in column 2, row 0 position (index 6)\n * @param {Number} m21 Component in column 2, row 1 position (index 7)\n * @param {Number} m22 Component in column 2, row 2 position (index 8)\n * @returns {mat3} out\n */\nexport function set(out, m00, m01, m02, m10, m11, m12, m20, m21, m22) {\n  out[0] = m00;\n  out[1] = m01;\n  out[2] = m02;\n  out[3] = m10;\n  out[4] = m11;\n  out[5] = m12;\n  out[6] = m20;\n  out[7] = m21;\n  out[8] = m22;\n  return out;\n}\n\n/**\n * Set a mat3 to the identity matrix\n *\n * @param {mat3} out the receiving matrix\n * @returns {mat3} out\n */\nexport function identity(out) {\n  out[0] = 1;\n  out[1] = 0;\n  out[2] = 0;\n  out[3] = 0;\n  out[4] = 1;\n  out[5] = 0;\n  out[6] = 0;\n  out[7] = 0;\n  out[8] = 1;\n  return out;\n}\n\n/**\n * Transpose the values of a mat3\n *\n * @param {mat3} out the receiving matrix\n * @param {ReadonlyMat3} a the source matrix\n * @returns {mat3} out\n */\nexport function transpose(out, a) {\n  // If we are transposing ourselves we can skip a few steps but have to cache some values\n  if (out === a) {\n    var a01 = a[1],\n      a02 = a[2],\n      a12 = a[5];\n    out[1] = a[3];\n    out[2] = a[6];\n    out[3] = a01;\n    out[5] = a[7];\n    out[6] = a02;\n    out[7] = a12;\n  } else {\n    out[0] = a[0];\n    out[1] = a[3];\n    out[2] = a[6];\n    out[3] = a[1];\n    out[4] = a[4];\n    out[5] = a[7];\n    out[6] = a[2];\n    out[7] = a[5];\n    out[8] = a[8];\n  }\n  return out;\n}\n\n/**\n * Inverts a mat3\n *\n * @param {mat3} out the receiving matrix\n * @param {ReadonlyMat3} a the source matrix\n * @returns {mat3 | null} out, or null if source matrix is not invertible\n */\nexport function invert(out, a) {\n  var a00 = a[0],\n    a01 = a[1],\n    a02 = a[2];\n  var a10 = a[3],\n    a11 = a[4],\n    a12 = a[5];\n  var a20 = a[6],\n    a21 = a[7],\n    a22 = a[8];\n  var b01 = a22 * a11 - a12 * a21;\n  var b11 = -a22 * a10 + a12 * a20;\n  var b21 = a21 * a10 - a11 * a20;\n\n  // Calculate the determinant\n  var det = a00 * b01 + a01 * b11 + a02 * b21;\n  if (!det) {\n    return null;\n  }\n  det = 1.0 / det;\n  out[0] = b01 * det;\n  out[1] = (-a22 * a01 + a02 * a21) * det;\n  out[2] = (a12 * a01 - a02 * a11) * det;\n  out[3] = b11 * det;\n  out[4] = (a22 * a00 - a02 * a20) * det;\n  out[5] = (-a12 * a00 + a02 * a10) * det;\n  out[6] = b21 * det;\n  out[7] = (-a21 * a00 + a01 * a20) * det;\n  out[8] = (a11 * a00 - a01 * a10) * det;\n  return out;\n}\n\n/**\n * Calculates the adjugate of a mat3\n *\n * @param {mat3} out the receiving matrix\n * @param {ReadonlyMat3} a the source matrix\n * @returns {mat3} out\n */\nexport function adjoint(out, a) {\n  var a00 = a[0],\n    a01 = a[1],\n    a02 = a[2];\n  var a10 = a[3],\n    a11 = a[4],\n    a12 = a[5];\n  var a20 = a[6],\n    a21 = a[7],\n    a22 = a[8];\n  out[0] = a11 * a22 - a12 * a21;\n  out[1] = a02 * a21 - a01 * a22;\n  out[2] = a01 * a12 - a02 * a11;\n  out[3] = a12 * a20 - a10 * a22;\n  out[4] = a00 * a22 - a02 * a20;\n  out[5] = a02 * a10 - a00 * a12;\n  out[6] = a10 * a21 - a11 * a20;\n  out[7] = a01 * a20 - a00 * a21;\n  out[8] = a00 * a11 - a01 * a10;\n  return out;\n}\n\n/**\n * Calculates the determinant of a mat3\n *\n * @param {ReadonlyMat3} a the source matrix\n * @returns {Number} determinant of a\n */\nexport function determinant(a) {\n  var a00 = a[0],\n    a01 = a[1],\n    a02 = a[2];\n  var a10 = a[3],\n    a11 = a[4],\n    a12 = a[5];\n  var a20 = a[6],\n    a21 = a[7],\n    a22 = a[8];\n  return a00 * (a22 * a11 - a12 * a21) + a01 * (-a22 * a10 + a12 * a20) + a02 * (a21 * a10 - a11 * a20);\n}\n\n/**\n * Multiplies two mat3's\n *\n * @param {mat3} out the receiving matrix\n * @param {ReadonlyMat3} a the first operand\n * @param {ReadonlyMat3} b the second operand\n * @returns {mat3} out\n */\nexport function multiply(out, a, b) {\n  var a00 = a[0],\n    a01 = a[1],\n    a02 = a[2];\n  var a10 = a[3],\n    a11 = a[4],\n    a12 = a[5];\n  var a20 = a[6],\n    a21 = a[7],\n    a22 = a[8];\n  var b00 = b[0],\n    b01 = b[1],\n    b02 = b[2];\n  var b10 = b[3],\n    b11 = b[4],\n    b12 = b[5];\n  var b20 = b[6],\n    b21 = b[7],\n    b22 = b[8];\n  out[0] = b00 * a00 + b01 * a10 + b02 * a20;\n  out[1] = b00 * a01 + b01 * a11 + b02 * a21;\n  out[2] = b00 * a02 + b01 * a12 + b02 * a22;\n  out[3] = b10 * a00 + b11 * a10 + b12 * a20;\n  out[4] = b10 * a01 + b11 * a11 + b12 * a21;\n  out[5] = b10 * a02 + b11 * a12 + b12 * a22;\n  out[6] = b20 * a00 + b21 * a10 + b22 * a20;\n  out[7] = b20 * a01 + b21 * a11 + b22 * a21;\n  out[8] = b20 * a02 + b21 * a12 + b22 * a22;\n  return out;\n}\n\n/**\n * Translate a mat3 by the given vector\n *\n * @param {mat3} out the receiving matrix\n * @param {ReadonlyMat3} a the matrix to translate\n * @param {ReadonlyVec2} v vector to translate by\n * @returns {mat3} out\n */\nexport function translate(out, a, v) {\n  var a00 = a[0],\n    a01 = a[1],\n    a02 = a[2],\n    a10 = a[3],\n    a11 = a[4],\n    a12 = a[5],\n    a20 = a[6],\n    a21 = a[7],\n    a22 = a[8],\n    x = v[0],\n    y = v[1];\n  out[0] = a00;\n  out[1] = a01;\n  out[2] = a02;\n  out[3] = a10;\n  out[4] = a11;\n  out[5] = a12;\n  out[6] = x * a00 + y * a10 + a20;\n  out[7] = x * a01 + y * a11 + a21;\n  out[8] = x * a02 + y * a12 + a22;\n  return out;\n}\n\n/**\n * Rotates a mat3 by the given angle\n *\n * @param {mat3} out the receiving matrix\n * @param {ReadonlyMat3} a the matrix to rotate\n * @param {Number} rad the angle to rotate the matrix by\n * @returns {mat3} out\n */\nexport function rotate(out, a, rad) {\n  var a00 = a[0],\n    a01 = a[1],\n    a02 = a[2],\n    a10 = a[3],\n    a11 = a[4],\n    a12 = a[5],\n    a20 = a[6],\n    a21 = a[7],\n    a22 = a[8],\n    s = Math.sin(rad),\n    c = Math.cos(rad);\n  out[0] = c * a00 + s * a10;\n  out[1] = c * a01 + s * a11;\n  out[2] = c * a02 + s * a12;\n  out[3] = c * a10 - s * a00;\n  out[4] = c * a11 - s * a01;\n  out[5] = c * a12 - s * a02;\n  out[6] = a20;\n  out[7] = a21;\n  out[8] = a22;\n  return out;\n}\n\n/**\n * Scales the mat3 by the dimensions in the given vec2\n *\n * @param {mat3} out the receiving matrix\n * @param {ReadonlyMat3} a the matrix to scale\n * @param {ReadonlyVec2} v the vec2 to scale the matrix by\n * @returns {mat3} out\n **/\nexport function scale(out, a, v) {\n  var x = v[0],\n    y = v[1];\n  out[0] = x * a[0];\n  out[1] = x * a[1];\n  out[2] = x * a[2];\n  out[3] = y * a[3];\n  out[4] = y * a[4];\n  out[5] = y * a[5];\n  out[6] = a[6];\n  out[7] = a[7];\n  out[8] = a[8];\n  return out;\n}\n\n/**\n * Creates a matrix from a vector translation\n * This is equivalent to (but much faster than):\n *\n *     mat3.identity(dest);\n *     mat3.translate(dest, dest, vec);\n *\n * @param {mat3} out mat3 receiving operation result\n * @param {ReadonlyVec2} v Translation vector\n * @returns {mat3} out\n */\nexport function fromTranslation(out, v) {\n  out[0] = 1;\n  out[1] = 0;\n  out[2] = 0;\n  out[3] = 0;\n  out[4] = 1;\n  out[5] = 0;\n  out[6] = v[0];\n  out[7] = v[1];\n  out[8] = 1;\n  return out;\n}\n\n/**\n * Creates a matrix from a given angle\n * This is equivalent to (but much faster than):\n *\n *     mat3.identity(dest);\n *     mat3.rotate(dest, dest, rad);\n *\n * @param {mat3} out mat3 receiving operation result\n * @param {Number} rad the angle to rotate the matrix by\n * @returns {mat3} out\n */\nexport function fromRotation(out, rad) {\n  var s = Math.sin(rad),\n    c = Math.cos(rad);\n  out[0] = c;\n  out[1] = s;\n  out[2] = 0;\n  out[3] = -s;\n  out[4] = c;\n  out[5] = 0;\n  out[6] = 0;\n  out[7] = 0;\n  out[8] = 1;\n  return out;\n}\n\n/**\n * Creates a matrix from a vector scaling\n * This is equivalent to (but much faster than):\n *\n *     mat3.identity(dest);\n *     mat3.scale(dest, dest, vec);\n *\n * @param {mat3} out mat3 receiving operation result\n * @param {ReadonlyVec2} v Scaling vector\n * @returns {mat3} out\n */\nexport function fromScaling(out, v) {\n  out[0] = v[0];\n  out[1] = 0;\n  out[2] = 0;\n  out[3] = 0;\n  out[4] = v[1];\n  out[5] = 0;\n  out[6] = 0;\n  out[7] = 0;\n  out[8] = 1;\n  return out;\n}\n\n/**\n * Copies the values from a mat2d into a mat3\n *\n * @param {mat3} out the receiving matrix\n * @param {ReadonlyMat2d} a the matrix to copy\n * @returns {mat3} out\n **/\nexport function fromMat2d(out, a) {\n  out[0] = a[0];\n  out[1] = a[1];\n  out[2] = 0;\n  out[3] = a[2];\n  out[4] = a[3];\n  out[5] = 0;\n  out[6] = a[4];\n  out[7] = a[5];\n  out[8] = 1;\n  return out;\n}\n\n/**\n * Calculates a 3x3 matrix from the given quaternion\n *\n * @param {mat3} out mat3 receiving operation result\n * @param {ReadonlyQuat} q Quaternion to create matrix from\n *\n * @returns {mat3} out\n */\nexport function fromQuat(out, q) {\n  var x = q[0],\n    y = q[1],\n    z = q[2],\n    w = q[3];\n  var x2 = x + x;\n  var y2 = y + y;\n  var z2 = z + z;\n  var xx = x * x2;\n  var yx = y * x2;\n  var yy = y * y2;\n  var zx = z * x2;\n  var zy = z * y2;\n  var zz = z * z2;\n  var wx = w * x2;\n  var wy = w * y2;\n  var wz = w * z2;\n  out[0] = 1 - yy - zz;\n  out[3] = yx - wz;\n  out[6] = zx + wy;\n  out[1] = yx + wz;\n  out[4] = 1 - xx - zz;\n  out[7] = zy - wx;\n  out[2] = zx - wy;\n  out[5] = zy + wx;\n  out[8] = 1 - xx - yy;\n  return out;\n}\n\n/**\n * Calculates a 3x3 normal matrix (transpose inverse) from the 4x4 matrix\n *\n * @param {mat3} out mat3 receiving operation result\n * @param {ReadonlyMat4} a Mat4 to derive the normal matrix from\n *\n * @returns {mat3} out\n */\nexport function normalFromMat4(out, a) {\n  var a00 = a[0],\n    a01 = a[1],\n    a02 = a[2],\n    a03 = a[3];\n  var a10 = a[4],\n    a11 = a[5],\n    a12 = a[6],\n    a13 = a[7];\n  var a20 = a[8],\n    a21 = a[9],\n    a22 = a[10],\n    a23 = a[11];\n  var a30 = a[12],\n    a31 = a[13],\n    a32 = a[14],\n    a33 = a[15];\n  var b00 = a00 * a11 - a01 * a10;\n  var b01 = a00 * a12 - a02 * a10;\n  var b02 = a00 * a13 - a03 * a10;\n  var b03 = a01 * a12 - a02 * a11;\n  var b04 = a01 * a13 - a03 * a11;\n  var b05 = a02 * a13 - a03 * a12;\n  var b06 = a20 * a31 - a21 * a30;\n  var b07 = a20 * a32 - a22 * a30;\n  var b08 = a20 * a33 - a23 * a30;\n  var b09 = a21 * a32 - a22 * a31;\n  var b10 = a21 * a33 - a23 * a31;\n  var b11 = a22 * a33 - a23 * a32;\n\n  // Calculate the determinant\n  var det = b00 * b11 - b01 * b10 + b02 * b09 + b03 * b08 - b04 * b07 + b05 * b06;\n  if (!det) {\n    return null;\n  }\n  det = 1.0 / det;\n  out[0] = (a11 * b11 - a12 * b10 + a13 * b09) * det;\n  out[1] = (a12 * b08 - a10 * b11 - a13 * b07) * det;\n  out[2] = (a10 * b10 - a11 * b08 + a13 * b06) * det;\n  out[3] = (a02 * b10 - a01 * b11 - a03 * b09) * det;\n  out[4] = (a00 * b11 - a02 * b08 + a03 * b07) * det;\n  out[5] = (a01 * b08 - a00 * b10 - a03 * b06) * det;\n  out[6] = (a31 * b05 - a32 * b04 + a33 * b03) * det;\n  out[7] = (a32 * b02 - a30 * b05 - a33 * b01) * det;\n  out[8] = (a30 * b04 - a31 * b02 + a33 * b00) * det;\n  return out;\n}\n\n/**\n * Generates a 2D projection matrix with the given bounds\n *\n * @param {mat3} out mat3 frustum matrix will be written into\n * @param {number} width Width of your gl context\n * @param {number} height Height of gl context\n * @returns {mat3} out\n */\nexport function projection(out, width, height) {\n  out[0] = 2 / width;\n  out[1] = 0;\n  out[2] = 0;\n  out[3] = 0;\n  out[4] = -2 / height;\n  out[5] = 0;\n  out[6] = -1;\n  out[7] = 1;\n  out[8] = 1;\n  return out;\n}\n\n/**\n * Returns a string representation of a mat3\n *\n * @param {ReadonlyMat3} a matrix to represent as a string\n * @returns {String} string representation of the matrix\n */\nexport function str(a) {\n  return \"mat3(\" + a[0] + \", \" + a[1] + \", \" + a[2] + \", \" + a[3] + \", \" + a[4] + \", \" + a[5] + \", \" + a[6] + \", \" + a[7] + \", \" + a[8] + \")\";\n}\n\n/**\n * Returns Frobenius norm of a mat3\n *\n * @param {ReadonlyMat3} a the matrix to calculate Frobenius norm of\n * @returns {Number} Frobenius norm\n */\nexport function frob(a) {\n  return Math.sqrt(a[0] * a[0] + a[1] * a[1] + a[2] * a[2] + a[3] * a[3] + a[4] * a[4] + a[5] * a[5] + a[6] * a[6] + a[7] * a[7] + a[8] * a[8]);\n}\n\n/**\n * Adds two mat3's\n *\n * @param {mat3} out the receiving matrix\n * @param {ReadonlyMat3} a the first operand\n * @param {ReadonlyMat3} b the second operand\n * @returns {mat3} out\n */\nexport function add(out, a, b) {\n  out[0] = a[0] + b[0];\n  out[1] = a[1] + b[1];\n  out[2] = a[2] + b[2];\n  out[3] = a[3] + b[3];\n  out[4] = a[4] + b[4];\n  out[5] = a[5] + b[5];\n  out[6] = a[6] + b[6];\n  out[7] = a[7] + b[7];\n  out[8] = a[8] + b[8];\n  return out;\n}\n\n/**\n * Subtracts matrix b from matrix a\n *\n * @param {mat3} out the receiving matrix\n * @param {ReadonlyMat3} a the first operand\n * @param {ReadonlyMat3} b the second operand\n * @returns {mat3} out\n */\nexport function subtract(out, a, b) {\n  out[0] = a[0] - b[0];\n  out[1] = a[1] - b[1];\n  out[2] = a[2] - b[2];\n  out[3] = a[3] - b[3];\n  out[4] = a[4] - b[4];\n  out[5] = a[5] - b[5];\n  out[6] = a[6] - b[6];\n  out[7] = a[7] - b[7];\n  out[8] = a[8] - b[8];\n  return out;\n}\n\n/**\n * Multiply each element of the matrix by a scalar.\n *\n * @param {mat3} out the receiving matrix\n * @param {ReadonlyMat3} a the matrix to scale\n * @param {Number} b amount to scale the matrix's elements by\n * @returns {mat3} out\n */\nexport function multiplyScalar(out, a, b) {\n  out[0] = a[0] * b;\n  out[1] = a[1] * b;\n  out[2] = a[2] * b;\n  out[3] = a[3] * b;\n  out[4] = a[4] * b;\n  out[5] = a[5] * b;\n  out[6] = a[6] * b;\n  out[7] = a[7] * b;\n  out[8] = a[8] * b;\n  return out;\n}\n\n/**\n * Adds two mat3's after multiplying each element of the second operand by a scalar value.\n *\n * @param {mat3} out the receiving vector\n * @param {ReadonlyMat3} a the first operand\n * @param {ReadonlyMat3} b the second operand\n * @param {Number} scale the amount to scale b's elements by before adding\n * @returns {mat3} out\n */\nexport function multiplyScalarAndAdd(out, a, b, scale) {\n  out[0] = a[0] + b[0] * scale;\n  out[1] = a[1] + b[1] * scale;\n  out[2] = a[2] + b[2] * scale;\n  out[3] = a[3] + b[3] * scale;\n  out[4] = a[4] + b[4] * scale;\n  out[5] = a[5] + b[5] * scale;\n  out[6] = a[6] + b[6] * scale;\n  out[7] = a[7] + b[7] * scale;\n  out[8] = a[8] + b[8] * scale;\n  return out;\n}\n\n/**\n * Returns whether or not the matrices have exactly the same elements in the same position (when compared with ===)\n *\n * @param {ReadonlyMat3} a The first matrix.\n * @param {ReadonlyMat3} b The second matrix.\n * @returns {Boolean} True if the matrices are equal, false otherwise.\n */\nexport function exactEquals(a, b) {\n  return a[0] === b[0] && a[1] === b[1] && a[2] === b[2] && a[3] === b[3] && a[4] === b[4] && a[5] === b[5] && a[6] === b[6] && a[7] === b[7] && a[8] === b[8];\n}\n\n/**\n * Returns whether or not the matrices have approximately the same elements in the same position.\n *\n * @param {ReadonlyMat3} a The first matrix.\n * @param {ReadonlyMat3} b The second matrix.\n * @returns {Boolean} True if the matrices are equal, false otherwise.\n */\nexport function equals(a, b) {\n  var a0 = a[0],\n    a1 = a[1],\n    a2 = a[2],\n    a3 = a[3],\n    a4 = a[4],\n    a5 = a[5],\n    a6 = a[6],\n    a7 = a[7],\n    a8 = a[8];\n  var b0 = b[0],\n    b1 = b[1],\n    b2 = b[2],\n    b3 = b[3],\n    b4 = b[4],\n    b5 = b[5],\n    b6 = b[6],\n    b7 = b[7],\n    b8 = b[8];\n  return Math.abs(a0 - b0) <= glMatrix.EPSILON * Math.max(1.0, Math.abs(a0), Math.abs(b0)) && Math.abs(a1 - b1) <= glMatrix.EPSILON * Math.max(1.0, Math.abs(a1), Math.abs(b1)) && Math.abs(a2 - b2) <= glMatrix.EPSILON * Math.max(1.0, Math.abs(a2), Math.abs(b2)) && Math.abs(a3 - b3) <= glMatrix.EPSILON * Math.max(1.0, Math.abs(a3), Math.abs(b3)) && Math.abs(a4 - b4) <= glMatrix.EPSILON * Math.max(1.0, Math.abs(a4), Math.abs(b4)) && Math.abs(a5 - b5) <= glMatrix.EPSILON * Math.max(1.0, Math.abs(a5), Math.abs(b5)) && Math.abs(a6 - b6) <= glMatrix.EPSILON * Math.max(1.0, Math.abs(a6), Math.abs(b6)) && Math.abs(a7 - b7) <= glMatrix.EPSILON * Math.max(1.0, Math.abs(a7), Math.abs(b7)) && Math.abs(a8 - b8) <= glMatrix.EPSILON * Math.max(1.0, Math.abs(a8), Math.abs(b8));\n}\n\n/**\n * Alias for {@link mat3.multiply}\n * @function\n */\nexport var mul = multiply;\n\n/**\n * Alias for {@link mat3.subtract}\n * @function\n */\nexport var sub = subtract;","import * as glMatrix from \"./common.js\";\n\n/**\n * 2 Dimensional Vector\n * @module vec2\n */\n\n/**\n * Creates a new, empty vec2\n *\n * @returns {vec2} a new 2D vector\n */\nexport function create() {\n  var out = new glMatrix.ARRAY_TYPE(2);\n  if (glMatrix.ARRAY_TYPE != Float32Array) {\n    out[0] = 0;\n    out[1] = 0;\n  }\n  return out;\n}\n\n/**\n * Creates a new vec2 initialized with values from an existing vector\n *\n * @param {ReadonlyVec2} a vector to clone\n * @returns {vec2} a new 2D vector\n */\nexport function clone(a) {\n  var out = new glMatrix.ARRAY_TYPE(2);\n  out[0] = a[0];\n  out[1] = a[1];\n  return out;\n}\n\n/**\n * Creates a new vec2 initialized with the given values\n *\n * @param {Number} x X component\n * @param {Number} y Y component\n * @returns {vec2} a new 2D vector\n */\nexport function fromValues(x, y) {\n  var out = new glMatrix.ARRAY_TYPE(2);\n  out[0] = x;\n  out[1] = y;\n  return out;\n}\n\n/**\n * Copy the values from one vec2 to another\n *\n * @param {vec2} out the receiving vector\n * @param {ReadonlyVec2} a the source vector\n * @returns {vec2} out\n */\nexport function copy(out, a) {\n  out[0] = a[0];\n  out[1] = a[1];\n  return out;\n}\n\n/**\n * Set the components of a vec2 to the given values\n *\n * @param {vec2} out the receiving vector\n * @param {Number} x X component\n * @param {Number} y Y component\n * @returns {vec2} out\n */\nexport function set(out, x, y) {\n  out[0] = x;\n  out[1] = y;\n  return out;\n}\n\n/**\n * Adds two vec2's\n *\n * @param {vec2} out the receiving vector\n * @param {ReadonlyVec2} a the first operand\n * @param {ReadonlyVec2} b the second operand\n * @returns {vec2} out\n */\nexport function add(out, a, b) {\n  out[0] = a[0] + b[0];\n  out[1] = a[1] + b[1];\n  return out;\n}\n\n/**\n * Subtracts vector b from vector a\n *\n * @param {vec2} out the receiving vector\n * @param {ReadonlyVec2} a the first operand\n * @param {ReadonlyVec2} b the second operand\n * @returns {vec2} out\n */\nexport function subtract(out, a, b) {\n  out[0] = a[0] - b[0];\n  out[1] = a[1] - b[1];\n  return out;\n}\n\n/**\n * Multiplies two vec2's\n *\n * @param {vec2} out the receiving vector\n * @param {ReadonlyVec2} a the first operand\n * @param {ReadonlyVec2} b the second operand\n * @returns {vec2} out\n */\nexport function multiply(out, a, b) {\n  out[0] = a[0] * b[0];\n  out[1] = a[1] * b[1];\n  return out;\n}\n\n/**\n * Divides two vec2's\n *\n * @param {vec2} out the receiving vector\n * @param {ReadonlyVec2} a the first operand\n * @param {ReadonlyVec2} b the second operand\n * @returns {vec2} out\n */\nexport function divide(out, a, b) {\n  out[0] = a[0] / b[0];\n  out[1] = a[1] / b[1];\n  return out;\n}\n\n/**\n * Math.ceil the components of a vec2\n *\n * @param {vec2} out the receiving vector\n * @param {ReadonlyVec2} a vector to ceil\n * @returns {vec2} out\n */\nexport function ceil(out, a) {\n  out[0] = Math.ceil(a[0]);\n  out[1] = Math.ceil(a[1]);\n  return out;\n}\n\n/**\n * Math.floor the components of a vec2\n *\n * @param {vec2} out the receiving vector\n * @param {ReadonlyVec2} a vector to floor\n * @returns {vec2} out\n */\nexport function floor(out, a) {\n  out[0] = Math.floor(a[0]);\n  out[1] = Math.floor(a[1]);\n  return out;\n}\n\n/**\n * Returns the minimum of two vec2's\n *\n * @param {vec2} out the receiving vector\n * @param {ReadonlyVec2} a the first operand\n * @param {ReadonlyVec2} b the second operand\n * @returns {vec2} out\n */\nexport function min(out, a, b) {\n  out[0] = Math.min(a[0], b[0]);\n  out[1] = Math.min(a[1], b[1]);\n  return out;\n}\n\n/**\n * Returns the maximum of two vec2's\n *\n * @param {vec2} out the receiving vector\n * @param {ReadonlyVec2} a the first operand\n * @param {ReadonlyVec2} b the second operand\n * @returns {vec2} out\n */\nexport function max(out, a, b) {\n  out[0] = Math.max(a[0], b[0]);\n  out[1] = Math.max(a[1], b[1]);\n  return out;\n}\n\n/**\n * symmetric round the components of a vec2\n *\n * @param {vec2} out the receiving vector\n * @param {ReadonlyVec2} a vector to round\n * @returns {vec2} out\n */\nexport function round(out, a) {\n  out[0] = glMatrix.round(a[0]);\n  out[1] = glMatrix.round(a[1]);\n  return out;\n}\n\n/**\n * Scales a vec2 by a scalar number\n *\n * @param {vec2} out the receiving vector\n * @param {ReadonlyVec2} a the vector to scale\n * @param {Number} b amount to scale the vector by\n * @returns {vec2} out\n */\nexport function scale(out, a, b) {\n  out[0] = a[0] * b;\n  out[1] = a[1] * b;\n  return out;\n}\n\n/**\n * Adds two vec2's after scaling the second operand by a scalar value\n *\n * @param {vec2} out the receiving vector\n * @param {ReadonlyVec2} a the first operand\n * @param {ReadonlyVec2} b the second operand\n * @param {Number} scale the amount to scale b by before adding\n * @returns {vec2} out\n */\nexport function scaleAndAdd(out, a, b, scale) {\n  out[0] = a[0] + b[0] * scale;\n  out[1] = a[1] + b[1] * scale;\n  return out;\n}\n\n/**\n * Calculates the euclidian distance between two vec2's\n *\n * @param {ReadonlyVec2} a the first operand\n * @param {ReadonlyVec2} b the second operand\n * @returns {Number} distance between a and b\n */\nexport function distance(a, b) {\n  var x = b[0] - a[0],\n    y = b[1] - a[1];\n  return Math.sqrt(x * x + y * y);\n}\n\n/**\n * Calculates the squared euclidian distance between two vec2's\n *\n * @param {ReadonlyVec2} a the first operand\n * @param {ReadonlyVec2} b the second operand\n * @returns {Number} squared distance between a and b\n */\nexport function squaredDistance(a, b) {\n  var x = b[0] - a[0],\n    y = b[1] - a[1];\n  return x * x + y * y;\n}\n\n/**\n * Calculates the length of a vec2\n *\n * @param {ReadonlyVec2} a vector to calculate length of\n * @returns {Number} length of a\n */\nexport function length(a) {\n  var x = a[0],\n    y = a[1];\n  return Math.sqrt(x * x + y * y);\n}\n\n/**\n * Calculates the squared length of a vec2\n *\n * @param {ReadonlyVec2} a vector to calculate squared length of\n * @returns {Number} squared length of a\n */\nexport function squaredLength(a) {\n  var x = a[0],\n    y = a[1];\n  return x * x + y * y;\n}\n\n/**\n * Negates the components of a vec2\n *\n * @param {vec2} out the receiving vector\n * @param {ReadonlyVec2} a vector to negate\n * @returns {vec2} out\n */\nexport function negate(out, a) {\n  out[0] = -a[0];\n  out[1] = -a[1];\n  return out;\n}\n\n/**\n * Returns the inverse of the components of a vec2\n *\n * @param {vec2} out the receiving vector\n * @param {ReadonlyVec2} a vector to invert\n * @returns {vec2} out\n */\nexport function inverse(out, a) {\n  out[0] = 1.0 / a[0];\n  out[1] = 1.0 / a[1];\n  return out;\n}\n\n/**\n * Normalize a vec2\n *\n * @param {vec2} out the receiving vector\n * @param {ReadonlyVec2} a vector to normalize\n * @returns {vec2} out\n */\nexport function normalize(out, a) {\n  var x = a[0],\n    y = a[1];\n  var len = x * x + y * y;\n  if (len > 0) {\n    //TODO: evaluate use of glm_invsqrt here?\n    len = 1 / Math.sqrt(len);\n  }\n  out[0] = a[0] * len;\n  out[1] = a[1] * len;\n  return out;\n}\n\n/**\n * Calculates the dot product of two vec2's\n *\n * @param {ReadonlyVec2} a the first operand\n * @param {ReadonlyVec2} b the second operand\n * @returns {Number} dot product of a and b\n */\nexport function dot(a, b) {\n  return a[0] * b[0] + a[1] * b[1];\n}\n\n/**\n * Computes the cross product of two vec2's\n * Note that the cross product must by definition produce a 3D vector\n *\n * @param {vec3} out the receiving vector\n * @param {ReadonlyVec2} a the first operand\n * @param {ReadonlyVec2} b the second operand\n * @returns {vec3} out\n */\nexport function cross(out, a, b) {\n  var z = a[0] * b[1] - a[1] * b[0];\n  out[0] = out[1] = 0;\n  out[2] = z;\n  return out;\n}\n\n/**\n * Performs a linear interpolation between two vec2's\n *\n * @param {vec2} out the receiving vector\n * @param {ReadonlyVec2} a the first operand\n * @param {ReadonlyVec2} b the second operand\n * @param {Number} t interpolation amount, in the range [0-1], between the two inputs\n * @returns {vec2} out\n */\nexport function lerp(out, a, b, t) {\n  var ax = a[0],\n    ay = a[1];\n  out[0] = ax + t * (b[0] - ax);\n  out[1] = ay + t * (b[1] - ay);\n  return out;\n}\n\n/**\n * Generates a random vector with the given scale\n *\n * @param {vec2} out the receiving vector\n * @param {Number} [scale] Length of the resulting vector. If omitted, a unit vector will be returned\n * @returns {vec2} out\n */\nexport function random(out, scale) {\n  scale = scale === undefined ? 1.0 : scale;\n  var r = glMatrix.RANDOM() * 2.0 * Math.PI;\n  out[0] = Math.cos(r) * scale;\n  out[1] = Math.sin(r) * scale;\n  return out;\n}\n\n/**\n * Transforms the vec2 with a mat2\n *\n * @param {vec2} out the receiving vector\n * @param {ReadonlyVec2} a the vector to transform\n * @param {ReadonlyMat2} m matrix to transform with\n * @returns {vec2} out\n */\nexport function transformMat2(out, a, m) {\n  var x = a[0],\n    y = a[1];\n  out[0] = m[0] * x + m[2] * y;\n  out[1] = m[1] * x + m[3] * y;\n  return out;\n}\n\n/**\n * Transforms the vec2 with a mat2d\n *\n * @param {vec2} out the receiving vector\n * @param {ReadonlyVec2} a the vector to transform\n * @param {ReadonlyMat2d} m matrix to transform with\n * @returns {vec2} out\n */\nexport function transformMat2d(out, a, m) {\n  var x = a[0],\n    y = a[1];\n  out[0] = m[0] * x + m[2] * y + m[4];\n  out[1] = m[1] * x + m[3] * y + m[5];\n  return out;\n}\n\n/**\n * Transforms the vec2 with a mat3\n * 3rd vector component is implicitly '1'\n *\n * @param {vec2} out the receiving vector\n * @param {ReadonlyVec2} a the vector to transform\n * @param {ReadonlyMat3} m matrix to transform with\n * @returns {vec2} out\n */\nexport function transformMat3(out, a, m) {\n  var x = a[0],\n    y = a[1];\n  out[0] = m[0] * x + m[3] * y + m[6];\n  out[1] = m[1] * x + m[4] * y + m[7];\n  return out;\n}\n\n/**\n * Transforms the vec2 with a mat4\n * 3rd vector component is implicitly '0'\n * 4th vector component is implicitly '1'\n *\n * @param {vec2} out the receiving vector\n * @param {ReadonlyVec2} a the vector to transform\n * @param {ReadonlyMat4} m matrix to transform with\n * @returns {vec2} out\n */\nexport function transformMat4(out, a, m) {\n  var x = a[0];\n  var y = a[1];\n  out[0] = m[0] * x + m[4] * y + m[12];\n  out[1] = m[1] * x + m[5] * y + m[13];\n  return out;\n}\n\n/**\n * Rotate a 2D vector\n * @param {vec2} out The receiving vec2\n * @param {ReadonlyVec2} a The vec2 point to rotate\n * @param {ReadonlyVec2} b The origin of the rotation\n * @param {Number} rad The angle of rotation in radians\n * @returns {vec2} out\n */\nexport function rotate(out, a, b, rad) {\n  //Translate point to the origin\n  var p0 = a[0] - b[0],\n    p1 = a[1] - b[1],\n    sinC = Math.sin(rad),\n    cosC = Math.cos(rad);\n\n  //perform rotation and translate to correct position\n  out[0] = p0 * cosC - p1 * sinC + b[0];\n  out[1] = p0 * sinC + p1 * cosC + b[1];\n  return out;\n}\n\n/**\n * Get the smallest angle between two 2D vectors\n * @param {ReadonlyVec2} a The first operand\n * @param {ReadonlyVec2} b The second operand\n * @returns {Number} The angle in radians\n */\nexport function angle(a, b) {\n  var ax = a[0],\n    ay = a[1],\n    bx = b[0],\n    by = b[1];\n  return Math.abs(Math.atan2(ay * bx - ax * by, ax * bx + ay * by));\n}\n\n/**\n * Get the signed angle in the interval [-pi,pi] between two 2D vectors (positive if `a` is to the right of `b`)\n * \n * @param {ReadonlyVec2} a The first vector\n * @param {ReadonlyVec2} b The second vector\n * @returns {number} The signed angle in radians\n */\nexport function signedAngle(a, b) {\n  var ax = a[0],\n    ay = a[1],\n    bx = b[0],\n    by = b[1];\n  return Math.atan2(ax * by - ay * bx, ax * bx + ay * by);\n}\n\n/**\n * Set the components of a vec2 to zero\n *\n * @param {vec2} out the receiving vector\n * @returns {vec2} out\n */\nexport function zero(out) {\n  out[0] = 0.0;\n  out[1] = 0.0;\n  return out;\n}\n\n/**\n * Returns a string representation of a vector\n *\n * @param {ReadonlyVec2} a vector to represent as a string\n * @returns {String} string representation of the vector\n */\nexport function str(a) {\n  return \"vec2(\" + a[0] + \", \" + a[1] + \")\";\n}\n\n/**\n * Returns whether or not the vectors exactly have the same elements in the same position (when compared with ===)\n *\n * @param {ReadonlyVec2} a The first vector.\n * @param {ReadonlyVec2} b The second vector.\n * @returns {Boolean} True if the vectors are equal, false otherwise.\n */\nexport function exactEquals(a, b) {\n  return a[0] === b[0] && a[1] === b[1];\n}\n\n/**\n * Returns whether or not the vectors have approximately the same elements in the same position.\n *\n * @param {ReadonlyVec2} a The first vector.\n * @param {ReadonlyVec2} b The second vector.\n * @returns {Boolean} True if the vectors are equal, false otherwise.\n */\nexport function equals(a, b) {\n  var a0 = a[0],\n    a1 = a[1];\n  var b0 = b[0],\n    b1 = b[1];\n  return Math.abs(a0 - b0) <= glMatrix.EPSILON * Math.max(1.0, Math.abs(a0), Math.abs(b0)) && Math.abs(a1 - b1) <= glMatrix.EPSILON * Math.max(1.0, Math.abs(a1), Math.abs(b1));\n}\n\n/**\n * Alias for {@link vec2.length}\n * @function\n */\nexport var len = length;\n\n/**\n * Alias for {@link vec2.subtract}\n * @function\n */\nexport var sub = subtract;\n\n/**\n * Alias for {@link vec2.multiply}\n * @function\n */\nexport var mul = multiply;\n\n/**\n * Alias for {@link vec2.divide}\n * @function\n */\nexport var div = divide;\n\n/**\n * Alias for {@link vec2.distance}\n * @function\n */\nexport var dist = distance;\n\n/**\n * Alias for {@link vec2.squaredDistance}\n * @function\n */\nexport var sqrDist = squaredDistance;\n\n/**\n * Alias for {@link vec2.squaredLength}\n * @function\n */\nexport var sqrLen = squaredLength;\n\n/**\n * Perform some operation over an array of vec2s.\n *\n * @param {Array} a the array of vectors to iterate over\n * @param {Number} stride Number of elements between the start of each vec2. If 0 assumes tightly packed\n * @param {Number} offset Number of elements to skip at the beginning of the array\n * @param {Number} count Number of vec2s to iterate over. If 0 iterates over entire array\n * @param {Function} fn Function to call for each vector in the array\n * @param {Object} [arg] additional argument to pass to fn\n * @returns {Array} a\n * @function\n */\nexport var forEach = function () {\n  var vec = create();\n  return function (a, stride, offset, count, fn, arg) {\n    var i, l;\n    if (!stride) {\n      stride = 2;\n    }\n    if (!offset) {\n      offset = 0;\n    }\n    if (count) {\n      l = Math.min(count * stride + offset, a.length);\n    } else {\n      l = a.length;\n    }\n    for (i = offset; i < l; i += stride) {\n      vec[0] = a[i];\n      vec[1] = a[i + 1];\n      fn(vec, vec, arg);\n      a[i] = vec[0];\n      a[i + 1] = vec[1];\n    }\n    return a;\n  };\n}();","/**\n * @description 扩展方法，提供 gl-matrix 为提供的方法\n * */\nimport { mat3, vec2 } from 'gl-matrix';\nexport function leftTranslate(out, a, v) {\n    var transMat = [0, 0, 0, 0, 0, 0, 0, 0, 0];\n    mat3.fromTranslation(transMat, v);\n    return mat3.multiply(out, transMat, a);\n}\nexport function leftRotate(out, a, rad) {\n    var rotateMat = [0, 0, 0, 0, 0, 0, 0, 0, 0];\n    mat3.fromRotation(rotateMat, rad);\n    return mat3.multiply(out, rotateMat, a);\n}\nexport function leftScale(out, a, v) {\n    var scaleMat = [0, 0, 0, 0, 0, 0, 0, 0, 0];\n    mat3.fromScaling(scaleMat, v);\n    return mat3.multiply(out, scaleMat, a);\n}\nfunction leftMultiply(out, a, a1) {\n    return mat3.multiply(out, a1, a);\n}\n/**\n * 根据 actions 来做 transform\n * @param m\n * @param actions\n */\nexport function transform(m, actions) {\n    var matrix = m ? [].concat(m) : [1, 0, 0, 0, 1, 0, 0, 0, 1];\n    for (var i = 0, len = actions.length; i < len; i++) {\n        var action = actions[i];\n        switch (action[0]) {\n            case 't':\n                leftTranslate(matrix, matrix, [action[1], action[2]]);\n                break;\n            case 's':\n                leftScale(matrix, matrix, [action[1], action[2]]);\n                break;\n            case 'r':\n                leftRotate(matrix, matrix, action[1]);\n                break;\n            case 'm':\n                leftMultiply(matrix, matrix, action[1]);\n                break;\n            default:\n                break;\n        }\n    }\n    return matrix;\n}\n/**\n * 向量 v1 到 向量 v2 夹角的方向\n * @param  {Array} v1 向量\n * @param  {Array} v2 向量\n * @return {Boolean} >= 0 顺时针 < 0 逆时针\n */\nexport function direction(v1, v2) {\n    return v1[0] * v2[1] - v2[0] * v1[1];\n}\n/**\n * 二维向量 v1 到 v2 的夹角\n * @param v1\n * @param v2\n * @param direct\n */\nexport function angleTo(v1, v2, direct) {\n    var ang = vec2.angle(v1, v2);\n    var angleLargeThanPI = direction(v1, v2) >= 0;\n    if (direct) {\n        if (angleLargeThanPI) {\n            return Math.PI * 2 - ang;\n        }\n        return ang;\n    }\n    if (angleLargeThanPI) {\n        return ang;\n    }\n    return Math.PI * 2 - ang;\n}\n/**\n * 计算二维向量的垂直向量\n * @param out\n * @param v\n * @param flag\n */\nexport function vertical(out, v, flag) {\n    if (flag) {\n        out[0] = v[1];\n        out[1] = -1 * v[0];\n    }\n    else {\n        out[0] = -1 * v[1];\n        out[1] = v[0];\n    }\n    return out;\n}\n//# sourceMappingURL=ext.js.map","/**\n * @fileoverview 矩阵运算，本来是要引入 gl-matrix, 但是考虑到 g-mobile 对大小有限制，同时 g-webgl 使用的 matrix 不一致\n * 所以，这里仅实现 2D 几个运算，上层自己引入 gl-matrix\n * @author dxq613@gmail.com\n */\n/**\n * 3阶矩阵相乘\n * @param {number[]} a 矩阵1\n * @param {number[]} b 矩阵2\n */\nexport function multiplyMatrix(a, b) {\n    var out = [];\n    var a00 = a[0];\n    var a01 = a[1];\n    var a02 = a[2];\n    var a10 = a[3];\n    var a11 = a[4];\n    var a12 = a[5];\n    var a20 = a[6];\n    var a21 = a[7];\n    var a22 = a[8];\n    var b00 = b[0];\n    var b01 = b[1];\n    var b02 = b[2];\n    var b10 = b[3];\n    var b11 = b[4];\n    var b12 = b[5];\n    var b20 = b[6];\n    var b21 = b[7];\n    var b22 = b[8];\n    out[0] = b00 * a00 + b01 * a10 + b02 * a20;\n    out[1] = b00 * a01 + b01 * a11 + b02 * a21;\n    out[2] = b00 * a02 + b01 * a12 + b02 * a22;\n    out[3] = b10 * a00 + b11 * a10 + b12 * a20;\n    out[4] = b10 * a01 + b11 * a11 + b12 * a21;\n    out[5] = b10 * a02 + b11 * a12 + b12 * a22;\n    out[6] = b20 * a00 + b21 * a10 + b22 * a20;\n    out[7] = b20 * a01 + b21 * a11 + b22 * a21;\n    out[8] = b20 * a02 + b21 * a12 + b22 * a22;\n    return out;\n}\n/**\n * 3阶矩阵同2阶向量相乘\n * @param {number[]} m 矩阵\n * @param {number[]} v 二阶向量\n */\nexport function multiplyVec2(m, v) {\n    var out = [];\n    var x = v[0];\n    var y = v[1];\n    out[0] = m[0] * x + m[3] * y + m[6];\n    out[1] = m[1] * x + m[4] * y + m[7];\n    return out;\n}\n/**\n * 矩阵的逆\n * @param {number[]} a 矩阵\n */\nexport function invert(a) {\n    var out = [];\n    var a00 = a[0];\n    var a01 = a[1];\n    var a02 = a[2];\n    var a10 = a[3];\n    var a11 = a[4];\n    var a12 = a[5];\n    var a20 = a[6];\n    var a21 = a[7];\n    var a22 = a[8];\n    var b01 = a22 * a11 - a12 * a21;\n    var b11 = -a22 * a10 + a12 * a20;\n    var b21 = a21 * a10 - a11 * a20;\n    // Calculate the determinant\n    var det = a00 * b01 + a01 * b11 + a02 * b21;\n    if (!det) {\n        return null;\n    }\n    det = 1.0 / det;\n    out[0] = b01 * det;\n    out[1] = (-a22 * a01 + a02 * a21) * det;\n    out[2] = (a12 * a01 - a02 * a11) * det;\n    out[3] = b11 * det;\n    out[4] = (a22 * a00 - a02 * a20) * det;\n    out[5] = (-a12 * a00 + a02 * a10) * det;\n    out[6] = b21 * det;\n    out[7] = (-a21 * a00 + a01 * a20) * det;\n    out[8] = (a11 * a00 - a01 * a10) * det;\n    return out;\n}\n//# sourceMappingURL=matrix.js.map","import { __extends } from \"tslib\";\nimport { each, isEqual, isFunction, isNumber, isObject, isArray, noop, mix, upperFirst, uniqueId } from '@antv/util';\nimport { ext } from '@antv/matrix-util';\nimport { removeFromArray, isParent } from '../util/util';\nimport { multiplyMatrix, multiplyVec2, invert } from '../util/matrix';\nimport Base from './base';\nvar transform = ext.transform;\nvar MATRIX = 'matrix';\nvar CLONE_CFGS = ['zIndex', 'capture', 'visible', 'type'];\n// 可以在 toAttrs 中设置，但不属于绘图属性的字段\nvar RESERVED_PORPS = ['repeat'];\nvar DELEGATION_SPLIT = ':';\nvar WILDCARD = '*';\n// 需要考虑数组嵌套数组的场景\n// 数组嵌套对象的场景不考虑\nfunction _cloneArrayAttr(arr) {\n    var result = [];\n    for (var i = 0; i < arr.length; i++) {\n        if (isArray(arr[i])) {\n            result.push([].concat(arr[i]));\n        }\n        else {\n            result.push(arr[i]);\n        }\n    }\n    return result;\n}\nfunction getFormatFromAttrs(toAttrs, shape) {\n    var fromAttrs = {};\n    var attrs = shape.attrs;\n    for (var k in toAttrs) {\n        fromAttrs[k] = attrs[k];\n    }\n    return fromAttrs;\n}\nfunction getFormatToAttrs(props, shape) {\n    var toAttrs = {};\n    var attrs = shape.attr();\n    each(props, function (v, k) {\n        if (RESERVED_PORPS.indexOf(k) === -1 && !isEqual(attrs[k], v)) {\n            toAttrs[k] = v;\n        }\n    });\n    return toAttrs;\n}\nfunction checkExistedAttrs(animations, animation) {\n    if (animation.onFrame) {\n        return animations;\n    }\n    var startTime = animation.startTime, delay = animation.delay, duration = animation.duration;\n    var hasOwnProperty = Object.prototype.hasOwnProperty;\n    each(animations, function (item) {\n        // 后一个动画开始执行的时间 < 前一个动画的结束时间 && 后一个动画的执行时间 > 前一个动画的延迟\n        if (startTime + delay < item.startTime + item.delay + item.duration && duration > item.delay) {\n            each(animation.toAttrs, function (v, k) {\n                if (hasOwnProperty.call(item.toAttrs, k)) {\n                    delete item.toAttrs[k];\n                    delete item.fromAttrs[k];\n                }\n            });\n        }\n    });\n    return animations;\n}\nvar Element = /** @class */ (function (_super) {\n    __extends(Element, _super);\n    function Element(cfg) {\n        var _this = _super.call(this, cfg) || this;\n        /**\n         * @protected\n         * 图形属性\n         * @type {ShapeAttrs}\n         */\n        _this.attrs = {};\n        var attrs = _this.getDefaultAttrs();\n        mix(attrs, cfg.attrs);\n        _this.attrs = attrs;\n        _this.initAttrs(attrs);\n        _this.initAnimate(); // 初始化动画\n        return _this;\n    }\n    // override\n    Element.prototype.getDefaultCfg = function () {\n        return {\n            visible: true,\n            capture: true,\n            zIndex: 0,\n        };\n    };\n    /**\n     * @protected\n     * 获取默认的属相\n     */\n    Element.prototype.getDefaultAttrs = function () {\n        return {\n            matrix: this.getDefaultMatrix(),\n            opacity: 1,\n        };\n    };\n    /**\n     * @protected\n     * 一些方法调用会引起画布变化\n     * @param {ChangeType} changeType 改变的类型\n     */\n    Element.prototype.onCanvasChange = function (changeType) { };\n    /**\n     * @protected\n     * 初始化属性，有些属性需要加工\n     * @param {object} attrs 属性值\n     */\n    Element.prototype.initAttrs = function (attrs) { };\n    /**\n     * @protected\n     * 初始化动画\n     */\n    Element.prototype.initAnimate = function () {\n        this.set('animable', true);\n        this.set('animating', false);\n    };\n    Element.prototype.isGroup = function () {\n        return false;\n    };\n    Element.prototype.getParent = function () {\n        return this.get('parent');\n    };\n    Element.prototype.getCanvas = function () {\n        return this.get('canvas');\n    };\n    Element.prototype.attr = function () {\n        var _a;\n        var args = [];\n        for (var _i = 0; _i < arguments.length; _i++) {\n            args[_i] = arguments[_i];\n        }\n        var name = args[0], value = args[1];\n        if (!name)\n            return this.attrs;\n        if (isObject(name)) {\n            for (var k in name) {\n                this.setAttr(k, name[k]);\n            }\n            this.afterAttrsChange(name);\n            return this;\n        }\n        if (args.length === 2) {\n            this.setAttr(name, value);\n            this.afterAttrsChange((_a = {},\n                _a[name] = value,\n                _a));\n            return this;\n        }\n        return this.attrs[name];\n    };\n    // 是否被裁剪，被裁剪则不显示，不参与拾取\n    Element.prototype.isClipped = function (refX, refY) {\n        var clip = this.getClip();\n        return clip && !clip.isHit(refX, refY);\n    };\n    /**\n     * 内部设置属性值的接口\n     * @param {string} name 属性名\n     * @param {any} value 属性值\n     */\n    Element.prototype.setAttr = function (name, value) {\n        var originValue = this.attrs[name];\n        if (originValue !== value) {\n            this.attrs[name] = value;\n            this.onAttrChange(name, value, originValue);\n        }\n    };\n    /**\n     * @protected\n     * 属性值发生改变\n     * @param {string} name 属性名\n     * @param {any} value 属性值\n     * @param {any} originValue 属性值\n     */\n    Element.prototype.onAttrChange = function (name, value, originValue) {\n        if (name === 'matrix') {\n            this.set('totalMatrix', null);\n        }\n    };\n    /**\n     * 属性更改后需要做的事情\n     * @protected\n     */\n    Element.prototype.afterAttrsChange = function (targetAttrs) {\n        if (this.cfg.isClipShape) {\n            var applyTo = this.cfg.applyTo;\n            if (applyTo) {\n                applyTo.onCanvasChange('clip');\n            }\n        }\n        else {\n            this.onCanvasChange('attr');\n        }\n    };\n    Element.prototype.show = function () {\n        // 不是高频操作直接使用 set\n        this.set('visible', true);\n        this.onCanvasChange('show');\n        return this;\n    };\n    Element.prototype.hide = function () {\n        // 不是高频操作直接使用 set\n        this.set('visible', false);\n        this.onCanvasChange('hide');\n        return this;\n    };\n    Element.prototype.setZIndex = function (zIndex) {\n        this.set('zIndex', zIndex);\n        var parent = this.getParent();\n        if (parent) {\n            // 改变 zIndex 不应该立即触发渲染 (调用 onCanvasChange('zIndex'))，需要经过 sort 再触发\n            parent.sort();\n        }\n        return this;\n    };\n    Element.prototype.toFront = function () {\n        var parent = this.getParent();\n        if (!parent) {\n            return;\n        }\n        var children = parent.getChildren();\n        var el = this.get('el');\n        var index = children.indexOf(this);\n        children.splice(index, 1);\n        children.push(this);\n        this.onCanvasChange('zIndex');\n    };\n    Element.prototype.toBack = function () {\n        var parent = this.getParent();\n        if (!parent) {\n            return;\n        }\n        var children = parent.getChildren();\n        var el = this.get('el');\n        var index = children.indexOf(this);\n        children.splice(index, 1);\n        children.unshift(this);\n        this.onCanvasChange('zIndex');\n    };\n    Element.prototype.remove = function (destroy) {\n        if (destroy === void 0) { destroy = true; }\n        var parent = this.getParent();\n        if (parent) {\n            removeFromArray(parent.getChildren(), this);\n            if (!parent.get('clearing')) {\n                // 如果父元素正在清理，当前元素不触发 remove\n                this.onCanvasChange('remove');\n            }\n        }\n        else {\n            this.onCanvasChange('remove');\n        }\n        if (destroy) {\n            this.destroy();\n        }\n    };\n    Element.prototype.resetMatrix = function () {\n        this.attr(MATRIX, this.getDefaultMatrix());\n        this.onCanvasChange('matrix');\n    };\n    Element.prototype.getMatrix = function () {\n        return this.attr(MATRIX);\n    };\n    Element.prototype.setMatrix = function (m) {\n        this.attr(MATRIX, m);\n        this.onCanvasChange('matrix');\n    };\n    // 获取总的 matrix\n    Element.prototype.getTotalMatrix = function () {\n        var totalMatrix = this.cfg.totalMatrix;\n        if (!totalMatrix) {\n            var currentMatrix = this.attr('matrix');\n            var parentMatrix = this.cfg.parentMatrix;\n            if (parentMatrix && currentMatrix) {\n                totalMatrix = multiplyMatrix(parentMatrix, currentMatrix);\n            }\n            else {\n                totalMatrix = currentMatrix || parentMatrix;\n            }\n            this.set('totalMatrix', totalMatrix);\n        }\n        return totalMatrix;\n    };\n    // 上层分组设置 matrix\n    Element.prototype.applyMatrix = function (matrix) {\n        var currentMatrix = this.attr('matrix');\n        var totalMatrix = null;\n        if (matrix && currentMatrix) {\n            totalMatrix = multiplyMatrix(matrix, currentMatrix);\n        }\n        else {\n            totalMatrix = currentMatrix || matrix;\n        }\n        this.set('totalMatrix', totalMatrix);\n        this.set('parentMatrix', matrix);\n    };\n    /**\n     * @protected\n     * 获取默认的矩阵\n     * @returns {number[]|null} 默认的矩阵\n     */\n    Element.prototype.getDefaultMatrix = function () {\n        return null;\n    };\n    // 将向量应用设置的矩阵\n    Element.prototype.applyToMatrix = function (v) {\n        var matrix = this.attr('matrix');\n        if (matrix) {\n            return multiplyVec2(matrix, v);\n        }\n        return v;\n    };\n    // 根据设置的矩阵，将向量转换相对于图形/分组的位置\n    Element.prototype.invertFromMatrix = function (v) {\n        var matrix = this.attr('matrix');\n        if (matrix) {\n            var invertMatrix = invert(matrix);\n            if (invertMatrix) {\n                return multiplyVec2(invertMatrix, v);\n            }\n        }\n        return v;\n    };\n    // 设置 clip\n    Element.prototype.setClip = function (clipCfg) {\n        var canvas = this.getCanvas();\n        // 应该只设置当前元素的 clip，不应该去修改 clip 本身，方便 clip 被复用\n        // TODO: setClip 的传参既 shape 配置，也支持 shape 对象\n        // const preShape = this.get('clipShape');\n        // if (preShape) {\n        //   // 将之前的 clipShape 销毁\n        //   preShape.destroy();\n        // }\n        var clipShape = null;\n        // 如果配置项为 null，则不移除 clipShape\n        if (clipCfg) {\n            var ShapeBase = this.getShapeBase();\n            var shapeType = upperFirst(clipCfg.type);\n            var Cons = ShapeBase[shapeType];\n            if (Cons) {\n                clipShape = new Cons({\n                    type: clipCfg.type,\n                    isClipShape: true,\n                    applyTo: this,\n                    attrs: clipCfg.attrs,\n                    canvas: canvas,\n                });\n            }\n        }\n        this.set('clipShape', clipShape);\n        this.onCanvasChange('clip');\n        return clipShape;\n    };\n    Element.prototype.getClip = function () {\n        // 高频率调用的地方直接使用 this.cfg.xxx\n        var clipShape = this.cfg.clipShape;\n        // 未设置时返回 Null，保证一致性\n        if (!clipShape) {\n            return null;\n        }\n        return clipShape;\n    };\n    Element.prototype.clone = function () {\n        var _this = this;\n        var originAttrs = this.attrs;\n        var attrs = {};\n        each(originAttrs, function (i, k) {\n            if (isArray(originAttrs[k])) {\n                attrs[k] = _cloneArrayAttr(originAttrs[k]);\n            }\n            else {\n                attrs[k] = originAttrs[k];\n            }\n        });\n        var cons = this.constructor;\n        // @ts-ignore\n        var clone = new cons({ attrs: attrs });\n        each(CLONE_CFGS, function (cfgName) {\n            clone.set(cfgName, _this.get(cfgName));\n        });\n        return clone;\n    };\n    Element.prototype.destroy = function () {\n        var destroyed = this.destroyed;\n        if (destroyed) {\n            return;\n        }\n        this.attrs = {};\n        _super.prototype.destroy.call(this);\n        // this.onCanvasChange('destroy');\n    };\n    /**\n     * 是否处于动画暂停状态\n     * @return {boolean} 是否处于动画暂停状态\n     */\n    Element.prototype.isAnimatePaused = function () {\n        return this.get('_pause').isPaused;\n    };\n    /**\n     * 执行动画，支持多种函数签名\n     * 1. animate(toAttrs: ElementAttrs, duration: number, easing?: string, callback?: () => void, delay?: number)\n     * 2. animate(onFrame: OnFrame, duration: number, easing?: string, callback?: () => void, delay?: number)\n     * 3. animate(toAttrs: ElementAttrs, cfg: AnimateCfg)\n     * 4. animate(onFrame: OnFrame, cfg: AnimateCfg)\n     * 各个参数的含义为:\n     *   toAttrs  动画最终状态\n     *   onFrame  自定义帧动画函数\n     *   duration 动画执行时间\n     *   easing   动画缓动效果\n     *   callback 动画执行后的回调\n     *   delay    动画延迟时间\n     */\n    Element.prototype.animate = function () {\n        var args = [];\n        for (var _i = 0; _i < arguments.length; _i++) {\n            args[_i] = arguments[_i];\n        }\n        if (!this.get('timeline') && !this.get('canvas')) {\n            return;\n        }\n        this.set('animating', true);\n        var timeline = this.get('timeline');\n        if (!timeline) {\n            timeline = this.get('canvas').get('timeline');\n            this.set('timeline', timeline);\n        }\n        var animations = this.get('animations') || [];\n        // 初始化 tick\n        if (!timeline.timer) {\n            timeline.initTimer();\n        }\n        var toAttrs = args[0], duration = args[1], _a = args[2], easing = _a === void 0 ? 'easeLinear' : _a, _b = args[3], callback = _b === void 0 ? noop : _b, _c = args[4], delay = _c === void 0 ? 0 : _c;\n        var onFrame;\n        var repeat;\n        var pauseCallback;\n        var resumeCallback;\n        var animateCfg;\n        // 第二个参数，既可以是动画最终状态 toAttrs，也可以是自定义帧动画函数 onFrame\n        if (isFunction(toAttrs)) {\n            onFrame = toAttrs;\n            toAttrs = {};\n        }\n        else if (isObject(toAttrs) && toAttrs.onFrame) {\n            // 兼容 3.0 中的写法，onFrame 和 repeat 可在 toAttrs 中设置\n            onFrame = toAttrs.onFrame;\n            repeat = toAttrs.repeat;\n        }\n        // 第二个参数，既可以是执行时间 duration，也可以是动画参数 animateCfg\n        if (isObject(duration)) {\n            animateCfg = duration;\n            duration = animateCfg.duration;\n            easing = animateCfg.easing || 'easeLinear';\n            delay = animateCfg.delay || 0;\n            // animateCfg 中的设置优先级更高\n            repeat = animateCfg.repeat || repeat || false;\n            callback = animateCfg.callback || noop;\n            pauseCallback = animateCfg.pauseCallback || noop;\n            resumeCallback = animateCfg.resumeCallback || noop;\n        }\n        else {\n            // 第四个参数，既可以是回调函数 callback，也可以是延迟时间 delay\n            if (isNumber(callback)) {\n                delay = callback;\n                callback = null;\n            }\n            // 第三个参数，既可以是缓动参数 easing，也可以是回调函数 callback\n            if (isFunction(easing)) {\n                callback = easing;\n                easing = 'easeLinear';\n            }\n            else {\n                easing = easing || 'easeLinear';\n            }\n        }\n        var formatToAttrs = getFormatToAttrs(toAttrs, this);\n        var animation = {\n            fromAttrs: getFormatFromAttrs(formatToAttrs, this),\n            toAttrs: formatToAttrs,\n            duration: duration,\n            easing: easing,\n            repeat: repeat,\n            callback: callback,\n            pauseCallback: pauseCallback,\n            resumeCallback: resumeCallback,\n            delay: delay,\n            startTime: timeline.getTime(),\n            id: uniqueId(),\n            onFrame: onFrame,\n            pathFormatted: false,\n        };\n        // 如果动画元素队列中已经有这个图形了\n        if (animations.length > 0) {\n            // 先检查是否需要合并属性。若有相同的动画，将该属性从前一个动画中删除,直接用后一个动画中\n            animations = checkExistedAttrs(animations, animation);\n        }\n        else {\n            // 否则将图形添加到动画元素队列\n            timeline.addAnimator(this);\n        }\n        animations.push(animation);\n        this.set('animations', animations);\n        this.set('_pause', { isPaused: false });\n    };\n    /**\n     * 停止动画\n     * @param {boolean} toEnd 是否到动画的最终状态\n     */\n    Element.prototype.stopAnimate = function (toEnd) {\n        var _this = this;\n        if (toEnd === void 0) { toEnd = true; }\n        var animations = this.get('animations');\n        each(animations, function (animation) {\n            // 将动画执行到最后一帧\n            if (toEnd) {\n                if (animation.onFrame) {\n                    _this.attr(animation.onFrame(1));\n                }\n                else {\n                    _this.attr(animation.toAttrs);\n                }\n            }\n            if (animation.callback) {\n                // 动画停止时的回调\n                animation.callback();\n            }\n        });\n        this.set('animating', false);\n        this.set('animations', []);\n    };\n    /**\n     * 暂停动画\n     */\n    Element.prototype.pauseAnimate = function () {\n        var timeline = this.get('timeline');\n        var animations = this.get('animations');\n        var pauseTime = timeline.getTime();\n        each(animations, function (animation) {\n            animation._paused = true;\n            animation._pauseTime = pauseTime;\n            if (animation.pauseCallback) {\n                // 动画暂停时的回调\n                animation.pauseCallback();\n            }\n        });\n        // 记录下是在什么时候暂停的\n        this.set('_pause', {\n            isPaused: true,\n            pauseTime: pauseTime,\n        });\n        return this;\n    };\n    /**\n     * 恢复动画\n     */\n    Element.prototype.resumeAnimate = function () {\n        var timeline = this.get('timeline');\n        var current = timeline.getTime();\n        var animations = this.get('animations');\n        var pauseTime = this.get('_pause').pauseTime;\n        // 之后更新属性需要计算动画已经执行的时长，如果暂停了，就把初始时间调后\n        each(animations, function (animation) {\n            animation.startTime = animation.startTime + (current - pauseTime);\n            animation._paused = false;\n            animation._pauseTime = null;\n            if (animation.resumeCallback) {\n                animation.resumeCallback();\n            }\n        });\n        this.set('_pause', {\n            isPaused: false,\n        });\n        this.set('animations', animations);\n        return this;\n    };\n    /**\n     * 触发委托事件\n     * @param  {string}     type 事件类型\n     * @param  {GraphEvent} eventObj 事件对象\n     */\n    Element.prototype.emitDelegation = function (type, eventObj) {\n        var _this = this;\n        var paths = eventObj.propagationPath;\n        var events = this.getEvents();\n        var relativeShape;\n        if (type === 'mouseenter') {\n            relativeShape = eventObj.fromShape;\n        }\n        else if (type === 'mouseleave') {\n            relativeShape = eventObj.toShape;\n        }\n        var _loop_1 = function (i) {\n            var element = paths[i];\n            // 暂定跟 name 绑定\n            var name_1 = element.get('name');\n            if (name_1) {\n                // 第一个 mouseenter 和 mouseleave 的停止即可，因为后面的都是前面的 Parent\n                if (\n                // 只有 element 是 Group 或者 Canvas 的时候，才需要判断 isParent\n                (element.isGroup() || (element.isCanvas && element.isCanvas())) &&\n                    relativeShape &&\n                    isParent(element, relativeShape)) {\n                    return \"break\";\n                }\n                if (isArray(name_1)) {\n                    each(name_1, function (subName) {\n                        _this.emitDelegateEvent(element, subName, eventObj);\n                    });\n                }\n                else {\n                    this_1.emitDelegateEvent(element, name_1, eventObj);\n                }\n            }\n        };\n        var this_1 = this;\n        // 至少有一个对象，且第一个对象为 shape\n        for (var i = 0; i < paths.length; i++) {\n            var state_1 = _loop_1(i);\n            if (state_1 === \"break\")\n                break;\n        }\n    };\n    Element.prototype.emitDelegateEvent = function (element, name, eventObj) {\n        var events = this.getEvents();\n        // 事件委托的形式 name:type\n        var eventName = name + DELEGATION_SPLIT + eventObj.type;\n        if (events[eventName] || events[WILDCARD]) {\n            // 对于通配符 *，事件名称 = 委托事件名称\n            eventObj.name = eventName;\n            eventObj.currentTarget = element;\n            eventObj.delegateTarget = this;\n            // 将委托事件的监听对象 delegateObject 挂载到事件对象上\n            eventObj.delegateObject = element.get('delegateObject');\n            this.emit(eventName, eventObj);\n        }\n    };\n    /**\n     * 移动元素\n     * @param {number} translateX 水平移动距离\n     * @param {number} translateY 垂直移动距离\n     * @return {IElement} 元素\n     */\n    Element.prototype.translate = function (translateX, translateY) {\n        if (translateX === void 0) { translateX = 0; }\n        if (translateY === void 0) { translateY = 0; }\n        var matrix = this.getMatrix();\n        var newMatrix = transform(matrix, [['t', translateX, translateY]]);\n        this.setMatrix(newMatrix);\n        return this;\n    };\n    /**\n     * 移动元素到目标位置\n     * @param {number} targetX 目标位置的水平坐标\n     * @param {number} targetX 目标位置的垂直坐标\n     * @return {IElement} 元素\n     */\n    Element.prototype.move = function (targetX, targetY) {\n        var x = this.attr('x') || 0;\n        var y = this.attr('y') || 0;\n        this.translate(targetX - x, targetY - y);\n        return this;\n    };\n    /**\n     * 移动元素到目标位置，等价于 move 方法。由于 moveTo 的语义性更强，因此在文档中推荐使用 moveTo 方法\n     * @param {number} targetX 目标位置的 x 轴坐标\n     * @param {number} targetY 目标位置的 y 轴坐标\n     * @return {IElement} 元素\n     */\n    Element.prototype.moveTo = function (targetX, targetY) {\n        return this.move(targetX, targetY);\n    };\n    /**\n     * 缩放元素\n     * @param {number} ratioX 水平缩放比例\n     * @param {number} ratioY 垂直缩放比例\n     * @return {IElement} 元素\n     */\n    Element.prototype.scale = function (ratioX, ratioY) {\n        var matrix = this.getMatrix();\n        var newMatrix = transform(matrix, [['s', ratioX, ratioY || ratioX]]);\n        this.setMatrix(newMatrix);\n        return this;\n    };\n    /**\n     * 以画布左上角 (0, 0) 为中心旋转元素\n     * @param {number} radian 旋转角度(弧度值)\n     * @return {IElement} 元素\n     */\n    Element.prototype.rotate = function (radian) {\n        var matrix = this.getMatrix();\n        var newMatrix = transform(matrix, [['r', radian]]);\n        this.setMatrix(newMatrix);\n        return this;\n    };\n    /**\n     * 以起始点为中心旋转元素\n     * @param {number} radian 旋转角度(弧度值)\n     * @return {IElement} 元素\n     */\n    Element.prototype.rotateAtStart = function (rotate) {\n        var _a = this.attr(), x = _a.x, y = _a.y;\n        var matrix = this.getMatrix();\n        var newMatrix = transform(matrix, [\n            ['t', -x, -y],\n            ['r', rotate],\n            ['t', x, y],\n        ]);\n        this.setMatrix(newMatrix);\n        return this;\n    };\n    /**\n     * 以任意点 (x, y) 为中心旋转元素\n     * @param {number} radian 旋转角度(弧度值)\n     * @return {IElement} 元素\n     */\n    Element.prototype.rotateAtPoint = function (x, y, rotate) {\n        var matrix = this.getMatrix();\n        var newMatrix = transform(matrix, [\n            ['t', -x, -y],\n            ['r', rotate],\n            ['t', x, y],\n        ]);\n        this.setMatrix(newMatrix);\n        return this;\n    };\n    return Element;\n}(Base));\nexport default Element;\n//# sourceMappingURL=element.js.map","import { __extends } from \"tslib\";\nimport Element from './element';\nimport { isFunction, isObject, each, removeFromArray, upperFirst, isAllowCapture } from '../util/util';\nvar SHAPE_MAP = {};\nvar INDEX = '_INDEX';\n/**\n * 设置 canvas\n * @param {IElement} element 元素\n * @param {ICanvas}  canvas  画布\n */\nfunction setCanvas(element, canvas) {\n    element.set('canvas', canvas);\n    if (element.isGroup()) {\n        var children = element.get('children');\n        if (children.length) {\n            children.forEach(function (child) {\n                setCanvas(child, canvas);\n            });\n        }\n    }\n}\n/**\n * 设置 timeline\n * @param {IElement} element  元素\n * @param {Timeline} timeline 时间轴\n */\nfunction setTimeline(element, timeline) {\n    element.set('timeline', timeline);\n    if (element.isGroup()) {\n        var children = element.get('children');\n        if (children.length) {\n            children.forEach(function (child) {\n                setTimeline(child, timeline);\n            });\n        }\n    }\n}\nfunction contains(container, element) {\n    var children = container.getChildren();\n    return children.indexOf(element) >= 0;\n}\nfunction removeChild(container, element, destroy) {\n    if (destroy === void 0) { destroy = true; }\n    // 不再调用 element.remove() 方法，会出现循环调用\n    if (destroy) {\n        element.destroy();\n    }\n    else {\n        element.set('parent', null);\n        element.set('canvas', null);\n    }\n    removeFromArray(container.getChildren(), element);\n}\nfunction getComparer(compare) {\n    return function (left, right) {\n        var result = compare(left, right);\n        return result === 0 ? left[INDEX] - right[INDEX] : result;\n    };\n}\nvar Container = /** @class */ (function (_super) {\n    __extends(Container, _super);\n    function Container() {\n        return _super !== null && _super.apply(this, arguments) || this;\n    }\n    Container.prototype.isCanvas = function () {\n        return false;\n    };\n    // 根据子节点确定 BBox\n    Container.prototype.getBBox = function () {\n        // 所有的值可能在画布的可视区外\n        var minX = Infinity;\n        var maxX = -Infinity;\n        var minY = Infinity;\n        var maxY = -Infinity;\n        // 将可见元素、图形以及不为空的图形分组筛选出来，用于包围盒合并\n        var children = this.getChildren().filter(function (child) {\n            return child.get('visible') && (!child.isGroup() || (child.isGroup() && child.getChildren().length > 0));\n        });\n        if (children.length > 0) {\n            each(children, function (child) {\n                var _a = child.getBBox(), childMinX = _a.minX, childMaxX = _a.maxX, childMinY = _a.minY, childMaxY = _a.maxY;\n                if (childMinX < minX) {\n                    minX = childMinX;\n                }\n                if (childMaxX > maxX) {\n                    maxX = childMaxX;\n                }\n                if (childMinY < minY) {\n                    minY = childMinY;\n                }\n                if (childMaxY > maxY) {\n                    maxY = childMaxY;\n                }\n            });\n        }\n        else {\n            minX = 0;\n            maxX = 0;\n            minY = 0;\n            maxY = 0;\n        }\n        var box = {\n            x: minX,\n            y: minY,\n            minX: minX,\n            minY: minY,\n            maxX: maxX,\n            maxY: maxY,\n            width: maxX - minX,\n            height: maxY - minY,\n        };\n        return box;\n    };\n    // 获取画布的包围盒\n    Container.prototype.getCanvasBBox = function () {\n        var minX = Infinity;\n        var maxX = -Infinity;\n        var minY = Infinity;\n        var maxY = -Infinity;\n        // 将可见元素、图形以及不为空的图形分组筛选出来，用于包围盒合并\n        var children = this.getChildren().filter(function (child) {\n            return child.get('visible') && (!child.isGroup() || (child.isGroup() && child.getChildren().length > 0));\n        });\n        if (children.length > 0) {\n            each(children, function (child) {\n                var _a = child.getCanvasBBox(), childMinX = _a.minX, childMaxX = _a.maxX, childMinY = _a.minY, childMaxY = _a.maxY;\n                if (childMinX < minX) {\n                    minX = childMinX;\n                }\n                if (childMaxX > maxX) {\n                    maxX = childMaxX;\n                }\n                if (childMinY < minY) {\n                    minY = childMinY;\n                }\n                if (childMaxY > maxY) {\n                    maxY = childMaxY;\n                }\n            });\n        }\n        else {\n            minX = 0;\n            maxX = 0;\n            minY = 0;\n            maxY = 0;\n        }\n        var box = {\n            x: minX,\n            y: minY,\n            minX: minX,\n            minY: minY,\n            maxX: maxX,\n            maxY: maxY,\n            width: maxX - minX,\n            height: maxY - minY,\n        };\n        return box;\n    };\n    Container.prototype.getDefaultCfg = function () {\n        var cfg = _super.prototype.getDefaultCfg.call(this);\n        cfg['children'] = [];\n        return cfg;\n    };\n    Container.prototype.onAttrChange = function (name, value, originValue) {\n        _super.prototype.onAttrChange.call(this, name, value, originValue);\n        if (name === 'matrix') {\n            var totalMatrix = this.getTotalMatrix();\n            this._applyChildrenMarix(totalMatrix);\n        }\n    };\n    // 不但应用到自己身上还要应用于子元素\n    Container.prototype.applyMatrix = function (matrix) {\n        var preTotalMatrix = this.getTotalMatrix();\n        _super.prototype.applyMatrix.call(this, matrix);\n        var totalMatrix = this.getTotalMatrix();\n        // totalMatrix 没有发生变化时，这里仅考虑两者都为 null 时\n        // 不继续向下传递矩阵\n        if (totalMatrix === preTotalMatrix) {\n            return;\n        }\n        this._applyChildrenMarix(totalMatrix);\n    };\n    // 在子元素上设置矩阵\n    Container.prototype._applyChildrenMarix = function (totalMatrix) {\n        var children = this.getChildren();\n        each(children, function (child) {\n            child.applyMatrix(totalMatrix);\n        });\n    };\n    // 兼容老版本的接口\n    Container.prototype.addShape = function () {\n        var args = [];\n        for (var _i = 0; _i < arguments.length; _i++) {\n            args[_i] = arguments[_i];\n        }\n        var type = args[0];\n        var cfg = args[1];\n        if (isObject(type)) {\n            cfg = type;\n        }\n        else {\n            cfg['type'] = type;\n        }\n        var shapeType = SHAPE_MAP[cfg.type];\n        if (!shapeType) {\n            shapeType = upperFirst(cfg.type);\n            SHAPE_MAP[cfg.type] = shapeType;\n        }\n        var ShapeBase = this.getShapeBase();\n        var shape = new ShapeBase[shapeType](cfg);\n        this.add(shape);\n        return shape;\n    };\n    Container.prototype.addGroup = function () {\n        var args = [];\n        for (var _i = 0; _i < arguments.length; _i++) {\n            args[_i] = arguments[_i];\n        }\n        var groupClass = args[0], cfg = args[1];\n        var group;\n        if (isFunction(groupClass)) {\n            if (cfg) {\n                group = new groupClass(cfg);\n            }\n            else {\n                group = new groupClass({\n                    // canvas,\n                    parent: this,\n                });\n            }\n        }\n        else {\n            var tmpCfg = groupClass || {};\n            var TmpGroupClass = this.getGroupBase();\n            group = new TmpGroupClass(tmpCfg);\n        }\n        this.add(group);\n        return group;\n    };\n    Container.prototype.getCanvas = function () {\n        var canvas;\n        if (this.isCanvas()) {\n            canvas = this;\n        }\n        else {\n            canvas = this.get('canvas');\n        }\n        return canvas;\n    };\n    Container.prototype.getShape = function (x, y, ev) {\n        // 如果不支持拾取，则直接返回\n        if (!isAllowCapture(this)) {\n            return null;\n        }\n        var children = this.getChildren();\n        var shape;\n        // 如果容器是 group\n        if (!this.isCanvas()) {\n            var v = [x, y, 1];\n            // 将 x, y 转换成对应于 group 的局部坐标\n            v = this.invertFromMatrix(v);\n            if (!this.isClipped(v[0], v[1])) {\n                shape = this._findShape(children, v[0], v[1], ev);\n            }\n        }\n        else {\n            shape = this._findShape(children, x, y, ev);\n        }\n        return shape;\n    };\n    Container.prototype._findShape = function (children, x, y, ev) {\n        var shape = null;\n        for (var i = children.length - 1; i >= 0; i--) {\n            var child = children[i];\n            if (isAllowCapture(child)) {\n                if (child.isGroup()) {\n                    shape = child.getShape(x, y, ev);\n                }\n                else if (child.isHit(x, y)) {\n                    shape = child;\n                }\n            }\n            if (shape) {\n                break;\n            }\n        }\n        return shape;\n    };\n    Container.prototype.add = function (element) {\n        var canvas = this.getCanvas();\n        var children = this.getChildren();\n        var timeline = this.get('timeline');\n        var preParent = element.getParent();\n        if (preParent) {\n            removeChild(preParent, element, false);\n        }\n        element.set('parent', this);\n        if (canvas) {\n            setCanvas(element, canvas);\n        }\n        if (timeline) {\n            setTimeline(element, timeline);\n        }\n        children.push(element);\n        element.onCanvasChange('add');\n        this._applyElementMatrix(element);\n    };\n    // 将当前容器的矩阵应用到子元素\n    Container.prototype._applyElementMatrix = function (element) {\n        var totalMatrix = this.getTotalMatrix();\n        // 添加图形或者分组时，需要把当前图元的矩阵设置进去\n        if (totalMatrix) {\n            element.applyMatrix(totalMatrix);\n        }\n    };\n    Container.prototype.getChildren = function () {\n        return (this.get('children') || []);\n    };\n    Container.prototype.sort = function () {\n        var children = this.getChildren();\n        // 稳定排序\n        each(children, function (child, index) {\n            child[INDEX] = index;\n            return child;\n        });\n        children.sort(getComparer(function (obj1, obj2) {\n            return obj1.get('zIndex') - obj2.get('zIndex');\n        }));\n        this.onCanvasChange('sort');\n    };\n    Container.prototype.clear = function () {\n        this.set('clearing', true);\n        if (this.destroyed) {\n            return;\n        }\n        var children = this.getChildren();\n        for (var i = children.length - 1; i >= 0; i--) {\n            children[i].destroy(); // 销毁子元素\n        }\n        this.set('children', []);\n        this.onCanvasChange('clear');\n        this.set('clearing', false);\n    };\n    Container.prototype.destroy = function () {\n        if (this.get('destroyed')) {\n            return;\n        }\n        this.clear();\n        _super.prototype.destroy.call(this);\n    };\n    /**\n     * 获取第一个子元素\n     * @return {IElement} 第一个元素\n     */\n    Container.prototype.getFirst = function () {\n        return this.getChildByIndex(0);\n    };\n    /**\n     * 获取最后一个子元素\n     * @return {IElement} 元素\n     */\n    Container.prototype.getLast = function () {\n        var children = this.getChildren();\n        return this.getChildByIndex(children.length - 1);\n    };\n    /**\n     * 根据索引获取子元素\n     * @return {IElement} 第一个元素\n     */\n    Container.prototype.getChildByIndex = function (index) {\n        var children = this.getChildren();\n        return children[index];\n    };\n    /**\n     * 子元素的数量\n     * @return {number} 子元素数量\n     */\n    Container.prototype.getCount = function () {\n        var children = this.getChildren();\n        return children.length;\n    };\n    /**\n     * 是否包含对应元素\n     * @param {IElement} element 元素\n     * @return {boolean}\n     */\n    Container.prototype.contain = function (element) {\n        var children = this.getChildren();\n        return children.indexOf(element) > -1;\n    };\n    /**\n     * 移除对应子元素\n     * @param {IElement} element 子元素\n     * @param {boolean} destroy 是否销毁子元素，默认为 true\n     */\n    Container.prototype.removeChild = function (element, destroy) {\n        if (destroy === void 0) { destroy = true; }\n        if (this.contain(element)) {\n            element.remove(destroy);\n        }\n    };\n    /**\n     * 查找所有匹配的元素\n     * @param  {ElementFilterFn}   fn  匹配函数\n     * @return {IElement[]} 元素数组\n     */\n    Container.prototype.findAll = function (fn) {\n        var rst = [];\n        var children = this.getChildren();\n        each(children, function (element) {\n            if (fn(element)) {\n                rst.push(element);\n            }\n            if (element.isGroup()) {\n                rst = rst.concat(element.findAll(fn));\n            }\n        });\n        return rst;\n    };\n    /**\n     * 查找元素，找到第一个返回\n     * @param  {ElementFilterFn} fn    匹配函数\n     * @return {IElement|null} 元素，可以为空\n     */\n    Container.prototype.find = function (fn) {\n        var rst = null;\n        var children = this.getChildren();\n        each(children, function (element) {\n            if (fn(element)) {\n                rst = element;\n            }\n            else if (element.isGroup()) {\n                rst = element.find(fn);\n            }\n            if (rst) {\n                return false;\n            }\n        });\n        return rst;\n    };\n    /**\n     * 根据 ID 查找元素\n     * @param {string} id 元素 id\n     * @return {IElement|null} 元素\n     */\n    Container.prototype.findById = function (id) {\n        return this.find(function (element) {\n            return element.get('id') === id;\n        });\n    };\n    /**\n     * 该方法即将废弃，不建议使用\n     * 根据 className 查找元素\n     * TODO: 该方式定义暂时只给 G6 3.3 以后的版本使用，待 G6 中的 findByClassName 方法移除后，G 也需要同步移除\n     * @param {string} className 元素 className\n     * @return {IElement | null} 元素\n     */\n    Container.prototype.findByClassName = function (className) {\n        return this.find(function (element) {\n            return element.get('className') === className;\n        });\n    };\n    /**\n     * 根据 name 查找元素列表\n     * @param {string}      name 元素名称\n     * @return {IElement[]} 元素\n     */\n    Container.prototype.findAllByName = function (name) {\n        return this.findAll(function (element) {\n            return element.get('name') === name;\n        });\n    };\n    return Container;\n}(Element));\nexport default Container;\n//# sourceMappingURL=container.js.map","var frame = 0, // is an animation frame pending?\n    timeout = 0, // is a timeout pending?\n    interval = 0, // are any timers active?\n    pokeDelay = 1000, // how frequently we check for clock skew\n    taskHead,\n    taskTail,\n    clockLast = 0,\n    clockNow = 0,\n    clockSkew = 0,\n    clock = typeof performance === \"object\" && performance.now ? performance : Date,\n    setFrame = typeof window === \"object\" && window.requestAnimationFrame ? window.requestAnimationFrame.bind(window) : function(f) { setTimeout(f, 17); };\n\nexport function now() {\n  return clockNow || (setFrame(clearNow), clockNow = clock.now() + clockSkew);\n}\n\nfunction clearNow() {\n  clockNow = 0;\n}\n\nexport function Timer() {\n  this._call =\n  this._time =\n  this._next = null;\n}\n\nTimer.prototype = timer.prototype = {\n  constructor: Timer,\n  restart: function(callback, delay, time) {\n    if (typeof callback !== \"function\") throw new TypeError(\"callback is not a function\");\n    time = (time == null ? now() : +time) + (delay == null ? 0 : +delay);\n    if (!this._next && taskTail !== this) {\n      if (taskTail) taskTail._next = this;\n      else taskHead = this;\n      taskTail = this;\n    }\n    this._call = callback;\n    this._time = time;\n    sleep();\n  },\n  stop: function() {\n    if (this._call) {\n      this._call = null;\n      this._time = Infinity;\n      sleep();\n    }\n  }\n};\n\nexport function timer(callback, delay, time) {\n  var t = new Timer;\n  t.restart(callback, delay, time);\n  return t;\n}\n\nexport function timerFlush() {\n  now(); // Get the current time, if not already set.\n  ++frame; // Pretend we’ve set an alarm, if we haven’t already.\n  var t = taskHead, e;\n  while (t) {\n    if ((e = clockNow - t._time) >= 0) t._call.call(null, e);\n    t = t._next;\n  }\n  --frame;\n}\n\nfunction wake() {\n  clockNow = (clockLast = clock.now()) + clockSkew;\n  frame = timeout = 0;\n  try {\n    timerFlush();\n  } finally {\n    frame = 0;\n    nap();\n    clockNow = 0;\n  }\n}\n\nfunction poke() {\n  var now = clock.now(), delay = now - clockLast;\n  if (delay > pokeDelay) clockSkew -= delay, clockLast = now;\n}\n\nfunction nap() {\n  var t0, t1 = taskHead, t2, time = Infinity;\n  while (t1) {\n    if (t1._call) {\n      if (time > t1._time) time = t1._time;\n      t0 = t1, t1 = t1._next;\n    } else {\n      t2 = t1._next, t1._next = null;\n      t1 = t0 ? t0._next = t2 : taskHead = t2;\n    }\n  }\n  taskTail = t0;\n  sleep(time);\n}\n\nfunction sleep(time) {\n  if (frame) return; // Soonest alarm already set, or will be.\n  if (timeout) timeout = clearTimeout(timeout);\n  var delay = time - clockNow; // Strictly less than if we recomputed clockNow.\n  if (delay > 24) {\n    if (time < Infinity) timeout = setTimeout(wake, time - clock.now() - clockSkew);\n    if (interval) interval = clearInterval(interval);\n  } else {\n    if (!interval) clockLast = clock.now(), interval = setInterval(poke, pokeDelay);\n    frame = 1, setFrame(wake);\n  }\n}\n","export default function(constructor, factory, prototype) {\n  constructor.prototype = factory.prototype = prototype;\n  prototype.constructor = constructor;\n}\n\nexport function extend(parent, definition) {\n  var prototype = Object.create(parent.prototype);\n  for (var key in definition) prototype[key] = definition[key];\n  return prototype;\n}\n","import define, {extend} from \"./define.js\";\n\nexport function Color() {}\n\nexport var darker = 0.7;\nexport var brighter = 1 / darker;\n\nvar reI = \"\\\\s*([+-]?\\\\d+)\\\\s*\",\n    reN = \"\\\\s*([+-]?\\\\d*\\\\.?\\\\d+(?:[eE][+-]?\\\\d+)?)\\\\s*\",\n    reP = \"\\\\s*([+-]?\\\\d*\\\\.?\\\\d+(?:[eE][+-]?\\\\d+)?)%\\\\s*\",\n    reHex = /^#([0-9a-f]{3,8})$/,\n    reRgbInteger = new RegExp(\"^rgb\\\\(\" + [reI, reI, reI] + \"\\\\)$\"),\n    reRgbPercent = new RegExp(\"^rgb\\\\(\" + [reP, reP, reP] + \"\\\\)$\"),\n    reRgbaInteger = new RegExp(\"^rgba\\\\(\" + [reI, reI, reI, reN] + \"\\\\)$\"),\n    reRgbaPercent = new RegExp(\"^rgba\\\\(\" + [reP, reP, reP, reN] + \"\\\\)$\"),\n    reHslPercent = new RegExp(\"^hsl\\\\(\" + [reN, reP, reP] + \"\\\\)$\"),\n    reHslaPercent = new RegExp(\"^hsla\\\\(\" + [reN, reP, reP, reN] + \"\\\\)$\");\n\nvar named = {\n  aliceblue: 0xf0f8ff,\n  antiquewhite: 0xfaebd7,\n  aqua: 0x00ffff,\n  aquamarine: 0x7fffd4,\n  azure: 0xf0ffff,\n  beige: 0xf5f5dc,\n  bisque: 0xffe4c4,\n  black: 0x000000,\n  blanchedalmond: 0xffebcd,\n  blue: 0x0000ff,\n  blueviolet: 0x8a2be2,\n  brown: 0xa52a2a,\n  burlywood: 0xdeb887,\n  cadetblue: 0x5f9ea0,\n  chartreuse: 0x7fff00,\n  chocolate: 0xd2691e,\n  coral: 0xff7f50,\n  cornflowerblue: 0x6495ed,\n  cornsilk: 0xfff8dc,\n  crimson: 0xdc143c,\n  cyan: 0x00ffff,\n  darkblue: 0x00008b,\n  darkcyan: 0x008b8b,\n  darkgoldenrod: 0xb8860b,\n  darkgray: 0xa9a9a9,\n  darkgreen: 0x006400,\n  darkgrey: 0xa9a9a9,\n  darkkhaki: 0xbdb76b,\n  darkmagenta: 0x8b008b,\n  darkolivegreen: 0x556b2f,\n  darkorange: 0xff8c00,\n  darkorchid: 0x9932cc,\n  darkred: 0x8b0000,\n  darksalmon: 0xe9967a,\n  darkseagreen: 0x8fbc8f,\n  darkslateblue: 0x483d8b,\n  darkslategray: 0x2f4f4f,\n  darkslategrey: 0x2f4f4f,\n  darkturquoise: 0x00ced1,\n  darkviolet: 0x9400d3,\n  deeppink: 0xff1493,\n  deepskyblue: 0x00bfff,\n  dimgray: 0x696969,\n  dimgrey: 0x696969,\n  dodgerblue: 0x1e90ff,\n  firebrick: 0xb22222,\n  floralwhite: 0xfffaf0,\n  forestgreen: 0x228b22,\n  fuchsia: 0xff00ff,\n  gainsboro: 0xdcdcdc,\n  ghostwhite: 0xf8f8ff,\n  gold: 0xffd700,\n  goldenrod: 0xdaa520,\n  gray: 0x808080,\n  green: 0x008000,\n  greenyellow: 0xadff2f,\n  grey: 0x808080,\n  honeydew: 0xf0fff0,\n  hotpink: 0xff69b4,\n  indianred: 0xcd5c5c,\n  indigo: 0x4b0082,\n  ivory: 0xfffff0,\n  khaki: 0xf0e68c,\n  lavender: 0xe6e6fa,\n  lavenderblush: 0xfff0f5,\n  lawngreen: 0x7cfc00,\n  lemonchiffon: 0xfffacd,\n  lightblue: 0xadd8e6,\n  lightcoral: 0xf08080,\n  lightcyan: 0xe0ffff,\n  lightgoldenrodyellow: 0xfafad2,\n  lightgray: 0xd3d3d3,\n  lightgreen: 0x90ee90,\n  lightgrey: 0xd3d3d3,\n  lightpink: 0xffb6c1,\n  lightsalmon: 0xffa07a,\n  lightseagreen: 0x20b2aa,\n  lightskyblue: 0x87cefa,\n  lightslategray: 0x778899,\n  lightslategrey: 0x778899,\n  lightsteelblue: 0xb0c4de,\n  lightyellow: 0xffffe0,\n  lime: 0x00ff00,\n  limegreen: 0x32cd32,\n  linen: 0xfaf0e6,\n  magenta: 0xff00ff,\n  maroon: 0x800000,\n  mediumaquamarine: 0x66cdaa,\n  mediumblue: 0x0000cd,\n  mediumorchid: 0xba55d3,\n  mediumpurple: 0x9370db,\n  mediumseagreen: 0x3cb371,\n  mediumslateblue: 0x7b68ee,\n  mediumspringgreen: 0x00fa9a,\n  mediumturquoise: 0x48d1cc,\n  mediumvioletred: 0xc71585,\n  midnightblue: 0x191970,\n  mintcream: 0xf5fffa,\n  mistyrose: 0xffe4e1,\n  moccasin: 0xffe4b5,\n  navajowhite: 0xffdead,\n  navy: 0x000080,\n  oldlace: 0xfdf5e6,\n  olive: 0x808000,\n  olivedrab: 0x6b8e23,\n  orange: 0xffa500,\n  orangered: 0xff4500,\n  orchid: 0xda70d6,\n  palegoldenrod: 0xeee8aa,\n  palegreen: 0x98fb98,\n  paleturquoise: 0xafeeee,\n  palevioletred: 0xdb7093,\n  papayawhip: 0xffefd5,\n  peachpuff: 0xffdab9,\n  peru: 0xcd853f,\n  pink: 0xffc0cb,\n  plum: 0xdda0dd,\n  powderblue: 0xb0e0e6,\n  purple: 0x800080,\n  rebeccapurple: 0x663399,\n  red: 0xff0000,\n  rosybrown: 0xbc8f8f,\n  royalblue: 0x4169e1,\n  saddlebrown: 0x8b4513,\n  salmon: 0xfa8072,\n  sandybrown: 0xf4a460,\n  seagreen: 0x2e8b57,\n  seashell: 0xfff5ee,\n  sienna: 0xa0522d,\n  silver: 0xc0c0c0,\n  skyblue: 0x87ceeb,\n  slateblue: 0x6a5acd,\n  slategray: 0x708090,\n  slategrey: 0x708090,\n  snow: 0xfffafa,\n  springgreen: 0x00ff7f,\n  steelblue: 0x4682b4,\n  tan: 0xd2b48c,\n  teal: 0x008080,\n  thistle: 0xd8bfd8,\n  tomato: 0xff6347,\n  turquoise: 0x40e0d0,\n  violet: 0xee82ee,\n  wheat: 0xf5deb3,\n  white: 0xffffff,\n  whitesmoke: 0xf5f5f5,\n  yellow: 0xffff00,\n  yellowgreen: 0x9acd32\n};\n\ndefine(Color, color, {\n  copy: function(channels) {\n    return Object.assign(new this.constructor, this, channels);\n  },\n  displayable: function() {\n    return this.rgb().displayable();\n  },\n  hex: color_formatHex, // Deprecated! Use color.formatHex.\n  formatHex: color_formatHex,\n  formatHsl: color_formatHsl,\n  formatRgb: color_formatRgb,\n  toString: color_formatRgb\n});\n\nfunction color_formatHex() {\n  return this.rgb().formatHex();\n}\n\nfunction color_formatHsl() {\n  return hslConvert(this).formatHsl();\n}\n\nfunction color_formatRgb() {\n  return this.rgb().formatRgb();\n}\n\nexport default function color(format) {\n  var m, l;\n  format = (format + \"\").trim().toLowerCase();\n  return (m = reHex.exec(format)) ? (l = m[1].length, m = parseInt(m[1], 16), l === 6 ? rgbn(m) // #ff0000\n      : l === 3 ? new Rgb((m >> 8 & 0xf) | (m >> 4 & 0xf0), (m >> 4 & 0xf) | (m & 0xf0), ((m & 0xf) << 4) | (m & 0xf), 1) // #f00\n      : l === 8 ? rgba(m >> 24 & 0xff, m >> 16 & 0xff, m >> 8 & 0xff, (m & 0xff) / 0xff) // #ff000000\n      : l === 4 ? rgba((m >> 12 & 0xf) | (m >> 8 & 0xf0), (m >> 8 & 0xf) | (m >> 4 & 0xf0), (m >> 4 & 0xf) | (m & 0xf0), (((m & 0xf) << 4) | (m & 0xf)) / 0xff) // #f000\n      : null) // invalid hex\n      : (m = reRgbInteger.exec(format)) ? new Rgb(m[1], m[2], m[3], 1) // rgb(255, 0, 0)\n      : (m = reRgbPercent.exec(format)) ? new Rgb(m[1] * 255 / 100, m[2] * 255 / 100, m[3] * 255 / 100, 1) // rgb(100%, 0%, 0%)\n      : (m = reRgbaInteger.exec(format)) ? rgba(m[1], m[2], m[3], m[4]) // rgba(255, 0, 0, 1)\n      : (m = reRgbaPercent.exec(format)) ? rgba(m[1] * 255 / 100, m[2] * 255 / 100, m[3] * 255 / 100, m[4]) // rgb(100%, 0%, 0%, 1)\n      : (m = reHslPercent.exec(format)) ? hsla(m[1], m[2] / 100, m[3] / 100, 1) // hsl(120, 50%, 50%)\n      : (m = reHslaPercent.exec(format)) ? hsla(m[1], m[2] / 100, m[3] / 100, m[4]) // hsla(120, 50%, 50%, 1)\n      : named.hasOwnProperty(format) ? rgbn(named[format]) // eslint-disable-line no-prototype-builtins\n      : format === \"transparent\" ? new Rgb(NaN, NaN, NaN, 0)\n      : null;\n}\n\nfunction rgbn(n) {\n  return new Rgb(n >> 16 & 0xff, n >> 8 & 0xff, n & 0xff, 1);\n}\n\nfunction rgba(r, g, b, a) {\n  if (a <= 0) r = g = b = NaN;\n  return new Rgb(r, g, b, a);\n}\n\nexport function rgbConvert(o) {\n  if (!(o instanceof Color)) o = color(o);\n  if (!o) return new Rgb;\n  o = o.rgb();\n  return new Rgb(o.r, o.g, o.b, o.opacity);\n}\n\nexport function rgb(r, g, b, opacity) {\n  return arguments.length === 1 ? rgbConvert(r) : new Rgb(r, g, b, opacity == null ? 1 : opacity);\n}\n\nexport function Rgb(r, g, b, opacity) {\n  this.r = +r;\n  this.g = +g;\n  this.b = +b;\n  this.opacity = +opacity;\n}\n\ndefine(Rgb, rgb, extend(Color, {\n  brighter: function(k) {\n    k = k == null ? brighter : Math.pow(brighter, k);\n    return new Rgb(this.r * k, this.g * k, this.b * k, this.opacity);\n  },\n  darker: function(k) {\n    k = k == null ? darker : Math.pow(darker, k);\n    return new Rgb(this.r * k, this.g * k, this.b * k, this.opacity);\n  },\n  rgb: function() {\n    return this;\n  },\n  displayable: function() {\n    return (-0.5 <= this.r && this.r < 255.5)\n        && (-0.5 <= this.g && this.g < 255.5)\n        && (-0.5 <= this.b && this.b < 255.5)\n        && (0 <= this.opacity && this.opacity <= 1);\n  },\n  hex: rgb_formatHex, // Deprecated! Use color.formatHex.\n  formatHex: rgb_formatHex,\n  formatRgb: rgb_formatRgb,\n  toString: rgb_formatRgb\n}));\n\nfunction rgb_formatHex() {\n  return \"#\" + hex(this.r) + hex(this.g) + hex(this.b);\n}\n\nfunction rgb_formatRgb() {\n  var a = this.opacity; a = isNaN(a) ? 1 : Math.max(0, Math.min(1, a));\n  return (a === 1 ? \"rgb(\" : \"rgba(\")\n      + Math.max(0, Math.min(255, Math.round(this.r) || 0)) + \", \"\n      + Math.max(0, Math.min(255, Math.round(this.g) || 0)) + \", \"\n      + Math.max(0, Math.min(255, Math.round(this.b) || 0))\n      + (a === 1 ? \")\" : \", \" + a + \")\");\n}\n\nfunction hex(value) {\n  value = Math.max(0, Math.min(255, Math.round(value) || 0));\n  return (value < 16 ? \"0\" : \"\") + value.toString(16);\n}\n\nfunction hsla(h, s, l, a) {\n  if (a <= 0) h = s = l = NaN;\n  else if (l <= 0 || l >= 1) h = s = NaN;\n  else if (s <= 0) h = NaN;\n  return new Hsl(h, s, l, a);\n}\n\nexport function hslConvert(o) {\n  if (o instanceof Hsl) return new Hsl(o.h, o.s, o.l, o.opacity);\n  if (!(o instanceof Color)) o = color(o);\n  if (!o) return new Hsl;\n  if (o instanceof Hsl) return o;\n  o = o.rgb();\n  var r = o.r / 255,\n      g = o.g / 255,\n      b = o.b / 255,\n      min = Math.min(r, g, b),\n      max = Math.max(r, g, b),\n      h = NaN,\n      s = max - min,\n      l = (max + min) / 2;\n  if (s) {\n    if (r === max) h = (g - b) / s + (g < b) * 6;\n    else if (g === max) h = (b - r) / s + 2;\n    else h = (r - g) / s + 4;\n    s /= l < 0.5 ? max + min : 2 - max - min;\n    h *= 60;\n  } else {\n    s = l > 0 && l < 1 ? 0 : h;\n  }\n  return new Hsl(h, s, l, o.opacity);\n}\n\nexport function hsl(h, s, l, opacity) {\n  return arguments.length === 1 ? hslConvert(h) : new Hsl(h, s, l, opacity == null ? 1 : opacity);\n}\n\nfunction Hsl(h, s, l, opacity) {\n  this.h = +h;\n  this.s = +s;\n  this.l = +l;\n  this.opacity = +opacity;\n}\n\ndefine(Hsl, hsl, extend(Color, {\n  brighter: function(k) {\n    k = k == null ? brighter : Math.pow(brighter, k);\n    return new Hsl(this.h, this.s, this.l * k, this.opacity);\n  },\n  darker: function(k) {\n    k = k == null ? darker : Math.pow(darker, k);\n    return new Hsl(this.h, this.s, this.l * k, this.opacity);\n  },\n  rgb: function() {\n    var h = this.h % 360 + (this.h < 0) * 360,\n        s = isNaN(h) || isNaN(this.s) ? 0 : this.s,\n        l = this.l,\n        m2 = l + (l < 0.5 ? l : 1 - l) * s,\n        m1 = 2 * l - m2;\n    return new Rgb(\n      hsl2rgb(h >= 240 ? h - 240 : h + 120, m1, m2),\n      hsl2rgb(h, m1, m2),\n      hsl2rgb(h < 120 ? h + 240 : h - 120, m1, m2),\n      this.opacity\n    );\n  },\n  displayable: function() {\n    return (0 <= this.s && this.s <= 1 || isNaN(this.s))\n        && (0 <= this.l && this.l <= 1)\n        && (0 <= this.opacity && this.opacity <= 1);\n  },\n  formatHsl: function() {\n    var a = this.opacity; a = isNaN(a) ? 1 : Math.max(0, Math.min(1, a));\n    return (a === 1 ? \"hsl(\" : \"hsla(\")\n        + (this.h || 0) + \", \"\n        + (this.s || 0) * 100 + \"%, \"\n        + (this.l || 0) * 100 + \"%\"\n        + (a === 1 ? \")\" : \", \" + a + \")\");\n  }\n}));\n\n/* From FvD 13.37, CSS Color Module Level 3 */\nfunction hsl2rgb(h, m1, m2) {\n  return (h < 60 ? m1 + (m2 - m1) * h / 60\n      : h < 180 ? m2\n      : h < 240 ? m1 + (m2 - m1) * (240 - h) / 60\n      : m1) * 255;\n}\n","export default x => () => x;\n","import constant from \"./constant.js\";\n\nfunction linear(a, d) {\n  return function(t) {\n    return a + t * d;\n  };\n}\n\nfunction exponential(a, b, y) {\n  return a = Math.pow(a, y), b = Math.pow(b, y) - a, y = 1 / y, function(t) {\n    return Math.pow(a + t * b, y);\n  };\n}\n\nexport function hue(a, b) {\n  var d = b - a;\n  return d ? linear(a, d > 180 || d < -180 ? d - 360 * Math.round(d / 360) : d) : constant(isNaN(a) ? b : a);\n}\n\nexport function gamma(y) {\n  return (y = +y) === 1 ? nogamma : function(a, b) {\n    return b - a ? exponential(a, b, y) : constant(isNaN(a) ? b : a);\n  };\n}\n\nexport default function nogamma(a, b) {\n  var d = b - a;\n  return d ? linear(a, d) : constant(isNaN(a) ? b : a);\n}\n","import {rgb as colorRgb} from \"d3-color\";\nimport basis from \"./basis.js\";\nimport basisClosed from \"./basisClosed.js\";\nimport nogamma, {gamma} from \"./color.js\";\n\nexport default (function rgbGamma(y) {\n  var color = gamma(y);\n\n  function rgb(start, end) {\n    var r = color((start = colorRgb(start)).r, (end = colorRgb(end)).r),\n        g = color(start.g, end.g),\n        b = color(start.b, end.b),\n        opacity = nogamma(start.opacity, end.opacity);\n    return function(t) {\n      start.r = r(t);\n      start.g = g(t);\n      start.b = b(t);\n      start.opacity = opacity(t);\n      return start + \"\";\n    };\n  }\n\n  rgb.gamma = rgbGamma;\n\n  return rgb;\n})(1);\n\nfunction rgbSpline(spline) {\n  return function(colors) {\n    var n = colors.length,\n        r = new Array(n),\n        g = new Array(n),\n        b = new Array(n),\n        i, color;\n    for (i = 0; i < n; ++i) {\n      color = colorRgb(colors[i]);\n      r[i] = color.r || 0;\n      g[i] = color.g || 0;\n      b[i] = color.b || 0;\n    }\n    r = spline(r);\n    g = spline(g);\n    b = spline(b);\n    color.opacity = 1;\n    return function(t) {\n      color.r = r(t);\n      color.g = g(t);\n      color.b = b(t);\n      return color + \"\";\n    };\n  };\n}\n\nexport var rgbBasis = rgbSpline(basis);\nexport var rgbBasisClosed = rgbSpline(basisClosed);\n","export default function(a, b) {\n  if (!b) b = [];\n  var n = a ? Math.min(b.length, a.length) : 0,\n      c = b.slice(),\n      i;\n  return function(t) {\n    for (i = 0; i < n; ++i) c[i] = a[i] * (1 - t) + b[i] * t;\n    return c;\n  };\n}\n\nexport function isNumberArray(x) {\n  return ArrayBuffer.isView(x) && !(x instanceof DataView);\n}\n","import value from \"./value.js\";\nimport numberArray, {isNumberArray} from \"./numberArray.js\";\n\nexport default function(a, b) {\n  return (isNumberArray(b) ? numberArray : genericArray)(a, b);\n}\n\nexport function genericArray(a, b) {\n  var nb = b ? b.length : 0,\n      na = a ? Math.min(nb, a.length) : 0,\n      x = new Array(na),\n      c = new Array(nb),\n      i;\n\n  for (i = 0; i < na; ++i) x[i] = value(a[i], b[i]);\n  for (; i < nb; ++i) c[i] = b[i];\n\n  return function(t) {\n    for (i = 0; i < na; ++i) c[i] = x[i](t);\n    return c;\n  };\n}\n","export default function(a, b) {\n  var d = new Date;\n  return a = +a, b = +b, function(t) {\n    return d.setTime(a * (1 - t) + b * t), d;\n  };\n}\n","export default function(a, b) {\n  return a = +a, b = +b, function(t) {\n    return a * (1 - t) + b * t;\n  };\n}\n","import value from \"./value.js\";\n\nexport default function(a, b) {\n  var i = {},\n      c = {},\n      k;\n\n  if (a === null || typeof a !== \"object\") a = {};\n  if (b === null || typeof b !== \"object\") b = {};\n\n  for (k in b) {\n    if (k in a) {\n      i[k] = value(a[k], b[k]);\n    } else {\n      c[k] = b[k];\n    }\n  }\n\n  return function(t) {\n    for (k in i) c[k] = i[k](t);\n    return c;\n  };\n}\n","import number from \"./number.js\";\n\nvar reA = /[-+]?(?:\\d+\\.?\\d*|\\.?\\d+)(?:[eE][-+]?\\d+)?/g,\n    reB = new RegExp(reA.source, \"g\");\n\nfunction zero(b) {\n  return function() {\n    return b;\n  };\n}\n\nfunction one(b) {\n  return function(t) {\n    return b(t) + \"\";\n  };\n}\n\nexport default function(a, b) {\n  var bi = reA.lastIndex = reB.lastIndex = 0, // scan index for next number in b\n      am, // current match in a\n      bm, // current match in b\n      bs, // string preceding current number in b, if any\n      i = -1, // index in s\n      s = [], // string constants and placeholders\n      q = []; // number interpolators\n\n  // Coerce inputs to strings.\n  a = a + \"\", b = b + \"\";\n\n  // Interpolate pairs of numbers in a & b.\n  while ((am = reA.exec(a))\n      && (bm = reB.exec(b))) {\n    if ((bs = bm.index) > bi) { // a string precedes the next number in b\n      bs = b.slice(bi, bs);\n      if (s[i]) s[i] += bs; // coalesce with previous string\n      else s[++i] = bs;\n    }\n    if ((am = am[0]) === (bm = bm[0])) { // numbers in a & b match\n      if (s[i]) s[i] += bm; // coalesce with previous string\n      else s[++i] = bm;\n    } else { // interpolate non-matching numbers\n      s[++i] = null;\n      q.push({i: i, x: number(am, bm)});\n    }\n    bi = reB.lastIndex;\n  }\n\n  // Add remains of b.\n  if (bi < b.length) {\n    bs = b.slice(bi);\n    if (s[i]) s[i] += bs; // coalesce with previous string\n    else s[++i] = bs;\n  }\n\n  // Special optimization for only a single match.\n  // Otherwise, interpolate each of the numbers and rejoin the string.\n  return s.length < 2 ? (q[0]\n      ? one(q[0].x)\n      : zero(b))\n      : (b = q.length, function(t) {\n          for (var i = 0, o; i < b; ++i) s[(o = q[i]).i] = o.x(t);\n          return s.join(\"\");\n        });\n}\n","import {color} from \"d3-color\";\nimport rgb from \"./rgb.js\";\nimport {genericArray} from \"./array.js\";\nimport date from \"./date.js\";\nimport number from \"./number.js\";\nimport object from \"./object.js\";\nimport string from \"./string.js\";\nimport constant from \"./constant.js\";\nimport numberArray, {isNumberArray} from \"./numberArray.js\";\n\nexport default function(a, b) {\n  var t = typeof b, c;\n  return b == null || t === \"boolean\" ? constant(b)\n      : (t === \"number\" ? number\n      : t === \"string\" ? ((c = color(b)) ? (b = c, rgb) : string)\n      : b instanceof color ? rgb\n      : b instanceof Date ? date\n      : isNumberArray(b) ? numberArray\n      : Array.isArray(b) ? genericArray\n      : typeof b.valueOf !== \"function\" && typeof b.toString !== \"function\" || isNaN(b) ? object\n      : number)(a, b);\n}\n","export function quadIn(t) {\n  return t * t;\n}\n\nexport function quadOut(t) {\n  return t * (2 - t);\n}\n\nexport function quadInOut(t) {\n  return ((t *= 2) <= 1 ? t * t : --t * (2 - t) + 1) / 2;\n}\n","export function cubicIn(t) {\n  return t * t * t;\n}\n\nexport function cubicOut(t) {\n  return --t * t * t + 1;\n}\n\nexport function cubicInOut(t) {\n  return ((t *= 2) <= 1 ? t * t * t : (t -= 2) * t * t + 2) / 2;\n}\n","var exponent = 3;\n\nexport var polyIn = (function custom(e) {\n  e = +e;\n\n  function polyIn(t) {\n    return Math.pow(t, e);\n  }\n\n  polyIn.exponent = custom;\n\n  return polyIn;\n})(exponent);\n\nexport var polyOut = (function custom(e) {\n  e = +e;\n\n  function polyOut(t) {\n    return 1 - Math.pow(1 - t, e);\n  }\n\n  polyOut.exponent = custom;\n\n  return polyOut;\n})(exponent);\n\nexport var polyInOut = (function custom(e) {\n  e = +e;\n\n  function polyInOut(t) {\n    return ((t *= 2) <= 1 ? Math.pow(t, e) : 2 - Math.pow(2 - t, e)) / 2;\n  }\n\n  polyInOut.exponent = custom;\n\n  return polyInOut;\n})(exponent);\n","var pi = Math.PI,\n    halfPi = pi / 2;\n\nexport function sinIn(t) {\n  return (+t === 1) ? 1 : 1 - Math.cos(t * halfPi);\n}\n\nexport function sinOut(t) {\n  return Math.sin(t * halfPi);\n}\n\nexport function sinInOut(t) {\n  return (1 - Math.cos(pi * t)) / 2;\n}\n","// tpmt is two power minus ten times t scaled to [0,1]\nexport function tpmt(x) {\n  return (Math.pow(2, -10 * x) - 0.0009765625) * 1.0009775171065494;\n}\n","import {tpmt} from \"./math.js\";\n\nexport function expIn(t) {\n  return tpmt(1 - +t);\n}\n\nexport function expOut(t) {\n  return 1 - tpmt(t);\n}\n\nexport function expInOut(t) {\n  return ((t *= 2) <= 1 ? tpmt(1 - t) : 2 - tpmt(t - 1)) / 2;\n}\n","export function circleIn(t) {\n  return 1 - Math.sqrt(1 - t * t);\n}\n\nexport function circleOut(t) {\n  return Math.sqrt(1 - --t * t);\n}\n\nexport function circleInOut(t) {\n  return ((t *= 2) <= 1 ? 1 - Math.sqrt(1 - t * t) : Math.sqrt(1 - (t -= 2) * t) + 1) / 2;\n}\n","var b1 = 4 / 11,\n    b2 = 6 / 11,\n    b3 = 8 / 11,\n    b4 = 3 / 4,\n    b5 = 9 / 11,\n    b6 = 10 / 11,\n    b7 = 15 / 16,\n    b8 = 21 / 22,\n    b9 = 63 / 64,\n    b0 = 1 / b1 / b1;\n\nexport function bounceIn(t) {\n  return 1 - bounceOut(1 - t);\n}\n\nexport function bounceOut(t) {\n  return (t = +t) < b1 ? b0 * t * t : t < b3 ? b0 * (t -= b2) * t + b4 : t < b6 ? b0 * (t -= b5) * t + b7 : b0 * (t -= b8) * t + b9;\n}\n\nexport function bounceInOut(t) {\n  return ((t *= 2) <= 1 ? 1 - bounceOut(1 - t) : bounceOut(t - 1) + 1) / 2;\n}\n","var overshoot = 1.70158;\n\nexport var backIn = (function custom(s) {\n  s = +s;\n\n  function backIn(t) {\n    return (t = +t) * t * (s * (t - 1) + t);\n  }\n\n  backIn.overshoot = custom;\n\n  return backIn;\n})(overshoot);\n\nexport var backOut = (function custom(s) {\n  s = +s;\n\n  function backOut(t) {\n    return --t * t * ((t + 1) * s + t) + 1;\n  }\n\n  backOut.overshoot = custom;\n\n  return backOut;\n})(overshoot);\n\nexport var backInOut = (function custom(s) {\n  s = +s;\n\n  function backInOut(t) {\n    return ((t *= 2) < 1 ? t * t * ((s + 1) * t - s) : (t -= 2) * t * ((s + 1) * t + s) + 2) / 2;\n  }\n\n  backInOut.overshoot = custom;\n\n  return backInOut;\n})(overshoot);\n","import {tpmt} from \"./math.js\";\n\nvar tau = 2 * Math.PI,\n    amplitude = 1,\n    period = 0.3;\n\nexport var elasticIn = (function custom(a, p) {\n  var s = Math.asin(1 / (a = Math.max(1, a))) * (p /= tau);\n\n  function elasticIn(t) {\n    return a * tpmt(-(--t)) * Math.sin((s - t) / p);\n  }\n\n  elasticIn.amplitude = function(a) { return custom(a, p * tau); };\n  elasticIn.period = function(p) { return custom(a, p); };\n\n  return elasticIn;\n})(amplitude, period);\n\nexport var elasticOut = (function custom(a, p) {\n  var s = Math.asin(1 / (a = Math.max(1, a))) * (p /= tau);\n\n  function elasticOut(t) {\n    return 1 - a * tpmt(t = +t) * Math.sin((t + s) / p);\n  }\n\n  elasticOut.amplitude = function(a) { return custom(a, p * tau); };\n  elasticOut.period = function(p) { return custom(a, p); };\n\n  return elasticOut;\n})(amplitude, period);\n\nexport var elasticInOut = (function custom(a, p) {\n  var s = Math.asin(1 / (a = Math.max(1, a))) * (p /= tau);\n\n  function elasticInOut(t) {\n    return ((t = t * 2 - 1) < 0\n        ? a * tpmt(-t) * Math.sin((s - t) / p)\n        : 2 - a * tpmt(t) * Math.sin((s + t) / p)) / 2;\n  }\n\n  elasticInOut.amplitude = function(a) { return custom(a, p * tau); };\n  elasticInOut.period = function(p) { return custom(a, p); };\n\n  return elasticInOut;\n})(amplitude, period);\n","export function linear(t) {\n  return +t;\n}\n","import * as d3Ease from 'd3-ease';\nvar EASING_MAP = {};\n/**\n * 根据名称获取对应的动画缓动函数\n * @param type 动画缓动函数名称\n */\nexport function getEasing(type) {\n    // 默认从 d3-ease 中获取\n    return EASING_MAP[type.toLowerCase()] || d3Ease[type];\n}\n/**\n * 注册动画缓动函数\n * @param type 动画缓动函数名称\n * @param easeFn 动画缓动函数\n */\nexport function registerEasing(type, easeFn) {\n    EASING_MAP[type.toLowerCase()] = easeFn;\n}\n//# sourceMappingURL=register.js.map","export var isColorProp = function (prop) { return ['fill', 'stroke', 'fillStyle', 'strokeStyle'].includes(prop); };\nexport var isGradientColor = function (val) { return /^[r,R,L,l]{1}[\\s]*\\(/.test(val); };\n//# sourceMappingURL=color.js.map","import { isEqual, isNumber, isFunction } from '@antv/util';\nimport * as d3Timer from 'd3-timer';\nimport { interpolate, interpolateArray } from 'd3-interpolate'; // 目前整体动画只需要数值和数组的差值计算\nimport { getEasing } from './register';\nimport * as PathUtil from '../util/path';\nimport { isColorProp, isGradientColor } from '../util/color';\nvar IDENTITY_MATRIX = [1, 0, 0, 0, 1, 0, 0, 0, 1];\n/**\n * 使用 ratio 进行插值计算来更新属性\n * @param {IElement}  shape    元素\n * @param {Animation} animation 动画\n * @param {number}    ratio    比例\n * @return {boolean}  动画是否执行完成\n */\nfunction _update(shape, animation, ratio) {\n    var cProps = {}; // 此刻属性\n    var fromAttrs = animation.fromAttrs, toAttrs = animation.toAttrs;\n    if (shape.destroyed) {\n        return;\n    }\n    var interf; //  差值函数\n    for (var k in toAttrs) {\n        if (!isEqual(fromAttrs[k], toAttrs[k])) {\n            if (k === 'path') {\n                var toPath = toAttrs[k];\n                var fromPath = fromAttrs[k];\n                if (toPath.length > fromPath.length) {\n                    toPath = PathUtil.parsePathString(toAttrs[k]); // 终点状态\n                    fromPath = PathUtil.parsePathString(fromAttrs[k]); // 起始状态\n                    fromPath = PathUtil.fillPathByDiff(fromPath, toPath);\n                    fromPath = PathUtil.formatPath(fromPath, toPath);\n                    animation.fromAttrs.path = fromPath;\n                    animation.toAttrs.path = toPath;\n                }\n                else if (!animation.pathFormatted) {\n                    toPath = PathUtil.parsePathString(toAttrs[k]);\n                    fromPath = PathUtil.parsePathString(fromAttrs[k]);\n                    fromPath = PathUtil.formatPath(fromPath, toPath);\n                    animation.fromAttrs.path = fromPath;\n                    animation.toAttrs.path = toPath;\n                    animation.pathFormatted = true;\n                }\n                cProps[k] = [];\n                for (var i = 0; i < toPath.length; i++) {\n                    var toPathPoint = toPath[i];\n                    var fromPathPoint = fromPath[i];\n                    var cPathPoint = [];\n                    for (var j = 0; j < toPathPoint.length; j++) {\n                        if (isNumber(toPathPoint[j]) && fromPathPoint && isNumber(fromPathPoint[j])) {\n                            interf = interpolate(fromPathPoint[j], toPathPoint[j]);\n                            cPathPoint.push(interf(ratio));\n                        }\n                        else {\n                            cPathPoint.push(toPathPoint[j]);\n                        }\n                    }\n                    cProps[k].push(cPathPoint);\n                }\n            }\n            else if (k === 'matrix') {\n                /*\n                 对矩阵进行插值时，需要保证矩阵不为空，为空则使用单位矩阵\n                 TODO: 二维和三维场景下单位矩阵不同，之后 WebGL 版需要做进一步处理\n                 */\n                var matrixFn = interpolateArray(fromAttrs[k] || IDENTITY_MATRIX, toAttrs[k] || IDENTITY_MATRIX);\n                var currentMatrix = matrixFn(ratio);\n                cProps[k] = currentMatrix;\n            }\n            else if (isColorProp(k) && isGradientColor(toAttrs[k])) {\n                cProps[k] = toAttrs[k];\n            }\n            else if (!isFunction(toAttrs[k])) {\n                // 非函数类型的值才能做插值\n                interf = interpolate(fromAttrs[k], toAttrs[k]);\n                cProps[k] = interf(ratio);\n            }\n        }\n    }\n    shape.attr(cProps);\n}\n/**\n * 根据自定义帧动画函数 onFrame 来更新属性\n * @param {IElement}  shape    元素\n * @param {Animation} animation 动画\n * @param {number}    elapsed  动画执行时间(毫秒)\n * @return {boolean}  动画是否执行完成\n */\nfunction update(shape, animation, elapsed) {\n    var startTime = animation.startTime, delay = animation.delay;\n    // 如果还没有开始执行或暂停，先不更新\n    if (elapsed < startTime + delay || animation._paused) {\n        return false;\n    }\n    var ratio;\n    var duration = animation.duration;\n    var easing = animation.easing;\n    var easeFn = getEasing(easing);\n    // 已执行时间\n    elapsed = elapsed - startTime - animation.delay;\n    if (animation.repeat) {\n        // 如果动画重复执行，则 elapsed > duration，计算 ratio 时需取模\n        ratio = (elapsed % duration) / duration;\n        ratio = easeFn(ratio);\n    }\n    else {\n        ratio = elapsed / duration;\n        if (ratio < 1) {\n            // 动画未执行完\n            ratio = easeFn(ratio);\n        }\n        else {\n            // 动画已执行完\n            if (animation.onFrame) {\n                shape.attr(animation.onFrame(1));\n            }\n            else {\n                shape.attr(animation.toAttrs);\n            }\n            return true;\n        }\n    }\n    if (animation.onFrame) {\n        var attrs = animation.onFrame(ratio);\n        shape.attr(attrs);\n    }\n    else {\n        _update(shape, animation, ratio);\n    }\n    return false;\n}\nvar Timeline = /** @class */ (function () {\n    /**\n     * 时间轴构造函数，依赖于画布\n     * @param {}\n     */\n    function Timeline(canvas) {\n        /**\n         * 执行动画的元素列表\n         * @type {IElement[]}\n         */\n        this.animators = [];\n        /**\n         * 当前时间\n         * @type {number}\n         */\n        this.current = 0;\n        /**\n         * 定时器\n         * @type {d3Timer.Timer}\n         */\n        this.timer = null;\n        this.canvas = canvas;\n    }\n    /**\n     * 初始化定时器\n     */\n    Timeline.prototype.initTimer = function () {\n        var _this = this;\n        var isFinished = false;\n        var shape;\n        var animations;\n        var animation;\n        this.timer = d3Timer.timer(function (elapsed) {\n            _this.current = elapsed;\n            if (_this.animators.length > 0) {\n                for (var i = _this.animators.length - 1; i >= 0; i--) {\n                    shape = _this.animators[i];\n                    if (shape.destroyed) {\n                        // 如果已经被销毁，直接移出队列\n                        _this.removeAnimator(i);\n                        continue;\n                    }\n                    if (!shape.isAnimatePaused()) {\n                        animations = shape.get('animations');\n                        for (var j = animations.length - 1; j >= 0; j--) {\n                            animation = animations[j];\n                            isFinished = update(shape, animation, elapsed);\n                            if (isFinished) {\n                                animations.splice(j, 1);\n                                isFinished = false;\n                                if (animation.callback) {\n                                    animation.callback();\n                                }\n                            }\n                        }\n                    }\n                    if (animations.length === 0) {\n                        _this.removeAnimator(i);\n                    }\n                }\n                var autoDraw = _this.canvas.get('autoDraw');\n                // 非自动渲染模式下，手动调用 canvas.draw() 重新渲染\n                if (!autoDraw) {\n                    _this.canvas.draw();\n                }\n            }\n        });\n    };\n    /**\n     * 增加动画元素\n     */\n    Timeline.prototype.addAnimator = function (shape) {\n        this.animators.push(shape);\n    };\n    /**\n     * 移除动画元素\n     */\n    Timeline.prototype.removeAnimator = function (index) {\n        this.animators.splice(index, 1);\n    };\n    /**\n     * 是否有动画在执行\n     */\n    Timeline.prototype.isAnimating = function () {\n        return !!this.animators.length;\n    };\n    /**\n     * 停止定时器\n     */\n    Timeline.prototype.stop = function () {\n        if (this.timer) {\n            this.timer.stop();\n        }\n    };\n    /**\n     * 停止时间轴上所有元素的动画，并置空动画元素列表\n     * @param {boolean} toEnd 是否到动画的最终状态，用来透传给动画元素的 stopAnimate 方法\n     */\n    Timeline.prototype.stopAllAnimations = function (toEnd) {\n        if (toEnd === void 0) { toEnd = true; }\n        this.animators.forEach(function (animator) {\n            animator.stopAnimate(toEnd);\n        });\n        this.animators = [];\n        this.canvas.draw();\n    };\n    /**\n     * 获取当前时间\n     */\n    Timeline.prototype.getTime = function () {\n        return this.current;\n    };\n    return Timeline;\n}());\nexport default Timeline;\n//# sourceMappingURL=timeline.js.map","/**\n * @fileoverview 事件处理器\n * @author dxq613@gmail.com\n */\nimport GraphEvent from './graph-event';\nimport { each, isParent } from '../util/util';\nvar CLICK_OFFSET = 40;\nvar LEFT_BTN_CODE = 0;\nvar DELEGATION_SPLIT = ':';\nvar EVENTS = [\n    'mousedown',\n    'mouseup',\n    'dblclick',\n    'mouseout',\n    'mouseover',\n    'mousemove',\n    'mouseleave',\n    'mouseenter',\n    'touchstart',\n    'touchmove',\n    'touchend',\n    'dragenter',\n    'dragover',\n    'dragleave',\n    'drop',\n    'contextmenu',\n    'mousewheel',\n];\n// 是否有委托事件监听\nfunction hasDelegation(events, type) {\n    for (var key in events) {\n        if (events.hasOwnProperty(key) && key.indexOf(DELEGATION_SPLIT + type) >= 0) {\n            return true;\n        }\n    }\n    return false;\n}\n// 触发目标事件，目标只能是 shape 或 canvas\nfunction emitTargetEvent(target, type, eventObj) {\n    eventObj.name = type;\n    eventObj.target = target;\n    eventObj.currentTarget = target;\n    eventObj.delegateTarget = target;\n    target.emit(type, eventObj);\n}\n// 事件冒泡, enter 和 leave 需要对 fromShape 和 toShape 进行判同\nfunction bubbleEvent(container, type, eventObj) {\n    if (eventObj.bubbles) {\n        var relativeShape = void 0;\n        var isOverEvent = false;\n        if (type === 'mouseenter') {\n            relativeShape = eventObj.fromShape;\n            isOverEvent = true;\n        }\n        else if (type === 'mouseleave') {\n            isOverEvent = true;\n            relativeShape = eventObj.toShape;\n        }\n        // canvas 上的 mouseenter， mouseleave 事件，仅当进入或者移出 canvas 时触发\n        if (container.isCanvas() && isOverEvent) {\n            return;\n        }\n        // 如果相关图形同当前图形在同一个容器内，不触发事件\n        if (relativeShape && isParent(container, relativeShape)) {\n            // 阻止继续向上冒泡\n            eventObj.bubbles = false;\n            return;\n        }\n        // 事件名称可能在委托过程中被修改，因此事件冒泡时需要重新设置事件名称\n        eventObj.name = type;\n        eventObj.currentTarget = container;\n        eventObj.delegateTarget = container;\n        container.emit(type, eventObj);\n    }\n}\nvar EventController = /** @class */ (function () {\n    function EventController(cfg) {\n        var _this = this;\n        // 正在被拖拽的图形\n        this.draggingShape = null;\n        this.dragging = false;\n        // 当前鼠标/touch所在位置的图形\n        this.currentShape = null;\n        this.mousedownShape = null;\n        this.mousedownPoint = null;\n        // 统一处理所有的回调\n        this._eventCallback = function (ev) {\n            var type = ev.type;\n            _this._triggerEvent(type, ev);\n        };\n        // 在 document 处理拖拽到画布外的事件，处理从图形上移除画布未被捕捉的问题\n        this._onDocumentMove = function (ev) {\n            var canvas = _this.canvas;\n            var el = canvas.get('el');\n            if (el !== ev.target) {\n                // 不在 canvas 上移动\n                if (_this.dragging || _this.currentShape) {\n                    var pointInfo = _this._getPointInfo(ev);\n                    // 还在拖拽过程中\n                    if (_this.dragging) {\n                        _this._emitEvent('drag', ev, pointInfo, _this.draggingShape);\n                    }\n                    // 说明从某个图形直接移动到了画布外面，\n                    // 修复了 mouseleave 的 bug 后不再出现这种情况\n                    // if (this.currentShape) {\n                    //   this._emitEvent('mouseleave', ev, pointInfo, this.currentShape, this.currentShape, null);\n                    //   this.currentShape = null;\n                    // }\n                }\n            }\n        };\n        // 在 document 上处理拖拽到外面，释放鼠标时触发 dragend\n        this._onDocumentMouseUp = function (ev) {\n            var canvas = _this.canvas;\n            var el = canvas.get('el');\n            if (el !== ev.target) {\n                // 不在 canvas 上移动\n                if (_this.dragging) {\n                    var pointInfo = _this._getPointInfo(ev);\n                    if (_this.draggingShape) {\n                        // 如果存在拖拽的图形，则也触发 drop 事件\n                        _this._emitEvent('drop', ev, pointInfo, null);\n                    }\n                    _this._emitEvent('dragend', ev, pointInfo, _this.draggingShape);\n                    _this._afterDrag(_this.draggingShape, pointInfo, ev);\n                }\n            }\n        };\n        this.canvas = cfg.canvas;\n    }\n    EventController.prototype.init = function () {\n        this._bindEvents();\n    };\n    // 注册事件\n    EventController.prototype._bindEvents = function () {\n        var _this = this;\n        var el = this.canvas.get('el');\n        each(EVENTS, function (eventName) {\n            el.addEventListener(eventName, _this._eventCallback);\n        });\n        if (document) {\n            // 处理移动到外面没有触发 shape mouse leave 的事件\n            // 处理拖拽到外部的问题\n            document.addEventListener('mousemove', this._onDocumentMove);\n            // 处理拖拽过程中在外部释放鼠标的问题\n            document.addEventListener('mouseup', this._onDocumentMouseUp);\n        }\n    };\n    // 清理事件\n    EventController.prototype._clearEvents = function () {\n        var _this = this;\n        var el = this.canvas.get('el');\n        each(EVENTS, function (eventName) {\n            el.removeEventListener(eventName, _this._eventCallback);\n        });\n        if (document) {\n            document.removeEventListener('mousemove', this._onDocumentMove);\n            document.removeEventListener('mouseup', this._onDocumentMouseUp);\n        }\n    };\n    EventController.prototype._getEventObj = function (type, event, point, target, fromShape, toShape) {\n        var eventObj = new GraphEvent(type, event);\n        eventObj.fromShape = fromShape;\n        eventObj.toShape = toShape;\n        eventObj.x = point.x;\n        eventObj.y = point.y;\n        eventObj.clientX = point.clientX;\n        eventObj.clientY = point.clientY;\n        eventObj.propagationPath.push(target);\n        // 事件的x,y应该是基于画布左上角的，与canvas的matrix无关\n        return eventObj;\n    };\n    // 根据点获取图形，提取成独立方法，便于后续优化\n    EventController.prototype._getShape = function (point, ev) {\n        return this.canvas.getShape(point.x, point.y, ev);\n    };\n    // 获取事件的当前点的信息\n    EventController.prototype._getPointInfo = function (ev) {\n        var canvas = this.canvas;\n        var clientPoint = canvas.getClientByEvent(ev);\n        var point = canvas.getPointByEvent(ev);\n        return {\n            x: point.x,\n            y: point.y,\n            clientX: clientPoint.x,\n            clientY: clientPoint.y,\n        };\n    };\n    // 触发事件\n    EventController.prototype._triggerEvent = function (type, ev) {\n        var pointInfo = this._getPointInfo(ev);\n        // 每次都获取图形有一定成本，后期可以考虑进行缓存策略\n        var shape = this._getShape(pointInfo, ev);\n        var method = this[\"_on\" + type];\n        var leaveCanvas = false;\n        if (method) {\n            method.call(this, pointInfo, shape, ev);\n        }\n        else {\n            var preShape = this.currentShape;\n            // 如果进入、移出画布时存在图形，则要分别触发事件\n            if (type === 'mouseenter' || type === 'dragenter' || type === 'mouseover') {\n                this._emitEvent(type, ev, pointInfo, null, null, shape); // 先进入画布\n                if (shape) {\n                    this._emitEvent(type, ev, pointInfo, shape, null, shape); // 再触发图形的事件\n                }\n                if (type === 'mouseenter' && this.draggingShape) {\n                    // 如果正在拖拽图形, 则触发 dragleave\n                    this._emitEvent('dragenter', ev, pointInfo, null);\n                }\n            }\n            else if (type === 'mouseleave' || type === 'dragleave' || type === 'mouseout') {\n                leaveCanvas = true;\n                if (preShape) {\n                    this._emitEvent(type, ev, pointInfo, preShape, preShape, null); // 先触发图形的事件\n                }\n                this._emitEvent(type, ev, pointInfo, null, preShape, null); // 再触发离开画布事件\n                if (type === 'mouseleave' && this.draggingShape) {\n                    this._emitEvent('dragleave', ev, pointInfo, null);\n                }\n            }\n            else {\n                this._emitEvent(type, ev, pointInfo, shape, null, null); // 一般事件中不需要考虑 from, to\n            }\n        }\n        if (!leaveCanvas) {\n            this.currentShape = shape;\n        }\n        // 当鼠标从画布移动到 shape 或者从 preShape 移动到 shape 时，应用 shape 上的鼠标样式\n        if (shape && !shape.get('destroyed')) {\n            var canvas = this.canvas;\n            var el = canvas.get('el');\n            el.style.cursor = shape.attr('cursor') || canvas.get('cursor');\n        }\n    };\n    // 记录下点击的位置、图形，便于拖拽事件、click 事件的判定\n    EventController.prototype._onmousedown = function (pointInfo, shape, event) {\n        // 只有鼠标左键的 mousedown 事件才会设置 mousedownShape 等属性，避免鼠标右键的 mousedown 事件引起其他事件发生\n        if (event.button === LEFT_BTN_CODE) {\n            this.mousedownShape = shape;\n            this.mousedownPoint = pointInfo;\n            this.mousedownTimeStamp = event.timeStamp;\n        }\n        this._emitEvent('mousedown', event, pointInfo, shape, null, null); // mousedown 不考虑fromShape, toShape\n    };\n    // mouseleave 和 mouseenter 都是成对存在的\n    // mouseenter 和 mouseover 同时触发\n    EventController.prototype._emitMouseoverEvents = function (event, pointInfo, fromShape, toShape) {\n        var el = this.canvas.get('el');\n        if (fromShape !== toShape) {\n            if (fromShape) {\n                this._emitEvent('mouseout', event, pointInfo, fromShape, fromShape, toShape);\n                this._emitEvent('mouseleave', event, pointInfo, fromShape, fromShape, toShape);\n                // 当鼠标从 fromShape 移动到画布上时，重置鼠标样式\n                if (!toShape || toShape.get('destroyed')) {\n                    el.style.cursor = this.canvas.get('cursor');\n                }\n            }\n            if (toShape) {\n                this._emitEvent('mouseover', event, pointInfo, toShape, fromShape, toShape);\n                this._emitEvent('mouseenter', event, pointInfo, toShape, fromShape, toShape);\n            }\n        }\n    };\n    // dragover 不等同于 mouseover，而等同于 mousemove\n    EventController.prototype._emitDragoverEvents = function (event, pointInfo, fromShape, toShape, isCanvasEmit) {\n        if (toShape) {\n            if (toShape !== fromShape) {\n                if (fromShape) {\n                    this._emitEvent('dragleave', event, pointInfo, fromShape, fromShape, toShape);\n                }\n                this._emitEvent('dragenter', event, pointInfo, toShape, fromShape, toShape);\n            }\n            if (!isCanvasEmit) {\n                this._emitEvent('dragover', event, pointInfo, toShape);\n            }\n        }\n        else if (fromShape) {\n            // TODO: 此处判断有问题，当 drag 图形时，也会触发一次 dragleave 事件，因为此时 toShape 为 null，这不是所期望的\n            // 经过空白区域\n            this._emitEvent('dragleave', event, pointInfo, fromShape, fromShape, toShape);\n        }\n        if (isCanvasEmit) {\n            this._emitEvent('dragover', event, pointInfo, toShape);\n        }\n    };\n    // drag 完成后，需要做一些清理工作\n    EventController.prototype._afterDrag = function (draggingShape, pointInfo, event) {\n        if (draggingShape) {\n            draggingShape.set('capture', true); // 恢复可以拾取\n            this.draggingShape = null;\n        }\n        this.dragging = false;\n        // drag 完成后，有可能 draggingShape 已经移动到了当前位置，所以不能直接取当前图形\n        var shape = this._getShape(pointInfo, event);\n        // 拖拽完成后，进行 enter，leave 的判定\n        if (shape !== draggingShape) {\n            this._emitMouseoverEvents(event, pointInfo, draggingShape, shape);\n        }\n        this.currentShape = shape; // 更新当前 shape，如果不处理当前图形的 mouseleave 事件可能会出问题\n    };\n    // 按键抬起时，会终止拖拽、触发点击\n    EventController.prototype._onmouseup = function (pointInfo, shape, event) {\n        // eevent.button === 0 表示鼠标左键事件，此处加上判断主要是为了避免右键鼠标会触发 mouseup 和 click 事件\n        // ref: https://developer.mozilla.org/en-US/docs/Web/API/MouseEvent/button\n        if (event.button === LEFT_BTN_CODE) {\n            var draggingShape = this.draggingShape;\n            if (this.dragging) {\n                // 存在可以拖拽的图形，同时拖拽到其他图形上时触发 drag 事件\n                if (draggingShape) {\n                    this._emitEvent('drop', event, pointInfo, shape);\n                }\n                this._emitEvent('dragend', event, pointInfo, draggingShape);\n                this._afterDrag(draggingShape, pointInfo, event);\n            }\n            else {\n                this._emitEvent('mouseup', event, pointInfo, shape); // 先触发 mouseup 再触发 click\n                if (shape === this.mousedownShape) {\n                    this._emitEvent('click', event, pointInfo, shape);\n                }\n                this.mousedownShape = null;\n                this.mousedownPoint = null;\n            }\n        }\n    };\n    // 当触发浏览器的 dragover 事件时，不会再触发 mousemove ，所以这时候的 dragenter, dragleave 事件需要重新处理\n    EventController.prototype._ondragover = function (pointInfo, shape, event) {\n        event.preventDefault(); // 如果不对 dragover 进行 preventDefault，则不会在 canvas 上触发 drop 事件\n        var preShape = this.currentShape;\n        this._emitDragoverEvents(event, pointInfo, preShape, shape, true);\n    };\n    // 大量的图形事件，都通过 mousemove 模拟\n    EventController.prototype._onmousemove = function (pointInfo, shape, event) {\n        var canvas = this.canvas;\n        var preShape = this.currentShape;\n        var draggingShape = this.draggingShape;\n        // 正在拖拽时\n        if (this.dragging) {\n            // 正在拖拽中\n            if (draggingShape) {\n                // 如果拖拽了 shape 会触发 dragenter, dragleave, dragover 和 drag 事件\n                this._emitDragoverEvents(event, pointInfo, preShape, shape, false);\n            }\n            // 如果存在 draggingShape 则会在 draggingShape 上触发 drag 事件，冒泡到 canvas 上\n            // 否则在 canvas 上触发 drag 事件\n            this._emitEvent('drag', event, pointInfo, draggingShape);\n        }\n        else {\n            var mousedownPoint = this.mousedownPoint;\n            if (mousedownPoint) {\n                // 当鼠标点击下去，同时移动时，进行 drag 判定\n                var mousedownShape = this.mousedownShape;\n                var now = event.timeStamp;\n                var timeWindow = now - this.mousedownTimeStamp;\n                var dx = mousedownPoint.clientX - pointInfo.clientX;\n                var dy = mousedownPoint.clientY - pointInfo.clientY;\n                var dist = dx * dx + dy * dy;\n                if (timeWindow > 120 || dist > CLICK_OFFSET) {\n                    if (mousedownShape && mousedownShape.get('draggable')) {\n                        // 设置了 draggable 的 shape 才能触发 drag 相关的事件\n                        draggingShape = this.mousedownShape; // 拖动鼠标点下时的 shape\n                        draggingShape.set('capture', false); // 禁止继续拾取，否则无法进行 dragover,dragenter,dragleave,drop的判定\n                        this.draggingShape = draggingShape;\n                        this.dragging = true;\n                        this._emitEvent('dragstart', event, pointInfo, draggingShape);\n                        // 清理按下鼠标时缓存的值\n                        this.mousedownShape = null;\n                        this.mousedownPoint = null;\n                    }\n                    else if (!mousedownShape && canvas.get('draggable')) {\n                        // 设置了 draggable 的 canvas 才能触发 drag 相关的事件\n                        this.dragging = true;\n                        this._emitEvent('dragstart', event, pointInfo, null);\n                        // 清理按下鼠标时缓存的值\n                        this.mousedownShape = null;\n                        this.mousedownPoint = null;\n                    }\n                    else {\n                        this._emitMouseoverEvents(event, pointInfo, preShape, shape);\n                        this._emitEvent('mousemove', event, pointInfo, shape);\n                    }\n                }\n                else {\n                    this._emitMouseoverEvents(event, pointInfo, preShape, shape);\n                    this._emitEvent('mousemove', event, pointInfo, shape);\n                }\n            }\n            else {\n                // 没有按键按下时，则直接触发 mouse over 相关的各种事件\n                this._emitMouseoverEvents(event, pointInfo, preShape, shape);\n                // 始终触发移动\n                this._emitEvent('mousemove', event, pointInfo, shape);\n            }\n        }\n    };\n    // 触发事件\n    EventController.prototype._emitEvent = function (type, event, pointInfo, shape, fromShape, toShape) {\n        var eventObj = this._getEventObj(type, event, pointInfo, shape, fromShape, toShape);\n        // 存在 shape 触发，则进行冒泡处理\n        if (shape) {\n            eventObj.shape = shape;\n            // 触发 shape 上的事件\n            emitTargetEvent(shape, type, eventObj);\n            var parent_1 = shape.getParent();\n            // 执行冒泡\n            while (parent_1) {\n                // 委托事件要先触发\n                parent_1.emitDelegation(type, eventObj);\n                // 事件冒泡停止，不能妨碍委托事件\n                if (!eventObj.propagationStopped) {\n                    bubbleEvent(parent_1, type, eventObj);\n                }\n                eventObj.propagationPath.push(parent_1);\n                parent_1 = parent_1.getParent();\n            }\n        }\n        else {\n            // 如果没有 shape 直接在 canvas 上触发\n            var canvas = this.canvas;\n            // 直接触发 canvas 上的事件\n            emitTargetEvent(canvas, type, eventObj);\n        }\n    };\n    EventController.prototype.destroy = function () {\n        // 清理事件\n        this._clearEvents();\n        // 清理缓存的对象\n        this.canvas = null;\n        this.currentShape = null;\n        this.draggingShape = null;\n        this.mousedownPoint = null;\n        this.mousedownShape = null;\n        this.mousedownTimeStamp = null;\n    };\n    return EventController;\n}());\nexport default EventController;\n//# sourceMappingURL=event-contoller.js.map","import { __extends } from \"tslib\";\nimport { detect } from 'detect-browser';\nimport Container from './container';\nimport { isBrowser, isNil, isString } from '../util/util';\nimport Timeline from '../animate/timeline';\nimport EventController from '../event/event-contoller';\nvar PX_SUFFIX = 'px';\nvar browser = detect();\nvar isFirefox = browser && browser.name === 'firefox';\nvar Canvas = /** @class */ (function (_super) {\n    __extends(Canvas, _super);\n    function Canvas(cfg) {\n        var _this = _super.call(this, cfg) || this;\n        _this.initContainer();\n        _this.initDom();\n        _this.initEvents();\n        _this.initTimeline();\n        return _this;\n    }\n    Canvas.prototype.getDefaultCfg = function () {\n        var cfg = _super.prototype.getDefaultCfg.call(this);\n        // set default cursor style for canvas\n        cfg['cursor'] = 'default';\n        // CSS transform 目前尚未经过长时间验证，为了避免影响上层业务，默认关闭，上层按需开启\n        cfg['supportCSSTransform'] = false;\n        return cfg;\n    };\n    /**\n     * @protected\n     * 初始化容器\n     */\n    Canvas.prototype.initContainer = function () {\n        var container = this.get('container');\n        if (isString(container)) {\n            container = document.getElementById(container);\n            this.set('container', container);\n        }\n    };\n    /**\n     * @protected\n     * 初始化 DOM\n     */\n    Canvas.prototype.initDom = function () {\n        var el = this.createDom();\n        this.set('el', el);\n        // 附加到容器\n        var container = this.get('container');\n        container.appendChild(el);\n        // 设置初始宽度\n        this.setDOMSize(this.get('width'), this.get('height'));\n    };\n    /**\n     * @protected\n     * 初始化绑定的事件\n     */\n    Canvas.prototype.initEvents = function () {\n        var eventController = new EventController({\n            canvas: this,\n        });\n        eventController.init();\n        this.set('eventController', eventController);\n    };\n    /**\n     * @protected\n     * 初始化时间轴\n     */\n    Canvas.prototype.initTimeline = function () {\n        var timeline = new Timeline(this);\n        this.set('timeline', timeline);\n    };\n    /**\n     * @protected\n     * 修改画布对应的 DOM 的大小\n     * @param {number} width  宽度\n     * @param {number} height 高度\n     */\n    Canvas.prototype.setDOMSize = function (width, height) {\n        var el = this.get('el');\n        if (isBrowser) {\n            el.style.width = width + PX_SUFFIX;\n            el.style.height = height + PX_SUFFIX;\n        }\n    };\n    // 实现接口\n    Canvas.prototype.changeSize = function (width, height) {\n        this.setDOMSize(width, height);\n        this.set('width', width);\n        this.set('height', height);\n        this.onCanvasChange('changeSize');\n    };\n    /**\n     * 获取当前的渲染引擎\n     * @return {Renderer} 返回当前的渲染引擎\n     */\n    Canvas.prototype.getRenderer = function () {\n        return this.get('renderer');\n    };\n    /**\n     * 获取画布的 cursor 样式\n     * @return {Cursor}\n     */\n    Canvas.prototype.getCursor = function () {\n        return this.get('cursor');\n    };\n    /**\n     * 设置画布的 cursor 样式\n     * @param {Cursor} cursor  cursor 样式\n     */\n    Canvas.prototype.setCursor = function (cursor) {\n        this.set('cursor', cursor);\n        var el = this.get('el');\n        if (isBrowser && el) {\n            // 直接设置样式，不等待鼠标移动时再设置\n            el.style.cursor = cursor;\n        }\n    };\n    // 实现接口\n    Canvas.prototype.getPointByEvent = function (ev) {\n        var supportCSSTransform = this.get('supportCSSTransform');\n        if (supportCSSTransform) {\n            // For Firefox <= 38\n            if (isFirefox && !isNil(ev.layerX) && ev.layerX !== ev.offsetX) {\n                return {\n                    x: ev.layerX,\n                    y: ev.layerY,\n                };\n            }\n            if (!isNil(ev.offsetX)) {\n                // For IE6+, Firefox >= 39, Chrome, Safari, Opera\n                return {\n                    x: ev.offsetX,\n                    y: ev.offsetY,\n                };\n            }\n        }\n        // should calculate by self for other cases, like Safari in ios\n        // TODO: support CSS transform\n        var _a = this.getClientByEvent(ev), clientX = _a.x, clientY = _a.y;\n        return this.getPointByClient(clientX, clientY);\n    };\n    // 获取 touch 事件的 clientX 和 clientY 需要单独处理\n    Canvas.prototype.getClientByEvent = function (ev) {\n        var clientInfo = ev;\n        if (ev.touches) {\n            if (ev.type === 'touchend') {\n                clientInfo = ev.changedTouches[0];\n            }\n            else {\n                clientInfo = ev.touches[0];\n            }\n        }\n        return {\n            x: clientInfo.clientX,\n            y: clientInfo.clientY,\n        };\n    };\n    // 实现接口\n    Canvas.prototype.getPointByClient = function (clientX, clientY) {\n        var el = this.get('el');\n        var bbox = el.getBoundingClientRect();\n        return {\n            x: clientX - bbox.left,\n            y: clientY - bbox.top,\n        };\n    };\n    // 实现接口\n    Canvas.prototype.getClientByPoint = function (x, y) {\n        var el = this.get('el');\n        var bbox = el.getBoundingClientRect();\n        return {\n            x: x + bbox.left,\n            y: y + bbox.top,\n        };\n    };\n    // 实现接口\n    Canvas.prototype.draw = function () { };\n    /**\n     * @protected\n     * 销毁 DOM 容器\n     */\n    Canvas.prototype.removeDom = function () {\n        var el = this.get('el');\n        el.parentNode.removeChild(el);\n    };\n    /**\n     * @protected\n     * 清理所有的事件\n     */\n    Canvas.prototype.clearEvents = function () {\n        var eventController = this.get('eventController');\n        eventController.destroy();\n    };\n    Canvas.prototype.isCanvas = function () {\n        return true;\n    };\n    Canvas.prototype.getParent = function () {\n        return null;\n    };\n    Canvas.prototype.destroy = function () {\n        var timeline = this.get('timeline');\n        if (this.get('destroyed')) {\n            return;\n        }\n        this.clear();\n        // 同初始化时相反顺序调用\n        if (timeline) {\n            // 画布销毁时自动停止动画\n            timeline.stop();\n        }\n        this.clearEvents();\n        this.removeDom();\n        _super.prototype.destroy.call(this);\n    };\n    return Canvas;\n}(Container));\nexport default Canvas;\n//# sourceMappingURL=canvas.js.map","import { __extends } from \"tslib\";\nimport Container from './container';\nvar AbstractGroup = /** @class */ (function (_super) {\n    __extends(AbstractGroup, _super);\n    function AbstractGroup() {\n        return _super !== null && _super.apply(this, arguments) || this;\n    }\n    AbstractGroup.prototype.isGroup = function () {\n        return true;\n    };\n    AbstractGroup.prototype.isEntityGroup = function () {\n        return false;\n    };\n    AbstractGroup.prototype.clone = function () {\n        var clone = _super.prototype.clone.call(this);\n        // 获取构造函数\n        var children = this.getChildren();\n        for (var i = 0; i < children.length; i++) {\n            var child = children[i];\n            clone.add(child.clone());\n        }\n        return clone;\n    };\n    return AbstractGroup;\n}(Container));\nexport default AbstractGroup;\n//# sourceMappingURL=group.js.map","import { __extends } from \"tslib\";\nimport Element from './element';\nimport { multiplyVec2 } from '../util/matrix';\nvar AbstractShape = /** @class */ (function (_super) {\n    __extends(AbstractShape, _super);\n    function AbstractShape(cfg) {\n        return _super.call(this, cfg) || this;\n    }\n    // 是否在包围盒内\n    AbstractShape.prototype._isInBBox = function (refX, refY) {\n        var bbox = this.getBBox();\n        return bbox.minX <= refX && bbox.maxX >= refX && bbox.minY <= refY && bbox.maxY >= refY;\n    };\n    /**\n     * 属性更改后需要做的事情\n     * @protected\n     * @param {ShapeAttrs} targetAttrs 渲染的图像属性\n     */\n    AbstractShape.prototype.afterAttrsChange = function (targetAttrs) {\n        _super.prototype.afterAttrsChange.call(this, targetAttrs);\n        this.clearCacheBBox();\n    };\n    // 计算包围盒时，需要缓存，这是一个高频的操作\n    AbstractShape.prototype.getBBox = function () {\n        var bbox = this.cfg.bbox;\n        if (!bbox) {\n            bbox = this.calculateBBox();\n            this.set('bbox', bbox);\n        }\n        return bbox;\n    };\n    // 计算相对于画布的包围盒\n    AbstractShape.prototype.getCanvasBBox = function () {\n        var canvasBBox = this.cfg.canvasBBox;\n        if (!canvasBBox) {\n            canvasBBox = this.calculateCanvasBBox();\n            this.set('canvasBBox', canvasBBox);\n        }\n        return canvasBBox;\n    };\n    AbstractShape.prototype.applyMatrix = function (matrix) {\n        _super.prototype.applyMatrix.call(this, matrix);\n        // 清理掉缓存的包围盒\n        this.set('canvasBBox', null);\n    };\n    /**\n     * 计算相对于画布的包围盒，默认等同于 bbox\n     * @return {BBox} 包围盒\n     */\n    AbstractShape.prototype.calculateCanvasBBox = function () {\n        var bbox = this.getBBox();\n        var totalMatrix = this.getTotalMatrix();\n        var minX = bbox.minX, minY = bbox.minY, maxX = bbox.maxX, maxY = bbox.maxY;\n        if (totalMatrix) {\n            var topLeft = multiplyVec2(totalMatrix, [bbox.minX, bbox.minY]);\n            var topRight = multiplyVec2(totalMatrix, [bbox.maxX, bbox.minY]);\n            var bottomLeft = multiplyVec2(totalMatrix, [bbox.minX, bbox.maxY]);\n            var bottomRight = multiplyVec2(totalMatrix, [bbox.maxX, bbox.maxY]);\n            minX = Math.min(topLeft[0], topRight[0], bottomLeft[0], bottomRight[0]);\n            maxX = Math.max(topLeft[0], topRight[0], bottomLeft[0], bottomRight[0]);\n            minY = Math.min(topLeft[1], topRight[1], bottomLeft[1], bottomRight[1]);\n            maxY = Math.max(topLeft[1], topRight[1], bottomLeft[1], bottomRight[1]);\n        }\n        var attrs = this.attrs;\n        // 如果存在 shadow 则计算 shadow\n        if (attrs.shadowColor) {\n            var _a = attrs.shadowBlur, shadowBlur = _a === void 0 ? 0 : _a, _b = attrs.shadowOffsetX, shadowOffsetX = _b === void 0 ? 0 : _b, _c = attrs.shadowOffsetY, shadowOffsetY = _c === void 0 ? 0 : _c;\n            var shadowLeft = minX - shadowBlur + shadowOffsetX;\n            var shadowRight = maxX + shadowBlur + shadowOffsetX;\n            var shadowTop = minY - shadowBlur + shadowOffsetY;\n            var shadowBottom = maxY + shadowBlur + shadowOffsetY;\n            minX = Math.min(minX, shadowLeft);\n            maxX = Math.max(maxX, shadowRight);\n            minY = Math.min(minY, shadowTop);\n            maxY = Math.max(maxY, shadowBottom);\n        }\n        return {\n            x: minX,\n            y: minY,\n            minX: minX,\n            minY: minY,\n            maxX: maxX,\n            maxY: maxY,\n            width: maxX - minX,\n            height: maxY - minY,\n        };\n    };\n    /**\n     * @protected\n     * 清理缓存的 bbox\n     */\n    AbstractShape.prototype.clearCacheBBox = function () {\n        this.set('bbox', null);\n        this.set('canvasBBox', null);\n    };\n    // 实现接口\n    AbstractShape.prototype.isClipShape = function () {\n        return this.get('isClipShape');\n    };\n    /**\n     * @protected\n     * 不同的图形自己实现是否在图形内部的逻辑，要判断边和填充区域\n     * @param  {number}  refX 相对于图形的坐标 x\n     * @param  {number}  refY 相对于图形的坐标 Y\n     * @return {boolean} 点是否在图形内部\n     */\n    AbstractShape.prototype.isInShape = function (refX, refY) {\n        return false;\n    };\n    /**\n     * 是否仅仅使用 BBox 检测就可以判定拾取到图形\n     * 默认是 false，但是有些图形例如 image、marker 等都可直接使用 BBox 的检测而不需要使用图形拾取\n     * @return {Boolean} 仅仅使用 BBox 进行拾取\n     */\n    AbstractShape.prototype.isOnlyHitBox = function () {\n        return false;\n    };\n    // 不同的 Shape 各自实现\n    AbstractShape.prototype.isHit = function (x, y) {\n        var startArrowShape = this.get('startArrowShape');\n        var endArrowShape = this.get('endArrowShape');\n        var vec = [x, y, 1];\n        vec = this.invertFromMatrix(vec);\n        var refX = vec[0], refY = vec[1];\n        var inBBox = this._isInBBox(refX, refY);\n        // 跳过图形的拾取，在某些图形中可以省略一倍的检测成本\n        if (this.isOnlyHitBox()) {\n            return inBBox;\n        }\n        // 被裁减掉的和不在包围盒内的不进行计算\n        if (inBBox && !this.isClipped(refX, refY)) {\n            // 对图形进行拾取判断\n            if (this.isInShape(refX, refY)) {\n                return true;\n            }\n            // 对起始箭头进行拾取判断\n            if (startArrowShape && startArrowShape.isHit(refX, refY)) {\n                return true;\n            }\n            // 对结束箭头进行拾取判断\n            if (endArrowShape && endArrowShape.isHit(refX, refY)) {\n                return true;\n            }\n        }\n        return false;\n    };\n    return AbstractShape;\n}(Element));\nexport default AbstractShape;\n//# sourceMappingURL=shape.js.map","var cache = new Map();\n/**\n * 注册计算包围盒的算法\n * @param type 方法名\n * @param method 方法\n */\nexport function register(type, method) {\n    cache.set(type, method);\n}\n/**\n * 获取计算包围盒的算法\n * @param type 方法名\n */\nexport function getMethod(type) {\n    return cache.get(type);\n}\n//# sourceMappingURL=register.js.map","export default function (shape) {\n    var attrs = shape.attr();\n    var x = attrs.x, y = attrs.y, width = attrs.width, height = attrs.height;\n    return {\n        x: x,\n        y: y,\n        width: width,\n        height: height,\n    };\n}\n//# sourceMappingURL=rect.js.map","export default function (shape) {\n    var _a = shape.attr(), x = _a.x, y = _a.y, r = _a.r;\n    return {\n        x: x - r,\n        y: y - r,\n        width: r * 2,\n        height: r * 2,\n    };\n}\n//# sourceMappingURL=circle.js.map","import { max, min } from '@antv/util';\n/**\n * 两点之间的距离\n * @param {number} x1 起始点 x\n * @param {number} y1 起始点 y\n * @param {number} x2 结束点 x\n * @param {number} y2 结束点 y\n * @return {number} 距离\n */\nexport function distance(x1, y1, x2, y2) {\n    var dx = x1 - x2;\n    var dy = y1 - y2;\n    return Math.sqrt(dx * dx + dy * dy);\n}\nexport function isNumberEqual(v1, v2) {\n    return Math.abs(v1 - v2) < 0.001;\n}\nexport function getBBoxByArray(xArr, yArr) {\n    var minX = min(xArr);\n    var minY = min(yArr);\n    var maxX = max(xArr);\n    var maxY = max(yArr);\n    return {\n        x: minX,\n        y: minY,\n        width: maxX - minX,\n        height: maxY - minY,\n    };\n}\nexport function getBBoxRange(x1, y1, x2, y2) {\n    return {\n        minX: min([x1, x2]),\n        maxX: max([x1, x2]),\n        minY: min([y1, y2]),\n        maxY: max([y1, y2]),\n    };\n}\nexport function piMod(angle) {\n    return (angle + Math.PI * 2) % (Math.PI * 2);\n}\n//# sourceMappingURL=util.js.map","import line from './line';\nimport { distance, isNumberEqual, getBBoxByArray, piMod } from './util';\nimport { nearestPoint } from './bezier';\n// 差值公式\nfunction quadraticAt(p0, p1, p2, t) {\n    var onet = 1 - t;\n    return onet * onet * p0 + 2 * t * onet * p1 + t * t * p2;\n}\n// 求极值\nfunction extrema(p0, p1, p2) {\n    var a = p0 + p2 - 2 * p1;\n    if (isNumberEqual(a, 0)) {\n        return [0.5];\n    }\n    var rst = (p0 - p1) / a;\n    if (rst <= 1 && rst >= 0) {\n        return [rst];\n    }\n    return [];\n}\nfunction derivativeAt(p0, p1, p2, t) {\n    return 2 * (1 - t) * (p1 - p0) + 2 * t * (p2 - p1);\n}\n// 分割贝塞尔曲线\nfunction divideQuadratic(x1, y1, x2, y2, x3, y3, t) {\n    // 划分点\n    var xt = quadraticAt(x1, x2, x3, t);\n    var yt = quadraticAt(y1, y2, y3, t);\n    // 分割的第一条曲线的控制点\n    var controlPoint1 = line.pointAt(x1, y1, x2, y2, t);\n    // 分割的第二条曲线的控制点\n    var controlPoint2 = line.pointAt(x2, y2, x3, y3, t);\n    return [\n        [x1, y1, controlPoint1.x, controlPoint1.y, xt, yt],\n        [xt, yt, controlPoint2.x, controlPoint2.y, x3, y3],\n    ];\n}\n// 使用迭代法取贝塞尔曲线的长度\nfunction quadraticLength(x1, y1, x2, y2, x3, y3, iterationCount) {\n    if (iterationCount === 0) {\n        return (distance(x1, y1, x2, y2) + distance(x2, y2, x3, y3) + distance(x1, y1, x3, y3)) / 2;\n    }\n    var quadratics = divideQuadratic(x1, y1, x2, y2, x3, y3, 0.5);\n    var left = quadratics[0];\n    var right = quadratics[1];\n    left.push(iterationCount - 1);\n    right.push(iterationCount - 1);\n    return quadraticLength.apply(null, left) + quadraticLength.apply(null, right);\n}\nexport default {\n    box: function (x1, y1, x2, y2, x3, y3) {\n        var xExtrema = extrema(x1, x2, x3)[0];\n        var yExtrema = extrema(y1, y2, y3)[0];\n        // 控制点不加入 box 的计算\n        var xArr = [x1, x3];\n        var yArr = [y1, y3];\n        if (xExtrema !== undefined) {\n            xArr.push(quadraticAt(x1, x2, x3, xExtrema));\n        }\n        if (yExtrema !== undefined) {\n            yArr.push(quadraticAt(y1, y2, y3, yExtrema));\n        }\n        return getBBoxByArray(xArr, yArr);\n    },\n    length: function (x1, y1, x2, y2, x3, y3) {\n        return quadraticLength(x1, y1, x2, y2, x3, y3, 3);\n    },\n    nearestPoint: function (x1, y1, x2, y2, x3, y3, x0, y0) {\n        return nearestPoint([x1, x2, x3], [y1, y2, y3], x0, y0, quadraticAt);\n    },\n    pointDistance: function (x1, y1, x2, y2, x3, y3, x0, y0) {\n        var point = this.nearestPoint(x1, y1, x2, y2, x3, y3, x0, y0);\n        return distance(point.x, point.y, x0, y0);\n    },\n    interpolationAt: quadraticAt,\n    pointAt: function (x1, y1, x2, y2, x3, y3, t) {\n        return {\n            x: quadraticAt(x1, x2, x3, t),\n            y: quadraticAt(y1, y2, y3, t),\n        };\n    },\n    divide: function (x1, y1, x2, y2, x3, y3, t) {\n        return divideQuadratic(x1, y1, x2, y2, x3, y3, t);\n    },\n    tangentAngle: function (x1, y1, x2, y2, x3, y3, t) {\n        var dx = derivativeAt(x1, x2, x3, t);\n        var dy = derivativeAt(y1, y2, y3, t);\n        var angle = Math.atan2(dy, dx);\n        return piMod(angle);\n    },\n};\n//# sourceMappingURL=quadratic.js.map","import { distance, isNumberEqual, getBBoxByArray, piMod } from './util';\nimport line from './line';\nimport { snapLength, nearestPoint } from './bezier';\nfunction cubicAt(p0, p1, p2, p3, t) {\n    var onet = 1 - t; // t * t * t 的性能大概是 Math.pow(t, 3) 的三倍\n    return onet * onet * onet * p0 + 3 * p1 * t * onet * onet + 3 * p2 * t * t * onet + p3 * t * t * t;\n}\nfunction derivativeAt(p0, p1, p2, p3, t) {\n    var onet = 1 - t;\n    return 3 * (onet * onet * (p1 - p0) + 2 * onet * t * (p2 - p1) + t * t * (p3 - p2));\n}\nfunction extrema(p0, p1, p2, p3) {\n    var a = -3 * p0 + 9 * p1 - 9 * p2 + 3 * p3;\n    var b = 6 * p0 - 12 * p1 + 6 * p2;\n    var c = 3 * p1 - 3 * p0;\n    var extremas = [];\n    var t1;\n    var t2;\n    var discSqrt;\n    if (isNumberEqual(a, 0)) {\n        if (!isNumberEqual(b, 0)) {\n            t1 = -c / b;\n            if (t1 >= 0 && t1 <= 1) {\n                extremas.push(t1);\n            }\n        }\n    }\n    else {\n        var disc = b * b - 4 * a * c;\n        if (isNumberEqual(disc, 0)) {\n            extremas.push(-b / (2 * a));\n        }\n        else if (disc > 0) {\n            discSqrt = Math.sqrt(disc);\n            t1 = (-b + discSqrt) / (2 * a);\n            t2 = (-b - discSqrt) / (2 * a);\n            if (t1 >= 0 && t1 <= 1) {\n                extremas.push(t1);\n            }\n            if (t2 >= 0 && t2 <= 1) {\n                extremas.push(t2);\n            }\n        }\n    }\n    return extremas;\n}\n// 分割贝塞尔曲线\nfunction divideCubic(x1, y1, x2, y2, x3, y3, x4, y4, t) {\n    // 划分点\n    var xt = cubicAt(x1, x2, x3, x4, t);\n    var yt = cubicAt(y1, y2, y3, y4, t);\n    // 计算两点之间的差值点\n    var c1 = line.pointAt(x1, y1, x2, y2, t);\n    var c2 = line.pointAt(x2, y2, x3, y3, t);\n    var c3 = line.pointAt(x3, y3, x4, y4, t);\n    var c12 = line.pointAt(c1.x, c1.y, c2.x, c2.y, t);\n    var c23 = line.pointAt(c2.x, c2.y, c3.x, c3.y, t);\n    return [\n        [x1, y1, c1.x, c1.y, c12.x, c12.y, xt, yt],\n        [xt, yt, c23.x, c23.y, c3.x, c3.y, x4, y4],\n    ];\n}\n// 使用迭代法取贝塞尔曲线的长度，二阶和三阶分开写，更清晰和便于调试\nfunction cubicLength(x1, y1, x2, y2, x3, y3, x4, y4, iterationCount) {\n    if (iterationCount === 0) {\n        return snapLength([x1, x2, x3, x4], [y1, y2, y3, y4]);\n    }\n    var cubics = divideCubic(x1, y1, x2, y2, x3, y3, x4, y4, 0.5);\n    var left = cubics[0];\n    var right = cubics[1];\n    left.push(iterationCount - 1);\n    right.push(iterationCount - 1);\n    return cubicLength.apply(null, left) + cubicLength.apply(null, right);\n}\nexport default {\n    extrema: extrema,\n    box: function (x1, y1, x2, y2, x3, y3, x4, y4) {\n        var xArr = [x1, x4];\n        var yArr = [y1, y4];\n        var xExtrema = extrema(x1, x2, x3, x4);\n        var yExtrema = extrema(y1, y2, y3, y4);\n        for (var i = 0; i < xExtrema.length; i++) {\n            xArr.push(cubicAt(x1, x2, x3, x4, xExtrema[i]));\n        }\n        for (var i = 0; i < yExtrema.length; i++) {\n            yArr.push(cubicAt(y1, y2, y3, y4, yExtrema[i]));\n        }\n        return getBBoxByArray(xArr, yArr);\n    },\n    length: function (x1, y1, x2, y2, x3, y3, x4, y4) {\n        // 迭代三次，划分成 8 段求长度\n        return cubicLength(x1, y1, x2, y2, x3, y3, x4, y4, 3);\n    },\n    nearestPoint: function (x1, y1, x2, y2, x3, y3, x4, y4, x0, y0, length) {\n        return nearestPoint([x1, x2, x3, x4], [y1, y2, y3, y4], x0, y0, cubicAt, length);\n    },\n    pointDistance: function (x1, y1, x2, y2, x3, y3, x4, y4, x0, y0, length) {\n        var point = this.nearestPoint(x1, y1, x2, y2, x3, y3, x4, y4, x0, y0, length);\n        return distance(point.x, point.y, x0, y0);\n    },\n    interpolationAt: cubicAt,\n    pointAt: function (x1, y1, x2, y2, x3, y3, x4, y4, t) {\n        return {\n            x: cubicAt(x1, x2, x3, x4, t),\n            y: cubicAt(y1, y2, y3, y4, t),\n        };\n    },\n    divide: function (x1, y1, x2, y2, x3, y3, x4, y4, t) {\n        return divideCubic(x1, y1, x2, y2, x3, y3, x4, y4, t);\n    },\n    tangentAngle: function (x1, y1, x2, y2, x3, y3, x4, y4, t) {\n        var dx = derivativeAt(x1, x2, x3, x4, t);\n        var dy = derivativeAt(y1, y2, y3, y4, t);\n        return piMod(Math.atan2(dy, dx));\n    },\n};\n//# sourceMappingURL=cubic.js.map","import { distance, piMod } from './util';\nimport ellipse from './ellipse';\n// 偏导数 x\nfunction derivativeXAt(cx, cy, rx, ry, xRotation, startAngle, endAngle, angle) {\n    return -1 * rx * Math.cos(xRotation) * Math.sin(angle) - ry * Math.sin(xRotation) * Math.cos(angle);\n}\n// 偏导数 y\nfunction derivativeYAt(cx, cy, rx, ry, xRotation, startAngle, endAngle, angle) {\n    return -1 * rx * Math.sin(xRotation) * Math.sin(angle) + ry * Math.cos(xRotation) * Math.cos(angle);\n}\n// x 的极值\nfunction xExtrema(rx, ry, xRotation) {\n    return Math.atan((-ry / rx) * Math.tan(xRotation));\n}\n// y 的极值\nfunction yExtrema(rx, ry, xRotation) {\n    return Math.atan(ry / (rx * Math.tan(xRotation)));\n}\n// 根据角度求 x 坐标\nfunction xAt(cx, cy, rx, ry, xRotation, angle) {\n    return rx * Math.cos(xRotation) * Math.cos(angle) - ry * Math.sin(xRotation) * Math.sin(angle) + cx;\n}\n// 根据角度求 y 坐标\nfunction yAt(cx, cy, rx, ry, xRotation, angle) {\n    return rx * Math.sin(xRotation) * Math.cos(angle) + ry * Math.cos(xRotation) * Math.sin(angle) + cy;\n}\n// 获取点在椭圆上的角度\nfunction getAngle(rx, ry, x0, y0) {\n    var angle = Math.atan2(y0 * rx, x0 * ry);\n    // 转换到 0 - 2PI 内\n    return (angle + Math.PI * 2) % (Math.PI * 2);\n}\n// 根据角度获取，x,y\nfunction getPoint(rx, ry, angle) {\n    return {\n        x: rx * Math.cos(angle),\n        y: ry * Math.sin(angle),\n    };\n}\n// 旋转\nfunction rotate(x, y, angle) {\n    var cos = Math.cos(angle);\n    var sin = Math.sin(angle);\n    return [x * cos - y * sin, x * sin + y * cos];\n}\nexport default {\n    /**\n     * 计算包围盒\n     * @param {number} cx         圆心 x\n     * @param {number} cy         圆心 y\n     * @param {number} rx         x 轴方向的半径\n     * @param {number} ry         y 轴方向的半径\n     * @param {number} xRotation  旋转角度\n     * @param {number} startAngle 起始角度\n     * @param {number} endAngle   结束角度\n     * @return {object} 包围盒对象\n     */\n    box: function (cx, cy, rx, ry, xRotation, startAngle, endAngle) {\n        var xDim = xExtrema(rx, ry, xRotation);\n        var minX = Infinity;\n        var maxX = -Infinity;\n        var xs = [startAngle, endAngle];\n        for (var i = -Math.PI * 2; i <= Math.PI * 2; i += Math.PI) {\n            var xAngle = xDim + i;\n            if (startAngle < endAngle) {\n                if (startAngle < xAngle && xAngle < endAngle) {\n                    xs.push(xAngle);\n                }\n            }\n            else {\n                if (endAngle < xAngle && xAngle < startAngle) {\n                    xs.push(xAngle);\n                }\n            }\n        }\n        for (var i = 0; i < xs.length; i++) {\n            var x = xAt(cx, cy, rx, ry, xRotation, xs[i]);\n            if (x < minX) {\n                minX = x;\n            }\n            if (x > maxX) {\n                maxX = x;\n            }\n        }\n        var yDim = yExtrema(rx, ry, xRotation);\n        var minY = Infinity;\n        var maxY = -Infinity;\n        var ys = [startAngle, endAngle];\n        for (var i = -Math.PI * 2; i <= Math.PI * 2; i += Math.PI) {\n            var yAngle = yDim + i;\n            if (startAngle < endAngle) {\n                if (startAngle < yAngle && yAngle < endAngle) {\n                    ys.push(yAngle);\n                }\n            }\n            else {\n                if (endAngle < yAngle && yAngle < startAngle) {\n                    ys.push(yAngle);\n                }\n            }\n        }\n        for (var i = 0; i < ys.length; i++) {\n            var y = yAt(cx, cy, rx, ry, xRotation, ys[i]);\n            if (y < minY) {\n                minY = y;\n            }\n            if (y > maxY) {\n                maxY = y;\n            }\n        }\n        return {\n            x: minX,\n            y: minY,\n            width: maxX - minX,\n            height: maxY - minY,\n        };\n    },\n    /**\n     * 获取圆弧的长度，计算圆弧长度时不考虑旋转角度，\n     * 仅跟 rx, ry, startAngle, endAngle 相关\n     * @param {number} cx         圆心 x\n     * @param {number} cy         圆心 y\n     * @param {number} rx         x 轴方向的半径\n     * @param {number} ry         y 轴方向的半径\n     * @param {number} xRotation  旋转角度\n     * @param {number} startAngle 起始角度\n     * @param {number} endAngle   结束角度\n     */\n    length: function (cx, cy, rx, ry, xRotation, startAngle, endAngle) { },\n    /**\n     * 获取指定点到圆弧的最近距离的点\n     * @param {number} cx         圆心 x\n     * @param {number} cy         圆心 y\n     * @param {number} rx         x 轴方向的半径\n     * @param {number} ry         y 轴方向的半径\n     * @param {number} xRotation  旋转角度\n     * @param {number} startAngle 起始角度\n     * @param {number} endAngle   结束角度\n     * @param {number} x0         指定点的 x\n     * @param {number} y0         指定点的 y\n     * @return {object} 到指定点最近距离的点\n     */\n    nearestPoint: function (cx, cy, rx, ry, xRotation, startAngle, endAngle, x0, y0) {\n        // 将最近距离问题转换成到椭圆中心 0,0 没有旋转的椭圆问题\n        var relativeVector = rotate(x0 - cx, y0 - cy, -xRotation);\n        var x1 = relativeVector[0], y1 = relativeVector[1];\n        // 计算点到椭圆的最近的点\n        var relativePoint = ellipse.nearestPoint(0, 0, rx, ry, x1, y1);\n        // 获取点在椭圆上的角度\n        var angle = getAngle(rx, ry, relativePoint.x, relativePoint.y);\n        // 点没有在圆弧上\n        if (angle < startAngle) {\n            // 小于起始圆弧\n            relativePoint = getPoint(rx, ry, startAngle);\n        }\n        else if (angle > endAngle) {\n            // 大于结束圆弧\n            relativePoint = getPoint(rx, ry, endAngle);\n        }\n        // 旋转到 xRotation 的角度\n        var vector = rotate(relativePoint.x, relativePoint.y, xRotation);\n        return {\n            x: vector[0] + cx,\n            y: vector[1] + cy,\n        };\n    },\n    pointDistance: function (cx, cy, rx, ry, xRotation, startAngle, endAngle, x0, y0) {\n        var nearestPoint = this.nearestPoint(cx, cy, rx, ry, x0, y0);\n        return distance(nearestPoint.x, nearestPoint.y, x0, y0);\n    },\n    pointAt: function (cx, cy, rx, ry, xRotation, startAngle, endAngle, t) {\n        var angle = (endAngle - startAngle) * t + startAngle;\n        return {\n            x: xAt(cx, cy, rx, ry, xRotation, angle),\n            y: yAt(cx, cy, rx, ry, xRotation, angle),\n        };\n    },\n    tangentAngle: function (cx, cy, rx, ry, xRotation, startAngle, endAngle, t) {\n        var angle = (endAngle - startAngle) * t + startAngle;\n        var dx = derivativeXAt(cx, cy, rx, ry, xRotation, startAngle, endAngle, angle);\n        var dy = derivativeYAt(cx, cy, rx, ry, xRotation, startAngle, endAngle, angle);\n        return piMod(Math.atan2(dy, dx));\n    },\n};\n//# sourceMappingURL=arc.js.map","// 合并包围盒\nexport function mergeBBox(bbox1, bbox2) {\n    if (!bbox1 || !bbox2) {\n        return bbox1 || bbox2;\n    }\n    return {\n        minX: Math.min(bbox1.minX, bbox2.minX),\n        minY: Math.min(bbox1.minY, bbox2.minY),\n        maxX: Math.max(bbox1.maxX, bbox2.maxX),\n        maxY: Math.max(bbox1.maxY, bbox2.maxY),\n    };\n}\n// 合并箭头的包围盒\nexport function mergeArrowBBox(shape, bbox) {\n    var startArrowShape = shape.get('startArrowShape');\n    var endArrowShape = shape.get('endArrowShape');\n    var startArrowBBox = null;\n    var endArrowBBox = null;\n    if (startArrowShape) {\n        startArrowBBox = startArrowShape.getCanvasBBox();\n        bbox = mergeBBox(bbox, startArrowBBox);\n    }\n    if (endArrowShape) {\n        endArrowBBox = endArrowShape.getCanvasBBox();\n        bbox = mergeBBox(bbox, endArrowBBox);\n    }\n    return bbox;\n}\n//# sourceMappingURL=util.js.map","// 全局设置一个唯一离屏的 ctx，用于计算 isPointInPath\nvar offScreenCtx = null;\nexport function getOffScreenContext() {\n    if (!offScreenCtx) {\n        var canvas = document.createElement('canvas');\n        canvas.width = 1;\n        canvas.height = 1;\n        offScreenCtx = canvas.getContext('2d');\n    }\n    return offScreenCtx;\n}\n//# sourceMappingURL=offscreen.js.map","import { isNil, each, isString } from './util';\nimport { getOffScreenContext } from './offscreen';\n/**\n * 获取文本的高度\n * @param text 文本\n * @param fontSize 字体大小\n * @param lineHeight 行高，可以为空\n */\nexport function getTextHeight(text, fontSize, lineHeight) {\n    var lineCount = 1;\n    if (isString(text)) {\n        lineCount = text.split('\\n').length;\n    }\n    if (lineCount > 1) {\n        var spaceingY = getLineSpaceing(fontSize, lineHeight);\n        return fontSize * lineCount + spaceingY * (lineCount - 1);\n    }\n    return fontSize;\n}\n/**\n * 获取行间距如果文本多行，需要获取文本间距\n * @param fontSize 字体大小\n * @param lineHeight 行高\n */\nexport function getLineSpaceing(fontSize, lineHeight) {\n    return lineHeight ? lineHeight - fontSize : fontSize * 0.14;\n}\n/**\n * 字体宽度\n * @param text 文本\n * @param font 字体\n */\nexport function getTextWidth(text, font) {\n    var context = getOffScreenContext(); // 获取离屏的 ctx 进行计算\n    var width = 0;\n    // null 或者 undefined 时，宽度为 0\n    if (isNil(text) || text === '') {\n        return width;\n    }\n    context.save();\n    context.font = font;\n    if (isString(text) && text.includes('\\n')) {\n        var textArr = text.split('\\n');\n        each(textArr, function (subText) {\n            var measureWidth = context.measureText(subText).width;\n            if (width < measureWidth) {\n                width = measureWidth;\n            }\n        });\n    }\n    else {\n        width = context.measureText(text).width;\n    }\n    context.restore();\n    return width;\n}\nexport function assembleFont(attrs) {\n    var fontSize = attrs.fontSize, fontFamily = attrs.fontFamily, fontWeight = attrs.fontWeight, fontStyle = attrs.fontStyle, fontVariant = attrs.fontVariant;\n    return [fontStyle, fontVariant, fontWeight, fontSize + \"px\", fontFamily].join(' ').trim();\n}\n//# sourceMappingURL=text.js.map","import { each, isArray, isString } from '@antv/util';\nvar regexTags = /[MLHVQTCSAZ]([^MLHVQTCSAZ]*)/ig;\nvar regexDot = /[^\\s\\,]+/ig;\nfunction parsePath(p) {\n    var path = p || [];\n    if (isArray(path)) {\n        return path;\n    }\n    if (isString(path)) {\n        path = path.match(regexTags);\n        each(path, function (item, index) {\n            // @ts-ignore\n            item = item.match(regexDot);\n            if (item[0].length > 1) {\n                var tag = item[0].charAt(0);\n                // @ts-ignore\n                item.splice(1, 0, item[0].substr(1));\n                // @ts-ignore\n                item[0] = tag;\n            }\n            // @ts-ignore\n            each(item, function (sub, i) {\n                if (!isNaN(sub)) {\n                    // @ts-ignore\n                    item[i] = +sub;\n                }\n            });\n            // @ts-ignore\n            path[index] = item;\n        });\n        return path;\n    }\n}\nexport default parsePath;\n//# sourceMappingURL=parse-path.js.map","import { mod, toRadian } from '@antv/util';\n// 向量长度\nfunction vMag(v) {\n    return Math.sqrt(v[0] * v[0] + v[1] * v[1]);\n}\n// u.v/|u||v|，计算夹角的余弦值\nfunction vRatio(u, v) {\n    // 当存在一个向量的长度为 0 时，夹角也为 0，即夹角的余弦值为 1\n    return vMag(u) * vMag(v) ? (u[0] * v[0] + u[1] * v[1]) / (vMag(u) * vMag(v)) : 1;\n}\n// 向量角度\nfunction vAngle(u, v) {\n    return (u[0] * v[1] < u[1] * v[0] ? -1 : 1) * Math.acos(vRatio(u, v));\n}\n/**\n * 判断两个点是否重合，点坐标的格式为 [x, y]\n * @param {Array} point1 第一个点\n * @param {Array} point2 第二个点\n */\nexport function isSamePoint(point1, point2) {\n    return point1[0] === point2[0] && point1[1] === point2[1];\n}\n// A 0:rx 1:ry 2:x-axis-rotation 3:large-arc-flag 4:sweep-flag 5: x 6: y\nexport default function getArcParams(startPoint, params) {\n    var rx = params[1];\n    var ry = params[2];\n    var xRotation = mod(toRadian(params[3]), Math.PI * 2);\n    var arcFlag = params[4];\n    var sweepFlag = params[5];\n    // 弧形起点坐标\n    var x1 = startPoint[0];\n    var y1 = startPoint[1];\n    // 弧形终点坐标\n    var x2 = params[6];\n    var y2 = params[7];\n    var xp = (Math.cos(xRotation) * (x1 - x2)) / 2.0 + (Math.sin(xRotation) * (y1 - y2)) / 2.0;\n    var yp = (-1 * Math.sin(xRotation) * (x1 - x2)) / 2.0 + (Math.cos(xRotation) * (y1 - y2)) / 2.0;\n    var lambda = (xp * xp) / (rx * rx) + (yp * yp) / (ry * ry);\n    if (lambda > 1) {\n        rx *= Math.sqrt(lambda);\n        ry *= Math.sqrt(lambda);\n    }\n    var diff = rx * rx * (yp * yp) + ry * ry * (xp * xp);\n    var f = diff ? Math.sqrt((rx * rx * (ry * ry) - diff) / diff) : 1;\n    if (arcFlag === sweepFlag) {\n        f *= -1;\n    }\n    if (isNaN(f)) {\n        f = 0;\n    }\n    // 旋转前的起点坐标，且当长半轴和短半轴的长度为 0 时，坐标按 (0, 0) 处理\n    var cxp = ry ? (f * rx * yp) / ry : 0;\n    var cyp = rx ? (f * -ry * xp) / rx : 0;\n    // 椭圆圆心坐标\n    var cx = (x1 + x2) / 2.0 + Math.cos(xRotation) * cxp - Math.sin(xRotation) * cyp;\n    var cy = (y1 + y2) / 2.0 + Math.sin(xRotation) * cxp + Math.cos(xRotation) * cyp;\n    // 起始点的单位向量\n    var u = [(xp - cxp) / rx, (yp - cyp) / ry];\n    // 终止点的单位向量\n    var v = [(-1 * xp - cxp) / rx, (-1 * yp - cyp) / ry];\n    // 计算起始点和圆心的连线，与 x 轴正方向的夹角\n    var theta = vAngle([1, 0], u);\n    // 计算圆弧起始点和终止点与椭圆圆心连线的夹角\n    var dTheta = vAngle(u, v);\n    if (vRatio(u, v) <= -1) {\n        dTheta = Math.PI;\n    }\n    if (vRatio(u, v) >= 1) {\n        dTheta = 0;\n    }\n    if (sweepFlag === 0 && dTheta > 0) {\n        dTheta = dTheta - 2 * Math.PI;\n    }\n    if (sweepFlag === 1 && dTheta < 0) {\n        dTheta = dTheta + 2 * Math.PI;\n    }\n    return {\n        cx: cx,\n        cy: cy,\n        // 弧形的起点和终点相同时，长轴和短轴的长度按 0 处理\n        rx: isSamePoint(startPoint, [x2, y2]) ? 0 : rx,\n        ry: isSamePoint(startPoint, [x2, y2]) ? 0 : ry,\n        startAngle: theta,\n        endAngle: theta + dTheta,\n        xRotation: xRotation,\n        arcFlag: arcFlag,\n        sweepFlag: sweepFlag,\n    };\n}\n//# sourceMappingURL=get-arc-params.js.map","import getArcParams from './get-arc-params';\nimport { isSamePoint } from './get-arc-params';\nimport parsePath from './parse-path';\n// 点对称\nfunction toSymmetry(point, center) {\n    return [center[0] + (center[0] - point[0]), center[1] + (center[1] - point[1])];\n}\nexport default function getSegments(path) {\n    path = parsePath(path);\n    var segments = [];\n    var currentPoint = null; // 当前图形\n    var nextParams = null; // 下一节点的 path 参数\n    var startMovePoint = null; // 开始 M 的点，可能会有多个\n    var lastStartMovePointIndex = 0; // 最近一个开始点 M 的索引\n    var count = path.length;\n    for (var i = 0; i < count; i++) {\n        var params = path[i];\n        nextParams = path[i + 1];\n        var command = params[0];\n        // 数学定义上的参数，便于后面的计算\n        var segment = {\n            command: command,\n            prePoint: currentPoint,\n            params: params,\n            startTangent: null,\n            endTangent: null,\n        };\n        switch (command) {\n            case 'M':\n                startMovePoint = [params[1], params[2]];\n                lastStartMovePointIndex = i;\n                break;\n            case 'A':\n                var arcParams = getArcParams(currentPoint, params);\n                segment['arcParams'] = arcParams;\n                break;\n            default:\n                break;\n        }\n        if (command === 'Z') {\n            // 有了 Z 后，当前节点从开始 M 的点开始\n            currentPoint = startMovePoint;\n            // 如果当前点的命令为 Z，相当于当前点为最近一个 M 点，则下一个点直接指向最近一个 M 点的下一个点\n            nextParams = path[lastStartMovePointIndex + 1];\n        }\n        else {\n            var len = params.length;\n            currentPoint = [params[len - 2], params[len - 1]];\n        }\n        if (nextParams && nextParams[0] === 'Z') {\n            // 如果下一个点的命令为 Z，则下一个点直接指向最近一个 M 点\n            nextParams = path[lastStartMovePointIndex];\n            if (segments[lastStartMovePointIndex]) {\n                // 如果下一个点的命令为 Z，则最近一个 M 点的前一个点为当前点\n                segments[lastStartMovePointIndex].prePoint = currentPoint;\n            }\n        }\n        segment['currentPoint'] = currentPoint;\n        // 如果当前点与最近一个 M 点相同，则最近一个 M 点的前一个点为当前点的前一个点\n        if (segments[lastStartMovePointIndex] &&\n            isSamePoint(currentPoint, segments[lastStartMovePointIndex].currentPoint)) {\n            segments[lastStartMovePointIndex].prePoint = segment.prePoint;\n        }\n        var nextPoint = nextParams ? [nextParams[nextParams.length - 2], nextParams[nextParams.length - 1]] : null;\n        segment['nextPoint'] = nextPoint;\n        // Add startTangent and endTangent\n        var prePoint = segment.prePoint;\n        if (['L', 'H', 'V'].includes(command)) {\n            segment.startTangent = [prePoint[0] - currentPoint[0], prePoint[1] - currentPoint[1]];\n            segment.endTangent = [currentPoint[0] - prePoint[0], currentPoint[1] - prePoint[1]];\n        }\n        else if (command === 'Q') {\n            // 二次贝塞尔曲线只有一个控制点\n            var cp = [params[1], params[2]];\n            // 二次贝塞尔曲线的终点为 currentPoint\n            segment.startTangent = [prePoint[0] - cp[0], prePoint[1] - cp[1]];\n            segment.endTangent = [currentPoint[0] - cp[0], currentPoint[1] - cp[1]];\n        }\n        else if (command === 'T') {\n            var preSegment = segments[i - 1];\n            var cp = toSymmetry(preSegment.currentPoint, prePoint);\n            if (preSegment.command === 'Q') {\n                segment.command = 'Q';\n                segment.startTangent = [prePoint[0] - cp[0], prePoint[1] - cp[1]];\n                segment.endTangent = [currentPoint[0] - cp[0], currentPoint[1] - cp[1]];\n            }\n            else {\n                segment.command = 'TL';\n                segment.startTangent = [prePoint[0] - currentPoint[0], prePoint[1] - currentPoint[1]];\n                segment.endTangent = [currentPoint[0] - prePoint[0], currentPoint[1] - prePoint[1]];\n            }\n        }\n        else if (command === 'C') {\n            // 三次贝塞尔曲线有两个控制点\n            var cp1 = [params[1], params[2]];\n            var cp2 = [params[3], params[4]];\n            segment.startTangent = [prePoint[0] - cp1[0], prePoint[1] - cp1[1]];\n            segment.endTangent = [currentPoint[0] - cp2[0], currentPoint[1] - cp2[1]];\n            // horizontal line, eg. ['C', 100, 100, 100, 100, 200, 200]\n            if (segment.startTangent[0] === 0 && segment.startTangent[1] === 0) {\n                segment.startTangent = [cp1[0] - cp2[0], cp1[1] - cp2[1]];\n            }\n            if (segment.endTangent[0] === 0 && segment.endTangent[1] === 0) {\n                segment.endTangent = [cp2[0] - cp1[0], cp2[1] - cp1[1]];\n            }\n        }\n        else if (command === 'S') {\n            var preSegment = segments[i - 1];\n            var cp1 = toSymmetry(preSegment.currentPoint, prePoint);\n            var cp2 = [params[1], params[2]];\n            if (preSegment.command === 'C') {\n                segment.command = 'C'; // 将 S 命令变换为 C 命令\n                segment.startTangent = [prePoint[0] - cp1[0], prePoint[1] - cp1[1]];\n                segment.endTangent = [currentPoint[0] - cp2[0], currentPoint[1] - cp2[1]];\n            }\n            else {\n                segment.command = 'SQ'; // 将 S 命令变换为 SQ 命令\n                segment.startTangent = [prePoint[0] - cp2[0], prePoint[1] - cp2[1]];\n                segment.endTangent = [currentPoint[0] - cp2[0], currentPoint[1] - cp2[1]];\n            }\n        }\n        else if (command === 'A') {\n            var d = 0.001;\n            var _a = segment['arcParams'] || {}, _b = _a.cx, cx = _b === void 0 ? 0 : _b, _c = _a.cy, cy = _c === void 0 ? 0 : _c, _d = _a.rx, rx = _d === void 0 ? 0 : _d, _e = _a.ry, ry = _e === void 0 ? 0 : _e, _f = _a.sweepFlag, sweepFlag = _f === void 0 ? 0 : _f, _g = _a.startAngle, startAngle = _g === void 0 ? 0 : _g, _h = _a.endAngle, endAngle = _h === void 0 ? 0 : _h;\n            if (sweepFlag === 0) {\n                d *= -1;\n            }\n            var dx1 = rx * Math.cos(startAngle - d) + cx;\n            var dy1 = ry * Math.sin(startAngle - d) + cy;\n            segment.startTangent = [dx1 - startMovePoint[0], dy1 - startMovePoint[1]];\n            var dx2 = rx * Math.cos(startAngle + endAngle + d) + cx;\n            var dy2 = ry * Math.sin(startAngle + endAngle - d) + cy;\n            segment.endTangent = [prePoint[0] - dx2, prePoint[1] - dy2];\n        }\n        segments.push(segment);\n    }\n    return segments;\n}\n//# sourceMappingURL=path-2-segments.js.map","import { Quad as QuadUtil, Cubic as CubicUtil, Arc as EllipseArcUtil } from '@antv/g-math';\nimport { path2Segments } from '@antv/path-util';\nimport { isNumberEqual, max, min } from '@antv/util';\nimport { mergeArrowBBox } from './util';\nfunction getPathBox(segments, lineWidth) {\n    var xArr = [];\n    var yArr = [];\n    var segmentsWithAngle = [];\n    for (var i = 0; i < segments.length; i++) {\n        var segment = segments[i];\n        var currentPoint = segment.currentPoint, params = segment.params, prePoint = segment.prePoint;\n        var box = void 0;\n        switch (segment.command) {\n            case 'Q':\n                box = QuadUtil.box(prePoint[0], prePoint[1], params[1], params[2], params[3], params[4]);\n                break;\n            case 'C':\n                box = CubicUtil.box(prePoint[0], prePoint[1], params[1], params[2], params[3], params[4], params[5], params[6]);\n                break;\n            case 'A':\n                var arcParams = segment.arcParams;\n                box = EllipseArcUtil.box(arcParams.cx, arcParams.cy, arcParams.rx, arcParams.ry, arcParams.xRotation, arcParams.startAngle, arcParams.endAngle);\n                break;\n            default:\n                xArr.push(currentPoint[0]);\n                yArr.push(currentPoint[1]);\n                break;\n        }\n        if (box) {\n            segment.box = box;\n            xArr.push(box.x, box.x + box.width);\n            yArr.push(box.y, box.y + box.height);\n        }\n        if (lineWidth && (segment.command === 'L' || segment.command === 'M') && segment.prePoint && segment.nextPoint) {\n            segmentsWithAngle.push(segment);\n        }\n    }\n    // bbox calculation should ignore NaN for path attribute\n    // ref: https://github.com/antvis/g/issues/210\n    // ref: https://github.com/antvis/G2/issues/3109\n    xArr = xArr.filter(function (item) { return !Number.isNaN(item) && item !== Infinity && item !== -Infinity; });\n    yArr = yArr.filter(function (item) { return !Number.isNaN(item) && item !== Infinity && item !== -Infinity; });\n    var minX = min(xArr);\n    var minY = min(yArr);\n    var maxX = max(xArr);\n    var maxY = max(yArr);\n    if (segmentsWithAngle.length === 0) {\n        return {\n            x: minX,\n            y: minY,\n            width: maxX - minX,\n            height: maxY - minY,\n        };\n    }\n    for (var i = 0; i < segmentsWithAngle.length; i++) {\n        var segment = segmentsWithAngle[i];\n        var currentPoint = segment.currentPoint;\n        var extra = void 0;\n        if (currentPoint[0] === minX) {\n            extra = getExtraFromSegmentWithAngle(segment, lineWidth);\n            minX = minX - extra.xExtra;\n        }\n        else if (currentPoint[0] === maxX) {\n            extra = getExtraFromSegmentWithAngle(segment, lineWidth);\n            maxX = maxX + extra.xExtra;\n        }\n        if (currentPoint[1] === minY) {\n            extra = getExtraFromSegmentWithAngle(segment, lineWidth);\n            minY = minY - extra.yExtra;\n        }\n        else if (currentPoint[1] === maxY) {\n            extra = getExtraFromSegmentWithAngle(segment, lineWidth);\n            maxY = maxY + extra.yExtra;\n        }\n    }\n    return {\n        x: minX,\n        y: minY,\n        width: maxX - minX,\n        height: maxY - minY,\n    };\n}\nfunction getExtraFromSegmentWithAngle(segment, lineWidth) {\n    var prePoint = segment.prePoint, currentPoint = segment.currentPoint, nextPoint = segment.nextPoint;\n    var currentAndPre = Math.pow(currentPoint[0] - prePoint[0], 2) + Math.pow(currentPoint[1] - prePoint[1], 2);\n    var currentAndNext = Math.pow(currentPoint[0] - nextPoint[0], 2) + Math.pow(currentPoint[1] - nextPoint[1], 2);\n    var preAndNext = Math.pow(prePoint[0] - nextPoint[0], 2) + Math.pow(prePoint[1] - nextPoint[1], 2);\n    // 以 currentPoint 为顶点的夹角\n    var currentAngle = Math.acos((currentAndPre + currentAndNext - preAndNext) / (2 * Math.sqrt(currentAndPre) * Math.sqrt(currentAndNext)));\n    // 夹角为空、 0 或 PI 时，不需要计算夹角处的额外宽度\n    // 注意: 由于计算精度问题，夹角为 0 的情况计算出来的角度可能是一个很小的值，还需要判断其与 0 是否近似相等\n    if (!currentAngle || Math.sin(currentAngle) === 0 || isNumberEqual(currentAngle, 0)) {\n        return {\n            xExtra: 0,\n            yExtra: 0,\n        };\n    }\n    var xAngle = Math.abs(Math.atan2(nextPoint[1] - currentPoint[1], nextPoint[0] - currentPoint[0]));\n    var yAngle = Math.abs(Math.atan2(nextPoint[0] - currentPoint[0], nextPoint[1] - currentPoint[1]));\n    // 将夹角转为锐角\n    xAngle = xAngle > Math.PI / 2 ? Math.PI - xAngle : xAngle;\n    yAngle = yAngle > Math.PI / 2 ? Math.PI - yAngle : yAngle;\n    // 这里不考虑在水平和垂直方向的投影，直接使用最大差值\n    // 由于上层统一加减了二分之一线宽，这里需要进行弥补\n    var extra = {\n        // 水平方向投影\n        xExtra: Math.cos(currentAngle / 2 - xAngle) * ((lineWidth / 2) * (1 / Math.sin(currentAngle / 2))) - lineWidth / 2 || 0,\n        // 垂直方向投影\n        yExtra: Math.cos(yAngle - currentAngle / 2) * ((lineWidth / 2) * (1 / Math.sin(currentAngle / 2))) - lineWidth / 2 || 0,\n    };\n    return extra;\n}\nexport default function (shape) {\n    var attrs = shape.attr();\n    var path = attrs.path, stroke = attrs.stroke;\n    var lineWidth = stroke ? attrs.lineWidth : 0; // 只有有 stroke 时，lineWidth 才生效\n    var segments = shape.get('segments') || path2Segments(path);\n    var _a = getPathBox(segments, lineWidth), x = _a.x, y = _a.y, width = _a.width, height = _a.height;\n    var bbox = {\n        minX: x,\n        minY: y,\n        maxX: x + width,\n        maxY: y + height,\n    };\n    bbox = mergeArrowBBox(shape, bbox);\n    return {\n        x: bbox.minX,\n        y: bbox.minY,\n        width: bbox.maxX - bbox.minX,\n        height: bbox.maxY - bbox.minY,\n    };\n}\n//# sourceMappingURL=path.js.map","var PRECISION = 0.00001; // numbers less than this is considered as 0\nexport default function isNumberEqual(a, b, precision) {\n    if (precision === void 0) { precision = PRECISION; }\n    return Math.abs((a - b)) < precision;\n}\n;\n//# sourceMappingURL=is-number-equal.js.map","import { register, getMethod } from './register';\nimport rect from './rect';\nimport circle from './circle';\nimport polyline from './polyline';\nimport polygon from './polygon';\nimport text from './text';\nimport path from './path';\nimport line from './line';\nimport ellipse from './ellipse';\nregister('rect', rect);\nregister('image', rect); // image 使用 rect 的包围盒计算\nregister('circle', circle);\nregister('marker', circle); // marker 使用 circle 的计算方案\nregister('polyline', polyline);\nregister('polygon', polygon);\nregister('text', text);\nregister('path', path);\nregister('line', line);\nregister('ellipse', ellipse);\nexport { getMethod as getBBoxMethod, register as registerBBox };\n//# sourceMappingURL=index.js.map","import { Util } from '@antv/g-math';\nimport { mergeArrowBBox } from './util';\nexport default function (shape) {\n    var attrs = shape.attr();\n    var points = attrs.points;\n    var xArr = [];\n    var yArr = [];\n    for (var i = 0; i < points.length; i++) {\n        var point = points[i];\n        xArr.push(point[0]);\n        yArr.push(point[1]);\n    }\n    var _a = Util.getBBoxByArray(xArr, yArr), x = _a.x, y = _a.y, width = _a.width, height = _a.height;\n    var bbox = {\n        minX: x,\n        minY: y,\n        maxX: x + width,\n        maxY: y + height,\n    };\n    bbox = mergeArrowBBox(shape, bbox);\n    return {\n        x: bbox.minX,\n        y: bbox.minY,\n        width: bbox.maxX - bbox.minX,\n        height: bbox.maxY - bbox.minY,\n    };\n}\n//# sourceMappingURL=polyline.js.map","import { Util } from '@antv/g-math';\nexport default function (shape) {\n    var attrs = shape.attr();\n    var points = attrs.points;\n    var xArr = [];\n    var yArr = [];\n    for (var i = 0; i < points.length; i++) {\n        var point = points[i];\n        xArr.push(point[0]);\n        yArr.push(point[1]);\n    }\n    return Util.getBBoxByArray(xArr, yArr);\n}\n//# sourceMappingURL=polygon.js.map","import { getTextWidth, getTextHeight, assembleFont } from '../util/text';\nexport default function (shape) {\n    var attrs = shape.attr();\n    var x = attrs.x, y = attrs.y, text = attrs.text, fontSize = attrs.fontSize, lineHeight = attrs.lineHeight;\n    var font = attrs.font;\n    if (!font) {\n        // 如果未组装 font\n        font = assembleFont(attrs);\n    }\n    var width = getTextWidth(text, font);\n    var bbox;\n    if (!width) {\n        // 如果width不存在，四点共其实点\n        bbox = {\n            x: x,\n            y: y,\n            width: 0,\n            height: 0,\n        };\n    }\n    else {\n        var textAlign = attrs.textAlign, textBaseline = attrs.textBaseline;\n        var height = getTextHeight(text, fontSize, lineHeight); // attrs.height\n        // 默认左右对齐：left, 默认上下对齐 bottom\n        var point = {\n            x: x,\n            y: y - height,\n        };\n        if (textAlign) {\n            if (textAlign === 'end' || textAlign === 'right') {\n                point.x -= width;\n            }\n            else if (textAlign === 'center') {\n                point.x -= width / 2;\n            }\n        }\n        if (textBaseline) {\n            if (textBaseline === 'top') {\n                point.y += height;\n            }\n            else if (textBaseline === 'middle') {\n                point.y += height / 2;\n            }\n        }\n        bbox = {\n            x: point.x,\n            y: point.y,\n            width: width,\n            height: height,\n        };\n    }\n    return bbox;\n}\n//# sourceMappingURL=text.js.map","import { mergeArrowBBox } from './util';\nexport default function (shape) {\n    var attrs = shape.attr();\n    var x1 = attrs.x1, y1 = attrs.y1, x2 = attrs.x2, y2 = attrs.y2;\n    var minX = Math.min(x1, x2);\n    var maxX = Math.max(x1, x2);\n    var minY = Math.min(y1, y2);\n    var maxY = Math.max(y1, y2);\n    var bbox = {\n        minX: minX,\n        maxX: maxX,\n        minY: minY,\n        maxY: maxY,\n    };\n    bbox = mergeArrowBBox(shape, bbox);\n    return {\n        x: bbox.minX,\n        y: bbox.minY,\n        width: bbox.maxX - bbox.minX,\n        height: bbox.maxY - bbox.minY,\n    };\n}\n//# sourceMappingURL=line.js.map","export default function (shape) {\n    var attrs = shape.attr();\n    var x = attrs.x, y = attrs.y, rx = attrs.rx, ry = attrs.ry;\n    return {\n        x: x - rx,\n        y: y - ry,\n        width: rx * 2,\n        height: ry * 2,\n    };\n}\n//# sourceMappingURL=ellipse.js.map","var isArrayLike = function (value) {\n    /**\n     * isArrayLike([1, 2, 3]) => true\n     * isArrayLike(document.body.children) => true\n     * isArrayLike('abc') => true\n     * isArrayLike(Function) => false\n     */\n    return value !== null && typeof value !== 'function' && isFinite(value.length);\n};\nexport default isArrayLike;\n//# sourceMappingURL=is-array-like.js.map","var toString = {}.toString;\nvar isType = function (value, type) { return toString.call(value) === '[object ' + type + ']'; };\nexport default isType;\n//# sourceMappingURL=is-type.js.map","/**\n * 是否为函数\n * @param  {*} fn 对象\n * @return {Boolean}  是否函数\n */\nimport isType from './is-type';\nexport default (function (value) {\n    return isType(value, 'Function');\n});\n//# sourceMappingURL=is-function.js.map","// isFinite,\nvar isNil = function (value) {\n    /**\n     * isNil(null) => true\n     * isNil() => true\n     */\n    return value === null || value === undefined;\n};\nexport default isNil;\n//# sourceMappingURL=is-nil.js.map","import isType from './is-type';\nexport default (function (value) {\n    return Array.isArray ?\n        Array.isArray(value) :\n        isType(value, 'Array');\n});\n//# sourceMappingURL=is-array.js.map","export default (function (value) {\n    /**\n     * isObject({}) => true\n     * isObject([1, 2, 3]) => true\n     * isObject(Function) => true\n     * isObject(null) => false\n     */\n    var type = typeof value;\n    return value !== null && type === 'object' || type === 'function';\n});\n//# sourceMappingURL=is-object.js.map","import isArray from './is-array';\nimport isObject from './is-object';\nfunction each(elements, func) {\n    if (!elements) {\n        return;\n    }\n    var rst;\n    if (isArray(elements)) {\n        for (var i = 0, len = elements.length; i < len; i++) {\n            rst = func(elements[i], i);\n            if (rst === false) {\n                break;\n            }\n        }\n    }\n    else if (isObject(elements)) {\n        for (var k in elements) {\n            if (elements.hasOwnProperty(k)) {\n                rst = func(elements[k], k);\n                if (rst === false) {\n                    break;\n                }\n            }\n        }\n    }\n}\nexport default each;\n//# sourceMappingURL=each.js.map","import isArray from './is-array';\n/**\n * Flattens `array` a single level deep.\n *\n * @param {Array} arr The array to flatten.\n * @return {Array} Returns the new flattened array.\n * @example\n *\n * flatten([1, [2, [3, [4]], 5]]);  // => [1, 2, [3, [4]], 5]\n */\nvar flatten = function (arr) {\n    if (!isArray(arr)) {\n        return [];\n    }\n    var rst = [];\n    for (var i = 0; i < arr.length; i++) {\n        rst = rst.concat(arr[i]);\n    }\n    return rst;\n};\nexport default flatten;\n//# sourceMappingURL=flatten.js.map","import isType from './is-type';\nexport default (function (str) {\n    return isType(str, 'String');\n});\n//# sourceMappingURL=is-string.js.map","import isArray from './is-array';\nimport isNil from './is-nil';\nexport default (function (data, name) {\n    var rst = [];\n    var tmpMap = {};\n    for (var i = 0; i < data.length; i++) {\n        var obj = data[i];\n        var value = obj[name];\n        if (!isNil(value)) {\n            // flatten\n            if (!isArray(value)) {\n                value = [value];\n            }\n            for (var j = 0; j < value.length; j++) {\n                var val = value[j];\n                // unique\n                if (!tmpMap[val]) {\n                    rst.push(val);\n                    tmpMap[val] = true;\n                }\n            }\n        }\n    }\n    return rst;\n});\n//# sourceMappingURL=values-of-key.js.map","import isArray from './is-array';\nimport isFunction from './is-function';\nvar hasOwnProperty = Object.prototype.hasOwnProperty;\nfunction groupBy(data, condition) {\n    if (!condition || !isArray(data)) {\n        return {};\n    }\n    var result = {};\n    // 兼容方法和 字符串的写法\n    var predicate = isFunction(condition) ? condition : function (item) { return item[condition]; };\n    var key;\n    for (var i = 0; i < data.length; i++) {\n        var item = data[i];\n        key = predicate(item);\n        if (hasOwnProperty.call(result, key)) {\n            result[key].push(item);\n        }\n        else {\n            result[key] = [item];\n        }\n    }\n    return result;\n}\nexport default groupBy;\n//# sourceMappingURL=group-by.js.map","import groupToMap from './group-to-map';\nexport default (function (data, condition) {\n    if (!condition) {\n        // 没有条件，则自身改成数组\n        return [data];\n    }\n    var groups = groupToMap(data, condition);\n    var array = [];\n    for (var i in groups) {\n        array.push(groups[i]);\n    }\n    return array;\n});\n//# sourceMappingURL=group.js.map","import isArray from './is-array';\nimport isFunction from './is-function';\nimport groupBy from './group-by';\n/**\n * 将数据分组成 map\n * @param data\n * @param condition\n */\nexport default function groupToMap(data, condition) {\n    if (!condition) {\n        return {\n            0: data,\n        };\n    }\n    if (!isFunction(condition)) {\n        // 如果是字符串，则按照 a*b 风格成数组\n        var paramscondition_1 = isArray(condition) ? condition : condition.replace(/\\s+/g, '').split('*');\n        condition = function (row) {\n            var unique = '_'; // 避免出现数字作为Key的情况，会进行按照数字的排序\n            // 根据字段列表的值，拼接成 key\n            for (var i = 0, l = paramscondition_1.length; i < l; i++) {\n                unique += row[paramscondition_1[i]] && row[paramscondition_1[i]].toString();\n            }\n            return unique;\n        };\n    }\n    return groupBy(data, condition);\n}\n//# sourceMappingURL=group-to-map.js.map","import each from './each';\nimport isFunction from './is-function';\n// @ts-ignore\nvar values = Object.values ? function (obj) { return Object.values(obj); } : function (obj) {\n    var result = [];\n    each(obj, function (value, key) {\n        if (!(isFunction(obj) && key === 'prototype')) {\n            result.push(value);\n        }\n    });\n    return result;\n};\nexport default values;\n//# sourceMappingURL=values.js.map","import isArray from './is-array';\nvar clone = function (obj) {\n    if (typeof obj !== 'object' || obj === null) {\n        return obj;\n    }\n    var rst;\n    if (isArray(obj)) {\n        rst = [];\n        for (var i = 0, l = obj.length; i < l; i++) {\n            if (typeof obj[i] === 'object' && obj[i] != null) {\n                rst[i] = clone(obj[i]);\n            }\n            else {\n                rst[i] = obj[i];\n            }\n        }\n    }\n    else {\n        rst = {};\n        for (var k in obj) {\n            if (typeof obj[k] === 'object' && obj[k] != null) {\n                rst[k] = clone(obj[k]);\n            }\n            else {\n                rst[k] = obj[k];\n            }\n        }\n    }\n    return rst;\n};\nexport default clone;\n//# sourceMappingURL=clone.js.map","import isArrayLike from './is-array-like';\nvar map = function (arr, func) {\n    if (!isArrayLike(arr)) {\n        // @ts-ignore\n        return arr;\n    }\n    var result = [];\n    for (var index = 0; index < arr.length; index++) {\n        var value = arr[index];\n        result.push(func(value, index));\n    }\n    return result;\n};\nexport default map;\n//# sourceMappingURL=map.js.map","import isNil from './is-nil';\nimport isObject from './is-object';\nvar identity = function (v) { return v; };\nexport default (function (object, func) {\n    if (func === void 0) { func = identity; }\n    var r = {};\n    if (isObject(object) && !isNil(object)) {\n        Object.keys(object).forEach(function (key) {\n            // @ts-ignore\n            r[key] = func(object[key], key);\n        });\n    }\n    return r;\n});\n//# sourceMappingURL=map-values.js.map","import isString from './is-string';\n/**\n * https://github.com/developit/dlv/blob/master/index.js\n * @param obj\n * @param key\n * @param defaultValue\n */\nexport default (function (obj, key, defaultValue) {\n    var p = 0;\n    var keyArr = isString(key) ? key.split('.') : key;\n    while (obj && p < keyArr.length) {\n        obj = obj[keyArr[p++]];\n    }\n    return (obj === undefined || p < keyArr.length) ? defaultValue : obj;\n});\n//# sourceMappingURL=get.js.map","import { __spreadArrays } from \"tslib\";\nimport values from './values';\nimport memoize from './memoize';\nimport isString from './is-string';\nvar ctx;\n/**\n * 计算文本的宽度\n */\nexport default memoize(function (text, font) {\n    if (font === void 0) { font = {}; }\n    var fontSize = font.fontSize, fontFamily = font.fontFamily, fontWeight = font.fontWeight, fontStyle = font.fontStyle, fontVariant = font.fontVariant;\n    if (!ctx) {\n        ctx = document.createElement('canvas').getContext('2d');\n    }\n    ctx.font = [fontStyle, fontVariant, fontWeight, fontSize + \"px\", fontFamily].join(' ');\n    return ctx.measureText(isString(text) ? text : '').width;\n}, function (text, font) {\n    if (font === void 0) { font = {}; }\n    return __spreadArrays([text], values(font)).join('');\n});\n//# sourceMappingURL=measure-text-width.js.map","/******************************************************************************\nCopyright (c) Microsoft Corporation.\n\nPermission to use, copy, modify, and/or distribute this software for any\npurpose with or without fee is hereby granted.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\nPERFORMANCE OF THIS SOFTWARE.\n***************************************************************************** */\n/* global Reflect, Promise, SuppressedError, Symbol, Iterator */\n\nvar extendStatics = function(d, b) {\n  extendStatics = Object.setPrototypeOf ||\n      ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n      function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n  return extendStatics(d, b);\n};\n\nexport function __extends(d, b) {\n  if (typeof b !== \"function\" && b !== null)\n      throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n  extendStatics(d, b);\n  function __() { this.constructor = d; }\n  d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n}\n\nexport var __assign = function() {\n  __assign = Object.assign || function __assign(t) {\n      for (var s, i = 1, n = arguments.length; i < n; i++) {\n          s = arguments[i];\n          for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\n      }\n      return t;\n  }\n  return __assign.apply(this, arguments);\n}\n\nexport function __rest(s, e) {\n  var t = {};\n  for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\n      t[p] = s[p];\n  if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\n      for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\n          if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\n              t[p[i]] = s[p[i]];\n      }\n  return t;\n}\n\nexport function __decorate(decorators, target, key, desc) {\n  var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n  if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n  else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n  return c > 3 && r && Object.defineProperty(target, key, r), r;\n}\n\nexport function __param(paramIndex, decorator) {\n  return function (target, key) { decorator(target, key, paramIndex); }\n}\n\nexport function __esDecorate(ctor, descriptorIn, decorators, contextIn, initializers, extraInitializers) {\n  function accept(f) { if (f !== void 0 && typeof f !== \"function\") throw new TypeError(\"Function expected\"); return f; }\n  var kind = contextIn.kind, key = kind === \"getter\" ? \"get\" : kind === \"setter\" ? \"set\" : \"value\";\n  var target = !descriptorIn && ctor ? contextIn[\"static\"] ? ctor : ctor.prototype : null;\n  var descriptor = descriptorIn || (target ? Object.getOwnPropertyDescriptor(target, contextIn.name) : {});\n  var _, done = false;\n  for (var i = decorators.length - 1; i >= 0; i--) {\n      var context = {};\n      for (var p in contextIn) context[p] = p === \"access\" ? {} : contextIn[p];\n      for (var p in contextIn.access) context.access[p] = contextIn.access[p];\n      context.addInitializer = function (f) { if (done) throw new TypeError(\"Cannot add initializers after decoration has completed\"); extraInitializers.push(accept(f || null)); };\n      var result = (0, decorators[i])(kind === \"accessor\" ? { get: descriptor.get, set: descriptor.set } : descriptor[key], context);\n      if (kind === \"accessor\") {\n          if (result === void 0) continue;\n          if (result === null || typeof result !== \"object\") throw new TypeError(\"Object expected\");\n          if (_ = accept(result.get)) descriptor.get = _;\n          if (_ = accept(result.set)) descriptor.set = _;\n          if (_ = accept(result.init)) initializers.unshift(_);\n      }\n      else if (_ = accept(result)) {\n          if (kind === \"field\") initializers.unshift(_);\n          else descriptor[key] = _;\n      }\n  }\n  if (target) Object.defineProperty(target, contextIn.name, descriptor);\n  done = true;\n};\n\nexport function __runInitializers(thisArg, initializers, value) {\n  var useValue = arguments.length > 2;\n  for (var i = 0; i < initializers.length; i++) {\n      value = useValue ? initializers[i].call(thisArg, value) : initializers[i].call(thisArg);\n  }\n  return useValue ? value : void 0;\n};\n\nexport function __propKey(x) {\n  return typeof x === \"symbol\" ? x : \"\".concat(x);\n};\n\nexport function __setFunctionName(f, name, prefix) {\n  if (typeof name === \"symbol\") name = name.description ? \"[\".concat(name.description, \"]\") : \"\";\n  return Object.defineProperty(f, \"name\", { configurable: true, value: prefix ? \"\".concat(prefix, \" \", name) : name });\n};\n\nexport function __metadata(metadataKey, metadataValue) {\n  if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(metadataKey, metadataValue);\n}\n\nexport function __awaiter(thisArg, _arguments, P, generator) {\n  function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n  return new (P || (P = Promise))(function (resolve, reject) {\n      function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n      function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n      function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n      step((generator = generator.apply(thisArg, _arguments || [])).next());\n  });\n}\n\nexport function __generator(thisArg, body) {\n  var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g = Object.create((typeof Iterator === \"function\" ? Iterator : Object).prototype);\n  return g.next = verb(0), g[\"throw\"] = verb(1), g[\"return\"] = verb(2), typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\n  function verb(n) { return function (v) { return step([n, v]); }; }\n  function step(op) {\n      if (f) throw new TypeError(\"Generator is already executing.\");\n      while (g && (g = 0, op[0] && (_ = 0)), _) try {\n          if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\n          if (y = 0, t) op = [op[0] & 2, t.value];\n          switch (op[0]) {\n              case 0: case 1: t = op; break;\n              case 4: _.label++; return { value: op[1], done: false };\n              case 5: _.label++; y = op[1]; op = [0]; continue;\n              case 7: op = _.ops.pop(); _.trys.pop(); continue;\n              default:\n                  if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\n                  if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\n                  if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\n                  if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\n                  if (t[2]) _.ops.pop();\n                  _.trys.pop(); continue;\n          }\n          op = body.call(thisArg, _);\n      } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\n      if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\n  }\n}\n\nexport var __createBinding = Object.create ? (function(o, m, k, k2) {\n  if (k2 === undefined) k2 = k;\n  var desc = Object.getOwnPropertyDescriptor(m, k);\n  if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\n      desc = { enumerable: true, get: function() { return m[k]; } };\n  }\n  Object.defineProperty(o, k2, desc);\n}) : (function(o, m, k, k2) {\n  if (k2 === undefined) k2 = k;\n  o[k2] = m[k];\n});\n\nexport function __exportStar(m, o) {\n  for (var p in m) if (p !== \"default\" && !Object.prototype.hasOwnProperty.call(o, p)) __createBinding(o, m, p);\n}\n\nexport function __values(o) {\n  var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\n  if (m) return m.call(o);\n  if (o && typeof o.length === \"number\") return {\n      next: function () {\n          if (o && i >= o.length) o = void 0;\n          return { value: o && o[i++], done: !o };\n      }\n  };\n  throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\n}\n\nexport function __read(o, n) {\n  var m = typeof Symbol === \"function\" && o[Symbol.iterator];\n  if (!m) return o;\n  var i = m.call(o), r, ar = [], e;\n  try {\n      while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\n  }\n  catch (error) { e = { error: error }; }\n  finally {\n      try {\n          if (r && !r.done && (m = i[\"return\"])) m.call(i);\n      }\n      finally { if (e) throw e.error; }\n  }\n  return ar;\n}\n\n/** @deprecated */\nexport function __spread() {\n  for (var ar = [], i = 0; i < arguments.length; i++)\n      ar = ar.concat(__read(arguments[i]));\n  return ar;\n}\n\n/** @deprecated */\nexport function __spreadArrays() {\n  for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;\n  for (var r = Array(s), k = 0, i = 0; i < il; i++)\n      for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)\n          r[k] = a[j];\n  return r;\n}\n\nexport function __spreadArray(to, from, pack) {\n  if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {\n      if (ar || !(i in from)) {\n          if (!ar) ar = Array.prototype.slice.call(from, 0, i);\n          ar[i] = from[i];\n      }\n  }\n  return to.concat(ar || Array.prototype.slice.call(from));\n}\n\nexport function __await(v) {\n  return this instanceof __await ? (this.v = v, this) : new __await(v);\n}\n\nexport function __asyncGenerator(thisArg, _arguments, generator) {\n  if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\n  var g = generator.apply(thisArg, _arguments || []), i, q = [];\n  return i = Object.create((typeof AsyncIterator === \"function\" ? AsyncIterator : Object).prototype), verb(\"next\"), verb(\"throw\"), verb(\"return\", awaitReturn), i[Symbol.asyncIterator] = function () { return this; }, i;\n  function awaitReturn(f) { return function (v) { return Promise.resolve(v).then(f, reject); }; }\n  function verb(n, f) { if (g[n]) { i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; if (f) i[n] = f(i[n]); } }\n  function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }\n  function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }\n  function fulfill(value) { resume(\"next\", value); }\n  function reject(value) { resume(\"throw\", value); }\n  function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }\n}\n\nexport function __asyncDelegator(o) {\n  var i, p;\n  return i = {}, verb(\"next\"), verb(\"throw\", function (e) { throw e; }), verb(\"return\"), i[Symbol.iterator] = function () { return this; }, i;\n  function verb(n, f) { i[n] = o[n] ? function (v) { return (p = !p) ? { value: __await(o[n](v)), done: false } : f ? f(v) : v; } : f; }\n}\n\nexport function __asyncValues(o) {\n  if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\n  var m = o[Symbol.asyncIterator], i;\n  return m ? m.call(o) : (o = typeof __values === \"function\" ? __values(o) : o[Symbol.iterator](), i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i);\n  function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }\n  function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }\n}\n\nexport function __makeTemplateObject(cooked, raw) {\n  if (Object.defineProperty) { Object.defineProperty(cooked, \"raw\", { value: raw }); } else { cooked.raw = raw; }\n  return cooked;\n};\n\nvar __setModuleDefault = Object.create ? (function(o, v) {\n  Object.defineProperty(o, \"default\", { enumerable: true, value: v });\n}) : function(o, v) {\n  o[\"default\"] = v;\n};\n\nvar ownKeys = function(o) {\n  ownKeys = Object.getOwnPropertyNames || function (o) {\n    var ar = [];\n    for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;\n    return ar;\n  };\n  return ownKeys(o);\n};\n\nexport function __importStar(mod) {\n  if (mod && mod.__esModule) return mod;\n  var result = {};\n  if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== \"default\") __createBinding(result, mod, k[i]);\n  __setModuleDefault(result, mod);\n  return result;\n}\n\nexport function __importDefault(mod) {\n  return (mod && mod.__esModule) ? mod : { default: mod };\n}\n\nexport function __classPrivateFieldGet(receiver, state, kind, f) {\n  if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a getter\");\n  if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot read private member from an object whose class did not declare it\");\n  return kind === \"m\" ? f : kind === \"a\" ? f.call(receiver) : f ? f.value : state.get(receiver);\n}\n\nexport function __classPrivateFieldSet(receiver, state, value, kind, f) {\n  if (kind === \"m\") throw new TypeError(\"Private method is not writable\");\n  if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a setter\");\n  if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot write private member to an object whose class did not declare it\");\n  return (kind === \"a\" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;\n}\n\nexport function __classPrivateFieldIn(state, receiver) {\n  if (receiver === null || (typeof receiver !== \"object\" && typeof receiver !== \"function\")) throw new TypeError(\"Cannot use 'in' operator on non-object\");\n  return typeof state === \"function\" ? receiver === state : state.has(receiver);\n}\n\nexport function __addDisposableResource(env, value, async) {\n  if (value !== null && value !== void 0) {\n    if (typeof value !== \"object\" && typeof value !== \"function\") throw new TypeError(\"Object expected.\");\n    var dispose, inner;\n    if (async) {\n      if (!Symbol.asyncDispose) throw new TypeError(\"Symbol.asyncDispose is not defined.\");\n      dispose = value[Symbol.asyncDispose];\n    }\n    if (dispose === void 0) {\n      if (!Symbol.dispose) throw new TypeError(\"Symbol.dispose is not defined.\");\n      dispose = value[Symbol.dispose];\n      if (async) inner = dispose;\n    }\n    if (typeof dispose !== \"function\") throw new TypeError(\"Object not disposable.\");\n    if (inner) dispose = function() { try { inner.call(this); } catch (e) { return Promise.reject(e); } };\n    env.stack.push({ value: value, dispose: dispose, async: async });\n  }\n  else if (async) {\n    env.stack.push({ async: true });\n  }\n  return value;\n}\n\nvar _SuppressedError = typeof SuppressedError === \"function\" ? SuppressedError : function (error, suppressed, message) {\n  var e = new Error(message);\n  return e.name = \"SuppressedError\", e.error = error, e.suppressed = suppressed, e;\n};\n\nexport function __disposeResources(env) {\n  function fail(e) {\n    env.error = env.hasError ? new _SuppressedError(e, env.error, \"An error was suppressed during disposal.\") : e;\n    env.hasError = true;\n  }\n  var r, s = 0;\n  function next() {\n    while (r = env.stack.pop()) {\n      try {\n        if (!r.async && s === 1) return s = 0, env.stack.push(r), Promise.resolve().then(next);\n        if (r.dispose) {\n          var result = r.dispose.call(r.value);\n          if (r.async) return s |= 2, Promise.resolve(result).then(next, function(e) { fail(e); return next(); });\n        }\n        else s |= 1;\n      }\n      catch (e) {\n        fail(e);\n      }\n    }\n    if (s === 1) return env.hasError ? Promise.reject(env.error) : Promise.resolve();\n    if (env.hasError) throw env.error;\n  }\n  return next();\n}\n\nexport function __rewriteRelativeImportExtension(path, preserveJsx) {\n  if (typeof path === \"string\" && /^\\.\\.?\\//.test(path)) {\n      return path.replace(/\\.(tsx)$|((?:\\.d)?)((?:\\.[^./]+?)?)\\.([cm]?)ts$/i, function (m, tsx, d, ext, cm) {\n          return tsx ? preserveJsx ? \".jsx\" : \".js\" : d && (!ext || !cm) ? m : (d + ext + \".\" + cm.toLowerCase() + \"js\");\n      });\n  }\n  return path;\n}\n\nexport default {\n  __extends,\n  __assign,\n  __rest,\n  __decorate,\n  __param,\n  __esDecorate,\n  __runInitializers,\n  __propKey,\n  __setFunctionName,\n  __metadata,\n  __awaiter,\n  __generator,\n  __createBinding,\n  __exportStar,\n  __values,\n  __read,\n  __spread,\n  __spreadArrays,\n  __spreadArray,\n  __await,\n  __asyncGenerator,\n  __asyncDelegator,\n  __asyncValues,\n  __makeTemplateObject,\n  __importStar,\n  __importDefault,\n  __classPrivateFieldGet,\n  __classPrivateFieldSet,\n  __classPrivateFieldIn,\n  __addDisposableResource,\n  __disposeResources,\n  __rewriteRelativeImportExtension,\n};\n","import isFunction from './is-function';\n/**\n * _.memoize(calColor);\n * _.memoize(calColor, (...args) => args[0]);\n * @param f\n * @param resolver\n */\nexport default (function (f, resolver) {\n    if (!isFunction(f)) {\n        throw new TypeError('Expected a function');\n    }\n    var memoized = function () {\n        var args = [];\n        for (var _i = 0; _i < arguments.length; _i++) {\n            args[_i] = arguments[_i];\n        }\n        // 使用方法构造 key，如果不存在 resolver，则直接取第一个参数作为 key\n        var key = resolver ? resolver.apply(this, args) : args[0];\n        var cache = memoized.cache;\n        if (cache.has(key)) {\n            return cache.get(key);\n        }\n        var result = f.apply(this, args);\n        // 缓存起来\n        cache.set(key, result);\n        return result;\n    };\n    memoized.cache = new Map();\n    return memoized;\n});\n//# sourceMappingURL=memoize.js.map","/**\n * k-v 存储\n */\nvar default_1 = /** @class */ (function () {\n    function default_1() {\n        this.map = {};\n    }\n    default_1.prototype.has = function (key) {\n        return this.map[key] !== undefined;\n    };\n    default_1.prototype.get = function (key, def) {\n        var v = this.map[key];\n        return v === undefined ? def : v;\n    };\n    default_1.prototype.set = function (key, value) {\n        this.map[key] = value;\n    };\n    default_1.prototype.clear = function () {\n        this.map = {};\n    };\n    default_1.prototype.delete = function (key) {\n        delete this.map[key];\n    };\n    default_1.prototype.size = function () {\n        return Object.keys(this.map).length;\n    };\n    return default_1;\n}());\nexport default default_1;\n//# sourceMappingURL=cache.js.map","import * as _ from '@antv/util';\nimport { DEFAULT_Y } from '../constant';\nvar Adjust = /** @class */ (function () {\n    function Adjust(cfg) {\n        var xField = cfg.xField, yField = cfg.yField, _a = cfg.adjustNames, adjustNames = _a === void 0 ? ['x', 'y'] : _a, dimValuesMap = cfg.dimValuesMap;\n        this.adjustNames = adjustNames;\n        this.xField = xField;\n        this.yField = yField;\n        this.dimValuesMap = dimValuesMap;\n    }\n    /**\n     * 查看维度是否是 adjust 字段\n     * @param dim\n     */\n    Adjust.prototype.isAdjust = function (dim) {\n        return this.adjustNames.indexOf(dim) >= 0;\n    };\n    Adjust.prototype.getAdjustRange = function (dim, dimValue, values) {\n        var yField = this.yField;\n        var index = values.indexOf(dimValue);\n        var length = values.length;\n        var pre;\n        var next;\n        // 没有 y 字段，但是需要根据 y 调整\n        if (!yField && this.isAdjust('y')) {\n            pre = 0;\n            next = 1;\n        }\n        else if (length > 1) {\n            // 如果以其开头，则取之，否则取他前面一个\n            pre = values[index === 0 ? 0 : index - 1];\n            // 如果以其结尾，则取之，否则取他后面一个\n            next = values[index === length - 1 ? length - 1 : index + 1];\n            if (index !== 0) {\n                pre += (dimValue - pre) / 2;\n            }\n            else {\n                pre -= (next - dimValue) / 2;\n            }\n            if (index !== length - 1) {\n                next -= (next - dimValue) / 2;\n            }\n            else {\n                next += (dimValue - values[length - 2]) / 2;\n            }\n        }\n        else {\n            pre = dimValue === 0 ? 0 : dimValue - 0.5;\n            next = dimValue === 0 ? 1 : dimValue + 0.5;\n        }\n        return {\n            pre: pre,\n            next: next,\n        };\n    };\n    Adjust.prototype.adjustData = function (groupedDataArray, mergedData) {\n        var _this = this;\n        // 所有调整维度的值数组\n        var dimValuesMap = this.getDimValues(mergedData);\n        // 按照每一个分组来进行调整\n        _.each(groupedDataArray, function (dataArray, index) {\n            // 遍历所有数据集合\n            // 每个分组中，分别按照不同的 dim 进行调整\n            _.each(dimValuesMap, function (values, dim) {\n                // 根据不同的度量分别调整位置\n                _this.adjustDim(dim, values, dataArray, index);\n            });\n        });\n    };\n    /**\n     * 对数据进行分组adjustData\n     * @param data 数据\n     * @param dim 分组的字段\n     * @return 分组结果\n     */\n    Adjust.prototype.groupData = function (data, dim) {\n        // 补齐数据空数据为默认值\n        _.each(data, function (record) {\n            if (record[dim] === undefined) {\n                record[dim] = DEFAULT_Y;\n            }\n        });\n        // 按照 dim 维度分组\n        return _.groupBy(data, dim);\n    };\n    /** @override */\n    Adjust.prototype.adjustDim = function (dim, values, data, index) { };\n    /**\n     * 获取可调整度量对应的值\n     * @param mergedData 数据\n     * @return 值的映射\n     */\n    Adjust.prototype.getDimValues = function (mergedData) {\n        var _a = this, xField = _a.xField, yField = _a.yField;\n        var dimValuesMap = _.assign({}, this.dimValuesMap);\n        // 所有的维度\n        var dims = [];\n        if (xField && this.isAdjust('x')) {\n            dims.push(xField);\n        }\n        if (yField && this.isAdjust('y')) {\n            dims.push(yField);\n        }\n        dims.forEach(function (dim) {\n            if (dimValuesMap && dimValuesMap[dim]) {\n                return;\n            }\n            // 在每个维度上，所有的值\n            dimValuesMap[dim] = _.valuesOfKey(mergedData, dim).sort(function (v1, v2) { return v1 - v2; });\n        });\n        // 只有一维的情况下，同时调整 y，赋予默认值\n        if (!yField && this.isAdjust('y')) {\n            var dim = 'y';\n            dimValuesMap[dim] = [DEFAULT_Y, 1]; // 默认分布在 y 轴的 0 与 1 之间\n        }\n        return dimValuesMap;\n    };\n    return Adjust;\n}());\nexport default Adjust;\n//# sourceMappingURL=adjust.js.map","export var DEFAULT_Y = 0; // 默认的 y 的值\n// 偏移之后，间距\nexport var MARGIN_RATIO = 1 / 2;\nexport var DODGE_RATIO = 1 / 2;\n// 散点分开之后，距离边界的距离\nexport var GAP = 0.05;\n//# sourceMappingURL=constant.js.map","// FIXME: Mutable param should be forbidden in static lang.\nfunction _mix(dist, obj) {\n    for (var key in obj) {\n        if (obj.hasOwnProperty(key) && key !== 'constructor' && obj[key] !== undefined) {\n            dist[key] = obj[key];\n        }\n    }\n}\nexport default function mix(dist, src1, src2, src3) {\n    if (src1)\n        _mix(dist, src1);\n    if (src2)\n        _mix(dist, src2);\n    if (src3)\n        _mix(dist, src3);\n    return dist;\n}\n//# sourceMappingURL=mix.js.map","import Adjust from './adjusts/adjust';\nvar ADJUST_MAP = {};\n/**\n * 根据类型获取 Adjust 类\n * @param type\n */\nvar getAdjust = function (type) {\n    return ADJUST_MAP[type.toLowerCase()];\n};\n/**\n * 注册自定义 Adjust\n * @param type\n * @param ctor\n */\nvar registerAdjust = function (type, ctor) {\n    // 注册的时候，需要校验 type 重名，不区分大小写\n    if (getAdjust(type)) {\n        throw new Error(\"Adjust type '\" + type + \"' existed.\");\n    }\n    // 存储到 map 中\n    ADJUST_MAP[type.toLowerCase()] = ctor;\n};\nexport { getAdjust, registerAdjust, Adjust };\nexport * from './interface';\n//# sourceMappingURL=factory.js.map","/*! *****************************************************************************\r\nCopyright (c) Microsoft Corporation.\r\n\r\nPermission to use, copy, modify, and/or distribute this software for any\r\npurpose with or without fee is hereby granted.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\r\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\r\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\r\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\r\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\r\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\r\nPERFORMANCE OF THIS SOFTWARE.\r\n***************************************************************************** */\r\n/* global Reflect, Promise */\r\n\r\nvar extendStatics = function(d, b) {\r\n    extendStatics = Object.setPrototypeOf ||\r\n        ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n        function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\r\n    return extendStatics(d, b);\r\n};\r\n\r\nexport function __extends(d, b) {\r\n    extendStatics(d, b);\r\n    function __() { this.constructor = d; }\r\n    d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n}\r\n\r\nexport var __assign = function() {\r\n    __assign = Object.assign || function __assign(t) {\r\n        for (var s, i = 1, n = arguments.length; i < n; i++) {\r\n            s = arguments[i];\r\n            for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\r\n        }\r\n        return t;\r\n    }\r\n    return __assign.apply(this, arguments);\r\n}\r\n\r\nexport function __rest(s, e) {\r\n    var t = {};\r\n    for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\r\n        t[p] = s[p];\r\n    if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\r\n        for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\r\n            if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\r\n                t[p[i]] = s[p[i]];\r\n        }\r\n    return t;\r\n}\r\n\r\nexport function __decorate(decorators, target, key, desc) {\r\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n}\r\n\r\nexport function __param(paramIndex, decorator) {\r\n    return function (target, key) { decorator(target, key, paramIndex); }\r\n}\r\n\r\nexport function __metadata(metadataKey, metadataValue) {\r\n    if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(metadataKey, metadataValue);\r\n}\r\n\r\nexport function __awaiter(thisArg, _arguments, P, generator) {\r\n    function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\r\n    return new (P || (P = Promise))(function (resolve, reject) {\r\n        function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\r\n        function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\r\n        function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\r\n        step((generator = generator.apply(thisArg, _arguments || [])).next());\r\n    });\r\n}\r\n\r\nexport function __generator(thisArg, body) {\r\n    var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\r\n    return g = { next: verb(0), \"throw\": verb(1), \"return\": verb(2) }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\r\n    function verb(n) { return function (v) { return step([n, v]); }; }\r\n    function step(op) {\r\n        if (f) throw new TypeError(\"Generator is already executing.\");\r\n        while (_) try {\r\n            if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\r\n            if (y = 0, t) op = [op[0] & 2, t.value];\r\n            switch (op[0]) {\r\n                case 0: case 1: t = op; break;\r\n                case 4: _.label++; return { value: op[1], done: false };\r\n                case 5: _.label++; y = op[1]; op = [0]; continue;\r\n                case 7: op = _.ops.pop(); _.trys.pop(); continue;\r\n                default:\r\n                    if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\r\n                    if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\r\n                    if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\r\n                    if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\r\n                    if (t[2]) _.ops.pop();\r\n                    _.trys.pop(); continue;\r\n            }\r\n            op = body.call(thisArg, _);\r\n        } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\r\n        if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\r\n    }\r\n}\r\n\r\nexport function __createBinding(o, m, k, k2) {\r\n    if (k2 === undefined) k2 = k;\r\n    o[k2] = m[k];\r\n}\r\n\r\nexport function __exportStar(m, exports) {\r\n    for (var p in m) if (p !== \"default\" && !exports.hasOwnProperty(p)) exports[p] = m[p];\r\n}\r\n\r\nexport function __values(o) {\r\n    var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\r\n    if (m) return m.call(o);\r\n    if (o && typeof o.length === \"number\") return {\r\n        next: function () {\r\n            if (o && i >= o.length) o = void 0;\r\n            return { value: o && o[i++], done: !o };\r\n        }\r\n    };\r\n    throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\r\n}\r\n\r\nexport function __read(o, n) {\r\n    var m = typeof Symbol === \"function\" && o[Symbol.iterator];\r\n    if (!m) return o;\r\n    var i = m.call(o), r, ar = [], e;\r\n    try {\r\n        while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\r\n    }\r\n    catch (error) { e = { error: error }; }\r\n    finally {\r\n        try {\r\n            if (r && !r.done && (m = i[\"return\"])) m.call(i);\r\n        }\r\n        finally { if (e) throw e.error; }\r\n    }\r\n    return ar;\r\n}\r\n\r\nexport function __spread() {\r\n    for (var ar = [], i = 0; i < arguments.length; i++)\r\n        ar = ar.concat(__read(arguments[i]));\r\n    return ar;\r\n}\r\n\r\nexport function __spreadArrays() {\r\n    for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;\r\n    for (var r = Array(s), k = 0, i = 0; i < il; i++)\r\n        for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)\r\n            r[k] = a[j];\r\n    return r;\r\n};\r\n\r\nexport function __await(v) {\r\n    return this instanceof __await ? (this.v = v, this) : new __await(v);\r\n}\r\n\r\nexport function __asyncGenerator(thisArg, _arguments, generator) {\r\n    if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n    var g = generator.apply(thisArg, _arguments || []), i, q = [];\r\n    return i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i;\r\n    function verb(n) { if (g[n]) i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; }\r\n    function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }\r\n    function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }\r\n    function fulfill(value) { resume(\"next\", value); }\r\n    function reject(value) { resume(\"throw\", value); }\r\n    function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }\r\n}\r\n\r\nexport function __asyncDelegator(o) {\r\n    var i, p;\r\n    return i = {}, verb(\"next\"), verb(\"throw\", function (e) { throw e; }), verb(\"return\"), i[Symbol.iterator] = function () { return this; }, i;\r\n    function verb(n, f) { i[n] = o[n] ? function (v) { return (p = !p) ? { value: __await(o[n](v)), done: n === \"return\" } : f ? f(v) : v; } : f; }\r\n}\r\n\r\nexport function __asyncValues(o) {\r\n    if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n    var m = o[Symbol.asyncIterator], i;\r\n    return m ? m.call(o) : (o = typeof __values === \"function\" ? __values(o) : o[Symbol.iterator](), i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i);\r\n    function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }\r\n    function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }\r\n}\r\n\r\nexport function __makeTemplateObject(cooked, raw) {\r\n    if (Object.defineProperty) { Object.defineProperty(cooked, \"raw\", { value: raw }); } else { cooked.raw = raw; }\r\n    return cooked;\r\n};\r\n\r\nexport function __importStar(mod) {\r\n    if (mod && mod.__esModule) return mod;\r\n    var result = {};\r\n    if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k];\r\n    result.default = mod;\r\n    return result;\r\n}\r\n\r\nexport function __importDefault(mod) {\r\n    return (mod && mod.__esModule) ? mod : { default: mod };\r\n}\r\n\r\nexport function __classPrivateFieldGet(receiver, privateMap) {\r\n    if (!privateMap.has(receiver)) {\r\n        throw new TypeError(\"attempted to get private field on non-instance\");\r\n    }\r\n    return privateMap.get(receiver);\r\n}\r\n\r\nexport function __classPrivateFieldSet(receiver, privateMap, value) {\r\n    if (!privateMap.has(receiver)) {\r\n        throw new TypeError(\"attempted to set private field on non-instance\");\r\n    }\r\n    privateMap.set(receiver, value);\r\n    return value;\r\n}\r\n","import { __extends } from \"tslib\";\nimport * as _ from '@antv/util';\nimport { DODGE_RATIO, MARGIN_RATIO } from '../constant';\nimport Adjust from './adjust';\nvar Dodge = /** @class */ (function (_super) {\n    __extends(Dodge, _super);\n    function Dodge(cfg) {\n        var _this = _super.call(this, cfg) || this;\n        _this.cacheMap = {};\n        _this.adjustDataArray = [];\n        _this.mergeData = [];\n        var _a = cfg.marginRatio, marginRatio = _a === void 0 ? MARGIN_RATIO : _a, _b = cfg.dodgeRatio, dodgeRatio = _b === void 0 ? DODGE_RATIO : _b, dodgeBy = cfg.dodgeBy, intervalPadding = cfg.intervalPadding, dodgePadding = cfg.dodgePadding, xDimensionLength = cfg.xDimensionLength, groupNum = cfg.groupNum, defaultSize = cfg.defaultSize, maxColumnWidth = cfg.maxColumnWidth, minColumnWidth = cfg.minColumnWidth, columnWidthRatio = cfg.columnWidthRatio, customOffset = cfg.customOffset;\n        _this.marginRatio = marginRatio;\n        _this.dodgeRatio = dodgeRatio;\n        _this.dodgeBy = dodgeBy;\n        _this.intervalPadding = intervalPadding;\n        _this.dodgePadding = dodgePadding;\n        _this.xDimensionLegenth = xDimensionLength;\n        _this.groupNum = groupNum;\n        _this.defaultSize = defaultSize;\n        _this.maxColumnWidth = maxColumnWidth;\n        _this.minColumnWidth = minColumnWidth;\n        _this.columnWidthRatio = columnWidthRatio;\n        _this.customOffset = customOffset;\n        return _this;\n    }\n    Dodge.prototype.process = function (groupDataArray) {\n        var groupedDataArray = _.clone(groupDataArray);\n        // 将数据数组展开一层\n        var mergeData = _.flatten(groupedDataArray);\n        var dodgeBy = this.dodgeBy;\n        // 如果指定了分组 dim 的字段\n        var adjustDataArray = dodgeBy ? _.group(mergeData, dodgeBy) : groupedDataArray;\n        this.cacheMap = {};\n        this.adjustDataArray = adjustDataArray;\n        this.mergeData = mergeData;\n        this.adjustData(adjustDataArray, mergeData);\n        this.adjustDataArray = [];\n        this.mergeData = [];\n        return groupedDataArray;\n    };\n    Dodge.prototype.adjustDim = function (dim, values, data, frameIndex) {\n        var _this = this;\n        var customOffset = this.customOffset;\n        var map = this.getDistribution(dim);\n        var groupData = this.groupData(data, dim); // 根据值分组\n        _.each(groupData, function (group, key) {\n            var range;\n            // xField 中只有一个值，不需要做 dodge\n            if (values.length === 1) {\n                range = {\n                    pre: values[0] - 1,\n                    next: values[0] + 1,\n                };\n            }\n            else {\n                // 如果有多个，则需要获取调整的范围\n                range = _this.getAdjustRange(dim, parseFloat(key), values);\n            }\n            _.each(group, function (d) {\n                var value = d[dim];\n                var valueArr = map[value];\n                var valIndex = valueArr.indexOf(frameIndex);\n                if (!_.isNil(customOffset)) {\n                    var pre = range.pre, next = range.next;\n                    d[dim] = _.isFunction(customOffset) ? customOffset(d, range) : (pre + next) / 2 + customOffset;\n                }\n                else {\n                    d[dim] = _this.getDodgeOffset(range, valIndex, valueArr.length);\n                }\n            });\n        });\n        return [];\n    };\n    Dodge.prototype.getDodgeOffset = function (range, idx, len) {\n        var _a = this, dodgeRatio = _a.dodgeRatio, marginRatio = _a.marginRatio, intervalPadding = _a.intervalPadding, dodgePadding = _a.dodgePadding;\n        var pre = range.pre, next = range.next;\n        var tickLength = next - pre;\n        var position;\n        // 分多种输入情况\n        if (!_.isNil(intervalPadding) && _.isNil(dodgePadding) && intervalPadding >= 0) {\n            // 仅配置intervalPadding\n            var offset = this.getIntervalOnlyOffset(len, idx);\n            position = pre + offset;\n        }\n        else if (!_.isNil(dodgePadding) && _.isNil(intervalPadding) && dodgePadding >= 0) {\n            // 仅配置dodgePadding\n            var offset = this.getDodgeOnlyOffset(len, idx);\n            position = pre + offset;\n        }\n        else if (!_.isNil(intervalPadding) &&\n            !_.isNil(dodgePadding) &&\n            intervalPadding >= 0 &&\n            dodgePadding >= 0) {\n            // 同时配置intervalPadding和dodgePadding\n            var offset = this.getIntervalAndDodgeOffset(len, idx);\n            position = pre + offset;\n        }\n        else {\n            // 默认情况\n            var width = (tickLength * dodgeRatio) / len;\n            var margin = marginRatio * width;\n            var offset = (1 / 2) * (tickLength - len * width - (len - 1) * margin) +\n                ((idx + 1) * width + idx * margin) -\n                (1 / 2) * width -\n                (1 / 2) * tickLength;\n            position = (pre + next) / 2 + offset;\n        }\n        return position;\n    };\n    Dodge.prototype.getIntervalOnlyOffset = function (len, idx) {\n        var _a = this, defaultSize = _a.defaultSize, intervalPadding = _a.intervalPadding, xDimensionLegenth = _a.xDimensionLegenth, groupNum = _a.groupNum, dodgeRatio = _a.dodgeRatio, maxColumnWidth = _a.maxColumnWidth, minColumnWidth = _a.minColumnWidth, columnWidthRatio = _a.columnWidthRatio;\n        var normalizedIntervalPadding = intervalPadding / xDimensionLegenth;\n        var normalizedDodgePadding = (1 - (groupNum - 1) * normalizedIntervalPadding) / groupNum * dodgeRatio / (len - 1);\n        var geomWidth = ((1 - normalizedIntervalPadding * (groupNum - 1)) / groupNum - normalizedDodgePadding * (len - 1)) / len;\n        // 根据columnWidthRatio/defaultSize/maxColumnWidth/minColumnWidth调整宽度\n        geomWidth = (!_.isNil(columnWidthRatio)) ? 1 / groupNum / len * columnWidthRatio : geomWidth;\n        if (!_.isNil(maxColumnWidth)) {\n            var normalizedMaxWidht = maxColumnWidth / xDimensionLegenth;\n            geomWidth = Math.min(geomWidth, normalizedMaxWidht);\n        }\n        if (!_.isNil(minColumnWidth)) {\n            var normalizedMinWidht = minColumnWidth / xDimensionLegenth;\n            geomWidth = Math.max(geomWidth, normalizedMinWidht);\n        }\n        geomWidth = defaultSize ? (defaultSize / xDimensionLegenth) : geomWidth;\n        // 调整组内间隔\n        normalizedDodgePadding = ((1 - (groupNum - 1) * normalizedIntervalPadding) / groupNum - len * geomWidth) / (len - 1);\n        var offset = ((1 / 2 + idx) * geomWidth + idx * normalizedDodgePadding +\n            (1 / 2) * normalizedIntervalPadding) * groupNum -\n            normalizedIntervalPadding / 2;\n        return offset;\n    };\n    Dodge.prototype.getDodgeOnlyOffset = function (len, idx) {\n        var _a = this, defaultSize = _a.defaultSize, dodgePadding = _a.dodgePadding, xDimensionLegenth = _a.xDimensionLegenth, groupNum = _a.groupNum, marginRatio = _a.marginRatio, maxColumnWidth = _a.maxColumnWidth, minColumnWidth = _a.minColumnWidth, columnWidthRatio = _a.columnWidthRatio;\n        var normalizedDodgePadding = dodgePadding / xDimensionLegenth;\n        var normalizedIntervalPadding = 1 * marginRatio / (groupNum - 1);\n        var geomWidth = ((1 - normalizedIntervalPadding * (groupNum - 1)) / groupNum - normalizedDodgePadding * (len - 1)) / len;\n        // 根据columnWidthRatio/defaultSize/maxColumnWidth/minColumnWidth调整宽度\n        geomWidth = columnWidthRatio ? 1 / groupNum / len * columnWidthRatio : geomWidth;\n        if (!_.isNil(maxColumnWidth)) {\n            var normalizedMaxWidht = maxColumnWidth / xDimensionLegenth;\n            geomWidth = Math.min(geomWidth, normalizedMaxWidht);\n        }\n        if (!_.isNil(minColumnWidth)) {\n            var normalizedMinWidht = minColumnWidth / xDimensionLegenth;\n            geomWidth = Math.max(geomWidth, normalizedMinWidht);\n        }\n        geomWidth = defaultSize ? (defaultSize / xDimensionLegenth) : geomWidth;\n        // 调整组间距\n        normalizedIntervalPadding = (1 - (geomWidth * len + normalizedDodgePadding * (len - 1)) * groupNum) / (groupNum - 1);\n        var offset = ((1 / 2 + idx) * geomWidth + idx * normalizedDodgePadding +\n            (1 / 2) * normalizedIntervalPadding) * groupNum -\n            normalizedIntervalPadding / 2;\n        return offset;\n    };\n    Dodge.prototype.getIntervalAndDodgeOffset = function (len, idx) {\n        var _a = this, intervalPadding = _a.intervalPadding, dodgePadding = _a.dodgePadding, xDimensionLegenth = _a.xDimensionLegenth, groupNum = _a.groupNum;\n        var normalizedIntervalPadding = intervalPadding / xDimensionLegenth;\n        var normalizedDodgePadding = dodgePadding / xDimensionLegenth;\n        var geomWidth = ((1 - normalizedIntervalPadding * (groupNum - 1)) / groupNum - normalizedDodgePadding * (len - 1)) / len;\n        var offset = ((1 / 2 + idx) * geomWidth + idx * normalizedDodgePadding +\n            (1 / 2) * normalizedIntervalPadding) * groupNum -\n            normalizedIntervalPadding / 2;\n        return offset;\n    };\n    Dodge.prototype.getDistribution = function (dim) {\n        var groupedDataArray = this.adjustDataArray;\n        var cacheMap = this.cacheMap;\n        var map = cacheMap[dim];\n        if (!map) {\n            map = {};\n            _.each(groupedDataArray, function (data, index) {\n                var values = _.valuesOfKey(data, dim);\n                if (!values.length) {\n                    values.push(0);\n                }\n                _.each(values, function (val) {\n                    if (!map[val]) {\n                        map[val] = [];\n                    }\n                    map[val].push(index);\n                });\n            });\n            cacheMap[dim] = map;\n        }\n        return map;\n    };\n    return Dodge;\n}(Adjust));\nexport default Dodge;\n//# sourceMappingURL=dodge.js.map","import { __extends } from \"tslib\";\nimport * as _ from '@antv/util';\nimport { GAP } from '../constant';\nimport Adjust from './adjust';\nfunction randomNumber(min, max) {\n    return (max - min) * Math.random() + min;\n}\nvar Jitter = /** @class */ (function (_super) {\n    __extends(Jitter, _super);\n    function Jitter() {\n        return _super !== null && _super.apply(this, arguments) || this;\n    }\n    Jitter.prototype.process = function (groupDataArray) {\n        var groupedDataArray = _.clone(groupDataArray);\n        // 之前分组之后的数据，然后有合并回去（和分组前可以理解成是一样的）\n        var mergeData = _.flatten(groupedDataArray);\n        // 返回值\n        this.adjustData(groupedDataArray, mergeData);\n        return groupedDataArray;\n    };\n    /**\n     * 当前数据分组（index）中，按照维度 dim 进行 jitter 调整\n     * @param dim\n     * @param values\n     * @param dataArray\n     */\n    Jitter.prototype.adjustDim = function (dim, values, dataArray) {\n        var _this = this;\n        // 在每一个分组中，将数据再按照 dim 分组，用于散列\n        var groupDataArray = this.groupData(dataArray, dim);\n        return _.each(groupDataArray, function (data, dimValue) {\n            return _this.adjustGroup(data, dim, parseFloat(dimValue), values);\n        });\n    };\n    // 随机出来的字段值\n    Jitter.prototype.getAdjustOffset = function (range) {\n        var pre = range.pre, next = range.next;\n        // 随机的范围\n        var margin = (next - pre) * GAP;\n        return randomNumber(pre + margin, next - margin);\n    };\n    // adjust group data\n    Jitter.prototype.adjustGroup = function (group, dim, dimValue, values) {\n        var _this = this;\n        // 调整范围\n        var range = this.getAdjustRange(dim, dimValue, values);\n        _.each(group, function (data) {\n            data[dim] = _this.getAdjustOffset(range); // 获取调整的位置\n        });\n        return group;\n    };\n    return Jitter;\n}(Adjust));\nexport default Jitter;\n//# sourceMappingURL=jitter.js.map","import { __assign, __extends } from \"tslib\";\nimport * as _ from '@antv/util';\nimport Adjust from './adjust';\nvar Cache = _.Cache;\nvar Stack = /** @class */ (function (_super) {\n    __extends(Stack, _super);\n    function Stack(cfg) {\n        var _this = _super.call(this, cfg) || this;\n        var _a = cfg.adjustNames, adjustNames = _a === void 0 ? ['y'] : _a, _b = cfg.height, height = _b === void 0 ? NaN : _b, _c = cfg.size, size = _c === void 0 ? 10 : _c, _d = cfg.reverseOrder, reverseOrder = _d === void 0 ? false : _d;\n        _this.adjustNames = adjustNames;\n        _this.height = height;\n        _this.size = size;\n        _this.reverseOrder = reverseOrder;\n        return _this;\n    }\n    /**\n     * 方法入参是经过数据分组、数据数字化之后的二维数组\n     * @param groupDataArray 分组之后的数据\n     */\n    Stack.prototype.process = function (groupDataArray) {\n        var _a = this, yField = _a.yField, reverseOrder = _a.reverseOrder;\n        // 如果有指定 y 字段，那么按照 y 字段来 stack\n        // 否则，按照高度均分\n        var d = yField ? this.processStack(groupDataArray) : this.processOneDimStack(groupDataArray);\n        return reverseOrder ? this.reverse(d) : d;\n    };\n    Stack.prototype.reverse = function (groupedDataArray) {\n        return groupedDataArray.slice(0).reverse();\n    };\n    Stack.prototype.processStack = function (groupDataArray) {\n        var _a = this, xField = _a.xField, yField = _a.yField, reverseOrder = _a.reverseOrder;\n        // 层叠顺序翻转\n        var groupedDataArray = reverseOrder ? this.reverse(groupDataArray) : groupDataArray;\n        // 用来缓存，正数和负数的堆叠问题\n        var positive = new Cache();\n        var negative = new Cache();\n        return groupedDataArray.map(function (dataArray) {\n            return dataArray.map(function (data) {\n                var _a;\n                var x = _.get(data, xField, 0);\n                var y = _.get(data, [yField]);\n                var xKey = x.toString();\n                // todo 是否应该取 _origin？因为 y 可能取到的值不正确，比如先 symmetric，再 stack！\n                y = _.isArray(y) ? y[1] : y;\n                if (!_.isNil(y)) {\n                    var cache = y >= 0 ? positive : negative;\n                    if (!cache.has(xKey)) {\n                        cache.set(xKey, 0);\n                    }\n                    var xValue = cache.get(xKey);\n                    var newXValue = y + xValue;\n                    // 存起来\n                    cache.set(xKey, newXValue);\n                    return __assign(__assign({}, data), (_a = {}, _a[yField] = [xValue, newXValue], _a));\n                }\n                // 没有修改，则直接返回\n                return data;\n            });\n        });\n    };\n    Stack.prototype.processOneDimStack = function (groupDataArray) {\n        var _this = this;\n        var _a = this, xField = _a.xField, height = _a.height, reverseOrder = _a.reverseOrder;\n        var yField = 'y';\n        // 如果层叠的顺序翻转\n        var groupedDataArray = reverseOrder ? this.reverse(groupDataArray) : groupDataArray;\n        // 缓存累加数据\n        var cache = new Cache();\n        return groupedDataArray.map(function (dataArray) {\n            return dataArray.map(function (data) {\n                var _a;\n                var size = _this.size;\n                var xValue = data[xField];\n                // todo 没有看到这个 stack 计算原理\n                var stackHeight = (size * 2) / height;\n                if (!cache.has(xValue)) {\n                    cache.set(xValue, stackHeight / 2); // 初始值大小\n                }\n                var stackValue = cache.get(xValue);\n                // 增加一层 stackHeight\n                cache.set(xValue, stackValue + stackHeight);\n                return __assign(__assign({}, data), (_a = {}, _a[yField] = stackValue, _a));\n            });\n        });\n    };\n    return Stack;\n}(Adjust));\nexport default Stack;\n//# sourceMappingURL=stack.js.map","import { __assign, __extends } from \"tslib\";\nimport * as _ from '@antv/util';\nimport Adjust from './adjust';\nvar Symmetric = /** @class */ (function (_super) {\n    __extends(Symmetric, _super);\n    function Symmetric() {\n        return _super !== null && _super.apply(this, arguments) || this;\n    }\n    Symmetric.prototype.process = function (groupDataArray) {\n        var mergeData = _.flatten(groupDataArray);\n        var _a = this, xField = _a.xField, yField = _a.yField;\n        // 每个 x 值对应的 最大值\n        var cache = this.getXValuesMaxMap(mergeData);\n        // 所有数据的最大的值\n        var max = Math.max.apply(Math, Object.keys(cache).map(function (key) { return cache[key]; }));\n        return _.map(groupDataArray, function (dataArray) {\n            return _.map(dataArray, function (data) {\n                var _a, _b;\n                var yValue = data[yField];\n                var xValue = data[xField];\n                // 数组处理逻辑\n                if (_.isArray(yValue)) {\n                    var off_1 = (max - cache[xValue]) / 2;\n                    return __assign(__assign({}, data), (_a = {}, _a[yField] = _.map(yValue, function (y) { return off_1 + y; }), _a));\n                }\n                // 非数组处理逻辑\n                var offset = (max - yValue) / 2;\n                return __assign(__assign({}, data), (_b = {}, _b[yField] = [offset, yValue + offset], _b));\n            });\n        });\n    };\n    // 获取每个 x 对应的最大的值\n    Symmetric.prototype.getXValuesMaxMap = function (mergeData) {\n        var _this = this;\n        var _a = this, xField = _a.xField, yField = _a.yField;\n        // 根据 xField 的值进行分组\n        var groupDataArray = _.groupBy(mergeData, function (data) { return data[xField]; });\n        // 获取每个 xField 值中的最大值\n        return _.mapValues(groupDataArray, function (dataArray) { return _this.getDimMaxValue(dataArray, yField); });\n    };\n    Symmetric.prototype.getDimMaxValue = function (mergeData, dim) {\n        // 所有的 value 值\n        var dimValues = _.map(mergeData, function (data) { return _.get(data, dim, []); });\n        // 将数组打平（dim value 有可能是数组，比如 stack 之后的）\n        var flattenValues = _.flatten(dimValues);\n        // 求出数组的最大值\n        return Math.max.apply(Math, flattenValues);\n    };\n    return Symmetric;\n}(Adjust));\nexport default Symmetric;\n//# sourceMappingURL=symmetric.js.map","import { getAdjust, registerAdjust } from './factory';\nimport Adjust from './adjusts/adjust';\nimport Dodge from './adjusts/dodge';\nimport Jitter from './adjusts/jitter';\nimport Stack from './adjusts/stack';\nimport Symmetric from './adjusts/symmetric';\n// 注册内置的 adjust\nregisterAdjust('Dodge', Dodge);\nregisterAdjust('Jitter', Jitter);\nregisterAdjust('Stack', Stack);\nregisterAdjust('Symmetric', Symmetric);\n// 最终暴露给外部的方法\nexport { getAdjust, registerAdjust, Adjust };\nexport * from './interface';\n//# sourceMappingURL=index.js.map","var isArrayLike = function (value) {\n    /**\n     * isArrayLike([1, 2, 3]) => true\n     * isArrayLike(document.body.children) => true\n     * isArrayLike('abc') => true\n     * isArrayLike(Function) => false\n     */\n    return value !== null && typeof value !== 'function' && isFinite(value.length);\n};\nexport default isArrayLike;\n//# sourceMappingURL=is-array-like.js.map","import isArrayLike from './is-array-like';\nvar filter = function (arr, func) {\n    if (!isArrayLike(arr)) {\n        return arr;\n    }\n    var result = [];\n    for (var index = 0; index < arr.length; index++) {\n        var value = arr[index];\n        if (func(value, index)) {\n            result.push(value);\n        }\n    }\n    return result;\n};\nexport default filter;\n//# sourceMappingURL=filter.js.map","var toString = {}.toString;\nvar isType = function (value, type) { return toString.call(value) === '[object ' + type + ']'; };\nexport default isType;\n//# sourceMappingURL=is-type.js.map","/**\n * 是否为函数\n * @param  {*} fn 对象\n * @return {Boolean}  是否函数\n */\nimport isType from './is-type';\nexport default (function (value) {\n    return isType(value, 'Function');\n});\n//# sourceMappingURL=is-function.js.map","// isFinite,\nvar isNil = function (value) {\n    /**\n     * isNil(null) => true\n     * isNil() => true\n     */\n    return value === null || value === undefined;\n};\nexport default isNil;\n//# sourceMappingURL=is-nil.js.map","import isType from './is-type';\nexport default (function (value) {\n    return Array.isArray ?\n        Array.isArray(value) :\n        isType(value, 'Array');\n});\n//# sourceMappingURL=is-array.js.map","export default (function (value) {\n    /**\n     * isObject({}) => true\n     * isObject([1, 2, 3]) => true\n     * isObject(Function) => true\n     * isObject(null) => false\n     */\n    var type = typeof value;\n    return value !== null && type === 'object' || type === 'function';\n});\n//# sourceMappingURL=is-object.js.map","import isArray from './is-array';\nimport isObject from './is-object';\nfunction each(elements, func) {\n    if (!elements) {\n        return;\n    }\n    var rst;\n    if (isArray(elements)) {\n        for (var i = 0, len = elements.length; i < len; i++) {\n            rst = func(elements[i], i);\n            if (rst === false) {\n                break;\n            }\n        }\n    }\n    else if (isObject(elements)) {\n        for (var k in elements) {\n            if (elements.hasOwnProperty(k)) {\n                rst = func(elements[k], k);\n                if (rst === false) {\n                    break;\n                }\n            }\n        }\n    }\n}\nexport default each;\n//# sourceMappingURL=each.js.map","import isArray from './is-array';\nimport { default as getMax } from './max';\nimport { default as getMin } from './min';\nvar getRange = function (values) {\n    // 存在 NaN 时，min,max 判定会出问题\n    var filterValues = values.filter(function (v) { return !isNaN(v); });\n    if (!filterValues.length) {\n        // 如果没有数值则直接返回0\n        return {\n            min: 0,\n            max: 0,\n        };\n    }\n    if (isArray(values[0])) {\n        var tmp = [];\n        for (var i = 0; i < values.length; i++) {\n            tmp = tmp.concat(values[i]);\n        }\n        filterValues = tmp;\n    }\n    var max = getMax(filterValues);\n    var min = getMin(filterValues);\n    return {\n        min: min,\n        max: max,\n    };\n};\nexport default getRange;\n//# sourceMappingURL=get-range.js.map","import isArray from './is-array';\n/**\n * @param {Array} arr The array to iterate over.\n * @return {*} Returns the maximum value.\n * @example\n *\n * max([1, 2]);\n * // => 2\n *\n * max([]);\n * // => undefined\n *\n * const data = new Array(1250010).fill(1).map((d,idx) => idx);\n *\n * max(data);\n * // => 1250010\n * // Math.max(...data) will encounter \"Maximum call stack size exceeded\" error\n */\nexport default (function (arr) {\n    if (!isArray(arr)) {\n        return undefined;\n    }\n    return arr.reduce(function (prev, curr) {\n        return Math.max(prev, curr);\n    }, arr[0]);\n});\n//# sourceMappingURL=max.js.map","import isArray from './is-array';\n/**\n * @param {Array} arr The array to iterate over.\n * @return {*} Returns the minimum value.\n * @example\n *\n * min([1, 2]);\n * // => 1\n *\n * min([]);\n * // => undefined\n *\n * const data = new Array(1250010).fill(1).map((d,idx) => idx);\n *\n * min(data);\n * // => 1250010\n * // Math.min(...data) will encounter \"Maximum call stack size exceeded\" error\n */\nexport default (function (arr) {\n    if (!isArray(arr)) {\n        return undefined;\n    }\n    return arr.reduce(function (prev, curr) {\n        return Math.min(prev, curr);\n    }, arr[0]);\n});\n//# sourceMappingURL=min.js.map","import isType from './is-type';\nexport default (function (str) {\n    return isType(str, 'String');\n});\n//# sourceMappingURL=is-string.js.map","import isArrayLike from './is-array-like';\nexport default function head(o) {\n    if (isArrayLike(o)) {\n        return o[0];\n    }\n    return undefined;\n}\n//# sourceMappingURL=head.js.map","import isArrayLike from './is-array-like';\nexport default function last(o) {\n    if (isArrayLike(o)) {\n        var arr = o;\n        return arr[arr.length - 1];\n    }\n    return undefined;\n}\n//# sourceMappingURL=last.js.map","var fixedBase = function (v, base) {\n    var str = base.toString();\n    var index = str.indexOf('.');\n    if (index === -1) {\n        return Math.round(v);\n    }\n    var length = str.substr(index + 1).length;\n    if (length > 20) {\n        length = 20;\n    }\n    return parseFloat(v.toFixed(length));\n};\nexport default fixedBase;\n//# sourceMappingURL=fixed-base.js.map","/**\n * 判断是否数字\n * @return {Boolean} 是否数字\n */\nimport isType from './is-type';\nvar isNumber = function (value) {\n    return isType(value, 'Number');\n};\nexport default isNumber;\n//# sourceMappingURL=is-number.js.map","import each from './each';\nimport isFunction from './is-function';\n// @ts-ignore\nvar values = Object.values ? function (obj) { return Object.values(obj); } : function (obj) {\n    var result = [];\n    each(obj, function (value, key) {\n        if (!(isFunction(obj) && key === 'prototype')) {\n            result.push(value);\n        }\n    });\n    return result;\n};\nexport default values;\n//# sourceMappingURL=values.js.map","var toString = {}.toString;\nvar getType = function (value) {\n    return toString.call(value).replace(/^\\[object /, '').replace(/]$/, '');\n};\nexport default getType;\n//# sourceMappingURL=get-type.js.map","import isType from './is-type';\nvar isDate = function (value) {\n    return isType(value, 'Date');\n};\nexport default isDate;\n//# sourceMappingURL=is-date.js.map","var objectProto = Object.prototype;\nvar isPrototype = function (value) {\n    var Ctor = value && value.constructor;\n    var proto = (typeof Ctor === 'function' && Ctor.prototype) || objectProto;\n    return value === proto;\n};\nexport default isPrototype;\n//# sourceMappingURL=is-prototype.js.map","// FIXME: Mutable param should be forbidden in static lang.\nfunction _mix(dist, obj) {\n    for (var key in obj) {\n        if (obj.hasOwnProperty(key) && key !== 'constructor' && obj[key] !== undefined) {\n            dist[key] = obj[key];\n        }\n    }\n}\nexport default function mix(dist, src1, src2, src3) {\n    if (src1)\n        _mix(dist, src1);\n    if (src2)\n        _mix(dist, src2);\n    if (src3)\n        _mix(dist, src3);\n    return dist;\n}\n//# sourceMappingURL=mix.js.map","import isArrayLike from './is-array-like';\nvar indexOf = function (arr, obj) {\n    if (!isArrayLike(arr)) {\n        return -1;\n    }\n    var m = Array.prototype.indexOf;\n    if (m) {\n        return m.call(arr, obj);\n    }\n    var index = -1;\n    for (var i = 0; i < arr.length; i++) {\n        if (arr[i] === obj) {\n            index = i;\n            break;\n        }\n    }\n    return index;\n};\nexport default indexOf;\n//# sourceMappingURL=index-of.js.map","import isNil from './is-nil';\nimport isArrayLike from './is-array-like';\nimport getType from './get-type';\nimport isPrototype from './is-prototype';\nvar hasOwnProperty = Object.prototype.hasOwnProperty;\nfunction isEmpty(value) {\n    /**\n     * isEmpty(null) => true\n     * isEmpty() => true\n     * isEmpty(true) => true\n     * isEmpty(1) => true\n     * isEmpty([1, 2, 3]) => false\n     * isEmpty('abc') => false\n     * isEmpty({ a: 1 }) => false\n     */\n    if (isNil(value)) {\n        return true;\n    }\n    if (isArrayLike(value)) {\n        return !value.length;\n    }\n    var type = getType(value);\n    if (type === 'Map' || type === 'Set') {\n        return !value.size;\n    }\n    if (isPrototype(value)) {\n        return !Object.keys(value).length;\n    }\n    for (var key in value) {\n        if (hasOwnProperty.call(value, key)) {\n            return false;\n        }\n    }\n    return true;\n}\nexport default isEmpty;\n//# sourceMappingURL=is-empty.js.map","import isArrayLike from './is-array-like';\nvar map = function (arr, func) {\n    if (!isArrayLike(arr)) {\n        // @ts-ignore\n        return arr;\n    }\n    var result = [];\n    for (var index = 0; index < arr.length; index++) {\n        var value = arr[index];\n        result.push(func(value, index));\n    }\n    return result;\n};\nexport default map;\n//# sourceMappingURL=map.js.map","import { __spreadArrays } from \"tslib\";\nimport values from './values';\nimport memoize from './memoize';\nimport isString from './is-string';\nvar ctx;\n/**\n * 计算文本的宽度\n */\nexport default memoize(function (text, font) {\n    if (font === void 0) { font = {}; }\n    var fontSize = font.fontSize, fontFamily = font.fontFamily, fontWeight = font.fontWeight, fontStyle = font.fontStyle, fontVariant = font.fontVariant;\n    if (!ctx) {\n        ctx = document.createElement('canvas').getContext('2d');\n    }\n    ctx.font = [fontStyle, fontVariant, fontWeight, fontSize + \"px\", fontFamily].join(' ');\n    return ctx.measureText(isString(text) ? text : '').width;\n}, function (text, font) {\n    if (font === void 0) { font = {}; }\n    return __spreadArrays([text], values(font)).join('');\n});\n//# sourceMappingURL=measure-text-width.js.map","import isNil from './is-nil';\nimport isArraylike from './is-array-like';\nexport default function size(o) {\n    if (isNil(o)) {\n        return 0;\n    }\n    if (isArraylike(o)) {\n        return o.length;\n    }\n    return Object.keys(o).length;\n}\n//# sourceMappingURL=size.js.map","import isFunction from './is-function';\n/**\n * _.memoize(calColor);\n * _.memoize(calColor, (...args) => args[0]);\n * @param f\n * @param resolver\n */\nexport default (function (f, resolver) {\n    if (!isFunction(f)) {\n        throw new TypeError('Expected a function');\n    }\n    var memoized = function () {\n        var args = [];\n        for (var _i = 0; _i < arguments.length; _i++) {\n            args[_i] = arguments[_i];\n        }\n        // 使用方法构造 key，如果不存在 resolver，则直接取第一个参数作为 key\n        var key = resolver ? resolver.apply(this, args) : args[0];\n        var cache = memoized.cache;\n        if (cache.has(key)) {\n            return cache.get(key);\n        }\n        var result = f.apply(this, args);\n        // 缓存起来\n        cache.set(key, result);\n        return result;\n    };\n    memoized.cache = new Map();\n    return memoized;\n});\n//# sourceMappingURL=memoize.js.map","import { isArray, isNil, isString } from '@antv/util';\n// todo 这个到底目的是什么？\nvar toScaleString = function (scale, value) {\n    if (isString(value)) {\n        return value;\n    }\n    return scale.invert(scale.scale(value));\n};\n/**\n * 所有视觉通道属性的基类\n * @class Base\n */\nvar Attribute = /** @class */ (function () {\n    function Attribute(cfg) {\n        this.names = [];\n        this.scales = [];\n        this.linear = false;\n        this.values = [];\n        this.callback = function () { return []; };\n        // 解析配置\n        this._parseCfg(cfg);\n    }\n    /**\n     * 映射的值组成的数组\n     * @param params 对应 scale 顺序的值传入\n     */\n    Attribute.prototype.mapping = function () {\n        var _this = this;\n        var params = [];\n        for (var _i = 0; _i < arguments.length; _i++) {\n            params[_i] = arguments[_i];\n        }\n        var values = params.map(function (param, idx) {\n            return _this._toOriginParam(param, _this.scales[idx]);\n        });\n        return this.callback.apply(this, values);\n    };\n    /**\n     * 如果进行线性映射，返回对应的映射值\n     * @param percent\n     */\n    Attribute.prototype.getLinearValue = function (percent) {\n        // 分段数量\n        var steps = this.values.length - 1;\n        var step = Math.floor(steps * percent);\n        var leftPercent = steps * percent - step;\n        // todo 不懂这个逻辑\n        var start = this.values[step];\n        var end = step === steps ? start : this.values[step + 1];\n        // 线性方程\n        return start + (end - start) * leftPercent;\n    };\n    /**\n     * 根据度量获取属性名\n     */\n    Attribute.prototype.getNames = function () {\n        var scales = this.scales;\n        var names = this.names;\n        var length = Math.min(scales.length, names.length);\n        var rst = [];\n        for (var i = 0; i < length; i += 1) {\n            rst.push(names[i]);\n        }\n        return rst;\n    };\n    /**\n     * 获取所有的维度名\n     */\n    Attribute.prototype.getFields = function () {\n        return this.scales.map(function (scale) { return scale.field; });\n    };\n    /**\n     * 根据名称获取度量\n     * @param name\n     */\n    Attribute.prototype.getScale = function (name) {\n        return this.scales[this.names.indexOf(name)];\n    };\n    /**\n     * 默认的回调函数（用户没有自定义 callback，或者用户自定义 callback 返回空的时候，使用 values 映射）\n     * @param params\n     */\n    Attribute.prototype.defaultCallback = function () {\n        var _this = this;\n        var params = [];\n        for (var _i = 0; _i < arguments.length; _i++) {\n            params[_i] = arguments[_i];\n        }\n        // 没有 params 的情况，是指没有指定 fields，直接返回配置的 values 常量\n        if (params.length === 0) {\n            return this.values;\n        }\n        return params.map(function (param, idx) {\n            var scale = _this.scales[idx];\n            return scale.type === 'identity' ? scale.values[0] : _this._getAttributeValue(scale, param);\n        });\n    };\n    // 解析配置\n    Attribute.prototype._parseCfg = function (cfg) {\n        var _this = this;\n        var _a = cfg.type, type = _a === void 0 ? 'base' : _a, _b = cfg.names, names = _b === void 0 ? [] : _b, _c = cfg.scales, scales = _c === void 0 ? [] : _c, _d = cfg.values, values = _d === void 0 ? [] : _d, callback = cfg.callback;\n        this.type = type;\n        this.scales = scales;\n        this.values = values;\n        this.names = names;\n        // 构造 callback 方法\n        this.callback = function () {\n            var params = [];\n            for (var _i = 0; _i < arguments.length; _i++) {\n                params[_i] = arguments[_i];\n            }\n            /**\n             * 当用户设置的 callback 返回 null 时, 应该返回默认 callback 中的值\n             */\n            if (callback) {\n                // 使用用户返回的值处理\n                var ret = callback.apply(void 0, params);\n                if (!isNil(ret)) {\n                    return [ret];\n                }\n            }\n            // 没有 callback 或者用户 callback 返回值为空，则使用默认的逻辑处理\n            return _this.defaultCallback.apply(_this, params);\n        };\n    };\n    // 获取属性值，将值映射到视觉通道\n    Attribute.prototype._getAttributeValue = function (scale, value) {\n        // 如果是非线性的字段，直接从 values 中取值即可\n        if (scale.isCategory && !this.linear) {\n            // 离散 scale 变换成索引\n            var idx = scale.translate(value);\n            return this.values[idx % this.values.length];\n        }\n        // 线性则使用线性值\n        var percent = scale.scale(value);\n        return this.getLinearValue(percent);\n    };\n    /**\n     * 通过 scale 拿到数据对应的原始的参数\n     * @param param\n     * @param scale\n     * @private\n     */\n    Attribute.prototype._toOriginParam = function (param, scale) {\n        // 是线性，直接返回\n        // 非线性，使用 scale 变换\n        return !scale.isLinear\n            ? isArray(param)\n                ? param.map(function (p) { return toScaleString(scale, p); })\n                : toScaleString(scale, param)\n            : param;\n    };\n    return Attribute;\n}());\nexport default Attribute;\n//# sourceMappingURL=base.js.map","var toString = {}.toString;\nvar isType = function (value, type) { return toString.call(value) === '[object ' + type + ']'; };\nexport default isType;\n//# sourceMappingURL=is-type.js.map","/**\n * 是否为函数\n * @param  {*} fn 对象\n * @return {Boolean}  是否函数\n */\nimport isType from './is-type';\nexport default (function (value) {\n    return isType(value, 'Function');\n});\n//# sourceMappingURL=is-function.js.map","import isArray from './is-array';\nimport isObject from './is-object';\nfunction each(elements, func) {\n    if (!elements) {\n        return;\n    }\n    var rst;\n    if (isArray(elements)) {\n        for (var i = 0, len = elements.length; i < len; i++) {\n            rst = func(elements[i], i);\n            if (rst === false) {\n                break;\n            }\n        }\n    }\n    else if (isObject(elements)) {\n        for (var k in elements) {\n            if (elements.hasOwnProperty(k)) {\n                rst = func(elements[k], k);\n                if (rst === false) {\n                    break;\n                }\n            }\n        }\n    }\n}\nexport default each;\n//# sourceMappingURL=each.js.map","import isType from './is-type';\nexport default (function (value) {\n    return Array.isArray ?\n        Array.isArray(value) :\n        isType(value, 'Array');\n});\n//# sourceMappingURL=is-array.js.map","export default (function (value) {\n    /**\n     * isObject({}) => true\n     * isObject([1, 2, 3]) => true\n     * isObject(Function) => true\n     * isObject(null) => false\n     */\n    var type = typeof value;\n    return value !== null && type === 'object' || type === 'function';\n});\n//# sourceMappingURL=is-object.js.map","import isType from './is-type';\nexport default (function (str) {\n    return isType(str, 'String');\n});\n//# sourceMappingURL=is-string.js.map","import each from './each';\nimport isFunction from './is-function';\n// @ts-ignore\nvar values = Object.values ? function (obj) { return Object.values(obj); } : function (obj) {\n    var result = [];\n    each(obj, function (value, key) {\n        if (!(isFunction(obj) && key === 'prototype')) {\n            result.push(value);\n        }\n    });\n    return result;\n};\nexport default values;\n//# sourceMappingURL=values.js.map","import isFunction from './is-function';\n/**\n * _.memoize(calColor);\n * _.memoize(calColor, (...args) => args[0]);\n * @param f\n * @param resolver\n */\nexport default (function (f, resolver) {\n    if (!isFunction(f)) {\n        throw new TypeError('Expected a function');\n    }\n    var memoized = function () {\n        var args = [];\n        for (var _i = 0; _i < arguments.length; _i++) {\n            args[_i] = arguments[_i];\n        }\n        // 使用方法构造 key，如果不存在 resolver，则直接取第一个参数作为 key\n        var key = resolver ? resolver.apply(this, args) : args[0];\n        var cache = memoized.cache;\n        if (cache.has(key)) {\n            return cache.get(key);\n        }\n        var result = f.apply(this, args);\n        // 缓存起来\n        cache.set(key, result);\n        return result;\n    };\n    memoized.cache = new Map();\n    return memoized;\n});\n//# sourceMappingURL=memoize.js.map","import isArrayLike from './is-array-like';\nvar map = function (arr, func) {\n    if (!isArrayLike(arr)) {\n        // @ts-ignore\n        return arr;\n    }\n    var result = [];\n    for (var index = 0; index < arr.length; index++) {\n        var value = arr[index];\n        result.push(func(value, index));\n    }\n    return result;\n};\nexport default map;\n//# sourceMappingURL=map.js.map","import { __spreadArrays } from \"tslib\";\nimport values from './values';\nimport memoize from './memoize';\nimport isString from './is-string';\nvar ctx;\n/**\n * 计算文本的宽度\n */\nexport default memoize(function (text, font) {\n    if (font === void 0) { font = {}; }\n    var fontSize = font.fontSize, fontFamily = font.fontFamily, fontWeight = font.fontWeight, fontStyle = font.fontStyle, fontVariant = font.fontVariant;\n    if (!ctx) {\n        ctx = document.createElement('canvas').getContext('2d');\n    }\n    ctx.font = [fontStyle, fontVariant, fontWeight, fontSize + \"px\", fontFamily].join(' ');\n    return ctx.measureText(isString(text) ? text : '').width;\n}, function (text, font) {\n    if (font === void 0) { font = {}; }\n    return __spreadArrays([text], values(font)).join('');\n});\n//# sourceMappingURL=measure-text-width.js.map","var isArrayLike = function (value) {\n    /**\n     * isArrayLike([1, 2, 3]) => true\n     * isArrayLike(document.body.children) => true\n     * isArrayLike('abc') => true\n     * isArrayLike(Function) => false\n     */\n    return value !== null && typeof value !== 'function' && isFinite(value.length);\n};\nexport default isArrayLike;\n//# sourceMappingURL=is-array-like.js.map","import { map, memoize, isString, each } from '@antv/util';\nvar RGB_REG = /rgba?\\(([\\s.,0-9]+)\\)/;\nvar regexLG = /^l\\s*\\(\\s*([\\d.]+)\\s*\\)\\s*(.*)/i;\nvar regexRG = /^r\\s*\\(\\s*([\\d.]+)\\s*,\\s*([\\d.]+)\\s*,\\s*([\\d.]+)\\s*\\)\\s*(.*)/i;\nvar regexColorStop = /[\\d.]+:(#[^\\s]+|[^\\)]+\\))/gi;\nvar isGradientColor = function (val) { return /^[r,R,L,l]{1}[\\s]*\\(/.test(val); };\n// 创建辅助 tag 取颜色\nvar createTmp = function () {\n    var i = document.createElement('i');\n    i.title = 'Web Colour Picker';\n    i.style.display = 'none';\n    document.body.appendChild(i);\n    return i;\n};\n// 获取颜色之间的插值\nvar getValue = function (start, end, percent, index) {\n    return start[index] + (end[index] - start[index]) * percent;\n};\n// 数组转换成颜色\nfunction arr2rgb(arr) {\n    return \"#\" + toHex(arr[0]) + toHex(arr[1]) + toHex(arr[2]);\n}\n// rgb 颜色转换成数组\nvar rgb2arr = function (str) {\n    return [\n        parseInt(str.substr(1, 2), 16),\n        parseInt(str.substr(3, 2), 16),\n        parseInt(str.substr(5, 2), 16),\n    ];\n};\n// 将数值从 0-255 转换成16进制字符串\nvar toHex = function (value) {\n    var x16Value = Math.round(value).toString(16);\n    return x16Value.length === 1 ? \"0\" + x16Value : x16Value;\n};\n// 计算颜色\nvar calColor = function (points, percent) {\n    var fixedPercent = isNaN(Number(percent)) || percent < 0 ? 0 :\n        percent > 1 ? 1 :\n            Number(percent);\n    var steps = points.length - 1;\n    var step = Math.floor(steps * fixedPercent);\n    var left = steps * fixedPercent - step;\n    var start = points[step];\n    var end = step === steps ? start : points[step + 1];\n    return arr2rgb([\n        getValue(start, end, left, 0),\n        getValue(start, end, left, 1),\n        getValue(start, end, left, 2),\n    ]);\n};\n// 用于给 toRGB 的缓存（使用 memoize 方法替换）\n// const colorCache = {};\nvar iEl;\n/**\n * 将颜色转换到 rgb 的格式\n * @param {color} color 颜色\n * @return 将颜色转换到 '#ffffff' 的格式\n */\nvar toRGB = function (color) {\n    // 如果已经是 rgb的格式\n    if (color[0] === '#' && color.length === 7) {\n        return color;\n    }\n    if (!iEl) {\n        // 防止防止在页头报错\n        iEl = createTmp();\n    }\n    iEl.style.color = color;\n    var rst = document.defaultView.getComputedStyle(iEl, '').getPropertyValue('color');\n    var matches = RGB_REG.exec(rst);\n    var cArray = matches[1].split(/\\s*,\\s*/).map(function (s) { return Number(s); });\n    rst = arr2rgb(cArray);\n    return rst;\n};\n/**\n * 获取渐变函数\n * @param colors 多个颜色\n * @return 颜色值\n */\nvar gradient = function (colors) {\n    var colorArray = isString(colors) ? colors.split('-') : colors;\n    var points = map(colorArray, function (color) {\n        return rgb2arr(color.indexOf('#') === -1 ? toRGB(color) : color);\n    });\n    // 返回一个函数\n    return function (percent) {\n        return calColor(points, percent);\n    };\n};\nvar toCSSGradient = function (gradientColor) {\n    if (isGradientColor(gradientColor)) {\n        var cssColor_1;\n        var steps = void 0;\n        if (gradientColor[0] === 'l') {\n            // 线性渐变\n            var arr = regexLG.exec(gradientColor);\n            var angle = +arr[1] + 90; // css 和 g 的渐变起始角度不同\n            steps = arr[2];\n            cssColor_1 = \"linear-gradient(\" + angle + \"deg, \";\n        }\n        else if (gradientColor[0] === 'r') {\n            // 径向渐变\n            cssColor_1 = 'radial-gradient(';\n            var arr = regexRG.exec(gradientColor);\n            steps = arr[4];\n        }\n        var colorStops_1 = steps.match(regexColorStop);\n        each(colorStops_1, function (item, index) {\n            var itemArr = item.split(':');\n            cssColor_1 += itemArr[1] + \" \" + itemArr[0] * 100 + \"%\";\n            if (index !== (colorStops_1.length - 1)) {\n                cssColor_1 += ', ';\n            }\n        });\n        cssColor_1 += ')';\n        return cssColor_1;\n    }\n    return gradientColor;\n};\nexport default {\n    rgb2arr: rgb2arr,\n    gradient: gradient,\n    toRGB: memoize(toRGB),\n    toCSSGradient: toCSSGradient,\n};\n//# sourceMappingURL=index.js.map","import { __extends } from \"tslib\";\nimport colorUtil from '@antv/color-util';\nimport { isString } from '@antv/util';\nimport Attribute from './base';\nvar Color = /** @class */ (function (_super) {\n    __extends(Color, _super);\n    function Color(cfg) {\n        var _this = _super.call(this, cfg) || this;\n        _this.type = 'color';\n        _this.names = ['color'];\n        if (isString(_this.values)) {\n            _this.linear = true;\n        }\n        _this.gradient = colorUtil.gradient(_this.values);\n        return _this;\n    }\n    /**\n     * @override\n     */\n    Color.prototype.getLinearValue = function (percent) {\n        return this.gradient(percent);\n    };\n    return Color;\n}(Attribute));\nexport default Color;\n//# sourceMappingURL=color.js.map","import { __extends } from \"tslib\";\nimport Attribute from './base';\nvar Opacity = /** @class */ (function (_super) {\n    __extends(Opacity, _super);\n    function Opacity(cfg) {\n        var _this = _super.call(this, cfg) || this;\n        _this.type = 'opacity';\n        _this.names = ['opacity'];\n        return _this;\n    }\n    return Opacity;\n}(Attribute));\nexport default Opacity;\n//# sourceMappingURL=opacity.js.map","import { __extends } from \"tslib\";\nimport { isArray, isNil } from '@antv/util';\nimport Attribute from './base';\nvar Position = /** @class */ (function (_super) {\n    __extends(Position, _super);\n    function Position(cfg) {\n        var _this = _super.call(this, cfg) || this;\n        _this.names = ['x', 'y'];\n        _this.type = 'position';\n        return _this;\n    }\n    Position.prototype.mapping = function (x, y) {\n        var _a = this.scales, scaleX = _a[0], scaleY = _a[1];\n        if (isNil(x) || isNil(y)) {\n            return [];\n        }\n        return [\n            isArray(x) ? x.map(function (xi) { return scaleX.scale(xi); }) : scaleX.scale(x),\n            isArray(y) ? y.map(function (yi) { return scaleY.scale(yi); }) : scaleY.scale(y),\n        ];\n    };\n    return Position;\n}(Attribute));\nexport default Position;\n//# sourceMappingURL=position.js.map","import { __extends } from \"tslib\";\nimport Attribute from './base';\nvar Shape = /** @class */ (function (_super) {\n    __extends(Shape, _super);\n    function Shape(cfg) {\n        var _this = _super.call(this, cfg) || this;\n        _this.type = 'shape';\n        _this.names = ['shape'];\n        return _this;\n    }\n    /**\n     * @override\n     */\n    Shape.prototype.getLinearValue = function (percent) {\n        var idx = Math.round((this.values.length - 1) * percent);\n        return this.values[idx];\n    };\n    return Shape;\n}(Attribute));\nexport default Shape;\n//# sourceMappingURL=shape.js.map","import { __extends } from \"tslib\";\nimport Attribute from './base';\nvar Size = /** @class */ (function (_super) {\n    __extends(Size, _super);\n    function Size(cfg) {\n        var _this = _super.call(this, cfg) || this;\n        _this.type = 'size';\n        _this.names = ['size'];\n        return _this;\n    }\n    return Size;\n}(Attribute));\nexport default Size;\n//# sourceMappingURL=size.js.map","var methodCache = {};\n/**\n * 获取计算 ticks 的方法\n * @param key 键值\n * @returns 计算 ticks 的方法\n */\nexport function getTickMethod(key) {\n    return methodCache[key];\n}\n/**\n * 注册计算 ticks 的方法\n * @param key 键值\n * @param method 方法\n */\nexport function registerTickMethod(key, method) {\n    methodCache[key] = method;\n}\n//# sourceMappingURL=register.js.map","import { assign, isEmpty, isFunction, isNil, isNumber, isObject, isString, map } from '@antv/util';\nimport { getTickMethod } from './tick-method/register';\nvar Scale = /** @class */ (function () {\n    function Scale(cfg) {\n        /**\n         * 度量的类型\n         */\n        this.type = 'base';\n        /**\n         * 是否分类类型的度量\n         */\n        this.isCategory = false;\n        /**\n         * 是否线性度量，有linear, time 度量\n         */\n        this.isLinear = false;\n        /**\n         * 是否连续类型的度量，linear,time,log, pow, quantile, quantize 都支持\n         */\n        this.isContinuous = false;\n        /**\n         * 是否是常量的度量，传入和传出一致\n         */\n        this.isIdentity = false;\n        this.values = [];\n        this.range = [0, 1];\n        this.ticks = [];\n        this.__cfg__ = cfg;\n        this.initCfg();\n        this.init();\n    }\n    // 对于原始值的必要转换，如分类、时间字段需转换成数值，用transform/map命名可能更好\n    Scale.prototype.translate = function (v) {\n        return v;\n    };\n    /** 重新初始化 */\n    Scale.prototype.change = function (cfg) {\n        // 覆盖配置项，而不替代\n        assign(this.__cfg__, cfg);\n        this.init();\n    };\n    Scale.prototype.clone = function () {\n        return this.constructor(this.__cfg__);\n    };\n    /** 获取坐标轴需要的ticks */\n    Scale.prototype.getTicks = function () {\n        var _this = this;\n        return map(this.ticks, function (tick, idx) {\n            if (isObject(tick)) {\n                // 仅当符合Tick类型时才有意义\n                return tick;\n            }\n            return {\n                text: _this.getText(tick, idx),\n                tickValue: tick,\n                value: _this.scale(tick),\n            };\n        });\n    };\n    /** 获取Tick的格式化结果 */\n    Scale.prototype.getText = function (value, key) {\n        var formatter = this.formatter;\n        var res = formatter ? formatter(value, key) : value;\n        if (isNil(res) || !isFunction(res.toString)) {\n            return '';\n        }\n        return res.toString();\n    };\n    // 获取配置项中的值，当前 scale 上的值可能会被修改\n    Scale.prototype.getConfig = function (key) {\n        return this.__cfg__[key];\n    };\n    // scale初始化\n    Scale.prototype.init = function () {\n        assign(this, this.__cfg__);\n        this.setDomain();\n        if (isEmpty(this.getConfig('ticks'))) {\n            this.ticks = this.calculateTicks();\n        }\n    };\n    // 子类上覆盖某些属性，不能直接在类上声明，否则会被覆盖\n    Scale.prototype.initCfg = function () { };\n    Scale.prototype.setDomain = function () { };\n    Scale.prototype.calculateTicks = function () {\n        var tickMethod = this.tickMethod;\n        var ticks = [];\n        if (isString(tickMethod)) {\n            var method = getTickMethod(tickMethod);\n            if (!method) {\n                throw new Error('There is no method to to calculate ticks!');\n            }\n            ticks = method(this);\n        }\n        else if (isFunction(tickMethod)) {\n            ticks = tickMethod(this);\n        }\n        return ticks;\n    };\n    // range 的最小值\n    Scale.prototype.rangeMin = function () {\n        return this.range[0];\n    };\n    // range 的最大值\n    Scale.prototype.rangeMax = function () {\n        return this.range[1];\n    };\n    /** 定义域转 0~1 */\n    Scale.prototype.calcPercent = function (value, min, max) {\n        if (isNumber(value)) {\n            return (value - min) / (max - min);\n        }\n        return NaN;\n    };\n    /** 0~1转定义域 */\n    Scale.prototype.calcValue = function (percent, min, max) {\n        return min + percent * (max - min);\n    };\n    return Scale;\n}());\nexport default Scale;\n//# sourceMappingURL=base.js.map","import { __extends, __spreadArrays } from \"tslib\";\nimport { isNil, isNumber } from '@antv/util';\nimport Base from '../base';\n/**\n * 分类度量\n * @class\n */\nvar Category = /** @class */ (function (_super) {\n    __extends(Category, _super);\n    function Category() {\n        var _this = _super !== null && _super.apply(this, arguments) || this;\n        _this.type = 'cat';\n        _this.isCategory = true;\n        return _this;\n    }\n    Category.prototype.buildIndexMap = function () {\n        if (!this.translateIndexMap) {\n            this.translateIndexMap = new Map();\n            // 重新构建缓存\n            for (var i = 0; i < this.values.length; i++) {\n                this.translateIndexMap.set(this.values[i], i);\n            }\n        }\n    };\n    Category.prototype.translate = function (value) {\n        // 按需构建 map\n        this.buildIndexMap();\n        // 找得到\n        var idx = this.translateIndexMap.get(value);\n        if (idx === undefined) {\n            idx = isNumber(value) ? value : NaN;\n        }\n        return idx;\n    };\n    Category.prototype.scale = function (value) {\n        var order = this.translate(value);\n        // 分类数据允许 0.5 范围内调整\n        // if (order < this.min - 0.5 || order > this.max + 0.5) {\n        //   return NaN;\n        // }\n        var percent = this.calcPercent(order, this.min, this.max);\n        return this.calcValue(percent, this.rangeMin(), this.rangeMax());\n    };\n    Category.prototype.invert = function (scaledValue) {\n        var domainRange = this.max - this.min;\n        var percent = this.calcPercent(scaledValue, this.rangeMin(), this.rangeMax());\n        var idx = Math.round(domainRange * percent) + this.min;\n        if (idx < this.min || idx > this.max) {\n            return NaN;\n        }\n        return this.values[idx];\n    };\n    Category.prototype.getText = function (value) {\n        var args = [];\n        for (var _i = 1; _i < arguments.length; _i++) {\n            args[_i - 1] = arguments[_i];\n        }\n        var v = value;\n        // value为index\n        if (isNumber(value) && !this.values.includes(value)) {\n            v = this.values[v];\n        }\n        return _super.prototype.getText.apply(this, __spreadArrays([v], args));\n    };\n    // 复写属性\n    Category.prototype.initCfg = function () {\n        this.tickMethod = 'cat';\n    };\n    // 设置 min, max\n    Category.prototype.setDomain = function () {\n        // 用户有可能设置 min\n        if (isNil(this.getConfig('min'))) {\n            this.min = 0;\n        }\n        if (isNil(this.getConfig('max'))) {\n            var size = this.values.length;\n            this.max = size > 1 ? size - 1 : size;\n        }\n        // scale.init 的时候清除缓存\n        if (this.translateIndexMap) {\n            this.translateIndexMap = undefined;\n        }\n    };\n    return Category;\n}(Base));\nexport default Category;\n//# sourceMappingURL=base.js.map","var token = /d{1,4}|M{1,4}|YY(?:YY)?|S{1,3}|Do|ZZ|Z|([HhMsDm])\\1?|[aA]|\"[^\"]*\"|'[^']*'/g;\nvar twoDigitsOptional = \"\\\\d\\\\d?\";\nvar twoDigits = \"\\\\d\\\\d\";\nvar threeDigits = \"\\\\d{3}\";\nvar fourDigits = \"\\\\d{4}\";\nvar word = \"[^\\\\s]+\";\nvar literal = /\\[([^]*?)\\]/gm;\nfunction shorten(arr, sLen) {\n    var newArr = [];\n    for (var i = 0, len = arr.length; i < len; i++) {\n        newArr.push(arr[i].substr(0, sLen));\n    }\n    return newArr;\n}\nvar monthUpdate = function (arrName) { return function (v, i18n) {\n    var lowerCaseArr = i18n[arrName].map(function (v) { return v.toLowerCase(); });\n    var index = lowerCaseArr.indexOf(v.toLowerCase());\n    if (index > -1) {\n        return index;\n    }\n    return null;\n}; };\nfunction assign(origObj) {\n    var args = [];\n    for (var _i = 1; _i < arguments.length; _i++) {\n        args[_i - 1] = arguments[_i];\n    }\n    for (var _a = 0, args_1 = args; _a < args_1.length; _a++) {\n        var obj = args_1[_a];\n        for (var key in obj) {\n            // @ts-ignore ex\n            origObj[key] = obj[key];\n        }\n    }\n    return origObj;\n}\nvar dayNames = [\n    \"Sunday\",\n    \"Monday\",\n    \"Tuesday\",\n    \"Wednesday\",\n    \"Thursday\",\n    \"Friday\",\n    \"Saturday\"\n];\nvar monthNames = [\n    \"January\",\n    \"February\",\n    \"March\",\n    \"April\",\n    \"May\",\n    \"June\",\n    \"July\",\n    \"August\",\n    \"September\",\n    \"October\",\n    \"November\",\n    \"December\"\n];\nvar monthNamesShort = shorten(monthNames, 3);\nvar dayNamesShort = shorten(dayNames, 3);\nvar defaultI18n = {\n    dayNamesShort: dayNamesShort,\n    dayNames: dayNames,\n    monthNamesShort: monthNamesShort,\n    monthNames: monthNames,\n    amPm: [\"am\", \"pm\"],\n    DoFn: function (dayOfMonth) {\n        return (dayOfMonth +\n            [\"th\", \"st\", \"nd\", \"rd\"][dayOfMonth % 10 > 3\n                ? 0\n                : ((dayOfMonth - (dayOfMonth % 10) !== 10 ? 1 : 0) * dayOfMonth) % 10]);\n    }\n};\nvar globalI18n = assign({}, defaultI18n);\nvar setGlobalDateI18n = function (i18n) {\n    return (globalI18n = assign(globalI18n, i18n));\n};\nvar regexEscape = function (str) {\n    return str.replace(/[|\\\\{()[^$+*?.-]/g, \"\\\\$&\");\n};\nvar pad = function (val, len) {\n    if (len === void 0) { len = 2; }\n    val = String(val);\n    while (val.length < len) {\n        val = \"0\" + val;\n    }\n    return val;\n};\nvar formatFlags = {\n    D: function (dateObj) { return String(dateObj.getDate()); },\n    DD: function (dateObj) { return pad(dateObj.getDate()); },\n    Do: function (dateObj, i18n) {\n        return i18n.DoFn(dateObj.getDate());\n    },\n    d: function (dateObj) { return String(dateObj.getDay()); },\n    dd: function (dateObj) { return pad(dateObj.getDay()); },\n    ddd: function (dateObj, i18n) {\n        return i18n.dayNamesShort[dateObj.getDay()];\n    },\n    dddd: function (dateObj, i18n) {\n        return i18n.dayNames[dateObj.getDay()];\n    },\n    M: function (dateObj) { return String(dateObj.getMonth() + 1); },\n    MM: function (dateObj) { return pad(dateObj.getMonth() + 1); },\n    MMM: function (dateObj, i18n) {\n        return i18n.monthNamesShort[dateObj.getMonth()];\n    },\n    MMMM: function (dateObj, i18n) {\n        return i18n.monthNames[dateObj.getMonth()];\n    },\n    YY: function (dateObj) {\n        return pad(String(dateObj.getFullYear()), 4).substr(2);\n    },\n    YYYY: function (dateObj) { return pad(dateObj.getFullYear(), 4); },\n    h: function (dateObj) { return String(dateObj.getHours() % 12 || 12); },\n    hh: function (dateObj) { return pad(dateObj.getHours() % 12 || 12); },\n    H: function (dateObj) { return String(dateObj.getHours()); },\n    HH: function (dateObj) { return pad(dateObj.getHours()); },\n    m: function (dateObj) { return String(dateObj.getMinutes()); },\n    mm: function (dateObj) { return pad(dateObj.getMinutes()); },\n    s: function (dateObj) { return String(dateObj.getSeconds()); },\n    ss: function (dateObj) { return pad(dateObj.getSeconds()); },\n    S: function (dateObj) {\n        return String(Math.round(dateObj.getMilliseconds() / 100));\n    },\n    SS: function (dateObj) {\n        return pad(Math.round(dateObj.getMilliseconds() / 10), 2);\n    },\n    SSS: function (dateObj) { return pad(dateObj.getMilliseconds(), 3); },\n    a: function (dateObj, i18n) {\n        return dateObj.getHours() < 12 ? i18n.amPm[0] : i18n.amPm[1];\n    },\n    A: function (dateObj, i18n) {\n        return dateObj.getHours() < 12\n            ? i18n.amPm[0].toUpperCase()\n            : i18n.amPm[1].toUpperCase();\n    },\n    ZZ: function (dateObj) {\n        var offset = dateObj.getTimezoneOffset();\n        return ((offset > 0 ? \"-\" : \"+\") +\n            pad(Math.floor(Math.abs(offset) / 60) * 100 + (Math.abs(offset) % 60), 4));\n    },\n    Z: function (dateObj) {\n        var offset = dateObj.getTimezoneOffset();\n        return ((offset > 0 ? \"-\" : \"+\") +\n            pad(Math.floor(Math.abs(offset) / 60), 2) +\n            \":\" +\n            pad(Math.abs(offset) % 60, 2));\n    }\n};\nvar monthParse = function (v) { return +v - 1; };\nvar emptyDigits = [null, twoDigitsOptional];\nvar emptyWord = [null, word];\nvar amPm = [\n    \"isPm\",\n    word,\n    function (v, i18n) {\n        var val = v.toLowerCase();\n        if (val === i18n.amPm[0]) {\n            return 0;\n        }\n        else if (val === i18n.amPm[1]) {\n            return 1;\n        }\n        return null;\n    }\n];\nvar timezoneOffset = [\n    \"timezoneOffset\",\n    \"[^\\\\s]*?[\\\\+\\\\-]\\\\d\\\\d:?\\\\d\\\\d|[^\\\\s]*?Z?\",\n    function (v) {\n        var parts = (v + \"\").match(/([+-]|\\d\\d)/gi);\n        if (parts) {\n            var minutes = +parts[1] * 60 + parseInt(parts[2], 10);\n            return parts[0] === \"+\" ? minutes : -minutes;\n        }\n        return 0;\n    }\n];\nvar parseFlags = {\n    D: [\"day\", twoDigitsOptional],\n    DD: [\"day\", twoDigits],\n    Do: [\"day\", twoDigitsOptional + word, function (v) { return parseInt(v, 10); }],\n    M: [\"month\", twoDigitsOptional, monthParse],\n    MM: [\"month\", twoDigits, monthParse],\n    YY: [\n        \"year\",\n        twoDigits,\n        function (v) {\n            var now = new Date();\n            var cent = +(\"\" + now.getFullYear()).substr(0, 2);\n            return +(\"\" + (+v > 68 ? cent - 1 : cent) + v);\n        }\n    ],\n    h: [\"hour\", twoDigitsOptional, undefined, \"isPm\"],\n    hh: [\"hour\", twoDigits, undefined, \"isPm\"],\n    H: [\"hour\", twoDigitsOptional],\n    HH: [\"hour\", twoDigits],\n    m: [\"minute\", twoDigitsOptional],\n    mm: [\"minute\", twoDigits],\n    s: [\"second\", twoDigitsOptional],\n    ss: [\"second\", twoDigits],\n    YYYY: [\"year\", fourDigits],\n    S: [\"millisecond\", \"\\\\d\", function (v) { return +v * 100; }],\n    SS: [\"millisecond\", twoDigits, function (v) { return +v * 10; }],\n    SSS: [\"millisecond\", threeDigits],\n    d: emptyDigits,\n    dd: emptyDigits,\n    ddd: emptyWord,\n    dddd: emptyWord,\n    MMM: [\"month\", word, monthUpdate(\"monthNamesShort\")],\n    MMMM: [\"month\", word, monthUpdate(\"monthNames\")],\n    a: amPm,\n    A: amPm,\n    ZZ: timezoneOffset,\n    Z: timezoneOffset\n};\n// Some common format strings\nvar globalMasks = {\n    default: \"ddd MMM DD YYYY HH:mm:ss\",\n    shortDate: \"M/D/YY\",\n    mediumDate: \"MMM D, YYYY\",\n    longDate: \"MMMM D, YYYY\",\n    fullDate: \"dddd, MMMM D, YYYY\",\n    isoDate: \"YYYY-MM-DD\",\n    isoDateTime: \"YYYY-MM-DDTHH:mm:ssZ\",\n    shortTime: \"HH:mm\",\n    mediumTime: \"HH:mm:ss\",\n    longTime: \"HH:mm:ss.SSS\"\n};\nvar setGlobalDateMasks = function (masks) { return assign(globalMasks, masks); };\n/***\n * Format a date\n * @method format\n * @param {Date|number} dateObj\n * @param {string} mask Format of the date, i.e. 'mm-dd-yy' or 'shortDate'\n * @returns {string} Formatted date string\n */\nvar format = function (dateObj, mask, i18n) {\n    if (mask === void 0) { mask = globalMasks[\"default\"]; }\n    if (i18n === void 0) { i18n = {}; }\n    if (typeof dateObj === \"number\") {\n        dateObj = new Date(dateObj);\n    }\n    if (Object.prototype.toString.call(dateObj) !== \"[object Date]\" ||\n        isNaN(dateObj.getTime())) {\n        throw new Error(\"Invalid Date pass to format\");\n    }\n    mask = globalMasks[mask] || mask;\n    var literals = [];\n    // Make literals inactive by replacing them with @@@\n    mask = mask.replace(literal, function ($0, $1) {\n        literals.push($1);\n        return \"@@@\";\n    });\n    var combinedI18nSettings = assign(assign({}, globalI18n), i18n);\n    // Apply formatting rules\n    mask = mask.replace(token, function ($0) {\n        return formatFlags[$0](dateObj, combinedI18nSettings);\n    });\n    // Inline literal values back into the formatted value\n    return mask.replace(/@@@/g, function () { return literals.shift(); });\n};\n/**\n * Parse a date string into a Javascript Date object /\n * @method parse\n * @param {string} dateStr Date string\n * @param {string} format Date parse format\n * @param {i18n} I18nSettingsOptional Full or subset of I18N settings\n * @returns {Date|null} Returns Date object. Returns null what date string is invalid or doesn't match format\n */\nfunction parse(dateStr, format, i18n) {\n    if (i18n === void 0) { i18n = {}; }\n    if (typeof format !== \"string\") {\n        throw new Error(\"Invalid format in fecha parse\");\n    }\n    // Check to see if the format is actually a mask\n    format = globalMasks[format] || format;\n    // Avoid regular expression denial of service, fail early for really long strings\n    // https://www.owasp.org/index.php/Regular_expression_Denial_of_Service_-_ReDoS\n    if (dateStr.length > 1000) {\n        return null;\n    }\n    // Default to the beginning of the year.\n    var today = new Date();\n    var dateInfo = {\n        year: today.getFullYear(),\n        month: 0,\n        day: 1,\n        hour: 0,\n        minute: 0,\n        second: 0,\n        millisecond: 0,\n        isPm: null,\n        timezoneOffset: null\n    };\n    var parseInfo = [];\n    var literals = [];\n    // Replace all the literals with @@@. Hopefully a string that won't exist in the format\n    var newFormat = format.replace(literal, function ($0, $1) {\n        literals.push(regexEscape($1));\n        return \"@@@\";\n    });\n    var specifiedFields = {};\n    var requiredFields = {};\n    // Change every token that we find into the correct regex\n    newFormat = regexEscape(newFormat).replace(token, function ($0) {\n        var info = parseFlags[$0];\n        var field = info[0], regex = info[1], requiredField = info[3];\n        // Check if the person has specified the same field twice. This will lead to confusing results.\n        if (specifiedFields[field]) {\n            throw new Error(\"Invalid format. \" + field + \" specified twice in format\");\n        }\n        specifiedFields[field] = true;\n        // Check if there are any required fields. For instance, 12 hour time requires AM/PM specified\n        if (requiredField) {\n            requiredFields[requiredField] = true;\n        }\n        parseInfo.push(info);\n        return \"(\" + regex + \")\";\n    });\n    // Check all the required fields are present\n    Object.keys(requiredFields).forEach(function (field) {\n        if (!specifiedFields[field]) {\n            throw new Error(\"Invalid format. \" + field + \" is required in specified format\");\n        }\n    });\n    // Add back all the literals after\n    newFormat = newFormat.replace(/@@@/g, function () { return literals.shift(); });\n    // Check if the date string matches the format. If it doesn't return null\n    var matches = dateStr.match(new RegExp(newFormat, \"i\"));\n    if (!matches) {\n        return null;\n    }\n    var combinedI18nSettings = assign(assign({}, globalI18n), i18n);\n    // For each match, call the parser function for that date part\n    for (var i = 1; i < matches.length; i++) {\n        var _a = parseInfo[i - 1], field = _a[0], parser = _a[2];\n        var value = parser\n            ? parser(matches[i], combinedI18nSettings)\n            : +matches[i];\n        // If the parser can't make sense of the value, return null\n        if (value == null) {\n            return null;\n        }\n        dateInfo[field] = value;\n    }\n    if (dateInfo.isPm === 1 && dateInfo.hour != null && +dateInfo.hour !== 12) {\n        dateInfo.hour = +dateInfo.hour + 12;\n    }\n    else if (dateInfo.isPm === 0 && +dateInfo.hour === 12) {\n        dateInfo.hour = 0;\n    }\n    var dateTZ;\n    if (dateInfo.timezoneOffset == null) {\n        dateTZ = new Date(dateInfo.year, dateInfo.month, dateInfo.day, dateInfo.hour, dateInfo.minute, dateInfo.second, dateInfo.millisecond);\n        var validateFields = [\n            [\"month\", \"getMonth\"],\n            [\"day\", \"getDate\"],\n            [\"hour\", \"getHours\"],\n            [\"minute\", \"getMinutes\"],\n            [\"second\", \"getSeconds\"]\n        ];\n        for (var i = 0, len = validateFields.length; i < len; i++) {\n            // Check to make sure the date field is within the allowed range. Javascript dates allows values\n            // outside the allowed range. If the values don't match the value was invalid\n            if (specifiedFields[validateFields[i][0]] &&\n                dateInfo[validateFields[i][0]] !== dateTZ[validateFields[i][1]]()) {\n                return null;\n            }\n        }\n    }\n    else {\n        dateTZ = new Date(Date.UTC(dateInfo.year, dateInfo.month, dateInfo.day, dateInfo.hour, dateInfo.minute - dateInfo.timezoneOffset, dateInfo.second, dateInfo.millisecond));\n        // We can't validate dates in another timezone unfortunately. Do a basic check instead\n        if (dateInfo.month > 11 ||\n            dateInfo.month < 0 ||\n            dateInfo.day > 31 ||\n            dateInfo.day < 1 ||\n            dateInfo.hour > 23 ||\n            dateInfo.hour < 0 ||\n            dateInfo.minute > 59 ||\n            dateInfo.minute < 0 ||\n            dateInfo.second > 59 ||\n            dateInfo.second < 0) {\n            return null;\n        }\n    }\n    // Don't allow invalid dates\n    return dateTZ;\n}\nvar fecha = {\n    format: format,\n    parse: parse,\n    defaultI18n: defaultI18n,\n    setGlobalDateI18n: setGlobalDateI18n,\n    setGlobalDateMasks: setGlobalDateMasks\n};\n\nexport default fecha;\nexport { assign, format, parse, defaultI18n, setGlobalDateI18n, setGlobalDateMasks };\n//# sourceMappingURL=fecha.js.map\n","import { isDate, isString, last } from '@antv/util';\nimport fecha from 'fecha';\nimport * as fecha1 from 'fecha';\nimport bisector from './bisector';\nvar FORMAT_METHOD = 'format';\nexport function timeFormat(time, mask) {\n    var method = fecha1[FORMAT_METHOD] || fecha[FORMAT_METHOD];\n    return method(time, mask);\n}\n/**\n * 转换成时间戳\n * @param value 时间值\n */\nexport function toTimeStamp(value) {\n    if (isString(value)) {\n        if (value.indexOf('T') > 0) {\n            value = new Date(value).getTime();\n        }\n        else {\n            // new Date('2010/01/10') 和 new Date('2010-01-10') 的差别在于:\n            // 如果仅有年月日时，前者是带有时区的: Fri Jan 10 2020 02:40:13 GMT+0800 (中国标准时间)\n            // 后者会格式化成 Sun Jan 10 2010 08:00:00 GMT+0800 (中国标准时间)\n            value = new Date(value.replace(/-/gi, '/')).getTime();\n        }\n    }\n    if (isDate(value)) {\n        value = value.getTime();\n    }\n    return value;\n}\nvar SECOND = 1000;\nvar MINUTE = 60 * SECOND;\nvar HOUR = 60 * MINUTE;\nvar DAY = 24 * HOUR;\nvar MONTH = DAY * 31;\nvar YEAR = DAY * 365;\nexport { SECOND, MINUTE, HOUR, DAY, MONTH, YEAR };\nvar intervals = [\n    ['HH:mm:ss', SECOND],\n    ['HH:mm:ss', SECOND * 10],\n    ['HH:mm:ss', SECOND * 30],\n    ['HH:mm', MINUTE],\n    ['HH:mm', MINUTE * 10],\n    ['HH:mm', MINUTE * 30],\n    ['HH', HOUR],\n    ['HH', HOUR * 6],\n    ['HH', HOUR * 12],\n    ['YYYY-MM-DD', DAY],\n    ['YYYY-MM-DD', DAY * 4],\n    ['YYYY-WW', DAY * 7],\n    ['YYYY-MM', MONTH],\n    ['YYYY-MM', MONTH * 4],\n    ['YYYY-MM', MONTH * 6],\n    ['YYYY', DAY * 380],\n];\nexport function getTickInterval(min, max, tickCount) {\n    var target = (max - min) / tickCount;\n    var idx = bisector(function (o) { return o[1]; })(intervals, target) - 1;\n    var interval = intervals[idx];\n    if (idx < 0) {\n        interval = intervals[0];\n    }\n    else if (idx >= intervals.length) {\n        interval = last(intervals);\n    }\n    return interval;\n}\n//# sourceMappingURL=time.js.map","import { isNil } from '@antv/util';\n/**\n * 二分右侧查找\n * https://github.com/d3/d3-array/blob/master/src/bisector.js\n */\nexport default function (getter) {\n    /**\n     * x: 目标值\n     * lo: 起始位置\n     * hi: 结束位置\n     */\n    return function (a, x, _lo, _hi) {\n        var lo = isNil(_lo) ? 0 : _lo;\n        var hi = isNil(_hi) ? a.length : _hi;\n        while (lo < hi) {\n            var mid = (lo + hi) >>> 1;\n            if (getter(a[mid]) > x) {\n                hi = mid;\n            }\n            else {\n                lo = mid + 1;\n            }\n        }\n        return lo;\n    };\n}\n//# sourceMappingURL=bisector.js.map","import { __extends } from \"tslib\";\nimport { each, isNumber } from '@antv/util';\nimport { timeFormat, toTimeStamp } from '../util/time';\nimport Category from './base';\n/**\n * 时间分类度量\n * @class\n */\nvar TimeCat = /** @class */ (function (_super) {\n    __extends(TimeCat, _super);\n    function TimeCat() {\n        var _this = _super !== null && _super.apply(this, arguments) || this;\n        _this.type = 'timeCat';\n        return _this;\n    }\n    /**\n     * @override\n     */\n    TimeCat.prototype.translate = function (value) {\n        value = toTimeStamp(value);\n        var index = this.values.indexOf(value);\n        if (index === -1) {\n            if (isNumber(value) && value < this.values.length) {\n                index = value;\n            }\n            else {\n                index = NaN;\n            }\n        }\n        return index;\n    };\n    /**\n     * 由于时间类型数据需要转换一下，所以复写 getText\n     * @override\n     */\n    TimeCat.prototype.getText = function (value, tickIndex) {\n        var index = this.translate(value);\n        if (index > -1) {\n            var result = this.values[index];\n            var formatter = this.formatter;\n            result = formatter ? formatter(result, tickIndex) : timeFormat(result, this.mask);\n            return result;\n        }\n        return value;\n    };\n    TimeCat.prototype.initCfg = function () {\n        this.tickMethod = 'time-cat';\n        this.mask = 'YYYY-MM-DD';\n        this.tickCount = 7; // 一般时间数据会显示 7， 14， 30 天的数字\n    };\n    TimeCat.prototype.setDomain = function () {\n        var values = this.values;\n        // 针对时间分类类型，会将时间统一转换为时间戳\n        each(values, function (v, i) {\n            values[i] = toTimeStamp(v);\n        });\n        values.sort(function (v1, v2) {\n            return v1 - v2;\n        });\n        _super.prototype.setDomain.call(this);\n    };\n    return TimeCat;\n}(Category));\nexport default TimeCat;\n//# sourceMappingURL=time.js.map","import { __extends } from \"tslib\";\nimport { filter, getRange, head, isNil, last } from '@antv/util';\nimport Base from '../base';\n/**\n * 连续度量的基类\n * @class\n */\nvar Continuous = /** @class */ (function (_super) {\n    __extends(Continuous, _super);\n    function Continuous() {\n        var _this = _super !== null && _super.apply(this, arguments) || this;\n        _this.isContinuous = true;\n        return _this;\n    }\n    Continuous.prototype.scale = function (value) {\n        if (isNil(value)) {\n            return NaN;\n        }\n        var rangeMin = this.rangeMin();\n        var rangeMax = this.rangeMax();\n        var max = this.max;\n        var min = this.min;\n        if (max === min) {\n            return rangeMin;\n        }\n        var percent = this.getScalePercent(value);\n        return rangeMin + percent * (rangeMax - rangeMin);\n    };\n    Continuous.prototype.init = function () {\n        _super.prototype.init.call(this);\n        // init 完成后保证 min, max 包含 ticks 的范围\n        var ticks = this.ticks;\n        var firstTick = head(ticks);\n        var lastTick = last(ticks);\n        if (firstTick < this.min) {\n            this.min = firstTick;\n        }\n        if (lastTick > this.max) {\n            this.max = lastTick;\n        }\n        // strict-limit 方式\n        if (!isNil(this.minLimit)) {\n            this.min = firstTick;\n        }\n        if (!isNil(this.maxLimit)) {\n            this.max = lastTick;\n        }\n    };\n    Continuous.prototype.setDomain = function () {\n        var _a = getRange(this.values), min = _a.min, max = _a.max;\n        if (isNil(this.min)) {\n            this.min = min;\n        }\n        if (isNil(this.max)) {\n            this.max = max;\n        }\n        if (this.min > this.max) {\n            this.min = min;\n            this.max = max;\n        }\n    };\n    Continuous.prototype.calculateTicks = function () {\n        var _this = this;\n        var ticks = _super.prototype.calculateTicks.call(this);\n        if (!this.nice) {\n            ticks = filter(ticks, function (tick) {\n                return tick >= _this.min && tick <= _this.max;\n            });\n        }\n        return ticks;\n    };\n    // 计算原始值值占的百分比\n    Continuous.prototype.getScalePercent = function (value) {\n        var max = this.max;\n        var min = this.min;\n        return (value - min) / (max - min);\n    };\n    Continuous.prototype.getInvertPercent = function (value) {\n        return (value - this.rangeMin()) / (this.rangeMax() - this.rangeMin());\n    };\n    return Continuous;\n}(Base));\nexport default Continuous;\n//# sourceMappingURL=base.js.map","import { __extends } from \"tslib\";\nimport Continuous from './base';\n/**\n * 线性度量\n * @class\n */\nvar Linear = /** @class */ (function (_super) {\n    __extends(Linear, _super);\n    function Linear() {\n        var _this = _super !== null && _super.apply(this, arguments) || this;\n        _this.type = 'linear';\n        _this.isLinear = true;\n        return _this;\n    }\n    Linear.prototype.invert = function (value) {\n        var percent = this.getInvertPercent(value);\n        return this.min + percent * (this.max - this.min);\n    };\n    Linear.prototype.initCfg = function () {\n        this.tickMethod = 'wilkinson-extended';\n        this.nice = false;\n    };\n    return Linear;\n}(Continuous));\nexport default Linear;\n//# sourceMappingURL=linear.js.map","import { each, isNil } from '@antv/util';\n// 求以a为次幂，结果为b的基数，如 x^^a = b;求x\n// 虽然数学上 b 不支持负数，但是这里需要支持 负数\nexport function calBase(a, b) {\n    var e = Math.E;\n    var value;\n    if (b >= 0) {\n        value = Math.pow(e, Math.log(b) / a); // 使用换底公式求底\n    }\n    else {\n        value = Math.pow(e, Math.log(-b) / a) * -1; // 使用换底公式求底\n    }\n    return value;\n}\nexport function log(a, b) {\n    if (a === 1) {\n        return 1;\n    }\n    return Math.log(b) / Math.log(a);\n}\nexport function getLogPositiveMin(values, base, max) {\n    if (isNil(max)) {\n        max = Math.max.apply(null, values);\n    }\n    var positiveMin = max;\n    each(values, function (value) {\n        if (value > 0 && value < positiveMin) {\n            positiveMin = value;\n        }\n    });\n    if (positiveMin === max) {\n        positiveMin = max / base;\n    }\n    if (positiveMin > 1) {\n        positiveMin = 1;\n    }\n    return positiveMin;\n}\nfunction digitLength(num) {\n    // Get digit length of e\n    var eSplit = num.toString().split(/[eE]/);\n    var len = (eSplit[0].split('.')[1] || '').length - +(eSplit[1] || 0);\n    return len > 0 ? len : 0;\n}\n/**\n * 高精度加法，解决 0.1 + 0.2 !== 0.3 的经典问题\n *\n * @param num1 加数\n * @param num2 被加数\n * @return {number} 返回值\n */\nexport function precisionAdd(num1, num2) {\n    var num1Digits = digitLength(num1);\n    var num2Digits = digitLength(num2);\n    var baseNum = Math.pow(10, Math.max(num1Digits, num2Digits));\n    return (num1 * baseNum + num2 * baseNum) / baseNum;\n}\n//# sourceMappingURL=math.js.map","import { __extends } from \"tslib\";\nimport { getLogPositiveMin, log } from '../util/math';\nimport Continuous from './base';\n/**\n * Log 度量，处理非均匀分布\n */\nvar Log = /** @class */ (function (_super) {\n    __extends(Log, _super);\n    function Log() {\n        var _this = _super !== null && _super.apply(this, arguments) || this;\n        _this.type = 'log';\n        return _this;\n    }\n    /**\n     * @override\n     */\n    Log.prototype.invert = function (value) {\n        var base = this.base;\n        var max = log(base, this.max);\n        var rangeMin = this.rangeMin();\n        var range = this.rangeMax() - rangeMin;\n        var min;\n        var positiveMin = this.positiveMin;\n        if (positiveMin) {\n            if (value === 0) {\n                return 0;\n            }\n            min = log(base, positiveMin / base);\n            var appendPercent = (1 / (max - min)) * range; // 0 到 positiveMin的占比\n            if (value < appendPercent) {\n                // 落到 0 - positiveMin 之间\n                return (value / appendPercent) * positiveMin;\n            }\n        }\n        else {\n            min = log(base, this.min);\n        }\n        var percent = (value - rangeMin) / range;\n        var tmp = percent * (max - min) + min;\n        return Math.pow(base, tmp);\n    };\n    Log.prototype.initCfg = function () {\n        this.tickMethod = 'log';\n        this.base = 10;\n        this.tickCount = 6;\n        this.nice = true;\n    };\n    // 设置\n    Log.prototype.setDomain = function () {\n        _super.prototype.setDomain.call(this);\n        var min = this.min;\n        if (min < 0) {\n            throw new Error('When you use log scale, the minimum value must be greater than zero!');\n        }\n        if (min === 0) {\n            this.positiveMin = getLogPositiveMin(this.values, this.base, this.max);\n        }\n    };\n    // 根据当前值获取占比\n    Log.prototype.getScalePercent = function (value) {\n        var max = this.max;\n        var min = this.min;\n        if (max === min) {\n            return 0;\n        }\n        // 如果值小于等于0，则按照0处理\n        if (value <= 0) {\n            return 0;\n        }\n        var base = this.base;\n        var positiveMin = this.positiveMin;\n        // 如果min == 0, 则根据比0大的最小值，计算比例关系。这个最小值作为坐标轴上的第二个tick，第一个是0但是不显示\n        if (positiveMin) {\n            min = (positiveMin * 1) / base;\n        }\n        var percent;\n        // 如果数值小于次小值，那么就计算 value / 次小值 占整体的比例\n        if (value < positiveMin) {\n            percent = value / positiveMin / (log(base, max) - log(base, min));\n        }\n        else {\n            percent = (log(base, value) - log(base, min)) / (log(base, max) - log(base, min));\n        }\n        return percent;\n    };\n    return Log;\n}(Continuous));\nexport default Log;\n//# sourceMappingURL=log.js.map","import { __extends } from \"tslib\";\nimport { calBase } from '../util/math';\nimport Continuous from './base';\n/**\n * Pow 度量，处理非均匀分布\n */\nvar Pow = /** @class */ (function (_super) {\n    __extends(Pow, _super);\n    function Pow() {\n        var _this = _super !== null && _super.apply(this, arguments) || this;\n        _this.type = 'pow';\n        return _this;\n    }\n    /**\n     * @override\n     */\n    Pow.prototype.invert = function (value) {\n        var percent = this.getInvertPercent(value);\n        var exponent = this.exponent;\n        var max = calBase(exponent, this.max);\n        var min = calBase(exponent, this.min);\n        var tmp = percent * (max - min) + min;\n        var factor = tmp >= 0 ? 1 : -1;\n        return Math.pow(tmp, exponent) * factor;\n    };\n    Pow.prototype.initCfg = function () {\n        this.tickMethod = 'pow';\n        this.exponent = 2;\n        this.tickCount = 5;\n        this.nice = true;\n    };\n    // 获取度量计算时，value占的定义域百分比\n    Pow.prototype.getScalePercent = function (value) {\n        var max = this.max;\n        var min = this.min;\n        if (max === min) {\n            return 0;\n        }\n        var exponent = this.exponent;\n        var percent = (calBase(exponent, value) - calBase(exponent, min)) / (calBase(exponent, max) - calBase(exponent, min));\n        return percent;\n    };\n    return Pow;\n}(Continuous));\nexport default Pow;\n//# sourceMappingURL=pow.js.map","import { __extends } from \"tslib\";\nimport { each, isDate, isNil, isNumber, isString } from '@antv/util';\nimport { timeFormat, toTimeStamp } from '../util/time';\nimport Linear from './linear';\n/**\n * 时间度量\n * @class\n */\nvar Time = /** @class */ (function (_super) {\n    __extends(Time, _super);\n    function Time() {\n        var _this = _super !== null && _super.apply(this, arguments) || this;\n        _this.type = 'time';\n        return _this;\n    }\n    /**\n     * @override\n     */\n    Time.prototype.getText = function (value, index) {\n        var numberValue = this.translate(value);\n        var formatter = this.formatter;\n        return formatter ? formatter(numberValue, index) : timeFormat(numberValue, this.mask);\n    };\n    /**\n     * @override\n     */\n    Time.prototype.scale = function (value) {\n        var v = value;\n        if (isString(v) || isDate(v)) {\n            v = this.translate(v);\n        }\n        return _super.prototype.scale.call(this, v);\n    };\n    /**\n     * 将时间转换成数字\n     * @override\n     */\n    Time.prototype.translate = function (v) {\n        return toTimeStamp(v);\n    };\n    Time.prototype.initCfg = function () {\n        this.tickMethod = 'time-pretty';\n        this.mask = 'YYYY-MM-DD';\n        this.tickCount = 7;\n        this.nice = false;\n    };\n    Time.prototype.setDomain = function () {\n        var values = this.values;\n        // 是否设置了 min, max，而不是直接取 this.min, this.max\n        var minConfig = this.getConfig('min');\n        var maxConfig = this.getConfig('max');\n        // 如果设置了 min,max 则转换成时间戳\n        if (!isNil(minConfig) || !isNumber(minConfig)) {\n            this.min = this.translate(this.min);\n        }\n        if (!isNil(maxConfig) || !isNumber(maxConfig)) {\n            this.max = this.translate(this.max);\n        }\n        // 没有设置 min, max 时\n        if (values && values.length) {\n            // 重新计算最大最小值\n            var timeStamps_1 = [];\n            var min_1 = Infinity; // 最小值\n            var secondMin_1 = min_1; // 次小值\n            var max_1 = 0;\n            // 使用一个循环，计算min,max,secondMin\n            each(values, function (v) {\n                var timeStamp = toTimeStamp(v);\n                if (isNaN(timeStamp)) {\n                    throw new TypeError(\"Invalid Time: \" + v + \" in time scale!\");\n                }\n                if (min_1 > timeStamp) {\n                    secondMin_1 = min_1;\n                    min_1 = timeStamp;\n                }\n                else if (secondMin_1 > timeStamp) {\n                    secondMin_1 = timeStamp;\n                }\n                if (max_1 < timeStamp) {\n                    max_1 = timeStamp;\n                }\n                timeStamps_1.push(timeStamp);\n            });\n            // 存在多个值时，设置最小间距\n            if (values.length > 1) {\n                this.minTickInterval = secondMin_1 - min_1;\n            }\n            if (isNil(minConfig)) {\n                this.min = min_1;\n            }\n            if (isNil(maxConfig)) {\n                this.max = max_1;\n            }\n        }\n    };\n    return Time;\n}(Linear));\nexport default Time;\n//# sourceMappingURL=time.js.map","import { __extends } from \"tslib\";\nimport { each, head, last } from '@antv/util';\nimport Continuous from './base';\n/**\n * 分段度量\n */\nvar Quantize = /** @class */ (function (_super) {\n    __extends(Quantize, _super);\n    function Quantize() {\n        var _this = _super !== null && _super.apply(this, arguments) || this;\n        _this.type = 'quantize';\n        return _this;\n    }\n    Quantize.prototype.invert = function (value) {\n        var ticks = this.ticks;\n        var length = ticks.length;\n        var percent = this.getInvertPercent(value);\n        var minIndex = Math.floor(percent * (length - 1));\n        // 最后一个\n        if (minIndex >= length - 1) {\n            return last(ticks);\n        }\n        // 超出左边界， 则取第一个\n        if (minIndex < 0) {\n            return head(ticks);\n        }\n        var minTick = ticks[minIndex];\n        var nextTick = ticks[minIndex + 1];\n        // 比当前值小的 tick 在度量上的占比\n        var minIndexPercent = minIndex / (length - 1);\n        var maxIndexPercent = (minIndex + 1) / (length - 1);\n        return minTick + (percent - minIndexPercent) / (maxIndexPercent - minIndexPercent) * (nextTick - minTick);\n    };\n    Quantize.prototype.initCfg = function () {\n        this.tickMethod = 'r-pretty';\n        this.tickCount = 5;\n        this.nice = true;\n    };\n    Quantize.prototype.calculateTicks = function () {\n        var ticks = _super.prototype.calculateTicks.call(this);\n        if (!this.nice) { // 如果 nice = false ,补充 min, max\n            if (last(ticks) !== this.max) {\n                ticks.push(this.max);\n            }\n            if (head(ticks) !== this.min) {\n                ticks.unshift(this.min);\n            }\n        }\n        return ticks;\n    };\n    // 计算当前值在刻度中的占比\n    Quantize.prototype.getScalePercent = function (value) {\n        var ticks = this.ticks;\n        // 超出左边界\n        if (value < head(ticks)) {\n            return 0;\n        }\n        // 超出右边界\n        if (value > last(ticks)) {\n            return 1;\n        }\n        var minIndex = 0;\n        each(ticks, function (tick, index) {\n            if (value >= tick) {\n                minIndex = index;\n            }\n            else {\n                return false;\n            }\n        });\n        return minIndex / (ticks.length - 1);\n    };\n    return Quantize;\n}(Continuous));\nexport default Quantize;\n//# sourceMappingURL=quantize.js.map","import { __extends } from \"tslib\";\nimport Quantize from './quantize';\nvar Quantile = /** @class */ (function (_super) {\n    __extends(Quantile, _super);\n    function Quantile() {\n        var _this = _super !== null && _super.apply(this, arguments) || this;\n        _this.type = 'quantile';\n        return _this;\n    }\n    Quantile.prototype.initCfg = function () {\n        this.tickMethod = 'quantile';\n        this.tickCount = 5;\n        this.nice = true;\n    };\n    return Quantile;\n}(Quantize));\nexport default Quantile;\n//# sourceMappingURL=quantile.js.map","import Scale from './base';\nvar map = {};\nfunction getClass(key) {\n    return map[key];\n}\nfunction registerClass(key, cls) {\n    if (getClass(key)) {\n        throw new Error(\"type '\" + key + \"' existed.\");\n    }\n    map[key] = cls;\n}\nexport { Scale, getClass as getScale, registerClass as registerScale };\n//# sourceMappingURL=factory.js.map","import { __extends } from \"tslib\";\nimport { isNumber } from '@antv/util';\nimport Base from '../base';\n/**\n * identity scale原则上是定义域和值域一致，scale/invert方法也是一致的\n * 参考R的实现：https://github.com/r-lib/scales/blob/master/R/pal-identity.r\n * 参考d3的实现（做了下转型）：https://github.com/d3/d3-scale/blob/master/src/identity.js\n */\nvar Identity = /** @class */ (function (_super) {\n    __extends(Identity, _super);\n    function Identity() {\n        var _this = _super !== null && _super.apply(this, arguments) || this;\n        _this.type = 'identity';\n        _this.isIdentity = true;\n        return _this;\n    }\n    Identity.prototype.calculateTicks = function () {\n        return this.values;\n    };\n    Identity.prototype.scale = function (value) {\n        // 如果传入的值不等于 identity 的值，则直接返回，用于一维图时的 dodge\n        if (this.values[0] !== value && isNumber(value)) {\n            return value;\n        }\n        return this.range[0];\n    };\n    Identity.prototype.invert = function (value) {\n        var range = this.range;\n        if (value < range[0] || value > range[1]) {\n            return NaN;\n        }\n        return this.values[0];\n    };\n    return Identity;\n}(Base));\nexport default Identity;\n//# sourceMappingURL=index.js.map","import { filter, isNil, isNumber, last } from '@antv/util';\n/**\n * 计算分类 ticks\n * @param cfg 度量的配置项\n * @returns 计算后的 ticks\n */\nexport default function calculateCatTicks(cfg) {\n    var values = cfg.values, tickInterval = cfg.tickInterval, tickCount = cfg.tickCount, showLast = cfg.showLast;\n    if (isNumber(tickInterval)) {\n        var ticks_1 = filter(values, function (__, i) { return i % tickInterval === 0; });\n        var lastValue = last(values);\n        if (showLast && last(ticks_1) !== lastValue) {\n            ticks_1.push(lastValue);\n        }\n        return ticks_1;\n    }\n    var len = values.length;\n    var min = cfg.min, max = cfg.max;\n    if (isNil(min)) {\n        min = 0;\n    }\n    if (isNil(max)) {\n        max = values.length - 1;\n    }\n    if (!isNumber(tickCount) || tickCount >= len)\n        return values.slice(min, max + 1);\n    if (tickCount <= 0 || max <= 0)\n        return [];\n    var interval = tickCount === 1 ? len : Math.floor(len / (tickCount - 1));\n    var ticks = [];\n    var idx = min;\n    for (var i = 0; i < tickCount; i++) {\n        if (idx >= max)\n            break;\n        idx = Math.min(min + i * interval, max);\n        if (i === tickCount - 1 && showLast)\n            ticks.push(values[max]);\n        else\n            ticks.push(values[idx]);\n    }\n    return ticks;\n}\n//# sourceMappingURL=cat.js.map","export default function d3Linear(cfg) {\n    var min = cfg.min, max = cfg.max, nice = cfg.nice, tickCount = cfg.tickCount;\n    var linear = new D3Linear();\n    linear.domain([min, max]);\n    if (nice) {\n        linear.nice(tickCount);\n    }\n    return linear.ticks(tickCount);\n}\nvar DEFAULT_COUNT = 5;\nvar e10 = Math.sqrt(50);\nvar e5 = Math.sqrt(10);\nvar e2 = Math.sqrt(2);\n// https://github.com/d3/d3-scale\nvar D3Linear = /** @class */ (function () {\n    function D3Linear() {\n        this._domain = [0, 1];\n    }\n    D3Linear.prototype.domain = function (domain) {\n        if (domain) {\n            this._domain = Array.from(domain, Number);\n            return this;\n        }\n        return this._domain.slice();\n    };\n    D3Linear.prototype.nice = function (count) {\n        var _a, _b;\n        if (count === void 0) { count = DEFAULT_COUNT; }\n        var d = this._domain.slice();\n        var i0 = 0;\n        var i1 = this._domain.length - 1;\n        var start = this._domain[i0];\n        var stop = this._domain[i1];\n        var step;\n        if (stop < start) {\n            _a = [stop, start], start = _a[0], stop = _a[1];\n            _b = [i1, i0], i0 = _b[0], i1 = _b[1];\n        }\n        step = tickIncrement(start, stop, count);\n        if (step > 0) {\n            start = Math.floor(start / step) * step;\n            stop = Math.ceil(stop / step) * step;\n            step = tickIncrement(start, stop, count);\n        }\n        else if (step < 0) {\n            start = Math.ceil(start * step) / step;\n            stop = Math.floor(stop * step) / step;\n            step = tickIncrement(start, stop, count);\n        }\n        if (step > 0) {\n            d[i0] = Math.floor(start / step) * step;\n            d[i1] = Math.ceil(stop / step) * step;\n            this.domain(d);\n        }\n        else if (step < 0) {\n            d[i0] = Math.ceil(start * step) / step;\n            d[i1] = Math.floor(stop * step) / step;\n            this.domain(d);\n        }\n        return this;\n    };\n    D3Linear.prototype.ticks = function (count) {\n        if (count === void 0) { count = DEFAULT_COUNT; }\n        return d3ArrayTicks(this._domain[0], this._domain[this._domain.length - 1], count || DEFAULT_COUNT);\n    };\n    return D3Linear;\n}());\nexport { D3Linear };\nfunction d3ArrayTicks(start, stop, count) {\n    var reverse;\n    var i = -1;\n    var n;\n    var ticks;\n    var step;\n    (stop = +stop), (start = +start), (count = +count);\n    if (start === stop && count > 0) {\n        return [start];\n    }\n    // tslint:disable-next-line\n    if ((reverse = stop < start)) {\n        (n = start), (start = stop), (stop = n);\n    }\n    // tslint:disable-next-line\n    if ((step = tickIncrement(start, stop, count)) === 0 || !isFinite(step)) {\n        return [];\n    }\n    if (step > 0) {\n        start = Math.ceil(start / step);\n        stop = Math.floor(stop / step);\n        ticks = new Array((n = Math.ceil(stop - start + 1)));\n        while (++i < n) {\n            ticks[i] = (start + i) * step;\n        }\n    }\n    else {\n        start = Math.floor(start * step);\n        stop = Math.ceil(stop * step);\n        ticks = new Array((n = Math.ceil(start - stop + 1)));\n        while (++i < n) {\n            ticks[i] = (start - i) / step;\n        }\n    }\n    if (reverse) {\n        ticks.reverse();\n    }\n    return ticks;\n}\nfunction tickIncrement(start, stop, count) {\n    var step = (stop - start) / Math.max(0, count);\n    var power = Math.floor(Math.log(step) / Math.LN10);\n    var error = step / Math.pow(10, power);\n    return power >= 0\n        ? (error >= e10 ? 10 : error >= e5 ? 5 : error >= e2 ? 2 : 1) * Math.pow(10, power)\n        : -Math.pow(10, -power) / (error >= e10 ? 10 : error >= e5 ? 5 : error >= e2 ? 2 : 1);\n}\n//# sourceMappingURL=d3-linear.js.map","import { fixedBase } from '@antv/util';\nfunction snapMultiple(v, base, snapType) {\n    var div;\n    if (snapType === 'ceil') {\n        div = Math.ceil(v / base);\n    }\n    else if (snapType === 'floor') {\n        div = Math.floor(v / base);\n    }\n    else {\n        div = Math.round(v / base);\n    }\n    return div * base;\n}\nexport default function intervalTicks(min, max, interval) {\n    // 变成 interval 的倍数\n    var minTick = snapMultiple(min, interval, 'floor');\n    var maxTick = snapMultiple(max, interval, 'ceil');\n    // 统一小数位数\n    minTick = fixedBase(minTick, interval);\n    maxTick = fixedBase(maxTick, interval);\n    var ticks = [];\n    // https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Errors/Invalid_array_length\n    var availableInterval = Math.max((maxTick - minTick) / (Math.pow(2, 12) - 1), interval);\n    for (var i = minTick; i <= maxTick; i = i + availableInterval) {\n        var tickValue = fixedBase(i, availableInterval); // 防止浮点数加法出现问题\n        ticks.push(tickValue);\n    }\n    return {\n        min: minTick,\n        max: maxTick,\n        ticks: ticks\n    };\n}\n//# sourceMappingURL=interval.js.map","import { isNil } from '@antv/util';\n/**\n * 按照给定的 minLimit/maxLimit/tickCount 均匀计算出刻度 ticks\n *\n * @param cfg Scale 配置项\n * @return ticks\n */\nexport default function strictLimit(cfg, defaultMin, defaultMax) {\n    var _a;\n    var minLimit = cfg.minLimit, maxLimit = cfg.maxLimit, min = cfg.min, max = cfg.max, _b = cfg.tickCount, tickCount = _b === void 0 ? 5 : _b;\n    var tickMin = isNil(minLimit) ? (isNil(defaultMin) ? min : defaultMin) : minLimit;\n    var tickMax = isNil(maxLimit) ? (isNil(defaultMax) ? max : defaultMax) : maxLimit;\n    if (tickMin > tickMax) {\n        _a = [tickMin, tickMax], tickMax = _a[0], tickMin = _a[1];\n    }\n    if (tickCount <= 2) {\n        return [tickMin, tickMax];\n    }\n    var step = (tickMax - tickMin) / (tickCount - 1);\n    var ticks = [];\n    for (var i = 0; i < tickCount; i++) {\n        ticks.push(tickMin + step * i);\n    }\n    return ticks;\n}\n//# sourceMappingURL=strict-limit.js.map","// 为了解决 js 运算的精度问题\nexport function prettyNumber(n) {\n    return Math.abs(n) < 1e-15 ? n : parseFloat(n.toFixed(15));\n}\n//# sourceMappingURL=pretty-number.js.map","import { head, indexOf, size, last } from '@antv/util';\nimport { prettyNumber } from './pretty-number';\nexport var DEFAULT_Q = [1, 5, 2, 2.5, 4, 3];\nexport var ALL_Q = [1, 5, 2, 2.5, 4, 3, 1.5, 7, 6, 8, 9];\nvar eps = Number.EPSILON * 100;\nfunction mod(n, m) {\n    return ((n % m) + m) % m;\n}\nfunction round(n) {\n    return Math.round(n * 1e12) / 1e12;\n}\nfunction simplicity(q, Q, j, lmin, lmax, lstep) {\n    var n = size(Q);\n    var i = indexOf(Q, q);\n    var v = 0;\n    var m = mod(lmin, lstep);\n    if ((m < eps || lstep - m < eps) && lmin <= 0 && lmax >= 0) {\n        v = 1;\n    }\n    return 1 - i / (n - 1) - j + v;\n}\nfunction simplicityMax(q, Q, j) {\n    var n = size(Q);\n    var i = indexOf(Q, q);\n    var v = 1;\n    return 1 - i / (n - 1) - j + v;\n}\nfunction density(k, m, dMin, dMax, lMin, lMax) {\n    var r = (k - 1) / (lMax - lMin);\n    var rt = (m - 1) / (Math.max(lMax, dMax) - Math.min(dMin, lMin));\n    return 2 - Math.max(r / rt, rt / r);\n}\nfunction densityMax(k, m) {\n    if (k >= m) {\n        return 2 - (k - 1) / (m - 1);\n    }\n    return 1;\n}\nfunction coverage(dMin, dMax, lMin, lMax) {\n    var range = dMax - dMin;\n    return 1 - (0.5 * (Math.pow((dMax - lMax), 2) + Math.pow((dMin - lMin), 2))) / Math.pow((0.1 * range), 2);\n}\nfunction coverageMax(dMin, dMax, span) {\n    var range = dMax - dMin;\n    if (span > range) {\n        var half = (span - range) / 2;\n        return 1 - Math.pow(half, 2) / Math.pow((0.1 * range), 2);\n    }\n    return 1;\n}\nfunction legibility() {\n    return 1;\n}\n/**\n * An Extension of Wilkinson's Algorithm for Position Tick Labels on Axes\n * https://www.yuque.com/preview/yuque/0/2019/pdf/185317/1546999150858-45c3b9c2-4e86-4223-bf1a-8a732e8195ed.pdf\n * @param dMin 最小值\n * @param dMax 最大值\n * @param m tick个数\n * @param onlyLoose 是否允许扩展min、max，不绝对强制，例如[3, 97]\n * @param Q nice numbers集合\n * @param w 四个优化组件的权重\n */\nexport default function extended(dMin, dMax, n, onlyLoose, Q, w) {\n    if (n === void 0) { n = 5; }\n    if (onlyLoose === void 0) { onlyLoose = true; }\n    if (Q === void 0) { Q = DEFAULT_Q; }\n    if (w === void 0) { w = [0.25, 0.2, 0.5, 0.05]; }\n    // 处理小于 0 和小数的 tickCount\n    var m = n < 0 ? 0 : Math.round(n);\n    // nan 也会导致异常\n    if (Number.isNaN(dMin) || Number.isNaN(dMax) || typeof dMin !== 'number' || typeof dMax !== 'number' || !m) {\n        return {\n            min: 0,\n            max: 0,\n            ticks: [],\n        };\n    }\n    // js 极大值极小值问题，差值小于 1e-15 会导致计算出错\n    if (dMax - dMin < 1e-15 || m === 1) {\n        return {\n            min: dMin,\n            max: dMax,\n            ticks: [dMin],\n        };\n    }\n    // js 超大值问题\n    if (dMax - dMin > 1e148) {\n        var count = n || 5;\n        var step_1 = (dMax - dMin) / count;\n        return {\n            min: dMin,\n            max: dMax,\n            ticks: Array(count).fill(null).map(function (_, idx) {\n                return prettyNumber(dMin + step_1 * idx);\n            }),\n        };\n    }\n    var best = {\n        score: -2,\n        lmin: 0,\n        lmax: 0,\n        lstep: 0,\n    };\n    var j = 1;\n    while (j < Infinity) {\n        for (var i = 0; i < Q.length; i += 1) {\n            var q = Q[i];\n            var sm = simplicityMax(q, Q, j);\n            if (w[0] * sm + w[1] + w[2] + w[3] < best.score) {\n                j = Infinity;\n                break;\n            }\n            var k = 2;\n            while (k < Infinity) {\n                var dm = densityMax(k, m);\n                if (w[0] * sm + w[1] + w[2] * dm + w[3] < best.score) {\n                    break;\n                }\n                var delta = (dMax - dMin) / (k + 1) / j / q;\n                var z = Math.ceil(Math.log10(delta));\n                while (z < Infinity) {\n                    var step = j * q * Math.pow(10, z);\n                    var cm = coverageMax(dMin, dMax, step * (k - 1));\n                    if (w[0] * sm + w[1] * cm + w[2] * dm + w[3] < best.score) {\n                        break;\n                    }\n                    var minStart = Math.floor(dMax / step) * j - (k - 1) * j;\n                    var maxStart = Math.ceil(dMin / step) * j;\n                    if (minStart <= maxStart) {\n                        var count = maxStart - minStart;\n                        for (var i_1 = 0; i_1 <= count; i_1 += 1) {\n                            var start = minStart + i_1;\n                            var lMin = start * (step / j);\n                            var lMax = lMin + step * (k - 1);\n                            var lStep = step;\n                            var s = simplicity(q, Q, j, lMin, lMax, lStep);\n                            var c = coverage(dMin, dMax, lMin, lMax);\n                            var g = density(k, m, dMin, dMax, lMin, lMax);\n                            var l = legibility();\n                            var score = w[0] * s + w[1] * c + w[2] * g + w[3] * l;\n                            if (score > best.score && (!onlyLoose || (lMin <= dMin && lMax >= dMax))) {\n                                best.lmin = lMin;\n                                best.lmax = lMax;\n                                best.lstep = lStep;\n                                best.score = score;\n                            }\n                        }\n                    }\n                    z += 1;\n                }\n                k += 1;\n            }\n        }\n        j += 1;\n    }\n    // 处理精度问题，保证这三个数没有精度问题\n    var lmax = prettyNumber(best.lmax);\n    var lmin = prettyNumber(best.lmin);\n    var lstep = prettyNumber(best.lstep);\n    // 加 round 是为处理 extended(0.94, 1, 5)\n    // 保证生成的 tickCount 没有精度问题\n    var tickCount = Math.floor(round((lmax - lmin) / lstep)) + 1;\n    var ticks = new Array(tickCount);\n    // 少用乘法：防止出现 -1.2 + 1.2 * 3 = 2.3999999999999995 的情况\n    ticks[0] = prettyNumber(lmin);\n    for (var i = 1; i < tickCount; i++) {\n        ticks[i] = prettyNumber(ticks[i - 1] + lstep);\n    }\n    return {\n        min: Math.min(dMin, head(ticks)),\n        max: Math.max(dMax, last(ticks)),\n        ticks: ticks,\n    };\n}\n//# sourceMappingURL=extended.js.map","import { prettyNumber } from './pretty-number';\nexport default function pretty(min, max, m) {\n    if (m === void 0) { m = 5; }\n    if (min === max) {\n        return {\n            max: max,\n            min: min,\n            ticks: [min],\n        };\n    }\n    var n = m < 0 ? 0 : Math.round(m);\n    if (n === 0)\n        return { max: max, min: min, ticks: [] };\n    /*\n      R pretty:\n      https://svn.r-project.org/R/trunk/src/appl/pretty.c\n      https://www.rdocumentation.org/packages/base/versions/3.5.2/topics/pretty\n      */\n    var h = 1.5; // high.u.bias\n    var h5 = 0.5 + 1.5 * h; // u5.bias\n    // 反正我也不会调参，跳过所有判断步骤\n    var d = max - min;\n    var c = d / n;\n    // 当d非常小的时候触发，但似乎没什么用\n    // const min_n = Math.floor(n / 3);\n    // const shrink_sml = Math.pow(2, 5);\n    // if (Math.log10(d) < -2) {\n    //   c = (_.max([ Math.abs(max), Math.abs(min) ]) * shrink_sml) / min_n;\n    // }\n    var base = Math.pow(10, Math.floor(Math.log10(c)));\n    var unit = base;\n    if (2 * base - c < h * (c - unit)) {\n        unit = 2 * base;\n        if (5 * base - c < h5 * (c - unit)) {\n            unit = 5 * base;\n            if (10 * base - c < h * (c - unit)) {\n                unit = 10 * base;\n            }\n        }\n    }\n    var nu = Math.ceil(max / unit);\n    var ns = Math.floor(min / unit);\n    var hi = Math.max(nu * unit, max);\n    var lo = Math.min(ns * unit, min);\n    var size = Math.floor((hi - lo) / unit) + 1;\n    var ticks = new Array(size);\n    for (var i = 0; i < size; i++) {\n        ticks[i] = prettyNumber(lo + i * unit);\n    }\n    return {\n        min: lo,\n        max: hi,\n        ticks: ticks,\n    };\n}\n//# sourceMappingURL=pretty.js.map","/**\n * 计算几分位 https://github.com/simple-statistics/simple-statistics/blob/master/src/quantile_sorted.js\n * @param x  数组\n * @param p  百分比\n */\nfunction quantileSorted(x, p) {\n    var idx = x.length * p;\n    /*if (x.length === 0) { // 当前场景这些条件不可能命中\n      throw new Error('quantile requires at least one value.');\n    } else if (p < 0 || p > 1) {\n      throw new Error('quantiles must be between 0 and 1');\n    } else */\n    if (p === 1) {\n        // If p is 1, directly return the last element\n        return x[x.length - 1];\n    }\n    else if (p === 0) {\n        // If p is 0, directly return the first element\n        return x[0];\n    }\n    else if (idx % 1 !== 0) {\n        // If p is not integer, return the next element in array\n        return x[Math.ceil(idx) - 1];\n    }\n    else if (x.length % 2 === 0) {\n        // If the list has even-length, we'll take the average of this number\n        // and the next value, if there is one\n        return (x[idx - 1] + x[idx]) / 2;\n    }\n    else {\n        // Finally, in the simple case of an integer value\n        // with an odd-length list, return the x value at the index.\n        return x[idx];\n    }\n}\nexport default function calculateTicks(cfg) {\n    var tickCount = cfg.tickCount, values = cfg.values;\n    if (!values || !values.length) {\n        return [];\n    }\n    var sorted = values.slice().sort(function (a, b) {\n        return a - b;\n    });\n    var ticks = [];\n    for (var i = 0; i < tickCount; i++) {\n        var p = i / (tickCount - 1);\n        ticks.push(quantileSorted(sorted, p));\n    }\n    return ticks;\n}\n//# sourceMappingURL=quantile.js.map","import { DAY, HOUR, MINUTE, MONTH, SECOND, YEAR } from '../util/time';\nfunction getYear(date) {\n    return new Date(date).getFullYear();\n}\nfunction createYear(year) {\n    return new Date(year, 0, 1).getTime();\n}\nfunction getMonth(date) {\n    return new Date(date).getMonth();\n}\nfunction diffMonth(min, max) {\n    var minYear = getYear(min);\n    var maxYear = getYear(max);\n    var minMonth = getMonth(min);\n    var maxMonth = getMonth(max);\n    return (maxYear - minYear) * 12 + ((maxMonth - minMonth) % 12);\n}\nfunction creatMonth(year, month) {\n    return new Date(year, month, 1).getTime();\n}\nfunction diffDay(min, max) {\n    return Math.ceil((max - min) / DAY);\n}\nfunction diffHour(min, max) {\n    return Math.ceil((max - min) / HOUR);\n}\nfunction diffMinus(min, max) {\n    return Math.ceil((max - min) / (60 * 1000));\n}\n/**\n * 计算 time 的 ticks，对 month, year 进行 pretty 处理\n * @param cfg 度量的配置项\n * @returns 计算后的 ticks\n */\nexport default function timePretty(cfg) {\n    var min = cfg.min, max = cfg.max, minTickInterval = cfg.minTickInterval, tickCount = cfg.tickCount;\n    var tickInterval = cfg.tickInterval;\n    var ticks = [];\n    // 指定 tickInterval 后 tickCount 不生效，需要重新计算\n    if (!tickInterval) {\n        tickInterval = (max - min) / tickCount;\n        // 如果设置了最小间距，则使用最小间距\n        if (minTickInterval && tickInterval < minTickInterval) {\n            tickInterval = minTickInterval;\n        }\n    }\n    tickInterval = Math.max(Math.floor((max - min) / (Math.pow(2, 12) - 1)), tickInterval);\n    var minYear = getYear(min);\n    // 如果间距大于 1 年，则将开始日期从整年开始\n    if (tickInterval > YEAR) {\n        var maxYear = getYear(max);\n        var yearInterval = Math.ceil(tickInterval / YEAR);\n        for (var i = minYear; i <= maxYear + yearInterval; i = i + yearInterval) {\n            ticks.push(createYear(i));\n        }\n    }\n    else if (tickInterval > MONTH) {\n        // 大于月时\n        var monthInterval = Math.ceil(tickInterval / MONTH);\n        var mmMoth = getMonth(min);\n        var dMonths = diffMonth(min, max);\n        for (var i = 0; i <= dMonths + monthInterval; i = i + monthInterval) {\n            ticks.push(creatMonth(minYear, i + mmMoth));\n        }\n    }\n    else if (tickInterval > DAY) {\n        // 大于天\n        var date = new Date(min);\n        var year = date.getFullYear();\n        var month = date.getMonth();\n        var mday = date.getDate();\n        var day = Math.ceil(tickInterval / DAY);\n        var ddays = diffDay(min, max);\n        for (var i = 0; i < ddays + day; i = i + day) {\n            ticks.push(new Date(year, month, mday + i).getTime());\n        }\n    }\n    else if (tickInterval > HOUR) {\n        // 大于小时\n        var date = new Date(min);\n        var year = date.getFullYear();\n        var month = date.getMonth();\n        var day = date.getDate();\n        var hour = date.getHours();\n        var hours = Math.ceil(tickInterval / HOUR);\n        var dHours = diffHour(min, max);\n        for (var i = 0; i <= dHours + hours; i = i + hours) {\n            ticks.push(new Date(year, month, day, hour + i).getTime());\n        }\n    }\n    else if (tickInterval > MINUTE) {\n        // 大于分钟\n        var dMinus = diffMinus(min, max);\n        var minutes = Math.ceil(tickInterval / MINUTE);\n        for (var i = 0; i <= dMinus + minutes; i = i + minutes) {\n            ticks.push(min + i * MINUTE);\n        }\n    }\n    else {\n        // 小于分钟\n        var interval = tickInterval;\n        if (interval < SECOND) {\n            interval = SECOND;\n        }\n        var minSecond = Math.floor(min / SECOND) * SECOND;\n        var dSeconds = Math.ceil((max - min) / SECOND);\n        var seconds = Math.ceil(interval / SECOND);\n        for (var i = 0; i < dSeconds + seconds; i = i + seconds) {\n            ticks.push(minSecond + i * SECOND);\n        }\n    }\n    // 最好是能从算法能解决这个问题，但是如果指定了 tickInterval，计算 ticks，也只能这么算，所以\n    // 打印警告提示\n    if (ticks.length >= 512) {\n        console.warn(\"Notice: current ticks length(\" + ticks.length + \") >= 512, may cause performance issues, even out of memory. Because of the configure \\\"tickInterval\\\"(in milliseconds, current is \" + tickInterval + \") is too small, increase the value to solve the problem!\");\n    }\n    return ticks;\n}\n//# sourceMappingURL=time-pretty.js.map","import cat from './cat';\nimport d3Linear from './d3-linear';\nimport linear from './linear';\nimport log from './log';\nimport pow from './pow';\nimport quantile from './quantile';\nimport rPretty from './r-prettry';\nimport { getTickMethod, registerTickMethod } from './register';\nimport time from './time';\nimport timeCat from './time-cat';\nimport timePretty from './time-pretty';\nregisterTickMethod('cat', cat);\nregisterTickMethod('time-cat', timeCat);\nregisterTickMethod('wilkinson-extended', linear);\nregisterTickMethod('r-pretty', rPretty);\nregisterTickMethod('time', time);\nregisterTickMethod('time-pretty', timePretty);\nregisterTickMethod('log', log);\nregisterTickMethod('pow', pow);\nregisterTickMethod('quantile', quantile);\nregisterTickMethod('d3-linear', d3Linear);\nexport { getTickMethod, registerTickMethod };\n//# sourceMappingURL=index.js.map","import { __assign } from \"tslib\";\nimport catTicks from './cat';\n/**\n * 计算时间分类的 ticks, 保头，保尾\n * @param cfg 度量的配置项\n * @returns 计算后的 ticks\n */\nexport default function timeCat(cfg) {\n    // 默认保留最后一条\n    var ticks = catTicks(__assign({ showLast: true }, cfg));\n    return ticks;\n}\n//# sourceMappingURL=time-cat.js.map","import { head, isNil, last } from '@antv/util';\nimport extended from '../util/extended';\nimport interval from '../util/interval';\nimport strictLimit from '../util/strict-limit';\n/**\n * 计算线性的 ticks，使用 wilkinson extended 方法\n * @param cfg 度量的配置项\n * @returns 计算后的 ticks\n */\nexport default function linear(cfg) {\n    var min = cfg.min, max = cfg.max, tickCount = cfg.tickCount, nice = cfg.nice, tickInterval = cfg.tickInterval, minLimit = cfg.minLimit, maxLimit = cfg.maxLimit;\n    var ticks = extended(min, max, tickCount, nice).ticks;\n    if (!isNil(minLimit) || !isNil(maxLimit)) {\n        return strictLimit(cfg, head(ticks), last(ticks));\n    }\n    if (tickInterval) {\n        return interval(min, max, tickInterval).ticks;\n    }\n    return ticks;\n}\n//# sourceMappingURL=linear.js.map","import { head, isNil, last } from '@antv/util';\nimport interval from '../util/interval';\nimport pretty from '../util/pretty';\nimport strictLimit from '../util/strict-limit';\n/**\n * 计算线性的 ticks，使用 R's pretty 方法\n * @param cfg 度量的配置项\n * @returns 计算后的 ticks\n */\nexport default function linearPretty(cfg) {\n    var min = cfg.min, max = cfg.max, tickCount = cfg.tickCount, tickInterval = cfg.tickInterval, minLimit = cfg.minLimit, maxLimit = cfg.maxLimit;\n    var ticks = pretty(min, max, tickCount).ticks;\n    if (!isNil(minLimit) || !isNil(maxLimit)) {\n        return strictLimit(cfg, head(ticks), last(ticks));\n    }\n    if (tickInterval) {\n        return interval(min, max, tickInterval).ticks;\n    }\n    return ticks;\n}\n//# sourceMappingURL=r-prettry.js.map","import { getTickInterval } from '../util/time';\nexport default function calculateTimeTicks(cfg) {\n    var min = cfg.min, max = cfg.max, minTickInterval = cfg.minTickInterval;\n    var tickInterval = cfg.tickInterval;\n    var tickCount = cfg.tickCount;\n    // 指定 tickInterval 后 tickCount 不生效，需要重新计算\n    if (tickInterval) {\n        tickCount = Math.ceil((max - min) / tickInterval);\n    }\n    else {\n        tickInterval = getTickInterval(min, max, tickCount)[1];\n        var count = (max - min) / tickInterval;\n        var ratio = count / tickCount;\n        if (ratio > 1) {\n            tickInterval = tickInterval * Math.ceil(ratio);\n        }\n        // 如果设置了最小间距，则使用最小间距\n        if (minTickInterval && tickInterval < minTickInterval) {\n            tickInterval = minTickInterval;\n        }\n    }\n    tickInterval = Math.max(Math.floor((max - min) / (Math.pow(2, 12) - 1)), tickInterval);\n    var ticks = [];\n    for (var i = min; i < max + tickInterval; i += tickInterval) {\n        ticks.push(i);\n    }\n    return ticks;\n}\n//# sourceMappingURL=time.js.map","import { getLogPositiveMin, log } from '../util/math';\n/**\n * 计算 log 的 ticks，考虑 min = 0 的场景\n * @param cfg 度量的配置项\n * @returns 计算后的 ticks\n */\nexport default function calculateLogTicks(cfg) {\n    var base = cfg.base, tickCount = cfg.tickCount, min = cfg.min, max = cfg.max, values = cfg.values;\n    var minTick;\n    var maxTick = log(base, max);\n    if (min > 0) {\n        minTick = Math.floor(log(base, min));\n    }\n    else {\n        var positiveMin = getLogPositiveMin(values, base, max);\n        minTick = Math.floor(log(base, positiveMin));\n    }\n    var count = maxTick - minTick;\n    var avg = Math.ceil(count / tickCount);\n    var ticks = [];\n    for (var i = minTick; i < maxTick + avg; i = i + avg) {\n        ticks.push(Math.pow(base, i));\n    }\n    if (min <= 0) {\n        // 最小值 <= 0 时显示 0\n        ticks.unshift(0);\n    }\n    return ticks;\n}\n//# sourceMappingURL=log.js.map","import { calBase } from '../util/math';\nimport pretty from '../util/pretty';\n/**\n * 计算 Pow 的 ticks\n * @param cfg 度量的配置项\n * @returns 计算后的 ticks\n */\nexport default function calculatePowTicks(cfg) {\n    var exponent = cfg.exponent, tickCount = cfg.tickCount;\n    var max = Math.ceil(calBase(exponent, cfg.max));\n    var min = Math.floor(calBase(exponent, cfg.min));\n    var ticks = pretty(min, max, tickCount).ticks;\n    return ticks.map(function (tick) {\n        var factor = tick >= 0 ? 1 : -1;\n        return Math.pow(tick, exponent) * factor;\n    });\n}\n//# sourceMappingURL=pow.js.map","import { head, isNil, last } from '@antv/util';\nimport d3Linear from '../util/d3-linear';\nimport interval from '../util/interval';\nimport strictLimit from '../util/strict-limit';\nexport default function d3LinearTickMethod(cfg) {\n    var min = cfg.min, max = cfg.max, tickInterval = cfg.tickInterval, minLimit = cfg.minLimit, maxLimit = cfg.maxLimit;\n    var ticks = d3Linear(cfg);\n    if (!isNil(minLimit) || !isNil(maxLimit)) {\n        return strictLimit(cfg, head(ticks), last(ticks));\n    }\n    if (tickInterval) {\n        return interval(min, max, tickInterval).ticks;\n    }\n    return ticks;\n}\n//# sourceMappingURL=d3-linear.js.map","import Scale from './base';\nimport Category from './category/base';\nimport TimeCat from './category/time';\nimport Linear from './continuous/linear';\nimport Log from './continuous/log';\nimport Pow from './continuous/pow';\nimport Time from './continuous/time';\nimport Quantize from './continuous/quantize';\nimport Quantile from './continuous/quantile';\nimport { getScale, registerScale } from './factory';\nimport Identity from './identity/index';\nimport { getTickMethod, registerTickMethod } from './tick-method/index';\nregisterScale('cat', Category);\nregisterScale('category', Category);\nregisterScale('identity', Identity);\nregisterScale('linear', Linear);\nregisterScale('log', Log);\nregisterScale('pow', Pow);\nregisterScale('time', Time);\nregisterScale('timeCat', TimeCat);\nregisterScale('quantize', Quantize);\nregisterScale('quantile', Quantile);\nexport { Category, Identity, Linear, Log, Pow, Time, TimeCat, Quantile, Quantize, Scale, getScale, registerScale, getTickMethod, registerTickMethod, };\n//# sourceMappingURL=index.js.map","import Attribute from './attributes/base';\n// 所有的 attribute map\nvar ATTRIBUTE_MAP = {};\n/**\n * 通过类型获得 Attribute 类\n * @param type\n */\nvar getAttribute = function (type) {\n    return ATTRIBUTE_MAP[type.toLowerCase()];\n};\nvar registerAttribute = function (type, ctor) {\n    // 注册的时候，需要校验 type 重名，不区分大小写\n    if (getAttribute(type)) {\n        throw new Error(\"Attribute type '\".concat(type, \"' existed.\"));\n    }\n    // 存储到 map 中\n    ATTRIBUTE_MAP[type.toLowerCase()] = ctor;\n};\nexport { getAttribute, registerAttribute, Attribute };\nexport * from './interface';\n//# sourceMappingURL=factory.js.map","import Attribute from './attributes/base';\nimport Color from './attributes/color';\nimport Opacity from './attributes/opacity';\nimport Position from './attributes/position';\nimport Shape from './attributes/shape';\nimport Size from './attributes/size';\nimport { getAttribute, registerAttribute } from './factory';\nregisterAttribute('Color', Color);\nregisterAttribute('Opacity', Opacity);\nregisterAttribute('Position', Position);\nregisterAttribute('Shape', Shape);\nregisterAttribute('Size', Size);\nexport { registerAttribute, getAttribute, Attribute, \n// 以下 export 是为了兼容，理论上是不需要的\nColor, Opacity, Position, Shape, Size, };\nexport * from './interface';\n//# sourceMappingURL=index.js.map","import { __spreadArray } from \"tslib\";\nimport { ext, mat3, vec3 } from '@antv/matrix-util';\nimport { assign } from '@antv/util';\n/**\n * Coordinate Base Class\n */\nvar Coordinate = /** @class */ (function () {\n    function Coordinate(cfg) {\n        // 自身属性\n        this.type = 'coordinate';\n        this.isRect = false;\n        this.isHelix = false;\n        this.isPolar = false;\n        this.isReflectX = false;\n        this.isReflectY = false;\n        var start = cfg.start, end = cfg.end, _a = cfg.matrix, matrix = _a === void 0 ? [1, 0, 0, 0, 1, 0, 0, 0, 1] : _a, _b = cfg.isTransposed, isTransposed = _b === void 0 ? false : _b;\n        this.start = start;\n        this.end = end;\n        this.matrix = matrix;\n        this.originalMatrix = __spreadArray([], matrix); // 去除引用\n        this.isTransposed = isTransposed;\n    }\n    /**\n     * 初始化流程\n     */\n    Coordinate.prototype.initial = function () {\n        // center、width、height\n        this.center = {\n            x: (this.start.x + this.end.x) / 2,\n            y: (this.start.y + this.end.y) / 2,\n        };\n        this.width = Math.abs(this.end.x - this.start.x);\n        this.height = Math.abs(this.end.y - this.start.y);\n    };\n    /**\n     * 更新配置\n     * @param cfg\n     */\n    Coordinate.prototype.update = function (cfg) {\n        assign(this, cfg);\n        this.initial();\n    };\n    Coordinate.prototype.convertDim = function (percent, dim) {\n        var _a;\n        var _b = this[dim], start = _b.start, end = _b.end;\n        // 交换\n        if (this.isReflect(dim)) {\n            _a = [end, start], start = _a[0], end = _a[1];\n        }\n        return start + percent * (end - start);\n    };\n    Coordinate.prototype.invertDim = function (value, dim) {\n        var _a;\n        var _b = this[dim], start = _b.start, end = _b.end;\n        // 交换\n        if (this.isReflect(dim)) {\n            _a = [end, start], start = _a[0], end = _a[1];\n        }\n        return (value - start) / (end - start);\n    };\n    /**\n     * 将坐标点进行矩阵变换\n     * @param x   对应 x 轴画布坐标\n     * @param y   对应 y 轴画布坐标\n     * @param tag 默认为 0，可取值 0, 1\n     * @return    返回变换后的三阶向量 [x, y, z]\n     */\n    Coordinate.prototype.applyMatrix = function (x, y, tag) {\n        if (tag === void 0) { tag = 0; }\n        var matrix = this.matrix;\n        var vector = [x, y, tag];\n        vec3.transformMat3(vector, vector, matrix);\n        return vector;\n    };\n    /**\n     * 将坐标点进行矩阵逆变换\n     * @param x   对应 x 轴画布坐标\n     * @param y   对应 y 轴画布坐标\n     * @param tag 默认为 0，可取值 0, 1\n     * @return    返回矩阵逆变换后的三阶向量 [x, y, z]\n     */\n    Coordinate.prototype.invertMatrix = function (x, y, tag) {\n        if (tag === void 0) { tag = 0; }\n        var matrix = this.matrix;\n        var inverted = mat3.invert([0, 0, 0, 0, 0, 0, 0, 0, 0], matrix);\n        var vector = [x, y, tag];\n        if (inverted) {\n            // 如果为空则不进行矩阵变化，防止报错\n            vec3.transformMat3(vector, vector, inverted);\n        }\n        return vector;\n    };\n    /**\n     * 将归一化的坐标点数据转换为画布坐标，并根据坐标系当前矩阵进行变换\n     * @param point 归一化的坐标点\n     * @return      返回进行矩阵变换后的画布坐标\n     */\n    Coordinate.prototype.convert = function (point) {\n        var _a = this.convertPoint(point), x = _a.x, y = _a.y;\n        var vector = this.applyMatrix(x, y, 1);\n        return {\n            x: vector[0],\n            y: vector[1],\n        };\n    };\n    /**\n     * 将进行过矩阵变换画布坐标转换为归一化坐标\n     * @param point 画布坐标\n     * @return      返回归一化的坐标点\n     */\n    Coordinate.prototype.invert = function (point) {\n        var vector = this.invertMatrix(point.x, point.y, 1);\n        return this.invertPoint({\n            x: vector[0],\n            y: vector[1],\n        });\n    };\n    /**\n     * 坐标系旋转变换\n     * @param  radian 旋转弧度\n     * @return        返回坐标系对象\n     */\n    Coordinate.prototype.rotate = function (radian) {\n        var matrix = this.matrix;\n        var center = this.center;\n        ext.leftTranslate(matrix, matrix, [-center.x, -center.y]);\n        ext.leftRotate(matrix, matrix, radian);\n        ext.leftTranslate(matrix, matrix, [center.x, center.y]);\n        return this;\n    };\n    /**\n     * 坐标系反射变换\n     * @param dim 反射维度\n     * @return    返回坐标系对象\n     */\n    Coordinate.prototype.reflect = function (dim) {\n        if (dim === 'x') {\n            this.isReflectX = !this.isReflectX;\n        }\n        else {\n            this.isReflectY = !this.isReflectY;\n        }\n        return this;\n    };\n    /**\n     * 坐标系比例变换\n     * @param s1 x 方向缩放比例\n     * @param s2 y 方向缩放比例\n     * @return     返回坐标系对象\n     */\n    Coordinate.prototype.scale = function (s1, s2) {\n        var matrix = this.matrix;\n        var center = this.center;\n        ext.leftTranslate(matrix, matrix, [-center.x, -center.y]);\n        ext.leftScale(matrix, matrix, [s1, s2]);\n        ext.leftTranslate(matrix, matrix, [center.x, center.y]);\n        return this;\n    };\n    /**\n     * 坐标系平移变换\n     * @param x x 方向平移像素\n     * @param y y 方向平移像素\n     * @return    返回坐标系对象\n     */\n    Coordinate.prototype.translate = function (x, y) {\n        var matrix = this.matrix;\n        ext.leftTranslate(matrix, matrix, [x, y]);\n        return this;\n    };\n    /**\n     * 将坐标系 x y 两个轴进行转置\n     * @return 返回坐标系对象\n     */\n    Coordinate.prototype.transpose = function () {\n        this.isTransposed = !this.isTransposed;\n        return this;\n    };\n    Coordinate.prototype.getCenter = function () {\n        return this.center;\n    };\n    Coordinate.prototype.getWidth = function () {\n        return this.width;\n    };\n    Coordinate.prototype.getHeight = function () {\n        return this.height;\n    };\n    Coordinate.prototype.getRadius = function () {\n        return this.radius;\n    };\n    /**\n     * whether has reflect\n     * @param dim\n     */\n    Coordinate.prototype.isReflect = function (dim) {\n        return dim === 'x' ? this.isReflectX : this.isReflectY;\n    };\n    /**\n     * 重置 matrix\n     * @param matrix 如果传入，则使用，否则使用构造函数中传入的默认 matrix\n     */\n    Coordinate.prototype.resetMatrix = function (matrix) {\n        // 去除引用关系\n        this.matrix = matrix ? matrix : __spreadArray([], this.originalMatrix);\n    };\n    return Coordinate;\n}());\nexport default Coordinate;\n//# sourceMappingURL=base.js.map","import { __extends } from \"tslib\";\nimport Coordinate from './base';\n/**\n * 笛卡尔坐标系\n * https://www.zhihu.com/question/20665303\n */\nvar Cartesian = /** @class */ (function (_super) {\n    __extends(Cartesian, _super);\n    function Cartesian(cfg) {\n        var _this = _super.call(this, cfg) || this;\n        _this.isRect = true;\n        _this.type = 'cartesian';\n        _this.initial();\n        return _this;\n    }\n    Cartesian.prototype.initial = function () {\n        _super.prototype.initial.call(this);\n        var start = this.start;\n        var end = this.end;\n        this.x = {\n            start: start.x,\n            end: end.x,\n        };\n        this.y = {\n            start: start.y,\n            end: end.y,\n        };\n    };\n    Cartesian.prototype.convertPoint = function (point) {\n        var _a;\n        var x = point.x, y = point.y;\n        // 交换\n        if (this.isTransposed) {\n            _a = [y, x], x = _a[0], y = _a[1];\n        }\n        return {\n            x: this.convertDim(x, 'x'),\n            y: this.convertDim(y, 'y'),\n        };\n    };\n    Cartesian.prototype.invertPoint = function (point) {\n        var _a;\n        var x = this.invertDim(point.x, 'x');\n        var y = this.invertDim(point.y, 'y');\n        if (this.isTransposed) {\n            _a = [y, x], x = _a[0], y = _a[1];\n        }\n        return { x: x, y: y };\n    };\n    return Cartesian;\n}(Coordinate));\nexport default Cartesian;\n//# sourceMappingURL=cartesian.js.map","import { __extends } from \"tslib\";\nimport { ext, vec2 } from '@antv/matrix-util';\nimport { isNumberEqual } from '@antv/util';\nimport Coordinate from './base';\n/**\n * 螺旋坐标系\n */\nvar Helix = /** @class */ (function (_super) {\n    __extends(Helix, _super);\n    function Helix(cfg) {\n        var _this = _super.call(this, cfg) || this;\n        _this.isHelix = true;\n        _this.type = 'helix';\n        var _a = cfg.startAngle, startAngle = _a === void 0 ? 1.25 * Math.PI : _a, _b = cfg.endAngle, endAngle = _b === void 0 ? 7.25 * Math.PI : _b, _c = cfg.innerRadius, innerRadius = _c === void 0 ? 0 : _c, radius = cfg.radius;\n        _this.startAngle = startAngle;\n        _this.endAngle = endAngle;\n        _this.innerRadius = innerRadius;\n        _this.radius = radius;\n        _this.initial();\n        return _this;\n    }\n    Helix.prototype.initial = function () {\n        _super.prototype.initial.call(this);\n        var index = (this.endAngle - this.startAngle) / (2 * Math.PI) + 1; // 螺线圈数\n        var maxRadius = Math.min(this.width, this.height) / 2;\n        if (this.radius && this.radius >= 0 && this.radius <= 1) {\n            maxRadius = maxRadius * this.radius;\n        }\n        this.d = Math.floor((maxRadius * (1 - this.innerRadius)) / index);\n        this.a = this.d / (Math.PI * 2); // 螺线系数\n        this.x = {\n            start: this.startAngle,\n            end: this.endAngle,\n        };\n        this.y = {\n            start: this.innerRadius * maxRadius,\n            end: this.innerRadius * maxRadius + this.d * 0.99,\n        };\n    };\n    /**\n     * 将百分比数据变成屏幕坐标\n     * @param point 归一化的点坐标\n     * @return      返回对应的屏幕坐标\n     */\n    Helix.prototype.convertPoint = function (point) {\n        var _a;\n        var x = point.x, y = point.y;\n        if (this.isTransposed) {\n            _a = [y, x], x = _a[0], y = _a[1];\n        }\n        var thi = this.convertDim(x, 'x');\n        var r = this.a * thi;\n        var newY = this.convertDim(y, 'y');\n        return {\n            x: this.center.x + Math.cos(thi) * (r + newY),\n            y: this.center.y + Math.sin(thi) * (r + newY),\n        };\n    };\n    /**\n     * 将屏幕坐标点还原成百分比数据\n     * @param point 屏幕坐标\n     * @return      返回对应的归一化后的数据\n     */\n    Helix.prototype.invertPoint = function (point) {\n        var _a;\n        var d = this.d + this.y.start;\n        var v = vec2.subtract([0, 0], [point.x, point.y], [this.center.x, this.center.y]);\n        var thi = ext.angleTo(v, [1, 0], true);\n        var rMin = thi * this.a; // 坐标与原点的连线在第一圈上的交点，最小r值\n        if (vec2.length(v) < rMin) {\n            // 坐标与原点的连线不可能小于最小r值，但不排除因小数计算产生的略小于rMin的情况\n            rMin = vec2.length(v);\n        }\n        var index = Math.floor((vec2.length(v) - rMin) / d); // 当前点位于第index圈\n        thi = 2 * index * Math.PI + thi;\n        var r = this.a * thi;\n        var newY = vec2.length(v) - r;\n        newY = isNumberEqual(newY, 0) ? 0 : newY;\n        var x = this.invertDim(thi, 'x');\n        var y = this.invertDim(newY, 'y');\n        x = isNumberEqual(x, 0) ? 0 : x;\n        y = isNumberEqual(y, 0) ? 0 : y;\n        if (this.isTransposed) {\n            _a = [y, x], x = _a[0], y = _a[1];\n        }\n        return { x: x, y: y };\n    };\n    return Helix;\n}(Coordinate));\nexport default Helix;\n//# sourceMappingURL=helix.js.map","import { __extends } from \"tslib\";\nimport { ext, vec2, vec3 } from '@antv/matrix-util';\nimport { isNumberEqual } from '@antv/util';\nimport Coordinate from './base';\nvar Polar = /** @class */ (function (_super) {\n    __extends(Polar, _super);\n    function Polar(cfg) {\n        var _this = _super.call(this, cfg) || this;\n        _this.isPolar = true;\n        _this.type = 'polar';\n        var _a = cfg.startAngle, startAngle = _a === void 0 ? -Math.PI / 2 : _a, _b = cfg.endAngle, endAngle = _b === void 0 ? (Math.PI * 3) / 2 : _b, _c = cfg.innerRadius, innerRadius = _c === void 0 ? 0 : _c, radius = cfg.radius;\n        _this.startAngle = startAngle;\n        _this.endAngle = endAngle;\n        _this.innerRadius = innerRadius;\n        _this.radius = radius;\n        _this.initial();\n        return _this;\n    }\n    Polar.prototype.initial = function () {\n        _super.prototype.initial.call(this);\n        while (this.endAngle < this.startAngle) {\n            this.endAngle += Math.PI * 2;\n        }\n        var oneBox = this.getOneBox();\n        var oneWidth = oneBox.maxX - oneBox.minX;\n        var oneHeight = oneBox.maxY - oneBox.minY;\n        var left = Math.abs(oneBox.minX) / oneWidth;\n        var top = Math.abs(oneBox.minY) / oneHeight;\n        var maxRadius;\n        if (this.height / oneHeight > this.width / oneWidth) {\n            // width 为主\n            maxRadius = this.width / oneWidth;\n            this.circleCenter = {\n                x: this.center.x - (0.5 - left) * this.width,\n                y: this.center.y - (0.5 - top) * maxRadius * oneHeight,\n            };\n        }\n        else {\n            // height 为主\n            maxRadius = this.height / oneHeight;\n            this.circleCenter = {\n                x: this.center.x - (0.5 - left) * maxRadius * oneWidth,\n                y: this.center.y - (0.5 - top) * this.height,\n            };\n        }\n        this.polarRadius = this.radius;\n        if (!this.radius) {\n            this.polarRadius = maxRadius;\n        }\n        else if (this.radius > 0 && this.radius <= 1) {\n            this.polarRadius = maxRadius * this.radius;\n        }\n        else if (this.radius <= 0 || this.radius > maxRadius) {\n            this.polarRadius = maxRadius;\n        }\n        this.x = {\n            start: this.startAngle,\n            end: this.endAngle,\n        };\n        this.y = {\n            start: this.innerRadius * this.polarRadius,\n            end: this.polarRadius,\n        };\n    };\n    Polar.prototype.getRadius = function () {\n        return this.polarRadius;\n    };\n    Polar.prototype.convertPoint = function (point) {\n        var _a;\n        var center = this.getCenter();\n        var x = point.x, y = point.y;\n        if (this.isTransposed) {\n            _a = [y, x], x = _a[0], y = _a[1];\n        }\n        x = this.convertDim(x, 'x');\n        y = this.convertDim(y, 'y');\n        return {\n            x: center.x + Math.cos(x) * y,\n            y: center.y + Math.sin(x) * y,\n        };\n    };\n    Polar.prototype.invertPoint = function (point) {\n        var _a;\n        var center = this.getCenter();\n        var vPoint = [point.x - center.x, point.y - center.y];\n        var _b = this, startAngle = _b.startAngle, endAngle = _b.endAngle;\n        if (this.isReflect('x')) {\n            _a = [endAngle, startAngle], startAngle = _a[0], endAngle = _a[1];\n        }\n        var m = [1, 0, 0, 0, 1, 0, 0, 0, 1];\n        ext.leftRotate(m, m, startAngle);\n        var vStart3 = [1, 0, 0];\n        vec3.transformMat3(vStart3, vStart3, m);\n        var vStart2 = [vStart3[0], vStart3[1]];\n        var angle = ext.angleTo(vStart2, vPoint, endAngle < startAngle);\n        if (isNumberEqual(angle, Math.PI * 2)) {\n            angle = 0;\n        }\n        var radius = vec2.length(vPoint);\n        var xPercent = angle / (endAngle - startAngle);\n        xPercent = endAngle - startAngle > 0 ? xPercent : -xPercent;\n        var yPercent = this.invertDim(radius, 'y');\n        var rst = { x: 0, y: 0 };\n        rst.x = this.isTransposed ? yPercent : xPercent;\n        rst.y = this.isTransposed ? xPercent : yPercent;\n        return rst;\n    };\n    Polar.prototype.getCenter = function () {\n        return this.circleCenter;\n    };\n    Polar.prototype.getOneBox = function () {\n        var startAngle = this.startAngle;\n        var endAngle = this.endAngle;\n        if (Math.abs(endAngle - startAngle) >= Math.PI * 2) {\n            return {\n                minX: -1,\n                maxX: 1,\n                minY: -1,\n                maxY: 1,\n            };\n        }\n        var xs = [0, Math.cos(startAngle), Math.cos(endAngle)];\n        var ys = [0, Math.sin(startAngle), Math.sin(endAngle)];\n        for (var i = Math.min(startAngle, endAngle); i < Math.max(startAngle, endAngle); i += Math.PI / 18) {\n            xs.push(Math.cos(i));\n            ys.push(Math.sin(i));\n        }\n        return {\n            minX: Math.min.apply(Math, xs),\n            maxX: Math.max.apply(Math, xs),\n            minY: Math.min.apply(Math, ys),\n            maxY: Math.max.apply(Math, ys),\n        };\n    };\n    return Polar;\n}(Coordinate));\nexport default Polar;\n//# sourceMappingURL=polar.js.map","// 所有的 Coordinate map\nvar COORDINATE_MAP = {};\n/**\n * 通过类型获得 coordinate 类\n * @param type\n */\nexport var getCoordinate = function (type) {\n    return COORDINATE_MAP[type.toLowerCase()];\n};\n/**\n * 注册 coordinate 类\n * @param type\n * @param ctor\n */\nexport var registerCoordinate = function (type, ctor) {\n    // 存储到 map 中\n    COORDINATE_MAP[type.toLowerCase()] = ctor;\n};\nexport * from './interface';\n//# sourceMappingURL=factory.js.map","import Coordinate from './coord/base';\nimport Cartesian from './coord/cartesian';\nimport Helix from './coord/helix';\nimport Polar from './coord/polar';\nimport { getCoordinate, registerCoordinate } from './factory';\nregisterCoordinate('rect', Cartesian);\nregisterCoordinate('cartesian', Cartesian);\nregisterCoordinate('polar', Polar);\nregisterCoordinate('helix', Helix);\nexport { getCoordinate, registerCoordinate, Coordinate };\n//# sourceMappingURL=index.js.map","var methodCache = {};\n/**\n * 获取计算 ticks 的方法\n * @param key 键值\n * @returns 计算 ticks 的方法\n */\nexport function getTickMethod(key) {\n    return methodCache[key];\n}\n/**\n * 注册计算 ticks 的方法\n * @param key 键值\n * @param method 方法\n */\nexport function registerTickMethod(key, method) {\n    methodCache[key] = method;\n}\n//# sourceMappingURL=register.js.map","import { assign, isEmpty, isFunction, isNil, isNumber, isObject, isString, map } from '@antv/util';\nimport { getTickMethod } from './tick-method/register';\nvar Scale = /** @class */ (function () {\n    function Scale(cfg) {\n        /**\n         * 度量的类型\n         */\n        this.type = 'base';\n        /**\n         * 是否分类类型的度量\n         */\n        this.isCategory = false;\n        /**\n         * 是否线性度量，有linear, time 度量\n         */\n        this.isLinear = false;\n        /**\n         * 是否连续类型的度量，linear,time,log, pow, quantile, quantize 都支持\n         */\n        this.isContinuous = false;\n        /**\n         * 是否是常量的度量，传入和传出一致\n         */\n        this.isIdentity = false;\n        this.values = [];\n        this.range = [0, 1];\n        this.ticks = [];\n        this.__cfg__ = cfg;\n        this.initCfg();\n        this.init();\n    }\n    // 对于原始值的必要转换，如分类、时间字段需转换成数值，用transform/map命名可能更好\n    Scale.prototype.translate = function (v) {\n        return v;\n    };\n    /** 重新初始化 */\n    Scale.prototype.change = function (cfg) {\n        // 覆盖配置项，而不替代\n        assign(this.__cfg__, cfg);\n        this.init();\n    };\n    Scale.prototype.clone = function () {\n        return this.constructor(this.__cfg__);\n    };\n    /** 获取坐标轴需要的ticks */\n    Scale.prototype.getTicks = function () {\n        var _this = this;\n        return map(this.ticks, function (tick, idx) {\n            if (isObject(tick)) {\n                // 仅当符合Tick类型时才有意义\n                return tick;\n            }\n            return {\n                text: _this.getText(tick, idx),\n                tickValue: tick,\n                value: _this.scale(tick),\n            };\n        });\n    };\n    /** 获取Tick的格式化结果 */\n    Scale.prototype.getText = function (value, key) {\n        var formatter = this.formatter;\n        var res = formatter ? formatter(value, key) : value;\n        if (isNil(res) || !isFunction(res.toString)) {\n            return '';\n        }\n        return res.toString();\n    };\n    // 获取配置项中的值，当前 scale 上的值可能会被修改\n    Scale.prototype.getConfig = function (key) {\n        return this.__cfg__[key];\n    };\n    // scale初始化\n    Scale.prototype.init = function () {\n        assign(this, this.__cfg__);\n        this.setDomain();\n        if (isEmpty(this.getConfig('ticks'))) {\n            this.ticks = this.calculateTicks();\n        }\n    };\n    // 子类上覆盖某些属性，不能直接在类上声明，否则会被覆盖\n    Scale.prototype.initCfg = function () { };\n    Scale.prototype.setDomain = function () { };\n    Scale.prototype.calculateTicks = function () {\n        var tickMethod = this.tickMethod;\n        var ticks = [];\n        if (isString(tickMethod)) {\n            var method = getTickMethod(tickMethod);\n            if (!method) {\n                throw new Error('There is no method to to calculate ticks!');\n            }\n            ticks = method(this);\n        }\n        else if (isFunction(tickMethod)) {\n            ticks = tickMethod(this);\n        }\n        return ticks;\n    };\n    // range 的最小值\n    Scale.prototype.rangeMin = function () {\n        return this.range[0];\n    };\n    // range 的最大值\n    Scale.prototype.rangeMax = function () {\n        return this.range[1];\n    };\n    /** 定义域转 0~1 */\n    Scale.prototype.calcPercent = function (value, min, max) {\n        if (isNumber(value)) {\n            return (value - min) / (max - min);\n        }\n        return NaN;\n    };\n    /** 0~1转定义域 */\n    Scale.prototype.calcValue = function (percent, min, max) {\n        return min + percent * (max - min);\n    };\n    return Scale;\n}());\nexport default Scale;\n//# sourceMappingURL=base.js.map","import { __extends, __spreadArrays } from \"tslib\";\nimport { isNil, isNumber } from '@antv/util';\nimport Base from '../base';\n/**\n * 分类度量\n * @class\n */\nvar Category = /** @class */ (function (_super) {\n    __extends(Category, _super);\n    function Category() {\n        var _this = _super !== null && _super.apply(this, arguments) || this;\n        _this.type = 'cat';\n        _this.isCategory = true;\n        return _this;\n    }\n    Category.prototype.buildIndexMap = function () {\n        if (!this.translateIndexMap) {\n            this.translateIndexMap = new Map();\n            // 重新构建缓存\n            for (var i = 0; i < this.values.length; i++) {\n                this.translateIndexMap.set(this.values[i], i);\n            }\n        }\n    };\n    Category.prototype.translate = function (value) {\n        // 按需构建 map\n        this.buildIndexMap();\n        // 找得到\n        var idx = this.translateIndexMap.get(value);\n        if (idx === undefined) {\n            idx = isNumber(value) ? value : NaN;\n        }\n        return idx;\n    };\n    Category.prototype.scale = function (value) {\n        var order = this.translate(value);\n        // 分类数据允许 0.5 范围内调整\n        // if (order < this.min - 0.5 || order > this.max + 0.5) {\n        //   return NaN;\n        // }\n        var percent = this.calcPercent(order, this.min, this.max);\n        return this.calcValue(percent, this.rangeMin(), this.rangeMax());\n    };\n    Category.prototype.invert = function (scaledValue) {\n        var domainRange = this.max - this.min;\n        var percent = this.calcPercent(scaledValue, this.rangeMin(), this.rangeMax());\n        var idx = Math.round(domainRange * percent) + this.min;\n        if (idx < this.min || idx > this.max) {\n            return NaN;\n        }\n        return this.values[idx];\n    };\n    Category.prototype.getText = function (value) {\n        var args = [];\n        for (var _i = 1; _i < arguments.length; _i++) {\n            args[_i - 1] = arguments[_i];\n        }\n        var v = value;\n        // value为index\n        if (isNumber(value) && !this.values.includes(value)) {\n            v = this.values[v];\n        }\n        return _super.prototype.getText.apply(this, __spreadArrays([v], args));\n    };\n    // 复写属性\n    Category.prototype.initCfg = function () {\n        this.tickMethod = 'cat';\n    };\n    // 设置 min, max\n    Category.prototype.setDomain = function () {\n        // 用户有可能设置 min\n        if (isNil(this.getConfig('min'))) {\n            this.min = 0;\n        }\n        if (isNil(this.getConfig('max'))) {\n            var size = this.values.length;\n            this.max = size > 1 ? size - 1 : size;\n        }\n        // scale.init 的时候清除缓存\n        if (this.translateIndexMap) {\n            this.translateIndexMap = undefined;\n        }\n    };\n    return Category;\n}(Base));\nexport default Category;\n//# sourceMappingURL=base.js.map","import { isDate, isString, last } from '@antv/util';\nimport fecha from 'fecha';\nimport * as fecha1 from 'fecha';\nimport bisector from './bisector';\nvar FORMAT_METHOD = 'format';\nexport function timeFormat(time, mask) {\n    var method = fecha1[FORMAT_METHOD] || fecha[FORMAT_METHOD];\n    return method(time, mask);\n}\n/**\n * 转换成时间戳\n * @param value 时间值\n */\nexport function toTimeStamp(value) {\n    if (isString(value)) {\n        if (value.indexOf('T') > 0) {\n            value = new Date(value).getTime();\n        }\n        else {\n            // new Date('2010/01/10') 和 new Date('2010-01-10') 的差别在于:\n            // 如果仅有年月日时，前者是带有时区的: Fri Jan 10 2020 02:40:13 GMT+0800 (中国标准时间)\n            // 后者会格式化成 Sun Jan 10 2010 08:00:00 GMT+0800 (中国标准时间)\n            value = new Date(value.replace(/-/gi, '/')).getTime();\n        }\n    }\n    if (isDate(value)) {\n        value = value.getTime();\n    }\n    return value;\n}\nvar SECOND = 1000;\nvar MINUTE = 60 * SECOND;\nvar HOUR = 60 * MINUTE;\nvar DAY = 24 * HOUR;\nvar MONTH = DAY * 31;\nvar YEAR = DAY * 365;\nexport { SECOND, MINUTE, HOUR, DAY, MONTH, YEAR };\nvar intervals = [\n    ['HH:mm:ss', SECOND],\n    ['HH:mm:ss', SECOND * 10],\n    ['HH:mm:ss', SECOND * 30],\n    ['HH:mm', MINUTE],\n    ['HH:mm', MINUTE * 10],\n    ['HH:mm', MINUTE * 30],\n    ['HH', HOUR],\n    ['HH', HOUR * 6],\n    ['HH', HOUR * 12],\n    ['YYYY-MM-DD', DAY],\n    ['YYYY-MM-DD', DAY * 4],\n    ['YYYY-WW', DAY * 7],\n    ['YYYY-MM', MONTH],\n    ['YYYY-MM', MONTH * 4],\n    ['YYYY-MM', MONTH * 6],\n    ['YYYY', DAY * 380],\n];\nexport function getTickInterval(min, max, tickCount) {\n    var target = (max - min) / tickCount;\n    var idx = bisector(function (o) { return o[1]; })(intervals, target) - 1;\n    var interval = intervals[idx];\n    if (idx < 0) {\n        interval = intervals[0];\n    }\n    else if (idx >= intervals.length) {\n        interval = last(intervals);\n    }\n    return interval;\n}\n//# sourceMappingURL=time.js.map","import { isNil } from '@antv/util';\n/**\n * 二分右侧查找\n * https://github.com/d3/d3-array/blob/master/src/bisector.js\n */\nexport default function (getter) {\n    /**\n     * x: 目标值\n     * lo: 起始位置\n     * hi: 结束位置\n     */\n    return function (a, x, _lo, _hi) {\n        var lo = isNil(_lo) ? 0 : _lo;\n        var hi = isNil(_hi) ? a.length : _hi;\n        while (lo < hi) {\n            var mid = (lo + hi) >>> 1;\n            if (getter(a[mid]) > x) {\n                hi = mid;\n            }\n            else {\n                lo = mid + 1;\n            }\n        }\n        return lo;\n    };\n}\n//# sourceMappingURL=bisector.js.map","import { __extends } from \"tslib\";\nimport { each, isNumber } from '@antv/util';\nimport { timeFormat, toTimeStamp } from '../util/time';\nimport Category from './base';\n/**\n * 时间分类度量\n * @class\n */\nvar TimeCat = /** @class */ (function (_super) {\n    __extends(TimeCat, _super);\n    function TimeCat() {\n        var _this = _super !== null && _super.apply(this, arguments) || this;\n        _this.type = 'timeCat';\n        return _this;\n    }\n    /**\n     * @override\n     */\n    TimeCat.prototype.translate = function (value) {\n        value = toTimeStamp(value);\n        var index = this.values.indexOf(value);\n        if (index === -1) {\n            if (isNumber(value) && value < this.values.length) {\n                index = value;\n            }\n            else {\n                index = NaN;\n            }\n        }\n        return index;\n    };\n    /**\n     * 由于时间类型数据需要转换一下，所以复写 getText\n     * @override\n     */\n    TimeCat.prototype.getText = function (value, tickIndex) {\n        var index = this.translate(value);\n        if (index > -1) {\n            var result = this.values[index];\n            var formatter = this.formatter;\n            result = formatter ? formatter(result, tickIndex) : timeFormat(result, this.mask);\n            return result;\n        }\n        return value;\n    };\n    TimeCat.prototype.initCfg = function () {\n        this.tickMethod = 'time-cat';\n        this.mask = 'YYYY-MM-DD';\n        this.tickCount = 7; // 一般时间数据会显示 7， 14， 30 天的数字\n    };\n    TimeCat.prototype.setDomain = function () {\n        var values = this.values;\n        // 针对时间分类类型，会将时间统一转换为时间戳\n        each(values, function (v, i) {\n            values[i] = toTimeStamp(v);\n        });\n        values.sort(function (v1, v2) {\n            return v1 - v2;\n        });\n        _super.prototype.setDomain.call(this);\n    };\n    return TimeCat;\n}(Category));\nexport default TimeCat;\n//# sourceMappingURL=time.js.map","import { __extends } from \"tslib\";\nimport { filter, getRange, head, isNil, last } from '@antv/util';\nimport Base from '../base';\n/**\n * 连续度量的基类\n * @class\n */\nvar Continuous = /** @class */ (function (_super) {\n    __extends(Continuous, _super);\n    function Continuous() {\n        var _this = _super !== null && _super.apply(this, arguments) || this;\n        _this.isContinuous = true;\n        return _this;\n    }\n    Continuous.prototype.scale = function (value) {\n        if (isNil(value)) {\n            return NaN;\n        }\n        var rangeMin = this.rangeMin();\n        var rangeMax = this.rangeMax();\n        var max = this.max;\n        var min = this.min;\n        if (max === min) {\n            return rangeMin;\n        }\n        var percent = this.getScalePercent(value);\n        return rangeMin + percent * (rangeMax - rangeMin);\n    };\n    Continuous.prototype.init = function () {\n        _super.prototype.init.call(this);\n        // init 完成后保证 min, max 包含 ticks 的范围\n        var ticks = this.ticks;\n        var firstTick = head(ticks);\n        var lastTick = last(ticks);\n        if (firstTick < this.min) {\n            this.min = firstTick;\n        }\n        if (lastTick > this.max) {\n            this.max = lastTick;\n        }\n        // strict-limit 方式\n        if (!isNil(this.minLimit)) {\n            this.min = firstTick;\n        }\n        if (!isNil(this.maxLimit)) {\n            this.max = lastTick;\n        }\n    };\n    Continuous.prototype.setDomain = function () {\n        var _a = getRange(this.values), min = _a.min, max = _a.max;\n        if (isNil(this.min)) {\n            this.min = min;\n        }\n        if (isNil(this.max)) {\n            this.max = max;\n        }\n        if (this.min > this.max) {\n            this.min = min;\n            this.max = max;\n        }\n    };\n    Continuous.prototype.calculateTicks = function () {\n        var _this = this;\n        var ticks = _super.prototype.calculateTicks.call(this);\n        if (!this.nice) {\n            ticks = filter(ticks, function (tick) {\n                return tick >= _this.min && tick <= _this.max;\n            });\n        }\n        return ticks;\n    };\n    // 计算原始值值占的百分比\n    Continuous.prototype.getScalePercent = function (value) {\n        var max = this.max;\n        var min = this.min;\n        return (value - min) / (max - min);\n    };\n    Continuous.prototype.getInvertPercent = function (value) {\n        return (value - this.rangeMin()) / (this.rangeMax() - this.rangeMin());\n    };\n    return Continuous;\n}(Base));\nexport default Continuous;\n//# sourceMappingURL=base.js.map","import { __extends } from \"tslib\";\nimport Continuous from './base';\n/**\n * 线性度量\n * @class\n */\nvar Linear = /** @class */ (function (_super) {\n    __extends(Linear, _super);\n    function Linear() {\n        var _this = _super !== null && _super.apply(this, arguments) || this;\n        _this.type = 'linear';\n        _this.isLinear = true;\n        return _this;\n    }\n    Linear.prototype.invert = function (value) {\n        var percent = this.getInvertPercent(value);\n        return this.min + percent * (this.max - this.min);\n    };\n    Linear.prototype.initCfg = function () {\n        this.tickMethod = 'wilkinson-extended';\n        this.nice = false;\n    };\n    return Linear;\n}(Continuous));\nexport default Linear;\n//# sourceMappingURL=linear.js.map","import { each, isNil } from '@antv/util';\n// 求以a为次幂，结果为b的基数，如 x^^a = b;求x\n// 虽然数学上 b 不支持负数，但是这里需要支持 负数\nexport function calBase(a, b) {\n    var e = Math.E;\n    var value;\n    if (b >= 0) {\n        value = Math.pow(e, Math.log(b) / a); // 使用换底公式求底\n    }\n    else {\n        value = Math.pow(e, Math.log(-b) / a) * -1; // 使用换底公式求底\n    }\n    return value;\n}\nexport function log(a, b) {\n    if (a === 1) {\n        return 1;\n    }\n    return Math.log(b) / Math.log(a);\n}\nexport function getLogPositiveMin(values, base, max) {\n    if (isNil(max)) {\n        max = Math.max.apply(null, values);\n    }\n    var positiveMin = max;\n    each(values, function (value) {\n        if (value > 0 && value < positiveMin) {\n            positiveMin = value;\n        }\n    });\n    if (positiveMin === max) {\n        positiveMin = max / base;\n    }\n    if (positiveMin > 1) {\n        positiveMin = 1;\n    }\n    return positiveMin;\n}\nfunction digitLength(num) {\n    // Get digit length of e\n    var eSplit = num.toString().split(/[eE]/);\n    var len = (eSplit[0].split('.')[1] || '').length - +(eSplit[1] || 0);\n    return len > 0 ? len : 0;\n}\n/**\n * 高精度加法，解决 0.1 + 0.2 !== 0.3 的经典问题\n *\n * @param num1 加数\n * @param num2 被加数\n * @return {number} 返回值\n */\nexport function precisionAdd(num1, num2) {\n    var num1Digits = digitLength(num1);\n    var num2Digits = digitLength(num2);\n    var baseNum = Math.pow(10, Math.max(num1Digits, num2Digits));\n    return (num1 * baseNum + num2 * baseNum) / baseNum;\n}\n//# sourceMappingURL=math.js.map","import { __extends } from \"tslib\";\nimport { getLogPositiveMin, log } from '../util/math';\nimport Continuous from './base';\n/**\n * Log 度量，处理非均匀分布\n */\nvar Log = /** @class */ (function (_super) {\n    __extends(Log, _super);\n    function Log() {\n        var _this = _super !== null && _super.apply(this, arguments) || this;\n        _this.type = 'log';\n        return _this;\n    }\n    /**\n     * @override\n     */\n    Log.prototype.invert = function (value) {\n        var base = this.base;\n        var max = log(base, this.max);\n        var rangeMin = this.rangeMin();\n        var range = this.rangeMax() - rangeMin;\n        var min;\n        var positiveMin = this.positiveMin;\n        if (positiveMin) {\n            if (value === 0) {\n                return 0;\n            }\n            min = log(base, positiveMin / base);\n            var appendPercent = (1 / (max - min)) * range; // 0 到 positiveMin的占比\n            if (value < appendPercent) {\n                // 落到 0 - positiveMin 之间\n                return (value / appendPercent) * positiveMin;\n            }\n        }\n        else {\n            min = log(base, this.min);\n        }\n        var percent = (value - rangeMin) / range;\n        var tmp = percent * (max - min) + min;\n        return Math.pow(base, tmp);\n    };\n    Log.prototype.initCfg = function () {\n        this.tickMethod = 'log';\n        this.base = 10;\n        this.tickCount = 6;\n        this.nice = true;\n    };\n    // 设置\n    Log.prototype.setDomain = function () {\n        _super.prototype.setDomain.call(this);\n        var min = this.min;\n        if (min < 0) {\n            throw new Error('When you use log scale, the minimum value must be greater than zero!');\n        }\n        if (min === 0) {\n            this.positiveMin = getLogPositiveMin(this.values, this.base, this.max);\n        }\n    };\n    // 根据当前值获取占比\n    Log.prototype.getScalePercent = function (value) {\n        var max = this.max;\n        var min = this.min;\n        if (max === min) {\n            return 0;\n        }\n        // 如果值小于等于0，则按照0处理\n        if (value <= 0) {\n            return 0;\n        }\n        var base = this.base;\n        var positiveMin = this.positiveMin;\n        // 如果min == 0, 则根据比0大的最小值，计算比例关系。这个最小值作为坐标轴上的第二个tick，第一个是0但是不显示\n        if (positiveMin) {\n            min = (positiveMin * 1) / base;\n        }\n        var percent;\n        // 如果数值小于次小值，那么就计算 value / 次小值 占整体的比例\n        if (value < positiveMin) {\n            percent = value / positiveMin / (log(base, max) - log(base, min));\n        }\n        else {\n            percent = (log(base, value) - log(base, min)) / (log(base, max) - log(base, min));\n        }\n        return percent;\n    };\n    return Log;\n}(Continuous));\nexport default Log;\n//# sourceMappingURL=log.js.map","import { __extends } from \"tslib\";\nimport { calBase } from '../util/math';\nimport Continuous from './base';\n/**\n * Pow 度量，处理非均匀分布\n */\nvar Pow = /** @class */ (function (_super) {\n    __extends(Pow, _super);\n    function Pow() {\n        var _this = _super !== null && _super.apply(this, arguments) || this;\n        _this.type = 'pow';\n        return _this;\n    }\n    /**\n     * @override\n     */\n    Pow.prototype.invert = function (value) {\n        var percent = this.getInvertPercent(value);\n        var exponent = this.exponent;\n        var max = calBase(exponent, this.max);\n        var min = calBase(exponent, this.min);\n        var tmp = percent * (max - min) + min;\n        var factor = tmp >= 0 ? 1 : -1;\n        return Math.pow(tmp, exponent) * factor;\n    };\n    Pow.prototype.initCfg = function () {\n        this.tickMethod = 'pow';\n        this.exponent = 2;\n        this.tickCount = 5;\n        this.nice = true;\n    };\n    // 获取度量计算时，value占的定义域百分比\n    Pow.prototype.getScalePercent = function (value) {\n        var max = this.max;\n        var min = this.min;\n        if (max === min) {\n            return 0;\n        }\n        var exponent = this.exponent;\n        var percent = (calBase(exponent, value) - calBase(exponent, min)) / (calBase(exponent, max) - calBase(exponent, min));\n        return percent;\n    };\n    return Pow;\n}(Continuous));\nexport default Pow;\n//# sourceMappingURL=pow.js.map","import { __extends } from \"tslib\";\nimport { each, isDate, isNil, isNumber, isString } from '@antv/util';\nimport { timeFormat, toTimeStamp } from '../util/time';\nimport Linear from './linear';\n/**\n * 时间度量\n * @class\n */\nvar Time = /** @class */ (function (_super) {\n    __extends(Time, _super);\n    function Time() {\n        var _this = _super !== null && _super.apply(this, arguments) || this;\n        _this.type = 'time';\n        return _this;\n    }\n    /**\n     * @override\n     */\n    Time.prototype.getText = function (value, index) {\n        var numberValue = this.translate(value);\n        var formatter = this.formatter;\n        return formatter ? formatter(numberValue, index) : timeFormat(numberValue, this.mask);\n    };\n    /**\n     * @override\n     */\n    Time.prototype.scale = function (value) {\n        var v = value;\n        if (isString(v) || isDate(v)) {\n            v = this.translate(v);\n        }\n        return _super.prototype.scale.call(this, v);\n    };\n    /**\n     * 将时间转换成数字\n     * @override\n     */\n    Time.prototype.translate = function (v) {\n        return toTimeStamp(v);\n    };\n    Time.prototype.initCfg = function () {\n        this.tickMethod = 'time-pretty';\n        this.mask = 'YYYY-MM-DD';\n        this.tickCount = 7;\n        this.nice = false;\n    };\n    Time.prototype.setDomain = function () {\n        var values = this.values;\n        // 是否设置了 min, max，而不是直接取 this.min, this.max\n        var minConfig = this.getConfig('min');\n        var maxConfig = this.getConfig('max');\n        // 如果设置了 min,max 则转换成时间戳\n        if (!isNil(minConfig) || !isNumber(minConfig)) {\n            this.min = this.translate(this.min);\n        }\n        if (!isNil(maxConfig) || !isNumber(maxConfig)) {\n            this.max = this.translate(this.max);\n        }\n        // 没有设置 min, max 时\n        if (values && values.length) {\n            // 重新计算最大最小值\n            var timeStamps_1 = [];\n            var min_1 = Infinity; // 最小值\n            var secondMin_1 = min_1; // 次小值\n            var max_1 = 0;\n            // 使用一个循环，计算min,max,secondMin\n            each(values, function (v) {\n                var timeStamp = toTimeStamp(v);\n                if (isNaN(timeStamp)) {\n                    throw new TypeError(\"Invalid Time: \" + v + \" in time scale!\");\n                }\n                if (min_1 > timeStamp) {\n                    secondMin_1 = min_1;\n                    min_1 = timeStamp;\n                }\n                else if (secondMin_1 > timeStamp) {\n                    secondMin_1 = timeStamp;\n                }\n                if (max_1 < timeStamp) {\n                    max_1 = timeStamp;\n                }\n                timeStamps_1.push(timeStamp);\n            });\n            // 存在多个值时，设置最小间距\n            if (values.length > 1) {\n                this.minTickInterval = secondMin_1 - min_1;\n            }\n            if (isNil(minConfig)) {\n                this.min = min_1;\n            }\n            if (isNil(maxConfig)) {\n                this.max = max_1;\n            }\n        }\n    };\n    return Time;\n}(Linear));\nexport default Time;\n//# sourceMappingURL=time.js.map","import { __extends } from \"tslib\";\nimport { each, head, last } from '@antv/util';\nimport Continuous from './base';\n/**\n * 分段度量\n */\nvar Quantize = /** @class */ (function (_super) {\n    __extends(Quantize, _super);\n    function Quantize() {\n        var _this = _super !== null && _super.apply(this, arguments) || this;\n        _this.type = 'quantize';\n        return _this;\n    }\n    Quantize.prototype.invert = function (value) {\n        var ticks = this.ticks;\n        var length = ticks.length;\n        var percent = this.getInvertPercent(value);\n        var minIndex = Math.floor(percent * (length - 1));\n        // 最后一个\n        if (minIndex >= length - 1) {\n            return last(ticks);\n        }\n        // 超出左边界， 则取第一个\n        if (minIndex < 0) {\n            return head(ticks);\n        }\n        var minTick = ticks[minIndex];\n        var nextTick = ticks[minIndex + 1];\n        // 比当前值小的 tick 在度量上的占比\n        var minIndexPercent = minIndex / (length - 1);\n        var maxIndexPercent = (minIndex + 1) / (length - 1);\n        return minTick + (percent - minIndexPercent) / (maxIndexPercent - minIndexPercent) * (nextTick - minTick);\n    };\n    Quantize.prototype.initCfg = function () {\n        this.tickMethod = 'r-pretty';\n        this.tickCount = 5;\n        this.nice = true;\n    };\n    Quantize.prototype.calculateTicks = function () {\n        var ticks = _super.prototype.calculateTicks.call(this);\n        if (!this.nice) { // 如果 nice = false ,补充 min, max\n            if (last(ticks) !== this.max) {\n                ticks.push(this.max);\n            }\n            if (head(ticks) !== this.min) {\n                ticks.unshift(this.min);\n            }\n        }\n        return ticks;\n    };\n    // 计算当前值在刻度中的占比\n    Quantize.prototype.getScalePercent = function (value) {\n        var ticks = this.ticks;\n        // 超出左边界\n        if (value < head(ticks)) {\n            return 0;\n        }\n        // 超出右边界\n        if (value > last(ticks)) {\n            return 1;\n        }\n        var minIndex = 0;\n        each(ticks, function (tick, index) {\n            if (value >= tick) {\n                minIndex = index;\n            }\n            else {\n                return false;\n            }\n        });\n        return minIndex / (ticks.length - 1);\n    };\n    return Quantize;\n}(Continuous));\nexport default Quantize;\n//# sourceMappingURL=quantize.js.map","import { __extends } from \"tslib\";\nimport Quantize from './quantize';\nvar Quantile = /** @class */ (function (_super) {\n    __extends(Quantile, _super);\n    function Quantile() {\n        var _this = _super !== null && _super.apply(this, arguments) || this;\n        _this.type = 'quantile';\n        return _this;\n    }\n    Quantile.prototype.initCfg = function () {\n        this.tickMethod = 'quantile';\n        this.tickCount = 5;\n        this.nice = true;\n    };\n    return Quantile;\n}(Quantize));\nexport default Quantile;\n//# sourceMappingURL=quantile.js.map","import Scale from './base';\nvar map = {};\nfunction getClass(key) {\n    return map[key];\n}\nfunction registerClass(key, cls) {\n    if (getClass(key)) {\n        throw new Error(\"type '\" + key + \"' existed.\");\n    }\n    map[key] = cls;\n}\nexport { Scale, getClass as getScale, registerClass as registerScale };\n//# sourceMappingURL=factory.js.map","import { __extends } from \"tslib\";\nimport { isNumber } from '@antv/util';\nimport Base from '../base';\n/**\n * identity scale原则上是定义域和值域一致，scale/invert方法也是一致的\n * 参考R的实现：https://github.com/r-lib/scales/blob/master/R/pal-identity.r\n * 参考d3的实现（做了下转型）：https://github.com/d3/d3-scale/blob/master/src/identity.js\n */\nvar Identity = /** @class */ (function (_super) {\n    __extends(Identity, _super);\n    function Identity() {\n        var _this = _super !== null && _super.apply(this, arguments) || this;\n        _this.type = 'identity';\n        _this.isIdentity = true;\n        return _this;\n    }\n    Identity.prototype.calculateTicks = function () {\n        return this.values;\n    };\n    Identity.prototype.scale = function (value) {\n        // 如果传入的值不等于 identity 的值，则直接返回，用于一维图时的 dodge\n        if (this.values[0] !== value && isNumber(value)) {\n            return value;\n        }\n        return this.range[0];\n    };\n    Identity.prototype.invert = function (value) {\n        var range = this.range;\n        if (value < range[0] || value > range[1]) {\n            return NaN;\n        }\n        return this.values[0];\n    };\n    return Identity;\n}(Base));\nexport default Identity;\n//# sourceMappingURL=index.js.map","import { filter, isNil, isNumber, last } from '@antv/util';\n/**\n * 计算分类 ticks\n * @param cfg 度量的配置项\n * @returns 计算后的 ticks\n */\nexport default function calculateCatTicks(cfg) {\n    var values = cfg.values, tickInterval = cfg.tickInterval, tickCount = cfg.tickCount, showLast = cfg.showLast;\n    if (isNumber(tickInterval)) {\n        var ticks_1 = filter(values, function (__, i) { return i % tickInterval === 0; });\n        var lastValue = last(values);\n        if (showLast && last(ticks_1) !== lastValue) {\n            ticks_1.push(lastValue);\n        }\n        return ticks_1;\n    }\n    var len = values.length;\n    var min = cfg.min, max = cfg.max;\n    if (isNil(min)) {\n        min = 0;\n    }\n    if (isNil(max)) {\n        max = values.length - 1;\n    }\n    if (!isNumber(tickCount) || tickCount >= len)\n        return values.slice(min, max + 1);\n    if (tickCount <= 0 || max <= 0)\n        return [];\n    var interval = tickCount === 1 ? len : Math.floor(len / (tickCount - 1));\n    var ticks = [];\n    var idx = min;\n    for (var i = 0; i < tickCount; i++) {\n        if (idx >= max)\n            break;\n        idx = Math.min(min + i * interval, max);\n        if (i === tickCount - 1 && showLast)\n            ticks.push(values[max]);\n        else\n            ticks.push(values[idx]);\n    }\n    return ticks;\n}\n//# sourceMappingURL=cat.js.map","export default function d3Linear(cfg) {\n    var min = cfg.min, max = cfg.max, nice = cfg.nice, tickCount = cfg.tickCount;\n    var linear = new D3Linear();\n    linear.domain([min, max]);\n    if (nice) {\n        linear.nice(tickCount);\n    }\n    return linear.ticks(tickCount);\n}\nvar DEFAULT_COUNT = 5;\nvar e10 = Math.sqrt(50);\nvar e5 = Math.sqrt(10);\nvar e2 = Math.sqrt(2);\n// https://github.com/d3/d3-scale\nvar D3Linear = /** @class */ (function () {\n    function D3Linear() {\n        this._domain = [0, 1];\n    }\n    D3Linear.prototype.domain = function (domain) {\n        if (domain) {\n            this._domain = Array.from(domain, Number);\n            return this;\n        }\n        return this._domain.slice();\n    };\n    D3Linear.prototype.nice = function (count) {\n        var _a, _b;\n        if (count === void 0) { count = DEFAULT_COUNT; }\n        var d = this._domain.slice();\n        var i0 = 0;\n        var i1 = this._domain.length - 1;\n        var start = this._domain[i0];\n        var stop = this._domain[i1];\n        var step;\n        if (stop < start) {\n            _a = [stop, start], start = _a[0], stop = _a[1];\n            _b = [i1, i0], i0 = _b[0], i1 = _b[1];\n        }\n        step = tickIncrement(start, stop, count);\n        if (step > 0) {\n            start = Math.floor(start / step) * step;\n            stop = Math.ceil(stop / step) * step;\n            step = tickIncrement(start, stop, count);\n        }\n        else if (step < 0) {\n            start = Math.ceil(start * step) / step;\n            stop = Math.floor(stop * step) / step;\n            step = tickIncrement(start, stop, count);\n        }\n        if (step > 0) {\n            d[i0] = Math.floor(start / step) * step;\n            d[i1] = Math.ceil(stop / step) * step;\n            this.domain(d);\n        }\n        else if (step < 0) {\n            d[i0] = Math.ceil(start * step) / step;\n            d[i1] = Math.floor(stop * step) / step;\n            this.domain(d);\n        }\n        return this;\n    };\n    D3Linear.prototype.ticks = function (count) {\n        if (count === void 0) { count = DEFAULT_COUNT; }\n        return d3ArrayTicks(this._domain[0], this._domain[this._domain.length - 1], count || DEFAULT_COUNT);\n    };\n    return D3Linear;\n}());\nexport { D3Linear };\nfunction d3ArrayTicks(start, stop, count) {\n    var reverse;\n    var i = -1;\n    var n;\n    var ticks;\n    var step;\n    (stop = +stop), (start = +start), (count = +count);\n    if (start === stop && count > 0) {\n        return [start];\n    }\n    // tslint:disable-next-line\n    if ((reverse = stop < start)) {\n        (n = start), (start = stop), (stop = n);\n    }\n    // tslint:disable-next-line\n    if ((step = tickIncrement(start, stop, count)) === 0 || !isFinite(step)) {\n        return [];\n    }\n    if (step > 0) {\n        start = Math.ceil(start / step);\n        stop = Math.floor(stop / step);\n        ticks = new Array((n = Math.ceil(stop - start + 1)));\n        while (++i < n) {\n            ticks[i] = (start + i) * step;\n        }\n    }\n    else {\n        start = Math.floor(start * step);\n        stop = Math.ceil(stop * step);\n        ticks = new Array((n = Math.ceil(start - stop + 1)));\n        while (++i < n) {\n            ticks[i] = (start - i) / step;\n        }\n    }\n    if (reverse) {\n        ticks.reverse();\n    }\n    return ticks;\n}\nfunction tickIncrement(start, stop, count) {\n    var step = (stop - start) / Math.max(0, count);\n    var power = Math.floor(Math.log(step) / Math.LN10);\n    var error = step / Math.pow(10, power);\n    return power >= 0\n        ? (error >= e10 ? 10 : error >= e5 ? 5 : error >= e2 ? 2 : 1) * Math.pow(10, power)\n        : -Math.pow(10, -power) / (error >= e10 ? 10 : error >= e5 ? 5 : error >= e2 ? 2 : 1);\n}\n//# sourceMappingURL=d3-linear.js.map","import { fixedBase } from '@antv/util';\nfunction snapMultiple(v, base, snapType) {\n    var div;\n    if (snapType === 'ceil') {\n        div = Math.ceil(v / base);\n    }\n    else if (snapType === 'floor') {\n        div = Math.floor(v / base);\n    }\n    else {\n        div = Math.round(v / base);\n    }\n    return div * base;\n}\nexport default function intervalTicks(min, max, interval) {\n    // 变成 interval 的倍数\n    var minTick = snapMultiple(min, interval, 'floor');\n    var maxTick = snapMultiple(max, interval, 'ceil');\n    // 统一小数位数\n    minTick = fixedBase(minTick, interval);\n    maxTick = fixedBase(maxTick, interval);\n    var ticks = [];\n    // https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Errors/Invalid_array_length\n    var availableInterval = Math.max((maxTick - minTick) / (Math.pow(2, 12) - 1), interval);\n    for (var i = minTick; i <= maxTick; i = i + availableInterval) {\n        var tickValue = fixedBase(i, availableInterval); // 防止浮点数加法出现问题\n        ticks.push(tickValue);\n    }\n    return {\n        min: minTick,\n        max: maxTick,\n        ticks: ticks\n    };\n}\n//# sourceMappingURL=interval.js.map","import { isNil } from '@antv/util';\n/**\n * 按照给定的 minLimit/maxLimit/tickCount 均匀计算出刻度 ticks\n *\n * @param cfg Scale 配置项\n * @return ticks\n */\nexport default function strictLimit(cfg, defaultMin, defaultMax) {\n    var _a;\n    var minLimit = cfg.minLimit, maxLimit = cfg.maxLimit, min = cfg.min, max = cfg.max, _b = cfg.tickCount, tickCount = _b === void 0 ? 5 : _b;\n    var tickMin = isNil(minLimit) ? (isNil(defaultMin) ? min : defaultMin) : minLimit;\n    var tickMax = isNil(maxLimit) ? (isNil(defaultMax) ? max : defaultMax) : maxLimit;\n    if (tickMin > tickMax) {\n        _a = [tickMin, tickMax], tickMax = _a[0], tickMin = _a[1];\n    }\n    if (tickCount <= 2) {\n        return [tickMin, tickMax];\n    }\n    var step = (tickMax - tickMin) / (tickCount - 1);\n    var ticks = [];\n    for (var i = 0; i < tickCount; i++) {\n        ticks.push(tickMin + step * i);\n    }\n    return ticks;\n}\n//# sourceMappingURL=strict-limit.js.map","// 为了解决 js 运算的精度问题\nexport function prettyNumber(n) {\n    return Math.abs(n) < 1e-15 ? n : parseFloat(n.toFixed(15));\n}\n//# sourceMappingURL=pretty-number.js.map","import { head, indexOf, size, last } from '@antv/util';\nimport { prettyNumber } from './pretty-number';\nexport var DEFAULT_Q = [1, 5, 2, 2.5, 4, 3];\nexport var ALL_Q = [1, 5, 2, 2.5, 4, 3, 1.5, 7, 6, 8, 9];\nvar eps = Number.EPSILON * 100;\nfunction mod(n, m) {\n    return ((n % m) + m) % m;\n}\nfunction round(n) {\n    return Math.round(n * 1e12) / 1e12;\n}\nfunction simplicity(q, Q, j, lmin, lmax, lstep) {\n    var n = size(Q);\n    var i = indexOf(Q, q);\n    var v = 0;\n    var m = mod(lmin, lstep);\n    if ((m < eps || lstep - m < eps) && lmin <= 0 && lmax >= 0) {\n        v = 1;\n    }\n    return 1 - i / (n - 1) - j + v;\n}\nfunction simplicityMax(q, Q, j) {\n    var n = size(Q);\n    var i = indexOf(Q, q);\n    var v = 1;\n    return 1 - i / (n - 1) - j + v;\n}\nfunction density(k, m, dMin, dMax, lMin, lMax) {\n    var r = (k - 1) / (lMax - lMin);\n    var rt = (m - 1) / (Math.max(lMax, dMax) - Math.min(dMin, lMin));\n    return 2 - Math.max(r / rt, rt / r);\n}\nfunction densityMax(k, m) {\n    if (k >= m) {\n        return 2 - (k - 1) / (m - 1);\n    }\n    return 1;\n}\nfunction coverage(dMin, dMax, lMin, lMax) {\n    var range = dMax - dMin;\n    return 1 - (0.5 * (Math.pow((dMax - lMax), 2) + Math.pow((dMin - lMin), 2))) / Math.pow((0.1 * range), 2);\n}\nfunction coverageMax(dMin, dMax, span) {\n    var range = dMax - dMin;\n    if (span > range) {\n        var half = (span - range) / 2;\n        return 1 - Math.pow(half, 2) / Math.pow((0.1 * range), 2);\n    }\n    return 1;\n}\nfunction legibility() {\n    return 1;\n}\n/**\n * An Extension of Wilkinson's Algorithm for Position Tick Labels on Axes\n * https://www.yuque.com/preview/yuque/0/2019/pdf/185317/1546999150858-45c3b9c2-4e86-4223-bf1a-8a732e8195ed.pdf\n * @param dMin 最小值\n * @param dMax 最大值\n * @param m tick个数\n * @param onlyLoose 是否允许扩展min、max，不绝对强制，例如[3, 97]\n * @param Q nice numbers集合\n * @param w 四个优化组件的权重\n */\nexport default function extended(dMin, dMax, n, onlyLoose, Q, w) {\n    if (n === void 0) { n = 5; }\n    if (onlyLoose === void 0) { onlyLoose = true; }\n    if (Q === void 0) { Q = DEFAULT_Q; }\n    if (w === void 0) { w = [0.25, 0.2, 0.5, 0.05]; }\n    // 处理小于 0 和小数的 tickCount\n    var m = n < 0 ? 0 : Math.round(n);\n    // nan 也会导致异常\n    if (Number.isNaN(dMin) || Number.isNaN(dMax) || typeof dMin !== 'number' || typeof dMax !== 'number' || !m) {\n        return {\n            min: 0,\n            max: 0,\n            ticks: [],\n        };\n    }\n    // js 极大值极小值问题，差值小于 1e-15 会导致计算出错\n    if (dMax - dMin < 1e-15 || m === 1) {\n        return {\n            min: dMin,\n            max: dMax,\n            ticks: [dMin],\n        };\n    }\n    // js 超大值问题\n    if (dMax - dMin > 1e148) {\n        var count = n || 5;\n        var step_1 = (dMax - dMin) / count;\n        return {\n            min: dMin,\n            max: dMax,\n            ticks: Array(count).fill(null).map(function (_, idx) {\n                return prettyNumber(dMin + step_1 * idx);\n            }),\n        };\n    }\n    var best = {\n        score: -2,\n        lmin: 0,\n        lmax: 0,\n        lstep: 0,\n    };\n    var j = 1;\n    while (j < Infinity) {\n        for (var i = 0; i < Q.length; i += 1) {\n            var q = Q[i];\n            var sm = simplicityMax(q, Q, j);\n            if (w[0] * sm + w[1] + w[2] + w[3] < best.score) {\n                j = Infinity;\n                break;\n            }\n            var k = 2;\n            while (k < Infinity) {\n                var dm = densityMax(k, m);\n                if (w[0] * sm + w[1] + w[2] * dm + w[3] < best.score) {\n                    break;\n                }\n                var delta = (dMax - dMin) / (k + 1) / j / q;\n                var z = Math.ceil(Math.log10(delta));\n                while (z < Infinity) {\n                    var step = j * q * Math.pow(10, z);\n                    var cm = coverageMax(dMin, dMax, step * (k - 1));\n                    if (w[0] * sm + w[1] * cm + w[2] * dm + w[3] < best.score) {\n                        break;\n                    }\n                    var minStart = Math.floor(dMax / step) * j - (k - 1) * j;\n                    var maxStart = Math.ceil(dMin / step) * j;\n                    if (minStart <= maxStart) {\n                        var count = maxStart - minStart;\n                        for (var i_1 = 0; i_1 <= count; i_1 += 1) {\n                            var start = minStart + i_1;\n                            var lMin = start * (step / j);\n                            var lMax = lMin + step * (k - 1);\n                            var lStep = step;\n                            var s = simplicity(q, Q, j, lMin, lMax, lStep);\n                            var c = coverage(dMin, dMax, lMin, lMax);\n                            var g = density(k, m, dMin, dMax, lMin, lMax);\n                            var l = legibility();\n                            var score = w[0] * s + w[1] * c + w[2] * g + w[3] * l;\n                            if (score > best.score && (!onlyLoose || (lMin <= dMin && lMax >= dMax))) {\n                                best.lmin = lMin;\n                                best.lmax = lMax;\n                                best.lstep = lStep;\n                                best.score = score;\n                            }\n                        }\n                    }\n                    z += 1;\n                }\n                k += 1;\n            }\n        }\n        j += 1;\n    }\n    // 处理精度问题，保证这三个数没有精度问题\n    var lmax = prettyNumber(best.lmax);\n    var lmin = prettyNumber(best.lmin);\n    var lstep = prettyNumber(best.lstep);\n    // 加 round 是为处理 extended(0.94, 1, 5)\n    // 保证生成的 tickCount 没有精度问题\n    var tickCount = Math.floor(round((lmax - lmin) / lstep)) + 1;\n    var ticks = new Array(tickCount);\n    // 少用乘法：防止出现 -1.2 + 1.2 * 3 = 2.3999999999999995 的情况\n    ticks[0] = prettyNumber(lmin);\n    for (var i = 1; i < tickCount; i++) {\n        ticks[i] = prettyNumber(ticks[i - 1] + lstep);\n    }\n    return {\n        min: Math.min(dMin, head(ticks)),\n        max: Math.max(dMax, last(ticks)),\n        ticks: ticks,\n    };\n}\n//# sourceMappingURL=extended.js.map","import { prettyNumber } from './pretty-number';\nexport default function pretty(min, max, m) {\n    if (m === void 0) { m = 5; }\n    if (min === max) {\n        return {\n            max: max,\n            min: min,\n            ticks: [min],\n        };\n    }\n    var n = m < 0 ? 0 : Math.round(m);\n    if (n === 0)\n        return { max: max, min: min, ticks: [] };\n    /*\n      R pretty:\n      https://svn.r-project.org/R/trunk/src/appl/pretty.c\n      https://www.rdocumentation.org/packages/base/versions/3.5.2/topics/pretty\n      */\n    var h = 1.5; // high.u.bias\n    var h5 = 0.5 + 1.5 * h; // u5.bias\n    // 反正我也不会调参，跳过所有判断步骤\n    var d = max - min;\n    var c = d / n;\n    // 当d非常小的时候触发，但似乎没什么用\n    // const min_n = Math.floor(n / 3);\n    // const shrink_sml = Math.pow(2, 5);\n    // if (Math.log10(d) < -2) {\n    //   c = (_.max([ Math.abs(max), Math.abs(min) ]) * shrink_sml) / min_n;\n    // }\n    var base = Math.pow(10, Math.floor(Math.log10(c)));\n    var unit = base;\n    if (2 * base - c < h * (c - unit)) {\n        unit = 2 * base;\n        if (5 * base - c < h5 * (c - unit)) {\n            unit = 5 * base;\n            if (10 * base - c < h * (c - unit)) {\n                unit = 10 * base;\n            }\n        }\n    }\n    var nu = Math.ceil(max / unit);\n    var ns = Math.floor(min / unit);\n    var hi = Math.max(nu * unit, max);\n    var lo = Math.min(ns * unit, min);\n    var size = Math.floor((hi - lo) / unit) + 1;\n    var ticks = new Array(size);\n    for (var i = 0; i < size; i++) {\n        ticks[i] = prettyNumber(lo + i * unit);\n    }\n    return {\n        min: lo,\n        max: hi,\n        ticks: ticks,\n    };\n}\n//# sourceMappingURL=pretty.js.map","/**\n * 计算几分位 https://github.com/simple-statistics/simple-statistics/blob/master/src/quantile_sorted.js\n * @param x  数组\n * @param p  百分比\n */\nfunction quantileSorted(x, p) {\n    var idx = x.length * p;\n    /*if (x.length === 0) { // 当前场景这些条件不可能命中\n      throw new Error('quantile requires at least one value.');\n    } else if (p < 0 || p > 1) {\n      throw new Error('quantiles must be between 0 and 1');\n    } else */\n    if (p === 1) {\n        // If p is 1, directly return the last element\n        return x[x.length - 1];\n    }\n    else if (p === 0) {\n        // If p is 0, directly return the first element\n        return x[0];\n    }\n    else if (idx % 1 !== 0) {\n        // If p is not integer, return the next element in array\n        return x[Math.ceil(idx) - 1];\n    }\n    else if (x.length % 2 === 0) {\n        // If the list has even-length, we'll take the average of this number\n        // and the next value, if there is one\n        return (x[idx - 1] + x[idx]) / 2;\n    }\n    else {\n        // Finally, in the simple case of an integer value\n        // with an odd-length list, return the x value at the index.\n        return x[idx];\n    }\n}\nexport default function calculateTicks(cfg) {\n    var tickCount = cfg.tickCount, values = cfg.values;\n    if (!values || !values.length) {\n        return [];\n    }\n    var sorted = values.slice().sort(function (a, b) {\n        return a - b;\n    });\n    var ticks = [];\n    for (var i = 0; i < tickCount; i++) {\n        var p = i / (tickCount - 1);\n        ticks.push(quantileSorted(sorted, p));\n    }\n    return ticks;\n}\n//# sourceMappingURL=quantile.js.map","import { DAY, HOUR, MINUTE, MONTH, SECOND, YEAR } from '../util/time';\nfunction getYear(date) {\n    return new Date(date).getFullYear();\n}\nfunction createYear(year) {\n    return new Date(year, 0, 1).getTime();\n}\nfunction getMonth(date) {\n    return new Date(date).getMonth();\n}\nfunction diffMonth(min, max) {\n    var minYear = getYear(min);\n    var maxYear = getYear(max);\n    var minMonth = getMonth(min);\n    var maxMonth = getMonth(max);\n    return (maxYear - minYear) * 12 + ((maxMonth - minMonth) % 12);\n}\nfunction creatMonth(year, month) {\n    return new Date(year, month, 1).getTime();\n}\nfunction diffDay(min, max) {\n    return Math.ceil((max - min) / DAY);\n}\nfunction diffHour(min, max) {\n    return Math.ceil((max - min) / HOUR);\n}\nfunction diffMinus(min, max) {\n    return Math.ceil((max - min) / (60 * 1000));\n}\n/**\n * 计算 time 的 ticks，对 month, year 进行 pretty 处理\n * @param cfg 度量的配置项\n * @returns 计算后的 ticks\n */\nexport default function timePretty(cfg) {\n    var min = cfg.min, max = cfg.max, minTickInterval = cfg.minTickInterval, tickCount = cfg.tickCount;\n    var tickInterval = cfg.tickInterval;\n    var ticks = [];\n    // 指定 tickInterval 后 tickCount 不生效，需要重新计算\n    if (!tickInterval) {\n        tickInterval = (max - min) / tickCount;\n        // 如果设置了最小间距，则使用最小间距\n        if (minTickInterval && tickInterval < minTickInterval) {\n            tickInterval = minTickInterval;\n        }\n    }\n    tickInterval = Math.max(Math.floor((max - min) / (Math.pow(2, 12) - 1)), tickInterval);\n    var minYear = getYear(min);\n    // 如果间距大于 1 年，则将开始日期从整年开始\n    if (tickInterval > YEAR) {\n        var maxYear = getYear(max);\n        var yearInterval = Math.ceil(tickInterval / YEAR);\n        for (var i = minYear; i <= maxYear + yearInterval; i = i + yearInterval) {\n            ticks.push(createYear(i));\n        }\n    }\n    else if (tickInterval > MONTH) {\n        // 大于月时\n        var monthInterval = Math.ceil(tickInterval / MONTH);\n        var mmMoth = getMonth(min);\n        var dMonths = diffMonth(min, max);\n        for (var i = 0; i <= dMonths + monthInterval; i = i + monthInterval) {\n            ticks.push(creatMonth(minYear, i + mmMoth));\n        }\n    }\n    else if (tickInterval > DAY) {\n        // 大于天\n        var date = new Date(min);\n        var year = date.getFullYear();\n        var month = date.getMonth();\n        var mday = date.getDate();\n        var day = Math.ceil(tickInterval / DAY);\n        var ddays = diffDay(min, max);\n        for (var i = 0; i < ddays + day; i = i + day) {\n            ticks.push(new Date(year, month, mday + i).getTime());\n        }\n    }\n    else if (tickInterval > HOUR) {\n        // 大于小时\n        var date = new Date(min);\n        var year = date.getFullYear();\n        var month = date.getMonth();\n        var day = date.getDate();\n        var hour = date.getHours();\n        var hours = Math.ceil(tickInterval / HOUR);\n        var dHours = diffHour(min, max);\n        for (var i = 0; i <= dHours + hours; i = i + hours) {\n            ticks.push(new Date(year, month, day, hour + i).getTime());\n        }\n    }\n    else if (tickInterval > MINUTE) {\n        // 大于分钟\n        var dMinus = diffMinus(min, max);\n        var minutes = Math.ceil(tickInterval / MINUTE);\n        for (var i = 0; i <= dMinus + minutes; i = i + minutes) {\n            ticks.push(min + i * MINUTE);\n        }\n    }\n    else {\n        // 小于分钟\n        var interval = tickInterval;\n        if (interval < SECOND) {\n            interval = SECOND;\n        }\n        var minSecond = Math.floor(min / SECOND) * SECOND;\n        var dSeconds = Math.ceil((max - min) / SECOND);\n        var seconds = Math.ceil(interval / SECOND);\n        for (var i = 0; i < dSeconds + seconds; i = i + seconds) {\n            ticks.push(minSecond + i * SECOND);\n        }\n    }\n    // 最好是能从算法能解决这个问题，但是如果指定了 tickInterval，计算 ticks，也只能这么算，所以\n    // 打印警告提示\n    if (ticks.length >= 512) {\n        console.warn(\"Notice: current ticks length(\" + ticks.length + \") >= 512, may cause performance issues, even out of memory. Because of the configure \\\"tickInterval\\\"(in milliseconds, current is \" + tickInterval + \") is too small, increase the value to solve the problem!\");\n    }\n    return ticks;\n}\n//# sourceMappingURL=time-pretty.js.map","import { Event as GraphEvent } from '@antv/g-base';\n/**\n *\n * @param group 分组\n * @param eventName 事件名\n * @param eventObject 事件对象\n */\nexport function propagationDelegate(group, eventName, eventObject) {\n    var event = new GraphEvent(eventName, eventObject);\n    event.target = group;\n    event.propagationPath.push(group); // 从当前 group 开始触发 delegation\n    group.emitDelegation(eventName, event);\n    var parent = group.getParent();\n    // 执行冒泡\n    while (parent) {\n        // 委托事件要先触发\n        parent.emitDelegation(eventName, event);\n        event.propagationPath.push(parent);\n        parent = parent.getParent();\n    }\n}\n//# sourceMappingURL=event.js.map","import cat from './cat';\nimport d3Linear from './d3-linear';\nimport linear from './linear';\nimport log from './log';\nimport pow from './pow';\nimport quantile from './quantile';\nimport rPretty from './r-prettry';\nimport { getTickMethod, registerTickMethod } from './register';\nimport time from './time';\nimport timeCat from './time-cat';\nimport timePretty from './time-pretty';\nregisterTickMethod('cat', cat);\nregisterTickMethod('time-cat', timeCat);\nregisterTickMethod('wilkinson-extended', linear);\nregisterTickMethod('r-pretty', rPretty);\nregisterTickMethod('time', time);\nregisterTickMethod('time-pretty', timePretty);\nregisterTickMethod('log', log);\nregisterTickMethod('pow', pow);\nregisterTickMethod('quantile', quantile);\nregisterTickMethod('d3-linear', d3Linear);\nexport { getTickMethod, registerTickMethod };\n//# sourceMappingURL=index.js.map","import { __assign } from \"tslib\";\nimport catTicks from './cat';\n/**\n * 计算时间分类的 ticks, 保头，保尾\n * @param cfg 度量的配置项\n * @returns 计算后的 ticks\n */\nexport default function timeCat(cfg) {\n    // 默认保留最后一条\n    var ticks = catTicks(__assign({ showLast: true }, cfg));\n    return ticks;\n}\n//# sourceMappingURL=time-cat.js.map","import { head, isNil, last } from '@antv/util';\nimport extended from '../util/extended';\nimport interval from '../util/interval';\nimport strictLimit from '../util/strict-limit';\n/**\n * 计算线性的 ticks，使用 wilkinson extended 方法\n * @param cfg 度量的配置项\n * @returns 计算后的 ticks\n */\nexport default function linear(cfg) {\n    var min = cfg.min, max = cfg.max, tickCount = cfg.tickCount, nice = cfg.nice, tickInterval = cfg.tickInterval, minLimit = cfg.minLimit, maxLimit = cfg.maxLimit;\n    var ticks = extended(min, max, tickCount, nice).ticks;\n    if (!isNil(minLimit) || !isNil(maxLimit)) {\n        return strictLimit(cfg, head(ticks), last(ticks));\n    }\n    if (tickInterval) {\n        return interval(min, max, tickInterval).ticks;\n    }\n    return ticks;\n}\n//# sourceMappingURL=linear.js.map","import { head, isNil, last } from '@antv/util';\nimport interval from '../util/interval';\nimport pretty from '../util/pretty';\nimport strictLimit from '../util/strict-limit';\n/**\n * 计算线性的 ticks，使用 R's pretty 方法\n * @param cfg 度量的配置项\n * @returns 计算后的 ticks\n */\nexport default function linearPretty(cfg) {\n    var min = cfg.min, max = cfg.max, tickCount = cfg.tickCount, tickInterval = cfg.tickInterval, minLimit = cfg.minLimit, maxLimit = cfg.maxLimit;\n    var ticks = pretty(min, max, tickCount).ticks;\n    if (!isNil(minLimit) || !isNil(maxLimit)) {\n        return strictLimit(cfg, head(ticks), last(ticks));\n    }\n    if (tickInterval) {\n        return interval(min, max, tickInterval).ticks;\n    }\n    return ticks;\n}\n//# sourceMappingURL=r-prettry.js.map","import { getTickInterval } from '../util/time';\nexport default function calculateTimeTicks(cfg) {\n    var min = cfg.min, max = cfg.max, minTickInterval = cfg.minTickInterval;\n    var tickInterval = cfg.tickInterval;\n    var tickCount = cfg.tickCount;\n    // 指定 tickInterval 后 tickCount 不生效，需要重新计算\n    if (tickInterval) {\n        tickCount = Math.ceil((max - min) / tickInterval);\n    }\n    else {\n        tickInterval = getTickInterval(min, max, tickCount)[1];\n        var count = (max - min) / tickInterval;\n        var ratio = count / tickCount;\n        if (ratio > 1) {\n            tickInterval = tickInterval * Math.ceil(ratio);\n        }\n        // 如果设置了最小间距，则使用最小间距\n        if (minTickInterval && tickInterval < minTickInterval) {\n            tickInterval = minTickInterval;\n        }\n    }\n    tickInterval = Math.max(Math.floor((max - min) / (Math.pow(2, 12) - 1)), tickInterval);\n    var ticks = [];\n    for (var i = min; i < max + tickInterval; i += tickInterval) {\n        ticks.push(i);\n    }\n    return ticks;\n}\n//# sourceMappingURL=time.js.map","import { getLogPositiveMin, log } from '../util/math';\n/**\n * 计算 log 的 ticks，考虑 min = 0 的场景\n * @param cfg 度量的配置项\n * @returns 计算后的 ticks\n */\nexport default function calculateLogTicks(cfg) {\n    var base = cfg.base, tickCount = cfg.tickCount, min = cfg.min, max = cfg.max, values = cfg.values;\n    var minTick;\n    var maxTick = log(base, max);\n    if (min > 0) {\n        minTick = Math.floor(log(base, min));\n    }\n    else {\n        var positiveMin = getLogPositiveMin(values, base, max);\n        minTick = Math.floor(log(base, positiveMin));\n    }\n    var count = maxTick - minTick;\n    var avg = Math.ceil(count / tickCount);\n    var ticks = [];\n    for (var i = minTick; i < maxTick + avg; i = i + avg) {\n        ticks.push(Math.pow(base, i));\n    }\n    if (min <= 0) {\n        // 最小值 <= 0 时显示 0\n        ticks.unshift(0);\n    }\n    return ticks;\n}\n//# sourceMappingURL=log.js.map","import { calBase } from '../util/math';\nimport pretty from '../util/pretty';\n/**\n * 计算 Pow 的 ticks\n * @param cfg 度量的配置项\n * @returns 计算后的 ticks\n */\nexport default function calculatePowTicks(cfg) {\n    var exponent = cfg.exponent, tickCount = cfg.tickCount;\n    var max = Math.ceil(calBase(exponent, cfg.max));\n    var min = Math.floor(calBase(exponent, cfg.min));\n    var ticks = pretty(min, max, tickCount).ticks;\n    return ticks.map(function (tick) {\n        var factor = tick >= 0 ? 1 : -1;\n        return Math.pow(tick, exponent) * factor;\n    });\n}\n//# sourceMappingURL=pow.js.map","import { head, isNil, last } from '@antv/util';\nimport d3Linear from '../util/d3-linear';\nimport interval from '../util/interval';\nimport strictLimit from '../util/strict-limit';\nexport default function d3LinearTickMethod(cfg) {\n    var min = cfg.min, max = cfg.max, tickInterval = cfg.tickInterval, minLimit = cfg.minLimit, maxLimit = cfg.maxLimit;\n    var ticks = d3Linear(cfg);\n    if (!isNil(minLimit) || !isNil(maxLimit)) {\n        return strictLimit(cfg, head(ticks), last(ticks));\n    }\n    if (tickInterval) {\n        return interval(min, max, tickInterval).ticks;\n    }\n    return ticks;\n}\n//# sourceMappingURL=d3-linear.js.map","import Scale from './base';\nimport Category from './category/base';\nimport TimeCat from './category/time';\nimport Linear from './continuous/linear';\nimport Log from './continuous/log';\nimport Pow from './continuous/pow';\nimport Time from './continuous/time';\nimport Quantize from './continuous/quantize';\nimport Quantile from './continuous/quantile';\nimport { getScale, registerScale } from './factory';\nimport Identity from './identity/index';\nimport { getTickMethod, registerTickMethod } from './tick-method/index';\nregisterScale('cat', Category);\nregisterScale('category', Category);\nregisterScale('identity', Identity);\nregisterScale('linear', Linear);\nregisterScale('log', Log);\nregisterScale('pow', Pow);\nregisterScale('time', Time);\nregisterScale('timeCat', TimeCat);\nregisterScale('quantize', Quantize);\nregisterScale('quantile', Quantile);\nexport { Category, Identity, Linear, Log, Pow, Time, TimeCat, Quantile, Quantize, Scale, getScale, registerScale, getTickMethod, registerTickMethod, };\n//# sourceMappingURL=index.js.map","import { ext, vec2, vec3 } from '@antv/matrix-util';\nvar identityMatrix = [1, 0, 0, 0, 1, 0, 0, 0, 1];\nexport function getMatrixByAngle(point, angle, matrix) {\n    if (matrix === void 0) { matrix = identityMatrix; }\n    if (!angle) {\n        // 角度为 0 或者 null 时返回 null\n        return null;\n    }\n    var m = ext.transform(matrix, [\n        ['t', -point.x, -point.y],\n        ['r', angle],\n        ['t', point.x, point.y],\n    ]);\n    return m;\n}\nexport function getMatrixByTranslate(point, currentMatrix) {\n    if (!point.x && !point.y) {\n        // 0，0 或者 nan 的情况下返回 null\n        return null;\n    }\n    return ext.transform(currentMatrix || identityMatrix, [['t', point.x, point.y]]);\n}\n// 从矩阵获取旋转的角度\nexport function getAngleByMatrix(matrix) {\n    var xVector = [1, 0, 0];\n    var out = [0, 0, 0];\n    vec3.transformMat3(out, xVector, matrix);\n    return Math.atan2(out[1], out[0]);\n}\n// 矩阵 * 向量\nfunction multiplyVec2(matrix, v) {\n    var out = [0, 0];\n    vec2.transformMat3(out, v, matrix);\n    return out;\n}\nexport function applyMatrix2BBox(matrix, bbox) {\n    var topLeft = multiplyVec2(matrix, [bbox.minX, bbox.minY]);\n    var topRight = multiplyVec2(matrix, [bbox.maxX, bbox.minY]);\n    var bottomLeft = multiplyVec2(matrix, [bbox.minX, bbox.maxY]);\n    var bottomRight = multiplyVec2(matrix, [bbox.maxX, bbox.maxY]);\n    var minX = Math.min(topLeft[0], topRight[0], bottomLeft[0], bottomRight[0]);\n    var maxX = Math.max(topLeft[0], topRight[0], bottomLeft[0], bottomRight[0]);\n    var minY = Math.min(topLeft[1], topRight[1], bottomLeft[1], bottomRight[1]);\n    var maxY = Math.max(topLeft[1], topRight[1], bottomLeft[1], bottomRight[1]);\n    return {\n        x: minX,\n        y: minY,\n        minX: minX,\n        minY: minY,\n        maxX: maxX,\n        maxY: maxY,\n        width: maxX - minX,\n        height: maxY - minY,\n    };\n}\nexport function applyRotate(shape, rotate, x, y) {\n    if (rotate) {\n        var matrix = getMatrixByAngle({ x: x, y: y }, rotate, shape.getMatrix());\n        shape.setMatrix(matrix);\n    }\n}\nexport function applyTranslate(shape, x, y) {\n    var translateMatrix = getMatrixByTranslate({ x: x, y: y });\n    shape.attr('matrix', translateMatrix);\n}\n//# sourceMappingURL=matrix.js.map","import { each, isArray, isNil, isNumber } from '@antv/util';\nexport function formatPadding(padding) {\n    var top = 0;\n    var left = 0;\n    var right = 0;\n    var bottom = 0;\n    if (isNumber(padding)) {\n        top = left = right = bottom = padding;\n    }\n    else if (isArray(padding)) {\n        top = padding[0];\n        right = !isNil(padding[1]) ? padding[1] : padding[0];\n        bottom = !isNil(padding[2]) ? padding[2] : padding[0];\n        left = !isNil(padding[3]) ? padding[3] : right;\n    }\n    return [top, right, bottom, left];\n}\nexport function clearDom(container) {\n    var children = container.childNodes;\n    var length = children.length;\n    for (var i = length - 1; i >= 0; i--) {\n        container.removeChild(children[i]);\n    }\n}\nexport function hasClass(elements, cName) {\n    return !!elements.className.match(new RegExp(\"(\\\\s|^)\" + cName + \"(\\\\s|$)\"));\n}\nexport function regionToBBox(region) {\n    var start = region.start, end = region.end;\n    var minX = Math.min(start.x, end.x);\n    var minY = Math.min(start.y, end.y);\n    var maxX = Math.max(start.x, end.x);\n    var maxY = Math.max(start.y, end.y);\n    return {\n        x: minX,\n        y: minY,\n        minX: minX,\n        minY: minY,\n        maxX: maxX,\n        maxY: maxY,\n        width: maxX - minX,\n        height: maxY - minY,\n    };\n}\nexport function pointsToBBox(points) {\n    var xs = points.map(function (point) { return point.x; });\n    var ys = points.map(function (point) { return point.y; });\n    var minX = Math.min.apply(Math, xs);\n    var minY = Math.min.apply(Math, ys);\n    var maxX = Math.max.apply(Math, xs);\n    var maxY = Math.max.apply(Math, ys);\n    return {\n        x: minX,\n        y: minY,\n        minX: minX,\n        minY: minY,\n        maxX: maxX,\n        maxY: maxY,\n        width: maxX - minX,\n        height: maxY - minY,\n    };\n}\nexport function createBBox(x, y, width, height) {\n    var maxX = x + width;\n    var maxY = y + height;\n    return {\n        x: x,\n        y: y,\n        width: width,\n        height: height,\n        minX: x,\n        minY: y,\n        // 非常奇葩的 js 特性\n        // Infinity + Infinity = Infinity\n        // Infinity - Infinity = NaN\n        // fixed https://github.com/antvis/G2Plot/issues/1243\n        maxX: isNaN(maxX) ? 0 : maxX,\n        maxY: isNaN(maxY) ? 0 : maxY,\n    };\n}\nexport function getValueByPercent(min, max, percent) {\n    return (1 - percent) * min + max * percent;\n}\nexport function getCirclePoint(center, radius, angle) {\n    return {\n        x: center.x + Math.cos(angle) * radius,\n        y: center.y + Math.sin(angle) * radius,\n    };\n}\nexport function distance(p1, p2) {\n    var dx = p2.x - p1.x;\n    var dy = p2.y - p1.y;\n    return Math.sqrt(dx * dx + dy * dy);\n}\nexport var wait = function (interval) {\n    return new Promise(function (resolve) {\n        setTimeout(resolve, interval);\n    });\n};\n/**\n * 判断两个数值 是否接近\n * - 解决精度问题（由于无法确定精度上限，根据具体场景可传入 精度 参数）\n */\nexport var near = function (x, y, e) {\n    if (e === void 0) { e = Math.pow(Number.EPSILON, 0.5); }\n    return [x, y].includes(Infinity) ? Math.abs(x) === Math.abs(y) : Math.abs(x - y) < e;\n};\nexport function intersectBBox(box1, box2) {\n    var minX = Math.max(box1.minX, box2.minX);\n    var minY = Math.max(box1.minY, box2.minY);\n    var maxX = Math.min(box1.maxX, box2.maxX);\n    var maxY = Math.min(box1.maxY, box2.maxY);\n    return createBBox(minX, minY, maxX - minX, maxY - minY);\n}\nexport function mergeBBox(box1, box2) {\n    var minX = Math.min(box1.minX, box2.minX);\n    var minY = Math.min(box1.minY, box2.minY);\n    var maxX = Math.max(box1.maxX, box2.maxX);\n    var maxY = Math.max(box1.maxY, box2.maxY);\n    return createBBox(minX, minY, maxX - minX, maxY - minY);\n}\nexport function getBBoxWithClip(element) {\n    var clipShape = element.getClip();\n    var clipBBox = clipShape && clipShape.getBBox();\n    var bbox;\n    if (!element.isGroup()) {\n        // 如果是普通的图形\n        bbox = element.getBBox();\n    }\n    else {\n        var minX_1 = Infinity;\n        var maxX_1 = -Infinity;\n        var minY_1 = Infinity;\n        var maxY_1 = -Infinity;\n        var children = element.getChildren();\n        if (children.length > 0) {\n            each(children, function (child) {\n                if (child.get('visible')) {\n                    // 如果分组没有子元素，则直接跳过\n                    if (child.isGroup() && child.get('children').length === 0) {\n                        return true;\n                    }\n                    var box = getBBoxWithClip(child);\n                    // 计算 4 个顶点\n                    var leftTop = child.applyToMatrix([box.minX, box.minY, 1]);\n                    var leftBottom = child.applyToMatrix([box.minX, box.maxY, 1]);\n                    var rightTop = child.applyToMatrix([box.maxX, box.minY, 1]);\n                    var rightBottom = child.applyToMatrix([box.maxX, box.maxY, 1]);\n                    // 从中取最小的范围\n                    var boxMinX = Math.min(leftTop[0], leftBottom[0], rightTop[0], rightBottom[0]);\n                    var boxMaxX = Math.max(leftTop[0], leftBottom[0], rightTop[0], rightBottom[0]);\n                    var boxMinY = Math.min(leftTop[1], leftBottom[1], rightTop[1], rightBottom[1]);\n                    var boxMaxY = Math.max(leftTop[1], leftBottom[1], rightTop[1], rightBottom[1]);\n                    if (boxMinX < minX_1) {\n                        minX_1 = boxMinX;\n                    }\n                    if (boxMaxX > maxX_1) {\n                        maxX_1 = boxMaxX;\n                    }\n                    if (boxMinY < minY_1) {\n                        minY_1 = boxMinY;\n                    }\n                    if (boxMaxY > maxY_1) {\n                        maxY_1 = boxMaxY;\n                    }\n                }\n            });\n        }\n        else {\n            minX_1 = 0;\n            maxX_1 = 0;\n            minY_1 = 0;\n            maxY_1 = 0;\n        }\n        bbox = createBBox(minX_1, minY_1, maxX_1 - minX_1, maxY_1 - minY_1);\n    }\n    if (clipBBox) {\n        return intersectBBox(bbox, clipBBox);\n    }\n    else {\n        return bbox;\n    }\n}\nexport function updateClip(element, newElement) {\n    if (!element.getClip() && !newElement.getClip()) {\n        // 两者都没有 clip\n        return;\n    }\n    var newClipShape = newElement.getClip();\n    if (!newClipShape) {\n        // 新的 element 没有 clip\n        element.setClip(null); // 移除 clip\n        return;\n    }\n    var clipCfg = {\n        type: newClipShape.get('type'),\n        attrs: newClipShape.attr(),\n    };\n    element.setClip(clipCfg);\n}\nexport function toPx(number) {\n    return number + \"px\";\n}\nexport function getTextPoint(start, end, position, offset) {\n    var lineLength = distance(start, end);\n    var offsetPercent = offset / lineLength; // 计算间距同线的比例，用于计算最终的位置\n    var percent = 0;\n    if (position === 'start') {\n        percent = 0 - offsetPercent;\n    }\n    else if (position === 'end') {\n        percent = 1 + offsetPercent;\n    }\n    return {\n        x: getValueByPercent(start.x, end.x, percent),\n        y: getValueByPercent(start.y, end.y, percent),\n    };\n}\n//# sourceMappingURL=util.js.map","import { __assign, __extends } from \"tslib\";\nimport { Base } from '@antv/g-base';\nimport { deepMix, each, hasKey, isObject } from '@antv/util';\nvar LOCATION_FIELD_MAP = {\n    none: [],\n    point: ['x', 'y'],\n    region: ['start', 'end'],\n    points: ['points'],\n    circle: ['center', 'radius', 'startAngle', 'endAngle'],\n};\nvar Component = /** @class */ (function (_super) {\n    __extends(Component, _super);\n    function Component(cfg) {\n        var _this = _super.call(this, cfg) || this;\n        _this.initCfg();\n        return _this;\n    }\n    /**\n     * @protected\n     * 默认的配置项\n     * @returns {object} 默认的配置项\n     */\n    Component.prototype.getDefaultCfg = function () {\n        return {\n            id: '',\n            name: '',\n            type: '',\n            locationType: 'none',\n            offsetX: 0,\n            offsetY: 0,\n            animate: false,\n            capture: true,\n            updateAutoRender: false,\n            animateOption: {\n                appear: null,\n                update: {\n                    duration: 400,\n                    easing: 'easeQuadInOut',\n                },\n                enter: {\n                    duration: 400,\n                    easing: 'easeQuadInOut',\n                },\n                leave: {\n                    duration: 350,\n                    easing: 'easeQuadIn',\n                },\n            },\n            events: null,\n            defaultCfg: {},\n            visible: true,\n        };\n    };\n    /**\n     * 清理组件的内容，一般配合 render 使用\n     * @example\n     * axis.clear();\n     * axis.render();\n     */\n    Component.prototype.clear = function () { };\n    /**\n     * 更新组件\n     * @param {object} cfg 更新属性\n     */\n    Component.prototype.update = function (cfg) {\n        var _this = this;\n        var defaultCfg = this.get('defaultCfg') || {};\n        each(cfg, function (value, name) {\n            var originCfg = _this.get(name);\n            var newCfg = value;\n            if (originCfg !== value) {\n                // 判断两者是否相等，主要是进行 null 的判定\n                if (isObject(value) && defaultCfg[name]) {\n                    // 新设置的属性与默认值进行合并\n                    newCfg = deepMix({}, defaultCfg[name], value);\n                }\n                _this.set(name, newCfg);\n            }\n        });\n        this.updateInner(cfg);\n        this.afterUpdate(cfg);\n    };\n    // 更新内部\n    Component.prototype.updateInner = function (cfg) {\n    };\n    Component.prototype.afterUpdate = function (cfg) {\n        // 更新时考虑显示、隐藏\n        if (hasKey(cfg, 'visible')) {\n            if (cfg.visible) {\n                this.show();\n            }\n            else {\n                this.hide();\n            }\n        }\n        // 更新时考虑capture\n        if (hasKey(cfg, 'capture')) {\n            this.setCapture(cfg.capture);\n        }\n    };\n    Component.prototype.getLayoutBBox = function () {\n        return this.getBBox(); // 默认返回 getBBox，不同的组件内部单独实现\n    };\n    Component.prototype.getLocationType = function () {\n        return this.get('locationType');\n    };\n    Component.prototype.getOffset = function () {\n        return {\n            offsetX: this.get('offsetX'),\n            offsetY: this.get('offsetY'),\n        };\n    };\n    // 默认使用 update\n    Component.prototype.setOffset = function (offsetX, offsetY) {\n        this.update({\n            offsetX: offsetX,\n            offsetY: offsetY,\n        });\n    };\n    Component.prototype.setLocation = function (cfg) {\n        var location = __assign({}, cfg);\n        this.update(location);\n    };\n    // 实现 ILocation 接口的 getLocation\n    Component.prototype.getLocation = function () {\n        var _this = this;\n        var location = {};\n        var locationType = this.get('locationType');\n        var fields = LOCATION_FIELD_MAP[locationType];\n        each(fields, function (field) {\n            location[field] = _this.get(field);\n        });\n        return location;\n    };\n    Component.prototype.isList = function () {\n        return false;\n    };\n    Component.prototype.isSlider = function () {\n        return false;\n    };\n    /**\n     * @protected\n     * 初始化，用于具体的组件继承\n     */\n    Component.prototype.init = function () { };\n    // 将组件默认的配置项设置合并到传入的配置项\n    Component.prototype.initCfg = function () {\n        var _this = this;\n        var defaultCfg = this.get('defaultCfg');\n        each(defaultCfg, function (value, name) {\n            var cfg = _this.get(name);\n            if (isObject(cfg)) {\n                var newCfg = deepMix({}, value, cfg);\n                _this.set(name, newCfg);\n            }\n        });\n    };\n    return Component;\n}(Base));\nexport default Component;\n//# sourceMappingURL=component.js.map","import { __assign, __extends, __rest } from \"tslib\";\nimport { difference, each, isNil, keys, mix, pick } from '@antv/util';\nimport { propagationDelegate } from '../util/event';\nimport { applyMatrix2BBox, getMatrixByTranslate } from '../util/matrix';\nimport { getBBoxWithClip, updateClip } from '../util/util';\nimport Component from './component';\nvar STATUS_UPDATE = 'update_status';\nvar COPY_PROPERTIES = ['visible', 'tip', 'delegateObject']; // 更新对象时需要复制的属性\nvar COPY_PROPERTIES_EXCLUDES = ['container', 'group', 'shapesMap', 'isRegister', 'isUpdating', 'destroyed']; // 更新子组件时排除的属性\nvar GroupComponent = /** @class */ (function (_super) {\n    __extends(GroupComponent, _super);\n    function GroupComponent() {\n        return _super !== null && _super.apply(this, arguments) || this;\n    }\n    GroupComponent.prototype.getDefaultCfg = function () {\n        var cfg = _super.prototype.getDefaultCfg.call(this);\n        return __assign(__assign({}, cfg), { container: null, \n            /**\n             * @private\n             * 缓存图形的 Map\n             */\n            shapesMap: {}, group: null, capture: true, \n            /**\n             * @private 组件或者图形是否允许注册\n             * @type {false}\n             */\n            isRegister: false, \n            /**\n             * @private 是否正在更新\n             * @type {false}\n             */\n            isUpdating: false, \n            /**\n             * @private\n             * 是否初始状态，一旦 render，update 后，这个状态就变成 false, clear 后恢复\n             */\n            isInit: true });\n    };\n    GroupComponent.prototype.remove = function () {\n        this.clear();\n        var group = this.get('group');\n        group.remove();\n    };\n    GroupComponent.prototype.clear = function () {\n        var group = this.get('group');\n        group.clear();\n        this.set('shapesMap', {});\n        this.clearOffScreenCache();\n        this.set('isInit', true);\n    };\n    GroupComponent.prototype.getChildComponentById = function (id) {\n        var group = this.getElementById(id);\n        var inst = group && group.get('component');\n        return inst;\n    };\n    GroupComponent.prototype.getElementById = function (id) {\n        return this.get('shapesMap')[id];\n    };\n    GroupComponent.prototype.getElementByLocalId = function (localId) {\n        var id = this.getElementId(localId);\n        return this.getElementById(id);\n    };\n    GroupComponent.prototype.getElementsByName = function (name) {\n        var rst = [];\n        each(this.get('shapesMap'), function (elem) {\n            if (elem.get('name') === name) {\n                rst.push(elem);\n            }\n        });\n        return rst;\n    };\n    GroupComponent.prototype.getContainer = function () {\n        return this.get('container');\n    };\n    GroupComponent.prototype.updateInner = function (cfg) {\n        // this.updateInner();\n        // this.set('isUpdating', false);\n        this.offScreenRender();\n        if (this.get('updateAutoRender')) {\n            this.render();\n        }\n    };\n    GroupComponent.prototype.render = function () {\n        var offScreenGroup = this.get('offScreenGroup');\n        if (!offScreenGroup) {\n            offScreenGroup = this.offScreenRender();\n        }\n        var group = this.get('group');\n        this.updateElements(offScreenGroup, group);\n        this.deleteElements();\n        this.applyOffset();\n        if (!this.get('eventInitted')) {\n            this.initEvent();\n            this.set('eventInitted', true);\n        }\n        this.set('isInit', false);\n    };\n    GroupComponent.prototype.show = function () {\n        var group = this.get('group');\n        group.show();\n        this.set('visible', true);\n    };\n    GroupComponent.prototype.hide = function () {\n        var group = this.get('group');\n        group.hide();\n        this.set('visible', false);\n    };\n    GroupComponent.prototype.setCapture = function (capture) {\n        var group = this.get('group');\n        group.set('capture', capture);\n        this.set('capture', capture);\n    };\n    GroupComponent.prototype.destroy = function () {\n        this.removeEvent();\n        this.remove();\n        _super.prototype.destroy.call(this);\n    };\n    GroupComponent.prototype.getBBox = function () {\n        return this.get('group').getCanvasBBox();\n    };\n    GroupComponent.prototype.getLayoutBBox = function () {\n        var group = this.get('group');\n        // 防止被 clear 了，offScreenBBox 不存在\n        var bbox = this.getInnerLayoutBBox();\n        var matrix = group.getTotalMatrix();\n        if (matrix) {\n            bbox = applyMatrix2BBox(matrix, bbox);\n        }\n        return bbox; // 默认返回 getBBox，不同的组件内部单独实现\n    };\n    // 复写 on, off, emit 透传到 group\n    GroupComponent.prototype.on = function (evt, callback, once) {\n        var group = this.get('group');\n        group.on(evt, callback, once);\n        return this;\n    };\n    GroupComponent.prototype.off = function (evt, callback) {\n        var group = this.get('group');\n        group && group.off(evt, callback);\n        return this;\n    };\n    GroupComponent.prototype.emit = function (eventName, eventObject) {\n        var group = this.get('group');\n        group.emit(eventName, eventObject);\n    };\n    GroupComponent.prototype.init = function () {\n        _super.prototype.init.call(this);\n        if (!this.get('group')) {\n            this.initGroup();\n        }\n        this.offScreenRender(); // 绘制离屏 group\n    };\n    // 获取组件内部布局占的包围盒\n    GroupComponent.prototype.getInnerLayoutBBox = function () {\n        return this.get('offScreenBBox') || this.get('group').getBBox();\n    };\n    // 抛出委托对象\n    GroupComponent.prototype.delegateEmit = function (eventName, eventObject) {\n        var group = this.get('group');\n        eventObject.target = group;\n        group.emit(eventName, eventObject);\n        propagationDelegate(group, eventName, eventObject);\n    };\n    // 创建离屏的 group ,不添加在 canvas 中\n    GroupComponent.prototype.createOffScreenGroup = function () {\n        var group = this.get('group');\n        var GroupClass = group.getGroupBase(); // 获取分组的构造函数\n        var newGroup = new GroupClass({\n            delegateObject: this.getDelegateObject(),\n        });\n        return newGroup;\n    };\n    // 应用 offset\n    GroupComponent.prototype.applyOffset = function () {\n        var offsetX = this.get('offsetX');\n        var offsetY = this.get('offsetY');\n        this.moveElementTo(this.get('group'), {\n            x: offsetX,\n            y: offsetY,\n        });\n    };\n    GroupComponent.prototype.initGroup = function () {\n        var container = this.get('container');\n        this.set('group', container.addGroup({\n            id: this.get('id'),\n            name: this.get('name'),\n            capture: this.get('capture'),\n            visible: this.get('visible'),\n            isComponent: true,\n            component: this,\n            delegateObject: this.getDelegateObject(),\n        }));\n    };\n    // 离屏渲染\n    GroupComponent.prototype.offScreenRender = function () {\n        this.clearOffScreenCache();\n        var offScreenGroup = this.createOffScreenGroup();\n        this.renderInner(offScreenGroup);\n        this.set('offScreenGroup', offScreenGroup);\n        // 包含包围盒的 bbox\n        this.set('offScreenBBox', getBBoxWithClip(offScreenGroup));\n        return offScreenGroup;\n    };\n    /**\n     * @protected\n     * 在组件上添加分组，主要解决 isReigeter 的问题\n     * @param {IGroup} parent 父元素\n     * @param {object} cfg    分组的配置项\n     */\n    GroupComponent.prototype.addGroup = function (parent, cfg) {\n        this.appendDelegateObject(parent, cfg);\n        var group = parent.addGroup(cfg);\n        if (this.get('isRegister')) {\n            this.registerElement(group);\n        }\n        return group;\n    };\n    /**\n     * @protected\n     * 在组件上添加图形，主要解决 isReigeter 的问题\n     * @param {IGroup} parent 父元素\n     * @param {object} cfg    分组的配置项\n     */\n    GroupComponent.prototype.addShape = function (parent, cfg) {\n        this.appendDelegateObject(parent, cfg);\n        var shape = parent.addShape(cfg);\n        if (this.get('isRegister')) {\n            this.registerElement(shape);\n        }\n        return shape;\n    };\n    /**\n     * 在组件上添加子组件\n     *\n     * @param parent 父元素\n     * @param cfg 子组件配置项\n     */\n    GroupComponent.prototype.addComponent = function (parent, cfg) {\n        var id = cfg.id, Ctor = cfg.component, restCfg = __rest(cfg, [\"id\", \"component\"]);\n        // @ts-ignore\n        var inst = new Ctor(__assign(__assign({}, restCfg), { id: id, container: parent, updateAutoRender: this.get('updateAutoRender') }));\n        inst.init();\n        inst.render();\n        if (this.get('isRegister')) {\n            this.registerElement(inst.get('group'));\n        }\n        return inst;\n    };\n    GroupComponent.prototype.initEvent = function () { };\n    GroupComponent.prototype.removeEvent = function () {\n        var group = this.get('group');\n        group.off();\n    };\n    GroupComponent.prototype.getElementId = function (localId) {\n        var id = this.get('id'); // 组件的 Id\n        var name = this.get('name'); // 组件的名称\n        return id + \"-\" + name + \"-\" + localId;\n    };\n    GroupComponent.prototype.registerElement = function (element) {\n        var id = element.get('id');\n        this.get('shapesMap')[id] = element;\n    };\n    GroupComponent.prototype.unregisterElement = function (element) {\n        var id = element.get('id');\n        delete this.get('shapesMap')[id];\n    };\n    // 移动元素\n    GroupComponent.prototype.moveElementTo = function (element, point) {\n        var matrix = getMatrixByTranslate(point);\n        element.attr('matrix', matrix);\n    };\n    /**\n     * 图形元素新出现时的动画，默认图形从透明度 0 到当前透明度\n     * @protected\n     * @param {string} elmentName 图形元素名称\n     * @param {IElement} newElement  新的图形元素\n     * @param {object} animateCfg 动画的配置项\n     */\n    GroupComponent.prototype.addAnimation = function (elmentName, newElement, animateCfg) {\n        // 缓存透明度\n        var originOpacity = newElement.attr('opacity');\n        if (isNil(originOpacity)) {\n            originOpacity = 1;\n        }\n        newElement.attr('opacity', 0);\n        newElement.animate({ opacity: originOpacity }, animateCfg);\n    };\n    /**\n     * 图形元素新出现时的动画，默认图形从透明度 0 到当前透明度\n     * @protected\n     * @param {string} elmentName 图形元素名称\n     * @param {IElement} originElement 要删除的图形元素\n     * @param {object} animateCfg 动画的配置项\n     */\n    GroupComponent.prototype.removeAnimation = function (elementName, originElement, animateCfg) {\n        originElement.animate({ opacity: 0 }, animateCfg);\n    };\n    /**\n     * 图形元素的更新动画\n     * @param {string} elmentName 图形元素名称\n     * @param {IElement} originElement 现有的图形元素\n     * @param {object} newAttrs  新的图形元素\n     * @param {object} animateCfg 动画的配置项\n     */\n    GroupComponent.prototype.updateAnimation = function (elementName, originElement, newAttrs, animateCfg) {\n        originElement.animate(newAttrs, animateCfg);\n    };\n    // 更新组件的图形\n    GroupComponent.prototype.updateElements = function (newGroup, originGroup) {\n        var _this = this;\n        var animate = this.get('animate');\n        var animateOption = this.get('animateOption');\n        var children = newGroup.getChildren().slice(0); // 创建一个新数组，防止添加到 originGroup 时， children 变动\n        var preElement; // 前面已经匹配到的图形元素，用于\n        each(children, function (element) {\n            var elementId = element.get('id');\n            var originElement = _this.getElementById(elementId);\n            var elementName = element.get('name');\n            if (originElement) {\n                if (element.get('isComponent')) {\n                    // 嵌套子组件更新\n                    var childComponent = element.get('component');\n                    var origChildComponent = originElement.get('component');\n                    var newCfg = pick(childComponent.cfg, difference(keys(childComponent.cfg), COPY_PROPERTIES_EXCLUDES));\n                    origChildComponent.update(newCfg);\n                    originElement.set(STATUS_UPDATE, 'update');\n                }\n                else {\n                    var replaceAttrs = _this.getReplaceAttrs(originElement, element);\n                    // 更新\n                    if (animate && animateOption.update) {\n                        // 没有动画\n                        _this.updateAnimation(elementName, originElement, replaceAttrs, animateOption.update);\n                    }\n                    else {\n                        // originElement.attrs = replaceAttrs; // 直接替换\n                        originElement.attr(replaceAttrs);\n                    }\n                    // 如果是分组，则继续执行\n                    if (element.isGroup()) {\n                        _this.updateElements(element, originElement);\n                    }\n                    // 复制属性\n                    each(COPY_PROPERTIES, function (name) {\n                        originElement.set(name, element.get(name));\n                    });\n                    updateClip(originElement, element);\n                    preElement = originElement;\n                    // 执行完更新后设置状态位为更新\n                    originElement.set(STATUS_UPDATE, 'update');\n                }\n            }\n            else {\n                // 没有对应的图形，则插入当前图形\n                originGroup.add(element); // 应该在 group 加个 insertAt 的方法\n                var siblings = originGroup.getChildren(); // 兄弟节点\n                siblings.splice(siblings.length - 1, 1); // 先从数组中移除，然后放到合适的位置\n                if (preElement) {\n                    // 前面已经有更新的图形或者插入的图形，则在这个图形后面插入\n                    var index = siblings.indexOf(preElement);\n                    siblings.splice(index + 1, 0, element); // 在已经更新的图形元素后面插入\n                }\n                else {\n                    siblings.unshift(element);\n                }\n                _this.registerElement(element); // 注册节点\n                element.set(STATUS_UPDATE, 'add'); // 执行完更新后设置状态位为添加\n                if (element.get('isComponent')) {\n                    // 直接新增子组件container属性，实例不变\n                    var childComponent = element.get('component');\n                    childComponent.set('container', originGroup);\n                }\n                else if (element.isGroup()) {\n                    // 如果元素是新增加的元素，则遍历注册所有的子节点\n                    _this.registerNewGroup(element);\n                }\n                preElement = element;\n                if (animate) {\n                    var animateCfg = _this.get('isInit') ? animateOption.appear : animateOption.enter;\n                    if (animateCfg) {\n                        _this.addAnimation(elementName, element, animateCfg);\n                    }\n                }\n            }\n        });\n    };\n    GroupComponent.prototype.clearUpdateStatus = function (group) {\n        var children = group.getChildren();\n        each(children, function (el) {\n            el.set(STATUS_UPDATE, null); // 清理掉更新状态\n        });\n    };\n    // 清理离屏缓存\n    GroupComponent.prototype.clearOffScreenCache = function () {\n        var offScreenGroup = this.get('offScreenGroup');\n        if (offScreenGroup) {\n            // 销毁原先的离线 Group\n            offScreenGroup.destroy();\n        }\n        this.set('offScreenGroup', null);\n        this.set('offScreenBBox', null);\n    };\n    // private updateInner() {\n    //   const group = this.get('group');\n    //   const newGroup = this.createOffScreenGroup();\n    //   this.renderInner(newGroup);\n    //   this.applyOffset();\n    //   this.updateElements(newGroup, group);\n    //   this.deleteElements();\n    //   newGroup.destroy(); // 销毁虚拟分组\n    // }\n    // 获取发生委托时的对象，在事件中抛出\n    GroupComponent.prototype.getDelegateObject = function () {\n        var _a;\n        var name = this.get('name');\n        var delegateObject = (_a = {},\n            _a[name] = this,\n            _a.component = this,\n            _a);\n        return delegateObject;\n    };\n    // 附加委托信息，用于事件\n    GroupComponent.prototype.appendDelegateObject = function (parent, cfg) {\n        var parentObject = parent.get('delegateObject');\n        if (!cfg.delegateObject) {\n            cfg.delegateObject = {};\n        }\n        mix(cfg.delegateObject, parentObject); // 将父元素上的委托信息复制到自身\n    };\n    // 获取需要替换的属性，如果原先图形元素存在，而新图形不存在，则设置 undefined\n    GroupComponent.prototype.getReplaceAttrs = function (originElement, newElement) {\n        var originAttrs = originElement.attr();\n        var newAttrs = newElement.attr();\n        each(originAttrs, function (v, k) {\n            if (newAttrs[k] === undefined) {\n                newAttrs[k] = undefined;\n            }\n        });\n        return newAttrs;\n    };\n    GroupComponent.prototype.registerNewGroup = function (group) {\n        var _this = this;\n        var children = group.getChildren();\n        each(children, function (element) {\n            _this.registerElement(element); // 注册节点\n            element.set(STATUS_UPDATE, 'add'); // 执行完更新后设置状态位为添加\n            if (element.isGroup()) {\n                _this.registerNewGroup(element);\n            }\n        });\n    };\n    // 移除多余的元素\n    GroupComponent.prototype.deleteElements = function () {\n        var _this = this;\n        var shapesMap = this.get('shapesMap');\n        var deleteArray = [];\n        // 遍历获取需要删除的图形元素\n        each(shapesMap, function (element, id) {\n            if (!element.get(STATUS_UPDATE) || element.destroyed) {\n                deleteArray.push([id, element]);\n            }\n            else {\n                element.set(STATUS_UPDATE, null); // 清理掉更新状态\n            }\n        });\n        var animate = this.get('animate');\n        var animateOption = this.get('animateOption');\n        // 删除图形元素\n        each(deleteArray, function (item) {\n            var id = item[0], element = item[1];\n            if (!element.destroyed) {\n                var elementName = element.get('name');\n                if (animate && animateOption.leave) {\n                    // 需要动画结束时移除图形\n                    var callbackAnimCfg = mix({\n                        callback: function () {\n                            _this.removeElement(element);\n                        },\n                    }, animateOption.leave);\n                    _this.removeAnimation(elementName, element, callbackAnimCfg);\n                }\n                else {\n                    _this.removeElement(element);\n                }\n            }\n            delete shapesMap[id]; // 从缓存中移除\n        });\n    };\n    GroupComponent.prototype.removeElement = function (element) {\n        if (element.get('isGroup')) {\n            var component = element.get('component');\n            if (component) {\n                component.destroy();\n            }\n        }\n        element.remove();\n    };\n    return GroupComponent;\n}(Component));\nexport default GroupComponent;\n//# sourceMappingURL=group-component.js.map","import filter from './filter';\nimport contains from './contains';\n/**\n * Flattens `array` a single level deep.\n *\n * @param {Array} arr The array to inspect.\n * @param {Array} values The values to exclude.\n * @return {Array} Returns the new array of filtered values.\n * @example\n * difference([2, 1], [2, 3]);  // => [1]\n */\nvar difference = function (arr, values) {\n    if (values === void 0) { values = []; }\n    return filter(arr, function (value) { return !contains(values, value); });\n};\nexport default difference;\n//# sourceMappingURL=difference.js.map","var ELLIPSIS_CODE = '\\u2026';\n/** 获取字符串长度 */\nexport function strLen(str) {\n    var len = 0;\n    for (var i = 0; i < str.length; i++) {\n        len += charAtLength(str, i);\n    }\n    return len;\n}\n/** 是否属于ASCII编码范畴 */\nexport function charAtLength(str, i) {\n    if (str.charCodeAt(i) > 0 && str.charCodeAt(i) < 128) {\n        return 1;\n    }\n    else {\n        return 2;\n    }\n}\n/** 文本省略 */\nexport function ellipsisString(str, reseveLength, position) {\n    if (position === void 0) { position = 'tail'; }\n    var count = str.length;\n    var rst = '';\n    if (position === 'tail') {\n        for (var i = 0, index = 0; i < reseveLength;) {\n            var charLength = charAtLength(str, index);\n            if (i + charLength <= reseveLength) {\n                rst += str[index];\n                i += charAtLength(str, index);\n                index++;\n            }\n            else {\n                break;\n            }\n        }\n        rst += ELLIPSIS_CODE;\n    }\n    else if (position === 'head') {\n        for (var i = 0, index = count - 1; i < reseveLength;) {\n            var charLength = charAtLength(str, index);\n            if (i + charLength <= reseveLength) {\n                rst += str[index];\n                i += charAtLength(str, index);\n                index--;\n            }\n            else {\n                break;\n            }\n        }\n        rst = ELLIPSIS_CODE + rst;\n    }\n    else {\n        var startStr = '';\n        var endStr = '';\n        for (var i = 0, startIndex = 0, endIndex = count - 1; i < reseveLength;) {\n            var startCodeLen = charAtLength(str, startIndex);\n            var hasAdd = false; // 设置标志位，防止头尾都没有附加字符\n            if (startCodeLen + i <= reseveLength) {\n                startStr += str[startIndex];\n                startIndex++;\n                i += startCodeLen;\n                hasAdd = true;\n            }\n            var endCodeLen = charAtLength(str, endIndex);\n            if (endCodeLen + i <= reseveLength) {\n                endStr = str[endIndex] + endStr;\n                i += endCodeLen;\n                endIndex--;\n                hasAdd = true;\n            }\n            if (!hasAdd) {\n                // 如果都没有增加字符，说明都不适合则中断\n                break;\n            }\n        }\n        rst = startStr + ELLIPSIS_CODE + endStr;\n    }\n    return rst;\n}\n//# sourceMappingURL=text.js.map","import { each, isNil, getEllipsisText, pick } from '@antv/util';\nimport { ellipsisString, strLen } from './text';\nvar ELLIPSIS_CODE = '\\u2026';\nvar ELLIPSIS_CODE_LENGTH = 2; // 省略号的长度\n/** 大数据量阈值 */\nvar OPTIMIZE_THRESHOLD = 400;\n/**\n * 针对大数据量做优化的 getMaxLabelWidth，做法不是直接去比较每一个 label 的最大宽度\n * 而是先通过比较每个 label 每个的字符串的长度，这里区分了下中英文字符\n * 最终是去字符串最“长”的那个 label 的宽度。\n * @param labels\n */\nfunction getMaxLabelWidthOptimized(labels) {\n    var texts = labels.map(function (label) {\n        var text = label.attr('text');\n        return isNil(text) ? '' : \"\" + text;\n    });\n    var maxLen = 0;\n    var maxIdx = 0;\n    for (var i = 0; i < texts.length; i += 1) {\n        var len = 0;\n        for (var j = 0; j <= texts[i].length; j += 1) {\n            var code = texts[i].charCodeAt(j);\n            if (code >= 19968 && code <= 40869) {\n                len += 2;\n            }\n            else {\n                len += 1;\n            }\n        }\n        if (len > maxLen) {\n            maxLen = len;\n            maxIdx = i;\n        }\n    }\n    return labels[maxIdx].getBBox().width;\n}\n/** 获取最长的 label */\nexport function getMaxLabelWidth(labels) {\n    if (labels.length > OPTIMIZE_THRESHOLD) {\n        return getMaxLabelWidthOptimized(labels);\n    }\n    var max = 0;\n    each(labels, function (label) {\n        var bbox = label.getBBox();\n        var width = bbox.width;\n        if (max < width) {\n            max = width;\n        }\n    });\n    return max;\n}\n/** 获取label长度 */\nexport function getLabelLength(isVertical, label) {\n    var bbox = label.getCanvasBBox();\n    return isVertical ? bbox.width : bbox.height;\n}\n/* label长度是否超过约束值 */\nexport function testLabel(label, limitLength) {\n    return label.getBBox().width < limitLength;\n}\n/** 处理 text shape 的自动省略 */\nexport function ellipsisLabel(isVertical, label, limitLength, position) {\n    var _a;\n    if (position === void 0) { position = 'tail'; }\n    var text = (_a = label.attr('text')) !== null && _a !== void 0 ? _a : ''; // 避免出现null、undefined\n    if (position === 'tail') {\n        // component 里的缩略处理做得很糟糕，文字长度测算完全不准确\n        // 这里暂时只对 tail 做处理\n        var font = pick(label.attr(), ['fontSize', 'fontFamily', 'fontWeight', 'fontStyle', 'fontVariant']);\n        var ellipsisText = getEllipsisText(text, limitLength, font, '…');\n        if (text !== ellipsisText) {\n            label.attr('text', ellipsisText);\n            label.set('tip', text);\n            return true;\n        }\n        label.set('tip', null);\n        return false;\n    }\n    var labelLength = getLabelLength(isVertical, label);\n    var codeLength = strLen(text);\n    var ellipsisFlag = false;\n    if (limitLength < labelLength) {\n        var reserveLength = Math.floor((limitLength / labelLength) * codeLength) - ELLIPSIS_CODE_LENGTH; // 计算出来的应该保存的长度\n        var newText = void 0;\n        if (reserveLength >= 0) {\n            newText = ellipsisString(text, reserveLength, position);\n        }\n        else {\n            newText = ELLIPSIS_CODE;\n        }\n        if (newText) {\n            label.attr('text', newText);\n            ellipsisFlag = true;\n        }\n    }\n    if (ellipsisFlag) {\n        label.set('tip', text);\n    }\n    else {\n        label.set('tip', null);\n    }\n    return ellipsisFlag;\n}\n//# sourceMappingURL=label.js.map","import isString from './is-string';\nimport toString from './to-string';\nimport { default as measureTextWidth } from './measure-text-width';\n/**\n * 获取文本的 ... 文本。\n * 算法（减少每次 measureText 的长度，measureText 的性能跟字符串时间相关）：\n * 1. 先通过 STEP 逐步计算，找到最后一个小于 maxWidth 的字符串\n * 2. 然后对最后这个字符串二分计算\n * @param text 需要计算的文本, 由于历史原因 除了支持string，还支持空值,number和数组等\n * @param maxWidth 最大宽度\n * @param font 字体\n * @param str 要替换的文本\n */\nexport default (function (text, maxWidth, font, str) {\n    if (str === void 0) { str = '...'; }\n    var STEP = 16; // 每次 16，调参工程师\n    var PLACEHOLDER_WIDTH = measureTextWidth(str, font);\n    var leftText = !isString(text) ? toString(text) : text;\n    var leftWidth = maxWidth;\n    var r = []; // 最终的分段字符串\n    var currentText;\n    var currentWidth;\n    if (measureTextWidth(text, font) <= maxWidth) {\n        return text;\n    }\n    // 首先通过 step 计算，找出最大的未超出长度的\n    // eslint-disable-next-line no-constant-condition\n    while (true) {\n        // 更新字符串\n        currentText = leftText.substr(0, STEP);\n        // 计算宽度\n        currentWidth = measureTextWidth(currentText, font);\n        // 超出剩余宽度，则停止\n        if (currentWidth + PLACEHOLDER_WIDTH > leftWidth) {\n            if (currentWidth > leftWidth) {\n                break;\n            }\n        }\n        r.push(currentText);\n        // 没有超出，则计算剩余宽度\n        leftWidth -= currentWidth;\n        leftText = leftText.substr(STEP);\n        // 字符串整体没有超出\n        if (!leftText) {\n            return r.join('');\n        }\n    }\n    // 最下的最后一个 STEP，使用 1 递增（用二分效果更高）\n    // eslint-disable-next-line no-constant-condition\n    while (true) {\n        // 更新字符串\n        currentText = leftText.substr(0, 1);\n        // 计算宽度\n        currentWidth = measureTextWidth(currentText, font);\n        // 超出剩余宽度，则停止\n        if (currentWidth + PLACEHOLDER_WIDTH > leftWidth) {\n            break;\n        }\n        r.push(currentText);\n        // 没有超出，则计算剩余宽度\n        leftWidth -= currentWidth;\n        leftText = leftText.substr(1);\n        if (!leftText) {\n            return r.join('');\n        }\n    }\n    return \"\" + r.join('') + str;\n});\n//# sourceMappingURL=get-ellipsis-text.js.map","import { __assign } from \"tslib\";\nimport { get } from '@antv/util';\nimport { ellipsisLabel } from './label';\nimport { applyRotate, applyTranslate } from './matrix';\nimport { formatPadding } from './util';\nexport function renderTag(container, tagCfg) {\n    var x = tagCfg.x, y = tagCfg.y, content = tagCfg.content, style = tagCfg.style, id = tagCfg.id, name = tagCfg.name, rotate = tagCfg.rotate, maxLength = tagCfg.maxLength, autoEllipsis = tagCfg.autoEllipsis, isVertical = tagCfg.isVertical, ellipsisPosition = tagCfg.ellipsisPosition, background = tagCfg.background;\n    var tagGroup = container.addGroup({\n        id: id + \"-group\",\n        name: name + \"-group\",\n        attrs: {\n            x: x,\n            y: y,\n        }\n    });\n    // Text shape\n    var text = tagGroup.addShape({\n        type: 'text',\n        id: id,\n        name: name,\n        attrs: __assign({ x: 0, y: 0, text: content }, style),\n    });\n    // maxLength 应包含 background 中的 padding 值\n    var padding = formatPadding(get(background, 'padding', 0));\n    if (maxLength && autoEllipsis) {\n        var maxTextLength = maxLength - (padding[1] + padding[3]);\n        // 超出自动省略\n        ellipsisLabel(!isVertical, text, maxTextLength, ellipsisPosition);\n    }\n    if (background) {\n        // 渲染文本背景\n        var backgroundStyle = get(background, 'style', {});\n        var _a = text.getCanvasBBox(), minX = _a.minX, minY = _a.minY, width = _a.width, height = _a.height;\n        var tagBg = tagGroup.addShape('rect', {\n            id: id + \"-bg\",\n            name: id + \"-bg\",\n            attrs: __assign({ x: minX - padding[3], y: minY - padding[0], width: width + padding[1] + padding[3], height: height + padding[0] + padding[2] }, backgroundStyle),\n        });\n        tagBg.toBack();\n    }\n    applyTranslate(tagGroup, x, y);\n    applyRotate(tagGroup, rotate, x, y);\n}\n//# sourceMappingURL=graphic.js.map","export default {\n    fontFamily: \"\\n  BlinkMacSystemFont, \\\"Segoe UI\\\", Roboto,\\\"Helvetica Neue\\\",\\n  Helvetica, \\\"PingFang SC\\\", \\\"Hiragino Sans GB\\\", \\\"Microsoft YaHei\\\",\\n  SimSun, \\\"sans-serif\\\"\",\n    textColor: '#2C3542',\n    activeTextColor: '#333333',\n    uncheckedColor: '#D8D8D8',\n    lineColor: '#416180',\n    regionColor: '#CCD7EB',\n    verticalAxisRotate: -Math.PI / 4,\n    horizontalAxisRotate: Math.PI / 4,\n    // descriptionIcon theme\n    descriptionIconStroke: '#fff',\n    descriptionIconFill: 'rgba(58, 73, 101, .25)',\n};\n//# sourceMappingURL=theme.js.map","import { __assign, __extends } from \"tslib\";\nimport { isNumber, isString } from '@antv/util';\nimport GroupComponent from '../abstract/group-component';\nimport { renderTag } from '../util/graphic';\nimport Theme from '../util/theme';\nimport { getValueByPercent } from '../util/util';\nvar LineAnnotation = /** @class */ (function (_super) {\n    __extends(LineAnnotation, _super);\n    function LineAnnotation() {\n        return _super !== null && _super.apply(this, arguments) || this;\n    }\n    /**\n     * @protected\n     * 默认的配置项\n     * @returns {object} 默认的配置项\n     */\n    LineAnnotation.prototype.getDefaultCfg = function () {\n        var cfg = _super.prototype.getDefaultCfg.call(this);\n        return __assign(__assign({}, cfg), { name: 'annotation', type: 'line', locationType: 'region', start: null, end: null, style: {}, text: null, defaultCfg: {\n                style: {\n                    fill: Theme.textColor,\n                    fontSize: 12,\n                    textAlign: 'center',\n                    textBaseline: 'bottom',\n                    fontFamily: Theme.fontFamily,\n                },\n                text: {\n                    position: 'center',\n                    autoRotate: true,\n                    content: null,\n                    offsetX: 0,\n                    offsetY: 0,\n                    style: {\n                        stroke: Theme.lineColor,\n                        lineWidth: 1,\n                    },\n                },\n            } });\n    };\n    LineAnnotation.prototype.renderInner = function (group) {\n        this.renderLine(group);\n        if (this.get('text')) {\n            this.renderLabel(group);\n        }\n    };\n    // 绘制线\n    LineAnnotation.prototype.renderLine = function (group) {\n        var start = this.get('start');\n        var end = this.get('end');\n        var style = this.get('style');\n        this.addShape(group, {\n            type: 'line',\n            id: this.getElementId('line'),\n            name: 'annotation-line',\n            attrs: __assign({ x1: start.x, y1: start.y, x2: end.x, y2: end.y }, style),\n        });\n    };\n    // 获取 label 的位置\n    LineAnnotation.prototype.getLabelPoint = function (start, end, position) {\n        var percent;\n        if (position === 'start') {\n            percent = 0;\n        }\n        else if (position === 'center') {\n            percent = 0.5;\n        }\n        else if (isString(position) && position.indexOf('%') !== -1) {\n            percent = parseInt(position, 10) / 100;\n        }\n        else if (isNumber(position)) {\n            percent = position;\n        }\n        else {\n            percent = 1;\n        }\n        if (percent > 1 || percent < 0) {\n            percent = 1;\n        }\n        return {\n            x: getValueByPercent(start.x, end.x, percent),\n            y: getValueByPercent(start.y, end.y, percent),\n        };\n    };\n    // 绘制 label\n    LineAnnotation.prototype.renderLabel = function (group) {\n        var text = this.get('text');\n        var start = this.get('start');\n        var end = this.get('end');\n        var position = text.position, content = text.content, style = text.style, offsetX = text.offsetX, offsetY = text.offsetY, autoRotate = text.autoRotate, maxLength = text.maxLength, autoEllipsis = text.autoEllipsis, ellipsisPosition = text.ellipsisPosition, background = text.background, _a = text.isVertical, isVertical = _a === void 0 ? false : _a;\n        var point = this.getLabelPoint(start, end, position);\n        var x = point.x + offsetX;\n        var y = point.y + offsetY;\n        var cfg = {\n            id: this.getElementId('line-text'),\n            name: 'annotation-line-text',\n            x: x,\n            y: y,\n            content: content,\n            style: style,\n            maxLength: maxLength,\n            autoEllipsis: autoEllipsis,\n            ellipsisPosition: ellipsisPosition,\n            background: background,\n            isVertical: isVertical,\n        };\n        // 如果自动旋转\n        if (autoRotate) {\n            var vector = [end.x - start.x, end.y - start.y];\n            cfg.rotate = Math.atan2(vector[1], vector[0]);\n        }\n        renderTag(group, cfg);\n    };\n    return LineAnnotation;\n}(GroupComponent));\nexport default LineAnnotation;\n//# sourceMappingURL=line.js.map","import { __assign, __extends } from \"tslib\";\nimport GroupComponent from '../abstract/group-component';\nimport { renderTag } from '../util/graphic';\nimport { applyRotate, applyTranslate } from '../util/matrix';\nimport Theme from '../util/theme';\nvar TextAnnotation = /** @class */ (function (_super) {\n    __extends(TextAnnotation, _super);\n    function TextAnnotation() {\n        return _super !== null && _super.apply(this, arguments) || this;\n    }\n    /**\n     * @protected\n     * 默认的配置项\n     * @returns {object} 默认的配置项\n     */\n    TextAnnotation.prototype.getDefaultCfg = function () {\n        var cfg = _super.prototype.getDefaultCfg.call(this);\n        return __assign(__assign({}, cfg), { name: 'annotation', type: 'text', locationType: 'point', x: 0, y: 0, content: '', rotate: null, style: {}, background: null, maxLength: null, autoEllipsis: true, isVertical: false, ellipsisPosition: 'tail', defaultCfg: {\n                style: {\n                    fill: Theme.textColor,\n                    fontSize: 12,\n                    textAlign: 'center',\n                    textBaseline: 'middle',\n                    fontFamily: Theme.fontFamily,\n                },\n            } });\n    };\n    // 复写 setLocation 方法，不需要重新创建 text\n    TextAnnotation.prototype.setLocation = function (location) {\n        this.set('x', location.x);\n        this.set('y', location.y);\n        this.resetLocation();\n    };\n    TextAnnotation.prototype.renderInner = function (group) {\n        var _a = this.getLocation(), x = _a.x, y = _a.y;\n        var content = this.get('content');\n        var style = this.get('style');\n        var id = this.getElementId('text');\n        var name = this.get('name') + \"-text\";\n        var maxLength = this.get('maxLength');\n        var autoEllipsis = this.get('autoEllipsis');\n        var isVertical = this.get('isVertical');\n        var ellipsisPosition = this.get('ellipsisPosition');\n        var background = this.get('background');\n        var rotate = this.get('rotate');\n        var cfg = {\n            id: id,\n            name: name,\n            x: x,\n            y: y,\n            content: content,\n            style: style,\n            maxLength: maxLength,\n            autoEllipsis: autoEllipsis,\n            isVertical: isVertical,\n            ellipsisPosition: ellipsisPosition,\n            background: background,\n            rotate: rotate,\n        };\n        renderTag(group, cfg);\n    };\n    TextAnnotation.prototype.resetLocation = function () {\n        var textGroup = this.getElementByLocalId('text-group');\n        if (textGroup) {\n            var _a = this.getLocation(), x = _a.x, y = _a.y;\n            var rotate = this.get('rotate');\n            applyTranslate(textGroup, x, y);\n            applyRotate(textGroup, rotate, x, y);\n        }\n    };\n    return TextAnnotation;\n}(GroupComponent));\nexport default TextAnnotation;\n//# sourceMappingURL=text.js.map","import { __assign, __extends } from \"tslib\";\nimport GroupComponent from '../abstract/group-component';\nimport { getCirclePoint } from '../util/util';\nvar ArcAnnotation = /** @class */ (function (_super) {\n    __extends(ArcAnnotation, _super);\n    function ArcAnnotation() {\n        return _super !== null && _super.apply(this, arguments) || this;\n    }\n    /**\n     * @protected\n     * 默认的配置项\n     * @returns {object} 默认的配置项\n     */\n    ArcAnnotation.prototype.getDefaultCfg = function () {\n        var cfg = _super.prototype.getDefaultCfg.call(this);\n        return __assign(__assign({}, cfg), { name: 'annotation', type: 'arc', locationType: 'circle', center: null, radius: 100, startAngle: -Math.PI / 2, endAngle: (Math.PI * 3) / 2, style: {\n                stroke: '#999',\n                lineWidth: 1,\n            } });\n    };\n    ArcAnnotation.prototype.renderInner = function (group) {\n        this.renderArc(group);\n    };\n    ArcAnnotation.prototype.getArcPath = function () {\n        var _a = this.getLocation(), center = _a.center, radius = _a.radius, startAngle = _a.startAngle, endAngle = _a.endAngle;\n        var startPoint = getCirclePoint(center, radius, startAngle);\n        var endPoint = getCirclePoint(center, radius, endAngle);\n        var largeFlag = endAngle - startAngle > Math.PI ? 1 : 0;\n        var path = [['M', startPoint.x, startPoint.y]];\n        if (endAngle - startAngle === Math.PI * 2) {\n            // 整个圆是分割成两个圆\n            var middlePoint = getCirclePoint(center, radius, startAngle + Math.PI);\n            path.push(['A', radius, radius, 0, largeFlag, 1, middlePoint.x, middlePoint.y]);\n            path.push(['A', radius, radius, 0, largeFlag, 1, endPoint.x, endPoint.y]);\n        }\n        else {\n            path.push(['A', radius, radius, 0, largeFlag, 1, endPoint.x, endPoint.y]);\n        }\n        return path;\n    };\n    // 绘制 arc\n    ArcAnnotation.prototype.renderArc = function (group) {\n        // 也可以 通过 get('center') 类似的方式逐个获取\n        var path = this.getArcPath();\n        var style = this.get('style');\n        this.addShape(group, {\n            type: 'path',\n            id: this.getElementId('arc'),\n            name: 'annotation-arc',\n            attrs: __assign({ path: path }, style),\n        });\n    };\n    return ArcAnnotation;\n}(GroupComponent));\nexport default ArcAnnotation;\n//# sourceMappingURL=arc.js.map","import { __assign, __extends } from \"tslib\";\nimport GroupComponent from '../abstract/group-component';\nimport Theme from '../util/theme';\nimport { regionToBBox } from '../util/util';\nvar RegionAnnotation = /** @class */ (function (_super) {\n    __extends(RegionAnnotation, _super);\n    function RegionAnnotation() {\n        return _super !== null && _super.apply(this, arguments) || this;\n    }\n    /**\n     * @protected\n     * 默认的配置项\n     * @returns {object} 默认的配置项\n     */\n    RegionAnnotation.prototype.getDefaultCfg = function () {\n        var cfg = _super.prototype.getDefaultCfg.call(this);\n        return __assign(__assign({}, cfg), { name: 'annotation', type: 'region', locationType: 'region', start: null, end: null, style: {}, defaultCfg: {\n                style: {\n                    lineWidth: 0,\n                    fill: Theme.regionColor,\n                    opacity: 0.4,\n                },\n            } });\n    };\n    RegionAnnotation.prototype.renderInner = function (group) {\n        this.renderRegion(group);\n    };\n    RegionAnnotation.prototype.renderRegion = function (group) {\n        var start = this.get('start');\n        var end = this.get('end');\n        var style = this.get('style');\n        var bbox = regionToBBox({ start: start, end: end });\n        this.addShape(group, {\n            type: 'rect',\n            id: this.getElementId('region'),\n            name: 'annotation-region',\n            attrs: __assign({ x: bbox.x, y: bbox.y, width: bbox.width, height: bbox.height }, style),\n        });\n    };\n    return RegionAnnotation;\n}(GroupComponent));\nexport default RegionAnnotation;\n//# sourceMappingURL=region.js.map","import { __assign, __extends } from \"tslib\";\nimport GroupComponent from '../abstract/group-component';\nimport { regionToBBox } from '../util/util';\nvar ImageAnnotation = /** @class */ (function (_super) {\n    __extends(ImageAnnotation, _super);\n    function ImageAnnotation() {\n        return _super !== null && _super.apply(this, arguments) || this;\n    }\n    /**\n     * @protected\n     * 默认的配置项\n     * @returns {object} 默认的配置项\n     */\n    ImageAnnotation.prototype.getDefaultCfg = function () {\n        var cfg = _super.prototype.getDefaultCfg.call(this);\n        return __assign(__assign({}, cfg), { name: 'annotation', type: 'image', locationType: 'region', start: null, end: null, src: null, style: {} });\n    };\n    ImageAnnotation.prototype.renderInner = function (group) {\n        this.renderImage(group);\n    };\n    ImageAnnotation.prototype.getImageAttrs = function () {\n        var start = this.get('start');\n        var end = this.get('end');\n        var style = this.get('style');\n        var bbox = regionToBBox({ start: start, end: end });\n        var src = this.get('src');\n        return __assign({ x: bbox.x, y: bbox.y, img: src, width: bbox.width, height: bbox.height }, style);\n    };\n    // 绘制图片\n    ImageAnnotation.prototype.renderImage = function (group) {\n        this.addShape(group, {\n            type: 'image',\n            id: this.getElementId('image'),\n            name: 'annotation-image',\n            attrs: this.getImageAttrs(),\n        });\n    };\n    return ImageAnnotation;\n}(GroupComponent));\nexport default ImageAnnotation;\n//# sourceMappingURL=image.js.map","import { __assign, __extends, __rest } from \"tslib\";\nimport { get } from '@antv/util';\nimport GroupComponent from '../abstract/group-component';\nimport { renderTag } from '../util/graphic';\nimport { applyTranslate } from '../util/matrix';\nimport Theme from '../util/theme';\nvar DataMarkerAnnotation = /** @class */ (function (_super) {\n    __extends(DataMarkerAnnotation, _super);\n    function DataMarkerAnnotation() {\n        return _super !== null && _super.apply(this, arguments) || this;\n    }\n    /**\n     * 默认的配置项\n     * @returns {object} 默认的配置项\n     */\n    DataMarkerAnnotation.prototype.getDefaultCfg = function () {\n        var cfg = _super.prototype.getDefaultCfg.call(this);\n        return __assign(__assign({}, cfg), { name: 'annotation', type: 'dataMarker', locationType: 'point', x: 0, y: 0, point: {}, line: {}, text: {}, direction: 'upward', autoAdjust: true, coordinateBBox: null, defaultCfg: {\n                point: {\n                    display: true,\n                    style: {\n                        r: 3,\n                        fill: '#FFFFFF',\n                        stroke: '#1890FF',\n                        lineWidth: 2,\n                    },\n                },\n                line: {\n                    display: true,\n                    length: 20,\n                    style: {\n                        stroke: Theme.lineColor,\n                        lineWidth: 1,\n                    },\n                },\n                text: {\n                    content: '',\n                    display: true,\n                    style: {\n                        fill: Theme.textColor,\n                        opacity: 0.65,\n                        fontSize: 12,\n                        textAlign: 'start',\n                        fontFamily: Theme.fontFamily,\n                    },\n                },\n            } });\n    };\n    DataMarkerAnnotation.prototype.renderInner = function (group) {\n        if (get(this.get('line'), 'display')) {\n            this.renderLine(group);\n        }\n        if (get(this.get('text'), 'display')) {\n            this.renderText(group);\n        }\n        if (get(this.get('point'), 'display')) {\n            this.renderPoint(group);\n        }\n        if (this.get('autoAdjust')) {\n            this.autoAdjust(group);\n        }\n    };\n    DataMarkerAnnotation.prototype.applyOffset = function () {\n        this.moveElementTo(this.get('group'), {\n            x: this.get('x') + this.get('offsetX'),\n            y: this.get('y') + this.get('offsetY'),\n        });\n    };\n    DataMarkerAnnotation.prototype.renderPoint = function (group) {\n        var point = this.getShapeAttrs().point;\n        this.addShape(group, {\n            type: 'circle',\n            id: this.getElementId('point'),\n            name: 'annotation-point',\n            attrs: point,\n        });\n    };\n    DataMarkerAnnotation.prototype.renderLine = function (group) {\n        var line = this.getShapeAttrs().line;\n        this.addShape(group, {\n            type: 'path',\n            id: this.getElementId('line'),\n            name: 'annotation-line',\n            attrs: line,\n        });\n    };\n    DataMarkerAnnotation.prototype.renderText = function (group) {\n        var textAttrs = this.getShapeAttrs().text;\n        var x = textAttrs.x, y = textAttrs.y, text = textAttrs.text, style = __rest(textAttrs, [\"x\", \"y\", \"text\"]);\n        var _a = this.get('text'), background = _a.background, maxLength = _a.maxLength, autoEllipsis = _a.autoEllipsis, isVertival = _a.isVertival, ellipsisPosition = _a.ellipsisPosition;\n        var tagCfg = {\n            x: x,\n            y: y,\n            id: this.getElementId('text'),\n            name: 'annotation-text',\n            content: text,\n            style: style,\n            background: background,\n            maxLength: maxLength,\n            autoEllipsis: autoEllipsis,\n            isVertival: isVertival,\n            ellipsisPosition: ellipsisPosition,\n        };\n        renderTag(group, tagCfg);\n    };\n    DataMarkerAnnotation.prototype.autoAdjust = function (group) {\n        var direction = this.get('direction');\n        var x = this.get('x');\n        var y = this.get('y');\n        var lineLength = get(this.get('line'), 'length', 0);\n        var coordinateBBox = this.get('coordinateBBox');\n        var _a = group.getBBox(), minX = _a.minX, maxX = _a.maxX, minY = _a.minY, maxY = _a.maxY;\n        var textGroup = group.findById(this.getElementId('text-group'));\n        var textShape = group.findById(this.getElementId('text'));\n        var lineShape = group.findById(this.getElementId('line'));\n        if (!coordinateBBox) {\n            return;\n        }\n        if (textGroup) {\n            var translateX = textGroup.attr('x'), translateY = textGroup.attr('y');\n            var _b = textShape.getCanvasBBox(), width = _b.width, height = _b.height;\n            var xFactor = 0, yFactor = 0;\n            if (x + minX <= coordinateBBox.minX) {\n                // 左侧超出\n                if (direction === 'leftward') {\n                    xFactor = 1;\n                }\n                else {\n                    var overflow = coordinateBBox.minX - (x + minX);\n                    translateX = textGroup.attr('x') + overflow;\n                }\n            }\n            else if (x + maxX >= coordinateBBox.maxX) {\n                // 右侧超出\n                if (direction === 'rightward') {\n                    xFactor = -1;\n                }\n                else {\n                    var overflow = x + maxX - coordinateBBox.maxX;\n                    translateX = textGroup.attr('x') - overflow;\n                }\n            }\n            if (!!xFactor) {\n                if (lineShape) {\n                    lineShape.attr('path', [\n                        ['M', 0, 0],\n                        ['L', lineLength * xFactor, 0],\n                    ]);\n                }\n                translateX = (lineLength + 2 + width) * xFactor;\n            }\n            if (y + minY <= coordinateBBox.minY) {\n                // 上方超出\n                if (direction === 'upward') {\n                    yFactor = 1;\n                }\n                else {\n                    var overflow = coordinateBBox.minY - (y + minY);\n                    translateY = textGroup.attr('y') + overflow;\n                }\n            }\n            else if (y + maxY >= coordinateBBox.maxY) {\n                // 下方超出\n                if (direction === 'downward') {\n                    yFactor = -1;\n                }\n                else {\n                    var overflow = y + maxY - coordinateBBox.maxY;\n                    translateY = textGroup.attr('y') - overflow;\n                }\n            }\n            if (!!yFactor) {\n                if (lineShape) {\n                    lineShape.attr('path', [\n                        ['M', 0, 0],\n                        ['L', 0, lineLength * yFactor],\n                    ]);\n                }\n                translateY = (lineLength + 2 + height) * yFactor;\n            }\n            if (translateX !== textGroup.attr('x') || translateY !== textGroup.attr('y'))\n                applyTranslate(textGroup, translateX, translateY);\n        }\n    };\n    DataMarkerAnnotation.prototype.getShapeAttrs = function () {\n        var lineDisplay = get(this.get('line'), 'display');\n        var pointStyle = get(this.get('point'), 'style', {});\n        var lineStyle = get(this.get('line'), 'style', {});\n        var textStyle = get(this.get('text'), 'style', {});\n        var direction = this.get('direction');\n        var lineLength = lineDisplay ? get(this.get('line'), 'length', 0) : 0;\n        var xFactor = 0, yFactor = 0;\n        var textBaseline = 'top', textAlign = 'start';\n        switch (direction) {\n            case 'upward':\n                yFactor = -1;\n                textBaseline = 'bottom';\n                break;\n            case 'downward':\n                yFactor = 1;\n                textBaseline = 'top';\n                break;\n            case 'leftward':\n                xFactor = -1;\n                textAlign = 'end';\n                break;\n            case 'rightward':\n                xFactor = 1;\n                textAlign = 'start';\n                break;\n        }\n        return {\n            point: __assign({ x: 0, y: 0 }, pointStyle),\n            line: __assign({ path: [\n                    ['M', 0, 0],\n                    ['L', lineLength * xFactor, lineLength * yFactor],\n                ] }, lineStyle),\n            text: __assign({ x: (lineLength + 2) * xFactor, y: (lineLength + 2) * yFactor, text: get(this.get('text'), 'content', ''), textBaseline: textBaseline,\n                textAlign: textAlign }, textStyle),\n        };\n    };\n    return DataMarkerAnnotation;\n}(GroupComponent));\nexport default DataMarkerAnnotation;\n//# sourceMappingURL=data-marker.js.map","import { __assign, __extends } from \"tslib\";\nimport { get } from '@antv/util';\nimport GroupComponent from '../abstract/group-component';\nimport Theme from '../util/theme';\nimport { pointsToBBox } from '../util/util';\nimport { renderTag } from '../util/graphic';\nvar DataRegionAnnotation = /** @class */ (function (_super) {\n    __extends(DataRegionAnnotation, _super);\n    function DataRegionAnnotation() {\n        return _super !== null && _super.apply(this, arguments) || this;\n    }\n    /**\n     * 默认的配置项\n     * @returns {object} 默认的配置项\n     */\n    DataRegionAnnotation.prototype.getDefaultCfg = function () {\n        var cfg = _super.prototype.getDefaultCfg.call(this);\n        return __assign(__assign({}, cfg), { name: 'annotation', type: 'dataRegion', locationType: 'points', points: [], lineLength: 0, region: {}, text: {}, defaultCfg: {\n                region: {\n                    style: {\n                        lineWidth: 0,\n                        fill: Theme.regionColor,\n                        opacity: 0.4,\n                    },\n                },\n                text: {\n                    content: '',\n                    style: {\n                        textAlign: 'center',\n                        textBaseline: 'bottom',\n                        fontSize: 12,\n                        fill: Theme.textColor,\n                        fontFamily: Theme.fontFamily,\n                    },\n                },\n            } });\n    };\n    DataRegionAnnotation.prototype.renderInner = function (group) {\n        var regionStyle = get(this.get('region'), 'style', {});\n        var textStyle = get(this.get('text'), 'style', {});\n        var lineLength = this.get('lineLength') || 0;\n        var points = this.get('points');\n        if (!points.length) {\n            return;\n        }\n        var bbox = pointsToBBox(points);\n        // render region\n        var path = [];\n        path.push(['M', points[0].x, bbox.minY - lineLength]);\n        points.forEach(function (point) {\n            path.push(['L', point.x, point.y]);\n        });\n        path.push(['L', points[points.length - 1].x, points[points.length - 1].y - lineLength]);\n        this.addShape(group, {\n            type: 'path',\n            id: this.getElementId('region'),\n            name: 'annotation-region',\n            attrs: __assign({ path: path }, regionStyle),\n        });\n        // render text\n        var textCfg = __assign({ id: this.getElementId('text'), name: 'annotation-text', x: (bbox.minX + bbox.maxX) / 2, y: bbox.minY - lineLength }, this.get('text'));\n        renderTag(group, textCfg);\n    };\n    return DataRegionAnnotation;\n}(GroupComponent));\nexport default DataRegionAnnotation;\n//# sourceMappingURL=data-region.js.map","import { __assign, __extends } from \"tslib\";\nimport { clone, each } from '@antv/util';\nimport GroupComponent from '../abstract/group-component';\nimport { regionToBBox } from '../util/util';\nvar RegionFilterAnnotation = /** @class */ (function (_super) {\n    __extends(RegionFilterAnnotation, _super);\n    function RegionFilterAnnotation() {\n        return _super !== null && _super.apply(this, arguments) || this;\n    }\n    /**\n     * 默认的配置项\n     * @returns {object} 默认的配置项\n     */\n    RegionFilterAnnotation.prototype.getDefaultCfg = function () {\n        var cfg = _super.prototype.getDefaultCfg.call(this);\n        return __assign(__assign({}, cfg), { name: 'annotation', type: 'regionFilter', locationType: 'region', start: null, end: null, color: null, shape: [] });\n    };\n    RegionFilterAnnotation.prototype.renderInner = function (group) {\n        var _this = this;\n        var start = this.get('start');\n        var end = this.get('end');\n        // 1. add region layer\n        var layer = this.addGroup(group, {\n            id: this.getElementId('region-filter'),\n            capture: false,\n        });\n        // 2. clone shape & color it\n        each(this.get('shapes'), function (shape, shapeIdx) {\n            var type = shape.get('type');\n            var attrs = clone(shape.attr());\n            _this.adjustShapeAttrs(attrs);\n            _this.addShape(layer, {\n                id: _this.getElementId(\"shape-\" + type + \"-\" + shapeIdx),\n                capture: false,\n                type: type,\n                attrs: attrs,\n            });\n        });\n        // 3. clip\n        var clipBBox = regionToBBox({ start: start, end: end });\n        layer.setClip({\n            type: 'rect',\n            attrs: {\n                x: clipBBox.minX,\n                y: clipBBox.minY,\n                width: clipBBox.width,\n                height: clipBBox.height,\n            },\n        });\n    };\n    RegionFilterAnnotation.prototype.adjustShapeAttrs = function (attr) {\n        var color = this.get('color');\n        if (attr.fill) {\n            attr.fill = attr.fillStyle = color;\n        }\n        attr.stroke = attr.strokeStyle = color;\n    };\n    return RegionFilterAnnotation;\n}(GroupComponent));\nexport default RegionFilterAnnotation;\n//# sourceMappingURL=region-filter.js.map","import { __assign, __extends } from \"tslib\";\nimport { isFunction, noop } from '@antv/util';\nimport GroupComponent from '../abstract/group-component';\nvar ShapeAnnotation = /** @class */ (function (_super) {\n    __extends(ShapeAnnotation, _super);\n    function ShapeAnnotation() {\n        return _super !== null && _super.apply(this, arguments) || this;\n    }\n    ShapeAnnotation.prototype.getDefaultCfg = function () {\n        var cfg = _super.prototype.getDefaultCfg.call(this);\n        return __assign(__assign({}, cfg), { name: 'annotation', type: 'shape', draw: noop });\n    };\n    ShapeAnnotation.prototype.renderInner = function (group) {\n        var render = this.get('render');\n        if (isFunction(render)) {\n            render(group);\n        }\n    };\n    return ShapeAnnotation;\n}(GroupComponent));\nexport default ShapeAnnotation;\n//# sourceMappingURL=shape.js.map","import { __assign, __extends } from \"tslib\";\nimport { createDom, modifyCSS } from '@antv/dom-util';\nimport { isNil, isString, deepMix, each, hasKey } from '@antv/util';\nimport { clearDom, createBBox, hasClass } from '../util/util';\nimport Component from './component';\nvar HtmlComponent = /** @class */ (function (_super) {\n    __extends(HtmlComponent, _super);\n    function HtmlComponent() {\n        return _super !== null && _super.apply(this, arguments) || this;\n    }\n    HtmlComponent.prototype.getDefaultCfg = function () {\n        var cfg = _super.prototype.getDefaultCfg.call(this);\n        return __assign(__assign({}, cfg), { container: null, containerTpl: '<div></div>', updateAutoRender: true, containerClassName: '', parent: null });\n    };\n    HtmlComponent.prototype.getContainer = function () {\n        return this.get('container');\n    };\n    /**\n     * 显示组件\n     */\n    HtmlComponent.prototype.show = function () {\n        var container = this.get('container');\n        container.style.display = '';\n        this.set('visible', true);\n    };\n    /**\n     * 隐藏组件\n     */\n    HtmlComponent.prototype.hide = function () {\n        var container = this.get('container');\n        container.style.display = 'none';\n        this.set('visible', false);\n    };\n    /**\n     * 是否允许捕捉事件\n     * @param capture 事件捕捉\n     */\n    HtmlComponent.prototype.setCapture = function (capture) {\n        var container = this.getContainer();\n        var value = capture ? 'auto' : 'none';\n        container.style.pointerEvents = value;\n        this.set('capture', capture);\n    };\n    HtmlComponent.prototype.getBBox = function () {\n        var container = this.getContainer();\n        var x = parseFloat(container.style.left) || 0;\n        var y = parseFloat(container.style.top) || 0;\n        return createBBox(x, y, container.clientWidth, container.clientHeight);\n    };\n    HtmlComponent.prototype.clear = function () {\n        var container = this.get('container');\n        clearDom(container);\n    };\n    HtmlComponent.prototype.destroy = function () {\n        this.removeEvent();\n        this.removeDom();\n        _super.prototype.destroy.call(this);\n    };\n    /**\n     * 复写 init，主要是初始化 DOM 和事件\n     */\n    HtmlComponent.prototype.init = function () {\n        _super.prototype.init.call(this);\n        this.initContainer();\n        this.initDom();\n        this.resetStyles(); // 初始化样式\n        this.applyStyles(); // 应用样式\n        this.initEvent();\n        this.initCapture();\n        this.initVisible();\n    };\n    HtmlComponent.prototype.initCapture = function () {\n        this.setCapture(this.get('capture'));\n    };\n    HtmlComponent.prototype.initVisible = function () {\n        if (!this.get('visible')) {\n            // 设置初始显示状态\n            this.hide();\n        }\n        else {\n            this.show();\n        }\n    };\n    HtmlComponent.prototype.initDom = function () {\n    };\n    HtmlComponent.prototype.initContainer = function () {\n        var container = this.get('container');\n        if (isNil(container)) {\n            // 未指定 container 则创建\n            container = this.createDom();\n            var parent_1 = this.get('parent');\n            if (isString(parent_1)) {\n                parent_1 = document.getElementById(parent_1);\n                this.set('parent', parent_1);\n            }\n            parent_1.appendChild(container);\n            if (this.get('containerId')) {\n                container.setAttribute('id', this.get('containerId'));\n            }\n            this.set('container', container);\n        }\n        else if (isString(container)) {\n            // 用户传入的 id, 作为 container\n            container = document.getElementById(container);\n            this.set('container', container);\n        } // else container 是 DOM\n        if (!this.get('parent')) {\n            this.set('parent', container.parentNode);\n        }\n    };\n    // 样式需要进行合并，不能单纯的替换，否则使用非常不方便\n    HtmlComponent.prototype.resetStyles = function () {\n        var style = this.get('domStyles');\n        var defaultStyles = this.get('defaultStyles');\n        if (!style) {\n            style = defaultStyles;\n        }\n        else {\n            style = deepMix({}, defaultStyles, style);\n        }\n        this.set('domStyles', style);\n    };\n    // 应用所有的样式\n    HtmlComponent.prototype.applyStyles = function () {\n        var domStyles = this.get('domStyles');\n        if (!domStyles) {\n            return;\n        }\n        var container = this.getContainer();\n        this.applyChildrenStyles(container, domStyles);\n        var containerClassName = this.get('containerClassName');\n        if (containerClassName && hasClass(container, containerClassName)) {\n            var containerCss = domStyles[containerClassName];\n            modifyCSS(container, containerCss);\n        }\n    };\n    HtmlComponent.prototype.applyChildrenStyles = function (element, styles) {\n        each(styles, function (style, name) {\n            var elements = element.getElementsByClassName(name);\n            each(elements, function (el) {\n                modifyCSS(el, style);\n            });\n        });\n    };\n    // 应用到单个 DOM\n    HtmlComponent.prototype.applyStyle = function (cssName, dom) {\n        var domStyles = this.get('domStyles');\n        modifyCSS(dom, domStyles[cssName]);\n    };\n    /**\n     * @protected\n     */\n    HtmlComponent.prototype.createDom = function () {\n        var containerTpl = this.get('containerTpl');\n        return createDom(containerTpl);\n    };\n    /**\n     * @protected\n     * 初始化事件\n     */\n    HtmlComponent.prototype.initEvent = function () { };\n    /**\n     * @protected\n     * 清理 DOM\n     */\n    HtmlComponent.prototype.removeDom = function () {\n        var container = this.get('container');\n        // 节点不一定有parentNode\n        container && container.parentNode && container.parentNode.removeChild(container);\n    };\n    /**\n     * @protected\n     * 清理事件\n     */\n    HtmlComponent.prototype.removeEvent = function () { };\n    HtmlComponent.prototype.updateInner = function (cfg) {\n        // 更新样式\n        if (hasKey(cfg, 'domStyles')) {\n            this.resetStyles();\n            this.applyStyles();\n        }\n        // 只要属性发生变化，都调整一些位置\n        this.resetPosition();\n    };\n    HtmlComponent.prototype.resetPosition = function () { };\n    ;\n    return HtmlComponent;\n}(Component));\nexport default HtmlComponent;\n//# sourceMappingURL=html-component.js.map","import { __assign, __extends } from \"tslib\";\nimport { createDom, getOuterHeight, getOuterWidth, modifyCSS } from '@antv/dom-util';\nimport { isElement, isFunction, isNumber, isString } from '@antv/util';\nimport HtmlComponent from '../abstract/html-component';\nimport { clearDom } from '../util/util';\nvar HtmlAnnotation = /** @class */ (function (_super) {\n    __extends(HtmlAnnotation, _super);\n    function HtmlAnnotation() {\n        return _super !== null && _super.apply(this, arguments) || this;\n    }\n    HtmlAnnotation.prototype.getDefaultCfg = function () {\n        var cfg = _super.prototype.getDefaultCfg.call(this);\n        return __assign(__assign({}, cfg), { name: 'annotation', type: 'html', locationType: 'point', x: 0, y: 0, containerTpl: \"<div class=\\\"g2-html-annotation\\\" style=\\\"position:absolute\\\"></div>\", alignX: 'left', alignY: 'top', html: '', zIndex: 7 });\n    };\n    HtmlAnnotation.prototype.render = function () {\n        var container = this.getContainer();\n        var html = this.get('html');\n        clearDom(container);\n        var rst = isFunction(html) ? html(container) : html;\n        if (isElement(rst)) {\n            container.appendChild(rst);\n        }\n        else if (isString(rst) || isNumber(rst)) {\n            var dom = createDom(\"\" + rst);\n            if (dom) {\n                container.appendChild(dom);\n            }\n        }\n        this.resetPosition();\n    };\n    HtmlAnnotation.prototype.resetPosition = function () {\n        var container = this.getContainer();\n        var _a = this.getLocation(), x = _a.x, y = _a.y;\n        var alignX = this.get('alignX');\n        var alignY = this.get('alignY');\n        var offsetX = this.get('offsetX');\n        var offsetY = this.get('offsetY');\n        var domWidth = getOuterWidth(container);\n        var domHeight = getOuterHeight(container);\n        var position = {\n            x: x,\n            y: y,\n        };\n        if (alignX === 'middle') {\n            position.x -= Math.round(domWidth / 2);\n        }\n        else if (alignX === 'right') {\n            position.x -= Math.round(domWidth);\n        }\n        if (alignY === 'middle') {\n            position.y -= Math.round(domHeight / 2);\n        }\n        else if (alignY === 'bottom') {\n            position.y -= Math.round(domHeight);\n        }\n        if (offsetX) {\n            position.x += offsetX;\n        }\n        if (offsetY) {\n            position.y += offsetY;\n        }\n        modifyCSS(container, {\n            position: 'absolute',\n            left: position.x + \"px\",\n            top: position.y + \"px\",\n            zIndex: this.get('zIndex'),\n        });\n    };\n    return HtmlAnnotation;\n}(HtmlComponent));\nexport default HtmlAnnotation;\n//# sourceMappingURL=html.js.map","import { each, mix } from '@antv/util';\n// 获取多个状态量的合并值\nexport function getStatesStyle(item, elementName, stateStyles) {\n    var styleName = elementName + \"Style\"; // activeStyle\n    var styles = null;\n    each(stateStyles, function (v, state) {\n        if (item[state] && v[styleName]) {\n            if (!styles) {\n                styles = {};\n            }\n            mix(styles, v[styleName]); // 合并样式\n        }\n    });\n    return styles;\n}\n//# sourceMappingURL=state.js.map","import { __assign, __extends } from \"tslib\";\nimport { ext } from '@antv/matrix-util';\nimport { each, filter, get, isFunction, isNil, isNumberEqual, mix, size } from '@antv/util';\nimport GroupComponent from '../abstract/group-component';\nimport { getMatrixByAngle } from '../util/matrix';\nimport { getStatesStyle } from '../util/state';\nimport Theme from '../util/theme';\nvar AxisBase = /** @class */ (function (_super) {\n    __extends(AxisBase, _super);\n    function AxisBase() {\n        return _super !== null && _super.apply(this, arguments) || this;\n    }\n    AxisBase.prototype.getDefaultCfg = function () {\n        var cfg = _super.prototype.getDefaultCfg.call(this);\n        return __assign(__assign({}, cfg), { name: 'axis', ticks: [], line: {}, tickLine: {}, subTickLine: null, title: null, \n            /**\n             * 文本标签的配置项\n             */\n            label: {}, \n            /**\n             * 垂直于坐标轴方向的因子，决定文本、title、tickLine 在坐标轴的哪一侧\n             */\n            verticalFactor: 1, \n            // 垂直方向限制的长度，对文本自适应有很大影响\n            verticalLimitLength: null, overlapOrder: ['autoRotate', 'autoEllipsis', 'autoHide'], tickStates: {}, optimize: {}, defaultCfg: {\n                line: {\n                    // @type {Attrs} 坐标轴线的图形属性,如果设置成null，则不显示轴线\n                    style: {\n                        lineWidth: 1,\n                        stroke: Theme.lineColor,\n                    },\n                },\n                tickLine: {\n                    // @type {Attrs} 标注坐标线的图形属性\n                    style: {\n                        lineWidth: 1,\n                        stroke: Theme.lineColor,\n                    },\n                    alignTick: true,\n                    length: 5,\n                    displayWithLabel: true,\n                },\n                subTickLine: {\n                    // @type {Attrs} 标注坐标线的图形属性\n                    style: {\n                        lineWidth: 1,\n                        stroke: Theme.lineColor,\n                    },\n                    count: 4,\n                    length: 2,\n                },\n                label: {\n                    autoRotate: true,\n                    autoHide: false,\n                    autoEllipsis: false,\n                    style: {\n                        fontSize: 12,\n                        fill: Theme.textColor,\n                        fontFamily: Theme.fontFamily,\n                        fontWeight: 'normal',\n                    },\n                    offset: 10,\n                    offsetX: 0,\n                    offsetY: 0,\n                },\n                title: {\n                    autoRotate: true,\n                    spacing: 5,\n                    position: 'center',\n                    style: {\n                        fontSize: 12,\n                        fill: Theme.textColor,\n                        textBaseline: 'middle',\n                        fontFamily: Theme.fontFamily,\n                        textAlign: 'center',\n                    },\n                    iconStyle: {\n                        fill: Theme.descriptionIconFill,\n                        stroke: Theme.descriptionIconStroke,\n                    },\n                    description: ''\n                },\n                tickStates: {\n                    active: {\n                        labelStyle: {\n                            fontWeight: 500,\n                        },\n                        tickLineStyle: {\n                            lineWidth: 2,\n                        },\n                    },\n                    inactive: {\n                        labelStyle: {\n                            fill: Theme.uncheckedColor,\n                        },\n                    },\n                },\n                // 针对大数据量进行优化配置\n                optimize: {\n                    enable: true,\n                    threshold: 400,\n                },\n            }, theme: {} });\n    };\n    /**\n     * 绘制组件\n     */\n    AxisBase.prototype.renderInner = function (group) {\n        if (this.get('line')) {\n            this.drawLine(group);\n        }\n        // drawTicks 包括 drawLabels 和 drawTickLines\n        this.drawTicks(group);\n        if (this.get('title')) {\n            this.drawTitle(group);\n        }\n    };\n    // 实现 IList 接口\n    AxisBase.prototype.isList = function () {\n        return true;\n    };\n    /**\n     * 获取图例项\n     * @return {ListItem[]} 列表项集合\n     */\n    AxisBase.prototype.getItems = function () {\n        return this.get('ticks');\n    };\n    /**\n     * 设置列表项\n     * @param {ListItem[]} items 列表项集合\n     */\n    AxisBase.prototype.setItems = function (items) {\n        this.update({\n            ticks: items,\n        });\n    };\n    /**\n     * 更新列表项\n     * @param {ListItem} item 列表项\n     * @param {object}   cfg  列表项\n     */\n    AxisBase.prototype.updateItem = function (item, cfg) {\n        mix(item, cfg);\n        this.clear(); // 由于单个图例项变化，会引起全局变化，所以全部更新\n        this.render();\n    };\n    /**\n     * 清空列表\n     */\n    AxisBase.prototype.clearItems = function () {\n        var itemGroup = this.getElementByLocalId('label-group');\n        itemGroup && itemGroup.clear();\n    };\n    /**\n     * 设置列表项的状态\n     * @param {ListItem} item  列表项\n     * @param {string}   state 状态名\n     * @param {boolean}  value 状态值, true, false\n     */\n    AxisBase.prototype.setItemState = function (item, state, value) {\n        item[state] = value;\n        this.updateTickStates(item); // 应用状态样式\n    };\n    /**\n     * 是否存在指定的状态\n     * @param {ListItem} item  列表项\n     * @param {boolean} state 状态名\n     */\n    AxisBase.prototype.hasState = function (item, state) {\n        return !!item[state];\n    };\n    AxisBase.prototype.getItemStates = function (item) {\n        var tickStates = this.get('tickStates');\n        var rst = [];\n        each(tickStates, function (v, k) {\n            if (item[k]) {\n                // item.selected\n                rst.push(k);\n            }\n        });\n        return rst;\n    };\n    /**\n     * 清楚所有列表项的状态\n     * @param {string} state 状态值\n     */\n    AxisBase.prototype.clearItemsState = function (state) {\n        var _this = this;\n        var items = this.getItemsByState(state);\n        each(items, function (item) {\n            _this.setItemState(item, state, false);\n        });\n    };\n    /**\n     * 根据状态获取图例项\n     * @param  {string}     state [description]\n     * @return {ListItem[]}       [description]\n     */\n    AxisBase.prototype.getItemsByState = function (state) {\n        var _this = this;\n        var items = this.getItems();\n        return filter(items, function (item) {\n            return _this.hasState(item, state);\n        });\n    };\n    AxisBase.prototype.getSidePoint = function (point, offset) {\n        var self = this;\n        var vector = self.getSideVector(offset, point);\n        return {\n            x: point.x + vector[0],\n            y: point.y + vector[1],\n        };\n    };\n    AxisBase.prototype.getTextAnchor = function (vector) {\n        var align;\n        if (isNumberEqual(vector[0], 0)) {\n            align = 'center';\n        }\n        else if (vector[0] > 0) {\n            align = 'start';\n        }\n        else if (vector[0] < 0) {\n            align = 'end';\n        }\n        return align;\n    };\n    AxisBase.prototype.getTextBaseline = function (vector) {\n        var base;\n        if (isNumberEqual(vector[1], 0)) {\n            base = 'middle';\n        }\n        else if (vector[1] > 0) {\n            base = 'top';\n        }\n        else if (vector[1] < 0) {\n            base = 'bottom';\n        }\n        return base;\n    };\n    AxisBase.prototype.processOverlap = function (labelGroup) { };\n    // 绘制坐标轴线\n    AxisBase.prototype.drawLine = function (group) {\n        var path = this.getLinePath();\n        var line = this.get('line'); // line 的判空在调用 drawLine 之前，不在这里判定\n        this.addShape(group, {\n            type: 'path',\n            id: this.getElementId('line'),\n            name: 'axis-line',\n            attrs: mix({\n                path: path,\n            }, line.style),\n        });\n    };\n    AxisBase.prototype.getTickLineItems = function (ticks) {\n        var _this = this;\n        var tickLineItems = [];\n        var tickLine = this.get('tickLine');\n        var alignTick = tickLine.alignTick;\n        var tickLineLength = tickLine.length;\n        var tickSegment = 1;\n        var tickCount = ticks.length;\n        if (tickCount >= 2) {\n            tickSegment = ticks[1].value - ticks[0].value;\n        }\n        each(ticks, function (tick) {\n            var point = tick.point;\n            if (!alignTick) {\n                // tickLine 不同 tick 对齐时需要调整 point\n                point = _this.getTickPoint(tick.value - tickSegment / 2);\n            }\n            var endPoint = _this.getSidePoint(point, tickLineLength);\n            tickLineItems.push({\n                startPoint: point,\n                tickValue: tick.value,\n                endPoint: endPoint,\n                tickId: tick.id,\n                id: \"tickline-\" + tick.id,\n            });\n        });\n        // 如果 tickLine 不居中对齐，则需要在最后面补充一个 tickLine\n        // if (!alignTick && tickCount > 0) {\n        //   const tick = ticks[tickCount - 1];\n        //   const point = this.getTickPoint(tick.value + tickSegment / 2);\n        // }\n        return tickLineItems;\n    };\n    AxisBase.prototype.getSubTickLineItems = function (tickLineItems) {\n        var subTickLineItems = [];\n        var subTickLine = this.get('subTickLine');\n        var subCount = subTickLine.count;\n        var tickLineCount = tickLineItems.length;\n        // 刻度线的数量大于 2 时，才绘制子刻度\n        if (tickLineCount >= 2) {\n            for (var i = 0; i < tickLineCount - 1; i++) {\n                var pre = tickLineItems[i];\n                var next = tickLineItems[i + 1];\n                for (var j = 0; j < subCount; j++) {\n                    var percent = (j + 1) / (subCount + 1);\n                    var tickValue = (1 - percent) * pre.tickValue + percent * next.tickValue;\n                    var point = this.getTickPoint(tickValue);\n                    var endPoint = this.getSidePoint(point, subTickLine.length);\n                    subTickLineItems.push({\n                        startPoint: point,\n                        endPoint: endPoint,\n                        tickValue: tickValue,\n                        id: \"sub-\" + pre.id + \"-\" + j,\n                    });\n                }\n            }\n        }\n        return subTickLineItems;\n    };\n    AxisBase.prototype.getTickLineAttrs = function (tickItem, type, index, tickItems) {\n        var style = this.get(type).style;\n        // 保持和 grid 相同的数据结构\n        var item = {\n            points: [tickItem.startPoint, tickItem.endPoint],\n        };\n        var defaultTickLineStyle = get(this.get('theme'), ['tickLine', 'style'], {});\n        style = isFunction(style) ? mix({}, defaultTickLineStyle, style(item, index, tickItems)) : style;\n        var startPoint = tickItem.startPoint, endPoint = tickItem.endPoint;\n        return __assign({ x1: startPoint.x, y1: startPoint.y, x2: endPoint.x, y2: endPoint.y }, style);\n    };\n    // 绘制坐标轴刻度线\n    AxisBase.prototype.drawTick = function (tickItem, tickLineGroup, type, index, tickItems) {\n        this.addShape(tickLineGroup, {\n            type: 'line',\n            id: this.getElementId(tickItem.id),\n            name: \"axis-\" + type,\n            attrs: this.getTickLineAttrs(tickItem, type, index, tickItems),\n        });\n    };\n    // 绘制坐标轴刻度线，包括子刻度线\n    AxisBase.prototype.drawTickLines = function (group) {\n        var _this = this;\n        var ticks = this.get('ticks');\n        var subTickLine = this.get('subTickLine');\n        var tickLineItems = this.getTickLineItems(ticks);\n        var tickLineGroup = this.addGroup(group, {\n            name: 'axis-tickline-group',\n            id: this.getElementId('tickline-group'),\n        });\n        var tickCfg = this.get('tickLine');\n        each(tickLineItems, function (item, index) {\n            if (tickCfg.displayWithLabel) {\n                // 如果跟随 label 显示，则检测是否存在对应的 label\n                var labelId = _this.getElementId(\"label-\" + item.tickId);\n                if (group.findById(labelId)) {\n                    _this.drawTick(item, tickLineGroup, 'tickLine', index, tickLineItems);\n                }\n            }\n            else {\n                _this.drawTick(item, tickLineGroup, 'tickLine', index, tickLineItems);\n            }\n        });\n        if (subTickLine) {\n            var subTickLineItems_1 = this.getSubTickLineItems(tickLineItems);\n            each(subTickLineItems_1, function (item, index) {\n                _this.drawTick(item, tickLineGroup, 'subTickLine', index, subTickLineItems_1);\n            });\n        }\n    };\n    // 预处理 ticks 确定位置和补充 id\n    AxisBase.prototype.processTicks = function () {\n        var _this = this;\n        var ticks = this.get('ticks');\n        each(ticks, function (tick) {\n            tick.point = _this.getTickPoint(tick.value);\n            // 补充 tick 的 id，为动画和更新做准备\n            if (isNil(tick.id)) {\n                // 默认使用 tick.name 作为id\n                tick.id = tick.name;\n            }\n        });\n    };\n    // 绘制 ticks 包括文本和 tickLine\n    AxisBase.prototype.drawTicks = function (group) {\n        var _this = this;\n        this.optimizeTicks();\n        this.processTicks();\n        if (this.get('label')) {\n            this.drawLabels(group);\n        }\n        if (this.get('tickLine')) {\n            this.drawTickLines(group);\n        }\n        var ticks = this.get('ticks');\n        each(ticks, function (tick) {\n            _this.applyTickStates(tick, group);\n        });\n    };\n    /**\n     * 根据 optimize 配置对 ticks 进行抽样，对抽样过后的 ticks 才进行真实的渲染\n     */\n    AxisBase.prototype.optimizeTicks = function () {\n        var optimize = this.get('optimize');\n        var ticks = this.get('ticks');\n        if (optimize && optimize.enable && optimize.threshold > 0) {\n            var len = size(ticks);\n            if (len > optimize.threshold) {\n                var page_1 = Math.ceil(len / optimize.threshold);\n                var optimizedTicks = ticks.filter(function (tick, idx) { return idx % page_1 === 0; });\n                this.set('ticks', optimizedTicks);\n                this.set('originalTicks', ticks);\n            }\n        }\n    };\n    // 获取 label 的配置项\n    AxisBase.prototype.getLabelAttrs = function (tick, index, ticks) {\n        var labelCfg = this.get('label');\n        var offset = labelCfg.offset, offsetX = labelCfg.offsetX, offsetY = labelCfg.offsetY, rotate = labelCfg.rotate, formatter = labelCfg.formatter;\n        var point = this.getSidePoint(tick.point, offset);\n        var vector = this.getSideVector(offset, point);\n        var text = formatter ? formatter(tick.name, tick, index) : tick.name;\n        var style = labelCfg.style;\n        style = isFunction(style) ? get(this.get('theme'), ['label', 'style'], {}) : style;\n        var attrs = mix({\n            x: point.x + offsetX,\n            y: point.y + offsetY,\n            text: text,\n            textAlign: this.getTextAnchor(vector),\n            textBaseline: this.getTextBaseline(vector),\n        }, style);\n        if (rotate) {\n            attrs.matrix = getMatrixByAngle(point, rotate);\n        }\n        return attrs;\n    };\n    // 绘制文本\n    AxisBase.prototype.drawLabels = function (group) {\n        var _this = this;\n        var ticks = this.get('ticks');\n        var labelGroup = this.addGroup(group, {\n            name: 'axis-label-group',\n            id: this.getElementId('label-group'),\n        });\n        each(ticks, function (tick, index) {\n            _this.addShape(labelGroup, {\n                type: 'text',\n                name: 'axis-label',\n                id: _this.getElementId(\"label-\" + tick.id),\n                attrs: _this.getLabelAttrs(tick, index, ticks),\n                delegateObject: {\n                    tick: tick,\n                    item: tick,\n                    index: index,\n                },\n            });\n        });\n        this.processOverlap(labelGroup);\n        // 处理完后再进行 style 回调处理\n        var labels = labelGroup.getChildren();\n        var defaultLabelStyle = get(this.get('theme'), ['label', 'style'], {});\n        var _a = this.get('label'), style = _a.style, formatter = _a.formatter;\n        if (isFunction(style)) {\n            var afterProcessTicks_1 = labels.map(function (label) { return get(label.get('delegateObject'), 'tick'); });\n            each(labels, function (label, index) {\n                var tick = label.get('delegateObject').tick;\n                var text = formatter ? formatter(tick.name, tick, index) : tick.name;\n                var newStyle = mix({}, defaultLabelStyle, style(text, index, afterProcessTicks_1));\n                label.attr(newStyle);\n            });\n        }\n    };\n    // 标题的属性\n    AxisBase.prototype.getTitleAttrs = function () {\n        var titleCfg = this.get('title');\n        var style = titleCfg.style, position = titleCfg.position, offset = titleCfg.offset, _a = titleCfg.spacing, spacing = _a === void 0 ? 0 : _a, autoRotate = titleCfg.autoRotate;\n        var titleHeight = style.fontSize;\n        var percent = 0.5;\n        if (position === 'start') {\n            percent = 0;\n        }\n        else if (position === 'end') {\n            percent = 1;\n        }\n        var point = this.getTickPoint(percent); // 标题对应的坐标轴上的点\n        // 如果没有指定 titleOffset 也没有渲染 label，这里需要自动计算 offset\n        var titlePoint = this.getSidePoint(point, offset || spacing + titleHeight / 2); // 标题的点\n        var attrs = mix({\n            x: titlePoint.x,\n            y: titlePoint.y,\n            text: titleCfg.text,\n        }, style);\n        var rotate = titleCfg.rotate; // rotate 是角度值\n        var angle = rotate;\n        if (isNil(rotate) && autoRotate) {\n            // 用户没有设定旋转角度，同时设置自动旋转\n            var vector = this.getAxisVector(point);\n            var v1 = [1, 0]; // 水平方向的向量\n            angle = ext.angleTo(vector, v1, true);\n        }\n        if (angle) {\n            var matrix = getMatrixByAngle(titlePoint, angle);\n            attrs.matrix = matrix;\n        }\n        return attrs;\n    };\n    // 绘制标题\n    AxisBase.prototype.drawTitle = function (group) {\n        var _a;\n        var titleAttrs = this.getTitleAttrs();\n        var titleShape = this.addShape(group, {\n            type: 'text',\n            id: this.getElementId('title'),\n            name: 'axis-title',\n            attrs: titleAttrs\n        });\n        // description字段存在时，显示icon\n        if ((_a = this.get('title')) === null || _a === void 0 ? void 0 : _a.description) {\n            this.drawDescriptionIcon(group, titleShape, titleAttrs.matrix);\n        }\n    };\n    AxisBase.prototype.drawDescriptionIcon = function (group, titleShape, matrix) {\n        var descriptionShape = this.addGroup(group, {\n            name: 'axis-description',\n            id: this.getElementById('description')\n        });\n        var _a = titleShape.getBBox(), maxX = _a.maxX, maxY = _a.maxY, height = _a.height;\n        var iconStyle = this.get('title').iconStyle;\n        var spacing = 4; // 设置icon与文本之间距离\n        var r = height / 2;\n        var lineWidth = r / 6;\n        var startX = maxX + spacing;\n        var startY = maxY - height / 2;\n        // 绘制 information icon 路径\n        // 外圆环path\n        var _b = [startX + r, startY - r], x0 = _b[0], y0 = _b[1];\n        var _c = [x0 + r, y0 + r], x1 = _c[0], y1 = _c[1];\n        var _d = [x0, y1 + r], x2 = _d[0], y2 = _d[1];\n        var _e = [startX, y0 + r], x3 = _e[0], y3 = _e[1];\n        // i path\n        var _f = [startX + r, startY - height / 4], x4 = _f[0], y4 = _f[1];\n        var _g = [x4, y4 + lineWidth], x5 = _g[0], y5 = _g[1];\n        var _h = [x5, y5 + lineWidth], x6 = _h[0], y6 = _h[1];\n        var _j = [x6, y6 + r * 3 / 4], x7 = _j[0], y7 = _j[1];\n        this.addShape(descriptionShape, {\n            type: 'path',\n            id: this.getElementId('title-description-icon'),\n            name: 'axis-title-description-icon',\n            attrs: __assign({ path: [\n                    ['M', x0, y0],\n                    ['A', r, r, 0, 0, 1, x1, y1],\n                    ['A', r, r, 0, 0, 1, x2, y2],\n                    ['A', r, r, 0, 0, 1, x3, y3],\n                    ['A', r, r, 0, 0, 1, x0, y0],\n                    ['M', x4, y4],\n                    ['L', x5, y5],\n                    ['M', x6, y6],\n                    ['L', x7, y7]\n                ], lineWidth: lineWidth,\n                matrix: matrix }, iconStyle),\n        });\n        // 点击热区，设置透明矩形\n        this.addShape(descriptionShape, {\n            type: 'rect',\n            id: this.getElementId('title-description-rect'),\n            name: 'axis-title-description-rect',\n            attrs: {\n                x: startX,\n                y: startY - height / 2,\n                width: height,\n                height: height,\n                stroke: '#000',\n                fill: '#000',\n                opacity: 0,\n                matrix: matrix,\n                cursor: 'pointer'\n            }\n        });\n    };\n    AxisBase.prototype.applyTickStates = function (tick, group) {\n        var states = this.getItemStates(tick);\n        if (states.length) {\n            var tickStates = this.get('tickStates');\n            // 分别更新 label 和 tickLine\n            var labelId = this.getElementId(\"label-\" + tick.id);\n            var labelShape = group.findById(labelId);\n            if (labelShape) {\n                var labelStateStyle = getStatesStyle(tick, 'label', tickStates);\n                labelStateStyle && labelShape.attr(labelStateStyle);\n            }\n            var tickLineId = this.getElementId(\"tickline-\" + tick.id);\n            var tickLineShape = group.findById(tickLineId);\n            if (tickLineShape) {\n                var tickLineStateStyle = getStatesStyle(tick, 'tickLine', tickStates);\n                tickLineStateStyle && tickLineShape.attr(tickLineStateStyle);\n            }\n        }\n    };\n    AxisBase.prototype.updateTickStates = function (tick) {\n        var states = this.getItemStates(tick);\n        var tickStates = this.get('tickStates');\n        var labelCfg = this.get('label');\n        var labelShape = this.getElementByLocalId(\"label-\" + tick.id);\n        var tickLineCfg = this.get('tickLine');\n        var tickLineShape = this.getElementByLocalId(\"tickline-\" + tick.id);\n        if (states.length) {\n            if (labelShape) {\n                var labelStateStyle = getStatesStyle(tick, 'label', tickStates);\n                labelStateStyle && labelShape.attr(labelStateStyle);\n            }\n            if (tickLineShape) {\n                var tickLineStateStyle = getStatesStyle(tick, 'tickLine', tickStates);\n                tickLineStateStyle && tickLineShape.attr(tickLineStateStyle);\n            }\n        }\n        else {\n            if (labelShape) {\n                labelShape.attr(labelCfg.style);\n            }\n            if (tickLineShape) {\n                tickLineShape.attr(tickLineCfg.style);\n            }\n        }\n    };\n    return AxisBase;\n}(GroupComponent));\nexport default AxisBase;\n//# sourceMappingURL=base.js.map","import { each } from '@antv/util';\nimport { ellipsisLabel } from '../../util/label';\nfunction ellipseLabels(isVertical, labelGroup, limitLength, position) {\n    var children = labelGroup.getChildren();\n    var ellipsisFlag = false;\n    each(children, function (label) {\n        var rst = ellipsisLabel(isVertical, label, limitLength, position);\n        ellipsisFlag = ellipsisFlag || rst;\n    });\n    return ellipsisFlag;\n}\nexport function getDefault() {\n    return ellipsisTail;\n}\nexport function ellipsisHead(isVertical, labelGroup, limitLength) {\n    return ellipseLabels(isVertical, labelGroup, limitLength, 'head');\n}\nexport function ellipsisTail(isVertical, labelGroup, limitLength) {\n    return ellipseLabels(isVertical, labelGroup, limitLength, 'tail');\n}\nexport function ellipsisMiddle(isVertical, labelGroup, limitLength) {\n    return ellipseLabels(isVertical, labelGroup, limitLength, 'middle');\n}\n//# sourceMappingURL=auto-ellipsis.js.map","import { getMaxLabelWidth } from '../../util/label';\nimport { getAngleByMatrix } from '../../util/matrix';\nimport { near } from '../../util/util';\n// 文本是否旋转\nfunction isRotate(label) {\n    var matrix = label.attr('matrix');\n    return matrix && matrix[0] !== 1; // 仅在这个场景下判定\n}\nfunction getRotateAngle(label) {\n    var angle = isRotate(label) ? getAngleByMatrix(label.attr('matrix')) : 0;\n    return angle % 360;\n}\n// autohide 不再考虑超出限制\n// function isOutLimit(isVertical: boolean, label: IElement, limitLength: number) {\n//   if (!limitLength) {\n//     // 如果没限制 limitLength 则直接返回 false\n//     return false;\n//   }\n//   const canvasBBox = label.getCanvasBBox();\n//   let isOut = false;\n//   if (isVertical) {\n//     isOut = canvasBBox.width > limitLength;\n//   } else {\n//     isOut = canvasBBox.height > limitLength;\n//   }\n//   return isOut;\n// }\n// 是否重叠\nfunction isOverlap(isVertical, first, second, minGap) {\n    var overlap = false;\n    var angle = getRotateAngle(first);\n    var distance = isVertical\n        ? Math.abs(second.attr('y') - first.attr('y'))\n        : Math.abs(second.attr('x') - first.attr('x'));\n    var prevBBox = (isVertical\n        ? second.attr('y') > first.attr('y')\n        : second.attr('x') > first.attr('x'))\n        ? first.getBBox()\n        : second.getBBox();\n    if (isVertical) {\n        var ratio = Math.abs(Math.cos(angle));\n        if (near(ratio, 0, Math.PI / 180)) {\n            overlap = prevBBox.width + minGap > distance;\n        }\n        else {\n            overlap = prevBBox.height / ratio + minGap > distance;\n        }\n    }\n    else {\n        var ratio = Math.abs(Math.sin(angle));\n        if (near(ratio, 0, Math.PI / 180)) {\n            overlap = prevBBox.width + minGap > distance;\n        }\n        else {\n            overlap = prevBBox.height / ratio + minGap > distance;\n        }\n    }\n    return overlap;\n}\n// 保留第一个或者最后一个\nfunction reserveOne(isVertical, labelsGroup, reversed, autoHideCfg) {\n    var minGap = (autoHideCfg === null || autoHideCfg === void 0 ? void 0 : autoHideCfg.minGap) || 0;\n    var labels = labelsGroup\n        .getChildren()\n        .slice() // 复制数组\n        .filter(function (item) { return item.get('visible'); });\n    if (!labels.length) {\n        return false;\n    }\n    var hasHide = false;\n    if (reversed) {\n        // 翻转\n        labels.reverse();\n    }\n    var count = labels.length;\n    var first = labels[0];\n    var prev = first;\n    for (var i = 1; i < count; i++) {\n        var label = labels[i];\n        var curBBox = label.getBBox();\n        // 不再考虑超出限制，而仅仅根据是否重叠进行隐藏 isOutLimit(isVertical, label, limitLength) ||\n        var isHide = isOverlap(isVertical, prev, label, minGap);\n        if (isHide) {\n            label.hide();\n            hasHide = true;\n        }\n        else {\n            prev = label;\n        }\n    }\n    return hasHide;\n}\n// 均匀抽样隐藏标签，注意这里假设 label/tick 是均匀的\nfunction parityHide(isVertical, labelsGroup, autoHideCfg) {\n    var minGap = (autoHideCfg === null || autoHideCfg === void 0 ? void 0 : autoHideCfg.minGap) || 0;\n    var labels = labelsGroup.getChildren().slice(); // 复制数组\n    if (labels.length < 2) {\n        // 如果数量小于 2 则直接返回，等于 2 时可能也会重合\n        return false;\n    }\n    var hasHide = false;\n    var first = labels[0];\n    var firstBBox = first.getBBox();\n    var second = labels[1];\n    var count = labels.length;\n    var angle = getRotateAngle(first);\n    var distance = isVertical\n        ? Math.abs(second.attr('y') - first.attr('y'))\n        : Math.abs(second.attr('x') - first.attr('x'));\n    var interval = 0; // 不重叠的坐标文本间距个数\n    if (isVertical) {\n        // 垂直的坐标轴计算垂直方向的间距\n        var ratio = Math.abs(Math.cos(angle));\n        if (near(ratio, 0, Math.PI / 180)) {\n            var maxWidth = getMaxLabelWidth(labels);\n            interval = (maxWidth + minGap) / distance;\n        }\n        else {\n            interval = (firstBBox.height / ratio + minGap) / distance;\n        }\n    }\n    else {\n        // 水平坐标轴\n        var ratio = Math.abs(Math.sin(angle));\n        if (near(ratio, 0, Math.PI / 180)) {\n            var maxWidth = getMaxLabelWidth(labels);\n            interval = (maxWidth + minGap) / distance;\n        }\n        else {\n            interval = (firstBBox.height / ratio + minGap) / distance;\n        }\n    }\n    // interval > 1 时需要对 label 进行隐藏\n    if (interval > 1) {\n        interval = Math.ceil(interval);\n        for (var i = 0; i < count; i++) {\n            if (i % interval !== 0) {\n                // 仅保留被整除的 label\n                labels[i].hide();\n                hasHide = true;\n            }\n        }\n    }\n    return hasHide;\n}\nexport function getDefault() {\n    return equidistance;\n}\n/**\n * 保证首个 label 可见，即使超过 limitLength 也不隐藏\n * @param {boolean} isVertical  是否垂直\n * @param {IGroup}  labelsGroup label 的分组\n * @param {number} limitLength 另一个方向的长度限制，autoHide 不关心\n * @param {AxisLabelAutoHideCfg} autoHideCfg autoHide overlap 的可选配置参数\n */\nexport function reserveFirst(isVertical, labelsGroup, limitLength, autoHideCfg) {\n    return reserveOne(isVertical, labelsGroup, false, autoHideCfg);\n}\n/**\n * 保证最后一个 label 可见，即使超过 limitLength 也不隐藏\n * @param {boolean} isVertical  是否垂直\n * @param {IGroup}  labelsGroup label 的分组\n * @param {number} limitLength 另一个方向的长度限制，autoHide 不关心\n * @param {AxisLabelAutoHideCfg} autoHideCfg autoHide overlap 的可选配置参数\n */\nexport function reserveLast(isVertical, labelsGroup, limitLength, autoHideCfg) {\n    return reserveOne(isVertical, labelsGroup, true, autoHideCfg);\n}\n/**\n * 保证第一个最后一个 label 可见，即使超过 limitLength 也不隐藏\n * @param {boolean} isVertical  是否垂直\n * @param {IGroup}  labelsGroup label 的分组\n * @param {number} limitLength 另一个方向的长度限制，autoHide 不关心\n * @param {AxisLabelAutoHideCfg} autoHideCfg autoHide overlap 的可选配置参数\n */\nexport function reserveBoth(isVertical, labelsGroup, limitLength, autoHideCfg) {\n    var minGap = (autoHideCfg === null || autoHideCfg === void 0 ? void 0 : autoHideCfg.minGap) || 0;\n    var labels = labelsGroup.getChildren().slice(); // 复制数组\n    if (labels.length <= 2) {\n        // 如果数量小于或等于 2 则直接返回\n        return false;\n    }\n    var hasHide = false;\n    var count = labels.length;\n    var first = labels[0];\n    var last = labels[count - 1];\n    var preLabel = first;\n    // 按照先保存第一个的逻辑循环一遍，最后一个不参与循环\n    for (var i = 1; i < count - 1; i++) {\n        var label = labels[i];\n        var curBBox = label.getBBox();\n        // 废弃 isOutLimit(isVertical, label, limitLength) ||\n        var isHide = isOverlap(isVertical, preLabel, label, minGap);\n        if (isHide) {\n            label.hide();\n            hasHide = true;\n        }\n        else {\n            preLabel = label;\n        }\n    }\n    var overlap = isOverlap(isVertical, preLabel, last, minGap);\n    if (overlap) {\n        // 发生冲突，则隐藏前一个保留后一个\n        preLabel.hide();\n        hasHide = true;\n    }\n    return hasHide;\n}\n/**\n * 保证 label 均匀显示 和 不出现重叠，主要解决文本层叠的问题，对于 limitLength 不处理\n * @param {boolean} isVertical  是否垂直\n * @param {IGroup}  labelsGroup label 的分组\n * @param {number} limitLength 另一个方向的长度限制，autoHide 不关心\n * @param {AxisLabelAutoHideCfg} autoHideCfg autoHide overlap 的可选配置参数\n */\nexport function equidistance(isVertical, labelsGroup, limitLength, autoHideCfg) {\n    var hasHide = parityHide(isVertical, labelsGroup, autoHideCfg);\n    // 处理  timeCat 类型的 tick，在均匀的基础上，再次检查出现重叠的进行隐藏\n    if (reserveOne(isVertical, labelsGroup, false)) {\n        hasHide = true;\n    }\n    return hasHide;\n}\n/**\n * 同 equidistance， 首先会保证 labels 均匀显示，然后会保留首尾\n * @param isVertical\n * @param labelsGroup\n * @param {number} limitLength 另一个方向的长度限制，autoHide 不关心\n * @param {AxisLabelAutoHideCfg} autoHideCfg autoHide overlap 的可选配置参数\n */\nexport function equidistanceWithReverseBoth(isVertical, labelsGroup, limitLength, autoHideCfg) {\n    var labels = labelsGroup.getChildren().slice(); // 复制数组\n    var hasHide = parityHide(isVertical, labelsGroup, autoHideCfg);\n    if (labels.length > 2) {\n        var first = labels[0];\n        var last = labels[labels.length - 1];\n        // 如果第一个被隐藏了\n        if (!first.get('visible')) {\n            first.show();\n            if (reserveOne(isVertical, labelsGroup, false, autoHideCfg)) {\n                hasHide = true;\n            }\n        }\n        // 如果最后一个被隐藏了\n        if (!last.get('visible')) {\n            last.show();\n            if (reserveOne(isVertical, labelsGroup, true, autoHideCfg)) {\n                hasHide = true;\n            }\n        }\n    }\n    return hasHide;\n}\n//# sourceMappingURL=auto-hide.js.map","import { each, isNumber } from '@antv/util';\nimport { getMaxLabelWidth } from '../../util/label';\nimport { getMatrixByAngle } from '../../util/matrix';\nimport Theme from '../../util/theme';\n// 统一设置文本的角度\nfunction setLabelsAngle(labels, angle) {\n    each(labels, function (label) {\n        var x = label.attr('x');\n        var y = label.attr('y');\n        var matrix = getMatrixByAngle({ x: x, y: y }, angle);\n        label.attr('matrix', matrix);\n    });\n}\n// 旋转文本\nfunction labelRotate(isVertical, labelsGroup, limitLength, getAngle) {\n    var labels = labelsGroup.getChildren();\n    if (!labels.length) {\n        return false;\n    }\n    if (!isVertical && labels.length < 2) {\n        // 水平时至少有两个时才旋转\n        return false;\n    }\n    var maxWidth = getMaxLabelWidth(labels);\n    var isOverlap = false;\n    if (isVertical) {\n        // limitLength 为 0 或者 null 时不生效\n        isOverlap = !!limitLength && maxWidth > limitLength;\n    }\n    else {\n        // 同 limitLength 无关\n        var tickWidth = Math.abs(labels[1].attr('x') - labels[0].attr('x'));\n        isOverlap = maxWidth > tickWidth;\n    }\n    if (isOverlap) {\n        var angle = getAngle(limitLength, maxWidth);\n        setLabelsAngle(labels, angle);\n    }\n    return isOverlap;\n}\nexport function getDefault() {\n    return fixedAngle;\n}\n/**\n * 固定角度旋转文本\n * @param  {boolean} isVertical  是否垂直方向\n * @param  {IGroup}  labelsGroup 文本的 group\n * @param  {number}  limitLength 限定长度\n * @param  {number}  customRotate 自定义旋转角度\n * @return {boolean}             是否发生了旋转\n */\nexport function fixedAngle(isVertical, labelsGroup, limitLength, customRotate) {\n    return labelRotate(isVertical, labelsGroup, limitLength, function () {\n        if (isNumber(customRotate)) {\n            return customRotate;\n        }\n        return isVertical ? Theme.verticalAxisRotate : Theme.horizontalAxisRotate;\n    });\n}\n/**\n * 非固定角度旋转文本\n * @param  {boolean} isVertical  是否垂直方向\n * @param  {IGroup}  labelsGroup 文本的 group\n * @param  {number}  limitLength 限定长度\n * @return {boolean}             是否发生了旋转\n */\nexport function unfixedAngle(isVertical, labelsGroup, limitLength) {\n    return labelRotate(isVertical, labelsGroup, limitLength, function (length, maxWidth) {\n        if (!length) {\n            // 如果没有设置 limitLength，则使用固定的角度旋转\n            return isVertical ? Theme.verticalAxisRotate : Theme.horizontalAxisRotate;\n        }\n        if (isVertical) {\n            // 垂直时不需要判定 limitLength > maxWidth ，因为此时不会 overlap\n            return -Math.acos(length / maxWidth);\n        }\n        else {\n            var angle = 0;\n            if (length > maxWidth) {\n                // 需要判定，asin 的参数 -1， 1\n                angle = Math.PI / 4;\n            }\n            else {\n                angle = Math.asin(length / maxWidth);\n                if (angle > Math.PI / 4) {\n                    // 大于 Math.PI / 4 时没意义\n                    angle = Math.PI / 4;\n                }\n            }\n            return angle;\n        }\n    });\n}\n//# sourceMappingURL=auto-rotate.js.map","import { __assign, __extends } from \"tslib\";\nimport { vec2 } from '@antv/matrix-util';\nimport { each, isFunction, isNil, isNumberEqual, isObject } from '@antv/util';\nimport AxisBase from './base';\nimport * as OverlapUtil from './overlap';\nvar Line = /** @class */ (function (_super) {\n    __extends(Line, _super);\n    function Line() {\n        return _super !== null && _super.apply(this, arguments) || this;\n    }\n    Line.prototype.getDefaultCfg = function () {\n        var cfg = _super.prototype.getDefaultCfg.call(this);\n        return __assign(__assign({}, cfg), { type: 'line', locationType: 'region', \n            /**\n             * 起始点, x, y\n             * @type {object}\n             */\n            start: null, \n            /**\n             * 结束点, x, y\n             * @type {object}\n             */\n            end: null });\n    };\n    // 获取坐标轴线的 path\n    Line.prototype.getLinePath = function () {\n        var start = this.get('start');\n        var end = this.get('end');\n        var path = [];\n        path.push(['M', start.x, start.y]);\n        path.push(['L', end.x, end.y]);\n        return path;\n    };\n    // 重新计算 layout bbox，考虑到 line 不显示\n    Line.prototype.getInnerLayoutBBox = function () {\n        var start = this.get('start');\n        var end = this.get('end');\n        var bbox = _super.prototype.getInnerLayoutBBox.call(this);\n        var minX = Math.min(start.x, end.x, bbox.x);\n        var minY = Math.min(start.y, end.y, bbox.y);\n        var maxX = Math.max(start.x, end.x, bbox.maxX);\n        var maxY = Math.max(start.y, end.y, bbox.maxY);\n        return {\n            x: minX,\n            y: minY,\n            minX: minX,\n            minY: minY,\n            maxX: maxX,\n            maxY: maxY,\n            width: maxX - minX,\n            height: maxY - minY,\n        };\n    };\n    Line.prototype.isVertical = function () {\n        var start = this.get('start');\n        var end = this.get('end');\n        return isNumberEqual(start.x, end.x);\n    };\n    Line.prototype.isHorizontal = function () {\n        var start = this.get('start');\n        var end = this.get('end');\n        return isNumberEqual(start.y, end.y);\n    };\n    Line.prototype.getTickPoint = function (tickValue) {\n        var self = this;\n        var start = self.get('start');\n        var end = self.get('end');\n        var regionX = end.x - start.x;\n        var regionY = end.y - start.y;\n        return {\n            x: start.x + regionX * tickValue,\n            y: start.y + regionY * tickValue,\n        };\n    };\n    // 直线坐标轴下任一点的向量方向都相同\n    Line.prototype.getSideVector = function (offset) {\n        var axisVector = this.getAxisVector();\n        var normal = vec2.normalize([0, 0], axisVector);\n        var factor = this.get('verticalFactor');\n        var verticalVector = [normal[1], normal[0] * -1]; // 垂直方向，逆时针方向\n        return vec2.scale([0, 0], verticalVector, offset * factor);\n    };\n    // 获取坐标轴的向量\n    Line.prototype.getAxisVector = function () {\n        var start = this.get('start');\n        var end = this.get('end');\n        return [end.x - start.x, end.y - start.y];\n    };\n    Line.prototype.processOverlap = function (labelGroup) {\n        var _this = this;\n        var isVertical = this.isVertical();\n        var isHorizontal = this.isHorizontal();\n        // 非垂直，或者非水平时不处理遮挡问题\n        if (!isVertical && !isHorizontal) {\n            return;\n        }\n        var labelCfg = this.get('label');\n        var titleCfg = this.get('title');\n        var verticalLimitLength = this.get('verticalLimitLength');\n        var labelOffset = labelCfg.offset;\n        var limitLength = verticalLimitLength;\n        var titleHeight = 0;\n        var titleSpacing = 0;\n        if (titleCfg) {\n            titleHeight = titleCfg.style.fontSize;\n            titleSpacing = titleCfg.spacing;\n        }\n        if (limitLength) {\n            limitLength = limitLength - labelOffset - titleSpacing - titleHeight;\n        }\n        var overlapOrder = this.get('overlapOrder');\n        each(overlapOrder, function (name) {\n            if (labelCfg[name] && _this.canProcessOverlap(name)) {\n                _this.autoProcessOverlap(name, labelCfg[name], labelGroup, limitLength);\n            }\n        });\n        if (titleCfg) {\n            if (isNil(titleCfg.offset)) {\n                // 调整 title 的 offset\n                var bbox = labelGroup.getCanvasBBox();\n                var length_1 = isVertical ? bbox.width : bbox.height;\n                // 如果用户没有设置 offset，则自动计算\n                titleCfg.offset = labelOffset + length_1 + titleSpacing + titleHeight / 2;\n            }\n        }\n    };\n    /**\n     * 是否可以执行某一 overlap\n     * @param name\n     */\n    Line.prototype.canProcessOverlap = function (name) {\n        var labelCfg = this.get('label');\n        // 对 autoRotate，如果配置了旋转角度，直接进行固定角度旋转\n        if (name === 'autoRotate') {\n            return isNil(labelCfg.rotate);\n        }\n        // 默认所有 overlap 都可执行\n        return true;\n    };\n    Line.prototype.autoProcessOverlap = function (name, value, labelGroup, limitLength) {\n        var _this = this;\n        var isVertical = this.isVertical();\n        var hasAdjusted = false;\n        var util = OverlapUtil[name];\n        if (value === true) {\n            var labelCfg = this.get('label');\n            // true 形式的配置：使用 overlap 默认的的处理方法进行处理\n            hasAdjusted = util.getDefault()(isVertical, labelGroup, limitLength);\n        }\n        else if (isFunction(value)) {\n            // 回调函数形式的配置： 用户可以传入回调函数\n            hasAdjusted = value(isVertical, labelGroup, limitLength);\n        }\n        else if (isObject(value)) {\n            // object 形式的配置方式：包括 处理方法 type， 和可选参数配置 cfg\n            var overlapCfg = value;\n            if (util[overlapCfg.type]) {\n                hasAdjusted = util[overlapCfg.type](isVertical, labelGroup, limitLength, overlapCfg.cfg);\n            }\n        }\n        else if (util[value]) {\n            // 字符串类型的配置：按照名称执行 overlap 处理方法\n            hasAdjusted = util[value](isVertical, labelGroup, limitLength);\n        }\n        if (name === 'autoRotate') {\n            // 文本旋转后，文本的对齐方式可能就不合适了\n            if (hasAdjusted) {\n                var labels = labelGroup.getChildren();\n                var verticalFactor_1 = this.get('verticalFactor');\n                each(labels, function (label) {\n                    var textAlign = label.attr('textAlign');\n                    if (textAlign === 'center') {\n                        // 居中的文本需要调整旋转度\n                        var newAlign = verticalFactor_1 > 0 ? 'end' : 'start';\n                        label.attr('textAlign', newAlign);\n                    }\n                });\n            }\n        }\n        else if (name === 'autoHide') {\n            var children = labelGroup.getChildren().slice(0); // 复制数组，删除时不会出错\n            each(children, function (label) {\n                if (!label.get('visible')) {\n                    if (_this.get('isRegister')) {\n                        // 已经注册过了，则删除\n                        _this.unregisterElement(label);\n                    }\n                    label.remove(); // 防止 label 数量太多，所以统一删除\n                }\n            });\n        }\n    };\n    return Line;\n}(AxisBase));\nexport default Line;\n//# sourceMappingURL=line.js.map","var _a;\nimport Theme from '../util/theme';\n// tooltip 相关 dom 的 css 类名\nimport * as CssConst from './css-const';\nexport default (_a = {},\n    // css style for tooltip\n    _a[\"\" + CssConst.CONTAINER_CLASS] = {\n        position: 'relative'\n    },\n    _a[\"\" + CssConst.CROSSHAIR_LINE] = {\n        position: 'absolute',\n        backgroundColor: 'rgba(0, 0, 0, 0.25)',\n    },\n    _a[\"\" + CssConst.CROSSHAIR_TEXT] = {\n        position: 'absolute',\n        color: Theme.textColor,\n        fontFamily: Theme.fontFamily,\n    },\n    _a);\n//# sourceMappingURL=html-theme.js.map","import { __assign, __extends } from \"tslib\";\nimport { each, isNil, isFunction, isObject } from '@antv/util';\nimport { vec2 } from '@antv/matrix-util';\nimport AxisBase from './base';\nimport * as OverlapUtil from './overlap';\nvar Circle = /** @class */ (function (_super) {\n    __extends(Circle, _super);\n    function Circle() {\n        return _super !== null && _super.apply(this, arguments) || this;\n    }\n    Circle.prototype.getDefaultCfg = function () {\n        var cfg = _super.prototype.getDefaultCfg.call(this);\n        return __assign(__assign({}, cfg), { type: 'circle', locationType: 'circle', center: null, radius: null, startAngle: -Math.PI / 2, endAngle: (Math.PI * 3) / 2 });\n    };\n    Circle.prototype.getLinePath = function () {\n        var center = this.get('center');\n        var x = center.x;\n        var y = center.y;\n        var rx = this.get('radius');\n        var ry = rx;\n        var startAngle = this.get('startAngle');\n        var endAngle = this.get('endAngle');\n        var path = [];\n        if (Math.abs(endAngle - startAngle) === Math.PI * 2) {\n            path = [['M', x, y - ry], ['A', rx, ry, 0, 1, 1, x, y + ry], ['A', rx, ry, 0, 1, 1, x, y - ry], ['Z']];\n        }\n        else {\n            var startPoint = this.getCirclePoint(startAngle);\n            var endPoint = this.getCirclePoint(endAngle);\n            var large = Math.abs(endAngle - startAngle) > Math.PI ? 1 : 0;\n            var sweep = startAngle > endAngle ? 0 : 1;\n            path = [\n                ['M', x, y],\n                ['L', startPoint.x, startPoint.y],\n                ['A', rx, ry, 0, large, sweep, endPoint.x, endPoint.y],\n                ['L', x, y],\n            ];\n        }\n        return path;\n    };\n    Circle.prototype.getTickPoint = function (tickValue) {\n        var startAngle = this.get('startAngle');\n        var endAngle = this.get('endAngle');\n        var angle = startAngle + (endAngle - startAngle) * tickValue;\n        return this.getCirclePoint(angle);\n    };\n    // 获取垂直于坐标轴的向量\n    Circle.prototype.getSideVector = function (offset, point) {\n        var center = this.get('center');\n        var vector = [point.x - center.x, point.y - center.y];\n        var factor = this.get('verticalFactor');\n        var vecLen = vec2.length(vector);\n        vec2.scale(vector, vector, (factor * offset) / vecLen);\n        return vector;\n    };\n    // 获取沿坐标轴方向的向量\n    Circle.prototype.getAxisVector = function (point) {\n        var center = this.get('center');\n        var vector = [point.x - center.x, point.y - center.y];\n        return [vector[1], -1 * vector[0]]; // 获取顺时针方向的向量\n    };\n    // 根据圆心和半径获取点\n    Circle.prototype.getCirclePoint = function (angle, radius) {\n        var center = this.get('center');\n        radius = radius || this.get('radius');\n        return {\n            x: center.x + Math.cos(angle) * radius,\n            y: center.y + Math.sin(angle) * radius,\n        };\n    };\n    /**\n     * 是否可以执行某一 overlap\n     * @param name\n     */\n    Circle.prototype.canProcessOverlap = function (name) {\n        var labelCfg = this.get('label');\n        // 对 autoRotate，如果配置了旋转角度，直接进行固定角度旋转\n        if (name === 'autoRotate') {\n            return isNil(labelCfg.rotate);\n        }\n        // 默认所有 overlap 都可执行\n        return true;\n    };\n    Circle.prototype.processOverlap = function (labelGroup) {\n        var _this = this;\n        var labelCfg = this.get('label');\n        var titleCfg = this.get('title');\n        var verticalLimitLength = this.get('verticalLimitLength');\n        var labelOffset = labelCfg.offset;\n        var limitLength = verticalLimitLength;\n        var titleHeight = 0;\n        var titleSpacing = 0;\n        if (titleCfg) {\n            titleHeight = titleCfg.style.fontSize;\n            titleSpacing = titleCfg.spacing;\n        }\n        if (limitLength) {\n            limitLength = limitLength - labelOffset - titleSpacing - titleHeight;\n        }\n        var overlapOrder = this.get('overlapOrder');\n        each(overlapOrder, function (name) {\n            if (labelCfg[name] && _this.canProcessOverlap(name)) {\n                _this.autoProcessOverlap(name, labelCfg[name], labelGroup, limitLength);\n            }\n        });\n        if (titleCfg) {\n            if (isNil(titleCfg.offset)) {\n                // 调整 title 的 offset\n                var length_1 = labelGroup.getCanvasBBox().height;\n                // 如果用户没有设置 offset，则自动计算\n                titleCfg.offset = labelOffset + length_1 + titleSpacing + titleHeight / 2;\n            }\n        }\n    };\n    Circle.prototype.autoProcessOverlap = function (name, value, labelGroup, limitLength) {\n        var _this = this;\n        var hasAdjusted = false;\n        var util = OverlapUtil[name];\n        if (limitLength > 0) {\n            if (value === true) {\n                // true 形式的配置：使用 overlap 默认的的处理方法进行处理\n                hasAdjusted = util.getDefault()(false, labelGroup, limitLength);\n            }\n            else if (isFunction(value)) {\n                // 回调函数形式的配置： 用户可以传入回调函数\n                hasAdjusted = value(false, labelGroup, limitLength);\n            }\n            else if (isObject(value)) {\n                // object 形式的配置方式：包括 处理方法 type， 和可选参数配置 cfg\n                var overlapCfg = value;\n                if (util[overlapCfg.type]) {\n                    hasAdjusted = util[overlapCfg.type](false, labelGroup, limitLength, overlapCfg.cfg);\n                }\n            }\n            else if (util[value]) {\n                // 字符串类型的配置：按照名称执行 overlap 处理方法\n                hasAdjusted = util[value](false, labelGroup, limitLength);\n            }\n        }\n        if (name === 'autoRotate') {\n            // 文本旋转后，文本的对齐方式可能就不合适了\n            if (hasAdjusted) {\n                var labels = labelGroup.getChildren();\n                var verticalFactor_1 = this.get('verticalFactor');\n                each(labels, function (label) {\n                    var textAlign = label.attr('textAlign');\n                    if (textAlign === 'center') {\n                        // 居中的文本需要调整旋转度\n                        var newAlign = verticalFactor_1 > 0 ? 'end' : 'start';\n                        label.attr('textAlign', newAlign);\n                    }\n                });\n            }\n        }\n        else if (name === 'autoHide') {\n            var children = labelGroup.getChildren().slice(0); // 复制数组，删除时不会出错\n            each(children, function (label) {\n                if (!label.get('visible')) {\n                    if (_this.get('isRegister')) {\n                        // 已经注册过了，则删除\n                        _this.unregisterElement(label);\n                    }\n                    label.remove(); // 防止 label 数量太多，所以统一删除\n                }\n            });\n        }\n    };\n    return Circle;\n}(AxisBase));\nexport default Circle;\n//# sourceMappingURL=circle.js.map","import { __assign, __extends } from \"tslib\";\nimport { isNil } from '@antv/util';\nimport GroupComponent from '../abstract/group-component';\nimport { getMatrixByAngle } from '../util/matrix';\nimport Theme from '../util/theme';\nimport { formatPadding } from '../util/util';\nvar CrosshairBase = /** @class */ (function (_super) {\n    __extends(CrosshairBase, _super);\n    function CrosshairBase() {\n        return _super !== null && _super.apply(this, arguments) || this;\n    }\n    CrosshairBase.prototype.getDefaultCfg = function () {\n        var cfg = _super.prototype.getDefaultCfg.call(this);\n        return __assign(__assign({}, cfg), { name: 'crosshair', type: 'base', line: {}, text: null, textBackground: {}, capture: false, defaultCfg: {\n                line: {\n                    style: {\n                        lineWidth: 1,\n                        stroke: Theme.lineColor,\n                    },\n                },\n                text: {\n                    position: 'start',\n                    offset: 10,\n                    autoRotate: false,\n                    content: null,\n                    style: {\n                        fill: Theme.textColor,\n                        textAlign: 'center',\n                        textBaseline: 'middle',\n                        fontFamily: Theme.fontFamily,\n                    },\n                },\n                textBackground: {\n                    padding: 5,\n                    style: {\n                        stroke: Theme.lineColor,\n                    },\n                },\n            } });\n    };\n    CrosshairBase.prototype.renderInner = function (group) {\n        if (this.get('line')) {\n            this.renderLine(group);\n        }\n        if (this.get('text')) {\n            this.renderText(group);\n            this.renderBackground(group);\n        }\n    };\n    CrosshairBase.prototype.renderText = function (group) {\n        var text = this.get('text');\n        var style = text.style, autoRotate = text.autoRotate, content = text.content;\n        if (!isNil(content)) {\n            var textPoint = this.getTextPoint();\n            var matrix = null;\n            if (autoRotate) {\n                var angle = this.getRotateAngle();\n                matrix = getMatrixByAngle(textPoint, angle);\n            }\n            this.addShape(group, {\n                type: 'text',\n                name: 'crosshair-text',\n                id: this.getElementId('text'),\n                attrs: __assign(__assign(__assign({}, textPoint), { text: content, matrix: matrix }), style),\n            });\n        }\n    };\n    CrosshairBase.prototype.renderLine = function (group) {\n        var path = this.getLinePath();\n        var line = this.get('line');\n        var style = line.style;\n        this.addShape(group, {\n            type: 'path',\n            name: 'crosshair-line',\n            id: this.getElementId('line'),\n            attrs: __assign({ path: path }, style),\n        });\n    };\n    // 绘制文本的背景\n    CrosshairBase.prototype.renderBackground = function (group) {\n        var textId = this.getElementId('text');\n        var textShape = group.findById(textId); // 查找文本\n        var textBackground = this.get('textBackground');\n        if (textBackground && textShape) {\n            var textBBox = textShape.getBBox();\n            var padding = formatPadding(textBackground.padding); // 用户传入的 padding 格式不定\n            var style = textBackground.style;\n            var backgroundShape = this.addShape(group, {\n                type: 'rect',\n                name: 'crosshair-text-background',\n                id: this.getElementId('text-background'),\n                attrs: __assign({ x: textBBox.x - padding[3], y: textBBox.y - padding[0], width: textBBox.width + padding[1] + padding[3], height: textBBox.height + padding[0] + padding[2], matrix: textShape.attr('matrix') }, style),\n            });\n            backgroundShape.toBack();\n        }\n    };\n    return CrosshairBase;\n}(GroupComponent));\nexport default CrosshairBase;\n//# sourceMappingURL=base.js.map","import { __assign, __extends } from \"tslib\";\nimport { getTextPoint } from '../util/util';\nimport CrosshairBase from './base';\nvar LineCrosshair = /** @class */ (function (_super) {\n    __extends(LineCrosshair, _super);\n    function LineCrosshair() {\n        return _super !== null && _super.apply(this, arguments) || this;\n    }\n    LineCrosshair.prototype.getDefaultCfg = function () {\n        var cfg = _super.prototype.getDefaultCfg.call(this);\n        return __assign(__assign({}, cfg), { type: 'line', locationType: 'region', start: null, end: null });\n    };\n    // 直线的文本需要同直线垂直\n    LineCrosshair.prototype.getRotateAngle = function () {\n        var _a = this.getLocation(), start = _a.start, end = _a.end;\n        var position = this.get('text').position;\n        var angle = Math.atan2(end.y - start.y, end.x - start.x);\n        var tangentAngle = position === 'start' ? angle - Math.PI / 2 : angle + Math.PI / 2;\n        return tangentAngle;\n    };\n    LineCrosshair.prototype.getTextPoint = function () {\n        var _a = this.getLocation(), start = _a.start, end = _a.end;\n        var _b = this.get('text'), position = _b.position, offset = _b.offset;\n        return getTextPoint(start, end, position, offset);\n    };\n    LineCrosshair.prototype.getLinePath = function () {\n        var _a = this.getLocation(), start = _a.start, end = _a.end;\n        return [\n            ['M', start.x, start.y],\n            ['L', end.x, end.y],\n        ];\n    };\n    return LineCrosshair;\n}(CrosshairBase));\nexport default LineCrosshair;\n//# sourceMappingURL=line.js.map","import { __assign, __extends } from \"tslib\";\nimport { getCirclePoint } from '../util/util';\nimport CrosshairBase from './base';\nvar LineCrosshair = /** @class */ (function (_super) {\n    __extends(LineCrosshair, _super);\n    function LineCrosshair() {\n        return _super !== null && _super.apply(this, arguments) || this;\n    }\n    LineCrosshair.prototype.getDefaultCfg = function () {\n        var cfg = _super.prototype.getDefaultCfg.call(this);\n        return __assign(__assign({}, cfg), { type: 'circle', locationType: 'circle', center: null, radius: 100, startAngle: -Math.PI / 2, endAngle: (Math.PI * 3) / 2 });\n    };\n    LineCrosshair.prototype.getRotateAngle = function () {\n        var _a = this.getLocation(), startAngle = _a.startAngle, endAngle = _a.endAngle;\n        var position = this.get('text').position;\n        var tangentAngle = position === 'start' ? startAngle + Math.PI / 2 : endAngle - Math.PI / 2;\n        return tangentAngle;\n    };\n    LineCrosshair.prototype.getTextPoint = function () {\n        var text = this.get('text');\n        var position = text.position, offset = text.offset;\n        var _a = this.getLocation(), center = _a.center, radius = _a.radius, startAngle = _a.startAngle, endAngle = _a.endAngle;\n        var angle = position === 'start' ? startAngle : endAngle;\n        var tangentAngle = this.getRotateAngle() - Math.PI;\n        var point = getCirclePoint(center, radius, angle);\n        // 这个地方其实应该求切线向量然后在乘以 offset，但是太啰嗦了，直接给出结果\n        // const tangent = [Math.cos(tangentAngle), Math.sin(tangentAngle)];\n        // const offsetVector = vec2.scale([], tangent, offset);\n        var offsetX = Math.cos(tangentAngle) * offset;\n        var offsetY = Math.sin(tangentAngle) * offset;\n        return {\n            x: point.x + offsetX,\n            y: point.y + offsetY,\n        };\n    };\n    LineCrosshair.prototype.getLinePath = function () {\n        var _a = this.getLocation(), center = _a.center, radius = _a.radius, startAngle = _a.startAngle, endAngle = _a.endAngle;\n        var path = null;\n        if (endAngle - startAngle === Math.PI * 2) {\n            // 整圆\n            var x = center.x, y = center.y;\n            path = [\n                ['M', x, y - radius],\n                ['A', radius, radius, 0, 1, 1, x, y + radius],\n                ['A', radius, radius, 0, 1, 1, x, y - radius],\n                ['Z'],\n            ];\n        }\n        else {\n            var startPoint = getCirclePoint(center, radius, startAngle);\n            var endPoint = getCirclePoint(center, radius, endAngle);\n            var large = Math.abs(endAngle - startAngle) > Math.PI ? 1 : 0;\n            var sweep = startAngle > endAngle ? 0 : 1;\n            path = [\n                ['M', startPoint.x, startPoint.y],\n                ['A', radius, radius, 0, large, sweep, endPoint.x, endPoint.y],\n            ];\n        }\n        return path;\n    };\n    return LineCrosshair;\n}(CrosshairBase));\nexport default LineCrosshair;\n//# sourceMappingURL=circle.js.map","export var CONTAINER_CLASS = 'g2-crosshair';\nexport var CROSSHAIR_LINE = CONTAINER_CLASS + \"-line\";\nexport var CROSSHAIR_TEXT = CONTAINER_CLASS + \"-text\";\n//# sourceMappingURL=css-const.js.map","import { __assign, __extends } from \"tslib\";\nimport { createDom, modifyCSS } from '@antv/dom-util';\nimport { substitute, hasKey } from '@antv/util';\nimport { toPx, getTextPoint } from '../util/util';\nimport HtmlComponent from '../abstract/html-component';\nimport * as CssConst from './css-const';\nimport HtmlTheme from './html-theme';\nvar HtmlCrosshair = /** @class */ (function (_super) {\n    __extends(HtmlCrosshair, _super);\n    function HtmlCrosshair() {\n        return _super !== null && _super.apply(this, arguments) || this;\n    }\n    HtmlCrosshair.prototype.getDefaultCfg = function () {\n        var cfg = _super.prototype.getDefaultCfg.call(this);\n        return __assign(__assign({}, cfg), { name: 'crosshair', type: 'html', locationType: 'region', start: { x: 0, y: 0 }, end: { x: 0, y: 0 }, capture: false, text: null, containerTpl: \"<div class=\\\"\" + CssConst.CONTAINER_CLASS + \"\\\"></div>\", crosshairTpl: \"<div class=\\\"\" + CssConst.CROSSHAIR_LINE + \"\\\"></div>\", textTpl: \"<span class=\\\"\" + CssConst.CROSSHAIR_TEXT + \"\\\">{content}</span>\", domStyles: null, containerClassName: CssConst.CONTAINER_CLASS, defaultStyles: HtmlTheme, defaultCfg: {\n                text: {\n                    position: 'start',\n                    content: null,\n                    align: 'center',\n                    offset: 10\n                }\n            } });\n    };\n    HtmlCrosshair.prototype.render = function () {\n        this.resetText();\n        this.resetPosition();\n    };\n    // 绘制 crosshair\n    HtmlCrosshair.prototype.initCrossHair = function () {\n        var container = this.getContainer();\n        var crosshairTpl = this.get('crosshairTpl');\n        var crosshairEl = createDom(crosshairTpl);\n        container.appendChild(crosshairEl);\n        this.applyStyle(CssConst.CROSSHAIR_LINE, crosshairEl);\n        this.set('crosshairEl', crosshairEl);\n    };\n    // 获取文本的位置\n    HtmlCrosshair.prototype.getTextPoint = function () {\n        var _a = this.getLocation(), start = _a.start, end = _a.end;\n        var _b = this.get('text'), position = _b.position, offset = _b.offset;\n        return getTextPoint(start, end, position, offset);\n    };\n    // 设置 text\n    HtmlCrosshair.prototype.resetText = function () {\n        var text = this.get('text');\n        var textEl = this.get('textEl');\n        if (text) {\n            var content = text.content;\n            if (!textEl) {\n                var container = this.getContainer();\n                var textTpl = substitute(this.get('textTpl'), text);\n                textEl = createDom(textTpl);\n                container.appendChild(textEl);\n                this.applyStyle(CssConst.CROSSHAIR_TEXT, textEl);\n                this.set('textEl', textEl);\n            }\n            textEl.innerHTML = content;\n        }\n        else if (textEl) {\n            textEl.remove();\n        }\n    };\n    // 是否垂直\n    HtmlCrosshair.prototype.isVertical = function (start, end) {\n        return start.x === end.x;\n    };\n    // 重新调整位置\n    HtmlCrosshair.prototype.resetPosition = function () {\n        var crosshairEl = this.get('crosshairEl');\n        if (!crosshairEl) {\n            this.initCrossHair();\n            crosshairEl = this.get('crosshairEl');\n        }\n        var start = this.get('start');\n        var end = this.get('end');\n        var minX = Math.min(start.x, end.x);\n        var minY = Math.min(start.y, end.y);\n        if (this.isVertical(start, end)) {\n            modifyCSS(crosshairEl, {\n                width: '1px',\n                height: toPx(Math.abs(end.y - start.y))\n            });\n        }\n        else {\n            modifyCSS(crosshairEl, {\n                height: '1px',\n                width: toPx(Math.abs(end.x - start.x))\n            });\n        }\n        modifyCSS(crosshairEl, {\n            top: toPx(minY),\n            left: toPx(minX)\n        });\n        this.alignText();\n    };\n    HtmlCrosshair.prototype.alignText = function () {\n        // 重新设置 text 位置\n        var textEl = this.get('textEl');\n        if (textEl) {\n            var align = this.get('text').align;\n            var clientWidth = textEl.clientWidth;\n            var point = this.getTextPoint();\n            switch (align) {\n                case 'center':\n                    point.x = point.x - clientWidth / 2;\n                    break;\n                case 'right':\n                    point.x = point.x - clientWidth;\n                case 'left':\n                    break;\n            }\n            modifyCSS(textEl, {\n                top: toPx(point.y),\n                left: toPx(point.x)\n            });\n        }\n    };\n    HtmlCrosshair.prototype.updateInner = function (cfg) {\n        if (hasKey(cfg, 'text')) {\n            this.resetText();\n        }\n        _super.prototype.updateInner.call(this, cfg);\n    };\n    return HtmlCrosshair;\n}(HtmlComponent));\nexport default HtmlCrosshair;\n//# sourceMappingURL=html.js.map","import { __assign, __extends } from \"tslib\";\nimport { each, isString, mix, isFunction } from '@antv/util';\nimport GroupComponent from '../abstract/group-component';\nimport Theme from '../util/theme';\nvar GridBase = /** @class */ (function (_super) {\n    __extends(GridBase, _super);\n    function GridBase() {\n        return _super !== null && _super.apply(this, arguments) || this;\n    }\n    GridBase.prototype.getDefaultCfg = function () {\n        var cfg = _super.prototype.getDefaultCfg.call(this);\n        return __assign(__assign({}, cfg), { name: 'grid', line: {}, alternateColor: null, capture: false, items: [], closed: false, defaultCfg: {\n                line: {\n                    type: 'line',\n                    style: {\n                        lineWidth: 1,\n                        stroke: Theme.lineColor,\n                    },\n                },\n            } });\n    };\n    /**\n     * 获取栅格线的类型\n     * @return {string} 栅格线类型\n     */\n    GridBase.prototype.getLineType = function () {\n        var line = this.get('line') || this.get('defaultCfg').line;\n        return line.type;\n    };\n    GridBase.prototype.renderInner = function (group) {\n        this.drawGrid(group);\n    };\n    GridBase.prototype.getAlternatePath = function (prePoints, points) {\n        var regionPath = this.getGridPath(prePoints);\n        var reversePoints = points.slice(0).reverse();\n        var nextPath = this.getGridPath(reversePoints, true);\n        var closed = this.get('closed');\n        if (closed) {\n            regionPath = regionPath.concat(nextPath);\n        }\n        else {\n            nextPath[0][0] = 'L'; // 更新第一个节点\n            regionPath = regionPath.concat(nextPath);\n            regionPath.push(['Z']);\n        }\n        return regionPath;\n    };\n    // 获取路径的配置项\n    GridBase.prototype.getPathStyle = function () {\n        return this.get('line').style;\n    };\n    // 绘制栅格\n    GridBase.prototype.drawGrid = function (group) {\n        var _this = this;\n        var line = this.get('line');\n        var items = this.get('items');\n        var alternateColor = this.get('alternateColor');\n        var preItem = null;\n        each(items, function (item, index) {\n            var id = item.id || index;\n            // 绘制栅格线\n            if (line) {\n                var style = _this.getPathStyle();\n                style = isFunction(style) ? style(item, index, items) : style;\n                var lineId = _this.getElementId(\"line-\" + id);\n                var gridPath = _this.getGridPath(item.points);\n                _this.addShape(group, {\n                    type: 'path',\n                    name: 'grid-line',\n                    id: lineId,\n                    attrs: mix({\n                        path: gridPath,\n                    }, style),\n                });\n            }\n            // 如果存在 alternateColor 则绘制矩形\n            // 从第二个栅格线开始绘制\n            if (alternateColor && index > 0) {\n                var regionId = _this.getElementId(\"region-\" + id);\n                var isEven = index % 2 === 0;\n                if (isString(alternateColor)) {\n                    // 如果颜色是单值，则是仅绘制偶数时的区域\n                    if (isEven) {\n                        _this.drawAlternateRegion(regionId, group, preItem.points, item.points, alternateColor);\n                    }\n                }\n                else {\n                    var color = isEven ? alternateColor[1] : alternateColor[0];\n                    _this.drawAlternateRegion(regionId, group, preItem.points, item.points, color);\n                }\n            }\n            preItem = item;\n        });\n    };\n    // 绘制栅格线间的间隔\n    GridBase.prototype.drawAlternateRegion = function (id, group, prePoints, points, color) {\n        var regionPath = this.getAlternatePath(prePoints, points);\n        this.addShape(group, {\n            type: 'path',\n            id: id,\n            name: 'grid-region',\n            attrs: {\n                path: regionPath,\n                fill: color,\n            },\n        });\n    };\n    return GridBase;\n}(GroupComponent));\nexport default GridBase;\n//# sourceMappingURL=base.js.map","import { __assign, __extends } from \"tslib\";\nimport { each } from '@antv/util';\nimport GridBase from './base';\nfunction distance(x1, y1, x2, y2) {\n    var dx = x2 - x1;\n    var dy = y2 - y1;\n    return Math.sqrt(dx * dx + dy * dy);\n}\nvar Circle = /** @class */ (function (_super) {\n    __extends(Circle, _super);\n    function Circle() {\n        return _super !== null && _super.apply(this, arguments) || this;\n    }\n    Circle.prototype.getDefaultCfg = function () {\n        var cfg = _super.prototype.getDefaultCfg.call(this);\n        return __assign(__assign({}, cfg), { type: 'circle', \n            /**\n             * 中心点\n             * @type {object}\n             */\n            center: null, \n            /**\n             * 栅格线是否封闭\n             * @type {true}\n             */\n            closed: true });\n    };\n    Circle.prototype.getGridPath = function (points, reversed) {\n        var lineType = this.getLineType();\n        var closed = this.get('closed');\n        var path = [];\n        if (points.length) {\n            // 防止出错\n            if (lineType === 'circle') {\n                var center = this.get('center');\n                var firstPoint = points[0];\n                var radius_1 = distance(center.x, center.y, firstPoint.x, firstPoint.y);\n                var sweepFlag_1 = reversed ? 0 : 1; // 顺时针还是逆时针\n                if (closed) {\n                    // 封闭时，绘制整个圆\n                    path.push(['M', center.x, center.y - radius_1]);\n                    path.push(['A', radius_1, radius_1, 0, 0, sweepFlag_1, center.x, center.y + radius_1]);\n                    path.push(['A', radius_1, radius_1, 0, 0, sweepFlag_1, center.x, center.y - radius_1]);\n                    path.push(['Z']);\n                }\n                else {\n                    each(points, function (point, index) {\n                        if (index === 0) {\n                            path.push(['M', point.x, point.y]);\n                        }\n                        else {\n                            path.push(['A', radius_1, radius_1, 0, 0, sweepFlag_1, point.x, point.y]);\n                        }\n                    });\n                }\n            }\n            else {\n                each(points, function (point, index) {\n                    if (index === 0) {\n                        path.push(['M', point.x, point.y]);\n                    }\n                    else {\n                        path.push(['L', point.x, point.y]);\n                    }\n                });\n                if (closed) {\n                    path.push(['Z']);\n                }\n            }\n        }\n        return path;\n    };\n    return Circle;\n}(GridBase));\nexport default Circle;\n//# sourceMappingURL=circle.js.map","import { __assign, __extends } from \"tslib\";\nimport { each } from '@antv/util';\nimport GridBase from './base';\nvar Line = /** @class */ (function (_super) {\n    __extends(Line, _super);\n    function Line() {\n        return _super !== null && _super.apply(this, arguments) || this;\n    }\n    Line.prototype.getDefaultCfg = function () {\n        var cfg = _super.prototype.getDefaultCfg.call(this);\n        return __assign(__assign({}, cfg), { type: 'line' });\n    };\n    Line.prototype.getGridPath = function (points) {\n        var path = [];\n        each(points, function (point, index) {\n            if (index === 0) {\n                path.push(['M', point.x, point.y]);\n            }\n            else {\n                path.push(['L', point.x, point.y]);\n            }\n        });\n        return path;\n    };\n    return Line;\n}(GridBase));\nexport default Line;\n//# sourceMappingURL=line.js.map","import { __assign, __extends } from \"tslib\";\nimport GroupComponent from '../abstract/group-component';\nimport { createBBox, formatPadding } from '../util/util';\nvar LegendBase = /** @class */ (function (_super) {\n    __extends(LegendBase, _super);\n    function LegendBase() {\n        return _super !== null && _super.apply(this, arguments) || this;\n    }\n    LegendBase.prototype.getDefaultCfg = function () {\n        var cfg = _super.prototype.getDefaultCfg.call(this);\n        return __assign(__assign({}, cfg), { name: 'legend', \n            /**\n             * 布局方式： horizontal，vertical\n             * @type {String}\n             */\n            layout: 'horizontal', locationType: 'point', x: 0, y: 0, offsetX: 0, offsetY: 0, title: null, background: null });\n    };\n    LegendBase.prototype.getLayoutBBox = function () {\n        var bbox = _super.prototype.getLayoutBBox.call(this);\n        var maxWidth = this.get('maxWidth');\n        var maxHeight = this.get('maxHeight');\n        var width = bbox.width, height = bbox.height;\n        if (maxWidth) {\n            width = Math.min(width, maxWidth);\n        }\n        if (maxHeight) {\n            height = Math.min(height, maxHeight);\n        }\n        return createBBox(bbox.minX, bbox.minY, width, height);\n    };\n    LegendBase.prototype.setLocation = function (cfg) {\n        this.set('x', cfg.x);\n        this.set('y', cfg.y);\n        this.resetLocation();\n    };\n    LegendBase.prototype.resetLocation = function () {\n        var x = this.get('x');\n        var y = this.get('y');\n        var offsetX = this.get('offsetX');\n        var offsetY = this.get('offsetY');\n        this.moveElementTo(this.get('group'), {\n            x: x + offsetX,\n            y: y + offsetY,\n        });\n    };\n    LegendBase.prototype.applyOffset = function () {\n        this.resetLocation();\n    };\n    // 获取当前绘制的点\n    LegendBase.prototype.getDrawPoint = function () {\n        return this.get('currentPoint');\n    };\n    LegendBase.prototype.setDrawPoint = function (point) {\n        return this.set('currentPoint', point);\n    };\n    // 复写父类定义的绘制方法\n    LegendBase.prototype.renderInner = function (group) {\n        this.resetDraw();\n        if (this.get('title')) {\n            this.drawTitle(group);\n        }\n        this.drawLegendContent(group);\n        if (this.get('background')) {\n            this.drawBackground(group);\n        }\n        // this.resetLocation(); // 在顶层已经在处理偏移时一起处理了\n    };\n    // 绘制背景\n    LegendBase.prototype.drawBackground = function (group) {\n        var background = this.get('background');\n        var bbox = group.getBBox();\n        var padding = formatPadding(background.padding);\n        var attrs = __assign({ \n            // 背景从 (0,0) 开始绘制\n            x: 0, y: 0, width: bbox.width + padding[1] + padding[3], height: bbox.height + padding[0] + padding[2] }, background.style);\n        var backgroundShape = this.addShape(group, {\n            type: 'rect',\n            id: this.getElementId('background'),\n            name: 'legend-background',\n            attrs: attrs,\n        });\n        backgroundShape.toBack();\n    };\n    // 绘制标题，标题在图例项的上面\n    LegendBase.prototype.drawTitle = function (group) {\n        var currentPoint = this.get('currentPoint');\n        var titleCfg = this.get('title');\n        var spacing = titleCfg.spacing, style = titleCfg.style, text = titleCfg.text;\n        var shape = this.addShape(group, {\n            type: 'text',\n            id: this.getElementId('title'),\n            name: 'legend-title',\n            attrs: __assign({ text: text, x: currentPoint.x, y: currentPoint.y }, style),\n        });\n        var bbox = shape.getBBox();\n        // 标题单独在一行\n        this.set('currentPoint', { x: currentPoint.x, y: bbox.maxY + spacing });\n    };\n    // 重置绘制时开始的位置，如果绘制边框，考虑边框的 padding\n    LegendBase.prototype.resetDraw = function () {\n        var background = this.get('background');\n        var currentPoint = { x: 0, y: 0 };\n        if (background) {\n            var padding = formatPadding(background.padding);\n            currentPoint.x = padding[3]; // 左边 padding\n            currentPoint.y = padding[0]; // 上面 padding\n        }\n        this.set('currentPoint', currentPoint); // 设置绘制的初始位置\n    };\n    return LegendBase;\n}(GroupComponent));\nexport default LegendBase;\n//# sourceMappingURL=base.js.map","import { __assign, __extends, __rest } from \"tslib\";\nimport { clamp, deepMix, each, filter, get, mix, isNumber, isFunction } from '@antv/util';\nimport { ellipsisLabel } from '../util/label';\nimport { getMatrixByAngle, getMatrixByTranslate } from '../util/matrix';\nimport { getStatesStyle } from '../util/state';\nimport Theme from '../util/theme';\nimport LegendBase from './base';\n/**\n * 分页器 默认配置\n */\nvar DEFAULT_PAGE_NAVIGATOR = {\n    marker: {\n        style: {\n            inactiveFill: '#000',\n            inactiveOpacity: 0.45,\n            fill: '#000',\n            opacity: 1,\n            size: 12,\n        },\n    },\n    text: {\n        style: {\n            fill: '#ccc',\n            fontSize: 12,\n        },\n    },\n};\n// 默认 文本style\nvar textStyle = {\n    fill: Theme.textColor,\n    fontSize: 12,\n    textAlign: 'start',\n    textBaseline: 'middle',\n    fontFamily: Theme.fontFamily,\n    fontWeight: 'normal',\n    lineHeight: 12,\n};\nvar RIGHT_ARROW_NAME = 'navigation-arrow-right';\nvar LEFT_ARROW_NAME = 'navigation-arrow-left';\nvar ROTATE_MAP = {\n    right: (90 * Math.PI) / 180,\n    left: ((360 - 90) * Math.PI) / 180,\n    up: 0,\n    down: (180 * Math.PI) / 180,\n};\nvar Category = /** @class */ (function (_super) {\n    __extends(Category, _super);\n    function Category() {\n        var _this = _super !== null && _super.apply(this, arguments) || this;\n        _this.currentPageIndex = 1;\n        _this.totalPagesCnt = 1;\n        _this.pageWidth = 0;\n        _this.pageHeight = 0;\n        _this.startX = 0;\n        _this.startY = 0;\n        _this.onNavigationBack = function () {\n            var itemGroup = _this.getElementByLocalId('item-group');\n            if (_this.currentPageIndex > 1) {\n                _this.currentPageIndex -= 1;\n                _this.updateNavigation();\n                var matrix = _this.getCurrentNavigationMatrix();\n                if (_this.get('animate')) {\n                    itemGroup.animate({\n                        matrix: matrix,\n                    }, 100);\n                }\n                else {\n                    itemGroup.attr({ matrix: matrix });\n                }\n            }\n        };\n        _this.onNavigationAfter = function () {\n            var itemGroup = _this.getElementByLocalId('item-group');\n            if (_this.currentPageIndex < _this.totalPagesCnt) {\n                _this.currentPageIndex += 1;\n                _this.updateNavigation();\n                var matrix = _this.getCurrentNavigationMatrix();\n                if (_this.get('animate')) {\n                    itemGroup.animate({\n                        matrix: matrix,\n                    }, 100);\n                }\n                else {\n                    itemGroup.attr({ matrix: matrix });\n                }\n            }\n        };\n        return _this;\n    }\n    Category.prototype.getDefaultCfg = function () {\n        var cfg = _super.prototype.getDefaultCfg.call(this);\n        return __assign(__assign({}, cfg), { name: 'legend', type: 'category', itemSpacing: 24, itemMarginBottom: 8, maxItemWidth: null, itemWidth: null, itemHeight: null, itemName: {}, itemValue: null, maxWidth: null, maxHeight: null, marker: {}, radio: null, items: [], itemStates: {}, itemBackground: {}, pageNavigator: {}, defaultCfg: {\n                title: {\n                    spacing: 5,\n                    style: {\n                        fill: Theme.textColor,\n                        fontSize: 12,\n                        textAlign: 'start',\n                        textBaseline: 'top',\n                    },\n                },\n                background: {\n                    padding: 5,\n                    style: {\n                        stroke: Theme.lineColor,\n                    },\n                },\n                itemBackground: {\n                    style: {\n                        opacity: 0,\n                        fill: '#fff',\n                    },\n                },\n                pageNavigator: DEFAULT_PAGE_NAVIGATOR,\n                itemName: {\n                    spacing: 16,\n                    style: textStyle,\n                },\n                marker: {\n                    spacing: 8,\n                    style: {\n                        r: 6,\n                        symbol: 'circle',\n                    },\n                },\n                itemValue: {\n                    alignRight: false,\n                    formatter: null,\n                    style: textStyle,\n                    spacing: 6,\n                },\n                itemStates: {\n                    active: {\n                        nameStyle: {\n                            opacity: 0.8,\n                        },\n                    },\n                    unchecked: {\n                        nameStyle: {\n                            fill: Theme.uncheckedColor,\n                        },\n                        markerStyle: {\n                            fill: Theme.uncheckedColor,\n                            stroke: Theme.uncheckedColor,\n                        },\n                    },\n                    inactive: {\n                        nameStyle: {\n                            fill: Theme.uncheckedColor,\n                        },\n                        markerStyle: {\n                            opacity: 0.2,\n                        },\n                    },\n                },\n            } });\n    };\n    // 实现 IList 接口\n    Category.prototype.isList = function () {\n        return true;\n    };\n    /**\n     * 获取图例项\n     * @return {ListItem[]} 列表项集合\n     */\n    Category.prototype.getItems = function () {\n        return this.get('items');\n    };\n    /**\n     * 设置列表项\n     * @param {ListItem[]} items 列表项集合\n     */\n    Category.prototype.setItems = function (items) {\n        this.update({\n            items: items,\n        });\n    };\n    /**\n     * 更新列表项\n     * @param {ListItem} item 列表项\n     * @param {object}   cfg  列表项\n     */\n    Category.prototype.updateItem = function (item, cfg) {\n        mix(item, cfg);\n        this.clear(); // 由于单个图例项变化，会引起全局变化，所以全部更新\n        this.render();\n    };\n    /**\n     * 清空列表\n     */\n    Category.prototype.clearItems = function () {\n        var itemGroup = this.getElementByLocalId('item-group');\n        itemGroup && itemGroup.clear();\n    };\n    /**\n     * 设置列表项的状态\n     * @param {ListItem} item  列表项\n     * @param {string}   state 状态名\n     * @param {boolean}  value 状态值, true, false\n     */\n    Category.prototype.setItemState = function (item, state, value) {\n        item[state] = value;\n        var itemElement = this.getElementByLocalId(\"item-\" + item.id);\n        if (itemElement) {\n            var items = this.getItems();\n            var index = items.indexOf(item);\n            var offsetGroup = this.createOffScreenGroup(); // 离屏的 group\n            var newElement = this.drawItem(item, index, this.getItemHeight(), offsetGroup);\n            this.updateElements(newElement, itemElement); // 更新整个分组\n            this.clearUpdateStatus(itemElement); // 清理更新状态，防止出现 bug\n        }\n    };\n    /**\n     * 是否存在指定的状态\n     * @param {ListItem} item  列表项\n     * @param {boolean} state 状态名\n     */\n    Category.prototype.hasState = function (item, state) {\n        return !!item[state];\n    };\n    Category.prototype.getItemStates = function (item) {\n        var itemStates = this.get('itemStates');\n        var rst = [];\n        each(itemStates, function (v, k) {\n            if (item[k]) {\n                // item.selected\n                rst.push(k);\n            }\n        });\n        return rst;\n    };\n    /**\n     * 清楚所有列表项的状态\n     * @param {string} state 状态值\n     */\n    Category.prototype.clearItemsState = function (state) {\n        var _this = this;\n        var items = this.getItemsByState(state);\n        each(items, function (item) {\n            _this.setItemState(item, state, false);\n        });\n    };\n    /**\n     * 根据状态获取图例项\n     * @param  {string}     state [description]\n     * @return {ListItem[]}       [description]\n     */\n    Category.prototype.getItemsByState = function (state) {\n        var _this = this;\n        var items = this.getItems();\n        return filter(items, function (item) {\n            return _this.hasState(item, state);\n        });\n    };\n    // 绘制 legend 的选项\n    Category.prototype.drawLegendContent = function (group) {\n        this.processItems();\n        this.drawItems(group);\n    };\n    // 防止未设置 id\n    Category.prototype.processItems = function () {\n        var items = this.get('items');\n        each(items, function (item) {\n            if (!item.id) {\n                // 如果没有设置 id，默认使用 name\n                item.id = item.name;\n            }\n        });\n    };\n    // 绘制所有的图例选项\n    Category.prototype.drawItems = function (group) {\n        var _this = this;\n        var itemContainerGroup = this.addGroup(group, {\n            id: this.getElementId('item-container-group'),\n            name: 'legend-item-container-group',\n        });\n        var itemGroup = this.addGroup(itemContainerGroup, {\n            id: this.getElementId('item-group'),\n            name: 'legend-item-group',\n        });\n        var itemHeight = this.getItemHeight();\n        var itemWidth = this.get('itemWidth');\n        var itemSpacing = this.get('itemSpacing');\n        var itemMarginBottom = this.get('itemMarginBottom');\n        var currentPoint = this.get('currentPoint');\n        var startX = currentPoint.x;\n        var startY = currentPoint.y;\n        var layout = this.get('layout');\n        var items = this.get('items');\n        var wrapped = false;\n        var pageWidth = 0;\n        var maxWidth = this.get('maxWidth'); // 最大宽度，会导致 layout : 'horizontal' 时自动换行\n        var maxHeight = this.get('maxHeight'); // 最大高度，会导致出现分页\n        // 暂时不考虑分页\n        each(items, function (item, index) {\n            var subGroup = _this.drawItem(item, index, itemHeight, itemGroup);\n            var bbox = subGroup.getBBox();\n            var width = itemWidth || bbox.width;\n            if (width > pageWidth) {\n                pageWidth = width;\n            }\n            if (layout === 'horizontal') {\n                // 如果水平布局\n                if (maxWidth && maxWidth < currentPoint.x + width - startX) {\n                    // 检测是否换行\n                    wrapped = true;\n                    currentPoint.x = startX;\n                    currentPoint.y += itemHeight + itemMarginBottom;\n                }\n                _this.moveElementTo(subGroup, currentPoint);\n                currentPoint.x += width + itemSpacing;\n            }\n            else {\n                // 如果垂直布局\n                if (maxHeight && maxHeight < currentPoint.y + itemHeight + itemMarginBottom - startY) {\n                    // 换行\n                    wrapped = true;\n                    currentPoint.x += pageWidth + itemSpacing;\n                    currentPoint.y = startY;\n                    pageWidth = 0;\n                }\n                _this.moveElementTo(subGroup, currentPoint);\n                currentPoint.y += itemHeight + itemMarginBottom; // itemSpacing 仅影响水平间距\n            }\n        });\n        if (wrapped && this.get('flipPage')) {\n            this.pageHeight = 0;\n            this.pageWidth = 0;\n            this.totalPagesCnt = 1;\n            this.startX = startX;\n            this.startY = startY;\n            this.adjustNavigation(group, itemGroup);\n        }\n    };\n    // 获取图例项的高度，如果未定义，则按照 name 的高度计算\n    Category.prototype.getItemHeight = function () {\n        var itemHeight = this.get('itemHeight');\n        if (!itemHeight) {\n            var style_1 = (this.get('itemName') || {}).style;\n            if (isFunction(style_1)) {\n                var items_1 = this.getItems();\n                items_1.forEach(function (item, index) {\n                    var fontSize = __assign(__assign({}, textStyle), style_1(item, index, items_1)).fontSize;\n                    if (itemHeight < fontSize) {\n                        itemHeight = fontSize;\n                    }\n                });\n            }\n            else if (style_1) {\n                itemHeight = style_1.fontSize;\n            }\n        }\n        return itemHeight;\n    };\n    // 绘制 marker\n    Category.prototype.drawMarker = function (container, markerCfg, item, itemHeight) {\n        var markerAttrs = __assign(__assign(__assign({ x: 0, y: itemHeight / 2 }, markerCfg.style), { symbol: get(item.marker, 'symbol', 'circle') }), get(item.marker, 'style', {}));\n        var shape = this.addShape(container, {\n            type: 'marker',\n            id: this.getElementId(\"item-\" + item.id + \"-marker\"),\n            name: 'legend-item-marker',\n            attrs: markerAttrs,\n        });\n        var bbox = shape.getBBox();\n        shape.attr('x', bbox.width / 2); // marker 需要左对齐，所以不能占用左侧的空间\n        var _a = shape.attr(), stroke = _a.stroke, fill = _a.fill;\n        if (stroke) {\n            shape.set('isStroke', true);\n        }\n        if (fill) {\n            shape.set('isFill', true);\n        }\n        return shape;\n    };\n    // 绘制文本\n    Category.prototype.drawItemText = function (container, textName, cfg, item, itemHeight, xPosition, index) {\n        var formatter = cfg.formatter;\n        var style = cfg.style;\n        var attrs = __assign(__assign({ x: xPosition, y: itemHeight / 2, text: formatter ? formatter(item[textName], item, index) : item[textName] }, textStyle), (isFunction(style) ? style(item, index, this.getItems()) : style));\n        return this.addShape(container, {\n            type: 'text',\n            id: this.getElementId(\"item-\" + item.id + \"-\" + textName),\n            name: \"legend-item-\" + textName,\n            attrs: attrs,\n        });\n    };\n    Category.prototype.drawRadio = function (container, radioCfg, item, itemHeight, x) {\n        var _a, _b;\n        var style = radioCfg.style || {};\n        // 以用户设置的 r 为主\n        var r = (_a = style.r) !== null && _a !== void 0 ? _a : itemHeight / 2;\n        var lineWidth = (r * 3.6) / 8;\n        var _c = [x + r, itemHeight / 2 - r], x0 = _c[0], y0 = _c[1];\n        var _d = [x0 + r, y0 + r], x1 = _d[0], y1 = _d[1];\n        var _e = [x0, y1 + r], x2 = _e[0], y2 = _e[1];\n        var _f = [x, y0 + r], x3 = _f[0], y3 = _f[1];\n        var showRadio = item.showRadio;\n        var attrs = __assign(__assign({ path: [\n                ['M', x0, y0],\n                ['A', r, r, 0, 0, 1, x1, y1],\n                ['L', x1 - lineWidth, y1],\n                ['L', x1, y1],\n                ['A', r, r, 0, 0, 1, x2, y2],\n                ['L', x2, y2 - lineWidth],\n                ['L', x2, y2],\n                ['A', r, r, 0, 0, 1, x3, y3],\n                ['L', x3 + lineWidth, y3],\n                ['L', x3, y3],\n                ['A', r, r, 0, 0, 1, x0, y0],\n                ['L', x0, y0 + lineWidth],\n            ], stroke: '#000000', fill: '#ffffff' }, style), { opacity: showRadio ? ((_b = style === null || style === void 0 ? void 0 : style.opacity) !== null && _b !== void 0 ? _b : 0.45) : 0 });\n        var radioShape = this.addShape(container, {\n            type: 'path',\n            id: this.getElementId(\"item-\" + item.id + \"-radio\"),\n            name: 'legend-item-radio',\n            attrs: attrs,\n        });\n        radioShape.set('tip', radioCfg.tip);\n        return radioShape;\n    };\n    // 绘制图例项\n    Category.prototype.drawItem = function (item, index, itemHeight, itemGroup) {\n        var groupId = \"item-\" + item.id;\n        // 设置单独的 Group 用于 setClip\n        var subContainer = this.addGroup(itemGroup, {\n            name: 'legend-item-container',\n            id: this.getElementId(\"item-container-\" + groupId),\n            delegateObject: {\n                item: item,\n                index: index,\n            },\n        });\n        var subGroup = this.addGroup(subContainer, {\n            name: 'legend-item',\n            id: this.getElementId(groupId),\n            delegateObject: {\n                item: item,\n                index: index,\n            },\n        });\n        var marker = this.get('marker');\n        var itemName = this.get('itemName');\n        var itemValue = this.get('itemValue');\n        var itemBackground = this.get('itemBackground');\n        var radio = this.get('radio');\n        var itemWidth = this.getLimitItemWidth();\n        var curX = 0; // 记录当前 x 的位置\n        if (marker) {\n            var markerShape = this.drawMarker(subGroup, marker, item, itemHeight);\n            var spacing = marker.spacing;\n            var itemMarkerSpacing = get(item, ['marker', 'spacing']);\n            if (isNumber(itemMarkerSpacing)) {\n                // 如果 item 有配置 marker.spacing，采用 item 的配置\n                spacing = itemMarkerSpacing;\n            }\n            curX = markerShape.getBBox().maxX + spacing;\n        }\n        if (itemName) {\n            var nameShape = this.drawItemText(subGroup, 'name', itemName, item, itemHeight, curX, index);\n            if (itemWidth) {\n                // 设置了 item 的最大宽度限制，并且超出了，进行省略处理\n                ellipsisLabel(true, nameShape, clamp(itemWidth - curX, 0, itemWidth));\n            }\n            curX = nameShape.getBBox().maxX + itemName.spacing;\n        }\n        if (itemValue) {\n            var valueShape = this.drawItemText(subGroup, 'value', itemValue, item, itemHeight, curX, index);\n            if (itemWidth) {\n                if (itemValue.alignRight) {\n                    valueShape.attr({\n                        textAlign: 'right',\n                        x: itemWidth,\n                    });\n                    ellipsisLabel(true, valueShape, clamp(itemWidth - curX, 0, itemWidth), 'head');\n                }\n                else {\n                    ellipsisLabel(true, valueShape, clamp(itemWidth - curX, 0, itemWidth));\n                }\n            }\n            curX = valueShape.getBBox().maxX + itemValue.spacing;\n        }\n        if (radio) {\n            this.drawRadio(subGroup, radio, item, itemHeight, curX);\n        }\n        // 添加透明的背景，便于拾取和包围盒计算\n        if (itemBackground) {\n            var bbox = subGroup.getBBox();\n            var backShape = this.addShape(subGroup, {\n                type: 'rect',\n                name: 'legend-item-background',\n                id: this.getElementId(groupId + \"-background\"),\n                attrs: __assign({ x: 0, y: 0, width: bbox.width, height: itemHeight }, itemBackground.style),\n            });\n            backShape.toBack();\n        }\n        this.applyItemStates(item, subGroup);\n        return subGroup;\n    };\n    // 加上分页器并重新排序 items\n    Category.prototype.adjustNavigation = function (container, itemGroup) {\n        var _this = this;\n        var startX = this.startX;\n        var startY = this.startY;\n        var layout = this.get('layout');\n        var subGroups = itemGroup.findAll(function (item) { return item.get('name') === 'legend-item'; });\n        var maxWidth = this.get('maxWidth');\n        var maxHeight = this.get('maxHeight');\n        var itemWidth = this.get('itemWidth');\n        var itemSpacing = this.get('itemSpacing');\n        var itemHeight = this.getItemHeight();\n        var pageNavigator = deepMix({}, DEFAULT_PAGE_NAVIGATOR, this.get('pageNavigator'));\n        var navigation = this.drawNavigation(container, layout, '00/00', pageNavigator);\n        var navigationBBox = navigation.getBBox();\n        var currentPoint = { x: startX, y: startY };\n        var pages = 1;\n        var widthLimit = 0;\n        var pageWidth = 0;\n        var maxItemWidth = 0;\n        var itemMarginBottom = this.get('itemMarginBottom');\n        /**  判断当前 item 是否溢出当前页。是的话，需要换行 */\n        function shouldWrap(item, currentPoint) {\n            var bbox = item.getBBox();\n            var width = itemWidth || bbox.width;\n            var newItemXPos = currentPoint.x + width + itemSpacing + navigationBBox.width;\n            return newItemXPos > maxWidth;\n        }\n        if (layout === 'horizontal') {\n            var maxRow = this.get('maxRow') || 1;\n            var maxRowHeight_1 = itemHeight + (maxRow === 1 ? 0 : itemMarginBottom);\n            // 分页器一直靠右上角\n            var navigationX_1 = maxWidth - itemSpacing - navigationBBox.width - navigationBBox.minX; // 理论上不需要减 navigationBBox.minX\n            this.pageHeight = maxRowHeight_1 * maxRow;\n            this.pageWidth = navigationX_1;\n            each(subGroups, function (item) {\n                var bbox = item.getBBox();\n                var width = itemWidth || bbox.width;\n                if ((widthLimit && widthLimit < currentPoint.x + width + itemSpacing) ||\n                    shouldWrap(item, currentPoint)) {\n                    if (pages === 1) {\n                        widthLimit = currentPoint.x + itemSpacing;\n                        _this.moveElementTo(navigation, {\n                            x: navigationX_1,\n                            y: currentPoint.y + itemHeight / 2 - navigationBBox.height / 2 - navigationBBox.minY,\n                        });\n                    }\n                    pages += 1;\n                    currentPoint.x = startX;\n                    currentPoint.y += maxRowHeight_1;\n                }\n                _this.moveElementTo(item, currentPoint);\n                item.getParent().setClip({\n                    type: 'rect',\n                    attrs: {\n                        x: currentPoint.x,\n                        y: currentPoint.y,\n                        width: width + itemSpacing,\n                        height: itemHeight,\n                    },\n                });\n                currentPoint.x += width + itemSpacing;\n            });\n        }\n        else {\n            each(subGroups, function (item) {\n                var bbox = item.getBBox();\n                if (bbox.width > pageWidth) {\n                    pageWidth = bbox.width;\n                }\n            });\n            maxItemWidth = pageWidth;\n            pageWidth += itemSpacing;\n            if (maxWidth) {\n                // maxWidth 限制加上\n                pageWidth = Math.min(maxWidth, pageWidth);\n                maxItemWidth = Math.min(maxWidth, maxItemWidth);\n            }\n            this.pageWidth = pageWidth;\n            this.pageHeight = maxHeight - Math.max(navigationBBox.height, itemHeight + itemMarginBottom);\n            var cntPerPage_1 = Math.floor(this.pageHeight / (itemHeight + itemMarginBottom));\n            each(subGroups, function (item, index) {\n                if (index !== 0 && index % cntPerPage_1 === 0) {\n                    pages += 1;\n                    currentPoint.x += pageWidth;\n                    currentPoint.y = startY;\n                }\n                _this.moveElementTo(item, currentPoint);\n                item.getParent().setClip({\n                    type: 'rect',\n                    attrs: {\n                        x: currentPoint.x,\n                        y: currentPoint.y,\n                        width: pageWidth,\n                        height: itemHeight,\n                    },\n                });\n                currentPoint.y += itemHeight + itemMarginBottom;\n            });\n            this.totalPagesCnt = pages;\n            this.moveElementTo(navigation, {\n                x: startX + maxItemWidth / 2 - navigationBBox.width / 2 - navigationBBox.minX,\n                y: maxHeight - navigationBBox.height - navigationBBox.minY,\n            });\n        }\n        if (this.pageHeight && this.pageWidth) {\n            // 为了使固定的 clip 生效，clip 设置在 itemContainerGroup 上，itemGroup 需要在翻页时会设置 matrix\n            itemGroup.getParent().setClip({\n                type: 'rect',\n                attrs: {\n                    x: this.startX,\n                    y: this.startY,\n                    width: this.pageWidth,\n                    height: this.pageHeight,\n                },\n            });\n        }\n        // 重新计算 totalPagesCnt\n        if (layout === 'horizontal' && this.get('maxRow')) {\n            this.totalPagesCnt = Math.ceil(pages / this.get('maxRow'));\n        }\n        else {\n            this.totalPagesCnt = pages;\n        }\n        if (this.currentPageIndex > this.totalPagesCnt) {\n            this.currentPageIndex = 1;\n        }\n        this.updateNavigation(navigation);\n        // update initial matrix\n        itemGroup.attr('matrix', this.getCurrentNavigationMatrix());\n    };\n    /**\n     * 绘制分页器\n     */\n    Category.prototype.drawNavigation = function (group, layout, text, styleCfg) {\n        var currentPoint = { x: 0, y: 0 };\n        var subGroup = this.addGroup(group, {\n            id: this.getElementId('navigation-group'),\n            name: 'legend-navigation',\n        });\n        var _a = get(styleCfg.marker, 'style', {}), _b = _a.size, size = _b === void 0 ? 12 : _b, arrowStyle = __rest(_a, [\"size\"]);\n        var leftArrow = this.drawArrow(subGroup, currentPoint, LEFT_ARROW_NAME, layout === 'horizontal' ? 'up' : 'left', size, arrowStyle);\n        leftArrow.on('click', this.onNavigationBack);\n        var leftArrowBBox = leftArrow.getBBox();\n        currentPoint.x += leftArrowBBox.width + 2;\n        var textShape = this.addShape(subGroup, {\n            type: 'text',\n            id: this.getElementId('navigation-text'),\n            name: 'navigation-text',\n            attrs: __assign({ x: currentPoint.x, y: currentPoint.y + size / 2, text: text, textBaseline: 'middle' }, get(styleCfg.text, 'style')),\n        });\n        var textBBox = textShape.getBBox();\n        currentPoint.x += textBBox.width + 2;\n        var rightArrow = this.drawArrow(subGroup, currentPoint, RIGHT_ARROW_NAME, layout === 'horizontal' ? 'down' : 'right', size, arrowStyle);\n        rightArrow.on('click', this.onNavigationAfter);\n        return subGroup;\n    };\n    Category.prototype.updateNavigation = function (navigation) {\n        var pageNavigator = deepMix({}, DEFAULT_PAGE_NAVIGATOR, this.get('pageNavigator'));\n        var _a = pageNavigator.marker.style, fill = _a.fill, opacity = _a.opacity, inactiveFill = _a.inactiveFill, inactiveOpacity = _a.inactiveOpacity;\n        var text = this.currentPageIndex + \"/\" + this.totalPagesCnt;\n        var textShape = navigation ? navigation.getChildren()[1] : this.getElementByLocalId('navigation-text');\n        var leftArrow = navigation\n            ? navigation.findById(this.getElementId(LEFT_ARROW_NAME))\n            : this.getElementByLocalId(LEFT_ARROW_NAME);\n        var rightArrow = navigation\n            ? navigation.findById(this.getElementId(RIGHT_ARROW_NAME))\n            : this.getElementByLocalId(RIGHT_ARROW_NAME);\n        textShape.attr('text', text);\n        // 更新 left-arrow marker\n        leftArrow.attr('opacity', this.currentPageIndex === 1 ? inactiveOpacity : opacity);\n        leftArrow.attr('fill', this.currentPageIndex === 1 ? inactiveFill : fill);\n        leftArrow.attr('cursor', this.currentPageIndex === 1 ? 'not-allowed' : 'pointer');\n        // 更新 right-arrow marker\n        rightArrow.attr('opacity', this.currentPageIndex === this.totalPagesCnt ? inactiveOpacity : opacity);\n        rightArrow.attr('fill', this.currentPageIndex === this.totalPagesCnt ? inactiveFill : fill);\n        rightArrow.attr('cursor', this.currentPageIndex === this.totalPagesCnt ? 'not-allowed' : 'pointer');\n        // 更新位置\n        var cursorX = leftArrow.getBBox().maxX + 2;\n        textShape.attr('x', cursorX);\n        cursorX += textShape.getBBox().width + 2;\n        this.updateArrowPath(rightArrow, { x: cursorX, y: 0 });\n    };\n    Category.prototype.drawArrow = function (group, currentPoint, name, direction, size, style) {\n        var x = currentPoint.x, y = currentPoint.y;\n        var shape = this.addShape(group, {\n            type: 'path',\n            id: this.getElementId(name),\n            name: name,\n            attrs: __assign({ size: size,\n                direction: direction, path: [['M', x + size / 2, y], ['L', x, y + size], ['L', x + size, y + size], ['Z']], cursor: 'pointer' }, style),\n        });\n        shape.attr('matrix', getMatrixByAngle({ x: x + size / 2, y: y + size / 2 }, ROTATE_MAP[direction]));\n        return shape;\n    };\n    /**\n     * 更新分页器 arrow 组件\n     */\n    Category.prototype.updateArrowPath = function (arrow, point) {\n        var x = point.x, y = point.y;\n        var _a = arrow.attr(), size = _a.size, direction = _a.direction;\n        var matrix = getMatrixByAngle({ x: x + size / 2, y: y + size / 2 }, ROTATE_MAP[direction]);\n        arrow.attr('path', [['M', x + size / 2, y], ['L', x, y + size], ['L', x + size, y + size], ['Z']]);\n        arrow.attr('matrix', matrix);\n    };\n    Category.prototype.getCurrentNavigationMatrix = function () {\n        var _a = this, currentPageIndex = _a.currentPageIndex, pageWidth = _a.pageWidth, pageHeight = _a.pageHeight;\n        var layout = this.get('layout');\n        var translate = layout === 'horizontal'\n            ? {\n                x: 0,\n                y: pageHeight * (1 - currentPageIndex),\n            }\n            : {\n                x: pageWidth * (1 - currentPageIndex),\n                y: 0,\n            };\n        return getMatrixByTranslate(translate);\n    };\n    // 附加状态对应的样式\n    Category.prototype.applyItemStates = function (item, subGroup) {\n        var states = this.getItemStates(item);\n        var hasStates = states.length > 0;\n        if (hasStates) {\n            var children = subGroup.getChildren();\n            var itemStates_1 = this.get('itemStates');\n            each(children, function (element) {\n                var name = element.get('name');\n                var elName = name.split('-')[2]; // marker, name, value\n                var statesStyle = getStatesStyle(item, elName, itemStates_1);\n                if (statesStyle) {\n                    element.attr(statesStyle);\n                    if (elName === 'marker' && !(element.get('isStroke') && element.get('isFill'))) {\n                        // 如果 marker 是单填充或者单描边的话，就不要额外添加 stroke 或这 fill 属性，否则会影响 unchecked 后的显示\n                        if (element.get('isStroke')) {\n                            element.attr('fill', null);\n                        }\n                        if (element.get('isFill')) {\n                            element.attr('stroke', null);\n                        }\n                    }\n                }\n            });\n        }\n    };\n    // 获取 itemWidth 的最终设置\n    Category.prototype.getLimitItemWidth = function () {\n        var itemWidth = this.get('itemWidth');\n        var maxItemWidth = this.get('maxItemWidth');\n        if (maxItemWidth) {\n            // 设置了最大宽度\n            if (itemWidth) {\n                maxItemWidth = itemWidth <= maxItemWidth ? itemWidth : maxItemWidth;\n            }\n        }\n        else if (itemWidth) {\n            maxItemWidth = itemWidth;\n        }\n        return maxItemWidth;\n    };\n    return Category;\n}(LegendBase));\nexport default Category;\n//# sourceMappingURL=category.js.map","import { __assign, __extends, __spreadArrays } from \"tslib\";\nimport { clone, isFunction, mix, upperFirst } from '@antv/util';\nimport Theme from '../util/theme';\nimport { getValueByPercent } from '../util/util';\nimport LegendBase from './base';\nvar HANDLER_HEIGHT_RATIO = 1.4;\nvar HANDLER_TRIANGLE_RATIO = 0.4;\nvar ContinueLegend = /** @class */ (function (_super) {\n    __extends(ContinueLegend, _super);\n    function ContinueLegend() {\n        return _super !== null && _super.apply(this, arguments) || this;\n    }\n    ContinueLegend.prototype.getDefaultCfg = function () {\n        var cfg = _super.prototype.getDefaultCfg.call(this);\n        return __assign(__assign({}, cfg), { type: 'continue', min: 0, max: 100, value: null, colors: [], track: {}, rail: {}, label: {}, handler: {}, slidable: true, tip: null, step: null, maxWidth: null, maxHeight: null, defaultCfg: {\n                label: {\n                    align: 'rail',\n                    spacing: 5,\n                    formatter: null,\n                    style: {\n                        fontSize: 12,\n                        fill: Theme.textColor,\n                        textBaseline: 'middle',\n                        fontFamily: Theme.fontFamily,\n                    },\n                },\n                handler: {\n                    size: 10,\n                    style: {\n                        fill: '#fff',\n                        stroke: '#333',\n                    },\n                },\n                track: {},\n                rail: {\n                    type: 'color',\n                    size: 20,\n                    defaultLength: 100,\n                    style: {\n                        fill: '#DCDEE2',\n                    },\n                },\n                title: {\n                    spacing: 5,\n                    style: {\n                        fill: Theme.textColor,\n                        fontSize: 12,\n                        textAlign: 'start',\n                        textBaseline: 'top',\n                    },\n                },\n            } });\n    };\n    ContinueLegend.prototype.isSlider = function () {\n        return true;\n    };\n    // 实现 IList 接口\n    ContinueLegend.prototype.getValue = function () {\n        return this.getCurrentValue();\n    };\n    ContinueLegend.prototype.getRange = function () {\n        return {\n            min: this.get('min'),\n            max: this.get('max'),\n        };\n    };\n    // 改变 range\n    ContinueLegend.prototype.setRange = function (min, max) {\n        this.update({\n            min: min,\n            max: max,\n        });\n    };\n    ContinueLegend.prototype.setValue = function (value) {\n        var originValue = this.getValue();\n        this.set('value', value);\n        var group = this.get('group');\n        this.resetTrackClip();\n        if (this.get('slidable')) {\n            this.resetHandlers(group);\n        }\n        this.delegateEmit('valuechanged', {\n            originValue: originValue,\n            value: value,\n        });\n    };\n    ContinueLegend.prototype.initEvent = function () {\n        var group = this.get('group');\n        this.bindSliderEvent(group);\n        this.bindRailEvent(group);\n        this.bindTrackEvent(group);\n    };\n    ContinueLegend.prototype.drawLegendContent = function (group) {\n        this.drawRail(group);\n        this.drawLabels(group);\n        this.fixedElements(group); // 调整各个图形位置，适应宽高的限制\n        this.resetTrack(group);\n        this.resetTrackClip(group);\n        if (this.get('slidable')) {\n            this.resetHandlers(group);\n        }\n    };\n    ContinueLegend.prototype.bindSliderEvent = function (group) {\n        this.bindHandlersEvent(group);\n    };\n    ContinueLegend.prototype.bindHandlersEvent = function (group) {\n        var _this = this;\n        group.on('legend-handler-min:drag', function (ev) {\n            var minValue = _this.getValueByCanvasPoint(ev.x, ev.y);\n            var currentValue = _this.getCurrentValue();\n            var maxValue = currentValue[1];\n            if (maxValue < minValue) {\n                // 如果小于最小值，则调整最小值\n                maxValue = minValue;\n            }\n            _this.setValue([minValue, maxValue]);\n        });\n        group.on('legend-handler-max:drag', function (ev) {\n            var maxValue = _this.getValueByCanvasPoint(ev.x, ev.y);\n            var currentValue = _this.getCurrentValue();\n            var minValue = currentValue[0];\n            if (minValue > maxValue) {\n                // 如果小于最小值，则调整最小值\n                minValue = maxValue;\n            }\n            _this.setValue([minValue, maxValue]);\n        });\n    };\n    ContinueLegend.prototype.bindRailEvent = function (group) { };\n    ContinueLegend.prototype.bindTrackEvent = function (group) {\n        var _this = this;\n        var prePoint = null;\n        group.on('legend-track:dragstart', function (ev) {\n            prePoint = {\n                x: ev.x,\n                y: ev.y,\n            };\n        });\n        group.on('legend-track:drag', function (ev) {\n            if (!prePoint) {\n                return;\n            }\n            var preValue = _this.getValueByCanvasPoint(prePoint.x, prePoint.y);\n            var curValue = _this.getValueByCanvasPoint(ev.x, ev.y);\n            var currentValue = _this.getCurrentValue();\n            var curDiff = currentValue[1] - currentValue[0];\n            var range = _this.getRange();\n            var dValue = curValue - preValue;\n            if (dValue < 0) {\n                // 减小, 同时未出边界\n                if (currentValue[0] + dValue > range.min) {\n                    _this.setValue([currentValue[0] + dValue, currentValue[1] + dValue]);\n                }\n                else {\n                    _this.setValue([range.min, range.min + curDiff]);\n                }\n                //  && ||\n            }\n            else if (dValue > 0) {\n                if (dValue > 0 && currentValue[1] + dValue < range.max) {\n                    _this.setValue([currentValue[0] + dValue, currentValue[1] + dValue]);\n                }\n                else {\n                    _this.setValue([range.max - curDiff, range.max]);\n                }\n            }\n            prePoint = {\n                x: ev.x,\n                y: ev.y,\n            };\n        });\n        group.on('legend-track:dragend', function (ev) {\n            prePoint = null;\n        });\n    };\n    ContinueLegend.prototype.drawLabels = function (group) {\n        this.drawLabel('min', group);\n        this.drawLabel('max', group);\n    };\n    ContinueLegend.prototype.drawLabel = function (name, group) {\n        var labelCfg = this.get('label');\n        var style = labelCfg.style;\n        var labelAlign = labelCfg.align;\n        var labelFormatter = labelCfg.formatter;\n        var value = this.get(name);\n        var alignAttrs = this.getLabelAlignAttrs(name, labelAlign);\n        var localId = \"label-\" + name;\n        this.addShape(group, {\n            type: 'text',\n            id: this.getElementId(localId),\n            name: \"legend-label-\" + name,\n            attrs: __assign(__assign({ x: 0, y: 0, text: isFunction(labelFormatter) ? labelFormatter(value) : value }, style), alignAttrs),\n        });\n    };\n    // 获取文本的对齐方式，为了自适应真实操碎了心\n    ContinueLegend.prototype.getLabelAlignAttrs = function (name, align) {\n        var isVertical = this.isVertical();\n        var textAlign = 'center';\n        var textBaseline = 'middle';\n        if (isVertical) {\n            // 垂直布局的所有的文本都左对齐\n            textAlign = 'start';\n            if (align !== 'rail') {\n                if (name === 'min') {\n                    textBaseline = 'top';\n                }\n                else {\n                    textBaseline = 'bottom';\n                }\n            }\n            else {\n                textBaseline = 'top';\n            }\n        }\n        else {\n            if (align !== 'rail') {\n                textBaseline = 'top';\n                if (name === 'min') {\n                    textAlign = 'start';\n                }\n                else {\n                    textAlign = 'end';\n                }\n            }\n            else {\n                textAlign = 'start';\n                textBaseline = 'middle';\n            }\n        }\n        return {\n            textAlign: textAlign,\n            textBaseline: textBaseline,\n        };\n    };\n    ContinueLegend.prototype.getRailPath = function (x, y, w, h) {\n        var railCfg = this.get('rail');\n        var size = railCfg.size, defaultLength = railCfg.defaultLength, type = railCfg.type;\n        var isVertical = this.isVertical();\n        var length = defaultLength;\n        var width = w;\n        var height = h;\n        if (!width) {\n            width = isVertical ? size : length;\n        }\n        if (!height) {\n            height = isVertical ? length : size;\n        }\n        var path = [];\n        if (type === 'color') {\n            path.push(['M', x, y]);\n            path.push(['L', x + width, y]);\n            path.push(['L', x + width, y + height]);\n            path.push(['L', x, y + height]);\n            path.push(['Z']);\n        }\n        else {\n            path.push(['M', x + width, y]);\n            path.push(['L', x + width, y + height]);\n            path.push(['L', x, y + height]);\n            path.push(['Z']);\n        }\n        return path;\n    };\n    ContinueLegend.prototype.drawRail = function (group) {\n        var railCfg = this.get('rail');\n        var style = railCfg.style;\n        this.addShape(group, {\n            type: 'path',\n            id: this.getElementId('rail'),\n            name: 'legend-rail',\n            attrs: __assign({ path: this.getRailPath(0, 0) }, style),\n        });\n    };\n    // 将传入的颜色转换成渐变色\n    ContinueLegend.prototype.getTrackColor = function (colors) {\n        var count = colors.length;\n        if (!count) {\n            return null;\n        }\n        if (count === 1) {\n            return colors[0];\n        }\n        var color; // 最终形态 l(0) 0:colors[0] 0.5:colors[1] 1:colors[2];\n        if (this.isVertical()) {\n            // 根据方向设置渐变方向\n            color = 'l(90)';\n        }\n        else {\n            color = 'l(0)';\n        }\n        for (var i = 0; i < count; i++) {\n            var percent = i / (count - 1);\n            color += \" \" + percent + \":\" + colors[i];\n        }\n        return color;\n    };\n    ContinueLegend.prototype.getTrackPath = function (group) {\n        var railShape = this.getRailShape(group);\n        var path = railShape.attr('path');\n        return clone(path);\n    };\n    ContinueLegend.prototype.getClipTrackAttrs = function (group) {\n        var value = this.getCurrentValue();\n        var min = value[0], max = value[1];\n        var railBBox = this.getRailBBox(group);\n        var startPoint = this.getPointByValue(min, group);\n        var endPoint = this.getPointByValue(max, group);\n        var isVertical = this.isVertical();\n        var x;\n        var y;\n        var width;\n        var height;\n        if (isVertical) {\n            x = railBBox.minX;\n            y = startPoint.y;\n            width = railBBox.width;\n            height = endPoint.y - startPoint.y;\n        }\n        else {\n            x = startPoint.x;\n            y = railBBox.minY;\n            width = endPoint.x - startPoint.x;\n            height = railBBox.height;\n        }\n        return {\n            x: x,\n            y: y,\n            width: width,\n            height: height,\n        };\n    };\n    // 获取 track 的属性，由 path 和 颜色构成\n    ContinueLegend.prototype.getTrackAttrs = function (group) {\n        var trackCfg = this.get('track');\n        var colors = this.get('colors');\n        var path = this.getTrackPath(group);\n        return mix({\n            path: path,\n            fill: this.getTrackColor(colors),\n        }, trackCfg.style);\n    };\n    ContinueLegend.prototype.resetTrackClip = function (group) {\n        var container = group || this.get('group');\n        var trackId = this.getElementId('track');\n        var trackShape = container.findById(trackId);\n        var clipShape = trackShape.getClip();\n        var attrs = this.getClipTrackAttrs(group);\n        if (!clipShape) {\n            trackShape.setClip({\n                type: 'rect',\n                attrs: attrs,\n            });\n        }\n        else {\n            clipShape.attr(attrs);\n        }\n    };\n    ContinueLegend.prototype.resetTrack = function (group) {\n        var trackId = this.getElementId('track');\n        var trackShape = group.findById(trackId);\n        var trackAttrs = this.getTrackAttrs(group);\n        if (trackShape) {\n            trackShape.attr(trackAttrs);\n        }\n        else {\n            this.addShape(group, {\n                type: 'path',\n                id: trackId,\n                draggable: this.get('slidable'),\n                name: 'legend-track',\n                attrs: trackAttrs,\n            });\n        }\n    };\n    ContinueLegend.prototype.getPointByValue = function (value, group) {\n        var _a = this.getRange(), min = _a.min, max = _a.max;\n        var percent = (value - min) / (max - min);\n        var bbox = this.getRailBBox(group);\n        var isVertcal = this.isVertical();\n        var point = { x: 0, y: 0 };\n        if (isVertcal) {\n            point.x = bbox.minX + bbox.width / 2;\n            point.y = getValueByPercent(bbox.minY, bbox.maxY, percent);\n        }\n        else {\n            point.x = getValueByPercent(bbox.minX, bbox.maxX, percent);\n            point.y = bbox.minY + bbox.height / 2;\n        }\n        return point;\n    };\n    ContinueLegend.prototype.getRailShape = function (group) {\n        var container = group || this.get('group');\n        return container.findById(this.getElementId('rail'));\n    };\n    // 获取滑轨的宽高信息\n    ContinueLegend.prototype.getRailBBox = function (group) {\n        var railShape = this.getRailShape(group);\n        var bbox = railShape.getBBox();\n        return bbox;\n    };\n    ContinueLegend.prototype.getRailCanvasBBox = function () {\n        var container = this.get('group');\n        var railShape = container.findById(this.getElementId('rail'));\n        var bbox = railShape.getCanvasBBox();\n        return bbox;\n    };\n    // 是否垂直\n    ContinueLegend.prototype.isVertical = function () {\n        return this.get('layout') === 'vertical';\n    };\n    // 用于交互时\n    ContinueLegend.prototype.getValueByCanvasPoint = function (x, y) {\n        var _a = this.getRange(), min = _a.min, max = _a.max;\n        var bbox = this.getRailCanvasBBox(); // 因为 x, y 是画布坐标\n        var isVertcal = this.isVertical();\n        var step = this.get('step');\n        var percent;\n        if (isVertcal) {\n            // 垂直时计算 y\n            percent = (y - bbox.minY) / bbox.height;\n        }\n        else {\n            // 水平时计算 x\n            percent = (x - bbox.minX) / bbox.width;\n        }\n        var value = getValueByPercent(min, max, percent);\n        if (step) {\n            var count = Math.round((value - min) / step);\n            value = min + count * step; // 移动到最近的\n        }\n        if (value > max) {\n            value = max;\n        }\n        if (value < min) {\n            value = min;\n        }\n        return value;\n    };\n    // 当前选中的范围\n    ContinueLegend.prototype.getCurrentValue = function () {\n        var value = this.get('value');\n        if (!value) {\n            var values = this.get('values');\n            if (!values) {\n                return [this.get('min'), this.get('max')];\n            }\n            // 如果没有定义，取最大范围  最小值 为 values 中的最小值， 如果最小值 超过了 定义的最大值 则 做限制  最大值 反之\n            return [Math.max(Math.min.apply(Math, __spreadArrays(values, [this.get('max')])), this.get('min')), Math.min(Math.max.apply(Math, __spreadArrays(values, [this.get('min')])), this.get('max'))];\n        }\n        return value;\n    };\n    // 重置滑块 handler\n    ContinueLegend.prototype.resetHandlers = function (group) {\n        var currentValue = this.getCurrentValue();\n        var min = currentValue[0], max = currentValue[1];\n        this.resetHandler(group, 'min', min);\n        this.resetHandler(group, 'max', max);\n    };\n    // 获取滑块的 path\n    ContinueLegend.prototype.getHandlerPath = function (handlerCfg, point) {\n        var isVertical = this.isVertical();\n        var path = [];\n        var width = handlerCfg.size;\n        var x = point.x, y = point.y;\n        var height = width * HANDLER_HEIGHT_RATIO;\n        var halfWidth = width / 2;\n        var oneSixthWidth = width / 6;\n        if (isVertical) {\n            /**\n             * 竖直情况下的滑块 handler，左侧顶点是 x,y\n             *  /----|\n             *    -- |\n             *    -- |\n             *  \\----|\n             */\n            var triangleX = x + height * HANDLER_TRIANGLE_RATIO;\n            path.push(['M', x, y]);\n            path.push(['L', triangleX, y + halfWidth]);\n            path.push(['L', x + height, y + halfWidth]);\n            path.push(['L', x + height, y - halfWidth]);\n            path.push(['L', triangleX, y - halfWidth]);\n            path.push(['Z']);\n            // 绘制两条横线\n            path.push(['M', triangleX, y + oneSixthWidth]);\n            path.push(['L', x + height - 2, y + oneSixthWidth]);\n            path.push(['M', triangleX, y - oneSixthWidth]);\n            path.push(['L', x + height - 2, y - oneSixthWidth]);\n        }\n        else {\n            /**\n             * 水平情况下的滑块，上面顶点处是 x,y\n             *  /   \\\n             * | | | |\n             * | | | |\n             *  -----\n             */\n            var triangleY = y + height * HANDLER_TRIANGLE_RATIO;\n            path.push(['M', x, y]);\n            path.push(['L', x - halfWidth, triangleY]);\n            path.push(['L', x - halfWidth, y + height]);\n            path.push(['L', x + halfWidth, y + height]);\n            path.push(['L', x + halfWidth, triangleY]);\n            path.push(['Z']);\n            // 绘制两条竖线\n            path.push(['M', x - oneSixthWidth, triangleY]);\n            path.push(['L', x - oneSixthWidth, y + height - 2]);\n            path.push(['M', x + oneSixthWidth, triangleY]);\n            path.push(['L', x + oneSixthWidth, y + height - 2]);\n        }\n        return path;\n    };\n    // 调整 handler 的位置，如果未存在则绘制\n    ContinueLegend.prototype.resetHandler = function (group, name, value) {\n        var point = this.getPointByValue(value, group);\n        var handlerCfg = this.get('handler');\n        var path = this.getHandlerPath(handlerCfg, point);\n        var id = this.getElementId(\"handler-\" + name);\n        var handlerShape = group.findById(id);\n        var isVertical = this.isVertical();\n        if (handlerShape) {\n            handlerShape.attr('path', path);\n        }\n        else {\n            this.addShape(group, {\n                type: 'path',\n                name: \"legend-handler-\" + name,\n                draggable: true,\n                id: id,\n                attrs: __assign(__assign({ path: path }, handlerCfg.style), { cursor: isVertical ? 'ns-resize' : 'ew-resize' }),\n            });\n        }\n    };\n    // 当设置了 maxWidth, maxHeight 时调整 rail 的宽度，\n    // 文本的位置\n    ContinueLegend.prototype.fixedElements = function (group) {\n        var railShape = group.findById(this.getElementId('rail'));\n        var minLabel = group.findById(this.getElementId('label-min'));\n        var maxLabel = group.findById(this.getElementId('label-max'));\n        var startPoint = this.getDrawPoint();\n        if (this.isVertical()) {\n            // 横向布局\n            this.fixedVertail(minLabel, maxLabel, railShape, startPoint);\n        }\n        else {\n            // 水平布局\n            this.fixedHorizontal(minLabel, maxLabel, railShape, startPoint);\n        }\n    };\n    ContinueLegend.prototype.fitRailLength = function (minLabelBBox, maxLabelBBox, railBBox, railShape) {\n        var isVertical = this.isVertical();\n        var lengthField = isVertical ? 'height' : 'width';\n        var labelCfg = this.get('label');\n        var labelAlign = labelCfg.align;\n        var spacing = labelCfg.spacing;\n        var maxLength = this.get(\"max\" + upperFirst(lengthField)); // get('maxWidth')\n        if (maxLength) {\n            var elementsLength = labelAlign === 'rail'\n                ? railBBox[lengthField] + minLabelBBox[lengthField] + maxLabelBBox[lengthField] + spacing * 2\n                : railBBox[lengthField];\n            var diff = elementsLength - maxLength;\n            if (diff > 0) {\n                // 大于限制的长度\n                this.changeRailLength(railShape, lengthField, railBBox[lengthField] - diff);\n            }\n        }\n    };\n    ContinueLegend.prototype.changeRailLength = function (railShape, lengthField, length) {\n        var bbox = railShape.getBBox();\n        var path;\n        if (lengthField === 'height') {\n            path = this.getRailPath(bbox.x, bbox.y, bbox.width, length);\n        }\n        else {\n            path = this.getRailPath(bbox.x, bbox.y, length, bbox.height);\n        }\n        railShape.attr('path', path);\n    };\n    ContinueLegend.prototype.changeRailPosition = function (railShape, x, y) {\n        var bbox = railShape.getBBox();\n        var path = this.getRailPath(x, y, bbox.width, bbox.height);\n        railShape.attr('path', path);\n    };\n    ContinueLegend.prototype.fixedHorizontal = function (minLabel, maxLabel, railShape, startPoint) {\n        var labelCfg = this.get('label');\n        var labelAlign = labelCfg.align;\n        var spacing = labelCfg.spacing;\n        var railBBox = railShape.getBBox();\n        var minLabelBBox = minLabel.getBBox();\n        var maxLabelBBox = maxLabel.getBBox();\n        var railHeight = railBBox.height; // 取 rail 的高度，作为高度\n        this.fitRailLength(minLabelBBox, maxLabelBBox, railBBox, railShape);\n        railBBox = railShape.getBBox();\n        if (labelAlign === 'rail') {\n            // 沿着 rail 方向\n            minLabel.attr({\n                x: startPoint.x,\n                y: startPoint.y + railHeight / 2,\n            });\n            this.changeRailPosition(railShape, startPoint.x + minLabelBBox.width + spacing, startPoint.y);\n            maxLabel.attr({\n                x: startPoint.x + minLabelBBox.width + railBBox.width + spacing * 2,\n                y: startPoint.y + railHeight / 2,\n            });\n        }\n        else if (labelAlign === 'top') {\n            minLabel.attr({\n                x: startPoint.x,\n                y: startPoint.y,\n            });\n            maxLabel.attr({\n                x: startPoint.x + railBBox.width,\n                y: startPoint.y,\n            });\n            this.changeRailPosition(railShape, startPoint.x, startPoint.y + minLabelBBox.height + spacing);\n        }\n        else {\n            this.changeRailPosition(railShape, startPoint.x, startPoint.y);\n            minLabel.attr({\n                x: startPoint.x,\n                y: startPoint.y + railBBox.height + spacing,\n            });\n            maxLabel.attr({\n                x: startPoint.x + railBBox.width,\n                y: startPoint.y + railBBox.height + spacing,\n            });\n        }\n    };\n    ContinueLegend.prototype.fixedVertail = function (minLabel, maxLabel, railShape, startPoint) {\n        var labelCfg = this.get('label');\n        var labelAlign = labelCfg.align;\n        var spacing = labelCfg.spacing;\n        var railBBox = railShape.getBBox();\n        var minLabelBBox = minLabel.getBBox();\n        var maxLabelBBox = maxLabel.getBBox();\n        this.fitRailLength(minLabelBBox, maxLabelBBox, railBBox, railShape);\n        railBBox = railShape.getBBox();\n        if (labelAlign === 'rail') {\n            // 沿着 rail 方向\n            minLabel.attr({\n                x: startPoint.x,\n                y: startPoint.y,\n            });\n            this.changeRailPosition(railShape, startPoint.x, startPoint.y + minLabelBBox.height + spacing);\n            maxLabel.attr({\n                x: startPoint.x,\n                y: startPoint.y + minLabelBBox.height + railBBox.height + spacing * 2,\n            });\n        }\n        else if (labelAlign === 'right') {\n            minLabel.attr({\n                x: startPoint.x + railBBox.width + spacing,\n                y: startPoint.y,\n            });\n            this.changeRailPosition(railShape, startPoint.x, startPoint.y);\n            maxLabel.attr({\n                x: startPoint.x + railBBox.width + spacing,\n                y: startPoint.y + railBBox.height,\n            });\n        }\n        else {\n            // left\n            var maxLabelWidth = Math.max(minLabelBBox.width, maxLabelBBox.width);\n            minLabel.attr({\n                x: startPoint.x,\n                y: startPoint.y,\n            });\n            this.changeRailPosition(railShape, startPoint.x + maxLabelWidth + spacing, startPoint.y);\n            maxLabel.attr({\n                x: startPoint.x,\n                y: startPoint.y + railBBox.height,\n            });\n        }\n    };\n    return ContinueLegend;\n}(LegendBase));\nexport default ContinueLegend;\n//# sourceMappingURL=continuous.js.map","export var CONTAINER_CLASS = 'g2-tooltip';\nexport var TITLE_CLASS = 'g2-tooltip-title';\nexport var LIST_CLASS = 'g2-tooltip-list';\nexport var LIST_ITEM_CLASS = 'g2-tooltip-list-item';\nexport var MARKER_CLASS = 'g2-tooltip-marker';\nexport var VALUE_CLASS = 'g2-tooltip-value';\nexport var NAME_CLASS = 'g2-tooltip-name';\nexport var CROSSHAIR_X = 'g2-tooltip-crosshair-x';\nexport var CROSSHAIR_Y = 'g2-tooltip-crosshair-y';\n//# sourceMappingURL=css-const.js.map","var _a;\nimport Theme from '../util/theme';\n// tooltip 相关 dom 的 css 类名\nimport * as CssConst from './css-const';\nexport default (_a = {},\n    // css style for tooltip\n    _a[\"\" + CssConst.CONTAINER_CLASS] = {\n        position: 'absolute',\n        visibility: 'visible',\n        // @2018-07-25 by blue.lb 这里去掉浮动，火狐上存在样式错位\n        // whiteSpace: 'nowrap',\n        zIndex: 8,\n        transition: 'visibility 0.2s cubic-bezier(0.23, 1, 0.32, 1), ' +\n            'left 0.4s cubic-bezier(0.23, 1, 0.32, 1), ' +\n            'top 0.4s cubic-bezier(0.23, 1, 0.32, 1)',\n        backgroundColor: 'rgba(255, 255, 255, 0.9)',\n        boxShadow: '0px 0px 10px #aeaeae',\n        borderRadius: '3px',\n        color: 'rgb(87, 87, 87)',\n        fontSize: '12px',\n        fontFamily: Theme.fontFamily,\n        lineHeight: '20px',\n        padding: '10px 10px 6px 10px',\n    },\n    _a[\"\" + CssConst.TITLE_CLASS] = {\n        marginBottom: '4px',\n    },\n    _a[\"\" + CssConst.LIST_CLASS] = {\n        margin: '0px',\n        listStyleType: 'none',\n        padding: '0px',\n    },\n    _a[\"\" + CssConst.LIST_ITEM_CLASS] = {\n        listStyleType: 'none',\n        marginBottom: '4px',\n    },\n    _a[\"\" + CssConst.MARKER_CLASS] = {\n        width: '8px',\n        height: '8px',\n        borderRadius: '50%',\n        display: 'inline-block',\n        marginRight: '8px',\n    },\n    _a[\"\" + CssConst.VALUE_CLASS] = {\n        display: 'inline-block',\n        float: 'right',\n        marginLeft: '30px',\n    },\n    _a[\"\" + CssConst.CROSSHAIR_X] = {\n        position: 'absolute',\n        width: '1px',\n        backgroundColor: 'rgba(0, 0, 0, 0.25)',\n    },\n    _a[\"\" + CssConst.CROSSHAIR_Y] = {\n        position: 'absolute',\n        height: '1px',\n        backgroundColor: 'rgba(0, 0, 0, 0.25)',\n    },\n    _a);\n//# sourceMappingURL=html-theme.js.map","import { __assign, __extends } from \"tslib\";\nimport colorUtil from '@antv/color-util';\nimport { createDom, modifyCSS } from '@antv/dom-util';\nimport { each, hasKey, isElement, substitute } from '@antv/util';\nimport HtmlComponent from '../abstract/html-component';\nimport { clearDom, regionToBBox, toPx } from '../util/util';\nimport * as CssConst from './css-const';\nimport TooltipTheme from './html-theme';\nimport { getAlignPoint } from '../util/align';\nfunction hasOneKey(obj, keys) {\n    var result = false;\n    each(keys, function (key) {\n        if (hasKey(obj, key)) {\n            result = true;\n            return false;\n        }\n    });\n    return result;\n}\nvar Tooltip = /** @class */ (function (_super) {\n    __extends(Tooltip, _super);\n    function Tooltip() {\n        return _super !== null && _super.apply(this, arguments) || this;\n    }\n    Tooltip.prototype.getDefaultCfg = function () {\n        var cfg = _super.prototype.getDefaultCfg.call(this);\n        return __assign(__assign({}, cfg), { name: 'tooltip', type: 'html', x: 0, y: 0, items: [], customContent: null, containerTpl: \"<div class=\\\"\" + CssConst.CONTAINER_CLASS + \"\\\"><div class=\\\"\" + CssConst.TITLE_CLASS + \"\\\"></div><ul class=\\\"\" + CssConst.LIST_CLASS + \"\\\"></ul></div>\", itemTpl: \"<li class=\\\"\" + CssConst.LIST_ITEM_CLASS + \"\\\" data-index={index}>\\n          <span class=\\\"\" + CssConst.MARKER_CLASS + \"\\\" style=\\\"background:{color}\\\"></span>\\n          <span class=\\\"\" + CssConst.NAME_CLASS + \"\\\">{name}</span>:\\n          <span class=\\\"\" + CssConst.VALUE_CLASS + \"\\\">{value}</span>\\n        </li>\", xCrosshairTpl: \"<div class=\\\"\" + CssConst.CROSSHAIR_X + \"\\\"></div>\", yCrosshairTpl: \"<div class=\\\"\" + CssConst.CROSSHAIR_Y + \"\\\"></div>\", title: null, showTitle: true, \n            /**\n             * tooltip 限制的区域\n             * @type {Region}\n             */\n            region: null, \n            // crosshair 的限制区域\n            crosshairsRegion: null, containerClassName: CssConst.CONTAINER_CLASS, \n            // x, y, xy\n            crosshairs: null, offset: 10, position: 'right', domStyles: null, defaultStyles: TooltipTheme });\n    };\n    // tooltip 渲染时，渲染 title，items 和 corosshairs\n    Tooltip.prototype.render = function () {\n        if (this.get('customContent')) {\n            this.renderCustomContent();\n        }\n        else {\n            this.resetTitle();\n            this.renderItems();\n        }\n        // 绘制完成后，再定位\n        this.resetPosition();\n    };\n    // 复写清空函数，因为有模板的存在，所以默认的写法不合适\n    Tooltip.prototype.clear = function () {\n        // 由于 crosshair 没有在 container 内，所以需要单独清理\n        this.clearCrosshairs();\n        this.setTitle(''); // 清空标题\n        this.clearItemDoms();\n    };\n    Tooltip.prototype.show = function () {\n        var container = this.getContainer();\n        if (!container || this.destroyed) {\n            // 防止容器不存在或者被销毁时报错\n            return;\n        }\n        this.set('visible', true);\n        modifyCSS(container, {\n            visibility: 'visible',\n        });\n        this.setCrossHairsVisible(true);\n    };\n    Tooltip.prototype.hide = function () {\n        var container = this.getContainer();\n        // relative: https://github.com/antvis/g2/issues/1221\n        if (!container || this.destroyed) {\n            return;\n        }\n        this.set('visible', false);\n        modifyCSS(container, {\n            visibility: 'hidden',\n        });\n        this.setCrossHairsVisible(false);\n    };\n    // 实现 IPointLocation 的接口\n    Tooltip.prototype.getLocation = function () {\n        return { x: this.get('x'), y: this.get('y') };\n    };\n    // 实现 IPointLocation 的接口\n    Tooltip.prototype.setLocation = function (point) {\n        this.set('x', point.x);\n        this.set('y', point.y);\n        this.resetPosition();\n    };\n    Tooltip.prototype.setCrossHairsVisible = function (visible) {\n        var display = visible ? '' : 'none';\n        var xCrosshairDom = this.get('xCrosshairDom');\n        var yCrosshairDom = this.get('yCrosshairDom');\n        xCrosshairDom &&\n            modifyCSS(xCrosshairDom, {\n                display: display,\n            });\n        yCrosshairDom &&\n            modifyCSS(yCrosshairDom, {\n                display: display,\n            });\n    };\n    // 如有 customContent 则根据 customContent 设置 container\n    Tooltip.prototype.initContainer = function () {\n        _super.prototype.initContainer.call(this);\n        if (this.get('customContent')) {\n            if (this.get('container')) {\n                this.get('container').remove();\n            }\n            var container = this.getHtmlContentNode();\n            this.get('parent').appendChild(container);\n            this.set('container', container);\n            this.resetStyles();\n            this.applyStyles();\n        }\n    };\n    // 更新属性的同时，可能会引起 DOM 的变化，这里对可能引起 DOM 变化的场景做了处理\n    Tooltip.prototype.updateInner = function (cfg) {\n        if (this.get('customContent')) {\n            this.renderCustomContent();\n        }\n        else {\n            // 更新标题\n            if (hasOneKey(cfg, ['title', 'showTitle'])) {\n                this.resetTitle();\n            }\n            // 更新内容\n            if (hasKey(cfg, 'items')) {\n                this.renderItems();\n            }\n        }\n        _super.prototype.updateInner.call(this, cfg);\n    };\n    Tooltip.prototype.initDom = function () {\n        this.cacheDoms();\n    };\n    // 清理 DOM\n    Tooltip.prototype.removeDom = function () {\n        _super.prototype.removeDom.call(this);\n        this.clearCrosshairs();\n    };\n    // 调整位置\n    Tooltip.prototype.resetPosition = function () {\n        var x = this.get('x');\n        var y = this.get('y');\n        var offset = this.get('offset');\n        var _a = this.getOffset(), offsetX = _a.offsetX, offsetY = _a.offsetY;\n        var position = this.get('position');\n        var region = this.get('region');\n        var container = this.getContainer();\n        var bbox = this.getBBox();\n        var width = bbox.width, height = bbox.height;\n        var limitBox;\n        if (region) {\n            // 不限制位置\n            limitBox = regionToBBox(region);\n        }\n        var point = getAlignPoint(x, y, offset, width, height, position, limitBox);\n        modifyCSS(container, {\n            left: toPx(point.x + offsetX),\n            top: toPx(point.y + offsetY),\n        });\n        this.resetCrosshairs();\n    };\n    // 根据 customContent 渲染\n    Tooltip.prototype.renderCustomContent = function () {\n        var node = this.getHtmlContentNode();\n        var parent = this.get('parent');\n        var curContainer = this.get('container');\n        if (curContainer && curContainer.parentNode === parent) {\n            parent.replaceChild(node, curContainer);\n        }\n        else {\n            parent.appendChild(node);\n        }\n        this.set('container', node);\n        this.resetStyles();\n        this.applyStyles();\n    };\n    Tooltip.prototype.getHtmlContentNode = function () {\n        var node;\n        var customContent = this.get('customContent');\n        if (customContent) {\n            var elem = customContent(this.get('title'), this.get('items'));\n            if (isElement(elem)) {\n                node = elem;\n            }\n            else {\n                node = createDom(elem);\n            }\n        }\n        return node;\n    };\n    // 缓存模板设置的各种 DOM\n    Tooltip.prototype.cacheDoms = function () {\n        var container = this.getContainer();\n        var titleDom = container.getElementsByClassName(CssConst.TITLE_CLASS)[0];\n        var listDom = container.getElementsByClassName(CssConst.LIST_CLASS)[0];\n        this.set('titleDom', titleDom);\n        this.set('listDom', listDom);\n    };\n    // 重置 title\n    Tooltip.prototype.resetTitle = function () {\n        var title = this.get('title');\n        var showTitle = this.get('showTitle');\n        if (showTitle && title) {\n            this.setTitle(title);\n        }\n        else {\n            this.setTitle('');\n        }\n    };\n    // 设置 title 文本\n    Tooltip.prototype.setTitle = function (text) {\n        var titleDom = this.get('titleDom');\n        if (titleDom) {\n            titleDom.innerText = text;\n        }\n    };\n    // 终止 crosshair\n    Tooltip.prototype.resetCrosshairs = function () {\n        var crosshairsRegion = this.get('crosshairsRegion');\n        var crosshairs = this.get('crosshairs');\n        if (!crosshairsRegion || !crosshairs) {\n            // 不显示 crosshair，都移除，没有设定 region 也都移除掉\n            this.clearCrosshairs();\n        }\n        else {\n            var crosshairBox = regionToBBox(crosshairsRegion);\n            var xCrosshairDom = this.get('xCrosshairDom');\n            var yCrosshairDom = this.get('yCrosshairDom');\n            if (crosshairs === 'x') {\n                this.resetCrosshair('x', crosshairBox);\n                // 仅显示 x 的 crosshair，y 移除\n                if (yCrosshairDom) {\n                    yCrosshairDom.remove();\n                    this.set('yCrosshairDom', null);\n                }\n            }\n            else if (crosshairs === 'y') {\n                this.resetCrosshair('y', crosshairBox);\n                // 仅显示 y 的 crosshair，x 移除\n                if (xCrosshairDom) {\n                    xCrosshairDom.remove();\n                    this.set('xCrosshairDom', null);\n                }\n            }\n            else {\n                this.resetCrosshair('x', crosshairBox);\n                this.resetCrosshair('y', crosshairBox);\n            }\n            this.setCrossHairsVisible(this.get('visible'));\n        }\n    };\n    // 设定 crosshair 的位置，需要区分 x,y\n    Tooltip.prototype.resetCrosshair = function (name, bbox) {\n        var croshairDom = this.checkCrosshair(name);\n        var value = this.get(name);\n        if (name === 'x') {\n            modifyCSS(croshairDom, {\n                left: toPx(value),\n                top: toPx(bbox.y),\n                height: toPx(bbox.height),\n            });\n        }\n        else {\n            modifyCSS(croshairDom, {\n                top: toPx(value),\n                left: toPx(bbox.x),\n                width: toPx(bbox.width),\n            });\n        }\n    };\n    // 如果 crosshair 对应的 dom 不存在，则创建\n    Tooltip.prototype.checkCrosshair = function (name) {\n        var domName = name + \"CrosshairDom\";\n        var tplName = name + \"CrosshairTpl\";\n        var constName = \"CROSSHAIR_\" + name.toUpperCase();\n        var styleName = CssConst[constName];\n        var croshairDom = this.get(domName);\n        var parent = this.get('parent');\n        if (!croshairDom) {\n            croshairDom = createDom(this.get(tplName)); // 创建\n            this.applyStyle(styleName, croshairDom); // 设置初始样式\n            parent.appendChild(croshairDom); // 添加到跟 tooltip 同级的目录下\n            this.set(domName, croshairDom);\n        }\n        return croshairDom;\n    };\n    Tooltip.prototype.renderItems = function () {\n        this.clearItemDoms();\n        var items = this.get('items');\n        var itemTpl = this.get('itemTpl');\n        var listDom = this.get('listDom');\n        if (listDom) {\n            each(items, function (item) {\n                var color = colorUtil.toCSSGradient(item.color);\n                var substituteObj = __assign(__assign({}, item), { color: color });\n                var domStr = substitute(itemTpl, substituteObj);\n                var itemDom = createDom(domStr);\n                listDom.appendChild(itemDom);\n            });\n            this.applyChildrenStyles(listDom, this.get('domStyles'));\n        }\n    };\n    Tooltip.prototype.clearItemDoms = function () {\n        if (this.get('listDom')) {\n            clearDom(this.get('listDom'));\n        }\n    };\n    Tooltip.prototype.clearCrosshairs = function () {\n        var xCrosshairDom = this.get('xCrosshairDom');\n        var yCrosshairDom = this.get('yCrosshairDom');\n        xCrosshairDom && xCrosshairDom.remove();\n        yCrosshairDom && yCrosshairDom.remove();\n        this.set('xCrosshairDom', null);\n        this.set('yCrosshairDom', null);\n    };\n    return Tooltip;\n}(HtmlComponent));\nexport default Tooltip;\n//# sourceMappingURL=html.js.map","// 检测各边是否超出\nexport function getOutSides(x, y, width, height, limitBox) {\n    var hits = {\n        left: x < limitBox.x,\n        right: x + width > limitBox.x + limitBox.width,\n        top: y < limitBox.y,\n        bottom: y + height > limitBox.y + limitBox.height,\n    };\n    return hits;\n}\nexport function getPointByPosition(x, y, offset, width, height, position) {\n    var px = x;\n    var py = y;\n    switch (position) {\n        case 'left': // left center\n            px = x - width - offset;\n            py = y - height / 2;\n            break;\n        case 'right':\n            px = x + offset;\n            py = y - height / 2;\n            break;\n        case 'top':\n            px = x - width / 2;\n            py = y - height - offset;\n            break;\n        case 'bottom':\n            // bottom\n            px = x - width / 2;\n            py = y + offset;\n            break;\n        default:\n            // auto, 在 top-right\n            px = x + offset;\n            py = y - height - offset;\n            break;\n    }\n    return {\n        x: px,\n        y: py,\n    };\n}\nexport function getAlignPoint(x, y, offset, width, height, position, limitBox) {\n    var point = getPointByPosition(x, y, offset, width, height, position);\n    if (limitBox) {\n        var outSides = getOutSides(point.x, point.y, width, height, limitBox);\n        if (position === 'auto') {\n            // 如果是 auto，默认 tooltip 在右上角，仅需要判定右侧和上测冲突即可\n            if (outSides.right) {\n                point.x = Math.max(0, x - width - offset);\n            }\n            if (outSides.top) {\n                point.y = Math.max(0, y - height - offset);\n            }\n        }\n        else if (position === 'top' || position === 'bottom') {\n            if (outSides.left) {\n                // 左侧躲避\n                point.x = limitBox.x;\n            }\n            if (outSides.right) {\n                // 右侧躲避\n                point.x = limitBox.x + limitBox.width - width;\n            }\n            if (position === 'top' && outSides.top) {\n                // 如果上面对齐检测上面，不检测下面\n                point.y = y + offset;\n            }\n            if (position === 'bottom' && outSides.bottom) {\n                point.y = y - height - offset;\n            }\n        }\n        else {\n            // 检测左右位置\n            if (outSides.top) {\n                point.y = limitBox.y;\n            }\n            if (outSides.bottom) {\n                point.y = limitBox.y + limitBox.height - height;\n            }\n            if (position === 'left' && outSides.left) {\n                point.x = x + offset;\n            }\n            if (position === 'right' && outSides.right) {\n                point.x = x - width - offset;\n            }\n        }\n    }\n    return point;\n}\n//# sourceMappingURL=align.js.map","export var BACKGROUND_STYLE = {\n    // fill: 'red',\n    opacity: 0,\n};\nexport var LINE_STYLE = {\n    stroke: '#C5C5C5',\n    strokeOpacity: 0.85,\n};\nexport var AREA_STYLE = {\n    fill: '#CACED4',\n    opacity: 0.85,\n};\n//# sourceMappingURL=constant.js.map","import { vec2 } from '@antv/matrix-util';\nfunction smoothBezier(points, smooth, isLoop, constraint) {\n    var cps = [];\n    var hasConstraint = !!constraint;\n    var prevPoint;\n    var nextPoint;\n    var min;\n    var max;\n    var nextCp0;\n    var cp1;\n    var cp0;\n    if (hasConstraint) {\n        min = constraint[0], max = constraint[1];\n        for (var i = 0, l = points.length; i < l; i += 1) {\n            var point = points[i];\n            min = vec2.min([0, 0], min, point);\n            max = vec2.max([0, 0], max, point);\n        }\n    }\n    for (var i = 0, len = points.length; i < len; i += 1) {\n        var point = points[i];\n        if (i === 0 && !isLoop) {\n            cp0 = point;\n        }\n        else if (i === len - 1 && !isLoop) {\n            cp1 = point;\n            cps.push(cp0);\n            cps.push(cp1);\n        }\n        else {\n            var prevIdx = [i ? i - 1 : len - 1, i - 1][isLoop ? 0 : 1];\n            prevPoint = points[prevIdx];\n            nextPoint = points[isLoop ? (i + 1) % len : i + 1];\n            var v = [0, 0];\n            v = vec2.sub(v, nextPoint, prevPoint);\n            v = vec2.scale(v, v, smooth);\n            var d0 = vec2.distance(point, prevPoint);\n            var d1 = vec2.distance(point, nextPoint);\n            var sum = d0 + d1;\n            if (sum !== 0) {\n                d0 /= sum;\n                d1 /= sum;\n            }\n            var v1 = vec2.scale([0, 0], v, -d0);\n            var v2 = vec2.scale([0, 0], v, d1);\n            cp1 = vec2.add([0, 0], point, v1);\n            nextCp0 = vec2.add([0, 0], point, v2);\n            // 下一个控制点必须在这个点和下一个点之间\n            nextCp0 = vec2.min([0, 0], nextCp0, vec2.max([0, 0], nextPoint, point));\n            nextCp0 = vec2.max([0, 0], nextCp0, vec2.min([0, 0], nextPoint, point));\n            // 重新计算 cp1 的值\n            v1 = vec2.sub([0, 0], nextCp0, point);\n            v1 = vec2.scale([0, 0], v1, -d0 / d1);\n            cp1 = vec2.add([0, 0], point, v1);\n            // 上一个控制点必须要在上一个点和这一个点之间\n            cp1 = vec2.min([0, 0], cp1, vec2.max([0, 0], prevPoint, point));\n            cp1 = vec2.max([0, 0], cp1, vec2.min([0, 0], prevPoint, point));\n            // 重新计算 nextCp0 的值\n            v2 = vec2.sub([0, 0], point, cp1);\n            v2 = vec2.scale([0, 0], v2, d1 / d0);\n            nextCp0 = vec2.add([0, 0], point, v2);\n            if (hasConstraint) {\n                cp1 = vec2.max([0, 0], cp1, min);\n                cp1 = vec2.min([0, 0], cp1, max);\n                nextCp0 = vec2.max([0, 0], nextCp0, min);\n                nextCp0 = vec2.min([0, 0], nextCp0, max);\n            }\n            cps.push(cp0);\n            cps.push(cp1);\n            cp0 = nextCp0;\n        }\n    }\n    if (isLoop) {\n        cps.push(cps.shift());\n    }\n    return cps;\n}\n/**\n * create bezier spline from catmull rom spline\n * @param {Array} crp Catmull Rom Points\n * @param {boolean} z Spline is loop\n * @param {Array} constraint Constraint\n */\nfunction catmullRom2Bezier(crp, z, constraint) {\n    if (z === void 0) { z = false; }\n    if (constraint === void 0) { constraint = [\n        [0, 0],\n        [1, 1],\n    ]; }\n    var isLoop = !!z;\n    var pointList = [];\n    for (var i = 0, l = crp.length; i < l; i += 2) {\n        pointList.push([crp[i], crp[i + 1]]);\n    }\n    var controlPointList = smoothBezier(pointList, 0.4, isLoop, constraint);\n    var len = pointList.length;\n    var d1 = [];\n    var cp1;\n    var cp2;\n    var p;\n    for (var i = 0; i < len - 1; i += 1) {\n        cp1 = controlPointList[i * 2];\n        cp2 = controlPointList[i * 2 + 1];\n        p = pointList[i + 1];\n        d1.push(['C', cp1[0], cp1[1], cp2[0], cp2[1], p[0], p[1]]);\n    }\n    if (isLoop) {\n        cp1 = controlPointList[len];\n        cp2 = controlPointList[len + 1];\n        p = pointList[0];\n        d1.push(['C', cp1[0], cp1[1], cp2[0], cp2[1], p[0], p[1]]);\n    }\n    return d1;\n}\nexport default catmullRom2Bezier;\n//# sourceMappingURL=catmull-rom-2-bezier.js.map","import { __spreadArrays } from \"tslib\";\nimport { catmullRom2Bezier } from '@antv/path-util';\nimport { Category, Linear } from '@antv/scale';\nimport { each, head, isEqual, map } from '@antv/util';\n/**\n * 点数组转 path\n * @param points\n */\nfunction pointsToPath(points) {\n    return map(points, function (p, idx) {\n        var command = idx === 0 ? 'M' : 'L';\n        var x = p[0], y = p[1];\n        return [command, x, y];\n    });\n}\n/**\n * 将点连接成路径 path\n * @param points\n */\nexport function getLinePath(points) {\n    return pointsToPath(points);\n}\n/**\n * 将点连成平滑的曲线\n * @param points\n */\nexport function getSmoothLinePath(points) {\n    if (points.length <= 2) {\n        // 两点以内直接绘制成路径\n        return getLinePath(points);\n    }\n    var data = [];\n    each(points, function (p) {\n        // 当前点和上一个点一样的时候，忽略掉\n        if (!isEqual(p, data.slice(data.length - 2))) {\n            data.push(p[0], p[1]);\n        }\n    });\n    // const constraint = [ // 范围\n    //   [ 0, 0 ],\n    //   [ 1, 1 ],\n    // ];\n    var path = catmullRom2Bezier(data, false);\n    var _a = head(points), x = _a[0], y = _a[1];\n    path.unshift(['M', x, y]);\n    return path;\n}\n/**\n * 将数据转成 path，利用 scale 的归一化能力\n * @param data\n * @param width\n * @param height\n * @param smooth\n */\nexport function dataToPath(data, width, height, smooth) {\n    if (smooth === void 0) { smooth = true; }\n    // 利用 scale 来获取 y 上的映射\n    var y = new Linear({\n        values: data,\n    });\n    var x = new Category({\n        values: map(data, function (v, idx) { return idx; }),\n    });\n    var points = map(data, function (v, idx) {\n        return [x.scale(idx) * width, height - y.scale(v) * height];\n    });\n    return smooth ? getSmoothLinePath(points) : getLinePath(points);\n}\n/**\n * 获得 area 面积的横向连接线的 px 位置\n * @param data\n * @param width\n * @param height\n */\nexport function getAreaLineY(data, height) {\n    var y = new Linear({\n        values: data,\n    });\n    // 当曲线全部为负数时，取最大值，当曲线全部为正数时，取最小值，当曲线有正有负，则取零点\n    var lineY = y.max < 0 ? y.max : Math.max(0, y.min);\n    return height - y.scale(lineY) * height;\n}\n/**\n * 线 path 转 area path\n * @param path\n * @param width\n * @param height\n */\nexport function linePathToAreaPath(path, width, height, data) {\n    var areaPath = __spreadArrays(path);\n    var lineYPx = getAreaLineY(data, height);\n    areaPath.push(['L', width, lineYPx]);\n    areaPath.push(['L', 0, lineYPx]);\n    areaPath.push(['Z']);\n    return areaPath;\n}\n//# sourceMappingURL=path.js.map","import { __assign, __extends } from \"tslib\";\nimport GroupComponent from '../abstract/group-component';\nimport { AREA_STYLE, BACKGROUND_STYLE, LINE_STYLE } from './constant';\nimport { dataToPath, linePathToAreaPath } from './path';\nvar Trend = /** @class */ (function (_super) {\n    __extends(Trend, _super);\n    function Trend() {\n        return _super !== null && _super.apply(this, arguments) || this;\n    }\n    Trend.prototype.getDefaultCfg = function () {\n        var cfg = _super.prototype.getDefaultCfg.call(this);\n        return __assign(__assign({}, cfg), { name: 'trend', x: 0, y: 0, width: 200, height: 16, smooth: true, isArea: false, data: [], backgroundStyle: BACKGROUND_STYLE, lineStyle: LINE_STYLE, areaStyle: AREA_STYLE });\n    };\n    Trend.prototype.renderInner = function (group) {\n        var _a = this.cfg, width = _a.width, height = _a.height, data = _a.data, smooth = _a.smooth, isArea = _a.isArea, backgroundStyle = _a.backgroundStyle, lineStyle = _a.lineStyle, areaStyle = _a.areaStyle;\n        // 背景\n        this.addShape(group, {\n            id: this.getElementId('background'),\n            type: 'rect',\n            attrs: __assign({ x: 0, y: 0, width: width,\n                height: height }, backgroundStyle),\n        });\n        var path = dataToPath(data, width, height, smooth);\n        // 线\n        this.addShape(group, {\n            id: this.getElementId('line'),\n            type: 'path',\n            attrs: __assign({ path: path }, lineStyle),\n        });\n        // area\n        // 在 path 的基础上，增加两个坐标点\n        if (isArea) {\n            var areaPath = linePathToAreaPath(path, width, height, data);\n            this.addShape(group, {\n                id: this.getElementId('area'),\n                type: 'path',\n                attrs: __assign({ path: areaPath }, areaStyle),\n            });\n        }\n    };\n    Trend.prototype.applyOffset = function () {\n        var _a = this.cfg, x = _a.x, y = _a.y;\n        // 统一移动到对应的位置\n        this.moveElementTo(this.get('group'), {\n            x: x,\n            y: y,\n        });\n    };\n    return Trend;\n}(GroupComponent));\nexport { Trend };\nexport default Trend;\n//# sourceMappingURL=trend.js.map","import { __assign, __extends } from \"tslib\";\nimport GroupComponent from '../abstract/group-component';\nexport var DEFAULT_HANDLER_STYLE = {\n    fill: '#F7F7F7',\n    stroke: '#BFBFBF',\n    radius: 2,\n    opacity: 1,\n    cursor: 'ew-resize',\n    // 高亮的颜色\n    highLightFill: '#FFF',\n};\nvar Handler = /** @class */ (function (_super) {\n    __extends(Handler, _super);\n    function Handler() {\n        return _super !== null && _super.apply(this, arguments) || this;\n    }\n    Handler.prototype.getDefaultCfg = function () {\n        var cfg = _super.prototype.getDefaultCfg.call(this);\n        return __assign(__assign({}, cfg), { name: 'handler', x: 0, y: 0, width: 10, height: 24, style: DEFAULT_HANDLER_STYLE });\n    };\n    Handler.prototype.renderInner = function (group) {\n        var _a = this.cfg, width = _a.width, height = _a.height, style = _a.style;\n        var fill = style.fill, stroke = style.stroke, radius = style.radius, opacity = style.opacity, cursor = style.cursor;\n        // 按钮框框\n        this.addShape(group, {\n            type: 'rect',\n            id: this.getElementId('background'),\n            attrs: {\n                x: 0,\n                y: 0,\n                width: width,\n                height: height,\n                fill: fill,\n                stroke: stroke,\n                radius: radius,\n                opacity: opacity,\n                cursor: cursor,\n            },\n        });\n        // 两根竖线\n        var x1 = (1 / 3) * width;\n        var x2 = (2 / 3) * width;\n        var y1 = (1 / 4) * height;\n        var y2 = (3 / 4) * height;\n        this.addShape(group, {\n            id: this.getElementId('line-left'),\n            type: 'line',\n            attrs: {\n                x1: x1,\n                y1: y1,\n                x2: x1,\n                y2: y2,\n                stroke: stroke,\n                cursor: cursor,\n            },\n        });\n        this.addShape(group, {\n            id: this.getElementId('line-right'),\n            type: 'line',\n            attrs: {\n                x1: x2,\n                y1: y1,\n                x2: x2,\n                y2: y2,\n                stroke: stroke,\n                cursor: cursor,\n            },\n        });\n    };\n    Handler.prototype.applyOffset = function () {\n        this.moveElementTo(this.get('group'), {\n            x: this.get('x'),\n            y: this.get('y'),\n        });\n    };\n    Handler.prototype.initEvent = function () {\n        this.bindEvents();\n    };\n    Handler.prototype.bindEvents = function () {\n        var _this = this;\n        this.get('group').on('mouseenter', function () {\n            var highLightFill = _this.get('style').highLightFill;\n            _this.getElementByLocalId('background').attr('fill', highLightFill);\n            _this.draw();\n        });\n        this.get('group').on('mouseleave', function () {\n            var fill = _this.get('style').fill;\n            _this.getElementByLocalId('background').attr('fill', fill);\n            _this.draw();\n        });\n    };\n    Handler.prototype.draw = function () {\n        var canvas = this.get('container').get('canvas');\n        if (canvas) {\n            canvas.draw();\n        }\n    };\n    return Handler;\n}(GroupComponent));\nexport { Handler };\nexport default Handler;\n//# sourceMappingURL=handler.js.map","/**\n * 一些默认的样式配置\n */\nexport var BACKGROUND_STYLE = {\n    fill: '#416180',\n    opacity: 0.05,\n};\nexport var FOREGROUND_STYLE = {\n    fill: '#5B8FF9',\n    opacity: 0.15,\n    cursor: 'move',\n};\nexport var DEFAULT_HANDLER_WIDTH = 10;\nexport var HANDLER_STYLE = {\n    width: DEFAULT_HANDLER_WIDTH,\n    height: 24,\n};\nexport var TEXT_STYLE = {\n    textBaseline: 'middle',\n    fill: '#000',\n    opacity: 0.45,\n};\nexport var SLIDER_CHANGE = 'sliderchange';\n//# sourceMappingURL=constant.js.map","import { __assign, __extends } from \"tslib\";\nimport { clamp, deepMix, each, get, isArray, isNil, size } from '@antv/util';\nimport GroupComponent from '../abstract/group-component';\nimport { Trend } from '../trend/trend';\nimport { DEFAULT_HANDLER_STYLE, Handler } from './handler';\nimport { BACKGROUND_STYLE, DEFAULT_HANDLER_WIDTH, FOREGROUND_STYLE, HANDLER_STYLE, SLIDER_CHANGE, TEXT_STYLE, } from './constant';\nvar Slider = /** @class */ (function (_super) {\n    __extends(Slider, _super);\n    function Slider() {\n        var _this = _super !== null && _super.apply(this, arguments) || this;\n        _this.onMouseDown = function (target) { return function (e) {\n            _this.currentTarget = target;\n            // 取出原生事件\n            var event = e.originalEvent;\n            // 2. 存储当前点击位置\n            event.stopPropagation();\n            event.preventDefault();\n            // 兼容移动端获取数据\n            _this.prevX = get(event, 'touches.0.pageX', event.pageX);\n            _this.prevY = get(event, 'touches.0.pageY', event.pageY);\n            // 3. 开始滑动的时候，绑定 move 和 up 事件\n            var containerDOM = _this.getContainerDOM();\n            containerDOM.addEventListener('mousemove', _this.onMouseMove);\n            containerDOM.addEventListener('mouseup', _this.onMouseUp);\n            containerDOM.addEventListener('mouseleave', _this.onMouseUp);\n            // 移动端事件\n            containerDOM.addEventListener('touchmove', _this.onMouseMove);\n            containerDOM.addEventListener('touchend', _this.onMouseUp);\n            containerDOM.addEventListener('touchcancel', _this.onMouseUp);\n        }; };\n        _this.onMouseMove = function (event) {\n            var width = _this.cfg.width;\n            var originValue = [_this.get('start'), _this.get('end')];\n            // 滑动过程中，计算偏移，更新滑块，然后 emit 数据出去\n            event.stopPropagation();\n            event.preventDefault();\n            var x = get(event, 'touches.0.pageX', event.pageX);\n            var y = get(event, 'touches.0.pageY', event.pageY);\n            // 横向的 slider 只处理 x\n            var offsetX = x - _this.prevX;\n            var offsetXRange = _this.adjustOffsetRange(offsetX / width);\n            // 更新 start end range 范围\n            _this.updateStartEnd(offsetXRange);\n            // 更新 ui\n            _this.updateUI(_this.getElementByLocalId('foreground'), _this.getElementByLocalId('minText'), _this.getElementByLocalId('maxText'));\n            _this.prevX = x;\n            _this.prevY = y;\n            _this.draw();\n            // 因为存储的 start、end 可能不一定是按大小存储的，所以排序一下，对外是 end >= start\n            _this.emit(SLIDER_CHANGE, [_this.get('start'), _this.get('end')].sort());\n            _this.delegateEmit('valuechanged', {\n                originValue: originValue,\n                value: [_this.get('start'), _this.get('end')],\n            });\n        };\n        _this.onMouseUp = function () {\n            // 结束之后，取消绑定的事件\n            if (_this.currentTarget) {\n                _this.currentTarget = undefined;\n            }\n            var containerDOM = _this.getContainerDOM();\n            if (containerDOM) {\n                containerDOM.removeEventListener('mousemove', _this.onMouseMove);\n                containerDOM.removeEventListener('mouseup', _this.onMouseUp);\n                // 防止滑动到 canvas 外部之后，状态丢失\n                containerDOM.removeEventListener('mouseleave', _this.onMouseUp);\n                // 移动端事件\n                containerDOM.removeEventListener('touchmove', _this.onMouseMove);\n                containerDOM.removeEventListener('touchend', _this.onMouseUp);\n                containerDOM.removeEventListener('touchcancel', _this.onMouseUp);\n            }\n        };\n        return _this;\n    }\n    Slider.prototype.setRange = function (min, max) {\n        this.set('minLimit', min);\n        this.set('maxLimit', max);\n        var oldStart = this.get('start');\n        var oldEnd = this.get('end');\n        var newStart = clamp(oldStart, min, max);\n        var newEnd = clamp(oldEnd, min, max);\n        if (!this.get('isInit') && (oldStart !== newStart || oldEnd !== newEnd)) {\n            this.setValue([newStart, newEnd]);\n        }\n    };\n    Slider.prototype.getRange = function () {\n        return {\n            min: this.get('minLimit') || 0,\n            max: this.get('maxLimit') || 1,\n        };\n    };\n    Slider.prototype.setValue = function (value) {\n        var range = this.getRange();\n        if (isArray(value) && value.length === 2) {\n            var originValue = [this.get('start'), this.get('end')];\n            this.update({\n                start: clamp(value[0], range.min, range.max),\n                end: clamp(value[1], range.min, range.max),\n            });\n            if (!this.get('updateAutoRender')) {\n                this.render();\n            }\n            this.delegateEmit('valuechanged', {\n                originValue: originValue,\n                value: value,\n            });\n        }\n    };\n    Slider.prototype.getValue = function () {\n        return [this.get('start'), this.get('end')];\n    };\n    Slider.prototype.getDefaultCfg = function () {\n        var cfg = _super.prototype.getDefaultCfg.call(this);\n        return __assign(__assign({}, cfg), { name: 'slider', x: 0, y: 0, width: 100, height: 16, backgroundStyle: {}, foregroundStyle: {}, handlerStyle: {}, textStyle: {}, defaultCfg: {\n                backgroundStyle: BACKGROUND_STYLE,\n                foregroundStyle: FOREGROUND_STYLE,\n                handlerStyle: HANDLER_STYLE,\n                textStyle: TEXT_STYLE,\n            } });\n    };\n    Slider.prototype.update = function (cfg) {\n        var start = cfg.start, end = cfg.end;\n        var validCfg = __assign({}, cfg);\n        if (!isNil(start)) {\n            validCfg.start = clamp(start, 0, 1);\n        }\n        if (!isNil(end)) {\n            validCfg.end = clamp(end, 0, 1);\n        }\n        _super.prototype.update.call(this, validCfg);\n        this.minHandler = this.getChildComponentById(this.getElementId('minHandler'));\n        this.maxHandler = this.getChildComponentById(this.getElementId('maxHandler'));\n        this.trend = this.getChildComponentById(this.getElementId('trend'));\n    };\n    Slider.prototype.init = function () {\n        this.set('start', clamp(this.get('start'), 0, 1));\n        this.set('end', clamp(this.get('end'), 0, 1));\n        _super.prototype.init.call(this);\n    };\n    Slider.prototype.render = function () {\n        _super.prototype.render.call(this);\n        this.updateUI(this.getElementByLocalId('foreground'), this.getElementByLocalId('minText'), this.getElementByLocalId('maxText'));\n    };\n    Slider.prototype.renderInner = function (group) {\n        var _a = this.cfg, start = _a.start, end = _a.end, width = _a.width, height = _a.height, _b = _a.trendCfg, trendCfg = _b === void 0 ? {} : _b, minText = _a.minText, maxText = _a.maxText, _c = _a.backgroundStyle, backgroundStyle = _c === void 0 ? {} : _c, _d = _a.foregroundStyle, foregroundStyle = _d === void 0 ? {} : _d, _e = _a.textStyle, textStyle = _e === void 0 ? {} : _e;\n        var handlerStyle = deepMix({}, DEFAULT_HANDLER_STYLE, this.cfg.handlerStyle);\n        var min = start * width;\n        var max = end * width;\n        // 趋势图数据\n        if (size(get(trendCfg, 'data'))) {\n            this.trend = this.addComponent(group, __assign({ component: Trend, id: this.getElementId('trend'), x: 0, y: 0, width: width,\n                height: height }, trendCfg));\n        }\n        // 1. 背景\n        this.addShape(group, {\n            id: this.getElementId('background'),\n            type: 'rect',\n            attrs: __assign({ x: 0, y: 0, width: width,\n                height: height }, backgroundStyle),\n        });\n        // 2. 左右文字\n        var minTextShape = this.addShape(group, {\n            id: this.getElementId('minText'),\n            type: 'text',\n            attrs: __assign({ \n                // x: 0,\n                y: height / 2, textAlign: 'right', text: minText, silent: false }, textStyle),\n        });\n        var maxTextShape = this.addShape(group, {\n            id: this.getElementId('maxText'),\n            type: 'text',\n            attrs: __assign({ \n                // x: 0,\n                y: height / 2, textAlign: 'left', text: maxText, silent: false }, textStyle),\n        });\n        // 3. 前景 选中背景框\n        var foregroundShape = this.addShape(group, {\n            id: this.getElementId('foreground'),\n            name: 'foreground',\n            type: 'rect',\n            attrs: __assign({ \n                // x: 0,\n                y: 0, \n                // width: 0,\n                height: height }, foregroundStyle),\n        });\n        // 滑块相关的大小信息\n        var handlerWidth = get(handlerStyle, 'width', DEFAULT_HANDLER_WIDTH);\n        var handlerHeight = get(handlerStyle, 'height', 24);\n        // 4. 左右滑块\n        this.minHandler = this.addComponent(group, {\n            component: Handler,\n            id: this.getElementId('minHandler'),\n            name: 'handler-min',\n            x: 0,\n            y: (height - handlerHeight) / 2,\n            width: handlerWidth,\n            height: handlerHeight,\n            cursor: 'ew-resize',\n            style: handlerStyle,\n        });\n        this.maxHandler = this.addComponent(group, {\n            component: Handler,\n            id: this.getElementId('maxHandler'),\n            name: 'handler-max',\n            x: 0,\n            y: (height - handlerHeight) / 2,\n            width: handlerWidth,\n            height: handlerHeight,\n            cursor: 'ew-resize',\n            style: handlerStyle,\n        });\n    };\n    Slider.prototype.applyOffset = function () {\n        this.moveElementTo(this.get('group'), {\n            x: this.get('x'),\n            y: this.get('y'),\n        });\n    };\n    Slider.prototype.initEvent = function () {\n        this.bindEvents();\n    };\n    Slider.prototype.updateUI = function (foregroundShape, minTextShape, maxTextShape) {\n        var _a = this.cfg, start = _a.start, end = _a.end, width = _a.width, minText = _a.minText, maxText = _a.maxText, handlerStyle = _a.handlerStyle, height = _a.height;\n        var min = start * width;\n        var max = end * width;\n        if (this.trend) {\n            this.trend.update({\n                width: width,\n                height: height,\n            });\n            if (!this.get('updateAutoRender')) {\n                this.trend.render();\n            }\n        }\n        // 1. foreground\n        foregroundShape.attr('x', min);\n        foregroundShape.attr('width', max - min);\n        // 滑块相关的大小信息\n        var handlerWidth = get(handlerStyle, 'width', DEFAULT_HANDLER_WIDTH);\n        // 设置文本\n        minTextShape.attr('text', minText);\n        maxTextShape.attr('text', maxText);\n        var _b = this._dodgeText([min, max], minTextShape, maxTextShape), minAttrs = _b[0], maxAttrs = _b[1];\n        // 2. 左侧滑块和文字位置\n        if (this.minHandler) {\n            this.minHandler.update({\n                x: min - handlerWidth / 2,\n            });\n            if (!this.get('updateAutoRender')) {\n                this.minHandler.render();\n            }\n        }\n        each(minAttrs, function (v, k) { return minTextShape.attr(k, v); });\n        // 3. 右侧滑块和文字位置\n        if (this.maxHandler) {\n            this.maxHandler.update({\n                x: max - handlerWidth / 2,\n            });\n            if (!this.get('updateAutoRender')) {\n                this.maxHandler.render();\n            }\n        }\n        each(maxAttrs, function (v, k) { return maxTextShape.attr(k, v); });\n    };\n    Slider.prototype.bindEvents = function () {\n        var group = this.get('group');\n        group.on('handler-min:mousedown', this.onMouseDown('minHandler'));\n        group.on('handler-min:touchstart', this.onMouseDown('minHandler'));\n        // 2. 右滑块的滑动\n        group.on('handler-max:mousedown', this.onMouseDown('maxHandler'));\n        group.on('handler-max:touchstart', this.onMouseDown('maxHandler'));\n        // 3. 前景选中区域\n        var foreground = group.findById(this.getElementId('foreground'));\n        foreground.on('mousedown', this.onMouseDown('foreground'));\n        foreground.on('touchstart', this.onMouseDown('foreground'));\n    };\n    /**\n     * 调整 offsetRange，因为一些范围的限制\n     * @param offsetRange\n     */\n    Slider.prototype.adjustOffsetRange = function (offsetRange) {\n        var _a = this.cfg, start = _a.start, end = _a.end;\n        // 针对不同的滑动组件，处理的方式不同\n        switch (this.currentTarget) {\n            case 'minHandler': {\n                var min = 0 - start;\n                var max = 1 - start;\n                return Math.min(max, Math.max(min, offsetRange));\n            }\n            case 'maxHandler': {\n                var min = 0 - end;\n                var max = 1 - end;\n                return Math.min(max, Math.max(min, offsetRange));\n            }\n            case 'foreground': {\n                var min = 0 - start;\n                var max = 1 - end;\n                return Math.min(max, Math.max(min, offsetRange));\n            }\n        }\n    };\n    Slider.prototype.updateStartEnd = function (offsetRange) {\n        var _a = this.cfg, start = _a.start, end = _a.end;\n        // 操作不同的组件，反馈不一样\n        switch (this.currentTarget) {\n            case 'minHandler':\n                start += offsetRange;\n                break;\n            case 'maxHandler':\n                end += offsetRange;\n                break;\n            case 'foreground':\n                start += offsetRange;\n                end += offsetRange;\n                break;\n        }\n        this.set('start', start);\n        this.set('end', end);\n    };\n    /**\n     * 调整 text 的位置，自动躲避\n     * 根据位置，调整返回新的位置\n     * @param range\n     */\n    Slider.prototype._dodgeText = function (range, minTextShape, maxTextShape) {\n        var _a, _b;\n        var _c = this.cfg, handlerStyle = _c.handlerStyle, width = _c.width;\n        var PADDING = 2;\n        var handlerWidth = get(handlerStyle, 'width', DEFAULT_HANDLER_WIDTH);\n        var min = range[0], max = range[1];\n        var sorted = false;\n        // 如果交换了位置，则对应的 min max 也交互\n        if (min > max) {\n            _a = [max, min], min = _a[0], max = _a[1];\n            _b = [maxTextShape, minTextShape], minTextShape = _b[0], maxTextShape = _b[1];\n            sorted = true;\n        }\n        // 避让规则，优先显示在两侧，只有显示不下的时候，才显示在中间\n        var minBBox = minTextShape.getBBox();\n        var maxBBox = maxTextShape.getBBox();\n        var minAttrs = minBBox.width > min - PADDING\n            ? { x: min + handlerWidth / 2 + PADDING, textAlign: 'left' }\n            : { x: min - handlerWidth / 2 - PADDING, textAlign: 'right' };\n        var maxAttrs = maxBBox.width > width - max - PADDING\n            ? { x: max - handlerWidth / 2 - PADDING, textAlign: 'right' }\n            : { x: max + handlerWidth / 2 + PADDING, textAlign: 'left' };\n        return !sorted ? [minAttrs, maxAttrs] : [maxAttrs, minAttrs];\n    };\n    Slider.prototype.draw = function () {\n        var container = this.get('container');\n        var canvas = container && container.get('canvas');\n        if (canvas) {\n            canvas.draw();\n        }\n    };\n    Slider.prototype.getContainerDOM = function () {\n        var container = this.get('container');\n        var canvas = container && container.get('canvas');\n        return canvas && canvas.get('container');\n    };\n    return Slider;\n}(GroupComponent));\nexport { Slider };\nexport default Slider;\n//# sourceMappingURL=slider.js.map","import { __assign, __extends } from \"tslib\";\nimport { addEventListener } from '@antv/dom-util';\nimport { clamp, deepMix, get, noop } from '@antv/util';\nimport GroupComponent from '../abstract/group-component';\nvar DEFAULT_STYLE = {\n    trackColor: 'rgba(0,0,0,0)',\n    thumbColor: 'rgba(0,0,0,0.15)',\n    size: 8,\n    lineCap: 'round',\n};\nexport var DEFAULT_THEME = {\n    // 默认样式\n    default: DEFAULT_STYLE,\n    // 鼠标 hover 的样式\n    hover: {\n        thumbColor: 'rgba(0,0,0,0.2)',\n    },\n};\nvar Scrollbar = /** @class */ (function (_super) {\n    __extends(Scrollbar, _super);\n    function Scrollbar() {\n        var _this = _super !== null && _super.apply(this, arguments) || this;\n        _this.clearEvents = noop;\n        _this.onStartEvent = function (isMobile) { return function (e) {\n            _this.isMobile = isMobile;\n            e.originalEvent.preventDefault();\n            var clientX = isMobile ? get(e.originalEvent, 'touches.0.clientX') : e.clientX;\n            var clientY = isMobile ? get(e.originalEvent, 'touches.0.clientY') : e.clientY;\n            // 将开始的点记录下来\n            _this.startPos = _this.cfg.isHorizontal ? clientX : clientY;\n            _this.bindLaterEvent();\n        }; };\n        _this.bindLaterEvent = function () {\n            var containerDOM = _this.getContainerDOM();\n            var events = [];\n            if (_this.isMobile) {\n                events = [\n                    addEventListener(containerDOM, 'touchmove', _this.onMouseMove),\n                    addEventListener(containerDOM, 'touchend', _this.onMouseUp),\n                    addEventListener(containerDOM, 'touchcancel', _this.onMouseUp),\n                ];\n            }\n            else {\n                events = [\n                    addEventListener(containerDOM, 'mousemove', _this.onMouseMove),\n                    addEventListener(containerDOM, 'mouseup', _this.onMouseUp),\n                    // 为了保证划出 canvas containerDom 时还没触发 mouseup\n                    addEventListener(containerDOM, 'mouseleave', _this.onMouseUp),\n                ];\n            }\n            _this.clearEvents = function () {\n                events.forEach(function (e) {\n                    e.remove();\n                });\n            };\n        };\n        // 拖拽滑块的事件回调\n        // 这里是 dom 原生事件，绑定在 dom 元素上的\n        _this.onMouseMove = function (e) {\n            var _a = _this.cfg, isHorizontal = _a.isHorizontal, thumbOffset = _a.thumbOffset;\n            e.preventDefault();\n            var clientX = _this.isMobile ? get(e, 'touches.0.clientX') : e.clientX;\n            var clientY = _this.isMobile ? get(e, 'touches.0.clientY') : e.clientY;\n            // 鼠标松开的位置\n            var endPos = isHorizontal ? clientX : clientY;\n            // 滑块需要移动的距离, 由于这里是对滑块监听，所以移动的距离就是 diffDis, 如果监听对象是 container dom，则需要算比例\n            var diff = endPos - _this.startPos;\n            // 更新 _startPos\n            _this.startPos = endPos;\n            _this.updateThumbOffset(thumbOffset + diff);\n        };\n        _this.onMouseUp = function (e) {\n            e.preventDefault();\n            _this.clearEvents();\n        };\n        // 点击滑道的事件回调,移动滑块位置\n        _this.onTrackClick = function (e) {\n            var _a = _this.cfg, isHorizontal = _a.isHorizontal, x = _a.x, y = _a.y, thumbLen = _a.thumbLen;\n            var containerDOM = _this.getContainerDOM();\n            var rect = containerDOM.getBoundingClientRect();\n            var clientX = e.clientX, clientY = e.clientY;\n            var offset = isHorizontal ? clientX - rect.left - x - thumbLen / 2 : clientY - rect.top - y - thumbLen / 2;\n            var newOffset = _this.validateRange(offset);\n            _this.updateThumbOffset(newOffset);\n        };\n        _this.onThumbMouseOver = function () {\n            var thumbColor = _this.cfg.theme.hover.thumbColor;\n            _this.getElementByLocalId('thumb').attr('stroke', thumbColor);\n            _this.draw();\n        };\n        _this.onThumbMouseOut = function () {\n            var thumbColor = _this.cfg.theme.default.thumbColor;\n            _this.getElementByLocalId('thumb').attr('stroke', thumbColor);\n            _this.draw();\n        };\n        return _this;\n    }\n    Scrollbar.prototype.setRange = function (min, max) {\n        this.set('minLimit', min);\n        this.set('maxLimit', max);\n        var curValue = this.getValue();\n        var newValue = clamp(curValue, min, max);\n        if (curValue !== newValue && !this.get('isInit')) {\n            this.setValue(newValue);\n        }\n    };\n    Scrollbar.prototype.getRange = function () {\n        var min = this.get('minLimit') || 0;\n        var max = this.get('maxLimit') || 1;\n        return { min: min, max: max };\n    };\n    Scrollbar.prototype.setValue = function (value) {\n        var range = this.getRange();\n        var originalValue = this.getValue();\n        this.update({\n            thumbOffset: (this.get('trackLen') - this.get('thumbLen')) * clamp(value, range.min, range.max),\n        });\n        this.delegateEmit('valuechange', {\n            originalValue: originalValue,\n            value: this.getValue(),\n        });\n    };\n    Scrollbar.prototype.getValue = function () {\n        return clamp(this.get('thumbOffset') / (this.get('trackLen') - this.get('thumbLen')), 0, 1);\n    };\n    Scrollbar.prototype.getDefaultCfg = function () {\n        var cfg = _super.prototype.getDefaultCfg.call(this);\n        return __assign(__assign({}, cfg), { name: 'scrollbar', isHorizontal: true, minThumbLen: 20, thumbOffset: 0, theme: DEFAULT_THEME });\n    };\n    Scrollbar.prototype.renderInner = function (group) {\n        this.renderTrackShape(group);\n        this.renderThumbShape(group);\n    };\n    Scrollbar.prototype.applyOffset = function () {\n        this.moveElementTo(this.get('group'), {\n            x: this.get('x'),\n            y: this.get('y'),\n        });\n    };\n    Scrollbar.prototype.initEvent = function () {\n        this.bindEvents();\n    };\n    // 创建滑道的 shape\n    Scrollbar.prototype.renderTrackShape = function (group) {\n        var _a = this.cfg, trackLen = _a.trackLen, _b = _a.theme, theme = _b === void 0 ? { default: {} } : _b;\n        var _c = deepMix({}, DEFAULT_THEME, theme).default, lineCap = _c.lineCap, trackColor = _c.trackColor, themeSize = _c.size;\n        var size = get(this.cfg, 'size', themeSize);\n        var attrs = this.get('isHorizontal')\n            ? {\n                x1: 0 + size / 2,\n                y1: size / 2,\n                x2: trackLen - size / 2,\n                y2: size / 2,\n                lineWidth: size,\n                stroke: trackColor,\n                lineCap: lineCap,\n            }\n            : {\n                x1: size / 2,\n                y1: 0 + size / 2,\n                x2: size / 2,\n                y2: trackLen - size / 2,\n                lineWidth: size,\n                stroke: trackColor,\n                lineCap: lineCap,\n            };\n        return this.addShape(group, {\n            id: this.getElementId('track'),\n            name: 'track',\n            type: 'line',\n            attrs: attrs,\n        });\n    };\n    // 创建滑块的 shape\n    Scrollbar.prototype.renderThumbShape = function (group) {\n        var _a = this.cfg, thumbOffset = _a.thumbOffset, thumbLen = _a.thumbLen, theme = _a.theme;\n        var _b = deepMix({}, DEFAULT_THEME, theme).default, themeSize = _b.size, lineCap = _b.lineCap, thumbColor = _b.thumbColor;\n        var size = get(this.cfg, 'size', themeSize);\n        var attrs = this.get('isHorizontal')\n            ? {\n                x1: thumbOffset + size / 2,\n                y1: size / 2,\n                x2: thumbOffset + thumbLen - size / 2,\n                y2: size / 2,\n                lineWidth: size,\n                stroke: thumbColor,\n                lineCap: lineCap,\n                cursor: 'default',\n            }\n            : {\n                x1: size / 2,\n                y1: thumbOffset + size / 2,\n                x2: size / 2,\n                y2: thumbOffset + thumbLen - size / 2,\n                lineWidth: size,\n                stroke: thumbColor,\n                lineCap: lineCap,\n                cursor: 'default',\n            };\n        return this.addShape(group, {\n            id: this.getElementId('thumb'),\n            name: 'thumb',\n            type: 'line',\n            attrs: attrs,\n        });\n    };\n    Scrollbar.prototype.bindEvents = function () {\n        var group = this.get('group');\n        group.on('mousedown', this.onStartEvent(false));\n        group.on('mouseup', this.onMouseUp);\n        group.on('touchstart', this.onStartEvent(true));\n        group.on('touchend', this.onMouseUp);\n        var trackShape = group.findById(this.getElementId('track'));\n        trackShape.on('click', this.onTrackClick);\n        var thumbShape = group.findById(this.getElementId('thumb'));\n        thumbShape.on('mouseover', this.onThumbMouseOver);\n        thumbShape.on('mouseout', this.onThumbMouseOut);\n    };\n    Scrollbar.prototype.getContainerDOM = function () {\n        var container = this.get('container');\n        var canvas = container && container.get('canvas');\n        return canvas && canvas.get('container');\n    };\n    Scrollbar.prototype.validateRange = function (offset) {\n        var _a = this.cfg, thumbLen = _a.thumbLen, trackLen = _a.trackLen;\n        var newOffset = offset;\n        if (offset + thumbLen > trackLen) {\n            newOffset = trackLen - thumbLen;\n        }\n        else if (offset + thumbLen < thumbLen) {\n            newOffset = 0;\n        }\n        return newOffset;\n    };\n    Scrollbar.prototype.draw = function () {\n        var container = this.get('container');\n        var canvas = container && container.get('canvas');\n        if (canvas) {\n            canvas.draw();\n        }\n    };\n    Scrollbar.prototype.updateThumbOffset = function (offset) {\n        var _a = this.cfg, thumbOffset = _a.thumbOffset, isHorizontal = _a.isHorizontal, thumbLen = _a.thumbLen, size = _a.size;\n        var newOffset = this.validateRange(offset);\n        if (newOffset === thumbOffset) {\n            // 如果更新后的 offset 与原值相同，则不改变\n            return;\n        }\n        var thumbShape = this.getElementByLocalId('thumb');\n        if (isHorizontal) {\n            thumbShape.attr({\n                x1: newOffset + size / 2,\n                x2: newOffset + thumbLen - size / 2,\n            });\n        }\n        else {\n            thumbShape.attr({\n                y1: newOffset + size / 2,\n                y2: newOffset + thumbLen - size / 2,\n            });\n        }\n        this.emitOffsetChange(newOffset);\n    };\n    Scrollbar.prototype.emitOffsetChange = function (offset) {\n        var _a = this.cfg, originalValue = _a.thumbOffset, trackLen = _a.trackLen, thumbLen = _a.thumbLen;\n        this.cfg.thumbOffset = offset;\n        // 发送事件\n        this.emit('scrollchange', {\n            thumbOffset: offset,\n            ratio: clamp(offset / (trackLen - thumbLen), 0, 1),\n        });\n        this.delegateEmit('valuechange', {\n            originalValue: originalValue,\n            value: offset,\n        });\n    };\n    return Scrollbar;\n}(GroupComponent));\nexport { Scrollbar };\n//# sourceMappingURL=scrollbar.js.map","/* 依赖的模块，在这里统一引入，方便打包优化 */\n// G\nexport { Event, AbstractGroup, AbstractShape, } from '@antv/g-base';\n// adjust\nexport { registerAdjust, getAdjust, Adjust } from '@antv/adjust';\n// attr\nexport { getAttribute, Attribute } from '@antv/attr';\nexport { Color } from '@antv/attr';\n// coordinate\nexport { getCoordinate, registerCoordinate, Coordinate } from '@antv/coord';\n// scale\nexport { getScale, registerScale, Scale } from '@antv/scale';\n// component\nimport { Annotation, Axis, Component, Crosshair, Grid, GroupComponent, HtmlComponent, Legend, Slider, Tooltip, Scrollbar, } from '@antv/component';\nexport { HtmlComponent, GroupComponent, Component, Crosshair };\nexport { Annotation };\n// axis\nvar LineAxis = Axis.Line, CircleAxis = Axis.Circle;\nexport { LineAxis, CircleAxis };\n// grid\nvar LineGrid = Grid.Line, CircleGrid = Grid.Circle;\nexport { LineGrid, CircleGrid };\n// legend\nvar CategoryLegend = Legend.Category, ContinuousLegend = Legend.Continuous;\nexport { CategoryLegend, ContinuousLegend };\n// Tooltip\nvar HtmlTooltip = Tooltip.Html;\nexport { HtmlTooltip };\n// Slider\nexport { Slider };\n// Scrollbar\nexport { Scrollbar };\n//# sourceMappingURL=dependents.js.map","import { each, isEmpty, isNumber, isNumberEqual, max, min } from '@antv/util';\n// 获取图形的包围盒\nfunction getPointsBox(points) {\n    if (isEmpty(points)) {\n        return null;\n    }\n    var minX = points[0].x;\n    var maxX = points[0].x;\n    var minY = points[0].y;\n    var maxY = points[0].y;\n    each(points, function (point) {\n        minX = minX > point.x ? point.x : minX;\n        maxX = maxX < point.x ? point.x : maxX;\n        minY = minY > point.y ? point.y : minY;\n        maxY = maxY < point.y ? point.y : maxY;\n    });\n    return {\n        minX: minX,\n        maxX: maxX,\n        minY: minY,\n        maxY: maxY,\n        centerX: (minX + maxX) / 2,\n        centerY: (minY + maxY) / 2,\n    };\n}\nfunction uniqueValues(array) {\n    return Array.from(new Set(array)).length === 1;\n}\nfunction mid(array) {\n    return (min(array) + max(array)) / 2;\n}\n/**\n * @ignore\n * 根据弧度计算极坐标系下的坐标点\n * @param centerX\n * @param centerY\n * @param radius\n * @param angleInRadian\n * @returns\n */\nexport function polarToCartesian(centerX, centerY, radius, angleInRadian) {\n    return {\n        x: centerX + radius * Math.cos(angleInRadian),\n        y: centerY + radius * Math.sin(angleInRadian),\n    };\n}\n/**\n * @ignore\n * 根据起始角度计算绘制扇形的 path\n * @param centerX\n * @param centerY\n * @param radius\n * @param startAngleInRadian\n * @param endAngleInRadian\n * @returns\n */\nexport function getSectorPath(centerX, centerY, radius, startAngleInRadian, endAngleInRadian, innerRadius) {\n    if (innerRadius === void 0) { innerRadius = 0; }\n    var start = polarToCartesian(centerX, centerY, radius, startAngleInRadian);\n    var end = polarToCartesian(centerX, centerY, radius, endAngleInRadian);\n    var innerStart = polarToCartesian(centerX, centerY, innerRadius, startAngleInRadian);\n    var innerEnd = polarToCartesian(centerX, centerY, innerRadius, endAngleInRadian);\n    if (endAngleInRadian - startAngleInRadian === Math.PI * 2) {\n        // 整个圆是分割成两个圆\n        var middlePoint = polarToCartesian(centerX, centerY, radius, startAngleInRadian + Math.PI);\n        var innerMiddlePoint = polarToCartesian(centerX, centerY, innerRadius, startAngleInRadian + Math.PI);\n        var circlePathCommands = [\n            ['M', start.x, start.y],\n            ['A', radius, radius, 0, 1, 1, middlePoint.x, middlePoint.y],\n            ['A', radius, radius, 0, 1, 1, end.x, end.y],\n            ['M', innerStart.x, innerStart.y],\n        ];\n        if (innerRadius) {\n            circlePathCommands.push(['A', innerRadius, innerRadius, 0, 1, 0, innerMiddlePoint.x, innerMiddlePoint.y]);\n            circlePathCommands.push(['A', innerRadius, innerRadius, 0, 1, 0, innerEnd.x, innerEnd.y]);\n        }\n        circlePathCommands.push(['M', start.x, start.y]);\n        circlePathCommands.push(['Z']);\n        return circlePathCommands;\n    }\n    var arcSweep = endAngleInRadian - startAngleInRadian <= Math.PI ? 0 : 1;\n    var sectorPathCommands = [\n        ['M', start.x, start.y],\n        ['A', radius, radius, 0, arcSweep, 1, end.x, end.y],\n        ['L', innerEnd.x, innerEnd.y],\n    ];\n    if (innerRadius) {\n        sectorPathCommands.push(['A', innerRadius, innerRadius, 0, arcSweep, 0, innerStart.x, innerStart.y]);\n    }\n    sectorPathCommands.push(['L', start.x, start.y]);\n    sectorPathCommands.push(['Z']);\n    return sectorPathCommands;\n}\n/**\n * @ignore\n * Gets arc path\n * @param centerX\n * @param centerY\n * @param radius\n * @param startAngleInRadian\n * @param endAngleInRadian\n * @returns\n */\nexport function getArcPath(centerX, centerY, radius, startAngleInRadian, endAngleInRadian) {\n    var start = polarToCartesian(centerX, centerY, radius, startAngleInRadian);\n    var end = polarToCartesian(centerX, centerY, radius, endAngleInRadian);\n    if (isNumberEqual(endAngleInRadian - startAngleInRadian, Math.PI * 2)) {\n        var middlePoint = polarToCartesian(centerX, centerY, radius, startAngleInRadian + Math.PI);\n        return [\n            ['M', start.x, start.y],\n            ['A', radius, radius, 0, 1, 1, middlePoint.x, middlePoint.y],\n            ['A', radius, radius, 0, 1, 1, start.x, start.y],\n            ['A', radius, radius, 0, 1, 0, middlePoint.x, middlePoint.y],\n            ['A', radius, radius, 0, 1, 0, start.x, start.y],\n            ['Z'],\n        ];\n    }\n    var arcSweep = endAngleInRadian - startAngleInRadian <= Math.PI ? 0 : 1;\n    return [\n        ['M', start.x, start.y],\n        ['A', radius, radius, 0, arcSweep, 1, end.x, end.y],\n    ];\n}\n/**\n * @ignore\n * 从数据模型中的 points 换算角度\n * @param shapeModel\n * @param coordinate\n * @returns\n */\nexport function getAngle(shapeModel, coordinate) {\n    var points = shapeModel.points;\n    var box = getPointsBox(points);\n    var endAngle;\n    var startAngle;\n    var coordStartAngle = coordinate.startAngle, coordEndAngle = coordinate.endAngle;\n    var diffAngle = coordEndAngle - coordStartAngle;\n    if (coordinate.isTransposed) {\n        endAngle = box.maxY * diffAngle;\n        startAngle = box.minY * diffAngle;\n    }\n    else {\n        endAngle = box.maxX * diffAngle;\n        startAngle = box.minX * diffAngle;\n    }\n    endAngle += coordStartAngle;\n    startAngle += coordStartAngle;\n    return {\n        startAngle: startAngle,\n        endAngle: endAngle,\n    };\n}\n/**\n * @ignore\n * 计算多边形重心: https://en.wikipedia.org/wiki/Centroid#Of_a_polygon\n */\nexport function getPolygonCentroid(xs, ys) {\n    if (isNumber(xs) && isNumber(ys)) {\n        // 普通色块图，xs 和 ys 是数值\n        return [xs, ys];\n    }\n    xs = xs;\n    ys = ys;\n    // 当这个 polygon 的点在一条线上的时候\n    // 也就是说 xs 里面的值都相同，比如：[1, 1, 1, 1]\n    // 或者说 ys 里面的值都相同，比如：[0, 0, 0, 0]\n    // 下面计算得到的 k = 0\n    // 导致返回的值是 [NaN, NaN]\n    // 所以这里做相应的处理\n    if (uniqueValues(xs) || uniqueValues(ys))\n        return [mid(xs), mid(ys)];\n    var i = -1;\n    var x = 0;\n    var y = 0;\n    var former;\n    var current = xs.length - 1;\n    var diff;\n    var k = 0;\n    while (++i < xs.length) {\n        former = current;\n        current = i;\n        k += diff = xs[former] * ys[current] - xs[current] * ys[former];\n        x += (xs[former] + xs[current]) * diff;\n        y += (ys[former] + ys[current]) * diff;\n    }\n    k *= 3;\n    return [x / k, y / k];\n}\n/**\n * @ignore\n * 获取需要替换的属性，如果原先图形元素存在，而新图形不存在，则设置 undefined\n */\nexport function getReplaceAttrs(sourceShape, targetShape) {\n    var originAttrs = sourceShape.attr();\n    var newAttrs = targetShape.attr();\n    each(originAttrs, function (v, k) {\n        if (newAttrs[k] === undefined) {\n            newAttrs[k] = undefined;\n        }\n    });\n    return newAttrs;\n}\n//# sourceMappingURL=graphics.js.map","import { __values } from \"tslib\";\nimport { isArray, isString } from '@antv/util';\n/**\n * @ignore\n * Determines whether between is\n * @param value\n * @param start\n * @param end\n * @returns true if between\n */\nexport function isBetween(value, start, end) {\n    var min = Math.min(start, end);\n    var max = Math.max(start, end);\n    return value >= min && value <= max;\n}\n/**\n * @ignore\n * pads the current string/array with a given value (repeated, if needed) so that the resulting reaches a given length.\n * The padding is applied from the end of the current value.\n *\n * @param source\n * @param targetLength\n * @param padValue\n * @returns\n */\nexport function padEnd(source, targetLength, padValue) {\n    if (isString(source)) {\n        return source.padEnd(targetLength, padValue);\n    }\n    else if (isArray(source)) {\n        var sourceLength = source.length;\n        if (sourceLength < targetLength) {\n            var diff = targetLength - sourceLength;\n            for (var i = 0; i < diff; i++) {\n                source.push(padValue);\n            }\n        }\n    }\n    return source;\n}\n/**\n * @ignore\n * omit keys of an object.\n * @param obj\n * @param keys\n */\nexport function omit(obj, keys) {\n    if (typeof obj === 'object') {\n        keys.forEach(function (key) {\n            delete obj[key];\n        });\n    }\n    return obj;\n}\n/**\n * @ignore\n * @param sourceArray\n * @param targetArray\n * @param map\n */\nexport function uniq(sourceArray, targetArray, map) {\n    var e_1, _a;\n    if (targetArray === void 0) { targetArray = []; }\n    if (map === void 0) { map = new Map(); }\n    try {\n        for (var sourceArray_1 = __values(sourceArray), sourceArray_1_1 = sourceArray_1.next(); !sourceArray_1_1.done; sourceArray_1_1 = sourceArray_1.next()) {\n            var source = sourceArray_1_1.value;\n            if (!map.has(source)) {\n                targetArray.push(source);\n                map.set(source, true);\n            }\n        }\n    }\n    catch (e_1_1) { e_1 = { error: e_1_1 }; }\n    finally {\n        try {\n            if (sourceArray_1_1 && !sourceArray_1_1.done && (_a = sourceArray_1.return)) _a.call(sourceArray_1);\n        }\n        finally { if (e_1) throw e_1.error; }\n    }\n    return targetArray;\n}\n//# sourceMappingURL=helper.js.map","import { __read } from \"tslib\";\nimport { each } from '@antv/util';\nimport { DIRECTION } from '../constant';\n/**\n * 用于包围盒计算。\n */\nvar BBox = /** @class */ (function () {\n    function BBox(x, y, width, height) {\n        if (x === void 0) { x = 0; }\n        if (y === void 0) { y = 0; }\n        if (width === void 0) { width = 0; }\n        if (height === void 0) { height = 0; }\n        this.x = x;\n        this.y = y;\n        this.height = height;\n        this.width = width;\n    }\n    BBox.fromRange = function (minX, minY, maxX, maxY) {\n        return new BBox(minX, minY, maxX - minX, maxY - minY);\n    };\n    BBox.fromObject = function (bbox) {\n        return new BBox(bbox.minX, bbox.minY, bbox.width, bbox.height);\n    };\n    Object.defineProperty(BBox.prototype, \"minX\", {\n        get: function () {\n            return this.x;\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(BBox.prototype, \"maxX\", {\n        get: function () {\n            return this.x + this.width;\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(BBox.prototype, \"minY\", {\n        get: function () {\n            return this.y;\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(BBox.prototype, \"maxY\", {\n        get: function () {\n            return this.y + this.height;\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(BBox.prototype, \"tl\", {\n        get: function () {\n            return { x: this.x, y: this.y };\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(BBox.prototype, \"tr\", {\n        get: function () {\n            return { x: this.maxX, y: this.y };\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(BBox.prototype, \"bl\", {\n        get: function () {\n            return { x: this.x, y: this.maxY };\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(BBox.prototype, \"br\", {\n        get: function () {\n            return { x: this.maxX, y: this.maxY };\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(BBox.prototype, \"top\", {\n        get: function () {\n            return {\n                x: this.x + this.width / 2,\n                y: this.minY,\n            };\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(BBox.prototype, \"right\", {\n        get: function () {\n            return {\n                x: this.maxX,\n                y: this.y + this.height / 2,\n            };\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(BBox.prototype, \"bottom\", {\n        get: function () {\n            return {\n                x: this.x + this.width / 2,\n                y: this.maxY,\n            };\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(BBox.prototype, \"left\", {\n        get: function () {\n            return {\n                x: this.minX,\n                y: this.y + this.height / 2,\n            };\n        },\n        enumerable: false,\n        configurable: true\n    });\n    // end 计算属性\n    /**\n     * 包围盒是否相等\n     * @param {BBox} bbox 包围盒\n     * @returns      包围盒是否相等\n     */\n    BBox.prototype.isEqual = function (bbox) {\n        return this.x === bbox.x && this.y === bbox.y && this.width === bbox.width && this.height === bbox.height;\n    };\n    /**\n     * 是否包含了另一个包围盒\n     * @param child\n     */\n    BBox.prototype.contains = function (child) {\n        return child.minX >= this.minX && child.maxX <= this.maxX && child.minY >= this.minY && child.maxY <= this.maxY;\n    };\n    /**\n     * 克隆包围盒\n     * @returns 包围盒\n     */\n    BBox.prototype.clone = function () {\n        return new BBox(this.x, this.y, this.width, this.height);\n    };\n    /**\n     * 取并集\n     * @param subBBox\n     */\n    BBox.prototype.add = function () {\n        var subBBox = [];\n        for (var _i = 0; _i < arguments.length; _i++) {\n            subBBox[_i] = arguments[_i];\n        }\n        var bbox = this.clone();\n        each(subBBox, function (b) {\n            bbox.x = Math.min(b.x, bbox.x);\n            bbox.y = Math.min(b.y, bbox.y);\n            bbox.width = Math.max(b.maxX, bbox.maxX) - bbox.x;\n            bbox.height = Math.max(b.maxY, bbox.maxY) - bbox.y;\n        });\n        return bbox;\n    };\n    /**\n     * 取交集\n     * @param subBBox\n     */\n    BBox.prototype.merge = function () {\n        var subBBox = [];\n        for (var _i = 0; _i < arguments.length; _i++) {\n            subBBox[_i] = arguments[_i];\n        }\n        var bbox = this.clone();\n        each(subBBox, function (b) {\n            bbox.x = Math.max(b.x, bbox.x);\n            bbox.y = Math.max(b.y, bbox.y);\n            bbox.width = Math.min(b.maxX, bbox.maxX) - bbox.x;\n            bbox.height = Math.min(b.maxY, bbox.maxY) - bbox.y;\n        });\n        return bbox;\n    };\n    /**\n     * bbox 剪裁\n     * @param subBBox\n     * @param direction\n     */\n    BBox.prototype.cut = function (subBBox, direction) {\n        var width = subBBox.width;\n        var height = subBBox.height;\n        switch (direction) {\n            case DIRECTION.TOP:\n            case DIRECTION.TOP_LEFT:\n            case DIRECTION.TOP_RIGHT:\n                return BBox.fromRange(this.minX, this.minY + height, this.maxX, this.maxY);\n            case DIRECTION.RIGHT:\n            case DIRECTION.RIGHT_TOP:\n            case DIRECTION.RIGHT_BOTTOM:\n                return BBox.fromRange(this.minX, this.minY, this.maxX - width, this.maxY);\n            case DIRECTION.BOTTOM:\n            case DIRECTION.BOTTOM_LEFT:\n            case DIRECTION.BOTTOM_RIGHT:\n                return BBox.fromRange(this.minX, this.minY, this.maxX, this.maxY - height);\n            case DIRECTION.LEFT:\n            case DIRECTION.LEFT_TOP:\n            case DIRECTION.LEFT_BOTTOM:\n                return BBox.fromRange(this.minX + width, this.minY, this.maxX, this.maxY);\n            default:\n                // 其他情况不裁剪，原样返回\n                return this;\n        }\n    };\n    /**\n     * 收缩形成新的\n     * @param gap\n     */\n    BBox.prototype.shrink = function (gap) {\n        var _a = __read(gap, 4), top = _a[0], right = _a[1], bottom = _a[2], left = _a[3];\n        return new BBox(this.x + left, this.y + top, this.width - left - right, this.height - top - bottom);\n    };\n    /**\n     * 扩张形成新的\n     * @param gap\n     */\n    BBox.prototype.expand = function (gap) {\n        var _a = __read(gap, 4), top = _a[0], right = _a[1], bottom = _a[2], left = _a[3];\n        return new BBox(this.x - left, this.y - top, this.width + left + right, this.height + top + bottom);\n    };\n    /**\n     * get the gap of two bbox, if not exceed, then 0\n     * @param bbox\n     * @returns [top, right, bottom, left]\n     */\n    BBox.prototype.exceed = function (bbox) {\n        return [\n            Math.max(-this.minY + bbox.minY, 0),\n            Math.max(this.maxX - bbox.maxX, 0),\n            Math.max(this.maxY - bbox.maxY, 0),\n            Math.max(-this.minX + bbox.minX, 0),\n        ];\n    };\n    /**\n     * 是否碰撞\n     * @param bbox\n     */\n    BBox.prototype.collide = function (bbox) {\n        return this.minX < bbox.maxX && this.maxX > bbox.minX && this.minY < bbox.maxY && this.maxY > bbox.minY;\n    };\n    /**\n     * 获取包围盒大小\n     * @returns 包围盒大小\n     */\n    BBox.prototype.size = function () {\n        return this.width * this.height;\n    };\n    /**\n     * 点是否在 bbox 中\n     * @param p\n     */\n    BBox.prototype.isPointIn = function (p) {\n        return p.x >= this.minX && p.x <= this.maxX && p.y >= this.minY && p.y <= this.maxY;\n    };\n    return BBox;\n}());\nexport { BBox };\n/**\n * 从一个 bbox 的 region 获取 bbox\n * @param bbox\n * @param region\n */\nexport var getRegionBBox = function (bbox, region) {\n    var start = region.start, end = region.end;\n    return new BBox(bbox.x + bbox.width * start.x, bbox.y + bbox.height * start.y, bbox.width * Math.abs(end.x - start.x), bbox.height * Math.abs(end.y - start.y));\n};\n/**\n * 将 bbox 转换成 points\n * @param bbox\n */\nexport function toPoints(bbox) {\n    return [\n        [bbox.minX, bbox.minY],\n        [bbox.maxX, bbox.minY],\n        [bbox.maxX, bbox.maxY],\n        [bbox.minX, bbox.maxY],\n    ];\n}\n//# sourceMappingURL=bbox.js.map","import { getSectorPath } from './graphics';\nimport { isBetween } from './helper';\nimport { BBox } from './bbox';\n/**\n * @ignore\n * Gets x dimension length\n * @param coordinate\n * @returns x dimension length\n */\nexport function getXDimensionLength(coordinate) {\n    if (coordinate.isPolar && !coordinate.isTransposed) {\n        // 极坐标系下 width 为弧长\n        return (coordinate.endAngle - coordinate.startAngle) * coordinate.getRadius();\n    }\n    // 直角坐标系\n    var start = coordinate.convert({ x: 0, y: 0 });\n    var end = coordinate.convert({ x: 1, y: 0 });\n    // 坐标系有可能发生 transpose 等变换，所有通过两点之间的距离进行计算\n    return Math.sqrt(Math.pow(end.x - start.x, 2) + Math.pow(end.y - start.y, 2));\n}\n/**\n * @ignore\n * Determines whether full circle is\n * @param coordinate\n * @returns true if full circle\n */\nexport function isFullCircle(coordinate) {\n    if (coordinate.isPolar) {\n        var startAngle = coordinate.startAngle, endAngle = coordinate.endAngle;\n        return endAngle - startAngle === Math.PI * 2;\n    }\n    return false;\n}\n/**\n * @ignore\n * 获取当前点到坐标系圆心的距离\n * @param coordinate 坐标系\n * @param point 当前点\n * @returns distance to center\n */\nexport function getDistanceToCenter(coordinate, point) {\n    var center = coordinate.getCenter();\n    return Math.sqrt(Math.pow((point.x - center.x), 2) + Math.pow((point.y - center.y), 2));\n}\n/**\n * @ignore\n * 坐标点是否在坐标系中\n * @param coordinate\n * @param point\n */\nexport function isPointInCoordinate(coordinate, point) {\n    var result = false;\n    if (coordinate) {\n        if (coordinate.type === 'theta') {\n            var start = coordinate.start, end = coordinate.end;\n            result = isBetween(point.x, start.x, end.x) && isBetween(point.y, start.y, end.y);\n        }\n        else {\n            var invertPoint = coordinate.invert(point);\n            result = isBetween(invertPoint.x, 0, 1) && isBetween(invertPoint.y, 0, 1);\n        }\n    }\n    return result;\n}\n/**\n * @ignore\n * 获取点到圆心的连线与水平方向的夹角\n */\nexport function getAngleByPoint(coordinate, point) {\n    var center = coordinate.getCenter();\n    return Math.atan2(point.y - center.y, point.x - center.x);\n}\n/**\n * @ignore\n * 获取同坐标系范围相同的剪切区域\n * @param coordinate\n * @returns\n */\nexport function getCoordinateClipCfg(coordinate, margin) {\n    if (margin === void 0) { margin = 0; }\n    var start = coordinate.start, end = coordinate.end;\n    var width = coordinate.getWidth();\n    var height = coordinate.getHeight();\n    if (coordinate.isPolar) {\n        var startAngle_1 = coordinate.startAngle, endAngle_1 = coordinate.endAngle;\n        var center_1 = coordinate.getCenter();\n        var radius_1 = coordinate.getRadius();\n        return {\n            type: 'path',\n            startState: {\n                path: getSectorPath(center_1.x, center_1.y, radius_1 + margin, startAngle_1, startAngle_1),\n            },\n            endState: function (ratio) {\n                var diff = (endAngle_1 - startAngle_1) * ratio + startAngle_1;\n                var path = getSectorPath(center_1.x, center_1.y, radius_1 + margin, startAngle_1, diff);\n                return {\n                    path: path,\n                };\n            },\n            attrs: {\n                path: getSectorPath(center_1.x, center_1.y, radius_1 + margin, startAngle_1, endAngle_1),\n            },\n        };\n    }\n    var endState;\n    if (coordinate.isTransposed) {\n        endState = {\n            height: height + margin * 2,\n        };\n    }\n    else {\n        endState = {\n            width: width + margin * 2,\n        };\n    }\n    return {\n        type: 'rect',\n        startState: {\n            x: start.x - margin,\n            y: end.y - margin,\n            width: coordinate.isTransposed ? width + margin * 2 : 0,\n            height: coordinate.isTransposed ? 0 : height + margin * 2,\n        },\n        endState: endState,\n        attrs: {\n            x: start.x - margin,\n            y: end.y - margin,\n            width: width + margin * 2,\n            height: height + margin * 2,\n        },\n    };\n}\n/**\n * 获取坐标系范围的 BBox\n * @param coordinate\n * @param margin\n */\nexport function getCoordinateBBox(coordinate, margin) {\n    if (margin === void 0) { margin = 0; }\n    var start = coordinate.start, end = coordinate.end;\n    var width = coordinate.getWidth();\n    var height = coordinate.getHeight();\n    var minX = Math.min(start.x, end.x);\n    var minY = Math.min(start.y, end.y);\n    return BBox.fromRange(minX - margin, minY - margin, minX + width + margin, minY + height + margin);\n}\n//# sourceMappingURL=coordinate.js.map","import { __assign, __read, __spreadArray } from \"tslib\";\nimport { firstValue, get, isEmpty, isNil, isNumber, isString, valuesOfKey } from '@antv/util';\nimport { GROUP_ATTRS } from '../constant';\nimport { getScale } from '../dependents';\nimport { isFullCircle } from './coordinate';\nvar dateRegex = /^(?:(?!0000)[0-9]{4}([-/.]+)(?:(?:0?[1-9]|1[0-2])\\1(?:0?[1-9]|1[0-9]|2[0-8])|(?:0?[13-9]|1[0-2])\\1(?:29|30)|(?:0?[13578]|1[02])\\1(?:31))|(?:[0-9]{2}(?:0[48]|[2468][048]|[13579][26])|(?:0[48]|[2468][048]|[13579][26])00)([-/.]+)0?2\\2(?:29))(\\s+([01]|([01][0-9]|2[0-3])):([0-9]|[0-5][0-9]):([0-9]|[0-5][0-9]))?$/;\n/**\n * 获取字段对应数据的类型\n * @param field 数据字段名\n * @param data 数据源\n * @returns default type 返回对应的数据类型\n */\nfunction getDefaultType(value) {\n    var type = 'linear';\n    if (dateRegex.test(value)) {\n        type = 'timeCat';\n    }\n    else if (isString(value)) {\n        type = 'cat';\n    }\n    return type;\n}\n/**\n * using the scale type if user specified, otherwise infer the type\n */\nexport function inferScaleType(scale, scaleDef, attrType, geometryType) {\n    if (scaleDef === void 0) { scaleDef = {}; }\n    if (scaleDef.type)\n        return scaleDef.type;\n    // identity scale 直接返回\n    // geometry 类型有: edge,heatmap,interval,line,path,point,polygon,schema,voilin等；理论上，interval 下，可以用 linear scale 作为分组字段\n    if (scale.type !== 'identity' && GROUP_ATTRS.includes(attrType) && ['interval'].includes(geometryType)) {\n        return 'cat';\n    }\n    return scale.isCategory ? 'cat' : scale.type;\n}\n/**\n * @ignore\n * 为指定的 `field` 字段数据创建 scale\n * @param field 字段名\n * @param [data] 数据集，可为空\n * @param [scaleDef] 列定义，可为空\n * @returns scale 返回创建的 Scale 实例\n */\nexport function createScaleByField(field, data, scaleDef) {\n    var validData = data || [];\n    if (isNumber(field) || (isNil(firstValue(validData, field)) && isEmpty(scaleDef))) {\n        var Identity = getScale('identity');\n        return new Identity({\n            field: field.toString(),\n            values: [field],\n        });\n    }\n    var values = valuesOfKey(validData, field);\n    // 如果已经定义过这个度量 (fix-later 单纯从数据中，推断 scale type 是不精确的)\n    var type = get(scaleDef, 'type', getDefaultType(values[0]));\n    var ScaleCtor = getScale(type);\n    return new ScaleCtor(__assign({ field: field, values: values }, scaleDef));\n}\n/**\n * @ignore\n * 同步 scale\n * @todo 是否可以通过 scale.update() 方法进行更新\n * @param scale 需要同步的 scale 实例\n * @param newScale 同步源 Scale\n */\nexport function syncScale(scale, newScale) {\n    if (scale.type !== 'identity' && newScale.type !== 'identity') {\n        var obj = {};\n        for (var k in newScale) {\n            if (Object.prototype.hasOwnProperty.call(newScale, k)) {\n                obj[k] = newScale[k];\n            }\n        }\n        scale.change(obj);\n    }\n}\n/**\n * @ignore\n * get the scale name, if alias exist, return alias, or else field\n * @param scale\n * @returns the name of field\n */\nexport function getName(scale) {\n    return scale.alias || scale.field;\n}\n/**\n * 根据 scale values 和 coordinate 获取分类默认 range\n * @param scale 需要获取的 scale 实例\n * @param coordinate coordinate 实例\n * @param theme theme\n */\nexport function getDefaultCategoryScaleRange(scale, coordinate, theme) {\n    var values = scale.values;\n    var count = values.length;\n    var range;\n    if (count === 1) {\n        range = [0.5, 1]; // 只有一个分类时,防止计算出现 [0.5,0.5] 的状态\n    }\n    else {\n        var widthRatio = 1;\n        var offset = 0;\n        if (isFullCircle(coordinate)) {\n            if (!coordinate.isTransposed) {\n                range = [0, 1 - 1 / count];\n            }\n            else {\n                widthRatio = get(theme, 'widthRatio.multiplePie', 1 / 1.3);\n                offset = (1 / count) * widthRatio;\n                range = [offset / 2, 1 - offset / 2];\n            }\n        }\n        else {\n            offset = 1 / count / 2; // 两边留下分类空间的一半\n            range = [offset, 1 - offset]; // 坐标轴最前面和最后面留下空白防止绘制柱状图时\n        }\n    }\n    return range;\n}\n/**\n * @function y轴scale的max\n * @param {yScale}\n */\nexport function getMaxScale(scale) {\n    // 过滤values[]中 NaN/undefined/null 等\n    var values = scale.values.filter(function (item) { return !isNil(item) && !isNaN(item); });\n    return Math.max.apply(Math, __spreadArray(__spreadArray([], __read(values), false), [isNil(scale.max) ? -Infinity : scale.max], false));\n}\n//# sourceMappingURL=scale.js.map","import { deepMix, get, isBoolean } from '@antv/util';\nimport { DIRECTION } from '../constant';\nimport { getName } from './scale';\nimport { vec2 } from '@antv/matrix-util';\n/**\n * @ignore\n * get axis relative region ( 0 ~ 1) by direction when coordinate is rect\n * @param direction\n * @returns axis coordinate region\n */\nexport function getLineAxisRelativeRegion(direction) {\n    var start;\n    var end;\n    switch (direction) {\n        case DIRECTION.TOP:\n            start = { x: 0, y: 1 };\n            end = { x: 1, y: 1 };\n            break;\n        case DIRECTION.RIGHT:\n            start = { x: 1, y: 0 };\n            end = { x: 1, y: 1 };\n            break;\n        case DIRECTION.BOTTOM:\n            start = { x: 0, y: 0 };\n            end = { x: 1, y: 0 };\n            break;\n        case DIRECTION.LEFT:\n            start = { x: 0, y: 0 };\n            end = { x: 0, y: 1 };\n            break;\n        default:\n            start = end = { x: 0, y: 0 };\n    }\n    return { start: start, end: end };\n}\n/**\n * @ignore\n * get axis relative region ( 0 ~ 1) by direction when coordinate is polar\n * @param coordinate\n * @returns axis coordinate region\n */\nexport function getCircleAxisRelativeRegion(coordinate) {\n    var start;\n    var end;\n    if (coordinate.isTransposed) {\n        start = {\n            x: 0,\n            y: 0,\n        };\n        end = {\n            x: 1,\n            y: 0,\n        };\n    }\n    else {\n        start = {\n            x: 0,\n            y: 0,\n        };\n        end = {\n            x: 0,\n            y: 1,\n        };\n    }\n    return { start: start, end: end };\n}\n/**\n * @ignore\n * get the axis region from coordinate\n * @param coordinate\n * @param direction\n * @returns the axis region (start point, end point)\n */\nexport function getAxisRegion(coordinate, direction) {\n    var region = { start: { x: 0, y: 0 }, end: { x: 0, y: 0 } };\n    if (coordinate.isRect) {\n        region = getLineAxisRelativeRegion(direction);\n    }\n    else if (coordinate.isPolar) {\n        region = getCircleAxisRelativeRegion(coordinate);\n    }\n    var start = region.start, end = region.end;\n    return {\n        start: coordinate.convert(start),\n        end: coordinate.convert(end),\n    };\n}\n/**\n * @ignore\n * get axis factor\n * @param coordinate\n * @param direction\n * @returns factor\n */\nexport function getAxisFactor(coordinate, direction) {\n    // rect coordinate, by direction\n    if (coordinate.isRect) {\n        return coordinate.isTransposed\n            ? [DIRECTION.RIGHT, DIRECTION.BOTTOM].includes(direction)\n                ? 1\n                : -1\n            : [DIRECTION.BOTTOM, DIRECTION.RIGHT].includes(direction)\n                ? -1\n                : 1;\n    }\n    // polar y axis, by angle\n    if (coordinate.isPolar) {\n        var startAngle = coordinate.x.start;\n        return startAngle < 0 ? -1 : 1;\n    }\n    return 1;\n}\n/**\n * @ignore\n * whether the axis isVertical\n * @param region\n * @returns isVertical\n */\nexport function isVertical(region) {\n    var start = region.start, end = region.end;\n    return start.x === end.x;\n}\n/**\n * @ignore\n * get factor by region (real position)\n * @param region\n * @param center\n * @returns factor\n */\nexport function getAxisFactorByRegion(region, center) {\n    var start = region.start, end = region.end;\n    var isAxisVertical = isVertical(region);\n    // 垂直\n    if (isAxisVertical) {\n        // 左方,从下到上、右方,从上到下\n        if ((start.y - end.y) * (center.x - start.x) > 0) {\n            return 1;\n        }\n        else {\n            return -1;\n        }\n    }\n    else {\n        // 下方,从左到右、上方,从右到做\n        if ((end.x - start.x) * (start.y - center.y) > 0) {\n            return -1;\n        }\n        else {\n            return 1;\n        }\n    }\n}\n/**\n * @ignore\n * get the axis cfg from theme, will mix the common cfg of legend theme\n *\n * @param theme view theme object\n * @param direction axis direction\n * @returns axis theme cfg\n */\nexport function getAxisThemeCfg(theme, direction) {\n    var axisTheme = get(theme, ['components', 'axis'], {});\n    return deepMix({}, get(axisTheme, ['common'], {}), deepMix({}, get(axisTheme, [direction], {})));\n}\n/**\n * get the options of axis title，mix the cfg from theme, avoid common themeCfg not work\n * @param theme\n * @param direction\n * @param axisOptions\n * @returns axis title options\n */\nexport function getAxisTitleOptions(theme, direction, axisOptions) {\n    var axisTheme = get(theme, ['components', 'axis'], {});\n    return deepMix({}, get(axisTheme, ['common', 'title'], {}), deepMix({}, get(axisTheme, [direction, 'title'], {})), axisOptions);\n}\n/**\n * @ignore\n * get circle axis center and radius\n * @param coordinate\n */\nexport function getCircleAxisCenterRadius(coordinate) {\n    // @ts-ignore\n    var x = coordinate.x, y = coordinate.y, center = coordinate.circleCenter;\n    var isReflectY = y.start > y.end;\n    var start = coordinate.isTransposed\n        ? coordinate.convert({\n            x: isReflectY ? 0 : 1,\n            y: 0,\n        })\n        : coordinate.convert({\n            x: 0,\n            y: isReflectY ? 0 : 1,\n        });\n    var startVector = [start.x - center.x, start.y - center.y];\n    var normalVector = [1, 0];\n    var startAngle = start.y > center.y ? vec2.angle(startVector, normalVector) : vec2.angle(startVector, normalVector) * -1;\n    var endAngle = startAngle + (x.end - x.start);\n    var radius = Math.sqrt(Math.pow((start.x - center.x), 2) + Math.pow((start.y - center.y), 2));\n    return {\n        center: center,\n        radius: radius,\n        startAngle: startAngle,\n        endAngle: endAngle,\n    };\n}\n/**\n * @ignore\n * 从配置中获取单个字段的 axis 配置\n * @param axes\n * @param field\n * @returns the axis option of field\n */\nexport function getAxisOption(axes, field) {\n    if (isBoolean(axes)) {\n        return axes === false ? false : {};\n    }\n    return get(axes, [field]);\n}\n/**\n * @ignore\n * 如果配置了 position，则使用配置\n * @param axisOption\n * @param def\n */\nexport function getAxisDirection(axisOption, def) {\n    return get(axisOption, 'position', def);\n}\n/**\n * 获取 axis 的 title 文本\n * @param scale\n * @param axisOption\n */\nexport function getAxisTitleText(scale, axisOption) {\n    return get(axisOption, ['title', 'text'], getName(scale));\n}\n//# sourceMappingURL=axis.js.map","import { __read } from \"tslib\";\nimport { deepMix, each, every, get, isNil, isNumber } from '@antv/util';\nimport { LAYER } from '../constant';\nimport { getAxisOption } from '../util/axis';\n/**\n * facet 基类\n *  - 定义生命周期，方便自定义 facet\n *  - 提供基础的生命流程方法\n *\n * 生命周期：\n *\n * 初始化 init\n * 1. 初始化容器\n * 2. 数据分面，生成分面布局信息\n *\n * 渲染阶段 render\n * 1. view 创建\n * 2. title\n * 3. axis\n *\n * 清除阶段 clear\n * 1. 清除 view\n *\n * 销毁阶段 destroy\n * 1. clear\n * 2. 清除事件\n * 3. 清除 group\n */\nvar Facet = /** @class */ (function () {\n    function Facet(view, cfg) {\n        /** 是否销毁 */\n        this.destroyed = false;\n        /** 分面之后的所有分面数据结构 */\n        this.facets = [];\n        this.view = view;\n        this.cfg = deepMix({}, this.getDefaultCfg(), cfg);\n    }\n    /**\n     * 初始化过程\n     */\n    Facet.prototype.init = function () {\n        // 初始化容器\n        if (!this.container) {\n            this.container = this.createContainer();\n        }\n        // 生成分面布局信息\n        var data = this.view.getData();\n        this.facets = this.generateFacets(data);\n    };\n    /**\n     * 渲染分面，由上层 view 调用。包括：\n     *  - 分面 view\n     *  - 轴\n     *  - title\n     *\n     *  子类可以复写，添加一些其他组件，比如滚动条等\n     */\n    Facet.prototype.render = function () {\n        this.renderViews();\n    };\n    /**\n     * 更新 facet\n     */\n    Facet.prototype.update = function () {\n        // 其实不用做任何事情，因为 facet 最终生成的 View 和 Geometry 都在父 view 的更新中处理了\n    };\n    /**\n     * 清空，clear 之后如果还需要使用，需要重新调用 init 初始化过程\n     * 一般在数据有变更的时候调用，重新进行数据的分面逻辑\n     */\n    Facet.prototype.clear = function () {\n        this.clearFacetViews();\n    };\n    /**\n     * 销毁\n     */\n    Facet.prototype.destroy = function () {\n        this.clear();\n        if (this.container) {\n            this.container.remove(true);\n            this.container = undefined;\n        }\n        this.destroyed = true;\n        this.view = undefined;\n        this.facets = [];\n    };\n    /**\n     * 根据 facet 生成 view，可以给上层自定义使用\n     * @param facet\n     */\n    Facet.prototype.facetToView = function (facet) {\n        var region = facet.region, data = facet.data, _a = facet.padding, padding = _a === void 0 ? this.cfg.padding : _a;\n        var view = this.view.createView({\n            region: region,\n            padding: padding,\n        });\n        // 设置分面的数据\n        view.data(data || []);\n        facet.view = view;\n        // 前置钩子\n        this.beforeEachView(view, facet);\n        var eachView = this.cfg.eachView;\n        if (eachView) {\n            eachView(view, facet);\n        }\n        // 后置钩子\n        this.afterEachView(view, facet);\n        return view;\n    };\n    // 创建容器\n    Facet.prototype.createContainer = function () {\n        var foregroundGroup = this.view.getLayer(LAYER.FORE);\n        return foregroundGroup.addGroup();\n    };\n    /**\n     * 初始化 view\n     */\n    Facet.prototype.renderViews = function () {\n        this.createFacetViews();\n    };\n    /**\n     * 创建 分面 view\n     */\n    Facet.prototype.createFacetViews = function () {\n        var _this = this;\n        // 使用分面数据 创建分面 view\n        return this.facets.map(function (facet) {\n            return _this.facetToView(facet);\n        });\n    };\n    /**\n     * 从 view 中清除 facetView\n     */\n    Facet.prototype.clearFacetViews = function () {\n        var _this = this;\n        // 从 view 中移除分面 view\n        each(this.facets, function (facet) {\n            if (facet.view) {\n                _this.view.removeView(facet.view);\n                facet.view = undefined;\n            }\n        });\n    };\n    /**\n     * 解析 spacing\n     */\n    Facet.prototype.parseSpacing = function () {\n        /**\n         * @example\n         *\n         * // 仅使用百分比或像素值\n         * // 横向间隔为 10%，纵向间隔为 10%\n         * ['10%', '10%']\n         * // 横向间隔为 10px，纵向间隔为 10px\n         * [10, 10]\n         *\n         * // 同时使用百分比和像素值\n         * ['10%', 10]\n         * // 横向间隔为 10%，纵向间隔为 10px\n         */\n        var _a = this.view.viewBBox, width = _a.width, height = _a.height;\n        var spacing = this.cfg.spacing;\n        return spacing.map(function (s, idx) {\n            if (isNumber(s))\n                return s / (idx === 0 ? width : height);\n            else\n                return parseFloat(s) / 100;\n        });\n    };\n    // 其他一些提供给子类使用的方法\n    /**\n     * 获取这个字段对应的所有值，数组\n     * @protected\n     * @param data 数据\n     * @param field 字段名\n     * @return 字段对应的值\n     */\n    Facet.prototype.getFieldValues = function (data, field) {\n        var rst = [];\n        var cache = {};\n        // 去重、去除 Nil 值\n        each(data, function (d) {\n            var value = d[field];\n            if (!isNil(value) && !cache[value]) {\n                rst.push(value);\n                cache[value] = true;\n            }\n        });\n        return rst;\n    };\n    /**\n     * 获得每个分面的 region，平分区域\n     * @param rows row 总数\n     * @param cols col 总数\n     * @param xIndex x 方向 index\n     * @param yIndex y 方向 index\n     */\n    Facet.prototype.getRegion = function (rows, cols, xIndex, yIndex) {\n        var _a = __read(this.parseSpacing(), 2), xSpacing = _a[0], ySpacing = _a[1];\n        // 每两个分面区域横向间隔xSPacing, 纵向间隔ySpacing\n        // 每个分面区域的横纵占比\n        /**\n         * ratio * num + spacing * (num - 1) = 1\n         * => ratio = (1 - (spacing * (num - 1))) / num\n         *          = (1 + spacing) / num - spacing\n         *\n         * num 对应 cols/rows\n         * spacing 对应 xSpacing/ySpacing\n         */\n        var xRatio = (1 + xSpacing) / (cols === 0 ? 1 : cols) - xSpacing;\n        var yRatio = (1 + ySpacing) / (rows === 0 ? 1 : rows) - ySpacing;\n        // 得到第 index 个分面区域百分比位置\n        var start = {\n            x: (xRatio + xSpacing) * xIndex,\n            y: (yRatio + ySpacing) * yIndex,\n        };\n        var end = {\n            x: start.x + xRatio,\n            y: start.y + yRatio,\n        };\n        return { start: start, end: end };\n    };\n    Facet.prototype.getDefaultCfg = function () {\n        return {\n            eachView: undefined,\n            showTitle: true,\n            spacing: [0, 0],\n            padding: 10,\n            fields: [],\n        };\n    };\n    /**\n     * 默认的 title 样式，因为有的分面是 title，有的分面配置是 columnTitle、rowTitle\n     */\n    Facet.prototype.getDefaultTitleCfg = function () {\n        // @ts-ignore\n        var fontFamily = this.view.getTheme().fontFamily;\n        return {\n            style: {\n                fontSize: 14,\n                fill: '#666',\n                fontFamily: fontFamily,\n            },\n        };\n    };\n    /**\n     * 处理 axis 的默认配置\n     * @param view\n     * @param facet\n     */\n    Facet.prototype.processAxis = function (view, facet) {\n        var options = view.getOptions();\n        var coordinateOption = options.coordinate;\n        var geometries = view.geometries;\n        var coordinateType = get(coordinateOption, 'type', 'rect');\n        if (coordinateType === 'rect' && geometries.length) {\n            if (isNil(options.axes)) {\n                // @ts-ignore\n                options.axes = {};\n            }\n            var axes = options.axes;\n            var _a = __read(geometries[0].getXYFields(), 2), x = _a[0], y = _a[1];\n            var xOption = getAxisOption(axes, x);\n            var yOption = getAxisOption(axes, y);\n            if (xOption !== false) {\n                options.axes[x] = this.getXAxisOption(x, axes, xOption, facet);\n            }\n            if (yOption !== false) {\n                options.axes[y] = this.getYAxisOption(y, axes, yOption, facet);\n            }\n        }\n    };\n    /**\n     * 获取分面数据\n     * @param conditions\n     */\n    Facet.prototype.getFacetDataFilter = function (conditions) {\n        return function (datum) {\n            // 过滤出全部满足条件的数据\n            return every(conditions, function (condition) {\n                var field = condition.field, value = condition.value;\n                if (!isNil(value) && field) {\n                    return datum[field] === value;\n                }\n                return true;\n            });\n        };\n    };\n    return Facet;\n}());\nexport { Facet };\n//# sourceMappingURL=facet.js.map","import { lowerCase } from '@antv/util';\nexport { Facet } from './facet';\n/**\n * 所有的 Facet 类\n */\nvar Facets = {};\n/**\n * 根据 type 获取 facet 类\n * @param type 分面类型\n */\nexport var getFacet = function (type) {\n    return Facets[lowerCase(type)];\n};\n/**\n * 注册一个 Facet 类\n * @param type 分面类型\n * @param ctor 分面类\n */\nexport var registerFacet = function (type, ctor) {\n    Facets[lowerCase(type)] = ctor;\n};\n//# sourceMappingURL=index.js.map","import { assign } from '@antv/util';\n/**\n * Action 的基类\n */\nvar Action = /** @class */ (function () {\n    function Action(context, cfg) {\n        this.context = context;\n        this.cfg = cfg;\n        context.addAction(this);\n    }\n    /**\n     * 设置配置项传入的值\n     * @param cfg\n     */\n    Action.prototype.applyCfg = function (cfg) {\n        assign(this, cfg);\n    };\n    /**\n     * Inits action，提供给子类用于继承\n     */\n    Action.prototype.init = function () {\n        this.applyCfg(this.cfg);\n    };\n    /**\n     * Destroys action\n     */\n    Action.prototype.destroy = function () {\n        // 移除 action\n        this.context.removeAction(this);\n        // 清空\n        this.context = null;\n    };\n    return Action;\n}());\nexport default Action;\n//# sourceMappingURL=base.js.map","import { __extends } from \"tslib\";\nimport Action from './base';\n/** 回调函数构建的 Action */\nvar CallbackAction = /** @class */ (function (_super) {\n    __extends(CallbackAction, _super);\n    function CallbackAction() {\n        return _super !== null && _super.apply(this, arguments) || this;\n    }\n    /**\n     * 执行\n     */\n    CallbackAction.prototype.execute = function () {\n        if (this.callback) {\n            this.callback(this.context);\n        }\n    };\n    /**\n     * 销毁\n     */\n    CallbackAction.prototype.destroy = function () {\n        _super.prototype.destroy.call(this);\n        this.callback = null;\n    };\n    return CallbackAction;\n}(Action));\nexport default CallbackAction;\n//# sourceMappingURL=callback.js.map","import CallbackAction from './callback';\nimport { get } from '@antv/util';\n// Action 类的缓存\nvar ActionCache = {};\n/**\n * 根据名称获取 Action 实例\n * @param actionName - action 的名称\n * @param context 上下文\n * @returns Action 实例\n */\nexport function createAction(actionName, context) {\n    var actionOption = ActionCache[actionName];\n    var action = null;\n    if (actionOption) {\n        var ActionClass = actionOption.ActionClass, cfg = actionOption.cfg;\n        action = new ActionClass(context, cfg);\n        action.name = actionName;\n        action.init();\n    }\n    return action;\n}\n/**\n * 根据 action 的 name 获取定义的类\n * @param actionName action 的 name\n */\nexport function getActionClass(actionName) {\n    var actionOption = ActionCache[actionName];\n    return get(actionOption, 'ActionClass');\n}\n/**\n * 注册 Action\n * @param actionName - action 的名称\n * @param ActionClass - 继承自 action 的类\n */\nexport function registerAction(actionName, ActionClass, cfg) {\n    ActionCache[actionName] = {\n        ActionClass: ActionClass,\n        cfg: cfg,\n    };\n}\n/**\n * 取消注册 Action\n * @param actionName action 名称\n */\nexport function unregisterAction(actionName) {\n    delete ActionCache[actionName];\n}\n/**\n * 根据回调函数获取 Action 实例\n * @param callback - action 的回调函数\n * @param context 上下文\n * @returns Action 实例\n */\nexport function createCallbackAction(callback, context) {\n    var action = new CallbackAction(context);\n    action.callback = callback;\n    action.name = 'callback';\n    return action;\n}\n//# sourceMappingURL=register.js.map","import { __read } from \"tslib\";\nimport { vec2 } from '@antv/matrix-util';\nimport { each } from '@antv/util';\nimport { getDistanceToCenter } from '../../../util/coordinate';\nfunction _points2path(points, isInCircle) {\n    var path = [];\n    if (points.length) {\n        path.push(['M', points[0].x, points[0].y]);\n        for (var i = 1, length_1 = points.length; i < length_1; i += 1) {\n            var item = points[i];\n            path.push(['L', item.x, item.y]);\n        }\n        if (isInCircle) {\n            path.push(['Z']);\n        }\n    }\n    return path;\n}\nfunction _convertArr(arr, coord) {\n    var tmp = [arr[0]];\n    for (var i = 1, len = arr.length; i < len; i = i + 2) {\n        var point = coord.convert({\n            x: arr[i],\n            y: arr[i + 1],\n        });\n        tmp.push(point.x, point.y);\n    }\n    return tmp;\n}\nfunction _convertArcPath(path, coord) {\n    var isTransposed = coord.isTransposed;\n    var r = path[1];\n    var x = path[6];\n    var y = path[7];\n    var point = coord.convert({ x: x, y: y });\n    var direction = isTransposed ? 0 : 1;\n    return ['A', r, r, 0, 0, direction, point.x, point.y];\n}\nfunction _convertPolarPath(pre, cur, coord) {\n    var isTransposed = coord.isTransposed, startAngle = coord.startAngle, endAngle = coord.endAngle;\n    var prePoint = pre[0].toLowerCase() === 'a'\n        ? {\n            x: pre[6],\n            y: pre[7],\n        }\n        : {\n            x: pre[1],\n            y: pre[2],\n        };\n    var curPoint = {\n        x: cur[1],\n        y: cur[2],\n    };\n    var rst = [];\n    var xDim = isTransposed ? 'y' : 'x';\n    var angleRange = Math.abs(curPoint[xDim] - prePoint[xDim]) * (endAngle - startAngle);\n    var direction = curPoint[xDim] >= prePoint[xDim] ? 1 : 0; // 圆弧的方向\n    var flag = angleRange > Math.PI ? 1 : 0; // 大弧还是小弧标志位\n    var convertPoint = coord.convert(curPoint);\n    var r = getDistanceToCenter(coord, convertPoint);\n    if (r >= 0.5) {\n        // 小于1像素的圆在图像上无法识别\n        if (angleRange === Math.PI * 2) {\n            var middlePoint = {\n                x: (curPoint.x + prePoint.x) / 2,\n                y: (curPoint.y + prePoint.y) / 2,\n            };\n            var middleConvertPoint = coord.convert(middlePoint);\n            rst.push(['A', r, r, 0, flag, direction, middleConvertPoint.x, middleConvertPoint.y]);\n            rst.push(['A', r, r, 0, flag, direction, convertPoint.x, convertPoint.y]);\n        }\n        else {\n            rst.push(['A', r, r, 0, flag, direction, convertPoint.x, convertPoint.y]);\n        }\n    }\n    return rst;\n}\n// 当存在整体的圆时，去除圆前面和后面的线，防止出现直线穿过整个圆的情形\nfunction _filterFullCirleLine(path) {\n    each(path, function (subPath, index) {\n        var cur = subPath;\n        if (cur[0].toLowerCase() === 'a') {\n            var pre = path[index - 1];\n            var next = path[index + 1];\n            if (next && next[0].toLowerCase() === 'a') {\n                if (pre && pre[0].toLowerCase() === 'l') {\n                    pre[0] = 'M';\n                }\n            }\n            else if (pre && pre[0].toLowerCase() === 'a') {\n                if (next && next[0].toLowerCase() === 'l') {\n                    next[0] = 'M';\n                }\n            }\n        }\n    });\n}\n/**\n * @ignore\n * 计算光滑的贝塞尔曲线\n */\nexport var smoothBezier = function (points, smooth, isLoop, constraint) {\n    var _a;\n    var cps = [];\n    var hasConstraint = !!constraint;\n    var prevPoint;\n    var nextPoint;\n    var min;\n    var max;\n    var nextCp0;\n    var cp1;\n    var cp0;\n    if (hasConstraint) {\n        _a = __read(constraint, 2), min = _a[0], max = _a[1];\n        for (var i = 0, l = points.length; i < l; i++) {\n            var point = points[i];\n            min = vec2.min([0, 0], min, point);\n            max = vec2.max([0, 0], max, point);\n        }\n    }\n    for (var i = 0, len = points.length; i < len; i++) {\n        var point = points[i];\n        if (i === 0 && !isLoop) {\n            cp0 = point;\n        }\n        else if (i === len - 1 && !isLoop) {\n            cp1 = point;\n            cps.push(cp0);\n            cps.push(cp1);\n        }\n        else {\n            prevPoint = points[isLoop ? (i ? i - 1 : len - 1) : i - 1];\n            nextPoint = points[isLoop ? (i + 1) % len : i + 1];\n            var v = [0, 0];\n            v = vec2.sub(v, nextPoint, prevPoint);\n            v = vec2.scale(v, v, smooth);\n            var d0 = vec2.distance(point, prevPoint);\n            var d1 = vec2.distance(point, nextPoint);\n            var sum = d0 + d1;\n            if (sum !== 0) {\n                d0 /= sum;\n                d1 /= sum;\n            }\n            var v1 = vec2.scale([0, 0], v, -d0);\n            var v2 = vec2.scale([0, 0], v, d1);\n            cp1 = vec2.add([0, 0], point, v1);\n            nextCp0 = vec2.add([0, 0], point, v2);\n            // 下一个控制点必须在这个点和下一个点之间\n            nextCp0 = vec2.min([0, 0], nextCp0, vec2.max([0, 0], nextPoint, point));\n            nextCp0 = vec2.max([0, 0], nextCp0, vec2.min([0, 0], nextPoint, point));\n            // 重新计算 cp1 的值\n            v1 = vec2.sub([0, 0], nextCp0, point);\n            v1 = vec2.scale([0, 0], v1, -d0 / d1);\n            cp1 = vec2.add([0, 0], point, v1);\n            // 上一个控制点必须要在上一个点和这一个点之间\n            cp1 = vec2.min([0, 0], cp1, vec2.max([0, 0], prevPoint, point));\n            cp1 = vec2.max([0, 0], cp1, vec2.min([0, 0], prevPoint, point));\n            // 重新计算 nextCp0 的值\n            v2 = vec2.sub([0, 0], point, cp1);\n            v2 = vec2.scale([0, 0], v2, d1 / d0);\n            nextCp0 = vec2.add([0, 0], point, v2);\n            if (hasConstraint) {\n                cp1 = vec2.max([0, 0], cp1, min);\n                cp1 = vec2.min([0, 0], cp1, max);\n                nextCp0 = vec2.max([0, 0], nextCp0, min);\n                nextCp0 = vec2.min([0, 0], nextCp0, max);\n            }\n            cps.push(cp0);\n            cps.push(cp1);\n            cp0 = nextCp0;\n        }\n    }\n    if (isLoop) {\n        cps.push(cps.shift());\n    }\n    return cps;\n};\n/**\n * @ignore\n * 贝塞尔曲线\n */\nexport function catmullRom2bezier(crp, z, constraint) {\n    var isLoop = !!z;\n    var pointList = [];\n    for (var i = 0, l = crp.length; i < l; i += 2) {\n        pointList.push([crp[i], crp[i + 1]]);\n    }\n    var controlPointList = smoothBezier(pointList, 0.4, isLoop, constraint);\n    var len = pointList.length;\n    var d1 = [];\n    var cp1;\n    var cp2;\n    var p;\n    for (var i = 0; i < len - 1; i++) {\n        cp1 = controlPointList[i * 2];\n        cp2 = controlPointList[i * 2 + 1];\n        p = pointList[i + 1];\n        d1.push(['C', cp1[0], cp1[1], cp2[0], cp2[1], p[0], p[1]]);\n    }\n    if (isLoop) {\n        cp1 = controlPointList[len];\n        cp2 = controlPointList[len + 1];\n        p = pointList[0];\n        d1.push(['C', cp1[0], cp1[1], cp2[0], cp2[1], p[0], p[1]]);\n    }\n    return d1;\n}\n/**\n * @ignore\n * 将点连接成路径 path\n */\nexport function getLinePath(points, isInCircle) {\n    return _points2path(points, isInCircle);\n}\n/**\n * @ignore\n * 根据关键点获取限定了范围的平滑线\n */\nexport function getSplinePath(points, isInCircle, constaint) {\n    var data = [];\n    var first = points[0];\n    var prePoint = null;\n    if (points.length <= 2) {\n        // 两点以内直接绘制成路径\n        return getLinePath(points, isInCircle);\n    }\n    for (var i = 0, len = points.length; i < len; i++) {\n        var point = points[i];\n        if (!prePoint || !(prePoint.x === point.x && prePoint.y === point.y)) {\n            data.push(point.x);\n            data.push(point.y);\n            prePoint = point;\n        }\n    }\n    var constraint = constaint || [\n        // 范围\n        [0, 0],\n        [1, 1],\n    ];\n    var splinePath = catmullRom2bezier(data, isInCircle, constraint);\n    splinePath.unshift(['M', first.x, first.y]);\n    return splinePath;\n}\n/**\n * @ignore\n * 将归一化后的路径数据转换成坐标\n */\nexport function convertNormalPath(coord, path) {\n    var tmp = [];\n    each(path, function (subPath) {\n        var action = subPath[0];\n        switch (action.toLowerCase()) {\n            case 'm':\n            case 'l':\n            case 'c':\n                tmp.push(_convertArr(subPath, coord));\n                break;\n            case 'a':\n                tmp.push(_convertArcPath(subPath, coord));\n                break;\n            case 'z':\n            default:\n                tmp.push(subPath);\n                break;\n        }\n    });\n    return tmp;\n}\n/**\n * @ignore\n * 将路径转换为极坐标下的真实路径\n */\nexport function convertPolarPath(coord, path) {\n    var tmp = [];\n    var pre;\n    var cur;\n    var transposed;\n    var equals;\n    each(path, function (subPath, index) {\n        var action = subPath[0];\n        switch (action.toLowerCase()) {\n            case 'm':\n            case 'c':\n            case 'q':\n                tmp.push(_convertArr(subPath, coord));\n                break;\n            case 'l':\n                pre = path[index - 1];\n                cur = subPath;\n                transposed = coord.isTransposed;\n                // 是否半径相同，转换成圆弧\n                equals = transposed ? pre[pre.length - 2] === cur[1] : pre[pre.length - 1] === cur[2];\n                if (equals) {\n                    tmp = tmp.concat(_convertPolarPath(pre, cur, coord));\n                }\n                else {\n                    // y 不相等，所以直接转换\n                    tmp.push(_convertArr(subPath, coord));\n                }\n                break;\n            case 'a':\n                tmp.push(_convertArcPath(subPath, coord));\n                break;\n            case 'z':\n            default:\n                tmp.push(subPath);\n                break;\n        }\n    });\n    _filterFullCirleLine(tmp); // 过滤多余的直线\n    return tmp;\n}\n//# sourceMappingURL=path.js.map","import { isArray } from '@antv/util';\nvar SPACES = '\\x09\\x0a\\x0b\\x0c\\x0d\\x20\\xa0\\u1680\\u180e\\u2000\\u2001\\u2002\\u2003\\u2004\\u2005\\u2006\\u2007\\u2008\\u2009\\u200a\\u202f\\u205f\\u3000\\u2028\\u2029';\nvar PATH_COMMAND = new RegExp('([a-z])[' + SPACES + ',]*((-?\\\\d*\\\\.?\\\\d*(?:e[\\\\-+]?\\\\d+)?[' + SPACES + ']*,?[' + SPACES + ']*)+)', 'ig');\nvar PATH_VALUES = new RegExp('(-?\\\\d*\\\\.?\\\\d*(?:e[\\\\-+]?\\\\d+)?)[' + SPACES + ']*,?[' + SPACES + ']*', 'ig');\n// Parses given path string into an array of arrays of path segments\nexport default function parsePathString(pathString) {\n    if (!pathString) {\n        return null;\n    }\n    if (isArray(pathString)) {\n        return pathString;\n    }\n    var paramCounts = {\n        a: 7,\n        c: 6,\n        o: 2,\n        h: 1,\n        l: 2,\n        m: 2,\n        r: 4,\n        q: 4,\n        s: 4,\n        t: 2,\n        v: 1,\n        u: 3,\n        z: 0,\n    };\n    var data = [];\n    String(pathString).replace(PATH_COMMAND, function (a, b, c) {\n        var params = [];\n        var name = b.toLowerCase();\n        c.replace(PATH_VALUES, function (a, b) {\n            b && params.push(+b);\n        });\n        if (name === 'm' && params.length > 2) {\n            data.push([b].concat(params.splice(0, 2)));\n            name = 'l';\n            b = b === 'm' ? 'l' : 'L';\n        }\n        if (name === 'o' && params.length === 1) {\n            data.push([b, params[0]]);\n        }\n        if (name === 'r') {\n            data.push([b].concat(params));\n        }\n        else {\n            while (params.length >= paramCounts[name]) {\n                data.push([b].concat(params.splice(0, paramCounts[name])));\n                if (!paramCounts[name]) {\n                    break;\n                }\n            }\n        }\n        return '';\n    });\n    return data;\n}\n//# sourceMappingURL=parse-path-string.js.map","var isBetween = function (value, min, max) { return value >= min && value <= max; };\nexport default function getLineIntersect(p0, p1, p2, p3) {\n    var tolerance = 0.001;\n    var E = {\n        x: p2.x - p0.x,\n        y: p2.y - p0.y,\n    };\n    var D0 = {\n        x: p1.x - p0.x,\n        y: p1.y - p0.y,\n    };\n    var D1 = {\n        x: p3.x - p2.x,\n        y: p3.y - p2.y,\n    };\n    var kross = D0.x * D1.y - D0.y * D1.x;\n    var sqrKross = kross * kross;\n    var sqrLen0 = D0.x * D0.x + D0.y * D0.y;\n    var sqrLen1 = D1.x * D1.x + D1.y * D1.y;\n    var point = null;\n    if (sqrKross > tolerance * sqrLen0 * sqrLen1) {\n        var s = (E.x * D1.y - E.y * D1.x) / kross;\n        var t = (E.x * D0.y - E.y * D0.x) / kross;\n        if (isBetween(s, 0, 1) && isBetween(t, 0, 1)) {\n            point = {\n                x: p0.x + s * D0.x,\n                y: p0.y + s * D0.y,\n            };\n        }\n    }\n    return point;\n}\n;\n//# sourceMappingURL=get-line-intersect.js.map","/**\n * @fileoverview 判断点是否在多边形内\n * @author dxq613@gmail.com\n */\n// 多边形的射线检测，参考：https://blog.csdn.net/WilliamSun0122/article/details/77994526\nvar tolerance = 1e-6;\n// 三态函数，判断两个double在eps精度下的大小关系\nfunction dcmp(x) {\n    if (Math.abs(x) < tolerance) {\n        return 0;\n    }\n    return x < 0 ? -1 : 1;\n}\n// 判断点Q是否在p1和p2的线段上\nfunction onSegment(p1, p2, q) {\n    if ((q[0] - p1[0]) * (p2[1] - p1[1]) === (p2[0] - p1[0]) * (q[1] - p1[1]) &&\n        Math.min(p1[0], p2[0]) <= q[0] &&\n        q[0] <= Math.max(p1[0], p2[0]) &&\n        Math.min(p1[1], p2[1]) <= q[1] &&\n        q[1] <= Math.max(p1[1], p2[1])) {\n        return true;\n    }\n    return false;\n}\n// 判断点P在多边形内-射线法\nexport default function isInPolygon(points, x, y) {\n    var isHit = false;\n    var n = points.length;\n    if (n <= 2) {\n        // svg 中点小于 3 个时，不显示，也无法被拾取\n        return false;\n    }\n    for (var i = 0; i < n; i++) {\n        var p1 = points[i];\n        var p2 = points[(i + 1) % n];\n        if (onSegment(p1, p2, [x, y])) {\n            // 点在多边形一条边上\n            return true;\n        }\n        // 前一个判断min(p1[1],p2[1])<P.y<=max(p1[1],p2[1])\n        // 后一个判断被测点 在 射线与边交点 的左边\n        if (dcmp(p1[1] - y) > 0 !== dcmp(p2[1] - y) > 0 &&\n            dcmp(x - ((y - p1[1]) * (p1[0] - p2[0])) / (p1[1] - p2[1]) - p1[0]) < 0) {\n            isHit = !isHit;\n        }\n    }\n    return isHit;\n}\n//# sourceMappingURL=point-in-polygon.js.map","import isPointInPolygon from './point-in-polygon';\nimport getLineIntersect from './get-line-intersect';\nimport { each } from '@antv/util';\nfunction parseToLines(points) {\n    var lines = [];\n    var count = points.length;\n    for (var i = 0; i < count - 1; i++) {\n        var point = points[i];\n        var next = points[i + 1];\n        lines.push({\n            from: {\n                x: point[0],\n                y: point[1]\n            },\n            to: {\n                x: next[0],\n                y: next[1]\n            }\n        });\n    }\n    if (lines.length > 1) {\n        var first = points[0];\n        var last = points[count - 1];\n        lines.push({\n            from: {\n                x: last[0],\n                y: last[1]\n            },\n            to: {\n                x: first[0],\n                y: first[1]\n            }\n        });\n    }\n    return lines;\n}\nfunction lineIntersectPolygon(lines, line) {\n    var isIntersect = false;\n    each(lines, function (l) {\n        if (getLineIntersect(l.from, l.to, line.from, line.to)) {\n            isIntersect = true;\n            return false;\n        }\n    });\n    return isIntersect;\n}\nfunction getBBox(points) {\n    var xArr = points.map(function (p) { return p[0]; });\n    var yArr = points.map(function (p) { return p[1]; });\n    return {\n        minX: Math.min.apply(null, xArr),\n        maxX: Math.max.apply(null, xArr),\n        minY: Math.min.apply(null, yArr),\n        maxY: Math.max.apply(null, yArr)\n    };\n}\nfunction intersectBBox(box1, box2) {\n    return !(box2.minX > box1.maxX || box2.maxX < box1.minX || box2.minY > box1.maxY || box2.maxY < box1.minY);\n}\nexport default function isPolygonsIntersect(points1, points2) {\n    // 空数组，或者一个点返回 false\n    if (points1.length < 2 || points2.length < 2) {\n        return false;\n    }\n    var bbox1 = getBBox(points1);\n    var bbox2 = getBBox(points2);\n    // 判定包围盒是否相交，比判定点是否在多边形内要快的多，可以筛选掉大多数情况\n    if (!intersectBBox(bbox1, bbox2)) {\n        return false;\n    }\n    var isIn = false;\n    // 判定点是否在多边形内部，一旦有一个点在另一个多边形内，则返回\n    each(points2, function (point) {\n        if (isPointInPolygon(points1, point[0], point[1])) {\n            isIn = true;\n            return false;\n        }\n    });\n    if (isIn) {\n        return true;\n    }\n    // 两个多边形都需要判定\n    each(points1, function (point) {\n        if (isPointInPolygon(points2, point[0], point[1])) {\n            isIn = true;\n            return false;\n        }\n    });\n    if (isIn) {\n        return true;\n    }\n    var lines1 = parseToLines(points1);\n    var lines2 = parseToLines(points2);\n    var isIntersect = false;\n    each(lines2, function (line) {\n        if (lineIntersectPolygon(lines1, line)) {\n            isIntersect = true;\n            return false;\n        }\n    });\n    return isIntersect;\n}\n//# sourceMappingURL=is-polygons-intersect.js.map","import { __read, __spreadArray } from \"tslib\";\nimport { each, isArray } from '@antv/util';\nimport { catmullRom2bezier, getLinePath } from '../../geometry/shape/util/path';\nimport { toPoints } from '../../util/bbox';\nimport { isPolygonsIntersect } from '@antv/path-util';\nfunction getMaskBBox(context, tolerance) {\n    var event = context.event;\n    var maskShape = event.target;\n    return getMaskBBoxByShape(maskShape, tolerance);\n}\n/**\n * 如果 mask BBox 过小则不返回\n */\nfunction isValidMaskBBox(maskShape, tolerance) {\n    var maskBBox = maskShape.getCanvasBBox();\n    var width = maskBBox.width, height = maskBBox.height;\n    return width > 0 && height > 0 && (width >= tolerance || height >= tolerance);\n}\n/**\n * 通过 maskShape 获取 mask 的 canvasBBox\n * @param maskShape\n * @param tolerance\n * @returns\n */\nfunction getMaskBBoxByShape(maskShape, tolerance) {\n    var maskBBox = maskShape.getCanvasBBox();\n    return isValidMaskBBox(maskShape, tolerance) ? maskBBox : null;\n}\n/**\n * 获取 multiple 模式下 mask 的 canvasBBox 数组\n * @param context 上下文\n * @param tolerance box 宽高小于则不返回\n * @returns\n */\nfunction getMultiMaskBBoxList(context, tolerance) {\n    var maskShapes = context.event.maskShapes;\n    return maskShapes.map(function (maskShape) { return getMaskBBoxByShape(maskShape, tolerance); }).filter(function (bBox) { return !!bBox; });\n}\nfunction getMaskPath(context, tolerance) {\n    var event = context.event;\n    var maskShape = event.target;\n    return getMaskPathByMaskShape(maskShape, tolerance);\n}\n/**\n * 通过 maskShape 获取 mask path\n * @param maskShape\n * @param tolerance box 宽高小于则不返回\n * @returns\n */\nfunction getMaskPathByMaskShape(maskShape, tolerance) {\n    return isValidMaskBBox(maskShape, tolerance) ? maskShape.attr('path') : null;\n}\n/**\n * 获取 multiple 模式下 mask path 数组\n * @param context 上下文\n * @param tolerance box 宽高小于则不返回\n * @returns\n */\nfunction getMultiMaskPathList(context, tolerance) {\n    var maskShapes = context.event.maskShapes;\n    return maskShapes.map(function (maskShape) { return getMaskPathByMaskShape(maskShape, tolerance); });\n}\n/**\n * 获取当前事件相关的图表元素\n * @param context 交互的上下文\n * @ignore\n */\nexport function getCurrentElement(context) {\n    var event = context.event;\n    var element;\n    var target = event.target;\n    if (target) {\n        element = target.get('element');\n    }\n    return element;\n}\n/**\n * 获取委托对象\n * @param context 上下文\n * @ignore\n */\nexport function getDelegationObject(context) {\n    var event = context.event;\n    var target = event.target;\n    var delegateObject;\n    if (target) {\n        delegateObject = target.get('delegateObject');\n    }\n    return delegateObject;\n}\nexport function isElementChange(context) {\n    var event = context.event.gEvent;\n    // 在同一个 element 内部移动，label 和 shape 之间\n    if (event && event.fromShape && event.toShape && event.fromShape.get('element') === event.toShape.get('element')) {\n        return false;\n    }\n    return true;\n}\n/**\n * 是否是列表组件\n * @param delegateObject 委托对象\n * @ignore\n */\nexport function isList(delegateObject) {\n    return delegateObject && delegateObject.component && delegateObject.component.isList();\n}\n/**\n * 是否是滑块组件\n * @param delegateObject 委托对象\n * @ignore\n */\nexport function isSlider(delegateObject) {\n    return delegateObject && delegateObject.component && delegateObject.component.isSlider();\n}\n/**\n * 是否由 mask 触发\n * @param context 上下文\n * @ignore\n */\nexport function isMask(context) {\n    var event = context.event;\n    var target = event.target;\n    return (target && (target === null || target === void 0 ? void 0 : target.get('name')) === 'mask') || isMultipleMask(context);\n}\n/**\n * 是否由 multiple mask 触发\n * @param context\n * @returns\n */\nexport function isMultipleMask(context) {\n    var _a;\n    return ((_a = context.event.target) === null || _a === void 0 ? void 0 : _a.get('name')) === 'multi-mask';\n}\n/**\n * 获取被遮挡的 elements\n * @param context 上下文\n * @ignore\n */\nexport function getMaskedElements(context, tolerance) {\n    var target = context.event.target;\n    // multiple 模式下\n    if (isMultipleMask(context)) {\n        return getMultiMaskedElements(context, tolerance);\n    }\n    // 正常模式下\n    if (target.get('type') === 'path') {\n        var maskPath = getMaskPath(context, tolerance);\n        if (!maskPath) {\n            return;\n        }\n        return getElementsByPath(context.view, maskPath);\n    }\n    var maskBBox = getMaskBBox(context, tolerance);\n    // 如果 bbox 过小则不返回\n    if (!maskBBox) {\n        return null;\n    }\n    return getIntersectElements(context.view, maskBBox);\n}\n/**\n * 获取 multiple 模式下被 mask 遮挡的 elements\n * @param context 上下文\n * @returns\n */\nfunction getMultiMaskedElements(context, tolerance) {\n    var target = context.event.target;\n    if (target.get('type') === 'path') {\n        var maskPathList = getMultiMaskPathList(context, tolerance);\n        if (maskPathList.length > 0) {\n            return maskPathList.flatMap(function (maskPath) { return getElementsByPath(context.view, maskPath); });\n        }\n        return null;\n    }\n    var maskBBoxList = getMultiMaskBBoxList(context, tolerance);\n    if (maskBBoxList.length > 0) {\n        return maskBBoxList.flatMap(function (maskBBox) { return getIntersectElements(context.view, maskBBox); });\n    }\n    return null;\n}\n/**\n * @ignore\n */\nexport function getSiblingMaskElements(context, sibling, tolerance) {\n    // multiple 模式下\n    if (isMultipleMask(context)) {\n        return getSiblingMultiMaskedElements(context, sibling, tolerance);\n    }\n    // 正常模式下\n    var maskBBox = getMaskBBox(context, tolerance);\n    // 如果 bbox 过小则不返回\n    if (!maskBBox) {\n        return null;\n    }\n    return getSiblingMaskElementsByBBox(maskBBox, context, sibling);\n}\n/**\n * 通过 mashBBox 获取 sibling 模式下被 mask 遮挡的 elements\n * @param maskBBox\n * @param context 上下文\n * @param sibling sibling view\n * @returns\n */\nfunction getSiblingMaskElementsByBBox(maskBBox, context, sibling) {\n    var view = context.view;\n    var start = getSiblingPoint(view, sibling, { x: maskBBox.x, y: maskBBox.y });\n    var end = getSiblingPoint(view, sibling, { x: maskBBox.maxX, y: maskBBox.maxY });\n    var box = {\n        minX: start.x,\n        minY: start.y,\n        maxX: end.x,\n        maxY: end.y,\n    };\n    return getIntersectElements(sibling, box);\n}\n/**\n * 获取 sibling 模式下被 multiple mask 遮挡的 elements\n * @param context 上下文\n * @param sibling sibling view\n * @param tolerance box 宽高小于则不返回\n * @returns\n */\nfunction getSiblingMultiMaskedElements(context, sibling, tolerance) {\n    var maskBBoxList = getMultiMaskBBoxList(context, tolerance);\n    if (maskBBoxList.length > 0) {\n        return maskBBoxList.flatMap(function (maskBBox) { return getSiblingMaskElementsByBBox(maskBBox, context, sibling); });\n    }\n    return null;\n}\n/**\n * 获取所有的图表元素\n * @param view View/Chart\n * @ignore\n */\nexport function getElements(view) {\n    var geometries = view.geometries;\n    var rst = [];\n    each(geometries, function (geom) {\n        var elements = geom.elements;\n        rst = rst.concat(elements);\n    });\n    if (view.views && view.views.length) {\n        each(view.views, function (subView) {\n            rst = rst.concat(getElements(subView));\n        });\n    }\n    return rst;\n}\n/**\n * 获取所有的图表元素\n * @param view View/Chart\n * @param field 字段名\n * @param value 字段值\n * @ignore\n */\nexport function getElementsByField(view, field, value) {\n    var elements = getElements(view);\n    return elements.filter(function (el) {\n        return getElementValue(el, field) === value;\n    });\n}\n/**\n * 根据状态名获取图表元素\n * @param view View/Chart\n * @param stateName 状态名\n * @ignore\n */\nexport function getElementsByState(view, stateName) {\n    var geometries = view.geometries;\n    var rst = [];\n    each(geometries, function (geom) {\n        var elements = geom.getElementsBy(function (el) { return el.hasState(stateName); });\n        rst = rst.concat(elements);\n    });\n    // 存在子视图\n    if (view.views && view.views.length) {\n        each(view.views, function (subView) {\n            rst.push.apply(rst, __spreadArray([], __read(getElementsByState(subView, stateName)), false));\n        });\n    }\n    return rst;\n}\n/**\n * 获取图表元素对应字段的值\n * @param element 图表元素\n * @param field 字段名\n * @ignore\n */\nexport function getElementValue(element, field) {\n    var model = element.getModel();\n    var record = model.data;\n    var value;\n    if (isArray(record)) {\n        value = record[0][field];\n    }\n    else {\n        value = record[field];\n    }\n    return value;\n}\n/**\n * 两个包围盒是否相交\n * @param box1 包围盒1\n * @param box2 包围盒2\n * @ignore\n */\nexport function intersectRect(box1, box2) {\n    return !(box2.minX > box1.maxX || box2.maxX < box1.minX || box2.minY > box1.maxY || box2.maxY < box1.minY);\n}\n/**\n * 获取包围盒内的图表元素\n * @param view View/Chart\n * @param box 包围盒\n * @ignore\n */\nexport function getIntersectElements(view, box) {\n    var elements = getElements(view);\n    var rst = [];\n    each(elements, function (el) {\n        var shape = el.shape;\n        var shapeBBox = shape.getCanvasBBox();\n        if (intersectRect(box, shapeBBox)) {\n            rst.push(el);\n        }\n    });\n    return rst;\n}\nfunction pathToPoints(path) {\n    var points = [];\n    each(path, function (seg) {\n        var command = seg[0];\n        if (command !== 'A') {\n            for (var i = 1; i < seg.length; i = i + 2) {\n                points.push([seg[i], seg[i + 1]]);\n            }\n        }\n        else {\n            var length_1 = seg.length;\n            points.push([seg[length_1 - 2], seg[length_1 - 1]]);\n        }\n    });\n    return points;\n}\n/**\n * 获取包围盒内的图表元素\n * @param view View/Chart\n * @param path 路径\n * @ignore\n */\nexport function getElementsByPath(view, path) {\n    var elements = getElements(view);\n    var points = pathToPoints(path);\n    var rst = elements.filter(function (el) {\n        var shape = el.shape;\n        var shapePoints;\n        if (shape.get('type') === 'path') {\n            shapePoints = pathToPoints(shape.attr('path'));\n        }\n        else {\n            var shapeBBox = shape.getCanvasBBox();\n            shapePoints = toPoints(shapeBBox);\n        }\n        return isPolygonsIntersect(points, shapePoints);\n    });\n    return rst;\n}\n/**\n * 获取当前 View 的所有组件\n * @param view View/Chart\n * @ignore\n */\nexport function getComponents(view) {\n    return view.getComponents().map(function (co) { return co.component; });\n}\n/** @ignore */\nexport function distance(p1, p2) {\n    var dx = p2.x - p1.x;\n    var dy = p2.y - p1.y;\n    return Math.sqrt(dx * dx + dy * dy);\n}\n/** @ignore */\nexport function getSpline(points, z) {\n    if (points.length <= 2) {\n        return getLinePath(points, false);\n    }\n    var first = points[0];\n    var arr = [];\n    each(points, function (point) {\n        arr.push(point.x);\n        arr.push(point.y);\n    });\n    var path = catmullRom2bezier(arr, z, null);\n    path.unshift(['M', first.x, first.y]);\n    return path;\n}\n/**\n * 检测点是否在包围盒内\n * @param box 包围盒\n * @param point 点\n * @ignore\n */\nexport function isInBox(box, point) {\n    return box.x <= point.x && box.maxX >= point.x && box.y <= point.y && box.maxY > point.y;\n}\n/**\n * 获取同 view 同一级的 views\n * @param view 当前 view\n * @returns 同一级的 views\n * @ignore\n */\nexport function getSilbings(view) {\n    var parent = view.parent;\n    var siblings = null;\n    if (parent) {\n        siblings = parent.views.filter(function (sub) { return sub !== view; });\n    }\n    return siblings;\n}\nfunction point2Normalize(view, point) {\n    var coord = view.getCoordinate();\n    return coord.invert(point);\n}\n/**\n * 将 view 上的一点转换成另一个 view 的点\n * @param view 当前的 view\n * @param sibling 同一层级的 view\n * @param point 指定点\n * @ignore\n */\nexport function getSiblingPoint(view, sibling, point) {\n    var normalPoint = point2Normalize(view, point);\n    return sibling.getCoordinate().convert(normalPoint);\n}\n/**\n * 是否在记录中，临时因为所有的 view 中的数据不是引用，而使用的方法\n * 不同 view 上对数据的引用不相等，导致无法直接用 includes\n * 假设 x, y 值相等时是同一条数据，这个假设不完全正确，而改成 isEqual 则成本太高\n * 后面改成同一个引用时可以修改回来\n * @param records\n * @param record\n * @param xFiled\n * @param yField\n * @returns\n * @ignore\n */\nexport function isInRecords(records, record, xFiled, yField) {\n    var isIn = false;\n    each(records, function (r) {\n        if (r[xFiled] === record[xFiled] && r[yField] === record[yField]) {\n            isIn = true;\n            return false;\n        }\n    });\n    return isIn;\n}\n// 级联获取 field 对应的 scale，如果 view 上没有，遍历子 view\nexport function getScaleByField(view, field) {\n    var scale = view.getScaleByField(field);\n    if (!scale && view.views) {\n        each(view.views, function (subView) {\n            scale = getScaleByField(subView, field);\n            if (scale) {\n                return false; // 终止循环\n            }\n        });\n    }\n    return scale;\n}\n//# sourceMappingURL=util.js.map","import { each, get } from '@antv/util';\nimport { getComponents, isInBox } from './action/util';\n/**\n * 交互的上下文\n */\nvar Context = /** @class */ (function () {\n    function Context(view) {\n        /** 当前所有的 Action */\n        this.actions = [];\n        /** 当前事件对象 */\n        this.event = null;\n        this.cacheMap = {};\n        this.view = view;\n    }\n    /**\n     * 缓存信息\n     * @param params 缓存的字段\n     *  - 如果一个字段则获取缓存\n     *  - 两个字段则设置缓存\n     */\n    Context.prototype.cache = function () {\n        var params = [];\n        for (var _i = 0; _i < arguments.length; _i++) {\n            params[_i] = arguments[_i];\n        }\n        if (params.length === 1) {\n            return this.cacheMap[params[0]];\n        }\n        else if (params.length === 2) {\n            this.cacheMap[params[0]] = params[1];\n        }\n    };\n    /**\n     * 获取 Action\n     * @param name Action 的名称\n     */\n    Context.prototype.getAction = function (name) {\n        return this.actions.find(function (action) { return action.name === name; });\n    };\n    /**\n     * 获取 Action\n     * @param action Action 对象\n     */\n    Context.prototype.addAction = function (action) {\n        this.actions.push(action);\n    };\n    /**\n     * 移除 Action\n     * @param action Action 对象\n     */\n    Context.prototype.removeAction = function (action) {\n        var actions = this.actions;\n        var index = this.actions.indexOf(action);\n        if (index >= 0) {\n            actions.splice(index, 1);\n        }\n    };\n    /**\n     * 获取当前的点\n     */\n    Context.prototype.getCurrentPoint = function () {\n        var event = this.event;\n        if (event) {\n            if (event.target instanceof HTMLElement) {\n                var canvas = this.view.getCanvas();\n                var point = canvas.getPointByClient(event.clientX, event.clientY);\n                return point;\n            }\n            else {\n                return {\n                    x: event.x,\n                    y: event.y,\n                };\n            }\n        }\n        return null;\n    };\n    /**\n     * 获取当前 shape\n     * @returns current shape\n     */\n    Context.prototype.getCurrentShape = function () {\n        return get(this.event, ['gEvent', 'shape']);\n    };\n    /**\n     * 当前的触发是否在 View 内\n     */\n    Context.prototype.isInPlot = function () {\n        var point = this.getCurrentPoint();\n        if (point) {\n            return this.view.isPointInPlot(point);\n        }\n        return false;\n    };\n    /**\n     * 是否在指定的图形内\n     * @param name shape 的 name\n     */\n    Context.prototype.isInShape = function (name) {\n        var shape = this.getCurrentShape(); // 不再考虑在 shape 的 parent 内的情况\n        if (shape) {\n            return shape.get('name') === name;\n        }\n        return false;\n    };\n    /**\n     * 当前的触发是组件内部\n     * @param name 组件名，可以为空\n     */\n    Context.prototype.isInComponent = function (name) {\n        var components = getComponents(this.view);\n        var point = this.getCurrentPoint();\n        if (point) {\n            return !!components.find(function (component) {\n                var bbox = component.getBBox();\n                if (name) {\n                    return component.get('name') === name && isInBox(bbox, point);\n                }\n                else {\n                    return isInBox(bbox, point);\n                }\n            });\n        }\n        return false;\n    };\n    /**\n     * 销毁\n     */\n    Context.prototype.destroy = function () {\n        // 先销毁 action 再清空，一边遍历，一边删除，所以数组需要更新引用\n        each(this.actions.slice(), function (action) {\n            action.destroy();\n        });\n        this.view = null;\n        this.event = null;\n        this.actions = null;\n        this.cacheMap = null;\n    };\n    return Context;\n}());\nexport default Context;\n//# sourceMappingURL=context.js.map","/**\n * 交互的基类。\n */\nvar Interaction = /** @class */ (function () {\n    function Interaction(view, cfg) {\n        this.view = view;\n        this.cfg = cfg;\n    }\n    /**\n     * 初始化。\n     */\n    Interaction.prototype.init = function () {\n        this.initEvents();\n    };\n    /**\n     * 绑定事件\n     */\n    Interaction.prototype.initEvents = function () { };\n    /**\n     * 销毁事件\n     */\n    Interaction.prototype.clearEvents = function () { };\n    /**\n     * 销毁。\n     */\n    Interaction.prototype.destroy = function () {\n        this.clearEvents();\n    };\n    return Interaction;\n}());\nexport default Interaction;\n//# sourceMappingURL=interaction.js.map","import { __extends } from \"tslib\";\nimport { each, isArray, isFunction, isString, debounce, throttle } from '@antv/util';\nimport { createAction, createCallbackAction } from './action/register';\nimport InteractionContext from './context';\nimport Interaction from './interaction';\n// 将字符串转换成 action\nexport function parseAction(actionStr, context, arg) {\n    var arr = actionStr.split(':');\n    var actionName = arr[0];\n    // 如果已经初始化过 action ，则直接引用之前的 action\n    var action = context.getAction(actionName) || createAction(actionName, context);\n    if (!action) {\n        throw new Error(\"There is no action named \".concat(actionName));\n    }\n    var methodName = arr[1];\n    return {\n        action: action,\n        methodName: methodName,\n        arg: arg,\n    };\n}\n// 执行 Action\nfunction executeAction(actionObject) {\n    var action = actionObject.action, methodName = actionObject.methodName, arg = actionObject.arg;\n    if (action[methodName]) {\n        action[methodName](arg);\n    }\n    else {\n        throw new Error(\"Action(\".concat(action.name, \") doesn't have a method called \").concat(methodName));\n    }\n}\nvar STEP_NAMES = {\n    START: 'start',\n    SHOW_ENABLE: 'showEnable',\n    END: 'end',\n    ROLLBACK: 'rollback',\n    PROCESSING: 'processing',\n};\n/**\n * 支持语法的交互类\n */\nvar GrammarInteraction = /** @class */ (function (_super) {\n    __extends(GrammarInteraction, _super);\n    function GrammarInteraction(view, steps) {\n        var _this = _super.call(this, view, steps) || this;\n        _this.callbackCaches = {};\n        // 某个触发和反馈在本环节是否执行或\n        _this.emitCaches = {};\n        _this.steps = steps;\n        return _this;\n    }\n    /**\n     * 初始化\n     */\n    GrammarInteraction.prototype.init = function () {\n        this.initContext();\n        _super.prototype.init.call(this);\n    };\n    /**\n     * 清理资源\n     */\n    GrammarInteraction.prototype.destroy = function () {\n        _super.prototype.destroy.call(this); // 先清理事件\n        this.steps = null;\n        if (this.context) {\n            this.context.destroy();\n            this.context = null;\n        }\n        this.callbackCaches = null;\n        this.view = null;\n    };\n    /**\n     * 绑定事件\n     */\n    GrammarInteraction.prototype.initEvents = function () {\n        var _this = this;\n        each(this.steps, function (stepArr, stepName) {\n            each(stepArr, function (step) {\n                var callback = _this.getActionCallback(stepName, step);\n                if (callback) {\n                    // 如果存在 callback，才绑定，有时候会出现无 callback 的情况\n                    _this.bindEvent(step.trigger, callback);\n                }\n            });\n        });\n    };\n    /**\n     * 清理绑定的事件\n     */\n    GrammarInteraction.prototype.clearEvents = function () {\n        var _this = this;\n        each(this.steps, function (stepArr, stepName) {\n            each(stepArr, function (step) {\n                var callback = _this.getActionCallback(stepName, step);\n                if (callback) {\n                    _this.offEvent(step.trigger, callback);\n                }\n            });\n        });\n    };\n    // 初始化上下文，并初始化 action\n    GrammarInteraction.prototype.initContext = function () {\n        var view = this.view;\n        var context = new InteractionContext(view);\n        this.context = context;\n        var steps = this.steps;\n        // 生成具体的 Action\n        each(steps, function (subSteps) {\n            each(subSteps, function (step) {\n                if (isFunction(step.action)) {\n                    // 如果传入回调函数，则直接生成 CallbackAction\n                    step.actionObject = {\n                        action: createCallbackAction(step.action, context),\n                        methodName: 'execute',\n                    };\n                }\n                else if (isString(step.action)) {\n                    // 如果是字符串\n                    step.actionObject = parseAction(step.action, context, step.arg);\n                }\n                else if (isArray(step.action)) {\n                    // 如果是数组\n                    var actionArr = step.action;\n                    var argArr_1 = isArray(step.arg) ? step.arg : [step.arg];\n                    step.actionObject = [];\n                    each(actionArr, function (actionStr, idx) {\n                        step.actionObject.push(parseAction(actionStr, context, argArr_1[idx]));\n                    });\n                }\n                // 如果 action 既不是字符串，也不是函数，则不会生成 actionObject\n            });\n        });\n    };\n    // 是否允许指定阶段名称执行\n    GrammarInteraction.prototype.isAllowStep = function (stepName) {\n        var currentStepName = this.currentStepName;\n        var steps = this.steps;\n        // 相同的阶段允许同时执行\n        if (currentStepName === stepName) {\n            return true;\n        }\n        if (stepName === STEP_NAMES.SHOW_ENABLE) {\n            // 示能在整个过程中都可用\n            return true;\n        }\n        if (stepName === STEP_NAMES.PROCESSING) {\n            // 只有当前是 start 时，才允许 processing\n            return currentStepName === STEP_NAMES.START;\n        }\n        if (stepName === STEP_NAMES.START) {\n            // 如果当前是 processing，则无法 start，必须等待 end 后才能执行\n            return currentStepName !== STEP_NAMES.PROCESSING;\n        }\n        if (stepName === STEP_NAMES.END) {\n            return currentStepName === STEP_NAMES.PROCESSING || currentStepName === STEP_NAMES.START;\n        }\n        if (stepName === STEP_NAMES.ROLLBACK) {\n            if (steps[STEP_NAMES.END]) {\n                // 如果定义了 end, 只有 end 时才允许回滚\n                return currentStepName === STEP_NAMES.END;\n            }\n            else if (currentStepName === STEP_NAMES.START) {\n                // 如果未定义 end, 则判断是否是开始\n                return true;\n            }\n        }\n        return false;\n    };\n    // 具体的指定阶段是否允许执行\n    GrammarInteraction.prototype.isAllowExecute = function (stepName, step) {\n        if (this.isAllowStep(stepName)) {\n            var key = this.getKey(stepName, step);\n            // 如果是在本环节内仅允许触发一次，同时已经触发过，则不允许再触发\n            if (step.once && this.emitCaches[key]) {\n                return false;\n            }\n            // 如果是允许的阶段，则验证 isEnable 方法\n            if (step.isEnable) {\n                return step.isEnable(this.context);\n            }\n            return true; // 如果没有 isEnable 则允许执行\n        }\n        return false;\n    };\n    GrammarInteraction.prototype.enterStep = function (stepName) {\n        this.currentStepName = stepName;\n        this.emitCaches = {}; // 清除所有本环节触发的缓存\n    };\n    // 执行完某个触发和反馈（子环节）\n    GrammarInteraction.prototype.afterExecute = function (stepName, step) {\n        // show enable 不计入正常的流程，其他情况则设置当前的 step\n        if (stepName !== STEP_NAMES.SHOW_ENABLE && this.currentStepName !== stepName) {\n            this.enterStep(stepName);\n        }\n        var key = this.getKey(stepName, step);\n        // 一旦执行，则缓存标记为，一直保持到跳出改环节\n        this.emitCaches[key] = true;\n    };\n    // 获取某个环节的唯一的键值\n    GrammarInteraction.prototype.getKey = function (stepName, step) {\n        return stepName + step.trigger + step.action;\n    };\n    // 获取 step 的回调函数，如果已经生成，则直接返回，如果未生成，则创建\n    GrammarInteraction.prototype.getActionCallback = function (stepName, step) {\n        var _this = this;\n        var context = this.context;\n        var callbackCaches = this.callbackCaches;\n        var actionObject = step.actionObject;\n        if (step.action && actionObject) {\n            var key = this.getKey(stepName, step);\n            if (!callbackCaches[key]) {\n                // 动态生成执行的方法，执行对应 action 的名称\n                var actionCallback = function (event) {\n                    context.event = event; // 保证检测时的 event\n                    if (_this.isAllowExecute(stepName, step)) {\n                        // 如果是数组时，则依次执行\n                        if (isArray(actionObject)) {\n                            each(actionObject, function (obj) {\n                                context.event = event; // 可能触发新的事件，保证执行前的 context.event 是正确的\n                                executeAction(obj);\n                            });\n                        }\n                        else {\n                            context.event = event; // 保证执行前的 context.event 是正确的\n                            executeAction(actionObject);\n                        }\n                        _this.afterExecute(stepName, step);\n                        if (step.callback) {\n                            context.event = event; // 保证执行前的 context.event 是正确的\n                            step.callback(context);\n                        }\n                    }\n                    else {\n                        // 如果未通过验证，则事件不要绑定在上面\n                        context.event = null;\n                    }\n                };\n                // 如果设置了 debounce\n                if (step.debounce) {\n                    callbackCaches[key] = debounce(actionCallback, step.debounce.wait, step.debounce.immediate);\n                }\n                else if (step.throttle) {\n                    // 设置 throttle\n                    callbackCaches[key] = throttle(actionCallback, step.throttle.wait, {\n                        leading: step.throttle.leading,\n                        trailing: step.throttle.trailing,\n                    });\n                }\n                else {\n                    // 直接设置\n                    callbackCaches[key] = actionCallback;\n                }\n            }\n            return callbackCaches[key];\n        }\n        return null;\n    };\n    GrammarInteraction.prototype.bindEvent = function (eventName, callback) {\n        var nameArr = eventName.split(':');\n        if (nameArr[0] === 'window') {\n            window.addEventListener(nameArr[1], callback);\n        }\n        else if (nameArr[0] === 'document') {\n            document.addEventListener(nameArr[1], callback);\n        }\n        else {\n            this.view.on(eventName, callback);\n        }\n    };\n    GrammarInteraction.prototype.offEvent = function (eventName, callback) {\n        var nameArr = eventName.split(':');\n        if (nameArr[0] === 'window') {\n            window.removeEventListener(nameArr[1], callback);\n        }\n        else if (nameArr[0] === 'document') {\n            document.removeEventListener(nameArr[1], callback);\n        }\n        else {\n            this.view.off(eventName, callback);\n        }\n    };\n    return GrammarInteraction;\n}(Interaction));\nexport default GrammarInteraction;\n//# sourceMappingURL=grammar-interaction.js.map","import { clone, isPlainObject, lowerCase, mix } from '@antv/util';\nimport GrammarInteraction from './grammar-interaction';\nvar Interactions = {};\n/**\n * 根据交互行为名字获取对应的交互类\n * @param name 交互名字\n * @returns 交互类\n */\nexport function getInteraction(name) {\n    return Interactions[lowerCase(name)];\n}\n/**\n * 注册交互行为\n * @param name 交互行为名字\n * @param interaction 交互类\n */\nexport function registerInteraction(name, interaction) {\n    Interactions[lowerCase(name)] = interaction;\n}\n/**\n * 创建交互实例\n * @param name 交互名\n * @param view 交互应用的 View 实例\n * @param cfg 交互行为配置\n */\nexport function createInteraction(name, view, cfg) {\n    var interaciton = getInteraction(name);\n    if (!interaciton) {\n        return null;\n    }\n    if (isPlainObject(interaciton)) {\n        // 如果不 clone 则会多个 interaction 实例共享 step 的定义\n        var steps = mix(clone(interaciton), cfg);\n        return new GrammarInteraction(view, steps);\n    }\n    else {\n        var cls = interaciton;\n        return new cls(view, cfg);\n    }\n}\nexport { default as Interaction } from './interaction';\nexport { Action, registerAction, getActionClass } from './action';\n//# sourceMappingURL=index.js.map","import { __assign } from \"tslib\";\nimport { TOOLTIP_CSS_CONST } from '@antv/component';\nimport { ext } from '@antv/matrix-util';\nimport { deepMix } from '@antv/util';\nimport { getAngle } from '../../util/graphics';\n/**\n * 根据样式表创建 axis 组件主题样式\n * @param styleSheet\n */\nfunction createAxisStyles(styleSheet) {\n    return {\n        title: {\n            autoRotate: true,\n            position: 'center',\n            spacing: styleSheet.axisTitleSpacing,\n            style: {\n                fill: styleSheet.axisTitleTextFillColor,\n                fontSize: styleSheet.axisTitleTextFontSize,\n                lineHeight: styleSheet.axisTitleTextLineHeight,\n                textBaseline: 'middle',\n                fontFamily: styleSheet.fontFamily,\n            },\n            iconStyle: {\n                fill: styleSheet.axisDescriptionIconFillColor\n            }\n        },\n        label: {\n            autoRotate: false,\n            autoEllipsis: false,\n            autoHide: { type: 'equidistance', cfg: { minGap: 6 } },\n            offset: styleSheet.axisLabelOffset,\n            style: {\n                fill: styleSheet.axisLabelFillColor,\n                fontSize: styleSheet.axisLabelFontSize,\n                lineHeight: styleSheet.axisLabelLineHeight,\n                fontFamily: styleSheet.fontFamily,\n            },\n        },\n        line: {\n            style: {\n                lineWidth: styleSheet.axisLineBorder,\n                stroke: styleSheet.axisLineBorderColor,\n            },\n        },\n        grid: {\n            line: {\n                type: 'line',\n                style: {\n                    stroke: styleSheet.axisGridBorderColor,\n                    lineWidth: styleSheet.axisGridBorder,\n                    lineDash: styleSheet.axisGridLineDash,\n                },\n            },\n            alignTick: true,\n            animate: true,\n        },\n        tickLine: {\n            style: {\n                lineWidth: styleSheet.axisTickLineBorder,\n                stroke: styleSheet.axisTickLineBorderColor,\n            },\n            alignTick: true,\n            length: styleSheet.axisTickLineLength,\n        },\n        subTickLine: null,\n        animate: true,\n    };\n}\n/**\n *\n * @param styleSheet\n */\n// export function\n/**\n * 根据样式表创建 legend 组件主题样式\n * @param styleSheet\n */\nfunction createLegendStyles(styleSheet) {\n    return {\n        title: null,\n        marker: {\n            symbol: 'circle',\n            spacing: styleSheet.legendMarkerSpacing,\n            style: {\n                r: styleSheet.legendCircleMarkerSize,\n                fill: styleSheet.legendMarkerColor,\n            },\n        },\n        itemName: {\n            spacing: 5,\n            style: {\n                fill: styleSheet.legendItemNameFillColor,\n                fontFamily: styleSheet.fontFamily,\n                fontSize: styleSheet.legendItemNameFontSize,\n                lineHeight: styleSheet.legendItemNameLineHeight,\n                fontWeight: styleSheet.legendItemNameFontWeight,\n                textAlign: 'start',\n                textBaseline: 'middle',\n            },\n        },\n        itemStates: {\n            active: {\n                nameStyle: {\n                    opacity: 0.8,\n                },\n            },\n            unchecked: {\n                nameStyle: {\n                    fill: '#D8D8D8',\n                },\n                markerStyle: {\n                    fill: '#D8D8D8',\n                    stroke: '#D8D8D8',\n                },\n            },\n            inactive: {\n                nameStyle: {\n                    fill: '#D8D8D8',\n                },\n                markerStyle: {\n                    opacity: 0.2,\n                },\n            },\n        },\n        flipPage: true,\n        pageNavigator: {\n            marker: {\n                style: {\n                    size: styleSheet.legendPageNavigatorMarkerSize,\n                    inactiveFill: styleSheet.legendPageNavigatorMarkerInactiveFillColor,\n                    inactiveOpacity: styleSheet.legendPageNavigatorMarkerInactiveFillOpacity,\n                    fill: styleSheet.legendPageNavigatorMarkerFillColor,\n                    opacity: styleSheet.legendPageNavigatorMarkerFillOpacity,\n                },\n            },\n            text: {\n                style: {\n                    fill: styleSheet.legendPageNavigatorTextFillColor,\n                    fontSize: styleSheet.legendPageNavigatorTextFontSize,\n                },\n            },\n        },\n        animate: false,\n        maxItemWidth: 200,\n        itemSpacing: styleSheet.legendItemSpacing,\n        itemMarginBottom: styleSheet.legendItemMarginBottom,\n        padding: styleSheet.legendPadding, // 图例组件自己的外边距\n    };\n}\n/**\n * 根据主题样式表生成主题结构\n * @param styleSheet 主题样式表\n */\nexport function createThemeByStyleSheet(styleSheet) {\n    var _a;\n    var shapeStyles = {\n        point: {\n            default: {\n                fill: styleSheet.pointFillColor,\n                r: styleSheet.pointSize,\n                stroke: styleSheet.pointBorderColor,\n                lineWidth: styleSheet.pointBorder,\n                fillOpacity: styleSheet.pointFillOpacity,\n            },\n            active: {\n                stroke: styleSheet.pointActiveBorderColor,\n                lineWidth: styleSheet.pointActiveBorder,\n            },\n            selected: {\n                stroke: styleSheet.pointSelectedBorderColor,\n                lineWidth: styleSheet.pointSelectedBorder,\n            },\n            inactive: {\n                fillOpacity: styleSheet.pointInactiveFillOpacity,\n                strokeOpacity: styleSheet.pointInactiveBorderOpacity,\n            },\n        },\n        hollowPoint: {\n            default: {\n                fill: styleSheet.hollowPointFillColor,\n                lineWidth: styleSheet.hollowPointBorder,\n                stroke: styleSheet.hollowPointBorderColor,\n                strokeOpacity: styleSheet.hollowPointBorderOpacity,\n                r: styleSheet.hollowPointSize,\n            },\n            active: {\n                stroke: styleSheet.hollowPointActiveBorderColor,\n                strokeOpacity: styleSheet.hollowPointActiveBorderOpacity,\n            },\n            selected: {\n                lineWidth: styleSheet.hollowPointSelectedBorder,\n                stroke: styleSheet.hollowPointSelectedBorderColor,\n                strokeOpacity: styleSheet.hollowPointSelectedBorderOpacity,\n            },\n            inactive: {\n                strokeOpacity: styleSheet.hollowPointInactiveBorderOpacity,\n            },\n        },\n        area: {\n            default: {\n                fill: styleSheet.areaFillColor,\n                fillOpacity: styleSheet.areaFillOpacity,\n                stroke: null,\n            },\n            active: {\n                fillOpacity: styleSheet.areaActiveFillOpacity,\n            },\n            selected: {\n                fillOpacity: styleSheet.areaSelectedFillOpacity,\n            },\n            inactive: {\n                fillOpacity: styleSheet.areaInactiveFillOpacity,\n            },\n        },\n        hollowArea: {\n            default: {\n                fill: null,\n                stroke: styleSheet.hollowAreaBorderColor,\n                lineWidth: styleSheet.hollowAreaBorder,\n                strokeOpacity: styleSheet.hollowAreaBorderOpacity,\n            },\n            active: {\n                fill: null,\n                lineWidth: styleSheet.hollowAreaActiveBorder,\n            },\n            selected: {\n                fill: null,\n                lineWidth: styleSheet.hollowAreaSelectedBorder,\n            },\n            inactive: {\n                strokeOpacity: styleSheet.hollowAreaInactiveBorderOpacity,\n            },\n        },\n        interval: {\n            default: {\n                fill: styleSheet.intervalFillColor,\n                fillOpacity: styleSheet.intervalFillOpacity,\n            },\n            active: {\n                stroke: styleSheet.intervalActiveBorderColor,\n                lineWidth: styleSheet.intervalActiveBorder,\n            },\n            selected: {\n                stroke: styleSheet.intervalSelectedBorderColor,\n                lineWidth: styleSheet.intervalSelectedBorder,\n            },\n            inactive: {\n                fillOpacity: styleSheet.intervalInactiveFillOpacity,\n                strokeOpacity: styleSheet.intervalInactiveBorderOpacity,\n            },\n        },\n        hollowInterval: {\n            default: {\n                fill: styleSheet.hollowIntervalFillColor,\n                stroke: styleSheet.hollowIntervalBorderColor,\n                lineWidth: styleSheet.hollowIntervalBorder,\n                strokeOpacity: styleSheet.hollowIntervalBorderOpacity,\n            },\n            active: {\n                stroke: styleSheet.hollowIntervalActiveBorderColor,\n                lineWidth: styleSheet.hollowIntervalActiveBorder,\n                strokeOpacity: styleSheet.hollowIntervalActiveBorderOpacity,\n            },\n            selected: {\n                stroke: styleSheet.hollowIntervalSelectedBorderColor,\n                lineWidth: styleSheet.hollowIntervalSelectedBorder,\n                strokeOpacity: styleSheet.hollowIntervalSelectedBorderOpacity,\n            },\n            inactive: {\n                stroke: styleSheet.hollowIntervalInactiveBorderColor,\n                lineWidth: styleSheet.hollowIntervalInactiveBorder,\n                strokeOpacity: styleSheet.hollowIntervalInactiveBorderOpacity,\n            },\n        },\n        line: {\n            default: {\n                stroke: styleSheet.lineBorderColor,\n                lineWidth: styleSheet.lineBorder,\n                strokeOpacity: styleSheet.lineBorderOpacity,\n                fill: null,\n                lineAppendWidth: 10,\n                lineCap: 'round',\n                lineJoin: 'round',\n            },\n            active: {\n                lineWidth: styleSheet.lineActiveBorder,\n            },\n            selected: {\n                lineWidth: styleSheet.lineSelectedBorder,\n            },\n            inactive: {\n                strokeOpacity: styleSheet.lineInactiveBorderOpacity,\n            },\n        },\n    };\n    var axisStyles = createAxisStyles(styleSheet);\n    var legendStyles = createLegendStyles(styleSheet);\n    return {\n        background: styleSheet.backgroundColor,\n        defaultColor: styleSheet.brandColor,\n        subColor: styleSheet.subColor,\n        semanticRed: styleSheet.paletteSemanticRed,\n        semanticGreen: styleSheet.paletteSemanticGreen,\n        padding: 'auto',\n        fontFamily: styleSheet.fontFamily,\n        // 兼容Theme配置\n        /** 一般柱状图宽度占比，geometry中已添加默认值，为了geometry配置生效默认值为null */\n        columnWidthRatio: 1 / 2,\n        /** 柱状图最大宽度 */\n        maxColumnWidth: null,\n        /** 柱状图最小宽度 */\n        minColumnWidth: null,\n        /** 玫瑰图占比 */\n        roseWidthRatio: 0.9999999,\n        /** 多层饼图/环图占比 */\n        multiplePieWidthRatio: 1 / 1.3,\n        colors10: styleSheet.paletteQualitative10,\n        colors20: styleSheet.paletteQualitative20,\n        sequenceColors: styleSheet.paletteSequence,\n        shapes: {\n            point: [\n                'hollow-circle',\n                'hollow-square',\n                'hollow-bowtie',\n                'hollow-diamond',\n                'hollow-hexagon',\n                'hollow-triangle',\n                'hollow-triangle-down',\n                'circle',\n                'square',\n                'bowtie',\n                'diamond',\n                'hexagon',\n                'triangle',\n                'triangle-down',\n                'cross',\n                'tick',\n                'plus',\n                'hyphen',\n                'line',\n            ],\n            line: ['line', 'dash', 'dot', 'smooth'],\n            area: ['area', 'smooth', 'line', 'smooth-line'],\n            interval: ['rect', 'hollow-rect', 'line', 'tick'],\n        },\n        sizes: [1, 10],\n        geometries: {\n            interval: {\n                rect: {\n                    default: {\n                        style: shapeStyles.interval.default,\n                    },\n                    active: {\n                        style: shapeStyles.interval.active,\n                    },\n                    inactive: {\n                        style: shapeStyles.interval.inactive,\n                    },\n                    selected: {\n                        style: function (element) {\n                            var coordinate = element.geometry.coordinate;\n                            if (coordinate.isPolar && coordinate.isTransposed) {\n                                var _a = getAngle(element.getModel(), coordinate), startAngle = _a.startAngle, endAngle = _a.endAngle;\n                                var middleAngle = (startAngle + endAngle) / 2;\n                                var r = 7.5;\n                                var x = r * Math.cos(middleAngle);\n                                var y = r * Math.sin(middleAngle);\n                                return {\n                                    matrix: ext.transform(null, [['t', x, y]]),\n                                };\n                            }\n                            return shapeStyles.interval.selected;\n                        },\n                    },\n                },\n                'hollow-rect': {\n                    default: {\n                        style: shapeStyles.hollowInterval.default,\n                    },\n                    active: {\n                        style: shapeStyles.hollowInterval.active,\n                    },\n                    inactive: {\n                        style: shapeStyles.hollowInterval.inactive,\n                    },\n                    selected: {\n                        style: shapeStyles.hollowInterval.selected,\n                    },\n                },\n                line: {\n                    default: {\n                        style: shapeStyles.hollowInterval.default,\n                    },\n                    active: {\n                        style: shapeStyles.hollowInterval.active,\n                    },\n                    inactive: {\n                        style: shapeStyles.hollowInterval.inactive,\n                    },\n                    selected: {\n                        style: shapeStyles.hollowInterval.selected,\n                    },\n                },\n                tick: {\n                    default: {\n                        style: shapeStyles.hollowInterval.default,\n                    },\n                    active: {\n                        style: shapeStyles.hollowInterval.active,\n                    },\n                    inactive: {\n                        style: shapeStyles.hollowInterval.inactive,\n                    },\n                    selected: {\n                        style: shapeStyles.hollowInterval.selected,\n                    },\n                },\n                funnel: {\n                    default: {\n                        style: shapeStyles.interval.default,\n                    },\n                    active: {\n                        style: shapeStyles.interval.active,\n                    },\n                    inactive: {\n                        style: shapeStyles.interval.inactive,\n                    },\n                    selected: {\n                        style: shapeStyles.interval.selected,\n                    },\n                },\n                pyramid: {\n                    default: {\n                        style: shapeStyles.interval.default,\n                    },\n                    active: {\n                        style: shapeStyles.interval.active,\n                    },\n                    inactive: {\n                        style: shapeStyles.interval.inactive,\n                    },\n                    selected: {\n                        style: shapeStyles.interval.selected,\n                    },\n                },\n            },\n            line: {\n                line: {\n                    default: {\n                        style: shapeStyles.line.default,\n                    },\n                    active: {\n                        style: shapeStyles.line.active,\n                    },\n                    inactive: {\n                        style: shapeStyles.line.inactive,\n                    },\n                    selected: {\n                        style: shapeStyles.line.selected,\n                    },\n                },\n                dot: {\n                    default: {\n                        style: __assign(__assign({}, shapeStyles.line.default), { lineCap: null, lineDash: [1, 1] }),\n                    },\n                    active: {\n                        style: __assign(__assign({}, shapeStyles.line.active), { lineCap: null, lineDash: [1, 1] }),\n                    },\n                    inactive: {\n                        style: __assign(__assign({}, shapeStyles.line.inactive), { lineCap: null, lineDash: [1, 1] }),\n                    },\n                    selected: {\n                        style: __assign(__assign({}, shapeStyles.line.selected), { lineCap: null, lineDash: [1, 1] }),\n                    },\n                },\n                dash: {\n                    default: {\n                        style: __assign(__assign({}, shapeStyles.line.default), { lineCap: null, lineDash: [5.5, 1] }),\n                    },\n                    active: {\n                        style: __assign(__assign({}, shapeStyles.line.active), { lineCap: null, lineDash: [5.5, 1] }),\n                    },\n                    inactive: {\n                        style: __assign(__assign({}, shapeStyles.line.inactive), { lineCap: null, lineDash: [5.5, 1] }),\n                    },\n                    selected: {\n                        style: __assign(__assign({}, shapeStyles.line.selected), { lineCap: null, lineDash: [5.5, 1] }),\n                    },\n                },\n                smooth: {\n                    default: {\n                        style: shapeStyles.line.default,\n                    },\n                    active: {\n                        style: shapeStyles.line.active,\n                    },\n                    inactive: {\n                        style: shapeStyles.line.inactive,\n                    },\n                    selected: {\n                        style: shapeStyles.line.selected,\n                    },\n                },\n                hv: {\n                    default: {\n                        style: shapeStyles.line.default,\n                    },\n                    active: {\n                        style: shapeStyles.line.active,\n                    },\n                    inactive: {\n                        style: shapeStyles.line.inactive,\n                    },\n                    selected: {\n                        style: shapeStyles.line.selected,\n                    },\n                },\n                vh: {\n                    default: {\n                        style: shapeStyles.line.default,\n                    },\n                    active: {\n                        style: shapeStyles.line.active,\n                    },\n                    inactive: {\n                        style: shapeStyles.line.inactive,\n                    },\n                    selected: {\n                        style: shapeStyles.line.selected,\n                    },\n                },\n                hvh: {\n                    default: {\n                        style: shapeStyles.line.default,\n                    },\n                    active: {\n                        style: shapeStyles.line.active,\n                    },\n                    inactive: {\n                        style: shapeStyles.line.inactive,\n                    },\n                    selected: {\n                        style: shapeStyles.line.selected,\n                    },\n                },\n                vhv: {\n                    default: {\n                        style: shapeStyles.line.default,\n                    },\n                    active: {\n                        style: shapeStyles.line.active,\n                    },\n                    inactive: {\n                        style: shapeStyles.line.inactive,\n                    },\n                    selected: {\n                        style: shapeStyles.line.selected,\n                    },\n                },\n            },\n            polygon: {\n                polygon: {\n                    default: {\n                        style: shapeStyles.interval.default,\n                    },\n                    active: {\n                        style: shapeStyles.interval.active,\n                    },\n                    inactive: {\n                        style: shapeStyles.interval.inactive,\n                    },\n                    selected: {\n                        style: shapeStyles.interval.selected,\n                    },\n                },\n            },\n            point: {\n                circle: {\n                    default: {\n                        style: shapeStyles.point.default,\n                    },\n                    active: {\n                        style: shapeStyles.point.active,\n                    },\n                    inactive: {\n                        style: shapeStyles.point.inactive,\n                    },\n                    selected: {\n                        style: shapeStyles.point.selected,\n                    },\n                },\n                square: {\n                    default: {\n                        style: shapeStyles.point.default,\n                    },\n                    active: {\n                        style: shapeStyles.point.active,\n                    },\n                    inactive: {\n                        style: shapeStyles.point.inactive,\n                    },\n                    selected: {\n                        style: shapeStyles.point.selected,\n                    },\n                },\n                bowtie: {\n                    default: {\n                        style: shapeStyles.point.default,\n                    },\n                    active: {\n                        style: shapeStyles.point.active,\n                    },\n                    inactive: {\n                        style: shapeStyles.point.inactive,\n                    },\n                    selected: {\n                        style: shapeStyles.point.selected,\n                    },\n                },\n                diamond: {\n                    default: {\n                        style: shapeStyles.point.default,\n                    },\n                    active: {\n                        style: shapeStyles.point.active,\n                    },\n                    inactive: {\n                        style: shapeStyles.point.inactive,\n                    },\n                    selected: {\n                        style: shapeStyles.point.selected,\n                    },\n                },\n                hexagon: {\n                    default: {\n                        style: shapeStyles.point.default,\n                    },\n                    active: {\n                        style: shapeStyles.point.active,\n                    },\n                    inactive: {\n                        style: shapeStyles.point.inactive,\n                    },\n                    selected: {\n                        style: shapeStyles.point.selected,\n                    },\n                },\n                triangle: {\n                    default: {\n                        style: shapeStyles.point.default,\n                    },\n                    active: {\n                        style: shapeStyles.point.active,\n                    },\n                    inactive: {\n                        style: shapeStyles.point.inactive,\n                    },\n                    selected: {\n                        style: shapeStyles.point.selected,\n                    },\n                },\n                'triangle-down': {\n                    default: {\n                        style: shapeStyles.point.default,\n                    },\n                    active: {\n                        style: shapeStyles.point.active,\n                    },\n                    inactive: {\n                        style: shapeStyles.point.inactive,\n                    },\n                    selected: {\n                        style: shapeStyles.point.selected,\n                    },\n                },\n                'hollow-circle': {\n                    default: {\n                        style: shapeStyles.hollowPoint.default,\n                    },\n                    active: {\n                        style: shapeStyles.hollowPoint.active,\n                    },\n                    inactive: {\n                        style: shapeStyles.hollowPoint.inactive,\n                    },\n                    selected: {\n                        style: shapeStyles.hollowPoint.selected,\n                    },\n                },\n                'hollow-square': {\n                    default: {\n                        style: shapeStyles.hollowPoint.default,\n                    },\n                    active: {\n                        style: shapeStyles.hollowPoint.active,\n                    },\n                    inactive: {\n                        style: shapeStyles.hollowPoint.inactive,\n                    },\n                    selected: {\n                        style: shapeStyles.hollowPoint.selected,\n                    },\n                },\n                'hollow-bowtie': {\n                    default: {\n                        style: shapeStyles.hollowPoint.default,\n                    },\n                    active: {\n                        style: shapeStyles.hollowPoint.active,\n                    },\n                    inactive: {\n                        style: shapeStyles.hollowPoint.inactive,\n                    },\n                    selected: {\n                        style: shapeStyles.hollowPoint.selected,\n                    },\n                },\n                'hollow-diamond': {\n                    default: {\n                        style: shapeStyles.hollowPoint.default,\n                    },\n                    active: {\n                        style: shapeStyles.hollowPoint.active,\n                    },\n                    inactive: {\n                        style: shapeStyles.hollowPoint.inactive,\n                    },\n                    selected: {\n                        style: shapeStyles.hollowPoint.selected,\n                    },\n                },\n                'hollow-hexagon': {\n                    default: {\n                        style: shapeStyles.hollowPoint.default,\n                    },\n                    active: {\n                        style: shapeStyles.hollowPoint.active,\n                    },\n                    inactive: {\n                        style: shapeStyles.hollowPoint.inactive,\n                    },\n                    selected: {\n                        style: shapeStyles.hollowPoint.selected,\n                    },\n                },\n                'hollow-triangle': {\n                    default: {\n                        style: shapeStyles.hollowPoint.default,\n                    },\n                    active: {\n                        style: shapeStyles.hollowPoint.active,\n                    },\n                    inactive: {\n                        style: shapeStyles.hollowPoint.inactive,\n                    },\n                    selected: {\n                        style: shapeStyles.hollowPoint.selected,\n                    },\n                },\n                'hollow-triangle-down': {\n                    default: {\n                        style: shapeStyles.hollowPoint.default,\n                    },\n                    active: {\n                        style: shapeStyles.hollowPoint.active,\n                    },\n                    inactive: {\n                        style: shapeStyles.hollowPoint.inactive,\n                    },\n                    selected: {\n                        style: shapeStyles.hollowPoint.selected,\n                    },\n                },\n                cross: {\n                    default: {\n                        style: shapeStyles.hollowPoint.default,\n                    },\n                    active: {\n                        style: shapeStyles.hollowPoint.active,\n                    },\n                    inactive: {\n                        style: shapeStyles.hollowPoint.inactive,\n                    },\n                    selected: {\n                        style: shapeStyles.hollowPoint.selected,\n                    },\n                },\n                tick: {\n                    default: {\n                        style: shapeStyles.hollowPoint.default,\n                    },\n                    active: {\n                        style: shapeStyles.hollowPoint.active,\n                    },\n                    inactive: {\n                        style: shapeStyles.hollowPoint.inactive,\n                    },\n                    selected: {\n                        style: shapeStyles.hollowPoint.selected,\n                    },\n                },\n                plus: {\n                    default: {\n                        style: shapeStyles.hollowPoint.default,\n                    },\n                    active: {\n                        style: shapeStyles.hollowPoint.active,\n                    },\n                    inactive: {\n                        style: shapeStyles.hollowPoint.inactive,\n                    },\n                    selected: {\n                        style: shapeStyles.hollowPoint.selected,\n                    },\n                },\n                hyphen: {\n                    default: {\n                        style: shapeStyles.hollowPoint.default,\n                    },\n                    active: {\n                        style: shapeStyles.hollowPoint.active,\n                    },\n                    inactive: {\n                        style: shapeStyles.hollowPoint.inactive,\n                    },\n                    selected: {\n                        style: shapeStyles.hollowPoint.selected,\n                    },\n                },\n                line: {\n                    default: {\n                        style: shapeStyles.hollowPoint.default,\n                    },\n                    active: {\n                        style: shapeStyles.hollowPoint.active,\n                    },\n                    inactive: {\n                        style: shapeStyles.hollowPoint.inactive,\n                    },\n                    selected: {\n                        style: shapeStyles.hollowPoint.selected,\n                    },\n                },\n            },\n            area: {\n                area: {\n                    default: {\n                        style: shapeStyles.area.default,\n                    },\n                    active: {\n                        style: shapeStyles.area.active,\n                    },\n                    inactive: {\n                        style: shapeStyles.area.inactive,\n                    },\n                    selected: {\n                        style: shapeStyles.area.selected,\n                    },\n                },\n                smooth: {\n                    default: {\n                        style: shapeStyles.area.default,\n                    },\n                    active: {\n                        style: shapeStyles.area.active,\n                    },\n                    inactive: {\n                        style: shapeStyles.area.inactive,\n                    },\n                    selected: {\n                        style: shapeStyles.area.selected,\n                    },\n                },\n                line: {\n                    default: {\n                        style: shapeStyles.hollowArea.default,\n                    },\n                    active: {\n                        style: shapeStyles.hollowArea.active,\n                    },\n                    inactive: {\n                        style: shapeStyles.hollowArea.inactive,\n                    },\n                    selected: {\n                        style: shapeStyles.hollowArea.selected,\n                    },\n                },\n                'smooth-line': {\n                    default: {\n                        style: shapeStyles.hollowArea.default,\n                    },\n                    active: {\n                        style: shapeStyles.hollowArea.active,\n                    },\n                    inactive: {\n                        style: shapeStyles.hollowArea.inactive,\n                    },\n                    selected: {\n                        style: shapeStyles.hollowArea.selected,\n                    },\n                },\n            },\n            schema: {\n                candle: {\n                    default: {\n                        style: shapeStyles.hollowInterval.default,\n                    },\n                    active: {\n                        style: shapeStyles.hollowInterval.active,\n                    },\n                    inactive: {\n                        style: shapeStyles.hollowInterval.inactive,\n                    },\n                    selected: {\n                        style: shapeStyles.hollowInterval.selected,\n                    },\n                },\n                box: {\n                    default: {\n                        style: shapeStyles.hollowInterval.default,\n                    },\n                    active: {\n                        style: shapeStyles.hollowInterval.active,\n                    },\n                    inactive: {\n                        style: shapeStyles.hollowInterval.inactive,\n                    },\n                    selected: {\n                        style: shapeStyles.hollowInterval.selected,\n                    },\n                },\n            },\n            edge: {\n                line: {\n                    default: {\n                        style: shapeStyles.line.default,\n                    },\n                    active: {\n                        style: shapeStyles.line.active,\n                    },\n                    inactive: {\n                        style: shapeStyles.line.inactive,\n                    },\n                    selected: {\n                        style: shapeStyles.line.selected,\n                    },\n                },\n                vhv: {\n                    default: {\n                        style: shapeStyles.line.default,\n                    },\n                    active: {\n                        style: shapeStyles.line.active,\n                    },\n                    inactive: {\n                        style: shapeStyles.line.inactive,\n                    },\n                    selected: {\n                        style: shapeStyles.line.selected,\n                    },\n                },\n                smooth: {\n                    default: {\n                        style: shapeStyles.line.default,\n                    },\n                    active: {\n                        style: shapeStyles.line.active,\n                    },\n                    inactive: {\n                        style: shapeStyles.line.inactive,\n                    },\n                    selected: {\n                        style: shapeStyles.line.selected,\n                    },\n                },\n                arc: {\n                    default: {\n                        style: shapeStyles.line.default,\n                    },\n                    active: {\n                        style: shapeStyles.line.active,\n                    },\n                    inactive: {\n                        style: shapeStyles.line.inactive,\n                    },\n                    selected: {\n                        style: shapeStyles.line.selected,\n                    },\n                },\n            },\n            violin: {\n                violin: {\n                    default: {\n                        style: shapeStyles.line.default,\n                    },\n                    active: {\n                        style: shapeStyles.line.active,\n                    },\n                    inactive: {\n                        style: shapeStyles.line.inactive,\n                    },\n                    selected: {\n                        style: shapeStyles.line.selected,\n                    },\n                },\n                smooth: {\n                    default: {\n                        style: shapeStyles.line.default,\n                    },\n                    active: {\n                        style: shapeStyles.line.active,\n                    },\n                    inactive: {\n                        style: shapeStyles.line.inactive,\n                    },\n                    selected: {\n                        style: shapeStyles.line.selected,\n                    },\n                },\n                hollow: {\n                    default: {\n                        style: shapeStyles.hollowArea.default,\n                    },\n                    active: {\n                        style: shapeStyles.hollowArea.active,\n                    },\n                    inactive: {\n                        style: shapeStyles.hollowArea.inactive,\n                    },\n                    selected: {\n                        style: shapeStyles.hollowArea.selected,\n                    },\n                },\n                'hollow-smooth': {\n                    default: {\n                        style: shapeStyles.hollowArea.default,\n                    },\n                    active: {\n                        style: shapeStyles.hollowArea.active,\n                    },\n                    inactive: {\n                        style: shapeStyles.hollowArea.inactive,\n                    },\n                    selected: {\n                        style: shapeStyles.hollowArea.selected,\n                    },\n                },\n            },\n        },\n        components: {\n            axis: {\n                common: axisStyles,\n                top: {\n                    position: 'top',\n                    grid: null,\n                    title: null,\n                    verticalLimitLength: 1 / 2,\n                },\n                bottom: {\n                    position: 'bottom',\n                    grid: null,\n                    title: null,\n                    verticalLimitLength: 1 / 2,\n                },\n                left: {\n                    position: 'left',\n                    title: null,\n                    line: null,\n                    tickLine: null,\n                    verticalLimitLength: 1 / 3,\n                },\n                right: {\n                    position: 'right',\n                    title: null,\n                    line: null,\n                    tickLine: null,\n                    verticalLimitLength: 1 / 3,\n                },\n                circle: {\n                    title: null,\n                    grid: deepMix({}, axisStyles.grid, { line: { type: 'line' } }),\n                },\n                radius: {\n                    title: null,\n                    grid: deepMix({}, axisStyles.grid, { line: { type: 'circle' } }),\n                },\n            },\n            legend: {\n                common: legendStyles,\n                right: {\n                    layout: 'vertical',\n                    padding: styleSheet.legendVerticalPadding,\n                },\n                left: {\n                    layout: 'vertical',\n                    padding: styleSheet.legendVerticalPadding,\n                },\n                top: {\n                    layout: 'horizontal',\n                    padding: styleSheet.legendHorizontalPadding,\n                },\n                bottom: {\n                    layout: 'horizontal',\n                    padding: styleSheet.legendHorizontalPadding,\n                },\n                continuous: {\n                    title: null,\n                    background: null,\n                    track: {},\n                    rail: {\n                        type: 'color',\n                        size: styleSheet.sliderRailHeight,\n                        defaultLength: styleSheet.sliderRailWidth,\n                        style: {\n                            fill: styleSheet.sliderRailFillColor,\n                            stroke: styleSheet.sliderRailBorderColor,\n                            lineWidth: styleSheet.sliderRailBorder,\n                        },\n                    },\n                    label: {\n                        align: 'rail',\n                        spacing: 4,\n                        formatter: null,\n                        style: {\n                            fill: styleSheet.sliderLabelTextFillColor,\n                            fontSize: styleSheet.sliderLabelTextFontSize,\n                            lineHeight: styleSheet.sliderLabelTextLineHeight,\n                            textBaseline: 'middle',\n                            fontFamily: styleSheet.fontFamily,\n                        },\n                    },\n                    handler: {\n                        size: styleSheet.sliderHandlerWidth,\n                        style: {\n                            fill: styleSheet.sliderHandlerFillColor,\n                            stroke: styleSheet.sliderHandlerBorderColor,\n                        },\n                    },\n                    slidable: true,\n                    padding: legendStyles.padding,\n                },\n            },\n            tooltip: {\n                showContent: true,\n                follow: true,\n                showCrosshairs: false,\n                showMarkers: true,\n                shared: false,\n                enterable: false,\n                position: 'auto',\n                marker: {\n                    symbol: 'circle',\n                    stroke: '#fff',\n                    shadowBlur: 10,\n                    shadowOffsetX: 0,\n                    shadowOffsetY: 0,\n                    shadowColor: 'rgba(0,0,0,0.09)',\n                    lineWidth: 2,\n                    r: 4,\n                },\n                crosshairs: {\n                    line: {\n                        style: {\n                            stroke: styleSheet.tooltipCrosshairsBorderColor,\n                            lineWidth: styleSheet.tooltipCrosshairsBorder,\n                        },\n                    },\n                    text: null,\n                    textBackground: {\n                        padding: 2,\n                        style: {\n                            fill: 'rgba(0, 0, 0, 0.25)',\n                            lineWidth: 0,\n                            stroke: null,\n                        },\n                    },\n                    follow: false,\n                },\n                // tooltip dom 样式\n                domStyles: (_a = {},\n                    _a[\"\".concat(TOOLTIP_CSS_CONST.CONTAINER_CLASS)] = {\n                        position: 'absolute',\n                        visibility: 'hidden',\n                        zIndex: 8,\n                        transition: 'left 0.4s cubic-bezier(0.23, 1, 0.32, 1) 0s, top 0.4s cubic-bezier(0.23, 1, 0.32, 1) 0s',\n                        backgroundColor: styleSheet.tooltipContainerFillColor,\n                        opacity: styleSheet.tooltipContainerFillOpacity,\n                        boxShadow: styleSheet.tooltipContainerShadow,\n                        borderRadius: \"\".concat(styleSheet.tooltipContainerBorderRadius, \"px\"),\n                        color: styleSheet.tooltipTextFillColor,\n                        fontSize: \"\".concat(styleSheet.tooltipTextFontSize, \"px\"),\n                        fontFamily: styleSheet.fontFamily,\n                        lineHeight: \"\".concat(styleSheet.tooltipTextLineHeight, \"px\"),\n                        padding: '0 12px 0 12px',\n                    },\n                    _a[\"\".concat(TOOLTIP_CSS_CONST.TITLE_CLASS)] = {\n                        marginBottom: '12px',\n                        marginTop: '12px',\n                    },\n                    _a[\"\".concat(TOOLTIP_CSS_CONST.LIST_CLASS)] = {\n                        margin: 0,\n                        listStyleType: 'none',\n                        padding: 0,\n                    },\n                    _a[\"\".concat(TOOLTIP_CSS_CONST.LIST_ITEM_CLASS)] = {\n                        listStyleType: 'none',\n                        padding: 0,\n                        marginBottom: '12px',\n                        marginTop: '12px',\n                        marginLeft: 0,\n                        marginRight: 0,\n                    },\n                    _a[\"\".concat(TOOLTIP_CSS_CONST.MARKER_CLASS)] = {\n                        width: '8px',\n                        height: '8px',\n                        borderRadius: '50%',\n                        display: 'inline-block',\n                        marginRight: '8px',\n                    },\n                    _a[\"\".concat(TOOLTIP_CSS_CONST.VALUE_CLASS)] = {\n                        display: 'inline-block',\n                        float: 'right',\n                        marginLeft: '30px',\n                    },\n                    _a),\n            },\n            annotation: {\n                arc: {\n                    style: {\n                        stroke: styleSheet.annotationArcBorderColor,\n                        lineWidth: styleSheet.annotationArcBorder,\n                    },\n                    animate: true,\n                },\n                line: {\n                    style: {\n                        stroke: styleSheet.annotationLineBorderColor,\n                        lineDash: styleSheet.annotationLineDash,\n                        lineWidth: styleSheet.annotationLineBorder,\n                    },\n                    text: {\n                        position: 'start',\n                        autoRotate: true,\n                        style: {\n                            fill: styleSheet.annotationTextFillColor,\n                            stroke: styleSheet.annotationTextBorderColor,\n                            lineWidth: styleSheet.annotationTextBorder,\n                            fontSize: styleSheet.annotationTextFontSize,\n                            textAlign: 'start',\n                            fontFamily: styleSheet.fontFamily,\n                            textBaseline: 'bottom',\n                        },\n                    },\n                    animate: true,\n                },\n                text: {\n                    style: {\n                        fill: styleSheet.annotationTextFillColor,\n                        stroke: styleSheet.annotationTextBorderColor,\n                        lineWidth: styleSheet.annotationTextBorder,\n                        fontSize: styleSheet.annotationTextFontSize,\n                        textBaseline: 'middle',\n                        textAlign: 'start',\n                        fontFamily: styleSheet.fontFamily,\n                    },\n                    animate: true,\n                },\n                region: {\n                    top: false,\n                    style: {\n                        lineWidth: styleSheet.annotationRegionBorder,\n                        stroke: styleSheet.annotationRegionBorderColor,\n                        fill: styleSheet.annotationRegionFillColor,\n                        fillOpacity: styleSheet.annotationRegionFillOpacity,\n                    },\n                    animate: true,\n                },\n                image: {\n                    top: false,\n                    animate: true,\n                },\n                dataMarker: {\n                    top: true,\n                    point: {\n                        style: {\n                            r: 3,\n                            stroke: styleSheet.brandColor,\n                            lineWidth: 2,\n                        },\n                    },\n                    line: {\n                        style: {\n                            stroke: styleSheet.annotationLineBorderColor,\n                            lineWidth: styleSheet.annotationLineBorder,\n                        },\n                        length: styleSheet.annotationDataMarkerLineLength,\n                    },\n                    text: {\n                        style: {\n                            textAlign: 'start',\n                            fill: styleSheet.annotationTextFillColor,\n                            stroke: styleSheet.annotationTextBorderColor,\n                            lineWidth: styleSheet.annotationTextBorder,\n                            fontSize: styleSheet.annotationTextFontSize,\n                            fontFamily: styleSheet.fontFamily,\n                        },\n                    },\n                    direction: 'upward',\n                    autoAdjust: true,\n                    animate: true,\n                },\n                dataRegion: {\n                    style: {\n                        region: {\n                            fill: styleSheet.annotationRegionFillColor,\n                            fillOpacity: styleSheet.annotationRegionFillOpacity,\n                        },\n                        text: {\n                            textAlign: 'center',\n                            textBaseline: 'bottom',\n                            fill: styleSheet.annotationTextFillColor,\n                            stroke: styleSheet.annotationTextBorderColor,\n                            lineWidth: styleSheet.annotationTextBorder,\n                            fontSize: styleSheet.annotationTextFontSize,\n                            fontFamily: styleSheet.fontFamily,\n                        },\n                    },\n                    animate: true,\n                },\n            },\n            slider: {\n                common: {\n                    padding: [8, 8, 8, 8],\n                    backgroundStyle: {\n                        fill: styleSheet.cSliderBackgroundFillColor,\n                        opacity: styleSheet.cSliderBackgroundFillOpacity,\n                    },\n                    foregroundStyle: {\n                        fill: styleSheet.cSliderForegroundFillColor,\n                        opacity: styleSheet.cSliderForegroundFillOpacity,\n                    },\n                    handlerStyle: {\n                        width: styleSheet.cSliderHandlerWidth,\n                        height: styleSheet.cSliderHandlerHeight,\n                        fill: styleSheet.cSliderHandlerFillColor,\n                        opacity: styleSheet.cSliderHandlerFillOpacity,\n                        stroke: styleSheet.cSliderHandlerBorderColor,\n                        lineWidth: styleSheet.cSliderHandlerBorder,\n                        radius: styleSheet.cSliderHandlerBorderRadius,\n                        // 高亮的颜色\n                        highLightFill: styleSheet.cSliderHandlerHighlightFillColor,\n                    },\n                    textStyle: {\n                        fill: styleSheet.cSliderTextFillColor,\n                        opacity: styleSheet.cSliderTextFillOpacity,\n                        fontSize: styleSheet.cSliderTextFontSize,\n                        lineHeight: styleSheet.cSliderTextLineHeight,\n                        fontWeight: styleSheet.cSliderTextFontWeight,\n                        stroke: styleSheet.cSliderTextBorderColor,\n                        lineWidth: styleSheet.cSliderTextBorder,\n                    },\n                },\n            },\n            scrollbar: {\n                common: {\n                    padding: [8, 8, 8, 8],\n                },\n                default: {\n                    style: {\n                        trackColor: styleSheet.scrollbarTrackFillColor,\n                        thumbColor: styleSheet.scrollbarThumbFillColor,\n                    },\n                },\n                hover: {\n                    style: {\n                        thumbColor: styleSheet.scrollbarThumbHighlightFillColor,\n                    },\n                },\n            },\n        },\n        labels: {\n            offset: 12,\n            style: {\n                fill: styleSheet.labelFillColor,\n                fontSize: styleSheet.labelFontSize,\n                fontFamily: styleSheet.fontFamily,\n                stroke: styleSheet.labelBorderColor,\n                lineWidth: styleSheet.labelBorder,\n            },\n            fillColorDark: styleSheet.labelFillColorDark,\n            fillColorLight: styleSheet.labelFillColorLight,\n            autoRotate: true,\n        },\n        innerLabels: {\n            style: {\n                fill: styleSheet.innerLabelFillColor,\n                fontSize: styleSheet.innerLabelFontSize,\n                fontFamily: styleSheet.fontFamily,\n                stroke: styleSheet.innerLabelBorderColor,\n                lineWidth: styleSheet.innerLabelBorder,\n            },\n            autoRotate: true,\n        },\n        overflowLabels: {\n            style: {\n                fill: styleSheet.overflowLabelFillColor,\n                fontSize: styleSheet.overflowLabelFontSize,\n                fontFamily: styleSheet.fontFamily,\n                stroke: styleSheet.overflowLabelBorderColor,\n                lineWidth: styleSheet.overflowLabelBorder,\n            },\n        },\n        pieLabels: {\n            labelHeight: 14,\n            offset: 10,\n            labelLine: {\n                style: {\n                    lineWidth: styleSheet.labelLineBorder,\n                },\n            },\n            autoRotate: true,\n        },\n    };\n}\n//# sourceMappingURL=create-by-style-sheet.js.map","import { __assign } from \"tslib\";\nvar BLACK_COLORS = {\n    100: '#000',\n    95: '#0D0D0D',\n    85: '#262626',\n    65: '#595959',\n    45: '#8C8C8C',\n    25: '#BFBFBF',\n    15: '#D9D9D9',\n    6: '#F0F0F0',\n};\nvar WHITE_COLORS = {\n    100: '#FFFFFF',\n    95: '#F2F2F2',\n    85: '#D9D9D9',\n    65: '#A6A6A6',\n    45: '#737373',\n    25: '#404040',\n    15: '#262626',\n    6: '#0F0F0F',\n};\nvar QUALITATIVE_10 = [\n    '#5B8FF9',\n    '#5AD8A6',\n    '#5D7092',\n    '#F6BD16',\n    '#6F5EF9',\n    '#6DC8EC',\n    '#945FB9',\n    '#FF9845',\n    '#1E9493',\n    '#FF99C3',\n];\nvar QUALITATIVE_20 = [\n    '#5B8FF9',\n    '#CDDDFD',\n    '#5AD8A6',\n    '#CDF3E4',\n    '#5D7092',\n    '#CED4DE',\n    '#F6BD16',\n    '#FCEBB9',\n    '#6F5EF9',\n    '#D3CEFD',\n    '#6DC8EC',\n    '#D3EEF9',\n    '#945FB9',\n    '#DECFEA',\n    '#FF9845',\n    '#FFE0C7',\n    '#1E9493',\n    '#BBDEDE',\n    '#FF99C3',\n    '#FFE0ED',\n];\n/** 单色顺序色板 */\nvar SINGLE_SEQUENCE = [\n    '#B8E1FF',\n    '#9AC5FF',\n    '#7DAAFF',\n    '#5B8FF9',\n    '#3D76DD',\n    '#085EC0',\n    '#0047A5',\n    '#00318A',\n    '#001D70',\n];\nexport var createLightStyleSheet = function (cfg) {\n    if (cfg === void 0) { cfg = {}; }\n    var _a = cfg.paletteQualitative10, paletteQualitative10 = _a === void 0 ? QUALITATIVE_10 : _a, _b = cfg.paletteQualitative20, paletteQualitative20 = _b === void 0 ? QUALITATIVE_20 : _b;\n    var _c = cfg.brandColor, brandColor = _c === void 0 ? paletteQualitative10[0] : _c;\n    var token = {\n        /** 图表背景色 */\n        backgroundColor: 'transparent',\n        /** 主题色 */\n        brandColor: brandColor,\n        /** 图表辅助色 */\n        subColor: 'rgba(0,0,0,0.05)',\n        /** 分类色板 1，在数据量小于等于 10 时使用 */\n        paletteQualitative10: paletteQualitative10,\n        /** 分类色板 2，在数据量大于 10 时使用 */\n        paletteQualitative20: paletteQualitative20,\n        /** 语义色 */\n        paletteSemanticRed: '#F4664A',\n        /** 语义色 */\n        paletteSemanticGreen: '#30BF78',\n        /** 语义色 */\n        paletteSemanticYellow: '#FAAD14',\n        /** (单色)顺序色板 */\n        paletteSequence: SINGLE_SEQUENCE,\n        /** 字体 */\n        fontFamily: \"\\\"Segoe UI\\\", Roboto, \\\"Helvetica Neue\\\", Arial,\\n    \\\"Noto Sans\\\", sans-serif, \\\"Apple Color Emoji\\\", \\\"Segoe UI Emoji\\\", \\\"Segoe UI Symbol\\\",\\n    \\\"Noto Color Emoji\\\"\",\n        // -------------------- 坐标轴 --------------------\n        /** 坐标轴线颜色 */\n        axisLineBorderColor: BLACK_COLORS[25],\n        /** 坐标轴线粗细 */\n        axisLineBorder: 1,\n        /** 坐标轴线 lineDash 设置 */\n        axisLineDash: null,\n        /** 坐标轴标题颜色 */\n        axisTitleTextFillColor: BLACK_COLORS[65],\n        /** 坐标轴标题文本字体大小 */\n        axisTitleTextFontSize: 12,\n        /** 坐标轴标题文本行高 */\n        axisTitleTextLineHeight: 12,\n        /** 坐标轴标题文本字体粗细 */\n        axisTitleTextFontWeight: 'normal',\n        /** 坐标轴标题距离坐标轴文本的间距 */\n        axisTitleSpacing: 12,\n        /** 坐标轴标题详细说明icon颜色 */\n        axisDescriptionIconFillColor: WHITE_COLORS[85],\n        /** 坐标轴刻度线颜色 */\n        axisTickLineBorderColor: BLACK_COLORS[25],\n        /** 坐标轴刻度线长度 */\n        axisTickLineLength: 4,\n        /** 坐标轴刻度线粗细 */\n        axisTickLineBorder: 1,\n        /** 坐标轴次刻度线颜色 */\n        axisSubTickLineBorderColor: BLACK_COLORS[15],\n        /** 坐标轴次刻度线长度 */\n        axisSubTickLineLength: 2,\n        /** 坐标轴次刻度线粗细 */\n        axisSubTickLineBorder: 1,\n        /** 坐标轴刻度文本颜色 */\n        axisLabelFillColor: BLACK_COLORS[45],\n        /** 坐标轴刻度文本字体大小 */\n        axisLabelFontSize: 12,\n        /** 坐标轴刻度文本行高 */\n        axisLabelLineHeight: 12,\n        /** 坐标轴刻度文本字体粗细 */\n        axisLabelFontWeight: 'normal',\n        /** 坐标轴刻度文本距离坐标轴线的间距 */\n        axisLabelOffset: 8,\n        /** 坐标轴网格线颜色 */\n        axisGridBorderColor: BLACK_COLORS[15],\n        /** 坐标轴网格线粗细 */\n        axisGridBorder: 1,\n        /** 坐标轴网格线虚线设置 */\n        axisGridLineDash: null,\n        // -------------------- 图例 --------------------\n        /** 图例标题颜色 */\n        legendTitleTextFillColor: BLACK_COLORS[45],\n        /** 图例标题文本字体大小 */\n        legendTitleTextFontSize: 12,\n        /** 图例标题文本行高 */\n        legendTitleTextLineHeight: 21,\n        /** 图例标题文本字体粗细 */\n        legendTitleTextFontWeight: 'normal',\n        /** 图例 marker 颜色 */\n        legendMarkerColor: brandColor,\n        /** 图例 marker 距离图例文本的间距 */\n        legendMarkerSpacing: 8,\n        /** 图例 marker 默认半径大小 */\n        legendMarkerSize: 4,\n        /** 图例 'circle' marker 半径 */\n        legendCircleMarkerSize: 4,\n        /** 图例 'square' marker 半径 */\n        legendSquareMarkerSize: 4,\n        /** 图例 'line' marker 半径 */\n        legendLineMarkerSize: 5,\n        /** 图例项文本颜色 */\n        legendItemNameFillColor: BLACK_COLORS[65],\n        /** 图例项文本字体大小 */\n        legendItemNameFontSize: 12,\n        /** 图例项文本行高 */\n        legendItemNameLineHeight: 12,\n        /** 图例项粗细 */\n        legendItemNameFontWeight: 'normal',\n        /** 图例项之间的水平间距 */\n        legendItemSpacing: 24,\n        /** 图例项垂直方向的间隔 */\n        legendItemMarginBottom: 12,\n        /** 图例与图表绘图区域的偏移距离  */\n        legendPadding: [8, 8, 8, 8],\n        /** 水平布局的图例与绘图区域偏移距离 */\n        legendHorizontalPadding: [8, 0, 8, 0],\n        /** 垂直布局的图例与绘图区域偏移距离 */\n        legendVerticalPadding: [0, 8, 0, 8],\n        // 图例分页器\n        /** 图例分页器 marker 大小 */\n        legendPageNavigatorMarkerSize: 12,\n        /** 图例分页器 marker 非激活状态填充色 */\n        legendPageNavigatorMarkerInactiveFillColor: BLACK_COLORS[100],\n        /** 图例分页器 marker 非激活状态填充色透明度 */\n        legendPageNavigatorMarkerInactiveFillOpacity: 0.45,\n        /** 图例分页器 marker 填充色 */\n        legendPageNavigatorMarkerFillColor: BLACK_COLORS[100],\n        /** 图例分页器 marker 填充色透明度 */\n        legendPageNavigatorMarkerFillOpacity: 1,\n        /** 图例分页器文本颜色 */\n        legendPageNavigatorTextFillColor: BLACK_COLORS[45],\n        /** 图例分页器文本字体大小 */\n        legendPageNavigatorTextFontSize: 12,\n        /** 连续图例滑块填充色 */\n        sliderRailFillColor: BLACK_COLORS[15],\n        /** 连续图例滑块边框粗细 */\n        sliderRailBorder: 0,\n        /** 连续图例滑块边框颜色 */\n        sliderRailBorderColor: null,\n        /** 连续图例滑块宽度 */\n        sliderRailWidth: 100,\n        /** 连续图例滑块高度 */\n        sliderRailHeight: 12,\n        /** 连续图例文本颜色 */\n        sliderLabelTextFillColor: BLACK_COLORS[45],\n        /** 连续图例文本字体大小 */\n        sliderLabelTextFontSize: 12,\n        /** 连续图例文本行高 */\n        sliderLabelTextLineHeight: 12,\n        /** 连续图例文本字体粗细 */\n        sliderLabelTextFontWeight: 'normal',\n        /** 连续图例滑块颜色 */\n        sliderHandlerFillColor: BLACK_COLORS[6],\n        /** 连续图例滑块宽度 */\n        sliderHandlerWidth: 10,\n        /** 连续图例滑块高度 */\n        sliderHandlerHeight: 14,\n        /** 连续图例滑块边框粗细 */\n        sliderHandlerBorder: 1,\n        /** 连续图例滑块边框颜色 */\n        sliderHandlerBorderColor: BLACK_COLORS[25],\n        // -------------------- Annotation，图形标注 --------------------\n        /** arc 图形标注描边颜色 */\n        annotationArcBorderColor: BLACK_COLORS[15],\n        /** arc 图形标注粗细 */\n        annotationArcBorder: 1,\n        /** line 图形标注颜色 */\n        annotationLineBorderColor: BLACK_COLORS[25],\n        /** line 图形标注粗细 */\n        annotationLineBorder: 1,\n        /** lube 图形标注的虚线间隔 */\n        annotationLineDash: null,\n        /** text 图形标注文本颜色 */\n        annotationTextFillColor: BLACK_COLORS[65],\n        /** text 图形标注文本字体大小 */\n        annotationTextFontSize: 12,\n        /** text 图形标注文本行高 */\n        annotationTextLineHeight: 12,\n        /** text 图形标注文本字体粗细 */\n        annotationTextFontWeight: 'normal',\n        /** text 图形标注文本边框颜色 */\n        annotationTextBorderColor: null,\n        /** text 图形标注文本边框粗细 */\n        annotationTextBorder: 0,\n        /** region 图形标注填充颜色 */\n        annotationRegionFillColor: BLACK_COLORS[100],\n        /** region 图形标注填充颜色透明色 */\n        annotationRegionFillOpacity: 0.06,\n        /** region 图形标注描边粗细 */\n        annotationRegionBorder: 0,\n        /** region 图形标注描边颜色 */\n        annotationRegionBorderColor: null,\n        /** dataMarker 图形标注线的长度 */\n        annotationDataMarkerLineLength: 16,\n        // -------------------- Tooltip --------------------\n        /** tooltip crosshairs 辅助线颜色 */\n        tooltipCrosshairsBorderColor: BLACK_COLORS[25],\n        /** tooltip crosshairs 辅助线粗细 */\n        tooltipCrosshairsBorder: 1,\n        /** tooltip crosshairs 辅助线虚线间隔 */\n        tooltipCrosshairsLineDash: null,\n        /** tooltip 内容框背景色 */\n        tooltipContainerFillColor: 'rgb(255, 255, 255)',\n        tooltipContainerFillOpacity: 0.95,\n        /** tooltip 内容框阴影 */\n        tooltipContainerShadow: '0px 0px 10px #aeaeae',\n        /** tooltip 内容框圆角 */\n        tooltipContainerBorderRadius: 3,\n        /** tooltip 文本颜色 */\n        tooltipTextFillColor: BLACK_COLORS[65],\n        /** tooltip 文本字体大小 */\n        tooltipTextFontSize: 12,\n        /** tooltip 文本行高 */\n        tooltipTextLineHeight: 12,\n        /** tooltip 文本字体粗细 */\n        tooltipTextFontWeight: 'bold',\n        // -------------------- Geometry labels --------------------\n        /** Geometry label 文本颜色 */\n        labelFillColor: BLACK_COLORS[65],\n        labelFillColorDark: '#2c3542',\n        labelFillColorLight: '#ffffff',\n        /** Geometry label 文本字体大小 */\n        labelFontSize: 12,\n        /** Geometry label 文本行高 */\n        labelLineHeight: 12,\n        /** Geometry label 文本字体粗细 */\n        labelFontWeight: 'normal',\n        /** Geometry label 文本描边颜色 */\n        labelBorderColor: null,\n        /** Geometry label 文本描边粗细 */\n        labelBorder: 0,\n        /** Geometry innerLabel 文本颜色 */\n        innerLabelFillColor: WHITE_COLORS[100],\n        /** Geometry innerLabel 文本字体大小 */\n        innerLabelFontSize: 12,\n        /** Geometry innerLabel 文本行高 */\n        innerLabelLineHeight: 12,\n        /** Geometry innerLabel 文本字体粗细 */\n        innerLabelFontWeight: 'normal',\n        /** Geometry innerLabel 文本描边颜色 */\n        innerLabelBorderColor: null,\n        /** Geometry innerLabel 文本描边粗细 */\n        innerLabelBorder: 0,\n        /** Geometry overflowLabel 文本颜色 */\n        overflowLabelFillColor: BLACK_COLORS[65],\n        /** Geometry overflowLabel 文本字体大小 */\n        overflowLabelFontSize: 12,\n        /** Geometry overflowLabel 文本行高 */\n        overflowLabelLineHeight: 12,\n        /** Geometry overflowLabel 文本字体粗细 */\n        overflowLabelFontWeight: 'normal',\n        /** Geometry overflowLabel 文本描边颜色 */\n        overflowLabelBorderColor: WHITE_COLORS[100],\n        /** Geometry overflowLabel 文本描边粗细 */\n        overflowLabelBorder: 1,\n        /** Geometry label 文本连接线粗细 */\n        labelLineBorder: 1,\n        /** Geometry label 文本连接线颜色 */\n        labelLineBorderColor: BLACK_COLORS[25],\n        // -------------------- Slider 组件样式--------------------\n        /** slider 滑道高度 */\n        cSliderRailHieght: 16,\n        /** slider 滑道背景色 */\n        cSliderBackgroundFillColor: '#416180',\n        /** slider 滑道背景色透明度 */\n        cSliderBackgroundFillOpacity: 0.05,\n        /** slider 滑道前景色 */\n        cSliderForegroundFillColor: '#5B8FF9',\n        /** slider 滑道前景色透明度 */\n        cSliderForegroundFillOpacity: 0.15,\n        // slider handlerStyle 手柄样式\n        /** slider 手柄高度 */\n        cSliderHandlerHeight: 24,\n        /** Slider 手柄宽度 */\n        cSliderHandlerWidth: 10,\n        /** Slider 手柄背景色 */\n        cSliderHandlerFillColor: '#F7F7F7',\n        /** Slider 手柄背景色透明度 */\n        cSliderHandlerFillOpacity: 1,\n        /** Slider 手柄高亮背景色 */\n        cSliderHandlerHighlightFillColor: '#FFF',\n        /** Slider 手柄边框色 */\n        cSliderHandlerBorderColor: '#BFBFBF',\n        /** Slider 手柄边框粗细 */\n        cSliderHandlerBorder: 1,\n        /** Slider 手柄边框圆角 */\n        cSliderHandlerBorderRadius: 2,\n        // slider textStyle 字体标签样式\n        /** Slider 字体标签颜色 */\n        cSliderTextFillColor: '#000',\n        /** Slider 字体标签透明度 */\n        cSliderTextFillOpacity: 0.45,\n        /** Slider 字体标签大小 */\n        cSliderTextFontSize: 12,\n        /** Slider 字体标签行高 */\n        cSliderTextLineHeight: 12,\n        /** Slider 字体标签字重 */\n        cSliderTextFontWeight: 'normal',\n        /** Slider 字体标签描边色 */\n        cSliderTextBorderColor: null,\n        /** Slider 字体标签描边粗细 */\n        cSliderTextBorder: 0,\n        // -------------------- Scrollbar 组件样式--------------------\n        /** 滚动条 滚道填充色 */\n        scrollbarTrackFillColor: 'rgba(0,0,0,0)',\n        /** 滚动条 滑块填充色 */\n        scrollbarThumbFillColor: 'rgba(0,0,0,0.15)',\n        /** 滚动条 滑块高亮填充色 */\n        scrollbarThumbHighlightFillColor: 'rgba(0,0,0,0.2)',\n        // -------------------- Geometry 图形样式--------------------\n        /** 点图填充颜色 */\n        pointFillColor: brandColor,\n        /** 点图填充颜色透明度 */\n        pointFillOpacity: 0.95,\n        /** 点图大小 */\n        pointSize: 4,\n        /** 点图描边粗细 */\n        pointBorder: 1,\n        /** 点图描边颜色 */\n        pointBorderColor: WHITE_COLORS[100],\n        /** 点图描边透明度 */\n        pointBorderOpacity: 1,\n        /** 点图 active 状态下描边颜色 */\n        pointActiveBorderColor: BLACK_COLORS[100],\n        /** 点图 selected 状态下描边粗细 */\n        pointSelectedBorder: 2,\n        /** 点图 selected 状态下描边颜色 */\n        pointSelectedBorderColor: BLACK_COLORS[100],\n        /** 点图 inactive 状态下填充颜色透明度 */\n        pointInactiveFillOpacity: 0.3,\n        /** 点图 inactive 状态下描边透明度 */\n        pointInactiveBorderOpacity: 0.3,\n        /** 空心点图大小 */\n        hollowPointSize: 4,\n        /** 空心点图描边粗细 */\n        hollowPointBorder: 1,\n        /** 空心点图描边颜色 */\n        hollowPointBorderColor: brandColor,\n        /** 空心点图描边透明度 */\n        hollowPointBorderOpacity: 0.95,\n        hollowPointFillColor: WHITE_COLORS[100],\n        /** 空心点图 active 状态下描边粗细 */\n        hollowPointActiveBorder: 1,\n        /** 空心点图 active 状态下描边颜色 */\n        hollowPointActiveBorderColor: BLACK_COLORS[100],\n        /** 空心点图 active 状态下描边透明度 */\n        hollowPointActiveBorderOpacity: 1,\n        /** 空心点图 selected 状态下描边粗细 */\n        hollowPointSelectedBorder: 2,\n        /** 空心点图 selected 状态下描边颜色 */\n        hollowPointSelectedBorderColor: BLACK_COLORS[100],\n        /** 空心点图 selected 状态下描边透明度 */\n        hollowPointSelectedBorderOpacity: 1,\n        /** 空心点图 inactive 状态下描边透明度 */\n        hollowPointInactiveBorderOpacity: 0.3,\n        /** 线图粗细 */\n        lineBorder: 2,\n        /** 线图颜色 */\n        lineBorderColor: brandColor,\n        /** 线图透明度 */\n        lineBorderOpacity: 1,\n        /** 线图 Active 状态下粗细 */\n        lineActiveBorder: 3,\n        /** 线图 selected 状态下粗细 */\n        lineSelectedBorder: 3,\n        /** 线图 inactive 状态下透明度 */\n        lineInactiveBorderOpacity: 0.3,\n        /** area 填充颜色 */\n        areaFillColor: brandColor,\n        /** area 填充透明度 */\n        areaFillOpacity: 0.25,\n        /** area 在 active 状态下的填充透明度 */\n        areaActiveFillColor: brandColor,\n        areaActiveFillOpacity: 0.5,\n        /** area 在 selected 状态下的填充透明度 */\n        areaSelectedFillColor: brandColor,\n        areaSelectedFillOpacity: 0.5,\n        /** area inactive 状态下填充透明度 */\n        areaInactiveFillOpacity: 0.3,\n        /** hollowArea 颜色 */\n        hollowAreaBorderColor: brandColor,\n        /** hollowArea 边框粗细 */\n        hollowAreaBorder: 2,\n        /** hollowArea 边框透明度 */\n        hollowAreaBorderOpacity: 1,\n        /** hollowArea active 状态下的边框粗细 */\n        hollowAreaActiveBorder: 3,\n        hollowAreaActiveBorderColor: BLACK_COLORS[100],\n        /** hollowArea selected 状态下的边框粗细 */\n        hollowAreaSelectedBorder: 3,\n        hollowAreaSelectedBorderColor: BLACK_COLORS[100],\n        /** hollowArea inactive 状态下的边框透明度 */\n        hollowAreaInactiveBorderOpacity: 0.3,\n        /** interval 填充颜色 */\n        intervalFillColor: brandColor,\n        /** interval 填充透明度 */\n        intervalFillOpacity: 0.95,\n        /** interval active 状态下边框粗细 */\n        intervalActiveBorder: 1,\n        /** interval active 状态下边框颜色 */\n        intervalActiveBorderColor: BLACK_COLORS[100],\n        intervalActiveBorderOpacity: 1,\n        /** interval selected 状态下边框粗细 */\n        intervalSelectedBorder: 2,\n        /** interval selected 状态下边框颜色 */\n        intervalSelectedBorderColor: BLACK_COLORS[100],\n        /** interval selected 状态下边框透明度 */\n        intervalSelectedBorderOpacity: 1,\n        /** interval inactive 状态下边框透明度 */\n        intervalInactiveBorderOpacity: 0.3,\n        /** interval inactive 状态下填充透明度 */\n        intervalInactiveFillOpacity: 0.3,\n        /** interval 边框粗细 */\n        hollowIntervalBorder: 2,\n        /** hollowInterval 边框颜色 */\n        hollowIntervalBorderColor: brandColor,\n        /** hollowInterval 边框透明度 */\n        hollowIntervalBorderOpacity: 1,\n        hollowIntervalFillColor: WHITE_COLORS[100],\n        /** hollowInterval active 状态下边框粗细 */\n        hollowIntervalActiveBorder: 2,\n        /** hollowInterval active 状态下边框颜色 */\n        hollowIntervalActiveBorderColor: BLACK_COLORS[100],\n        /** hollowInterval selected 状态下边框粗细 */\n        hollowIntervalSelectedBorder: 3,\n        /** hollowInterval selected 状态下边框颜色 */\n        hollowIntervalSelectedBorderColor: BLACK_COLORS[100],\n        /** hollowInterval selected 状态下边框透明度 */\n        hollowIntervalSelectedBorderOpacity: 1,\n        /** hollowInterval inactive 状态下边框透明度 */\n        hollowIntervalInactiveBorderOpacity: 0.3,\n    };\n    return __assign(__assign({}, token), cfg);\n};\nexport var antvLight = createLightStyleSheet();\n//# sourceMappingURL=light.js.map","import { __rest } from \"tslib\";\nimport { deepMix } from '@antv/util';\nimport { createThemeByStyleSheet } from './create-by-style-sheet';\nimport { createLightStyleSheet } from '../style-sheet/light';\nexport function createTheme(themeCfg) {\n    var _a = themeCfg.styleSheet, styleSheetCfg = _a === void 0 ? {} : _a, themeObject = __rest(themeCfg, [\"styleSheet\"]);\n    // ① 创建样式表 (默认创建 light 的样式表)\n    var styleSheet = createLightStyleSheet(styleSheetCfg);\n    // ② 创建主题\n    return deepMix({}, createThemeByStyleSheet(styleSheet), themeObject);\n}\n//# sourceMappingURL=create-theme.js.map","import { get, lowerCase } from '@antv/util';\nimport { createTheme } from './util';\nvar defaultTheme = createTheme({});\n// 所有已经存在的主题\nvar Themes = {\n    default: defaultTheme,\n};\n/**\n * 获取主题配置信息。\n * @param theme 主题名\n */\nexport function getTheme(theme) {\n    return get(Themes, lowerCase(theme), Themes.default);\n}\n/**\n * 注册新的主题配置信息。\n * @param theme 主题名。\n * @param value 具体的主题配置。\n */\nexport function registerTheme(theme, value) {\n    Themes[lowerCase(theme)] = createTheme(value);\n}\n//# sourceMappingURL=index.js.map","import { __assign, __read, __spreadArray, __values } from \"tslib\";\nimport { contains, filter, find, isArray, isEmpty, isFunction, isNil, isNumberEqual, isObject, memoize, get, values, } from '@antv/util';\nimport { FIELD_ORIGIN, GROUP_ATTRS } from '../constant';\nimport { getName, inferScaleType } from './scale';\nfunction snapEqual(v1, v2, scale) {\n    var value1 = scale.translate(v1);\n    var value2 = scale.translate(v2);\n    return isNumberEqual(value1, value2);\n}\nfunction getXValueByPoint(point, geometry) {\n    var coordinate = geometry.coordinate;\n    var xScale = geometry.getXScale();\n    var range = xScale.range;\n    var rangeMax = range[range.length - 1];\n    var rangeMin = range[0];\n    var invertPoint = coordinate.invert(point);\n    var xValue = invertPoint.x;\n    if (coordinate.isPolar && xValue > (1 + rangeMax) / 2) {\n        xValue = rangeMin; // 极坐标下，scale 的 range 被做过特殊处理\n    }\n    return xScale.translate(xScale.invert(xValue));\n}\nfunction filterYValue(data, point, geometry) {\n    var coordinate = geometry.coordinate;\n    var yScale = geometry.getYScale();\n    var yField = yScale.field;\n    var invertPoint = coordinate.invert(point);\n    var yValue = yScale.invert(invertPoint.y);\n    var result = find(data, function (obj) {\n        var originData = obj[FIELD_ORIGIN];\n        return originData[yField][0] <= yValue && originData[yField][1] >= yValue;\n    });\n    return result || data[data.length - 1];\n}\nvar getXDistance = memoize(function (scale) {\n    if (scale.isCategory) {\n        return 1;\n    }\n    var scaleValues = scale.values; // values 是无序的\n    var length = scaleValues.length;\n    var min = scale.translate(scaleValues[0]);\n    var max = min;\n    for (var index = 0; index < length; index++) {\n        var value = scaleValues[index];\n        // 时间类型需要 translate\n        var numericValue = scale.translate(value);\n        if (numericValue < min) {\n            min = numericValue;\n        }\n        if (numericValue > max) {\n            max = numericValue;\n        }\n    }\n    return (max - min) / (length - 1);\n});\n/**\n * 获得 tooltip 的 title\n * @param originData\n * @param geometry\n * @param title\n */\nfunction getTooltipTitle(originData, geometry, title) {\n    var positionAttr = geometry.getAttribute('position');\n    var fields = positionAttr.getFields();\n    var scales = geometry.scales;\n    var titleField = isFunction(title) || !title ? fields[0] : title;\n    var titleScale = scales[titleField];\n    // 如果创建了该字段对应的 scale，则通过 scale.getText() 方式取值，因为用户可能对数据进行了格式化\n    // 如果没有对应的 scale，则从原始数据中取值，如果原始数据中仍不存在，则直接放回 title 值\n    var tooltipTitle = titleScale ? titleScale.getText(originData[titleField]) : originData[titleField] || titleField;\n    return isFunction(title) ? title(tooltipTitle, originData) : tooltipTitle;\n}\nfunction getAttributesForLegend(geometry) {\n    var attributes = values(geometry.attributes);\n    return filter(attributes, function (attribute) { return contains(GROUP_ATTRS, attribute.type); });\n}\nfunction getTooltipValueScale(geometry) {\n    var e_1, _a;\n    var attributes = getAttributesForLegend(geometry);\n    var scale;\n    try {\n        for (var attributes_1 = __values(attributes), attributes_1_1 = attributes_1.next(); !attributes_1_1.done; attributes_1_1 = attributes_1.next()) {\n            var attribute = attributes_1_1.value;\n            var tmpScale = attribute.getScale(attribute.type);\n            if (tmpScale && tmpScale.isLinear) {\n                var tmpScaleDef = get(geometry.scaleDefs, tmpScale.field);\n                var inferedScaleType = inferScaleType(tmpScale, tmpScaleDef, attribute.type, geometry.type);\n                if (inferedScaleType !== 'cat') {\n                    // 如果指定字段是非 position 的，同时是连续的\n                    scale = tmpScale;\n                    break;\n                }\n            }\n        }\n    }\n    catch (e_1_1) { e_1 = { error: e_1_1 }; }\n    finally {\n        try {\n            if (attributes_1_1 && !attributes_1_1.done && (_a = attributes_1.return)) _a.call(attributes_1);\n        }\n        finally { if (e_1) throw e_1.error; }\n    }\n    var xScale = geometry.getXScale();\n    var yScale = geometry.getYScale();\n    return scale || yScale || xScale;\n}\nfunction getTooltipValue(originData, valueScale) {\n    var field = valueScale.field;\n    var value = originData[field];\n    if (isArray(value)) {\n        var texts = value.map(function (eachValue) {\n            return valueScale.getText(eachValue);\n        });\n        return texts.join('-');\n    }\n    return valueScale.getText(value);\n}\n// 根据原始数据获取 tooltip item 中 name 值\nfunction getTooltipName(originData, geometry) {\n    var nameScale;\n    var groupScales = geometry.getGroupScales();\n    if (groupScales.length) {\n        // 如果存在分组类型，取第一个分组类型\n        nameScale = groupScales[0];\n    }\n    if (nameScale) {\n        var field = nameScale.field;\n        return nameScale.getText(originData[field]);\n    }\n    var valueScale = getTooltipValueScale(geometry);\n    return getName(valueScale);\n}\n/**\n * @ignore\n * Finds data from geometry by point\n * @param point canvas point\n * @param data an item of geometry.dataArray\n * @param geometry\n * @returns\n */\nexport function findDataByPoint(point, data, geometry) {\n    if (data.length === 0) {\n        return null;\n    }\n    var geometryType = geometry.type;\n    var xScale = geometry.getXScale();\n    var yScale = geometry.getYScale();\n    var xField = xScale.field;\n    var yField = yScale.field;\n    var rst = null;\n    // 热力图采用最小逼近策略查找 point 击中的数据\n    if (geometryType === 'heatmap' || geometryType === 'point') {\n        // 将 point 画布坐标转换为原始数据值\n        var coordinate = geometry.coordinate;\n        var invertPoint = coordinate.invert(point); // 转换成归一化的数据\n        var x = xScale.invert(invertPoint.x); // 转换为原始值\n        var y = yScale.invert(invertPoint.y); // 转换为原始值\n        var min = Infinity;\n        for (var index = 0; index < data.length; index++) {\n            var obj = data[index];\n            var originData = obj[FIELD_ORIGIN];\n            var range = Math.pow((originData[xField] - x), 2) + Math.pow((originData[yField] - y), 2);\n            if (range < min) {\n                min = range;\n                rst = obj;\n            }\n        }\n        return rst;\n    }\n    // 其他 Geometry 类型按照 x 字段数据进行查找\n    var first = data[0];\n    var last = data[data.length - 1];\n    var xValue = getXValueByPoint(point, geometry);\n    var firstXValue = first[FIELD_ORIGIN][xField];\n    var firstYValue = first[FIELD_ORIGIN][yField];\n    var lastXValue = last[FIELD_ORIGIN][xField];\n    var isYArray = yScale.isLinear && isArray(firstYValue); // 考虑 x 维度相同，y 是数组区间的情况\n    // 如果 x 的值是数组\n    if (isArray(firstXValue)) {\n        for (var index = 0; index < data.length; index++) {\n            var record = data[index];\n            var originData = record[FIELD_ORIGIN];\n            // xValue 在 originData[xField] 的数值区间内\n            if (xScale.translate(originData[xField][0]) <= xValue && xScale.translate(originData[xField][1]) >= xValue) {\n                if (isYArray) {\n                    // 层叠直方图场景，x 和 y 都是数组区间\n                    if (!isArray(rst)) {\n                        rst = [];\n                    }\n                    rst.push(record);\n                }\n                else {\n                    rst = record;\n                    break;\n                }\n            }\n        }\n        if (isArray(rst)) {\n            rst = filterYValue(rst, point, geometry);\n        }\n    }\n    else {\n        var next = void 0;\n        if (!xScale.isLinear && xScale.type !== 'timeCat') {\n            // x 轴对应的数据为非线性以及非时间类型的数据采用遍历查找\n            for (var index = 0; index < data.length; index++) {\n                var record = data[index];\n                var originData = record[FIELD_ORIGIN];\n                if (snapEqual(originData[xField], xValue, xScale)) {\n                    if (isYArray) {\n                        if (!isArray(rst)) {\n                            rst = [];\n                        }\n                        rst.push(record);\n                    }\n                    else {\n                        rst = record;\n                        break;\n                    }\n                }\n                else if (xScale.translate(originData[xField]) <= xValue) {\n                    last = record;\n                    next = data[index + 1];\n                }\n            }\n            if (isArray(rst)) {\n                rst = filterYValue(rst, point, geometry);\n            }\n        }\n        else {\n            // x 轴对应的数据为线性以及时间类型，进行二分查找，性能更好\n            if ((xValue > xScale.translate(lastXValue) || xValue < xScale.translate(firstXValue)) &&\n                (xValue > xScale.max || xValue < xScale.min)) {\n                // 不在数据范围内\n                return null;\n            }\n            var firstIdx = 0;\n            var lastIdx = data.length - 1;\n            var middleIdx = void 0;\n            while (firstIdx <= lastIdx) {\n                middleIdx = Math.floor((firstIdx + lastIdx) / 2);\n                var item = data[middleIdx][FIELD_ORIGIN][xField];\n                if (snapEqual(item, xValue, xScale)) {\n                    return data[middleIdx];\n                }\n                if (xScale.translate(item) <= xScale.translate(xValue)) {\n                    firstIdx = middleIdx + 1;\n                    last = data[middleIdx];\n                    next = data[middleIdx + 1];\n                }\n                else {\n                    if (lastIdx === 0) {\n                        last = data[0];\n                    }\n                    lastIdx = middleIdx - 1;\n                }\n            }\n        }\n        if (last && next) {\n            // 计算最逼近的\n            if (Math.abs(xScale.translate(last[FIELD_ORIGIN][xField]) - xValue) >\n                Math.abs(xScale.translate(next[FIELD_ORIGIN][xField]) - xValue)) {\n                last = next;\n            }\n        }\n    }\n    var distance = getXDistance(geometry.getXScale()); // 每个分类间的平均间距\n    if (!rst && Math.abs(xScale.translate(last[FIELD_ORIGIN][xField]) - xValue) <= distance / 2) {\n        rst = last;\n    }\n    return rst;\n}\n/**\n * @ignore\n * Gets tooltip items\n * @param data\n * @param geometry\n * @param [title]\n * @returns\n */\nexport function getTooltipItems(data, geometry, title, showNil) {\n    var e_2, _a;\n    if (title === void 0) { title = ''; }\n    if (showNil === void 0) { showNil = false; }\n    var originData = data[FIELD_ORIGIN];\n    var tooltipTitle = getTooltipTitle(originData, geometry, title);\n    var tooltipOption = geometry.tooltipOption;\n    var defaultColor = geometry.theme.defaultColor;\n    var items = [];\n    var name;\n    var value;\n    function addItem(itemName, itemValue) {\n        if (showNil || (!isNil(itemValue) && itemValue !== '')) {\n            // 值为 null的时候，忽视\n            var item = {\n                title: tooltipTitle,\n                data: originData,\n                mappingData: data,\n                name: itemName,\n                value: itemValue,\n                color: data.color || defaultColor,\n                marker: true,\n            };\n            items.push(item);\n        }\n    }\n    if (isObject(tooltipOption)) {\n        var fields = tooltipOption.fields, callback = tooltipOption.callback;\n        if (callback) {\n            // 用户定义了回调函数\n            var callbackParams = fields.map(function (field) {\n                return data[FIELD_ORIGIN][field];\n            });\n            var cfg = callback.apply(void 0, __spreadArray([], __read(callbackParams), false));\n            var itemCfg = __assign({ data: data[FIELD_ORIGIN], mappingData: data, title: tooltipTitle, color: data.color || defaultColor, marker: true }, cfg);\n            items.push(itemCfg);\n        }\n        else {\n            var scales = geometry.scales;\n            try {\n                for (var fields_1 = __values(fields), fields_1_1 = fields_1.next(); !fields_1_1.done; fields_1_1 = fields_1.next()) {\n                    var field = fields_1_1.value;\n                    if (!isNil(originData[field])) {\n                        // 字段数据为null, undefined 时不显示\n                        var scale = scales[field];\n                        name = getName(scale);\n                        value = scale.getText(originData[field]);\n                        addItem(name, value);\n                    }\n                }\n            }\n            catch (e_2_1) { e_2 = { error: e_2_1 }; }\n            finally {\n                try {\n                    if (fields_1_1 && !fields_1_1.done && (_a = fields_1.return)) _a.call(fields_1);\n                }\n                finally { if (e_2) throw e_2.error; }\n            }\n        }\n    }\n    else {\n        var valueScale = getTooltipValueScale(geometry);\n        // 字段数据为null ,undefined时不显示\n        value = getTooltipValue(originData, valueScale);\n        name = getTooltipName(originData, geometry);\n        addItem(name, value);\n    }\n    return items;\n}\nfunction getTooltipItemsByFindData(geometry, point, title, tooltipCfg) {\n    var e_3, _a;\n    var showNil = tooltipCfg.showNil;\n    var result = [];\n    var dataArray = geometry.dataArray;\n    if (!isEmpty(dataArray)) {\n        geometry.sort(dataArray); // 先进行排序，便于 tooltip 查找\n        try {\n            for (var dataArray_1 = __values(dataArray), dataArray_1_1 = dataArray_1.next(); !dataArray_1_1.done; dataArray_1_1 = dataArray_1.next()) {\n                var data = dataArray_1_1.value;\n                var record = findDataByPoint(point, data, geometry);\n                if (record) {\n                    var elementId = geometry.getElementId(record);\n                    var element = geometry.elementsMap[elementId];\n                    if (geometry.type === 'heatmap' || element.visible) {\n                        // Heatmap 没有 Element\n                        // 如果图形元素隐藏了，怎不再 tooltip 上展示相关数据\n                        var items = getTooltipItems(record, geometry, title, showNil);\n                        if (items.length) {\n                            result.push(items);\n                        }\n                    }\n                }\n            }\n        }\n        catch (e_3_1) { e_3 = { error: e_3_1 }; }\n        finally {\n            try {\n                if (dataArray_1_1 && !dataArray_1_1.done && (_a = dataArray_1.return)) _a.call(dataArray_1);\n            }\n            finally { if (e_3) throw e_3.error; }\n        }\n    }\n    return result;\n}\nfunction getTooltipItemsByHitShape(geometry, point, title, tooltipCfg) {\n    var showNil = tooltipCfg.showNil;\n    var result = [];\n    var container = geometry.container;\n    var shape = container.getShape(point.x, point.y);\n    if (shape && shape.get('visible') && shape.get('origin')) {\n        var mappingData = shape.get('origin').mappingData;\n        var items = getTooltipItems(mappingData, geometry, title, showNil);\n        if (items.length) {\n            result.push(items);\n        }\n    }\n    return result;\n}\n/**\n * 不进行递归查找\n */\nexport function findItemsFromView(view, point, tooltipCfg) {\n    var e_4, _a;\n    var result = [];\n    // 先从 view 本身查找\n    var geometries = view.geometries;\n    var shared = tooltipCfg.shared, title = tooltipCfg.title, reversed = tooltipCfg.reversed;\n    try {\n        for (var geometries_1 = __values(geometries), geometries_1_1 = geometries_1.next(); !geometries_1_1.done; geometries_1_1 = geometries_1.next()) {\n            var geometry = geometries_1_1.value;\n            if (geometry.visible && geometry.tooltipOption !== false) {\n                // geometry 可见同时未关闭 tooltip\n                var geometryType = geometry.type;\n                var tooltipItems = void 0;\n                if (['point', 'edge', 'polygon'].includes(geometryType)) {\n                    // 始终通过图形拾取\n                    tooltipItems = getTooltipItemsByHitShape(geometry, point, title, tooltipCfg);\n                }\n                else if (['area', 'line', 'path', 'heatmap'].includes(geometryType)) {\n                    // 如果是 'area', 'line', 'path'，始终通过数据查找方法查找 tooltip\n                    tooltipItems = getTooltipItemsByFindData(geometry, point, title, tooltipCfg);\n                }\n                else {\n                    if (shared !== false) {\n                        tooltipItems = getTooltipItemsByFindData(geometry, point, title, tooltipCfg);\n                    }\n                    else {\n                        tooltipItems = getTooltipItemsByHitShape(geometry, point, title, tooltipCfg);\n                    }\n                }\n                if (tooltipItems.length) {\n                    if (reversed) {\n                        tooltipItems.reverse();\n                    }\n                    // geometry 有可能会有多个 item，因为用户可以设置 geometry.tooltip('x*y*z')\n                    result.push(tooltipItems);\n                }\n            }\n        }\n    }\n    catch (e_4_1) { e_4 = { error: e_4_1 }; }\n    finally {\n        try {\n            if (geometries_1_1 && !geometries_1_1.done && (_a = geometries_1.return)) _a.call(geometries_1);\n        }\n        finally { if (e_4) throw e_4.error; }\n    }\n    return result;\n}\nexport function findItemsFromViewRecurisive(view, point, tooltipCfg) {\n    var e_5, _a;\n    var result = findItemsFromView(view, point, tooltipCfg);\n    try {\n        // 递归查找，并合并结果\n        for (var _b = __values(view.views), _c = _b.next(); !_c.done; _c = _b.next()) {\n            var childView = _c.value;\n            result = result.concat(findItemsFromView(childView, point, tooltipCfg));\n        }\n    }\n    catch (e_5_1) { e_5 = { error: e_5_1 }; }\n    finally {\n        try {\n            if (_c && !_c.done && (_a = _b.return)) _a.call(_b);\n        }\n        finally { if (e_5) throw e_5.error; }\n    }\n    return result;\n}\n//# sourceMappingURL=tooltip.js.map","import { __read, __spreadArray } from \"tslib\";\nimport { isArray, isNumber } from '@antv/util';\n/**\n * @ignore\n * 是否是自动 padding\n * @param padding\n */\nexport function isAutoPadding(padding) {\n    return !isNumber(padding) && !isArray(padding);\n}\n/**\n * @ignore\n * padding 的解析逻辑\n * @param padding\n * @return [ top, right, bottom, left ]\n */\nexport function parsePadding(padding) {\n    if (padding === void 0) { padding = 0; }\n    var paddingArray = isArray(padding) ? padding : [padding];\n    switch (paddingArray.length) {\n        case 0:\n            paddingArray = [0, 0, 0, 0];\n            break;\n        case 1:\n            paddingArray = new Array(4).fill(paddingArray[0]);\n            break;\n        case 2:\n            paddingArray = __spreadArray(__spreadArray([], __read(paddingArray), false), __read(paddingArray), false);\n            break;\n        case 3:\n            paddingArray = __spreadArray(__spreadArray([], __read(paddingArray), false), [paddingArray[1]], false);\n            break;\n        default:\n            // 其他情况，只去四个\n            paddingArray = paddingArray.slice(0, 4);\n            break;\n    }\n    return paddingArray;\n}\n//# sourceMappingURL=padding.js.map","var LOAD_COMPONENT_CONTROLLERS = {};\n/**\n * 全局注册组件。\n * @param name 组件名称\n * @param plugin 注册的组件类\n * @returns void\n */\nexport function registerComponentController(name, plugin) {\n    LOAD_COMPONENT_CONTROLLERS[name] = plugin;\n}\n/**\n * 删除全局组件。\n * @param name 组件名\n * @returns void\n */\nexport function unregisterComponentController(name) {\n    delete LOAD_COMPONENT_CONTROLLERS[name];\n}\n/**\n * 获取以注册的组件名。\n * @returns string[] 返回已注册的组件名称\n */\nexport function getComponentControllerNames() {\n    return Object.keys(LOAD_COMPONENT_CONTROLLERS);\n}\n/**\n * 根据组件名获取组件类。\n * @param name 组件名\n * @returns 返回组件类\n */\nexport function getComponentController(name) {\n    return LOAD_COMPONENT_CONTROLLERS[name];\n}\n//# sourceMappingURL=index.js.map","import { __assign, __read, __spreadArray } from \"tslib\";\nimport { each, isNil, some } from '@antv/util';\nimport { getCoordinate } from '../../dependents';\n/**\n * coordinate controller，职责：\n * 1. 创建实例\n * 2. 暂存配置\n */\nvar CoordinateController = /** @class */ (function () {\n    function CoordinateController(option) {\n        // 设置默认值，并存储配置\n        this.option = this.wrapperOption(option);\n    }\n    /**\n     * 更新配置\n     * @param option\n     */\n    CoordinateController.prototype.update = function (option) {\n        this.option = this.wrapperOption(option);\n        return this;\n    };\n    /**\n     * 是否存在某一个 action\n     * @param actionName\n     */\n    CoordinateController.prototype.hasAction = function (actionName) {\n        var actions = this.option.actions;\n        return some(actions, function (action) { return action[0] === actionName; });\n    };\n    /**\n     * 创建坐标系对象\n     * @param start 起始位置\n     * @param end   结束位置\n     * @return 坐标系实例\n     */\n    CoordinateController.prototype.create = function (start, end) {\n        var _a = this.option, type = _a.type, cfg = _a.cfg;\n        var isTheta = type === 'theta';\n        // 1. 起始位置\n        var props = __assign({ start: start, end: end }, cfg);\n        // 2. 创建实例\n        var C = getCoordinate(isTheta ? 'polar' : type);\n        this.coordinate = new C(props);\n        // @ts-ignore FIXME coordinate 包问题导致 type 不正确\n        this.coordinate.type = type;\n        // 3. 添加默认 action\n        if (isTheta) {\n            // 不存在 transpose，为其自动设置一个 action\n            if (!this.hasAction('transpose')) {\n                this.transpose();\n            }\n        }\n        // 4. 执行 action\n        this.execActions();\n        return this.coordinate;\n    };\n    /**\n     * 更新坐标系对象\n     * @param start 起始位置\n     * @param end   结束位置\n     * @return 坐标系实例\n     */\n    CoordinateController.prototype.adjust = function (start, end) {\n        this.coordinate.update({\n            start: start,\n            end: end,\n        });\n        // 更新坐标系大小的时候，需要：\n        // 1. 重置 matrix\n        // 2. 重新执行作用于 matrix 的 action\n        this.coordinate.resetMatrix();\n        this.execActions(['scale', 'rotate', 'translate']);\n        return this.coordinate;\n    };\n    /**\n     * 旋转弧度\n     * @param angle\n     */\n    CoordinateController.prototype.rotate = function (angle) {\n        this.option.actions.push(['rotate', angle]);\n        return this;\n    };\n    /**\n     * 镜像\n     * @param dim\n     */\n    CoordinateController.prototype.reflect = function (dim) {\n        this.option.actions.push(['reflect', dim]);\n        return this;\n    };\n    /**\n     * scale\n     * @param sx\n     * @param sy\n     */\n    CoordinateController.prototype.scale = function (sx, sy) {\n        this.option.actions.push(['scale', sx, sy]);\n        return this;\n    };\n    /**\n     * 对角变换\n     */\n    CoordinateController.prototype.transpose = function () {\n        this.option.actions.push(['transpose']);\n        return this;\n    };\n    /**\n     * 获取配置\n     */\n    CoordinateController.prototype.getOption = function () {\n        return this.option;\n    };\n    /**\n     * 获得 coordinate 实例\n     */\n    CoordinateController.prototype.getCoordinate = function () {\n        return this.coordinate;\n    };\n    /**\n     * 包装配置的默认值\n     * @param option\n     */\n    CoordinateController.prototype.wrapperOption = function (option) {\n        return __assign({ type: 'rect', actions: [], cfg: {} }, option);\n    };\n    /**\n     * coordinate 实例执行 actions\n     * @params includeActions 如果没有指定，则执行全部，否则，执行指定的 action\n     */\n    CoordinateController.prototype.execActions = function (includeActions) {\n        var _this = this;\n        var actions = this.option.actions;\n        each(actions, function (action) {\n            var _a;\n            var _b = __read(action), actionName = _b[0], args = _b.slice(1);\n            var shouldExec = isNil(includeActions) ? true : includeActions.includes(actionName);\n            if (shouldExec) {\n                (_a = _this.coordinate)[actionName].apply(_a, __spreadArray([], __read(args), false));\n            }\n        });\n    };\n    return CoordinateController;\n}());\nexport default CoordinateController;\n//# sourceMappingURL=coordinate.js.map","import { Event as GEvent } from '../dependents';\n/**\n * @todo Whether it can(or necessary to) keep consistent with the structure of G.Event or directly use the structure of G.Event\n * G2 事件的事件包装类，基于 G.Event\n */\nvar Event = /** @class */ (function () {\n    function Event(view, gEvent, data) {\n        this.view = view;\n        this.gEvent = gEvent;\n        this.data = data;\n        this.type = gEvent.type;\n    }\n    /**\n     * 非交互产生的事件\n     * @param view\n     * @param type\n     * @param data\n     */\n    Event.fromData = function (view, type, data) {\n        return new Event(view, new GEvent(type, {}), data);\n    };\n    Object.defineProperty(Event.prototype, \"target\", {\n        // below props are proxy props of G.event convenient\n        /** the real trigger shape of the event */\n        get: function () {\n            // @todo G 中事件定义为 object 不正确，这里先 ignore\n            // @ts-ignore\n            return this.gEvent.target;\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(Event.prototype, \"event\", {\n        /** 获取对应的 dom 原生时间 */\n        get: function () {\n            return this.gEvent.originalEvent;\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(Event.prototype, \"x\", {\n        /** x 画布坐标 */\n        get: function () {\n            return this.gEvent.x;\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(Event.prototype, \"y\", {\n        /** y 画布坐标 */\n        get: function () {\n            return this.gEvent.y;\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(Event.prototype, \"clientX\", {\n        /** x 窗口坐标 */\n        get: function () {\n            return this.gEvent.clientX;\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(Event.prototype, \"clientY\", {\n        /** y 窗口坐标 */\n        get: function () {\n            return this.gEvent.clientY;\n        },\n        enumerable: false,\n        configurable: true\n    });\n    // end for proxy events\n    /**\n     * event string\n     * @returns string\n     */\n    Event.prototype.toString = function () {\n        return \"[Event (type=\".concat(this.type, \")]\");\n    };\n    /**\n     * clone a new event with same attributes\n     * @returns [[Event]]\n     */\n    Event.prototype.clone = function () {\n        return new Event(this.view, this.gEvent, this.data);\n    };\n    return Event;\n}());\nexport default Event;\n//# sourceMappingURL=event.js.map","/**\n * @ignore\n * G2 默认提供的 layout 函数\n * 内置布局函数处理的逻辑：\n *\n * 1. 如果 padding = 'auto'，那么自动根据组件的 direction 来计算 padding 数组\n * 2. 根据 padding 和 direction 去分配对应方向的 padding 数值\n * 3. 移动组件位置\n *\n * 前面 1，2 步骤在 view 中已经做掉了。对于组件响应式布局，可以尝试使用约束布局的方式去求解位置信息。\n * @param view\n */\nexport default function defaultLayout(view) {\n    var axis = view.getController('axis');\n    var legend = view.getController('legend');\n    var annotation = view.getController('annotation');\n    var slider = view.getController('slider');\n    var scrollbar = view.getController('scrollbar');\n    // 根据最新的 coordinate 重新布局组件\n    [axis, slider, scrollbar, legend, annotation].forEach(function (controller) {\n        if (controller) {\n            controller.layout();\n        }\n    });\n}\n//# sourceMappingURL=index.js.map","/**\n * view 中缓存 scale 的类\n */\nimport { deepMix, each, get, isNumber, last } from '@antv/util';\nimport { createScaleByField, syncScale, getDefaultCategoryScaleRange } from '../../util/scale';\n/** @ignore */\nvar ScalePool = /** @class */ (function () {\n    function ScalePool() {\n        /** 所有的 scales */\n        this.scales = new Map();\n        /** 需要同步的 scale 分组， key: scaleKeyArray */\n        this.syncScales = new Map();\n    }\n    /**\n     * 创建 scale\n     * @param field\n     * @param data\n     * @param scaleDef\n     * @param key\n     */\n    ScalePool.prototype.createScale = function (field, data, scaleDef, key) {\n        var finalScaleDef = scaleDef;\n        var cacheScaleMeta = this.getScaleMeta(key);\n        if (data.length === 0 && cacheScaleMeta) {\n            // 在更新过程中数据变为空，同时 key 对应的 scale 已存在则保持 scale 同类型\n            var cacheScale = cacheScaleMeta.scale;\n            var cacheScaleDef = {\n                type: cacheScale.type,\n            };\n            if (cacheScale.isCategory) {\n                // 如果是分类类型，保持 values\n                cacheScaleDef.values = cacheScale.values;\n            }\n            finalScaleDef = deepMix(cacheScaleDef, cacheScaleMeta.scaleDef, scaleDef);\n        }\n        var scale = createScaleByField(field, data, finalScaleDef);\n        // 缓存起来\n        this.cacheScale(scale, scaleDef, key);\n        return scale;\n    };\n    /**\n     * 同步 scale\n     */\n    ScalePool.prototype.sync = function (coordinate, theme) {\n        var _this = this;\n        // 对于 syncScales 中每一个 syncKey 下面的 scale 数组进行同步处理\n        this.syncScales.forEach(function (scaleKeys, syncKey) {\n            // min, max, values, ranges\n            var min = Number.MAX_SAFE_INTEGER;\n            var max = Number.MIN_SAFE_INTEGER;\n            var values = [];\n            // 1. 遍历求得最大最小值，values 等\n            each(scaleKeys, function (key) {\n                var scale = _this.getScale(key);\n                max = isNumber(scale.max) ? Math.max(max, scale.max) : max;\n                min = isNumber(scale.min) ? Math.min(min, scale.min) : min;\n                // 去重\n                each(scale.values, function (v) {\n                    if (!values.includes(v)) {\n                        values.push(v);\n                    }\n                });\n            });\n            // 2. 同步\n            each(scaleKeys, function (key) {\n                var scale = _this.getScale(key);\n                if (scale.isContinuous) {\n                    scale.change({\n                        min: min,\n                        max: max,\n                        values: values,\n                    });\n                }\n                else if (scale.isCategory) {\n                    var range = scale.range;\n                    var cacheScaleMeta = _this.getScaleMeta(key);\n                    // 存在 value 值，且用户没有配置 range 配置 to fix https://github.com/antvis/G2/issues/2996\n                    if (values && !get(cacheScaleMeta, ['scaleDef', 'range'])) {\n                        // 更新 range\n                        range = getDefaultCategoryScaleRange(deepMix({}, scale, {\n                            values: values,\n                        }), coordinate, theme);\n                    }\n                    scale.change({\n                        values: values,\n                        range: range,\n                    });\n                }\n            });\n        });\n    };\n    /**\n     * 缓存一个 scale\n     * @param scale\n     * @param scaleDef\n     * @param key\n     */\n    ScalePool.prototype.cacheScale = function (scale, scaleDef, key) {\n        // 1. 缓存到 scales\n        var sm = this.getScaleMeta(key);\n        // 存在则更新，同时检测类型是否一致\n        if (sm && sm.scale.type === scale.type) {\n            syncScale(sm.scale, scale);\n            sm.scaleDef = scaleDef;\n            // 更新 scaleDef\n        }\n        else {\n            sm = {\n                key: key,\n                scale: scale,\n                scaleDef: scaleDef,\n            };\n            this.scales.set(key, sm);\n        }\n        // 2. 缓存到 syncScales，构造 Record<sync, string[]> 数据结构\n        var syncKey = this.getSyncKey(sm);\n        sm.syncKey = syncKey; // 设置 sync 同步的 key\n        // 因为存在更新 scale 机制，所以在缓存之前，先从原 syncScales 中去除 sync 的缓存引用\n        this.removeFromSyncScales(key);\n        // 存在 sync 标记才进行 sync\n        if (syncKey) {\n            // 不存在这个 syncKey，则创建一个空数组\n            var scaleKeys = this.syncScales.get(syncKey);\n            if (!scaleKeys) {\n                scaleKeys = [];\n                this.syncScales.set(syncKey, scaleKeys);\n            }\n            scaleKeys.push(key);\n        }\n    };\n    /**\n     * 通过 key 获取 scale\n     * @param key\n     */\n    ScalePool.prototype.getScale = function (key) {\n        var scaleMeta = this.getScaleMeta(key);\n        if (!scaleMeta) {\n            var field = last(key.split('-'));\n            var scaleKeys = this.syncScales.get(field);\n            if (scaleKeys && scaleKeys.length) {\n                scaleMeta = this.getScaleMeta(scaleKeys[0]);\n            }\n        }\n        return scaleMeta && scaleMeta.scale;\n    };\n    /**\n     * 在 view 销毁的时候，删除 scale 实例，防止内存泄露\n     * @param key\n     */\n    ScalePool.prototype.deleteScale = function (key) {\n        var scaleMeta = this.getScaleMeta(key);\n        if (scaleMeta) {\n            var syncKey = scaleMeta.syncKey;\n            var scaleKeys = this.syncScales.get(syncKey);\n            // 移除同步的关系\n            if (scaleKeys && scaleKeys.length) {\n                var idx = scaleKeys.indexOf(key);\n                if (idx !== -1) {\n                    scaleKeys.splice(idx, 1);\n                }\n            }\n        }\n        // 删除 scale 实例\n        this.scales.delete(key);\n    };\n    /**\n     * 清空\n     */\n    ScalePool.prototype.clear = function () {\n        this.scales.clear();\n        this.syncScales.clear();\n    };\n    /**\n     * 删除 sync scale 引用\n     * @param key\n     */\n    ScalePool.prototype.removeFromSyncScales = function (key) {\n        var _this = this;\n        this.syncScales.forEach(function (scaleKeys, syncKey) {\n            var idx = scaleKeys.indexOf(key);\n            if (idx !== -1) {\n                scaleKeys.splice(idx, 1);\n                // 删除空数组值\n                if (scaleKeys.length === 0) {\n                    _this.syncScales.delete(syncKey);\n                }\n                return false; // 跳出循环\n            }\n        });\n    };\n    /**\n     * get sync key\n     * @param sm\n     */\n    ScalePool.prototype.getSyncKey = function (sm) {\n        var scale = sm.scale, scaleDef = sm.scaleDef;\n        var field = scale.field;\n        var sync = get(scaleDef, ['sync']);\n        // 如果 sync = true，则直接使用字段名作为 syncKey\n        return sync === true ? field : sync === false ? undefined : sync;\n    };\n    /**\n     * 通过 key 获取 scale\n     * @param key\n     */\n    ScalePool.prototype.getScaleMeta = function (key) {\n        return this.scales.get(key);\n    };\n    return ScalePool;\n}());\nexport { ScalePool };\n//# sourceMappingURL=scale-pool.js.map","import { __read, __spreadArray } from \"tslib\";\nimport { DIRECTION } from '../../constant';\n/** @ignore */\nvar PaddingCal = /** @class */ (function () {\n    /**\n     * 初始的 padding 数据\n     * @param top\n     * @param right\n     * @param bottom\n     * @param left\n     */\n    function PaddingCal(top, right, bottom, left) {\n        if (top === void 0) { top = 0; }\n        if (right === void 0) { right = 0; }\n        if (bottom === void 0) { bottom = 0; }\n        if (left === void 0) { left = 0; }\n        this.top = top;\n        this.right = right;\n        this.bottom = bottom;\n        this.left = left;\n    }\n    /**\n     * 使用静态方法创建一个\n     * @param top\n     * @param right\n     * @param bottom\n     * @param left\n     */\n    PaddingCal.instance = function (top, right, bottom, left) {\n        if (top === void 0) { top = 0; }\n        if (right === void 0) { right = 0; }\n        if (bottom === void 0) { bottom = 0; }\n        if (left === void 0) { left = 0; }\n        return new PaddingCal(top, right, bottom, left);\n    };\n    /**\n     * 取最大区间\n     * @param padding\n     */\n    PaddingCal.prototype.max = function (padding) {\n        var _a = __read(padding, 4), top = _a[0], right = _a[1], bottom = _a[2], left = _a[3];\n        this.top = Math.max(this.top, top);\n        this.right = Math.max(this.right, right);\n        this.bottom = Math.max(this.bottom, bottom);\n        this.left = Math.max(this.left, left);\n        return this;\n    };\n    /**\n     * 四周增加 padding\n     * @param padding\n     */\n    PaddingCal.prototype.shrink = function (padding) {\n        var _a = __read(padding, 4), top = _a[0], right = _a[1], bottom = _a[2], left = _a[3];\n        this.top += top;\n        this.right += right;\n        this.bottom += bottom;\n        this.left += left;\n        return this;\n    };\n    /**\n     * 在某一个方向增加 padding\n     * @param bbox\n     * @param direction\n     */\n    PaddingCal.prototype.inc = function (bbox, direction) {\n        var width = bbox.width, height = bbox.height;\n        switch (direction) {\n            case DIRECTION.TOP:\n            case DIRECTION.TOP_LEFT:\n            case DIRECTION.TOP_RIGHT:\n                this.top += height;\n                break;\n            case DIRECTION.RIGHT:\n            case DIRECTION.RIGHT_TOP:\n            case DIRECTION.RIGHT_BOTTOM:\n                this.right += width;\n                break;\n            case DIRECTION.BOTTOM:\n            case DIRECTION.BOTTOM_LEFT:\n            case DIRECTION.BOTTOM_RIGHT:\n                this.bottom += height;\n                break;\n            case DIRECTION.LEFT:\n            case DIRECTION.LEFT_TOP:\n            case DIRECTION.LEFT_BOTTOM:\n                this.left += width;\n                break;\n            default:\n                break;\n        }\n        return this;\n    };\n    /**\n     * 获得最终的 padding\n     */\n    PaddingCal.prototype.getPadding = function () {\n        return [this.top, this.right, this.bottom, this.left];\n    };\n    /**\n     * clone 一个 padding cal\n     */\n    PaddingCal.prototype.clone = function () {\n        return new (PaddingCal.bind.apply(PaddingCal, __spreadArray([void 0], __read(this.getPadding()), false)))();\n    };\n    return PaddingCal;\n}());\nexport { PaddingCal };\n//# sourceMappingURL=padding-cal.js.map","import { __read, __spreadArray } from \"tslib\";\nimport { each } from '@antv/util';\nimport { COMPONENT_TYPE } from '../../constant';\nimport { BBox } from '../../util/bbox';\nimport { isAutoPadding, parsePadding } from '../../util/padding';\nimport { PaddingCal } from './padding-cal';\n/**\n * @ignore\n * 根据 view 中的组件，计算实际的 padding 数值\n * @param view\n */\nexport function calculatePadding(view) {\n    var padding = view.padding;\n    // 如果不是 auto padding，那么直接解析之后返回\n    if (!isAutoPadding(padding)) {\n        return new (PaddingCal.bind.apply(PaddingCal, __spreadArray([void 0], __read(parsePadding(padding)), false)))();\n    }\n    // 是 auto padding，根据组件的情况，来计算 padding\n    var viewBBox = view.viewBBox;\n    var paddingCal = new PaddingCal();\n    var axisComponents = [];\n    var paddingComponents = [];\n    var otherComponents = [];\n    each(view.getComponents(), function (co) {\n        var type = co.type;\n        if (type === COMPONENT_TYPE.AXIS) {\n            axisComponents.push(co);\n        }\n        else if ([COMPONENT_TYPE.LEGEND, COMPONENT_TYPE.SLIDER, COMPONENT_TYPE.SCROLLBAR].includes(type)) {\n            paddingComponents.push(co);\n        }\n        else if (type !== COMPONENT_TYPE.GRID && type !== COMPONENT_TYPE.TOOLTIP) {\n            otherComponents.push(co);\n        }\n    });\n    // 进行坐标轴布局，应该是取 padding 的并集，而不是进行相加\n    each(axisComponents, function (co) {\n        var component = co.component;\n        var bboxObject = component.getLayoutBBox();\n        var componentBBox = new BBox(bboxObject.x, bboxObject.y, bboxObject.width, bboxObject.height);\n        var exceed = componentBBox.exceed(viewBBox);\n        // 在对组件分组之后，先对 axis 进行处理，然后取最大的超出即可。\n        paddingCal.max(exceed);\n    });\n    // 有 padding 的组件布局\n    each(paddingComponents, function (co) {\n        var component = co.component, direction = co.direction;\n        var bboxObject = component.getLayoutBBox();\n        var componentPadding = component.get('padding');\n        var componentBBox = new BBox(bboxObject.x, bboxObject.y, bboxObject.width, bboxObject.height).expand(componentPadding);\n        // 按照方向计算 padding\n        paddingCal.inc(componentBBox, direction);\n    });\n    // 其他组件布局\n    each(otherComponents, function (co) {\n        var component = co.component, direction = co.direction;\n        var bboxObject = component.getLayoutBBox();\n        var componentBBox = new BBox(bboxObject.x, bboxObject.y, bboxObject.width, bboxObject.height);\n        // 按照方向计算 padding\n        paddingCal.inc(componentBBox, direction);\n    });\n    return paddingCal;\n}\n//# sourceMappingURL=auto.js.map","/**\n * 默认的 syncViewPadding 逻辑\n * @param chart\n * @param views\n * @param PC: PaddingCalCtor\n */\nexport function defaultSyncViewPadding(chart, views, PC) {\n    var syncPadding = PC.instance();\n    // 所有的 view 的 autoPadding 指向同一个引用\n    views.forEach(function (v) {\n        v.autoPadding = syncPadding.max(v.autoPadding.getPadding());\n    });\n}\n//# sourceMappingURL=sync-view-padding.js.map","import { __assign, __extends, __read, __rest, __spreadArray } from \"tslib\";\nimport { clone, deepMix, each, filter, find, flatten, get, isBoolean, isFunction, isNil, isObject, isString, isUndefined, mix, remove, set, size, uniqueId, isEqual, isPlainObject, reduce, } from '@antv/util';\nimport { GROUP_Z_INDEX, LAYER, PLOT_EVENTS, VIEW_LIFE_CIRCLE } from '../constant';\nimport Base from '../base';\nimport { getFacet } from '../facet';\nimport { createInteraction } from '../interaction';\nimport { getTheme } from '../theme';\nimport { BBox } from '../util/bbox';\nimport { getCoordinateClipCfg, isPointInCoordinate } from '../util/coordinate';\nimport { uniq } from '../util/helper';\nimport { findDataByPoint } from '../util/tooltip';\nimport { parsePadding } from '../util/padding';\nimport { getDefaultCategoryScaleRange } from '../util/scale';\nimport { createTheme } from '../theme/util';\nimport { getComponentController, getComponentControllerNames } from './controller';\nimport CoordinateController from './controller/coordinate';\nimport Event from './event';\nimport defaultLayout from './layout';\nimport { ScalePool } from './util/scale-pool';\nimport { PaddingCal } from './layout/padding-cal';\nimport { calculatePadding } from './layout/auto';\nimport { defaultSyncViewPadding } from './util/sync-view-padding';\n/**\n * G2 视图 View 类\n */\nvar View = /** @class */ (function (_super) {\n    __extends(View, _super);\n    function View(props) {\n        var _this = _super.call(this, { visible: props.visible }) || this;\n        /** 所有的子 view。 */\n        _this.views = [];\n        /** 所有的 geometry 实例。 */\n        _this.geometries = [];\n        /** 所有的组件 controllers。 */\n        _this.controllers = [];\n        /** 所有的 Interaction 实例。 */\n        _this.interactions = {};\n        /** 是否对超出坐标系范围的 Geometry 进行剪切 */\n        _this.limitInPlot = false;\n        // 配置信息存储\n        _this.options = {\n            data: [],\n            animate: true, // 默认开启动画\n        }; // 初始化为空\n        /** 配置开启的组件插件，默认为全局配置的组件。 */\n        _this.usedControllers = getComponentControllerNames();\n        /** 所有的 scales */\n        _this.scalePool = new ScalePool();\n        /** 布局函数 */\n        _this.layoutFunc = defaultLayout;\n        /** 当前鼠标是否在 plot 内（CoordinateBBox） */\n        _this.isPreMouseInPlot = false;\n        /** 默认标识位，用于判定数据是否更新 */\n        _this.isDataChanged = false;\n        /** 用于判断坐标系范围是否发生变化的标志位 */\n        _this.isCoordinateChanged = false;\n        /** 从当前这个 view 创建的 scale key */\n        _this.createdScaleKeys = new Map();\n        _this.onCanvasEvent = function (evt) {\n            var name = evt.name;\n            if (!name.includes(':')) {\n                // 非委托事件\n                var e = _this.createViewEvent(evt);\n                // 处理 plot 事件\n                _this.doPlotEvent(e);\n                _this.emit(name, e);\n            }\n        };\n        /**\n         * 触发事件之后\n         * @param evt\n         */\n        _this.onDelegateEvents = function (evt) {\n            // 阻止继续冒泡，防止重复事件触发\n            // evt.preventDefault();\n            var name = evt.name;\n            if (!name.includes(':')) {\n                return;\n            }\n            // 事件在 view 嵌套中冒泡（暂不提供阻止冒泡的机制）\n            var e = _this.createViewEvent(evt);\n            // 包含有基本事件、组合事件\n            _this.emit(name, e);\n            // const currentTarget = evt.currentTarget as IShape;\n            // const inheritNames = currentTarget.get('inheritNames');\n            // if (evt.delegateObject || inheritNames) {\n            //   const events = this.getEvents();\n            //   each(inheritNames, (subName) => {\n            //     const eventName = `${subName}:${type}`;\n            //     if (events[eventName]) {\n            //       this.emit(eventName, e);\n            //     }\n            //   });\n            // }\n        };\n        var _a = props.id, id = _a === void 0 ? uniqueId('view') : _a, parent = props.parent, canvas = props.canvas, backgroundGroup = props.backgroundGroup, middleGroup = props.middleGroup, foregroundGroup = props.foregroundGroup, _b = props.region, region = _b === void 0 ? { start: { x: 0, y: 0 }, end: { x: 1, y: 1 } } : _b, padding = props.padding, appendPadding = props.appendPadding, theme = props.theme, options = props.options, limitInPlot = props.limitInPlot, syncViewPadding = props.syncViewPadding;\n        _this.parent = parent;\n        _this.canvas = canvas;\n        _this.backgroundGroup = backgroundGroup;\n        _this.middleGroup = middleGroup;\n        _this.foregroundGroup = foregroundGroup;\n        _this.region = region;\n        _this.padding = padding;\n        _this.appendPadding = appendPadding;\n        // 接受父 view 传入的参数\n        _this.options = __assign(__assign({}, _this.options), options);\n        _this.limitInPlot = limitInPlot;\n        _this.id = id;\n        _this.syncViewPadding = syncViewPadding;\n        // 初始化 theme\n        _this.themeObject = isObject(theme) ? deepMix({}, getTheme('default'), createTheme(theme)) : getTheme(theme);\n        _this.init();\n        return _this;\n    }\n    /**\n     * 设置 layout 布局函数\n     * @param layout 布局函数\n     * @returns void\n     */\n    View.prototype.setLayout = function (layout) {\n        this.layoutFunc = layout;\n    };\n    /**\n     * 生命周期：初始化\n     * @returns voids\n     */\n    View.prototype.init = function () {\n        // 计算画布的 viewBBox\n        this.calculateViewBBox();\n        // 事件委托机制\n        this.initEvents();\n        // 初始化组件 controller\n        this.initComponentController();\n        this.initOptions();\n    };\n    /**\n     * 生命周期：渲染流程，渲染过程需要处理数据更新的情况。\n     * render 函数仅仅会处理 view 和子 view。\n     * @param isUpdate 是否触发更新流程。\n     * @param params render 事件参数\n     */\n    View.prototype.render = function (isUpdate, payload) {\n        if (isUpdate === void 0) { isUpdate = false; }\n        this.emit(VIEW_LIFE_CIRCLE.BEFORE_RENDER, Event.fromData(this, VIEW_LIFE_CIRCLE.BEFORE_RENDER, payload));\n        // 递归渲染\n        this.paint(isUpdate);\n        this.emit(VIEW_LIFE_CIRCLE.AFTER_RENDER, Event.fromData(this, VIEW_LIFE_CIRCLE.AFTER_RENDER, payload));\n        if (this.visible === false) {\n            // 用户在初始化的时候声明 visible: false\n            this.changeVisible(false);\n        }\n    };\n    /**\n     * 生命周期：清空图表上所有的绘制内容，但是不销毁图表，chart 仍可使用。\n     * @returns void\n     */\n    View.prototype.clear = function () {\n        var _this = this;\n        this.emit(VIEW_LIFE_CIRCLE.BEFORE_CLEAR);\n        // 1. 清空缓存和计算数据\n        this.filteredData = [];\n        this.coordinateInstance = undefined;\n        this.isDataChanged = false; // 复位\n        this.isCoordinateChanged = false; // 复位\n        // 2. 清空 geometries\n        var geometries = this.geometries;\n        for (var i = 0; i < geometries.length; i++) {\n            geometries[i].clear();\n            // view 中使用 geometry 的时候，还需要清空它的容器，不然下一次 chart.geometry() 的时候，又创建了一个，导致泄露， #2799。\n            geometries[i].container.remove(true);\n            geometries[i].labelsContainer.remove(true);\n        }\n        this.geometries = [];\n        // 3. 清空 controllers\n        var controllers = this.controllers;\n        for (var i = 0; i < controllers.length; i++) {\n            if (controllers[i].name === 'annotation') {\n                // 需要清空配置项\n                controllers[i].clear(true);\n            }\n            else {\n                controllers[i].clear();\n            }\n        }\n        // 4. 删除 scale 缓存\n        this.createdScaleKeys.forEach(function (v, k) {\n            _this.getRootView().scalePool.deleteScale(k);\n        });\n        this.createdScaleKeys.clear();\n        // 递归处理子 view\n        var views = this.views;\n        for (var i = 0; i < views.length; i++) {\n            views[i].clear();\n        }\n        this.emit(VIEW_LIFE_CIRCLE.AFTER_CLEAR);\n    };\n    /**\n     * 生命周期：销毁，完全无法使用。\n     * @returns void\n     */\n    View.prototype.destroy = function () {\n        // 销毁前事件，销毁之后已经没有意义了，所以不抛出事件\n        this.emit(VIEW_LIFE_CIRCLE.BEFORE_DESTROY);\n        var interactions = this.interactions;\n        // 销毁 interactions\n        each(interactions, function (interaction) {\n            if (interaction) {\n                // 有可能已经销毁，设置了 undefined\n                interaction.destroy();\n            }\n        });\n        this.clear();\n        // 销毁 controller 中的组件\n        var controllers = this.controllers;\n        for (var i = 0, len = controllers.length; i < len; i++) {\n            var controller = controllers[i];\n            controller.destroy();\n        }\n        this.backgroundGroup.remove(true);\n        this.middleGroup.remove(true);\n        this.foregroundGroup.remove(true);\n        _super.prototype.destroy.call(this);\n    };\n    /* end 生命周期函数 */\n    /**\n     * 显示或者隐藏整个 view。\n     * @param visible 是否可见\n     * @returns View\n     */\n    View.prototype.changeVisible = function (visible) {\n        _super.prototype.changeVisible.call(this, visible);\n        var geometries = this.geometries;\n        for (var i = 0, len = geometries.length; i < len; i++) {\n            var geometry = geometries[i];\n            geometry.changeVisible(visible);\n        }\n        var controllers = this.controllers;\n        for (var i = 0, len = controllers.length; i < len; i++) {\n            var controller = controllers[i];\n            controller.changeVisible(visible);\n        }\n        this.foregroundGroup.set('visible', visible);\n        this.middleGroup.set('visible', visible);\n        this.backgroundGroup.set('visible', visible);\n        // group.set('visible', visible) 不会触发自动刷新\n        this.getCanvas().draw();\n        return this;\n    };\n    /**\n     * 装载数据源。\n     *\n     * ```ts\n     * view.data([{ city: '杭州', sale: 100 }, { city: '上海', sale: 110 } ]);\n     * ```\n     *\n     * @param data 数据源，json 数组。\n     * @returns View\n     */\n    View.prototype.data = function (data) {\n        set(this.options, 'data', data);\n        this.isDataChanged = true;\n        return this;\n    };\n    /**\n     * @deprecated\n     * This method will be removed at G2 V4.1. Replaced by {@link #data(data)}\n     */\n    View.prototype.source = function (data) {\n        console.warn('This method will be removed at G2 V4.1. Please use chart.data() instead.');\n        return this.data(data);\n    };\n    /**\n     * 设置数据筛选规则。\n     *\n     * ```ts\n     * view.filter('city', (value: any, datum: Datum) => value !== '杭州');\n     *\n     * // 删除 'city' 字段对应的筛选规则。\n     * view.filter('city', null);\n     * ```\n     *\n     * @param field 数据字段\n     * @param condition 筛选规则\n     * @returns View\n     */\n    View.prototype.filter = function (field, condition) {\n        if (isFunction(condition)) {\n            set(this.options, ['filters', field], condition);\n            return this;\n        }\n        // condition 为空，则表示删除过滤条件\n        if (!condition && get(this.options, ['filters', field])) {\n            delete this.options.filters[field];\n        }\n        return this;\n    };\n    View.prototype.axis = function (field, axisOption) {\n        if (isBoolean(field)) {\n            set(this.options, ['axes'], field);\n        }\n        else {\n            set(this.options, ['axes', field], axisOption);\n        }\n        return this;\n    };\n    View.prototype.legend = function (field, legendOption) {\n        if (isBoolean(field)) {\n            set(this.options, ['legends'], field);\n        }\n        else if (isString(field)) {\n            set(this.options, ['legends', field], legendOption);\n            if (isPlainObject(legendOption) && (legendOption === null || legendOption === void 0 ? void 0 : legendOption.selected)) {\n                set(this.options, ['filters', field], function (name) {\n                    var _a;\n                    return (_a = legendOption === null || legendOption === void 0 ? void 0 : legendOption.selected[name]) !== null && _a !== void 0 ? _a : true;\n                });\n            }\n        }\n        else {\n            // 设置全局的 legend 配置\n            set(this.options, ['legends'], field);\n        }\n        return this;\n    };\n    View.prototype.scale = function (field, scaleOption) {\n        var _this = this;\n        if (isString(field)) {\n            set(this.options, ['scales', field], scaleOption);\n        }\n        else if (isObject(field)) {\n            each(field, function (v, k) {\n                set(_this.options, ['scales', k], v);\n            });\n        }\n        return this;\n    };\n    /**\n     * tooltip 提示信息配置。\n     *\n     * ```ts\n     * view.tooltip(false); // 关闭 tooltip\n     *\n     * view.tooltip({\n     *   shared: true\n     * });\n     * ```\n     *\n     * @param cfg Tooltip 配置，更详细的配置项参考：https://github.com/antvis/component#tooltip\n     * @returns View\n     */\n    View.prototype.tooltip = function (cfg) {\n        set(this.options, 'tooltip', cfg);\n        return this;\n    };\n    /**\n     * 辅助标记配置。\n     *\n     * ```ts\n     * view.annotation().line({\n     *   start: ['min', 85],\n     *   end: ['max', 85],\n     *   style: {\n     *     stroke: '#595959',\n     *     lineWidth: 1,\n     *     lineDash: [3, 3],\n     *   },\n     * });\n     * ```\n     * 更详细的配置项：https://github.com/antvis/component#annotation\n     * @returns [[Annotation]]\n     */\n    View.prototype.annotation = function () {\n        return this.getController('annotation');\n    };\n    /**\n     * @deprecated\n     * This method will be removed at G2 V4.1. Replaced by {@link #guide()}\n     */\n    View.prototype.guide = function () {\n        console.warn('This method will be removed at G2 V4.1. Please use chart.annotation() instead.');\n        return this.annotation();\n    };\n    View.prototype.coordinate = function (type, coordinateCfg) {\n        // 提供语法糖，使用更简单\n        if (isString(type)) {\n            set(this.options, 'coordinate', { type: type, cfg: coordinateCfg });\n        }\n        else {\n            set(this.options, 'coordinate', type);\n        }\n        // 更新 coordinate 配置\n        this.coordinateController.update(this.options.coordinate);\n        return this.coordinateController;\n    };\n    /**\n     * @deprecated\n     * This method will be removed at G2 V4.1. Replaced by {@link #coordinate()}\n     */\n    View.prototype.coord = function (type, coordinateCfg) {\n        console.warn('This method will be removed at G2 V4.1. Please use chart.coordinate() instead.');\n        // @ts-ignore\n        return this.coordinate(type, coordinateCfg);\n    };\n    /**\n     * view 分面绘制。\n     *\n     * ```ts\n     * view.facet('rect', {\n     *   rowField: 'province',\n     *   columnField: 'category',\n     *   eachView: (innerView: View, facet?: FacetData) => {\n     *     innerView.line().position('city*sale');\n     *   },\n     * });\n     * ```\n     *\n     * @param type 分面类型\n     * @param cfg 分面配置， [[FacetCfgMap]]\n     * @returns View\n     */\n    View.prototype.facet = function (type, cfg) {\n        // 先销毁掉之前的分面\n        if (this.facetInstance) {\n            this.facetInstance.destroy();\n        }\n        // 创建新的分面\n        var Ctor = getFacet(type);\n        if (!Ctor) {\n            throw new Error(\"facet '\".concat(type, \"' is not exist!\"));\n        }\n        this.facetInstance = new Ctor(this, __assign(__assign({}, cfg), { type: type }));\n        return this;\n    };\n    /*\n     * 开启或者关闭动画。\n     *\n     * ```ts\n     * view.animate(false);\n     * ```\n     *\n     * @param status 动画状态，true 表示开始，false 表示关闭\n     * @returns View\n     */\n    View.prototype.animate = function (status) {\n        set(this.options, 'animate', status);\n        return this;\n    };\n    /**\n     * 更新配置项，用于配置项式声明。\n     * @param options 配置项\n     */\n    View.prototype.updateOptions = function (options) {\n        this.clear(); // 清空\n        mix(this.options, options);\n        // 需要把已存在的 view 销毁，否则会重复创建\n        // 目前针对配置项还没有特别好的 view 更新机制，为了不影响主流流程，所以在这里直接销毁\n        this.views.forEach(function (view) { return view.destroy(); });\n        this.views = [];\n        this.initOptions();\n        // 初始化坐标系大小，保证 padding 计算正确\n        this.coordinateBBox = this.viewBBox;\n        return this;\n    };\n    /**\n     * 往 `view.options` 属性中存储配置项。\n     * @param name 属性名称\n     * @param opt 属性值\n     * @returns view\n     */\n    View.prototype.option = function (name, opt) {\n        // 对于内置的 option，避免覆盖。\n        // name 在原型上，说明可能是内置 API，存在 option 被覆盖的风险，不处理\n        if (View.prototype[name]) {\n            throw new Error(\"Can't use built in variable name \\\"\".concat(name, \"\\\", please change another one.\"));\n        }\n        // 存入到 option 中\n        set(this.options, name, opt);\n        return this;\n    };\n    /**\n     * 设置主题。\n     *\n     * ```ts\n     * view.theme('dark'); // 'dark' 需要事先通过 `registerTheme()` 接口注册完成\n     *\n     * view.theme({ defaultColor: 'red' });\n     * ```\n     *\n     * @param theme 主题名或者主题配置\n     * @returns View\n     */\n    View.prototype.theme = function (theme) {\n        this.themeObject = isObject(theme) ? deepMix({}, this.themeObject, createTheme(theme)) : getTheme(theme);\n        return this;\n    };\n    /* end 一系列传入配置的 API */\n    /**\n     * Call the interaction based on the interaction name\n     *\n     * ```ts\n     * view.interaction('my-interaction', { extra: 'hello world' });\n     * ```\n     * 详细文档可以参考：https://g2.antv.vision/zh/docs/api/general/interaction\n     * @param name interaction name\n     * @param cfg interaction config\n     * @returns\n     */\n    View.prototype.interaction = function (name, cfg) {\n        var existInteraction = this.interactions[name];\n        // 存在则先销毁已有的\n        if (existInteraction) {\n            existInteraction.destroy();\n        }\n        // 新建交互实例\n        var interaction = createInteraction(name, this, cfg);\n        if (interaction) {\n            interaction.init();\n            this.interactions[name] = interaction;\n        }\n        return this;\n    };\n    /**\n     * 移除当前 View 的 interaction\n     * ```ts\n     * view.removeInteraction('my-interaction');\n     * ```\n     * @param name interaction name\n     */\n    View.prototype.removeInteraction = function (name) {\n        var existInteraction = this.interactions[name];\n        // 存在则先销毁已有的\n        if (existInteraction) {\n            existInteraction.destroy();\n            this.interactions[name] = undefined;\n        }\n    };\n    /**\n     * 修改数据，数据更新逻辑，数据更新仅仅影响当前这一层的 view\n     *\n     * ```ts\n     * view.changeData([{ city: '北京', sale: '200' }]);\n     * ```\n     *\n     * @param data\n     * @returns void\n     */\n    View.prototype.changeData = function (data) {\n        this.isDataChanged = true;\n        this.emit(VIEW_LIFE_CIRCLE.BEFORE_CHANGE_DATA, Event.fromData(this, VIEW_LIFE_CIRCLE.BEFORE_CHANGE_DATA, null));\n        // 1. 保存数据\n        this.data(data);\n        // 2. 渲染\n        this.paint(true);\n        // 3. 遍历子 view 进行 change data\n        var views = this.views;\n        for (var i = 0, len = views.length; i < len; i++) {\n            var view = views[i];\n            // FIXME 子 view 有自己的数据的情况，该如何处理？\n            view.changeData(data);\n        }\n        this.emit(VIEW_LIFE_CIRCLE.AFTER_CHANGE_DATA, Event.fromData(this, VIEW_LIFE_CIRCLE.AFTER_CHANGE_DATA, null));\n    };\n    /* View 管理相关的 API */\n    /**\n     * 创建子 view\n     *\n     * ```ts\n     * const innerView = view.createView({\n     *   start: { x: 0, y: 0 },\n     *   end: { x: 0.5, y: 0.5 },\n     *   padding: 8,\n     * });\n     * ```\n     *\n     * @param cfg\n     * @returns View\n     */\n    View.prototype.createView = function (cfg) {\n        // 将会在 4.1 版本中移除递归嵌套 view，仅仅只允许 chart - view 两层。\n        // 这个 API 理论上用户量不多，所以暂时不发大版本，所以先暂时打一个 warning。\n        if (this.parent && this.parent.parent) {\n            // 存在 3 层 结构了\n            console.warn('The view nesting recursive feature will be removed at G2 V4.1. Please avoid to use it.');\n        }\n        // 子 view 共享 options 配置数据\n        var sharedOptions = {\n            data: this.options.data,\n            scales: clone(this.options.scales),\n            axes: clone(this.options.axes),\n            coordinate: clone(this.coordinateController.getOption()),\n            tooltip: clone(this.options.tooltip),\n            legends: clone(this.options.legends),\n            animate: this.options.animate,\n            visible: this.visible,\n        };\n        var v = new View(__assign(__assign({ parent: this, canvas: this.canvas, \n            // 子 view 共用三层 group\n            backgroundGroup: this.backgroundGroup.addGroup({ zIndex: GROUP_Z_INDEX.BG }), middleGroup: this.middleGroup.addGroup({ zIndex: GROUP_Z_INDEX.MID }), foregroundGroup: this.foregroundGroup.addGroup({ zIndex: GROUP_Z_INDEX.FORE }), theme: this.themeObject, padding: this.padding }, cfg), { options: __assign(__assign({}, sharedOptions), get(cfg, 'options', {})) }));\n        this.views.push(v);\n        return v;\n    };\n    /**\n     * @deprecated\n     * This method will be removed at G2 V4.1. Replaced by {@link #createView()}\n     */\n    View.prototype.view = function (cfg) {\n        console.warn('This method will be removed at G2 V4.1. Please use chart.createView() instead.');\n        return this.createView(cfg);\n    };\n    /**\n     * 删除一个子 view\n     * @param view\n     * @return removedView\n     */\n    View.prototype.removeView = function (view) {\n        var removedView = remove(this.views, function (v) { return v === view; })[0];\n        if (removedView) {\n            removedView.destroy();\n        }\n        return removedView;\n    };\n    /* end View 管理相关的 API */\n    // 一些 get 方法\n    /**\n     * 获取当前坐标系实例。\n     * @returns [[Coordinate]]\n     */\n    View.prototype.getCoordinate = function () {\n        return this.coordinateInstance;\n    };\n    /**\n     * 获取当前 view 的主题配置。\n     * @returns themeObject\n     */\n    View.prototype.getTheme = function () {\n        return this.themeObject;\n    };\n    /**\n     * 获得 x 轴字段的 scale 实例。\n     * @returns view 中 Geometry 对于的 x scale\n     */\n    View.prototype.getXScale = function () {\n        // 拿第一个 Geometry 的 X scale\n        // 隐藏逻辑：一个 view 中的 Geometry 必须 x 字段一致\n        var g = this.geometries[0];\n        return g ? g.getXScale() : null;\n    };\n    /**\n     * 获取 y 轴字段的 scales 实例。\n     * @returns view 中 Geometry 对于的 y scale 数组\n     */\n    View.prototype.getYScales = function () {\n        // 拿到所有的 Geometry 的 Y scale，然后去重\n        var tmpMap = {};\n        var yScales = [];\n        this.geometries.forEach(function (g) {\n            var yScale = g.getYScale();\n            var field = yScale.field;\n            if (!tmpMap[field]) {\n                tmpMap[field] = true;\n                yScales.push(yScale);\n            }\n        });\n        return yScales;\n    };\n    /**\n     * 获取 x 轴或者 y 轴对应的所有 scale 实例。\n     * @param dimType x | y\n     * @returns x 轴或者 y 轴对应的所有 scale 实例。\n     */\n    View.prototype.getScalesByDim = function (dimType) {\n        var geometries = this.geometries;\n        var scales = {};\n        for (var i = 0, len = geometries.length; i < len; i++) {\n            var geometry = geometries[i];\n            var scale = dimType === 'x' ? geometry.getXScale() : geometry.getYScale();\n            if (scale && !scales[scale.field]) {\n                scales[scale.field] = scale;\n            }\n        }\n        return scales;\n    };\n    /**\n     * 根据字段名去获取 scale 实例。\n     * @param field 数据字段名称\n     * @param key id\n     */\n    View.prototype.getScale = function (field, key) {\n        var defaultKey = key ? key : this.getScaleKey(field);\n        // 调用根节点 view 的方法获取\n        return this.getRootView().scalePool.getScale(defaultKey);\n    };\n    /**\n     * @deprecated\n     * This method will be removed at G2 V4.1. Please use `getScale`.\n     */\n    View.prototype.getScaleByField = function (field, key) {\n        return this.getScale(field, key);\n    };\n    /**\n     * 返回所有配置信息。\n     * @returns 所有的 view API 配置。\n     */\n    View.prototype.getOptions = function () {\n        return this.options;\n    };\n    /**\n     * 获取 view 的数据（过滤后的数据）。\n     * @returns 处理过滤器之后的数据。\n     */\n    View.prototype.getData = function () {\n        return this.filteredData;\n    };\n    /**\n     * 获取原始数据\n     * @returns 传入 G2 的原始数据\n     */\n    View.prototype.getOriginalData = function () {\n        return this.options.data;\n    };\n    /**\n     * 获取布局后的边距 padding\n     * @returns\n     */\n    View.prototype.getPadding = function () {\n        return this.autoPadding.getPadding();\n    };\n    /**\n     * 获取当前 view 有的 geometries\n     * @returns\n     */\n    View.prototype.getGeometries = function () {\n        return this.geometries;\n    };\n    /**\n     * 获取 view 中的所有 geome\n     */\n    View.prototype.getElements = function () {\n        return reduce(this.geometries, function (elements, geometry) {\n            return elements.concat(geometry.getElements());\n        }, []);\n    };\n    /**\n     * 根据一定的规则查找 Geometry 的 Elements。\n     *\n     * ```typescript\n     * getElementsBy((element) => {\n     *   const data = element.getData();\n     *\n     *   return data.a === 'a';\n     * });\n     * ```\n     *\n     * @param condition 定义查找规则的回调函数。\n     * @returns\n     */\n    View.prototype.getElementsBy = function (condition) {\n        return this.getElements().filter(function (el) { return condition(el); });\n    };\n    /**\n     * 获得绘制的层级 group。\n     * @param layer 层级名称。\n     * @returns 对应层级的 Group。\n     */\n    View.prototype.getLayer = function (layer) {\n        return layer === LAYER.BG\n            ? this.backgroundGroup\n            : layer === LAYER.MID\n                ? this.middleGroup\n                : layer === LAYER.FORE\n                    ? this.foregroundGroup\n                    : this.foregroundGroup;\n    };\n    /**\n     * 对外暴露方法，判断一个点是否在绘图区域（即坐标系范围）内部。\n     * @param point 坐标点\n     */\n    View.prototype.isPointInPlot = function (point) {\n        return isPointInCoordinate(this.getCoordinate(), point);\n    };\n    /**\n     * 获得所有的 legend 对应的 attribute 实例。\n     * @returns 维度字段的 Attribute 数组\n     */\n    View.prototype.getLegendAttributes = function () {\n        return flatten(this.geometries.map(function (g) { return g.getGroupAttributes(); }));\n    };\n    /**\n     * 获取所有的分组字段的 scale 实例。\n     * @returns 获得分组字段的 scale 实例数组。\n     */\n    View.prototype.getGroupScales = function () {\n        // 拿到所有的 Geometry 的 分组字段 scale，然后打平去重\n        var scales = this.geometries.map(function (g) { return g.getGroupScales(); });\n        return uniq(flatten(scales));\n    };\n    /**\n     * 获取 G.Canvas 实例。\n     * @returns G.Canvas 画布实例。\n     */\n    View.prototype.getCanvas = function () {\n        return this.getRootView().canvas;\n    };\n    /**\n     * 获得根节点 view。\n     */\n    View.prototype.getRootView = function () {\n        var v = this;\n        while (true) {\n            if (v.parent) {\n                v = v.parent;\n                continue;\n            }\n            break;\n        }\n        return v;\n    };\n    /**\n     * 获取该数据在可视化后，对应的画布坐标点。\n     * @param data 原始数据记录\n     * @returns 对应的画布坐标点\n     */\n    View.prototype.getXY = function (data) {\n        var coordinate = this.getCoordinate();\n        var xScales = this.getScalesByDim('x');\n        var yScales = this.getScalesByDim('y');\n        var x;\n        var y;\n        each(data, function (value, key) {\n            if (xScales[key]) {\n                x = xScales[key].scale(value);\n            }\n            if (yScales[key]) {\n                y = yScales[key].scale(value);\n            }\n        });\n        if (!isNil(x) && !isNil(y)) {\n            return coordinate.convert({ x: x, y: y });\n        }\n    };\n    /**\n     * 获取 name 对应的 controller 实例\n     * @param name\n     */\n    View.prototype.getController = function (name) {\n        return find(this.controllers, function (c) { return c.name === name; });\n    };\n    /**\n     * 显示 point 坐标点对应的 tooltip。\n     * @param point 画布坐标点\n     * @returns View\n     */\n    View.prototype.showTooltip = function (point) {\n        var tooltip = this.getController('tooltip');\n        if (tooltip) {\n            tooltip.showTooltip(point);\n        }\n        return this;\n    };\n    /**\n     * 隐藏 tooltip。\n     * @returns View\n     */\n    View.prototype.hideTooltip = function () {\n        var tooltip = this.getController('tooltip');\n        if (tooltip) {\n            tooltip.hideTooltip();\n        }\n        return this;\n    };\n    /**\n     * 将 tooltip 锁定到当前位置不能移动。\n     * @returns View\n     */\n    View.prototype.lockTooltip = function () {\n        var tooltip = this.getController('tooltip');\n        if (tooltip) {\n            tooltip.lockTooltip();\n        }\n        return this;\n    };\n    /**\n     * 将 tooltip 锁定解除。\n     * @returns View\n     */\n    View.prototype.unlockTooltip = function () {\n        var tooltip = this.getController('tooltip');\n        if (tooltip) {\n            tooltip.unlockTooltip();\n        }\n        return this;\n    };\n    /**\n     * 是否锁定 tooltip。\n     * @returns 是否锁定\n     */\n    View.prototype.isTooltipLocked = function () {\n        var tooltip = this.getController('tooltip');\n        return tooltip && tooltip.isTooltipLocked();\n    };\n    /**\n     * 获取当前 point 对应的 tooltip 数据项。\n     * @param point 坐标点\n     * @returns tooltip 数据项\n     */\n    View.prototype.getTooltipItems = function (point) {\n        var tooltip = this.getController('tooltip');\n        return tooltip ? tooltip.getTooltipItems(point) : [];\n    };\n    /**\n     * 获取逼近的点的数据集合\n     * @param point 当前坐标点\n     * @returns  数据\n     */\n    View.prototype.getSnapRecords = function (point) {\n        var geometries = this.geometries;\n        var rst = [];\n        for (var i = 0, len = geometries.length; i < len; i++) {\n            var geom = geometries[i];\n            var dataArray = geom.dataArray;\n            geom.sort(dataArray); // 先进行排序，便于 tooltip 查找\n            var record = void 0;\n            for (var j = 0, dataLen = dataArray.length; j < dataLen; j++) {\n                var data = dataArray[j];\n                record = findDataByPoint(point, data, geom);\n                if (record) {\n                    rst.push(record);\n                }\n            }\n        }\n        // 同样递归处理子 views\n        var views = this.views;\n        for (var i = 0, len = views.length; i < len; i++) {\n            var view = views[i];\n            var snapRecords = view.getSnapRecords(point);\n            rst = rst.concat(snapRecords);\n        }\n        return rst;\n    };\n    /**\n     * 获取所有的 pure component 组件，用于布局。\n     */\n    View.prototype.getComponents = function () {\n        var components = [];\n        var controllers = this.controllers;\n        for (var i = 0, len = controllers.length; i < len; i++) {\n            var controller = controllers[i];\n            components = components.concat(controller.getComponents());\n        }\n        return components;\n    };\n    /**\n     * 将 data 数据进行过滤。\n     * @param data\n     * @returns 过滤之后的数据\n     */\n    View.prototype.filterData = function (data) {\n        var filters = this.options.filters;\n        // 不存在 filters，则不需要进行数据过滤\n        if (size(filters) === 0) {\n            return data;\n        }\n        // 存在过滤器，则逐个执行过滤，过滤器之间是 与 的关系\n        return filter(data, function (datum, idx) {\n            // 所有的 filter 字段\n            var fields = Object.keys(filters);\n            // 所有的条件都通过，才算通过\n            return fields.every(function (field) {\n                var condition = filters[field];\n                // condition 返回 true，则保留\n                return condition(datum[field], datum, idx);\n            });\n        });\n    };\n    /**\n     * 对某一个字段进行过滤\n     * @param field\n     * @param data\n     */\n    View.prototype.filterFieldData = function (field, data) {\n        var filters = this.options.filters;\n        var condition = get(filters, field);\n        if (isUndefined(condition)) {\n            return data;\n        }\n        return data.filter(function (datum, idx) { return condition(datum[field], datum, idx); });\n    };\n    /**\n     * 调整 coordinate 的坐标范围。\n     */\n    View.prototype.adjustCoordinate = function () {\n        var _a = this.getCoordinate(), curStart = _a.start, curEnd = _a.end;\n        var start = this.coordinateBBox.bl;\n        var end = this.coordinateBBox.tr;\n        // 在 defaultLayoutFn 中只会在 coordinateBBox 发生变化的时候会调用 adjustCoordinate()，所以不用担心被置位\n        if (isEqual(curStart, start) && isEqual(curEnd, end)) {\n            this.isCoordinateChanged = false;\n            // 如果大小没有变化则不更新\n            return;\n        }\n        this.isCoordinateChanged = true;\n        this.coordinateInstance = this.coordinateController.adjust(start, end);\n    };\n    View.prototype.paint = function (isUpdate) {\n        this.renderDataRecursive(isUpdate);\n        // 处理 sync scale 的逻辑\n        this.syncScale();\n        this.emit(VIEW_LIFE_CIRCLE.BEFORE_PAINT);\n        // 初始化图形、组件位置，计算 padding\n        this.renderPaddingRecursive(isUpdate);\n        // 布局图形、组件\n        this.renderLayoutRecursive(isUpdate);\n        // 背景色 shape\n        this.renderBackgroundStyleShape();\n        // 最终的绘制 render\n        this.renderPaintRecursive(isUpdate);\n        this.emit(VIEW_LIFE_CIRCLE.AFTER_PAINT);\n        this.isDataChanged = false; // 渲染完毕复位\n    };\n    /**\n     * 渲染背景样式的 shape。\n     * 放到 view 中创建的原因是让使用 view 绘制图形的时候，也能够处理背景色\n     */\n    View.prototype.renderBackgroundStyleShape = function () {\n        // 只有根节点才处理\n        if (this.parent) {\n            return;\n        }\n        var background = get(this.themeObject, 'background');\n        // 配置了背景色\n        if (background) {\n            // 1. 不存在则创建\n            if (!this.backgroundStyleRectShape) {\n                this.backgroundStyleRectShape = this.backgroundGroup.addShape('rect', {\n                    attrs: {},\n                    zIndex: -1,\n                    // 背景色 shape 不设置事件捕获\n                    capture: false,\n                });\n                this.backgroundStyleRectShape.toBack();\n            }\n            // 2. 有了 shape 之后设置背景，位置（更新的时候）\n            var _a = this.viewBBox, x = _a.x, y = _a.y, width = _a.width, height = _a.height;\n            this.backgroundStyleRectShape.attr({\n                fill: background,\n                x: x,\n                y: y,\n                width: width,\n                height: height,\n            });\n        }\n        else {\n            // 没有配置背景色\n            if (this.backgroundStyleRectShape) {\n                this.backgroundStyleRectShape.remove(true);\n                this.backgroundStyleRectShape = undefined;\n            }\n        }\n    };\n    /**\n     * 递归计算每个 view 的 padding 值，coordinateBBox 和 coordinateInstance\n     * @param isUpdate\n     */\n    View.prototype.renderPaddingRecursive = function (isUpdate) {\n        // 1. 子 view 大小相对 coordinateBBox，changeSize 的时候需要重新计算\n        this.calculateViewBBox();\n        // 2. 更新 coordinate\n        this.adjustCoordinate();\n        // 3. 初始化组件 component\n        this.initComponents(isUpdate);\n        // 4. 布局计算每隔 view 的 padding 值\n        // 4.1. 自动加 auto padding -> absolute padding，并且增加 appendPadding\n        this.autoPadding = calculatePadding(this).shrink(parsePadding(this.appendPadding));\n        // 4.2. 计算出新的 coordinateBBox，更新 Coordinate\n        // 这里必须保留，原因是后面子 view 的 viewBBox 或根据 parent 的 coordinateBBox\n        this.coordinateBBox = this.viewBBox.shrink(this.autoPadding.getPadding());\n        this.adjustCoordinate();\n        // 刷新 tooltip (tooltip crosshairs 依赖 coordinate 位置)\n        var tooltipController = this.controllers.find(function (c) { return c.name === 'tooltip'; });\n        tooltipController.update();\n        // 同样递归处理子 views\n        var views = this.views;\n        for (var i = 0, len = views.length; i < len; i++) {\n            var view = views[i];\n            view.renderPaddingRecursive(isUpdate);\n        }\n    };\n    /**\n     * 递归处理 view 的布局，最终是计算各个 view 的 coordinateBBox 和 coordinateInstance\n     * @param isUpdate\n     */\n    View.prototype.renderLayoutRecursive = function (isUpdate) {\n        // 1. 同步子 view padding\n        // 根据配置获取 padding\n        var syncViewPaddingFn = this.syncViewPadding === true\n            ? defaultSyncViewPadding\n            : isFunction(this.syncViewPadding)\n                ? this.syncViewPadding\n                : undefined;\n        if (syncViewPaddingFn) {\n            syncViewPaddingFn(this, this.views, PaddingCal);\n            // 同步 padding 之后，更新 coordinate\n            this.views.forEach(function (v) {\n                v.coordinateBBox = v.viewBBox.shrink(v.autoPadding.getPadding());\n                v.adjustCoordinate();\n            });\n        }\n        // 3. 将 view 中的组件按照 view padding 移动到对应的位置\n        this.doLayout();\n        // 同样递归处理子 views\n        var views = this.views;\n        for (var i = 0, len = views.length; i < len; i++) {\n            var view = views[i];\n            view.renderLayoutRecursive(isUpdate);\n        }\n    };\n    /**\n     * 最终递归绘制组件和图形\n     * @param isUpdate\n     */\n    View.prototype.renderPaintRecursive = function (isUpdate) {\n        var middleGroup = this.middleGroup;\n        if (this.limitInPlot) {\n            var _a = getCoordinateClipCfg(this.coordinateInstance), type = _a.type, attrs = _a.attrs;\n            middleGroup.setClip({\n                type: type,\n                attrs: attrs,\n            });\n        }\n        else {\n            // 清除已有的 clip\n            middleGroup.setClip(undefined);\n        }\n        // 1. 渲染几何标记\n        this.paintGeometries(isUpdate);\n        // 2. 绘制组件\n        this.renderComponents(isUpdate);\n        // 同样递归处理子 views\n        var views = this.views;\n        for (var i = 0, len = views.length; i < len; i++) {\n            var view = views[i];\n            view.renderPaintRecursive(isUpdate);\n        }\n    };\n    // end Get 方法\n    /**\n     * 创建 scale，递归到顶层 view 去创建和缓存 scale\n     * @param field\n     * @param data\n     * @param scaleDef\n     * @param key\n     */\n    View.prototype.createScale = function (field, data, scaleDef, key) {\n        // 1. 合并 field 对应的 scaleDef，合并原则是底层覆盖顶层（就近原则）\n        var currentScaleDef = get(this.options.scales, [field]);\n        var mergedScaleDef = __assign(__assign({}, currentScaleDef), scaleDef);\n        // 2. 是否存在父 view，在则递归，否则创建\n        if (this.parent) {\n            return this.parent.createScale(field, data, mergedScaleDef, key);\n        }\n        // 3. 在根节点 view 通过 scalePool 创建\n        return this.scalePool.createScale(field, data, mergedScaleDef, key);\n    };\n    /**\n     * 递归渲染中的数据处理\n     * @param isUpdate\n     */\n    View.prototype.renderDataRecursive = function (isUpdate) {\n        // 1. 处理数据\n        this.doFilterData();\n        // 2. 创建实例\n        this.createCoordinate();\n        // 3. 初始化 Geometry\n        this.initGeometries(isUpdate);\n        // 4. 处理分面逻辑，最终都是生成子 view 和 geometry\n        this.renderFacet(isUpdate);\n        // 同样递归处理子 views\n        var views = this.views;\n        for (var i = 0, len = views.length; i < len; i++) {\n            var view = views[i];\n            view.renderDataRecursive(isUpdate);\n        }\n    };\n    /**\n     * 计算 region，计算实际的像素范围坐标\n     * @private\n     */\n    View.prototype.calculateViewBBox = function () {\n        var x;\n        var y;\n        var width;\n        var height;\n        if (this.parent) {\n            var bbox = this.parent.coordinateBBox;\n            // 存在 parent， 那么就是通过父容器大小计算\n            x = bbox.x;\n            y = bbox.y;\n            width = bbox.width;\n            height = bbox.height;\n        }\n        else {\n            // 顶层容器，从 canvas 中取值 宽高\n            x = 0;\n            y = 0;\n            width = this.canvas.get('width');\n            height = this.canvas.get('height');\n        }\n        var _a = this.region, start = _a.start, end = _a.end;\n        // 根据 region 计算当前 view 的 bbox 大小。\n        var viewBBox = new BBox(x + width * start.x, y + height * start.y, width * (end.x - start.x), height * (end.y - start.y));\n        if (!this.viewBBox || !this.viewBBox.isEqual(viewBBox)) {\n            // viewBBox 发生变化的时候进行更新\n            this.viewBBox = new BBox(x + width * start.x, y + height * start.y, width * (end.x - start.x), height * (end.y - start.y));\n        }\n        // 初始的 coordinate bbox 大小\n        this.coordinateBBox = this.viewBBox;\n    };\n    /**\n     * 初始化事件机制：G 4.0 底层内置支持 name:event 的机制，那么只要所有组件都有自己的 name 即可。\n     *\n     * G2 的事件只是获取事件委托，然后在 view 嵌套结构中，形成事件冒泡机制。\n     * 当前 view 只委托自己 view 中的 Component 和 Geometry 事件，并向上冒泡\n     * @private\n     */\n    View.prototype.initEvents = function () {\n        // 三层 group 中的 shape 事件都会通过 G 冒泡上来的\n        this.foregroundGroup.on('*', this.onDelegateEvents);\n        this.middleGroup.on('*', this.onDelegateEvents);\n        this.backgroundGroup.on('*', this.onDelegateEvents);\n        this.canvas.on('*', this.onCanvasEvent);\n    };\n    /**\n     * 初始化插件\n     */\n    View.prototype.initComponentController = function () {\n        var usedControllers = this.usedControllers;\n        for (var i = 0, len = usedControllers.length; i < len; i++) {\n            var controllerName = usedControllers[i];\n            var Ctor = getComponentController(controllerName);\n            if (Ctor) {\n                this.controllers.push(new Ctor(this));\n            }\n        }\n    };\n    View.prototype.createViewEvent = function (evt) {\n        var shape = evt.shape, name = evt.name;\n        var data = shape ? shape.get('origin') : null;\n        // 事件在 view 嵌套中冒泡（暂不提供阻止冒泡的机制）\n        var e = new Event(this, evt, data);\n        e.type = name;\n        return e;\n    };\n    /**\n     * 处理 PLOT_EVENTS\n     * plot event 需要处理所有的基础事件，并判断是否在画布中，然后再决定是否要 emit。\n     * 对于 mouseenter、mouseleave 比较特殊，需要做一下数学比较。\n     * @param e\n     */\n    View.prototype.doPlotEvent = function (e) {\n        var type = e.type, x = e.x, y = e.y;\n        var point = { x: x, y: y };\n        var ALL_EVENTS = [\n            'mousedown',\n            'mouseup',\n            'mousemove',\n            'mouseleave',\n            'mousewheel',\n            'touchstart',\n            'touchmove',\n            'touchend',\n            'touchcancel',\n            'click',\n            'dblclick',\n            'contextmenu',\n        ];\n        if (ALL_EVENTS.includes(type)) {\n            var currentInPlot = this.isPointInPlot(point);\n            var newEvent = e.clone();\n            if (currentInPlot) {\n                var TYPE = \"plot:\".concat(type); // 组合 plot 事件\n                newEvent.type = TYPE;\n                this.emit(TYPE, newEvent);\n                if (type === 'mouseleave' || type === 'touchend') {\n                    // 在plot 内部却离开画布\n                    this.isPreMouseInPlot = false;\n                }\n            }\n            // 对于 mouseenter, mouseleave 的计算处理\n            if (type === 'mousemove' || type === 'touchmove') {\n                if (this.isPreMouseInPlot && !currentInPlot) {\n                    if (type === 'mousemove') {\n                        newEvent.type = PLOT_EVENTS.MOUSE_LEAVE;\n                        this.emit(PLOT_EVENTS.MOUSE_LEAVE, newEvent);\n                    }\n                    newEvent.type = PLOT_EVENTS.LEAVE;\n                    this.emit(PLOT_EVENTS.LEAVE, newEvent);\n                }\n                else if (!this.isPreMouseInPlot && currentInPlot) {\n                    if (type === 'mousemove') {\n                        newEvent.type = PLOT_EVENTS.MOUSE_ENTER;\n                        this.emit(PLOT_EVENTS.MOUSE_ENTER, newEvent);\n                    }\n                    newEvent.type = PLOT_EVENTS.ENTER;\n                    this.emit(PLOT_EVENTS.ENTER, newEvent);\n                }\n                // 赋新的状态值\n                this.isPreMouseInPlot = currentInPlot;\n            }\n            else if (type === 'mouseleave' || type === 'touchend') {\n                // 可能不在 currentInPlot 中\n                if (this.isPreMouseInPlot) {\n                    if (type === 'mouseleave') {\n                        newEvent.type = PLOT_EVENTS.MOUSE_LEAVE;\n                        this.emit(PLOT_EVENTS.MOUSE_LEAVE, newEvent);\n                    }\n                    newEvent.type = PLOT_EVENTS.LEAVE;\n                    this.emit(PLOT_EVENTS.LEAVE, newEvent);\n                    this.isPreMouseInPlot = false;\n                }\n            }\n        }\n    };\n    // view 生命周期 —— 渲染流程\n    /**\n     * 处理筛选器，筛选数据\n     * @private\n     */\n    View.prototype.doFilterData = function () {\n        var data = this.options.data;\n        this.filteredData = this.filterData(data);\n    };\n    /**\n     * 初始化 Geometries\n     * @private\n     */\n    View.prototype.initGeometries = function (isUpdate) {\n        // 初始化图形的之前，先创建 / 更新 scales\n        this.createOrUpdateScales();\n        // 实例化 Geometry，然后 view 将所有的 scale 管理起来\n        var coordinate = this.getCoordinate();\n        var scaleDefs = get(this.options, 'scales', {});\n        var geometries = this.geometries;\n        for (var i = 0, len = geometries.length; i < len; i++) {\n            var geometry = geometries[i];\n            // 保持 scales 引用不要变化\n            geometry.scales = this.getGeometryScales();\n            var cfg = {\n                coordinate: coordinate,\n                scaleDefs: scaleDefs,\n                data: this.filteredData,\n                theme: this.themeObject,\n                isDataChanged: this.isDataChanged,\n                isCoordinateChanged: this.isCoordinateChanged,\n            };\n            if (isUpdate) {\n                // 数据发生更新\n                geometry.update(cfg);\n            }\n            else {\n                geometry.init(cfg);\n            }\n        }\n        // Geometry 初始化之后，生成了 scale，然后进行调整 scale 配置\n        this.adjustScales();\n    };\n    /**\n     * 根据 Geometry 的所有字段创建 scales\n     * 如果存在，则更新，不存在则创建\n     */\n    View.prototype.createOrUpdateScales = function () {\n        var fields = this.getScaleFields();\n        var groupedFields = this.getGroupedFields();\n        var _a = this.getOptions(), data = _a.data, _b = _a.scales, scales = _b === void 0 ? {} : _b;\n        var filteredData = this.filteredData;\n        for (var i = 0, len = fields.length; i < len; i++) {\n            var field = fields[i];\n            var scaleDef = scales[field];\n            // 调用方法，递归去创建\n            var key = this.getScaleKey(field);\n            this.createScale(field, \n            // 分组字段的 scale 使用未过滤的数据创建\n            groupedFields.includes(field) ? data : filteredData, scaleDef, key);\n            // 缓存从当前 view 创建的 scale key\n            this.createdScaleKeys.set(key, true);\n        }\n    };\n    /**\n     * 处理 scale 同步逻辑\n     */\n    View.prototype.syncScale = function () {\n        // 最终调用 root view 的\n        this.getRootView().scalePool.sync(this.getCoordinate(), this.theme);\n    };\n    /**\n     * 获得 Geometry 中的 scale 对象\n     */\n    View.prototype.getGeometryScales = function () {\n        var fields = this.getScaleFields();\n        var scales = {};\n        for (var i = 0; i < fields.length; i++) {\n            var field = fields[i];\n            scales[field] = this.getScaleByField(field);\n        }\n        return scales;\n    };\n    View.prototype.getScaleFields = function () {\n        var fields = [];\n        var tmpMap = new Map();\n        var geometries = this.geometries;\n        for (var i = 0; i < geometries.length; i++) {\n            var geometry = geometries[i];\n            var geometryScales = geometry.getScaleFields();\n            uniq(geometryScales, fields, tmpMap);\n        }\n        return fields;\n    };\n    View.prototype.getGroupedFields = function () {\n        var fields = [];\n        var tmpMap = new Map();\n        var geometries = this.geometries;\n        for (var i = 0; i < geometries.length; i++) {\n            var geometry = geometries[i];\n            var groupFields = geometry.getGroupFields();\n            uniq(groupFields, fields, tmpMap);\n        }\n        return fields;\n    };\n    /**\n     * 调整 scale 配置\n     * @private\n     */\n    View.prototype.adjustScales = function () {\n        // 调整目前包括：\n        // 分类 scale，调整 range 范围\n        this.adjustCategoryScaleRange();\n    };\n    /**\n     * 调整分类 scale 的 range，防止超出坐标系外面\n     * @private\n     */\n    View.prototype.adjustCategoryScaleRange = function () {\n        var _this = this;\n        var xyScales = __spreadArray([this.getXScale()], __read(this.getYScales()), false).filter(function (e) { return !!e; });\n        var coordinate = this.getCoordinate();\n        var scaleOptions = this.options.scales;\n        each(xyScales, function (scale) {\n            var field = scale.field, values = scale.values, isCategory = scale.isCategory, isIdentity = scale.isIdentity;\n            // 分类或者 identity 的 scale 才进行处理\n            if (isCategory || isIdentity) {\n                // 存在 value 值，且用户没有配置 range 配置\n                if (values && !get(scaleOptions, [field, 'range'])) {\n                    // 更新 range\n                    scale.range = getDefaultCategoryScaleRange(scale, coordinate, _this.theme);\n                }\n            }\n        });\n    };\n    /**\n     * 根据 options 配置、Geometry 字段配置，自动生成 components\n     * @param isUpdate 是否是更新\n     * @private\n     */\n    View.prototype.initComponents = function (isUpdate) {\n        // 先全部清空，然后 render\n        var controllers = this.controllers;\n        for (var i = 0; i < controllers.length; i++) {\n            var controller = controllers[i];\n            // 更新则走更新逻辑；否则清空载重绘\n            if (isUpdate) {\n                controller.update();\n            }\n            else {\n                controller.clear();\n                controller.render();\n            }\n        }\n    };\n    View.prototype.doLayout = function () {\n        this.layoutFunc(this);\n    };\n    /**\n     * 创建坐标系\n     * @private\n     */\n    View.prototype.createCoordinate = function () {\n        var start = this.coordinateBBox.bl;\n        var end = this.coordinateBBox.tr;\n        this.coordinateInstance = this.coordinateController.create(start, end);\n    };\n    /**\n     * 根据 options 配置自动渲染 geometry\n     * @private\n     */\n    View.prototype.paintGeometries = function (isUpdate) {\n        var doAnimation = this.options.animate;\n        // geometry 的 paint 阶段\n        var coordinate = this.getCoordinate();\n        var canvasRegion = {\n            x: this.viewBBox.x,\n            y: this.viewBBox.y,\n            minX: this.viewBBox.minX,\n            minY: this.viewBBox.minY,\n            maxX: this.viewBBox.maxX,\n            maxY: this.viewBBox.maxY,\n            width: this.viewBBox.width,\n            height: this.viewBBox.height,\n        };\n        var geometries = this.geometries;\n        for (var i = 0; i < geometries.length; i++) {\n            var geometry = geometries[i];\n            geometry.coordinate = coordinate;\n            geometry.canvasRegion = canvasRegion;\n            if (!doAnimation) {\n                // 如果 view 不执行动画，那么 view 下所有的 geometry 都不执行动画\n                geometry.animate(false);\n            }\n            geometry.paint(isUpdate);\n        }\n    };\n    /**\n     * 最后的绘制组件\n     * @param isUpdate\n     */\n    View.prototype.renderComponents = function (isUpdate) {\n        var components = this.getComponents();\n        // 先全部清空，然后 render\n        for (var i = 0; i < components.length; i++) {\n            var co = components[i];\n            co.component.render();\n        }\n    };\n    /**\n     * 渲染分面，会在其中进行数据分面，然后进行子 view 创建\n     * @param isUpdate\n     */\n    View.prototype.renderFacet = function (isUpdate) {\n        if (this.facetInstance) {\n            if (isUpdate) {\n                this.facetInstance.update();\n            }\n            else {\n                this.facetInstance.clear();\n                // 计算分面数据\n                this.facetInstance.init();\n                // 渲染组件和 views\n                this.facetInstance.render();\n            }\n        }\n    };\n    View.prototype.initOptions = function () {\n        var _this = this;\n        var _a = this.options, _b = _a.geometries, geometries = _b === void 0 ? [] : _b, _c = _a.interactions, interactions = _c === void 0 ? [] : _c, _d = _a.views, views = _d === void 0 ? [] : _d, _e = _a.annotations, annotations = _e === void 0 ? [] : _e, coordinate = _a.coordinate, events = _a.events, facets = _a.facets;\n        // 设置坐标系\n        if (this.coordinateController) {\n            // 更新 coordinate controller\n            coordinate && this.coordinateController.update(coordinate);\n        }\n        else {\n            // 创建 coordinate controller\n            this.coordinateController = new CoordinateController(coordinate);\n        }\n        // 创建 geometry 实例\n        for (var i = 0; i < geometries.length; i++) {\n            var geometryOption = geometries[i];\n            this.createGeometry(geometryOption);\n        }\n        // 创建 interactions 实例\n        for (var j = 0; j < interactions.length; j++) {\n            var interactionOption = interactions[j];\n            var type = interactionOption.type, cfg = interactionOption.cfg;\n            this.interaction(type, cfg);\n        }\n        // 创建 view 实例\n        for (var k = 0; k < views.length; k++) {\n            var viewOption = views[k];\n            this.createView(viewOption);\n        }\n        // 设置 annotation\n        var annotationComponent = this.getController('annotation');\n        for (var l = 0; l < annotations.length; l++) {\n            var annotationOption = annotations[l];\n            annotationComponent.annotation(annotationOption);\n        }\n        // 设置 events\n        if (events) {\n            each(events, function (eventCallback, eventName) {\n                _this.on(eventName, eventCallback);\n            });\n        }\n        if (facets) {\n            each(facets, function (facet) {\n                var type = facet.type, rest = __rest(facet, [\"type\"]);\n                _this.facet(type, rest);\n            });\n        }\n    };\n    View.prototype.createGeometry = function (geometryOption) {\n        var type = geometryOption.type, _a = geometryOption.cfg, cfg = _a === void 0 ? {} : _a;\n        if (this[type]) {\n            var geometry_1 = this[type](cfg);\n            each(geometryOption, function (v, k) {\n                if (isFunction(geometry_1[k])) {\n                    geometry_1[k](v);\n                }\n            });\n        }\n    };\n    /**\n     * scale key 的创建方式\n     * @param field\n     */\n    View.prototype.getScaleKey = function (field) {\n        return \"\".concat(this.id, \"-\").concat(field);\n    };\n    return View;\n}(Base));\nexport { View };\n/**\n * 注册 geometry 组件\n * @param name\n * @param Ctor\n * @returns Geometry\n */\nexport function registerGeometry(name, Ctor) {\n    // 语法糖，在 view API 上增加原型方法\n    View.prototype[name.toLowerCase()] = function (cfg) {\n        if (cfg === void 0) { cfg = {}; }\n        var props = __assign({ \n            /** 图形容器 */\n            container: this.middleGroup.addGroup(), labelsContainer: this.foregroundGroup.addGroup() }, cfg);\n        var geometry = new Ctor(props);\n        this.geometries.push(geometry);\n        return geometry;\n    };\n}\nexport default View;\n//# sourceMappingURL=view.js.map","import { __assign, __extends } from \"tslib\";\nimport { debounce, each, isString } from '@antv/util';\nimport { GROUP_Z_INDEX, VIEW_LIFE_CIRCLE } from '../constant';\nimport { getEngine } from '../engine';\nimport { createDom, getChartSize, removeDom, modifyCSS } from '../util/dom';\nimport View from './view';\n/**\n * Chart 类，是使用 G2 进行绘图的入口。\n */\nvar Chart = /** @class */ (function (_super) {\n    __extends(Chart, _super);\n    // @ts-ignore\n    function Chart(props) {\n        var _this = this;\n        var container = props.container, width = props.width, height = props.height, _a = props.autoFit, autoFit = _a === void 0 ? false : _a, padding = props.padding, appendPadding = props.appendPadding, _b = props.renderer, renderer = _b === void 0 ? 'canvas' : _b, pixelRatio = props.pixelRatio, _c = props.localRefresh, localRefresh = _c === void 0 ? true : _c, _d = props.visible, visible = _d === void 0 ? true : _d, _e = props.supportCSSTransform, supportCSSTransform = _e === void 0 ? false : _e, _f = props.defaultInteractions, defaultInteractions = _f === void 0 ? ['tooltip', 'legend-filter', 'legend-active', 'continuous-filter', 'ellipsis-text', 'axis-description'] : _f, options = props.options, limitInPlot = props.limitInPlot, theme = props.theme, syncViewPadding = props.syncViewPadding;\n        var ele = isString(container) ? document.getElementById(container) : container;\n        // 生成内部正式绘制的 div 元素\n        var wrapperElement = createDom('<div style=\"position:relative;\"></div>');\n        ele.appendChild(wrapperElement);\n        // if autoFit, use the container size, to avoid the graph render twice.\n        var size = getChartSize(ele, autoFit, width, height);\n        var G = getEngine(renderer);\n        var canvas = new G.Canvas(__assign({ container: wrapperElement, pixelRatio: pixelRatio, localRefresh: localRefresh, supportCSSTransform: supportCSSTransform }, size));\n        // 调用 view 的创建\n        _this = _super.call(this, {\n            parent: null,\n            canvas: canvas,\n            // create 3 group layers for views.\n            backgroundGroup: canvas.addGroup({ zIndex: GROUP_Z_INDEX.BG }),\n            middleGroup: canvas.addGroup({ zIndex: GROUP_Z_INDEX.MID }),\n            foregroundGroup: canvas.addGroup({ zIndex: GROUP_Z_INDEX.FORE }),\n            padding: padding,\n            appendPadding: appendPadding,\n            visible: visible,\n            options: options,\n            limitInPlot: limitInPlot,\n            theme: theme,\n            syncViewPadding: syncViewPadding,\n        }) || this;\n        /**\n         * when container size changed, change chart size props, and re-render.\n         */\n        _this.onResize = debounce(function () {\n            _this.forceFit();\n        }, 300);\n        _this.ele = ele;\n        _this.canvas = canvas;\n        _this.width = size.width;\n        _this.height = size.height;\n        _this.autoFit = autoFit;\n        _this.localRefresh = localRefresh;\n        _this.renderer = renderer;\n        _this.wrapperElement = wrapperElement;\n        // 自适应大小\n        _this.updateCanvasStyle();\n        _this.bindAutoFit();\n        _this.initDefaultInteractions(defaultInteractions);\n        return _this;\n    }\n    Chart.prototype.initDefaultInteractions = function (interactions) {\n        var _this = this;\n        each(interactions, function (interaction) {\n            _this.interaction(interaction);\n        });\n    };\n    /**\n     * 设置 WAI-ARIA 无障碍标签。如何根据图形语法自动生成 arial 内容？\n     * @param ariaOption\n     */\n    Chart.prototype.aria = function (ariaOption) {\n        var ATTR = 'aria-label';\n        if (ariaOption === false) {\n            this.ele.removeAttribute(ATTR);\n        }\n        else {\n            this.ele.setAttribute(ATTR, ariaOption.label);\n        }\n    };\n    /**\n     * 改变图表大小，同时重新渲染。\n     * @param width 图表宽度\n     * @param height 图表高度\n     * @returns\n     */\n    Chart.prototype.changeSize = function (width, height) {\n        // 如果宽高一致，那么 changeSize 不执行任何操作\n        if (this.width === width && this.height === height) {\n            return this;\n        }\n        this.emit(VIEW_LIFE_CIRCLE.BEFORE_CHANGE_SIZE);\n        this.width = width;\n        this.height = height;\n        this.canvas.changeSize(width, height);\n        // 重新渲染\n        this.render(true);\n        this.emit(VIEW_LIFE_CIRCLE.AFTER_CHANGE_SIZE);\n        return this;\n    };\n    /**\n     * 清空图表，同时清除掉 aria 配置\n     */\n    Chart.prototype.clear = function () {\n        _super.prototype.clear.call(this);\n        this.aria(false);\n    };\n    /**\n     * 销毁图表，同时解绑事件，销毁创建的 G.Canvas 实例。\n     * @returns void\n     */\n    Chart.prototype.destroy = function () {\n        _super.prototype.destroy.call(this);\n        this.unbindAutoFit();\n        this.canvas.destroy();\n        removeDom(this.wrapperElement);\n        this.wrapperElement = null;\n    };\n    /**\n     * 显示或隐藏图表\n     * @param visible 是否可见，true 表示显示，false 表示隐藏\n     * @returns\n     */\n    Chart.prototype.changeVisible = function (visible) {\n        _super.prototype.changeVisible.call(this, visible); // 需要更新 visible 变量\n        this.wrapperElement.style.display = visible ? '' : 'none';\n        return this;\n    };\n    /**\n     * 自动根据容器大小 resize 画布\n     */\n    Chart.prototype.forceFit = function () {\n        // skip if already destroyed\n        if (!this.destroyed) {\n            // 注意第二参数用 true，意思是即时 autoFit = false，forceFit() 调用之后一样是适配容器\n            var _a = getChartSize(this.ele, true, this.width, this.height), width = _a.width, height = _a.height;\n            this.changeSize(width, height);\n        }\n    };\n    Chart.prototype.updateCanvasStyle = function () {\n        modifyCSS(this.canvas.get('el'), {\n            display: 'inline-block',\n            verticalAlign: 'middle',\n        });\n    };\n    Chart.prototype.bindAutoFit = function () {\n        if (this.autoFit) {\n            window.addEventListener('resize', this.onResize);\n        }\n    };\n    Chart.prototype.unbindAutoFit = function () {\n        if (this.autoFit) {\n            window.removeEventListener('resize', this.onResize);\n        }\n    };\n    return Chart;\n}(View));\nexport default Chart;\n//# sourceMappingURL=chart.js.map","import { each } from '@antv/util';\n/**\n * Component Controller 规范需要定义的基类\n * 1. 规范的 option 输入\n * 2. 统一的信息获取 API\n * 3. 明确定义的组件事件（名称、数据）\n */\nvar Controller = /** @class */ (function () {\n    function Controller(view) {\n        /** 是否可见 */\n        this.visible = true;\n        /** 所有的 component */\n        this.components = [];\n        this.view = view;\n    }\n    /**\n     * clear\n     * @param includeOption 是否清空 option 配置项（used in annotation）\n     */\n    Controller.prototype.clear = function (includeOption) {\n        // destroy all components\n        each(this.components, function (co) {\n            co.component.destroy();\n        });\n        // clear all component instance\n        this.components = [];\n    };\n    /**\n     * destroy the component\n     */\n    Controller.prototype.destroy = function () {\n        this.clear();\n    };\n    /**\n     * get all components\n     * @returns components array\n     */\n    Controller.prototype.getComponents = function () {\n        return this.components;\n    };\n    /**\n     * change visibility of component\n     * @param visible\n     */\n    Controller.prototype.changeVisible = function (visible) {\n        if (this.visible === visible) {\n            return;\n        }\n        this.components.forEach(function (co) {\n            if (visible) {\n                co.component.show();\n            }\n            else {\n                co.component.hide();\n            }\n        });\n        this.visible = visible;\n    };\n    return Controller;\n}());\nexport { Controller };\n//# sourceMappingURL=base.js.map","import { __assign, __extends, __values } from \"tslib\";\nimport { deepMix, find, get, isEqual, isFunction, mix, isString, isBoolean, flatten, isArray } from '@antv/util';\nimport { Crosshair, HtmlTooltip } from '../../dependents';\nimport { getAngleByPoint, getDistanceToCenter, getCoordinateClipCfg } from '../../util/coordinate';\nimport { polarToCartesian } from '../../util/graphics';\nimport { findItemsFromView } from '../../util/tooltip';\nimport { BBox } from '../../util/bbox';\nimport { Controller } from './base';\nimport Event from '../event';\n// Filter duplicates, use `name`, `color`, `value` and `title` property values as condition\nfunction uniq(items) {\n    var uniqItems = [];\n    var _loop_1 = function (index) {\n        var item = items[index];\n        var result = find(uniqItems, function (subItem) {\n            return (subItem.color === item.color &&\n                subItem.name === item.name &&\n                subItem.value === item.value &&\n                subItem.title === item.title);\n        });\n        if (!result) {\n            uniqItems.push(item);\n        }\n    };\n    for (var index = 0; index < items.length; index++) {\n        _loop_1(index);\n    }\n    return uniqItems;\n}\n/** @ignore */\nvar Tooltip = /** @class */ (function (_super) {\n    __extends(Tooltip, _super);\n    function Tooltip() {\n        var _this = _super !== null && _super.apply(this, arguments) || this;\n        _this.isLocked = false;\n        return _this;\n    }\n    Object.defineProperty(Tooltip.prototype, \"name\", {\n        get: function () {\n            return 'tooltip';\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Tooltip.prototype.init = function () { };\n    Tooltip.prototype.isVisible = function () {\n        var option = this.view.getOptions().tooltip;\n        return option !== false;\n    };\n    Tooltip.prototype.render = function () { };\n    /**\n     * Shows tooltip\n     * @param point\n     */\n    Tooltip.prototype.showTooltip = function (point) {\n        this.point = point;\n        if (!this.isVisible()) {\n            // 如果设置 tooltip(false) 则始终不显示\n            return;\n        }\n        var view = this.view;\n        var items = this.getTooltipItems(point);\n        if (!items.length) {\n            // 无内容则不展示，同时 tooltip 需要隐藏\n            this.hideTooltip();\n            return;\n        }\n        var title = this.getTitle(items);\n        var dataPoint = {\n            x: items[0].x,\n            y: items[0].y,\n        }; // 数据点位置\n        view.emit('tooltip:show', Event.fromData(view, 'tooltip:show', __assign({ items: items, title: title }, point)));\n        var cfg = this.getTooltipCfg();\n        var follow = cfg.follow, showMarkers = cfg.showMarkers, showCrosshairs = cfg.showCrosshairs, showContent = cfg.showContent, marker = cfg.marker;\n        var lastItems = this.items;\n        var lastTitle = this.title;\n        if (!isEqual(lastTitle, title) || !isEqual(lastItems, items)) {\n            // 内容发生变化了更新 tooltip\n            view.emit('tooltip:change', Event.fromData(view, 'tooltip:change', __assign({ items: items, title: title }, point)));\n            if (isFunction(showContent) ? showContent(items) : showContent) {\n                // 展示 tooltip 内容框才渲染 tooltip\n                if (!this.tooltip) {\n                    // 延迟生成\n                    this.renderTooltip();\n                }\n                this.tooltip.update(mix({}, cfg, {\n                    items: this.getItemsAfterProcess(items),\n                    title: title,\n                }, follow ? point : {}));\n                this.tooltip.show();\n            }\n            if (showMarkers) {\n                // 展示 tooltipMarkers，tooltipMarkers 跟随数据\n                this.renderTooltipMarkers(items, marker);\n            }\n        }\n        else {\n            // 内容未发生变化，则更新位置\n            if (this.tooltip && follow) {\n                this.tooltip.update(point);\n                this.tooltip.show(); // tooltip 有可能被隐藏，需要保证显示状态\n            }\n            if (this.tooltipMarkersGroup) {\n                this.tooltipMarkersGroup.show();\n            }\n        }\n        this.items = items;\n        this.title = title;\n        if (showCrosshairs) {\n            // 展示 tooltip 辅助线\n            var isCrosshairsFollowCursor = get(cfg, ['crosshairs', 'follow'], false); // 辅助线是否要跟随鼠标\n            this.renderCrosshairs(isCrosshairsFollowCursor ? point : dataPoint, cfg);\n        }\n    };\n    Tooltip.prototype.hideTooltip = function () {\n        var follow = this.getTooltipCfg().follow;\n        if (!follow) {\n            this.point = null;\n            return;\n        }\n        // hide the tooltipMarkers\n        var tooltipMarkersGroup = this.tooltipMarkersGroup;\n        if (tooltipMarkersGroup) {\n            tooltipMarkersGroup.hide();\n        }\n        // hide crosshairs\n        var xCrosshair = this.xCrosshair;\n        var yCrosshair = this.yCrosshair;\n        if (xCrosshair) {\n            xCrosshair.hide();\n        }\n        if (yCrosshair) {\n            yCrosshair.hide();\n        }\n        var tooltip = this.tooltip;\n        if (tooltip) {\n            tooltip.hide();\n        }\n        this.view.emit('tooltip:hide', Event.fromData(this.view, 'tooltip:hide', {}));\n        this.point = null;\n    };\n    /**\n     * lockTooltip\n     */\n    Tooltip.prototype.lockTooltip = function () {\n        this.isLocked = true;\n        if (this.tooltip) {\n            // tooltip contianer 可捕获事件\n            this.tooltip.setCapture(true);\n        }\n    };\n    /**\n     * unlockTooltip\n     */\n    Tooltip.prototype.unlockTooltip = function () {\n        this.isLocked = false;\n        var cfg = this.getTooltipCfg();\n        if (this.tooltip) {\n            // 重置 capture 属性\n            this.tooltip.setCapture(cfg.capture);\n        }\n    };\n    /**\n     * isTooltipLocked\n     */\n    Tooltip.prototype.isTooltipLocked = function () {\n        return this.isLocked;\n    };\n    Tooltip.prototype.clear = function () {\n        var _a = this, tooltip = _a.tooltip, xCrosshair = _a.xCrosshair, yCrosshair = _a.yCrosshair, tooltipMarkersGroup = _a.tooltipMarkersGroup;\n        if (tooltip) {\n            tooltip.hide();\n            tooltip.clear();\n        }\n        if (xCrosshair) {\n            xCrosshair.clear();\n        }\n        if (yCrosshair) {\n            yCrosshair.clear();\n        }\n        if (tooltipMarkersGroup) {\n            tooltipMarkersGroup.clear();\n        }\n        // 如果 customContent 不为空，就重新生成 tooltip\n        if (tooltip === null || tooltip === void 0 ? void 0 : tooltip.get('customContent')) {\n            this.tooltip.destroy();\n            this.tooltip = null;\n        }\n        // title 和 items 需要清空, 否则 tooltip 内容会出现置空的情况\n        // 即：需要走进 !isEqual(lastTitle, title) || !isEqual(lastItems, items) 的逻辑，更新 tooltip 的内容\n        this.title = null;\n        this.items = null;\n    };\n    Tooltip.prototype.destroy = function () {\n        if (this.tooltip) {\n            this.tooltip.destroy();\n        }\n        if (this.xCrosshair) {\n            this.xCrosshair.destroy();\n        }\n        if (this.yCrosshair) {\n            this.yCrosshair.destroy();\n        }\n        if (this.guideGroup) {\n            this.guideGroup.remove(true);\n        }\n        this.reset();\n    };\n    Tooltip.prototype.reset = function () {\n        this.items = null;\n        this.title = null;\n        this.tooltipMarkersGroup = null;\n        this.tooltipCrosshairsGroup = null;\n        this.xCrosshair = null;\n        this.yCrosshair = null;\n        this.tooltip = null;\n        this.guideGroup = null;\n        this.isLocked = false;\n        this.point = null;\n    };\n    Tooltip.prototype.changeVisible = function (visible) {\n        if (this.visible === visible) {\n            return;\n        }\n        var _a = this, tooltip = _a.tooltip, tooltipMarkersGroup = _a.tooltipMarkersGroup, xCrosshair = _a.xCrosshair, yCrosshair = _a.yCrosshair;\n        if (visible) {\n            if (tooltip) {\n                tooltip.show();\n            }\n            if (tooltipMarkersGroup) {\n                tooltipMarkersGroup.show();\n            }\n            if (xCrosshair) {\n                xCrosshair.show();\n            }\n            if (yCrosshair) {\n                yCrosshair.show();\n            }\n        }\n        else {\n            if (tooltip) {\n                tooltip.hide();\n            }\n            if (tooltipMarkersGroup) {\n                tooltipMarkersGroup.hide();\n            }\n            if (xCrosshair) {\n                xCrosshair.hide();\n            }\n            if (yCrosshair) {\n                yCrosshair.hide();\n            }\n        }\n        this.visible = visible;\n    };\n    Tooltip.prototype.getTooltipItems = function (point) {\n        var e_1, _a, e_2, _b, e_3, _c;\n        var items = this.findItemsFromView(this.view, point);\n        if (items.length) {\n            // 三层\n            items = flatten(items);\n            try {\n                for (var items_1 = __values(items), items_1_1 = items_1.next(); !items_1_1.done; items_1_1 = items_1.next()) {\n                    var itemArr = items_1_1.value;\n                    try {\n                        for (var itemArr_1 = (e_2 = void 0, __values(itemArr)), itemArr_1_1 = itemArr_1.next(); !itemArr_1_1.done; itemArr_1_1 = itemArr_1.next()) {\n                            var item = itemArr_1_1.value;\n                            var _d = item.mappingData, x = _d.x, y = _d.y;\n                            item.x = isArray(x) ? x[x.length - 1] : x;\n                            item.y = isArray(y) ? y[y.length - 1] : y;\n                        }\n                    }\n                    catch (e_2_1) { e_2 = { error: e_2_1 }; }\n                    finally {\n                        try {\n                            if (itemArr_1_1 && !itemArr_1_1.done && (_b = itemArr_1.return)) _b.call(itemArr_1);\n                        }\n                        finally { if (e_2) throw e_2.error; }\n                    }\n                }\n            }\n            catch (e_1_1) { e_1 = { error: e_1_1 }; }\n            finally {\n                try {\n                    if (items_1_1 && !items_1_1.done && (_a = items_1.return)) _a.call(items_1);\n                }\n                finally { if (e_1) throw e_1.error; }\n            }\n            var shared = this.getTooltipCfg().shared;\n            // shared: false 代表只显示当前拾取到的 shape 的数据，但是一个 view 会有多个 Geometry，所以有可能会拾取到多个 shape\n            if (shared === false && items.length > 1) {\n                var snapItem = items[0];\n                var min = Math.abs(point.y - snapItem[0].y);\n                try {\n                    for (var items_2 = __values(items), items_2_1 = items_2.next(); !items_2_1.done; items_2_1 = items_2.next()) {\n                        var aItem = items_2_1.value;\n                        var yDistance = Math.abs(point.y - aItem[0].y);\n                        if (yDistance <= min) {\n                            snapItem = aItem;\n                            min = yDistance;\n                        }\n                    }\n                }\n                catch (e_3_1) { e_3 = { error: e_3_1 }; }\n                finally {\n                    try {\n                        if (items_2_1 && !items_2_1.done && (_c = items_2.return)) _c.call(items_2);\n                    }\n                    finally { if (e_3) throw e_3.error; }\n                }\n                items = [snapItem];\n            }\n            return uniq(flatten(items));\n        }\n        return [];\n    };\n    Tooltip.prototype.layout = function () { };\n    Tooltip.prototype.update = function () {\n        if (this.point) {\n            this.showTooltip(this.point);\n        }\n        if (this.tooltip) {\n            // #2279 修复resize之后tooltip越界的问题\n            // 确保tooltip已经创建的情况下\n            var canvas = this.view.getCanvas();\n            // TODO 逍为 tooltip 的区域不应该是 canvas，而应该是整个 特别是在图比较小的时候\n            // 更新 region\n            this.tooltip.set('region', {\n                start: { x: 0, y: 0 },\n                end: { x: canvas.get('width'), y: canvas.get('height') },\n            });\n        }\n    };\n    /**\n     * 当前鼠标点是在 enter tooltip 中\n     * @param point\n     */\n    Tooltip.prototype.isCursorEntered = function (point) {\n        // 是可捕获的，并且点在 tooltip dom 上\n        if (this.tooltip) {\n            var el = this.tooltip.getContainer();\n            var capture = this.tooltip.get('capture');\n            if (el && capture) {\n                var _a = el.getBoundingClientRect(), x = _a.x, y = _a.y, width = _a.width, height = _a.height;\n                return new BBox(x, y, width, height).isPointIn(point);\n            }\n        }\n        return false;\n    };\n    // 获取 tooltip 配置，因为用户可能会通过 view.tooltip() 重新配置 tooltip，所以就不做缓存，每次直接读取\n    Tooltip.prototype.getTooltipCfg = function () {\n        var view = this.view;\n        var option = view.getOptions().tooltip;\n        var processOption = this.processCustomContent(option);\n        var theme = view.getTheme();\n        var defaultCfg = get(theme, ['components', 'tooltip'], {});\n        var enterable = get(processOption, 'enterable', defaultCfg.enterable);\n        return deepMix({}, defaultCfg, processOption, {\n            capture: enterable || this.isLocked ? true : false,\n        });\n    };\n    // process customContent\n    Tooltip.prototype.processCustomContent = function (option) {\n        if (isBoolean(option) || !get(option, 'customContent')) {\n            return option;\n        }\n        var currentCustomContent = option.customContent;\n        var customContent = function (title, items) {\n            var content = currentCustomContent(title, items) || '';\n            return isString(content) ? '<div class=\"g2-tooltip\">' + content + '</div>' : content;\n        };\n        return __assign(__assign({}, option), { customContent: customContent });\n    };\n    Tooltip.prototype.getTitle = function (items) {\n        var title = items[0].title || items[0].name;\n        this.title = title;\n        return title;\n    };\n    Tooltip.prototype.renderTooltip = function () {\n        var canvas = this.view.getCanvas();\n        var region = {\n            start: { x: 0, y: 0 },\n            end: { x: canvas.get('width'), y: canvas.get('height') },\n        };\n        var cfg = this.getTooltipCfg();\n        var tooltip = new HtmlTooltip(__assign(__assign({ parent: canvas.get('el').parentNode, region: region }, cfg), { visible: false, crosshairs: null }));\n        tooltip.init();\n        this.tooltip = tooltip;\n    };\n    Tooltip.prototype.renderTooltipMarkers = function (items, marker) {\n        var e_4, _a;\n        var tooltipMarkersGroup = this.getTooltipMarkersGroup();\n        var rootView = this.view.getRootView();\n        var limitInPlot = rootView.limitInPlot;\n        try {\n            for (var items_3 = __values(items), items_3_1 = items_3.next(); !items_3_1.done; items_3_1 = items_3.next()) {\n                var item = items_3_1.value;\n                var x = item.x, y = item.y;\n                // 有裁剪就剪切\n                if (limitInPlot || (tooltipMarkersGroup === null || tooltipMarkersGroup === void 0 ? void 0 : tooltipMarkersGroup.getClip())) {\n                    var _b = getCoordinateClipCfg(rootView.getCoordinate()), type = _b.type, attrs_1 = _b.attrs;\n                    tooltipMarkersGroup === null || tooltipMarkersGroup === void 0 ? void 0 : tooltipMarkersGroup.setClip({\n                        type: type,\n                        attrs: attrs_1,\n                    });\n                }\n                else {\n                    // 清除已有的 clip\n                    tooltipMarkersGroup === null || tooltipMarkersGroup === void 0 ? void 0 : tooltipMarkersGroup.setClip(undefined);\n                }\n                var theme = this.view.getTheme();\n                var markerDefaultCfg = get(theme, ['components', 'tooltip', 'marker'], {});\n                var attrs = __assign(__assign({ fill: item.color, symbol: 'circle', shadowColor: item.color }, (isFunction(marker) ? __assign(__assign({}, markerDefaultCfg), marker(item)) : marker)), { x: x, y: y });\n                tooltipMarkersGroup.addShape('marker', {\n                    attrs: attrs,\n                });\n            }\n        }\n        catch (e_4_1) { e_4 = { error: e_4_1 }; }\n        finally {\n            try {\n                if (items_3_1 && !items_3_1.done && (_a = items_3.return)) _a.call(items_3);\n            }\n            finally { if (e_4) throw e_4.error; }\n        }\n    };\n    Tooltip.prototype.renderCrosshairs = function (point, cfg) {\n        var crosshairsType = get(cfg, ['crosshairs', 'type'], 'x'); // 默认展示 x 轴上的辅助线\n        if (crosshairsType === 'x') {\n            if (this.yCrosshair) {\n                this.yCrosshair.hide();\n            }\n            this.renderXCrosshairs(point, cfg);\n        }\n        else if (crosshairsType === 'y') {\n            if (this.xCrosshair) {\n                this.xCrosshair.hide();\n            }\n            this.renderYCrosshairs(point, cfg);\n        }\n        else if (crosshairsType === 'xy') {\n            this.renderXCrosshairs(point, cfg);\n            this.renderYCrosshairs(point, cfg);\n        }\n    };\n    // 渲染 x 轴上的 tooltip 辅助线\n    Tooltip.prototype.renderXCrosshairs = function (point, tooltipCfg) {\n        var coordinate = this.getViewWithGeometry(this.view).getCoordinate();\n        var start;\n        var end;\n        if (coordinate.isRect) {\n            if (coordinate.isTransposed) {\n                start = {\n                    x: coordinate.start.x,\n                    y: point.y,\n                };\n                end = {\n                    x: coordinate.end.x,\n                    y: point.y,\n                };\n            }\n            else {\n                start = {\n                    x: point.x,\n                    y: coordinate.end.y,\n                };\n                end = {\n                    x: point.x,\n                    y: coordinate.start.y,\n                };\n            }\n        }\n        else {\n            // 极坐标下 x 轴上的 crosshairs 表现为半径\n            var angle = getAngleByPoint(coordinate, point);\n            var center = coordinate.getCenter();\n            var radius = coordinate.getRadius();\n            end = polarToCartesian(center.x, center.y, radius, angle);\n            start = center;\n        }\n        var cfg = deepMix({\n            start: start,\n            end: end,\n            container: this.getTooltipCrosshairsGroup(),\n        }, get(tooltipCfg, 'crosshairs', {}), this.getCrosshairsText('x', point, tooltipCfg));\n        delete cfg.type; // 与 Crosshairs 组件的 type 冲突故删除\n        var xCrosshair = this.xCrosshair;\n        if (xCrosshair) {\n            xCrosshair.update(cfg);\n        }\n        else {\n            xCrosshair = new Crosshair.Line(cfg);\n            xCrosshair.init();\n        }\n        xCrosshair.render();\n        xCrosshair.show();\n        this.xCrosshair = xCrosshair;\n    };\n    // 渲染 y 轴上的辅助线\n    Tooltip.prototype.renderYCrosshairs = function (point, tooltipCfg) {\n        var coordinate = this.getViewWithGeometry(this.view).getCoordinate();\n        var cfg;\n        var type;\n        if (coordinate.isRect) {\n            var start = void 0;\n            var end = void 0;\n            if (coordinate.isTransposed) {\n                start = {\n                    x: point.x,\n                    y: coordinate.end.y,\n                };\n                end = {\n                    x: point.x,\n                    y: coordinate.start.y,\n                };\n            }\n            else {\n                start = {\n                    x: coordinate.start.x,\n                    y: point.y,\n                };\n                end = {\n                    x: coordinate.end.x,\n                    y: point.y,\n                };\n            }\n            cfg = {\n                start: start,\n                end: end,\n            };\n            type = 'Line';\n        }\n        else {\n            // 极坐标下 y 轴上的 crosshairs 表现为圆弧\n            cfg = {\n                center: coordinate.getCenter(),\n                // @ts-ignore\n                radius: getDistanceToCenter(coordinate, point),\n                startAngle: coordinate.startAngle,\n                endAngle: coordinate.endAngle,\n            };\n            type = 'Circle';\n        }\n        cfg = deepMix({\n            container: this.getTooltipCrosshairsGroup(),\n        }, cfg, get(tooltipCfg, 'crosshairs', {}), this.getCrosshairsText('y', point, tooltipCfg));\n        delete cfg.type; // 与 Crosshairs 组件的 type 冲突故删除\n        var yCrosshair = this.yCrosshair;\n        if (yCrosshair) {\n            // 如果坐标系发生直角坐标系与极坐标的切换操作\n            if ((coordinate.isRect && yCrosshair.get('type') === 'circle') ||\n                (!coordinate.isRect && yCrosshair.get('type') === 'line')) {\n                yCrosshair = new Crosshair[type](cfg);\n                yCrosshair.init();\n            }\n            else {\n                yCrosshair.update(cfg);\n            }\n        }\n        else {\n            yCrosshair = new Crosshair[type](cfg);\n            yCrosshair.init();\n        }\n        yCrosshair.render();\n        yCrosshair.show();\n        this.yCrosshair = yCrosshair;\n    };\n    Tooltip.prototype.getCrosshairsText = function (type, point, tooltipCfg) {\n        var textCfg = get(tooltipCfg, ['crosshairs', 'text']);\n        var follow = get(tooltipCfg, ['crosshairs', 'follow']);\n        var items = this.items;\n        if (textCfg) {\n            var view = this.getViewWithGeometry(this.view);\n            // 需要展示文本\n            var firstItem = items[0];\n            var xScale = view.getXScale();\n            var yScale = view.getYScales()[0];\n            var xValue = void 0;\n            var yValue = void 0;\n            if (follow) {\n                // 如果需要跟随鼠标移动，就需要将当前鼠标坐标点转换为对应的数值\n                var invertPoint = this.view.getCoordinate().invert(point);\n                xValue = xScale.invert(invertPoint.x); // 转换为原始值\n                yValue = yScale.invert(invertPoint.y); // 转换为原始值\n            }\n            else {\n                xValue = firstItem.data[xScale.field];\n                yValue = firstItem.data[yScale.field];\n            }\n            var content = type === 'x' ? xValue : yValue;\n            if (isFunction(textCfg)) {\n                textCfg = textCfg(type, content, items, point);\n            }\n            else {\n                textCfg.content = content;\n            }\n            return {\n                text: textCfg,\n            };\n        }\n    };\n    // 获取存储 tooltipMarkers 和 crosshairs 的容器\n    Tooltip.prototype.getGuideGroup = function () {\n        if (!this.guideGroup) {\n            var foregroundGroup = this.view.foregroundGroup;\n            this.guideGroup = foregroundGroup.addGroup({\n                name: 'tooltipGuide',\n                capture: false,\n            });\n        }\n        return this.guideGroup;\n    };\n    // 获取 tooltipMarkers 存储的容器\n    Tooltip.prototype.getTooltipMarkersGroup = function () {\n        var tooltipMarkersGroup = this.tooltipMarkersGroup;\n        if (tooltipMarkersGroup && !tooltipMarkersGroup.destroyed) {\n            tooltipMarkersGroup.clear();\n            tooltipMarkersGroup.show();\n        }\n        else {\n            tooltipMarkersGroup = this.getGuideGroup().addGroup({\n                name: 'tooltipMarkersGroup',\n            });\n            tooltipMarkersGroup.toFront();\n            this.tooltipMarkersGroup = tooltipMarkersGroup;\n        }\n        return tooltipMarkersGroup;\n    };\n    // 获取 tooltip crosshairs 存储的容器\n    Tooltip.prototype.getTooltipCrosshairsGroup = function () {\n        var tooltipCrosshairsGroup = this.tooltipCrosshairsGroup;\n        if (!tooltipCrosshairsGroup) {\n            tooltipCrosshairsGroup = this.getGuideGroup().addGroup({\n                name: 'tooltipCrosshairsGroup',\n                capture: false,\n            });\n            tooltipCrosshairsGroup.toBack();\n            this.tooltipCrosshairsGroup = tooltipCrosshairsGroup;\n        }\n        return tooltipCrosshairsGroup;\n    };\n    Tooltip.prototype.findItemsFromView = function (view, point) {\n        var e_5, _a;\n        if (view.getOptions().tooltip === false) {\n            // 如果 view 关闭了 tooltip\n            return [];\n        }\n        var tooltipCfg = this.getTooltipCfg();\n        var result = findItemsFromView(view, point, tooltipCfg);\n        try {\n            // 递归查找，并合并结果\n            for (var _b = __values(view.views), _c = _b.next(); !_c.done; _c = _b.next()) {\n                var childView = _c.value;\n                result = result.concat(this.findItemsFromView(childView, point));\n            }\n        }\n        catch (e_5_1) { e_5 = { error: e_5_1 }; }\n        finally {\n            try {\n                if (_c && !_c.done && (_a = _b.return)) _a.call(_b);\n            }\n            finally { if (e_5) throw e_5.error; }\n        }\n        return result;\n    };\n    // FIXME: hack 方法\n    // 因为 tooltip 的交互是挂载在 Chart 上，所以当chart 上没有绘制 Geometry 的时候，就查找不到数据，并且绘图区域同子 View 的区域不同\n    Tooltip.prototype.getViewWithGeometry = function (view) {\n        var _this = this;\n        if (view.geometries.length) {\n            return view;\n        }\n        return find(view.views, function (childView) { return _this.getViewWithGeometry(childView); });\n    };\n    /**\n     * 根据用户配置的 items 配置，来进行用户自定义的处理，并返回最终的 items\n     * 默认不做任何处理\n     */\n    Tooltip.prototype.getItemsAfterProcess = function (originalItems) {\n        var customItems = this.getTooltipCfg().customItems;\n        var fn = customItems ? customItems : function (v) { return v; };\n        return fn(originalItems);\n    };\n    return Tooltip;\n}(Controller));\nexport default Tooltip;\n//# sourceMappingURL=tooltip.js.map","var ANIMATIONS_MAP = {};\n/**\n * 根据名称获取对应的动画执行函数\n * @param type 动画函数名称\n */\nexport function getAnimation(type) {\n    return ANIMATIONS_MAP[type.toLowerCase()];\n}\n/**\n * 注册动画执行函数\n * @param type 动画执行函数名称\n * @param animation 动画执行函数\n */\nexport function registerAnimation(type, animation) {\n    ANIMATIONS_MAP[type.toLowerCase()] = animation;\n}\n//# sourceMappingURL=index.js.map","import { __assign } from \"tslib\";\nimport { deepMix, get, isFunction } from '@antv/util';\nimport { FIELD_ORIGIN } from '../constant';\nimport { getAnimation } from './animation';\n// 默认的动画参数配置\nexport var DEFAULT_ANIMATE_CFG = {\n    appear: {\n        duration: 450,\n        easing: 'easeQuadOut',\n    },\n    update: {\n        duration: 400,\n        easing: 'easeQuadInOut',\n    },\n    enter: {\n        duration: 400,\n        easing: 'easeQuadInOut',\n    },\n    leave: {\n        duration: 350,\n        easing: 'easeQuadIn',\n    }, // 更新时销毁动画配置\n};\n// 各个 Geometry 默认的动画执行函数\nvar GEOMETRY_ANIMATE_CFG = {\n    interval: function (coordinate) {\n        return {\n            enter: {\n                animation: coordinate.isRect ? (coordinate.isTransposed ? 'scale-in-x' : 'scale-in-y') : 'fade-in',\n            },\n            update: {\n                animation: coordinate.isPolar && coordinate.isTransposed ? 'sector-path-update' : null,\n            },\n            leave: {\n                animation: 'fade-out',\n            },\n        };\n    },\n    line: {\n        enter: {\n            animation: 'fade-in',\n        },\n        leave: {\n            animation: 'fade-out',\n        },\n    },\n    path: {\n        enter: {\n            animation: 'fade-in',\n        },\n        leave: {\n            animation: 'fade-out',\n        },\n    },\n    point: {\n        appear: {\n            animation: 'zoom-in',\n        },\n        enter: {\n            animation: 'zoom-in',\n        },\n        leave: {\n            animation: 'zoom-out',\n        },\n    },\n    area: {\n        enter: {\n            animation: 'fade-in',\n        },\n        leave: {\n            animation: 'fade-out',\n        },\n    },\n    polygon: {\n        enter: {\n            animation: 'fade-in',\n        },\n        leave: {\n            animation: 'fade-out',\n        },\n    },\n    schema: {\n        enter: {\n            animation: 'fade-in',\n        },\n        leave: {\n            animation: 'fade-out',\n        },\n    },\n    edge: {\n        enter: {\n            animation: 'fade-in',\n        },\n        leave: {\n            animation: 'fade-out',\n        },\n    },\n    label: {\n        appear: {\n            animation: 'fade-in',\n            delay: 450,\n        },\n        enter: {\n            animation: 'fade-in',\n        },\n        update: {\n            animation: 'position-update',\n        },\n        leave: {\n            animation: 'fade-out',\n        },\n    },\n};\n// 各个 Geometry 默认的群组出场动画\nvar GEOMETRY_GROUP_APPEAR_ANIMATION = {\n    line: function () {\n        return {\n            animation: 'wave-in',\n        };\n    },\n    area: function () {\n        return {\n            animation: 'wave-in',\n        };\n    },\n    path: function () {\n        return {\n            animation: 'fade-in',\n        };\n    },\n    interval: function (coordinate) {\n        var animation;\n        if (coordinate.isRect) {\n            animation = coordinate.isTransposed ? 'grow-in-x' : 'grow-in-y';\n        }\n        else {\n            animation = 'grow-in-xy';\n            if (coordinate.isPolar && coordinate.isTransposed) {\n                // pie chart\n                animation = 'wave-in';\n            }\n        }\n        return {\n            animation: animation,\n        };\n    },\n    schema: function (coordinate) {\n        var animation;\n        if (coordinate.isRect) {\n            animation = coordinate.isTransposed ? 'grow-in-x' : 'grow-in-y';\n        }\n        else {\n            animation = 'grow-in-xy';\n        }\n        return {\n            animation: animation,\n        };\n    },\n    polygon: function () {\n        return {\n            animation: 'fade-in',\n            duration: 500,\n        };\n    },\n    edge: function () {\n        return {\n            animation: 'fade-in',\n        };\n    },\n};\n// 解析用户的动画配置\nfunction parseAnimateConfig(animateCfg, data) {\n    return {\n        delay: isFunction(animateCfg.delay) ? animateCfg.delay(data) : animateCfg.delay,\n        easing: isFunction(animateCfg.easing) ? animateCfg.easing(data) : animateCfg.easing,\n        duration: isFunction(animateCfg.duration) ? animateCfg.duration(data) : animateCfg.duration,\n        callback: animateCfg.callback,\n        repeat: animateCfg.repeat,\n    };\n}\n/**\n * @ignore\n * 获取 elementName 对应的动画配置，当声明了 `animateType`，则返回 `animateType` 对应的动画配置\n * @param elementName 元素名称\n * @param coordinate 做表弟类型\n * @param animateType 可选，动画类型\n */\nexport function getDefaultAnimateCfg(elementName, coordinate, animateType) {\n    var animateCfg = GEOMETRY_ANIMATE_CFG[elementName];\n    if (animateCfg) {\n        if (isFunction(animateCfg)) {\n            animateCfg = animateCfg(coordinate);\n        }\n        animateCfg = deepMix({}, DEFAULT_ANIMATE_CFG, animateCfg);\n        if (animateType) {\n            return animateCfg[animateType];\n        }\n    }\n    return animateCfg;\n}\n/**\n * @ignore\n * 工具函数\n * 根据用户传入的配置为 shape 执行动画\n * @param shape 执行动画的图形元素\n * @param animateCfg 动画配置\n * @param cfg 额外的信息\n */\nexport function doAnimate(shape, animateCfg, cfg) {\n    var data = get(shape.get('origin'), 'data', FIELD_ORIGIN);\n    var animation = animateCfg.animation; // 获取动画执行函数\n    var parsedAnimateCfg = parseAnimateConfig(animateCfg, data);\n    if (animation) {\n        // 用户声明了动画执行函数\n        var animateFunction = getAnimation(animation);\n        if (animateFunction) {\n            animateFunction(shape, parsedAnimateCfg, cfg);\n        }\n    }\n    else {\n        // 没有声明，则根据 toAttrs 做差值动画\n        shape.animate(cfg.toAttrs, parsedAnimateCfg);\n    }\n}\n/**\n * @ignore\n * 执行 Geometry 群组入场动画\n * @param container 执行群组动画的图形元素\n * @param animateCfg 动画配置\n * @param geometryType geometry 类型\n * @param coordinate 坐标系对象\n * @param minYPoint y 轴最小值对应的画布坐标点\n */\nexport function doGroupAppearAnimate(container, animateCfg, geometryType, coordinate, minYPoint) {\n    if (GEOMETRY_GROUP_APPEAR_ANIMATION[geometryType]) {\n        var defaultCfg = GEOMETRY_GROUP_APPEAR_ANIMATION[geometryType](coordinate);\n        var animation = getAnimation(get(defaultCfg, 'animation', ''));\n        if (animation) {\n            var cfg = __assign(__assign(__assign({}, DEFAULT_ANIMATE_CFG.appear), defaultCfg), animateCfg);\n            container.stopAnimate(); // 先结束当前 container 动画\n            animation(container, cfg, {\n                coordinate: coordinate,\n                minYPoint: minYPoint,\n                toAttrs: null,\n            });\n        }\n    }\n}\n//# sourceMappingURL=index.js.map","/**\n * Name of Background Shape\n */\nexport var BACKGROUND_SHAPE = 'element-background';\n//# sourceMappingURL=constant.js.map","import { __assign, __extends } from \"tslib\";\nimport { deepMix, each, get, isArray, isEmpty, isEqual, isFunction, isString } from '@antv/util';\n// 暂未发包\n// @ts-ignore\nimport { propagationDelegate } from '@antv/component';\nimport { doAnimate } from '../../animate';\nimport Base from '../../base';\nimport { getReplaceAttrs } from '../../util/graphics';\nimport { GEOMETRY_LIFE_CIRCLE } from '../../constant';\nimport { BACKGROUND_SHAPE } from '../shape/constant';\n/**\n * Element 图形元素。\n * 定义：在 G2 中，我们会将数据通过图形语法映射成不同的图形，比如点图，数据集中的每条数据会对应一个点，柱状图每条数据对应一个柱子，线图则是一组数据对应一条折线，Element 即一条/一组数据对应的图形元素，它代表一条数据或者一个数据集，在图形层面，它可以是单个 Shape 也可以是多个 Shape，我们称之为图形元素。\n */\nvar Element = /** @class */ (function (_super) {\n    __extends(Element, _super);\n    function Element(cfg) {\n        var _this = _super.call(this, cfg) || this;\n        /** 保存 shape 对应的 label */\n        _this.labelShape = [];\n        // 存储当前开启的状态\n        _this.states = [];\n        var shapeFactory = cfg.shapeFactory, container = cfg.container, offscreenGroup = cfg.offscreenGroup, elementIndex = cfg.elementIndex, _a = cfg.visible, visible = _a === void 0 ? true : _a;\n        _this.shapeFactory = shapeFactory;\n        _this.container = container;\n        _this.offscreenGroup = offscreenGroup;\n        _this.visible = visible;\n        _this.elementIndex = elementIndex;\n        return _this;\n    }\n    /**\n     * 绘制图形。\n     * @param model 绘制数据。\n     * @param isUpdate 可选，是否是更新发生后的绘制。\n     */\n    Element.prototype.draw = function (model, isUpdate) {\n        if (isUpdate === void 0) { isUpdate = false; }\n        this.model = model;\n        this.data = model.data; // 存储原始数据\n        this.shapeType = this.getShapeType(model);\n        // 绘制图形\n        this.drawShape(model, isUpdate);\n        if (this.visible === false) {\n            // 用户在初始化的时候声明 visible: false\n            this.changeVisible(false);\n        }\n    };\n    /**\n     * 更新图形。\n     * @param model 更新的绘制数据。\n     */\n    Element.prototype.update = function (model) {\n        var _a = this, shapeFactory = _a.shapeFactory, shape = _a.shape;\n        if (!shape) {\n            return;\n        }\n        // 更新数据\n        this.model = model;\n        this.data = model.data;\n        this.shapeType = this.getShapeType(model);\n        // step 1: 更新 shape 携带的信息\n        this.setShapeInfo(shape, model);\n        // step 2: 使用虚拟 Group 重新绘制 shape，然后更新当前 shape\n        var offscreenGroup = this.getOffscreenGroup();\n        var newShape = shapeFactory.drawShape(this.shapeType, model, offscreenGroup);\n        // @ts-ignore\n        newShape.cfg.data = this.data;\n        // @ts-ignore\n        newShape.cfg.origin = model;\n        // label 需要使用\n        newShape.cfg.element = this;\n        // step 3: 同步 shape 样式\n        this.syncShapeStyle(shape, newShape, this.getStates(), this.getAnimateCfg('update'));\n    };\n    /**\n     * 销毁 element 实例。\n     */\n    Element.prototype.destroy = function () {\n        var _a = this, shapeFactory = _a.shapeFactory, shape = _a.shape;\n        if (shape) {\n            var animateCfg = this.getAnimateCfg('leave');\n            if (animateCfg) {\n                // 指定了动画配置则执行销毁动画\n                doAnimate(shape, animateCfg, {\n                    coordinate: shapeFactory.coordinate,\n                    toAttrs: __assign({}, shape.attr()),\n                });\n            }\n            else {\n                // 否则直接销毁\n                shape.remove(true);\n            }\n        }\n        // reset\n        this.states = [];\n        this.shapeFactory = undefined;\n        this.container = undefined;\n        this.shape = undefined;\n        this.animate = undefined;\n        this.geometry = undefined;\n        this.labelShape = [];\n        this.model = undefined;\n        this.data = undefined;\n        this.offscreenGroup = undefined;\n        this.statesStyle = undefined;\n        _super.prototype.destroy.call(this);\n    };\n    /**\n     * 显示或者隐藏 element。\n     * @param visible 是否可见。\n     */\n    Element.prototype.changeVisible = function (visible) {\n        _super.prototype.changeVisible.call(this, visible);\n        if (visible) {\n            if (this.shape) {\n                this.shape.show();\n            }\n            if (this.labelShape) {\n                this.labelShape.forEach(function (label) {\n                    label.show();\n                });\n            }\n        }\n        else {\n            if (this.shape) {\n                this.shape.hide();\n            }\n            if (this.labelShape) {\n                this.labelShape.forEach(function (label) {\n                    label.hide();\n                });\n            }\n        }\n    };\n    /**\n     * 设置 Element 的状态。\n     *\n     * 目前 Element 开放三种状态：\n     * 1. active\n     * 2. selected\n     * 3. inactive\n     *\n     * 这三种状态相互独立，可以进行叠加。\n     *\n     * 这三种状态的样式可在 [[Theme]] 主题中或者通过 `geometry.state()` 接口进行配置。\n     *\n     * ```ts\n     * // 激活 active 状态\n     * setState('active', true);\n     * ```\n     *\n     * @param stateName 状态名\n     * @param stateStatus 是否开启状态\n     */\n    Element.prototype.setState = function (stateName, stateStatus) {\n        var _a = this, states = _a.states, shapeFactory = _a.shapeFactory, model = _a.model, shape = _a.shape, shapeType = _a.shapeType;\n        var index = states.indexOf(stateName);\n        if (stateStatus) {\n            // 开启状态\n            if (index > -1) {\n                // 该状态已经开启，则返回\n                return;\n            }\n            states.push(stateName);\n            if (stateName === 'active' || stateName === 'selected') {\n                shape === null || shape === void 0 ? void 0 : shape.toFront();\n            }\n        }\n        else {\n            if (index === -1) {\n                // 关闭状态，但是状态未设置过\n                return;\n            }\n            states.splice(index, 1);\n            if (stateName === 'active' || stateName === 'selected') {\n                var _b = this.geometry, sortZIndex = _b.sortZIndex, zIndexReversed = _b.zIndexReversed;\n                var idx = zIndexReversed ? this.geometry.elements.length - this.elementIndex : this.elementIndex;\n                sortZIndex ? shape.setZIndex(idx) : shape.set('zIndex', idx);\n            }\n        }\n        // 使用虚拟 group 重新绘制 shape，然后对这个 shape 应用状态样式后，更新当前 shape。\n        var offscreenShape = shapeFactory.drawShape(shapeType, model, this.getOffscreenGroup());\n        if (states.length) {\n            // 应用当前状态\n            this.syncShapeStyle(shape, offscreenShape, states, null);\n        }\n        else {\n            // 如果没有状态，则需要恢复至原始状态\n            this.syncShapeStyle(shape, offscreenShape, ['reset'], null);\n        }\n        offscreenShape.remove(true); // 销毁，减少内存占用\n        var eventObject = {\n            state: stateName,\n            stateStatus: stateStatus,\n            element: this,\n            target: this.container,\n        };\n        this.container.emit('statechange', eventObject);\n        // @ts-ignore\n        propagationDelegate(this.shape, 'statechange', eventObject);\n    };\n    /**\n     * 清空状量态，恢复至初始状态。\n     */\n    Element.prototype.clearStates = function () {\n        var _this = this;\n        var states = this.states;\n        each(states, function (state) {\n            _this.setState(state, false);\n        });\n        this.states = [];\n    };\n    /**\n     * 查询当前 Element 上是否已设置 `stateName` 对应的状态。\n     * @param stateName 状态名称。\n     * @returns true 表示存在，false 表示不存在。\n     */\n    Element.prototype.hasState = function (stateName) {\n        return this.states.includes(stateName);\n    };\n    /**\n     * 获取当前 Element 上所有的状态。\n     * @returns 当前 Element 上所有的状态数组。\n     */\n    Element.prototype.getStates = function () {\n        return this.states;\n    };\n    /**\n     * 获取 Element 对应的原始数据。\n     * @returns 原始数据。\n     */\n    Element.prototype.getData = function () {\n        return this.data;\n    };\n    /**\n     * 获取 Element 对应的图形绘制数据。\n     * @returns 图形绘制数据。\n     */\n    Element.prototype.getModel = function () {\n        return this.model;\n    };\n    /**\n     * 返回 Element 元素整体的 bbox，包含文本及文本连线（有的话）。\n     * @returns 整体包围盒。\n     */\n    Element.prototype.getBBox = function () {\n        var _a = this, shape = _a.shape, labelShape = _a.labelShape;\n        var bbox = {\n            x: 0,\n            y: 0,\n            minX: 0,\n            minY: 0,\n            maxX: 0,\n            maxY: 0,\n            width: 0,\n            height: 0,\n        };\n        if (shape) {\n            bbox = shape.getCanvasBBox();\n        }\n        if (labelShape) {\n            labelShape.forEach(function (label) {\n                var labelBBox = label.getCanvasBBox();\n                bbox.x = Math.min(labelBBox.x, bbox.x);\n                bbox.y = Math.min(labelBBox.y, bbox.y);\n                bbox.minX = Math.min(labelBBox.minX, bbox.minX);\n                bbox.minY = Math.min(labelBBox.minY, bbox.minY);\n                bbox.maxX = Math.max(labelBBox.maxX, bbox.maxX);\n                bbox.maxY = Math.max(labelBBox.maxY, bbox.maxY);\n            });\n        }\n        bbox.width = bbox.maxX - bbox.minX;\n        bbox.height = bbox.maxY - bbox.minY;\n        return bbox;\n    };\n    Element.prototype.getStatesStyle = function () {\n        if (!this.statesStyle) {\n            var _a = this, shapeType = _a.shapeType, geometry = _a.geometry, shapeFactory = _a.shapeFactory;\n            var stateOption = geometry.stateOption;\n            var defaultShapeType = shapeFactory.defaultShapeType;\n            var stateTheme = shapeFactory.theme[shapeType] || shapeFactory.theme[defaultShapeType];\n            this.statesStyle = deepMix({}, stateTheme, stateOption);\n        }\n        return this.statesStyle;\n    };\n    // 从主题中获取对应状态量的样式\n    Element.prototype.getStateStyle = function (stateName, shapeKey) {\n        var statesStyle = this.getStatesStyle();\n        var stateCfg = get(statesStyle, [stateName, 'style'], {});\n        var shapeStyle = stateCfg[shapeKey] || stateCfg;\n        if (isFunction(shapeStyle)) {\n            return shapeStyle(this);\n        }\n        return shapeStyle;\n    };\n    // 获取动画配置\n    Element.prototype.getAnimateCfg = function (animateType) {\n        var _this = this;\n        var animate = this.animate;\n        if (animate) {\n            var cfg_1 = animate[animateType];\n            if (cfg_1) {\n                // 增加动画的回调函数，如果外部传入了，则先执行外部，然后发射 geometry 的 animate 事件\n                return __assign(__assign({}, cfg_1), { callback: function () {\n                        var _a;\n                        isFunction(cfg_1.callback) && cfg_1.callback();\n                        (_a = _this.geometry) === null || _a === void 0 ? void 0 : _a.emit(GEOMETRY_LIFE_CIRCLE.AFTER_DRAW_ANIMATE);\n                    } });\n            }\n            return cfg_1;\n        }\n        return null;\n    };\n    // 绘制图形\n    Element.prototype.drawShape = function (model, isUpdate) {\n        var _a;\n        if (isUpdate === void 0) { isUpdate = false; }\n        var _b = this, shapeFactory = _b.shapeFactory, container = _b.container, shapeType = _b.shapeType;\n        // 自定义 shape 有可能返回空 shape\n        this.shape = shapeFactory.drawShape(shapeType, model, container);\n        if (this.shape) {\n            this.setShapeInfo(this.shape, model); // 存储绘图数据\n            // @ts-ignore\n            var name_1 = this.shape.cfg.name;\n            // 附加 element 的 name, name 现在支持数组了，很好用了\n            if (!name_1) {\n                // 这个地方如果用户添加了 name, 则附加 name ，否则就添加自己的 name\n                // @ts-ignore\n                this.shape.cfg.name = ['element', this.shapeFactory.geometryType];\n            }\n            else if (isString(name_1)) {\n                // @ts-ignore\n                this.shape.cfg.name = ['element', name_1];\n            }\n            // 执行入场动画\n            var animateType = isUpdate ? 'enter' : 'appear';\n            var animateCfg = this.getAnimateCfg(animateType);\n            if (animateCfg) {\n                // 开始执行动画的生命周期\n                (_a = this.geometry) === null || _a === void 0 ? void 0 : _a.emit(GEOMETRY_LIFE_CIRCLE.BEFORE_DRAW_ANIMATE);\n                doAnimate(this.shape, animateCfg, {\n                    coordinate: shapeFactory.coordinate,\n                    toAttrs: __assign({}, this.shape.attr()),\n                });\n            }\n        }\n    };\n    // 获取虚拟 Group\n    Element.prototype.getOffscreenGroup = function () {\n        if (!this.offscreenGroup) {\n            var GroupCtor = this.container.getGroupBase(); // 获取分组的构造函数\n            this.offscreenGroup = new GroupCtor({});\n        }\n        return this.offscreenGroup;\n    };\n    // 设置 shape 上需要携带的信息\n    Element.prototype.setShapeInfo = function (shape, data) {\n        var _this = this;\n        // @ts-ignore\n        shape.cfg.origin = data;\n        // @ts-ignore\n        shape.cfg.element = this;\n        if (shape.isGroup()) {\n            var children = shape.get('children');\n            children.forEach(function (child) {\n                _this.setShapeInfo(child, data);\n            });\n        }\n    };\n    // 更新当前 shape 的样式\n    Element.prototype.syncShapeStyle = function (sourceShape, targetShape, states, animateCfg, index) {\n        var _this = this;\n        var _a;\n        if (states === void 0) { states = []; }\n        if (index === void 0) { index = 0; }\n        if (!sourceShape || !targetShape) {\n            return;\n        }\n        // 所有的 shape 都需要同步 clip\n        var clip = sourceShape.get('clipShape');\n        var newClip = targetShape.get('clipShape');\n        this.syncShapeStyle(clip, newClip, states, animateCfg);\n        if (sourceShape.isGroup()) {\n            var children = sourceShape.get('children');\n            var newChildren = targetShape.get('children');\n            for (var i = 0; i < children.length; i++) {\n                this.syncShapeStyle(children[i], newChildren[i], states, animateCfg, index + i);\n            }\n        }\n        else {\n            if (!isEmpty(states) && !isEqual(states, ['reset'])) {\n                var name_2 = sourceShape.get('name');\n                if (isArray(name_2)) {\n                    // 会附加 element 的 name\n                    name_2 = name_2[1];\n                }\n                each(states, function (state) {\n                    // background shape 不进行状态样式设置\n                    if (targetShape.get('name') !== BACKGROUND_SHAPE) {\n                        var style = _this.getStateStyle(state, name_2 || index); // 如果用户没有设置 name，则默认根据索引值\n                        targetShape.attr(style);\n                    }\n                });\n            }\n            var newAttrs = getReplaceAttrs(sourceShape, targetShape);\n            if (this.animate) {\n                if (animateCfg) {\n                    (_a = this.geometry) === null || _a === void 0 ? void 0 : _a.emit(GEOMETRY_LIFE_CIRCLE.BEFORE_DRAW_ANIMATE);\n                    // 需要进行动画\n                    doAnimate(sourceShape, animateCfg, {\n                        coordinate: this.shapeFactory.coordinate,\n                        toAttrs: newAttrs,\n                        shapeModel: this.model,\n                    });\n                }\n                else if (!isEmpty(states)) {\n                    sourceShape.stopAnimate();\n                    sourceShape.animate(newAttrs, {\n                        duration: 300,\n                    });\n                }\n                else {\n                    sourceShape.attr(newAttrs);\n                }\n            }\n            else {\n                sourceShape.attr(newAttrs);\n            }\n        }\n    };\n    Element.prototype.getShapeType = function (model) {\n        var shape = get(model, 'shape');\n        return isArray(shape) ? shape[0] : shape;\n    };\n    return Element;\n}(Base));\nexport default Element;\n//# sourceMappingURL=index.js.map","var GEOMETRY_LABELS_MAP = {};\nvar GEOMETRY_LABELS_LAYOUT_MAP = {};\n/**\n * 获取 `type` 对应的 [[GeometryLabel]] 类\n * @param type\n * @returns\n */\nexport function getGeometryLabel(type) {\n    return GEOMETRY_LABELS_MAP[type.toLowerCase()];\n}\n/**\n * 注册定义的 GeometryLabel 类\n * @param type GeometryLabel 类型名称\n * @param ctor GeometryLabel 类\n */\nexport function registerGeometryLabel(type, ctor) {\n    GEOMETRY_LABELS_MAP[type.toLowerCase()] = ctor;\n}\n/**\n * 获取 `type` 对应的 [[GeometryLabelsLayoutFn]] label 布局函数\n * @param type 布局函数名称\n * @returns\n */\nexport function getGeometryLabelLayout(type) {\n    return GEOMETRY_LABELS_LAYOUT_MAP[type.toLowerCase()];\n}\n/**\n * 注册定义的 label 布局函数\n * @param type label 布局函数名称\n * @param layoutFn label 布局函数\n */\nexport function registerGeometryLabelLayout(type, layoutFn) {\n    GEOMETRY_LABELS_LAYOUT_MAP[type.toLowerCase()] = layoutFn;\n}\n//# sourceMappingURL=index.js.map","import { __assign } from \"tslib\";\nimport { parsePathString } from '@antv/path-util';\nimport { deepMix, get, upperFirst } from '@antv/util';\nimport { convertNormalPath, convertPolarPath } from './util/path';\n/** ShapeFactory 基类 */\nvar ShapeFactoryBase = {\n    /** 坐标系对象 */\n    coordinate: null,\n    /** 默认绘制的 Shape 类型 */\n    defaultShapeType: null,\n    /** 主题样式 */\n    theme: null,\n    /**\n     * 获取 shape 绘制需要的关键点\n     * @param shapeType shape 类型\n     * @param shapePoint 每条数据映射后的坐标点以及 size 数值\n     * @returns 图形关键点信息\n     */\n    getShapePoints: function (shapeType, shapePoint) {\n        var shape = this.getShape(shapeType);\n        if (shape.getPoints) {\n            return shape.getPoints(shapePoint);\n        }\n        return this.getDefaultPoints(shapePoint);\n    },\n    /**\n     * 根据 shape 类型获取具体的 shape 实例\n     * @param shapeType string shape 的类型\n     * @returns\n     */\n    getShape: function (shapeType) {\n        var shape = this[shapeType] || this[this.defaultShapeType];\n        shape.coordinate = this.coordinate;\n        return shape;\n    },\n    /**\n     * 获取 shape 的默认关键点\n     * @override\n     */\n    getDefaultPoints: function () {\n        return [];\n    },\n    /**\n     * 获取 shape 的默认绘制样式 (内置的 shapeFactory 均有注册默认样式)\n     */\n    getDefaultStyle: function (geometryTheme) {\n        return get(geometryTheme, [this.defaultShapeType, 'default', 'style'], {});\n    },\n    /**\n     * 获取 shape 对应的缩略图配置信息。\n     * @param shapeType shape 类型\n     * @param color 颜色\n     * @param isInPolar 是否在极坐标系下\n     * @returns 返回缩略图 marker 配置。\n     */\n    getMarker: function (shapeType, markerCfg) {\n        var shape = this.getShape(shapeType);\n        if (!shape.getMarker) {\n            var defaultShapeType = this.defaultShapeType;\n            shape = this.getShape(defaultShapeType);\n        }\n        var theme = this.theme;\n        var shapeStyle = get(theme, [shapeType, 'default'], {});\n        var markerStyle = shape.getMarker(markerCfg);\n        return deepMix({}, shapeStyle, markerStyle);\n    },\n    /**\n     * 绘制 shape\n     * @override\n     * @param shapeType 绘制的 shape 类型\n     * @param cfg 绘制 shape 需要的信息\n     * @param element Element 实例\n     * @returns\n     */\n    drawShape: function (shapeType, cfg, container) {\n        var shape = this.getShape(shapeType);\n        return shape.draw(cfg, container);\n    },\n};\n/** Shape 基类 */\nvar ShapeBase = {\n    /** 坐标系对象 */\n    coordinate: null,\n    /**\n     * 将归一化的 path 转换成坐标系下的 path\n     * @param path 归一化的路径\n     * @returns\n     */\n    parsePath: function (path) {\n        var coordinate = this.coordinate;\n        var parsedPath = parsePathString(path);\n        if (coordinate.isPolar) {\n            parsedPath = convertPolarPath(coordinate, parsedPath);\n        }\n        else {\n            parsedPath = convertNormalPath(coordinate, parsedPath);\n        }\n        return parsedPath;\n    },\n    /**\n     * 将归一化的坐标转换成画布坐标\n     * @param point 归一化的坐标点数据\n     * @returns\n     */\n    parsePoint: function (point) {\n        var coordinate = this.coordinate;\n        return coordinate.convert(point);\n    },\n    /**\n     * 0～1 points 转 画布 points\n     * @param points 节点集合\n     * @returns\n     */\n    parsePoints: function (points) {\n        var coordinate = this.coordinate;\n        return points.map(function (point) {\n            return coordinate.convert(point);\n        });\n    },\n    /**\n     * 绘制 shape\n     * @override\n     */\n    draw: function (cfg, container) { },\n};\nvar ShapeFactoryMap = {};\n/**\n * 注册 ShapeFactory。\n * @param factoryName  ShapeFactory 名称，对应 Geometry 几何标记名称。\n * @param cfg 注册 ShapeFactory 需要覆写定义的属性。\n * @returns 返回 ShapeFactory 对象。\n */\nexport function registerShapeFactory(factoryName, cfg) {\n    var className = upperFirst(factoryName);\n    var geomObj = __assign(__assign(__assign({}, ShapeFactoryBase), cfg), { geometryType: factoryName });\n    ShapeFactoryMap[className] = geomObj;\n    return geomObj;\n}\n/**\n * 注册 Shape。\n * @param factoryName 对应的 ShapeFactory 名称。\n * @param shapeType 注册的 shape 名称。\n * @param cfg 注册 Shape 需要覆写定义的属性。\n * @returns shape 返回注册的 shape 对象。\n */\nexport function registerShape(factoryName, shapeType, cfg) {\n    var className = upperFirst(factoryName);\n    var factory = ShapeFactoryMap[className];\n    var shapeObj = __assign(__assign({}, ShapeBase), cfg);\n    factory[shapeType] = shapeObj;\n    return shapeObj;\n}\n/**\n * 获取 factoryName 对应的 shapeFactory\n * @param factoryName\n * @returns shape factory\n */\nexport function getShapeFactory(factoryName) {\n    var className = upperFirst(factoryName);\n    return ShapeFactoryMap[className];\n}\n//# sourceMappingURL=base.js.map","import { __values } from \"tslib\";\nimport { groupToMap } from '@antv/util';\n/** @ignore */\nexport function group(data, fields, appendConditions) {\n    var e_1, _a;\n    if (appendConditions === void 0) { appendConditions = {}; }\n    if (!fields) {\n        return [data];\n    }\n    var groups = groupToMap(data, fields);\n    var array = [];\n    if (fields.length === 1 && appendConditions[fields[0]]) {\n        var values = appendConditions[fields[0]];\n        try {\n            for (var values_1 = __values(values), values_1_1 = values_1.next(); !values_1_1.done; values_1_1 = values_1.next()) {\n                var value = values_1_1.value;\n                var arr = groups[\"_\".concat(value)];\n                if (arr) {\n                    // 可能存在用户设置 values ，但是数据中没有对应的字段，则这时候 arr 就为 null\n                    array.push(arr);\n                }\n            }\n        }\n        catch (e_1_1) { e_1 = { error: e_1_1 }; }\n        finally {\n            try {\n                if (values_1_1 && !values_1_1.done && (_a = values_1.return)) _a.call(values_1);\n            }\n            finally { if (e_1) throw e_1.error; }\n        }\n    }\n    else {\n        for (var k in groups) {\n            if (groups.hasOwnProperty(k)) {\n                var eachGroup = groups[k];\n                array.push(eachGroup);\n            }\n        }\n    }\n    return array;\n}\n//# sourceMappingURL=group-data.js.map","import isArray from './is-array';\nimport isFunction from './is-function';\nimport groupBy from './group-by';\n/**\n * 将数据分组成 map\n * @param data\n * @param condition\n */\nexport default function groupToMap(data, condition) {\n    if (!condition) {\n        return {\n            0: data,\n        };\n    }\n    if (!isFunction(condition)) {\n        // 如果是字符串，则按照 a*b 风格成数组\n        var paramscondition_1 = isArray(condition) ? condition : condition.replace(/\\s+/g, '').split('*');\n        condition = function (row) {\n            var unique = '_'; // 避免出现数字作为Key的情况，会进行按照数字的排序\n            // 根据字段列表的值，拼接成 key\n            for (var i = 0, l = paramscondition_1.length; i < l; i++) {\n                unique += row[paramscondition_1[i]] && row[paramscondition_1[i]].toString();\n            }\n            return unique;\n        };\n    }\n    return groupBy(data, condition);\n}\n//# sourceMappingURL=group-to-map.js.map","import { isEqual, some } from '@antv/util';\n/**\n * @ignore\n * Determines whether model is change\n * @param currentModel\n * @param preModel\n * @returns\n */\nexport function isModelChange(currentModel, preModel) {\n    return some(['color', 'shape', 'size', 'x', 'y', 'isInCircle', 'data', 'style', 'defaultStyle', 'points', 'mappingData'], function (key) {\n        return !isEqual(currentModel[key], preModel[key]);\n    });\n}\n//# sourceMappingURL=is-model-change.js.map","import { isArray } from '@antv/util';\n/** @ignore */\nexport function parseFields(field) {\n    if (isArray(field)) {\n        return field;\n    }\n    return field.split('*');\n}\n//# sourceMappingURL=parse-fields.js.map","/**\n * 对比当前元素和之前的元素，返回 added, updated, removed\n * @param keyItem 之前的元素的，按照 key-item 的 object 的形式存储\n * @param keys 现在的元素，按照 array 的形式存储\n * @returns 由 added, updated, removed array 构成的 object\n */\nexport function diff(keyItem, keys) {\n    var added = [];\n    var updated = [];\n    var removed = [];\n    var keyIncluded = new Map();\n    for (var i = 0; i < keys.length; i++) {\n        var key = keys[i];\n        if (keyItem[key])\n            updated.push(key);\n        else\n            added.push(key);\n        keyIncluded.set(key, true);\n    }\n    Object.keys(keyItem).forEach(function (key) {\n        if (!keyIncluded.has(key))\n            removed.push(key);\n    });\n    return {\n        added: added,\n        updated: updated,\n        removed: removed,\n    };\n}\n//# sourceMappingURL=diff.js.map","import { __assign, __awaiter, __extends, __generator, __read, __spreadArray, __values } from \"tslib\";\nimport { getAdjust as getAdjustClass } from '@antv/adjust';\nimport { getAttribute as getAttributeClass } from '@antv/attr';\nimport { clone, deepMix, each, flatten, get, isArray, isEmpty, isEqual, isFunction, isNil, isNumber, isObject, isPlainObject, isString, set, } from '@antv/util';\nimport { doGroupAppearAnimate, getDefaultAnimateCfg } from '../animate';\nimport Base from '../base';\nimport { FIELD_ORIGIN, GEOMETRY_LIFE_CIRCLE, GROUP_ATTRS } from '../constant';\nimport { uniq } from '../util/helper';\nimport Element from './element';\nimport { getGeometryLabel } from './label';\nimport { getShapeFactory } from './shape/base';\nimport { group } from './util/group-data';\nimport { isModelChange } from './util/is-model-change';\nimport { parseFields } from './util/parse-fields';\nimport { diff } from './util/diff';\nimport { inferScaleType } from '../util/scale';\nimport { getXDimensionLength } from '../util/coordinate';\n/**\n * Geometry 几何标记基类，主要负责数据到图形属性的映射以及绘制逻辑。\n */\nvar Geometry = /** @class */ (function (_super) {\n    __extends(Geometry, _super);\n    /**\n     * 创建 Geometry 实例。\n     * @param cfg\n     */\n    function Geometry(cfg) {\n        var _this = _super.call(this, cfg) || this;\n        /** Geometry 几何标记类型。 */\n        _this.type = 'base';\n        // 内部产生的属性\n        /** Attribute map  */\n        _this.attributes = {};\n        /** Element map */\n        _this.elements = [];\n        /** 使用 key-value 结构存储 Element，key 为每个 Element 实例对应的唯一 ID */\n        _this.elementsMap = {};\n        /** animate 配置项 */\n        _this.animateOption = true;\n        /** 图形属性映射配置 */\n        _this.attributeOption = {};\n        /** 存储上一次渲染时的 element 映射表，用于更新逻辑 */\n        _this.lastElementsMap = {};\n        /** 是否生成多个点来绘制图形。 */\n        _this.generatePoints = false;\n        /** 存储发生图形属性映射前的数据 */\n        _this.beforeMappingData = null;\n        _this.adjusts = {};\n        _this.idFields = [];\n        _this.hasSorted = false;\n        _this.isCoordinateChanged = false;\n        var container = cfg.container, labelsContainer = cfg.labelsContainer, coordinate = cfg.coordinate, data = cfg.data, _a = cfg.sortable, sortable = _a === void 0 ? false : _a, _b = cfg.visible, visible = _b === void 0 ? true : _b, theme = cfg.theme, _c = cfg.scales, scales = _c === void 0 ? {} : _c, _d = cfg.scaleDefs, scaleDefs = _d === void 0 ? {} : _d, \n        // 柱状图间隔与宽度相关配置\n        intervalPadding = cfg.intervalPadding, dodgePadding = cfg.dodgePadding, maxColumnWidth = cfg.maxColumnWidth, minColumnWidth = cfg.minColumnWidth, columnWidthRatio = cfg.columnWidthRatio, roseWidthRatio = cfg.roseWidthRatio, multiplePieWidthRatio = cfg.multiplePieWidthRatio, zIndexReversed = cfg.zIndexReversed, sortZIndex = cfg.sortZIndex, useDeferredLabel = cfg.useDeferredLabel;\n        _this.container = container;\n        _this.labelsContainer = labelsContainer;\n        _this.coordinate = coordinate;\n        _this.data = data;\n        _this.sortable = sortable;\n        _this.visible = visible;\n        _this.userTheme = theme;\n        _this.scales = scales;\n        _this.scaleDefs = scaleDefs;\n        // 柱状图间隔与宽度相关配置\n        _this.intervalPadding = intervalPadding;\n        _this.dodgePadding = dodgePadding;\n        _this.maxColumnWidth = maxColumnWidth;\n        _this.minColumnWidth = minColumnWidth;\n        _this.columnWidthRatio = columnWidthRatio;\n        _this.roseWidthRatio = roseWidthRatio;\n        _this.multiplePieWidthRatio = multiplePieWidthRatio;\n        _this.zIndexReversed = zIndexReversed;\n        _this.sortZIndex = sortZIndex;\n        _this.useDeferredLabel = useDeferredLabel ? (typeof useDeferredLabel === 'number' ? useDeferredLabel : Infinity) : null;\n        return _this;\n    }\n    /**\n     * 配置 position 通道映射规则。\n     *\n     * @example\n     * ```typescript\n     * // 数据结构: [{ x: 'A', y: 10, color: 'red' }]\n     * geometry.position('x*y');\n     * geometry.position([ 'x', 'y' ]);\n     * geometry.position({\n     *   fields: [ 'x', 'y' ],\n     * });\n     * ```\n     *\n     * @param cfg 映射规则\n     * @returns\n     */\n    Geometry.prototype.position = function (cfg) {\n        var positionCfg = cfg;\n        if (!isPlainObject(cfg)) {\n            // 字符串字段或者数组字段\n            positionCfg = {\n                fields: parseFields(cfg),\n            };\n        }\n        var fields = get(positionCfg, 'fields');\n        if (fields.length === 1) {\n            // 默认填充一维 1*xx\n            fields.unshift('1');\n            set(positionCfg, 'fields', fields);\n        }\n        set(this.attributeOption, 'position', positionCfg);\n        return this;\n    };\n    Geometry.prototype.color = function (field, cfg) {\n        this.createAttrOption('color', field, cfg);\n        return this;\n    };\n    Geometry.prototype.shape = function (field, cfg) {\n        this.createAttrOption('shape', field, cfg);\n        return this;\n    };\n    Geometry.prototype.size = function (field, cfg) {\n        this.createAttrOption('size', field, cfg);\n        return this;\n    };\n    /**\n     * 设置数据调整方式。G2 目前内置了四种类型：\n     * 1. dodge\n     * 2. stack\n     * 3. symmetric\n     * 4. jitter\n     *\n     *\n     * **Tip**\n     * + 对于 'dodge' 类型，可以额外进行如下属性的配置:\n     * ```typescript\n     * geometry.adjust('dodge', {\n     *   marginRatio: 0, // 取 0 到 1 范围的值（相对于每个柱子宽度），用于控制一个分组中柱子之间的间距\n     *   dodgeBy: 'x', // 该属性只对 'dodge' 类型生效，声明以哪个数据字段为分组依据\n     * });\n     * ```\n     *\n     * + 对于 'stack' 类型，可以额外进行如下属性的配置:\n     * ```typescript\n     * geometry.adjust('stack', {\n     *   reverseOrder: false, // 用于控制是否对数据进行反序操作\n     * });\n     * ```\n     *\n     * @example\n     * ```typescript\n     * geometry.adjust('stack');\n     *\n     * geometry.adjust({\n     *   type: 'stack',\n     *   reverseOrder: false,\n     * });\n     *\n     * // 组合使用 adjust\n     * geometry.adjust([ 'stack', 'dodge' ]);\n     *\n     * geometry.adjust([\n     *   { type: 'stack' },\n     *   { type: 'dodge', dodgeBy: 'x' },\n     * ]);\n     * ```\n     *\n     * @param adjustCfg 数据调整配置\n     * @returns\n     */\n    Geometry.prototype.adjust = function (adjustCfg) {\n        var adjusts = adjustCfg;\n        if (isString(adjustCfg) || isPlainObject(adjustCfg)) {\n            adjusts = [adjustCfg];\n        }\n        each(adjusts, function (adjust, index) {\n            if (!isObject(adjust)) {\n                adjusts[index] = { type: adjust };\n            }\n        });\n        this.adjustOption = adjusts;\n        return this;\n    };\n    Geometry.prototype.style = function (field, styleFunc) {\n        if (isString(field)) {\n            var fields = parseFields(field);\n            this.styleOption = {\n                fields: fields,\n                callback: styleFunc,\n            };\n        }\n        else {\n            var _a = field, fields = _a.fields, callback = _a.callback, cfg = _a.cfg;\n            if (fields || callback || cfg) {\n                this.styleOption = field;\n            }\n            else {\n                this.styleOption = {\n                    cfg: field,\n                };\n            }\n        }\n        return this;\n    };\n    Geometry.prototype.tooltip = function (field, cfg) {\n        if (isString(field)) {\n            var fields = parseFields(field);\n            this.tooltipOption = {\n                fields: fields,\n                callback: cfg,\n            };\n        }\n        else {\n            this.tooltipOption = field;\n        }\n        return this;\n    };\n    /**\n     * Geometry 动画配置。\n     *\n     * + `animate(false)` 关闭动画\n     * + `animate(true)` 开启动画，默认开启。\n     *\n     * 我们将动画分为四个场景：\n     * 1. appear: 图表第一次加载时的入场动画；\n     * 2. enter: 图表绘制完成，发生更新后，产生的新图形的进场动画；\n     * 3. update: 图表绘制完成，数据发生变更后，有状态变更的图形的更新动画；\n     * 4. leave: 图表绘制完成，数据发生变更后，被销毁图形的销毁动画。\n     *\n     * @example\n     * ```typescript\n     * animate({\n     *   enter: {\n     *     duration: 1000, // enter 动画执行时间\n     *   },\n     *   leave: false, // 关闭 leave 销毁动画\n     * });\n     * ```\n     *\n     * @param cfg 动画配置\n     * @returns\n     */\n    Geometry.prototype.animate = function (cfg) {\n        this.animateOption = cfg;\n        return this;\n    };\n    Geometry.prototype.label = function (field, secondParam, thirdParam) {\n        if (isString(field)) {\n            var labelOption = {};\n            var fields = parseFields(field);\n            labelOption.fields = fields;\n            if (isFunction(secondParam)) {\n                labelOption.callback = secondParam;\n            }\n            else if (isPlainObject(secondParam)) {\n                labelOption.cfg = secondParam;\n            }\n            if (thirdParam) {\n                labelOption.cfg = thirdParam;\n            }\n            this.labelOption = labelOption;\n        }\n        else {\n            this.labelOption = field;\n        }\n        return this;\n    };\n    /**\n     * 设置状态对应的样式。\n     *\n     * @example\n     * ```ts\n     * chart.interval().state({\n     *   selected: {\n     *     animate: { duration: 100, easing: 'easeLinear' },\n     *     style: {\n     *       lineWidth: 2,\n     *       stroke: '#000',\n     *     },\n     *   },\n     * });\n     * ```\n     *\n     * 如果图形 shape 是由多个 shape 组成，即为一个 G.Group 对象，那么针对 group 中的每个 shape，我们需要使用下列方式进行状态样式设置：\n     * 如果我们为 group 中的每个 shape 设置了 'name' 属性(shape.set('name', 'xx'))，则以 'name' 作为 key，否则默认以索引值（即 shape 的 添加顺序）为 key。\n     *\n     * ```ts\n     * chart.interval().shape('groupShape').state({\n     *   selected: {\n     *     style: {\n     *       0: { lineWidth: 2 },\n     *       1: { fillOpacity: 1 },\n     *     }\n     *   }\n     * });\n     * ```\n     *\n     * @param cfg 状态样式\n     */\n    Geometry.prototype.state = function (cfg) {\n        this.stateOption = cfg;\n        return this;\n    };\n    /**\n     * 用于向 shape 中传入自定义的数据。目前可能仅仅可能用于在自定义 shape 的时候，像自定义 shape 中传入自定义的数据，方便实现自定义 shape 的配置能力。\n     *\n     * @example\n     * ```ts\n     * chart.interval().customInfo({ yourData: 'hello, g2!' });\n     * ```\n     *\n     * 然后在自定义 shape 的时候，可以拿到这个信息。\n     *\n     * ```ts\n     * registerShape('interval', 'your-shape', {\n     *   draw(shapeInfo, container) {\n     *     const { customInfo } = shapeInfo;\n     *     console.log(customInfo); // will log { yourData: 'hello, g2!' }.\n     *   }\n     * });\n     * ```\n     *\n     * @param cfg\n     */\n    Geometry.prototype.customInfo = function (cfg) {\n        this.customOption = cfg;\n        return this;\n    };\n    /**\n     * 初始化 Geomtry 实例：\n     * 创建 [[Attribute]] and [[Scale]] 实例，进行数据处理，包括分组、数值化以及数据调整。\n     */\n    Geometry.prototype.init = function (cfg) {\n        if (cfg === void 0) { cfg = {}; }\n        this.setCfg(cfg);\n        this.initAttributes(); // 创建图形属性\n        // 数据加工：分组 -> 数字化 -> adjust\n        this.processData(this.data);\n        // 调整 scale\n        this.adjustScale();\n    };\n    /**\n     * Geometry 更新。\n     * @param [cfg] 更新的配置\n     */\n    Geometry.prototype.update = function (cfg) {\n        if (cfg === void 0) { cfg = {}; }\n        var data = cfg.data, isDataChanged = cfg.isDataChanged, isCoordinateChanged = cfg.isCoordinateChanged;\n        var _a = this, attributeOption = _a.attributeOption, lastAttributeOption = _a.lastAttributeOption;\n        if (!isEqual(attributeOption, lastAttributeOption)) {\n            // 映射发生改变，则重新创建图形属性\n            this.init(cfg);\n        }\n        else if (data && (isDataChanged || !isEqual(data, this.data))) {\n            // 数据发生变化\n            this.setCfg(cfg);\n            this.initAttributes(); // 创建图形属性\n            this.processData(data); // 数据加工：分组 -> 数字化 -> adjust\n        }\n        else {\n            // 有可能 coordinate 变化\n            this.setCfg(cfg);\n        }\n        // 调整 scale\n        this.adjustScale();\n        this.isCoordinateChanged = isCoordinateChanged;\n    };\n    /**\n     * 将原始数据映射至图形空间，同时创建图形对象。\n     */\n    Geometry.prototype.paint = function (isUpdate) {\n        var _this = this;\n        if (isUpdate === void 0) { isUpdate = false; }\n        if (this.animateOption) {\n            this.animateOption = deepMix({}, getDefaultAnimateCfg(this.type, this.coordinate), this.animateOption);\n        }\n        this.defaultSize = undefined;\n        this.elementsMap = {};\n        this.elements = [];\n        var offscreenGroup = this.getOffscreenGroup();\n        offscreenGroup.clear();\n        var beforeMappingData = this.beforeMappingData;\n        var dataArray = this.beforeMapping(beforeMappingData);\n        this.dataArray = new Array(dataArray.length);\n        for (var i = 0; i < dataArray.length; i++) {\n            var data = dataArray[i];\n            this.dataArray[i] = this.mapping(data);\n        }\n        this.updateElements(this.dataArray, isUpdate);\n        this.lastElementsMap = this.elementsMap;\n        if (this.canDoGroupAnimation(isUpdate)) {\n            // 如果用户没有配置 appear.animation，就默认走整体动画\n            var container = this.container;\n            var type = this.type;\n            var coordinate = this.coordinate;\n            var animateCfg = get(this.animateOption, 'appear');\n            var yScale = this.getYScale();\n            var yMinPoint = coordinate.convert({\n                x: 0,\n                y: yScale.scale(this.getYMinValue()),\n            });\n            doGroupAppearAnimate(container, animateCfg, type, coordinate, yMinPoint);\n        }\n        // 添加 label\n        if (this.labelOption) {\n            var deferred = this.useDeferredLabel;\n            var callback = (function () { return _this.renderLabels(flatten(_this.dataArray), isUpdate); }).bind(this);\n            if (typeof deferred === 'number') {\n                // Use `requestIdleCallback` to render labels in idle time (like react fiber)\n                var timeout = (typeof deferred === 'number' && deferred !== Infinity) ? deferred : 0;\n                if (!window.requestIdleCallback) {\n                    setTimeout(callback, timeout);\n                }\n                else {\n                    var options = timeout && timeout !== Infinity ? { timeout: timeout } : undefined;\n                    window.requestIdleCallback(callback, options);\n                }\n            }\n            else {\n                callback();\n            }\n        }\n        // 缓存，用于更新\n        this.lastAttributeOption = __assign({}, this.attributeOption);\n        if (this.visible === false) {\n            // 用户在初始化的时候声明 visible: false\n            this.changeVisible(false);\n        }\n    };\n    /**\n     * 清空当前 Geometry，配置项仍保留，但是内部创建的对象全部清空。\n     * @override\n     */\n    Geometry.prototype.clear = function () {\n        var _a = this, container = _a.container, geometryLabel = _a.geometryLabel, offscreenGroup = _a.offscreenGroup;\n        if (container) {\n            container.clear();\n        }\n        if (geometryLabel) {\n            geometryLabel.clear();\n        }\n        if (offscreenGroup) {\n            offscreenGroup.clear();\n        }\n        // 属性恢复至出厂状态\n        this.scaleDefs = undefined;\n        this.attributes = {};\n        this.scales = {};\n        this.elementsMap = {};\n        this.lastElementsMap = {};\n        this.elements = [];\n        this.adjusts = {};\n        this.dataArray = null;\n        this.beforeMappingData = null;\n        this.lastAttributeOption = undefined;\n        this.defaultSize = undefined;\n        this.idFields = [];\n        this.groupScales = undefined;\n        this.hasSorted = false;\n        this.isCoordinateChanged = false;\n    };\n    /**\n     * 销毁 Geometry 实例。\n     */\n    Geometry.prototype.destroy = function () {\n        this.clear();\n        var container = this.container;\n        container.remove(true);\n        if (this.offscreenGroup) {\n            this.offscreenGroup.remove(true);\n            this.offscreenGroup = null;\n        }\n        if (this.geometryLabel) {\n            this.geometryLabel.destroy();\n            this.geometryLabel = null;\n        }\n        this.theme = undefined;\n        this.shapeFactory = undefined;\n        _super.prototype.destroy.call(this);\n    };\n    /**\n     * 获取决定分组的图形属性对应的 scale 实例。\n     * @returns\n     */\n    Geometry.prototype.getGroupScales = function () {\n        return this.groupScales;\n    };\n    /**\n     * 根据名字获取图形属性实例。\n     */\n    Geometry.prototype.getAttribute = function (name) {\n        return this.attributes[name];\n    };\n    /** 获取 x 轴对应的 scale 实例。 */\n    Geometry.prototype.getXScale = function () {\n        return this.getAttribute('position').scales[0];\n    };\n    /** 获取 y 轴对应的 scale 实例。 */\n    Geometry.prototype.getYScale = function () {\n        return this.getAttribute('position').scales[1];\n    };\n    /**\n     * 获取决定分组的图形属性实例。\n     */\n    Geometry.prototype.getGroupAttributes = function () {\n        var rst = [];\n        each(this.attributes, function (attr) {\n            if (GROUP_ATTRS.includes(attr.type)) {\n                rst.push(attr);\n            }\n        });\n        return rst;\n    };\n    /** 获取图形属性默认的映射值。 */\n    Geometry.prototype.getDefaultValue = function (attrName) {\n        var value;\n        var attr = this.getAttribute(attrName);\n        if (attr && isEmpty(attr.scales)) {\n            // 获取映射至常量的值\n            value = attr.values[0];\n        }\n        return value;\n    };\n    /**\n     * 获取该数据发生图形映射后对应的 Attribute 图形空间数据。\n     * @param attr Attribute 图形属性实例。\n     * @param obj 需要进行映射的原始数据。\n     * @returns\n     */\n    Geometry.prototype.getAttributeValues = function (attr, obj) {\n        var params = [];\n        var scales = attr.scales;\n        for (var index = 0, length_1 = scales.length; index < length_1; index++) {\n            var scale = scales[index];\n            var field = scale.field;\n            if (scale.isIdentity) {\n                params.push(scale.values);\n            }\n            else {\n                params.push(obj[field]);\n            }\n        }\n        return attr.mapping.apply(attr, __spreadArray([], __read(params), false));\n    };\n    /**\n     * 获取对应的 adjust 实例\n     * @param adjustType\n     * @returns\n     */\n    Geometry.prototype.getAdjust = function (adjustType) {\n        return this.adjusts[adjustType];\n    };\n    /**\n     * 获得 coordinate 实例\n     * @returns\n     */\n    Geometry.prototype.getCoordinate = function () {\n        return this.coordinate;\n    };\n    Geometry.prototype.getData = function () {\n        return this.data;\n    };\n    /**\n     * 获取 shape 对应的 marker 样式。\n     * @param shapeName shape 具体名字\n     * @param cfg marker 信息\n     * @returns\n     */\n    Geometry.prototype.getShapeMarker = function (shapeName, cfg) {\n        var shapeFactory = this.getShapeFactory();\n        return shapeFactory.getMarker(shapeName, cfg);\n    };\n    /**\n     * 根据一定的规则查找 Geometry 的 Elements。\n     *\n     * ```typescript\n     * getElementsBy((element) => {\n     *   const data = element.getData();\n     *\n     *   return data.a === 'a';\n     * });\n     * ```\n     *\n     * @param condition 定义查找规则的回调函数。\n     * @returns\n     */\n    Geometry.prototype.getElementsBy = function (condition) {\n        return this.elements.filter(function (element) { return condition(element); });\n    };\n    /**\n     * 获取 Geometry 的所有 Elements。\n     *\n     * ```typescript\n     * getElements();\n     * ```\n     */\n    Geometry.prototype.getElements = function () {\n        return this.elements;\n    };\n    /**\n     * 获取数据对应的唯一 id。\n     * @param data Element 对应的绘制数据\n     * @returns\n     */\n    Geometry.prototype.getElementId = function (data) {\n        data = isArray(data) ? data[0] : data;\n        var originData = data[FIELD_ORIGIN];\n        // 如果用户声明了使用哪些字段作为 id 值\n        if (this.idFields.length) {\n            var elementId = originData[this.idFields[0]];\n            for (var index = 1; index < this.idFields.length; index++) {\n                elementId += '-' + originData[this.idFields[index]];\n            }\n            return elementId;\n        }\n        var type = this.type;\n        var xScale = this.getXScale();\n        var yScale = this.getYScale();\n        var xField = xScale.field || 'x';\n        var yField = yScale.field || 'y';\n        var yVal = originData[yField];\n        var xVal;\n        if (xScale.type === 'identity') {\n            xVal = xScale.values[0];\n        }\n        else {\n            xVal = originData[xField];\n        }\n        var id;\n        if (type === 'interval' || type === 'schema') {\n            id = \"\".concat(xVal);\n        }\n        else if (type === 'line' || type === 'area' || type === 'path') {\n            id = type;\n        }\n        else {\n            id = \"\".concat(xVal, \"-\").concat(yVal);\n        }\n        var groupScales = this.groupScales;\n        for (var index = 0, length_2 = groupScales.length; index < length_2; index++) {\n            var groupScale = groupScales[index];\n            var field = groupScale.field;\n            id = \"\".concat(id, \"-\").concat(originData[field]);\n        }\n        // 用户在进行 dodge 类型的 adjust 调整的时候设置了 dodgeBy 属性\n        var dodgeAdjust = this.getAdjust('dodge');\n        if (dodgeAdjust) {\n            var dodgeBy = dodgeAdjust.dodgeBy;\n            if (dodgeBy) {\n                id = \"\".concat(id, \"-\").concat(originData[dodgeBy]);\n            }\n        }\n        if (this.getAdjust('jitter')) {\n            id = \"\".concat(id, \"-\").concat(data.x, \"-\").concat(data.y);\n        }\n        return id;\n    };\n    /**\n     * 获取所有需要创建 scale 的字段名称。\n     */\n    Geometry.prototype.getScaleFields = function () {\n        var fields = [];\n        var tmpMap = new Map();\n        var _a = this, attributeOption = _a.attributeOption, labelOption = _a.labelOption, tooltipOption = _a.tooltipOption;\n        // 获取图形属性上的 fields\n        for (var attributeType in attributeOption) {\n            if (attributeOption.hasOwnProperty(attributeType)) {\n                var eachOpt = attributeOption[attributeType];\n                if (eachOpt.fields) {\n                    uniq(eachOpt.fields, fields, tmpMap);\n                }\n                else if (eachOpt.values) {\n                    // 考虑 size(10), shape('circle') 等场景\n                    uniq(eachOpt.values, fields, tmpMap);\n                }\n            }\n        }\n        // 获取 label 上的字段\n        if (labelOption && labelOption.fields) {\n            uniq(labelOption.fields, fields, tmpMap);\n        }\n        // 获取 tooltip 上的字段\n        if (isObject(tooltipOption) && tooltipOption.fields) {\n            uniq(tooltipOption.fields, fields, tmpMap);\n        }\n        return fields;\n    };\n    /**\n     * 显示或者隐藏 geometry。\n     * @param visible\n     */\n    Geometry.prototype.changeVisible = function (visible) {\n        _super.prototype.changeVisible.call(this, visible);\n        var elements = this.elements;\n        for (var index = 0, length_3 = elements.length; index < length_3; index++) {\n            var element = elements[index];\n            element.changeVisible(visible);\n        }\n        if (visible) {\n            if (this.container) {\n                this.container.show();\n            }\n            if (this.labelsContainer) {\n                this.labelsContainer.show();\n            }\n        }\n        else {\n            if (this.container) {\n                this.container.hide();\n            }\n            if (this.labelsContainer) {\n                this.labelsContainer.hide();\n            }\n        }\n    };\n    /**\n     * 获得所有的字段\n     */\n    Geometry.prototype.getFields = function () {\n        var uniqMap = new Map();\n        var fields = [];\n        Object.values(this.attributeOption).forEach(function (cfg) {\n            var fs = (cfg === null || cfg === void 0 ? void 0 : cfg.fields) || [];\n            fs.forEach(function (f) {\n                if (!uniqMap.has(f)) {\n                    fields.push(f);\n                }\n                uniqMap.set(f, true);\n            });\n        }, []);\n        return fields;\n    };\n    /**\n     * 获取当前配置中的所有分组 & 分类的字段。\n     * @return fields string[]\n     */\n    Geometry.prototype.getGroupFields = function () {\n        var groupFields = [];\n        var tmpMap = new Map(); // 用于去重过滤\n        for (var index = 0, length_4 = GROUP_ATTRS.length; index < length_4; index++) {\n            var attributeName = GROUP_ATTRS[index];\n            var cfg = this.attributeOption[attributeName];\n            if (cfg && cfg.fields) {\n                uniq(cfg.fields, groupFields, tmpMap);\n            }\n        }\n        return groupFields;\n    };\n    /**\n     * 获得图形的 x y 字段。\n     */\n    Geometry.prototype.getXYFields = function () {\n        var _a = __read(this.attributeOption.position.fields, 2), x = _a[0], y = _a[1];\n        return [x, y];\n    };\n    /**\n     * x 字段\n     * @returns\n     */\n    Geometry.prototype.getXField = function () {\n        return get(this.getXYFields(), [0]);\n    };\n    /**\n     * y 字段\n     * @returns\n     */\n    Geometry.prototype.getYField = function () {\n        return get(this.getXYFields(), [1]);\n    };\n    /**\n     * 获取该 Geometry 下所有生成的 shapes。\n     * @returns shapes\n     */\n    Geometry.prototype.getShapes = function () {\n        return this.elements.map(function (element) { return element.shape; });\n    };\n    /**\n     * 获取虚拟 Group。\n     * @returns\n     */\n    Geometry.prototype.getOffscreenGroup = function () {\n        if (!this.offscreenGroup) {\n            var GroupCtor = this.container.getGroupBase(); // 获取分组的构造函数\n            this.offscreenGroup = new GroupCtor({});\n        }\n        return this.offscreenGroup;\n    };\n    // 对数据进行排序\n    Geometry.prototype.sort = function (mappingArray) {\n        if (!this.hasSorted) {\n            // 未发生过排序\n            var xScale_1 = this.getXScale();\n            var xField_1 = xScale_1.field;\n            for (var index = 0; index < mappingArray.length; index++) {\n                var itemArr = mappingArray[index];\n                itemArr.sort(function (obj1, obj2) {\n                    return xScale_1.translate(obj1[FIELD_ORIGIN][xField_1]) - xScale_1.translate(obj2[FIELD_ORIGIN][xField_1]);\n                });\n            }\n        }\n        this.hasSorted = true;\n    };\n    /**\n     * 调整度量范围。主要针对发生层叠以及一些特殊需求的 Geometry，比如 Interval 下的柱状图 Y 轴默认从 0 开始。\n     */\n    Geometry.prototype.adjustScale = function () {\n        var yScale = this.getYScale();\n        // 如果数据发生过 stack adjust，需要调整下 yScale 的数据范围\n        if (yScale && this.getAdjust('stack')) {\n            this.updateStackRange(yScale, this.beforeMappingData);\n        }\n    };\n    /**\n     * 获取当前 Geometry 对应的 Shape 工厂实例。\n     */\n    Geometry.prototype.getShapeFactory = function () {\n        var shapeType = this.shapeType;\n        if (!getShapeFactory(shapeType)) {\n            return;\n        }\n        if (!this.shapeFactory) {\n            this.shapeFactory = clone(getShapeFactory(shapeType)); // 防止多个 view 共享一个 shapeFactory 实例，导致 coordinate 被篡改\n        }\n        // 因为这里缓存了 shapeFactory，但是外部可能会变更 coordinate，导致无法重新设置到 shapeFactory 中\n        this.shapeFactory.coordinate = this.coordinate;\n        // theme 原因同上\n        this.shapeFactory.theme = this.theme.geometries[shapeType] || {};\n        return this.shapeFactory;\n    };\n    /**\n     * 获取每个 Shape 对应的关键点数据。\n     * @param obj 经过分组 -> 数字化 -> adjust 调整后的数据记录\n     * @returns\n     */\n    Geometry.prototype.createShapePointsCfg = function (obj) {\n        var xScale = this.getXScale();\n        var yScale = this.getYScale();\n        var x = this.normalizeValues(obj[xScale.field], xScale);\n        var y; // 存在没有 y 的情况\n        if (yScale) {\n            y = this.normalizeValues(obj[yScale.field], yScale);\n        }\n        else {\n            y = obj.y ? obj.y : 0.1;\n        }\n        return {\n            x: x,\n            y: y,\n            y0: yScale ? yScale.scale(this.getYMinValue()) : undefined,\n        };\n    };\n    /**\n     * 创建 Element 实例。\n     * @param mappingDatum Element 对应的绘制数据\n     * @param [isUpdate] 是否处于更新阶段\n     * @returns element 返回创建的 Element 实例\n     */\n    Geometry.prototype.createElement = function (mappingDatum, index, isUpdate) {\n        if (isUpdate === void 0) { isUpdate = false; }\n        var container = this.container;\n        var shapeCfg = this.getDrawCfg(mappingDatum); // 获取绘制图形的配置信息\n        var shapeFactory = this.getShapeFactory();\n        var element = new Element({\n            shapeFactory: shapeFactory,\n            container: container,\n            offscreenGroup: this.getOffscreenGroup(),\n            elementIndex: index,\n        });\n        element.animate = this.animateOption;\n        element.geometry = this;\n        element.draw(shapeCfg, isUpdate); // 绘制\n        return element;\n    };\n    /**\n     * 获取每条数据对应的图形绘制数据。\n     * @param mappingDatum 映射后的数据\n     * @returns draw cfg\n     */\n    Geometry.prototype.getDrawCfg = function (mappingDatum) {\n        var originData = mappingDatum[FIELD_ORIGIN]; // 原始数据\n        var cfg = {\n            mappingData: mappingDatum,\n            data: originData,\n            x: mappingDatum.x,\n            y: mappingDatum.y,\n            color: mappingDatum.color,\n            size: mappingDatum.size,\n            isInCircle: this.coordinate.isPolar,\n            customInfo: this.customOption,\n        };\n        var shapeName = mappingDatum.shape;\n        if (!shapeName && this.getShapeFactory()) {\n            shapeName = this.getShapeFactory().defaultShapeType;\n        }\n        cfg.shape = shapeName;\n        // 获取默认样式\n        var theme = this.theme.geometries[this.shapeType];\n        cfg.defaultStyle = get(theme, [shapeName, 'default'], {}).style;\n        if (!cfg.defaultStyle && this.getShapeFactory()) {\n            cfg.defaultStyle = this.getShapeFactory().getDefaultStyle(theme);\n        }\n        var styleOption = this.styleOption;\n        if (styleOption) {\n            cfg.style = this.getStyleCfg(styleOption, originData);\n        }\n        if (this.generatePoints) {\n            cfg.points = mappingDatum.points;\n            cfg.nextPoints = mappingDatum.nextPoints;\n        }\n        return cfg;\n    };\n    Geometry.prototype.updateElements = function (mappingDataArray, isUpdate) {\n        var e_1, _a, e_2, _b, e_3, _c;\n        if (isUpdate === void 0) { isUpdate = false; }\n        var keyDatum = new Map();\n        var keys = [];\n        // 用来保持 diff 元素之后 added, updated 的相对顺序\n        var keyIndex = new Map();\n        var index = 0;\n        // 获得更新数据所有的 keys\n        // 将更新的数据用 key 索引\n        for (var i = 0; i < mappingDataArray.length; i++) {\n            var mappingData = mappingDataArray[i];\n            for (var j = 0; j < mappingData.length; j++) {\n                var mappingDatum = mappingData[j];\n                var key = this.getElementId(mappingDatum);\n                var finalKey = keyDatum.has(key) ? \"\".concat(key, \"-\").concat(i, \"-\").concat(j) : key;\n                keys.push(finalKey);\n                keyDatum.set(finalKey, mappingDatum);\n                keyIndex.set(finalKey, index);\n                index++;\n            }\n        }\n        this.elements = new Array(index);\n        var _d = diff(this.lastElementsMap, keys), added = _d.added, updated = _d.updated, removed = _d.removed;\n        try {\n            // 新建 element\n            for (var added_1 = __values(added), added_1_1 = added_1.next(); !added_1_1.done; added_1_1 = added_1.next()) {\n                var key = added_1_1.value;\n                var mappingDatum = keyDatum.get(key);\n                var i = keyIndex.get(key);\n                var element = this.createElement(mappingDatum, i, isUpdate);\n                this.elements[i] = element;\n                this.elementsMap[key] = element;\n                if (element.shape) {\n                    element.shape.set('zIndex', this.zIndexReversed ? this.elements.length - i : i);\n                }\n            }\n        }\n        catch (e_1_1) { e_1 = { error: e_1_1 }; }\n        finally {\n            try {\n                if (added_1_1 && !added_1_1.done && (_a = added_1.return)) _a.call(added_1);\n            }\n            finally { if (e_1) throw e_1.error; }\n        }\n        try {\n            // 更新 element\n            for (var updated_1 = __values(updated), updated_1_1 = updated_1.next(); !updated_1_1.done; updated_1_1 = updated_1.next()) {\n                var key = updated_1_1.value;\n                var element = this.lastElementsMap[key];\n                var mappingDatum = keyDatum.get(key);\n                var currentShapeCfg = this.getDrawCfg(mappingDatum);\n                var preShapeCfg = element.getModel();\n                var i = keyIndex.get(key);\n                if (this.isCoordinateChanged || isModelChange(currentShapeCfg, preShapeCfg)) {\n                    element.animate = this.animateOption;\n                    // 通过绘制数据的变更来判断是否需要更新，因为用户有可能会修改图形属性映射\n                    element.update(currentShapeCfg); // 更新对应的 element\n                }\n                this.elements[i] = element;\n                this.elementsMap[key] = element;\n                if (element.shape) {\n                    element.shape.set('zIndex', this.zIndexReversed ? this.elements.length - i : i);\n                }\n            }\n        }\n        catch (e_2_1) { e_2 = { error: e_2_1 }; }\n        finally {\n            try {\n                if (updated_1_1 && !updated_1_1.done && (_b = updated_1.return)) _b.call(updated_1);\n            }\n            finally { if (e_2) throw e_2.error; }\n        }\n        // 全部 setZIndex 之后，再执行 sort\n        if (this.container) {\n            this.container.sort();\n        }\n        try {\n            // 销毁被删除的 elements\n            for (var removed_1 = __values(removed), removed_1_1 = removed_1.next(); !removed_1_1.done; removed_1_1 = removed_1.next()) {\n                var key = removed_1_1.value;\n                var element = this.lastElementsMap[key];\n                // 更新动画配置，用户有可能在更新之前有对动画进行配置操作\n                element.animate = this.animateOption;\n                element.destroy();\n            }\n        }\n        catch (e_3_1) { e_3 = { error: e_3_1 }; }\n        finally {\n            try {\n                if (removed_1_1 && !removed_1_1.done && (_c = removed_1.return)) _c.call(removed_1);\n            }\n            finally { if (e_3) throw e_3.error; }\n        }\n    };\n    /**\n     * 获取渲染的 label 类型。\n     */\n    Geometry.prototype.getLabelType = function () {\n        var _a = this, labelOption = _a.labelOption, coordinate = _a.coordinate, type = _a.type;\n        var coordinateType = coordinate.type, isTransposed = coordinate.isTransposed;\n        var labelType = get(labelOption, ['cfg', 'type']);\n        if (!labelType) {\n            // 用户未定义，则进行默认的逻辑\n            if (coordinateType === 'polar') {\n                // 极坐标下使用通用的极坐标文本，转置则使用饼图\n                labelType = isTransposed ? 'pie' : 'polar';\n            }\n            else if (coordinateType === 'theta') {\n                // theta 坐标系下使用饼图文本\n                labelType = 'pie';\n            }\n            else if (type === 'interval' || type === 'polygon') {\n                labelType = 'interval';\n            }\n            else {\n                labelType = 'base';\n            }\n        }\n        return labelType;\n    };\n    /**\n     * 获取 Y 轴上的最小值。\n     */\n    Geometry.prototype.getYMinValue = function () {\n        var yScale = this.getYScale();\n        var min = yScale.min, max = yScale.max;\n        var value;\n        if (min >= 0) {\n            value = min;\n        }\n        else if (max <= 0) {\n            // 当值全位于负区间时，需要保证 ymin 在区域内，不可为 0\n            value = max;\n        }\n        else {\n            value = 0;\n        }\n        return value;\n    };\n    // 创建图形属性相关的配置项\n    Geometry.prototype.createAttrOption = function (attrName, field, cfg) {\n        if (isNil(field) || isObject(field)) {\n            if (isObject(field) && isEqual(Object.keys(field), ['values'])) {\n                // shape({ values: [ 'funnel' ] })\n                set(this.attributeOption, attrName, {\n                    fields: field.values,\n                });\n            }\n            else {\n                set(this.attributeOption, attrName, field);\n            }\n        }\n        else {\n            var attrCfg = {};\n            if (isNumber(field)) {\n                // size(3)\n                attrCfg.values = [field];\n            }\n            else {\n                attrCfg.fields = parseFields(field);\n            }\n            if (cfg) {\n                if (isFunction(cfg)) {\n                    attrCfg.callback = cfg;\n                }\n                else {\n                    attrCfg.values = cfg;\n                }\n            }\n            set(this.attributeOption, attrName, attrCfg);\n        }\n    };\n    Geometry.prototype.initAttributes = function () {\n        var _this = this;\n        var _a = this, attributes = _a.attributes, attributeOption = _a.attributeOption, theme = _a.theme, shapeType = _a.shapeType;\n        this.groupScales = [];\n        var tmpMap = {};\n        var _loop_1 = function (attrType) {\n            if (attributeOption.hasOwnProperty(attrType)) {\n                var option = attributeOption[attrType];\n                if (!option) {\n                    return { value: void 0 };\n                }\n                var attrCfg = __assign({}, option);\n                var callback = attrCfg.callback, values = attrCfg.values, _b = attrCfg.fields, fields = _b === void 0 ? [] : _b;\n                // 获取每一个字段对应的 scale\n                var scales = fields.map(function (field) {\n                    var scale = _this.scales[field];\n                    if (!tmpMap[field] && GROUP_ATTRS.includes(attrType)) {\n                        var inferedScaleType = inferScaleType(scale, get(_this.scaleDefs, field), attrType, _this.type);\n                        if (inferedScaleType === 'cat') {\n                            _this.groupScales.push(scale);\n                            tmpMap[field] = true;\n                        }\n                    }\n                    return scale;\n                });\n                attrCfg.scales = scales;\n                if (attrType !== 'position' && scales.length === 1 && scales[0].type === 'identity') {\n                    // 用户在图形通道上声明了常量字段 color('red'), size(5)\n                    attrCfg.values = scales[0].values;\n                }\n                else if (!callback && !values) {\n                    // 用户没有指定任何规则，则使用默认的映射规则\n                    if (attrType === 'size') {\n                        attrCfg.values = theme.sizes;\n                    }\n                    else if (attrType === 'shape') {\n                        attrCfg.values = theme.shapes[shapeType] || [];\n                    }\n                    else if (attrType === 'color') {\n                        if (scales.length) {\n                            // 根据数值个数使用对应的色板\n                            attrCfg.values = scales[0].values.length <= 10 ? theme.colors10 : theme.colors20;\n                        }\n                        else {\n                            attrCfg.values = theme.colors10;\n                        }\n                    }\n                }\n                var AttributeCtor = getAttributeClass(attrType);\n                attributes[attrType] = new AttributeCtor(attrCfg);\n            }\n        };\n        // 遍历每一个 attrOption，各自创建 Attribute 实例\n        for (var attrType in attributeOption) {\n            var state_1 = _loop_1(attrType);\n            if (typeof state_1 === \"object\")\n                return state_1.value;\n        }\n    };\n    // 处理数据：分组 -> 数字化 -> adjust 调整\n    Geometry.prototype.processData = function (data) {\n        var e_4, _a;\n        this.hasSorted = false;\n        var scales = this.getAttribute('position').scales;\n        var categoryScales = scales.filter(function (scale) { return scale.isCategory; });\n        var groupedArray = this.groupData(data); // 数据分组\n        var beforeAdjust = [];\n        for (var i = 0, len = groupedArray.length; i < len; i++) {\n            var subData = groupedArray[i];\n            var arr = [];\n            for (var j = 0, subLen = subData.length; j < subLen; j++) {\n                var originData = subData[j];\n                var item = {};\n                // tslint:disable-next-line: forin\n                for (var k in originData) {\n                    item[k] = originData[k];\n                }\n                item[FIELD_ORIGIN] = originData;\n                try {\n                    // 将分类数据翻译成数据, 仅对位置相关的度量进行数字化处理\n                    for (var categoryScales_1 = (e_4 = void 0, __values(categoryScales)), categoryScales_1_1 = categoryScales_1.next(); !categoryScales_1_1.done; categoryScales_1_1 = categoryScales_1.next()) {\n                        var scale = categoryScales_1_1.value;\n                        var field = scale.field;\n                        item[field] = scale.translate(item[field]);\n                    }\n                }\n                catch (e_4_1) { e_4 = { error: e_4_1 }; }\n                finally {\n                    try {\n                        if (categoryScales_1_1 && !categoryScales_1_1.done && (_a = categoryScales_1.return)) _a.call(categoryScales_1);\n                    }\n                    finally { if (e_4) throw e_4.error; }\n                }\n                arr.push(item);\n            }\n            beforeAdjust.push(arr);\n        }\n        var dataArray = this.adjustData(beforeAdjust); // 进行 adjust 数据调整\n        this.beforeMappingData = dataArray;\n        return dataArray;\n    };\n    // 调整数据\n    Geometry.prototype.adjustData = function (dataArray) {\n        var adjustOption = this.adjustOption;\n        var _a = this, intervalPadding = _a.intervalPadding, dodgePadding = _a.dodgePadding, theme = _a.theme;\n        // 兼容theme配置\n        var maxColumnWidth = this.maxColumnWidth || theme.maxColumnWidth;\n        var minColumnWidth = this.minColumnWidth || theme.minColumnWidth;\n        var columnWidthRatio = this.columnWidthRatio || theme.columnWidthRatio;\n        var result = dataArray;\n        if (adjustOption) {\n            var xScale_2 = this.getXScale();\n            var yScale = this.getYScale();\n            var xField = xScale_2.field;\n            var yField = yScale ? yScale.field : null;\n            var xDimensionLength = getXDimensionLength(this.coordinate);\n            var groupNum = xScale_2.values.length;\n            // 传入size计算相关参数，默认宽度、最大最小宽度约束\n            var sizeAttr = this.getAttribute('size');\n            var defaultSize = void 0;\n            if (sizeAttr) {\n                defaultSize = sizeAttr.values[0];\n            }\n            for (var i = 0, len = adjustOption.length; i < len; i++) {\n                var adjust = adjustOption[i];\n                var adjustCfg = __assign({ xField: xField, yField: yField, intervalPadding: intervalPadding, dodgePadding: dodgePadding, xDimensionLength: xDimensionLength, groupNum: groupNum, defaultSize: defaultSize, maxColumnWidth: maxColumnWidth, minColumnWidth: minColumnWidth, columnWidthRatio: columnWidthRatio }, adjust);\n                var type = adjust.type;\n                if (type === 'dodge') {\n                    var adjustNames = [];\n                    if (xScale_2.isCategory || xScale_2.type === 'identity') {\n                        adjustNames.push('x');\n                    }\n                    else if (!yScale) {\n                        adjustNames.push('y');\n                    }\n                    else {\n                        throw new Error('dodge is not support linear attribute, please use category attribute!');\n                    }\n                    adjustCfg.adjustNames = adjustNames;\n                    // 每个分组内每条柱子的宽度占比，用户不可指定，用户需要通过 columnWidthRatio 指定\n                    // 兼容theme配置\n                    adjustCfg.dodgeRatio = columnWidthRatio;\n                }\n                else if (type === 'stack') {\n                    var coordinate = this.coordinate;\n                    if (!yScale) {\n                        // 一维的情况下获取高度和默认size\n                        adjustCfg.height = coordinate.getHeight();\n                        var size = this.getDefaultValue('size') || 3;\n                        adjustCfg.size = size;\n                    }\n                    // 不进行 transpose 时，用户又没有设置这个参数时，默认从上向下\n                    if (!coordinate.isTransposed && isNil(adjustCfg.reverseOrder)) {\n                        adjustCfg.reverseOrder = true;\n                    }\n                }\n                var adjustCtor = getAdjustClass(type);\n                adjustCfg.dimValuesMap = {};\n                //生成dimValuesMap\n                if (xScale_2 && xScale_2.values) {\n                    adjustCfg.dimValuesMap[xScale_2.field] = xScale_2.values.map(function (v) { return xScale_2.translate(v); });\n                }\n                var adjustInstance = new adjustCtor(adjustCfg);\n                result = adjustInstance.process(result);\n                this.adjusts[type] = adjustInstance;\n            }\n        }\n        return result;\n    };\n    // 对数据进行分组\n    Geometry.prototype.groupData = function (data) {\n        var groupScales = this.getGroupScales();\n        var scaleDefs = this.scaleDefs;\n        var appendConditions = {};\n        var groupFields = [];\n        for (var index = 0; index < groupScales.length; index++) {\n            var scale = groupScales[index];\n            var field = scale.field;\n            groupFields.push(field);\n            if (get(scaleDefs, [field, 'values'])) {\n                // 用户通过 view.scale() 接口指定了 values 属性\n                appendConditions[field] = scaleDefs[field].values;\n            }\n        }\n        return group(data, groupFields, appendConditions);\n    };\n    // 更新发生层叠后的数据对应的度量范围\n    Geometry.prototype.updateStackRange = function (scale, dataArray) {\n        var mergeArray = flatten(dataArray);\n        var field = scale.field;\n        var min = scale.min;\n        var max = scale.max;\n        for (var index = 0; index < mergeArray.length; index++) {\n            var obj = mergeArray[index];\n            var tmpMin = Math.min.apply(null, obj[field]);\n            var tmpMax = Math.max.apply(null, obj[field]);\n            if (tmpMin < min) {\n                min = tmpMin;\n            }\n            if (tmpMax > max) {\n                max = tmpMax;\n            }\n        }\n        var scaleDefs = this.scaleDefs;\n        var cfg = {};\n        if (min < scale.min && !get(scaleDefs, [field, 'min'])) {\n            // 用户如果在列定义中定义了 min，则以用户定义的为准\n            cfg.min = min;\n        }\n        if (max > scale.max && !get(scaleDefs, [field, 'max'])) {\n            // 用户如果在列定义中定义了 max\n            cfg.max = max;\n        }\n        scale.change(cfg);\n    };\n    // 将数据映射至图形空间前的操作：排序以及关键点的生成\n    Geometry.prototype.beforeMapping = function (beforeMappingData) {\n        // 当初加 clone 是因为 points 的引用关系，导致更新失败，可是现在貌似复现不出来了，所以暂时不进行 clone\n        // const source = clone(beforeMappingData);\n        var source = beforeMappingData;\n        if (this.sortable) {\n            this.sort(source);\n        }\n        if (this.generatePoints) {\n            // 需要生成关键点\n            for (var index = 0, length_5 = source.length; index < length_5; index++) {\n                var currentData = source[index];\n                this.generateShapePoints(currentData);\n                var nextData = source[index + 1];\n                if (nextData) {\n                    this.generateShapePoints(nextData);\n                    currentData[0].nextPoints = nextData[0].points;\n                }\n            }\n        }\n        return source;\n    };\n    // 生成 shape 的关键点\n    Geometry.prototype.generateShapePoints = function (data) {\n        var shapeFactory = this.getShapeFactory();\n        var shapeAttr = this.getAttribute('shape');\n        for (var index = 0; index < data.length; index++) {\n            var obj = data[index];\n            var cfg = this.createShapePointsCfg(obj);\n            var shape = shapeAttr ? this.getAttributeValues(shapeAttr, obj) : null;\n            var points = shapeFactory.getShapePoints(shape, cfg);\n            obj.points = points;\n        }\n    };\n    // 将数据归一化\n    Geometry.prototype.normalizeValues = function (values, scale) {\n        var rst = [];\n        if (isArray(values)) {\n            for (var index = 0; index < values.length; index++) {\n                var value = values[index];\n                rst.push(scale.scale(value));\n            }\n        }\n        else {\n            rst = scale.scale(values);\n        }\n        return rst;\n    };\n    // 将数据映射至图形空间\n    Geometry.prototype.mapping = function (data) {\n        var attributes = this.attributes;\n        var mappingData = [];\n        for (var index = 0; index < data.length; index++) {\n            var record = data[index];\n            var newRecord = {\n                _origin: record[FIELD_ORIGIN],\n                points: record.points,\n                nextPoints: record.nextPoints,\n            };\n            for (var k in attributes) {\n                if (attributes.hasOwnProperty(k)) {\n                    var attr = attributes[k];\n                    var names = attr.names;\n                    var values = this.getAttributeValues(attr, record);\n                    if (names.length > 1) {\n                        // position 之类的生成多个字段的属性\n                        for (var j = 0; j < values.length; j += 1) {\n                            var val = values[j];\n                            var name_1 = names[j];\n                            newRecord[name_1] = isArray(val) && val.length === 1 ? val[0] : val; // 只有一个值时返回第一个属性值\n                        }\n                    }\n                    else {\n                        // values.length === 1 的判断是以下情况，获取用户设置的图形属性值\n                        // shape('a', ['dot', 'dash']), color('a', ['red', 'yellow'])\n                        newRecord[names[0]] = values.length === 1 ? values[0] : values;\n                    }\n                }\n            }\n            this.convertPoint(newRecord); // 将 x、y 转换成画布坐标\n            mappingData.push(newRecord);\n        }\n        return mappingData;\n    };\n    // 将归一化的坐标值转换成画布坐标\n    Geometry.prototype.convertPoint = function (mappingRecord) {\n        var x = mappingRecord.x, y = mappingRecord.y;\n        var rstX;\n        var rstY;\n        var obj;\n        var coordinate = this.coordinate;\n        if (isArray(x) && isArray(y)) {\n            rstX = [];\n            rstY = [];\n            for (var i = 0, j = 0, xLen = x.length, yLen = y.length; i < xLen && j < yLen; i += 1, j += 1) {\n                obj = coordinate.convert({\n                    x: x[i],\n                    y: y[j],\n                });\n                rstX.push(obj.x);\n                rstY.push(obj.y);\n            }\n        }\n        else if (isArray(y)) {\n            rstY = [];\n            for (var index = 0; index < y.length; index++) {\n                var yVal = y[index];\n                obj = coordinate.convert({\n                    x: x,\n                    y: yVal,\n                });\n                if (rstX && rstX !== obj.x) {\n                    if (!isArray(rstX)) {\n                        rstX = [rstX];\n                    }\n                    rstX.push(obj.x);\n                }\n                else {\n                    rstX = obj.x;\n                }\n                rstY.push(obj.y);\n            }\n        }\n        else if (isArray(x)) {\n            rstX = [];\n            for (var index = 0; index < x.length; index++) {\n                var xVal = x[index];\n                obj = coordinate.convert({\n                    x: xVal,\n                    y: y,\n                });\n                if (rstY && rstY !== obj.y) {\n                    if (!isArray(rstY)) {\n                        rstY = [rstY];\n                    }\n                    rstY.push(obj.y);\n                }\n                else {\n                    rstY = obj.y;\n                }\n                rstX.push(obj.x);\n            }\n        }\n        else {\n            var point = coordinate.convert({\n                x: x,\n                y: y,\n            });\n            rstX = point.x;\n            rstY = point.y;\n        }\n        mappingRecord.x = rstX;\n        mappingRecord.y = rstY;\n    };\n    // 获取 style 配置\n    Geometry.prototype.getStyleCfg = function (styleOption, originData) {\n        var _a = styleOption.fields, fields = _a === void 0 ? [] : _a, callback = styleOption.callback, cfg = styleOption.cfg;\n        if (cfg) {\n            // 用户直接配置样式属性\n            return cfg;\n        }\n        var params = fields.map(function (field) {\n            return originData[field];\n        });\n        return callback.apply(void 0, __spreadArray([], __read(params), false));\n    };\n    Geometry.prototype.setCfg = function (cfg) {\n        var _this = this;\n        var coordinate = cfg.coordinate, data = cfg.data, theme = cfg.theme, scaleDefs = cfg.scaleDefs;\n        if (coordinate) {\n            this.coordinate = coordinate;\n        }\n        if (data) {\n            this.data = data;\n        }\n        if (scaleDefs) {\n            this.scaleDefs = scaleDefs;\n            this.idFields = [];\n            each(scaleDefs, function (scaleDef, field) {\n                if (scaleDef && scaleDef.key) {\n                    _this.idFields.push(field);\n                }\n            });\n        }\n        if (theme) {\n            this.theme = this.userTheme ? deepMix({}, theme, this.userTheme) : theme; // 支持 geometry 层级的主题设置\n        }\n    };\n    Geometry.prototype.renderLabels = function (mappingArray, isUpdate) {\n        if (isUpdate === void 0) { isUpdate = false; }\n        return __awaiter(this, void 0, void 0, function () {\n            var geometryLabel, labelType, GeometryLabelsCtor, labelsMap, elementLabels, _a, _b, _c, element, labels;\n            var e_5, _d;\n            var _this = this;\n            return __generator(this, function (_e) {\n                switch (_e.label) {\n                    case 0:\n                        geometryLabel = this.geometryLabel;\n                        this.emit(GEOMETRY_LIFE_CIRCLE.BEFORE_RENDER_LABEL);\n                        if (!geometryLabel) {\n                            labelType = this.getLabelType();\n                            GeometryLabelsCtor = getGeometryLabel(labelType);\n                            geometryLabel = new GeometryLabelsCtor(this);\n                            this.geometryLabel = geometryLabel;\n                        }\n                        return [4 /*yield*/, geometryLabel.render(mappingArray, isUpdate)];\n                    case 1:\n                        _e.sent();\n                        labelsMap = geometryLabel.labelsRenderer.shapesMap;\n                        elementLabels = new Map();\n                        each(labelsMap, function (labelGroup, labelGroupId) {\n                            var labelChildren = labelGroup.getChildren() || [];\n                            for (var j = 0; j < labelChildren.length; j++) {\n                                var labelShape = labelChildren[j];\n                                var element = _this.elementsMap[labelShape.get('elementId') || labelGroupId.split(' ')[0]];\n                                if (element) {\n                                    labelShape.cfg.name = ['element', 'label'];\n                                    labelShape.cfg.element = element;\n                                    var labels = elementLabels.get(element) || new Set();\n                                    labels.add(labelGroup);\n                                    elementLabels.set(element, labels);\n                                }\n                            }\n                        });\n                        try {\n                            for (_a = __values(elementLabels.entries()), _b = _a.next(); !_b.done; _b = _a.next()) {\n                                _c = __read(_b.value, 2), element = _c[0], labels = _c[1];\n                                element.labelShape = __spreadArray([], __read(labels), false);\n                            }\n                        }\n                        catch (e_5_1) { e_5 = { error: e_5_1 }; }\n                        finally {\n                            try {\n                                if (_b && !_b.done && (_d = _a.return)) _d.call(_a);\n                            }\n                            finally { if (e_5) throw e_5.error; }\n                        }\n                        this.emit(GEOMETRY_LIFE_CIRCLE.AFTER_RENDER_LABEL);\n                        return [2 /*return*/];\n                }\n            });\n        });\n    };\n    /**\n     * 是否需要进行群组入场动画\n     * 规则：\n     * 1. 如果发生更新，则不进行\n     * 2. 如果用户关闭 geometry 动画，则不进行\n     * 3. 如果用户关闭了 appear 动画，则不进行\n     * 4. 如果用户配置了 appear.animation，则不进行\n     */\n    Geometry.prototype.canDoGroupAnimation = function (isUpdate) {\n        return (!isUpdate &&\n            this.animateOption &&\n            (get(this.animateOption, 'appear') === undefined ||\n                (get(this.animateOption, 'appear') && get(this.animateOption, ['appear', 'animation']) === undefined)));\n    };\n    return Geometry;\n}(Base));\nexport default Geometry;\n//# sourceMappingURL=base.js.map","import { ext } from '@antv/matrix-util';\nvar transform = ext.transform;\nexport { transform };\n/**\n * 对元素进行平移操作。\n * @param element 进行变换的元素\n * @param x x 方向位移\n * @param y y 方向位移\n */\nexport function translate(element, x, y) {\n    var matrix = transform(element.getMatrix(), [['t', x, y]]);\n    element.setMatrix(matrix);\n}\n/**\n * 获取元素旋转矩阵 (以元素的左上角为旋转点)\n * @param element 进行变换的元素\n * @param rotateRadian 旋转弧度\n */\nexport function getRotateMatrix(element, rotateRadian) {\n    var _a = element.attr(), x = _a.x, y = _a.y;\n    var matrix = transform(element.getMatrix(), [\n        ['t', -x, -y],\n        ['r', rotateRadian],\n        ['t', x, y],\n    ]);\n    return matrix;\n}\n/**\n * 对元素进行旋转操作。\n * @param element 进行变换的元素\n * @param rotateRadian 旋转弧度\n */\nexport function rotate(element, rotateRadian) {\n    var matrix = getRotateMatrix(element, rotateRadian);\n    element.setMatrix(matrix);\n}\n/**\n * 获取元矩阵。\n * @returns identity matrix\n */\nexport function getIdentityMatrix() {\n    return [1, 0, 0, 0, 1, 0, 0, 0, 1];\n}\n/**\n * 围绕图形中心点进行缩放\n * @param element 进行缩放的图形元素\n * @param ratio 缩放比例\n */\nexport function zoom(element, ratio) {\n    var bbox = element.getBBox();\n    var x = (bbox.minX + bbox.maxX) / 2;\n    var y = (bbox.minY + bbox.maxY) / 2;\n    element.applyToMatrix([x, y, 1]);\n    var matrix = transform(element.getMatrix(), [\n        ['t', -x, -y],\n        ['s', ratio, ratio],\n        ['t', x, y],\n    ]);\n    element.setMatrix(matrix);\n}\n//# sourceMappingURL=transform.js.map","/**\n * @file utils of label\n */\nimport { isNil, isNumber, some } from '@antv/util';\nimport { rotate } from '../../../util/transform';\n/**\n * 查找 Label Group 中的文本 shape 对象\n * @param label\n */\nexport function findLabelTextShape(label) {\n    return label.find(function (el) { return el.get('type') === 'text'; });\n}\n/**\n * 获取标签背景信息: box (无旋转) + rotation (旋转角度)\n */\nexport function getLabelBackgroundInfo(labelGroup, labelItem, padding) {\n    if (padding === void 0) { padding = [0, 0, 0, 0]; }\n    var content = labelGroup && labelGroup.getChildren()[0];\n    if (content) {\n        var labelShape = content.clone();\n        // revert rotate\n        if (labelItem === null || labelItem === void 0 ? void 0 : labelItem.rotate) {\n            rotate(labelShape, -labelItem.rotate);\n        }\n        // use `getCanvasBBox`, because if Shape is been translated, `getBBox` is not the actual box position\n        var _a = labelShape.getCanvasBBox(), x = _a.x, y = _a.y, width = _a.width, height = _a.height;\n        labelShape.destroy();\n        var boxPadding = padding;\n        if (isNil(boxPadding)) {\n            boxPadding = [2, 2, 2, 2];\n        }\n        else if (isNumber(boxPadding)) {\n            boxPadding = new Array(4).fill(boxPadding);\n        }\n        return {\n            x: x - boxPadding[3],\n            y: y - boxPadding[0],\n            width: width + boxPadding[1] + boxPadding[3],\n            height: height + boxPadding[0] + boxPadding[2],\n            rotation: (labelItem === null || labelItem === void 0 ? void 0 : labelItem.rotate) || 0,\n        };\n    }\n    return { x: 0, y: 0, width: 0, height: 0, rotation: 0 };\n}\n/**\n * 计算两个矩形之间的堆叠区域面积\n */\nexport function getOverlapArea(a, b, margin) {\n    if (margin === void 0) { margin = 0; }\n    var xOverlap = Math.max(0, Math.min(a.x + a.width + margin, b.x + b.width + margin) - Math.max(a.x - margin, b.x - margin));\n    var yOverlap = Math.max(0, Math.min(a.y + a.height + margin, b.y + b.height + margin) - Math.max(a.y - margin, b.y - margin));\n    return xOverlap * yOverlap;\n}\n/** 检测是否和已布局的堆叠 */\nexport function checkShapeOverlap(cur, dones) {\n    var box = cur.getBBox();\n    return some(dones, function (done) {\n        var target = done.getBBox();\n        return getOverlapArea(box, target, 2) > 0;\n    });\n}\n//# sourceMappingURL=index.js.map","import { each, get, isArray } from '@antv/util';\nimport { doAnimate } from '../animate';\nimport { getReplaceAttrs } from '../util/graphics';\n/**\n * @desc 更新 label (目前没有根据 id 索引，还是会存在一点小问题的，只能根据 idx 索引)\n * @done shape 属性更新\n * @done shape delete\n * @done shape append\n *\n * @param fromShape old labelShape\n * @param toShape new labelShape\n * @param cfg\n */\nexport function updateLabel(fromShape, toShape, cfg) {\n    var data = cfg.data, origin = cfg.origin, animateCfg = cfg.animateCfg, coordinate = cfg.coordinate;\n    var updateAnimateCfg = get(animateCfg, 'update');\n    fromShape.set('data', data);\n    fromShape.set('origin', origin);\n    fromShape.set('animateCfg', animateCfg);\n    fromShape.set('coordinate', coordinate);\n    fromShape.set('visible', toShape.get('visible'));\n    (fromShape.getChildren() || []).forEach(function (fromChild, idx) {\n        var toChild = toShape.getChildByIndex(idx);\n        if (!toChild) {\n            fromShape.removeChild(fromChild);\n            fromChild.remove(true);\n        }\n        else {\n            fromChild.set('data', data);\n            fromChild.set('origin', origin);\n            fromChild.set('animateCfg', animateCfg);\n            fromChild.set('coordinate', coordinate);\n            var newAttrs = getReplaceAttrs(fromChild, toChild);\n            if (updateAnimateCfg) {\n                doAnimate(fromChild, updateAnimateCfg, {\n                    toAttrs: newAttrs,\n                    coordinate: coordinate,\n                });\n            }\n            else {\n                fromChild.attr(newAttrs);\n            }\n            if (toChild.isGroup()) {\n                updateLabel(fromChild, toChild, cfg);\n            }\n        }\n    });\n    // append\n    each(toShape.getChildren(), function (child, idx) {\n        if (isArray(fromShape.getChildren()) && idx >= fromShape.getCount()) {\n            if (!child.destroyed) {\n                fromShape.add(child);\n            }\n        }\n    });\n}\n//# sourceMappingURL=update-label.js.map","import { __assign, __awaiter, __generator, __rest, __values } from \"tslib\";\nimport { deepMix, each, get, isArray, isNull } from '@antv/util';\nimport { doAnimate } from '../animate';\nimport { getGeometryLabelLayout } from '../geometry/label';\nimport { getLabelBackgroundInfo } from '../geometry/label/util';\nimport { polarToCartesian } from '../util/graphics';\nimport { rotate, translate } from '../util/transform';\nimport { FIELD_ORIGIN } from '../constant';\nimport { updateLabel } from './update-label';\n/**\n * Geometry labels 渲染组件\n */\nvar Labels = /** @class */ (function () {\n    function Labels(cfg) {\n        /** 存储当前 shape 的映射表，键值为 shape id */\n        this.shapesMap = {};\n        var layout = cfg.layout, container = cfg.container;\n        this.layout = layout;\n        this.container = container;\n    }\n    /**\n     * 渲染文本\n     */\n    Labels.prototype.render = function (items, shapes, isUpdate) {\n        if (isUpdate === void 0) { isUpdate = false; }\n        return __awaiter(this, void 0, void 0, function () {\n            var shapesMap, offscreenGroup, items_1, items_1_1, item, lastShapesMap;\n            var e_1, _a;\n            var _this = this;\n            return __generator(this, function (_b) {\n                switch (_b.label) {\n                    case 0:\n                        shapesMap = {};\n                        offscreenGroup = this.createOffscreenGroup();\n                        if (!items.length) return [3 /*break*/, 2];\n                        try {\n                            // 如果 items 空的话就不进行绘制调整操作\n                            // step 1: 在虚拟 group 中创建 shapes\n                            for (items_1 = __values(items), items_1_1 = items_1.next(); !items_1_1.done; items_1_1 = items_1.next()) {\n                                item = items_1_1.value;\n                                if (item) {\n                                    shapesMap[item.id] = this.renderLabel(item, offscreenGroup);\n                                }\n                            }\n                        }\n                        catch (e_1_1) { e_1 = { error: e_1_1 }; }\n                        finally {\n                            try {\n                                if (items_1_1 && !items_1_1.done && (_a = items_1.return)) _a.call(items_1);\n                            }\n                            finally { if (e_1) throw e_1.error; }\n                        }\n                        // [todo] Move layout into Worker.\n                        // step 2: 根据布局，调整 labels\n                        return [4 /*yield*/, this.doLayout(items, shapes, shapesMap)];\n                    case 1:\n                        // [todo] Move layout into Worker.\n                        // step 2: 根据布局，调整 labels\n                        _b.sent();\n                        // step 3.1: 绘制 labelLine\n                        this.renderLabelLine(items, shapesMap);\n                        // step 3.2: 绘制 labelBackground\n                        this.renderLabelBackground(items, shapesMap);\n                        // step 4: 根据用户设置的偏移量调整 label\n                        this.adjustLabel(items, shapesMap);\n                        _b.label = 2;\n                    case 2:\n                        lastShapesMap = this.shapesMap;\n                        each(shapesMap, function (shape, id) {\n                            if (shape.destroyed) {\n                                // label 在布局调整环节被删除了（doLayout）\n                                delete shapesMap[id];\n                            }\n                            else {\n                                if (lastShapesMap[id]) {\n                                    // 图形发生更新\n                                    var data = shape.get('data');\n                                    var origin_1 = shape.get('origin');\n                                    var coordinate = shape.get('coordinate');\n                                    var currentAnimateCfg = shape.get('animateCfg');\n                                    var currentShape = lastShapesMap[id]; // 已经在渲染树上的 shape\n                                    updateLabel(currentShape, shapesMap[id], {\n                                        data: data,\n                                        origin: origin_1,\n                                        animateCfg: currentAnimateCfg,\n                                        coordinate: coordinate,\n                                    });\n                                    shapesMap[id] = currentShape; // 保存引用\n                                }\n                                else {\n                                    // 新生成的 shape\n                                    // If container has been destroyed, no need to render labels.\n                                    if (_this.container.destroyed)\n                                        return;\n                                    _this.container.add(shape);\n                                    var animateCfg = get(shape.get('animateCfg'), isUpdate ? 'enter' : 'appear');\n                                    if (animateCfg) {\n                                        doAnimate(shape, animateCfg, {\n                                            toAttrs: __assign({}, shape.attr()),\n                                            coordinate: shape.get('coordinate'),\n                                        });\n                                    }\n                                }\n                                delete lastShapesMap[id];\n                            }\n                        });\n                        // 移除\n                        each(lastShapesMap, function (deleteShape) {\n                            var animateCfg = get(deleteShape.get('animateCfg'), 'leave');\n                            if (animateCfg) {\n                                doAnimate(deleteShape, animateCfg, {\n                                    toAttrs: null,\n                                    coordinate: deleteShape.get('coordinate'),\n                                });\n                            }\n                            else {\n                                deleteShape.remove(true); // 移除\n                            }\n                        });\n                        this.shapesMap = shapesMap;\n                        offscreenGroup.destroy();\n                        return [2 /*return*/];\n                }\n            });\n        });\n    };\n    /** 清除当前 labels */\n    Labels.prototype.clear = function () {\n        this.container.clear();\n        this.shapesMap = {};\n    };\n    /** 销毁 */\n    Labels.prototype.destroy = function () {\n        this.container.destroy();\n        this.shapesMap = null;\n    };\n    Labels.prototype.renderLabel = function (cfg, container) {\n        var id = cfg.id, elementId = cfg.elementId, data = cfg.data, mappingData = cfg.mappingData, coordinate = cfg.coordinate, animate = cfg.animate, content = cfg.content, capture = cfg.capture;\n        var shapeAppendCfg = {\n            id: id,\n            elementId: elementId,\n            capture: capture,\n            data: data,\n            origin: __assign(__assign({}, mappingData), { data: mappingData[FIELD_ORIGIN] }),\n            coordinate: coordinate,\n        };\n        var labelGroup = container.addGroup(__assign({ name: 'label', \n            // 如果 this.animate === false 或者 cfg.animate === false/null 则不进行动画，否则进行动画配置的合并\n            animateCfg: this.animate === false || animate === null || animate === false ? false : deepMix({}, this.animate, animate) }, shapeAppendCfg));\n        var labelShape;\n        if ((content.isGroup && content.isGroup()) || (content.isShape && content.isShape())) {\n            // 如果 content 是 Group 或者 Shape，根据 textAlign 调整位置后，直接将其加入 labelGroup\n            var _a = content.getCanvasBBox(), width = _a.width, height = _a.height;\n            var textAlign = get(cfg, 'textAlign', 'left');\n            var x = cfg.x;\n            var y = cfg.y - height / 2;\n            if (textAlign === 'center') {\n                x = x - width / 2;\n            }\n            else if (textAlign === 'right' || textAlign === 'end') {\n                x = x - width;\n            }\n            translate(content, x, y); // 将 label 平移至 x, y 指定的位置\n            labelShape = content;\n            labelGroup.add(content);\n        }\n        else {\n            var fill = get(cfg, ['style', 'fill']);\n            labelShape = labelGroup.addShape('text', __assign({ attrs: __assign(__assign({ x: cfg.x, y: cfg.y, textAlign: cfg.textAlign, textBaseline: get(cfg, 'textBaseline', 'middle'), text: cfg.content }, cfg.style), { fill: isNull(fill) ? cfg.color : fill }) }, shapeAppendCfg));\n        }\n        if (cfg.rotate) {\n            rotate(labelShape, cfg.rotate);\n        }\n        return labelGroup;\n    };\n    // 根据type对label布局\n    Labels.prototype.doLayout = function (items, shapes, shapesMap) {\n        return __awaiter(this, void 0, void 0, function () {\n            var layouts;\n            var _this = this;\n            return __generator(this, function (_a) {\n                switch (_a.label) {\n                    case 0:\n                        if (!this.layout) return [3 /*break*/, 2];\n                        layouts = isArray(this.layout) ? this.layout : [this.layout];\n                        return [4 /*yield*/, Promise.all(layouts.map(function (layout) {\n                                var layoutFn = getGeometryLabelLayout(get(layout, 'type', ''));\n                                if (!layoutFn)\n                                    return;\n                                var labelShapes = [];\n                                var geometryShapes = [];\n                                each(shapesMap, function (labelShape, id) {\n                                    labelShapes.push(labelShape);\n                                    geometryShapes.push(shapes[labelShape.get('elementId')]);\n                                });\n                                // [todo] Refactor more layout into Worker.\n                                return layoutFn(items, labelShapes, geometryShapes, _this.region, layout.cfg);\n                            }))];\n                    case 1:\n                        _a.sent();\n                        _a.label = 2;\n                    case 2: return [2 /*return*/];\n                }\n            });\n        });\n    };\n    Labels.prototype.renderLabelLine = function (labelItems, shapesMap) {\n        each(labelItems, function (labelItem) {\n            var coordinate = get(labelItem, 'coordinate');\n            if (!labelItem || !coordinate) {\n                return;\n            }\n            var center = coordinate.getCenter();\n            var radius = coordinate.getRadius();\n            if (!labelItem.labelLine) {\n                // labelLine: null | false，关闭 label 对应的 labelLine\n                return;\n            }\n            var labelLineCfg = get(labelItem, 'labelLine', {});\n            var id = labelItem.id;\n            var path = labelLineCfg.path;\n            if (!path) {\n                var start = polarToCartesian(center.x, center.y, radius, labelItem.angle);\n                path = [\n                    ['M', start.x, start.y],\n                    ['L', labelItem.x, labelItem.y],\n                ];\n            }\n            var labelGroup = shapesMap[id];\n            if (!labelGroup.destroyed) {\n                labelGroup.addShape('path', {\n                    capture: false,\n                    attrs: __assign({ path: path, stroke: labelItem.color ? labelItem.color : get(labelItem, ['style', 'fill'], '#000'), fill: null }, labelLineCfg.style),\n                    id: id,\n                    origin: labelItem.mappingData,\n                    data: labelItem.data,\n                    coordinate: labelItem.coordinate,\n                });\n            }\n        });\n    };\n    /**\n     * 绘制标签背景\n     * @param labelItems\n     */\n    Labels.prototype.renderLabelBackground = function (labelItems, shapesMap) {\n        each(labelItems, function (labelItem) {\n            var coordinate = get(labelItem, 'coordinate');\n            var background = get(labelItem, 'background');\n            if (!background || !coordinate) {\n                return;\n            }\n            var id = labelItem.id;\n            var labelGroup = shapesMap[id];\n            if (!labelGroup.destroyed) {\n                var labelContentShape = labelGroup.getChildren()[0];\n                if (labelContentShape) {\n                    var _a = getLabelBackgroundInfo(labelGroup, labelItem, background.padding), rotation = _a.rotation, box = __rest(_a, [\"rotation\"]);\n                    var backgroundShape = labelGroup.addShape('rect', {\n                        attrs: __assign(__assign({}, box), (background.style || {})),\n                        id: id,\n                        origin: labelItem.mappingData,\n                        data: labelItem.data,\n                        coordinate: labelItem.coordinate,\n                    });\n                    backgroundShape.setZIndex(-1);\n                    if (rotation) {\n                        var matrix = labelContentShape.getMatrix();\n                        backgroundShape.setMatrix(matrix);\n                    }\n                }\n            }\n        });\n    };\n    Labels.prototype.createOffscreenGroup = function () {\n        var container = this.container;\n        var GroupClass = container.getGroupBase(); // 获取分组的构造函数\n        var newGroup = new GroupClass({});\n        return newGroup;\n    };\n    Labels.prototype.adjustLabel = function (items, shapesMap) {\n        each(items, function (item) {\n            if (item) {\n                var id = item.id;\n                var labelGroup = shapesMap[id];\n                if (!labelGroup.destroyed) {\n                    // fix: 如果说开发者的 label content 是一个 group，此处的偏移无法对 整个 content group 生效；场景类似 饼图 spider label 是一个含 2 个 textShape 的 gorup\n                    var labelShapes = labelGroup.findAll(function (ele) { return ele.get('type') !== 'path'; });\n                    each(labelShapes, function (labelShape) {\n                        if (labelShape) {\n                            if (item.offsetX) {\n                                labelShape.attr('x', labelShape.attr('x') + item.offsetX);\n                            }\n                            if (item.offsetY) {\n                                labelShape.attr('y', labelShape.attr('y') + item.offsetY);\n                            }\n                        }\n                    });\n                }\n            }\n        });\n    };\n    return Labels;\n}());\nexport default Labels;\n//# sourceMappingURL=labels.js.map","var isNull = function (value) {\n    return value === null;\n};\nexport default isNull;\n//# sourceMappingURL=is-null.js.map","import { __assign, __awaiter, __generator, __read, __spreadArray } from \"tslib\";\nimport { deepMix, each, get, isArray, isFunction, isNil, isNumber, isUndefined } from '@antv/util';\nimport { FIELD_ORIGIN } from '../../constant';\nimport { getDefaultAnimateCfg } from '../../animate';\nimport { getPolygonCentroid } from '../../util/graphics';\nimport Labels from '../../component/labels';\nfunction avg(arr) {\n    var sum = 0;\n    each(arr, function (value) {\n        sum += value;\n    });\n    return sum / arr.length;\n}\n/**\n * Geometry Label 基类，用于生成 Geometry 下所有 label 的配置项信息\n */\nvar GeometryLabel = /** @class */ (function () {\n    function GeometryLabel(geometry) {\n        this.geometry = geometry;\n    }\n    GeometryLabel.prototype.getLabelItems = function (mapppingArray) {\n        var _this = this;\n        var items = [];\n        var labelCfgs = this.getLabelCfgs(mapppingArray);\n        // 获取 label 相关的 x，y 的值，获取具体的 x, y，防止存在数组\n        each(mapppingArray, function (mappingData, index) {\n            var labelCfg = labelCfgs[index];\n            if (!labelCfg || isNil(mappingData.x) || isNil(mappingData.y)) {\n                items.push(null);\n                return;\n            }\n            var labelContent = !isArray(labelCfg.content) ? [labelCfg.content] : labelCfg.content;\n            labelCfg.content = labelContent;\n            var total = labelContent.length;\n            each(labelContent, function (content, subIndex) {\n                if (isNil(content) || content === '') {\n                    items.push(null);\n                    return;\n                }\n                var item = __assign(__assign({}, labelCfg), _this.getLabelPoint(labelCfg, mappingData, subIndex));\n                if (!item.textAlign) {\n                    item.textAlign = _this.getLabelAlign(item, subIndex, total);\n                }\n                if (item.offset <= 0) {\n                    item.labelLine = null;\n                }\n                items.push(item);\n            });\n        });\n        return items;\n    };\n    GeometryLabel.prototype.render = function (mappingArray, isUpdate) {\n        if (isUpdate === void 0) { isUpdate = false; }\n        return __awaiter(this, void 0, void 0, function () {\n            var labelItems, labelsRenderer, shapes;\n            return __generator(this, function (_a) {\n                switch (_a.label) {\n                    case 0:\n                        labelItems = this.getLabelItems(mappingArray);\n                        labelsRenderer = this.getLabelsRenderer();\n                        shapes = this.getGeometryShapes();\n                        // 渲染文本\n                        return [4 /*yield*/, labelsRenderer.render(labelItems, shapes, isUpdate)];\n                    case 1:\n                        // 渲染文本\n                        _a.sent();\n                        return [2 /*return*/];\n                }\n            });\n        });\n    };\n    GeometryLabel.prototype.clear = function () {\n        var labelsRenderer = this.labelsRenderer;\n        if (labelsRenderer) {\n            labelsRenderer.clear();\n        }\n    };\n    GeometryLabel.prototype.destroy = function () {\n        var labelsRenderer = this.labelsRenderer;\n        if (labelsRenderer) {\n            labelsRenderer.destroy();\n        }\n        this.labelsRenderer = null;\n    };\n    // geometry 更新之后，对应的 Coordinate 也会更新，为了获取到最新鲜的 Coordinate，故使用方法获取\n    GeometryLabel.prototype.getCoordinate = function () {\n        return this.geometry.coordinate;\n    };\n    /**\n     * 获取 label 的默认配置\n     */\n    GeometryLabel.prototype.getDefaultLabelCfg = function (offset, position) {\n        var geometry = this.geometry;\n        var type = geometry.type, theme = geometry.theme;\n        if (type === 'polygon' ||\n            (type === 'interval' && position === 'middle') ||\n            (offset < 0 && !['line', 'point', 'path'].includes(type))) {\n            // polygon 或者 (interval 且 middle) 或者 offset 小于 0 时，文本展示在图形内部，将其颜色设置为 白色\n            return get(theme, 'innerLabels', {});\n        }\n        return get(theme, 'labels', {});\n    };\n    /**\n     * 获取当前 label 的最终配置\n     * @param labelCfg\n     */\n    GeometryLabel.prototype.getThemedLabelCfg = function (labelCfg) {\n        var geometry = this.geometry;\n        var defaultLabelCfg = this.getDefaultLabelCfg();\n        var type = geometry.type, theme = geometry.theme;\n        var themedLabelCfg;\n        if (type === 'polygon' || (labelCfg.offset < 0 && !['line', 'point', 'path'].includes(type))) {\n            // polygon 或者 offset 小于 0 时，文本展示在图形内部，将其颜色设置为 白色\n            themedLabelCfg = deepMix({}, defaultLabelCfg, theme.innerLabels, labelCfg);\n        }\n        else {\n            themedLabelCfg = deepMix({}, defaultLabelCfg, theme.labels, labelCfg);\n        }\n        return themedLabelCfg;\n    };\n    /**\n     * 设置 label 位置\n     * @param labelPointCfg\n     * @param mappingData\n     * @param index\n     * @param position\n     */\n    GeometryLabel.prototype.setLabelPosition = function (labelPointCfg, mappingData, index, position) { };\n    /**\n     * @desc 获取 label offset\n     */\n    GeometryLabel.prototype.getLabelOffset = function (offset) {\n        var coordinate = this.getCoordinate();\n        var vector = this.getOffsetVector(offset);\n        return coordinate.isTransposed ? vector[0] : vector[1];\n    };\n    /**\n     * 获取每个 label 的偏移量 (矢量)\n     * @param labelCfg\n     * @param index\n     * @param total\n     * @return {Point} offsetPoint\n     */\n    GeometryLabel.prototype.getLabelOffsetPoint = function (labelCfg, index, total) {\n        var offset = labelCfg.offset;\n        var coordinate = this.getCoordinate();\n        var transposed = coordinate.isTransposed;\n        var dim = transposed ? 'x' : 'y';\n        var factor = transposed ? 1 : -1; // y 方向上越大，像素的坐标越小，所以transposed时将系数变成\n        var offsetPoint = {\n            x: 0,\n            y: 0,\n        };\n        if (index > 0 || total === 1) {\n            // 判断是否小于0\n            offsetPoint[dim] = offset * factor;\n        }\n        else {\n            offsetPoint[dim] = offset * factor * -1;\n        }\n        return offsetPoint;\n    };\n    /**\n     * 获取每个 label 的位置\n     * @param labelCfg\n     * @param mappingData\n     * @param index\n     * @returns label point\n     */\n    GeometryLabel.prototype.getLabelPoint = function (labelCfg, mappingData, index) {\n        var coordinate = this.getCoordinate();\n        var total = labelCfg.content.length;\n        function getDimValue(value, idx, isAvg) {\n            if (isAvg === void 0) { isAvg = false; }\n            var v = value;\n            if (isArray(v)) {\n                if (labelCfg.content.length === 1) {\n                    if (isAvg) {\n                        v = avg(v);\n                    }\n                    else {\n                        // 如果仅一个 label，多个 y, 取最后一个 y\n                        if (v.length <= 2) {\n                            v = v[value.length - 1];\n                        }\n                        else {\n                            v = avg(v);\n                        }\n                    }\n                }\n                else {\n                    v = v[idx];\n                }\n            }\n            return v;\n        }\n        var label = {\n            content: labelCfg.content[index],\n            x: 0,\n            y: 0,\n            start: { x: 0, y: 0 },\n            color: '#fff',\n        };\n        var shape = isArray(mappingData.shape) ? mappingData.shape[0] : mappingData.shape;\n        var isFunnel = shape === 'funnel' || shape === 'pyramid';\n        // 多边形场景，多用于地图\n        if (this.geometry.type === 'polygon') {\n            var centroid = getPolygonCentroid(mappingData.x, mappingData.y);\n            label.x = centroid[0];\n            label.y = centroid[1];\n        }\n        else if (this.geometry.type === 'interval' && !isFunnel) {\n            // 对直方图的label X 方向的位置居中\n            label.x = getDimValue(mappingData.x, index, true);\n            label.y = getDimValue(mappingData.y, index);\n        }\n        else {\n            label.x = getDimValue(mappingData.x, index);\n            label.y = getDimValue(mappingData.y, index);\n        }\n        // 处理漏斗图文本位置\n        if (isFunnel) {\n            var nextPoints = get(mappingData, 'nextPoints');\n            var points = get(mappingData, 'points');\n            if (nextPoints) {\n                // 非漏斗图底部\n                var point1 = coordinate.convert(points[1]);\n                var point2 = coordinate.convert(nextPoints[1]);\n                label.x = (point1.x + point2.x) / 2;\n                label.y = (point1.y + point2.y) / 2;\n            }\n            else if (shape === 'pyramid') {\n                var point1 = coordinate.convert(points[1]);\n                var point2 = coordinate.convert(points[2]);\n                label.x = (point1.x + point2.x) / 2;\n                label.y = (point1.y + point2.y) / 2;\n            }\n        }\n        if (labelCfg.position) {\n            // 如果 label 支持 position 属性\n            this.setLabelPosition(label, mappingData, index, labelCfg.position);\n        }\n        var offsetPoint = this.getLabelOffsetPoint(labelCfg, index, total);\n        label.start = { x: label.x, y: label.y };\n        label.x += offsetPoint.x;\n        label.y += offsetPoint.y;\n        label.color = mappingData.color;\n        return label;\n    };\n    /**\n     * 获取文本的对齐方式\n     * @param item\n     * @param index\n     * @param total\n     * @returns\n     */\n    GeometryLabel.prototype.getLabelAlign = function (item, index, total) {\n        var align = 'center';\n        var coordinate = this.getCoordinate();\n        if (coordinate.isTransposed) {\n            var offset = item.offset;\n            if (offset < 0) {\n                align = 'right';\n            }\n            else if (offset === 0) {\n                align = 'center';\n            }\n            else {\n                align = 'left';\n            }\n            if (total > 1 && index === 0) {\n                if (align === 'right') {\n                    align = 'left';\n                }\n                else if (align === 'left') {\n                    align = 'right';\n                }\n            }\n        }\n        return align;\n    };\n    /**\n     * 获取每一个 label 的唯一 id\n     * @param mappingData label 对应的图形的绘制数据\n     */\n    GeometryLabel.prototype.getLabelId = function (mappingData) {\n        var geometry = this.geometry;\n        var type = geometry.type;\n        var xScale = geometry.getXScale();\n        var yScale = geometry.getYScale();\n        var origin = mappingData[FIELD_ORIGIN]; // 原始数据\n        var labelId = geometry.getElementId(mappingData);\n        if (type === 'line' || type === 'area') {\n            // 折线图以及区域图，一条线会对应一组数据，即多个 labels，为了区分这些 labels，需要在 line id 的前提下加上 x 字段值\n            labelId += \" \".concat(origin[xScale.field]);\n        }\n        else if (type === 'path') {\n            // path 路径图，无序，有可能存在相同 x 不同 y 的情况，需要通过 x y 来确定唯一 id\n            labelId += \" \".concat(origin[xScale.field], \"-\").concat(origin[yScale.field]);\n        }\n        return labelId;\n    };\n    // 获取 labels 组件\n    GeometryLabel.prototype.getLabelsRenderer = function () {\n        var _a = this.geometry, labelsContainer = _a.labelsContainer, labelOption = _a.labelOption, canvasRegion = _a.canvasRegion, animateOption = _a.animateOption;\n        var coordinate = this.geometry.coordinate;\n        var labelsRenderer = this.labelsRenderer;\n        if (!labelsRenderer) {\n            labelsRenderer = new Labels({\n                container: labelsContainer,\n                layout: get(labelOption, ['cfg', 'layout'], {\n                    type: this.defaultLayout,\n                }),\n            });\n            this.labelsRenderer = labelsRenderer;\n        }\n        labelsRenderer.region = canvasRegion;\n        // 设置动画配置，如果 geometry 的动画关闭了，那么 label 的动画也会关闭\n        labelsRenderer.animate = animateOption ? getDefaultAnimateCfg('label', coordinate) : false;\n        return labelsRenderer;\n    };\n    GeometryLabel.prototype.getLabelCfgs = function (mapppingArray) {\n        var _this = this;\n        var geometry = this.geometry;\n        var labelOption = geometry.labelOption, scales = geometry.scales, coordinate = geometry.coordinate;\n        var _a = labelOption, fields = _a.fields, callback = _a.callback, cfg = _a.cfg;\n        var labelScales = fields.map(function (field) {\n            return scales[field];\n        });\n        var labelCfgs = [];\n        each(mapppingArray, function (mappingData, index) {\n            var origin = mappingData[FIELD_ORIGIN]; // 原始数据\n            var originText = _this.getLabelText(origin, labelScales);\n            var callbackCfg;\n            if (callback) {\n                // 当同时配置了 callback 和 cfg 时，以 callback 为准\n                var originValues = fields.map(function (field) { return origin[field]; });\n                callbackCfg = callback.apply(void 0, __spreadArray([], __read(originValues), false));\n                if (isNil(callbackCfg)) {\n                    labelCfgs.push(null);\n                    return;\n                }\n            }\n            var labelCfg = __assign(__assign({ id: _this.getLabelId(mappingData), elementId: _this.geometry.getElementId(mappingData), data: origin, // 存储原始数据\n                mappingData: mappingData, // 存储映射后的数据,\n                coordinate: coordinate }, cfg), callbackCfg);\n            if (isFunction(labelCfg.position)) {\n                labelCfg.position = labelCfg.position(origin, mappingData, index);\n            }\n            var offset = _this.getLabelOffset(labelCfg.offset || 0);\n            // defaultCfg 需要判断 innerLabels & labels\n            var defaultLabelCfg = _this.getDefaultLabelCfg(offset, labelCfg.position);\n            // labelCfg priority: defaultCfg < cfg < callbackCfg\n            labelCfg = deepMix({}, defaultLabelCfg, labelCfg);\n            // 获取最终的 offset\n            labelCfg.offset = _this.getLabelOffset(labelCfg.offset || 0);\n            var content = labelCfg.content;\n            if (isFunction(content)) {\n                labelCfg.content = content(origin, mappingData, index);\n            }\n            else if (isUndefined(content)) {\n                // 用户未配置 content，则默认为映射的第一个字段的值\n                labelCfg.content = originText[0];\n            }\n            labelCfgs.push(labelCfg);\n        });\n        return labelCfgs;\n    };\n    GeometryLabel.prototype.getLabelText = function (origin, scales) {\n        var labelTexts = [];\n        each(scales, function (scale) {\n            var value = origin[scale.field];\n            if (isArray(value)) {\n                value = value.map(function (subVal) {\n                    return scale.getText(subVal);\n                });\n            }\n            else {\n                value = scale.getText(value);\n            }\n            if (isNil(value) || value === '') {\n                labelTexts.push(null);\n            }\n            else {\n                labelTexts.push(value);\n            }\n        });\n        return labelTexts;\n    };\n    GeometryLabel.prototype.getOffsetVector = function (offset) {\n        if (offset === void 0) { offset = 0; }\n        var coordinate = this.getCoordinate();\n        var actualOffset = 0;\n        if (isNumber(offset)) {\n            actualOffset = offset;\n        }\n        // 如果 x,y 翻转，则偏移 x，否则偏移 y\n        return coordinate.isTransposed ? coordinate.applyMatrix(actualOffset, 0) : coordinate.applyMatrix(0, actualOffset);\n    };\n    GeometryLabel.prototype.getGeometryShapes = function () {\n        var geometry = this.geometry;\n        var shapes = {};\n        each(geometry.elementsMap, function (element, id) {\n            shapes[id] = element.shape;\n        });\n        // 因为有可能 shape 还在进行动画，导致 shape.getBBox() 获取到的值不是最终态，所以需要从 offscreenGroup 获取\n        each(geometry.getOffscreenGroup().getChildren(), function (child) {\n            var id = geometry.getElementId(child.get('origin').mappingData);\n            shapes[id] = child;\n        });\n        return shapes;\n    };\n    return GeometryLabel;\n}());\nexport default GeometryLabel;\n//# sourceMappingURL=base.js.map","import { __read, __spreadArray } from \"tslib\";\n/**\n * @ignore\n * get the mapping value by attribute, if mapping value is nil, return def\n * @param attr\n * @param value\n * @param def\n * @returns get mapping value\n */\nexport function getMappingValue(attr, value, def) {\n    if (!attr) {\n        return def;\n    }\n    var r;\n    // 多参数映射，阻止程序报错\n    if (attr.callback && attr.callback.length > 1) {\n        var restArgs = Array(attr.callback.length - 1).fill('');\n        r = attr.mapping.apply(attr, __spreadArray([value], __read(restArgs), false)).join('');\n    }\n    else {\n        r = attr.mapping(value).join('');\n    }\n    return r || def;\n}\n//# sourceMappingURL=attr.js.map","/** @ignore */\nexport var MarkerSymbols = {\n    hexagon: function (x, y, r) {\n        var diffX = (r / 2) * Math.sqrt(3);\n        return [\n            ['M', x, y - r],\n            ['L', x + diffX, y - r / 2],\n            ['L', x + diffX, y + r / 2],\n            ['L', x, y + r],\n            ['L', x - diffX, y + r / 2],\n            ['L', x - diffX, y - r / 2],\n            ['Z'],\n        ];\n    },\n    bowtie: function (x, y, r) {\n        var diffY = r - 1.5;\n        return [['M', x - r, y - diffY], ['L', x + r, y + diffY], ['L', x + r, y - diffY], ['L', x - r, y + diffY], ['Z']];\n    },\n    cross: function (x, y, r) {\n        return [\n            ['M', x - r, y - r],\n            ['L', x + r, y + r],\n            ['M', x + r, y - r],\n            ['L', x - r, y + r],\n        ];\n    },\n    tick: function (x, y, r) {\n        return [\n            ['M', x - r / 2, y - r],\n            ['L', x + r / 2, y - r],\n            ['M', x, y - r],\n            ['L', x, y + r],\n            ['M', x - r / 2, y + r],\n            ['L', x + r / 2, y + r],\n        ];\n    },\n    plus: function (x, y, r) {\n        return [\n            ['M', x - r, y],\n            ['L', x + r, y],\n            ['M', x, y - r],\n            ['L', x, y + r],\n        ];\n    },\n    hyphen: function (x, y, r) {\n        return [\n            ['M', x - r, y],\n            ['L', x + r, y],\n        ];\n    },\n    line: function (x, y, r) {\n        return [\n            ['M', x, y - r],\n            ['L', x, y + r],\n        ];\n    },\n};\n//# sourceMappingURL=marker.js.map","import { __assign } from \"tslib\";\nimport { deepMix, isString, each, get, isFunction } from '@antv/util';\nimport { DIRECTION } from '../constant';\nimport { getMappingValue } from './attr';\nimport { omit } from './helper';\nimport { MarkerSymbols } from './marker';\n/** 线条形 marker symbol */\nvar STROKES_SYMBOLS = ['line', 'cross', 'tick', 'plus', 'hyphen'];\n/**\n * 处理用户配置的 marker style\n * @param markerStyle\n * @param userMarker.style\n * @returns {ShapeAttrs} newStyle\n */\nfunction handleUserMarkerStyle(markerStyle, style) {\n    if (isFunction(style)) {\n        return style(markerStyle);\n    }\n    return deepMix({}, markerStyle, style);\n}\n/**\n * 根据 marker 是否为线条形 symbol, 来调整下样式\n * @param symbol\n * @param style\n * @param color\n */\nfunction adpatorMarkerStyle(marker, color) {\n    var symbol = marker.symbol;\n    if (isString(symbol) && STROKES_SYMBOLS.indexOf(symbol) !== -1) {\n        var markerStyle = get(marker, 'style', {});\n        var lineWidth = get(markerStyle, 'lineWidth', 1);\n        var stroke = markerStyle.stroke || markerStyle.fill || color;\n        marker.style = deepMix({}, marker.style, { lineWidth: lineWidth, stroke: stroke, fill: null });\n    }\n}\n/**\n * 设置 marker 的 symbol，将 字符串的 symbol 转换为真正的绘制命令\n * @param marker\n */\nfunction setMarkerSymbol(marker) {\n    var symbol = marker.symbol;\n    if (isString(symbol) && MarkerSymbols[symbol]) {\n        marker.symbol = MarkerSymbols[symbol];\n    }\n}\n/**\n * @ignore\n * get the legend layout from direction\n * @param direction\n * @returns layout 'horizontal' | 'vertical'\n */\nexport function getLegendLayout(direction) {\n    return direction.startsWith(DIRECTION.LEFT) || direction.startsWith(DIRECTION.RIGHT) ? 'vertical' : 'horizontal';\n}\n/**\n * @ignore\n * get the legend items\n * @param view\n * @param geometry\n * @param attr\n * @param themeMarker\n * @param markerCfg\n * @returns legend items\n */\nexport function getLegendItems(view, geometry, attr, themeMarker, userMarker) {\n    var scale = attr.getScale(attr.type);\n    if (scale.isCategory) {\n        var field_1 = scale.field;\n        var colorAttr_1 = geometry.getAttribute('color');\n        var shapeAttr_1 = geometry.getAttribute('shape');\n        var defaultColor_1 = view.getTheme().defaultColor;\n        var isInPolar_1 = geometry.coordinate.isPolar;\n        return scale.getTicks().map(function (tick, index) {\n            var _a;\n            var text = tick.text, scaleValue = tick.value;\n            var name = text;\n            var value = scale.invert(scaleValue);\n            // 通过过滤图例项的数据，来看是否 unchecked\n            var unchecked = view.filterFieldData(field_1, [(_a = {}, _a[field_1] = value, _a)]).length === 0;\n            each(view.views, function (subView) {\n                var _a;\n                if (!subView.filterFieldData(field_1, [(_a = {}, _a[field_1] = value, _a)]).length) {\n                    unchecked = true;\n                }\n            });\n            // @ts-ignore\n            var color = getMappingValue(colorAttr_1, value, defaultColor_1);\n            var shape = getMappingValue(shapeAttr_1, value, 'point');\n            var marker = geometry.getShapeMarker(shape, {\n                color: color,\n                isInPolar: isInPolar_1,\n            });\n            var markerCfg = userMarker;\n            if (isFunction(markerCfg)) {\n                markerCfg = markerCfg(name, index, __assign({ name: name, value: value }, deepMix({}, themeMarker, marker)));\n            }\n            // the marker configure order should be ensure\n            marker = deepMix({}, themeMarker, marker, omit(__assign({}, markerCfg), ['style']));\n            adpatorMarkerStyle(marker, color);\n            if (markerCfg && markerCfg.style) {\n                // handle user's style settings\n                marker.style = handleUserMarkerStyle(marker.style, markerCfg.style);\n            }\n            setMarkerSymbol(marker);\n            return { id: value, name: name, value: value, marker: marker, unchecked: unchecked };\n        });\n    }\n    return [];\n}\n/**\n *\n * @ignore\n * custom legend 的 items 获取\n * @param themeMarker\n * @param userMarker\n * @param customItems\n */\nexport function getCustomLegendItems(themeMarker, userMarker, customItems) {\n    // 如果有自定义的 item，那么就直接使用，并合并主题的 marker 配置\n    return customItems.map(function (item, index) {\n        var markerCfg = userMarker;\n        if (isFunction(markerCfg)) {\n            markerCfg = markerCfg(item.name, index, deepMix({}, themeMarker, item));\n        }\n        var itemMarker = isFunction(item.marker)\n            ? item.marker(item.name, index, deepMix({}, themeMarker, item))\n            : item.marker;\n        var marker = deepMix({}, themeMarker, markerCfg, itemMarker);\n        setMarkerSymbol(marker);\n        item.marker = marker;\n        return item;\n    });\n}\n/**\n * get the legend cfg from theme, will mix the common cfg of legend theme\n *\n * @param theme view theme object\n * @param direction legend direction\n * @returns legend theme cfg\n */\nexport function getLegendThemeCfg(theme, direction) {\n    var legendTheme = get(theme, ['components', 'legend'], {});\n    return deepMix({}, get(legendTheme, ['common'], {}), deepMix({}, get(legendTheme, [direction], {})));\n}\n//# sourceMappingURL=legend.js.map","import { isArray } from '@antv/util';\nimport { getSplinePath } from './path';\nfunction isValueEmpty(value) {\n    if (value) {\n        return false;\n    }\n    return value === null || value === undefined || isNaN(value);\n}\nfunction isYNil(point) {\n    if (isArray(point)) {\n        // 特殊处理 area 的关键点数据，其关键点结构为 [{x: 0, y: 1}, {x: 0, y: 2}]\n        return isValueEmpty(point[1].y);\n    }\n    var value = point.y;\n    return isArray(value) ? isValueEmpty(value[0]) : isValueEmpty(value);\n}\n/**\n * @ignore\n * 分割数据，用于处理在一组点数据中，y 对应的数值存在 null/undefined/NaN 的情况\n * 应用于折线图、区域图以及路径图\n *\n * ```typescript\n * // return [[{x: 1, y: 2}, {x: 3, y: 3}]]\n * getPathPoints([{x: 1, y: 2}, {x: 2, y: null}, {x: 3, y: 3}], true);\n * // return [[{x: 1, y: 2}], [{x: 3, y: 3}]]\n * getPathPoints([{x: 1, y: 2}, {x: 2, y: null}, {x: 3, y: 3}], false);\n * // return [[[{ x: 1, y: 10 }, { x: 2, y: 2 }], [{ x: 9, y: 34 }, { x: 1, y: 1 }]]]\n * getPathPoints([\n *   [{ x: 1, y: 10 }, { x: 2, y: 2 }],\n *   [{ x: 4, y: 2 }, { x: 8, y: NaN }],\n *   [{ x: 9, y: 34 }, { x: 1, y: 1 }],\n * ], true);\n * ```\n *\n * @param points 要进行处理点集合\n * @param connectNulls 是否连接空值数据\n * @param showSinglePoint 是否展示孤立点\n * @returns 返回处理后的点集合\n */\nexport function getPathPoints(points, connectNulls, showSinglePoint) {\n    if (connectNulls === void 0) { connectNulls = false; }\n    if (showSinglePoint === void 0) { showSinglePoint = true; }\n    if (!points.length || (points.length === 1 && !showSinglePoint)) {\n        // 空或者只有一个点并配置不展示时\n        return [];\n    }\n    if (connectNulls) {\n        // 即 y 值为空的场景\n        var filtered = [];\n        for (var i = 0, len = points.length; i < len; i++) {\n            var point = points[i];\n            if (!isYNil(point)) {\n                filtered.push(point);\n            }\n        }\n        return [filtered];\n    }\n    var result = [];\n    var tmp = [];\n    for (var i = 0, len = points.length; i < len; i++) {\n        var point = points[i];\n        if (isYNil(point)) {\n            if (tmp.length) {\n                if (!(tmp.length === 1 && !showSinglePoint)) {\n                    // 如果前段数据只有一个字段并且不需要展示时则不加入\n                    result.push(tmp);\n                }\n                tmp = [];\n            }\n        }\n        else {\n            tmp.push(point);\n        }\n    }\n    if (tmp.length) {\n        result.push(tmp);\n    }\n    return result;\n}\n/**\n * 获取小提琴图的边界 path\n * @param points\n * @returns\n */\nexport function getViolinPath(points) {\n    var path = [];\n    for (var i = 0; i < points.length; i++) {\n        var point = points[i];\n        if (point) {\n            var action = i === 0 ? 'M' : 'L';\n            path.push([action, point.x, point.y]);\n        }\n    }\n    var first = points[0];\n    if (first) {\n        path.push(['L', first.x, first.y]);\n        path.push(['z']);\n    }\n    return path;\n}\n/**\n * 获取小提琴图 平滑的边界 path\n * @param points\n * @returns\n */\nexport function getSmoothViolinPath(points) {\n    var half = points.length / 2;\n    var leftPoints = [];\n    var rightPoints = [];\n    for (var i = 0; i < points.length; i++) {\n        if (i < half) {\n            leftPoints.push(points[i]);\n        }\n        else {\n            rightPoints.push(points[i]);\n        }\n    }\n    var leftPath = getSplinePath(leftPoints, false);\n    var rightPath = getSplinePath(rightPoints, false);\n    if (rightPoints.length) {\n        leftPath.push(['L', rightPoints[0].x, rightPoints[0].y]);\n    }\n    rightPath.shift();\n    var path = leftPath.concat(rightPath);\n    if (leftPoints.length) {\n        path.push(['L', leftPoints[0].x, leftPoints[0].y]);\n    }\n    path.push(['z']);\n    return path;\n}\n//# sourceMappingURL=get-path-points.js.map","import { __assign } from \"tslib\";\nimport { deepMix, isNil, get } from '@antv/util';\n/**\n * @ignore\n * 获取 Shape 的图形属性\n * @param cfg\n * @param isStroke 是否需要描边\n * @param isFill 是否需要填充\n * @param [sizeName] 可选，表示图形大小的属性，lineWidth 或者 r\n * @returns\n */\nexport function getStyle(cfg, isStroke, isFill, sizeName) {\n    if (sizeName === void 0) { sizeName = ''; }\n    var _a = cfg.style, style = _a === void 0 ? {} : _a, defaultStyle = cfg.defaultStyle, color = cfg.color, size = cfg.size;\n    var attrs = __assign(__assign({}, defaultStyle), style);\n    if (color) {\n        if (isStroke) {\n            if (!style.stroke) {\n                // 如果用户在 style() 中配置了 stroke，则以用户配置的为准\n                attrs.stroke = color;\n            }\n        }\n        if (isFill) {\n            if (!style.fill) {\n                // 如果用户在 style() 中配置了 fill\n                attrs.fill = color;\n            }\n        }\n    }\n    if (sizeName && isNil(style[sizeName]) && !isNil(size)) {\n        // 如果用户在 style() 中配置了 lineWidth 或者 r 属性\n        attrs[sizeName] = size;\n    }\n    return attrs;\n}\n/**\n * 获取 矩形背景 的样式\n * @param cfg\n */\nexport function getBackgroundRectStyle(cfg) {\n    return deepMix({}, {\n        // 默认背景色，copy from active-region\n        fill: '#CCD6EC',\n        fillOpacity: 0.3,\n    }, get(cfg, ['background', 'style']));\n}\n//# sourceMappingURL=get-style.js.map","import { isArray } from '@antv/util';\n/**\n * @ignore\n * 拆分点数据\n * @example\n * // result: [{x: 20, y: 20}, {x: 20, y: 30}]\n * splitPoints({x: 20,y: [20, 30]});\n * @example\n * // result: [{x: 20, y: 20}, {x: 30, y: 30}]\n * splitPoints({x: [20, 30],y: [20, 30]});\n * @param obj\n */\nexport function splitPoints(obj) {\n    // y 有可能是数组，对应原始数据中 y 为一个区间数据，如 [19, 30]，为了统一也将 x 转换为数组\n    var x = obj.x;\n    var y = isArray(obj.y) ? obj.y : [obj.y];\n    return y.map(function (eachY, index) {\n        return {\n            x: isArray(x) ? x[index] : x,\n            y: eachY,\n        };\n    });\n}\n//# sourceMappingURL=split-points.js.map","var LineSymbols = {\n    line: function (x, y, r) {\n        return [\n            ['M', x - r, y],\n            ['L', x + r, y],\n        ];\n    },\n    dot: function (x, y, r) {\n        return [\n            ['M', x - r, y],\n            ['L', x + r, y],\n        ];\n    },\n    dash: function (x, y, r) {\n        return [\n            ['M', x - r, y],\n            ['L', x + r, y],\n        ];\n    },\n    smooth: function (x, y, r) {\n        return [\n            ['M', x - r, y],\n            ['A', r / 2, r / 2, 0, 1, 1, x, y],\n            ['A', r / 2, r / 2, 0, 1, 0, x + r, y],\n        ];\n    },\n    hv: function (x, y, r) {\n        return [\n            ['M', x - r - 1, y - 2.5],\n            ['L', x, y - 2.5],\n            ['L', x, y + 2.5],\n            ['L', x + r + 1, y + 2.5],\n        ];\n    },\n    vh: function (x, y, r) {\n        return [\n            ['M', x - r - 1, y + 2.5],\n            ['L', x, y + 2.5],\n            ['L', x, y - 2.5],\n            ['L', x + r + 1, y - 2.5],\n        ];\n    },\n    hvh: function (x, y, r) {\n        return [\n            ['M', x - (r + 1), y + 2.5],\n            ['L', x - r / 2, y + 2.5],\n            ['L', x - r / 2, y - 2.5],\n            ['L', x + r / 2, y - 2.5],\n            ['L', x + r / 2, y + 2.5],\n            ['L', x + r + 1, y + 2.5],\n        ];\n    },\n    vhv: function (x, y) {\n        // 宽 13px，高 8px\n        return [\n            ['M', x - 5, y + 2.5],\n            ['L', x - 5, y],\n            ['L', x, y],\n            ['L', x, y - 3],\n            ['L', x, y + 3],\n            ['L', x + 6.5, y + 3],\n        ];\n    },\n};\n/**\n * Gets line marker\n * @ignore\n * @param markerCfg\n * @param shapeType\n * @returns 返回 Line 的 marker 配置\n */\nexport function getLineMarker(markerCfg, shapeType) {\n    var color = markerCfg.color;\n    return {\n        symbol: LineSymbols[shapeType],\n        style: {\n            lineWidth: 2,\n            r: 6,\n            stroke: color,\n        },\n    };\n}\n//# sourceMappingURL=util.js.map","import { each, isArray } from '@antv/util';\nimport { registerShape, registerShapeFactory } from '../base';\nimport { getPathPoints } from '../util/get-path-points';\nimport { getStyle } from '../util/get-style';\nimport { getLinePath, getSplinePath } from '../util/path';\nimport { splitPoints } from '../util/split-points';\nimport { getLineMarker } from './util';\nfunction getShapeAttrs(cfg, smooth, constraint) {\n    var isStack = cfg.isStack, connectNulls = cfg.connectNulls, isInCircle = cfg.isInCircle, showSinglePoint = cfg.showSinglePoint;\n    var shapeAttrs = getStyle(cfg, true, false, 'lineWidth');\n    var points = getPathPoints(cfg.points, connectNulls, showSinglePoint); // 根据 connectNulls 值处理 points\n    var path = [];\n    for (var i = 0, len = points.length; i < len; i++) {\n        var eachLinePoints = points[i];\n        path = path.concat(getPath(eachLinePoints, isInCircle, isStack, smooth, constraint, shapeAttrs));\n    }\n    shapeAttrs.path = path;\n    return shapeAttrs;\n}\n// 单条 path\nfunction getSinglePath(points, isInCircle, smooth, constraint, style) {\n    if (points.length === 1) {\n        // 只有一个点时\n        return [\n            ['M', points[0].x, points[0].y - style.lineWidth / 2],\n            ['L', points[0].x, points[0].y],\n            ['L', points[0].x, points[0].y + style.lineWidth / 2],\n        ];\n    }\n    var path;\n    if (!smooth) {\n        path = getLinePath(points, false);\n        if (isInCircle) {\n            path.push(['Z']);\n        }\n    }\n    else {\n        // 直角坐标系下绘制曲线时限制最大值、最小值\n        if (isInCircle && points.length) {\n            points.push({ x: points[0].x, y: points[0].y });\n        }\n        path = getSplinePath(points, false, constraint);\n    }\n    return path;\n}\nfunction getRangePath(points, isInCircle, isStack, smooth, constraint, style) {\n    var topPoints = [];\n    var bottomPoints = [];\n    each(points, function (point) {\n        var result = splitPoints(point);\n        topPoints.push(result[1]); // 上边\n        bottomPoints.push(result[0]); // 底边\n    });\n    var topPath = getSinglePath(topPoints, isInCircle, smooth, constraint, style);\n    var bottomPath = getSinglePath(bottomPoints, isInCircle, smooth, constraint, style);\n    if (isStack) {\n        return topPath;\n    }\n    return topPath.concat(bottomPath);\n}\n/**\n * 获取折线图 path\n */\nexport function getPath(points, isInCircle, isStack, smooth, constraint, style) {\n    if (points.length) {\n        var first = points[0];\n        return isArray(first.y)\n            ? getRangePath(points, isInCircle, isStack, smooth, constraint, style)\n            : getSinglePath(points, isInCircle, smooth, constraint, style);\n    }\n    return [];\n}\nvar LineShapeFactory = registerShapeFactory('line', {\n    defaultShapeType: 'line',\n});\n// 这里因为代码公用，所以直接全部注册\n// 'line' 默认折线；'dot' 点线 ···；'dash' 断线 - - -\neach(['line', 'dot', 'dash', 'smooth'], function (shapeType) {\n    registerShape('line', shapeType, {\n        draw: function (cfg, container) {\n            var smooth = shapeType === 'smooth';\n            var constraint;\n            if (smooth) {\n                var _a = this.coordinate, start = _a.start, end = _a.end;\n                constraint = [\n                    [start.x, end.y],\n                    [end.x, start.y],\n                ];\n            }\n            var attrs = getShapeAttrs(cfg, smooth, constraint);\n            var shape = container.addShape({\n                type: 'path',\n                attrs: attrs,\n                name: 'line',\n                capture: !smooth,\n            });\n            return shape;\n        },\n        getMarker: function (markerCfg) {\n            return getLineMarker(markerCfg, shapeType);\n        },\n    });\n});\nexport default LineShapeFactory;\n//# sourceMappingURL=index.js.map","/* G2 的一个壳子，不包含 Geometry，由开发者自己定义和引入 */\nexport var VERSION = '4.2.12';\n// 核心基类导出\nexport { Chart, View, Event } from './chart'; // Chart, View 类\nexport { Controller as ComponentController } from './chart/controller/base'; // G2 组件基类\nexport { default as TooltipController } from './chart/controller/tooltip'; // G2 tooltip 组件基类\nexport { default as Geometry } from './geometry/base'; // Geometry 基类\nexport { default as Element } from './geometry/element'; // Element 类\nexport { default as GeometryLabel } from './geometry/label/base'; // Geometry Label 基类\nexport { Interaction, Action } from './interaction'; // Interaction, Action 基类\nexport { Facet } from './facet'; // Facet 基类\nexport { default as InteractionAction } from './interaction/action/base'; // Interaction Action 基类\n// 注册 ComponentController\nexport { registerComponentController } from './chart';\n// 注册 Geometry\nexport { registerGeometry } from './chart';\n// 注册 Geometry Shape\nexport { registerShape, registerShapeFactory, getShapeFactory } from './geometry/shape/base';\n// 注册 Geometry label 以及 Geometry Label 布局函数\nexport { registerGeometryLabel, registerGeometryLabelLayout, getGeometryLabel, getGeometryLabelLayout, } from './geometry/label';\n// 注册 interaction\nexport { getInteraction, registerInteraction, registerAction, getActionClass } from './interaction';\n// 注册 facet\nexport { getFacet, registerFacet } from './facet';\n// 注册主题\nexport { getTheme, registerTheme } from './theme';\n// G engine 管理相关\nexport { registerEngine, getEngine } from './engine';\n// 注册动画函数\nexport { registerAnimation, getAnimation } from './animate/animation';\nexport { LAYER, DIRECTION } from './constant';\nexport { Coordinate, Scale } from './dependents';\n// 一些工具方法导出\nimport { getMappingValue } from './util/attr';\nimport { getLegendItems } from './util/legend';\nimport { getAngle, getSectorPath, polarToCartesian } from './util/graphics';\nimport { rotate, transform, translate, zoom } from './util/transform';\nimport { getTooltipItems } from './util/tooltip';\nimport { getDelegationObject } from './interaction/action/util';\nimport { getPathPoints } from './geometry/shape/util/get-path-points';\nimport { getPath } from './geometry/shape/line';\nexport var Util = {\n    getLegendItems: getLegendItems,\n    translate: translate,\n    rotate: rotate,\n    zoom: zoom,\n    transform: transform,\n    getAngle: getAngle,\n    getSectorPath: getSectorPath,\n    polarToCartesian: polarToCartesian,\n    getDelegationObject: getDelegationObject,\n    getTooltipItems: getTooltipItems,\n    getMappingValue: getMappingValue,\n    // shape 的一些操作方法\n    getPath: getPath,\n    getPathPoints: getPathPoints,\n};\n//# sourceMappingURL=core.js.map","import { __assign } from \"tslib\";\nvar WHITE_COLORS = {\n    100: '#000',\n    95: '#0D0D0D',\n    85: '#262626',\n    65: '#595959',\n    45: '#8C8C8C',\n    25: '#BFBFBF',\n    15: '#D9D9D9',\n    6: '#F0F0F0',\n};\nvar BLACK_COLORS = {\n    100: '#FFFFFF',\n    95: '#F2F2F2',\n    85: '#D9D9D9',\n    65: '#A6A6A6',\n    45: '#737373',\n    25: '#404040',\n    15: '#262626',\n    6: '#0F0F0F',\n};\nvar QUALITATIVE_10 = [\n    '#5B8FF9',\n    '#5AD8A6',\n    '#5D7092',\n    '#F6BD16',\n    '#E86452',\n    '#6DC8EC',\n    '#945FB9',\n    '#FF9845',\n    '#1E9493',\n    '#FF99C3',\n];\nvar QUALITATIVE_20 = [\n    '#5B8FF9',\n    '#CDDDFD',\n    '#5AD8A6',\n    '#CDF3E4',\n    '#5D7092',\n    '#CED4DE',\n    '#F6BD16',\n    '#FCEBB9',\n    '#E86452',\n    '#F8D0CB',\n    '#6DC8EC',\n    '#D3EEF9',\n    '#945FB9',\n    '#DECFEA',\n    '#FF9845',\n    '#FFE0C7',\n    '#1E9493',\n    '#BBDEDE',\n    '#FF99C3',\n    '#FFE0ED',\n];\n/** 单色顺序色板 */\nvar SINGLE_SEQUENCE = [\n    '#B8E1FF',\n    '#9AC5FF',\n    '#7DAAFF',\n    '#5B8FF9',\n    '#3D76DD',\n    '#085EC0',\n    '#0047A5',\n    '#00318A',\n    '#001D70',\n];\nexport var createDarkStyleSheet = function (cfg) {\n    if (cfg === void 0) { cfg = {}; }\n    var _a = cfg.paletteQualitative10, paletteQualitative10 = _a === void 0 ? QUALITATIVE_10 : _a, _b = cfg.paletteQualitative20, paletteQualitative20 = _b === void 0 ? QUALITATIVE_20 : _b;\n    var _c = cfg.brandColor, brandColor = _c === void 0 ? paletteQualitative10[0] : _c;\n    var token = {\n        /** 图表背景色 */\n        backgroundColor: '#141414',\n        /** 主题色 */\n        brandColor: brandColor,\n        /** 图表辅助色 */\n        subColor: 'rgba(255,255,255,0.05)',\n        /** 分类色板 1，在数据量小于等于 10 时使用 */\n        paletteQualitative10: paletteQualitative10,\n        /** 分类色板 2，在数据量大于 10 时使用 */\n        paletteQualitative20: paletteQualitative20,\n        /** 语义色 */\n        paletteSemanticRed: '#F4664A',\n        /** 语义色 */\n        paletteSemanticGreen: '#30BF78',\n        /** 语义色 */\n        paletteSemanticYellow: '#FAAD14',\n        /** (单色)顺序色板 */\n        paletteSequence: SINGLE_SEQUENCE,\n        /** 字体 */\n        fontFamily: \"\\\"Segoe UI\\\", Roboto, \\\"Helvetica Neue\\\", Arial,\\n    \\\"Noto Sans\\\", sans-serif, \\\"Apple Color Emoji\\\", \\\"Segoe UI Emoji\\\", \\\"Segoe UI Symbol\\\",\\n    \\\"Noto Color Emoji\\\"\",\n        // -------------------- 坐标轴 --------------------\n        /** 坐标轴线颜色 */\n        axisLineBorderColor: BLACK_COLORS[25],\n        /** 坐标轴线粗细 */\n        axisLineBorder: 1,\n        /** 坐标轴线 lineDash 设置 */\n        axisLineDash: null,\n        /** 坐标轴标题颜色 */\n        axisTitleTextFillColor: BLACK_COLORS[65],\n        /** 坐标轴标题文本字体大小 */\n        axisTitleTextFontSize: 12,\n        /** 坐标轴标题文本行高 */\n        axisTitleTextLineHeight: 12,\n        /** 坐标轴标题文本字体粗细 */\n        axisTitleTextFontWeight: 'normal',\n        /** 坐标轴标题距离坐标轴文本的间距 */\n        axisTitleSpacing: 12,\n        /** 坐标轴标题详细说明icon颜色 */\n        axisDescriptionIconFillColor: WHITE_COLORS[85],\n        /** 坐标轴刻度线颜色 */\n        axisTickLineBorderColor: BLACK_COLORS[25],\n        /** 坐标轴刻度线长度 */\n        axisTickLineLength: 4,\n        /** 坐标轴刻度线粗细 */\n        axisTickLineBorder: 1,\n        /** 坐标轴次刻度线颜色 */\n        axisSubTickLineBorderColor: BLACK_COLORS[15],\n        /** 坐标轴次刻度线长度 */\n        axisSubTickLineLength: 2,\n        /** 坐标轴次刻度线粗细 */\n        axisSubTickLineBorder: 1,\n        /** 坐标轴刻度文本颜色 */\n        axisLabelFillColor: BLACK_COLORS[45],\n        /** 坐标轴刻度文本字体大小 */\n        axisLabelFontSize: 12,\n        /** 坐标轴刻度文本行高 */\n        axisLabelLineHeight: 12,\n        /** 坐标轴刻度文本字体粗细 */\n        axisLabelFontWeight: 'normal',\n        /** 坐标轴刻度文本距离坐标轴线的间距 */\n        axisLabelOffset: 8,\n        /** 坐标轴网格线颜色 */\n        axisGridBorderColor: BLACK_COLORS[15],\n        /** 坐标轴网格线粗细 */\n        axisGridBorder: 1,\n        /** 坐标轴网格线虚线设置 */\n        axisGridLineDash: null,\n        // -------------------- 图例 --------------------\n        /** 图例标题颜色 */\n        legendTitleTextFillColor: BLACK_COLORS[45],\n        /** 图例标题文本字体大小 */\n        legendTitleTextFontSize: 12,\n        /** 图例标题文本行高 */\n        legendTitleTextLineHeight: 21,\n        /** 图例标题文本字体粗细 */\n        legendTitleTextFontWeight: 'normal',\n        /** 图例 marker 颜色 */\n        legendMarkerColor: QUALITATIVE_10[0],\n        /** 图例 marker 距离图例文本的间距 */\n        legendMarkerSpacing: 8,\n        /** 图例 marker 默认半径大小 */\n        legendMarkerSize: 4,\n        /** 图例 'circle' marker 半径 */\n        legendCircleMarkerSize: 4,\n        /** 图例 'square' marker 半径 */\n        legendSquareMarkerSize: 4,\n        /** 图例 'line' marker 半径 */\n        legendLineMarkerSize: 5,\n        /** 图例项文本颜色 */\n        legendItemNameFillColor: BLACK_COLORS[65],\n        /** 图例项文本字体大小 */\n        legendItemNameFontSize: 12,\n        /** 图例项文本行高 */\n        legendItemNameLineHeight: 12,\n        /** 图例项粗细 */\n        legendItemNameFontWeight: 'normal',\n        /** 图例项之间的水平间距 */\n        legendItemSpacing: 24,\n        /** 图例项垂直方向的间隔 */\n        legendItemMarginBottom: 12,\n        /** 图例与图表绘图区域的偏移距离  */\n        legendSpacing: 16,\n        /** 图例与图表绘图区域的偏移距离  */\n        legendPadding: [8, 8, 8, 8],\n        /** 水平布局的图例与绘图区域偏移距离 */\n        legendHorizontalPadding: [8, 0, 8, 0],\n        /** 垂直布局的图例与绘图区域偏移距离 */\n        legendVerticalPadding: [0, 8, 0, 8],\n        // 图例分页器\n        /** 图例分页器 marker 大小 */\n        legendPageNavigatorMarkerSize: 12,\n        /** 图例分页器 marker 填充色 */\n        legendPageNavigatorMarkerInactiveFillColor: BLACK_COLORS[45],\n        /** 图例分页器 marker 填充色透明度 */\n        legendPageNavigatorMarkerInactiveFillOpacity: 0.45,\n        /** 图例分页器 marker 激活状态填充色 */\n        legendPageNavigatorMarkerFillColor: BLACK_COLORS[45],\n        /** 图例分页器 marker 激活状态填充色透明度 */\n        legendPageNavigatorMarkerFillOpacity: 1,\n        /** 图例分页器文本颜色 */\n        legendPageNavigatorTextFillColor: BLACK_COLORS[65],\n        /** 图例分页器文本字体大小 */\n        legendPageNavigatorTextFontSize: 12,\n        /** 连续图例滑块填充色 */\n        sliderRailFillColor: BLACK_COLORS[15],\n        /** 连续图例滑块边框粗细 */\n        sliderRailBorder: 0,\n        /** 连续图例滑块边框颜色 */\n        sliderRailBorderColor: null,\n        /** 连续图例滑块宽度 */\n        sliderRailWidth: 100,\n        /** 连续图例滑块高度 */\n        sliderRailHeight: 12,\n        /** 连续图例文本颜色 */\n        sliderLabelTextFillColor: BLACK_COLORS[45],\n        /** 连续图例文本字体大小 */\n        sliderLabelTextFontSize: 12,\n        /** 连续图例文本行高 */\n        sliderLabelTextLineHeight: 12,\n        /** 连续图例文本字体粗细 */\n        sliderLabelTextFontWeight: 'normal',\n        /** 连续图例滑块颜色 */\n        sliderHandlerFillColor: WHITE_COLORS[6],\n        /** 连续图例滑块宽度 */\n        sliderHandlerWidth: 10,\n        /** 连续图例滑块高度 */\n        sliderHandlerHeight: 14,\n        /** 连续图例滑块边框粗细 */\n        sliderHandlerBorder: 1,\n        /** 连续图例滑块边框颜色 */\n        sliderHandlerBorderColor: WHITE_COLORS[25],\n        // -------------------- Annotation，图形标注 --------------------\n        /** arc 图形标注描边颜色 */\n        annotationArcBorderColor: BLACK_COLORS[15],\n        /** arc 图形标注粗细 */\n        annotationArcBorder: 1,\n        /** line 图形标注颜色 */\n        annotationLineBorderColor: BLACK_COLORS[25],\n        /** line 图形标注粗细 */\n        annotationLineBorder: 1,\n        /** lube 图形标注的虚线间隔 */\n        annotationLineDash: null,\n        /** text 图形标注文本颜色 */\n        annotationTextFillColor: BLACK_COLORS[65],\n        /** text 图形标注文本字体大小 */\n        annotationTextFontSize: 12,\n        /** text 图形标注文本行高 */\n        annotationTextLineHeight: 12,\n        /** text 图形标注文本字体粗细 */\n        annotationTextFontWeight: 'normal',\n        /** text 图形标注文本边框颜色 */\n        annotationTextBorderColor: null,\n        /** text 图形标注文本边框粗细 */\n        annotationTextBorder: 0,\n        /** region 图形标注填充颜色 */\n        annotationRegionFillColor: BLACK_COLORS[100],\n        /** region 图形标注填充颜色透明色 */\n        annotationRegionFillOpacity: 0.06,\n        /** region 图形标注描边粗细 */\n        annotationRegionBorder: 0,\n        /** region 图形标注描边颜色 */\n        annotationRegionBorderColor: null,\n        /** dataMarker 图形标注线的长度 */\n        annotationDataMarkerLineLength: 16,\n        // -------------------- Tooltip --------------------\n        /** tooltip crosshairs 辅助线颜色 */\n        tooltipCrosshairsBorderColor: BLACK_COLORS[25],\n        /** tooltip crosshairs 辅助线粗细 */\n        tooltipCrosshairsBorder: 1,\n        /** tooltip crosshairs 辅助线虚线间隔 */\n        tooltipCrosshairsLineDash: null,\n        /** tooltip 内容框背景色 */\n        tooltipContainerFillColor: '#1f1f1f',\n        tooltipContainerFillOpacity: 0.95,\n        /** tooltip 内容框阴影 */\n        tooltipContainerShadow: '0px 2px 4px rgba(0,0,0,.5)',\n        /** tooltip 内容框圆角 */\n        tooltipContainerBorderRadius: 3,\n        /** tooltip 文本颜色 */\n        tooltipTextFillColor: BLACK_COLORS[65],\n        /** tooltip 文本字体大小 */\n        tooltipTextFontSize: 12,\n        /** tooltip 文本行高 */\n        tooltipTextLineHeight: 12,\n        /** tooltip 文本字体粗细 */\n        tooltipTextFontWeight: 'bold',\n        // -------------------- Geometry labels --------------------\n        /** Geometry label 文本颜色 */\n        labelFillColor: BLACK_COLORS[65],\n        labelFillColorDark: '#2c3542',\n        labelFillColorLight: '#ffffff',\n        /** Geometry label 文本字体大小 */\n        labelFontSize: 12,\n        /** Geometry label 文本行高 */\n        labelLineHeight: 12,\n        /** Geometry label 文本字体粗细 */\n        labelFontWeight: 'normal',\n        /** Geometry label 文本描边颜色 */\n        labelBorderColor: null,\n        /** Geometry label 文本描边粗细 */\n        labelBorder: 0,\n        /** Geometry innerLabel 文本颜色 */\n        innerLabelFillColor: WHITE_COLORS[100],\n        /** Geometry innerLabel 文本字体大小 */\n        innerLabelFontSize: 12,\n        /** Geometry innerLabel 文本行高 */\n        innerLabelLineHeight: 12,\n        /** Geometry innerLabel 文本字体粗细 */\n        innerLabelFontWeight: 'normal',\n        /** Geometry innerLabel 文本描边颜色 */\n        innerLabelBorderColor: null,\n        /** Geometry innerLabel 文本描边粗细 */\n        innerLabelBorder: 0,\n        /** Geometry label 文本颜色 */\n        overflowLabelFillColor: BLACK_COLORS[65],\n        overflowLabelFillColorDark: '#2c3542',\n        overflowLabelFillColorLight: '#ffffff',\n        /** Geometry label 文本字体大小 */\n        overflowLabelFontSize: 12,\n        /** Geometry label 文本行高 */\n        overflowLabelLineHeight: 12,\n        /** Geometry label 文本字体粗细 */\n        overflowLabelFontWeight: 'normal',\n        /** Geometry label 文本描边颜色 */\n        overflowLabelBorderColor: WHITE_COLORS[100],\n        /** Geometry label 文本描边粗细 */\n        overflowLabelBorder: 1,\n        /** Geometry label 文本连接线粗细 */\n        labelLineBorder: 1,\n        /** Geometry label 文本连接线颜色 */\n        labelLineBorderColor: BLACK_COLORS[25],\n        // -------------------- Slider 组件样式--------------------\n        /** slider 滑道高度 */\n        cSliderRailHieght: 16,\n        /** slider 滑道背景色 */\n        cSliderBackgroundFillColor: '#416180',\n        /** slider 滑道背景色透明度 */\n        cSliderBackgroundFillOpacity: 0.05,\n        /** slider 滑道前景色 */\n        cSliderForegroundFillColor: '#5B8FF9',\n        /** slider 滑道前景色透明度 */\n        cSliderForegroundFillOpacity: 0.15,\n        // slider handlerStyle 手柄样式\n        /** slider 手柄高度 */\n        cSliderHandlerHeight: 24,\n        /** Slider 手柄宽度 */\n        cSliderHandlerWidth: 10,\n        /** Slider 手柄背景色 */\n        cSliderHandlerFillColor: '#F7F7F7',\n        /** Slider 手柄背景色透明度 */\n        cSliderHandlerFillOpacity: 1,\n        /** Slider 手柄高亮背景色 */\n        cSliderHandlerHighlightFillColor: '#FFF',\n        /** Slider 手柄边框色 */\n        cSliderHandlerBorderColor: '#BFBFBF',\n        /** Slider 手柄边框粗细 */\n        cSliderHandlerBorder: 1,\n        /** Slider 手柄边框圆角 */\n        cSliderHandlerBorderRadius: 2,\n        // slider textStyle 字体标签样式\n        /** Slider 字体标签颜色 */\n        cSliderTextFillColor: '#fff',\n        /** Slider 字体标签透明度 */\n        cSliderTextFillOpacity: 0.45,\n        /** Slider 字体标签大小 */\n        cSliderTextFontSize: 12,\n        /** Slider 字体标签行高 */\n        cSliderTextLineHeight: 12,\n        /** Slider 字体标签字重 */\n        cSliderTextFontWeight: 'normal',\n        /** Slider 字体标签描边色 */\n        cSliderTextBorderColor: null,\n        /** Slider 字体标签描边粗细 */\n        cSliderTextBorder: 0,\n        // -------------------- Scrollbar 组件样式--------------------\n        /** 滚动条 滚道填充色 */\n        scrollbarTrackFillColor: 'rgba(255,255,255,0.65)',\n        /** 滚动条 滑块填充色 */\n        scrollbarThumbFillColor: 'rgba(0,0,0,0.35)',\n        /** 滚动条 滑块高亮填充色 */\n        scrollbarThumbHighlightFillColor: 'rgba(0,0,0,0.45)',\n        // -------------------- Geometry 图形样式--------------------\n        /** 点图填充颜色 */\n        pointFillColor: QUALITATIVE_10[0],\n        /** 点图填充颜色透明度 */\n        pointFillOpacity: 0.95,\n        /** 点图大小 */\n        pointSize: 4,\n        /** 点图描边粗细 */\n        pointBorder: 1,\n        /** 点图描边颜色 */\n        pointBorderColor: WHITE_COLORS[100],\n        /** 点图描边透明度 */\n        pointBorderOpacity: 1,\n        /** 点图 active 状态下描边颜色 */\n        pointActiveBorderColor: BLACK_COLORS[100],\n        /** 点图 selected 状态下描边粗细 */\n        pointSelectedBorder: 2,\n        /** 点图 selected 状态下描边颜色 */\n        pointSelectedBorderColor: BLACK_COLORS[100],\n        /** 点图 inactive 状态下填充颜色透明度 */\n        pointInactiveFillOpacity: 0.3,\n        /** 点图 inactive 状态下描边透明度 */\n        pointInactiveBorderOpacity: 0.3,\n        /** 空心点图大小 */\n        hollowPointSize: 4,\n        /** 空心点图描边粗细 */\n        hollowPointBorder: 1,\n        /** 空心点图描边颜色 */\n        hollowPointBorderColor: QUALITATIVE_10[0],\n        /** 空心点图描边透明度 */\n        hollowPointBorderOpacity: 0.95,\n        hollowPointFillColor: WHITE_COLORS[100],\n        /** 空心点图 active 状态下描边粗细 */\n        hollowPointActiveBorder: 1,\n        /** 空心点图 active 状态下描边颜色 */\n        hollowPointActiveBorderColor: BLACK_COLORS[100],\n        /** 空心点图 active 状态下描边透明度 */\n        hollowPointActiveBorderOpacity: 1,\n        /** 空心点图 selected 状态下描边粗细 */\n        hollowPointSelectedBorder: 2,\n        /** 空心点图 selected 状态下描边颜色 */\n        hollowPointSelectedBorderColor: BLACK_COLORS[100],\n        /** 空心点图 selected 状态下描边透明度 */\n        hollowPointSelectedBorderOpacity: 1,\n        /** 空心点图 inactive 状态下描边透明度 */\n        hollowPointInactiveBorderOpacity: 0.3,\n        /** 线图粗细 */\n        lineBorder: 2,\n        /** 线图颜色 */\n        lineBorderColor: QUALITATIVE_10[0],\n        /** 线图透明度 */\n        lineBorderOpacity: 1,\n        /** 线图 Active 状态下粗细 */\n        lineActiveBorder: 3,\n        /** 线图 selected 状态下粗细 */\n        lineSelectedBorder: 3,\n        /** 线图 inactive 状态下透明度 */\n        lineInactiveBorderOpacity: 0.3,\n        /** area 填充颜色 */\n        areaFillColor: QUALITATIVE_10[0],\n        /** area 填充透明度 */\n        areaFillOpacity: 0.25,\n        /** area 在 active 状态下的填充透明度 */\n        areaActiveFillColor: QUALITATIVE_10[0],\n        areaActiveFillOpacity: 0.5,\n        /** area 在 selected 状态下的填充透明度 */\n        areaSelectedFillColor: QUALITATIVE_10[0],\n        areaSelectedFillOpacity: 0.5,\n        /** area inactive 状态下填充透明度 */\n        areaInactiveFillOpacity: 0.3,\n        /** hollowArea 颜色 */\n        hollowAreaBorderColor: QUALITATIVE_10[0],\n        /** hollowArea 边框粗细 */\n        hollowAreaBorder: 2,\n        /** hollowArea 边框透明度 */\n        hollowAreaBorderOpacity: 1,\n        /** hollowArea active 状态下的边框粗细 */\n        hollowAreaActiveBorder: 3,\n        hollowAreaActiveBorderColor: BLACK_COLORS[100],\n        /** hollowArea selected 状态下的边框粗细 */\n        hollowAreaSelectedBorder: 3,\n        hollowAreaSelectedBorderColor: BLACK_COLORS[100],\n        /** hollowArea inactive 状态下的边框透明度 */\n        hollowAreaInactiveBorderOpacity: 0.3,\n        /** interval 填充颜色 */\n        intervalFillColor: QUALITATIVE_10[0],\n        /** interval 填充透明度 */\n        intervalFillOpacity: 0.95,\n        /** interval active 状态下边框粗细 */\n        intervalActiveBorder: 1,\n        /** interval active 状态下边框颜色 */\n        intervalActiveBorderColor: BLACK_COLORS[100],\n        intervalActiveBorderOpacity: 1,\n        /** interval selected 状态下边框粗细 */\n        intervalSelectedBorder: 2,\n        /** interval selected 状态下边框颜色 */\n        intervalSelectedBorderColor: BLACK_COLORS[100],\n        /** interval selected 状态下边框透明度 */\n        intervalSelectedBorderOpacity: 1,\n        /** interval inactive 状态下边框透明度 */\n        intervalInactiveBorderOpacity: 0.3,\n        /** interval inactive 状态下填充透明度 */\n        intervalInactiveFillOpacity: 0.3,\n        /** interval 边框粗细 */\n        hollowIntervalBorder: 2,\n        /** hollowInterval 边框颜色 */\n        hollowIntervalBorderColor: QUALITATIVE_10[0],\n        /** hollowInterval 边框透明度 */\n        hollowIntervalBorderOpacity: 1,\n        hollowIntervalFillColor: WHITE_COLORS[100],\n        /** hollowInterval active 状态下边框粗细 */\n        hollowIntervalActiveBorder: 2,\n        /** hollowInterval active 状态下边框颜色 */\n        hollowIntervalActiveBorderColor: BLACK_COLORS[100],\n        /** hollowInterval selected 状态下边框粗细 */\n        hollowIntervalSelectedBorder: 3,\n        /** hollowInterval selected 状态下边框颜色 */\n        hollowIntervalSelectedBorderColor: BLACK_COLORS[100],\n        /** hollowInterval selected 状态下边框透明度 */\n        hollowIntervalSelectedBorderOpacity: 1,\n        /** hollowInterval inactive 状态下边框透明度 */\n        hollowIntervalInactiveBorderOpacity: 0.3,\n    };\n    return __assign(__assign({}, token), cfg);\n};\nexport var antvDark = createDarkStyleSheet();\n//# sourceMappingURL=dark.js.map","export function getPixelRatio() {\n    return window ? window.devicePixelRatio : 1;\n}\n/**\n * 两点之间的距离\n * @param {number} x1 起始点 x\n * @param {number} y1 起始点 y\n * @param {number} x2 结束点 x\n * @param {number} y2 结束点 y\n */\nexport function distance(x1, y1, x2, y2) {\n    var dx = x1 - x2;\n    var dy = y1 - y2;\n    return Math.sqrt(dx * dx + dy * dy);\n}\n/**\n * 是否在包围盒内\n * @param {number} minX   包围盒开始的点 x\n * @param {number} minY   包围盒开始的点 y\n * @param {number} width  宽度\n * @param {number} height 高度\n * @param {[type]} x      检测点的 x\n * @param {[type]} y      监测点的 y\n */\nexport function inBox(minX, minY, width, height, x, y) {\n    return x >= minX && x <= minX + width && y >= minY && y <= minY + height;\n}\nexport function intersectRect(box1, box2) {\n    return !(box2.minX > box1.maxX || box2.maxX < box1.minX || box2.minY > box1.maxY || box2.maxY < box1.minY);\n}\n// 合并两个区域\nexport function mergeRegion(region1, region2) {\n    if (!region1 || !region2) {\n        return region1 || region2;\n    }\n    return {\n        minX: Math.min(region1.minX, region2.minX),\n        minY: Math.min(region1.minY, region2.minY),\n        maxX: Math.max(region1.maxX, region2.maxX),\n        maxY: Math.max(region1.maxY, region2.maxY),\n    };\n}\n/**\n * 判断两个点是否重合，点坐标的格式为 [x, y]\n * @param {Array} point1 第一个点\n * @param {Array} point2 第二个点\n */\nexport function isSamePoint(point1, point2) {\n    return point1[0] === point2[0] && point1[1] === point2[1];\n}\nexport { isNil, isString, isFunction, isArray, each, toRadian, mod, isNumberEqual, requestAnimationFrame, clearAnimationFrame, } from '@antv/util';\n//# sourceMappingURL=util.js.map","import { isString, each, isArray } from './util';\nvar regexLG = /^l\\s*\\(\\s*([\\d.]+)\\s*\\)\\s*(.*)/i;\nvar regexRG = /^r\\s*\\(\\s*([\\d.]+)\\s*,\\s*([\\d.]+)\\s*,\\s*([\\d.]+)\\s*\\)\\s*(.*)/i;\nvar regexPR = /^p\\s*\\(\\s*([axyn])\\s*\\)\\s*(.*)/i;\nvar regexColorStop = /[\\d.]+:(#[^\\s]+|[^\\)]+\\))/gi;\nfunction addStop(steps, gradient) {\n    var arr = steps.match(regexColorStop);\n    each(arr, function (item) {\n        var itemArr = item.split(':');\n        gradient.addColorStop(itemArr[0], itemArr[1]);\n    });\n}\n/**\n * 将边和填充设置的颜色转换成线性渐变对象\n * @param {CanvasRenderingContext2D} context canvas 上下文\n * @param {IElement}                 element  图形元素\n * @param {string}                   gradientStr   颜色\n * @returns {any} 渐变对象\n */\nexport function parseLineGradient(context, element, gradientStr) {\n    var arr = regexLG.exec(gradientStr);\n    var angle = (parseFloat(arr[1]) % 360) * (Math.PI / 180);\n    var steps = arr[2];\n    var box = element.getBBox();\n    var start;\n    var end;\n    if (angle >= 0 && angle < (1 / 2) * Math.PI) {\n        start = {\n            x: box.minX,\n            y: box.minY,\n        };\n        end = {\n            x: box.maxX,\n            y: box.maxY,\n        };\n    }\n    else if ((1 / 2) * Math.PI <= angle && angle < Math.PI) {\n        start = {\n            x: box.maxX,\n            y: box.minY,\n        };\n        end = {\n            x: box.minX,\n            y: box.maxY,\n        };\n    }\n    else if (Math.PI <= angle && angle < (3 / 2) * Math.PI) {\n        start = {\n            x: box.maxX,\n            y: box.maxY,\n        };\n        end = {\n            x: box.minX,\n            y: box.minY,\n        };\n    }\n    else {\n        start = {\n            x: box.minX,\n            y: box.maxY,\n        };\n        end = {\n            x: box.maxX,\n            y: box.minY,\n        };\n    }\n    var tanTheta = Math.tan(angle);\n    var tanTheta2 = tanTheta * tanTheta;\n    var x = (end.x - start.x + tanTheta * (end.y - start.y)) / (tanTheta2 + 1) + start.x;\n    var y = (tanTheta * (end.x - start.x + tanTheta * (end.y - start.y))) / (tanTheta2 + 1) + start.y;\n    var gradient = context.createLinearGradient(start.x, start.y, x, y);\n    addStop(steps, gradient);\n    return gradient;\n}\n/**\n * 将边和填充设置的颜色转换成圆形渐变对象\n * @param {CanvasRenderingContext2D} context canvas 上下文\n * @param {IElement}                 element  图形元素\n * @param {string}                   gradientStr   颜色\n * @returns {any} 渐变对象\n */\nexport function parseRadialGradient(context, element, gradientStr) {\n    var arr = regexRG.exec(gradientStr);\n    var fx = parseFloat(arr[1]);\n    var fy = parseFloat(arr[2]);\n    var fr = parseFloat(arr[3]);\n    var steps = arr[4];\n    // 环半径为0时，默认无渐变，取渐变序列的最后一个颜色\n    if (fr === 0) {\n        var colors = steps.match(regexColorStop);\n        return colors[colors.length - 1].split(':')[1];\n    }\n    var box = element.getBBox();\n    var width = box.maxX - box.minX;\n    var height = box.maxY - box.minY;\n    var r = Math.sqrt(width * width + height * height) / 2;\n    var gradient = context.createRadialGradient(box.minX + width * fx, box.minY + height * fy, 0, box.minX + width / 2, box.minY + height / 2, fr * r);\n    addStop(steps, gradient);\n    return gradient;\n}\n/**\n * 边和填充设置的颜色转换成 pattern\n * @param {CanvasRenderingContext2D} context canvas 上下文\n * @param {IElement}                 element  图形元素\n * @param {string}                   patternStr   生成 pattern 的字符串\n */\nexport function parsePattern(context, element, patternStr) {\n    // 在转换过程中进行了缓存\n    if (element.get('patternSource') && element.get('patternSource') === patternStr) {\n        return element.get('pattern');\n    }\n    var pattern;\n    var img;\n    var arr = regexPR.exec(patternStr);\n    var repeat = arr[1];\n    var source = arr[2];\n    // Function to be called when pattern loads\n    function onload() {\n        // Create pattern\n        pattern = context.createPattern(img, repeat);\n        element.set('pattern', pattern); // be a cache\n        element.set('patternSource', patternStr);\n    }\n    switch (repeat) {\n        case 'a':\n            repeat = 'repeat';\n            break;\n        case 'x':\n            repeat = 'repeat-x';\n            break;\n        case 'y':\n            repeat = 'repeat-y';\n            break;\n        case 'n':\n            repeat = 'no-repeat';\n            break;\n        default:\n            repeat = 'no-repeat';\n    }\n    img = new Image();\n    // If source URL is not a data URL\n    if (!source.match(/^data:/i)) {\n        // Set crossOrigin for this image\n        img.crossOrigin = 'Anonymous';\n    }\n    img.src = source;\n    if (img.complete) {\n        onload();\n    }\n    else {\n        img.onload = onload;\n        // Fix onload() bug in IE9\n        img.src = img.src;\n    }\n    return pattern;\n}\nexport function parseStyle(context, element, color) {\n    var bbox = element.getBBox();\n    if (isNaN(bbox.x) || isNaN(bbox.y) || isNaN(bbox.width) || isNaN(bbox.height)) {\n        return color;\n    }\n    if (isString(color)) {\n        if (color[1] === '(' || color[2] === '(') {\n            if (color[0] === 'l') {\n                // regexLG.test(color)\n                return parseLineGradient(context, element, color);\n            }\n            if (color[0] === 'r') {\n                // regexRG.test(color)\n                return parseRadialGradient(context, element, color);\n            }\n            if (color[0] === 'p') {\n                // regexPR.test(color)\n                return parsePattern(context, element, color);\n            }\n        }\n        return color;\n    }\n    if (color instanceof CanvasPattern) {\n        return color;\n    }\n}\nexport function parseRadius(radius) {\n    var r1 = 0;\n    var r2 = 0;\n    var r3 = 0;\n    var r4 = 0;\n    if (isArray(radius)) {\n        if (radius.length === 1) {\n            r1 = r2 = r3 = r4 = radius[0];\n        }\n        else if (radius.length === 2) {\n            r1 = r3 = radius[0];\n            r2 = r4 = radius[1];\n        }\n        else if (radius.length === 3) {\n            r1 = radius[0];\n            r2 = r4 = radius[1];\n            r3 = radius[2];\n        }\n        else {\n            r1 = radius[0];\n            r2 = radius[1];\n            r3 = radius[2];\n            r4 = radius[3];\n        }\n    }\n    else {\n        r1 = r2 = r3 = r4 = radius;\n    }\n    return [r1, r2, r3, r4];\n}\n//# sourceMappingURL=parse.js.map","import { mod, toRadian, isSamePoint } from './util';\n// 向量长度\nfunction vMag(v) {\n    return Math.sqrt(v[0] * v[0] + v[1] * v[1]);\n}\n// u.v/|u||v|，计算夹角的余弦值\nfunction vRatio(u, v) {\n    // 当存在一个向量的长度为 0 时，夹角也为 0，即夹角的余弦值为 1\n    return vMag(u) * vMag(v) ? (u[0] * v[0] + u[1] * v[1]) / (vMag(u) * vMag(v)) : 1;\n}\n// 向量角度\nfunction vAngle(u, v) {\n    return (u[0] * v[1] < u[1] * v[0] ? -1 : 1) * Math.acos(vRatio(u, v));\n}\n// A 0:rx 1:ry 2:x-axis-rotation 3:large-arc-flag 4:sweep-flag 5: x 6: y\nexport default function getArcParams(startPoint, params) {\n    var rx = params[1];\n    var ry = params[2];\n    var xRotation = mod(toRadian(params[3]), Math.PI * 2);\n    var arcFlag = params[4];\n    var sweepFlag = params[5];\n    // 弧形起点坐标\n    var x1 = startPoint[0];\n    var y1 = startPoint[1];\n    // 弧形终点坐标\n    var x2 = params[6];\n    var y2 = params[7];\n    var xp = (Math.cos(xRotation) * (x1 - x2)) / 2.0 + (Math.sin(xRotation) * (y1 - y2)) / 2.0;\n    var yp = (-1 * Math.sin(xRotation) * (x1 - x2)) / 2.0 + (Math.cos(xRotation) * (y1 - y2)) / 2.0;\n    var lambda = (xp * xp) / (rx * rx) + (yp * yp) / (ry * ry);\n    if (lambda > 1) {\n        rx *= Math.sqrt(lambda);\n        ry *= Math.sqrt(lambda);\n    }\n    var diff = rx * rx * (yp * yp) + ry * ry * (xp * xp);\n    var f = diff ? Math.sqrt((rx * rx * (ry * ry) - diff) / diff) : 1;\n    if (arcFlag === sweepFlag) {\n        f *= -1;\n    }\n    if (isNaN(f)) {\n        f = 0;\n    }\n    // 旋转前的起点坐标，且当长半轴和短半轴的长度为 0 时，坐标按 (0, 0) 处理\n    var cxp = ry ? (f * rx * yp) / ry : 0;\n    var cyp = rx ? (f * -ry * xp) / rx : 0;\n    // 椭圆圆心坐标\n    var cx = (x1 + x2) / 2.0 + Math.cos(xRotation) * cxp - Math.sin(xRotation) * cyp;\n    var cy = (y1 + y2) / 2.0 + Math.sin(xRotation) * cxp + Math.cos(xRotation) * cyp;\n    // 起始点的单位向量\n    var u = [(xp - cxp) / rx, (yp - cyp) / ry];\n    // 终止点的单位向量\n    var v = [(-1 * xp - cxp) / rx, (-1 * yp - cyp) / ry];\n    // 计算起始点和圆心的连线，与 x 轴正方向的夹角\n    var theta = vAngle([1, 0], u);\n    // 计算圆弧起始点和终止点与椭圆圆心连线的夹角\n    var dTheta = vAngle(u, v);\n    if (vRatio(u, v) <= -1) {\n        dTheta = Math.PI;\n    }\n    if (vRatio(u, v) >= 1) {\n        dTheta = 0;\n    }\n    if (sweepFlag === 0 && dTheta > 0) {\n        dTheta = dTheta - 2 * Math.PI;\n    }\n    if (sweepFlag === 1 && dTheta < 0) {\n        dTheta = dTheta + 2 * Math.PI;\n    }\n    return {\n        cx: cx,\n        cy: cy,\n        // 弧形的起点和终点相同时，长轴和短轴的长度按 0 处理\n        rx: isSamePoint(startPoint, [x2, y2]) ? 0 : rx,\n        ry: isSamePoint(startPoint, [x2, y2]) ? 0 : ry,\n        startAngle: theta,\n        endAngle: theta + dTheta,\n        xRotation: xRotation,\n        arcFlag: arcFlag,\n        sweepFlag: sweepFlag,\n    };\n}\n//# sourceMappingURL=arc-params.js.map","import { __assign, __rest } from \"tslib\";\nimport { Path } from '../shape';\nvar sin = Math.sin, cos = Math.cos, atan2 = Math.atan2, PI = Math.PI;\nfunction _addDefaultArrow(shape, attrs, x1, y1, x2, y2, isStart) {\n    var stroke = attrs.stroke, lineWidth = attrs.lineWidth;\n    var x = x1 - x2;\n    var y = y1 - y2;\n    var rad = atan2(y, x);\n    var arrowShape = new Path({\n        type: 'path',\n        canvas: shape.get('canvas'),\n        isArrowShape: true,\n        attrs: {\n            // 默认箭头的边长为 10，夹角为 60 度\n            path: \"M\" + 10 * cos(PI / 6) + \",\" + 10 * sin(PI / 6) + \" L0,0 L\" + 10 * cos(PI / 6) + \",-\" + 10 * sin(PI / 6),\n            // 使用 shape stroke 值\n            stroke: stroke,\n            lineWidth: lineWidth,\n        },\n    });\n    arrowShape.translate(x2, y2);\n    arrowShape.rotateAtPoint(x2, y2, rad);\n    shape.set(isStart ? 'startArrowShape' : 'endArrowShape', arrowShape);\n}\n/**\n * 箭头 path 的设置要求\n * 1. 箭头顶点坐标需要为 (0, 0)\n * 2. 箭头夹角的中心分割线需要与 X 轴正方向对齐\n */\nfunction _addCustomizedArrow(shape, attrs, x1, y1, x2, y2, isStart) {\n    var startArrow = attrs.startArrow, endArrow = attrs.endArrow, stroke = attrs.stroke, lineWidth = attrs.lineWidth;\n    var arrowAttrs = isStart ? startArrow : endArrow;\n    var d = arrowAttrs.d, arrowFill = arrowAttrs.fill, arrowStroke = arrowAttrs.stroke, arrowLineWidth = arrowAttrs.lineWidth, restAttrs = __rest(arrowAttrs, [\"d\", \"fill\", \"stroke\", \"lineWidth\"]);\n    var x = x1 - x2;\n    var y = y1 - y2;\n    var rad = atan2(y, x);\n    if (d) {\n        x2 = x2 - cos(rad) * d;\n        y2 = y2 - sin(rad) * d;\n    }\n    var arrowShape = new Path({\n        type: 'path',\n        canvas: shape.get('canvas'),\n        isArrowShape: true,\n        attrs: __assign(__assign({}, restAttrs), { \n            // 支持单独设置箭头的 stroke 和 lineWidth，若为空则使用 shape 的值\n            stroke: arrowStroke || stroke, lineWidth: arrowLineWidth || lineWidth, \n            // 箭头是否填充需要手动设置，不会继承自 shape 的值\n            fill: arrowFill }),\n    });\n    arrowShape.translate(x2, y2);\n    arrowShape.rotateAtPoint(x2, y2, rad);\n    shape.set(isStart ? 'startArrowShape' : 'endArrowShape', arrowShape);\n}\n/**\n * 如果自定义箭头并且有 d 需要做偏移，如果直接画，线条会超出箭头尖端，因此需要根据箭头偏移 d, 返回线需要缩短的距离\n * |----------------\n * |<|--------------\n * |\n * @param {number} x1 起始点 x\n * @param {number} y1 起始点 y\n * @param {number} x2 箭头作用点 x\n * @param {number} y2 箭头作用点 y\n * @param {number} d  箭头沿线条方向的偏移距离\n * @return {{dx: number, dy: number}} 返回线条偏移距离\n */\nexport function getShortenOffset(x1, y1, x2, y2, d) {\n    var rad = atan2(y2 - y1, x2 - x1);\n    return {\n        dx: cos(rad) * d,\n        dy: sin(rad) * d,\n    };\n}\n/**\n * 绘制起始箭头\n * @param {IShape} shape 图形\n * @param {ShapeAttrs} attrs shape 的绘图属性\n * @param {number} x1 起始点 x\n * @param {number} y1 起始点 y\n * @param {number} x2 箭头作用点 x\n * @param {number} y2 箭头作用点 y\n */\nexport function addStartArrow(shape, attrs, x1, y1, x2, y2) {\n    if (typeof attrs.startArrow === 'object') {\n        _addCustomizedArrow(shape, attrs, x1, y1, x2, y2, true);\n    }\n    else if (attrs.startArrow) {\n        _addDefaultArrow(shape, attrs, x1, y1, x2, y2, true);\n    }\n    else {\n        shape.set('startArrowShape', null);\n    }\n}\n/**\n * 绘制结束箭头\n * @param {IShape} shape 图形\n * @param {ShapeAttrs} attrs shape 的绘图属性\n * @param {number} x1 起始点 x\n * @param {number} y1 起始点 y\n * @param {number} x2 箭头作用点 x\n * @param {number} y2 箭头作用点 y\n */\nexport function addEndArrow(shape, attrs, x1, y1, x2, y2) {\n    if (typeof attrs.endArrow === 'object') {\n        _addCustomizedArrow(shape, attrs, x1, y1, x2, y2, false);\n    }\n    else if (attrs.endArrow) {\n        _addDefaultArrow(shape, attrs, x1, y1, x2, y2, false);\n    }\n    else {\n        shape.set('startArrowShape', null);\n    }\n}\n//# sourceMappingURL=arrow.js.map","import { each, isArray, max, min } from '@antv/util';\nimport { parseStyle } from './parse';\nimport getArcParams from './arc-params';\nimport { mergeRegion, intersectRect } from './util';\nimport * as ArrowUtil from '../util/arrow';\nvar SHAPE_ATTRS_MAP = {\n    fill: 'fillStyle',\n    stroke: 'strokeStyle',\n    opacity: 'globalAlpha',\n};\nexport function applyAttrsToContext(context, element) {\n    var attrs = element.attr();\n    for (var k in attrs) {\n        var v = attrs[k];\n        // 转换一下不与 canvas 兼容的属性名\n        var name_1 = SHAPE_ATTRS_MAP[k] ? SHAPE_ATTRS_MAP[k] : k;\n        if (name_1 === 'matrix' && v) {\n            // 设置矩阵\n            context.transform(v[0], v[1], v[3], v[4], v[6], v[7]);\n        }\n        else if (name_1 === 'lineDash' && context.setLineDash) {\n            // 设置虚线，只支持数组形式，非数组形式不做任何操作\n            isArray(v) && context.setLineDash(v);\n        }\n        else {\n            if (name_1 === 'strokeStyle' || name_1 === 'fillStyle') {\n                // 如果存在渐变、pattern 这个开销有些大\n                // 可以考虑缓存机制，通过 hasUpdate 来避免一些运算\n                v = parseStyle(context, element, v);\n            }\n            else if (name_1 === 'globalAlpha') {\n                // opacity 效果可以叠加，子元素的 opacity 需要与父元素 opacity 相乘\n                v = v * context.globalAlpha;\n            }\n            context[name_1] = v;\n        }\n    }\n}\nexport function drawChildren(context, children, region) {\n    for (var i = 0; i < children.length; i++) {\n        var child = children[i];\n        if (child.cfg.visible) {\n            child.draw(context, region);\n        }\n        else {\n            child.skipDraw();\n        }\n    }\n}\n// 这个地方的逻辑比较复杂，简单画了一张图：https://www.yuque.com/antv/ou292n/pcgt5g#OW1QE\nexport function checkRefresh(canvas, children, region) {\n    var refreshElements = canvas.get('refreshElements');\n    // 先遍历需要刷新的元素，将这些元素的父元素也设置 refresh\n    each(refreshElements, function (el) {\n        if (el !== canvas) {\n            var parent_1 = el.cfg.parent;\n            while (parent_1 && parent_1 !== canvas && !parent_1.cfg.refresh) {\n                parent_1.cfg.refresh = true;\n                parent_1 = parent_1.cfg.parent;\n            }\n        }\n    });\n    if (refreshElements[0] === canvas) {\n        setChildrenRefresh(children, region);\n    }\n    else {\n        // 检查所有子元素是否可以刷新\n        checkChildrenRefresh(children, region);\n    }\n}\n// 检查所有的子元素是否应该更新\nexport function checkChildrenRefresh(children, region) {\n    for (var i = 0; i < children.length; i++) {\n        var child = children[i];\n        if (child.cfg.visible) {\n            // 先判断 hasChanged，因为它的优先级判断应该高于 refresh\n            if (child.cfg.hasChanged) {\n                // 如果节点发生了 change，则需要级联设置子元素的 refresh\n                child.cfg.refresh = true;\n                if (child.isGroup()) {\n                    setChildrenRefresh(child.cfg.children, region);\n                }\n            }\n            else if (child.cfg.refresh) {\n                // 如果当前图形/分组 refresh = true，说明其子节点存在 changed\n                if (child.isGroup()) {\n                    checkChildrenRefresh(child.cfg.children, region);\n                }\n            }\n            else {\n                // 这个分支说明此次局部刷新，所有的节点和父元素没有发生变化，仅需要检查包围盒（缓存）是否相交即可\n                var refresh = checkElementRefresh(child, region);\n                child.cfg.refresh = refresh;\n                if (refresh && child.isGroup()) {\n                    // 如果需要刷新，说明子元素也需要刷新，继续进行判定\n                    checkChildrenRefresh(child.cfg.children, region);\n                }\n            }\n        }\n    }\n}\n// 由于对改变的图形放入 refreshElements 时做了优化，判定父元素 changed 时不加入\n// 那么有可能会出现 elements 都为空，所以最终 group\nexport function clearChanged(elements) {\n    for (var i = 0; i < elements.length; i++) {\n        var el = elements[i];\n        el.cfg.hasChanged = false;\n        // 级联清理\n        if (el.isGroup() && !el.destroyed) {\n            clearChanged(el.cfg.children);\n        }\n    }\n}\n// 当某个父元素发生改变时，调用这个方法级联设置 refresh\nfunction setChildrenRefresh(children, region) {\n    for (var i = 0; i < children.length; i++) {\n        var child = children[i];\n        if (!child.cfg.visible) {\n            continue;\n        }\n        // let refresh = true;\n        // 获取缓存的 bbox，如果这个 bbox 还存在则说明父元素不是矩阵发生了改变\n        // const bbox = child.cfg.canvasBBox;\n        // if (bbox) {\n        //   // 如果这时候\n        //   refresh = intersectRect(bbox, region);\n        // }\n        child.cfg.refresh = true;\n        // 如果需要刷新当前节点，所有的子元素设置 refresh\n        if (child.isGroup()) {\n            setChildrenRefresh(child.get('children'), region);\n        }\n    }\n}\nfunction checkElementRefresh(shape, region) {\n    var bbox = shape.cfg.cacheCanvasBBox;\n    var isAllow = shape.cfg.isInView && bbox && intersectRect(bbox, region);\n    return isAllow;\n}\n// 绘制 path\nexport function drawPath(shape, context, attrs, arcParamsCache) {\n    var path = attrs.path, startArrow = attrs.startArrow, endArrow = attrs.endArrow;\n    if (!path) {\n        return;\n    }\n    var currentPoint = [0, 0]; // 当前图形\n    var startMovePoint = [0, 0]; // 开始 M 的点，可能会有多个\n    var distance = {\n        dx: 0,\n        dy: 0,\n    };\n    context.beginPath();\n    for (var i = 0; i < path.length; i++) {\n        var params = path[i];\n        var command = params[0];\n        if (i === 0 && startArrow && startArrow.d) {\n            var tangent = shape.getStartTangent();\n            distance = ArrowUtil.getShortenOffset(tangent[0][0], tangent[0][1], tangent[1][0], tangent[1][1], startArrow.d);\n        }\n        else if (i === path.length - 2 && path[i + 1][0] === 'Z' && endArrow && endArrow.d) {\n            // 为了防止结尾为 Z 的 segment 缩短不起效，需要取最后两个 segment 特殊处理\n            var lastPath = path[i + 1];\n            if (lastPath[0] === 'Z') {\n                var tangent = shape.getEndTangent();\n                distance = ArrowUtil.getShortenOffset(tangent[0][0], tangent[0][1], tangent[1][0], tangent[1][1], endArrow.d);\n            }\n        }\n        else if (i === path.length - 1 && endArrow && endArrow.d) {\n            if (path[0] !== 'Z') {\n                var tangent = shape.getEndTangent();\n                distance = ArrowUtil.getShortenOffset(tangent[0][0], tangent[0][1], tangent[1][0], tangent[1][1], endArrow.d);\n            }\n        }\n        var dx = distance.dx, dy = distance.dy;\n        // V,H,S,T 都在前面被转换成标准形式\n        switch (command) {\n            case 'M':\n                context.moveTo(params[1] - dx, params[2] - dy);\n                startMovePoint = [params[1], params[2]];\n                break;\n            case 'L':\n                context.lineTo(params[1] - dx, params[2] - dy);\n                break;\n            case 'Q':\n                context.quadraticCurveTo(params[1], params[2], params[3] - dx, params[4] - dy);\n                break;\n            case 'C':\n                context.bezierCurveTo(params[1], params[2], params[3], params[4], params[5] - dx, params[6] - dy);\n                break;\n            case 'A': {\n                var arcParams = void 0;\n                // 为了加速绘制，可以提供参数的缓存，各个图形自己缓存\n                if (arcParamsCache) {\n                    arcParams = arcParamsCache[i];\n                    if (!arcParams) {\n                        arcParams = getArcParams(currentPoint, params);\n                        arcParamsCache[i] = arcParams;\n                    }\n                }\n                else {\n                    arcParams = getArcParams(currentPoint, params);\n                }\n                var cx = arcParams.cx, cy = arcParams.cy, rx = arcParams.rx, ry = arcParams.ry, startAngle = arcParams.startAngle, endAngle = arcParams.endAngle, xRotation = arcParams.xRotation, sweepFlag = arcParams.sweepFlag;\n                // 直接使用椭圆的 api\n                if (context.ellipse) {\n                    context.ellipse(cx, cy, rx, ry, xRotation, startAngle, endAngle, 1 - sweepFlag);\n                }\n                else {\n                    var r = rx > ry ? rx : ry;\n                    var scaleX = rx > ry ? 1 : rx / ry;\n                    var scaleY = rx > ry ? ry / rx : 1;\n                    context.translate(cx, cy);\n                    context.rotate(xRotation);\n                    context.scale(scaleX, scaleY);\n                    context.arc(0, 0, r, startAngle, endAngle, 1 - sweepFlag);\n                    context.scale(1 / scaleX, 1 / scaleY);\n                    context.rotate(-xRotation);\n                    context.translate(-cx, -cy);\n                }\n                break;\n            }\n            case 'Z':\n                context.closePath();\n                break;\n            default:\n                break;\n        }\n        // 有了 Z 后，当前节点从开始 M 的点开始\n        if (command === 'Z') {\n            currentPoint = startMovePoint;\n        }\n        else {\n            var len = params.length;\n            currentPoint = [params[len - 2], params[len - 1]];\n        }\n    }\n}\n// 刷新图形元素(Shape 或者 Group)\nexport function refreshElement(element, changeType) {\n    var canvas = element.get('canvas');\n    // 只有存在于 canvas 上时生效\n    if (canvas) {\n        if (changeType === 'remove') {\n            // 一旦 remove，则无法在 element 上拿到包围盒\n            // destroy 后所有属性都拿不到，所以需要暂存一下\n            // 这是一段 hack 的代码\n            element._cacheCanvasBBox = element.get('cacheCanvasBBox');\n        }\n        // 防止反复刷新\n        if (!element.get('hasChanged')) {\n            // 但是始终要标记为 hasChanged，便于后面进行局部渲染\n            element.set('hasChanged', true);\n            // 本来只有局部渲染模式下，才需要记录更新的元素队列\n            // if (canvas.get('localRefresh')) {\n            //   canvas.refreshElement(element, changeType, canvas);\n            // }\n            // 但对于 https://github.com/antvis/g/issues/422 的场景，全局渲染的模式下也需要记录更新的元素队列\n            // 如果当前元素的父元素发生了改变，可以不放入队列，这句话大概能够提升 15% 的初次渲染性能\n            if (!(element.cfg.parent && element.cfg.parent.get('hasChanged'))) {\n                canvas.refreshElement(element, changeType, canvas);\n                if (canvas.get('autoDraw')) {\n                    canvas.draw();\n                }\n            }\n        }\n    }\n}\nexport function getRefreshRegion(element) {\n    var region;\n    if (!element.destroyed) {\n        var cacheBox = element.get('cacheCanvasBBox');\n        var validCache = cacheBox && !!(cacheBox.width && cacheBox.height);\n        var bbox = element.getCanvasBBox();\n        var validBBox = bbox && !!(bbox.width && bbox.height);\n        // 是否是有效 bbox 判定，一些 NaN 或者 宽高为 0 的情况过滤掉\n        if (validCache && validBBox) {\n            region = mergeRegion(cacheBox, bbox);\n        }\n        else if (validCache) {\n            region = cacheBox;\n        }\n        else if (validBBox) {\n            region = bbox;\n        }\n    }\n    else {\n        // 因为元素已经销毁所以无法获取到缓存的包围盒\n        region = element['_cacheCanvasBBox'];\n    }\n    return region;\n}\nexport function getMergedRegion(elements) {\n    if (!elements.length) {\n        return null;\n    }\n    var minXArr = [];\n    var minYArr = [];\n    var maxXArr = [];\n    var maxYArr = [];\n    each(elements, function (el) {\n        var region = getRefreshRegion(el);\n        if (region) {\n            minXArr.push(region.minX);\n            minYArr.push(region.minY);\n            maxXArr.push(region.maxX);\n            maxYArr.push(region.maxY);\n        }\n    });\n    return {\n        minX: min(minXArr),\n        minY: min(minYArr),\n        maxX: max(maxXArr),\n        maxY: max(maxYArr),\n    };\n}\nexport function mergeView(region, viewRegion) {\n    if (!region || !viewRegion) {\n        return null;\n    }\n    // 不相交，则直接返回 null\n    if (!intersectRect(region, viewRegion)) {\n        return null;\n    }\n    return {\n        minX: Math.max(region.minX, viewRegion.minX),\n        minY: Math.max(region.minY, viewRegion.minY),\n        maxX: Math.min(region.maxX, viewRegion.maxX),\n        maxY: Math.min(region.maxY, viewRegion.maxY),\n    };\n}\n//# sourceMappingURL=draw.js.map","import { __extends } from \"tslib\";\nimport { AbstractGroup } from '@antv/g-base';\nimport * as Shape from './shape';\nimport { applyAttrsToContext, drawChildren, refreshElement } from './util/draw';\nimport { each, max, min } from '@antv/util';\nimport { intersectRect } from './util/util';\nvar Group = /** @class */ (function (_super) {\n    __extends(Group, _super);\n    function Group() {\n        return _super !== null && _super.apply(this, arguments) || this;\n    }\n    /**\n     * 一些方法调用会引起画布变化\n     * @param {ChangeType} changeType 改变的类型\n     */\n    Group.prototype.onCanvasChange = function (changeType) {\n        refreshElement(this, changeType);\n    };\n    Group.prototype.getShapeBase = function () {\n        return Shape;\n    };\n    Group.prototype.getGroupBase = function () {\n        return Group;\n    };\n    // 同 shape 中的方法重复了\n    Group.prototype._applyClip = function (context, clip) {\n        if (clip) {\n            context.save();\n            // 将 clip 的属性挂载到 context 上\n            applyAttrsToContext(context, clip);\n            // 绘制 clip 路径\n            clip.createPath(context);\n            context.restore();\n            // 裁剪\n            context.clip();\n            clip._afterDraw();\n        }\n    };\n    // 这个方法以前直接使用的 getCanvasBBox，由于 group 上没有缓存，所以每次重新计算，导致性能开销比较大\n    // 大概能够节省全局渲染 15-20% 的性能，如果不在这里加缓存优化后 10W 个节点无法达到 5-6 ms，大概能够 30-40ms\n    Group.prototype.cacheCanvasBBox = function () {\n        var children = this.cfg.children;\n        var xArr = [];\n        var yArr = [];\n        each(children, function (child) {\n            var bbox = child.cfg.cacheCanvasBBox;\n            // isInview 的判定是一旦图形或者分组渲染就要计算是否在视图内，\n            // 这个判定 10W 个图形下差不多能够节省 5-6 ms 的开销\n            if (bbox && child.cfg.isInView) {\n                xArr.push(bbox.minX, bbox.maxX);\n                yArr.push(bbox.minY, bbox.maxY);\n            }\n        });\n        var bbox = null;\n        if (xArr.length) {\n            var minX = min(xArr);\n            var maxX = max(xArr);\n            var minY = min(yArr);\n            var maxY = max(yArr);\n            bbox = {\n                minX: minX,\n                minY: minY,\n                x: minX,\n                y: minY,\n                maxX: maxX,\n                maxY: maxY,\n                width: maxX - minX,\n                height: maxY - minY,\n            };\n            var canvas = this.cfg.canvas;\n            if (canvas) {\n                var viewRange = canvas.getViewRange();\n                // 如果这个地方判定 isInView == false 设置 bbox 为 false 的话，拾取的性能会更高\n                // 但是目前 10W 图形的拾取在 2-5ms 内，这个优化意义不大，可以后期观察再看\n                this.set('isInView', intersectRect(bbox, viewRange));\n            }\n        }\n        else {\n            this.set('isInView', false);\n        }\n        this.set('cacheCanvasBBox', bbox);\n    };\n    Group.prototype.draw = function (context, region) {\n        var children = this.cfg.children;\n        var allowDraw = region ? this.cfg.refresh : true; // 局部刷新需要判定\n        // 这个地方需要判定，在 G6 的场景每个 group 都有 transform 的场景下性能会开销非常大\n        // 通过 refresh 的判定，可以不刷新没有发生过变化的分组，不在视窗内的分组等等\n        // 如果想进一步提升局部渲染性能，可以进一步优化 refresh 的判定，依然有潜力\n        if (children.length && allowDraw) {\n            context.save();\n            // group 上的矩阵和属性也会应用到上下文上\n            // 先将 attrs 应用到上下文中，再设置 clip。因为 clip 应该被当前元素的 matrix 所影响\n            applyAttrsToContext(context, this);\n            this._applyClip(context, this.getClip());\n            drawChildren(context, children, region);\n            context.restore();\n            this.cacheCanvasBBox();\n        }\n        // 这里的成本比较大，如果不绘制则不再\n        // this.set('cacheCanvasBBox', this.getCanvasBBox());\n        this.cfg.refresh = null;\n        // 绘制后，消除更新标记\n        this.set('hasChanged', false);\n    };\n    // 绘制时被跳过，一般发生在分组隐藏时\n    Group.prototype.skipDraw = function () {\n        this.set('cacheCanvasBBox', null);\n        this.set('hasChanged', false);\n    };\n    return Group;\n}(AbstractGroup));\nexport default Group;\n//# sourceMappingURL=group.js.map","import { __assign, __extends } from \"tslib\";\nimport { AbstractShape } from '@antv/g-base';\nimport { isNil, intersectRect } from '../util/util';\nimport { applyAttrsToContext, refreshElement } from '../util/draw';\nimport { getBBoxMethod } from '@antv/g-base';\nimport * as Shape from './index';\nimport Group from '../group';\nvar ShapeBase = /** @class */ (function (_super) {\n    __extends(ShapeBase, _super);\n    function ShapeBase() {\n        return _super !== null && _super.apply(this, arguments) || this;\n    }\n    ShapeBase.prototype.getDefaultAttrs = function () {\n        var attrs = _super.prototype.getDefaultAttrs.call(this);\n        // 设置默认值\n        return __assign(__assign({}, attrs), { lineWidth: 1, lineAppendWidth: 0, strokeOpacity: 1, fillOpacity: 1 });\n    };\n    ShapeBase.prototype.getShapeBase = function () {\n        return Shape;\n    };\n    ShapeBase.prototype.getGroupBase = function () {\n        return Group;\n    };\n    /**\n     * 一些方法调用会引起画布变化\n     * @param {ChangeType} changeType 改变的类型\n     */\n    ShapeBase.prototype.onCanvasChange = function (changeType) {\n        refreshElement(this, changeType);\n    };\n    ShapeBase.prototype.calculateBBox = function () {\n        var type = this.get('type');\n        var lineWidth = this.getHitLineWidth();\n        // const attrs = this.attr();\n        var bboxMethod = getBBoxMethod(type);\n        var box = bboxMethod(this);\n        var halfLineWidth = lineWidth / 2;\n        var minX = box.x - halfLineWidth;\n        var minY = box.y - halfLineWidth;\n        var maxX = box.x + box.width + halfLineWidth;\n        var maxY = box.y + box.height + halfLineWidth;\n        return {\n            x: minX,\n            minX: minX,\n            y: minY,\n            minY: minY,\n            width: box.width + lineWidth,\n            height: box.height + lineWidth,\n            maxX: maxX,\n            maxY: maxY,\n        };\n    };\n    ShapeBase.prototype.isFill = function () {\n        return !!this.attrs['fill'] || this.isClipShape();\n    };\n    ShapeBase.prototype.isStroke = function () {\n        return !!this.attrs['stroke'];\n    };\n    // 同 shape 中的方法重复了\n    ShapeBase.prototype._applyClip = function (context, clip) {\n        if (clip) {\n            context.save();\n            // 将 clip 的属性挂载到 context 上\n            applyAttrsToContext(context, clip);\n            // 绘制 clip 路径\n            clip.createPath(context);\n            context.restore();\n            // 裁剪\n            context.clip();\n            clip._afterDraw();\n        }\n    };\n    // 绘制图形时需要考虑 region 限制\n    ShapeBase.prototype.draw = function (context, region) {\n        var clip = this.cfg.clipShape;\n        // 如果指定了 region，同时不允许刷新时，直接返回\n        if (region) {\n            if (this.cfg.refresh === false) {\n                // this._afterDraw();\n                this.set('hasChanged', false);\n                return;\n            }\n            // 是否相交需要考虑 clip 的包围盒\n            var bbox = this.getCanvasBBox();\n            if (!intersectRect(region, bbox)) {\n                // 图形的包围盒与重绘区域不相交时，也需要清除标记\n                this.set('hasChanged', false);\n                // 存在多种情形需要更新 cacheCanvasBBox 和 isInview 的判定\n                // 1. 之前图形在视窗内，但是现在不再视窗内\n                // 2. 如果当前的图形以及父元素都没有发生过变化，refresh = false 不会走到这里，所以这里的图形都是父元素发生变化，但是没有在视图内的元素\n                if (this.cfg.isInView) {\n                    this._afterDraw();\n                }\n                return;\n            }\n        }\n        context.save();\n        // 先将 attrs 应用到上下文中，再设置 clip。因为 clip 应该被当前元素的 matrix 所影响\n        applyAttrsToContext(context, this);\n        this._applyClip(context, clip);\n        this.drawPath(context);\n        context.restore();\n        this._afterDraw();\n    };\n    ShapeBase.prototype.getCanvasViewBox = function () {\n        var canvas = this.cfg.canvas;\n        if (canvas) {\n            // @ts-ignore\n            return canvas.getViewRange();\n        }\n        return null;\n    };\n    ShapeBase.prototype.cacheCanvasBBox = function () {\n        var canvasBBox = this.getCanvasViewBox();\n        // 绘制的时候缓存包围盒\n        if (canvasBBox) {\n            var bbox = this.getCanvasBBox();\n            var isInView = intersectRect(bbox, canvasBBox);\n            this.set('isInView', isInView);\n            // 不再视窗内 cacheCanvasBBox 设置成 null，会提升局部渲染的性能，\n            // 因为在局部渲染影响的包围盒计算时不考虑这个图形的包围盒\n            // 父元素 cacheCanvasBBox 计算的时候也不计算\n            if (isInView) {\n                this.set('cacheCanvasBBox', bbox);\n            }\n            else {\n                this.set('cacheCanvasBBox', null);\n            }\n        }\n    };\n    ShapeBase.prototype._afterDraw = function () {\n        this.cacheCanvasBBox();\n        // 绘制后消除标记\n        this.set('hasChanged', false);\n        this.set('refresh', null);\n    };\n    ShapeBase.prototype.skipDraw = function () {\n        this.set('cacheCanvasBBox', null);\n        this.set('isInView', null);\n        this.set('hasChanged', false);\n    };\n    /**\n     * 绘制图形的路径\n     * @param {CanvasRenderingContext2D} context 上下文\n     */\n    ShapeBase.prototype.drawPath = function (context) {\n        this.createPath(context);\n        this.strokeAndFill(context);\n        this.afterDrawPath(context);\n    };\n    /**\n     * @protected\n     * 填充图形\n     * @param {CanvasRenderingContext2D} context context 上下文\n     */\n    ShapeBase.prototype.fill = function (context) {\n        context.fill();\n    };\n    /**\n     * @protected\n     * 绘制图形边框\n     * @param {CanvasRenderingContext2D} context context 上下文\n     */\n    ShapeBase.prototype.stroke = function (context) {\n        context.stroke();\n    };\n    // 绘制或者填充\n    ShapeBase.prototype.strokeAndFill = function (context) {\n        var _a = this.attrs, lineWidth = _a.lineWidth, opacity = _a.opacity, strokeOpacity = _a.strokeOpacity, fillOpacity = _a.fillOpacity;\n        if (this.isFill()) {\n            if (!isNil(fillOpacity) && fillOpacity !== 1) {\n                context.globalAlpha = fillOpacity;\n                this.fill(context);\n                context.globalAlpha = opacity;\n            }\n            else {\n                this.fill(context);\n            }\n        }\n        if (this.isStroke()) {\n            if (lineWidth > 0) {\n                if (!isNil(strokeOpacity) && strokeOpacity !== 1) {\n                    context.globalAlpha = strokeOpacity;\n                }\n                this.stroke(context);\n            }\n        }\n        this.afterDrawPath(context);\n    };\n    /**\n     * @protected\n     * 绘制图形的路径\n     * @param {CanvasRenderingContext2D} context 上下文\n     */\n    ShapeBase.prototype.createPath = function (context) { };\n    /**\n     * 绘制完成 path 后的操作\n     * @param {CanvasRenderingContext2D} context 上下文\n     */\n    ShapeBase.prototype.afterDrawPath = function (context) { };\n    ShapeBase.prototype.isInShape = function (refX, refY) {\n        // return HitUtil.isHitShape(this, refX, refY);\n        var isStroke = this.isStroke();\n        var isFill = this.isFill();\n        var lineWidth = this.getHitLineWidth();\n        return this.isInStrokeOrPath(refX, refY, isStroke, isFill, lineWidth);\n    };\n    // 之所以不拆成 isInStroke 和 isInPath 在于两者存在一些共同的计算\n    ShapeBase.prototype.isInStrokeOrPath = function (x, y, isStroke, isFill, lineWidth) {\n        return false;\n    };\n    /**\n     * 获取线拾取的宽度\n     * @returns {number} 线的拾取宽度\n     */\n    ShapeBase.prototype.getHitLineWidth = function () {\n        if (!this.isStroke()) {\n            return 0;\n        }\n        var attrs = this.attrs;\n        return attrs['lineWidth'] + attrs['lineAppendWidth'];\n    };\n    return ShapeBase;\n}(AbstractShape));\nexport default ShapeBase;\n//# sourceMappingURL=base.js.map","/**\n * @fileoverview 圆\n * @author dxq613@gmail.com\n */\nimport { __assign, __extends } from \"tslib\";\nimport ShapeBase from './base';\nimport { distance } from '../util/util';\nvar Circle = /** @class */ (function (_super) {\n    __extends(Circle, _super);\n    function Circle() {\n        return _super !== null && _super.apply(this, arguments) || this;\n    }\n    Circle.prototype.getDefaultAttrs = function () {\n        var attrs = _super.prototype.getDefaultAttrs.call(this);\n        return __assign(__assign({}, attrs), { x: 0, y: 0, r: 0 });\n    };\n    Circle.prototype.isInStrokeOrPath = function (x, y, isStroke, isFill, lineWidth) {\n        var attrs = this.attr();\n        var cx = attrs.x;\n        var cy = attrs.y;\n        var r = attrs.r;\n        var halfLineWidth = lineWidth / 2;\n        var absDistance = distance(cx, cy, x, y);\n        // 直接用距离，如果同时存在边和填充时，可以减少两次计算\n        if (isFill && isStroke) {\n            return absDistance <= r + halfLineWidth;\n        }\n        if (isFill) {\n            return absDistance <= r;\n        }\n        if (isStroke) {\n            return absDistance >= r - halfLineWidth && absDistance <= r + halfLineWidth;\n        }\n        return false;\n    };\n    Circle.prototype.createPath = function (context) {\n        var attrs = this.attr();\n        var cx = attrs.x;\n        var cy = attrs.y;\n        var r = attrs.r;\n        context.beginPath();\n        context.arc(cx, cy, r, 0, Math.PI * 2, false);\n        context.closePath();\n    };\n    return Circle;\n}(ShapeBase));\nexport default Circle;\n//# sourceMappingURL=circle.js.map","/**\n * @fileoverview 椭圆\n * @author dxq613@gmail.com\n */\nimport { __assign, __extends } from \"tslib\";\nimport ShapeBase from './base';\n// 根据椭圆公式计算 x*x/rx*rx + y*y/ry*ry;\nfunction ellipseDistance(squareX, squareY, rx, ry) {\n    return squareX / (rx * rx) + squareY / (ry * ry);\n}\nvar Ellipse = /** @class */ (function (_super) {\n    __extends(Ellipse, _super);\n    function Ellipse() {\n        return _super !== null && _super.apply(this, arguments) || this;\n    }\n    Ellipse.prototype.getDefaultAttrs = function () {\n        var attrs = _super.prototype.getDefaultAttrs.call(this);\n        return __assign(__assign({}, attrs), { x: 0, y: 0, rx: 0, ry: 0 });\n    };\n    Ellipse.prototype.isInStrokeOrPath = function (x, y, isStroke, isFill, lineWidth) {\n        var attrs = this.attr();\n        var halfLineWith = lineWidth / 2;\n        var cx = attrs.x;\n        var cy = attrs.y;\n        var rx = attrs.rx, ry = attrs.ry;\n        var squareX = (x - cx) * (x - cx);\n        var squareY = (y - cy) * (y - cy);\n        // 使用椭圆的公式： x*x/rx*rx + y*y/ry*ry = 1;\n        if (isFill && isStroke) {\n            return ellipseDistance(squareX, squareY, rx + halfLineWith, ry + halfLineWith) <= 1;\n        }\n        if (isFill) {\n            return ellipseDistance(squareX, squareY, rx, ry) <= 1;\n        }\n        if (isStroke) {\n            return (ellipseDistance(squareX, squareY, rx - halfLineWith, ry - halfLineWith) >= 1 &&\n                ellipseDistance(squareX, squareY, rx + halfLineWith, ry + halfLineWith) <= 1);\n        }\n        return false;\n    };\n    Ellipse.prototype.createPath = function (context) {\n        var attrs = this.attr();\n        var cx = attrs.x;\n        var cy = attrs.y;\n        var rx = attrs.rx;\n        var ry = attrs.ry;\n        context.beginPath();\n        // 兼容逻辑\n        if (context.ellipse) {\n            context.ellipse(cx, cy, rx, ry, 0, 0, Math.PI * 2, false);\n        }\n        else {\n            // 如果不支持，则使用圆来绘制，进行变形\n            var r = rx > ry ? rx : ry;\n            var scaleX = rx > ry ? 1 : rx / ry;\n            var scaleY = rx > ry ? ry / rx : 1;\n            context.save();\n            context.translate(cx, cy);\n            context.scale(scaleX, scaleY);\n            context.arc(0, 0, r, 0, Math.PI * 2);\n            context.restore();\n            context.closePath();\n        }\n    };\n    return Ellipse;\n}(ShapeBase));\nexport default Ellipse;\n//# sourceMappingURL=ellipse.js.map","/**\n * @fileoverview 图片\n * @author dxq613@gmail.com\n */\nimport { __assign, __extends } from \"tslib\";\nimport ShapeBase from './base';\nimport { isString, isNil } from '../util/util';\nfunction isCanvas(dom) {\n    return dom instanceof HTMLElement && isString(dom.nodeName) && dom.nodeName.toUpperCase() === 'CANVAS';\n}\nvar ImageShape = /** @class */ (function (_super) {\n    __extends(ImageShape, _super);\n    function ImageShape() {\n        return _super !== null && _super.apply(this, arguments) || this;\n    }\n    ImageShape.prototype.getDefaultAttrs = function () {\n        var attrs = _super.prototype.getDefaultAttrs.call(this);\n        return __assign(__assign({}, attrs), { x: 0, y: 0, width: 0, height: 0 });\n    };\n    ImageShape.prototype.initAttrs = function (attrs) {\n        this._setImage(attrs.img);\n    };\n    // image 不计算 stroke\n    ImageShape.prototype.isStroke = function () {\n        return false;\n    };\n    // 仅仅使用包围盒检测来进行拾取\n    // 所以不需要复写 isInStrokeOrPath 的方法\n    ImageShape.prototype.isOnlyHitBox = function () {\n        return true;\n    };\n    ImageShape.prototype._afterLoading = function () {\n        if (this.get('toDraw') === true) {\n            var canvas = this.get('canvas');\n            if (canvas) {\n                // 这段应该改成局部渲染\n                canvas.draw();\n            }\n            else {\n                // 这种方式如果发生遮挡会出现问题\n                this.createPath(this.get('context'));\n            }\n        }\n    };\n    ImageShape.prototype._setImage = function (img) {\n        var _this = this;\n        var attrs = this.attrs;\n        if (isString(img)) {\n            var image_1 = new Image();\n            image_1.onload = function () {\n                // 图片未加载完，则已经被销毁\n                if (_this.destroyed) {\n                    return false;\n                }\n                // 缓存原始地址，可以做对比，防止重复加载图片\n                // 如果考虑到在加载过程中可能替换 img 属性，则情况更加复杂\n                // this.set('imgSrc', img);\n                // 这里会循环调用 _setImage 方法，但不会再走这个分支\n                _this.attr('img', image_1);\n                _this.set('loading', false);\n                _this._afterLoading();\n                var callback = _this.get('callback');\n                if (callback) {\n                    callback.call(_this);\n                }\n            };\n            // 设置跨域\n            image_1.crossOrigin = 'Anonymous';\n            image_1.src = img;\n            // loading 过程中不绘制\n            this.set('loading', true);\n        }\n        else if (img instanceof Image) {\n            // 如果是一个 image 对象，则设置宽高\n            if (!attrs.width) {\n                attrs.width = img.width;\n            }\n            if (!attrs.height) {\n                attrs.height = img.height;\n            }\n        }\n        else if (isCanvas(img)) {\n            // 如果设置了 canvas 对象\n            if (!attrs.width) {\n                attrs.width = Number(img.getAttribute('width'));\n            }\n            if (!attrs.height) {\n                attrs.height, Number(img.getAttribute('height'));\n            }\n        }\n    };\n    ImageShape.prototype.onAttrChange = function (name, value, originValue) {\n        _super.prototype.onAttrChange.call(this, name, value, originValue);\n        // 如果加载的已经是当前图片，则不再处理\n        if (name === 'img') {\n            // 可以加缓冲，&& this.get('imgSrc') !== value\n            this._setImage(value);\n        }\n    };\n    ImageShape.prototype.createPath = function (context) {\n        // 正在加载则不绘制\n        if (this.get('loading')) {\n            this.set('toDraw', true); // 加载完成后绘制\n            this.set('context', context);\n            return;\n        }\n        var attrs = this.attr();\n        var x = attrs.x, y = attrs.y, width = attrs.width, height = attrs.height, sx = attrs.sx, sy = attrs.sy, swidth = attrs.swidth, sheight = attrs.sheight;\n        var img = attrs.img;\n        if (img instanceof Image || isCanvas(img)) {\n            if (!isNil(sx) && !isNil(sy) && !isNil(swidth) && !isNil(sheight)) {\n                context.drawImage(img, sx, sy, swidth, sheight, x, y, width, height);\n            }\n            else {\n                context.drawImage(img, x, y, width, height);\n            }\n        }\n    };\n    return ImageShape;\n}(ShapeBase));\nexport default ImageShape;\n//# sourceMappingURL=image.js.map","import { max, min } from '@antv/util';\n/**\n * 两点之间的距离\n * @param {number} x1 起始点 x\n * @param {number} y1 起始点 y\n * @param {number} x2 结束点 x\n * @param {number} y2 结束点 y\n * @return {number} 距离\n */\nexport function distance(x1, y1, x2, y2) {\n    var dx = x1 - x2;\n    var dy = y1 - y2;\n    return Math.sqrt(dx * dx + dy * dy);\n}\nexport function isNumberEqual(v1, v2) {\n    return Math.abs(v1 - v2) < 0.001;\n}\nexport function getBBoxByArray(xArr, yArr) {\n    var minX = min(xArr);\n    var minY = min(yArr);\n    var maxX = max(xArr);\n    var maxY = max(yArr);\n    return {\n        x: minX,\n        y: minY,\n        width: maxX - minX,\n        height: maxY - minY,\n    };\n}\nexport function getBBoxRange(x1, y1, x2, y2) {\n    return {\n        minX: min([x1, x2]),\n        maxX: max([x1, x2]),\n        minY: min([y1, y2]),\n        maxY: max([y1, y2]),\n    };\n}\nexport function piMod(angle) {\n    return (angle + Math.PI * 2) % (Math.PI * 2);\n}\n//# sourceMappingURL=util.js.map","import { distance, getBBoxByArray } from './util';\nimport * as vec2 from 'gl-matrix/vec2';\nexport default {\n    /**\n     * 计算线段的包围盒\n     * @param {number} x1 起始点 x\n     * @param {number} y1 起始点 y\n     * @param {number} x2 结束点 x\n     * @param {number} y2 结束点 y\n     * @return {object} 包围盒对象\n     */\n    box: function (x1, y1, x2, y2) {\n        return getBBoxByArray([x1, x2], [y1, y2]);\n    },\n    /**\n     * 线段的长度\n     * @param {number} x1 起始点 x\n     * @param {number} y1 起始点 y\n     * @param {number} x2 结束点 x\n     * @param {number} y2 结束点 y\n     * @return {number} 距离\n     */\n    length: function (x1, y1, x2, y2) {\n        return distance(x1, y1, x2, y2);\n    },\n    /**\n     * 根据比例获取点\n     * @param {number} x1 起始点 x\n     * @param {number} y1 起始点 y\n     * @param {number} x2 结束点 x\n     * @param {number} y2 结束点 y\n     * @param {number} t 指定比例\n     * @return {object} 包含 x, y 的点\n     */\n    pointAt: function (x1, y1, x2, y2, t) {\n        return {\n            x: (1 - t) * x1 + t * x2,\n            y: (1 - t) * y1 + t * y2,\n        };\n    },\n    /**\n     * 点到线段的距离\n     * @param {number} x1 起始点 x\n     * @param {number} y1 起始点 y\n     * @param {number} x2 结束点 x\n     * @param {number} y2 结束点 y\n     * @param {number} x  测试点 x\n     * @param {number} y  测试点 y\n     * @return {number} 距离\n     */\n    pointDistance: function (x1, y1, x2, y2, x, y) {\n        // 投影距离 x1, y1 的向量，假设 p, p1, p2 三个点，投影点为 a\n        // p1a = p1p.p1p2/|p1p2| * (p1p 的单位向量)\n        var cross = (x2 - x1) * (x - x1) + (y2 - y1) * (y - y1);\n        if (cross < 0) {\n            return distance(x1, y1, x, y);\n        }\n        var lengthSquare = (x2 - x1) * (x2 - x1) + (y2 - y1) * (y2 - y1);\n        if (cross > lengthSquare) {\n            return distance(x2, y2, x, y);\n        }\n        return this.pointToLine(x1, y1, x2, y2, x, y);\n    },\n    /**\n     * 点到直线的距离，而不是点到线段的距离\n     * @param {number} x1 起始点 x\n     * @param {number} y1 起始点 y\n     * @param {number} x2 结束点 x\n     * @param {number} y2 结束点 y\n     * @param {number} x  测试点 x\n     * @param {number} y  测试点 y\n     * @return {number} 距离\n     */\n    pointToLine: function (x1, y1, x2, y2, x, y) {\n        var d = [x2 - x1, y2 - y1];\n        // 如果端点相等，则判定点到点的距离\n        if (vec2.exactEquals(d, [0, 0])) {\n            return Math.sqrt((x - x1) * (x - x1) + (y - y1) * (y - y1));\n        }\n        var u = [-d[1], d[0]];\n        vec2.normalize(u, u);\n        var a = [x - x1, y - y1];\n        return Math.abs(vec2.dot(a, u));\n    },\n    /**\n     * 线段的角度\n     * @param {number} x1 起始点 x\n     * @param {number} y1 起始点 y\n     * @param {number} x2 结束点 x\n     * @param {number} y2 结束点 y\n     * @return {number} 导数\n     */\n    tangentAngle: function (x1, y1, x2, y2) {\n        return Math.atan2(y2 - y1, x2 - x1);\n    },\n};\n//# sourceMappingURL=line.js.map","import { distance } from './util';\nvar EPSILON = 0.0001;\n/**\n * 使用牛顿切割法求最近的点\n * @param {number[]} xArr      点的 x 数组\n * @param {number[]} yArr      点的 y 数组\n * @param {number}   x         指定的点 x\n * @param {number}   y         指定的点 y\n * @param {Function} tCallback 差值函数\n */\nexport function nearestPoint(xArr, yArr, x, y, tCallback, length) {\n    var t;\n    var d = Infinity;\n    var v0 = [x, y];\n    var segNum = 20;\n    if (length && length > 200) {\n        segNum = length / 10;\n    }\n    var increaseRate = 1 / segNum;\n    var interval = increaseRate / 10;\n    for (var i = 0; i <= segNum; i++) {\n        var _t = i * increaseRate;\n        var v1 = [tCallback.apply(null, xArr.concat([_t])), tCallback.apply(null, yArr.concat([_t]))];\n        var d1 = distance(v0[0], v0[1], v1[0], v1[1]);\n        if (d1 < d) {\n            t = _t;\n            d = d1;\n        }\n    }\n    // 提前终止\n    if (t === 0) {\n        return {\n            x: xArr[0],\n            y: yArr[0],\n        };\n    }\n    if (t === 1) {\n        var count = xArr.length;\n        return {\n            x: xArr[count - 1],\n            y: yArr[count - 1],\n        };\n    }\n    d = Infinity;\n    for (var i = 0; i < 32; i++) {\n        if (interval < EPSILON) {\n            break;\n        }\n        var prev = t - interval;\n        var next = t + interval;\n        var v1 = [tCallback.apply(null, xArr.concat([prev])), tCallback.apply(null, yArr.concat([prev]))];\n        var d1 = distance(v0[0], v0[1], v1[0], v1[1]);\n        if (prev >= 0 && d1 < d) {\n            t = prev;\n            d = d1;\n        }\n        else {\n            var v2 = [tCallback.apply(null, xArr.concat([next])), tCallback.apply(null, yArr.concat([next]))];\n            var d2 = distance(v0[0], v0[1], v2[0], v2[1]);\n            if (next <= 1 && d2 < d) {\n                t = next;\n                d = d2;\n            }\n            else {\n                interval *= 0.5;\n            }\n        }\n    }\n    return {\n        x: tCallback.apply(null, xArr.concat([t])),\n        y: tCallback.apply(null, yArr.concat([t])),\n    };\n}\n// 近似求解 https://community.khronos.org/t/3d-cubic-bezier-segment-length/62363/2\nexport function snapLength(xArr, yArr) {\n    var totalLength = 0;\n    var count = xArr.length;\n    for (var i = 0; i < count; i++) {\n        var x = xArr[i];\n        var y = yArr[i];\n        var nextX = xArr[(i + 1) % count];\n        var nextY = yArr[(i + 1) % count];\n        totalLength += distance(x, y, nextX, nextY);\n    }\n    return totalLength / 2;\n}\n//# sourceMappingURL=bezier.js.map","import line from './line';\nimport { distance, isNumberEqual, getBBoxByArray, piMod } from './util';\nimport { nearestPoint } from './bezier';\n// 差值公式\nfunction quadraticAt(p0, p1, p2, t) {\n    var onet = 1 - t;\n    return onet * onet * p0 + 2 * t * onet * p1 + t * t * p2;\n}\n// 求极值\nfunction extrema(p0, p1, p2) {\n    var a = p0 + p2 - 2 * p1;\n    if (isNumberEqual(a, 0)) {\n        return [0.5];\n    }\n    var rst = (p0 - p1) / a;\n    if (rst <= 1 && rst >= 0) {\n        return [rst];\n    }\n    return [];\n}\nfunction derivativeAt(p0, p1, p2, t) {\n    return 2 * (1 - t) * (p1 - p0) + 2 * t * (p2 - p1);\n}\n// 分割贝塞尔曲线\nfunction divideQuadratic(x1, y1, x2, y2, x3, y3, t) {\n    // 划分点\n    var xt = quadraticAt(x1, x2, x3, t);\n    var yt = quadraticAt(y1, y2, y3, t);\n    // 分割的第一条曲线的控制点\n    var controlPoint1 = line.pointAt(x1, y1, x2, y2, t);\n    // 分割的第二条曲线的控制点\n    var controlPoint2 = line.pointAt(x2, y2, x3, y3, t);\n    return [\n        [x1, y1, controlPoint1.x, controlPoint1.y, xt, yt],\n        [xt, yt, controlPoint2.x, controlPoint2.y, x3, y3],\n    ];\n}\n// 使用迭代法取贝塞尔曲线的长度\nfunction quadraticLength(x1, y1, x2, y2, x3, y3, iterationCount) {\n    if (iterationCount === 0) {\n        return (distance(x1, y1, x2, y2) + distance(x2, y2, x3, y3) + distance(x1, y1, x3, y3)) / 2;\n    }\n    var quadratics = divideQuadratic(x1, y1, x2, y2, x3, y3, 0.5);\n    var left = quadratics[0];\n    var right = quadratics[1];\n    left.push(iterationCount - 1);\n    right.push(iterationCount - 1);\n    return quadraticLength.apply(null, left) + quadraticLength.apply(null, right);\n}\nexport default {\n    box: function (x1, y1, x2, y2, x3, y3) {\n        var xExtrema = extrema(x1, x2, x3)[0];\n        var yExtrema = extrema(y1, y2, y3)[0];\n        // 控制点不加入 box 的计算\n        var xArr = [x1, x3];\n        var yArr = [y1, y3];\n        if (xExtrema !== undefined) {\n            xArr.push(quadraticAt(x1, x2, x3, xExtrema));\n        }\n        if (yExtrema !== undefined) {\n            yArr.push(quadraticAt(y1, y2, y3, yExtrema));\n        }\n        return getBBoxByArray(xArr, yArr);\n    },\n    length: function (x1, y1, x2, y2, x3, y3) {\n        return quadraticLength(x1, y1, x2, y2, x3, y3, 3);\n    },\n    nearestPoint: function (x1, y1, x2, y2, x3, y3, x0, y0) {\n        return nearestPoint([x1, x2, x3], [y1, y2, y3], x0, y0, quadraticAt);\n    },\n    pointDistance: function (x1, y1, x2, y2, x3, y3, x0, y0) {\n        var point = this.nearestPoint(x1, y1, x2, y2, x3, y3, x0, y0);\n        return distance(point.x, point.y, x0, y0);\n    },\n    interpolationAt: quadraticAt,\n    pointAt: function (x1, y1, x2, y2, x3, y3, t) {\n        return {\n            x: quadraticAt(x1, x2, x3, t),\n            y: quadraticAt(y1, y2, y3, t),\n        };\n    },\n    divide: function (x1, y1, x2, y2, x3, y3, t) {\n        return divideQuadratic(x1, y1, x2, y2, x3, y3, t);\n    },\n    tangentAngle: function (x1, y1, x2, y2, x3, y3, t) {\n        var dx = derivativeAt(x1, x2, x3, t);\n        var dy = derivativeAt(y1, y2, y3, t);\n        var angle = Math.atan2(dy, dx);\n        return piMod(angle);\n    },\n};\n//# sourceMappingURL=quadratic.js.map","import { distance, isNumberEqual, getBBoxByArray, piMod } from './util';\nimport line from './line';\nimport { snapLength, nearestPoint } from './bezier';\nfunction cubicAt(p0, p1, p2, p3, t) {\n    var onet = 1 - t; // t * t * t 的性能大概是 Math.pow(t, 3) 的三倍\n    return onet * onet * onet * p0 + 3 * p1 * t * onet * onet + 3 * p2 * t * t * onet + p3 * t * t * t;\n}\nfunction derivativeAt(p0, p1, p2, p3, t) {\n    var onet = 1 - t;\n    return 3 * (onet * onet * (p1 - p0) + 2 * onet * t * (p2 - p1) + t * t * (p3 - p2));\n}\nfunction extrema(p0, p1, p2, p3) {\n    var a = -3 * p0 + 9 * p1 - 9 * p2 + 3 * p3;\n    var b = 6 * p0 - 12 * p1 + 6 * p2;\n    var c = 3 * p1 - 3 * p0;\n    var extremas = [];\n    var t1;\n    var t2;\n    var discSqrt;\n    if (isNumberEqual(a, 0)) {\n        if (!isNumberEqual(b, 0)) {\n            t1 = -c / b;\n            if (t1 >= 0 && t1 <= 1) {\n                extremas.push(t1);\n            }\n        }\n    }\n    else {\n        var disc = b * b - 4 * a * c;\n        if (isNumberEqual(disc, 0)) {\n            extremas.push(-b / (2 * a));\n        }\n        else if (disc > 0) {\n            discSqrt = Math.sqrt(disc);\n            t1 = (-b + discSqrt) / (2 * a);\n            t2 = (-b - discSqrt) / (2 * a);\n            if (t1 >= 0 && t1 <= 1) {\n                extremas.push(t1);\n            }\n            if (t2 >= 0 && t2 <= 1) {\n                extremas.push(t2);\n            }\n        }\n    }\n    return extremas;\n}\n// 分割贝塞尔曲线\nfunction divideCubic(x1, y1, x2, y2, x3, y3, x4, y4, t) {\n    // 划分点\n    var xt = cubicAt(x1, x2, x3, x4, t);\n    var yt = cubicAt(y1, y2, y3, y4, t);\n    // 计算两点之间的差值点\n    var c1 = line.pointAt(x1, y1, x2, y2, t);\n    var c2 = line.pointAt(x2, y2, x3, y3, t);\n    var c3 = line.pointAt(x3, y3, x4, y4, t);\n    var c12 = line.pointAt(c1.x, c1.y, c2.x, c2.y, t);\n    var c23 = line.pointAt(c2.x, c2.y, c3.x, c3.y, t);\n    return [\n        [x1, y1, c1.x, c1.y, c12.x, c12.y, xt, yt],\n        [xt, yt, c23.x, c23.y, c3.x, c3.y, x4, y4],\n    ];\n}\n// 使用迭代法取贝塞尔曲线的长度，二阶和三阶分开写，更清晰和便于调试\nfunction cubicLength(x1, y1, x2, y2, x3, y3, x4, y4, iterationCount) {\n    if (iterationCount === 0) {\n        return snapLength([x1, x2, x3, x4], [y1, y2, y3, y4]);\n    }\n    var cubics = divideCubic(x1, y1, x2, y2, x3, y3, x4, y4, 0.5);\n    var left = cubics[0];\n    var right = cubics[1];\n    left.push(iterationCount - 1);\n    right.push(iterationCount - 1);\n    return cubicLength.apply(null, left) + cubicLength.apply(null, right);\n}\nexport default {\n    extrema: extrema,\n    box: function (x1, y1, x2, y2, x3, y3, x4, y4) {\n        var xArr = [x1, x4];\n        var yArr = [y1, y4];\n        var xExtrema = extrema(x1, x2, x3, x4);\n        var yExtrema = extrema(y1, y2, y3, y4);\n        for (var i = 0; i < xExtrema.length; i++) {\n            xArr.push(cubicAt(x1, x2, x3, x4, xExtrema[i]));\n        }\n        for (var i = 0; i < yExtrema.length; i++) {\n            yArr.push(cubicAt(y1, y2, y3, y4, yExtrema[i]));\n        }\n        return getBBoxByArray(xArr, yArr);\n    },\n    length: function (x1, y1, x2, y2, x3, y3, x4, y4) {\n        // 迭代三次，划分成 8 段求长度\n        return cubicLength(x1, y1, x2, y2, x3, y3, x4, y4, 3);\n    },\n    nearestPoint: function (x1, y1, x2, y2, x3, y3, x4, y4, x0, y0, length) {\n        return nearestPoint([x1, x2, x3, x4], [y1, y2, y3, y4], x0, y0, cubicAt, length);\n    },\n    pointDistance: function (x1, y1, x2, y2, x3, y3, x4, y4, x0, y0, length) {\n        var point = this.nearestPoint(x1, y1, x2, y2, x3, y3, x4, y4, x0, y0, length);\n        return distance(point.x, point.y, x0, y0);\n    },\n    interpolationAt: cubicAt,\n    pointAt: function (x1, y1, x2, y2, x3, y3, x4, y4, t) {\n        return {\n            x: cubicAt(x1, x2, x3, x4, t),\n            y: cubicAt(y1, y2, y3, y4, t),\n        };\n    },\n    divide: function (x1, y1, x2, y2, x3, y3, x4, y4, t) {\n        return divideCubic(x1, y1, x2, y2, x3, y3, x4, y4, t);\n    },\n    tangentAngle: function (x1, y1, x2, y2, x3, y3, x4, y4, t) {\n        var dx = derivativeAt(x1, x2, x3, x4, t);\n        var dy = derivativeAt(y1, y2, y3, y4, t);\n        return piMod(Math.atan2(dy, dx));\n    },\n};\n//# sourceMappingURL=cubic.js.map","import { pointAtSegments, angleAtSegments, distanceAtSegment, lengthOfSegment } from './segments';\nimport { getBBoxByArray } from './util';\nexport default {\n    /**\n     * 计算多折线的包围盒\n     * @param {array} points 点的集合 [x,y] 的形式\n     * @return {object} 包围盒\n     */\n    box: function (points) {\n        var xArr = [];\n        var yArr = [];\n        for (var i = 0; i < points.length; i++) {\n            var point = points[i];\n            xArr.push(point[0]);\n            yArr.push(point[1]);\n        }\n        return getBBoxByArray(xArr, yArr);\n    },\n    /**\n     * 计算多折线的长度\n     * @param {array} points 点的集合 [x,y] 的形式\n     * @return {object} 多条边的长度\n     */\n    length: function (points) {\n        return lengthOfSegment(points);\n    },\n    /**\n     * 根据比例获取多折线的点\n     * @param {array} points 点的集合 [x,y] 的形式\n     * @param {number} t 在多折线的长度上的比例\n     * @return {object} 根据比例值计算出来的点\n     */\n    pointAt: function (points, t) {\n        return pointAtSegments(points, t);\n    },\n    /**\n     * 指定点到多折线的距离\n     * @param {array} points 点的集合 [x,y] 的形式\n     * @param {number} x 指定点的 x\n     * @param {number} y 指定点的 y\n     * @return {number} 点到多折线的距离\n     */\n    pointDistance: function (points, x, y) {\n        return distanceAtSegment(points, x, y);\n    },\n    /**\n     * 根据比例获取多折线的切线角度\n     * @param {array} points 点的集合 [x,y] 的形式\n     * @param {number} t 在多折线的长度上的比例\n     * @return {object} 根据比例值计算出来的角度\n     */\n    tangentAngle: function (points, t) {\n        return angleAtSegments(points, t);\n    },\n};\n//# sourceMappingURL=polyline.js.map","import line from './line';\nimport { distance } from './util';\nfunction analyzePoints(points) {\n    // 计算每段的长度和总的长度\n    var totalLength = 0;\n    var segments = [];\n    for (var i = 0; i < points.length - 1; i++) {\n        var from = points[i];\n        var to = points[i + 1];\n        var length_1 = distance(from[0], from[1], to[0], to[1]);\n        var seg = {\n            from: from,\n            to: to,\n            length: length_1,\n        };\n        segments.push(seg);\n        totalLength += length_1;\n    }\n    return { segments: segments, totalLength: totalLength };\n}\nexport function lengthOfSegment(points) {\n    if (points.length < 2) {\n        return 0;\n    }\n    var totalLength = 0;\n    for (var i = 0; i < points.length - 1; i++) {\n        var from = points[i];\n        var to = points[i + 1];\n        totalLength += distance(from[0], from[1], to[0], to[1]);\n    }\n    return totalLength;\n}\n/**\n * 按照比例在数据片段中获取点\n * @param {array} points 点的集合\n * @param {number} t 百分比 0-1\n * @return {object} 点的坐标\n */\nexport function pointAtSegments(points, t) {\n    // 边界判断\n    if (t > 1 || t < 0 || points.length < 2) {\n        return null;\n    }\n    var _a = analyzePoints(points), segments = _a.segments, totalLength = _a.totalLength;\n    // 多个点有可能重合\n    if (totalLength === 0) {\n        return {\n            x: points[0][0],\n            y: points[0][1],\n        };\n    }\n    // 计算比例\n    var startRatio = 0;\n    var point = null;\n    for (var i = 0; i < segments.length; i++) {\n        var seg = segments[i];\n        var from = seg.from, to = seg.to;\n        var currentRatio = seg.length / totalLength;\n        if (t >= startRatio && t <= startRatio + currentRatio) {\n            var localRatio = (t - startRatio) / currentRatio;\n            point = line.pointAt(from[0], from[1], to[0], to[1], localRatio);\n            break;\n        }\n        startRatio += currentRatio;\n    }\n    return point;\n}\n/**\n * 按照比例在数据片段中获取切线的角度\n * @param {array} points 点的集合\n * @param {number} t 百分比 0-1\n */\nexport function angleAtSegments(points, t) {\n    // 边界判断\n    if (t > 1 || t < 0 || points.length < 2) {\n        return 0;\n    }\n    var _a = analyzePoints(points), segments = _a.segments, totalLength = _a.totalLength;\n    // 计算比例\n    var startRatio = 0;\n    var angle = 0;\n    for (var i = 0; i < segments.length; i++) {\n        var seg = segments[i];\n        var from = seg.from, to = seg.to;\n        var currentRatio = seg.length / totalLength;\n        if (t >= startRatio && t <= startRatio + currentRatio) {\n            angle = Math.atan2(to[1] - from[1], to[0] - from[0]);\n            break;\n        }\n        startRatio += currentRatio;\n    }\n    return angle;\n}\nexport function distanceAtSegment(points, x, y) {\n    var minDistance = Infinity;\n    for (var i = 0; i < points.length - 1; i++) {\n        var point = points[i];\n        var nextPoint = points[i + 1];\n        var distance_1 = line.pointDistance(point[0], point[1], nextPoint[0], nextPoint[1], x, y);\n        if (distance_1 < minDistance) {\n            minDistance = distance_1;\n        }\n    }\n    return minDistance;\n}\n//# sourceMappingURL=segments.js.map","import { Line as LineUtil } from '@antv/g-math';\nexport default function inLine(x1, y1, x2, y2, lineWidth, x, y) {\n    var minX = Math.min(x1, x2);\n    var maxX = Math.max(x1, x2);\n    var minY = Math.min(y1, y2);\n    var maxY = Math.max(y1, y2);\n    var halfWidth = lineWidth / 2;\n    // 因为目前的方案是计算点到直线的距离，而有可能会在延长线上，所以要先判断是否在包围盒内\n    // 这种方案会在水平或者竖直的情况下载线的延长线上有半 lineWidth 的误差\n    if (!(x >= minX - halfWidth && x <= maxX + halfWidth && y >= minY - halfWidth && y <= maxY + halfWidth)) {\n        return false;\n    }\n    // 因为已经计算了包围盒，所以仅需要计算到直线的距离即可，可以显著提升性能\n    return LineUtil.pointToLine(x1, y1, x2, y2, x, y) <= lineWidth / 2;\n}\n//# sourceMappingURL=line.js.map","import { __assign, __extends } from \"tslib\";\n/**\n * @fileoverview 线\n * @author dxq613@gmail.com\n */\nimport { Line as LineUtil } from '@antv/g-math';\nimport ShapeBase from './base';\nimport inLine from '../util/in-stroke/line';\nimport * as ArrowUtil from '../util/arrow';\nvar Line = /** @class */ (function (_super) {\n    __extends(Line, _super);\n    function Line() {\n        return _super !== null && _super.apply(this, arguments) || this;\n    }\n    Line.prototype.getDefaultAttrs = function () {\n        var attrs = _super.prototype.getDefaultAttrs.call(this);\n        return __assign(__assign({}, attrs), { x1: 0, y1: 0, x2: 0, y2: 0, startArrow: false, endArrow: false });\n    };\n    Line.prototype.initAttrs = function (attrs) {\n        this.setArrow();\n    };\n    // 更新属性时，检测是否更改了箭头\n    Line.prototype.onAttrChange = function (name, value, originValue) {\n        _super.prototype.onAttrChange.call(this, name, value, originValue);\n        // 由于箭头的绘制依赖于 line 的诸多 attrs，因此这里不再对每个 attr 进行判断，attr 每次变化都会影响箭头的更新\n        this.setArrow();\n    };\n    Line.prototype.setArrow = function () {\n        var attrs = this.attr();\n        var x1 = attrs.x1, y1 = attrs.y1, x2 = attrs.x2, y2 = attrs.y2, startArrow = attrs.startArrow, endArrow = attrs.endArrow;\n        if (startArrow) {\n            ArrowUtil.addStartArrow(this, attrs, x2, y2, x1, y1);\n        }\n        if (endArrow) {\n            ArrowUtil.addEndArrow(this, attrs, x1, y1, x2, y2);\n        }\n    };\n    Line.prototype.isInStrokeOrPath = function (x, y, isStroke, isFill, lineWidth) {\n        if (!isStroke || !lineWidth) {\n            return false;\n        }\n        var _a = this.attr(), x1 = _a.x1, y1 = _a.y1, x2 = _a.x2, y2 = _a.y2;\n        return inLine(x1, y1, x2, y2, lineWidth, x, y);\n    };\n    Line.prototype.createPath = function (context) {\n        var attrs = this.attr();\n        var x1 = attrs.x1, y1 = attrs.y1, x2 = attrs.x2, y2 = attrs.y2, startArrow = attrs.startArrow, endArrow = attrs.endArrow;\n        var startArrowDistance = {\n            dx: 0,\n            dy: 0,\n        };\n        var endArrowDistance = {\n            dx: 0,\n            dy: 0,\n        };\n        if (startArrow && startArrow.d) {\n            startArrowDistance = ArrowUtil.getShortenOffset(x1, y1, x2, y2, attrs.startArrow.d);\n        }\n        if (endArrow && endArrow.d) {\n            endArrowDistance = ArrowUtil.getShortenOffset(x1, y1, x2, y2, attrs.endArrow.d);\n        }\n        context.beginPath();\n        // 如果自定义箭头，线条相应缩进\n        context.moveTo(x1 + startArrowDistance.dx, y1 + startArrowDistance.dy);\n        context.lineTo(x2 - endArrowDistance.dx, y2 - endArrowDistance.dy);\n    };\n    Line.prototype.afterDrawPath = function (context) {\n        var startArrowShape = this.get('startArrowShape');\n        var endArrowShape = this.get('endArrowShape');\n        if (startArrowShape) {\n            startArrowShape.draw(context);\n        }\n        if (endArrowShape) {\n            endArrowShape.draw(context);\n        }\n    };\n    /**\n     * Get length of line\n     * @return {number} length\n     */\n    Line.prototype.getTotalLength = function () {\n        var _a = this.attr(), x1 = _a.x1, y1 = _a.y1, x2 = _a.x2, y2 = _a.y2;\n        return LineUtil.length(x1, y1, x2, y2);\n    };\n    /**\n     * Get point according to ratio\n     * @param {number} ratio\n     * @return {Point} point\n     */\n    Line.prototype.getPoint = function (ratio) {\n        var _a = this.attr(), x1 = _a.x1, y1 = _a.y1, x2 = _a.x2, y2 = _a.y2;\n        return LineUtil.pointAt(x1, y1, x2, y2, ratio);\n    };\n    return Line;\n}(ShapeBase));\nexport default Line;\n//# sourceMappingURL=line.js.map","import { each, isArray, isString } from '@antv/util';\nvar regexTags = /[MLHVQTCSAZ]([^MLHVQTCSAZ]*)/ig;\nvar regexDot = /[^\\s\\,]+/ig;\nfunction parsePath(p) {\n    var path = p || [];\n    if (isArray(path)) {\n        return path;\n    }\n    if (isString(path)) {\n        path = path.match(regexTags);\n        each(path, function (item, index) {\n            // @ts-ignore\n            item = item.match(regexDot);\n            if (item[0].length > 1) {\n                var tag = item[0].charAt(0);\n                // @ts-ignore\n                item.splice(1, 0, item[0].substr(1));\n                // @ts-ignore\n                item[0] = tag;\n            }\n            // @ts-ignore\n            each(item, function (sub, i) {\n                if (!isNaN(sub)) {\n                    // @ts-ignore\n                    item[i] = +sub;\n                }\n            });\n            // @ts-ignore\n            path[index] = item;\n        });\n        return path;\n    }\n}\nexport default parsePath;\n//# sourceMappingURL=parse-path.js.map","import { isArray } from '@antv/util';\nvar SPACES = '\\x09\\x0a\\x0b\\x0c\\x0d\\x20\\xa0\\u1680\\u180e\\u2000\\u2001\\u2002\\u2003\\u2004\\u2005\\u2006\\u2007\\u2008\\u2009\\u200a\\u202f\\u205f\\u3000\\u2028\\u2029';\nvar PATH_COMMAND = new RegExp('([a-z])[' + SPACES + ',]*((-?\\\\d*\\\\.?\\\\d*(?:e[\\\\-+]?\\\\d+)?[' + SPACES + ']*,?[' + SPACES + ']*)+)', 'ig');\nvar PATH_VALUES = new RegExp('(-?\\\\d*\\\\.?\\\\d*(?:e[\\\\-+]?\\\\d+)?)[' + SPACES + ']*,?[' + SPACES + ']*', 'ig');\n// Parses given path string into an array of arrays of path segments\nexport default function parsePathString(pathString) {\n    if (!pathString) {\n        return null;\n    }\n    if (isArray(pathString)) {\n        return pathString;\n    }\n    var paramCounts = {\n        a: 7,\n        c: 6,\n        o: 2,\n        h: 1,\n        l: 2,\n        m: 2,\n        r: 4,\n        q: 4,\n        s: 4,\n        t: 2,\n        v: 1,\n        u: 3,\n        z: 0,\n    };\n    var data = [];\n    String(pathString).replace(PATH_COMMAND, function (a, b, c) {\n        var params = [];\n        var name = b.toLowerCase();\n        c.replace(PATH_VALUES, function (a, b) {\n            b && params.push(+b);\n        });\n        if (name === 'm' && params.length > 2) {\n            data.push([b].concat(params.splice(0, 2)));\n            name = 'l';\n            b = b === 'm' ? 'l' : 'L';\n        }\n        if (name === 'o' && params.length === 1) {\n            data.push([b, params[0]]);\n        }\n        if (name === 'r') {\n            data.push([b].concat(params));\n        }\n        else {\n            while (params.length >= paramCounts[name]) {\n                data.push([b].concat(params.splice(0, paramCounts[name])));\n                if (!paramCounts[name]) {\n                    break;\n                }\n            }\n        }\n        return '';\n    });\n    return data;\n}\n//# sourceMappingURL=parse-path-string.js.map","import parsePathString from './parse-path-string';\nvar REGEX_MD = /[a-z]/;\nfunction toSymmetry(p, c) {\n    return [\n        c[0] + (c[0] - p[0]),\n        c[1] + (c[1] - p[1]),\n    ];\n}\nexport default function pathToAbsolute(pathString) {\n    var pathArray = parsePathString(pathString);\n    if (!pathArray || !pathArray.length) {\n        return [\n            ['M', 0, 0],\n        ];\n    }\n    var needProcess = false; // 如果存在小写的命令或者 V,H,T,S 则需要处理\n    for (var i = 0; i < pathArray.length; i++) {\n        var cmd = pathArray[i][0];\n        // 如果存在相对位置的命令，则中断返回\n        if (REGEX_MD.test(cmd) || ['V', 'H', 'T', 'S'].indexOf(cmd) >= 0) {\n            needProcess = true;\n            break;\n        }\n    }\n    // 如果不存在相对命令，则直接返回\n    // 如果在业务上都写绝对路径，这种方式最快，仅做了一次检测\n    if (!needProcess) {\n        return pathArray;\n    }\n    var res = [];\n    var x = 0;\n    var y = 0;\n    var mx = 0;\n    var my = 0;\n    var start = 0;\n    var pa0;\n    var dots;\n    var first = pathArray[0];\n    if (first[0] === 'M' || first[0] === 'm') {\n        x = +first[1];\n        y = +first[2];\n        mx = x;\n        my = y;\n        start++;\n        res[0] = ['M', x, y];\n    }\n    for (var i = start, ii = pathArray.length; i < ii; i++) {\n        var pa = pathArray[i];\n        var preParams = res[i - 1]; // 取前一个已经处理后的节点，否则会出现问题\n        var r = [];\n        var cmd = pa[0];\n        var upCmd = cmd.toUpperCase();\n        if (cmd !== upCmd) {\n            r[0] = upCmd;\n            switch (upCmd) {\n                case 'A':\n                    r[1] = pa[1];\n                    r[2] = pa[2];\n                    r[3] = pa[3];\n                    r[4] = pa[4];\n                    r[5] = pa[5];\n                    r[6] = +pa[6] + x;\n                    r[7] = +pa[7] + y;\n                    break;\n                case 'V':\n                    r[1] = +pa[1] + y;\n                    break;\n                case 'H':\n                    r[1] = +pa[1] + x;\n                    break;\n                case 'M':\n                    mx = +pa[1] + x;\n                    my = +pa[2] + y;\n                    r[1] = mx;\n                    r[2] = my;\n                    break; // for lint\n                default:\n                    for (var j = 1, jj = pa.length; j < jj; j++) {\n                        r[j] = +pa[j] + ((j % 2) ? x : y);\n                    }\n            }\n        }\n        else { // 如果本来已经大写，则不处理\n            r = pathArray[i];\n        }\n        // 需要在外面统一做，同时处理 V,H,S,T 等特殊指令\n        switch (upCmd) {\n            case 'Z':\n                x = +mx;\n                y = +my;\n                break;\n            case 'H':\n                x = r[1];\n                r = ['L', x, y];\n                break;\n            case 'V':\n                y = r[1];\n                r = ['L', x, y];\n                break;\n            case 'T':\n                x = r[1];\n                y = r[2];\n                // 以 x, y 为中心的，上一个控制点的对称点\n                // 需要假设上一个节点的命令为 Q\n                var symetricT = toSymmetry([preParams[1], preParams[2]], [preParams[3], preParams[4]]);\n                r = ['Q', symetricT[0], symetricT[1], x, y];\n                break;\n            case 'S':\n                x = r[r.length - 2];\n                y = r[r.length - 1];\n                // 以 x,y 为中心，取上一个控制点，\n                // 需要假设上一个线段为 C 或者 S\n                var length_1 = preParams.length;\n                var symetricS = toSymmetry([preParams[length_1 - 4], preParams[length_1 - 3]], [preParams[length_1 - 2], preParams[length_1 - 1]]);\n                r = ['C', symetricS[0], symetricS[1], r[1], r[2], x, y];\n                break;\n            case 'M':\n                mx = r[r.length - 2];\n                my = r[r.length - 1];\n                break; // for lint\n            default:\n                x = r[r.length - 2];\n                y = r[r.length - 1];\n        }\n        res.push(r);\n    }\n    return res;\n}\n//# sourceMappingURL=path-2-absolute.js.map","import { mod, toRadian } from '@antv/util';\n// 向量长度\nfunction vMag(v) {\n    return Math.sqrt(v[0] * v[0] + v[1] * v[1]);\n}\n// u.v/|u||v|，计算夹角的余弦值\nfunction vRatio(u, v) {\n    // 当存在一个向量的长度为 0 时，夹角也为 0，即夹角的余弦值为 1\n    return vMag(u) * vMag(v) ? (u[0] * v[0] + u[1] * v[1]) / (vMag(u) * vMag(v)) : 1;\n}\n// 向量角度\nfunction vAngle(u, v) {\n    return (u[0] * v[1] < u[1] * v[0] ? -1 : 1) * Math.acos(vRatio(u, v));\n}\n/**\n * 判断两个点是否重合，点坐标的格式为 [x, y]\n * @param {Array} point1 第一个点\n * @param {Array} point2 第二个点\n */\nexport function isSamePoint(point1, point2) {\n    return point1[0] === point2[0] && point1[1] === point2[1];\n}\n// A 0:rx 1:ry 2:x-axis-rotation 3:large-arc-flag 4:sweep-flag 5: x 6: y\nexport default function getArcParams(startPoint, params) {\n    var rx = params[1];\n    var ry = params[2];\n    var xRotation = mod(toRadian(params[3]), Math.PI * 2);\n    var arcFlag = params[4];\n    var sweepFlag = params[5];\n    // 弧形起点坐标\n    var x1 = startPoint[0];\n    var y1 = startPoint[1];\n    // 弧形终点坐标\n    var x2 = params[6];\n    var y2 = params[7];\n    var xp = (Math.cos(xRotation) * (x1 - x2)) / 2.0 + (Math.sin(xRotation) * (y1 - y2)) / 2.0;\n    var yp = (-1 * Math.sin(xRotation) * (x1 - x2)) / 2.0 + (Math.cos(xRotation) * (y1 - y2)) / 2.0;\n    var lambda = (xp * xp) / (rx * rx) + (yp * yp) / (ry * ry);\n    if (lambda > 1) {\n        rx *= Math.sqrt(lambda);\n        ry *= Math.sqrt(lambda);\n    }\n    var diff = rx * rx * (yp * yp) + ry * ry * (xp * xp);\n    var f = diff ? Math.sqrt((rx * rx * (ry * ry) - diff) / diff) : 1;\n    if (arcFlag === sweepFlag) {\n        f *= -1;\n    }\n    if (isNaN(f)) {\n        f = 0;\n    }\n    // 旋转前的起点坐标，且当长半轴和短半轴的长度为 0 时，坐标按 (0, 0) 处理\n    var cxp = ry ? (f * rx * yp) / ry : 0;\n    var cyp = rx ? (f * -ry * xp) / rx : 0;\n    // 椭圆圆心坐标\n    var cx = (x1 + x2) / 2.0 + Math.cos(xRotation) * cxp - Math.sin(xRotation) * cyp;\n    var cy = (y1 + y2) / 2.0 + Math.sin(xRotation) * cxp + Math.cos(xRotation) * cyp;\n    // 起始点的单位向量\n    var u = [(xp - cxp) / rx, (yp - cyp) / ry];\n    // 终止点的单位向量\n    var v = [(-1 * xp - cxp) / rx, (-1 * yp - cyp) / ry];\n    // 计算起始点和圆心的连线，与 x 轴正方向的夹角\n    var theta = vAngle([1, 0], u);\n    // 计算圆弧起始点和终止点与椭圆圆心连线的夹角\n    var dTheta = vAngle(u, v);\n    if (vRatio(u, v) <= -1) {\n        dTheta = Math.PI;\n    }\n    if (vRatio(u, v) >= 1) {\n        dTheta = 0;\n    }\n    if (sweepFlag === 0 && dTheta > 0) {\n        dTheta = dTheta - 2 * Math.PI;\n    }\n    if (sweepFlag === 1 && dTheta < 0) {\n        dTheta = dTheta + 2 * Math.PI;\n    }\n    return {\n        cx: cx,\n        cy: cy,\n        // 弧形的起点和终点相同时，长轴和短轴的长度按 0 处理\n        rx: isSamePoint(startPoint, [x2, y2]) ? 0 : rx,\n        ry: isSamePoint(startPoint, [x2, y2]) ? 0 : ry,\n        startAngle: theta,\n        endAngle: theta + dTheta,\n        xRotation: xRotation,\n        arcFlag: arcFlag,\n        sweepFlag: sweepFlag,\n    };\n}\n//# sourceMappingURL=get-arc-params.js.map","import getArcParams from './get-arc-params';\nimport { isSamePoint } from './get-arc-params';\nimport parsePath from './parse-path';\n// 点对称\nfunction toSymmetry(point, center) {\n    return [center[0] + (center[0] - point[0]), center[1] + (center[1] - point[1])];\n}\nexport default function getSegments(path) {\n    path = parsePath(path);\n    var segments = [];\n    var currentPoint = null; // 当前图形\n    var nextParams = null; // 下一节点的 path 参数\n    var startMovePoint = null; // 开始 M 的点，可能会有多个\n    var lastStartMovePointIndex = 0; // 最近一个开始点 M 的索引\n    var count = path.length;\n    for (var i = 0; i < count; i++) {\n        var params = path[i];\n        nextParams = path[i + 1];\n        var command = params[0];\n        // 数学定义上的参数，便于后面的计算\n        var segment = {\n            command: command,\n            prePoint: currentPoint,\n            params: params,\n            startTangent: null,\n            endTangent: null,\n        };\n        switch (command) {\n            case 'M':\n                startMovePoint = [params[1], params[2]];\n                lastStartMovePointIndex = i;\n                break;\n            case 'A':\n                var arcParams = getArcParams(currentPoint, params);\n                segment['arcParams'] = arcParams;\n                break;\n            default:\n                break;\n        }\n        if (command === 'Z') {\n            // 有了 Z 后，当前节点从开始 M 的点开始\n            currentPoint = startMovePoint;\n            // 如果当前点的命令为 Z，相当于当前点为最近一个 M 点，则下一个点直接指向最近一个 M 点的下一个点\n            nextParams = path[lastStartMovePointIndex + 1];\n        }\n        else {\n            var len = params.length;\n            currentPoint = [params[len - 2], params[len - 1]];\n        }\n        if (nextParams && nextParams[0] === 'Z') {\n            // 如果下一个点的命令为 Z，则下一个点直接指向最近一个 M 点\n            nextParams = path[lastStartMovePointIndex];\n            if (segments[lastStartMovePointIndex]) {\n                // 如果下一个点的命令为 Z，则最近一个 M 点的前一个点为当前点\n                segments[lastStartMovePointIndex].prePoint = currentPoint;\n            }\n        }\n        segment['currentPoint'] = currentPoint;\n        // 如果当前点与最近一个 M 点相同，则最近一个 M 点的前一个点为当前点的前一个点\n        if (segments[lastStartMovePointIndex] &&\n            isSamePoint(currentPoint, segments[lastStartMovePointIndex].currentPoint)) {\n            segments[lastStartMovePointIndex].prePoint = segment.prePoint;\n        }\n        var nextPoint = nextParams ? [nextParams[nextParams.length - 2], nextParams[nextParams.length - 1]] : null;\n        segment['nextPoint'] = nextPoint;\n        // Add startTangent and endTangent\n        var prePoint = segment.prePoint;\n        if (['L', 'H', 'V'].includes(command)) {\n            segment.startTangent = [prePoint[0] - currentPoint[0], prePoint[1] - currentPoint[1]];\n            segment.endTangent = [currentPoint[0] - prePoint[0], currentPoint[1] - prePoint[1]];\n        }\n        else if (command === 'Q') {\n            // 二次贝塞尔曲线只有一个控制点\n            var cp = [params[1], params[2]];\n            // 二次贝塞尔曲线的终点为 currentPoint\n            segment.startTangent = [prePoint[0] - cp[0], prePoint[1] - cp[1]];\n            segment.endTangent = [currentPoint[0] - cp[0], currentPoint[1] - cp[1]];\n        }\n        else if (command === 'T') {\n            var preSegment = segments[i - 1];\n            var cp = toSymmetry(preSegment.currentPoint, prePoint);\n            if (preSegment.command === 'Q') {\n                segment.command = 'Q';\n                segment.startTangent = [prePoint[0] - cp[0], prePoint[1] - cp[1]];\n                segment.endTangent = [currentPoint[0] - cp[0], currentPoint[1] - cp[1]];\n            }\n            else {\n                segment.command = 'TL';\n                segment.startTangent = [prePoint[0] - currentPoint[0], prePoint[1] - currentPoint[1]];\n                segment.endTangent = [currentPoint[0] - prePoint[0], currentPoint[1] - prePoint[1]];\n            }\n        }\n        else if (command === 'C') {\n            // 三次贝塞尔曲线有两个控制点\n            var cp1 = [params[1], params[2]];\n            var cp2 = [params[3], params[4]];\n            segment.startTangent = [prePoint[0] - cp1[0], prePoint[1] - cp1[1]];\n            segment.endTangent = [currentPoint[0] - cp2[0], currentPoint[1] - cp2[1]];\n            // horizontal line, eg. ['C', 100, 100, 100, 100, 200, 200]\n            if (segment.startTangent[0] === 0 && segment.startTangent[1] === 0) {\n                segment.startTangent = [cp1[0] - cp2[0], cp1[1] - cp2[1]];\n            }\n            if (segment.endTangent[0] === 0 && segment.endTangent[1] === 0) {\n                segment.endTangent = [cp2[0] - cp1[0], cp2[1] - cp1[1]];\n            }\n        }\n        else if (command === 'S') {\n            var preSegment = segments[i - 1];\n            var cp1 = toSymmetry(preSegment.currentPoint, prePoint);\n            var cp2 = [params[1], params[2]];\n            if (preSegment.command === 'C') {\n                segment.command = 'C'; // 将 S 命令变换为 C 命令\n                segment.startTangent = [prePoint[0] - cp1[0], prePoint[1] - cp1[1]];\n                segment.endTangent = [currentPoint[0] - cp2[0], currentPoint[1] - cp2[1]];\n            }\n            else {\n                segment.command = 'SQ'; // 将 S 命令变换为 SQ 命令\n                segment.startTangent = [prePoint[0] - cp2[0], prePoint[1] - cp2[1]];\n                segment.endTangent = [currentPoint[0] - cp2[0], currentPoint[1] - cp2[1]];\n            }\n        }\n        else if (command === 'A') {\n            var d = 0.001;\n            var _a = segment['arcParams'] || {}, _b = _a.cx, cx = _b === void 0 ? 0 : _b, _c = _a.cy, cy = _c === void 0 ? 0 : _c, _d = _a.rx, rx = _d === void 0 ? 0 : _d, _e = _a.ry, ry = _e === void 0 ? 0 : _e, _f = _a.sweepFlag, sweepFlag = _f === void 0 ? 0 : _f, _g = _a.startAngle, startAngle = _g === void 0 ? 0 : _g, _h = _a.endAngle, endAngle = _h === void 0 ? 0 : _h;\n            if (sweepFlag === 0) {\n                d *= -1;\n            }\n            var dx1 = rx * Math.cos(startAngle - d) + cx;\n            var dy1 = ry * Math.sin(startAngle - d) + cy;\n            segment.startTangent = [dx1 - startMovePoint[0], dy1 - startMovePoint[1]];\n            var dx2 = rx * Math.cos(startAngle + endAngle + d) + cx;\n            var dy2 = ry * Math.sin(startAngle + endAngle - d) + cy;\n            segment.endTangent = [prePoint[0] - dx2, prePoint[1] - dy2];\n        }\n        segments.push(segment);\n    }\n    return segments;\n}\n//# sourceMappingURL=path-2-segments.js.map","/**\n * @fileoverview Marker\n * @author dxq613@gmail.com\n */\nimport { __extends } from \"tslib\";\nimport { isNil } from '@antv/util';\nimport { path2Absolute } from '@antv/path-util';\nimport ShapeBase from './base';\nimport { isFunction } from '../util/util';\nimport { drawPath } from '../util/draw';\nvar Symbols = {\n    // 圆\n    circle: function (x, y, r) {\n        return [\n            ['M', x - r, y],\n            ['A', r, r, 0, 1, 0, x + r, y],\n            ['A', r, r, 0, 1, 0, x - r, y],\n        ];\n    },\n    // 正方形\n    square: function (x, y, r) {\n        return [['M', x - r, y - r], ['L', x + r, y - r], ['L', x + r, y + r], ['L', x - r, y + r], ['Z']];\n    },\n    // 菱形\n    diamond: function (x, y, r) {\n        return [['M', x - r, y], ['L', x, y - r], ['L', x + r, y], ['L', x, y + r], ['Z']];\n    },\n    // 三角形\n    triangle: function (x, y, r) {\n        var diffY = r * Math.sin((1 / 3) * Math.PI);\n        return [['M', x - r, y + diffY], ['L', x, y - diffY], ['L', x + r, y + diffY], ['Z']];\n    },\n    // 倒三角形\n    'triangle-down': function (x, y, r) {\n        var diffY = r * Math.sin((1 / 3) * Math.PI);\n        return [['M', x - r, y - diffY], ['L', x + r, y - diffY], ['L', x, y + diffY], ['Z']];\n    },\n};\nvar Marker = /** @class */ (function (_super) {\n    __extends(Marker, _super);\n    function Marker() {\n        return _super !== null && _super.apply(this, arguments) || this;\n    }\n    Marker.prototype.initAttrs = function (attrs) {\n        this._resetParamsCache();\n    };\n    // 重置绘制 path 存储的缓存\n    Marker.prototype._resetParamsCache = function () {\n        // 为了加速 path 的绘制、拾取和计算，这个地方可以缓存很多东西\n        // 这些缓存都是第一次需要时计算和存储，虽然增加了复杂度，但是频繁调用的方法，性能有很大提升\n        this.set('paramsCache', {}); // 清理缓存\n    };\n    // 更新属性时，检测是否更改了 path\n    Marker.prototype.onAttrChange = function (name, value, originValue) {\n        _super.prototype.onAttrChange.call(this, name, value, originValue);\n        if (['symbol', 'x', 'y', 'r', 'radius'].indexOf(name) !== -1) {\n            // path 相关属性更改时，清理缓存\n            this._resetParamsCache();\n        }\n    };\n    // 仅仅使用包围盒检测来进行拾取\n    // 所以不需要复写 isInStrokeOrPath 的方法\n    Marker.prototype.isOnlyHitBox = function () {\n        return true;\n    };\n    Marker.prototype._getR = function (attrs) {\n        // 兼容 r 和 radius 两种写法，推荐使用 r\n        return isNil(attrs.r) ? attrs.radius : attrs.r;\n    };\n    Marker.prototype._getPath = function () {\n        var attrs = this.attr();\n        var x = attrs.x, y = attrs.y;\n        var symbol = attrs.symbol || 'circle';\n        var r = this._getR(attrs);\n        var method;\n        var path;\n        if (isFunction(symbol)) {\n            method = symbol;\n            path = method(x, y, r);\n            // 将 path 转成绝对路径\n            path = path2Absolute(path);\n        }\n        else {\n            // 内置 symbol 的 path 都是绝对路径，直接绘制即可，不需要对 path 进行特殊处理\n            method = Marker.Symbols[symbol];\n            if (!method) {\n                console.warn(symbol + \" marker is not supported.\");\n                return null;\n            }\n            path = method(x, y, r);\n        }\n        return path;\n    };\n    Marker.prototype.createPath = function (context) {\n        var path = this._getPath();\n        var paramsCache = this.get('paramsCache');\n        drawPath(this, context, { path: path }, paramsCache);\n    };\n    Marker.Symbols = Symbols;\n    return Marker;\n}(ShapeBase));\nexport default Marker;\n//# sourceMappingURL=marker.js.map","import { getOffScreenContext } from '@antv/g-base';\nexport default function isPointInPath(shape, x, y) {\n    var ctx = getOffScreenContext();\n    shape.createPath(ctx);\n    return ctx.isPointInPath(x, y);\n}\n//# sourceMappingURL=point-in-path.js.map","/**\n * @fileoverview 判断点是否在多边形内\n * @author dxq613@gmail.com\n */\n// 多边形的射线检测，参考：https://blog.csdn.net/WilliamSun0122/article/details/77994526\nvar tolerance = 1e-6;\n// 三态函数，判断两个double在eps精度下的大小关系\nfunction dcmp(x) {\n    if (Math.abs(x) < tolerance) {\n        return 0;\n    }\n    return x < 0 ? -1 : 1;\n}\n// 判断点Q是否在p1和p2的线段上\nfunction onSegment(p1, p2, q) {\n    if ((q[0] - p1[0]) * (p2[1] - p1[1]) === (p2[0] - p1[0]) * (q[1] - p1[1]) &&\n        Math.min(p1[0], p2[0]) <= q[0] &&\n        q[0] <= Math.max(p1[0], p2[0]) &&\n        Math.min(p1[1], p2[1]) <= q[1] &&\n        q[1] <= Math.max(p1[1], p2[1])) {\n        return true;\n    }\n    return false;\n}\n// 判断点P在多边形内-射线法\nexport default function isInPolygon(points, x, y) {\n    var isHit = false;\n    var n = points.length;\n    if (n <= 2) {\n        // svg 中点小于 3 个时，不显示，也无法被拾取\n        return false;\n    }\n    for (var i = 0; i < n; i++) {\n        var p1 = points[i];\n        var p2 = points[(i + 1) % n];\n        if (onSegment(p1, p2, [x, y])) {\n            // 点在多边形一条边上\n            return true;\n        }\n        // 前一个判断min(p1[1],p2[1])<P.y<=max(p1[1],p2[1])\n        // 后一个判断被测点 在 射线与边交点 的左边\n        if (dcmp(p1[1] - y) > 0 !== dcmp(p2[1] - y) > 0 &&\n            dcmp(x - ((y - p1[1]) * (p1[0] - p2[0])) / (p1[1] - p2[1]) - p1[0]) < 0) {\n            isHit = !isHit;\n        }\n    }\n    return isHit;\n}\n//# sourceMappingURL=polygon.js.map","import { distance } from '../util';\nexport default function arc(cx, cy, r, startAngle, endAngle, lineWidth, x, y) {\n    var angle = (Math.atan2(y - cy, x - cx) + Math.PI * 2) % (Math.PI * 2); // 转换到 0 - 2 * Math.PI 之间\n    if (angle < startAngle || angle > endAngle) {\n        return false;\n    }\n    var point = {\n        x: cx + r * Math.cos(angle),\n        y: cy + r * Math.sin(angle),\n    };\n    return distance(point.x, point.y, x, y) <= lineWidth / 2;\n}\n//# sourceMappingURL=arc.js.map","import { __assign } from \"tslib\";\n/**\n * @fileoverview path 的一些工具\n * @author dxq613@gmail.com\n */\nimport { PathUtil } from '@antv/g-base';\nimport { Quad as QuadUtil } from '@antv/g-math';\nimport { Cubic as CubicUtil } from '@antv/g-math';\nimport { ext } from '@antv/matrix-util';\nimport * as vec3 from 'gl-matrix/vec3';\nimport { inBox } from './util';\nimport inLine from './in-stroke/line';\nimport inArc from './in-stroke/arc';\nvar transform = ext.transform;\nfunction hasArc(path) {\n    var hasArc = false;\n    var count = path.length;\n    for (var i = 0; i < count; i++) {\n        var params = path[i];\n        var cmd = params[0];\n        if (cmd === 'C' || cmd === 'A' || cmd === 'Q') {\n            hasArc = true;\n            break;\n        }\n    }\n    return hasArc;\n}\nfunction isPointInStroke(segments, lineWidth, x, y, length) {\n    var isHit = false;\n    var halfWidth = lineWidth / 2;\n    for (var i = 0; i < segments.length; i++) {\n        var segment = segments[i];\n        var currentPoint = segment.currentPoint, params = segment.params, prePoint = segment.prePoint, box = segment.box;\n        // 如果在前面已经生成过包围盒，直接按照包围盒计算\n        if (box && !inBox(box.x - halfWidth, box.y - halfWidth, box.width + lineWidth, box.height + lineWidth, x, y)) {\n            continue;\n        }\n        switch (segment.command) {\n            // L 和 Z 都是直线， M 不进行拾取\n            case 'L':\n            case 'Z':\n                isHit = inLine(prePoint[0], prePoint[1], currentPoint[0], currentPoint[1], lineWidth, x, y);\n                break;\n            case 'Q':\n                var qDistance = QuadUtil.pointDistance(prePoint[0], prePoint[1], params[1], params[2], params[3], params[4], x, y);\n                isHit = qDistance <= lineWidth / 2;\n                break;\n            case 'C':\n                var cDistance = CubicUtil.pointDistance(prePoint[0], // 上一段结束位置, 即 C 的起始点\n                prePoint[1], params[1], // 'C' 的参数，1、2 为第一个控制点，3、4 为第二个控制点，5、6 为结束点\n                params[2], params[3], params[4], params[5], params[6], x, y, length);\n                isHit = cDistance <= lineWidth / 2;\n                break;\n            case 'A':\n                // 计算点到椭圆圆弧的距离，暂时使用近似算法，后面可以改成切割法求最近距离\n                var arcParams = segment.arcParams;\n                var cx = arcParams.cx, cy = arcParams.cy, rx = arcParams.rx, ry = arcParams.ry, startAngle = arcParams.startAngle, endAngle = arcParams.endAngle, xRotation = arcParams.xRotation;\n                var p = [x, y, 1];\n                var r = rx > ry ? rx : ry;\n                var scaleX = rx > ry ? 1 : rx / ry;\n                var scaleY = rx > ry ? ry / rx : 1;\n                var m = transform(null, [\n                    ['t', -cx, -cy],\n                    ['r', -xRotation],\n                    ['s', 1 / scaleX, 1 / scaleY],\n                ]);\n                vec3.transformMat3(p, p, m);\n                isHit = inArc(0, 0, r, startAngle, endAngle, lineWidth, p[0], p[1]);\n                break;\n            default:\n                break;\n        }\n        if (isHit) {\n            break;\n        }\n    }\n    return isHit;\n}\n/**\n * 提取出内部的闭合多边形和非闭合的多边形，假设 path 不存在圆弧\n * @param {Array} path 路径\n * @returns {Array} 点的集合\n */\nfunction extractPolygons(path) {\n    var count = path.length;\n    var polygons = [];\n    var polylines = [];\n    var points = []; // 防止第一个命令不是 'M'\n    for (var i = 0; i < count; i++) {\n        var params = path[i];\n        var cmd = params[0];\n        if (cmd === 'M') {\n            // 遇到 'M' 判定是否是新数组，新数组中没有点\n            if (points.length) {\n                // 如果存在点，则说明没有遇到 'Z'，开始了一个新的多边形\n                polylines.push(points);\n                points = []; // 创建新的点\n            }\n            points.push([params[1], params[2]]);\n        }\n        else if (cmd === 'Z') {\n            if (points.length) {\n                // 存在点\n                polygons.push(points);\n                points = []; // 开始新的点集合\n            }\n            // 如果不存在点，同时 'Z'，则说明是错误，不处理\n        }\n        else {\n            points.push([params[1], params[2]]);\n        }\n    }\n    // 说明 points 未放入 polygons 或者 polyline\n    // 仅当只有一个 M，没有 Z 时会发生这种情况\n    if (points.length > 0) {\n        polylines.push(points);\n    }\n    return {\n        polygons: polygons,\n        polylines: polylines,\n    };\n}\nexport default __assign({ hasArc: hasArc,\n    extractPolygons: extractPolygons,\n    isPointInStroke: isPointInStroke }, PathUtil);\n//# sourceMappingURL=path.js.map","import { __assign, __extends } from \"tslib\";\nimport { Cubic as CubicUtil } from '@antv/g-math';\nimport { each, isNil } from '@antv/util';\nimport ShapeBase from './base';\nimport { path2Absolute, path2Segments } from '@antv/path-util';\nimport { drawPath } from '../util/draw';\nimport isPointInPath from '../util/in-path/point-in-path';\nimport isInPolygon from '../util/in-path/polygon';\nimport PathUtil from '../util/path';\nimport * as ArrowUtil from '../util/arrow';\n// 是否在多个多边形内部\nfunction isInPolygons(polygons, x, y) {\n    var isHit = false;\n    for (var i = 0; i < polygons.length; i++) {\n        var points = polygons[i];\n        isHit = isInPolygon(points, x, y);\n        if (isHit) {\n            break;\n        }\n    }\n    return isHit;\n}\nvar Path = /** @class */ (function (_super) {\n    __extends(Path, _super);\n    function Path() {\n        return _super !== null && _super.apply(this, arguments) || this;\n    }\n    Path.prototype.getDefaultAttrs = function () {\n        var attrs = _super.prototype.getDefaultAttrs.call(this);\n        return __assign(__assign({}, attrs), { startArrow: false, endArrow: false });\n    };\n    Path.prototype.initAttrs = function (attrs) {\n        this._setPathArr(attrs.path);\n        this.setArrow();\n    };\n    // 更新属性时，检测是否更改了 path\n    Path.prototype.onAttrChange = function (name, value, originValue) {\n        _super.prototype.onAttrChange.call(this, name, value, originValue);\n        if (name === 'path') {\n            this._setPathArr(value);\n        }\n        // 由于箭头的绘制依赖于 line 的诸多 attrs，因此这里不再对每个 attr 进行判断，attr 每次变化都会影响箭头的更新\n        this.setArrow();\n    };\n    // 将 path 转换成绝对路径\n    Path.prototype._setPathArr = function (path) {\n        // 转换 path 的格式\n        this.attrs.path = path2Absolute(path);\n        var hasArc = PathUtil.hasArc(path);\n        // 为了加速 path 的绘制、拾取和计算，这个地方可以缓存很多东西\n        // 这些缓存都是第一次需要时计算和存储，虽然增加了复杂度，但是频繁调用的方法，性能有很大提升\n        this.set('hasArc', hasArc);\n        this.set('paramsCache', {}); // 清理缓存\n        this.set('segments', null); // 延迟生成 path，在动画场景下可能不会有拾取\n        this.set('curve', null);\n        this.set('tCache', null);\n        this.set('totalLength', null);\n    };\n    Path.prototype.getSegments = function () {\n        var segments = this.get('segements');\n        if (!segments) {\n            segments = path2Segments(this.attr('path'));\n            this.set('segments', segments);\n        }\n        return segments;\n    };\n    Path.prototype.setArrow = function () {\n        var attrs = this.attr();\n        var startArrow = attrs.startArrow, endArrow = attrs.endArrow;\n        if (startArrow) {\n            var tangent = this.getStartTangent();\n            ArrowUtil.addStartArrow(this, attrs, tangent[0][0], tangent[0][1], tangent[1][0], tangent[1][1]);\n        }\n        if (endArrow) {\n            var tangent = this.getEndTangent();\n            ArrowUtil.addEndArrow(this, attrs, tangent[0][0], tangent[0][1], tangent[1][0], tangent[1][1]);\n        }\n    };\n    Path.prototype.isInStrokeOrPath = function (x, y, isStroke, isFill, lineWidth) {\n        var segments = this.getSegments();\n        var hasArc = this.get('hasArc');\n        var isHit = false;\n        if (isStroke) {\n            var length_1 = this.getTotalLength();\n            isHit = PathUtil.isPointInStroke(segments, lineWidth, x, y, length_1);\n        }\n        if (!isHit && isFill) {\n            if (hasArc) {\n                // 存在曲线时，暂时使用 canvas 的 api 计算，后续可以进行多边形切割\n                isHit = isPointInPath(this, x, y);\n            }\n            else {\n                var path = this.attr('path');\n                var extractResutl = PathUtil.extractPolygons(path);\n                // 提取出来的多边形包含闭合的和非闭合的，在这里统一按照多边形处理\n                isHit = isInPolygons(extractResutl.polygons, x, y) || isInPolygons(extractResutl.polylines, x, y);\n            }\n        }\n        return isHit;\n    };\n    Path.prototype.createPath = function (context) {\n        var attrs = this.attr();\n        var paramsCache = this.get('paramsCache'); // 由于计算圆弧的参数成本很大，所以要缓存\n        drawPath(this, context, attrs, paramsCache);\n    };\n    Path.prototype.afterDrawPath = function (context) {\n        var startArrowShape = this.get('startArrowShape');\n        var endArrowShape = this.get('endArrowShape');\n        if (startArrowShape) {\n            startArrowShape.draw(context);\n        }\n        if (endArrowShape) {\n            endArrowShape.draw(context);\n        }\n    };\n    /**\n     * Get total length of path\n     * @return {number} length\n     */\n    Path.prototype.getTotalLength = function () {\n        var totalLength = this.get('totalLength');\n        if (!isNil(totalLength)) {\n            return totalLength;\n        }\n        this._calculateCurve();\n        this._setTcache();\n        return this.get('totalLength');\n    };\n    /**\n     * Get point according to ratio\n     * @param {number} ratio\n     * @return {Point} point\n     */\n    Path.prototype.getPoint = function (ratio) {\n        var tCache = this.get('tCache');\n        if (!tCache) {\n            this._calculateCurve();\n            this._setTcache();\n            tCache = this.get('tCache');\n        }\n        var subt;\n        var index;\n        var curve = this.get('curve');\n        if (!tCache || tCache.length === 0) {\n            if (curve) {\n                return {\n                    x: curve[0][1],\n                    y: curve[0][2],\n                };\n            }\n            return null;\n        }\n        each(tCache, function (v, i) {\n            if (ratio >= v[0] && ratio <= v[1]) {\n                subt = (ratio - v[0]) / (v[1] - v[0]);\n                index = i;\n            }\n        });\n        var seg = curve[index];\n        if (isNil(seg) || isNil(index)) {\n            return null;\n        }\n        var l = seg.length;\n        var nextSeg = curve[index + 1];\n        return CubicUtil.pointAt(seg[l - 2], seg[l - 1], nextSeg[1], nextSeg[2], nextSeg[3], nextSeg[4], nextSeg[5], nextSeg[6], subt);\n    };\n    Path.prototype._calculateCurve = function () {\n        var path = this.attr().path;\n        this.set('curve', PathUtil.pathToCurve(path));\n    };\n    Path.prototype._setTcache = function () {\n        var totalLength = 0;\n        var tempLength = 0;\n        // 每段 curve 对应起止点的长度比例列表，形如: [[0, 0.25], [0.25, 0.6]. [0.6, 0.9], [0.9, 1]]\n        var tCache = [];\n        var segmentT;\n        var segmentL;\n        var segmentN;\n        var l;\n        var curve = this.get('curve');\n        if (!curve) {\n            return;\n        }\n        each(curve, function (segment, i) {\n            segmentN = curve[i + 1];\n            l = segment.length;\n            if (segmentN) {\n                totalLength +=\n                    CubicUtil.length(segment[l - 2], segment[l - 1], segmentN[1], segmentN[2], segmentN[3], segmentN[4], segmentN[5], segmentN[6]) || 0;\n            }\n        });\n        this.set('totalLength', totalLength);\n        if (totalLength === 0) {\n            this.set('tCache', []);\n            return;\n        }\n        each(curve, function (segment, i) {\n            segmentN = curve[i + 1];\n            l = segment.length;\n            if (segmentN) {\n                segmentT = [];\n                segmentT[0] = tempLength / totalLength;\n                segmentL = CubicUtil.length(segment[l - 2], segment[l - 1], segmentN[1], segmentN[2], segmentN[3], segmentN[4], segmentN[5], segmentN[6]);\n                // 当 path 不连续时，segmentL 可能为空，为空时需要作为 0 处理\n                tempLength += segmentL || 0;\n                segmentT[1] = tempLength / totalLength;\n                tCache.push(segmentT);\n            }\n        });\n        this.set('tCache', tCache);\n    };\n    /**\n     * Get start tangent vector\n     * @return {Array}\n     */\n    Path.prototype.getStartTangent = function () {\n        var segments = this.getSegments();\n        var result;\n        if (segments.length > 1) {\n            var startPoint = segments[0].currentPoint;\n            var endPoint = segments[1].currentPoint;\n            var tangent = segments[1].startTangent;\n            result = [];\n            if (tangent) {\n                result.push([startPoint[0] - tangent[0], startPoint[1] - tangent[1]]);\n                result.push([startPoint[0], startPoint[1]]);\n            }\n            else {\n                result.push([endPoint[0], endPoint[1]]);\n                result.push([startPoint[0], startPoint[1]]);\n            }\n        }\n        return result;\n    };\n    /**\n     * Get end tangent vector\n     * @return {Array}\n     */\n    Path.prototype.getEndTangent = function () {\n        var segments = this.getSegments();\n        var length = segments.length;\n        var result;\n        if (length > 1) {\n            var startPoint = segments[length - 2].currentPoint;\n            var endPoint = segments[length - 1].currentPoint;\n            var tangent = segments[length - 1].endTangent;\n            result = [];\n            if (tangent) {\n                result.push([endPoint[0] - tangent[0], endPoint[1] - tangent[1]]);\n                result.push([endPoint[0], endPoint[1]]);\n            }\n            else {\n                result.push([startPoint[0], startPoint[1]]);\n                result.push([endPoint[0], endPoint[1]]);\n            }\n        }\n        return result;\n    };\n    return Path;\n}(ShapeBase));\nexport default Path;\n//# sourceMappingURL=path.js.map","import inLine from './line';\nexport default function inPolyline(points, lineWidth, x, y, isClose) {\n    var count = points.length;\n    if (count < 2) {\n        return false;\n    }\n    for (var i = 0; i < count - 1; i++) {\n        var x1 = points[i][0];\n        var y1 = points[i][1];\n        var x2 = points[i + 1][0];\n        var y2 = points[i + 1][1];\n        if (inLine(x1, y1, x2, y2, lineWidth, x, y)) {\n            return true;\n        }\n    }\n    // 如果封闭，则计算起始点和结束点的边\n    if (isClose) {\n        var first = points[0];\n        var last = points[count - 1];\n        if (inLine(first[0], first[1], last[0], last[1], lineWidth, x, y)) {\n            return true;\n        }\n    }\n    return false;\n}\n//# sourceMappingURL=polyline.js.map","/**\n * @fileoverview 多边形\n * @author dxq613@gmail.com\n */\nimport { __extends } from \"tslib\";\nimport ShapeBase from './base';\nimport inPolyline from '../util/in-stroke/polyline';\nimport isInPolygon from '../util/in-path/polygon';\nvar Polygon = /** @class */ (function (_super) {\n    __extends(Polygon, _super);\n    function Polygon() {\n        return _super !== null && _super.apply(this, arguments) || this;\n    }\n    Polygon.prototype.isInStrokeOrPath = function (x, y, isStroke, isFill, lineWidth) {\n        var points = this.attr().points;\n        var isHit = false;\n        if (isStroke) {\n            isHit = inPolyline(points, lineWidth, x, y, true);\n        }\n        if (!isHit && isFill) {\n            isHit = isInPolygon(points, x, y); // isPointInPath(shape, x, y);\n        }\n        return isHit;\n    };\n    Polygon.prototype.createPath = function (context) {\n        var attrs = this.attr();\n        var points = attrs.points;\n        if (points.length < 2) {\n            return;\n        }\n        context.beginPath();\n        for (var i = 0; i < points.length; i++) {\n            var point = points[i];\n            if (i === 0) {\n                context.moveTo(point[0], point[1]);\n            }\n            else {\n                context.lineTo(point[0], point[1]);\n            }\n        }\n        context.closePath();\n    };\n    return Polygon;\n}(ShapeBase));\nexport default Polygon;\n//# sourceMappingURL=polygon.js.map","import { __assign, __extends } from \"tslib\";\nimport { Line as LineUtil } from '@antv/g-math';\nimport { Polyline as PolylineUtil } from '@antv/g-math';\nimport { each, isNil } from '@antv/util';\nimport ShapeBase from './base';\nimport inPolyline from '../util/in-stroke/polyline';\nimport * as ArrowUtil from '../util/arrow';\nvar PolyLine = /** @class */ (function (_super) {\n    __extends(PolyLine, _super);\n    function PolyLine() {\n        return _super !== null && _super.apply(this, arguments) || this;\n    }\n    PolyLine.prototype.getDefaultAttrs = function () {\n        var attrs = _super.prototype.getDefaultAttrs.call(this);\n        return __assign(__assign({}, attrs), { startArrow: false, endArrow: false });\n    };\n    PolyLine.prototype.initAttrs = function (attrs) {\n        this.setArrow();\n    };\n    // 更新属性时，检测是否更改了 points\n    PolyLine.prototype.onAttrChange = function (name, value, originValue) {\n        _super.prototype.onAttrChange.call(this, name, value, originValue);\n        this.setArrow();\n        if (['points'].indexOf(name) !== -1) {\n            this._resetCache();\n        }\n    };\n    PolyLine.prototype._resetCache = function () {\n        this.set('totalLength', null);\n        this.set('tCache', null);\n    };\n    PolyLine.prototype.setArrow = function () {\n        var attrs = this.attr();\n        var _a = this.attrs, points = _a.points, startArrow = _a.startArrow, endArrow = _a.endArrow;\n        var length = points.length;\n        var x1 = points[0][0];\n        var y1 = points[0][1];\n        var x2 = points[length - 1][0];\n        var y2 = points[length - 1][1];\n        if (startArrow) {\n            ArrowUtil.addStartArrow(this, attrs, points[1][0], points[1][1], x1, y1);\n        }\n        if (endArrow) {\n            ArrowUtil.addEndArrow(this, attrs, points[length - 2][0], points[length - 2][1], x2, y2);\n        }\n    };\n    // 不允许 fill\n    PolyLine.prototype.isFill = function () {\n        return false;\n    };\n    PolyLine.prototype.isInStrokeOrPath = function (x, y, isStroke, isFill, lineWidth) {\n        // 没有设置 stroke 不能被拾取, 没有线宽不能被拾取\n        if (!isStroke || !lineWidth) {\n            return false;\n        }\n        var points = this.attr().points;\n        return inPolyline(points, lineWidth, x, y, false);\n    };\n    // 始终填充\n    PolyLine.prototype.isStroke = function () {\n        return true;\n    };\n    PolyLine.prototype.createPath = function (context) {\n        var _a = this.attr(), points = _a.points, startArrow = _a.startArrow, endArrow = _a.endArrow;\n        var length = points.length;\n        if (points.length < 2) {\n            return;\n        }\n        var x1 = points[0][0];\n        var y1 = points[0][1];\n        var x2 = points[length - 1][0];\n        var y2 = points[length - 1][1];\n        // 如果定义了箭头，并且是自定义箭头，线条相应缩进\n        if (startArrow && startArrow.d) {\n            var distance = ArrowUtil.getShortenOffset(x1, y1, points[1][0], points[1][1], startArrow.d);\n            x1 += distance.dx;\n            y1 += distance.dy;\n        }\n        if (endArrow && endArrow.d) {\n            var distance = ArrowUtil.getShortenOffset(points[length - 2][0], points[length - 2][1], x2, y2, endArrow.d);\n            x2 -= distance.dx;\n            y2 -= distance.dy;\n        }\n        context.beginPath();\n        context.moveTo(x1, y1);\n        for (var i = 0; i < length - 1; i++) {\n            var point = points[i];\n            context.lineTo(point[0], point[1]);\n        }\n        context.lineTo(x2, y2);\n    };\n    PolyLine.prototype.afterDrawPath = function (context) {\n        var startArrowShape = this.get('startArrowShape');\n        var endArrowShape = this.get('endArrowShape');\n        if (startArrowShape) {\n            startArrowShape.draw(context);\n        }\n        if (endArrowShape) {\n            endArrowShape.draw(context);\n        }\n    };\n    /**\n     * Get length of polyline\n     * @return {number} length\n     */\n    PolyLine.prototype.getTotalLength = function () {\n        var points = this.attr().points;\n        // get totalLength from cache\n        var totalLength = this.get('totalLength');\n        if (!isNil(totalLength)) {\n            return totalLength;\n        }\n        this.set('totalLength', PolylineUtil.length(points));\n        return this.get('totalLength');\n    };\n    /**\n     * Get point according to ratio\n     * @param {number} ratio\n     * @return {Point} point\n     */\n    PolyLine.prototype.getPoint = function (ratio) {\n        var points = this.attr().points;\n        // get tCache from cache\n        var tCache = this.get('tCache');\n        if (!tCache) {\n            this._setTcache();\n            tCache = this.get('tCache');\n        }\n        var subt;\n        var index;\n        each(tCache, function (v, i) {\n            if (ratio >= v[0] && ratio <= v[1]) {\n                subt = (ratio - v[0]) / (v[1] - v[0]);\n                index = i;\n            }\n        });\n        return LineUtil.pointAt(points[index][0], points[index][1], points[index + 1][0], points[index + 1][1], subt);\n    };\n    PolyLine.prototype._setTcache = function () {\n        var points = this.attr().points;\n        if (!points || points.length === 0) {\n            return;\n        }\n        var totalLength = this.getTotalLength();\n        if (totalLength <= 0) {\n            return;\n        }\n        var tempLength = 0;\n        var tCache = [];\n        var segmentT;\n        var segmentL;\n        each(points, function (p, i) {\n            if (points[i + 1]) {\n                segmentT = [];\n                segmentT[0] = tempLength / totalLength;\n                segmentL = LineUtil.length(p[0], p[1], points[i + 1][0], points[i + 1][1]);\n                tempLength += segmentL;\n                segmentT[1] = tempLength / totalLength;\n                tCache.push(segmentT);\n            }\n        });\n        this.set('tCache', tCache);\n    };\n    /**\n     * Get start tangent vector\n     * @return {Array}\n     */\n    PolyLine.prototype.getStartTangent = function () {\n        var points = this.attr().points;\n        var result = [];\n        result.push([points[1][0], points[1][1]]);\n        result.push([points[0][0], points[0][1]]);\n        return result;\n    };\n    /**\n     * Get end tangent vector\n     * @return {Array}\n     */\n    PolyLine.prototype.getEndTangent = function () {\n        var points = this.attr().points;\n        var l = points.length - 1;\n        var result = [];\n        result.push([points[l - 1][0], points[l - 1][1]]);\n        result.push([points[l][0], points[l][1]]);\n        return result;\n    };\n    return PolyLine;\n}(ShapeBase));\nexport default PolyLine;\n//# sourceMappingURL=polyline.js.map","/**\n * @fileoverview 矩形\n * @author dxq613@gmail.com\n */\nimport { __assign, __extends } from \"tslib\";\nimport ShapeBase from './base';\nimport { parseRadius } from '../util/parse';\nimport { inBox } from '../util/util';\nimport inRect from '../util/in-stroke/rect';\nimport inRectWithRadius from '../util/in-stroke/rect-radius';\nimport isPointInPath from '../util/in-path/point-in-path';\nvar Rect = /** @class */ (function (_super) {\n    __extends(Rect, _super);\n    function Rect() {\n        return _super !== null && _super.apply(this, arguments) || this;\n    }\n    Rect.prototype.getDefaultAttrs = function () {\n        var attrs = _super.prototype.getDefaultAttrs.call(this);\n        return __assign(__assign({}, attrs), { x: 0, y: 0, width: 0, height: 0, radius: 0 });\n    };\n    Rect.prototype.isInStrokeOrPath = function (x, y, isStroke, isFill, lineWidth) {\n        var attrs = this.attr();\n        var minX = attrs.x;\n        var minY = attrs.y;\n        var width = attrs.width;\n        var height = attrs.height;\n        var radius = attrs.radius;\n        // 无圆角时的策略\n        if (!radius) {\n            var halfWidth = lineWidth / 2;\n            // 同时填充和带有边框\n            if (isFill && isStroke) {\n                return inBox(minX - halfWidth, minY - halfWidth, width + halfWidth, height + halfWidth, x, y);\n            }\n            // 仅填充\n            if (isFill) {\n                return inBox(minX, minY, width, height, x, y);\n            }\n            if (isStroke) {\n                return inRect(minX, minY, width, height, lineWidth, x, y);\n            }\n        }\n        else {\n            var isHit = false;\n            if (isStroke) {\n                isHit = inRectWithRadius(minX, minY, width, height, radius, lineWidth, x, y);\n            }\n            // 仅填充时带有圆角的矩形直接通过图形拾取\n            // 以后可以改成纯数学的近似拾取，将圆弧切割成多边形\n            if (!isHit && isFill) {\n                isHit = isPointInPath(this, x, y);\n            }\n            return isHit;\n        }\n    };\n    Rect.prototype.createPath = function (context) {\n        var attrs = this.attr();\n        var x = attrs.x;\n        var y = attrs.y;\n        var width = attrs.width;\n        var height = attrs.height;\n        var radius = attrs.radius;\n        context.beginPath();\n        if (radius === 0) {\n            // 改成原生的rect方法\n            context.rect(x, y, width, height);\n        }\n        else {\n            var _a = parseRadius(radius), r1 = _a[0], r2 = _a[1], r3 = _a[2], r4 = _a[3];\n            context.moveTo(x + r1, y);\n            context.lineTo(x + width - r2, y);\n            r2 !== 0 && context.arc(x + width - r2, y + r2, r2, -Math.PI / 2, 0);\n            context.lineTo(x + width, y + height - r3);\n            r3 !== 0 && context.arc(x + width - r3, y + height - r3, r3, 0, Math.PI / 2);\n            context.lineTo(x + r4, y + height);\n            r4 !== 0 && context.arc(x + r4, y + height - r4, r4, Math.PI / 2, Math.PI);\n            context.lineTo(x, y + r1);\n            r1 !== 0 && context.arc(x + r1, y + r1, r1, Math.PI, Math.PI * 1.5);\n            context.closePath();\n        }\n    };\n    return Rect;\n}(ShapeBase));\nexport default Rect;\n//# sourceMappingURL=rect.js.map","import inLine from './line';\nimport inArc from './arc';\nexport default function rectWithRadius(minX, minY, width, height, radius, lineWidth, x, y) {\n    var halfWidth = lineWidth / 2;\n    return (inLine(minX + radius, minY, minX + width - radius, minY, lineWidth, x, y) ||\n        inLine(minX + width, minY + radius, minX + width, minY + height - radius, lineWidth, x, y) ||\n        inLine(minX + width - radius, minY + height, minX + radius, minY + height, lineWidth, x, y) ||\n        inLine(minX, minY + height - radius, minX, minY + radius, lineWidth, x, y) ||\n        inArc(minX + width - radius, minY + radius, radius, 1.5 * Math.PI, 2 * Math.PI, lineWidth, x, y) ||\n        inArc(minX + width - radius, minY + height - radius, radius, 0, 0.5 * Math.PI, lineWidth, x, y) ||\n        inArc(minX + radius, minY + height - radius, radius, 0.5 * Math.PI, Math.PI, lineWidth, x, y) ||\n        inArc(minX + radius, minY + radius, radius, Math.PI, 1.5 * Math.PI, lineWidth, x, y));\n}\n//# sourceMappingURL=rect-radius.js.map","import { inBox } from '../util';\nexport default function inRect(minX, minY, width, height, lineWidth, x, y) {\n    var halfWidth = lineWidth / 2;\n    // 将四个边看做矩形来检测，比边的检测算法要快\n    return (inBox(minX - halfWidth, minY - halfWidth, width, lineWidth, x, y) || // 上边\n        inBox(minX + width - halfWidth, minY - halfWidth, lineWidth, height, x, y) || // 右边\n        inBox(minX + halfWidth, minY + height - halfWidth, width, lineWidth, x, y) || // 下边\n        inBox(minX - halfWidth, minY + halfWidth, lineWidth, height, x, y)); // 左边\n}\n//# sourceMappingURL=rect.js.map","/**\n * @fileoverview 文本\n * @author dxq613@gmail.com\n */\nimport { __assign, __extends } from \"tslib\";\nimport ShapeBase from './base';\nimport { isNil, isString, each } from '../util/util';\nimport { getTextHeight, assembleFont } from '@antv/g-base';\nvar Text = /** @class */ (function (_super) {\n    __extends(Text, _super);\n    function Text() {\n        return _super !== null && _super.apply(this, arguments) || this;\n    }\n    // 默认文本属性\n    Text.prototype.getDefaultAttrs = function () {\n        var attrs = _super.prototype.getDefaultAttrs.call(this);\n        return __assign(__assign({}, attrs), { x: 0, y: 0, text: null, fontSize: 12, fontFamily: 'sans-serif', fontStyle: 'normal', fontWeight: 'normal', fontVariant: 'normal', textAlign: 'start', textBaseline: 'bottom' });\n    };\n    // 仅仅使用包围盒检测来进行拾取\n    Text.prototype.isOnlyHitBox = function () {\n        return true;\n    };\n    // 初始化时组合 font，同时判断 text 是否换行\n    Text.prototype.initAttrs = function (attrs) {\n        this._assembleFont();\n        if (attrs.text) {\n            this._setText(attrs.text);\n        }\n    };\n    // 组装字体\n    Text.prototype._assembleFont = function () {\n        var attrs = this.attrs;\n        attrs.font = assembleFont(attrs);\n    };\n    // 如果文本换行，则缓存数组\n    Text.prototype._setText = function (text) {\n        var textArr = null;\n        if (isString(text) && text.indexOf('\\n') !== -1) {\n            textArr = text.split('\\n');\n        }\n        this.set('textArr', textArr);\n    };\n    // 更新属性时，检测是否更改了 font、text\n    Text.prototype.onAttrChange = function (name, value, originValue) {\n        _super.prototype.onAttrChange.call(this, name, value, originValue);\n        if (name.startsWith('font')) {\n            this._assembleFont();\n        }\n        if (name === 'text') {\n            this._setText(value);\n        }\n    };\n    // 这个方法在 text 时没有可以做的事情，如果要支持文字背景时可以考虑\n    // createPath(context) {\n    // }\n    // 如果文本多行，需要获取文本间距\n    Text.prototype._getSpaceingY = function () {\n        var attrs = this.attrs;\n        var lineHeight = attrs.lineHeight;\n        var fontSize = attrs.fontSize * 1;\n        return lineHeight ? lineHeight - fontSize : fontSize * 0.14;\n    };\n    // 绘制文本，考虑多行的场景\n    Text.prototype._drawTextArr = function (context, textArr, isFill) {\n        var attrs = this.attrs;\n        var textBaseline = attrs.textBaseline;\n        var x = attrs.x;\n        var y = attrs.y;\n        var fontSize = attrs.fontSize * 1;\n        var spaceingY = this._getSpaceingY();\n        var height = getTextHeight(attrs.text, attrs.fontSize, attrs.lineHeight);\n        var subY;\n        each(textArr, function (subText, index) {\n            subY = y + index * (spaceingY + fontSize) - height + fontSize; // bottom;\n            if (textBaseline === 'middle')\n                subY += height - fontSize - (height - fontSize) / 2;\n            if (textBaseline === 'top')\n                subY += height - fontSize;\n            if (!isNil(subText)) {\n                if (isFill) {\n                    context.fillText(subText, x, subY);\n                }\n                else {\n                    context.strokeText(subText, x, subY);\n                }\n            }\n        });\n    };\n    // 绘制文本，同时考虑填充和绘制边框\n    Text.prototype._drawText = function (context, isFill) {\n        var attrs = this.attr();\n        var x = attrs.x;\n        var y = attrs.y;\n        var textArr = this.get('textArr');\n        if (textArr) {\n            this._drawTextArr(context, textArr, isFill);\n        }\n        else {\n            var text = attrs.text;\n            if (!isNil(text)) {\n                if (isFill) {\n                    context.fillText(text, x, y);\n                }\n                else {\n                    context.strokeText(text, x, y);\n                }\n            }\n        }\n    };\n    // 复写绘制和填充的逻辑：对于文本，应该先绘制边框，再进行填充\n    Text.prototype.strokeAndFill = function (context) {\n        var _a = this.attrs, lineWidth = _a.lineWidth, opacity = _a.opacity, strokeOpacity = _a.strokeOpacity, fillOpacity = _a.fillOpacity;\n        if (this.isStroke()) {\n            if (lineWidth > 0) {\n                if (!isNil(strokeOpacity) && strokeOpacity !== 1) {\n                    context.globalAlpha = opacity;\n                }\n                this.stroke(context);\n            }\n        }\n        if (this.isFill()) {\n            if (!isNil(fillOpacity) && fillOpacity !== 1) {\n                context.globalAlpha = fillOpacity;\n                this.fill(context);\n                context.globalAlpha = opacity;\n            }\n            else {\n                this.fill(context);\n            }\n        }\n        this.afterDrawPath(context);\n    };\n    // 复写填充逻辑\n    Text.prototype.fill = function (context) {\n        this._drawText(context, true);\n    };\n    // 复写绘制边框的逻辑\n    Text.prototype.stroke = function (context) {\n        this._drawText(context, false);\n    };\n    return Text;\n}(ShapeBase));\nexport default Text;\n//# sourceMappingURL=text.js.map","import { isAllowCapture, multiplyVec2, invert } from '@antv/g-base';\nfunction invertFromMatrix(v, matrix) {\n    if (matrix) {\n        var invertMatrix = invert(matrix);\n        return multiplyVec2(invertMatrix, v);\n    }\n    return v;\n}\nfunction getRefXY(element, x, y) {\n    // @ts-ignore\n    var totalMatrix = element.getTotalMatrix();\n    if (totalMatrix) {\n        var _a = invertFromMatrix([x, y, 1], totalMatrix), refX = _a[0], refY = _a[1];\n        return [refX, refY];\n    }\n    return [x, y];\n}\n// 拾取前的检测，只有通过检测才能继续拾取\nfunction preTest(element, x, y) {\n    // @ts-ignore\n    if (element.isCanvas && element.isCanvas()) {\n        return true;\n    }\n    // 不允许被拾取，则返回 null\n    // @ts-ignore\n    if (!isAllowCapture(element) || element.cfg.isInView === false) {\n        return false;\n    }\n    if (element.cfg.clipShape) {\n        // 如果存在 clip\n        var _a = getRefXY(element, x, y), refX = _a[0], refY = _a[1];\n        if (element.isClipped(refX, refY)) {\n            return false;\n        }\n    }\n    // @ts-ignore ，这个地方调用过于频繁\n    var bbox = element.cfg.cacheCanvasBBox || element.getCanvasBBox();\n    // 如果没有缓存 bbox，则说明不可见\n    // 注释掉的这段可能会加速拾取，上面的语句改写成 const bbox = element.cfg.cacheCanvasBBox;\n    // 这时候的拾取假设图形/分组在上一次绘制都在视窗内，但是上面已经判定了 isInView 所以意义不大\n    // 现在还调用 element.getCanvasBBox(); 一个很大的原因是便于单元测试\n    // if (!bbox) {\n    //   return false;\n    // }\n    if (!(x >= bbox.minX && x <= bbox.maxX && y >= bbox.minY && y <= bbox.maxY)) {\n        return false;\n    }\n    return true;\n}\n// 这个方法复写了 g-base 的 getShape\nexport function getShape(container, x, y) {\n    // 没有通过检测，则返回 null\n    if (!preTest(container, x, y)) {\n        return null;\n    }\n    var shape = null;\n    var children = container.getChildren();\n    var count = children.length;\n    for (var i = count - 1; i >= 0; i--) {\n        var child = children[i];\n        if (child.isGroup()) {\n            shape = getShape(child, x, y);\n        }\n        else if (preTest(child, x, y)) {\n            var curShape = child;\n            var _a = getRefXY(child, x, y), refX = _a[0], refY = _a[1];\n            // @ts-ignore\n            if (curShape.isInShape(refX, refY)) {\n                shape = child;\n            }\n        }\n        if (shape) {\n            break;\n        }\n    }\n    return shape;\n}\n//# sourceMappingURL=hit.js.map","import { __extends } from \"tslib\";\nimport { AbstractCanvas } from '@antv/g-base';\nimport { getShape } from './util/hit';\nimport * as Shape from './shape';\nimport Group from './group';\nimport { each, getPixelRatio, requestAnimationFrame, clearAnimationFrame } from './util/util';\nimport { applyAttrsToContext, drawChildren, getMergedRegion, mergeView, checkRefresh, clearChanged } from './util/draw';\nvar Canvas = /** @class */ (function (_super) {\n    __extends(Canvas, _super);\n    function Canvas() {\n        return _super !== null && _super.apply(this, arguments) || this;\n    }\n    Canvas.prototype.getDefaultCfg = function () {\n        var cfg = _super.prototype.getDefaultCfg.call(this);\n        // 设置渲染引擎为 canvas，只读属性\n        cfg['renderer'] = 'canvas';\n        // 是否自动绘制，不需要用户调用 draw 方法\n        cfg['autoDraw'] = true;\n        // 是否允许局部刷新图表\n        cfg['localRefresh'] = true;\n        cfg['refreshElements'] = [];\n        // 是否在视图内自动裁剪\n        cfg['clipView'] = true;\n        // 是否使用快速拾取的方案，默认为 false，上层可以打开\n        cfg['quickHit'] = false;\n        return cfg;\n    };\n    /**\n     * 一些方法调用会引起画布变化\n     * @param {ChangeType} changeType 改变的类型\n     */\n    Canvas.prototype.onCanvasChange = function (changeType) {\n        /**\n         * 触发画布更新的三种 changeType\n         * 1. attr: 修改画布的绘图属性\n         * 2. sort: 画布排序，图形的层次会发生变化\n         * 3. changeSize: 改变画布大小\n         */\n        if (changeType === 'attr' || changeType === 'sort' || changeType === 'changeSize') {\n            this.set('refreshElements', [this]);\n            this.draw();\n        }\n    };\n    Canvas.prototype.getShapeBase = function () {\n        return Shape;\n    };\n    Canvas.prototype.getGroupBase = function () {\n        return Group;\n    };\n    /**\n     * 获取屏幕像素比\n     */\n    Canvas.prototype.getPixelRatio = function () {\n        var pixelRatio = this.get('pixelRatio') || getPixelRatio();\n        // 不足 1 的取 1，超出 1 的取整\n        return pixelRatio >= 1 ? Math.ceil(pixelRatio) : 1;\n    };\n    Canvas.prototype.getViewRange = function () {\n        return {\n            minX: 0,\n            minY: 0,\n            maxX: this.cfg.width,\n            maxY: this.cfg.height,\n        };\n    };\n    // 复写基类的方法生成标签\n    Canvas.prototype.createDom = function () {\n        var element = document.createElement('canvas');\n        var context = element.getContext('2d');\n        // 缓存 context 对象\n        this.set('context', context);\n        return element;\n    };\n    Canvas.prototype.setDOMSize = function (width, height) {\n        _super.prototype.setDOMSize.call(this, width, height);\n        var context = this.get('context');\n        var el = this.get('el');\n        var pixelRatio = this.getPixelRatio();\n        el.width = pixelRatio * width;\n        el.height = pixelRatio * height;\n        // 设置 canvas 元素的宽度和高度，会重置缩放，因此 context.scale 需要在每次设置宽、高后调用\n        if (pixelRatio > 1) {\n            context.scale(pixelRatio, pixelRatio);\n        }\n    };\n    // 复写基类方法\n    Canvas.prototype.clear = function () {\n        _super.prototype.clear.call(this);\n        this._clearFrame(); // 需要清理掉延迟绘制的帧\n        var context = this.get('context');\n        var element = this.get('el');\n        context.clearRect(0, 0, element.width, element.height);\n    };\n    Canvas.prototype.getShape = function (x, y) {\n        var shape;\n        if (this.get('quickHit')) {\n            shape = getShape(this, x, y);\n        }\n        else {\n            shape = _super.prototype.getShape.call(this, x, y, null);\n        }\n        return shape;\n    };\n    // 对绘制区域边缘取整，避免浮点数问题\n    Canvas.prototype._getRefreshRegion = function () {\n        var elements = this.get('refreshElements');\n        var viewRegion = this.getViewRange();\n        var region;\n        // 如果是当前画布整体发生了变化，则直接重绘整个画布\n        if (elements.length && elements[0] === this) {\n            region = viewRegion;\n        }\n        else {\n            region = getMergedRegion(elements);\n            if (region) {\n                region.minX = Math.floor(region.minX);\n                region.minY = Math.floor(region.minY);\n                region.maxX = Math.ceil(region.maxX);\n                region.maxY = Math.ceil(region.maxY);\n                region.maxY += 1; // 在很多环境下字体的高低会不一致，附加一像素，避免残影\n                var clipView = this.get('clipView');\n                // 自动裁剪不在 view 内的区域\n                if (clipView) {\n                    region = mergeView(region, viewRegion);\n                }\n            }\n        }\n        return region;\n    };\n    /**\n     * 刷新图形元素，这里仅仅是放入队列，下次绘制时进行绘制\n     * @param {IElement} element 图形元素\n     */\n    Canvas.prototype.refreshElement = function (element) {\n        var refreshElements = this.get('refreshElements');\n        refreshElements.push(element);\n        // if (this.get('autoDraw')) {\n        //   this._startDraw();\n        // }\n    };\n    // 清理还在进行的绘制\n    Canvas.prototype._clearFrame = function () {\n        var drawFrame = this.get('drawFrame');\n        if (drawFrame) {\n            // 如果全部渲染时，存在局部渲染，则抛弃掉局部渲染\n            clearAnimationFrame(drawFrame);\n            this.set('drawFrame', null);\n            this.set('refreshElements', []);\n        }\n    };\n    // 手工调用绘制接口\n    Canvas.prototype.draw = function () {\n        var drawFrame = this.get('drawFrame');\n        if (this.get('autoDraw') && drawFrame) {\n            return;\n        }\n        this._startDraw();\n    };\n    // 绘制所有图形\n    Canvas.prototype._drawAll = function () {\n        var context = this.get('context');\n        var element = this.get('el');\n        var children = this.getChildren();\n        context.clearRect(0, 0, element.width, element.height);\n        applyAttrsToContext(context, this);\n        drawChildren(context, children);\n        // 对于 https://github.com/antvis/g/issues/422 的场景，全局渲染的模式下也会记录更新的元素队列，因此全局渲染完后也需要置空\n        this.set('refreshElements', []);\n    };\n    // 绘制局部\n    Canvas.prototype._drawRegion = function () {\n        var context = this.get('context');\n        var refreshElements = this.get('refreshElements');\n        var children = this.getChildren();\n        var region = this._getRefreshRegion();\n        // 需要注意可能没有 region 的场景\n        // 一般发生在设置了 localRefresh ,在没有图形发生变化的情况下，用户调用了 draw\n        if (region) {\n            // 清理指定区域\n            context.clearRect(region.minX, region.minY, region.maxX - region.minX, region.maxY - region.minY);\n            // 保存上下文，设置 clip\n            context.save();\n            context.beginPath();\n            context.rect(region.minX, region.minY, region.maxX - region.minX, region.maxY - region.minY);\n            context.clip();\n            applyAttrsToContext(context, this);\n            // 确认更新的元素，这个优化可以提升 10 倍左右的性能，10W 个带有 group 的节点，局部渲染会从 90ms 下降到 5-6 ms\n            checkRefresh(this, children, region);\n            // 绘制子元素\n            drawChildren(context, children, region);\n            context.restore();\n        }\n        else if (refreshElements.length) {\n            // 防止发生改变的 elements 没有 region 的场景，这会发生在多个情况下\n            // 1. 空的 group\n            // 2. 所有 elements 没有在绘图区域\n            // 3. group 下面的 elements 隐藏掉\n            // 如果不进行清理 hasChanged 的状态会不正确\n            clearChanged(refreshElements);\n        }\n        each(refreshElements, function (element) {\n            if (element.get('hasChanged')) {\n                // 在视窗外的 Group 元素会加入到更新队列里，但实际却没有执行 draw() 逻辑，也就没有清除 hasChanged 标记\n                // 即已经重绘完、但 hasChanged 标记没有清除的元素，需要统一清除掉。主要是 Group 存在问题，具体原因待排查\n                element.set('hasChanged', false);\n            }\n        });\n        this.set('refreshElements', []);\n    };\n    // 触发绘制\n    Canvas.prototype._startDraw = function () {\n        var _this = this;\n        var drawFrame = this.get('drawFrame');\n        var drawFrameCallback = this.get('drawFrameCallback');\n        if (!drawFrame) {\n            drawFrame = requestAnimationFrame(function () {\n                if (_this.get('localRefresh')) {\n                    _this._drawRegion();\n                }\n                else {\n                    _this._drawAll();\n                }\n                _this.set('drawFrame', null);\n                if (drawFrameCallback) {\n                    drawFrameCallback();\n                }\n            });\n            this.set('drawFrame', drawFrame);\n        }\n    };\n    Canvas.prototype.skipDraw = function () { };\n    Canvas.prototype.removeDom = function () {\n        var el = this.get('el');\n        // 需要清理 canvas 画布内容，否则ios下 创建的canvas垃圾未回收，导致Total canvas memory use exceeds问题\n        // 相关问题列表\n        // https://stackoverflow.com/questions/52532614/total-canvas-memory-use-exceeds-the-maximum-limit-safari-12\n        // https://github.com/openlayers/openlayers/issues/9291\n        el.width = 0;\n        el.height = 0;\n        el.parentNode.removeChild(el);\n    };\n    return Canvas;\n}(AbstractCanvas));\nexport default Canvas;\n//# sourceMappingURL=canvas.js.map","export default function cancelAnimationFrame(handler) {\n    var method = window.cancelAnimationFrame ||\n        window.webkitCancelAnimationFrame ||\n        // @ts-ignore\n        window.mozCancelAnimationFrame ||\n        // @ts-ignore\n        window.msCancelAnimationFrame ||\n        clearTimeout;\n    method(handler);\n}\n;\n//# sourceMappingURL=clear-animation-frame.js.map","export default function requestAnimationFrame(fn) {\n    var method = window.requestAnimationFrame ||\n        window.webkitRequestAnimationFrame ||\n        // @ts-ignore\n        window.mozRequestAnimationFrame ||\n        // @ts-ignore\n        window.msRequestAnimationFrame ||\n        function (f) {\n            return setTimeout(f, 16);\n        };\n    return method(fn);\n}\n;\n//# sourceMappingURL=request-animation-frame.js.map","import * as Shape from './shape';\nexport * from '@antv/g-base';\nexport { default as Canvas } from './canvas';\nexport { default as Group } from './group';\nexport { Shape };\nexport { default as getArcParams } from './util/arc-params';\nexport var version = '0.5.12';\n//# sourceMappingURL=index.js.map","var isArrayLike = function (value) {\n    /**\n     * isArrayLike([1, 2, 3]) => true\n     * isArrayLike(document.body.children) => true\n     * isArrayLike('abc') => true\n     * isArrayLike(Function) => false\n     */\n    return value !== null && typeof value !== 'function' && isFinite(value.length);\n};\nexport default isArrayLike;\n//# sourceMappingURL=is-array-like.js.map","var toString = {}.toString;\nvar isType = function (value, type) { return toString.call(value) === '[object ' + type + ']'; };\nexport default isType;\n//# sourceMappingURL=is-type.js.map","/**\n * 是否为函数\n * @param  {*} fn 对象\n * @return {Boolean}  是否函数\n */\nimport isType from './is-type';\nexport default (function (value) {\n    return isType(value, 'Function');\n});\n//# sourceMappingURL=is-function.js.map","import isType from './is-type';\nexport default (function (value) {\n    return Array.isArray ?\n        Array.isArray(value) :\n        isType(value, 'Array');\n});\n//# sourceMappingURL=is-array.js.map","export default (function (value) {\n    /**\n     * isObject({}) => true\n     * isObject([1, 2, 3]) => true\n     * isObject(Function) => true\n     * isObject(null) => false\n     */\n    var type = typeof value;\n    return value !== null && type === 'object' || type === 'function';\n});\n//# sourceMappingURL=is-object.js.map","import isArray from './is-array';\nimport isObject from './is-object';\nfunction each(elements, func) {\n    if (!elements) {\n        return;\n    }\n    var rst;\n    if (isArray(elements)) {\n        for (var i = 0, len = elements.length; i < len; i++) {\n            rst = func(elements[i], i);\n            if (rst === false) {\n                break;\n            }\n        }\n    }\n    else if (isObject(elements)) {\n        for (var k in elements) {\n            if (elements.hasOwnProperty(k)) {\n                rst = func(elements[k], k);\n                if (rst === false) {\n                    break;\n                }\n            }\n        }\n    }\n}\nexport default each;\n//# sourceMappingURL=each.js.map","import isArray from './is-array';\n/**\n * @param {Array} arr The array to iterate over.\n * @return {*} Returns the maximum value.\n * @example\n *\n * max([1, 2]);\n * // => 2\n *\n * max([]);\n * // => undefined\n *\n * const data = new Array(1250010).fill(1).map((d,idx) => idx);\n *\n * max(data);\n * // => 1250010\n * // Math.max(...data) will encounter \"Maximum call stack size exceeded\" error\n */\nexport default (function (arr) {\n    if (!isArray(arr)) {\n        return undefined;\n    }\n    return arr.reduce(function (prev, curr) {\n        return Math.max(prev, curr);\n    }, arr[0]);\n});\n//# sourceMappingURL=max.js.map","import isArray from './is-array';\n/**\n * @param {Array} arr The array to iterate over.\n * @return {*} Returns the minimum value.\n * @example\n *\n * min([1, 2]);\n * // => 1\n *\n * min([]);\n * // => undefined\n *\n * const data = new Array(1250010).fill(1).map((d,idx) => idx);\n *\n * min(data);\n * // => 1250010\n * // Math.min(...data) will encounter \"Maximum call stack size exceeded\" error\n */\nexport default (function (arr) {\n    if (!isArray(arr)) {\n        return undefined;\n    }\n    return arr.reduce(function (prev, curr) {\n        return Math.min(prev, curr);\n    }, arr[0]);\n});\n//# sourceMappingURL=min.js.map","import isType from './is-type';\nexport default (function (str) {\n    return isType(str, 'String');\n});\n//# sourceMappingURL=is-string.js.map","var mod = function (n, m) {\n    return ((n % m) + m) % m;\n};\nexport default mod;\n//# sourceMappingURL=mod.js.map","var RADIAN = Math.PI / 180;\nvar toRadian = function (degree) {\n    return RADIAN * degree;\n};\nexport default toRadian;\n//# sourceMappingURL=to-radian.js.map","import each from './each';\nimport isFunction from './is-function';\n// @ts-ignore\nvar values = Object.values ? function (obj) { return Object.values(obj); } : function (obj) {\n    var result = [];\n    each(obj, function (value, key) {\n        if (!(isFunction(obj) && key === 'prototype')) {\n            result.push(value);\n        }\n    });\n    return result;\n};\nexport default values;\n//# sourceMappingURL=values.js.map","import isFunction from './is-function';\n/**\n * _.memoize(calColor);\n * _.memoize(calColor, (...args) => args[0]);\n * @param f\n * @param resolver\n */\nexport default (function (f, resolver) {\n    if (!isFunction(f)) {\n        throw new TypeError('Expected a function');\n    }\n    var memoized = function () {\n        var args = [];\n        for (var _i = 0; _i < arguments.length; _i++) {\n            args[_i] = arguments[_i];\n        }\n        // 使用方法构造 key，如果不存在 resolver，则直接取第一个参数作为 key\n        var key = resolver ? resolver.apply(this, args) : args[0];\n        var cache = memoized.cache;\n        if (cache.has(key)) {\n            return cache.get(key);\n        }\n        var result = f.apply(this, args);\n        // 缓存起来\n        cache.set(key, result);\n        return result;\n    };\n    memoized.cache = new Map();\n    return memoized;\n});\n//# sourceMappingURL=memoize.js.map","import isArrayLike from './is-array-like';\nexport default (function (value) {\n    return isArrayLike(value) ? Array.prototype.slice.call(value) : [];\n});\n//# sourceMappingURL=to-array.js.map","var map = {};\nexport default (function (prefix) {\n    prefix = prefix || 'g';\n    if (!map[prefix]) {\n        map[prefix] = 1;\n    }\n    else {\n        map[prefix] += 1;\n    }\n    return prefix + map[prefix];\n});\n//# sourceMappingURL=unique-id.js.map","import { __spreadArrays } from \"tslib\";\nimport values from './values';\nimport memoize from './memoize';\nimport isString from './is-string';\nvar ctx;\n/**\n * 计算文本的宽度\n */\nexport default memoize(function (text, font) {\n    if (font === void 0) { font = {}; }\n    var fontSize = font.fontSize, fontFamily = font.fontFamily, fontWeight = font.fontWeight, fontStyle = font.fontStyle, fontVariant = font.fontVariant;\n    if (!ctx) {\n        ctx = document.createElement('canvas').getContext('2d');\n    }\n    ctx.font = [fontStyle, fontVariant, fontWeight, fontSize + \"px\", fontFamily].join(' ');\n    return ctx.measureText(isString(text) ? text : '').width;\n}, function (text, font) {\n    if (font === void 0) { font = {}; }\n    return __spreadArrays([text], values(font)).join('');\n});\n//# sourceMappingURL=measure-text-width.js.map","export var SHAPE_TO_TAGS = {\n    rect: 'path',\n    circle: 'circle',\n    line: 'line',\n    path: 'path',\n    marker: 'path',\n    text: 'text',\n    polyline: 'polyline',\n    polygon: 'polygon',\n    image: 'image',\n    ellipse: 'ellipse',\n    dom: 'foreignObject',\n};\nexport var SVG_ATTR_MAP = {\n    opacity: 'opacity',\n    fillStyle: 'fill',\n    fill: 'fill',\n    fillOpacity: 'fill-opacity',\n    strokeStyle: 'stroke',\n    strokeOpacity: 'stroke-opacity',\n    stroke: 'stroke',\n    x: 'x',\n    y: 'y',\n    r: 'r',\n    rx: 'rx',\n    ry: 'ry',\n    width: 'width',\n    height: 'height',\n    x1: 'x1',\n    x2: 'x2',\n    y1: 'y1',\n    y2: 'y2',\n    lineCap: 'stroke-linecap',\n    lineJoin: 'stroke-linejoin',\n    lineWidth: 'stroke-width',\n    lineDash: 'stroke-dasharray',\n    lineDashOffset: 'stroke-dashoffset',\n    miterLimit: 'stroke-miterlimit',\n    font: 'font',\n    fontSize: 'font-size',\n    fontStyle: 'font-style',\n    fontVariant: 'font-variant',\n    fontWeight: 'font-weight',\n    fontFamily: 'font-family',\n    startArrow: 'marker-start',\n    endArrow: 'marker-end',\n    path: 'd',\n    class: 'class',\n    id: 'id',\n    style: 'style',\n    preserveAspectRatio: 'preserveAspectRatio',\n};\nexport var EVENTS = [\n    'click',\n    'mousedown',\n    'mouseup',\n    'dblclick',\n    'contextmenu',\n    'mouseenter',\n    'mouseleave',\n    'mouseover',\n    'mouseout',\n    'mousemove',\n    'wheel',\n];\n//# sourceMappingURL=constant.js.map","import { toArray } from '@antv/util';\nimport { SHAPE_TO_TAGS } from '../constant';\n/**\n * 创建并返回图形的 svg 元素\n * @param type svg类型\n */\nexport function createSVGElement(type) {\n    return document.createElementNS('http://www.w3.org/2000/svg', type);\n}\n/**\n * 创建并返回图形的 dom 元素\n * @param  {IShape} shape 图形\n * @return {SVGElement}\n */\nexport function createDom(shape) {\n    var type = SHAPE_TO_TAGS[shape.type];\n    var parent = shape.getParent();\n    if (!type) {\n        throw new Error(\"the type \" + shape.type + \" is not supported by svg\");\n    }\n    var element = createSVGElement(type);\n    if (shape.get('id')) {\n        element.id = shape.get('id');\n    }\n    shape.set('el', element);\n    shape.set('attrs', {});\n    // 对于 defs 下的 dom 节点，parent 为空，通过 context 统一挂载到 defs 节点下\n    if (parent) {\n        var parentNode = parent.get('el');\n        if (parentNode) {\n            parentNode.appendChild(element);\n        }\n        else {\n            // parentNode maybe null for group\n            parentNode = parent.createDom();\n            parent.set('el', parentNode);\n            parentNode.appendChild(element);\n        }\n    }\n    return element;\n}\n/**\n * 对 dom 元素进行排序\n * @param {IElement} element  元素\n * @param {sorter}   function 排序函数\n */\nexport function sortDom(element, sorter) {\n    var el = element.get('el');\n    var childList = toArray(el.children).sort(sorter);\n    // create empty fragment\n    var fragment = document.createDocumentFragment();\n    childList.forEach(function (child) {\n        fragment.appendChild(child);\n    });\n    el.appendChild(fragment);\n}\n/**\n * 将 dom 元素移动到父元素下的指定位置\n * @param {SVGElement} element     dom 元素\n * @param {number}     targetIndex 目标位置(从 0 开始)\n */\nexport function moveTo(element, targetIndex) {\n    var parentNode = element.parentNode;\n    var siblings = Array.from(parentNode.childNodes).filter(\n    // 要求为元素节点，且不能为 defs 节点\n    function (node) { return node.nodeType === 1 && node.nodeName.toLowerCase() !== 'defs'; });\n    // 获取目标节点\n    var target = siblings[targetIndex];\n    var currentIndex = siblings.indexOf(element);\n    // 如果目标节点存在\n    if (target) {\n        // 当前索引 > 目标索引，直接插入到目标节点之前即可\n        if (currentIndex > targetIndex) {\n            parentNode.insertBefore(element, target);\n        }\n        else if (currentIndex < targetIndex) {\n            // 当前索引 < 目标索引\n            // 获取目标节点的下一个节点\n            var targetNext = siblings[targetIndex + 1];\n            // 如果目标节点的下一个节点存在，插入到该节点之前\n            if (targetNext) {\n                parentNode.insertBefore(element, targetNext);\n            }\n            else {\n                // 如果该节点不存在，则追加到末尾\n                parentNode.appendChild(element);\n            }\n        }\n    }\n    else {\n        parentNode.appendChild(element);\n    }\n}\n//# sourceMappingURL=dom.js.map","import { createDom } from './dom';\nexport function setShadow(model, context) {\n    var el = model.cfg.el;\n    var attrs = model.attr();\n    var cfg = {\n        dx: attrs.shadowOffsetX,\n        dy: attrs.shadowOffsetY,\n        blur: attrs.shadowBlur,\n        color: attrs.shadowColor,\n    };\n    if (!cfg.dx && !cfg.dy && !cfg.blur && !cfg.color) {\n        el.removeAttribute('filter');\n    }\n    else {\n        var id = context.find('filter', cfg);\n        if (!id) {\n            id = context.addShadow(cfg);\n        }\n        el.setAttribute('filter', \"url(#\" + id + \")\");\n    }\n}\nexport function setTransform(model) {\n    var matrix = model.attr().matrix;\n    if (matrix) {\n        var el = model.cfg.el;\n        var transform = [];\n        for (var i = 0; i < 9; i += 3) {\n            transform.push(matrix[i] + \",\" + matrix[i + 1]);\n        }\n        transform = transform.join(',');\n        if (transform.indexOf('NaN') === -1) {\n            el.setAttribute('transform', \"matrix(\" + transform + \")\");\n        }\n        else {\n            console.warn('invalid matrix:', matrix);\n        }\n    }\n}\nexport function setClip(model, context) {\n    var clip = model.getClip();\n    var el = model.get('el');\n    if (!clip) {\n        el.removeAttribute('clip-path');\n    }\n    else if (clip && !el.hasAttribute('clip-path')) {\n        createDom(clip);\n        clip.createPath(context);\n        var id = context.addClip(clip);\n        el.setAttribute('clip-path', \"url(#\" + id + \")\");\n    }\n}\n//# sourceMappingURL=svg.js.map","import { setTransform, setClip } from './svg';\nimport { sortDom, moveTo } from './dom';\nexport function drawChildren(context, children) {\n    children.forEach(function (child) {\n        child.draw(context);\n    });\n}\n/**\n * 更新元素，包括 group 和 shape\n * @param {IElement} element       SVG 元素\n * @param {ChangeType} changeType  更新类型\n */\nexport function refreshElement(element, changeType) {\n    // 对于还没有挂载到画布下的元素，canvas 可能为空\n    var canvas = element.get('canvas');\n    // 只有挂载到画布下，才对元素进行实际渲染\n    if (canvas && canvas.get('autoDraw')) {\n        var context = canvas.get('context');\n        var parent_1 = element.getParent();\n        var parentChildren = parent_1 ? parent_1.getChildren() : [canvas];\n        var el = element.get('el');\n        if (changeType === 'remove') {\n            var isClipShape = element.get('isClipShape');\n            // 对于 clip，不仅需要将 clipShape 对于的 SVG 元素删除，还需要将上层的 clipPath 元素也删除\n            if (isClipShape) {\n                var clipPathEl = el && el.parentNode;\n                var defsEl = clipPathEl && clipPathEl.parentNode;\n                if (clipPathEl && defsEl) {\n                    defsEl.removeChild(clipPathEl);\n                }\n            }\n            else if (el && el.parentNode) {\n                el.parentNode.removeChild(el);\n            }\n        }\n        else if (changeType === 'show') {\n            el.setAttribute('visibility', 'visible');\n        }\n        else if (changeType === 'hide') {\n            el.setAttribute('visibility', 'hidden');\n        }\n        else if (changeType === 'zIndex') {\n            moveTo(el, parentChildren.indexOf(element));\n        }\n        else if (changeType === 'sort') {\n            var children_1 = element.get('children');\n            if (children_1 && children_1.length) {\n                sortDom(element, function (a, b) {\n                    return children_1.indexOf(a) - children_1.indexOf(b) ? 1 : 0;\n                });\n            }\n        }\n        else if (changeType === 'clear') {\n            // el maybe null for group\n            if (el) {\n                el.innerHTML = '';\n            }\n        }\n        else if (changeType === 'matrix') {\n            setTransform(element);\n        }\n        else if (changeType === 'clip') {\n            setClip(element, context);\n        }\n        else if (changeType === 'attr') {\n            // 已在 afterAttrsChange 进行了处理，此处 do nothing\n        }\n        else if (changeType === 'add') {\n            element.draw(context);\n        }\n    }\n}\n//# sourceMappingURL=draw.js.map","import { __extends } from \"tslib\";\nimport { AbstractGroup } from '@antv/g-base';\nimport { each } from '@antv/util';\nimport * as Shape from './shape';\nimport { drawChildren, refreshElement } from './util/draw';\nimport { setClip, setTransform } from './util/svg';\nimport { SVG_ATTR_MAP } from './constant';\nimport { createSVGElement } from './util/dom';\nvar Group = /** @class */ (function (_super) {\n    __extends(Group, _super);\n    function Group() {\n        return _super !== null && _super.apply(this, arguments) || this;\n    }\n    // SVG 中分组对应实体标签 <g>\n    Group.prototype.isEntityGroup = function () {\n        return true;\n    };\n    Group.prototype.createDom = function () {\n        var element = createSVGElement('g');\n        this.set('el', element);\n        var parent = this.getParent();\n        if (parent) {\n            var parentNode = parent.get('el');\n            if (parentNode) {\n                parentNode.appendChild(element);\n            }\n            else {\n                // parentNode maybe null for group\n                parentNode = parent.createDom();\n                parent.set('el', parentNode);\n                parentNode.appendChild(element);\n            }\n        }\n        return element;\n    };\n    // 覆盖基类的 afterAttrsChange 方法\n    Group.prototype.afterAttrsChange = function (targetAttrs) {\n        _super.prototype.afterAttrsChange.call(this, targetAttrs);\n        var canvas = this.get('canvas');\n        // 只有挂载到画布下，才对元素进行实际渲染\n        if (canvas && canvas.get('autoDraw')) {\n            var context = canvas.get('context');\n            this.createPath(context, targetAttrs);\n        }\n    };\n    /**\n     * 一些方法调用会引起画布变化\n     * @param {ChangeType} changeType 改变的类型\n     */\n    Group.prototype.onCanvasChange = function (changeType) {\n        refreshElement(this, changeType);\n    };\n    Group.prototype.getShapeBase = function () {\n        return Shape;\n    };\n    Group.prototype.getGroupBase = function () {\n        return Group;\n    };\n    Group.prototype.draw = function (context) {\n        var children = this.getChildren();\n        var el = this.get('el');\n        if (this.get('destroyed')) {\n            if (el) {\n                el.parentNode.removeChild(el);\n            }\n        }\n        else {\n            if (!el) {\n                this.createDom();\n            }\n            setClip(this, context);\n            this.createPath(context);\n            if (children.length) {\n                drawChildren(context, children);\n            }\n        }\n    };\n    /**\n     * 绘制分组的路径\n     * @param {Defs} context 上下文\n     * @param {ShapeAttrs} targetAttrs 渲染的目标属性\n     */\n    Group.prototype.createPath = function (context, targetAttrs) {\n        var attrs = this.attr();\n        var el = this.get('el');\n        each(targetAttrs || attrs, function (value, attr) {\n            if (SVG_ATTR_MAP[attr]) {\n                el.setAttribute(SVG_ATTR_MAP[attr], value);\n            }\n        });\n        setTransform(this);\n    };\n    return Group;\n}(AbstractGroup));\nexport default Group;\n//# sourceMappingURL=group.js.map","import { __assign, __extends } from \"tslib\";\nimport { AbstractShape } from '@antv/g-base';\nimport { setShadow, setTransform, setClip } from '../util/svg';\nimport { createDom } from '../util/dom';\nimport { refreshElement } from '../util/draw';\nimport { SVG_ATTR_MAP } from '../constant';\nimport * as Shape from './index';\nimport Group from '../group';\nimport { getBBoxMethod } from '@antv/g-base';\nvar ShapeBase = /** @class */ (function (_super) {\n    __extends(ShapeBase, _super);\n    function ShapeBase() {\n        var _this = _super !== null && _super.apply(this, arguments) || this;\n        _this.type = 'svg';\n        _this.canFill = false;\n        _this.canStroke = false;\n        return _this;\n    }\n    ShapeBase.prototype.getDefaultAttrs = function () {\n        var attrs = _super.prototype.getDefaultAttrs.call(this);\n        // 设置默认值\n        return __assign(__assign({}, attrs), { lineWidth: 1, lineAppendWidth: 0, strokeOpacity: 1, fillOpacity: 1 });\n    };\n    // 覆盖基类的 afterAttrsChange 方法\n    ShapeBase.prototype.afterAttrsChange = function (targetAttrs) {\n        _super.prototype.afterAttrsChange.call(this, targetAttrs);\n        var canvas = this.get('canvas');\n        // 只有挂载到画布下，才对元素进行实际渲染\n        if (canvas && canvas.get('autoDraw')) {\n            var context = canvas.get('context');\n            this.draw(context, targetAttrs);\n        }\n    };\n    ShapeBase.prototype.getShapeBase = function () {\n        return Shape;\n    };\n    ShapeBase.prototype.getGroupBase = function () {\n        return Group;\n    };\n    /**\n     * 一些方法调用会引起画布变化\n     * @param {ChangeType} changeType 改变的类型\n     */\n    ShapeBase.prototype.onCanvasChange = function (changeType) {\n        refreshElement(this, changeType);\n    };\n    ShapeBase.prototype.calculateBBox = function () {\n        var el = this.get('el');\n        var bbox = null;\n        // 包围盒计算依赖于绘制，如果还没有生成对应的 Dom 元素，则包围盒的长宽均为 0\n        if (el) {\n            bbox = el.getBBox();\n        }\n        else {\n            var bboxMethod = getBBoxMethod(this.get('type'));\n            if (bboxMethod) {\n                bbox = bboxMethod(this);\n            }\n        }\n        if (bbox) {\n            var x = bbox.x, y = bbox.y, width = bbox.width, height = bbox.height;\n            var lineWidth = this.getHitLineWidth();\n            var halfWidth = lineWidth / 2;\n            var minX = x - halfWidth;\n            var minY = y - halfWidth;\n            var maxX = x + width + halfWidth;\n            var maxY = y + height + halfWidth;\n            return {\n                x: minX,\n                y: minY,\n                minX: minX,\n                minY: minY,\n                maxX: maxX,\n                maxY: maxY,\n                width: width + lineWidth,\n                height: height + lineWidth,\n            };\n        }\n        return {\n            x: 0,\n            y: 0,\n            minX: 0,\n            minY: 0,\n            maxX: 0,\n            maxY: 0,\n            width: 0,\n            height: 0,\n        };\n    };\n    ShapeBase.prototype.isFill = function () {\n        var _a = this.attr(), fill = _a.fill, fillStyle = _a.fillStyle;\n        return (fill || fillStyle || this.isClipShape()) && this.canFill;\n    };\n    ShapeBase.prototype.isStroke = function () {\n        var _a = this.attr(), stroke = _a.stroke, strokeStyle = _a.strokeStyle;\n        return (stroke || strokeStyle) && this.canStroke;\n    };\n    ShapeBase.prototype.draw = function (context, targetAttrs) {\n        var el = this.get('el');\n        if (this.get('destroyed')) {\n            if (el) {\n                el.parentNode.removeChild(el);\n            }\n        }\n        else {\n            if (!el) {\n                createDom(this);\n            }\n            setClip(this, context);\n            this.createPath(context, targetAttrs);\n            this.shadow(context, targetAttrs);\n            this.strokeAndFill(context, targetAttrs);\n            this.transform(targetAttrs);\n        }\n    };\n    /**\n     * @protected\n     * 绘制图形的路径\n     * @param {Defs} context 上下文\n     * @param {ShapeAttrs} targetAttrs 渲染的目标属性\n     */\n    ShapeBase.prototype.createPath = function (context, targetAttrs) { };\n    // stroke and fill\n    ShapeBase.prototype.strokeAndFill = function (context, targetAttrs) {\n        var attrs = targetAttrs || this.attr();\n        var fill = attrs.fill, fillStyle = attrs.fillStyle, stroke = attrs.stroke, strokeStyle = attrs.strokeStyle, fillOpacity = attrs.fillOpacity, strokeOpacity = attrs.strokeOpacity, lineWidth = attrs.lineWidth;\n        var el = this.get('el');\n        if (this.canFill) {\n            // 初次渲染和更新渲染的逻辑有所不同: 初次渲染值为空时，需要设置为 none，否则就会是黑色，而更新渲染则不需要\n            if (!targetAttrs) {\n                this._setColor(context, 'fill', fill || fillStyle);\n            }\n            else if ('fill' in attrs) {\n                this._setColor(context, 'fill', fill);\n            }\n            else if ('fillStyle' in attrs) {\n                // compatible with fillStyle\n                this._setColor(context, 'fill', fillStyle);\n            }\n            if (fillOpacity) {\n                el.setAttribute(SVG_ATTR_MAP['fillOpacity'], fillOpacity);\n            }\n        }\n        if (this.canStroke && lineWidth > 0) {\n            if (!targetAttrs) {\n                this._setColor(context, 'stroke', stroke || strokeStyle);\n            }\n            else if ('stroke' in attrs) {\n                this._setColor(context, 'stroke', stroke);\n            }\n            else if ('strokeStyle' in attrs) {\n                // compatible with strokeStyle\n                this._setColor(context, 'stroke', strokeStyle);\n            }\n            if (strokeOpacity) {\n                el.setAttribute(SVG_ATTR_MAP['strokeOpacity'], strokeOpacity);\n            }\n            if (lineWidth) {\n                el.setAttribute(SVG_ATTR_MAP['lineWidth'], lineWidth);\n            }\n        }\n    };\n    ShapeBase.prototype._setColor = function (context, attr, value) {\n        var el = this.get('el');\n        if (!value) {\n            // need to set `none` to avoid default value\n            el.setAttribute(SVG_ATTR_MAP[attr], 'none');\n            return;\n        }\n        value = value.trim();\n        if (/^[r,R,L,l]{1}[\\s]*\\(/.test(value)) {\n            var id = context.find('gradient', value);\n            if (!id) {\n                id = context.addGradient(value);\n            }\n            el.setAttribute(SVG_ATTR_MAP[attr], \"url(#\" + id + \")\");\n        }\n        else if (/^[p,P]{1}[\\s]*\\(/.test(value)) {\n            var id = context.find('pattern', value);\n            if (!id) {\n                id = context.addPattern(value);\n            }\n            el.setAttribute(SVG_ATTR_MAP[attr], \"url(#\" + id + \")\");\n        }\n        else {\n            el.setAttribute(SVG_ATTR_MAP[attr], value);\n        }\n    };\n    ShapeBase.prototype.shadow = function (context, targetAttrs) {\n        var attrs = this.attr();\n        var _a = targetAttrs || attrs, shadowOffsetX = _a.shadowOffsetX, shadowOffsetY = _a.shadowOffsetY, shadowBlur = _a.shadowBlur, shadowColor = _a.shadowColor;\n        if (shadowOffsetX || shadowOffsetY || shadowBlur || shadowColor) {\n            setShadow(this, context);\n        }\n    };\n    ShapeBase.prototype.transform = function (targetAttrs) {\n        var attrs = this.attr();\n        var matrix = (targetAttrs || attrs).matrix;\n        if (matrix) {\n            setTransform(this);\n        }\n    };\n    ShapeBase.prototype.isInShape = function (refX, refY) {\n        return this.isPointInPath(refX, refY);\n    };\n    ShapeBase.prototype.isPointInPath = function (refX, refY) {\n        var el = this.get('el');\n        var canvas = this.get('canvas');\n        var bbox = canvas.get('el').getBoundingClientRect();\n        var clientX = refX + bbox.left;\n        var clientY = refY + bbox.top;\n        var element = document.elementFromPoint(clientX, clientY);\n        if (element && element.isEqualNode(el)) {\n            return true;\n        }\n        return false;\n    };\n    /**\n     * 获取线拾取的宽度\n     * @returns {number} 线的拾取宽度\n     */\n    ShapeBase.prototype.getHitLineWidth = function () {\n        var _a = this.attrs, lineWidth = _a.lineWidth, lineAppendWidth = _a.lineAppendWidth;\n        if (this.isStroke()) {\n            return lineWidth + lineAppendWidth;\n        }\n        return 0;\n    };\n    return ShapeBase;\n}(AbstractShape));\nexport default ShapeBase;\n//# sourceMappingURL=base.js.map","/**\n * @fileoverview circle\n * @author dengfuping_develop@163.com\n */\nimport { __assign, __extends } from \"tslib\";\nimport { each } from '@antv/util';\nimport { SVG_ATTR_MAP } from '../constant';\nimport ShapeBase from './base';\nvar Circle = /** @class */ (function (_super) {\n    __extends(Circle, _super);\n    function Circle() {\n        var _this = _super !== null && _super.apply(this, arguments) || this;\n        _this.type = 'circle';\n        _this.canFill = true;\n        _this.canStroke = true;\n        return _this;\n    }\n    Circle.prototype.getDefaultAttrs = function () {\n        var attrs = _super.prototype.getDefaultAttrs.call(this);\n        return __assign(__assign({}, attrs), { x: 0, y: 0, r: 0 });\n    };\n    Circle.prototype.createPath = function (context, targetAttrs) {\n        var attrs = this.attr();\n        var el = this.get('el');\n        each(targetAttrs || attrs, function (value, attr) {\n            // 圆和椭圆的点坐标属性不是 x, y，而是 cx, cy\n            if (attr === 'x' || attr === 'y') {\n                el.setAttribute(\"c\" + attr, value);\n            }\n            else if (SVG_ATTR_MAP[attr]) {\n                el.setAttribute(SVG_ATTR_MAP[attr], value);\n            }\n        });\n    };\n    return Circle;\n}(ShapeBase));\nexport default Circle;\n//# sourceMappingURL=circle.js.map","/**\n * @fileoverview dom\n * @author dengfuping_develop@163.com\n */\nimport { __extends } from \"tslib\";\nimport { each } from '@antv/util';\nimport { SVG_ATTR_MAP } from '../constant';\nimport ShapeBase from './base';\nvar Dom = /** @class */ (function (_super) {\n    __extends(Dom, _super);\n    function Dom() {\n        var _this = _super !== null && _super.apply(this, arguments) || this;\n        _this.type = 'dom';\n        _this.canFill = false;\n        _this.canStroke = false;\n        return _this;\n    }\n    Dom.prototype.createPath = function (context, targetAttrs) {\n        var attrs = this.attr();\n        var el = this.get('el');\n        each(targetAttrs || attrs, function (value, attr) {\n            if (SVG_ATTR_MAP[attr]) {\n                el.setAttribute(SVG_ATTR_MAP[attr], value);\n            }\n        });\n        if (typeof attrs['html'] === 'function') {\n            var element = attrs['html'].call(this, attrs);\n            if (element instanceof Element || element instanceof HTMLDocument) {\n                var children = el.childNodes;\n                for (var i = children.length - 1; i >= 0; i--) {\n                    el.removeChild(children[i]);\n                }\n                el.appendChild(element); // append to el if it's an element\n            }\n            else {\n                el.innerHTML = element; // set innerHTML\n            }\n        }\n        else {\n            el.innerHTML = attrs['html']; // set innerHTML\n        }\n    };\n    return Dom;\n}(ShapeBase));\nexport default Dom;\n//# sourceMappingURL=dom.js.map","/**\n * @fileoverview ellipse\n * @author dengfuping_develop@163.com\n */\nimport { __assign, __extends } from \"tslib\";\nimport { each } from '@antv/util';\nimport { SVG_ATTR_MAP } from '../constant';\nimport ShapeBase from './base';\nvar Ellipse = /** @class */ (function (_super) {\n    __extends(Ellipse, _super);\n    function Ellipse() {\n        var _this = _super !== null && _super.apply(this, arguments) || this;\n        _this.type = 'ellipse';\n        _this.canFill = true;\n        _this.canStroke = true;\n        return _this;\n    }\n    Ellipse.prototype.getDefaultAttrs = function () {\n        var attrs = _super.prototype.getDefaultAttrs.call(this);\n        return __assign(__assign({}, attrs), { x: 0, y: 0, rx: 0, ry: 0 });\n    };\n    Ellipse.prototype.createPath = function (context, targetAttrs) {\n        var attrs = this.attr();\n        var el = this.get('el');\n        each(targetAttrs || attrs, function (value, attr) {\n            // 圆和椭圆的点坐标属性不是 x, y，而是 cx, cy\n            if (attr === 'x' || attr === 'y') {\n                el.setAttribute(\"c\" + attr, value);\n            }\n            else if (SVG_ATTR_MAP[attr]) {\n                el.setAttribute(SVG_ATTR_MAP[attr], value);\n            }\n        });\n    };\n    return Ellipse;\n}(ShapeBase));\nexport default Ellipse;\n//# sourceMappingURL=ellipse.js.map","/**\n * @fileoverview image\n * @author dengfuping_develop@163.com\n */\nimport { __assign, __extends } from \"tslib\";\nimport { each, isString } from '@antv/util';\nimport { SVG_ATTR_MAP } from '../constant';\nimport ShapeBase from './base';\nvar Image = /** @class */ (function (_super) {\n    __extends(Image, _super);\n    function Image() {\n        var _this = _super !== null && _super.apply(this, arguments) || this;\n        _this.type = 'image';\n        _this.canFill = false;\n        _this.canStroke = false;\n        return _this;\n    }\n    Image.prototype.getDefaultAttrs = function () {\n        var attrs = _super.prototype.getDefaultAttrs.call(this);\n        return __assign(__assign({}, attrs), { x: 0, y: 0, width: 0, height: 0 });\n    };\n    Image.prototype.createPath = function (context, targetAttrs) {\n        var _this = this;\n        var attrs = this.attr();\n        var el = this.get('el');\n        each(targetAttrs || attrs, function (value, attr) {\n            if (attr === 'img') {\n                _this._setImage(attrs.img);\n            }\n            else if (SVG_ATTR_MAP[attr]) {\n                el.setAttribute(SVG_ATTR_MAP[attr], value);\n            }\n        });\n    };\n    Image.prototype.setAttr = function (name, value) {\n        this.attrs[name] = value;\n        if (name === 'img') {\n            this._setImage(value);\n        }\n    };\n    Image.prototype._setImage = function (img) {\n        var attrs = this.attr();\n        var el = this.get('el');\n        if (isString(img)) {\n            el.setAttribute('href', img);\n        }\n        else if (img instanceof window.Image) {\n            if (!attrs.width) {\n                el.setAttribute('width', img.width);\n                this.attr('width', img.width);\n            }\n            if (!attrs.height) {\n                el.setAttribute('height', img.height);\n                this.attr('height', img.height);\n            }\n            el.setAttribute('href', img.src);\n        }\n        else if (img instanceof HTMLElement && isString(img.nodeName) && img.nodeName.toUpperCase() === 'CANVAS') {\n            // @ts-ignore\n            el.setAttribute('href', img.toDataURL());\n        }\n        else if (img instanceof ImageData) {\n            var canvas = document.createElement('canvas');\n            canvas.setAttribute('width', \"\" + img.width);\n            canvas.setAttribute('height', \"\" + img.height);\n            canvas.getContext('2d').putImageData(img, 0, 0);\n            if (!attrs.width) {\n                el.setAttribute('width', \"\" + img.width);\n                this.attr('width', img.width);\n            }\n            if (!attrs.height) {\n                el.setAttribute('height', \"\" + img.height);\n                this.attr('height', img.height);\n            }\n            el.setAttribute('href', canvas.toDataURL());\n        }\n    };\n    return Image;\n}(ShapeBase));\nexport default Image;\n//# sourceMappingURL=image.js.map","import { max, min } from '@antv/util';\n/**\n * 两点之间的距离\n * @param {number} x1 起始点 x\n * @param {number} y1 起始点 y\n * @param {number} x2 结束点 x\n * @param {number} y2 结束点 y\n * @return {number} 距离\n */\nexport function distance(x1, y1, x2, y2) {\n    var dx = x1 - x2;\n    var dy = y1 - y2;\n    return Math.sqrt(dx * dx + dy * dy);\n}\nexport function isNumberEqual(v1, v2) {\n    return Math.abs(v1 - v2) < 0.001;\n}\nexport function getBBoxByArray(xArr, yArr) {\n    var minX = min(xArr);\n    var minY = min(yArr);\n    var maxX = max(xArr);\n    var maxY = max(yArr);\n    return {\n        x: minX,\n        y: minY,\n        width: maxX - minX,\n        height: maxY - minY,\n    };\n}\nexport function getBBoxRange(x1, y1, x2, y2) {\n    return {\n        minX: min([x1, x2]),\n        maxX: max([x1, x2]),\n        minY: min([y1, y2]),\n        maxY: max([y1, y2]),\n    };\n}\nexport function piMod(angle) {\n    return (angle + Math.PI * 2) % (Math.PI * 2);\n}\n//# sourceMappingURL=util.js.map","import { distance, getBBoxByArray } from './util';\nimport * as vec2 from 'gl-matrix/vec2';\nexport default {\n    /**\n     * 计算线段的包围盒\n     * @param {number} x1 起始点 x\n     * @param {number} y1 起始点 y\n     * @param {number} x2 结束点 x\n     * @param {number} y2 结束点 y\n     * @return {object} 包围盒对象\n     */\n    box: function (x1, y1, x2, y2) {\n        return getBBoxByArray([x1, x2], [y1, y2]);\n    },\n    /**\n     * 线段的长度\n     * @param {number} x1 起始点 x\n     * @param {number} y1 起始点 y\n     * @param {number} x2 结束点 x\n     * @param {number} y2 结束点 y\n     * @return {number} 距离\n     */\n    length: function (x1, y1, x2, y2) {\n        return distance(x1, y1, x2, y2);\n    },\n    /**\n     * 根据比例获取点\n     * @param {number} x1 起始点 x\n     * @param {number} y1 起始点 y\n     * @param {number} x2 结束点 x\n     * @param {number} y2 结束点 y\n     * @param {number} t 指定比例\n     * @return {object} 包含 x, y 的点\n     */\n    pointAt: function (x1, y1, x2, y2, t) {\n        return {\n            x: (1 - t) * x1 + t * x2,\n            y: (1 - t) * y1 + t * y2,\n        };\n    },\n    /**\n     * 点到线段的距离\n     * @param {number} x1 起始点 x\n     * @param {number} y1 起始点 y\n     * @param {number} x2 结束点 x\n     * @param {number} y2 结束点 y\n     * @param {number} x  测试点 x\n     * @param {number} y  测试点 y\n     * @return {number} 距离\n     */\n    pointDistance: function (x1, y1, x2, y2, x, y) {\n        // 投影距离 x1, y1 的向量，假设 p, p1, p2 三个点，投影点为 a\n        // p1a = p1p.p1p2/|p1p2| * (p1p 的单位向量)\n        var cross = (x2 - x1) * (x - x1) + (y2 - y1) * (y - y1);\n        if (cross < 0) {\n            return distance(x1, y1, x, y);\n        }\n        var lengthSquare = (x2 - x1) * (x2 - x1) + (y2 - y1) * (y2 - y1);\n        if (cross > lengthSquare) {\n            return distance(x2, y2, x, y);\n        }\n        return this.pointToLine(x1, y1, x2, y2, x, y);\n    },\n    /**\n     * 点到直线的距离，而不是点到线段的距离\n     * @param {number} x1 起始点 x\n     * @param {number} y1 起始点 y\n     * @param {number} x2 结束点 x\n     * @param {number} y2 结束点 y\n     * @param {number} x  测试点 x\n     * @param {number} y  测试点 y\n     * @return {number} 距离\n     */\n    pointToLine: function (x1, y1, x2, y2, x, y) {\n        var d = [x2 - x1, y2 - y1];\n        // 如果端点相等，则判定点到点的距离\n        if (vec2.exactEquals(d, [0, 0])) {\n            return Math.sqrt((x - x1) * (x - x1) + (y - y1) * (y - y1));\n        }\n        var u = [-d[1], d[0]];\n        vec2.normalize(u, u);\n        var a = [x - x1, y - y1];\n        return Math.abs(vec2.dot(a, u));\n    },\n    /**\n     * 线段的角度\n     * @param {number} x1 起始点 x\n     * @param {number} y1 起始点 y\n     * @param {number} x2 结束点 x\n     * @param {number} y2 结束点 y\n     * @return {number} 导数\n     */\n    tangentAngle: function (x1, y1, x2, y2) {\n        return Math.atan2(y2 - y1, x2 - x1);\n    },\n};\n//# sourceMappingURL=line.js.map","import { pointAtSegments, angleAtSegments, distanceAtSegment, lengthOfSegment } from './segments';\nimport { getBBoxByArray } from './util';\nexport default {\n    /**\n     * 计算多折线的包围盒\n     * @param {array} points 点的集合 [x,y] 的形式\n     * @return {object} 包围盒\n     */\n    box: function (points) {\n        var xArr = [];\n        var yArr = [];\n        for (var i = 0; i < points.length; i++) {\n            var point = points[i];\n            xArr.push(point[0]);\n            yArr.push(point[1]);\n        }\n        return getBBoxByArray(xArr, yArr);\n    },\n    /**\n     * 计算多折线的长度\n     * @param {array} points 点的集合 [x,y] 的形式\n     * @return {object} 多条边的长度\n     */\n    length: function (points) {\n        return lengthOfSegment(points);\n    },\n    /**\n     * 根据比例获取多折线的点\n     * @param {array} points 点的集合 [x,y] 的形式\n     * @param {number} t 在多折线的长度上的比例\n     * @return {object} 根据比例值计算出来的点\n     */\n    pointAt: function (points, t) {\n        return pointAtSegments(points, t);\n    },\n    /**\n     * 指定点到多折线的距离\n     * @param {array} points 点的集合 [x,y] 的形式\n     * @param {number} x 指定点的 x\n     * @param {number} y 指定点的 y\n     * @return {number} 点到多折线的距离\n     */\n    pointDistance: function (points, x, y) {\n        return distanceAtSegment(points, x, y);\n    },\n    /**\n     * 根据比例获取多折线的切线角度\n     * @param {array} points 点的集合 [x,y] 的形式\n     * @param {number} t 在多折线的长度上的比例\n     * @return {object} 根据比例值计算出来的角度\n     */\n    tangentAngle: function (points, t) {\n        return angleAtSegments(points, t);\n    },\n};\n//# sourceMappingURL=polyline.js.map","import line from './line';\nimport { distance } from './util';\nfunction analyzePoints(points) {\n    // 计算每段的长度和总的长度\n    var totalLength = 0;\n    var segments = [];\n    for (var i = 0; i < points.length - 1; i++) {\n        var from = points[i];\n        var to = points[i + 1];\n        var length_1 = distance(from[0], from[1], to[0], to[1]);\n        var seg = {\n            from: from,\n            to: to,\n            length: length_1,\n        };\n        segments.push(seg);\n        totalLength += length_1;\n    }\n    return { segments: segments, totalLength: totalLength };\n}\nexport function lengthOfSegment(points) {\n    if (points.length < 2) {\n        return 0;\n    }\n    var totalLength = 0;\n    for (var i = 0; i < points.length - 1; i++) {\n        var from = points[i];\n        var to = points[i + 1];\n        totalLength += distance(from[0], from[1], to[0], to[1]);\n    }\n    return totalLength;\n}\n/**\n * 按照比例在数据片段中获取点\n * @param {array} points 点的集合\n * @param {number} t 百分比 0-1\n * @return {object} 点的坐标\n */\nexport function pointAtSegments(points, t) {\n    // 边界判断\n    if (t > 1 || t < 0 || points.length < 2) {\n        return null;\n    }\n    var _a = analyzePoints(points), segments = _a.segments, totalLength = _a.totalLength;\n    // 多个点有可能重合\n    if (totalLength === 0) {\n        return {\n            x: points[0][0],\n            y: points[0][1],\n        };\n    }\n    // 计算比例\n    var startRatio = 0;\n    var point = null;\n    for (var i = 0; i < segments.length; i++) {\n        var seg = segments[i];\n        var from = seg.from, to = seg.to;\n        var currentRatio = seg.length / totalLength;\n        if (t >= startRatio && t <= startRatio + currentRatio) {\n            var localRatio = (t - startRatio) / currentRatio;\n            point = line.pointAt(from[0], from[1], to[0], to[1], localRatio);\n            break;\n        }\n        startRatio += currentRatio;\n    }\n    return point;\n}\n/**\n * 按照比例在数据片段中获取切线的角度\n * @param {array} points 点的集合\n * @param {number} t 百分比 0-1\n */\nexport function angleAtSegments(points, t) {\n    // 边界判断\n    if (t > 1 || t < 0 || points.length < 2) {\n        return 0;\n    }\n    var _a = analyzePoints(points), segments = _a.segments, totalLength = _a.totalLength;\n    // 计算比例\n    var startRatio = 0;\n    var angle = 0;\n    for (var i = 0; i < segments.length; i++) {\n        var seg = segments[i];\n        var from = seg.from, to = seg.to;\n        var currentRatio = seg.length / totalLength;\n        if (t >= startRatio && t <= startRatio + currentRatio) {\n            angle = Math.atan2(to[1] - from[1], to[0] - from[0]);\n            break;\n        }\n        startRatio += currentRatio;\n    }\n    return angle;\n}\nexport function distanceAtSegment(points, x, y) {\n    var minDistance = Infinity;\n    for (var i = 0; i < points.length - 1; i++) {\n        var point = points[i];\n        var nextPoint = points[i + 1];\n        var distance_1 = line.pointDistance(point[0], point[1], nextPoint[0], nextPoint[1], x, y);\n        if (distance_1 < minDistance) {\n            minDistance = distance_1;\n        }\n    }\n    return minDistance;\n}\n//# sourceMappingURL=segments.js.map","import { __assign, __extends } from \"tslib\";\n/**\n * @fileoverview line\n * @author dengfuping_develop@163.com\n */\nimport { Line as LineUtil } from '@antv/g-math';\nimport { each, isObject } from '@antv/util';\nimport { SVG_ATTR_MAP } from '../constant';\nimport ShapeBase from './base';\nvar Line = /** @class */ (function (_super) {\n    __extends(Line, _super);\n    function Line() {\n        var _this = _super !== null && _super.apply(this, arguments) || this;\n        _this.type = 'line';\n        _this.canFill = false;\n        _this.canStroke = true;\n        return _this;\n    }\n    Line.prototype.getDefaultAttrs = function () {\n        var attrs = _super.prototype.getDefaultAttrs.call(this);\n        return __assign(__assign({}, attrs), { x1: 0, y1: 0, x2: 0, y2: 0, startArrow: false, endArrow: false });\n    };\n    Line.prototype.createPath = function (context, targetAttrs) {\n        var attrs = this.attr();\n        var el = this.get('el');\n        each(targetAttrs || attrs, function (value, attr) {\n            if (attr === 'startArrow' || attr === 'endArrow') {\n                if (value) {\n                    var id = isObject(value)\n                        ? context.addArrow(attrs, SVG_ATTR_MAP[attr])\n                        : context.getDefaultArrow(attrs, SVG_ATTR_MAP[attr]);\n                    el.setAttribute(SVG_ATTR_MAP[attr], \"url(#\" + id + \")\");\n                }\n                else {\n                    el.removeAttribute(SVG_ATTR_MAP[attr]);\n                }\n            }\n            else if (SVG_ATTR_MAP[attr]) {\n                el.setAttribute(SVG_ATTR_MAP[attr], value);\n            }\n        });\n    };\n    /**\n     * Use math calculation to get length of line\n     * @return {number} length\n     */\n    Line.prototype.getTotalLength = function () {\n        var _a = this.attr(), x1 = _a.x1, y1 = _a.y1, x2 = _a.x2, y2 = _a.y2;\n        return LineUtil.length(x1, y1, x2, y2);\n    };\n    /**\n     * Use math calculation to get point according to ratio as same sa Canvas version\n     * @param {number} ratio\n     * @return {Point} point\n     */\n    Line.prototype.getPoint = function (ratio) {\n        var _a = this.attr(), x1 = _a.x1, y1 = _a.y1, x2 = _a.x2, y2 = _a.y2;\n        return LineUtil.pointAt(x1, y1, x2, y2, ratio);\n    };\n    return Line;\n}(ShapeBase));\nexport default Line;\n//# sourceMappingURL=line.js.map","var Symbols = {\n    // 圆\n    circle: function (x, y, r) {\n        return [\n            ['M', x, y],\n            ['m', -r, 0],\n            ['a', r, r, 0, 1, 0, r * 2, 0],\n            ['a', r, r, 0, 1, 0, -r * 2, 0],\n        ];\n    },\n    // 正方形\n    square: function (x, y, r) {\n        return [['M', x - r, y - r], ['L', x + r, y - r], ['L', x + r, y + r], ['L', x - r, y + r], ['Z']];\n    },\n    // 菱形\n    diamond: function (x, y, r) {\n        return [['M', x - r, y], ['L', x, y - r], ['L', x + r, y], ['L', x, y + r], ['Z']];\n    },\n    // 三角形\n    triangle: function (x, y, r) {\n        var diffY = r * Math.sin((1 / 3) * Math.PI);\n        return [['M', x - r, y + diffY], ['L', x, y - diffY], ['L', x + r, y + diffY], ['z']];\n    },\n    // 倒三角形\n    triangleDown: function (x, y, r) {\n        var diffY = r * Math.sin((1 / 3) * Math.PI);\n        return [['M', x - r, y - diffY], ['L', x + r, y - diffY], ['L', x, y + diffY], ['Z']];\n    },\n};\nexport default {\n    get: function (type) {\n        return Symbols[type];\n    },\n    register: function (type, func) {\n        Symbols[type] = func;\n    },\n    remove: function (type) {\n        delete Symbols[type];\n    },\n    getAll: function () {\n        return Symbols;\n    },\n};\n//# sourceMappingURL=symbols.js.map","/**\n * @fileoverview marker\n * @author dengfuping_develop@163.com\n */\nimport { __extends } from \"tslib\";\nimport { isArray, isFunction } from '@antv/util';\nimport ShapeBase from '../base';\nimport symbolsFactory from './symbols';\nvar Marker = /** @class */ (function (_super) {\n    __extends(Marker, _super);\n    function Marker() {\n        var _this = _super !== null && _super.apply(this, arguments) || this;\n        _this.type = 'marker';\n        _this.canFill = true;\n        _this.canStroke = true;\n        return _this;\n    }\n    Marker.prototype.createPath = function (context) {\n        var el = this.get('el');\n        el.setAttribute('d', this._assembleMarker());\n    };\n    Marker.prototype._assembleMarker = function () {\n        var d = this._getPath();\n        if (isArray(d)) {\n            return d\n                .map(function (path) {\n                return path.join(' ');\n            })\n                .join('');\n        }\n        return d;\n    };\n    Marker.prototype._getPath = function () {\n        var attrs = this.attr();\n        var x = attrs.x, y = attrs.y;\n        // 兼容 r 和 radius 两种写法，推荐使用 r\n        var r = attrs.r || attrs.radius;\n        var symbol = attrs.symbol || 'circle';\n        var method;\n        if (isFunction(symbol)) {\n            method = symbol;\n        }\n        else {\n            method = symbolsFactory.get(symbol);\n        }\n        if (!method) {\n            console.warn(method + \" symbol is not exist.\");\n            return null;\n        }\n        return method(x, y, r);\n    };\n    // 作为其静态属性\n    Marker.symbolsFactory = symbolsFactory;\n    return Marker;\n}(ShapeBase));\nexport default Marker;\n//# sourceMappingURL=index.js.map","import { __assign, __extends } from \"tslib\";\nimport { each, isArray, isObject } from '@antv/util';\nimport { SVG_ATTR_MAP } from '../constant';\nimport ShapeBase from './base';\nvar Path = /** @class */ (function (_super) {\n    __extends(Path, _super);\n    function Path() {\n        var _this = _super !== null && _super.apply(this, arguments) || this;\n        _this.type = 'path';\n        _this.canFill = true;\n        _this.canStroke = true;\n        return _this;\n    }\n    Path.prototype.getDefaultAttrs = function () {\n        var attrs = _super.prototype.getDefaultAttrs.call(this);\n        return __assign(__assign({}, attrs), { startArrow: false, endArrow: false });\n    };\n    Path.prototype.createPath = function (context, targetAttrs) {\n        var _this = this;\n        var attrs = this.attr();\n        var el = this.get('el');\n        each(targetAttrs || attrs, function (value, attr) {\n            if (attr === 'path' && isArray(value)) {\n                el.setAttribute('d', _this._formatPath(value));\n            }\n            else if (attr === 'startArrow' || attr === 'endArrow') {\n                if (value) {\n                    var id = isObject(value)\n                        ? context.addArrow(attrs, SVG_ATTR_MAP[attr])\n                        : context.getDefaultArrow(attrs, SVG_ATTR_MAP[attr]);\n                    el.setAttribute(SVG_ATTR_MAP[attr], \"url(#\" + id + \")\");\n                }\n                else {\n                    el.removeAttribute(SVG_ATTR_MAP[attr]);\n                }\n            }\n            else if (SVG_ATTR_MAP[attr]) {\n                el.setAttribute(SVG_ATTR_MAP[attr], value);\n            }\n        });\n    };\n    Path.prototype._formatPath = function (value) {\n        var newValue = value\n            .map(function (path) {\n            return path.join(' ');\n        })\n            .join('');\n        if (~newValue.indexOf('NaN')) {\n            return '';\n        }\n        return newValue;\n    };\n    /**\n     * Get total length of path\n     * 尽管通过浏览器的 SVGPathElement.getTotalLength() 接口获取的 path 长度，\n     * 与 Canvas 版本通过数学计算的方式得到的长度有一些细微差异，但最大误差在个位数像素，精度上可以能接受\n     * @return {number} length\n     */\n    Path.prototype.getTotalLength = function () {\n        var el = this.get('el');\n        return el ? el.getTotalLength() : null;\n    };\n    /**\n     * Get point according to ratio\n     * @param {number} ratio\n     * @return {Point} point\n     */\n    Path.prototype.getPoint = function (ratio) {\n        var el = this.get('el');\n        var totalLength = this.getTotalLength();\n        // @see https://github.com/antvis/g/issues/634\n        if (totalLength === 0) {\n            return null;\n        }\n        var point = el ? el.getPointAtLength(ratio * totalLength) : null;\n        return point\n            ? {\n                x: point.x,\n                y: point.y,\n            }\n            : null;\n    };\n    return Path;\n}(ShapeBase));\nexport default Path;\n//# sourceMappingURL=path.js.map","import { __extends } from \"tslib\";\n/**\n * @fileoverview polygon\n * @author dengfuping_develop@163.com\n */\nimport { each, isArray } from '@antv/util';\nimport { SVG_ATTR_MAP } from '../constant';\nimport ShapeBase from './base';\nvar Polygon = /** @class */ (function (_super) {\n    __extends(Polygon, _super);\n    function Polygon() {\n        var _this = _super !== null && _super.apply(this, arguments) || this;\n        _this.type = 'polygon';\n        _this.canFill = true;\n        _this.canStroke = true;\n        return _this;\n    }\n    Polygon.prototype.createPath = function (context, targetAttrs) {\n        var attrs = this.attr();\n        var el = this.get('el');\n        each(targetAttrs || attrs, function (value, attr) {\n            if (attr === 'points' && isArray(value) && value.length >= 2) {\n                el.setAttribute('points', value.map(function (point) { return point[0] + \",\" + point[1]; }).join(' '));\n            }\n            else if (SVG_ATTR_MAP[attr]) {\n                el.setAttribute(SVG_ATTR_MAP[attr], value);\n            }\n        });\n    };\n    return Polygon;\n}(ShapeBase));\nexport default Polygon;\n//# sourceMappingURL=polygon.js.map","import { __assign, __extends } from \"tslib\";\nimport { Polyline as PolylineUtil } from '@antv/g-math';\nimport { Line as LineUtil } from '@antv/g-math';\nimport { each, isArray, isNil } from '@antv/util';\nimport { SVG_ATTR_MAP } from '../constant';\nimport ShapeBase from './base';\nvar Polyline = /** @class */ (function (_super) {\n    __extends(Polyline, _super);\n    function Polyline() {\n        var _this = _super !== null && _super.apply(this, arguments) || this;\n        _this.type = 'polyline';\n        _this.canFill = true;\n        _this.canStroke = true;\n        return _this;\n    }\n    Polyline.prototype.getDefaultAttrs = function () {\n        var attrs = _super.prototype.getDefaultAttrs.call(this);\n        return __assign(__assign({}, attrs), { startArrow: false, endArrow: false });\n    };\n    // 更新属性时，检测是否更改了 points\n    Polyline.prototype.onAttrChange = function (name, value, originValue) {\n        _super.prototype.onAttrChange.call(this, name, value, originValue);\n        if (['points'].indexOf(name) !== -1) {\n            this._resetCache();\n        }\n    };\n    Polyline.prototype._resetCache = function () {\n        this.set('totalLength', null);\n        this.set('tCache', null);\n    };\n    Polyline.prototype.createPath = function (context, targetAttrs) {\n        var attrs = this.attr();\n        var el = this.get('el');\n        each(targetAttrs || attrs, function (value, attr) {\n            if (attr === 'points' && isArray(value) && value.length >= 2) {\n                el.setAttribute('points', value.map(function (point) { return point[0] + \",\" + point[1]; }).join(' '));\n            }\n            else if (SVG_ATTR_MAP[attr]) {\n                el.setAttribute(SVG_ATTR_MAP[attr], value);\n            }\n        });\n    };\n    /**\n     * Get length of polyline\n     * @return {number} length\n     */\n    Polyline.prototype.getTotalLength = function () {\n        var points = this.attr().points;\n        // get totalLength from cache\n        var totalLength = this.get('totalLength');\n        if (!isNil(totalLength)) {\n            return totalLength;\n        }\n        this.set('totalLength', PolylineUtil.length(points));\n        return this.get('totalLength');\n    };\n    /**\n     * Get point according to ratio\n     * @param {number} ratio\n     * @return {Point} point\n     */\n    Polyline.prototype.getPoint = function (ratio) {\n        var points = this.attr().points;\n        // get tCache from cache\n        var tCache = this.get('tCache');\n        if (!tCache) {\n            this._setTcache();\n            tCache = this.get('tCache');\n        }\n        var subt;\n        var index;\n        each(tCache, function (v, i) {\n            if (ratio >= v[0] && ratio <= v[1]) {\n                subt = (ratio - v[0]) / (v[1] - v[0]);\n                index = i;\n            }\n        });\n        return LineUtil.pointAt(points[index][0], points[index][1], points[index + 1][0], points[index + 1][1], subt);\n    };\n    Polyline.prototype._setTcache = function () {\n        var points = this.attr().points;\n        if (!points || points.length === 0) {\n            return;\n        }\n        var totalLength = this.getTotalLength();\n        if (totalLength <= 0) {\n            return;\n        }\n        var tempLength = 0;\n        var tCache = [];\n        var segmentT;\n        var segmentL;\n        each(points, function (p, i) {\n            if (points[i + 1]) {\n                segmentT = [];\n                segmentT[0] = tempLength / totalLength;\n                segmentL = LineUtil.length(p[0], p[1], points[i + 1][0], points[i + 1][1]);\n                tempLength += segmentL;\n                segmentT[1] = tempLength / totalLength;\n                tCache.push(segmentT);\n            }\n        });\n        this.set('tCache', tCache);\n    };\n    /**\n     * Get start tangent vector\n     * @return {Array}\n     */\n    Polyline.prototype.getStartTangent = function () {\n        var points = this.attr().points;\n        var result = [];\n        result.push([points[1][0], points[1][1]]);\n        result.push([points[0][0], points[0][1]]);\n        return result;\n    };\n    /**\n     * Get end tangent vector\n     * @return {Array}\n     */\n    Polyline.prototype.getEndTangent = function () {\n        var points = this.attr().points;\n        var l = points.length - 1;\n        var result = [];\n        result.push([points[l - 1][0], points[l - 1][1]]);\n        result.push([points[l][0], points[l][1]]);\n        return result;\n    };\n    return Polyline;\n}(ShapeBase));\nexport default Polyline;\n//# sourceMappingURL=polyline.js.map","// isFinite,\nvar isNil = function (value) {\n    /**\n     * isNil(null) => true\n     * isNil() => true\n     */\n    return value === null || value === undefined;\n};\nexport default isNil;\n//# sourceMappingURL=is-nil.js.map","/**\n * @fileoverview rect\n * @author dengfuping_develop@163.com\n */\nimport { __assign, __extends } from \"tslib\";\nimport { each, isArray } from '@antv/util';\nimport ShapeBase from './base';\nimport { SVG_ATTR_MAP } from '../constant';\nimport { parseRadius } from '../util/format';\nvar Rect = /** @class */ (function (_super) {\n    __extends(Rect, _super);\n    function Rect() {\n        var _this = _super !== null && _super.apply(this, arguments) || this;\n        _this.type = 'rect';\n        _this.canFill = true;\n        _this.canStroke = true;\n        return _this;\n    }\n    Rect.prototype.getDefaultAttrs = function () {\n        var attrs = _super.prototype.getDefaultAttrs.call(this);\n        return __assign(__assign({}, attrs), { x: 0, y: 0, width: 0, height: 0, radius: 0 });\n    };\n    Rect.prototype.createPath = function (context, targetAttrs) {\n        var _this = this;\n        var attrs = this.attr();\n        var el = this.get('el');\n        // 加上状态量，用来标记 path 是否已组装\n        var completed = false;\n        // 和组装 path 相关的绘图属性\n        var pathRelatedAttrs = ['x', 'y', 'width', 'height', 'radius'];\n        each(targetAttrs || attrs, function (value, attr) {\n            if (pathRelatedAttrs.indexOf(attr) !== -1 && !completed) {\n                el.setAttribute('d', _this._assembleRect(attrs));\n                completed = true;\n            }\n            else if (pathRelatedAttrs.indexOf(attr) === -1 && SVG_ATTR_MAP[attr]) {\n                el.setAttribute(SVG_ATTR_MAP[attr], value);\n            }\n        });\n    };\n    Rect.prototype._assembleRect = function (attrs) {\n        var x = attrs.x;\n        var y = attrs.y;\n        var w = attrs.width;\n        var h = attrs.height;\n        var radius = attrs.radius;\n        if (!radius) {\n            return \"M \" + x + \",\" + y + \" l \" + w + \",0 l 0,\" + h + \" l\" + -w + \" 0 z\";\n        }\n        var r = parseRadius(radius);\n        if (isArray(radius)) {\n            if (radius.length === 1) {\n                r.r1 = r.r2 = r.r3 = r.r4 = radius[0];\n            }\n            else if (radius.length === 2) {\n                r.r1 = r.r3 = radius[0];\n                r.r2 = r.r4 = radius[1];\n            }\n            else if (radius.length === 3) {\n                r.r1 = radius[0];\n                r.r2 = r.r4 = radius[1];\n                r.r3 = radius[2];\n            }\n            else {\n                r.r1 = radius[0];\n                r.r2 = radius[1];\n                r.r3 = radius[2];\n                r.r4 = radius[3];\n            }\n        }\n        else {\n            r.r1 = r.r2 = r.r3 = r.r4 = radius;\n        }\n        var d = [\n            [\"M \" + (x + r.r1) + \",\" + y],\n            [\"l \" + (w - r.r1 - r.r2) + \",0\"],\n            [\"a \" + r.r2 + \",\" + r.r2 + \",0,0,1,\" + r.r2 + \",\" + r.r2],\n            [\"l 0,\" + (h - r.r2 - r.r3)],\n            [\"a \" + r.r3 + \",\" + r.r3 + \",0,0,1,\" + -r.r3 + \",\" + r.r3],\n            [\"l \" + (r.r3 + r.r4 - w) + \",0\"],\n            [\"a \" + r.r4 + \",\" + r.r4 + \",0,0,1,\" + -r.r4 + \",\" + -r.r4],\n            [\"l 0,\" + (r.r4 + r.r1 - h)],\n            [\"a \" + r.r1 + \",\" + r.r1 + \",0,0,1,\" + r.r1 + \",\" + -r.r1],\n            ['z'],\n        ];\n        return d.join(' ');\n    };\n    return Rect;\n}(ShapeBase));\nexport default Rect;\n//# sourceMappingURL=rect.js.map","import { each, isArray, isString } from '@antv/util';\nvar regexTags = /[MLHVQTCSAZ]([^MLHVQTCSAZ]*)/gi;\nvar regexDot = /[^\\s,]+/gi;\nexport function parseRadius(radius) {\n    var r1 = 0;\n    var r2 = 0;\n    var r3 = 0;\n    var r4 = 0;\n    if (isArray(radius)) {\n        if (radius.length === 1) {\n            r1 = r2 = r3 = r4 = radius[0];\n        }\n        else if (radius.length === 2) {\n            r1 = r3 = radius[0];\n            r2 = r4 = radius[1];\n        }\n        else if (radius.length === 3) {\n            r1 = radius[0];\n            r2 = r4 = radius[1];\n            r3 = radius[2];\n        }\n        else {\n            r1 = radius[0];\n            r2 = radius[1];\n            r3 = radius[2];\n            r4 = radius[3];\n        }\n    }\n    else {\n        r1 = r2 = r3 = r4 = radius;\n    }\n    return {\n        r1: r1,\n        r2: r2,\n        r3: r3,\n        r4: r4,\n    };\n}\nexport function parsePath(path) {\n    path = path || [];\n    if (isArray(path)) {\n        return path;\n    }\n    if (isString(path)) {\n        path = path.match(regexTags);\n        each(path, function (item, index) {\n            item = item.match(regexDot);\n            if (item[0].length > 1) {\n                var tag = item[0].charAt(0);\n                item.splice(1, 0, item[0].substr(1));\n                item[0] = tag;\n            }\n            each(item, function (sub, i) {\n                if (!isNaN(sub)) {\n                    item[i] = +sub;\n                }\n            });\n            path[index] = item;\n        });\n        return path;\n    }\n}\n//# sourceMappingURL=format.js.map","/**\n * @fileoverview text\n * @author dengfuping_develop@163.com\n */\nimport { __assign, __extends } from \"tslib\";\nimport { each } from '@antv/util';\nimport { detect } from 'detect-browser';\nimport { setTransform } from '../util/svg';\nimport { SVG_ATTR_MAP } from '../constant';\nimport ShapeBase from './base';\nvar LETTER_SPACING = 0.3;\nvar BASELINE_MAP = {\n    top: 'before-edge',\n    middle: 'central',\n    bottom: 'after-edge',\n    alphabetic: 'baseline',\n    hanging: 'hanging',\n};\n// for FireFox\nvar BASELINE_MAP_FOR_FIREFOX = {\n    top: 'text-before-edge',\n    middle: 'central',\n    bottom: 'text-after-edge',\n    alphabetic: 'alphabetic',\n    hanging: 'hanging',\n};\nvar ANCHOR_MAP = {\n    left: 'left',\n    start: 'left',\n    center: 'middle',\n    right: 'end',\n    end: 'end',\n};\nvar Text = /** @class */ (function (_super) {\n    __extends(Text, _super);\n    function Text() {\n        var _this = _super !== null && _super.apply(this, arguments) || this;\n        _this.type = 'text';\n        _this.canFill = true;\n        _this.canStroke = true;\n        return _this;\n    }\n    Text.prototype.getDefaultAttrs = function () {\n        var attrs = _super.prototype.getDefaultAttrs.call(this);\n        return __assign(__assign({}, attrs), { x: 0, y: 0, text: null, fontSize: 12, fontFamily: 'sans-serif', fontStyle: 'normal', fontWeight: 'normal', fontVariant: 'normal', textAlign: 'start', textBaseline: 'bottom' });\n    };\n    Text.prototype.createPath = function (context, targetAttrs) {\n        var _this = this;\n        var attrs = this.attr();\n        var el = this.get('el');\n        this._setFont();\n        each(targetAttrs || attrs, function (value, attr) {\n            if (attr === 'text') {\n                _this._setText(\"\" + value);\n            }\n            else if (attr === 'matrix' && value) {\n                setTransform(_this);\n            }\n            else if (SVG_ATTR_MAP[attr]) {\n                el.setAttribute(SVG_ATTR_MAP[attr], value);\n            }\n        });\n        el.setAttribute('paint-order', 'stroke');\n        el.setAttribute('style', 'stroke-linecap:butt; stroke-linejoin:miter;');\n    };\n    Text.prototype._setFont = function () {\n        var el = this.get('el');\n        var _a = this.attr(), textBaseline = _a.textBaseline, textAlign = _a.textAlign;\n        var browser = detect();\n        if (browser && browser.name === 'firefox') {\n            // compatible with FireFox browser, ref: https://github.com/antvis/g/issues/119\n            el.setAttribute('dominant-baseline', BASELINE_MAP_FOR_FIREFOX[textBaseline] || 'alphabetic');\n        }\n        else {\n            el.setAttribute('alignment-baseline', BASELINE_MAP[textBaseline] || 'baseline');\n        }\n        el.setAttribute('text-anchor', ANCHOR_MAP[textAlign] || 'left');\n    };\n    Text.prototype._setText = function (text) {\n        var el = this.get('el');\n        var _a = this.attr(), x = _a.x, _b = _a.textBaseline, baseline = _b === void 0 ? 'bottom' : _b;\n        if (!text) {\n            el.innerHTML = '';\n        }\n        else if (~text.indexOf('\\n')) {\n            var textArr = text.split('\\n');\n            var textLen_1 = textArr.length - 1;\n            var arr_1 = '';\n            each(textArr, function (segment, i) {\n                if (i === 0) {\n                    if (baseline === 'alphabetic') {\n                        arr_1 += \"<tspan x=\\\"\" + x + \"\\\" dy=\\\"\" + -textLen_1 + \"em\\\">\" + segment + \"</tspan>\";\n                    }\n                    else if (baseline === 'top') {\n                        arr_1 += \"<tspan x=\\\"\" + x + \"\\\" dy=\\\"0.9em\\\">\" + segment + \"</tspan>\";\n                    }\n                    else if (baseline === 'middle') {\n                        arr_1 += \"<tspan x=\\\"\" + x + \"\\\" dy=\\\"\" + -(textLen_1 - 1) / 2 + \"em\\\">\" + segment + \"</tspan>\";\n                    }\n                    else if (baseline === 'bottom') {\n                        arr_1 += \"<tspan x=\\\"\" + x + \"\\\" dy=\\\"-\" + (textLen_1 + LETTER_SPACING) + \"em\\\">\" + segment + \"</tspan>\";\n                    }\n                    else if (baseline === 'hanging') {\n                        arr_1 += \"<tspan x=\\\"\" + x + \"\\\" dy=\\\"\" + (-(textLen_1 - 1) - LETTER_SPACING) + \"em\\\">\" + segment + \"</tspan>\";\n                    }\n                }\n                else {\n                    arr_1 += \"<tspan x=\\\"\" + x + \"\\\" dy=\\\"1em\\\">\" + segment + \"</tspan>\";\n                }\n            });\n            el.innerHTML = arr_1;\n        }\n        else {\n            el.innerHTML = text;\n        }\n    };\n    return Text;\n}(ShapeBase));\nexport default Text;\n//# sourceMappingURL=text.js.map","/**\n * @fileoverview gradient\n * @author dengfuping_develop@163.com\n */\nimport { each, mod, toRadian, uniqueId } from '@antv/util';\nimport { createSVGElement } from '../util/dom';\nvar regexLG = /^l\\s*\\(\\s*([\\d.]+)\\s*\\)\\s*(.*)/i;\nvar regexRG = /^r\\s*\\(\\s*([\\d.]+)\\s*,\\s*([\\d.]+)\\s*,\\s*([\\d.]+)\\s*\\)\\s*(.*)/i;\nvar regexColorStop = /[\\d.]+:(#[^\\s]+|[^)]+\\))/gi;\nfunction addStop(steps) {\n    var arr = steps.match(regexColorStop);\n    if (!arr) {\n        return '';\n    }\n    var stops = '';\n    arr.sort(function (a, b) {\n        a = a.split(':');\n        b = b.split(':');\n        return Number(a[0]) - Number(b[0]);\n    });\n    each(arr, function (item) {\n        item = item.split(':');\n        stops += \"<stop offset=\\\"\" + item[0] + \"\\\" stop-color=\\\"\" + item[1] + \"\\\"></stop>\";\n    });\n    return stops;\n}\nfunction parseLineGradient(color, el) {\n    var arr = regexLG.exec(color);\n    var angle = mod(toRadian(parseFloat(arr[1])), Math.PI * 2);\n    var steps = arr[2];\n    var start;\n    var end;\n    if (angle >= 0 && angle < 0.5 * Math.PI) {\n        start = {\n            x: 0,\n            y: 0,\n        };\n        end = {\n            x: 1,\n            y: 1,\n        };\n    }\n    else if (0.5 * Math.PI <= angle && angle < Math.PI) {\n        start = {\n            x: 1,\n            y: 0,\n        };\n        end = {\n            x: 0,\n            y: 1,\n        };\n    }\n    else if (Math.PI <= angle && angle < 1.5 * Math.PI) {\n        start = {\n            x: 1,\n            y: 1,\n        };\n        end = {\n            x: 0,\n            y: 0,\n        };\n    }\n    else {\n        start = {\n            x: 0,\n            y: 1,\n        };\n        end = {\n            x: 1,\n            y: 0,\n        };\n    }\n    var tanTheta = Math.tan(angle);\n    var tanTheta2 = tanTheta * tanTheta;\n    var x = (end.x - start.x + tanTheta * (end.y - start.y)) / (tanTheta2 + 1) + start.x;\n    var y = (tanTheta * (end.x - start.x + tanTheta * (end.y - start.y))) / (tanTheta2 + 1) + start.y;\n    el.setAttribute('x1', start.x);\n    el.setAttribute('y1', start.y);\n    el.setAttribute('x2', x);\n    el.setAttribute('y2', y);\n    el.innerHTML = addStop(steps);\n}\nfunction parseRadialGradient(color, self) {\n    var arr = regexRG.exec(color);\n    var cx = parseFloat(arr[1]);\n    var cy = parseFloat(arr[2]);\n    var r = parseFloat(arr[3]);\n    var steps = arr[4];\n    self.setAttribute('cx', cx);\n    self.setAttribute('cy', cy);\n    self.setAttribute('r', r);\n    self.innerHTML = addStop(steps);\n}\nvar Gradient = /** @class */ (function () {\n    function Gradient(cfg) {\n        this.cfg = {};\n        var el = null;\n        var id = uniqueId('gradient_');\n        if (cfg.toLowerCase()[0] === 'l') {\n            el = createSVGElement('linearGradient');\n            parseLineGradient(cfg, el);\n        }\n        else {\n            el = createSVGElement('radialGradient');\n            parseRadialGradient(cfg, el);\n        }\n        el.setAttribute('id', id);\n        this.el = el;\n        this.id = id;\n        this.cfg = cfg;\n        return this;\n    }\n    Gradient.prototype.match = function (type, attr) {\n        return this.cfg === attr;\n    };\n    return Gradient;\n}());\nexport default Gradient;\n//# sourceMappingURL=gradient.js.map","/**\n * @fileoverview shadow\n * @author dengfuping_develop@163.com\n */\nimport { each, uniqueId } from '@antv/util';\nimport { createSVGElement } from '../util/dom';\nvar ATTR_MAP = {\n    shadowColor: 'color',\n    shadowOpacity: 'opacity',\n    shadowBlur: 'blur',\n    shadowOffsetX: 'dx',\n    shadowOffsetY: 'dy',\n};\nvar SHADOW_DIMENSION = {\n    x: '-40%',\n    y: '-40%',\n    width: '200%',\n    height: '200%',\n};\nvar Shadow = /** @class */ (function () {\n    function Shadow(cfg) {\n        this.type = 'filter';\n        this.cfg = {};\n        this.type = 'filter';\n        var el = createSVGElement('filter');\n        // expand the filter region to fill in shadows\n        each(SHADOW_DIMENSION, function (v, k) {\n            el.setAttribute(k, v);\n        });\n        this.el = el;\n        this.id = uniqueId('filter_');\n        this.el.id = this.id;\n        this.cfg = cfg;\n        this._parseShadow(cfg, el);\n        return this;\n    }\n    Shadow.prototype.match = function (type, cfg) {\n        if (this.type !== type) {\n            return false;\n        }\n        var flag = true;\n        var config = this.cfg;\n        each(Object.keys(config), function (attr) {\n            if (config[attr] !== cfg[attr]) {\n                flag = false;\n                return false;\n            }\n        });\n        return flag;\n    };\n    Shadow.prototype.update = function (name, value) {\n        var config = this.cfg;\n        config[ATTR_MAP[name]] = value;\n        this._parseShadow(config, this.el);\n        return this;\n    };\n    Shadow.prototype._parseShadow = function (config, el) {\n        var child = \"<feDropShadow\\n      dx=\\\"\" + (config.dx || 0) + \"\\\"\\n      dy=\\\"\" + (config.dy || 0) + \"\\\"\\n      stdDeviation=\\\"\" + (config.blur ? config.blur / 10 : 0) + \"\\\"\\n      flood-color=\\\"\" + (config.color ? config.color : '#000') + \"\\\"\\n      flood-opacity=\\\"\" + (config.opacity ? config.opacity : 1) + \"\\\"\\n      />\";\n        el.innerHTML = child;\n    };\n    return Shadow;\n}());\nexport default Shadow;\n//# sourceMappingURL=shadow.js.map","/**\n * @fileoverview arrow\n * @author dengfuping_develop@163.com\n */\nimport { isArray, uniqueId } from '@antv/util';\nimport { createSVGElement } from '../util/dom';\nvar Arrow = /** @class */ (function () {\n    function Arrow(attrs, type) {\n        this.cfg = {};\n        var el = createSVGElement('marker');\n        var id = uniqueId('marker_');\n        el.setAttribute('id', id);\n        var shape = createSVGElement('path');\n        shape.setAttribute('stroke', attrs.stroke || 'none');\n        shape.setAttribute('fill', attrs.fill || 'none');\n        el.appendChild(shape);\n        el.setAttribute('overflow', 'visible');\n        el.setAttribute('orient', 'auto-start-reverse');\n        this.el = el;\n        this.child = shape;\n        this.id = id;\n        var cfg = attrs[type === 'marker-start' ? 'startArrow' : 'endArrow'];\n        this.stroke = attrs.stroke || '#000';\n        if (cfg === true) {\n            this._setDefaultPath(type, shape);\n        }\n        else {\n            this.cfg = cfg; // when arrow config exists\n            this._setMarker(attrs.lineWidth, shape);\n        }\n        return this;\n    }\n    Arrow.prototype.match = function () {\n        return false;\n    };\n    Arrow.prototype._setDefaultPath = function (type, el) {\n        var parent = this.el;\n        // 默认箭头的边长为 10，夹角为 60 度\n        el.setAttribute('d', \"M0,0 L\" + 10 * Math.cos(Math.PI / 6) + \",5 L0,10\");\n        parent.setAttribute('refX', \"\" + 10 * Math.cos(Math.PI / 6));\n        parent.setAttribute('refY', \"\" + 5);\n    };\n    Arrow.prototype._setMarker = function (r, el) {\n        var parent = this.el;\n        var path = this.cfg.path;\n        var d = this.cfg.d;\n        if (isArray(path)) {\n            path = path\n                .map(function (segment) {\n                return segment.join(' ');\n            })\n                .join('');\n        }\n        el.setAttribute('d', path);\n        parent.appendChild(el);\n        if (d) {\n            parent.setAttribute('refX', \"\" + d / r);\n        }\n    };\n    Arrow.prototype.update = function (fill) {\n        var child = this.child;\n        if (child.attr) {\n            child.attr('fill', fill);\n        }\n        else {\n            child.setAttribute('fill', fill);\n        }\n    };\n    return Arrow;\n}());\nexport default Arrow;\n//# sourceMappingURL=arrow.js.map","/**\n * @fileoverview clip\n * @author dengfuping_develop@163.com\n */\nimport { uniqueId } from '@antv/util';\nimport { createSVGElement } from '../util/dom';\nvar Clip = /** @class */ (function () {\n    function Clip(cfg) {\n        this.type = 'clip';\n        this.cfg = {};\n        var el = createSVGElement('clipPath');\n        this.el = el;\n        this.id = uniqueId('clip_');\n        el.id = this.id;\n        var shapeEl = cfg.cfg.el;\n        el.appendChild(shapeEl);\n        this.cfg = cfg;\n        return this;\n    }\n    Clip.prototype.match = function () {\n        return false;\n    };\n    Clip.prototype.remove = function () {\n        var el = this.el;\n        el.parentNode.removeChild(el);\n    };\n    return Clip;\n}());\nexport default Clip;\n//# sourceMappingURL=clip.js.map","/**\n * @fileoverview pattern\n * @author dengfuping_develop@163.com\n */\nimport { uniqueId } from '@antv/util';\nimport { createSVGElement } from '../util/dom';\nvar regexPR = /^p\\s*\\(\\s*([axyn])\\s*\\)\\s*(.*)/i;\nvar Pattern = /** @class */ (function () {\n    function Pattern(cfg) {\n        this.cfg = {};\n        var el = createSVGElement('pattern');\n        el.setAttribute('patternUnits', 'userSpaceOnUse');\n        var child = createSVGElement('image');\n        el.appendChild(child);\n        var id = uniqueId('pattern_');\n        el.id = id;\n        this.el = el;\n        this.id = id;\n        this.cfg = cfg;\n        var arr = regexPR.exec(cfg);\n        var source = arr[2];\n        child.setAttribute('href', source);\n        var img = new Image();\n        if (!source.match(/^data:/i)) {\n            img.crossOrigin = 'Anonymous';\n        }\n        img.src = source;\n        function onload() {\n            el.setAttribute('width', \"\" + img.width);\n            el.setAttribute('height', \"\" + img.height);\n        }\n        if (img.complete) {\n            onload();\n        }\n        else {\n            img.onload = onload;\n            // Fix onload() bug in IE9\n            img.src = img.src;\n        }\n        return this;\n    }\n    Pattern.prototype.match = function (type, attr) {\n        return this.cfg === attr;\n    };\n    return Pattern;\n}());\nexport default Pattern;\n//# sourceMappingURL=pattern.js.map","/**\n * @fileoverview defs\n * @author dengfuping_develop@163.com\n */\nimport { uniqueId } from '@antv/util';\nimport Gradient from './gradient';\nimport Shadow from './shadow';\nimport Arrow from './arrow';\nimport Clip from './clip';\nimport Pattern from './pattern';\nimport { createSVGElement } from '../util/dom';\nvar Defs = /** @class */ (function () {\n    function Defs(canvas) {\n        var el = createSVGElement('defs');\n        var id = uniqueId('defs_');\n        el.id = id;\n        canvas.appendChild(el);\n        this.children = [];\n        this.defaultArrow = {};\n        this.el = el;\n        this.canvas = canvas;\n    }\n    Defs.prototype.find = function (type, attr) {\n        var children = this.children;\n        var result = null;\n        for (var i = 0; i < children.length; i++) {\n            if (children[i].match(type, attr)) {\n                result = children[i].id;\n                break;\n            }\n        }\n        return result;\n    };\n    Defs.prototype.findById = function (id) {\n        var children = this.children;\n        var flag = null;\n        for (var i = 0; i < children.length; i++) {\n            if (children[i].id === id) {\n                flag = children[i];\n                break;\n            }\n        }\n        return flag;\n    };\n    Defs.prototype.add = function (item) {\n        this.children.push(item);\n        item.canvas = this.canvas;\n        item.parent = this;\n    };\n    Defs.prototype.getDefaultArrow = function (attrs, name) {\n        var stroke = attrs.stroke || attrs.strokeStyle;\n        if (this.defaultArrow[stroke]) {\n            return this.defaultArrow[stroke].id;\n        }\n        var arrow = new Arrow(attrs, name);\n        this.defaultArrow[stroke] = arrow;\n        this.el.appendChild(arrow.el);\n        this.add(arrow);\n        return arrow.id;\n    };\n    Defs.prototype.addGradient = function (cfg) {\n        var gradient = new Gradient(cfg);\n        this.el.appendChild(gradient.el);\n        this.add(gradient);\n        return gradient.id;\n    };\n    Defs.prototype.addArrow = function (attrs, name) {\n        var arrow = new Arrow(attrs, name);\n        this.el.appendChild(arrow.el);\n        this.add(arrow);\n        return arrow.id;\n    };\n    Defs.prototype.addShadow = function (cfg) {\n        var shadow = new Shadow(cfg);\n        this.el.appendChild(shadow.el);\n        this.add(shadow);\n        return shadow.id;\n    };\n    Defs.prototype.addPattern = function (cfg) {\n        var pattern = new Pattern(cfg);\n        this.el.appendChild(pattern.el);\n        this.add(pattern);\n        return pattern.id;\n    };\n    Defs.prototype.addClip = function (cfg) {\n        var clip = new Clip(cfg);\n        this.el.appendChild(clip.el);\n        this.add(clip);\n        return clip.id;\n    };\n    return Defs;\n}());\nexport default Defs;\n//# sourceMappingURL=index.js.map","import { __assign, __extends } from \"tslib\";\nimport { AbstractCanvas } from '@antv/g-base';\nimport { SHAPE_TO_TAGS } from './constant';\nimport { drawChildren } from './util/draw';\nimport { setTransform, setClip } from './util/svg';\nimport { sortDom, createSVGElement } from './util/dom';\nimport * as Shape from './shape';\nimport Group from './group';\nimport Defs from './defs';\nvar Canvas = /** @class */ (function (_super) {\n    __extends(Canvas, _super);\n    function Canvas(cfg) {\n        return _super.call(this, __assign(__assign({}, cfg), { autoDraw: true, \n            // 设置渲染引擎为 canvas，只读属性\n            renderer: 'svg' })) || this;\n    }\n    Canvas.prototype.getShapeBase = function () {\n        return Shape;\n    };\n    Canvas.prototype.getGroupBase = function () {\n        return Group;\n    };\n    // 覆盖 Container 中通过遍历的方式获取 shape 对象的逻辑，直接走 SVG 的 dom 拾取即可\n    Canvas.prototype.getShape = function (x, y, ev) {\n        var target = ev.target || ev.srcElement;\n        if (!SHAPE_TO_TAGS[target.tagName]) {\n            var parent_1 = target.parentNode;\n            while (parent_1 && !SHAPE_TO_TAGS[parent_1.tagName]) {\n                parent_1 = parent_1.parentNode;\n            }\n            target = parent_1;\n        }\n        return this.find(function (child) { return child.get('el') === target; });\n    };\n    // 复写基类的方法生成标签\n    Canvas.prototype.createDom = function () {\n        var element = createSVGElement('svg');\n        var context = new Defs(element);\n        element.setAttribute('width', \"\" + this.get('width'));\n        element.setAttribute('height', \"\" + this.get('height'));\n        // 缓存 context 对象\n        this.set('context', context);\n        return element;\n    };\n    /**\n     * 一些方法调用会引起画布变化\n     * @param {ChangeType} changeType 改变的类型\n     */\n    Canvas.prototype.onCanvasChange = function (changeType) {\n        var context = this.get('context');\n        var el = this.get('el');\n        if (changeType === 'sort') {\n            var children_1 = this.get('children');\n            if (children_1 && children_1.length) {\n                sortDom(this, function (a, b) {\n                    return children_1.indexOf(a) - children_1.indexOf(b) ? 1 : 0;\n                });\n            }\n        }\n        else if (changeType === 'clear') {\n            // el maybe null for canvas\n            if (el) {\n                // 清空 SVG 元素\n                el.innerHTML = '';\n                var defsEl = context.el;\n                // 清空 defs 元素\n                defsEl.innerHTML = '';\n                // 将清空后的 defs 元素挂载到 el 下\n                el.appendChild(defsEl);\n            }\n        }\n        else if (changeType === 'matrix') {\n            setTransform(this);\n        }\n        else if (changeType === 'clip') {\n            setClip(this, context);\n        }\n        else if (changeType === 'changeSize') {\n            el.setAttribute('width', \"\" + this.get('width'));\n            el.setAttribute('height', \"\" + this.get('height'));\n        }\n    };\n    // 复写基类的 draw 方法\n    Canvas.prototype.draw = function () {\n        var context = this.get('context');\n        var children = this.getChildren();\n        setClip(this, context);\n        if (children.length) {\n            drawChildren(context, children);\n        }\n    };\n    return Canvas;\n}(AbstractCanvas));\nexport default Canvas;\n//# sourceMappingURL=canvas.js.map","import * as Shape from './shape';\nexport * from '@antv/g-base';\nexport { default as Canvas } from './canvas';\nexport { default as Group } from './group';\nexport { Shape };\nexport var version = '0.5.6';\n//# sourceMappingURL=index.js.map","import { __extends, __values } from \"tslib\";\nimport { FIELD_ORIGIN } from '../constant';\nimport Geometry from './base';\nimport Element from './element';\n/** 引入对应的 ShapeFactory */\nimport './shape/line';\nimport { isModelChange } from './util/is-model-change';\nimport { diff } from './util/diff';\n/**\n * Path 几何标记。\n * 用于绘制路径图等。\n */\nvar Path = /** @class */ (function (_super) {\n    __extends(Path, _super);\n    function Path(cfg) {\n        var _this = _super.call(this, cfg) || this;\n        _this.type = 'path';\n        _this.shapeType = 'line';\n        var _a = cfg.connectNulls, connectNulls = _a === void 0 ? false : _a, _b = cfg.showSinglePoint, showSinglePoint = _b === void 0 ? true : _b;\n        _this.connectNulls = connectNulls;\n        _this.showSinglePoint = showSinglePoint;\n        return _this;\n    }\n    /**\n     * 创建所有的 Element 实例，对于 Path、Line、Area，一组数据对应一个 Element。\n     * @param mappingData\n     * @param [isUpdate]\n     * @returns elements\n     */\n    Path.prototype.updateElements = function (mappingDataArray, isUpdate) {\n        var e_1, _a, e_2, _b, e_3, _c;\n        if (isUpdate === void 0) { isUpdate = false; }\n        // Path 的每个 element 对应一组数据\n        var keyData = new Map();\n        var keyIndex = new Map();\n        var keys = [];\n        var index = 0;\n        for (var i = 0; i < mappingDataArray.length; i++) {\n            var mappingData = mappingDataArray[i];\n            var key = this.getElementId(mappingData);\n            keys.push(key);\n            keyData.set(key, mappingData);\n            keyIndex.set(key, index);\n            index++;\n        }\n        this.elements = new Array(index);\n        var _d = diff(this.lastElementsMap, keys), added = _d.added, updated = _d.updated, removed = _d.removed;\n        try {\n            for (var added_1 = __values(added), added_1_1 = added_1.next(); !added_1_1.done; added_1_1 = added_1.next()) {\n                var key = added_1_1.value;\n                var mappingData = keyData.get(key);\n                var shapeFactory = this.getShapeFactory();\n                var shapeCfg = this.getShapeInfo(mappingData);\n                var i = keyIndex.get(key);\n                var element = new Element({\n                    shapeFactory: shapeFactory,\n                    container: this.container,\n                    offscreenGroup: this.getOffscreenGroup(),\n                    elementIndex: i,\n                });\n                element.geometry = this;\n                element.animate = this.animateOption;\n                element.draw(shapeCfg, isUpdate); // 绘制 shape\n                this.elementsMap[key] = element;\n                this.elements[i] = element;\n            }\n        }\n        catch (e_1_1) { e_1 = { error: e_1_1 }; }\n        finally {\n            try {\n                if (added_1_1 && !added_1_1.done && (_a = added_1.return)) _a.call(added_1);\n            }\n            finally { if (e_1) throw e_1.error; }\n        }\n        try {\n            for (var updated_1 = __values(updated), updated_1_1 = updated_1.next(); !updated_1_1.done; updated_1_1 = updated_1.next()) {\n                var key = updated_1_1.value;\n                var mappingData = keyData.get(key);\n                var element = this.lastElementsMap[key];\n                var i = keyIndex.get(key);\n                var shapeCfg = this.getShapeInfo(mappingData);\n                var preShapeCfg = element.getModel();\n                if (this.isCoordinateChanged || isModelChange(preShapeCfg, shapeCfg)) {\n                    element.animate = this.animateOption;\n                    // 通过绘制数据的变更来判断是否需要更新，因为用户有可能会修改图形属性映射\n                    element.update(shapeCfg); // 更新对应的 element\n                }\n                this.elementsMap[key] = element;\n                this.elements[i] = element;\n            }\n        }\n        catch (e_2_1) { e_2 = { error: e_2_1 }; }\n        finally {\n            try {\n                if (updated_1_1 && !updated_1_1.done && (_b = updated_1.return)) _b.call(updated_1);\n            }\n            finally { if (e_2) throw e_2.error; }\n        }\n        try {\n            for (var removed_1 = __values(removed), removed_1_1 = removed_1.next(); !removed_1_1.done; removed_1_1 = removed_1.next()) {\n                var key = removed_1_1.value;\n                var element = this.lastElementsMap[key];\n                // 更新动画配置，用户有可能在更新之前有对动画进行配置操作\n                element.animate = this.animateOption;\n                element.destroy();\n            }\n        }\n        catch (e_3_1) { e_3 = { error: e_3_1 }; }\n        finally {\n            try {\n                if (removed_1_1 && !removed_1_1.done && (_c = removed_1.return)) _c.call(removed_1);\n            }\n            finally { if (e_3) throw e_3.error; }\n        }\n    };\n    /**\n     * 获取组成一条线（一组数据）的所有点以及数据\n     * @param mappingData 映射后的数组\n     */\n    Path.prototype.getPointsAndData = function (mappingData) {\n        var points = [];\n        var data = [];\n        for (var i = 0, len = mappingData.length; i < len; i++) {\n            var obj = mappingData[i];\n            points.push({\n                x: obj.x,\n                y: obj.y,\n            });\n            data.push(obj[FIELD_ORIGIN]);\n        }\n        return {\n            points: points,\n            data: data,\n        };\n    };\n    Path.prototype.getShapeInfo = function (mappingData) {\n        var shapeCfg = this.getDrawCfg(mappingData[0]);\n        var _a = this.getPointsAndData(mappingData), points = _a.points, data = _a.data;\n        shapeCfg.mappingData = mappingData;\n        shapeCfg.data = data;\n        shapeCfg.isStack = !!this.getAdjust('stack');\n        shapeCfg.points = points;\n        shapeCfg.connectNulls = this.connectNulls;\n        shapeCfg.showSinglePoint = this.showSinglePoint;\n        return shapeCfg;\n    };\n    return Path;\n}(Geometry));\nexport default Path;\n//# sourceMappingURL=path.js.map","import { each } from '@antv/util';\nimport { getPathPoints } from '../util/get-path-points';\nimport { getStyle } from '../util/get-style';\nimport { getLinePath, getSplinePath } from '../util/path';\nfunction getPath(points, isInCircle, smooth, registeredShape, constraint) {\n    var path = [];\n    if (points.length) {\n        var topLinePoints_1 = []; // area 区域上部分\n        var bottomLinePoints_1 = []; // area 区域下部分\n        for (var i = 0, len = points.length; i < len; i++) {\n            var point = points[i];\n            topLinePoints_1.push(point[1]);\n            bottomLinePoints_1.push(point[0]);\n        }\n        bottomLinePoints_1 = bottomLinePoints_1.reverse();\n        each([topLinePoints_1, bottomLinePoints_1], function (pointsData, index) {\n            var subPath = [];\n            var parsedPoints = registeredShape.parsePoints(pointsData);\n            var p1 = parsedPoints[0];\n            if (topLinePoints_1.length === 1 && bottomLinePoints_1.length === 1) {\n                // 都只有一个点，绘制一条竖线\n                subPath =\n                    index === 0\n                        ? [\n                            ['M', p1.x - 0.5, p1.y],\n                            ['L', p1.x + 0.5, p1.y],\n                        ]\n                        : [\n                            ['L', p1.x + 0.5, p1.y],\n                            ['L', p1.x - 0.5, p1.y],\n                        ];\n            }\n            else {\n                if (isInCircle) {\n                    parsedPoints.push({ x: p1.x, y: p1.y });\n                }\n                if (smooth) {\n                    subPath = getSplinePath(parsedPoints, false, constraint);\n                }\n                else {\n                    subPath = getLinePath(parsedPoints, false);\n                }\n                if (index > 0) {\n                    subPath[0][0] = 'L';\n                }\n            }\n            path = path.concat(subPath);\n        });\n        path.push(['Z']);\n    }\n    return path;\n}\n/**\n * @ignore\n * Gets shape attrs\n * @param cfg\n * @param isStroke\n * @param smooth\n * @param registeredShape\n * @param [constraint]\n * @returns\n */\nexport function getShapeAttrs(cfg, isStroke, smooth, registeredShape, constraint) {\n    var attrs = getStyle(cfg, isStroke, !isStroke, 'lineWidth');\n    var connectNulls = cfg.connectNulls, isInCircle = cfg.isInCircle, points = cfg.points, showSinglePoint = cfg.showSinglePoint;\n    var pathPoints = getPathPoints(points, connectNulls, showSinglePoint); // 根据 connectNulls 配置获取图形关键点\n    var path = [];\n    for (var i = 0, len = pathPoints.length; i < len; i++) {\n        var eachPoints = pathPoints[i];\n        path = path.concat(getPath(eachPoints, isInCircle, smooth, registeredShape, constraint));\n    }\n    attrs.path = path;\n    return attrs;\n}\n/**\n * @ignore\n * Gets constraint\n * @param coordinate\n * @returns constraint\n */\nexport function getConstraint(coordinate) {\n    var start = coordinate.start, end = coordinate.end;\n    return [\n        [start.x, end.y],\n        [end.x, start.y],\n    ];\n}\n//# sourceMappingURL=util.js.map","import { isArray } from '@antv/util';\nimport { registerShape, registerShapeFactory } from '../base';\nimport { getShapeAttrs } from './util';\nvar AreaShapeFactory = registerShapeFactory('area', {\n    defaultShapeType: 'area',\n    getDefaultPoints: function (pointInfo) {\n        // area 基本标记的绘制需要获取上下两边的顶点\n        var x = pointInfo.x, y0 = pointInfo.y0;\n        var y = isArray(pointInfo.y) ? pointInfo.y : [y0, pointInfo.y];\n        return y.map(function (yItem) {\n            return {\n                x: x,\n                y: yItem,\n            };\n        });\n    },\n});\n// Area 几何标记默认的 shape：填充的区域图\nregisterShape('area', 'area', {\n    draw: function (cfg, container) {\n        var attrs = getShapeAttrs(cfg, false, false, this);\n        var shape = container.addShape({\n            type: 'path',\n            attrs: attrs,\n            name: 'area',\n        });\n        return shape;\n    },\n    getMarker: function (markerCfg) {\n        var color = markerCfg.color;\n        return {\n            symbol: function (x, y, r) {\n                if (r === void 0) { r = 5.5; }\n                return [['M', x - r, y - 4], ['L', x + r, y - 4], ['L', x + r, y + 4], ['L', x - r, y + 4], ['Z']];\n            },\n            style: {\n                r: 5,\n                fill: color,\n                fillOpacity: 1,\n            },\n        };\n    },\n});\nexport default AreaShapeFactory;\n//# sourceMappingURL=index.js.map","import { __extends } from \"tslib\";\nimport { FIELD_ORIGIN } from '../constant';\nimport Path from './path';\nimport './shape/area';\n/**\n * Area 几何标记类。\n * 常用于绘制面积图。\n */\nvar Area = /** @class */ (function (_super) {\n    __extends(Area, _super);\n    function Area(cfg) {\n        var _this = _super.call(this, cfg) || this;\n        _this.type = 'area';\n        _this.shapeType = 'area';\n        /** 生成图形关键点 */\n        _this.generatePoints = true;\n        /**\n         * 面积图是否从 0 基准线开始填充。\n         * 1. 默认值为 `true`，表现如下：\n         * ![image](https://gw.alipayobjects.com/zos/rmsportal/ZQqwUCczalrKqGgagOVp.png)\n         * 2. 当值为 `false` 时，表现如下：\n         * ![image](https://gw.alipayobjects.com/zos/rmsportal/yPswkaXvUpCYOdhocGwB.png)\n         */\n        _this.startOnZero = true;\n        var _a = cfg.startOnZero, startOnZero = _a === void 0 ? true : _a, _b = cfg.sortable, sortable = _b === void 0 ? false : _b, _c = cfg.showSinglePoint, showSinglePoint = _c === void 0 ? false : _c;\n        _this.startOnZero = startOnZero; // 默认为 true\n        _this.sortable = sortable; // 关闭默认的 X 轴数据排序\n        _this.showSinglePoint = showSinglePoint;\n        return _this;\n    }\n    /**\n     * 获取图形绘制的关键点以及数据\n     * @param mappingData 映射后的数据\n     */\n    Area.prototype.getPointsAndData = function (mappingData) {\n        var points = [];\n        var data = [];\n        for (var i = 0, len = mappingData.length; i < len; i++) {\n            var obj = mappingData[i];\n            points.push(obj.points);\n            data.push(obj[FIELD_ORIGIN]);\n        }\n        return {\n            points: points,\n            data: data,\n        };\n    };\n    /**\n     * 获取 Y 轴上的最小值\n     * @returns y 字段最小值\n     */\n    Area.prototype.getYMinValue = function () {\n        if (this.startOnZero) {\n            return _super.prototype.getYMinValue.call(this);\n        }\n        var yScale = this.getYScale();\n        return yScale.min;\n    };\n    return Area;\n}(Path));\nexport default Area;\n//# sourceMappingURL=area.js.map","import { __assign } from \"tslib\";\nimport { registerShape, registerShapeFactory } from '../base';\nimport { getStyle } from '../util/get-style';\nimport { getLinePath } from '../util/path';\nimport { splitPoints } from '../util/split-points';\nvar EdgeShapeFactory = registerShapeFactory('edge', {\n    defaultShapeType: 'line',\n    getDefaultPoints: function (pointInfo) {\n        return splitPoints(pointInfo);\n    },\n});\nregisterShape('edge', 'line', {\n    draw: function (cfg, container) {\n        var style = getStyle(cfg, true, false, 'lineWidth');\n        var path = getLinePath(this.parsePoints(cfg.points), this.coordinate.isPolar);\n        return container.addShape('path', {\n            attrs: __assign(__assign({}, style), { path: path }),\n        });\n    },\n    getMarker: function (markerCfg) {\n        return {\n            symbol: 'circle',\n            style: {\n                r: 4.5,\n                fill: markerCfg.color,\n            },\n        };\n    },\n});\nexport default EdgeShapeFactory;\n//# sourceMappingURL=index.js.map","import { __extends } from \"tslib\";\nimport Geometry from './base';\nimport './shape/edge';\n/**\n * Edge 几何标记，用于绘制关系图中的**边**图形，如：\n * 1. 流程图\n * 2. 树\n * 3. 弧长连接图\n * 4. 和弦图\n * 5. 桑基图\n */\nvar Edge = /** @class */ (function (_super) {\n    __extends(Edge, _super);\n    function Edge() {\n        var _this = _super !== null && _super.apply(this, arguments) || this;\n        _this.type = 'edge';\n        _this.shapeType = 'edge';\n        _this.generatePoints = true;\n        return _this;\n    }\n    return Edge;\n}(Geometry));\nexport default Edge;\n//# sourceMappingURL=edge.js.map","import { __assign, __extends, __values } from \"tslib\";\nimport ColorUtil from '@antv/color-util';\nimport { get, isNumber } from '@antv/util';\nimport { FIELD_ORIGIN } from '../constant';\nimport Geometry from './base';\n/**\n * 用于绘制热力图。\n */\nvar Heatmap = /** @class */ (function (_super) {\n    __extends(Heatmap, _super);\n    function Heatmap() {\n        var _this = _super !== null && _super.apply(this, arguments) || this;\n        _this.type = 'heatmap';\n        _this.paletteCache = {};\n        return _this;\n    }\n    Heatmap.prototype.updateElements = function (mappingDataArray, isUpdate) {\n        if (isUpdate === void 0) { isUpdate = false; }\n        for (var i = 0; i < mappingDataArray.length; i++) {\n            var mappingData = mappingDataArray[i];\n            var range = this.prepareRange(mappingData);\n            var radius = this.prepareSize();\n            var blur_1 = get(this.styleOption, ['cfg', 'shadowBlur']);\n            if (!isNumber(blur_1)) {\n                blur_1 = radius / 2;\n            }\n            this.prepareGreyScaleBlurredCircle(radius, blur_1);\n            this.drawWithRange(mappingData, range, radius, blur_1);\n        }\n    };\n    /** 热力图暂时不支持 callback 回调（文档需要说明下） */\n    Heatmap.prototype.color = function (field, cfg) {\n        this.createAttrOption('color', field, typeof cfg !== 'function' ? cfg : '');\n        return this;\n    };\n    /**\n     * clear\n     */\n    Heatmap.prototype.clear = function () {\n        _super.prototype.clear.call(this);\n        this.clearShadowCanvasCtx();\n        this.paletteCache = {};\n    };\n    Heatmap.prototype.prepareRange = function (data) {\n        var colorAttr = this.getAttribute('color');\n        var colorField = colorAttr.getFields()[0];\n        var min = Infinity;\n        var max = -Infinity;\n        data.forEach(function (row) {\n            var value = row[FIELD_ORIGIN][colorField];\n            if (value > max) {\n                max = value;\n            }\n            if (value < min) {\n                min = value;\n            }\n        });\n        if (min === max) {\n            min = max - 1;\n        }\n        return [min, max];\n    };\n    Heatmap.prototype.prepareSize = function () {\n        var radius = this.getDefaultValue('size');\n        if (!isNumber(radius)) {\n            radius = this.getDefaultSize();\n        }\n        return radius;\n    };\n    Heatmap.prototype.prepareGreyScaleBlurredCircle = function (radius, blur) {\n        var grayScaleBlurredCanvas = this.getGrayScaleBlurredCanvas();\n        var r2 = radius + blur;\n        var ctx = grayScaleBlurredCanvas.getContext('2d');\n        grayScaleBlurredCanvas.width = grayScaleBlurredCanvas.height = r2 * 2;\n        ctx.clearRect(0, 0, grayScaleBlurredCanvas.width, grayScaleBlurredCanvas.height);\n        ctx.shadowOffsetX = ctx.shadowOffsetY = r2 * 2;\n        ctx.shadowBlur = blur;\n        ctx.shadowColor = 'black';\n        ctx.beginPath();\n        ctx.arc(-r2, -r2, radius, 0, Math.PI * 2, true);\n        ctx.closePath();\n        ctx.fill();\n    };\n    Heatmap.prototype.drawWithRange = function (data, range, radius, blur) {\n        var e_1, _a;\n        // canvas size\n        var _b = this.coordinate, start = _b.start, end = _b.end;\n        var width = this.coordinate.getWidth();\n        var height = this.coordinate.getHeight();\n        // value, range, etc\n        var colorAttr = this.getAttribute('color');\n        var valueField = colorAttr.getFields()[0];\n        // prepare shadow canvas context\n        this.clearShadowCanvasCtx();\n        var ctx = this.getShadowCanvasCtx();\n        // filter data\n        if (range) {\n            data = data.filter(function (row) {\n                return row[FIELD_ORIGIN][valueField] <= range[1] && row[FIELD_ORIGIN][valueField] >= range[0];\n            });\n        }\n        // step1. draw points with shadow\n        var scale = this.scales[valueField];\n        try {\n            for (var data_1 = __values(data), data_1_1 = data_1.next(); !data_1_1.done; data_1_1 = data_1.next()) {\n                var obj = data_1_1.value;\n                var _c = this.getDrawCfg(obj), x = _c.x, y = _c.y;\n                var alpha = scale.scale(obj[FIELD_ORIGIN][valueField]);\n                this.drawGrayScaleBlurredCircle(x - start.x, y - end.y, radius + blur, alpha, ctx);\n            }\n        }\n        catch (e_1_1) { e_1 = { error: e_1_1 }; }\n        finally {\n            try {\n                if (data_1_1 && !data_1_1.done && (_a = data_1.return)) _a.call(data_1);\n            }\n            finally { if (e_1) throw e_1.error; }\n        }\n        // step2. convert pixels\n        var colored = ctx.getImageData(0, 0, width, height);\n        this.clearShadowCanvasCtx();\n        this.colorize(colored);\n        ctx.putImageData(colored, 0, 0);\n        var imageShape = this.getImageShape();\n        imageShape.attr('x', start.x);\n        imageShape.attr('y', end.y);\n        imageShape.attr('width', width);\n        imageShape.attr('height', height);\n        imageShape.attr('img', ctx.canvas);\n        imageShape.set('origin', this.getShapeInfo(data)); // 存储绘图信息数据\n    };\n    Heatmap.prototype.getDefaultSize = function () {\n        var position = this.getAttribute('position');\n        var coordinate = this.coordinate;\n        return Math.min(coordinate.getWidth() / (position.scales[0].ticks.length * 4), coordinate.getHeight() / (position.scales[1].ticks.length * 4));\n    };\n    Heatmap.prototype.clearShadowCanvasCtx = function () {\n        var ctx = this.getShadowCanvasCtx();\n        ctx.clearRect(0, 0, ctx.canvas.width, ctx.canvas.height);\n    };\n    Heatmap.prototype.getShadowCanvasCtx = function () {\n        var canvas = this.shadowCanvas;\n        if (!canvas) {\n            canvas = document.createElement('canvas');\n            this.shadowCanvas = canvas;\n        }\n        canvas.width = this.coordinate.getWidth();\n        canvas.height = this.coordinate.getHeight();\n        return canvas.getContext('2d');\n    };\n    Heatmap.prototype.getGrayScaleBlurredCanvas = function () {\n        if (!this.grayScaleBlurredCanvas) {\n            this.grayScaleBlurredCanvas = document.createElement('canvas');\n        }\n        return this.grayScaleBlurredCanvas;\n    };\n    Heatmap.prototype.drawGrayScaleBlurredCircle = function (x, y, r, alpha, ctx) {\n        var grayScaleBlurredCanvas = this.getGrayScaleBlurredCanvas();\n        ctx.globalAlpha = alpha;\n        ctx.drawImage(grayScaleBlurredCanvas, x - r, y - r);\n    };\n    Heatmap.prototype.colorize = function (img) {\n        var colorAttr = this.getAttribute('color');\n        var pixels = img.data;\n        var paletteCache = this.paletteCache;\n        for (var i = 3; i < pixels.length; i += 4) {\n            var alpha = pixels[i]; // get gradient color from opacity value\n            if (isNumber(alpha)) {\n                var palette = paletteCache[alpha] ? paletteCache[alpha] : ColorUtil.rgb2arr(colorAttr.gradient(alpha / 256));\n                pixels[i - 3] = palette[0];\n                pixels[i - 2] = palette[1];\n                pixels[i - 1] = palette[2];\n                pixels[i] = alpha;\n            }\n        }\n    };\n    Heatmap.prototype.getImageShape = function () {\n        var imageShape = this.imageShape;\n        if (imageShape) {\n            return imageShape;\n        }\n        var container = this.container;\n        imageShape = container.addShape({\n            type: 'image',\n            attrs: {},\n        });\n        this.imageShape = imageShape;\n        return imageShape;\n    };\n    Heatmap.prototype.getShapeInfo = function (mappingData) {\n        var shapeCfg = this.getDrawCfg(mappingData[0]);\n        var data = mappingData.map(function (obj) {\n            return obj[FIELD_ORIGIN];\n        });\n        return __assign(__assign({}, shapeCfg), { mappingData: mappingData, data: data });\n    };\n    return Heatmap;\n}(Geometry));\nexport default Heatmap;\n//# sourceMappingURL=heatmap.js.map","import { __read, __spreadArray } from \"tslib\";\nimport { isArray, isNil, get } from '@antv/util';\nimport { getAngle, getSectorPath } from '../../../util/graphics';\n/**\n * @ignore\n * 根据数据点生成矩形的四个关键点\n * @param pointInfo 数据点信息\n * @param [isPyramid] 是否为尖底漏斗图\n * @returns rect points 返回矩形四个顶点信息\n */\nexport function getRectPoints(pointInfo) {\n    var _a, _b;\n    var x = pointInfo.x, y = pointInfo.y, y0 = pointInfo.y0, size = pointInfo.size;\n    // 有 4 种情况，\n    // 1. x, y 都不是数组\n    // 2. y是数组，x不是\n    // 3. x是数组，y不是\n    // 4. x, y 都是数组\n    var yMin;\n    var yMax;\n    if (isArray(y)) {\n        _a = __read(y, 2), yMin = _a[0], yMax = _a[1];\n    }\n    else {\n        yMin = y0;\n        yMax = y;\n    }\n    var xMin;\n    var xMax;\n    if (isArray(x)) {\n        _b = __read(x, 2), xMin = _b[0], xMax = _b[1];\n    }\n    else {\n        xMin = x - size / 2;\n        xMax = x + size / 2;\n    }\n    var points = [\n        { x: xMin, y: yMin },\n        { x: xMin, y: yMax },\n    ];\n    // 矩形的四个关键点，结构如下（左下角顺时针连接）\n    // 1 ---- 2\n    // |      |\n    // 0 ---- 3\n    points.push({ x: xMax, y: yMax }, { x: xMax, y: yMin });\n    return points;\n}\n/**\n * @ignore\n * 根据矩形关键点绘制 path\n * @param points 关键点数组\n * @param isClosed path 是否需要闭合\n * @returns 返回矩形的 path\n */\nexport function getRectPath(points, isClosed) {\n    if (isClosed === void 0) { isClosed = true; }\n    var path = [];\n    var firstPoint = points[0];\n    path.push(['M', firstPoint.x, firstPoint.y]);\n    for (var i = 1, len = points.length; i < len; i++) {\n        path.push(['L', points[i].x, points[i].y]);\n    }\n    // 对于 shape=\"line\" path 不应该闭合，否则会造成 lineCap 绘图属性失效\n    if (isClosed) {\n        path.push(['L', firstPoint.x, firstPoint.y]); // 需要闭合\n        path.push(['z']);\n    }\n    return path;\n}\n/**\n * 处理 rect path 的 radius\n * @returns 返回矩形 path 的四个角的 arc 半径\n */\nexport function parseRadius(radius, minLength) {\n    var r1 = 0;\n    var r2 = 0;\n    var r3 = 0;\n    var r4 = 0;\n    if (isArray(radius)) {\n        if (radius.length === 1) {\n            r1 = r2 = r3 = r4 = radius[0];\n        }\n        else if (radius.length === 2) {\n            r1 = r3 = radius[0];\n            r2 = r4 = radius[1];\n        }\n        else if (radius.length === 3) {\n            r1 = radius[0];\n            r2 = r4 = radius[1];\n            r3 = radius[2];\n        }\n        else {\n            r1 = radius[0];\n            r2 = radius[1];\n            r3 = radius[2];\n            r4 = radius[3];\n        }\n    }\n    else {\n        r1 = r2 = r3 = r4 = radius;\n    }\n    // 处理 边界值\n    if (r1 + r2 > minLength) {\n        r1 = r1 ? minLength / (1 + r2 / r1) : 0;\n        r2 = minLength - r1;\n    }\n    if (r3 + r4 > minLength) {\n        r3 = r3 ? minLength / (1 + r4 / r3) : 0;\n        r4 = minLength - r3;\n    }\n    return [r1 || 0, r2 || 0, r3 || 0, r4 || 0];\n}\n/**\n * 获取 interval 矩形背景的 path\n * @param cfg 关键点的信息\n * @param points 已转化为画布坐标的 4 个关键点\n * @param coordinate 坐标系\n * @returns 返回矩形背景的 path\n */\nexport function getBackgroundRectPath(cfg, points, coordinate) {\n    var path = [];\n    if (coordinate.isRect) {\n        var p0 = coordinate.isTransposed\n            ? { x: coordinate.start.x, y: points[0].y }\n            : { x: points[0].x, y: coordinate.start.y };\n        var p1 = coordinate.isTransposed\n            ? { x: coordinate.end.x, y: points[2].y }\n            : { x: points[3].x, y: coordinate.end.y };\n        // corner radius of background shape works only in 笛卡尔坐标系\n        var radius = get(cfg, ['background', 'style', 'radius']);\n        if (radius) {\n            var width = coordinate.isTransposed ? Math.abs(points[0].y - points[2].y) : points[2].x - points[1].x;\n            var height = coordinate.isTransposed ? coordinate.getWidth() : coordinate.getHeight();\n            var _a = __read(parseRadius(radius, Math.min(width, height)), 4), r1 = _a[0], r2 = _a[1], r3 = _a[2], r4 = _a[3];\n            // 同时存在 坐标系是否发生转置 和 y 镜像的时候\n            var isReflectYTransposed_1 = (coordinate.isTransposed && coordinate.isReflect('y'));\n            var bump = isReflectYTransposed_1 ? 0 : 1;\n            var opposite = function (r) { return isReflectYTransposed_1 ? -r : r; };\n            path.push(['M', p0.x, p1.y + opposite(r1)]);\n            r1 !== 0 && path.push(['A', r1, r1, 0, 0, bump, p0.x + r1, p1.y]);\n            path.push(['L', p1.x - r2, p1.y]);\n            r2 !== 0 && path.push(['A', r2, r2, 0, 0, bump, p1.x, p1.y + opposite(r2)]);\n            path.push(['L', p1.x, p0.y - opposite(r3)]);\n            r3 !== 0 && path.push(['A', r3, r3, 0, 0, bump, p1.x - r3, p0.y]);\n            path.push(['L', p0.x + r4, p0.y]);\n            r4 !== 0 && path.push(['A', r4, r4, 0, 0, bump, p0.x, p0.y - opposite(r4)]);\n        }\n        else {\n            path.push(['M', p0.x, p0.y]);\n            path.push(['L', p1.x, p0.y]);\n            path.push(['L', p1.x, p1.y]);\n            path.push(['L', p0.x, p1.y]);\n            path.push(['L', p0.x, p0.y]);\n        }\n        path.push(['z']);\n    }\n    if (coordinate.isPolar) {\n        var center = coordinate.getCenter();\n        var _b = getAngle(cfg, coordinate), startAngle = _b.startAngle, endAngle = _b.endAngle;\n        if (coordinate.type !== 'theta' && !coordinate.isTransposed) {\n            // 获取扇形 path\n            path = getSectorPath(center.x, center.y, coordinate.getRadius(), startAngle, endAngle);\n        }\n        else {\n            var pow = function (v) { return Math.pow(v, 2); };\n            var r1 = Math.sqrt(pow(center.x - points[0].x) + pow(center.y - points[0].y));\n            var r2 = Math.sqrt(pow(center.x - points[2].x) + pow(center.y - points[2].y));\n            // 获取扇形 path（其实是一个圆环，从 coordinate 的起始角度到结束角度）\n            path = getSectorPath(center.x, center.y, r1, coordinate.startAngle, coordinate.endAngle, r2);\n        }\n    }\n    return path;\n}\n/**\n * @ignore\n * 根据矩形关键点绘制 path\n * @param points 关键点数组\n * @param lineCap 'round'圆角样式\n * @param coor 坐标\n * @returns 返回矩形的 path\n */\nexport function getIntervalRectPath(points, lineCap, coor) {\n    var width = coor.getWidth();\n    var height = coor.getHeight();\n    var isRect = coor.type === 'rect';\n    var path = [];\n    var r = (points[2].x - points[1].x) / 2;\n    var ry = coor.isTransposed ? (r * height) / width : (r * width) / height;\n    if (lineCap === 'round') {\n        if (isRect) {\n            path.push(['M', points[0].x, points[0].y + ry]);\n            path.push(['L', points[1].x, points[1].y - ry]);\n            path.push(['A', r, r, 0, 0, 1, points[2].x, points[2].y - ry]);\n            path.push(['L', points[3].x, points[3].y + ry]);\n            path.push(['A', r, r, 0, 0, 1, points[0].x, points[0].y + ry]);\n        }\n        else {\n            path.push(['M', points[0].x, points[0].y]);\n            path.push(['L', points[1].x, points[1].y]);\n            path.push(['A', r, r, 0, 0, 1, points[2].x, points[2].y]);\n            path.push(['L', points[3].x, points[3].y]);\n            path.push(['A', r, r, 0, 0, 1, points[0].x, points[0].y]);\n        }\n        path.push(['z']);\n    }\n    else {\n        path = getRectPath(points);\n    }\n    return path;\n}\n/**\n * @ignore\n * 根据 funnel 关键点绘制漏斗图的 path\n * @param points 图形关键点信息\n * @param nextPoints 下一个数据的图形关键点信息\n * @param isPyramid 是否为尖底漏斗图\n * @returns 返回漏斗图的图形 path\n */\nexport function getFunnelPath(points, nextPoints, isPyramid) {\n    var path = [];\n    if (!isNil(nextPoints)) {\n        path.push(['M', points[0].x, points[0].y], ['L', points[1].x, points[1].y], ['L', nextPoints[1].x, nextPoints[1].y], ['L', nextPoints[0].x, nextPoints[0].y], ['Z']);\n    }\n    else if (isPyramid) {\n        // 金字塔最底部\n        path.push(['M', points[0].x, points[0].y], ['L', points[1].x, points[1].y], ['L', (points[2].x + points[3].x) / 2, (points[2].y + points[3].y) / 2], ['Z']);\n    }\n    else {\n        // 漏斗图最底部\n        path.push(['M', points[0].x, points[0].y], ['L', points[1].x, points[1].y], ['L', points[2].x, points[2].y], ['L', points[3].x, points[3].y], ['Z']);\n    }\n    return path;\n}\n/**\n * 交换两个对象\n */\nfunction swap(p0, p1) {\n    return [p1, p0];\n}\n/**\n * 获取 倒角 矩形\n * - 目前只适用于笛卡尔坐标系下\n */\nexport function getRectWithCornerRadius(points, coordinate, radius) {\n    var _a, _b, _c, _d, _e, _f, _g;\n    // 获取 四个关键点\n    var _h = __read(__spreadArray([], __read(points), false), 4), p0 = _h[0], p1 = _h[1], p2 = _h[2], p3 = _h[3];\n    var _j = __read(typeof radius === 'number' ? Array(4).fill(radius) : radius, 4), r1 = _j[0], r2 = _j[1], r3 = _j[2], r4 = _j[3];\n    if (coordinate.isTransposed) {\n        _a = __read(swap(p1, p3), 2), p1 = _a[0], p3 = _a[1];\n    }\n    /**\n     * 存在镜像\n     */\n    if (coordinate.isReflect('y')) {\n        _b = __read(swap(p0, p1), 2), p0 = _b[0], p1 = _b[1];\n        _c = __read(swap(p2, p3), 2), p2 = _c[0], p3 = _c[1];\n    }\n    if (coordinate.isReflect('x')) {\n        _d = __read(swap(p0, p3), 2), p0 = _d[0], p3 = _d[1];\n        _e = __read(swap(p1, p2), 2), p1 = _e[0], p2 = _e[1];\n    }\n    var path = [];\n    /**\n     *  p1 → p2\n     *  ↑    ↓\n     *  p0 ← p3\n     *\n     *  负数的情况，关键点会变成下面的形式\n     *\n     *  p0 ← p3               p2 ← p1\n     *  ↓    ↑                ↓     ↑\n     *  p1 → p2  --> (转置下)  p3 → p0\n     */\n    var abs = function (v) { return Math.abs(v); };\n    _f = __read(parseRadius([r1, r2, r3, r4], Math.min(abs(p3.x - p0.x), abs(p1.y - p0.y))).map(function (d) { return abs(d); }), 4), r1 = _f[0], r2 = _f[1], r3 = _f[2], r4 = _f[3];\n    if (coordinate.isTransposed) {\n        _g = __read([r4, r1, r2, r3], 4), r1 = _g[0], r2 = _g[1], r3 = _g[2], r4 = _g[3];\n    }\n    if (p0.y < p1.y /** 负数情况 */) {\n        path.push(['M', p3.x, p3.y + r3]);\n        r3 !== 0 && path.push(['A', r3, r3, 0, 0, 0, p3.x - r3, p3.y]);\n        path.push(['L', p0.x + r4, p0.y]);\n        r4 !== 0 && path.push(['A', r4, r4, 0, 0, 0, p0.x, p0.y + r4]);\n        path.push(['L', p1.x, p1.y - r1]);\n        r1 !== 0 && path.push(['A', r1, r1, 0, 0, 0 /** 逆时针 */, p1.x + r1, p1.y]);\n        path.push(['L', p2.x - r2, p2.y]);\n        r2 !== 0 && path.push(['A', r2, r2, 0, 0, 0, p2.x, p2.y - r2]);\n        path.push(['L', p3.x, p3.y + r3]);\n        path.push(['z']);\n    }\n    else if (p3.x < p0.x) {\n        path.push(['M', p2.x + r2, p2.y]);\n        r2 !== 0 && path.push(['A', r2, r2, 0, 0, 0, p2.x, p2.y + r2]);\n        path.push(['L', p3.x, p3.y - r3]);\n        r3 !== 0 && path.push(['A', r3, r3, 0, 0, 0, p3.x + r3, p3.y]);\n        path.push(['L', p0.x - r4, p0.y]);\n        r4 !== 0 && path.push(['A', r4, r4, 0, 0, 0, p0.x, p0.y - r4]);\n        path.push(['L', p1.x, p1.y + r1]);\n        r1 !== 0 && path.push(['A', r1, r1, 0, 0, 0, p1.x - r1, p1.y]);\n        path.push(['L', p2.x + r2, p2.y]);\n        path.push(['z']);\n    }\n    else {\n        path.push(['M', p1.x, p1.y + r1]);\n        r1 !== 0 && path.push(['A', r1, r1, 0, 0, 1, p1.x + r1, p1.y]);\n        path.push(['L', p2.x - r2, p2.y]);\n        r2 !== 0 && path.push(['A', r2, r2, 0, 0, 1, p2.x, p2.y + r2]);\n        path.push(['L', p3.x, p3.y - r3]);\n        r3 !== 0 && path.push(['A', r3, r3, 0, 0, 1, p3.x - r3, p3.y]);\n        path.push(['L', p0.x + r4, p0.y]);\n        r4 !== 0 && path.push(['A', r4, r4, 0, 0, 1, p0.x, p0.y - r4]);\n        path.push(['L', p1.x, p1.y + r1]);\n        path.push(['z']);\n    }\n    return path;\n}\n//# sourceMappingURL=util.js.map","import { flatten, isString, valuesOfKey, isNil } from '@antv/util';\nimport { getXDimensionLength } from '../../util/coordinate';\n// 已经排序后的数据查找距离最小的\nfunction findMinDistance(arr, scale) {\n    var count = arr.length;\n    var sourceArr = arr;\n    if (isString(sourceArr[0])) {\n        // 日期类型的 values 经常上文本类型，所以需要转换一下\n        sourceArr = arr.map(function (v) {\n            return scale.translate(v);\n        });\n    }\n    var distance = sourceArr[1] - sourceArr[0];\n    for (var i = 2; i < count; i++) {\n        var tmp = sourceArr[i] - sourceArr[i - 1];\n        if (distance > tmp) {\n            distance = tmp;\n        }\n    }\n    return distance;\n}\nfunction getDodgeCount(dataArray, dodgeBy) {\n    if (dodgeBy) {\n        var mergeData = flatten(dataArray);\n        var values = valuesOfKey(mergeData, dodgeBy);\n        return values.length;\n    }\n    return dataArray.length;\n}\n/** @ignore */\nexport function getDefaultSize(geometry) {\n    var theme = geometry.theme;\n    var coordinate = geometry.coordinate;\n    var xScale = geometry.getXScale();\n    var xValues = xScale.values;\n    var dataArray = geometry.beforeMappingData;\n    var count = xValues.length;\n    var xDimensionLength = getXDimensionLength(geometry.coordinate);\n    // 获取柱宽相关配置项\n    var intervalPadding = geometry.intervalPadding, dodgePadding = geometry.dodgePadding;\n    // 兼容theme配置\n    var maxColumnWidth = geometry.maxColumnWidth || theme.maxColumnWidth;\n    var minColumnWidth = geometry.minColumnWidth || theme.minColumnWidth;\n    var columnWidthRatio = geometry.columnWidthRatio || theme.columnWidthRatio;\n    var multiplePieWidthRatio = geometry.multiplePieWidthRatio || theme.multiplePieWidthRatio;\n    var roseWidthRatio = geometry.roseWidthRatio || theme.roseWidthRatio;\n    // 线性情况下count值\n    if (xScale.isLinear && xValues.length > 1) {\n        // Linear 类型用户有可能设置了 min, max 范围所以需要根据数据最小区间计算 count\n        xValues.sort();\n        var interval = findMinDistance(xValues, xScale);\n        count = (xScale.max - xScale.min) / interval;\n        if (xValues.length > count) {\n            count = xValues.length;\n        }\n    }\n    var range = xScale.range;\n    var normalizedSize = 1 / count;\n    var wr = 1;\n    if (coordinate.isPolar) {\n        // 极坐标场景\n        if (coordinate.isTransposed && count > 1) {\n            // 极坐标下多层环图\n            wr = multiplePieWidthRatio;\n        }\n        else {\n            wr = roseWidthRatio;\n        }\n    }\n    else {\n        // 非极坐标场景\n        if (xScale.isLinear) {\n            normalizedSize *= range[1] - range[0];\n        }\n        wr = columnWidthRatio;\n    }\n    // 基础柱状图\n    if (!isNil(intervalPadding) && intervalPadding >= 0) {\n        // 配置组间距情况\n        var normalizedIntervalPadding = intervalPadding / xDimensionLength;\n        normalizedSize = (1 - (count - 1) * normalizedIntervalPadding) / count;\n    }\n    else {\n        // 默认情况\n        normalizedSize *= wr;\n    }\n    // 分组柱状图\n    if (geometry.getAdjust('dodge')) {\n        var dodgeAdjust = geometry.getAdjust('dodge');\n        var dodgeBy = dodgeAdjust.dodgeBy;\n        var dodgeCount = getDodgeCount(dataArray, dodgeBy);\n        if (!isNil(dodgePadding) && dodgePadding >= 0) {\n            // 仅配置组内间距情况\n            var normalizedDodgePadding = dodgePadding / xDimensionLength;\n            normalizedSize = (normalizedSize - normalizedDodgePadding * (dodgeCount - 1)) / dodgeCount;\n        }\n        else if (!isNil(intervalPadding) && intervalPadding >= 0) {\n            // 设置组间距但未设置组内间距情况，避免组间距过小导致图形重叠，需乘以wr\n            normalizedSize *= wr;\n            normalizedSize = normalizedSize / dodgeCount;\n        }\n        else {\n            // 组间距和组内间距均未配置\n            normalizedSize = normalizedSize / dodgeCount;\n        }\n        normalizedSize = normalizedSize >= 0 ? normalizedSize : 0;\n    }\n    // 最大和最小限制\n    if (!isNil(maxColumnWidth) && maxColumnWidth >= 0) {\n        var normalizedMaxColumnWidth = maxColumnWidth / xDimensionLength;\n        if (normalizedSize > normalizedMaxColumnWidth) {\n            normalizedSize = normalizedMaxColumnWidth;\n        }\n    }\n    // \bminColumnWidth可能设置为0\n    if (!isNil(minColumnWidth) && minColumnWidth >= 0) {\n        var normalizedMinColumnWidth = minColumnWidth / xDimensionLength;\n        if (normalizedSize < normalizedMinColumnWidth) {\n            normalizedSize = normalizedMinColumnWidth;\n        }\n    }\n    return normalizedSize;\n}\n//# sourceMappingURL=shape-size.js.map","import { __assign } from \"tslib\";\nimport { registerShape, registerShapeFactory } from '../base';\nimport { BACKGROUND_SHAPE } from '../constant';\nimport { getBackgroundRectStyle, getStyle } from '../util/get-style';\nimport { getBackgroundRectPath, getIntervalRectPath, getRectPoints, getRectWithCornerRadius } from './util';\n/** Interval 的 shape 工厂 */\nvar IntervalShapeFactory = registerShapeFactory('interval', {\n    defaultShapeType: 'rect',\n    getDefaultPoints: function (pointInfo) {\n        return getRectPoints(pointInfo);\n    },\n});\n/** Inerval 默认 shape，填充的矩形 */\nregisterShape('interval', 'rect', {\n    draw: function (cfg, container) {\n        var style = getStyle(cfg, false, true);\n        var group = container;\n        var backgroundCfg = cfg === null || cfg === void 0 ? void 0 : cfg.background;\n        if (backgroundCfg) {\n            group = container.addGroup({\n                name: 'interval-group',\n            });\n            var backgroundStyle = getBackgroundRectStyle(cfg);\n            var backgroundPath = getBackgroundRectPath(cfg, this.parsePoints(cfg.points), this.coordinate);\n            group.addShape('path', {\n                attrs: __assign(__assign({}, backgroundStyle), { path: backgroundPath }),\n                capture: false,\n                zIndex: -1,\n                name: BACKGROUND_SHAPE,\n            });\n        }\n        var path;\n        if (style.radius && this.coordinate.isRect) {\n            path = getRectWithCornerRadius(this.parsePoints(cfg.points), this.coordinate, style.radius);\n        }\n        else {\n            path = this.parsePath(getIntervalRectPath(cfg.points, style.lineCap, this.coordinate));\n        }\n        var shape = group.addShape('path', {\n            attrs: __assign(__assign({}, style), { path: path }),\n            name: 'interval',\n        });\n        return backgroundCfg ? group : shape;\n    },\n    getMarker: function (markerCfg) {\n        var color = markerCfg.color, isInPolar = markerCfg.isInPolar;\n        if (isInPolar) {\n            return {\n                symbol: 'circle',\n                style: {\n                    r: 4.5,\n                    fill: color,\n                },\n            };\n        }\n        return {\n            symbol: 'square',\n            style: {\n                r: 4,\n                fill: color,\n            },\n        };\n    },\n});\nexport default IntervalShapeFactory;\n//# sourceMappingURL=index.js.map","import { __extends } from \"tslib\";\nimport { get } from '@antv/util';\nimport { getXDimensionLength } from '../util/coordinate';\nimport Geometry from './base';\n/** 引入对应的 ShapeFactory */\nimport './shape/interval';\nimport { getDefaultSize } from './util/shape-size';\nimport { getMaxScale } from '../util/scale';\n/**\n * Interval 几何标记。\n * 用于绘制柱状图、饼图、条形图、玫瑰图等。\n */\nvar Interval = /** @class */ (function (_super) {\n    __extends(Interval, _super);\n    function Interval(cfg) {\n        var _this = _super.call(this, cfg) || this;\n        _this.type = 'interval';\n        _this.shapeType = 'interval';\n        _this.generatePoints = true;\n        var background = cfg.background;\n        _this.background = background;\n        return _this;\n    }\n    /**\n     * 获取每条数据的 Shape 绘制信息\n     * @param obj 经过分组 -> 数字化 -> adjust 调整后的数据记录\n     * @returns\n     */\n    Interval.prototype.createShapePointsCfg = function (obj) {\n        var cfg = _super.prototype.createShapePointsCfg.call(this, obj);\n        // 计算每个 shape 的 size\n        var size;\n        var sizeAttr = this.getAttribute('size');\n        if (sizeAttr) {\n            size = this.getAttributeValues(sizeAttr, obj)[0];\n            // 归一化\n            var coordinate = this.coordinate;\n            var coordinateWidth = getXDimensionLength(coordinate);\n            size = size / coordinateWidth;\n        }\n        else {\n            if (!this.defaultSize) {\n                this.defaultSize = getDefaultSize(this);\n            }\n            size = this.defaultSize;\n        }\n        cfg.size = size;\n        return cfg;\n    };\n    /**\n     * 调整 y 轴的 scale 范围。\n     * 对于 Y 轴为数值轴柱状图，默认从 0 开始 生长。\n     */\n    Interval.prototype.adjustScale = function () {\n        _super.prototype.adjustScale.call(this);\n        var yScale = this.getYScale();\n        // 特殊逻辑：饼图需要填充满整个空间\n        if (this.coordinate.type === 'theta') {\n            yScale.change({\n                nice: false,\n                min: 0,\n                // 发生过 stack 调整，yScale 的 max 被调整过，this.updateStackRange()\n                max: getMaxScale(yScale),\n            });\n        }\n        else {\n            // 柱状图数值轴默认从 0 开始\n            var scaleDefs = this.scaleDefs;\n            var field = yScale.field, min = yScale.min, max = yScale.max, type = yScale.type;\n            if (type !== 'time') {\n                // time 类型不做调整\n                // 柱状图的 Y 轴要从 0 开始生长，但是如果用户设置了则以用户的为准\n                if (min > 0 && !get(scaleDefs, [field, 'min'])) {\n                    yScale.change({\n                        min: 0,\n                    });\n                }\n                // 柱当柱状图全为负值时也需要从 0 开始生长，但是如果用户设置了则以用户的为准\n                if (max <= 0 && !get(scaleDefs, [field, 'max'])) {\n                    yScale.change({\n                        max: 0,\n                    });\n                }\n            }\n        }\n    };\n    /**\n     * @override\n     */\n    Interval.prototype.getDrawCfg = function (mappingData) {\n        var shapeCfg = _super.prototype.getDrawCfg.call(this, mappingData);\n        shapeCfg.background = this.background;\n        return shapeCfg;\n    };\n    return Interval;\n}(Geometry));\nexport default Interval;\n//# sourceMappingURL=interval.js.map","import { __extends } from \"tslib\";\nimport Path from './path';\n/** 引入 Path 对应的 ShapeFactory */\nimport './shape/line';\n/**\n * Line 几何标记。\n * 常用于折线图的绘制。\n */\nvar Line = /** @class */ (function (_super) {\n    __extends(Line, _super);\n    function Line(cfg) {\n        var _this = _super.call(this, cfg) || this;\n        _this.type = 'line';\n        var _a = cfg.sortable, sortable = _a === void 0 ? false : _a; // 关闭默认的 X 轴数据排序\n        _this.sortable = sortable;\n        return _this;\n    }\n    return Line;\n}(Path));\nexport default Line;\n//# sourceMappingURL=line.js.map","import { __assign, __values } from \"tslib\";\nimport { MarkerSymbols } from '../../../util/marker';\nimport { getStyle } from '../util/get-style';\nexport var SHAPES = ['circle', 'square', 'bowtie', 'diamond', 'hexagon', 'triangle', 'triangle-down'];\nexport var HOLLOW_SHAPES = ['cross', 'tick', 'plus', 'hyphen', 'line'];\n/**\n * @ignore\n * Draws points\n * @param shape\n * @param cfg\n * @param container\n * @param shapeName\n * @param isStroke\n * @returns points\n */\nexport function drawPoints(shape, cfg, container, shapeName, isStroke) {\n    var e_1, _a;\n    var style = getStyle(cfg, isStroke, !isStroke, 'r');\n    var points = shape.parsePoints(cfg.points);\n    var pointPosition = points[0];\n    if (cfg.isStack) {\n        pointPosition = points[1];\n    }\n    else if (points.length > 1) {\n        var group = container.addGroup();\n        try {\n            for (var points_1 = __values(points), points_1_1 = points_1.next(); !points_1_1.done; points_1_1 = points_1.next()) {\n                var point = points_1_1.value;\n                group.addShape({\n                    type: 'marker',\n                    attrs: __assign(__assign(__assign({}, style), { symbol: MarkerSymbols[shapeName] || shapeName }), point),\n                });\n            }\n        }\n        catch (e_1_1) { e_1 = { error: e_1_1 }; }\n        finally {\n            try {\n                if (points_1_1 && !points_1_1.done && (_a = points_1.return)) _a.call(points_1);\n            }\n            finally { if (e_1) throw e_1.error; }\n        }\n        return group;\n    }\n    return container.addShape({\n        type: 'marker',\n        attrs: __assign(__assign(__assign({}, style), { symbol: MarkerSymbols[shapeName] || shapeName }), pointPosition),\n    });\n}\n//# sourceMappingURL=util.js.map","import { each } from '@antv/util';\nimport { MarkerSymbols } from '../../../util/marker';\nimport { registerShape, registerShapeFactory } from '../base';\nimport { splitPoints } from '../util/split-points';\nimport { drawPoints, SHAPES } from './util';\nvar PointShapeFactory = registerShapeFactory('point', {\n    defaultShapeType: 'hollow-circle',\n    getDefaultPoints: function (pointInfo) {\n        return splitPoints(pointInfo);\n    },\n});\neach(SHAPES, function (shapeName) {\n    // 添加该 shape 对应的 hollow-shape\n    registerShape('point', \"hollow-\".concat(shapeName), {\n        draw: function (cfg, container) {\n            return drawPoints(this, cfg, container, shapeName, true);\n        },\n        getMarker: function (markerCfg) {\n            var color = markerCfg.color;\n            return {\n                symbol: MarkerSymbols[shapeName] || shapeName,\n                style: {\n                    r: 4.5,\n                    stroke: color,\n                    fill: null,\n                },\n            };\n        },\n    });\n});\nexport default PointShapeFactory;\n//# sourceMappingURL=index.js.map","import { __assign, __extends } from \"tslib\";\nimport Geometry from './base';\n/** 引入 Point 对应的 ShapeFactory */\nimport './shape/point';\n/**\n * Point 几何标记。\n * 常用于绘制点图。\n */\nvar Point = /** @class */ (function (_super) {\n    __extends(Point, _super);\n    function Point() {\n        var _this = _super !== null && _super.apply(this, arguments) || this;\n        _this.type = 'point';\n        _this.shapeType = 'point';\n        _this.generatePoints = true;\n        return _this;\n    }\n    /**\n     * 获取一个点的绘制信息。\n     * @param mappingDatum\n     * @returns draw cfg\n     */\n    Point.prototype.getDrawCfg = function (mappingDatum) {\n        var shapeCfg = _super.prototype.getDrawCfg.call(this, mappingDatum);\n        return __assign(__assign({}, shapeCfg), { isStack: !!this.getAdjust('stack') });\n    };\n    return Point;\n}(Geometry));\nexport default Point;\n//# sourceMappingURL=point.js.map","import { __assign } from \"tslib\";\nimport { each, isEmpty, isEqual, last } from '@antv/util';\nimport { registerShape, registerShapeFactory } from '../base';\nimport { getStyle } from '../util/get-style';\nfunction getPath(points) {\n    var flag = points[0];\n    var i = 1;\n    var path = [['M', flag.x, flag.y]];\n    while (i < points.length) {\n        var c = points[i];\n        if (c.x !== points[i - 1].x || c.y !== points[i - 1].y) {\n            path.push(['L', c.x, c.y]);\n            if (c.x === flag.x && c.y === flag.y && i < points.length - 1) {\n                flag = points[i + 1];\n                path.push(['Z']);\n                path.push(['M', flag.x, flag.y]);\n                i++;\n            }\n        }\n        i++;\n    }\n    if (!isEqual(last(path), flag)) {\n        path.push(['L', flag.x, flag.y]);\n    }\n    path.push(['Z']);\n    return path;\n}\nvar PolygonShapeFactory = registerShapeFactory('polygon', {\n    defaultShapeType: 'polygon',\n    getDefaultPoints: function (pointInfo) {\n        var points = [];\n        each(pointInfo.x, function (subX, index) {\n            var subY = pointInfo.y[index];\n            points.push({\n                x: subX,\n                y: subY,\n            });\n        });\n        return points;\n    },\n});\nregisterShape('polygon', 'polygon', {\n    draw: function (cfg, container) {\n        if (!isEmpty(cfg.points)) {\n            var shapeAttrs = getStyle(cfg, true, true);\n            var path = this.parsePath(getPath(cfg.points));\n            return container.addShape('path', {\n                attrs: __assign(__assign({}, shapeAttrs), { path: path }),\n                name: 'polygon',\n            });\n        }\n    },\n    getMarker: function (markerCfg) {\n        var color = markerCfg.color;\n        return {\n            symbol: 'square',\n            style: {\n                r: 4,\n                fill: color,\n            },\n        };\n    },\n});\nexport default PolygonShapeFactory;\n//# sourceMappingURL=index.js.map","import { __extends } from \"tslib\";\nimport { isArray } from '@antv/util';\nimport Geometry from './base';\n/** 引入 Path 对应的 ShapeFactory */\nimport './shape/polygon';\n/**\n * Polygon 几何标记。\n * 常用于绘制色块图、日历图等。\n */\nvar Polygon = /** @class */ (function (_super) {\n    __extends(Polygon, _super);\n    function Polygon() {\n        var _this = _super !== null && _super.apply(this, arguments) || this;\n        _this.type = 'polygon';\n        _this.shapeType = 'polygon';\n        _this.generatePoints = true;\n        return _this;\n    }\n    /**\n     * 获取 Shape 的关键点数据。\n     * @param obj\n     * @returns\n     */\n    Polygon.prototype.createShapePointsCfg = function (obj) {\n        var cfg = _super.prototype.createShapePointsCfg.call(this, obj);\n        var x = cfg.x;\n        var y = cfg.y;\n        var temp;\n        // x y 都是数组时，不做处理\n        if (!(isArray(x) && isArray(y))) {\n            var xScale = this.getXScale();\n            var yScale = this.getYScale();\n            var xCount = xScale.values.length;\n            var yCount = yScale.values.length;\n            var xOffset = (0.5 * 1) / xCount;\n            var yOffset = (0.5 * 1) / yCount;\n            if (xScale.isCategory && yScale.isCategory) {\n                // 如果x,y都是分类\n                x = [x - xOffset, x - xOffset, x + xOffset, x + xOffset];\n                y = [y - yOffset, y + yOffset, y + yOffset, y - yOffset];\n            }\n            else if (isArray(x)) {\n                // x 是数组\n                temp = x;\n                x = [temp[0], temp[0], temp[1], temp[1]];\n                y = [y - yOffset / 2, y + yOffset / 2, y + yOffset / 2, y - yOffset / 2];\n            }\n            else if (isArray(y)) {\n                // y 是数组\n                temp = y;\n                y = [temp[0], temp[1], temp[1], temp[0]];\n                x = [x - xOffset / 2, x - xOffset / 2, x + xOffset / 2, x + xOffset / 2];\n            }\n            cfg.x = x;\n            cfg.y = y;\n        }\n        return cfg;\n    };\n    return Polygon;\n}(Geometry));\nexport default Polygon;\n//# sourceMappingURL=polygon.js.map","import { registerShapeFactory } from '../base';\nvar SchemaShapeFactory = registerShapeFactory('schema', {\n    defaultShapeType: '', // 'schema' is for some custom shapes, so will not specify defaultShapeType\n});\nexport default SchemaShapeFactory;\n//# sourceMappingURL=index.js.map","import { __extends } from \"tslib\";\nimport { getXDimensionLength } from '../util/coordinate';\nimport Geometry from './base';\n/** 引入对应的 ShapeFactory */\nimport './shape/schema';\nimport { getDefaultSize } from './util/shape-size';\n/**\n * Schema 几何标记，用于一些自定义图形的绘制，比如箱型图、股票图等。\n */\nvar Schema = /** @class */ (function (_super) {\n    __extends(Schema, _super);\n    function Schema() {\n        var _this = _super !== null && _super.apply(this, arguments) || this;\n        _this.type = 'schema';\n        _this.shapeType = 'schema';\n        _this.generatePoints = true;\n        return _this;\n    }\n    /**\n     * 获取 Shape 的关键点数据。\n     * @param record\n     * @returns\n     */\n    Schema.prototype.createShapePointsCfg = function (record) {\n        var cfg = _super.prototype.createShapePointsCfg.call(this, record);\n        // 计算每个 shape 的 size\n        var size;\n        var sizeAttr = this.getAttribute('size');\n        if (sizeAttr) {\n            size = this.getAttributeValues(sizeAttr, record)[0];\n            // 归一化\n            var coordinate = this.coordinate;\n            var coordinateWidth = getXDimensionLength(coordinate);\n            size = size / coordinateWidth;\n        }\n        else {\n            if (!this.defaultSize) {\n                this.defaultSize = getDefaultSize(this);\n            }\n            size = this.defaultSize;\n        }\n        cfg.size = size;\n        return cfg;\n    };\n    return Schema;\n}(Geometry));\nexport default Schema;\n//# sourceMappingURL=schema.js.map","import { __assign } from \"tslib\";\nimport { each, max, map, isArray } from '@antv/util';\nimport { registerShape, registerShapeFactory } from '../base';\nimport { getViolinPath } from '../util/get-path-points';\nimport { getStyle } from '../util/get-style';\nfunction normalizeSize(arr) {\n    if (!isArray(arr)) {\n        return [];\n    }\n    var maxValue = max(arr);\n    return map(arr, function (num) { return num / maxValue; });\n}\nvar ViolinShapeFactory = registerShapeFactory('violin', {\n    defaultShapeType: 'violin',\n    getDefaultPoints: function (pointInfo) {\n        var radius = pointInfo.size / 2;\n        var points = [];\n        var sizeArr = normalizeSize(pointInfo._size);\n        each(pointInfo.y, function (y, index) {\n            var offset = sizeArr[index] * radius;\n            var isMin = index === 0;\n            var isMax = index === pointInfo.y.length - 1;\n            points.push({\n                isMin: isMin,\n                isMax: isMax,\n                x: pointInfo.x - offset,\n                y: y,\n            });\n            points.unshift({\n                isMin: isMin,\n                isMax: isMax,\n                x: pointInfo.x + offset,\n                y: y,\n            });\n        });\n        return points;\n    },\n});\nregisterShape('violin', 'violin', {\n    draw: function (cfg, container) {\n        var shapeAttrs = getStyle(cfg, true, true);\n        var path = this.parsePath(getViolinPath(cfg.points));\n        return container.addShape('path', {\n            attrs: __assign(__assign({}, shapeAttrs), { path: path }),\n            name: 'violin',\n        });\n    },\n    getMarker: function (markerCfg) {\n        var color = markerCfg.color;\n        return {\n            symbol: 'circle',\n            style: {\n                r: 4,\n                fill: color,\n            },\n        };\n    },\n});\nexport default ViolinShapeFactory;\n//# sourceMappingURL=index.js.map","import { __extends } from \"tslib\";\nimport { get } from '@antv/util';\nimport { FIELD_ORIGIN } from '../constant';\nimport { getXDimensionLength } from '../util/coordinate';\nimport { getDefaultSize } from './util/shape-size';\nimport Geometry from './base';\n/** 引入 Path 对应的 ShapeFactory */\nimport './shape/violin';\n/**\n * Violin 几何标记。\n * 用于绘制小提琴图。\n */\nvar Violin = /** @class */ (function (_super) {\n    __extends(Violin, _super);\n    function Violin() {\n        var _this = _super !== null && _super.apply(this, arguments) || this;\n        _this.type = 'violin';\n        _this.shapeType = 'violin';\n        _this.generatePoints = true;\n        return _this;\n    }\n    /**\n     * 获取 Shape 的关键点数据。\n     * @param record\n     * @returns\n     */\n    Violin.prototype.createShapePointsCfg = function (record) {\n        var cfg = _super.prototype.createShapePointsCfg.call(this, record);\n        // 计算每个 shape 的 size\n        var size;\n        var sizeAttr = this.getAttribute('size');\n        if (sizeAttr) {\n            size = this.getAttributeValues(sizeAttr, record)[0];\n            // 归一化\n            var coordinate = this.coordinate;\n            var coordinateWidth = getXDimensionLength(coordinate);\n            size = size / coordinateWidth;\n        }\n        else {\n            if (!this.defaultSize) {\n                this.defaultSize = getDefaultSize(this);\n            }\n            size = this.defaultSize;\n        }\n        cfg.size = size;\n        cfg._size = get(record[FIELD_ORIGIN], [this._sizeField]);\n        return cfg;\n    };\n    /**\n     * @override\n     */\n    Violin.prototype.initAttributes = function () {\n        var attributeOption = this.attributeOption;\n        var sizeField = attributeOption.size\n            ? attributeOption.size.fields[0]\n            : this._sizeField\n                ? this._sizeField\n                : 'size';\n        this._sizeField = sizeField;\n        // fixme 干啥要删掉\n        delete attributeOption.size;\n        _super.prototype.initAttributes.call(this);\n    };\n    return Violin;\n}(Geometry));\nexport default Violin;\n//# sourceMappingURL=violin.js.map","import { each } from '@antv/util';\n/**\n * @ignore\n * Gets cpath\n * @param from\n * @param to\n * @returns\n */\nexport function getCPath(from, to) {\n    return ['C', (from.x * 1) / 2 + (to.x * 1) / 2, from.y, (from.x * 1) / 2 + (to.x * 1) / 2, to.y, to.x, to.y];\n}\n/**\n * @ignore\n * Gets qpath\n * @param to\n * @param center\n * @returns\n */\nexport function getQPath(to, center) {\n    var points = [];\n    points.push({\n        x: center.x,\n        y: center.y,\n    });\n    points.push(to);\n    var sub = ['Q'];\n    each(points, function (point) {\n        sub.push(point.x, point.y);\n    });\n    return sub;\n}\n//# sourceMappingURL=util.js.map","import { registerShape } from '../base';\nimport { getShapeAttrs } from './util';\n/**\n * 描边但不填充的区域图\n */\nregisterShape('area', 'line', {\n    draw: function (cfg, container) {\n        var attrs = getShapeAttrs(cfg, true, false, this);\n        var shape = container.addShape({\n            type: 'path',\n            attrs: attrs,\n            name: 'area',\n        });\n        return shape;\n    },\n    getMarker: function (markerCfg) {\n        var color = markerCfg.color;\n        return {\n            symbol: function (x, y, r) {\n                if (r === void 0) { r = 5.5; }\n                return [['M', x - r, y - 4], ['L', x + r, y - 4], ['L', x + r, y + 4], ['L', x - r, y + 4], ['Z']];\n            },\n            style: {\n                r: 5,\n                stroke: color,\n                fill: null,\n            },\n        };\n    },\n});\n//# sourceMappingURL=line.js.map","import { registerShape } from '../base';\nimport { getConstraint, getShapeAttrs } from './util';\n/**\n * 填充的平滑曲面图\n */\nregisterShape('area', 'smooth', {\n    draw: function (cfg, container) {\n        var coordinate = this.coordinate;\n        var attrs = getShapeAttrs(cfg, false, true, this, getConstraint(coordinate));\n        var shape = container.addShape({\n            type: 'path',\n            attrs: attrs,\n            name: 'area',\n        });\n        return shape;\n    },\n    getMarker: function (markerCfg) {\n        var color = markerCfg.color;\n        return {\n            symbol: function (x, y, r) {\n                if (r === void 0) { r = 5.5; }\n                return [['M', x - r, y - 4], ['L', x + r, y - 4], ['L', x + r, y + 4], ['L', x - r, y + 4], ['Z']];\n            },\n            style: {\n                r: 5,\n                fill: color,\n                fillOpacity: 1,\n            },\n        };\n    },\n});\n//# sourceMappingURL=smooth.js.map","import { registerShape } from '../base';\nimport { getConstraint, getShapeAttrs } from './util';\n/** 描边的平滑曲面图 */\nregisterShape('area', 'smooth-line', {\n    draw: function (cfg, container) {\n        var coordinate = this.coordinate;\n        var attrs = getShapeAttrs(cfg, true, true, this, getConstraint(coordinate));\n        var shape = container.addShape({\n            type: 'path',\n            attrs: attrs,\n            name: 'area',\n        });\n        return shape;\n    },\n    getMarker: function (markerCfg) {\n        var color = markerCfg.color;\n        return {\n            symbol: function (x, y, r) {\n                if (r === void 0) { r = 5.5; }\n                return [['M', x - r, y - 4], ['L', x + r, y - 4], ['L', x + r, y + 4], ['L', x - r, y + 4], ['Z']];\n            },\n            style: {\n                r: 5,\n                stroke: color,\n                fill: null,\n            },\n        };\n    },\n});\n//# sourceMappingURL=smooth-line.js.map","import { __assign } from \"tslib\";\nimport { getArcPath } from '../../../util/graphics';\nimport { registerShape } from '../base';\nimport { getStyle } from '../util/get-style';\nimport { getCPath, getQPath } from './util';\nfunction getArcShapePath(from, to, center) {\n    var sub = getQPath(to, center);\n    var path = [['M', from.x, from.y]];\n    path.push(sub);\n    return path;\n}\nfunction getArcShapeWeightPath(points, center) {\n    var arc1 = getQPath(points[1], center);\n    var arc2 = getQPath(points[3], center);\n    var path = [['M', points[0].x, points[0].y]];\n    path.push(arc2);\n    path.push(['L', points[3].x, points[3].y]);\n    path.push(['L', points[2].x, points[2].y]);\n    path.push(arc1);\n    path.push(['L', points[1].x, points[1].y]);\n    path.push(['L', points[0].x, points[0].y]);\n    path.push(['Z']);\n    return path;\n}\n// 弧线包括笛卡尔坐标系下的半圆弧线、极坐标系下以圆心为控制点的二阶曲线、笛卡尔坐标系下带权重的三阶曲线、极坐标系下带权重的以圆心为控制点的二阶曲线\nregisterShape('edge', 'arc', {\n    draw: function (cfg, container) {\n        var style = getStyle(cfg, true, false, 'lineWidth');\n        var points = cfg.points;\n        var type = points.length > 2 ? 'weight' : 'normal';\n        var path;\n        if (cfg.isInCircle) {\n            var center = { x: 0, y: 1 };\n            if (type === 'normal') {\n                path = getArcShapePath(points[0], points[1], center);\n            }\n            else {\n                style.fill = style.stroke;\n                path = getArcShapeWeightPath(points, center);\n            }\n            path = this.parsePath(path);\n            return container.addShape('path', {\n                attrs: __assign(__assign({}, style), { path: path }),\n            });\n        }\n        else {\n            if (type === 'normal') {\n                points = this.parsePoints(points);\n                path = getArcPath((points[1].x + points[0].x) / 2, points[0].y, Math.abs(points[1].x - points[0].x) / 2, Math.PI, Math.PI * 2);\n                return container.addShape('path', {\n                    attrs: __assign(__assign({}, style), { path: path }),\n                });\n            }\n            else {\n                var c1 = getCPath(points[1], points[3]);\n                var c2 = getCPath(points[2], points[0]);\n                path = [\n                    ['M', points[0].x, points[0].y],\n                    ['L', points[1].x, points[1].y],\n                    c1,\n                    ['L', points[3].x, points[3].y],\n                    ['L', points[2].x, points[2].y],\n                    c2,\n                    ['Z'],\n                ];\n                path = this.parsePath(path);\n                style.fill = style.stroke;\n                return container.addShape('path', {\n                    attrs: __assign(__assign({}, style), { path: path }),\n                });\n            }\n        }\n    },\n    getMarker: function (markerCfg) {\n        return {\n            symbol: 'circle',\n            style: {\n                r: 4.5,\n                fill: markerCfg.color,\n            },\n        };\n    },\n});\n//# sourceMappingURL=arc.js.map","import { __assign } from \"tslib\";\nimport { registerShape } from '../base';\nimport { getStyle } from '../util/get-style';\nimport { getCPath } from './util';\nfunction getSmoothPath(from, to) {\n    var sub = getCPath(from, to);\n    var path = [['M', from.x, from.y]];\n    path.push(sub);\n    return path;\n}\nregisterShape('edge', 'smooth', {\n    draw: function (cfg, container) {\n        var style = getStyle(cfg, true, false, 'lineWidth');\n        var points = cfg.points;\n        var path = this.parsePath(getSmoothPath(points[0], points[1]));\n        return container.addShape('path', {\n            attrs: __assign(__assign({}, style), { path: path }),\n        });\n    },\n    getMarker: function (markerCfg) {\n        return {\n            symbol: 'circle',\n            style: {\n                r: 4.5,\n                fill: markerCfg.color,\n            },\n        };\n    },\n});\n//# sourceMappingURL=smooth.js.map","import { __assign } from \"tslib\";\nimport { each } from '@antv/util';\nimport { registerShape } from '../base';\nimport { getStyle } from '../util/get-style';\nvar CORNER_PERCENT = 1 / 3;\nfunction getVHVPath(from, to) {\n    var points = [];\n    points.push({\n        x: from.x,\n        y: from.y * (1 - CORNER_PERCENT) + to.y * CORNER_PERCENT,\n    });\n    points.push({\n        x: to.x,\n        y: from.y * (1 - CORNER_PERCENT) + to.y * CORNER_PERCENT,\n    });\n    points.push(to);\n    var path = [['M', from.x, from.y]];\n    each(points, function (point) {\n        path.push(['L', point.x, point.y]);\n    });\n    return path;\n}\nregisterShape('edge', 'vhv', {\n    draw: function (cfg, container) {\n        var style = getStyle(cfg, true, false, 'lineWidth');\n        var points = cfg.points;\n        var path = this.parsePath(getVHVPath(points[0], points[1]));\n        return container.addShape('path', {\n            attrs: __assign(__assign({}, style), { path: path }),\n        });\n    },\n    getMarker: function (markerCfg) {\n        return {\n            symbol: 'circle',\n            style: {\n                r: 4.5,\n                fill: markerCfg.color,\n            },\n        };\n    },\n});\n//# sourceMappingURL=vhv.js.map","import { __assign } from \"tslib\";\nimport { registerShape } from '../base';\nimport { getStyle } from '../util/get-style';\nimport { getFunnelPath, getRectPoints } from './util';\n/** 漏斗图 */\nregisterShape('interval', 'funnel', {\n    getPoints: function (shapePoint) {\n        shapePoint.size = shapePoint.size * 2; // 漏斗图的 size 是柱状图的两倍\n        return getRectPoints(shapePoint);\n    },\n    draw: function (cfg, container) {\n        var style = getStyle(cfg, false, true);\n        var path = this.parsePath(getFunnelPath(cfg.points, cfg.nextPoints, false));\n        var shape = container.addShape('path', {\n            attrs: __assign(__assign({}, style), { path: path }),\n            name: 'interval',\n        });\n        return shape;\n    },\n    getMarker: function (markerCfg) {\n        var color = markerCfg.color;\n        return {\n            symbol: 'square',\n            style: {\n                r: 4,\n                fill: color,\n            },\n        };\n    },\n});\n//# sourceMappingURL=funnel.js.map","import { __assign } from \"tslib\";\nimport { registerShape } from '../base';\nimport { BACKGROUND_SHAPE } from '../constant';\nimport { getBackgroundRectStyle, getStyle } from '../util/get-style';\nimport { getBackgroundRectPath, getRectPath } from './util';\n/** 描边柱状图 */\nregisterShape('interval', 'hollow-rect', {\n    draw: function (cfg, container) {\n        var style = getStyle(cfg, true, false);\n        var group = container;\n        var backgroundCfg = cfg === null || cfg === void 0 ? void 0 : cfg.background;\n        if (backgroundCfg) {\n            group = container.addGroup();\n            var backgroundStyle = getBackgroundRectStyle(cfg);\n            var backgroundPath = getBackgroundRectPath(cfg, this.parsePoints(cfg.points), this.coordinate);\n            group.addShape('path', {\n                attrs: __assign(__assign({}, backgroundStyle), { path: backgroundPath }),\n                capture: false,\n                zIndex: -1,\n                name: BACKGROUND_SHAPE,\n            });\n        }\n        var path = this.parsePath(getRectPath(cfg.points));\n        var shape = group.addShape('path', {\n            attrs: __assign(__assign({}, style), { path: path }),\n            name: 'interval',\n        });\n        return backgroundCfg ? group : shape;\n    },\n    getMarker: function (markerCfg) {\n        var color = markerCfg.color, isInPolar = markerCfg.isInPolar;\n        if (isInPolar) {\n            return {\n                symbol: 'circle',\n                style: {\n                    r: 4.5,\n                    stroke: color,\n                    fill: null,\n                },\n            };\n        }\n        return {\n            symbol: 'square',\n            style: {\n                r: 4,\n                stroke: color,\n                fill: null,\n            },\n        };\n    },\n});\n//# sourceMappingURL=hollow-rect.js.map","import { __assign } from \"tslib\";\nimport { isArray } from '@antv/util';\nimport { registerShape } from '../base';\nimport { getStyle } from '../util/get-style';\nimport { getRectPath } from './util';\nimport { omit } from '../../../util/helper';\n// 根据数据点生成 Line 的两个关键点\nfunction getLinePoints(pointInfo) {\n    var x = pointInfo.x, y = pointInfo.y, y0 = pointInfo.y0;\n    if (isArray(y)) {\n        return y.map(function (yItem, idx) {\n            return {\n                x: isArray(x) ? x[idx] : x,\n                y: yItem,\n            };\n        });\n    }\n    // 起始点从 y0 开始\n    return [\n        { x: x, y: y0 },\n        { x: x, y: y },\n    ];\n}\nregisterShape('interval', 'line', {\n    getPoints: function (shapePoint) {\n        return getLinePoints(shapePoint);\n    },\n    draw: function (cfg, container) {\n        var style = getStyle(cfg, true, false, 'lineWidth');\n        var newStyle = omit(__assign({}, style), ['fill']);\n        var path = this.parsePath(getRectPath(cfg.points, false));\n        var shape = container.addShape('path', {\n            attrs: __assign(__assign({}, newStyle), { path: path }),\n            name: 'interval',\n        });\n        return shape;\n    },\n    getMarker: function (markerCfg) {\n        var color = markerCfg.color;\n        return {\n            symbol: function (x, y, r) {\n                return [\n                    ['M', x, y - r],\n                    ['L', x, y + r],\n                ];\n            },\n            style: {\n                r: 5,\n                stroke: color,\n            },\n        };\n    },\n});\n//# sourceMappingURL=line.js.map","import { __assign } from \"tslib\";\nimport { registerShape } from '../base';\nimport { getStyle } from '../util/get-style';\nimport { getFunnelPath, getRectPoints } from './util';\n/** 金字塔图，尖底漏斗图 */\nregisterShape('interval', 'pyramid', {\n    getPoints: function (shapePoint) {\n        shapePoint.size = shapePoint.size * 2; // 漏斗图的 size 是柱状图的两倍\n        return getRectPoints(shapePoint);\n    },\n    draw: function (cfg, container) {\n        var style = getStyle(cfg, false, true);\n        var path = this.parsePath(getFunnelPath(cfg.points, cfg.nextPoints, true));\n        var shape = container.addShape('path', {\n            attrs: __assign(__assign({}, style), { path: path }),\n            name: 'interval',\n        });\n        return shape;\n    },\n    getMarker: function (markerCfg) {\n        var color = markerCfg.color;\n        return {\n            symbol: 'square',\n            style: {\n                r: 4,\n                fill: color,\n            },\n        };\n    },\n});\n//# sourceMappingURL=pyramid.js.map","import { __assign, __read } from \"tslib\";\nimport { isArray } from '@antv/util';\nimport { registerShape } from '../base';\nimport { getStyle } from '../util/get-style';\n// 根据数据点生成 tick shape 的 6 个关键点\nfunction getTickPoints(pointInfo) {\n    var _a;\n    var x = pointInfo.x, y = pointInfo.y, y0 = pointInfo.y0, size = pointInfo.size;\n    var yMin;\n    var yMax;\n    if (isArray(y)) {\n        _a = __read(y, 2), yMin = _a[0], yMax = _a[1];\n    }\n    else {\n        yMin = y0;\n        yMax = y;\n    }\n    var xMax = x + size / 2;\n    var xMin = x - size / 2;\n    // tick 关键点顺序\n    // 4 - 1 - 5\n    //     |\n    // 2 - 0 - 3\n    return [\n        { x: x, y: yMin },\n        { x: x, y: yMax },\n        { x: xMin, y: yMin },\n        { x: xMax, y: yMin },\n        { x: xMin, y: yMax },\n        { x: xMax, y: yMax },\n    ];\n}\n// 根据 tick 关键点绘制 path\nfunction getTickPath(points) {\n    return [\n        ['M', points[0].x, points[0].y],\n        ['L', points[1].x, points[1].y],\n        ['M', points[2].x, points[2].y],\n        ['L', points[3].x, points[3].y],\n        ['M', points[4].x, points[4].y],\n        ['L', points[5].x, points[5].y],\n    ];\n}\n/** I 形状柱状图，常用于 error bar chart */\nregisterShape('interval', 'tick', {\n    getPoints: function (shapePoint) {\n        return getTickPoints(shapePoint);\n    },\n    draw: function (cfg, container) {\n        var style = getStyle(cfg, true, false);\n        var path = this.parsePath(getTickPath(cfg.points));\n        var shape = container.addShape('path', {\n            attrs: __assign(__assign({}, style), { path: path }),\n            name: 'interval',\n        });\n        return shape;\n    },\n    getMarker: function (markerCfg) {\n        var color = markerCfg.color;\n        return {\n            symbol: function (x, y, r) {\n                return [\n                    ['M', x - r / 2, y - r],\n                    ['L', x + r / 2, y - r],\n                    ['M', x, y - r],\n                    ['L', x, y + r],\n                    ['M', x - r / 2, y + r],\n                    ['L', x + r / 2, y + r],\n                ];\n            },\n            style: {\n                r: 5,\n                stroke: color,\n            },\n        };\n    },\n});\n//# sourceMappingURL=tick.js.map","import { __assign } from \"tslib\";\nimport { each } from '@antv/util';\nimport { registerShape } from '../base';\nimport { getPathPoints } from '../util/get-path-points';\nimport { getStyle } from '../util/get-style';\nimport { getLineMarker } from './util';\nvar interpolateCallback = function (point, nextPoint, shapeType) {\n    var x = point.x;\n    var y = point.y;\n    var nextX = nextPoint.x;\n    var nextY = nextPoint.y;\n    var result;\n    switch (shapeType) {\n        case 'hv':\n            result = [{ x: nextX, y: y }];\n            break;\n        case 'vh':\n            result = [{ x: x, y: nextY }];\n            break;\n        case 'hvh':\n            var middleX = (nextX + x) / 2;\n            result = [\n                { x: middleX, y: y },\n                { x: middleX, y: nextY },\n            ];\n            break;\n        case 'vhv':\n            var middleY = (y + nextY) / 2;\n            result = [\n                { x: x, y: middleY },\n                { x: nextX, y: middleY },\n            ];\n            break;\n        default:\n            break;\n    }\n    return result;\n};\nfunction getInterpolatePoints(points, shapeType) {\n    var result = [];\n    each(points, function (point, index) {\n        var nextPoint = points[index + 1];\n        result.push(point);\n        if (nextPoint) {\n            var interpolatePoint = interpolateCallback(point, nextPoint, shapeType);\n            result = result.concat(interpolatePoint);\n        }\n    });\n    return result;\n}\n// 插值的图形path，不考虑null\nfunction getInterpolatePath(points) {\n    return points.map(function (point, index) {\n        return index === 0 ? ['M', point.x, point.y] : ['L', point.x, point.y];\n    });\n}\n// 插值的图形\nfunction getInterpolateShapeAttrs(cfg, shapeType) {\n    var points = getPathPoints(cfg.points, cfg.connectNulls, cfg.showSinglePoint); // 根据 connectNulls 值处理 points\n    var path = [];\n    each(points, function (eachLinePoints) {\n        var interpolatePoints = getInterpolatePoints(eachLinePoints, shapeType);\n        path = path.concat(getInterpolatePath(interpolatePoints));\n    });\n    return __assign(__assign({}, getStyle(cfg, true, false, 'lineWidth')), { path: path });\n}\n// step line\neach(['hv', 'vh', 'hvh', 'vhv'], function (shapeType) {\n    registerShape('line', shapeType, {\n        draw: function (cfg, container) {\n            var attrs = getInterpolateShapeAttrs(cfg, shapeType);\n            var shape = container.addShape({\n                type: 'path',\n                attrs: attrs,\n                name: 'line',\n            });\n            return shape;\n        },\n        getMarker: function (markerCfg) {\n            return getLineMarker(markerCfg, shapeType);\n        },\n    });\n});\n//# sourceMappingURL=step.js.map","import { __assign } from \"tslib\";\nimport { isArray, isNil } from '@antv/util';\nimport { registerShape } from '../base';\nimport { getStyle } from '../util/get-style';\nfunction parseValue(value) {\n    var array = !isArray(value) ? [value] : value;\n    var min = array[0]; // 最小值\n    var max = array[array.length - 1]; // 最大值\n    var min1 = array.length > 1 ? array[1] : min;\n    var max1 = array.length > 3 ? array[3] : max;\n    var median = array.length > 2 ? array[2] : min1;\n    return {\n        min: min,\n        max: max,\n        min1: min1,\n        max1: max1,\n        median: median,\n    };\n}\nfunction getBoxPoints(x, y, size) {\n    var halfSize = size / 2;\n    var pointsArray;\n    if (isArray(y)) {\n        // 2维\n        var _a = parseValue(y), min = _a.min, max = _a.max, median = _a.median, min1 = _a.min1, max1 = _a.max1;\n        var minX = x - halfSize;\n        var maxX = x + halfSize;\n        pointsArray = [\n            [minX, max],\n            [maxX, max],\n            [x, max],\n            [x, max1],\n            [minX, min1],\n            [minX, max1],\n            [maxX, max1],\n            [maxX, min1],\n            [x, min1],\n            [x, min],\n            [minX, min],\n            [maxX, min],\n            [minX, median],\n            [maxX, median],\n        ];\n    }\n    else {\n        // 只有一个维度\n        y = isNil(y) ? 0.5 : y;\n        var _b = parseValue(x), min = _b.min, max = _b.max, median = _b.median, min1 = _b.min1, max1 = _b.max1;\n        var minY = y - halfSize;\n        var maxY = y + halfSize;\n        pointsArray = [\n            [min, minY],\n            [min, maxY],\n            [min, y],\n            [min1, y],\n            [min1, minY],\n            [min1, maxY],\n            [max1, maxY],\n            [max1, minY],\n            [max1, y],\n            [max, y],\n            [max, minY],\n            [max, maxY],\n            [median, minY],\n            [median, maxY],\n        ];\n    }\n    return pointsArray.map(function (arr) {\n        return {\n            x: arr[0],\n            y: arr[1],\n        };\n    });\n}\nfunction getBoxPath(points) {\n    return [\n        ['M', points[0].x, points[0].y],\n        ['L', points[1].x, points[1].y],\n        ['M', points[2].x, points[2].y],\n        ['L', points[3].x, points[3].y],\n        ['M', points[4].x, points[4].y],\n        ['L', points[5].x, points[5].y],\n        ['L', points[6].x, points[6].y],\n        ['L', points[7].x, points[7].y],\n        ['L', points[4].x, points[4].y],\n        ['Z'],\n        ['M', points[8].x, points[8].y],\n        ['L', points[9].x, points[9].y],\n        ['M', points[10].x, points[10].y],\n        ['L', points[11].x, points[11].y],\n        ['M', points[12].x, points[12].y],\n        ['L', points[13].x, points[13].y],\n    ];\n}\n// box shape\nregisterShape('schema', 'box', {\n    getPoints: function (shapePoint) {\n        var x = shapePoint.x, y = shapePoint.y, size = shapePoint.size;\n        return getBoxPoints(x, y, size);\n    },\n    draw: function (cfg, container) {\n        var style = getStyle(cfg, true, false);\n        var path = this.parsePath(getBoxPath(cfg.points));\n        var shape = container.addShape('path', {\n            attrs: __assign(__assign({}, style), { path: path, name: 'schema' }),\n        });\n        return shape;\n    },\n    getMarker: function (markerCfg) {\n        var color = markerCfg.color;\n        return {\n            symbol: function (x, y, r) {\n                var yValues = [y - 6, y - 3, y, y + 3, y + 6];\n                var points = getBoxPoints(x, yValues, r);\n                return [\n                    ['M', points[0].x + 1, points[0].y],\n                    ['L', points[1].x - 1, points[1].y],\n                    ['M', points[2].x, points[2].y],\n                    ['L', points[3].x, points[3].y],\n                    ['M', points[4].x, points[4].y],\n                    ['L', points[5].x, points[5].y],\n                    ['L', points[6].x, points[6].y],\n                    ['L', points[7].x, points[7].y],\n                    ['L', points[4].x, points[4].y],\n                    ['Z'],\n                    ['M', points[8].x, points[8].y],\n                    ['L', points[9].x, points[9].y],\n                    ['M', points[10].x + 1, points[10].y],\n                    ['L', points[11].x - 1, points[11].y],\n                    ['M', points[12].x, points[12].y],\n                    ['L', points[13].x, points[13].y],\n                ];\n            },\n            style: {\n                r: 6,\n                lineWidth: 1,\n                stroke: color,\n            },\n        };\n    },\n});\n//# sourceMappingURL=box.js.map","import { __assign } from \"tslib\";\nimport { isArray } from '@antv/util';\nimport { padEnd } from '../../../util/helper';\nimport { registerShape } from '../base';\nimport { getStyle } from '../util/get-style';\nfunction getCandleYValues(value) {\n    var array = !isArray(value) ? [value] : value;\n    // 从大到小排序\n    var sorted = array.sort(function (a, b) { return b - a; });\n    return padEnd(sorted, 4, sorted[sorted.length - 1]);\n}\n// get candle shape's key points\nfunction getCandlePoints(x, y, size) {\n    var yValues = getCandleYValues(y);\n    return [\n        { x: x, y: yValues[0] },\n        { x: x, y: yValues[1] },\n        { x: x - size / 2, y: yValues[2] },\n        { x: x - size / 2, y: yValues[1] },\n        { x: x + size / 2, y: yValues[1] },\n        { x: x + size / 2, y: yValues[2] },\n        { x: x, y: yValues[2] },\n        { x: x, y: yValues[3] },\n    ];\n}\nfunction getCandlePath(points) {\n    return [\n        ['M', points[0].x, points[0].y],\n        ['L', points[1].x, points[1].y],\n        ['M', points[2].x, points[2].y],\n        ['L', points[3].x, points[3].y],\n        ['L', points[4].x, points[4].y],\n        ['L', points[5].x, points[5].y],\n        ['Z'],\n        ['M', points[6].x, points[6].y],\n        ['L', points[7].x, points[7].y],\n    ];\n}\n// k line shape\nregisterShape('schema', 'candle', {\n    getPoints: function (shapePoint) {\n        var x = shapePoint.x, y = shapePoint.y, size = shapePoint.size;\n        return getCandlePoints(x, y, size);\n    },\n    draw: function (cfg, container) {\n        var style = getStyle(cfg, true, true);\n        var path = this.parsePath(getCandlePath(cfg.points));\n        var shape = container.addShape('path', {\n            attrs: __assign(__assign({}, style), { path: path, name: 'schema' }),\n        });\n        return shape;\n    },\n    getMarker: function (markerCfg) {\n        var color = markerCfg.color;\n        return {\n            symbol: function (x, y, r) {\n                var yValues = [y + 7.5, y + 3, y - 3, y - 7.5];\n                var points = getCandlePoints(x, yValues, r);\n                return [\n                    ['M', points[0].x, points[0].y],\n                    ['L', points[1].x, points[1].y],\n                    ['M', points[2].x, points[2].y],\n                    ['L', points[3].x, points[3].y],\n                    ['L', points[4].x, points[4].y],\n                    ['L', points[5].x, points[5].y],\n                    ['Z'],\n                    ['M', points[6].x, points[6].y],\n                    ['L', points[7].x, points[7].y],\n                ];\n            },\n            style: {\n                lineWidth: 1,\n                stroke: color,\n                fill: color,\n                r: 6,\n            },\n        };\n    },\n});\n//# sourceMappingURL=candle.js.map","import { __assign } from \"tslib\";\nimport { isEmpty, clamp } from '@antv/util';\nimport { registerShape } from '../base';\nimport { getStyle } from '../util/get-style';\nfunction getRectAttrs(points, size) {\n    var width = Math.abs(points[0].x - points[2].x);\n    var height = Math.abs(points[0].y - points[2].y);\n    var len = Math.min(width, height);\n    if (size) {\n        len = clamp(size, 0, Math.min(width, height));\n    }\n    len = len / 2;\n    var centerX = (points[0].x + points[2].x) / 2;\n    var centerY = (points[0].y + points[2].y) / 2;\n    return {\n        x: centerX - len,\n        y: centerY - len,\n        width: len * 2,\n        height: len * 2,\n    };\n}\nregisterShape('polygon', 'square', {\n    draw: function (cfg, container) {\n        if (!isEmpty(cfg.points)) {\n            var shapeAttrs = getStyle(cfg, true, true);\n            var points = this.parsePoints(cfg.points); // 转换为画布坐标\n            return container.addShape('rect', {\n                attrs: __assign(__assign({}, shapeAttrs), getRectAttrs(points, cfg.size)),\n                name: 'polygon',\n            });\n        }\n    },\n    getMarker: function (markerCfg) {\n        var color = markerCfg.color;\n        return {\n            symbol: 'square',\n            style: {\n                r: 4,\n                fill: color,\n            },\n        };\n    },\n});\n//# sourceMappingURL=square.js.map","import { each } from '@antv/util';\nimport { MarkerSymbols } from '../../../util/marker';\nimport { registerShape } from '../base';\nimport { drawPoints, HOLLOW_SHAPES } from './util';\n// 添加 hollowShape\neach(HOLLOW_SHAPES, function (shapeName) {\n    registerShape('point', shapeName, {\n        draw: function (cfg, container) {\n            return drawPoints(this, cfg, container, shapeName, true);\n        },\n        getMarker: function (markerCfg) {\n            var color = markerCfg.color;\n            return {\n                symbol: MarkerSymbols[shapeName],\n                style: {\n                    r: 4.5,\n                    stroke: color,\n                    fill: null,\n                },\n            };\n        },\n    });\n});\n//# sourceMappingURL=hollow.js.map","import { __values } from \"tslib\";\nimport { registerShape } from '../base';\nimport { getStyle } from '../util/get-style';\nregisterShape('point', 'image', {\n    draw: function (cfg, container) {\n        var e_1, _a;\n        var size = getStyle(cfg, false, false, 'r').r;\n        var points = this.parsePoints(cfg.points);\n        var pointPosition = points[0];\n        if (cfg.isStack) {\n            pointPosition = points[1];\n        }\n        else if (points.length > 1) {\n            var group = container.addGroup();\n            try {\n                for (var points_1 = __values(points), points_1_1 = points_1.next(); !points_1_1.done; points_1_1 = points_1.next()) {\n                    var point = points_1_1.value;\n                    group.addShape('image', {\n                        attrs: {\n                            x: point.x - size / 2,\n                            y: point.y - size,\n                            width: size,\n                            height: size,\n                            img: cfg.shape[1],\n                        },\n                    });\n                }\n            }\n            catch (e_1_1) { e_1 = { error: e_1_1 }; }\n            finally {\n                try {\n                    if (points_1_1 && !points_1_1.done && (_a = points_1.return)) _a.call(points_1);\n                }\n                finally { if (e_1) throw e_1.error; }\n            }\n            return group;\n        }\n        return container.addShape('image', {\n            attrs: {\n                x: pointPosition.x - size / 2,\n                y: pointPosition.y - size,\n                width: size,\n                height: size,\n                img: cfg.shape[1],\n            },\n        });\n    },\n    getMarker: function (markerCfg) {\n        var color = markerCfg.color;\n        return {\n            symbol: 'circle',\n            style: {\n                r: 4.5,\n                fill: color,\n            },\n        };\n    },\n});\n//# sourceMappingURL=image.js.map","import { each } from '@antv/util';\nimport { MarkerSymbols } from '../../../util/marker';\nimport { registerShape } from '../base';\nimport { drawPoints, SHAPES } from './util';\n// 所有的 SHAPES 都注册一下\neach(SHAPES, function (shapeName) {\n    registerShape('point', shapeName, {\n        draw: function (cfg, container) {\n            return drawPoints(this, cfg, container, shapeName, false);\n        },\n        getMarker: function (markerCfg) {\n            var color = markerCfg.color;\n            return {\n                symbol: MarkerSymbols[shapeName] || shapeName,\n                style: {\n                    r: 4.5,\n                    fill: color,\n                },\n            };\n        },\n    });\n});\n//# sourceMappingURL=solid.js.map","import { __assign } from \"tslib\";\nimport { registerShape } from '../base';\nimport { getSmoothViolinPath } from '../util/get-path-points';\nimport { getStyle } from '../util/get-style';\n/**\n * 平滑边界的小提琴图\n */\nregisterShape('violin', 'smooth', {\n    draw: function (cfg, container) {\n        var attrs = getStyle(cfg, true, true);\n        var path = this.parsePath(getSmoothViolinPath(cfg.points));\n        return container.addShape('path', {\n            attrs: __assign(__assign({}, attrs), { path: path }),\n        });\n    },\n    getMarker: function (markerCfg) {\n        var color = markerCfg.color;\n        return {\n            symbol: 'circle',\n            style: {\n                stroke: null,\n                r: 4,\n                fill: color,\n            },\n        };\n    },\n});\n//# sourceMappingURL=smooth.js.map","import { __assign } from \"tslib\";\nimport { registerShape } from '../base';\nimport { getSmoothViolinPath, getViolinPath } from '../util/get-path-points';\nimport { getStyle } from '../util/get-style';\n/**\n * 空心小提琴图\n */\nregisterShape('violin', 'hollow', {\n    draw: function (cfg, container) {\n        var attrs = getStyle(cfg, true, false);\n        var path = this.parsePath(getViolinPath(cfg.points));\n        return container.addShape('path', {\n            attrs: __assign(__assign({}, attrs), { path: path }),\n        });\n    },\n    getMarker: function (markerCfg) {\n        var color = markerCfg.color;\n        return {\n            symbol: 'circle',\n            style: {\n                r: 4,\n                fill: null,\n                stroke: color,\n            },\n        };\n    },\n});\n/**\n * 平滑边界的空心小提琴图\n */\nregisterShape('violin', 'hollow-smooth', {\n    draw: function (cfg, container) {\n        var attrs = getStyle(cfg, true, false);\n        var path = this.parsePath(getSmoothViolinPath(cfg.points));\n        return container.addShape('path', {\n            attrs: __assign(__assign({}, attrs), { path: path }),\n        });\n    },\n    getMarker: function (markerCfg) {\n        var color = markerCfg.color;\n        return {\n            symbol: 'circle',\n            style: {\n                r: 4,\n                fill: null,\n                stroke: color,\n            },\n        };\n    },\n});\n//# sourceMappingURL=hollow.js.map","import { __assign, __extends } from \"tslib\";\nimport { get, deepMix, isArray } from '@antv/util';\nimport GeometryLabel from './base';\n/**\n * 柱状图 label\n */\nvar IntervalLabel = /** @class */ (function (_super) {\n    __extends(IntervalLabel, _super);\n    function IntervalLabel() {\n        return _super !== null && _super.apply(this, arguments) || this;\n    }\n    /**\n     * 获取 interval label 的方向，取决于 value 的值是正还是负\n     * @param labelCfg\n     */\n    IntervalLabel.prototype.getLabelValueDir = function (mappingData) {\n        // points 中的 x/y 和 transpose 无关\n        var dim = 'y';\n        var points = mappingData.points;\n        return points[0][dim] <= points[2][dim] ? 1 : -1;\n    };\n    /**\n     * 重载：根据 interval 值的正负来调整 label 偏移量\n     * @param labelCfg\n     * @param index\n     * @param total\n     */\n    IntervalLabel.prototype.getLabelOffsetPoint = function (labelCfg, index, total, position) {\n        var _a;\n        var point = _super.prototype.getLabelOffsetPoint.call(this, labelCfg, index, total);\n        var coordinate = this.getCoordinate();\n        var transposed = coordinate.isTransposed;\n        var dim = transposed ? 'x' : 'y';\n        var dir = this.getLabelValueDir(labelCfg.mappingData);\n        point = __assign(__assign({}, point), (_a = {}, _a[dim] = point[dim] * dir, _a));\n        if (coordinate.isReflect('x')) {\n            point = __assign(__assign({}, point), { x: point.x * -1 });\n        }\n        if (coordinate.isReflect('y')) {\n            point = __assign(__assign({}, point), { y: point.y * -1 });\n        }\n        return point;\n    };\n    /**\n     * 重载：定制 interval label 的默认主题配置\n     * @param labelCfg\n     */\n    IntervalLabel.prototype.getThemedLabelCfg = function (labelCfg) {\n        var geometry = this.geometry;\n        var defaultLabelCfg = this.getDefaultLabelCfg();\n        var theme = geometry.theme;\n        // 如果 interval label position 设置为 middle，则将主题中的 offset 覆盖为 0\n        return deepMix({}, defaultLabelCfg, theme.labels, labelCfg.position === 'middle' ? { offset: 0 } : {}, labelCfg);\n    };\n    IntervalLabel.prototype.setLabelPosition = function (labelPointCfg, mappingData, index, position) {\n        var coordinate = this.getCoordinate();\n        var transposed = coordinate.isTransposed;\n        var shapePoints = mappingData.points;\n        var point0 = coordinate.convert(shapePoints[0]);\n        var point2 = coordinate.convert(shapePoints[2]);\n        var dir = this.getLabelValueDir(mappingData);\n        var top;\n        var right;\n        var bottom;\n        var left;\n        var shape = isArray(mappingData.shape) ? mappingData.shape[0] : mappingData.shape;\n        if (shape === 'funnel' || shape === 'pyramid') {\n            // 处理漏斗图\n            var nextPoints = get(mappingData, 'nextPoints');\n            var points = get(mappingData, 'points');\n            if (nextPoints) {\n                // 非漏斗图底部\n                var p0 = coordinate.convert(points[0]);\n                var p1 = coordinate.convert(points[1]);\n                var nextP0 = coordinate.convert(nextPoints[0]);\n                var nextP1 = coordinate.convert(nextPoints[1]);\n                // TODO: 使用包围盒的计算方法\n                if (transposed) {\n                    top = Math.min(nextP0.y, p0.y);\n                    bottom = Math.max(nextP0.y, p0.y);\n                    right = (p1.x + nextP1.x) / 2;\n                    left = (p0.x + nextP0.x) / 2;\n                }\n                else {\n                    top = Math.min((p1.y + nextP1.y) / 2, (p0.y + nextP0.y) / 2);\n                    bottom = Math.max((p1.y + nextP1.y) / 2, (p0.y + nextP0.y) / 2);\n                    right = nextP1.x;\n                    left = p0.x;\n                }\n            }\n            else {\n                top = Math.min(point2.y, point0.y);\n                bottom = Math.max(point2.y, point0.y);\n                right = point2.x;\n                left = point0.x;\n            }\n        }\n        else {\n            top = Math.min(point2.y, point0.y);\n            bottom = Math.max(point2.y, point0.y);\n            right = point2.x;\n            left = point0.x;\n        }\n        switch (position) {\n            case 'right':\n                labelPointCfg.x = right;\n                labelPointCfg.y = (top + bottom) / 2;\n                labelPointCfg.textAlign = get(labelPointCfg, 'textAlign', dir > 0 ? 'left' : 'right');\n                break;\n            case 'left':\n                labelPointCfg.x = left;\n                labelPointCfg.y = (top + bottom) / 2;\n                labelPointCfg.textAlign = get(labelPointCfg, 'textAlign', dir > 0 ? 'left' : 'right');\n                break;\n            case 'bottom':\n                if (transposed) {\n                    labelPointCfg.x = (right + left) / 2;\n                }\n                labelPointCfg.y = bottom;\n                labelPointCfg.textAlign = get(labelPointCfg, 'textAlign', 'center');\n                labelPointCfg.textBaseline = get(labelPointCfg, 'textBaseline', dir > 0 ? 'bottom' : 'top');\n                break;\n            case 'middle':\n                if (transposed) {\n                    labelPointCfg.x = (right + left) / 2;\n                }\n                labelPointCfg.y = (top + bottom) / 2;\n                labelPointCfg.textAlign = get(labelPointCfg, 'textAlign', 'center');\n                labelPointCfg.textBaseline = get(labelPointCfg, 'textBaseline', 'middle');\n                break;\n            case 'top':\n                if (transposed) {\n                    labelPointCfg.x = (right + left) / 2;\n                }\n                labelPointCfg.y = top;\n                labelPointCfg.textAlign = get(labelPointCfg, 'textAlign', 'center');\n                labelPointCfg.textBaseline = get(labelPointCfg, 'textBaseline', dir > 0 ? 'bottom' : 'top');\n                break;\n            default:\n                break;\n        }\n    };\n    return IntervalLabel;\n}(GeometryLabel));\nexport default IntervalLabel;\n//# sourceMappingURL=interval.js.map","import { __assign, __extends } from \"tslib\";\nimport { each, get, isArray, map, isNumber, isString } from '@antv/util';\nimport { getDistanceToCenter } from '../../util/coordinate';\nimport { getAngleByPoint } from '../../util/coordinate';\nimport GeometryLabel from './base';\nvar HALF_PI = Math.PI / 2;\n/**\n * 极坐标下的图形 label\n */\nvar PolarLabel = /** @class */ (function (_super) {\n    __extends(PolarLabel, _super);\n    function PolarLabel() {\n        return _super !== null && _super.apply(this, arguments) || this;\n    }\n    /**\n     * @override\n     * @desc 获取 label offset\n     * polar & theta coordinate support「string」type, should transform to 「number」\n     */\n    PolarLabel.prototype.getLabelOffset = function (offset) {\n        var coordinate = this.getCoordinate();\n        var actualOffset = 0;\n        if (isNumber(offset)) {\n            actualOffset = offset;\n        }\n        else if (isString(offset) && offset.indexOf('%') !== -1) {\n            var r = coordinate.getRadius();\n            if (coordinate.innerRadius > 0) {\n                r = r * (1 - coordinate.innerRadius);\n            }\n            actualOffset = parseFloat(offset) * 0.01 * r;\n        }\n        return actualOffset;\n    };\n    /**\n     * @override\n     * 获取 labelItems, 增加切片 percent\n     * @param mapppingArray\n     */\n    PolarLabel.prototype.getLabelItems = function (mapppingArray) {\n        var items = _super.prototype.getLabelItems.call(this, mapppingArray);\n        var yScale = this.geometry.getYScale();\n        return map(items, function (item) {\n            if (item && yScale) {\n                var percent = yScale.scale(get(item.data, yScale.field));\n                return __assign(__assign({}, item), { percent: percent });\n            }\n            return item;\n        });\n    };\n    /**\n     * @override\n     * 获取文本的对齐方式\n     * @param point\n     */\n    PolarLabel.prototype.getLabelAlign = function (point) {\n        var coordinate = this.getCoordinate();\n        var align;\n        if (point.labelEmit) {\n            align = point.angle <= Math.PI / 2 && point.angle >= -Math.PI / 2 ? 'left' : 'right';\n        }\n        else if (!coordinate.isTransposed) {\n            align = 'center';\n        }\n        else {\n            var center = coordinate.getCenter();\n            var offset = point.offset;\n            if (Math.abs(point.x - center.x) < 1) {\n                align = 'center';\n            }\n            else if (point.angle > Math.PI || point.angle <= 0) {\n                align = offset > 0 ? 'left' : 'right';\n            }\n            else {\n                align = offset > 0 ? 'right' : 'left';\n            }\n        }\n        return align;\n    };\n    /**\n     * @override\n     * 获取 label 的位置\n     * @param labelCfg\n     * @param mappingData\n     * @param index\n     */\n    PolarLabel.prototype.getLabelPoint = function (labelCfg, mappingData, index) {\n        var factor = 1;\n        var arcPoint;\n        var content = labelCfg.content[index];\n        if (this.isToMiddle(mappingData)) {\n            arcPoint = this.getMiddlePoint(mappingData.points);\n        }\n        else {\n            if (labelCfg.content.length === 1 && index === 0) {\n                index = 1;\n            }\n            else if (index === 0) {\n                factor = -1;\n            }\n            arcPoint = this.getArcPoint(mappingData, index);\n        }\n        var offset = labelCfg.offset * factor;\n        var middleAngle = this.getPointAngle(arcPoint);\n        var isLabelEmit = labelCfg.labelEmit;\n        var labelPositionCfg = this.getCirclePoint(middleAngle, offset, arcPoint, isLabelEmit);\n        if (labelPositionCfg.r === 0) {\n            // 如果文本位置位于圆心，则不展示\n            labelPositionCfg.content = '';\n        }\n        else {\n            labelPositionCfg.content = content;\n            labelPositionCfg.angle = middleAngle;\n            labelPositionCfg.color = mappingData.color;\n        }\n        labelPositionCfg.rotate = labelCfg.autoRotate\n            ? this.getLabelRotate(middleAngle, offset, isLabelEmit)\n            : labelCfg.rotate;\n        labelPositionCfg.start = {\n            x: arcPoint.x,\n            y: arcPoint.y,\n        };\n        return labelPositionCfg;\n    };\n    /**\n     * 获取圆弧的位置\n     */\n    PolarLabel.prototype.getArcPoint = function (mappingData, index) {\n        if (index === void 0) { index = 0; }\n        if (!isArray(mappingData.x) && !isArray(mappingData.y)) {\n            return {\n                x: mappingData.x,\n                y: mappingData.y,\n            };\n        }\n        return {\n            x: isArray(mappingData.x) ? mappingData.x[index] : mappingData.x,\n            y: isArray(mappingData.y) ? mappingData.y[index] : mappingData.y,\n        };\n    };\n    /**\n     * 计算坐标线点在极坐标系下角度\n     * @param point\n     */\n    PolarLabel.prototype.getPointAngle = function (point) {\n        return getAngleByPoint(this.getCoordinate(), point);\n    };\n    /**\n     * 获取坐标点与圆心形成的圆的位置信息\n     * @param angle\n     * @param offset\n     * @param point\n     * @param isLabelEmit\n     */\n    PolarLabel.prototype.getCirclePoint = function (angle, offset, point, isLabelEmit) {\n        var coordinate = this.getCoordinate();\n        var center = coordinate.getCenter();\n        var r = getDistanceToCenter(coordinate, point);\n        if (r === 0) {\n            return __assign(__assign({}, center), { r: r });\n        }\n        var labelAngle = angle;\n        if (coordinate.isTransposed && r > offset && !isLabelEmit) {\n            var appendAngle = Math.asin(offset / (2 * r));\n            labelAngle = angle + appendAngle * 2;\n        }\n        else {\n            r = r + offset;\n        }\n        return {\n            x: center.x + r * Math.cos(labelAngle),\n            y: center.y + r * Math.sin(labelAngle),\n            r: r,\n        };\n    };\n    /**\n     * 获取 label 的旋转角度\n     * @param angle\n     * @param offset\n     * @param isLabelEmit\n     */\n    PolarLabel.prototype.getLabelRotate = function (angle, offset, isLabelEmit) {\n        var rotate = angle + HALF_PI;\n        if (isLabelEmit) {\n            rotate -= HALF_PI;\n        }\n        if (rotate) {\n            if (rotate > HALF_PI) {\n                rotate = rotate - Math.PI;\n            }\n            else if (rotate < -HALF_PI) {\n                rotate = rotate + Math.PI;\n            }\n        }\n        return rotate;\n    };\n    // 获取中心的位置\n    PolarLabel.prototype.getMiddlePoint = function (points) {\n        var coordinate = this.getCoordinate();\n        var count = points.length;\n        var middlePoint = {\n            x: 0,\n            y: 0,\n        };\n        each(points, function (point) {\n            middlePoint.x += point.x;\n            middlePoint.y += point.y;\n        });\n        middlePoint.x /= count;\n        middlePoint.y /= count;\n        middlePoint = coordinate.convert(middlePoint);\n        return middlePoint;\n    };\n    // 是否居中\n    PolarLabel.prototype.isToMiddle = function (mappingData) {\n        return mappingData.x.length > 2;\n    };\n    return PolarLabel;\n}(GeometryLabel));\nexport default PolarLabel;\n//# sourceMappingURL=polar.js.map","import { __assign, __extends } from \"tslib\";\nimport { deepMix, get, isArray } from '@antv/util';\nimport { getAngleByPoint } from '../../util/coordinate';\nimport { polarToCartesian } from '../../util/graphics';\nimport PolarLabel from './polar';\n/**\n * 饼图 label\n */\nvar PieLabel = /** @class */ (function (_super) {\n    __extends(PieLabel, _super);\n    function PieLabel() {\n        var _this = _super !== null && _super.apply(this, arguments) || this;\n        _this.defaultLayout = 'distribute';\n        return _this;\n    }\n    PieLabel.prototype.getDefaultLabelCfg = function (offset, position) {\n        var cfg = _super.prototype.getDefaultLabelCfg.call(this, offset, position);\n        return deepMix({}, cfg, get(this.geometry.theme, 'pieLabels', {}));\n    };\n    /** @override */\n    PieLabel.prototype.getLabelOffset = function (offset) {\n        return _super.prototype.getLabelOffset.call(this, offset) || 0;\n    };\n    PieLabel.prototype.getLabelRotate = function (angle, offset, isLabelLimit) {\n        var rotate;\n        if (offset < 0) {\n            rotate = angle;\n            if (rotate > Math.PI / 2) {\n                rotate = rotate - Math.PI;\n            }\n            if (rotate < -Math.PI / 2) {\n                rotate = rotate + Math.PI;\n            }\n        }\n        return rotate;\n    };\n    PieLabel.prototype.getLabelAlign = function (point) {\n        var coordinate = this.getCoordinate();\n        var center = coordinate.getCenter();\n        var align;\n        if (point.angle <= Math.PI / 2 && point.x >= center.x) {\n            align = 'left';\n        }\n        else {\n            align = 'right';\n        }\n        if (point.offset <= 0) {\n            if (align === 'right') {\n                align = 'left';\n            }\n            else {\n                align = 'right';\n            }\n        }\n        return align;\n    };\n    PieLabel.prototype.getArcPoint = function (point) {\n        return point;\n    };\n    PieLabel.prototype.getPointAngle = function (point) {\n        var coordinate = this.getCoordinate();\n        var startPoint = {\n            x: isArray(point.x) ? point.x[0] : point.x,\n            y: point.y[0],\n        };\n        var endPoint = {\n            x: isArray(point.x) ? point.x[1] : point.x,\n            y: point.y[1],\n        };\n        var angle;\n        var startAngle = getAngleByPoint(coordinate, startPoint);\n        if (point.points && point.points[0].y === point.points[1].y) {\n            angle = startAngle;\n        }\n        else {\n            var endAngle = getAngleByPoint(coordinate, endPoint);\n            if (startAngle >= endAngle) {\n                // 100% pie slice\n                endAngle = endAngle + Math.PI * 2;\n            }\n            angle = startAngle + (endAngle - startAngle) / 2;\n        }\n        return angle;\n    };\n    /** @override */\n    PieLabel.prototype.getCirclePoint = function (angle, offset) {\n        var coordinate = this.getCoordinate();\n        var center = coordinate.getCenter();\n        var r = coordinate.getRadius() + offset;\n        return __assign(__assign({}, polarToCartesian(center.x, center.y, r, angle)), { angle: angle, r: r });\n    };\n    return PieLabel;\n}(PolarLabel));\nexport default PieLabel;\n//# sourceMappingURL=pie.js.map","/**\n * 碰撞检测算法\n */\nexport function antiCollision(items, labelHeight, plotRange) {\n    var labels = items.filter(function (item) { return !item.invisible; });\n    // sorted by y, mutable\n    labels.sort(function (a, b) { return a.y - b.y; });\n    // adjust y position of labels to avoid overlapping\n    var overlapping = true;\n    var startY = plotRange.minY;\n    var endY = plotRange.maxY;\n    var totalHeight = Math.abs(startY - endY);\n    var i;\n    var maxY = 0;\n    var minY = Number.MIN_VALUE;\n    var boxes = labels.map(function (label) {\n        if (label.y > maxY) {\n            maxY = label.y;\n        }\n        if (label.y < minY) {\n            minY = label.y;\n        }\n        return {\n            content: label.content,\n            size: labelHeight,\n            targets: [label.y - startY],\n            pos: null,\n        };\n    });\n    minY -= startY;\n    if (maxY - startY > totalHeight) {\n        totalHeight = maxY - startY;\n    }\n    while (overlapping) {\n        /* eslint no-loop-func: 0 */\n        boxes.forEach(function (box) {\n            var target = (Math.min.apply(minY, box.targets) + Math.max.apply(minY, box.targets)) / 2;\n            box.pos = Math.min(Math.max(minY, target - box.size / 2), totalHeight - box.size);\n            box.pos = Math.max(0, box.pos);\n        });\n        // detect overlapping and join boxes\n        overlapping = false;\n        i = boxes.length;\n        while (i--) {\n            if (i > 0) {\n                var previousBox = boxes[i - 1];\n                var box = boxes[i];\n                if (previousBox.pos + previousBox.size > box.pos) {\n                    // overlapping\n                    previousBox.size += box.size;\n                    previousBox.targets = previousBox.targets.concat(box.targets);\n                    // overflow, shift up\n                    if (previousBox.pos + previousBox.size > totalHeight) {\n                        previousBox.pos = totalHeight - previousBox.size;\n                    }\n                    boxes.splice(i, 1); // removing box\n                    overlapping = true;\n                }\n            }\n        }\n    }\n    i = 0;\n    // step 4: normalize y and adjust x\n    boxes.forEach(function (b) {\n        var posInCompositeBox = startY + labelHeight / 2; // middle of the label\n        b.targets.forEach(function () {\n            labels[i].y = b.pos + posInCompositeBox;\n            posInCompositeBox += labelHeight;\n            i++;\n        });\n    });\n}\n//# sourceMappingURL=util.js.map","import { each } from '@antv/util';\nvar MAX_TIMES = 100;\n/**\n * @ignore\n * Greedy 贪婪算法\n */\nvar Greedy = /** @class */ (function () {\n    function Greedy(cfg) {\n        if (cfg === void 0) { cfg = {}; }\n        this.bitmap = {};\n        var _a = cfg.xGap, xGap = _a === void 0 ? 1 : _a, _b = cfg.yGap, yGap = _b === void 0 ? 8 : _b;\n        this.xGap = xGap;\n        this.yGap = yGap;\n    }\n    Greedy.prototype.hasGap = function (bbox) {\n        var hasGap = true;\n        var bitmap = this.bitmap;\n        var minX = Math.round(bbox.minX);\n        var maxX = Math.round(bbox.maxX);\n        var minY = Math.round(bbox.minY);\n        var maxY = Math.round(bbox.maxY);\n        for (var i = minX; i <= maxX; i += 1) {\n            if (!bitmap[i]) {\n                bitmap[i] = {};\n                continue;\n            }\n            if (i === minX || i === maxX) {\n                for (var j = minY; j <= maxY; j++) {\n                    if (bitmap[i][j]) {\n                        hasGap = false;\n                        break;\n                    }\n                }\n            }\n            else {\n                if (bitmap[i][minY] || bitmap[i][maxY]) {\n                    hasGap = false;\n                    break;\n                }\n            }\n        }\n        return hasGap;\n    };\n    Greedy.prototype.fillGap = function (bbox) {\n        var bitmap = this.bitmap;\n        var minX = Math.round(bbox.minX);\n        var maxX = Math.round(bbox.maxX);\n        var minY = Math.round(bbox.minY);\n        var maxY = Math.round(bbox.maxY);\n        // filling grid\n        for (var i = minX; i <= maxX; i += 1) {\n            if (!bitmap[i]) {\n                bitmap[i] = {};\n            }\n        }\n        for (var i = minX; i <= maxX; i += this.xGap) {\n            for (var j = minY; j <= maxY; j += this.yGap) {\n                bitmap[i][j] = true;\n            }\n            bitmap[i][maxY] = true;\n        }\n        // filling y edges\n        if (this.yGap !== 1) {\n            for (var i = minY; i <= maxY; i += 1) {\n                bitmap[minX][i] = true;\n                bitmap[maxX][i] = true;\n            }\n        }\n        // filling x edges\n        if (this.xGap !== 1) {\n            for (var i = minX; i <= maxX; i += 1) {\n                bitmap[i][minY] = true;\n                bitmap[i][maxY] = true;\n            }\n        }\n    };\n    Greedy.prototype.destroy = function () {\n        this.bitmap = {};\n    };\n    return Greedy;\n}());\nfunction spiralFill(label, greedy, maxTimes) {\n    if (maxTimes === void 0) { maxTimes = MAX_TIMES; }\n    var dt = -1;\n    var _a = label.attr(), x = _a.x, y = _a.y;\n    var bbox = label.getCanvasBBox();\n    var maxDelta = Math.sqrt(bbox.width * bbox.width + bbox.height * bbox.height);\n    var dxdy;\n    var t = -dt;\n    var dx = 0;\n    var dy = 0;\n    var f = function (param) {\n        var nt = param * 0.1;\n        return [nt * Math.cos(nt), nt * Math.sin(nt)];\n    };\n    if (greedy.hasGap(bbox)) {\n        greedy.fillGap(bbox);\n        return true;\n    }\n    var canFill = false;\n    var times = 0;\n    var accessedCache = {};\n    while (Math.min(Math.abs(dx), Math.abs(dy)) < maxDelta && times < maxTimes) {\n        dxdy = f((t += dt));\n        dx = ~~dxdy[0];\n        dy = ~~dxdy[1];\n        if ((!dx && !dy) || accessedCache[\"\".concat(dx, \"-\").concat(dy)]) {\n            continue;\n        }\n        label.attr({ x: x + dx, y: y + dy });\n        if (dx + dy < 0) {\n            label.attr('textAlign', 'right');\n        }\n        times++;\n        if (greedy.hasGap(label.getCanvasBBox())) {\n            greedy.fillGap(label.getCanvasBBox());\n            canFill = true;\n            accessedCache[\"\".concat(dx, \"-\").concat(dy)] = true;\n            break;\n        }\n    }\n    return canFill;\n}\n/*\n *  根据如下规则尝试放置label\n *                5\n *        ------------------\n *        |    1   |   0   |\n *    8   —————————4————————   7\n *        |    2   |   3   |\n *        ——————————————————\n *                 6\n */\nfunction adjustLabelPosition(label, x, y, index) {\n    var _a = label.getCanvasBBox(), width = _a.width, height = _a.height;\n    var attrs = {\n        x: x,\n        y: y,\n        textAlign: 'center',\n    };\n    switch (index) {\n        case 0:\n            attrs.y -= height + 1;\n            attrs.x += 1;\n            attrs.textAlign = 'left';\n            break;\n        case 1:\n            attrs.y -= height + 1;\n            attrs.x -= 1;\n            attrs.textAlign = 'right';\n            break;\n        case 2:\n            attrs.y += height + 1;\n            attrs.x -= 1;\n            attrs.textAlign = 'right';\n            break;\n        case 3:\n            attrs.y += height + 1;\n            attrs.x += 1;\n            attrs.textAlign = 'left';\n            break;\n        case 5:\n            attrs.y -= height * 2 + 2;\n            break;\n        case 6:\n            attrs.y += height * 2 + 2;\n            break;\n        case 7:\n            attrs.x += width + 1;\n            attrs.textAlign = 'left';\n            break;\n        case 8:\n            attrs.x -= width + 1;\n            attrs.textAlign = 'right';\n            break;\n        default:\n            break;\n    }\n    label.attr(attrs);\n    return label.getCanvasBBox();\n}\n/**\n * @ignore\n * label 防遮挡布局：在不改变 label 位置的情况下对相互重叠的 label 进行调整。\n * 不同于 'overlap' 类型的布局，该布局不会对 label 的位置进行偏移调整。\n * @param labels 参与布局调整的 label 数组集合\n */\nexport function fixedOverlap(items, labels, shapes, region) {\n    var greedy = new Greedy();\n    each(labels, function (label) {\n        var labelShape = label.find(function (shape) { return shape.get('type') === 'text'; });\n        if (!spiralFill(labelShape, greedy)) {\n            label.remove(true);\n        }\n    });\n    greedy.destroy();\n}\n/**\n * @ignore\n * label 防遮挡布局：为了防止 label 之间相互覆盖同时保证尽可能多 的 label 展示，通过尝试将 label 向**四周偏移**来剔除放不下的 label\n * @param labels 参与布局调整的 label 数组集合\n */\nexport function overlap(items, labels, shapes, region) {\n    var greedy = new Greedy();\n    each(labels, function (label) {\n        var labelShape = label.find(function (shape) { return shape.get('type') === 'text'; });\n        var _a = labelShape.attr(), x = _a.x, y = _a.y;\n        var canFill = false;\n        for (var i = 0; i <= 8; i++) {\n            var bbox = adjustLabelPosition(labelShape, x, y, i);\n            if (greedy.hasGap(bbox)) {\n                greedy.fillGap(bbox);\n                canFill = true;\n                break;\n            }\n        }\n        if (!canFill) {\n            label.remove(true);\n        }\n    });\n    greedy.destroy();\n}\n//# sourceMappingURL=overlap.js.map","import { __read, __spreadArray } from \"tslib\";\nfunction dot(a, b) {\n    return (a[0] || 0) * (b[0] || 0) + (a[1] || 0) * (b[1] || 0) + (a[2] || 0) * (b[2] || 0);\n}\n/**\n * @private\n * 1. 获取投影轴\n */\nfunction getAxes(points /** 多边形的关键点 */) {\n    // 目前先处理 平行矩形 的场景, 其他多边形不处理\n    if (points.length > 4) {\n        return [];\n    }\n    // 获取向量\n    var vector = function (start, end) {\n        return [end.x - start.x, end.y - start.y];\n    };\n    // 由于 矩形的平行原理，所以只有 2 条投影轴: A -> B, B -> C\n    var AB = vector(points[0], points[1]);\n    var BC = vector(points[1], points[2]);\n    return [AB, BC];\n}\n/**\n * @private\n * 绕指定点顺时针旋转后的点坐标\n * 默认绕原点旋转\n */\nfunction rotateAtPoint(point, deg, origin) {\n    if (deg === void 0) { deg = 0; }\n    if (origin === void 0) { origin = { x: 0, y: 0 }; }\n    var x = point.x, y = point.y;\n    return {\n        x: (x - origin.x) * Math.cos(-deg) + (y - origin.y) * Math.sin(-deg) + origin.x,\n        y: (origin.x - x) * Math.sin(-deg) + (y - origin.y) * Math.cos(-deg) + origin.y,\n    };\n}\n/**\n * @private\n * 转化为顶点坐标数组\n *\n * @param {Object} box\n */\nfunction getRectPoints(box) {\n    var points = [\n        { x: box.x, y: box.y },\n        { x: box.x + box.width, y: box.y },\n        { x: box.x + box.width, y: box.y + box.height },\n        { x: box.x, y: box.y + box.height },\n    ];\n    var rotation = box.rotation;\n    if (rotation) {\n        return [\n            rotateAtPoint(points[0], rotation, points[0]),\n            rotateAtPoint(points[1], rotation, points[0]),\n            rotateAtPoint(points[2], rotation, points[0]),\n            rotateAtPoint(points[3], rotation, points[0]),\n        ];\n    }\n    return points;\n}\n/**\n * @private\n * 2. 获取多边形在投影轴上的投影\n *\n * 向量的点积的其中一个几何含义是：一个向量在平行于另一个向量方向上的投影的数值乘积。\n * 由于投影轴是单位向量（长度为1），投影的长度为 x1 * x2 + y1 * y2\n */\nfunction getProjection(points /** 多边形的关键点 */, axis) {\n    // 目前先处理矩形的场景\n    if (points.length > 4) {\n        return { min: 0, max: 0 };\n    }\n    var scalars = [];\n    points.forEach(function (point) {\n        scalars.push(dot([point.x, point.y], axis));\n    });\n    return { min: Math.min.apply(Math, __spreadArray([], __read(scalars), false)), max: Math.max.apply(Math, __spreadArray([], __read(scalars), false)) };\n}\nfunction isProjectionOverlap(projection1, projection2) {\n    return projection1.max > projection2.min && projection1.min < projection2.max;\n}\nfunction isValidNumber(d) {\n    return typeof d === 'number' && !Number.isNaN(d) && d !== Infinity && d !== -Infinity;\n}\nfunction isValidBox(box) {\n    return ['x', 'y', 'width', 'height'].every(function (attr) { return isValidNumber(box[attr]); });\n}\n/**\n * 快速判断两个无旋转矩形是否遮挡\n */\nexport function isIntersectRect(box1, box2, margin) {\n    if (margin === void 0) { margin = 0; }\n    return !(box2.x > box1.x + box1.width + margin ||\n        box2.x + box2.width < box1.x - margin ||\n        box2.y > box1.y + box1.height + margin ||\n        box2.y + box2.height < box1.y - margin);\n}\n/**\n * detect whether two shape is intersected, useful when shape is been rotated\n * 判断两个矩形是否重叠（相交和包含, 是否旋转）\n *\n * - 原理: 分离轴定律\n */\nexport function intersect(box1, box2, margin) {\n    if (margin === void 0) { margin = 0; }\n    // 如果两个 box 中有一个是不合法的 box，也就是不会被渲染出来的，那么它们就不相交。\n    if (!isValidBox(box1) || !isValidBox(box2))\n        return false;\n    // 如果两个矩形没有旋转，使用快速判断\n    if (!box1.rotation && !box2.rotation) {\n        return isIntersectRect(box1, box2, margin);\n    }\n    // 分别获取 4 个关键点\n    var rect1Points = getRectPoints(box1);\n    var rect2Points = getRectPoints(box2);\n    // 获取所有投影轴\n    var axes = getAxes(rect1Points).concat(getAxes(rect2Points));\n    for (var i = 0; i < axes.length; i++) {\n        var axis = axes[i];\n        var projection1 = getProjection(rect1Points, axis);\n        var projection2 = getProjection(rect2Points, axis);\n        // 判断投影轴上的投影是否存在重叠，若检测到存在间隙则立刻退出判断，消除不必要的运算。\n        if (!isProjectionOverlap(projection1, projection2)) {\n            return false;\n        }\n    }\n    return true;\n}\n//# sourceMappingURL=collision-detect.js.map","import { isFunction } from '@antv/util';\nvar MyWorker = /** @class */ (function () {\n    function MyWorker(url) {\n        var _this = this;\n        this.queue = [];\n        this.worker = new Worker(url);\n        this.worker.onmessage = function (e) {\n            var _a;\n            (_a = _this.queue.shift()) === null || _a === void 0 ? void 0 : _a.resolve(e);\n        };\n        this.worker.onmessageerror = function (e) {\n            var _a;\n            console.warn('[AntV G2] Web worker is not available');\n            (_a = _this.queue.shift()) === null || _a === void 0 ? void 0 : _a.reject(e);\n        };\n    }\n    MyWorker.prototype.post = function (params, onError) {\n        var _this = this;\n        return new Promise(function (resolve, reject) {\n            _this.queue.push({ resolve: resolve, reject: reject });\n            try {\n                _this.worker.postMessage(params);\n            }\n            catch (e) {\n                console.warn('[AntV G2] Web worker is not available');\n                isFunction(onError) && onError();\n            }\n        });\n    };\n    MyWorker.prototype.destroy = function () {\n        this.worker.terminate();\n    };\n    return MyWorker;\n}());\nexport function createWorker(f) {\n    if (typeof window === 'undefined')\n        return;\n    var blob;\n    try {\n        blob = new Blob([f.toString()], { type: 'application/javascript' });\n    }\n    catch (e) {\n        // @ts-ignore\n        blob = new window.BlobBuilder();\n        blob.append(f.toString());\n        blob = blob.getBlob();\n    }\n    return new MyWorker(URL.createObjectURL(blob));\n}\n//# sourceMappingURL=createWorker.js.map","var onmessage = function (e) {\n    // Copy from src/util/collision-detect.ts\n    function generateUtils() {\n        function dot(a, b) {\n            return (a[0] || 0) * (b[0] || 0) + (a[1] || 0) * (b[1] || 0) + (a[2] || 0) * (b[2] || 0);\n        }\n        /**\n         * 1. 获取投影轴\n         */\n        function getAxes(points /** 多边形的关键点 */) {\n            // 目前先处理 平行矩形 的场景, 其他多边形不处理\n            if (points.length > 4) {\n                return [];\n            }\n            // 获取向量\n            var vector = function (start, end) {\n                return [end.x - start.x, end.y - start.y];\n            };\n            // 由于 矩形的平行原理，所以只有 2 条投影轴: A -> B, B -> C\n            var AB = vector(points[0], points[1]);\n            var BC = vector(points[1], points[2]);\n            return [AB, BC];\n        }\n        /**\n         * 绕指定点顺时针旋转后的点坐标\n         * 默认绕原点旋转\n         */\n        function rotateAtPoint(point, deg, origin) {\n            if (deg === void 0) { deg = 0; }\n            if (origin === void 0) { origin = { x: 0, y: 0 }; }\n            var x = point.x, y = point.y;\n            return {\n                x: (x - origin.x) * Math.cos(-deg) + (y - origin.y) * Math.sin(-deg) + origin.x,\n                y: (origin.x - x) * Math.sin(-deg) + (y - origin.y) * Math.cos(-deg) + origin.y,\n            };\n        }\n        /**\n         * @private\n         * 转化为顶点坐标数组\n         *\n         * @param {Object} box\n         */\n        function getRectPoints(box) {\n            var points = [\n                { x: box.x, y: box.y },\n                { x: box.x + box.width, y: box.y },\n                { x: box.x + box.width, y: box.y + box.height },\n                { x: box.x, y: box.y + box.height },\n            ];\n            var rotation = box.rotation;\n            if (rotation) {\n                return [\n                    rotateAtPoint(points[0], rotation, points[0]),\n                    rotateAtPoint(points[1], rotation, points[0]),\n                    rotateAtPoint(points[2], rotation, points[0]),\n                    rotateAtPoint(points[3], rotation, points[0]),\n                ];\n            }\n            return points;\n        }\n        /**\n         * 2. 获取多边形在投影轴上的投影\n         *\n         * 向量的点积的其中一个几何含义是：一个向量在平行于另一个向量方向上的投影的数值乘积。\n         * 由于投影轴是单位向量（长度为1），投影的长度为 x1 * x2 + y1 * y2\n         */\n        function getProjection(points /** 多边形的关键点 */, axis) {\n            // 目前先处理矩形的场景\n            if (points.length > 4) {\n                return { min: 0, max: 0 };\n            }\n            var scalars = [];\n            points.forEach(function (point) {\n                scalars.push(dot([point.x, point.y], axis));\n            });\n            return { min: Math.min.apply(null, scalars), max: Math.max.apply(null, scalars) };\n        }\n        function isProjectionOverlap(projection1, projection2) {\n            return projection1.max > projection2.min && projection1.min < projection2.max;\n        }\n        function isValidNumber(d) {\n            return typeof d === 'number' && !Number.isNaN(d) && d !== Infinity && d !== -Infinity;\n        }\n        function isValidBox(box) {\n            return ['x', 'y', 'width', 'height'].every(function (attr) { return isValidNumber(box[attr]); });\n        }\n        function isIntersectRect(box1, box2, margin) {\n            if (margin === void 0) { margin = 0; }\n            return !(box2.x > box1.x + box1.width + margin ||\n                box2.x + box2.width < box1.x - margin ||\n                box2.y > box1.y + box1.height + margin ||\n                box2.y + box2.height < box1.y - margin);\n        }\n        function intersect(box1, box2, margin) {\n            if (margin === void 0) { margin = 0; }\n            if (!isValidBox(box1) || !isValidBox(box2))\n                return false;\n            // Quick detect, if rotation is null or zero.\n            if (!box1.rotation && !box2.rotation) {\n                return isIntersectRect(box1, box2, margin);\n            }\n            // 分别获取 4 个关键点\n            var rect1Points = getRectPoints(box1);\n            var rect2Points = getRectPoints(box2);\n            // 获取所有投影轴\n            var axes = getAxes(rect1Points).concat(getAxes(rect2Points));\n            for (var i = 0; i < axes.length; i++) {\n                var axis = axes[i];\n                var projection1 = getProjection(rect1Points, axis);\n                var projection2 = getProjection(rect2Points, axis);\n                if (!isProjectionOverlap(projection1, projection2))\n                    return false;\n            }\n            return true;\n        }\n        return { intersect: intersect };\n    }\n    var intersect = generateUtils().intersect;\n    // Label layouts.\n    function hideOverlap(items) {\n        var boxes = items.slice();\n        for (var i = 0; i < boxes.length; i++) {\n            var box1 = boxes[i];\n            if (box1.visible) {\n                for (var j = i + 1; j < boxes.length; j++) {\n                    var box2 = boxes[j];\n                    if (box1 !== box2 && box2.visible) {\n                        if (intersect(box1, box2)) {\n                            box2.visible = false;\n                        }\n                    }\n                }\n            }\n        }\n        return boxes;\n    }\n    var methods = {\n        'hide-overlap': hideOverlap,\n    };\n    // Main\n    try {\n        var eventData = JSON.parse(e.data);\n        if (!eventData || !eventData.type || !methods[eventData.type])\n            return;\n        var type = eventData.type, items = eventData.items;\n        var result = methods[type](items);\n        self.postMessage(result);\n    }\n    catch (e) {\n        throw e;\n    }\n};\nvar code = \"\\n   self.onmessage = \".concat(onmessage.toString(), \"\\n\");\nexport { code };\n//# sourceMappingURL=hide-overlap.js.map","import { __assign, __awaiter, __generator } from \"tslib\";\nimport { get, each } from '@antv/util';\nimport { intersect } from '../../../util/collision-detect';\nimport { getLabelBackgroundInfo } from '../util';\nimport { createWorker } from '../util/createWorker';\nimport { code as layoutCode } from './worker/hide-overlap';\nvar layout = function (items) {\n    var boxes = items.slice();\n    for (var i = 0; i < boxes.length; i++) {\n        var box1 = boxes[i];\n        if (box1.visible) {\n            for (var j = i + 1; j < boxes.length; j++) {\n                var box2 = boxes[j];\n                if (box1 !== box2 && box2.visible) {\n                    if (intersect(box1, box2)) {\n                        box2.visible = false;\n                    }\n                }\n            }\n        }\n    }\n    return boxes;\n};\nvar cache = new Map();\nvar worker = createWorker(layoutCode);\n/**\n * label 防遮挡布局：在不改变 label 位置的情况下对相互重叠的 label 进行隐藏（非移除）\n * 不同于 'overlap' 类型的布局，该布局不会对 label 的位置进行偏移调整。\n * @param labels 参与布局调整的 label 数组集合\n */\nexport function hideOverlap(labelItems, labels, shapes, region) {\n    return __awaiter(this, void 0, void 0, function () {\n        var boxes, memoKey, cb, params, res, e_1;\n        return __generator(this, function (_a) {\n            switch (_a.label) {\n                case 0:\n                    boxes = labels.map(function (d, idx) { return (__assign(__assign({}, getLabelBackgroundInfo(d, labelItems[idx], get(labelItems[idx], 'background.padding'))), { visible: true })); });\n                    memoKey = JSON.stringify(boxes);\n                    cb = function (items) {\n                        cache.set(memoKey, items);\n                        each(items, function (_a, idx) {\n                            var visible = _a.visible;\n                            var labelShape = labels[idx];\n                            if (visible) {\n                                labelShape === null || labelShape === void 0 ? void 0 : labelShape.show();\n                            }\n                            else {\n                                labelShape === null || labelShape === void 0 ? void 0 : labelShape.hide();\n                            }\n                        });\n                        return items;\n                    };\n                    if (!cache.get(memoKey)) return [3 /*break*/, 1];\n                    cb(cache.get(memoKey));\n                    return [3 /*break*/, 7];\n                case 1:\n                    if (!worker) return [3 /*break*/, 6];\n                    _a.label = 2;\n                case 2:\n                    _a.trys.push([2, 4, , 5]);\n                    params = JSON.stringify({ type: 'hide-overlap', items: boxes });\n                    return [4 /*yield*/, worker.post(params, function () { return cb(layout(boxes)); })];\n                case 3:\n                    res = _a.sent();\n                    cb(Array.isArray(res.data) ? res.data : []);\n                    return [3 /*break*/, 5];\n                case 4:\n                    e_1 = _a.sent();\n                    console.error(e_1);\n                    cb(layout(boxes));\n                    return [3 /*break*/, 5];\n                case 5: return [3 /*break*/, 7];\n                case 6:\n                    // Normal layout in main thread.\n                    cb(layout(boxes));\n                    _a.label = 7;\n                case 7: return [2 /*return*/];\n            }\n        });\n    });\n}\n//# sourceMappingURL=hide-overlap.js.map","import { __read } from \"tslib\";\nimport colorUtil from '@antv/color-util';\n// 内置的一些特殊设置\nvar preset = {\n    '#5B8FF9': true,\n};\n// 根据YIQ亮度判断指定颜色取反色是不是白色\n// http://24ways.org/2010/calculating-color-contrast\n// http://www.w3.org/TR/AERT#color-contrast\nexport var isContrastColorWhite = function (color) {\n    var rgb = colorUtil.toRGB(color).toUpperCase();\n    if (preset[rgb]) {\n        return preset[rgb];\n    }\n    var _a = __read(colorUtil.rgb2arr(rgb), 3), r = _a[0], g = _a[1], b = _a[2];\n    var isDark = (r * 299 + g * 587 + b * 114) / 1000 < 128;\n    return isDark;\n};\n//# sourceMappingURL=color.js.map","var ctx;\n/**\n * 获取 canvas context\n */\nexport function getCanvasContext() {\n    if (!ctx) {\n        ctx = document.createElement('canvas').getContext('2d');\n    }\n    return ctx;\n}\n//# sourceMappingURL=context.js.map","import { BBox } from '../../../../util/bbox';\nimport { findLabelTextShape } from '../../util';\nfunction shouldInShapeSingle(geometry, label, shape) {\n    var coordinate = geometry.coordinate;\n    var textShape = findLabelTextShape(label);\n    var textBBox = BBox.fromObject(textShape.getCanvasBBox());\n    var shapeBBox = BBox.fromObject(shape.getBBox());\n    return coordinate.isTransposed ? shapeBBox.height >= textBBox.height : shapeBBox.width >= textBBox.width;\n}\nfunction shouldInShape(geometry, labels, shapes) {\n    var isStack = !!geometry.getAdjust('stack');\n    return (isStack ||\n        labels.every(function (label, index) {\n            var shape = shapes[index];\n            return shouldInShapeSingle(geometry, label, shape);\n        }));\n}\nfunction moveInShape(geometry, label, shape) {\n    var coordinate = geometry.coordinate;\n    var shapeBBox = BBox.fromObject(shape.getBBox());\n    var textShape = findLabelTextShape(label);\n    if (coordinate.isTransposed) {\n        // 水平方向：条形图系列\n        textShape.attr({\n            x: shapeBBox.minX + shapeBBox.width / 2,\n            textAlign: 'center',\n        });\n    }\n    else {\n        // 垂直方向：柱形图系列\n        textShape.attr({\n            y: shapeBBox.minY + shapeBBox.height / 2,\n            textBaseline: 'middle',\n        });\n    }\n}\n/**\n * 适用于 interval geometry 的数据标签位置自动调整布局方法\n * @param items\n * @param labels\n * @param shapes\n */\nexport function intervalAdjustPosition(items, labels, shapes) {\n    var _a;\n    if (shapes.length === 0) {\n        return;\n    }\n    var element = (_a = shapes[0]) === null || _a === void 0 ? void 0 : _a.get('element');\n    var geometry = element === null || element === void 0 ? void 0 : element.geometry;\n    if (!geometry || geometry.type !== 'interval') {\n        return;\n    }\n    var inShape = shouldInShape(geometry, labels, shapes);\n    if (inShape) {\n        shapes.forEach(function (shape, index) {\n            var label = labels[index];\n            moveInShape(geometry, label, shape);\n        });\n    }\n}\n//# sourceMappingURL=adjust-position.js.map","import { __read, __spreadArray } from \"tslib\";\nimport { groupBy, keys, map } from '@antv/util';\nimport { findLabelTextShape } from '../../util';\n/**\n * 对同一组(相同 xField )的 Label 进行排序：第一个、最后一个、其他...\n * @param geometry\n * @param labels\n */\nfunction sortLabels(geometry, labels) {\n    var yField = geometry.getXYFields()[1];\n    var result = [];\n    var sortedLabels = labels.sort(function (left, right) { return left.get('data')[yField] - left.get('data')[yField]; });\n    if (sortedLabels.length > 0) {\n        result.push(sortedLabels.shift());\n    }\n    if (sortedLabels.length > 0) {\n        result.push(sortedLabels.pop());\n    }\n    result.push.apply(result, __spreadArray([], __read(sortedLabels), false));\n    return result;\n}\nfunction hasSome(dones, current, compare) {\n    return dones.some(function (done) { return compare(done, current); });\n}\n/**\n * 计算两个矩形之间的堆叠区域面积\n */\nfunction getOverlapArea(a, b, margin) {\n    if (margin === void 0) { margin = 0; }\n    var xOverlap = Math.max(0, Math.min(a.x + a.width + margin, b.x + b.width + margin) - Math.max(a.x - margin, b.x - margin));\n    var yOverlap = Math.max(0, Math.min(a.y + a.height + margin, b.y + b.height + margin) - Math.max(a.y - margin, b.y - margin));\n    return xOverlap * yOverlap;\n}\n/**\n * 判断新添加的 Label 是否和已存在的发生重叠\n * @param dones\n * @param current\n */\nfunction checkShapeOverlap(dones, current) {\n    return hasSome(dones, current, function (left, right) {\n        var leftText = findLabelTextShape(left);\n        var rightText = findLabelTextShape(right);\n        return getOverlapArea(leftText.getCanvasBBox(), rightText.getCanvasBBox(), 2) > 0;\n    });\n}\n/**\n * 适用于 point geometry 的数据标签位置自动调整布局方法\n * @param items\n * @param labels\n * @param shapes\n * @param region\n * @param cfg\n */\nexport function pointAdjustPosition(items, labels, shapes, region, cfg) {\n    var _a, _b;\n    if (shapes.length === 0) {\n        return;\n    }\n    var element = (_a = shapes[0]) === null || _a === void 0 ? void 0 : _a.get('element');\n    var geometry = element === null || element === void 0 ? void 0 : element.geometry;\n    if (!geometry || geometry.type !== 'point') {\n        return;\n    }\n    var _c = __read(geometry.getXYFields(), 2), xField = _c[0], yField = _c[1];\n    var groupedLabels = groupBy(labels, function (label) { return label.get('data')[xField]; });\n    var dones = [];\n    var offset = (cfg && cfg.offset) || ((_b = items[0]) === null || _b === void 0 ? void 0 : _b.offset) || 12;\n    map(keys(groupedLabels).reverse(), function (xValue) {\n        var sortedCollections = sortLabels(geometry, groupedLabels[xValue]);\n        while (sortedCollections.length) {\n            var current = sortedCollections.shift();\n            var textShape = findLabelTextShape(current);\n            if (hasSome(dones, current, function (left, right) {\n                return left.get('data')[xField] === right.get('data')[xField] &&\n                    left.get('data')[yField] === right.get('data')[yField];\n            })) {\n                // 重复位置，直接隐藏\n                textShape.set('visible', false);\n                continue;\n            }\n            var upFail = checkShapeOverlap(dones, current);\n            var downFail = false;\n            if (upFail) {\n                textShape.attr('y', textShape.attr('y') + 2 * offset);\n                downFail = checkShapeOverlap(dones, current);\n            }\n            if (downFail) {\n                textShape.set('visible', false);\n                continue;\n            }\n            dones.push(current);\n        }\n    });\n}\n//# sourceMappingURL=adjust-position.js.map","import { __read, __spreadArray } from \"tslib\";\nimport { groupBy, keys, map } from '@antv/util';\nimport { findLabelTextShape } from '../../util';\n/**\n * 对同一组(相同 xField )的 Label 进行排序：第一个、最后一个、其他...\n * @param geometry\n * @param labels\n */\nfunction sortLabels(geometry, labels) {\n    var yField = geometry.getXYFields()[1];\n    var result = [];\n    var sortedLabels = labels.sort(function (left, right) { return left.get('data')[yField] - left.get('data')[yField]; });\n    if (sortedLabels.length > 0) {\n        result.push(sortedLabels.shift());\n    }\n    if (sortedLabels.length > 0) {\n        result.push(sortedLabels.pop());\n    }\n    result.push.apply(result, __spreadArray([], __read(sortedLabels), false));\n    return result;\n}\nfunction hasSome(dones, current, compare) {\n    return dones.some(function (done) { return compare(done, current); });\n}\n/**\n * 计算两个矩形之间的堆叠区域面积\n */\nfunction getOverlapArea(a, b, margin) {\n    if (margin === void 0) { margin = 0; }\n    var xOverlap = Math.max(0, Math.min(a.x + a.width + margin, b.x + b.width + margin) - Math.max(a.x - margin, b.x - margin));\n    var yOverlap = Math.max(0, Math.min(a.y + a.height + margin, b.y + b.height + margin) - Math.max(a.y - margin, b.y - margin));\n    return xOverlap * yOverlap;\n}\n/**\n * 判断新添加的 Label 是否和已存在的发生重叠\n * @param dones\n * @param current\n */\nfunction checkShapeOverlap(dones, current) {\n    return hasSome(dones, current, function (left, right) {\n        var leftText = findLabelTextShape(left);\n        var rightText = findLabelTextShape(right);\n        return getOverlapArea(leftText.getCanvasBBox(), rightText.getCanvasBBox(), 2) > 0;\n    });\n}\n/**\n * 适用于 point geometry 的数据标签位置自动调整布局方法\n * @param items\n * @param labels\n * @param shapes\n * @param region\n * @param cfg\n */\nexport function pathAdjustPosition(items, labels, shapes, region, cfg) {\n    var _a, _b;\n    if (shapes.length === 0) {\n        return;\n    }\n    var element = (_a = shapes[0]) === null || _a === void 0 ? void 0 : _a.get('element');\n    var geometry = element === null || element === void 0 ? void 0 : element.geometry;\n    if (!geometry || ['path', 'line', 'area'].indexOf(geometry.type) < 0) {\n        return;\n    }\n    var _c = __read(geometry.getXYFields(), 2), xField = _c[0], yField = _c[1];\n    var groupedLabels = groupBy(labels, function (label) { return label.get('data')[xField]; });\n    var dones = [];\n    var offset = (cfg && cfg.offset) || ((_b = items[0]) === null || _b === void 0 ? void 0 : _b.offset) || 12;\n    map(keys(groupedLabels).reverse(), function (xValue) {\n        var sortedCollections = sortLabels(geometry, groupedLabels[xValue]);\n        while (sortedCollections.length) {\n            var current = sortedCollections.shift();\n            var textShape = findLabelTextShape(current);\n            if (hasSome(dones, current, function (left, right) {\n                return left.get('data')[xField] === right.get('data')[xField] &&\n                    left.get('data')[yField] === right.get('data')[yField];\n            })) {\n                // 重复位置，直接隐藏\n                textShape.set('visible', false);\n                continue;\n            }\n            var upFail = checkShapeOverlap(dones, current);\n            var downFail = false;\n            if (upFail) {\n                textShape.attr('y', textShape.attr('y') + 2 * offset);\n                downFail = checkShapeOverlap(dones, current);\n            }\n            if (downFail) {\n                textShape.set('visible', false);\n                continue;\n            }\n            dones.push(current);\n        }\n    });\n}\n//# sourceMappingURL=adjust-position.js.map","import { __read, __spreadArray } from \"tslib\";\nimport { isString, memoize, values, toString } from '@antv/util';\nimport { getCanvasContext } from './context';\n/**\n * 计算文本在画布中的宽度\n */\nexport var measureTextWidth = memoize(function (text, font) {\n    if (font === void 0) { font = {}; }\n    var fontSize = font.fontSize, fontFamily = font.fontFamily, fontWeight = font.fontWeight, fontStyle = font.fontStyle, fontVariant = font.fontVariant;\n    var ctx = getCanvasContext();\n    ctx.font = [fontStyle, fontVariant, fontWeight, \"\".concat(fontSize, \"px\"), fontFamily].join(' ');\n    return ctx.measureText(isString(text) ? text : '').width;\n}, function (text, font) {\n    if (font === void 0) { font = {}; }\n    return __spreadArray([text], __read(values(font)), false).join('');\n});\n/**\n * 获取文本的 ... 文本。\n * 算法（减少每次 measureText 的长度，measureText 的性能跟字符串时间相关）：\n * 1. 先通过 STEP 逐步计算，找到最后一个小于 maxWidth 的字符串\n * 2. 然后对最后这个字符串二分计算\n * @param text 需要计算的文本, 由于历史原因 除了支持string，还支持空值,number和数组等\n * @param maxWidth\n * @param font\n */\nexport var getEllipsisText = function (text, maxWidth, font) {\n    var STEP = 16; // 每次 16，调参工程师\n    var DOT_WIDTH = measureTextWidth('...', font);\n    var leftText;\n    if (!isString(text)) {\n        leftText = toString(text);\n    }\n    else {\n        leftText = text;\n    }\n    var leftWidth = maxWidth;\n    var r = []; // 最终的分段字符串\n    var currentText;\n    var currentWidth;\n    if (measureTextWidth(text, font) <= maxWidth) {\n        return text;\n    }\n    // 首先通过 step 计算，找出最大的未超出长度的\n    while (true) {\n        // 更新字符串\n        currentText = leftText.substr(0, STEP);\n        // 计算宽度\n        currentWidth = measureTextWidth(currentText, font);\n        // 超出剩余宽度，则停止\n        if (currentWidth + DOT_WIDTH > leftWidth) {\n            if (currentWidth > leftWidth) {\n                break;\n            }\n        }\n        r.push(currentText);\n        // 没有超出，则计算剩余宽度\n        leftWidth -= currentWidth;\n        leftText = leftText.substr(STEP);\n        // 字符串整体没有超出\n        if (!leftText) {\n            return r.join('');\n        }\n    }\n    // 最下的最后一个 STEP，使用 1 递增（用二分效果更高）\n    while (true) {\n        // 更新字符串\n        currentText = leftText.substr(0, 1);\n        // 计算宽度\n        currentWidth = measureTextWidth(currentText, font);\n        // 超出剩余宽度，则停止\n        if (currentWidth + DOT_WIDTH > leftWidth) {\n            break;\n        }\n        r.push(currentText);\n        // 没有超出，则计算剩余宽度\n        leftWidth -= currentWidth;\n        leftText = leftText.substr(1);\n        if (!leftText) {\n            return r.join('');\n        }\n    }\n    return \"\".concat(r.join(''), \"...\");\n};\n//# sourceMappingURL=text.js.map","import { __read } from \"tslib\";\nimport { ext } from '@antv/matrix-util';\n/**\n * @ignore\n * 对图形元素进行矩阵变换，同时返回变换前的图形矩阵\n * @param shape 进行矩阵变换的图形\n * @param vector 矩阵变换的中心点\n * @param direct 矩阵变换的类型\n */\nexport function transformShape(shape, vector, direct) {\n    var scaledMatrix;\n    var _a = __read(vector, 2), x = _a[0], y = _a[1];\n    shape.applyToMatrix([x, y, 1]);\n    if (direct === 'x') {\n        shape.setMatrix(ext.transform(shape.getMatrix(), [\n            ['t', -x, -y],\n            ['s', 0.01, 1],\n            ['t', x, y],\n        ]));\n        scaledMatrix = ext.transform(shape.getMatrix(), [\n            ['t', -x, -y],\n            ['s', 100, 1],\n            ['t', x, y],\n        ]);\n    }\n    else if (direct === 'y') {\n        shape.setMatrix(ext.transform(shape.getMatrix(), [\n            ['t', -x, -y],\n            ['s', 1, 0.01],\n            ['t', x, y],\n        ]));\n        scaledMatrix = ext.transform(shape.getMatrix(), [\n            ['t', -x, -y],\n            ['s', 1, 100],\n            ['t', x, y],\n        ]);\n    }\n    else if (direct === 'xy') {\n        shape.setMatrix(ext.transform(shape.getMatrix(), [\n            ['t', -x, -y],\n            ['s', 0.01, 0.01],\n            ['t', x, y],\n        ]));\n        scaledMatrix = ext.transform(shape.getMatrix(), [\n            ['t', -x, -y],\n            ['s', 100, 100],\n            ['t', x, y],\n        ]);\n    }\n    return scaledMatrix;\n}\n/**\n * 对图形元素进行剪切动画\n * @param element 进行动画的图形元素\n * @param animateCfg 动画配置\n * @param coordinate 当前坐标系\n * @param yMinPoint y 轴的最小值对应的图形坐标点\n * @param type 剪切动画的类型\n */\nexport function doScaleAnimate(element, animateCfg, coordinate, yMinPoint, type) {\n    var start = coordinate.start, end = coordinate.end;\n    var width = coordinate.getWidth();\n    var height = coordinate.getHeight();\n    var x;\n    var y;\n    if (type === 'y') {\n        x = start.x + width / 2;\n        y = yMinPoint.y < start.y ? yMinPoint.y : start.y;\n    }\n    else if (type === 'x') {\n        x = yMinPoint.x > start.x ? yMinPoint.x : start.x;\n        y = start.y + height / 2;\n    }\n    else if (type === 'xy') {\n        if (coordinate.isPolar) {\n            x = coordinate.getCenter().x;\n            y = coordinate.getCenter().y;\n        }\n        else {\n            x = (start.x + end.x) / 2;\n            y = (start.y + end.y) / 2;\n        }\n    }\n    var endMatrix = transformShape(element, [x, y], type);\n    element.animate({\n        matrix: endMatrix,\n    }, animateCfg);\n}\n//# sourceMappingURL=util.js.map","import { __assign, __read } from \"tslib\";\nimport { getArcParams } from '@antv/g-canvas';\nimport { isNumberEqual, isEqual, isFunction } from '@antv/util';\nimport { getArcPath, getSectorPath } from '../../util/graphics';\nfunction getAngle(startPoint, arcPath) {\n    var _a;\n    var _b = getArcParams(startPoint, arcPath), startAngle = _b.startAngle, endAngle = _b.endAngle;\n    if (!isNumberEqual(startAngle, -Math.PI * 0.5) && startAngle < -Math.PI * 0.5) {\n        startAngle += Math.PI * 2;\n    }\n    if (!isNumberEqual(endAngle, -Math.PI * 0.5) && endAngle < -Math.PI * 0.5) {\n        endAngle += Math.PI * 2;\n    }\n    if (arcPath[5] === 0) {\n        // 逆时针，需要将 startAngle 和 endAngle 转置，因为 G2 极坐标系为顺时针方向\n        _a = __read([endAngle, startAngle], 2), startAngle = _a[0], endAngle = _a[1];\n    }\n    if (isNumberEqual(startAngle, Math.PI * 1.5)) {\n        startAngle = Math.PI * -0.5;\n    }\n    // 当 startAngle, endAngle 接近相等时，不进行 endAngle = Math.PI * 1.5 防止变化从整个圆开始\n    if (isNumberEqual(endAngle, Math.PI * -0.5) && !isNumberEqual(startAngle, endAngle)) {\n        endAngle = Math.PI * 1.5;\n    }\n    return {\n        startAngle: startAngle,\n        endAngle: endAngle,\n    };\n}\nfunction getArcStartPoint(path) {\n    var startPoint;\n    if (path[0] === 'M' || path[0] === 'L') {\n        startPoint = [path[1], path[2]];\n    }\n    else if (path[0] === 'a' || path[0] === 'A' || path[0] === 'C') {\n        startPoint = [path[path.length - 2], path[path.length - 1]];\n    }\n    return startPoint;\n}\n/**\n * path 存在以下情况\n * 1. 饼图不为整圆的 path，命令为 M, L, A, L, Z\n * 2. 饼图为整圆的 path，命令为 M, M, A, A, M, Z\n * 3. 环图不为整圆的 path，命令为 M, A, L, A, L, Z\n * 4. 环图为整圆的 path，命令为 M, A, A, M, A, A, M, Z\n * 5. radial-line, 不为整圆时的 path, 命令为 M, A, A, Z\n * 6. radial-line, 为整圆时的 path，命令为 M, A, A, A, A, Z\n * @param path theta 坐标系下圆弧的 path 命令\n */\nexport function getArcInfo(path) {\n    var _a;\n    var startAngle;\n    var endAngle;\n    var arcPaths = path.filter(function (command) {\n        return command[0] === 'A' || command[0] === 'a';\n    });\n    if (arcPaths.length === 0) {\n        return {\n            startAngle: 0,\n            endAngle: 0,\n            radius: 0,\n            innerRadius: 0,\n        };\n    }\n    var firstArcPathCommand = arcPaths[0];\n    var lastArcPathCommand = arcPaths.length > 1 ? arcPaths[1] : arcPaths[0];\n    var firstIndex = path.indexOf(firstArcPathCommand);\n    var lastIndex = path.indexOf(lastArcPathCommand);\n    var firstStartPoint = getArcStartPoint(path[firstIndex - 1]);\n    var lastStartPoint = getArcStartPoint(path[lastIndex - 1]);\n    var _b = getAngle(firstStartPoint, firstArcPathCommand), firstStartAngle = _b.startAngle, firstEndAngle = _b.endAngle;\n    var _c = getAngle(lastStartPoint, lastArcPathCommand), lastStartAngle = _c.startAngle, lastEndAngle = _c.endAngle;\n    if (isNumberEqual(firstStartAngle, lastStartAngle) && isNumberEqual(firstEndAngle, lastEndAngle)) {\n        startAngle = firstStartAngle;\n        endAngle = firstEndAngle;\n    }\n    else {\n        startAngle = Math.min(firstStartAngle, lastStartAngle);\n        endAngle = Math.max(firstEndAngle, lastEndAngle);\n    }\n    var radius = firstArcPathCommand[1];\n    var innerRadius = arcPaths[arcPaths.length - 1][1];\n    if (radius < innerRadius) {\n        _a = __read([innerRadius, radius], 2), radius = _a[0], innerRadius = _a[1];\n    }\n    else if (radius === innerRadius) {\n        innerRadius = 0;\n    }\n    return {\n        startAngle: startAngle,\n        endAngle: endAngle,\n        radius: radius,\n        innerRadius: innerRadius,\n    };\n}\n/**\n * @ignore\n * 饼图更新动画\n * @param shape 文本图形\n * @param animateCfg\n * @param cfg\n */\nexport function sectorPathUpdate(shape, animateCfg, cfg) {\n    var toAttrs = cfg.toAttrs, coordinate = cfg.coordinate;\n    var path = toAttrs.path || [];\n    var pathCommands = path.map(function (command) { return command[0]; });\n    if (path.length < 1)\n        return;\n    var _a = getArcInfo(path), curStartAngle = _a.startAngle, curEndAngle = _a.endAngle, radius = _a.radius, innerRadius = _a.innerRadius;\n    var _b = getArcInfo(shape.attr('path')), preStartAngle = _b.startAngle, preEndAngle = _b.endAngle;\n    var center = coordinate.getCenter();\n    var diffStartAngle = curStartAngle - preStartAngle;\n    var diffEndAngle = curEndAngle - preEndAngle;\n    // 没有 diff 时直接返回最终 attrs，不需要额外动画\n    if (diffStartAngle === 0 && diffEndAngle === 0) {\n        shape.attr(toAttrs);\n        return;\n    }\n    shape.animate(function (ratio) {\n        var onFrameStartAngle = preStartAngle + ratio * diffStartAngle;\n        var onFrameEndAngle = preEndAngle + ratio * diffEndAngle;\n        return __assign(__assign({}, toAttrs), { path: \n            // hack, 兼容 /examples/bar/basic/demo/radial-line.ts 动画\n            isEqual(pathCommands, ['M', 'A', 'A', 'Z'])\n                ? getArcPath(center.x, center.y, radius, onFrameStartAngle, onFrameEndAngle)\n                : getSectorPath(center.x, center.y, radius, onFrameStartAngle, onFrameEndAngle, innerRadius) });\n    }, __assign(__assign({}, animateCfg), { callback: function () {\n            // 将 path 保持原始态，否则会影响 setState() 的动画\n            shape.attr('path', path);\n            isFunction(animateCfg.callback) && animateCfg.callback();\n        } }));\n}\n//# sourceMappingURL=sector-path-update.js.map","import { __assign } from \"tslib\";\nimport { ext } from '@antv/matrix-util';\nimport { each, isFunction } from '@antv/util';\nfunction doShapeZoom(shape, animateCfg, type) {\n    if (shape.isGroup()) {\n        each(shape.getChildren(), function (child) {\n            doShapeZoom(child, animateCfg, type);\n        });\n    }\n    else {\n        var bbox = shape.getBBox();\n        var x = (bbox.minX + bbox.maxX) / 2;\n        var y = (bbox.minY + bbox.maxY) / 2;\n        shape.applyToMatrix([x, y, 1]);\n        if (type === 'zoomIn') {\n            // 放大\n            var matrix = ext.transform(shape.getMatrix(), [\n                ['t', -x, -y],\n                ['s', 0.01, 0.01],\n                ['t', x, y],\n            ]);\n            shape.setMatrix(matrix);\n            shape.animate({\n                matrix: ext.transform(shape.getMatrix(), [\n                    ['t', -x, -y],\n                    ['s', 100, 100],\n                    ['t', x, y],\n                ]),\n            }, animateCfg);\n        }\n        else {\n            shape.animate({\n                matrix: ext.transform(shape.getMatrix(), [\n                    ['t', -x, -y],\n                    ['s', 0.01, 0.01],\n                    ['t', x, y],\n                ]),\n            }, __assign(__assign({}, animateCfg), { callback: function () {\n                    shape.remove(true);\n                    isFunction(animateCfg.callback) && animateCfg.callback();\n                } }));\n        }\n    }\n}\n/**\n * @ignore\n * 单个 shape 动画\n * shape 以自身中心点逐渐放大的进入动画\n * @param shape 参与动画的图形元素\n * @param animateCfg 动画配置\n * @param cfg 额外信息\n */\nexport function zoomIn(shape, animateCfg, cfg) {\n    doShapeZoom(shape, animateCfg, 'zoomIn');\n}\n/**\n * @ignore\n * 单个 shape 动画\n * 消失动画，shape 以自身为中心点的逐渐缩小\n * @param shape 参与动画的图形元素\n * @param animateCfg 动画配置\n * @param cfg 额外信息\n */\nexport function zoomOut(shape, animateCfg, cfg) {\n    doShapeZoom(shape, animateCfg, 'zoomOut');\n}\n//# sourceMappingURL=zoom.js.map","import { DIRECTION } from '../constant';\n/**\n * @ignore\n * 获取 facet title 的最佳默认配置，防止\n */\nexport function getFactTitleConfig(direction) {\n    if ([DIRECTION.TOP, DIRECTION.BOTTOM].includes(direction)) {\n        return {\n            offsetX: 0,\n            offsetY: direction === DIRECTION.TOP ? -8 : 8,\n            style: {\n                textAlign: 'center',\n                textBaseline: direction === DIRECTION.TOP ? 'bottom' : 'top',\n            },\n        };\n    }\n    if ([DIRECTION.LEFT, DIRECTION.RIGHT].includes(direction)) {\n        return {\n            offsetX: direction === DIRECTION.LEFT ? -8 : 8,\n            offsetY: 0,\n            style: {\n                textAlign: direction === DIRECTION.LEFT ? 'right' : 'left',\n                textBaseline: 'middle',\n                rotate: Math.PI / 2, // 文本阅读习惯从上往下\n            },\n        };\n    }\n    return {};\n}\n/**\n * @ignore\n * 根据角度，获取 ○ 上的点\n * @param center\n * @param r\n * @param angle\n */\nexport function getAnglePoint(center, r, angle) {\n    return {\n        x: center.x + r * Math.cos(angle),\n        y: center.y + r * Math.sin(angle),\n    };\n}\n//# sourceMappingURL=facet.js.map","import { __extends, __read } from \"tslib\";\nimport { deepMix, each, filter, get } from '@antv/util';\nimport { DIRECTION } from '../constant';\nimport { getAnglePoint, getFactTitleConfig } from '../util/facet';\nimport { Facet } from './facet';\n/**\n * @ignore\n * 镜像分面\n */\nvar Circle = /** @class */ (function (_super) {\n    __extends(Circle, _super);\n    function Circle() {\n        return _super !== null && _super.apply(this, arguments) || this;\n    }\n    Circle.prototype.getDefaultCfg = function () {\n        return deepMix({}, _super.prototype.getDefaultCfg.call(this), {\n            type: 'circle',\n            showTitle: true,\n            title: _super.prototype.getDefaultTitleCfg.call(this),\n        });\n    };\n    Circle.prototype.render = function () {\n        _super.prototype.render.call(this);\n        if (this.cfg.showTitle) {\n            this.renderTitle();\n        }\n    };\n    /**\n     * 根据总数和当前索引，计算分面的 region\n     * @param count\n     * @param index\n     */\n    Circle.prototype.getRegion = function (count, index) {\n        var r = 1 / 2; // 画布半径\n        // 画布圆心\n        var center = { x: 0.5, y: 0.5 };\n        // 每隔分面间隔的弧度\n        var avgAngle = (Math.PI * 2) / count;\n        // 当前分面所在的弧度\n        var angle = (-1 * Math.PI) / 2 + avgAngle * index;\n        // TODO 没看懂\n        var facetR = r / (1 + 1 / Math.sin(avgAngle / 2));\n        // 分面的中心点\n        var middle = getAnglePoint(center, r - facetR, angle);\n        var startAngle = (Math.PI * 5) / 4; // 右上角\n        var endAngle = (Math.PI * 1) / 4; // 左下角\n        return {\n            start: getAnglePoint(middle, facetR, startAngle),\n            end: getAnglePoint(middle, facetR, endAngle),\n        };\n    };\n    Circle.prototype.afterEachView = function (view, facet) {\n        this.processAxis(view, facet);\n    };\n    Circle.prototype.beforeEachView = function (view, facet) { };\n    Circle.prototype.generateFacets = function (data) {\n        var _this = this;\n        var _a = this.cfg, fields = _a.fields, type = _a.type;\n        var _b = __read(fields, 1), field = _b[0];\n        if (!field) {\n            throw new Error('No `fields` specified!');\n        }\n        var values = this.getFieldValues(data, field);\n        var count = values.length;\n        var rst = [];\n        values.forEach(function (value, index) {\n            var conditions = [{ field: field, value: value, values: values }];\n            var facetData = filter(data, _this.getFacetDataFilter(conditions));\n            var facet = {\n                type: type,\n                data: facetData,\n                region: _this.getRegion(count, index),\n                columnValue: value,\n                columnField: field,\n                columnIndex: index,\n                columnValuesLength: count,\n                rowValue: null,\n                rowField: null,\n                rowIndex: 0,\n                rowValuesLength: 1,\n            };\n            rst.push(facet);\n        });\n        return rst;\n    };\n    Circle.prototype.getXAxisOption = function (x, axes, option, facet) {\n        // 不做任何处理\n        return option;\n    };\n    /**\n     * 设置 y 坐标轴的文本、title 是否显示\n     * @param y\n     * @param axes\n     * @param option\n     * @param facet\n     */\n    Circle.prototype.getYAxisOption = function (y, axes, option, facet) {\n        // 不做任何处理\n        return option;\n    };\n    /**\n     * facet title\n     */\n    Circle.prototype.renderTitle = function () {\n        var _this = this;\n        each(this.facets, function (facet) {\n            var columnValue = facet.columnValue, view = facet.view;\n            var formatter = get(_this.cfg.title, 'formatter');\n            var config = deepMix({\n                position: ['50%', '0%'],\n                content: formatter ? formatter(columnValue) : columnValue,\n            }, getFactTitleConfig(DIRECTION.TOP), _this.cfg.title);\n            view.annotation().text(config);\n        });\n    };\n    return Circle;\n}(Facet));\nexport default Circle;\n//# sourceMappingURL=circle.js.map","import { __assign, __extends, __read } from \"tslib\";\nimport { deepMix, each, filter, get } from '@antv/util';\nimport { DIRECTION } from '../constant';\nimport { getFactTitleConfig } from '../util/facet';\nimport { Facet } from './facet';\n/**\n * @ignore\n * 镜像分面\n */\nvar List = /** @class */ (function (_super) {\n    __extends(List, _super);\n    function List() {\n        return _super !== null && _super.apply(this, arguments) || this;\n    }\n    List.prototype.getDefaultCfg = function () {\n        return deepMix({}, _super.prototype.getDefaultCfg.call(this), {\n            type: 'list',\n            cols: null,\n            showTitle: true,\n            title: _super.prototype.getDefaultTitleCfg.call(this),\n        });\n    };\n    List.prototype.render = function () {\n        _super.prototype.render.call(this);\n        if (this.cfg.showTitle) {\n            this.renderTitle();\n        }\n    };\n    List.prototype.afterEachView = function (view, facet) {\n        this.processAxis(view, facet);\n    };\n    List.prototype.beforeEachView = function (view, facet) { };\n    List.prototype.generateFacets = function (data) {\n        var _this = this;\n        var fields = this.cfg.fields;\n        var cols = this.cfg.cols;\n        var _a = __read(fields, 1), columnField = _a[0];\n        if (!columnField) {\n            throw new Error('No `fields` specified!');\n        }\n        var colValues = this.getFieldValues(data, columnField);\n        var count = colValues.length;\n        cols = cols || count; // 每行有几列数据\n        // 总共有几行\n        var rows = this.getPageCount(count, cols);\n        var rst = [];\n        colValues.forEach(function (val, index) {\n            // 当前 index 在那个行列\n            var _a = _this.getRowCol(index, cols), row = _a.row, col = _a.col;\n            var conditions = [{ field: columnField, value: val, values: colValues }];\n            var facetData = filter(data, _this.getFacetDataFilter(conditions));\n            var facet = {\n                type: _this.cfg.type,\n                data: facetData,\n                region: _this.getRegion(rows, cols, col, row),\n                columnValue: val,\n                rowValue: val,\n                columnField: columnField,\n                rowField: null,\n                columnIndex: col,\n                rowIndex: row,\n                columnValuesLength: cols,\n                rowValuesLength: rows,\n                total: count,\n            };\n            rst.push(facet);\n        });\n        return rst;\n    };\n    /**\n     * 设置 x 坐标轴的文本、title 是否显示\n     * @param x\n     * @param axes\n     * @param option\n     * @param facet\n     */\n    List.prototype.getXAxisOption = function (x, axes, option, facet) {\n        // 当是最后一行或者下面没有 view 时文本不显示\n        if (facet.rowIndex !== facet.rowValuesLength - 1 &&\n            facet.columnValuesLength * facet.rowIndex + facet.columnIndex + 1 + facet.columnValuesLength <= facet.total) {\n            return __assign(__assign({}, option), { label: null, title: null });\n        }\n        return option;\n    };\n    /**\n     * 设置 y 坐标轴的文本、title 是否显示\n     * @param y\n     * @param axes\n     * @param option\n     * @param facet\n     */\n    List.prototype.getYAxisOption = function (y, axes, option, facet) {\n        if (facet.columnIndex !== 0) {\n            return __assign(__assign({}, option), { title: null, label: null });\n        }\n        return option;\n    };\n    /**\n     * facet title\n     */\n    List.prototype.renderTitle = function () {\n        var _this = this;\n        each(this.facets, function (facet) {\n            var columnValue = facet.columnValue, view = facet.view;\n            var formatter = get(_this.cfg.title, 'formatter');\n            var config = deepMix({\n                position: ['50%', '0%'],\n                content: formatter ? formatter(columnValue) : columnValue,\n            }, getFactTitleConfig(DIRECTION.TOP), _this.cfg.title);\n            view.annotation().text(config);\n        });\n    };\n    /**\n     * 计算分页数\n     * @param total\n     * @param pageSize\n     */\n    List.prototype.getPageCount = function (total, pageSize) {\n        return Math.floor((total + pageSize - 1) / pageSize);\n    };\n    /**\n     * 索引值在哪一页\n     * @param index\n     * @param pageSize\n     */\n    List.prototype.getRowCol = function (index, pageSize) {\n        var row = Math.floor(index / pageSize);\n        var col = index % pageSize;\n        return { row: row, col: col };\n    };\n    return List;\n}(Facet));\nexport default List;\n//# sourceMappingURL=list.js.map","import { __assign, __extends } from \"tslib\";\nimport { deepMix, each, get } from '@antv/util';\nimport { DIRECTION } from '../constant';\nimport { getFactTitleConfig } from '../util/facet';\nimport { Facet } from './facet';\n/**\n * @ignore\n * 镜像分面\n */\nvar Matrix = /** @class */ (function (_super) {\n    __extends(Matrix, _super);\n    function Matrix() {\n        return _super !== null && _super.apply(this, arguments) || this;\n    }\n    Matrix.prototype.getDefaultCfg = function () {\n        return deepMix({}, _super.prototype.getDefaultCfg.call(this), {\n            type: 'matrix',\n            showTitle: false,\n            columnTitle: __assign({}, _super.prototype.getDefaultTitleCfg.call(this)),\n            rowTitle: __assign({}, _super.prototype.getDefaultTitleCfg.call(this)),\n        });\n    };\n    Matrix.prototype.render = function () {\n        _super.prototype.render.call(this);\n        if (this.cfg.showTitle) {\n            this.renderTitle();\n        }\n    };\n    Matrix.prototype.afterEachView = function (view, facet) {\n        this.processAxis(view, facet);\n    };\n    Matrix.prototype.beforeEachView = function (view, facet) { };\n    Matrix.prototype.generateFacets = function (data) {\n        var _a = this.cfg, fields = _a.fields, type = _a.type;\n        // 矩阵中行列相等，等于指定的字段个数\n        var rowValuesLength = fields.length;\n        var columnValuesLength = rowValuesLength;\n        var rst = [];\n        for (var i = 0; i < columnValuesLength; i++) {\n            var columnField = fields[i];\n            for (var j = 0; j < rowValuesLength; j++) {\n                var rowField = fields[j];\n                var facet = {\n                    type: type,\n                    data: data,\n                    region: this.getRegion(rowValuesLength, columnValuesLength, i, j),\n                    columnValue: columnField,\n                    rowValue: rowField,\n                    columnField: columnField,\n                    rowField: rowField,\n                    columnIndex: i,\n                    rowIndex: j,\n                    columnValuesLength: columnValuesLength,\n                    rowValuesLength: rowValuesLength,\n                };\n                rst.push(facet);\n            }\n        }\n        return rst;\n    };\n    /**\n     * 设置 x 坐标轴的文本、title 是否显示\n     * @param x\n     * @param axes\n     * @param option\n     * @param facet\n     */\n    Matrix.prototype.getXAxisOption = function (x, axes, option, facet) {\n        // 最后一行显示\n        if (facet.rowIndex !== facet.rowValuesLength - 1) {\n            return __assign(__assign({}, option), { label: null, title: null });\n        }\n        return option;\n    };\n    /**\n     * 设置 y 坐标轴的文本、title 是否显示\n     * @param y\n     * @param axes\n     * @param option\n     * @param facet\n     */\n    Matrix.prototype.getYAxisOption = function (y, axes, option, facet) {\n        // 第一列显示\n        if (facet.columnIndex !== 0) {\n            return __assign(__assign({}, option), { title: null, label: null });\n        }\n        return option;\n    };\n    /**\n     * facet title\n     */\n    Matrix.prototype.renderTitle = function () {\n        var _this = this;\n        each(this.facets, function (facet, facetIndex) {\n            var columnIndex = facet.columnIndex, rowIndex = facet.rowIndex, columnValuesLength = facet.columnValuesLength, rowValuesLength = facet.rowValuesLength, columnValue = facet.columnValue, rowValue = facet.rowValue, view = facet.view;\n            // top\n            if (rowIndex === 0) {\n                var formatter = get(_this.cfg.columnTitle, 'formatter');\n                var config = deepMix({\n                    position: ['50%', '0%'],\n                    content: formatter ? formatter(columnValue) : columnValue,\n                }, getFactTitleConfig(DIRECTION.TOP), _this.cfg.columnTitle);\n                view.annotation().text(config);\n            }\n            // right\n            if (columnIndex === columnValuesLength - 1) {\n                var formatter = get(_this.cfg.rowTitle, 'formatter');\n                var config = deepMix({\n                    position: ['100%', '50%'],\n                    content: formatter ? formatter(rowValue) : rowValue,\n                }, getFactTitleConfig(DIRECTION.RIGHT), _this.cfg.rowTitle);\n                view.annotation().text(config);\n            }\n        });\n    };\n    return Matrix;\n}(Facet));\nexport default Matrix;\n//# sourceMappingURL=matrix.js.map","import { __assign, __extends, __read } from \"tslib\";\nimport { deepMix, each, filter, get } from '@antv/util';\nimport { DIRECTION } from '../constant';\nimport { getFactTitleConfig } from '../util/facet';\nimport { Facet } from './facet';\n/**\n * @ignore\n * 镜像分面\n */\nvar Mirror = /** @class */ (function (_super) {\n    __extends(Mirror, _super);\n    function Mirror() {\n        return _super !== null && _super.apply(this, arguments) || this;\n    }\n    Mirror.prototype.getDefaultCfg = function () {\n        return deepMix({}, _super.prototype.getDefaultCfg.call(this), {\n            type: 'mirror',\n            showTitle: true,\n            title: _super.prototype.getDefaultTitleCfg.call(this),\n            transpose: false,\n        });\n    };\n    Mirror.prototype.render = function () {\n        _super.prototype.render.call(this);\n        if (this.cfg.showTitle) {\n            this.renderTitle();\n        }\n    };\n    Mirror.prototype.beforeEachView = function (view, facet) {\n        // 做一下坐标系转化\n        if (this.cfg.transpose) {\n            if (facet.columnIndex % 2 === 0) {\n                view.coordinate().transpose().reflect('x');\n            }\n            else {\n                view.coordinate().transpose();\n            }\n        }\n        else {\n            if (facet.rowIndex % 2 !== 0) {\n                view.coordinate().reflect('y');\n            }\n        }\n    };\n    Mirror.prototype.afterEachView = function (view, facet) {\n        this.processAxis(view, facet);\n    };\n    Mirror.prototype.generateFacets = function (data) {\n        var _this = this;\n        var _a = __read(this.cfg.fields, 1), f = _a[0];\n        var rst = [];\n        var columnValuesLength = 1;\n        var rowValuesLength = 1;\n        var columnValues = [''];\n        var rowValues = [''];\n        var columnField;\n        var rowField;\n        if (this.cfg.transpose) {\n            columnField = f;\n            columnValues = this.getFieldValues(data, columnField).slice(0, 2); // 镜像最多两个\n            columnValuesLength = columnValues.length;\n        }\n        else {\n            rowField = f;\n            rowValues = this.getFieldValues(data, rowField).slice(0, 2); // 镜像最多两个\n            rowValuesLength = rowValues.length;\n        }\n        // 获取每个维度对应的数据配置片段\n        columnValues.forEach(function (xVal, xIndex) {\n            rowValues.forEach(function (yVal, yIndex) {\n                var conditions = [\n                    { field: columnField, value: xVal, values: columnValues },\n                    { field: rowField, value: yVal, values: rowValues },\n                ];\n                var facetData = filter(data, _this.getFacetDataFilter(conditions));\n                var facet = {\n                    type: _this.cfg.type,\n                    data: facetData,\n                    region: _this.getRegion(rowValuesLength, columnValuesLength, xIndex, yIndex),\n                    columnValue: xVal,\n                    rowValue: yVal,\n                    columnField: columnField,\n                    rowField: rowField,\n                    columnIndex: xIndex,\n                    rowIndex: yIndex,\n                    columnValuesLength: columnValuesLength,\n                    rowValuesLength: rowValuesLength,\n                };\n                rst.push(facet);\n            });\n        });\n        return rst;\n    };\n    /**\n     * 设置 x 坐标轴的文本、title 是否显示\n     * @param x\n     * @param axes\n     * @param option\n     * @param facet\n     */\n    Mirror.prototype.getXAxisOption = function (x, axes, option, facet) {\n        // 非最后一行\n        // 当是最后一行或者下面没有 view 时文本不显示\n        if (facet.columnIndex === 1 || facet.rowIndex === 1) {\n            return __assign(__assign({}, option), { label: null, title: null });\n        }\n        return option;\n    };\n    /**\n     * 设置 y 坐标轴的文本、title 是否显示\n     * @param y\n     * @param axes\n     * @param option\n     * @param facet\n     */\n    Mirror.prototype.getYAxisOption = function (y, axes, option, facet) {\n        // do nothing\n        return option;\n    };\n    Mirror.prototype.renderTitle = function () {\n        var _this = this;\n        each(this.facets, function (facet, facetIndex) {\n            var columnValue = facet.columnValue, rowValue = facet.rowValue, view = facet.view;\n            var formatter = get(_this.cfg.title, 'formatter');\n            if (_this.cfg.transpose) {\n                var config = deepMix({\n                    position: ['50%', '0%'],\n                    content: formatter ? formatter(columnValue) : columnValue,\n                }, getFactTitleConfig(DIRECTION.TOP), _this.cfg.title);\n                view.annotation().text(config);\n            }\n            else {\n                var config = deepMix({\n                    position: ['100%', '50%'],\n                    content: formatter ? formatter(rowValue) : rowValue,\n                }, getFactTitleConfig(DIRECTION.RIGHT), _this.cfg.title);\n                view.annotation().text(config);\n            }\n        });\n    };\n    return Mirror;\n}(Facet));\nexport default Mirror;\n//# sourceMappingURL=mirror.js.map","import { __assign, __extends, __read } from \"tslib\";\nimport { deepMix, each, filter, get } from '@antv/util';\nimport { DIRECTION } from '../constant';\nimport { getFactTitleConfig } from '../util/facet';\nimport { Facet } from './facet';\n/**\n * @ignore\n * 矩阵分面\n */\nvar Rect = /** @class */ (function (_super) {\n    __extends(Rect, _super);\n    function Rect() {\n        return _super !== null && _super.apply(this, arguments) || this;\n    }\n    Rect.prototype.afterEachView = function (view, facet) {\n        this.processAxis(view, facet);\n    };\n    Rect.prototype.beforeEachView = function (view, facet) {\n        // do nothing\n    };\n    Rect.prototype.getDefaultCfg = function () {\n        return deepMix({}, _super.prototype.getDefaultCfg.call(this), {\n            type: 'rect',\n            columnTitle: __assign({}, _super.prototype.getDefaultTitleCfg.call(this)),\n            rowTitle: __assign({}, _super.prototype.getDefaultTitleCfg.call(this)),\n        });\n    };\n    Rect.prototype.render = function () {\n        _super.prototype.render.call(this);\n        if (this.cfg.showTitle) {\n            this.renderTitle();\n        }\n    };\n    /**\n     * 生成矩阵分面的分面数据\n     * @param data\n     */\n    Rect.prototype.generateFacets = function (data) {\n        var _this = this;\n        var _a = __read(this.cfg.fields, 2), columnField = _a[0], rowField = _a[1];\n        var rst = [];\n        var columnValuesLength = 1;\n        var rowValuesLength = 1;\n        var columnValues = [''];\n        var rowValues = [''];\n        if (columnField) {\n            columnValues = this.getFieldValues(data, columnField);\n            columnValuesLength = columnValues.length;\n        }\n        if (rowField) {\n            rowValues = this.getFieldValues(data, rowField);\n            rowValuesLength = rowValues.length;\n        }\n        // 获取每个维度对应的数据配置片段\n        columnValues.forEach(function (xVal, xIndex) {\n            rowValues.forEach(function (yVal, yIndex) {\n                var conditions = [\n                    { field: columnField, value: xVal, values: columnValues },\n                    { field: rowField, value: yVal, values: rowValues },\n                ];\n                var facetData = filter(data, _this.getFacetDataFilter(conditions));\n                var facet = {\n                    type: _this.cfg.type,\n                    data: facetData,\n                    region: _this.getRegion(rowValuesLength, columnValuesLength, xIndex, yIndex),\n                    columnValue: xVal,\n                    rowValue: yVal,\n                    columnField: columnField,\n                    rowField: rowField,\n                    columnIndex: xIndex,\n                    rowIndex: yIndex,\n                    columnValuesLength: columnValuesLength,\n                    rowValuesLength: rowValuesLength,\n                };\n                rst.push(facet);\n            });\n        });\n        return rst;\n    };\n    Rect.prototype.renderTitle = function () {\n        var _this = this;\n        each(this.facets, function (facet, facetIndex) {\n            var columnIndex = facet.columnIndex, rowIndex = facet.rowIndex, columnValuesLength = facet.columnValuesLength, columnValue = facet.columnValue, rowValue = facet.rowValue, view = facet.view;\n            // top\n            if (rowIndex === 0) {\n                var formatter = get(_this.cfg.columnTitle, 'formatter');\n                var config = deepMix({\n                    position: ['50%', '0%'],\n                    content: formatter ? formatter(columnValue) : columnValue,\n                }, getFactTitleConfig(DIRECTION.TOP), _this.cfg.columnTitle);\n                view.annotation().text(config);\n            }\n            // right\n            if (columnIndex === columnValuesLength - 1) {\n                var formatter = get(_this.cfg.rowTitle, 'formatter');\n                var config = deepMix({\n                    position: ['100%', '50%'],\n                    content: formatter ? formatter(rowValue) : rowValue,\n                }, getFactTitleConfig(DIRECTION.RIGHT), _this.cfg.rowTitle);\n                view.annotation().text(config);\n            }\n        });\n    };\n    /**\n     * 设置 x 坐标轴的文本、title 是否显示\n     * @param x\n     * @param axes\n     * @param option\n     * @param facet\n     */\n    Rect.prototype.getXAxisOption = function (x, axes, option, facet) {\n        // 非最后一行\n        if (facet.rowIndex !== facet.rowValuesLength - 1) {\n            return __assign(__assign({}, option), { title: null, label: null });\n        }\n        else if (facet.columnIndex !== Math.floor((facet.columnValuesLength - 1) / 2)) {\n            // 不是中间列\n            return __assign(__assign({}, option), { title: null });\n        }\n        return option;\n    };\n    /**\n     * 设置 y 坐标轴的文本、title 是否显示\n     * @param y\n     * @param axes\n     * @param option\n     * @param facet\n     */\n    Rect.prototype.getYAxisOption = function (y, axes, option, facet) {\n        if (facet.columnIndex !== 0) {\n            return __assign(__assign({}, option), { title: null, label: null });\n        }\n        else if (facet.rowIndex !== Math.floor((facet.rowValuesLength - 1) / 2)) {\n            return __assign(__assign({}, option), { title: null });\n        }\n        return option;\n    };\n    return Rect;\n}(Facet));\nexport default Rect;\n//# sourceMappingURL=rect.js.map","import { __assign, __extends, __values } from \"tslib\";\n/**\n * Create By Bruce Too\n * On 2020-02-10\n */\nimport { assign, deepMix, each, get } from '@antv/util';\nimport { DIRECTION, VIEW_LIFE_CIRCLE } from '../constant';\nimport { getFactTitleConfig } from '../util/facet';\nimport { Facet } from './facet';\n/**\n * @ignore\n * Tree Facet\n */\nvar Tree = /** @class */ (function (_super) {\n    __extends(Tree, _super);\n    function Tree() {\n        var _this = _super !== null && _super.apply(this, arguments) || this;\n        _this.afterChartRender = function () {\n            if (_this.facets && _this.cfg.line) {\n                _this.container.clear();\n                _this.drawLines(_this.facets);\n            }\n        };\n        return _this;\n    }\n    Tree.prototype.afterEachView = function (view, facet) {\n        this.processAxis(view, facet);\n    };\n    Tree.prototype.beforeEachView = function (view, facet) { };\n    Tree.prototype.init = function () {\n        _super.prototype.init.call(this);\n        this.view.on(VIEW_LIFE_CIRCLE.AFTER_RENDER, this.afterChartRender);\n    };\n    Tree.prototype.getDefaultCfg = function () {\n        return deepMix({}, _super.prototype.getDefaultCfg.call(this), {\n            type: 'tree',\n            line: {\n                style: {\n                    lineWidth: 1,\n                    stroke: '#ddd',\n                },\n                smooth: false,\n            },\n            showTitle: true,\n            title: _super.prototype.getDefaultTitleCfg.call(this),\n        });\n    };\n    Tree.prototype.generateFacets = function (data) {\n        var fields = this.cfg.fields;\n        if (!fields.length) {\n            throw new Error('Please specify for the fields for rootFacet!');\n        }\n        var rst = [];\n        var rootFacet = {\n            type: this.cfg.type,\n            data: data,\n            region: null,\n            rowValuesLength: this.getRows(),\n            columnValuesLength: 1,\n            rowIndex: 0,\n            columnIndex: 0,\n            rowField: '',\n            columnField: '',\n            rowValue: '',\n            columnValue: '',\n        };\n        rst.push(rootFacet);\n        rootFacet.children = this.getChildFacets(data, 1, rst);\n        this.setRegion(rst);\n        return rst;\n    };\n    Tree.prototype.setRegion = function (facets) {\n        var _this = this;\n        this.forceColIndex(facets);\n        facets.forEach(function (facet) {\n            // @ts-ignore 允许调整\n            facet.region = _this.getRegion(facet.rowValuesLength, facet.columnValuesLength, facet.columnIndex, facet.rowIndex);\n        });\n    };\n    Tree.prototype.getRegion = function (rows, cols, xIndex, yIndex) {\n        var xWidth = 1 / cols; // x轴方向的每个分面的偏移\n        var yWidth = 1 / rows; // y轴方向的每个分面的偏移\n        var start = {\n            x: xWidth * xIndex,\n            y: yWidth * yIndex,\n        };\n        var end = {\n            x: start.x + xWidth,\n            y: start.y + (yWidth * 2) / 3, // 预留1/3的空隙，方便添加连接线\n        };\n        return {\n            start: start,\n            end: end,\n        };\n    };\n    Tree.prototype.forceColIndex = function (facets) {\n        var e_1, _a;\n        var _this = this;\n        var leafs = [];\n        var index = 0;\n        facets.forEach(function (facet) {\n            if (_this.isLeaf(facet)) {\n                leafs.push(facet);\n                // @ts-ignore 允许调整\n                facet.columnIndex = index;\n                index++;\n            }\n        });\n        leafs.forEach(function (facet) {\n            // @ts-ignore\n            facet.columnValuesLength = leafs.length;\n        });\n        var maxLevel = this.cfg.fields.length;\n        for (var i = maxLevel - 1; i >= 0; i--) {\n            var levelFacets = this.getFacetsByLevel(facets, i);\n            try {\n                // var yIndex = maxLevel - i;\n                for (var levelFacets_1 = (e_1 = void 0, __values(levelFacets)), levelFacets_1_1 = levelFacets_1.next(); !levelFacets_1_1.done; levelFacets_1_1 = levelFacets_1.next()) {\n                    var facet = levelFacets_1_1.value;\n                    if (!this.isLeaf(facet)) {\n                        facet.originColIndex = facet.columnIndex;\n                        // @ts-ignore\n                        facet.columnIndex = this.getRegionIndex(facet.children);\n                        // @ts-ignore\n                        facet.columnValuesLength = leafs.length;\n                    }\n                }\n            }\n            catch (e_1_1) { e_1 = { error: e_1_1 }; }\n            finally {\n                try {\n                    if (levelFacets_1_1 && !levelFacets_1_1.done && (_a = levelFacets_1.return)) _a.call(levelFacets_1);\n                }\n                finally { if (e_1) throw e_1.error; }\n            }\n        }\n    };\n    // get facet use level\n    Tree.prototype.getFacetsByLevel = function (facets, level) {\n        var rst = [];\n        facets.forEach(function (facet) {\n            if (facet.rowIndex === level) {\n                rst.push(facet);\n            }\n        });\n        return rst;\n    };\n    // if the facet has children , make it's column index in the middle of it's children\n    Tree.prototype.getRegionIndex = function (children) {\n        var first = children[0];\n        var last = children[children.length - 1];\n        return (last.columnIndex - first.columnIndex) / 2 + first.columnIndex;\n    };\n    // is  a leaf without children\n    Tree.prototype.isLeaf = function (facet) {\n        return !facet.children || !facet.children.length;\n    };\n    Tree.prototype.getRows = function () {\n        return this.cfg.fields.length + 1;\n    };\n    // get child\n    Tree.prototype.getChildFacets = function (data, level, arr) {\n        var _this = this;\n        // [ 'grade', 'class' ]\n        var fields = this.cfg.fields;\n        var length = fields.length;\n        if (length < level) {\n            return;\n        }\n        var rst = [];\n        // get fist level except root node\n        var field = fields[level - 1];\n        // get field value\n        var values = this.getFieldValues(data, field);\n        values.forEach(function (value, index) {\n            var conditions = [{ field: field, value: value, values: values }];\n            var subData = data.filter(_this.getFacetDataFilter(conditions));\n            if (subData.length) {\n                var facet = {\n                    type: _this.cfg.type,\n                    data: subData,\n                    region: null,\n                    columnValue: value,\n                    rowValue: '',\n                    columnField: field,\n                    rowField: '',\n                    columnIndex: index,\n                    rowValuesLength: _this.getRows(),\n                    columnValuesLength: 1,\n                    rowIndex: level,\n                    children: _this.getChildFacets(subData, level + 1, arr),\n                };\n                rst.push(facet);\n                arr.push(facet);\n            }\n        });\n        return rst;\n    };\n    Tree.prototype.render = function () {\n        _super.prototype.render.call(this);\n        if (this.cfg.showTitle) {\n            this.renderTitle();\n        }\n    };\n    Tree.prototype.renderTitle = function () {\n        var _this = this;\n        each(this.facets, function (facet) {\n            var columnValue = facet.columnValue, view = facet.view;\n            var formatter = get(_this.cfg.title, 'formatter');\n            var config = deepMix({\n                position: ['50%', '0%'],\n                content: formatter ? formatter(columnValue) : columnValue,\n            }, getFactTitleConfig(DIRECTION.TOP), _this.cfg.title);\n            view.annotation().text(config);\n        });\n    };\n    Tree.prototype.drawLines = function (facets) {\n        var _this = this;\n        facets.forEach(function (facet) {\n            if (!_this.isLeaf(facet)) {\n                var children = facet.children;\n                _this.addFacetLines(facet, children);\n            }\n        });\n    };\n    // add lines with it's children\n    Tree.prototype.addFacetLines = function (facet, children) {\n        var _this = this;\n        var view = facet.view;\n        var region = view.coordinateBBox;\n        // top, right, bottom, left\n        var start = {\n            x: region.x + region.width / 2,\n            y: region.y + region.height,\n        };\n        children.forEach(function (subFacet) {\n            var subRegion = subFacet.view.coordinateBBox;\n            var end = {\n                x: subRegion.bl.x + (subRegion.tr.x - subRegion.bl.x) / 2,\n                y: subRegion.tr.y,\n            };\n            var middle1 = {\n                x: start.x,\n                y: start.y + (end.y - start.y) / 2,\n            };\n            var middle2 = {\n                x: end.x,\n                y: middle1.y,\n            };\n            _this.drawLine([start, middle1, middle2, end]);\n        });\n    };\n    Tree.prototype.getPath = function (points) {\n        var path = [];\n        var smooth = this.cfg.line.smooth;\n        if (smooth) {\n            path.push(['M', points[0].x, points[0].y]);\n            path.push(['C', points[1].x, points[1].y, points[2].x, points[2].y, points[3].x, points[3].y]);\n        }\n        else {\n            points.forEach(function (point, index) {\n                if (index === 0) {\n                    path.push(['M', point.x, point.y]);\n                }\n                else {\n                    path.push(['L', point.x, point.y]);\n                }\n            });\n        }\n        return path;\n    };\n    // draw line width points\n    Tree.prototype.drawLine = function (points) {\n        var path = this.getPath(points);\n        var line = this.cfg.line.style;\n        this.container.addShape('path', {\n            attrs: assign({\n                // @ts-ignore\n                path: path,\n            }, line),\n        });\n    };\n    Tree.prototype.getXAxisOption = function (x, axes, option, facet) {\n        if (facet.rowIndex !== facet.rowValuesLength - 1) {\n            return __assign(__assign({}, option), { title: null, label: null });\n        }\n        return option;\n    };\n    Tree.prototype.getYAxisOption = function (y, axes, option, facet) {\n        if (facet.originColIndex !== 0 && facet.columnIndex !== 0) {\n            return __assign(__assign({}, option), { title: null, label: null });\n        }\n        return option;\n    };\n    return Tree;\n}(Facet));\nexport default Tree;\n//# sourceMappingURL=tree.js.map","import { __read, __spreadArray } from \"tslib\";\nimport { reduce, isNumber } from '@antv/util';\n/**\n * 获得中位数\n * @param array\n */\nexport function getMedian(array) {\n    var arr = __spreadArray([], __read(array), false);\n    // 先排序\n    arr.sort(function (a, b) {\n        return a - b;\n    });\n    var len = arr.length;\n    // median\n    // 0\n    if (len === 0) {\n        return 0;\n    }\n    // 奇数\n    if (len % 2 === 1) {\n        return arr[(len - 1) / 2];\n    }\n    // 偶数\n    return (arr[len / 2] + arr[len / 2 - 1]) / 2;\n}\n/**\n * 获得平均值\n * @param array\n */\nexport function getMean(array) {\n    var sum = reduce(array, function (r, num) {\n        return (r += isNaN(num) || !isNumber(num) ? 0 : num);\n    }, 0);\n    return array.length === 0 ? 0 : sum / array.length;\n}\n//# sourceMappingURL=stat.js.map","import { getMedian, getMean } from './stat';\n/**\n * parse the value position\n * @param val\n * @param scale\n */\nexport function getNormalizedValue(val, scale) {\n    if (!scale) {\n        return null;\n    }\n    var scaled;\n    switch (val) {\n        case 'start':\n            return 0;\n        case 'center':\n            return 0.5;\n        case 'end':\n            return 1;\n        case 'median': {\n            scaled = scale.isCategory ? getMedian(scale.values.map(function (_, idx) { return idx; })) : getMedian(scale.values);\n            break;\n        }\n        case 'mean': {\n            scaled = scale.isCategory ? (scale.values.length - 1) / 2 : getMean(scale.values);\n            break;\n        }\n        case 'min':\n            scaled = scale.isCategory ? 0 : scale[val];\n            break;\n        case 'max':\n            scaled = scale.isCategory ? scale.values.length - 1 : scale[val];\n            break;\n        default:\n            scaled = val;\n            break;\n    }\n    return scale.scale(scaled);\n}\n//# sourceMappingURL=annotation.js.map","import { __assign, __extends, __read, __rest, __values } from \"tslib\";\nimport { contains, deepMix, each, get, isArray, isFunction, isNil, isString, keys, upperFirst, find, includes, } from '@antv/util';\nimport { Annotation as AnnotationComponent } from '../../dependents';\nimport { DEFAULT_ANIMATE_CFG } from '../../animate/';\nimport { COMPONENT_TYPE, DIRECTION, GEOMETRY_LIFE_CIRCLE, LAYER, VIEW_LIFE_CIRCLE } from '../../constant';\nimport { getAngleByPoint, getDistanceToCenter } from '../../util/coordinate';\nimport { omit } from '../../util/helper';\nimport { getNormalizedValue } from '../../util/annotation';\nimport { Controller } from './base';\n/** 需要在图形绘制完成后才渲染的辅助组件类型列表 */\nvar ANNOTATIONS_AFTER_RENDER = ['regionFilter', 'shape'];\n/**\n * Annotation controller, 主要作用:\n * 1. 创建 Annotation: line、text、arc ...\n * 2. 生命周期: init、layout、render、clear、destroy\n */\nvar Annotation = /** @class */ (function (_super) {\n    __extends(Annotation, _super);\n    function Annotation(view) {\n        var _this = _super.call(this, view) || this;\n        /* 组件更新的 cache，组件配置 object : 组件 */\n        _this.cache = new Map();\n        _this.foregroundContainer = _this.view.getLayer(LAYER.FORE).addGroup();\n        _this.backgroundContainer = _this.view.getLayer(LAYER.BG).addGroup();\n        _this.option = [];\n        return _this;\n    }\n    Object.defineProperty(Annotation.prototype, \"name\", {\n        get: function () {\n            return 'annotation';\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Annotation.prototype.init = function () { };\n    /**\n     * 因为 annotation 需要依赖坐标系信息，所以 render 阶段为空方法，实际的创建逻辑都在 layout 中\n     */\n    Annotation.prototype.layout = function () {\n        this.update();\n    };\n    // 因为 Annotation 不参与布局，但是渲染的位置依赖于坐标系，所以可以将绘制阶段延迟到 layout() 进行\n    Annotation.prototype.render = function () { };\n    /**\n     * 更新\n     */\n    Annotation.prototype.update = function () {\n        var _this = this;\n        // 1. 先处理需要在图形渲染之后的辅助组件 需要在 Geometry 完成之后，拿到图形信息\n        this.onAfterRender(function () {\n            var updated = new Map();\n            // 先看是否有 regionFilter/shape 要更新\n            each(_this.option, function (option) {\n                if (includes(ANNOTATIONS_AFTER_RENDER, option.type)) {\n                    var co = _this.updateOrCreate(option);\n                    // 存储已经处理过的\n                    if (co) {\n                        updated.set(_this.getCacheKey(option), co);\n                    }\n                }\n            });\n            // 处理完成之后，更新 cache\n            // 处理完成之后，销毁删除的\n            _this.cache = _this.syncCache(updated);\n        });\n        // 2. 处理非 regionFilter\n        var updateCache = new Map();\n        each(this.option, function (option) {\n            if (!includes(ANNOTATIONS_AFTER_RENDER, option.type)) {\n                var co = _this.updateOrCreate(option);\n                // 存储已经处理过的\n                if (co) {\n                    updateCache.set(_this.getCacheKey(option), co);\n                }\n            }\n        });\n        this.cache = this.syncCache(updateCache);\n    };\n    /**\n     * 清空\n     * @param includeOption 是否清空 option 配置项\n     */\n    Annotation.prototype.clear = function (includeOption) {\n        if (includeOption === void 0) { includeOption = false; }\n        _super.prototype.clear.call(this);\n        this.clearComponents();\n        this.foregroundContainer.clear();\n        this.backgroundContainer.clear();\n        // clear all option\n        if (includeOption) {\n            this.option = [];\n        }\n    };\n    Annotation.prototype.destroy = function () {\n        this.clear(true);\n        this.foregroundContainer.remove(true);\n        this.backgroundContainer.remove(true);\n    };\n    /**\n     * 复写基类的方法\n     */\n    Annotation.prototype.getComponents = function () {\n        var co = [];\n        this.cache.forEach(function (value) {\n            co.push(value);\n        });\n        return co;\n    };\n    /**\n     * 清除当前的组件\n     */\n    Annotation.prototype.clearComponents = function () {\n        this.getComponents().forEach(function (co) {\n            co.component.destroy();\n        });\n        this.cache.clear();\n    };\n    /**\n     * region filter 比较特殊的渲染时机\n     * @param doWhat\n     */\n    Annotation.prototype.onAfterRender = function (doWhat) {\n        var done = false;\n        if (this.view.getOptions().animate) {\n            this.view.geometries.forEach(function (g) {\n                // 如果 geometry 开启，则监听\n                if (g.animateOption) {\n                    g.once(GEOMETRY_LIFE_CIRCLE.AFTER_DRAW_ANIMATE, function () {\n                        doWhat();\n                    });\n                    done = true;\n                }\n            });\n        }\n        if (!done) {\n            this.view.getRootView().once(VIEW_LIFE_CIRCLE.AFTER_RENDER, function () {\n                doWhat();\n            });\n        }\n    };\n    Annotation.prototype.createAnnotation = function (option) {\n        var type = option.type;\n        var Ctor = AnnotationComponent[upperFirst(type)];\n        if (Ctor) {\n            var theme = this.getAnnotationTheme(type);\n            var cfg = this.getAnnotationCfg(type, option, theme);\n            // 不创建\n            if (!cfg) {\n                return null;\n            }\n            var annotation = new Ctor(cfg);\n            return {\n                component: annotation,\n                layer: this.isTop(cfg) ? LAYER.FORE : LAYER.BG,\n                direction: DIRECTION.NONE,\n                type: COMPONENT_TYPE.ANNOTATION,\n                extra: option,\n            };\n        }\n    };\n    // APIs for creating annotation component\n    Annotation.prototype.annotation = function (option) {\n        this.option.push(option);\n    };\n    /**\n     * 创建 Arc\n     * @param option\n     * @returns AnnotationController\n     */\n    Annotation.prototype.arc = function (option) {\n        this.annotation(__assign({ type: 'arc' }, option));\n        return this;\n    };\n    /**\n     * 创建 image\n     * @param option\n     * @returns AnnotationController\n     */\n    Annotation.prototype.image = function (option) {\n        this.annotation(__assign({ type: 'image' }, option));\n        return this;\n    };\n    /**\n     * 创建 Line\n     * @param option\n     * @returns AnnotationController\n     */\n    Annotation.prototype.line = function (option) {\n        this.annotation(__assign({ type: 'line' }, option));\n        return this;\n    };\n    /**\n     * 创建 Region\n     * @param option\n     * @returns AnnotationController\n     */\n    Annotation.prototype.region = function (option) {\n        this.annotation(__assign({ type: 'region' }, option));\n        return this;\n    };\n    /**\n     * 创建 Text\n     * @param option\n     * @returns AnnotationController\n     */\n    Annotation.prototype.text = function (option) {\n        this.annotation(__assign({ type: 'text' }, option));\n        return this;\n    };\n    /**\n     * 创建 DataMarker\n     * @param option\n     * @returns AnnotationController\n     */\n    Annotation.prototype.dataMarker = function (option) {\n        this.annotation(__assign({ type: 'dataMarker' }, option));\n        return this;\n    };\n    /**\n     * 创建 DataRegion\n     * @param option\n     * @returns AnnotationController\n     */\n    Annotation.prototype.dataRegion = function (option) {\n        this.annotation(__assign({ type: 'dataRegion' }, option));\n    };\n    /**\n     * 创建 RegionFilter\n     * @param option\n     * @returns AnnotationController\n     */\n    Annotation.prototype.regionFilter = function (option) {\n        this.annotation(__assign({ type: 'regionFilter' }, option));\n    };\n    /**\n     * 创建 ShapeAnnotation\n     * @param option\n     */\n    Annotation.prototype.shape = function (option) {\n        this.annotation(__assign({ type: 'shape' }, option));\n    };\n    /**\n     * 创建 HtmlAnnotation\n     * @param option\n     */\n    Annotation.prototype.html = function (option) {\n        this.annotation(__assign({ type: 'html' }, option));\n    };\n    // end API\n    /**\n     * parse the point position to [x, y]\n     * @param p Position\n     * @returns { x, y }\n     */\n    Annotation.prototype.parsePosition = function (p) {\n        var e_1, _a;\n        var xScale = this.view.getXScale();\n        // 转成 object\n        var yScales = this.view.getScalesByDim('y');\n        var position = isFunction(p) ? p.call(null, xScale, yScales) : p;\n        var x = 0;\n        var y = 0;\n        // 入参是 [24, 24] 这类时\n        if (isArray(position)) {\n            var _b = __read(position, 2), xPos = _b[0], yPos = _b[1];\n            // 如果数据格式是 ['50%', '50%'] 的格式\n            // fix: 原始数据中可能会包含 'xxx5%xxx' 这样的数据，需要判断下 https://github.com/antvis/f2/issues/590\n            // @ts-ignore\n            if (isString(xPos) && xPos.indexOf('%') !== -1 && !isNaN(xPos.slice(0, -1))) {\n                return this.parsePercentPosition(position);\n            }\n            x = getNormalizedValue(xPos, xScale);\n            y = getNormalizedValue(yPos, Object.values(yScales)[0]);\n        }\n        else if (!isNil(position)) {\n            try {\n                // 入参是 object 结构，数据点\n                for (var _c = __values(keys(position)), _d = _c.next(); !_d.done; _d = _c.next()) {\n                    var key = _d.value;\n                    var value = position[key];\n                    if (key === xScale.field) {\n                        x = getNormalizedValue(value, xScale);\n                    }\n                    if (yScales[key]) {\n                        y = getNormalizedValue(value, yScales[key]);\n                    }\n                }\n            }\n            catch (e_1_1) { e_1 = { error: e_1_1 }; }\n            finally {\n                try {\n                    if (_d && !_d.done && (_a = _c.return)) _a.call(_c);\n                }\n                finally { if (e_1) throw e_1.error; }\n            }\n        }\n        if (isNaN(x) || isNaN(y)) {\n            return null;\n        }\n        return this.view.getCoordinate().convert({ x: x, y: y });\n    };\n    /**\n     * parse all the points between start and end\n     * @param start\n     * @param end\n     * @return Point[]\n     */\n    Annotation.prototype.getRegionPoints = function (start, end) {\n        var _this = this;\n        var xScale = this.view.getXScale();\n        var yScales = this.view.getScalesByDim('y');\n        var yScale = Object.values(yScales)[0];\n        var xField = xScale.field;\n        var viewData = this.view.getData();\n        var startXValue = isArray(start) ? start[0] : start[xField];\n        var endXValue = isArray(end) ? end[0] : end[xField];\n        var arr = [];\n        var startIndex;\n        each(viewData, function (item, idx) {\n            if (item[xField] === startXValue) {\n                startIndex = idx;\n            }\n            if (idx >= startIndex) {\n                var point = _this.parsePosition([item[xField], item[yScale.field]]);\n                if (point) {\n                    arr.push(point);\n                }\n            }\n            if (item[xField] === endXValue) {\n                return false;\n            }\n        });\n        return arr;\n    };\n    /**\n     * parse percent position\n     * @param position\n     */\n    Annotation.prototype.parsePercentPosition = function (position) {\n        var xPercent = parseFloat(position[0]) / 100;\n        var yPercent = parseFloat(position[1]) / 100;\n        var coordinate = this.view.getCoordinate();\n        var start = coordinate.start, end = coordinate.end;\n        var topLeft = {\n            x: Math.min(start.x, end.x),\n            y: Math.min(start.y, end.y),\n        };\n        var x = coordinate.getWidth() * xPercent + topLeft.x;\n        var y = coordinate.getHeight() * yPercent + topLeft.y;\n        return { x: x, y: y };\n    };\n    /**\n     * get coordinate bbox\n     */\n    Annotation.prototype.getCoordinateBBox = function () {\n        var coordinate = this.view.getCoordinate();\n        var start = coordinate.start, end = coordinate.end;\n        var width = coordinate.getWidth();\n        var height = coordinate.getHeight();\n        var topLeft = {\n            x: Math.min(start.x, end.x),\n            y: Math.min(start.y, end.y),\n        };\n        return {\n            x: topLeft.x,\n            y: topLeft.y,\n            minX: topLeft.x,\n            minY: topLeft.y,\n            maxX: topLeft.x + width,\n            maxY: topLeft.y + height,\n            width: width,\n            height: height,\n        };\n    };\n    /**\n     * get annotation component config by different type\n     * @param type\n     * @param option 用户的配置\n     * @param theme\n     */\n    Annotation.prototype.getAnnotationCfg = function (type, option, theme) {\n        var _this = this;\n        var coordinate = this.view.getCoordinate();\n        var canvas = this.view.getCanvas();\n        var o = {};\n        if (isNil(option)) {\n            return null;\n        }\n        var start = option.start, end = option.end, position = option.position;\n        var sp = this.parsePosition(start);\n        var ep = this.parsePosition(end);\n        var textPoint = this.parsePosition(position);\n        if (['arc', 'image', 'line', 'region', 'regionFilter'].includes(type) && (!sp || !ep)) {\n            return null;\n        }\n        else if (['text', 'dataMarker', 'html'].includes(type) && !textPoint) {\n            return null;\n        }\n        if (type === 'arc') {\n            var _a = option, start_1 = _a.start, end_1 = _a.end, rest = __rest(_a, [\"start\", \"end\"]);\n            var startAngle = getAngleByPoint(coordinate, sp);\n            var endAngle = getAngleByPoint(coordinate, ep);\n            if (startAngle > endAngle) {\n                endAngle = Math.PI * 2 + endAngle;\n            }\n            o = __assign(__assign({}, rest), { center: coordinate.getCenter(), radius: getDistanceToCenter(coordinate, sp), startAngle: startAngle, endAngle: endAngle });\n        }\n        else if (type === 'image') {\n            var _b = option, start_2 = _b.start, end_2 = _b.end, rest = __rest(_b, [\"start\", \"end\"]);\n            o = __assign(__assign({}, rest), { start: sp, end: ep, src: option.src });\n        }\n        else if (type === 'line') {\n            var _c = option, start_3 = _c.start, end_3 = _c.end, rest = __rest(_c, [\"start\", \"end\"]);\n            o = __assign(__assign({}, rest), { start: sp, end: ep, text: get(option, 'text', null) });\n        }\n        else if (type === 'region') {\n            var _d = option, start_4 = _d.start, end_4 = _d.end, rest = __rest(_d, [\"start\", \"end\"]);\n            o = __assign(__assign({}, rest), { start: sp, end: ep });\n        }\n        else if (type === 'text') {\n            var filteredData = this.view.getData();\n            var _e = option, position_1 = _e.position, content = _e.content, rest = __rest(_e, [\"position\", \"content\"]);\n            var textContent = content;\n            if (isFunction(content)) {\n                textContent = content(filteredData);\n            }\n            o = __assign(__assign(__assign({}, textPoint), rest), { content: textContent });\n        }\n        else if (type === 'dataMarker') {\n            var _f = option, position_2 = _f.position, point = _f.point, line = _f.line, text = _f.text, autoAdjust = _f.autoAdjust, direction = _f.direction, rest = __rest(_f, [\"position\", \"point\", \"line\", \"text\", \"autoAdjust\", \"direction\"]);\n            o = __assign(__assign(__assign({}, rest), textPoint), { coordinateBBox: this.getCoordinateBBox(), point: point, line: line, text: text, autoAdjust: autoAdjust, direction: direction });\n        }\n        else if (type === 'dataRegion') {\n            var _g = option, start_5 = _g.start, end_5 = _g.end, region = _g.region, text = _g.text, lineLength = _g.lineLength, rest = __rest(_g, [\"start\", \"end\", \"region\", \"text\", \"lineLength\"]);\n            o = __assign(__assign({}, rest), { points: this.getRegionPoints(start_5, end_5), region: region, text: text, lineLength: lineLength });\n        }\n        else if (type === 'regionFilter') {\n            var _h = option, start_6 = _h.start, end_6 = _h.end, apply_1 = _h.apply, color = _h.color, rest = __rest(_h, [\"start\", \"end\", \"apply\", \"color\"]);\n            var geometries = this.view.geometries;\n            var shapes_1 = [];\n            var addShapes_1 = function (item) {\n                if (!item) {\n                    return;\n                }\n                if (item.isGroup()) {\n                    item.getChildren().forEach(function (child) { return addShapes_1(child); });\n                }\n                else {\n                    shapes_1.push(item);\n                }\n            };\n            each(geometries, function (geom) {\n                if (apply_1) {\n                    if (contains(apply_1, geom.type)) {\n                        each(geom.elements, function (elem) {\n                            addShapes_1(elem.shape);\n                        });\n                    }\n                }\n                else {\n                    each(geom.elements, function (elem) {\n                        addShapes_1(elem.shape);\n                    });\n                }\n            });\n            o = __assign(__assign({}, rest), { color: color, shapes: shapes_1, start: sp, end: ep });\n        }\n        else if (type === 'shape') {\n            var _j = option, render_1 = _j.render, restOptions = __rest(_j, [\"render\"]);\n            var wrappedRender = function (container) {\n                if (isFunction(option.render)) {\n                    return render_1(container, _this.view, { parsePosition: _this.parsePosition.bind(_this) });\n                }\n            };\n            o = __assign(__assign({}, restOptions), { render: wrappedRender });\n        }\n        else if (type === 'html') {\n            var _k = option, html_1 = _k.html, position_3 = _k.position, restOptions = __rest(_k, [\"html\", \"position\"]);\n            var wrappedHtml = function (container) {\n                if (isFunction(html_1)) {\n                    return html_1(container, _this.view);\n                }\n                return html_1;\n            };\n            o = __assign(__assign(__assign({}, restOptions), textPoint), { \n                // html 组件需要指定 parent\n                parent: canvas.get('el').parentNode, html: wrappedHtml });\n        }\n        // 合并主题，用户配置优先级高于默认主题\n        var cfg = deepMix({}, theme, __assign(__assign({}, o), { top: option.top, style: option.style, offsetX: option.offsetX, offsetY: option.offsetY }));\n        if (type !== 'html') {\n            // html 类型不使用 G container\n            cfg.container = this.getComponentContainer(cfg);\n        }\n        cfg.animate = this.view.getOptions().animate && cfg.animate && get(option, 'animate', cfg.animate); // 如果 view 关闭动画，则不执行\n        cfg.animateOption = deepMix({}, DEFAULT_ANIMATE_CFG, cfg.animateOption, option.animateOption);\n        return cfg;\n    };\n    /**\n     * is annotation render on top\n     * @param option\n     * @return whethe on top\n     */\n    Annotation.prototype.isTop = function (option) {\n        return get(option, 'top', true);\n    };\n    /**\n     * get the container by option.top\n     * default is on top\n     * @param option\n     * @returns the container\n     */\n    Annotation.prototype.getComponentContainer = function (option) {\n        return this.isTop(option) ? this.foregroundContainer : this.backgroundContainer;\n    };\n    Annotation.prototype.getAnnotationTheme = function (type) {\n        return get(this.view.getTheme(), ['components', 'annotation', type], {});\n    };\n    /**\n     * 创建或者更新 annotation\n     * @param option\n     */\n    Annotation.prototype.updateOrCreate = function (option) {\n        // 拿到缓存的内容\n        var co = this.cache.get(this.getCacheKey(option));\n        // 存在则更新，不存在在创建\n        if (co) {\n            var type = option.type;\n            var theme = this.getAnnotationTheme(type);\n            var cfg = this.getAnnotationCfg(type, option, theme);\n            // 忽略掉一些配置\n            if (cfg) {\n                omit(cfg, ['container']);\n            }\n            co.component.update(__assign(__assign({}, (cfg || {})), { visible: !!cfg }));\n            // 对于 regionFilter/shape，因为生命周期的原因，需要额外 render\n            if (includes(ANNOTATIONS_AFTER_RENDER, option.type)) {\n                co.component.render();\n            }\n        }\n        else {\n            // 不存在，创建\n            co = this.createAnnotation(option);\n            if (co) {\n                co.component.init();\n                // Note：regionFilter/shape 特殊处理，regionFilter/shape 需要取到 Geometry 中的 Shape，需要在 view render 之后处理\n                // 其他组件使用外层的统一 render 逻辑\n                if (includes(ANNOTATIONS_AFTER_RENDER, option.type)) {\n                    co.component.render();\n                }\n            }\n        }\n        return co;\n    };\n    /**\n     * 更新缓存，以及销毁组件\n     * @param updated 更新或者创建的组件\n     */\n    Annotation.prototype.syncCache = function (updated) {\n        var _this = this;\n        var newCache = new Map(this.cache); // clone 一份\n        // 将 update 更新到 cache\n        updated.forEach(function (co, key) {\n            newCache.set(key, co);\n        });\n        // 另外和 options 进行对比，删除\n        newCache.forEach(function (co, key) {\n            // option 中已经找不到，那么就是删除的\n            if (!find(_this.option, function (option) {\n                return key === _this.getCacheKey(option);\n            })) {\n                co.component.destroy();\n                newCache.delete(key);\n            }\n        });\n        return newCache;\n    };\n    /**\n     * 获得缓存组件的 key\n     * @param option\n     */\n    Annotation.prototype.getCacheKey = function (option) {\n        // 如果存在 id，则使用 id string，否则直接使用 option 引用作为 key\n        return option;\n        // 后续扩展 id 用\n        // const id = get(option, 'id');\n        // return id ? id : option;\n    };\n    return Annotation;\n}(Controller));\nexport default Annotation;\n//# sourceMappingURL=annotation.js.map","import { deepMix, get, map } from '@antv/util';\n/**\n * @ignore\n * get the grid theme by type, will mix the common cfg of axis\n * @param theme\n * @param direction\n * @returns theme object\n */\nexport function getGridThemeCfg(theme, direction) {\n    var axisTheme = deepMix({}, get(theme, ['components', 'axis', 'common']), get(theme, ['components', 'axis', direction]));\n    return get(axisTheme, ['grid'], {});\n}\n/**\n * @ignore\n * get axis grid items\n * @param coordinate\n * @param scale\n * @param dim\n * @return items\n */\nexport function getLineGridItems(coordinate, scale, dim, alignTick) {\n    var items = [];\n    var ticks = scale.getTicks();\n    if (coordinate.isPolar) {\n        // 补全 ticks\n        ticks.push({\n            value: 1,\n            text: '',\n            tickValue: '',\n        });\n    }\n    ticks.reduce(function (preTick, currentTick, currentIndex) {\n        var currentValue = currentTick.value;\n        if (alignTick) {\n            items.push({\n                points: [\n                    coordinate.convert(dim === 'y' ? { x: 0, y: currentValue } : { x: currentValue, y: 0 }),\n                    coordinate.convert(dim === 'y' ? { x: 1, y: currentValue } : { x: currentValue, y: 1 }),\n                ],\n            });\n        }\n        else {\n            if (currentIndex) {\n                var preValue = preTick.value;\n                var middleValue = (preValue + currentValue) / 2;\n                items.push({\n                    points: [\n                        coordinate.convert(dim === 'y' ? { x: 0, y: middleValue } : { x: middleValue, y: 0 }),\n                        coordinate.convert(dim === 'y' ? { x: 1, y: middleValue } : { x: middleValue, y: 1 }),\n                    ],\n                });\n            }\n        }\n        return currentTick;\n    }, ticks[0]);\n    return items;\n}\n/**\n * @ignore\n * get\n * @param coordinate\n * @param xScale\n * @param yScale\n * @param dim\n * @returns items\n */\nexport function getCircleGridItems(coordinate, xScale, yScale, alignTick, dim) {\n    var count = xScale.values.length;\n    var items = [];\n    var ticks = yScale.getTicks();\n    ticks.reduce(function (preTick, currentTick) {\n        var preValue = preTick ? preTick.value : currentTick.value; // 只有一项数据时取当前值\n        var currentValue = currentTick.value;\n        var middleValue = (preValue + currentValue) / 2;\n        if (dim === 'x') {\n            // 如果是 x 轴作为半径轴，那么只需要取圆弧收尾两个即可\n            items.push({\n                points: [\n                    coordinate.convert({\n                        x: alignTick ? currentValue : middleValue,\n                        y: 0,\n                    }),\n                    coordinate.convert({\n                        x: alignTick ? currentValue : middleValue,\n                        y: 1,\n                    }),\n                ],\n            });\n        }\n        else {\n            items.push({\n                points: map(Array(count + 1), function (__, idx) {\n                    return coordinate.convert({\n                        x: idx / count,\n                        y: alignTick ? currentValue : middleValue,\n                    });\n                }),\n            });\n        }\n        return currentTick;\n    }, ticks[0]);\n    return items;\n}\n/**\n * @ignore\n * show grid or not\n * @param axisTheme\n * @param axisOption\n */\nexport function showGrid(axisTheme, axisOption) {\n    var userGrid = get(axisOption, 'grid');\n    if (userGrid === null) {\n        return false;\n    }\n    var themeGrid = get(axisTheme, 'grid');\n    return !(userGrid === undefined && themeGrid === null);\n}\n//# sourceMappingURL=grid.js.map","import { __assign, __extends } from \"tslib\";\nimport { deepMix, each, get, isUndefined } from '@antv/util';\nimport { DIRECTION, COMPONENT_TYPE, LAYER } from '../../constant';\nimport { CircleAxis, CircleGrid, LineAxis, LineGrid } from '../../dependents';\nimport { DEFAULT_ANIMATE_CFG } from '../../animate/';\nimport { getAxisDirection, getAxisFactorByRegion, getAxisRegion, getAxisThemeCfg, getAxisTitleOptions, getAxisTitleText, getCircleAxisCenterRadius, isVertical, } from '../../util/axis';\nimport { getAxisOption } from '../../util/axis';\nimport { getCircleGridItems, getGridThemeCfg, getLineGridItems, showGrid } from '../../util/grid';\nimport { omit } from '../../util/helper';\nimport { Controller } from './base';\n// update 组件的时候，忽略的数据更新\nvar OMIT_CFG = ['container'];\n// 坐标轴默认动画配置\nvar AXIS_DEFAULT_ANIMATE_CFG = __assign(__assign({}, DEFAULT_ANIMATE_CFG), { appear: null });\n/**\n * @ignore\n * G2 Axis controller, will:\n *  - create component\n *    - axis\n *    - grid\n *  - life circle\n */\nvar Axis = /** @class */ (function (_super) {\n    __extends(Axis, _super);\n    function Axis(view) {\n        var _this = _super.call(this, view) || this;\n        /** 使用 object 存储组件 */\n        _this.cache = new Map();\n        // 先创建 gridContainer，将 grid 放到 axis 底层\n        _this.gridContainer = _this.view.getLayer(LAYER.BG).addGroup();\n        _this.gridForeContainer = _this.view.getLayer(LAYER.FORE).addGroup();\n        _this.axisContainer = _this.view.getLayer(LAYER.BG).addGroup();\n        _this.axisForeContainer = _this.view.getLayer(LAYER.FORE).addGroup();\n        return _this;\n    }\n    Object.defineProperty(Axis.prototype, \"name\", {\n        get: function () {\n            return 'axis';\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Axis.prototype.init = function () { };\n    Axis.prototype.render = function () {\n        this.update();\n    };\n    /**\n     * 更新组件布局，位置大小\n     */\n    Axis.prototype.layout = function () {\n        var _this = this;\n        var coordinate = this.view.getCoordinate();\n        each(this.getComponents(), function (co) {\n            var component = co.component, direction = co.direction, type = co.type, extra = co.extra;\n            var dim = extra.dim, scale = extra.scale, alignTick = extra.alignTick;\n            var updated;\n            if (type === COMPONENT_TYPE.AXIS) {\n                if (coordinate.isPolar) {\n                    if (dim === 'x') {\n                        updated = coordinate.isTransposed\n                            ? getAxisRegion(coordinate, direction)\n                            : getCircleAxisCenterRadius(coordinate);\n                    }\n                    else if (dim === 'y') {\n                        updated = coordinate.isTransposed\n                            ? getCircleAxisCenterRadius(coordinate)\n                            : getAxisRegion(coordinate, direction);\n                    }\n                }\n                else {\n                    updated = getAxisRegion(coordinate, direction);\n                }\n            }\n            else if (type === COMPONENT_TYPE.GRID) {\n                if (coordinate.isPolar) {\n                    var items = void 0;\n                    if (coordinate.isTransposed) {\n                        items =\n                            dim === 'x'\n                                ? getCircleGridItems(coordinate, _this.view.getYScales()[0], scale, alignTick, dim)\n                                : getLineGridItems(coordinate, scale, dim, alignTick);\n                    }\n                    else {\n                        items =\n                            dim === 'x'\n                                ? getLineGridItems(coordinate, scale, dim, alignTick)\n                                : getCircleGridItems(coordinate, _this.view.getXScale(), scale, alignTick, dim);\n                    }\n                    updated = {\n                        items: items,\n                        // coordinate 更新之后，center 也变化了\n                        center: _this.view.getCoordinate().getCenter(),\n                    };\n                }\n                else {\n                    updated = { items: getLineGridItems(coordinate, scale, dim, alignTick) };\n                }\n            }\n            component.update(updated);\n        });\n    };\n    /**\n     * 更新 axis 组件\n     */\n    Axis.prototype.update = function () {\n        this.option = this.view.getOptions().axes;\n        var updatedCache = new Map();\n        this.updateXAxes(updatedCache);\n        this.updateYAxes(updatedCache);\n        // 处理完成之后，销毁删除的\n        // 不在处理中的\n        var newCache = new Map();\n        this.cache.forEach(function (co, key) {\n            if (updatedCache.has(key)) {\n                newCache.set(key, co);\n            }\n            else {\n                // 不存在，则是所有需要被销毁的组件\n                co.component.destroy();\n            }\n        });\n        // 更新缓存\n        this.cache = newCache;\n    };\n    Axis.prototype.clear = function () {\n        _super.prototype.clear.call(this);\n        this.cache.clear();\n        this.gridContainer.clear();\n        this.gridForeContainer.clear();\n        this.axisContainer.clear();\n        this.axisForeContainer.clear();\n    };\n    Axis.prototype.destroy = function () {\n        _super.prototype.destroy.call(this);\n        this.gridContainer.remove(true);\n        this.gridForeContainer.remove(true);\n        this.axisContainer.remove(true);\n        this.axisForeContainer.remove(true);\n    };\n    /**\n     * @override\n     */\n    Axis.prototype.getComponents = function () {\n        var co = [];\n        this.cache.forEach(function (value) {\n            co.push(value);\n        });\n        return co;\n    };\n    /**\n     * 更新 x axis\n     * @param updatedCache\n     */\n    Axis.prototype.updateXAxes = function (updatedCache) {\n        // x axis\n        var scale = this.view.getXScale();\n        if (!scale || scale.isIdentity) {\n            return;\n        }\n        var xAxisOption = getAxisOption(this.option, scale.field);\n        if (xAxisOption === false) {\n            return;\n        }\n        var direction = getAxisDirection(xAxisOption, DIRECTION.BOTTOM);\n        var layer = LAYER.BG;\n        var dim = 'x';\n        var coordinate = this.view.getCoordinate();\n        var axisId = this.getId('axis', scale.field);\n        var gridId = this.getId('grid', scale.field);\n        if (coordinate.isRect) {\n            // 1. do axis update\n            var axis = this.cache.get(axisId);\n            // 存在则更新\n            if (axis) {\n                var cfg = this.getLineAxisCfg(scale, xAxisOption, direction);\n                omit(cfg, OMIT_CFG);\n                axis.component.update(cfg);\n                updatedCache.set(axisId, axis);\n            }\n            else {\n                // 不存在，则创建\n                axis = this.createLineAxis(scale, xAxisOption, layer, direction, dim);\n                this.cache.set(axisId, axis);\n                updatedCache.set(axisId, axis);\n            }\n            // 2. do grid update\n            var grid = this.cache.get(gridId);\n            // 存在则更新\n            if (grid) {\n                var cfg = this.getLineGridCfg(scale, xAxisOption, direction, dim);\n                omit(cfg, OMIT_CFG);\n                grid.component.update(cfg);\n                updatedCache.set(gridId, grid);\n            }\n            else {\n                // 不存在则创建\n                grid = this.createLineGrid(scale, xAxisOption, layer, direction, dim);\n                if (grid) {\n                    this.cache.set(gridId, grid);\n                    updatedCache.set(gridId, grid);\n                }\n            }\n        }\n        else if (coordinate.isPolar) {\n            // 1. do axis update\n            var axis = this.cache.get(axisId);\n            // 存在则更新\n            if (axis) {\n                var cfg = coordinate.isTransposed\n                    ? this.getLineAxisCfg(scale, xAxisOption, DIRECTION.RADIUS)\n                    : this.getCircleAxisCfg(scale, xAxisOption, direction);\n                omit(cfg, OMIT_CFG);\n                axis.component.update(cfg);\n                updatedCache.set(axisId, axis);\n            }\n            else {\n                // 不存在，则创建\n                if (coordinate.isTransposed) {\n                    if (isUndefined(xAxisOption)) {\n                        // 默认不渲染转置极坐标下的坐标轴\n                        return;\n                    }\n                    else {\n                        // 如果用户打开了隐藏的坐标轴 chart.axis(true)/chart.axis('x', true)\n                        // 那么对于转置了的极坐标，半径轴显示的是 x 轴对应的数据\n                        axis = this.createLineAxis(scale, xAxisOption, layer, DIRECTION.RADIUS, dim);\n                    }\n                }\n                else {\n                    axis = this.createCircleAxis(scale, xAxisOption, layer, direction, dim);\n                }\n                this.cache.set(axisId, axis);\n                updatedCache.set(axisId, axis);\n            }\n            // 2. do grid update\n            var grid = this.cache.get(gridId);\n            // 存在则更新\n            if (grid) {\n                var cfg = coordinate.isTransposed\n                    ? this.getCircleGridCfg(scale, xAxisOption, DIRECTION.RADIUS, dim)\n                    : this.getLineGridCfg(scale, xAxisOption, DIRECTION.CIRCLE, dim);\n                omit(cfg, OMIT_CFG);\n                grid.component.update(cfg);\n                updatedCache.set(gridId, grid);\n            }\n            else {\n                // 不存在则创建\n                if (coordinate.isTransposed) {\n                    if (isUndefined(xAxisOption)) {\n                        return;\n                    }\n                    else {\n                        grid = this.createCircleGrid(scale, xAxisOption, layer, DIRECTION.RADIUS, dim);\n                    }\n                }\n                else {\n                    // grid，极坐标下的 x 轴网格线沿着半径方向绘制\n                    grid = this.createLineGrid(scale, xAxisOption, layer, DIRECTION.CIRCLE, dim);\n                }\n                if (grid) {\n                    this.cache.set(gridId, grid);\n                    updatedCache.set(gridId, grid);\n                }\n            }\n        }\n        else {\n            // helix and other, do not draw axis\n        }\n    };\n    Axis.prototype.updateYAxes = function (updatedCache) {\n        var _this = this;\n        // y axes\n        var yScales = this.view.getYScales();\n        each(yScales, function (scale, idx) {\n            // @ts-ignore\n            if (!scale || scale.isIdentity) {\n                return;\n            }\n            var field = scale.field;\n            var yAxisOption = getAxisOption(_this.option, field);\n            if (yAxisOption !== false) {\n                var layer = LAYER.BG;\n                var dim = 'y';\n                var axisId = _this.getId('axis', field);\n                var gridId = _this.getId('grid', field);\n                var coordinate = _this.view.getCoordinate();\n                if (coordinate.isRect) {\n                    var direction = getAxisDirection(yAxisOption, idx === 0 ? DIRECTION.LEFT : DIRECTION.RIGHT);\n                    // 1. do axis update\n                    var axis = _this.cache.get(axisId);\n                    // 存在则更新\n                    if (axis) {\n                        var cfg = _this.getLineAxisCfg(scale, yAxisOption, direction);\n                        omit(cfg, OMIT_CFG);\n                        axis.component.update(cfg);\n                        updatedCache.set(axisId, axis);\n                    }\n                    else {\n                        // 不存在，则创建\n                        axis = _this.createLineAxis(scale, yAxisOption, layer, direction, dim);\n                        _this.cache.set(axisId, axis);\n                        updatedCache.set(axisId, axis);\n                    }\n                    // 2. do grid update\n                    var grid = _this.cache.get(gridId);\n                    // 存在则更新\n                    if (grid) {\n                        var cfg = _this.getLineGridCfg(scale, yAxisOption, direction, dim);\n                        omit(cfg, OMIT_CFG);\n                        grid.component.update(cfg);\n                        updatedCache.set(gridId, grid);\n                    }\n                    else {\n                        // 不存在则创建\n                        grid = _this.createLineGrid(scale, yAxisOption, layer, direction, dim);\n                        if (grid) {\n                            _this.cache.set(gridId, grid);\n                            updatedCache.set(gridId, grid);\n                        }\n                    }\n                }\n                else if (coordinate.isPolar) {\n                    // 1. do axis update\n                    var axis = _this.cache.get(axisId);\n                    // 存在则更新\n                    if (axis) {\n                        var cfg = coordinate.isTransposed\n                            ? _this.getCircleAxisCfg(scale, yAxisOption, DIRECTION.CIRCLE)\n                            : _this.getLineAxisCfg(scale, yAxisOption, DIRECTION.RADIUS);\n                        // @ts-ignore\n                        omit(cfg, OMIT_CFG);\n                        axis.component.update(cfg);\n                        updatedCache.set(axisId, axis);\n                    }\n                    else {\n                        // 不存在，则创建\n                        if (coordinate.isTransposed) {\n                            if (isUndefined(yAxisOption)) {\n                                return;\n                            }\n                            else {\n                                axis = _this.createCircleAxis(scale, yAxisOption, layer, DIRECTION.CIRCLE, dim);\n                            }\n                        }\n                        else {\n                            axis = _this.createLineAxis(scale, yAxisOption, layer, DIRECTION.RADIUS, dim);\n                        }\n                        _this.cache.set(axisId, axis);\n                        updatedCache.set(axisId, axis);\n                    }\n                    // 2. do grid update\n                    var grid = _this.cache.get(gridId);\n                    // 存在则更新\n                    if (grid) {\n                        var cfg = coordinate.isTransposed\n                            ? _this.getLineGridCfg(scale, yAxisOption, DIRECTION.CIRCLE, dim)\n                            : _this.getCircleGridCfg(scale, yAxisOption, DIRECTION.RADIUS, dim);\n                        omit(cfg, OMIT_CFG);\n                        grid.component.update(cfg);\n                        updatedCache.set(gridId, grid);\n                    }\n                    else {\n                        // 不存在则创建\n                        if (coordinate.isTransposed) {\n                            if (isUndefined(yAxisOption)) {\n                                return;\n                            }\n                            else {\n                                grid = _this.createLineGrid(scale, yAxisOption, layer, DIRECTION.CIRCLE, dim);\n                            }\n                        }\n                        else {\n                            grid = _this.createCircleGrid(scale, yAxisOption, layer, DIRECTION.RADIUS, dim);\n                        }\n                        if (grid) {\n                            _this.cache.set(gridId, grid);\n                            updatedCache.set(gridId, grid);\n                        }\n                    }\n                }\n                else {\n                    // helix and other, do not draw axis\n                }\n            }\n        });\n    };\n    /**\n     * 创建 line axis\n     * @param scale\n     * @param option\n     * @param layer\n     * @param direction\n     * @param dim\n     */\n    Axis.prototype.createLineAxis = function (scale, option, layer, direction, dim) {\n        // axis\n        var axis = {\n            component: new LineAxis(this.getLineAxisCfg(scale, option, direction)),\n            layer: layer,\n            direction: direction === DIRECTION.RADIUS ? DIRECTION.NONE : direction,\n            type: COMPONENT_TYPE.AXIS,\n            extra: { dim: dim, scale: scale },\n        };\n        axis.component.set('field', scale.field);\n        axis.component.init();\n        return axis;\n    };\n    Axis.prototype.createLineGrid = function (scale, option, layer, direction, dim) {\n        var cfg = this.getLineGridCfg(scale, option, direction, dim);\n        if (cfg) {\n            var grid = {\n                component: new LineGrid(cfg),\n                layer: layer,\n                direction: DIRECTION.NONE,\n                type: COMPONENT_TYPE.GRID,\n                extra: {\n                    dim: dim,\n                    scale: scale,\n                    alignTick: get(cfg, 'alignTick', true),\n                },\n            };\n            grid.component.init();\n            return grid;\n        }\n    };\n    Axis.prototype.createCircleAxis = function (scale, option, layer, direction, dim) {\n        var axis = {\n            component: new CircleAxis(this.getCircleAxisCfg(scale, option, direction)),\n            layer: layer,\n            direction: direction,\n            type: COMPONENT_TYPE.AXIS,\n            extra: { dim: dim, scale: scale },\n        };\n        axis.component.set('field', scale.field);\n        axis.component.init();\n        return axis;\n    };\n    Axis.prototype.createCircleGrid = function (scale, option, layer, direction, dim) {\n        var cfg = this.getCircleGridCfg(scale, option, direction, dim);\n        if (cfg) {\n            var grid = {\n                component: new CircleGrid(cfg),\n                layer: layer,\n                direction: DIRECTION.NONE,\n                type: COMPONENT_TYPE.GRID,\n                extra: {\n                    dim: dim,\n                    scale: scale,\n                    alignTick: get(cfg, 'alignTick', true),\n                },\n            };\n            grid.component.init();\n            return grid;\n        }\n    };\n    /**\n     * generate line axis cfg\n     * @param scale\n     * @param axisOption\n     * @param direction\n     * @return line axis cfg\n     */\n    Axis.prototype.getLineAxisCfg = function (scale, axisOption, direction) {\n        var container = get(axisOption, ['top']) ? this.axisForeContainer : this.axisContainer;\n        var coordinate = this.view.getCoordinate();\n        var region = getAxisRegion(coordinate, direction);\n        var titleText = getAxisTitleText(scale, axisOption);\n        var axisThemeCfg = getAxisThemeCfg(this.view.getTheme(), direction);\n        // the cfg order should be ensure\n        var optionWithTitle = get(axisOption, ['title'])\n            ? deepMix({ title: { style: { text: titleText } } }, { title: getAxisTitleOptions(this.view.getTheme(), direction, axisOption.title) }, axisOption)\n            : axisOption;\n        var cfg = deepMix(__assign(__assign({ container: container }, region), { ticks: scale.getTicks().map(function (tick) { return ({ id: \"\".concat(tick.tickValue), name: tick.text, value: tick.value }); }), verticalFactor: coordinate.isPolar\n                ? getAxisFactorByRegion(region, coordinate.getCenter()) * -1\n                : getAxisFactorByRegion(region, coordinate.getCenter()), theme: axisThemeCfg }), axisThemeCfg, optionWithTitle);\n        var _a = this.getAnimateCfg(cfg), animate = _a.animate, animateOption = _a.animateOption;\n        cfg.animateOption = animateOption;\n        cfg.animate = animate;\n        // 计算 verticalLimitLength\n        var isAxisVertical = isVertical(region);\n        // TODO: 1 / 3 等默认值需要有一个全局的配置的地方\n        var verticalLimitLength = get(cfg, 'verticalLimitLength', isAxisVertical ? 1 / 3 : 1 / 2);\n        if (verticalLimitLength <= 1) {\n            // 配置的相对值，相对于画布\n            var canvasWidth = this.view.getCanvas().get('width');\n            var canvasHeight = this.view.getCanvas().get('height');\n            cfg.verticalLimitLength = verticalLimitLength * (isAxisVertical ? canvasWidth : canvasHeight);\n        }\n        return cfg;\n    };\n    /**\n     * generate line grid cfg\n     * @param scale\n     * @param axisOption\n     * @param direction\n     * @param dim\n     * @return line grid cfg\n     */\n    Axis.prototype.getLineGridCfg = function (scale, axisOption, direction, dim) {\n        if (!showGrid(getAxisThemeCfg(this.view.getTheme(), direction), axisOption)) {\n            return undefined;\n        }\n        var gridThemeCfg = getGridThemeCfg(this.view.getTheme(), direction);\n        // the cfg order should be ensure\n        // grid 动画以 axis 为准\n        var gridCfg = deepMix({\n            container: get(axisOption, ['top']) ? this.gridForeContainer : this.gridContainer,\n        }, gridThemeCfg, get(axisOption, 'grid'), this.getAnimateCfg(axisOption));\n        gridCfg.items = getLineGridItems(this.view.getCoordinate(), scale, dim, get(gridCfg, 'alignTick', true));\n        return gridCfg;\n    };\n    /**\n     * generate circle axis cfg\n     * @param scale\n     * @param axisOption\n     * @param direction\n     * @return circle axis cfg\n     */\n    Axis.prototype.getCircleAxisCfg = function (scale, axisOption, direction) {\n        var container = get(axisOption, ['top']) ? this.axisForeContainer : this.axisContainer;\n        var coordinate = this.view.getCoordinate();\n        var ticks = scale.getTicks().map(function (tick) { return ({ id: \"\".concat(tick.tickValue), name: tick.text, value: tick.value }); });\n        if (!scale.isCategory && Math.abs(coordinate.endAngle - coordinate.startAngle) === Math.PI * 2) {\n            // x 轴对应的值如果是非 cat 类型，在整圆的情况下坐标轴第一个和最后一个文本会重叠，默认只展示第一个文本\n            if (ticks.length)\n                ticks[ticks.length - 1].name = '';\n        }\n        var titleText = getAxisTitleText(scale, axisOption);\n        var axisThemeCfg = getAxisThemeCfg(this.view.getTheme(), DIRECTION.CIRCLE);\n        // the cfg order should be ensure\n        var optionWithTitle = get(axisOption, ['title'])\n            ? deepMix({ title: { style: { text: titleText } } }, { title: getAxisTitleOptions(this.view.getTheme(), direction, axisOption.title) }, axisOption)\n            : axisOption;\n        var cfg = deepMix(__assign(__assign({ container: container }, getCircleAxisCenterRadius(this.view.getCoordinate())), { ticks: ticks, verticalFactor: 1, theme: axisThemeCfg }), axisThemeCfg, optionWithTitle);\n        var _a = this.getAnimateCfg(cfg), animate = _a.animate, animateOption = _a.animateOption;\n        cfg.animate = animate;\n        cfg.animateOption = animateOption;\n        return cfg;\n    };\n    /**\n     * generate circle grid cfg\n     * @param scale\n     * @param axisOption\n     * @param direction\n     * @return circle grid cfg\n     */\n    Axis.prototype.getCircleGridCfg = function (scale, axisOption, direction, dim) {\n        if (!showGrid(getAxisThemeCfg(this.view.getTheme(), direction), axisOption)) {\n            return undefined;\n        }\n        // the cfg order should be ensure\n        // grid 动画以 axis 为准\n        var gridThemeCfg = getGridThemeCfg(this.view.getTheme(), DIRECTION.RADIUS);\n        var gridCfg = deepMix({\n            container: get(axisOption, ['top']) ? this.gridForeContainer : this.gridContainer,\n            center: this.view.getCoordinate().getCenter(),\n        }, gridThemeCfg, get(axisOption, 'grid'), this.getAnimateCfg(axisOption));\n        var alignTick = get(gridCfg, 'alignTick', true);\n        var verticalScale = dim === 'x' ? this.view.getYScales()[0] : this.view.getXScale();\n        gridCfg.items = getCircleGridItems(this.view.getCoordinate(), verticalScale, scale, alignTick, dim);\n        // the cfg order should be ensure\n        // grid 动画以 axis 为准\n        return gridCfg;\n    };\n    Axis.prototype.getId = function (name, key) {\n        var coordinate = this.view.getCoordinate();\n        // 坐标系类型也作为组件的 key\n        return \"\".concat(name, \"-\").concat(key, \"-\").concat(coordinate.type);\n    };\n    Axis.prototype.getAnimateCfg = function (cfg) {\n        return {\n            animate: this.view.getOptions().animate && get(cfg, 'animate'),\n            animateOption: cfg && cfg.animateOption ? deepMix({}, AXIS_DEFAULT_ANIMATE_CFG, cfg.animateOption) : AXIS_DEFAULT_ANIMATE_CFG,\n        };\n    };\n    return Axis;\n}(Controller));\nexport default Axis;\n//# sourceMappingURL=axis.js.map","import { DIRECTION } from '../constant';\n/**\n * @ignore\n * 方位常量转实际的 bbox 位置大小\n * @param parentBBox\n * @param bbox\n * @param direction\n */\nexport function directionToPosition(parentBBox, bbox, direction) {\n    if (direction === DIRECTION.TOP) {\n        return [parentBBox.minX + parentBBox.width / 2 - bbox.width / 2, parentBBox.minY];\n    }\n    if (direction === DIRECTION.BOTTOM) {\n        return [parentBBox.minX + parentBBox.width / 2 - bbox.width / 2, parentBBox.maxY - bbox.height];\n    }\n    if (direction === DIRECTION.LEFT) {\n        return [parentBBox.minX, parentBBox.minY + parentBBox.height / 2 - bbox.height / 2];\n    }\n    if (direction === DIRECTION.RIGHT) {\n        return [parentBBox.maxX - bbox.width, parentBBox.minY + parentBBox.height / 2 - bbox.height / 2];\n    }\n    if (direction === DIRECTION.TOP_LEFT || direction === DIRECTION.LEFT_TOP) {\n        return [parentBBox.tl.x, parentBBox.tl.y];\n    }\n    if (direction === DIRECTION.TOP_RIGHT || direction === DIRECTION.RIGHT_TOP) {\n        return [parentBBox.tr.x - bbox.width, parentBBox.tr.y];\n    }\n    if (direction === DIRECTION.BOTTOM_LEFT || direction === DIRECTION.LEFT_BOTTOM) {\n        return [parentBBox.bl.x, parentBBox.bl.y - bbox.height];\n    }\n    if (direction === DIRECTION.BOTTOM_RIGHT || direction === DIRECTION.RIGHT_BOTTOM) {\n        return [parentBBox.br.x - bbox.width, parentBBox.br.y - bbox.height];\n    }\n    return [0, 0];\n}\n/**\n * get direction after coordinate transpose\n * @param direction\n * @param coordinate\n * @returns direction after transpose or not\n */\nfunction getTransposedDirection(direction, coordinate) {\n    if (coordinate.isTransposed) {\n        switch (direction) {\n            case DIRECTION.BOTTOM:\n                return DIRECTION.LEFT;\n            case DIRECTION.LEFT:\n                return DIRECTION.BOTTOM;\n            case DIRECTION.RIGHT:\n                return DIRECTION.TOP;\n            case DIRECTION.TOP:\n                return DIRECTION.RIGHT;\n        }\n    }\n    return direction;\n}\nfunction reflectX(direct) {\n    if (direct === DIRECTION.LEFT) {\n        return DIRECTION.RIGHT;\n    }\n    if (direct === DIRECTION.RIGHT) {\n        return DIRECTION.LEFT;\n    }\n    return direct;\n}\nfunction reflectY(direct) {\n    if (direct === DIRECTION.TOP) {\n        return DIRECTION.BOTTOM;\n    }\n    if (direct === DIRECTION.BOTTOM) {\n        return DIRECTION.TOP;\n    }\n    return direct;\n}\n/**\n * get direction after coordinate.scale\n * @param direction\n * @param coordinate\n */\nfunction getScaleDirection(direction, coordinate) {\n    var x = coordinate.matrix[0];\n    var y = coordinate.matrix[4];\n    var d = direction;\n    if (x < 0) {\n        d = reflectX(d);\n    }\n    if (y < 0) {\n        d = reflectY(d);\n    }\n    return d;\n}\n/**\n *\n * @param direction\n * @param coordinate\n */\nfunction getReflectDirection(direction, coordinate) {\n    var d = direction;\n    if (coordinate.isReflect('x')) {\n        d = reflectX(d);\n    }\n    if (coordinate.isReflect('y')) {\n        d = reflectY(d);\n    }\n    return d;\n}\n/**\n * @ignore\n * get direction after coordinate translate\n * @param direction\n * @param coordinate\n */\nexport function getTranslateDirection(direction, coordinate) {\n    var d = direction;\n    d = getTransposedDirection(d, coordinate);\n    d = getScaleDirection(d, coordinate);\n    d = getReflectDirection(d, coordinate);\n    return d;\n}\n//# sourceMappingURL=direction.js.map","import { __extends, __read } from \"tslib\";\nimport { deepMix, each, find, get, head, isBoolean, last } from '@antv/util';\nimport { COMPONENT_MAX_VIEW_PERCENTAGE, COMPONENT_TYPE, DIRECTION, LAYER } from '../../constant';\nimport { CategoryLegend, ContinuousLegend } from '../../dependents';\nimport { DEFAULT_ANIMATE_CFG } from '../../animate';\nimport { BBox } from '../../util/bbox';\nimport { directionToPosition } from '../../util/direction';\nimport { omit } from '../../util/helper';\nimport { getCustomLegendItems, getLegendItems, getLegendLayout, getLegendThemeCfg } from '../../util/legend';\nimport { getName } from '../../util/scale';\nimport { Controller } from './base';\n/**\n * 从配置中获取单个字段的 legend 配置\n * @param legends\n * @param field\n * @returns the option of one legend field\n */\nfunction getLegendOption(legends, field) {\n    if (isBoolean(legends)) {\n        return legends === false ? false : {};\n    }\n    return get(legends, [field], legends);\n}\nfunction getDirection(legendOption) {\n    return get(legendOption, 'position', DIRECTION.BOTTOM);\n}\n/**\n * @ignore\n * legend Controller\n */\nvar Legend = /** @class */ (function (_super) {\n    __extends(Legend, _super);\n    function Legend(view) {\n        var _this = _super.call(this, view) || this;\n        _this.container = _this.view.getLayer(LAYER.FORE).addGroup();\n        return _this;\n    }\n    Object.defineProperty(Legend.prototype, \"name\", {\n        get: function () {\n            return 'legend';\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Legend.prototype.init = function () { };\n    /**\n     * render the legend component by legend options\n     */\n    Legend.prototype.render = function () {\n        // 和 update 逻辑保持一致\n        this.update();\n    };\n    /**\n     * layout legend\n     * 计算出 legend 的 direction 位置 x, y\n     */\n    Legend.prototype.layout = function () {\n        var _this = this;\n        this.layoutBBox = this.view.viewBBox;\n        each(this.components, function (co) {\n            var component = co.component, direction = co.direction;\n            var layout = getLegendLayout(direction);\n            var maxWidthRatio = component.get('maxWidthRatio');\n            var maxHeightRatio = component.get('maxHeightRatio');\n            var maxSize = _this.getCategoryLegendSizeCfg(layout, maxWidthRatio, maxHeightRatio);\n            var maxWidth = component.get('maxWidth');\n            var maxHeight = component.get('maxHeight');\n            // 先更新 maxSize，更新 layoutBBox，以便计算正确的 x y\n            component.update({\n                maxWidth: Math.min(maxSize.maxWidth, maxWidth || 0),\n                maxHeight: Math.min(maxSize.maxHeight, maxHeight || 0),\n            });\n            var padding = component.get('padding');\n            var bboxObject = component.getLayoutBBox(); // 这里只需要他的 width、height 信息做位置调整\n            var bbox = new BBox(bboxObject.x, bboxObject.y, bboxObject.width, bboxObject.height).expand(padding);\n            var _a = __read(directionToPosition(_this.view.viewBBox, bbox, direction), 2), x1 = _a[0], y1 = _a[1];\n            var _b = __read(directionToPosition(_this.layoutBBox, bbox, direction), 2), x2 = _b[0], y2 = _b[1];\n            var x = 0;\n            var y = 0;\n            // 因为 legend x y 要和 coordinateBBox 对齐，所以要做一个简单的判断\n            if (direction.startsWith('top') || direction.startsWith('bottom')) {\n                x = x1;\n                y = y2;\n            }\n            else {\n                x = x2;\n                y = y1;\n            }\n            // 更新位置\n            component.setLocation({ x: x + padding[3], y: y + padding[0] });\n            _this.layoutBBox = _this.layoutBBox.cut(bbox, direction);\n        });\n    };\n    /**\n     * legend 的更新逻辑\n     */\n    Legend.prototype.update = function () {\n        var _this = this;\n        this.option = this.view.getOptions().legends;\n        // 已经处理过的 legend\n        var updated = {};\n        var eachLegend = function (geometry, attr, scale) {\n            var id = _this.getId(scale.field);\n            var existCo = _this.getComponentById(id);\n            // 存在则 update\n            if (existCo) {\n                var cfg = void 0;\n                var legendOption = getLegendOption(_this.option, scale.field);\n                // if the legend option is not false, means legend should be created.\n                if (legendOption !== false) {\n                    if (get(legendOption, 'custom')) {\n                        cfg = _this.getCategoryCfg(geometry, attr, scale, legendOption, true);\n                    }\n                    else {\n                        if (scale.isLinear) {\n                            // linear field, create continuous legend\n                            cfg = _this.getContinuousCfg(geometry, attr, scale, legendOption);\n                        }\n                        else if (scale.isCategory) {\n                            // category field, create category legend\n                            cfg = _this.getCategoryCfg(geometry, attr, scale, legendOption);\n                        }\n                    }\n                }\n                // 如果 cfg 为空，则不在 updated 标记，那么会在后面逻辑中删除\n                if (cfg) {\n                    // omit 掉一些属性，比如 container 等\n                    omit(cfg, ['container']);\n                    existCo.direction = getDirection(legendOption);\n                    existCo.component.update(cfg);\n                    // 标记为新的\n                    updated[id] = true;\n                }\n            }\n            else {\n                // 不存在则 create\n                var legend = _this.createFieldLegend(geometry, attr, scale);\n                if (legend) {\n                    legend.component.init();\n                    _this.components.push(legend);\n                    // 标记为新的\n                    updated[id] = true;\n                }\n            }\n        };\n        // 全局自定义图例\n        if (get(this.option, 'custom')) {\n            var id = 'global-custom';\n            var existCo = this.getComponentById(id);\n            if (existCo) {\n                var customCfg = this.getCategoryCfg(undefined, undefined, undefined, this.option, true);\n                omit(customCfg, ['container']);\n                existCo.component.update(customCfg);\n                updated[id] = true;\n            }\n            else {\n                var component = this.createCustomLegend(undefined, undefined, undefined, this.option);\n                if (component) {\n                    component.init();\n                    var layer = LAYER.FORE;\n                    var direction = getDirection(this.option);\n                    this.components.push({\n                        id: id,\n                        component: component,\n                        layer: layer,\n                        direction: direction,\n                        type: COMPONENT_TYPE.LEGEND,\n                        extra: undefined,\n                    });\n                    // 标记为更新\n                    updated[id] = true;\n                }\n            }\n        }\n        else {\n            // 遍历处理每一个创建逻辑\n            this.loopLegends(eachLegend);\n        }\n        // 处理完成之后，销毁删除的\n        // 不在处理中的\n        var components = [];\n        each(this.getComponents(), function (co) {\n            if (updated[co.id]) {\n                components.push(co);\n            }\n            else {\n                co.component.destroy();\n            }\n        });\n        // 更新当前已有的 components\n        this.components = components;\n    };\n    Legend.prototype.clear = function () {\n        _super.prototype.clear.call(this);\n        this.container.clear();\n    };\n    Legend.prototype.destroy = function () {\n        _super.prototype.destroy.call(this);\n        this.container.remove(true);\n    };\n    /**\n     * 递归获取所有的 Geometry\n     */\n    Legend.prototype.getGeometries = function (view) {\n        var _this = this;\n        var geometries = view.geometries;\n        each(view.views, function (v) {\n            geometries = geometries.concat(_this.getGeometries(v));\n        });\n        return geometries;\n    };\n    /**\n     * 遍历 Geometry，处理 legend 逻辑\n     * @param doEach 每个 loop 中的处理方法\n     */\n    Legend.prototype.loopLegends = function (doEach) {\n        var isRootView = this.view.getRootView() === this.view;\n        // 非根 view，不处理 legend\n        if (!isRootView) {\n            return;\n        }\n        // 递归 view 中所有的 Geometry，进行创建 legend\n        var geometries = this.getGeometries(this.view);\n        var looped = {}; // 防止一个字段创建两个 legend\n        each(geometries, function (geometry) {\n            var attributes = geometry.getGroupAttributes();\n            each(attributes, function (attr) {\n                var scale = attr.getScale(attr.type);\n                // 如果在视觉通道上映射常量值，如 size(2) shape('circle') 不创建 legend\n                if (!scale || scale.type === 'identity' || looped[scale.field]) {\n                    return;\n                }\n                doEach(geometry, attr, scale);\n                looped[scale.field] = true;\n            });\n        });\n    };\n    /**\n     * 创建一个 legend\n     * @param geometry\n     * @param attr\n     * @param scale\n     */\n    Legend.prototype.createFieldLegend = function (geometry, attr, scale) {\n        var component;\n        var legendOption = getLegendOption(this.option, scale.field);\n        var layer = LAYER.FORE;\n        var direction = getDirection(legendOption);\n        // if the legend option is not false, means legend should be created.\n        if (legendOption !== false) {\n            if (get(legendOption, 'custom')) {\n                component = this.createCustomLegend(geometry, attr, scale, legendOption);\n            }\n            else {\n                if (scale.isLinear) {\n                    // linear field, create continuous legend\n                    component = this.createContinuousLegend(geometry, attr, scale, legendOption);\n                }\n                else if (scale.isCategory) {\n                    // category field, create category legend\n                    component = this.createCategoryLegend(geometry, attr, scale, legendOption);\n                }\n            }\n        }\n        if (component) {\n            component.set('field', scale.field);\n            return {\n                id: this.getId(scale.field),\n                component: component,\n                layer: layer,\n                direction: direction,\n                type: COMPONENT_TYPE.LEGEND,\n                extra: { scale: scale },\n            };\n        }\n    };\n    /**\n     * 自定义图例使用 category 图例去渲染\n     * @param geometry\n     * @param attr\n     * @param scale\n     * @param legendOption\n     */\n    Legend.prototype.createCustomLegend = function (geometry, attr, scale, legendOption) {\n        // 直接使用 分类图例渲染\n        var cfg = this.getCategoryCfg(geometry, attr, scale, legendOption, true);\n        return new CategoryLegend(cfg);\n    };\n    /**\n     * 创建连续图例\n     * @param geometry\n     * @param attr\n     * @param scale\n     * @param legendOption\n     */\n    Legend.prototype.createContinuousLegend = function (geometry, attr, scale, legendOption) {\n        var cfg = this.getContinuousCfg(geometry, attr, scale, omit(legendOption, ['value']));\n        return new ContinuousLegend(cfg);\n    };\n    /**\n     * 创建分类图例\n     * @param geometry\n     * @param attr\n     * @param scale\n     * @param legendOption\n     */\n    Legend.prototype.createCategoryLegend = function (geometry, attr, scale, legendOption) {\n        var cfg = this.getCategoryCfg(geometry, attr, scale, legendOption);\n        return new CategoryLegend(cfg);\n    };\n    /**\n     * 获得连续图例的配置\n     * @param geometry\n     * @param attr\n     * @param scale\n     * @param legendOption\n     */\n    Legend.prototype.getContinuousCfg = function (geometry, attr, scale, legendOption) {\n        var ticks = scale.getTicks();\n        var containMin = find(ticks, function (tick) { return tick.value === 0; });\n        var containMax = find(ticks, function (tick) { return tick.value === 1; });\n        var items = ticks.map(function (tick) {\n            var value = tick.value, tickValue = tick.tickValue;\n            var attrValue = attr.mapping(scale.invert(value)).join('');\n            return {\n                value: tickValue,\n                attrValue: attrValue,\n                color: attrValue,\n                scaleValue: value,\n            };\n        });\n        if (!containMin) {\n            items.push({\n                value: scale.min,\n                attrValue: attr.mapping(scale.invert(0)).join(''),\n                color: attr.mapping(scale.invert(0)).join(''),\n                scaleValue: 0,\n            });\n        }\n        if (!containMax) {\n            items.push({\n                value: scale.max,\n                attrValue: attr.mapping(scale.invert(1)).join(''),\n                color: attr.mapping(scale.invert(1)).join(''),\n                scaleValue: 1,\n            });\n        }\n        // 排序\n        items.sort(function (a, b) { return a.value - b.value; });\n        // 跟 attr 相关的配置\n        // size color 区别的配置\n        var attrLegendCfg = {\n            min: head(items).value,\n            max: last(items).value,\n            colors: [],\n            rail: {\n                type: attr.type,\n            },\n            track: {},\n        };\n        if (attr.type === 'size') {\n            attrLegendCfg.track = {\n                style: {\n                    // size 的选中前景色，对于 color，则直接使用 color 标识\n                    // @ts-ignore\n                    fill: attr.type === 'size' ? this.view.getTheme().defaultColor : undefined,\n                },\n            };\n        }\n        if (attr.type === 'color') {\n            attrLegendCfg.colors = items.map(function (item) { return item.attrValue; });\n        }\n        var container = this.container;\n        // if position is not set, use top as default\n        var direction = getDirection(legendOption);\n        var layout = getLegendLayout(direction);\n        var title = get(legendOption, 'title');\n        if (title) {\n            title = deepMix({\n                text: getName(scale),\n            }, title);\n        }\n        // 基础配置，从当前数据中读到的配置\n        attrLegendCfg.container = container;\n        attrLegendCfg.layout = layout;\n        attrLegendCfg.title = title;\n        attrLegendCfg.animateOption = DEFAULT_ANIMATE_CFG;\n        // @ts-ignore\n        return this.mergeLegendCfg(attrLegendCfg, legendOption, 'continuous');\n    };\n    /**\n     * 获取分类图例的配置项\n     * @param geometry\n     * @param attr\n     * @param scale\n     * @param custom\n     * @param legendOption\n     */\n    Legend.prototype.getCategoryCfg = function (geometry, attr, scale, legendOption, custom) {\n        var container = this.container;\n        // if position is not set, use top as default\n        var direction = get(legendOption, 'position', DIRECTION.BOTTOM);\n        var legendTheme = getLegendThemeCfg(this.view.getTheme(), direction);\n        // the default marker style\n        var themeMarker = get(legendTheme, ['marker']);\n        var userMarker = get(legendOption, 'marker');\n        var layout = getLegendLayout(direction);\n        var themePageNavigator = get(legendTheme, ['pageNavigator']);\n        var userPageNavigator = get(legendOption, 'pageNavigator');\n        var items = custom\n            ? getCustomLegendItems(themeMarker, userMarker, legendOption.items)\n            : getLegendItems(this.view, geometry, attr, themeMarker, userMarker);\n        var title = get(legendOption, 'title');\n        if (title) {\n            title = deepMix({\n                text: scale ? getName(scale) : '',\n            }, title);\n        }\n        var maxWidthRatio = get(legendOption, 'maxWidthRatio');\n        var maxHeightRatio = get(legendOption, 'maxHeightRatio');\n        var baseCfg = this.getCategoryLegendSizeCfg(layout, maxWidthRatio, maxHeightRatio);\n        baseCfg.container = container;\n        baseCfg.layout = layout;\n        baseCfg.items = items;\n        baseCfg.title = title;\n        baseCfg.animateOption = DEFAULT_ANIMATE_CFG;\n        baseCfg.pageNavigator = deepMix({}, themePageNavigator, userPageNavigator);\n        var categoryCfg = this.mergeLegendCfg(baseCfg, legendOption, direction);\n        if (categoryCfg.reversed) {\n            // 图例项需要逆序\n            categoryCfg.items.reverse();\n        }\n        var maxItemWidth = get(categoryCfg, 'maxItemWidth');\n        if (maxItemWidth && maxItemWidth <= 1) {\n            // 转换成像素值\n            categoryCfg.maxItemWidth = this.view.viewBBox.width * maxItemWidth;\n        }\n        return categoryCfg;\n    };\n    /**\n     * get legend config, use option > suggestion > theme\n     * @param baseCfg\n     * @param legendOption\n     * @param direction\n     */\n    Legend.prototype.mergeLegendCfg = function (baseCfg, legendOption, direction) {\n        var position = direction.split('-')[0];\n        var themeObject = getLegendThemeCfg(this.view.getTheme(), position);\n        return deepMix({}, themeObject, baseCfg, legendOption);\n    };\n    /**\n     * 生成 id\n     * @param key\n     */\n    Legend.prototype.getId = function (key) {\n        return \"\".concat(this.name, \"-\").concat(key);\n    };\n    /**\n     * 根据 id 来获取组件\n     * @param id\n     */\n    Legend.prototype.getComponentById = function (id) {\n        return find(this.components, function (co) { return co.id === id; });\n    };\n    Legend.prototype.getCategoryLegendSizeCfg = function (layout, maxWidthRatio, maxHeightRatio) {\n        if (maxWidthRatio === void 0) { maxWidthRatio = COMPONENT_MAX_VIEW_PERCENTAGE; }\n        if (maxHeightRatio === void 0) { maxHeightRatio = COMPONENT_MAX_VIEW_PERCENTAGE; }\n        var _a = this.view.viewBBox, vw = _a.width, vh = _a.height;\n        // 目前 legend 的布局是以 viewBBox 为参照\n        // const { width: cw, height: ch } = this.view.coordinateBBox;\n        return layout === 'vertical'\n            ? {\n                maxWidth: vw * maxWidthRatio,\n                maxHeight: vh,\n            }\n            : {\n                maxWidth: vw,\n                maxHeight: vh * maxHeightRatio,\n            };\n    };\n    return Legend;\n}(Controller));\nexport default Legend;\n//# sourceMappingURL=legend.js.map","import { __assign, __extends, __read } from \"tslib\";\nimport { deepMix, get, isObject, size, clamp, isNil, noop, throttle, isEmpty, valuesOfKey } from '@antv/util';\nimport { COMPONENT_TYPE, DIRECTION, LAYER, VIEW_LIFE_CIRCLE } from '../../constant';\nimport { Slider as SliderComponent } from '../../dependents';\nimport { BBox } from '../../util/bbox';\nimport { directionToPosition } from '../../util/direction';\nimport { isBetween } from '../../util/helper';\nimport { Controller } from './base';\n/**\n * @ignore\n * slider Controller\n */\nvar Slider = /** @class */ (function (_super) {\n    __extends(Slider, _super);\n    function Slider(view) {\n        var _this = _super.call(this, view) || this;\n        _this.onChangeFn = noop;\n        /**\n         * 清除测量\n         */\n        _this.resetMeasure = function () {\n            _this.clear();\n        };\n        /**\n         * 滑块滑动的时候出发\n         * @param v\n         */\n        _this.onValueChange = function (v) {\n            var _a = __read(v, 2), min = _a[0], max = _a[1];\n            _this.start = min;\n            _this.end = max;\n            _this.changeViewData(min, max);\n        };\n        _this.container = _this.view.getLayer(LAYER.FORE).addGroup();\n        _this.onChangeFn = throttle(_this.onValueChange, 20, {\n            leading: true,\n        });\n        _this.width = 0;\n        _this.view.on(VIEW_LIFE_CIRCLE.BEFORE_CHANGE_DATA, _this.resetMeasure);\n        _this.view.on(VIEW_LIFE_CIRCLE.BEFORE_CHANGE_SIZE, _this.resetMeasure);\n        return _this;\n    }\n    Object.defineProperty(Slider.prototype, \"name\", {\n        get: function () {\n            return 'slider';\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Slider.prototype.destroy = function () {\n        _super.prototype.destroy.call(this);\n        this.view.off(VIEW_LIFE_CIRCLE.BEFORE_CHANGE_DATA, this.resetMeasure);\n        this.view.off(VIEW_LIFE_CIRCLE.BEFORE_CHANGE_SIZE, this.resetMeasure);\n    };\n    /**\n     * 初始化\n     */\n    Slider.prototype.init = function () { };\n    /**\n     * 渲染\n     */\n    Slider.prototype.render = function () {\n        this.option = this.view.getOptions().slider;\n        var _a = this.getSliderCfg(), start = _a.start, end = _a.end;\n        if (isNil(this.start)) {\n            this.start = start;\n            this.end = end;\n        }\n        var viewData = this.view.getOptions().data;\n        if (this.option && !isEmpty(viewData)) {\n            if (this.slider) {\n                // exist, update\n                this.slider = this.updateSlider();\n            }\n            else {\n                // not exist, create\n                this.slider = this.createSlider();\n                // 监听事件，绑定交互\n                this.slider.component.on('sliderchange', this.onChangeFn);\n            }\n        }\n        else {\n            if (this.slider) {\n                // exist, destroy\n                this.slider.component.destroy();\n                this.slider = undefined;\n            }\n            else {\n                // do nothing\n            }\n        }\n    };\n    /**\n     * 布局\n     */\n    Slider.prototype.layout = function () {\n        var _this = this;\n        if (this.option && !this.width) {\n            this.measureSlider();\n            setTimeout(function () {\n                // 初始状态下的 view 数据过滤\n                if (!_this.view.destroyed) {\n                    _this.changeViewData(_this.start, _this.end);\n                }\n            }, 0);\n        }\n        if (this.slider) {\n            var width = this.view.coordinateBBox.width;\n            // 获取组件的 layout bbox\n            var padding = this.slider.component.get('padding');\n            var _a = __read(padding, 4), paddingTop = _a[0], paddingRight = _a[1], paddingBottom = _a[2], paddingLeft = _a[3];\n            var bboxObject = this.slider.component.getLayoutBBox();\n            var bbox = new BBox(bboxObject.x, bboxObject.y, Math.min(bboxObject.width, width), bboxObject.height).expand(padding);\n            var _b = this.getMinMaxText(this.start, this.end), minText = _b.minText, maxText = _b.maxText;\n            var _c = __read(directionToPosition(this.view.viewBBox, bbox, DIRECTION.BOTTOM), 2), x1 = _c[0], y1 = _c[1];\n            var _d = __read(directionToPosition(this.view.coordinateBBox, bbox, DIRECTION.BOTTOM), 2), x2 = _d[0], y2 = _d[1];\n            // 默认放在 bottom\n            this.slider.component.update(__assign(__assign({}, this.getSliderCfg()), { x: x2 + paddingLeft, y: y1 + paddingTop, width: this.width, start: this.start, end: this.end, minText: minText, maxText: maxText }));\n            this.view.viewBBox = this.view.viewBBox.cut(bbox, DIRECTION.BOTTOM);\n        }\n    };\n    /**\n     * 更新\n     */\n    Slider.prototype.update = function () {\n        // 逻辑和 render 保持一致\n        this.render();\n    };\n    /**\n     * 创建 slider 组件\n     */\n    Slider.prototype.createSlider = function () {\n        var cfg = this.getSliderCfg();\n        // 添加 slider 组件\n        var component = new SliderComponent(__assign({ container: this.container }, cfg));\n        component.init();\n        return {\n            component: component,\n            layer: LAYER.FORE,\n            direction: DIRECTION.BOTTOM,\n            type: COMPONENT_TYPE.SLIDER,\n        };\n    };\n    /**\n     * 更新配置\n     */\n    Slider.prototype.updateSlider = function () {\n        var cfg = this.getSliderCfg();\n        if (this.width) {\n            var _a = this.getMinMaxText(this.start, this.end), minText = _a.minText, maxText = _a.maxText;\n            cfg = __assign(__assign({}, cfg), { width: this.width, start: this.start, end: this.end, minText: minText, maxText: maxText });\n        }\n        this.slider.component.update(cfg);\n        return this.slider;\n    };\n    /**\n     * 进行测量操作\n     */\n    Slider.prototype.measureSlider = function () {\n        var width = this.getSliderCfg().width;\n        this.width = width;\n    };\n    /**\n     * 生成 slider 配置\n     */\n    Slider.prototype.getSliderCfg = function () {\n        var cfg = {\n            height: 16,\n            start: 0,\n            end: 1,\n            minText: '',\n            maxText: '',\n            x: 0,\n            y: 0,\n            width: this.view.coordinateBBox.width,\n        };\n        if (isObject(this.option)) {\n            // 用户配置的数据，优先级更高\n            var trendCfg = __assign({ data: this.getData() }, get(this.option, 'trendCfg', {}));\n            // 因为有样式，所以深层覆盖\n            cfg = deepMix({}, cfg, this.getThemeOptions(), this.option);\n            // trendCfg 因为有数据数组，所以使用浅替换\n            cfg = __assign(__assign({}, cfg), { trendCfg: trendCfg });\n        }\n        cfg.start = clamp(Math.min(isNil(cfg.start) ? 0 : cfg.start, isNil(cfg.end) ? 1 : cfg.end), 0, 1);\n        cfg.end = clamp(Math.max(isNil(cfg.start) ? 0 : cfg.start, isNil(cfg.end) ? 1 : cfg.end), 0, 1);\n        return cfg;\n    };\n    /**\n     * 从 view 中获取数据，缩略轴使用全量的数据\n     */\n    Slider.prototype.getData = function () {\n        var data = this.view.getOptions().data;\n        var _a = __read(this.view.getYScales(), 1), yScale = _a[0];\n        var groupScales = this.view.getGroupScales();\n        if (groupScales.length) {\n            var _b = groupScales[0], field_1 = _b.field, ticks_1 = _b.ticks;\n            return data.reduce(function (pre, cur) {\n                if (cur[field_1] === ticks_1[0]) {\n                    pre.push(cur[yScale.field]);\n                }\n                return pre;\n            }, []);\n        }\n        return data.map(function (datum) { return datum[yScale.field] || 0; });\n    };\n    /**\n     * 获取 slider 的主题配置\n     */\n    Slider.prototype.getThemeOptions = function () {\n        var theme = this.view.getTheme();\n        return get(theme, ['components', 'slider', 'common'], {});\n    };\n    /**\n     * 根据 start/end 和当前数据计算出当前的 minText/maxText\n     * @param min\n     * @param max\n     */\n    Slider.prototype.getMinMaxText = function (min, max) {\n        var data = this.view.getOptions().data;\n        var xScale = this.view.getXScale();\n        var isHorizontal = true;\n        var values = valuesOfKey(data, xScale.field);\n        // 如果是 xScale 数值类型，则进行排序\n        if (xScale.isLinear) {\n            values = values.sort();\n        }\n        var xValues = isHorizontal ? values : values.reverse();\n        var dataSize = size(data);\n        if (!xScale || !dataSize) {\n            return {}; // fix: 需要兼容，否则调用方直接取值会报错\n        }\n        var xTickCount = size(xValues);\n        var minIndex = Math.round(min * (xTickCount - 1));\n        var maxIndex = Math.round(max * (xTickCount - 1));\n        var minText = get(xValues, [minIndex]);\n        var maxText = get(xValues, [maxIndex]);\n        var formatter = this.getSliderCfg().formatter;\n        if (formatter) {\n            minText = formatter(minText, data[minIndex], minIndex);\n            maxText = formatter(maxText, data[maxIndex], maxIndex);\n        }\n        return {\n            minText: minText,\n            maxText: maxText,\n        };\n    };\n    /**\n     * 更新 view 过滤数据\n     * @param min\n     * @param max\n     */\n    Slider.prototype.changeViewData = function (min, max) {\n        var data = this.view.getOptions().data;\n        var xScale = this.view.getXScale();\n        var dataSize = size(data);\n        if (!xScale || !dataSize) {\n            return;\n        }\n        var isHorizontal = true;\n        var values = valuesOfKey(data, xScale.field);\n        // 如果是 xScale 数值类型，则进行排序\n        var xScaleValues = this.view.getXScale().isLinear ? values.sort(function (a, b) { return Number(a) - Number(b); }) : values;\n        var xValues = isHorizontal ? xScaleValues : xScaleValues.reverse();\n        var xTickCount = size(xValues);\n        var minIndex = Math.round(min * (xTickCount - 1));\n        var maxIndex = Math.round(max * (xTickCount - 1));\n        // 增加 x 轴的过滤器\n        this.view.filter(xScale.field, function (value, datum) {\n            var idx = xValues.indexOf(value);\n            return idx > -1 ? isBetween(idx, minIndex, maxIndex) : true;\n        });\n        this.view.render(true);\n    };\n    /**\n     * 覆写父类方法\n     */\n    Slider.prototype.getComponents = function () {\n        return this.slider ? [this.slider] : [];\n    };\n    /**\n     * 覆盖父类\n     */\n    Slider.prototype.clear = function () {\n        if (this.slider) {\n            this.slider.component.destroy();\n            this.slider = undefined;\n        }\n        this.width = 0;\n        this.start = undefined;\n        this.end = undefined;\n    };\n    return Slider;\n}(Controller));\nexport default Slider;\n//# sourceMappingURL=slider.js.map","import { __assign, __extends, __read, __rest, __spreadArray } from \"tslib\";\nimport { Controller } from './base';\nimport { Scrollbar as ScrollbarComponent } from '../../dependents';\nimport { BBox } from '../../util/bbox';\nimport { directionToPosition } from '../../util/direction';\nimport { COMPONENT_TYPE, DIRECTION, LAYER, VIEW_LIFE_CIRCLE } from '../../constant';\nimport { isObject, clamp, size, throttle, noop, get, valuesOfKey, deepMix } from '@antv/util';\nimport { isBetween } from '../../util/helper';\nvar DEFAULT_PADDING = 0;\nvar DEFAULT_SIZE = 8;\nvar DEFAULT_CATEGORY_SIZE = 32;\nvar MIN_THUMB_LENGTH = 20;\nvar Scrollbar = /** @class */ (function (_super) {\n    __extends(Scrollbar, _super);\n    function Scrollbar(view) {\n        var _this = _super.call(this, view) || this;\n        _this.onChangeFn = noop;\n        _this.resetMeasure = function () {\n            _this.clear();\n        };\n        _this.onValueChange = function (_a) {\n            var ratio = _a.ratio;\n            var animate = _this.getValidScrollbarCfg().animate;\n            _this.ratio = clamp(ratio, 0, 1);\n            var originalAnimate = _this.view.getOptions().animate;\n            if (!animate) {\n                _this.view.animate(false);\n            }\n            _this.changeViewData(_this.getScrollRange(), true);\n            _this.view.animate(originalAnimate);\n        };\n        _this.container = _this.view.getLayer(LAYER.FORE).addGroup();\n        _this.onChangeFn = throttle(_this.onValueChange, 20, {\n            leading: true,\n        });\n        _this.trackLen = 0;\n        _this.thumbLen = 0;\n        _this.ratio = 0;\n        _this.view.on(VIEW_LIFE_CIRCLE.BEFORE_CHANGE_DATA, _this.resetMeasure);\n        _this.view.on(VIEW_LIFE_CIRCLE.BEFORE_CHANGE_SIZE, _this.resetMeasure);\n        return _this;\n    }\n    Object.defineProperty(Scrollbar.prototype, \"name\", {\n        get: function () {\n            return 'scrollbar';\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Scrollbar.prototype.destroy = function () {\n        _super.prototype.destroy.call(this);\n        this.view.off(VIEW_LIFE_CIRCLE.BEFORE_CHANGE_DATA, this.resetMeasure);\n        this.view.off(VIEW_LIFE_CIRCLE.BEFORE_CHANGE_SIZE, this.resetMeasure);\n    };\n    Scrollbar.prototype.init = function () { };\n    /**\n     * 渲染\n     */\n    Scrollbar.prototype.render = function () {\n        this.option = this.view.getOptions().scrollbar;\n        if (this.option) {\n            if (this.scrollbar) {\n                // exist, update\n                this.scrollbar = this.updateScrollbar();\n            }\n            else {\n                // not exist, create\n                this.scrollbar = this.createScrollbar();\n                this.scrollbar.component.on('scrollchange', this.onChangeFn);\n            }\n        }\n        else {\n            if (this.scrollbar) {\n                // exist, destroy\n                this.scrollbar.component.destroy();\n                this.scrollbar = undefined;\n            }\n        }\n    };\n    /**\n     * 布局\n     */\n    Scrollbar.prototype.layout = function () {\n        var _this = this;\n        if (this.option && !this.trackLen) {\n            this.measureScrollbar();\n            setTimeout(function () {\n                if (!_this.view.destroyed) {\n                    _this.changeViewData(_this.getScrollRange(), true);\n                }\n            });\n        }\n        if (this.scrollbar) {\n            var width = this.view.coordinateBBox.width;\n            var padding = this.scrollbar.component.get('padding');\n            var bboxObject = this.scrollbar.component.getLayoutBBox();\n            var bbox = new BBox(bboxObject.x, bboxObject.y, Math.min(bboxObject.width, width), bboxObject.height).expand(padding);\n            var cfg = this.getScrollbarComponentCfg();\n            var x = void 0;\n            var y = void 0;\n            if (cfg.isHorizontal) {\n                var _a = __read(directionToPosition(this.view.viewBBox, bbox, DIRECTION.BOTTOM), 2), x1 = _a[0], y1 = _a[1];\n                var _b = __read(directionToPosition(this.view.coordinateBBox, bbox, DIRECTION.BOTTOM), 2), x2 = _b[0], y2 = _b[1];\n                x = x2;\n                y = y1;\n            }\n            else {\n                var _c = __read(directionToPosition(this.view.viewBBox, bbox, DIRECTION.RIGHT), 2), x1 = _c[0], y1 = _c[1];\n                var _d = __read(directionToPosition(this.view.viewBBox, bbox, DIRECTION.RIGHT), 2), x2 = _d[0], y2 = _d[1];\n                x = x2;\n                y = y1;\n            }\n            x += padding[3];\n            y += padding[0];\n            // 默认放在 bottom\n            if (this.trackLen) {\n                this.scrollbar.component.update(__assign(__assign({}, cfg), { x: x, y: y, trackLen: this.trackLen, thumbLen: this.thumbLen, thumbOffset: (this.trackLen - this.thumbLen) * this.ratio }));\n            }\n            else {\n                this.scrollbar.component.update(__assign(__assign({}, cfg), { x: x, y: y }));\n            }\n            this.view.viewBBox = this.view.viewBBox.cut(bbox, cfg.isHorizontal ? DIRECTION.BOTTOM : DIRECTION.RIGHT);\n        }\n    };\n    /**\n     * 更新\n     */\n    Scrollbar.prototype.update = function () {\n        // 逻辑和 render 保持一致\n        this.render();\n    };\n    Scrollbar.prototype.getComponents = function () {\n        return this.scrollbar ? [this.scrollbar] : [];\n    };\n    Scrollbar.prototype.clear = function () {\n        if (this.scrollbar) {\n            this.scrollbar.component.destroy();\n            this.scrollbar = undefined;\n        }\n        this.trackLen = 0;\n        this.thumbLen = 0;\n        this.ratio = 0;\n        this.cnt = 0;\n        this.step = 0;\n        this.data = undefined;\n        this.xScaleCfg = undefined;\n        this.yScalesCfg = [];\n    };\n    /** 设置滚动条位置  */\n    Scrollbar.prototype.setValue = function (ratio) {\n        this.onValueChange({ ratio: ratio });\n    };\n    /** 获得滚动条位置  */\n    Scrollbar.prototype.getValue = function () {\n        return this.ratio;\n    };\n    /**\n     * 获取 scrollbar 的主题配置\n     */\n    Scrollbar.prototype.getThemeOptions = function () {\n        var theme = this.view.getTheme();\n        return get(theme, ['components', 'scrollbar', 'common'], {});\n    };\n    /**\n     * 获取 scrollbar 组件的主题样式\n     */\n    Scrollbar.prototype.getScrollbarTheme = function (style) {\n        var theme = get(this.view.getTheme(), ['components', 'scrollbar']);\n        var _a = style || {}, thumbHighlightColor = _a.thumbHighlightColor, restStyles = __rest(_a, [\"thumbHighlightColor\"]);\n        return {\n            default: deepMix({}, get(theme, ['default', 'style'], {}), restStyles),\n            hover: deepMix({}, get(theme, ['hover', 'style'], {}), { thumbColor: thumbHighlightColor }),\n        };\n    };\n    Scrollbar.prototype.measureScrollbar = function () {\n        var xScale = this.view.getXScale();\n        var yScales = this.view.getYScales().slice();\n        this.data = this.getScrollbarData();\n        this.step = this.getStep();\n        this.cnt = this.getCnt();\n        var _a = this.getScrollbarComponentCfg(), trackLen = _a.trackLen, thumbLen = _a.thumbLen;\n        this.trackLen = trackLen;\n        this.thumbLen = thumbLen;\n        this.xScaleCfg = {\n            field: xScale.field,\n            values: xScale.values || [],\n        };\n        this.yScalesCfg = yScales;\n    };\n    Scrollbar.prototype.getScrollRange = function () {\n        var startIdx = Math.floor((this.cnt - this.step) * clamp(this.ratio, 0, 1));\n        var endIdx = Math.min(startIdx + this.step - 1, this.cnt - 1);\n        return [startIdx, endIdx];\n    };\n    Scrollbar.prototype.changeViewData = function (_a, render) {\n        var _this = this;\n        var _b = __read(_a, 2), startIdx = _b[0], endIdx = _b[1];\n        var type = this.getValidScrollbarCfg().type;\n        var isHorizontal = type !== 'vertical';\n        var values = valuesOfKey(this.data, this.xScaleCfg.field);\n        // 如果是 xScale 数值类型，则进行排序\n        var xScaleValues = this.view.getXScale().isLinear ? values.sort(function (a, b) { return Number(a) - Number(b); }) : values;\n        var xValues = isHorizontal ? xScaleValues : xScaleValues.reverse();\n        this.yScalesCfg.forEach(function (cfg) {\n            _this.view.scale(cfg.field, {\n                formatter: cfg.formatter,\n                type: cfg.type,\n                min: cfg.min,\n                max: cfg.max,\n                tickMethod: cfg.tickMethod\n            });\n        });\n        this.view.filter(this.xScaleCfg.field, function (val) {\n            var idx = xValues.indexOf(val);\n            return idx > -1 ? isBetween(idx, startIdx, endIdx) : true;\n        });\n        this.view.render(true);\n    };\n    Scrollbar.prototype.createScrollbar = function () {\n        var type = this.getValidScrollbarCfg().type;\n        var isHorizontal = type !== 'vertical';\n        var component = new ScrollbarComponent(__assign(__assign({ container: this.container }, this.getScrollbarComponentCfg()), { x: 0, y: 0 }));\n        component.init();\n        return {\n            component: component,\n            layer: LAYER.FORE,\n            direction: isHorizontal ? DIRECTION.BOTTOM : DIRECTION.RIGHT,\n            type: COMPONENT_TYPE.SCROLLBAR,\n        };\n    };\n    Scrollbar.prototype.updateScrollbar = function () {\n        var config = this.getScrollbarComponentCfg();\n        var realConfig = this.trackLen\n            ? __assign(__assign({}, config), { trackLen: this.trackLen, thumbLen: this.thumbLen, thumbOffset: (this.trackLen - this.thumbLen) * this.ratio }) : __assign({}, config);\n        this.scrollbar.component.update(realConfig);\n        return this.scrollbar;\n    };\n    Scrollbar.prototype.getStep = function () {\n        if (this.step) {\n            return this.step;\n        }\n        var coordinateBBox = this.view.coordinateBBox;\n        var _a = this.getValidScrollbarCfg(), type = _a.type, categorySize = _a.categorySize;\n        var isHorizontal = type !== 'vertical';\n        return Math.floor((isHorizontal ? coordinateBBox.width : coordinateBBox.height) / categorySize);\n    };\n    Scrollbar.prototype.getCnt = function () {\n        if (this.cnt) {\n            return this.cnt;\n        }\n        var xScale = this.view.getXScale();\n        var data = this.getScrollbarData();\n        var values = valuesOfKey(data, xScale.field);\n        return size(values);\n    };\n    Scrollbar.prototype.getScrollbarComponentCfg = function () {\n        var _a = this.view, coordinateBBox = _a.coordinateBBox, viewBBox = _a.viewBBox;\n        var _b = this.getValidScrollbarCfg(), type = _b.type, padding = _b.padding, width = _b.width, height = _b.height, style = _b.style;\n        var isHorizontal = type !== 'vertical';\n        var _c = __read(padding, 4), paddingTop = _c[0], paddingRight = _c[1], paddingBottom = _c[2], paddingLeft = _c[3];\n        var position = isHorizontal\n            ? {\n                x: coordinateBBox.minX + paddingLeft,\n                y: viewBBox.maxY - height - paddingBottom,\n            }\n            : {\n                x: viewBBox.maxX - width - paddingRight,\n                y: coordinateBBox.minY + paddingTop,\n            };\n        var step = this.getStep();\n        var cnt = this.getCnt();\n        var trackLen = isHorizontal\n            ? coordinateBBox.width - paddingLeft - paddingRight\n            : coordinateBBox.height - paddingTop - paddingBottom;\n        var thumbLen = Math.max(trackLen * clamp(step / cnt, 0, 1), MIN_THUMB_LENGTH);\n        return __assign(__assign({}, this.getThemeOptions()), { x: position.x, y: position.y, size: isHorizontal ? height : width, isHorizontal: isHorizontal, trackLen: trackLen, thumbLen: thumbLen, thumbOffset: 0, theme: this.getScrollbarTheme(style) });\n    };\n    /**\n     * 填充一些默认的配置项目\n     */\n    Scrollbar.prototype.getValidScrollbarCfg = function () {\n        var cfg = {\n            type: 'horizontal',\n            categorySize: DEFAULT_CATEGORY_SIZE,\n            width: DEFAULT_SIZE,\n            height: DEFAULT_SIZE,\n            padding: [0, 0, 0, 0],\n            animate: true,\n            style: {},\n        };\n        if (isObject(this.option)) {\n            cfg = __assign(__assign({}, cfg), this.option);\n        }\n        if (!isObject(this.option) || !this.option.padding) {\n            cfg.padding =\n                cfg.type === 'horizontal' ? [DEFAULT_PADDING, 0, DEFAULT_PADDING, 0] : [0, DEFAULT_PADDING, 0, DEFAULT_PADDING];\n        }\n        return cfg;\n    };\n    /**\n     * 获取数据\n     */\n    Scrollbar.prototype.getScrollbarData = function () {\n        var coordinate = this.view.getCoordinate();\n        var cfg = this.getValidScrollbarCfg();\n        var data = this.view.getOptions().data || [];\n        // 纵向做了 y 轴镜像之后，数据也需要镜像反转\n        if (coordinate.isReflect('y') && cfg.type === 'vertical') {\n            data = __spreadArray([], __read(data), false).reverse();\n        }\n        return data;\n    };\n    return Scrollbar;\n}(Controller));\nexport default Scrollbar;\n//# sourceMappingURL=scrollbar.js.map","import { __assign, __extends, __values } from \"tslib\";\nimport { each, head, isEqual, last, get, flatten, isArray, uniq, isNil } from '@antv/util';\nimport { findItemsFromViewRecurisive } from '../../util/tooltip';\nimport { getAngle, getSectorPath } from '../../util/graphics';\nimport Action from './base';\nvar DEFAULT_REGION_PATH_STYLE = {\n    fill: '#CCD6EC',\n    opacity: 0.3,\n};\nexport function getItemsOfView(view, point, tooltipCfg) {\n    var e_1, _a, e_2, _b, e_3, _c;\n    var items = findItemsFromViewRecurisive(view, point, tooltipCfg);\n    if (items.length) {\n        // 三层\n        items = flatten(items);\n        try {\n            for (var items_1 = __values(items), items_1_1 = items_1.next(); !items_1_1.done; items_1_1 = items_1.next()) {\n                var itemArr = items_1_1.value;\n                try {\n                    for (var itemArr_1 = (e_2 = void 0, __values(itemArr)), itemArr_1_1 = itemArr_1.next(); !itemArr_1_1.done; itemArr_1_1 = itemArr_1.next()) {\n                        var item = itemArr_1_1.value;\n                        var _d = item.mappingData, x = _d.x, y = _d.y;\n                        item.x = isArray(x) ? x[x.length - 1] : x;\n                        item.y = isArray(y) ? y[y.length - 1] : y;\n                    }\n                }\n                catch (e_2_1) { e_2 = { error: e_2_1 }; }\n                finally {\n                    try {\n                        if (itemArr_1_1 && !itemArr_1_1.done && (_b = itemArr_1.return)) _b.call(itemArr_1);\n                    }\n                    finally { if (e_2) throw e_2.error; }\n                }\n            }\n        }\n        catch (e_1_1) { e_1 = { error: e_1_1 }; }\n        finally {\n            try {\n                if (items_1_1 && !items_1_1.done && (_a = items_1.return)) _a.call(items_1);\n            }\n            finally { if (e_1) throw e_1.error; }\n        }\n        var shared = tooltipCfg.shared;\n        // shared: false 代表只显示当前拾取到的 shape 的数据，但是一个 view 会有多个 Geometry，所以有可能会拾取到多个 shape\n        if (shared === false && items.length > 1) {\n            var snapItem = items[0];\n            var min = Math.abs(point.y - snapItem[0].y);\n            try {\n                for (var items_2 = __values(items), items_2_1 = items_2.next(); !items_2_1.done; items_2_1 = items_2.next()) {\n                    var aItem = items_2_1.value;\n                    var yDistance = Math.abs(point.y - aItem[0].y);\n                    if (yDistance <= min) {\n                        snapItem = aItem;\n                        min = yDistance;\n                    }\n                }\n            }\n            catch (e_3_1) { e_3 = { error: e_3_1 }; }\n            finally {\n                try {\n                    if (items_2_1 && !items_2_1.done && (_c = items_2.return)) _c.call(items_2);\n                }\n                finally { if (e_3) throw e_3.error; }\n            }\n            items = [snapItem];\n        }\n        return uniq(flatten(items));\n    }\n    return [];\n}\n/**\n * 背景框的 Action. 只作用于 interval 和 schema geometry\n * @ignore\n */\nvar ActiveRegion = /** @class */ (function (_super) {\n    __extends(ActiveRegion, _super);\n    function ActiveRegion() {\n        return _super !== null && _super.apply(this, arguments) || this;\n    }\n    /**\n     * 显示\n     * @param {ShapeAttrs} style region-path 的样式\n     * @param {number} appendRatio 适用于笛卡尔坐标系. 对于 x 轴非 linear 类型: 默认：0.25, x 轴 linear 类型: 默认 0\n     * @param {number} appendWidth  适用于笛卡尔坐标系. 像素级别，优先级 > appendRatio\n     */\n    ActiveRegion.prototype.show = function (args) {\n        var view = this.context.view;\n        var ev = this.context.event;\n        var tooltipCfg = view.getController('tooltip').getTooltipCfg();\n        var tooltipItems = getItemsOfView(view, {\n            x: ev.x,\n            y: ev.y,\n        }, tooltipCfg);\n        if (isEqual(tooltipItems, this.items)) {\n            // 如果拾取数据同上次相同，则不重复绘制\n            return;\n        }\n        this.items = tooltipItems;\n        if (tooltipItems.length) {\n            var xField_1 = view.getXScale().field;\n            var xValue_1 = tooltipItems[0].data[xField_1];\n            // 根据 x 对应的值查找 elements\n            var elements_1 = [];\n            var geometries = view.geometries;\n            each(geometries, function (geometry) {\n                if (geometry.type === 'interval' || geometry.type === 'schema') {\n                    var result = geometry.getElementsBy(function (ele) {\n                        var eleData = ele.getData();\n                        return eleData[xField_1] === xValue_1;\n                    });\n                    elements_1 = elements_1.concat(result);\n                }\n            });\n            // 根据 bbox 计算背景框的面积区域\n            if (elements_1.length) {\n                var coordinate_1 = view.getCoordinate();\n                var firstBBox_1 = elements_1[0].shape.getCanvasBBox();\n                var lastBBox_1 = elements_1[0].shape.getCanvasBBox();\n                var groupBBox_1 = firstBBox_1;\n                each(elements_1, function (ele) {\n                    var bbox = ele.shape.getCanvasBBox();\n                    if (coordinate_1.isTransposed) {\n                        if (bbox.minY < firstBBox_1.minY) {\n                            firstBBox_1 = bbox;\n                        }\n                        if (bbox.maxY > lastBBox_1.maxY) {\n                            lastBBox_1 = bbox;\n                        }\n                    }\n                    else {\n                        if (bbox.minX < firstBBox_1.minX) {\n                            firstBBox_1 = bbox;\n                        }\n                        if (bbox.maxX > lastBBox_1.maxX) {\n                            lastBBox_1 = bbox;\n                        }\n                    }\n                    groupBBox_1.x = Math.min(bbox.minX, groupBBox_1.minX);\n                    groupBBox_1.y = Math.min(bbox.minY, groupBBox_1.minY);\n                    groupBBox_1.width = Math.max(bbox.maxX, groupBBox_1.maxX) - groupBBox_1.x;\n                    groupBBox_1.height = Math.max(bbox.maxY, groupBBox_1.maxY) - groupBBox_1.y;\n                });\n                var backgroundGroup = view.backgroundGroup, coordinateBBox = view.coordinateBBox;\n                var path = void 0;\n                if (coordinate_1.isRect) {\n                    var xScale = view.getXScale();\n                    var _a = args || {}, appendRatio = _a.appendRatio, appendWidth = _a.appendWidth;\n                    if (isNil(appendWidth)) {\n                        appendRatio = isNil(appendRatio) ? (xScale.isLinear ? 0 : 0.25) : appendRatio; // 如果 x 轴是数值类型，如直方图，默认不需要加额外的宽度\n                        appendWidth = coordinate_1.isTransposed ? appendRatio * lastBBox_1.height : appendRatio * firstBBox_1.width;\n                    }\n                    var minX = void 0;\n                    var minY = void 0;\n                    var width = void 0;\n                    var height = void 0;\n                    if (coordinate_1.isTransposed) {\n                        minX = coordinateBBox.minX;\n                        minY = Math.min(lastBBox_1.minY, firstBBox_1.minY) - appendWidth;\n                        width = coordinateBBox.width;\n                        height = groupBBox_1.height + appendWidth * 2;\n                    }\n                    else {\n                        minX = Math.min(firstBBox_1.minX, lastBBox_1.minX) - appendWidth;\n                        // 直角坐标系 非转置：最小值直接取 坐标系 minY\n                        minY = coordinateBBox.minY;\n                        width = groupBBox_1.width + appendWidth * 2;\n                        height = coordinateBBox.height;\n                    }\n                    path = [\n                        ['M', minX, minY],\n                        ['L', minX + width, minY],\n                        ['L', minX + width, minY + height],\n                        ['L', minX, minY + height],\n                        ['Z'],\n                    ];\n                }\n                else {\n                    var firstElement = head(elements_1);\n                    var lastElement = last(elements_1);\n                    var startAngle = getAngle(firstElement.getModel(), coordinate_1).startAngle;\n                    var endAngle = getAngle(lastElement.getModel(), coordinate_1).endAngle;\n                    var center = coordinate_1.getCenter();\n                    var radius = coordinate_1.getRadius();\n                    var innterRadius = coordinate_1.innerRadius * radius;\n                    path = getSectorPath(center.x, center.y, radius, startAngle, endAngle, innterRadius);\n                }\n                if (this.regionPath) {\n                    this.regionPath.attr('path', path);\n                    this.regionPath.show();\n                }\n                else {\n                    var style = get(args, 'style', DEFAULT_REGION_PATH_STYLE);\n                    this.regionPath = backgroundGroup.addShape({\n                        type: 'path',\n                        name: 'active-region',\n                        capture: false,\n                        attrs: __assign(__assign({}, style), { path: path }),\n                    });\n                }\n            }\n        }\n    };\n    /**\n     * 隐藏\n     */\n    ActiveRegion.prototype.hide = function () {\n        if (this.regionPath) {\n            this.regionPath.hide();\n        }\n        // this.regionPath = null;\n        this.items = null;\n    };\n    /**\n     * 销毁\n     */\n    ActiveRegion.prototype.destroy = function () {\n        this.hide();\n        if (this.regionPath) {\n            this.regionPath.remove(true);\n        }\n        _super.prototype.destroy.call(this);\n    };\n    return ActiveRegion;\n}(Action));\nexport default ActiveRegion;\n//# sourceMappingURL=active-region.js.map","import { __extends } from \"tslib\";\nimport { isEqual, get } from '@antv/util';\nimport Action from '../../base';\n/**\n * Tooltip 展示隐藏的 Action\n * @ignore\n */\nvar TooltipAction = /** @class */ (function (_super) {\n    __extends(TooltipAction, _super);\n    function TooltipAction() {\n        var _this = _super !== null && _super.apply(this, arguments) || this;\n        _this.timeStamp = 0;\n        return _this;\n    }\n    /**\n     * 显示 Tooltip\n     * @returns\n     */\n    TooltipAction.prototype.show = function () {\n        var context = this.context;\n        var ev = context.event;\n        var view = context.view;\n        var isTooltipLocked = view.isTooltipLocked();\n        if (isTooltipLocked) {\n            // 锁定时不移动 tooltip\n            return;\n        }\n        var lastTimeStamp = this.timeStamp;\n        var timeStamp = +new Date();\n        // 在 showDelay 毫秒（默认 16ms）内到 tooltip 上可以实现 enterable（调参工程师）\n        var showDelay = get(context.view.getOptions(), 'tooltip.showDelay', 16);\n        if (timeStamp - lastTimeStamp > showDelay) {\n            var preLoc = this.location;\n            var curLoc = { x: ev.x, y: ev.y };\n            if (!preLoc || !isEqual(preLoc, curLoc)) {\n                this.showTooltip(view, curLoc);\n            }\n            this.timeStamp = timeStamp;\n            this.location = curLoc;\n        }\n    };\n    /**\n     * 隐藏 Tooltip。\n     * @returns\n     */\n    TooltipAction.prototype.hide = function () {\n        var view = this.context.view;\n        var tooltip = view.getController('tooltip');\n        var _a = this.context.event, clientX = _a.clientX, clientY = _a.clientY;\n        // 如果已经 enterable + 已经在 tooltip 上，那么不隐藏\n        if (tooltip.isCursorEntered({ x: clientX, y: clientY })) {\n            return;\n        }\n        // 锁定 tooltip 时不隐藏\n        if (view.isTooltipLocked()) {\n            return;\n        }\n        this.hideTooltip(view);\n        this.location = null;\n    };\n    TooltipAction.prototype.showTooltip = function (view, point) {\n        // 相同位置不重复展示\n        view.showTooltip(point);\n    };\n    TooltipAction.prototype.hideTooltip = function (view) {\n        view.hideTooltip();\n    };\n    return TooltipAction;\n}(Action));\nexport default TooltipAction;\n//# sourceMappingURL=geometry.js.map","import { __extends } from \"tslib\";\nimport { each } from '@antv/util';\nimport { getSiblingPoint, getSilbings } from '../../util';\nimport TooltipAction from './geometry';\n/**\n * 存在多个 view 时，控制其他 view 上的 tooltip 显示\n * @ignore\n */\nvar SiblingTooltip = /** @class */ (function (_super) {\n    __extends(SiblingTooltip, _super);\n    function SiblingTooltip() {\n        return _super !== null && _super.apply(this, arguments) || this;\n    }\n    /**\n     * 所有同一层级的 tooltip 显示\n     * @param view\n     * @param point\n     */\n    SiblingTooltip.prototype.showTooltip = function (view, point) {\n        var siblings = getSilbings(view);\n        each(siblings, function (sibling) {\n            var siblingPoint = getSiblingPoint(view, sibling, point);\n            sibling.showTooltip(siblingPoint);\n        });\n    };\n    /**\n     * 隐藏同一层级的 tooltip\n     * @param view\n     */\n    SiblingTooltip.prototype.hideTooltip = function (view) {\n        var siblings = getSilbings(view);\n        each(siblings, function (sibling) {\n            sibling.hideTooltip();\n        });\n    };\n    return SiblingTooltip;\n}(TooltipAction));\nexport default SiblingTooltip;\n//# sourceMappingURL=sibling.js.map","import { __assign, __extends } from \"tslib\";\nimport { isEqual, get, deepMix } from '@antv/util';\nimport { TOOLTIP_CSS_CONST } from '@antv/component';\nimport Action from '../../base';\nimport { HtmlTooltip } from '../../../../dependents';\n/**\n * 用于组件文本省略后需要展示完整信息的 Tooltip Action\n * @ignore\n */\nvar EllipsisText = /** @class */ (function (_super) {\n    __extends(EllipsisText, _super);\n    function EllipsisText() {\n        var _this = _super !== null && _super.apply(this, arguments) || this;\n        _this.timeStamp = 0;\n        return _this;\n    }\n    EllipsisText.prototype.destroy = function () {\n        _super.prototype.destroy.call(this);\n        this.tooltip && this.tooltip.destroy();\n    };\n    /**\n     * 显示 Tooltip\n     * @returns\n     */\n    EllipsisText.prototype.show = function () {\n        var context = this.context;\n        var ev = context.event;\n        var lastTimeStamp = this.timeStamp;\n        var timeStamp = +new Date();\n        if (timeStamp - lastTimeStamp > 16) {\n            var preLoc = this.location;\n            var curLoc = { x: ev.x, y: ev.y };\n            if (!preLoc || !isEqual(preLoc, curLoc)) {\n                this.showTooltip(curLoc);\n            }\n            this.timeStamp = timeStamp;\n            this.location = curLoc;\n        }\n    };\n    /**\n     * 隐藏 Tooltip。\n     * @returns\n     */\n    EllipsisText.prototype.hide = function () {\n        this.hideTooltip();\n        this.location = null;\n    };\n    EllipsisText.prototype.showTooltip = function (curLoc) {\n        var context = this.context;\n        var ev = context.event;\n        var target = ev.target;\n        if (target && target.get('tip')) {\n            if (!this.tooltip) {\n                this.renderTooltip(); // 延迟生成\n            }\n            else {\n                // 更新时需要重新获取 region 赋值，避免画布缩放后 tooltip 位置不对\n                var view = context.view;\n                var canvas = view.canvas;\n                var region = {\n                    start: { x: 0, y: 0 },\n                    end: { x: canvas.get('width'), y: canvas.get('height') },\n                };\n                this.tooltip.set('region', region);\n            }\n            var tipContent = target.get('tip');\n            // 展示 tooltip\n            this.tooltip.update(__assign({ title: tipContent }, curLoc));\n            this.tooltip.show();\n        }\n    };\n    EllipsisText.prototype.hideTooltip = function () {\n        this.tooltip && this.tooltip.hide();\n    };\n    EllipsisText.prototype.renderTooltip = function () {\n        var _a;\n        var view = this.context.view;\n        var canvas = view.canvas;\n        var region = {\n            start: { x: 0, y: 0 },\n            end: { x: canvas.get('width'), y: canvas.get('height') },\n        };\n        var theme = view.getTheme();\n        var tooltipStyles = get(theme, ['components', 'tooltip', 'domStyles'], {}); // 获取 tooltip 样式\n        var tooltip = new HtmlTooltip({\n            parent: canvas.get('el').parentNode,\n            region: region,\n            visible: false,\n            crosshairs: null,\n            domStyles: __assign({}, deepMix({}, tooltipStyles, (_a = {},\n                // 超长的时候，tooltip tip 最大宽度为 50%，然后可以换行\n                _a[TOOLTIP_CSS_CONST.CONTAINER_CLASS] = { 'max-width': '50%' },\n                _a[TOOLTIP_CSS_CONST.TITLE_CLASS] = { 'word-break': 'break-all' },\n                _a))),\n        });\n        tooltip.init();\n        tooltip.setCapture(false); // 不允许捕获事件\n        this.tooltip = tooltip;\n    };\n    return EllipsisText;\n}(Action));\nexport default EllipsisText;\n//# sourceMappingURL=ellipsis-text.js.map","import { __extends } from \"tslib\";\nimport { each } from '@antv/util';\nimport Action from '../base';\nimport { getElementsByState } from '../util';\n/**\n * 状态量 Action 的基类\n * @abstract\n * @class\n * @ignore\n */\nvar StateBase = /** @class */ (function (_super) {\n    __extends(StateBase, _super);\n    function StateBase() {\n        var _this = _super !== null && _super.apply(this, arguments) || this;\n        /**\n         * 状态名称\n         */\n        _this.stateName = '';\n        return _this;\n    }\n    /**\n     * 是否具有某个状态\n     * @param element 图表 Element 元素\n     */\n    StateBase.prototype.hasState = function (element) {\n        return element.hasState(this.stateName);\n    };\n    /**\n     * 设置状态激活\n     * @param enable 状态值\n     */\n    StateBase.prototype.setElementState = function (element, enable) {\n        // 防止闪烁\n        element.setState(this.stateName, enable);\n    };\n    /**\n     * 设置状态\n     */\n    StateBase.prototype.setState = function () {\n        this.setStateEnable(true);\n    };\n    /**\n     * 清除所有 Element 的状态\n     */\n    StateBase.prototype.clear = function () {\n        var view = this.context.view;\n        this.clearViewState(view);\n    };\n    StateBase.prototype.clearViewState = function (view) {\n        var _this = this;\n        var elements = getElementsByState(view, this.stateName);\n        each(elements, function (el) {\n            _this.setElementState(el, false);\n        });\n    };\n    return StateBase;\n}(Action));\nexport default StateBase;\n//# sourceMappingURL=state-base.js.map","import { __extends } from \"tslib\";\nimport { each, isNil, get } from '@antv/util';\nimport { getCurrentElement, getDelegationObject, getElements, getElementValue, getScaleByField, isElementChange, isList, } from '../util';\nimport StateBase from './state-base';\nfunction getItem(shape) {\n    return get(shape.get('delegateObject'), 'item');\n}\n/**\n * 状态量 Action 的基类，允许多个 Element 同时拥有某个状态\n * @class\n * @ignore\n */\nvar ElementState = /** @class */ (function (_super) {\n    __extends(ElementState, _super);\n    function ElementState() {\n        var _this = _super !== null && _super.apply(this, arguments) || this;\n        _this.ignoreListItemStates = ['unchecked'];\n        return _this;\n    }\n    // 是否忽略触发的列表项\n    ElementState.prototype.isItemIgnore = function (item, list) {\n        var states = this.ignoreListItemStates;\n        var filtered = states.filter(function (state) {\n            return list.hasState(item, state);\n        });\n        return !!filtered.length;\n    };\n    // 设置由组件选项导致的状态变化\n    ElementState.prototype.setStateByComponent = function (component, item, enable) {\n        var view = this.context.view;\n        var field = component.get('field');\n        var elements = getElements(view);\n        this.setElementsStateByItem(elements, field, item, enable);\n    };\n    // 处理触发源由 element 导致的状态变化\n    ElementState.prototype.setStateByElement = function (element, enable) {\n        this.setElementState(element, enable);\n    };\n    /** 组件的选项是否同 element 匹配 */\n    ElementState.prototype.isMathItem = function (element, field, item) {\n        var view = this.context.view;\n        var scale = getScaleByField(view, field);\n        var value = getElementValue(element, field);\n        return !isNil(value) && item.name === scale.getText(value);\n    };\n    ElementState.prototype.setElementsStateByItem = function (elements, field, item, enable) {\n        var _this = this;\n        each(elements, function (el) {\n            if (_this.isMathItem(el, field, item)) {\n                el.setState(_this.stateName, enable);\n            }\n        });\n    };\n    /** 设置状态是否激活 */\n    ElementState.prototype.setStateEnable = function (enable) {\n        var element = getCurrentElement(this.context);\n        if (element) {\n            // 触发源由于 element 导致\n            if (isElementChange(this.context)) {\n                this.setStateByElement(element, enable);\n            }\n        }\n        else {\n            // 触发源由组件导致\n            var delegateObject = getDelegationObject(this.context);\n            // 如果触发源时列表，图例、坐标轴\n            if (isList(delegateObject)) {\n                var item = delegateObject.item, component = delegateObject.component;\n                if (item && component && !this.isItemIgnore(item, component)) {\n                    var event_1 = this.context.event.gEvent;\n                    // 防止闪烁\n                    if (event_1 && event_1.fromShape && event_1.toShape && getItem(event_1.fromShape) === getItem(event_1.toShape)) {\n                        return;\n                    }\n                    this.setStateByComponent(component, item, enable);\n                }\n            }\n        }\n    };\n    /**\n     * 切换状态\n     */\n    ElementState.prototype.toggle = function () {\n        var element = getCurrentElement(this.context);\n        if (element) {\n            var hasState = element.hasState(this.stateName);\n            this.setElementState(element, !hasState);\n        }\n    };\n    /**\n     * 取消当前时间影响的状态\n     */\n    ElementState.prototype.reset = function () {\n        this.setStateEnable(false);\n    };\n    return ElementState;\n}(StateBase));\nexport default ElementState;\n//# sourceMappingURL=state.js.map","import { __extends } from \"tslib\";\nimport StateAction from './state';\n/**\n * 元素 active 的 Action，允许多个元素同时 active\n * @class\n * @ignore\n */\nvar ElementActive = /** @class */ (function (_super) {\n    __extends(ElementActive, _super);\n    function ElementActive() {\n        var _this = _super !== null && _super.apply(this, arguments) || this;\n        _this.stateName = 'active';\n        return _this;\n    }\n    /**\n     * Active Element\n     */\n    ElementActive.prototype.active = function () {\n        this.setState();\n    };\n    return ElementActive;\n}(StateAction));\nexport default ElementActive;\n//# sourceMappingURL=active.js.map","import { __assign, __extends } from \"tslib\";\nimport Action from '../base';\nimport { getCurrentElement, getElementValue, getElementsByField } from '../util';\nimport { deepMix, each, isFunction } from '@antv/util';\n/**\n * Link Elements by color\n *\n * public 方法是对外可用的反馈交互。使用方式，如：element-link-by-color:link, element-link-by-color:unlink, element-link-by-color:clear\n */\nvar LinkByColor = /** @class */ (function (_super) {\n    __extends(LinkByColor, _super);\n    function LinkByColor() {\n        var _this = _super !== null && _super.apply(this, arguments) || this;\n        _this.cache = {};\n        return _this;\n    }\n    // 获取颜色对应的 scale\n    LinkByColor.prototype.getColorScale = function (view, element) {\n        var colorAttr = element.geometry.getAttribute('color');\n        if (!colorAttr) {\n            return null;\n        }\n        var scale = view.getScaleByField(colorAttr.getFields()[0]);\n        return scale;\n    };\n    // 获取连接的 path\n    LinkByColor.prototype.getLinkPath = function (element, nextElement) {\n        var view = this.context.view;\n        var isTransposed = view.getCoordinate().isTransposed;\n        var bbox = element.shape.getCanvasBBox();\n        var nextBBox = nextElement.shape.getCanvasBBox();\n        var path = isTransposed\n            ? [\n                ['M', bbox.minX, bbox.minY],\n                ['L', nextBBox.minX, nextBBox.maxY],\n                ['L', nextBBox.maxX, nextBBox.maxY],\n                ['L', bbox.maxX, bbox.minY],\n                ['Z'],\n            ]\n            : [\n                ['M', bbox.maxX, bbox.minY],\n                ['L', nextBBox.minX, nextBBox.minY],\n                ['L', nextBBox.minX, nextBBox.maxY],\n                ['L', bbox.maxX, bbox.maxY],\n                ['Z'],\n            ];\n        return path;\n    };\n    // 添加连接的图形\n    LinkByColor.prototype.addLinkShape = function (group, element, nextElement, activeStyle) {\n        var style = {\n            opacity: 0.4,\n            fill: element.shape.attr('fill'),\n        };\n        group.addShape({\n            type: 'path',\n            attrs: __assign(__assign({}, deepMix({}, style, isFunction(activeStyle) ? activeStyle(style, element) : activeStyle)), { path: this.getLinkPath(element, nextElement) }),\n        });\n    };\n    // 使用图形连接\n    LinkByColor.prototype.linkByElement = function (element, activeStyle) {\n        var _this = this;\n        var view = this.context.view;\n        var scale = this.getColorScale(view, element);\n        if (!scale) {\n            return;\n        }\n        var value = getElementValue(element, scale.field);\n        if (!this.cache[value]) {\n            var elements_1 = getElementsByField(view, scale.field, value);\n            var linkGroup = this.linkGroup;\n            var group_1 = linkGroup.addGroup();\n            this.cache[value] = group_1; // 缓存\n            var count_1 = elements_1.length;\n            each(elements_1, function (el, index) {\n                if (index < count_1 - 1) {\n                    var nextEl = elements_1[index + 1];\n                    _this.addLinkShape(group_1, el, nextEl, activeStyle);\n                }\n            });\n        }\n    };\n    // 移除连接\n    LinkByColor.prototype.removeLink = function (element) {\n        var scale = this.getColorScale(this.context.view, element);\n        if (!scale) {\n            return;\n        }\n        var value = getElementValue(element, scale.field);\n        if (this.cache[value]) {\n            this.cache[value].remove();\n            this.cache[value] = null;\n        }\n    };\n    /**\n     * 连接 elements\n     *\n     * @usage\n     * registerInteraction('xxx', {\n     *   start: [\n     *    {\n     *      trigger: 'interval:mouseenter',\n     *      action: 'element-link-by-color:link',\n     *      arg: {\n     *        // style: { fill: 'red' }\n     *        style: (style, element) => ({ fill: 'red' })\n     *     },\n     *   },\n     *  ],\n     * });\n     */\n    LinkByColor.prototype.link = function (args) {\n        var context = this.context;\n        if (!this.linkGroup) {\n            // 不允许被拾取\n            this.linkGroup = context.view.foregroundGroup.addGroup({\n                id: 'link-by-color-group',\n                capture: false,\n            });\n        }\n        var element = getCurrentElement(context);\n        if (element) {\n            this.linkByElement(element, args === null || args === void 0 ? void 0 : args.style);\n        }\n    };\n    /**\n     * 取消连接 elements\n     */\n    LinkByColor.prototype.unlink = function () {\n        var element = getCurrentElement(this.context);\n        if (element) {\n            this.removeLink(element);\n        }\n    };\n    /**\n     * 清除所有连接\n     */\n    LinkByColor.prototype.clear = function () {\n        if (this.linkGroup) {\n            this.linkGroup.clear();\n        }\n        this.cache = {};\n    };\n    /**\n     * 销毁\n     */\n    LinkByColor.prototype.destroy = function () {\n        _super.prototype.destroy.call(this);\n        if (this.linkGroup) {\n            this.linkGroup.remove();\n        }\n    };\n    return LinkByColor;\n}(Action));\nexport default LinkByColor;\n//# sourceMappingURL=link-by-color.js.map","import { __extends } from \"tslib\";\nimport { each } from '@antv/util';\nimport { getElements, getIntersectElements, getMaskedElements, getSiblingMaskElements, getSilbings, isInRecords, isMask, } from '../util';\nimport StateBase from './state-base';\n/**\n * @ignore\n * 区域设置状态的基础 Action\n */\nvar ElementRangeState = /** @class */ (function (_super) {\n    __extends(ElementRangeState, _super);\n    function ElementRangeState() {\n        var _this = _super !== null && _super.apply(this, arguments) || this;\n        _this.startPoint = null;\n        _this.endPoint = null;\n        _this.isStarted = false;\n        /**\n         * 是否作用于当前 view 的 siblings，默认是 false 仅作用于自己\n         */\n        _this.effectSiblings = false;\n        /**\n         * 是否受 element 的数据影响，还是受包围盒的影响\n         */\n        _this.effectByRecord = false;\n        return _this;\n    }\n    // 获取当前的位置\n    ElementRangeState.prototype.getCurrentPoint = function () {\n        var event = this.context.event;\n        return {\n            x: event.x,\n            y: event.y,\n        };\n    };\n    /**\n     * 开始，记录开始选中的位置\n     */\n    ElementRangeState.prototype.start = function () {\n        this.clear(); // 开始的时候清理之前的状态\n        this.startPoint = this.getCurrentPoint();\n        this.isStarted = true;\n    };\n    ElementRangeState.prototype.getIntersectElements = function () {\n        var elements = null;\n        if (isMask(this.context)) {\n            elements = getMaskedElements(this.context, 10);\n        }\n        else {\n            var startPoint = this.startPoint;\n            var endPoint = this.isStarted ? this.getCurrentPoint() : this.endPoint;\n            // 如果没有开始，则不允许范围设置状态，保护性质\n            if (!startPoint || !endPoint) {\n                return;\n            }\n            // 计算框选区域\n            var box = {\n                minX: Math.min(startPoint.x, endPoint.x),\n                minY: Math.min(startPoint.y, endPoint.y),\n                maxX: Math.max(startPoint.x, endPoint.x),\n                maxY: Math.max(startPoint.y, endPoint.y),\n            };\n            // this.clear(); // 不全部清理，会导致闪烁\n            var view = this.context.view;\n            elements = getIntersectElements(view, box);\n        }\n        return elements;\n    };\n    /**\n     * 选中\n     */\n    ElementRangeState.prototype.setStateEnable = function (enable) {\n        if (this.effectSiblings && !this.effectByRecord) {\n            this.setSiblingsState(enable);\n        }\n        else {\n            var allElements = getElements(this.context.view);\n            var elements = this.getIntersectElements();\n            if (elements && elements.length) {\n                if (this.effectByRecord) {\n                    this.setSiblingsStateByRecord(elements, enable);\n                }\n                else {\n                    this.setElementsState(elements, enable, allElements);\n                }\n            }\n            else {\n                this.clear();\n            }\n        }\n    };\n    // 根据选中的 element 的数据进行设置状态\n    ElementRangeState.prototype.setSiblingsStateByRecord = function (elements, enable) {\n        var _this = this;\n        var view = this.context.view;\n        var siblings = getSilbings(view);\n        var records = elements.map(function (el) {\n            return el.getModel().data;\n        });\n        var xFiled = view.getXScale().field;\n        var yField = view.getYScales()[0].field;\n        each(siblings, function (sibling) {\n            var allElements = getElements(sibling);\n            var effectElements = allElements.filter(function (el) {\n                var record = el.getModel().data;\n                return isInRecords(records, record, xFiled, yField);\n            });\n            _this.setElementsState(effectElements, enable, allElements);\n        });\n    };\n    // 设置兄弟 view 的状态\n    ElementRangeState.prototype.setSiblingsState = function (enable) {\n        var _this = this;\n        var view = this.context.view;\n        var siblings = getSilbings(view);\n        if (isMask(this.context)) {\n            // 受 mask 影响\n            each(siblings, function (sibling) {\n                var allElements = getElements(sibling);\n                var effectElements = getSiblingMaskElements(_this.context, sibling, 10);\n                if (effectElements && effectElements.length) {\n                    _this.setElementsState(effectElements, enable, allElements);\n                }\n                else {\n                    _this.clearViewState(sibling);\n                }\n            });\n        }\n    };\n    ElementRangeState.prototype.setElementsState = function (elements, enable, allElements) {\n        var _this = this;\n        each(allElements, function (el) {\n            if (!elements.includes(el)) {\n                _this.setElementState(el, false);\n            }\n            else {\n                _this.setElementState(el, enable);\n            }\n        });\n    };\n    /**\n     * 结束\n     */\n    ElementRangeState.prototype.end = function () {\n        this.isStarted = false;\n        this.endPoint = this.getCurrentPoint();\n    };\n    // 复写 clear\n    ElementRangeState.prototype.clear = function () {\n        var _this = this;\n        var view = this.context.view;\n        // 判断是否影响 siblings\n        if (this.effectSiblings) {\n            var siblings = getSilbings(view);\n            each(siblings, function (sibling) {\n                _this.clearViewState(sibling);\n            });\n        }\n        else {\n            this.clearViewState(view);\n        }\n    };\n    return ElementRangeState;\n}(StateBase));\nexport default ElementRangeState;\n//# sourceMappingURL=range-state.js.map","import { __extends } from \"tslib\";\nimport ElementRangeState from './range-state';\n/**\n * @ignore\n * 图表元素区域 Active 的 Action\n */\nvar ElementRangeActive = /** @class */ (function (_super) {\n    __extends(ElementRangeActive, _super);\n    function ElementRangeActive() {\n        var _this = _super !== null && _super.apply(this, arguments) || this;\n        _this.stateName = 'active';\n        return _this;\n    }\n    /**\n     * 图表元素 Active\n     */\n    ElementRangeActive.prototype.active = function () {\n        this.setState();\n    };\n    return ElementRangeActive;\n}(ElementRangeState));\nexport default ElementRangeActive;\n//# sourceMappingURL=range-active.js.map","import { __extends } from \"tslib\";\nimport { getCurrentElement, isElementChange } from '../util';\nimport StateBase from './state-base';\n/**\n * 单状态量的 Action 基类\n * @class\n * @ignore\n */\nvar ElementSingleState = /** @class */ (function (_super) {\n    __extends(ElementSingleState, _super);\n    function ElementSingleState() {\n        return _super !== null && _super.apply(this, arguments) || this;\n    }\n    ElementSingleState.prototype.setStateEnable = function (enable) {\n        var element = getCurrentElement(this.context);\n        if (element) {\n            // 在同一个 element 内部移动，忽视 label 和 shape 之间\n            if (!isElementChange(this.context)) {\n                return;\n            }\n            // 仅支持单个状态量的元素，只能由 element 触发\n            if (enable) {\n                this.clear();\n                this.setElementState(element, true);\n            }\n            else if (this.hasState(element)) {\n                this.setElementState(element, false);\n            }\n        }\n    };\n    /**\n     * 切换选中，只允许选中一个\n     */\n    ElementSingleState.prototype.toggle = function () {\n        var element = getCurrentElement(this.context);\n        if (element) {\n            var hasState = this.hasState(element); // 提前获取状态\n            if (!hasState) {\n                this.clear();\n            }\n            this.setElementState(element, !hasState);\n        }\n    };\n    /**\n     * 取消当前时间影响的状态\n     */\n    ElementSingleState.prototype.reset = function () {\n        this.setStateEnable(false);\n    };\n    return ElementSingleState;\n}(StateBase));\nexport default ElementSingleState;\n//# sourceMappingURL=single-state.js.map","import { __extends } from \"tslib\";\nimport ElementSingleState from './single-state';\n/**\n * @ignore\n * 仅允许单个 Element Active 的 Action\n */\nvar ElementSingleActive = /** @class */ (function (_super) {\n    __extends(ElementSingleActive, _super);\n    function ElementSingleActive() {\n        var _this = _super !== null && _super.apply(this, arguments) || this;\n        _this.stateName = 'active';\n        return _this;\n    }\n    /**\n     * 当前事件相关的 Element Active\n     */\n    ElementSingleActive.prototype.active = function () {\n        this.setState();\n    };\n    return ElementSingleActive;\n}(ElementSingleState));\nexport default ElementSingleActive;\n//# sourceMappingURL=single-active.js.map","import { each } from '@antv/util';\nimport { getElements } from '../util';\nvar STATUS_UNACTIVE = 'inactive';\nvar STATUS_ACTIVE = 'active';\n/**\n * @ignore\n * 清理 highlight 效果\n * @param view View 或者 Chart\n */\nexport function clearHighlight(view) {\n    var elements = getElements(view);\n    each(elements, function (el) {\n        if (el.hasState(STATUS_ACTIVE)) {\n            el.setState(STATUS_ACTIVE, false);\n        }\n        if (el.hasState(STATUS_UNACTIVE)) {\n            el.setState(STATUS_UNACTIVE, false);\n        }\n    });\n}\n/**\n * @ignore\n * 设置多个元素的 highlight\n * @param elements 元素集合\n * @param callback 设置回调函数\n * @param enable 设置或者取消\n */\nexport function setHighlightBy(elements, callback, enable) {\n    each(elements, function (el) {\n        // 需要处理 active 和 unactive 的互斥\n        if (callback(el)) {\n            if (el.hasState(STATUS_UNACTIVE)) {\n                el.setState(STATUS_UNACTIVE, false);\n            }\n            el.setState(STATUS_ACTIVE, enable);\n        }\n        else {\n            if (el.hasState(STATUS_ACTIVE)) {\n                el.setState(STATUS_ACTIVE, false);\n            }\n            el.setState(STATUS_UNACTIVE, enable);\n        }\n    });\n}\n//# sourceMappingURL=highlight-util.js.map","import { __extends } from \"tslib\";\nimport { each } from '@antv/util';\nimport { getElements, getElementsByState } from '../util';\nimport { clearHighlight } from './highlight-util';\nimport StateAction from './state';\nimport { ELEMENT_STATE } from '../../../constant';\nexport var STATUS_UNACTIVE = ELEMENT_STATE.INACTIVE;\nexport var STATUS_ACTIVE = ELEMENT_STATE.ACTIVE;\n/**\n * @ignore\n * highlight，指定图形高亮，其他图形变暗\n */\nvar ElementHighlight = /** @class */ (function (_super) {\n    __extends(ElementHighlight, _super);\n    function ElementHighlight() {\n        var _this = _super !== null && _super.apply(this, arguments) || this;\n        _this.stateName = STATUS_ACTIVE;\n        return _this;\n    }\n    // 多个元素设置、取消 highlight\n    ElementHighlight.prototype.setElementsStateByItem = function (elements, field, item, enable) {\n        var _this = this;\n        var callback = function (el) { return _this.isMathItem(el, field, item); };\n        this.setHighlightBy(elements, callback, enable);\n    };\n    // 设置元素的 highlight\n    ElementHighlight.prototype.setElementHighlight = function (el, callback) {\n        if (callback(el)) {\n            if (el.hasState(STATUS_UNACTIVE)) {\n                el.setState(STATUS_UNACTIVE, false);\n            }\n            el.setState(STATUS_ACTIVE, true);\n        }\n        else if (!el.hasState(STATUS_ACTIVE)) {\n            el.setState(STATUS_UNACTIVE, true);\n        }\n    };\n    ElementHighlight.prototype.setHighlightBy = function (elements, callback, enable) {\n        var _this = this;\n        if (enable) {\n            // 如果是设置 highlight ，则将匹配的 element 设置成 active，\n            // 其他如果不是 active，则设置成 unactive\n            each(elements, function (el) {\n                _this.setElementHighlight(el, callback);\n            });\n        }\n        else {\n            // 如果取消 highlight，则要检测是否全部取消 highlight\n            var activeElements = getElementsByState(this.context.view, STATUS_ACTIVE);\n            var allCancel_1 = true;\n            // 检测所有 activeElements 都要取消 highlight\n            each(activeElements, function (el) {\n                if (!callback(el)) {\n                    allCancel_1 = false;\n                    return false;\n                }\n            });\n            if (allCancel_1) {\n                // 都要取消，则取消所有的 active，unactive 状态\n                this.clear();\n            }\n            else {\n                // 如果不是都要取消 highlight, 则设置匹配的 element 的状态为 unactive\n                // 其他 element 状态不变\n                each(elements, function (el) {\n                    if (callback(el)) {\n                        if (el.hasState(STATUS_ACTIVE)) {\n                            el.setState(STATUS_ACTIVE, false);\n                        }\n                        el.setState(STATUS_UNACTIVE, true);\n                    }\n                });\n            }\n        }\n    };\n    // 单个元素设置和取消 highlight\n    ElementHighlight.prototype.setElementState = function (element, enable) {\n        var view = this.context.view;\n        var elements = getElements(view);\n        this.setHighlightBy(elements, function (el) { return element === el; }, enable);\n    };\n    ElementHighlight.prototype.highlight = function () {\n        this.setState();\n    };\n    // 清理掉所有的 active， unactive 状态\n    ElementHighlight.prototype.clear = function () {\n        var view = this.context.view;\n        clearHighlight(view);\n    };\n    return ElementHighlight;\n}(StateAction));\nexport default ElementHighlight;\n//# sourceMappingURL=highlight.js.map","import { __extends } from \"tslib\";\nimport { Event } from '../../../chart';\nimport { clearHighlight, setHighlightBy } from './highlight-util';\nimport ElementRangeState from './range-state';\nvar EVENTS;\n(function (EVENTS) {\n    EVENTS[\"BEFORE_HIGHLIGHT\"] = \"element-range-highlight:beforehighlight\";\n    EVENTS[\"AFTER_HIGHLIGHT\"] = \"element-range-highlight:afterhighlight\";\n    EVENTS[\"BEFORE_CLEAR\"] = \"element-range-highlight:beforeclear\";\n    EVENTS[\"AFTER_CLEAR\"] = \"element-range-highlight:afterclear\";\n})(EVENTS || (EVENTS = {}));\nexport { EVENTS as ELEMENT_RANGE_HIGHLIGHT_EVENTS };\n/**\n * @ignore\n * 区域 highlight 的 Action\n */\nvar ElementRangeHighlight = /** @class */ (function (_super) {\n    __extends(ElementRangeHighlight, _super);\n    function ElementRangeHighlight() {\n        var _this = _super !== null && _super.apply(this, arguments) || this;\n        _this.stateName = 'active';\n        return _this;\n    }\n    // 清理掉所有的 active， unactive 状态\n    ElementRangeHighlight.prototype.clearViewState = function (view) {\n        clearHighlight(view);\n    };\n    /**\n     * 设置 highlight\n     */\n    ElementRangeHighlight.prototype.highlight = function () {\n        var _a = this.context, view = _a.view, event = _a.event;\n        var elements = this.getIntersectElements();\n        var payload = { view: view, event: event, highlightElements: elements };\n        view.emit(EVENTS.BEFORE_HIGHLIGHT, Event.fromData(view, EVENTS.BEFORE_HIGHLIGHT, payload));\n        this.setState();\n        view.emit(EVENTS.AFTER_HIGHLIGHT, Event.fromData(view, EVENTS.AFTER_HIGHLIGHT, payload));\n    };\n    /**\n     * @overrider 添加事件\n     */\n    ElementRangeHighlight.prototype.clear = function () {\n        var view = this.context.view;\n        view.emit(EVENTS.BEFORE_CLEAR, Event.fromData(view, EVENTS.BEFORE_CLEAR, {}));\n        _super.prototype.clear.call(this);\n        view.emit(EVENTS.AFTER_CLEAR, Event.fromData(view, EVENTS.AFTER_CLEAR, {}));\n    };\n    ElementRangeHighlight.prototype.setElementsState = function (elements, enable, allElements) {\n        setHighlightBy(allElements, function (el) { return elements.indexOf(el) >= 0; }, enable);\n    };\n    return ElementRangeHighlight;\n}(ElementRangeState));\nexport default ElementRangeHighlight;\n//# sourceMappingURL=range-highlight.js.map","import { __extends } from \"tslib\";\nimport { getElements, getElementValue } from '../util';\nimport Highlight from './highlight';\n/**\n * Highlight color\n * @ignore\n */\nvar HighlightColor = /** @class */ (function (_super) {\n    __extends(HighlightColor, _super);\n    function HighlightColor() {\n        return _super !== null && _super.apply(this, arguments) || this;\n    }\n    HighlightColor.prototype.setStateByElement = function (element, enable) {\n        var view = this.context.view;\n        var colorAttr = element.geometry.getAttribute('color');\n        if (!colorAttr) {\n            return;\n        }\n        var scale = view.getScaleByField(colorAttr.getFields()[0]);\n        var value = getElementValue(element, scale.field);\n        var elements = getElements(view);\n        var highlightElements = elements.filter(function (el) {\n            return getElementValue(el, scale.field) === value;\n        });\n        this.setHighlightBy(elements, function (el) { return highlightElements.includes(el); }, enable);\n    };\n    return HighlightColor;\n}(Highlight));\nexport default HighlightColor;\n//# sourceMappingURL=highlight-by-color.js.map","import { __extends } from \"tslib\";\nimport { getElements, getElementValue, getCurrentElement } from '../util';\nimport Highlight, { STATUS_ACTIVE, STATUS_UNACTIVE } from './highlight';\n/**\n * Highlight x\n * @ignore\n */\nvar HighlightX = /** @class */ (function (_super) {\n    __extends(HighlightX, _super);\n    function HighlightX() {\n        return _super !== null && _super.apply(this, arguments) || this;\n    }\n    // 不允许多选\n    HighlightX.prototype.setElementHighlight = function (el, callback) {\n        if (callback(el)) {\n            if (el.hasState(STATUS_UNACTIVE)) {\n                el.setState(STATUS_UNACTIVE, false);\n            }\n            el.setState(STATUS_ACTIVE, true);\n        }\n        else {\n            el.setState(STATUS_UNACTIVE, true);\n            if (el.hasState(STATUS_ACTIVE)) {\n                el.setState(STATUS_ACTIVE, false);\n            }\n        }\n    };\n    HighlightX.prototype.setStateByElement = function (element, enable) {\n        var view = this.context.view;\n        var scale = view.getXScale();\n        var value = getElementValue(element, scale.field);\n        var elements = getElements(view);\n        var highlightElements = elements.filter(function (el) {\n            return getElementValue(el, scale.field) === value;\n        });\n        this.setHighlightBy(elements, function (el) { return highlightElements.includes(el); }, enable);\n    };\n    /**\n     * 切换状态\n     */\n    HighlightX.prototype.toggle = function () {\n        var element = getCurrentElement(this.context);\n        if (element) {\n            var hasState = element.hasState(this.stateName);\n            this.setStateByElement(element, !hasState);\n        }\n    };\n    return HighlightX;\n}(Highlight));\nexport default HighlightX;\n//# sourceMappingURL=highlight-by-x.js.map","import { __extends } from \"tslib\";\nimport { getElements } from '../util';\nimport { clearHighlight, setHighlightBy } from './highlight-util';\nimport ElementSingleState from './single-state';\n/**\n * @ignore\n * 单个 Element Highlight 的 Action\n */\nvar ElementSingleHighlight = /** @class */ (function (_super) {\n    __extends(ElementSingleHighlight, _super);\n    function ElementSingleHighlight() {\n        var _this = _super !== null && _super.apply(this, arguments) || this;\n        _this.stateName = 'active';\n        return _this;\n    }\n    /**\n     * Element Highlight\n     */\n    ElementSingleHighlight.prototype.highlight = function () {\n        this.setState();\n    };\n    ElementSingleHighlight.prototype.setElementState = function (element, enable) {\n        var view = this.context.view;\n        var elements = getElements(view);\n        setHighlightBy(elements, function (el) { return element === el; }, enable);\n    };\n    // 清理掉所有的 active， unactive 状态\n    ElementSingleHighlight.prototype.clear = function () {\n        var view = this.context.view;\n        clearHighlight(view);\n    };\n    return ElementSingleHighlight;\n}(ElementSingleState));\nexport default ElementSingleHighlight;\n//# sourceMappingURL=single-highlight.js.map","import { __extends } from \"tslib\";\nimport ElementRangeState from './range-state';\n/**\n * @ignore\n * 区域选中的 Action\n */\nvar ElementRangeSelected = /** @class */ (function (_super) {\n    __extends(ElementRangeSelected, _super);\n    function ElementRangeSelected() {\n        var _this = _super !== null && _super.apply(this, arguments) || this;\n        _this.stateName = 'selected';\n        return _this;\n    }\n    /**\n     * 选中\n     */\n    ElementRangeSelected.prototype.selected = function () {\n        this.setState();\n    };\n    return ElementRangeSelected;\n}(ElementRangeState));\nexport default ElementRangeSelected;\n//# sourceMappingURL=range-selected.js.map","import { __extends } from \"tslib\";\nimport StateAction from './state';\n/**\n * @ignore\n * 允许多选的 Action\n * @class\n */\nvar ElementMultipleSelected = /** @class */ (function (_super) {\n    __extends(ElementMultipleSelected, _super);\n    function ElementMultipleSelected() {\n        var _this = _super !== null && _super.apply(this, arguments) || this;\n        _this.stateName = 'selected';\n        return _this;\n    }\n    /**\n     * 选中节点，允许多选\n     */\n    ElementMultipleSelected.prototype.selected = function () {\n        this.setState();\n    };\n    return ElementMultipleSelected;\n}(StateAction));\nexport default ElementMultipleSelected;\n//# sourceMappingURL=selected.js.map","import { __extends } from \"tslib\";\nimport ElementSingleState from './single-state';\n/**\n * @ignore\n * 单选的 Action\n */\nvar ElementSingleSelected = /** @class */ (function (_super) {\n    __extends(ElementSingleSelected, _super);\n    function ElementSingleSelected() {\n        var _this = _super !== null && _super.apply(this, arguments) || this;\n        _this.stateName = 'selected';\n        return _this;\n    }\n    /**\n     * 选中\n     */\n    ElementSingleSelected.prototype.selected = function () {\n        this.setState();\n    };\n    return ElementSingleSelected;\n}(ElementSingleState));\nexport default ElementSingleSelected;\n//# sourceMappingURL=single-selected.js.map","import { __extends } from \"tslib\";\nimport { each } from '@antv/util';\nimport Action from '../base';\nimport { getComponents } from '../util';\nimport { getCurrentElement, getDelegationObject, getElementValue, isList, getScaleByField } from '../util';\n/**\n * 列表项状态 Action 的基础类\n * @class\n * @ignore\n */\nvar ListState = /** @class */ (function (_super) {\n    __extends(ListState, _super);\n    function ListState() {\n        var _this = _super !== null && _super.apply(this, arguments) || this;\n        _this.stateName = '';\n        _this.ignoreItemStates = [];\n        return _this;\n    }\n    /** 获取触发的列表组件 */\n    ListState.prototype.getTriggerListInfo = function () {\n        var delegateObject = getDelegationObject(this.context);\n        var info = null;\n        if (isList(delegateObject)) {\n            info = {\n                item: delegateObject.item,\n                list: delegateObject.component,\n            };\n        }\n        return info;\n    };\n    // 获取所有允许执行 Action 的组件\n    ListState.prototype.getAllowComponents = function () {\n        var _this = this;\n        var view = this.context.view;\n        var components = getComponents(view);\n        var rst = [];\n        each(components, function (component) {\n            if (component.isList() && _this.allowSetStateByElement(component)) {\n                rst.push(component);\n            }\n        });\n        return rst;\n    };\n    /** 是否存在指定的状态 */\n    ListState.prototype.hasState = function (list, item) {\n        return list.hasState(item, this.stateName);\n    };\n    /** 清理组件的状态 */\n    ListState.prototype.clearAllComponentsState = function () {\n        var _this = this;\n        var components = this.getAllowComponents();\n        each(components, function (component) {\n            component.clearItemsState(_this.stateName);\n        });\n    };\n    // 不是所有的 component 都能进行 active，目前仅支持分类 scale 对应的组件\n    ListState.prototype.allowSetStateByElement = function (component) {\n        var field = component.get('field');\n        if (!field) {\n            return false;\n        }\n        if (this.cfg && this.cfg.componentNames) {\n            var name_1 = component.get('name');\n            // 如果配置了限制的 component name，则要进行检测\n            if (this.cfg.componentNames.indexOf(name_1) === -1) {\n                return false;\n            }\n        }\n        var view = this.context.view;\n        var scale = getScaleByField(view, field);\n        return scale && scale.isCategory;\n    };\n    // 检测是否允许触发对应的状态改变事件\n    ListState.prototype.allowSetStateByItem = function (item, list) {\n        var ignoreStates = this.ignoreItemStates;\n        if (ignoreStates.length) {\n            var filterStates = ignoreStates.filter(function (state) {\n                return list.hasState(item, state);\n            });\n            return filterStates.length === 0;\n        }\n        return true; // 没有定义忽略的状态时，允许\n    };\n    // 设置组件的 item active\n    ListState.prototype.setStateByElement = function (component, element, enable) {\n        var field = component.get('field');\n        var view = this.context.view;\n        var scale = getScaleByField(view, field);\n        var value = getElementValue(element, field);\n        var text = scale.getText(value);\n        this.setItemsState(component, text, enable);\n    };\n    // 设置状态\n    ListState.prototype.setStateEnable = function (enable) {\n        var _this = this;\n        var element = getCurrentElement(this.context);\n        if (element) {\n            // trigger by element\n            var components = this.getAllowComponents();\n            each(components, function (component) {\n                _this.setStateByElement(component, element, enable);\n            });\n        }\n        else {\n            // 被组件触发\n            var delegateObject = getDelegationObject(this.context);\n            if (isList(delegateObject)) {\n                var item = delegateObject.item, component = delegateObject.component;\n                if (this.allowSetStateByElement(component) && this.allowSetStateByItem(item, component)) {\n                    this.setItemState(component, item, enable);\n                }\n            }\n        }\n    };\n    // 多个 item 设置状态\n    ListState.prototype.setItemsState = function (list, name, enable) {\n        var _this = this;\n        var items = list.getItems();\n        each(items, function (item) {\n            if (item.name === name) {\n                _this.setItemState(list, item, enable);\n            }\n        });\n    };\n    // 单个 item 设置状态\n    ListState.prototype.setItemState = function (list, item, enable) {\n        list.setItemState(item, this.stateName, enable);\n    };\n    /**\n     * 设置状态\n     */\n    ListState.prototype.setState = function () {\n        this.setStateEnable(true);\n    };\n    /**\n     * 取消状态\n     */\n    ListState.prototype.reset = function () {\n        this.setStateEnable(false);\n    };\n    /**\n     * 切换状态\n     */\n    ListState.prototype.toggle = function () {\n        var triggerInfo = this.getTriggerListInfo();\n        if (triggerInfo && triggerInfo.item) {\n            var list = triggerInfo.list, item = triggerInfo.item;\n            var enable = this.hasState(list, item);\n            this.setItemState(list, item, !enable);\n        }\n    };\n    /**\n     * 取消状态\n     */\n    ListState.prototype.clear = function () {\n        var triggerInfo = this.getTriggerListInfo();\n        if (triggerInfo) {\n            triggerInfo.list.clearItemsState(this.stateName);\n        }\n        else {\n            this.clearAllComponentsState();\n        }\n    };\n    return ListState;\n}(Action));\nexport default ListState;\n//# sourceMappingURL=list-state.js.map","import { __extends } from \"tslib\";\nimport ListState from './list-state';\n/**\n * 列表项（图例项、坐标轴文本）激活的 Action\n * @class\n * @ignore\n */\nvar ListActive = /** @class */ (function (_super) {\n    __extends(ListActive, _super);\n    function ListActive() {\n        var _this = _super !== null && _super.apply(this, arguments) || this;\n        _this.stateName = 'active';\n        return _this;\n    }\n    /**\n     * 激活选项\n     */\n    ListActive.prototype.active = function () {\n        this.setState();\n    };\n    return ListActive;\n}(ListState));\nexport default ListActive;\n//# sourceMappingURL=list-active.js.map","import { each } from '@antv/util';\nvar STATUS_UNACTIVE = 'inactive';\nvar STATUS_ACTIVE = 'active';\n/**\n * 清理图例的 Highlight 效果\n * @param list 列表组件，图例或者坐标轴\n * @ignore\n */\nexport function clearList(list) {\n    var items = list.getItems();\n    each(items, function (item) {\n        if (list.hasState(item, STATUS_ACTIVE)) {\n            list.setItemState(item, STATUS_ACTIVE, false);\n        }\n        if (list.hasState(item, STATUS_UNACTIVE)) {\n            list.setItemState(item, STATUS_UNACTIVE, false);\n        }\n    });\n}\n//# sourceMappingURL=list-highlight-util.js.map","import { __extends } from \"tslib\";\nimport { each } from '@antv/util';\nimport { clearList } from './list-highlight-util';\nimport ListState from './list-state';\nvar STATUS_UNACTIVE = 'inactive';\nvar STATUS_ACTIVE = 'active';\n/**\n * highlight Action 的效果是 active 和 inactive 两个状态的组合\n * @class\n * @ignore\n */\nvar ListHighlight = /** @class */ (function (_super) {\n    __extends(ListHighlight, _super);\n    function ListHighlight() {\n        var _this = _super !== null && _super.apply(this, arguments) || this;\n        _this.stateName = STATUS_ACTIVE;\n        _this.ignoreItemStates = ['unchecked']; // 当存在 unchecked 状态时不触发\n        return _this;\n    }\n    // 如果 item.name 匹配，则设置 highlight 以及取消\n    ListHighlight.prototype.setItemsState = function (list, name, enable) {\n        this.setHighlightBy(list, function (item) { return item.name === name; }, enable);\n    };\n    // 单个 item 设置状态\n    ListHighlight.prototype.setItemState = function (list, item, enable) {\n        var items = list.getItems();\n        this.setHighlightBy(list, function (el) { return el === item; }, enable);\n    };\n    // 根据条件设置 highlight\n    ListHighlight.prototype.setHighlightBy = function (list, callback, enable) {\n        var items = list.getItems();\n        if (enable) {\n            // 设置 highlight 时，保留之前已经 Highlight 的项\n            each(items, function (item) {\n                if (callback(item)) {\n                    if (list.hasState(item, STATUS_UNACTIVE)) {\n                        list.setItemState(item, STATUS_UNACTIVE, false);\n                    }\n                    list.setItemState(item, STATUS_ACTIVE, true);\n                }\n                else if (!list.hasState(item, STATUS_ACTIVE)) {\n                    list.setItemState(item, STATUS_UNACTIVE, true);\n                }\n            });\n        }\n        else {\n            var activeItems = list.getItemsByState(STATUS_ACTIVE);\n            var allCancel_1 = true;\n            // 检测 activeItems 是否要全部取消\n            each(activeItems, function (item) {\n                if (!callback(item)) {\n                    allCancel_1 = false;\n                    return false;\n                }\n            });\n            if (allCancel_1) {\n                this.clear();\n            }\n            else {\n                // 如果不是都要取消 highlight, 则设置匹配的 element 的状态为 unactive\n                // 其他 element 状态不变\n                each(items, function (item) {\n                    if (callback(item)) {\n                        if (list.hasState(item, STATUS_ACTIVE)) {\n                            list.setItemState(item, STATUS_ACTIVE, false);\n                        }\n                        list.setItemState(item, STATUS_UNACTIVE, true);\n                    }\n                });\n            }\n        }\n    };\n    /**\n     * highlight 图例项（坐标轴文本）\n     */\n    ListHighlight.prototype.highlight = function () {\n        this.setState();\n    };\n    // 需要全部清理 active 和 unactive\n    ListHighlight.prototype.clear = function () {\n        var triggerInfo = this.getTriggerListInfo();\n        if (triggerInfo) {\n            clearList(triggerInfo.list);\n        }\n        else {\n            // 如果不是 component 的事件触发，则所有满足触发条件的组件都清除该状态\n            var components = this.getAllowComponents();\n            each(components, function (component) {\n                component.clearItemsState(STATUS_ACTIVE);\n                component.clearItemsState(STATUS_UNACTIVE);\n            });\n        }\n    };\n    return ListHighlight;\n}(ListState));\nexport default ListHighlight;\n//# sourceMappingURL=list-highlight.js.map","import { __extends } from \"tslib\";\nimport ListState from './list-state';\n/**\n * 图例项和坐标轴文本选中的 Action\n * @ignore\n */\nvar ListSelected = /** @class */ (function (_super) {\n    __extends(ListSelected, _super);\n    function ListSelected() {\n        var _this = _super !== null && _super.apply(this, arguments) || this;\n        _this.stateName = 'selected';\n        return _this;\n    }\n    ListSelected.prototype.selected = function () {\n        this.setState();\n    };\n    return ListSelected;\n}(ListState));\nexport default ListSelected;\n//# sourceMappingURL=list-selected.js.map","import { __extends } from \"tslib\";\nimport ListState from './list-state';\n/**\n * 图例项取消勾选的 Action\n * @ignore\n */\nvar ListUnchecked = /** @class */ (function (_super) {\n    __extends(ListUnchecked, _super);\n    function ListUnchecked() {\n        var _this = _super !== null && _super.apply(this, arguments) || this;\n        _this.stateName = 'unchecked';\n        return _this;\n    }\n    /**\n     * 取消勾选\n     */\n    ListUnchecked.prototype.unchecked = function () {\n        this.setState();\n    };\n    return ListUnchecked;\n}(ListState));\nexport default ListUnchecked;\n//# sourceMappingURL=list-unchecked.js.map","import { __extends } from \"tslib\";\nimport { each, some } from '@antv/util';\nimport ListState from './list-state';\nvar STATUS_UNCHECKED = 'unchecked';\nvar STATUS_CHECKED = 'checked';\n/**\n * checked Action\n * 提供三个对外方法\n * 1. toggle 切换状态\n * 2. checked 选中\n * 3. reset 清除重置\n */\nvar ListChecked = /** @class */ (function (_super) {\n    __extends(ListChecked, _super);\n    function ListChecked() {\n        var _this = _super !== null && _super.apply(this, arguments) || this;\n        _this.stateName = STATUS_CHECKED;\n        return _this;\n    }\n    // 单个 item 设置状态\n    ListChecked.prototype.setItemState = function (list, item, enable) {\n        this.setCheckedBy(list, function (el) { return el === item; }, enable);\n    };\n    // 根据条件设置 checked\n    ListChecked.prototype.setCheckedBy = function (list, callback, enable) {\n        var items = list.getItems();\n        if (enable) {\n            // 设置 checked 时，保留之前已经 checked 的项\n            each(items, function (item) {\n                if (callback(item)) {\n                    if (list.hasState(item, STATUS_UNCHECKED)) {\n                        list.setItemState(item, STATUS_UNCHECKED, false);\n                    }\n                    list.setItemState(item, STATUS_CHECKED, true);\n                }\n                else if (!list.hasState(item, STATUS_CHECKED)) {\n                    list.setItemState(item, STATUS_UNCHECKED, true);\n                }\n            });\n        }\n    };\n    /**\n     * 切换状态.\n     * 1. 当全部选中的时候 或者 当前 item 未选中时，进行激活操作\n     * 2. 否则，重置\n     * @override\n     */\n    ListChecked.prototype.toggle = function () {\n        var triggerInfo = this.getTriggerListInfo();\n        if (triggerInfo && triggerInfo.item) {\n            var list_1 = triggerInfo.list, item = triggerInfo.item;\n            // 不知道 🤷‍♀️ 只认 unchecked status\n            var allChecked = !some(list_1.getItems(), function (t) { return list_1.hasState(t, STATUS_UNCHECKED); });\n            //\n            if (allChecked || list_1.hasState(item, STATUS_UNCHECKED)) {\n                this.setItemState(list_1, item, true);\n            }\n            else {\n                this.reset();\n            }\n        }\n    };\n    /**\n     * checked 图例项\n     */\n    ListChecked.prototype.checked = function () {\n        this.setState();\n    };\n    /**\n     * 重置，需要全部清理 checked 和 unchecked\n     */\n    ListChecked.prototype.reset = function () {\n        var components = this.getAllowComponents();\n        each(components, function (component) {\n            component.clearItemsState(STATUS_CHECKED);\n            component.clearItemsState(STATUS_UNCHECKED);\n        });\n    };\n    return ListChecked;\n}(ListState));\nexport default ListChecked;\n//# sourceMappingURL=list-checked.js.map","import { __extends, __values } from \"tslib\";\nimport ListState from './list-state';\nvar STATUS_UNCHECKED = 'unchecked';\nvar ListFocus = /** @class */ (function (_super) {\n    __extends(ListFocus, _super);\n    function ListFocus() {\n        return _super !== null && _super.apply(this, arguments) || this;\n    }\n    ListFocus.prototype.toggle = function () {\n        var e_1, _a, e_2, _b, e_3, _c, e_4, _d;\n        var triggerInfo = this.getTriggerListInfo();\n        if (triggerInfo === null || triggerInfo === void 0 ? void 0 : triggerInfo.item) {\n            var list_1 = triggerInfo.list, clickedItem = triggerInfo.item;\n            var items = list_1.getItems();\n            var checkedItems = items.filter(function (t) { return !list_1.hasState(t, STATUS_UNCHECKED); });\n            var uncheckedItems = items.filter(function (t) { return list_1.hasState(t, STATUS_UNCHECKED); });\n            var checkedItem = checkedItems[0];\n            /**\n             * 1. 初始化，全部 checked。此时，点击 radio, clickItem 进入聚焦\n             * 2. 当前只选中一个\n             *    2.1 且选中 item 等于 clickItem，退出聚焦，全部重新选中\n             *    2.2 替换聚焦的 item\n             * 3. 其它，同 2.2\n             */\n            if (items.length === checkedItems.length) {\n                try {\n                    for (var items_1 = __values(items), items_1_1 = items_1.next(); !items_1_1.done; items_1_1 = items_1.next()) {\n                        var item = items_1_1.value;\n                        list_1.setItemState(item, STATUS_UNCHECKED, item.id !== clickedItem.id);\n                    }\n                }\n                catch (e_1_1) { e_1 = { error: e_1_1 }; }\n                finally {\n                    try {\n                        if (items_1_1 && !items_1_1.done && (_a = items_1.return)) _a.call(items_1);\n                    }\n                    finally { if (e_1) throw e_1.error; }\n                }\n            }\n            else if (items.length - uncheckedItems.length === 1) {\n                if (checkedItem.id === clickedItem.id) {\n                    try {\n                        for (var items_2 = __values(items), items_2_1 = items_2.next(); !items_2_1.done; items_2_1 = items_2.next()) {\n                            var item = items_2_1.value;\n                            list_1.setItemState(item, STATUS_UNCHECKED, false);\n                        }\n                    }\n                    catch (e_2_1) { e_2 = { error: e_2_1 }; }\n                    finally {\n                        try {\n                            if (items_2_1 && !items_2_1.done && (_b = items_2.return)) _b.call(items_2);\n                        }\n                        finally { if (e_2) throw e_2.error; }\n                    }\n                }\n                else {\n                    try {\n                        for (var items_3 = __values(items), items_3_1 = items_3.next(); !items_3_1.done; items_3_1 = items_3.next()) {\n                            var item = items_3_1.value;\n                            list_1.setItemState(item, STATUS_UNCHECKED, item.id !== clickedItem.id);\n                        }\n                    }\n                    catch (e_3_1) { e_3 = { error: e_3_1 }; }\n                    finally {\n                        try {\n                            if (items_3_1 && !items_3_1.done && (_c = items_3.return)) _c.call(items_3);\n                        }\n                        finally { if (e_3) throw e_3.error; }\n                    }\n                }\n            }\n            else {\n                try {\n                    for (var items_4 = __values(items), items_4_1 = items_4.next(); !items_4_1.done; items_4_1 = items_4.next()) {\n                        var item = items_4_1.value;\n                        list_1.setItemState(item, STATUS_UNCHECKED, item.id !== clickedItem.id);\n                    }\n                }\n                catch (e_4_1) { e_4 = { error: e_4_1 }; }\n                finally {\n                    try {\n                        if (items_4_1 && !items_4_1.done && (_d = items_4.return)) _d.call(items_4);\n                    }\n                    finally { if (e_4) throw e_4.error; }\n                }\n            }\n        }\n    };\n    return ListFocus;\n}(ListState));\nexport default ListFocus;\n//# sourceMappingURL=list-focus.js.map","import { __assign, __extends } from \"tslib\";\nimport ListState from './list-state';\nimport { isEqual } from '@antv/util';\nimport { TOOLTIP_CSS_CONST } from '@antv/component';\nimport { HtmlTooltip } from '../../../dependents';\nvar STATUS_SHOW = 'showRadio';\nvar TIP_ID = 'legend-radio-tip';\nvar ListRadio = /** @class */ (function (_super) {\n    __extends(ListRadio, _super);\n    function ListRadio() {\n        var _this = _super !== null && _super.apply(this, arguments) || this;\n        _this.timeStamp = 0;\n        return _this;\n    }\n    ListRadio.prototype.show = function () {\n        var triggerInfo = this.getTriggerListInfo();\n        if (triggerInfo === null || triggerInfo === void 0 ? void 0 : triggerInfo.item) {\n            var list = triggerInfo.list, item = triggerInfo.item;\n            list.setItemState(item, STATUS_SHOW, true);\n        }\n    };\n    ListRadio.prototype.hide = function () {\n        var triggerInfo = this.getTriggerListInfo();\n        if (triggerInfo === null || triggerInfo === void 0 ? void 0 : triggerInfo.item) {\n            var list = triggerInfo.list, item = triggerInfo.item;\n            list.setItemState(item, STATUS_SHOW, false);\n        }\n    };\n    ListRadio.prototype.destroy = function () {\n        _super.prototype.destroy.call(this);\n        this.tooltip && this.tooltip.destroy();\n    };\n    /**\n     * 显示 Tooltip (展示在上方)\n     * @returns\n     */\n    ListRadio.prototype.showTip = function () {\n        var context = this.context;\n        var ev = context.event;\n        var lastTimeStamp = this.timeStamp;\n        var timeStamp = +new Date();\n        var target = this.context.event.target;\n        if (timeStamp - lastTimeStamp > 16 && target.get('name') === 'legend-item-radio') {\n            var preLoc = this.location;\n            var curLoc = { x: ev.x, y: ev.y };\n            this.timeStamp = timeStamp;\n            this.location = curLoc;\n            if (!preLoc || !isEqual(preLoc, curLoc)) {\n                this.showTooltip(curLoc);\n            }\n        }\n    };\n    /**\n     * 隐藏 Tooltip。\n     * @returns\n     */\n    ListRadio.prototype.hideTip = function () {\n        this.hideTooltip();\n        this.location = null;\n    };\n    ListRadio.prototype.showTooltip = function (curLoc) {\n        var context = this.context;\n        var ev = context.event;\n        var target = ev.target;\n        if (target && target.get('tip')) {\n            if (!this.tooltip) {\n                this.renderTooltip(); // 延迟生成\n            }\n            // 展示 tooltip\n            var _a = context.view.getCanvas().get('el').getBoundingClientRect(), offsetX = _a.x, offsetY = _a.y;\n            this.tooltip.update(__assign(__assign({ title: target.get('tip') }, curLoc), { x: curLoc.x + offsetX, y: curLoc.y + offsetY }));\n            this.tooltip.show();\n        }\n    };\n    ListRadio.prototype.hideTooltip = function () {\n        this.tooltip && this.tooltip.hide();\n    };\n    ListRadio.prototype.renderTooltip = function () {\n        var _a;\n        var tooltipStyles = (_a = {},\n            _a[TOOLTIP_CSS_CONST.CONTAINER_CLASS] = {\n                padding: '6px 8px',\n                transform: 'translate(-50%, -80%)',\n                background: 'rgba(0,0,0,0.75)',\n                color: '#fff',\n                'border-radius': '2px',\n                // 避免遮挡，如果还不够的话，再考虑开放用户配置\n                'z-index': 100,\n            },\n            _a[TOOLTIP_CSS_CONST.TITLE_CLASS] = {\n                'font-size': '12px',\n                'line-height': '14px',\n                'margin-bottom': 0,\n                'word-break': 'break-all',\n            },\n            _a);\n        if (document.getElementById(TIP_ID)) {\n            document.body.removeChild(document.getElementById(TIP_ID));\n        }\n        var tooltip = new HtmlTooltip({\n            parent: document.body,\n            // tooltip 限制的区域\n            region: null,\n            visible: false,\n            crosshairs: null,\n            domStyles: tooltipStyles,\n            containerId: TIP_ID,\n        });\n        tooltip.init();\n        tooltip.setCapture(false); // 不允许捕获事件\n        this.tooltip = tooltip;\n    };\n    return ListRadio;\n}(ListState));\nexport default ListRadio;\n//# sourceMappingURL=list-radio.js.map","import { __assign, __extends } from \"tslib\";\nimport { deepMix, each } from '@antv/util';\nimport Action from '../base';\n/**\n * @ignore\n * 辅助框 Action 的基类\n */\nvar MaskBase = /** @class */ (function (_super) {\n    __extends(MaskBase, _super);\n    function MaskBase() {\n        var _this = _super !== null && _super.apply(this, arguments) || this;\n        // mask 图形\n        _this.maskShape = null;\n        // 组成 mask 的各个点\n        _this.points = [];\n        // 开始 mask 的标记\n        _this.starting = false;\n        // 开始移动的标记\n        _this.moving = false;\n        _this.preMovePoint = null;\n        _this.shapeType = 'path';\n        return _this;\n    }\n    // 获取当前的位置\n    MaskBase.prototype.getCurrentPoint = function () {\n        var event = this.context.event;\n        return {\n            x: event.x,\n            y: event.y,\n        };\n    };\n    // 触发 mask 的事件\n    MaskBase.prototype.emitEvent = function (type) {\n        var eventName = \"mask:\".concat(type);\n        var view = this.context.view;\n        var event = this.context.event;\n        view.emit(eventName, {\n            target: this.maskShape,\n            shape: this.maskShape,\n            points: this.points,\n            x: event.x,\n            y: event.y,\n        });\n    };\n    // 创建 mask\n    MaskBase.prototype.createMask = function () {\n        var view = this.context.view;\n        var maskAttrs = this.getMaskAttrs();\n        var maskShape = view.foregroundGroup.addShape({\n            type: this.shapeType,\n            name: 'mask',\n            draggable: true,\n            attrs: __assign({ fill: '#C5D4EB', opacity: 0.3 }, maskAttrs),\n        });\n        return maskShape;\n    };\n    // 生成 mask 的路径\n    MaskBase.prototype.getMaskPath = function () {\n        return [];\n    };\n    /**\n     * 显示\n     */\n    MaskBase.prototype.show = function () {\n        if (this.maskShape) {\n            this.maskShape.show();\n            this.emitEvent('show');\n        }\n    };\n    /**\n     * 开始\n     */\n    MaskBase.prototype.start = function (arg) {\n        this.starting = true;\n        // 开始时，保证移动结束\n        this.moving = false;\n        this.points = [this.getCurrentPoint()];\n        if (!this.maskShape) {\n            this.maskShape = this.createMask();\n            // 开始时设置 capture: false，可以避免创建、resize 时触发事件\n            this.maskShape.set('capture', false);\n        }\n        this.updateMask(arg === null || arg === void 0 ? void 0 : arg.maskStyle);\n        this.emitEvent('start');\n    };\n    /**\n     * 开始移动\n     */\n    MaskBase.prototype.moveStart = function () {\n        this.moving = true;\n        this.preMovePoint = this.getCurrentPoint();\n    };\n    /**\n     * 移动 mask\n     */\n    MaskBase.prototype.move = function () {\n        if (!this.moving || !this.maskShape) {\n            return;\n        }\n        var currentPoint = this.getCurrentPoint();\n        var preMovePoint = this.preMovePoint;\n        var dx = currentPoint.x - preMovePoint.x;\n        var dy = currentPoint.y - preMovePoint.y;\n        var points = this.points;\n        each(points, function (point) {\n            point.x += dx;\n            point.y += dy;\n        });\n        this.updateMask();\n        this.emitEvent('change');\n        this.preMovePoint = currentPoint;\n    };\n    MaskBase.prototype.updateMask = function (maskStyle) {\n        var attrs = deepMix({}, this.getMaskAttrs(), maskStyle);\n        this.maskShape.attr(attrs);\n    };\n    /**\n     * 结束移动\n     */\n    MaskBase.prototype.moveEnd = function () {\n        this.moving = false;\n        this.preMovePoint = null;\n    };\n    /**\n     * 结束\n     */\n    MaskBase.prototype.end = function () {\n        this.starting = false;\n        this.emitEvent('end');\n        if (this.maskShape) {\n            this.maskShape.set('capture', true);\n        }\n    };\n    /**\n     * 隐藏\n     */\n    MaskBase.prototype.hide = function () {\n        if (this.maskShape) {\n            this.maskShape.hide();\n            this.emitEvent('hide');\n        }\n    };\n    /**\n     * 大小变化\n     */\n    MaskBase.prototype.resize = function () {\n        // 只有进行中，才会允许大小变化\n        if (this.starting && this.maskShape) {\n            this.points.push(this.getCurrentPoint());\n            this.updateMask();\n            this.emitEvent('change');\n        }\n    };\n    /**\n     * 销毁\n     */\n    MaskBase.prototype.destroy = function () {\n        this.points = [];\n        if (this.maskShape) {\n            this.maskShape.remove();\n        }\n        this.maskShape = null;\n        this.preMovePoint = null;\n        _super.prototype.destroy.call(this);\n    };\n    return MaskBase;\n}(Action));\nexport default MaskBase;\n//# sourceMappingURL=base.js.map","import { __extends } from \"tslib\";\nimport { last } from '@antv/util';\nimport { distance } from '../util';\nimport MaskBase from './base';\nexport function getMaskAttrs(points) {\n    var currentPoint = last(points);\n    var r = 0;\n    var x = 0;\n    var y = 0;\n    if (points.length) {\n        var first = points[0];\n        r = distance(first, currentPoint) / 2;\n        x = (currentPoint.x + first.x) / 2;\n        y = (currentPoint.y + first.y) / 2;\n    }\n    return {\n        x: x,\n        y: y,\n        r: r,\n    };\n}\n/**\n * @ignore\n * 圆形辅助框 Action\n */\nvar CircleMask = /** @class */ (function (_super) {\n    __extends(CircleMask, _super);\n    function CircleMask() {\n        var _this = _super !== null && _super.apply(this, arguments) || this;\n        _this.shapeType = 'circle';\n        return _this;\n    }\n    CircleMask.prototype.getMaskAttrs = function () {\n        return getMaskAttrs(this.points);\n    };\n    return CircleMask;\n}(MaskBase));\nexport default CircleMask;\n//# sourceMappingURL=circle.js.map","import { __extends } from \"tslib\";\nimport { head, last } from '@antv/util';\nimport MaskBase from './base';\nexport function getRegion(points) {\n    return {\n        start: head(points),\n        end: last(points),\n    };\n}\n/**\n * 添加图形\n * @param points\n * @returns\n */\nexport function getMaskAttrs(start, end) {\n    var x = Math.min(start.x, end.x);\n    var y = Math.min(start.y, end.y);\n    var width = Math.abs(end.x - start.x);\n    var height = Math.abs(end.y - start.y);\n    return {\n        x: x,\n        y: y,\n        width: width,\n        height: height,\n    };\n}\n/**\n * @ignore\n * 矩形的辅助框 Action\n */\nvar RectMask = /** @class */ (function (_super) {\n    __extends(RectMask, _super);\n    function RectMask() {\n        var _this = _super !== null && _super.apply(this, arguments) || this;\n        _this.shapeType = 'rect';\n        return _this;\n    }\n    RectMask.prototype.getRegion = function () {\n        return getRegion(this.points);\n    };\n    RectMask.prototype.getMaskAttrs = function () {\n        var _a = this.getRegion(), start = _a.start, end = _a.end;\n        return getMaskAttrs(start, end);\n    };\n    return RectMask;\n}(MaskBase));\nexport default RectMask;\n//# sourceMappingURL=rect.js.map","import { __extends } from \"tslib\";\nimport { clamp, head, last } from '@antv/util';\nimport RectMask from './rect';\nfunction clampPoint(point) {\n    point.x = clamp(point.x, 0, 1);\n    point.y = clamp(point.y, 0, 1);\n}\nexport function getRegion(points, dim, inPlot, coord) {\n    var start = null;\n    var end = null;\n    var normalStart = coord.invert(head(points));\n    var normalEnd = coord.invert(last(points));\n    if (inPlot) {\n        // 约束到 0 - 1 范围内\n        clampPoint(normalStart);\n        clampPoint(normalEnd);\n    }\n    if (dim === 'x') {\n        // x 轴方向扩展, y 轴方向占满全部\n        start = coord.convert({\n            x: normalStart.x,\n            y: 0,\n        });\n        end = coord.convert({\n            x: normalEnd.x,\n            y: 1,\n        });\n    }\n    else {\n        // y 轴方向扩展, x 轴方向占满全部\n        start = coord.convert({\n            x: 0,\n            y: normalStart.y,\n        });\n        end = coord.convert({\n            x: 1,\n            y: normalEnd.y,\n        });\n    }\n    return {\n        start: start,\n        end: end,\n    };\n}\n/**\n * @ignore\n */\nvar DimRect = /** @class */ (function (_super) {\n    __extends(DimRect, _super);\n    function DimRect() {\n        var _this = _super !== null && _super.apply(this, arguments) || this;\n        _this.dim = 'x';\n        _this.inPlot = true;\n        return _this;\n    }\n    DimRect.prototype.getRegion = function () {\n        var coord = this.context.view.getCoordinate();\n        return getRegion(this.points, this.dim, this.inPlot, coord);\n    };\n    return DimRect;\n}(RectMask));\nexport default DimRect;\n//# sourceMappingURL=dim-rect.js.map","import { __extends } from \"tslib\";\nimport { each } from '@antv/util';\nimport MaskBase from './base';\n/**\n * 生成 mask 的路径\n * @param points\n * @returns\n */\nexport function getMaskPath(points) {\n    var path = [];\n    if (points.length) {\n        each(points, function (point, index) {\n            if (index === 0) {\n                path.push(['M', point.x, point.y]);\n            }\n            else {\n                path.push(['L', point.x, point.y]);\n            }\n        });\n        path.push(['L', points[0].x, points[0].y]);\n    }\n    return path;\n}\nexport function getMaskAttrs(points) {\n    return {\n        path: getMaskPath(points),\n    };\n}\n/**\n * @ignore\n * 多个点构成的 Path 辅助框 Action\n */\nvar PathMask = /** @class */ (function (_super) {\n    __extends(PathMask, _super);\n    function PathMask() {\n        return _super !== null && _super.apply(this, arguments) || this;\n    }\n    PathMask.prototype.getMaskPath = function () {\n        return getMaskPath(this.points);\n    };\n    PathMask.prototype.getMaskAttrs = function () {\n        return getMaskAttrs(this.points);\n    };\n    /**\n     * 添加一个点\n     */\n    PathMask.prototype.addPoint = function () {\n        this.resize();\n    };\n    return PathMask;\n}(MaskBase));\nexport default PathMask;\n//# sourceMappingURL=path.js.map","import { __extends } from \"tslib\";\nimport { getSpline } from '../util';\nimport PathMask from './path';\n/**\n * 生成 mask 的路径\n * @param points\n * @returns\n */\nexport function getMaskPath(points) {\n    return getSpline(points, true);\n}\nexport function getMaskAttrs(points) {\n    return {\n        path: getMaskPath(points),\n    };\n}\n/**\n * Smooth path mask\n * @ignore\n */\nvar SmoothPathMask = /** @class */ (function (_super) {\n    __extends(SmoothPathMask, _super);\n    function SmoothPathMask() {\n        return _super !== null && _super.apply(this, arguments) || this;\n    }\n    SmoothPathMask.prototype.getMaskPath = function () {\n        return getMaskPath(this.points);\n    };\n    SmoothPathMask.prototype.getMaskAttrs = function () {\n        return getMaskAttrs(this.points);\n    };\n    return SmoothPathMask;\n}(PathMask));\nexport default SmoothPathMask;\n//# sourceMappingURL=smooth-path.js.map","import { __extends, __read } from \"tslib\";\nimport { Event } from '../../../chart';\nimport Action from '../base';\nimport { isMask } from '../util';\n// 获取对应的 scale\nfunction getFilter(scale, dim, point1, point2) {\n    var min = Math.min(point1[dim], point2[dim]);\n    var max = Math.max(point1[dim], point2[dim]);\n    var _a = __read(scale.range, 2), rangeMin = _a[0], rangeMax = _a[1];\n    // 约束值在 scale 的 range 之间\n    if (min < rangeMin) {\n        min = rangeMin;\n    }\n    if (max > rangeMax) {\n        max = rangeMax;\n    }\n    // 范围大于整个 view 的范围，则返回 null\n    if (min === rangeMax && max === rangeMax) {\n        return null;\n    }\n    var minValue = scale.invert(min);\n    var maxValue = scale.invert(max);\n    if (scale.isCategory) {\n        var minIndex = scale.values.indexOf(minValue);\n        var maxIndex = scale.values.indexOf(maxValue);\n        var arr_1 = scale.values.slice(minIndex, maxIndex + 1);\n        return function (value) {\n            return arr_1.includes(value);\n        };\n    }\n    else {\n        return function (value) {\n            return value >= minValue && value <= maxValue;\n        };\n    }\n}\n/** range-filter 只用于：brush-filter, brush-x-filter, brush-y-filter */\nvar EVENTS;\n(function (EVENTS) {\n    EVENTS[\"FILTER\"] = \"brush-filter-processing\";\n    EVENTS[\"RESET\"] = \"brush-filter-reset\";\n    EVENTS[\"BEFORE_FILTER\"] = \"brush-filter:beforefilter\";\n    EVENTS[\"AFTER_FILTER\"] = \"brush-filter:afterfilter\";\n    EVENTS[\"BEFORE_RESET\"] = \"brush-filter:beforereset\";\n    EVENTS[\"AFTER_RESET\"] = \"brush-filter:afterreset\";\n})(EVENTS || (EVENTS = {}));\nexport { EVENTS as BRUSH_FILTER_EVENTS };\n/**\n * 范围过滤的 Action\n * @ignore\n */\nvar RangeFilter = /** @class */ (function (_super) {\n    __extends(RangeFilter, _super);\n    function RangeFilter() {\n        var _this = _super !== null && _super.apply(this, arguments) || this;\n        /**\n         * 范围过滤生效的字段/维度，可以是 x, y\n         */\n        _this.dims = ['x', 'y'];\n        /** 起始点 */\n        _this.startPoint = null;\n        _this.isStarted = false;\n        return _this;\n    }\n    // x,y 是否生效\n    RangeFilter.prototype.hasDim = function (dim) {\n        return this.dims.includes(dim);\n    };\n    /**\n     * 开始范围过滤，记录范围过滤的起点\n     */\n    RangeFilter.prototype.start = function () {\n        var context = this.context;\n        this.isStarted = true;\n        this.startPoint = context.getCurrentPoint();\n    };\n    /**\n     * 过滤，以开始的点和当前点对数据进行过滤\n     */\n    RangeFilter.prototype.filter = function () {\n        var startPoint;\n        var currentPoint;\n        if (isMask(this.context)) {\n            var maskShape = this.context.event.target;\n            var bbox = maskShape.getCanvasBBox();\n            startPoint = { x: bbox.x, y: bbox.y };\n            currentPoint = { x: bbox.maxX, y: bbox.maxY };\n        }\n        else {\n            if (!this.isStarted) {\n                // 如果没有开始，则不执行过滤\n                return;\n            }\n            startPoint = this.startPoint;\n            currentPoint = this.context.getCurrentPoint();\n        }\n        if (Math.abs(startPoint.x - currentPoint.x) < 5 || Math.abs(startPoint.x - currentPoint.y) < 5) {\n            // 距离过小也不生效\n            return;\n        }\n        var _a = this.context, view = _a.view, event = _a.event;\n        var payload = { view: view, event: event, dims: this.dims };\n        view.emit(EVENTS.BEFORE_FILTER, Event.fromData(view, EVENTS.BEFORE_FILTER, payload));\n        var coord = view.getCoordinate();\n        var normalCurrent = coord.invert(currentPoint);\n        var normalStart = coord.invert(startPoint);\n        // 设置 x 方向的 filter\n        if (this.hasDim('x')) {\n            var xScale = view.getXScale();\n            var filter = getFilter(xScale, 'x', normalCurrent, normalStart);\n            this.filterView(view, xScale.field, filter);\n        }\n        // 设置 y 方向的 filter\n        if (this.hasDim('y')) {\n            var yScale = view.getYScales()[0];\n            var filter = getFilter(yScale, 'y', normalCurrent, normalStart);\n            this.filterView(view, yScale.field, filter);\n        }\n        this.reRender(view, { source: EVENTS.FILTER });\n        view.emit(EVENTS.AFTER_FILTER, Event.fromData(view, EVENTS.AFTER_FILTER, payload));\n    };\n    /**\n     * 结束\n     */\n    RangeFilter.prototype.end = function () {\n        this.isStarted = false;\n    };\n    /**\n     * 取消同当前 Action 相关的过滤，指定的 x,y\n     */\n    RangeFilter.prototype.reset = function () {\n        var view = this.context.view;\n        view.emit(EVENTS.BEFORE_RESET, Event.fromData(view, EVENTS.BEFORE_RESET, {}));\n        this.isStarted = false;\n        if (this.hasDim('x')) {\n            var xScale = view.getXScale();\n            this.filterView(view, xScale.field, null); // 取消过滤\n        }\n        if (this.hasDim('y')) {\n            // y 轴过滤仅取第一个 yScale\n            var yScale = view.getYScales()[0];\n            this.filterView(view, yScale.field, null); // 取消过滤\n        }\n        this.reRender(view, { source: EVENTS.RESET });\n        view.emit(EVENTS.AFTER_RESET, Event.fromData(view, EVENTS.AFTER_RESET, {}));\n    };\n    /**\n     * 对 view 进行过滤\n     */\n    RangeFilter.prototype.filterView = function (view, field, filter) {\n        view.filter(field, filter);\n    };\n    /**\n     * 重新渲染\n     * @param view\n     */\n    RangeFilter.prototype.reRender = function (view, payload) {\n        view.render(true, payload);\n    };\n    return RangeFilter;\n}(Action));\nexport default RangeFilter;\n//# sourceMappingURL=range-filter.js.map","import { __assign, __extends, __read, __spreadArray } from \"tslib\";\nimport { deepMix } from '@antv/util';\nimport Action from '../../base';\n/**\n * @ignore\n * 辅助框 Action 的基类\n */\nvar MultipleMaskBase = /** @class */ (function (_super) {\n    __extends(MultipleMaskBase, _super);\n    function MultipleMaskBase() {\n        var _this = _super !== null && _super.apply(this, arguments) || this;\n        // mask 图形\n        _this.maskShapes = [];\n        // 开始 mask 的标记\n        _this.starting = false;\n        // 开始移动的标记\n        _this.moving = false;\n        // 记录 mask 节点\n        _this.recordPoints = null;\n        _this.preMovePoint = null;\n        _this.shapeType = 'path';\n        _this.maskType = 'multi-mask';\n        return _this;\n    }\n    /**\n     * 获取当前的位置\n     */\n    MultipleMaskBase.prototype.getCurrentPoint = function () {\n        var event = this.context.event;\n        return {\n            x: event.x,\n            y: event.y,\n        };\n    };\n    /**\n     * 触发 mask 的事件\n     * @param type\n     */\n    MultipleMaskBase.prototype.emitEvent = function (type) {\n        var eventName = \"\".concat(this.maskType, \":\").concat(type);\n        var view = this.context.view;\n        var event = this.context.event;\n        var target = {\n            type: this.shapeType,\n            name: this.maskType,\n            get: function (key) { return (target.hasOwnProperty(key) ? target[key] : undefined); },\n        };\n        view.emit(eventName, {\n            target: target,\n            maskShapes: this.maskShapes,\n            multiPoints: this.recordPoints,\n            x: event.x,\n            y: event.y,\n        });\n    };\n    /**\n     * 创建 mask\n     * @param index\n     */\n    MultipleMaskBase.prototype.createMask = function (index) {\n        var view = this.context.view;\n        var points = this.recordPoints[index];\n        var maskAttrs = this.getMaskAttrs(points);\n        var maskShape = view.foregroundGroup.addShape({\n            type: this.shapeType,\n            name: 'mask',\n            draggable: true,\n            attrs: __assign({ fill: '#C5D4EB', opacity: 0.3 }, maskAttrs),\n        });\n        this.maskShapes.push(maskShape);\n    };\n    /**\n     * 生成 mask 的路径\n     */\n    MultipleMaskBase.prototype.getMaskPath = function (points) {\n        return [];\n    };\n    /**\n     * 显示\n     */\n    MultipleMaskBase.prototype.show = function () {\n        if (this.maskShapes.length > 0) {\n            this.maskShapes.forEach(function (maskShape) { return maskShape.show(); });\n            this.emitEvent('show');\n        }\n    };\n    /**\n     * 开始\n     */\n    MultipleMaskBase.prototype.start = function (arg) {\n        this.recordPointStart();\n        this.starting = true;\n        // 开始时，保证移动结束\n        this.moving = false;\n        // 开始第 index 个 mask\n        var index = this.recordPoints.length - 1;\n        this.createMask(index);\n        // 开始时设置 capture: false，可以避免创建、resize 时触发事件\n        this.updateShapesCapture(false);\n        this.updateMask(arg === null || arg === void 0 ? void 0 : arg.maskStyle);\n        this.emitEvent('start');\n    };\n    /**\n     * 开始移动\n     */\n    MultipleMaskBase.prototype.moveStart = function () {\n        this.moving = true;\n        this.preMovePoint = this.getCurrentPoint();\n        this.updateShapesCapture(false);\n    };\n    /**\n     * 移动 mask\n     */\n    MultipleMaskBase.prototype.move = function () {\n        if (!this.moving || this.maskShapes.length === 0) {\n            return;\n        }\n        var currentPoint = this.getCurrentPoint();\n        var preMovePoint = this.preMovePoint;\n        var dx = currentPoint.x - preMovePoint.x;\n        var dy = currentPoint.y - preMovePoint.y;\n        // 只移动当前 event (x, y) 所在的某个 mask\n        var index = this.getCurMaskShapeIndex();\n        if (index > -1) {\n            this.recordPoints[index].forEach(function (point) {\n                point.x += dx;\n                point.y += dy;\n            });\n            this.updateMask();\n            this.emitEvent('change');\n            this.preMovePoint = currentPoint;\n        }\n    };\n    /**\n     * 更新\n     * @param maskStyle\n     */\n    MultipleMaskBase.prototype.updateMask = function (maskStyle) {\n        var _this = this;\n        this.recordPoints.forEach(function (points, index) {\n            var attrs = deepMix({}, _this.getMaskAttrs(points), maskStyle);\n            _this.maskShapes[index].attr(attrs);\n        });\n    };\n    /**\n     * 大小变化\n     */\n    MultipleMaskBase.prototype.resize = function () {\n        if (this.starting && this.maskShapes.length > 0) {\n            this.recordPointContinue();\n            this.updateMask();\n            this.emitEvent('change');\n        }\n    };\n    /**\n     * 结束移动\n     */\n    MultipleMaskBase.prototype.moveEnd = function () {\n        this.moving = false;\n        this.preMovePoint = null;\n        this.updateShapesCapture(true);\n    };\n    /**\n     * 结束\n     */\n    MultipleMaskBase.prototype.end = function () {\n        this.starting = false;\n        this.emitEvent('end');\n        this.updateShapesCapture(true);\n    };\n    /**\n     * 隐藏\n     */\n    MultipleMaskBase.prototype.hide = function () {\n        if (this.maskShapes.length > 0) {\n            this.maskShapes.forEach(function (maskShape) { return maskShape.hide(); });\n            this.emitEvent('hide');\n        }\n    };\n    /**\n     * 清除某个 mask\n     */\n    MultipleMaskBase.prototype.remove = function () {\n        var index = this.getCurMaskShapeIndex();\n        if (index > -1) {\n            // event (x, y) 在的某个 mask 区域内时，清除该 mask\n            this.recordPoints.splice(index, 1);\n            this.maskShapes[index].remove();\n            this.maskShapes.splice(index, 1);\n            this.preMovePoint = null;\n            this.updateShapesCapture(true);\n            this.emitEvent('change');\n        }\n    };\n    /**\n     * 清除全部 mask\n     */\n    MultipleMaskBase.prototype.clearAll = function () {\n        this.recordPointClear();\n        this.maskShapes.forEach(function (maskShape) { return maskShape.remove(); });\n        this.maskShapes = [];\n        this.preMovePoint = null;\n    };\n    /**\n     * 清除\n     */\n    MultipleMaskBase.prototype.clear = function () {\n        var index = this.getCurMaskShapeIndex();\n        if (index === -1) {\n            this.recordPointClear();\n            this.maskShapes.forEach(function (maskShape) { return maskShape.remove(); });\n            this.maskShapes = [];\n            this.emitEvent('clearAll');\n        }\n        else {\n            this.recordPoints.splice(index, 1);\n            this.maskShapes[index].remove();\n            this.maskShapes.splice(index, 1);\n            this.preMovePoint = null;\n            this.emitEvent('clearSingle');\n        }\n        this.preMovePoint = null;\n    };\n    /**\n     * 销毁\n     */\n    MultipleMaskBase.prototype.destroy = function () {\n        this.clear();\n        _super.prototype.destroy.call(this);\n    };\n    /**\n     * 获取 mask 节点记录\n     */\n    MultipleMaskBase.prototype.getRecordPoints = function () {\n        var _a;\n        return __spreadArray([], __read(((_a = this.recordPoints) !== null && _a !== void 0 ? _a : [])), false);\n    };\n    /**\n     * 创建 mask 节点记录\n     */\n    MultipleMaskBase.prototype.recordPointStart = function () {\n        var recordPoints = this.getRecordPoints();\n        var currentPoint = this.getCurrentPoint();\n        this.recordPoints = __spreadArray(__spreadArray([], __read(recordPoints), false), [[currentPoint]], false);\n    };\n    /**\n     * 持续记录 mask 节点\n     */\n    MultipleMaskBase.prototype.recordPointContinue = function () {\n        var recordPoints = this.getRecordPoints();\n        var currentPoint = this.getCurrentPoint();\n        var lastPoints = recordPoints.splice(-1, 1)[0] || [];\n        lastPoints.push(currentPoint);\n        this.recordPoints = __spreadArray(__spreadArray([], __read(recordPoints), false), [lastPoints], false);\n    };\n    /**\n     * 清除 mask 节点 记录\n     */\n    MultipleMaskBase.prototype.recordPointClear = function () {\n        this.recordPoints = [];\n    };\n    /**\n     * 设置 capture\n     * false: 避免创建、resize 时触发事件\n     * true: 正常触发其它事件\n     * @param isCapture\n     */\n    MultipleMaskBase.prototype.updateShapesCapture = function (isCapture) {\n        this.maskShapes.forEach(function (maskShape) { return maskShape.set('capture', isCapture); });\n    };\n    /**\n     *\n     * @returns 获取当前 event (x, y) 所在 maskShape 的 index\n     */\n    MultipleMaskBase.prototype.getCurMaskShapeIndex = function () {\n        var currentPoint = this.getCurrentPoint();\n        return this.maskShapes.findIndex(function (maskShape) {\n            var _a = maskShape.attrs, width = _a.width, height = _a.height, r = _a.r;\n            var isEmpty = width === 0 || height === 0 || r === 0;\n            return !isEmpty && maskShape.isHit(currentPoint.x, currentPoint.y);\n        });\n    };\n    return MultipleMaskBase;\n}(Action));\nexport default MultipleMaskBase;\n//# sourceMappingURL=base.js.map","import { __extends } from \"tslib\";\nimport MultipleMaskBase from './base';\nimport { getRegion, getMaskAttrs } from '../rect';\n/**\n * @ignore\n * 矩形的辅助框 Action\n */\nvar RectMultiMask = /** @class */ (function (_super) {\n    __extends(RectMultiMask, _super);\n    function RectMultiMask() {\n        var _this = _super !== null && _super.apply(this, arguments) || this;\n        _this.shapeType = 'rect';\n        return _this;\n    }\n    RectMultiMask.prototype.getRegion = function (points) {\n        return getRegion(points);\n    };\n    RectMultiMask.prototype.getMaskAttrs = function (points) {\n        var _a = this.getRegion(points), start = _a.start, end = _a.end;\n        return getMaskAttrs(start, end);\n    };\n    return RectMultiMask;\n}(MultipleMaskBase));\nexport default RectMultiMask;\n//# sourceMappingURL=rect.js.map","import { __extends } from \"tslib\";\nimport MultipleRectMask from './rect';\nimport { getRegion } from '../dim-rect';\n/**\n * @ignore\n */\nvar DimRectMultiMask = /** @class */ (function (_super) {\n    __extends(DimRectMultiMask, _super);\n    function DimRectMultiMask() {\n        var _this = _super !== null && _super.apply(this, arguments) || this;\n        _this.dim = 'x';\n        _this.inPlot = true;\n        return _this;\n    }\n    DimRectMultiMask.prototype.getRegion = function (points) {\n        var coord = this.context.view.getCoordinate();\n        return getRegion(points, this.dim, this.inPlot, coord);\n    };\n    return DimRectMultiMask;\n}(MultipleRectMask));\nexport default DimRectMultiMask;\n//# sourceMappingURL=dim-rect.js.map","import { __extends } from \"tslib\";\nimport MultipleMaskBase from './base';\nimport { getMaskAttrs } from '../circle';\n/**\n * @ignore\n * 圆形辅助框 Action\n */\nvar CircleMultiMask = /** @class */ (function (_super) {\n    __extends(CircleMultiMask, _super);\n    function CircleMultiMask() {\n        var _this = _super !== null && _super.apply(this, arguments) || this;\n        _this.shapeType = 'circle';\n        _this.getMaskAttrs = getMaskAttrs;\n        return _this;\n    }\n    return CircleMultiMask;\n}(MultipleMaskBase));\nexport default CircleMultiMask;\n//# sourceMappingURL=circle.js.map","import { __extends } from \"tslib\";\nimport MultipleMaskBase from './base';\nimport { getMaskAttrs, getMaskPath } from '../path';\n/**\n * @ignore\n * 多个点构成的 Path 辅助框 Action\n */\nvar PathMultiMask = /** @class */ (function (_super) {\n    __extends(PathMultiMask, _super);\n    function PathMultiMask() {\n        var _this = _super !== null && _super.apply(this, arguments) || this;\n        _this.getMaskPath = getMaskPath;\n        _this.getMaskAttrs = getMaskAttrs;\n        return _this;\n    }\n    PathMultiMask.prototype.addPoint = function () {\n        this.resize();\n    };\n    return PathMultiMask;\n}(MultipleMaskBase));\nexport default PathMultiMask;\n//# sourceMappingURL=path.js.map","import { __extends } from \"tslib\";\nimport MultiplePathMask from './path';\nimport { getMaskPath, getMaskAttrs } from '../smooth-path';\n/**\n * Smooth path mask\n * @ignore\n */\nvar SmoothPathMultiMask = /** @class */ (function (_super) {\n    __extends(SmoothPathMultiMask, _super);\n    function SmoothPathMultiMask() {\n        var _this = _super !== null && _super.apply(this, arguments) || this;\n        _this.getMaskPath = getMaskPath;\n        _this.getMaskAttrs = getMaskAttrs;\n        return _this;\n    }\n    return SmoothPathMultiMask;\n}(MultiplePathMask));\nexport default SmoothPathMultiMask;\n//# sourceMappingURL=smooth-path.js.map","import { __extends } from \"tslib\";\n/**\n * @fileoverview 设置画布的箭头，参看：https://www.w3school.com.cn/jsref/prop_style_cursor.asp\n * @author dxq613\n */\nimport Action from './base';\n/**\n * 鼠标形状的 Action\n * @ignore\n */\nvar CursorAction = /** @class */ (function (_super) {\n    __extends(CursorAction, _super);\n    function CursorAction() {\n        return _super !== null && _super.apply(this, arguments) || this;\n    }\n    CursorAction.prototype.setCursor = function (cursor) {\n        var view = this.context.view;\n        view.getCanvas().setCursor(cursor);\n    };\n    /**\n     * 默认光标（通常是一个箭头）\n     */\n    CursorAction.prototype.default = function () {\n        this.setCursor('default');\n    };\n    /** 光标呈现为指示链接的指针（一只手） */\n    CursorAction.prototype.pointer = function () {\n        this.setCursor('pointer');\n    };\n    /** 此光标指示某对象可被移动。 */\n    CursorAction.prototype.move = function () {\n        this.setCursor('move');\n    };\n    /** 光标呈现为十字线。 */\n    CursorAction.prototype.crosshair = function () {\n        this.setCursor('crosshair');\n    };\n    /** 此光标指示程序正忙（通常是一只表或沙漏）。 */\n    CursorAction.prototype.wait = function () {\n        this.setCursor('wait');\n    };\n    /** 此光标指示可用的帮助（通常是一个问号或一个气球）。 */\n    CursorAction.prototype.help = function () {\n        this.setCursor('help');\n    };\n    /** 此光标指示文本。 */\n    CursorAction.prototype.text = function () {\n        this.setCursor('text');\n    };\n    /**\n     * 此光标指示矩形框的边缘可被向右（东）移动。\n     */\n    CursorAction.prototype.eResize = function () {\n        this.setCursor('e-resize');\n    };\n    /**\n     * 此光标指示矩形框的边缘可被向左（西）移动。\n     */\n    CursorAction.prototype.wResize = function () {\n        this.setCursor('w-resize');\n    };\n    /**\n     * 此光标指示矩形框的边缘可被向上（北）移动。\n     */\n    CursorAction.prototype.nResize = function () {\n        this.setCursor('n-resize');\n    };\n    /**\n     * 此光标指示矩形框的边缘可被向下（南）移动。\n     */\n    CursorAction.prototype.sResize = function () {\n        this.setCursor('s-resize');\n    };\n    /**\n     * 光标指示可移动的方向 右上方（东北）\n     */\n    CursorAction.prototype.neResize = function () {\n        this.setCursor('ne-resize');\n    };\n    /**\n     * 光标指示可移动的方向 左上方（西北）\n     */\n    CursorAction.prototype.nwResize = function () {\n        this.setCursor('nw-resize');\n    };\n    /**\n     * 光标指示可移动的方向右下方（东南）\n     */\n    CursorAction.prototype.seResize = function () {\n        this.setCursor('se-resize');\n    };\n    /**\n     * 光标指示可移动的方向左下方（西南）\n     */\n    CursorAction.prototype.swResize = function () {\n        this.setCursor('sw-resize');\n    };\n    /**\n     * 光标指示可以在上下方向移动\n     */\n    CursorAction.prototype.nsResize = function () {\n        this.setCursor('ns-resize');\n    };\n    /**\n     * 光标指示可以在左右方向移动\n     */\n    CursorAction.prototype.ewResize = function () {\n        this.setCursor('ew-resize');\n    };\n    /**\n     * 光标显示可以被放大\n     */\n    CursorAction.prototype.zoomIn = function () {\n        this.setCursor('zoom-in');\n    };\n    /**\n     * 光标显示可以缩小尺寸\n     */\n    CursorAction.prototype.zoomOut = function () {\n        this.setCursor('zoom-out');\n    };\n    return CursorAction;\n}(Action));\nexport default CursorAction;\n//# sourceMappingURL=cursor.js.map","import { __extends, __read } from \"tslib\";\nimport { each } from '@antv/util';\nimport Action from '../base';\nimport { getDelegationObject, getScaleByField, isList, isSlider } from '../util';\n/**\n * 数据过滤。\n * @ignore\n */\nvar DataFilter = /** @class */ (function (_super) {\n    __extends(DataFilter, _super);\n    function DataFilter() {\n        return _super !== null && _super.apply(this, arguments) || this;\n    }\n    DataFilter.prototype.filterView = function (view, field, filter) {\n        var _this = this;\n        // 只有存在这个 scale 时才生效\n        if (view.getScaleByField(field)) {\n            view.filter(field, filter);\n        }\n        if (view.views && view.views.length) {\n            each(view.views, function (subView) {\n                _this.filterView(subView, field, filter);\n            });\n        }\n    };\n    /**\n     * 过滤数据\n     */\n    DataFilter.prototype.filter = function () {\n        var delegateObject = getDelegationObject(this.context);\n        if (delegateObject) {\n            var view = this.context.view;\n            var component = delegateObject.component;\n            var field = component.get('field');\n            // 列表类的组件能够触发\n            if (isList(delegateObject)) {\n                if (field) {\n                    var unCheckedItems = component.getItemsByState('unchecked');\n                    var scale_1 = getScaleByField(view, field);\n                    var names_1 = unCheckedItems.map(function (item) { return item.name; });\n                    if (names_1.length) {\n                        this.filterView(view, field, function (value) {\n                            var text = scale_1.getText(value);\n                            return !names_1.includes(text);\n                        });\n                    }\n                    else {\n                        this.filterView(view, field, null);\n                    }\n                    view.render(true);\n                }\n            }\n            else if (isSlider(delegateObject)) {\n                var range = component.getValue();\n                var _a = __read(range, 2), min_1 = _a[0], max_1 = _a[1];\n                this.filterView(view, field, function (value) {\n                    return value >= min_1 && value <= max_1;\n                });\n                view.render(true);\n            }\n        }\n    };\n    return DataFilter;\n}(Action));\nexport default DataFilter;\n//# sourceMappingURL=filter.js.map","import { __extends } from \"tslib\";\nimport { each } from '@antv/util';\nimport RangeFilter from './range-filter';\nimport { getSilbings } from '../util';\n/**\n * 数据范围过滤，但不在当前的 view 上生效，而在当前的 view 同一层级的其他 views 上生效，用于实现联动过滤。\n * @ignore\n */\nvar SiblingFilter = /** @class */ (function (_super) {\n    __extends(SiblingFilter, _super);\n    function SiblingFilter() {\n        return _super !== null && _super.apply(this, arguments) || this;\n    }\n    /**\n     * 对 view 进行过滤\n     * @param view\n     * @param field\n     * @param filter\n     */\n    SiblingFilter.prototype.filterView = function (view, field, filter) {\n        var siblings = getSilbings(view);\n        each(siblings, function (sibling) {\n            sibling.filter(field, filter);\n        });\n    };\n    /**\n     * 重新渲染\n     * @param view\n     */\n    SiblingFilter.prototype.reRender = function (view) {\n        var siblings = getSilbings(view);\n        each(siblings, function (sibling) {\n            sibling.render(true);\n        });\n    };\n    return SiblingFilter;\n}(RangeFilter));\nexport default SiblingFilter;\n//# sourceMappingURL=sibling-filter.js.map","import { __extends, __read } from \"tslib\";\nimport { each } from '@antv/util';\nimport Action from '../base';\nimport { getDelegationObject, getElements, getElementValue, getScaleByField, isList, isSlider, isMask, getMaskedElements, } from '../util';\n/**\n * 元素过滤的 Action，控制元素的显示隐藏\n * @ignore\n */\nvar ElementFilter = /** @class */ (function (_super) {\n    __extends(ElementFilter, _super);\n    function ElementFilter() {\n        return _super !== null && _super.apply(this, arguments) || this;\n    }\n    /**\n     * 过滤\n     */\n    ElementFilter.prototype.filter = function () {\n        var delegateObject = getDelegationObject(this.context);\n        var view = this.context.view;\n        var elements = getElements(view);\n        if (isMask(this.context)) {\n            var maskElements_1 = getMaskedElements(this.context, 10);\n            if (maskElements_1) {\n                each(elements, function (el) {\n                    if (maskElements_1.includes(el)) {\n                        el.show();\n                    }\n                    else {\n                        el.hide();\n                    }\n                });\n            }\n        }\n        else if (delegateObject) {\n            var component = delegateObject.component;\n            var field_1 = component.get('field');\n            // 列表类的组件能够触发\n            if (isList(delegateObject)) {\n                if (field_1) {\n                    var unCheckedItems = component.getItemsByState('unchecked');\n                    var scale_1 = getScaleByField(view, field_1);\n                    var names_1 = unCheckedItems.map(function (item) { return item.name; });\n                    // 直接控制显示、隐藏\n                    each(elements, function (el) {\n                        var value = getElementValue(el, field_1);\n                        var text = scale_1.getText(value);\n                        if (names_1.indexOf(text) >= 0) {\n                            el.hide();\n                        }\n                        else {\n                            el.show();\n                        }\n                    });\n                }\n            }\n            else if (isSlider(delegateObject)) {\n                var range = component.getValue();\n                var _a = __read(range, 2), min_1 = _a[0], max_1 = _a[1];\n                each(elements, function (el) {\n                    var value = getElementValue(el, field_1);\n                    if (value >= min_1 && value <= max_1) {\n                        el.show();\n                    }\n                    else {\n                        el.hide();\n                    }\n                });\n            }\n        }\n    };\n    /**\n     * 清除过滤\n     */\n    ElementFilter.prototype.clear = function () {\n        var elements = getElements(this.context.view);\n        each(elements, function (el) {\n            el.show();\n        });\n    };\n    /**\n     * 恢复发生的过滤，保持同 data-filter 命名的一致\n     */\n    ElementFilter.prototype.reset = function () {\n        this.clear();\n    };\n    return ElementFilter;\n}(Action));\nexport default ElementFilter;\n//# sourceMappingURL=filter.js.map","import { __extends } from \"tslib\";\nimport { each } from '@antv/util';\nimport Action from '../base';\nimport { getElements, getMaskedElements, getSiblingMaskElements, getSilbings, isInRecords, isMask } from '../util';\n/**\n * Sibling filter\n * @ignore\n */\nvar SiblingFilter = /** @class */ (function (_super) {\n    __extends(SiblingFilter, _super);\n    function SiblingFilter() {\n        var _this = _super !== null && _super.apply(this, arguments) || this;\n        _this.byRecord = false;\n        return _this;\n    }\n    /**\n     * 过滤隐藏图形\n     */\n    SiblingFilter.prototype.filter = function () {\n        // 仅考虑 mask 导致的过滤\n        if (isMask(this.context)) {\n            if (this.byRecord) {\n                this.filterByRecord();\n            }\n            else {\n                this.filterByBBox();\n            }\n        }\n    };\n    // 根据框选的记录来做过滤\n    SiblingFilter.prototype.filterByRecord = function () {\n        var view = this.context.view;\n        var maskElements = getMaskedElements(this.context, 10);\n        if (!maskElements) {\n            return;\n        }\n        var xFiled = view.getXScale().field;\n        var yField = view.getYScales()[0].field;\n        var records = maskElements.map(function (el) {\n            return el.getModel().data;\n        });\n        var siblings = getSilbings(view);\n        each(siblings, function (sibling) {\n            var elements = getElements(sibling);\n            each(elements, function (el) {\n                var record = el.getModel().data;\n                // records.includes(record) 不生效，应该是数据的引用被改了\n                if (isInRecords(records, record, xFiled, yField)) {\n                    el.show();\n                }\n                else {\n                    el.hide();\n                }\n            });\n        });\n    };\n    // 根据被框选的包围盒做过滤\n    SiblingFilter.prototype.filterByBBox = function () {\n        var _this = this;\n        var view = this.context.view;\n        var siblings = getSilbings(view);\n        each(siblings, function (sibling) {\n            var maskElements = getSiblingMaskElements(_this.context, sibling, 10);\n            var elements = getElements(sibling);\n            if (maskElements) {\n                // mask 过小时返回为 null，不能是空数组，否则同未框选到混淆\n                each(elements, function (el) {\n                    if (maskElements.includes(el)) {\n                        el.show();\n                    }\n                    else {\n                        el.hide();\n                    }\n                });\n            }\n        });\n    };\n    /**\n     * 清理所有隐藏的图形\n     */\n    SiblingFilter.prototype.reset = function () {\n        var siblings = getSilbings(this.context.view);\n        each(siblings, function (sibling) {\n            var elements = getElements(sibling);\n            each(elements, function (el) {\n                el.show();\n            });\n        });\n    };\n    return SiblingFilter;\n}(Action));\nexport default SiblingFilter;\n//# sourceMappingURL=sibling-filter.js.map","import { __assign, __extends } from \"tslib\";\nimport { ext } from '@antv/matrix-util';\nimport { deepMix } from '@antv/util';\nimport { parsePadding } from '../../../util/padding';\nimport Action from '../base';\nvar PADDING_RIGHT = 10;\nvar PADDING_TOP = 5;\n/**\n * Button action\n * @ignore\n */\nvar ButtonAction = /** @class */ (function (_super) {\n    __extends(ButtonAction, _super);\n    function ButtonAction() {\n        var _this = _super !== null && _super.apply(this, arguments) || this;\n        _this.buttonGroup = null;\n        _this.buttonCfg = {\n            name: 'button',\n            text: 'button',\n            textStyle: {\n                x: 0,\n                y: 0,\n                fontSize: 12,\n                fill: '#333333',\n                cursor: 'pointer',\n            },\n            padding: [8, 10],\n            style: {\n                fill: '#f7f7f7',\n                stroke: '#cccccc',\n                cursor: 'pointer',\n            },\n            activeStyle: {\n                fill: '#e6e6e6',\n            },\n        };\n        return _this;\n    }\n    // mix 默认的配置和用户配置\n    ButtonAction.prototype.getButtonCfg = function () {\n        return deepMix(this.buttonCfg, this.cfg);\n    };\n    // 绘制 Button 和 文本\n    ButtonAction.prototype.drawButton = function () {\n        var config = this.getButtonCfg();\n        var group = this.context.view.foregroundGroup.addGroup({\n            name: config.name,\n        });\n        // 添加文本\n        var textShape = group.addShape({\n            type: 'text',\n            name: 'button-text',\n            attrs: __assign({ text: config.text }, config.textStyle),\n        });\n        var textBBox = textShape.getBBox();\n        var padding = parsePadding(config.padding);\n        // 添加背景按钮\n        var buttonShape = group.addShape({\n            type: 'rect',\n            name: 'button-rect',\n            attrs: __assign({ x: textBBox.x - padding[3], y: textBBox.y - padding[0], width: textBBox.width + padding[1] + padding[3], height: textBBox.height + padding[0] + padding[2] }, config.style),\n        });\n        buttonShape.toBack(); // 在后面\n        // active 效果内置\n        group.on('mouseenter', function () {\n            buttonShape.attr(config.activeStyle);\n        });\n        group.on('mouseleave', function () {\n            buttonShape.attr(config.style);\n        });\n        this.buttonGroup = group;\n    };\n    // 重置位置\n    ButtonAction.prototype.resetPosition = function () {\n        var view = this.context.view;\n        var coord = view.getCoordinate();\n        var point = coord.convert({ x: 1, y: 1 }); // 后面直接改成左上角\n        var buttonGroup = this.buttonGroup;\n        var bbox = buttonGroup.getBBox();\n        var matrix = ext.transform(null, [\n            ['t', point.x - bbox.width - PADDING_RIGHT, point.y + bbox.height + PADDING_TOP],\n        ]);\n        buttonGroup.setMatrix(matrix);\n    };\n    /**\n     * 显示\n     */\n    ButtonAction.prototype.show = function () {\n        if (!this.buttonGroup) {\n            this.drawButton();\n        }\n        this.resetPosition();\n        this.buttonGroup.show();\n    };\n    /**\n     * 隐藏\n     */\n    ButtonAction.prototype.hide = function () {\n        if (this.buttonGroup) {\n            this.buttonGroup.hide();\n        }\n    };\n    /**\n     * 销毁\n     */\n    ButtonAction.prototype.destroy = function () {\n        var buttonGroup = this.buttonGroup;\n        if (buttonGroup) {\n            buttonGroup.remove();\n        }\n        _super.prototype.destroy.call(this);\n    };\n    return ButtonAction;\n}(Action));\nexport default ButtonAction;\n//# sourceMappingURL=button.js.map","import { __extends } from \"tslib\";\nimport Action from '../base';\nimport { distance } from '../util';\nvar DISTANCE = 4; // 移动的最小距离\n/**\n * @ignore\n * View 支持 Drag 的 Action\n */\nvar Drag = /** @class */ (function (_super) {\n    __extends(Drag, _super);\n    function Drag() {\n        var _this = _super !== null && _super.apply(this, arguments) || this;\n        // Action 开始，不等同于 拖拽开始，需要判定移动的范围\n        _this.starting = false;\n        // 拖拽开始\n        _this.dragStart = false;\n        return _this;\n    }\n    /**\n     * 开始\n     */\n    Drag.prototype.start = function () {\n        this.starting = true;\n        this.startPoint = this.context.getCurrentPoint();\n    };\n    /**\n     * 拖拽\n     */\n    Drag.prototype.drag = function () {\n        if (!this.startPoint) {\n            return;\n        }\n        var current = this.context.getCurrentPoint();\n        var view = this.context.view;\n        var event = this.context.event;\n        if (!this.dragStart) {\n            if (distance(current, this.startPoint) > DISTANCE) {\n                view.emit('dragstart', {\n                    target: event.target,\n                    x: event.x,\n                    y: event.y,\n                });\n                this.dragStart = true;\n            }\n        }\n        else {\n            view.emit('drag', {\n                target: event.target,\n                x: event.x,\n                y: event.y,\n            });\n        }\n    };\n    /**\n     * 结束\n     */\n    Drag.prototype.end = function () {\n        if (this.dragStart) {\n            var view = this.context.view;\n            var event_1 = this.context.event;\n            view.emit('dragend', {\n                target: event_1.target,\n                x: event_1.x,\n                y: event_1.y,\n            });\n        }\n        this.starting = false;\n        this.dragStart = false;\n    };\n    return Drag;\n}(Action));\nexport default Drag;\n//# sourceMappingURL=drag.js.map","import { __extends } from \"tslib\";\nimport { ext } from '@antv/matrix-util';\nimport { Action } from '..';\nimport { distance } from '../util';\nvar MIN_DISTANCE = 5;\n/**\n * @ignore\n * View 移动的 Action\n */\nvar Move = /** @class */ (function (_super) {\n    __extends(Move, _super);\n    function Move() {\n        var _this = _super !== null && _super.apply(this, arguments) || this;\n        _this.starting = false;\n        _this.isMoving = false;\n        // private cacheRange = null;\n        _this.startPoint = null;\n        _this.startMatrix = null;\n        return _this;\n    }\n    /**\n     * 开始移动\n     */\n    Move.prototype.start = function () {\n        this.starting = true;\n        this.startPoint = this.context.getCurrentPoint();\n        // 缓存开始时的矩阵，防止反复拖拽\n        this.startMatrix = this.context.view.middleGroup.getMatrix();\n    };\n    /**\n     * 移动\n     */\n    Move.prototype.move = function () {\n        if (!this.starting) {\n            return;\n        }\n        var startPoint = this.startPoint;\n        var currentPoint = this.context.getCurrentPoint();\n        var d = distance(startPoint, currentPoint);\n        if (d > MIN_DISTANCE && !this.isMoving) {\n            this.isMoving = true;\n        }\n        if (this.isMoving) {\n            var view = this.context.view;\n            var matrix = ext.transform(this.startMatrix, [\n                ['t', currentPoint.x - startPoint.x, currentPoint.y - startPoint.y],\n            ]);\n            view.backgroundGroup.setMatrix(matrix);\n            view.foregroundGroup.setMatrix(matrix);\n            view.middleGroup.setMatrix(matrix);\n        }\n    };\n    /**\n     * 结束移动\n     */\n    Move.prototype.end = function () {\n        if (this.isMoving) {\n            this.isMoving = false;\n        }\n        this.startMatrix = null;\n        this.starting = false;\n        this.startPoint = null;\n    };\n    /**\n     * 回滚\n     */\n    Move.prototype.reset = function () {\n        this.starting = false;\n        this.startPoint = null;\n        this.isMoving = false;\n        var view = this.context.view;\n        view.backgroundGroup.resetMatrix();\n        view.foregroundGroup.resetMatrix();\n        view.middleGroup.resetMatrix();\n        this.isMoving = false;\n    };\n    return Move;\n}(Action));\nexport default Move;\n//# sourceMappingURL=move.js.map","import { __extends } from \"tslib\";\nimport { Action } from '..';\nvar DIM_X = 'x';\nvar DIM_Y = 'y';\n/**\n * Scale translate\n * @ignore\n */\nvar ScaleTranslate = /** @class */ (function (_super) {\n    __extends(ScaleTranslate, _super);\n    function ScaleTranslate() {\n        var _this = _super !== null && _super.apply(this, arguments) || this;\n        _this.dims = [DIM_X, DIM_Y];\n        _this.cfgFields = ['dims'];\n        _this.cacheScaleDefs = {};\n        return _this;\n    }\n    // 是否支持对应字段的平移\n    ScaleTranslate.prototype.hasDim = function (dim) {\n        return this.dims.includes(dim);\n    };\n    ScaleTranslate.prototype.getScale = function (dim) {\n        var view = this.context.view;\n        if (dim === 'x') {\n            return view.getXScale();\n        }\n        else {\n            return view.getYScales()[0];\n        }\n    };\n    ScaleTranslate.prototype.resetDim = function (dim) {\n        var view = this.context.view;\n        if (this.hasDim(dim) && this.cacheScaleDefs[dim]) {\n            var scale = this.getScale(dim);\n            view.scale(scale.field, this.cacheScaleDefs[dim]);\n            this.cacheScaleDefs[dim] = null;\n        }\n    };\n    /**\n     * 回滚\n     */\n    ScaleTranslate.prototype.reset = function () {\n        this.resetDim(DIM_X);\n        this.resetDim(DIM_Y);\n        var view = this.context.view;\n        view.render(true);\n    };\n    return ScaleTranslate;\n}(Action));\nexport default ScaleTranslate;\n//# sourceMappingURL=scale-transform.js.map","import { __extends } from \"tslib\";\nimport { each } from '@antv/util';\nimport TransformAction from './scale-transform';\n/**\n * 拖拽 Scale 的 Action\n * @ignore\n */\nvar ScaleTranslate = /** @class */ (function (_super) {\n    __extends(ScaleTranslate, _super);\n    function ScaleTranslate() {\n        var _this = _super !== null && _super.apply(this, arguments) || this;\n        _this.startPoint = null;\n        _this.starting = false;\n        _this.startCache = {};\n        return _this;\n    }\n    /**\n     * 开始\n     */\n    ScaleTranslate.prototype.start = function () {\n        var _this = this;\n        this.startPoint = this.context.getCurrentPoint();\n        this.starting = true;\n        var dims = this.dims;\n        each(dims, function (dim) {\n            var scale = _this.getScale(dim);\n            var min = scale.min, max = scale.max, values = scale.values;\n            _this.startCache[dim] = { min: min, max: max, values: values };\n        });\n    };\n    // 平移分类的度量\n    // private translateCategory(dim, scale, normalPoint) {\n    // }\n    /**\n     * 结束\n     */\n    ScaleTranslate.prototype.end = function () {\n        this.startPoint = null;\n        this.starting = false;\n        this.startCache = {};\n    };\n    /**\n     * 平移\n     */\n    ScaleTranslate.prototype.translate = function () {\n        var _this = this;\n        if (!this.starting) {\n            return;\n        }\n        var startPoint = this.startPoint;\n        var coord = this.context.view.getCoordinate();\n        var currentPoint = this.context.getCurrentPoint();\n        var normalStart = coord.invert(startPoint);\n        var noramlCurrent = coord.invert(currentPoint);\n        var dx = noramlCurrent.x - normalStart.x;\n        var dy = noramlCurrent.y - normalStart.y;\n        var view = this.context.view;\n        var dims = this.dims;\n        each(dims, function (dim) {\n            _this.translateDim(dim, { x: dx * -1, y: dy * -1 });\n        });\n        view.render(true);\n    };\n    // 平移度量\n    ScaleTranslate.prototype.translateDim = function (dim, normalPoint) {\n        if (this.hasDim(dim)) {\n            var scale = this.getScale(dim);\n            if (scale.isLinear) {\n                this.translateLinear(dim, scale, normalPoint);\n            }\n            //  else { // 暂时仅处理连续字段\n            // this.translateCategory(dim, scale, normalPoint);\n            // }\n        }\n    };\n    // linear 度量平移\n    ScaleTranslate.prototype.translateLinear = function (dim, scale, normalPoint) {\n        var view = this.context.view;\n        var _a = this.startCache[dim], min = _a.min, max = _a.max;\n        var range = max - min;\n        var d = normalPoint[dim] * range;\n        // 只有第一次缓存，否则无法回滚\n        if (!this.cacheScaleDefs[dim]) {\n            this.cacheScaleDefs[dim] = {\n                // @ts-ignore\n                nice: scale.nice,\n                min: min,\n                max: max,\n            };\n        }\n        view.scale(scale.field, {\n            // @ts-ignore\n            nice: false,\n            min: min + d,\n            max: max + d,\n        });\n    };\n    // 平移分类的度量\n    // private translateCategory(dim, scale, normalPoint) {\n    // }\n    /**\n     * 回滚\n     */\n    ScaleTranslate.prototype.reset = function () {\n        _super.prototype.reset.call(this);\n        this.startPoint = null;\n        this.starting = false;\n    };\n    return ScaleTranslate;\n}(TransformAction));\nexport default ScaleTranslate;\n//# sourceMappingURL=scale-translate.js.map","import { __extends } from \"tslib\";\nimport { each } from '@antv/util';\nimport TransformAction from './scale-transform';\n/**\n * 缩放 Scale 的 Action\n * @ignore\n */\nvar ScaleTranslate = /** @class */ (function (_super) {\n    __extends(ScaleTranslate, _super);\n    function ScaleTranslate() {\n        var _this = _super !== null && _super.apply(this, arguments) || this;\n        _this.zoomRatio = 0.05;\n        return _this;\n        // 平移分类的度量\n        // private translateCategory(dim, scale, normalPoint) {\n        // }\n    }\n    /**\n     * 缩小\n     */\n    ScaleTranslate.prototype.zoomIn = function () {\n        this.zoom(this.zoomRatio);\n    };\n    ScaleTranslate.prototype.zoom = function (scale) {\n        var _this = this;\n        var dims = this.dims;\n        each(dims, function (dim) {\n            _this.zoomDim(dim, scale);\n        });\n        this.context.view.render(true);\n    };\n    /**\n     * 放大\n     */\n    ScaleTranslate.prototype.zoomOut = function () {\n        this.zoom(-1 * this.zoomRatio);\n    };\n    // 缩放度量\n    ScaleTranslate.prototype.zoomDim = function (dim, dRatio) {\n        if (this.hasDim(dim)) {\n            var scale = this.getScale(dim);\n            if (scale.isLinear) {\n                this.zoomLinear(dim, scale, dRatio);\n            }\n            //  else { // 暂时仅处理连续字段\n            // this.zoomCategory(dim, scale, normalPoint);\n            // }\n        }\n    };\n    // linear 度量平移\n    ScaleTranslate.prototype.zoomLinear = function (dim, scale, dRatio) {\n        var view = this.context.view;\n        // 只有第一次缓存，否则无法回滚\n        if (!this.cacheScaleDefs[dim]) {\n            this.cacheScaleDefs[dim] = {\n                // @ts-ignore\n                nice: scale.nice,\n                min: scale.min,\n                max: scale.max,\n            };\n        }\n        // 使用使用原始度量作为缩放标准\n        var scaleDef = this.cacheScaleDefs[dim];\n        var range = scaleDef.max - scaleDef.min;\n        var min = scale.min, max = scale.max;\n        var d = dRatio * range;\n        var toMin = min - d;\n        var toMax = max + d;\n        var curRange = toMax - toMin;\n        var scaled = curRange / range;\n        if (toMax > toMin && scaled < 100 && scaled > 0.01) {\n            view.scale(scale.field, {\n                // @ts-ignore\n                nice: false,\n                min: min - d,\n                max: max + d,\n            });\n        }\n    };\n    return ScaleTranslate;\n}(TransformAction));\nexport default ScaleTranslate;\n//# sourceMappingURL=scale-zoom.js.map","import { __extends } from \"tslib\";\nimport { clamp, size, valuesOfKey } from '@antv/util';\nimport { Action } from '..';\nfunction isWheelDown(event) {\n    var wheelEvent = event.gEvent.originalEvent;\n    return wheelEvent.deltaY > 0;\n}\nvar DEFAULT_WHEELDELTA = 1;\nvar MousewheelScroll = /** @class */ (function (_super) {\n    __extends(MousewheelScroll, _super);\n    function MousewheelScroll() {\n        return _super !== null && _super.apply(this, arguments) || this;\n    }\n    MousewheelScroll.prototype.scroll = function (arg) {\n        var _a = this.context, view = _a.view, event = _a.event;\n        if (!view.getOptions().scrollbar) {\n            return;\n        }\n        var wheelDelta = (arg === null || arg === void 0 ? void 0 : arg.wheelDelta) || DEFAULT_WHEELDELTA;\n        var scrollbarController = view.getController('scrollbar');\n        var xScale = view.getXScale();\n        var data = view.getOptions().data;\n        var dataSize = size(valuesOfKey(data, xScale.field));\n        var step = size(xScale.values);\n        var currentRatio = scrollbarController.getValue();\n        var currentStart = Math.floor((dataSize - step) * currentRatio);\n        var nextStart = currentStart + (isWheelDown(event) ? wheelDelta : -wheelDelta);\n        var correction = wheelDelta / (dataSize - step) / 10000;\n        var nextRatio = clamp(nextStart / (dataSize - step) + correction, 0, 1);\n        scrollbarController.setValue(nextRatio);\n    };\n    return MousewheelScroll;\n}(Action));\nexport default MousewheelScroll;\n//# sourceMappingURL=mousewheel-scroll.js.map","import { __assign, __extends } from \"tslib\";\nimport { TOOLTIP_CSS_CONST } from '@antv/component';\nimport { deepMix } from '@antv/util';\nimport { HtmlTooltip } from '../../../../dependents';\nimport Action from '../../base';\nimport { getDelegationObject } from '../../util';\nvar AXIS_DESCRIPTION_TOOLTIP = 'aixs-description-tooltip';\nvar AxisDescription = /** @class */ (function (_super) {\n    __extends(AxisDescription, _super);\n    function AxisDescription() {\n        return _super !== null && _super.apply(this, arguments) || this;\n    }\n    AxisDescription.prototype.show = function () {\n        var context = this.context;\n        var axis = getDelegationObject(context).axis;\n        var _a = axis.cfg.title, description = _a.description, text = _a.text, descriptionTooltipStyle = _a.descriptionTooltipStyle;\n        var _b = context.event, x = _b.x, y = _b.y;\n        if (!this.tooltip) {\n            this.renderTooltip();\n        }\n        this.tooltip.update({\n            title: text || '',\n            customContent: function () {\n                return \"\\n          <div class=\\\"\".concat(TOOLTIP_CSS_CONST.CONTAINER_CLASS, \"\\\" style={\").concat(descriptionTooltipStyle, \"}>\\n            <div class=\\\"\").concat(TOOLTIP_CSS_CONST.TITLE_CLASS, \"\\\">\\n              \\u5B57\\u6BB5\\u8BF4\\u660E\\uFF1A\").concat(description, \"\\n            </div>\\n          </div>\\n        \");\n            },\n            x: x,\n            y: y,\n        });\n        this.tooltip.show();\n    };\n    AxisDescription.prototype.destroy = function () {\n        _super.prototype.destroy.call(this);\n        this.tooltip && this.tooltip.destroy();\n    };\n    AxisDescription.prototype.hide = function () {\n        this.tooltip && this.tooltip.hide();\n    };\n    AxisDescription.prototype.renderTooltip = function () {\n        var _a;\n        var view = this.context.view;\n        var canvas = view.canvas;\n        var region = {\n            start: { x: 0, y: 0 },\n            end: { x: canvas.get('width'), y: canvas.get('height') },\n        };\n        var tooltip = new HtmlTooltip({\n            parent: canvas.get('el').parentNode,\n            region: region,\n            visible: false,\n            containerId: AXIS_DESCRIPTION_TOOLTIP,\n            domStyles: __assign({}, deepMix({}, (_a = {},\n                // 超长的时候，tooltip tip 最大宽度为 50%，然后可以换行\n                _a[TOOLTIP_CSS_CONST.CONTAINER_CLASS] = {\n                    'max-width': '50%',\n                    padding: '10px',\n                    'line-height': '15px',\n                    'font-size': '12px',\n                    color: 'rgba(0, 0, 0, .65)',\n                },\n                _a[TOOLTIP_CSS_CONST.TITLE_CLASS] = {\n                    'word-break': 'break-all',\n                    'margin-bottom': '3px',\n                },\n                _a))),\n        });\n        tooltip.init();\n        tooltip.setCapture(false);\n        this.tooltip = tooltip;\n    };\n    return AxisDescription;\n}(Action));\nexport default AxisDescription;\n//# sourceMappingURL=axis-description.js.map","// 注册黑暗主题\nimport { registerTheme } from './core';\nimport { antvDark } from './theme/style-sheet/dark';\nimport { createThemeByStyleSheet } from './theme/util/create-by-style-sheet';\nregisterTheme('dark', createThemeByStyleSheet(antvDark));\n// 注册 G 渲染引擎\nimport * as CanvasEngine from '@antv/g-canvas';\nimport * as SVGEngine from '@antv/g-svg';\nimport { registerEngine } from './core';\nregisterEngine('canvas', CanvasEngine);\nregisterEngine('svg', SVGEngine);\n// 注册 G2 内置的 geometry\nimport { registerGeometry } from './core';\nimport Area from './geometry/area';\nimport Edge from './geometry/edge';\nimport Heatmap from './geometry/heatmap';\nimport Interval from './geometry/interval';\nimport Line from './geometry/line';\nimport Path from './geometry/path';\nimport Point from './geometry/point';\nimport Polygon from './geometry/polygon';\nimport Schema from './geometry/schema';\nimport Violin from './geometry/violin';\nregisterGeometry('Polygon', Polygon);\nregisterGeometry('Interval', Interval);\nregisterGeometry('Schema', Schema);\nregisterGeometry('Path', Path);\nregisterGeometry('Point', Point);\nregisterGeometry('Line', Line);\nregisterGeometry('Area', Area);\nregisterGeometry('Edge', Edge);\nregisterGeometry('Heatmap', Heatmap);\nregisterGeometry('Violin', Violin);\n// 引入所有内置的 shapes\nimport './geometry/shape/area/line';\nimport './geometry/shape/area/smooth';\nimport './geometry/shape/area/smooth-line';\nimport './geometry/shape/edge/arc';\nimport './geometry/shape/edge/smooth';\nimport './geometry/shape/edge/vhv';\nimport './geometry/shape/interval/funnel';\nimport './geometry/shape/interval/hollow-rect';\nimport './geometry/shape/interval/line';\nimport './geometry/shape/interval/pyramid';\nimport './geometry/shape/interval/tick';\nimport './geometry/shape/line/step';\nimport './geometry/shape/point/hollow';\nimport './geometry/shape/point/image';\nimport './geometry/shape/point/solid';\nimport './geometry/shape/schema/box';\nimport './geometry/shape/schema/candle';\nimport './geometry/shape/polygon/square';\nimport './geometry/shape/violin/smooth';\nimport './geometry/shape/violin/hollow';\n// 注册 Geometry 内置的 label\nimport { registerGeometryLabel } from './core';\nimport GeometryLabel from './geometry/label/base';\nimport IntervalLabel from './geometry/label/interval';\nimport PieLabel from './geometry/label/pie';\nimport PolarLabel from './geometry/label/polar';\nregisterGeometryLabel('base', GeometryLabel);\nregisterGeometryLabel('interval', IntervalLabel);\nregisterGeometryLabel('pie', PieLabel);\nregisterGeometryLabel('polar', PolarLabel);\n// 注册 Geometry label 内置的布局函数\nimport { registerGeometryLabelLayout } from './core';\nimport { distribute } from './geometry/label/layout/pie/distribute';\nimport { pieOuterLabelLayout } from './geometry/label/layout/pie/outer';\nimport { pieSpiderLabelLayout } from './geometry/label/layout/pie/spider';\nimport { limitInCanvas } from './geometry/label/layout/limit-in-canvas';\nimport { limitInShape } from './geometry/label/layout/limit-in-shape';\nimport { fixedOverlap, overlap } from './geometry/label/layout/overlap';\nimport { hideOverlap } from './geometry/label/layout/hide-overlap';\nimport { adjustColor } from './geometry/label/layout/adjust-color';\nimport { intervalAdjustPosition } from './geometry/label/layout/interval/adjust-position';\nimport { intervalHideOverlap } from './geometry/label/layout/interval/hide-overlap';\nimport { pointAdjustPosition } from './geometry/label/layout/point/adjust-position';\nimport { pathAdjustPosition } from './geometry/label/layout/path/adjust-position';\nimport { limitInPlot } from './geometry/label/layout/limit-in-plot';\nregisterGeometryLabelLayout('overlap', overlap);\nregisterGeometryLabelLayout('distribute', distribute);\nregisterGeometryLabelLayout('fixed-overlap', fixedOverlap);\nregisterGeometryLabelLayout('hide-overlap', hideOverlap);\nregisterGeometryLabelLayout('limit-in-shape', limitInShape);\nregisterGeometryLabelLayout('limit-in-canvas', limitInCanvas);\nregisterGeometryLabelLayout('limit-in-plot', limitInPlot);\nregisterGeometryLabelLayout('pie-outer', pieOuterLabelLayout);\nregisterGeometryLabelLayout('adjust-color', adjustColor);\nregisterGeometryLabelLayout('interval-adjust-position', intervalAdjustPosition);\nregisterGeometryLabelLayout('interval-hide-overlap', intervalHideOverlap);\nregisterGeometryLabelLayout('point-adjust-position', pointAdjustPosition);\nregisterGeometryLabelLayout('pie-spider', pieSpiderLabelLayout);\nregisterGeometryLabelLayout('path-adjust-position', pathAdjustPosition);\n// 注册需要的动画执行函数\nimport { fadeIn, fadeOut } from './animate/animation/fade';\nimport { growInX, growInXY, growInY } from './animate/animation/grow-in';\nimport { pathIn } from './animate/animation/path-in';\nimport { positionUpdate } from './animate/animation/position-update';\nimport { scaleInX, scaleInY } from './animate/animation/scale-in';\nimport { sectorPathUpdate } from './animate/animation/sector-path-update';\nimport { waveIn } from './animate/animation/wave-in';\nimport { zoomIn, zoomOut } from './animate/animation/zoom';\nimport { registerAnimation } from './core';\nregisterAnimation('fade-in', fadeIn);\nregisterAnimation('fade-out', fadeOut);\nregisterAnimation('grow-in-x', growInX);\nregisterAnimation('grow-in-xy', growInXY);\nregisterAnimation('grow-in-y', growInY);\nregisterAnimation('scale-in-x', scaleInX);\nregisterAnimation('scale-in-y', scaleInY);\nregisterAnimation('wave-in', waveIn);\nregisterAnimation('zoom-in', zoomIn);\nregisterAnimation('zoom-out', zoomOut);\nregisterAnimation('position-update', positionUpdate);\nregisterAnimation('sector-path-update', sectorPathUpdate);\nregisterAnimation('path-in', pathIn);\n// 注册内置的 Facet\nimport { registerFacet } from './core';\nimport Circle from './facet/circle';\nimport List from './facet/list';\nimport Matrix from './facet/matrix';\nimport Mirror from './facet/mirror';\nimport Rect from './facet/rect';\nimport Tree from './facet/tree';\nregisterFacet('rect', Rect);\nregisterFacet('mirror', Mirror);\nregisterFacet('list', List);\nregisterFacet('matrix', Matrix);\nregisterFacet('circle', Circle);\nregisterFacet('tree', Tree);\n// 注册内置的 Component\nimport { registerComponentController } from './core';\nimport Annotation from './chart/controller/annotation';\nimport Axis from './chart/controller/axis';\nimport Legend from './chart/controller/legend';\nimport Slider from './chart/controller/slider';\nimport Tooltip from './chart/controller/tooltip';\nimport Scrollbar from './chart/controller/scrollbar';\n// register build-in components\nregisterComponentController('axis', Axis);\nregisterComponentController('legend', Legend);\nregisterComponentController('tooltip', Tooltip);\nregisterComponentController('annotation', Annotation);\nregisterComponentController('slider', Slider);\nregisterComponentController('scrollbar', Scrollbar);\n// 注册 Interaction Action\nimport { registerAction } from './core';\nimport ActiveRegion from './interaction/action/active-region';\nimport SiblingTooltip from './interaction/action/component/tooltip/sibling';\nimport TooltipAction from './interaction/action/component/tooltip/geometry';\nimport EllipsisTextAction from './interaction/action/component/tooltip/ellipsis-text';\nimport ElementActive from './interaction/action/element/active';\nimport ElementLinkByColor from './interaction/action/element/link-by-color';\nimport ElementRangeActive from './interaction/action/element/range-active';\nimport ElementSingleActive from './interaction/action/element/single-active';\nimport ElementHighlight from './interaction/action/element/highlight';\nimport ElementHighlightByColor from './interaction/action/element/highlight-by-color';\nimport ElementHighlightByX from './interaction/action/element/highlight-by-x';\nimport ElementRangeHighlight, { ELEMENT_RANGE_HIGHLIGHT_EVENTS } from './interaction/action/element/range-highlight';\nimport ElementSingleHighlight from './interaction/action/element/single-highlight';\nimport ElementRangeSelected from './interaction/action/element/range-selected';\nimport ElementSelected from './interaction/action/element/selected';\nimport ElementSingleSelected from './interaction/action/element/single-selected';\nimport ListActive from './interaction/action/component/list-active';\nimport ListHighlight from './interaction/action/component/list-highlight';\nimport ListSelected from './interaction/action/component/list-selected';\nimport ListUnchecked from './interaction/action/component/list-unchecked';\nimport ListChecked from './interaction/action/component/list-checked';\nimport ListFocus from './interaction/action/component/list-focus';\nimport ListRadio from './interaction/action/component/list-radio';\nimport CircleMask from './interaction/action/mask/circle';\nimport DimMask from './interaction/action/mask/dim-rect';\nimport PathMask from './interaction/action/mask/path';\nimport RectMask from './interaction/action/mask/rect';\nimport SmoothPathMask from './interaction/action/mask/smooth-path';\nimport RectMultiMask from './interaction/action/mask/multiple/rect';\nimport DimRectMultiMask from './interaction/action/mask/multiple/dim-rect';\nimport CircleMultiMask from './interaction/action/mask/multiple/circle';\nimport PathMultiMask from './interaction/action/mask/multiple/path';\nimport SmoothPathMultiMask from './interaction/action/mask/multiple/smooth-path';\nimport CursorAction from './interaction/action/cursor';\nimport DataFilter from './interaction/action/data/filter';\nimport DataRangeFilter, { BRUSH_FILTER_EVENTS } from './interaction/action/data/range-filter';\nimport SiblingFilter from './interaction/action/data/sibling-filter';\nimport ElementFilter from './interaction/action/element/filter';\nimport ElementSiblingFilter from './interaction/action/element/sibling-filter';\nimport ButtonAction from './interaction/action/view/button';\nimport ViewDrag from './interaction/action/view/drag';\nimport ViewMove from './interaction/action/view/move';\nimport ScaleTranslate from './interaction/action/view/scale-translate';\nimport ScaleZoom from './interaction/action/view/scale-zoom';\nimport MousewheelScroll from './interaction/action/view/mousewheel-scroll';\nimport AxisDescription from './interaction/action/component/axis/axis-description';\nregisterAction('tooltip', TooltipAction);\nregisterAction('sibling-tooltip', SiblingTooltip);\nregisterAction('ellipsis-text', EllipsisTextAction);\nregisterAction('element-active', ElementActive);\nregisterAction('element-single-active', ElementSingleActive);\nregisterAction('element-range-active', ElementRangeActive);\nregisterAction('element-highlight', ElementHighlight);\nregisterAction('element-highlight-by-x', ElementHighlightByX);\nregisterAction('element-highlight-by-color', ElementHighlightByColor);\nregisterAction('element-single-highlight', ElementSingleHighlight);\nregisterAction('element-range-highlight', ElementRangeHighlight);\nregisterAction('element-sibling-highlight', ElementRangeHighlight, {\n    effectSiblings: true,\n    effectByRecord: true,\n});\nregisterAction('element-selected', ElementSelected);\nregisterAction('element-single-selected', ElementSingleSelected);\nregisterAction('element-range-selected', ElementRangeSelected);\nregisterAction('element-link-by-color', ElementLinkByColor);\nregisterAction('active-region', ActiveRegion);\nregisterAction('list-active', ListActive);\nregisterAction('list-selected', ListSelected);\nregisterAction('list-highlight', ListHighlight);\nregisterAction('list-unchecked', ListUnchecked);\nregisterAction('list-checked', ListChecked);\nregisterAction('list-focus', ListFocus);\nregisterAction('list-radio', ListRadio);\nregisterAction('legend-item-highlight', ListHighlight, {\n    componentNames: ['legend'],\n});\nregisterAction('axis-label-highlight', ListHighlight, {\n    componentNames: ['axis'],\n});\nregisterAction('axis-description', AxisDescription);\nregisterAction('rect-mask', RectMask);\nregisterAction('x-rect-mask', DimMask, { dim: 'x' });\nregisterAction('y-rect-mask', DimMask, { dim: 'y' });\nregisterAction('circle-mask', CircleMask);\nregisterAction('path-mask', PathMask);\nregisterAction('smooth-path-mask', SmoothPathMask);\nregisterAction('rect-multi-mask', RectMultiMask);\nregisterAction('x-rect-multi-mask', DimRectMultiMask, { dim: 'x' });\nregisterAction('y-rect-multi-mask', DimRectMultiMask, { dim: 'y' });\nregisterAction('circle-multi-mask', CircleMultiMask);\nregisterAction('path-multi-mask', PathMultiMask);\nregisterAction('smooth-path-multi-mask', SmoothPathMultiMask);\nregisterAction('cursor', CursorAction);\nregisterAction('data-filter', DataFilter);\nregisterAction('brush', DataRangeFilter);\nregisterAction('brush-x', DataRangeFilter, { dims: ['x'] });\nregisterAction('brush-y', DataRangeFilter, { dims: ['y'] });\nregisterAction('sibling-filter', SiblingFilter);\nregisterAction('sibling-x-filter', SiblingFilter, { dims: 'x' });\nregisterAction('sibling-y-filter', SiblingFilter, { dims: 'y' });\nregisterAction('element-filter', ElementFilter);\nregisterAction('element-sibling-filter', ElementSiblingFilter);\nregisterAction('element-sibling-filter-record', ElementSiblingFilter, { byRecord: true });\nregisterAction('view-drag', ViewDrag);\nregisterAction('view-move', ViewMove);\nregisterAction('scale-translate', ScaleTranslate);\nregisterAction('scale-zoom', ScaleZoom);\nregisterAction('reset-button', ButtonAction, {\n    name: 'reset-button',\n    text: 'reset',\n});\nregisterAction('mousewheel-scroll', MousewheelScroll);\n// 注册默认的 Interaction 交互行为\nimport { registerInteraction } from './core';\nimport { isMultipleMask } from './interaction/action/util';\nfunction isPointInView(context) {\n    return context.isInPlot();\n}\n// 注册 tooltip 的 interaction\nregisterInteraction('tooltip', {\n    start: [\n        { trigger: 'plot:mousemove', action: 'tooltip:show', throttle: { wait: 50, leading: true, trailing: false } },\n        { trigger: 'plot:touchmove', action: 'tooltip:show', throttle: { wait: 50, leading: true, trailing: false } },\n    ],\n    end: [\n        { trigger: 'plot:mouseleave', action: 'tooltip:hide' },\n        { trigger: 'plot:leave', action: 'tooltip:hide' },\n        { trigger: 'plot:touchend', action: 'tooltip:hide' },\n    ],\n});\nregisterInteraction('ellipsis-text', {\n    start: [\n        {\n            trigger: 'legend-item-name:mousemove',\n            action: 'ellipsis-text:show',\n            throttle: { wait: 50, leading: true, trailing: false },\n        },\n        {\n            trigger: 'legend-item-name:touchstart',\n            action: 'ellipsis-text:show',\n            throttle: { wait: 50, leading: true, trailing: false },\n        },\n        {\n            trigger: 'axis-label:mousemove',\n            action: 'ellipsis-text:show',\n            throttle: { wait: 50, leading: true, trailing: false },\n        },\n        {\n            trigger: 'axis-label:touchstart',\n            action: 'ellipsis-text:show',\n            throttle: { wait: 50, leading: true, trailing: false },\n        },\n    ],\n    end: [\n        { trigger: 'legend-item-name:mouseleave', action: 'ellipsis-text:hide' },\n        { trigger: 'legend-item-name:touchend', action: 'ellipsis-text:hide' },\n        { trigger: 'axis-label:mouseleave', action: 'ellipsis-text:hide' },\n        { trigger: 'axis-label:mouseout', action: 'ellipsis-text:hide' },\n        { trigger: 'axis-label:touchend', action: 'ellipsis-text:hide' },\n    ],\n});\n// 移动到 element 上 active\nregisterInteraction('element-active', {\n    start: [{ trigger: 'element:mouseenter', action: 'element-active:active' }],\n    end: [{ trigger: 'element:mouseleave', action: 'element-active:reset' }],\n});\n// 点击选中，允许取消\nregisterInteraction('element-selected', {\n    start: [{ trigger: 'element:click', action: 'element-selected:toggle' }],\n});\n// hover highlight，允许取消\nregisterInteraction('element-highlight', {\n    start: [{ trigger: 'element:mouseenter', action: 'element-highlight:highlight' }],\n    end: [{ trigger: 'element:mouseleave', action: 'element-highlight:reset' }],\n});\n// hover highlight by x，允许取消\nregisterInteraction('element-highlight-by-x', {\n    start: [{ trigger: 'element:mouseenter', action: 'element-highlight-by-x:highlight' }],\n    end: [{ trigger: 'element:mouseleave', action: 'element-highlight-by-x:reset' }],\n});\n// hover highlight by y，允许取消\nregisterInteraction('element-highlight-by-color', {\n    start: [{ trigger: 'element:mouseenter', action: 'element-highlight-by-color:highlight' }],\n    end: [{ trigger: 'element:mouseleave', action: 'element-highlight-by-color:reset' }],\n});\n// legend hover，element active\nregisterInteraction('legend-active', {\n    start: [{ trigger: 'legend-item:mouseenter', action: ['list-active:active', 'element-active:active'] }],\n    end: [{ trigger: 'legend-item:mouseleave', action: ['list-active:reset', 'element-active:reset'] }],\n});\n// legend hover，element active\nregisterInteraction('legend-highlight', {\n    start: [\n        { trigger: 'legend-item:mouseenter', action: ['legend-item-highlight:highlight', 'element-highlight:highlight'] },\n    ],\n    end: [{ trigger: 'legend-item:mouseleave', action: ['legend-item-highlight:reset', 'element-highlight:reset'] }],\n});\n// legend hover，element active\nregisterInteraction('axis-label-highlight', {\n    start: [\n        { trigger: 'axis-label:mouseenter', action: ['axis-label-highlight:highlight', 'element-highlight:highlight'] },\n    ],\n    end: [{ trigger: 'axis-label:mouseleave', action: ['axis-label-highlight:reset', 'element-highlight:reset'] }],\n});\n// legend hover，element active\nregisterInteraction('element-list-highlight', {\n    start: [{ trigger: 'element:mouseenter', action: ['list-highlight:highlight', 'element-highlight:highlight'] }],\n    end: [{ trigger: 'element:mouseleave', action: ['list-highlight:reset', 'element-highlight:reset'] }],\n});\n// 框选\nregisterInteraction('element-range-highlight', {\n    showEnable: [\n        { trigger: 'plot:mouseenter', action: 'cursor:crosshair' },\n        { trigger: 'mask:mouseenter', action: 'cursor:move' },\n        { trigger: 'plot:mouseleave', action: 'cursor:default' },\n        { trigger: 'mask:mouseleave', action: 'cursor:crosshair' },\n    ],\n    start: [\n        {\n            trigger: 'plot:mousedown',\n            isEnable: function (context) {\n                // 不要点击在 mask 上重新开始\n                return !context.isInShape('mask');\n            },\n            action: ['rect-mask:start', 'rect-mask:show'],\n        },\n        {\n            trigger: 'mask:dragstart',\n            action: ['rect-mask:moveStart'],\n        },\n    ],\n    processing: [\n        {\n            trigger: 'plot:mousemove',\n            action: ['rect-mask:resize'],\n        },\n        {\n            trigger: 'mask:drag',\n            action: ['rect-mask:move'],\n        },\n        {\n            trigger: 'mask:change',\n            action: ['element-range-highlight:highlight'],\n        },\n    ],\n    end: [\n        { trigger: 'plot:mouseup', action: ['rect-mask:end'] },\n        { trigger: 'mask:dragend', action: ['rect-mask:moveEnd'] },\n        {\n            trigger: 'document:mouseup',\n            isEnable: function (context) {\n                return !context.isInPlot();\n            },\n            action: ['element-range-highlight:clear', 'rect-mask:end', 'rect-mask:hide'],\n        },\n    ],\n    rollback: [{ trigger: 'dblclick', action: ['element-range-highlight:clear', 'rect-mask:hide'] }],\n});\nregisterInteraction('brush', {\n    showEnable: [\n        { trigger: 'plot:mouseenter', action: 'cursor:crosshair' },\n        { trigger: 'plot:mouseleave', action: 'cursor:default' },\n    ],\n    start: [\n        {\n            trigger: 'mousedown',\n            isEnable: isPointInView,\n            action: ['brush:start', 'rect-mask:start', 'rect-mask:show'],\n        },\n    ],\n    processing: [\n        {\n            trigger: 'mousemove',\n            isEnable: isPointInView,\n            action: ['rect-mask:resize'],\n        },\n    ],\n    end: [\n        {\n            trigger: 'mouseup',\n            isEnable: isPointInView,\n            action: ['brush:filter', 'brush:end', 'rect-mask:end', 'rect-mask:hide', 'reset-button:show'],\n        },\n    ],\n    rollback: [{ trigger: 'reset-button:click', action: ['brush:reset', 'reset-button:hide', 'cursor:crosshair'] }],\n});\nregisterInteraction('brush-visible', {\n    showEnable: [\n        { trigger: 'plot:mouseenter', action: 'cursor:crosshair' },\n        { trigger: 'plot:mouseleave', action: 'cursor:default' },\n    ],\n    start: [\n        {\n            trigger: 'plot:mousedown',\n            action: ['rect-mask:start', 'rect-mask:show'],\n        },\n    ],\n    processing: [\n        {\n            trigger: 'plot:mousemove',\n            action: ['rect-mask:resize'],\n        },\n        { trigger: 'mask:change', action: ['element-range-highlight:highlight'] },\n    ],\n    end: [\n        {\n            trigger: 'plot:mouseup',\n            action: ['rect-mask:end', 'rect-mask:hide', 'element-filter:filter', 'element-range-highlight:clear'],\n        },\n    ],\n    rollback: [\n        {\n            trigger: 'dblclick',\n            action: ['element-filter:clear'],\n        },\n    ],\n});\nregisterInteraction('brush-x', {\n    showEnable: [\n        { trigger: 'plot:mouseenter', action: 'cursor:crosshair' },\n        { trigger: 'plot:mouseleave', action: 'cursor:default' },\n    ],\n    start: [\n        {\n            trigger: 'mousedown',\n            isEnable: isPointInView,\n            action: ['brush-x:start', 'x-rect-mask:start', 'x-rect-mask:show'],\n        },\n    ],\n    processing: [\n        {\n            trigger: 'mousemove',\n            isEnable: isPointInView,\n            action: ['x-rect-mask:resize'],\n        },\n    ],\n    end: [\n        {\n            trigger: 'mouseup',\n            isEnable: isPointInView,\n            action: ['brush-x:filter', 'brush-x:end', 'x-rect-mask:end', 'x-rect-mask:hide'],\n        },\n    ],\n    rollback: [{ trigger: 'dblclick', action: ['brush-x:reset'] }],\n});\nregisterInteraction('element-path-highlight', {\n    showEnable: [\n        { trigger: 'plot:mouseenter', action: 'cursor:crosshair' },\n        { trigger: 'plot:mouseleave', action: 'cursor:default' },\n    ],\n    start: [\n        { trigger: 'mousedown', isEnable: isPointInView, action: 'path-mask:start' },\n        { trigger: 'mousedown', isEnable: isPointInView, action: 'path-mask:show' },\n    ],\n    processing: [{ trigger: 'mousemove', action: 'path-mask:addPoint' }],\n    end: [{ trigger: 'mouseup', action: 'path-mask:end' }],\n    rollback: [{ trigger: 'dblclick', action: 'path-mask:hide' }],\n});\nregisterInteraction('brush-x-multi', {\n    showEnable: [\n        { trigger: 'plot:mouseenter', action: 'cursor:crosshair' },\n        { trigger: 'mask:mouseenter', action: 'cursor:move' },\n        { trigger: 'plot:mouseleave', action: 'cursor:default' },\n        { trigger: 'mask:mouseleave', action: 'cursor:crosshair' },\n    ],\n    start: [\n        {\n            trigger: 'mousedown',\n            isEnable: isPointInView,\n            action: ['x-rect-multi-mask:start', 'x-rect-multi-mask:show'],\n        },\n        {\n            trigger: 'mask:dragstart',\n            action: ['x-rect-multi-mask:moveStart'],\n        },\n    ],\n    processing: [\n        {\n            trigger: 'mousemove',\n            isEnable: function (context) { return !isMultipleMask(context); },\n            action: ['x-rect-multi-mask:resize'],\n        },\n        {\n            trigger: 'multi-mask:change',\n            action: 'element-range-highlight:highlight',\n        },\n        {\n            trigger: 'mask:drag',\n            action: ['x-rect-multi-mask:move'],\n        },\n    ],\n    end: [\n        {\n            trigger: 'mouseup',\n            action: ['x-rect-multi-mask:end'],\n        },\n        { trigger: 'mask:dragend', action: ['x-rect-multi-mask:moveEnd'] },\n    ],\n    rollback: [\n        {\n            trigger: 'dblclick',\n            action: ['x-rect-multi-mask:clear', 'cursor:crosshair'],\n        },\n        {\n            trigger: 'multi-mask:clearAll',\n            action: ['element-range-highlight:clear'],\n        },\n        {\n            trigger: 'multi-mask:clearSingle',\n            action: ['element-range-highlight:highlight'],\n        },\n    ],\n});\n// 点击选中，允许取消\nregisterInteraction('element-single-selected', {\n    start: [{ trigger: 'element:click', action: 'element-single-selected:toggle' }],\n});\n// 筛选数据\nregisterInteraction('legend-filter', {\n    showEnable: [\n        { trigger: 'legend-item:mouseenter', action: ['cursor:pointer', 'list-radio:show'] },\n        { trigger: 'legend-item:mouseleave', action: ['cursor:default', 'list-radio:hide'] },\n    ],\n    start: [\n        {\n            trigger: 'legend-item:click',\n            isEnable: function (context) {\n                return !context.isInShape('legend-item-radio');\n            },\n            action: ['legend-item-highlight:reset', 'element-highlight:reset', 'list-unchecked:toggle', 'data-filter:filter', 'list-radio:show'],\n        },\n        //  正反选数据: 只有当 radio === truthy 的时候才会有 legend-item-radio 这个元素\n        {\n            trigger: 'legend-item-radio:mouseenter',\n            action: ['list-radio:showTip'],\n        },\n        {\n            trigger: 'legend-item-radio:mouseleave',\n            action: ['list-radio:hideTip'],\n        },\n        {\n            trigger: 'legend-item-radio:click',\n            action: ['list-focus:toggle', 'data-filter:filter', 'list-radio:show'],\n        },\n    ],\n});\n// 筛选数据\nregisterInteraction('continuous-filter', {\n    start: [{ trigger: 'legend:valuechanged', action: 'data-filter:filter' }],\n});\n// 筛选数据\nregisterInteraction('continuous-visible-filter', {\n    start: [{ trigger: 'legend:valuechanged', action: 'element-filter:filter' }],\n});\n// 筛选图形\nregisterInteraction('legend-visible-filter', {\n    showEnable: [\n        { trigger: 'legend-item:mouseenter', action: 'cursor:pointer' },\n        { trigger: 'legend-item:mouseleave', action: 'cursor:default' },\n    ],\n    start: [{ trigger: 'legend-item:click', action: ['legend-item-highlight:reset', 'element-highlight:reset', 'list-unchecked:toggle', 'element-filter:filter'] }],\n});\n// 出现背景框\nregisterInteraction('active-region', {\n    start: [{ trigger: 'plot:mousemove', action: 'active-region:show' }],\n    end: [{ trigger: 'plot:mouseleave', action: 'active-region:hide' }],\n});\n// 显示坐标轴标题详情信息\nregisterInteraction('axis-description', {\n    start: [{ trigger: 'axis-description:mousemove', action: 'axis-description:show' }],\n    end: [{ trigger: 'axis-description:mouseleave', action: 'axis-description:hide' }]\n});\nfunction isWheelDown(event) {\n    event.gEvent.preventDefault();\n    return event.gEvent.originalEvent.deltaY > 0;\n}\nregisterInteraction('view-zoom', {\n    start: [\n        {\n            trigger: 'plot:mousewheel',\n            isEnable: function (context) {\n                return isWheelDown(context.event);\n            },\n            action: 'scale-zoom:zoomOut',\n            throttle: { wait: 100, leading: true, trailing: false },\n        },\n        {\n            trigger: 'plot:mousewheel',\n            isEnable: function (context) {\n                return !isWheelDown(context.event);\n            },\n            action: 'scale-zoom:zoomIn',\n            throttle: { wait: 100, leading: true, trailing: false },\n        },\n    ],\n});\nregisterInteraction('sibling-tooltip', {\n    start: [{ trigger: 'plot:mousemove', action: 'sibling-tooltip:show' }],\n    end: [{ trigger: 'plot:mouseleave', action: 'sibling-tooltip:hide' }],\n});\nregisterInteraction('plot-mousewheel-scroll', {\n    start: [{ trigger: 'plot:mousewheel', action: 'mousewheel-scroll:scroll' }],\n});\n// 暴露一些常量\nexport { VIEW_LIFE_CIRCLE } from './constant';\n/** brush 范围筛选的一些事件常量 */\nexport { BRUSH_FILTER_EVENTS, ELEMENT_RANGE_HIGHLIGHT_EVENTS };\nexport * from './core';\n//# sourceMappingURL=index.js.map","import { __values } from \"tslib\";\nimport { isObject, each, find, get } from '@antv/util';\nimport { polarToCartesian } from '../../../../util/graphics';\n/** label text和line距离 4px */\nvar MARGIN = 4;\nfunction antiCollision(labelShapes, labels, lineHeight, plotRange, center, isRight) {\n    var e_1, _a;\n    // adjust y position of labels to avoid overlapping\n    var overlapping = true;\n    var start = plotRange.start;\n    var end = plotRange.end;\n    var startY = Math.min(start.y, end.y);\n    var totalHeight = Math.abs(start.y - end.y);\n    var i;\n    var maxY = 0;\n    var minY = Number.MIN_VALUE;\n    var boxes = labels.map(function (label) {\n        if (label.y > maxY) {\n            maxY = label.y;\n        }\n        if (label.y < minY) {\n            minY = label.y;\n        }\n        return {\n            size: lineHeight,\n            targets: [label.y - startY],\n        };\n    });\n    minY -= startY;\n    if (maxY - startY > totalHeight) {\n        totalHeight = maxY - startY;\n    }\n    while (overlapping) {\n        /* eslint no-loop-func: 0 */\n        boxes.forEach(function (box) {\n            var target = (Math.min.apply(minY, box.targets) + Math.max.apply(minY, box.targets)) / 2;\n            box.pos = Math.min(Math.max(minY, target - box.size / 2), totalHeight - box.size);\n            // box.pos = Math.max(0, target - box.size / 2);\n        });\n        // detect overlapping and join boxes\n        overlapping = false;\n        i = boxes.length;\n        while (i--) {\n            if (i > 0) {\n                var previousBox = boxes[i - 1];\n                var box = boxes[i];\n                if (previousBox.pos + previousBox.size > box.pos) {\n                    // overlapping\n                    previousBox.size += box.size;\n                    previousBox.targets = previousBox.targets.concat(box.targets);\n                    // overflow, shift up\n                    if (previousBox.pos + previousBox.size > totalHeight) {\n                        previousBox.pos = totalHeight - previousBox.size;\n                    }\n                    boxes.splice(i, 1); // removing box\n                    overlapping = true;\n                }\n            }\n        }\n    }\n    i = 0;\n    // step 4: normalize y and adjust x\n    boxes.forEach(function (b) {\n        var posInCompositeBox = startY + lineHeight / 2; // middle of the label\n        b.targets.forEach(function () {\n            labels[i].y = b.pos + posInCompositeBox;\n            posInCompositeBox += lineHeight;\n            i++;\n        });\n    });\n    var labelsMap = {};\n    try {\n        for (var labelShapes_1 = __values(labelShapes), labelShapes_1_1 = labelShapes_1.next(); !labelShapes_1_1.done; labelShapes_1_1 = labelShapes_1.next()) {\n            var labelShape = labelShapes_1_1.value;\n            labelsMap[labelShape.get('id')] = labelShape;\n        }\n    }\n    catch (e_1_1) { e_1 = { error: e_1_1 }; }\n    finally {\n        try {\n            if (labelShapes_1_1 && !labelShapes_1_1.done && (_a = labelShapes_1.return)) _a.call(labelShapes_1);\n        }\n        finally { if (e_1) throw e_1.error; }\n    }\n    // (x - cx)^2 + (y - cy)^2 = totalR^2\n    labels.forEach(function (label) {\n        var rPow2 = label.r * label.r;\n        var dyPow2 = Math.pow(Math.abs(label.y - center.y), 2);\n        if (rPow2 < dyPow2) {\n            label.x = center.x;\n        }\n        else {\n            var dx = Math.sqrt(rPow2 - dyPow2);\n            if (!isRight) {\n                // left\n                label.x = center.x - dx;\n            }\n            else {\n                // right\n                label.x = center.x + dx;\n            }\n        }\n        // adjust labelShape\n        var labelShape = labelsMap[label.id];\n        labelShape.attr('x', label.x);\n        labelShape.attr('y', label.y);\n        // because group could not effect text-shape, should set text-shape position manually\n        var textShape = find(labelShape.getChildren(), function (ele) { return ele.get('type') === 'text'; });\n        // @ts-ignore\n        if (textShape) {\n            textShape.attr('y', label.y);\n            textShape.attr('x', label.x);\n        }\n    });\n}\nexport function distribute(items, labels, shapes, region) {\n    if (!items.length || !labels.length) {\n        return;\n    }\n    var offset = items[0] ? items[0].offset : 0;\n    var coordinate = labels[0].get('coordinate');\n    var radius = coordinate.getRadius();\n    var center = coordinate.getCenter();\n    if (offset > 0) {\n        // const lineHeight = get(this.geometry.theme, ['pieLabels', 'labelHeight'], 14);\n        var lineHeight_1 = 14; // TODO\n        var totalR = radius + offset;\n        var totalHeight_1 = totalR * 2 + lineHeight_1 * 2;\n        var plotRange_1 = {\n            start: coordinate.start,\n            end: coordinate.end,\n        };\n        // step 1: separate labels\n        var halves_1 = [\n            [],\n            [], // right\n        ];\n        items.forEach(function (labelItem) {\n            if (!labelItem) {\n                return;\n            }\n            if (labelItem.textAlign === 'right') {\n                // left\n                halves_1[0].push(labelItem);\n            }\n            else {\n                // right or center will be put on the right side\n                halves_1[1].push(labelItem);\n            }\n        });\n        halves_1.forEach(function (half, index) {\n            // step 2: reduce labels\n            var maxLabelsCountForOneSide = totalHeight_1 / lineHeight_1;\n            if (half.length > maxLabelsCountForOneSide) {\n                half.sort(function (a, b) {\n                    // sort by percentage DESC\n                    return b['..percent'] - a['..percent'];\n                });\n                half.splice(maxLabelsCountForOneSide, half.length - maxLabelsCountForOneSide);\n            }\n            // step 3: distribute position (x and y)\n            half.sort(function (a, b) {\n                // sort by y ASC\n                return a.y - b.y;\n            });\n            antiCollision(labels, half, lineHeight_1, plotRange_1, center, index);\n        });\n    }\n    // 配置 labelLine\n    each(items, function (item) {\n        if (item && item.labelLine) {\n            var distance = item.offset;\n            var angle = item.angle;\n            // 贴近圆周\n            var startPoint = polarToCartesian(center.x, center.y, radius, angle);\n            var innerPoint = polarToCartesian(center.x, center.y, radius + distance / 2, angle);\n            var itemX = item.x + get(item, 'offsetX', 0);\n            var itemY = item.y + get(item, 'offsetY', 0);\n            var endPoint = {\n                x: itemX - Math.cos(angle) * MARGIN,\n                y: itemY - Math.sin(angle) * MARGIN,\n            };\n            if (!isObject(item.labelLine)) {\n                // labelLine: true\n                item.labelLine = {};\n            }\n            item.labelLine.path = [\n                \"M \".concat(startPoint.x),\n                \"\".concat(startPoint.y, \" Q\").concat(innerPoint.x),\n                \"\".concat(innerPoint.y, \" \").concat(endPoint.x),\n                endPoint.y,\n            ].join(',');\n        }\n    });\n}\n//# sourceMappingURL=distribute.js.map","import { each } from '@antv/util';\n/**\n * @ignore\n * 根据图形元素以及 label 的 bbox 进行调整，如果 label 超出了 shape 的 bbox 则不展示\n */\nexport function limitInShape(items, labels, shapes, region) {\n    each(labels, function (label, index) {\n        var labelBBox = label.getCanvasBBox(); // 文本有可能发生旋转\n        var shapeBBox = shapes[index].getBBox();\n        if (labelBBox.minX < shapeBBox.minX ||\n            labelBBox.minY < shapeBBox.minY ||\n            labelBBox.maxX > shapeBBox.maxX ||\n            labelBBox.maxY > shapeBBox.maxY) {\n            label.remove(true); // 超出则不展示\n        }\n    });\n}\n//# sourceMappingURL=limit-in-shape.js.map","import { each } from '@antv/util';\nimport { translate } from '../../../util/transform';\n/**\n * @ignore\n * 将 label 限制在画布范围内，简单得将超出画布的 label 往画布内调整\n * @param labels\n * @param cfg\n */\nexport function limitInCanvas(items, labels, shapes, region) {\n    each(labels, function (label) {\n        var regionMinX = region.minX, regionMinY = region.minY, regionMaxX = region.maxX, regionMaxY = region.maxY;\n        var _a = label.getCanvasBBox(), minX = _a.minX, minY = _a.minY, maxX = _a.maxX, maxY = _a.maxY, x = _a.x, y = _a.y, width = _a.width, height = _a.height;\n        var finalX = x;\n        var finalY = y;\n        if (minX < regionMinX || maxX < regionMinX) {\n            // 超出左侧\n            finalX = regionMinX;\n        }\n        if (minY < regionMinY || maxY < regionMinY) {\n            // 超出顶部\n            finalY = regionMinY;\n        }\n        if (minX > regionMaxX) {\n            // 整体超出右侧\n            finalX = regionMaxX - width;\n        }\n        else if (maxX > regionMaxX) {\n            // 超出右侧\n            finalX = finalX - (maxX - regionMaxX);\n        }\n        if (minY > regionMaxY) {\n            // 整体超出顶部\n            finalY = regionMaxY - height;\n        }\n        else if (maxY > regionMaxY) {\n            // 超出底部\n            finalY = finalY - (maxY - regionMaxY);\n        }\n        if (finalX !== x || finalY !== y) {\n            translate(label, finalX - x, finalY - y);\n        }\n    });\n}\n//# sourceMappingURL=limit-in-canvas.js.map","import { each, pick } from '@antv/util';\nimport { getCoordinateBBox } from '../../../util/coordinate';\nimport { getEllipsisText } from '../../../util/text';\nimport { translate } from '../../../util/transform';\n/**\n * @ignore\n * 将 label 限制在 Plot 范围内，将超出 Plot 范围的 label 可选择进行隐藏或者移动位置\n * @param labels\n * @param cfg\n */\nexport function limitInPlot(items, labels, shapes, region, cfg) {\n    if (labels.length <= 0) {\n        return;\n    }\n    var direction = (cfg === null || cfg === void 0 ? void 0 : cfg.direction) || ['top', 'right', 'bottom', 'left'];\n    var action = (cfg === null || cfg === void 0 ? void 0 : cfg.action) || 'translate';\n    var margin = (cfg === null || cfg === void 0 ? void 0 : cfg.margin) || 0;\n    var coordinate = labels[0].get('coordinate');\n    if (!coordinate) {\n        return;\n    }\n    var _a = getCoordinateBBox(coordinate, margin), regionMinX = _a.minX, regionMinY = _a.minY, regionMaxX = _a.maxX, regionMaxY = _a.maxY;\n    each(labels, function (label) {\n        var _a = label.getCanvasBBox(), minX = _a.minX, minY = _a.minY, maxX = _a.maxX, maxY = _a.maxY, x = _a.x, y = _a.y, width = _a.width, height = _a.height;\n        var finalX = x;\n        var finalY = y;\n        if (direction.indexOf('left') >= 0 && (minX < regionMinX || maxX < regionMinX)) {\n            // 超出左侧\n            finalX = regionMinX;\n        }\n        if (direction.indexOf('top') >= 0 && (minY < regionMinY || maxY < regionMinY)) {\n            // 超出顶部\n            finalY = regionMinY;\n        }\n        if (direction.indexOf('right') >= 0) {\n            if (minX > regionMaxX) {\n                // 整体超出右侧\n                finalX = regionMaxX - width;\n            }\n            else if (maxX > regionMaxX) {\n                // 超出右侧\n                finalX = finalX - (maxX - regionMaxX);\n            }\n        }\n        if (direction.indexOf('bottom') >= 0) {\n            if (minY > regionMaxY) {\n                // 整体超出底部\n                finalY = regionMaxY - height;\n            }\n            else if (maxY > regionMaxY) {\n                // 超出底部\n                finalY = finalY - (maxY - regionMaxY);\n            }\n        }\n        if (finalX !== x || finalY !== y) {\n            var translateX_1 = finalX - x;\n            if (action === 'translate') {\n                translate(label, translateX_1, finalY - y);\n            }\n            else if (action === 'ellipsis') {\n                var textShapes = label.findAll(function (shape) { return shape.get('type') === 'text'; });\n                textShapes.forEach(function (textShape) {\n                    var style = pick(textShape.attr(), ['fontSize', 'fontFamily', 'fontWeight', 'fontStyle', 'fontVariant']);\n                    var textBox = textShape.getCanvasBBox();\n                    var text = getEllipsisText(textShape.attr('text'), textBox.width - Math.abs(translateX_1), style);\n                    textShape.attr('text', text);\n                });\n            }\n            else {\n                label.hide();\n            }\n        }\n    });\n}\n//# sourceMappingURL=limit-in-plot.js.map","import { __values } from \"tslib\";\nimport { isObject, each, get, groupBy, isNil, filter } from '@antv/util';\nimport { polarToCartesian } from '../../../../util/graphics';\nimport { antiCollision } from './util';\n/** label text和line距离 4px */\nvar MARGIN = 4;\n/**\n * 配置 labelline\n * @param item PolarLabelItem\n */\nfunction drawLabelline(item /** PolarLabelItem */, coordinate) {\n    /** 坐标圆心 */\n    var center = coordinate.getCenter();\n    /** 圆半径 */\n    var radius = coordinate.getRadius();\n    if (item && item.labelLine) {\n        var angle = item.angle, labelOffset = item.offset;\n        // 贴近圆周\n        var startPoint = polarToCartesian(center.x, center.y, radius, angle);\n        var itemX = item.x + get(item, 'offsetX', 0) * (Math.cos(angle) > 0 ? 1 : -1);\n        var itemY = item.y + get(item, 'offsetY', 0) * (Math.sin(angle) > 0 ? 1 : -1);\n        var endPoint = {\n            x: itemX - Math.cos(angle) * MARGIN,\n            y: itemY - Math.sin(angle) * MARGIN,\n        };\n        var smoothConnector = item.labelLine.smooth;\n        var path = [];\n        var dx = endPoint.x - center.x;\n        var dy = endPoint.y - center.y;\n        var endAngle = Math.atan(dy / dx);\n        // 第三象限 & 第四象限\n        if (dx < 0) {\n            endAngle += Math.PI;\n        }\n        // 默认 smooth, undefined 也为 smooth\n        if (smoothConnector === false) {\n            if (!isObject(item.labelLine)) {\n                // labelLine: true\n                item.labelLine = {};\n            }\n            // 表示弧线的方向，0 表示从起点到终点沿逆时针画弧, 1 表示顺时针\n            var sweepFlag = 0;\n            // 第一象限\n            if ((angle < 0 && angle > -Math.PI / 2) || angle > Math.PI * 1.5) {\n                if (endPoint.y > startPoint.y) {\n                    sweepFlag = 1;\n                }\n            }\n            // 第二象限\n            if (angle >= 0 && angle < Math.PI / 2) {\n                if (endPoint.y > startPoint.y) {\n                    sweepFlag = 1;\n                }\n            }\n            // 第三象限\n            if (angle >= Math.PI / 2 && angle < Math.PI) {\n                if (startPoint.y > endPoint.y) {\n                    sweepFlag = 1;\n                }\n            }\n            // 第四象限\n            if (angle < -Math.PI / 2 || (angle >= Math.PI && angle < Math.PI * 1.5)) {\n                if (startPoint.y > endPoint.y) {\n                    sweepFlag = 1;\n                }\n            }\n            var distance = labelOffset / 2 > 4 ? 4 : Math.max(labelOffset / 2 - 1, 0);\n            var breakPoint = polarToCartesian(center.x, center.y, radius + distance, angle);\n            // 圆弧的结束点\n            var breakPoint3 = polarToCartesian(center.x, center.y, radius + labelOffset / 2, endAngle);\n            /**\n             * @example\n             * M 100 100 L100 90 A 50 50 0 0 0 150 50\n             * 移动至 (100, 100), 连接到 (100, 90), 以 (50, 50) 为圆心，绘制圆弧至 (150, 50);\n             * A 命令的第 4 个参数 large-arc-flag, 决定弧线是大于还是小于 180 度: 0 表示小角度弧，1 表示大角\n             * 第 5 个参数: 是否顺时针绘制\n             */\n            // 默认小弧\n            var largeArcFlag = 0;\n            // step1: 移动至起点\n            path.push(\"M \".concat(startPoint.x, \" \").concat(startPoint.y));\n            // step2: 连接拐点\n            path.push(\"L \".concat(breakPoint.x, \" \").concat(breakPoint.y));\n            // step3: 绘制圆弧 至 结束点\n            path.push(\"A \".concat(center.x, \" \").concat(center.y, \" 0 \").concat(largeArcFlag, \" \").concat(sweepFlag, \" \").concat(breakPoint3.x, \" \").concat(breakPoint3.y));\n            // step4: 连接结束点\n            path.push(\"L \".concat(endPoint.x, \" \").concat(endPoint.y));\n        }\n        else {\n            var breakPoint = polarToCartesian(center.x, center.y, radius + (labelOffset / 2 > 4 ? 4 : Math.max(labelOffset / 2 - 1, 0)), angle);\n            // G2 旧的拉线\n            // path.push('Q', `${breakPoint.x}`, `${breakPoint.y}`, `${endPoint.x}`, `${endPoint.y}`);\n            var xSign = startPoint.x < center.x ? 1 : -1;\n            // step1: 连接结束点\n            path.push(\"M \".concat(endPoint.x, \" \").concat(endPoint.y));\n            var slope1 = (startPoint.y - center.y) / (startPoint.x - center.x);\n            var slope2 = (endPoint.y - center.y) / (endPoint.x - center.x);\n            if (Math.abs(slope1 - slope2) > Math.pow(Math.E, -16)) {\n                // step2: 绘制 curve line (起点 & 结合点与圆心的斜率不等时, 由于存在误差, 使用近似处理)\n                path.push.apply(path, [\n                    'C',\n                    endPoint.x + xSign * 4,\n                    endPoint.y,\n                    2 * breakPoint.x - startPoint.x,\n                    2 * breakPoint.y - startPoint.y,\n                    startPoint.x,\n                    startPoint.y,\n                ]);\n            }\n            // step3: 连接至起点\n            path.push(\"L \".concat(startPoint.x, \" \").concat(startPoint.y));\n        }\n        item.labelLine.path = path.join(' ');\n    }\n}\n/**\n * 饼图 outer-label 布局, 适用于 type = pie 且 label offset > 0 的标签\n */\nexport function pieOuterLabelLayout(originalItems, labels, shapes, region) {\n    var e_1, _a;\n    var items = filter(originalItems, function (item) { return !isNil(item); });\n    /** 坐标系 */\n    var coordinate = labels[0] && labels[0].get('coordinate');\n    if (!coordinate) {\n        return;\n    }\n    /** 坐标圆心 */\n    var center = coordinate.getCenter();\n    /** 圆半径 */\n    var radius = coordinate.getRadius();\n    /** label shapes */\n    var labelsMap = {};\n    try {\n        for (var labels_1 = __values(labels), labels_1_1 = labels_1.next(); !labels_1_1.done; labels_1_1 = labels_1.next()) {\n            var labelShape = labels_1_1.value;\n            labelsMap[labelShape.get('id')] = labelShape;\n        }\n    }\n    catch (e_1_1) { e_1 = { error: e_1_1 }; }\n    finally {\n        try {\n            if (labels_1_1 && !labels_1_1.done && (_a = labels_1.return)) _a.call(labels_1);\n        }\n        finally { if (e_1) throw e_1.error; }\n    }\n    // note labelHeight 可以控制 label 的行高\n    var labelHeight = get(items[0], 'labelHeight', 14);\n    var labelOffset = get(items[0], 'offset', 0);\n    if (labelOffset <= 0) {\n        return;\n    }\n    var LEFT_HALF_KEY = 'left';\n    var RIGHT_HALF_KEY = 'right';\n    // step 1: separate labels\n    var separateLabels = groupBy(items, function (item) { return (item.x < center.x ? LEFT_HALF_KEY : RIGHT_HALF_KEY); });\n    var start = coordinate.start, end = coordinate.end;\n    // step2: calculate totalHeight\n    var totalHeight = Math.min((radius + labelOffset + labelHeight) * 2, coordinate.getHeight());\n    var totalR = totalHeight / 2;\n    /** labels 容器的范围(后续根据组件的布局设计进行调整) */\n    var labelsContainerRange = {\n        minX: start.x,\n        maxX: end.x,\n        minY: center.y - totalR,\n        maxY: center.y + totalR,\n    };\n    // step 3: antiCollision\n    each(separateLabels, function (half, key) {\n        var maxLabelsCountForOneSide = Math.floor(totalHeight / labelHeight);\n        if (half.length > maxLabelsCountForOneSide) {\n            half.sort(function (a, b) {\n                // sort by percentage DESC\n                return b.percent - a.percent;\n            });\n            each(half, function (labelItem, idx) {\n                if (idx + 1 > maxLabelsCountForOneSide) {\n                    labelsMap[labelItem.id].set('visible', false);\n                    labelItem.invisible = true;\n                }\n            });\n        }\n        antiCollision(half, labelHeight, labelsContainerRange);\n    });\n    each(separateLabels, function (half, key) {\n        each(half, function (item) {\n            var isRight = key === RIGHT_HALF_KEY;\n            var labelShape = labelsMap[item.id];\n            // because group could not effect content-shape, should set content-shape position manually\n            var content = labelShape.getChildByIndex(0);\n            // textShape 发生过调整\n            if (content) {\n                var r = radius + labelOffset;\n                // (x - cx)^2 + (y - cy)^2 = totalR^2\n                var dy = item.y - center.y;\n                var rPow2 = Math.pow(r, 2);\n                var dyPow2 = Math.pow(dy, 2);\n                var dxPow2 = rPow2 - dyPow2 > 0 ? rPow2 - dyPow2 : 0;\n                var dx = Math.sqrt(dxPow2);\n                var dx_offset = Math.abs(Math.cos(item.angle) * r);\n                if (!isRight) {\n                    // left\n                    item.x = center.x - Math.max(dx, dx_offset);\n                }\n                else {\n                    // right\n                    item.x = center.x + Math.max(dx, dx_offset);\n                }\n            }\n            // adjust labelShape\n            if (content) {\n                content.attr('y', item.y);\n                content.attr('x', item.x);\n            }\n            drawLabelline(item, coordinate);\n        });\n    });\n}\n//# sourceMappingURL=outer.js.map","import { BBox } from '../../../util/bbox';\nimport { isContrastColorWhite } from '../../../util/color';\nexport function adjustColor(items, labels, shapes) {\n    if (shapes.length === 0) {\n        return;\n    }\n    var element = shapes[0].get('element');\n    var theme = element.geometry.theme;\n    var _a = theme.labels || {}, fillColorLight = _a.fillColorLight, fillColorDark = _a.fillColorDark;\n    shapes.forEach(function (shape, index) {\n        var label = labels[index];\n        var textShape = label.find(function (el) { return el.get('type') === 'text'; });\n        var shapeBBox = BBox.fromObject(shape.getBBox());\n        var textBBox = BBox.fromObject(textShape.getCanvasBBox());\n        var overflow = !shapeBBox.contains(textBBox);\n        var bgColor = shape.attr('fill');\n        var fillWhite = isContrastColorWhite(bgColor);\n        if (!overflow) {\n            if (fillWhite) {\n                if (fillColorLight) {\n                    textShape.attr('fill', fillColorLight);\n                }\n            }\n            else {\n                if (fillColorDark) {\n                    textShape.attr('fill', fillColorDark);\n                }\n            }\n        }\n        else {\n            // 出现溢出直接应用 overflowLabel 样式\n            textShape.attr(theme.overflowLabels.style);\n        }\n    });\n}\n//# sourceMappingURL=adjust-color.js.map","import { __read, __spreadArray } from \"tslib\";\nimport { each, groupBy, uniq, map, size } from '@antv/util';\nimport { checkShapeOverlap } from '../../util';\nfunction filterLabel(labels) {\n    var MAX_CNT = 500; // 最多显示 500 个数据标签\n    var filteredLabels = [];\n    var pages = Math.max(Math.floor(labels.length / MAX_CNT), 1);\n    each(labels, function (label, idx) {\n        if (idx % pages === 0) {\n            filteredLabels.push(label);\n        }\n        else {\n            label.set('visible', false);\n        }\n    });\n    return filteredLabels;\n}\n/**\n * 为 interval geometry 定制的数据标签重叠自动隐藏布局方法\n * @param items\n * @param labels\n * @param shapes\n */\nexport function intervalHideOverlap(items, labels, shapes) {\n    var _a;\n    if (shapes.length === 0) {\n        return;\n    }\n    var element = (_a = shapes[0]) === null || _a === void 0 ? void 0 : _a.get('element');\n    var geometry = element === null || element === void 0 ? void 0 : element.geometry;\n    if (!geometry || geometry.type !== 'interval') {\n        return;\n    }\n    var filteredLabels = filterLabel(labels);\n    var _b = __read(geometry.getXYFields(), 1), xField = _b[0];\n    var dones = [];\n    var todo = [];\n    var groupedLabels = groupBy(filteredLabels, function (label) { return label.get('data')[xField]; });\n    var xValues = uniq(map(filteredLabels, function (label) { return label.get('data')[xField]; }));\n    var xValue;\n    filteredLabels.forEach(function (label) {\n        label.set('visible', true);\n    });\n    var addCurrentGroup = function (curItems) {\n        if (curItems) {\n            if (curItems.length) {\n                // 最后一个\n                todo.push(curItems.pop());\n            }\n            todo.push.apply(todo, __spreadArray([], __read(curItems), false));\n        }\n    };\n    if (size(xValues) > 0) {\n        // 第一组\n        xValue = xValues.shift();\n        addCurrentGroup(groupedLabels[xValue]);\n    }\n    if (size(xValues) > 0) {\n        // 最后一组\n        xValue = xValues.pop();\n        addCurrentGroup(groupedLabels[xValue]);\n    }\n    each(xValues.reverse(), function (val) {\n        // 其他组\n        addCurrentGroup(groupedLabels[val]);\n    });\n    while (todo.length > 0) {\n        var cur = todo.shift();\n        if (cur.get('visible')) {\n            if (checkShapeOverlap(cur, dones)) {\n                cur.set('visible', false);\n            }\n            else {\n                dones.push(cur);\n            }\n        }\n    }\n}\n//# sourceMappingURL=hide-overlap.js.map","import { __values } from \"tslib\";\nimport { each, get, isNil, deepMix, groupBy } from '@antv/util';\nimport { polarToCartesian } from '../../../../util/graphics';\nimport { antiCollision } from './util';\nimport { translate } from '../../../../util/transform';\n/** 拐点偏移量, 暂不可配置 */\nvar INFLECTION_OFFSET = 4;\n/** 标签偏移量, distance between label and edge: offsetX */\nvar LABEL_OFFSET_X = 4;\n/** 标签与牵引线的偏移量 */\nvar LABEL_TEXT_LINE_OFFSET = 4;\nfunction drawLabelline(item, coordinate, inRight) {\n    /** 坐标圆心 */\n    var center = coordinate.getCenter();\n    /** 圆半径 */\n    var radius = coordinate.getRadius();\n    var startPoint = {\n        x: item.x - (inRight ? LABEL_TEXT_LINE_OFFSET : -LABEL_TEXT_LINE_OFFSET),\n        y: item.y,\n    };\n    var inflectionPoint = polarToCartesian(center.x, center.y, radius + INFLECTION_OFFSET, item.angle);\n    var p1 = { x: startPoint.x, y: startPoint.y };\n    var p2 = { x: inflectionPoint.x, y: inflectionPoint.y };\n    var endPoint = polarToCartesian(center.x, center.y, radius, item.angle);\n    var path = '';\n    // 文本被调整下去了，则添加拐点连接线\n    if (startPoint.y !== inflectionPoint.y) {\n        var offset = inRight ? 4 : -4;\n        p1.y = startPoint.y;\n        /** 是否在第一象限 */\n        if (item.angle < 0 && item.angle >= -Math.PI / 2) {\n            p1.x = Math.max(inflectionPoint.x, startPoint.x - offset);\n            if (startPoint.y < inflectionPoint.y) {\n                p2.y = p1.y;\n            }\n            else {\n                p2.y = inflectionPoint.y;\n                p2.x = Math.max(p2.x, p1.x - offset);\n            }\n        }\n        /** 是否在 第二象限 */\n        if (item.angle > 0 && item.angle < Math.PI / 2) {\n            p1.x = Math.max(inflectionPoint.x, startPoint.x - offset);\n            if (startPoint.y > inflectionPoint.y) {\n                p2.y = p1.y;\n            }\n            else {\n                p2.y = inflectionPoint.y;\n                p2.x = Math.max(p2.x, p1.x - offset);\n            }\n        }\n        /** 是否在 第三象限 */\n        if (item.angle > Math.PI / 2) {\n            p1.x = Math.min(inflectionPoint.x, startPoint.x - offset);\n            if (startPoint.y > inflectionPoint.y) {\n                p2.y = p1.y;\n            }\n            else {\n                p2.y = inflectionPoint.y;\n                p2.x = Math.min(p2.x, p1.x - offset);\n            }\n        }\n        /** 是否在 第四象限 */\n        if (item.angle < -Math.PI / 2) {\n            p1.x = Math.min(inflectionPoint.x, startPoint.x - offset);\n            if (startPoint.y < inflectionPoint.y) {\n                p2.y = p1.y;\n            }\n            else {\n                p2.y = inflectionPoint.y;\n                p2.x = Math.min(p2.x, p1.x - offset);\n            }\n        }\n    }\n    path = [\n        \"M \".concat(startPoint.x, \",\").concat(startPoint.y),\n        \"L \".concat(p1.x, \",\").concat(p1.y),\n        \"L \".concat(p2.x, \",\").concat(p2.y),\n        \"L \".concat(inflectionPoint.x, \",\").concat(inflectionPoint.y),\n        \"L \".concat(endPoint.x, \",\").concat(endPoint.y),\n    ].join(' ');\n    item.labelLine = deepMix({}, item.labelLine, { path: path });\n}\n/**\n * 饼图标签 spider 布局, 只适用于 pie-spider 的标签类型\n * region 应该是 labelsRenderer 容器的范围限制(便于后续组件间布局)\n */\nexport function pieSpiderLabelLayout(items, labels, shapes, region) {\n    var e_1, _a;\n    /** 坐标系 */\n    var coordinate = labels[0] && labels[0].get('coordinate');\n    if (!coordinate) {\n        return;\n    }\n    /** 坐标圆心 */\n    var center = coordinate.getCenter();\n    /** 圆半径 */\n    var radius = coordinate.getRadius();\n    /** label shapes */\n    var labelsMap = {};\n    try {\n        for (var labels_1 = __values(labels), labels_1_1 = labels_1.next(); !labels_1_1.done; labels_1_1 = labels_1.next()) {\n            var labelShape = labels_1_1.value;\n            labelsMap[labelShape.get('id')] = labelShape;\n        }\n    }\n    catch (e_1_1) { e_1 = { error: e_1_1 }; }\n    finally {\n        try {\n            if (labels_1_1 && !labels_1_1.done && (_a = labels_1.return)) _a.call(labels_1);\n        }\n        finally { if (e_1) throw e_1.error; }\n    }\n    var labelHeight = get(items[0], 'labelHeight', 14);\n    var labelOffset = Math.max(get(items[0], 'offset', 0), INFLECTION_OFFSET);\n    // step 1: adjust items to spider\n    each(items, function (item) {\n        if (!item)\n            return;\n        var label = get(labelsMap, [item.id]);\n        if (!label)\n            return;\n        var inRight = item.x > center.x || (item.x === center.x && item.y > center.y);\n        var offsetX = !isNil(item.offsetX) ? item.offsetX : LABEL_OFFSET_X;\n        var inflectionPoint = polarToCartesian(center.x, center.y, radius + INFLECTION_OFFSET, item.angle);\n        var totalOffset = labelOffset + offsetX;\n        item.x = center.x + (inRight ? 1 : -1) * (radius + totalOffset);\n        item.y = inflectionPoint.y;\n    });\n    var start = coordinate.start, end = coordinate.end;\n    var LEFT_HALF_KEY = 'left';\n    var RIGHT_HALF_KEY = 'right';\n    // step 1: separate labels\n    var separateLabels = groupBy(items, function (item) { return (item.x < center.x ? LEFT_HALF_KEY : RIGHT_HALF_KEY); });\n    // step2: calculate totalHeight\n    var totalHeight = (radius + labelOffset) * 2 + labelHeight;\n    each(separateLabels, function (half) {\n        var halfHeight = half.length * labelHeight;\n        if (halfHeight > totalHeight) {\n            totalHeight = Math.min(halfHeight, Math.abs(start.y - end.y));\n        }\n    });\n    /** labels 容器的范围(后续根据组件的布局设计进行调整) */\n    var labelsContainerRange = {\n        minX: start.x,\n        maxX: end.x,\n        minY: center.y - totalHeight / 2,\n        maxY: center.y + totalHeight / 2,\n    };\n    // step 3: antiCollision\n    each(separateLabels, function (half, key) {\n        var maxLabelsCountForOneSide = totalHeight / labelHeight;\n        if (half.length > maxLabelsCountForOneSide) {\n            half.sort(function (a, b) {\n                // sort by percentage DESC\n                return b.percent - a.percent;\n            });\n            each(half, function (labelItem, idx) {\n                if (idx > maxLabelsCountForOneSide) {\n                    labelsMap[labelItem.id].set('visible', false);\n                    labelItem.invisible = true;\n                }\n            });\n        }\n        antiCollision(half, labelHeight, labelsContainerRange);\n    });\n    var startY = labelsContainerRange.minY;\n    var endY = labelsContainerRange.maxY;\n    // step4: applyTo labels and adjust labelLines\n    each(separateLabels, function (half, key) {\n        var inRight = key === RIGHT_HALF_KEY;\n        each(half, function (item) {\n            var label = get(labelsMap, item && [item.id]);\n            if (!label) {\n                return;\n            }\n            // out of range, hidden\n            if (item.y < startY || item.y > endY) {\n                label.set('visible', false);\n                return;\n            }\n            var labelContent = label.getChildByIndex(0);\n            var box = labelContent.getCanvasBBox();\n            var originalPos = { x: inRight ? box.x : box.maxX, y: box.y + box.height / 2 /** vertical-align: middle */ };\n            translate(labelContent, item.x - originalPos.x /** 从 pos.x 移动到 item.x */, item.y - originalPos.y);\n            // adjust labelLines\n            if (item.labelLine) {\n                drawLabelline(item, coordinate, inRight);\n            }\n        });\n    });\n}\n//# sourceMappingURL=spider.js.map","import { isNil } from '@antv/util';\n/**\n * @ignore\n * 单个 shape 动画\n * 渐现动画\n * @param shape 执行动画的图形元素\n * @param animateCfg 动画配置\n * @param cfg 额外信息\n */\nexport function fadeIn(shape, animateCfg, cfg) {\n    var endState = {\n        fillOpacity: isNil(shape.attr('fillOpacity')) ? 1 : shape.attr('fillOpacity'),\n        strokeOpacity: isNil(shape.attr('strokeOpacity')) ? 1 : shape.attr('strokeOpacity'),\n        opacity: isNil(shape.attr('opacity')) ? 1 : shape.attr('opacity'),\n    };\n    shape.attr({\n        fillOpacity: 0,\n        strokeOpacity: 0,\n        opacity: 0,\n    });\n    shape.animate(endState, animateCfg);\n}\n/**\n * @ignore\n * 单个 shape 动画\n * 渐隐动画\n * @param shape 执行动画的图形元素\n * @param animateCfg 动画配置\n * @param cfg 额外信息\n */\nexport function fadeOut(shape, animateCfg, cfg) {\n    var endState = {\n        fillOpacity: 0,\n        strokeOpacity: 0,\n        opacity: 0,\n    };\n    var easing = animateCfg.easing, duration = animateCfg.duration, delay = animateCfg.delay;\n    shape.animate(endState, duration, easing, function () {\n        shape.remove(true);\n    }, delay);\n}\n//# sourceMappingURL=fade.js.map","import { doScaleAnimate } from './util';\n/**\n * @ignore\n * 入场动画\n * x 方向的生长\n * @param element 执行动画的元素\n * @param animateCfg 动画配置\n * @param cfg 额外信息\n */\nexport function growInX(element, animateCfg, cfg) {\n    var coordinate = cfg.coordinate, minYPoint = cfg.minYPoint;\n    doScaleAnimate(element, animateCfg, coordinate, minYPoint, 'x');\n}\n/**\n * @ignore\n * 入场动画\n * y 轴方向上的生长\n * @param element 执行动画的元素\n * @param animateCfg 动画配置\n * @param cfg 额外信息\n */\nexport function growInY(element, animateCfg, cfg) {\n    var coordinate = cfg.coordinate, minYPoint = cfg.minYPoint;\n    doScaleAnimate(element, animateCfg, coordinate, minYPoint, 'y');\n}\n/**\n * @ignore\n * 入场\n * 中心点的向四周的生长动画\n * @param element 执行动画的元素\n * @param animateCfg 动画配置\n * @param cfg 额外信息\n */\nexport function growInXY(element, animateCfg, cfg) {\n    var coordinate = cfg.coordinate, minYPoint = cfg.minYPoint;\n    doScaleAnimate(element, animateCfg, coordinate, minYPoint, 'xy');\n}\n//# sourceMappingURL=grow-in.js.map","import { ext } from '@antv/matrix-util';\n/**\n * @ignore\n * 沿着 x 方向放大的动画\n * @param shape\n * @param animateCfg\n * @param shapeModel\n */\nexport function scaleInX(shape, animateCfg, cfg) {\n    var box = shape.getBBox();\n    var mappingData = shape.get('origin').mappingData;\n    var points = mappingData.points;\n    // x 数值如果为负值，那么应该从右往左生长\n    var x = points[0].y - points[1].y > 0 ? box.maxX : box.minX;\n    var y = (box.minY + box.maxY) / 2;\n    shape.applyToMatrix([x, y, 1]);\n    var matrix = ext.transform(shape.getMatrix(), [\n        ['t', -x, -y],\n        ['s', 0.01, 1],\n        ['t', x, y],\n    ]);\n    shape.setMatrix(matrix);\n    shape.animate({\n        matrix: ext.transform(shape.getMatrix(), [\n            ['t', -x, -y],\n            ['s', 100, 1],\n            ['t', x, y],\n        ]),\n    }, animateCfg);\n}\n/**\n * @ignore\n * 沿着 y 方向放大的动画\n * @param shape\n * @param animateCfg\n * @param shapeModel\n */\nexport function scaleInY(shape, animateCfg, cfg) {\n    var box = shape.getBBox();\n    var mappingData = shape.get('origin').mappingData;\n    var x = (box.minX + box.maxX) / 2;\n    var points = mappingData.points;\n    // 数值如果为负值，那么应该从上往下生长，通过 shape 的关键点进行判断\n    var y = points[0].y - points[1].y <= 0 ? box.maxY : box.minY;\n    shape.applyToMatrix([x, y, 1]);\n    var matrix = ext.transform(shape.getMatrix(), [\n        ['t', -x, -y],\n        ['s', 1, 0.01],\n        ['t', x, y],\n    ]);\n    shape.setMatrix(matrix);\n    shape.animate({\n        matrix: ext.transform(shape.getMatrix(), [\n            ['t', -x, -y],\n            ['s', 1, 100],\n            ['t', x, y],\n        ]),\n    }, animateCfg);\n}\n//# sourceMappingURL=scale-in.js.map","import { __assign } from \"tslib\";\nimport { isFunction } from '@antv/util';\nimport { getCoordinateClipCfg } from '../../util/coordinate';\n/**\n * @ignore\n * 整体动画\n * 划入入场动画效果\n * @todo 放两张直角坐标系和极坐标系的图\n * @param element 参与动画的图形元素\n * @param animateCfg 动画配置\n * @param cfg 额外信息\n */\nexport function waveIn(element, animateCfg, cfg) {\n    var _a = getCoordinateClipCfg(cfg.coordinate, 20), type = _a.type, startState = _a.startState, endState = _a.endState; // 根据坐标系类型获取整体的剪切区域配置信息\n    var clipShape = element.setClip({\n        type: type,\n        attrs: startState,\n    }); // 为 shape 设置剪切区域\n    // 更新 动画 获取了 toAttrs 需要重新更新上去\n    if (cfg.toAttrs) {\n        element.attr(cfg.toAttrs);\n    }\n    // 对剪切图形做动画\n    clipShape.animate(endState, __assign(__assign({}, animateCfg), { callback: function () {\n            if (element && !element.get('destroyed')) {\n                element.set('clipShape', null);\n            }\n            clipShape.remove(true); // 动画结束需要将剪切图形销毁\n            isFunction(animateCfg.callback) && animateCfg.callback();\n        } }));\n}\n//# sourceMappingURL=wave-in.js.map","/**\n * @ignore\n * 坐标移动动画\n * @param shape 图形\n * @param animateCfg\n * @param cfg\n */\nexport function positionUpdate(shape, animateCfg, cfg) {\n    var toAttrs = cfg.toAttrs;\n    // @ts-ignore\n    var x = toAttrs.x;\n    // @ts-ignore\n    var y = toAttrs.y;\n    // @ts-ignore\n    delete toAttrs.x;\n    // @ts-ignore\n    delete toAttrs.y;\n    shape.attr(toAttrs);\n    shape.animate({\n        x: x,\n        y: y,\n    }, animateCfg);\n}\n//# sourceMappingURL=position-update.js.map","/**\n * @ignore\n * 入场动画\n * path 的入场动画\n * @param element 执行动画的元素\n * @param animateCfg 动画配置\n * @param cfg 额外信息\n */\nexport function pathIn(element, animateCfg, cfg) {\n    // @ts-ignore\n    var length = element.getTotalLength();\n    // 设置虚线样式\n    element.attr('lineDash', [length]);\n    element.animate(function (ratio) {\n        return {\n            // 对虚线偏移量做动画\n            lineDashOffset: (1 - ratio) * length,\n        };\n    }, animateCfg);\n}\n//# sourceMappingURL=path-in.js.map","/**\n * 需要从轴配置中提取出来作为 meta 的属性 key 列表\n */\nexport var AXIS_META_CONFIG_KEYS = [\n    'type',\n    'alias',\n    'tickCount',\n    'tickInterval',\n    'min',\n    'max',\n    'nice',\n    'minLimit',\n    'maxLimit',\n    // 坐标轴的范围\n    'range',\n    'tickMethod',\n    // type: 'log' 的底\n    'base',\n    // type: 'exp' 的指数\n    'exponent',\n    // time 类型的格式化\n    'mask',\n    // 是否同步\n    'sync',\n];\n//# sourceMappingURL=constant.js.map","/**\n * Simplified from https://github.com/zertosh/invariant.\n */\nimport { __spreadArray } from \"tslib\";\nexport var LEVEL;\n(function (LEVEL) {\n    LEVEL[\"ERROR\"] = \"error\";\n    LEVEL[\"WARN\"] = \"warn\";\n    LEVEL[\"INFO\"] = \"log\";\n})(LEVEL || (LEVEL = {}));\nvar BRAND = 'AntV/G2Plot';\n/**\n * 获取错误消息\n * @param format\n * @param args\n */\nfunction getMessage(format) {\n    var args = [];\n    for (var _i = 1; _i < arguments.length; _i++) {\n        args[_i - 1] = arguments[_i];\n    }\n    var argIndex = 0;\n    return \"\".concat(BRAND, \": \").concat(format.replace(/%s/g, function () { return \"\".concat(args[argIndex++]); }));\n}\n/**\n * invariant error\n * @param condition\n * @param format\n * @param args\n */\nexport function invariant(condition, format) {\n    var args = [];\n    for (var _i = 2; _i < arguments.length; _i++) {\n        args[_i - 2] = arguments[_i];\n    }\n    if (!condition) {\n        var error = new Error(getMessage.apply(void 0, __spreadArray([format], args, false)));\n        error.name = BRAND;\n        // error.framesToPop = 1; // we don't care about invariant's own frame\n        throw error;\n    }\n}\n/**\n * 打印语句\n * @param level\n * @param condition\n * @param format\n * @param args\n */\nexport function log(level, condition, format) {\n    var args = [];\n    for (var _i = 3; _i < arguments.length; _i++) {\n        args[_i - 3] = arguments[_i];\n    }\n    if (!condition) {\n        console[level](getMessage.apply(void 0, __spreadArray([format], args, false)));\n    }\n}\n//# sourceMappingURL=invariant.js.map","/**\n * 类似 lodash.pick 的方法\n * @param obj\n * @param keys\n */\nexport function pick(obj, keys) {\n    var r = {};\n    if (obj !== null && typeof obj === 'object') {\n        keys.forEach(function (key) {\n            var v = obj[key];\n            if (v !== undefined) {\n                r[key] = v;\n            }\n        });\n    }\n    return r;\n}\n//# sourceMappingURL=pick.js.map","import { __assign } from \"tslib\";\nimport { filter, get, isNumber } from '@antv/util';\nimport { LEVEL, log } from './invariant';\nimport { pick } from './pick';\n/**\n * 查看数据是否是全负数、或者全正数\n * @param data\n * @param field\n */\nexport function adjustYMetaByZero(data, field) {\n    if (!data)\n        return {};\n    // 过滤出数字数据\n    var numberData = data.filter(function (datum) {\n        var v = get(datum, [field]);\n        return isNumber(v) && !isNaN(v);\n    });\n    var gtZero = numberData.every(function (datum) { return get(datum, [field]) >= 0; });\n    var ltZero = numberData.every(function (datum) { return get(datum, [field]) <= 0; });\n    // 目前是增量更新，对 { min: 0, max: undefined } 进行 update({ max: 0 }) 会得到 { min: 0, max: 0 }\n    if (gtZero) {\n        return { min: 0 };\n    }\n    if (ltZero) {\n        return { max: 0 };\n    }\n    return {};\n}\n/**\n * 转换数据格式为带有节点与边的数据格式\n * @param data\n * @param sourceField\n * @param targetField\n * @param weightField\n * @param rawFields 存放一些原数据\n */\nexport function transformDataToNodeLinkData(data, sourceField, targetField, weightField, rawFields) {\n    if (rawFields === void 0) { rawFields = []; }\n    if (!Array.isArray(data)) {\n        return {\n            nodes: [],\n            links: [],\n        };\n    }\n    //   const nodes = [];\n    var links = [];\n    // 先使用对象方式存储\n    var nodesMap = {};\n    var nodesIndex = -1;\n    // 数组变换成 chord layout 的数据结构\n    data.forEach(function (datum) {\n        var source = datum[sourceField];\n        var target = datum[targetField];\n        var weight = datum[weightField];\n        var rawData = pick(datum, rawFields);\n        // source node\n        if (!nodesMap[source]) {\n            nodesMap[source] = __assign({ id: ++nodesIndex, name: source }, rawData);\n        }\n        if (!nodesMap[target]) {\n            nodesMap[target] = __assign({ id: ++nodesIndex, name: target }, rawData);\n        }\n        // links\n        links.push(__assign({ source: nodesMap[source].id, target: nodesMap[target].id, \n            // sourceName: source,\n            // targetName: target,\n            value: weight }, rawData));\n    });\n    return {\n        // 需要按照 id 的顺序\n        nodes: Object.values(nodesMap).sort(function (a, b) { return a.id - b.id; }),\n        links: links,\n    };\n}\n/**\n * 处理不合法的数据(过滤 非数值型 和 NaN，保留 null)\n * @param data\n * @param angleField\n */\nexport function processIllegalData(data, field) {\n    var processData = filter(data, function (d) {\n        var v = d[field];\n        return v === null || (typeof v === 'number' && !isNaN(v));\n    });\n    // 打印异常数据情况\n    log(LEVEL.WARN, processData.length === data.length, 'illegal data existed in chart data.');\n    return processData;\n}\n//# sourceMappingURL=data.js.map","var MAX_MIX_LEVEL = 5; // 最大比对层级\nvar toString = {}.toString;\n// 类型检测\nvar isType = function (value, type) { return toString.call(value) === '[object ' + type + ']'; };\nvar isArray = function (value) {\n    return isType(value, 'Array');\n};\nvar isObjectLike = function (value) {\n    /**\n     * isObjectLike({}) => true\n     * isObjectLike([1, 2, 3]) => true\n     * isObjectLike(Function) => false\n     */\n    return typeof value === 'object' && value !== null;\n};\nvar isPlainObject = function (value) {\n    /**\n     * isObjectLike(new Foo) => false\n     * isObjectLike([1, 2, 3]) => false\n     * isObjectLike({ x: 0, y: 0 }) => true\n     */\n    if (!isObjectLike(value) || !isType(value, 'Object')) {\n        return false;\n    }\n    var proto = value;\n    while (Object.getPrototypeOf(proto) !== null) {\n        proto = Object.getPrototypeOf(proto);\n    }\n    return Object.getPrototypeOf(value) === proto;\n};\n/***\n * @param {any} dist\n * @param {any} src\n * @param {number} level 当前层级\n * @param {number} maxLevel 最大层级\n */\nvar deep = function (dist, src, level, maxLevel) {\n    level = level || 0;\n    maxLevel = maxLevel || MAX_MIX_LEVEL;\n    for (var key in src) {\n        if (Object.prototype.hasOwnProperty.call(src, key)) {\n            var value = src[key];\n            if (!value) {\n                // null 、 undefined 等情况直接赋值\n                dist[key] = value;\n            }\n            else {\n                if (isPlainObject(value)) {\n                    if (!isPlainObject(dist[key])) {\n                        dist[key] = {};\n                    }\n                    if (level < maxLevel) {\n                        deep(dist[key], value, level + 1, maxLevel);\n                    }\n                    else {\n                        // 层级过深直接赋值，性能问题\n                        dist[key] = src[key];\n                    }\n                }\n                else if (isArray(value)) {\n                    dist[key] = [];\n                    dist[key] = dist[key].concat(value);\n                }\n                else {\n                    dist[key] = value;\n                }\n            }\n        }\n    }\n};\n/**\n * deepAssign 功能类似 deepMix\n * 不同点在于 deepAssign 会将 null undefined 等类型直接覆盖给 source\n * 详细参考： __tests__/unit/utils/deep-assign-spec.ts\n */\nexport var deepAssign = function (rst) {\n    var args = [];\n    for (var _i = 1; _i < arguments.length; _i++) {\n        args[_i - 1] = arguments[_i];\n    }\n    for (var i = 0; i < args.length; i += 1) {\n        deep(rst, args[i]);\n    }\n    return rst;\n};\n//# sourceMappingURL=deep-assign.js.map","var ctx;\n/**\n * 获取 canvas context\n */\nexport function getCanvasContext() {\n    if (!ctx) {\n        ctx = document.createElement('canvas').getContext('2d');\n    }\n    return ctx;\n}\n//# sourceMappingURL=context.js.map","/**\n * get the element's bounding size\n * @param ele dom element\n * @returns the element width and height\n */\nexport function getContainerSize(ele) {\n    if (!ele) {\n        return { width: 0, height: 0 };\n    }\n    var style = getComputedStyle(ele);\n    return {\n        width: (ele.clientWidth || parseInt(style.width, 10)) -\n            parseInt(style.paddingLeft, 10) -\n            parseInt(style.paddingRight, 10),\n        height: (ele.clientHeight || parseInt(style.height, 10)) -\n            parseInt(style.paddingTop, 10) -\n            parseInt(style.paddingBottom, 10),\n    };\n}\n//# sourceMappingURL=dom.js.map","/**\n * 类似 lodash.flow 的方法\n * @param flows\n */\nexport function flow() {\n    var flows = [];\n    for (var _i = 0; _i < arguments.length; _i++) {\n        flows[_i] = arguments[_i];\n    }\n    return function (param) {\n        return flows.reduce(function (result, f) {\n            return f(result);\n        }, param);\n    };\n}\n//# sourceMappingURL=flow.js.map","import { get, reduce } from '@antv/util';\n/**\n * 在 View 中查找第一个指定 type 类型的 geometry\n * @param view\n * @param type\n */\nexport function findGeometry(view, type) {\n    return view.geometries.find(function (g) { return g.type === type; });\n}\n/**\n * 获取 View 的 所有 elements\n */\nexport function getAllElements(view) {\n    return reduce(view.geometries, function (r, geometry) {\n        return r.concat(geometry.elements);\n    }, []);\n}\n/**\n * 递归获取 View 的 所有 elements, 包括 View 的子 View\n */\nexport function getAllElementsRecursively(view) {\n    if (get(view, ['views', 'length'], 0) <= 0) {\n        return getAllElements(view);\n    }\n    return reduce(view.views, function (ele, subView) {\n        return ele.concat(getAllElementsRecursively(subView));\n    }, getAllElements(view));\n}\n/**\n * 递归获取 View 的 所有 geometries, 包括 View 的子 View\n */\nexport function getAllGeometriesRecursively(view) {\n    if (get(view, ['views', 'length'], 0) <= 0) {\n        return view.geometries;\n    }\n    return reduce(view.views, function (ele, subView) {\n        return ele.concat(subView.geometries);\n    }, view.geometries);\n}\n//# sourceMappingURL=geometry.js.map","/**\n * @desc simple kebabCase like lodash\n *\n * kebabCase('fooBar'); => 'foo-bar'\n */\nexport function kebabCase(word) {\n    if (!word) {\n        return word;\n    }\n    var result = word.match(/(([A-Z]{0,1}[a-z]*[^A-Z])|([A-Z]{1}))/g);\n    return result.map(function (s) { return s.toLowerCase(); }).join('-');\n}\n//# sourceMappingURL=kebab-case.js.map","import { __assign } from \"tslib\";\nimport { isType } from '@antv/util';\n/**\n * 兼容 v1 label formatter\n * @param labelOptions\n */\nexport function transformLabel(labelOptions) {\n    if (!isType(labelOptions, 'Object')) {\n        return labelOptions;\n    }\n    var label = __assign({}, labelOptions);\n    if (label.formatter && !label.content) {\n        label.content = label.formatter;\n    }\n    return label;\n}\n//# sourceMappingURL=label.js.map","/**\n * 是否真实的是数字\n * @param v\n */\nexport function isRealNumber(v) {\n    return typeof v === 'number' && !isNaN(v);\n}\n/**\n * @ignore\n * Determines whether between is\n * @param value\n * @param start\n * @param end\n * @returns true if between\n */\nexport function isBetween(value, start, end) {\n    var min = Math.min(start, end);\n    var max = Math.max(start, end);\n    return value >= min && value <= max;\n}\n//# sourceMappingURL=number.js.map","import { isArray, isNumber } from '@antv/util';\n/**\n * 把 padding 转换成统一的数组写法\n * @param padding\n */\nexport function normalPadding(padding) {\n    if (isNumber(padding)) {\n        return [padding, padding, padding, padding];\n    }\n    if (isArray(padding)) {\n        var length_1 = padding.length;\n        if (length_1 === 1) {\n            return [padding[0], padding[0], padding[0], padding[0]];\n        }\n        if (length_1 === 2) {\n            return [padding[0], padding[1], padding[0], padding[1]];\n        }\n        if (length_1 === 3) {\n            return [padding[0], padding[1], padding[2], padding[1]];\n        }\n        if (length_1 === 4) {\n            return padding;\n        }\n    }\n    return [0, 0, 0, 0];\n}\n/**\n * 获取调整的 appendPadding\n */\nexport function getAdjustAppendPadding(padding, position, append) {\n    if (position === void 0) { position = 'bottom'; }\n    if (append === void 0) { append = 25; }\n    var currentAppendPadding = normalPadding(padding);\n    var PADDING = [\n        position.startsWith('top') ? append : 0,\n        position.startsWith('right') ? append : 0,\n        position.startsWith('bottom') ? append : 0,\n        position.startsWith('left') ? append : 0,\n    ];\n    return [\n        currentAppendPadding[0] + PADDING[0],\n        currentAppendPadding[1] + PADDING[1],\n        currentAppendPadding[2] + PADDING[2],\n        currentAppendPadding[3] + PADDING[3],\n    ];\n}\n/**\n * 根据图表的 padding 和 appendPadding 计算出图表的最终 padding\n * @param array\n */\nexport function resolveAllPadding(paddings) {\n    // 先把数组里的 padding 全部转换成 normal\n    var normalPaddings = paddings.map(function (item) { return normalPadding(item); });\n    var finalPadding = [0, 0, 0, 0];\n    if (normalPaddings.length > 0) {\n        finalPadding = finalPadding.map(function (item, index) {\n            // 有几个 padding 数组就遍历几次，累加\n            normalPaddings.forEach(function (d, i) {\n                item += normalPaddings[i][index];\n            });\n            return item;\n        });\n    }\n    return finalPadding;\n}\n//# sourceMappingURL=padding.js.map","import { __spreadArray } from \"tslib\";\nimport { isString, memoize, values } from '@antv/util';\nimport { getCanvasContext } from './context';\n/**\n * 计算文本在画布中的宽度\n * @param text 文本\n * @param font 字体\n */\nexport var measureTextWidth = memoize(function (text, font) {\n    if (font === void 0) { font = {}; }\n    var fontSize = font.fontSize, _a = font.fontFamily, fontFamily = _a === void 0 ? 'sans-serif' : _a, fontWeight = font.fontWeight, fontStyle = font.fontStyle, fontVariant = font.fontVariant;\n    var ctx = getCanvasContext();\n    // @see https://developer.mozilla.org/zh-CN/docs/Web/CSS/font\n    ctx.font = [fontStyle, fontWeight, fontVariant, \"\".concat(fontSize, \"px\"), fontFamily].join(' ');\n    var metrics = ctx.measureText(isString(text) ? text : '');\n    return metrics.width;\n}, function (text, font) {\n    if (font === void 0) { font = {}; }\n    return __spreadArray([text], values(font), true).join('');\n});\n//# sourceMappingURL=measure-text.js.map","import { vec2 } from '@antv/matrix-util';\nexport function points2Path(points, isInCircle) {\n    var path = [];\n    if (points.length) {\n        path.push(['M', points[0].x, points[0].y]);\n        for (var i = 1, length_1 = points.length; i < length_1; i += 1) {\n            var item = points[i];\n            path.push(['L', item.x, item.y]);\n        }\n        if (isInCircle) {\n            path.push(['Z']);\n        }\n    }\n    return path;\n}\n/**\n * @ignore\n * 计算光滑的贝塞尔曲线\n */\nexport var smoothBezier = function (points, smooth, isLoop, constraint) {\n    var cps = [];\n    var prevPoint;\n    var nextPoint;\n    var hasConstraint = !!constraint;\n    var min;\n    var max;\n    if (hasConstraint) {\n        min = [Infinity, Infinity];\n        max = [-Infinity, -Infinity];\n        for (var i = 0, l = points.length; i < l; i++) {\n            var point = points[i];\n            min = vec2.min([0, 0], min, point);\n            max = vec2.max([0, 0], max, point);\n        }\n        min = vec2.min([0, 0], min, constraint[0]);\n        max = vec2.max([0, 0], max, constraint[1]);\n    }\n    for (var i = 0, len = points.length; i < len; i++) {\n        var point = points[i];\n        if (isLoop) {\n            prevPoint = points[i ? i - 1 : len - 1];\n            nextPoint = points[(i + 1) % len];\n        }\n        else {\n            if (i === 0 || i === len - 1) {\n                cps.push(point);\n                continue;\n            }\n            else {\n                prevPoint = points[i - 1];\n                nextPoint = points[i + 1];\n            }\n        }\n        var v = [0, 0];\n        v = vec2.sub(v, nextPoint, prevPoint);\n        v = vec2.scale(v, v, smooth);\n        var d0 = vec2.distance(point, prevPoint);\n        var d1 = vec2.distance(point, nextPoint);\n        var sum = d0 + d1;\n        if (sum !== 0) {\n            d0 /= sum;\n            d1 /= sum;\n        }\n        var v1 = vec2.scale([0, 0], v, -d0);\n        var v2 = vec2.scale([0, 0], v, d1);\n        var cp0 = vec2.add([0, 0], point, v1);\n        var cp1 = vec2.add([0, 0], point, v2);\n        if (hasConstraint) {\n            cp0 = vec2.max([0, 0], cp0, min);\n            cp0 = vec2.min([0, 0], cp0, max);\n            cp1 = vec2.max([0, 0], cp1, min);\n            cp1 = vec2.min([0, 0], cp1, max);\n        }\n        cps.push(cp0);\n        cps.push(cp1);\n    }\n    if (isLoop) {\n        cps.push(cps.shift());\n    }\n    return cps;\n};\n/**\n * @ignore\n * 贝塞尔曲线\n */\nexport function catmullRom2bezier(crp, z, constraint) {\n    var isLoop = !!z;\n    var pointList = [];\n    for (var i = 0, l = crp.length; i < l; i += 2) {\n        pointList.push([crp[i], crp[i + 1]]);\n    }\n    var controlPointList = smoothBezier(pointList, 0.4, isLoop, constraint);\n    var len = pointList.length;\n    var d1 = [];\n    var cp1;\n    var cp2;\n    var p;\n    for (var i = 0; i < len - 1; i++) {\n        cp1 = controlPointList[i * 2];\n        cp2 = controlPointList[i * 2 + 1];\n        p = pointList[i + 1];\n        d1.push(['C', cp1[0], cp1[1], cp2[0], cp2[1], p[0], p[1]]);\n    }\n    if (isLoop) {\n        cp1 = controlPointList[len];\n        cp2 = controlPointList[len + 1];\n        p = pointList[0];\n        d1.push(['C', cp1[0], cp1[1], cp2[0], cp2[1], p[0], p[1]]);\n    }\n    return d1;\n}\n/**\n * @ignore\n * 根据关键点获取限定了范围的平滑线\n */\nexport function getSplinePath(points, isInCircle, constaint) {\n    var data = [];\n    var first = points[0];\n    var prePoint = null;\n    if (points.length <= 2) {\n        // 两点以内直接绘制成路径\n        return points2Path(points, isInCircle);\n    }\n    for (var i = 0, len = points.length; i < len; i++) {\n        var point = points[i];\n        if (!prePoint || !(prePoint.x === point.x && prePoint.y === point.y)) {\n            data.push(point.x);\n            data.push(point.y);\n            prePoint = point;\n        }\n    }\n    var constraint = constaint || [\n        // 范围\n        [0, 0],\n        [1, 1],\n    ];\n    var splinePath = catmullRom2bezier(data, isInCircle, constraint);\n    splinePath.unshift(['M', first.x, first.y]);\n    return splinePath;\n}\n//# sourceMappingURL=path.js.map","import { __assign } from \"tslib\";\nimport { each, get, isFunction, isNumber, isString } from '@antv/util';\nimport { kebabCase } from './kebab-case';\nimport { pick } from './pick';\n/**\n * @desc 生成 html-statistic 的 style 字符串 (兼容 canvas 的 shapeStyle 到 css样式上)\n *\n * @param width\n * @param style\n */\nexport function adapteStyle(style) {\n    var styleObject = {\n        overflow: 'hidden',\n        'white-space': 'nowrap',\n        'text-overflow': 'ellipsis',\n        display: 'flex',\n        justifyContent: 'center',\n        alignItems: 'center',\n    };\n    var shapeStyleKeys = [\n        'stroke',\n        'lineWidth',\n        'shadowColor',\n        'strokeOpacity',\n        'shadowBlur',\n        'shadowOffsetX',\n        'shadowOffsetY',\n        'fill',\n    ];\n    // 兼容 shapeStyle 设置 · start\n    if (get(style, 'fill')) {\n        styleObject['color'] = style['fill'];\n    }\n    var _a = pick(style, shapeStyleKeys), shadowColor = _a.shadowColor, _b = _a.shadowBlur, shadowBlur = _b === void 0 ? 0 : _b, _c = _a.shadowOffsetX, shadowOffsetX = _c === void 0 ? 0 : _c, _d = _a.shadowOffsetY, shadowOffsetY = _d === void 0 ? 0 : _d;\n    styleObject['text-shadow'] = \"\".concat([shadowColor, \"\".concat(shadowOffsetX, \"px\"), \"\".concat(shadowOffsetY, \"px\"), \"\".concat(shadowBlur, \"px\")].join(' '));\n    var _e = pick(style, shapeStyleKeys), stroke = _e.stroke, _f = _e.lineWidth, lineWidth = _f === void 0 ? 0 : _f;\n    styleObject['-webkit-text-stroke'] = \"\".concat([\"\".concat(lineWidth, \"px\"), stroke].join(' '));\n    // 兼容 shapeStyle 设置 · end\n    each(style, function (v, k) {\n        //  兼容 shapeStyle 的 fontSize 没有单位\n        if (['fontSize'].includes(k) && isNumber(v)) {\n            styleObject[kebabCase(k)] = \"\".concat(v, \"px\");\n        }\n        else if (k && !shapeStyleKeys.includes(k)) {\n            styleObject[kebabCase(k)] = \"\".concat(v);\n        }\n    });\n    return styleObject;\n}\n/**\n * @desc 设置 html-statistic 容器的默认样式\n *\n * - 默认事件穿透\n */\nexport function setStatisticContainerStyle(container, style) {\n    container.style['pointer-events'] = 'none';\n    each(style, function (v, k) {\n        if (k && v) {\n            container.style[k] = v;\n        }\n    });\n}\n/**\n * 渲染环图 html-annotation（默认 position 居中 [50%, 50%]）\n * @param chart\n * @param options\n * @param meta 字段元信息\n * @param {optional} datum 当前的元数据\n */\nexport var renderStatistic = function (chart, options, datum) {\n    var statistic = options.statistic, plotType = options.plotType;\n    var titleOpt = statistic.title, contentOpt = statistic.content;\n    [titleOpt, contentOpt].forEach(function (option, idx) {\n        if (!option) {\n            return;\n        }\n        var transform = '';\n        if (idx === 0) {\n            transform = contentOpt ? 'translate(-50%, -100%)' : 'translate(-50%, -50%)';\n        }\n        else {\n            transform = titleOpt ? 'translate(-50%, 0)' : 'translate(-50%, -50%)';\n        }\n        var style = isFunction(option.style) ? option.style(datum) : option.style;\n        chart.annotation().html(__assign({ position: ['50%', '50%'], html: function (container, view) {\n                var coordinate = view.getCoordinate();\n                var containerW = 0;\n                if (plotType === 'pie' || plotType === 'ring-progress') {\n                    containerW = coordinate.getRadius() * coordinate.innerRadius * 2;\n                }\n                else if (plotType === 'liquid') {\n                    var liquidShape = get(view.geometries, [0, 'elements', 0, 'shape']);\n                    if (liquidShape) {\n                        // 获取到水波图边框大小\n                        var path = liquidShape.find(function (t) { return t.get('name') === 'wrap'; });\n                        var width = path.getCanvasBBox().width;\n                        containerW = width;\n                    }\n                }\n                else if (!containerW) {\n                    // 保底方案\n                    containerW = coordinate.getWidth();\n                }\n                setStatisticContainerStyle(container, __assign({ width: \"\".concat(containerW, \"px\"), transform: transform }, adapteStyle(style)));\n                var filteredData = view.getData();\n                if (option.customHtml) {\n                    return option.customHtml(container, view, datum, filteredData);\n                }\n                var text = option.content;\n                if (option.formatter) {\n                    text = option.formatter(datum, filteredData);\n                }\n                // todo G2 层修复可以返回空字符串 & G2 层修复允许返回非字符串的内容，比如数值 number\n                return text ? (isString(text) ? text : \"\".concat(text)) : '<div></div>';\n            }, \n            // @ts-ignore\n            key: \"\".concat(idx === 0 ? 'top' : 'bottom', \"-statistic\") }, pick(option, ['offsetX', 'offsetY', 'rotate', 'style', 'formatter']) /** 透传配置 */));\n    });\n};\n/**\n * 渲染 html-annotation for gauge (等不规则 plot), 默认 position 居中居底 [50%, 100%]）\n * @param chart\n * @param options\n * @param meta 字段元信息\n * @param {optional} datum 当前的元数据\n */\nexport var renderGaugeStatistic = function (chart, options, datum) {\n    var statistic = options.statistic;\n    var titleOpt = statistic.title, contentOpt = statistic.content;\n    [titleOpt, contentOpt].forEach(function (option) {\n        if (!option) {\n            return;\n        }\n        var style = isFunction(option.style) ? option.style(datum) : option.style;\n        chart.annotation().html(__assign({ position: ['50%', '100%'], html: function (container, view) {\n                var coordinate = view.getCoordinate();\n                // 弧形的坐标\n                var polarCoord = view.views[0].getCoordinate();\n                var polarCenter = polarCoord.getCenter();\n                var polarRadius = polarCoord.getRadius();\n                var polarMaxY = Math.max(Math.sin(polarCoord.startAngle), Math.sin(polarCoord.endAngle)) * polarRadius;\n                var offsetY = polarCenter.y + polarMaxY - coordinate.y.start - parseFloat(get(style, 'fontSize', 0));\n                var containerWidth = coordinate.getRadius() * coordinate.innerRadius * 2;\n                setStatisticContainerStyle(container, __assign({ width: \"\".concat(containerWidth, \"px\"), transform: \"translate(-50%, \".concat(offsetY, \"px)\") }, adapteStyle(style)));\n                var filteredData = view.getData();\n                if (option.customHtml) {\n                    return option.customHtml(container, view, datum, filteredData);\n                }\n                var text = option.content;\n                if (option.formatter) {\n                    text = option.formatter(datum, filteredData);\n                }\n                // todo G2 层修复可以返回空字符串 & G2 层修复允许返回非字符串的内容，比如数值 number\n                return text ? (isString(text) ? text : \"\".concat(text)) : '<div></div>';\n            } }, pick(option, ['offsetX', 'offsetY', 'rotate', 'style', 'formatter']) /** 透传配置 */));\n    });\n};\n//# sourceMappingURL=statistic.js.map","import { reduce } from '@antv/util';\n/**\n * 简单的模板引擎，使用方式如下（空格自动忽略）：\n * template('hello, {name}', { name: 'AntV' }); // hello, AntV\n * @param string\n * @param options\n */\nexport function template(source, data) {\n    if (!data) {\n        return source;\n    }\n    return reduce(\n    // @ts-ignore\n    data, function (r, v, k) { return r.replace(new RegExp(\"{\\\\s*\".concat(k, \"\\\\s*}\"), 'g'), v); }, source);\n}\n//# sourceMappingURL=template.js.map","import { each, isFunction } from '@antv/util';\n/**\n * 在 Chart 中查找特定 id 的子 View\n * @param chart\n * @param id\n */\nexport function findViewById(chart, id) {\n    return chart.views.find(function (view) { return view.id === id; });\n}\n/**\n * 获取同 view 同一级的所有 views\n * @param view 当前 view\n * @returns 同一级的 views\n * @ignore\n */\nexport function getViews(view) {\n    var parent = view.parent;\n    return parent ? parent.views : [];\n}\n/**\n * 获取同 view 同一级的 views，不包括自身\n * @param view 当前 view\n * @returns 同一级的 views\n * @ignore\n */\nexport function getSiblingViews(view) {\n    return getViews(view).filter(function (sub) { return sub !== view; });\n}\n/**\n * 所有的 Geometries 都使用同一动画（各个图形如有区别，自行覆盖）并添加处理动画回调\n * @param view View\n * @param animation 动画配置\n */\nexport function addViewAnimation(view, animation, geometries) {\n    if (geometries === void 0) { geometries = view.geometries; }\n    // 同时设置整个 view 动画选项\n    if (typeof animation === 'boolean') {\n        view.animate(animation);\n    }\n    else {\n        view.animate(true);\n    }\n    // 所有的 Geometry 都使用同一动画（各个图形如有区别，自行覆盖）\n    each(geometries, function (g) {\n        var animationCfg;\n        if (isFunction(animation)) {\n            animationCfg = animation(g.type || g.shapeType, g) || true;\n        }\n        else {\n            animationCfg = animation;\n        }\n        g.animate(animationCfg);\n    });\n}\n//# sourceMappingURL=view.js.map","/**\n * 获取设备像素比\n */\nexport function getPixelRatio() {\n    return typeof window === 'object' ? window === null || window === void 0 ? void 0 : window.devicePixelRatio : 2;\n}\n/**\n * 初始化 cavnas，设置宽高等\n */\nexport function initCanvas(width, height) {\n    if (height === void 0) { height = width; }\n    var canvas = document.createElement('canvas');\n    var pixelRatio = getPixelRatio();\n    // 画布尺寸\n    canvas.width = width * pixelRatio;\n    canvas.height = height * pixelRatio;\n    // 显示尺寸\n    canvas.style.width = \"\".concat(width, \"px\");\n    canvas.style.height = \"\".concat(height, \"px\");\n    var ctx = canvas.getContext('2d');\n    ctx.scale(pixelRatio, pixelRatio);\n    return canvas;\n}\n/**\n * 绘制背景\n *\n * @param context\n * @param cfg\n * @param width\n * @param height\n */\nexport function drawBackground(context, cfg, width, height) {\n    if (height === void 0) { height = width; }\n    var backgroundColor = cfg.backgroundColor, opacity = cfg.opacity;\n    context.globalAlpha = opacity;\n    context.fillStyle = backgroundColor;\n    context.beginPath();\n    context.fillRect(0, 0, width, height);\n    context.closePath();\n}\n/**\n * 计算贴图单元大小\n *\n * @param size 元素大小\n * @param padding 圆点间隔\n * @param isStagger 是否交错\n * @reutrn 返回贴图单元大小\n */\nexport function getUnitPatternSize(size, padding, isStagger) {\n    // 如果交错, unitSize 放大两倍\n    var unitSize = size + padding;\n    return isStagger ? unitSize * 2 : unitSize;\n}\n/**\n * 计算有交错情况的元素坐标\n *\n * @param unitSize 贴图单元大小\n * @param isStagger 是否交错\n * @reutrn 元素中心坐标 x,y 数组集合\n */\nexport function getSymbolsPosition(unitSize, isStagger) {\n    // 如果交错, 交错绘制 dot\n    var symbolsPos = isStagger\n        ? [\n            [unitSize * (1 / 4), unitSize * (1 / 4)],\n            [unitSize * (3 / 4), unitSize * (3 / 4)],\n        ]\n        : [[unitSize * (1 / 2), unitSize * (1 / 2)]];\n    return symbolsPos;\n}\n/**\n * 给整个 pattern贴图 做变换, 目前支持旋转\n *\n * @param pattern 整个贴图\n * @param dpr  设备像素比\n * @param rotation 旋转角度\n */\nexport function transformMatrix(dpr, rotation) {\n    var radian = (rotation * Math.PI) / 180;\n    var matrix = {\n        a: Math.cos(radian) * (1 / dpr),\n        b: Math.sin(radian) * (1 / dpr),\n        c: -Math.sin(radian) * (1 / dpr),\n        d: Math.cos(radian) * (1 / dpr),\n        e: 0,\n        f: 0,\n    };\n    return matrix;\n}\n//# sourceMappingURL=util.js.map","import { deepAssign } from '../../utils';\nimport { drawBackground, getPixelRatio, getSymbolsPosition, getUnitPatternSize, initCanvas, transformMatrix, } from './util';\n/**\n * dotPattern的默认配置\n */\nexport var defaultDotPatternCfg = {\n    size: 6,\n    padding: 2,\n    backgroundColor: 'transparent',\n    opacity: 1,\n    rotation: 0,\n    fill: '#fff',\n    fillOpacity: 0.5,\n    stroke: 'transparent',\n    lineWidth: 0,\n    isStagger: true,\n};\n/**\n * 绘制圆点\n *\n * @param context\n * @param cfg\n * @param x 圆点中心坐标x\n * @param y 圆点中心坐标y\n */\nexport function drawDot(context, cfg, x, y) {\n    var size = cfg.size, fill = cfg.fill, lineWidth = cfg.lineWidth, stroke = cfg.stroke, fillOpacity = cfg.fillOpacity;\n    context.beginPath();\n    context.globalAlpha = fillOpacity;\n    context.fillStyle = fill;\n    context.strokeStyle = stroke;\n    context.lineWidth = lineWidth;\n    context.arc(x, y, size / 2, 0, 2 * Math.PI, false);\n    context.fill();\n    if (lineWidth) {\n        context.stroke();\n    }\n    context.closePath();\n}\n/**\n * 创建 dot pattern，返回 HTMLCanvasElement\n *\n * @param cfg\n * @returns HTMLCanvasElement\n */\nexport function createDotPattern(cfg) {\n    var dotCfg = deepAssign({}, defaultDotPatternCfg, cfg);\n    var size = dotCfg.size, padding = dotCfg.padding, isStagger = dotCfg.isStagger, rotation = dotCfg.rotation;\n    // 计算 画布大小，dots的位置\n    var unitSize = getUnitPatternSize(size, padding, isStagger);\n    var dots = getSymbolsPosition(unitSize, isStagger);\n    // 初始化 patternCanvas\n    var canvas = initCanvas(unitSize, unitSize);\n    var ctx = canvas.getContext('2d');\n    // 绘制 background，dots\n    drawBackground(ctx, dotCfg, unitSize);\n    for (var _i = 0, dots_1 = dots; _i < dots_1.length; _i++) {\n        var _a = dots_1[_i], x = _a[0], y = _a[1];\n        drawDot(ctx, dotCfg, x, y);\n    }\n    var pattern = ctx.createPattern(canvas, 'repeat');\n    if (pattern) {\n        var dpr = getPixelRatio();\n        var matrix = transformMatrix(dpr, rotation);\n        pattern.setTransform(matrix);\n    }\n    return pattern;\n}\n//# sourceMappingURL=dot.js.map","import { deepAssign } from '../../utils';\nimport { drawBackground, getPixelRatio, initCanvas, transformMatrix } from './util';\n/**\n * linePattern 的 默认配置\n */\nexport var defaultLinePatternCfg = {\n    rotation: 45,\n    spacing: 5,\n    opacity: 1,\n    backgroundColor: 'transparent',\n    strokeOpacity: 0.5,\n    stroke: '#fff',\n    lineWidth: 2,\n};\n/**\n * 绘制line\n *\n * @param context canvasContext\n * @param cfg linePattern 的配置\n * @param d 绘制 path 所需的 d\n */\nexport function drawLine(context, cfg, d) {\n    var stroke = cfg.stroke, lineWidth = cfg.lineWidth, strokeOpacity = cfg.strokeOpacity;\n    var path = new Path2D(d);\n    context.globalAlpha = strokeOpacity;\n    context.lineCap = 'square';\n    context.strokeStyle = lineWidth ? stroke : 'transparent';\n    context.lineWidth = lineWidth;\n    context.stroke(path);\n}\n/**\n * 创建 linePattern\n */\nexport function createLinePattern(cfg) {\n    var lineCfg = deepAssign({}, defaultLinePatternCfg, cfg);\n    var spacing = lineCfg.spacing, rotation = lineCfg.rotation, lineWidth = lineCfg.lineWidth;\n    // 计算 pattern 画布的大小， path 所需的 d\n    var width = spacing + lineWidth || 1;\n    var height = spacing + lineWidth || 1;\n    var d = \"\\n            M 0 0 L \".concat(width, \" 0\\n            M 0 \").concat(height, \" L \").concat(width, \" \").concat(height, \"\\n            \");\n    // 初始化 patternCanvas\n    var canvas = initCanvas(width, height);\n    var ctx = canvas.getContext('2d');\n    // 绘制 background，line\n    drawBackground(ctx, lineCfg, width, height);\n    drawLine(ctx, lineCfg, d);\n    var pattern = ctx.createPattern(canvas, 'repeat');\n    if (pattern) {\n        var dpr = getPixelRatio();\n        var matrix = transformMatrix(dpr, rotation);\n        pattern.setTransform(matrix);\n    }\n    // 返回 Pattern 对象\n    return pattern;\n}\n//# sourceMappingURL=line.js.map","import { deepAssign } from '../../utils';\nimport { drawBackground, getPixelRatio, getSymbolsPosition, getUnitPatternSize, initCanvas, transformMatrix, } from './util';\n/**\n * squarePattern 的 默认配置\n */\nexport var defaultSquarePatternCfg = {\n    size: 6,\n    padding: 1,\n    isStagger: true,\n    backgroundColor: 'transparent',\n    opacity: 1,\n    rotation: 0,\n    fill: '#fff',\n    fillOpacity: 0.5,\n    stroke: 'transparent',\n    lineWidth: 0,\n};\n/**\n * 绘制square\n *\n * @param context canvasContext\n * @param cfg squarePattern 的配置\n * @param x和y square的中心位置\n */\nexport function drawSquare(context, cfg, x, y) {\n    var stroke = cfg.stroke, size = cfg.size, fill = cfg.fill, lineWidth = cfg.lineWidth, fillOpacity = cfg.fillOpacity;\n    context.globalAlpha = fillOpacity;\n    context.strokeStyle = stroke;\n    context.lineWidth = lineWidth;\n    context.fillStyle = fill;\n    // 因为正方形绘制从左上角开始，所以x，y做个偏移\n    context.strokeRect(x - size / 2, y - size / 2, size, size);\n    context.fillRect(x - size / 2, y - size / 2, size, size);\n}\n/**\n * 创建 squarePattern\n */\nexport function createSquarePattern(cfg) {\n    var squareCfg = deepAssign({}, defaultSquarePatternCfg, cfg);\n    var size = squareCfg.size, padding = squareCfg.padding, isStagger = squareCfg.isStagger, rotation = squareCfg.rotation;\n    // 计算 画布大小，squares的位置\n    var unitSize = getUnitPatternSize(size, padding, isStagger);\n    var squares = getSymbolsPosition(unitSize, isStagger); // 计算方法与 dots 一样\n    // 初始化 patternCanvas\n    var canvas = initCanvas(unitSize, unitSize);\n    var ctx = canvas.getContext('2d');\n    // 绘制 background，squares\n    drawBackground(ctx, squareCfg, unitSize);\n    for (var _i = 0, squares_1 = squares; _i < squares_1.length; _i++) {\n        var _a = squares_1[_i], x = _a[0], y = _a[1];\n        drawSquare(ctx, squareCfg, x, y);\n    }\n    var pattern = ctx.createPattern(canvas, 'repeat');\n    if (pattern) {\n        var dpr = getPixelRatio();\n        var matrix = transformMatrix(dpr, rotation);\n        pattern.setTransform(matrix);\n    }\n    return pattern;\n}\n//# sourceMappingURL=square.js.map","import { createDotPattern } from './dot';\nimport { createLinePattern } from './line';\nimport { createSquarePattern } from './square';\n/**\n * 获取内置的 CanvasPattern 方法\n * @param options\n * @returns\n */\nexport function getCanvasPattern(options) {\n    var type = options.type, cfg = options.cfg;\n    var pattern;\n    switch (type) {\n        case 'dot':\n            pattern = createDotPattern(cfg);\n            break;\n        case 'line':\n            pattern = createLinePattern(cfg);\n            break;\n        case 'square':\n            pattern = createSquarePattern(cfg);\n            break;\n        default:\n            break;\n    }\n    return pattern;\n}\n//# sourceMappingURL=index.js.map","import { __assign, __spreadArray } from \"tslib\";\nimport { Util } from '@antv/g2';\nimport { get } from '@antv/util';\nimport { deepAssign } from '../utils';\nimport { getCanvasPattern } from '../utils/pattern';\n/**\n * Pattern 通道，处理图案填充\n * 🚀 目前支持图表类型：饼图、柱状图、条形图、玉珏图等（不支持在多 view 图表中，后续按需扩展）\n *\n * @param key key of style property\n * @returns\n */\nexport function pattern(key) {\n    var _this = this;\n    return function (params) {\n        var _a;\n        var options = params.options, chart = params.chart;\n        var patternOption = options.pattern;\n        // 没有 pattern 配置，则直接返回\n        if (!patternOption) {\n            return params;\n        }\n        /** ~~~~~~~ 进行贴图图案处理 ~~~~~~~ */\n        var style = function (datum) {\n            var _a, _b, _c;\n            var args = [];\n            for (var _i = 1; _i < arguments.length; _i++) {\n                args[_i - 1] = arguments[_i];\n            }\n            var defaultColor = chart.getTheme().defaultColor;\n            var color = defaultColor;\n            var colorAttribute = (_b = (_a = chart.geometries) === null || _a === void 0 ? void 0 : _a[0]) === null || _b === void 0 ? void 0 : _b.getAttribute('color');\n            if (colorAttribute) {\n                var colorField = colorAttribute.getFields()[0];\n                var seriesValue = get(datum, colorField);\n                color = Util.getMappingValue(colorAttribute, seriesValue, ((_c = colorAttribute.values) === null || _c === void 0 ? void 0 : _c[0]) || defaultColor);\n            }\n            var pattern = patternOption;\n            // 1. 如果 patternOption 是一个回调，则获取回调结果。`(datum: Datum, color: string) => CanvasPattern`\n            if (typeof patternOption === 'function') {\n                pattern = patternOption.call(_this, datum, color);\n            }\n            // 2. 如果 pattern 不是 CanvasPattern，则进一步处理，否则直接赋予给 fill\n            if (pattern instanceof CanvasPattern === false) {\n                // 通过 createPattern(PatternStyle) 转换为 CanvasPattern\n                pattern = getCanvasPattern(deepAssign({}, { cfg: { backgroundColor: color } }, pattern));\n            }\n            var styleOption = options[key];\n            return __assign(__assign({}, (typeof styleOption === 'function' ? styleOption.call.apply(styleOption, __spreadArray([_this, datum], args, false)) : styleOption || {})), { fill: pattern || color });\n        };\n        return deepAssign({}, params, { options: (_a = {}, _a[key] = style, _a) });\n    };\n}\n//# sourceMappingURL=pattern.js.map","import { __spreadArray } from \"tslib\";\nimport { each, isNil, isObject } from '@antv/util';\nimport { AXIS_META_CONFIG_KEYS } from '../constant';\nimport { addViewAnimation, deepAssign, pick } from '../utils';\n/**\n * 通用 legend 配置, 适用于带 colorField 或 seriesField 的图表\n * @param params\n */\nexport function legend(params) {\n    var chart = params.chart, options = params.options;\n    var legend = options.legend, colorField = options.colorField, seriesField = options.seriesField;\n    if (legend === false) {\n        chart.legend(false);\n    }\n    else if (colorField || seriesField) {\n        chart.legend(colorField || seriesField, legend);\n    }\n    return params;\n}\n/**\n * 通用 tooltip 配置\n * @param params\n */\nexport function tooltip(params) {\n    var chart = params.chart, options = params.options;\n    var tooltip = options.tooltip;\n    if (tooltip !== undefined) {\n        chart.tooltip(tooltip);\n    }\n    return params;\n}\n/**\n * Interaction 配置\n * @param params\n */\nexport function interaction(params) {\n    var chart = params.chart, options = params.options;\n    var interactions = options.interactions;\n    each(interactions, function (i) {\n        if (i.enable === false) {\n            chart.removeInteraction(i.type);\n        }\n        else {\n            chart.interaction(i.type, i.cfg || {});\n        }\n    });\n    return params;\n}\n/**\n * 动画\n * @param params\n */\nexport function animation(params) {\n    var chart = params.chart, options = params.options;\n    var animation = options.animation;\n    // 所有的 Geometry 都使用同一动画（各个图形如有区别，自行覆盖）\n    addViewAnimation(chart, animation);\n    return params;\n}\n/**\n * 设置全局主题配置\n * @param params\n */\nexport function theme(params) {\n    var chart = params.chart, options = params.options;\n    var theme = options.theme;\n    // 存在主题才设置主题\n    if (theme) {\n        chart.theme(theme);\n    }\n    return params;\n}\n/**\n * 状态 state 配置\n * @param params\n */\nexport function state(params) {\n    var chart = params.chart, options = params.options;\n    var state = options.state;\n    if (state) {\n        each(chart.geometries, function (geometry) {\n            geometry.state(state);\n        });\n    }\n    return params;\n}\n/**\n * 处理缩略轴的 adaptor\n * @param params\n */\nexport function slider(params) {\n    var chart = params.chart, options = params.options;\n    var slider = options.slider;\n    chart.option('slider', slider);\n    return params;\n}\n/**\n * 处理缩略轴的 adaptor\n * @param params\n */\nexport function scrollbar(params) {\n    var chart = params.chart, options = params.options;\n    var scrollbar = options.scrollbar;\n    chart.option('scrollbar', scrollbar);\n    return params;\n}\n/**\n * scale 的 adaptor\n * @param axes\n */\nexport function scale(axes, meta) {\n    return function (params) {\n        var chart = params.chart, options = params.options;\n        // 1. 轴配置中的 scale 信息\n        var scales = {};\n        each(axes, function (axis, field) {\n            scales[field] = pick(axis, AXIS_META_CONFIG_KEYS);\n        });\n        // 2. meta 直接是 scale 的信息\n        scales = deepAssign({}, meta, options.meta, scales);\n        chart.scale(scales);\n        return params;\n    };\n}\n/**\n * annotation 配置\n * @param params\n */\nexport function annotation(annotationOptions) {\n    return function (params) {\n        var chart = params.chart, options = params.options;\n        var annotationController = chart.getController('annotation');\n        /** 自定义 annotation */\n        each(__spreadArray(__spreadArray([], (options.annotations || []), true), (annotationOptions || []), true), function (annotationOption) {\n            // @ts-ignore\n            annotationController.annotation(annotationOption);\n        });\n        return params;\n    };\n}\n/**\n * 自动设置 limitInPlot\n * @param params\n */\nexport function limitInPlot(params) {\n    var chart = params.chart, options = params.options;\n    var yAxis = options.yAxis, limitInPlot = options.limitInPlot;\n    var value = limitInPlot;\n    // 用户没有设置 limitInPlot，则自动根据 yAxis 是否有 min/max 来设置 limitInPlot\n    if (isObject(yAxis) && isNil(limitInPlot)) {\n        if (Object.values(pick(yAxis, ['min', 'max', 'minLimit', 'maxLimit'])).some(function (value) { return !isNil(value); })) {\n            value = true;\n        }\n        else {\n            value = false;\n        }\n    }\n    chart.limitInPlot = value;\n    return params;\n}\n/**\n * 坐标系转换\n */\nexport function transformations(coordinateType) {\n    if (coordinateType === void 0) { coordinateType = 'rect'; }\n    return function (params) {\n        var chart = params.chart, options = params.options;\n        var coordinate = options.coordinate;\n        var actions = Array.from(coordinate || [])\n            .map(function (cfg) {\n            if (cfg.type === 'reflectX')\n                return ['reflect', 'x'];\n            if (cfg.type === 'reflectY')\n                return ['reflect', 'y'];\n            if (cfg.type === 'transpose')\n                return ['transpose'];\n            return null;\n        })\n            .filter(function (d) { return !!d; });\n        if (actions.length !== 0) {\n            chart.coordinate({ type: coordinateType, actions: actions });\n        }\n        return params;\n    };\n}\nexport { pattern } from './pattern';\n//# sourceMappingURL=common.js.map","import { each } from '@antv/util';\n/**\n * @file 全局的一些变量定义：含国际化、主题...\n */\nexport var GLOBAL = {\n    /** 全局语言 */\n    locale: 'en-US',\n};\n/**\n * 全局变量设置\n * @param key\n * @param value\n */\nexport function setGlobal(datum) {\n    each(datum, function (v, k) { return (GLOBAL[k] = v); });\n}\n//# sourceMappingURL=global.js.map","import { get } from '@antv/util';\nimport { template } from '../utils';\nimport { GLOBAL } from './global';\nvar LocaleMap = {};\n/**\n * register a locale\n * @param locale\n * @param localeObj\n */\nexport function registerLocale(locale, localeObj) {\n    LocaleMap[locale] = localeObj;\n}\n/**\n * get locale of specific language\n * @param lang\n * @returns\n */\nexport function getLocale(locale) {\n    return {\n        get: function (key, obj) {\n            return template(get(LocaleMap[locale], key) || get(LocaleMap[GLOBAL.locale], key) || get(LocaleMap['en-US'], key) || key, obj);\n        },\n    };\n}\n//# sourceMappingURL=locale.js.map","import { get } from '@antv/util';\n/**\n * 获得 tooltip 的映射信息\n * @param tooltip\n * @param defaultFields\n */\nexport function getTooltipMapping(tooltip, defaultFields) {\n    if (tooltip === false) {\n        return {\n            fields: false, // 关闭 tooltip\n        };\n    }\n    var fields = get(tooltip, 'fields');\n    var formatter = get(tooltip, 'formatter');\n    if (formatter && !fields) {\n        fields = defaultFields;\n    }\n    return {\n        fields: fields,\n        formatter: formatter,\n    };\n}\n//# sourceMappingURL=tooltip.js.map","import { __assign, __rest, __spreadArray } from \"tslib\";\nimport { isEmpty, isFunction, isNumber, isObject, isString, uniq } from '@antv/util';\nimport { transformLabel } from '../../utils';\n/**\n * 获得映射的字段列表\n * @param options\n * @param field\n */\nexport function getMappingField(o, field) {\n    var type = o.type, xField = o.xField, yField = o.yField, colorField = o.colorField, shapeField = o.shapeField, sizeField = o.sizeField, styleField = o.styleField;\n    var rawFields = o.rawFields;\n    var fields = [];\n    rawFields = (isFunction(rawFields) ? rawFields(type, field) : rawFields) || [];\n    // 因为 color 会影响到数据分组，以及最后的图形映射。所以导致 bar 图中的 widthRatio 设置不生效\n    // 所以对于 color 字段，仅仅保留 colorField 好了！ + rawFields\n    // shape, size 同理\n    if (field === 'color') {\n        fields = __spreadArray([colorField || xField], rawFields, true);\n    }\n    else if (field === 'shape') {\n        fields = __spreadArray([shapeField || xField], rawFields, true);\n    }\n    else if (field === 'size') {\n        fields = __spreadArray([sizeField || xField], rawFields, true);\n    }\n    else {\n        fields = __spreadArray([xField, yField, colorField, shapeField, sizeField, styleField], rawFields, true);\n        // 一定能找到的！\n        var idx = ['x', 'y', 'color', 'shape', 'size', 'style'].indexOf(field);\n        var f = fields[idx];\n        // 删除当前字段\n        fields.splice(idx, 1);\n        // 插入到第一个\n        fields.unshift(f);\n    }\n    var mappingFields = uniq(fields.filter(function (f) { return !!f; }));\n    /**\n     * 修复 line geometry 无拆分时 color 回调错误\n     * eg:\n     *   geometry.color(xField, ()=> '#f24')\n     */\n    var tileMappingField = type === 'line' && [xField, yField].includes(mappingFields.join('*')) ? '' : mappingFields.join('*');\n    return {\n        mappingFields: mappingFields,\n        tileMappingField: tileMappingField,\n    };\n}\n/**\n * 获得映射函数\n * @param mappingFields\n * @param func\n */\nexport function getMappingFunction(mappingFields, func) {\n    if (!func)\n        return undefined;\n    // 返回函数\n    return function () {\n        var args = [];\n        for (var _i = 0; _i < arguments.length; _i++) {\n            args[_i] = arguments[_i];\n        }\n        var params = {};\n        mappingFields.forEach(function (f, idx) {\n            params[f] = args[idx];\n        });\n        // 删除 undefined\n        delete params['undefined'];\n        return func(params);\n    };\n}\n/**\n * 通用 geometry 的配置处理的 adaptor\n * @param params\n */\nexport function geometry(params) {\n    var chart = params.chart, options = params.options;\n    var type = options.type, args = options.args, mapping = options.mapping, xField = options.xField, yField = options.yField, colorField = options.colorField, shapeField = options.shapeField, sizeField = options.sizeField, tooltipFields = options.tooltipFields, label = options.label, state = options.state, customInfo = options.customInfo, customMappingField = options.customMappingField;\n    // 如果没有 mapping 信息，那么直接返回\n    if (!mapping) {\n        return params;\n    }\n    var color = mapping.color, shape = mapping.shape, size = mapping.size, style = mapping.style, tooltip = mapping.tooltip;\n    // 创建 geometry\n    var geometry = chart[type](args).position(\"\".concat(xField, \"*\").concat(yField));\n    /**\n     * color 的几种情况\n     * g.color('red');\n     * g.color('color', ['red', 'blue']);\n     * g.color('x', (x, y) => 'red');\n     * g.color('color', (color, x, y) => 'red');\n     */\n    if (isString(color)) {\n        colorField ? geometry.color(colorField, color) : geometry.color(color);\n    }\n    else if (isFunction(color)) {\n        var _a = getMappingField(options, 'color'), mappingFields = _a.mappingFields, tileMappingField = _a.tileMappingField;\n        geometry.color(customMappingField || tileMappingField, getMappingFunction(mappingFields, color));\n    }\n    else {\n        colorField && geometry.color(colorField, color);\n    }\n    /**\n     * shape 的几种情况\n     * g.shape('rect');\n     * g.shape('shape', ['rect', 'circle']);\n     * g.shape('x*y', (x, y) => 'rect');\n     * g.shape('shape*x*y', (shape, x, y) => 'rect');\n     */\n    if (isString(shape)) {\n        shapeField ? geometry.shape(shapeField, [shape]) : geometry.shape(shape); // [shape] 需要在 G2 做掉\n    }\n    else if (isFunction(shape)) {\n        var _b = getMappingField(options, 'shape'), mappingFields = _b.mappingFields, tileMappingField = _b.tileMappingField;\n        geometry.shape(tileMappingField, getMappingFunction(mappingFields, shape));\n    }\n    else {\n        shapeField && geometry.shape(shapeField, shape);\n    }\n    /**\n     * size 的几种情况\n     * g.size(10);\n     * g.size('size', [10, 20]);\n     * g.size('x*y', (x, y) => 10);\n     * g.color('size*x*y', (size, x, y) => 1-);\n     */\n    if (isNumber(size)) {\n        sizeField ? geometry.size(sizeField, size) : geometry.size(size);\n    }\n    else if (isFunction(size)) {\n        var _c = getMappingField(options, 'size'), mappingFields = _c.mappingFields, tileMappingField = _c.tileMappingField;\n        geometry.size(tileMappingField, getMappingFunction(mappingFields, size));\n    }\n    else {\n        sizeField && geometry.size(sizeField, size);\n    }\n    /**\n     * style 的几种情况\n     * g.style({ fill: 'red' });\n     * g.style('x*y*color', (x, y, color) => ({ fill: 'red' }));\n     */\n    if (isFunction(style)) {\n        var _d = getMappingField(options, 'style'), mappingFields = _d.mappingFields, tileMappingField = _d.tileMappingField;\n        geometry.style(tileMappingField, getMappingFunction(mappingFields, style));\n    }\n    else if (isObject(style)) {\n        geometry.style(style);\n    }\n    /**\n     * tooltip 的 API\n     * g.tooltip('x*y*color', (x, y, color) => ({ name, value }));\n     * g.tooltip(false);\n     */\n    if (tooltipFields === false) {\n        geometry.tooltip(false);\n    }\n    else if (!isEmpty(tooltipFields)) {\n        geometry.tooltip(tooltipFields.join('*'), getMappingFunction(tooltipFields, tooltip));\n    }\n    /**\n     * label 的映射\n     */\n    if (label === false) {\n        geometry.label(false);\n    }\n    else if (label) {\n        var callback = label.callback, fields = label.fields, cfg = __rest(label, [\"callback\", \"fields\"]);\n        geometry.label({\n            fields: fields || [yField],\n            callback: callback,\n            cfg: transformLabel(cfg),\n        });\n    }\n    /**\n     * state 状态样式\n     */\n    if (state) {\n        geometry.state(state);\n    }\n    /**\n     * 自定义信息\n     */\n    if (customInfo) {\n        geometry.customInfo(customInfo);\n    }\n    // 防止因为 x y 字段做了通道映射，导致生成图例\n    [xField, yField]\n        .filter(function (f) { return f !== colorField; })\n        .forEach(function (f) {\n        chart.legend(f, false);\n    });\n    return __assign(__assign({}, params), { \n        // geometry adaptor 额外需要做的事情，就是将创建好的 geometry 返回到下一层 adaptor，防止通过 type 查询的时候容易误判\n        ext: { geometry: geometry } });\n}\n//# sourceMappingURL=base.js.map","import { deepMix } from '@antv/util';\nimport { deepAssign } from '../../utils';\nimport { getTooltipMapping } from '../../utils/tooltip';\nimport { geometry } from './base';\n/**\n * area geometry 的配置处理\n * @param params\n */\nexport function area(params) {\n    var options = params.options;\n    var area = options.area, xField = options.xField, yField = options.yField, seriesField = options.seriesField, smooth = options.smooth, tooltip = options.tooltip, useDeferredLabel = options.useDeferredLabel;\n    var _a = getTooltipMapping(tooltip, [xField, yField, seriesField]), fields = _a.fields, formatter = _a.formatter;\n    // 如果存在才处理\n    return area\n        ? geometry(deepAssign({}, params, {\n            options: {\n                type: 'area',\n                colorField: seriesField,\n                tooltipFields: fields,\n                mapping: deepMix({\n                    shape: smooth ? 'smooth' : 'area',\n                    tooltip: formatter,\n                }, area),\n                args: { useDeferredLabel: useDeferredLabel },\n            },\n        }))\n        : params;\n}\n//# sourceMappingURL=area.js.map","import { __assign } from \"tslib\";\nimport { deepAssign } from '../../utils';\nimport { getTooltipMapping } from '../../utils/tooltip';\nimport { geometry } from './base';\n/**\n * edge 的配置处理\n * @param params\n */\nexport function edge(params) {\n    var options = params.options;\n    var edge = options.edge, xField = options.xField, yField = options.yField, seriesField = options.seriesField, tooltip = options.tooltip, useDeferredLabel = options.useDeferredLabel;\n    var _a = getTooltipMapping(tooltip, [xField, yField, seriesField]), fields = _a.fields, formatter = _a.formatter;\n    return edge\n        ? geometry(deepAssign({}, params, {\n            options: {\n                type: 'edge',\n                colorField: seriesField,\n                tooltipFields: fields,\n                mapping: __assign({ tooltip: formatter }, edge),\n                args: { useDeferredLabel: useDeferredLabel },\n            },\n        }))\n        : params;\n}\n//# sourceMappingURL=edge.js.map","import { __assign } from \"tslib\";\nimport { getTheme } from '@antv/g2';\nimport { isNil, isObject } from '@antv/util';\nimport { deepAssign } from '../../utils';\nimport { getTooltipMapping } from '../../utils/tooltip';\nimport { geometry } from './base';\n/**\n * 柱形图其他的 adaptor\n * @param params\n */\nfunction otherAdaptor(params) {\n    var chart = params.chart, options = params.options, ext = params.ext;\n    var seriesField = options.seriesField, isGroup = options.isGroup, isStack = options.isStack, marginRatio = options.marginRatio, widthRatio = options.widthRatio, groupField = options.groupField, theme = options.theme;\n    /**\n     * adjust\n     */\n    var adjust = [];\n    if (seriesField) {\n        // group\n        if (isGroup) {\n            adjust.push({\n                type: 'dodge',\n                dodgeBy: groupField || seriesField,\n                marginRatio: marginRatio,\n            });\n        }\n        // stack\n        if (isStack) {\n            adjust.push({\n                type: 'stack',\n                marginRatio: marginRatio,\n            });\n        }\n    }\n    if (adjust.length && (ext === null || ext === void 0 ? void 0 : ext.geometry)) {\n        var g = ext === null || ext === void 0 ? void 0 : ext.geometry;\n        g.adjust(adjust);\n    }\n    // widthRatio\n    if (!isNil(widthRatio)) {\n        chart.theme(deepAssign({}, isObject(theme) ? theme : getTheme(theme), {\n            // columWidthRatio 配置覆盖 theme 中的配置\n            columnWidthRatio: widthRatio,\n        }));\n    }\n    return params;\n}\nexport function interval(params) {\n    var options = params.options;\n    var xField = options.xField, yField = options.yField, interval = options.interval, seriesField = options.seriesField, tooltip = options.tooltip, minColumnWidth = options.minColumnWidth, maxColumnWidth = options.maxColumnWidth, columnBackground = options.columnBackground, dodgePadding = options.dodgePadding, intervalPadding = options.intervalPadding, useDeferredLabel = options.useDeferredLabel;\n    var _a = getTooltipMapping(tooltip, [xField, yField, seriesField]), fields = _a.fields, formatter = _a.formatter;\n    // 保障一定要存在 interval 映射\n    var ext = (interval\n        ? geometry(deepAssign({}, params, {\n            options: {\n                type: 'interval',\n                colorField: seriesField,\n                tooltipFields: fields,\n                mapping: __assign({ tooltip: formatter }, interval),\n                args: {\n                    dodgePadding: dodgePadding,\n                    intervalPadding: intervalPadding,\n                    minColumnWidth: minColumnWidth,\n                    maxColumnWidth: maxColumnWidth,\n                    background: columnBackground,\n                    useDeferredLabel: useDeferredLabel,\n                },\n            },\n        }))\n        : params).ext;\n    return otherAdaptor(__assign(__assign({}, params), { ext: ext }));\n}\n//# sourceMappingURL=interval.js.map","import { deepMix } from '@antv/util';\nimport { deepAssign } from '../../utils';\nimport { getTooltipMapping } from '../../utils/tooltip';\nimport { geometry } from './base';\n/**\n * line 辅助点的配置处理\n * @param params\n */\nexport function line(params) {\n    var options = params.options;\n    var line = options.line, stepType = options.stepType, xField = options.xField, yField = options.yField, seriesField = options.seriesField, smooth = options.smooth, connectNulls = options.connectNulls, tooltip = options.tooltip, useDeferredLabel = options.useDeferredLabel;\n    var _a = getTooltipMapping(tooltip, [xField, yField, seriesField]), fields = _a.fields, formatter = _a.formatter;\n    // 如果存在才处理\n    return line\n        ? geometry(deepAssign({}, params, {\n            options: {\n                type: 'line',\n                colorField: seriesField,\n                tooltipFields: fields,\n                mapping: deepMix({\n                    shape: stepType || (smooth ? 'smooth' : 'line'),\n                    tooltip: formatter,\n                }, line),\n                args: { connectNulls: connectNulls, useDeferredLabel: useDeferredLabel },\n            },\n        }))\n        : params;\n}\n//# sourceMappingURL=line.js.map","import { __assign } from \"tslib\";\nimport { deepAssign } from '../../utils';\nimport { getTooltipMapping } from '../../utils/tooltip';\nimport { geometry } from './base';\n/**\n * point 辅助点的配置处理\n * @param params\n */\nexport function point(params) {\n    var options = params.options;\n    var point = options.point, xField = options.xField, yField = options.yField, seriesField = options.seriesField, sizeField = options.sizeField, shapeField = options.shapeField, tooltip = options.tooltip, useDeferredLabel = options.useDeferredLabel;\n    var _a = getTooltipMapping(tooltip, [xField, yField, seriesField, sizeField, shapeField]), fields = _a.fields, formatter = _a.formatter;\n    return point\n        ? geometry(deepAssign({}, params, {\n            options: {\n                type: 'point',\n                colorField: seriesField,\n                shapeField: shapeField,\n                tooltipFields: fields,\n                mapping: __assign({ tooltip: formatter }, point),\n                args: { useDeferredLabel: useDeferredLabel },\n            },\n        }))\n        : params;\n}\n//# sourceMappingURL=point.js.map","import { __assign } from \"tslib\";\nimport { deepAssign } from '../../utils';\nimport { getTooltipMapping } from '../../utils/tooltip';\nimport { geometry } from './base';\n/**\n * polygon 的配置处理\n * @param params\n */\nexport function polygon(params) {\n    var options = params.options;\n    var polygon = options.polygon, xField = options.xField, yField = options.yField, seriesField = options.seriesField, tooltip = options.tooltip, useDeferredLabel = options.useDeferredLabel;\n    var _a = getTooltipMapping(tooltip, [xField, yField, seriesField]), fields = _a.fields, formatter = _a.formatter;\n    return polygon\n        ? geometry(deepAssign({}, params, {\n            options: {\n                type: 'polygon',\n                colorField: seriesField,\n                tooltipFields: fields,\n                mapping: __assign({ tooltip: formatter }, polygon),\n                args: { useDeferredLabel: useDeferredLabel },\n            },\n        }))\n        : params;\n}\n//# sourceMappingURL=polygon.js.map","import { __assign } from \"tslib\";\nimport { deepAssign } from '../../utils';\nimport { getTooltipMapping } from '../../utils/tooltip';\nimport { geometry } from './base';\n/**\n * schema 的配置处理\n * @param params\n */\nexport function schema(params) {\n    var options = params.options;\n    var schema = options.schema, xField = options.xField, yField = options.yField, seriesField = options.seriesField, tooltip = options.tooltip, useDeferredLabel = options.useDeferredLabel;\n    var _a = getTooltipMapping(tooltip, [xField, yField, seriesField]), fields = _a.fields, formatter = _a.formatter;\n    return schema\n        ? geometry(deepAssign({}, params, {\n            options: {\n                type: 'schema',\n                colorField: seriesField,\n                tooltipFields: fields,\n                mapping: __assign({ tooltip: formatter }, schema),\n                args: { useDeferredLabel: useDeferredLabel },\n            },\n        }))\n        : params;\n}\n//# sourceMappingURL=schema.js.map","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports[\"default\"] = void 0;\n/**\n * Created by hustcc on 18/6/9.\n * Contract: i@hust.cc\n */\n\nvar id = 1;\n\n/**\n * generate unique id in application\n * @return {string}\n */\nvar _default = function _default() {\n  return \"\".concat(id++);\n};\nexports[\"default\"] = _default;","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports[\"default\"] = void 0;\n/**\n * Created by hustcc on 18/6/9.\n * Contract: i@hust.cc\n */\nvar _default = function _default(fn) {\n  var delay = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 60;\n  var timer = null;\n  return function () {\n    var _this = this;\n    for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n      args[_key] = arguments[_key];\n    }\n    clearTimeout(timer);\n    timer = setTimeout(function () {\n      fn.apply(_this, args);\n    }, delay);\n  };\n};\nexports[\"default\"] = _default;","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.SizeSensorId = exports.SensorTabIndex = exports.SensorClassName = void 0;\n/**\n * Created by hustcc on 18/6/9.\n * Contract: i@hust.cc\n */\n\nvar SizeSensorId = 'size-sensor-id';\nexports.SizeSensorId = SizeSensorId;\nvar SensorClassName = 'size-sensor-object';\nexports.SensorClassName = SensorClassName;\nvar SensorTabIndex = '-1';\nexports.SensorTabIndex = SensorTabIndex;","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.createSensor = void 0;\nvar _debounce = _interopRequireDefault(require(\"../debounce\"));\nvar _constant = require(\"../constant\");\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { \"default\": obj }; }\n/**\n * Created by hustcc on 18/6/9.\n * Contract: i@hust.cc\n */\n\nvar createSensor = function createSensor(element, whenDestroy) {\n  var sensor = undefined;\n  // callback\n  var listeners = [];\n\n  /**\n   * create object DOM of sensor\n   * @returns {HTMLObjectElement}\n   */\n  var newSensor = function newSensor() {\n    // adjust style\n    if (getComputedStyle(element).position === 'static') {\n      element.style.position = 'relative';\n    }\n    var obj = document.createElement('object');\n    obj.onload = function () {\n      obj.contentDocument.defaultView.addEventListener('resize', resizeListener);\n      // 直接触发一次 resize\n      resizeListener();\n    };\n    obj.style.display = 'block';\n    obj.style.position = 'absolute';\n    obj.style.top = '0';\n    obj.style.left = '0';\n    obj.style.height = '100%';\n    obj.style.width = '100%';\n    obj.style.overflow = 'hidden';\n    obj.style.pointerEvents = 'none';\n    obj.style.zIndex = '-1';\n    obj.style.opacity = '0';\n    obj.setAttribute('class', _constant.SensorClassName);\n    obj.setAttribute('tabindex', _constant.SensorTabIndex);\n    obj.type = 'text/html';\n\n    // append into dom\n    element.appendChild(obj);\n    // for ie, should set data attribute delay, or will be white screen\n    obj.data = 'about:blank';\n    return obj;\n  };\n\n  /**\n   * trigger listeners\n   */\n  var resizeListener = (0, _debounce[\"default\"])(function () {\n    // trigger all listener\n    listeners.forEach(function (listener) {\n      listener(element);\n    });\n  });\n\n  /**\n   * listen with one callback function\n   * @param cb\n   */\n  var bind = function bind(cb) {\n    // if not exist sensor, then create one\n    if (!sensor) {\n      sensor = newSensor();\n    }\n    if (listeners.indexOf(cb) === -1) {\n      listeners.push(cb);\n    }\n  };\n\n  /**\n   * destroy all\n   */\n  var destroy = function destroy() {\n    if (sensor && sensor.parentNode) {\n      if (sensor.contentDocument) {\n        // remote event\n        sensor.contentDocument.defaultView.removeEventListener('resize', resizeListener);\n      }\n      // remove dom\n      sensor.parentNode.removeChild(sensor);\n      // initial variable\n      element.removeAttribute(_constant.SizeSensorId);\n      sensor = undefined;\n      listeners = [];\n      whenDestroy && whenDestroy();\n    }\n  };\n\n  /**\n   * cancel listener bind\n   * @param cb\n   */\n  var unbind = function unbind(cb) {\n    var idx = listeners.indexOf(cb);\n    if (idx !== -1) {\n      listeners.splice(idx, 1);\n    }\n\n    // no listener, and sensor is exist\n    // then destroy the sensor\n    if (listeners.length === 0 && sensor) {\n      destroy();\n    }\n  };\n  return {\n    element: element,\n    bind: bind,\n    destroy: destroy,\n    unbind: unbind\n  };\n};\nexports.createSensor = createSensor;","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.createSensor = void 0;\nvar _constant = require(\"../constant\");\nvar _debounce = _interopRequireDefault(require(\"../debounce\"));\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { \"default\": obj }; }\n/**\n * Created by hustcc on 18/7/5.\n * Contract: i@hust.cc\n */\n\nvar createSensor = function createSensor(element, whenDestroy) {\n  var sensor = undefined;\n  // callback\n  var listeners = [];\n\n  /**\n   * trigger listeners\n   */\n  var resizeListener = (0, _debounce[\"default\"])(function () {\n    // trigger all\n    listeners.forEach(function (listener) {\n      listener(element);\n    });\n  });\n\n  /**\n   * create ResizeObserver sensor\n   * @returns\n   */\n  var newSensor = function newSensor() {\n    var s = new ResizeObserver(resizeListener);\n    // listen element\n    s.observe(element);\n\n    // trigger once\n    resizeListener();\n    return s;\n  };\n\n  /**\n   * listen with callback\n   * @param cb\n   */\n  var bind = function bind(cb) {\n    if (!sensor) {\n      sensor = newSensor();\n    }\n    if (listeners.indexOf(cb) === -1) {\n      listeners.push(cb);\n    }\n  };\n\n  /**\n   * destroy\n   */\n  var destroy = function destroy() {\n    sensor.disconnect();\n    listeners = [];\n    sensor = undefined;\n    element.removeAttribute(_constant.SizeSensorId);\n    whenDestroy && whenDestroy();\n  };\n\n  /**\n   * cancel bind\n   * @param cb\n   */\n  var unbind = function unbind(cb) {\n    var idx = listeners.indexOf(cb);\n    if (idx !== -1) {\n      listeners.splice(idx, 1);\n    }\n\n    // no listener, and sensor is exist\n    // then destroy the sensor\n    if (listeners.length === 0 && sensor) {\n      destroy();\n    }\n  };\n  return {\n    element: element,\n    bind: bind,\n    destroy: destroy,\n    unbind: unbind\n  };\n};\nexports.createSensor = createSensor;","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.createSensor = void 0;\nvar _object = require(\"./object\");\nvar _resizeObserver = require(\"./resizeObserver\");\n/**\n * Created by hustcc on 18/7/5.\n * Contract: i@hust.cc\n */\n\n/**\n * sensor strategies\n */\n// export const createSensor = createObjectSensor;\nvar createSensor = typeof ResizeObserver !== 'undefined' ? _resizeObserver.createSensor : _object.createSensor;\nexports.createSensor = createSensor;","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.removeSensor = exports.getSensor = exports.Sensors = void 0;\nvar _id = _interopRequireDefault(require(\"./id\"));\nvar _sensors = require(\"./sensors\");\nvar _constant = require(\"./constant\");\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { \"default\": obj }; }\n/**\n * Created by hustcc on 18/6/9.\n * Contract: i@hust.cc\n */\n\n/**\n * all the sensor objects.\n * sensor pool\n */\nvar Sensors = {};\n\n/**\n * When destroy the sensor, remove it from the pool\n */\nexports.Sensors = Sensors;\nfunction clean(sensorId) {\n  // exist, then remove from pool\n  if (sensorId && Sensors[sensorId]) {\n    delete Sensors[sensorId];\n  }\n}\n\n/**\n * get one sensor\n * @param element\n * @returns {*}\n */\nvar getSensor = function getSensor(element) {\n  var sensorId = element.getAttribute(_constant.SizeSensorId);\n\n  // 1. if the sensor exists, then use it\n  if (sensorId && Sensors[sensorId]) {\n    return Sensors[sensorId];\n  }\n\n  // 2. not exist, then create one\n  var newId = (0, _id[\"default\"])();\n  element.setAttribute(_constant.SizeSensorId, newId);\n  var sensor = (0, _sensors.createSensor)(element, function () {\n    return clean(newId);\n  });\n  // add sensor into pool\n  Sensors[newId] = sensor;\n  return sensor;\n};\n\n/**\n * 移除 sensor\n * @param sensor\n */\nexports.getSensor = getSensor;\nvar removeSensor = function removeSensor(sensor) {\n  var sensorId = sensor.element.getAttribute(_constant.SizeSensorId);\n  // remove event, dom of the sensor used\n  sensor.destroy();\n  clean(sensorId);\n};\nexports.removeSensor = removeSensor;","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.ver = exports.clear = exports.bind = void 0;\nvar _sensorPool = require(\"./sensorPool\");\n/**\n * Created by hustcc on 18/6/9.[高考时间]\n * Contract: i@hust.cc\n */\n\n/**\n * bind an element with resize callback function\n * @param {*} element\n * @param {*} cb\n */\nvar bind = function bind(element, cb) {\n  var sensor = (0, _sensorPool.getSensor)(element);\n\n  // listen with callback\n  sensor.bind(cb);\n\n  // return unbind function\n  return function () {\n    sensor.unbind(cb);\n  };\n};\n\n/**\n * clear all the listener and sensor of an element\n * @param element\n */\nexports.bind = bind;\nvar clear = function clear(element) {\n  var sensor = (0, _sensorPool.getSensor)(element);\n  (0, _sensorPool.removeSensor)(sensor);\n};\nexports.clear = clear;\nvar ver = \"1.0.2\";\nexports.ver = ver;","import { __assign, __extends, __spreadArray } from \"tslib\";\nimport EE from '@antv/event-emitter';\nimport { Chart } from '@antv/g2';\nimport { each } from '@antv/util';\nimport { bind } from 'size-sensor';\nimport { deepAssign, getAllElementsRecursively, getContainerSize, pick } from '../utils';\nvar SOURCE_ATTRIBUTE_NAME = 'data-chart-source-type';\n/** plot 图表容器的配置 */\nexport var PLOT_CONTAINER_OPTIONS = [\n    'padding',\n    'appendPadding',\n    'renderer',\n    'pixelRatio',\n    'syncViewPadding',\n    'supportCSSTransform',\n    'limitInPlot',\n];\n/**\n * 所有 plot 的基类\n */\nvar Plot = /** @class */ (function (_super) {\n    __extends(Plot, _super);\n    function Plot(container, options) {\n        var _this = _super.call(this) || this;\n        _this.container = typeof container === 'string' ? document.getElementById(container) : container;\n        _this.options = deepAssign({}, _this.getDefaultOptions(), options);\n        _this.createG2();\n        _this.bindEvents();\n        return _this;\n    }\n    /**\n     * 获取默认的 options 配置项\n     * 每个组件都可以复写\n     */\n    Plot.getDefaultOptions = function () {\n        return {\n            renderer: 'canvas',\n            xAxis: {\n                nice: true,\n                label: {\n                    autoRotate: false,\n                    autoHide: { type: 'equidistance', cfg: { minGap: 6 } },\n                },\n            },\n            yAxis: {\n                nice: true,\n                label: {\n                    autoHide: true,\n                    autoRotate: false,\n                },\n            },\n            animation: true,\n        };\n    };\n    /**\n     * 创建 G2 实例\n     */\n    Plot.prototype.createG2 = function () {\n        var _a = this.options, width = _a.width, height = _a.height, defaultInteractions = _a.defaultInteractions;\n        this.chart = new Chart(__assign(__assign(__assign(__assign({ container: this.container, autoFit: false }, this.getChartSize(width, height)), { localRefresh: false }), pick(this.options, PLOT_CONTAINER_OPTIONS)), { defaultInteractions: defaultInteractions }));\n        // 给容器增加标识，知道图表的来源区别于 G2\n        this.container.setAttribute(SOURCE_ATTRIBUTE_NAME, 'G2Plot');\n    };\n    /**\n     * 计算默认的 chart 大小。逻辑简化：如果存在 width 或 height，则直接使用，否则使用容器大小\n     * @param width\n     * @param height\n     */\n    Plot.prototype.getChartSize = function (width, height) {\n        var chartSize = getContainerSize(this.container);\n        return { width: width || chartSize.width || 400, height: height || chartSize.height || 400 };\n    };\n    /**\n     * 绑定代理所有 G2 的事件\n     */\n    Plot.prototype.bindEvents = function () {\n        var _this = this;\n        if (this.chart) {\n            this.chart.on('*', function (e) {\n                if (e === null || e === void 0 ? void 0 : e.type) {\n                    _this.emit(e.type, e);\n                }\n            });\n        }\n    };\n    /**\n     * 获取默认的 options 配置项\n     * 每个组件都可以复写\n     */\n    Plot.prototype.getDefaultOptions = function () {\n        return Plot.getDefaultOptions();\n    };\n    /**\n     * 绘制\n     */\n    Plot.prototype.render = function () {\n        // 暴力处理，先清空再渲染，需要 G2 层自行做好更新渲染\n        this.chart.clear();\n        // 因为子 view 会继承父 view 的 options 配置（包括 legend，所以会导致 legend 重复创建）\n        // 所以这里给 chart 实例的 options 配置清空\n        // 最好的解法是在 G2 view.clear 方法的时候，重置 options 配置。或者提供方法去 resetOptions\n        // #1684 理论上在多 view 图形上，只要存在 custom legend，都存在类似问题（子弹图、双轴图）\n        // @ts-ignore\n        this.chart.options = {\n            data: [],\n            animate: true,\n        };\n        this.chart.views = []; // 删除已有的 views\n        // 执行 adaptor\n        this.execAdaptor();\n        // 渲染\n        this.chart.render();\n        // 绑定\n        this.bindSizeSensor();\n    };\n    /**\n     * 更新: 更新配置且重新渲染\n     * @param options\n     */\n    Plot.prototype.update = function (options) {\n        this.updateOption(options);\n        this.render();\n    };\n    /**\n     * 更新配置\n     * @param options\n     */\n    Plot.prototype.updateOption = function (options) {\n        this.options = deepAssign({}, this.options, options);\n    };\n    /**\n     * 设置状态\n     * @param type 状态类型，支持 'active' | 'inactive' | 'selected' 三种\n     * @param conditions 条件，支持数组\n     * @param status 是否激活，默认 true\n     */\n    Plot.prototype.setState = function (type, condition, status) {\n        if (status === void 0) { status = true; }\n        var elements = getAllElementsRecursively(this.chart);\n        each(elements, function (ele) {\n            if (condition(ele.getData())) {\n                ele.setState(type, status);\n            }\n        });\n    };\n    /**\n     * 获取状态\n     */\n    Plot.prototype.getStates = function () {\n        var elements = getAllElementsRecursively(this.chart);\n        var stateObjects = [];\n        each(elements, function (element) {\n            var data = element.getData();\n            var states = element.getStates();\n            each(states, function (state) {\n                stateObjects.push({ data: data, state: state, geometry: element.geometry, element: element });\n            });\n        });\n        return stateObjects;\n    };\n    /**\n     * 更新数据\n     * @override\n     * @param options\n     */\n    Plot.prototype.changeData = function (data) {\n        // @ts-ignore\n        this.update({ data: data });\n        // TODO: 临时方案，最好使用下面的方式去更新数据\n        // this.chart.changeData(data);\n    };\n    /**\n     * 修改画布大小\n     * @param width\n     * @param height\n     */\n    Plot.prototype.changeSize = function (width, height) {\n        this.chart.changeSize(width, height);\n    };\n    /**\n     * 增加图表标注。通过 id 标识，如果匹配到，就做更新\n     */\n    Plot.prototype.addAnnotations = function (annotations, view) {\n        view = view ? view : this.chart;\n        var incoming = __spreadArray([], annotations, true);\n        var controller = view.getController('annotation');\n        var current = controller.getComponents().map(function (co) { return co.extra; });\n        controller.clear(true);\n        var _loop_1 = function (i) {\n            var annotation = current[i];\n            var findIndex = incoming.findIndex(function (item) { return item.id && item.id === annotation.id; });\n            if (findIndex !== -1) {\n                annotation = deepAssign({}, annotation, incoming[findIndex]);\n                incoming.splice(findIndex, 1);\n            }\n            controller.annotation(annotation);\n        };\n        for (var i = 0; i < current.length; i++) {\n            _loop_1(i);\n        }\n        incoming.forEach(function (annotation) { return controller.annotation(annotation); });\n        view.render(true);\n    };\n    /**\n     * 删除图表标注。通过 id 标识，如果匹配到，就做删除\n     */\n    Plot.prototype.removeAnnotations = function (annotations) {\n        var controller = this.chart.getController('annotation');\n        var current = controller.getComponents().map(function (co) { return co.extra; });\n        controller.clear(true);\n        var _loop_2 = function (i) {\n            var annotation = current[i];\n            if (!annotations.find(function (item) { return item.id && item.id === annotation.id; })) {\n                controller.annotation(annotation);\n            }\n        };\n        for (var i = 0; i < current.length; i++) {\n            _loop_2(i);\n        }\n        this.chart.render(true);\n    };\n    /**\n     * 销毁\n     */\n    Plot.prototype.destroy = function () {\n        // 取消 size-sensor 的绑定\n        this.unbindSizeSensor();\n        // G2 的销毁\n        this.chart.destroy();\n        // 清空已经绑定的事件\n        this.off();\n        this.container.removeAttribute(SOURCE_ATTRIBUTE_NAME);\n    };\n    /**\n     * 执行 adaptor 操作\n     */\n    Plot.prototype.execAdaptor = function () {\n        var adaptor = this.getSchemaAdaptor();\n        var _a = this.options, padding = _a.padding, appendPadding = _a.appendPadding;\n        // 更新 padding\n        this.chart.padding = padding;\n        // 更新 appendPadding\n        this.chart.appendPadding = appendPadding;\n        // 转化成 G2 API\n        adaptor({\n            chart: this.chart,\n            options: this.options,\n        });\n    };\n    /**\n     * 当图表容器大小变化的时候，执行的函数\n     */\n    Plot.prototype.triggerResize = function () {\n        this.chart.forceFit();\n    };\n    /**\n     * 绑定 dom 容器大小变化的事件\n     */\n    Plot.prototype.bindSizeSensor = function () {\n        var _this = this;\n        if (this.unbind) {\n            return;\n        }\n        var _a = this.options.autoFit, autoFit = _a === void 0 ? true : _a;\n        if (autoFit) {\n            this.unbind = bind(this.container, function () {\n                // 获取最新的宽高信息\n                var _a = getContainerSize(_this.container), width = _a.width, height = _a.height;\n                // 主要是防止绑定的时候触发 resize 回调\n                if (width !== _this.chart.width || height !== _this.chart.height) {\n                    _this.triggerResize();\n                }\n            });\n        }\n    };\n    /**\n     * 取消绑定\n     */\n    Plot.prototype.unbindSizeSensor = function () {\n        if (this.unbind) {\n            this.unbind();\n            this.unbind = undefined;\n        }\n    };\n    return Plot;\n}(EE));\nexport { Plot };\n//# sourceMappingURL=plot.js.map","import { __assign } from \"tslib\";\nimport { map, reduce } from '@antv/util';\nimport { isRealNumber } from '../number';\n/**\n * 对数据进行百分比化\n * @param data\n * @param measure\n * @param groupField\n * @param as\n */\nexport function percent(data, measure, groupField, as) {\n    // 1. 先计算每一个分组的 max 值\n    var sumMap = reduce(data, function (map, datum) {\n        var groupValue = datum[groupField];\n        var sum = map.has(groupValue) ? map.get(groupValue) : 0;\n        var v = datum[measure];\n        sum = isRealNumber(v) ? sum + v : sum;\n        map.set(groupValue, sum);\n        return map;\n    }, new Map());\n    // 2. 循环数组，计算占比\n    return map(data, function (datum) {\n        var _a;\n        var v = datum[measure];\n        var groupValue = datum[groupField];\n        var percentage = isRealNumber(v) && sumMap.get(groupValue) !== 0 ? v / sumMap.get(groupValue) : 0;\n        return __assign(__assign({}, datum), (_a = {}, _a[as] = percentage, _a));\n    });\n}\n/**\n * 对数据进行深层百分比化\n * @param data\n * @param measure  // 数值\n * @param fields // 需要分组的 field值\n * @param as // 存储percent 百分比的值\n */\nexport function getDeepPercent(data, measure, fields, percent) {\n    var sumMap = reduce(data, function (map, datum) {\n        // 获取分组得到的枚举key值\n        var groupValue = reduce(fields, function (value, field) { return \"\".concat(value).concat(datum[field]); }, '');\n        var sum = map.has(groupValue) ? map.get(groupValue) : 0;\n        var v = datum[measure];\n        sum = isRealNumber(v) ? sum + v : sum;\n        map.set(groupValue, sum);\n        return map;\n    }, new Map());\n    // 2. 循环数组，计算占比\n    return map(data, function (datum) {\n        var _a;\n        var v = datum[measure];\n        // 获取分组得到的枚举key值\n        var groupValue = reduce(fields, function (value, field) { return \"\".concat(value).concat(datum[field]); }, '');\n        var percentage = isRealNumber(v) && sumMap.get(groupValue) !== 0 ? v / sumMap.get(groupValue) : 0;\n        return __assign(__assign({}, datum), (_a = {}, _a[percent] = percentage, _a));\n    });\n}\n/**\n * 获取数据，如果是百分比，进行数据转换 (适用于面积图、柱状图、条形图)\n * @param isPercent 是否百分比\n */\nexport function getDataWhetherPercentage(data, yField, groupField, asField, isPercent) {\n    return !isPercent ? data : percent(data, yField, groupField, asField);\n}\n//# sourceMappingURL=percent.js.map","import { __assign, __rest } from \"tslib\";\nimport { each, isArray } from '@antv/util';\nimport { animation, annotation, interaction, limitInPlot, scale, scrollbar, slider, theme, tooltip, } from '../../adaptor/common';\nimport { area, line, point } from '../../adaptor/geometries';\nimport { deepAssign, findGeometry, flow, transformLabel } from '../../utils';\nimport { adjustYMetaByZero } from '../../utils/data';\n/**\n * geometry 配置处理\n * @param params\n */\nfunction geometry(params) {\n    var chart = params.chart, options = params.options;\n    var data = options.data, color = options.color, lineStyle = options.lineStyle, lineShape = options.lineShape, pointMapping = options.point, areaMapping = options.area, seriesField = options.seriesField;\n    var pointState = pointMapping === null || pointMapping === void 0 ? void 0 : pointMapping.state;\n    var areaState = areaMapping === null || areaMapping === void 0 ? void 0 : areaMapping.state;\n    chart.data(data);\n    // line geometry 处理\n    var primary = deepAssign({}, params, {\n        options: {\n            shapeField: seriesField,\n            line: {\n                color: color,\n                style: lineStyle,\n                shape: lineShape,\n            },\n            // 颜色保持一致，因为如果颜色不一致，会导致 tooltip 中元素重复。\n            // 如果存在，才设置，否则为空\n            point: pointMapping && __assign({ color: color, shape: 'circle' }, pointMapping),\n            // 面积配置\n            area: areaMapping && __assign({ color: color }, areaMapping),\n            // label 不传递给各个 geometry adaptor，由 label adaptor 处理\n            label: undefined,\n        },\n    });\n    var second = deepAssign({}, primary, { options: { tooltip: false, state: pointState } });\n    var areaParams = deepAssign({}, primary, { options: { tooltip: false, state: areaState } });\n    line(primary);\n    point(second);\n    area(areaParams);\n    return params;\n}\n/**\n * meta 配置\n * @param params\n */\nexport function meta(params) {\n    var _a, _b;\n    var options = params.options;\n    var xAxis = options.xAxis, yAxis = options.yAxis, xField = options.xField, yField = options.yField, data = options.data;\n    return flow(scale((_a = {},\n        _a[xField] = xAxis,\n        _a[yField] = yAxis,\n        _a), (_b = {},\n        _b[xField] = {\n            type: 'cat',\n        },\n        _b[yField] = adjustYMetaByZero(data, yField),\n        _b)))(params);\n}\n/**\n * 坐标系配置. 支持 reflect 镜像处理\n * @param params\n */\nfunction coordinate(params) {\n    var chart = params.chart, options = params.options;\n    var reflect = options.reflect;\n    if (reflect) {\n        var p = reflect;\n        if (!isArray(p)) {\n            p = [p];\n        }\n        var actions = p.map(function (d) { return ['reflect', d]; });\n        chart.coordinate({ type: 'rect', actions: actions });\n    }\n    return params;\n}\n/**\n * axis 配置\n * @param params\n */\nexport function axis(params) {\n    var chart = params.chart, options = params.options;\n    var xAxis = options.xAxis, yAxis = options.yAxis, xField = options.xField, yField = options.yField;\n    // 为 false 则是不显示轴\n    if (xAxis === false) {\n        chart.axis(xField, false);\n    }\n    else {\n        chart.axis(xField, xAxis);\n    }\n    if (yAxis === false) {\n        chart.axis(yField, false);\n    }\n    else {\n        chart.axis(yField, yAxis);\n    }\n    return params;\n}\n/**\n * legend 配置\n * @param params\n */\nexport function legend(params) {\n    var chart = params.chart, options = params.options;\n    var legend = options.legend, seriesField = options.seriesField;\n    if (legend && seriesField) {\n        chart.legend(seriesField, legend);\n    }\n    else if (legend === false) {\n        chart.legend(false);\n    }\n    return params;\n}\n/**\n * 数据标签\n * @param params\n */\nfunction label(params) {\n    var chart = params.chart, options = params.options;\n    var label = options.label, yField = options.yField;\n    var lineGeometry = findGeometry(chart, 'line');\n    // label 为 false, 空 则不显示 label\n    if (!label) {\n        lineGeometry.label(false);\n    }\n    else {\n        var fields = label.fields, callback = label.callback, cfg = __rest(label, [\"fields\", \"callback\"]);\n        lineGeometry.label({\n            fields: fields || [yField],\n            callback: callback,\n            cfg: __assign({ layout: [\n                    { type: 'limit-in-plot' },\n                    { type: 'path-adjust-position' },\n                    { type: 'point-adjust-position' },\n                    { type: 'limit-in-plot', cfg: { action: 'hide' } },\n                ] }, transformLabel(cfg)),\n        });\n    }\n    return params;\n}\n/**\n * 统一处理 adjust\n * @param params\n */\nexport function adjust(params) {\n    var chart = params.chart, options = params.options;\n    var isStack = options.isStack;\n    if (isStack) {\n        each(chart.geometries, function (g) {\n            g.adjust('stack');\n        });\n    }\n    return params;\n}\n/**\n * 折线图适配器\n * @param chart\n * @param options\n */\nexport function adaptor(params) {\n    // flow 的方式处理所有的配置到 G2 API\n    return flow(geometry, meta, adjust, theme, coordinate, axis, legend, tooltip, label, slider, scrollbar, interaction, animation, annotation(), limitInPlot)(params);\n}\n//# sourceMappingURL=adaptor.js.map","import { __assign, __rest } from \"tslib\";\nimport { each, omit } from '@antv/util';\nimport { animation, annotation, interaction, limitInPlot, pattern, slider, theme, tooltip, transformations, } from '../../adaptor/common';\nimport { area, line, point } from '../../adaptor/geometries';\nimport { deepAssign, findGeometry, flow, transformLabel } from '../../utils';\nimport { getDataWhetherPercentage } from '../../utils/transform/percent';\nimport { axis, legend, meta } from '../line/adaptor';\nexport { meta };\n/**\n * geometry 处理\n * @param params\n */\nfunction geometry(params) {\n    var chart = params.chart, options = params.options;\n    var data = options.data, areaStyle = options.areaStyle, areaShape = options.areaShape, color = options.color, pointMapping = options.point, lineMapping = options.line, isPercent = options.isPercent, xField = options.xField, yField = options.yField, tooltip = options.tooltip, seriesField = options.seriesField, startOnZero = options.startOnZero;\n    var pointState = pointMapping === null || pointMapping === void 0 ? void 0 : pointMapping.state;\n    var chartData = getDataWhetherPercentage(data, yField, xField, yField, isPercent);\n    chart.data(chartData);\n    // 百分比堆积图，默认会给一个 % 格式化逻辑, 用户可自定义\n    var tooltipOptions = isPercent\n        ? __assign({ formatter: function (datum) { return ({\n                name: datum[seriesField] || datum[xField],\n                value: (Number(datum[yField]) * 100).toFixed(2) + '%',\n            }); } }, tooltip) : tooltip;\n    var primary = deepAssign({}, params, {\n        options: {\n            area: {\n                color: color,\n                style: areaStyle,\n                shape: areaShape,\n            },\n            point: pointMapping && __assign({ color: color }, pointMapping),\n            tooltip: tooltipOptions,\n            // label 不传递给各个 geometry adaptor，由 label adaptor 处理\n            label: undefined,\n            args: {\n                startOnZero: startOnZero,\n            },\n        },\n    });\n    // 线默认 2px (折线不能复用面积图的 state，因为 fill 和 stroke 不匹配)\n    var lineParams = {\n        chart: chart,\n        options: deepAssign({ line: { size: 2 } }, omit(options, ['state']), {\n            // 颜色保持一致，因为如果颜色不一致，会导致 tooltip 中元素重复。\n            // 如果存在，才设置，否则为空\n            line: lineMapping && __assign({ color: color }, lineMapping),\n            sizeField: seriesField,\n            state: lineMapping === null || lineMapping === void 0 ? void 0 : lineMapping.state,\n            tooltip: false,\n            // label 不传递给各个 geometry adaptor，由 label adaptor 处理\n            label: undefined,\n            args: {\n                startOnZero: startOnZero,\n            },\n        }),\n    };\n    var pointParams = deepAssign({}, primary, { options: { tooltip: false, state: pointState } });\n    // area geometry 处理\n    area(primary);\n    line(lineParams);\n    point(pointParams);\n    return params;\n}\n/**\n * 数据标签\n * @param params\n */\nfunction label(params) {\n    var chart = params.chart, options = params.options;\n    var label = options.label, yField = options.yField;\n    var areaGeometry = findGeometry(chart, 'area');\n    // label 为 false, 空 则不显示 label\n    if (!label) {\n        areaGeometry.label(false);\n    }\n    else {\n        var fields = label.fields, callback = label.callback, cfg = __rest(label, [\"fields\", \"callback\"]);\n        areaGeometry.label({\n            fields: fields || [yField],\n            callback: callback,\n            cfg: __assign({ layout: [\n                    { type: 'limit-in-plot' },\n                    { type: 'path-adjust-position' },\n                    { type: 'point-adjust-position' },\n                    { type: 'limit-in-plot', cfg: { action: 'hide' } },\n                ] }, transformLabel(cfg)),\n        });\n    }\n    return params;\n}\n/**\n * 处理 adjust\n * @param params\n */\nfunction adjust(params) {\n    var chart = params.chart, options = params.options;\n    var isStack = options.isStack, isPercent = options.isPercent, seriesField = options.seriesField;\n    if ((isPercent || isStack) && seriesField) {\n        each(chart.geometries, function (g) {\n            g.adjust('stack');\n        });\n    }\n    return params;\n}\n/**\n * 折线图适配器\n * @param chart\n * @param options\n */\nexport function adaptor(params) {\n    // flow 的方式处理所有的配置到 G2 API\n    return flow(theme, pattern('areaStyle'), transformations('rect'), geometry, meta, adjust, axis, legend, tooltip, label, slider, annotation(), interaction, animation, limitInPlot)(params);\n}\n//# sourceMappingURL=adaptor.js.map","import { Plot } from '../../core/plot';\nimport { deepAssign } from '../../utils';\n/**\n * 面积图默认配置项\n */\nexport var DEFAULT_OPTIONS = deepAssign({}, Plot.getDefaultOptions(), {\n    tooltip: {\n        shared: true,\n        showMarkers: true,\n        showCrosshairs: true,\n        crosshairs: {\n            type: 'x',\n        },\n    },\n    isStack: true,\n    // 默认开启\n    line: {},\n    legend: {\n        position: 'top-left',\n        radio: {},\n    },\n});\n//# sourceMappingURL=constants.js.map","import { __extends } from \"tslib\";\nimport { Plot } from '../../core/plot';\nimport { getDataWhetherPercentage } from '../../utils/transform/percent';\nimport { adaptor, meta } from './adaptor';\nimport { DEFAULT_OPTIONS } from './constants';\nvar Area = /** @class */ (function (_super) {\n    __extends(Area, _super);\n    function Area() {\n        var _this = _super !== null && _super.apply(this, arguments) || this;\n        /** 图表类型 */\n        _this.type = 'area';\n        return _this;\n    }\n    /**\n     * 获取 面积图 默认配置项\n     * 供外部使用\n     */\n    Area.getDefaultOptions = function () {\n        return DEFAULT_OPTIONS;\n    };\n    /**\n     * 获取 面积图 默认配置\n     */\n    Area.prototype.getDefaultOptions = function () {\n        return Area.getDefaultOptions();\n    };\n    /**\n     * @override\n     * @param data\n     */\n    Area.prototype.changeData = function (data) {\n        this.updateOption({ data: data });\n        var _a = this.options, isPercent = _a.isPercent, xField = _a.xField, yField = _a.yField;\n        var _b = this, chart = _b.chart, options = _b.options;\n        meta({ chart: chart, options: options });\n        this.chart.changeData(getDataWhetherPercentage(data, yField, xField, yField, isPercent));\n    };\n    /**\n     * 获取 面积图 的适配器\n     */\n    Area.prototype.getSchemaAdaptor = function () {\n        return adaptor;\n    };\n    return Area;\n}(Plot));\nexport { Area };\n//# sourceMappingURL=index.js.map","import { __assign, __extends } from \"tslib\";\nimport { Action, Util } from '@antv/g2';\nimport { get } from '@antv/util';\nimport { deepAssign, normalPadding } from '../../utils';\nvar PADDING_RIGHT = 10;\nvar PADDING_TOP = 5;\n/**\n * Action 中的 Button 按钮配置\n *\n * 可能的使用场景：brush filter\n */\nexport var BUTTON_ACTION_CONFIG = {\n    padding: [8, 10],\n    text: 'reset',\n    textStyle: {\n        default: {\n            x: 0,\n            y: 0,\n            fontSize: 12,\n            fill: '#333333',\n            cursor: 'pointer',\n        },\n    },\n    buttonStyle: {\n        default: {\n            fill: '#f7f7f7',\n            stroke: '#cccccc',\n            cursor: 'pointer',\n        },\n        active: {\n            fill: '#e6e6e6',\n        },\n    },\n};\n/**\n * @override 复写 G2 Button Action, 后续直接使用 GUI\n */\nvar ButtonAction = /** @class */ (function (_super) {\n    __extends(ButtonAction, _super);\n    function ButtonAction() {\n        var _this = _super !== null && _super.apply(this, arguments) || this;\n        _this.buttonGroup = null;\n        _this.buttonCfg = __assign({ name: 'button' }, BUTTON_ACTION_CONFIG);\n        return _this;\n    }\n    /**\n     * 获取 mix 默认的配置和用户配置\n     */\n    ButtonAction.prototype.getButtonCfg = function () {\n        var view = this.context.view;\n        var buttonCfg = get(view, ['interactions', 'filter-action', 'cfg', 'buttonConfig']);\n        return deepAssign(this.buttonCfg, buttonCfg, this.cfg);\n    };\n    /**\n     * 绘制 Button 和 文本\n     */\n    ButtonAction.prototype.drawButton = function () {\n        var config = this.getButtonCfg();\n        var group = this.context.view.foregroundGroup.addGroup({\n            name: config.name,\n        });\n        var textShape = this.drawText(group);\n        this.drawBackground(group, textShape.getBBox());\n        this.buttonGroup = group;\n    };\n    /**\n     * 绘制文本\n     */\n    ButtonAction.prototype.drawText = function (group) {\n        var _a;\n        var config = this.getButtonCfg();\n        // 添加文本\n        return group.addShape({\n            type: 'text',\n            name: 'button-text',\n            attrs: __assign({ text: config.text }, (_a = config.textStyle) === null || _a === void 0 ? void 0 : _a.default),\n        });\n    };\n    ButtonAction.prototype.drawBackground = function (group, bbox) {\n        var _a;\n        var config = this.getButtonCfg();\n        var padding = normalPadding(config.padding);\n        // 添加背景按钮\n        var buttonShape = group.addShape({\n            type: 'rect',\n            name: 'button-rect',\n            attrs: __assign({ x: bbox.x - padding[3], y: bbox.y - padding[0], width: bbox.width + padding[1] + padding[3], height: bbox.height + padding[0] + padding[2] }, (_a = config.buttonStyle) === null || _a === void 0 ? void 0 : _a.default),\n        });\n        buttonShape.toBack(); // 在后面\n        // active 效果内置\n        group.on('mouseenter', function () {\n            var _a;\n            buttonShape.attr((_a = config.buttonStyle) === null || _a === void 0 ? void 0 : _a.active);\n        });\n        group.on('mouseleave', function () {\n            var _a;\n            buttonShape.attr((_a = config.buttonStyle) === null || _a === void 0 ? void 0 : _a.default);\n        });\n        return buttonShape;\n    };\n    // 重置位置\n    ButtonAction.prototype.resetPosition = function () {\n        var view = this.context.view;\n        var coord = view.getCoordinate();\n        var point = coord.convert({ x: 1, y: 1 }); // 后面直接改成左上角\n        var buttonGroup = this.buttonGroup;\n        var bbox = buttonGroup.getBBox();\n        var matrix = Util.transform(null, [\n            ['t', point.x - bbox.width - PADDING_RIGHT, point.y + bbox.height + PADDING_TOP],\n        ]);\n        buttonGroup.setMatrix(matrix);\n    };\n    /**\n     * 显示\n     */\n    ButtonAction.prototype.show = function () {\n        if (!this.buttonGroup) {\n            this.drawButton();\n        }\n        this.resetPosition();\n        this.buttonGroup.show();\n    };\n    /**\n     * 隐藏\n     */\n    ButtonAction.prototype.hide = function () {\n        if (this.buttonGroup) {\n            this.buttonGroup.hide();\n        }\n    };\n    /**\n     * 销毁\n     */\n    ButtonAction.prototype.destroy = function () {\n        var buttonGroup = this.buttonGroup;\n        if (buttonGroup) {\n            buttonGroup.remove();\n        }\n        _super.prototype.destroy.call(this);\n    };\n    return ButtonAction;\n}(Action));\nexport { ButtonAction };\n//# sourceMappingURL=reset-button.js.map","import { registerAction, registerInteraction } from '@antv/g2';\nimport { ButtonAction } from './actions/reset-button';\nregisterAction('brush-reset-button', ButtonAction, {\n    name: 'brush-reset-button',\n});\nregisterInteraction('filter-action', {});\n/**\n * G2 已经内置了 brush、brush-x、brush-y 等交互，其它：\n *\n * 1. element-range-highlight 是否可用重命名为 brush-highlight？(mask 可以移动)\n * 2. brush-visible 与 brush 的区别是？\n */\nfunction isPointInView(context) {\n    return context.isInPlot();\n}\n/**\n * 获取 交互 start 阶段的相关配置\n */\nexport function getInteractionCfg(interactionType, brushType, options) {\n    var _a = options || {}, mask = _a.mask, isStartEnable = _a.isStartEnable;\n    var maskType = brushType || 'rect';\n    switch (interactionType) {\n        case 'brush':\n            return {\n                showEnable: [\n                    { trigger: 'plot:mouseenter', action: 'cursor:crosshair', isEnable: isStartEnable || (function () { return true; }) },\n                    { trigger: 'plot:mouseleave', action: 'cursor:default' },\n                ],\n                start: [\n                    {\n                        trigger: 'mousedown',\n                        isEnable: isStartEnable || isPointInView,\n                        action: ['brush:start', \"\".concat(maskType, \"-mask:start\"), \"\".concat(maskType, \"-mask:show\")],\n                        // 对应第二个action的参数\n                        arg: [null, { maskStyle: mask === null || mask === void 0 ? void 0 : mask.style }],\n                    },\n                ],\n                processing: [\n                    {\n                        trigger: 'mousemove',\n                        isEnable: isPointInView,\n                        action: [\"\".concat(maskType, \"-mask:resize\")],\n                    },\n                ],\n                end: [\n                    {\n                        trigger: 'mouseup',\n                        isEnable: isPointInView,\n                        action: [\n                            'brush:filter',\n                            'brush:end',\n                            \"\".concat(maskType, \"-mask:end\"),\n                            \"\".concat(maskType, \"-mask:hide\"),\n                            'brush-reset-button:show',\n                        ],\n                    },\n                ],\n                rollback: [\n                    {\n                        trigger: 'brush-reset-button:click',\n                        action: ['brush:reset', 'brush-reset-button:hide', 'cursor:crosshair'],\n                    },\n                ],\n            };\n        case 'brush-highlight':\n            return {\n                showEnable: [\n                    { trigger: 'plot:mouseenter', action: 'cursor:crosshair', isEnable: isStartEnable || (function () { return true; }) },\n                    { trigger: 'plot:mousemove', action: 'cursor:crosshair', isEnable: isStartEnable || (function () { return true; }) },\n                    {\n                        trigger: 'plot:mousemove',\n                        action: 'cursor:default',\n                        isEnable: function (context) { return (isStartEnable ? !isStartEnable(context) : false); },\n                    },\n                    { trigger: 'mask:mouseenter', action: 'cursor:move', isEnable: isStartEnable || (function () { return true; }) },\n                    { trigger: 'plot:mouseleave', action: 'cursor:default' },\n                    { trigger: 'mask:mouseleave', action: 'cursor:crosshair' },\n                ],\n                start: [\n                    {\n                        trigger: 'plot:mousedown',\n                        isEnable: isStartEnable ||\n                            (function (context) {\n                                // 不要点击在 mask 上重新开始\n                                return !context.isInShape('mask');\n                            }),\n                        action: [\"\".concat(maskType, \"-mask:start\"), \"\".concat(maskType, \"-mask:show\")],\n                        // 对应第 1 个action的参数\n                        arg: [{ maskStyle: mask === null || mask === void 0 ? void 0 : mask.style }],\n                    },\n                    {\n                        trigger: 'mask:dragstart',\n                        action: [\"\".concat(maskType, \"-mask:moveStart\")],\n                    },\n                ],\n                processing: [\n                    {\n                        trigger: 'plot:mousemove',\n                        action: [\"\".concat(maskType, \"-mask:resize\")],\n                    },\n                    {\n                        trigger: 'mask:drag',\n                        action: [\"\".concat(maskType, \"-mask:move\")],\n                    },\n                    {\n                        trigger: 'mask:change',\n                        action: ['element-range-highlight:highlight'],\n                    },\n                ],\n                end: [\n                    { trigger: 'plot:mouseup', action: [\"\".concat(maskType, \"-mask:end\")] },\n                    { trigger: 'mask:dragend', action: [\"\".concat(maskType, \"-mask:moveEnd\")] },\n                    {\n                        trigger: 'document:mouseup',\n                        isEnable: function (context) {\n                            return !context.isInPlot();\n                        },\n                        action: ['element-range-highlight:clear', \"\".concat(maskType, \"-mask:end\"), \"\".concat(maskType, \"-mask:hide\")],\n                    },\n                ],\n                rollback: [{ trigger: 'dblclick', action: ['element-range-highlight:clear', \"\".concat(maskType, \"-mask:hide\")] }],\n            };\n        case 'brush-x':\n            return {\n                showEnable: [\n                    { trigger: 'plot:mouseenter', action: 'cursor:crosshair', isEnable: isStartEnable || (function () { return true; }) },\n                    { trigger: 'plot:mouseleave', action: 'cursor:default' },\n                ],\n                start: [\n                    {\n                        trigger: 'mousedown',\n                        isEnable: isStartEnable || isPointInView,\n                        action: ['brush-x:start', \"\".concat(maskType, \"-mask:start\"), \"\".concat(maskType, \"-mask:show\")],\n                        // 对应第二个action的参数\n                        arg: [null, { maskStyle: mask === null || mask === void 0 ? void 0 : mask.style }],\n                    },\n                ],\n                processing: [\n                    {\n                        trigger: 'mousemove',\n                        isEnable: isPointInView,\n                        action: [\"\".concat(maskType, \"-mask:resize\")],\n                    },\n                ],\n                end: [\n                    {\n                        trigger: 'mouseup',\n                        isEnable: isPointInView,\n                        action: ['brush-x:filter', 'brush-x:end', \"\".concat(maskType, \"-mask:end\"), \"\".concat(maskType, \"-mask:hide\")],\n                    },\n                ],\n                rollback: [{ trigger: 'dblclick', action: ['brush-x:reset'] }],\n            };\n        case 'brush-x-highlight':\n            return {\n                showEnable: [\n                    { trigger: 'plot:mouseenter', action: 'cursor:crosshair', isEnable: isStartEnable || (function () { return true; }) },\n                    { trigger: 'mask:mouseenter', action: 'cursor:move', isEnable: isStartEnable || (function () { return true; }) },\n                    { trigger: 'plot:mouseleave', action: 'cursor:default' },\n                    { trigger: 'mask:mouseleave', action: 'cursor:crosshair' },\n                ],\n                start: [\n                    {\n                        trigger: 'plot:mousedown',\n                        isEnable: isStartEnable ||\n                            (function (context) {\n                                // 不要点击在 mask 上重新开始\n                                return !context.isInShape('mask');\n                            }),\n                        action: [\"\".concat(maskType, \"-mask:start\"), \"\".concat(maskType, \"-mask:show\")],\n                        // 对应第 1 个action的参数\n                        arg: [{ maskStyle: mask === null || mask === void 0 ? void 0 : mask.style }],\n                    },\n                    {\n                        trigger: 'mask:dragstart',\n                        action: [\"\".concat(maskType, \"-mask:moveStart\")],\n                    },\n                ],\n                processing: [\n                    {\n                        trigger: 'plot:mousemove',\n                        action: [\"\".concat(maskType, \"-mask:resize\")],\n                    },\n                    {\n                        trigger: 'mask:drag',\n                        action: [\"\".concat(maskType, \"-mask:move\")],\n                    },\n                    {\n                        trigger: 'mask:change',\n                        action: ['element-range-highlight:highlight'],\n                    },\n                ],\n                end: [\n                    { trigger: 'plot:mouseup', action: [\"\".concat(maskType, \"-mask:end\")] },\n                    { trigger: 'mask:dragend', action: [\"\".concat(maskType, \"-mask:moveEnd\")] },\n                    {\n                        trigger: 'document:mouseup',\n                        isEnable: function (context) {\n                            return !context.isInPlot();\n                        },\n                        action: ['element-range-highlight:clear', \"\".concat(maskType, \"-mask:end\"), \"\".concat(maskType, \"-mask:hide\")],\n                    },\n                ],\n                rollback: [{ trigger: 'dblclick', action: ['element-range-highlight:clear', \"\".concat(maskType, \"-mask:hide\")] }],\n            };\n        case 'brush-y':\n            return {\n                showEnable: [\n                    { trigger: 'plot:mouseenter', action: 'cursor:crosshair', isEnable: isStartEnable || (function () { return true; }) },\n                    { trigger: 'plot:mouseleave', action: 'cursor:default' },\n                ],\n                start: [\n                    {\n                        trigger: 'mousedown',\n                        isEnable: isStartEnable || isPointInView,\n                        action: ['brush-y:start', \"\".concat(maskType, \"-mask:start\"), \"\".concat(maskType, \"-mask:show\")],\n                        // 对应第二个action的参数\n                        arg: [null, { maskStyle: mask === null || mask === void 0 ? void 0 : mask.style }],\n                    },\n                ],\n                processing: [\n                    {\n                        trigger: 'mousemove',\n                        isEnable: isPointInView,\n                        action: [\"\".concat(maskType, \"-mask:resize\")],\n                    },\n                ],\n                end: [\n                    {\n                        trigger: 'mouseup',\n                        isEnable: isPointInView,\n                        action: ['brush-y:filter', 'brush-y:end', \"\".concat(maskType, \"-mask:end\"), \"\".concat(maskType, \"-mask:hide\")],\n                    },\n                ],\n                rollback: [{ trigger: 'dblclick', action: ['brush-y:reset'] }],\n            };\n        case 'brush-y-highlight':\n            return {\n                showEnable: [\n                    { trigger: 'plot:mouseenter', action: 'cursor:crosshair', isEnable: isStartEnable || (function () { return true; }) },\n                    { trigger: 'mask:mouseenter', action: 'cursor:move', isEnable: isStartEnable || (function () { return true; }) },\n                    { trigger: 'plot:mouseleave', action: 'cursor:default' },\n                    { trigger: 'mask:mouseleave', action: 'cursor:crosshair' },\n                ],\n                start: [\n                    {\n                        trigger: 'plot:mousedown',\n                        isEnable: isStartEnable ||\n                            (function (context) {\n                                // 不要点击在 mask 上重新开始\n                                return !context.isInShape('mask');\n                            }),\n                        action: [\"\".concat(maskType, \"-mask:start\"), \"\".concat(maskType, \"-mask:show\")],\n                        // 对应第 1 个action的参数\n                        arg: [{ maskStyle: mask === null || mask === void 0 ? void 0 : mask.style }],\n                    },\n                    {\n                        trigger: 'mask:dragstart',\n                        action: [\"\".concat(maskType, \"-mask:moveStart\")],\n                    },\n                ],\n                processing: [\n                    {\n                        trigger: 'plot:mousemove',\n                        action: [\"\".concat(maskType, \"-mask:resize\")],\n                    },\n                    {\n                        trigger: 'mask:drag',\n                        action: [\"\".concat(maskType, \"-mask:move\")],\n                    },\n                    {\n                        trigger: 'mask:change',\n                        action: ['element-range-highlight:highlight'],\n                    },\n                ],\n                end: [\n                    { trigger: 'plot:mouseup', action: [\"\".concat(maskType, \"-mask:end\")] },\n                    { trigger: 'mask:dragend', action: [\"\".concat(maskType, \"-mask:moveEnd\")] },\n                    {\n                        trigger: 'document:mouseup',\n                        isEnable: function (context) {\n                            return !context.isInPlot();\n                        },\n                        action: ['element-range-highlight:clear', \"\".concat(maskType, \"-mask:end\"), \"\".concat(maskType, \"-mask:hide\")],\n                    },\n                ],\n                rollback: [{ trigger: 'dblclick', action: ['element-range-highlight:clear', \"\".concat(maskType, \"-mask:hide\")] }],\n            };\n        default:\n            return {};\n    }\n}\n// 直接拷贝过来的\nregisterInteraction('brush', getInteractionCfg('brush'));\n// 复写 element-range-highlight interaction\nregisterInteraction('brush-highlight', getInteractionCfg('brush-highlight'));\n// 复写\nregisterInteraction('brush-x', getInteractionCfg('brush-x', 'x-rect'));\n// 复写\nregisterInteraction('brush-y', getInteractionCfg('brush-y', 'y-rect'));\n// 新增, x 框选高亮\nregisterInteraction('brush-x-highlight', getInteractionCfg('brush-x-highlight', 'x-rect'));\n// 新增, y 框选高亮\nregisterInteraction('brush-y-highlight', getInteractionCfg('brush-y-highlight', 'y-rect'));\n//# sourceMappingURL=brush.js.map","import { filter } from '@antv/util';\n/** 先引入brush 交互 */\nimport '../interactions/brush';\nimport { getInteractionCfg } from '../interactions/brush';\nimport { deepAssign } from '../utils';\nvar BRUSH_TYPES = ['brush', 'brush-x', 'brush-y', 'brush-highlight', 'brush-x-highlight', 'brush-y-highlight'];\n/**\n * brush 交互\n */\nexport function brushInteraction(params) {\n    var options = params.options;\n    var brush = options.brush;\n    // 先过滤掉 brush 等交互\n    var interactions = filter(options.interactions || [], function (i) { return BRUSH_TYPES.indexOf(i.type) === -1; });\n    // 设置 brush 交互\n    if (brush === null || brush === void 0 ? void 0 : brush.enabled) {\n        BRUSH_TYPES.forEach(function (type) {\n            var enable = false;\n            switch (brush.type) {\n                case 'x-rect':\n                    enable = type === (brush.action === 'highlight' ? 'brush-x-highlight' : 'brush-x');\n                    break;\n                case 'y-rect':\n                    enable = type === (brush.action === 'highlight' ? 'brush-y-highlight' : 'brush-y');\n                    break;\n                default:\n                    enable = type === (brush.action === 'highlight' ? 'brush-highlight' : 'brush');\n                    break;\n            }\n            var obj = { type: type, enable: enable };\n            if (brush) {\n                obj.cfg = getInteractionCfg(type, brush.type, brush);\n            }\n            interactions.push(obj);\n        });\n        // 塞入 button 配置 (G2Plot 的封装)\n        if ((brush === null || brush === void 0 ? void 0 : brush.action) !== 'highlight') {\n            interactions.push({\n                type: 'filter-action',\n                cfg: {\n                    buttonConfig: brush.button,\n                },\n            });\n        }\n    }\n    return deepAssign({}, params, { options: { interactions: interactions } });\n}\n//# sourceMappingURL=brush.js.map","import { registerInteraction } from '@antv/g2';\nvar INTERACTION_MAP = {\n    hover: '__interval-connected-area-hover__',\n    click: '__interval-connected-area-click__',\n};\nvar getStartStages = function (trigger, style) {\n    if (trigger === 'hover') {\n        return [\n            {\n                trigger: \"interval:mouseenter\",\n                action: ['element-highlight-by-color:highlight', 'element-link-by-color:link'],\n                arg: [null, { style: style }],\n            },\n        ];\n    }\n    return [\n        {\n            trigger: \"interval:click\",\n            action: [\n                'element-highlight-by-color:clear',\n                'element-highlight-by-color:highlight',\n                'element-link-by-color:clear',\n                'element-link-by-color:unlink',\n                'element-link-by-color:link',\n            ],\n            arg: [null, null, null, null, { style: style }],\n        },\n    ];\n};\n/** hover 触发的连通区域交互 */\nregisterInteraction(INTERACTION_MAP.hover, {\n    start: getStartStages(INTERACTION_MAP.hover),\n    end: [\n        {\n            trigger: 'interval:mouseleave',\n            action: ['element-highlight-by-color:reset', 'element-link-by-color:unlink'],\n        },\n    ],\n});\n/** click 触发的联通区域交互 */\nregisterInteraction(INTERACTION_MAP.click, {\n    start: getStartStages(INTERACTION_MAP.click),\n    end: [\n        {\n            trigger: 'document:mousedown',\n            action: ['element-highlight-by-color:clear', 'element-link-by-color:clear'],\n        },\n    ],\n});\n/**\n * 返回支持联通区域组件交互的 adaptor，适用于堆叠柱形图/堆叠条形图\n * @param disable\n */\nexport function connectedArea(disable) {\n    if (disable === void 0) { disable = false; }\n    return function (params) {\n        var chart = params.chart, options = params.options;\n        var connectedArea = options.connectedArea;\n        var clear = function () {\n            chart.removeInteraction(INTERACTION_MAP.hover);\n            chart.removeInteraction(INTERACTION_MAP.click);\n        };\n        if (!disable && connectedArea) {\n            var trigger = connectedArea.trigger || 'hover';\n            clear();\n            chart.interaction(INTERACTION_MAP[trigger], {\n                start: getStartStages(trigger, connectedArea.style),\n            });\n        }\n        else {\n            clear();\n        }\n        return params;\n    };\n}\n//# sourceMappingURL=connected-area.js.map","import { isNumber } from '@antv/util';\n/**\n * 转化率的计算方式\n * @param prev\n * @param next\n */\nexport function conversionTagFormatter(prev, next) {\n    if (!isNumber(prev) || !isNumber(next)) {\n        return '-';\n    }\n    // 0 / 0 没有意义\n    if (prev === 0 && next === 0) {\n        return '-';\n    }\n    if (prev === next) {\n        return '100%';\n    }\n    if (prev === 0) {\n        return '∞';\n    }\n    return \"\".concat(((100 * next) / prev).toFixed(2), \"%\");\n}\n//# sourceMappingURL=conversion.js.map","import { __assign } from \"tslib\";\nimport { getTheme } from '@antv/g2';\nimport { each, find, isObject, map } from '@antv/util';\nimport { deepAssign } from '../utils';\nimport { conversionTagFormatter } from '../utils/conversion';\nfunction getConversionTagOptionsWithDefaults(options, horizontal) {\n    return deepAssign({\n        size: horizontal ? 32 : 80,\n        spacing: horizontal ? 8 : 12,\n        offset: horizontal ? 32 : 0,\n        arrow: options.arrow !== false && {\n            headSize: 12,\n            style: {\n                fill: 'rgba(0, 0, 0, 0.05)',\n            },\n        },\n        text: options.text !== false && {\n            style: {\n                fontSize: 12,\n                fill: 'rgba(0, 0, 0, 0.85)',\n                textAlign: 'center',\n                textBaseline: 'middle',\n            },\n            formatter: conversionTagFormatter,\n        },\n    }, options);\n}\nfunction parsePoints(coordinate, element) {\n    // @ts-ignore\n    return map(element.getModel().points, function (point) { return coordinate.convertPoint(point); });\n}\nfunction renderArrowTag(config, elemPrev, elemNext) {\n    var view = config.view, geometry = config.geometry, group = config.group, options = config.options, horizontal = config.horizontal;\n    var offset = options.offset, size = options.size, arrow = options.arrow;\n    var coordinate = view.getCoordinate();\n    var pointPrev = parsePoints(coordinate, elemPrev)[3];\n    var pointNext = parsePoints(coordinate, elemNext)[0];\n    var totalHeight = pointNext.y - pointPrev.y;\n    var totalWidth = pointNext.x - pointPrev.x;\n    if (typeof arrow === 'boolean') {\n        return;\n    }\n    var headSize = arrow.headSize;\n    var spacing = options.spacing;\n    var points;\n    if (horizontal) {\n        if ((totalWidth - headSize) / 2 < spacing) {\n            // 当柱间距不足容纳箭头尖与间隔时，画三角并挤占间隔\n            spacing = Math.max(1, (totalWidth - headSize) / 2);\n            points = [\n                [pointPrev.x + spacing, pointPrev.y - offset],\n                [pointPrev.x + spacing, pointPrev.y - offset - size],\n                [pointNext.x - spacing, pointNext.y - offset - size / 2],\n            ];\n        }\n        else {\n            // 当柱间距足够时，画完整图形并留出间隔。\n            points = [\n                [pointPrev.x + spacing, pointPrev.y - offset],\n                [pointPrev.x + spacing, pointPrev.y - offset - size],\n                [pointNext.x - spacing - headSize, pointNext.y - offset - size],\n                [pointNext.x - spacing, pointNext.y - offset - size / 2],\n                [pointNext.x - spacing - headSize, pointNext.y - offset],\n            ];\n        }\n    }\n    else {\n        if ((totalHeight - headSize) / 2 < spacing) {\n            // 当柱间距不足容纳箭头尖与间隔时，画三角并挤占间隔\n            spacing = Math.max(1, (totalHeight - headSize) / 2);\n            points = [\n                [pointPrev.x + offset, pointPrev.y + spacing],\n                [pointPrev.x + offset + size, pointPrev.y + spacing],\n                [pointNext.x + offset + size / 2, pointNext.y - spacing],\n            ];\n        }\n        else {\n            // 当柱间距足够时，画完整图形并留出间隔。\n            points = [\n                [pointPrev.x + offset, pointPrev.y + spacing],\n                [pointPrev.x + offset + size, pointPrev.y + spacing],\n                [pointNext.x + offset + size, pointNext.y - spacing - headSize],\n                [pointNext.x + offset + size / 2, pointNext.y - spacing],\n                [pointNext.x + offset, pointNext.y - spacing - headSize],\n            ];\n        }\n    }\n    group.addShape('polygon', {\n        id: \"\".concat(view.id, \"-conversion-tag-arrow-\").concat(geometry.getElementId(elemPrev.getModel().mappingData)),\n        name: 'conversion-tag-arrow',\n        origin: {\n            element: elemPrev,\n            nextElement: elemNext,\n        },\n        attrs: __assign(__assign({}, (arrow.style || {})), { points: points }),\n    });\n}\nfunction renderTextTag(config, elemPrev, elemNext) {\n    var _a, _b, _c;\n    var view = config.view, geometry = config.geometry, group = config.group, options = config.options, field = config.field, horizontal = config.horizontal;\n    var offset = options.offset, size = options.size;\n    if (typeof options.text === 'boolean') {\n        return;\n    }\n    var coordinate = view.getCoordinate();\n    var text = ((_a = options.text) === null || _a === void 0 ? void 0 : _a.formatter) && ((_b = options.text) === null || _b === void 0 ? void 0 : _b.formatter(elemPrev.getData()[field], elemNext.getData()[field]));\n    var pointPrev = parsePoints(coordinate, elemPrev)[horizontal ? 3 : 0];\n    var pointNext = parsePoints(coordinate, elemNext)[horizontal ? 0 : 3];\n    var textShape = group.addShape('text', {\n        id: \"\".concat(view.id, \"-conversion-tag-text-\").concat(geometry.getElementId(elemPrev.getModel().mappingData)),\n        name: 'conversion-tag-text',\n        origin: {\n            element: elemPrev,\n            nextElement: elemNext,\n        },\n        attrs: __assign(__assign({}, (((_c = options.text) === null || _c === void 0 ? void 0 : _c.style) || {})), { text: text, x: horizontal ? (pointPrev.x + pointNext.x) / 2 : pointPrev.x + offset + size / 2, y: horizontal ? pointPrev.y - offset - size / 2 : (pointPrev.y + pointNext.y) / 2 }),\n    });\n    if (horizontal) {\n        var totalWidth = pointNext.x - pointPrev.x;\n        var textWidth = textShape.getBBox().width;\n        if (textWidth > totalWidth) {\n            var cWidth = textWidth / text.length;\n            var cEnd = Math.max(1, Math.ceil(totalWidth / cWidth) - 1);\n            var textAdjusted = \"\".concat(text.slice(0, cEnd), \"...\");\n            textShape.attr('text', textAdjusted);\n        }\n    }\n}\nfunction renderTag(options, elemPrev, elemNext) {\n    renderArrowTag(options, elemPrev, elemNext);\n    renderTextTag(options, elemPrev, elemNext);\n}\n/**\n * 返回支持转化率组件的 adaptor，适用于柱形图/条形图\n * @param field 用户转化率计算的字段\n * @param horizontal 是否水平方向的转化率\n * @param disabled 是否禁用\n */\nexport function conversionTag(field, horizontal, disabled) {\n    if (horizontal === void 0) { horizontal = true; }\n    if (disabled === void 0) { disabled = false; }\n    return function (params) {\n        var options = params.options, chart = params.chart;\n        var conversionTag = options.conversionTag, theme = options.theme;\n        if (conversionTag && !disabled) {\n            // 有转化率组件时，柱子宽度占比自动为 1/3\n            chart.theme(deepAssign({}, isObject(theme) ? theme : getTheme(theme), {\n                columnWidthRatio: 1 / 3,\n            }));\n            // 使用  shape annotation 绘制转化率组件\n            chart.annotation().shape({\n                render: function (container, view) {\n                    var group = container.addGroup({\n                        id: \"\".concat(chart.id, \"-conversion-tag-group\"),\n                        name: 'conversion-tag-group',\n                    });\n                    var interval = find(chart.geometries, function (geom) { return geom.type === 'interval'; });\n                    var config = {\n                        view: view,\n                        geometry: interval,\n                        group: group,\n                        field: field,\n                        horizontal: horizontal,\n                        options: getConversionTagOptionsWithDefaults(conversionTag, horizontal),\n                    };\n                    var elements = interval.elements;\n                    each(elements, function (elem, idx) {\n                        if (idx > 0) {\n                            renderTag(config, elements[idx - 1], elem);\n                        }\n                    });\n                },\n            });\n        }\n        return params;\n    };\n}\n//# sourceMappingURL=conversion-tag.js.map","import { __assign, __rest } from \"tslib\";\nimport { each, filter, isMatch } from '@antv/util';\nimport { brushInteraction } from '../../adaptor/brush';\nimport { animation, annotation, interaction, limitInPlot, scale, scrollbar, slider, state, theme, transformations, } from '../../adaptor/common';\nimport { connectedArea } from '../../adaptor/connected-area';\nimport { conversionTag } from '../../adaptor/conversion-tag';\nimport { interval } from '../../adaptor/geometries';\nimport { pattern } from '../../adaptor/pattern';\nimport { adjustYMetaByZero, deepAssign, findGeometry, flow, pick, transformLabel } from '../../utils';\nimport { getDataWhetherPercentage, getDeepPercent } from '../../utils/transform/percent';\n/**\n * defaultOptions\n * @param params\n */\nfunction defaultOptions(params) {\n    var options = params.options;\n    // 默认 legend 位置\n    var legend = options.legend;\n    var seriesField = options.seriesField, isStack = options.isStack;\n    if (seriesField) {\n        if (legend !== false) {\n            legend = __assign({ position: isStack ? 'right-top' : 'top-left' }, legend);\n        }\n    }\n    else {\n        legend = false;\n    }\n    // @ts-ignore 直接改值\n    params.options.legend = legend;\n    return params;\n}\n/**\n * 字段\n * @param params\n */\nfunction geometry(params) {\n    var chart = params.chart, options = params.options;\n    var data = options.data, columnStyle = options.columnStyle, color = options.color, columnWidthRatio = options.columnWidthRatio, isPercent = options.isPercent, isGroup = options.isGroup, isStack = options.isStack, xField = options.xField, yField = options.yField, seriesField = options.seriesField, groupField = options.groupField, tooltip = options.tooltip, shape = options.shape;\n    var percentData = isPercent && isGroup && isStack\n        ? getDeepPercent(data, yField, [xField, groupField], yField)\n        : getDataWhetherPercentage(data, yField, xField, yField, isPercent);\n    var chartData = [];\n    // 存在堆叠,并且存在堆叠seriesField分类，并且不存在分组的时候 进行堆叠\n    if (isStack && seriesField && !isGroup) {\n        percentData.forEach(function (item) {\n            var stackedItem = chartData.find(function (v) { return v[xField] === item[xField] && v[seriesField] === item[seriesField]; });\n            if (stackedItem) {\n                stackedItem[yField] += item[yField] || 0;\n            }\n            else {\n                chartData.push(__assign({}, item));\n            }\n        });\n    }\n    else {\n        chartData = percentData;\n    }\n    chart.data(chartData);\n    // 百分比堆积图，默认会给一个 % 格式化逻辑, 用户可自定义\n    var tooltipOptions = isPercent\n        ? __assign({ formatter: function (datum) {\n                var _a;\n                return ({\n                    name: isGroup && isStack ? \"\".concat(datum[seriesField], \" - \").concat(datum[groupField]) : (_a = datum[seriesField]) !== null && _a !== void 0 ? _a : datum[xField],\n                    value: (Number(datum[yField]) * 100).toFixed(2) + '%',\n                });\n            } }, tooltip) : tooltip;\n    var p = deepAssign({}, params, {\n        options: {\n            data: chartData,\n            widthRatio: columnWidthRatio,\n            tooltip: tooltipOptions,\n            interval: {\n                shape: shape,\n                style: columnStyle,\n                color: color,\n            },\n        },\n    });\n    interval(p);\n    return p;\n}\n/**\n * meta 配置\n * @param params\n */\nexport function meta(params) {\n    var _a, _b;\n    var options = params.options;\n    var xAxis = options.xAxis, yAxis = options.yAxis, xField = options.xField, yField = options.yField, data = options.data, isPercent = options.isPercent;\n    var percentYMeta = isPercent ? { max: 1, min: 0, minLimit: 0, maxLimit: 1 } : {};\n    return flow(scale((_a = {},\n        _a[xField] = xAxis,\n        _a[yField] = yAxis,\n        _a), (_b = {},\n        _b[xField] = {\n            type: 'cat',\n        },\n        _b[yField] = __assign(__assign({}, adjustYMetaByZero(data, yField)), percentYMeta),\n        _b)))(params);\n}\n/**\n * axis 配置\n * @param params\n */\nfunction axis(params) {\n    var chart = params.chart, options = params.options;\n    var xAxis = options.xAxis, yAxis = options.yAxis, xField = options.xField, yField = options.yField;\n    // 为 false 则是不显示轴\n    if (xAxis === false) {\n        chart.axis(xField, false);\n    }\n    else {\n        chart.axis(xField, xAxis);\n    }\n    if (yAxis === false) {\n        chart.axis(yField, false);\n    }\n    else {\n        chart.axis(yField, yAxis);\n    }\n    return params;\n}\n/**\n * legend 配置\n * @param params\n */\nexport function legend(params) {\n    var chart = params.chart, options = params.options;\n    var legend = options.legend, seriesField = options.seriesField;\n    if (legend && seriesField) {\n        chart.legend(seriesField, legend);\n    }\n    else if (legend === false) {\n        chart.legend(false);\n    }\n    return params;\n}\n/**\n * 数据标签\n * @param params\n */\nfunction label(params) {\n    var chart = params.chart, options = params.options;\n    var label = options.label, yField = options.yField, isRange = options.isRange;\n    var geometry = findGeometry(chart, 'interval');\n    if (!label) {\n        geometry.label(false);\n    }\n    else {\n        var callback = label.callback, cfg = __rest(label, [\"callback\"]);\n        geometry.label({\n            fields: [yField],\n            callback: callback,\n            cfg: __assign({ \n                // 配置默认的 label layout： 如果用户没有指定 layout 和 position， 则自动配置 layout\n                layout: (cfg === null || cfg === void 0 ? void 0 : cfg.position)\n                    ? undefined\n                    : [\n                        { type: 'interval-adjust-position' },\n                        { type: 'interval-hide-overlap' },\n                        { type: 'adjust-color' },\n                        { type: 'limit-in-plot', cfg: { action: 'hide' } },\n                    ] }, transformLabel(isRange\n                ? __assign({ content: function (item) {\n                        var _a;\n                        return (_a = item[yField]) === null || _a === void 0 ? void 0 : _a.join('-');\n                    } }, cfg) : cfg)),\n        });\n    }\n    return params;\n}\n/**\n * 柱形图 tooltip 配置 (对堆叠、分组做特殊处理)\n * @param params\n */\nfunction columnTooltip(params) {\n    var chart = params.chart, options = params.options;\n    var tooltip = options.tooltip, isGroup = options.isGroup, isStack = options.isStack, groupField = options.groupField, data = options.data, xField = options.xField, yField = options.yField, seriesField = options.seriesField;\n    if (tooltip === false) {\n        chart.tooltip(false);\n    }\n    else {\n        var tooltipOptions = tooltip;\n        // fix: https://github.com/antvis/G2Plot/issues/2572\n        if (isGroup && isStack) {\n            var customItems_1 = tooltipOptions.customItems;\n            var tooltipFormatter_1 = (tooltipOptions === null || tooltipOptions === void 0 ? void 0 : tooltipOptions.formatter) ||\n                (function (datum) { return ({ name: \"\".concat(datum[seriesField], \" - \").concat(datum[groupField]), value: datum[yField] }); });\n            tooltipOptions = __assign(__assign({}, tooltipOptions), { customItems: function (originalItems) {\n                    var items = [];\n                    each(originalItems, function (item) {\n                        // Find datas in same cluster\n                        var datas = filter(data, function (d) { return isMatch(d, pick(item.data, [xField, seriesField])); });\n                        datas.forEach(function (datum) {\n                            items.push(__assign(__assign(__assign({}, item), { value: datum[yField], data: datum, mappingData: { _origin: datum } }), tooltipFormatter_1(datum)));\n                        });\n                    });\n                    // fix https://github.com/antvis/G2Plot/issues/3367\n                    return customItems_1 ? customItems_1(items) : items;\n                } });\n        }\n        chart.tooltip(tooltipOptions);\n    }\n    return params;\n}\n/**\n * 柱形图适配器\n * @param params\n */\nexport function adaptor(params, isBar) {\n    if (isBar === void 0) { isBar = false; }\n    var options = params.options;\n    var seriesField = options.seriesField;\n    return flow(defaultOptions, // 处理默认配置\n    theme, // theme 需要在 geometry 之前\n    pattern('columnStyle'), state, transformations('rect'), geometry, meta, axis, legend, columnTooltip, slider, scrollbar, label, brushInteraction, interaction, animation, annotation(), conversionTag(options.yField, !isBar, !!seriesField), // 有拆分的时候禁用转化率\n    connectedArea(!options.isStack), limitInPlot)(params);\n}\n//# sourceMappingURL=adaptor.js.map","import { __assign } from \"tslib\";\nimport { tooltip } from '../../adaptor/common';\nimport { deepAssign, flow } from '../../utils';\nimport { adaptor as columnAdaptor } from '../column/adaptor';\nexport { meta } from '../column/adaptor';\n/**\n * 处理默认配置项\n * 1. switch xField、 yField\n * 2. switch xAxis、 yAxis and adjust axis.position configuration\n */\nfunction defaultOptions(params) {\n    var options = params.options;\n    var xField = options.xField, yField = options.yField, xAxis = options.xAxis, yAxis = options.yAxis;\n    var position = {\n        left: 'bottom',\n        right: 'top',\n        top: 'left',\n        bottom: 'right',\n    };\n    var verticalAxis = yAxis !== false\n        ? __assign({ position: position[(yAxis === null || yAxis === void 0 ? void 0 : yAxis.position) || 'left'] }, yAxis) : false;\n    var horizontalAxis = xAxis !== false\n        ? __assign({ position: position[(xAxis === null || xAxis === void 0 ? void 0 : xAxis.position) || 'bottom'] }, xAxis) : false;\n    return __assign(__assign({}, params), { options: __assign(__assign({}, options), { xField: yField, yField: xField, \n            // 条形图 xAxis，yAxis 不可以做 deepAssign\n            xAxis: verticalAxis, yAxis: horizontalAxis }) });\n}\n/**\n * label 适配器\n * @param params\n */\nfunction label(params) {\n    var options = params.options;\n    var label = options.label;\n    // label of bar charts default position is left, if plot has label\n    if (label && !label.position) {\n        label.position = 'left';\n        // 配置默认的 label layout： 如果用户没有指定 layout 和 position， 则自动配置 layout\n        if (!label.layout) {\n            label.layout = [\n                { type: 'interval-adjust-position' },\n                { type: 'interval-hide-overlap' },\n                { type: 'adjust-color' },\n                { type: 'limit-in-plot', cfg: { action: 'hide' } },\n            ];\n        }\n    }\n    return deepAssign({}, params, { options: { label: label } });\n}\n/**\n * legend 适配器\n * @param params\n */\nfunction legend(params) {\n    var options = params.options;\n    // 默认 legend 位置\n    var seriesField = options.seriesField, isStack = options.isStack;\n    var legend = options.legend;\n    if (seriesField) {\n        if (legend !== false) {\n            legend = __assign({ position: isStack ? 'top-left' : 'right-top' }, (legend || {}));\n        }\n    }\n    else {\n        legend = false;\n    }\n    return deepAssign({}, params, { options: { legend: legend } });\n}\n/**\n * coordinate 适配器\n * @param params\n */\nfunction coordinate(params) {\n    // transpose column to bar 对角变换 & y 方向镜像变换\n    var options = params.options;\n    var coordinateOptions = [{ type: 'transpose' }, { type: 'reflectY' }].concat(options.coordinate || []);\n    return deepAssign({}, params, { options: { coordinate: coordinateOptions } });\n}\n/**\n * 柱形图适配器\n * @param params\n */\nexport function geometry(params) {\n    var chart = params.chart, options = params.options;\n    var barStyle = options.barStyle, barWidthRatio = options.barWidthRatio, minBarWidth = options.minBarWidth, maxBarWidth = options.maxBarWidth, barBackground = options.barBackground;\n    return columnAdaptor({\n        chart: chart,\n        options: __assign(__assign({}, options), { \n            // rename attrs as column\n            columnStyle: barStyle, columnWidthRatio: barWidthRatio, minColumnWidth: minBarWidth, maxColumnWidth: maxBarWidth, columnBackground: barBackground }),\n    }, true);\n}\n/**\n * @param chart\n * @param options\n */\nexport function adaptor(params) {\n    // flow 的方式处理所有的配置到 G2 API\n    return flow(defaultOptions, label, legend, tooltip, coordinate, geometry)(params);\n}\n//# sourceMappingURL=adaptor.js.map","import { Plot } from '../../core/plot';\nimport { deepAssign } from '../../utils';\n/**\n * 条形图默认配置项\n */\nexport var DEFAULT_OPTIONS = deepAssign({}, Plot.getDefaultOptions(), {\n    barWidthRatio: 0.6,\n    marginRatio: 1 / 32,\n    tooltip: {\n        shared: true,\n        showMarkers: false,\n        offset: 20,\n    },\n    legend: {\n        radio: {},\n    },\n    interactions: [{ type: 'active-region' }],\n});\n//# sourceMappingURL=constants.js.map","var _a;\n// 漏斗占比: data[n][yField] / data[0][yField]\nexport var FUNNEL_PERCENT = '$$percentage$$';\n// 漏斗映射值\nexport var FUNNEL_MAPPING_VALUE = '$$mappingValue$$';\n// 漏斗转化率: data[n][yField] / data[n-1][yField];\nexport var FUNNEL_CONVERSATION = '$$conversion$$';\n// 漏斗单项占总体和的百分比，用于动态漏斗图计算高度：\n// data[n][yField] / sum(data[0-n][yField])\nexport var FUNNEL_TOTAL_PERCENT = '$$totalPercentage$$';\n// 漏斗多边型 x 坐标\nexport var PLOYGON_X = '$$x$$';\nexport var PLOYGON_Y = '$$y$$';\n/**\n * 漏斗图 默认配置项\n */\nexport var DEFAULT_OPTIONS = {\n    appendPadding: [0, 80],\n    minSize: 0,\n    maxSize: 1,\n    meta: (_a = {},\n        _a[FUNNEL_MAPPING_VALUE] = {\n            min: 0,\n            max: 1,\n            nice: false,\n        },\n        _a),\n    label: {\n        style: {\n            fill: '#fff',\n            fontSize: 12,\n        },\n    },\n    tooltip: {\n        showTitle: false,\n        showMarkers: false,\n        shared: false,\n    },\n    conversionTag: {\n        offsetX: 10,\n        offsetY: 0,\n        style: {\n            fontSize: 12,\n            fill: 'rgba(0,0,0,0.45)',\n        },\n    },\n};\n//# sourceMappingURL=constant.js.map","import { __assign, __extends } from \"tslib\";\nimport { Plot } from '../../core/plot';\nimport { getDataWhetherPercentage } from '../../utils/transform/percent';\nimport { adaptor, meta } from './adaptor';\nimport { DEFAULT_OPTIONS } from './constants';\n/**\n * 条形图\n */\nvar Bar = /** @class */ (function (_super) {\n    __extends(Bar, _super);\n    function Bar() {\n        var _this = _super !== null && _super.apply(this, arguments) || this;\n        /** 图表类型 */\n        _this.type = 'bar';\n        return _this;\n    }\n    /**\n     * 获取 条形图 默认配置项\n     * 供外部使用\n     */\n    Bar.getDefaultOptions = function () {\n        return DEFAULT_OPTIONS;\n    };\n    /**\n     * @override\n     */\n    Bar.prototype.changeData = function (data) {\n        var _a, _b;\n        this.updateOption({ data: data });\n        var _c = this, chart = _c.chart, options = _c.options;\n        var isPercent = options.isPercent;\n        var xField = options.xField, yField = options.yField, xAxis = options.xAxis, yAxis = options.yAxis;\n        _a = [yField, xField], xField = _a[0], yField = _a[1];\n        _b = [yAxis, xAxis], xAxis = _b[0], yAxis = _b[1];\n        var switchedFieldOptions = __assign(__assign({}, options), { xField: xField, yField: yField, yAxis: yAxis, xAxis: xAxis });\n        meta({ chart: chart, options: switchedFieldOptions });\n        chart.changeData(getDataWhetherPercentage(data, xField, yField, xField, isPercent));\n    };\n    /**\n     * 获取 条形图 默认配置\n     */\n    Bar.prototype.getDefaultOptions = function () {\n        return Bar.getDefaultOptions();\n    };\n    /**\n     * 获取 条形图 的适配器\n     */\n    Bar.prototype.getSchemaAdaptor = function () {\n        return adaptor;\n    };\n    return Bar;\n}(Plot));\nexport { Bar };\n//# sourceMappingURL=index.js.map","import { Plot } from '../../core/plot';\nimport { deepAssign } from '../../utils';\n/**\n * 柱形图默认配置项\n */\nexport var DEFAULT_OPTIONS = deepAssign({}, Plot.getDefaultOptions(), {\n    columnWidthRatio: 0.6,\n    marginRatio: 1 / 32,\n    tooltip: {\n        shared: true,\n        showMarkers: false,\n        offset: 20,\n    },\n    legend: {\n        radio: {},\n    },\n    interactions: [{ type: 'active-region' }],\n});\n//# sourceMappingURL=constants.js.map","import { __extends } from \"tslib\";\nimport { Plot } from '../../core/plot';\nimport { getDataWhetherPercentage } from '../../utils/transform/percent';\nimport { adaptor, meta } from './adaptor';\nimport { DEFAULT_OPTIONS } from './constants';\n/**\n * 柱形图\n */\nvar Column = /** @class */ (function (_super) {\n    __extends(Column, _super);\n    function Column() {\n        var _this = _super !== null && _super.apply(this, arguments) || this;\n        /** 图表类型 */\n        _this.type = 'column';\n        return _this;\n    }\n    /**\n     * 获取 柱形图 默认配置项\n     * 供外部使用\n     */\n    Column.getDefaultOptions = function () {\n        return DEFAULT_OPTIONS;\n    };\n    /**\n     * @override\n     */\n    Column.prototype.changeData = function (data) {\n        this.updateOption({ data: data });\n        var _a = this.options, yField = _a.yField, xField = _a.xField, isPercent = _a.isPercent;\n        var _b = this, chart = _b.chart, options = _b.options;\n        meta({ chart: chart, options: options });\n        this.chart.changeData(getDataWhetherPercentage(data, yField, xField, yField, isPercent));\n    };\n    /**\n     * 获取 柱形图 默认配置\n     */\n    Column.prototype.getDefaultOptions = function () {\n        return Column.getDefaultOptions();\n    };\n    /**\n     * 获取 柱形图 的适配器\n     */\n    Column.prototype.getSchemaAdaptor = function () {\n        return adaptor;\n    };\n    return Column;\n}(Plot));\nexport { Column };\n//# sourceMappingURL=index.js.map","import { __assign } from \"tslib\";\nimport { get, isFunction, isNumber, map, maxBy } from '@antv/util';\nimport { FUNNEL_CONVERSATION, FUNNEL_MAPPING_VALUE, FUNNEL_PERCENT } from '../constant';\nexport var CONVERSION_TAG_NAME = 'CONVERSION_TAG_NAME';\n/**\n * 漏斗图 transform\n * @param geometry\n */\nexport function transformData(data, originData, options) {\n    var formatData = [];\n    var yField = options.yField, maxSize = options.maxSize, minSize = options.minSize;\n    var maxYFieldValue = get(maxBy(originData, yField), [yField]);\n    var max = isNumber(maxSize) ? maxSize : 1;\n    var min = isNumber(minSize) ? minSize : 0;\n    // format 数据\n    formatData = map(data, function (row, index) {\n        var percent = (row[yField] || 0) / maxYFieldValue;\n        row[FUNNEL_PERCENT] = percent;\n        row[FUNNEL_MAPPING_VALUE] = (max - min) * percent + min;\n        // 转化率数据存储前后数据\n        row[FUNNEL_CONVERSATION] = [get(data, [index - 1, yField]), row[yField]];\n        return row;\n    });\n    return formatData;\n}\n/**\n * 漏斗图通用转化率组件\n * @param getLineCoordinate 用于获取特定的 line 的位置及配置\n */\nexport function conversionTagComponent(getLineCoordinate) {\n    return function (params) {\n        var chart = params.chart, options = params.options;\n        // @ts-ignore\n        var conversionTag = options.conversionTag, filteredData = options.filteredData;\n        var data = filteredData || chart.getOptions().data;\n        if (conversionTag) {\n            var formatter_1 = conversionTag.formatter;\n            data.forEach(function (obj, index) {\n                if (index <= 0 || Number.isNaN(obj[FUNNEL_MAPPING_VALUE]))\n                    return;\n                var lineOption = getLineCoordinate(obj, index, data, {\n                    top: true,\n                    name: CONVERSION_TAG_NAME,\n                    text: {\n                        content: isFunction(formatter_1) ? formatter_1(obj, data) : formatter_1,\n                        offsetX: conversionTag.offsetX,\n                        offsetY: conversionTag.offsetY,\n                        position: 'end',\n                        autoRotate: false,\n                        style: __assign({ textAlign: 'start', textBaseline: 'middle' }, conversionTag.style),\n                    },\n                });\n                chart.annotation().line(lineOption);\n            });\n        }\n        return params;\n    };\n}\n//# sourceMappingURL=common.js.map","import { __assign } from \"tslib\";\nimport { get, isArray, map } from '@antv/util';\nimport { geometry as baseGeometry } from '../../../adaptor/geometries/base';\nimport { findGeometry, flow } from '../../../utils';\nimport { getTooltipMapping } from '../../../utils/tooltip';\nimport { FUNNEL_CONVERSATION, FUNNEL_MAPPING_VALUE, FUNNEL_PERCENT } from '../constant';\nimport { conversionTagComponent, transformData } from './common';\n/**\n * 处理字段数据\n * @param params\n */\nfunction field(params) {\n    var chart = params.chart, options = params.options;\n    var _a = options.data, data = _a === void 0 ? [] : _a, yField = options.yField, maxSize = options.maxSize, minSize = options.minSize;\n    var formatData = transformData(data, data, {\n        yField: yField,\n        maxSize: maxSize,\n        minSize: minSize,\n    });\n    // 绘制漏斗图\n    chart.data(formatData);\n    return params;\n}\n/**\n * geometry处理\n * @param params\n */\nfunction geometry(params) {\n    var chart = params.chart, options = params.options;\n    var xField = options.xField, yField = options.yField, color = options.color, tooltip = options.tooltip, label = options.label, _a = options.shape, shape = _a === void 0 ? 'funnel' : _a, funnelStyle = options.funnelStyle, state = options.state;\n    var _b = getTooltipMapping(tooltip, [xField, yField]), fields = _b.fields, formatter = _b.formatter;\n    baseGeometry({\n        chart: chart,\n        options: {\n            type: 'interval',\n            xField: xField,\n            yField: FUNNEL_MAPPING_VALUE,\n            colorField: xField,\n            tooltipFields: isArray(fields) && fields.concat([FUNNEL_PERCENT, FUNNEL_CONVERSATION]),\n            mapping: {\n                shape: shape,\n                tooltip: formatter,\n                color: color,\n                style: funnelStyle,\n            },\n            label: label,\n            state: state,\n        },\n    });\n    var geo = findGeometry(params.chart, 'interval');\n    geo.adjust('symmetric');\n    return params;\n}\n/**\n * 转置处理\n * @param params\n */\nfunction transpose(params) {\n    var chart = params.chart, options = params.options;\n    var isTransposed = options.isTransposed;\n    chart.coordinate({\n        type: 'rect',\n        actions: !isTransposed ? [['transpose'], ['scale', 1, -1]] : [],\n    });\n    return params;\n}\n/**\n * 转化率组件\n * @param params\n */\nexport function conversionTag(params) {\n    var options = params.options, chart = params.chart;\n    var maxSize = options.maxSize;\n    // 获取形状位置，再转化为需要的转化率位置\n    var dataArray = get(chart, ['geometries', '0', 'dataArray'], []);\n    var size = get(chart, ['options', 'data', 'length']);\n    var x = map(dataArray, function (item) { return get(item, ['0', 'nextPoints', '0', 'x']) * size - 0.5; });\n    var getLineCoordinate = function (datum, datumIndex, data, initLineOption) {\n        var percent = maxSize - (maxSize - datum[FUNNEL_MAPPING_VALUE]) / 2;\n        return __assign(__assign({}, initLineOption), { start: [x[datumIndex - 1] || datumIndex - 0.5, percent], end: [x[datumIndex - 1] || datumIndex - 0.5, percent + 0.05] });\n    };\n    conversionTagComponent(getLineCoordinate)(params);\n    return params;\n}\n/**\n * 基础漏斗\n * @param chart\n * @param options\n */\nexport function basicFunnel(params) {\n    return flow(field, geometry, transpose, conversionTag)(params);\n}\n//# sourceMappingURL=basic.js.map","import { get, isArray, isNumber, map } from '@antv/util';\nimport { geometry as baseGeometry } from '../../../adaptor/geometries/base';\nimport { deepAssign, flow } from '../../../utils';\nimport { getTooltipMapping } from '../../../utils/tooltip';\nimport { FUNNEL_CONVERSATION, FUNNEL_MAPPING_VALUE, FUNNEL_PERCENT } from '../constant';\nimport { conversionTagComponent, transformData } from './common';\n/**\n * 处理字段数据\n * @param params\n */\nfunction field(params) {\n    var _a;\n    var chart = params.chart, options = params.options;\n    var _b = options.data, data = _b === void 0 ? [] : _b, yField = options.yField;\n    // 绘制漏斗图\n    chart.data(data);\n    chart.scale((_a = {},\n        _a[yField] = {\n            sync: true,\n        },\n        _a));\n    return params;\n}\n/**\n * geometry处理\n * @param params\n */\nfunction geometry(params) {\n    var chart = params.chart, options = params.options;\n    var data = options.data, xField = options.xField, yField = options.yField, color = options.color, compareField = options.compareField, isTransposed = options.isTransposed, tooltip = options.tooltip, maxSize = options.maxSize, minSize = options.minSize, label = options.label, funnelStyle = options.funnelStyle, state = options.state, showFacetTitle = options.showFacetTitle;\n    chart.facet('mirror', {\n        fields: [compareField],\n        // 漏斗图的转置规则与分面相反，默认是垂直布局\n        transpose: !isTransposed,\n        padding: isTransposed ? 0 : [32, 0, 0, 0],\n        showTitle: showFacetTitle,\n        eachView: function (view, facet) {\n            var index = isTransposed ? facet.rowIndex : facet.columnIndex;\n            if (!isTransposed) {\n                view.coordinate({\n                    type: 'rect',\n                    actions: [['transpose'], ['scale', index === 0 ? -1 : 1, -1]],\n                });\n            }\n            var formatterData = transformData(facet.data, data, {\n                yField: yField,\n                maxSize: maxSize,\n                minSize: minSize,\n            });\n            view.data(formatterData);\n            // 绘制图形\n            var _a = getTooltipMapping(tooltip, [xField, yField, compareField]), fields = _a.fields, formatter = _a.formatter;\n            var defaultFacetLabel = isTransposed\n                ? {\n                    offset: index === 0 ? 10 : -23,\n                    position: (index === 0 ? 'bottom' : 'top'),\n                }\n                : {\n                    offset: 10,\n                    position: 'left',\n                    style: {\n                        textAlign: index === 0 ? 'end' : 'start',\n                    },\n                };\n            baseGeometry({\n                chart: view,\n                options: {\n                    type: 'interval',\n                    xField: xField,\n                    yField: FUNNEL_MAPPING_VALUE,\n                    colorField: xField,\n                    tooltipFields: isArray(fields) && fields.concat([FUNNEL_PERCENT, FUNNEL_CONVERSATION]),\n                    mapping: {\n                        // todo 暂时不提供 金字塔 shape，后续需要自定义下形状\n                        shape: 'funnel',\n                        tooltip: formatter,\n                        color: color,\n                        style: funnelStyle,\n                    },\n                    label: label === false ? false : deepAssign({}, defaultFacetLabel, label),\n                    state: state,\n                },\n            });\n        },\n    });\n    return params;\n}\nexport function compareConversionTag(params) {\n    // @ts-ignore\n    var chart = params.chart, index = params.index, options = params.options;\n    var conversionTag = options.conversionTag, isTransposed = options.isTransposed;\n    (isNumber(index) ? [chart] : chart.views).forEach(function (view, viewIndex) {\n        // 获取形状位置，再转化为需要的转化率位置\n        var dataArray = get(view, ['geometries', '0', 'dataArray'], []);\n        var size = get(view, ['options', 'data', 'length']);\n        var x = map(dataArray, function (item) { return get(item, ['0', 'nextPoints', '0', 'x']) * size - 0.5; });\n        var getLineCoordinate = function (datum, datumIndex, data, initLineOption) {\n            var ratio = (index || viewIndex) === 0 ? -1 : 1;\n            return deepAssign({}, initLineOption, {\n                start: [x[datumIndex - 1] || datumIndex - 0.5, datum[FUNNEL_MAPPING_VALUE]],\n                end: [x[datumIndex - 1] || datumIndex - 0.5, datum[FUNNEL_MAPPING_VALUE] + 0.05],\n                text: isTransposed\n                    ? {\n                        style: {\n                            textAlign: 'start',\n                        },\n                    }\n                    : {\n                        offsetX: conversionTag !== false ? ratio * conversionTag.offsetX : 0,\n                        style: {\n                            textAlign: (index || viewIndex) === 0 ? 'end' : 'start',\n                        },\n                    },\n            });\n        };\n        conversionTagComponent(getLineCoordinate)(deepAssign({}, {\n            chart: view,\n            options: options,\n        }));\n    });\n}\n/**\n * 转化率组件\n * @param params\n */\nfunction conversionTag(params) {\n    var chart = params.chart;\n    // @ts-ignore\n    chart.once('beforepaint', function () { return compareConversionTag(params); });\n    return params;\n}\n/**\n * 对比漏斗\n * @param chart\n * @param options\n */\nexport function compareFunnel(params) {\n    return flow(field, geometry, conversionTag)(params);\n}\n//# sourceMappingURL=compare.js.map","import { __assign } from \"tslib\";\nimport { get, isArray, map, maxBy, reduce } from '@antv/util';\nimport { geometry as baseGeometry } from '../../../adaptor/geometries/base';\nimport { flow } from '../../../utils';\nimport { getTooltipMapping } from '../../../utils/tooltip';\nimport { FUNNEL_CONVERSATION, FUNNEL_PERCENT, FUNNEL_TOTAL_PERCENT, PLOYGON_X, PLOYGON_Y } from '../constant';\nimport { conversionTagComponent } from './common';\n/**\n * 动态高度漏斗图\n * @param params\n * 需求: 每个漏斗项的高度根据 yfield 等比生成。漏斗上下宽度比为2，即斜率为 2。\n * 实现方式: 使用 g2 多边形，data -> 点坐标 -> 绘制\n * 以漏斗底部中心点为坐标轴原点，漏斗在 -0.5 <= x <= 0.5, 0 <= y <= 1 的正方形中绘制\n * 先计算第一象限的点, 第二象限的点即为镜像 x 轴取反。\n * 第一象限共需计算 data.length + 1 个点，在 y = 4x - 1 上。首尾分别是[0.5, 1], [0.25, 0]。根据 data 计算出 y 值，从而得到 y 值\n */\n/**\n * 处理数据\n * @param params\n */\nfunction field(params) {\n    var chart = params.chart, options = params.options;\n    var _a = options.data, data = _a === void 0 ? [] : _a, yField = options.yField;\n    // 计算各数据项所占高度\n    var sum = reduce(data, function (total, item) {\n        return total + (item[yField] || 0);\n    }, 0);\n    var max = maxBy(data, yField)[yField];\n    var formatData = map(data, function (row, index) {\n        // 储存四个点 x，y 坐标，方向为顺时针，即 [左上, 右上，右下，左下]\n        var x = [];\n        var y = [];\n        row[FUNNEL_TOTAL_PERCENT] = (row[yField] || 0) / sum;\n        // 获取左上角，右上角坐标\n        if (index) {\n            var preItemX = data[index - 1][PLOYGON_X];\n            var preItemY = data[index - 1][PLOYGON_Y];\n            x[0] = preItemX[3];\n            y[0] = preItemY[3];\n            x[1] = preItemX[2];\n            y[1] = preItemY[2];\n        }\n        else {\n            x[0] = -0.5;\n            y[0] = 1;\n            x[1] = 0.5;\n            y[1] = 1;\n        }\n        // 获取右下角坐标\n        y[2] = y[1] - row[FUNNEL_TOTAL_PERCENT];\n        x[2] = (y[2] + 1) / 4;\n        y[3] = y[2];\n        x[3] = -x[2];\n        // 赋值\n        row[PLOYGON_X] = x;\n        row[PLOYGON_Y] = y;\n        row[FUNNEL_PERCENT] = (row[yField] || 0) / max;\n        row[FUNNEL_CONVERSATION] = [get(data, [index - 1, yField]), row[yField]];\n        return row;\n    });\n    chart.data(formatData);\n    return params;\n}\n/**\n * geometry处理\n * @param params\n */\nfunction geometry(params) {\n    var chart = params.chart, options = params.options;\n    var xField = options.xField, yField = options.yField, color = options.color, tooltip = options.tooltip, label = options.label, funnelStyle = options.funnelStyle, state = options.state;\n    var _a = getTooltipMapping(tooltip, [xField, yField]), fields = _a.fields, formatter = _a.formatter;\n    // 绘制漏斗图\n    baseGeometry({\n        chart: chart,\n        options: {\n            type: 'polygon',\n            xField: PLOYGON_X,\n            yField: PLOYGON_Y,\n            colorField: xField,\n            tooltipFields: isArray(fields) && fields.concat([FUNNEL_PERCENT, FUNNEL_CONVERSATION]),\n            label: label,\n            state: state,\n            mapping: {\n                tooltip: formatter,\n                color: color,\n                style: funnelStyle,\n            },\n        },\n    });\n    return params;\n}\n/**\n * 转置处理\n * @param params\n */\nfunction transpose(params) {\n    var chart = params.chart, options = params.options;\n    var isTransposed = options.isTransposed;\n    chart.coordinate({\n        type: 'rect',\n        actions: isTransposed ? [['transpose'], ['reflect', 'x']] : [],\n    });\n    return params;\n}\n/**\n * 转化率组件\n * @param params\n */\nfunction conversionTag(params) {\n    var getLineCoordinate = function (datum, datumIndex, data, initLineOption) {\n        return __assign(__assign({}, initLineOption), { start: [datum[PLOYGON_X][1], datum[PLOYGON_Y][1]], end: [datum[PLOYGON_X][1] + 0.05, datum[PLOYGON_Y][1]] });\n    };\n    conversionTagComponent(getLineCoordinate)(params);\n    return params;\n}\n/**\n * 动态高度漏斗\n * @param chart\n * @param options\n */\nexport function dynamicHeightFunnel(params) {\n    return flow(field, geometry, transpose, conversionTag)(params);\n}\n//# sourceMappingURL=dynamic-height.js.map","import { deepAssign, flow } from '../../../utils';\nimport { basicFunnel } from './basic';\n/**\n * 处理字段数据\n * @param params\n */\nfunction field(params) {\n    var _a;\n    var chart = params.chart, options = params.options;\n    var _b = options.data, data = _b === void 0 ? [] : _b, yField = options.yField;\n    // 绘制漏斗图\n    chart.data(data);\n    chart.scale((_a = {},\n        _a[yField] = {\n            sync: true,\n        },\n        _a));\n    return params;\n}\n/**\n * geometry处理\n * @param params\n */\nfunction geometry(params) {\n    var chart = params.chart, options = params.options;\n    var seriesField = options.seriesField, isTransposed = options.isTransposed, showFacetTitle = options.showFacetTitle;\n    chart.facet('rect', {\n        fields: [seriesField],\n        padding: [isTransposed ? 0 : 32, 10, 0, 10],\n        showTitle: showFacetTitle,\n        eachView: function (view, facet) {\n            basicFunnel(deepAssign({}, params, {\n                chart: view,\n                options: {\n                    data: facet.data,\n                },\n            }));\n        },\n    });\n    return params;\n}\n/**\n * 分面漏斗\n * @param chart\n * @param options\n */\nexport function facetFunnel(params) {\n    return flow(field, geometry)(params);\n}\n//# sourceMappingURL=facet.js.map","import { __assign, __extends } from \"tslib\";\nimport { Action } from '@antv/g2';\nimport { each, filter, get, map } from '@antv/util';\nimport { conversionTag as basicConversionTag } from '../geometries/basic';\nimport { CONVERSION_TAG_NAME, transformData } from '../geometries/common';\nimport { compareConversionTag } from '../geometries/compare';\n/**\n * Funnel 转化率跟随 legend 变化事件\n */\nvar ConversionTagAction = /** @class */ (function (_super) {\n    __extends(ConversionTagAction, _super);\n    function ConversionTagAction() {\n        var _this = _super !== null && _super.apply(this, arguments) || this;\n        _this.rendering = false;\n        return _this;\n    }\n    ConversionTagAction.prototype.change = function (options) {\n        var _this = this;\n        // 防止多次重复渲染\n        if (!this.rendering) {\n            var seriesField = options.seriesField, compareField = options.compareField;\n            var conversionTag_1 = compareField ? compareConversionTag : basicConversionTag;\n            var view = this.context.view;\n            // 兼容分面漏斗图\n            var views = seriesField || compareField ? view.views : [view];\n            map(views, function (v, index) {\n                // 防止影响其他 annotations 被去除\n                var annotationController = v.getController('annotation');\n                var annotations = filter(get(annotationController, ['option'], []), function (_a) {\n                    var name = _a.name;\n                    return name !== CONVERSION_TAG_NAME;\n                });\n                annotationController.clear(true);\n                each(annotations, function (annotation) {\n                    if (typeof annotation === 'object') {\n                        v.annotation()[annotation.type](annotation);\n                    }\n                });\n                var data = get(v, ['filteredData'], v.getOptions().data);\n                conversionTag_1({\n                    chart: v,\n                    index: index,\n                    options: __assign(__assign({}, options), { \n                        // @ts-ignore\n                        filteredData: transformData(data, data, options) }),\n                });\n                v.filterData(data);\n                _this.rendering = true;\n                v.render(true);\n            });\n        }\n        this.rendering = false;\n    };\n    return ConversionTagAction;\n}(Action));\nexport { ConversionTagAction };\n//# sourceMappingURL=funnel-conversion-tag.js.map","import { registerAction, registerInteraction } from '@antv/g2';\nimport { ConversionTagAction } from './funnel-conversion-tag';\nvar FUNNEL_CONVERSION_TAG = 'funnel-conversion-tag';\nexport var FUNNEL_LEGEND_FILTER = 'funnel-afterrender';\nexport var interactionStart = { trigger: 'afterrender', action: \"\".concat(FUNNEL_CONVERSION_TAG, \":change\") };\nregisterAction(FUNNEL_CONVERSION_TAG, ConversionTagAction);\nregisterInteraction(FUNNEL_LEGEND_FILTER, {\n    start: [interactionStart],\n});\n//# sourceMappingURL=index.js.map","import { __assign } from \"tslib\";\nimport { clone, each, isFunction } from '@antv/util';\nimport { animation, annotation, scale, theme, tooltip } from '../../adaptor/common';\nimport { getLocale } from '../../core/locale';\nimport { deepAssign, flow } from '../../utils';\nimport { conversionTagFormatter } from '../../utils/conversion';\nimport { FUNNEL_CONVERSATION, FUNNEL_PERCENT } from './constant';\nimport { basicFunnel } from './geometries/basic';\nimport { compareFunnel } from './geometries/compare';\nimport { dynamicHeightFunnel } from './geometries/dynamic-height';\nimport { facetFunnel } from './geometries/facet';\nimport { FUNNEL_LEGEND_FILTER, interactionStart } from './interactions';\n/**\n *\n * 各式漏斗图geometry实现细节有较大不同,\n * 1. 普通漏斗图：interval.shape('funnel')\n * 2. 对比漏斗图：分面\n * 3. 动态高度漏斗图：polypon\n * 4. 分面漏斗图：普通 + list 分面\n* /\n\n/**\n * options 处理\n * @param params\n */\nfunction defaultOptions(params) {\n    var options = params.options;\n    var compareField = options.compareField, xField = options.xField, yField = options.yField, locale = options.locale, funnelStyle = options.funnelStyle, data = options.data;\n    var i18n = getLocale(locale);\n    var defaultOption = {\n        label: compareField\n            ? {\n                fields: [xField, yField, compareField, FUNNEL_PERCENT, FUNNEL_CONVERSATION],\n                formatter: function (datum) { return \"\".concat(datum[yField]); },\n            }\n            : {\n                fields: [xField, yField, FUNNEL_PERCENT, FUNNEL_CONVERSATION],\n                offset: 0,\n                position: 'middle',\n                formatter: function (datum) { return \"\".concat(datum[xField], \" \").concat(datum[yField]); },\n            },\n        tooltip: {\n            title: xField,\n            formatter: function (datum) {\n                return { name: datum[xField], value: datum[yField] };\n            },\n        },\n        conversionTag: {\n            // conversionTag 的计算和显示逻辑统一保持一致\n            formatter: function (datum) {\n                return \"\".concat(i18n.get(['conversionTag', 'label']), \": \").concat(conversionTagFormatter.apply(void 0, datum[FUNNEL_CONVERSATION]));\n            },\n        },\n    };\n    // 漏斗图样式\n    var style;\n    if (compareField || funnelStyle) {\n        style = function (datum) {\n            return deepAssign({}, \n            // 对比漏斗图默认描边\n            compareField && { lineWidth: 1, stroke: '#fff' }, isFunction(funnelStyle) ? funnelStyle(datum) : funnelStyle);\n        };\n    }\n    return deepAssign({ options: defaultOption }, params, { options: { funnelStyle: style, data: clone(data) } });\n}\n/**\n * geometry处理\n * @param params\n */\nfunction geometry(params) {\n    var options = params.options;\n    var compareField = options.compareField, dynamicHeight = options.dynamicHeight, seriesField = options.seriesField;\n    if (seriesField) {\n        return facetFunnel(params);\n    }\n    if (compareField) {\n        return compareFunnel(params);\n    }\n    if (dynamicHeight) {\n        return dynamicHeightFunnel(params);\n    }\n    return basicFunnel(params);\n}\n/**\n * meta 配置\n * @param params\n */\nexport function meta(params) {\n    var _a;\n    var options = params.options;\n    var xAxis = options.xAxis, yAxis = options.yAxis, xField = options.xField, yField = options.yField;\n    return flow(scale((_a = {},\n        _a[xField] = xAxis,\n        _a[yField] = yAxis,\n        _a)))(params);\n}\n/**\n * 坐标轴\n * @param params\n */\nfunction axis(params) {\n    var chart = params.chart;\n    chart.axis(false);\n    return params;\n}\n/**\n * legend 配置\n * @param params\n */\nfunction legend(params) {\n    var chart = params.chart, options = params.options;\n    var legend = options.legend;\n    if (legend === false) {\n        chart.legend(false);\n    }\n    else {\n        chart.legend(legend);\n        // TODO FIX: legend-click 时间和转化率组件之间的关联\n    }\n    return params;\n}\n/**\n * Interaction 配置\n * @param params\n */\nexport function interaction(params) {\n    var chart = params.chart, options = params.options;\n    // @ts-ignore\n    var interactions = options.interactions, dynamicHeight = options.dynamicHeight;\n    each(interactions, function (i) {\n        if (i.enable === false) {\n            chart.removeInteraction(i.type);\n        }\n        else {\n            chart.interaction(i.type, i.cfg || {});\n        }\n    });\n    // 动态高度  不进行交互操作\n    if (!dynamicHeight) {\n        chart.interaction(FUNNEL_LEGEND_FILTER, {\n            start: [__assign(__assign({}, interactionStart), { arg: options })],\n        });\n    }\n    else {\n        chart.removeInteraction(FUNNEL_LEGEND_FILTER);\n    }\n    return params;\n}\n/**\n * 漏斗图适配器\n * @param chart\n * @param options\n */\nexport function adaptor(params) {\n    return flow(defaultOptions, geometry, meta, axis, tooltip, interaction, legend, animation, theme, annotation())(params);\n}\n//# sourceMappingURL=adaptor.js.map","import { __extends } from \"tslib\";\nimport { each } from '@antv/util';\nimport { Plot } from '../../core/plot';\nimport { getAllElementsRecursively } from '../../utils';\nimport { adaptor } from './adaptor';\nimport { DEFAULT_OPTIONS, FUNNEL_CONVERSATION as FUNNEL_CONVERSATION_FIELD, FUNNEL_PERCENT, FUNNEL_TOTAL_PERCENT, } from './constant';\nimport './interactions';\nexport { FUNNEL_CONVERSATION_FIELD };\nvar Funnel = /** @class */ (function (_super) {\n    __extends(Funnel, _super);\n    function Funnel() {\n        var _this = _super !== null && _super.apply(this, arguments) || this;\n        /** 图表类型 */\n        _this.type = 'funnel';\n        return _this;\n    }\n    Funnel.getDefaultOptions = function () {\n        return DEFAULT_OPTIONS;\n    };\n    /**\n     * 获取 漏斗图 默认配置项\n     */\n    Funnel.prototype.getDefaultOptions = function () {\n        // 由于不同漏斗图 defaultOption 有部分逻辑不同，此处仅处理 core.getDefaultOptions 覆盖范围，funnel 的 defaulOption 为不分散逻辑统一写到 adaptor 的 defaultOption 中\n        return Funnel.getDefaultOptions();\n    };\n    /**\n     * 获取 漏斗图 的适配器\n     */\n    Funnel.prototype.getSchemaAdaptor = function () {\n        return adaptor;\n    };\n    /**\n     * 设置状态\n     * @param type 状态类型，支持 'active' | 'inactive' | 'selected' 三种\n     * @param conditions 条件，支持数组\n     * @param status 是否激活，默认 true\n     */\n    Funnel.prototype.setState = function (type, condition, status) {\n        if (status === void 0) { status = true; }\n        var elements = getAllElementsRecursively(this.chart);\n        each(elements, function (ele) {\n            if (condition(ele.getData())) {\n                ele.setState(type, status);\n            }\n        });\n    };\n    /**\n     * 获取状态\n     */\n    Funnel.prototype.getStates = function () {\n        var elements = getAllElementsRecursively(this.chart);\n        var stateObjects = [];\n        each(elements, function (element) {\n            var data = element.getData();\n            var states = element.getStates();\n            each(states, function (state) {\n                stateObjects.push({ data: data, state: state, geometry: element.geometry, element: element });\n            });\n        });\n        return stateObjects;\n    };\n    // 内部变量\n    /** 漏斗 转化率 字段 */\n    Funnel.CONVERSATION_FIELD = FUNNEL_CONVERSATION_FIELD;\n    /** 漏斗 百分比 字段 */\n    Funnel.PERCENT_FIELD = FUNNEL_PERCENT;\n    /** 漏斗 总转换率百分比 字段 */\n    Funnel.TOTAL_PERCENT_FIELD = FUNNEL_TOTAL_PERCENT;\n    return Funnel;\n}(Plot));\nexport { Funnel };\n//# sourceMappingURL=index.js.map","var _a;\nexport var RANGE_VALUE = 'range';\nexport var RANGE_TYPE = 'type';\nexport var PERCENT = 'percent';\nexport var DEFAULT_COLOR = '#f0f0f0';\n/** 仪表盘由 指针和表盘 组成 */\nexport var INDICATEOR_VIEW_ID = 'indicator-view';\nexport var RANGE_VIEW_ID = 'range-view';\n/**\n * 仪表盘默认配置项\n */\nexport var DEFAULT_OPTIONS = {\n    percent: 0,\n    range: {\n        ticks: [],\n    },\n    innerRadius: 0.9,\n    radius: 0.95,\n    startAngle: (-7 / 6) * Math.PI,\n    endAngle: (1 / 6) * Math.PI,\n    syncViewPadding: true,\n    axis: {\n        line: null,\n        label: {\n            offset: -24,\n            style: {\n                textAlign: 'center',\n                textBaseline: 'middle',\n            },\n        },\n        subTickLine: {\n            length: -8,\n        },\n        tickLine: {\n            length: -12,\n        },\n        grid: null,\n    },\n    indicator: {\n        pointer: {\n            style: {\n                lineWidth: 5,\n                lineCap: 'round',\n            },\n        },\n        pin: {\n            style: {\n                r: 9.75,\n                lineWidth: 4.5,\n                fill: '#fff',\n            },\n        },\n    },\n    statistic: {\n        title: false,\n    },\n    meta: (_a = {},\n        // 两个 view 的 scale 同步到 v 上\n        _a[RANGE_VALUE] = {\n            sync: 'v',\n        },\n        _a[PERCENT] = {\n            sync: 'v',\n            tickCount: 5,\n            tickInterval: 0.2,\n        },\n        _a),\n    animation: false,\n};\n//# sourceMappingURL=constants.js.map","import { clamp, get, size, uniq } from '@antv/util';\nimport { PERCENT, RANGE_TYPE, RANGE_VALUE } from './constants';\n/**\n * 将 range 生成为 data 数据\n * @param range\n * @param key\n * @returns {GaugeRangeData}\n */\nexport function processRangeData(range, percent) {\n    return (range\n        // 映射为 stack 的数据\n        .map(function (r, idx) {\n        var _a;\n        return _a = {}, _a[RANGE_VALUE] = r - (range[idx - 1] || 0), _a[RANGE_TYPE] = \"\".concat(idx), _a[PERCENT] = percent, _a;\n    }));\n}\n/**\n * 获取 仪表盘 指针数据\n * @param percent\n */\nexport function getIndicatorData(percent) {\n    var _a;\n    return [(_a = {}, _a[PERCENT] = clamp(percent, 0, 1), _a)];\n}\n/**\n * 获取仪表盘 表盘弧形数据\n * @param percent\n * @param range\n */\nexport function getRangeData(percent, range) {\n    var ticks = get(range, ['ticks'], []);\n    var clampTicks = size(ticks) ? uniq(ticks) : [0, clamp(percent, 0, 1), 1];\n    if (!clampTicks[0]) {\n        clampTicks.shift();\n    }\n    return processRangeData(clampTicks, percent);\n}\n//# sourceMappingURL=utils.js.map","import { __assign } from \"tslib\";\nimport { get, isString } from '@antv/util';\nimport { animation, annotation, interaction, scale, theme } from '../../adaptor/common';\nimport { interval } from '../../adaptor/geometries';\nimport { AXIS_META_CONFIG_KEYS } from '../../constant';\nimport { deepAssign, flow, pick, renderGaugeStatistic } from '../../utils';\nimport { DEFAULT_COLOR, INDICATEOR_VIEW_ID, PERCENT, RANGE_TYPE, RANGE_VALUE, RANGE_VIEW_ID } from './constants';\nimport { getIndicatorData, getRangeData } from './utils';\n/**\n * geometry 处理\n * @param params\n */\nfunction geometry(params) {\n    var chart = params.chart, options = params.options;\n    var percent = options.percent, range = options.range, radius = options.radius, innerRadius = options.innerRadius, startAngle = options.startAngle, endAngle = options.endAngle, axis = options.axis, indicator = options.indicator, gaugeStyle = options.gaugeStyle, type = options.type, meter = options.meter;\n    var color = range.color, rangeWidth = range.width;\n    // 指标 & 指针\n    // 如果开启在应用\n    if (indicator) {\n        var indicatorData = getIndicatorData(percent);\n        var v1 = chart.createView({ id: INDICATEOR_VIEW_ID });\n        v1.data(indicatorData);\n        v1.point()\n            .position(\"\".concat(PERCENT, \"*1\"))\n            .shape(indicator.shape || 'gauge-indicator')\n            // 传入指针的样式到自定义 shape 中\n            .customInfo({\n            defaultColor: chart.getTheme().defaultColor,\n            indicator: indicator,\n        });\n        v1.coordinate('polar', {\n            startAngle: startAngle,\n            endAngle: endAngle,\n            radius: innerRadius * radius, // 外部的 innerRadius * radius = 这里的 radius\n        });\n        v1.axis(PERCENT, axis);\n        // 一部分应用到 scale 中\n        v1.scale(PERCENT, pick(axis, AXIS_META_CONFIG_KEYS));\n    }\n    // 辅助 range\n    // [{ range: 1, type: '0', percent: 原始进度百分比 }]\n    var rangeData = getRangeData(percent, options.range);\n    var v2 = chart.createView({ id: RANGE_VIEW_ID });\n    v2.data(rangeData);\n    var rangeColor = isString(color) ? [color, DEFAULT_COLOR] : color;\n    var ext = interval({\n        chart: v2,\n        options: {\n            xField: '1',\n            yField: RANGE_VALUE,\n            seriesField: RANGE_TYPE,\n            rawFields: [PERCENT],\n            isStack: true,\n            interval: {\n                color: rangeColor,\n                style: gaugeStyle,\n                shape: type === 'meter' ? 'meter-gauge' : null,\n            },\n            args: {\n                zIndexReversed: true,\n                sortZIndex: true,\n            },\n            minColumnWidth: rangeWidth,\n            maxColumnWidth: rangeWidth,\n        },\n    }).ext;\n    var geometry = ext.geometry;\n    // 传入到自定义 shape 中\n    geometry.customInfo({ meter: meter });\n    v2.coordinate('polar', {\n        innerRadius: innerRadius,\n        radius: radius,\n        startAngle: startAngle,\n        endAngle: endAngle,\n    }).transpose();\n    return params;\n}\n/**\n * meta 配置\n * @param params\n */\nfunction meta(params) {\n    var _a;\n    return flow(scale((_a = {\n            range: {\n                min: 0,\n                max: 1,\n                maxLimit: 1,\n                minLimit: 0,\n            }\n        },\n        _a[PERCENT] = {},\n        _a)))(params);\n}\n/**\n * 统计指标文档\n * @param params\n */\nfunction statistic(params, updated) {\n    var chart = params.chart, options = params.options;\n    var statistic = options.statistic, percent = options.percent;\n    // 先清空标注，再重新渲染\n    chart.getController('annotation').clear(true);\n    if (statistic) {\n        var contentOption = statistic.content;\n        var transformContent = void 0;\n        // 当设置 content 的时候，设置默认样式\n        if (contentOption) {\n            transformContent = deepAssign({}, {\n                content: \"\".concat((percent * 100).toFixed(2), \"%\"),\n                style: {\n                    opacity: 0.75,\n                    fontSize: '30px',\n                    lineHeight: 1,\n                    textAlign: 'center',\n                    color: 'rgba(44,53,66,0.85)',\n                },\n            }, contentOption);\n        }\n        renderGaugeStatistic(chart, { statistic: __assign(__assign({}, statistic), { content: transformContent }) }, { percent: percent });\n    }\n    if (updated) {\n        chart.render(true);\n    }\n    return params;\n}\n/**\n * tooltip 配置\n */\nfunction tooltip(params) {\n    var chart = params.chart, options = params.options;\n    var tooltip = options.tooltip;\n    if (tooltip) {\n        chart.tooltip(deepAssign({\n            showTitle: false,\n            showMarkers: false,\n            containerTpl: '<div class=\"g2-tooltip\"><div class=\"g2-tooltip-list\"></div></div>',\n            domStyles: {\n                'g2-tooltip': {\n                    padding: '4px 8px',\n                    fontSize: '10px',\n                },\n            },\n            customContent: function (x, data) {\n                var percent = get(data, [0, 'data', PERCENT], 0);\n                return \"\".concat((percent * 100).toFixed(2), \"%\");\n            },\n        }, tooltip));\n    }\n    else {\n        // 默认，不展示 tooltip\n        chart.tooltip(false);\n    }\n    return params;\n}\n/**\n * other 配置\n * @param params\n */\nfunction other(params) {\n    var chart = params.chart;\n    chart.legend(false);\n    return params;\n}\n/**\n * 对外暴露的 adaptor\n */\nexport { statistic };\n/**\n * 图适配器\n * @param chart\n * @param options\n */\nexport function adaptor(params) {\n    // flow 的方式处理所有的配置到 G2 API\n    return flow(theme, \n    // animation 配置必须在 createView 之前，不然无法让子 View 生效\n    animation, geometry, meta, tooltip, statistic, interaction, annotation(), other\n    // ... 其他的 adaptor flow\n    )(params);\n}\n//# sourceMappingURL=adaptor.js.map","import { __assign } from \"tslib\";\nimport { registerShape } from '@antv/g2';\n// 自定义Shape 部分\nregisterShape('point', 'gauge-indicator', {\n    draw: function (cfg, container) {\n        // 使用 customInfo 传递参数\n        var _a = cfg.customInfo, indicator = _a.indicator, defaultColor = _a.defaultColor;\n        var _b = indicator, pointer = _b.pointer, pin = _b.pin;\n        var group = container.addGroup();\n        // 获取极坐标系下画布中心点\n        var center = this.parsePoint({ x: 0, y: 0 });\n        // 绘制指针\n        if (pointer) {\n            // pointer\n            group.addShape('line', {\n                name: 'pointer',\n                attrs: __assign({ x1: center.x, y1: center.y, x2: cfg.x, y2: cfg.y, stroke: defaultColor }, pointer.style),\n            });\n        }\n        // pin\n        if (pin) {\n            group.addShape('circle', {\n                name: 'pin',\n                attrs: __assign({ x: center.x, y: center.y, stroke: defaultColor }, pin.style),\n            });\n        }\n        return group;\n    },\n});\n//# sourceMappingURL=indicator.js.map","import { registerShape, Util } from '@antv/g2';\nimport { clamp } from '@antv/util';\n/**\n * 自定义 Shape 部分: 自定义米轨仪表盘\n * 定义 STEP, STEP_RATIO. 可绘制区域: 1 / (STEP + 1) * i -> 1 / (STEP + 1) * i + (STEP_RATIO / (STEP + 1))\n */\nregisterShape('interval', 'meter-gauge', {\n    draw: function (cfg, container) {\n        // 使用 customInfo 传递参数\n        var _a = cfg.customInfo.meter, meter = _a === void 0 ? {} : _a;\n        var _b = meter.steps, STEP = _b === void 0 ? 50 : _b, _c = meter.stepRatio, STEP_RATIO = _c === void 0 ? 0.5 : _c;\n        STEP = STEP < 1 ? 1 : STEP;\n        // stepRatio 取值范围: (0, 1]\n        STEP_RATIO = clamp(STEP_RATIO, 0, 1);\n        var _d = this.coordinate, COORD_START_ANGLE = _d.startAngle, COORD_END_ANGLE = _d.endAngle;\n        var GAP = 0;\n        if (STEP_RATIO > 0 && STEP_RATIO < 1) {\n            var TOTAL = COORD_END_ANGLE - COORD_START_ANGLE;\n            GAP = TOTAL / STEP / (STEP_RATIO / (1 - STEP_RATIO) + 1 - 1 / STEP);\n        }\n        var INTERVAL = (GAP / (1 - STEP_RATIO)) * STEP_RATIO;\n        var group = container.addGroup();\n        // 绘制图形的时候，留下 gap\n        var center = this.coordinate.getCenter();\n        var radius = this.coordinate.getRadius();\n        var _e = Util.getAngle(cfg, this.coordinate), START_ANGLE = _e.startAngle, END_ANGLE = _e.endAngle;\n        for (var startAngle = START_ANGLE; startAngle < END_ANGLE;) {\n            var endAngle = void 0;\n            var r = (startAngle - COORD_START_ANGLE) % (INTERVAL + GAP);\n            if (r < INTERVAL) {\n                endAngle = startAngle + (INTERVAL - r);\n            }\n            else {\n                startAngle += INTERVAL + GAP - r;\n                endAngle = startAngle + INTERVAL;\n            }\n            var path = Util.getSectorPath(center.x, center.y, radius, startAngle, Math.min(endAngle, END_ANGLE), radius * this.coordinate.innerRadius);\n            group.addShape('path', {\n                name: 'meter-gauge',\n                attrs: {\n                    path: path,\n                    fill: cfg.color,\n                    stroke: cfg.color,\n                    lineWidth: 0.5,\n                },\n            });\n            startAngle = endAngle + GAP;\n        }\n        return group;\n    },\n});\n//# sourceMappingURL=meter-gauge.js.map","import { __extends } from \"tslib\";\nimport { Event, VIEW_LIFE_CIRCLE } from '@antv/g2';\nimport { Plot } from '../../core/plot';\nimport { adaptor, statistic } from './adaptor';\nimport { DEFAULT_OPTIONS, INDICATEOR_VIEW_ID, RANGE_VIEW_ID } from './constants';\n// 注册 shape\nimport './shapes/indicator';\nimport './shapes/meter-gauge';\nimport { getIndicatorData, getRangeData } from './utils';\n/**\n * 仪表盘\n */\nvar Gauge = /** @class */ (function (_super) {\n    __extends(Gauge, _super);\n    function Gauge() {\n        var _this = _super !== null && _super.apply(this, arguments) || this;\n        /** 图表类型 */\n        _this.type = 'gauge';\n        return _this;\n    }\n    /**\n     * 获取 仪表盘 默认配置项\n     * 供外部使用\n     */\n    Gauge.getDefaultOptions = function () {\n        return DEFAULT_OPTIONS;\n    };\n    /**\n     * 更新数据\n     * @param percent\n     */\n    Gauge.prototype.changeData = function (percent) {\n        this.chart.emit(VIEW_LIFE_CIRCLE.BEFORE_CHANGE_DATA, Event.fromData(this.chart, VIEW_LIFE_CIRCLE.BEFORE_CHANGE_DATA, null));\n        this.updateOption({ percent: percent });\n        var indicatorView = this.chart.views.find(function (v) { return v.id === INDICATEOR_VIEW_ID; });\n        if (indicatorView) {\n            indicatorView.data(getIndicatorData(percent));\n        }\n        var rangeView = this.chart.views.find(function (v) { return v.id === RANGE_VIEW_ID; });\n        if (rangeView) {\n            rangeView.data(getRangeData(percent, this.options.range));\n        }\n        // todo 后续让 G2 层在 afterrender 之后，来重绘 annotations\n        statistic({ chart: this.chart, options: this.options }, true);\n        this.chart.emit(VIEW_LIFE_CIRCLE.AFTER_CHANGE_DATA, Event.fromData(this.chart, VIEW_LIFE_CIRCLE.AFTER_CHANGE_DATA, null));\n    };\n    /**\n     * 获取默认配置\n     * 供 base 使用\n     */\n    Gauge.prototype.getDefaultOptions = function () {\n        return Gauge.getDefaultOptions();\n    };\n    /**\n     * 获取适配器\n     */\n    Gauge.prototype.getSchemaAdaptor = function () {\n        return adaptor;\n    };\n    return Gauge;\n}(Plot));\nexport { Gauge };\n//# sourceMappingURL=index.js.map","import { clone, each, getRange, groupBy, hasKey, isEmpty, sortBy, valuesOfKey } from '@antv/util';\n// 进行转换得到值所在的 range\nfunction getBinKey(value, binWidth, binNumber) {\n    // 做一点特殊处理\n    if (binNumber === 1) {\n        return [0, binWidth];\n    }\n    var index = Math.floor(value / binWidth);\n    return [binWidth * index, binWidth * (index + 1)];\n}\n// 默认 sturges 转换\nfunction sturges(values) {\n    return Math.ceil(Math.log(values.length) / Math.LN2) + 1;\n}\n/**\n * 对数据进行百分比化\n * @param data\n * @param binField\n * @param binWidth\n * @param binNumber\n * @param stackField\n */\nexport function binHistogram(data, binField, binWidth, binNumber, stackField) {\n    var originData_copy = clone(data);\n    // 根据 binField 对源数据进行排序\n    sortBy(originData_copy, binField);\n    // 获取源数据 binField 的 range\n    var values = valuesOfKey(originData_copy, binField);\n    var range = getRange(values);\n    var rangeWidth = range.max - range.min;\n    // 计算分箱，直方图分箱的计算基于 binWidth，如配置了 binNumber 则将其转为 binWidth 进行计算\n    var _binWidth = binWidth;\n    if (!binWidth && binNumber) {\n        _binWidth = binNumber > 1 ? rangeWidth / (binNumber - 1) : range.max;\n    }\n    // 当 binWidth 和 binNumber 都没有指定的情况，采用 Sturges formula 自动生成 binWidth\n    if (!binWidth && !binNumber) {\n        var _defaultBinNumber = sturges(values);\n        _binWidth = rangeWidth / _defaultBinNumber;\n    }\n    // 构建 key - StatisticData 结构\n    var bins = {};\n    var groups = groupBy(originData_copy, stackField);\n    // 判断分组是否为空，如果为空，说明没有 stackField 字段\n    if (isEmpty(groups)) {\n        each(originData_copy, function (data) {\n            var value = data[binField];\n            var bin = getBinKey(value, _binWidth, binNumber);\n            var binKey = \"\".concat(bin[0], \"-\").concat(bin[1]);\n            if (!hasKey(bins, binKey)) {\n                bins[binKey] = { range: bin, count: 0 };\n            }\n            bins[binKey].count += 1;\n        });\n    }\n    else {\n        Object.keys(groups).forEach(function (groupKey) {\n            each(groups[groupKey], function (data) {\n                var value = data[binField];\n                var bin = getBinKey(value, _binWidth, binNumber);\n                var binKey = \"\".concat(bin[0], \"-\").concat(bin[1]);\n                var groupKeyBinKey = \"\".concat(binKey, \"-\").concat(groupKey);\n                if (!hasKey(bins, groupKeyBinKey)) {\n                    bins[groupKeyBinKey] = { range: bin, count: 0 };\n                    bins[groupKeyBinKey][stackField] = groupKey;\n                }\n                bins[groupKeyBinKey].count += 1;\n            });\n        });\n    }\n    // 将分箱数据转换为 plotData 才是图表所需要的\n    var plotData = [];\n    each(bins, function (bin) {\n        plotData.push(bin);\n    });\n    return plotData;\n}\n//# sourceMappingURL=histogram.js.map","import isArray from './is-array';\nimport isString from './is-string';\nimport isFunction from './is-function';\nfunction sortBy(arr, key) {\n    var comparer;\n    if (isFunction(key)) {\n        comparer = function (a, b) { return key(a) - key(b); };\n    }\n    else {\n        var keys_1 = [];\n        if (isString(key)) {\n            keys_1.push(key);\n        }\n        else if (isArray(key)) {\n            keys_1 = key;\n        }\n        comparer = function (a, b) {\n            for (var i = 0; i < keys_1.length; i += 1) {\n                var prop = keys_1[i];\n                if (a[prop] > b[prop]) {\n                    return 1;\n                }\n                if (a[prop] < b[prop]) {\n                    return -1;\n                }\n            }\n            return 0;\n        };\n    }\n    arr.sort(comparer);\n    return arr;\n}\nexport default sortBy;\n//# sourceMappingURL=sort-by.js.map","import { Plot } from '../../core/plot';\nimport { deepAssign } from '../../utils';\n/** 直方图 xField */\nexport var HISTOGRAM_X_FIELD = 'range';\n/** 直方图 yField */\nexport var HISTOGRAM_Y_FIELD = 'count';\n/**\n * 默认配置项\n */\nexport var DEFAULT_OPTIONS = deepAssign({}, Plot.getDefaultOptions(), {\n    columnStyle: {\n        stroke: '#FFFFFF',\n    },\n    tooltip: {\n        shared: true,\n        showMarkers: false,\n    },\n    interactions: [{ type: 'active-region' }],\n});\n//# sourceMappingURL=constant.js.map","import { __rest } from \"tslib\";\nimport { animation, interaction, scale, state, theme, tooltip } from '../../adaptor/common';\nimport { interval } from '../../adaptor/geometries';\nimport { pattern } from '../../adaptor/pattern';\nimport { deepAssign, findGeometry, flow, transformLabel } from '../../utils';\nimport { binHistogram } from '../../utils/transform/histogram';\nimport { HISTOGRAM_X_FIELD, HISTOGRAM_Y_FIELD } from './constant';\n/**\n * geometry 处理\n * @param params\n */\nfunction geometry(params) {\n    var chart = params.chart, options = params.options;\n    var data = options.data, binField = options.binField, binNumber = options.binNumber, binWidth = options.binWidth, color = options.color, stackField = options.stackField, legend = options.legend, columnStyle = options.columnStyle;\n    // 处理数据\n    var plotData = binHistogram(data, binField, binWidth, binNumber, stackField);\n    chart.data(plotData);\n    var p = deepAssign({}, params, {\n        options: {\n            xField: HISTOGRAM_X_FIELD,\n            yField: HISTOGRAM_Y_FIELD,\n            seriesField: stackField,\n            isStack: true,\n            interval: {\n                color: color,\n                style: columnStyle,\n            },\n        },\n    });\n    interval(p);\n    // 图例\n    if (legend && stackField) {\n        chart.legend(stackField, legend);\n    }\n    else {\n        chart.legend(false);\n    }\n    return params;\n}\n/**\n * meta 配置\n * @param params\n */\nfunction meta(params) {\n    var _a;\n    var options = params.options;\n    var xAxis = options.xAxis, yAxis = options.yAxis;\n    return flow(scale((_a = {},\n        _a[HISTOGRAM_X_FIELD] = xAxis,\n        _a[HISTOGRAM_Y_FIELD] = yAxis,\n        _a)))(params);\n}\n/**\n * axis 配置\n * @param params\n */\nfunction axis(params) {\n    var chart = params.chart, options = params.options;\n    var xAxis = options.xAxis, yAxis = options.yAxis;\n    // 为 false 则是不显示轴\n    if (xAxis === false) {\n        chart.axis(HISTOGRAM_X_FIELD, false);\n    }\n    else {\n        chart.axis(HISTOGRAM_X_FIELD, xAxis);\n    }\n    if (yAxis === false) {\n        chart.axis(HISTOGRAM_Y_FIELD, false);\n    }\n    else {\n        chart.axis(HISTOGRAM_Y_FIELD, yAxis);\n    }\n    return params;\n}\n/**\n * label 配置\n * @param params\n */\nfunction label(params) {\n    var chart = params.chart, options = params.options;\n    var label = options.label;\n    var geometry = findGeometry(chart, 'interval');\n    if (!label) {\n        geometry.label(false);\n    }\n    else {\n        var callback = label.callback, cfg = __rest(label, [\"callback\"]);\n        geometry.label({\n            fields: [HISTOGRAM_Y_FIELD],\n            callback: callback,\n            cfg: transformLabel(cfg),\n        });\n    }\n    return params;\n}\n/**\n * 直方图适配器\n * @param chart\n * @param options\n */\nexport function adaptor(params) {\n    // flow 的方式处理所有的配置到 G2 API\n    return flow(theme, pattern('columnStyle'), geometry, meta, axis, state, label, tooltip, interaction, animation)(params);\n}\n//# sourceMappingURL=adaptor.js.map","import { __extends } from \"tslib\";\nimport { Plot } from '../../core/plot';\nimport { binHistogram } from '../../utils/transform/histogram';\nimport { adaptor } from './adaptor';\nimport { DEFAULT_OPTIONS } from './constant';\nvar Histogram = /** @class */ (function (_super) {\n    __extends(Histogram, _super);\n    function Histogram() {\n        var _this = _super !== null && _super.apply(this, arguments) || this;\n        /** 图表类型 */\n        _this.type = 'histogram';\n        return _this;\n    }\n    /**\n     * 获取 默认配置项\n     * 供外部使用\n     */\n    Histogram.getDefaultOptions = function () {\n        return DEFAULT_OPTIONS;\n    };\n    Histogram.prototype.changeData = function (data) {\n        this.updateOption({ data: data });\n        var _a = this.options, binField = _a.binField, binNumber = _a.binNumber, binWidth = _a.binWidth, stackField = _a.stackField;\n        this.chart.changeData(binHistogram(data, binField, binWidth, binNumber, stackField));\n    };\n    /**\n     * 获取直方图的适配器\n     */\n    Histogram.prototype.getDefaultOptions = function () {\n        return Histogram.getDefaultOptions();\n    };\n    /**\n     * 获取直方图的适配器\n     */\n    Histogram.prototype.getSchemaAdaptor = function () {\n        return adaptor;\n    };\n    return Histogram;\n}(Plot));\nexport { Histogram };\n//# sourceMappingURL=index.js.map","import { Plot } from '../../core/plot';\nimport { deepAssign } from '../../utils';\n/**\n * 折线图默认配置项\n */\nexport var DEFAULT_OPTIONS = deepAssign({}, Plot.getDefaultOptions(), {\n    tooltip: {\n        shared: true,\n        showMarkers: true,\n        showCrosshairs: true,\n        crosshairs: {\n            type: 'x',\n        },\n    },\n    legend: {\n        position: 'top-left',\n        radio: {},\n    },\n    isStack: false,\n});\n//# sourceMappingURL=constants.js.map","import { registerAction, registerInteraction } from '@antv/g2';\nimport { MarkerActiveAction } from './marker-active';\nregisterAction('marker-active', MarkerActiveAction);\nregisterInteraction('marker-active', {\n    start: [\n        {\n            trigger: 'tooltip:show',\n            action: 'marker-active:active',\n        },\n    ],\n    end: [\n        {\n            trigger: 'tooltip:hide',\n            action: 'marker-active:reset',\n        },\n    ],\n});\n//# sourceMappingURL=index.js.map","import { __extends } from \"tslib\";\nimport { InteractionAction } from '@antv/g2';\nimport { each, findIndex } from '@antv/util';\nvar MarkerActiveAction = /** @class */ (function (_super) {\n    __extends(MarkerActiveAction, _super);\n    function MarkerActiveAction() {\n        return _super !== null && _super.apply(this, arguments) || this;\n    }\n    MarkerActiveAction.prototype.active = function () {\n        var view = this.getView();\n        var evt = this.context.event;\n        if (evt.data) {\n            // items: 数组对象，当前 tooltip 显示的每条内容\n            var items_1 = evt.data.items;\n            var points = view.geometries.filter(function (geom) { return geom.type === 'point'; });\n            each(points, function (point) {\n                each(point.elements, function (element) {\n                    var active = findIndex(items_1, function (item) { return item.data === element.data; }) !== -1;\n                    element.setState('active', active);\n                });\n            });\n        }\n    };\n    MarkerActiveAction.prototype.reset = function () {\n        var view = this.getView();\n        var points = view.geometries.filter(function (geom) { return geom.type === 'point'; });\n        each(points, function (point) {\n            each(point.elements, function (element) {\n                element.setState('active', false);\n            });\n        });\n    };\n    MarkerActiveAction.prototype.getView = function () {\n        return this.context.view;\n    };\n    return MarkerActiveAction;\n}(InteractionAction));\nexport { MarkerActiveAction };\n//# sourceMappingURL=marker-active.js.map","import { __extends } from \"tslib\";\nimport { Plot } from '../../core/plot';\nimport { adaptor, meta } from './adaptor';\nimport { DEFAULT_OPTIONS } from './constants';\nimport './interactions';\nvar Line = /** @class */ (function (_super) {\n    __extends(Line, _super);\n    function Line() {\n        var _this = _super !== null && _super.apply(this, arguments) || this;\n        /** 图表类型 */\n        _this.type = 'line';\n        return _this;\n    }\n    /**\n     * 获取 折线图 默认配置项\n     * 供外部使用\n     */\n    Line.getDefaultOptions = function () {\n        return DEFAULT_OPTIONS;\n    };\n    /**\n     * @override\n     * @param data\n     */\n    Line.prototype.changeData = function (data) {\n        this.updateOption({ data: data });\n        var _a = this, chart = _a.chart, options = _a.options;\n        meta({ chart: chart, options: options });\n        this.chart.changeData(data);\n    };\n    /**\n     * 获取 折线图 默认配置\n     */\n    Line.prototype.getDefaultOptions = function () {\n        return Line.getDefaultOptions();\n    };\n    /**\n     * 获取 折线图 的适配器\n     */\n    Line.prototype.getSchemaAdaptor = function () {\n        return adaptor;\n    };\n    return Line;\n}(Plot));\nexport { Line };\n//# sourceMappingURL=index.js.map","import { Plot } from '../../core/plot';\nimport { deepAssign } from '../../utils';\n/**\n * 饼图默认配置项\n */\nexport var DEFAULT_OPTIONS = deepAssign({}, Plot.getDefaultOptions(), {\n    legend: {\n        position: 'right',\n        radio: {},\n    },\n    tooltip: {\n        shared: false,\n        showTitle: false,\n        showMarkers: false,\n    },\n    label: {\n        layout: { type: 'limit-in-plot', cfg: { action: 'ellipsis' } },\n    },\n    /** 饼图样式, 不影响暗黑主题 */\n    pieStyle: {\n        stroke: 'white',\n        lineWidth: 1,\n    },\n    /** 饼图中心文本默认样式 */\n    statistic: {\n        title: {\n            style: { fontWeight: 300, color: '#4B535E', textAlign: 'center', fontSize: '20px', lineHeight: 1 },\n        },\n        content: {\n            style: {\n                fontWeight: 'bold',\n                color: 'rgba(44,53,66,0.85)',\n                textAlign: 'center',\n                fontSize: '32px',\n                lineHeight: 1,\n            },\n        },\n    },\n    /** 默认关闭 text-annotation 动画 */\n    theme: {\n        components: {\n            annotation: {\n                text: {\n                    animate: false,\n                },\n            },\n        },\n    },\n});\n//# sourceMappingURL=contants.js.map","import { __spreadArray } from \"tslib\";\nimport { Util } from '@antv/g2';\nvar ORIGIN_MATRIX = [1, 0, 0, 0, 1, 0, 0, 0, 1];\n/**\n * 矩阵变换\n * @param actions\n * @param matrix\n */\nexport function transform(actions, matrix) {\n    var ulMatrix = matrix ? __spreadArray([], matrix, true) : __spreadArray([], ORIGIN_MATRIX, true);\n    return Util.transform(ulMatrix, actions);\n}\n//# sourceMappingURL=matrix.js.map","import { __extends } from \"tslib\";\nimport { Action, Util } from '@antv/g2';\nimport { isEqual } from '@antv/util';\nimport { transform } from '../../../../utils/matrix';\n/**\n * 饼图 图例激活 action\n */\nvar PieLegendAction = /** @class */ (function (_super) {\n    __extends(PieLegendAction, _super);\n    function PieLegendAction() {\n        return _super !== null && _super.apply(this, arguments) || this;\n    }\n    /**\n     * 获取激活的图形元素\n     */\n    PieLegendAction.prototype.getActiveElements = function () {\n        var delegateObject = Util.getDelegationObject(this.context);\n        if (delegateObject) {\n            var view = this.context.view;\n            var component = delegateObject.component, item_1 = delegateObject.item;\n            var field_1 = component.get('field');\n            if (field_1) {\n                var elements = view.geometries[0].elements;\n                return elements.filter(function (ele) { return ele.getModel().data[field_1] === item_1.value; });\n            }\n        }\n        return [];\n    };\n    /**\n     * 获取激活的标签\n     */\n    PieLegendAction.prototype.getActiveElementLabels = function () {\n        var view = this.context.view;\n        var elements = this.getActiveElements();\n        var labels = view.geometries[0].labelsContainer.getChildren();\n        return labels.filter(function (label) { return elements.find(function (ele) { return isEqual(ele.getData(), label.get('data')); }); });\n    };\n    PieLegendAction.prototype.transfrom = function (offset) {\n        if (offset === void 0) { offset = 7.5; }\n        var elements = this.getActiveElements();\n        var elementLabels = this.getActiveElementLabels();\n        elements.forEach(function (element, idx) {\n            var labelShape = elementLabels[idx];\n            var coordinate = element.geometry.coordinate;\n            if (coordinate.isPolar && coordinate.isTransposed) {\n                var _a = Util.getAngle(element.getModel(), coordinate), startAngle = _a.startAngle, endAngle = _a.endAngle;\n                var middleAngle = (startAngle + endAngle) / 2;\n                var r = offset;\n                var x = r * Math.cos(middleAngle);\n                var y = r * Math.sin(middleAngle);\n                element.shape.setMatrix(transform([['t', x, y]]));\n                labelShape.setMatrix(transform([['t', x, y]]));\n            }\n        });\n    };\n    PieLegendAction.prototype.active = function () {\n        this.transfrom();\n    };\n    /**\n     * 激活态还原\n     */\n    PieLegendAction.prototype.reset = function () {\n        this.transfrom(0);\n    };\n    return PieLegendAction;\n}(Action));\nexport { PieLegendAction };\n//# sourceMappingURL=legend-active.js.map","import { __extends } from \"tslib\";\nimport { Action, Util } from '@antv/g2';\nimport { each, get } from '@antv/util';\nimport { renderStatistic } from '../../../../utils/statistic';\nimport { getCurrentElement } from '../util';\n/**\n * Pie 中心文本事件的 Action\n */\nvar StatisticAction = /** @class */ (function (_super) {\n    __extends(StatisticAction, _super);\n    function StatisticAction() {\n        return _super !== null && _super.apply(this, arguments) || this;\n    }\n    StatisticAction.prototype.getAnnotations = function (_view) {\n        var view = _view || this.context.view;\n        // @ts-ignore\n        return view.getController('annotation').option;\n    };\n    StatisticAction.prototype.getInitialAnnotation = function () {\n        return this.initialAnnotation;\n    };\n    StatisticAction.prototype.init = function () {\n        var _this = this;\n        var view = this.context.view;\n        view.removeInteraction('tooltip');\n        view.on('afterchangesize', function () {\n            var annotations = _this.getAnnotations(view);\n            _this.initialAnnotation = annotations;\n        });\n    };\n    StatisticAction.prototype.change = function (arg) {\n        var _a = this.context, view = _a.view, event = _a.event;\n        if (!this.initialAnnotation) {\n            this.initialAnnotation = this.getAnnotations();\n        }\n        var data = get(event, ['data', 'data']);\n        if (event.type.match('legend-item')) {\n            var delegateObject = Util.getDelegationObject(this.context);\n            // @ts-ignore\n            var colorField_1 = view.getGroupedFields()[0];\n            if (delegateObject && colorField_1) {\n                var item_1 = delegateObject.item;\n                data = view.getData().find(function (d) { return d[colorField_1] === item_1.value; });\n            }\n        }\n        if (data) {\n            var annotations = get(arg, 'annotations', []);\n            var statistic = get(arg, 'statistic', {});\n            // 先清空标注，再重新渲染\n            view.getController('annotation').clear(true);\n            // 先进行其他 annotations，再去渲染统计文本\n            each(annotations, function (annotation) {\n                if (typeof annotation === 'object') {\n                    view.annotation()[annotation.type](annotation);\n                }\n            });\n            renderStatistic(view, { statistic: statistic, plotType: 'pie' }, data);\n            view.render(true);\n        }\n        // 交互的时候，把 shape 提前\n        var ele = getCurrentElement(this.context);\n        if (ele) {\n            ele.shape.toFront();\n        }\n    };\n    StatisticAction.prototype.reset = function () {\n        var view = this.context.view;\n        var annotationController = view.getController('annotation');\n        annotationController.clear(true);\n        var initialStatistic = this.getInitialAnnotation();\n        each(initialStatistic, function (a) {\n            view.annotation()[a.type](a);\n        });\n        view.render(true);\n    };\n    return StatisticAction;\n}(Action));\nexport { StatisticAction };\n//# sourceMappingURL=statistic-active.js.map","/**\n * 获取当前事件相关的图表元素\n * @param context 交互的上下文\n * @ignore\n */\nexport function getCurrentElement(context) {\n    var event = context.event;\n    var element;\n    var target = event.target;\n    if (target) {\n        element = target.get('element');\n    }\n    return element;\n}\n//# sourceMappingURL=util.js.map","import { registerAction, registerInteraction } from '@antv/g2';\nimport { PieLegendAction } from './actions/legend-active';\nimport { StatisticAction } from './actions/statistic-active';\nexport var PIE_STATISTIC = 'pie-statistic';\nregisterAction(PIE_STATISTIC, StatisticAction);\nregisterInteraction('pie-statistic-active', {\n    start: [{ trigger: 'element:mouseenter', action: 'pie-statistic:change' }],\n    end: [{ trigger: 'element:mouseleave', action: 'pie-statistic:reset' }],\n});\nregisterAction('pie-legend', PieLegendAction);\nregisterInteraction('pie-legend-active', {\n    start: [{ trigger: 'legend-item:mouseenter', action: 'pie-legend:active' }],\n    end: [{ trigger: 'legend-item:mouseleave', action: 'pie-legend:reset' }],\n});\n//# sourceMappingURL=index.js.map","import { each, every, isString } from '@antv/util';\nimport { processIllegalData } from '../../utils';\n/**\n * 获取总计值\n * @param data\n * @param field\n */\nexport function getTotalValue(data, field) {\n    var total = null;\n    each(data, function (item) {\n        if (typeof item[field] === 'number') {\n            total += item[field];\n        }\n    });\n    return total;\n}\n/**\n * pie label offset adaptor\n */\nexport function adaptOffset(type, offset) {\n    var defaultOffset;\n    switch (type) {\n        case 'inner':\n            defaultOffset = '-30%';\n            if (isString(offset) && offset.endsWith('%')) {\n                return parseFloat(offset) * 0.01 > 0 ? defaultOffset : offset;\n            }\n            return offset < 0 ? offset : defaultOffset;\n        case 'outer':\n            defaultOffset = 12;\n            if (isString(offset) && offset.endsWith('%')) {\n                return parseFloat(offset) * 0.01 < 0 ? defaultOffset : offset;\n            }\n            return offset > 0 ? offset : defaultOffset;\n        default:\n            return offset;\n    }\n}\n/**\n * 判断数据是否全部为 0\n * @param data\n * @param angleField\n */\nexport function isAllZero(data, angleField) {\n    return every(processIllegalData(data, angleField), function (d) { return d[angleField] === 0; });\n}\n//# sourceMappingURL=utils.js.map","import { __assign, __rest } from \"tslib\";\nimport { each, get, isArray, isEmpty, isFunction, isNil, isNumber, isString, toString } from '@antv/util';\nimport { animation, annotation, legend, state, theme } from '../../adaptor/common';\nimport { interval } from '../../adaptor/geometries';\nimport { getMappingFunction } from '../../adaptor/geometries/base';\nimport { pattern } from '../../adaptor/pattern';\nimport { getLocale } from '../../core/locale';\nimport { deepAssign, flow, processIllegalData, renderStatistic, template, transformLabel } from '../../utils';\nimport { DEFAULT_OPTIONS } from './contants';\nimport { PIE_STATISTIC } from './interactions';\nimport { adaptOffset, getTotalValue, isAllZero } from './utils';\n/**\n * 字段\n * @param params\n */\nfunction geometry(params) {\n    var chart = params.chart, options = params.options;\n    var data = options.data, angleField = options.angleField, colorField = options.colorField, color = options.color, pieStyle = options.pieStyle, shape = options.shape;\n    // 处理不合法的数据\n    var processData = processIllegalData(data, angleField);\n    if (isAllZero(processData, angleField)) {\n        // 数据全 0 处理，调整 position 映射\n        var percentageField_1 = '$$percentage$$';\n        processData = processData.map(function (d) {\n            var _a;\n            return (__assign(__assign({}, d), (_a = {}, _a[percentageField_1] = 1 / processData.length, _a)));\n        });\n        chart.data(processData);\n        var p = deepAssign({}, params, {\n            options: {\n                xField: '1',\n                yField: percentageField_1,\n                seriesField: colorField,\n                isStack: true,\n                interval: {\n                    color: color,\n                    shape: shape,\n                    style: pieStyle,\n                },\n                args: {\n                    zIndexReversed: true,\n                    sortZIndex: true,\n                },\n            },\n        });\n        interval(p);\n    }\n    else {\n        chart.data(processData);\n        var p = deepAssign({}, params, {\n            options: {\n                xField: '1',\n                yField: angleField,\n                seriesField: colorField,\n                isStack: true,\n                interval: {\n                    color: color,\n                    shape: shape,\n                    style: pieStyle,\n                },\n                args: {\n                    zIndexReversed: true,\n                    sortZIndex: true,\n                },\n            },\n        });\n        interval(p);\n    }\n    return params;\n}\n/**\n * meta 配置\n * @param params\n */\nfunction meta(params) {\n    var _a;\n    var chart = params.chart, options = params.options;\n    var meta = options.meta, colorField = options.colorField;\n    // meta 直接是 scale 的信息\n    var scales = deepAssign({}, meta);\n    chart.scale(scales, (_a = {},\n        _a[colorField] = { type: 'cat' },\n        _a));\n    return params;\n}\n/**\n * coord 配置\n * @param params\n */\nfunction coordinate(params) {\n    var chart = params.chart, options = params.options;\n    var radius = options.radius, innerRadius = options.innerRadius, startAngle = options.startAngle, endAngle = options.endAngle;\n    chart.coordinate({\n        type: 'theta',\n        cfg: {\n            radius: radius,\n            innerRadius: innerRadius,\n            startAngle: startAngle,\n            endAngle: endAngle,\n        },\n    });\n    return params;\n}\n/**\n * label 配置\n * @param params\n */\nfunction label(params) {\n    var chart = params.chart, options = params.options;\n    var label = options.label, colorField = options.colorField, angleField = options.angleField;\n    var geometry = chart.geometries[0];\n    // label 为 false, 空 则不显示 label\n    if (!label) {\n        geometry.label(false);\n    }\n    else {\n        var callback = label.callback, cfg = __rest(label, [\"callback\"]);\n        var labelCfg = transformLabel(cfg);\n        // ① 提供模板字符串的 label content 配置\n        if (labelCfg.content) {\n            var content_1 = labelCfg.content;\n            labelCfg.content = function (data, dataum, index) {\n                var name = data[colorField];\n                var value = data[angleField];\n                // dymatic get scale, scale is ready this time\n                var angleScale = chart.getScaleByField(angleField);\n                var percent = angleScale === null || angleScale === void 0 ? void 0 : angleScale.scale(value);\n                return isFunction(content_1)\n                    ? // append percent (number) to data, users can get origin data from `dataum._origin`\n                        content_1(__assign(__assign({}, data), { percent: percent }), dataum, index)\n                    : isString(content_1)\n                        ? template(content_1, {\n                            value: value,\n                            name: name,\n                            // percentage (string), default keep 2\n                            percentage: isNumber(percent) && !isNil(value) ? \"\".concat((percent * 100).toFixed(2), \"%\") : null,\n                        })\n                        : content_1;\n            };\n        }\n        var LABEL_LAYOUT_TYPE_MAP = {\n            inner: '',\n            outer: 'pie-outer',\n            spider: 'pie-spider',\n        };\n        var labelLayoutType = labelCfg.type ? LABEL_LAYOUT_TYPE_MAP[labelCfg.type] : 'pie-outer';\n        var labelLayoutCfg = labelCfg.layout ? (!isArray(labelCfg.layout) ? [labelCfg.layout] : labelCfg.layout) : [];\n        labelCfg.layout = (labelLayoutType ? [{ type: labelLayoutType }] : []).concat(labelLayoutCfg);\n        geometry.label({\n            // fix: could not create scale, when field is undefined（attributes 中的 fields 定义都会被用来创建 scale）\n            fields: colorField ? [angleField, colorField] : [angleField],\n            callback: callback,\n            cfg: __assign(__assign({}, labelCfg), { offset: adaptOffset(labelCfg.type, labelCfg.offset), type: 'pie' }),\n        });\n    }\n    return params;\n}\n/**\n * statistic options 处理\n * 1. 默认继承 default options 的样式\n * 2. 默认使用 meta 的 formatter\n */\nexport function transformStatisticOptions(options) {\n    var innerRadius = options.innerRadius, statistic = options.statistic, angleField = options.angleField, colorField = options.colorField, meta = options.meta, locale = options.locale;\n    var i18n = getLocale(locale);\n    if (innerRadius && statistic) {\n        var _a = deepAssign({}, DEFAULT_OPTIONS.statistic, statistic), titleOpt_1 = _a.title, contentOpt_1 = _a.content;\n        if (titleOpt_1 !== false) {\n            titleOpt_1 = deepAssign({}, {\n                formatter: function (datum) {\n                    // 交互中, datum existed.\n                    var text = datum\n                        ? datum[colorField]\n                        : !isNil(titleOpt_1.content)\n                            ? titleOpt_1.content\n                            : i18n.get(['statistic', 'total']);\n                    var metaFormatter = get(meta, [colorField, 'formatter']) || (function (v) { return v; });\n                    return metaFormatter(text);\n                },\n            }, titleOpt_1);\n        }\n        if (contentOpt_1 !== false) {\n            contentOpt_1 = deepAssign({}, {\n                formatter: function (datum, data) {\n                    var dataValue = datum ? datum[angleField] : getTotalValue(data, angleField);\n                    var metaFormatter = get(meta, [angleField, 'formatter']) || (function (v) { return v; });\n                    // 交互中\n                    if (datum) {\n                        return metaFormatter(dataValue);\n                    }\n                    return !isNil(contentOpt_1.content) ? contentOpt_1.content : metaFormatter(dataValue);\n                },\n            }, contentOpt_1);\n        }\n        return deepAssign({}, { statistic: { title: titleOpt_1, content: contentOpt_1 } }, options);\n    }\n    return options;\n}\n/**\n * statistic 中心文本配置\n * @param params\n */\nexport function pieAnnotation(params) {\n    var chart = params.chart, options = params.options;\n    var _a = transformStatisticOptions(options), innerRadius = _a.innerRadius, statistic = _a.statistic;\n    // 先清空标注，再重新渲染\n    chart.getController('annotation').clear(true);\n    // 先进行其他 annotations，再去渲染统计文本\n    flow(annotation())(params);\n    /** 中心文本 指标卡 */\n    if (innerRadius && statistic) {\n        renderStatistic(chart, { statistic: statistic, plotType: 'pie' });\n    }\n    return params;\n}\n/**\n * 饼图 tooltip 配置\n * 1. 强制 tooltip.shared 为 false\n * @param params\n */\nfunction tooltip(params) {\n    var chart = params.chart, options = params.options;\n    var tooltip = options.tooltip, colorField = options.colorField, angleField = options.angleField, data = options.data;\n    if (tooltip === false) {\n        chart.tooltip(tooltip);\n    }\n    else {\n        chart.tooltip(deepAssign({}, tooltip, { shared: false }));\n        // 主要解决 all zero， 对于非 all zero 不再适用\n        if (isAllZero(data, angleField)) {\n            var fields = get(tooltip, 'fields');\n            var formatter = get(tooltip, 'formatter');\n            if (isEmpty(get(tooltip, 'fields'))) {\n                fields = [colorField, angleField];\n                formatter = formatter || (function (datum) { return ({ name: datum[colorField], value: toString(datum[angleField]) }); });\n            }\n            chart.geometries[0].tooltip(fields.join('*'), getMappingFunction(fields, formatter));\n        }\n    }\n    return params;\n}\n/**\n * Interaction 配置 (饼图特殊的 interaction, 中心文本变更的时候，需要将一些配置参数传进去）\n * @param params\n */\nexport function interaction(params) {\n    var chart = params.chart, options = params.options;\n    var _a = transformStatisticOptions(options), interactions = _a.interactions, statistic = _a.statistic, annotations = _a.annotations;\n    each(interactions, function (i) {\n        var _a, _b;\n        if (i.enable === false) {\n            chart.removeInteraction(i.type);\n        }\n        else if (i.type === 'pie-statistic-active') {\n            // 只针对 start 阶段的配置，进行添加参数信息\n            var startStages_1 = [];\n            if (!((_a = i.cfg) === null || _a === void 0 ? void 0 : _a.start)) {\n                startStages_1 = [\n                    {\n                        trigger: 'element:mouseenter',\n                        action: \"\".concat(PIE_STATISTIC, \":change\"),\n                        arg: { statistic: statistic, annotations: annotations },\n                    },\n                ];\n            }\n            each((_b = i.cfg) === null || _b === void 0 ? void 0 : _b.start, function (stage) {\n                startStages_1.push(__assign(__assign({}, stage), { arg: { statistic: statistic, annotations: annotations } }));\n            });\n            chart.interaction(i.type, deepAssign({}, i.cfg, { start: startStages_1 }));\n        }\n        else {\n            chart.interaction(i.type, i.cfg || {});\n        }\n    });\n    return params;\n}\n/**\n * 饼图适配器\n * @param chart\n * @param options\n */\nexport function adaptor(params) {\n    // flow 的方式处理所有的配置到 G2 API\n    return flow(pattern('pieStyle'), geometry, meta, theme, coordinate, legend, tooltip, label, state, \n    /** 指标卡中心文本 放在下层 */\n    pieAnnotation, interaction, animation)(params);\n}\n//# sourceMappingURL=adaptor.js.map","import { __extends } from \"tslib\";\nimport { Event, VIEW_LIFE_CIRCLE } from '@antv/g2';\nimport { Plot } from '../../core/plot';\nimport { processIllegalData } from '../../utils';\nimport { adaptor, pieAnnotation } from './adaptor';\nimport { DEFAULT_OPTIONS } from './contants';\nimport './interactions';\nimport { isAllZero } from './utils';\nvar Pie = /** @class */ (function (_super) {\n    __extends(Pie, _super);\n    function Pie() {\n        var _this = _super !== null && _super.apply(this, arguments) || this;\n        /** 图表类型 */\n        _this.type = 'pie';\n        return _this;\n    }\n    /**\n     * 获取 饼图 默认配置项\n     * 供外部使用\n     */\n    Pie.getDefaultOptions = function () {\n        return DEFAULT_OPTIONS;\n    };\n    /**\n     * 更新数据\n     * @param data\n     */\n    Pie.prototype.changeData = function (data) {\n        this.chart.emit(VIEW_LIFE_CIRCLE.BEFORE_CHANGE_DATA, Event.fromData(this.chart, VIEW_LIFE_CIRCLE.BEFORE_CHANGE_DATA, null));\n        var prevOptions = this.options;\n        var angleField = this.options.angleField;\n        var prevData = processIllegalData(prevOptions.data, angleField);\n        var curData = processIllegalData(data, angleField);\n        // 如果上一次或当前数据全为 0，则重新渲染\n        if (isAllZero(prevData, angleField) || isAllZero(curData, angleField)) {\n            this.update({ data: data });\n        }\n        else {\n            this.updateOption({ data: data });\n            this.chart.data(curData);\n            // todo 后续让 G2 层在 afterrender 之后，来重绘 annotations\n            pieAnnotation({ chart: this.chart, options: this.options });\n            this.chart.render(true);\n        }\n        this.chart.emit(VIEW_LIFE_CIRCLE.AFTER_CHANGE_DATA, Event.fromData(this.chart, VIEW_LIFE_CIRCLE.AFTER_CHANGE_DATA, null));\n    };\n    /**\n     * 获取 饼图 默认配置项, 供 base 获取\n     */\n    Pie.prototype.getDefaultOptions = function () {\n        return Pie.getDefaultOptions();\n    };\n    /**\n     * 获取 饼图 的适配器\n     */\n    Pie.prototype.getSchemaAdaptor = function () {\n        return adaptor;\n    };\n    return Pie;\n}(Plot));\nexport { Pie };\n//# sourceMappingURL=index.js.map","export var DEFAULT_COLOR = ['#FAAD14', '#E8EDF3'];\n/**\n * 默认配置项\n */\nexport var DEFAULT_OPTIONS = {\n    percent: 0.2,\n    color: DEFAULT_COLOR,\n    animation: {},\n};\n//# sourceMappingURL=constants.js.map","import { clamp } from '@antv/util';\nimport { isRealNumber } from '../../utils/number';\n/**\n * 获取进度条数据\n */\nexport function getProgressData(percent) {\n    var clampPercent = clamp(isRealNumber(percent) ? percent : 0, 0, 1);\n    return [\n        {\n            // 用于 progressStyle 的回调方法\n            current: \"\".concat(clampPercent),\n            type: 'current',\n            percent: clampPercent,\n        },\n        {\n            current: \"\".concat(clampPercent),\n            type: 'target',\n            percent: 1,\n        },\n    ];\n}\n//# sourceMappingURL=utils.js.map","import { isString } from '@antv/util';\nimport { animation, annotation, scale, theme } from '../../adaptor/common';\nimport { interval } from '../../adaptor/geometries';\nimport { deepAssign, flow } from '../../utils';\nimport { DEFAULT_COLOR } from './constants';\nimport { getProgressData } from './utils';\n/**\n * 字段\n * @param params\n */\nexport function geometry(params) {\n    var chart = params.chart, options = params.options;\n    var percent = options.percent, progressStyle = options.progressStyle, color = options.color, barWidthRatio = options.barWidthRatio;\n    chart.data(getProgressData(percent));\n    var p = deepAssign({}, params, {\n        options: {\n            xField: 'current',\n            yField: 'percent',\n            seriesField: 'type',\n            widthRatio: barWidthRatio,\n            interval: {\n                style: progressStyle,\n                color: isString(color) ? [color, DEFAULT_COLOR[1]] : color,\n            },\n            args: {\n                zIndexReversed: true,\n                sortZIndex: true,\n            },\n        },\n    });\n    interval(p);\n    // 关闭组件\n    chart.tooltip(false);\n    chart.axis(false);\n    chart.legend(false);\n    return params;\n}\n/**\n * other 配置\n * @param params\n */\nfunction coordinate(params) {\n    var chart = params.chart;\n    chart.coordinate('rect').transpose();\n    return params;\n}\n/**\n * 进度图适配器\n * @param chart\n * @param options\n */\nexport function adaptor(params) {\n    // @ts-ignore\n    return flow(geometry, scale({}), coordinate, animation, theme, annotation())(params);\n}\n//# sourceMappingURL=adaptor.js.map","import { __extends } from \"tslib\";\nimport { Plot } from '../../core/plot';\nimport { adaptor } from './adaptor';\nimport { DEFAULT_OPTIONS } from './constants';\nimport { getProgressData } from './utils';\nvar Progress = /** @class */ (function (_super) {\n    __extends(Progress, _super);\n    function Progress() {\n        var _this = _super !== null && _super.apply(this, arguments) || this;\n        /** 图表类型 */\n        _this.type = 'process';\n        return _this;\n    }\n    /**\n     * 获取 仪表盘 默认配置项\n     * 供外部使用\n     */\n    Progress.getDefaultOptions = function () {\n        return DEFAULT_OPTIONS;\n    };\n    /**\n     * 更新数据\n     * @param percent\n     */\n    Progress.prototype.changeData = function (percent) {\n        this.updateOption({ percent: percent });\n        this.chart.changeData(getProgressData(percent));\n    };\n    Progress.prototype.getDefaultOptions = function () {\n        return Progress.getDefaultOptions();\n    };\n    /**\n     * 获取 进度图 的适配器\n     */\n    Progress.prototype.getSchemaAdaptor = function () {\n        return adaptor;\n    };\n    return Progress;\n}(Plot));\nexport { Progress };\n//# sourceMappingURL=index.js.map","import { __assign } from \"tslib\";\nimport { get, isNil } from '@antv/util';\nimport { animation, annotation, scale, theme } from '../../adaptor/common';\nimport { deepAssign, flow, renderStatistic } from '../../utils';\nimport { geometry } from '../progress/adaptor';\n/**\n * coordinate 配置\n * @param params\n */\nfunction coordinate(params) {\n    var chart = params.chart, options = params.options;\n    var innerRadius = options.innerRadius, radius = options.radius;\n    // coordinate\n    chart.coordinate('theta', {\n        innerRadius: innerRadius,\n        radius: radius,\n    });\n    return params;\n}\n/**\n * statistic 配置\n * @param params\n */\nexport function statistic(params, updated) {\n    var chart = params.chart, options = params.options;\n    var innerRadius = options.innerRadius, statistic = options.statistic, percent = options.percent, meta = options.meta;\n    // 先清空标注，再重新渲染\n    chart.getController('annotation').clear(true);\n    /** 中心文本 指标卡 */\n    if (innerRadius && statistic) {\n        var metaFormatter = get(meta, ['percent', 'formatter']) || (function (v) { return \"\".concat((v * 100).toFixed(2), \"%\"); });\n        var contentOpt = statistic.content;\n        if (contentOpt) {\n            contentOpt = deepAssign({}, contentOpt, {\n                content: !isNil(contentOpt.content) ? contentOpt.content : metaFormatter(percent),\n            });\n        }\n        renderStatistic(chart, { statistic: __assign(__assign({}, statistic), { content: contentOpt }), plotType: 'ring-progress' }, { percent: percent });\n    }\n    if (updated) {\n        chart.render(true);\n    }\n    return params;\n}\n/**\n * 环形进度图适配器\n * @param chart\n * @param options\n */\nexport function adaptor(params) {\n    return flow(geometry, scale({}), coordinate, statistic, animation, theme, annotation())(params);\n}\n//# sourceMappingURL=adaptor.js.map","/**\n * 仪表盘默认配置项\n */\nexport var DEFAULT_OPTIONS = {\n    percent: 0.2,\n    innerRadius: 0.8,\n    radius: 0.98,\n    color: ['#FAAD14', '#E8EDF3'],\n    statistic: {\n        title: false,\n        content: {\n            style: {\n                fontSize: '14px',\n                fontWeight: 300,\n                fill: '#4D4D4D',\n                textAlign: 'center',\n                textBaseline: 'middle',\n            },\n        },\n    },\n    animation: {},\n};\n//# sourceMappingURL=constants.js.map","import { __extends } from \"tslib\";\nimport { Event, VIEW_LIFE_CIRCLE } from '@antv/g2';\nimport { Plot } from '../../core/plot';\nimport { getProgressData } from '../progress/utils';\nimport { adaptor, statistic } from './adaptor';\nimport { DEFAULT_OPTIONS } from './constants';\nvar RingProgress = /** @class */ (function (_super) {\n    __extends(RingProgress, _super);\n    function RingProgress() {\n        var _this = _super !== null && _super.apply(this, arguments) || this;\n        /** 图表类型 */\n        _this.type = 'ring-process';\n        return _this;\n    }\n    /**\n     * 获取默认配置项\n     * 供外部使用\n     */\n    RingProgress.getDefaultOptions = function () {\n        return DEFAULT_OPTIONS;\n    };\n    /**\n     * 更新数据\n     * @param percent\n     */\n    RingProgress.prototype.changeData = function (percent) {\n        this.chart.emit(VIEW_LIFE_CIRCLE.BEFORE_CHANGE_DATA, Event.fromData(this.chart, VIEW_LIFE_CIRCLE.BEFORE_CHANGE_DATA, null));\n        this.updateOption({ percent: percent });\n        this.chart.data(getProgressData(percent));\n        // todo 后续让 G2 层在 afterrender 之后，来重绘 annotations\n        statistic({ chart: this.chart, options: this.options }, true);\n        this.chart.emit(VIEW_LIFE_CIRCLE.AFTER_CHANGE_DATA, Event.fromData(this.chart, VIEW_LIFE_CIRCLE.AFTER_CHANGE_DATA, null));\n    };\n    RingProgress.prototype.getDefaultOptions = function () {\n        return RingProgress.getDefaultOptions();\n    };\n    /**\n     * 获取 环形进度图 的适配器\n     */\n    RingProgress.prototype.getSchemaAdaptor = function () {\n        return adaptor;\n    };\n    return RingProgress;\n}(Plot));\nexport { RingProgress };\n//# sourceMappingURL=index.js.map","// https://github.com/HarryStevens/d3-regression#readme Version 1.3.10. Copyright 2022 Harry Stevens.\nfunction _slicedToArray(arr, i) {\n  return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _nonIterableRest();\n}\n\nfunction _arrayWithHoles(arr) {\n  if (Array.isArray(arr)) return arr;\n}\n\nfunction _iterableToArrayLimit(arr, i) {\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 _nonIterableRest() {\n  throw new TypeError(\"Invalid attempt to destructure non-iterable instance\");\n}\n\n// Adapted from vega-statistics by Jeffrey Heer\n// License: https://github.com/vega/vega/blob/f058b099decad9db78301405dd0d2e9d8ba3d51a/LICENSE\n// Source: https://github.com/vega/vega/blob/f058b099decad9db78301405dd0d2e9d8ba3d51a/packages/vega-statistics/src/regression/points.js\nfunction points(data, x, y, sort) {\n  data = data.filter(function (d, i) {\n    var u = x(d, i),\n        v = y(d, i);\n    return u != null && isFinite(u) && v != null && isFinite(v);\n  });\n\n  if (sort) {\n    data.sort(function (a, b) {\n      return x(a) - x(b);\n    });\n  }\n\n  var n = data.length,\n      X = new Float64Array(n),\n      Y = new Float64Array(n); // extract values, calculate means\n\n  var ux = 0,\n      uy = 0,\n      xv,\n      yv,\n      d;\n\n  for (var i = 0; i < n;) {\n    d = data[i];\n    X[i] = xv = +x(d, i, data);\n    Y[i] = yv = +y(d, i, data);\n    ++i;\n    ux += (xv - ux) / i;\n    uy += (yv - uy) / i;\n  } // mean center the data\n\n\n  for (var _i = 0; _i < n; ++_i) {\n    X[_i] -= ux;\n    Y[_i] -= uy;\n  }\n\n  return [X, Y, ux, uy];\n}\nfunction visitPoints(data, x, y, cb) {\n  var iterations = 0;\n\n  for (var i = 0, n = data.length; i < n; i++) {\n    var d = data[i],\n        dx = +x(d, i, data),\n        dy = +y(d, i, data);\n\n    if (dx != null && isFinite(dx) && dy != null && isFinite(dy)) {\n      cb(dx, dy, iterations++);\n    }\n  }\n}\n\n// return the coefficient of determination, or R squared.\n\nfunction determination(data, x, y, uY, predict) {\n  var SSE = 0,\n      SST = 0;\n  visitPoints(data, x, y, function (dx, dy) {\n    var sse = dy - predict(dx),\n        sst = dy - uY;\n    SSE += sse * sse;\n    SST += sst * sst;\n  });\n  return 1 - SSE / SST;\n}\n\n// Returns the angle of a line in degrees.\nfunction angle(line) {\n  return Math.atan2(line[1][1] - line[0][1], line[1][0] - line[0][0]) * 180 / Math.PI;\n} // Returns the midpoint of a line.\n\nfunction midpoint(line) {\n  return [(line[0][0] + line[1][0]) / 2, (line[0][1] + line[1][1]) / 2];\n}\n\n// returns a smooth line.\n\nfunction interpose(xmin, xmax, predict) {\n  var l = Math.log(xmax - xmin) * Math.LOG10E + 1 | 0;\n  var precision = 1 * Math.pow(10, -l / 2 - 1),\n      maxIter = 1e4;\n  var points = [px(xmin), px(xmax)],\n      iter = 0;\n\n  while (find(points) && iter < maxIter) {\n  }\n\n  return points;\n\n  function px(x) {\n    return [x, predict(x)];\n  }\n\n  function find(points) {\n    iter++;\n    var n = points.length;\n    var found = false;\n\n    for (var i = 0; i < n - 1; i++) {\n      var p0 = points[i],\n          p1 = points[i + 1],\n          m = midpoint([p0, p1]),\n          mp = px(m[0]),\n          a0 = angle([p0, m]),\n          a1 = angle([p0, mp]),\n          a = Math.abs(a0 - a1);\n\n      if (a > precision) {\n        points.splice(i + 1, 0, mp);\n        found = true;\n      }\n    }\n\n    return found;\n  }\n}\n\n// Ordinary Least Squares from vega-statistics by Jeffrey Heer\n// License: https://github.com/vega/vega/blob/f058b099decad9db78301405dd0d2e9d8ba3d51a/LICENSE\n// Source: https://github.com/vega/vega/blob/f058b099decad9db78301405dd0d2e9d8ba3d51a/packages/vega-statistics/src/regression/ols.js\nfunction ols(uX, uY, uXY, uX2) {\n  var delta = uX2 - uX * uX,\n      slope = Math.abs(delta) < 1e-24 ? 0 : (uXY - uX * uY) / delta,\n      intercept = uY - slope * uX;\n  return [intercept, slope];\n}\n\nfunction exponential () {\n  var x = function x(d) {\n    return d[0];\n  },\n      y = function y(d) {\n    return d[1];\n  },\n      domain;\n\n  function exponential(data) {\n    var n = 0,\n        Y = 0,\n        YL = 0,\n        XY = 0,\n        XYL = 0,\n        X2Y = 0,\n        xmin = domain ? +domain[0] : Infinity,\n        xmax = domain ? +domain[1] : -Infinity;\n    visitPoints(data, x, y, function (dx, dy) {\n      var ly = Math.log(dy),\n          xy = dx * dy;\n      ++n;\n      Y += (dy - Y) / n;\n      XY += (xy - XY) / n;\n      X2Y += (dx * xy - X2Y) / n;\n      YL += (dy * ly - YL) / n;\n      XYL += (xy * ly - XYL) / n;\n\n      if (!domain) {\n        if (dx < xmin) xmin = dx;\n        if (dx > xmax) xmax = dx;\n      }\n    });\n\n    var _ols = ols(XY / Y, YL / Y, XYL / Y, X2Y / Y),\n        _ols2 = _slicedToArray(_ols, 2),\n        a = _ols2[0],\n        b = _ols2[1];\n\n    a = Math.exp(a);\n\n    var fn = function fn(x) {\n      return a * Math.exp(b * x);\n    },\n        out = interpose(xmin, xmax, fn);\n\n    out.a = a;\n    out.b = b;\n    out.predict = fn;\n    out.rSquared = determination(data, x, y, Y, fn);\n    return out;\n  }\n\n  exponential.domain = function (arr) {\n    return arguments.length ? (domain = arr, exponential) : domain;\n  };\n\n  exponential.x = function (fn) {\n    return arguments.length ? (x = fn, exponential) : x;\n  };\n\n  exponential.y = function (fn) {\n    return arguments.length ? (y = fn, exponential) : y;\n  };\n\n  return exponential;\n}\n\nfunction linear () {\n  var x = function x(d) {\n    return d[0];\n  },\n      y = function y(d) {\n    return d[1];\n  },\n      domain;\n\n  function linear(data) {\n    var n = 0,\n        X = 0,\n        // sum of x\n    Y = 0,\n        // sum of y\n    XY = 0,\n        // sum of x * y\n    X2 = 0,\n        // sum of x * x\n    xmin = domain ? +domain[0] : Infinity,\n        xmax = domain ? +domain[1] : -Infinity;\n    visitPoints(data, x, y, function (dx, dy) {\n      ++n;\n      X += (dx - X) / n;\n      Y += (dy - Y) / n;\n      XY += (dx * dy - XY) / n;\n      X2 += (dx * dx - X2) / n;\n\n      if (!domain) {\n        if (dx < xmin) xmin = dx;\n        if (dx > xmax) xmax = dx;\n      }\n    });\n\n    var _ols = ols(X, Y, XY, X2),\n        _ols2 = _slicedToArray(_ols, 2),\n        intercept = _ols2[0],\n        slope = _ols2[1],\n        fn = function fn(x) {\n      return slope * x + intercept;\n    },\n        out = [[xmin, fn(xmin)], [xmax, fn(xmax)]];\n\n    out.a = slope;\n    out.b = intercept;\n    out.predict = fn;\n    out.rSquared = determination(data, x, y, Y, fn);\n    return out;\n  }\n\n  linear.domain = function (arr) {\n    return arguments.length ? (domain = arr, linear) : domain;\n  };\n\n  linear.x = function (fn) {\n    return arguments.length ? (x = fn, linear) : x;\n  };\n\n  linear.y = function (fn) {\n    return arguments.length ? (y = fn, linear) : y;\n  };\n\n  return linear;\n}\n\n// Returns the medium value of an array of numbers.\nfunction median(arr) {\n  arr.sort(function (a, b) {\n    return a - b;\n  });\n  var i = arr.length / 2;\n  return i % 1 === 0 ? (arr[i - 1] + arr[i]) / 2 : arr[Math.floor(i)];\n}\n\nvar maxiters = 2,\n    epsilon = 1e-12;\nfunction loess () {\n  var x = function x(d) {\n    return d[0];\n  },\n      y = function y(d) {\n    return d[1];\n  },\n      bandwidth = .3;\n\n  function loess(data) {\n    var _points = points(data, x, y, true),\n        _points2 = _slicedToArray(_points, 4),\n        xv = _points2[0],\n        yv = _points2[1],\n        ux = _points2[2],\n        uy = _points2[3],\n        n = xv.length,\n        bw = Math.max(2, ~~(bandwidth * n)),\n        yhat = new Float64Array(n),\n        residuals = new Float64Array(n),\n        robustWeights = new Float64Array(n).fill(1);\n\n    for (var iter = -1; ++iter <= maxiters;) {\n      var interval = [0, bw - 1];\n\n      for (var i = 0; i < n; ++i) {\n        var dx = xv[i],\n            i0 = interval[0],\n            i1 = interval[1],\n            edge = dx - xv[i0] > xv[i1] - dx ? i0 : i1;\n        var W = 0,\n            X = 0,\n            Y = 0,\n            XY = 0,\n            X2 = 0,\n            denom = 1 / Math.abs(xv[edge] - dx || 1); // Avoid singularity\n\n        for (var k = i0; k <= i1; ++k) {\n          var xk = xv[k],\n              yk = yv[k],\n              w = tricube(Math.abs(dx - xk) * denom) * robustWeights[k],\n              xkw = xk * w;\n          W += w;\n          X += xkw;\n          Y += yk * w;\n          XY += yk * xkw;\n          X2 += xk * xkw;\n        } // Linear regression fit\n\n\n        var _ols = ols(X / W, Y / W, XY / W, X2 / W),\n            _ols2 = _slicedToArray(_ols, 2),\n            a = _ols2[0],\n            b = _ols2[1];\n\n        yhat[i] = a + b * dx;\n        residuals[i] = Math.abs(yv[i] - yhat[i]);\n        updateInterval(xv, i + 1, interval);\n      }\n\n      if (iter === maxiters) {\n        break;\n      }\n\n      var medianResidual = median(residuals);\n      if (Math.abs(medianResidual) < epsilon) break;\n\n      for (var _i = 0, arg, _w; _i < n; ++_i) {\n        arg = residuals[_i] / (6 * medianResidual); // Default to epsilon (rather than zero) for large deviations\n        // Keeping weights tiny but non-zero prevents singularites\n\n        robustWeights[_i] = arg >= 1 ? epsilon : (_w = 1 - arg * arg) * _w;\n      }\n    }\n\n    return output(xv, yhat, ux, uy);\n  }\n\n  loess.bandwidth = function (bw) {\n    return arguments.length ? (bandwidth = bw, loess) : bandwidth;\n  };\n\n  loess.x = function (fn) {\n    return arguments.length ? (x = fn, loess) : x;\n  };\n\n  loess.y = function (fn) {\n    return arguments.length ? (y = fn, loess) : y;\n  };\n\n  return loess;\n} // Weighting kernel for local regression\n\nfunction tricube(x) {\n  return (x = 1 - x * x * x) * x * x;\n} // Advance sliding window interval of nearest neighbors\n\n\nfunction updateInterval(xv, i, interval) {\n  var val = xv[i],\n      left = interval[0],\n      right = interval[1] + 1;\n  if (right >= xv.length) return; // Step right if distance to new right edge is <= distance to old left edge\n  // Step when distance is equal to ensure movement over duplicate x values\n\n  while (i > left && xv[right] - val <= val - xv[left]) {\n    interval[0] = ++left;\n    interval[1] = right;\n    ++right;\n  }\n} // Generate smoothed output points\n// Average points with repeated x values\n\n\nfunction output(xv, yhat, ux, uy) {\n  var n = xv.length,\n      out = [];\n  var i = 0,\n      cnt = 0,\n      prev = [],\n      v;\n\n  for (; i < n; ++i) {\n    v = xv[i] + ux;\n\n    if (prev[0] === v) {\n      // Average output values via online update\n      prev[1] += (yhat[i] - prev[1]) / ++cnt;\n    } else {\n      // Add new output point\n      cnt = 0;\n      prev[1] += uy;\n      prev = [v, yhat[i]];\n      out.push(prev);\n    }\n  }\n\n  prev[1] += uy;\n  return out;\n}\n\nfunction logarithmic () {\n  var x = function x(d) {\n    return d[0];\n  },\n      y = function y(d) {\n    return d[1];\n  },\n      base = Math.E,\n      domain;\n\n  function logarithmic(data) {\n    var n = 0,\n        X = 0,\n        Y = 0,\n        XY = 0,\n        X2 = 0,\n        xmin = domain ? +domain[0] : Infinity,\n        xmax = domain ? +domain[1] : -Infinity,\n        lb = Math.log(base);\n    visitPoints(data, x, y, function (dx, dy) {\n      var lx = Math.log(dx) / lb;\n      ++n;\n      X += (lx - X) / n;\n      Y += (dy - Y) / n;\n      XY += (lx * dy - XY) / n;\n      X2 += (lx * lx - X2) / n;\n\n      if (!domain) {\n        if (dx < xmin) xmin = dx;\n        if (dx > xmax) xmax = dx;\n      }\n    });\n\n    var _ols = ols(X, Y, XY, X2),\n        _ols2 = _slicedToArray(_ols, 2),\n        intercept = _ols2[0],\n        slope = _ols2[1],\n        fn = function fn(x) {\n      return slope * Math.log(x) / lb + intercept;\n    },\n        out = interpose(xmin, xmax, fn);\n\n    out.a = slope;\n    out.b = intercept;\n    out.predict = fn;\n    out.rSquared = determination(data, x, y, Y, fn);\n    return out;\n  }\n\n  logarithmic.domain = function (arr) {\n    return arguments.length ? (domain = arr, logarithmic) : domain;\n  };\n\n  logarithmic.x = function (fn) {\n    return arguments.length ? (x = fn, logarithmic) : x;\n  };\n\n  logarithmic.y = function (fn) {\n    return arguments.length ? (y = fn, logarithmic) : y;\n  };\n\n  logarithmic.base = function (n) {\n    return arguments.length ? (base = n, logarithmic) : base;\n  };\n\n  return logarithmic;\n}\n\nfunction quad () {\n  var x = function x(d) {\n    return d[0];\n  },\n      y = function y(d) {\n    return d[1];\n  },\n      domain;\n\n  function quadratic(data) {\n    var _points = points(data, x, y),\n        _points2 = _slicedToArray(_points, 4),\n        xv = _points2[0],\n        yv = _points2[1],\n        ux = _points2[2],\n        uy = _points2[3],\n        n = xv.length;\n\n    var X2 = 0,\n        X3 = 0,\n        X4 = 0,\n        XY = 0,\n        X2Y = 0,\n        i,\n        dx,\n        dy,\n        x2;\n\n    for (i = 0; i < n;) {\n      dx = xv[i];\n      dy = yv[i++];\n      x2 = dx * dx;\n      X2 += (x2 - X2) / i;\n      X3 += (x2 * dx - X3) / i;\n      X4 += (x2 * x2 - X4) / i;\n      XY += (dx * dy - XY) / i;\n      X2Y += (x2 * dy - X2Y) / i;\n    }\n\n    var Y = 0,\n        n0 = 0,\n        xmin = domain ? +domain[0] : Infinity,\n        xmax = domain ? +domain[1] : -Infinity;\n    visitPoints(data, x, y, function (dx, dy) {\n      n0++;\n      Y += (dy - Y) / n0;\n\n      if (!domain) {\n        if (dx < xmin) xmin = dx;\n        if (dx > xmax) xmax = dx;\n      }\n    });\n\n    var X2X2 = X4 - X2 * X2,\n        d = X2 * X2X2 - X3 * X3,\n        a = (X2Y * X2 - XY * X3) / d,\n        b = (XY * X2X2 - X2Y * X3) / d,\n        c = -a * X2,\n        fn = function fn(x) {\n      x = x - ux;\n      return a * x * x + b * x + c + uy;\n    };\n\n    var out = interpose(xmin, xmax, fn);\n    out.a = a;\n    out.b = b - 2 * a * ux;\n    out.c = c - b * ux + a * ux * ux + uy;\n    out.predict = fn;\n    out.rSquared = determination(data, x, y, Y, fn);\n    return out;\n  }\n\n  quadratic.domain = function (arr) {\n    return arguments.length ? (domain = arr, quadratic) : domain;\n  };\n\n  quadratic.x = function (fn) {\n    return arguments.length ? (x = fn, quadratic) : x;\n  };\n\n  quadratic.y = function (fn) {\n    return arguments.length ? (y = fn, quadratic) : y;\n  };\n\n  return quadratic;\n}\n\n// Source: https://github.com/Tom-Alexander/regression-js/blob/master/src/regression.js#L246\n// License: https://github.com/Tom-Alexander/regression-js/blob/master/LICENSE\n// ...with ideas from vega-statistics by Jeffrey Heer\n// Source: https://github.com/vega/vega/blob/f21cb8792b4e0cbe2b1a3fd44b0f5db370dbaadb/packages/vega-statistics/src/regression/poly.js\n// License: https://github.com/vega/vega/blob/f058b099decad9db78301405dd0d2e9d8ba3d51a/LICENSE\n\nfunction polynomial () {\n  var x = function x(d) {\n    return d[0];\n  },\n      y = function y(d) {\n    return d[1];\n  },\n      order = 3,\n      domain;\n\n  function polynomial(data) {\n    // Use more efficient methods for lower orders\n    if (order === 1) {\n      var o = linear().x(x).y(y).domain(domain)(data);\n      o.coefficients = [o.b, o.a];\n      delete o.a;\n      delete o.b;\n      return o;\n    }\n\n    if (order === 2) {\n      var _o = quad().x(x).y(y).domain(domain)(data);\n\n      _o.coefficients = [_o.c, _o.b, _o.a];\n      delete _o.a;\n      delete _o.b;\n      delete _o.c;\n      return _o;\n    }\n\n    var _points = points(data, x, y),\n        _points2 = _slicedToArray(_points, 4),\n        xv = _points2[0],\n        yv = _points2[1],\n        ux = _points2[2],\n        uy = _points2[3],\n        n = xv.length,\n        lhs = [],\n        rhs = [],\n        k = order + 1;\n\n    var Y = 0,\n        n0 = 0,\n        xmin = domain ? +domain[0] : Infinity,\n        xmax = domain ? +domain[1] : -Infinity;\n    visitPoints(data, x, y, function (dx, dy) {\n      ++n0;\n      Y += (dy - Y) / n0;\n\n      if (!domain) {\n        if (dx < xmin) xmin = dx;\n        if (dx > xmax) xmax = dx;\n      }\n    });\n    var i, j, l, v, c;\n\n    for (i = 0; i < k; ++i) {\n      for (l = 0, v = 0; l < n; ++l) {\n        v += Math.pow(xv[l], i) * yv[l];\n      }\n\n      lhs.push(v);\n      c = new Float64Array(k);\n\n      for (j = 0; j < k; ++j) {\n        for (l = 0, v = 0; l < n; ++l) {\n          v += Math.pow(xv[l], i + j);\n        }\n\n        c[j] = v;\n      }\n\n      rhs.push(c);\n    }\n\n    rhs.push(lhs);\n\n    var coef = gaussianElimination(rhs),\n        fn = function fn(x) {\n      x -= ux;\n      var y = uy + coef[0] + coef[1] * x + coef[2] * x * x;\n\n      for (i = 3; i < k; ++i) {\n        y += coef[i] * Math.pow(x, i);\n      }\n\n      return y;\n    },\n        out = interpose(xmin, xmax, fn);\n\n    out.coefficients = uncenter(k, coef, -ux, uy);\n    out.predict = fn;\n    out.rSquared = determination(data, x, y, Y, fn);\n    return out;\n  }\n\n  polynomial.domain = function (arr) {\n    return arguments.length ? (domain = arr, polynomial) : domain;\n  };\n\n  polynomial.x = function (fn) {\n    return arguments.length ? (x = fn, polynomial) : x;\n  };\n\n  polynomial.y = function (fn) {\n    return arguments.length ? (y = fn, polynomial) : y;\n  };\n\n  polynomial.order = function (n) {\n    return arguments.length ? (order = n, polynomial) : order;\n  };\n\n  return polynomial;\n}\n\nfunction uncenter(k, a, x, y) {\n  var z = Array(k);\n  var i, j, v, c; // initialize to zero\n\n  for (i = 0; i < k; ++i) {\n    z[i] = 0;\n  } // polynomial expansion\n\n\n  for (i = k - 1; i >= 0; --i) {\n    v = a[i];\n    c = 1;\n    z[i] += v;\n\n    for (j = 1; j <= i; ++j) {\n      c *= (i + 1 - j) / j; // binomial coefficent\n\n      z[i - j] += v * Math.pow(x, j) * c;\n    }\n  } // bias term\n\n\n  z[0] += y;\n  return z;\n} // Given an array for a two-dimensional matrix and the polynomial order,\n// solve A * x = b using Gaussian elimination.\n\n\nfunction gaussianElimination(matrix) {\n  var n = matrix.length - 1,\n      coef = [];\n  var i, j, k, r, t;\n\n  for (i = 0; i < n; ++i) {\n    r = i; // max row\n\n    for (j = i + 1; j < n; ++j) {\n      if (Math.abs(matrix[i][j]) > Math.abs(matrix[i][r])) {\n        r = j;\n      }\n    }\n\n    for (k = i; k < n + 1; ++k) {\n      t = matrix[k][i];\n      matrix[k][i] = matrix[k][r];\n      matrix[k][r] = t;\n    }\n\n    for (j = i + 1; j < n; ++j) {\n      for (k = n; k >= i; k--) {\n        matrix[k][j] -= matrix[k][i] * matrix[i][j] / matrix[i][i];\n      }\n    }\n  }\n\n  for (j = n - 1; j >= 0; --j) {\n    t = 0;\n\n    for (k = j + 1; k < n; ++k) {\n      t += matrix[k][j] * coef[k];\n    }\n\n    coef[j] = (matrix[n][j] - t) / matrix[j][j];\n  }\n\n  return coef;\n}\n\nfunction power () {\n  var x = function x(d) {\n    return d[0];\n  },\n      y = function y(d) {\n    return d[1];\n  },\n      domain;\n\n  function power(data) {\n    var n = 0,\n        X = 0,\n        Y = 0,\n        XY = 0,\n        X2 = 0,\n        YS = 0,\n        xmin = domain ? +domain[0] : Infinity,\n        xmax = domain ? +domain[1] : -Infinity;\n    visitPoints(data, x, y, function (dx, dy) {\n      var lx = Math.log(dx),\n          ly = Math.log(dy);\n      ++n;\n      X += (lx - X) / n;\n      Y += (ly - Y) / n;\n      XY += (lx * ly - XY) / n;\n      X2 += (lx * lx - X2) / n;\n      YS += (dy - YS) / n;\n\n      if (!domain) {\n        if (dx < xmin) xmin = dx;\n        if (dx > xmax) xmax = dx;\n      }\n    });\n\n    var _ols = ols(X, Y, XY, X2),\n        _ols2 = _slicedToArray(_ols, 2),\n        a = _ols2[0],\n        b = _ols2[1];\n\n    a = Math.exp(a);\n\n    var fn = function fn(x) {\n      return a * Math.pow(x, b);\n    },\n        out = interpose(xmin, xmax, fn);\n\n    out.a = a;\n    out.b = b;\n    out.predict = fn;\n    out.rSquared = determination(data, x, y, YS, fn);\n    return out;\n  }\n\n  power.domain = function (arr) {\n    return arguments.length ? (domain = arr, power) : domain;\n  };\n\n  power.x = function (fn) {\n    return arguments.length ? (x = fn, power) : x;\n  };\n\n  power.y = function (fn) {\n    return arguments.length ? (y = fn, power) : y;\n  };\n\n  return power;\n}\n\nexport { exponential as regressionExp, linear as regressionLinear, loess as regressionLoess, logarithmic as regressionLog, polynomial as regressionPoly, power as regressionPow, quad as regressionQuad };\n","import { __assign } from \"tslib\";\nimport { get, isArray, isNumber } from '@antv/util';\nimport { regressionExp, regressionLinear, regressionLoess, regressionLog, regressionPoly, regressionPow, regressionQuad, } from 'd3-regression';\nimport { getSplinePath } from '../../utils';\nvar REGRESSION_MAP = {\n    exp: regressionExp,\n    linear: regressionLinear,\n    loess: regressionLoess,\n    log: regressionLog,\n    poly: regressionPoly,\n    pow: regressionPow,\n    quad: regressionQuad,\n};\n/**\n * 获取四象限默认配置\n * @param {number} xBaseline\n * @param {number} yBaseline\n */\nexport function getQuadrantDefaultConfig(xBaseline, yBaseline) {\n    // 文本便宜距离\n    var textOffset = 10;\n    // 四象限默认样式\n    var defaultConfig = {\n        regionStyle: [\n            {\n                position: {\n                    start: [xBaseline, 'max'],\n                    end: ['max', yBaseline],\n                },\n                style: {\n                    fill: '#d8d0c0',\n                    opacity: 0.4,\n                },\n            },\n            {\n                position: {\n                    start: ['min', 'max'],\n                    end: [xBaseline, yBaseline],\n                },\n                style: {\n                    fill: '#a3dda1',\n                    opacity: 0.4,\n                },\n            },\n            {\n                position: {\n                    start: ['min', yBaseline],\n                    end: [xBaseline, 'min'],\n                },\n                style: {\n                    fill: '#d8d0c0',\n                    opacity: 0.4,\n                },\n            },\n            {\n                position: {\n                    start: [xBaseline, yBaseline],\n                    end: ['max', 'min'],\n                },\n                style: {\n                    fill: '#a3dda1',\n                    opacity: 0.4,\n                },\n            },\n        ],\n        lineStyle: {\n            stroke: '#9ba29a',\n            lineWidth: 1,\n        },\n        labelStyle: [\n            {\n                position: ['max', yBaseline],\n                offsetX: -textOffset,\n                offsetY: -textOffset,\n                style: {\n                    textAlign: 'right',\n                    textBaseline: 'bottom',\n                    fontSize: 14,\n                    fill: '#ccc',\n                },\n            },\n            {\n                position: ['min', yBaseline],\n                offsetX: textOffset,\n                offsetY: -textOffset,\n                style: {\n                    textAlign: 'left',\n                    textBaseline: 'bottom',\n                    fontSize: 14,\n                    fill: '#ccc',\n                },\n            },\n            {\n                position: ['min', yBaseline],\n                offsetX: textOffset,\n                offsetY: textOffset,\n                style: {\n                    textAlign: 'left',\n                    textBaseline: 'top',\n                    fontSize: 14,\n                    fill: '#ccc',\n                },\n            },\n            {\n                position: ['max', yBaseline],\n                offsetX: -textOffset,\n                offsetY: textOffset,\n                style: {\n                    textAlign: 'right',\n                    textBaseline: 'top',\n                    fontSize: 14,\n                    fill: '#ccc',\n                },\n            },\n        ],\n    };\n    return defaultConfig;\n}\nvar splinePath = function (data, config) {\n    var view = config.view, _a = config.options, xField = _a.xField, yField = _a.yField;\n    var xScaleView = view.getScaleByField(xField);\n    var yScaleView = view.getScaleByField(yField);\n    var pathData = data.map(function (d) {\n        return view.getCoordinate().convert({ x: xScaleView.scale(d[0]), y: yScaleView.scale(d[1]) });\n    });\n    return getSplinePath(pathData, false);\n};\nexport var getPath = function (config) {\n    var options = config.options;\n    var xField = options.xField, yField = options.yField, data = options.data, regressionLine = options.regressionLine;\n    var _a = regressionLine.type, type = _a === void 0 ? 'linear' : _a, algorithm = regressionLine.algorithm, customEquation = regressionLine.equation;\n    var pathData;\n    var equation = null;\n    if (algorithm) {\n        pathData = isArray(algorithm) ? algorithm : algorithm(data);\n        equation = customEquation;\n    }\n    else {\n        var reg = REGRESSION_MAP[type]()\n            .x(function (d) { return d[xField]; })\n            .y(function (d) { return d[yField]; });\n        pathData = reg(data);\n        equation = getRegressionEquation(type, pathData);\n    }\n    return [splinePath(pathData, config), equation];\n};\n/**\n * 调整散点图 meta: { min, max } ① data.length === 1 ② 所有数据 y 值相等 ③ 所有数据 x 值相等\n * @param options\n * @returns\n */\nexport var getMeta = function (options) {\n    var _a;\n    var _b = options.meta, meta = _b === void 0 ? {} : _b, xField = options.xField, yField = options.yField, data = options.data;\n    var xFieldValue = data[0][xField];\n    var yFieldValue = data[0][yField];\n    var xIsPositiveNumber = xFieldValue > 0;\n    var yIsPositiveNumber = yFieldValue > 0;\n    /**\n     * 获得对应字段的 min max scale 配置\n     */\n    function getMetaMinMax(field, axis) {\n        var fieldMeta = get(meta, [field]);\n        function getCustomValue(type) {\n            return get(fieldMeta, type);\n        }\n        var range = {};\n        if (axis === 'x') {\n            if (isNumber(xFieldValue)) {\n                if (!isNumber(getCustomValue('min'))) {\n                    range['min'] = xIsPositiveNumber ? 0 : xFieldValue * 2;\n                }\n                if (!isNumber(getCustomValue('max'))) {\n                    range['max'] = xIsPositiveNumber ? xFieldValue * 2 : 0;\n                }\n            }\n            return range;\n        }\n        if (isNumber(yFieldValue)) {\n            if (!isNumber(getCustomValue('min'))) {\n                range['min'] = yIsPositiveNumber ? 0 : yFieldValue * 2;\n            }\n            if (!isNumber(getCustomValue('max'))) {\n                range['max'] = yIsPositiveNumber ? yFieldValue * 2 : 0;\n            }\n        }\n        return range;\n    }\n    return __assign(__assign({}, meta), (_a = {}, _a[xField] = __assign(__assign({}, meta[xField]), getMetaMinMax(xField, 'x')), _a[yField] = __assign(__assign({}, meta[yField]), getMetaMinMax(yField, 'y')), _a));\n};\n/**\n * 获取回归函数表达式\n * @param {string} type - 回归函数类型\n * @param {D3RegressionResult} res - 回归计算结果集\n * @return {string}\n */\nexport function getRegressionEquation(type, res) {\n    var _a, _b, _c;\n    var roundByPrecision = function (n, p) {\n        if (p === void 0) { p = 4; }\n        return Math.round(n * Math.pow(10, p)) / Math.pow(10, p);\n    };\n    var safeFormat = function (value) { return (Number.isFinite(value) ? roundByPrecision(value) : '?'); };\n    switch (type) {\n        case 'linear':\n            // y = ax + b\n            return \"y = \".concat(safeFormat(res.a), \"x + \").concat(safeFormat(res.b), \", R^2 = \").concat(safeFormat(res.rSquared));\n        case 'exp':\n            // y = ae^(bx)\n            return \"y = \".concat(safeFormat(res.a), \"e^(\").concat(safeFormat(res.b), \"x), R^2 = \").concat(safeFormat(res.rSquared));\n        case 'log':\n            // y = a · ln(x) + b\n            return \"y = \".concat(safeFormat(res.a), \"ln(x) + \").concat(safeFormat(res.b), \", R^2 = \").concat(safeFormat(res.rSquared));\n        case 'quad':\n            // y = ax^2 + bx + c\n            return \"y = \".concat(safeFormat(res.a), \"x^2 + \").concat(safeFormat(res.b), \"x + \").concat(safeFormat(res.c), \", R^2 = \").concat(safeFormat(res.rSquared));\n        case 'poly':\n            // y = anx^n + ... + a1x + a0\n            // eslint-disable-next-line no-case-declarations\n            var temp = \"y = \".concat(safeFormat((_a = res.coefficients) === null || _a === void 0 ? void 0 : _a[0]), \" + \").concat(safeFormat((_b = res.coefficients) === null || _b === void 0 ? void 0 : _b[1]), \"x + \").concat(safeFormat((_c = res.coefficients) === null || _c === void 0 ? void 0 : _c[2]), \"x^2\");\n            for (var i = 3; i < res.coefficients.length; ++i) {\n                temp += \" + \".concat(safeFormat(res.coefficients[i]), \"x^\").concat(i);\n            }\n            return \"\".concat(temp, \", R^2 = \").concat(safeFormat(res.rSquared));\n        case 'pow':\n            // y = ax^b\n            return \"y = \".concat(safeFormat(res.a), \"x^\").concat(safeFormat(res.b), \", R^2 = \").concat(safeFormat(res.rSquared));\n    }\n    return null;\n}\n//# sourceMappingURL=util.js.map","import { __assign, __rest } from \"tslib\";\nimport { isNumber } from '@antv/util';\nimport { brushInteraction } from '../../adaptor/brush';\nimport { animation, annotation, interaction, scale, scrollbar, slider, theme } from '../../adaptor/common';\nimport { point } from '../../adaptor/geometries';\nimport { deepAssign, findGeometry, flow, pick, transformLabel } from '../../utils';\nimport { getMeta, getPath, getQuadrantDefaultConfig } from './util';\n/**\n * 散点图默认美观\n * ① data.length === 1 ② 所有数据 y 值相等 ③ 所有数据 x 值相等\n * @param params\n * @returns params\n */\nexport function transformOptions(options) {\n    var _a = options.data, data = _a === void 0 ? [] : _a, xField = options.xField, yField = options.yField;\n    if (data.length) {\n        // x y 字段知否只有一个值，如果只有一个值，则进行优化\n        var isOneX = true;\n        var isOneY = true;\n        var prev = data[0];\n        var curr = void 0;\n        for (var i = 1; i < data.length; i++) {\n            curr = data[i];\n            if (prev[xField] !== curr[xField]) {\n                isOneX = false;\n            }\n            if (prev[yField] !== curr[yField]) {\n                isOneY = false;\n            }\n            // 如果都不是 oneValue，那么可提前跳出循环\n            if (!isOneX && !isOneY) {\n                break;\n            }\n            prev = curr;\n        }\n        var keys = [];\n        isOneX && keys.push(xField);\n        isOneY && keys.push(yField);\n        var meta_1 = pick(getMeta(options), keys);\n        return deepAssign({}, options, { meta: meta_1 });\n    }\n    return options;\n}\n/**\n * 字段\n * @param params\n */\nfunction geometry(params) {\n    var chart = params.chart, options = params.options;\n    var data = options.data, type = options.type, color = options.color, shape = options.shape, pointStyle = options.pointStyle, shapeField = options.shapeField, colorField = options.colorField, xField = options.xField, yField = options.yField, sizeField = options.sizeField;\n    var size = options.size;\n    var tooltip = options.tooltip;\n    if (sizeField) {\n        if (!size) {\n            size = [2, 8];\n        }\n        if (isNumber(size)) {\n            size = [size, size];\n        }\n    }\n    if (tooltip && !tooltip.fields) {\n        tooltip = __assign(__assign({}, tooltip), { fields: [xField, yField, colorField, sizeField, shapeField] });\n    }\n    // 数据\n    chart.data(data);\n    // geometry\n    point(deepAssign({}, params, {\n        options: {\n            seriesField: colorField,\n            point: {\n                color: color,\n                shape: shape,\n                size: size,\n                style: pointStyle,\n            },\n            tooltip: tooltip,\n        },\n    }));\n    var geometry = findGeometry(chart, 'point');\n    // 数据调整\n    if (type) {\n        geometry.adjust(type);\n    }\n    return params;\n}\n/**\n * meta 配置\n * @param params\n */\nexport function meta(params) {\n    var _a;\n    var options = params.options;\n    var xAxis = options.xAxis, yAxis = options.yAxis, xField = options.xField, yField = options.yField;\n    var newOptions = transformOptions(options);\n    return flow(scale((_a = {},\n        _a[xField] = xAxis,\n        _a[yField] = yAxis,\n        _a)))(deepAssign({}, params, { options: newOptions }));\n}\n/**\n * axis 配置\n * @param params\n */\nfunction axis(params) {\n    var chart = params.chart, options = params.options;\n    var xAxis = options.xAxis, yAxis = options.yAxis, xField = options.xField, yField = options.yField;\n    chart.axis(xField, xAxis);\n    chart.axis(yField, yAxis);\n    return params;\n}\n/**\n * legend 配置\n * @param params\n */\nfunction legend(params) {\n    var chart = params.chart, options = params.options;\n    var legend = options.legend, colorField = options.colorField, shapeField = options.shapeField, sizeField = options.sizeField, shapeLegend = options.shapeLegend, sizeLegend = options.sizeLegend;\n    /** legend 不为 false, 则展示图例, 优先展示 color 分类图例 */\n    var showLegend = legend !== false;\n    if (colorField) {\n        chart.legend(colorField, showLegend ? legend : false);\n    }\n    // 优先取 shapeLegend, 否则取 legend\n    if (shapeField) {\n        if (shapeLegend) {\n            chart.legend(shapeField, shapeLegend);\n        }\n        else {\n            chart.legend(shapeField, shapeLegend === false ? false : legend);\n        }\n    }\n    if (sizeField) {\n        chart.legend(sizeField, sizeLegend ? sizeLegend : false);\n    }\n    /** 默认不展示 shape 图例，当 shapeLegend 为 undefined 也不展示图例 */\n    /** 默认没有 sizeField，则隐藏连续图例 */\n    if (!showLegend && !shapeLegend && !sizeLegend) {\n        chart.legend(false);\n    }\n    return params;\n}\n/**\n * 数据标签\n * @param params\n */\nfunction label(params) {\n    var chart = params.chart, options = params.options;\n    var label = options.label, yField = options.yField;\n    var scatterGeometry = findGeometry(chart, 'point');\n    // label 为 false, 空 则不显示 label\n    if (!label) {\n        scatterGeometry.label(false);\n    }\n    else {\n        var callback = label.callback, cfg = __rest(label, [\"callback\"]);\n        scatterGeometry.label({\n            fields: [yField],\n            callback: callback,\n            cfg: transformLabel(cfg),\n        });\n    }\n    return params;\n}\n/**\n * annotation 配置\n * - 特殊 annotation: quadrant(四象限)\n * @param params\n */\nfunction scatterAnnotation(params) {\n    var options = params.options;\n    var quadrant = options.quadrant;\n    var annotationOptions = [];\n    if (quadrant) {\n        var _a = quadrant.xBaseline, xBaseline = _a === void 0 ? 0 : _a, _b = quadrant.yBaseline, yBaseline = _b === void 0 ? 0 : _b, labels_1 = quadrant.labels, regionStyle_1 = quadrant.regionStyle, lineStyle = quadrant.lineStyle;\n        var defaultConfig_1 = getQuadrantDefaultConfig(xBaseline, yBaseline);\n        // 仅支持四象限\n        var quadrants = new Array(4).join(',').split(',');\n        quadrants.forEach(function (_, index) {\n            annotationOptions.push(__assign(__assign({ type: 'region', top: false }, defaultConfig_1.regionStyle[index].position), { style: deepAssign({}, defaultConfig_1.regionStyle[index].style, regionStyle_1 === null || regionStyle_1 === void 0 ? void 0 : regionStyle_1[index]) }), __assign({ type: 'text', top: true }, deepAssign({}, defaultConfig_1.labelStyle[index], labels_1 === null || labels_1 === void 0 ? void 0 : labels_1[index])));\n        });\n        // 生成坐标轴\n        annotationOptions.push({\n            type: 'line',\n            top: false,\n            start: ['min', yBaseline],\n            end: ['max', yBaseline],\n            style: deepAssign({}, defaultConfig_1.lineStyle, lineStyle),\n        }, {\n            type: 'line',\n            top: false,\n            start: [xBaseline, 'min'],\n            end: [xBaseline, 'max'],\n            style: deepAssign({}, defaultConfig_1.lineStyle, lineStyle),\n        });\n    }\n    return flow(annotation(annotationOptions))(params);\n}\n// 趋势线\nfunction regressionLine(params) {\n    var options = params.options, chart = params.chart;\n    var regressionLine = options.regressionLine;\n    if (regressionLine) {\n        var style_1 = regressionLine.style, _a = regressionLine.equationStyle, equationStyle_1 = _a === void 0 ? {} : _a, _b = regressionLine.top, top_1 = _b === void 0 ? false : _b, _c = regressionLine.showEquation, showEquation_1 = _c === void 0 ? false : _c;\n        var defaultStyle_1 = {\n            stroke: '#9ba29a',\n            lineWidth: 2,\n            opacity: 0.5,\n        };\n        var defaulEquationStyle_1 = {\n            x: 20,\n            y: 20,\n            textAlign: 'left',\n            textBaseline: 'middle',\n            fontSize: 14,\n            fillOpacity: 0.5,\n        };\n        chart.annotation().shape({\n            top: top_1,\n            render: function (container, view) {\n                var group = container.addGroup({\n                    id: \"\".concat(chart.id, \"-regression-line\"),\n                    name: 'regression-line-group',\n                });\n                var _a = getPath({\n                    view: view,\n                    options: options,\n                }), path = _a[0], equation = _a[1];\n                group.addShape('path', {\n                    name: 'regression-line',\n                    attrs: __assign(__assign({ path: path }, defaultStyle_1), style_1),\n                });\n                if (showEquation_1) {\n                    group.addShape('text', {\n                        name: 'regression-equation',\n                        attrs: __assign(__assign(__assign({}, defaulEquationStyle_1), equationStyle_1), { text: equation }),\n                    });\n                }\n            },\n        });\n    }\n    return params;\n}\n/**\n * tooltip 配置\n * @param params\n */\nexport function tooltip(params) {\n    var chart = params.chart, options = params.options;\n    var tooltip = options.tooltip;\n    if (tooltip) {\n        chart.tooltip(tooltip);\n    }\n    else if (tooltip === false) {\n        chart.tooltip(false);\n    }\n    return params;\n}\n/**\n * 散点图适配器\n * @param chart\n * @param options\n */\nexport function adaptor(params) {\n    // flow 的方式处理所有的配置到 G2 API\n    return flow(geometry, meta, axis, legend, tooltip, label, \n    // 需要在 interaction 前面\n    brushInteraction, slider, scrollbar, interaction, scatterAnnotation, animation, theme, regressionLine)(params);\n}\n//# sourceMappingURL=adaptor.js.map","import { Plot } from '../../core/plot';\nimport { deepAssign } from '../../utils';\n/**\n * 散点图 默认配置项\n */\nexport var DEFAULT_OPTIONS = deepAssign({}, Plot.getDefaultOptions(), {\n    size: 4,\n    tooltip: {\n        showTitle: false,\n        showMarkers: false,\n        showCrosshairs: true,\n        crosshairs: {\n            type: 'xy',\n        },\n    },\n});\n//# sourceMappingURL=constant.js.map","import { registerInteraction } from '@antv/g2';\nregisterInteraction('drag-move', {\n    start: [{ trigger: 'plot:mousedown', action: 'scale-translate:start' }],\n    processing: [\n        {\n            trigger: 'plot:mousemove',\n            action: 'scale-translate:translate',\n            throttle: { wait: 100, leading: true, trailing: false },\n        },\n    ],\n    end: [{ trigger: 'plot:mouseup', action: 'scale-translate:end' }],\n});\n//# sourceMappingURL=drag-move.js.map","import { __assign, __extends } from \"tslib\";\nimport { BRUSH_FILTER_EVENTS, VIEW_LIFE_CIRCLE } from '@antv/g2';\nimport { Plot } from '../../core/plot';\nimport { deepAssign } from '../../utils';\nimport { adaptor, meta, transformOptions } from './adaptor';\nimport { DEFAULT_OPTIONS } from './constant';\nimport './interactions';\nvar Scatter = /** @class */ (function (_super) {\n    __extends(Scatter, _super);\n    function Scatter(container, options) {\n        var _this = _super.call(this, container, options) || this;\n        /** 图表类型 */\n        _this.type = 'scatter';\n        // 监听 brush 事件，处理 meta\n        _this.on(VIEW_LIFE_CIRCLE.BEFORE_RENDER, function (evt) {\n            var _a, _b;\n            // 运行时，读取 option\n            var _c = _this, options = _c.options, chart = _c.chart;\n            if (((_a = evt.data) === null || _a === void 0 ? void 0 : _a.source) === BRUSH_FILTER_EVENTS.FILTER) {\n                var filteredData = _this.chart.filterData(_this.chart.getData());\n                meta({ chart: chart, options: __assign(__assign({}, options), { data: filteredData }) });\n            }\n            if (((_b = evt.data) === null || _b === void 0 ? void 0 : _b.source) === BRUSH_FILTER_EVENTS.RESET) {\n                meta({ chart: chart, options: options });\n            }\n        });\n        return _this;\n    }\n    /**\n     * 获取 散点图 默认配置项\n     * 供外部使用\n     */\n    Scatter.getDefaultOptions = function () {\n        return DEFAULT_OPTIONS;\n    };\n    /**\n     * @override\n     * @param data\n     */\n    Scatter.prototype.changeData = function (data) {\n        this.updateOption(transformOptions(deepAssign({}, this.options, { data: data })));\n        var _a = this, options = _a.options, chart = _a.chart;\n        meta({ chart: chart, options: options });\n        this.chart.changeData(data);\n    };\n    /**\n     * 获取 散点图 的适配器\n     */\n    Scatter.prototype.getSchemaAdaptor = function () {\n        return adaptor;\n    };\n    Scatter.prototype.getDefaultOptions = function () {\n        return Scatter.getDefaultOptions();\n    };\n    return Scatter;\n}(Plot));\nexport { Scatter };\n//# sourceMappingURL=index.js.map","import { Plot } from '../../core/plot';\nimport { deepAssign } from '../../utils';\nexport var Y_FIELD = '$$stock-range$$';\nexport var TREND_FIELD = 'trend';\nexport var TREND_UP = 'up';\nexport var TREND_DOWN = 'down';\n/** tooltip 配置 */\nexport var DEFAULT_TOOLTIP_OPTIONS = {\n    showMarkers: false,\n    showCrosshairs: true,\n    shared: true,\n    crosshairs: {\n        type: 'xy',\n        follow: true,\n        text: function (type, defaultContent, items) {\n            var textContent;\n            if (type === 'x') {\n                var item = items[0];\n                textContent = item ? item.title : defaultContent;\n            }\n            else {\n                textContent = defaultContent;\n            }\n            return {\n                position: type === 'y' ? 'start' : 'end',\n                content: textContent,\n                style: {\n                    fill: '#dfdfdf',\n                },\n            };\n        },\n        // 自定义 crosshairs textBackground 样式\n        textBackground: {\n            padding: [2, 4],\n            style: {\n                fill: '#666',\n            },\n        },\n    },\n};\n/**\n * 散点图 默认配置项\n */\nexport var DEFAULT_OPTIONS = deepAssign({}, Plot.getDefaultOptions(), {\n    // 设置默认图表 tooltips\n    tooltip: DEFAULT_TOOLTIP_OPTIONS,\n    interactions: [{ type: 'tooltip' }],\n    legend: {\n        position: 'top-left',\n    },\n    risingFill: '#ef5350',\n    fallingFill: '#26a69a',\n});\n//# sourceMappingURL=constant.js.map","import { __assign } from \"tslib\";\nimport { isArray, map } from '@antv/util';\nimport { TREND_DOWN, TREND_FIELD, TREND_UP, Y_FIELD } from './constant';\n/**\n * @desc 股票图数据处理\n * @param data\n * @param yField\n */\nexport function getStockData(data, yField) {\n    return map(data, function (item) {\n        var obj = item && __assign({}, item);\n        if (isArray(yField) && obj) {\n            var open_1 = yField[0], close_1 = yField[1], high = yField[2], low = yField[3];\n            obj[TREND_FIELD] = obj[open_1] <= obj[close_1] ? TREND_UP : TREND_DOWN;\n            obj[Y_FIELD] = [obj[open_1], obj[close_1], obj[high], obj[low]];\n        }\n        return obj;\n    });\n}\n//# sourceMappingURL=utils.js.map","import { animation, annotation, interaction, slider, theme } from '../../adaptor/common';\nimport { schema } from '../../adaptor/geometries';\nimport { AXIS_META_CONFIG_KEYS } from '../../constant';\nimport { deepAssign, flow, pick } from '../../utils';\nimport { TREND_DOWN, TREND_FIELD, TREND_UP, Y_FIELD } from './constant';\nimport { getStockData } from './utils';\n/**\n * 图表配置处理\n * @param params\n */\nfunction geometry(params) {\n    var chart = params.chart, options = params.options;\n    var yField = options.yField;\n    var data = options.data, risingFill = options.risingFill, fallingFill = options.fallingFill, tooltip = options.tooltip, stockStyle = options.stockStyle;\n    chart.data(getStockData(data, yField));\n    var tooltipOptions = tooltip;\n    if (tooltipOptions !== false) {\n        tooltipOptions = deepAssign({}, { fields: yField }, tooltipOptions);\n    }\n    schema(deepAssign({}, params, {\n        options: {\n            schema: {\n                shape: 'candle',\n                color: [risingFill, fallingFill],\n                style: stockStyle,\n            },\n            yField: Y_FIELD,\n            seriesField: TREND_FIELD,\n            rawFields: yField,\n            tooltip: tooltipOptions,\n        },\n    }));\n    return params;\n}\n/**\n * meta 配置\n * @param params\n */\nexport function meta(params) {\n    var _a, _b;\n    var chart = params.chart, options = params.options;\n    var meta = options.meta, xAxis = options.xAxis, yAxis = options.yAxis, xField = options.xField;\n    var baseMeta = (_a = {},\n        _a[xField] = {\n            type: 'timeCat',\n            tickCount: 6,\n        },\n        _a[TREND_FIELD] = {\n            values: [TREND_UP, TREND_DOWN],\n        },\n        _a);\n    var scales = deepAssign(baseMeta, meta, (_b = {},\n        _b[xField] = pick(xAxis, AXIS_META_CONFIG_KEYS),\n        _b[Y_FIELD] = pick(yAxis, AXIS_META_CONFIG_KEYS),\n        _b));\n    chart.scale(scales);\n    return params;\n}\n/**\n * axis 配置\n * @param params\n */\nexport function axis(params) {\n    var chart = params.chart, options = params.options;\n    var xAxis = options.xAxis, yAxis = options.yAxis, xField = options.xField;\n    // 为 false 则是不显示轴\n    if (xAxis === false) {\n        chart.axis(xField, false);\n    }\n    else {\n        chart.axis(xField, xAxis);\n    }\n    if (yAxis === false) {\n        chart.axis(Y_FIELD, false);\n    }\n    else {\n        chart.axis(Y_FIELD, yAxis);\n    }\n    return params;\n}\n/**\n * tooltip 配置\n * @param params\n */\nexport function tooltip(params) {\n    var chart = params.chart, options = params.options;\n    var tooltip = options.tooltip;\n    if (tooltip !== false) {\n        chart.tooltip(tooltip);\n    }\n    else {\n        chart.tooltip(false);\n    }\n    return params;\n}\n/**\n * legend 配置\n * @param params\n */\nexport function legend(params) {\n    var chart = params.chart, options = params.options;\n    var legend = options.legend;\n    if (legend) {\n        chart.legend(TREND_FIELD, legend);\n    }\n    else if (legend === false) {\n        chart.legend(false);\n    }\n    return params;\n}\n/**\n * K线图适配器\n * @param chart\n * @param options\n */\nexport function adaptor(params) {\n    // flow 的方式处理所有的配置到 G2 API\n    flow(theme, geometry, meta, axis, tooltip, legend, interaction, animation, annotation(), slider)(params);\n}\n//# sourceMappingURL=adaptor.js.map","import { __extends } from \"tslib\";\nimport { Plot } from '../../core/plot';\nimport { adaptor } from './adaptor';\nimport { DEFAULT_OPTIONS } from './constant';\nimport { getStockData } from './utils';\nvar Stock = /** @class */ (function (_super) {\n    __extends(Stock, _super);\n    function Stock() {\n        var _this = _super !== null && _super.apply(this, arguments) || this;\n        /** 图表类型 */\n        _this.type = 'stock';\n        return _this;\n    }\n    /**\n     * 获取 散点图 默认配置项\n     * 供外部使用\n     */\n    Stock.getDefaultOptions = function () {\n        return DEFAULT_OPTIONS;\n    };\n    /**\n     * 默认配置\n     *  g2/g2plot默 认 配 置 -->  图 表 默 认 配 置  --> 开 发 者 自 定 义 配 置  --> 最 终 绘 图 配 置\n     */\n    Stock.prototype.getDefaultOptions = function () {\n        return Stock.getDefaultOptions();\n    };\n    /**\n     * 获取 蜡烛图 的适配器\n     */\n    Stock.prototype.getSchemaAdaptor = function () {\n        return adaptor;\n    };\n    /**\n     * @override\n     * @param data\n     */\n    Stock.prototype.changeData = function (data) {\n        this.updateOption({ data: data });\n        var yField = this.options.yField;\n        this.chart.changeData(getStockData(data, yField));\n    };\n    return Stock;\n}(Plot));\nexport { Stock };\n//# sourceMappingURL=index.js.map","import { map } from '@antv/util';\nexport function getTinyData(data) {\n    return map(data || [], function (y, x) { return ({ x: \"\".concat(x), y: y }); });\n}\n//# sourceMappingURL=utils.js.map","import { __assign } from \"tslib\";\nimport { get } from '@antv/util';\nexport var X_FIELD = 'x';\nexport var Y_FIELD = 'y';\nexport var DEFAULT_TOOLTIP_OPTIONS = {\n    showTitle: false,\n    shared: true,\n    showMarkers: false,\n    customContent: function (x, data) { return \"\".concat(get(data, [0, 'data', 'y'], 0)); },\n    containerTpl: '<div class=\"g2-tooltip\"><div class=\"g2-tooltip-list\"></div></div>',\n    itemTpl: '<span>{value}</span>',\n    domStyles: {\n        'g2-tooltip': {\n            padding: '2px 4px',\n            fontSize: '10px',\n        },\n    },\n    showCrosshairs: true,\n    crosshairs: {\n        type: 'x',\n    },\n};\n/**\n * 默认配置项\n */\nexport var DEFAULT_OPTIONS = {\n    appendPadding: 2,\n    tooltip: __assign({}, DEFAULT_TOOLTIP_OPTIONS),\n    animation: {},\n};\n//# sourceMappingURL=constants.js.map","import { animation, annotation, pattern, scale, theme, tooltip } from '../../adaptor/common';\nimport { area, line, point } from '../../adaptor/geometries';\nimport { deepAssign, flow } from '../../utils';\nimport { adjustYMetaByZero } from '../../utils/data';\nimport { X_FIELD, Y_FIELD } from '../tiny-line/constants';\nimport { getTinyData } from '../tiny-line/utils';\n/**\n * 字段\n * @param params\n */\nfunction geometry(params) {\n    var chart = params.chart, options = params.options;\n    var data = options.data, color = options.color, areaStyle = options.areaStyle, pointOptions = options.point, lineOptions = options.line;\n    var pointState = pointOptions === null || pointOptions === void 0 ? void 0 : pointOptions.state;\n    var seriesData = getTinyData(data);\n    chart.data(seriesData);\n    var primary = deepAssign({}, params, {\n        options: {\n            xField: X_FIELD,\n            yField: Y_FIELD,\n            area: { color: color, style: areaStyle },\n            line: lineOptions,\n            point: pointOptions,\n        },\n    });\n    var second = deepAssign({}, primary, { options: { tooltip: false } });\n    var pointParams = deepAssign({}, primary, { options: { tooltip: false, state: pointState } });\n    // area geometry 处理\n    area(primary);\n    line(second);\n    point(pointParams);\n    chart.axis(false);\n    chart.legend(false);\n    return params;\n}\n/**\n * meta 配置\n * @param params\n */\nexport function meta(params) {\n    var _a, _b;\n    var options = params.options;\n    var xAxis = options.xAxis, yAxis = options.yAxis, data = options.data;\n    var seriesData = getTinyData(data);\n    return flow(scale((_a = {},\n        _a[X_FIELD] = xAxis,\n        _a[Y_FIELD] = yAxis,\n        _a), (_b = {},\n        _b[X_FIELD] = {\n            type: 'cat',\n        },\n        _b[Y_FIELD] = adjustYMetaByZero(seriesData, Y_FIELD),\n        _b)))(params);\n}\n/**\n * 迷你面积图适配器\n * @param chart\n * @param options\n */\nexport function adaptor(params) {\n    return flow(pattern('areaStyle'), geometry, meta, tooltip, theme, animation, annotation())(params);\n}\n//# sourceMappingURL=adaptor.js.map","import { __assign } from \"tslib\";\nimport { DEFAULT_TOOLTIP_OPTIONS } from '../tiny-line/constants';\n/**\n * 默认配置项\n */\nexport var DEFAULT_OPTIONS = {\n    appendPadding: 2,\n    tooltip: __assign({}, DEFAULT_TOOLTIP_OPTIONS),\n    // 默认样式\n    color: 'l(90) 0:#E5EDFE 1:#ffffff',\n    areaStyle: {\n        fillOpacity: 0.6,\n    },\n    line: {\n        size: 1,\n        color: '#5B8FF9',\n    },\n    animation: {},\n};\n//# sourceMappingURL=constants.js.map","import { __extends } from \"tslib\";\nimport { Plot } from '../../core/plot';\nimport { getTinyData } from '../tiny-line/utils';\nimport { adaptor, meta } from './adaptor';\nimport { DEFAULT_OPTIONS } from './constants';\nvar TinyArea = /** @class */ (function (_super) {\n    __extends(TinyArea, _super);\n    function TinyArea() {\n        var _this = _super !== null && _super.apply(this, arguments) || this;\n        /** 图表类型 */\n        _this.type = 'tiny-area';\n        return _this;\n    }\n    /**\n     * 获取默认配置项\n     * 供外部使用\n     */\n    TinyArea.getDefaultOptions = function () {\n        return DEFAULT_OPTIONS;\n    };\n    /**\n     * @override\n     * @param data\n     */\n    TinyArea.prototype.changeData = function (data) {\n        this.updateOption({ data: data });\n        var _a = this, chart = _a.chart, options = _a.options;\n        meta({ chart: chart, options: options });\n        chart.changeData(getTinyData(data));\n    };\n    TinyArea.prototype.getDefaultOptions = function () {\n        return TinyArea.getDefaultOptions();\n    };\n    /**\n     * 获取 迷你面积图 的适配器\n     */\n    TinyArea.prototype.getSchemaAdaptor = function () {\n        return adaptor;\n    };\n    return TinyArea;\n}(Plot));\nexport { TinyArea };\n//# sourceMappingURL=index.js.map","import { animation, annotation, pattern, theme, tooltip } from '../../adaptor/common';\nimport { interval } from '../../adaptor/geometries';\nimport { deepAssign, flow } from '../../utils';\nimport { meta } from '../tiny-area/adaptor';\nimport { X_FIELD, Y_FIELD } from '../tiny-line/constants';\nimport { getTinyData } from '../tiny-line/utils';\nexport { meta };\n/**\n * 字段\n * @param params\n */\nfunction geometry(params) {\n    var chart = params.chart, options = params.options;\n    var data = options.data, color = options.color, columnStyle = options.columnStyle, columnWidthRatio = options.columnWidthRatio;\n    var seriesData = getTinyData(data);\n    chart.data(seriesData);\n    var p = deepAssign({}, params, {\n        options: {\n            xField: X_FIELD,\n            yField: Y_FIELD,\n            widthRatio: columnWidthRatio,\n            interval: {\n                style: columnStyle,\n                color: color,\n            },\n        },\n    });\n    interval(p);\n    chart.axis(false);\n    chart.legend(false);\n    chart.interaction('element-active');\n    return params;\n}\n/**\n * 迷你柱形图适配器\n * @param chart\n * @param options\n */\nexport function adaptor(params) {\n    return flow(theme, pattern('columnStyle'), geometry, meta, tooltip, animation, annotation())(params);\n}\n//# sourceMappingURL=adaptor.js.map","import { __assign } from \"tslib\";\nimport { get } from '@antv/util';\nexport var DEFAULT_TOOLTIP_OPTIONS = {\n    showTitle: false,\n    shared: true,\n    showMarkers: false,\n    customContent: function (x, data) { return \"\".concat(get(data, [0, 'data', 'y'], 0)); },\n    containerTpl: '<div class=\"g2-tooltip\"><div class=\"g2-tooltip-list\"></div></div>',\n    itemTpl: '<span>{value}</span>',\n    domStyles: {\n        'g2-tooltip': {\n            padding: '2px 4px',\n            fontSize: '10px',\n        },\n    },\n};\n/**\n * 默认配置项\n */\nexport var DEFAULT_OPTIONS = {\n    appendPadding: 2,\n    tooltip: __assign({}, DEFAULT_TOOLTIP_OPTIONS),\n    animation: {},\n};\n//# sourceMappingURL=constants.js.map","import { __extends } from \"tslib\";\nimport { Plot } from '../../core/plot';\nimport { getTinyData } from '../tiny-line/utils';\nimport { adaptor, meta } from './adaptor';\nimport { DEFAULT_OPTIONS } from './constants';\nvar TinyColumn = /** @class */ (function (_super) {\n    __extends(TinyColumn, _super);\n    function TinyColumn() {\n        var _this = _super !== null && _super.apply(this, arguments) || this;\n        /** 图表类型 */\n        _this.type = 'tiny-column';\n        return _this;\n    }\n    /**\n     * 获取默认配置项\n     * 供外部使用\n     */\n    TinyColumn.getDefaultOptions = function () {\n        return DEFAULT_OPTIONS;\n    };\n    /**\n     * @override\n     * @param data\n     */\n    TinyColumn.prototype.changeData = function (data) {\n        this.updateOption({ data: data });\n        var _a = this, chart = _a.chart, options = _a.options;\n        meta({ chart: chart, options: options });\n        chart.changeData(getTinyData(data));\n    };\n    TinyColumn.prototype.getDefaultOptions = function () {\n        return TinyColumn.getDefaultOptions();\n    };\n    /**\n     * 获取 迷你柱形图 的适配器\n     */\n    TinyColumn.prototype.getSchemaAdaptor = function () {\n        return adaptor;\n    };\n    return TinyColumn;\n}(Plot));\nexport { TinyColumn };\n//# sourceMappingURL=index.js.map","import { animation, annotation, theme, tooltip } from '../../adaptor/common';\nimport { line, point } from '../../adaptor/geometries';\nimport { deepAssign, flow } from '../../utils';\nimport { meta } from '../tiny-area/adaptor';\nimport { X_FIELD, Y_FIELD } from './constants';\nimport { getTinyData } from './utils';\nexport { meta };\n/**\n * 字段\n * @param params\n */\nfunction geometry(params) {\n    var chart = params.chart, options = params.options;\n    var data = options.data, color = options.color, lineStyle = options.lineStyle, pointMapping = options.point;\n    var pointState = pointMapping === null || pointMapping === void 0 ? void 0 : pointMapping.state;\n    var seriesData = getTinyData(data);\n    chart.data(seriesData);\n    // line geometry 处理\n    var primary = deepAssign({}, params, {\n        options: {\n            xField: X_FIELD,\n            yField: Y_FIELD,\n            line: {\n                color: color,\n                style: lineStyle,\n            },\n            point: pointMapping,\n        },\n    });\n    var pointParams = deepAssign({}, primary, { options: { tooltip: false, state: pointState } });\n    line(primary);\n    point(pointParams);\n    chart.axis(false);\n    chart.legend(false);\n    return params;\n}\n/**\n * 迷你折线图适配器\n * @param chart\n * @param options\n */\nexport function adaptor(params) {\n    return flow(geometry, meta, theme, tooltip, animation, annotation())(params);\n}\n//# sourceMappingURL=adaptor.js.map","import { __extends } from \"tslib\";\nimport { Plot } from '../../core/plot';\nimport { adaptor, meta } from './adaptor';\nimport { DEFAULT_OPTIONS } from './constants';\nimport { getTinyData } from './utils';\nvar TinyLine = /** @class */ (function (_super) {\n    __extends(TinyLine, _super);\n    function TinyLine() {\n        var _this = _super !== null && _super.apply(this, arguments) || this;\n        /** 图表类型 */\n        _this.type = 'tiny-line';\n        return _this;\n    }\n    /**\n     * 获取默认配置项\n     * 供外部使用\n     */\n    TinyLine.getDefaultOptions = function () {\n        return DEFAULT_OPTIONS;\n    };\n    /**\n     * @override\n     * @param data\n     */\n    TinyLine.prototype.changeData = function (data) {\n        this.updateOption({ data: data });\n        var _a = this, chart = _a.chart, options = _a.options;\n        meta({ chart: chart, options: options });\n        chart.changeData(getTinyData(data));\n    };\n    TinyLine.prototype.getDefaultOptions = function () {\n        return TinyLine.getDefaultOptions();\n    };\n    /**\n     * 获取 迷你折线图 的适配器\n     */\n    TinyLine.prototype.getSchemaAdaptor = function () {\n        return adaptor;\n    };\n    return TinyLine;\n}(Plot));\nexport { TinyLine };\n//# sourceMappingURL=index.js.map","import { Mix } from './plots/mix';\n/** 实验室图表所处的阶段 */\nexport var Stage;\n(function (Stage) {\n    Stage[\"DEV\"] = \"DEV\";\n    Stage[\"BETA\"] = \"BETA\";\n    Stage[\"STABLE\"] = \"STABLE\";\n})(Stage || (Stage = {}));\n/**\n * 不同阶段打印一些消息给开发者\n * @param stage\n */\nexport function notice(stage, plotType) {\n    console.warn(stage === Stage.DEV\n        ? \"Plot '\".concat(plotType, \"' is in DEV stage, just give us issues.\")\n        : stage === Stage.BETA\n            ? \"Plot '\".concat(plotType, \"' is in BETA stage, DO NOT use it in production env.\")\n            : stage === Stage.STABLE\n                ? \"Plot '\".concat(plotType, \"' is in STABLE stage, import it by \\\"import { \").concat(plotType, \" } from '@antv/g2plot'\\\".\")\n                : 'invalid Stage type.');\n}\n/**\n * 实验室图表，实验室中的图表分成不同的阶段。\n */\nvar Lab = /** @class */ (function () {\n    function Lab() {\n    }\n    Object.defineProperty(Lab, \"MultiView\", {\n        get: function () {\n            notice(Stage.STABLE, 'MultiView');\n            return Mix;\n        },\n        enumerable: false,\n        configurable: true\n    });\n    return Lab;\n}());\nexport { Lab };\n//# sourceMappingURL=lab.js.map","import { get } from '@antv/util';\nimport { deepAssign } from '../../utils';\nimport { Area } from '../area';\nimport { adaptor as areaAdaptor } from '../area/adaptor';\nimport { Bar } from '../bar';\nimport { adaptor as barAdaptor } from '../bar/adaptor';\nimport { Column } from '../column';\nimport { adaptor as columnAdaptor } from '../column/adaptor';\nimport { Funnel } from '../funnel';\nimport { adaptor as funnelAdaptor } from '../funnel/adaptor';\nimport { Gauge } from '../gauge';\nimport { adaptor as gaugeAdaptor } from '../gauge/adaptor';\nimport { Histogram } from '../histogram';\nimport { adaptor as histogramAdaptor } from '../histogram/adaptor';\nimport { Line } from '../line';\nimport { adaptor as lineAdaptor } from '../line/adaptor';\nimport { Pie } from '../pie';\nimport { adaptor as pieAdaptor } from '../pie/adaptor';\nimport { Progress } from '../progress';\nimport { adaptor as progressAdaptor } from '../progress/adaptor';\nimport { RingProgress } from '../ring-progress';\nimport { adaptor as ringProgressAdaptor } from '../ring-progress/adaptor';\nimport { Scatter } from '../scatter';\nimport { adaptor as scatterAdaptor } from '../scatter/adaptor';\nimport { Stock } from '../stock';\nimport { adaptor as stockAdaptor } from '../stock/adaptor';\nimport { TinyArea } from '../tiny-area';\nimport { adaptor as tinyAreaAdaptor } from '../tiny-area/adaptor';\nimport { TinyColumn } from '../tiny-column';\nimport { adaptor as tinyColumnAdaptor } from '../tiny-column/adaptor';\nimport { TinyLine } from '../tiny-line';\nimport { adaptor as tinyLineAdaptor } from '../tiny-line/adaptor';\n/**\n * 可在 multi-view 中使用的 plots\n */\nvar PLOT_ADAPTORS = {\n    line: lineAdaptor,\n    pie: pieAdaptor,\n    column: columnAdaptor,\n    bar: barAdaptor,\n    area: areaAdaptor,\n    gauge: gaugeAdaptor,\n    'tiny-line': tinyLineAdaptor,\n    'tiny-column': tinyColumnAdaptor,\n    'tiny-area': tinyAreaAdaptor,\n    'ring-progress': ringProgressAdaptor,\n    progress: progressAdaptor,\n    scatter: scatterAdaptor,\n    histogram: histogramAdaptor,\n    funnel: funnelAdaptor,\n    stock: stockAdaptor,\n};\n/**\n * 获取指定 plot 的 class contructor\n * @param {string} plot\n */\nvar PLOT_CONSTRUCTOR = {\n    line: Line,\n    pie: Pie,\n    column: Column,\n    bar: Bar,\n    area: Area,\n    gauge: Gauge,\n    'tiny-line': TinyLine,\n    'tiny-column': TinyColumn,\n    'tiny-area': TinyArea,\n    'ring-progress': RingProgress,\n    progress: Progress,\n    scatter: Scatter,\n    histogram: Histogram,\n    funnel: Funnel,\n    stock: Stock,\n};\n/**\n * 在 mix 图表以及 facet 图表中，defaultOptions 进行复写简化\n */\nvar DEFAULT_OPTIONS_MAP = {\n    pie: { label: false },\n    column: { tooltip: { showMarkers: false } },\n    bar: { tooltip: { showMarkers: false } },\n};\n/**\n * 执行 plot 的 adaptor, 默认都带上 defaultOptions\n * @param {string} plot\n */\nexport function execPlotAdaptor(plot, view, options) {\n    var cls = PLOT_CONSTRUCTOR[plot];\n    if (!cls) {\n        console.error(\"could not find \".concat(plot, \" plot\"));\n        return;\n    }\n    var module = PLOT_ADAPTORS[plot];\n    module({\n        chart: view,\n        options: deepAssign({}, cls.getDefaultOptions(), get(DEFAULT_OPTIONS_MAP, plot, {}), options),\n    });\n}\n//# sourceMappingURL=utils.js.map","import { __assign } from \"tslib\";\nimport { each } from '@antv/util';\nimport { animation, annotation, interaction, theme, tooltip } from '../../adaptor/common';\nimport { geometry as geometryAdaptor } from '../../adaptor/geometries/base';\nimport { AXIS_META_CONFIG_KEYS } from '../../constant';\nimport { PLOT_CONTAINER_OPTIONS } from '../../core/plot';\nimport { deepAssign, flow, pick } from '../../utils';\nimport { execPlotAdaptor } from './utils';\n/**\n * geometry 处理\n * @param params\n */\nfunction multiView(params) {\n    var chart = params.chart, options = params.options;\n    var views = options.views, legend = options.legend;\n    each(views, function (v) {\n        var region = v.region, data = v.data, meta = v.meta, axes = v.axes, coordinate = v.coordinate, interactions = v.interactions, annotations = v.annotations, tooltip = v.tooltip, geometries = v.geometries;\n        // 1. 创建 view\n        var viewOfG2 = chart.createView({\n            region: region,\n        });\n        // 2. data\n        viewOfG2.data(data);\n        // 3. meta\n        var scales = {};\n        if (axes) {\n            each(axes, function (axis, field) {\n                scales[field] = pick(axis, AXIS_META_CONFIG_KEYS);\n            });\n        }\n        scales = deepAssign({}, meta, scales);\n        viewOfG2.scale(scales);\n        // 4. x y axis\n        if (!axes) {\n            viewOfG2.axis(false);\n        }\n        else {\n            each(axes, function (axis, field) {\n                viewOfG2.axis(field, axis);\n            });\n        }\n        // 5. coordinate\n        viewOfG2.coordinate(coordinate);\n        // 6. geometry\n        each(geometries, function (geometry) {\n            var ext = geometryAdaptor({\n                chart: viewOfG2,\n                options: geometry,\n            }).ext;\n            // adjust\n            var adjust = geometry.adjust;\n            if (adjust) {\n                ext.geometry.adjust(adjust);\n            }\n        });\n        // 7. interactions\n        each(interactions, function (interaction) {\n            if (interaction.enable === false) {\n                viewOfG2.removeInteraction(interaction.type);\n            }\n            else {\n                viewOfG2.interaction(interaction.type, interaction.cfg);\n            }\n        });\n        // 8. annotations\n        each(annotations, function (annotation) {\n            viewOfG2.annotation()[annotation.type](__assign({}, annotation));\n        });\n        // 9. animation (先做动画)\n        if (typeof v.animation === 'boolean') {\n            viewOfG2.animate(false);\n        }\n        else {\n            viewOfG2.animate(true);\n            // 9.1 所有的 Geometry 都使用同一动画（各个图形如有区别，todo 自行覆盖）\n            each(viewOfG2.geometries, function (g) {\n                g.animate(v.animation);\n            });\n        }\n        if (tooltip) {\n            // 10. tooltip\n            viewOfG2.interaction('tooltip');\n            viewOfG2.tooltip(tooltip);\n        }\n    });\n    // legend\n    if (!legend) {\n        chart.legend(false);\n    }\n    else {\n        each(legend, function (l, field) {\n            chart.legend(field, l);\n        });\n    }\n    // tooltip\n    chart.tooltip(options.tooltip);\n    return params;\n}\n/**\n * 支持嵌套使用 g2plot 内置图表\n * @param params\n */\nfunction multiPlot(params) {\n    var chart = params.chart, options = params.options;\n    var plots = options.plots, _a = options.data, data = _a === void 0 ? [] : _a;\n    each(plots, function (plot) {\n        var type = plot.type, region = plot.region, _a = plot.options, options = _a === void 0 ? {} : _a, top = plot.top;\n        var tooltip = options.tooltip;\n        if (top) {\n            execPlotAdaptor(type, chart, __assign(__assign({}, options), { data: data }));\n            return;\n        }\n        var viewOfG2 = chart.createView(__assign({ region: region }, pick(options, PLOT_CONTAINER_OPTIONS)));\n        if (tooltip) {\n            // 配置 tooltip 交互\n            viewOfG2.interaction('tooltip');\n        }\n        execPlotAdaptor(type, viewOfG2, __assign({ data: data }, options));\n    });\n    return params;\n}\n/**\n * 处理缩略轴的 adaptor (mix)\n * @param params\n */\nexport function slider(params) {\n    var chart = params.chart, options = params.options;\n    chart.option('slider', options.slider);\n    return params;\n}\n/**\n * 图适配器\n * @param chart\n * @param options\n */\nexport function adaptor(params) {\n    return flow(animation, // 多 view 的图，动画配置放到最前面\n    multiView, multiPlot, interaction, animation, theme, tooltip, slider, annotation()\n    // ... 其他的 adaptor flow\n    )(params);\n}\n//# sourceMappingURL=adaptor.js.map","import { __extends } from \"tslib\";\nimport { Action, registerAction, registerInteraction } from '@antv/g2';\nimport { each, get, isArray, map } from '@antv/util';\nimport { getAllElements, getSiblingViews, getViews } from '../../../utils';\nimport { clearHighlight, getElementValue } from './utils';\n/**\n * 存在多个 view 时，view 之间的联动交互\n *\n * 提供四个反馈 action，均接受参数：linkField 关联字段，dim 维度\n * 1. showTooltip\n * 2. active\n * 3. highlight\n * 4. selected\n *\n * 附加，两个结束反馈 action：\n * 1. hidetooltip\n * 2. reset 清除激活和高亮状态\n */\nvar Association = /** @class */ (function (_super) {\n    __extends(Association, _super);\n    function Association() {\n        return _super !== null && _super.apply(this, arguments) || this;\n    }\n    /**\n     * 获取关联的 elements\n     *\n     * - 如果 dim 参数存在，根据 dim 获取相应的 field。与 linkField 不匹配则 return\n     * - 否则 dim 参数不存在，且 linkField 存在，则作为关联字段\n     * - 否则若 linkField 不存在，则获取第一个分类字段\n     * @returns EventItem[]\n     */\n    Association.prototype.getAssociationItems = function (views, params) {\n        var _a;\n        var event = this.context.event;\n        var _b = params || {}, linkField = _b.linkField, dim = _b.dim;\n        var items = [];\n        if ((_a = event.data) === null || _a === void 0 ? void 0 : _a.data) {\n            var data_1 = event.data.data;\n            each(views, function (v) {\n                var _a, _b;\n                var field = linkField;\n                if (dim === 'x') {\n                    field = v.getXScale().field;\n                }\n                else if (dim === 'y') {\n                    field = (_a = v.getYScales().find(function (s) { return s.field === field; })) === null || _a === void 0 ? void 0 : _a.field;\n                }\n                else if (!field) {\n                    field = (_b = v.getGroupScales()[0]) === null || _b === void 0 ? void 0 : _b.field;\n                }\n                if (!field) {\n                    return;\n                }\n                var elements = map(getAllElements(v), function (ele) {\n                    var active = false;\n                    var inactive = false;\n                    var dataValue = isArray(data_1) ? get(data_1[0], field) : get(data_1, field);\n                    if (getElementValue(ele, field) === dataValue) {\n                        active = true;\n                    }\n                    else {\n                        inactive = true;\n                    }\n                    return { element: ele, view: v, active: active, inactive: inactive };\n                });\n                items.push.apply(items, elements);\n            });\n        }\n        return items;\n    };\n    /**\n     * 所有同一层级的 tooltip 显示\n     */\n    Association.prototype.showTooltip = function (params) {\n        var siblings = getSiblingViews(this.context.view);\n        var elements = this.getAssociationItems(siblings, params);\n        each(elements, function (ele) {\n            if (ele.active) {\n                var box = ele.element.shape.getCanvasBBox();\n                ele.view.showTooltip({ x: box.minX + box.width / 2, y: box.minY + box.height / 2 });\n            }\n        });\n    };\n    /**\n     * 隐藏同一层级的 tooltip\n     */\n    Association.prototype.hideTooltip = function () {\n        var siblings = getSiblingViews(this.context.view);\n        each(siblings, function (sibling) {\n            sibling.hideTooltip();\n        });\n    };\n    /**\n     * 设置 active 状态\n     */\n    Association.prototype.active = function (params) {\n        var views = getViews(this.context.view);\n        var items = this.getAssociationItems(views, params);\n        each(items, function (item) {\n            var active = item.active, element = item.element;\n            if (active) {\n                element.setState('active', true);\n            }\n        });\n    };\n    /**\n     * 设置 selected 状态\n     */\n    Association.prototype.selected = function (params) {\n        var views = getViews(this.context.view);\n        var items = this.getAssociationItems(views, params);\n        each(items, function (item) {\n            var active = item.active, element = item.element;\n            if (active) {\n                element.setState('selected', true);\n            }\n        });\n    };\n    /**\n     * 进行高亮 => 设置 inactive 状态\n     */\n    Association.prototype.highlight = function (params) {\n        var views = getViews(this.context.view);\n        var items = this.getAssociationItems(views, params);\n        each(items, function (item) {\n            var inactive = item.inactive, element = item.element;\n            if (inactive) {\n                element.setState('inactive', true);\n            }\n        });\n    };\n    Association.prototype.reset = function () {\n        var views = getViews(this.context.view);\n        each(views, function (v) {\n            clearHighlight(v);\n        });\n    };\n    return Association;\n}(Action));\nregisterAction('association', Association);\n/**\n * 相邻 view 的 active 联动（相同维值的 tooltip 联动）\n */\nregisterInteraction('association-active', {\n    start: [{ trigger: 'element:mouseenter', action: 'association:active' }],\n    end: [{ trigger: 'element:mouseleave', action: 'association:reset' }],\n});\n/**\n * 相邻 view 的 active 联动（相同维值的 tooltip 联动）\n */\nregisterInteraction('association-selected', {\n    start: [{ trigger: 'element:mouseenter', action: 'association:selected' }],\n    end: [{ trigger: 'element:mouseleave', action: 'association:reset' }],\n});\n/**\n * 相邻 view 的 highlight 联动, 突出当前 element\n */\nregisterInteraction('association-highlight', {\n    start: [{ trigger: 'element:mouseenter', action: 'association:highlight' }],\n    end: [{ trigger: 'element:mouseleave', action: 'association:reset' }],\n});\n/**\n * 相邻 view 的 tooltip 联动，根据 groupField 进行关联（相同维值的 tooltip 联动）\n */\nregisterInteraction('association-tooltip', {\n    start: [{ trigger: 'element:mousemove', action: 'association:showTooltip' }],\n    end: [{ trigger: 'element:mouseleave', action: 'association:hideTooltip' }],\n});\n//# sourceMappingURL=association.js.map","import { each, isArray } from '@antv/util';\nimport { getAllElements } from '../../../utils';\n/**\n * 获取图表元素对应字段的值\n * @param element 图表元素\n * @param field 字段名\n * @ignore\n */\nexport function getElementValue(element, field) {\n    var model = element.getModel();\n    var record = model.data;\n    var value;\n    if (isArray(record)) {\n        value = record[0][field];\n    }\n    else {\n        value = record[field];\n    }\n    return value;\n}\n/**\n * @ignore\n * 清理 highlight 效果\n * @param view View 或者 Chart\n */\nexport function clearHighlight(view) {\n    var elements = getAllElements(view);\n    each(elements, function (el) {\n        if (el.hasState('active')) {\n            el.setState('active', false);\n        }\n        if (el.hasState('selected')) {\n            el.setState('selected', false);\n        }\n        if (el.hasState('inactive')) {\n            el.setState('inactive', false);\n        }\n    });\n}\n//# sourceMappingURL=utils.js.map","import { __extends } from \"tslib\";\nimport { Plot } from '../../core/plot';\nimport { adaptor } from './adaptor';\nimport './interactions';\n/**\n * 多图层图形，释放 G2 80% 的功能，可以用来做：\n * 1. 图层叠加的图：\n *   - 折线 + 置信度区间迭代\n *   - 嵌套饼图\n *   - ...\n * 2. 图层划分的图\n *   - 多维图\n *   - 柱饼组合图\n *   - ...\n */\nvar Mix = /** @class */ (function (_super) {\n    __extends(Mix, _super);\n    function Mix() {\n        var _this = _super !== null && _super.apply(this, arguments) || this;\n        /** 图表类型 */\n        _this.type = 'mix';\n        return _this;\n    }\n    /**\n     * 获取适配器\n     */\n    Mix.prototype.getSchemaAdaptor = function () {\n        return adaptor;\n    };\n    return Mix;\n}(Plot));\nexport { Mix };\n//# sourceMappingURL=index.js.map","export var FIRST_AXES_VIEW = 'first-axes-view';\nexport var SECOND_AXES_VIEW = 'second-axes-view';\n/** 对称条形图的分组 key 值 */\nexport var SERIES_FIELD_KEY = 'series-field-key';\n//# sourceMappingURL=constant.js.map","var _a;\nimport { Plot } from '../../core/plot';\nimport { deepAssign } from '../../utils';\nexport var BOX_RANGE = '$$range$$';\nexport var BOX_RANGE_ALIAS = 'low-q1-median-q3-high';\nexport var BOX_SYNC_NAME = '$$y_outliers$$';\nexport var OUTLIERS_VIEW_ID = 'outliers_view';\n/**\n * 面积图默认配置项\n */\nexport var DEFAULT_OPTIONS = deepAssign({}, Plot.getDefaultOptions(), {\n    meta: (_a = {},\n        _a[BOX_RANGE] = { min: 0, alias: BOX_RANGE_ALIAS },\n        _a),\n    // 默认区域交互\n    interactions: [{ type: 'active-region' }],\n    // 默认 tooltips 共享，不显示 markers\n    tooltip: {\n        showMarkers: false,\n        shared: true,\n    },\n    boxStyle: {\n        lineWidth: 1,\n    },\n});\n//# sourceMappingURL=constant.js.map","import { groupBy } from '@antv/util';\n/**\n * bidirectional-bar 处理数据, 通过 SERIES_FIELD_KEY 字段分成左右数据\n * @param xField\n * @param yField\n * @param data\n */\nexport function transformData(xField, yField, seriesField, data, reverse) {\n    var hopeData = [];\n    yField.forEach(function (d) {\n        data.forEach(function (k) {\n            var _a;\n            var obj = (_a = {},\n                _a[xField] = k[xField],\n                _a[seriesField] = d,\n                _a[d] = k[d],\n                _a);\n            hopeData.push(obj);\n        });\n    });\n    var groupData = Object.values(groupBy(hopeData, seriesField));\n    var _a = groupData[0], data1 = _a === void 0 ? [] : _a, _b = groupData[1], data2 = _b === void 0 ? [] : _b;\n    return reverse ? [data1.reverse(), data2.reverse()] : [data1, data2];\n}\n/**\n * 是否横向，默认空为横向\n * @param layout\n */\nexport function isHorizontal(layout) {\n    return layout !== 'vertical';\n}\n/**\n * 多 view 进行同步 padding 的自定义逻辑\n * @param chart\n * @param views\n * @param p\n */\nexport function syncViewPadding(chart, views, p) {\n    var v1 = views[0], v2 = views[1];\n    var p1 = v1.autoPadding;\n    var p2 = v2.autoPadding;\n    var _a = chart.__axisPosition, layout = _a.layout, position = _a.position;\n    // 目前只能根据布局的比例来判断 layout\n    if (isHorizontal(layout) && position === 'top') {\n        /**\n         * 保证 v1 的 left 和 v2 right 的间隔相等，因为 v1 有轴\n         * position top 即为 v1 左边，中间间距设置就为 0\n         */\n        v1.autoPadding = p.instance(p1.top, 0, p1.bottom, p1.left);\n        v2.autoPadding = p.instance(p2.top, p1.left, p2.bottom, 0);\n    }\n    if (isHorizontal(layout) && position === 'bottom') {\n        /**\n         * 保证 v1 的 left 和 v2 right 的间隔相等，因为 v1 有轴\n         * position bottom 即为 v1 的右边，v1 right = right / 2  v2 left = right / 2\n         * + 5 是为了 让那个轴不要太贴近了，更好看\n         */\n        v1.autoPadding = p.instance(p1.top, p1.right / 2 + 5, p1.bottom, p1.left);\n        v2.autoPadding = p.instance(p2.top, p2.right, p2.bottom, p1.right / 2 + 5);\n    }\n    if (!isHorizontal(layout) && position === 'bottom') {\n        /**\n         * 保证 v1 的 left 和 v2 left 的间隔相等 left 取最大值\n         * position bottom 即为 v1 下边，v1 bottom = bottom / 2  v2 top = bottom / 2\n         * + 5 是为了 让那个轴不要太贴近了，更好看\n         */\n        var left = p1.left >= p2.left ? p1.left : p2.left;\n        v1.autoPadding = p.instance(p1.top, p1.right, p1.bottom / 2 + 5, left);\n        v2.autoPadding = p.instance(p1.bottom / 2 + 5, p2.right, p2.bottom, left);\n    }\n    // 垂直状态，不建议设置position 为 top， 还是做个兼容处理\n    if (!isHorizontal(layout) && position === 'top') {\n        var left = p1.left >= p2.left ? p1.left : p2.left;\n        v1.autoPadding = p.instance(p1.top, p1.right, 0, left);\n        v2.autoPadding = p.instance(0, p2.right, p1.top, left);\n    }\n}\n//# sourceMappingURL=utils.js.map","import { __assign, __rest } from \"tslib\";\nimport { get, keys } from '@antv/util';\nimport { animation as commonAnimation, interaction as commonInteraction, limitInPlot as commonLimitInPlot, scale, theme as commonTheme, tooltip, } from '../../adaptor/common';\nimport { interval } from '../../adaptor/geometries';\nimport { deepAssign, findGeometry, findViewById, flow, transformLabel } from '../../utils';\nimport { FIRST_AXES_VIEW, SECOND_AXES_VIEW, SERIES_FIELD_KEY } from './constant';\nimport { isHorizontal, transformData } from './utils';\n/**\n * geometry 处理\n * @param params\n */\nfunction geometry(params) {\n    var chart = params.chart, options = params.options;\n    var data = options.data, xField = options.xField, yField = options.yField, color = options.color, barStyle = options.barStyle, widthRatio = options.widthRatio, legend = options.legend, layout = options.layout;\n    // 处理数据\n    var groupData = transformData(xField, yField, SERIES_FIELD_KEY, data, isHorizontal(layout));\n    // 在创建子 view 执行后不行，需要在前面处理 legend\n    if (legend) {\n        chart.legend(SERIES_FIELD_KEY, legend);\n    }\n    else if (legend === false) {\n        chart.legend(false);\n    }\n    // 创建 view\n    var firstView;\n    var secondView;\n    var firstViewData = groupData[0], secondViewData = groupData[1];\n    // 横向\n    if (isHorizontal(layout)) {\n        firstView = chart.createView({\n            region: {\n                start: { x: 0, y: 0 },\n                end: { x: 0.5, y: 1 },\n            },\n            id: FIRST_AXES_VIEW,\n        });\n        firstView.coordinate().transpose().reflect('x');\n        secondView = chart.createView({\n            region: {\n                start: { x: 0.5, y: 0 },\n                end: { x: 1, y: 1 },\n            },\n            id: SECOND_AXES_VIEW,\n        });\n        secondView.coordinate().transpose();\n        // @说明: 测试发现，横向因为轴的反转，需要数据也反转，不然会图形渲染是反的(翻转操作进入到 transform 中处理)\n        firstView.data(firstViewData);\n        secondView.data(secondViewData);\n    }\n    else {\n        // 纵向\n        firstView = chart.createView({\n            region: {\n                start: { x: 0, y: 0 },\n                end: { x: 1, y: 0.5 },\n            },\n            id: FIRST_AXES_VIEW,\n        });\n        secondView = chart.createView({\n            region: {\n                start: { x: 0, y: 0.5 },\n                end: { x: 1, y: 1 },\n            },\n            id: SECOND_AXES_VIEW,\n        });\n        secondView.coordinate().reflect('y');\n        firstView.data(firstViewData);\n        secondView.data(secondViewData);\n    }\n    var left = deepAssign({}, params, {\n        chart: firstView,\n        options: {\n            widthRatio: widthRatio,\n            xField: xField,\n            yField: yField[0],\n            seriesField: SERIES_FIELD_KEY,\n            interval: {\n                color: color,\n                style: barStyle,\n            },\n        },\n    });\n    interval(left);\n    var right = deepAssign({}, params, {\n        chart: secondView,\n        options: {\n            xField: xField,\n            yField: yField[1],\n            seriesField: SERIES_FIELD_KEY,\n            widthRatio: widthRatio,\n            interval: {\n                color: color,\n                style: barStyle,\n            },\n        },\n    });\n    interval(right);\n    return params;\n}\n/**\n * meta 配置\n * - 对称条形图对数据进行了处理，通过 SERIES_FIELD_KEY 来对两条 yField 数据进行分类\n * @param params\n */\nfunction meta(params) {\n    var _a, _b, _c;\n    var options = params.options, chart = params.chart;\n    var xAxis = options.xAxis, yAxis = options.yAxis, xField = options.xField, yField = options.yField;\n    var firstView = findViewById(chart, FIRST_AXES_VIEW);\n    var secondView = findViewById(chart, SECOND_AXES_VIEW);\n    var aliasMap = {};\n    keys((options === null || options === void 0 ? void 0 : options.meta) || {}).map(function (metaKey) {\n        if (get(options === null || options === void 0 ? void 0 : options.meta, [metaKey, 'alias'])) {\n            aliasMap[metaKey] = options.meta[metaKey].alias;\n        }\n    });\n    chart.scale((_a = {},\n        _a[SERIES_FIELD_KEY] = {\n            sync: true,\n            formatter: function (v) {\n                return get(aliasMap, v, v);\n            },\n        },\n        _a));\n    scale((_b = {},\n        _b[xField] = xAxis,\n        _b[yField[0]] = yAxis[yField[0]],\n        _b))(deepAssign({}, params, { chart: firstView }));\n    scale((_c = {},\n        _c[xField] = xAxis,\n        _c[yField[1]] = yAxis[yField[1]],\n        _c))(deepAssign({}, params, { chart: secondView }));\n    return params;\n}\n/**\n * axis 配置\n * @param params\n */\nfunction axis(params) {\n    var chart = params.chart, options = params.options;\n    var xAxis = options.xAxis, yAxis = options.yAxis, xField = options.xField, yField = options.yField, layout = options.layout;\n    var firstView = findViewById(chart, FIRST_AXES_VIEW);\n    var secondView = findViewById(chart, SECOND_AXES_VIEW);\n    // 第二个 view axis 始终隐藏; 注意 bottom 的时候，只隐藏 label，其他共用配置\n    // @ts-ignore\n    if ((xAxis === null || xAxis === void 0 ? void 0 : xAxis.position) === 'bottom') {\n        // fixme 直接设置 label: null 会导致 tickLine 无法显示\n        secondView.axis(xField, __assign(__assign({}, xAxis), { label: { formatter: function () { return ''; } } }));\n    }\n    else {\n        secondView.axis(xField, false);\n    }\n    // 为 false 则是不显示 firstView 轴\n    if (xAxis === false) {\n        firstView.axis(xField, false);\n    }\n    else {\n        firstView.axis(xField, __assign({ \n            // 不同布局 firstView 的坐标轴显示位置\n            position: isHorizontal(layout) ? 'top' : 'bottom' }, xAxis));\n    }\n    if (yAxis === false) {\n        firstView.axis(yField[0], false);\n        secondView.axis(yField[1], false);\n    }\n    else {\n        firstView.axis(yField[0], yAxis[yField[0]]);\n        secondView.axis(yField[1], yAxis[yField[1]]);\n    }\n    /**\n     *  这个注入，主要是在syncViewPadding时候拿到相对应的配置：布局和轴的位置\n     *  TODO 之后希望 g2 View 对象可以开放 setter 可以设置一些需要的东西\n     */\n    //@ts-ignore\n    chart.__axisPosition = {\n        position: firstView.getOptions().axes[xField].position,\n        layout: layout,\n    };\n    return params;\n}\n/**\n * interaction 配置\n * @param params\n */\nexport function interaction(params) {\n    var chart = params.chart;\n    commonInteraction(deepAssign({}, params, { chart: findViewById(chart, FIRST_AXES_VIEW) }));\n    commonInteraction(deepAssign({}, params, { chart: findViewById(chart, SECOND_AXES_VIEW) }));\n    return params;\n}\n/**\n * limitInPlot\n * @param params\n */\nexport function limitInPlot(params) {\n    var chart = params.chart, options = params.options;\n    var yField = options.yField, yAxis = options.yAxis;\n    commonLimitInPlot(deepAssign({}, params, {\n        chart: findViewById(chart, FIRST_AXES_VIEW),\n        options: {\n            yAxis: yAxis[yField[0]],\n        },\n    }));\n    commonLimitInPlot(deepAssign({}, params, {\n        chart: findViewById(chart, SECOND_AXES_VIEW),\n        options: {\n            yAxis: yAxis[yField[1]],\n        },\n    }));\n    return params;\n}\n/**\n * theme\n * @param params\n */\nexport function theme(params) {\n    var chart = params.chart;\n    commonTheme(deepAssign({}, params, { chart: findViewById(chart, FIRST_AXES_VIEW) }));\n    commonTheme(deepAssign({}, params, { chart: findViewById(chart, SECOND_AXES_VIEW) }));\n    commonTheme(params);\n    return params;\n}\n/**\n * animation\n * @param params\n */\nexport function animation(params) {\n    var chart = params.chart;\n    commonAnimation(deepAssign({}, params, { chart: findViewById(chart, FIRST_AXES_VIEW) }));\n    commonAnimation(deepAssign({}, params, { chart: findViewById(chart, SECOND_AXES_VIEW) }));\n    return params;\n}\n/**\n * label 配置 (1. 设置 offset 偏移量默认值 2. leftView 偏移量需要 *= -1)\n * @param params\n */\nfunction label(params) {\n    var _this = this;\n    var _a, _b;\n    var chart = params.chart, options = params.options;\n    var label = options.label, yField = options.yField, layout = options.layout;\n    var firstView = findViewById(chart, FIRST_AXES_VIEW);\n    var secondView = findViewById(chart, SECOND_AXES_VIEW);\n    var leftGeometry = findGeometry(firstView, 'interval');\n    var rightGeometry = findGeometry(secondView, 'interval');\n    if (!label) {\n        leftGeometry.label(false);\n        rightGeometry.label(false);\n    }\n    else {\n        var callback = label.callback, cfg_1 = __rest(label, [\"callback\"]);\n        /** ---- 设置默认配置 ---- */\n        // 默认居中\n        if (!cfg_1.position) {\n            cfg_1.position = 'middle';\n        }\n        if (cfg_1.offset === undefined) {\n            cfg_1.offset = 2;\n        }\n        /** ---- leftView label 设置 ---- */\n        var leftLabelCfg = __assign({}, cfg_1);\n        if (isHorizontal(layout)) {\n            // 设置 textAlign 默认值\n            var textAlign = ((_a = leftLabelCfg.style) === null || _a === void 0 ? void 0 : _a.textAlign) || (cfg_1.position === 'middle' ? 'center' : 'left');\n            cfg_1.style = deepAssign({}, cfg_1.style, { textAlign: textAlign });\n            var textAlignMap = { left: 'right', right: 'left', center: 'center' };\n            leftLabelCfg.style = deepAssign({}, leftLabelCfg.style, { textAlign: textAlignMap[textAlign] });\n        }\n        else {\n            var positionMap_1 = { top: 'bottom', bottom: 'top', middle: 'middle' };\n            if (typeof cfg_1.position === 'string') {\n                cfg_1.position = positionMap_1[cfg_1.position];\n            }\n            else if (typeof cfg_1.position === 'function') {\n                cfg_1.position = function () {\n                    var args = [];\n                    for (var _i = 0; _i < arguments.length; _i++) {\n                        args[_i] = arguments[_i];\n                    }\n                    return positionMap_1[cfg_1.position.apply(_this, args)];\n                };\n            }\n            // 设置 textBaseline 默认值\n            var textBaseline = ((_b = leftLabelCfg.style) === null || _b === void 0 ? void 0 : _b.textBaseline) || 'bottom';\n            leftLabelCfg.style = deepAssign({}, leftLabelCfg.style, { textBaseline: textBaseline });\n            var textBaselineMap = { top: 'bottom', bottom: 'top', middle: 'middle' };\n            cfg_1.style = deepAssign({}, cfg_1.style, { textBaseline: textBaselineMap[textBaseline] });\n        }\n        leftGeometry.label({\n            fields: [yField[0]],\n            callback: callback,\n            cfg: transformLabel(leftLabelCfg),\n        });\n        rightGeometry.label({\n            fields: [yField[1]],\n            callback: callback,\n            cfg: transformLabel(cfg_1),\n        });\n    }\n    return params;\n}\n/**\n * 对称条形图适配器\n * @param chart\n * @param options\n */\nexport function adaptor(params) {\n    // flow 的方式处理所有的配置到 G2 API\n    return flow(geometry, meta, axis, limitInPlot, theme, label, tooltip, interaction, animation)(params);\n}\n//# sourceMappingURL=adaptor.js.map","import { __extends } from \"tslib\";\nimport { Event, VIEW_LIFE_CIRCLE } from '@antv/g2';\nimport { Plot } from '../../core/plot';\nimport { deepAssign, findViewById } from '../../utils';\nimport { adaptor } from './adaptor';\nimport { FIRST_AXES_VIEW, SECOND_AXES_VIEW, SERIES_FIELD_KEY } from './constant';\nimport { isHorizontal, syncViewPadding, transformData } from './utils';\nvar BidirectionalBar = /** @class */ (function (_super) {\n    __extends(BidirectionalBar, _super);\n    function BidirectionalBar() {\n        var _this = _super !== null && _super.apply(this, arguments) || this;\n        /** 图表类型 */\n        _this.type = 'bidirectional-bar';\n        return _this;\n    }\n    /**\n     * 获取 默认配置项\n     * 供外部使用\n     */\n    BidirectionalBar.getDefaultOptions = function () {\n        return deepAssign({}, _super.getDefaultOptions.call(this), {\n            syncViewPadding: syncViewPadding,\n        });\n    };\n    /**\n     * @override\n     */\n    BidirectionalBar.prototype.changeData = function (data) {\n        if (data === void 0) { data = []; }\n        this.chart.emit(VIEW_LIFE_CIRCLE.BEFORE_CHANGE_DATA, Event.fromData(this.chart, VIEW_LIFE_CIRCLE.BEFORE_CHANGE_DATA, null));\n        // 更新options\n        this.updateOption({ data: data });\n        var _a = this.options, xField = _a.xField, yField = _a.yField, layout = _a.layout;\n        // 处理数据\n        var groupData = transformData(xField, yField, SERIES_FIELD_KEY, data, isHorizontal(layout));\n        var firstViewData = groupData[0], secondViewData = groupData[1];\n        var firstView = findViewById(this.chart, FIRST_AXES_VIEW);\n        var secondView = findViewById(this.chart, SECOND_AXES_VIEW);\n        // 更新对应view的data\n        firstView.data(firstViewData);\n        secondView.data(secondViewData);\n        // 重新渲染\n        this.chart.render(true);\n        this.chart.emit(VIEW_LIFE_CIRCLE.AFTER_CHANGE_DATA, Event.fromData(this.chart, VIEW_LIFE_CIRCLE.AFTER_CHANGE_DATA, null));\n    };\n    BidirectionalBar.prototype.getDefaultOptions = function () {\n        return BidirectionalBar.getDefaultOptions();\n    };\n    /**\n     * 获取对称条形图的适配器\n     */\n    BidirectionalBar.prototype.getSchemaAdaptor = function () {\n        return adaptor;\n    };\n    /** 对称条形图分类字段 */\n    BidirectionalBar.SERIES_FIELD_KEY = SERIES_FIELD_KEY;\n    return BidirectionalBar;\n}(Plot));\nexport { BidirectionalBar };\n//# sourceMappingURL=index.js.map","import { map } from '@antv/util';\nimport { BOX_RANGE } from './constant';\n/**\n * @desc 将数据转换为 box 需要的的图表数据,如果yField为数组,从data中解构出对应数组值并写入data,否则直接返回data\n * @param data\n * @param yField\n */\nexport var transformData = function (data, yField) {\n    var newData = data;\n    // formate data when `yField` is Array\n    if (Array.isArray(yField)) {\n        var low_1 = yField[0], q1_1 = yField[1], median_1 = yField[2], q3_1 = yField[3], high_1 = yField[4];\n        newData = map(data, function (obj) {\n            obj[BOX_RANGE] = [obj[low_1], obj[q1_1], obj[median_1], obj[q3_1], obj[high_1]];\n            return obj;\n        });\n    }\n    return newData;\n};\n//# sourceMappingURL=utils.js.map","import { __assign } from \"tslib\";\nimport { isArray } from '@antv/util';\nimport { animation, annotation, interaction, theme, tooltip } from '../../adaptor/common';\nimport { point, schema } from '../../adaptor/geometries';\nimport { AXIS_META_CONFIG_KEYS } from '../../constant';\nimport { deepAssign, flow, pick } from '../../utils';\nimport { BOX_RANGE, BOX_SYNC_NAME, OUTLIERS_VIEW_ID } from './constant';\nimport { transformData } from './utils';\n/**\n * 字段\n * @param params\n */\nfunction field(params) {\n    var chart = params.chart, options = params.options;\n    var xField = options.xField, yField = options.yField, groupField = options.groupField, color = options.color, tooltip = options.tooltip, boxStyle = options.boxStyle;\n    chart.data(transformData(options.data, yField));\n    var yFieldName = isArray(yField) ? BOX_RANGE : yField;\n    var rawFields = yField ? (isArray(yField) ? yField : [yField]) : [];\n    var tooltipOptions = tooltip;\n    if (tooltipOptions !== false) {\n        tooltipOptions = deepAssign({}, { fields: isArray(yField) ? yField : [] }, tooltipOptions);\n    }\n    var ext = schema(deepAssign({}, params, {\n        options: {\n            xField: xField,\n            yField: yFieldName,\n            seriesField: groupField,\n            tooltip: tooltipOptions,\n            rawFields: rawFields,\n            // 只有异常点视图展示 label\n            label: false,\n            schema: {\n                shape: 'box',\n                color: color,\n                style: boxStyle,\n            },\n        },\n    })).ext;\n    if (groupField) {\n        ext.geometry.adjust('dodge');\n    }\n    return params;\n}\n/**\n * 创建异常点 view\n */\nfunction outliersPoint(params) {\n    var chart = params.chart, options = params.options;\n    var xField = options.xField, data = options.data, outliersField = options.outliersField, outliersStyle = options.outliersStyle, padding = options.padding, label = options.label;\n    if (!outliersField)\n        return params;\n    var outliersView = chart.createView({ padding: padding, id: OUTLIERS_VIEW_ID });\n    var outliersViewData = data.reduce(function (ret, datum) {\n        var outliersData = datum[outliersField];\n        outliersData.forEach(function (d) {\n            var _a;\n            return ret.push(__assign(__assign({}, datum), (_a = {}, _a[outliersField] = d, _a)));\n        });\n        return ret;\n    }, []);\n    outliersView.data(outliersViewData);\n    point({\n        chart: outliersView,\n        options: {\n            xField: xField,\n            yField: outliersField,\n            point: { shape: 'circle', style: outliersStyle },\n            label: label,\n        },\n    });\n    outliersView.axis(false);\n    return params;\n}\n/**\n * meta 配置\n * @param params\n */\nfunction meta(params) {\n    var _a, _b;\n    var chart = params.chart, options = params.options;\n    var meta = options.meta, xAxis = options.xAxis, yAxis = options.yAxis, xField = options.xField, yField = options.yField, outliersField = options.outliersField;\n    var yFieldName = Array.isArray(yField) ? BOX_RANGE : yField;\n    var baseMeta = {};\n    // make yField and outliersField share y mate\n    if (outliersField) {\n        var syncName = BOX_SYNC_NAME;\n        baseMeta = (_a = {},\n            _a[outliersField] = { sync: syncName, nice: true },\n            _a[yFieldName] = { sync: syncName, nice: true },\n            _a);\n    }\n    var scales = deepAssign(baseMeta, meta, (_b = {},\n        _b[xField] = pick(xAxis, AXIS_META_CONFIG_KEYS),\n        _b[yFieldName] = pick(yAxis, AXIS_META_CONFIG_KEYS),\n        _b));\n    chart.scale(scales);\n    return params;\n}\n/**\n * axis 配置\n * @param params\n */\nfunction axis(params) {\n    var chart = params.chart, options = params.options;\n    var xAxis = options.xAxis, yAxis = options.yAxis, xField = options.xField, yField = options.yField;\n    var yFieldName = Array.isArray(yField) ? BOX_RANGE : yField;\n    // 为 false 则是不显示轴\n    if (xAxis === false) {\n        chart.axis(xField, false);\n    }\n    else {\n        chart.axis(xField, xAxis);\n    }\n    if (yAxis === false) {\n        chart.axis(BOX_RANGE, false);\n    }\n    else {\n        chart.axis(yFieldName, yAxis);\n    }\n    return params;\n}\n/**\n * legend 配置\n * @param params\n */\nexport function legend(params) {\n    var chart = params.chart, options = params.options;\n    var legend = options.legend, groupField = options.groupField;\n    if (groupField) {\n        if (legend) {\n            chart.legend(groupField, legend);\n        }\n        else {\n            // Grouped Box Chart default has legend, and it's position is `bottom`\n            chart.legend(groupField, { position: 'bottom' });\n        }\n    }\n    else {\n        chart.legend(false);\n    }\n    return params;\n}\n/**\n * 箱型图适配器\n * @param params\n */\nexport function adaptor(params) {\n    return flow(field, outliersPoint, meta, axis, legend, tooltip, annotation(), interaction, animation, theme)(params);\n}\n//# sourceMappingURL=adaptor.js.map","/**\n * 获取分类字段 key 值 一个分类值的时候， 返回非索引 key 值，在 tooltip 不做索引区分\n * @param values 数据量\n * @param field 指标字段\n * @param index 索引\n * @returns string\n */\nfunction getSeriesFieldKey(values, field, index) {\n    return values.length > 1 ? \"\".concat(field, \"_\").concat(index) : \"\".concat(field);\n}\n/**\n * bullet 处理数据\n * @param options\n */\nexport function transformData(options) {\n    var data = options.data, xField = options.xField, measureField = options.measureField, rangeField = options.rangeField, targetField = options.targetField, layout = options.layout;\n    var ds = [];\n    var scales = [];\n    data.forEach(function (item, index) {\n        // 构建 title * range\n        var rangeValues = [item[rangeField]].flat();\n        rangeValues.sort(function (a, b) { return a - b; });\n        rangeValues.forEach(function (d, i) {\n            var _a;\n            var range = i === 0 ? d : rangeValues[i] - rangeValues[i - 1];\n            ds.push((_a = {\n                    rKey: \"\".concat(rangeField, \"_\").concat(i)\n                },\n                _a[xField] = xField ? item[xField] : String(index),\n                _a[rangeField] = range,\n                _a));\n        });\n        // 构建 title * measure\n        var measureValues = [item[measureField]].flat();\n        measureValues.forEach(function (d, i) {\n            var _a;\n            ds.push((_a = {\n                    mKey: getSeriesFieldKey(measureValues, measureField, i)\n                },\n                _a[xField] = xField ? item[xField] : String(index),\n                _a[measureField] = d,\n                _a));\n        });\n        // 构建 title * target\n        var targetValues = [item[targetField]].flat();\n        targetValues.forEach(function (d, i) {\n            var _a;\n            ds.push((_a = {\n                    tKey: getSeriesFieldKey(targetValues, targetField, i)\n                },\n                _a[xField] = xField ? item[xField] : String(index),\n                _a[targetField] = d,\n                _a));\n        });\n        // 为了取最大值和最小值，先存储\n        scales.push(item[rangeField], item[measureField], item[targetField]);\n    });\n    // scales 是嵌套的需要拍平\n    var min = Math.min.apply(Math, scales.flat(Infinity));\n    var max = Math.max.apply(Math, scales.flat(Infinity));\n    // min 大于 0 从 0 开始\n    min = min > 0 ? 0 : min;\n    // 垂直情况，需要反转数据\n    if (layout === 'vertical') {\n        ds.reverse();\n    }\n    return { min: min, max: max, ds: ds };\n}\n//# sourceMappingURL=utils.js.map","import { __assign } from \"tslib\";\nimport { get, isFunction } from '@antv/util';\nimport { animation, interaction, scale, theme, tooltip } from '../../adaptor/common';\nimport { interval, point } from '../../adaptor/geometries';\nimport { deepAssign, flow, transformLabel } from '../../utils';\nimport { transformData } from './utils';\n/**\n * geometry 处理\n * @param params\n */\nfunction geometry(params) {\n    var chart = params.chart, options = params.options;\n    var bulletStyle = options.bulletStyle, targetField = options.targetField, rangeField = options.rangeField, measureField = options.measureField, xField = options.xField, color = options.color, layout = options.layout, size = options.size, label = options.label;\n    // 处理数据\n    var _a = transformData(options), min = _a.min, max = _a.max, ds = _a.ds;\n    chart.data(ds);\n    // rangeGeometry\n    var r = deepAssign({}, params, {\n        options: {\n            xField: xField,\n            yField: rangeField,\n            seriesField: 'rKey',\n            isStack: true,\n            label: get(label, 'range'),\n            interval: {\n                color: get(color, 'range'),\n                style: get(bulletStyle, 'range'),\n                size: get(size, 'range'),\n            },\n        },\n    });\n    interval(r);\n    // 范围值的 tooltip 隐藏掉\n    chart.geometries[0].tooltip(false);\n    // measureGeometry\n    var m = deepAssign({}, params, {\n        options: {\n            xField: xField,\n            yField: measureField,\n            seriesField: 'mKey',\n            isStack: true,\n            label: get(label, 'measure'),\n            interval: {\n                color: get(color, 'measure'),\n                style: get(bulletStyle, 'measure'),\n                size: get(size, 'measure'),\n            },\n        },\n    });\n    interval(m);\n    // targetGeometry\n    var t = deepAssign({}, params, {\n        options: {\n            xField: xField,\n            yField: targetField,\n            seriesField: 'tKey',\n            label: get(label, 'target'),\n            point: {\n                color: get(color, 'target'),\n                style: get(bulletStyle, 'target'),\n                size: isFunction(get(size, 'target'))\n                    ? function (data) { return get(size, 'target')(data) / 2; }\n                    : get(size, 'target') / 2,\n                shape: layout === 'horizontal' ? 'line' : 'hyphen',\n            },\n        },\n    });\n    point(t);\n    // 水平的时候，要转换坐标轴\n    if (layout === 'horizontal') {\n        chart.coordinate().transpose();\n    }\n    return __assign(__assign({}, params), { ext: { data: { min: min, max: max } } });\n}\n/**\n * meta 配置\n * @param params\n */\nexport function meta(params) {\n    var _a, _b;\n    var options = params.options, ext = params.ext;\n    var xAxis = options.xAxis, yAxis = options.yAxis, targetField = options.targetField, rangeField = options.rangeField, measureField = options.measureField, xField = options.xField;\n    var extData = ext.data;\n    return flow(scale((_a = {},\n        _a[xField] = xAxis,\n        _a[measureField] = yAxis,\n        _a), (_b = {},\n        _b[measureField] = { min: extData === null || extData === void 0 ? void 0 : extData.min, max: extData === null || extData === void 0 ? void 0 : extData.max, sync: true },\n        _b[targetField] = {\n            sync: \"\".concat(measureField),\n        },\n        _b[rangeField] = {\n            sync: \"\".concat(measureField),\n        },\n        _b)))(params);\n}\n/**\n * axis 配置\n * @param params\n */\nfunction axis(params) {\n    var chart = params.chart, options = params.options;\n    var xAxis = options.xAxis, yAxis = options.yAxis, xField = options.xField, measureField = options.measureField, rangeField = options.rangeField, targetField = options.targetField;\n    chart.axis(\"\".concat(rangeField), false);\n    chart.axis(\"\".concat(targetField), false);\n    // 为 false 则是不显示轴\n    if (xAxis === false) {\n        chart.axis(\"\".concat(xField), false);\n    }\n    else {\n        chart.axis(\"\".concat(xField), xAxis);\n    }\n    if (yAxis === false) {\n        chart.axis(\"\".concat(measureField), false);\n    }\n    else {\n        chart.axis(\"\".concat(measureField), yAxis);\n    }\n    return params;\n}\n/**\n * legend 配置\n * @param params\n */\nfunction legend(params) {\n    var chart = params.chart, options = params.options;\n    var legend = options.legend;\n    chart.removeInteraction('legend-filter');\n    // @TODO 后续看是否内部自定义一个 legend\n    chart.legend(legend);\n    // 默认关闭掉所在 color 字段的 legend, 从而不影响自定义的legend\n    chart.legend('rKey', false);\n    chart.legend('mKey', false);\n    chart.legend('tKey', false);\n    return params;\n}\n/**\n * label 配置\n * @param params\n */\nfunction label(params) {\n    var chart = params.chart, options = params.options;\n    var label = options.label, measureField = options.measureField, targetField = options.targetField, rangeField = options.rangeField;\n    var _a = chart.geometries, rangeGeometry = _a[0], measureGeometry = _a[1], targetGeometry = _a[2];\n    if (get(label, 'range')) {\n        rangeGeometry.label(\"\".concat(rangeField), __assign({ layout: [{ type: 'limit-in-plot' }] }, transformLabel(label.range)));\n    }\n    else {\n        rangeGeometry.label(false);\n    }\n    if (get(label, 'measure')) {\n        measureGeometry.label(\"\".concat(measureField), __assign({ layout: [{ type: 'limit-in-plot' }] }, transformLabel(label.measure)));\n    }\n    else {\n        measureGeometry.label(false);\n    }\n    if (get(label, 'target')) {\n        targetGeometry.label(\"\".concat(targetField), __assign({ layout: [{ type: 'limit-in-plot' }] }, transformLabel(label.target)));\n    }\n    else {\n        targetGeometry.label(false);\n    }\n    return params;\n}\n/**\n * 子弹图适配器\n * @param chart\n * @param options\n */\nexport function adaptor(params) {\n    // flow 的方式处理所有的配置到 G2 API\n    flow(geometry, meta, axis, legend, theme, label, tooltip, interaction, animation)(params);\n}\n//# sourceMappingURL=adaptor.js.map","import { __extends } from \"tslib\";\nimport { Plot } from '../../core/plot';\nimport { adaptor } from './adaptor';\nimport { DEFAULT_OPTIONS, OUTLIERS_VIEW_ID } from './constant';\nimport { transformData } from './utils';\nvar Box = /** @class */ (function (_super) {\n    __extends(Box, _super);\n    function Box() {\n        var _this = _super !== null && _super.apply(this, arguments) || this;\n        /** 图表类型 */\n        _this.type = 'box';\n        return _this;\n    }\n    /**\n     * 获取 默认配置项\n     * 供外部使用\n     */\n    Box.getDefaultOptions = function () {\n        return DEFAULT_OPTIONS;\n    };\n    /**\n     * @override\n     * @param data\n     */\n    Box.prototype.changeData = function (data) {\n        this.updateOption({ data: data });\n        var yField = this.options.yField;\n        var outliersView = this.chart.views.find(function (v) { return v.id === OUTLIERS_VIEW_ID; });\n        if (outliersView) {\n            outliersView.data(data);\n        }\n        this.chart.changeData(transformData(data, yField));\n    };\n    /**\n     * 获取 箱型图 默认配置项\n     */\n    Box.prototype.getDefaultOptions = function () {\n        return Box.getDefaultOptions();\n    };\n    /**\n     * 获取 箱型图 的适配器\n     */\n    Box.prototype.getSchemaAdaptor = function () {\n        return adaptor;\n    };\n    return Box;\n}(Plot));\nexport { Box };\n//# sourceMappingURL=index.js.map","import { Plot } from '../../core/plot';\nimport { deepAssign } from '../../utils';\n/**\n * 默认配置项\n */\nexport var DEFAULT_OPTIONS = deepAssign({}, Plot.getDefaultOptions(), {\n    layout: 'horizontal',\n    size: {\n        range: 30,\n        measure: 20,\n        target: 20,\n    },\n    xAxis: {\n        tickLine: false,\n        line: null,\n    },\n    bulletStyle: {\n        range: {\n            fillOpacity: 0.5,\n        },\n    },\n    label: {\n        measure: {\n            position: 'right',\n        },\n    },\n    tooltip: {\n        // 默认关闭\n        showMarkers: false,\n    },\n});\n//# sourceMappingURL=constant.js.map","import { __extends } from \"tslib\";\nimport { Plot } from '../../core/plot';\nimport { adaptor, meta } from './adaptor';\nimport { DEFAULT_OPTIONS } from './constant';\nimport { transformData } from './utils';\nvar Bullet = /** @class */ (function (_super) {\n    __extends(Bullet, _super);\n    function Bullet() {\n        var _this = _super !== null && _super.apply(this, arguments) || this;\n        /** 图表类型 */\n        _this.type = 'bullet';\n        return _this;\n    }\n    /**\n     * 获取 子弹图 默认配置项\n     * 供外部使用\n     */\n    Bullet.getDefaultOptions = function () {\n        return DEFAULT_OPTIONS;\n    };\n    Bullet.prototype.changeData = function (data) {\n        this.updateOption({ data: data });\n        var _a = transformData(this.options), min = _a.min, max = _a.max, ds = _a.ds;\n        // 处理scale\n        meta({ options: this.options, ext: { data: { min: min, max: max } }, chart: this.chart });\n        this.chart.changeData(ds);\n    };\n    /**\n     * 获取子弹图的适配器\n     */\n    Bullet.prototype.getSchemaAdaptor = function () {\n        return adaptor;\n    };\n    /**\n     * 获取 子弹图 默认配置\n     */\n    Bullet.prototype.getDefaultOptions = function () {\n        return Bullet.getDefaultOptions();\n    };\n    return Bullet;\n}(Plot));\nexport { Bullet };\n//# sourceMappingURL=index.js.map","/*\n * for Arc Diagram (edges without weight) / Chord Diagram (edges with source and target weight)\n * graph data required (nodes, edges)\n */\nimport { assign, forIn, isFunction } from '@antv/util';\nvar DEFAULT_OPTIONS = {\n    y: 0,\n    nodeWidthRatio: 0.05,\n    weight: false,\n    nodePaddingRatio: 0.1,\n    id: function (node) { return node.id; },\n    source: function (edge) { return edge.source; },\n    target: function (edge) { return edge.target; },\n    sourceWeight: function (edge) { return edge.value || 1; },\n    targetWeight: function (edge) { return edge.value || 1; },\n    sortBy: null, // optional, id | weight | frequency | {function}\n};\n/**\n * 处理节点的value、edges\n * @param nodeById\n * @param edges\n * @param options\n */\nfunction processGraph(nodeById, edges, options) {\n    forIn(nodeById, function (node, id) {\n        // in edges, out edges\n        node.inEdges = edges.filter(function (edge) { return \"\".concat(options.target(edge)) === \"\".concat(id); });\n        node.outEdges = edges.filter(function (edge) { return \"\".concat(options.source(edge)) === \"\".concat(id); });\n        // frequency\n        node.edges = node.outEdges.concat(node.inEdges);\n        node.frequency = node.edges.length;\n        // weight\n        node.value = 0;\n        node.inEdges.forEach(function (edge) {\n            node.value += options.targetWeight(edge);\n        });\n        node.outEdges.forEach(function (edge) {\n            node.value += options.sourceWeight(edge);\n        });\n    });\n}\n/**\n * 节点排序\n * @param nodes\n * @param options\n */\nfunction sortNodes(nodes, options) {\n    var sortMethods = {\n        weight: function (a, b) { return b.value - a.value; },\n        frequency: function (a, b) { return b.frequency - a.frequency; },\n        id: function (a, b) { return \"\".concat(options.id(a)).localeCompare(\"\".concat(options.id(b))); },\n    };\n    var method = sortMethods[options.sortBy];\n    if (!method && isFunction(options.sortBy)) {\n        method = options.sortBy;\n    }\n    if (method) {\n        nodes.sort(method);\n    }\n}\nfunction layoutNodes(nodes, options) {\n    var len = nodes.length;\n    if (!len) {\n        throw new TypeError(\"Invalid nodes: it's empty!\");\n    }\n    if (options.weight) {\n        var nodePaddingRatio_1 = options.nodePaddingRatio;\n        if (nodePaddingRatio_1 < 0 || nodePaddingRatio_1 >= 1) {\n            throw new TypeError('Invalid nodePaddingRatio: it must be in range [0, 1)!');\n        }\n        var margin_1 = nodePaddingRatio_1 / (2 * len);\n        var nodeWidthRatio_1 = options.nodeWidthRatio;\n        if (nodeWidthRatio_1 <= 0 || nodeWidthRatio_1 >= 1) {\n            throw new TypeError('Invalid nodeWidthRatio: it must be in range (0, 1)!');\n        }\n        var totalValue_1 = 0;\n        nodes.forEach(function (node) {\n            totalValue_1 += node.value;\n        });\n        nodes.forEach(function (node) {\n            node.weight = node.value / totalValue_1;\n            node.width = node.weight * (1 - nodePaddingRatio_1);\n            node.height = nodeWidthRatio_1;\n        });\n        nodes.forEach(function (node, index) {\n            // x\n            var deltaX = 0;\n            for (var i = index - 1; i >= 0; i--) {\n                deltaX += nodes[i].width + 2 * margin_1;\n            }\n            var minX = (node.minX = margin_1 + deltaX);\n            var maxX = (node.maxX = node.minX + node.width);\n            var minY = (node.minY = options.y - nodeWidthRatio_1 / 2);\n            var maxY = (node.maxY = minY + nodeWidthRatio_1);\n            node.x = [minX, maxX, maxX, minX];\n            node.y = [minY, minY, maxY, maxY];\n            /* points\n             * 3---2\n             * |   |\n             * 0---1\n             */\n            // node.x = minX + 0.5 * node.width;\n            // node.y = options.y;\n        });\n    }\n    else {\n        var deltaX_1 = 1 / len;\n        nodes.forEach(function (node, index) {\n            node.x = (index + 0.5) * deltaX_1;\n            node.y = options.y;\n        });\n    }\n    return nodes;\n}\nfunction locatingEdges(nodeById, edges, options) {\n    if (options.weight) {\n        var valueById_1 = {};\n        forIn(nodeById, function (node, id) {\n            valueById_1[id] = node.value;\n        });\n        edges.forEach(function (edge) {\n            var sId = options.source(edge);\n            var tId = options.target(edge);\n            var sNode = nodeById[sId];\n            var tNode = nodeById[tId];\n            if (sNode && tNode) {\n                var sValue = valueById_1[sId];\n                var currentSValue = options.sourceWeight(edge);\n                var sStart = sNode.minX + ((sNode.value - sValue) / sNode.value) * sNode.width;\n                var sEnd = sStart + (currentSValue / sNode.value) * sNode.width;\n                valueById_1[sId] -= currentSValue;\n                var tValue = valueById_1[tId];\n                var currentTValue = options.targetWeight(edge);\n                var tStart = tNode.minX + ((tNode.value - tValue) / tNode.value) * tNode.width;\n                var tEnd = tStart + (currentTValue / tNode.value) * tNode.width;\n                valueById_1[tId] -= currentTValue;\n                var y = options.y;\n                edge.x = [sStart, sEnd, tStart, tEnd];\n                edge.y = [y, y, y, y];\n                // 将edge的source与target的id换为 sourceNode与targetNode\n                edge.source = sNode;\n                edge.target = tNode;\n            }\n        });\n    }\n    else {\n        edges.forEach(function (edge) {\n            var sNode = nodeById[options.source(edge)];\n            var tNode = nodeById[options.target(edge)];\n            if (sNode && tNode) {\n                edge.x = [sNode.x, tNode.x];\n                edge.y = [sNode.y, tNode.y];\n                // 将edge的source与target的id换为 sourceNode与targetNode\n                edge.source = sNode;\n                edge.target = tNode;\n            }\n        });\n    }\n    return edges;\n}\nexport function getDefaultOptions(options) {\n    return assign({}, DEFAULT_OPTIONS, options);\n}\nexport function chordLayout(chordLayoutOptions, chordLayoutInputData) {\n    var options = getDefaultOptions(chordLayoutOptions);\n    var nodeById = {};\n    var nodes = chordLayoutInputData.nodes;\n    var links = chordLayoutInputData.links;\n    nodes.forEach(function (node) {\n        var id = options.id(node);\n        nodeById[id] = node;\n    });\n    processGraph(nodeById, links, options);\n    sortNodes(nodes, options);\n    var outputNodes = layoutNodes(nodes, options);\n    var outputLinks = locatingEdges(nodeById, links, options);\n    return {\n        nodes: outputNodes,\n        links: outputLinks,\n    };\n}\n//# sourceMappingURL=chord.js.map","import { get } from '@antv/util';\nexport var X_FIELD = 'x';\nexport var Y_FIELD = 'y';\nexport var NODE_COLOR_FIELD = 'name';\nexport var EDGE_COLOR_FIELD = 'source';\nexport var DEFAULT_OPTIONS = {\n    nodeStyle: {\n        opacity: 1,\n        fillOpacity: 1,\n        lineWidth: 1,\n    },\n    edgeStyle: {\n        opacity: 0.5,\n        lineWidth: 2,\n    },\n    label: {\n        fields: ['x', 'name'],\n        callback: function (x, name) {\n            var centerX = (x[0] + x[1]) / 2;\n            var offsetX = centerX > 0.5 ? -4 : 4;\n            return {\n                offsetX: offsetX,\n                content: name,\n            };\n        },\n        labelEmit: true,\n        style: {\n            fill: '#8c8c8c',\n        },\n    },\n    tooltip: {\n        showTitle: false,\n        showMarkers: false,\n        fields: ['source', 'target', 'value', 'isNode'],\n        // 内置：node 不显示 tooltip (业务层自行处理)，edge 显示 tooltip\n        showContent: function (items) {\n            return !get(items, [0, 'data', 'isNode']);\n        },\n        formatter: function (datum) {\n            var source = datum.source, target = datum.target, value = datum.value;\n            return {\n                name: \"\".concat(source, \" -> \").concat(target),\n                value: value,\n            };\n        },\n    },\n    interactions: [\n        {\n            type: 'element-active',\n        },\n    ],\n    weight: true,\n    nodePaddingRatio: 0.1,\n    nodeWidthRatio: 0.05,\n};\n//# sourceMappingURL=constant.js.map","import { __assign, __spreadArray } from \"tslib\";\nimport { interaction, state, theme } from '../../adaptor/common';\nimport { edge, polygon } from '../../adaptor/geometries';\nimport { addViewAnimation, flow, getAllGeometriesRecursively, pick, transformDataToNodeLinkData } from '../../utils';\nimport { chordLayout } from '../../utils/transform/chord';\nimport { EDGE_COLOR_FIELD, NODE_COLOR_FIELD, X_FIELD, Y_FIELD } from './constant';\nfunction transformData(params) {\n    // 将弦图数据放到ext中，nodeGeometry edgeGeometry使用\n    var options = params.options;\n    var data = options.data, sourceField = options.sourceField, targetField = options.targetField, weightField = options.weightField, nodePaddingRatio = options.nodePaddingRatio, nodeWidthRatio = options.nodeWidthRatio, _a = options.rawFields, rawFields = _a === void 0 ? [] : _a;\n    // 将数据转换为node link格式\n    var chordLayoutInputData = transformDataToNodeLinkData(data, sourceField, targetField, weightField);\n    var _b = chordLayout({ weight: true, nodePaddingRatio: nodePaddingRatio, nodeWidthRatio: nodeWidthRatio }, chordLayoutInputData), nodes = _b.nodes, links = _b.links;\n    // 1. 生成绘制node使用数据\n    var nodesData = nodes.map(function (node) {\n        return __assign(__assign({}, pick(node, __spreadArray(['id', 'x', 'y', 'name'], rawFields, true))), { isNode: true });\n    });\n    // 2. 生成 edge 使用数据 （同桑基图）\n    var edgesData = links.map(function (link) {\n        return __assign(__assign({ source: link.source.name, target: link.target.name, name: link.source.name || link.target.name }, pick(link, __spreadArray(['x', 'y', 'value'], rawFields, true))), { isNode: false });\n    });\n    return __assign(__assign({}, params), { ext: __assign(__assign({}, params.ext), { \n            // 将chordData放到ext中，方便下面的geometry使用\n            chordData: { nodesData: nodesData, edgesData: edgesData } }) });\n}\n/**\n * scale配置\n * @param params 参数\n */\nfunction scale(params) {\n    var _a;\n    var chart = params.chart;\n    chart.scale((_a = {\n            x: { sync: true, nice: true },\n            y: { sync: true, nice: true, max: 1 }\n        },\n        _a[NODE_COLOR_FIELD] = { sync: 'color' },\n        _a[EDGE_COLOR_FIELD] = { sync: 'color' },\n        _a));\n    return params;\n}\n/**\n * axis配置\n * @param params 参数\n */\nfunction axis(params) {\n    var chart = params.chart;\n    chart.axis(false);\n    return params;\n}\n/**\n * legend配置\n * @param params 参数\n */\nfunction legend(params) {\n    var chart = params.chart;\n    chart.legend(false);\n    return params;\n}\n/**\n * tooltip配置\n * @param params 参数\n */\nfunction tooltip(params) {\n    var chart = params.chart, options = params.options;\n    var tooltip = options.tooltip;\n    chart.tooltip(tooltip);\n    return params;\n}\n/**\n * coordinate配置\n * @param params 参数\n */\nfunction coordinate(params) {\n    var chart = params.chart;\n    chart.coordinate('polar').reflect('y');\n    return params;\n}\n/**\n * nodeGeometry配置\n * @param params 参数\n */\nfunction nodeGeometry(params) {\n    // node view\n    var chart = params.chart, options = params.options;\n    var nodesData = params.ext.chordData.nodesData;\n    var nodeStyle = options.nodeStyle, label = options.label, tooltip = options.tooltip;\n    var nodeView = chart.createView();\n    nodeView.data(nodesData);\n    // 面\n    polygon({\n        chart: nodeView,\n        options: {\n            xField: X_FIELD,\n            yField: Y_FIELD,\n            seriesField: NODE_COLOR_FIELD,\n            polygon: {\n                style: nodeStyle,\n            },\n            label: label,\n            tooltip: tooltip,\n        },\n    });\n    return params;\n}\n/**\n * edgeGeometry配置\n * @param params 参数\n */\nfunction edgeGeometry(params) {\n    var chart = params.chart, options = params.options;\n    var edgesData = params.ext.chordData.edgesData;\n    var edgeStyle = options.edgeStyle, tooltip = options.tooltip;\n    var edgeView = chart.createView();\n    edgeView.data(edgesData);\n    // edge\n    var edgeOptions = {\n        xField: X_FIELD,\n        yField: Y_FIELD,\n        seriesField: EDGE_COLOR_FIELD,\n        edge: {\n            style: edgeStyle,\n            shape: 'arc',\n        },\n        tooltip: tooltip,\n    };\n    edge({\n        chart: edgeView,\n        options: edgeOptions,\n    });\n    return params;\n}\nfunction animation(params) {\n    var chart = params.chart, options = params.options;\n    var animation = options.animation;\n    addViewAnimation(chart, animation, getAllGeometriesRecursively(chart));\n    return params;\n}\n/**\n * 弦图适配器\n * @param chart\n * @param options\n */\nexport function adaptor(params) {\n    // flow 的方式处理所有的配置到 G2 API\n    return flow(theme, transformData, coordinate, scale, axis, legend, tooltip, edgeGeometry, nodeGeometry, interaction, state, animation)(params);\n}\n//# sourceMappingURL=adaptor.js.map","import { __extends } from \"tslib\";\nimport { Plot } from '../../core/plot';\nimport { adaptor } from './adaptor';\nimport { DEFAULT_OPTIONS } from './constant';\n/**\n *  弦图 Chord\n */\nvar Chord = /** @class */ (function (_super) {\n    __extends(Chord, _super);\n    function Chord() {\n        var _this = _super !== null && _super.apply(this, arguments) || this;\n        /** 图表类型 */\n        _this.type = 'chord';\n        return _this;\n    }\n    /**\n     * 获取 面积图 默认配置项\n     * 供外部使用\n     */\n    Chord.getDefaultOptions = function () {\n        return DEFAULT_OPTIONS;\n    };\n    Chord.prototype.getDefaultOptions = function () {\n        return Chord.getDefaultOptions();\n    };\n    /**\n     * 获取适配器\n     */\n    Chord.prototype.getSchemaAdaptor = function () {\n        return adaptor;\n    };\n    return Chord;\n}(Plot));\nexport { Chord };\n//# sourceMappingURL=index.js.map","/** 默认的源字段 */\nexport var RAW_FIELDS = ['x', 'y', 'r', 'name', 'value', 'path', 'depth'];\nexport var DEFAULT_OPTIONS = {\n    // 默认按照 name 字段对颜色进行分类\n    colorField: 'name',\n    autoFit: true,\n    pointStyle: {\n        lineWidth: 0,\n        stroke: '#fff',\n    },\n    // 默认不开启图例\n    legend: false,\n    hierarchyConfig: {\n        size: [1, 1],\n        padding: 0,\n    },\n    label: {\n        fields: ['name'],\n        layout: {\n            type: 'limit-in-shape',\n        },\n    },\n    tooltip: {\n        showMarkers: false,\n        showTitle: false,\n    },\n    // 默认不可以下钻\n    drilldown: { enabled: false },\n};\n//# sourceMappingURL=constant.js.map","import { __assign, __extends } from \"tslib\";\nimport { Action, Util } from '@antv/g2';\nimport { get, isNil, last, size } from '@antv/util';\nimport { deepAssign } from '../../utils/deep-assign';\n// 面包屑文字和分割符'/'之间的距离\nvar PADDING = 4;\n// 面包屑位置距离树图的距离\nvar PADDING_LEFT = 0;\n// 面包屑位置距离树图的顶部距离\nexport var PADDING_TOP = 5;\n/** Group name of breadCrumb: 面包屑 */\nexport var BREAD_CRUMB_NAME = 'drilldown-bread-crumb';\n// 面包屑默认配置\nexport var DEFAULT_BREAD_CRUMB_CONFIG = {\n    /** 位置，默认：左上角 */\n    position: 'top-left',\n    dividerText: '/',\n    textStyle: {\n        fontSize: 12,\n        fill: 'rgba(0, 0, 0, 0.65)',\n        cursor: 'pointer',\n    },\n    activeTextStyle: {\n        fill: '#87B5FF',\n    },\n};\n/**\n * hierarchy 数据转换的参数\n */\nexport var HIERARCHY_DATA_TRANSFORM_PARAMS = 'hierarchy-data-transform-params';\n/**\n * @description 下钻交互的 action\n * @author liuzhenying\n *\n * 适用于：hierarchy plot\n */\nvar DrillDownAction = /** @class */ (function (_super) {\n    __extends(DrillDownAction, _super);\n    function DrillDownAction() {\n        var _this = _super !== null && _super.apply(this, arguments) || this;\n        /** Action name */\n        _this.name = 'drill-down';\n        // 存储历史下钻数据\n        _this.historyCache = [];\n        // 面包屑 group\n        _this.breadCrumbGroup = null;\n        // 面包屑基础配置\n        _this.breadCrumbCfg = DEFAULT_BREAD_CRUMB_CONFIG;\n        return _this;\n    }\n    /**\n     * 点击事件, 下钻数据，并绘制面包屑\n     */\n    DrillDownAction.prototype.click = function () {\n        var data = get(this.context, ['event', 'data', 'data']);\n        if (!data)\n            return false;\n        this.drill(data);\n        this.drawBreadCrumb();\n    };\n    /**\n     * 重置位置，初始化及触发 chart  afterchangesize 回调时使用\n     */\n    DrillDownAction.prototype.resetPosition = function () {\n        // 当在第一层级未绘制面包屑，此时 changedata 触发 resetPosition 函数，需判断 this.breadCrumbGroup 是否存在\n        if (!this.breadCrumbGroup)\n            return;\n        var coordinate = this.context.view.getCoordinate();\n        var breadCrumbGroup = this.breadCrumbGroup;\n        var bbox = breadCrumbGroup.getBBox();\n        var position = this.getButtonCfg().position;\n        // @todo 后续抽取一个函数来处理，以及增加 margin 或者 padding 的设置\n        // 非 polar 的，需要使用 coordinate，除却图表组件\n        var point = { x: coordinate.start.x, y: coordinate.end.y - (bbox.height + PADDING_TOP * 2) };\n        if (coordinate.isPolar) {\n            // 默认，左上角直接出发\n            point = { x: 0, y: 0 };\n        }\n        if (position === 'bottom-left') {\n            // 涉及到坐标反转的问题\n            point = { x: coordinate.start.x, y: coordinate.start.y };\n        }\n        /** PADDING_LEFT, PADDING_TOP 与画布边缘的距离 */\n        var matrix = Util.transform(null, [['t', point.x + PADDING_LEFT, point.y + bbox.height + PADDING_TOP]]);\n        breadCrumbGroup.setMatrix(matrix);\n    };\n    /**\n     * 返回上一层\n     */\n    DrillDownAction.prototype.back = function () {\n        if (size(this.historyCache)) {\n            this.backTo(this.historyCache.slice(0, -1));\n        }\n    };\n    /**\n     * 重置\n     */\n    DrillDownAction.prototype.reset = function () {\n        if (this.historyCache[0]) {\n            this.backTo(this.historyCache.slice(0, 1));\n        }\n        // 清空\n        this.historyCache = [];\n        this.hideCrumbGroup();\n    };\n    /**\n     * 下钻数据并更新 view 显示层\n     * @param nodeInfo 下钻数据\n     */\n    DrillDownAction.prototype.drill = function (nodeInfo) {\n        var view = this.context.view;\n        var transformData = get(view, ['interactions', 'drill-down', 'cfg', 'transformData'], function (v) { return v; });\n        // 重新 update 数据\n        var drillData = transformData(__assign({ data: nodeInfo.data }, nodeInfo[HIERARCHY_DATA_TRANSFORM_PARAMS]));\n        view.changeData(drillData);\n        // 存储历史记录\n        var historyCache = [];\n        var node = nodeInfo;\n        while (node) {\n            var nodeData = node.data;\n            historyCache.unshift({\n                id: \"\".concat(nodeData.name, \"_\").concat(node.height, \"_\").concat(node.depth),\n                name: nodeData.name,\n                // children 是实际数据\n                children: transformData(__assign({ data: nodeData }, nodeInfo[HIERARCHY_DATA_TRANSFORM_PARAMS])),\n            });\n            node = node.parent;\n        }\n        this.historyCache = (this.historyCache || []).slice(0, -1).concat(historyCache);\n    };\n    /**\n     * 回退事件，点击面包屑时触发\n     * @param historyCache 当前要回退到的历史\n     */\n    DrillDownAction.prototype.backTo = function (historyCache) {\n        if (!historyCache || historyCache.length <= 0) {\n            return;\n        }\n        var view = this.context.view;\n        var data = last(historyCache).children; // 处理后的数组\n        view.changeData(data);\n        if (historyCache.length > 1) {\n            this.historyCache = historyCache;\n            this.drawBreadCrumb();\n        }\n        else {\n            // 清空\n            this.historyCache = [];\n            this.hideCrumbGroup();\n        }\n    };\n    /**\n     * 获取 mix 默认的配置和用户配置\n     */\n    DrillDownAction.prototype.getButtonCfg = function () {\n        var view = this.context.view;\n        var drillDownConfig = get(view, ['interactions', 'drill-down', 'cfg', 'drillDownConfig']);\n        return deepAssign(this.breadCrumbCfg, drillDownConfig === null || drillDownConfig === void 0 ? void 0 : drillDownConfig.breadCrumb, this.cfg);\n    };\n    /**\n     * 显示面包屑\n     */\n    DrillDownAction.prototype.drawBreadCrumb = function () {\n        this.drawBreadCrumbGroup();\n        this.resetPosition();\n        this.breadCrumbGroup.show();\n    };\n    /**\n     * 绘制 Button 和 文本\n     */\n    DrillDownAction.prototype.drawBreadCrumbGroup = function () {\n        var _this = this;\n        var config = this.getButtonCfg();\n        var cache = this.historyCache;\n        // 初始化面包屑 group\n        if (!this.breadCrumbGroup) {\n            this.breadCrumbGroup = this.context.view.foregroundGroup.addGroup({\n                name: BREAD_CRUMB_NAME,\n            });\n        }\n        else {\n            this.breadCrumbGroup.clear();\n        }\n        // 绘制面包屑\n        var left = 0;\n        cache.forEach(function (record, index) {\n            // 添加文本\n            var textShape = _this.breadCrumbGroup.addShape({\n                type: 'text',\n                id: record.id,\n                name: \"\".concat(BREAD_CRUMB_NAME, \"_\").concat(record.name, \"_text\"),\n                attrs: __assign(__assign({ text: index === 0 && !isNil(config.rootText) ? config.rootText : record.name }, config.textStyle), { x: left, y: 0 }),\n            });\n            var textShapeBox = textShape.getBBox();\n            left += textShapeBox.width + PADDING;\n            // 增加文本事件\n            textShape.on('click', function (event) {\n                var _a;\n                var targetId = event.target.get('id');\n                if (targetId !== ((_a = last(cache)) === null || _a === void 0 ? void 0 : _a.id)) {\n                    var newHistoryCache = cache.slice(0, cache.findIndex(function (d) { return d.id === targetId; }) + 1);\n                    _this.backTo(newHistoryCache);\n                }\n            });\n            // active 效果内置\n            textShape.on('mouseenter', function (event) {\n                var _a;\n                var targetId = event.target.get('id');\n                if (targetId !== ((_a = last(cache)) === null || _a === void 0 ? void 0 : _a.id)) {\n                    textShape.attr(config.activeTextStyle);\n                }\n                else {\n                    textShape.attr({ cursor: 'default' });\n                }\n            });\n            textShape.on('mouseleave', function () {\n                textShape.attr(config.textStyle);\n            });\n            if (index < cache.length - 1) {\n                // 添加反斜杠\n                var dividerShape = _this.breadCrumbGroup.addShape({\n                    type: 'text',\n                    name: \"\".concat(config.name, \"_\").concat(record.name, \"_divider\"),\n                    attrs: __assign(__assign({ text: config.dividerText }, config.textStyle), { x: left, y: 0 }),\n                });\n                var dividerBox = dividerShape.getBBox();\n                left += dividerBox.width + PADDING;\n            }\n        });\n    };\n    /**\n     * 隐藏面包屑\n     */\n    DrillDownAction.prototype.hideCrumbGroup = function () {\n        if (this.breadCrumbGroup) {\n            this.breadCrumbGroup.hide();\n        }\n    };\n    /**\n     * @override\n     * destroy: 销毁资源\n     */\n    DrillDownAction.prototype.destroy = function () {\n        if (this.breadCrumbGroup) {\n            this.breadCrumbGroup.remove();\n        }\n        _super.prototype.destroy.call(this);\n    };\n    return DrillDownAction;\n}(Action));\nexport { DrillDownAction };\n//# sourceMappingURL=drill-down.js.map","function defaultSeparation(a, b) {\n  return a.parent === b.parent ? 1 : 2;\n}\n\nfunction meanX(children) {\n  return children.reduce(meanXReduce, 0) / children.length;\n}\n\nfunction meanXReduce(x, c) {\n  return x + c.x;\n}\n\nfunction maxY(children) {\n  return 1 + children.reduce(maxYReduce, 0);\n}\n\nfunction maxYReduce(y, c) {\n  return Math.max(y, c.y);\n}\n\nfunction leafLeft(node) {\n  var children;\n  while (children = node.children) node = children[0];\n  return node;\n}\n\nfunction leafRight(node) {\n  var children;\n  while (children = node.children) node = children[children.length - 1];\n  return node;\n}\n\nexport default function() {\n  var separation = defaultSeparation,\n      dx = 1,\n      dy = 1,\n      nodeSize = false;\n\n  function cluster(root) {\n    var previousNode,\n        x = 0;\n\n    // First walk, computing the initial x & y values.\n    root.eachAfter(function(node) {\n      var children = node.children;\n      if (children) {\n        node.x = meanX(children);\n        node.y = maxY(children);\n      } else {\n        node.x = previousNode ? x += separation(node, previousNode) : 0;\n        node.y = 0;\n        previousNode = node;\n      }\n    });\n\n    var left = leafLeft(root),\n        right = leafRight(root),\n        x0 = left.x - separation(left, right) / 2,\n        x1 = right.x + separation(right, left) / 2;\n\n    // Second walk, normalizing x & y to the desired size.\n    return root.eachAfter(nodeSize ? function(node) {\n      node.x = (node.x - root.x) * dx;\n      node.y = (root.y - node.y) * dy;\n    } : function(node) {\n      node.x = (node.x - x0) / (x1 - x0) * dx;\n      node.y = (1 - (root.y ? node.y / root.y : 1)) * dy;\n    });\n  }\n\n  cluster.separation = function(x) {\n    return arguments.length ? (separation = x, cluster) : separation;\n  };\n\n  cluster.size = function(x) {\n    return arguments.length ? (nodeSize = false, dx = +x[0], dy = +x[1], cluster) : (nodeSize ? null : [dx, dy]);\n  };\n\n  cluster.nodeSize = function(x) {\n    return arguments.length ? (nodeSize = true, dx = +x[0], dy = +x[1], cluster) : (nodeSize ? [dx, dy] : null);\n  };\n\n  return cluster;\n}\n","function count(node) {\n  var sum = 0,\n      children = node.children,\n      i = children && children.length;\n  if (!i) sum = 1;\n  else while (--i >= 0) sum += children[i].value;\n  node.value = sum;\n}\n\nexport default function() {\n  return this.eachAfter(count);\n}\n","import node_count from \"./count.js\";\nimport node_each from \"./each.js\";\nimport node_eachBefore from \"./eachBefore.js\";\nimport node_eachAfter from \"./eachAfter.js\";\nimport node_find from \"./find.js\";\nimport node_sum from \"./sum.js\";\nimport node_sort from \"./sort.js\";\nimport node_path from \"./path.js\";\nimport node_ancestors from \"./ancestors.js\";\nimport node_descendants from \"./descendants.js\";\nimport node_leaves from \"./leaves.js\";\nimport node_links from \"./links.js\";\nimport node_iterator from \"./iterator.js\";\n\nexport default function hierarchy(data, children) {\n  if (data instanceof Map) {\n    data = [undefined, data];\n    if (children === undefined) children = mapChildren;\n  } else if (children === undefined) {\n    children = objectChildren;\n  }\n\n  var root = new Node(data),\n      node,\n      nodes = [root],\n      child,\n      childs,\n      i,\n      n;\n\n  while (node = nodes.pop()) {\n    if ((childs = children(node.data)) && (n = (childs = Array.from(childs)).length)) {\n      node.children = childs;\n      for (i = n - 1; i >= 0; --i) {\n        nodes.push(child = childs[i] = new Node(childs[i]));\n        child.parent = node;\n        child.depth = node.depth + 1;\n      }\n    }\n  }\n\n  return root.eachBefore(computeHeight);\n}\n\nfunction node_copy() {\n  return hierarchy(this).eachBefore(copyData);\n}\n\nfunction objectChildren(d) {\n  return d.children;\n}\n\nfunction mapChildren(d) {\n  return Array.isArray(d) ? d[1] : null;\n}\n\nfunction copyData(node) {\n  if (node.data.value !== undefined) node.value = node.data.value;\n  node.data = node.data.data;\n}\n\nexport function computeHeight(node) {\n  var height = 0;\n  do node.height = height;\n  while ((node = node.parent) && (node.height < ++height));\n}\n\nexport function Node(data) {\n  this.data = data;\n  this.depth =\n  this.height = 0;\n  this.parent = null;\n}\n\nNode.prototype = hierarchy.prototype = {\n  constructor: Node,\n  count: node_count,\n  each: node_each,\n  eachAfter: node_eachAfter,\n  eachBefore: node_eachBefore,\n  find: node_find,\n  sum: node_sum,\n  sort: node_sort,\n  path: node_path,\n  ancestors: node_ancestors,\n  descendants: node_descendants,\n  leaves: node_leaves,\n  links: node_links,\n  copy: node_copy,\n  [Symbol.iterator]: node_iterator\n};\n","import {shuffle} from \"../array.js\";\n\nexport default function(circles) {\n  var i = 0, n = (circles = shuffle(Array.from(circles))).length, B = [], p, e;\n\n  while (i < n) {\n    p = circles[i];\n    if (e && enclosesWeak(e, p)) ++i;\n    else e = encloseBasis(B = extendBasis(B, p)), i = 0;\n  }\n\n  return e;\n}\n\nfunction extendBasis(B, p) {\n  var i, j;\n\n  if (enclosesWeakAll(p, B)) return [p];\n\n  // If we get here then B must have at least one element.\n  for (i = 0; i < B.length; ++i) {\n    if (enclosesNot(p, B[i])\n        && enclosesWeakAll(encloseBasis2(B[i], p), B)) {\n      return [B[i], p];\n    }\n  }\n\n  // If we get here then B must have at least two elements.\n  for (i = 0; i < B.length - 1; ++i) {\n    for (j = i + 1; j < B.length; ++j) {\n      if (enclosesNot(encloseBasis2(B[i], B[j]), p)\n          && enclosesNot(encloseBasis2(B[i], p), B[j])\n          && enclosesNot(encloseBasis2(B[j], p), B[i])\n          && enclosesWeakAll(encloseBasis3(B[i], B[j], p), B)) {\n        return [B[i], B[j], p];\n      }\n    }\n  }\n\n  // If we get here then something is very wrong.\n  throw new Error;\n}\n\nfunction enclosesNot(a, b) {\n  var dr = a.r - b.r, dx = b.x - a.x, dy = b.y - a.y;\n  return dr < 0 || dr * dr < dx * dx + dy * dy;\n}\n\nfunction enclosesWeak(a, b) {\n  var dr = a.r - b.r + Math.max(a.r, b.r, 1) * 1e-9, dx = b.x - a.x, dy = b.y - a.y;\n  return dr > 0 && dr * dr > dx * dx + dy * dy;\n}\n\nfunction enclosesWeakAll(a, B) {\n  for (var i = 0; i < B.length; ++i) {\n    if (!enclosesWeak(a, B[i])) {\n      return false;\n    }\n  }\n  return true;\n}\n\nfunction encloseBasis(B) {\n  switch (B.length) {\n    case 1: return encloseBasis1(B[0]);\n    case 2: return encloseBasis2(B[0], B[1]);\n    case 3: return encloseBasis3(B[0], B[1], B[2]);\n  }\n}\n\nfunction encloseBasis1(a) {\n  return {\n    x: a.x,\n    y: a.y,\n    r: a.r\n  };\n}\n\nfunction encloseBasis2(a, b) {\n  var x1 = a.x, y1 = a.y, r1 = a.r,\n      x2 = b.x, y2 = b.y, r2 = b.r,\n      x21 = x2 - x1, y21 = y2 - y1, r21 = r2 - r1,\n      l = Math.sqrt(x21 * x21 + y21 * y21);\n  return {\n    x: (x1 + x2 + x21 / l * r21) / 2,\n    y: (y1 + y2 + y21 / l * r21) / 2,\n    r: (l + r1 + r2) / 2\n  };\n}\n\nfunction encloseBasis3(a, b, c) {\n  var x1 = a.x, y1 = a.y, r1 = a.r,\n      x2 = b.x, y2 = b.y, r2 = b.r,\n      x3 = c.x, y3 = c.y, r3 = c.r,\n      a2 = x1 - x2,\n      a3 = x1 - x3,\n      b2 = y1 - y2,\n      b3 = y1 - y3,\n      c2 = r2 - r1,\n      c3 = r3 - r1,\n      d1 = x1 * x1 + y1 * y1 - r1 * r1,\n      d2 = d1 - x2 * x2 - y2 * y2 + r2 * r2,\n      d3 = d1 - x3 * x3 - y3 * y3 + r3 * r3,\n      ab = a3 * b2 - a2 * b3,\n      xa = (b2 * d3 - b3 * d2) / (ab * 2) - x1,\n      xb = (b3 * c2 - b2 * c3) / ab,\n      ya = (a3 * d2 - a2 * d3) / (ab * 2) - y1,\n      yb = (a2 * c3 - a3 * c2) / ab,\n      A = xb * xb + yb * yb - 1,\n      B = 2 * (r1 + xa * xb + ya * yb),\n      C = xa * xa + ya * ya - r1 * r1,\n      r = -(A ? (B + Math.sqrt(B * B - 4 * A * C)) / (2 * A) : C / B);\n  return {\n    x: x1 + xa + xb * r,\n    y: y1 + ya + yb * r,\n    r: r\n  };\n}\n","export default function(x) {\n  return typeof x === \"object\" && \"length\" in x\n    ? x // Array, TypedArray, NodeList, array-like\n    : Array.from(x); // Map, Set, iterable, string, or anything else\n}\n\nexport function shuffle(array) {\n  var m = array.length,\n      t,\n      i;\n\n  while (m) {\n    i = Math.random() * m-- | 0;\n    t = array[m];\n    array[m] = array[i];\n    array[i] = t;\n  }\n\n  return array;\n}\n","import array from \"../array.js\";\nimport enclose from \"./enclose.js\";\n\nfunction place(b, a, c) {\n  var dx = b.x - a.x, x, a2,\n      dy = b.y - a.y, y, b2,\n      d2 = dx * dx + dy * dy;\n  if (d2) {\n    a2 = a.r + c.r, a2 *= a2;\n    b2 = b.r + c.r, b2 *= b2;\n    if (a2 > b2) {\n      x = (d2 + b2 - a2) / (2 * d2);\n      y = Math.sqrt(Math.max(0, b2 / d2 - x * x));\n      c.x = b.x - x * dx - y * dy;\n      c.y = b.y - x * dy + y * dx;\n    } else {\n      x = (d2 + a2 - b2) / (2 * d2);\n      y = Math.sqrt(Math.max(0, a2 / d2 - x * x));\n      c.x = a.x + x * dx - y * dy;\n      c.y = a.y + x * dy + y * dx;\n    }\n  } else {\n    c.x = a.x + c.r;\n    c.y = a.y;\n  }\n}\n\nfunction intersects(a, b) {\n  var dr = a.r + b.r - 1e-6, dx = b.x - a.x, dy = b.y - a.y;\n  return dr > 0 && dr * dr > dx * dx + dy * dy;\n}\n\nfunction score(node) {\n  var a = node._,\n      b = node.next._,\n      ab = a.r + b.r,\n      dx = (a.x * b.r + b.x * a.r) / ab,\n      dy = (a.y * b.r + b.y * a.r) / ab;\n  return dx * dx + dy * dy;\n}\n\nfunction Node(circle) {\n  this._ = circle;\n  this.next = null;\n  this.previous = null;\n}\n\nexport function packEnclose(circles) {\n  if (!(n = (circles = array(circles)).length)) return 0;\n\n  var a, b, c, n, aa, ca, i, j, k, sj, sk;\n\n  // Place the first circle.\n  a = circles[0], a.x = 0, a.y = 0;\n  if (!(n > 1)) return a.r;\n\n  // Place the second circle.\n  b = circles[1], a.x = -b.r, b.x = a.r, b.y = 0;\n  if (!(n > 2)) return a.r + b.r;\n\n  // Place the third circle.\n  place(b, a, c = circles[2]);\n\n  // Initialize the front-chain using the first three circles a, b and c.\n  a = new Node(a), b = new Node(b), c = new Node(c);\n  a.next = c.previous = b;\n  b.next = a.previous = c;\n  c.next = b.previous = a;\n\n  // Attempt to place each remaining circle…\n  pack: for (i = 3; i < n; ++i) {\n    place(a._, b._, c = circles[i]), c = new Node(c);\n\n    // Find the closest intersecting circle on the front-chain, if any.\n    // “Closeness” is determined by linear distance along the front-chain.\n    // “Ahead” or “behind” is likewise determined by linear distance.\n    j = b.next, k = a.previous, sj = b._.r, sk = a._.r;\n    do {\n      if (sj <= sk) {\n        if (intersects(j._, c._)) {\n          b = j, a.next = b, b.previous = a, --i;\n          continue pack;\n        }\n        sj += j._.r, j = j.next;\n      } else {\n        if (intersects(k._, c._)) {\n          a = k, a.next = b, b.previous = a, --i;\n          continue pack;\n        }\n        sk += k._.r, k = k.previous;\n      }\n    } while (j !== k.next);\n\n    // Success! Insert the new circle c between a and b.\n    c.previous = a, c.next = b, a.next = b.previous = b = c;\n\n    // Compute the new closest circle pair to the centroid.\n    aa = score(a);\n    while ((c = c.next) !== b) {\n      if ((ca = score(c)) < aa) {\n        a = c, aa = ca;\n      }\n    }\n    b = a.next;\n  }\n\n  // Compute the enclosing circle of the front chain.\n  a = [b._], c = b; while ((c = c.next) !== b) a.push(c._); c = enclose(a);\n\n  // Translate the circles to put the enclosing circle around the origin.\n  for (i = 0; i < n; ++i) a = circles[i], a.x -= c.x, a.y -= c.y;\n\n  return c.r;\n}\n\nexport default function(circles) {\n  packEnclose(circles);\n  return circles;\n}\n","export function optional(f) {\n  return f == null ? null : required(f);\n}\n\nexport function required(f) {\n  if (typeof f !== \"function\") throw new Error;\n  return f;\n}\n","export function constantZero() {\n  return 0;\n}\n\nexport default function(x) {\n  return function() {\n    return x;\n  };\n}\n","import {packEnclose} from \"./siblings.js\";\nimport {optional} from \"../accessors.js\";\nimport constant, {constantZero} from \"../constant.js\";\n\nfunction defaultRadius(d) {\n  return Math.sqrt(d.value);\n}\n\nexport default function() {\n  var radius = null,\n      dx = 1,\n      dy = 1,\n      padding = constantZero;\n\n  function pack(root) {\n    root.x = dx / 2, root.y = dy / 2;\n    if (radius) {\n      root.eachBefore(radiusLeaf(radius))\n          .eachAfter(packChildren(padding, 0.5))\n          .eachBefore(translateChild(1));\n    } else {\n      root.eachBefore(radiusLeaf(defaultRadius))\n          .eachAfter(packChildren(constantZero, 1))\n          .eachAfter(packChildren(padding, root.r / Math.min(dx, dy)))\n          .eachBefore(translateChild(Math.min(dx, dy) / (2 * root.r)));\n    }\n    return root;\n  }\n\n  pack.radius = function(x) {\n    return arguments.length ? (radius = optional(x), pack) : radius;\n  };\n\n  pack.size = function(x) {\n    return arguments.length ? (dx = +x[0], dy = +x[1], pack) : [dx, dy];\n  };\n\n  pack.padding = function(x) {\n    return arguments.length ? (padding = typeof x === \"function\" ? x : constant(+x), pack) : padding;\n  };\n\n  return pack;\n}\n\nfunction radiusLeaf(radius) {\n  return function(node) {\n    if (!node.children) {\n      node.r = Math.max(0, +radius(node) || 0);\n    }\n  };\n}\n\nfunction packChildren(padding, k) {\n  return function(node) {\n    if (children = node.children) {\n      var children,\n          i,\n          n = children.length,\n          r = padding(node) * k || 0,\n          e;\n\n      if (r) for (i = 0; i < n; ++i) children[i].r += r;\n      e = packEnclose(children);\n      if (r) for (i = 0; i < n; ++i) children[i].r -= r;\n      node.r = e + r;\n    }\n  };\n}\n\nfunction translateChild(k) {\n  return function(node) {\n    var parent = node.parent;\n    node.r *= k;\n    if (parent) {\n      node.x = parent.x + k * node.x;\n      node.y = parent.y + k * node.y;\n    }\n  };\n}\n","export default function(node) {\n  node.x0 = Math.round(node.x0);\n  node.y0 = Math.round(node.y0);\n  node.x1 = Math.round(node.x1);\n  node.y1 = Math.round(node.y1);\n}\n","export default function(parent, x0, y0, x1, y1) {\n  var nodes = parent.children,\n      node,\n      i = -1,\n      n = nodes.length,\n      k = parent.value && (x1 - x0) / parent.value;\n\n  while (++i < n) {\n    node = nodes[i], node.y0 = y0, node.y1 = y1;\n    node.x0 = x0, node.x1 = x0 += node.value * k;\n  }\n}\n","import roundNode from \"./treemap/round.js\";\nimport treemapDice from \"./treemap/dice.js\";\n\nexport default function() {\n  var dx = 1,\n      dy = 1,\n      padding = 0,\n      round = false;\n\n  function partition(root) {\n    var n = root.height + 1;\n    root.x0 =\n    root.y0 = padding;\n    root.x1 = dx;\n    root.y1 = dy / n;\n    root.eachBefore(positionNode(dy, n));\n    if (round) root.eachBefore(roundNode);\n    return root;\n  }\n\n  function positionNode(dy, n) {\n    return function(node) {\n      if (node.children) {\n        treemapDice(node, node.x0, dy * (node.depth + 1) / n, node.x1, dy * (node.depth + 2) / n);\n      }\n      var x0 = node.x0,\n          y0 = node.y0,\n          x1 = node.x1 - padding,\n          y1 = node.y1 - padding;\n      if (x1 < x0) x0 = x1 = (x0 + x1) / 2;\n      if (y1 < y0) y0 = y1 = (y0 + y1) / 2;\n      node.x0 = x0;\n      node.y0 = y0;\n      node.x1 = x1;\n      node.y1 = y1;\n    };\n  }\n\n  partition.round = function(x) {\n    return arguments.length ? (round = !!x, partition) : round;\n  };\n\n  partition.size = function(x) {\n    return arguments.length ? (dx = +x[0], dy = +x[1], partition) : [dx, dy];\n  };\n\n  partition.padding = function(x) {\n    return arguments.length ? (padding = +x, partition) : padding;\n  };\n\n  return partition;\n}\n","export default function(callback, that) {\n  let index = -1;\n  for (const node of this) {\n    callback.call(that, node, ++index, this);\n  }\n  return this;\n}\n","export default function(callback, that) {\n  var node = this, nodes = [node], next = [], children, i, n, index = -1;\n  while (node = nodes.pop()) {\n    next.push(node);\n    if (children = node.children) {\n      for (i = 0, n = children.length; i < n; ++i) {\n        nodes.push(children[i]);\n      }\n    }\n  }\n  while (node = next.pop()) {\n    callback.call(that, node, ++index, this);\n  }\n  return this;\n}\n","export default function(callback, that) {\n  var node = this, nodes = [node], children, i, index = -1;\n  while (node = nodes.pop()) {\n    callback.call(that, node, ++index, this);\n    if (children = node.children) {\n      for (i = children.length - 1; i >= 0; --i) {\n        nodes.push(children[i]);\n      }\n    }\n  }\n  return this;\n}\n","export default function(callback, that) {\n  let index = -1;\n  for (const node of this) {\n    if (callback.call(that, node, ++index, this)) {\n      return node;\n    }\n  }\n}\n","export default function(value) {\n  return this.eachAfter(function(node) {\n    var sum = +value(node.data) || 0,\n        children = node.children,\n        i = children && children.length;\n    while (--i >= 0) sum += children[i].value;\n    node.value = sum;\n  });\n}\n","export default function(compare) {\n  return this.eachBefore(function(node) {\n    if (node.children) {\n      node.children.sort(compare);\n    }\n  });\n}\n","export default function(end) {\n  var start = this,\n      ancestor = leastCommonAncestor(start, end),\n      nodes = [start];\n  while (start !== ancestor) {\n    start = start.parent;\n    nodes.push(start);\n  }\n  var k = nodes.length;\n  while (end !== ancestor) {\n    nodes.splice(k, 0, end);\n    end = end.parent;\n  }\n  return nodes;\n}\n\nfunction leastCommonAncestor(a, b) {\n  if (a === b) return a;\n  var aNodes = a.ancestors(),\n      bNodes = b.ancestors(),\n      c = null;\n  a = aNodes.pop();\n  b = bNodes.pop();\n  while (a === b) {\n    c = a;\n    a = aNodes.pop();\n    b = bNodes.pop();\n  }\n  return c;\n}\n","export default function() {\n  var node = this, nodes = [node];\n  while (node = node.parent) {\n    nodes.push(node);\n  }\n  return nodes;\n}\n","export default function() {\n  return Array.from(this);\n}\n","export default function() {\n  var leaves = [];\n  this.eachBefore(function(node) {\n    if (!node.children) {\n      leaves.push(node);\n    }\n  });\n  return leaves;\n}\n","export default function() {\n  var root = this, links = [];\n  root.each(function(node) {\n    if (node !== root) { // Don’t include the root’s parent, if any.\n      links.push({source: node.parent, target: node});\n    }\n  });\n  return links;\n}\n","export default function*() {\n  var node = this, current, next = [node], children, i, n;\n  do {\n    current = next.reverse(), next = [];\n    while (node = current.pop()) {\n      yield node;\n      if (children = node.children) {\n        for (i = 0, n = children.length; i < n; ++i) {\n          next.push(children[i]);\n        }\n      }\n    }\n  } while (next.length);\n}\n","import {required} from \"./accessors.js\";\nimport {Node, computeHeight} from \"./hierarchy/index.js\";\n\nvar preroot = {depth: -1},\n    ambiguous = {};\n\nfunction defaultId(d) {\n  return d.id;\n}\n\nfunction defaultParentId(d) {\n  return d.parentId;\n}\n\nexport default function() {\n  var id = defaultId,\n      parentId = defaultParentId;\n\n  function stratify(data) {\n    var nodes = Array.from(data),\n        n = nodes.length,\n        d,\n        i,\n        root,\n        parent,\n        node,\n        nodeId,\n        nodeKey,\n        nodeByKey = new Map;\n\n    for (i = 0; i < n; ++i) {\n      d = nodes[i], node = nodes[i] = new Node(d);\n      if ((nodeId = id(d, i, data)) != null && (nodeId += \"\")) {\n        nodeKey = node.id = nodeId;\n        nodeByKey.set(nodeKey, nodeByKey.has(nodeKey) ? ambiguous : node);\n      }\n      if ((nodeId = parentId(d, i, data)) != null && (nodeId += \"\")) {\n        node.parent = nodeId;\n      }\n    }\n\n    for (i = 0; i < n; ++i) {\n      node = nodes[i];\n      if (nodeId = node.parent) {\n        parent = nodeByKey.get(nodeId);\n        if (!parent) throw new Error(\"missing: \" + nodeId);\n        if (parent === ambiguous) throw new Error(\"ambiguous: \" + nodeId);\n        if (parent.children) parent.children.push(node);\n        else parent.children = [node];\n        node.parent = parent;\n      } else {\n        if (root) throw new Error(\"multiple roots\");\n        root = node;\n      }\n    }\n\n    if (!root) throw new Error(\"no root\");\n    root.parent = preroot;\n    root.eachBefore(function(node) { node.depth = node.parent.depth + 1; --n; }).eachBefore(computeHeight);\n    root.parent = null;\n    if (n > 0) throw new Error(\"cycle\");\n\n    return root;\n  }\n\n  stratify.id = function(x) {\n    return arguments.length ? (id = required(x), stratify) : id;\n  };\n\n  stratify.parentId = function(x) {\n    return arguments.length ? (parentId = required(x), stratify) : parentId;\n  };\n\n  return stratify;\n}\n","import {Node} from \"./hierarchy/index.js\";\n\nfunction defaultSeparation(a, b) {\n  return a.parent === b.parent ? 1 : 2;\n}\n\n// function radialSeparation(a, b) {\n//   return (a.parent === b.parent ? 1 : 2) / a.depth;\n// }\n\n// This function is used to traverse the left contour of a subtree (or\n// subforest). It returns the successor of v on this contour. This successor is\n// either given by the leftmost child of v or by the thread of v. The function\n// returns null if and only if v is on the highest level of its subtree.\nfunction nextLeft(v) {\n  var children = v.children;\n  return children ? children[0] : v.t;\n}\n\n// This function works analogously to nextLeft.\nfunction nextRight(v) {\n  var children = v.children;\n  return children ? children[children.length - 1] : v.t;\n}\n\n// Shifts the current subtree rooted at w+. This is done by increasing\n// prelim(w+) and mod(w+) by shift.\nfunction moveSubtree(wm, wp, shift) {\n  var change = shift / (wp.i - wm.i);\n  wp.c -= change;\n  wp.s += shift;\n  wm.c += change;\n  wp.z += shift;\n  wp.m += shift;\n}\n\n// All other shifts, applied to the smaller subtrees between w- and w+, are\n// performed by this function. To prepare the shifts, we have to adjust\n// change(w+), shift(w+), and change(w-).\nfunction executeShifts(v) {\n  var shift = 0,\n      change = 0,\n      children = v.children,\n      i = children.length,\n      w;\n  while (--i >= 0) {\n    w = children[i];\n    w.z += shift;\n    w.m += shift;\n    shift += w.s + (change += w.c);\n  }\n}\n\n// If vi-’s ancestor is a sibling of v, returns vi-’s ancestor. Otherwise,\n// returns the specified (default) ancestor.\nfunction nextAncestor(vim, v, ancestor) {\n  return vim.a.parent === v.parent ? vim.a : ancestor;\n}\n\nfunction TreeNode(node, i) {\n  this._ = node;\n  this.parent = null;\n  this.children = null;\n  this.A = null; // default ancestor\n  this.a = this; // ancestor\n  this.z = 0; // prelim\n  this.m = 0; // mod\n  this.c = 0; // change\n  this.s = 0; // shift\n  this.t = null; // thread\n  this.i = i; // number\n}\n\nTreeNode.prototype = Object.create(Node.prototype);\n\nfunction treeRoot(root) {\n  var tree = new TreeNode(root, 0),\n      node,\n      nodes = [tree],\n      child,\n      children,\n      i,\n      n;\n\n  while (node = nodes.pop()) {\n    if (children = node._.children) {\n      node.children = new Array(n = children.length);\n      for (i = n - 1; i >= 0; --i) {\n        nodes.push(child = node.children[i] = new TreeNode(children[i], i));\n        child.parent = node;\n      }\n    }\n  }\n\n  (tree.parent = new TreeNode(null, 0)).children = [tree];\n  return tree;\n}\n\n// Node-link tree diagram using the Reingold-Tilford \"tidy\" algorithm\nexport default function() {\n  var separation = defaultSeparation,\n      dx = 1,\n      dy = 1,\n      nodeSize = null;\n\n  function tree(root) {\n    var t = treeRoot(root);\n\n    // Compute the layout using Buchheim et al.’s algorithm.\n    t.eachAfter(firstWalk), t.parent.m = -t.z;\n    t.eachBefore(secondWalk);\n\n    // If a fixed node size is specified, scale x and y.\n    if (nodeSize) root.eachBefore(sizeNode);\n\n    // If a fixed tree size is specified, scale x and y based on the extent.\n    // Compute the left-most, right-most, and depth-most nodes for extents.\n    else {\n      var left = root,\n          right = root,\n          bottom = root;\n      root.eachBefore(function(node) {\n        if (node.x < left.x) left = node;\n        if (node.x > right.x) right = node;\n        if (node.depth > bottom.depth) bottom = node;\n      });\n      var s = left === right ? 1 : separation(left, right) / 2,\n          tx = s - left.x,\n          kx = dx / (right.x + s + tx),\n          ky = dy / (bottom.depth || 1);\n      root.eachBefore(function(node) {\n        node.x = (node.x + tx) * kx;\n        node.y = node.depth * ky;\n      });\n    }\n\n    return root;\n  }\n\n  // Computes a preliminary x-coordinate for v. Before that, FIRST WALK is\n  // applied recursively to the children of v, as well as the function\n  // APPORTION. After spacing out the children by calling EXECUTE SHIFTS, the\n  // node v is placed to the midpoint of its outermost children.\n  function firstWalk(v) {\n    var children = v.children,\n        siblings = v.parent.children,\n        w = v.i ? siblings[v.i - 1] : null;\n    if (children) {\n      executeShifts(v);\n      var midpoint = (children[0].z + children[children.length - 1].z) / 2;\n      if (w) {\n        v.z = w.z + separation(v._, w._);\n        v.m = v.z - midpoint;\n      } else {\n        v.z = midpoint;\n      }\n    } else if (w) {\n      v.z = w.z + separation(v._, w._);\n    }\n    v.parent.A = apportion(v, w, v.parent.A || siblings[0]);\n  }\n\n  // Computes all real x-coordinates by summing up the modifiers recursively.\n  function secondWalk(v) {\n    v._.x = v.z + v.parent.m;\n    v.m += v.parent.m;\n  }\n\n  // The core of the algorithm. Here, a new subtree is combined with the\n  // previous subtrees. Threads are used to traverse the inside and outside\n  // contours of the left and right subtree up to the highest common level. The\n  // vertices used for the traversals are vi+, vi-, vo-, and vo+, where the\n  // superscript o means outside and i means inside, the subscript - means left\n  // subtree and + means right subtree. For summing up the modifiers along the\n  // contour, we use respective variables si+, si-, so-, and so+. Whenever two\n  // nodes of the inside contours conflict, we compute the left one of the\n  // greatest uncommon ancestors using the function ANCESTOR and call MOVE\n  // SUBTREE to shift the subtree and prepare the shifts of smaller subtrees.\n  // Finally, we add a new thread (if necessary).\n  function apportion(v, w, ancestor) {\n    if (w) {\n      var vip = v,\n          vop = v,\n          vim = w,\n          vom = vip.parent.children[0],\n          sip = vip.m,\n          sop = vop.m,\n          sim = vim.m,\n          som = vom.m,\n          shift;\n      while (vim = nextRight(vim), vip = nextLeft(vip), vim && vip) {\n        vom = nextLeft(vom);\n        vop = nextRight(vop);\n        vop.a = v;\n        shift = vim.z + sim - vip.z - sip + separation(vim._, vip._);\n        if (shift > 0) {\n          moveSubtree(nextAncestor(vim, v, ancestor), v, shift);\n          sip += shift;\n          sop += shift;\n        }\n        sim += vim.m;\n        sip += vip.m;\n        som += vom.m;\n        sop += vop.m;\n      }\n      if (vim && !nextRight(vop)) {\n        vop.t = vim;\n        vop.m += sim - sop;\n      }\n      if (vip && !nextLeft(vom)) {\n        vom.t = vip;\n        vom.m += sip - som;\n        ancestor = v;\n      }\n    }\n    return ancestor;\n  }\n\n  function sizeNode(node) {\n    node.x *= dx;\n    node.y = node.depth * dy;\n  }\n\n  tree.separation = function(x) {\n    return arguments.length ? (separation = x, tree) : separation;\n  };\n\n  tree.size = function(x) {\n    return arguments.length ? (nodeSize = false, dx = +x[0], dy = +x[1], tree) : (nodeSize ? null : [dx, dy]);\n  };\n\n  tree.nodeSize = function(x) {\n    return arguments.length ? (nodeSize = true, dx = +x[0], dy = +x[1], tree) : (nodeSize ? [dx, dy] : null);\n  };\n\n  return tree;\n}\n","export default function(parent, x0, y0, x1, y1) {\n  var nodes = parent.children,\n      node,\n      i = -1,\n      n = nodes.length,\n      k = parent.value && (y1 - y0) / parent.value;\n\n  while (++i < n) {\n    node = nodes[i], node.x0 = x0, node.x1 = x1;\n    node.y0 = y0, node.y1 = y0 += node.value * k;\n  }\n}\n","import treemapDice from \"./dice.js\";\nimport treemapSlice from \"./slice.js\";\n\nexport var phi = (1 + Math.sqrt(5)) / 2;\n\nexport function squarifyRatio(ratio, parent, x0, y0, x1, y1) {\n  var rows = [],\n      nodes = parent.children,\n      row,\n      nodeValue,\n      i0 = 0,\n      i1 = 0,\n      n = nodes.length,\n      dx, dy,\n      value = parent.value,\n      sumValue,\n      minValue,\n      maxValue,\n      newRatio,\n      minRatio,\n      alpha,\n      beta;\n\n  while (i0 < n) {\n    dx = x1 - x0, dy = y1 - y0;\n\n    // Find the next non-empty node.\n    do sumValue = nodes[i1++].value; while (!sumValue && i1 < n);\n    minValue = maxValue = sumValue;\n    alpha = Math.max(dy / dx, dx / dy) / (value * ratio);\n    beta = sumValue * sumValue * alpha;\n    minRatio = Math.max(maxValue / beta, beta / minValue);\n\n    // Keep adding nodes while the aspect ratio maintains or improves.\n    for (; i1 < n; ++i1) {\n      sumValue += nodeValue = nodes[i1].value;\n      if (nodeValue < minValue) minValue = nodeValue;\n      if (nodeValue > maxValue) maxValue = nodeValue;\n      beta = sumValue * sumValue * alpha;\n      newRatio = Math.max(maxValue / beta, beta / minValue);\n      if (newRatio > minRatio) { sumValue -= nodeValue; break; }\n      minRatio = newRatio;\n    }\n\n    // Position and record the row orientation.\n    rows.push(row = {value: sumValue, dice: dx < dy, children: nodes.slice(i0, i1)});\n    if (row.dice) treemapDice(row, x0, y0, x1, value ? y0 += dy * sumValue / value : y1);\n    else treemapSlice(row, x0, y0, value ? x0 += dx * sumValue / value : x1, y1);\n    value -= sumValue, i0 = i1;\n  }\n\n  return rows;\n}\n\nexport default (function custom(ratio) {\n\n  function squarify(parent, x0, y0, x1, y1) {\n    squarifyRatio(ratio, parent, x0, y0, x1, y1);\n  }\n\n  squarify.ratio = function(x) {\n    return custom((x = +x) > 1 ? x : 1);\n  };\n\n  return squarify;\n})(phi);\n","import roundNode from \"./round.js\";\nimport squarify from \"./squarify.js\";\nimport {required} from \"../accessors.js\";\nimport constant, {constantZero} from \"../constant.js\";\n\nexport default function() {\n  var tile = squarify,\n      round = false,\n      dx = 1,\n      dy = 1,\n      paddingStack = [0],\n      paddingInner = constantZero,\n      paddingTop = constantZero,\n      paddingRight = constantZero,\n      paddingBottom = constantZero,\n      paddingLeft = constantZero;\n\n  function treemap(root) {\n    root.x0 =\n    root.y0 = 0;\n    root.x1 = dx;\n    root.y1 = dy;\n    root.eachBefore(positionNode);\n    paddingStack = [0];\n    if (round) root.eachBefore(roundNode);\n    return root;\n  }\n\n  function positionNode(node) {\n    var p = paddingStack[node.depth],\n        x0 = node.x0 + p,\n        y0 = node.y0 + p,\n        x1 = node.x1 - p,\n        y1 = node.y1 - p;\n    if (x1 < x0) x0 = x1 = (x0 + x1) / 2;\n    if (y1 < y0) y0 = y1 = (y0 + y1) / 2;\n    node.x0 = x0;\n    node.y0 = y0;\n    node.x1 = x1;\n    node.y1 = y1;\n    if (node.children) {\n      p = paddingStack[node.depth + 1] = paddingInner(node) / 2;\n      x0 += paddingLeft(node) - p;\n      y0 += paddingTop(node) - p;\n      x1 -= paddingRight(node) - p;\n      y1 -= paddingBottom(node) - p;\n      if (x1 < x0) x0 = x1 = (x0 + x1) / 2;\n      if (y1 < y0) y0 = y1 = (y0 + y1) / 2;\n      tile(node, x0, y0, x1, y1);\n    }\n  }\n\n  treemap.round = function(x) {\n    return arguments.length ? (round = !!x, treemap) : round;\n  };\n\n  treemap.size = function(x) {\n    return arguments.length ? (dx = +x[0], dy = +x[1], treemap) : [dx, dy];\n  };\n\n  treemap.tile = function(x) {\n    return arguments.length ? (tile = required(x), treemap) : tile;\n  };\n\n  treemap.padding = function(x) {\n    return arguments.length ? treemap.paddingInner(x).paddingOuter(x) : treemap.paddingInner();\n  };\n\n  treemap.paddingInner = function(x) {\n    return arguments.length ? (paddingInner = typeof x === \"function\" ? x : constant(+x), treemap) : paddingInner;\n  };\n\n  treemap.paddingOuter = function(x) {\n    return arguments.length ? treemap.paddingTop(x).paddingRight(x).paddingBottom(x).paddingLeft(x) : treemap.paddingTop();\n  };\n\n  treemap.paddingTop = function(x) {\n    return arguments.length ? (paddingTop = typeof x === \"function\" ? x : constant(+x), treemap) : paddingTop;\n  };\n\n  treemap.paddingRight = function(x) {\n    return arguments.length ? (paddingRight = typeof x === \"function\" ? x : constant(+x), treemap) : paddingRight;\n  };\n\n  treemap.paddingBottom = function(x) {\n    return arguments.length ? (paddingBottom = typeof x === \"function\" ? x : constant(+x), treemap) : paddingBottom;\n  };\n\n  treemap.paddingLeft = function(x) {\n    return arguments.length ? (paddingLeft = typeof x === \"function\" ? x : constant(+x), treemap) : paddingLeft;\n  };\n\n  return treemap;\n}\n","import treemapDice from \"./dice.js\";\nimport treemapSlice from \"./slice.js\";\nimport {phi, squarifyRatio} from \"./squarify.js\";\n\nexport default (function custom(ratio) {\n\n  function resquarify(parent, x0, y0, x1, y1) {\n    if ((rows = parent._squarify) && (rows.ratio === ratio)) {\n      var rows,\n          row,\n          nodes,\n          i,\n          j = -1,\n          n,\n          m = rows.length,\n          value = parent.value;\n\n      while (++j < m) {\n        row = rows[j], nodes = row.children;\n        for (i = row.value = 0, n = nodes.length; i < n; ++i) row.value += nodes[i].value;\n        if (row.dice) treemapDice(row, x0, y0, x1, value ? y0 += (y1 - y0) * row.value / value : y1);\n        else treemapSlice(row, x0, y0, value ? x0 += (x1 - x0) * row.value / value : x1, y1);\n        value -= row.value;\n      }\n    } else {\n      parent._squarify = rows = squarifyRatio(ratio, parent, x0, y0, x1, y1);\n      rows.ratio = ratio;\n    }\n  }\n\n  resquarify.ratio = function(x) {\n    return custom((x = +x) > 1 ? x : 1);\n  };\n\n  return resquarify;\n})(phi);\n","export default function(parent, x0, y0, x1, y1) {\n  var nodes = parent.children,\n      i, n = nodes.length,\n      sum, sums = new Array(n + 1);\n\n  for (sums[0] = sum = i = 0; i < n; ++i) {\n    sums[i + 1] = sum += nodes[i].value;\n  }\n\n  partition(0, n, parent.value, x0, y0, x1, y1);\n\n  function partition(i, j, value, x0, y0, x1, y1) {\n    if (i >= j - 1) {\n      var node = nodes[i];\n      node.x0 = x0, node.y0 = y0;\n      node.x1 = x1, node.y1 = y1;\n      return;\n    }\n\n    var valueOffset = sums[i],\n        valueTarget = (value / 2) + valueOffset,\n        k = i + 1,\n        hi = j - 1;\n\n    while (k < hi) {\n      var mid = k + hi >>> 1;\n      if (sums[mid] < valueTarget) k = mid + 1;\n      else hi = mid;\n    }\n\n    if ((valueTarget - sums[k - 1]) < (sums[k] - valueTarget) && i + 1 < k) --k;\n\n    var valueLeft = sums[k] - valueOffset,\n        valueRight = value - valueLeft;\n\n    if ((x1 - x0) > (y1 - y0)) {\n      var xk = value ? (x0 * valueRight + x1 * valueLeft) / value : x1;\n      partition(i, k, valueLeft, x0, y0, xk, y1);\n      partition(k, j, valueRight, xk, y0, x1, y1);\n    } else {\n      var yk = value ? (y0 * valueRight + y1 * valueLeft) / value : y1;\n      partition(i, k, valueLeft, x0, y0, x1, yk);\n      partition(k, j, valueRight, x0, yk, x1, y1);\n    }\n  }\n}\n","import dice from \"./dice.js\";\nimport slice from \"./slice.js\";\n\nexport default function(parent, x0, y0, x1, y1) {\n  (parent.depth & 1 ? slice : dice)(parent, x0, y0, x1, y1);\n}\n","import { filter, isArray, isString } from '@antv/util';\n/** export 一些字段常量 */\n/** 在同层级，同一父节点下的节点索引顺序 */\nexport var NODE_INDEX_FIELD = 'nodeIndex';\n/** child 节点数量 */\nexport var CHILD_NODE_COUNT = 'childNodeCount';\n/** 节点的祖先节点 */\nexport var NODE_ANCESTORS_FIELD = 'nodeAncestor';\nvar INVALID_FIELD_ERR_MSG = 'Invalid field: it must be a string!';\nexport function getField(options, defaultField) {\n    var field = options.field, fields = options.fields;\n    if (isString(field)) {\n        return field;\n    }\n    if (isArray(field)) {\n        console.warn(INVALID_FIELD_ERR_MSG);\n        return field[0];\n    }\n    console.warn(\"\".concat(INVALID_FIELD_ERR_MSG, \" will try to get fields instead.\"));\n    if (isString(fields)) {\n        return fields;\n    }\n    if (isArray(fields) && fields.length) {\n        return fields[0];\n    }\n    if (defaultField) {\n        return defaultField;\n    }\n    throw new TypeError(INVALID_FIELD_ERR_MSG);\n}\nexport function getAllNodes(root) {\n    var nodes = [];\n    if (root && root.each) {\n        var parent_1;\n        var index_1;\n        // d3-hierarchy: Invokes the specified function for node and each descendant in **breadth-first order**\n        root.each(function (node) {\n            var _a, _b;\n            if (node.parent !== parent_1) {\n                parent_1 = node.parent;\n                index_1 = 0;\n            }\n            else {\n                index_1 += 1;\n            }\n            var ancestors = filter((((_a = node.ancestors) === null || _a === void 0 ? void 0 : _a.call(node)) || []).map(function (d) { return nodes.find(function (n) { return n.name === d.name; }) || d; }), function (_a) {\n                var depth = _a.depth;\n                return depth > 0 && depth < node.depth;\n            });\n            node[NODE_ANCESTORS_FIELD] = ancestors;\n            node[CHILD_NODE_COUNT] = ((_b = node.children) === null || _b === void 0 ? void 0 : _b.length) || 0;\n            node[NODE_INDEX_FIELD] = index_1;\n            nodes.push(node);\n        });\n    }\n    else if (root && root.eachNode) {\n        // @antv/hierarchy\n        root.eachNode(function (node) {\n            nodes.push(node);\n        });\n    }\n    return nodes;\n}\n//# sourceMappingURL=util.js.map","import { assign, isArray } from '@antv/util';\nimport * as d3Hierarchy from 'd3-hierarchy';\nimport { getAllNodes, getField } from './util';\nvar DEFAULT_OPTIONS = {\n    field: 'value',\n    as: ['x', 'y', 'r'],\n    // 默认降序\n    sort: function (a, b) { return b.value - a.value; },\n};\nexport function pack(data, options) {\n    options = assign({}, DEFAULT_OPTIONS, options);\n    var as = options.as;\n    if (!isArray(as) || as.length !== 3) {\n        throw new TypeError('Invalid as: it must be an array with 3 strings (e.g. [ \"x\", \"y\", \"r\" ])!');\n    }\n    var field;\n    try {\n        field = getField(options);\n    }\n    catch (e) {\n        console.warn(e);\n    }\n    var packLayout = function (data) {\n        return d3Hierarchy.pack().size(options.size).padding(options.padding)(d3Hierarchy\n            .hierarchy(data)\n            .sum(function (d) { return d[field]; })\n            .sort(options.sort));\n    };\n    var root = packLayout(data);\n    var x = as[0];\n    var y = as[1];\n    var r = as[2];\n    root.each(function (node) {\n        node[x] = node.x;\n        node[y] = node.y;\n        node[r] = node.r;\n    });\n    return getAllNodes(root);\n}\n//# sourceMappingURL=pack.js.map","import { __assign } from \"tslib\";\nimport { HIERARCHY_DATA_TRANSFORM_PARAMS } from '../../interactions/actions/drill-down';\nimport { deepAssign, pick } from '../../utils';\nimport { pack } from '../../utils/hierarchy/pack';\nimport { resolveAllPadding } from '../../utils/padding';\n/**\n * circle-packing 数据转换\n * @param options\n */\nexport function transformData(options) {\n    var data = options.data, hierarchyConfig = options.hierarchyConfig, _a = options.rawFields, rawFields = _a === void 0 ? [] : _a, enableDrillDown = options.enableDrillDown;\n    var nodes = pack(data, __assign(__assign({}, hierarchyConfig), { field: 'value', as: ['x', 'y', 'r'] }));\n    var result = [];\n    nodes.forEach(function (node) {\n        var _a;\n        var path = node.data.name;\n        var ancestorNode = __assign({}, node);\n        while (ancestorNode.depth > 1) {\n            path = \"\".concat((_a = ancestorNode.parent.data) === null || _a === void 0 ? void 0 : _a.name, \" / \").concat(path);\n            ancestorNode = ancestorNode.parent;\n        }\n        // 开启下钻，仅加载 depth <= 2 的数据 (加载两层)\n        if (enableDrillDown && node.depth > 2) {\n            return null;\n        }\n        var nodeInfo = deepAssign({}, node.data, __assign(__assign(__assign({}, pick(node.data, rawFields)), { path: path }), node));\n        nodeInfo.ext = hierarchyConfig;\n        nodeInfo[HIERARCHY_DATA_TRANSFORM_PARAMS] = { hierarchyConfig: hierarchyConfig, rawFields: rawFields, enableDrillDown: enableDrillDown };\n        result.push(nodeInfo);\n    });\n    return result;\n}\n/**\n * 根据传入的 padding 和 现有的 画布大小， 输出针对圆形视图布局需要的 finalPadding 以及 finalSize\n * @param params\n */\nexport function resolvePaddingForCircle(padding, appendPadding, containerSize) {\n    var tempPadding = resolveAllPadding([padding, appendPadding]);\n    var top = tempPadding[0], right = tempPadding[1], bottom = tempPadding[2], left = tempPadding[3]; // 没设定，默认是 [0, 0, 0, 0]\n    var width = containerSize.width, height = containerSize.height;\n    // 有了 tempPadding 介入以后，计算出coordinate范围宽高的最小值 minSize = circle-packing的直径\n    var wSize = width - (left + right);\n    var hSize = height - (top + bottom);\n    var minSize = Math.min(wSize, hSize); // circle-packing的直径\n    // 得到居中后各方向剩余的 padding\n    var restWidthPadding = (wSize - minSize) / 2;\n    var restHeightPadding = (hSize - minSize) / 2;\n    var finalTop = top + restHeightPadding;\n    var finalRight = right + restWidthPadding;\n    var finalBottom = bottom + restHeightPadding;\n    var finalLeft = left + restWidthPadding;\n    var finalPadding = [finalTop, finalRight, finalBottom, finalLeft];\n    var finalSize = minSize < 0 ? 0 : minSize; // 防止为负数\n    return { finalPadding: finalPadding, finalSize: finalSize };\n}\n//# sourceMappingURL=utils.js.map","import { __assign, __spreadArray } from \"tslib\";\nimport { get } from '@antv/util';\nimport { animation, annotation, interaction as baseInteraction, legend, pattern, scale, theme, } from '../../adaptor/common';\nimport { point } from '../../adaptor/geometries/point';\nimport { deepAssign, flow } from '../../utils';\nimport { getAdjustAppendPadding, resolveAllPadding } from '../../utils/padding';\nimport { RAW_FIELDS } from './constant';\nimport { resolvePaddingForCircle, transformData } from './utils';\n/**\n * 获取默认 option\n * @param params\n */\nfunction defaultOptions(params) {\n    var chart = params.chart;\n    var diameter = Math.min(chart.viewBBox.width, chart.viewBBox.height);\n    return deepAssign({\n        options: {\n            size: function (_a) {\n                var r = _a.r;\n                return r * diameter;\n            }, // 当autofit：false时，默认给固定半径\n        },\n    }, params);\n}\n/**\n * padding 配置\n * @param params\n */\nfunction padding(params) {\n    var options = params.options, chart = params.chart;\n    // 通过改变 padding，修改 coordinate 的绘制区域\n    var containerSize = chart.viewBBox;\n    var padding = options.padding, appendPadding = options.appendPadding, drilldown = options.drilldown;\n    var tempAppendPadding = appendPadding;\n    if (drilldown === null || drilldown === void 0 ? void 0 : drilldown.enabled) {\n        var appendPaddingByDrilldown = getAdjustAppendPadding(chart.appendPadding, get(drilldown, ['breadCrumb', 'position']));\n        tempAppendPadding = resolveAllPadding([appendPaddingByDrilldown, appendPadding]);\n    }\n    var finalPadding = resolvePaddingForCircle(padding, tempAppendPadding, containerSize).finalPadding;\n    chart.padding = finalPadding;\n    chart.appendPadding = 0;\n    return params;\n}\n/**\n * 字段\n * @param params\n */\nfunction geometry(params) {\n    var chart = params.chart, options = params.options;\n    var padding = chart.padding, appendPadding = chart.appendPadding;\n    var color = options.color, colorField = options.colorField, pointStyle = options.pointStyle, hierarchyConfig = options.hierarchyConfig, sizeField = options.sizeField, _a = options.rawFields, rawFields = _a === void 0 ? [] : _a, drilldown = options.drilldown;\n    var data = transformData({\n        data: options.data,\n        hierarchyConfig: hierarchyConfig,\n        enableDrillDown: drilldown === null || drilldown === void 0 ? void 0 : drilldown.enabled,\n        rawFields: rawFields,\n    });\n    chart.data(data);\n    var containerSize = chart.viewBBox;\n    var finalSize = resolvePaddingForCircle(padding, appendPadding, containerSize).finalSize;\n    // 有sizeField的时候，例如 value ，可以选择映射 size 函数，自己计算出映射的半径\n    var circleSize = function (_a) {\n        var r = _a.r;\n        return r * finalSize;\n    }; // 默认配置\n    if (sizeField) {\n        circleSize = function (d) { return d[sizeField] * finalSize; }; // 目前只有 r 通道映射效果会正常\n    }\n    // geometry\n    point(deepAssign({}, params, {\n        options: {\n            xField: 'x',\n            yField: 'y',\n            seriesField: colorField,\n            sizeField: sizeField,\n            rawFields: __spreadArray(__spreadArray([], RAW_FIELDS, true), rawFields, true),\n            point: {\n                color: color,\n                style: pointStyle,\n                shape: 'circle',\n                size: circleSize,\n            },\n        },\n    }));\n    return params;\n}\n/**\n * meta 配置\n * @param params\n */\nexport function meta(params) {\n    return flow(scale({}, {\n        // 必须强制为 nice\n        x: { min: 0, max: 1, minLimit: 0, maxLimit: 1, nice: true },\n        y: { min: 0, max: 1, minLimit: 0, maxLimit: 1, nice: true },\n    }))(params);\n}\n/**\n * tooltip 配置\n * @param params\n */\nfunction tooltip(params) {\n    var chart = params.chart, options = params.options;\n    var tooltip = options.tooltip;\n    if (tooltip === false) {\n        chart.tooltip(false);\n    }\n    else {\n        var tooltipOptions = tooltip;\n        // 设置了 fields，就不进行 customItems 了; 设置 formatter 时，需要搭配 fields\n        if (!get(tooltip, 'fields')) {\n            tooltipOptions = deepAssign({}, {\n                customItems: function (items) {\n                    return items.map(function (item) {\n                        var scales = get(chart.getOptions(), 'scales');\n                        var nameFormatter = get(scales, ['name', 'formatter'], function (v) { return v; });\n                        var valueFormatter = get(scales, ['value', 'formatter'], function (v) { return v; });\n                        return __assign(__assign({}, item), { name: nameFormatter(item.data.name), value: valueFormatter(item.data.value) });\n                    });\n                },\n            }, tooltipOptions);\n        }\n        chart.tooltip(tooltipOptions);\n    }\n    return params;\n}\n/**\n * 坐标轴, 默认关闭\n * @param params\n */\nfunction axis(params) {\n    var chart = params.chart;\n    chart.axis(false);\n    return params;\n}\nfunction adaptorInteraction(options) {\n    var drilldown = options.drilldown, _a = options.interactions, interactions = _a === void 0 ? [] : _a;\n    if (drilldown === null || drilldown === void 0 ? void 0 : drilldown.enabled) {\n        return deepAssign({}, options, {\n            interactions: __spreadArray(__spreadArray([], interactions, true), [\n                {\n                    type: 'drill-down',\n                    cfg: { drillDownConfig: drilldown, transformData: transformData, enableDrillDown: true },\n                },\n            ], false),\n        });\n    }\n    return options;\n}\n/**\n * 交互配置\n * @param params\n * @returns\n */\nfunction interaction(params) {\n    var chart = params.chart, options = params.options;\n    baseInteraction({\n        chart: chart,\n        options: adaptorInteraction(options),\n    });\n    return params;\n}\n/**\n * 矩形树图\n * @param chart\n * @param options\n */\nexport function adaptor(params) {\n    return flow(pattern('pointStyle'), defaultOptions, padding, theme, meta, geometry, axis, legend, tooltip, interaction, animation, annotation())(params);\n}\n//# sourceMappingURL=adaptor.js.map","import { registerAction, registerInteraction } from '@antv/g2';\nimport { get, isArray } from '@antv/util';\nimport { DrillDownAction } from './actions/drill-down';\n/**\n * 判断是否为父节点\n */\nexport function isParentNode(context) {\n    var data = get(context, ['event', 'data', 'data'], {});\n    return isArray(data.children) && data.children.length > 0;\n}\n/**\n * 判断是否在中心\n */\nfunction inCenter(context) {\n    var coordinate = context.view.getCoordinate();\n    var innerRadius = coordinate.innerRadius;\n    if (innerRadius) {\n        var _a = context.event, x = _a.x, y = _a.y;\n        var _b = coordinate.center, centerX = _b.x, centerY = _b.y;\n        var r = coordinate.getRadius() * innerRadius;\n        var distance = Math.sqrt(Math.pow((centerX - x), 2) + Math.pow((centerY - y), 2));\n        return distance < r;\n    }\n    return false;\n}\nregisterAction('drill-down-action', DrillDownAction);\nregisterInteraction('drill-down', {\n    showEnable: [\n        { trigger: 'element:mouseenter', action: 'cursor:pointer', isEnable: isParentNode },\n        { trigger: 'element:mouseleave', action: 'cursor:default' },\n        // 中心处，肯定会触发 element:mouseleave 操作\n        { trigger: 'element:mouseleave', action: 'cursor:pointer', isEnable: inCenter },\n    ],\n    start: [\n        {\n            trigger: 'element:click',\n            isEnable: isParentNode,\n            action: ['drill-down-action:click'],\n        },\n        {\n            trigger: 'afterchangesize',\n            action: ['drill-down-action:resetPosition'],\n        },\n        {\n            // 点击中心，返回上一层\n            trigger: 'click',\n            isEnable: inCenter,\n            action: ['drill-down-action:back'],\n        },\n    ],\n});\n//# sourceMappingURL=drill-down.js.map","import { __extends } from \"tslib\";\nimport { Plot } from '../../core/plot';\nimport { adaptor } from './adaptor';\nimport { DEFAULT_OPTIONS } from './constant';\nimport './interactions';\n/**\n *  CirclePacking\n * @usage hierarchy, proportions\n */\nvar CirclePacking = /** @class */ (function (_super) {\n    __extends(CirclePacking, _super);\n    function CirclePacking() {\n        var _this = _super !== null && _super.apply(this, arguments) || this;\n        /** 图表类型 */\n        _this.type = 'circle-packing';\n        return _this;\n    }\n    /**\n     * 获取 面积图 默认配置项\n     * 供外部使用\n     */\n    CirclePacking.getDefaultOptions = function () {\n        return DEFAULT_OPTIONS;\n    };\n    CirclePacking.prototype.getDefaultOptions = function () {\n        return CirclePacking.getDefaultOptions();\n    };\n    /**\n     * 获取适配器\n     */\n    CirclePacking.prototype.getSchemaAdaptor = function () {\n        return adaptor;\n    };\n    /**\n     * 覆写父类的方法\n     */\n    CirclePacking.prototype.triggerResize = function () {\n        if (!this.chart.destroyed) {\n            // 首先自适应容器的宽高\n            this.chart.forceFit(); // g2 内部执行 changeSize，changeSize 中执行 render(true)\n            this.chart.clear();\n            this.execAdaptor(); // 核心：宽高更新之后计算padding\n            // 渲染\n            this.chart.render(true);\n        }\n    };\n    return CirclePacking;\n}(Plot));\nexport { CirclePacking };\n//# sourceMappingURL=index.js.map","import { __assign } from \"tslib\";\nexport var LEFT_AXES_VIEW = 'left-axes-view';\nexport var RIGHT_AXES_VIEW = 'right-axes-view';\nexport var DEFAULT_YAXIS_CONFIG = {\n    nice: true,\n    label: {\n        autoHide: true,\n        autoRotate: false,\n    },\n};\nexport var DEFAULT_LEFT_YAXIS_CONFIG = __assign(__assign({}, DEFAULT_YAXIS_CONFIG), { position: 'left' });\nexport var DEFAULT_RIGHT_YAXIS_CONFIG = __assign(__assign({}, DEFAULT_YAXIS_CONFIG), { position: 'right', grid: null });\n//# sourceMappingURL=constant.js.map","export var AxisType;\n(function (AxisType) {\n    AxisType[\"Left\"] = \"Left\";\n    AxisType[\"Right\"] = \"Right\";\n})(AxisType || (AxisType = {}));\nexport var DualAxesGeometry;\n(function (DualAxesGeometry) {\n    DualAxesGeometry[\"Line\"] = \"line\";\n    DualAxesGeometry[\"Column\"] = \"column\";\n})(DualAxesGeometry || (DualAxesGeometry = {}));\n//# sourceMappingURL=types.js.map","import { __assign } from \"tslib\";\nimport { get, isArray } from '@antv/util';\nimport { deepAssign } from '../../../utils';\nimport { DEFAULT_LEFT_YAXIS_CONFIG, DEFAULT_RIGHT_YAXIS_CONFIG } from '../constant';\nimport { AxisType, DualAxesGeometry, } from '../types';\n/**\n * 根据 GeometryOption 判断 geometry 是否为 line\n */\nexport function isLine(geometryOption) {\n    return get(geometryOption, 'geometry') === DualAxesGeometry.Line;\n}\n/**\n * 根据 GeometryOption 判断 geometry 是否为 Column\n */\nexport function isColumn(geometryOption) {\n    return get(geometryOption, 'geometry') === DualAxesGeometry.Column;\n}\n/**\n * 获取 GeometryOption\n * @param geometryOption\n * @param axis\n */\nexport function getGeometryOption(xField, yField, geometryOption) {\n    // 空默认为线\n    return isColumn(geometryOption)\n        ? deepAssign({}, {\n            geometry: DualAxesGeometry.Column,\n            label: geometryOption.label && geometryOption.isRange\n                ? {\n                    content: function (item) {\n                        var _a;\n                        return (_a = item[yField]) === null || _a === void 0 ? void 0 : _a.join('-');\n                    },\n                }\n                : undefined,\n        }, geometryOption)\n        : __assign({ geometry: DualAxesGeometry.Line }, geometryOption);\n}\n/**\n * 兼容一些属性 为 arr 和 obj 的两种情况， 如 yAxis，annotations\n * 为了防止左右 yField 相同，导致变成 object 之后被覆盖，所以都转变成数组的形式\n * @param yField\n * @param transformAttribute\n */\nexport function transformObjectToArray(yField, transformAttribute) {\n    var y1 = yField[0], y2 = yField[1];\n    if (isArray(transformAttribute)) {\n        // 将数组补齐为两个\n        var a1_1 = transformAttribute[0], a2_1 = transformAttribute[1];\n        return [a1_1, a2_1];\n    }\n    var a1 = get(transformAttribute, y1);\n    var a2 = get(transformAttribute, y2);\n    return [a1, a2];\n}\n/**\n * 获取默认值\n * @param yAxis\n * @param axisType\n */\nexport function getYAxisWithDefault(yAxis, axisType) {\n    if (axisType === AxisType.Left) {\n        return yAxis === false ? false : deepAssign({}, DEFAULT_LEFT_YAXIS_CONFIG, yAxis);\n    }\n    else if (axisType === AxisType.Right) {\n        return yAxis === false ? false : deepAssign({}, DEFAULT_RIGHT_YAXIS_CONFIG, yAxis);\n    }\n    return yAxis;\n}\n//# sourceMappingURL=option.js.map","import { Util } from '@antv/g2';\nimport { get, isEmpty, isFunction, reduce } from '@antv/util';\nimport { deepAssign, findGeometry } from '../../../utils';\nimport { isLine } from './option';\n/**\n * 获取 view 的 legendItem，供存在不含有 seriesField 的图形使用\n * @param params\n */\nexport function getViewLegendItems(params) {\n    var view = params.view, geometryOption = params.geometryOption, yField = params.yField, legend = params.legend;\n    var userMarker = get(legend, 'marker');\n    var geometry = findGeometry(view, isLine(geometryOption) ? 'line' : 'interval');\n    if (!geometryOption.seriesField) {\n        var legendItemName = get(view, \"options.scales.\".concat(yField, \".alias\")) || yField;\n        // 返回 g2 设置的图例\n        var colorAttribute = geometry.getAttribute('color');\n        var color = view.getTheme().defaultColor;\n        if (colorAttribute) {\n            color = Util.getMappingValue(colorAttribute, legendItemName, get(colorAttribute, ['values', 0], color));\n        }\n        var marker = (isFunction(userMarker)\n            ? userMarker\n            : !isEmpty(userMarker) &&\n                deepAssign({}, {\n                    style: {\n                        stroke: color,\n                        fill: color,\n                    },\n                }, userMarker)) ||\n            (isLine(geometryOption)\n                ? {\n                    symbol: function (x, y, r) {\n                        return [\n                            ['M', x - r, y],\n                            ['L', x + r, y],\n                        ];\n                    },\n                    style: {\n                        lineWidth: 2,\n                        r: 6,\n                        stroke: color,\n                    },\n                }\n                : {\n                    symbol: 'square',\n                    style: {\n                        fill: color,\n                    },\n                });\n        return [\n            {\n                value: yField,\n                name: legendItemName,\n                marker: marker,\n                isGeometry: true,\n                viewId: view.id,\n            },\n        ];\n    }\n    var attributes = geometry.getGroupAttributes();\n    return reduce(attributes, function (items, attr) {\n        var attrItems = Util.getLegendItems(view, geometry, attr, view.getTheme(), userMarker);\n        return items.concat(attrItems);\n    }, []);\n}\n//# sourceMappingURL=legend.js.map","import { size, valuesOfKey } from '@antv/util';\nimport { isBetween } from '../../../utils';\n/**\n * 右侧 View 进行 slider 过滤\n * 由于双轴图是多 View , 需要监听左侧 Slider 的 change 事件来同步右侧 View\n * @param { View } view 右侧视图\n * @param { number[] } sliderValue 滑块当前值\n * @returns void\n */\nexport var doSliderFilter = function (view, sliderValue) {\n    var min = sliderValue[0], max = sliderValue[1];\n    var data = view.getOptions().data;\n    var xScale = view.getXScale();\n    var dataSize = size(data);\n    if (!xScale || !dataSize) {\n        return;\n    }\n    var isHorizontal = true;\n    var values = valuesOfKey(data, xScale.field);\n    var xValues = isHorizontal ? values : values.reverse();\n    var xTickCount = size(xValues);\n    var minIndex = Math.round(min * (xTickCount - 1));\n    var maxIndex = Math.round(max * (xTickCount - 1));\n    // 增加 x 轴的过滤器\n    view.filter(xScale.field, function (value) {\n        var idx = xValues.indexOf(value);\n        return idx > -1 ? isBetween(idx, minIndex, maxIndex) : true;\n    });\n    view.getRootView().render(true);\n};\n//# sourceMappingURL=render-sider.js.map","import { __assign } from \"tslib\";\nimport { each, every, find, findIndex, get, isBoolean, isEqual, isObject } from '@antv/util';\nimport { animation as commonAnimation, annotation as commonAnnotation, interaction as commonInteraction, limitInPlot as commonLimitInPlot, scale, theme as commonTheme, } from '../../adaptor/common';\nimport { deepAssign, flow } from '../../utils';\nimport { percent } from '../../utils/transform/percent';\nimport { findViewById } from '../../utils/view';\nimport { LEFT_AXES_VIEW, RIGHT_AXES_VIEW } from './constant';\nimport { AxisType, DualAxesGeometry } from './types';\nimport { drawSingleGeometry } from './util/geometry';\nimport { getViewLegendItems } from './util/legend';\nimport { getGeometryOption, getYAxisWithDefault, isColumn, transformObjectToArray } from './util/option';\nimport { doSliderFilter } from './util/render-sider';\n/**\n * transformOptions，双轴图整体的取参逻辑如下\n * 1. get index getOptions: 对应的是默认的图表参数，如 appendPadding，syncView 等\n * 2. get adpator transformOption: 对应的是双轴图的默认参数，deepAssign 优先级从低到高如下\n *    2.1 defaultoption，如 tooltip，legend\n *    2.2 用户填写 options\n *    2.3 根据用户填写的 options 补充的数组型 options，如 yaxis，GeometryOption，因为 deepAssign 无法 assign 数组\n *\n * @param params\n */\nexport function transformOptions(params) {\n    var _a;\n    var options = params.options;\n    var _b = options.geometryOptions, geometryOptions = _b === void 0 ? [] : _b, xField = options.xField, yField = options.yField;\n    var allLine = every(geometryOptions, function (_a) {\n        var geometry = _a.geometry;\n        return geometry === DualAxesGeometry.Line || geometry === undefined;\n    });\n    return deepAssign({}, {\n        options: {\n            geometryOptions: [],\n            meta: (_a = {},\n                _a[xField] = {\n                    // 默认为 cat 类型\n                    type: 'cat',\n                    // x 轴一定是同步 scale 的\n                    sync: true,\n                    // 如果有没有柱子，则\n                    range: allLine ? [0, 1] : undefined,\n                },\n                _a),\n            tooltip: {\n                showMarkers: allLine,\n                // 存在柱状图，不显示 crosshairs\n                showCrosshairs: allLine,\n                shared: true,\n                crosshairs: {\n                    type: 'x',\n                },\n            },\n            interactions: !allLine\n                ? [{ type: 'legend-visible-filter' }, { type: 'active-region' }]\n                : [{ type: 'legend-visible-filter' }],\n            legend: {\n                position: 'top-left',\n            },\n        },\n    }, params, {\n        options: {\n            // yAxis\n            yAxis: transformObjectToArray(yField, options.yAxis),\n            // geometryOptions\n            geometryOptions: [\n                getGeometryOption(xField, yField[0], geometryOptions[0]),\n                getGeometryOption(xField, yField[1], geometryOptions[1]),\n            ],\n            // annotations\n            annotations: transformObjectToArray(yField, options.annotations),\n        },\n    });\n}\n/**\n * 创建 双轴图 中绘制图形的 view，提前创建是因为 theme 适配器的需要\n * @param params\n */\nfunction createViews(params) {\n    var _a, _b;\n    var chart = params.chart, options = params.options;\n    var geometryOptions = options.geometryOptions;\n    var SORT_MAP = { line: 0, column: 1 };\n    // 包含配置，id，数据的结构\n    var geometries = [\n        { type: (_a = geometryOptions[0]) === null || _a === void 0 ? void 0 : _a.geometry, id: LEFT_AXES_VIEW },\n        { type: (_b = geometryOptions[1]) === null || _b === void 0 ? void 0 : _b.geometry, id: RIGHT_AXES_VIEW },\n    ];\n    // 将线的 view 放置在更上一层，防止线柱遮挡。先柱后先\n    geometries.sort(function (a, b) { return -SORT_MAP[a.type] + SORT_MAP[b.type]; }).forEach(function (g) { return chart.createView({ id: g.id }); });\n    return params;\n}\n/**\n * 绘制图形\n * @param params\n */\nfunction geometry(params) {\n    var chart = params.chart, options = params.options;\n    var xField = options.xField, yField = options.yField, geometryOptions = options.geometryOptions, data = options.data, tooltip = options.tooltip;\n    // 包含配置，id，数据的结构\n    var geometries = [\n        __assign(__assign({}, geometryOptions[0]), { id: LEFT_AXES_VIEW, data: data[0], yField: yField[0] }),\n        __assign(__assign({}, geometryOptions[1]), { id: RIGHT_AXES_VIEW, data: data[1], yField: yField[1] }),\n    ];\n    geometries.forEach(function (geometry) {\n        var id = geometry.id, data = geometry.data, yField = geometry.yField;\n        // 百分比柱状图需要额外处理一次数据\n        var isPercent = isColumn(geometry) && geometry.isPercent;\n        var formatData = isPercent ? percent(data, yField, xField, yField) : data;\n        var view = findViewById(chart, id).data(formatData);\n        var tooltipOptions = isPercent\n            ? __assign({ formatter: function (datum) { return ({\n                    name: datum[geometry.seriesField] || yField,\n                    value: (Number(datum[yField]) * 100).toFixed(2) + '%',\n                }); } }, tooltip) : tooltip;\n        // 绘制图形\n        drawSingleGeometry({\n            chart: view,\n            options: {\n                xField: xField,\n                yField: yField,\n                tooltip: tooltipOptions,\n                geometryOption: geometry,\n            },\n        });\n    });\n    return params;\n}\nexport function color(params) {\n    var _a;\n    var chart = params.chart, options = params.options;\n    var geometryOptions = options.geometryOptions;\n    var themeColor = ((_a = chart.getTheme()) === null || _a === void 0 ? void 0 : _a.colors10) || [];\n    var start = 0;\n    /* 为 geometry 添加默认 color。\n     * 1. 若 geometryOptions 存在 color，则在 drawGeometry 时已处理\n     * 2. 若 不存在 color，获取 Geometry group scales个数，在 theme color 10 中提取\n     * 3. 为防止 group 过多导致右色板无值或值很少，右 view 面板在依次提取剩下的 N 个 后再 concat 一次 themeColor\n     * 4. 为简便获取 Geometry group scales个数，在绘制完后再执行 color\n     * 5. 考虑之后将不同 view 使用同一个色板的需求沉淀到 g2\n     */\n    chart.once('beforepaint', function () {\n        each(geometryOptions, function (geometryOption, index) {\n            var view = findViewById(chart, index === 0 ? LEFT_AXES_VIEW : RIGHT_AXES_VIEW);\n            if (geometryOption.color)\n                return;\n            var groupScale = view.getGroupScales();\n            var count = get(groupScale, [0, 'values', 'length'], 1);\n            var color = themeColor.slice(start, start + count).concat(index === 0 ? [] : themeColor);\n            view.geometries.forEach(function (geometry) {\n                if (geometryOption.seriesField) {\n                    geometry.color(geometryOption.seriesField, color);\n                }\n                else {\n                    geometry.color(color[0]);\n                }\n            });\n            start += count;\n        });\n        chart.render(true);\n    });\n    return params;\n}\n/**\n * meta 配置\n * @param params\n */\nexport function meta(params) {\n    var _a, _b;\n    var chart = params.chart, options = params.options;\n    var xAxis = options.xAxis, yAxis = options.yAxis, xField = options.xField, yField = options.yField;\n    scale((_a = {},\n        _a[xField] = xAxis,\n        _a[yField[0]] = yAxis[0],\n        _a))(deepAssign({}, params, { chart: findViewById(chart, LEFT_AXES_VIEW) }));\n    scale((_b = {},\n        _b[xField] = xAxis,\n        _b[yField[1]] = yAxis[1],\n        _b))(deepAssign({}, params, { chart: findViewById(chart, RIGHT_AXES_VIEW) }));\n    return params;\n}\n/**\n * axis 配置\n * @param params\n */\nexport function axis(params) {\n    var chart = params.chart, options = params.options;\n    var leftView = findViewById(chart, LEFT_AXES_VIEW);\n    var rightView = findViewById(chart, RIGHT_AXES_VIEW);\n    var xField = options.xField, yField = options.yField, xAxis = options.xAxis, yAxis = options.yAxis;\n    chart.axis(xField, false);\n    chart.axis(yField[0], false);\n    chart.axis(yField[1], false);\n    // 左 View\n    leftView.axis(xField, xAxis);\n    leftView.axis(yField[0], getYAxisWithDefault(yAxis[0], AxisType.Left));\n    // 右 Y 轴\n    rightView.axis(xField, false);\n    rightView.axis(yField[1], getYAxisWithDefault(yAxis[1], AxisType.Right));\n    return params;\n}\n/**\n * tooltip 配置\n * @param params\n */\nexport function tooltip(params) {\n    var chart = params.chart, options = params.options;\n    var tooltip = options.tooltip;\n    var leftView = findViewById(chart, LEFT_AXES_VIEW);\n    var rightView = findViewById(chart, RIGHT_AXES_VIEW);\n    // tooltip 经过 getDefaultOption 处理后，一定不为 undefined\n    chart.tooltip(tooltip);\n    // 在 view 上添加 tooltip，使得 shared 和 interaction active-region 起作用\n    // view 应该继承 chart 里的 shared，但是从表现看来，继承有点问题\n    leftView.tooltip({\n        shared: true,\n    });\n    rightView.tooltip({\n        shared: true,\n    });\n    return params;\n}\n/**\n * interaction 配置\n * @param params\n */\nexport function interaction(params) {\n    var chart = params.chart;\n    commonInteraction(deepAssign({}, params, { chart: findViewById(chart, LEFT_AXES_VIEW) }));\n    commonInteraction(deepAssign({}, params, { chart: findViewById(chart, RIGHT_AXES_VIEW) }));\n    return params;\n}\n/**\n * annotation 配置\n * @param params\n */\nexport function annotation(params) {\n    var chart = params.chart, options = params.options;\n    var annotations = options.annotations;\n    var a1 = get(annotations, [0]);\n    var a2 = get(annotations, [1]);\n    commonAnnotation(a1)(deepAssign({}, params, {\n        chart: findViewById(chart, LEFT_AXES_VIEW),\n        options: {\n            annotations: a1,\n        },\n    }));\n    commonAnnotation(a2)(deepAssign({}, params, {\n        chart: findViewById(chart, RIGHT_AXES_VIEW),\n        options: {\n            annotations: a2,\n        },\n    }));\n    return params;\n}\nexport function theme(params) {\n    var chart = params.chart;\n    /*\n     * 双轴图中，部分组件是绘制在子 view 层（例如 axis，line），部分组件是绘制在 chart （例如 legend)\n     * 为 chart 和 子 view 均注册 theme，使其自行遵循 G2 theme geometry > view > chart 进行渲染。\n     */\n    commonTheme(deepAssign({}, params, { chart: findViewById(chart, LEFT_AXES_VIEW) }));\n    commonTheme(deepAssign({}, params, { chart: findViewById(chart, RIGHT_AXES_VIEW) }));\n    commonTheme(params);\n    return params;\n}\nexport function animation(params) {\n    var chart = params.chart;\n    commonAnimation(deepAssign({}, params, { chart: findViewById(chart, LEFT_AXES_VIEW) }));\n    commonAnimation(deepAssign({}, params, { chart: findViewById(chart, RIGHT_AXES_VIEW) }));\n    return params;\n}\n/**\n * 双轴图 limitInPlot\n * @param params\n */\nexport function limitInPlot(params) {\n    var chart = params.chart, options = params.options;\n    var yAxis = options.yAxis;\n    commonLimitInPlot(deepAssign({}, params, {\n        chart: findViewById(chart, LEFT_AXES_VIEW),\n        options: {\n            yAxis: yAxis[0],\n        },\n    }));\n    commonLimitInPlot(deepAssign({}, params, {\n        chart: findViewById(chart, RIGHT_AXES_VIEW),\n        options: {\n            yAxis: yAxis[1],\n        },\n    }));\n    return params;\n}\n/**\n * legend 配置\n * 使用 custom，便于和类似于分组柱状图-单折线图的逻辑统一\n * @param params\n */\nexport function legend(params) {\n    var chart = params.chart, options = params.options;\n    var legend = options.legend, geometryOptions = options.geometryOptions, yField = options.yField, data = options.data;\n    var leftView = findViewById(chart, LEFT_AXES_VIEW);\n    var rightView = findViewById(chart, RIGHT_AXES_VIEW);\n    if (legend === false) {\n        chart.legend(false);\n    }\n    else if (isObject(legend) && legend.custom === true) {\n        chart.legend(legend);\n    }\n    else {\n        var leftLegend_1 = get(geometryOptions, [0, 'legend'], legend);\n        var rightLegend_1 = get(geometryOptions, [1, 'legend'], legend);\n        // 均使用自定义图例\n        chart.once('beforepaint', function () {\n            var leftItems = data[0].length\n                ? getViewLegendItems({\n                    view: leftView,\n                    geometryOption: geometryOptions[0],\n                    yField: yField[0],\n                    legend: leftLegend_1,\n                })\n                : [];\n            var rightItems = data[1].length\n                ? getViewLegendItems({\n                    view: rightView,\n                    geometryOption: geometryOptions[1],\n                    yField: yField[1],\n                    legend: rightLegend_1,\n                })\n                : [];\n            chart.legend(deepAssign({}, legend, {\n                custom: true,\n                // todo 修改类型定义\n                // @ts-ignore\n                items: leftItems.concat(rightItems),\n            }));\n        });\n        if (geometryOptions[0].seriesField) {\n            leftView.legend(geometryOptions[0].seriesField, leftLegend_1);\n        }\n        if (geometryOptions[1].seriesField) {\n            rightView.legend(geometryOptions[1].seriesField, rightLegend_1);\n        }\n        // 自定义图例交互\n        chart.on('legend-item:click', function (evt) {\n            var delegateObject = get(evt, 'gEvent.delegateObject', {});\n            if (delegateObject && delegateObject.item) {\n                var _a = delegateObject.item, field_1 = _a.value, isGeometry = _a.isGeometry, viewId = _a.viewId;\n                // geometry 的时候，直接使用 view.changeVisible\n                if (isGeometry) {\n                    var idx = findIndex(yField, function (yF) { return yF === field_1; });\n                    if (idx > -1) {\n                        var geometries = get(findViewById(chart, viewId), 'geometries');\n                        each(geometries, function (g) {\n                            g.changeVisible(!delegateObject.item.unchecked);\n                        });\n                    }\n                }\n                else {\n                    var legendItem_1 = get(chart.getController('legend'), 'option.items', []);\n                    // 分组柱线图\n                    each(chart.views, function (view) {\n                        // 单折柱图\n                        var groupScale = view.getGroupScales();\n                        each(groupScale, function (scale) {\n                            if (scale.values && scale.values.indexOf(field_1) > -1) {\n                                view.filter(scale.field, function (value) {\n                                    var curLegendItem = find(legendItem_1, function (item) { return item.value === value; });\n                                    // 使用 legend 中的 unchecked 来判断，使得支持关闭多个图例\n                                    return !curLegendItem.unchecked;\n                                });\n                            }\n                        });\n                        chart.render(true);\n                    });\n                }\n            }\n        });\n    }\n    return params;\n}\n/**\n * 双轴图 slider 适配器\n * @param params\n */\nexport function slider(params) {\n    var chart = params.chart, options = params.options;\n    var slider = options.slider;\n    var leftView = findViewById(chart, LEFT_AXES_VIEW);\n    var rightView = findViewById(chart, RIGHT_AXES_VIEW);\n    if (slider) {\n        // 左 View\n        leftView.option('slider', slider);\n        // 监听左侧 slider 改变事件， 同步右侧 View 视图\n        leftView.on('slider:valuechanged', function (evt) {\n            var _a = evt.event, value = _a.value, originValue = _a.originValue;\n            if (isEqual(value, originValue)) {\n                return;\n            }\n            doSliderFilter(rightView, value);\n        });\n        chart.once('afterpaint', function () {\n            // 初始化数据，配置默认值时需要同步\n            if (!isBoolean(slider)) {\n                var start = slider.start, end = slider.end;\n                if (start || end) {\n                    doSliderFilter(rightView, [start, end]);\n                }\n            }\n        });\n    }\n    return params;\n}\n/**\n * 双折线图适配器\n * @param chart\n * @param options\n */\nexport function adaptor(params) {\n    // transformOptions 一定在最前面处理；color legend 使用了 beforepaint，为便于理解放在最后面\n    return flow(transformOptions, createViews, \n    // 主题靠前设置，作为最低优先级\n    theme, geometry, meta, axis, limitInPlot, tooltip, interaction, annotation, animation, color, legend, slider)(params);\n}\n//# sourceMappingURL=adaptor.js.map","import { __assign } from \"tslib\";\nimport { each } from '@antv/util';\nimport { line, point } from '../../../adaptor/geometries';\nimport { deepAssign, pick } from '../../../utils';\nimport { adaptor as columnAdaptor } from '../../column/adaptor';\nimport { isColumn, isLine } from './option';\n/**\n * 绘制单个图形\n * @param params\n */\nexport function drawSingleGeometry(params) {\n    var options = params.options, chart = params.chart;\n    var geometryOption = options.geometryOption;\n    var isStack = geometryOption.isStack, color = geometryOption.color, seriesField = geometryOption.seriesField, groupField = geometryOption.groupField, isGroup = geometryOption.isGroup;\n    var FIELD_KEY = ['xField', 'yField'];\n    if (isLine(geometryOption)) {\n        // 绘制线\n        line(deepAssign({}, params, {\n            options: __assign(__assign(__assign({}, pick(options, FIELD_KEY)), geometryOption), { line: {\n                    color: geometryOption.color,\n                    style: geometryOption.lineStyle,\n                } }),\n        }));\n        // 绘制点\n        point(deepAssign({}, params, {\n            options: __assign(__assign(__assign({}, pick(options, FIELD_KEY)), geometryOption), { point: geometryOption.point && __assign({ color: color, shape: 'circle' }, geometryOption.point) }),\n        }));\n        // adjust\n        var adjust_1 = [];\n        if (isGroup) {\n            adjust_1.push({\n                type: 'dodge',\n                dodgeBy: groupField || seriesField,\n                customOffset: 0,\n            });\n        }\n        if (isStack) {\n            adjust_1.push({\n                type: 'stack',\n            });\n        }\n        if (adjust_1.length) {\n            each(chart.geometries, function (g) {\n                g.adjust(adjust_1);\n            });\n        }\n    }\n    if (isColumn(geometryOption)) {\n        columnAdaptor(deepAssign({}, params, {\n            options: __assign(__assign(__assign({}, pick(options, FIELD_KEY)), geometryOption), { widthRatio: geometryOption.columnWidthRatio, interval: __assign(__assign({}, pick(geometryOption, ['color'])), { style: geometryOption.columnStyle }) }),\n        }));\n    }\n    return params;\n}\n//# sourceMappingURL=geometry.js.map","import { __assign } from \"tslib\";\nimport { each, omit } from '@antv/util';\nimport { theme } from '../../adaptor/common';\nimport { AXIS_META_CONFIG_KEYS } from '../../constant';\nimport { deepAssign, flow, pick } from '../../utils';\nimport { execPlotAdaptor } from '../mix/utils';\nimport { execViewAdaptor } from './utils';\nfunction facetAdaptor(params) {\n    var chart = params.chart, options = params.options;\n    var facetType = options.type, data = options.data, fields = options.fields, eachView = options.eachView;\n    var restFacetCfg = omit(options, [\n        'type',\n        'data',\n        'fields',\n        'eachView',\n        'axes',\n        'meta',\n        'tooltip',\n        'coordinate',\n        'theme',\n        'legend',\n        'interactions',\n        'annotations',\n    ]);\n    // 1. data\n    chart.data(data);\n    // 2. facet\n    chart.facet(facetType, __assign(__assign({}, restFacetCfg), { fields: fields, eachView: function (viewOfG2, facet) {\n            var viewOptions = eachView(viewOfG2, facet);\n            if (viewOptions.geometries) {\n                execViewAdaptor(viewOfG2, viewOptions);\n            }\n            else {\n                var plot = viewOptions;\n                var plotOptions_1 = plot.options;\n                // 如果 view 内部没有指定映射字段，则使用 options 内指定的映射字段\n                ['seriesField', 'colorField', 'shapeField', 'sizeField', 'groupField'].forEach(function (key) {\n                    if (options[key] && typeof plotOptions_1[key] === 'undefined') {\n                        plotOptions_1[key] = options[key];\n                    }\n                });\n                // @ts-ignore 仪表盘没 tooltip\n                if (plotOptions_1.tooltip) {\n                    // 配置 tooltip 交互\n                    viewOfG2.interaction('tooltip');\n                }\n                execPlotAdaptor(plot.type, viewOfG2, plotOptions_1);\n            }\n        } }));\n    return params;\n}\nfunction component(params) {\n    var chart = params.chart, options = params.options;\n    var axes = options.axes, meta = options.meta, tooltip = options.tooltip, coordinate = options.coordinate, theme = options.theme, legend = options.legend, interactions = options.interactions, annotations = options.annotations, shapeField = options.shapeField, sizeField = options.sizeField, shapeLegend = options.shapeLegend, sizeLegend = options.sizeLegend;\n    // 3. meta 配置\n    var scales = {};\n    if (axes) {\n        each(axes, function (axis, field) {\n            scales[field] = pick(axis, AXIS_META_CONFIG_KEYS);\n        });\n    }\n    scales = deepAssign({}, meta, scales);\n    chart.scale(scales);\n    // 4. coordinate 配置\n    chart.coordinate(coordinate);\n    // 5. axis 轴配置 (默认不展示)\n    if (!axes) {\n        chart.axis(false);\n    }\n    else {\n        each(axes, function (axis, field) {\n            chart.axis(field, axis);\n        });\n    }\n    // 6. tooltip 配置\n    if (tooltip) {\n        chart.interaction('tooltip');\n        chart.tooltip(tooltip);\n    }\n    else if (tooltip === false) {\n        chart.removeInteraction('tooltip');\n    }\n    // 7. legend 配置（默认展示）\n    chart.legend(legend);\n    var showLegend = legend !== false;\n    if (shapeField) {\n        if (shapeLegend) {\n            chart.legend(shapeField, shapeLegend);\n        }\n        else {\n            chart.legend(shapeField, shapeLegend === false ? false : legend);\n        }\n    }\n    if (sizeField) {\n        chart.legend(sizeField, sizeLegend ? sizeLegend : false);\n    }\n    // /** 默认不展示 shape 图例，当 shapeLegend 为 undefined 也不展示图例 */\n    if (!showLegend && !shapeLegend && !sizeLegend) {\n        chart.legend(false);\n    }\n    // theme 配置\n    if (theme) {\n        chart.theme(theme);\n    }\n    // 8. interactions\n    each(interactions, function (interaction) {\n        if (interaction.enable === false) {\n            chart.removeInteraction(interaction.type);\n        }\n        else {\n            chart.interaction(interaction.type, interaction.cfg);\n        }\n    });\n    // 9. annotations\n    each(annotations, function (annotation) {\n        chart.annotation()[annotation.type](__assign({}, annotation));\n    });\n    return params;\n}\n/**\n * 分面图适配器\n * @param chart\n * @param options\n */\nexport function adaptor(params) {\n    // flow 的方式处理所有的配置到 G2 API\n    return flow(theme, facetAdaptor, component)(params);\n}\n//# sourceMappingURL=adaptor.js.map","import { __assign } from \"tslib\";\nimport { each } from '@antv/util';\nimport { geometry as geometryAdaptor } from '../../adaptor/geometries/base';\nimport { AXIS_META_CONFIG_KEYS } from '../../constant';\nimport { addViewAnimation, deepAssign, pick } from '../../utils';\n/**\n *\n * @param params 分面图 参数\n * @returns facet eachView 的回调设置每个 view 的展示\n */\nexport function execViewAdaptor(viewOfG2, options) {\n    var data = options.data, coordinate = options.coordinate, interactions = options.interactions, annotations = options.annotations, animation = options.animation, tooltip = options.tooltip, axes = options.axes, meta = options.meta, geometries = options.geometries;\n    // 1. data, optional\n    if (data) {\n        viewOfG2.data(data);\n    }\n    // 2. meta 配置\n    var scales = {};\n    if (axes) {\n        each(axes, function (axis, field) {\n            scales[field] = pick(axis, AXIS_META_CONFIG_KEYS);\n        });\n    }\n    scales = deepAssign({}, meta, scales);\n    viewOfG2.scale(scales);\n    // 3. coordinate 配置 (默认由顶层决定)\n    if (coordinate) {\n        viewOfG2.coordinate(coordinate);\n    }\n    // 4. axis 轴配置 (默认由顶层决定，但可以通过 false 强制关闭)\n    if (axes === false) {\n        viewOfG2.axis(false);\n    }\n    else {\n        each(axes, function (axis, field) {\n            viewOfG2.axis(field, axis);\n        });\n    }\n    each(geometries, function (geometry) {\n        // Geometry\n        var ext = geometryAdaptor({\n            chart: viewOfG2,\n            options: geometry,\n        }).ext;\n        // Geometry adjust\n        var adjust = geometry.adjust;\n        if (adjust) {\n            ext.geometry.adjust(adjust);\n        }\n    });\n    // 5. interactions\n    each(interactions, function (interaction) {\n        if (interaction.enable === false) {\n            viewOfG2.removeInteraction(interaction.type);\n        }\n        else {\n            viewOfG2.interaction(interaction.type, interaction.cfg);\n        }\n    });\n    // 6. annotations\n    each(annotations, function (annotation) {\n        viewOfG2.annotation()[annotation.type](__assign({}, annotation));\n    });\n    // 7. animation (先做动画)\n    addViewAnimation(viewOfG2, animation);\n    if (tooltip) {\n        // 8. tooltip\n        viewOfG2.interaction('tooltip');\n        viewOfG2.tooltip(tooltip);\n    }\n    else if (tooltip === false) {\n        viewOfG2.removeInteraction('tooltip');\n    }\n}\n//# sourceMappingURL=utils.js.map","import { __extends } from \"tslib\";\nimport { Plot } from '../../core/plot';\nimport { deepAssign } from '../../utils';\nimport { adaptor } from './adaptor';\nvar DualAxes = /** @class */ (function (_super) {\n    __extends(DualAxes, _super);\n    function DualAxes() {\n        var _this = _super !== null && _super.apply(this, arguments) || this;\n        /** 图表类型: 双轴图 */\n        _this.type = 'dual-axes';\n        return _this;\n    }\n    /**\n     * 获取 双轴图 默认配置\n     */\n    DualAxes.prototype.getDefaultOptions = function () {\n        return deepAssign({}, _super.prototype.getDefaultOptions.call(this), {\n            yAxis: [],\n            syncViewPadding: true,\n        });\n    };\n    /**\n     * 获取双轴图的适配器\n     */\n    DualAxes.prototype.getSchemaAdaptor = function () {\n        return adaptor;\n    };\n    return DualAxes;\n}(Plot));\nexport { DualAxes };\n//# sourceMappingURL=index.js.map","/**\n * 分面图 默认配置项\n */\nexport var DEFAULT_OPTIONS = {\n    title: {\n        style: {\n            fontSize: 12,\n            fill: 'rgba(0,0,0,0.65)',\n        },\n    },\n    rowTitle: {\n        style: {\n            fontSize: 12,\n            fill: 'rgba(0,0,0,0.65)',\n        },\n    },\n    columnTitle: {\n        style: {\n            fontSize: 12,\n            fill: 'rgba(0,0,0,0.65)',\n        },\n    },\n};\n//# sourceMappingURL=constant.js.map","import { __rest } from \"tslib\";\nimport { get, isNumber } from '@antv/util';\nimport { animation, annotation, interaction, pattern, scale, state, theme, tooltip } from '../../adaptor/common';\nimport { geometry as geometryAdaptor } from '../../adaptor/geometries/base';\nimport { deepAssign, findGeometry, flow, transformLabel } from '../../utils';\nimport { getTooltipMapping } from '../../utils/tooltip';\nfunction geometry(params) {\n    var chart = params.chart, options = params.options;\n    var data = options.data, type = options.type, xField = options.xField, yField = options.yField, colorField = options.colorField, sizeField = options.sizeField, sizeRatio = options.sizeRatio, shape = options.shape, color = options.color, tooltip = options.tooltip, heatmapStyle = options.heatmapStyle, meta = options.meta;\n    chart.data(data);\n    var geometryType = 'polygon';\n    if (type === 'density') {\n        geometryType = 'heatmap';\n    }\n    var _a = getTooltipMapping(tooltip, [xField, yField, colorField]), fields = _a.fields, formatter = _a.formatter;\n    /**\n     * The ratio between the actual size and the max available size, must be in range `[0,1]`.\n     *\n     * If the `sizeRatio` attribute is undefined or it exceeds the range,\n     * `checkedSizeRatio` would be set to 1 as default.\n     */\n    var checkedSizeRatio = 1;\n    if (sizeRatio || sizeRatio === 0) {\n        if (!shape && !sizeField) {\n            console.warn('sizeRatio is not in effect: Must define shape or sizeField first');\n        }\n        else if (sizeRatio < 0 || sizeRatio > 1) {\n            console.warn('sizeRatio is not in effect: It must be a number in [0,1]');\n        }\n        else {\n            checkedSizeRatio = sizeRatio;\n        }\n    }\n    geometryAdaptor(deepAssign({}, params, {\n        options: {\n            type: geometryType,\n            colorField: colorField,\n            tooltipFields: fields,\n            shapeField: sizeField || '',\n            label: undefined,\n            mapping: {\n                tooltip: formatter,\n                shape: shape &&\n                    (sizeField\n                        ? function (dautm) {\n                            var field = data.map(function (row) { return row[sizeField]; });\n                            var _a = (meta === null || meta === void 0 ? void 0 : meta[sizeField]) || {}, min = _a.min, max = _a.max;\n                            min = isNumber(min) ? min : Math.min.apply(Math, field);\n                            max = isNumber(max) ? max : Math.max.apply(Math, field);\n                            return [shape, (get(dautm, sizeField) - min) / (max - min), checkedSizeRatio];\n                        }\n                        : function () { return [shape, 1, checkedSizeRatio]; }),\n                color: color || (colorField && chart.getTheme().sequenceColors.join('-')),\n                style: heatmapStyle,\n            },\n        },\n    }));\n    return params;\n}\n/**\n * meta 配置\n * @param params\n */\nfunction meta(params) {\n    var _a;\n    var options = params.options;\n    var xAxis = options.xAxis, yAxis = options.yAxis, xField = options.xField, yField = options.yField;\n    return flow(scale((_a = {},\n        _a[xField] = xAxis,\n        _a[yField] = yAxis,\n        _a)))(params);\n}\n/**\n * axis 配置\n * @param params\n */\nfunction axis(params) {\n    var chart = params.chart, options = params.options;\n    var xAxis = options.xAxis, yAxis = options.yAxis, xField = options.xField, yField = options.yField;\n    // 为 false 则是不显示轴\n    if (xAxis === false) {\n        chart.axis(xField, false);\n    }\n    else {\n        chart.axis(xField, xAxis);\n    }\n    if (yAxis === false) {\n        chart.axis(yField, false);\n    }\n    else {\n        chart.axis(yField, yAxis);\n    }\n    return params;\n}\n/**\n * legend 配置\n * @param params\n */\nfunction legend(params) {\n    var chart = params.chart, options = params.options;\n    var legend = options.legend, colorField = options.colorField, sizeField = options.sizeField, sizeLegend = options.sizeLegend;\n    /** legend 不为 false, 则展示图例, 优先展示 color 分类图例 */\n    var showLegend = legend !== false;\n    if (colorField) {\n        chart.legend(colorField, showLegend ? legend : false);\n    }\n    // 旧版本: 有 sizeField 就有 sizeLegend. 这里默认继承下 legend 配置\n    if (sizeField) {\n        chart.legend(sizeField, sizeLegend === undefined ? legend : sizeLegend);\n    }\n    /** 默认没有 sizeField，则隐藏连续图例 */\n    if (!showLegend && !sizeLegend) {\n        chart.legend(false);\n    }\n    return params;\n}\n/**\n * fixme 后续确认下，数据标签的逻辑为啥和通用的不一致\n * 数据标签\n * @param params\n */\nfunction label(params) {\n    var chart = params.chart, options = params.options;\n    var label = options.label, colorField = options.colorField, type = options.type;\n    var geometry = findGeometry(chart, type === 'density' ? 'heatmap' : 'polygon');\n    if (!label) {\n        geometry.label(false);\n    }\n    else if (colorField) {\n        var callback = label.callback, cfg = __rest(label, [\"callback\"]);\n        geometry.label({\n            fields: [colorField],\n            callback: callback,\n            cfg: transformLabel(cfg),\n        });\n    }\n    return params;\n}\n/**\n * 极坐标\n * @param params\n */\nfunction coordinate(params) {\n    var _a, _b;\n    var chart = params.chart, options = params.options;\n    var coordinate = options.coordinate, reflect = options.reflect;\n    var coordinateOption = deepAssign({ actions: [] }, coordinate !== null && coordinate !== void 0 ? coordinate : { type: 'rect' });\n    if (reflect) {\n        (_b = (_a = coordinateOption.actions) === null || _a === void 0 ? void 0 : _a.push) === null || _b === void 0 ? void 0 : _b.call(_a, ['reflect', reflect]);\n    }\n    chart.coordinate(coordinateOption);\n    return params;\n}\n/**\n * 热力图适配器\n * @param chart\n * @param options\n */\nexport function adaptor(params) {\n    // flow 的方式处理所有的配置到 G2 API\n    return flow(theme, pattern('heatmapStyle'), meta, coordinate, geometry, axis, legend, tooltip, label, annotation(), interaction, animation, state)(params);\n}\n//# sourceMappingURL=adaptor.js.map","import { __extends } from \"tslib\";\nimport { Plot } from '../../core/plot';\nimport { adaptor } from './adaptor';\nimport { DEFAULT_OPTIONS } from './constant';\nvar Facet = /** @class */ (function (_super) {\n    __extends(Facet, _super);\n    function Facet() {\n        var _this = _super !== null && _super.apply(this, arguments) || this;\n        /** 图表类型 */\n        _this.type = 'area';\n        return _this;\n    }\n    /**\n     * 获取 分面图 默认配置项\n     * 供外部使用\n     */\n    Facet.getDefaultOptions = function () {\n        return DEFAULT_OPTIONS;\n    };\n    /**\n     * 获取 分面图 默认配置\n     */\n    Facet.prototype.getDefaultOptions = function () {\n        return Facet.getDefaultOptions();\n    };\n    /**\n     * 获取 分面图 的适配器\n     */\n    Facet.prototype.getSchemaAdaptor = function () {\n        return adaptor;\n    };\n    return Facet;\n}(Plot));\nexport { Facet };\n//# sourceMappingURL=index.js.map","import { Plot } from '../../core/plot';\nimport { deepAssign } from '../../utils';\n/**\n * 色块图默认配置项\n */\nexport var DEFAULT_OPTIONS = deepAssign({}, Plot.getDefaultOptions(), {\n    type: 'polygon',\n    legend: false,\n    coordinate: {\n        type: 'rect',\n    },\n    xAxis: {\n        tickLine: null,\n        line: null,\n        grid: {\n            alignTick: false,\n            line: {\n                style: {\n                    lineWidth: 1,\n                    lineDash: null,\n                    stroke: '#f0f0f0',\n                },\n            },\n        },\n    },\n    yAxis: {\n        grid: {\n            alignTick: false,\n            line: {\n                style: {\n                    lineWidth: 1,\n                    lineDash: null,\n                    stroke: '#f0f0f0',\n                },\n            },\n        },\n    },\n});\n//# sourceMappingURL=constant.js.map","import { __assign } from \"tslib\";\nimport { registerShape } from '@antv/g2';\nregisterShape('polygon', 'circle', {\n    draw: function (cfg, group) {\n        var _a, _b;\n        var cx = cfg.x;\n        var cy = cfg.y;\n        var points = this.parsePoints(cfg.points);\n        var width = Math.abs(points[2].x - points[1].x);\n        var height = Math.abs(points[1].y - points[0].y);\n        var maxRadius = Math.min(width, height) / 2;\n        var value = Number(cfg.shape[1]);\n        var sizeRatio = Number(cfg.shape[2]);\n        var radiusRatio = Math.sqrt(sizeRatio);\n        var radius = maxRadius * radiusRatio * Math.sqrt(value);\n        var fill = ((_a = cfg.style) === null || _a === void 0 ? void 0 : _a.fill) || cfg.color || ((_b = cfg.defaultStyle) === null || _b === void 0 ? void 0 : _b.fill);\n        var polygon = group.addShape('circle', {\n            attrs: __assign(__assign(__assign({ x: cx, y: cy, r: radius }, cfg.defaultStyle), cfg.style), { fill: fill }),\n        });\n        return polygon;\n    },\n});\n//# sourceMappingURL=circle.js.map","import { __assign } from \"tslib\";\nimport { registerShape } from '@antv/g2';\nregisterShape('polygon', 'square', {\n    draw: function (cfg, group) {\n        var _a, _b;\n        var cx = cfg.x;\n        var cy = cfg.y;\n        var points = this.parsePoints(cfg.points);\n        var width = Math.abs(points[2].x - points[1].x);\n        var height = Math.abs(points[1].y - points[0].y);\n        var maxSideLength = Math.min(width, height);\n        var value = Number(cfg.shape[1]);\n        var sizeRatio = Number(cfg.shape[2]);\n        var lenRatio = Math.sqrt(sizeRatio);\n        var sideLength = maxSideLength * lenRatio * Math.sqrt(value);\n        var fill = ((_a = cfg.style) === null || _a === void 0 ? void 0 : _a.fill) || cfg.color || ((_b = cfg.defaultStyle) === null || _b === void 0 ? void 0 : _b.fill);\n        var polygon = group.addShape('rect', {\n            attrs: __assign(__assign(__assign({ x: cx - sideLength / 2, y: cy - sideLength / 2, width: sideLength, height: sideLength }, cfg.defaultStyle), cfg.style), { fill: fill }),\n        });\n        return polygon;\n    },\n});\n//# sourceMappingURL=square.js.map","import { __extends } from \"tslib\";\nimport { Plot } from '../../core/plot';\nimport { adaptor } from './adaptor';\nimport { DEFAULT_OPTIONS } from './constant';\n// registered shapes\nimport './shapes/circle';\nimport './shapes/square';\nvar Heatmap = /** @class */ (function (_super) {\n    __extends(Heatmap, _super);\n    function Heatmap() {\n        var _this = _super !== null && _super.apply(this, arguments) || this;\n        /** 图表类型 */\n        _this.type = 'heatmap';\n        return _this;\n    }\n    /**\n     * 获取 柱形图 默认配置项\n     * 供外部使用\n     */\n    Heatmap.getDefaultOptions = function () {\n        return DEFAULT_OPTIONS;\n    };\n    /**\n     * 获取直方图的适配器\n     */\n    Heatmap.prototype.getSchemaAdaptor = function () {\n        return adaptor;\n    };\n    /**\n     * 获取 色块图 默认配置\n     */\n    Heatmap.prototype.getDefaultOptions = function () {\n        return Heatmap.getDefaultOptions();\n    };\n    return Heatmap;\n}(Plot));\nexport { Heatmap };\n//# sourceMappingURL=index.js.map","var CAT_VALUE = 'liquid';\n/**\n * 获取水波图数据\n */\nexport function getLiquidData(percent) {\n    return [{ percent: percent, type: CAT_VALUE }];\n}\n//# sourceMappingURL=utils.js.map","import { __assign } from \"tslib\";\nimport { get, isNil } from '@antv/util';\nimport { animation, interaction, pattern, scale, theme } from '../../adaptor/common';\nimport { interval } from '../../adaptor/geometries';\nimport { deepAssign, flow, renderStatistic } from '../../utils';\nimport { getLiquidData } from './utils';\n/**\n * geometry 处理\n * @param params\n */\nfunction geometry(params) {\n    var chart = params.chart, options = params.options;\n    var percent = options.percent, liquidStyle = options.liquidStyle, radius = options.radius, outline = options.outline, wave = options.wave, shape = options.shape, shapeStyle = options.shapeStyle, animation = options.animation;\n    chart.scale({\n        percent: {\n            min: 0,\n            max: 1,\n        },\n    });\n    chart.data(getLiquidData(percent));\n    var color = options.color || chart.getTheme().defaultColor;\n    var p = deepAssign({}, params, {\n        options: {\n            xField: 'type',\n            yField: 'percent',\n            // radius 放到 columnWidthRatio 中。\n            // 保证横向的大小是根据  radius 生成的\n            widthRatio: radius,\n            interval: {\n                color: color,\n                style: liquidStyle,\n                shape: 'liquid-fill-gauge',\n            },\n        },\n    });\n    var ext = interval(p).ext;\n    var geometry = ext.geometry;\n    var background = chart.getTheme().background;\n    var customInfo = {\n        percent: percent,\n        radius: radius,\n        outline: outline,\n        wave: wave,\n        shape: shape,\n        shapeStyle: shapeStyle,\n        background: background,\n        animation: animation,\n    };\n    // 将 radius 传入到自定义 shape 中\n    geometry.customInfo(customInfo);\n    // 关闭组件\n    chart.legend(false);\n    chart.axis(false);\n    chart.tooltip(false);\n    return params;\n}\n/**\n * 统计指标文档\n * @param params\n */\nexport function statistic(params, updated) {\n    var chart = params.chart, options = params.options;\n    var statistic = options.statistic, percent = options.percent, meta = options.meta;\n    // 先清空标注，再重新渲染\n    chart.getController('annotation').clear(true);\n    var metaFormatter = get(meta, ['percent', 'formatter']) || (function (v) { return \"\".concat((v * 100).toFixed(2), \"%\"); });\n    var contentOpt = statistic.content;\n    if (contentOpt) {\n        contentOpt = deepAssign({}, contentOpt, {\n            content: !isNil(contentOpt.content) ? contentOpt.content : metaFormatter(percent),\n        });\n    }\n    renderStatistic(chart, { statistic: __assign(__assign({}, statistic), { content: contentOpt }), plotType: 'liquid' }, { percent: percent });\n    if (updated) {\n        chart.render(true);\n    }\n    return params;\n}\n/**\n * 水波图适配器\n * @param chart\n * @param options\n */\nexport function adaptor(params) {\n    // flow 的方式处理所有的配置到 G2 API (主题前置，会影响绘制的取色)\n    return flow(theme, pattern('liquidStyle'), geometry, statistic, scale({}), animation, interaction)(params);\n}\n//# sourceMappingURL=adaptor.js.map","/**\n * 水波图默认配置项\n */\nexport var DEFAULT_OPTIONS = {\n    radius: 0.9,\n    statistic: {\n        title: false,\n        content: {\n            style: {\n                opacity: 0.75,\n                fontSize: '30px',\n                lineHeight: '30px',\n                textAlign: 'center',\n            },\n        },\n    },\n    outline: {\n        border: 2,\n        distance: 0,\n    },\n    wave: {\n        count: 3,\n        length: 192,\n    },\n    shape: 'circle',\n};\n//# sourceMappingURL=constants.js.map","import { __assign } from \"tslib\";\nimport { registerShape } from '@antv/g2';\nimport { isNumber, mix, reduce } from '@antv/util';\nimport { transform } from '../../../utils/matrix';\nvar DURATION = 5000;\n/**\n * 一个线性映射的函数\n * @param min\n * @param max\n * @param factor\n */\nfunction lerp(min, max, factor) {\n    return min + (max - min) * factor;\n}\n/**\n * 波浪的 attrs\n * @param cfg\n */\nfunction getFillAttrs(cfg) {\n    var attrs = __assign({ opacity: 1 }, cfg.style);\n    if (cfg.color && !attrs.fill) {\n        attrs.fill = cfg.color;\n    }\n    return attrs;\n}\n/**\n * shape 的 attrs\n * @param cfg\n */\nfunction getLineAttrs(cfg) {\n    var defaultAttrs = {\n        fill: '#fff',\n        fillOpacity: 0,\n        lineWidth: 4,\n    };\n    var attrs = mix({}, defaultAttrs, cfg.style);\n    if (cfg.color && !attrs.stroke) {\n        attrs.stroke = cfg.color;\n    }\n    if (isNumber(cfg.opacity)) {\n        attrs.opacity = attrs.strokeOpacity = cfg.opacity;\n    }\n    return attrs;\n}\n/**\n * 用贝塞尔曲线模拟正弦波\n * Using Bezier curves to fit sine wave.\n * There is 4 control points for each curve of wave,\n * which is at 1/4 wave length of the sine wave.\n *\n * The control points for a wave from (a) to (d) are a-b-c-d:\n *          c *----* d\n *     b *\n *       |\n * ... a * ..................\n *\n * whose positions are a: (0, 0), b: (0.5, 0.5), c: (1, 1), d: (PI / 2, 1)\n *\n * @param x          x position of the left-most point (a)\n * @param stage      0-3, stating which part of the wave it is\n * @param waveLength wave length of the sine wave\n * @param amplitude  wave amplitude\n * @return 正弦片段曲线\n */\nfunction getWaterWavePositions(x, stage, waveLength, amplitude) {\n    if (stage === 0) {\n        return [\n            [x + ((1 / 2) * waveLength) / Math.PI / 2, amplitude / 2],\n            [x + ((1 / 2) * waveLength) / Math.PI, amplitude],\n            [x + waveLength / 4, amplitude],\n        ];\n    }\n    if (stage === 1) {\n        return [\n            [x + (((1 / 2) * waveLength) / Math.PI / 2) * (Math.PI - 2), amplitude],\n            [x + (((1 / 2) * waveLength) / Math.PI / 2) * (Math.PI - 1), amplitude / 2],\n            [x + waveLength / 4, 0],\n        ];\n    }\n    if (stage === 2) {\n        return [\n            [x + ((1 / 2) * waveLength) / Math.PI / 2, -amplitude / 2],\n            [x + ((1 / 2) * waveLength) / Math.PI, -amplitude],\n            [x + waveLength / 4, -amplitude],\n        ];\n    }\n    return [\n        [x + (((1 / 2) * waveLength) / Math.PI / 2) * (Math.PI - 2), -amplitude],\n        [x + (((1 / 2) * waveLength) / Math.PI / 2) * (Math.PI - 1), -amplitude / 2],\n        [x + waveLength / 4, 0],\n    ];\n}\n/**\n * 获取水波路径\n * @param radius          半径\n * @param waterLevel      水位\n * @param waveLength      波长\n * @param phase           相位\n * @param amplitude       震幅\n * @param cx              圆心x\n * @param cy              圆心y\n * @return path            路径\n * @reference http://gitlab.alipay-inc.com/datavis/g6/blob/1.2.0/src/graph/utils/path.js#L135\n */\nfunction getWaterWavePath(radius, waterLevel, waveLength, phase, amplitude, cx, cy) {\n    var curves = Math.ceil(((2 * radius) / waveLength) * 4) * 4;\n    var path = [];\n    var _phase = phase;\n    // map phase to [-Math.PI * 2, 0]\n    while (_phase < -Math.PI * 2) {\n        _phase += Math.PI * 2;\n    }\n    while (_phase > 0) {\n        _phase -= Math.PI * 2;\n    }\n    _phase = (_phase / Math.PI / 2) * waveLength;\n    var left = cx - radius + _phase - radius * 2;\n    /**\n     * top-left corner as start point\n     *\n     * draws this point\n     *  |\n     * \\|/\n     *  ~~~~~~~~\n     *  |      |\n     *  +------+\n     */\n    path.push(['M', left, waterLevel]);\n    /**\n     * top wave\n     *\n     * ~~~~~~~~ <- draws this sine wave\n     * |      |\n     * +------+\n     */\n    var waveRight = 0;\n    for (var c = 0; c < curves; ++c) {\n        var stage = c % 4;\n        var pos = getWaterWavePositions((c * waveLength) / 4, stage, waveLength, amplitude);\n        path.push([\n            'C',\n            pos[0][0] + left,\n            -pos[0][1] + waterLevel,\n            pos[1][0] + left,\n            -pos[1][1] + waterLevel,\n            pos[2][0] + left,\n            -pos[2][1] + waterLevel,\n        ]);\n        if (c === curves - 1) {\n            waveRight = pos[2][0];\n        }\n    }\n    /**\n     * top-right corner\n     *\n     *                       ~~~~~~~~\n     * 3. draws this line -> |      | <- 1. draws this line\n     *                       +------+\n     *                          ^\n     *                          |\n     *                  2. draws this line\n     */\n    path.push(['L', waveRight + left, cy + radius]);\n    path.push(['L', left, cy + radius]);\n    path.push(['Z']);\n    // path.push(['L', left, waterLevel]);\n    return path;\n}\n/**\n * 添加水波\n * @param x           中心x\n * @param y           中心y\n * @param level       水位等级 0～1\n * @param waveCount   水波数\n * @param waveAttrs      色值\n * @param group       图组\n * @param clip        用于剪切的图形\n * @param radius      绘制图形的高度\n * @param waveLength  波的长度\n */\nexport function addWaterWave(x, y, level, waveCount, waveAttrs, group, clip, radius, waveLength, animation) {\n    // 盒子属性 颜色 宽高\n    var fill = waveAttrs.fill, opacity = waveAttrs.opacity;\n    var bbox = clip.getBBox();\n    var width = bbox.maxX - bbox.minX;\n    var height = bbox.maxY - bbox.minY;\n    // 循环 waveCount 个数\n    for (var idx = 0; idx < waveCount; idx++) {\n        var factor = waveCount <= 1 ? 1 : idx / (waveCount - 1);\n        // 画波\n        var wave = group.addShape('path', {\n            name: \"waterwave-path\",\n            attrs: {\n                // 波形路径配置\n                path: getWaterWavePath(radius, bbox.minY + height * level, waveLength, 0, width / 32, // 波幅高度\n                x, y),\n                fill: fill,\n                opacity: lerp(0.2, 0.9, factor) * opacity,\n            },\n        });\n        try {\n            // 默认 underfind 开启动画\n            if (animation === false)\n                return;\n            var matrix = transform([['t', waveLength, 0]]);\n            wave.stopAnimate();\n            wave.animate({ matrix: matrix }, {\n                duration: lerp(0.5 * DURATION, DURATION, factor),\n                repeat: true,\n            });\n        }\n        catch (e) {\n            // TODO off-screen canvas 中动画会找不到 canvas\n            console.warn('off-screen group animate error!');\n        }\n    }\n}\n/**\n *\n * @param x 中心 x\n * @param y 中心 y\n * @param width 外接矩形的宽\n * @param height 外接矩形的高\n */\nfunction pin(x, y, width, height) {\n    var w = (width * 2) / 3;\n    var h = Math.max(w, height);\n    var r = w / 2;\n    // attrs of the upper circle\n    var cx = x;\n    var cy = r + y - h / 2;\n    var theta = Math.asin(r / ((h - r) * 0.85));\n    var dy = Math.sin(theta) * r;\n    var dx = Math.cos(theta) * r;\n    // the start point of the path\n    var x0 = cx - dx;\n    var y0 = cy + dy;\n    // control point\n    var cpX = x;\n    var cpY = cy + r / Math.sin(theta);\n    return \"\\n      M \".concat(x0, \" \").concat(y0, \"\\n      A \").concat(r, \" \").concat(r, \" 0 1 1 \").concat(x0 + dx * 2, \" \").concat(y0, \"\\n      Q \").concat(cpX, \" \").concat(cpY, \" \").concat(x, \" \").concat(y + h / 2, \"\\n      Q \").concat(cpX, \" \").concat(cpY, \" \").concat(x0, \" \").concat(y0, \"\\n      Z \\n    \");\n}\n/**\n *\n * @param x 中心 x\n * @param y 中心 y\n * @param width 外接矩形的宽\n * @param height 外接矩形的高\n */\nfunction circle(x, y, width, height) {\n    var rx = width / 2;\n    var ry = height / 2;\n    return \"\\n      M \".concat(x, \" \").concat(y - ry, \" \\n      a \").concat(rx, \" \").concat(ry, \" 0 1 0 0 \").concat(ry * 2, \"\\n      a \").concat(rx, \" \").concat(ry, \" 0 1 0 0 \").concat(-ry * 2, \"\\n      Z\\n    \");\n}\n/**\n *\n * @param x 中心 x\n * @param y 中心 y\n * @param width 外接矩形的宽\n * @param height 外接矩形的高\n */\nfunction diamond(x, y, width, height) {\n    var h = height / 2;\n    var w = width / 2;\n    return \"\\n      M \".concat(x, \" \").concat(y - h, \"\\n      L \").concat(x + w, \" \").concat(y, \"\\n      L \").concat(x, \" \").concat(y + h, \"\\n      L \").concat(x - w, \" \").concat(y, \"\\n      Z\\n    \");\n}\n/**\n *\n * @param x 中心 x\n * @param y 中心 y\n * @param width 外接矩形的宽\n * @param height 外接矩形的高\n */\nfunction triangle(x, y, width, height) {\n    var h = height / 2;\n    var w = width / 2;\n    return \"\\n      M \".concat(x, \" \").concat(y - h, \"\\n      L \").concat(x + w, \" \").concat(y + h, \"\\n      L \").concat(x - w, \" \").concat(y + h, \"\\n      Z\\n    \");\n}\n/**\n *\n * @param x 中心 x\n * @param y 中心 y\n * @param width 外接矩形的宽\n * @param height 外接矩形的高\n */\nfunction rect(x, y, width, height) {\n    var GOLDEN_SECTION_RATIO = 0.618;\n    var h = height / 2;\n    var w = (width / 2) * GOLDEN_SECTION_RATIO;\n    return \"\\n      M \".concat(x - w, \" \").concat(y - h, \"\\n      L \").concat(x + w, \" \").concat(y - h, \"\\n      L \").concat(x + w, \" \").concat(y + h, \"\\n      L \").concat(x - w, \" \").concat(y + h, \"\\n      Z\\n    \");\n}\nvar builtInShapeByName = {\n    pin: pin,\n    circle: circle,\n    diamond: diamond,\n    triangle: triangle,\n    rect: rect,\n};\nregisterShape('interval', 'liquid-fill-gauge', {\n    draw: function (cfg, container) {\n        var cx = 0.5;\n        var cy = 0.5;\n        var customInfo = cfg.customInfo;\n        var _a = customInfo, percent = _a.percent, radio = _a.radius, shape = _a.shape, shapeStyle = _a.shapeStyle, background = _a.background, animation = _a.animation;\n        var outline = customInfo.outline;\n        var wave = customInfo.wave;\n        var border = outline.border, distance = outline.distance;\n        var waveCount = wave.count, waveLength = wave.length;\n        // 获取最小 minX\n        var minX = reduce(cfg.points, function (r, p) {\n            return Math.min(r, p.x);\n        }, Infinity);\n        var center = this.parsePoint({ x: cx, y: cy });\n        var minXPoint = this.parsePoint({ x: minX, y: cy });\n        var halfWidth = center.x - minXPoint.x;\n        // 保证半径是 画布宽高最小值的 radius 值\n        var radius = Math.min(halfWidth, minXPoint.y * radio);\n        var waveAttrs = getFillAttrs(cfg);\n        var outlineAttrs = getLineAttrs(mix({}, cfg, outline));\n        var innerRadius = radius - border / 2;\n        var buildPath = typeof shape === 'function' ? shape : builtInShapeByName[shape] || builtInShapeByName['circle'];\n        var shapePath = buildPath(center.x, center.y, innerRadius * 2, innerRadius * 2);\n        // 1. 当 shapeStyle 不为空时，绘制形状样式作为背景\n        if (shapeStyle) {\n            container.addShape('path', {\n                name: 'shape',\n                attrs: __assign({ path: shapePath }, shapeStyle),\n            });\n        }\n        // 比例大于 0 时才绘制水波\n        if (percent > 0) {\n            // 2. 绘制一个波\n            var waves = container.addGroup({\n                name: 'waves',\n            });\n            // 3. 波对应的 clip 裁剪形状\n            var clipPath = waves.setClip({\n                type: 'path',\n                attrs: {\n                    path: shapePath,\n                },\n            });\n            // 4. 绘制波形\n            addWaterWave(center.x, center.y, 1 - cfg.points[1].y, waveCount, waveAttrs, waves, clipPath, radius * 2, waveLength, animation);\n        }\n        // 5. 绘制一个 distance 宽的 border\n        container.addShape('path', {\n            name: 'distance',\n            attrs: {\n                path: shapePath,\n                fill: 'transparent',\n                lineWidth: border + distance * 2,\n                stroke: background === 'transparent' ? '#fff' : background,\n            },\n        });\n        // 6. 绘制一个 border 宽的 border\n        container.addShape('path', {\n            name: 'wrap',\n            attrs: mix(outlineAttrs, {\n                path: shapePath,\n                fill: 'transparent',\n                lineWidth: border,\n            }),\n        });\n        return container;\n    },\n});\n//# sourceMappingURL=liquid.js.map","import { __assign, __rest } from \"tslib\";\nimport { animation, annotation, interaction, legend, scale, theme, tooltip } from '../../adaptor/common';\nimport { area, line, point } from '../../adaptor/geometries';\nimport { deepAssign, findGeometry, flow, transformLabel } from '../../utils';\n/**\n * geometry 配置处理\n * @param params\n */\nfunction geometry(params) {\n    var chart = params.chart, options = params.options;\n    var data = options.data, lineStyle = options.lineStyle, color = options.color, pointOptions = options.point, areaOptions = options.area;\n    chart.data(data);\n    // 雷达图 主 geometry\n    var primary = deepAssign({}, params, {\n        options: {\n            line: {\n                style: lineStyle,\n                color: color,\n            },\n            point: pointOptions\n                ? __assign({ color: color }, pointOptions) : pointOptions,\n            area: areaOptions\n                ? __assign({ color: color }, areaOptions) : areaOptions,\n            // label 不传递给各个 geometry adaptor，由 label adaptor 处理\n            label: undefined,\n        },\n    });\n    // 副 Geometry\n    var second = deepAssign({}, primary, {\n        options: {\n            tooltip: false,\n        },\n    });\n    // 优先使用 point.state, 其次取主元素的 state 状态样式配置\n    var pointState = (pointOptions === null || pointOptions === void 0 ? void 0 : pointOptions.state) || options.state;\n    var pointParams = deepAssign({}, primary, { options: { tooltip: false, state: pointState } });\n    line(primary);\n    point(pointParams);\n    area(second);\n    return params;\n}\n/**\n * meta 配置\n * @param params\n */\nfunction meta(params) {\n    var _a;\n    var options = params.options;\n    var xAxis = options.xAxis, yAxis = options.yAxis, xField = options.xField, yField = options.yField;\n    return flow(scale((_a = {},\n        _a[xField] = xAxis,\n        _a[yField] = yAxis,\n        _a)))(params);\n}\n/**\n * coord 配置\n * @param params\n */\nfunction coord(params) {\n    var chart = params.chart, options = params.options;\n    var radius = options.radius, startAngle = options.startAngle, endAngle = options.endAngle;\n    chart.coordinate('polar', {\n        radius: radius,\n        startAngle: startAngle,\n        endAngle: endAngle,\n    });\n    return params;\n}\n/**\n * axis 配置\n * @param params\n */\nfunction axis(params) {\n    var chart = params.chart, options = params.options;\n    var xField = options.xField, xAxis = options.xAxis, yField = options.yField, yAxis = options.yAxis;\n    chart.axis(xField, xAxis);\n    chart.axis(yField, yAxis);\n    return params;\n}\n/**\n * label 配置\n * @param params\n */\nfunction label(params) {\n    var chart = params.chart, options = params.options;\n    var label = options.label, yField = options.yField;\n    var geometry = findGeometry(chart, 'line');\n    if (!label) {\n        geometry.label(false);\n    }\n    else {\n        var fields = label.fields, callback = label.callback, cfg = __rest(label, [\"fields\", \"callback\"]);\n        geometry.label({\n            fields: fields || [yField],\n            callback: callback,\n            cfg: transformLabel(cfg),\n        });\n    }\n    return params;\n}\n/**\n * 雷达图适配器\n * @param chart\n * @param options\n */\nexport function adaptor(params) {\n    // flow 的方式处理所有的配置到 G2 API\n    return flow(geometry, meta, theme, coord, axis, legend, tooltip, label, interaction, animation, annotation())(params);\n}\n//# sourceMappingURL=adaptor.js.map","import { __assign } from \"tslib\";\nexport function getScaleMax(maxAngle, yField, data) {\n    var yData = data.map(function (item) { return item[yField]; }).filter(function (v) { return v !== undefined; });\n    var maxValue = yData.length > 0 ? Math.max.apply(Math, yData) : 0;\n    var formatRadian = Math.abs(maxAngle) % 360;\n    if (!formatRadian) {\n        return maxValue;\n    }\n    return (maxValue * 360) / formatRadian;\n}\n/**\n * 获取堆叠之后的数据\n */\nexport function getStackedData(data, xField, yField) {\n    var stackedData = [];\n    data.forEach(function (item) {\n        var valueItem = stackedData.find(function (v) { return v[xField] === item[xField]; });\n        if (valueItem) {\n            valueItem[yField] += item[yField] || null;\n        }\n        else {\n            stackedData.push(__assign({}, item));\n        }\n    });\n    return stackedData;\n}\n//# sourceMappingURL=utils.js.map","import { __assign, __rest } from \"tslib\";\nimport { animation, annotation, interaction, legend, scale, theme, tooltip } from '../../adaptor/common';\nimport { interval, point } from '../../adaptor/geometries';\nimport { pattern } from '../../adaptor/pattern';\nimport { deepAssign, findGeometry, flow, processIllegalData, transformLabel } from '../../utils';\nimport { getScaleMax, getStackedData } from './utils';\n/**\n * geometry 处理\n * @param params\n */\nfunction geometry(params) {\n    var chart = params.chart, options = params.options;\n    var style = options.barStyle, color = options.color, tooltip = options.tooltip, colorField = options.colorField, type = options.type, xField = options.xField, yField = options.yField, data = options.data, shape = options.shape;\n    // 处理不合法的数据\n    var processData = processIllegalData(data, yField);\n    chart.data(processData);\n    var p = deepAssign({}, params, {\n        options: {\n            tooltip: tooltip,\n            seriesField: colorField,\n            interval: {\n                style: style,\n                color: color,\n                shape: shape || (type === 'line' ? 'line' : 'intervel'),\n            },\n            // 柱子的一些样式设置：柱子最小宽度、柱子最大宽度、柱子背景\n            minColumnWidth: options.minBarWidth,\n            maxColumnWidth: options.maxBarWidth,\n            columnBackground: options.barBackground,\n        },\n    });\n    interval(p);\n    if (type === 'line') {\n        point({\n            chart: chart,\n            options: { xField: xField, yField: yField, seriesField: colorField, point: { shape: 'circle', color: color } },\n        });\n    }\n    return params;\n}\n/**\n * meta 配置\n * @param params\n */\nexport function meta(params) {\n    var _a;\n    var options = params.options;\n    var yField = options.yField, xField = options.xField, data = options.data, isStack = options.isStack, isGroup = options.isGroup, colorField = options.colorField, maxAngle = options.maxAngle;\n    var actualData = isStack && !isGroup && colorField ? getStackedData(data, xField, yField) : data;\n    var processData = processIllegalData(actualData, yField);\n    return flow(scale((_a = {},\n        _a[yField] = {\n            min: 0,\n            max: getScaleMax(maxAngle, yField, processData),\n        },\n        _a)))(params);\n}\n/**\n * coordinate 配置\n * @param params\n */\nfunction coordinate(params) {\n    var chart = params.chart, options = params.options;\n    var radius = options.radius, innerRadius = options.innerRadius, startAngle = options.startAngle, endAngle = options.endAngle;\n    chart\n        .coordinate({\n        type: 'polar',\n        cfg: {\n            radius: radius,\n            innerRadius: innerRadius,\n            startAngle: startAngle,\n            endAngle: endAngle,\n        },\n    })\n        .transpose();\n    return params;\n}\n/**\n * axis 配置\n * @param params\n */\nexport function axis(params) {\n    var chart = params.chart, options = params.options;\n    var xField = options.xField, xAxis = options.xAxis;\n    chart.axis(xField, xAxis);\n    return params;\n}\n/**\n * 数据标签\n * @param params\n */\nfunction label(params) {\n    var chart = params.chart, options = params.options;\n    var label = options.label, yField = options.yField;\n    var intervalGeometry = findGeometry(chart, 'interval');\n    // label 为 false, 空 则不显示 label\n    if (!label) {\n        intervalGeometry.label(false);\n    }\n    else {\n        var callback = label.callback, cfg = __rest(label, [\"callback\"]);\n        intervalGeometry.label({\n            fields: [yField],\n            callback: callback,\n            cfg: __assign(__assign({}, transformLabel(cfg)), { type: 'polar' }),\n        });\n    }\n    return params;\n}\n/**\n * 图适配器\n * @param chart\n * @param options\n */\nexport function adaptor(params) {\n    return flow(pattern('barStyle'), geometry, meta, axis, coordinate, interaction, animation, theme, tooltip, legend, annotation(), label)(params);\n}\n//# sourceMappingURL=adaptor.js.map","import { __extends } from \"tslib\";\nimport { Event, VIEW_LIFE_CIRCLE } from '@antv/g2';\nimport { Plot } from '../../core/plot';\nimport { adaptor, statistic } from './adaptor';\nimport { DEFAULT_OPTIONS } from './constants';\n// register liquid shape\nimport './shapes/liquid';\nimport { getLiquidData } from './utils';\nexport { addWaterWave } from './shapes/liquid';\n/**\n * 传说中的水波图\n */\nvar Liquid = /** @class */ (function (_super) {\n    __extends(Liquid, _super);\n    function Liquid() {\n        var _this = _super !== null && _super.apply(this, arguments) || this;\n        /** 图表类型 */\n        _this.type = 'liquid';\n        return _this;\n    }\n    /**\n     * 获取 饼图 默认配置项\n     * 供外部使用\n     */\n    Liquid.getDefaultOptions = function () {\n        return DEFAULT_OPTIONS;\n    };\n    /**\n     * 获取 水波图 默认配置项, 供 base 获取\n     */\n    Liquid.prototype.getDefaultOptions = function () {\n        return Liquid.getDefaultOptions();\n    };\n    /**\n     * 更新数据\n     * @param percent\n     */\n    Liquid.prototype.changeData = function (percent) {\n        this.chart.emit(VIEW_LIFE_CIRCLE.BEFORE_CHANGE_DATA, Event.fromData(this.chart, VIEW_LIFE_CIRCLE.BEFORE_CHANGE_DATA, null));\n        this.updateOption({ percent: percent });\n        this.chart.data(getLiquidData(percent));\n        statistic({ chart: this.chart, options: this.options }, true);\n        this.chart.emit(VIEW_LIFE_CIRCLE.AFTER_CHANGE_DATA, Event.fromData(this.chart, VIEW_LIFE_CIRCLE.AFTER_CHANGE_DATA, null));\n    };\n    /**\n     * 获取适配器\n     */\n    Liquid.prototype.getSchemaAdaptor = function () {\n        return adaptor;\n    };\n    return Liquid;\n}(Plot));\nexport { Liquid };\n//# sourceMappingURL=index.js.map","import { __assign, __extends } from \"tslib\";\nimport { Action, registerComponentController, TooltipController, Util } from '@antv/g2';\nimport { isNil } from '@antv/util';\nvar RadarTooltipController = /** @class */ (function (_super) {\n    __extends(RadarTooltipController, _super);\n    function RadarTooltipController() {\n        return _super !== null && _super.apply(this, arguments) || this;\n    }\n    Object.defineProperty(RadarTooltipController.prototype, \"name\", {\n        get: function () {\n            return 'radar-tooltip';\n        },\n        enumerable: false,\n        configurable: true\n    });\n    RadarTooltipController.prototype.getTooltipItems = function (point) {\n        var _a = this.getTooltipCfg(), shared = _a.shared, cfgTitle = _a.title;\n        var hintItems = _super.prototype.getTooltipItems.call(this, point);\n        if (hintItems.length > 0) {\n            var geometry_1 = this.view.geometries[0];\n            var dataArray = geometry_1.dataArray;\n            var title_1 = hintItems[0].name;\n            var result_1 = [];\n            dataArray.forEach(function (mappingData) {\n                mappingData.forEach(function (d) {\n                    var items = Util.getTooltipItems(d, geometry_1);\n                    var item = items[0];\n                    if (!shared && item && item.name === title_1) {\n                        var displayTitle = isNil(cfgTitle) ? title_1 : cfgTitle;\n                        result_1.push(__assign(__assign({}, item), { name: item.title, title: displayTitle }));\n                    }\n                    else if (shared && item) {\n                        var displayTitle = isNil(cfgTitle) ? item.name || title_1 : cfgTitle;\n                        result_1.push(__assign(__assign({}, item), { name: item.title, title: displayTitle }));\n                    }\n                });\n            });\n            return result_1;\n        }\n        return [];\n    };\n    return RadarTooltipController;\n}(TooltipController));\nexport { RadarTooltipController };\nregisterComponentController('radar-tooltip', RadarTooltipController);\n/**\n * 雷达图 tooltip 激活 action\n */\nvar RadarTooltipAction = /** @class */ (function (_super) {\n    __extends(RadarTooltipAction, _super);\n    function RadarTooltipAction() {\n        return _super !== null && _super.apply(this, arguments) || this;\n    }\n    RadarTooltipAction.prototype.init = function () {\n        var view = this.context.view;\n        view.removeInteraction('tooltip');\n    };\n    RadarTooltipAction.prototype.show = function () {\n        var event = this.context.event;\n        var controller = this.getTooltipController();\n        controller.showTooltip({ x: event.x, y: event.y });\n    };\n    RadarTooltipAction.prototype.hide = function () {\n        var controller = this.getTooltipController();\n        controller.hideTooltip();\n    };\n    RadarTooltipAction.prototype.getTooltipController = function () {\n        var view = this.context.view;\n        return view.getController('radar-tooltip');\n    };\n    return RadarTooltipAction;\n}(Action));\nexport { RadarTooltipAction };\n//# sourceMappingURL=radar-tooltip-action.js.map","import { registerAction, registerInteraction } from '@antv/g2';\nimport { RadarTooltipAction } from './radar-tooltip-action';\nregisterAction('radar-tooltip', RadarTooltipAction);\nregisterInteraction('radar-tooltip', {\n    start: [{ trigger: 'plot:mousemove', action: 'radar-tooltip:show' }],\n    end: [{ trigger: 'plot:mouseleave', action: 'radar-tooltip:hide' }],\n});\n//# sourceMappingURL=index.js.map","import { __extends } from \"tslib\";\nimport { Plot } from '../../core/plot';\nimport { deepAssign } from '../../utils';\nimport { adaptor } from './adaptor';\nimport './interactions';\nvar Radar = /** @class */ (function (_super) {\n    __extends(Radar, _super);\n    function Radar() {\n        var _this = _super !== null && _super.apply(this, arguments) || this;\n        /** 图表类型 */\n        _this.type = 'radar';\n        return _this;\n    }\n    /**\n     * @override\n     * @param data\n     */\n    Radar.prototype.changeData = function (data) {\n        this.updateOption({ data: data });\n        this.chart.changeData(data);\n    };\n    /**\n     * 获取 雷达图 默认配置\n     */\n    Radar.prototype.getDefaultOptions = function () {\n        return deepAssign({}, _super.prototype.getDefaultOptions.call(this), {\n            xAxis: {\n                label: {\n                    offset: 15,\n                },\n                grid: {\n                    line: {\n                        type: 'line',\n                    },\n                },\n            },\n            yAxis: {\n                grid: {\n                    line: {\n                        type: 'circle',\n                    },\n                },\n            },\n            legend: {\n                position: 'top',\n            },\n            tooltip: {\n                shared: true,\n                showCrosshairs: true,\n                showMarkers: true,\n                crosshairs: {\n                    type: 'xy',\n                    line: {\n                        style: {\n                            stroke: '#565656',\n                            lineDash: [4],\n                        },\n                    },\n                    follow: true,\n                },\n            },\n        });\n    };\n    /**\n     * 获取 雷达图 的适配器\n     */\n    Radar.prototype.getSchemaAdaptor = function () {\n        return adaptor;\n    };\n    return Radar;\n}(Plot));\nexport { Radar };\n//# sourceMappingURL=index.js.map","import { Plot } from '../../core/plot';\nimport { deepAssign } from '../../utils';\n/**\n * 玉珏图 默认配置项\n */\nexport var DEFAULT_OPTIONS = deepAssign({}, Plot.getDefaultOptions(), {\n    interactions: [{ type: 'element-active' }],\n    legend: false,\n    tooltip: {\n        showMarkers: false,\n    },\n    xAxis: {\n        grid: null,\n        tickLine: null,\n        line: null,\n    },\n    maxAngle: 240,\n});\n//# sourceMappingURL=constant.js.map","import { __rest } from \"tslib\";\nimport { filter, isArray, isObject } from '@antv/util';\nimport { animation, annotation, interaction, pattern, scale, state, theme, tooltip } from '../../adaptor/common';\nimport { interval } from '../../adaptor/geometries';\nimport { deepAssign, findGeometry, flow, LEVEL, log, transformLabel } from '../../utils';\n/**\n * geometry 配置处理\n * @param params\n */\nfunction geometry(params) {\n    var chart = params.chart, options = params.options;\n    var data = options.data, sectorStyle = options.sectorStyle, shape = options.shape, color = options.color;\n    // 装载数据\n    chart.data(data);\n    flow(interval)(deepAssign({}, params, {\n        options: {\n            marginRatio: 1,\n            interval: {\n                style: sectorStyle,\n                color: color,\n                shape: shape,\n            },\n        },\n    }));\n    return params;\n}\n/**\n * label 配置\n * @param params\n */\nfunction label(params) {\n    var chart = params.chart, options = params.options;\n    var label = options.label, xField = options.xField;\n    var geometry = findGeometry(chart, 'interval');\n    // label 为 false 不显示 label\n    if (label === false) {\n        geometry.label(false);\n    }\n    else if (isObject(label)) {\n        var callback = label.callback, fields = label.fields, cfg = __rest(label, [\"callback\", \"fields\"]);\n        var offset = cfg.offset;\n        var layout = cfg.layout;\n        // 当 label 在 shape 外部显示时，设置 'limit-in-shape' 会\n        // 造成 label 不显示。\n        if (offset === undefined || offset >= 0) {\n            layout = layout ? (isArray(layout) ? layout : [layout]) : [];\n            cfg.layout = filter(layout, function (v) { return v.type !== 'limit-in-shape'; });\n            cfg.layout.length || delete cfg.layout;\n        }\n        geometry.label({\n            fields: fields || [xField],\n            callback: callback,\n            cfg: transformLabel(cfg),\n        });\n    }\n    else {\n        log(LEVEL.WARN, label === null, 'the label option must be an Object.');\n        geometry.label({ fields: [xField] });\n    }\n    return params;\n}\n/**\n * legend 配置\n * @param params\n */\nexport function legend(params) {\n    var chart = params.chart, options = params.options;\n    var legend = options.legend, seriesField = options.seriesField;\n    if (legend === false) {\n        chart.legend(false);\n    }\n    else if (seriesField) {\n        chart.legend(seriesField, legend);\n    }\n    return params;\n}\n/**\n * coord 配置\n * @param params\n */\nfunction coordinate(params) {\n    var chart = params.chart, options = params.options;\n    var radius = options.radius, innerRadius = options.innerRadius, startAngle = options.startAngle, endAngle = options.endAngle;\n    chart.coordinate({\n        type: 'polar',\n        cfg: {\n            radius: radius,\n            innerRadius: innerRadius,\n            startAngle: startAngle,\n            endAngle: endAngle,\n        },\n    });\n    return params;\n}\n/**\n * meta 配置\n * @param params\n */\nfunction meta(params) {\n    var _a;\n    var options = params.options;\n    var xAxis = options.xAxis, yAxis = options.yAxis, xField = options.xField, yField = options.yField;\n    return flow(scale((_a = {},\n        _a[xField] = xAxis,\n        _a[yField] = yAxis,\n        _a)))(params);\n}\n/**\n * axis 配置\n * @param params\n */\nfunction axis(params) {\n    var chart = params.chart, options = params.options;\n    var xAxis = options.xAxis, yAxis = options.yAxis, xField = options.xField, yField = options.yField;\n    // 为 falsy 则是不显示轴\n    if (!xAxis) {\n        chart.axis(xField, false);\n    }\n    else {\n        chart.axis(xField, xAxis);\n    }\n    if (!yAxis) {\n        chart.axis(yField, false);\n    }\n    else {\n        chart.axis(yField, yAxis);\n    }\n    return params;\n}\n/**\n * 玫瑰图适配器\n * @param chart\n * @param options\n */\nexport function adaptor(params) {\n    // flow 的方式处理所有的配置到 G2 API\n    flow(pattern('sectorStyle'), geometry, meta, label, coordinate, axis, legend, tooltip, interaction, animation, theme, annotation(), state)(params);\n}\n//# sourceMappingURL=adaptor.js.map","import { __extends } from \"tslib\";\nimport { Plot } from '../../core/plot';\nimport { adaptor, meta } from './adaptor';\nimport { DEFAULT_OPTIONS } from './constant';\n/**\n * 玉珏图\n */\nvar RadialBar = /** @class */ (function (_super) {\n    __extends(RadialBar, _super);\n    function RadialBar() {\n        var _this = _super !== null && _super.apply(this, arguments) || this;\n        /** 图表类型 */\n        _this.type = 'radial-bar';\n        return _this;\n    }\n    RadialBar.getDefaultOptions = function () {\n        return DEFAULT_OPTIONS;\n    };\n    /**\n     * @override\n     * @param data\n     */\n    RadialBar.prototype.changeData = function (data) {\n        this.updateOption({ data: data });\n        // 更新玉珏图的 scale\n        meta({ chart: this.chart, options: this.options });\n        this.chart.changeData(data);\n    };\n    /**\n     * 获取默认配置\n     */\n    RadialBar.prototype.getDefaultOptions = function () {\n        return RadialBar.getDefaultOptions();\n    };\n    /**\n     * 获取适配器\n     */\n    RadialBar.prototype.getSchemaAdaptor = function () {\n        return adaptor;\n    };\n    return RadialBar;\n}(Plot));\nexport { RadialBar };\n//# sourceMappingURL=index.js.map","import { Plot } from '../../core/plot';\nimport { deepAssign } from '../../utils';\n/**\n * 玫瑰图 默认配置项\n */\nexport var DEFAULT_OPTIONS = deepAssign({}, Plot.getDefaultOptions(), {\n    xAxis: false,\n    yAxis: false,\n    legend: {\n        position: 'right',\n        radio: {},\n    },\n    sectorStyle: {\n        stroke: '#fff',\n        lineWidth: 1,\n    },\n    label: {\n        layout: {\n            type: 'limit-in-shape',\n        },\n    },\n    tooltip: {\n        shared: true,\n        showMarkers: false,\n    },\n    interactions: [{ type: 'active-region' }],\n});\n//# sourceMappingURL=constant.js.map","import { __extends } from \"tslib\";\nimport { Plot } from '../../core/plot';\nimport { adaptor } from './adaptor';\nimport { DEFAULT_OPTIONS } from './constant';\nvar Rose = /** @class */ (function (_super) {\n    __extends(Rose, _super);\n    function Rose() {\n        var _this = _super !== null && _super.apply(this, arguments) || this;\n        /** 玫瑰图 */\n        _this.type = 'rose';\n        return _this;\n    }\n    /**\n     * 获取 玫瑰图 默认配置项\n     * 供外部使用\n     */\n    Rose.getDefaultOptions = function () {\n        return DEFAULT_OPTIONS;\n    };\n    /**\n     * @override\n     * @param data\n     */\n    Rose.prototype.changeData = function (data) {\n        this.updateOption({ data: data });\n        this.chart.changeData(data);\n    };\n    /**\n     * 获取默认的 options 配置项\n     */\n    Rose.prototype.getDefaultOptions = function () {\n        return Rose.getDefaultOptions();\n    };\n    /**\n     * 获取 玫瑰图 的适配器\n     */\n    Rose.prototype.getSchemaAdaptor = function () {\n        return adaptor;\n    };\n    return Rose;\n}(Plot));\nexport { Rose };\n//# sourceMappingURL=index.js.map","export var X_FIELD = 'x';\nexport var Y_FIELD = 'y';\nexport var COLOR_FIELD = 'name';\nexport var NODES_VIEW_ID = 'nodes';\nexport var EDGES_VIEW_ID = 'edges';\n//# sourceMappingURL=constant.js.map","import { isArray } from '@antv/util';\n/**\n * 根据 edges 获取对应的 node 结构\n */\nexport function getNodes(edges, sourceField, targetField) {\n    var nodes = [];\n    edges.forEach(function (e) {\n        var source = e[sourceField];\n        var target = e[targetField];\n        if (!nodes.includes(source)) {\n            nodes.push(source);\n        }\n        if (!nodes.includes(target)) {\n            nodes.push(target);\n        }\n    });\n    return nodes;\n}\n/**\n * 根据 edges 获取对应的 dfs 邻接矩阵\n */\nexport function getMatrix(edges, nodes, sourceField, targetField) {\n    var graphMatrix = {};\n    nodes.forEach(function (pre) {\n        graphMatrix[pre] = {};\n        nodes.forEach(function (next) {\n            graphMatrix[pre][next] = 0;\n        });\n    });\n    edges.forEach(function (edge) {\n        graphMatrix[edge[sourceField]][edge[targetField]] = 1;\n    });\n    return graphMatrix;\n}\n/**\n * 使用 DFS 思路切断桑基图数据中的环（会丢失数据），保证顺序\n * @param data\n * @param sourceField\n * @param targetField\n */\nexport function cutoffCircle(edges, sourceField, targetField) {\n    if (!isArray(edges))\n        return [];\n    // 待删除的环状结构\n    var removedData = [];\n    // 获取所有的节点\n    var nodes = getNodes(edges, sourceField, targetField);\n    // 获取节点与边的邻接矩阵\n    var graphMatrix = getMatrix(edges, nodes, sourceField, targetField);\n    // visited：标记节点访问状态, 0：未访问,1：访问中, -1：已访问\n    var visited = {};\n    // 初始化visited\n    nodes.forEach(function (node) {\n        visited[node] = 0;\n    });\n    // 图的深度遍历函数\n    function DFS(dfsNode) {\n        // 节点状态置为正在访问\n        visited[dfsNode] = 1;\n        nodes.forEach(function (node) {\n            if (graphMatrix[dfsNode][node] != 0) {\n                // 当前节点在访问中，再次被访问，证明有环，移动到 removeData\n                if (visited[node] == 1) {\n                    // 拼接为字符串，方便最后过滤\n                    removedData.push(\"\".concat(dfsNode, \"_\").concat(node));\n                }\n                else if (visited[node] == -1) {\n                    // 当前结点及后边的结点都被访问过，直接跳至下一个结点\n                    return;\n                }\n                else {\n                    DFS(node); // 否则递归访问\n                }\n            }\n        });\n        //遍历过所有相连的结点后，把本节点标记为-1\n        visited[dfsNode] = -1;\n    }\n    // 对每个节点执行 dfs 操作\n    nodes.forEach(function (node) {\n        //该结点后边的结点都被访问过了，跳过它\n        if (visited[node] == -1) {\n            return;\n        }\n        DFS(node);\n    });\n    if (removedData.length !== 0) {\n        console.warn(\"sankey data contains circle, \".concat(removedData.length, \" records removed.\"), removedData);\n    }\n    // 过滤 remove 路径\n    return edges.filter(function (edge) { return removedData.findIndex(function (i) { return i === \"\".concat(edge[sourceField], \"_\").concat(edge[targetField]); }) < 0; });\n}\n//# sourceMappingURL=circle.js.map","import { minBy } from '@antv/util';\nfunction targetDepth(d) {\n    return d.target.depth;\n}\nexport function left(node) {\n    return node.depth;\n}\nexport function right(node, n) {\n    return n - 1 - node.height;\n}\nexport function justify(node, n) {\n    return node.sourceLinks.length ? node.depth : n - 1;\n}\nexport function center(node) {\n    return node.targetLinks.length ? node.depth : node.sourceLinks.length ? minBy(node.sourceLinks, targetDepth) - 1 : 0;\n}\n//# sourceMappingURL=align.js.map","export function constant(x) {\n    return function () {\n        return x;\n    };\n}\nexport function sumBy(arr, func) {\n    var r = 0;\n    for (var i = 0; i < arr.length; i++) {\n        r += func(arr[i]);\n    }\n    return r;\n}\n/**\n * 计算最大值\n * @param arr\n * @param func\n */\nexport function maxValueBy(arr, func) {\n    var r = -Infinity;\n    for (var i = 0; i < arr.length; i++) {\n        r = Math.max(func(arr[i]), r);\n    }\n    return r;\n}\n/**\n * 计算最小值\n * @param arr\n * @param func\n */\nexport function minValueBy(arr, func) {\n    var r = Infinity;\n    for (var i = 0; i < arr.length; i++) {\n        r = Math.min(func(arr[i]), r);\n    }\n    return r;\n}\n//# sourceMappingURL=helper.js.map","import { justify } from './align';\nimport { constant, maxValueBy, minValueBy, sumBy } from './helper';\nfunction ascendingSourceBreadth(a, b) {\n    return ascendingBreadth(a.source, b.source) || a.index - b.index;\n}\nfunction ascendingTargetBreadth(a, b) {\n    return ascendingBreadth(a.target, b.target) || a.index - b.index;\n}\nfunction ascendingBreadth(a, b) {\n    return a.y0 - b.y0;\n}\nfunction value(d) {\n    return d.value;\n}\nfunction defaultId(d) {\n    return d.index;\n}\nfunction defaultNodes(graph) {\n    return graph.nodes;\n}\nfunction defaultLinks(graph) {\n    return graph.links;\n}\nfunction find(nodeById, id) {\n    var node = nodeById.get(id);\n    if (!node)\n        throw new Error('missing: ' + id);\n    return node;\n}\nfunction computeLinkBreadths(_a) {\n    var nodes = _a.nodes;\n    for (var _i = 0, nodes_1 = nodes; _i < nodes_1.length; _i++) {\n        var node = nodes_1[_i];\n        var y0 = node.y0;\n        var y1 = y0;\n        for (var _b = 0, _c = node.sourceLinks; _b < _c.length; _b++) {\n            var link = _c[_b];\n            link.y0 = y0 + link.width / 2;\n            y0 += link.width;\n        }\n        for (var _d = 0, _e = node.targetLinks; _d < _e.length; _d++) {\n            var link = _e[_d];\n            link.y1 = y1 + link.width / 2;\n            y1 += link.width;\n        }\n    }\n}\nexport function Sankey() {\n    var x0 = 0, y0 = 0, x1 = 1, y1 = 1; // extent\n    var dx = 24; // nodeWidth\n    var dy = 8, py; // nodePadding\n    var id = defaultId;\n    var align = justify;\n    var depth;\n    var sort;\n    var linkSort;\n    var nodes = defaultNodes;\n    var links = defaultLinks;\n    var iterations = 6;\n    function sankey(arg) {\n        var graph = {\n            nodes: nodes(arg),\n            links: links(arg),\n        };\n        computeNodeLinks(graph);\n        computeNodeValues(graph);\n        computeNodeDepths(graph);\n        computeNodeHeights(graph);\n        computeNodeBreadths(graph);\n        computeLinkBreadths(graph);\n        return graph;\n    }\n    sankey.update = function (graph) {\n        computeLinkBreadths(graph);\n        return graph;\n    };\n    sankey.nodeId = function (_) {\n        return arguments.length ? ((id = typeof _ === 'function' ? _ : constant(_)), sankey) : id;\n    };\n    sankey.nodeAlign = function (_) {\n        return arguments.length ? ((align = typeof _ === 'function' ? _ : constant(_)), sankey) : align;\n    };\n    sankey.nodeDepth = function (_) {\n        return arguments.length ? ((depth = typeof _ === 'function' ? _ : _), sankey) : depth;\n    };\n    sankey.nodeSort = function (_) {\n        return arguments.length ? ((sort = _), sankey) : sort;\n    };\n    sankey.nodeWidth = function (_) {\n        return arguments.length ? ((dx = +_), sankey) : dx;\n    };\n    sankey.nodePadding = function (_) {\n        return arguments.length ? ((dy = py = +_), sankey) : dy;\n    };\n    sankey.nodes = function (_) {\n        return arguments.length ? ((nodes = typeof _ === 'function' ? _ : constant(_)), sankey) : nodes;\n    };\n    sankey.links = function (_) {\n        return arguments.length ? ((links = typeof _ === 'function' ? _ : constant(_)), sankey) : links;\n    };\n    sankey.linkSort = function (_) {\n        return arguments.length ? ((linkSort = _), sankey) : linkSort;\n    };\n    sankey.size = function (_) {\n        return arguments.length ? ((x0 = y0 = 0), (x1 = +_[0]), (y1 = +_[1]), sankey) : [x1 - x0, y1 - y0];\n    };\n    sankey.extent = function (_) {\n        return arguments.length\n            ? ((x0 = +_[0][0]), (x1 = +_[1][0]), (y0 = +_[0][1]), (y1 = +_[1][1]), sankey)\n            : [\n                [x0, y0],\n                [x1, y1],\n            ];\n    };\n    sankey.iterations = function (_) {\n        return arguments.length ? ((iterations = +_), sankey) : iterations;\n    };\n    function computeNodeLinks(_a) {\n        var nodes = _a.nodes, links = _a.links;\n        nodes.forEach(function (node, idx) {\n            node.index = idx;\n            node.sourceLinks = [];\n            node.targetLinks = [];\n        });\n        var nodeById = new Map(nodes.map(function (d) { return [id(d), d]; }));\n        links.forEach(function (link, idx) {\n            link.index = idx;\n            var source = link.source, target = link.target;\n            if (typeof source !== 'object')\n                source = link.source = find(nodeById, source);\n            if (typeof target !== 'object')\n                target = link.target = find(nodeById, target);\n            source.sourceLinks.push(link);\n            target.targetLinks.push(link);\n        });\n        if (linkSort != null) {\n            for (var _i = 0, nodes_2 = nodes; _i < nodes_2.length; _i++) {\n                var _b = nodes_2[_i], sourceLinks = _b.sourceLinks, targetLinks = _b.targetLinks;\n                sourceLinks.sort(linkSort);\n                targetLinks.sort(linkSort);\n            }\n        }\n    }\n    function computeNodeValues(_a) {\n        var nodes = _a.nodes;\n        for (var _i = 0, nodes_3 = nodes; _i < nodes_3.length; _i++) {\n            var node = nodes_3[_i];\n            node.value =\n                node.fixedValue === undefined\n                    ? Math.max(sumBy(node.sourceLinks, value), sumBy(node.targetLinks, value))\n                    : node.fixedValue;\n        }\n    }\n    function computeNodeDepths(_a) {\n        var nodes = _a.nodes;\n        var n = nodes.length;\n        var current = new Set(nodes);\n        var next = new Set();\n        var x = 0;\n        while (current.size) {\n            current.forEach(function (node) {\n                node.depth = x;\n                for (var _i = 0, _a = node.sourceLinks; _i < _a.length; _i++) {\n                    var target = _a[_i].target;\n                    next.add(target);\n                }\n            });\n            if (++x > n)\n                throw new Error('circular link');\n            current = next;\n            next = new Set();\n        }\n        // 如果配置了 depth，则设置自定义 depth\n        if (depth) {\n            var maxDepth = Math.max(maxValueBy(nodes, function (d) { return d.depth; }) + 1, 0);\n            var node = void 0;\n            for (var i = 0; i < nodes.length; i++) {\n                node = nodes[i];\n                node.depth = depth.call(null, node, maxDepth);\n            }\n        }\n    }\n    function computeNodeHeights(_a) {\n        var nodes = _a.nodes;\n        var n = nodes.length;\n        var current = new Set(nodes);\n        var next = new Set();\n        var x = 0;\n        while (current.size) {\n            current.forEach(function (node) {\n                node.height = x;\n                for (var _i = 0, _a = node.targetLinks; _i < _a.length; _i++) {\n                    var source = _a[_i].source;\n                    next.add(source);\n                }\n            });\n            if (++x > n)\n                throw new Error('circular link');\n            current = next;\n            next = new Set();\n        }\n    }\n    function computeNodeLayers(_a) {\n        var nodes = _a.nodes;\n        var x = Math.max(maxValueBy(nodes, function (d) { return d.depth; }) + 1, 0);\n        var kx = (x1 - x0 - dx) / (x - 1);\n        var columns = new Array(x).fill(0).map(function () { return []; });\n        for (var _i = 0, nodes_4 = nodes; _i < nodes_4.length; _i++) {\n            var node = nodes_4[_i];\n            var i = Math.max(0, Math.min(x - 1, Math.floor(align.call(null, node, x))));\n            node.layer = i;\n            node.x0 = x0 + i * kx;\n            node.x1 = node.x0 + dx;\n            if (columns[i])\n                columns[i].push(node);\n            else\n                columns[i] = [node];\n        }\n        if (sort)\n            for (var _b = 0, columns_1 = columns; _b < columns_1.length; _b++) {\n                var column = columns_1[_b];\n                column.sort(sort);\n            }\n        return columns;\n    }\n    function initializeNodeBreadths(columns) {\n        var ky = minValueBy(columns, function (c) { return (y1 - y0 - (c.length - 1) * py) / sumBy(c, value); });\n        for (var _i = 0, columns_2 = columns; _i < columns_2.length; _i++) {\n            var nodes_6 = columns_2[_i];\n            var y = y0;\n            for (var _a = 0, nodes_5 = nodes_6; _a < nodes_5.length; _a++) {\n                var node = nodes_5[_a];\n                node.y0 = y;\n                node.y1 = y + node.value * ky;\n                y = node.y1 + py;\n                for (var _b = 0, _c = node.sourceLinks; _b < _c.length; _b++) {\n                    var link = _c[_b];\n                    link.width = link.value * ky;\n                }\n            }\n            y = (y1 - y + py) / (nodes_6.length + 1);\n            for (var i = 0; i < nodes_6.length; ++i) {\n                var node = nodes_6[i];\n                node.y0 += y * (i + 1);\n                node.y1 += y * (i + 1);\n            }\n            reorderLinks(nodes_6);\n        }\n    }\n    function computeNodeBreadths(graph) {\n        var columns = computeNodeLayers(graph);\n        py = Math.min(dy, (y1 - y0) / (maxValueBy(columns, function (c) { return c.length; }) - 1));\n        initializeNodeBreadths(columns);\n        for (var i = 0; i < iterations; ++i) {\n            var alpha = Math.pow(0.99, i);\n            var beta = Math.max(1 - alpha, (i + 1) / iterations);\n            relaxRightToLeft(columns, alpha, beta);\n            relaxLeftToRight(columns, alpha, beta);\n        }\n    }\n    // Reposition each node based on its incoming (target) links.\n    function relaxLeftToRight(columns, alpha, beta) {\n        for (var i = 1, n = columns.length; i < n; ++i) {\n            var column = columns[i];\n            for (var _i = 0, column_1 = column; _i < column_1.length; _i++) {\n                var target = column_1[_i];\n                var y = 0;\n                var w = 0;\n                for (var _a = 0, _b = target.targetLinks; _a < _b.length; _a++) {\n                    var _c = _b[_a], source = _c.source, value_1 = _c.value;\n                    var v = value_1 * (target.layer - source.layer);\n                    y += targetTop(source, target) * v;\n                    w += v;\n                }\n                if (!(w > 0))\n                    continue;\n                var dy_1 = (y / w - target.y0) * alpha;\n                target.y0 += dy_1;\n                target.y1 += dy_1;\n                reorderNodeLinks(target);\n            }\n            if (sort === undefined)\n                column.sort(ascendingBreadth);\n            if (column.length)\n                resolveCollisions(column, beta);\n        }\n    }\n    // Reposition each node based on its outgoing (source) links.\n    function relaxRightToLeft(columns, alpha, beta) {\n        for (var n = columns.length, i = n - 2; i >= 0; --i) {\n            var column = columns[i];\n            for (var _i = 0, column_2 = column; _i < column_2.length; _i++) {\n                var source = column_2[_i];\n                var y = 0;\n                var w = 0;\n                for (var _a = 0, _b = source.sourceLinks; _a < _b.length; _a++) {\n                    var _c = _b[_a], target = _c.target, value_2 = _c.value;\n                    var v = value_2 * (target.layer - source.layer);\n                    y += sourceTop(source, target) * v;\n                    w += v;\n                }\n                if (!(w > 0))\n                    continue;\n                var dy_2 = (y / w - source.y0) * alpha;\n                source.y0 += dy_2;\n                source.y1 += dy_2;\n                reorderNodeLinks(source);\n            }\n            if (sort === undefined)\n                column.sort(ascendingBreadth);\n            if (column.length)\n                resolveCollisions(column, beta);\n        }\n    }\n    function resolveCollisions(nodes, alpha) {\n        var i = nodes.length >> 1;\n        var subject = nodes[i];\n        resolveCollisionsBottomToTop(nodes, subject.y0 - py, i - 1, alpha);\n        resolveCollisionsTopToBottom(nodes, subject.y1 + py, i + 1, alpha);\n        resolveCollisionsBottomToTop(nodes, y1, nodes.length - 1, alpha);\n        resolveCollisionsTopToBottom(nodes, y0, 0, alpha);\n    }\n    // Push any overlapping nodes down.\n    function resolveCollisionsTopToBottom(nodes, y, i, alpha) {\n        for (; i < nodes.length; ++i) {\n            var node = nodes[i];\n            var dy_3 = (y - node.y0) * alpha;\n            if (dy_3 > 1e-6)\n                (node.y0 += dy_3), (node.y1 += dy_3);\n            y = node.y1 + py;\n        }\n    }\n    // Push any overlapping nodes up.\n    function resolveCollisionsBottomToTop(nodes, y, i, alpha) {\n        for (; i >= 0; --i) {\n            var node = nodes[i];\n            var dy_4 = (node.y1 - y) * alpha;\n            if (dy_4 > 1e-6)\n                (node.y0 -= dy_4), (node.y1 -= dy_4);\n            y = node.y0 - py;\n        }\n    }\n    function reorderNodeLinks(_a) {\n        var sourceLinks = _a.sourceLinks, targetLinks = _a.targetLinks;\n        if (linkSort === undefined) {\n            for (var _i = 0, targetLinks_1 = targetLinks; _i < targetLinks_1.length; _i++) {\n                var sourceLinks_2 = targetLinks_1[_i].source.sourceLinks;\n                sourceLinks_2.sort(ascendingTargetBreadth);\n            }\n            for (var _b = 0, sourceLinks_1 = sourceLinks; _b < sourceLinks_1.length; _b++) {\n                var targetLinks_2 = sourceLinks_1[_b].target.targetLinks;\n                targetLinks_2.sort(ascendingSourceBreadth);\n            }\n        }\n    }\n    function reorderLinks(nodes) {\n        if (linkSort === undefined) {\n            for (var _i = 0, nodes_7 = nodes; _i < nodes_7.length; _i++) {\n                var _a = nodes_7[_i], sourceLinks = _a.sourceLinks, targetLinks = _a.targetLinks;\n                sourceLinks.sort(ascendingTargetBreadth);\n                targetLinks.sort(ascendingSourceBreadth);\n            }\n        }\n    }\n    // Returns the target.y0 that would produce an ideal link from source to target.\n    function targetTop(source, target) {\n        var y = source.y0 - ((source.sourceLinks.length - 1) * py) / 2;\n        for (var _i = 0, _a = source.sourceLinks; _i < _a.length; _i++) {\n            var _b = _a[_i], node = _b.target, width = _b.width;\n            if (node === target)\n                break;\n            y += width + py;\n        }\n        for (var _c = 0, _d = target.targetLinks; _c < _d.length; _c++) {\n            var _e = _d[_c], node = _e.source, width = _e.width;\n            if (node === source)\n                break;\n            y -= width;\n        }\n        return y;\n    }\n    // Returns the source.y0 that would produce an ideal link from source to target.\n    function sourceTop(source, target) {\n        var y = target.y0 - ((target.targetLinks.length - 1) * py) / 2;\n        for (var _i = 0, _a = target.targetLinks; _i < _a.length; _i++) {\n            var _b = _a[_i], node = _b.source, width = _b.width;\n            if (node === source)\n                break;\n            y += width + py;\n        }\n        for (var _c = 0, _d = source.sourceLinks; _c < _d.length; _c++) {\n            var _e = _d[_c], node = _e.target, width = _e.width;\n            if (node === target)\n                break;\n            y -= width;\n        }\n        return y;\n    }\n    return sankey;\n}\n//# sourceMappingURL=sankey.js.map","import { assign, isFunction, isString } from '@antv/util';\nimport { center, justify, left, right, sankey } from './sankey';\nvar ALIGN_METHOD = {\n    left: left,\n    right: right,\n    center: center,\n    justify: justify,\n};\n/**\n * 默认值\n */\nvar DEFAULT_OPTIONS = {\n    nodeId: function (node) { return node.index; },\n    nodeAlign: 'justify',\n    nodeWidth: 0.008,\n    nodePadding: 0.03,\n    nodeSort: undefined,\n};\n/**\n * 获得 align function\n * @param nodeAlign\n * @param nodeDepth\n */\nexport function getNodeAlignFunction(nodeAlign) {\n    var func = isString(nodeAlign) ? ALIGN_METHOD[nodeAlign] : isFunction(nodeAlign) ? nodeAlign : null;\n    return func || justify;\n}\nexport function getDefaultOptions(sankeyLayoutOptions) {\n    return assign({}, DEFAULT_OPTIONS, sankeyLayoutOptions);\n}\n/**\n * 桑基图利用数据进行布局的函数，最终返回节点、边的位置（0 - 1 的信息）\n * 将会修改 data 数据\n * @param sankeyLayoutOptions\n * @param data\n */\nexport function sankeyLayout(sankeyLayoutOptions, data) {\n    var options = getDefaultOptions(sankeyLayoutOptions);\n    var nodeId = options.nodeId, nodeSort = options.nodeSort, nodeAlign = options.nodeAlign, nodeWidth = options.nodeWidth, nodePadding = options.nodePadding, nodeDepth = options.nodeDepth;\n    var sankeyProcessor = sankey()\n        // .links((d: any) => d.links)\n        // .nodes((d: any) => d.nodes)\n        .nodeSort(nodeSort)\n        .nodeWidth(nodeWidth)\n        .nodePadding(nodePadding)\n        .nodeDepth(nodeDepth)\n        .nodeAlign(getNodeAlignFunction(nodeAlign))\n        .extent([\n        [0, 0],\n        [1, 1],\n    ])\n        .nodeId(nodeId);\n    // 进行桑基图布局处理\n    var layoutData = sankeyProcessor(data);\n    // post process (x, y), etc.\n    var nodes = layoutData.nodes\n        .map(function (node) {\n        var x0 = node.x0, x1 = node.x1, y0 = node.y0, y1 = node.y1;\n        /* points\n         * 3---2\n         * |   |\n         * 0---1\n         */\n        node.x = [x0, x1, x1, x0];\n        node.y = [y0, y0, y1, y1];\n        return node;\n    })\n        .filter(function (node) {\n        return node.name !== null;\n    });\n    var links = layoutData.links\n        .map(function (edge) {\n        var source = edge.source, target = edge.target;\n        var sx = source.x1;\n        var tx = target.x0;\n        edge.x = [sx, sx, tx, tx];\n        var offset = edge.width / 2;\n        edge.y = [edge.y0 + offset, edge.y0 - offset, edge.y1 + offset, edge.y1 - offset];\n        return edge;\n    })\n        .filter(function (edge) {\n        var source = edge.source, target = edge.target;\n        return source.name !== null && target.name !== null;\n    });\n    return { nodes: nodes, links: links };\n}\n//# sourceMappingURL=layout.js.map","import isArray from './is-array';\nimport isFunction from './is-function';\n/**\n * @param {Array} arr The array to iterate over.\n * @param {Function} [fn] The iteratee invoked per element.\n * @return {*} Returns the minimum value.\n * @example\n *\n * var objects = [{ 'n': 1 }, { 'n': 2 }];\n *\n * minBy(objects, function(o) { return o.n; });\n * // => { 'n': 1 }\n *\n * minBy(objects, 'n');\n * // => { 'n': 1 }\n */\nexport default (function (arr, fn) {\n    if (!isArray(arr)) {\n        return undefined;\n    }\n    var minItem;\n    var min = Infinity;\n    for (var i = 0; i < arr.length; i++) {\n        var item = arr[i];\n        var v = isFunction(fn) ? fn(item) : item[fn];\n        if (v < min) {\n            minItem = item;\n            min = v;\n        }\n    }\n    return minItem;\n});\n//# sourceMappingURL=min-by.js.map","import { __assign, __spreadArray } from \"tslib\";\nimport { isRealNumber, pick } from '../../utils';\nimport { transformDataToNodeLinkData } from '../../utils/data';\nimport { cutoffCircle } from './circle';\nimport { sankeyLayout } from './layout';\n/**\n * 是否是 node-link 类型的数据结构\n * @param dataTyp\n * @returns\n */\nfunction isNodeLink(dataType) {\n    return dataType === 'node-link';\n}\nexport function getNodeWidthRatio(nodeWidth, nodeWidthRatio, width) {\n    return isRealNumber(nodeWidth) ? nodeWidth / width : nodeWidthRatio;\n}\nexport function getNodePaddingRatio(nodePadding, nodePaddingRatio, height) {\n    return isRealNumber(nodePadding) ? nodePadding / height : nodePaddingRatio;\n}\n/**\n * 将桑基图配置经过 layout，生成最终的 view 数据\n * @param options\n * @param width\n * @param height\n */\nexport function transformToViewsData(options, width, height) {\n    var dataType = options.dataType, data = options.data, sourceField = options.sourceField, targetField = options.targetField, weightField = options.weightField, nodeAlign = options.nodeAlign, nodeSort = options.nodeSort, nodePadding = options.nodePadding, nodePaddingRatio = options.nodePaddingRatio, nodeWidth = options.nodeWidth, nodeWidthRatio = options.nodeWidthRatio, nodeDepth = options.nodeDepth, _a = options.rawFields, rawFields = _a === void 0 ? [] : _a;\n    var sankeyLayoutInputData;\n    if (!isNodeLink(dataType)) {\n        sankeyLayoutInputData = transformDataToNodeLinkData(cutoffCircle(data, sourceField, targetField), sourceField, targetField, weightField, rawFields);\n    }\n    else {\n        sankeyLayoutInputData = data;\n    }\n    // 3. layout 之后的数据\n    var _b = sankeyLayout({\n        nodeAlign: nodeAlign,\n        nodePadding: getNodePaddingRatio(nodePadding, nodePaddingRatio, height),\n        nodeWidth: getNodeWidthRatio(nodeWidth, nodeWidthRatio, width),\n        nodeSort: nodeSort,\n        nodeDepth: nodeDepth,\n    }, sankeyLayoutInputData), nodes = _b.nodes, links = _b.links;\n    // 4. 生成绘图数据\n    return {\n        nodes: nodes.map(function (node) {\n            return __assign(__assign({}, pick(node, __spreadArray(['x', 'y', 'name'], rawFields, true))), { isNode: true });\n        }),\n        edges: links.map(function (link) {\n            return __assign(__assign({ source: link.source.name, target: link.target.name, name: link.source.name || link.target.name }, pick(link, __spreadArray(['x', 'y', 'value'], rawFields, true))), { isNode: false });\n        }),\n    };\n}\n//# sourceMappingURL=helper.js.map","import { __spreadArray } from \"tslib\";\nimport { uniq } from '@antv/util';\nimport { theme } from '../../adaptor/common';\nimport { edge, polygon } from '../../adaptor/geometries';\nimport { deepAssign, findViewById, flow } from '../../utils';\nimport { addViewAnimation } from '../../utils/view';\nimport { COLOR_FIELD, EDGES_VIEW_ID, NODES_VIEW_ID, X_FIELD, Y_FIELD } from './constant';\nimport { transformToViewsData } from './helper';\n/**\n * 默认配置项 处理\n * @param params\n */\nfunction defaultOptions(params) {\n    var options = params.options;\n    var _a = options.rawFields, rawFields = _a === void 0 ? [] : _a;\n    return deepAssign({}, {\n        options: {\n            tooltip: {\n                fields: uniq(__spreadArray(['name', 'source', 'target', 'value', 'isNode'], rawFields, true)),\n            },\n            label: {\n                fields: uniq(__spreadArray(['x', 'name'], rawFields, true)),\n            },\n        },\n    }, params);\n}\n/**\n * geometry 处理\n * @param params\n */\nfunction geometry(params) {\n    var chart = params.chart, options = params.options;\n    var color = options.color, nodeStyle = options.nodeStyle, edgeStyle = options.edgeStyle, label = options.label, tooltip = options.tooltip, nodeState = options.nodeState, edgeState = options.edgeState, _a = options.rawFields, rawFields = _a === void 0 ? [] : _a;\n    // 1. 组件，优先设置，因为子 view 会继承配置\n    chart.legend(false);\n    chart.tooltip(tooltip);\n    chart.axis(false);\n    // y 镜像一下，防止图形顺序和数据顺序反了\n    chart.coordinate().reflect('y');\n    // 2. node edge views\n    // @ts-ignore\n    var _b = transformToViewsData(options, chart.width, chart.height), nodes = _b.nodes, edges = _b.edges;\n    // edge view\n    var edgeView = chart.createView({ id: EDGES_VIEW_ID });\n    edgeView.data(edges);\n    edge({\n        chart: edgeView,\n        // @ts-ignore\n        options: {\n            xField: X_FIELD,\n            yField: Y_FIELD,\n            seriesField: COLOR_FIELD,\n            rawFields: __spreadArray(['source', 'target'], rawFields, true),\n            edge: {\n                color: color,\n                style: edgeStyle,\n                shape: 'arc',\n            },\n            tooltip: tooltip,\n            state: edgeState,\n        },\n    });\n    var nodeView = chart.createView({ id: NODES_VIEW_ID });\n    nodeView.data(nodes);\n    polygon({\n        chart: nodeView,\n        options: {\n            xField: X_FIELD,\n            yField: Y_FIELD,\n            seriesField: COLOR_FIELD,\n            polygon: {\n                color: color,\n                style: nodeStyle,\n            },\n            label: label,\n            tooltip: tooltip,\n            state: nodeState,\n        },\n    });\n    chart.interaction('element-active');\n    // scale\n    chart.scale({\n        x: { sync: true, nice: true, min: 0, max: 1, minLimit: 0, maxLimit: 1 },\n        y: { sync: true, nice: true, min: 0, max: 1, minLimit: 0, maxLimit: 1 },\n        name: { sync: 'color', type: 'cat' },\n    });\n    return params;\n}\n/**\n * 动画\n * @param params\n */\nexport function animation(params) {\n    var chart = params.chart, options = params.options;\n    var animation = options.animation;\n    var geometries = __spreadArray(__spreadArray([], chart.views[0].geometries, true), chart.views[1].geometries, true);\n    addViewAnimation(chart, animation, geometries);\n    return params;\n}\n/**\n * 节点拖动\n * @param params\n */\nexport function nodeDraggable(params) {\n    var chart = params.chart, options = params.options;\n    var nodeDraggable = options.nodeDraggable;\n    var DRAG_INTERACTION = 'sankey-node-draggable';\n    if (nodeDraggable) {\n        chart.interaction(DRAG_INTERACTION);\n    }\n    else {\n        chart.removeInteraction(DRAG_INTERACTION);\n    }\n    return params;\n}\n/**\n * Interaction 配置\n * @param params\n */\nfunction interaction(params) {\n    var chart = params.chart, options = params.options;\n    var _a = options.interactions, interactions = _a === void 0 ? [] : _a;\n    var nodeInteractions = [].concat(interactions, options.nodeInteractions || []);\n    var edgeInteractions = [].concat(interactions, options.edgeInteractions || []);\n    var nodeView = findViewById(chart, NODES_VIEW_ID);\n    var edgeView = findViewById(chart, EDGES_VIEW_ID);\n    nodeInteractions.forEach(function (i) {\n        if ((i === null || i === void 0 ? void 0 : i.enable) === false) {\n            nodeView.removeInteraction(i.type);\n        }\n        else {\n            nodeView.interaction(i.type, i.cfg || {});\n        }\n    });\n    edgeInteractions.forEach(function (i) {\n        if ((i === null || i === void 0 ? void 0 : i.enable) === false) {\n            edgeView.removeInteraction(i.type);\n        }\n        else {\n            edgeView.interaction(i.type, i.cfg || {});\n        }\n    });\n    return params;\n}\n/**\n * 图适配器\n * @param chart\n * @param options\n */\nexport function adaptor(params) {\n    // flow 的方式处理所有的配置到 G2 API\n    return flow(defaultOptions, geometry, interaction, nodeDraggable, animation, theme\n    // ... 其他的 adaptor flow\n    )(params);\n}\n//# sourceMappingURL=adaptor.js.map","import { registerAction, registerInteraction } from '@antv/g2';\nimport { SankeyNodeDragAction } from './actions/node-drag';\nregisterAction('sankey-node-drag', SankeyNodeDragAction);\nregisterInteraction('sankey-node-draggable', {\n    showEnable: [\n        { trigger: 'polygon:mouseenter', action: 'cursor:pointer' },\n        { trigger: 'polygon:mouseleave', action: 'cursor:default' },\n    ],\n    start: [{ trigger: 'polygon:mousedown', action: 'sankey-node-drag:start' }],\n    processing: [\n        { trigger: 'plot:mousemove', action: 'sankey-node-drag:translate' },\n        { isEnable: function (context) { return context.isDragging; }, trigger: 'plot:mousemove', action: 'cursor:move' },\n    ],\n    end: [{ trigger: 'plot:mouseup', action: 'sankey-node-drag:end' }],\n});\n//# sourceMappingURL=node-draggable.js.map","import { __assign, __extends, __spreadArray } from \"tslib\";\nimport { Action } from '@antv/g2';\nimport { get } from '@antv/util';\nimport { findViewById } from '../../../../utils';\nimport { EDGES_VIEW_ID, NODES_VIEW_ID } from '../../constant';\nvar SankeyNodeDragAction = /** @class */ (function (_super) {\n    __extends(SankeyNodeDragAction, _super);\n    function SankeyNodeDragAction() {\n        var _this = _super !== null && _super.apply(this, arguments) || this;\n        /**\n         * 是否在拖拽中的标记\n         */\n        _this.isDragging = false;\n        return _this;\n    }\n    /**\n     * 当前操作的是否是 element\n     */\n    SankeyNodeDragAction.prototype.isNodeElement = function () {\n        var shape = get(this.context, 'event.target');\n        if (shape) {\n            var element = shape.get('element');\n            return element && element.getModel().data.isNode;\n        }\n        return false;\n    };\n    SankeyNodeDragAction.prototype.getNodeView = function () {\n        return findViewById(this.context.view, NODES_VIEW_ID);\n    };\n    SankeyNodeDragAction.prototype.getEdgeView = function () {\n        return findViewById(this.context.view, EDGES_VIEW_ID);\n    };\n    /**\n     * 获取当前操作的 index\n     * @param element\n     */\n    SankeyNodeDragAction.prototype.getCurrentDatumIdx = function (element) {\n        return this.getNodeView().geometries[0].elements.indexOf(element);\n    };\n    /**\n     * 点击下去，开始\n     */\n    SankeyNodeDragAction.prototype.start = function () {\n        // 记录开始了的状态\n        if (this.isNodeElement()) {\n            this.prevPoint = {\n                x: get(this.context, 'event.x'),\n                y: get(this.context, 'event.y'),\n            };\n            var element = this.context.event.target.get('element');\n            var idx = this.getCurrentDatumIdx(element);\n            if (idx === -1) {\n                return;\n            }\n            this.currentElementIdx = idx;\n            this.context.isDragging = true;\n            this.isDragging = true;\n            // 关闭动画并暂存配置\n            this.prevNodeAnimateCfg = this.getNodeView().getOptions().animate;\n            this.prevEdgeAnimateCfg = this.getEdgeView().getOptions().animate;\n            this.getNodeView().animate(false);\n            this.getEdgeView().animate(false);\n        }\n    };\n    /**\n     * 移动过程中，平移\n     */\n    SankeyNodeDragAction.prototype.translate = function () {\n        if (this.isDragging) {\n            var chart = this.context.view;\n            var currentPoint = {\n                x: get(this.context, 'event.x'),\n                y: get(this.context, 'event.y'),\n            };\n            var x = currentPoint.x - this.prevPoint.x;\n            var y = currentPoint.y - this.prevPoint.y;\n            var nodeView = this.getNodeView();\n            var element = nodeView.geometries[0].elements[this.currentElementIdx];\n            // 修改数据\n            if (element && element.getModel()) {\n                var prevDatum = element.getModel().data;\n                var data = nodeView.getOptions().data;\n                var coordinate = nodeView.getCoordinate();\n                var datumGap_1 = {\n                    x: x / coordinate.getWidth(),\n                    y: y / coordinate.getHeight(),\n                };\n                var nextDatum = __assign(__assign({}, prevDatum), { x: prevDatum.x.map(function (x) { return (x += datumGap_1.x); }), y: prevDatum.y.map(function (y) { return (y += datumGap_1.y); }) });\n                // 处理一下在 [0, 1] 范围\n                // 1. 更新 node 数据\n                var newData = __spreadArray([], data, true);\n                newData[this.currentElementIdx] = nextDatum;\n                nodeView.data(newData);\n                // 2. 更新 edge 数据\n                var name_1 = prevDatum.name;\n                var edgeView = this.getEdgeView();\n                var edgeData = edgeView.getOptions().data;\n                edgeData.forEach(function (datum) {\n                    // 2.1 以该 node 为 source 的边，修改 [x0, x1, x2, x3] 中的 x0, x1\n                    if (datum.source === name_1) {\n                        datum.x[0] += datumGap_1.x;\n                        datum.x[1] += datumGap_1.x;\n                        datum.y[0] += datumGap_1.y;\n                        datum.y[1] += datumGap_1.y;\n                    }\n                    // 2.2 以该 node 为 target 的边，修改 [x0, x1, x2, x3] 中的 x2, x3\n                    if (datum.target === name_1) {\n                        datum.x[2] += datumGap_1.x;\n                        datum.x[3] += datumGap_1.x;\n                        datum.y[2] += datumGap_1.y;\n                        datum.y[3] += datumGap_1.y;\n                    }\n                });\n                edgeView.data(edgeData);\n                // 3. 更新最新位置\n                this.prevPoint = currentPoint;\n                // node edge 都改变了，所以要从底层 render\n                chart.render(true);\n            }\n        }\n    };\n    /**\n     * 结论，清除状态\n     */\n    SankeyNodeDragAction.prototype.end = function () {\n        this.isDragging = false;\n        this.context.isDragging = false;\n        this.prevPoint = null;\n        this.currentElementIdx = null;\n        // 还原动画\n        this.getNodeView().animate(this.prevNodeAnimateCfg);\n        this.getEdgeView().animate(this.prevEdgeAnimateCfg);\n    };\n    return SankeyNodeDragAction;\n}(Action));\nexport { SankeyNodeDragAction };\n//# sourceMappingURL=node-drag.js.map","import { __extends } from \"tslib\";\nimport { get } from '@antv/util';\nimport { Plot } from '../../core/plot';\nimport { findViewById } from '../../utils';\nimport { adaptor } from './adaptor';\nimport { EDGES_VIEW_ID, NODES_VIEW_ID } from './constant';\nimport { transformToViewsData } from './helper';\n// 桑基图内置交互\nimport './interactions';\n/**\n *  桑基图 Sankey\n */\nvar Sankey = /** @class */ (function (_super) {\n    __extends(Sankey, _super);\n    function Sankey() {\n        var _this = _super !== null && _super.apply(this, arguments) || this;\n        /** 图表类型 */\n        _this.type = 'sankey';\n        return _this;\n    }\n    Sankey.getDefaultOptions = function () {\n        return {\n            appendPadding: 8,\n            syncViewPadding: true,\n            nodeStyle: {\n                opacity: 1,\n                fillOpacity: 1,\n                lineWidth: 1,\n            },\n            edgeStyle: {\n                opacity: 0.3,\n                lineWidth: 0,\n            },\n            edgeState: {\n                active: {\n                    style: {\n                        opacity: 0.8,\n                        lineWidth: 0,\n                    },\n                },\n            },\n            label: {\n                formatter: function (_a) {\n                    var name = _a.name;\n                    return name;\n                },\n                callback: function (x) {\n                    var isLast = x[1] === 1; // 最后一列靠边的节点\n                    return {\n                        style: {\n                            fill: '#545454',\n                            textAlign: isLast ? 'end' : 'start',\n                        },\n                        offsetX: isLast ? -8 : 8,\n                    };\n                },\n                layout: [\n                    {\n                        type: 'hide-overlap',\n                    },\n                ],\n            },\n            tooltip: {\n                showTitle: false,\n                showMarkers: false,\n                shared: false,\n                // 内置：node 不显示 tooltip，edge 显示 tooltip\n                showContent: function (items) {\n                    return !get(items, [0, 'data', 'isNode']);\n                },\n                formatter: function (datum) {\n                    var source = datum.source, target = datum.target, value = datum.value;\n                    return {\n                        name: source + ' -> ' + target,\n                        value: value,\n                    };\n                },\n            },\n            nodeWidthRatio: 0.008,\n            nodePaddingRatio: 0.01,\n            animation: {\n                appear: {\n                    animation: 'wave-in',\n                },\n                enter: {\n                    animation: 'wave-in',\n                },\n            },\n        };\n    };\n    /**\n     * @override\n     * @param data\n     */\n    Sankey.prototype.changeData = function (data) {\n        this.updateOption({ data: data });\n        var _a = transformToViewsData(this.options, this.chart.width, this.chart.height), nodes = _a.nodes, edges = _a.edges;\n        var nodesView = findViewById(this.chart, NODES_VIEW_ID);\n        var edgesView = findViewById(this.chart, EDGES_VIEW_ID);\n        nodesView.changeData(nodes);\n        edgesView.changeData(edges);\n    };\n    /**\n     * 获取适配器\n     */\n    Sankey.prototype.getSchemaAdaptor = function () {\n        return adaptor;\n    };\n    /**\n     * 获取 条形图 默认配置\n     */\n    Sankey.prototype.getDefaultOptions = function () {\n        return Sankey.getDefaultOptions();\n    };\n    return Sankey;\n}(Plot));\nexport { Sankey };\n//# sourceMappingURL=index.js.map","import { Plot } from '../../core/plot';\nimport { deepAssign } from '../../utils';\nimport { CHILD_NODE_COUNT, NODE_ANCESTORS_FIELD, NODE_INDEX_FIELD } from '../../utils/hierarchy/util';\n/**\n * 祖先节点，非 root 根节点\n */\nexport var SUNBURST_ANCESTOR_FIELD = 'ancestor-node';\nexport var SUNBURST_Y_FIELD = 'value';\nexport var SUNBURST_PATH_FIELD = 'path';\n/** 默认的源字段 */\nexport var RAW_FIELDS = [\n    SUNBURST_PATH_FIELD,\n    NODE_INDEX_FIELD,\n    NODE_ANCESTORS_FIELD,\n    CHILD_NODE_COUNT,\n    'name',\n    'depth',\n    'height',\n];\n/**\n * 旭日图 默认配置项\n */\nexport var DEFAULT_OPTIONS = deepAssign({}, Plot.getDefaultOptions(), {\n    innerRadius: 0,\n    radius: 0.85,\n    // 分层配置\n    hierarchyConfig: {\n        // 数值字段，默认是 value（可配置）\n        field: 'value',\n    },\n    // 组件\n    tooltip: {\n        shared: true,\n        showMarkers: false,\n        offset: 20,\n        showTitle: false,\n    },\n    legend: false,\n    // 样式设置\n    sunburstStyle: {\n        lineWidth: 0.5,\n        stroke: '#FFF',\n    },\n    // 默认开启交互\n    drilldown: { enabled: true },\n});\n//# sourceMappingURL=constant.js.map","import { assign, isArray, reduce, size } from '@antv/util';\nimport * as d3Hierarchy from 'd3-hierarchy';\nimport { getAllNodes, getField } from './util';\nvar DEFAULT_OPTIONS = {\n    field: 'value',\n    size: [1, 1],\n    round: false,\n    padding: 0,\n    // 默认降序\n    sort: function (a, b) { return b.value - a.value; },\n    as: ['x', 'y'],\n    // 是否忽略 parentValue, 当设置为 true 时，父节点的权重由子元素决定\n    ignoreParentValue: true,\n};\nexport function partition(data, options) {\n    options = assign({}, DEFAULT_OPTIONS, options);\n    var as = options.as;\n    if (!isArray(as) || as.length !== 2) {\n        throw new TypeError('Invalid as: it must be an array with 2 strings (e.g. [ \"x\", \"y\" ])!');\n    }\n    var field;\n    try {\n        field = getField(options);\n    }\n    catch (e) {\n        console.warn(e);\n    }\n    var partition = function (data) {\n        return d3Hierarchy.partition().size(options.size).round(options.round).padding(options.padding)(\n        /**\n         * d3Hierarchy 布局中需指定 sum 函数计算 node 值，规则是：从当前 node 开始以 post-order traversal 的次序为当前节点以及每个后代节点调用指定的 value 函数，并返回当前 node。\n         * for example:\n         * { node: 'parent', value: 10, children: [{node: 'child1', value: 5}, {node: 'child2', value: 5}, ]}\n         * parent 所得的计算值是 sum(node(parent)) + sum(node(child1)) + sum(node(child2))\n         * sum 函数中，d 为用户传入的 data, children 为保留字段\n         */\n        d3Hierarchy\n            .hierarchy(data)\n            .sum(function (d) {\n            return size(d.children)\n                ? options.ignoreParentValue\n                    ? 0\n                    : d[field] - reduce(d.children, function (a, b) { return a + b[field]; }, 0)\n                : d[field];\n        })\n            .sort(options.sort));\n    };\n    var root = partition(data);\n    /*\n     * points:\n     *   3  2\n     *   0  1\n     */\n    var x = as[0];\n    var y = as[1];\n    root.each(function (node) {\n        var _a, _b;\n        node[x] = [node.x0, node.x1, node.x1, node.x0];\n        node[y] = [node.y1, node.y1, node.y0, node.y0];\n        // 旭日图兼容下 旧版本\n        node.name = node.name || ((_a = node.data) === null || _a === void 0 ? void 0 : _a.name) || ((_b = node.data) === null || _b === void 0 ? void 0 : _b.label);\n        node.data.name = node.name;\n        ['x0', 'x1', 'y0', 'y1'].forEach(function (prop) {\n            if (as.indexOf(prop) === -1) {\n                delete node[prop];\n            }\n        });\n    });\n    return getAllNodes(root);\n}\n//# sourceMappingURL=partition.js.map","import { assign, isArray } from '@antv/util';\nimport * as d3Hierarchy from 'd3-hierarchy';\nimport { getAllNodes, getField } from './util';\nvar DEFAULT_OPTIONS = {\n    field: 'value',\n    tile: 'treemapSquarify',\n    size: [1, 1],\n    round: false,\n    ignoreParentValue: true,\n    padding: 0,\n    paddingInner: 0,\n    paddingOuter: 0,\n    paddingTop: 0,\n    paddingRight: 0,\n    paddingBottom: 0,\n    paddingLeft: 0,\n    as: ['x', 'y'],\n    // 默认降序\n    sort: function (a, b) { return b.value - a.value; },\n    // 纵横比, treemapSquarify 布局时可用，默认黄金分割比例\n    ratio: 0.5 * (1 + Math.sqrt(5)),\n};\nexport function getTileMethod(tile, ratio) {\n    return tile === 'treemapSquarify' ? d3Hierarchy[tile].ratio(ratio) : d3Hierarchy[tile];\n}\nexport function treemap(data, options) {\n    options = assign({}, DEFAULT_OPTIONS, options);\n    var as = options.as;\n    if (!isArray(as) || as.length !== 2) {\n        throw new TypeError('Invalid as: it must be an array with 2 strings (e.g. [ \"x\", \"y\" ])!');\n    }\n    var field;\n    try {\n        field = getField(options);\n    }\n    catch (e) {\n        console.warn(e);\n    }\n    var tileMethod = getTileMethod(options.tile, options.ratio);\n    var partition = function (data) {\n        return d3Hierarchy\n            .treemap()\n            .tile(tileMethod)\n            .size(options.size)\n            .round(options.round)\n            .padding(options.padding)\n            .paddingInner(options.paddingInner)\n            .paddingOuter(options.paddingOuter)\n            .paddingTop(options.paddingTop)\n            .paddingRight(options.paddingRight)\n            .paddingBottom(options.paddingBottom)\n            .paddingLeft(options.paddingLeft)(\n        /**\n         * d3Hierarchy 布局中需指定 sum 函数计算 node 值，规则是：从当前 node 开始以 post-order traversal 的次序为当前节点以及每个后代节点调用指定的 value 函数，并返回当前 node。\n         * for example:\n         * { node: 'parent', value: 10, children: [{node: 'child1', value: 5}, {node: 'child2', value: 5}, ]}\n         * parent 所得的计算值是 sum(node(parent)) + sum(node(child1)) + sum(node(child2))\n         * ignoreParentValue 为 true(默认) 时，父元素的值由子元素累加而来，该值为 0 + 5 + 5 = 10\n         * ignoreParentValue 为 false 时，父元素的值由当前节点 及子元素累加而来，该值为 10 + 5 + 5 = 20\n         * sum 函数中，d 为用户传入的 data, children 为保留字段\n         */\n        d3Hierarchy\n            .hierarchy(data)\n            .sum(function (d) { return (options.ignoreParentValue && d.children ? 0 : d[field]); })\n            .sort(options.sort));\n    };\n    var root = partition(data);\n    /*\n     * points:\n     *   3  2\n     *   0  1\n     */\n    var x = as[0];\n    var y = as[1];\n    root.each(function (node) {\n        node[x] = [node.x0, node.x1, node.x1, node.x0];\n        node[y] = [node.y1, node.y1, node.y0, node.y0];\n        ['x0', 'x1', 'y0', 'y1'].forEach(function (prop) {\n            if (as.indexOf(prop) === -1) {\n                delete node[prop];\n            }\n        });\n    });\n    return getAllNodes(root);\n}\n//# sourceMappingURL=treemap.js.map","import { __assign, __spreadArray } from \"tslib\";\nimport { omit } from '@antv/util';\nimport { HIERARCHY_DATA_TRANSFORM_PARAMS } from '../../interactions/actions/drill-down';\nimport { pick } from '../../utils';\nimport { partition } from '../../utils/hierarchy/partition';\nimport { treemap } from '../../utils/hierarchy/treemap';\nimport { SUNBURST_ANCESTOR_FIELD, SUNBURST_PATH_FIELD } from './constant';\n/**\n * sunburst 处理数据\n * @param options\n */\nexport function transformData(options) {\n    var data = options.data, colorField = options.colorField, rawFields = options.rawFields, _a = options.hierarchyConfig, hierarchyConfig = _a === void 0 ? {} : _a;\n    var activeDepth = hierarchyConfig.activeDepth;\n    var transform = {\n        partition: partition,\n        treemap: treemap,\n    };\n    // @ts-ignore 兼容旧版本，支持 seriesField 来作为 hierarchyConfig.field\n    var seriesField = options.seriesField;\n    // @ts-ignore 兼容旧版本，支持矩阵树图形状的旭日图\n    var type = options.type || 'partition';\n    var nodes = transform[type](data, __assign(__assign({ field: seriesField || 'value' }, omit(hierarchyConfig, ['activeDepth'])), { \n        // @ts-ignore\n        type: \"hierarchy.\".concat(type), as: ['x', 'y'] }));\n    var result = [];\n    nodes.forEach(function (node) {\n        var _a;\n        var _b, _c, _d, _e, _f;\n        if (node.depth === 0) {\n            return null;\n        }\n        if (activeDepth > 0 && node.depth > activeDepth) {\n            return null;\n        }\n        var path = node.data.name;\n        var ancestorNode = __assign({}, node);\n        while (ancestorNode.depth > 1) {\n            path = \"\".concat((_b = ancestorNode.parent.data) === null || _b === void 0 ? void 0 : _b.name, \" / \").concat(path);\n            ancestorNode = ancestorNode.parent;\n        }\n        var nodeInfo = __assign(__assign(__assign({}, pick(node.data, __spreadArray(__spreadArray([], (rawFields || []), true), [hierarchyConfig.field], false))), (_a = {}, _a[SUNBURST_PATH_FIELD] = path, _a[SUNBURST_ANCESTOR_FIELD] = ancestorNode.data.name, _a)), node);\n        // note: 兼容旧版本\n        if (seriesField) {\n            nodeInfo[seriesField] = node.data[seriesField] || ((_d = (_c = node.parent) === null || _c === void 0 ? void 0 : _c.data) === null || _d === void 0 ? void 0 : _d[seriesField]);\n        }\n        if (colorField) {\n            nodeInfo[colorField] = node.data[colorField] || ((_f = (_e = node.parent) === null || _e === void 0 ? void 0 : _e.data) === null || _f === void 0 ? void 0 : _f[colorField]);\n        }\n        nodeInfo.ext = hierarchyConfig;\n        nodeInfo[HIERARCHY_DATA_TRANSFORM_PARAMS] = { hierarchyConfig: hierarchyConfig, colorField: colorField, rawFields: rawFields };\n        result.push(nodeInfo);\n    });\n    return result;\n}\n//# sourceMappingURL=utils.js.map","import { __assign, __rest, __spreadArray } from \"tslib\";\nimport { get, isFunction, uniq } from '@antv/util';\nimport { animation, annotation, interaction as baseInteraction, legend, pattern, scale, theme, } from '../../adaptor/common';\nimport { polygon as polygonAdaptor } from '../../adaptor/geometries';\nimport { deepAssign, findGeometry, flow, transformLabel } from '../../utils';\nimport { getAdjustAppendPadding } from '../../utils/padding';\nimport { RAW_FIELDS, SUNBURST_ANCESTOR_FIELD, SUNBURST_PATH_FIELD, SUNBURST_Y_FIELD } from './constant';\nimport { transformData } from './utils';\n/**\n * geometry 配置处理\n * @param params\n */\nfunction geometry(params) {\n    var chart = params.chart, options = params.options;\n    var color = options.color, _a = options.colorField, colorField = _a === void 0 ? SUNBURST_ANCESTOR_FIELD : _a, sunburstStyle = options.sunburstStyle, _b = options.rawFields, rawFields = _b === void 0 ? [] : _b, shape = options.shape;\n    var data = transformData(options);\n    chart.data(data);\n    // 特殊处理下样式，如果没有设置 fillOpacity 的时候，默认根据层级进行填充透明度\n    var style;\n    if (sunburstStyle) {\n        style = function (datum) {\n            return deepAssign({}, {\n                fillOpacity: Math.pow(0.85, datum.depth),\n            }, isFunction(sunburstStyle) ? sunburstStyle(datum) : sunburstStyle);\n        };\n    }\n    // geometry\n    polygonAdaptor(deepAssign({}, params, {\n        options: {\n            xField: 'x',\n            yField: 'y',\n            seriesField: colorField,\n            rawFields: uniq(__spreadArray(__spreadArray([], RAW_FIELDS, true), rawFields, true)),\n            polygon: {\n                color: color,\n                style: style,\n                shape: shape,\n            },\n        },\n    }));\n    return params;\n}\n/**\n * axis 配置\n * @param params\n */\nexport function axis(params) {\n    var chart = params.chart;\n    chart.axis(false);\n    return params;\n}\n/**\n * 数据标签\n * @param params\n */\nfunction label(params) {\n    var chart = params.chart, options = params.options;\n    var label = options.label;\n    var geometry = findGeometry(chart, 'polygon');\n    // 默认不展示，undefined 也不展示\n    if (!label) {\n        geometry.label(false);\n    }\n    else {\n        var _a = label.fields, fields = _a === void 0 ? ['name'] : _a, callback = label.callback, cfg = __rest(label, [\"fields\", \"callback\"]);\n        geometry.label({\n            fields: fields,\n            callback: callback,\n            cfg: transformLabel(cfg),\n        });\n    }\n    return params;\n}\n/**\n * coord 配置\n * @param params\n */\nfunction coordinate(params) {\n    var chart = params.chart, options = params.options;\n    var innerRadius = options.innerRadius, radius = options.radius, reflect = options.reflect;\n    var coord = chart.coordinate({\n        type: 'polar',\n        cfg: {\n            innerRadius: innerRadius,\n            radius: radius,\n        },\n    });\n    if (reflect) {\n        coord.reflect(reflect);\n    }\n    return params;\n}\n/**\n * meta 配置\n * @param params\n */\nexport function meta(params) {\n    var _a;\n    var options = params.options;\n    var hierarchyConfig = options.hierarchyConfig, meta = options.meta;\n    return flow(scale({}, (_a = {},\n        _a[SUNBURST_Y_FIELD] = get(meta, get(hierarchyConfig, ['field'], 'value')),\n        _a)))(params);\n}\n/**\n * tooltip 配置\n * @param params\n */\nexport function tooltip(params) {\n    var chart = params.chart, options = params.options;\n    var tooltip = options.tooltip;\n    if (tooltip === false) {\n        chart.tooltip(false);\n    }\n    else {\n        var tooltipOptions = tooltip;\n        // 设置了 fields，就不进行 customItems 了; 设置 formatter 时，需要搭配 fields\n        if (!get(tooltip, 'fields')) {\n            tooltipOptions = deepAssign({}, {\n                customItems: function (items) {\n                    return items.map(function (item) {\n                        var scales = get(chart.getOptions(), 'scales');\n                        var pathFormatter = get(scales, [SUNBURST_PATH_FIELD, 'formatter'], function (v) { return v; });\n                        var valueFormatter = get(scales, [SUNBURST_Y_FIELD, 'formatter'], function (v) { return v; });\n                        return __assign(__assign({}, item), { name: pathFormatter(item.data[SUNBURST_PATH_FIELD]), value: valueFormatter(item.data.value) });\n                    });\n                },\n            }, tooltipOptions);\n        }\n        chart.tooltip(tooltipOptions);\n    }\n    return params;\n}\nfunction adaptorInteraction(options) {\n    var drilldown = options.drilldown, _a = options.interactions, interactions = _a === void 0 ? [] : _a;\n    if (drilldown === null || drilldown === void 0 ? void 0 : drilldown.enabled) {\n        return deepAssign({}, options, {\n            interactions: __spreadArray(__spreadArray([], interactions, true), [\n                {\n                    type: 'drill-down',\n                    cfg: { drillDownConfig: drilldown, transformData: transformData },\n                },\n            ], false),\n        });\n    }\n    return options;\n}\n/**\n * 交互配置\n * @param params\n * @returns\n */\nfunction interaction(params) {\n    var chart = params.chart, options = params.options;\n    var drilldown = options.drilldown;\n    baseInteraction({\n        chart: chart,\n        options: adaptorInteraction(options),\n    });\n    // 适应下钻交互面包屑\n    if (drilldown === null || drilldown === void 0 ? void 0 : drilldown.enabled) {\n        // 为面包屑留出 25px 的空间\n        chart.appendPadding = getAdjustAppendPadding(chart.appendPadding, get(drilldown, ['breadCrumb', 'position']));\n    }\n    return params;\n}\n/**\n * 旭日图适配器\n * @param chart\n * @param options\n */\nexport function adaptor(params) {\n    // flow 的方式处理所有的配置到 G2 API\n    return flow(theme, pattern('sunburstStyle'), geometry, axis, meta, legend, coordinate, tooltip, label, interaction, animation, annotation())(params);\n}\n//# sourceMappingURL=adaptor.js.map","import { __assign } from \"tslib\";\nimport { get, isArray } from '@antv/util';\nimport { HIERARCHY_DATA_TRANSFORM_PARAMS } from '../../interactions/actions/drill-down';\nimport { treemap } from '../../utils/hierarchy/treemap';\nexport function findInteraction(interactions, interactionType) {\n    if (!isArray(interactions))\n        return undefined;\n    return interactions.find(function (i) { return i.type === interactionType; });\n}\nexport function enableInteraction(interactions, interactionType) {\n    var interaction = findInteraction(interactions, interactionType);\n    return interaction && interaction.enable !== false;\n}\n/**\n * 是否允许下钻交互\n * @param interactions\n * @param interactionType\n * @returns\n */\nexport function enableDrillInteraction(options) {\n    var interactions = options.interactions, drilldown = options.drilldown;\n    // 兼容旧版本, treemap-drill-down\n    return get(drilldown, 'enabled') || enableInteraction(interactions, 'treemap-drill-down');\n}\nexport function resetDrillDown(chart) {\n    var drillDownInteraction = chart.interactions['drill-down'];\n    if (!drillDownInteraction)\n        return;\n    // @ts-ignore\n    var drillDownAction = drillDownInteraction.context.actions.find(function (i) { return i.name === 'drill-down-action'; });\n    drillDownAction.reset();\n}\nexport function transformData(options) {\n    var data = options.data, colorField = options.colorField, enableDrillDown = options.enableDrillDown, hierarchyConfig = options.hierarchyConfig;\n    var nodes = treemap(data, __assign(__assign({}, hierarchyConfig), { \n        // @ts-ignore\n        type: 'hierarchy.treemap', field: 'value', as: ['x', 'y'] }));\n    var result = [];\n    nodes.forEach(function (node) {\n        if (node.depth === 0) {\n            return null;\n        }\n        // 开启下钻，仅加载 depth === 1 的数据\n        if (enableDrillDown && node.depth !== 1) {\n            return null;\n        }\n        // 不开启下钻，加载所有叶子节点\n        if (!enableDrillDown && node.children) {\n            return null;\n        }\n        // path 信息仅挑选必要祖先元素属性，因为在有些属性是不必要(x, y), 或是不准确的(下钻时的 depth)，不对外透出\n        var curPath = node.ancestors().map(function (n) { return ({\n            data: n.data,\n            height: n.height,\n            value: n.value,\n        }); });\n        // 在下钻树图中，每次绘制的是当前层级信息，将父元素的层级信息（data.path) 做一层拼接。\n        var path = enableDrillDown && isArray(data.path) ? curPath.concat(data.path.slice(1)) : curPath;\n        var nodeInfo = Object.assign({}, node.data, __assign({ x: node.x, y: node.y, depth: node.depth, value: node.value, path: path }, node));\n        if (!node.data[colorField] && node.parent) {\n            var ancestorNode = node.ancestors().find(function (n) { return n.data[colorField]; });\n            nodeInfo[colorField] = ancestorNode === null || ancestorNode === void 0 ? void 0 : ancestorNode.data[colorField];\n        }\n        else {\n            nodeInfo[colorField] = node.data[colorField];\n        }\n        nodeInfo[HIERARCHY_DATA_TRANSFORM_PARAMS] = { hierarchyConfig: hierarchyConfig, colorField: colorField, enableDrillDown: enableDrillDown };\n        result.push(nodeInfo);\n    });\n    return result;\n}\n//# sourceMappingURL=utils.js.map","import { __spreadArray } from \"tslib\";\nimport { get } from '@antv/util';\nimport { animation, annotation, interaction as commonInteraction, legend, theme, tooltip } from '../../adaptor/common';\nimport { polygon as basePolygon } from '../../adaptor/geometries/polygon';\nimport { pattern } from '../../adaptor/pattern';\nimport { deepAssign, flow } from '../../utils';\nimport { getAdjustAppendPadding } from '../../utils/padding';\nimport { enableDrillInteraction, findInteraction, transformData } from './utils';\n/**\n * 获取默认 option\n * @param params\n */\nfunction defaultOptions(params) {\n    var options = params.options;\n    var colorField = options.colorField;\n    return deepAssign({\n        options: {\n            rawFields: ['value'],\n            tooltip: {\n                fields: ['name', 'value', colorField, 'path'],\n                formatter: function (data) {\n                    return {\n                        name: data.name,\n                        value: data.value,\n                    };\n                },\n            },\n        },\n    }, params);\n}\n/**\n * 字段\n * @param params\n */\nfunction geometry(params) {\n    var chart = params.chart, options = params.options;\n    var color = options.color, colorField = options.colorField, rectStyle = options.rectStyle, hierarchyConfig = options.hierarchyConfig, rawFields = options.rawFields;\n    var data = transformData({\n        data: options.data,\n        colorField: options.colorField,\n        enableDrillDown: enableDrillInteraction(options),\n        hierarchyConfig: hierarchyConfig,\n    });\n    chart.data(data);\n    // geometry\n    basePolygon(deepAssign({}, params, {\n        options: {\n            xField: 'x',\n            yField: 'y',\n            seriesField: colorField,\n            rawFields: rawFields,\n            polygon: {\n                color: color,\n                style: rectStyle,\n            },\n        },\n    }));\n    // 做一个反转，这样配合排序，可以将最大值放到左上角，最小值放到右下角\n    chart.coordinate().reflect('y');\n    return params;\n}\n/**\n * 坐标轴\n * @param params\n */\nfunction axis(params) {\n    var chart = params.chart;\n    chart.axis(false);\n    return params;\n}\nfunction adaptorInteraction(options) {\n    var drilldown = options.drilldown, _a = options.interactions, interactions = _a === void 0 ? [] : _a;\n    var enableDrillDown = enableDrillInteraction(options);\n    if (enableDrillDown) {\n        return deepAssign({}, options, {\n            interactions: __spreadArray(__spreadArray([], interactions, true), [\n                {\n                    type: 'drill-down',\n                    // 🚓 这不是一个规范的 API，后续会变更。慎重参考\n                    cfg: { drillDownConfig: drilldown, transformData: transformData },\n                },\n            ], false),\n        });\n    }\n    return options;\n}\n/**\n * Interaction 配置\n * @param params\n */\nexport function interaction(params) {\n    var chart = params.chart, options = params.options;\n    var interactions = options.interactions, drilldown = options.drilldown;\n    commonInteraction({\n        chart: chart,\n        options: adaptorInteraction(options),\n    });\n    // 适配 view-zoom\n    var viewZoomInteraction = findInteraction(interactions, 'view-zoom');\n    if (viewZoomInteraction) {\n        // 开启缩放 interaction 后，则阻止默认滚动事件，避免整个窗口的滚动\n        if (viewZoomInteraction.enable !== false) {\n            chart.getCanvas().on('mousewheel', function (ev) {\n                ev.preventDefault();\n            });\n        }\n        else {\n            // 手动关闭后，清除。仅对声明 viewZoomInteraction 的清除。\n            chart.getCanvas().off('mousewheel');\n        }\n    }\n    // 适应下钻交互面包屑\n    var enableDrillDown = enableDrillInteraction(options);\n    if (enableDrillDown) {\n        // 为面包屑在底部留出 25px 的空间\n        chart.appendPadding = getAdjustAppendPadding(chart.appendPadding, get(drilldown, ['breadCrumb', 'position']));\n    }\n    return params;\n}\n/**\n * 矩形树图\n * @param chart\n * @param options\n */\nexport function adaptor(params) {\n    return flow(defaultOptions, theme, pattern('rectStyle'), geometry, axis, legend, tooltip, interaction, animation, annotation())(params);\n}\n//# sourceMappingURL=adaptor.js.map","import { __extends } from \"tslib\";\nimport { Plot } from '../../core/plot';\nimport { NODE_ANCESTORS_FIELD } from '../../utils/hierarchy/util';\nimport { adaptor } from './adaptor';\nimport { DEFAULT_OPTIONS, SUNBURST_ANCESTOR_FIELD, SUNBURST_PATH_FIELD } from './constant';\nimport './interactions';\nvar Sunburst = /** @class */ (function (_super) {\n    __extends(Sunburst, _super);\n    function Sunburst() {\n        var _this = _super !== null && _super.apply(this, arguments) || this;\n        /** 图表类型 */\n        _this.type = 'sunburst';\n        return _this;\n    }\n    /**\n     * 获取 旭日图 默认配置项\n     * 供外部使用\n     */\n    Sunburst.getDefaultOptions = function () {\n        return DEFAULT_OPTIONS;\n    };\n    /**\n     * 获取 旭日图 默认配置\n     */\n    Sunburst.prototype.getDefaultOptions = function () {\n        return Sunburst.getDefaultOptions();\n    };\n    /**\n     * 获取旭日图的适配器\n     */\n    Sunburst.prototype.getSchemaAdaptor = function () {\n        return adaptor;\n    };\n    /** 旭日图 节点的祖先节点 */\n    Sunburst.SUNBURST_ANCESTOR_FIELD = SUNBURST_ANCESTOR_FIELD;\n    /** 旭日图 节点的路径 */\n    Sunburst.SUNBURST_PATH_FIELD = SUNBURST_PATH_FIELD;\n    /** 节点的祖先节点 */\n    Sunburst.NODE_ANCESTORS_FIELD = NODE_ANCESTORS_FIELD;\n    return Sunburst;\n}(Plot));\nexport { Sunburst };\n//# sourceMappingURL=index.js.map","export var DEFAULT_OPTIONS = {\n    // 默认按照 name 字段对颜色进行分类\n    colorField: 'name',\n    rectStyle: {\n        lineWidth: 1,\n        stroke: '#fff',\n    },\n    hierarchyConfig: {\n        tile: 'treemapSquarify',\n    },\n    label: {\n        fields: ['name'],\n        layout: {\n            type: 'limit-in-shape',\n        },\n    },\n    tooltip: {\n        showMarkers: false,\n        showTitle: false,\n    },\n    // 下钻交互配置，默认不开启\n    drilldown: {\n        enabled: false,\n        breadCrumb: {\n            position: 'bottom-left',\n            rootText: '初始',\n            dividerText: '/',\n            textStyle: {\n                fontSize: 12,\n                fill: 'rgba(0, 0, 0, 0.65)',\n                cursor: 'pointer',\n            },\n            activeTextStyle: {\n                fill: '#87B5FF',\n            },\n        },\n    },\n};\n//# sourceMappingURL=constant.js.map","import { __extends } from \"tslib\";\nimport { Plot } from '../../core/plot';\nimport { adaptor } from './adaptor';\nimport { DEFAULT_OPTIONS } from './constant';\nimport './interactions';\nimport { enableInteraction, resetDrillDown, transformData } from './utils';\nvar Treemap = /** @class */ (function (_super) {\n    __extends(Treemap, _super);\n    function Treemap() {\n        var _this = _super !== null && _super.apply(this, arguments) || this;\n        /** 图表类型 */\n        _this.type = 'treemap';\n        return _this;\n    }\n    /**\n     * 获取 矩阵树图 默认配置项\n     * 供外部使用\n     */\n    Treemap.getDefaultOptions = function () {\n        return DEFAULT_OPTIONS;\n    };\n    /**\n     * changeData\n     */\n    Treemap.prototype.changeData = function (data) {\n        var _a = this.options, colorField = _a.colorField, interactions = _a.interactions, hierarchyConfig = _a.hierarchyConfig;\n        this.updateOption({ data: data });\n        var transData = transformData({\n            data: data,\n            colorField: colorField,\n            enableDrillDown: enableInteraction(interactions, 'treemap-drill-down'),\n            hierarchyConfig: hierarchyConfig,\n        });\n        this.chart.changeData(transData);\n        resetDrillDown(this.chart);\n    };\n    /**\n     * 获取 矩阵树图 默认配置\n     */\n    Treemap.prototype.getDefaultOptions = function () {\n        return Treemap.getDefaultOptions();\n    };\n    Treemap.prototype.getSchemaAdaptor = function () {\n        return adaptor;\n    };\n    return Treemap;\n}(Plot));\nexport { Treemap };\n//# sourceMappingURL=index.js.map","// 一些字段常量定义，需要在文档初告知用户\nexport var ID_FIELD = 'id';\nexport var PATH_FIELD = 'path';\n/**\n * 韦恩图 默认配置项\n */\nexport var DEFAULT_OPTIONS = {\n    appendPadding: [10, 0, 20, 0],\n    blendMode: 'multiply',\n    tooltip: {\n        showTitle: false,\n        showMarkers: false,\n        fields: ['id', 'size'],\n        formatter: function (datum) {\n            return { name: datum.id, value: datum.size };\n        },\n    },\n    legend: { position: 'top-left' },\n    label: {\n        style: {\n            textAlign: 'center',\n            fill: '#fff',\n        },\n    },\n    // 默认不开启 图例筛选交互\n    interactions: [{ type: 'legend-filter', enable: false }],\n    state: {\n        active: {\n            style: {\n                stroke: '#000',\n            },\n        },\n        selected: {\n            style: {\n                stroke: '#000',\n                lineWidth: 2,\n            },\n        },\n        inactive: {\n            style: {\n                fillOpacity: 0.3,\n                strokeOpacity: 0.3,\n            },\n        },\n    },\n    // 韦恩图的默认内置注册的交互\n    defaultInteractions: ['tooltip', 'venn-legend-active'],\n};\n//# sourceMappingURL=constant.js.map","/** tofront: 同步所有元素的位置  */\nexport function placeElementsOrdered(view) {\n    if (!view) {\n        return;\n    }\n    var elements = view.geometries[0].elements;\n    elements.forEach(function (elem) {\n        elem.shape.toFront();\n    });\n}\n//# sourceMappingURL=util.js.map","import { __extends } from \"tslib\";\nimport { getActionClass } from '@antv/g2';\nimport { placeElementsOrdered } from '../util';\nvar ElementActiveAction = getActionClass('element-active');\nvar VennElementActive = /** @class */ (function (_super) {\n    __extends(VennElementActive, _super);\n    function VennElementActive() {\n        return _super !== null && _super.apply(this, arguments) || this;\n    }\n    /**\n     * 同步所有元素的位置\n     */\n    VennElementActive.prototype.syncElementsPos = function () {\n        placeElementsOrdered(this.context.view);\n    };\n    /** 激活图形元素 */\n    VennElementActive.prototype.active = function () {\n        _super.prototype.active.call(this);\n        this.syncElementsPos();\n    };\n    /** toggle 图形元素激活状态 */\n    VennElementActive.prototype.toggle = function () {\n        _super.prototype.toggle.call(this);\n        this.syncElementsPos();\n    };\n    /** 重置 */\n    VennElementActive.prototype.reset = function () {\n        _super.prototype.reset.call(this);\n        this.syncElementsPos();\n    };\n    return VennElementActive;\n}(ElementActiveAction));\nexport { VennElementActive };\n//# sourceMappingURL=active.js.map","import { __extends } from \"tslib\";\nimport { getActionClass } from '@antv/g2';\nimport { placeElementsOrdered } from '../util';\nvar ElementHighlightAction = getActionClass('element-highlight');\nvar VennElementHighlight = /** @class */ (function (_super) {\n    __extends(VennElementHighlight, _super);\n    function VennElementHighlight() {\n        return _super !== null && _super.apply(this, arguments) || this;\n    }\n    /**\n     * 同步所有元素的位置\n     */\n    VennElementHighlight.prototype.syncElementsPos = function () {\n        placeElementsOrdered(this.context.view);\n    };\n    /** 高亮图形元素 */\n    VennElementHighlight.prototype.highlight = function () {\n        _super.prototype.highlight.call(this);\n        this.syncElementsPos();\n    };\n    /** toggle 图形元素高亮状态 */\n    VennElementHighlight.prototype.toggle = function () {\n        _super.prototype.toggle.call(this);\n        this.syncElementsPos();\n    };\n    /** 清楚 */\n    VennElementHighlight.prototype.clear = function () {\n        _super.prototype.clear.call(this);\n        this.syncElementsPos();\n    };\n    /** 重置 */\n    VennElementHighlight.prototype.reset = function () {\n        _super.prototype.reset.call(this);\n        this.syncElementsPos();\n    };\n    return VennElementHighlight;\n}(ElementHighlightAction));\nexport { VennElementHighlight };\n//# sourceMappingURL=highlight.js.map","import { __extends } from \"tslib\";\nimport { getActionClass } from '@antv/g2';\nimport { placeElementsOrdered } from '../util';\nvar ElementSelectedAction = getActionClass('element-selected');\nvar ElementSingleSelectedAction = getActionClass('element-single-selected');\n/**\n * 韦恩图元素 多选交互\n */\nvar VennElementSelected = /** @class */ (function (_super) {\n    __extends(VennElementSelected, _super);\n    function VennElementSelected() {\n        return _super !== null && _super.apply(this, arguments) || this;\n    }\n    /**\n     * 同步所有元素的位置\n     */\n    VennElementSelected.prototype.syncElementsPos = function () {\n        placeElementsOrdered(this.context.view);\n    };\n    /** 激活图形元素 */\n    VennElementSelected.prototype.selected = function () {\n        _super.prototype.selected.call(this);\n        this.syncElementsPos();\n    };\n    /** toggle 图形元素激活状态 */\n    VennElementSelected.prototype.toggle = function () {\n        _super.prototype.toggle.call(this);\n        this.syncElementsPos();\n    };\n    /** 重置 */\n    VennElementSelected.prototype.reset = function () {\n        _super.prototype.reset.call(this);\n        this.syncElementsPos();\n    };\n    return VennElementSelected;\n}(ElementSelectedAction));\nexport { VennElementSelected };\n/**\n * 韦恩图元素 单选交互\n */\nvar VennElementSingleSelected = /** @class */ (function (_super) {\n    __extends(VennElementSingleSelected, _super);\n    function VennElementSingleSelected() {\n        return _super !== null && _super.apply(this, arguments) || this;\n    }\n    /**\n     * 同步所有元素的位置\n     */\n    VennElementSingleSelected.prototype.syncElementsPos = function () {\n        placeElementsOrdered(this.context.view);\n    };\n    /** 激活图形元素 */\n    VennElementSingleSelected.prototype.selected = function () {\n        _super.prototype.selected.call(this);\n        this.syncElementsPos();\n    };\n    /** toggle 图形元素激活状态 */\n    VennElementSingleSelected.prototype.toggle = function () {\n        _super.prototype.toggle.call(this);\n        this.syncElementsPos();\n    };\n    /** 重置 */\n    VennElementSingleSelected.prototype.reset = function () {\n        _super.prototype.reset.call(this);\n        this.syncElementsPos();\n    };\n    return VennElementSingleSelected;\n}(ElementSingleSelectedAction));\nexport { VennElementSingleSelected };\n//# sourceMappingURL=selected.js.map","import { registerAction, registerInteraction } from '@antv/g2';\nimport { VennElementActive } from './actions/active';\nimport { VennElementHighlight } from './actions/highlight';\nimport { VennElementSelected, VennElementSingleSelected } from './actions/selected';\n/** ================== 注册交互反馈 aciton ================== */\nregisterAction('venn-element-active', VennElementActive);\nregisterAction('venn-element-highlight', VennElementHighlight);\nregisterAction('venn-element-selected', VennElementSelected);\nregisterAction('venn-element-single-selected', VennElementSingleSelected);\n/** ================== 注册交互 ================== */\n// ========= Active 交互 =========\nregisterInteraction('venn-element-active', {\n    start: [{ trigger: 'element:mouseenter', action: 'venn-element-active:active' }],\n    end: [{ trigger: 'element:mouseleave', action: 'venn-element-active:reset' }],\n});\n// ========= 高亮 交互 =========\nregisterInteraction('venn-element-highlight', {\n    start: [{ trigger: 'element:mouseenter', action: 'venn-element-highlight:highlight' }],\n    end: [{ trigger: 'element:mouseleave', action: 'venn-element-highlight:reset' }],\n});\n// ========= Selected 交互 =========\n// 点击 venn element （可多选）\nregisterInteraction('venn-element-selected', {\n    start: [{ trigger: 'element:click', action: 'venn-element-selected:toggle' }],\n    rollback: [{ trigger: 'dblclick', action: ['venn-element-selected:reset'] }],\n});\n// 点击 venn element （单选）\nregisterInteraction('venn-element-single-selected', {\n    start: [{ trigger: 'element:click', action: 'venn-element-single-selected:toggle' }],\n    rollback: [{ trigger: 'dblclick', action: ['venn-element-single-selected:reset'] }],\n});\n// ========= 韦恩图的图例事件，单独注册 =========\n// legend hover，element active\nregisterInteraction('venn-legend-active', {\n    start: [{ trigger: 'legend-item:mouseenter', action: ['list-active:active', 'venn-element-active:active'] }],\n    end: [{ trigger: 'legend-item:mouseleave', action: ['list-active:reset', 'venn-element-active:reset'] }],\n});\n// legend hover，element active\nregisterInteraction('venn-legend-highlight', {\n    start: [\n        {\n            trigger: 'legend-item:mouseenter',\n            action: ['legend-item-highlight:highlight', 'venn-element-highlight:highlight'],\n        },\n    ],\n    end: [{ trigger: 'legend-item:mouseleave', action: ['legend-item-highlight:reset', 'venn-element-highlight:reset'] }],\n});\n//# sourceMappingURL=index.js.map","import { __extends } from \"tslib\";\nimport { GeometryLabel, registerGeometryLabel } from '@antv/g2';\n// Step 1\n// 自定义 Label 类\n// 需要继承 GeometryLabel 基类\nvar VennLabel = /** @class */ (function (_super) {\n    __extends(VennLabel, _super);\n    function VennLabel() {\n        return _super !== null && _super.apply(this, arguments) || this;\n    }\n    /**\n     * 获取每个 label 的位置\n     * @param labelCfg\n     * @param mappingData\n     * @param index\n     * @returns label point\n     */\n    VennLabel.prototype.getLabelPoint = function (labelCfg, mappingData, index) {\n        var _a = labelCfg.data, x = _a.x, y = _a.y;\n        var _b = labelCfg.customLabelInfo, offsetX = _b.offsetX, offsetY = _b.offsetY;\n        return {\n            content: labelCfg.content[index],\n            x: x + offsetX,\n            y: y + offsetY,\n        };\n    };\n    return VennLabel;\n}(GeometryLabel));\n// Step 2: 注册 CustomLabel\nregisterGeometryLabel('venn', VennLabel);\n//# sourceMappingURL=label.js.map","import { isArray } from 'lodash-es';\nvar SPACES = '\\x09\\x0a\\x0b\\x0c\\x0d\\x20\\xa0\\u1680\\u180e\\u2000\\u2001\\u2002\\u2003\\u2004\\u2005\\u2006\\u2007\\u2008\\u2009\\u200a\\u202f\\u205f\\u3000\\u2028\\u2029';\nvar PATH_COMMAND = new RegExp('([a-z])[' + SPACES + ',]*((-?\\\\d*\\\\.?\\\\d*(?:e[\\\\-+]?\\\\d+)?[' + SPACES + ']*,?[' + SPACES + ']*)+)', 'ig');\nvar PATH_VALUES = new RegExp('(-?\\\\d*\\\\.?\\\\d*(?:e[\\\\-+]?\\\\d+)?)[' + SPACES + ']*,?[' + SPACES + ']*', 'ig');\n// Parses given path string into an array of arrays of path segments\nexport default function parsePathString(pathString) {\n    if (!pathString) {\n        return null;\n    }\n    if (isArray(pathString)) {\n        return pathString;\n    }\n    var paramCounts = {\n        a: 7,\n        c: 6,\n        o: 2,\n        h: 1,\n        l: 2,\n        m: 2,\n        r: 4,\n        q: 4,\n        s: 4,\n        t: 2,\n        v: 1,\n        u: 3,\n        z: 0,\n    };\n    var data = [];\n    String(pathString).replace(PATH_COMMAND, function (a, b, c) {\n        var params = [];\n        var name = b.toLowerCase();\n        c.replace(PATH_VALUES, function (a, b) {\n            b && params.push(+b);\n        });\n        if (name === 'm' && params.length > 2) {\n            data.push([b].concat(params.splice(0, 2)));\n            name = 'l';\n            b = b === 'm' ? 'l' : 'L';\n        }\n        if (name === 'o' && params.length === 1) {\n            data.push([b, params[0]]);\n        }\n        if (name === 'r') {\n            data.push([b].concat(params));\n        }\n        else {\n            while (params.length >= paramCounts[name]) {\n                data.push([b].concat(params.splice(0, paramCounts[name])));\n                if (!paramCounts[name]) {\n                    break;\n                }\n            }\n        }\n        return '';\n    });\n    return data;\n}\n//# sourceMappingURL=parse-path-string.js.map","import { __assign } from \"tslib\";\nimport { registerShape, Util } from '@antv/g2';\nimport { parsePathString } from '@antv/path-util';\nimport { deepAssign } from '../../utils';\nimport { PATH_FIELD } from './constant';\n/**\n * 获取填充属性\n * @param cfg 图形绘制数据\n */\nfunction getFillAttrs(cfg) {\n    // style.fill 优先级更高\n    return deepAssign({}, cfg.defaultStyle, { fill: cfg.color }, cfg.style);\n}\nregisterShape('schema', 'venn', {\n    draw: function (cfg, container) {\n        var data = cfg.data;\n        var segments = parsePathString(data[PATH_FIELD]);\n        var fillAttrs = getFillAttrs(cfg);\n        var group = container.addGroup({ name: 'venn-shape' });\n        group.addShape('path', {\n            attrs: __assign(__assign({}, fillAttrs), { path: segments }),\n            name: 'venn-path',\n        });\n        var _a = cfg.customInfo, offsetX = _a.offsetX, offsetY = _a.offsetY;\n        var matrix = Util.transform(null, [['t', offsetX, offsetY]]);\n        group.setMatrix(matrix);\n        return group;\n    },\n    getMarker: function (markerCfg) {\n        var color = markerCfg.color;\n        return {\n            symbol: 'circle',\n            style: {\n                lineWidth: 0,\n                stroke: color,\n                fill: color,\n                r: 4,\n            },\n        };\n    },\n});\n//# sourceMappingURL=shape.js.map","import colorUtil from '@antv/color-util';\n/*\n * interpolates between a set of colors uzing a bezier spline\n * blend mode formulas taken from http://www.venture-ware.com/kevin/coding/lets-learn-math-photoshop-blend-modes/\n */\nvar each = function (f) {\n    return function (c0, c1) {\n        var out = [];\n        out[0] = f(c0[0], c1[0]);\n        out[1] = f(c0[1], c1[1]);\n        out[2] = f(c0[2], c1[2]);\n        return out;\n    };\n};\n/**\n * 混合方法集合\n */\nvar blendObject = {\n    normal: function (a) { return a; },\n    multiply: function (a, b) { return (a * b) / 255; },\n    screen: function (a, b) { return 255 * (1 - (1 - a / 255) * (1 - b / 255)); },\n    overlay: function (a, b) { return (b < 128 ? (2 * a * b) / 255 : 255 * (1 - 2 * (1 - a / 255) * (1 - b / 255))); },\n    darken: function (a, b) { return (a > b ? b : a); },\n    lighten: function (a, b) { return (a > b ? a : b); },\n    dodge: function (a, b) {\n        if (a === 255)\n            return 255;\n        a = (255 * (b / 255)) / (1 - a / 255);\n        return a > 255 ? 255 : a;\n    },\n    burn: function (a, b) {\n        // 参考 w3c 的写法，考虑除数为 0 的情况\n        if (b === 255)\n            return 255;\n        else if (a === 0)\n            return 0;\n        else\n            return 255 * (1 - Math.min(1, (1 - b / 255) / (a / 255)));\n    },\n};\n/**\n * 获取混合方法\n */\nexport var innerBlend = function (mode) {\n    if (!blendObject[mode]) {\n        throw new Error('unknown blend mode ' + mode);\n    }\n    return blendObject[mode];\n};\n/**\n * 混合颜色，并处理透明度情况\n * 参考：https://www.w3.org/TR/compositing/#blending\n * @param c0\n * @param c1\n * @param mode 混合模式\n * @return rbga\n */\nexport function blend(c0, c1, mode) {\n    if (mode === void 0) { mode = 'normal'; }\n    // blendRgbArr: 生成不考虑透明度的 blend color: [r, g, b]\n    var blendRgbArr = each(innerBlend(mode))(colorToArr(c0), colorToArr(c1));\n    var _a = colorToArr(c0), r0 = _a[0], g0 = _a[1], b0 = _a[2], a0 = _a[3];\n    var _b = colorToArr(c1), r1 = _b[0], g1 = _b[1], b1 = _b[2], a1 = _b[3];\n    var a = Number((a0 + a1 * (1 - a0)).toFixed(2));\n    var r = Math.round(((a0 * (1 - a1) * (r0 / 255) + a0 * a1 * (blendRgbArr[0] / 255) + (1 - a0) * a1 * (r1 / 255)) / a) * 255);\n    var g = Math.round(((a0 * (1 - a1) * (g0 / 255) + a0 * a1 * (blendRgbArr[1] / 255) + (1 - a0) * a1 * (g1 / 255)) / a) * 255);\n    var b = Math.round(((a0 * (1 - a1) * (b0 / 255) + a0 * a1 * (blendRgbArr[2] / 255) + (1 - a0) * a1 * (b1 / 255)) / a) * 255);\n    return \"rgba(\".concat(r, \", \").concat(g, \", \").concat(b, \", \").concat(a, \")\");\n}\n/**\n * 统一颜色输入的格式 [r, g, b, a]\n * 参考：https://www.w3.org/TR/compositing/#blending\n * @param c color\n * @return [r, g, b, a]\n */\nexport function colorToArr(c) {\n    var color = c.replace('/s+/g', ''); // 去除所有空格\n    var rgbaArr;\n    // 'red' -> [r, g, b, 1]\n    if (typeof color === 'string' && !color.startsWith('rgba') && !color.startsWith('#')) {\n        return (rgbaArr = colorUtil.rgb2arr(colorUtil.toRGB(color)).concat([1]));\n    }\n    // rgba(255, 200, 125, 0.5) -> [r, g, b, a]\n    if (color.startsWith('rgba'))\n        rgbaArr = color.replace('rgba(', '').replace(')', '').split(',');\n    // '#fff000' -> [r, g, b, 1]\n    if (color.startsWith('#'))\n        rgbaArr = colorUtil.rgb2arr(color).concat([1]); // 如果是 16 进制（6 位数），默认透明度 1\n    // [r, g, b, a] 前三位取整\n    return rgbaArr.map(function (item, index) { return (index === 3 ? Number(item) : item | 0); });\n}\n//# sourceMappingURL=blend.js.map","// need some basic operations on vectors, rather than adding a dependency,\n// just define here\nexport function zeros(x) { var r = new Array(x); for (var i = 0; i < x; ++i) { r[i] = 0; } return r; }\nexport function zerosM(x,y) { return zeros(x).map(function() { return zeros(y); }); }\n\nexport function dot(a, b) {\n    var ret = 0;\n    for (var i = 0; i < a.length; ++i) {\n        ret += a[i] * b[i];\n    }\n    return ret;\n}\n\nexport function norm2(a)  {\n    return Math.sqrt(dot(a, a));\n}\n\nexport function scale(ret, value, c) {\n    for (var i = 0; i < value.length; ++i) {\n        ret[i] = value[i] * c;\n    }\n}\n\nexport function weightedSum(ret, w1, v1, w2, v2) {\n    for (var j = 0; j < ret.length; ++j) {\n        ret[j] = w1 * v1[j] + w2 * v2[j];\n    }\n}\n","import {dot, norm2, weightedSum} from \"./blas1\";\n\n/** minimizes a function using the downhill simplex method */\nexport function nelderMead(f, x0, parameters) {\n    parameters = parameters || {};\n\n    var maxIterations = parameters.maxIterations || x0.length * 200,\n        nonZeroDelta = parameters.nonZeroDelta || 1.05,\n        zeroDelta = parameters.zeroDelta || 0.001,\n        minErrorDelta = parameters.minErrorDelta || 1e-6,\n        minTolerance = parameters.minErrorDelta || 1e-5,\n        rho = (parameters.rho !== undefined) ? parameters.rho : 1,\n        chi = (parameters.chi !== undefined) ? parameters.chi : 2,\n        psi = (parameters.psi !== undefined) ? parameters.psi : -0.5,\n        sigma = (parameters.sigma !== undefined) ? parameters.sigma : 0.5,\n        maxDiff;\n\n    // initialize simplex.\n    var N = x0.length,\n        simplex = new Array(N + 1);\n    simplex[0] = x0;\n    simplex[0].fx = f(x0);\n    simplex[0].id = 0;\n    for (var i = 0; i < N; ++i) {\n        var point = x0.slice();\n        point[i] = point[i] ? point[i] * nonZeroDelta : zeroDelta;\n        simplex[i+1] = point;\n        simplex[i+1].fx = f(point);\n        simplex[i+1].id = i+1;\n    }\n\n    function updateSimplex(value) {\n        for (var i = 0; i < value.length; i++) {\n            simplex[N][i] = value[i];\n        }\n        simplex[N].fx = value.fx;\n    }\n\n    var sortOrder = function(a, b) { return a.fx - b.fx; };\n\n    var centroid = x0.slice(),\n        reflected = x0.slice(),\n        contracted = x0.slice(),\n        expanded = x0.slice();\n\n    for (var iteration = 0; iteration < maxIterations; ++iteration) {\n        simplex.sort(sortOrder);\n\n        if (parameters.history) {\n            // copy the simplex (since later iterations will mutate) and\n            // sort it to have a consistent order between iterations\n            var sortedSimplex = simplex.map(function (x) {\n                var state = x.slice();\n                state.fx = x.fx;\n                state.id = x.id;\n                return state;\n            });\n            sortedSimplex.sort(function(a,b) { return a.id - b.id; });\n\n            parameters.history.push({x: simplex[0].slice(),\n                                     fx: simplex[0].fx,\n                                     simplex: sortedSimplex});\n        }\n\n        maxDiff = 0;\n        for (i = 0; i < N; ++i) {\n            maxDiff = Math.max(maxDiff, Math.abs(simplex[0][i] - simplex[1][i]));\n        }\n\n        if ((Math.abs(simplex[0].fx - simplex[N].fx) < minErrorDelta) &&\n            (maxDiff < minTolerance)) {\n            break;\n        }\n\n        // compute the centroid of all but the worst point in the simplex\n        for (i = 0; i < N; ++i) {\n            centroid[i] = 0;\n            for (var j = 0; j < N; ++j) {\n                centroid[i] += simplex[j][i];\n            }\n            centroid[i] /= N;\n        }\n\n        // reflect the worst point past the centroid  and compute loss at reflected\n        // point\n        var worst = simplex[N];\n        weightedSum(reflected, 1+rho, centroid, -rho, worst);\n        reflected.fx = f(reflected);\n\n        // if the reflected point is the best seen, then possibly expand\n        if (reflected.fx < simplex[0].fx) {\n            weightedSum(expanded, 1+chi, centroid, -chi, worst);\n            expanded.fx = f(expanded);\n            if (expanded.fx < reflected.fx) {\n                updateSimplex(expanded);\n            }  else {\n                updateSimplex(reflected);\n            }\n        }\n\n        // if the reflected point is worse than the second worst, we need to\n        // contract\n        else if (reflected.fx >= simplex[N-1].fx) {\n            var shouldReduce = false;\n\n            if (reflected.fx > worst.fx) {\n                // do an inside contraction\n                weightedSum(contracted, 1+psi, centroid, -psi, worst);\n                contracted.fx = f(contracted);\n                if (contracted.fx < worst.fx) {\n                    updateSimplex(contracted);\n                } else {\n                    shouldReduce = true;\n                }\n            } else {\n                // do an outside contraction\n                weightedSum(contracted, 1-psi * rho, centroid, psi*rho, worst);\n                contracted.fx = f(contracted);\n                if (contracted.fx < reflected.fx) {\n                    updateSimplex(contracted);\n                } else {\n                    shouldReduce = true;\n                }\n            }\n\n            if (shouldReduce) {\n                // if we don't contract here, we're done\n                if (sigma >= 1) break;\n\n                // do a reduction\n                for (i = 1; i < simplex.length; ++i) {\n                    weightedSum(simplex[i], 1 - sigma, simplex[0], sigma, simplex[i]);\n                    simplex[i].fx = f(simplex[i]);\n                }\n            }\n        } else {\n            updateSimplex(reflected);\n        }\n    }\n\n    simplex.sort(sortOrder);\n    return {fx : simplex[0].fx,\n            x : simplex[0]};\n}\n","import {dot, weightedSum} from \"./blas1\";\n\n\n/// searches along line 'pk' for a point that satifies the wolfe conditions\n/// See 'Numerical Optimization' by Nocedal and Wright p59-60\n/// f : objective function\n/// pk : search direction\n/// current: object containing current gradient/loss\n/// next: output: contains next gradient/loss\n/// returns a: step size taken\nexport function wolfeLineSearch(f, pk, current, next, a, c1, c2) {\n    var phi0 = current.fx, phiPrime0 = dot(current.fxprime, pk),\n        phi = phi0, phi_old = phi0,\n        phiPrime = phiPrime0,\n        a0 = 0;\n\n    a = a || 1;\n    c1 = c1 || 1e-6;\n    c2 = c2 || 0.1;\n\n    function zoom(a_lo, a_high, phi_lo) {\n        for (var iteration = 0; iteration < 16; ++iteration) {\n            a = (a_lo + a_high)/2;\n            weightedSum(next.x, 1.0, current.x, a, pk);\n            phi = next.fx = f(next.x, next.fxprime);\n            phiPrime = dot(next.fxprime, pk);\n\n            if ((phi > (phi0 + c1 * a * phiPrime0)) ||\n                (phi >= phi_lo)) {\n                a_high = a;\n\n            } else  {\n                if (Math.abs(phiPrime) <= -c2 * phiPrime0) {\n                    return a;\n                }\n\n                if (phiPrime * (a_high - a_lo) >=0) {\n                    a_high = a_lo;\n                }\n\n                a_lo = a;\n                phi_lo = phi;\n            }\n        }\n\n        return 0;\n    }\n\n    for (var iteration = 0; iteration < 10; ++iteration) {\n        weightedSum(next.x, 1.0, current.x, a, pk);\n        phi = next.fx = f(next.x, next.fxprime);\n        phiPrime = dot(next.fxprime, pk);\n        if ((phi > (phi0 + c1 * a * phiPrime0)) ||\n            (iteration && (phi >= phi_old))) {\n            return zoom(a0, a, phi_old);\n        }\n\n        if (Math.abs(phiPrime) <= -c2 * phiPrime0) {\n            return a;\n        }\n\n        if (phiPrime >= 0 ) {\n            return zoom(a, a0, phi);\n        }\n\n        phi_old = phi;\n        a0 = a;\n        a *= 2;\n    }\n\n    return a;\n}\n","import {dot, norm2, scale, weightedSum} from \"./blas1\";\nimport {wolfeLineSearch} from \"./linesearch\";\n\nexport function conjugateGradient(f, initial, params) {\n    // allocate all memory up front here, keep out of the loop for perfomance\n    // reasons\n    var current = {x: initial.slice(), fx: 0, fxprime: initial.slice()},\n        next = {x: initial.slice(), fx: 0, fxprime: initial.slice()},\n        yk = initial.slice(),\n        pk, temp,\n        a = 1,\n        maxIterations;\n\n    params = params || {};\n    maxIterations = params.maxIterations || initial.length * 20;\n\n    current.fx = f(current.x, current.fxprime);\n    pk = current.fxprime.slice();\n    scale(pk, current.fxprime,-1);\n\n    for (var i = 0; i < maxIterations; ++i) {\n        a = wolfeLineSearch(f, pk, current, next, a);\n\n        // todo: history in wrong spot?\n        if (params.history) {\n            params.history.push({x: current.x.slice(),\n                                 fx: current.fx,\n                                 fxprime: current.fxprime.slice(),\n                                 alpha: a});\n        }\n\n        if (!a) {\n            // faiiled to find point that satifies wolfe conditions.\n            // reset direction for next iteration\n            scale(pk, current.fxprime, -1);\n\n        } else {\n            // update direction using Polak–Ribiere CG method\n            weightedSum(yk, 1, next.fxprime, -1, current.fxprime);\n\n            var delta_k = dot(current.fxprime, current.fxprime),\n                beta_k = Math.max(0, dot(yk, next.fxprime) / delta_k);\n\n            weightedSum(pk, beta_k, pk, -1, next.fxprime);\n\n            temp = current;\n            current = next;\n            next = temp;\n        }\n\n        if (norm2(current.fxprime) <= 1e-5) {\n            break;\n        }\n    }\n\n    if (params.history) {\n        params.history.push({x: current.x.slice(),\n                             fx: current.fx,\n                             fxprime: current.fxprime.slice(),\n                             alpha: a});\n    }\n\n    return current;\n}\n","var SMALL = 1e-10;\n/** Returns the intersection area of a bunch of circles (where each circle\n is an object having an x,y and radius property) */\nexport function intersectionArea(circles, stats) {\n    // get all the intersection points of the circles\n    var intersectionPoints = getIntersectionPoints(circles);\n    // filter out points that aren't included in all the circles\n    var innerPoints = intersectionPoints.filter(function (p) {\n        return containedInCircles(p, circles);\n    });\n    var arcArea = 0, polygonArea = 0, i;\n    var arcs = [];\n    // if we have intersection points that are within all the circles,\n    // then figure out the area contained by them\n    if (innerPoints.length > 1) {\n        // sort the points by angle from the center of the polygon, which lets\n        // us just iterate over points to get the edges\n        var center = getCenter(innerPoints);\n        for (i = 0; i < innerPoints.length; ++i) {\n            var p = innerPoints[i];\n            p.angle = Math.atan2(p.x - center.x, p.y - center.y);\n        }\n        innerPoints.sort(function (a, b) {\n            return b.angle - a.angle;\n        });\n        // iterate over all points, get arc between the points\n        // and update the areas\n        var p2 = innerPoints[innerPoints.length - 1];\n        for (i = 0; i < innerPoints.length; ++i) {\n            var p1 = innerPoints[i];\n            // polygon area updates easily ...\n            polygonArea += (p2.x + p1.x) * (p1.y - p2.y);\n            // updating the arc area is a little more involved\n            var midPoint = { x: (p1.x + p2.x) / 2, y: (p1.y + p2.y) / 2 };\n            var arc = null;\n            for (var j = 0; j < p1.parentIndex.length; ++j) {\n                if (p2.parentIndex.indexOf(p1.parentIndex[j]) > -1) {\n                    // figure out the angle halfway between the two points\n                    // on the current circle\n                    var circle = circles[p1.parentIndex[j]], a1 = Math.atan2(p1.x - circle.x, p1.y - circle.y), a2 = Math.atan2(p2.x - circle.x, p2.y - circle.y);\n                    var angleDiff = a2 - a1;\n                    if (angleDiff < 0) {\n                        angleDiff += 2 * Math.PI;\n                    }\n                    // and use that angle to figure out the width of the\n                    // arc\n                    var a = a2 - angleDiff / 2;\n                    var width = distance(midPoint, {\n                        x: circle.x + circle.radius * Math.sin(a),\n                        y: circle.y + circle.radius * Math.cos(a),\n                    });\n                    // clamp the width to the largest is can actually be\n                    // (sometimes slightly overflows because of FP errors)\n                    if (width > circle.radius * 2) {\n                        width = circle.radius * 2;\n                    }\n                    // pick the circle whose arc has the smallest width\n                    if (arc === null || arc.width > width) {\n                        arc = { circle: circle, width: width, p1: p1, p2: p2 };\n                    }\n                }\n            }\n            if (arc !== null) {\n                arcs.push(arc);\n                arcArea += circleArea(arc.circle.radius, arc.width);\n                p2 = p1;\n            }\n        }\n    }\n    else {\n        // no intersection points, is either disjoint - or is completely\n        // overlapped. figure out which by examining the smallest circle\n        var smallest = circles[0];\n        for (i = 1; i < circles.length; ++i) {\n            if (circles[i].radius < smallest.radius) {\n                smallest = circles[i];\n            }\n        }\n        // make sure the smallest circle is completely contained in all\n        // the other circles\n        var disjoint = false;\n        for (i = 0; i < circles.length; ++i) {\n            if (distance(circles[i], smallest) > Math.abs(smallest.radius - circles[i].radius)) {\n                disjoint = true;\n                break;\n            }\n        }\n        if (disjoint) {\n            arcArea = polygonArea = 0;\n        }\n        else {\n            arcArea = smallest.radius * smallest.radius * Math.PI;\n            arcs.push({\n                circle: smallest,\n                p1: { x: smallest.x, y: smallest.y + smallest.radius },\n                p2: { x: smallest.x - SMALL, y: smallest.y + smallest.radius },\n                width: smallest.radius * 2,\n            });\n        }\n    }\n    polygonArea /= 2;\n    if (stats) {\n        stats.area = arcArea + polygonArea;\n        stats.arcArea = arcArea;\n        stats.polygonArea = polygonArea;\n        stats.arcs = arcs;\n        stats.innerPoints = innerPoints;\n        stats.intersectionPoints = intersectionPoints;\n    }\n    return arcArea + polygonArea;\n}\n/** returns whether a point is contained by all of a list of circles */\nexport function containedInCircles(point, circles) {\n    for (var i = 0; i < circles.length; ++i) {\n        if (distance(point, circles[i]) > circles[i].radius + SMALL) {\n            return false;\n        }\n    }\n    return true;\n}\n/** Gets all intersection points between a bunch of circles */\nfunction getIntersectionPoints(circles) {\n    var ret = [];\n    for (var i = 0; i < circles.length; ++i) {\n        for (var j = i + 1; j < circles.length; ++j) {\n            var intersect = circleCircleIntersection(circles[i], circles[j]);\n            for (var k = 0; k < intersect.length; ++k) {\n                var p = intersect[k];\n                p.parentIndex = [i, j];\n                ret.push(p);\n            }\n        }\n    }\n    return ret;\n}\n/** Circular segment area calculation. See http://mathworld.wolfram.com/CircularSegment.html */\nexport function circleArea(r, width) {\n    return r * r * Math.acos(1 - width / r) - (r - width) * Math.sqrt(width * (2 * r - width));\n}\n/** euclidean distance between two points */\nexport function distance(p1, p2) {\n    return Math.sqrt((p1.x - p2.x) * (p1.x - p2.x) + (p1.y - p2.y) * (p1.y - p2.y));\n}\n/** Returns the overlap area of two circles of radius r1 and r2 - that\nhave their centers separated by distance d. Simpler faster\ncircle intersection for only two circles */\nexport function circleOverlap(r1, r2, d) {\n    // no overlap\n    if (d >= r1 + r2) {\n        return 0;\n    }\n    // completely overlapped\n    if (d <= Math.abs(r1 - r2)) {\n        return Math.PI * Math.min(r1, r2) * Math.min(r1, r2);\n    }\n    var w1 = r1 - (d * d - r2 * r2 + r1 * r1) / (2 * d), w2 = r2 - (d * d - r1 * r1 + r2 * r2) / (2 * d);\n    return circleArea(r1, w1) + circleArea(r2, w2);\n}\n/** Given two circles (containing a x/y/radius attributes),\nreturns the intersecting points if possible.\nnote: doesn't handle cases where there are infinitely many\nintersection points (circles are equivalent):, or only one intersection point*/\nexport function circleCircleIntersection(p1, p2) {\n    var d = distance(p1, p2), r1 = p1.radius, r2 = p2.radius;\n    // if to far away, or self contained - can't be done\n    if (d >= r1 + r2 || d <= Math.abs(r1 - r2)) {\n        return [];\n    }\n    var a = (r1 * r1 - r2 * r2 + d * d) / (2 * d), h = Math.sqrt(r1 * r1 - a * a), x0 = p1.x + (a * (p2.x - p1.x)) / d, y0 = p1.y + (a * (p2.y - p1.y)) / d, rx = -(p2.y - p1.y) * (h / d), ry = -(p2.x - p1.x) * (h / d);\n    return [\n        { x: x0 + rx, y: y0 - ry },\n        { x: x0 - rx, y: y0 + ry },\n    ];\n}\n/** Returns the center of a bunch of points */\nexport function getCenter(points) {\n    var center = { x: 0, y: 0 };\n    for (var i = 0; i < points.length; ++i) {\n        center.x += points[i].x;\n        center.y += points[i].y;\n    }\n    center.x /= points.length;\n    center.y /= points.length;\n    return center;\n}\n//# sourceMappingURL=circleintersection.js.map","import { nelderMead } from 'fmin';\nimport { distance, getCenter, intersectionArea } from './circleintersection';\nfunction circleMargin(current, interior, exterior) {\n    var margin = interior[0].radius - distance(interior[0], current), i, m;\n    for (i = 1; i < interior.length; ++i) {\n        m = interior[i].radius - distance(interior[i], current);\n        if (m <= margin) {\n            margin = m;\n        }\n    }\n    for (i = 0; i < exterior.length; ++i) {\n        m = distance(exterior[i], current) - exterior[i].radius;\n        if (m <= margin) {\n            margin = m;\n        }\n    }\n    return margin;\n}\n// compute the center of some circles by maximizing the margin of\n// the center point relative to the circles (interior) after subtracting\n// nearby circles (exterior)\nexport function computeTextCentre(interior, exterior) {\n    // get an initial estimate by sampling around the interior circles\n    // and taking the point with the biggest margin\n    var points = [];\n    var i;\n    for (i = 0; i < interior.length; ++i) {\n        var c = interior[i];\n        points.push({ x: c.x, y: c.y });\n        points.push({ x: c.x + c.radius / 2, y: c.y });\n        points.push({ x: c.x - c.radius / 2, y: c.y });\n        points.push({ x: c.x, y: c.y + c.radius / 2 });\n        points.push({ x: c.x, y: c.y - c.radius / 2 });\n    }\n    var initial = points[0], margin = circleMargin(points[0], interior, exterior);\n    for (i = 1; i < points.length; ++i) {\n        var m = circleMargin(points[i], interior, exterior);\n        if (m >= margin) {\n            initial = points[i];\n            margin = m;\n        }\n    }\n    // maximize the margin numerically\n    var solution = nelderMead(function (p) {\n        return -1 * circleMargin({ x: p[0], y: p[1] }, interior, exterior);\n    }, [initial.x, initial.y], { maxIterations: 500, minErrorDelta: 1e-10 }).x;\n    var ret = { x: solution[0], y: solution[1] };\n    // check solution, fallback as needed (happens if fully overlapped\n    // etc)\n    var valid = true;\n    for (i = 0; i < interior.length; ++i) {\n        if (distance(ret, interior[i]) > interior[i].radius) {\n            valid = false;\n            break;\n        }\n    }\n    for (i = 0; i < exterior.length; ++i) {\n        if (distance(ret, exterior[i]) < exterior[i].radius) {\n            valid = false;\n            break;\n        }\n    }\n    if (!valid) {\n        if (interior.length == 1) {\n            ret = { x: interior[0].x, y: interior[0].y };\n        }\n        else {\n            var areaStats = {};\n            intersectionArea(interior, areaStats);\n            if (areaStats.arcs.length === 0) {\n                ret = { x: 0, y: -1000, disjoint: true };\n            }\n            else if (areaStats.arcs.length == 1) {\n                ret = { x: areaStats.arcs[0].circle.x, y: areaStats.arcs[0].circle.y };\n            }\n            else if (exterior.length) {\n                // try again without other circles\n                ret = computeTextCentre(interior, []);\n            }\n            else {\n                // take average of all the points in the intersection\n                // polygon. this should basically never happen\n                // and has some issues:\n                // https://github.com/benfred/venn.js/issues/48#issuecomment-146069777\n                ret = getCenter(areaStats.arcs.map(function (a) {\n                    return a.p1;\n                }));\n            }\n        }\n    }\n    return ret;\n}\n// given a dictionary of {setid : circle}, returns\n// a dictionary of setid to list of circles that completely overlap it\nfunction getOverlappingCircles(circles) {\n    var ret = {}, circleids = [];\n    for (var circleid in circles) {\n        circleids.push(circleid);\n        ret[circleid] = [];\n    }\n    for (var i = 0; i < circleids.length; i++) {\n        var a = circles[circleids[i]];\n        for (var j = i + 1; j < circleids.length; ++j) {\n            var b = circles[circleids[j]], d = distance(a, b);\n            if (d + b.radius <= a.radius + 1e-10) {\n                ret[circleids[j]].push(circleids[i]);\n            }\n            else if (d + a.radius <= b.radius + 1e-10) {\n                ret[circleids[i]].push(circleids[j]);\n            }\n        }\n    }\n    return ret;\n}\nexport function computeTextCentres(circles, areas) {\n    var ret = {}, overlapped = getOverlappingCircles(circles);\n    for (var i = 0; i < areas.length; ++i) {\n        var area = areas[i].sets, areaids = {}, exclude = {};\n        for (var j = 0; j < area.length; ++j) {\n            areaids[area[j]] = true;\n            var overlaps = overlapped[area[j]];\n            // keep track of any circles that overlap this area,\n            // and don't consider for purposes of computing the text\n            // centre\n            for (var k = 0; k < overlaps.length; ++k) {\n                exclude[overlaps[k]] = true;\n            }\n        }\n        var interior = [], exterior = [];\n        for (var setid in circles) {\n            if (setid in areaids) {\n                interior.push(circles[setid]);\n            }\n            else if (!(setid in exclude)) {\n                exterior.push(circles[setid]);\n            }\n        }\n        var centre = computeTextCentre(interior, exterior);\n        ret[area] = centre;\n        if (centre.disjoint && areas[i].size > 0) {\n            console.log('WARNING: area ' + area + ' not represented on screen');\n        }\n    }\n    return ret;\n}\n/**\n * 根据圆心(x, y) 半径 r 返回圆的绘制 path\n * @param x 圆心点 x\n * @param y 圆心点 y\n * @param r 圆的半径\n * @returns 圆的 path\n */\nexport function circlePath(x, y, r) {\n    var ret = [];\n    // ret.push('\\nM', x, y);\n    // ret.push('\\nm', -r, 0);\n    // ret.push('\\na', r, r, 0, 1, 0, r * 2, 0);\n    // ret.push('\\na', r, r, 0, 1, 0, -r * 2, 0);\n    var x0 = x - r;\n    var y0 = y;\n    ret.push('M', x0, y0);\n    ret.push('A', r, r, 0, 1, 0, x0 + 2 * r, y0);\n    ret.push('A', r, r, 0, 1, 0, x0, y0);\n    return ret.join(' ');\n}\n// inverse of the circlePath function, returns a circle object from an svg path\nexport function circleFromPath(path) {\n    var tokens = path.split(' ');\n    return { x: parseFloat(tokens[1]), y: parseFloat(tokens[2]), radius: -parseFloat(tokens[4]) };\n}\n/** returns a svg path of the intersection area of a bunch of circles */\nexport function intersectionAreaPath(circles) {\n    var stats = {};\n    intersectionArea(circles, stats);\n    var arcs = stats.arcs;\n    if (arcs.length === 0) {\n        return 'M 0 0';\n    }\n    else if (arcs.length == 1) {\n        var circle = arcs[0].circle;\n        return circlePath(circle.x, circle.y, circle.radius);\n    }\n    else {\n        // draw path around arcs\n        var ret = ['\\nM', arcs[0].p2.x, arcs[0].p2.y];\n        for (var i = 0; i < arcs.length; ++i) {\n            var arc = arcs[i], r = arc.circle.radius, wide = arc.width > r;\n            ret.push('\\nA', r, r, 0, wide ? 1 : 0, 1, arc.p1.x, arc.p1.y);\n        }\n        return ret.join(' ');\n    }\n}\n//# sourceMappingURL=diagram.js.map","import { bisect, conjugateGradient, nelderMead, norm2, scale, zeros, zerosM } from 'fmin';\nimport { circleCircleIntersection, circleOverlap, distance, intersectionArea } from './circleintersection';\n/** given a list of set objects, and their corresponding overlaps.\nupdates the (x, y, radius) attribute on each set such that their positions\nroughly correspond to the desired overlaps */\nexport function venn(areas, parameters) {\n    parameters = parameters || {};\n    parameters.maxIterations = parameters.maxIterations || 500;\n    var initialLayout = parameters.initialLayout || bestInitialLayout;\n    var loss = parameters.lossFunction || lossFunction;\n    // add in missing pairwise areas as having 0 size\n    areas = addMissingAreas(areas);\n    // initial layout is done greedily\n    var circles = initialLayout(areas, parameters);\n    // transform x/y coordinates to a vector to optimize\n    var initial = [], setids = [];\n    var setid;\n    for (setid in circles) {\n        // eslint-disable-next-line\n        if (circles.hasOwnProperty(setid)) {\n            initial.push(circles[setid].x);\n            initial.push(circles[setid].y);\n            setids.push(setid);\n        }\n    }\n    // optimize initial layout from our loss function\n    var solution = nelderMead(function (values) {\n        var current = {};\n        for (var i = 0; i < setids.length; ++i) {\n            var setid_1 = setids[i];\n            current[setid_1] = {\n                x: values[2 * i],\n                y: values[2 * i + 1],\n                radius: circles[setid_1].radius,\n                // size : circles[setid].size\n            };\n        }\n        return loss(current, areas);\n    }, initial, parameters);\n    // transform solution vector back to x/y points\n    var positions = solution.x;\n    for (var i = 0; i < setids.length; ++i) {\n        setid = setids[i];\n        circles[setid].x = positions[2 * i];\n        circles[setid].y = positions[2 * i + 1];\n    }\n    return circles;\n}\nvar SMALL = 1e-10;\n/** Returns the distance necessary for two circles of radius r1 + r2 to\nhave the overlap area 'overlap' */\nexport function distanceFromIntersectArea(r1, r2, overlap) {\n    // handle complete overlapped circles\n    if (Math.min(r1, r2) * Math.min(r1, r2) * Math.PI <= overlap + SMALL) {\n        return Math.abs(r1 - r2);\n    }\n    return bisect(function (distance) {\n        return circleOverlap(r1, r2, distance) - overlap;\n    }, 0, r1 + r2);\n}\n/** Missing pair-wise intersection area data can cause problems:\n treating as an unknown means that sets will be laid out overlapping,\n which isn't what people expect. To reflect that we want disjoint sets\n here, set the overlap to 0 for all missing pairwise set intersections */\nfunction addMissingAreas(areas) {\n    areas = areas.slice();\n    // two circle intersections that aren't defined\n    var ids = [], pairs = {};\n    var i, j, a, b;\n    for (i = 0; i < areas.length; ++i) {\n        var area = areas[i];\n        if (area.sets.length == 1) {\n            ids.push(area.sets[0]);\n        }\n        else if (area.sets.length == 2) {\n            a = area.sets[0];\n            b = area.sets[1];\n            // @ts-ignore\n            pairs[[a, b]] = true;\n            // @ts-ignore\n            pairs[[b, a]] = true;\n        }\n    }\n    ids.sort(function (a, b) {\n        return a > b ? 1 : -1;\n    });\n    for (i = 0; i < ids.length; ++i) {\n        a = ids[i];\n        for (j = i + 1; j < ids.length; ++j) {\n            b = ids[j];\n            // @ts-ignore\n            if (!([a, b] in pairs)) {\n                areas.push({ sets: [a, b], size: 0 });\n            }\n        }\n    }\n    return areas;\n}\n/// Returns two matrices, one of the euclidean distances between the sets\n/// and the other indicating if there are subset or disjoint set relationships\nexport function getDistanceMatrices(areas, sets, setids) {\n    // initialize an empty distance matrix between all the points\n    var distances = zerosM(sets.length, sets.length), constraints = zerosM(sets.length, sets.length);\n    // compute required distances between all the sets such that\n    // the areas match\n    areas\n        .filter(function (x) {\n        return x.sets.length == 2;\n    })\n        .map(function (current) {\n        var left = setids[current.sets[0]], right = setids[current.sets[1]], r1 = Math.sqrt(sets[left].size / Math.PI), r2 = Math.sqrt(sets[right].size / Math.PI), distance = distanceFromIntersectArea(r1, r2, current.size);\n        distances[left][right] = distances[right][left] = distance;\n        // also update constraints to indicate if its a subset or disjoint\n        // relationship\n        var c = 0;\n        if (current.size + 1e-10 >= Math.min(sets[left].size, sets[right].size)) {\n            c = 1;\n        }\n        else if (current.size <= 1e-10) {\n            c = -1;\n        }\n        constraints[left][right] = constraints[right][left] = c;\n    });\n    return { distances: distances, constraints: constraints };\n}\n/// computes the gradient and loss simulatenously for our constrained MDS optimizer\nfunction constrainedMDSGradient(x, fxprime, distances, constraints) {\n    var loss = 0, i;\n    for (i = 0; i < fxprime.length; ++i) {\n        fxprime[i] = 0;\n    }\n    for (i = 0; i < distances.length; ++i) {\n        var xi = x[2 * i], yi = x[2 * i + 1];\n        for (var j = i + 1; j < distances.length; ++j) {\n            var xj = x[2 * j], yj = x[2 * j + 1], dij = distances[i][j], constraint = constraints[i][j];\n            var squaredDistance = (xj - xi) * (xj - xi) + (yj - yi) * (yj - yi), distance_1 = Math.sqrt(squaredDistance), delta = squaredDistance - dij * dij;\n            if ((constraint > 0 && distance_1 <= dij) || (constraint < 0 && distance_1 >= dij)) {\n                continue;\n            }\n            loss += 2 * delta * delta;\n            fxprime[2 * i] += 4 * delta * (xi - xj);\n            fxprime[2 * i + 1] += 4 * delta * (yi - yj);\n            fxprime[2 * j] += 4 * delta * (xj - xi);\n            fxprime[2 * j + 1] += 4 * delta * (yj - yi);\n        }\n    }\n    return loss;\n}\n/// takes the best working variant of either constrained MDS or greedy\nexport function bestInitialLayout(areas, params) {\n    var initial = greedyLayout(areas, params);\n    var loss = params.lossFunction || lossFunction;\n    // greedylayout is sufficient for all 2/3 circle cases. try out\n    // constrained MDS for higher order problems, take its output\n    // if it outperforms. (greedy is aesthetically better on 2/3 circles\n    // since it axis aligns)\n    if (areas.length >= 8) {\n        var constrained = constrainedMDSLayout(areas, params), constrainedLoss = loss(constrained, areas), greedyLoss = loss(initial, areas);\n        if (constrainedLoss + 1e-8 < greedyLoss) {\n            initial = constrained;\n        }\n    }\n    return initial;\n}\n/// use the constrained MDS variant to generate an initial layout\nexport function constrainedMDSLayout(areas, params) {\n    params = params || {};\n    var restarts = params.restarts || 10;\n    // bidirectionally map sets to a rowid  (so we can create a matrix)\n    var sets = [], setids = {};\n    var i;\n    for (i = 0; i < areas.length; ++i) {\n        var area = areas[i];\n        if (area.sets.length == 1) {\n            setids[area.sets[0]] = sets.length;\n            sets.push(area);\n        }\n    }\n    var matrices = getDistanceMatrices(areas, sets, setids);\n    var distances = matrices.distances;\n    var constraints = matrices.constraints;\n    // keep distances bounded, things get messed up otherwise.\n    // TODO: proper preconditioner?\n    var norm = norm2(distances.map(norm2)) / distances.length;\n    distances = distances.map(function (row) {\n        return row.map(function (value) {\n            return value / norm;\n        });\n    });\n    var obj = function (x, fxprime) {\n        return constrainedMDSGradient(x, fxprime, distances, constraints);\n    };\n    var best, current;\n    for (i = 0; i < restarts; ++i) {\n        var initial = zeros(distances.length * 2).map(Math.random);\n        current = conjugateGradient(obj, initial, params);\n        if (!best || current.fx < best.fx) {\n            best = current;\n        }\n    }\n    var positions = best.x;\n    // translate rows back to (x,y,radius) coordinates\n    var circles = {};\n    for (i = 0; i < sets.length; ++i) {\n        var set = sets[i];\n        circles[set.sets[0]] = {\n            x: positions[2 * i] * norm,\n            y: positions[2 * i + 1] * norm,\n            radius: Math.sqrt(set.size / Math.PI),\n        };\n    }\n    if (params.history) {\n        for (i = 0; i < params.history.length; ++i) {\n            scale(params.history[i].x, norm);\n        }\n    }\n    return circles;\n}\n/** Lays out a Venn diagram greedily, going from most overlapped sets to\nleast overlapped, attempting to position each new set such that the\noverlapping areas to already positioned sets are basically right */\nexport function greedyLayout(areas, params) {\n    var loss = params && params.lossFunction ? params.lossFunction : lossFunction;\n    // define a circle for each set\n    var circles = {}, setOverlaps = {};\n    var set;\n    for (var i = 0; i < areas.length; ++i) {\n        var area = areas[i];\n        if (area.sets.length == 1) {\n            set = area.sets[0];\n            circles[set] = {\n                x: 1e10,\n                y: 1e10,\n                // rowid: circles.length, // fix to ->\n                rowid: Object.keys(circles).length,\n                size: area.size,\n                radius: Math.sqrt(area.size / Math.PI),\n            };\n            setOverlaps[set] = [];\n        }\n    }\n    areas = areas.filter(function (a) {\n        return a.sets.length == 2;\n    });\n    // map each set to a list of all the other sets that overlap it\n    for (var i = 0; i < areas.length; ++i) {\n        var current = areas[i];\n        // eslint-disable-next-line\n        var weight = current.hasOwnProperty('weight') ? current.weight : 1.0;\n        var left = current.sets[0], right = current.sets[1];\n        // completely overlapped circles shouldn't be positioned early here\n        if (current.size + SMALL >= Math.min(circles[left].size, circles[right].size)) {\n            weight = 0;\n        }\n        setOverlaps[left].push({ set: right, size: current.size, weight: weight });\n        setOverlaps[right].push({ set: left, size: current.size, weight: weight });\n    }\n    // get list of most overlapped sets\n    var mostOverlapped = [];\n    for (set in setOverlaps) {\n        // eslint-disable-next-line\n        if (setOverlaps.hasOwnProperty(set)) {\n            var size = 0;\n            for (var i = 0; i < setOverlaps[set].length; ++i) {\n                size += setOverlaps[set][i].size * setOverlaps[set][i].weight;\n            }\n            mostOverlapped.push({ set: set, size: size });\n        }\n    }\n    // sort by size desc\n    function sortOrder(a, b) {\n        return b.size - a.size;\n    }\n    mostOverlapped.sort(sortOrder);\n    // keep track of what sets have been laid out\n    var positioned = {};\n    function isPositioned(element) {\n        return element.set in positioned;\n    }\n    // adds a point to the output\n    function positionSet(point, index) {\n        circles[index].x = point.x;\n        circles[index].y = point.y;\n        positioned[index] = true;\n    }\n    // add most overlapped set at (0,0)\n    positionSet({ x: 0, y: 0 }, mostOverlapped[0].set);\n    // get distances between all points. TODO, necessary?\n    // answer: probably not\n    // var distances = venn.getDistanceMatrices(circles, areas).distances;\n    for (var i = 1; i < mostOverlapped.length; ++i) {\n        var setIndex = mostOverlapped[i].set, overlap = setOverlaps[setIndex].filter(isPositioned);\n        set = circles[setIndex];\n        overlap.sort(sortOrder);\n        if (overlap.length === 0) {\n            // this shouldn't happen anymore with addMissingAreas\n            throw 'ERROR: missing pairwise overlap information';\n        }\n        var points = [];\n        for (var j = 0; j < overlap.length; ++j) {\n            // get appropriate distance from most overlapped already added set\n            var p1 = circles[overlap[j].set], d1 = distanceFromIntersectArea(set.radius, p1.radius, overlap[j].size);\n            // sample positions at 90 degrees for maximum aesthetics\n            points.push({ x: p1.x + d1, y: p1.y });\n            points.push({ x: p1.x - d1, y: p1.y });\n            points.push({ y: p1.y + d1, x: p1.x });\n            points.push({ y: p1.y - d1, x: p1.x });\n            // if we have at least 2 overlaps, then figure out where the\n            // set should be positioned analytically and try those too\n            for (var k = j + 1; k < overlap.length; ++k) {\n                var p2 = circles[overlap[k].set], d2 = distanceFromIntersectArea(set.radius, p2.radius, overlap[k].size);\n                var extraPoints = circleCircleIntersection({ x: p1.x, y: p1.y, radius: d1 }, { x: p2.x, y: p2.y, radius: d2 });\n                for (var l = 0; l < extraPoints.length; ++l) {\n                    points.push(extraPoints[l]);\n                }\n            }\n        }\n        // we have some candidate positions for the set, examine loss\n        // at each position to figure out where to put it at\n        var bestLoss = 1e50, bestPoint = points[0];\n        for (var j = 0; j < points.length; ++j) {\n            circles[setIndex].x = points[j].x;\n            circles[setIndex].y = points[j].y;\n            var localLoss = loss(circles, areas);\n            if (localLoss < bestLoss) {\n                bestLoss = localLoss;\n                bestPoint = points[j];\n            }\n        }\n        positionSet(bestPoint, setIndex);\n    }\n    return circles;\n}\n/** Given a bunch of sets, and the desired overlaps between these sets - computes\nthe distance from the actual overlaps to the desired overlaps. Note that\nthis method ignores overlaps of more than 2 circles */\nexport function lossFunction(sets, overlaps) {\n    var output = 0;\n    function getCircles(indices) {\n        return indices.map(function (i) {\n            return sets[i];\n        });\n    }\n    for (var i = 0; i < overlaps.length; ++i) {\n        var area = overlaps[i];\n        var overlap = void 0;\n        if (area.sets.length == 1) {\n            continue;\n        }\n        else if (area.sets.length == 2) {\n            var left = sets[area.sets[0]], right = sets[area.sets[1]];\n            overlap = circleOverlap(left.radius, right.radius, distance(left, right));\n        }\n        else {\n            overlap = intersectionArea(getCircles(area.sets));\n        }\n        // eslint-disable-next-line\n        var weight = area.hasOwnProperty('weight') ? area.weight : 1.0;\n        output += weight * (overlap - area.size) * (overlap - area.size);\n    }\n    return output;\n}\n// orientates a bunch of circles to point in orientation\nfunction orientateCircles(circles, orientation, orientationOrder) {\n    if (orientationOrder === null) {\n        circles.sort(function (a, b) {\n            return b.radius - a.radius;\n        });\n    }\n    else {\n        circles.sort(orientationOrder);\n    }\n    var i;\n    // shift circles so largest circle is at (0, 0)\n    if (circles.length > 0) {\n        var largestX = circles[0].x, largestY = circles[0].y;\n        for (i = 0; i < circles.length; ++i) {\n            circles[i].x -= largestX;\n            circles[i].y -= largestY;\n        }\n    }\n    if (circles.length == 2) {\n        // if the second circle is a subset of the first, arrange so that\n        // it is off to one side. hack for https://github.com/benfred/venn.js/issues/120\n        var dist = distance(circles[0], circles[1]);\n        if (dist < Math.abs(circles[1].radius - circles[0].radius)) {\n            circles[1].x = circles[0].x + circles[0].radius - circles[1].radius - 1e-10;\n            circles[1].y = circles[0].y;\n        }\n    }\n    // rotate circles so that second largest is at an angle of 'orientation'\n    // from largest\n    if (circles.length > 1) {\n        var rotation = Math.atan2(circles[1].x, circles[1].y) - orientation;\n        var x = void 0, y = void 0;\n        var c = Math.cos(rotation), s = Math.sin(rotation);\n        for (i = 0; i < circles.length; ++i) {\n            x = circles[i].x;\n            y = circles[i].y;\n            circles[i].x = c * x - s * y;\n            circles[i].y = s * x + c * y;\n        }\n    }\n    // mirror solution if third solution is above plane specified by\n    // first two circles\n    if (circles.length > 2) {\n        var angle = Math.atan2(circles[2].x, circles[2].y) - orientation;\n        while (angle < 0) {\n            angle += 2 * Math.PI;\n        }\n        while (angle > 2 * Math.PI) {\n            angle -= 2 * Math.PI;\n        }\n        if (angle > Math.PI) {\n            var slope = circles[1].y / (1e-10 + circles[1].x);\n            for (i = 0; i < circles.length; ++i) {\n                var d = (circles[i].x + slope * circles[i].y) / (1 + slope * slope);\n                circles[i].x = 2 * d - circles[i].x;\n                circles[i].y = 2 * d * slope - circles[i].y;\n            }\n        }\n    }\n}\nexport function disjointCluster(circles) {\n    // union-find clustering to get disjoint sets\n    circles.map(function (circle) {\n        circle.parent = circle;\n    });\n    // path compression step in union find\n    function find(circle) {\n        if (circle.parent !== circle) {\n            circle.parent = find(circle.parent);\n        }\n        return circle.parent;\n    }\n    function union(x, y) {\n        var xRoot = find(x), yRoot = find(y);\n        xRoot.parent = yRoot;\n    }\n    // get the union of all overlapping sets\n    for (var i = 0; i < circles.length; ++i) {\n        for (var j = i + 1; j < circles.length; ++j) {\n            var maxDistance = circles[i].radius + circles[j].radius;\n            if (distance(circles[i], circles[j]) + 1e-10 < maxDistance) {\n                union(circles[j], circles[i]);\n            }\n        }\n    }\n    // find all the disjoint clusters and group them together\n    var disjointClusters = {};\n    var setid;\n    for (var i = 0; i < circles.length; ++i) {\n        setid = find(circles[i]).parent.setid;\n        if (!(setid in disjointClusters)) {\n            disjointClusters[setid] = [];\n        }\n        disjointClusters[setid].push(circles[i]);\n    }\n    // cleanup bookkeeping\n    circles.map(function (circle) {\n        delete circle.parent;\n    });\n    // return in more usable form\n    var ret = [];\n    for (setid in disjointClusters) {\n        // eslint-disable-next-line\n        if (disjointClusters.hasOwnProperty(setid)) {\n            ret.push(disjointClusters[setid]);\n        }\n    }\n    return ret;\n}\nfunction getBoundingBox(circles) {\n    var minMax = function (d) {\n        var hi = Math.max.apply(null, circles.map(function (c) {\n            return c[d] + c.radius;\n        })), lo = Math.min.apply(null, circles.map(function (c) {\n            return c[d] - c.radius;\n        }));\n        return { max: hi, min: lo };\n    };\n    return { xRange: minMax('x'), yRange: minMax('y') };\n}\nexport function normalizeSolution(solution, orientation, orientationOrder) {\n    if (orientation === null) {\n        orientation = Math.PI / 2;\n    }\n    // work with a list instead of a dictionary, and take a copy so we\n    // don't mutate input\n    var circles = [], i, setid;\n    for (setid in solution) {\n        // eslint-disable-next-line\n        if (solution.hasOwnProperty(setid)) {\n            var previous = solution[setid];\n            circles.push({ x: previous.x, y: previous.y, radius: previous.radius, setid: setid });\n        }\n    }\n    // get all the disjoint clusters\n    var clusters = disjointCluster(circles);\n    // orientate all disjoint sets, get sizes\n    for (i = 0; i < clusters.length; ++i) {\n        orientateCircles(clusters[i], orientation, orientationOrder);\n        var bounds = getBoundingBox(clusters[i]);\n        clusters[i].size = (bounds.xRange.max - bounds.xRange.min) * (bounds.yRange.max - bounds.yRange.min);\n        clusters[i].bounds = bounds;\n    }\n    clusters.sort(function (a, b) {\n        return b.size - a.size;\n    });\n    // orientate the largest at 0,0, and get the bounds\n    circles = clusters[0];\n    // @ts-ignore fixme 从逻辑上看似乎是不对的，后续看看\n    var returnBounds = circles.bounds;\n    var spacing = (returnBounds.xRange.max - returnBounds.xRange.min) / 50;\n    function addCluster(cluster, right, bottom) {\n        if (!cluster)\n            return;\n        var bounds = cluster.bounds;\n        var xOffset, yOffset, centreing;\n        if (right) {\n            xOffset = returnBounds.xRange.max - bounds.xRange.min + spacing;\n        }\n        else {\n            xOffset = returnBounds.xRange.max - bounds.xRange.max;\n            centreing = (bounds.xRange.max - bounds.xRange.min) / 2 - (returnBounds.xRange.max - returnBounds.xRange.min) / 2;\n            if (centreing < 0)\n                xOffset += centreing;\n        }\n        if (bottom) {\n            yOffset = returnBounds.yRange.max - bounds.yRange.min + spacing;\n        }\n        else {\n            yOffset = returnBounds.yRange.max - bounds.yRange.max;\n            centreing = (bounds.yRange.max - bounds.yRange.min) / 2 - (returnBounds.yRange.max - returnBounds.yRange.min) / 2;\n            if (centreing < 0)\n                yOffset += centreing;\n        }\n        for (var j = 0; j < cluster.length; ++j) {\n            cluster[j].x += xOffset;\n            cluster[j].y += yOffset;\n            circles.push(cluster[j]);\n        }\n    }\n    var index = 1;\n    while (index < clusters.length) {\n        addCluster(clusters[index], true, false);\n        addCluster(clusters[index + 1], false, true);\n        addCluster(clusters[index + 2], true, true);\n        index += 3;\n        // have one cluster (in top left). lay out next three relative\n        // to it in a grid\n        returnBounds = getBoundingBox(circles);\n    }\n    // convert back to solution form\n    var ret = {};\n    for (i = 0; i < circles.length; ++i) {\n        ret[circles[i].setid] = circles[i];\n    }\n    return ret;\n}\n/** Scales a solution from venn.venn or venn.greedyLayout such that it fits in\na rectangle of width/height - with padding around the borders. also\ncenters the diagram in the available space at the same time */\nexport function scaleSolution(solution, width, height, padding) {\n    var circles = [], setids = [];\n    for (var setid in solution) {\n        // eslint-disable-next-line\n        if (solution.hasOwnProperty(setid)) {\n            setids.push(setid);\n            circles.push(solution[setid]);\n        }\n    }\n    width -= 2 * padding;\n    height -= 2 * padding;\n    var bounds = getBoundingBox(circles), xRange = bounds.xRange, yRange = bounds.yRange;\n    if (xRange.max == xRange.min || yRange.max == yRange.min) {\n        console.log('not scaling solution: zero size detected');\n        return solution;\n    }\n    var xScaling = width / (xRange.max - xRange.min), yScaling = height / (yRange.max - yRange.min), scaling = Math.min(yScaling, xScaling), \n    // while we're at it, center the diagram too\n    xOffset = (width - (xRange.max - xRange.min) * scaling) / 2, yOffset = (height - (yRange.max - yRange.min) * scaling) / 2;\n    var scaled = {};\n    for (var i = 0; i < circles.length; ++i) {\n        var circle = circles[i];\n        scaled[setids[i]] = {\n            radius: scaling * circle.radius,\n            x: padding + xOffset + (circle.x - xRange.min) * scaling,\n            y: padding + yOffset + (circle.y - yRange.min) * scaling,\n        };\n    }\n    return scaled;\n}\n//# sourceMappingURL=layout.js.map","/** finds the zeros of a function, given two starting points (which must\n * have opposite signs */\nexport function bisect(f, a, b, parameters) {\n    parameters = parameters || {};\n    var maxIterations = parameters.maxIterations || 100,\n        tolerance = parameters.tolerance || 1e-10,\n        fA = f(a),\n        fB = f(b),\n        delta = b - a;\n\n    if (fA * fB > 0) {\n        throw \"Initial bisect points must have opposite signs\";\n    }\n\n    if (fA === 0) return a;\n    if (fB === 0) return b;\n\n    for (var i = 0; i < maxIterations; ++i) {\n        delta /= 2;\n        var mid = a + delta,\n            fMid = f(mid);\n\n        if (fMid * fA >= 0) {\n            a = mid;\n        }\n\n        if ((Math.abs(delta) < tolerance) || (fMid === 0)) {\n            return mid;\n        }\n    }\n    return a + delta;\n}\n","import { __assign } from \"tslib\";\nimport { assign, memoize } from '@antv/util';\nimport { LEVEL, log } from '../../utils';\nimport { blend } from '../../utils/color/blend';\nimport { ID_FIELD, PATH_FIELD } from './constant';\nimport { computeTextCentres, intersectionAreaPath } from './layout/diagram';\nimport { scaleSolution, venn } from './layout/layout';\n/**\n * 获取 颜色映射\n * @usage colorMap.get(id) => color\n *\n * @returns Map<string, string>\n */\nexport var getColorMap = memoize((function (colorPalette, data, blendMode, setsField) {\n    var colorMap = new Map();\n    var colorPaletteLen = colorPalette.length;\n    data.forEach(function (d, idx) {\n        if (d[setsField].length === 1) {\n            colorMap.set(d[ID_FIELD], colorPalette[(idx + colorPaletteLen) % colorPaletteLen]);\n        }\n        else {\n            /** 一般都是可以获取到颜色的，如果不正确 就是输入了非法数据 */\n            var colorArr = d[setsField].map(function (id) { return colorMap.get(id); });\n            colorMap.set(d[ID_FIELD], colorArr.slice(1).reduce(function (a, b) { return blend(a, b, blendMode); }, colorArr[0]));\n        }\n    });\n    return colorMap;\n}), function () {\n    var params = [];\n    for (var _i = 0; _i < arguments.length; _i++) {\n        params[_i] = arguments[_i];\n    }\n    return JSON.stringify(params);\n});\n/**\n * 给韦恩图数据进行布局\n *\n * @param data\n * @param width\n * @param height\n * @param padding\n * @returns 韦恩图数据\n */\nexport function layoutVennData(options, width, height, padding) {\n    if (padding === void 0) { padding = 0; }\n    var data = options.data, setsField = options.setsField, sizeField = options.sizeField;\n    // 处理空数据的情况\n    if (data.length === 0) {\n        log(LEVEL.WARN, false, 'warn: %s', '数据不能为空');\n        return [];\n    }\n    var vennData = data.map(function (d) {\n        var _a;\n        return (__assign(__assign({}, d), (_a = { sets: d[setsField] || [], size: d[sizeField] }, _a[PATH_FIELD] = '', _a[ID_FIELD] = '', _a)));\n    });\n    // 1. 进行排序，避免图形元素遮挡\n    vennData.sort(function (a, b) { return a.sets.length - b.sets.length; });\n    // todo 2. 可以在这里处理下非法数据输入，避免直接 crash\n    var solution = venn(vennData);\n    var circles = scaleSolution(solution, width, height, padding);\n    var textCenters = computeTextCentres(circles, vennData);\n    vennData.forEach(function (row) {\n        var sets = row.sets;\n        var id = sets.join(',');\n        row[ID_FIELD] = id;\n        // 保留 vennText 布局方法\n        var setCircles = sets.map(function (set) { return circles[set]; });\n        var path = intersectionAreaPath(setCircles);\n        if (!/[zZ]$/.test(path)) {\n            path += ' Z';\n        }\n        row[PATH_FIELD] = path;\n        var center = textCenters[id] || { x: 0, y: 0 };\n        assign(row, center);\n    });\n    return vennData;\n}\n/**\n * 检查是否存在 非法元素\n * @param legalArr 合法集合：['A', 'B']\n * @param testArr 检查集合：['A', 'B', 'C'] or ['A', 'C']（存在非法 'C'）\n * @return boolean\n */\nexport function islegalSets(legalArr, testArr) {\n    for (var i = 0; i < testArr.length; i++) {\n        if (!legalArr.includes(testArr[i])) {\n            return false;\n        }\n    }\n    return true;\n}\n//# sourceMappingURL=utils.js.map","import { __assign, __rest } from \"tslib\";\nimport { deepMix, get, isArray, isEqual } from '@antv/util';\nimport { animation, interaction, scale, theme, tooltip } from '../../adaptor/common';\nimport { schema as schemaGeometry } from '../../adaptor/geometries';\nimport { deepAssign, findGeometry, flow, getAdjustAppendPadding, LEVEL, log, normalPadding, resolveAllPadding, transformLabel, } from '../../utils';\nimport { ID_FIELD } from './constant';\nimport './interactions';\nimport './label';\nimport './shape';\nimport { getColorMap, islegalSets, layoutVennData } from './utils';\n/** 图例默认预留空间 */\nexport var LEGEND_SPACE = 40;\n/**\n * 获取 color 映射\n */\nfunction colorMap(params, data, colorPalette) {\n    var chart = params.chart, options = params.options;\n    var blendMode = options.blendMode, setsField = options.setsField;\n    var _a = chart.getTheme(), colors10 = _a.colors10, colors20 = _a.colors20;\n    var palette = colorPalette;\n    if (!isArray(palette)) {\n        palette = data.filter(function (d) { return d[setsField].length === 1; }).length <= 10 ? colors10 : colors20;\n    }\n    var map = getColorMap(palette, data, blendMode, setsField);\n    return function (id) { return map.get(id) || palette[0]; };\n}\n/**\n * color options 转换\n */\nfunction transformColor(params, data) {\n    var options = params.options;\n    var color = options.color;\n    if (typeof color !== 'function') {\n        var colorPalette = typeof color === 'string' ? [color] : color;\n        var map_1 = colorMap(params, data, colorPalette);\n        return function (datum) { return map_1(datum[ID_FIELD]); };\n    }\n    return color;\n}\n/**\n * 处理 padding\n */\nfunction padding(params) {\n    var chart = params.chart, options = params.options;\n    var legend = options.legend, appendPadding = options.appendPadding, padding = options.padding;\n    // 处理 legend 的位置. 默认预留 40px, 业务上可以通过 appendPadding 增加\n    var tempPadding = normalPadding(appendPadding);\n    if (legend !== false) {\n        tempPadding = getAdjustAppendPadding(appendPadding, get(legend, 'position'), LEGEND_SPACE);\n    }\n    chart.appendPadding = resolveAllPadding([tempPadding, padding]);\n    return params;\n}\n/**\n * 处理非法数据\n * @param params\n */\nfunction data(params) {\n    var options = params.options;\n    /* 如遇到 交集 中存在 非法元素 的情况，就过滤掉\n     * 如：\n     * data = [\n     *   { sets: ['A'], size: 3 }, // 集合\n     *   { sets: ['B'], size: 4 }, // 集合\n     *   { sets: ['A', 'B'], size: 2 }, // 交集\n     *   { sets: ['A', 'B', 'C'], size: 2 }, // 交集 (存在非法 C，过滤该条数据)\n     *   ...\n     * ]\n     */\n    var data = options['data'];\n    if (!data) {\n        log(LEVEL.WARN, false, 'warn: %s', '数据不能为空');\n        data = [];\n    }\n    // 合法元素的集合：['A', 'B']\n    var currSets = data.filter(function (datum) { return datum.sets.length === 1; }).map(function (datum) { return datum.sets[0]; });\n    // 过滤 data\n    var filterSets = data.filter(function (datum) {\n        var sets = datum.sets;\n        // 存在非法元素，就过滤这条数据\n        return islegalSets(currSets, sets);\n    });\n    if (!isEqual(filterSets, data))\n        log(LEVEL.WARN, false, 'warn: %s', '交集中不能出现不存在的集合, 请输入合法数据');\n    return deepMix({}, params, {\n        options: {\n            data: filterSets,\n        },\n    });\n}\n/**\n * geometry 处理\n * @param params\n */\nfunction geometry(params) {\n    var chart = params.chart, options = params.options;\n    var pointStyle = options.pointStyle, setsField = options.setsField, sizeField = options.sizeField;\n    // 获取容器大小\n    var _a = normalPadding(chart.appendPadding), t = _a[0], r = _a[1], b = _a[2], l = _a[3];\n    // 处理 legend 的位置. 默认预留 40px, 业务上可以通过 appendPadding 增加\n    var customInfo = { offsetX: l, offsetY: t };\n    // coordinateBBox + appendPadding = viewBBox, 不需要再计算 appendPadding 部分，因此直接使用 viewBBox\n    var _b = chart.viewBBox, width = _b.width, height = _b.height;\n    // 处理padding输入不合理的情况， w 和 h 不能为负数\n    var vennData = layoutVennData(options, Math.max(width - (r + l), 0), Math.max(height - (t + b), 0), 0);\n    chart.data(vennData);\n    var ext = schemaGeometry(deepAssign({}, params, {\n        options: {\n            xField: 'x',\n            yField: 'y',\n            sizeField: sizeField,\n            seriesField: ID_FIELD,\n            rawFields: [setsField, sizeField],\n            schema: {\n                shape: 'venn',\n                style: pointStyle,\n            },\n        },\n    })).ext;\n    var geometry = ext.geometry;\n    geometry.customInfo(customInfo);\n    var colorOptions = transformColor(params, vennData);\n    // 韦恩图试点, color 通道只能映射一个字段. 通过外部查找获取 datum\n    if (typeof colorOptions === 'function') {\n        geometry.color(ID_FIELD, function (id) {\n            var datum = vennData.find(function (d) { return d[ID_FIELD] === id; });\n            var defaultColor = colorMap(params, vennData)(id);\n            return colorOptions(datum, defaultColor);\n        });\n    }\n    return params;\n}\n/**\n * 处理 label\n * @param params\n */\nfunction label(params) {\n    var chart = params.chart, options = params.options;\n    var label = options.label;\n    // 获取容器大小\n    var _a = normalPadding(chart.appendPadding), t = _a[0], l = _a[3];\n    // 传入 label 布局函数所需的 自定义参数\n    var customLabelInfo = { offsetX: l, offsetY: t };\n    var geometry = findGeometry(chart, 'schema');\n    if (!label) {\n        geometry.label(false);\n    }\n    else {\n        var callback = label.callback, cfg = __rest(label, [\"callback\"]);\n        geometry.label({\n            fields: ['id'],\n            callback: callback,\n            cfg: deepMix({}, transformLabel(cfg), {\n                // 使用 G2 的 自定义label 修改位置\n                type: 'venn',\n                customLabelInfo: customLabelInfo,\n            }),\n        });\n    }\n    return params;\n}\n/**\n * legend 配置\n * @param params\n */\nexport function legend(params) {\n    var chart = params.chart, options = params.options;\n    var legend = options.legend, sizeField = options.sizeField;\n    chart.legend(ID_FIELD, legend);\n    // 强制不开启 连续图例\n    chart.legend(sizeField, false);\n    return params;\n}\n/**\n * 默认关闭坐标轴\n * @param params\n */\nexport function axis(params) {\n    var chart = params.chart;\n    chart.axis(false);\n    return params;\n}\n/**\n * 韦恩图 interaction 交互适配器\n */\nfunction vennInteraction(params) {\n    var options = params.options, chart = params.chart;\n    var interactions = options.interactions;\n    if (interactions) {\n        var MAP_1 = {\n            'legend-active': 'venn-legend-active',\n            'legend-highlight': 'venn-legend-highlight',\n        };\n        interaction(deepAssign({}, params, {\n            options: {\n                interactions: interactions.map(function (i) { return (__assign(__assign({}, i), { type: MAP_1[i.type] || i.type })); }),\n            },\n        }));\n    }\n    chart.removeInteraction('legend-active');\n    chart.removeInteraction('legend-highlight');\n    return params;\n}\n/**\n * 图适配器\n * @param chart\n * @param options\n */\nexport function adaptor(params) {\n    // flow 的方式处理所有的配置到 G2 API\n    return flow(padding, theme, data, geometry, label, scale({}), legend, axis, tooltip, vennInteraction, animation\n    // ... 其他的 adaptor flow\n    )(params);\n}\n//# sourceMappingURL=adaptor.js.map","import { __extends } from \"tslib\";\nimport { Plot } from '../../core/plot';\nimport { adaptor } from './adaptor';\nimport { DEFAULT_OPTIONS } from './constant';\n/**\n * 这个是一个图表开发的 模板代码！\n */\nvar Venn = /** @class */ (function (_super) {\n    __extends(Venn, _super);\n    function Venn() {\n        var _this = _super !== null && _super.apply(this, arguments) || this;\n        /** 图表类型 */\n        _this.type = 'venn';\n        return _this;\n    }\n    Venn.getDefaultOptions = function () {\n        return DEFAULT_OPTIONS;\n    };\n    /**\n     * 获取 韦恩图 默认配置\n     */\n    Venn.prototype.getDefaultOptions = function () {\n        return Venn.getDefaultOptions();\n    };\n    /**\n     * 获取适配器\n     */\n    Venn.prototype.getSchemaAdaptor = function () {\n        return adaptor;\n    };\n    /**\n     * 覆写父类的方法\n     */\n    Venn.prototype.triggerResize = function () {\n        if (!this.chart.destroyed) {\n            // 首先自适应容器的宽高\n            this.chart.forceFit(); // g2 内部执行 changeSize，changeSize 中执行 render(true)\n            this.chart.clear();\n            this.execAdaptor(); // 核心：宽高更新之后计算布局\n            // 渲染\n            this.chart.render(true);\n        }\n    };\n    return Venn;\n}(Plot));\nexport { Venn };\n//# sourceMappingURL=index.js.map","import { Plot } from '../../core/plot';\nimport { deepAssign } from '../../utils';\nexport var X_FIELD = 'x';\nexport var VIOLIN_Y_FIELD = 'violinY';\nexport var VIOLIN_SIZE_FIELD = 'violinSize';\nexport var MIN_MAX_FIELD = 'minMax';\nexport var QUANTILE_FIELD = 'quantile';\nexport var MEDIAN_FIELD = 'median';\nexport var VIOLIN_VIEW_ID = 'violin_view';\nexport var MIN_MAX_VIEW_ID = 'min_max_view';\nexport var QUANTILE_VIEW_ID = 'quantile_view';\nexport var MEDIAN_VIEW_ID = 'median_view';\nexport var DEFAULT_OPTIONS = deepAssign({}, Plot.getDefaultOptions(), {\n    // 多 view 组成，一定要设置 view padding 同步\n    syncViewPadding: true,\n    // 默认核函数\n    kde: {\n        type: 'triangular',\n        sampleSize: 32,\n        width: 3,\n    },\n    // 默认小提琴轮廓样式\n    violinStyle: {\n        lineWidth: 1,\n        fillOpacity: 0.3,\n        strokeOpacity: 0.75,\n    },\n    // 坐标轴\n    xAxis: {\n        grid: {\n            line: null,\n        },\n        tickLine: {\n            alignTick: false,\n        },\n    },\n    yAxis: {\n        grid: {\n            line: {\n                style: {\n                    lineWidth: 0.5,\n                    lineDash: [4, 4],\n                },\n            },\n        },\n    },\n    // 图例\n    legend: {\n        position: 'top-left',\n    },\n    // Tooltip\n    tooltip: {\n        showMarkers: false,\n    },\n    // 默认区域交互\n    // interactions: [{ type: 'active-region' }],\n});\n//# sourceMappingURL=constant.js.map","'use strict';\n\nvar self = module.exports;\n\nmodule.exports.isNumber = function (x) {\n  return (typeof x === 'number');\n};\n\nmodule.exports.findMin = function (arr) {\n  if (arr.length === 0) {\n    return Infinity;\n  }\n\n  var curr = arr[0];\n  for (var i = 1; i < arr.length; i++) {\n    curr = Math.min(curr, arr[i]);\n  }\n  return curr;\n};\n\nmodule.exports.findMax = function (arr) {\n  if (arr.length === 0) {\n    return -Infinity;\n  }\n\n  var curr = arr[0];\n  for (var i = 1; i < arr.length; i++) {\n    curr = Math.max(curr, arr[i]);\n  }\n  return curr;\n};\n\nmodule.exports.findMinMulti = function (arr) {\n  var curr = self.findMin(arr[0]);\n  for (var i = 1; i < arr.length; i++) {\n    curr = Math.min(curr, self.findMin(arr[i]));\n  }\n  return curr;\n};\n\nmodule.exports.findMaxMulti = function (arr) {\n  var curr = self.findMax(arr[0]);\n  for (var i = 1; i < arr.length; i++) {\n    curr = Math.max(curr, self.findMax(arr[i]));\n  }\n  return curr;\n};\n\nmodule.exports.inside = function (min, max, x) {\n  return (min <= x) && (x <= max);\n};\n","'use strict';\n\nvar DEFAULT_SIZE = 50;\nvar DEFAULT_WIDTH = 2;\n\nvar LN_2 = Math.log(2);\nvar self = module.exports;\n\nvar helper = require('./helper');\n\n// Triangle\nfunction kernel(x) {\n  return 1 - Math.abs(x);\n}\n\n/**\n * Get min and max value for the pdf, covering all arr data range while respecting options' data\n * @param arr\n * @param options\n * @returns {*}\n */\nmodule.exports.getUnifiedMinMax = function (arr, options) {\n  return self.getUnifiedMinMaxMulti([arr], options);\n};\n\nmodule.exports.getUnifiedMinMaxMulti = function (arrMulti, options) {\n  options = options || {};\n\n  var relaxMin = false;\n  var relaxMax = false;\n\n  var width = helper.isNumber(options.width) ? options.width : DEFAULT_WIDTH;\n  var size = helper.isNumber(options.size) ? options.size : DEFAULT_SIZE;\n  var min = helper.isNumber(options.min) ? options.min : (relaxMin = true, helper.findMinMulti(arrMulti));\n  var max = helper.isNumber(options.max) ? options.max : (relaxMax = true, helper.findMaxMulti(arrMulti));\n\n  var range = max - min;\n  var step = range / (size - 1);\n\n  // Relax?\n  if (relaxMin) {\n    min = min - 2 * width * step;\n  }\n  if (relaxMax) {\n    max = max + 2 * width * step;\n  }\n\n  return {\n    min: min,\n    max: max\n  };\n};\n\nmodule.exports.create = function (arr, options) {\n  options = options || {};\n\n  if (!arr || (arr.length === 0)) {\n    return [];\n  }\n\n  var size = helper.isNumber(options.size) ? options.size : DEFAULT_SIZE;\n  var width = helper.isNumber(options.width) ? options.width : DEFAULT_WIDTH;\n  var normalizedMinMax = self.getUnifiedMinMax(arr, {\n    size: size,\n    width: width,\n    min: options.min,\n    max: options.max\n  });\n\n  var min = normalizedMinMax.min;\n  var max = normalizedMinMax.max;\n\n  var range = max - min;\n  var step = range / (size - 1);\n  if (range === 0) {\n    // Special case...\n    return [{x: min, y: 1}];\n  }\n\n  // Good to go\n\n  var buckets = [];\n  for (var i = 0; i < size; i++) {\n    buckets.push({\n      x: min + i * step,\n      y: 0\n    });\n  }\n\n  var xToBucket = function (x) {\n    return Math.floor((x - min) / step);\n  };\n\n  var partialArea = generatePartialAreas(kernel, width);\n  var fullArea = partialArea[width];\n  var c = partialArea[width-1] - partialArea[width-2];\n\n  var initalValue = 0;\n  arr.forEach(function (x) {\n    var bucket = xToBucket(x);\n\n    // Totally outside?\n    if ((bucket + width < 0) || (bucket - width >= buckets.length)) {\n      return;\n    }\n\n    var start = Math.max(bucket - width, 0);\n    var mid = bucket;\n    var end = Math.min(bucket + width, buckets.length - 1);\n\n    var leftBlockCount = start - (bucket - width);\n    var rightBlockCount = (bucket + width) - end;\n    var spilledAreaLeft = partialArea[-width-1 + leftBlockCount] || 0;\n    var spilledAreaRight = partialArea[-width-1 + rightBlockCount] || 0;\n    var weight = fullArea / (fullArea - spilledAreaLeft - spilledAreaRight);\n\n    if (leftBlockCount > 0) {\n      initalValue += weight * (leftBlockCount - 1) * c;\n    }\n\n    // Add grads\n    var startGradPos = Math.max(0, bucket-width+1);\n    if (helper.inside(0, buckets.length-1, startGradPos)) {\n      buckets[startGradPos].y += weight * 1 * c;\n    }\n    if (helper.inside(0, buckets.length-1, mid + 1)) {\n      buckets[mid + 1].y -= weight * 2 * c;\n    }\n    if (helper.inside(0, buckets.length-1, end + 1)) {\n      buckets[end + 1].y += weight * 1 * c;\n    }\n  });\n\n  var accumulator = initalValue;\n  var gradAccumulator = 0;\n  var area = 0;\n  buckets.forEach(function (bucket) {\n    gradAccumulator += bucket.y;\n    accumulator += gradAccumulator;\n\n    bucket.y = accumulator;\n    area += accumulator;\n  });\n\n  // Normalize\n  if (area > 0) {\n    buckets.forEach(function (bucket) {\n      bucket.y /= area;\n    });\n  }\n\n  return buckets;\n};\n\nfunction generatePartialAreas(kernel, width) {\n  var partialAreas = {};\n\n  var accumulator = 0;\n  for (var i = -width; i <= width; i++) {\n    accumulator += kernel(i/width);\n    partialAreas[i] = accumulator;\n  }\n\n  return partialAreas;\n}\n\nmodule.exports.getExpectedValueFromPdf = function (pdf) {\n  if (!pdf || (pdf.length === 0)) {\n    return undefined;\n  }\n\n  var expected = 0;\n\n  pdf.forEach(function (obj) {\n    expected += obj.x * obj.y;\n  });\n\n  return expected;\n};\n\nmodule.exports.getXWithLeftTailArea = function (pdf, area) {\n  if (!pdf || (pdf.length === 0)) {\n    return undefined;\n  }\n\n  var accumulator = 0;\n  var last = 0;\n  for (var i = 0; i < pdf.length; i++) {\n    last = i;\n    accumulator += pdf[i].y;\n\n    if (accumulator >= area) {\n      break;\n    }\n  }\n\n  return pdf[last].x;\n};\n\nmodule.exports.getPerplexity = function (pdf) {\n  if (!pdf || (pdf.length === 0)) {\n    return undefined;\n  }\n\n  var entropy = 0;\n  pdf.forEach(function (obj) {\n    var ln = Math.log(obj.y);\n\n    if (isFinite(ln)) {\n      entropy += obj.y * ln;\n    }\n  });\n  entropy = -entropy / LN_2;\n\n  return Math.pow(2, entropy);\n};\n","// from https://github.com/simple-statistics\n/**\n * This is the internal implementation of quantiles: when you know\n * that the order is sorted, you don't need to re-sort it, and the computations\n * are faster.\n *\n * @param {Array<number>} x sample of one or more data points\n * @param {number} p desired quantile: a number between 0 to 1, inclusive\n * @returns {number} quantile value\n * @throws {Error} if p ix outside of the range from 0 to 1\n * @throws {Error} if x is empty\n * @example\n * quantileSorted([3, 6, 7, 8, 8, 9, 10, 13, 15, 16, 20], 0.5); // => 9\n */\nexport function quantileSorted(x, p) {\n    var idx = x.length * p;\n    if (x.length === 0) {\n        throw new Error('quantile requires at least one data point.');\n    }\n    else if (p < 0 || p > 1) {\n        throw new Error('quantiles must be between 0 and 1');\n    }\n    else if (p === 1) {\n        // If p is 1, directly return the last element\n        return x[x.length - 1];\n    }\n    else if (p === 0) {\n        // If p is 0, directly return the first element\n        return x[0];\n    }\n    else if (idx % 1 !== 0) {\n        // If p is not integer, return the next element in array\n        return x[Math.ceil(idx) - 1];\n    }\n    else if (x.length % 2 === 0) {\n        // If the list has even-length, we'll take the average of this number\n        // and the next value, if there is one\n        return (x[idx - 1] + x[idx]) / 2;\n    }\n    else {\n        // Finally, in the simple case of an integer value\n        // with an odd-length list, return the x value at the index.\n        return x[idx];\n    }\n}\n/**\n * 交换数组位置\n * @param arr T[]\n * @param i number\n * @param j number\n */\nexport function swap(arr, i, j) {\n    var tmp = arr[i];\n    arr[i] = arr[j];\n    arr[j] = tmp;\n}\n/**\n * Rearrange items in `arr` so that all items in `[left, k]` range are the smallest.\n * The `k`-th element will have the `(k - left + 1)`-th smallest value in `[left, right]`.\n *\n * Implements Floyd-Rivest selection algorithm https://en.wikipedia.org/wiki/Floyd-Rivest_algorithm\n *\n * @param {Array<number>} arr input array\n * @param {number} k pivot index\n * @param {number} [left] left index\n * @param {number} [right] right index\n * @returns {void} mutates input array\n * @example\n * var arr = [65, 28, 59, 33, 21, 56, 22, 95, 50, 12, 90, 53, 28, 77, 39];\n * quickselect(arr, 8);\n * // = [39, 28, 28, 33, 21, 12, 22, 50, 53, 56, 59, 65, 90, 77, 95]\n */\nexport function quickselect(arr, k, left, right) {\n    left = left || 0;\n    right = right || arr.length - 1;\n    while (right > left) {\n        // 600 and 0.5 are arbitrary constants chosen in the original paper to minimize execution time\n        if (right - left > 600) {\n            var n = right - left + 1;\n            var m = k - left + 1;\n            var z = Math.log(n);\n            var s = 0.5 * Math.exp((2 * z) / 3);\n            var sd = 0.5 * Math.sqrt((z * s * (n - s)) / n);\n            if (m - n / 2 < 0)\n                sd *= -1;\n            var newLeft = Math.max(left, Math.floor(k - (m * s) / n + sd));\n            var newRight = Math.min(right, Math.floor(k + ((n - m) * s) / n + sd));\n            quickselect(arr, k, newLeft, newRight);\n        }\n        var t = arr[k];\n        var i = left;\n        var j = right;\n        swap(arr, left, k);\n        if (arr[right] > t)\n            swap(arr, left, right);\n        while (i < j) {\n            swap(arr, i, j);\n            i++;\n            j--;\n            while (arr[i] < t)\n                i++;\n            while (arr[j] > t)\n                j--;\n        }\n        if (arr[left] === t)\n            swap(arr, left, j);\n        else {\n            j++;\n            swap(arr, j, right);\n        }\n        if (j <= k)\n            left = j + 1;\n        if (k <= j)\n            right = j - 1;\n    }\n}\nfunction quantile(x, p) {\n    var copy = x.slice();\n    if (Array.isArray(p)) {\n        // rearrange elements so that each element corresponding to a requested\n        // quantile is on a place it would be if the array was fully sorted\n        multiQuantileSelect(copy, p);\n        // Initialize the result array\n        var results = [];\n        // For each requested quantile\n        for (var i = 0; i < p.length; i++) {\n            results[i] = quantileSorted(copy, p[i]);\n        }\n        return results;\n    }\n    else {\n        var idx = quantileIndex(copy.length, p);\n        quantileSelect(copy, idx, 0, copy.length - 1);\n        return quantileSorted(copy, p);\n    }\n}\nfunction quantileSelect(arr, k, left, right) {\n    if (k % 1 === 0) {\n        quickselect(arr, k, left, right);\n    }\n    else {\n        k = Math.floor(k);\n        quickselect(arr, k, left, right);\n        quickselect(arr, k + 1, k + 1, right);\n    }\n}\nfunction multiQuantileSelect(arr, p) {\n    var indices = [0];\n    for (var i = 0; i < p.length; i++) {\n        indices.push(quantileIndex(arr.length, p[i]));\n    }\n    indices.push(arr.length - 1);\n    indices.sort(compare);\n    var stack = [0, indices.length - 1];\n    while (stack.length) {\n        var r = Math.ceil(stack.pop());\n        var l = Math.floor(stack.pop());\n        if (r - l <= 1)\n            continue;\n        var m = Math.floor((l + r) / 2);\n        quantileSelect(arr, indices[m], Math.floor(indices[l]), Math.ceil(indices[r]));\n        stack.push(l, m, m, r);\n    }\n}\nfunction compare(a, b) {\n    return a - b;\n}\nfunction quantileIndex(len, p) {\n    var idx = len * p;\n    if (p === 1) {\n        // If p is 1, directly return the last index\n        return len - 1;\n    }\n    else if (p === 0) {\n        // If p is 0, directly return the first index\n        return 0;\n    }\n    else if (idx % 1 !== 0) {\n        // If index is not integer, return the next index in array\n        return Math.ceil(idx) - 1;\n    }\n    else if (len % 2 === 0) {\n        // If the list has even-length, we'll return the middle of two indices\n        // around quantile to indicate that we need an average value of the two\n        return idx - 0.5;\n    }\n    else {\n        // Finally, in the simple case of an integer index\n        // with an odd-length list, return the index\n        return idx;\n    }\n}\nexport { quantile };\n//# sourceMappingURL=quantile.js.map","import { __assign } from \"tslib\";\nimport { groupBy, max, min } from '@antv/util';\nimport pdf from 'pdfast';\nimport { quantile } from '../../utils/transform/quantile';\nexport var toBoxValue = function (values) {\n    return {\n        low: min(values),\n        high: max(values),\n        q1: quantile(values, 0.25),\n        q3: quantile(values, 0.75),\n        median: quantile(values, [0.5]),\n        minMax: [min(values), max(values)],\n        quantile: [quantile(values, 0.25), quantile(values, 0.75)],\n    };\n};\nexport var toViolinValue = function (values, pdfOptions) {\n    var pdfResults = pdf.create(values, pdfOptions);\n    return {\n        violinSize: pdfResults.map(function (result) { return result.y; }),\n        violinY: pdfResults.map(function (result) { return result.x; }),\n    };\n};\nexport var transformViolinData = function (options) {\n    var xField = options.xField, yField = options.yField, seriesField = options.seriesField, data = options.data, kde = options.kde;\n    /** 生成概率密度函数的配置 */\n    var pdfOptions = {\n        min: kde.min,\n        max: kde.max,\n        size: kde.sampleSize,\n        width: kde.width,\n    };\n    // 无拆分\n    if (!seriesField) {\n        var group_1 = groupBy(data, xField);\n        return Object.keys(group_1).map(function (x) {\n            var records = group_1[x];\n            var values = records.map(function (record) { return record[yField]; });\n            return __assign(__assign({ x: x }, toViolinValue(values, pdfOptions)), toBoxValue(values));\n        });\n    }\n    // 有拆分\n    var resultList = [];\n    var seriesGroup = groupBy(data, seriesField);\n    Object.keys(seriesGroup).forEach(function (series) {\n        var group = groupBy(seriesGroup[series], xField);\n        return Object.keys(group).forEach(function (key) {\n            var _a;\n            var records = group[key];\n            var values = records.map(function (record) { return record[yField]; });\n            resultList.push(__assign(__assign((_a = { x: key }, _a[seriesField] = series, _a), toViolinValue(values, pdfOptions)), toBoxValue(values)));\n        });\n    });\n    return resultList;\n};\n//# sourceMappingURL=utils.js.map","import { __assign } from \"tslib\";\nimport { each, get, omit, set } from '@antv/util';\nimport { annotation as baseAnnotation, interaction, theme, tooltip } from '../../adaptor/common';\nimport { interval, point, violin } from '../../adaptor/geometries';\nimport { AXIS_META_CONFIG_KEYS } from '../../constant';\nimport { deepAssign, findViewById, flow, pick } from '../../utils';\nimport { addViewAnimation } from '../../utils/view';\nimport { MEDIAN_FIELD, MEDIAN_VIEW_ID, MIN_MAX_FIELD, MIN_MAX_VIEW_ID, QUANTILE_FIELD, QUANTILE_VIEW_ID, VIOLIN_SIZE_FIELD, VIOLIN_VIEW_ID, VIOLIN_Y_FIELD, X_FIELD, } from './constant';\nimport { transformViolinData } from './utils';\nvar TOOLTIP_FIELDS = ['low', 'high', 'q1', 'q3', 'median'];\nvar adjustCfg = [\n    {\n        type: 'dodge',\n        marginRatio: 1 / 32,\n    },\n];\n/** 处理数据 */\nfunction data(params) {\n    var chart = params.chart, options = params.options;\n    chart.data(transformViolinData(options));\n    return params;\n}\n/** 小提琴轮廓 */\nfunction violinView(params) {\n    var chart = params.chart, options = params.options;\n    var seriesField = options.seriesField, color = options.color, _a = options.shape, shape = _a === void 0 ? 'violin' : _a, violinStyle = options.violinStyle, tooltip = options.tooltip, state = options.state;\n    var view = chart.createView({ id: VIOLIN_VIEW_ID });\n    violin({\n        chart: view,\n        options: {\n            xField: X_FIELD,\n            yField: VIOLIN_Y_FIELD,\n            seriesField: seriesField ? seriesField : X_FIELD,\n            sizeField: VIOLIN_SIZE_FIELD,\n            tooltip: __assign({ fields: TOOLTIP_FIELDS }, tooltip),\n            violin: {\n                style: violinStyle,\n                color: color,\n                shape: shape,\n            },\n            state: state,\n        },\n    });\n    view.geometries[0].adjust(adjustCfg);\n    return params;\n}\n/** 箱线 */\nfunction boxView(params) {\n    var chart = params.chart, options = params.options;\n    var seriesField = options.seriesField, color = options.color, tooltip = options.tooltip, box = options.box;\n    // 如果配置 `box` 为 false ，不渲染内部箱线图\n    if (box === false)\n        return params;\n    // 边缘线\n    var minMaxView = chart.createView({ id: MIN_MAX_VIEW_ID });\n    interval({\n        chart: minMaxView,\n        options: {\n            xField: X_FIELD,\n            yField: MIN_MAX_FIELD,\n            seriesField: seriesField ? seriesField : X_FIELD,\n            tooltip: __assign({ fields: TOOLTIP_FIELDS }, tooltip),\n            state: typeof box === 'object' ? box.state : {},\n            interval: {\n                color: color,\n                size: 1,\n                style: {\n                    lineWidth: 0,\n                },\n            },\n        },\n    });\n    minMaxView.geometries[0].adjust(adjustCfg);\n    // 四分点位\n    var quantileView = chart.createView({ id: QUANTILE_VIEW_ID });\n    interval({\n        chart: quantileView,\n        options: {\n            xField: X_FIELD,\n            yField: QUANTILE_FIELD,\n            seriesField: seriesField ? seriesField : X_FIELD,\n            tooltip: __assign({ fields: TOOLTIP_FIELDS }, tooltip),\n            state: typeof box === 'object' ? box.state : {},\n            interval: {\n                color: color,\n                size: 8,\n                style: {\n                    fillOpacity: 1,\n                },\n            },\n        },\n    });\n    quantileView.geometries[0].adjust(adjustCfg);\n    // 中位值\n    var medianView = chart.createView({ id: MEDIAN_VIEW_ID });\n    point({\n        chart: medianView,\n        options: {\n            xField: X_FIELD,\n            yField: MEDIAN_FIELD,\n            seriesField: seriesField ? seriesField : X_FIELD,\n            tooltip: __assign({ fields: TOOLTIP_FIELDS }, tooltip),\n            state: typeof box === 'object' ? box.state : {},\n            point: {\n                color: color,\n                size: 1,\n                style: {\n                    fill: 'white',\n                    lineWidth: 0,\n                },\n            },\n        },\n    });\n    medianView.geometries[0].adjust(adjustCfg);\n    // 关闭辅助 view 的轴\n    quantileView.axis(false);\n    minMaxView.axis(false);\n    medianView.axis(false);\n    // 关闭辅助 view 的图例\n    medianView.legend(false);\n    minMaxView.legend(false);\n    quantileView.legend(false);\n    return params;\n}\n/**\n * meta 配置\n */\nfunction meta(params) {\n    var _a;\n    var chart = params.chart, options = params.options;\n    var meta = options.meta, xAxis = options.xAxis, yAxis = options.yAxis;\n    var baseMeta = {};\n    var scales = deepAssign(baseMeta, meta, (_a = {},\n        _a[X_FIELD] = __assign(__assign({ sync: true }, pick(xAxis, AXIS_META_CONFIG_KEYS)), { \n            // fix:  dodge is not support linear attribute, please use category attribute!\n            // 强制 x 轴类型为分类类型\n            type: 'cat' }),\n        _a[VIOLIN_Y_FIELD] = __assign({ sync: true }, pick(yAxis, AXIS_META_CONFIG_KEYS)),\n        _a[MIN_MAX_FIELD] = __assign({ sync: VIOLIN_Y_FIELD }, pick(yAxis, AXIS_META_CONFIG_KEYS)),\n        _a[QUANTILE_FIELD] = __assign({ sync: VIOLIN_Y_FIELD }, pick(yAxis, AXIS_META_CONFIG_KEYS)),\n        _a[MEDIAN_FIELD] = __assign({ sync: VIOLIN_Y_FIELD }, pick(yAxis, AXIS_META_CONFIG_KEYS)),\n        _a));\n    chart.scale(scales);\n    return params;\n}\n/**\n * axis 配置\n */\nfunction axis(params) {\n    var chart = params.chart, options = params.options;\n    var xAxis = options.xAxis, yAxis = options.yAxis;\n    var view = findViewById(chart, VIOLIN_VIEW_ID);\n    // 为 false 则是不显示轴\n    if (xAxis === false) {\n        view.axis(X_FIELD, false);\n    }\n    else {\n        view.axis(X_FIELD, xAxis);\n    }\n    if (yAxis === false) {\n        view.axis(VIOLIN_Y_FIELD, false);\n    }\n    else {\n        view.axis(VIOLIN_Y_FIELD, yAxis);\n    }\n    chart.axis(false);\n    return params;\n}\n/**\n *\n * @param params\n * @returns\n */\nfunction legend(params) {\n    var chart = params.chart, options = params.options;\n    var legend = options.legend, seriesField = options.seriesField, shape = options.shape;\n    if (legend === false) {\n        chart.legend(false);\n    }\n    else {\n        var legendField_1 = seriesField ? seriesField : X_FIELD;\n        // fixme 暂不明为啥有描边\n        var legendOptions = omit(legend, ['selected']);\n        if (!shape || !shape.startsWith('hollow')) {\n            if (!get(legendOptions, ['marker', 'style', 'lineWidth'])) {\n                set(legendOptions, ['marker', 'style', 'lineWidth'], 0);\n            }\n        }\n        chart.legend(legendField_1, legendOptions);\n        // 特殊的处理 fixme G2 层得解决这个问题\n        if (get(legend, 'selected')) {\n            each(chart.views, function (view) { return view.legend(legendField_1, legend); });\n        }\n    }\n    return params;\n}\n/**\n * annotation, apply to violin view.\n * @param params\n * @returns\n */\nfunction annotation(params) {\n    var chart = params.chart;\n    var violinView = findViewById(chart, VIOLIN_VIEW_ID);\n    baseAnnotation()(__assign(__assign({}, params), { chart: violinView }));\n    return params;\n}\n/**\n * 动画\n * @param params\n */\nexport function animation(params) {\n    var chart = params.chart, options = params.options;\n    var animation = options.animation;\n    // 所有的 Geometry 都使用同一动画（各个图形如有区别，自行覆盖）\n    each(chart.views, function (view) {\n        addViewAnimation(view, animation);\n    });\n    return params;\n}\n/**\n * 小提琴图适配器\n * @param params\n */\nexport function adaptor(params) {\n    return flow(theme, data, violinView, boxView, meta, tooltip, axis, legend, interaction, annotation, animation)(params);\n}\n//# sourceMappingURL=adaptor.js.map","import { __assign } from \"tslib\";\nimport { deepAssign } from '../../utils';\nimport { getTooltipMapping } from '../../utils/tooltip';\nimport { geometry } from './base';\n/**\n * violin 辅助点的配置处理\n * @param params\n */\nexport function violin(params) {\n    var options = params.options;\n    var violin = options.violin, xField = options.xField, yField = options.yField, seriesField = options.seriesField, sizeField = options.sizeField, tooltip = options.tooltip;\n    var _a = getTooltipMapping(tooltip, [xField, yField, seriesField, sizeField]), fields = _a.fields, formatter = _a.formatter;\n    return violin\n        ? geometry(deepAssign({}, params, {\n            options: {\n                type: 'violin',\n                colorField: seriesField,\n                tooltipFields: fields,\n                mapping: __assign({ tooltip: formatter }, violin),\n            },\n        }))\n        : params;\n}\n//# sourceMappingURL=violin.js.map","import { __extends } from \"tslib\";\nimport { Plot } from '../../core/plot';\nimport { adaptor } from './adaptor';\nimport { DEFAULT_OPTIONS } from './constant';\nimport { transformViolinData } from './utils';\nvar Violin = /** @class */ (function (_super) {\n    __extends(Violin, _super);\n    function Violin() {\n        var _this = _super !== null && _super.apply(this, arguments) || this;\n        /** 图表类型 */\n        _this.type = 'violin';\n        return _this;\n    }\n    /**\n     * 获取 默认配置项\n     * 供外部使用\n     */\n    Violin.getDefaultOptions = function () {\n        return DEFAULT_OPTIONS;\n    };\n    /**\n     * @override\n     */\n    Violin.prototype.changeData = function (data) {\n        this.updateOption({ data: data });\n        this.chart.changeData(transformViolinData(this.options));\n    };\n    /**\n     * 获取 小提琴图 默认配置项\n     */\n    Violin.prototype.getDefaultOptions = function () {\n        return Violin.getDefaultOptions();\n    };\n    /**\n     * 获取 小提琴图 的适配器\n     */\n    Violin.prototype.getSchemaAdaptor = function () {\n        return adaptor;\n    };\n    return Violin;\n}(Plot));\nexport { Violin };\n//# sourceMappingURL=index.js.map","export var Y_FIELD = '$$yField$$';\nexport var DIFF_FIELD = '$$diffField$$';\nexport var ABSOLUTE_FIELD = '$$absoluteField$$';\nexport var IS_TOTAL = '$$isTotal$$';\n/**\n * 瀑布图 默认配置项\n */\nexport var DEFAULT_OPTIONS = {\n    /** default: show label */\n    label: {},\n    /** default: show leaderLine */\n    leaderLine: {\n        style: {\n            lineWidth: 1,\n            stroke: '#8c8c8c',\n            lineDash: [4, 2],\n        },\n    },\n    /** default: show total */\n    total: {\n        style: {\n            fill: 'rgba(0, 0, 0, 0.25)',\n        },\n    },\n    interactions: [{ type: 'element-active' }],\n    risingFill: '#f4664a',\n    fallingFill: '#30bf78',\n    waterfallStyle: {\n        fill: 'rgba(0, 0, 0, 0.25)',\n    },\n    yAxis: {\n        grid: {\n            line: {\n                style: {\n                    lineDash: [4, 2],\n                },\n            },\n        },\n    },\n};\n//# sourceMappingURL=constant.js.map","import { __assign } from \"tslib\";\nimport { get, isNumber, isObject, isUndefined, reduce } from '@antv/util';\nimport { LEVEL, log } from '../../utils';\nimport { ABSOLUTE_FIELD, DIFF_FIELD, IS_TOTAL, Y_FIELD } from './constant';\n/**\n * @desc 数据处理函数，统一将数据处理成[start, end]\n * @param data\n * @param xField\n * @param yField\n * @param totalLabel\n */\nexport function processData(data, xField, yField, newYField, total) {\n    var _a;\n    var newData = [];\n    reduce(data, function (r, d) {\n        var _a;\n        // 校验数据合法性\n        log(LEVEL.WARN, isNumber(d[yField]), \"\".concat(d[yField], \" is not a valid number\"));\n        var value = isUndefined(d[yField]) ? null : d[yField];\n        newData.push(__assign(__assign({}, d), (_a = {}, _a[newYField] = [r, r + value], _a)));\n        return r + value;\n    }, 0);\n    // 如果需要展示总和\n    if (newData.length && total) {\n        var sum = get(newData, [[data.length - 1], newYField, [1]]);\n        newData.push((_a = {},\n            _a[xField] = total.label,\n            _a[yField] = sum,\n            _a[newYField] = [0, sum],\n            _a));\n    }\n    return newData;\n}\n/**\n * 处理为 瀑布图 数据\n */\nexport function transformData(data, xField, yField, total) {\n    var processed = processData(data, xField, yField, Y_FIELD, total);\n    return processed.map(function (d, dIdx) {\n        var _a;\n        if (!isObject(d)) {\n            return d;\n        }\n        return __assign(__assign({}, d), (_a = {}, _a[ABSOLUTE_FIELD] = d[Y_FIELD][1], _a[DIFF_FIELD] = d[Y_FIELD][1] - d[Y_FIELD][0], _a[IS_TOTAL] = dIdx === data.length, _a));\n    });\n}\n//# sourceMappingURL=utils.js.map","import { __assign, __rest } from \"tslib\";\nimport { get } from '@antv/util';\nimport { animation, annotation, interaction, scale, state, theme } from '../../adaptor/common';\nimport { interval } from '../../adaptor/geometries';\nimport { getLocale } from '../../core/locale';\nimport { deepAssign, findGeometry, flow, transformLabel } from '../../utils';\nimport { ABSOLUTE_FIELD, DIFF_FIELD, IS_TOTAL, Y_FIELD } from './constant';\nimport './shape';\nimport { transformData } from './utils';\n/**\n *  处理默认配置项\n * @param params\n * @returns\n */\nfunction defaultOptions(params) {\n    var _a = params.options, locale = _a.locale, total = _a.total;\n    var localeTotalLabel = getLocale(locale).get(['waterfall', 'total']);\n    if (total && typeof total.label !== 'string' && localeTotalLabel) {\n        // @ts-ignore\n        params.options.total.label = localeTotalLabel;\n    }\n    return params;\n}\n/**\n * 字段\n * @param params\n */\nfunction geometry(params) {\n    var chart = params.chart, options = params.options;\n    var data = options.data, xField = options.xField, yField = options.yField, total = options.total, leaderLine = options.leaderLine, columnWidthRatio = options.columnWidthRatio, waterfallStyle = options.waterfallStyle, risingFill = options.risingFill, fallingFill = options.fallingFill, color = options.color, shape = options.shape, customInfo = options.customInfo;\n    // 数据处理\n    chart.data(transformData(data, xField, yField, total));\n    // 瀑布图自带的 colorMapping\n    var colorMapping = color ||\n        function (datum) {\n            if (get(datum, [IS_TOTAL])) {\n                return get(total, ['style', 'fill'], '');\n            }\n            return get(datum, [Y_FIELD, 1]) - get(datum, [Y_FIELD, 0]) > 0 ? risingFill : fallingFill;\n        };\n    var p = deepAssign({}, params, {\n        options: {\n            xField: xField,\n            yField: Y_FIELD,\n            seriesField: xField,\n            rawFields: [yField, DIFF_FIELD, IS_TOTAL, Y_FIELD],\n            widthRatio: columnWidthRatio,\n            interval: {\n                style: waterfallStyle,\n                // 支持外部自定义形状\n                shape: shape || 'waterfall',\n                color: colorMapping,\n            },\n        },\n    });\n    var ext = interval(p).ext;\n    var geometry = ext.geometry;\n    // 将 waterfall leaderLineCfg 传入到自定义 shape 中\n    geometry.customInfo(__assign(__assign({}, customInfo), { leaderLine: leaderLine }));\n    return params;\n}\n/**\n * meta 配置\n * @param params\n */\nfunction meta(params) {\n    var _a, _b;\n    var options = params.options;\n    var xAxis = options.xAxis, yAxis = options.yAxis, xField = options.xField, yField = options.yField, meta = options.meta;\n    var Y_FIELD_META = deepAssign({}, { alias: yField }, get(meta, yField));\n    return flow(scale((_a = {},\n        _a[xField] = xAxis,\n        _a[yField] = yAxis,\n        _a[Y_FIELD] = yAxis,\n        _a), deepAssign({}, meta, (_b = {}, _b[Y_FIELD] = Y_FIELD_META, _b[DIFF_FIELD] = Y_FIELD_META, _b[ABSOLUTE_FIELD] = Y_FIELD_META, _b))))(params);\n}\n/**\n * axis 配置\n * @param params\n */\nfunction axis(params) {\n    var chart = params.chart, options = params.options;\n    var xAxis = options.xAxis, yAxis = options.yAxis, xField = options.xField, yField = options.yField;\n    // 为 false 则是不显示轴\n    if (xAxis === false) {\n        chart.axis(xField, false);\n    }\n    else {\n        chart.axis(xField, xAxis);\n    }\n    if (yAxis === false) {\n        chart.axis(yField, false);\n        chart.axis(Y_FIELD, false);\n    }\n    else {\n        chart.axis(yField, yAxis);\n        chart.axis(Y_FIELD, yAxis);\n    }\n    return params;\n}\n/**\n * legend 配置 todo 添加 hover 交互\n * @param params\n */\nfunction legend(params) {\n    var chart = params.chart, options = params.options;\n    var legend = options.legend, total = options.total, risingFill = options.risingFill, fallingFill = options.fallingFill, locale = options.locale;\n    var i18n = getLocale(locale);\n    if (legend === false) {\n        chart.legend(false);\n    }\n    else {\n        var items = [\n            {\n                name: i18n.get(['general', 'increase']),\n                value: 'increase',\n                marker: { symbol: 'square', style: { r: 5, fill: risingFill } },\n            },\n            {\n                name: i18n.get(['general', 'decrease']),\n                value: 'decrease',\n                marker: { symbol: 'square', style: { r: 5, fill: fallingFill } },\n            },\n        ];\n        if (total) {\n            items.push({\n                name: total.label || '',\n                value: 'total',\n                marker: {\n                    symbol: 'square',\n                    style: deepAssign({}, { r: 5 }, get(total, 'style')),\n                },\n            });\n        }\n        chart.legend(deepAssign({}, {\n            custom: true,\n            position: 'top',\n            items: items,\n        }, legend));\n        chart.removeInteraction('legend-filter');\n    }\n    return params;\n}\n/**\n * 数据标签\n * @param params\n */\nfunction label(params) {\n    var chart = params.chart, options = params.options;\n    var label = options.label, labelMode = options.labelMode, xField = options.xField;\n    var geometry = findGeometry(chart, 'interval');\n    if (!label) {\n        geometry.label(false);\n    }\n    else {\n        var callback = label.callback, cfg = __rest(label, [\"callback\"]);\n        geometry.label({\n            fields: labelMode === 'absolute' ? [ABSOLUTE_FIELD, xField] : [DIFF_FIELD, xField],\n            callback: callback,\n            cfg: transformLabel(cfg),\n        });\n    }\n    return params;\n}\n/**\n * tooltip 配置\n * @param params\n */\nexport function tooltip(params) {\n    var chart = params.chart, options = params.options;\n    var tooltip = options.tooltip, xField = options.xField, yField = options.yField;\n    if (tooltip !== false) {\n        chart.tooltip(__assign({ showCrosshairs: false, showMarkers: false, shared: true, \n            // tooltip 默认展示 y 字段值\n            fields: [yField] }, tooltip));\n        // 瀑布图默认以 yField 作为 tooltip 内容\n        var geometry_1 = chart.geometries[0];\n        (tooltip === null || tooltip === void 0 ? void 0 : tooltip.formatter) ? geometry_1.tooltip(\"\".concat(xField, \"*\").concat(yField), tooltip.formatter) : geometry_1.tooltip(yField);\n    }\n    else {\n        chart.tooltip(false);\n    }\n    return params;\n}\n/**\n * 瀑布图适配器\n * @param params\n */\nexport function adaptor(params) {\n    return flow(defaultOptions, theme, geometry, meta, axis, legend, tooltip, label, state, interaction, animation, annotation())(params);\n}\n//# sourceMappingURL=adaptor.js.map","import { __assign } from \"tslib\";\nimport { registerShape } from '@antv/g2';\nimport { get } from '@antv/util';\nimport { deepAssign } from '../../utils';\n/**\n * 获取柱子 path\n * @param points\n */\nfunction getRectPath(points) {\n    var path = [];\n    for (var i = 0; i < points.length; i++) {\n        var point = points[i];\n        if (point) {\n            var action = i === 0 ? 'M' : 'L';\n            path.push([action, point.x, point.y]);\n        }\n    }\n    var first = points[0];\n    path.push(['L', first.x, first.y]);\n    path.push(['z']);\n    return path;\n}\n/**\n * 获取填充属性\n * @param cfg 图形绘制数据\n */\nfunction getFillAttrs(cfg) {\n    return deepAssign({}, cfg.defaultStyle, cfg.style, { fill: cfg.color });\n}\nregisterShape('interval', 'waterfall', {\n    draw: function (cfg, container) {\n        var customInfo = cfg.customInfo, points = cfg.points, nextPoints = cfg.nextPoints;\n        var group = container.addGroup();\n        // ① 绘制柱体\n        var rectPath = this.parsePath(getRectPath(points));\n        var fillAttrs = getFillAttrs(cfg);\n        group.addShape('path', {\n            attrs: __assign(__assign({}, fillAttrs), { path: rectPath }),\n        });\n        // ② 绘制连接线\n        var leaderLineCfg = get(customInfo, 'leaderLine');\n        if (leaderLineCfg && nextPoints) {\n            var linkPath = [\n                ['M', points[2].x, points[2].y],\n                ['L', nextPoints[0].x, nextPoints[0].y],\n            ];\n            if (points[2].y === nextPoints[1].y) {\n                linkPath[1] = ['L', nextPoints[1].x, nextPoints[1].y];\n            }\n            linkPath = this.parsePath(linkPath);\n            group.addShape('path', {\n                attrs: __assign({ path: linkPath }, (leaderLineCfg.style || {})),\n            });\n        }\n        return group;\n    },\n});\n//# sourceMappingURL=shape.js.map","import { __extends } from \"tslib\";\nimport { Plot } from '../../core/plot';\nimport { adaptor } from './adaptor';\nimport { DEFAULT_OPTIONS } from './constant';\nimport { transformData } from './utils';\n/**\n * 瀑布图\n */\nvar Waterfall = /** @class */ (function (_super) {\n    __extends(Waterfall, _super);\n    function Waterfall() {\n        var _this = _super !== null && _super.apply(this, arguments) || this;\n        /** 图表类型 */\n        _this.type = 'waterfall';\n        return _this;\n    }\n    /**\n     * 获取 瀑布图 默认配置项\n     * 供外部使用\n     */\n    Waterfall.getDefaultOptions = function () {\n        return DEFAULT_OPTIONS;\n    };\n    /**\n     * @override\n     * @param data\n     */\n    Waterfall.prototype.changeData = function (data) {\n        var _a = this.options, xField = _a.xField, yField = _a.yField, total = _a.total;\n        this.updateOption({ data: data });\n        this.chart.changeData(transformData(data, xField, yField, total));\n    };\n    /**\n     * 获取 瀑布图 的适配器\n     */\n    Waterfall.prototype.getSchemaAdaptor = function () {\n        return adaptor;\n    };\n    /**\n     * 获取 瀑布图 的默认配置\n     */\n    Waterfall.prototype.getDefaultOptions = function () {\n        return Waterfall.getDefaultOptions();\n    };\n    return Waterfall;\n}(Plot));\nexport { Waterfall };\n//# sourceMappingURL=index.js.map","import { Plot } from '../../core/plot';\nimport { deepAssign } from '../../utils';\n/** 词云图 color 通道映射字段 */\nexport var WORD_CLOUD_COLOR_FIELD = 'color';\n/**\n * 词云图 默认配置项\n */\nexport var DEFAULT_OPTIONS = deepAssign({}, Plot.getDefaultOptions(), {\n    timeInterval: 2000,\n    legend: false,\n    tooltip: {\n        showTitle: false,\n        showMarkers: false,\n        showCrosshairs: false,\n        fields: ['text', 'value', WORD_CLOUD_COLOR_FIELD],\n        formatter: function (datum) {\n            return { name: datum.text, value: datum.value };\n        },\n    },\n    wordStyle: {\n        fontFamily: 'Verdana',\n        fontWeight: 'normal',\n        padding: 1,\n        fontSize: [12, 60],\n        rotation: [0, 90],\n        rotationSteps: 2,\n        rotateRatio: 0.5,\n    },\n});\n//# sourceMappingURL=constant.js.map","import { assign, isFunction, isNil } from '@antv/util';\nvar DEFAULT_OPTIONS = {\n    font: function () { return 'serif'; },\n    padding: 1,\n    size: [500, 500],\n    spiral: 'archimedean',\n    // timeInterval: Infinity // max execute time\n    timeInterval: 3000, // max execute time\n    // imageMask: '', // instance of Image, must be loaded\n};\n/**\n * 根据对应的数据对象，计算每个\n * 词语在画布中的渲染位置，并返回\n * 计算后的数据对象\n * @param words\n * @param options\n */\nexport function wordCloud(words, options) {\n    // 混入默认配置\n    options = assign({}, DEFAULT_OPTIONS, options);\n    return transform(words, options);\n}\n/**\n * 抛出没有混入默认配置的方法，用于测试。\n * @param words\n * @param options\n */\nexport function transform(words, options) {\n    // 布局对象\n    var layout = tagCloud();\n    ['font', 'fontSize', 'fontWeight', 'padding', 'rotate', 'size', 'spiral', 'timeInterval', 'random'].forEach(function (key) {\n        if (!isNil(options[key])) {\n            layout[key](options[key]);\n        }\n    });\n    layout.words(words);\n    if (options.imageMask) {\n        layout.createMask(options.imageMask);\n    }\n    var result = layout.start();\n    var tags = result._tags;\n    tags.forEach(function (tag) {\n        tag.x += options.size[0] / 2;\n        tag.y += options.size[1] / 2;\n    });\n    var _a = options.size, w = _a[0], h = _a[1];\n    // 添加两个参照数据，分别表示左上角和右下角。\n    // 不添加的话不会按照真实的坐标渲染，而是以\n    // 数据中的边界坐标为边界进行拉伸，以铺满画布。\n    // 这样的后果会导致词语之间的重叠。\n    tags.push({\n        text: '',\n        value: 0,\n        x: 0,\n        y: 0,\n        opacity: 0,\n    });\n    tags.push({\n        text: '',\n        value: 0,\n        x: w,\n        y: h,\n        opacity: 0,\n    });\n    return tags;\n}\nvar cloudRadians = Math.PI / 180, cw = (1 << 11) >> 5, ch = 1 << 11;\nfunction cloudText(d) {\n    return d.text;\n}\nfunction cloudFont() {\n    return 'serif';\n}\nfunction cloudFontNormal() {\n    return 'normal';\n}\nfunction cloudFontSize(d) {\n    return d.value;\n}\nfunction cloudRotate() {\n    return ~~(Math.random() * 2) * 90;\n}\nfunction cloudPadding() {\n    return 1;\n}\n// Fetches a monochrome sprite bitmap for the specified text.\n// Load in batches for speed.\nfunction cloudSprite(contextAndRatio, d, data, di) {\n    if (d.sprite)\n        return;\n    var c = contextAndRatio.context, ratio = contextAndRatio.ratio;\n    c.clearRect(0, 0, (cw << 5) / ratio, ch / ratio);\n    var x = 0, y = 0, maxh = 0;\n    var n = data.length;\n    --di;\n    while (++di < n) {\n        d = data[di];\n        c.save();\n        c.font = d.style + ' ' + d.weight + ' ' + ~~((d.size + 1) / ratio) + 'px ' + d.font;\n        var w = c.measureText(d.text + 'm').width * ratio, h = d.size << 1;\n        if (d.rotate) {\n            var sr = Math.sin(d.rotate * cloudRadians), cr = Math.cos(d.rotate * cloudRadians), wcr = w * cr, wsr = w * sr, hcr = h * cr, hsr = h * sr;\n            w = ((Math.max(Math.abs(wcr + hsr), Math.abs(wcr - hsr)) + 0x1f) >> 5) << 5;\n            h = ~~Math.max(Math.abs(wsr + hcr), Math.abs(wsr - hcr));\n        }\n        else {\n            w = ((w + 0x1f) >> 5) << 5;\n        }\n        if (h > maxh)\n            maxh = h;\n        if (x + w >= cw << 5) {\n            x = 0;\n            y += maxh;\n            maxh = 0;\n        }\n        if (y + h >= ch)\n            break;\n        c.translate((x + (w >> 1)) / ratio, (y + (h >> 1)) / ratio);\n        if (d.rotate)\n            c.rotate(d.rotate * cloudRadians);\n        c.fillText(d.text, 0, 0);\n        if (d.padding) {\n            c.lineWidth = 2 * d.padding;\n            c.strokeText(d.text, 0, 0);\n        }\n        c.restore();\n        d.width = w;\n        d.height = h;\n        d.xoff = x;\n        d.yoff = y;\n        d.x1 = w >> 1;\n        d.y1 = h >> 1;\n        d.x0 = -d.x1;\n        d.y0 = -d.y1;\n        d.hasText = true;\n        x += w;\n    }\n    var pixels = c.getImageData(0, 0, (cw << 5) / ratio, ch / ratio).data, sprite = [];\n    while (--di >= 0) {\n        d = data[di];\n        if (!d.hasText)\n            continue;\n        var w = d.width, w32 = w >> 5;\n        var h = d.y1 - d.y0;\n        // Zero the buffer\n        for (var i = 0; i < h * w32; i++)\n            sprite[i] = 0;\n        x = d.xoff;\n        if (x == null)\n            return;\n        y = d.yoff;\n        var seen = 0, seenRow = -1;\n        for (var j = 0; j < h; j++) {\n            for (var i = 0; i < w; i++) {\n                var k = w32 * j + (i >> 5), m = pixels[((y + j) * (cw << 5) + (x + i)) << 2] ? 1 << (31 - (i % 32)) : 0;\n                sprite[k] |= m;\n                seen |= m;\n            }\n            if (seen)\n                seenRow = j;\n            else {\n                d.y0++;\n                h--;\n                j--;\n                y++;\n            }\n        }\n        d.y1 = d.y0 + seenRow;\n        d.sprite = sprite.slice(0, (d.y1 - d.y0) * w32);\n    }\n}\n// Use mask-based collision detection.\nfunction cloudCollide(tag, board, sw) {\n    sw >>= 5;\n    var sprite = tag.sprite, w = tag.width >> 5, lx = tag.x - (w << 4), sx = lx & 0x7f, msx = 32 - sx, h = tag.y1 - tag.y0;\n    var x = (tag.y + tag.y0) * sw + (lx >> 5), last;\n    for (var j = 0; j < h; j++) {\n        last = 0;\n        for (var i = 0; i <= w; i++) {\n            if (((last << msx) | (i < w ? (last = sprite[j * w + i]) >>> sx : 0)) & board[x + i])\n                return true;\n        }\n        x += sw;\n    }\n    return false;\n}\nfunction cloudBounds(bounds, d) {\n    var b0 = bounds[0], b1 = bounds[1];\n    if (d.x + d.x0 < b0.x)\n        b0.x = d.x + d.x0;\n    if (d.y + d.y0 < b0.y)\n        b0.y = d.y + d.y0;\n    if (d.x + d.x1 > b1.x)\n        b1.x = d.x + d.x1;\n    if (d.y + d.y1 > b1.y)\n        b1.y = d.y + d.y1;\n}\nfunction collideRects(a, b) {\n    return a.x + a.x1 > b[0].x && a.x + a.x0 < b[1].x && a.y + a.y1 > b[0].y && a.y + a.y0 < b[1].y;\n}\nfunction archimedeanSpiral(size) {\n    var e = size[0] / size[1];\n    return function (t) {\n        return [e * (t *= 0.1) * Math.cos(t), t * Math.sin(t)];\n    };\n}\nfunction rectangularSpiral(size) {\n    var dy = 4, dx = (dy * size[0]) / size[1];\n    var x = 0, y = 0;\n    return function (t) {\n        var sign = t < 0 ? -1 : 1;\n        // See triangular numbers: T_n = n * (n + 1) / 2.\n        switch ((Math.sqrt(1 + 4 * sign * t) - sign) & 3) {\n            case 0:\n                x += dx;\n                break;\n            case 1:\n                y += dy;\n                break;\n            case 2:\n                x -= dx;\n                break;\n            default:\n                y -= dy;\n                break;\n        }\n        return [x, y];\n    };\n}\n// TODO reuse arrays?\nfunction zeroArray(n) {\n    var a = [];\n    var i = -1;\n    while (++i < n)\n        a[i] = 0;\n    return a;\n}\nfunction cloudCanvas() {\n    return document.createElement('canvas');\n}\nexport function functor(d) {\n    return isFunction(d)\n        ? d\n        : function () {\n            return d;\n        };\n}\nvar spirals = {\n    archimedean: archimedeanSpiral,\n    rectangular: rectangularSpiral,\n};\nfunction tagCloud() {\n    var size = [256, 256], font = cloudFont, fontSize = cloudFontSize, fontWeight = cloudFontNormal, rotate = cloudRotate, padding = cloudPadding, spiral = archimedeanSpiral, random = Math.random, words = [], timeInterval = Infinity;\n    var text = cloudText;\n    var fontStyle = cloudFontNormal;\n    var canvas = cloudCanvas;\n    var cloud = {};\n    cloud.start = function () {\n        var width = size[0], height = size[1];\n        var contextAndRatio = getContext(canvas()), board = cloud.board ? cloud.board : zeroArray((size[0] >> 5) * size[1]), n = words.length, tags = [], data = words\n            .map(function (d, i, data) {\n            d.text = text.call(this, d, i, data);\n            d.font = font.call(this, d, i, data);\n            d.style = fontStyle.call(this, d, i, data);\n            d.weight = fontWeight.call(this, d, i, data);\n            d.rotate = rotate.call(this, d, i, data);\n            d.size = ~~fontSize.call(this, d, i, data);\n            d.padding = padding.call(this, d, i, data);\n            return d;\n        })\n            .sort(function (a, b) {\n            return b.size - a.size;\n        });\n        var i = -1, bounds = !cloud.board\n            ? null\n            : [\n                {\n                    x: 0,\n                    y: 0,\n                },\n                {\n                    x: width,\n                    y: height,\n                },\n            ];\n        step();\n        function step() {\n            var start = Date.now();\n            while (Date.now() - start < timeInterval && ++i < n) {\n                var d = data[i];\n                d.x = (width * (random() + 0.5)) >> 1;\n                d.y = (height * (random() + 0.5)) >> 1;\n                cloudSprite(contextAndRatio, d, data, i);\n                if (d.hasText && place(board, d, bounds)) {\n                    tags.push(d);\n                    if (bounds) {\n                        if (!cloud.hasImage) {\n                            // update bounds if image mask not set\n                            cloudBounds(bounds, d);\n                        }\n                    }\n                    else {\n                        bounds = [\n                            { x: d.x + d.x0, y: d.y + d.y0 },\n                            { x: d.x + d.x1, y: d.y + d.y1 },\n                        ];\n                    }\n                    // Temporary hack\n                    d.x -= size[0] >> 1;\n                    d.y -= size[1] >> 1;\n                }\n            }\n            cloud._tags = tags;\n            cloud._bounds = bounds;\n        }\n        return cloud;\n    };\n    function getContext(canvas) {\n        canvas.width = canvas.height = 1;\n        var ratio = Math.sqrt(canvas.getContext('2d', { willReadFrequently: true }).getImageData(0, 0, 1, 1).data\n            .length >> 2);\n        canvas.width = (cw << 5) / ratio;\n        canvas.height = ch / ratio;\n        var context = canvas.getContext('2d', { willReadFrequently: true });\n        context.fillStyle = context.strokeStyle = 'red';\n        context.textAlign = 'center';\n        return { context: context, ratio: ratio };\n    }\n    function place(board, tag, bounds) {\n        // const perimeter = [{ x: 0, y: 0 }, { x: size[0], y: size[1] }],\n        var startX = tag.x, startY = tag.y, maxDelta = Math.sqrt(size[0] * size[0] + size[1] * size[1]), s = spiral(size), dt = random() < 0.5 ? 1 : -1;\n        var dxdy, t = -dt, dx, dy;\n        while ((dxdy = s((t += dt)))) {\n            dx = ~~dxdy[0];\n            dy = ~~dxdy[1];\n            if (Math.min(Math.abs(dx), Math.abs(dy)) >= maxDelta)\n                break;\n            tag.x = startX + dx;\n            tag.y = startY + dy;\n            if (tag.x + tag.x0 < 0 || tag.y + tag.y0 < 0 || tag.x + tag.x1 > size[0] || tag.y + tag.y1 > size[1])\n                continue;\n            // TODO only check for collisions within current bounds.\n            if (!bounds || !cloudCollide(tag, board, size[0])) {\n                if (!bounds || collideRects(tag, bounds)) {\n                    var sprite = tag.sprite, w = tag.width >> 5, sw = size[0] >> 5, lx = tag.x - (w << 4), sx = lx & 0x7f, msx = 32 - sx, h = tag.y1 - tag.y0;\n                    var last = void 0, x = (tag.y + tag.y0) * sw + (lx >> 5);\n                    for (var j = 0; j < h; j++) {\n                        last = 0;\n                        for (var i = 0; i <= w; i++) {\n                            board[x + i] |= (last << msx) | (i < w ? (last = sprite[j * w + i]) >>> sx : 0);\n                        }\n                        x += sw;\n                    }\n                    delete tag.sprite;\n                    return true;\n                }\n            }\n        }\n        return false;\n    }\n    cloud.createMask = function (img) {\n        var can = document.createElement('canvas');\n        var width = size[0], height = size[1];\n        // 当 width 或 height 为 0 时，调用 cxt.getImageData 会报错\n        if (!width || !height) {\n            return;\n        }\n        var w32 = width >> 5;\n        var board = zeroArray((width >> 5) * height);\n        can.width = width;\n        can.height = height;\n        var cxt = can.getContext('2d');\n        cxt.drawImage(img, 0, 0, img.width, img.height, 0, 0, width, height);\n        var imageData = cxt.getImageData(0, 0, width, height).data;\n        for (var j = 0; j < height; j++) {\n            for (var i = 0; i < width; i++) {\n                var k = w32 * j + (i >> 5);\n                var tmp = (j * width + i) << 2;\n                var flag = imageData[tmp] >= 250 && imageData[tmp + 1] >= 250 && imageData[tmp + 2] >= 250;\n                var m = flag ? 1 << (31 - (i % 32)) : 0;\n                board[k] |= m;\n            }\n        }\n        cloud.board = board;\n        cloud.hasImage = true;\n    };\n    cloud.timeInterval = function (_) {\n        timeInterval = _ == null ? Infinity : _;\n    };\n    cloud.words = function (_) {\n        words = _;\n    };\n    cloud.size = function (_) {\n        size = [+_[0], +_[1]];\n    };\n    cloud.font = function (_) {\n        font = functor(_);\n    };\n    cloud.fontWeight = function (_) {\n        fontWeight = functor(_);\n    };\n    cloud.rotate = function (_) {\n        rotate = functor(_);\n    };\n    cloud.spiral = function (_) {\n        spiral = spirals[_] || _;\n    };\n    cloud.fontSize = function (_) {\n        fontSize = functor(_);\n    };\n    cloud.padding = function (_) {\n        padding = functor(_);\n    };\n    cloud.random = function (_) {\n        random = functor(_);\n    };\n    return cloud;\n}\n//# sourceMappingURL=word-cloud.js.map","import { __assign } from \"tslib\";\nimport { isArray, isFunction, isString } from '@antv/util';\nimport { getContainerSize, LEVEL, log } from '../../utils';\nimport { normalPadding } from '../../utils/padding';\nimport { functor, wordCloud } from '../../utils/transform/word-cloud';\n/**\n * 用 DataSet 转换词云图数据\n * @param params\n */\nexport function transform(params) {\n    var rawOptions = params.options, chart = params.chart;\n    var _a = chart, width = _a.width, height = _a.height, chartPadding = _a.padding, appendPadding = _a.appendPadding, ele = _a.ele;\n    var data = rawOptions.data, imageMask = rawOptions.imageMask, wordField = rawOptions.wordField, weightField = rawOptions.weightField, colorField = rawOptions.colorField, wordStyle = rawOptions.wordStyle, timeInterval = rawOptions.timeInterval, random = rawOptions.random, spiral = rawOptions.spiral, _b = rawOptions.autoFit, autoFit = _b === void 0 ? true : _b, placementStrategy = rawOptions.placementStrategy;\n    if (!data || !data.length) {\n        return [];\n    }\n    var fontFamily = wordStyle.fontFamily, fontWeight = wordStyle.fontWeight, padding = wordStyle.padding, fontSize = wordStyle.fontSize;\n    var arr = getSingleKeyValues(data, weightField);\n    var range = [min(arr), max(arr)];\n    // 变换出 text 和 value 字段\n    var words = data.map(function (datum) { return ({\n        text: datum[wordField],\n        value: datum[weightField],\n        color: datum[colorField],\n        datum: datum,\n    }); });\n    var options = {\n        imageMask: imageMask,\n        font: fontFamily,\n        fontSize: getFontSizeMapping(fontSize, range),\n        fontWeight: fontWeight,\n        // 图表宽高减去 padding 之后的宽高\n        size: getSize({\n            width: width,\n            height: height,\n            padding: chartPadding,\n            appendPadding: appendPadding,\n            autoFit: autoFit,\n            container: ele,\n        }),\n        padding: padding,\n        timeInterval: timeInterval,\n        random: random,\n        spiral: spiral,\n        rotate: getRotate(rawOptions),\n    };\n    // 自定义布局函数\n    if (isFunction(placementStrategy)) {\n        var result = words.map(function (word, index, words) { return (__assign(__assign(__assign({}, word), { hasText: !!word.text, font: functor(options.font)(word, index, words), weight: functor(options.fontWeight)(word, index, words), rotate: functor(options.rotate)(word, index, words), size: functor(options.fontSize)(word, index, words), style: 'normal' }), placementStrategy.call(chart, word, index, words))); });\n        // 添加两个参照数据，分别表示左上角和右下角\n        result.push({\n            text: '',\n            value: 0,\n            x: 0,\n            y: 0,\n            opacity: 0,\n        });\n        result.push({\n            text: '',\n            value: 0,\n            x: options.size[0],\n            y: options.size[1],\n            opacity: 0,\n        });\n        return result;\n    }\n    // 数据准备在外部做，wordCloud 单纯就是做布局\n    return wordCloud(words, options);\n}\n/**\n * 获取最终的实际绘图尺寸：[width, height]\n * @param chart\n */\nexport function getSize(options) {\n    var width = options.width, height = options.height;\n    var container = options.container, autoFit = options.autoFit, padding = options.padding, appendPadding = options.appendPadding;\n    // 由于词云图每个词语的坐标都是先通过 DataSet 根据图表宽高计算出来的，\n    // 也就是说，如果一开始提供给 DataSet 的宽高信息和最终显示的宽高不相同，\n    // 那么就会出现布局错乱的情况，所以这里处理的目的就是让一开始提供给 DataSet 的\n    // 宽高信息与最终显示的宽高信息相同，避免显示错乱。\n    if (autoFit) {\n        var containerSize = getContainerSize(container);\n        width = containerSize.width;\n        height = containerSize.height;\n    }\n    // 宽高不能为 0，否则会造成死循环\n    width = width || 400;\n    height = height || 400;\n    var _a = resolvePadding({ padding: padding, appendPadding: appendPadding }), top = _a[0], right = _a[1], bottom = _a[2], left = _a[3];\n    var result = [width - (left + right), height - (top + bottom)];\n    return result;\n}\n/**\n * 根据图表的 padding 和 appendPadding 计算出图表的最终 padding\n * @param chart\n */\nfunction resolvePadding(options) {\n    var padding = normalPadding(options.padding);\n    var appendPadding = normalPadding(options.appendPadding);\n    var top = padding[0] + appendPadding[0];\n    var right = padding[1] + appendPadding[1];\n    var bottom = padding[2] + appendPadding[2];\n    var left = padding[3] + appendPadding[3];\n    return [top, right, bottom, left];\n}\n/**\n * 处理 imageMask 可能为 url 字符串的情况\n * @param  {HTMLImageElement | string} img\n * @return {Promise}\n */\nexport function processImageMask(img) {\n    return new Promise(function (res, rej) {\n        if (img instanceof HTMLImageElement) {\n            res(img);\n            return;\n        }\n        if (isString(img)) {\n            var image_1 = new Image();\n            image_1.crossOrigin = 'anonymous';\n            image_1.src = img;\n            image_1.onload = function () {\n                res(image_1);\n            };\n            image_1.onerror = function () {\n                log(LEVEL.ERROR, false, 'image %s load failed !!!', img);\n                rej();\n            };\n            return;\n        }\n        log(LEVEL.WARN, img === undefined, 'The type of imageMask option must be String or HTMLImageElement.');\n        rej();\n    });\n}\n/**\n * 把用户提供的 fontSize 值转换成符合 DataSet 要求的值\n * @param options\n * @param range\n */\nexport function getFontSizeMapping(fontSize, range) {\n    if (isFunction(fontSize)) {\n        return fontSize;\n    }\n    if (isArray(fontSize)) {\n        var fMin_1 = fontSize[0], fMax_1 = fontSize[1];\n        if (!range) {\n            return function () { return (fMax_1 + fMin_1) / 2; };\n        }\n        var min_1 = range[0], max_1 = range[1];\n        if (max_1 === min_1) {\n            return function () { return (fMax_1 + fMin_1) / 2; };\n        }\n        return function fontSize(_a) {\n            var value = _a.value;\n            return ((fMax_1 - fMin_1) / (max_1 - min_1)) * (value - min_1) + fMin_1;\n        };\n    }\n    return function () { return fontSize; };\n}\nexport function getSingleKeyValues(data, key) {\n    return data\n        .map(function (v) { return v[key]; })\n        .filter(function (v) {\n        // 过滤非 number\n        if (typeof v === 'number' && !isNaN(v))\n            return true;\n        return false;\n    });\n}\n/**\n * 把用户提供的关于旋转角度的字段值转换成符合 DataSet 要求的值\n * @param options\n */\nfunction getRotate(options) {\n    var _a = resolveRotate(options), rotation = _a.rotation, rotationSteps = _a.rotationSteps;\n    if (!isArray(rotation))\n        return rotation;\n    var min = rotation[0];\n    var max = rotation[1];\n    // 等于 1 时不旋转，所以把每份大小设为 0\n    var perSize = rotationSteps === 1 ? 0 : (max - min) / (rotationSteps - 1);\n    return function rotate() {\n        if (max === min)\n            return max;\n        return Math.floor(Math.random() * rotationSteps) * perSize;\n    };\n}\n/**\n * 确保值在要求范围内\n * @param options\n */\nfunction resolveRotate(options) {\n    var rotationSteps = options.wordStyle.rotationSteps;\n    if (rotationSteps < 1) {\n        log(LEVEL.WARN, false, 'The rotationSteps option must be greater than or equal to 1.');\n        rotationSteps = 1;\n    }\n    return {\n        rotation: options.wordStyle.rotation,\n        rotationSteps: rotationSteps,\n    };\n}\n/**\n * 传入一个元素为数字的数组，\n * 返回该数组中值最小的数字。\n * @param numbers\n */\nfunction min(numbers) {\n    return Math.min.apply(Math, numbers);\n}\n/**\n * 传入一个元素为数字的数组，\n * 返回该数组中值最大的数字。\n * @param numbers\n */\nfunction max(numbers) {\n    return Math.max.apply(Math, numbers);\n}\n//# sourceMappingURL=utils.js.map","import { __spreadArray } from \"tslib\";\nimport { get, isFunction } from '@antv/util';\nimport { animation, interaction, scale, state, theme, tooltip } from '../../adaptor/common';\nimport { point } from '../../adaptor/geometries';\nimport { deepAssign, flow } from '../../utils';\nimport { WORD_CLOUD_COLOR_FIELD } from './constant';\nimport { transform } from './utils';\n/**\n * geometry 配置处理\n * @param params\n */\nfunction geometry(params) {\n    var chart = params.chart, options = params.options;\n    var colorField = options.colorField, color = options.color;\n    var data = transform(params);\n    chart.data(data);\n    var p = deepAssign({}, params, {\n        options: {\n            xField: 'x',\n            yField: 'y',\n            seriesField: colorField && WORD_CLOUD_COLOR_FIELD,\n            rawFields: isFunction(color) && __spreadArray(__spreadArray([], get(options, 'rawFields', []), true), ['datum'], false),\n            point: {\n                color: color,\n                shape: 'word-cloud',\n            },\n        },\n    });\n    var ext = point(p).ext;\n    ext.geometry.label(false);\n    chart.coordinate().reflect('y');\n    chart.axis(false);\n    return params;\n}\n/**\n * meta 配置\n * @param params\n */\nfunction meta(params) {\n    return flow(scale({\n        x: { nice: false },\n        y: { nice: false },\n    }))(params);\n}\n/**\n * 词云图 legend 配置\n * @param params\n */\nexport function legend(params) {\n    var chart = params.chart, options = params.options;\n    var legend = options.legend, colorField = options.colorField;\n    if (legend === false) {\n        chart.legend(false);\n    }\n    else if (colorField) {\n        chart.legend(WORD_CLOUD_COLOR_FIELD, legend);\n    }\n    return params;\n}\n/**\n * 词云图适配器\n * @param chart\n * @param options\n */\nexport function adaptor(params) {\n    // flow 的方式处理所有的配置到 G2 API\n    flow(geometry, meta, tooltip, legend, interaction, animation, theme, state)(params);\n}\n//# sourceMappingURL=adaptor.js.map","import { __assign } from \"tslib\";\nimport { registerShape, Util } from '@antv/g2';\nregisterShape('point', 'word-cloud', {\n    draw: function (cfg, group) {\n        var cx = cfg.x;\n        var cy = cfg.y;\n        var shape = group.addShape('text', {\n            attrs: __assign(__assign({}, getTextAttrs(cfg)), { x: cx, y: cy }),\n        });\n        var rotate = cfg.data.rotate;\n        if (typeof rotate === 'number') {\n            Util.rotate(shape, (rotate * Math.PI) / 180);\n        }\n        return shape;\n    },\n});\nfunction getTextAttrs(cfg) {\n    return {\n        fontSize: cfg.data.size,\n        text: cfg.data.text,\n        textAlign: 'center',\n        fontFamily: cfg.data.font,\n        fontWeight: cfg.data.weight,\n        fill: cfg.color || cfg.defaultStyle.stroke,\n        textBaseline: 'alphabetic',\n    };\n}\n//# sourceMappingURL=word-cloud.js.map","import { ref, type Ref } from 'vue'\nimport { Line } from '@antv/g2plot'\nimport type { ChartHookReturn } from '@/types/chart-hooks'\n\n/* \n * 功能描述: 折线图渲染 Hook\n * 参数: \n *   - container: Ref<HTMLElement | undefined> - 图表容器\n *   - options: LineChartOptions - 图表配置选项\n * 返回: { chartInstance, renderChart, destroyChart }\n */\n\nexport interface LineChartOptions {\n  data: Array<{ label: string; value: number; type?: string }>\n  height?: number\n  isDarkMode?: boolean\n  isMultiSeries?: boolean\n  showPoints?: boolean\n  onRenderComplete?: () => void\n}\n\nexport function useLineChart(\n  container: Ref<HTMLElement | undefined>,\n  initialOptions: LineChartOptions\n): ChartHookReturn {\n  const chartInstance = ref<Line | null>(null)\n  const currentOptions = ref<LineChartOptions>(initialOptions)\n\n  /* \n   * 功能描述: 数字格式化\n   * 参数: {string} text - 要格式化的数字字符串\n   * 返回: {string} - 格式化后的数字\n   */\n  const formatNumber = (text: string) => {\n    const num = parseFloat(text)\n    if (isNaN(num)) return text\n    return Number.isInteger(num) ? num.toString() : num.toFixed(2)\n  }\n\n  /* \n   * 功能描述: 渲染折线图\n   * 参数: newOptions - 可选的新配置，如果不传则使用当前配置\n   */\n  const renderChart = (newOptions?: Partial<LineChartOptions>) => {\n    // 更新配置\n    if (newOptions) {\n      currentOptions.value = { ...currentOptions.value, ...newOptions }\n    }\n    \n    const options = currentOptions.value\n    \n    if (!container.value || !options.data.length) return\n\n    // 销毁现有图表\n    if (chartInstance.value) {\n      chartInstance.value.destroy()\n    }\n\n    const isDark = options.isDarkMode ?? false\n    const isMulti = options.isMultiSeries ?? false\n    const showPoints = options.showPoints ?? true\n\n    chartInstance.value = new Line(container.value, {\n      data: options.data,\n      xField: 'label',\n      yField: 'value',\n      seriesField: isMulti ? 'type' : undefined,\n\n      /* 自适应配置 */\n      autoFit: true,\n      height: options.height || 300,\n\n      /* 样式配置 */\n      color: ['#3b82f6', '#10b981', '#f59e0b', '#8b5cf6', '#06b6d4', '#ef4444', '#f97316', '#84cc16'],\n\n      smooth: true,\n      lineStyle: {\n        lineWidth: 2\n      },\n\n      /* 数据点配置 */\n      point: showPoints\n        ? {\n            size: 3,\n            shape: 'circle',\n            style: {\n              fill: '#3b82f6',\n              stroke: '#ffffff',\n              lineWidth: 1.5\n            }\n          }\n        : undefined as any,\n\n      /* 坐标轴配置 */\n      xAxis: {\n        label: {\n          rotate: Math.PI / 2,  // 旋转90度，文字竖直显示\n          autoHide: false,       // 禁用自动隐藏，确保所有标签都显示\n          style: {\n            fill: isDark ? '#9ca3af' : '#6b7280',\n            fontSize: 11,\n            textAlign: 'left',     // 文本左对齐\n            textBaseline: 'middle' // 文本垂直居中\n          }\n        }\n      },\n\n      yAxis: {\n        label: {\n          formatter: formatNumber,\n          style: {\n            fill: isDark ? '#9ca3af' : '#6b7280'\n          }\n        },\n        grid: {\n          line: {\n            style: {\n              stroke: isDark ? '#374151' : '#e5e7eb',\n              lineDash: [4, 4]\n            }\n          }\n        }\n      },\n\n      /* 图例配置 */\n      legend: isMulti ? {\n        position: 'top',\n        flipPage: true,      // 启用翻页\n        layout: 'horizontal',\n        maxRow: 3,           // 最多3行\n        offsetX: 0,          // 从最左边开始，无偏移\n        offsetY: 0,\n        // 不设置 itemWidth，让图例项自适应宽度\n        itemName: {\n          spacing: 2,        // marker 和文字之间的间距（减小到2）\n          style: {\n            fill: isDark ? '#e5e7eb' : '#374151',\n            fontSize: 12\n          }\n        },\n        itemSpacing: 6,      // 图例项之间的横向间距（减小到6）\n        marker: {\n          symbol: 'hyphen',  // 使用短横线（直线）样式\n          style: {\n            r: 3,            // 减小marker尺寸到3\n            lineWidth: 2\n          }\n        }\n      } : {\n        position: 'top',\n        flipPage: true,\n        maxRow: 3,\n        itemName: {\n          style: {\n            fill: isDark ? '#e5e7eb' : '#374151',\n            fontSize: 12\n          }\n        },\n        itemSpacing: 8\n      },\n\n      /* Tooltip配置 */\n      tooltip: {\n        shared: true,\n        showCrosshairs: true,\n        crosshairs: {\n          line: {\n            style: {\n              stroke: '#3b82f6',\n              lineWidth: 1,\n              lineDash: [4, 4]\n            }\n          }\n        },\n        customContent: (title: string, items: any[]) => {\n          if (!items || items.length === 0) return ''\n\n          let html = `<div style=\"padding: 12px 8px;\">\n            <div style=\"margin-bottom: 10px; font-weight: 500; color: ${isDark ? '#e5e7eb' : '#374151'};\">${title}</div>`\n\n          items.forEach(item => {\n            const value = formatNumber(item.value)\n            // 如果是单系列数据，name 可能是 \"value\"，使用 data 中的 type 字段\n            const displayName = item.data?.type || item.name\n            html += `<div style=\"display: flex; align-items: center; justify-content: space-between; margin-bottom: 6px; gap: 24px;\">\n              <div style=\"display: flex; align-items: center;\">\n                <span style=\"width: 8px; height: 8px; border-radius: 50%; background-color: ${item.color}; margin-right: 8px;\"></span>\n                <span style=\"color: ${isDark ? '#9ca3af' : '#6b7280'};\">${displayName}</span>\n              </div>\n              <span style=\"font-weight: 500; color: ${isDark ? '#f3f4f6' : '#111827'}; white-space: nowrap;\">${value}</span>\n            </div>`\n          })\n\n          html += `</div>`\n          return html\n        }\n      },\n\n      /* 交互配置 */\n      interactions: [{ type: 'marker-active' }],\n\n      /* 滚动条配置 */\n      scrollbar:\n        options.data.length > 18\n          ? {\n              type: 'horizontal',\n              categorySize: 32\n            }\n          : undefined,\n\n      /* 动画配置 */\n      animation: {\n        appear: {\n          animation: 'fade-in',\n          duration: 500\n        }\n      }\n    })\n\n    chartInstance.value.render()\n\n    // 渲染完成回调\n    currentOptions.value.onRenderComplete?.()\n  }\n\n  /* \n   * 功能描述: 销毁图表实例\n   */\n  const destroyChart = () => {\n    if (chartInstance.value) {\n      chartInstance.value.destroy()\n      chartInstance.value = null\n    }\n  }\n\n  return {\n    chartInstance,\n    renderChart,\n    destroyChart\n  }\n}\n\n","import { __assign, __extends } from \"tslib\";\nimport { Plot } from '../../core/plot';\nimport { adaptor } from './adaptor';\nimport { DEFAULT_OPTIONS } from './constant';\n// 注册的shape\nimport './shapes/word-cloud';\nimport { processImageMask, transform } from './utils';\nvar WordCloud = /** @class */ (function (_super) {\n    __extends(WordCloud, _super);\n    function WordCloud() {\n        var _this = _super !== null && _super.apply(this, arguments) || this;\n        /** 词云图 */\n        _this.type = 'word-cloud';\n        return _this;\n    }\n    /**\n     * 获取 词云图 默认配置项\n     * 供外部使用\n     */\n    WordCloud.getDefaultOptions = function () {\n        return DEFAULT_OPTIONS;\n    };\n    /**\n     * @override\n     * @param data\n     */\n    WordCloud.prototype.changeData = function (data) {\n        this.updateOption({ data: data });\n        if (this.options.imageMask) {\n            this.render();\n        }\n        else {\n            this.chart.changeData(transform({ chart: this.chart, options: this.options }));\n        }\n    };\n    /**\n     * 获取默认的 options 配置项\n     */\n    WordCloud.prototype.getDefaultOptions = function () {\n        return WordCloud.getDefaultOptions();\n    };\n    /**\n     * 覆写父类方法，词云图需要加载图片资源，所以需要异步渲染\n     */\n    WordCloud.prototype.render = function () {\n        var _this = this;\n        return new Promise(function (res) {\n            var imageMask = _this.options.imageMask;\n            if (!imageMask) {\n                // 调用父类渲染函数\n                _super.prototype.render.call(_this);\n                res();\n                return;\n            }\n            var handler = function (img) {\n                _this.options = __assign(__assign({}, _this.options), { imageMask: img || null });\n                // 调用父类渲染函数\n                _super.prototype.render.call(_this);\n                res();\n            };\n            processImageMask(imageMask).then(handler).catch(handler);\n        });\n    };\n    /**\n     * 获取 词云图 的适配器\n     */\n    WordCloud.prototype.getSchemaAdaptor = function () {\n        return adaptor;\n    };\n    /**\n     * 覆写父类的方法，因为词云图使用 单独的函数 进行布局，原理上有些不一样\n     */\n    WordCloud.prototype.triggerResize = function () {\n        var _this = this;\n        if (!this.chart.destroyed) {\n            // 当整个词云图图表的宽高信息发生变化时，每个词语的坐标\n            // 需要重新执行 adaptor，不然会出现布局错乱，\n            // 如相邻词语重叠的情况。\n            this.execAdaptor();\n            // 延迟执行，有利于动画更流畅\n            // TODO: 在多次更改画布尺寸时，动画会越来越卡顿，原因未知\n            window.setTimeout(function () {\n                // 执行父类的方法\n                _super.prototype.triggerResize.call(_this);\n            });\n        }\n    };\n    return WordCloud;\n}(Plot));\nexport { WordCloud };\n//# sourceMappingURL=index.js.map","import { __extends } from \"tslib\";\nimport { Plot } from '../core/plot';\nimport { deepAssign } from '../utils';\n/**\n * 给 G2Plot 提供非常简单的开放开发的机制。目的是能够让社区和业务上自己基于 G2Plot 开发自己的定制图表库。主要分成几类图表：\n * 1. 领域专业的图表，内部同学因为没有场景，不一定能做的完善。\n * 2. 定制业务的图表，不具备通用性\n * 3. 趣味性的可视化组件\n * 然后官方可以根据社区的情况，可以进行一些官方推荐和采纳。\n *\n * 如果使用？\n *\n * ```ts\n * import { P } from '@antv/g2plot';\n * import { GeoWorldMap, GeoWorldMapOptions } from 'g2plot-geo-world-map';\n *\n * const plot = new P('container', {\n *   geoJson: '',\n *   longitude: '',\n *   latitude: '',\n * }, GeoWorldMap, defaultOptions);\n *\n * plot.render();\n * ```\n */\nvar P = /** @class */ (function (_super) {\n    __extends(P, _super);\n    /**\n     * 相比普通图表增加 adaptor 参数。\n     * @param container\n     * @param options\n     * @param adaptor\n     * @param defaultOptions\n     */\n    function P(container, options, adaptor, defaultOptions) {\n        var _this = _super.call(this, container, deepAssign({}, defaultOptions, options)) || this;\n        /** 统一为 any plot */\n        _this.type = 'g2-plot';\n        _this.defaultOptions = defaultOptions;\n        _this.adaptor = adaptor;\n        return _this;\n    }\n    /**\n     * 实现父类方法，直接使用传入的\n     */\n    P.prototype.getDefaultOptions = function () {\n        return this.defaultOptions;\n    };\n    /**\n     * 实现父类方法，直接使用传入的\n     */\n    P.prototype.getSchemaAdaptor = function () {\n        return this.adaptor;\n    };\n    return P;\n}(Plot));\nexport { P };\n//# sourceMappingURL=index.js.map","export var version = '2.4.35';\n// G2 自定义能力透出\nimport * as G2 from '@antv/g2';\n/** 开放一些通用的 adaptor 通道方法，实验阶段：不保证稳定性 */\nimport { animation, annotation, interaction, legend, scale, theme, tooltip } from './adaptor/common';\n// 国际化处理\nimport { registerLocale } from './core/locale';\nimport { EN_US_LOCALE } from './locales/en_US';\nimport { ZH_CN_LOCALE } from './locales/zh_CN';\n/** 各个 geometry 的 adaptor，可以让开发者更快的构造图形 */\nexport { area, interval, line, point, polygon, schema } from './adaptor/geometries';\n/** 全局变量 */\nexport { setGlobal } from './core/global';\n/** G2Plot 的 Plot 基类 */\nexport { Plot } from './core/plot';\n/** 对于没有开发完成的图表，可以暂时先放到 Lab 下面，先做体验，稳定后放到根 export */\nexport { Lab } from './lab';\n// 面积图及类型定义 | author by [hustcc](https://github.com/hustcc)\nexport { Area } from './plots/area';\n// 条形图及类型定义 | author by [BBSQQ](https://github.com/BBSQQ)\nexport { Bar } from './plots/bar';\n// 对称条形图及类型定义 | author by [arcsin1](https://github.com/arcsin1)\nexport { BidirectionalBar } from './plots/bidirectional-bar';\n// 箱线图及类型定义 | author by [BBSQQ](https://github.com/BBSQQ), [visiky](https://github.com/visiky)\nexport { Box } from './plots/box';\n// 子弹图及类型定义 | author by [arcsin1](https://github.com/arcsin1)\nexport { Bullet } from './plots/bullet';\n// 弦图及类型定义 | author by [MrSmallLiu](https://github.com/MrSmallLiu), [visiky](https://github.com/visiky)\nexport { Chord } from './plots/chord';\n// circle-packing 及类型定义 | author by [visiky](https://github.com/visiky), [Angeli](https://github.com/Angelii)\nexport { CirclePacking } from './plots/circle-packing';\n// 柱形图及类型定义 | author by [zqlu](https://github.com/zqlu)\nexport { Column } from './plots/column';\n// 混合图形 | author by [liuzhenying](https://github.com/liuzhenying)\nexport { DualAxes } from './plots/dual-axes';\n// 分面图及类型定义 | author by [visiky](https://github.com/visiky)\nexport { Facet } from './plots/facet';\n// 漏斗图及类型定义\nexport { Funnel, FUNNEL_CONVERSATION_FIELD } from './plots/funnel';\n// 仪表盘及类型定义 | author by [hustcc](https://github.com/hustcc)\nexport { Gauge } from './plots/gauge';\n// 热力图及类型定义 | author by [jiazhewang](https://github.com/jiazhewang)\nexport { Heatmap } from './plots/heatmap';\n// 直方图及类型定义 | author by [arcsin1](https://github.com/arcsin1), [visiky](https://github.com/visiky)\nexport { Histogram } from './plots/histogram';\n// 折线图及类型定义 | author by [hustcc](https://github.com/hustcc)\nexport { Line } from './plots/line';\n// 水波图及类型定义 | author by [CarisL](https://github.com/CarisL), [hustcc](https://github.com/hustcc), [pearmini](https://github.com/pearmini)\nexport { addWaterWave, Liquid } from './plots/liquid';\n// 已经废弃，更名为 Mix\nexport { Mix as Mix, Mix as MultiView } from './plots/mix';\n// 饼图及类型定义 | author by [visiky](https://github.com/visiky)\nexport { Pie } from './plots/pie';\n// 进度图及类型定义 | author by [connono](https://github.com/connono)\nexport { Progress } from './plots/progress';\n// 雷达图及类型定义 | author by [visiky](https://github.com/visiky)\nexport { Radar } from './plots/radar';\n// 玉珏图 | author by [yujs](https://github.com/yujs) | updated by [visiky](https://github.com/visiky)\nexport { RadialBar } from './plots/radial-bar';\n// 环形进度图及类型定义 | author by [connono](https://github.com/connono)\nexport { RingProgress } from './plots/ring-progress';\n// 玫瑰图及类型定义 | author by [zhangzhonghe](https://github.com/zhangzhonghe)\nexport { Rose } from './plots/rose';\n// 桑基图及类型定义 | author by [hustcc](https://github.com/hustcc)\nexport { Sankey } from './plots/sankey';\n// 散点图及类型定义 | author by [lxfu1](https://github.com/lxfu1)\nexport { Scatter } from './plots/scatter';\n// K线图及类型定义 | author by [jhwong](https://github.com/jinhuiWong), [visiky](https://github.com/visiky)\nexport { Stock } from './plots/stock';\n// 旭日图及类型定义 | author by [lxfu1](https://github.com/lxfu1), [visiky](https://github.com/visiky)\nexport { Sunburst } from './plots/sunburst';\n// 迷你面积图及类型定义 | author by [connono](https://github.com/connono)\nexport { TinyArea } from './plots/tiny-area';\n// 迷你柱形图及类型定义 | author by [connono](https://github.com/connono)\nexport { TinyColumn } from './plots/tiny-column';\n// 迷你折线图及类型定义 | author by [connono](https://github.com/connono)\nexport { TinyLine } from './plots/tiny-line';\n// 矩形树图\nexport { Treemap } from './plots/treemap';\n// 韦恩图及类型定义 | author by [visiky](https://github.com/visiky)\nexport { Venn } from './plots/venn';\n// 小提琴图及类型定义 | author by [YiSiWang](https://github.com/YiSiWang), [visiky](https://github.com/visiky)\nexport { Violin } from './plots/violin';\n// 瀑布图 | author by [visiky](https://github.com/visiky)\nexport { Waterfall } from './plots/waterfall';\n// 词云图及类型定义 | author by [zhangzhonghe](https://github.com/zhangzhonghe)\nexport { WordCloud } from './plots/word-cloud';\n// 以下开放自定义图表开发的能力（目前仅仅是孵化中）\n/** 所有开放图表都使用 G2Plot.P 作为入口开发，理论上官方的所有图表都可以走 G2Plot.P 的入口（暂时不处理） */\nexport { P } from './plugin';\n// 类型定义导出\nexport * from './types';\n/** 开发 adaptor 可能会用到的方法或一些工具方法，不强制使用 */\nexport { flow, measureTextWidth } from './utils';\n/** 开放 getCanvasPatterng 方法 */\nexport { getCanvasPattern } from './utils/pattern';\nexport { G2 };\n/** 透出 国际化 工具函数，便于使用 */\nexport { registerLocale };\n/** default locale register */\nregisterLocale('en-US', EN_US_LOCALE);\nregisterLocale('zh-CN', ZH_CN_LOCALE);\nexport var adaptors = { scale: scale, legend: legend, tooltip: tooltip, annotation: annotation, interaction: interaction, theme: theme, animation: animation };\n//# sourceMappingURL=index.js.map","export var EN_US_LOCALE = {\n    locale: 'en-US',\n    // General\n    general: {\n        increase: 'Increase',\n        decrease: 'Decrease',\n        root: 'Root',\n    },\n    // Plot Components\n    /** statistic text component */\n    statistic: {\n        total: 'Total',\n    },\n    /** conversionTag component */\n    conversionTag: {\n        label: 'Rate',\n    },\n    legend: {},\n    tooltip: {},\n    slider: {},\n    scrollbar: {},\n    // Plots\n    waterfall: {\n        total: 'Total',\n    },\n};\n//# sourceMappingURL=en_US.js.map","export var ZH_CN_LOCALE = {\n    locale: 'zh-CN',\n    // 通用\n    general: {\n        increase: '增加',\n        decrease: '减少',\n        root: '初始',\n    },\n    // 按照图表组件\n    /** 中心文本 */\n    statistic: {\n        total: '总计',\n    },\n    /** 转化率组件 */\n    conversionTag: {\n        label: '转化率',\n    },\n    legend: {},\n    tooltip: {},\n    slider: {},\n    scrollbar: {},\n    // 按照图表类型\n    waterfall: {\n        total: '总计',\n    },\n};\n//# sourceMappingURL=zh_CN.js.map","<template>\n  <div class=\"flex-1 min-w-0 p-4 bg-white dark:bg-gray-800 rounded shadow\">\n    <div class=\"h-full\">\n      <!-- 隐藏图表标题，图例已经足够说明 -->\n      <!-- <div class=\"mb-2 text-lg font-semibold text-gray-900 dark:text-white\">{{ chart.chart_name }}</div> -->\n      <div v-if=\"chart.chart_desc\" class=\"opacity-80 text-sm mb-2 text-gray-600 dark:text-gray-300\">{{ chart.chart_desc }}</div>\n      <div class=\"h-[300px]\">\n        <div ref=\"chartRef\" class=\"w-full h-full\"></div>\n      </div>\n    </div>\n  </div>\n</template>\n\n<script setup lang=\"ts\">\nimport { ref, onMounted, onUnmounted, watch, computed } from 'vue'\nimport type { ChartData } from '@/types/chat'\nimport { useLineChart } from './useLineChart'\n\ninterface Props {\n  chart: ChartData\n}\n\nconst props = defineProps<Props>()\nconst chartRef = ref<HTMLDivElement>()\n\n/* \n * 功能描述: 安全获取暗色模式状态\n * 返回: {boolean} - 是否为暗色模式\n */\nconst isDarkMode = computed(() => {\n  return document.documentElement.classList.contains('dark')\n})\n\n/* 数据处理模块 */\n// 处理图表数据\nconst processedChart = computed(() => {\n  const values = props.chart.values?.map(item => ({\n    name: item.name,\n    value: typeof item.value === 'string' ? parseFloat(item.value) || 0 : item.value,\n    type: item.type || props.chart.chart_name\n  })) || []\n  \n  return { ...props.chart, values }\n})\n\n// 检测是否有多系列数据\nconst hasMultipleSeries = computed(() => {\n  const values = processedChart.value.values\n  return values.some(d => d.type && d.type !== values[0]?.type)\n})\n\n// 转换数据格式为 hook 需要的格式\nconst chartData = computed(() => {\n  return processedChart.value.values.map(item => ({\n    label: item.name,\n    value: item.value,\n    type: item.type\n  }))\n})\n/* 数据处理模块end */\n\n/* 图表渲染模块 */\nconst { renderChart, destroyChart } = useLineChart(chartRef, {\n  data: chartData.value,\n  height: 300,\n  isDarkMode: isDarkMode.value,\n  isMultiSeries: hasMultipleSeries.value,\n  showPoints: false\n})\n/* 图表渲染模块end */\n\n/* 响应式监听模块 */\n// 监听数据或配置变化，重新渲染\nwatch(\n  [chartData, isDarkMode, hasMultipleSeries],\n  ([newData, newDarkMode, newMultiSeries]) => {\n    renderChart({\n      data: newData,\n      isDarkMode: newDarkMode,\n      isMultiSeries: newMultiSeries\n    })\n  },\n  { deep: true }\n)\n\n// 窗口大小变化时重新渲染（修复移动端tooltip问题）\nlet resizeTimer: NodeJS.Timeout | null = null\nconst handleResize = () => {\n  if (resizeTimer) clearTimeout(resizeTimer)\n  resizeTimer = setTimeout(() => {\n    renderChart()\n  }, 300)\n}\n/* 响应式监听模块end */\n\n/* 生命周期模块 */\nonMounted(() => {\n  renderChart()\n  window.addEventListener('resize', handleResize)\n})\n\nonUnmounted(() => {\n  destroyChart()\n  window.removeEventListener('resize', handleResize)\n  if (resizeTimer) clearTimeout(resizeTimer)\n})\n/* 生命周期模块end */\n</script>\n\n<style scoped>\n/* 图表容器样式 */\n</style>\n","import { ref, type Ref } from 'vue'\nimport { Column } from '@antv/g2plot'\nimport type { ChartHookReturn } from '@/types/chart-hooks'\n\n/* \n * 功能描述: 柱状图渲染 Hook\n * 参数: \n *   - container: Ref<HTMLElement | undefined> - 图表容器\n *   - options: BarChartOptions - 图表配置选项\n * 返回: { chartInstance, renderChart, destroyChart }\n */\n\nexport interface BarChartOptions {\n  data: Array<{ label: string; value: number; type?: string }>\n  height?: number\n  isDarkMode?: boolean\n  isMultiSeries?: boolean\n  showTitle?: boolean\n  onRenderComplete?: () => void\n}\n\nexport function useBarChart(\n  container: Ref<HTMLElement | undefined>,\n  initialOptions: BarChartOptions\n): ChartHookReturn {\n  const chartInstance = ref<Column | null>(null)\n  const currentOptions = ref<BarChartOptions>(initialOptions)\n\n  /* \n   * 功能描述: 数字格式化\n   * 参数: {string} text - 要格式化的数字字符串\n   * 返回: {string} - 格式化后的数字\n   */\n  const formatNumber = (text: string) => {\n    const num = parseFloat(text)\n    if (isNaN(num)) return text\n    return Number.isInteger(num) ? num.toString() : num.toFixed(2)\n  }\n\n  /* \n   * 功能描述: 渲染柱状图\n   * 参数: newOptions - 可选的新配置，如果不传则使用当前配置\n   */\n  const renderChart = (newOptions?: Partial<BarChartOptions>) => {\n    // 更新配置\n    if (newOptions) {\n      currentOptions.value = { ...currentOptions.value, ...newOptions }\n    }\n    \n    const options = currentOptions.value\n    \n    if (!container.value || !options.data.length) return\n\n    // 销毁现有图表\n    if (chartInstance.value) {\n      chartInstance.value.destroy()\n    }\n\n    const isDark = options.isDarkMode ?? false\n    const isMulti = options.isMultiSeries ?? false\n\n    const config: any = {\n      data: options.data,\n      xField: 'label',\n      yField: 'value',\n\n      /* 多系列配置 */\n      ...(isMulti\n        ? {\n            seriesField: 'type',\n            isGroup: true,\n            isStack: false,\n            dodgePadding: 4,  // 增加分组内柱子之间的间距\n            intervalPadding: 20,  // 调整分组之间的间距\n            adjust: [\n              {\n                type: 'dodge',\n                marginRatio: 0.3  // 增加柱子之间的间距比例，避免遮挡\n              }\n            ]\n          }\n        : {}),\n\n      /* 自适应配置 */\n      autoFit: true,\n      height: options.height || 300,\n\n      /* 样式配置 */\n      color: isMulti\n        ? ['#3b82f6', '#10b981', '#f59e0b', '#8b5cf6', '#06b6d4', '#ef4444', '#f97316', '#84cc16']\n        : ['#3b82f6', '#8b5cf6', '#06b6d4', '#10b981', '#f59e0b'],\n\n      columnStyle: {\n        radius: [6, 6, 0, 0]\n      },\n\n      /* 柱子宽度和间距配置 */\n      minColumnWidth: isMulti ? 6 : 20,  // 多指标时使用更小的最小宽度\n      maxColumnWidth: isMulti ? 20 : 40,  // 多指标时限制最大宽度，避免柱子太宽而遮挡\n      columnWidthRatio: isMulti ? 0.4 : 0.5,  // 多指标时减小柱子宽度比例，留出更多空间\n      marginRatio: 0.3, // 柱子之间的间距比例\n\n      /* 坐标轴配置 */\n      xAxis: {\n        label: {\n          rotate: Math.PI / 2,  // 旋转90度，文字竖直显示\n          autoHide: false,       // 禁用自动隐藏，确保所有标签都显示\n          style: {\n            fill: isDark ? '#9ca3af' : '#6b7280',\n            fontSize: 11,\n            textAlign: 'left',     // 文本左对齐\n            textBaseline: 'middle' // 文本垂直居中\n          }\n        }\n      },\n\n      yAxis: {\n        label: {\n          formatter: formatNumber,\n          style: {\n            fill: isDark ? '#9ca3af' : '#6b7280'\n          }\n        },\n        grid: {\n          line: {\n            style: {\n              stroke: isDark ? '#374151' : '#e5e7eb',\n              lineDash: [4, 4]\n            }\n          }\n        }\n      },\n\n      /* 图例配置 */\n      legend: isMulti ? {\n        position: 'top',\n        flipPage: true,      // 启用翻页\n        layout: 'horizontal',\n        maxRow: 3,           // 最多3行\n        offsetX: 0,          // 从最左边开始，无偏移\n        offsetY: 0,\n        // 不设置 itemWidth，让图例项自适应宽度\n        itemName: {\n          spacing: 2,        // marker 和文字之间的间距（减小到2）\n          style: {\n            fill: isDark ? '#e5e7eb' : '#374151',\n            fontSize: 12\n          }\n        },\n        itemSpacing: 6,      // 图例项之间的横向间距（减小到6）\n        marker: {\n          symbol: 'square',\n          style: {\n            r: 3             // 减小marker尺寸到3\n          }\n        }\n      } : {\n        position: 'top',\n        flipPage: true,\n        maxRow: 3,\n        itemName: {\n          style: {\n            fill: isDark ? '#e5e7eb' : '#374151',\n            fontSize: 12\n          }\n        },\n        itemSpacing: 8\n      },\n\n      /* Tooltip配置 */\n      tooltip: {\n        shared: true,\n        showCrosshairs: true,\n        crosshairs: {\n          type: 'x',\n          follow: false,\n          line: {\n            style: {\n              stroke: '#3b82f6',\n              lineWidth: 1,\n              lineDash: [4, 4]\n            }\n          }\n        },\n        customContent: (title: string, items: any[]) => {\n          if (!items || items.length === 0) return ''\n\n          let html = `<div style=\"padding: 12px 8px;\">\n            <div style=\"margin-bottom: 10px; font-weight: 500; color: ${isDark ? '#e5e7eb' : '#374151'};\">${title}</div>`\n\n          items.forEach(item => {\n            const value = formatNumber(item.value)\n            // 如果是单系列数据，name 可能是 \"value\"，使用 data 中的 type 字段\n            const displayName = item.data?.type || item.name\n            html += `<div style=\"display: flex; align-items: center; justify-content: space-between; margin-bottom: 6px; gap: 24px;\">\n              <div style=\"display: flex; align-items: center;\">\n                <span style=\"width: 8px; height: 8px; border-radius: 2px; background-color: ${item.color}; margin-right: 8px;\"></span>\n                <span style=\"color: ${isDark ? '#9ca3af' : '#6b7280'};\">${displayName}</span>\n              </div>\n              <span style=\"font-weight: 500; color: ${isDark ? '#f3f4f6' : '#111827'}; white-space: nowrap;\">${value}</span>\n            </div>`\n          })\n\n          html += `</div>`\n          return html\n        }\n      },\n\n      /* 交互配置 - 移除 element-highlight 避免点击时其他柱子变暗 */\n      interactions: [{ type: 'active-region' }],\n\n      /* 滚动条配置 */\n      scrollbar:\n        options.data.length > 12\n          ? {\n              type: 'horizontal',\n              categorySize: 32\n            }\n          : undefined,\n\n      /* 动画配置 */\n      animation: {\n        appear: {\n          animation: 'scale-in-y',\n          duration: 300\n        }\n      }\n    }\n\n    chartInstance.value = new Column(container.value, config)\n    chartInstance.value.render()\n\n    // 渲染完成回调\n    currentOptions.value.onRenderComplete?.()\n  }\n\n  /* \n   * 功能描述: 销毁图表实例\n   */\n  const destroyChart = () => {\n    if (chartInstance.value) {\n      chartInstance.value.destroy()\n      chartInstance.value = null\n    }\n  }\n\n  return {\n    chartInstance,\n    renderChart,\n    destroyChart\n  }\n}\n\n","<template>\n  <div class=\"flex-1 min-w-0 p-4 bg-white dark:bg-gray-800 rounded shadow\">\n    <div class=\"h-full\">\n      <!-- 隐藏图表标题，图例已经足够说明 -->\n      <!-- <div class=\"mb-2 text-lg font-semibold text-gray-900 dark:text-white\">{{ chart.chart_name }}</div> -->\n      <div v-if=\"chart.chart_desc\" class=\"opacity-80 text-sm mb-2 text-gray-600 dark:text-gray-300\">{{ chart.chart_desc }}</div>\n      <div class=\"h-[300px]\">\n        <div ref=\"chartRef\" class=\"w-full h-full\"></div>\n      </div>\n    </div>\n  </div>\n</template>\n\n<script setup lang=\"ts\">\nimport { ref, onMounted, onUnmounted, watch, computed } from 'vue'\nimport type { ChartData } from '@/types/chat'\nimport { useBarChart } from './useBarChart'\n\ninterface Props {\n  chart: ChartData\n}\n\nconst props = defineProps<Props>()\nconst chartRef = ref<HTMLDivElement>()\n\n/* \n * 功能描述: 安全获取暗色模式状态\n * 返回: {boolean} - 是否为暗色模式\n */\nconst isDarkMode = computed(() => {\n  return document.documentElement.classList.contains('dark')\n})\n\n/* 数据处理模块 */\n// 处理图表数据\nconst processedChart = computed(() => {\n  const values = props.chart.values?.map(item => ({\n    name: item.name,\n    value: typeof item.value === 'string' ? parseFloat(item.value) || 0 : item.value,\n    type: item.type || props.chart.chart_name\n  })) || []\n  \n  return { ...props.chart, values }\n})\n\n// 检测是否有多系列数据\nconst hasMultipleSeries = computed(() => {\n  const values = processedChart.value.values\n  if (values.length === 0) return false\n  \n  // 获取所有唯一的 type 值\n  const uniqueTypes = new Set(values.map(d => d.type).filter(Boolean))\n  return uniqueTypes.size > 1\n})\n\n// 转换数据格式为 hook 需要的格式\nconst chartData = computed(() => {\n  return processedChart.value.values.map(item => ({\n    label: item.name,\n    value: item.value,\n    type: item.type\n  }))\n})\n/* 数据处理模块end */\n\n/* 图表渲染模块 */\nconst { renderChart, destroyChart } = useBarChart(chartRef, {\n  data: chartData.value,\n  height: 300,\n  isDarkMode: isDarkMode.value,\n  isMultiSeries: hasMultipleSeries.value\n})\n/* 图表渲染模块end */\n\n/* 响应式监听模块 */\n// 监听数据或配置变化，重新渲染\nwatch(\n  [chartData, isDarkMode, hasMultipleSeries],\n  ([newData, newDarkMode, newMultiSeries]) => {\n    renderChart({\n      data: newData,\n      isDarkMode: newDarkMode,\n      isMultiSeries: newMultiSeries\n    })\n  },\n  { deep: true }\n)\n\n// 窗口大小变化时重新渲染（修复移动端tooltip问题）\nlet resizeTimer: NodeJS.Timeout | null = null\nconst handleResize = () => {\n  if (resizeTimer) clearTimeout(resizeTimer)\n  resizeTimer = setTimeout(() => {\n    renderChart()\n  }, 300)\n}\n/* 响应式监听模块end */\n\n/* 生命周期模块 */\nonMounted(() => {\n  renderChart()\n  window.addEventListener('resize', handleResize)\n})\n\nonUnmounted(() => {\n  destroyChart()\n  window.removeEventListener('resize', handleResize)\n  if (resizeTimer) clearTimeout(resizeTimer)\n})\n/* 生命周期模块end */\n</script>\n\n<style scoped>\n/* 图表容器样式 */\n</style>\n","import { ref, type Ref } from 'vue'\r\nimport { Pie } from '@antv/g2plot'\r\nimport type { ChartHookReturn } from '@/types/chart-hooks'\r\n\r\n/* \r\n * 功能描述: 饼图渲染 Hook\r\n * 参数: \r\n *   - container: Ref<HTMLElement | undefined> - 图表容器\r\n *   - options: PieChartOptions - 图表配置选项\r\n * 返回: { chartInstance, renderChart, destroyChart }\r\n */\r\n\r\nexport interface PieChartOptions {\r\n  data: Array<{ label: string; value: number }>\r\n  height?: number\r\n  isDarkMode?: boolean\r\n  showStatistic?: boolean\r\n  onRenderComplete?: () => void\r\n}\r\n\r\nexport function usePieChart(\r\n  container: Ref<HTMLElement | undefined>,\r\n  initialOptions: PieChartOptions\r\n): ChartHookReturn {\r\n  const chartInstance = ref<Pie | null>(null)\r\n  const currentOptions = ref<PieChartOptions>(initialOptions)\r\n\r\n  /* \r\n   * 功能描述: 数字格式化\r\n   * 参数: {string} text - 要格式化的数字字符串\r\n   * 返回: {string} - 格式化后的数字\r\n   */\r\n  const formatNumber = (text: string) => {\r\n    const num = parseFloat(text)\r\n    if (isNaN(num)) return text\r\n    return Number.isInteger(num) ? num.toString() : num.toFixed(2)\r\n  }\r\n\r\n  /* \r\n   * 功能描述: 渲染饼图\r\n   * 参数: newOptions - 可选的新配置，如果不传则使用当前配置\r\n   */\r\n  const renderChart = (newOptions?: Partial<PieChartOptions>) => {\r\n    // 更新配置\r\n    if (newOptions) {\r\n      currentOptions.value = { ...currentOptions.value, ...newOptions }\r\n    }\r\n    \r\n    const options = currentOptions.value\r\n    \r\n    if (!container.value || !options.data.length) return\r\n\r\n    // 销毁现有图表\r\n    if (chartInstance.value) {\r\n      chartInstance.value.destroy()\r\n    }\r\n\r\n    const isDark = options.isDarkMode ?? false\r\n    const showStatistic = options.showStatistic ?? true\r\n    \r\n    // 检测是否为移动端\r\n    const isMobile = window.innerWidth <= 768\r\n\r\n    // 转换数据格式为饼图需要的格式\r\n    const pieData = options.data.map(item => ({\r\n      type: item.label,\r\n      value: item.value\r\n    }))\r\n\r\n    chartInstance.value = new Pie(container.value, {\r\n      data: pieData,\r\n      angleField: 'value',\r\n      colorField: 'type',\r\n\r\n      /* 自适应配置 */\r\n      autoFit: true,\r\n      height: options.height || 300,\r\n\r\n      /* 样式配置 */\r\n      color: ['#3b82f6', '#10b981', '#f59e0b', '#8b5cf6', '#06b6d4', '#ef4444', '#f97316', '#84cc16'],\r\n\r\n      /* 饼图样式 - 环形图，优化空间利用 */\r\n      radius: 0.85,\r\n      innerRadius: showStatistic ? 0.64 : 0.5,\r\n\r\n      /* 标签配置 - 移动端不显示标签，PC端蜘蛛线 */\r\n      label: isMobile \r\n        ? false  // 移动端不显示标签\r\n        : {\r\n            type: 'spider',\r\n            labelHeight: 28,\r\n            formatter: (data: any) => `${data.type}: ${formatNumber(String(data.value))}`,\r\n            style: {\r\n              fill: isDark ? '#9ca3af' : '#6b7280',\r\n              fontSize: 12\r\n            },\r\n            offset: 12\r\n          },\r\n\r\n      /* 图例配置 - 顶部布局，最多3行，支持翻页 */\r\n      legend: {\r\n        position: 'top',\r\n        flipPage: true,  // 允许翻页\r\n        itemName: {\r\n          style: {\r\n            fill: isDark ? '#9ca3af' : '#6b7280',\r\n            fontSize: 12\r\n          }\r\n        },\r\n        itemSpacing: isMobile ? 12 : 16,  // 移动端紧凑布局\r\n        maxRow: 3,  // 最多显示3行\r\n        padding: [0, 0, 12, 0],\r\n        // 翻页器样式\r\n        pageNavigator: {\r\n          marker: {\r\n            style: {\r\n              fill: isDark ? '#60a5fa' : '#3b82f6',\r\n              inactiveFill: isDark ? '#4b5563' : '#d1d5db'\r\n            }\r\n          },\r\n          text: {\r\n            style: {\r\n              fill: isDark ? '#9ca3af' : '#6b7280',\r\n              fontSize: 12\r\n            }\r\n          }\r\n        }\r\n      },\r\n\r\n      /* Tooltip配置 - 悬停和点击都显示 */\r\n      tooltip: {\r\n        showTitle: false,\r\n        showMarkers: true,\r\n        shared: false,\r\n        follow: true,\r\n        enterable: true,\r\n        customContent: (_title: string, items: any[]) => {\r\n          if (!items || items.length === 0) return ''\r\n\r\n          let html = `<div style=\"padding: 12px 10px; min-width: 180px; background: ${isDark ? '#1f2937' : '#ffffff'}; border-radius: 6px; \">`\r\n\r\n          items.forEach(item => {\r\n            const value = formatNumber(item.value)\r\n            // 饼图使用 item.name 即可，因为我们设置了 colorField: 'type'\r\n            const displayName = item.name\r\n            const total = pieData.reduce((sum, d) => sum + d.value, 0)\r\n            const percentage = ((item.value / total) * 100).toFixed(1)\r\n            \r\n            html += `<div style=\"margin-bottom: 4px;\">\r\n              <div style=\"display: flex; align-items: center; margin-bottom: 6px;\">\r\n                <span style=\"width: 12px; height: 12px; border-radius: 50%; background-color: ${item.color}; margin-right: 8px; flex-shrink: 0;\"></span>\r\n                <span style=\"font-weight: 600; font-size: 14px; color: ${isDark ? '#f3f4f6' : '#111827'};\">${displayName}</span>\r\n              </div>\r\n              <div style=\"padding-left: 20px; display: flex; flex-direction: column; gap: 4px;\">\r\n                <div style=\"display: flex; justify-content: space-between; align-items: center;\">\r\n                  <span style=\"color: ${isDark ? '#9ca3af' : '#6b7280'}; font-size: 12px;\">数值:</span>\r\n                  <span style=\"font-weight: 600; color: ${isDark ? '#f3f4f6' : '#111827'}; font-size: 13px; margin-left: 12px;\">${value}</span>\r\n                </div>\r\n                <div style=\"display: flex; justify-content: space-between; align-items: center;\">\r\n                  <span style=\"color: ${isDark ? '#9ca3af' : '#6b7280'}; font-size: 12px;\">占比:</span>\r\n                  <span style=\"font-weight: 600; color: ${isDark ? '#10b981' : '#059669'}; font-size: 13px; margin-left: 12px;\">${percentage}%</span>\r\n                </div>\r\n              </div>\r\n            </div>`\r\n          })\r\n\r\n          // 添加总计信息\r\n          const total = pieData.reduce((sum, d) => sum + d.value, 0)\r\n          html += `<div style=\"margin-top: 8px; padding-top: 8px; border-top: 1px solid ${isDark ? '#374151' : '#e5e7eb'};\">\r\n            <div style=\"display: flex; justify-content: space-between; align-items: center;\">\r\n              <span style=\"color: ${isDark ? '#9ca3af' : '#6b7280'}; font-size: 12px;\">总计:</span>\r\n              <span style=\"font-weight: 600; color: ${isDark ? '#60a5fa' : '#3b82f6'}; font-size: 13px;\">${formatNumber(String(total))}</span>\r\n            </div>\r\n          </div>`\r\n\r\n          html += `</div>`\r\n          return html\r\n        }\r\n      },\r\n\r\n      /* 交互配置 - 点击仅显示tooltip，不修改中心文字 */\r\n      interactions: [\r\n        { type: 'element-selected' }, \r\n        { type: 'element-active' }\r\n      ],\r\n\r\n      /* 中心文本配置 - 更大的中心区域，文字更清晰 */\r\n      statistic: showStatistic\r\n        ? {\r\n            title: {\r\n              offsetY: -8,\r\n              style: {\r\n                fontSize: '13px',\r\n                fill: isDark ? '#9ca3af' : '#6b7280',\r\n                fontWeight: 'normal'\r\n              },\r\n              content: '总计'\r\n            },\r\n            content: {\r\n              offsetY: 8,\r\n              style: {\r\n                fontSize: '22px',\r\n                fill: isDark ? '#fff' : '#1f2937',\r\n                fontWeight: 'bold'\r\n              },\r\n              formatter: () => {\r\n                const total = pieData.reduce((sum, item) => sum + item.value, 0)\r\n                return formatNumber(String(total))\r\n              }\r\n            }\r\n          }\r\n        : undefined,\r\n\r\n      /* 动画配置 */\r\n      animation: {\r\n        appear: {\r\n          animation: 'wave-in',\r\n          duration: 800\r\n        }\r\n      }\r\n    })\r\n\r\n    chartInstance.value.render()\r\n\r\n    // 渲染完成回调\r\n    currentOptions.value.onRenderComplete?.()\r\n  }\r\n\r\n  /* \r\n   * 功能描述: 销毁图表实例\r\n   */\r\n  const destroyChart = () => {\r\n    if (chartInstance.value) {\r\n      chartInstance.value.destroy()\r\n      chartInstance.value = null\r\n    }\r\n  }\r\n\r\n  return {\r\n    chartInstance,\r\n    renderChart,\r\n    destroyChart\r\n  }\r\n}\r\n\r\n","<template>\n  <div class=\"flex-1 min-w-0 p-2 bg-white dark:bg-gray-800 rounded shadow\">\n    <div class=\"h-full\">\n      <!-- 隐藏图表标题，图例已经足够说明 -->\n      <!-- <div class=\"mb-1 text-base font-semibold text-gray-900 dark:text-white px-2\">{{ chart.chart_name }}</div> -->\n      <div v-if=\"chart.chart_desc\" class=\"opacity-80 text-xs mb-1 text-gray-600 dark:text-gray-300 px-2\">{{ chart.chart_desc }}</div>\n      <div class=\"h-[340px]\">\n        <div ref=\"chartRef\" class=\"w-full h-full\"></div>\n      </div>\n    </div>\n  </div>\n</template>\n\n<script setup lang=\"ts\">\nimport { ref, onMounted, onUnmounted, watch, computed } from 'vue'\nimport type { ChartData } from '@/types/chat'\nimport { usePieChart } from './usePieChart'\n\ninterface Props {\n  chart: ChartData\n}\n\nconst props = defineProps<Props>()\nconst chartRef = ref<HTMLDivElement>()\n\n/* \n * 功能描述: 安全获取暗色模式状态\n * 返回: {boolean} - 是否为暗色模式\n */\nconst isDarkMode = computed(() => {\n  return document.documentElement.classList.contains('dark')\n})\n\n/* 数据处理模块 */\n/* \n * 功能描述: 处理图表数据，智能识别分类维度\n * - 多指标数据：选择第一个指标，按name（如省份）分组展示占比\n * - 单指标数据：直接按name或type分组展示占比\n * 返回: {ChartData} - 处理后的图表数据\n */\nconst processedChart = computed(() => {\n  const rawValues = props.chart.values || []\n  \n  if (rawValues.length === 0) {\n    return { ...props.chart, values: [] }\n  }\n  \n  // 检测数据结构\n  const uniqueTypes = [...new Set(rawValues.map(item => item.type).filter(Boolean))]\n  const uniqueNames = [...new Set(rawValues.map(item => item.name).filter(Boolean))]\n  const hasCategoryField = rawValues.some(item => item.category && item.category.trim() !== '')\n  \n  // 判断是否为多指标数据：有多个type（如\"在网客户数\"、\"其他指标\"）\n  const isMultiMeasure = uniqueTypes.length > 1\n  \n  console.log('🥧 饼图数据诊断:', {\n    总数据量: rawValues.length,\n    唯一类型数: uniqueTypes.length,\n    类型列表: uniqueTypes,\n    唯一名称数: uniqueNames.length,\n    名称示例: uniqueNames.slice(0, 5),\n    有category字段: hasCategoryField,\n    是否多指标: isMultiMeasure,\n    前3条数据: rawValues.slice(0, 3)\n  })\n  \n  let values\n  \n  if (isMultiMeasure) {\n    // ⭐ 多指标数据：选择第一个指标，按name（省份）分组\n    const selectedType = uniqueTypes[0]\n    \n    console.log('📊 多指标饼图处理:', {\n      所有指标: uniqueTypes,\n      选中指标: selectedType,\n      将按name分组: true\n    })\n    \n    // 筛选出选中type的数据，按name聚合\n    const aggregated = new Map<string, number>()\n    rawValues\n      .filter(item => item.type === selectedType)\n      .forEach(item => {\n        // 优先使用category，否则使用name\n        const groupKey = (hasCategoryField ? item.category : item.name) || '其他'\n        const value = typeof item.value === 'string' ? parseFloat(item.value) || 0 : item.value\n        aggregated.set(groupKey, (aggregated.get(groupKey) || 0) + value)\n      })\n    \n    values = Array.from(aggregated.entries()).map(([name, value]) => ({\n      name,\n      value,\n      type: name\n    }))\n    \n    console.log('✅ 多指标按name聚合结果:', {\n      分组数量: values.length,\n      前5项: values.slice(0, 5).map(v => ({ name: v.name, value: v.value }))\n    })\n    \n  } else if (uniqueTypes.length === 1 && uniqueNames.length > 1) {\n    // ⭐ 单指标多分类：直接按name分组\n    const aggregated = new Map<string, number>()\n    rawValues.forEach(item => {\n      const groupKey = (hasCategoryField ? item.category : item.name) || '其他'\n      const value = typeof item.value === 'string' ? parseFloat(item.value) || 0 : item.value\n      aggregated.set(groupKey, (aggregated.get(groupKey) || 0) + value)\n    })\n    \n    values = Array.from(aggregated.entries()).map(([name, value]) => ({\n      name,\n      value,\n      type: name\n    }))\n    \n    console.log('✅ 单指标按name聚合结果:', values.length, '项')\n    \n  } else {\n    // ⭐ 简单数据：直接使用\n    values = rawValues.map(item => ({\n      name: item.name || item.type || '未知',\n      value: typeof item.value === 'string' ? parseFloat(item.value) || 0 : item.value,\n      type: item.type || item.name\n    }))\n    \n    console.log('✅ 直接使用数据:', values.length, '项')\n  }\n  \n  return { ...props.chart, values }\n})\n\n// 转换数据格式为 hook 需要的格式\nconst chartData = computed(() => {\n  return processedChart.value.values.map(item => ({\n    label: item.name,\n    value: item.value\n  }))\n})\n/* 数据处理模块end */\n\n/* 图表渲染模块 */\nconst { renderChart, destroyChart } = usePieChart(chartRef, {\n  data: chartData.value,\n  height: 340,\n  isDarkMode: isDarkMode.value,\n  showStatistic: true\n})\n/* 图表渲染模块end */\n\n/* 响应式监听模块 */\n// 监听数据或配置变化，重新渲染\nwatch(\n  [chartData, isDarkMode],\n  ([newData, newDarkMode]) => {\n    renderChart({\n      data: newData,\n      isDarkMode: newDarkMode\n    })\n  },\n  { deep: true }\n)\n\n// 窗口大小变化时重新渲染（修复移动端tooltip问题）\nlet resizeTimer: NodeJS.Timeout | null = null\nconst handleResize = () => {\n  if (resizeTimer) clearTimeout(resizeTimer)\n  resizeTimer = setTimeout(() => {\n    renderChart()\n  }, 300)\n}\n/* 响应式监听模块end */\n\n/* 生命周期模块 */\nonMounted(() => {\n  renderChart()\n  window.addEventListener('resize', handleResize)\n})\n\nonUnmounted(() => {\n  destroyChart()\n  window.removeEventListener('resize', handleResize)\n  if (resizeTimer) clearTimeout(resizeTimer)\n})\n/* 生命周期模块end */\n</script>\n\n<style scoped>\n/* 饼图容器样式 */\n</style>\n","import { ref, type Ref } from 'vue'\r\nimport { Area } from '@antv/g2plot'\r\nimport type { ChartHookReturn } from '@/types/chart-hooks'\r\n\r\n/* \r\n * 功能描述: 面积图渲染 Hook\r\n * 参数: \r\n *   - container: Ref<HTMLElement | undefined> - 图表容器\r\n *   - options: AreaChartOptions - 图表配置选项\r\n * 返回: { chartInstance, renderChart, destroyChart }\r\n */\r\n\r\nexport interface AreaChartOptions {\r\n  data: Array<{ label: string; value: number; type?: string }>\r\n  height?: number\r\n  isDarkMode?: boolean\r\n  isMultiSeries?: boolean\r\n  isStacked?: boolean\r\n  onRenderComplete?: () => void\r\n}\r\n\r\nexport function useAreaChart(\r\n  container: Ref<HTMLElement | undefined>,\r\n  initialOptions: AreaChartOptions\r\n): ChartHookReturn {\r\n  const chartInstance = ref<Area | null>(null)\r\n  const currentOptions = ref<AreaChartOptions>(initialOptions)\r\n\r\n  /* \r\n   * 功能描述: 数字格式化\r\n   * 参数: {string} text - 要格式化的数字字符串\r\n   * 返回: {string} - 格式化后的数字\r\n   */\r\n  const formatNumber = (text: string) => {\r\n    const num = parseFloat(text)\r\n    if (isNaN(num)) return text\r\n    return Number.isInteger(num) ? num.toString() : num.toFixed(2)\r\n  }\r\n\r\n  /* \r\n   * 功能描述: 渲染面积图\r\n   * 参数: newOptions - 可选的新配置，如果不传则使用当前配置\r\n   */\r\n  const renderChart = (newOptions?: Partial<AreaChartOptions>) => {\r\n    // 更新配置\r\n    if (newOptions) {\r\n      currentOptions.value = { ...currentOptions.value, ...newOptions }\r\n    }\r\n    \r\n    const options = currentOptions.value\r\n    \r\n    if (!container.value || !options.data.length) return\r\n\r\n    // 销毁现有图表\r\n    if (chartInstance.value) {\r\n      chartInstance.value.destroy()\r\n    }\r\n\r\n    const isDark = options.isDarkMode ?? false\r\n    const isMulti = options.isMultiSeries ?? false\r\n    const isStacked = options.isStacked ?? false\r\n\r\n    chartInstance.value = new Area(container.value, {\r\n      data: options.data,\r\n      xField: 'label',\r\n      yField: 'value',\r\n      seriesField: isMulti ? 'type' : undefined,\r\n      \r\n      /* 堆叠配置 */\r\n      isStack: isStacked,\r\n\r\n      /* 自适应配置 */\r\n      autoFit: true,\r\n      height: options.height || 300,\r\n\r\n      /* 样式配置 */\r\n      color: ['#3b82f6', '#10b981', '#f59e0b', '#8b5cf6', '#06b6d4', '#ef4444'],\r\n      \r\n      smooth: true,\r\n      \r\n      /* 面积样式 */\r\n      areaStyle: {\r\n        fillOpacity: 0.4\r\n      },\r\n      \r\n      /* 线条样式 */\r\n      line: {\r\n        style: {\r\n          lineWidth: 2\r\n        }\r\n      },\r\n\r\n      /* 数据点配置 */\r\n      point: {\r\n        size: 3,\r\n        shape: 'circle',\r\n        style: {\r\n          fill: '#ffffff',\r\n          stroke: '#3b82f6',\r\n          lineWidth: 1.5\r\n        }\r\n      },\r\n\r\n      /* 坐标轴配置 */\r\n      xAxis: {\r\n        label: {\r\n          autoRotate: true,\r\n          autoHide: true,\r\n          style: {\r\n            fill: isDark ? '#9ca3af' : '#6b7280',\r\n            fontSize: 12\r\n          }\r\n        }\r\n      },\r\n\r\n      yAxis: {\r\n        label: {\r\n          formatter: formatNumber,\r\n          style: {\r\n            fill: isDark ? '#9ca3af' : '#6b7280'\r\n          }\r\n        },\r\n        grid: {\r\n          line: {\r\n            style: {\r\n              stroke: isDark ? '#374151' : '#e5e7eb',\r\n              lineDash: [4, 4]\r\n            }\r\n          }\r\n        }\r\n      },\r\n\r\n      /* 图例配置 */\r\n      legend: {\r\n        position: 'top',\r\n        flipPage: true,\r\n        maxRow: 3,\r\n        itemName: {\r\n          style: {\r\n            fill: isDark ? '#e5e7eb' : '#374151',\r\n            fontSize: 12\r\n          }\r\n        }\r\n      },\r\n\r\n      /* Tooltip配置 */\r\n      tooltip: {\r\n        shared: true,\r\n        showCrosshairs: true,\r\n        crosshairs: {\r\n          line: {\r\n            style: {\r\n              stroke: '#3b82f6',\r\n              lineWidth: 1,\r\n              lineDash: [4, 4]\r\n            }\r\n          }\r\n        },\r\n        customContent: (title: string, items: any[]) => {\r\n          if (!items || items.length === 0) return ''\r\n\r\n          let html = `<div style=\"padding: 12px 8px;\">\r\n            <div style=\"margin-bottom: 10px; font-weight: 500; color: ${isDark ? '#e5e7eb' : '#374151'};\">${title}</div>`\r\n\r\n          items.forEach(item => {\r\n            const value = formatNumber(item.value)\r\n            const displayName = item.data?.type || item.name\r\n            html += `<div style=\"display: flex; align-items: center; justify-content: space-between; margin-bottom: 6px; gap: 24px;\">\r\n              <div style=\"display: flex; align-items: center;\">\r\n                <span style=\"width: 8px; height: 8px; border-radius: 50%; background-color: ${item.color}; margin-right: 8px;\"></span>\r\n                <span style=\"color: ${isDark ? '#9ca3af' : '#6b7280'};\">${displayName}</span>\r\n              </div>\r\n              <span style=\"font-weight: 500; color: ${isDark ? '#f3f4f6' : '#111827'}; white-space: nowrap;\">${value}</span>\r\n            </div>`\r\n          })\r\n\r\n          html += `</div>`\r\n          return html\r\n        }\r\n      },\r\n\r\n      /* 交互配置 */\r\n      interactions: [\r\n        { type: 'marker-active' },\r\n        { type: 'legend-highlight' }\r\n      ],\r\n\r\n      /* 滚动条配置 */\r\n      scrollbar:\r\n        options.data.length > 18\r\n          ? {\r\n              type: 'horizontal',\r\n              categorySize: 32\r\n            }\r\n          : undefined,\r\n\r\n      /* 动画配置 */\r\n      animation: {\r\n        appear: {\r\n          animation: 'wave-in',\r\n          duration: 500\r\n        }\r\n      }\r\n    })\r\n\r\n    chartInstance.value.render()\r\n\r\n    // 渲染完成回调\r\n    currentOptions.value.onRenderComplete?.()\r\n  }\r\n\r\n  /* \r\n   * 功能描述: 销毁图表实例\r\n   */\r\n  const destroyChart = () => {\r\n    if (chartInstance.value) {\r\n      chartInstance.value.destroy()\r\n      chartInstance.value = null\r\n    }\r\n  }\r\n\r\n  return {\r\n    chartInstance,\r\n    renderChart,\r\n    destroyChart\r\n  }\r\n}\r\n\r\n","/*\r\n * 功能描述: 面积图组件\r\n * 使用场景: 时间序列趋势展示、累积变化可视化\r\n */\r\n<template>\r\n  <div class=\"flex-1 min-w-0 p-4 bg-white dark:bg-gray-800 rounded shadow\">\r\n    <div class=\"h-full\">\r\n      <div class=\"mb-2 text-lg font-semibold text-gray-900 dark:text-white\">{{ chart.chart_name }}</div>\r\n      <div class=\"opacity-80 text-sm mb-2 text-gray-600 dark:text-gray-300\">{{ chart.chart_desc }}</div>\r\n      <div class=\"h-[300px]\">\r\n        <div ref=\"chartRef\" class=\"w-full h-full\"></div>\r\n      </div>\r\n    </div>\r\n  </div>\r\n</template>\r\n\r\n<script setup lang=\"ts\">\r\nimport { ref, onMounted, onUnmounted, watch, computed } from 'vue'\r\nimport type { ChartData } from '@/types/chat'\r\nimport { useAreaChart } from './useAreaChart'\r\n\r\ninterface Props {\r\n  chart: ChartData\r\n}\r\n\r\nconst props = defineProps<Props>()\r\nconst chartRef = ref<HTMLDivElement>()\r\n\r\n/* \r\n * 功能描述: 安全获取暗色模式状态\r\n * 返回: {boolean} - 是否为暗色模式\r\n */\r\nconst isDarkMode = computed(() => {\r\n  return document.documentElement.classList.contains('dark')\r\n})\r\n\r\n/* 数据处理模块 */\r\n// 处理图表数据\r\nconst processedChart = computed(() => {\r\n  const values = props.chart.values?.map(item => ({\r\n    name: item.name,\r\n    value: typeof item.value === 'string' ? parseFloat(item.value) || 0 : item.value,\r\n    type: item.type || props.chart.chart_name\r\n  })) || []\r\n  \r\n  return { ...props.chart, values }\r\n})\r\n\r\n// 检测是否有多系列数据\r\nconst hasMultipleSeries = computed(() => {\r\n  const values = processedChart.value.values\r\n  if (values.length === 0) return false\r\n  \r\n  const uniqueTypes = new Set(values.map(d => d.type).filter(Boolean))\r\n  return uniqueTypes.size > 1\r\n})\r\n\r\n// 转换数据格式为 hook 需要的格式\r\nconst chartData = computed(() => {\r\n  return processedChart.value.values.map(item => ({\r\n    label: item.name,\r\n    value: item.value,\r\n    type: item.type\r\n  }))\r\n})\r\n/* 数据处理模块end */\r\n\r\n/* 图表渲染模块 */\r\nconst { renderChart, destroyChart } = useAreaChart(chartRef, {\r\n  data: chartData.value,\r\n  height: 300,\r\n  isDarkMode: isDarkMode.value,\r\n  isMultiSeries: hasMultipleSeries.value,\r\n  isStacked: false\r\n})\r\n/* 图表渲染模块end */\r\n\r\n/* 响应式监听模块 */\r\n// 监听数据或配置变化，重新渲染\r\nwatch(\r\n  [chartData, isDarkMode, hasMultipleSeries],\r\n  ([newData, newDarkMode, newMultiSeries]) => {\r\n    renderChart({\r\n      data: newData,\r\n      isDarkMode: newDarkMode,\r\n      isMultiSeries: newMultiSeries\r\n    })\r\n  },\r\n  { deep: true }\r\n)\r\n\r\n// 窗口大小变化时重新渲染（修复移动端tooltip问题）\r\nlet resizeTimer: NodeJS.Timeout | null = null\r\nconst handleResize = () => {\r\n  if (resizeTimer) clearTimeout(resizeTimer)\r\n  resizeTimer = setTimeout(() => {\r\n    renderChart()\r\n  }, 300)\r\n}\r\n/* 响应式监听模块end */\r\n\r\n/* 生命周期模块 */\r\nonMounted(() => {\r\n  renderChart()\r\n  window.addEventListener('resize', handleResize)\r\n})\r\n\r\nonUnmounted(() => {\r\n  destroyChart()\r\n  window.removeEventListener('resize', handleResize)\r\n  if (resizeTimer) clearTimeout(resizeTimer)\r\n})\r\n/* 生命周期模块end */\r\n</script>\r\n\r\n<style scoped>\r\n/* 面积图容器样式 */\r\n</style>\r\n\r\n","import { ref, type Ref } from 'vue'\nimport { Scatter } from '@antv/g2plot'\nimport type { ChartHookReturn } from '@/types/chart-hooks'\n\n/* \n * 功能描述: 散点图渲染 Hook\n * 参数: \n *   - container: Ref<HTMLElement | undefined> - 图表容器\n *   - options: ScatterChartOptions - 图表配置选项\n * 返回: { chartInstance, renderChart, destroyChart }\n */\n\nexport interface ScatterChartOptions {\n  data: Array<{ x: number; y: number; category?: string; label?: string }>\n  height?: number\n  isDarkMode?: boolean\n  hasCategory?: boolean\n  showRegression?: boolean\n  onRenderComplete?: () => void\n}\n\nexport function useScatterChart(\n  container: Ref<HTMLElement | undefined>,\n  initialOptions: ScatterChartOptions\n): ChartHookReturn {\n  const chartInstance = ref<Scatter | null>(null)\n  const currentOptions = ref<ScatterChartOptions>(initialOptions)\n\n  /* \n   * 功能描述: 数字格式化\n   * 参数: {string} text - 要格式化的数字字符串\n   * 返回: {string} - 格式化后的数字\n   */\n  const formatNumber = (text: string | number) => {\n    const num = typeof text === 'string' ? parseFloat(text) : text\n    if (isNaN(num)) return String(text)\n    return Number.isInteger(num) ? num.toString() : num.toFixed(2)\n  }\n\n  /* \n   * 功能描述: 渲染散点图\n   * 参数: newOptions - 可选的新配置，如果不传则使用当前配置\n   */\n  const renderChart = (newOptions?: Partial<ScatterChartOptions>) => {\n    // 更新配置\n    if (newOptions) {\n      currentOptions.value = { ...currentOptions.value, ...newOptions }\n    }\n    \n    const options = currentOptions.value\n    \n    if (!container.value || !options.data.length) return\n\n    // 销毁现有图表\n    if (chartInstance.value) {\n      chartInstance.value.destroy()\n    }\n\n    const isDark = options.isDarkMode ?? false\n    const hasCategory = options.hasCategory ?? false\n\n    chartInstance.value = new Scatter(container.value, {\n      data: options.data,\n      xField: 'x',\n      yField: 'y',\n      colorField: hasCategory ? 'category' : undefined,\n      sizeField: 'y',\n      \n      /* 自适应配置 */\n      autoFit: true,\n      height: options.height || 300,\n\n      /* 样式配置 */\n      color: ['#3b82f6', '#10b981', '#f59e0b', '#8b5cf6', '#06b6d4', '#ef4444'],\n      \n      /* 散点样式 */\n      size: [4, 16],\n      shape: 'circle',\n      pointStyle: {\n        fillOpacity: 0.6,\n        stroke: '#ffffff',\n        lineWidth: 1\n      },\n\n      /* 坐标轴配置 */\n      xAxis: {\n        nice: true,\n        label: {\n          formatter: formatNumber,\n          style: {\n            fill: isDark ? '#9ca3af' : '#6b7280',\n            fontSize: 12\n          }\n        },\n        grid: {\n          line: {\n            style: {\n              stroke: isDark ? '#374151' : '#e5e7eb',\n              lineDash: [4, 4]\n            }\n          }\n        }\n      },\n\n      yAxis: {\n        nice: true,\n        label: {\n          formatter: formatNumber,\n          style: {\n            fill: isDark ? '#9ca3af' : '#6b7280'\n          }\n        },\n        grid: {\n          line: {\n            style: {\n              stroke: isDark ? '#374151' : '#e5e7eb',\n              lineDash: [4, 4]\n            }\n          }\n        }\n      },\n\n      /* 图例配置 */\n      legend: hasCategory ? {\n        position: 'top',\n        flipPage: true,\n        itemName: {\n          style: {\n            fill: isDark ? '#e5e7eb' : '#374151',\n            fontSize: 12\n          }\n        }\n      } : false,\n\n      /* Tooltip配置 */\n      tooltip: {\n        showTitle: true,\n        customContent: (_title: string, items: any[]) => {\n          if (!items || items.length === 0) return ''\n\n          const item = items[0]\n          const data = item.data\n          \n          let html = `<div style=\"padding: 12px 8px;\">`\n          \n          if (data.label) {\n            html += `<div style=\"margin-bottom: 8px; font-weight: 500; color: ${isDark ? '#e5e7eb' : '#374151'};\">${data.label}</div>`\n          }\n          \n          if (hasCategory && data.category) {\n            html += `<div style=\"display: flex; align-items: center; margin-bottom: 6px;\">\n              <span style=\"width: 8px; height: 8px; border-radius: 50%; background-color: ${item.color}; margin-right: 8px;\"></span>\n              <span style=\"color: ${isDark ? '#9ca3af' : '#6b7280'};\">${data.category}</span>\n            </div>`\n          }\n          \n          html += `<div style=\"color: ${isDark ? '#9ca3af' : '#6b7280'}; margin-bottom: 4px;\">\n            X: <span style=\"font-weight: 500; color: ${isDark ? '#f3f4f6' : '#111827'};\">${formatNumber(data.x)}</span>\n          </div>\n          <div style=\"color: ${isDark ? '#9ca3af' : '#6b7280'};\">\n            Y: <span style=\"font-weight: 500; color: ${isDark ? '#f3f4f6' : '#111827'};\">${formatNumber(data.y)}</span>\n          </div></div>`\n          \n          return html\n        }\n      },\n\n      /* 交互配置 */\n      interactions: [\n        { type: 'element-highlight' },\n        { type: 'legend-highlight' }\n      ],\n\n      /* 趋势线配置（可选） */\n      regressionLine: options.showRegression ? {\n        type: 'linear',\n        style: {\n          stroke: '#3b82f6',\n          lineWidth: 2,\n          lineDash: [4, 4]\n        }\n      } : undefined,\n\n      /* 动画配置 */\n      animation: {\n        appear: {\n          animation: 'zoom-in',\n          duration: 300\n        }\n      }\n    })\n\n    chartInstance.value.render()\n\n    // 渲染完成回调\n    currentOptions.value.onRenderComplete?.()\n  }\n\n  /* \n   * 功能描述: 销毁图表实例\n   */\n  const destroyChart = () => {\n    if (chartInstance.value) {\n      chartInstance.value.destroy()\n      chartInstance.value = null\n    }\n  }\n\n  return {\n    chartInstance,\n    renderChart,\n    destroyChart\n  }\n}\n\n","/*\r\n * 功能描述: 散点图组件\r\n * 使用场景: 相关性分析、趋势预测、数据分布展示\r\n */\r\n<template>\r\n  <div class=\"flex-1 min-w-0 p-4 bg-white dark:bg-gray-800 rounded shadow\">\r\n    <div class=\"h-full\">\r\n      <div class=\"mb-2 text-lg font-semibold text-gray-900 dark:text-white\">{{ chart.chart_name }}</div>\r\n      <div class=\"opacity-80 text-sm mb-2 text-gray-600 dark:text-gray-300\">{{ chart.chart_desc }}</div>\r\n      <div class=\"h-[300px]\">\r\n        <div ref=\"chartRef\" class=\"w-full h-full\"></div>\r\n      </div>\r\n    </div>\r\n  </div>\r\n</template>\r\n\r\n<script setup lang=\"ts\">\r\nimport { ref, onMounted, onUnmounted, watch, computed } from 'vue'\r\nimport type { ChartData } from '@/types/chat'\r\nimport { useScatterChart } from './useScatterChart'\r\n\r\ninterface Props {\r\n  chart: ChartData\r\n}\r\n\r\nconst props = defineProps<Props>()\r\nconst chartRef = ref<HTMLDivElement>()\r\n\r\n/* \r\n * 功能描述: 安全获取暗色模式状态\r\n * 返回: {boolean} - 是否为暗色模式\r\n */\r\nconst isDarkMode = computed(() => {\r\n  return document.documentElement.classList.contains('dark')\r\n})\r\n\r\n/* 数据处理模块 */\r\n// 处理散点图数据\r\nconst processedChart = computed(() => {\r\n  const values = props.chart.values?.map(item => ({\r\n    x: typeof item.name === 'string' ? parseFloat(item.name) || 0 : item.name,\r\n    y: typeof item.value === 'string' ? parseFloat(item.value) || 0 : item.value,\r\n    category: item.type || '',\r\n    label: String(item.name)\r\n  })) || []\r\n  \r\n  return { ...props.chart, values }\r\n})\r\n\r\n// 检测是否有分类数据\r\nconst hasCategory = computed(() => {\r\n  const values = processedChart.value.values\r\n  return values.some(d => d.category && d.category.trim() !== '')\r\n})\r\n\r\n// 转换数据格式为 hook 需要的格式\r\nconst chartData = computed(() => {\r\n  return processedChart.value.values.map(item => ({\r\n    x: item.x,\r\n    y: item.y,\r\n    category: item.category,\r\n    label: item.label\r\n  }))\r\n})\r\n/* 数据处理模块end */\r\n\r\n/* 图表渲染模块 */\r\nconst { renderChart, destroyChart } = useScatterChart(chartRef, {\r\n  data: chartData.value,\r\n  height: 300,\r\n  isDarkMode: isDarkMode.value,\r\n  hasCategory: hasCategory.value,\r\n  showRegression: false\r\n})\r\n/* 图表渲染模块end */\r\n\r\n/* 响应式监听模块 */\r\n// 监听数据或配置变化，重新渲染\r\nwatch(\r\n  [chartData, isDarkMode, hasCategory],\r\n  ([newData, newDarkMode, newHasCategory]) => {\r\n    renderChart({\r\n      data: newData,\r\n      isDarkMode: newDarkMode,\r\n      hasCategory: newHasCategory\r\n    })\r\n  },\r\n  { deep: true }\r\n)\r\n\r\n// 窗口大小变化时重新渲染（修复移动端tooltip问题）\r\nlet resizeTimer: NodeJS.Timeout | null = null\r\nconst handleResize = () => {\r\n  if (resizeTimer) clearTimeout(resizeTimer)\r\n  resizeTimer = setTimeout(() => {\r\n    renderChart()\r\n  }, 300)\r\n}\r\n/* 响应式监听模块end */\r\n\r\n/* 生命周期模块 */\r\nonMounted(() => {\r\n  renderChart()\r\n  window.addEventListener('resize', handleResize)\r\n})\r\n\r\nonUnmounted(() => {\r\n  destroyChart()\r\n  window.removeEventListener('resize', handleResize)\r\n  if (resizeTimer) clearTimeout(resizeTimer)\r\n})\r\n/* 生命周期模块end */\r\n</script>\r\n\r\n<style scoped>\r\n/* 散点图容器样式 */\r\n</style>\r\n\r\n","import { Ref, ref } from 'vue'\nimport { Scatter } from '@antv/g2plot'\n\nexport interface BubbleChartOptions {\n  data: Array<{ x: number; y: number; size: number; category?: string; label?: string }>\n  height?: number\n  isDarkMode?: boolean\n  hasCategory?: boolean\n  xAxisTitle?: string  // X轴标题\n  yAxisTitle?: string  // Y轴标题\n  onRenderComplete?: () => void\n}\n\n/* \n * 功能描述: 气泡图 Hook - 用于渲染和管理气泡图\n * 参数: \n *   - container: 容器元素引用\n *   - initialOptions: 初始配置选项\n * 返回: { renderChart, destroyChart } - 渲染和销毁方法\n */\nexport function useBubbleChart(\n  container: Ref<HTMLElement | undefined>,\n  initialOptions: BubbleChartOptions\n): {\n  renderChart: (newOptions?: Partial<BubbleChartOptions>) => void\n  destroyChart: () => void\n  chartInstance: Ref<Scatter | null>\n} {\n  const chartInstance = ref<Scatter | null>(null)\n  const currentOptions = ref<BubbleChartOptions>(initialOptions)\n\n  /* \n   * 功能描述: 数字格式化\n   * 参数: {string} text - 要格式化的数字字符串\n   * 返回: {string} - 格式化后的数字\n   */\n  const formatNumber = (text: string) => {\n    const num = parseFloat(text)\n    if (isNaN(num)) return text\n    return Number.isInteger(num) ? num.toString() : num.toFixed(2)\n  }\n\n  /* \n   * 功能描述: 渲染气泡图\n   * 参数: newOptions - 可选的新配置，如果不传则使用当前配置\n   */\n  const renderChart = (newOptions?: Partial<BubbleChartOptions>) => {\n    // 更新配置\n    if (newOptions) {\n      currentOptions.value = { ...currentOptions.value, ...newOptions }\n    }\n    \n    const options = currentOptions.value\n    \n    if (!container.value || !options.data.length) return\n\n    // 销毁现有图表\n    if (chartInstance.value) {\n      chartInstance.value.destroy()\n    }\n\n    const isDark = options.isDarkMode ?? false\n    const hasCategory = options.hasCategory ?? false\n\n    chartInstance.value = new Scatter(container.value, {\n      data: options.data,\n      xField: 'x',\n      yField: 'y',\n      colorField: hasCategory ? 'category' : undefined,\n      sizeField: 'size', // 气泡图的关键：使用第三个维度控制气泡大小\n      \n      /* 自适应配置 */\n      autoFit: true,\n      height: options.height || 300,\n\n      /* 样式配置 - 扩展到50种颜色 */\n      color: [\n        // 第1-10组：基础明亮色系\n        '#3b82f6', '#10b981', '#f59e0b', '#8b5cf6', '#06b6d4', '#ef4444', '#ec4899', '#14b8a6', '#f97316', '#6366f1',\n        // 第11-20组：深色系\n        '#1e40af', '#047857', '#b45309', '#6d28d9', '#0e7490', '#b91c1c', '#be185d', '#0f766e', '#c2410c', '#4338ca',\n        // 第21-30组：浅色系\n        '#60a5fa', '#34d399', '#fbbf24', '#a78bfa', '#22d3ee', '#f87171', '#f472b6', '#2dd4bf', '#fb923c', '#818cf8',\n        // 第31-40组：中间色系\n        '#2563eb', '#059669', '#d97706', '#7c3aed', '#0891b2', '#dc2626', '#db2777', '#0d9488', '#ea580c', '#5b21b6',\n        // 第41-50组：补充色系\n        '#93c5fd', '#6ee7b7', '#fcd34d', '#c4b5fd', '#67e8f9', '#fca5a5', '#f9a8d4', '#5eead4', '#fdba74', '#a5b4fc',\n        // 第51-60组：额外备用色\n        '#1d4ed8', '#065f46', '#92400e', '#581c87', '#164e63', '#991b1b', '#9f1239', '#134e4a', '#9a3412', '#3730a3',\n        '#7dd3fc', '#86efac', '#fde047', '#ddd6fe', '#a5f3fc', '#fecaca', '#fbcfe8', '#99f6e4', '#fed7aa', '#c7d2fe'\n      ],\n      \n      /* 气泡样式 - 关键配置 */\n      size: [8, 32], // 气泡大小范围，比散点图更大\n      shape: 'circle',\n      pointStyle: {\n        fillOpacity: 0.65, // 稍微透明，便于看到重叠的气泡\n        stroke: '#ffffff',\n        lineWidth: 2\n      },\n\n      /* 坐标轴配置 */\n      xAxis: {\n        nice: true,\n        tickCount: 5,  // ⭐ 增加刻度数量，确保显示完整范围\n        label: {\n          formatter: formatNumber,\n          style: {\n            fill: isDark ? '#9ca3af' : '#6b7280',\n            fontSize: 12\n          }\n        },\n        grid: {\n          line: {\n            style: {\n              stroke: isDark ? '#374151' : '#e5e7eb',\n              lineDash: [4, 4]\n            }\n          }\n        },\n        // ⭐ X轴标题\n        title: currentOptions.value.xAxisTitle ? {\n          text: currentOptions.value.xAxisTitle,\n          style: {\n            fill: isDark ? '#9ca3af' : '#6b7280',\n            fontSize: 12,\n            fontWeight: 'normal'\n          }\n        } : undefined\n      },\n\n      yAxis: {\n        nice: true,\n        tickCount: 5,  // ⭐ 增加刻度数量，确保显示完整范围\n        label: {\n          formatter: formatNumber,\n          style: {\n            fill: isDark ? '#9ca3af' : '#6b7280',\n            fontSize: 12\n          }\n        },\n        grid: {\n          line: {\n            style: {\n              stroke: isDark ? '#374151' : '#e5e7eb',\n              lineDash: [4, 4]\n            }\n          }\n        },\n        // ⭐ Y轴标题\n        title: currentOptions.value.yAxisTitle ? {\n          text: currentOptions.value.yAxisTitle,\n          style: {\n            fill: isDark ? '#9ca3af' : '#6b7280',\n            fontSize: 12,\n            fontWeight: 'normal'\n          }\n        } : undefined\n      },\n\n      /* 图例配置 */\n      legend: hasCategory\n        ? {\n            position: 'top',       // ⭐ 顶部\n            flipPage: true,\n            layout: 'horizontal',  // ⭐ 水平布局\n            maxRow: 2,             // 最多2行\n            offsetX: 0,\n            offsetY: 0,\n            itemName: {\n              spacing: 4,\n              style: {\n                fill: isDark ? '#d1d5db' : '#1f2937',  // ⭐ 加深字体颜色，与柱状图保持一致\n                fontSize: 12,\n                fontWeight: 'normal'\n              }\n            },\n            itemSpacing: 12,\n            marker: {\n              symbol: 'circle',\n              style: {\n                r: 4,\n                lineWidth: 0\n              }\n            }\n          }\n        : false,  // 无分类数据时不显示图例\n\n      /* Tooltip 配置 - 与柱状图保持一致 */\n      tooltip: {\n        showTitle: false,\n        showMarkers: false,\n        shared: false,\n        customContent: (_title: string, items: any[]) => {\n          if (!items || items.length === 0) return ''\n          \n          const data = items[0].data\n          \n          // ⭐ 使用实际的X/Y轴名称\n          const xTitle = currentOptions.value.xAxisTitle || 'X轴'\n          const yTitle = currentOptions.value.yAxisTitle || 'Y轴'\n          \n          // ⭐ 获取气泡的实际颜色\n          const bubbleColor = items[0].color || '#3b82f6'  // 默认蓝色\n          \n          let html = `<div style=\"padding: 12px 8px;\">`  // ⭐ 与柱状图保持一致的边距\n          \n          // 显示category（省份等）\n          if (data.category) {\n            html += `<div style=\"margin-bottom: 10px; font-weight: 500; color: ${isDark ? '#e5e7eb' : '#374151'};\">${data.category}</div>`  // ⭐ 与柱状图保持一致的标题样式\n          }\n          \n          // ⭐ X轴数据行 - 使用8px圆点与柱状图保持一致\n          html += `<div style=\"display: flex; align-items: center; justify-content: space-between; margin-bottom: 6px; gap: 24px;\">\n            <div style=\"display: flex; align-items: center;\">\n              <span style=\"width: 8px; height: 8px; border-radius: 50%; background-color: ${bubbleColor}; margin-right: 8px;\"></span>\n              <span style=\"color: ${isDark ? '#9ca3af' : '#374151'};\">${xTitle}</span>\n            </div>\n            <span style=\"font-weight: 500; color: ${isDark ? '#f3f4f6' : '#111827'}; white-space: nowrap;\">${formatNumber(String(data.x))}</span>\n          </div>`\n          \n          // ⭐ Y轴数据行\n          html += `<div style=\"display: flex; align-items: center; justify-content: space-between; margin-bottom: 6px; gap: 24px;\">\n            <div style=\"display: flex; align-items: center;\">\n              <span style=\"width: 8px; height: 8px; border-radius: 50%; background-color: ${bubbleColor}; margin-right: 8px;\"></span>\n              <span style=\"color: ${isDark ? '#9ca3af' : '#374151'};\">${yTitle}</span>\n            </div>\n            <span style=\"font-weight: 500; color: ${isDark ? '#f3f4f6' : '#111827'}; white-space: nowrap;\">${formatNumber(String(data.y))}</span>\n          </div>`\n          \n          html += `</div>`\n          return html\n        }\n      },\n\n      /* 交互配置 - 使用高亮而非过滤，避免重载闪烁 */\n      interactions: [\n        { type: 'element-highlight' },  // ⭐ 元素高亮，鼠标悬停时突出显示\n        { type: 'legend-highlight' }    // ⭐ 图例高亮，点击图例时高亮对应数据而不是重新渲染\n      ],\n\n      /* 动画配置 - 优化更新动画，减少闪烁 */\n      animation: {\n        appear: {\n          animation: 'zoom-in',\n          duration: 600\n        },\n        update: false  // ⭐ 禁用更新动画，避免图例切换时的闪烁\n      }\n    })\n\n    // 渲染完成回调\n    chartInstance.value.on('afterrender', () => {\n      options.onRenderComplete?.()\n    })\n\n    chartInstance.value.render()\n  }\n\n  /* \n   * 功能描述: 销毁图表实例\n   */\n  const destroyChart = () => {\n    if (chartInstance.value) {\n      chartInstance.value.destroy()\n      chartInstance.value = null\n    }\n  }\n\n  return {\n    renderChart,\n    destroyChart,\n    chartInstance: chartInstance as any\n  }\n}\n\n","/*\n * 功能描述: 气泡图组件\n * 使用场景: 三维数据展示、多维度对比分析、数据分布展示\n */\n<template>\n  <div class=\"flex-1 min-w-0 p-4 bg-white dark:bg-gray-800 rounded shadow\">\n    <div class=\"h-full\">\n      <!-- 不显示图表标题和描述 -->\n      <div class=\"h-[300px]\">\n        <div ref=\"chartRef\" class=\"w-full h-full\"></div>\n      </div>\n    </div>\n  </div>\n</template>\n\n<script setup lang=\"ts\">\nimport { ref, onMounted, onUnmounted, watch, computed } from 'vue'\nimport type { ChartData } from '@/types/chat'\nimport { useBubbleChart } from './useBubbleChart'\n\ninterface Props {\n  chart: ChartData\n}\n\nconst props = defineProps<Props>()\nconst chartRef = ref<HTMLDivElement>()\n\n/* \n * 功能描述: 安全获取暗色模式状态\n * 返回: {boolean} - 是否为暗色模式\n */\nconst isDarkMode = computed(() => {\n  return document.documentElement.classList.contains('dark')\n})\n\n/* 数据处理模块 */\n/* \n * 功能描述: 处理气泡图数据 - 将ChartData转换为气泡图需要的格式\n * 气泡图需要三个维度: x轴、y轴、气泡大小\n * 数据格式说明:\n *   多指标数据（气泡图）：\n *     - values[i].name: 标签（如产品名）\n *     - values[i].type: 指标名称（如\"销售额\"、\"利润\"、\"增长率\"）\n *     - values[i].value: 指标值\n *     - values[i].category: 分类字段（如\"省份\"） - 用于图例着色\n *   \n *   数据分组：每3条记录为一组，代表同一个数据点的3个维度\n *     [0]: X轴值（第1个指标）\n *     [1]: Y轴值（第2个指标）\n *     [2]: 气泡大小（第3个指标）\n */\nconst processedChart = computed(() => {\n  const rawValues = props.chart.values || []\n  \n  // 按name分组，将每个name的所有指标收集起来\n  const grouped = new Map<string, Array<{type: string, value: number, category?: string}>>()\n  \n  rawValues.forEach(item => {\n    const name = String(item.name || '')\n    if (!grouped.has(name)) {\n      grouped.set(name, [])\n    }\n    grouped.get(name)!.push({\n      type: String(item.type || ''),\n      value: Number(item.value) || 0,\n      category: (item as any).category  // ⭐ 获取分类字段\n    })\n  })\n  \n  // 提取指标名称（用于坐标轴标题）\n  // ⭐ X/Y轴映射规则（基于原版DB-GPT观察到的渲染结果）：\n  //    - 数据列顺序通常是：指标1（历史数据），指标2（当前数据），指标3（增长/变化）\n  //    - 原版将 指标2 → X轴（横轴，当前值），指标1 → Y轴（纵轴，历史值）\n  //    - 例如：2024年在Y轴，2025年在X轴\n  //    - 这样的映射便于对比当前与历史的关系\n  let xAxisTitle = 'X轴'\n  let yAxisTitle = 'Y轴'\n  let sizeTitle = '气泡大小'\n  \n  const firstGroup = Array.from(grouped.values())[0]\n  if (firstGroup && firstGroup.length >= 2) {\n    xAxisTitle = firstGroup[1]?.type || 'X轴'  // 第2列 → X轴（如 2025年）\n    yAxisTitle = firstGroup[0]?.type || 'Y轴'  // 第1列 → Y轴（如 2024年）\n    sizeTitle = firstGroup[2]?.type || '气泡大小'  // 第3列 → 气泡大小\n  }\n  \n  // 转换为气泡图数据格式\n  const values = Array.from(grouped.entries()).map(([name, metrics]) => {\n    // ⭐ 按上述映射规则提取数值\n    const xValue = metrics[1]?.value || 0  // 第2列 → X轴\n    const yValue = metrics[0]?.value || 0  // 第1列 → Y轴\n    const sizeValue = metrics[2]?.value || yValue  // 第3列 → 气泡大小\n    \n    // 获取category\n    // ⭐ 优先使用单独的category列，如果没有则使用name作为分类（用于图例）\n    const categoryValue = metrics[0]?.category || name\n    \n    return {\n      x: xValue,\n      y: yValue,\n      size: Math.abs(sizeValue), // 气泡大小必须为正数\n      category: categoryValue,  // ⭐ 用于图例着色\n      label: name\n    }\n  })\n  \n  return { \n    ...props.chart, \n    values,\n    xAxisTitle,\n    yAxisTitle,\n    sizeTitle\n  }\n})\n\n// 检测是否有分类数据\nconst hasCategory = computed(() => {\n  const values = processedChart.value.values\n  return values.some(d => d.category && d.category.trim() !== '')\n})\n\n// 转换数据格式为 hook 需要的格式\nconst chartData = computed(() => {\n  return processedChart.value.values.map(item => ({\n    x: item.x,\n    y: item.y,\n    size: item.size,\n    category: item.category,\n    label: item.label\n  }))\n})\n\n// 诊断信息\nwatch(\n  chartData,\n  (newData) => {\n    if (newData.length > 0) {\n      console.log('🫧 气泡图数据诊断:')\n      console.log('  - 数据点数量:', newData.length)\n      console.log('  - 有分类数据:', hasCategory.value)\n      \n      // ⭐ 详细的category诊断\n      const categories = newData.map(d => d.category).filter(Boolean)\n      const uniqueCategories = [...new Set(categories)]\n      console.log('  - 所有category值:', newData.map(d => d.category))\n      console.log('  - 非空category数量:', categories.length)\n      console.log('  - 唯一category列表:', uniqueCategories)\n      \n      // ⭐ X/Y轴标题诊断\n      console.log('  - X轴标题:', processedChart.value.xAxisTitle)\n      console.log('  - Y轴标题:', processedChart.value.yAxisTitle)\n      console.log('  - 气泡大小标题:', processedChart.value.sizeTitle)\n      \n      console.log('  - X轴范围:', [\n        Math.min(...newData.map(d => d.x)),\n        Math.max(...newData.map(d => d.x))\n      ])\n      console.log('  - Y轴范围:', [\n        Math.min(...newData.map(d => d.y)),\n        Math.max(...newData.map(d => d.y))\n      ])\n      console.log('  - 气泡大小范围:', [\n        Math.min(...newData.map(d => d.size)),\n        Math.max(...newData.map(d => d.size))\n      ])\n      console.log('  - 前5条完整数据:', newData.slice(0, 5))\n    }\n  },\n  { immediate: true }\n)\n/* 数据处理模块end */\n\n/* 图表渲染模块 */\nconst { renderChart, destroyChart } = useBubbleChart(chartRef, {\n  data: chartData.value,\n  height: 300,\n  isDarkMode: isDarkMode.value,\n  hasCategory: hasCategory.value,\n  xAxisTitle: processedChart.value.xAxisTitle,\n  yAxisTitle: processedChart.value.yAxisTitle\n})\n/* 图表渲染模块end */\n\n/* 响应式监听模块 */\n// 监听数据或配置变化，重新渲染\n// ⭐ 移除deep:true和processedChart监听，避免图例切换时触发不必要的重渲染\nwatch(\n  [chartData, isDarkMode, hasCategory, \n   () => processedChart.value.xAxisTitle, \n   () => processedChart.value.yAxisTitle],\n  ([newData, newDarkMode, newHasCategory, newXTitle, newYTitle]) => {\n    renderChart({\n      data: newData,\n      isDarkMode: newDarkMode,\n      hasCategory: newHasCategory,\n      xAxisTitle: newXTitle,\n      yAxisTitle: newYTitle\n    })\n  }\n)\n\n// 窗口大小变化时重新渲染（修复移动端tooltip问题）\nlet resizeTimer: NodeJS.Timeout | null = null\nconst handleResize = () => {\n  if (resizeTimer) clearTimeout(resizeTimer)\n  resizeTimer = setTimeout(() => {\n    renderChart()\n  }, 300)\n}\n/* 响应式监听模块end */\n\n/* 生命周期模块 */\nonMounted(() => {\n  renderChart()\n  window.addEventListener('resize', handleResize)\n})\n\nonUnmounted(() => {\n  destroyChart()\n  window.removeEventListener('resize', handleResize)\n  if (resizeTimer) clearTimeout(resizeTimer)\n})\n/* 生命周期模块end */\n</script>\n\n<style scoped>\n/* 气泡图容器样式 */\n</style>\n\n","import { ref, type Ref } from 'vue'\nimport { Heatmap } from '@antv/g2plot'\nimport type { ChartHookReturn } from '@/types/chart-hooks'\n\n/* \n * 功能描述: 热力图渲染 Hook\n * 参数: \n *   - container: Ref<HTMLElement | undefined> - 图表容器\n *   - options: HeatmapChartOptions - 图表配置选项\n * 返回: { chartInstance, renderChart, destroyChart }\n */\n\nexport interface HeatmapChartOptions {\n  data: Array<{ x: string; y: string; value: number }>\n  height?: number\n  isDarkMode?: boolean\n  colorRange?: [string, string]\n  onRenderComplete?: () => void\n}\n\nexport function useHeatmapChart(\n  container: Ref<HTMLElement | undefined>,\n  initialOptions: HeatmapChartOptions\n): ChartHookReturn {\n  const chartInstance = ref<Heatmap | null>(null)\n  const currentOptions = ref<HeatmapChartOptions>(initialOptions)\n\n  /* \n   * 功能描述: 数字格式化\n   * 参数: {string | number} text - 要格式化的数字\n   * 返回: {string} - 格式化后的数字\n   */\n  const formatNumber = (text: string | number) => {\n    const num = typeof text === 'string' ? parseFloat(text) : text\n    if (isNaN(num)) return String(text)\n    return Number.isInteger(num) ? num.toString() : num.toFixed(2)\n  }\n\n  /* \n   * 功能描述: 渲染热力图\n   * 参数: newOptions - 可选的新配置，如果不传则使用当前配置\n   */\n  const renderChart = (newOptions?: Partial<HeatmapChartOptions>) => {\n    // 更新配置\n    if (newOptions) {\n      currentOptions.value = { ...currentOptions.value, ...newOptions }\n    }\n    \n    const options = currentOptions.value\n    \n    if (!container.value || !options.data.length) return\n\n    // 销毁现有图表\n    if (chartInstance.value) {\n      chartInstance.value.destroy()\n    }\n\n    const isDark = options.isDarkMode ?? false\n    const colorRange = options.colorRange ?? ['#f0f9ff', '#1e40af']\n\n    chartInstance.value = new Heatmap(container.value, {\n      data: options.data,\n      xField: 'x',\n      yField: 'y',\n      colorField: 'value',\n      \n      /* 自适应配置 */\n      autoFit: true,\n      height: options.height || 300,\n\n      /* 颜色配置 - 渐变色 */\n      color: colorRange,\n      \n      /* 单元格样式 */\n      shape: 'rect',\n      meta: {\n        value: {\n          min: Math.min(...options.data.map(d => d.value)),\n          max: Math.max(...options.data.map(d => d.value))\n        }\n      },\n\n      /* 坐标轴配置 */\n      xAxis: {\n        label: {\n          autoRotate: false,\n          autoHide: true,\n          style: {\n            fill: isDark ? '#9ca3af' : '#6b7280',\n            fontSize: 12\n          }\n        },\n        line: null,\n        tickLine: null\n      },\n\n      yAxis: {\n        label: {\n          style: {\n            fill: isDark ? '#9ca3af' : '#6b7280',\n            fontSize: 12\n          }\n        },\n        line: null,\n        tickLine: null\n      },\n\n      /* 图例配置 */\n      legend: {\n        position: 'bottom',\n        layout: 'horizontal',\n        itemName: {\n          style: {\n            fill: isDark ? '#e5e7eb' : '#374151',\n            fontSize: 12\n          }\n        }\n      },\n\n      /* Tooltip配置 */\n      tooltip: {\n        customContent: (_title: string, items: any[]) => {\n          if (!items || items.length === 0) return ''\n\n          const item = items[0]\n          const data = item.data\n          \n          let html = `<div style=\"padding: 12px 8px;\">\n            <div style=\"margin-bottom: 8px; font-weight: 500; color: ${isDark ? '#e5e7eb' : '#374151'};\">${data.x} - ${data.y}</div>\n            <div style=\"color: ${isDark ? '#9ca3af' : '#6b7280'};\">\n              数值: <span style=\"font-weight: 500; color: ${isDark ? '#f3f4f6' : '#111827'};\">${formatNumber(data.value)}</span>\n            </div>\n          </div>`\n          \n          return html\n        }\n      },\n\n      /* 交互配置 */\n      interactions: [\n        { type: 'element-highlight' }\n      ],\n\n      /* 动画配置 */\n      animation: {\n        appear: {\n          animation: 'fade-in',\n          duration: 300\n        }\n      },\n\n      /* 热力图特定配置 */\n      heatmapStyle: {\n        stroke: isDark ? '#1f2937' : '#ffffff',\n        lineWidth: 2\n      }\n    })\n\n    chartInstance.value.render()\n\n    // 渲染完成回调\n    currentOptions.value.onRenderComplete?.()\n  }\n\n  /* \n   * 功能描述: 销毁图表实例\n   */\n  const destroyChart = () => {\n    if (chartInstance.value) {\n      chartInstance.value.destroy()\n      chartInstance.value = null\n    }\n  }\n\n  return {\n    chartInstance,\n    renderChart,\n    destroyChart\n  }\n}\n\n","/*\r\n * 功能描述: 热力图组件\r\n * 使用场景: 矩阵数据可视化、相关性分析、时间段热度展示\r\n */\r\n<template>\r\n  <div class=\"flex-1 min-w-0 p-4 bg-white dark:bg-gray-800 rounded shadow\">\r\n    <div class=\"h-full\">\r\n      <div class=\"mb-2 text-lg font-semibold text-gray-900 dark:text-white\">{{ chart.chart_name }}</div>\r\n      <div class=\"opacity-80 text-sm mb-2 text-gray-600 dark:text-gray-300\">{{ chart.chart_desc }}</div>\r\n      <div class=\"h-[300px]\">\r\n        <div ref=\"chartRef\" class=\"w-full h-full\"></div>\r\n      </div>\r\n    </div>\r\n  </div>\r\n</template>\r\n\r\n<script setup lang=\"ts\">\r\nimport { ref, onMounted, onUnmounted, watch, computed } from 'vue'\r\nimport type { ChartData } from '@/types/chat'\r\nimport { useHeatmapChart } from './useHeatmapChart'\r\n\r\ninterface Props {\r\n  chart: ChartData\r\n}\r\n\r\nconst props = defineProps<Props>()\r\nconst chartRef = ref<HTMLDivElement>()\r\n\r\n/* \r\n * 功能描述: 安全获取暗色模式状态\r\n * 返回: {boolean} - 是否为暗色模式\r\n */\r\nconst isDarkMode = computed(() => {\r\n  return document.documentElement.classList.contains('dark')\r\n})\r\n\r\n/* 数据处理模块 */\r\n// 处理热力图数据\r\n// 热力图数据格式: { name: \"x值\", value: number, type: \"y值\" }\r\nconst processedChart = computed(() => {\r\n  const values = props.chart.values?.map(item => ({\r\n    x: String(item.name), // X轴标签\r\n    y: item.type || 'default', // Y轴标签\r\n    value: typeof item.value === 'string' ? parseFloat(item.value) || 0 : item.value\r\n  })) || []\r\n  \r\n  return { ...props.chart, values }\r\n})\r\n\r\n// 转换数据格式为 hook 需要的格式\r\nconst chartData = computed(() => {\r\n  return processedChart.value.values.map(item => ({\r\n    x: item.x,\r\n    y: item.y,\r\n    value: item.value\r\n  }))\r\n})\r\n/* 数据处理模块end */\r\n\r\n/* 图表渲染模块 */\r\nconst { renderChart, destroyChart } = useHeatmapChart(chartRef, {\r\n  data: chartData.value,\r\n  height: 300,\r\n  isDarkMode: isDarkMode.value,\r\n  colorRange: ['#f0f9ff', '#1e40af']\r\n})\r\n/* 图表渲染模块end */\r\n\r\n/* 响应式监听模块 */\r\n// 监听数据或配置变化，重新渲染\r\nwatch(\r\n  [chartData, isDarkMode],\r\n  ([newData, newDarkMode]) => {\r\n    renderChart({\r\n      data: newData,\r\n      isDarkMode: newDarkMode\r\n    })\r\n  },\r\n  { deep: true }\r\n)\r\n\r\n// 窗口大小变化时重新渲染（修复移动端tooltip问题）\r\nlet resizeTimer: NodeJS.Timeout | null = null\r\nconst handleResize = () => {\r\n  if (resizeTimer) clearTimeout(resizeTimer)\r\n  resizeTimer = setTimeout(() => {\r\n    renderChart()\r\n  }, 300)\r\n}\r\n/* 响应式监听模块end */\r\n\r\n/* 生命周期模块 */\r\nonMounted(() => {\r\n  renderChart()\r\n  window.addEventListener('resize', handleResize)\r\n})\r\n\r\nonUnmounted(() => {\r\n  destroyChart()\r\n  window.removeEventListener('resize', handleResize)\r\n  if (resizeTimer) clearTimeout(resizeTimer)\r\n})\r\n/* 生命周期模块end */\r\n</script>\r\n\r\n<style scoped>\r\n/* 热力图容器样式 */\r\n</style>\r\n\r\n","/*\n * 功能描述: References 知识库引用来源抽屉组件\n * 使用场景: 展示AI回复所引用的知识库文档片段，支持多文档Tab切换\n */\n<template>\n  <div class=\"references-container\">\n    <!-- 触发链接 -->\n    <div \n      v-if=\"hasReferences\"\n      class=\"inline-flex items-center space-x-1 text-blue-600 dark:text-blue-400 hover:text-blue-700 dark:hover:text-blue-300 cursor-pointer mt-2 text-sm\"\n      @click=\"drawerVisible = true\"\n    >\n      <svg class=\"w-4 h-4\" fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\n        <path stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" d=\"M13 16h-1v-4h-1m1-4h.01M21 12a9 9 0 11-18 0 9 9 0 0118 0z\"/>\n      </svg>\n      <span>查看回复引用 ({{ totalChunks }})</span>\n    </div>\n\n    <!-- 抽屉 -->\n    <el-drawer\n      v-model=\"drawerVisible\"\n      :title=\"drawerTitle\"\n      :size=\"drawerSize\"\n      :direction=\"drawerDirection\"\n      :modal-class=\"isMobile ? 'mobile-modal' : ''\"\n    >\n      <div class=\"references-content\">\n        <!-- 多文档Tab -->\n        <el-tabs v-if=\"knowledgeList.length > 1\" v-model=\"activeDocIndex\" type=\"card\">\n          <el-tab-pane \n            v-for=\"(doc, index) in knowledgeList\" \n            :key=\"index\"\n            :name=\"String(index)\"\n          >\n            <template #label>\n              <div class=\"flex items-center space-x-1\">\n                <svg class=\"w-3 h-3\" fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\n                  <path stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" d=\"M9 12h6m-6 4h6m2 5H7a2 2 0 01-2-2V5a2 2 0 012-2h5.586a1 1 0 01.707.293l5.414 5.414a1 1 0 01.293.707V19a2 2 0 01-2 2z\"/>\n                </svg>\n                <span class=\"truncate max-w-[150px]\">{{ doc.name }}</span>\n              </div>\n            </template>\n\n            <!-- 文档分块列表 -->\n            <div class=\"chunks-list space-y-4 mt-4\">\n              <div \n                v-for=\"(chunk, chunkIndex) in doc.chunks\" \n                :key=\"chunkIndex\"\n                class=\"chunk-item bg-gray-50 dark:bg-gray-800 rounded-lg p-4 border border-gray-200 dark:border-gray-700\"\n              >\n                <div class=\"flex items-start justify-between mb-2\">\n                  <span class=\"text-xs font-medium text-gray-500 dark:text-gray-400\">\n                    片段 #{{ chunk.id || chunkIndex + 1 }}\n                  </span>\n                  <button\n                    @click=\"copyChunk(chunk.content)\"\n                    class=\"text-xs text-blue-600 dark:text-blue-400 hover:underline\"\n                  >\n                    {{ copiedChunkId === chunk.id ? '已复制' : '复制' }}\n                  </button>\n                </div>\n                \n                <!-- Markdown 渲染内容 -->\n                <div \n                  class=\"chunk-content text-sm text-gray-700 dark:text-gray-300 prose dark:prose-invert max-w-none\"\n                  v-html=\"renderMarkdown(chunk.content)\"\n                ></div>\n\n                <!-- 元数据 -->\n                <div v-if=\"chunk.metadata\" class=\"mt-3 pt-3 border-t border-gray-200 dark:border-gray-600\">\n                  <div class=\"flex flex-wrap gap-2 text-xs text-gray-500 dark:text-gray-400\">\n                    <span v-if=\"chunk.metadata.page\">页码: {{ chunk.metadata.page }}</span>\n                    <span v-if=\"chunk.metadata.score\">相似度: {{ (chunk.metadata.score * 100).toFixed(1) }}%</span>\n                  </div>\n                </div>\n              </div>\n\n              <!-- 无内容提示 -->\n              <div v-if=\"!doc.chunks || doc.chunks.length === 0\" class=\"text-center py-8 text-gray-500 dark:text-gray-400\">\n                该文档暂无引用片段\n              </div>\n            </div>\n          </el-tab-pane>\n        </el-tabs>\n\n        <!-- 单文档（不显示Tab） -->\n        <div v-else-if=\"knowledgeList.length === 1\" class=\"single-doc\">\n          <div class=\"doc-title flex items-center space-x-2 mb-4 pb-3 border-b border-gray-200 dark:border-gray-700\">\n            <svg class=\"w-5 h-5 text-blue-600 dark:text-blue-400\" fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\n              <path stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" d=\"M9 12h6m-6 4h6m2 5H7a2 2 0 01-2-2V5a2 2 0 012-2h5.586a1 1 0 01.707.293l5.414 5.414a1 1 0 01.293.707V19a2 2 0 01-2 2z\"/>\n            </svg>\n            <h3 class=\"text-base font-medium text-gray-800 dark:text-gray-200\">\n              {{ knowledgeList[0].name }}\n            </h3>\n          </div>\n\n          <!-- 文档分块列表 -->\n          <div class=\"chunks-list space-y-4\">\n            <div \n              v-for=\"(chunk, chunkIndex) in knowledgeList[0].chunks\" \n              :key=\"chunkIndex\"\n              class=\"chunk-item bg-gray-50 dark:bg-gray-800 rounded-lg p-4 border border-gray-200 dark:border-gray-700\"\n            >\n              <div class=\"flex items-start justify-between mb-2\">\n                <span class=\"text-xs font-medium text-gray-500 dark:text-gray-400\">\n                  片段 #{{ chunk.id || chunkIndex + 1 }}\n                </span>\n                <button\n                  @click=\"copyChunk(chunk.content)\"\n                  class=\"text-xs text-blue-600 dark:text-blue-400 hover:underline\"\n                >\n                  {{ copiedChunkId === chunk.id ? '已复制' : '复制' }}\n                </button>\n              </div>\n              \n              <div \n                class=\"chunk-content text-sm text-gray-700 dark:text-gray-300 prose dark:prose-invert max-w-none\"\n                v-html=\"renderMarkdown(chunk.content)\"\n              ></div>\n\n              <div v-if=\"chunk.metadata\" class=\"mt-3 pt-3 border-t border-gray-200 dark:border-gray-600\">\n                <div class=\"flex flex-wrap gap-2 text-xs text-gray-500 dark:text-gray-400\">\n                  <span v-if=\"chunk.metadata.page\">页码: {{ chunk.metadata.page }}</span>\n                  <span v-if=\"chunk.metadata.score\">相似度: {{ (chunk.metadata.score * 100).toFixed(1) }}%</span>\n                </div>\n              </div>\n            </div>\n          </div>\n        </div>\n\n        <!-- 无引用 -->\n        <div v-else class=\"text-center py-12 text-gray-500 dark:text-gray-400\">\n          <svg class=\"w-16 h-16 mx-auto mb-4 opacity-30\" fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\n            <path stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" d=\"M9 12h6m-6 4h6m2 5H7a2 2 0 01-2-2V5a2 2 0 012-2h5.586a1 1 0 01.707.293l5.414 5.414a1 1 0 01.293.707V19a2 2 0 01-2 2z\"/>\n          </svg>\n          <p>暂无引用来源</p>\n        </div>\n      </div>\n    </el-drawer>\n  </div>\n</template>\n\n<script setup lang=\"ts\">\nimport { ref, computed, onMounted, onBeforeUnmount } from 'vue'\nimport { ElDrawer, ElTabs, ElTabPane } from 'element-plus'\nimport { marked } from 'marked'\nimport DOMPurify from 'dompurify'\n\ninterface ChunkMetadata {\n  page?: number\n  score?: number\n  [key: string]: any\n}\n\ninterface Chunk {\n  id?: string | number\n  content: string\n  metadata?: ChunkMetadata\n}\n\ninterface KnowledgeDoc {\n  name: string\n  chunks: Chunk[]\n}\n\ninterface References {\n  knowledge?: KnowledgeDoc[]\n}\n\ninterface Props {\n  references: References | string\n}\n\nconst props = defineProps<Props>()\n\nconst drawerVisible = ref(false)\nconst activeDocIndex = ref('0')\nconst isMobile = ref(false)\nconst copiedChunkId = ref<string | number | null>(null)\n\n// 检测移动端\nconst checkMobile = () => {\n  isMobile.value = window.innerWidth < 768\n}\n\n// 解析引用数据\nconst knowledgeList = computed<KnowledgeDoc[]>(() => {\n  if (!props.references) return []\n  \n  try {\n    let data = props.references\n    if (typeof data === 'string') {\n      data = JSON.parse(data)\n    }\n    \n    return (data as References).knowledge || []\n  } catch (e) {\n    console.error('Parse references error:', e)\n    return []\n  }\n})\n\n// 是否有引用\nconst hasReferences = computed(() => {\n  return knowledgeList.value.length > 0 && \n         knowledgeList.value.some(doc => doc.chunks && doc.chunks.length > 0)\n})\n\n// 总片段数\nconst totalChunks = computed(() => {\n  return knowledgeList.value.reduce((sum, doc) => sum + (doc.chunks?.length || 0), 0)\n})\n\n// 抽屉标题\nconst drawerTitle = computed(() => {\n  return `知识库引用 (${totalChunks.value} 个片段)`\n})\n\n// 抽屉尺寸（响应式）\nconst drawerSize = computed(() => {\n  return isMobile.value ? '90%' : '600px'\n})\n\n// 抽屉方向（响应式）\nconst drawerDirection = computed<'rtl' | 'btt'>(() => {\n  return isMobile.value ? 'btt' : 'rtl'\n})\n\n// 渲染Markdown\nconst renderMarkdown = (content: string): string => {\n  if (!content) return ''\n  \n  marked.setOptions({\n    breaks: true,\n    gfm: true\n  })\n  \n  const rawHtml = marked.parse(content) as string\n  return DOMPurify.sanitize(rawHtml)\n}\n\n// 复制片段内容\nconst copyChunk = async (content: string) => {\n  try {\n    await navigator.clipboard.writeText(content)\n    copiedChunkId.value = Date.now()\n    setTimeout(() => {\n      copiedChunkId.value = null\n    }, 2000)\n  } catch (err) {\n    console.error('Failed to copy chunk:', err)\n  }\n}\n\n// 窗口resize监听\nconst handleResize = () => {\n  checkMobile()\n}\n\nonMounted(() => {\n  checkMobile()\n  window.addEventListener('resize', handleResize)\n})\n\nonBeforeUnmount(() => {\n  window.removeEventListener('resize', handleResize)\n})\n</script>\n\n<style scoped>\n.references-container {\n  display: inline-block;\n}\n\n/* 抽屉内容样式 */\n.references-content {\n  height: 100%;\n  overflow-y: auto;\n}\n\n/* Chunk 内容样式 */\n.chunk-content :deep(p) {\n  margin: 8px 0;\n  line-height: 1.6;\n}\n\n.chunk-content :deep(h1),\n.chunk-content :deep(h2),\n.chunk-content :deep(h3) {\n  margin-top: 16px;\n  margin-bottom: 8px;\n  font-weight: 600;\n}\n\n.chunk-content :deep(ul),\n.chunk-content :deep(ol) {\n  padding-left: 24px;\n  margin: 8px 0;\n}\n\n.chunk-content :deep(code) {\n  background: #f3f4f6;\n  padding: 3px 6px;\n  border-radius: 3px;\n  font-size: 13px;\n}\n\n.dark .chunk-content :deep(code) {\n  background: #374151;\n}\n\n.chunk-content :deep(pre) {\n  background: #1e293b;\n  padding: 16px;\n  border-radius: 8px;\n  overflow-x: auto;\n  margin: 8px 0;\n}\n\n.chunk-content :deep(pre code) {\n  background: transparent;\n  color: #e2e8f0;\n}\n\n/* Element Plus Tabs 样式覆盖 */\n:deep(.el-tabs--card > .el-tabs__header) {\n  border-bottom: none;\n  margin-bottom: 16px;\n}\n\n:deep(.el-tabs--card > .el-tabs__header .el-tabs__item) {\n  border: 1px solid #e5e7eb;\n  font-size: 14px;\n}\n\n.dark :deep(.el-tabs--card > .el-tabs__header .el-tabs__item) {\n  border-color: #374151;\n  color: #9ca3af;\n}\n\n:deep(.el-tabs--card > .el-tabs__header .el-tabs__item.is-active) {\n  background-color: #eff6ff;\n  border-color: #3b82f6;\n  color: #3b82f6;\n}\n\n.dark :deep(.el-tabs--card > .el-tabs__header .el-tabs__item.is-active) {\n  background-color: #1e3a8a;\n  border-color: #60a5fa;\n  color: #60a5fa;\n}\n\n/* 移动端模态框样式 */\n:deep(.mobile-modal) {\n  background: rgba(0, 0, 0, 0.3);\n}\n\n/* 抽屉内滚动条 */\n.references-content::-webkit-scrollbar {\n  width: 6px;\n}\n\n.references-content::-webkit-scrollbar-track {\n  background: transparent;\n}\n\n.references-content::-webkit-scrollbar-thumb {\n  background: #d1d5db;\n  border-radius: 3px;\n}\n\n.dark .references-content::-webkit-scrollbar-thumb {\n  background: #4b5563;\n}\n</style>\n\n","/*\n * 功能描述: Agent Messages 多Agent对话流展示组件\n * 使用场景: 展示多个Agent之间的对话传递和协作过程\n */\n<template>\n  <div class=\"agent-messages my-3\">\n    <div \n      v-for=\"(message, index) in messagesList\" \n      :key=\"index\"\n      class=\"message-item rounded mb-3\"\n    >\n      <!-- 消息头部：发送者 -> 接收者 -->\n      <div class=\"flex items-center mb-2 text-sm text-gray-600 dark:text-gray-400\">\n        <div v-if=\"message.model\" class=\"w-6 h-6 rounded-full bg-blue-100 dark:bg-blue-900 flex items-center justify-center mr-2\">\n          <svg class=\"w-4 h-4 text-blue-600 dark:text-blue-400\" fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\n            <path stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" d=\"M9.75 17L9 20l-1 1h8l-1-1-.75-3M3 13h18M5 17h14a2 2 0 002-2V5a2 2 0 00-2-2H5a2 2 0 00-2 2v10a2 2 0 002 2z\"/>\n          </svg>\n        </div>\n        <div v-else class=\"w-6 h-6 rounded-full bg-gray-100 dark:bg-gray-700 mr-2\"></div>\n        \n        <span>{{ message.sender }}</span>\n        \n        <svg class=\"w-4 h-4 mx-2 text-blue-500\" fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\n          <path stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" d=\"M13 7l5 5m0 0l-5 5m5-5H6\"/>\n        </svg>\n        \n        <span>{{ message.receiver }}</span>\n      </div>\n\n      <!-- 消息内容 -->\n      <div class=\"whitespace-normal text-sm mb-3\">\n        <DBGPTRenderer :content=\"message.markdown\" />\n      </div>\n\n      <!-- 引用资源 -->\n      <div v-if=\"message.resource && message.resource !== 'null'\" class=\"mt-2\">\n        <ReferencesDrawer :references=\"message.resource\" />\n      </div>\n    </div>\n  </div>\n</template>\n\n<script setup lang=\"ts\">\nimport { computed } from 'vue'\nimport DBGPTRenderer from '../DBGPTRenderer.vue'\nimport ReferencesDrawer from './ReferencesDrawer.vue'\n\ninterface AgentMessage {\n  sender: string\n  receiver: string\n  model?: string\n  markdown: string\n  resource?: any\n}\n\ninterface Props {\n  messages: AgentMessage[] | string\n}\n\nconst props = defineProps<Props>()\n\n// 解析消息数据\nconst messagesList = computed<AgentMessage[]>(() => {\n  if (!props.messages) return []\n  \n  try {\n    if (typeof props.messages === 'string') {\n      return JSON.parse(props.messages)\n    }\n    return props.messages\n  } catch (e) {\n    console.error('Parse agent messages error:', e)\n    return []\n  }\n})\n</script>\n\n<style scoped>\n/* 最小化样式 */\n</style>\n\n","/*\n * 功能描述: Agent Plans 执行计划可视化组件\n * 使用场景: 展示多Agent协作的执行计划步骤和状态\n */\n<template>\n  <div class=\"agent-plans my-3\">\n    <!-- 进度条已移除 -->\n    \n    <!-- Element Plus Collapse面板 - 默认全部折叠 -->\n    <el-collapse \n      class=\"agent-plans-collapse\"\n    >\n      <el-collapse-item\n        v-for=\"(plan, index) in plansList\"\n        :key=\"index\"\n        :name=\"String(index)\"\n        class=\"agent-plan-item\"\n      >\n        <!-- 标题插槽 -->\n        <template #title>\n          <div class=\"agent-plan-header\">\n            <!-- 步骤信息 -->\n            <span class=\"plan-title\">\n              {{ plan.name }}{{ plan.agent ? ` - ${plan.agent}` : '' }}\n            </span>\n            \n            <!-- 状态图标（右侧） -->\n            <el-icon v-if=\"plan.status === 'complete'\" class=\"status-icon status-complete\">\n              <Check />\n            </el-icon>\n            <el-icon v-else-if=\"plan.status === 'running'\" class=\"status-icon status-running\">\n              <Loading />\n            </el-icon>\n            <el-icon v-else-if=\"plan.status === 'failed'\" class=\"status-icon status-failed\">\n              <CircleClose />\n            </el-icon>\n            <el-icon v-else class=\"status-icon status-todo\">\n              <Clock />\n            </el-icon>\n          </div>\n        </template>\n\n        <!-- 内容 -->\n        <div class=\"agent-plan-content\">\n          <!-- 使用DBGPTRenderer递归渲染markdown内容 -->\n          <DBGPTRenderer \n            v-if=\"plan.markdown\"\n            :content=\"plan.markdown\" \n          />\n          \n          <!-- 如果有result字段，显示为补充信息 -->\n          <div v-if=\"plan.result\" class=\"mt-3 pt-3 border-t border-gray-200 dark:border-gray-700\">\n            <div class=\"text-xs font-medium text-gray-600 dark:text-gray-400 mb-2\">执行结果:</div>\n            <div class=\"bg-green-50 dark:bg-green-900/20 border border-green-200 dark:border-green-800 rounded-lg p-3\">\n              <p class=\"text-sm text-gray-700 dark:text-gray-300 whitespace-pre-wrap\">{{ plan.result }}</p>\n            </div>\n          </div>\n\n          <!-- 错误信息 -->\n          <div v-if=\"plan.err_msg\" class=\"mt-3\">\n            <div class=\"text-xs font-medium text-gray-600 dark:text-gray-400 mb-2\">错误信息:</div>\n            <div class=\"bg-red-50 dark:bg-red-900/20 border border-red-200 dark:border-red-800 rounded-lg p-3\">\n              <p class=\"text-sm text-red-700 dark:text-red-300 whitespace-pre-wrap\">{{ plan.err_msg }}</p>\n            </div>\n          </div>\n        </div>\n      </el-collapse-item>\n    </el-collapse>\n  </div>\n</template>\n\n<script setup lang=\"ts\">\nimport { computed } from 'vue'\nimport { Check, Loading, Clock, CircleClose } from '@element-plus/icons-vue'\nimport DBGPTRenderer from '../DBGPTRenderer.vue'\n\n/* 类型定义模块 */\ninterface Plan {\n  name: string\n  num?: number\n  status: 'todo' | 'running' | 'failed' | 'complete'  // 注意：原版使用'complete'不是'completed'\n  agent?: string\n  markdown?: string  // 主要内容字段\n  result?: string\n  err_msg?: string\n}\n\ninterface PlansData {\n  plans: Plan[]\n}\n\ninterface Props {\n  plans: Plan[] | PlansData | string\n}\n/* 类型定义模块end */\n\nconst props = defineProps<Props>()\n\n/* 数据处理模块 */\n// 解析计划数据\nconst plansList = computed<Plan[]>(() => {\n  if (!props.plans) return []\n  \n  try {\n    let data = props.plans\n    \n    // 如果是字符串，先解析\n    if (typeof data === 'string') {\n      data = JSON.parse(data)\n    }\n    \n    // 如果解析后是对象且有plans属性，取plans数组\n    if (data && typeof data === 'object' && 'plans' in data) {\n      return (data as PlansData).plans\n    }\n    \n    // 否则直接返回（假设是数组）\n    if (Array.isArray(data)) {\n      return data\n    }\n    \n    console.warn('Invalid plans data format:', data)\n    return []\n  } catch (e) {\n    console.error('Parse plans error:', e)\n    return []\n  }\n})\n\n/* 数据处理模块end */\n</script>\n\n<style scoped>\n/* Agent Plans 折叠面板样式 */\n.agent-plans-collapse {\n  border: 1px solid #e5e7eb;\n  border-radius: 6px;\n  overflow: hidden;\n}\n\n.dark .agent-plans-collapse {\n  border-color: #374151;\n}\n\n/* 折叠项样式 */\n.agent-plan-item {\n  border-bottom: 1px solid #e5e7eb;\n}\n\n.dark .agent-plan-item {\n  border-bottom-color: #374151;\n}\n\n.agent-plan-item:last-child {\n  border-bottom: none;\n}\n\n/* 标题样式 */\n.agent-plan-header {\n  display: flex;\n  align-items: center;\n  justify-content: space-between;\n  width: 100%;\n  gap: 12px;\n}\n\n.plan-title {\n  flex: 1;\n  min-width: 0;\n  font-size: 14px;\n  color: #374151;\n  font-weight: 500;\n}\n\n.dark .plan-title {\n  color: #e5e7eb;\n}\n\n/* 状态图标样式 */\n.status-icon {\n  flex-shrink: 0;\n  font-size: 16px;\n}\n\n.status-complete {\n  color: #10b981;\n}\n\n.status-running {\n  color: #3b82f6;\n  animation: spin 1s linear infinite;\n}\n\n.status-failed {\n  color: #ef4444;\n}\n\n.status-todo {\n  color: #9ca3af;\n}\n\n@keyframes spin {\n  from {\n    transform: rotate(0deg);\n  }\n  to {\n    transform: rotate(360deg);\n  }\n}\n\n/* 内容样式 */\n.agent-plan-content {\n  padding: 12px 16px;\n  background-color: #ffffff;  /* ⭐ 改为白色 */\n  font-size: 14px;\n  line-height: 1.6;\n}\n\n.dark .agent-plan-content {\n  background-color: #1f2937;\n}\n\n/* 覆盖 Element Plus 默认样式 */\n:deep(.el-collapse-item__header) {\n  padding: 8px 12px !important;  /* ⭐ 降低行高 */\n  background-color: #f3f4f6;\n  font-weight: normal;\n  transition: background-color 0.2s;\n  height: auto !important;\n  min-height: auto !important;  /* ⭐ 覆盖 Element Plus 的最小高度 */\n  line-height: 1.5 !important;  /* ⭐ 覆盖 Element Plus 的行高 */\n  flex-direction: row-reverse;  /* ⭐ 箭头放到左侧 */\n}\n\n:deep(.el-collapse-item__header:hover) {\n  background-color: #e5e7eb;\n}\n\n.dark :deep(.el-collapse-item__header) {\n  background-color: #1f2937;\n  color: #e5e7eb;\n}\n\n.dark :deep(.el-collapse-item__header:hover) {\n  background-color: #374151;\n}\n\n/* ⭐ 箭头样式调整 */\n:deep(.el-collapse-item__arrow) {\n  margin-right: 8px;  /* 箭头右边距 */\n  margin-left: 0;\n}\n\n:deep(.el-collapse-item__wrap) {\n  border: none;\n}\n\n:deep(.el-collapse-item__content) {\n  padding: 0;\n}\n</style>\n\n","<template>\n  <div class=\"responsive-table-wrapper\">\n      <!-- PC端：使用 Element Plus Table -->\n      <div class=\"hidden md:block\">\n        <el-table \n          :data=\"tableData\" \n          stripe\n          :max-height=\"maxHeight\"\n          :header-cell-style=\"{ background: '#f9fafb', color: '#6b7280', fontWeight: '500' }\"\n          class=\"w-full\"\n        >\n          <!-- 第一列：固定列，自定义 tooltip（支持 hover + click） -->\n          <el-table-column \n            :prop=\"'col0'\"\n            :label=\"translatedHeaders[0]\"\n            fixed\n            width=\"200\"\n          >\n            <template #default=\"{ row }\">\n              <el-tooltip\n                :content=\"String(row.col0)\"\n                placement=\"top\"\n                effect=\"dark\"\n                :show-after=\"300\"\n                :hide-after=\"0\"\n                trigger=\"hover\"\n                popper-class=\"custom-tooltip\"\n                :disabled=\"false\"\n              >\n                <div class=\"truncate cursor-pointer\" @click=\"handleCellClick(String(row.col0))\">\n                  {{ row.col0 }}\n                </div>\n              </el-tooltip>\n            </template>\n          </el-table-column>\n        \n        <!-- 其他列 -->\n        <el-table-column\n          v-for=\"(header, index) in translatedHeaders.slice(1)\"\n          :key=\"index + 1\"\n          :prop=\"'col' + (index + 1)\"\n          :label=\"header\"\n          min-width=\"120\"\n          :class-name=\"getColumnClass(index + 1)\"\n        >\n          <template #default=\"{ row }\">\n            <span v-if=\"isNumberColumn(index + 1)\" class=\"font-medium\">\n              {{ row['col' + (index + 1)] }}\n            </span>\n            <span v-else-if=\"isPercentageColumn(index + 1)\" class=\"text-green-600 dark:text-green-400 font-semibold\">\n              {{ row['col' + (index + 1)] }}\n            </span>\n            <span v-else>\n              {{ row['col' + (index + 1)] }}\n            </span>\n          </template>\n        </el-table-column>\n      </el-table>\n    </div>\n\n    <!-- 移动端：根据 mobileMode 切换展示方式 -->\n    <div class=\"md:hidden\">\n      <!-- 模式1：小尺寸 el-table（推荐） -->\n      <div v-if=\"mobileMode === 'scroll'\">\n        <el-table \n          :data=\"tableData\" \n          stripe\n          size=\"small\"\n          :max-height=\"maxHeight\"\n          class=\"w-full text-sm\"\n        >\n          <!-- 第一列：固定，自定义 tooltip（支持 click） -->\n          <el-table-column \n            :prop=\"'col0'\"\n            :label=\"translatedHeaders[0]\"\n            fixed\n            width=\"120\"\n          >\n            <template #default=\"{ row }\">\n              <el-tooltip\n                :content=\"String(row.col0)\"\n                placement=\"top\"\n                effect=\"dark\"\n                :show-after=\"100\"\n                :hide-after=\"0\"\n                trigger=\"click\"\n                popper-class=\"custom-tooltip\"\n                :disabled=\"false\"\n              >\n                <div class=\"truncate cursor-pointer active:bg-blue-50 dark:active:bg-blue-900/20 rounded px-1\">\n                  {{ row.col0 }}\n                </div>\n              </el-tooltip>\n            </template>\n          </el-table-column>\n          \n          <!-- 其他列 -->\n          <el-table-column\n            v-for=\"(header, index) in translatedHeaders.slice(1)\"\n            :key=\"index + 1\"\n            :prop=\"'col' + (index + 1)\"\n            :label=\"header\"\n            min-width=\"100\"\n          />\n        </el-table>\n      </div>\n\n      <!-- 模式2：紧凑卡片 -->\n      <div v-else-if=\"mobileMode === 'compact'\" class=\"space-y-3\">\n        <div \n          v-for=\"(row, rowIndex) in data\" \n          :key=\"rowIndex\"\n          class=\"bg-white dark:bg-gray-800 rounded-lg p-3 border border-gray-200 dark:border-gray-700\"\n        >\n          <div class=\"space-y-2\">\n            <div \n              v-for=\"(cell, cellIndex) in row\" \n              :key=\"cellIndex\"\n              class=\"flex justify-between items-center text-sm\"\n            >\n              <span class=\"text-gray-500 dark:text-gray-400 font-medium\">\n                {{ translatedHeaders[cellIndex] }}:\n              </span>\n              <span class=\"text-gray-900 dark:text-gray-100 font-semibold\">\n                <span v-if=\"cellIndex === 0\" class=\"text-blue-600 dark:text-blue-400\">\n                  {{ cell }}\n                </span>\n                <span v-else-if=\"isPercentageColumn(cellIndex)\" class=\"text-green-600 dark:text-green-400\">\n                  {{ cell }}\n                </span>\n                <span v-else>{{ cell }}</span>\n              </span>\n            </div>\n          </div>\n        </div>\n      </div>\n\n      <!-- 模式3：传统卡片 -->\n      <div v-else class=\"space-y-4\">\n        <div \n          v-for=\"(row, rowIndex) in data\" \n          :key=\"rowIndex\"\n          class=\"bg-white dark:bg-gray-800 rounded-lg shadow-md p-4 border border-gray-200 dark:border-gray-700\"\n        >\n          <div class=\"space-y-3\">\n            <div \n              v-for=\"(cell, cellIndex) in row\" \n              :key=\"cellIndex\"\n              class=\"flex justify-between items-center\"\n            >\n              <span class=\"text-sm font-medium text-gray-500 dark:text-gray-400\">\n                {{ translatedHeaders[cellIndex] }}\n              </span>\n              <span class=\"text-sm text-gray-900 dark:text-gray-100 font-semibold\">\n                <span v-if=\"cellIndex === 0\" class=\"text-lg font-bold text-blue-600 dark:text-blue-400\">\n                  {{ cell }}\n                </span>\n                <span v-else-if=\"isPercentageColumn(cellIndex)\" class=\"text-green-600 dark:text-green-400\">\n                  {{ cell }}\n                </span>\n                <span v-else>\n                  {{ cell }}\n                </span>\n              </span>\n            </div>\n          </div>\n        </div>\n      </div>\n    </div>\n  </div>\n</template>\n\n<script setup lang=\"ts\">\nimport { computed } from 'vue'\n\n/* \n * 功能描述: 英文表头到中文的映射字典\n */\nconst headerTranslation: Record<string, string> = {\n  'MONTH': '月份',\n  'REGION': '地区',\n  'REVENUE': '营收',\n  'SALES': '销售额',\n  'PROFIT': '利润',\n  'PRODUCT': '产品',\n  'NAME': '名称',\n  'VALUE': '数值',\n  'TYPE': '类型',\n  'DATE': '日期',\n  'AMOUNT': '金额',\n  'QUANTITY': '数量',\n  'PRICE': '价格',\n  'CATEGORY': '类别',\n  'STATUS': '状态',\n  'ID': '编号'\n}\n\ninterface Props {\n  headers: string[]\n  data: any[][]\n  numberColumns?: number[]         // 数字列的索引\n  percentageColumns?: number[]     // 百分比列的索引\n  mobileMode?: 'scroll' | 'compact' | 'card'  // 移动端展示模式\n  maxHeight?: number               // 最大高度（px），超出显示滚动条\n}\n\nconst props = withDefaults(defineProps<Props>(), {\n  numberColumns: () => [],\n  percentageColumns: () => [],\n  mobileMode: 'scroll'  // 默认：横向滚动模式（使用小尺寸 el-table）\n})\n\n/* \n * 功能描述: 检测字符串是否包含中文\n */\nconst hasChinese = (str: string) => {\n  return /[\\u4e00-\\u9fa5]/.test(str)\n}\n\n/* \n * 功能描述: 智能翻译表头\n */\nconst translatedHeaders = computed(() => {\n  return props.headers.map(header => {\n    if (hasChinese(header)) {\n      return header\n    }\n    const upperHeader = header.toUpperCase()\n    return headerTranslation[upperHeader] || header\n  })\n})\n\n/* \n * 功能描述: 将二维数组转换为 el-table 需要的对象数组\n */\nconst tableData = computed(() => {\n  return props.data.map(row => {\n    const obj: Record<string, any> = {}\n    row.forEach((cell, index) => {\n      obj['col' + index] = cell\n    })\n    return obj\n  })\n})\n\nconst isNumberColumn = (index: number) => {\n  return props.numberColumns.includes(index)\n}\n\nconst isPercentageColumn = (index: number) => {\n  return props.percentageColumns.includes(index)\n}\n\nconst getColumnClass = (index: number) => {\n  if (isNumberColumn(index)) return 'number-column'\n  if (isPercentageColumn(index)) return 'percentage-column'\n  return ''\n}\n\n/* \n * 功能描述: 处理单元格点击事件（PC端）\n * 参数: {string} content - 单元格内容\n */\nconst handleCellClick = (content: string) => {\n  console.log('Cell clicked:', content)\n}\n</script>\n\n<style scoped>\n/* Element Plus Table 自定义样式 */\n:deep(.el-table) {\n  --el-table-border-color: #e5e7eb;\n  --el-table-row-hover-bg-color: #f9fafb;\n}\n\n:deep(.el-table__header) {\n  font-weight: 500;\n}\n\n/* 暗黑模式 */\n:global(.dark) :deep(.el-table) {\n  --el-table-border-color: #374151;\n  --el-table-row-hover-bg-color: #1f2937;\n  --el-table-bg-color: #111827;\n  --el-table-tr-bg-color: #111827;\n  --el-table-header-bg-color: #1f2937;\n  --el-table-header-text-color: #9ca3af;\n  --el-table-text-color: #e5e7eb;\n}\n\n/* 数字列样式 */\n:deep(.number-column) {\n  font-weight: 500;\n}\n\n/* 百分比列样式 */\n:deep(.percentage-column) {\n  color: #16a34a;\n  font-weight: 600;\n}\n\n:global(.dark) :deep(.percentage-column) {\n  color: #4ade80;\n}\n\n/* 固定列阴影 */\n:deep(.el-table__fixed) {\n  box-shadow: 2px 0 4px rgba(0, 0, 0, 0.06);\n}\n\n:global(.dark) :deep(.el-table__fixed) {\n  box-shadow: 2px 0 4px rgba(0, 0, 0, 0.3);\n}\n\n/* 移动端卡片动画 */\n@media (max-width: 767px) {\n  .space-y-3 > div,\n  .space-y-4 > div {\n    animation: slideInUp 0.3s ease-out;\n  }\n}\n\n@keyframes slideInUp {\n  from {\n    opacity: 0;\n    transform: translateY(20px);\n  }\n  to {\n    opacity: 1;\n    transform: translateY(0);\n  }\n}\n</style>\n\n<style>\n/* Tooltip 自定义样式（非 scoped，确保作用到 popper） */\n.custom-tooltip {\n  max-width: 300px;\n  word-break: break-all;\n  z-index: 9999 !important;\n}\n</style>\n","<template>\n  <div class=\"plugin-status-wrapper\">\n    <!-- 状态指示器（标题栏） -->\n    <div v-if=\"showHeader\" class=\"flex items-center justify-between mb-3\">\n      <div class=\"flex items-center space-x-2\">\n        <div \n          class=\"w-2 h-2 rounded-full\" \n          :class=\"currentStatusColor\"\n        ></div>\n        <span class=\"text-sm font-medium text-gray-700 dark:text-gray-300\">\n          {{ name || defaultName }}\n        </span>\n        <span \n          class=\"text-xs px-2 py-0.5 rounded-full\"\n          :class=\"currentStatusBg\"\n        >\n          {{ currentStatusText }}\n        </span>\n      </div>\n      \n      <!-- 标题栏操作按钮插槽 -->\n      <div v-if=\"hasHeaderActions\">\n        <slot name=\"headerActions\"></slot>\n      </div>\n    </div>\n\n    <!-- 错误信息 -->\n    <div v-if=\"status === 'failed' && errorMessage\" class=\"mb-3\">\n      <div class=\"bg-red-50 dark:bg-red-900/20 border border-red-200 dark:border-red-800 rounded-md p-3\">\n        <div class=\"flex items-start\">\n          <svg class=\"w-5 h-5 text-red-500 mr-2 flex-shrink-0 mt-0.5\" fill=\"currentColor\" viewBox=\"0 0 20 20\">\n            <path fill-rule=\"evenodd\" d=\"M10 18a8 8 0 100-16 8 8 0 000 16zM8.707 7.293a1 1 0 00-1.414 1.414L8.586 10l-1.293 1.293a1 1 0 101.414 1.414L10 11.414l1.293 1.293a1 1 0 001.414-1.414L11.414 10l1.293-1.293a1 1 0 00-1.414-1.414L10 8.586 8.707 7.293z\" clip-rule=\"evenodd\"/>\n          </svg>\n          <div class=\"text-sm text-red-700 dark:text-red-300\">\n            {{ errorMessage }}\n          </div>\n        </div>\n      </div>\n    </div>\n\n    <!-- 加载状态 - 只在 todo 状态显示 -->\n    <div v-if=\"status === 'todo'\" class=\"flex items-center justify-center py-8\">\n      <div class=\"flex items-center space-x-3 text-gray-500 dark:text-gray-400\">\n        <div class=\"w-5 h-5 border-2 border-gray-400 border-t-transparent rounded-full opacity-50\"></div>\n        <span class=\"text-sm\">{{ loadingText }}</span>\n      </div>\n    </div>\n\n    <!-- 内容插槽（runing 和 completed 时都显示，支持实时渲染） -->\n    <div v-if=\"(status === 'completed' || status === 'runing') && hasContent\">\n      <slot></slot>\n    </div>\n  </div>\n</template>\n\n<script setup lang=\"ts\">\nimport { computed, useSlots } from 'vue'\n\ntype PluginStatus = 'todo' | 'runing' | 'failed' | 'completed'\n\ninterface Props {\n  status?: PluginStatus  // 改为可选，提供默认值\n  name?: string\n  errorMessage?: string\n  showHeader?: boolean\n  defaultName?: string\n  loadingTextMap?: {\n    todo?: string\n    runing?: string\n  }\n}\n\nconst props = withDefaults(defineProps<Props>(), {\n  status: 'completed',  // 添加默认值\n  showHeader: true,\n  defaultName: '任务',\n  loadingTextMap: () => ({\n    todo: '等待执行...',\n    runing: '执行中...'\n  })\n})\n\nconst slots = useSlots()\n\n// 状态颜色映射（圆点）\nconst statusColorMap: Record<PluginStatus, string> = {\n  todo: 'bg-gray-400',\n  runing: 'bg-blue-500 animate-pulse',\n  failed: 'bg-red-500',\n  completed: 'bg-green-500'\n}\n\n// 状态背景映射（徽章）\nconst statusBgMap: Record<PluginStatus, string> = {\n  todo: 'bg-gray-100 text-gray-700 dark:bg-gray-700 dark:text-gray-300',\n  runing: 'bg-blue-100 text-blue-700 dark:bg-blue-900/30 dark:text-blue-300',\n  failed: 'bg-red-100 text-red-700 dark:bg-red-900/30 dark:text-red-300',\n  completed: 'bg-green-100 text-green-700 dark:bg-green-900/30 dark:text-green-300'\n}\n\n// 状态文本映射\nconst statusTextMap: Record<PluginStatus, string> = {\n  todo: '待执行',\n  runing: '执行中',\n  failed: '失败',\n  completed: '完成'\n}\n\n// 当前状态的安全访问（computed）\nconst currentStatusColor = computed(() => {\n  return statusColorMap[props.status || 'completed'] || statusColorMap.completed\n})\n\nconst currentStatusBg = computed(() => {\n  return statusBgMap[props.status || 'completed'] || statusBgMap.completed\n})\n\nconst currentStatusText = computed(() => {\n  return statusTextMap[props.status || 'completed'] || statusTextMap.completed\n})\n\n// 加载文本\nconst loadingText = computed(() => {\n  if (props.status === 'todo') {\n    return props.loadingTextMap?.todo || '等待执行...'\n  }\n  return props.loadingTextMap?.runing || '执行中...'\n})\n\n// 是否有内容\nconst hasContent = computed(() => {\n  return !!slots.default\n})\n\n// 是否有标题栏操作\nconst hasHeaderActions = computed(() => {\n  return !!slots.headerActions\n})\n</script>\n\n<style scoped>\n/* 添加一些微动画 */\n@keyframes pulse {\n  0%, 100% {\n    opacity: 1;\n  }\n  50% {\n    opacity: 0.5;\n  }\n}\n\n.animate-pulse {\n  animation: pulse 2s cubic-bezier(0.4, 0, 0.6, 1) infinite;\n}\n</style>\n\n","<template>\n  <!-- 流式传输期间完全不显示，等文字加载完再出现 -->\n  <div v-if=\"!streaming\" class=\"chart-view bg-gray-50 dark:bg-gray-800 rounded-lg p-2 md:p-4\">\n    <PluginStatus \n      :status=\"plugin.status\"\n      :name=\"plugin.name\"\n      :errorMessage=\"plugin.err_msg\"\n      defaultName=\"图表\"\n      :loadingTextMap=\"{\n        todo: '等待执行...',\n        runing: '正在生成图表...'\n      }\"\n    >\n      <!-- 图表标题 -->\n      <h4 v-if=\"chartData?.title\" class=\"text-base font-semibold mb-4 text-gray-800 dark:text-gray-200\">\n        {{ chartData.title }}\n      </h4>\n\n      <!-- G2 图表容器 -->\n      <div \n        v-show=\"chartData?.type !== 'table'\"\n        class=\"relative\"\n      >\n        <!-- 骨架屏 -->\n        <div \n          v-if=\"!chartInstance\" \n          class=\"chart-skeleton\"\n          :style=\"{ height: chartHeight + 'px' }\"\n        >\n          <div class=\"skeleton-bars\"></div>\n        </div>\n        \n        <!-- 实际图表 -->\n        <div \n          :ref=\"(el: any) => chartContainer = el as HTMLElement\" \n          class=\"chart-container\"\n          :class=\"{ 'opacity-0': !chartInstance }\"\n          :style=\"{ height: chartHeight + 'px' }\"\n        ></div>\n      </div>\n\n      <!-- 表格（响应式） -->\n      <div v-show=\"chartData?.type === 'table'\">\n        <ResponsiveTable \n          :headers=\"tableHeaders\"\n          :data=\"formattedTableData\"\n          mobileMode=\"scroll\"\n          :importantColumns=\"[0]\"\n        />\n      </div>\n    </PluginStatus>\n  </div>\n</template>\n\n<script setup lang=\"ts\">\nimport { ref, computed, onMounted, onBeforeUnmount, watch, nextTick } from 'vue'\nimport { Column, Line, Pie } from '@antv/g2plot'\nimport ResponsiveTable from '../ResponsiveTable.vue'\nimport PluginStatus from '../PluginStatus.vue'\n\ninterface ChartDataItem {\n  label: string\n  value: number\n  percentage?: number\n  trend?: number\n}\n\ninterface ChartData {\n  type: 'bar' | 'line' | 'pie' | 'table'\n  title?: string\n  data: ChartDataItem[] | any[][]\n  headers?: string[]\n}\n\ninterface DBGPTView {\n  name: string\n  status: 'todo' | 'runing' | 'failed' | 'completed'\n  result?: string\n  err_msg?: string\n  data?: any\n}\n\ninterface Props {\n  plugin: DBGPTView\n  streaming?: boolean  // 消息是否还在流式传输中\n}\n\nconst props = defineProps<Props>()\n\nconst chartContainer = ref<HTMLElement | null>(null)\nconst chartInstance = ref<Column | Line | Pie | null>(null)\nconst isDarkMode = ref(false)\n\n/* 数据处理模块 */\n// 解析图表数据\nconst chartData = computed<ChartData | null>(() => {\n  if (!props.plugin.result && !props.plugin.data) {\n    return null\n  }\n  \n  try {\n    const data = props.plugin.data || JSON.parse(props.plugin.result || '{}')\n    return data as ChartData\n  } catch (e) {\n    console.error('❌ Parse chart data error:', e)\n    return null\n  }\n})\n\n// 图表高度\nconst chartHeight = computed(() => {\n  if (!chartData.value) return 300\n  const type = chartData.value.type\n  \n  if (type === 'pie') return 320\n  if (type === 'line') return 280\n  return 300  // bar\n})\n\n// 检测暗色模式\nconst checkDarkMode = () => {\n  isDarkMode.value = document.documentElement.classList.contains('dark')\n}\n\n// 数字格式化\nconst formatNumber = (text: string) => {\n  const num = parseFloat(text)\n  if (isNaN(num)) return text\n  return Number.isInteger(num) ? num.toString() : num.toFixed(2)\n}\n\n// 表格数据处理 - 提取表头\nconst tableHeaders = computed(() => {\n  if (chartData.value?.type !== 'table') return []\n  \n  // 优先使用传入的headers\n  if (chartData.value.headers && chartData.value.headers.length > 0) {\n    return chartData.value.headers\n  }\n  \n  // 如果没有headers，从data的第一条记录中提取\n  const data = chartData.value.data\n  if (Array.isArray(data) && data.length > 0) {\n    const firstRow = data[0]\n    if (typeof firstRow === 'object' && firstRow !== null && !Array.isArray(firstRow)) {\n      return Object.keys(firstRow)\n    }\n  }\n  \n  return []\n})\n\n// 表格数据处理 - 格式化为二维数组\nconst formattedTableData = computed(() => {\n  if (chartData.value?.type !== 'table') return []\n  \n  const data = chartData.value.data\n  if (!Array.isArray(data)) return []\n  \n  return data.map(row => {\n    // 如果已经是数组，直接返回（处理每个元素）\n    if (Array.isArray(row)) {\n      return row.map(cell => {\n        // 处理对象和数组\n        if (typeof cell === 'object' && cell !== null) {\n          try {\n            return JSON.stringify(cell, null, 2)\n          } catch (e) {\n            return String(cell)\n          }\n        }\n        // 处理数字：浮点数保留2位小数\n        if (typeof cell === 'number') {\n          if (!Number.isInteger(cell)) {\n            return Number(cell).toFixed(2)\n          }\n          return String(cell)\n        }\n        return String(cell ?? '')\n      })\n    }\n    \n    // 如果是对象，转换为数组（按headers顺序）\n    if (typeof row === 'object' && row !== null) {\n      return tableHeaders.value.map(header => {\n        const value = (row as any)[header]\n        \n        // 处理数字：浮点数保留2位小数\n        if (typeof value === 'number') {\n          if (!Number.isInteger(value)) {\n            return Number(value).toFixed(2)\n          }\n          return String(value)\n        }\n        \n        // 处理对象和数组：转换为JSON字符串\n        if (typeof value === 'object' && value !== null) {\n          try {\n            return JSON.stringify(value, null, 2)\n          } catch (e) {\n            return String(value)\n          }\n        }\n        \n        // 其他类型：转换为字符串\n        return String(value ?? '')\n      })\n    }\n    \n    // 其他情况，返回空数组\n    return []\n  })\n})\n/* 数据处理模块end */\n\n/* \n * 功能描述: 渲染G2Plot图表\n * 优势: G2Plot自动处理移动端适配、响应式布局、触摸交互\n */\nconst renderChart = async () => {\n  // 检查必要条件\n  if (!chartData.value || chartData.value.type === 'table') return\n  if (props.plugin.status !== 'completed') return\n  \n  await nextTick()\n  \n  // 确保容器已经渲染\n  if (!chartContainer.value) {\n    await nextTick()\n    if (!chartContainer.value) return\n  }\n\n  // 销毁旧图表\n  if (chartInstance.value) {\n    chartInstance.value.destroy()\n    chartInstance.value = null\n  }\n\n  const data = chartData.value.data as ChartDataItem[]\n\n  // 根据图表类型渲染\n  switch (chartData.value.type) {\n    case 'bar':\n      chartInstance.value = renderBarChart(data)\n      break\n    case 'line':\n      chartInstance.value = renderLineChart(data)\n      break\n    case 'pie':\n      chartInstance.value = renderPieChart(data)\n      break\n  }\n\n  if (chartInstance.value) {\n    chartInstance.value.render()\n  }\n}\n\n// 渲染柱状图 - 使用G2Plot Column\nconst renderBarChart = (data: ChartDataItem[]) => {\n  if (!chartContainer.value) return null\n  \n  return new Column(chartContainer.value, {\n    data,\n    xField: 'label',\n    yField: 'value',\n    \n    autoFit: true,\n    height: chartHeight.value,\n    \n    color: ['#3b82f6', '#8b5cf6', '#06b6d4', '#10b981', '#f59e0b'],\n    \n    columnStyle: {\n      radius: [8, 8, 0, 0]\n    },\n    \n    label: {\n      position: 'top',\n      style: {\n        fill: isDarkMode.value ? '#e5e7eb' : '#374151',\n        fontSize: 12\n      }\n    },\n    \n    xAxis: {\n      label: {\n        autoRotate: true,\n        autoHide: true,\n        style: {\n          fill: isDarkMode.value ? '#9ca3af' : '#6b7280',\n          fontSize: 12\n        }\n      }\n    },\n    \n    yAxis: {\n      label: {\n        formatter: formatNumber,\n        style: {\n          fill: isDarkMode.value ? '#9ca3af' : '#6b7280'\n        }\n      },\n      grid: {\n        line: {\n          style: {\n            stroke: isDarkMode.value ? '#374151' : '#e5e7eb',\n            lineDash: [4, 4]\n          }\n        }\n      }\n    },\n    \n    tooltip: {\n      shared: true,\n      showCrosshairs: true\n    },\n    \n    interactions: [\n      { type: 'element-highlight' },\n      { type: 'active-region' }\n    ],\n    \n    animation: {\n      appear: {\n        animation: 'scale-in-y',\n        duration: 800\n      }\n    }\n  })\n}\n\n// 渲染折线图 - 使用G2Plot Line\nconst renderLineChart = (data: ChartDataItem[]) => {\n  if (!chartContainer.value) return null\n  \n  return new Line(chartContainer.value, {\n    data,\n    xField: 'label',\n    yField: 'value',\n    \n    autoFit: true,\n    height: chartHeight.value,\n    \n    smooth: true,\n    color: '#3b82f6',\n    \n    lineStyle: {\n      lineWidth: 2\n    },\n    \n    /* 禁用数据点显示 */\n    point: undefined as any,\n    \n    label: {\n      style: {\n        fill: isDarkMode.value ? '#e5e7eb' : '#374151',\n        fontSize: 12\n      }\n    },\n    \n    xAxis: {\n      label: {\n        autoRotate: true,\n        autoHide: true,\n        style: {\n          fill: isDarkMode.value ? '#9ca3af' : '#6b7280',\n          fontSize: 12\n        }\n      }\n    },\n    \n    yAxis: {\n      label: {\n        formatter: formatNumber,\n        style: {\n          fill: isDarkMode.value ? '#9ca3af' : '#6b7280'\n        }\n      },\n      grid: {\n        line: {\n          style: {\n            stroke: isDarkMode.value ? '#374151' : '#e5e7eb',\n            lineDash: [4, 4]\n          }\n        }\n      }\n    },\n    \n    tooltip: {\n      shared: true,\n      showCrosshairs: true,\n      crosshairs: {\n        line: {\n          style: {\n            stroke: '#3b82f6',\n            lineWidth: 1,\n            lineDash: [4, 4]\n          }\n        }\n      }\n    },\n    \n    interactions: [\n      { type: 'marker-active' }\n    ],\n    \n    animation: {\n      appear: {\n        animation: 'fade-in',\n        duration: 500\n      }\n    }\n  })\n}\n\n// 渲染饼图 - 使用G2Plot Pie\nconst renderPieChart = (data: ChartDataItem[]) => {\n  if (!chartContainer.value) return null\n  \n  // 转换数据格式\n  const pieData = data.map(item => ({\n    type: item.label,\n    value: item.percentage || item.value\n  }))\n  \n  return new Pie(chartContainer.value, {\n    data: pieData,\n    angleField: 'value',\n    colorField: 'type',\n    \n    autoFit: true,\n    height: chartHeight.value,\n    \n    color: ['#3b82f6', '#8b5cf6', '#06b6d4', '#10b981', '#f59e0b', '#ef4444', '#ec4899', '#14b8a6'],\n    \n    radius: 0.8,\n    innerRadius: 0.5,\n    \n    label: {\n      type: 'spider',\n      labelHeight: 28,\n      formatter: (datum: any) => `${datum.type}: ${datum.value}${(chartData.value?.data as any)?.[0]?.percentage ? '%' : ''}`,\n      style: {\n        fill: isDarkMode.value ? '#9ca3af' : '#6b7280',\n        fontSize: 12\n      }\n    },\n    \n    legend: {\n      position: 'right',\n      flipPage: true,\n      itemName: {\n        style: {\n          fill: isDarkMode.value ? '#e5e7eb' : '#374151',\n          fontSize: 12\n        }\n      }\n    },\n    \n    tooltip: {\n      formatter: (datum: any) => {\n        return {\n          name: datum.type,\n          value: `${datum.value}${(chartData.value?.data as any)?.[0]?.percentage ? '%' : ''}`\n        }\n      }\n    },\n    \n    interactions: [\n      { type: 'element-selected' },\n      { type: 'element-active' }\n    ],\n    \n    statistic: {\n      title: {\n        offsetY: -8,\n        style: {\n          fontSize: '14px',\n          fill: isDarkMode.value ? '#9ca3af' : '#6b7280'\n        },\n        content: '总计'\n      },\n      content: {\n        offsetY: 4,\n        style: {\n          fontSize: '18px',\n          fill: isDarkMode.value ? '#fff' : '#1f2937',\n          fontWeight: 'bold'\n        },\n        formatter: () => {\n          const total = pieData.reduce((sum, item) => sum + item.value, 0)\n          return formatNumber(String(total))\n        }\n      }\n    },\n    \n    animation: {\n      appear: {\n        animation: 'wave-in',\n        duration: 800\n      }\n    }\n  })\n}\n\n/* 响应式监听模块 */\n// 监听数据变化 - 只在状态变为 completed 且流式传输完成时渲染一次\nlet hasRendered = ref(false)\n\n// 判断是否可以渲染图表\nconst canRender = computed(() => {\n  return props.plugin.status === 'completed' && \n         props.streaming !== true &&  // 非流式场景(undefined)或流式已完成(false)\n         chartData.value !== null\n})\n\n// 监听渲染条件变化\nwatch(canRender, async (shouldRender) => {\n  if (shouldRender && !hasRendered.value) {\n    hasRendered.value = true\n    await nextTick()\n    await renderChart()\n  }\n})\n\n// 监听暗色模式变化\nconst observer = new MutationObserver(() => {\n  const newDarkMode = document.documentElement.classList.contains('dark')\n  if (newDarkMode !== isDarkMode.value) {\n    isDarkMode.value = newDarkMode\n    if (chartInstance.value) {\n      renderChart()\n    }\n  }\n})\n/* 响应式监听模块end */\n\n/* 生命周期模块 */\nonMounted(() => {\n  checkDarkMode()\n  \n  observer.observe(document.documentElement, {\n    attributes: true,\n    attributeFilter: ['class']\n  })\n  \n  // 如果数据已经是 completed 状态且流式传输完成（非流式场景或已完成）\n  if (canRender.value && !hasRendered.value) {\n    hasRendered.value = true\n    nextTick().then(() => renderChart())\n  }\n})\n\nonBeforeUnmount(() => {\n  observer.disconnect()\n  if (chartInstance.value) {\n    chartInstance.value.destroy()\n  }\n})\n/* 生命周期模块end */\n</script>\n\n<style scoped>\n.chart-view {\n  animation: fadeIn 0.3s ease-out;\n}\n\n@keyframes fadeIn {\n  from {\n    opacity: 0;\n    transform: translateY(10px);\n  }\n  to {\n    opacity: 1;\n    transform: translateY(0);\n  }\n}\n\n.chart-container {\n  width: 100%;\n  min-height: 280px;\n  transition: opacity 0.3s ease-in-out;\n}\n\n/* 骨架屏样式 */\n.chart-skeleton {\n  width: 100%;\n  background: linear-gradient(\n    90deg,\n    rgba(229, 231, 235, 0.1) 0%,\n    rgba(229, 231, 235, 0.3) 50%,\n    rgba(229, 231, 235, 0.1) 100%\n  );\n  background-size: 200% 100%;\n  animation: shimmer 1.5s infinite;\n  border-radius: 8px;\n  position: relative;\n  overflow: hidden;\n}\n\n.dark .chart-skeleton {\n  background: linear-gradient(\n    90deg,\n    rgba(55, 65, 81, 0.3) 0%,\n    rgba(75, 85, 99, 0.5) 50%,\n    rgba(55, 65, 81, 0.3) 100%\n  );\n}\n\n@keyframes shimmer {\n  0% {\n    background-position: -200% 0;\n  }\n  100% {\n    background-position: 200% 0;\n  }\n}\n\n.skeleton-bars {\n  position: absolute;\n  bottom: 20%;\n  left: 10%;\n  right: 10%;\n  height: 60%;\n  display: flex;\n  align-items: flex-end;\n  gap: 8%;\n}\n\n.skeleton-bars::before,\n.skeleton-bars::after {\n  content: '';\n  flex: 1;\n  background: rgba(156, 163, 175, 0.3);\n  border-radius: 4px 4px 0 0;\n}\n\n.skeleton-bars::before {\n  height: 70%;\n  animation: barPulse 1.5s ease-in-out infinite;\n}\n\n.skeleton-bars::after {\n  height: 90%;\n  animation: barPulse 1.5s ease-in-out 0.3s infinite;\n}\n\n@keyframes barPulse {\n  0%, 100% {\n    opacity: 0.3;\n  }\n  50% {\n    opacity: 0.6;\n  }\n}\n\n/* 表格样式优化 */\ntable {\n  border-collapse: separate;\n  border-spacing: 0;\n}\n\nthead tr th:first-child {\n  border-top-left-radius: 8px;\n}\n\nthead tr th:last-child {\n  border-top-right-radius: 8px;\n}\n</style>\n","export var base = {\n    line_chart: {\n        id: 'line_chart',\n        name: 'Line Chart',\n        alias: ['Lines'],\n        family: ['LineCharts'],\n        def: 'A line chart uses lines with segments to show changes in data in a ordinal dimension.',\n        purpose: ['Comparison', 'Trend', 'Anomaly'],\n        coord: ['Cartesian2D'],\n        category: ['Statistic'],\n        shape: ['Lines'],\n        dataPres: [\n            { minQty: 1, maxQty: 1, fieldConditions: ['Time', 'Ordinal'] },\n            { minQty: 0, maxQty: 1, fieldConditions: ['Nominal'] },\n            { minQty: 1, maxQty: 1, fieldConditions: ['Interval'] },\n        ],\n        channel: ['Position', 'Direction'],\n        recRate: 'Recommended',\n    },\n    step_line_chart: {\n        id: 'step_line_chart',\n        name: 'Step Line Chart',\n        alias: ['Step Lines'],\n        family: ['LineCharts'],\n        def: 'A step line chart is a line chart in which points of each line are connected by horizontal and vertical line segments, looking like steps of a staircase.',\n        purpose: ['Comparison', 'Trend'],\n        coord: ['Cartesian2D'],\n        category: ['Statistic'],\n        shape: ['Lines'],\n        dataPres: [\n            { minQty: 1, maxQty: 1, fieldConditions: ['Time', 'Ordinal'] },\n            { minQty: 0, maxQty: 1, fieldConditions: ['Nominal'] },\n            { minQty: 1, maxQty: 1, fieldConditions: ['Interval'] },\n        ],\n        channel: ['Position', 'Direction'],\n        recRate: 'Recommended',\n    },\n    area_chart: {\n        id: 'area_chart',\n        name: 'Area Chart',\n        alias: [],\n        family: ['AreaCharts'],\n        def: 'An area chart uses series of line segments with overlapped areas to show the change in data in a ordinal dimension.',\n        purpose: ['Comparison', 'Trend', 'Anomaly'],\n        coord: ['Cartesian2D'],\n        category: ['Statistic'],\n        shape: ['Area'],\n        dataPres: [\n            { minQty: 1, maxQty: 1, fieldConditions: ['Time', 'Ordinal'] },\n            { minQty: 1, maxQty: 1, fieldConditions: ['Interval'] },\n            { minQty: 0, maxQty: 1, fieldConditions: ['Nominal'] },\n        ],\n        channel: ['Color', 'Position'],\n        recRate: 'Recommended',\n    },\n    stacked_area_chart: {\n        id: 'stacked_area_chart',\n        name: 'Stacked Area Chart',\n        alias: [],\n        family: ['AreaCharts'],\n        def: 'A stacked area chart uses layered line segments with different styles of padding regions to display how multiple sets of data change in the same ordinal dimension, and the endpoint heights of the segments on the same dimension tick are accumulated by value.',\n        purpose: ['Composition', 'Trend'],\n        coord: ['Cartesian2D'],\n        category: ['Statistic'],\n        shape: ['Area'],\n        dataPres: [\n            { minQty: 1, maxQty: 1, fieldConditions: ['Time', 'Ordinal'] },\n            { minQty: 1, maxQty: 1, fieldConditions: ['Interval'] },\n            { minQty: 1, maxQty: 1, fieldConditions: ['Nominal'] },\n        ],\n        channel: ['Color', 'Length'],\n        recRate: 'Recommended',\n    },\n    percent_stacked_area_chart: {\n        id: 'percent_stacked_area_chart',\n        name: 'Percent Stacked Area Chart',\n        alias: ['Percent Stacked Area', '% Stacked Area', '100% Stacked Area'],\n        family: ['AreaCharts'],\n        def: 'A percent stacked area chart is an extented stacked area chart in which the height of the endpoints of the line segment on the same dimension tick is the accumulated proportion of the ratio, which is 100% of the total.',\n        purpose: ['Comparison', 'Composition', 'Proportion', 'Trend'],\n        coord: ['Cartesian2D'],\n        category: ['Statistic'],\n        shape: ['Area'],\n        dataPres: [\n            { minQty: 1, maxQty: 1, fieldConditions: ['Time', 'Ordinal'] },\n            { minQty: 1, maxQty: 1, fieldConditions: ['Interval'] },\n            { minQty: 1, maxQty: 1, fieldConditions: ['Nominal'] },\n        ],\n        channel: ['Color', 'Length'],\n        recRate: 'Recommended',\n    },\n    /*\n     * WIP: unavailable until completed\n     */\n    // interval_area_chart: {\n    //   id: 'interval_area_chart',\n    //   name: 'Interval Area Chart',\n    //   alias: [],\n    //   family: [],\n    //   def: '',\n    //   purpose: [],\n    //   coord: [],\n    //   category: [],\n    //   shape: [],\n    //   dataPres: [],\n    //   channel: [],\n    //   recRate: 'Recommended',\n    // },\n    /*\n     * WIP: unavailable until completed\n     */\n    // stream_chart: {\n    //   id: 'stream_chart',\n    //   name: 'Stream Chart',\n    //   alias: [],\n    //   family: [],\n    //   def: '',\n    //   purpose: [],\n    //   coord: [],\n    //   category: [],\n    //   shape: [],\n    //   dataPres: [],\n    //   channel: [],\n    //   recRate: 'Recommended',\n    // },\n    column_chart: {\n        id: 'column_chart',\n        name: 'Column Chart',\n        alias: ['Columns'],\n        family: ['ColumnCharts'],\n        def: 'A column chart uses series of columns to display the value of the dimension. The horizontal axis shows the classification dimension and the vertical axis shows the corresponding value.',\n        purpose: ['Comparison', 'Distribution', 'Rank'],\n        coord: ['Cartesian2D'],\n        category: ['Statistic'],\n        shape: ['Bars'],\n        dataPres: [\n            { minQty: 1, maxQty: 2, fieldConditions: ['Nominal', 'Ordinal'] },\n            { minQty: 1, maxQty: 1, fieldConditions: ['Interval'] },\n        ],\n        channel: ['Position', 'Color'],\n        recRate: 'Recommended',\n    },\n    grouped_column_chart: {\n        id: 'grouped_column_chart',\n        name: 'Grouped Column Chart',\n        alias: ['Grouped Column'],\n        family: ['ColumnCharts'],\n        def: 'A grouped column chart uses columns of different colors to form a group to display the values of dimensions. The horizontal axis indicates the grouping of categories, the color indicates the categories, and the vertical axis shows the corresponding value.',\n        purpose: ['Comparison', 'Distribution', 'Rank'],\n        coord: ['Cartesian2D'],\n        category: ['Statistic'],\n        shape: ['Bars'],\n        dataPres: [\n            { minQty: 2, maxQty: 2, fieldConditions: ['Nominal', 'Ordinal'] },\n            { minQty: 1, maxQty: 1, fieldConditions: ['Interval'] },\n        ],\n        channel: ['Color', 'Position'],\n        recRate: 'Recommended',\n    },\n    stacked_column_chart: {\n        id: 'stacked_column_chart',\n        name: 'Stacked Column Chart',\n        alias: ['Stacked Column'],\n        family: ['ColumnCharts'],\n        def: 'A stacked column chart uses stacked bars of different colors to display the values for each dimension. The horizontal axis indicates the first classification dimension, the color indicates the second classification dimension, and the vertical axis shows the corresponding value.',\n        purpose: ['Comparison', 'Composition', 'Distribution', 'Rank'],\n        coord: ['Cartesian2D'],\n        category: ['Statistic'],\n        shape: ['Bars'],\n        dataPres: [\n            { minQty: 2, maxQty: 2, fieldConditions: ['Nominal', 'Ordinal'] },\n            { minQty: 1, maxQty: 1, fieldConditions: ['Interval'] },\n        ],\n        channel: ['Color', 'Length', 'Position'],\n        recRate: 'Recommended',\n    },\n    percent_stacked_column_chart: {\n        id: 'percent_stacked_column_chart',\n        name: 'Percent Stacked Column Chart',\n        alias: ['Percent Stacked Column', '% Stacked Column', '100% Stacked Column'],\n        family: ['ColumnCharts'],\n        def: 'A percent stacked column chart uses stacked bars of different colors to display the values for each dimension. The horizontal axis indicates the first classification dimension, the color indicates the second classification dimension, and the vertical axis shows the percentage of the corresponding classification.',\n        purpose: ['Comparison', 'Composition', 'Distribution', 'Proportion'],\n        coord: ['Cartesian2D'],\n        category: ['Statistic'],\n        shape: ['Bars'],\n        dataPres: [\n            { minQty: 2, maxQty: 2, fieldConditions: ['Nominal', 'Ordinal'] },\n            { minQty: 1, maxQty: 1, fieldConditions: ['Interval'] },\n        ],\n        channel: ['Color', 'Length'],\n        recRate: 'Recommended',\n    },\n    /*\n     * WIP: unavailable until completed\n     */\n    // interval_column_chart: {\n    //   id: 'interval_column_chart',\n    //   name: 'Interval Column Chart',\n    //   alias: [],\n    //   family: [],\n    //   def: '',\n    //   purpose: [],\n    //   coord: [],\n    //   category: [],\n    //   shape: [],\n    //   dataPres: [],\n    //   channel: [],\n    //   recRate: 'Recommended',\n    // },\n    range_column_chart: {\n        id: 'range_column_chart',\n        name: 'Range Column Chart',\n        alias: [],\n        family: ['ColumnCharts'],\n        def: 'A column chart that does not have to start from zero axis.',\n        purpose: ['Comparison'],\n        coord: ['Cartesian2D'],\n        category: ['Statistic'],\n        shape: ['Bars'],\n        dataPres: [\n            { minQty: 2, maxQty: 2, fieldConditions: ['Interval', 'Ordinal'] },\n            { minQty: 1, maxQty: 1, fieldConditions: ['Nominal'] },\n        ],\n        channel: ['Length'],\n        recRate: 'Recommended',\n    },\n    waterfall_chart: {\n        id: 'waterfall_chart',\n        name: 'Waterfall Chart',\n        alias: ['Flying Bricks Chart', 'Mario Chart', 'Bridge Chart', 'Cascade Chart'],\n        family: ['ColumnCharts'],\n        def: 'A waterfall chart is used to portray how an initial value is affected by a series of intermediate positive or negative values',\n        purpose: ['Comparison', 'Trend'],\n        coord: ['Cartesian2D'],\n        category: ['Statistic'],\n        shape: ['Bars'],\n        dataPres: [\n            { minQty: 1, maxQty: 1, fieldConditions: ['Ordinal', 'Time', 'Nominal'] },\n            { minQty: 1, maxQty: 1, fieldConditions: ['Interval'] },\n        ],\n        channel: ['Color', 'Length', 'Position'],\n        recRate: 'Recommended',\n    },\n    histogram: {\n        id: 'histogram',\n        name: 'Histogram',\n        alias: [],\n        family: ['ColumnCharts'],\n        def: 'A histogram is an accurate representation of the distribution of numerical data.',\n        purpose: ['Distribution'],\n        coord: ['Cartesian2D'],\n        category: ['Statistic'],\n        shape: ['Bars'],\n        dataPres: [{ minQty: 1, maxQty: 1, fieldConditions: ['Interval'] }],\n        channel: ['Position'],\n        recRate: 'Recommended',\n    },\n    bar_chart: {\n        id: 'bar_chart',\n        name: 'Bar Chart',\n        alias: ['Bars'],\n        family: ['BarCharts'],\n        def: 'A bar chart uses series of bars to display the value of the dimension. The vertical axis shows the classification dimension and the horizontal axis shows the corresponding value.',\n        purpose: ['Comparison', 'Distribution', 'Rank'],\n        coord: ['Cartesian2D'],\n        category: ['Statistic'],\n        shape: ['Bars'],\n        dataPres: [\n            { minQty: 1, maxQty: 2, fieldConditions: ['Nominal', 'Ordinal'] },\n            { minQty: 1, maxQty: 1, fieldConditions: ['Interval'] },\n        ],\n        channel: ['Position', 'Color'],\n        recRate: 'Recommended',\n    },\n    stacked_bar_chart: {\n        id: 'stacked_bar_chart',\n        name: 'Stacked Bar Chart',\n        alias: ['Stacked Bar'],\n        family: ['BarCharts'],\n        def: 'A stacked bar chart uses stacked bars of different colors to display the values for each dimension. The vertical axis indicates the first classification dimension, the color indicates the second classification dimension, and the horizontal axis shows the corresponding value.',\n        purpose: ['Comparison', 'Composition', 'Distribution', 'Rank'],\n        coord: ['Cartesian2D'],\n        category: ['Statistic'],\n        shape: ['Bars'],\n        dataPres: [\n            { minQty: 2, maxQty: 2, fieldConditions: ['Nominal', 'Ordinal'] },\n            { minQty: 1, maxQty: 1, fieldConditions: ['Interval'] },\n        ],\n        channel: ['Color', 'Length', 'Position'],\n        recRate: 'Recommended',\n    },\n    percent_stacked_bar_chart: {\n        id: 'percent_stacked_bar_chart',\n        name: 'Percent Stacked Bar Chart',\n        alias: ['Percent Stacked Bar', '% Stacked Bar', '100% Stacked Bar'],\n        family: ['BarCharts'],\n        def: 'A percent stacked column chart uses stacked bars of different colors to display the values for each dimension. The vertical axis indicates the first classification dimension, the color indicates the second classification dimension, and the horizontal axis shows the percentage of the corresponding classification.',\n        purpose: ['Comparison', 'Composition', 'Distribution', 'Proportion'],\n        coord: ['Cartesian2D'],\n        category: ['Statistic'],\n        shape: ['Bars'],\n        dataPres: [\n            { minQty: 2, maxQty: 2, fieldConditions: ['Nominal', 'Ordinal'] },\n            { minQty: 1, maxQty: 1, fieldConditions: ['Interval'] },\n        ],\n        channel: ['Color', 'Length'],\n        recRate: 'Recommended',\n    },\n    grouped_bar_chart: {\n        id: 'grouped_bar_chart',\n        name: 'Grouped Bar Chart',\n        alias: ['Grouped Bar'],\n        family: ['BarCharts'],\n        def: 'A grouped bar chart uses bars of different colors to form a group to display the values of the dimensions. The vertical axis indicates the grouping of categories, the color indicates the categories, and the horizontal axis shows the corresponding value.',\n        purpose: ['Comparison', 'Distribution', 'Rank'],\n        coord: ['Cartesian2D'],\n        category: ['Statistic'],\n        shape: ['Bars'],\n        dataPres: [\n            { minQty: 2, maxQty: 2, fieldConditions: ['Nominal', 'Ordinal'] },\n            { minQty: 1, maxQty: 1, fieldConditions: ['Interval'] },\n        ],\n        channel: ['Color', 'Position'],\n        recRate: 'Recommended',\n    },\n    /*\n     * WIP: unavailable until completed\n     */\n    // interval_bar_chart: {\n    //   id: 'interval_bar_chart',\n    //   name: 'Interval Bar Chart',\n    //   alias: [],\n    //   family: [],\n    //   def: '',\n    //   purpose: [],\n    //   coord: [],\n    //   category: [],\n    //   shape: [],\n    //   dataPres: [],\n    //   channel: [],\n    //   recRate: 'Recommended',\n    // },\n    range_bar_chart: {\n        id: 'range_bar_chart',\n        name: 'Range Bar Chart',\n        alias: [],\n        family: ['BarCharts'],\n        def: 'A bar chart that does not have to start from zero axis.',\n        purpose: ['Comparison'],\n        coord: ['Cartesian2D'],\n        category: ['Statistic'],\n        shape: ['Bars'],\n        dataPres: [\n            { minQty: 2, maxQty: 2, fieldConditions: ['Interval'] },\n            { minQty: 1, maxQty: 1, fieldConditions: ['Nominal', 'Ordinal'] },\n        ],\n        channel: ['Length'],\n        recRate: 'Recommended',\n    },\n    radial_bar_chart: {\n        id: 'radial_bar_chart',\n        name: 'Radial Bar Chart',\n        alias: ['Radial Column Chart'],\n        family: ['BarCharts'],\n        def: 'A bar chart that is plotted in the polar coordinate system. The axis along radius shows the classification dimension and the angle shows the corresponding value.',\n        purpose: ['Comparison', 'Distribution', 'Rank'],\n        coord: ['Polar'],\n        category: ['Statistic'],\n        shape: ['Round'],\n        dataPres: [\n            { minQty: 1, maxQty: 2, fieldConditions: ['Nominal', 'Ordinal'] },\n            { minQty: 1, maxQty: 1, fieldConditions: ['Interval'] },\n        ],\n        channel: ['Angle', 'Color'],\n        recRate: 'Recommended',\n    },\n    /*\n     * WIP: unavailable until completed\n     */\n    // mirror_bar_chart: {\n    //   id: 'mirror_bar_chart',\n    //   name: 'Mirror Bar Chart',\n    //   alias: [],\n    //   family: [],\n    //   def: '',\n    //   purpose: [],\n    //   coord: [],\n    //   category: [],\n    //   shape: [],\n    //   dataPres: [],\n    //   channel: [],\n    //   recRate: 'Recommended',\n    // },\n    bullet_chart: {\n        id: 'bullet_chart',\n        name: 'Bullet Chart',\n        alias: [],\n        family: ['BarCharts'],\n        def: 'A bullet graph is a variation of a bar graph developed by Stephen Few. Seemingly inspired by the traditional thermometer charts and progress bars found in many dashboards, the bullet graph serves as a replacement for dashboard gauges and meters.',\n        purpose: ['Proportion'],\n        coord: ['Cartesian2D'],\n        category: ['Statistic'],\n        shape: ['Bars'],\n        dataPres: [\n            { minQty: 3, maxQty: 3, fieldConditions: ['Interval'] },\n            { minQty: 1, maxQty: 1, fieldConditions: ['Nominal', 'Ordinal'] },\n        ],\n        channel: ['Position', 'Color'],\n        recRate: 'Recommended',\n    },\n    pie_chart: {\n        id: 'pie_chart',\n        name: 'Pie Chart',\n        alias: ['Circle Chart', 'Pie'],\n        family: ['PieCharts'],\n        def: 'A pie chart is a chart that the classification and proportion of data are represented by the color and arc length (angle, area) of the sector.',\n        purpose: ['Comparison', 'Composition', 'Proportion'],\n        coord: ['Polar'],\n        category: ['Statistic'],\n        shape: ['Round'],\n        dataPres: [\n            { minQty: 1, maxQty: 1, fieldConditions: ['Nominal', 'Ordinal'] },\n            { minQty: 1, maxQty: 1, fieldConditions: ['Interval'] },\n        ],\n        channel: ['Angle', 'Area', 'Color'],\n        recRate: 'Use with Caution',\n    },\n    donut_chart: {\n        id: 'donut_chart',\n        name: 'Donut Chart',\n        alias: ['Donut', 'Doughnut', 'Doughnut Chart', 'Ring Chart'],\n        family: ['PieCharts'],\n        def: 'A donut chart is a variation on a Pie chart except it has a round hole in the center which makes it look like a donut.',\n        purpose: ['Comparison', 'Composition', 'Proportion'],\n        coord: ['Polar'],\n        category: ['Statistic'],\n        shape: ['Round'],\n        dataPres: [\n            { minQty: 1, maxQty: 1, fieldConditions: ['Nominal', 'Ordinal'] },\n            { minQty: 1, maxQty: 1, fieldConditions: ['Interval'] },\n        ],\n        channel: ['ArcLength'],\n        recRate: 'Recommended',\n    },\n    nested_pie_chart: {\n        id: 'nested_pie_chart',\n        name: 'Nested Pie Chart',\n        alias: ['Nested Circle Chart', 'Nested Pie', 'Nested Donut Chart'],\n        family: ['PieCharts'],\n        def: 'A nested pie chart is a chart that contains several donut charts, where all the donut charts share the same center in position.',\n        purpose: ['Comparison', 'Composition', 'Proportion'],\n        coord: ['Polar'],\n        category: ['Statistic'],\n        shape: ['Round'],\n        dataPres: [\n            { minQty: 1, maxQty: 1, fieldConditions: ['Nominal', 'Ordinal'] },\n            { minQty: 1, maxQty: '*', fieldConditions: ['Interval'] },\n        ],\n        channel: ['Angle', 'Area', 'Color', 'Position'],\n        recRate: 'Use with Caution',\n    },\n    rose_chart: {\n        id: 'rose_chart',\n        name: 'Rose Chart',\n        alias: ['Nightingale Chart', 'Polar Area Chart', 'Coxcomb Chart'],\n        family: ['PieCharts'],\n        def: 'Nightingale Rose Chart is a peculiar combination of the Radar Chart and Stacked Column Chart types of data visualization.',\n        purpose: ['Comparison', 'Composition', 'Proportion'],\n        coord: ['Polar'],\n        category: ['Statistic'],\n        shape: ['Round'],\n        dataPres: [\n            { minQty: 1, maxQty: 1, fieldConditions: ['Nominal', 'Ordinal'] },\n            { minQty: 1, maxQty: 1, fieldConditions: ['Interval'] },\n        ],\n        channel: ['Angle', 'Color', 'Length'],\n        recRate: 'Use with Caution',\n    },\n    scatter_plot: {\n        id: 'scatter_plot',\n        name: 'Scatter Plot',\n        alias: ['Scatter Chart', 'Scatterplot'],\n        family: ['ScatterCharts'],\n        def: 'A scatter plot is a type of plot or mathematical diagram using Cartesian coordinates to display values for typically two variables for series of data.',\n        purpose: ['Comparison', 'Distribution', 'Anomaly'],\n        coord: ['Cartesian2D'],\n        category: ['Statistic'],\n        shape: ['Scatter'],\n        dataPres: [\n            { minQty: 2, maxQty: 2, fieldConditions: ['Interval'] },\n            { minQty: 0, maxQty: 1, fieldConditions: ['Nominal'] },\n        ],\n        channel: ['Color', 'Position'],\n        recRate: 'Recommended',\n    },\n    bubble_chart: {\n        id: 'bubble_chart',\n        name: 'Bubble Chart',\n        alias: ['Bubble Chart'],\n        family: ['ScatterCharts'],\n        def: 'A bubble chart is a type of chart that displays four dimensions of data with x, y positions, circle size and circle color.',\n        purpose: ['Comparison', 'Distribution'],\n        coord: ['Cartesian2D'],\n        category: ['Statistic'],\n        shape: ['Scatter'],\n        dataPres: [\n            { minQty: 3, maxQty: 3, fieldConditions: ['Interval'] },\n            { minQty: 0, maxQty: 1, fieldConditions: ['Nominal'] },\n        ],\n        channel: ['Color', 'Position', 'Size'],\n        recRate: 'Recommended',\n    },\n    non_ribbon_chord_diagram: {\n        id: 'non_ribbon_chord_diagram',\n        name: 'Non-Ribbon Chord Diagram',\n        alias: [],\n        family: ['GeneralGraph'],\n        def: 'A stripped-down version of a Chord Diagram, with only the connection lines showing. This provides more emphasis on the connections within the data.',\n        purpose: ['Relation'],\n        coord: ['Cartesian2D'],\n        category: ['Graph'],\n        shape: ['Network'],\n        dataPres: [{ minQty: 1, maxQty: '*', fieldConditions: ['Nominal'] }],\n        channel: ['Color', 'Size', 'Opacity', 'Stroke', 'LineWidth'],\n        recRate: 'Recommended',\n    },\n    arc_diagram: {\n        id: 'arc_diagram',\n        name: 'Arc Diagram',\n        alias: [],\n        family: ['GeneralGraph'],\n        def: 'A graph where the edges are represented as arcs.',\n        purpose: ['Relation'],\n        coord: ['Cartesian2D'],\n        category: ['Graph'],\n        shape: ['Network'],\n        dataPres: [{ minQty: 1, maxQty: '*', fieldConditions: ['Nominal'] }],\n        channel: ['Color', 'Size', 'Opacity', 'Stroke', 'LineWidth'],\n        recRate: 'Recommended',\n    },\n    chord_diagram: {\n        id: 'chord_diagram',\n        name: 'Chord Diagram',\n        alias: [],\n        family: ['GeneralGraph'],\n        def: 'A graphical method of displaying the inter-relationships between data in a matrix. The data are arranged radially around a circle with the relationships between the data points typically drawn as arcs connecting the data.',\n        purpose: ['Relation'],\n        coord: ['Cartesian2D'],\n        category: ['Graph'],\n        shape: ['Network'],\n        dataPres: [{ minQty: 1, maxQty: '*', fieldConditions: ['Nominal'] }],\n        channel: ['Color', 'Size', 'Opacity', 'Stroke', 'LineWidth'],\n        recRate: 'Recommended',\n    },\n    treemap: {\n        id: 'treemap',\n        name: 'Treemap',\n        alias: [],\n        family: ['TreeGraph'],\n        def: 'A visual representation of a data tree with nodes. Each node is displayed as a rectangle, sized and colored according to values that you assign.',\n        purpose: ['Composition', 'Comparison', 'Hierarchy'],\n        coord: ['Cartesian2D'],\n        category: ['Statistic'],\n        shape: ['Square'],\n        dataPres: [\n            { minQty: 1, maxQty: '*', fieldConditions: ['Nominal'] },\n            { minQty: 1, maxQty: 1, fieldConditions: ['Interval'] },\n        ],\n        channel: ['Color', 'Area'],\n        recRate: 'Recommended',\n    },\n    sankey_diagram: {\n        id: 'sankey_diagram',\n        name: 'Sankey Diagram',\n        alias: [],\n        family: ['GeneralGraph'],\n        def: 'A graph shows the flows with weights between objects.',\n        purpose: ['Flow', 'Trend', 'Relation'],\n        coord: ['Cartesian2D'],\n        category: ['Graph'],\n        shape: ['Network'],\n        dataPres: [{ minQty: 1, maxQty: '*', fieldConditions: ['Nominal'] }],\n        channel: ['Color', 'Size', 'Opacity', 'Stroke', 'LineWidth'],\n        recRate: 'Recommended',\n    },\n    funnel_chart: {\n        id: 'funnel_chart',\n        name: 'Funnel Chart',\n        alias: [],\n        family: ['FunnelCharts'],\n        def: 'A funnel chart is often used to represent stages in a sales process and show the amount of potential revenue for each stage.',\n        purpose: ['Trend'],\n        coord: ['SymmetricCartesian'],\n        category: ['Statistic'],\n        shape: ['Symmetric'],\n        dataPres: [\n            { minQty: 1, maxQty: 1, fieldConditions: ['Ordinal'] },\n            { minQty: 1, maxQty: 1, fieldConditions: ['Interval'] },\n        ],\n        channel: ['Color', 'Length'],\n        recRate: 'Recommended',\n    },\n    /*\n     * WIP: unavailable until completed\n     */\n    // overlapping_funnel_chart: {\n    //   id: 'overlapping_funnel_chart',\n    //   name: 'Overlapping Funnel Chart',\n    //   alias: [],\n    //   family: [],\n    //   def: '',\n    //   purpose: [],\n    //   coord: [],\n    //   category: [],\n    //   shape: [],\n    //   dataPres: [],\n    //   channel: [],\n    //   recRate: 'Recommended',\n    // },\n    mirror_funnel_chart: {\n        id: 'mirror_funnel_chart',\n        name: 'Mirror Funnel Chart',\n        alias: ['Contrast Funnel Chart'],\n        family: ['FunnelCharts'],\n        def: 'A mirror funnel chart is a funnel chart divided into two series by a central axis.',\n        purpose: ['Comparison', 'Trend'],\n        coord: ['SymmetricCartesian'],\n        category: ['Statistic'],\n        shape: ['Symmetric'],\n        dataPres: [\n            { minQty: 1, maxQty: 1, fieldConditions: ['Ordinal'] },\n            { minQty: 1, maxQty: 1, fieldConditions: ['Interval'] },\n            { minQty: 1, maxQty: 1, fieldConditions: ['Nominal'] },\n        ],\n        channel: ['Color', 'Length', 'Direction'],\n        recRate: 'Recommended',\n    },\n    box_plot: {\n        id: 'box_plot',\n        name: 'Box Plot',\n        alias: ['Box and Whisker Plot', 'boxplot'],\n        family: ['BarCharts'],\n        def: 'A box plot is often used to graphically depict groups of numerical data through their quartiles. Box plots may also have lines extending from the boxes indicating variability outside the upper and lower quartiles. Outliers may be plotted as individual points.',\n        purpose: ['Distribution', 'Anomaly'],\n        coord: ['Cartesian2D'],\n        category: ['Statistic'],\n        shape: ['Bars'],\n        dataPres: [\n            { minQty: 1, maxQty: 1, fieldConditions: ['Nominal', 'Ordinal'] },\n            { minQty: 1, maxQty: 1, fieldConditions: ['Interval'] },\n        ],\n        channel: ['Position'],\n        recRate: 'Recommended',\n    },\n    heatmap: {\n        id: 'heatmap',\n        name: 'Heatmap',\n        alias: [],\n        family: ['HeatmapCharts'],\n        def: 'A heatmap is a graphical representation of data where the individual values contained in a matrix are represented as colors.',\n        purpose: ['Distribution'],\n        coord: ['Cartesian2D'],\n        category: ['Statistic'],\n        shape: ['Square'],\n        dataPres: [\n            { minQty: 2, maxQty: 2, fieldConditions: ['Nominal', 'Ordinal'] },\n            { minQty: 1, maxQty: 1, fieldConditions: ['Interval'] },\n        ],\n        channel: ['Color', 'Position'],\n        recRate: 'Recommended',\n    },\n    density_heatmap: {\n        id: 'density_heatmap',\n        name: 'Density Heatmap',\n        alias: ['Heatmap'],\n        family: ['HeatmapCharts'],\n        def: 'A density heatmap is a heatmap for representing the density of dots.',\n        purpose: ['Distribution'],\n        coord: ['Cartesian2D'],\n        category: ['Statistic'],\n        shape: ['Area'],\n        dataPres: [{ minQty: 3, maxQty: 3, fieldConditions: ['Interval'] }],\n        channel: ['Color', 'Position', 'Area'],\n        recRate: 'Recommended',\n    },\n    /*\n     * WIP: unavailable until completed\n     */\n    // gauge_chart: {\n    //   id: 'gauge_chart',\n    //   name: 'Gauge Chart',\n    //   alias: [],\n    //   family: [],\n    //   def: '',\n    //   purpose: [],\n    //   coord: [],\n    //   category: [],\n    //   shape: [],\n    //   dataPres: [],\n    //   channel: [],\n    //   recRate: 'Recommended',\n    // },\n    radar_chart: {\n        id: 'radar_chart',\n        name: 'Radar Chart',\n        alias: ['Web Chart', 'Spider Chart', 'Star Chart', 'Cobweb Chart', 'Irregular Polygon', 'Kiviat diagram'],\n        family: ['RadarCharts'],\n        def: 'A radar chart maps series of data volume of multiple dimensions onto the axes. Starting at the same center point, usually ending at the edge of the circle, connecting the same set of points using lines.',\n        purpose: ['Comparison'],\n        coord: ['Radar'],\n        category: ['Statistic'],\n        shape: ['Round'],\n        dataPres: [\n            { minQty: 1, maxQty: 2, fieldConditions: ['Nominal'] },\n            { minQty: 1, maxQty: 1, fieldConditions: ['Interval'] },\n        ],\n        channel: ['Color', 'Position'],\n        recRate: 'Recommended',\n    },\n    wordcloud: {\n        id: 'wordcloud',\n        name: 'Word Cloud',\n        alias: ['Wordle', 'Tag Cloud', 'Text Cloud'],\n        family: ['Others'],\n        def: 'A word cloud is a collection, or cluster, of words depicted in different sizes, colors, and shapes, which takes a piece of text as input. Typically, the font size in the word cloud is encoded as the word frequency in the input text.',\n        purpose: ['Proportion'],\n        coord: ['Cartesian2D'],\n        category: ['Diagram'],\n        shape: ['Scatter'],\n        dataPres: [\n            { minQty: 1, maxQty: 1, fieldConditions: ['Nominal'] },\n            { minQty: 0, maxQty: 1, fieldConditions: ['Interval'] },\n        ],\n        channel: ['Size', 'Position', 'Color'],\n        recRate: 'Recommended',\n    },\n    candlestick_chart: {\n        id: 'candlestick_chart',\n        name: 'Candlestick Chart',\n        alias: ['Japanese Candlestick Chart)'],\n        family: ['BarCharts'],\n        def: 'A candlestick chart is a specific version of box plot, which is a style of financial chart used to describe price movements of a security, derivative, or currency.',\n        purpose: ['Trend', 'Distribution'],\n        coord: ['Cartesian2D'],\n        category: ['Statistic'],\n        shape: ['Bars'],\n        dataPres: [\n            { minQty: 1, maxQty: 1, fieldConditions: ['Time'] },\n            { minQty: 1, maxQty: 1, fieldConditions: ['Interval'] },\n        ],\n        channel: ['Position'],\n        recRate: 'Recommended',\n    },\n    compact_box_tree: {\n        id: 'compact_box_tree',\n        name: 'CompactBox Tree',\n        alias: [],\n        family: ['TreeGraph'],\n        def: 'A type of tree graph layout which arranges the nodes with same depth on the same level.',\n        purpose: ['Relation', 'Hierarchy'],\n        coord: ['Cartesian2D'],\n        category: ['Graph'],\n        shape: ['Network'],\n        dataPres: [{ minQty: 1, maxQty: '*', fieldConditions: ['Nominal'] }],\n        channel: ['Color', 'Size', 'Opacity', 'Stroke', 'LineWidth'],\n        recRate: 'Recommended',\n    },\n    dendrogram: {\n        id: 'dendrogram',\n        name: 'Dendrogram',\n        alias: [],\n        family: ['TreeGraph'],\n        def: 'A type of tree graph layout which arranges the leaves on the same level.',\n        purpose: ['Relation', 'Hierarchy'],\n        coord: ['Cartesian2D'],\n        category: ['Graph'],\n        shape: ['Network'],\n        dataPres: [{ minQty: 1, maxQty: '*', fieldConditions: ['Nominal'] }],\n        channel: ['Color', 'Size', 'Opacity', 'Stroke', 'LineWidth'],\n        recRate: 'Recommended',\n    },\n    indented_tree: {\n        id: 'indented_tree',\n        name: 'Indented Tree Layout',\n        alias: [],\n        family: ['TreeGraph'],\n        def: 'A type of tree graph layout where the hierarchy of tree is represented by the horizontal indentation, and each element will occupy one row/column. It is commonly used to represent the file directory structure.',\n        purpose: ['Relation', 'Hierarchy'],\n        coord: ['Cartesian2D'],\n        category: ['Graph'],\n        shape: ['Network'],\n        dataPres: [{ minQty: 1, maxQty: '*', fieldConditions: ['Nominal'] }],\n        channel: ['Color', 'Size', 'Opacity', 'Stroke', 'LineWidth'],\n        recRate: 'Recommended',\n    },\n    radial_tree: {\n        id: 'radial_tree',\n        name: 'Radial Tree Layout',\n        alias: [],\n        family: ['TreeGraph'],\n        def: 'A type of tree graph layout which places the root at the center, and the branches around the root radially.',\n        purpose: ['Relation', 'Hierarchy'],\n        coord: ['Cartesian2D'],\n        category: ['Graph'],\n        shape: ['Network'],\n        dataPres: [{ minQty: 1, maxQty: '*', fieldConditions: ['Nominal'] }],\n        channel: ['Color', 'Size', 'Opacity', 'Stroke', 'LineWidth'],\n        recRate: 'Recommended',\n    },\n    flow_diagram: {\n        id: 'flow_diagram',\n        name: 'Flow Diagram',\n        alias: ['Dagre Graph Layout', 'Dagre', 'Flow Chart'],\n        family: ['GeneralGraph'],\n        def: 'Directed flow graph.',\n        purpose: ['Relation', 'Flow'],\n        coord: ['Cartesian2D'],\n        category: ['Graph'],\n        shape: ['Network'],\n        dataPres: [{ minQty: 1, maxQty: '*', fieldConditions: ['Nominal'] }],\n        channel: ['Color', 'Size', 'Opacity', 'Stroke', 'LineWidth'],\n        recRate: 'Recommended',\n    },\n    fruchterman_layout_graph: {\n        id: 'fruchterman_layout_graph',\n        name: 'Fruchterman Graph Layout',\n        alias: [],\n        family: ['GeneralGraph'],\n        def: 'A type of force directed graph layout.',\n        purpose: ['Relation'],\n        coord: ['Cartesian2D'],\n        category: ['Graph'],\n        shape: ['Network'],\n        dataPres: [{ minQty: 1, maxQty: '*', fieldConditions: ['Nominal'] }],\n        channel: ['Color', 'Size', 'Opacity', 'Stroke', 'LineWidth'],\n        recRate: 'Recommended',\n    },\n    force_directed_layout_graph: {\n        id: 'force_directed_layout_graph',\n        name: 'Force Directed Graph Layout',\n        alias: [],\n        family: ['GeneralGraph'],\n        def: 'The classical force directed graph layout.',\n        purpose: ['Relation'],\n        coord: ['Cartesian2D'],\n        category: ['Graph'],\n        shape: ['Network'],\n        dataPres: [{ minQty: 1, maxQty: '*', fieldConditions: ['Nominal'] }],\n        channel: ['Color', 'Size', 'Opacity', 'Stroke', 'LineWidth'],\n        recRate: 'Recommended',\n    },\n    fa2_layout_graph: {\n        id: 'fa2_layout_graph',\n        name: 'Force Atlas 2 Graph Layout',\n        alias: ['FA2 Layout'],\n        family: ['GeneralGraph'],\n        def: 'A type of force directed graph layout algorithm. It focuses more on the degree of the node when calculating the force than the classical force-directed algorithm .',\n        purpose: ['Relation'],\n        coord: ['Cartesian2D'],\n        category: ['Graph'],\n        shape: ['Network'],\n        dataPres: [{ minQty: 1, maxQty: '*', fieldConditions: ['Nominal'] }],\n        channel: ['Color', 'Size', 'Opacity', 'Stroke', 'LineWidth'],\n        recRate: 'Recommended',\n    },\n    mds_layout_graph: {\n        id: 'mds_layout_graph',\n        name: 'Multi-Dimensional Scaling Layout',\n        alias: ['MDS Layout'],\n        family: ['GeneralGraph'],\n        def: 'A type of dimension reduction algorithm that could be used for calculating graph layout. MDS (Multidimensional scaling) is used for project high dimensional data onto low dimensional space.',\n        purpose: ['Relation'],\n        coord: ['Cartesian2D'],\n        category: ['Graph'],\n        shape: ['Network'],\n        dataPres: [{ minQty: 1, maxQty: '*', fieldConditions: ['Nominal'] }],\n        channel: ['Color', 'Size', 'Opacity', 'Stroke', 'LineWidth'],\n        recRate: 'Recommended',\n    },\n    circular_layout_graph: {\n        id: 'circular_layout_graph',\n        name: 'Circular Graph Layout',\n        alias: [],\n        family: ['GeneralGraph'],\n        def: 'A type of graph layout which arranges all the nodes on a circle.',\n        purpose: ['Relation'],\n        coord: ['Cartesian2D'],\n        category: ['Graph'],\n        shape: ['Network'],\n        dataPres: [{ minQty: 1, maxQty: '*', fieldConditions: ['Nominal'] }],\n        channel: ['Color', 'Size', 'Opacity', 'Stroke', 'LineWidth'],\n        recRate: 'Recommended',\n    },\n    spiral_layout_graph: {\n        id: 'spiral_layout_graph',\n        name: 'Spiral Graph Layout',\n        alias: [],\n        family: ['GeneralGraph'],\n        def: 'A type of graph layout which arranges all the nodes along a spiral line.',\n        purpose: ['Relation'],\n        coord: ['Cartesian2D'],\n        category: ['Graph'],\n        shape: ['Network'],\n        dataPres: [{ minQty: 1, maxQty: '*', fieldConditions: ['Nominal'] }],\n        channel: ['Color', 'Size', 'Opacity', 'Stroke', 'LineWidth'],\n        recRate: 'Recommended',\n    },\n    radial_layout_graph: {\n        id: 'radial_layout_graph',\n        name: 'Radial Graph Layout',\n        alias: [],\n        family: ['GeneralGraph'],\n        def: 'A type of graph layout which places a focus node on the center and the others on the concentrics centered at the focus node according to the shortest path length to the it.',\n        purpose: ['Relation'],\n        coord: ['Cartesian2D'],\n        category: ['Graph'],\n        shape: ['Network'],\n        dataPres: [{ minQty: 1, maxQty: '*', fieldConditions: ['Nominal'] }],\n        channel: ['Color', 'Size', 'Opacity', 'Stroke', 'LineWidth'],\n        recRate: 'Recommended',\n    },\n    concentric_layout_graph: {\n        id: 'concentric_layout_graph',\n        name: 'Concentric Graph Layout',\n        alias: [],\n        family: ['GeneralGraph'],\n        def: 'A type of graph layout which arranges the nodes on concentrics.',\n        purpose: ['Relation'],\n        coord: ['Cartesian2D'],\n        category: ['Graph'],\n        shape: ['Network'],\n        dataPres: [{ minQty: 1, maxQty: '*', fieldConditions: ['Nominal'] }],\n        channel: ['Color', 'Size', 'Opacity', 'Stroke', 'LineWidth'],\n        recRate: 'Recommended',\n    },\n    grid_layout_graph: {\n        id: 'grid_layout_graph',\n        name: 'Grid Graph Layout',\n        alias: [],\n        family: ['GeneralGraph'],\n        def: 'A type of graph layout arranges the nodes on grids.',\n        purpose: ['Relation'],\n        coord: ['Cartesian2D'],\n        category: ['Graph'],\n        shape: ['Network'],\n        dataPres: [{ minQty: 1, maxQty: '*', fieldConditions: ['Nominal'] }],\n        channel: ['Color', 'Size', 'Opacity', 'Stroke', 'LineWidth'],\n        recRate: 'Recommended',\n    },\n    /*\n     * WIP: unavailable until completed\n     */\n    // symbol_map: {\n    //   id: 'symbol_map',\n    //   name: 'Symbol Map',\n    //   alias: [],\n    //   family: ['PointLayer'],\n    //   def: 'Overlay symbols on the map as glyphs.',\n    //   purpose: ['Distribution', 'Comparison', 'Spatial'],\n    //   coord: ['Geo'],\n    //   category: ['Map'],\n    //   shape: ['Scatter', 'Map'],\n    //   dataPres: [],\n    //   channel: ['Position'],\n    //   recRate: 'Recommended',\n    // },\n    /*\n     * WIP: unavailable until completed\n     */\n    // chart_map: {\n    //   id: 'chart_map',\n    //   name: 'Chart Map',\n    //   alias: [],\n    //   family: ['PointLayer'],\n    //   def: 'Overlay charts on the map as glyphs.',\n    //   purpose: ['Composition', 'Distribution', 'Comparison', 'Spatial'],\n    //   coord: ['Geo'],\n    //   category: ['Map'],\n    //   shape: ['Map'],\n    //   dataPres: [],\n    //   channel: ['Position'],\n    //   recRate: 'Recommended',\n    // },\n    /*\n     * WIP: unavailable until completed\n     */\n    // column_map_3d: {\n    //   id: 'column_map_3d',\n    //   name: '3D Column Map',\n    //   alias: [],\n    //   family: ['PointLayer'],\n    //   def: 'Maps that use height of 3D columns to represent distribution.',\n    //   purpose: ['Distribution', 'Comparison', 'Spatial'],\n    //   coord: [],\n    //   category: ['Map'],\n    //   shape: ['Map'],\n    //   dataPres: [],\n    //   channel: ['Position', 'Length'],\n    //   recRate: 'Recommended',\n    // },\n    /*\n     * WIP: unavailable until completed\n     */\n    // scatter_map: {\n    //   id: 'scatter_map',\n    //   name: 'Scatter Map',\n    //   alias: [],\n    //   family: ['PointLayer'],\n    //   def: 'Overlay dots with same size on the map as glyphs.',\n    //   purpose: ['Distribution', 'Spatial'],\n    //   coord: ['Geo'],\n    //   category: ['Map'],\n    //   shape: ['Scatter', 'Map'],\n    //   dataPres: [],\n    //   channel: ['Size', 'Color', 'Position', 'Opacity'],\n    //   recRate: 'Recommended',\n    // },\n    /*\n     * WIP: unavailable until completed\n     */\n    // path_map: {\n    //   id: 'path_map',\n    //   name: 'Path Map',\n    //   alias: [],\n    //   family: ['LineLayer'],\n    //   def: 'Overlay paths on the map as glyphs.',\n    //   purpose: ['Spatial'],\n    //   coord: ['Geo'],\n    //   category: ['Map'],\n    //   shape: ['Lines'],\n    //   dataPres: [],\n    //   channel: ['Size', 'Color', 'Position', 'Opacity'],\n    //   recRate: 'Recommended',\n    // },\n    /*\n     * WIP: unavailable until completed\n     */\n    // isoline_map: {\n    //   id: 'isoline_map',\n    //   name: 'Isoline Map',\n    //   alias: [],\n    //   family: ['LineLayer'],\n    //   def: '',\n    //   purpose: ['Comparison'],\n    //   coord: ['Geo'],\n    //   category: ['Map'],\n    //   shape: ['Lines'],\n    //   dataPres: [],\n    //   channel: ['Size', 'Color', 'Position', 'Opacity'],\n    //   recRate: 'Recommended',\n    // },\n    /*\n     * WIP: unavailable until completed\n     */\n    // arc_map_3d: {\n    //   id: 'arc_map_3d',\n    //   name: '3D Arc Map',\n    //   alias: [],\n    //   family: ['LineLayer'],\n    //   def: '',\n    //   purpose: ['Relation', 'Spatial'],\n    //   coord: ['Geo'],\n    //   category: ['Map'],\n    //   shape: ['Lines'],\n    //   dataPres: [],\n    //   channel: ['Size', 'Color', 'Position', 'Opacity'],\n    //   recRate: 'Recommended',\n    // },\n    /*\n     * WIP: unavailable until completed\n     */\n    // choropleth_map: {\n    //   id: 'choropleth_map',\n    //   name: 'Choropleth Map',\n    //   alias: [],\n    //   family: ['PolygonLayer'],\n    //   def: 'A choropleth map is a type of thematic map in which areas are shaded or patterned in proportion to a statistical variable that represents an aggregate summary of a geographic characteristic within each area, such as population density or per-capita income.',\n    //   purpose: ['Comparison', 'Spatial'],\n    //   coord: ['Geo'],\n    //   category: ['Map'],\n    //   shape: ['Area', 'Map'],\n    //   dataPres: [],\n    //   channel: ['Color', 'Position', 'Opacity', 'Stroke', 'LineWidth'],\n    //   recRate: 'Recommended',\n    // },\n    /*\n     * WIP: unavailable until completed\n     */\n    // choropleth_map_3d: {\n    //   id: 'choropleth_map_3d',\n    //   name: '3D Choropleth Map',\n    //   alias: ['Extrude Map'],\n    //   family: ['PolygonLayer'],\n    //   def: '',\n    //   purpose: ['Comparison'],\n    //   coord: ['Geo'],\n    //   category: ['Map'],\n    //   shape: ['Area', 'Map'],\n    //   dataPres: [],\n    //   channel: ['Size', 'Color', 'Position', 'Opacity'],\n    //   recRate: 'Recommended',\n    // },\n    /*\n     * WIP: unavailable until completed\n     */\n    // hexagonal_heat_map: {\n    //   id: 'hexagonal_heat_map',\n    //   name: 'Hexagonal Heat Map',\n    //   alias: [],\n    //   family: [],\n    //   def: 'Dividing the map area using hexagons.',\n    //   purpose: ['Distribution', 'Spatial'],\n    //   coord: ['Geo'],\n    //   category: ['Map'],\n    //   shape: ['Area', 'Map'],\n    //   dataPres: [],\n    //   channel: ['Size', 'Color', 'Position', 'Opacity'],\n    //   recRate: 'Recommended',\n    // },\n    /*\n     * WIP: unavailable until completed\n     */\n    // hexagonal_heat_map_3d: {\n    //   id: 'hexagonal_heat_map_3d',\n    //   name: '3D Hexagonal Heat Map',\n    //   alias: [],\n    //   family: [],\n    //   def: 'Dividing the 3D map area using hexagons.',\n    //   purpose: ['Distribution'],\n    //   coord: ['Geo'],\n    //   category: ['Map'],\n    //   shape: ['Map'],\n    //   dataPres: [],\n    //   channel: [],\n    //   recRate: 'Recommended',\n    // },\n    /*\n     * WIP: unavailable until completed\n     */\n    // classical_heat_map: {\n    //   id: 'classical_heat_map',\n    //   name: 'Classical Heat Map',\n    //   alias: [],\n    //   family: [],\n    //   def: '',\n    //   purpose: ['Distribution'],\n    //   coord: ['Geo'],\n    //   category: ['Map'],\n    //   shape: ['Map'],\n    //   dataPres: [],\n    //   channel: ['Color', 'Position', 'Opacity'],\n    //   recRate: 'Recommended',\n    // },\n    /*\n     * WIP: unavailable until completed\n     */\n    // grid_heat_map: {\n    //   id: 'grid_heat_map',\n    //   name: 'Gird Heat Map',\n    //   alias: [],\n    //   family: [],\n    //   def: '',\n    //   purpose: ['Distribution'],\n    //   coord: [],\n    //   category: ['Map'],\n    //   shape: ['Map'],\n    //   dataPres: [],\n    //   channel: ['Color', 'Position', 'Opacity'],\n    //   recRate: 'Recommended',\n    // },\n    /*\n     * WIP: unavailable until completed\n     */\n    // bubble_map: {\n    //   id: 'bubble_map',\n    //   name: 'Bubble Map',\n    //   alias: [],\n    //   family: ['PointLayer'],\n    //   def: 'Overlay bubbles on the map as glyphs.',\n    //   purpose: ['Distribution', 'Spatial'],\n    //   coord: ['Geo'],\n    //   category: ['Map'],\n    //   shape: ['Scatter', 'Map'],\n    //   dataPres: [],\n    //   channel: ['Position', 'Color', 'Size'],\n    //   recRate: 'Recommended',\n    // },\n    /*\n     * WIP: unavailable until completed\n     */\n    // bubble_light_map: {\n    //   id: 'bubble_light_map',\n    //   name: 'Bubble Light Map',\n    //   alias: [],\n    //   family: ['PointLayer'],\n    //   def: 'Overlay bubbles with different lightness on the map as glyphs.',\n    //   purpose: ['Distribution', 'Spatial'],\n    //   coord: ['Geo'],\n    //   category: ['Map'],\n    //   shape: ['Scatter', 'Map'],\n    //   dataPres: [],\n    //   channel: ['Position', 'Color', 'Size', 'Opacity'],\n    //   recRate: 'Recommended',\n    // },\n    /*\n     * WIP: unavailable until completed\n     */\n    // packed_circles: {\n    //   id: 'packed_circles',\n    //   name: 'Packed Circles',\n    //   alias: [],\n    //   family: [],\n    //   def: '',\n    //   purpose: [],\n    //   coord: [],\n    //   category: [],\n    //   shape: [],\n    //   dataPres: [],\n    //   channel: [],\n    //   recRate: 'Recommended',\n    // },\n    /*\n     * WIP: unavailable until completed\n     */\n    // polar_treemap: {\n    //   id: 'polar_treemap',\n    //   name: 'Polar Treemap',\n    //   alias: [],\n    //   family: [],\n    //   def: '',\n    //   purpose: [],\n    //   coord: [],\n    //   category: [],\n    //   shape: [],\n    //   dataPres: [],\n    //   channel: [],\n    //   recRate: 'Recommended',\n    // },\n    /*\n     * WIP: unavailable until completed\n     */\n    // sunburst_diagram: {\n    //   id: 'sunburst_diagram',\n    //   name: 'Sunburst',\n    //   alias: [],\n    //   family: [],\n    //   def: '',\n    //   purpose: [],\n    //   coord: [],\n    //   category: [],\n    //   shape: [],\n    //   dataPres: [],\n    //   channel: [],\n    //   recRate: 'Recommended',\n    // },\n    /*\n     * WIP: unavailable until completed\n     */\n    // liquid_chart: {\n    //   id: 'liquid_chart',\n    //   name: 'Liquid Chart',\n    //   alias: ['Liquid Ball', 'Progress Ball'],\n    //   family: ['Others'],\n    //   def: 'Liquid chart is a diagram to represent progress.',\n    //   purpose: ['Composition'],\n    //   coord: ['Other'],\n    //   category: ['Diagram'],\n    //   shape: ['Round'],\n    //   dataPres: [{ minQty: 2, maxQty: 2, fieldConditions: ['Interval'] }],\n    //   channel: ['Position'],\n    //   recRate: 'Not Recommended',\n    // },\n    /**\n     * WIP: unavailable until completed\n     */\n    // TODO @neoddish: add channel 'Text'\n    // kpi_panel: {\n    //   id: 'kpi_panel',\n    //   name: 'KPI Panel',\n    //   alias: ['KPI Panel'],\n    //   family: ['Others'],\n    //   def: 'KPI Panel is a card to show aggregated numbers',\n    //   purpose: ['Value'],\n    //   coord: ['Other'],\n    //   category: ['Other'],\n    //   shape: ['Other'],\n    //   dataPres: [{ minQty: 1, maxQty: '*', fieldConditions: ['Interval'] }],\n    //   channel: [''],\n    //   recRate: 'Recommended',\n    // },\n    /**\n     * WIP: unavailable until completed\n     */\n    // TODO @neoddish: add channel 'Text'\n    // table: {\n    //   id: 'table',\n    //   name: 'Table',\n    //   alias: ['Information Table'],\n    //   family: ['Table'],\n    //   def: 'A table consists of an ordered arrangement of rows and columns.',\n    //   purpose: ['Value'],\n    //   coord: ['Other'],\n    //   category: ['Other'],\n    //   shape: ['Other'],\n    //   dataPres: [{ minQty: 0, maxQty: '*', fieldConditions: [...LEVEL_OF_MEASUREMENTS] }],\n    //   channel: [],\n    //   recRate: 'Recommended',\n    // },\n};\n","import { __assign } from \"tslib\";\nimport { base } from './base';\n/**\n * A cheap way to get a copy of base.\n */\nfunction newBase() {\n    return JSON.parse(JSON.stringify(base));\n}\n/**\n * Process ckb config to given CKB object.\n *\n * 根据配置项处理 CKB 内容，得到最终使用的 CKB\n *\n * @param ckbCfg - CKB Configuration {@link CkbConfig}\n * @returns CKB for actual use\n */\nfunction processCkbCfg(ckb, ckbCfg) {\n    var ckbBase = ckb;\n    var exclude = ckbCfg.exclude, include = ckbCfg.include, custom = ckbCfg.custom;\n    // step 1: exclude charts from original CKB.\n    // ---\n    // 步骤一：如果有 exclude 项，先从给到的 CKB 中剔除部分选定的图表类型\n    if (exclude) {\n        exclude.forEach(function (chartType) {\n            if (Object.keys(ckbBase).includes(chartType)) {\n                delete ckbBase[chartType];\n            }\n        });\n    }\n    // step 2: only include charts from former CKB.\n    // ---\n    // 步骤二：如果有 include 项，则从当前（剔除后的）CKB中，只保留 include 中的图表类型。\n    if (include) {\n        Object.keys(ckbBase).forEach(function (chartType) {\n            if (!include.includes(chartType)) {\n                delete ckbBase[chartType];\n            }\n        });\n    }\n    // step 3: concat customized charts, may add or override chart types.\n    // ---\n    // 步骤三：在处理后的 CKB 最后，加入（可能存在的）自定义图表类型，实现图表类型的添加或覆写。\n    var finalCkbBase = __assign(__assign({}, ckbBase), custom);\n    return finalCkbBase;\n}\n/**\n * Get a CKB object.\n *\n * @param ckbCfg - CKB Configuration {@link CkbConfig}\n * @public\n */\nexport function ckb(ckbCfg) {\n    var base = newBase();\n    return ckbCfg ? processCkbCfg(base, ckbCfg) : base;\n}\n","/**\n * Array of standard IDs for each chart type.\n *\n * 所有图表类型的标准 ID\n *\n * @public\n */\nexport var CHART_IDS = [\n    'line_chart',\n    'step_line_chart',\n    'area_chart',\n    'stacked_area_chart',\n    'percent_stacked_area_chart',\n    'column_chart',\n    'grouped_column_chart',\n    'stacked_column_chart',\n    'percent_stacked_column_chart',\n    'range_column_chart',\n    'waterfall_chart',\n    'histogram',\n    'bar_chart',\n    'stacked_bar_chart',\n    'percent_stacked_bar_chart',\n    'grouped_bar_chart',\n    'range_bar_chart',\n    'radial_bar_chart',\n    'bullet_chart',\n    'pie_chart',\n    'donut_chart',\n    'nested_pie_chart',\n    'rose_chart',\n    'scatter_plot',\n    'bubble_chart',\n    'non_ribbon_chord_diagram',\n    'arc_diagram',\n    'chord_diagram',\n    'treemap',\n    'sankey_diagram',\n    'funnel_chart',\n    'mirror_funnel_chart',\n    'box_plot',\n    'heatmap',\n    'density_heatmap',\n    'radar_chart',\n    'wordcloud',\n    'candlestick_chart',\n    'compact_box_tree',\n    'dendrogram',\n    'indented_tree',\n    'radial_tree',\n    'flow_diagram',\n    'fruchterman_layout_graph',\n    'force_directed_layout_graph',\n    'fa2_layout_graph',\n    'mds_layout_graph',\n    'circular_layout_graph',\n    'spiral_layout_graph',\n    'radial_layout_graph',\n    'concentric_layout_graph',\n    'grid_layout_graph',\n];\n/**\n * Array of chart families.\n *\n * 所有图表家族\n *\n * @public\n */\nexport var FAMILIES = [\n    'LineCharts',\n    'ColumnCharts',\n    'BarCharts',\n    'PieCharts',\n    'AreaCharts',\n    'ScatterCharts',\n    'FunnelCharts',\n    'HeatmapCharts',\n    'RadarCharts',\n    'TreeGraph',\n    'GeneralGraph',\n    'PolygonLayer',\n    'LineLayer',\n    'PointLayer',\n    'HeatmapLayer',\n    'Table',\n    'Others',\n];\n/**\n * Array of analysis purposes.\n *\n * 所有分析目的\n *\n * @public\n */\nexport var PURPOSES = [\n    'Comparison',\n    'Trend',\n    'Distribution',\n    'Rank',\n    'Proportion',\n    'Composition',\n    'Relation',\n    'Hierarchy',\n    'Flow',\n    'Spatial',\n    'Anomaly',\n    'Value',\n];\n/**\n * Array of coordinate systems.\n *\n * 所有坐标系类型\n *\n * @public\n */\nexport var COORDINATE_SYSTEMS = [\n    'NumberLine',\n    'Cartesian2D',\n    'SymmetricCartesian',\n    'Cartesian3D',\n    'Polar',\n    'NodeLink',\n    'Radar',\n    'Geo',\n    'Other',\n];\n/**\n * Array of graphic categories.\n *\n * 所有图形大类\n *\n * @public\n */\nexport var GRAPHIC_CATEGORIES = ['Statistic', 'Diagram', 'Graph', 'Map', 'Other'];\n/**\n * Array of shapes.\n *\n * 所有形状\n *\n * @public\n */\nexport var SHAPES = [\n    'Lines',\n    'Bars',\n    'Round',\n    'Square',\n    'Area',\n    'Scatter',\n    'Symmetric',\n    'Network',\n    'Map',\n    'Other',\n];\n/**\n * Array of level of measurements.\n *\n * 所有度量水平\n *\n * @public\n */\nexport var LEVEL_OF_MEASUREMENTS = ['Nominal', 'Ordinal', 'Interval', 'Discrete', 'Continuous', 'Time'];\n/**\n * Array of channels.\n *\n * 所有通道\n *\n * @public\n */\nexport var CHANNELS = [\n    'Position',\n    'Length',\n    'Color',\n    'Area',\n    'Angle',\n    'ArcLength',\n    'Direction',\n    'Size',\n    'Opacity',\n    'Stroke',\n    'LineWidth',\n    'Lightness',\n];\n/**\n * Array of recommend ratings.\n * Recommend - For chart types you can safely recommend\n * Use with Caution - Not recommended unless you understand the pitfalls of these chart types.\n * Not Recommended - We know this chart type exists in the community, but it's really not recommended.\n *\n * 所有推荐评级\n * Recommend - 可以安全推荐的图表类型\n * Use with Caution - 除非你了解这些图表类型的缺陷，否则不推荐使用\n * Not Recommended - 我们知道这种图表类型在社区里存在，但真的不建议使用\n *\n * @public\n * @name RECOMMEND_RATINGS\n */\nexport var RECOMMEND_RATINGS = ['Recommended', 'Use with Caution', 'Not Recommended'];\n","/*\n * implementation of deepMix in antv/utils\n */\nvar MAX_MIX_LEVEL = 5;\nvar isObjectLike = function (value) {\n    /*\n     * isObjectLike({}) => true\n     * isObjectLike([1, 2, 3]) => true\n     * isObjectLike(Function) => false\n     * isObjectLike(null) => false\n     */\n    return typeof value === 'object' && value !== null;\n};\nvar toString = {}.toString;\nvar isType = function (value, type) { return toString.call(value) === \"[object \".concat(type, \"]\"); };\nvar isPlainObject = function (value) {\n    /*\n     * isObjectLike(new Foo) => false\n     * isObjectLike([1, 2, 3]) => false\n     * isObjectLike({ x: 0, y: 0 }) => true\n     * isObjectLike(Object.create(null)) => true\n     */\n    if (!isObjectLike(value) || !isType(value, 'Object')) {\n        return false;\n    }\n    if (Object.getPrototypeOf(value) === null) {\n        return true;\n    }\n    var proto = value;\n    while (Object.getPrototypeOf(proto) !== null) {\n        proto = Object.getPrototypeOf(proto);\n    }\n    return Object.getPrototypeOf(value) === proto;\n};\nvar isArray = function (value) {\n    return Array.isArray ? Array.isArray(value) : isType(value, 'Array');\n};\nfunction pDeepMix(inputDist, src, inputLevel, inputMaxLevel) {\n    var level = inputLevel || 0;\n    var maxLevel = inputMaxLevel || MAX_MIX_LEVEL;\n    var dist = inputDist;\n    Object.keys(src).forEach(function (key) {\n        if (Object.prototype.hasOwnProperty.call(src, key)) {\n            var value = src[key];\n            if (value !== null && isPlainObject(value)) {\n                if (!isPlainObject(dist[key])) {\n                    dist[key] = {};\n                }\n                if (level < maxLevel) {\n                    pDeepMix(dist[key], value, level + 1, maxLevel);\n                }\n                else {\n                    dist[key] = src[key];\n                }\n            }\n            else if (isArray(value)) {\n                dist[key] = [];\n                dist[key] = dist[key].concat(value);\n            }\n            else if (value !== undefined) {\n                dist[key] = value;\n            }\n        }\n    });\n}\nvar deepMix = function (rst) {\n    var args = [];\n    for (var _i = 1; _i < arguments.length; _i++) {\n        args[_i - 1] = arguments[_i];\n    }\n    for (var i = 0; i < args.length; i += 1) {\n        pDeepMix(rst, args[i]);\n    }\n    return rst;\n};\nexport default deepMix;\n","var isNil = function (input) {\n    return input === null;\n};\nexport default isNil;\n","import isNil from './isNil';\nvar compare = function (f1, f2) {\n    if (isNil(f1.distinct) || isNil(f2.distinct)) {\n        if (f1.distinct < f2.distinct) {\n            return 1;\n        }\n        if (f1.distinct > f2.distinct) {\n            return -1;\n        }\n        return 0;\n    }\n    return 0;\n};\nexport default compare;\n","var cloneDeep = function (obj) {\n    if (typeof obj !== 'object' || obj === null) {\n        return obj;\n    }\n    var result;\n    if (Array.isArray(obj)) {\n        result = [];\n        for (var i = 0, l = obj.length; i < l; i += 1) {\n            if (typeof obj[i] === 'object' && obj[i] != null) {\n                result[i] = cloneDeep(obj[i]);\n            }\n            else {\n                result[i] = obj[i];\n            }\n        }\n    }\n    else {\n        result = {};\n        var objKeys = Object.keys(obj);\n        for (var i = 0; i < objKeys.length; i += 1) {\n            var key = objKeys[i];\n            if (typeof obj[key] === 'object' && obj[key] != null) {\n                result[key] = cloneDeep(obj[key]);\n            }\n            else {\n                result[key] = obj[key];\n            }\n        }\n    }\n    return result;\n};\nexport default cloneDeep;\n","export function hasSubset(array1, array2) {\n    return array2.every(function (e) { return array1.includes(e); });\n}\n","export function intersects(array1, array2) {\n    return array2.some(function (e) { return array1.includes(e); });\n}\n","/**\n *  MAX_SOFT_RULE_COEFFICIENT is the max benifit coefficient for soft rule in advisor\n *  correspondingly，\n * （ 1 / MAX_SOFT_RULE_COEFFICIENT ）is the \"max\" penalty coefficient for soft rule in advisor\n *  */\nexport var MAX_SOFT_RULE_COEFFICIENT = 10;\n","import { hasSubset } from '../../utils';\nimport { MAX_SOFT_RULE_COEFFICIENT } from './constants';\nvar applyChartTypes = [\n    'bar_chart',\n    'grouped_bar_chart',\n    'stacked_bar_chart',\n    'percent_stacked_bar_chart',\n    'column_chart',\n    'grouped_column_chart',\n    'stacked_column_chart',\n    'percent_stacked_column_chart',\n];\nexport var barSeriesQty = {\n    id: 'bar-series-qty',\n    type: 'SOFT',\n    docs: {\n        lintText: 'Bar chart should has proper number of bars or bar groups.',\n    },\n    trigger: function (_a) {\n        var chartType = _a.chartType;\n        return applyChartTypes.includes(chartType);\n    },\n    validator: function (args) {\n        var result = 1;\n        var dataProps = args.dataProps, chartType = args.chartType;\n        if (dataProps && chartType) {\n            var field4Series = dataProps.find(function (field) { return hasSubset(field.levelOfMeasurements, ['Nominal']); });\n            var seriesQty = field4Series && field4Series.count ? field4Series.count : 0;\n            if (seriesQty > 20) {\n                result = 20 / seriesQty;\n            }\n        }\n        result = result < 1 / MAX_SOFT_RULE_COEFFICIENT ? 1 / MAX_SOFT_RULE_COEFFICIENT : result;\n        return result;\n    },\n};\n","var applyChartTypes = [\n    'bar_chart',\n    'grouped_bar_chart',\n    'stacked_bar_chart',\n    'percent_stacked_bar_chart',\n    'column_chart',\n    'grouped_column_chart',\n    'stacked_column_chart',\n    'percent_stacked_column_chart',\n];\nexport var barWithoutAxisMin = {\n    id: 'bar-without-axis-min',\n    type: 'DESIGN',\n    docs: {\n        lintText: 'It is not recommended to set the minimum value of axis for the bar or column chart.',\n        fixText: 'Remove the minimum value config of axis.',\n    },\n    trigger: function (_a) {\n        var chartType = _a.chartType;\n        return applyChartTypes.includes(chartType);\n    },\n    optimizer: function (_, chartSpec) {\n        var _a, _b;\n        var scale = chartSpec.scale;\n        if (!scale)\n            return {};\n        // @ts-ignore 待 g2 发版后去掉@ts-ignore\n        var xMin = (_a = scale.x) === null || _a === void 0 ? void 0 : _a.domainMin;\n        //  @ts-ignore 同上\n        var yMin = (_b = scale.y) === null || _b === void 0 ? void 0 : _b.domainMin;\n        if (xMin || yMin) {\n            var newScale = JSON.parse(JSON.stringify(scale));\n            if (xMin)\n                newScale.x.domainMin = 0;\n            if (yMin)\n                newScale.y.domainMin = 0;\n            return { scale: newScale };\n        }\n        return {};\n    },\n};\n","import { __assign } from \"tslib\";\nimport { intersects } from '../utils';\nimport { DEFAULT_RULE_WEIGHTS } from '../constants';\nexport function compare(f1, f2) {\n    if (f1.distinct < f2.distinct) {\n        return 1;\n    }\n    if (f1.distinct > f2.distinct) {\n        return -1;\n    }\n    return 0;\n}\nexport function verifyDataProps(dataPre, dataProps) {\n    var fieldsLOMs = dataProps.map(function (info) {\n        return info.levelOfMeasurements;\n    });\n    if (fieldsLOMs) {\n        var lomCount_1 = 0;\n        fieldsLOMs.forEach(function (fieldLOM) {\n            if (fieldLOM && intersects(fieldLOM, dataPre.fieldConditions)) {\n                lomCount_1 += 1;\n            }\n        });\n        if (lomCount_1 >= dataPre.minQty && (lomCount_1 <= dataPre.maxQty || dataPre.maxQty === '*')) {\n            return true;\n        }\n    }\n    return false;\n}\nexport function isUndefined(value) {\n    return value === undefined;\n}\nvar defaultWeights = DEFAULT_RULE_WEIGHTS;\nexport var computeScore = function (chartType, chartWIKI, ruleBase, ruleType, info, log) {\n    // initial score is 1 for HARD rules and 0 for SOFT rules\n    var computedScore = 1;\n    Object.values(ruleBase)\n        .filter(function (r) {\n        var _a, _b, _c;\n        var weight = ((_a = r.option) === null || _a === void 0 ? void 0 : _a.weight) || defaultWeights[r.id] || 1;\n        var extra = (_b = r.option) === null || _b === void 0 ? void 0 : _b.extra;\n        return r.type === ruleType && r.trigger(__assign(__assign(__assign(__assign({}, info), { weight: weight }), extra), { chartType: chartType, chartWIKI: chartWIKI })) && !((_c = r.option) === null || _c === void 0 ? void 0 : _c.off);\n    })\n        .forEach(function (r) {\n        var _a, _b;\n        var weight = ((_a = r.option) === null || _a === void 0 ? void 0 : _a.weight) || defaultWeights[r.id] || 1;\n        var extra = (_b = r.option) === null || _b === void 0 ? void 0 : _b.extra;\n        var base = r.validator(__assign(__assign(__assign(__assign({}, info), { weight: weight }), extra), { chartType: chartType, chartWIKI: chartWIKI }));\n        var score = weight * base;\n        computedScore *= score;\n        log.push({ phase: 'ADVISE', ruleId: r.id, score: score, base: base, weight: weight, ruleType: ruleType });\n    });\n    return computedScore;\n};\n","export var DEFAULT_RULE_WEIGHTS = {\n    'bar-series-qty': 0.5,\n    'data-check': 1.0,\n    'data-field-qty': 1.0,\n    'diff-pie-sector': 0.5,\n    'landscape-or-portrait': 0.3,\n    'limit-series': 1.0,\n    'line-field-time-ordinal': 1.0,\n    'no-redundant-field': 1.0,\n    'nominal-enum-combinatorial': 1.0,\n    'purpose-check': 1.0,\n    'series-qty-limit': 0.8,\n};\n","import { verifyDataProps } from '../utils';\nimport { intersects } from '../../utils';\nexport var dataCheck = {\n    id: 'data-check',\n    type: 'HARD',\n    docs: {\n        lintText: 'Data must satisfy the data prerequisites.',\n    },\n    trigger: function () {\n        return true;\n    },\n    validator: function (args) {\n        var result = 0;\n        var dataProps = args.dataProps, chartType = args.chartType, chartWIKI = args.chartWIKI;\n        if (dataProps && chartType && chartWIKI[chartType]) {\n            result = 1;\n            var dataPres_1 = chartWIKI[chartType].dataPres || [];\n            dataPres_1.forEach(function (dataPre) {\n                if (!verifyDataProps(dataPre, dataProps)) {\n                    result = 0;\n                }\n            });\n            var fieldsLOMs = dataProps.map(function (info) {\n                return info.levelOfMeasurements;\n            });\n            fieldsLOMs.forEach(function (fieldLOM) {\n                var flag = false;\n                dataPres_1.forEach(function (dataPre) {\n                    if (fieldLOM && intersects(fieldLOM, dataPre.fieldConditions)) {\n                        flag = true;\n                    }\n                });\n                if (!flag) {\n                    result = 0;\n                }\n            });\n        }\n        return result;\n    },\n};\n","import { hasSubset } from '../../utils';\nimport { MAX_SOFT_RULE_COEFFICIENT } from './constants';\nvar applyChartTypes = ['pie_chart', 'donut_chart'];\nexport var diffPieSector = {\n    id: 'diff-pie-sector',\n    type: 'SOFT',\n    docs: {\n        lintText: 'The difference between sectors of a pie chart should be large enough.',\n    },\n    trigger: function (_a) {\n        var chartType = _a.chartType;\n        return applyChartTypes.includes(chartType);\n    },\n    validator: function (args) {\n        var result = 1;\n        var dataProps = args.dataProps;\n        if (dataProps) {\n            var intervalField = dataProps.find(function (field) { return hasSubset(field.levelOfMeasurements, ['Interval']); });\n            if (intervalField && intervalField.sum && intervalField.rawData) {\n                var sum = intervalField.sum;\n                var scale_1 = 1 / sum;\n                var scaledSamples = intervalField.rawData.map(function (v) { return v * scale_1; });\n                var scaledProduct = scaledSamples.reduce(function (a, c) { return a * c; });\n                var count = intervalField.rawData.length;\n                var maxProduct = Math.pow((1 / count), count);\n                // Math.abs(maxProduct - Math.abs(scaledProduct)) / maxProduct 这个值 小于 0.5 会被认为有点问题\n                result = MAX_SOFT_RULE_COEFFICIENT * 0.2 * (Math.abs(maxProduct - Math.abs(scaledProduct)) / maxProduct);\n            }\n        }\n        result = result < 1 / MAX_SOFT_RULE_COEFFICIENT ? 1 / MAX_SOFT_RULE_COEFFICIENT : result;\n        return result;\n    },\n};\n","import { MAX_SOFT_RULE_COEFFICIENT } from './constants';\nvar applyChartTypes = [\n    'bar_chart',\n    'grouped_bar_chart',\n    'stacked_bar_chart',\n    'percent_stacked_bar_chart',\n    'column_chart',\n    'grouped_column_chart',\n    'stacked_column_chart',\n    'percent_stacked_column_chart',\n];\nfunction hasCanvasLayout(_a) {\n    var chartType = _a.chartType, dataProps = _a.dataProps, preferences = _a.preferences;\n    return !!(dataProps && chartType && preferences && preferences.canvasLayout);\n}\nexport var landscapeOrPortrait = {\n    id: 'landscape-or-portrait',\n    type: 'SOFT',\n    docs: {\n        lintText: 'Recommend column charts for landscape layout and bar charts for portrait layout.',\n    },\n    trigger: function (info) {\n        return applyChartTypes.includes(info.chartType) && hasCanvasLayout(info);\n    },\n    validator: function (args) {\n        var result = 1;\n        var chartType = args.chartType, preferences = args.preferences;\n        if (hasCanvasLayout(args)) {\n            if (preferences.canvasLayout === 'portrait' &&\n                ['bar_chart', 'grouped_bar_chart', 'stacked_bar_chart', 'percent_stacked_bar_chart'].includes(chartType)) {\n                result = MAX_SOFT_RULE_COEFFICIENT * 0.5;\n            }\n            else if (preferences.canvasLayout === 'landscape' &&\n                ['column_chart', 'grouped_column_chart', 'stacked_column_chart', 'percent_stacked_column_chart'].includes(chartType)) {\n                result = MAX_SOFT_RULE_COEFFICIENT * 0.5;\n            }\n        }\n        return result;\n    },\n};\n","import { intersects } from '../../utils';\nimport { compare } from '../utils';\nimport { MAX_SOFT_RULE_COEFFICIENT } from './constants';\nfunction hasSeriesField(dataProps) {\n    var nominalOrOrdinalFields = dataProps.filter(function (field) {\n        return intersects(field.levelOfMeasurements, ['Nominal', 'Ordinal']);\n    });\n    return nominalOrOrdinalFields.length >= 2;\n}\n/*\n只有 heatmap 能映射两个 维值非常多的 字段，因为对于 其他图表，如柱状图来说，第二个维度字段 就要映射成 颜色了。而颜色不适合映射特别多的维度。\n所以，在有 两个 维度字段的时候，在两个维度的维值都很多的情况下，要给 heatmap 加分，给其他图表减分。\n */\nexport var limitSeries = {\n    id: 'limit-series',\n    type: 'SOFT',\n    docs: {\n        lintText: 'Avoid too many values in one series.',\n    },\n    trigger: function (_a) {\n        var dataProps = _a.dataProps;\n        return hasSeriesField(dataProps);\n    },\n    validator: function (args) {\n        var result = 1;\n        var dataProps = args.dataProps, chartType = args.chartType;\n        if (dataProps) {\n            var nominalOrOrdinalFields = dataProps.filter(function (field) {\n                return intersects(field.levelOfMeasurements, ['Nominal', 'Ordinal']);\n            });\n            if (nominalOrOrdinalFields.length >= 2) {\n                var sortedFields = nominalOrOrdinalFields.sort(compare);\n                var f = sortedFields[1];\n                if (f.distinct) {\n                    result = f.distinct > MAX_SOFT_RULE_COEFFICIENT ? 1 / MAX_SOFT_RULE_COEFFICIENT : 1 / f.distinct;\n                    if (f.distinct > 6 && chartType === 'heatmap') {\n                        result = MAX_SOFT_RULE_COEFFICIENT * 0.5;\n                    }\n                    else if (chartType === 'heatmap') {\n                        result = 1;\n                    }\n                }\n            }\n        }\n        return result;\n    },\n};\n","import { intersects } from '../../utils';\nimport { MAX_SOFT_RULE_COEFFICIENT } from './constants';\nvar applyChartTypes = ['line_chart', 'area_chart', 'stacked_area_chart', 'percent_stacked_area_chart'];\nexport var lineFieldTimeOrdinal = {\n    id: 'line-field-time-ordinal',\n    type: 'SOFT',\n    docs: {\n        lintText: 'Data containing time or ordinal fields are suitable for line or area charts.',\n    },\n    trigger: function (_a) {\n        var chartType = _a.chartType;\n        return applyChartTypes.includes(chartType);\n    },\n    validator: function (args) {\n        var result = 1;\n        var dataProps = args.dataProps;\n        if (dataProps) {\n            var field4TimeOrOrdinal = dataProps.find(function (field) { return intersects(field.levelOfMeasurements, ['Ordinal', 'Time']); });\n            if (field4TimeOrOrdinal) {\n                result = MAX_SOFT_RULE_COEFFICIENT * 0.5;\n            }\n        }\n        return result;\n    },\n};\n","import { hasSubset } from '../../utils';\nimport { compare } from '../utils';\nimport { MAX_SOFT_RULE_COEFFICIENT } from './constants';\nvar applyChartTypes = [\n    'bar_chart',\n    'column_chart',\n    'grouped_bar_chart',\n    'grouped_column_chart',\n    'stacked_bar_chart',\n    'stacked_column_chart',\n];\nfunction getNominalFields(dataProps) {\n    return dataProps.filter(function (field) { return hasSubset(field.levelOfMeasurements, ['Nominal']); });\n}\nexport var nominalEnumCombinatorial = {\n    id: 'nominal-enum-combinatorial',\n    type: 'SOFT',\n    docs: {\n        lintText: 'Single (Basic) and Multi (Stacked, Grouped,...) charts should be optimized recommended by nominal enums combinatorial numbers.',\n    },\n    trigger: function (_a) {\n        var chartType = _a.chartType, dataProps = _a.dataProps;\n        return (applyChartTypes.includes(chartType) && getNominalFields(dataProps).length >= 2);\n    },\n    validator: function (args) {\n        var result = 1;\n        var dataProps = args.dataProps, chartType = args.chartType;\n        if (dataProps) {\n            var nominalFields = getNominalFields(dataProps);\n            if (nominalFields.length >= 2) {\n                var sortedNominals = nominalFields.sort(compare);\n                var f1 = sortedNominals[0];\n                var f2 = sortedNominals[1];\n                if (f1.distinct === f1.count) {\n                    if (['bar_chart', 'column_chart'].includes(chartType)) {\n                        result = MAX_SOFT_RULE_COEFFICIENT * 0.5;\n                    }\n                }\n                if (f1.count && f1.distinct && f2.distinct && f1.count > f1.distinct) {\n                    var typeOptions = [\n                        'grouped_bar_chart',\n                        'grouped_column_chart',\n                        'stacked_bar_chart',\n                        'stacked_column_chart',\n                    ];\n                    if (typeOptions.includes(chartType)) {\n                        result = MAX_SOFT_RULE_COEFFICIENT * 0.5;\n                    }\n                }\n            }\n        }\n        return result;\n    },\n};\n","import { hasSubset } from '../../utils';\nimport { MAX_SOFT_RULE_COEFFICIENT } from './constants';\nvar applyChartTypes = ['pie_chart', 'donut_chart', 'radar_chart', 'rose_chart'];\nexport var seriesQtyLimit = {\n    id: 'series-qty-limit',\n    type: 'SOFT',\n    docs: {\n        lintText: 'Some charts should has at most N values for the series.',\n    },\n    trigger: function (_a) {\n        var chartType = _a.chartType;\n        return applyChartTypes.includes(chartType);\n    },\n    validator: function (args) {\n        var result = 1;\n        var dataProps = args.dataProps, chartType = args.chartType;\n        var limit = args.limit;\n        if (!Number.isInteger(limit) || limit <= 0) {\n            limit = 6;\n            if (chartType === 'pie_chart' || chartType === 'donut_chart' || chartType === 'rose_chart')\n                limit = 6;\n            if (chartType === 'radar_chart')\n                limit = 8;\n        }\n        if (dataProps) {\n            var field4Series = dataProps.find(function (field) { return hasSubset(field.levelOfMeasurements, ['Nominal']); });\n            var seriesQty = field4Series && field4Series.count ? field4Series.count : 0;\n            if (seriesQty >= 2 && seriesQty <= limit) {\n                result = MAX_SOFT_RULE_COEFFICIENT * 0.5 + 2 / seriesQty;\n            }\n        }\n        return result;\n    },\n};\n","/**\n * @license\n * Lodash <https://lodash.com/>\n * Copyright OpenJS Foundation and other contributors <https://openjsf.org/>\n * Released under MIT license <https://lodash.com/license>\n * Based on Underscore.js 1.8.3 <http://underscorejs.org/LICENSE>\n * Copyright Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors\n */\n;(function() {\n\n  /** Used as a safe reference for `undefined` in pre-ES5 environments. */\n  var undefined;\n\n  /** Used as the semantic version number. */\n  var VERSION = '4.17.21';\n\n  /** Used as the size to enable large array optimizations. */\n  var LARGE_ARRAY_SIZE = 200;\n\n  /** Error message constants. */\n  var CORE_ERROR_TEXT = 'Unsupported core-js use. Try https://npms.io/search?q=ponyfill.',\n      FUNC_ERROR_TEXT = 'Expected a function',\n      INVALID_TEMPL_VAR_ERROR_TEXT = 'Invalid `variable` option passed into `_.template`';\n\n  /** Used to stand-in for `undefined` hash values. */\n  var HASH_UNDEFINED = '__lodash_hash_undefined__';\n\n  /** Used as the maximum memoize cache size. */\n  var MAX_MEMOIZE_SIZE = 500;\n\n  /** Used as the internal argument placeholder. */\n  var PLACEHOLDER = '__lodash_placeholder__';\n\n  /** Used to compose bitmasks for cloning. */\n  var CLONE_DEEP_FLAG = 1,\n      CLONE_FLAT_FLAG = 2,\n      CLONE_SYMBOLS_FLAG = 4;\n\n  /** Used to compose bitmasks for value comparisons. */\n  var COMPARE_PARTIAL_FLAG = 1,\n      COMPARE_UNORDERED_FLAG = 2;\n\n  /** Used to compose bitmasks for function metadata. */\n  var WRAP_BIND_FLAG = 1,\n      WRAP_BIND_KEY_FLAG = 2,\n      WRAP_CURRY_BOUND_FLAG = 4,\n      WRAP_CURRY_FLAG = 8,\n      WRAP_CURRY_RIGHT_FLAG = 16,\n      WRAP_PARTIAL_FLAG = 32,\n      WRAP_PARTIAL_RIGHT_FLAG = 64,\n      WRAP_ARY_FLAG = 128,\n      WRAP_REARG_FLAG = 256,\n      WRAP_FLIP_FLAG = 512;\n\n  /** Used as default options for `_.truncate`. */\n  var DEFAULT_TRUNC_LENGTH = 30,\n      DEFAULT_TRUNC_OMISSION = '...';\n\n  /** Used to detect hot functions by number of calls within a span of milliseconds. */\n  var HOT_COUNT = 800,\n      HOT_SPAN = 16;\n\n  /** Used to indicate the type of lazy iteratees. */\n  var LAZY_FILTER_FLAG = 1,\n      LAZY_MAP_FLAG = 2,\n      LAZY_WHILE_FLAG = 3;\n\n  /** Used as references for various `Number` constants. */\n  var INFINITY = 1 / 0,\n      MAX_SAFE_INTEGER = 9007199254740991,\n      MAX_INTEGER = 1.7976931348623157e+308,\n      NAN = 0 / 0;\n\n  /** Used as references for the maximum length and index of an array. */\n  var MAX_ARRAY_LENGTH = 4294967295,\n      MAX_ARRAY_INDEX = MAX_ARRAY_LENGTH - 1,\n      HALF_MAX_ARRAY_LENGTH = MAX_ARRAY_LENGTH >>> 1;\n\n  /** Used to associate wrap methods with their bit flags. */\n  var wrapFlags = [\n    ['ary', WRAP_ARY_FLAG],\n    ['bind', WRAP_BIND_FLAG],\n    ['bindKey', WRAP_BIND_KEY_FLAG],\n    ['curry', WRAP_CURRY_FLAG],\n    ['curryRight', WRAP_CURRY_RIGHT_FLAG],\n    ['flip', WRAP_FLIP_FLAG],\n    ['partial', WRAP_PARTIAL_FLAG],\n    ['partialRight', WRAP_PARTIAL_RIGHT_FLAG],\n    ['rearg', WRAP_REARG_FLAG]\n  ];\n\n  /** `Object#toString` result references. */\n  var argsTag = '[object Arguments]',\n      arrayTag = '[object Array]',\n      asyncTag = '[object AsyncFunction]',\n      boolTag = '[object Boolean]',\n      dateTag = '[object Date]',\n      domExcTag = '[object DOMException]',\n      errorTag = '[object Error]',\n      funcTag = '[object Function]',\n      genTag = '[object GeneratorFunction]',\n      mapTag = '[object Map]',\n      numberTag = '[object Number]',\n      nullTag = '[object Null]',\n      objectTag = '[object Object]',\n      promiseTag = '[object Promise]',\n      proxyTag = '[object Proxy]',\n      regexpTag = '[object RegExp]',\n      setTag = '[object Set]',\n      stringTag = '[object String]',\n      symbolTag = '[object Symbol]',\n      undefinedTag = '[object Undefined]',\n      weakMapTag = '[object WeakMap]',\n      weakSetTag = '[object WeakSet]';\n\n  var arrayBufferTag = '[object ArrayBuffer]',\n      dataViewTag = '[object DataView]',\n      float32Tag = '[object Float32Array]',\n      float64Tag = '[object Float64Array]',\n      int8Tag = '[object Int8Array]',\n      int16Tag = '[object Int16Array]',\n      int32Tag = '[object Int32Array]',\n      uint8Tag = '[object Uint8Array]',\n      uint8ClampedTag = '[object Uint8ClampedArray]',\n      uint16Tag = '[object Uint16Array]',\n      uint32Tag = '[object Uint32Array]';\n\n  /** Used to match empty string literals in compiled template source. */\n  var reEmptyStringLeading = /\\b__p \\+= '';/g,\n      reEmptyStringMiddle = /\\b(__p \\+=) '' \\+/g,\n      reEmptyStringTrailing = /(__e\\(.*?\\)|\\b__t\\)) \\+\\n'';/g;\n\n  /** Used to match HTML entities and HTML characters. */\n  var reEscapedHtml = /&(?:amp|lt|gt|quot|#39);/g,\n      reUnescapedHtml = /[&<>\"']/g,\n      reHasEscapedHtml = RegExp(reEscapedHtml.source),\n      reHasUnescapedHtml = RegExp(reUnescapedHtml.source);\n\n  /** Used to match template delimiters. */\n  var reEscape = /<%-([\\s\\S]+?)%>/g,\n      reEvaluate = /<%([\\s\\S]+?)%>/g,\n      reInterpolate = /<%=([\\s\\S]+?)%>/g;\n\n  /** Used to match property names within property paths. */\n  var reIsDeepProp = /\\.|\\[(?:[^[\\]]*|([\"'])(?:(?!\\1)[^\\\\]|\\\\.)*?\\1)\\]/,\n      reIsPlainProp = /^\\w*$/,\n      rePropName = /[^.[\\]]+|\\[(?:(-?\\d+(?:\\.\\d+)?)|([\"'])((?:(?!\\2)[^\\\\]|\\\\.)*?)\\2)\\]|(?=(?:\\.|\\[\\])(?:\\.|\\[\\]|$))/g;\n\n  /**\n   * Used to match `RegExp`\n   * [syntax characters](http://ecma-international.org/ecma-262/7.0/#sec-patterns).\n   */\n  var reRegExpChar = /[\\\\^$.*+?()[\\]{}|]/g,\n      reHasRegExpChar = RegExp(reRegExpChar.source);\n\n  /** Used to match leading whitespace. */\n  var reTrimStart = /^\\s+/;\n\n  /** Used to match a single whitespace character. */\n  var reWhitespace = /\\s/;\n\n  /** Used to match wrap detail comments. */\n  var reWrapComment = /\\{(?:\\n\\/\\* \\[wrapped with .+\\] \\*\\/)?\\n?/,\n      reWrapDetails = /\\{\\n\\/\\* \\[wrapped with (.+)\\] \\*/,\n      reSplitDetails = /,? & /;\n\n  /** Used to match words composed of alphanumeric characters. */\n  var reAsciiWord = /[^\\x00-\\x2f\\x3a-\\x40\\x5b-\\x60\\x7b-\\x7f]+/g;\n\n  /**\n   * Used to validate the `validate` option in `_.template` variable.\n   *\n   * Forbids characters which could potentially change the meaning of the function argument definition:\n   * - \"(),\" (modification of function parameters)\n   * - \"=\" (default value)\n   * - \"[]{}\" (destructuring of function parameters)\n   * - \"/\" (beginning of a comment)\n   * - whitespace\n   */\n  var reForbiddenIdentifierChars = /[()=,{}\\[\\]\\/\\s]/;\n\n  /** Used to match backslashes in property paths. */\n  var reEscapeChar = /\\\\(\\\\)?/g;\n\n  /**\n   * Used to match\n   * [ES template delimiters](http://ecma-international.org/ecma-262/7.0/#sec-template-literal-lexical-components).\n   */\n  var reEsTemplate = /\\$\\{([^\\\\}]*(?:\\\\.[^\\\\}]*)*)\\}/g;\n\n  /** Used to match `RegExp` flags from their coerced string values. */\n  var reFlags = /\\w*$/;\n\n  /** Used to detect bad signed hexadecimal string values. */\n  var reIsBadHex = /^[-+]0x[0-9a-f]+$/i;\n\n  /** Used to detect binary string values. */\n  var reIsBinary = /^0b[01]+$/i;\n\n  /** Used to detect host constructors (Safari). */\n  var reIsHostCtor = /^\\[object .+?Constructor\\]$/;\n\n  /** Used to detect octal string values. */\n  var reIsOctal = /^0o[0-7]+$/i;\n\n  /** Used to detect unsigned integer values. */\n  var reIsUint = /^(?:0|[1-9]\\d*)$/;\n\n  /** Used to match Latin Unicode letters (excluding mathematical operators). */\n  var reLatin = /[\\xc0-\\xd6\\xd8-\\xf6\\xf8-\\xff\\u0100-\\u017f]/g;\n\n  /** Used to ensure capturing order of template delimiters. */\n  var reNoMatch = /($^)/;\n\n  /** Used to match unescaped characters in compiled string literals. */\n  var reUnescapedString = /['\\n\\r\\u2028\\u2029\\\\]/g;\n\n  /** Used to compose unicode character classes. */\n  var rsAstralRange = '\\\\ud800-\\\\udfff',\n      rsComboMarksRange = '\\\\u0300-\\\\u036f',\n      reComboHalfMarksRange = '\\\\ufe20-\\\\ufe2f',\n      rsComboSymbolsRange = '\\\\u20d0-\\\\u20ff',\n      rsComboRange = rsComboMarksRange + reComboHalfMarksRange + rsComboSymbolsRange,\n      rsDingbatRange = '\\\\u2700-\\\\u27bf',\n      rsLowerRange = 'a-z\\\\xdf-\\\\xf6\\\\xf8-\\\\xff',\n      rsMathOpRange = '\\\\xac\\\\xb1\\\\xd7\\\\xf7',\n      rsNonCharRange = '\\\\x00-\\\\x2f\\\\x3a-\\\\x40\\\\x5b-\\\\x60\\\\x7b-\\\\xbf',\n      rsPunctuationRange = '\\\\u2000-\\\\u206f',\n      rsSpaceRange = ' \\\\t\\\\x0b\\\\f\\\\xa0\\\\ufeff\\\\n\\\\r\\\\u2028\\\\u2029\\\\u1680\\\\u180e\\\\u2000\\\\u2001\\\\u2002\\\\u2003\\\\u2004\\\\u2005\\\\u2006\\\\u2007\\\\u2008\\\\u2009\\\\u200a\\\\u202f\\\\u205f\\\\u3000',\n      rsUpperRange = 'A-Z\\\\xc0-\\\\xd6\\\\xd8-\\\\xde',\n      rsVarRange = '\\\\ufe0e\\\\ufe0f',\n      rsBreakRange = rsMathOpRange + rsNonCharRange + rsPunctuationRange + rsSpaceRange;\n\n  /** Used to compose unicode capture groups. */\n  var rsApos = \"['\\u2019]\",\n      rsAstral = '[' + rsAstralRange + ']',\n      rsBreak = '[' + rsBreakRange + ']',\n      rsCombo = '[' + rsComboRange + ']',\n      rsDigits = '\\\\d+',\n      rsDingbat = '[' + rsDingbatRange + ']',\n      rsLower = '[' + rsLowerRange + ']',\n      rsMisc = '[^' + rsAstralRange + rsBreakRange + rsDigits + rsDingbatRange + rsLowerRange + rsUpperRange + ']',\n      rsFitz = '\\\\ud83c[\\\\udffb-\\\\udfff]',\n      rsModifier = '(?:' + rsCombo + '|' + rsFitz + ')',\n      rsNonAstral = '[^' + rsAstralRange + ']',\n      rsRegional = '(?:\\\\ud83c[\\\\udde6-\\\\uddff]){2}',\n      rsSurrPair = '[\\\\ud800-\\\\udbff][\\\\udc00-\\\\udfff]',\n      rsUpper = '[' + rsUpperRange + ']',\n      rsZWJ = '\\\\u200d';\n\n  /** Used to compose unicode regexes. */\n  var rsMiscLower = '(?:' + rsLower + '|' + rsMisc + ')',\n      rsMiscUpper = '(?:' + rsUpper + '|' + rsMisc + ')',\n      rsOptContrLower = '(?:' + rsApos + '(?:d|ll|m|re|s|t|ve))?',\n      rsOptContrUpper = '(?:' + rsApos + '(?:D|LL|M|RE|S|T|VE))?',\n      reOptMod = rsModifier + '?',\n      rsOptVar = '[' + rsVarRange + ']?',\n      rsOptJoin = '(?:' + rsZWJ + '(?:' + [rsNonAstral, rsRegional, rsSurrPair].join('|') + ')' + rsOptVar + reOptMod + ')*',\n      rsOrdLower = '\\\\d*(?:1st|2nd|3rd|(?![123])\\\\dth)(?=\\\\b|[A-Z_])',\n      rsOrdUpper = '\\\\d*(?:1ST|2ND|3RD|(?![123])\\\\dTH)(?=\\\\b|[a-z_])',\n      rsSeq = rsOptVar + reOptMod + rsOptJoin,\n      rsEmoji = '(?:' + [rsDingbat, rsRegional, rsSurrPair].join('|') + ')' + rsSeq,\n      rsSymbol = '(?:' + [rsNonAstral + rsCombo + '?', rsCombo, rsRegional, rsSurrPair, rsAstral].join('|') + ')';\n\n  /** Used to match apostrophes. */\n  var reApos = RegExp(rsApos, 'g');\n\n  /**\n   * Used to match [combining diacritical marks](https://en.wikipedia.org/wiki/Combining_Diacritical_Marks) and\n   * [combining diacritical marks for symbols](https://en.wikipedia.org/wiki/Combining_Diacritical_Marks_for_Symbols).\n   */\n  var reComboMark = RegExp(rsCombo, 'g');\n\n  /** Used to match [string symbols](https://mathiasbynens.be/notes/javascript-unicode). */\n  var reUnicode = RegExp(rsFitz + '(?=' + rsFitz + ')|' + rsSymbol + rsSeq, 'g');\n\n  /** Used to match complex or compound words. */\n  var reUnicodeWord = RegExp([\n    rsUpper + '?' + rsLower + '+' + rsOptContrLower + '(?=' + [rsBreak, rsUpper, '$'].join('|') + ')',\n    rsMiscUpper + '+' + rsOptContrUpper + '(?=' + [rsBreak, rsUpper + rsMiscLower, '$'].join('|') + ')',\n    rsUpper + '?' + rsMiscLower + '+' + rsOptContrLower,\n    rsUpper + '+' + rsOptContrUpper,\n    rsOrdUpper,\n    rsOrdLower,\n    rsDigits,\n    rsEmoji\n  ].join('|'), 'g');\n\n  /** Used to detect strings with [zero-width joiners or code points from the astral planes](http://eev.ee/blog/2015/09/12/dark-corners-of-unicode/). */\n  var reHasUnicode = RegExp('[' + rsZWJ + rsAstralRange  + rsComboRange + rsVarRange + ']');\n\n  /** Used to detect strings that need a more robust regexp to match words. */\n  var reHasUnicodeWord = /[a-z][A-Z]|[A-Z]{2}[a-z]|[0-9][a-zA-Z]|[a-zA-Z][0-9]|[^a-zA-Z0-9 ]/;\n\n  /** Used to assign default `context` object properties. */\n  var contextProps = [\n    'Array', 'Buffer', 'DataView', 'Date', 'Error', 'Float32Array', 'Float64Array',\n    'Function', 'Int8Array', 'Int16Array', 'Int32Array', 'Map', 'Math', 'Object',\n    'Promise', 'RegExp', 'Set', 'String', 'Symbol', 'TypeError', 'Uint8Array',\n    'Uint8ClampedArray', 'Uint16Array', 'Uint32Array', 'WeakMap',\n    '_', 'clearTimeout', 'isFinite', 'parseInt', 'setTimeout'\n  ];\n\n  /** Used to make template sourceURLs easier to identify. */\n  var templateCounter = -1;\n\n  /** Used to identify `toStringTag` values of typed arrays. */\n  var typedArrayTags = {};\n  typedArrayTags[float32Tag] = typedArrayTags[float64Tag] =\n  typedArrayTags[int8Tag] = typedArrayTags[int16Tag] =\n  typedArrayTags[int32Tag] = typedArrayTags[uint8Tag] =\n  typedArrayTags[uint8ClampedTag] = typedArrayTags[uint16Tag] =\n  typedArrayTags[uint32Tag] = true;\n  typedArrayTags[argsTag] = typedArrayTags[arrayTag] =\n  typedArrayTags[arrayBufferTag] = typedArrayTags[boolTag] =\n  typedArrayTags[dataViewTag] = typedArrayTags[dateTag] =\n  typedArrayTags[errorTag] = typedArrayTags[funcTag] =\n  typedArrayTags[mapTag] = typedArrayTags[numberTag] =\n  typedArrayTags[objectTag] = typedArrayTags[regexpTag] =\n  typedArrayTags[setTag] = typedArrayTags[stringTag] =\n  typedArrayTags[weakMapTag] = false;\n\n  /** Used to identify `toStringTag` values supported by `_.clone`. */\n  var cloneableTags = {};\n  cloneableTags[argsTag] = cloneableTags[arrayTag] =\n  cloneableTags[arrayBufferTag] = cloneableTags[dataViewTag] =\n  cloneableTags[boolTag] = cloneableTags[dateTag] =\n  cloneableTags[float32Tag] = cloneableTags[float64Tag] =\n  cloneableTags[int8Tag] = cloneableTags[int16Tag] =\n  cloneableTags[int32Tag] = cloneableTags[mapTag] =\n  cloneableTags[numberTag] = cloneableTags[objectTag] =\n  cloneableTags[regexpTag] = cloneableTags[setTag] =\n  cloneableTags[stringTag] = cloneableTags[symbolTag] =\n  cloneableTags[uint8Tag] = cloneableTags[uint8ClampedTag] =\n  cloneableTags[uint16Tag] = cloneableTags[uint32Tag] = true;\n  cloneableTags[errorTag] = cloneableTags[funcTag] =\n  cloneableTags[weakMapTag] = false;\n\n  /** Used to map Latin Unicode letters to basic Latin letters. */\n  var deburredLetters = {\n    // Latin-1 Supplement block.\n    '\\xc0': 'A',  '\\xc1': 'A', '\\xc2': 'A', '\\xc3': 'A', '\\xc4': 'A', '\\xc5': 'A',\n    '\\xe0': 'a',  '\\xe1': 'a', '\\xe2': 'a', '\\xe3': 'a', '\\xe4': 'a', '\\xe5': 'a',\n    '\\xc7': 'C',  '\\xe7': 'c',\n    '\\xd0': 'D',  '\\xf0': 'd',\n    '\\xc8': 'E',  '\\xc9': 'E', '\\xca': 'E', '\\xcb': 'E',\n    '\\xe8': 'e',  '\\xe9': 'e', '\\xea': 'e', '\\xeb': 'e',\n    '\\xcc': 'I',  '\\xcd': 'I', '\\xce': 'I', '\\xcf': 'I',\n    '\\xec': 'i',  '\\xed': 'i', '\\xee': 'i', '\\xef': 'i',\n    '\\xd1': 'N',  '\\xf1': 'n',\n    '\\xd2': 'O',  '\\xd3': 'O', '\\xd4': 'O', '\\xd5': 'O', '\\xd6': 'O', '\\xd8': 'O',\n    '\\xf2': 'o',  '\\xf3': 'o', '\\xf4': 'o', '\\xf5': 'o', '\\xf6': 'o', '\\xf8': 'o',\n    '\\xd9': 'U',  '\\xda': 'U', '\\xdb': 'U', '\\xdc': 'U',\n    '\\xf9': 'u',  '\\xfa': 'u', '\\xfb': 'u', '\\xfc': 'u',\n    '\\xdd': 'Y',  '\\xfd': 'y', '\\xff': 'y',\n    '\\xc6': 'Ae', '\\xe6': 'ae',\n    '\\xde': 'Th', '\\xfe': 'th',\n    '\\xdf': 'ss',\n    // Latin Extended-A block.\n    '\\u0100': 'A',  '\\u0102': 'A', '\\u0104': 'A',\n    '\\u0101': 'a',  '\\u0103': 'a', '\\u0105': 'a',\n    '\\u0106': 'C',  '\\u0108': 'C', '\\u010a': 'C', '\\u010c': 'C',\n    '\\u0107': 'c',  '\\u0109': 'c', '\\u010b': 'c', '\\u010d': 'c',\n    '\\u010e': 'D',  '\\u0110': 'D', '\\u010f': 'd', '\\u0111': 'd',\n    '\\u0112': 'E',  '\\u0114': 'E', '\\u0116': 'E', '\\u0118': 'E', '\\u011a': 'E',\n    '\\u0113': 'e',  '\\u0115': 'e', '\\u0117': 'e', '\\u0119': 'e', '\\u011b': 'e',\n    '\\u011c': 'G',  '\\u011e': 'G', '\\u0120': 'G', '\\u0122': 'G',\n    '\\u011d': 'g',  '\\u011f': 'g', '\\u0121': 'g', '\\u0123': 'g',\n    '\\u0124': 'H',  '\\u0126': 'H', '\\u0125': 'h', '\\u0127': 'h',\n    '\\u0128': 'I',  '\\u012a': 'I', '\\u012c': 'I', '\\u012e': 'I', '\\u0130': 'I',\n    '\\u0129': 'i',  '\\u012b': 'i', '\\u012d': 'i', '\\u012f': 'i', '\\u0131': 'i',\n    '\\u0134': 'J',  '\\u0135': 'j',\n    '\\u0136': 'K',  '\\u0137': 'k', '\\u0138': 'k',\n    '\\u0139': 'L',  '\\u013b': 'L', '\\u013d': 'L', '\\u013f': 'L', '\\u0141': 'L',\n    '\\u013a': 'l',  '\\u013c': 'l', '\\u013e': 'l', '\\u0140': 'l', '\\u0142': 'l',\n    '\\u0143': 'N',  '\\u0145': 'N', '\\u0147': 'N', '\\u014a': 'N',\n    '\\u0144': 'n',  '\\u0146': 'n', '\\u0148': 'n', '\\u014b': 'n',\n    '\\u014c': 'O',  '\\u014e': 'O', '\\u0150': 'O',\n    '\\u014d': 'o',  '\\u014f': 'o', '\\u0151': 'o',\n    '\\u0154': 'R',  '\\u0156': 'R', '\\u0158': 'R',\n    '\\u0155': 'r',  '\\u0157': 'r', '\\u0159': 'r',\n    '\\u015a': 'S',  '\\u015c': 'S', '\\u015e': 'S', '\\u0160': 'S',\n    '\\u015b': 's',  '\\u015d': 's', '\\u015f': 's', '\\u0161': 's',\n    '\\u0162': 'T',  '\\u0164': 'T', '\\u0166': 'T',\n    '\\u0163': 't',  '\\u0165': 't', '\\u0167': 't',\n    '\\u0168': 'U',  '\\u016a': 'U', '\\u016c': 'U', '\\u016e': 'U', '\\u0170': 'U', '\\u0172': 'U',\n    '\\u0169': 'u',  '\\u016b': 'u', '\\u016d': 'u', '\\u016f': 'u', '\\u0171': 'u', '\\u0173': 'u',\n    '\\u0174': 'W',  '\\u0175': 'w',\n    '\\u0176': 'Y',  '\\u0177': 'y', '\\u0178': 'Y',\n    '\\u0179': 'Z',  '\\u017b': 'Z', '\\u017d': 'Z',\n    '\\u017a': 'z',  '\\u017c': 'z', '\\u017e': 'z',\n    '\\u0132': 'IJ', '\\u0133': 'ij',\n    '\\u0152': 'Oe', '\\u0153': 'oe',\n    '\\u0149': \"'n\", '\\u017f': 's'\n  };\n\n  /** Used to map characters to HTML entities. */\n  var htmlEscapes = {\n    '&': '&amp;',\n    '<': '&lt;',\n    '>': '&gt;',\n    '\"': '&quot;',\n    \"'\": '&#39;'\n  };\n\n  /** Used to map HTML entities to characters. */\n  var htmlUnescapes = {\n    '&amp;': '&',\n    '&lt;': '<',\n    '&gt;': '>',\n    '&quot;': '\"',\n    '&#39;': \"'\"\n  };\n\n  /** Used to escape characters for inclusion in compiled string literals. */\n  var stringEscapes = {\n    '\\\\': '\\\\',\n    \"'\": \"'\",\n    '\\n': 'n',\n    '\\r': 'r',\n    '\\u2028': 'u2028',\n    '\\u2029': 'u2029'\n  };\n\n  /** Built-in method references without a dependency on `root`. */\n  var freeParseFloat = parseFloat,\n      freeParseInt = parseInt;\n\n  /** Detect free variable `global` from Node.js. */\n  var freeGlobal = typeof global == 'object' && global && global.Object === Object && global;\n\n  /** Detect free variable `self`. */\n  var freeSelf = typeof self == 'object' && self && self.Object === Object && self;\n\n  /** Used as a reference to the global object. */\n  var root = freeGlobal || freeSelf || Function('return this')();\n\n  /** Detect free variable `exports`. */\n  var freeExports = typeof exports == 'object' && exports && !exports.nodeType && exports;\n\n  /** Detect free variable `module`. */\n  var freeModule = freeExports && typeof module == 'object' && module && !module.nodeType && module;\n\n  /** Detect the popular CommonJS extension `module.exports`. */\n  var moduleExports = freeModule && freeModule.exports === freeExports;\n\n  /** Detect free variable `process` from Node.js. */\n  var freeProcess = moduleExports && freeGlobal.process;\n\n  /** Used to access faster Node.js helpers. */\n  var nodeUtil = (function() {\n    try {\n      // Use `util.types` for Node.js 10+.\n      var types = freeModule && freeModule.require && freeModule.require('util').types;\n\n      if (types) {\n        return types;\n      }\n\n      // Legacy `process.binding('util')` for Node.js < 10.\n      return freeProcess && freeProcess.binding && freeProcess.binding('util');\n    } catch (e) {}\n  }());\n\n  /* Node.js helper references. */\n  var nodeIsArrayBuffer = nodeUtil && nodeUtil.isArrayBuffer,\n      nodeIsDate = nodeUtil && nodeUtil.isDate,\n      nodeIsMap = nodeUtil && nodeUtil.isMap,\n      nodeIsRegExp = nodeUtil && nodeUtil.isRegExp,\n      nodeIsSet = nodeUtil && nodeUtil.isSet,\n      nodeIsTypedArray = nodeUtil && nodeUtil.isTypedArray;\n\n  /*--------------------------------------------------------------------------*/\n\n  /**\n   * A faster alternative to `Function#apply`, this function invokes `func`\n   * with the `this` binding of `thisArg` and the arguments of `args`.\n   *\n   * @private\n   * @param {Function} func The function to invoke.\n   * @param {*} thisArg The `this` binding of `func`.\n   * @param {Array} args The arguments to invoke `func` with.\n   * @returns {*} Returns the result of `func`.\n   */\n  function apply(func, thisArg, args) {\n    switch (args.length) {\n      case 0: return func.call(thisArg);\n      case 1: return func.call(thisArg, args[0]);\n      case 2: return func.call(thisArg, args[0], args[1]);\n      case 3: return func.call(thisArg, args[0], args[1], args[2]);\n    }\n    return func.apply(thisArg, args);\n  }\n\n  /**\n   * A specialized version of `baseAggregator` for arrays.\n   *\n   * @private\n   * @param {Array} [array] The array to iterate over.\n   * @param {Function} setter The function to set `accumulator` values.\n   * @param {Function} iteratee The iteratee to transform keys.\n   * @param {Object} accumulator The initial aggregated object.\n   * @returns {Function} Returns `accumulator`.\n   */\n  function arrayAggregator(array, setter, iteratee, accumulator) {\n    var index = -1,\n        length = array == null ? 0 : array.length;\n\n    while (++index < length) {\n      var value = array[index];\n      setter(accumulator, value, iteratee(value), array);\n    }\n    return accumulator;\n  }\n\n  /**\n   * A specialized version of `_.forEach` for arrays without support for\n   * iteratee shorthands.\n   *\n   * @private\n   * @param {Array} [array] The array to iterate over.\n   * @param {Function} iteratee The function invoked per iteration.\n   * @returns {Array} Returns `array`.\n   */\n  function arrayEach(array, iteratee) {\n    var index = -1,\n        length = array == null ? 0 : array.length;\n\n    while (++index < length) {\n      if (iteratee(array[index], index, array) === false) {\n        break;\n      }\n    }\n    return array;\n  }\n\n  /**\n   * A specialized version of `_.forEachRight` for arrays without support for\n   * iteratee shorthands.\n   *\n   * @private\n   * @param {Array} [array] The array to iterate over.\n   * @param {Function} iteratee The function invoked per iteration.\n   * @returns {Array} Returns `array`.\n   */\n  function arrayEachRight(array, iteratee) {\n    var length = array == null ? 0 : array.length;\n\n    while (length--) {\n      if (iteratee(array[length], length, array) === false) {\n        break;\n      }\n    }\n    return array;\n  }\n\n  /**\n   * A specialized version of `_.every` for arrays without support for\n   * iteratee shorthands.\n   *\n   * @private\n   * @param {Array} [array] The array to iterate over.\n   * @param {Function} predicate The function invoked per iteration.\n   * @returns {boolean} Returns `true` if all elements pass the predicate check,\n   *  else `false`.\n   */\n  function arrayEvery(array, predicate) {\n    var index = -1,\n        length = array == null ? 0 : array.length;\n\n    while (++index < length) {\n      if (!predicate(array[index], index, array)) {\n        return false;\n      }\n    }\n    return true;\n  }\n\n  /**\n   * A specialized version of `_.filter` for arrays without support for\n   * iteratee shorthands.\n   *\n   * @private\n   * @param {Array} [array] The array to iterate over.\n   * @param {Function} predicate The function invoked per iteration.\n   * @returns {Array} Returns the new filtered array.\n   */\n  function arrayFilter(array, predicate) {\n    var index = -1,\n        length = array == null ? 0 : array.length,\n        resIndex = 0,\n        result = [];\n\n    while (++index < length) {\n      var value = array[index];\n      if (predicate(value, index, array)) {\n        result[resIndex++] = value;\n      }\n    }\n    return result;\n  }\n\n  /**\n   * A specialized version of `_.includes` for arrays without support for\n   * specifying an index to search from.\n   *\n   * @private\n   * @param {Array} [array] The array to inspect.\n   * @param {*} target The value to search for.\n   * @returns {boolean} Returns `true` if `target` is found, else `false`.\n   */\n  function arrayIncludes(array, value) {\n    var length = array == null ? 0 : array.length;\n    return !!length && baseIndexOf(array, value, 0) > -1;\n  }\n\n  /**\n   * This function is like `arrayIncludes` except that it accepts a comparator.\n   *\n   * @private\n   * @param {Array} [array] The array to inspect.\n   * @param {*} target The value to search for.\n   * @param {Function} comparator The comparator invoked per element.\n   * @returns {boolean} Returns `true` if `target` is found, else `false`.\n   */\n  function arrayIncludesWith(array, value, comparator) {\n    var index = -1,\n        length = array == null ? 0 : array.length;\n\n    while (++index < length) {\n      if (comparator(value, array[index])) {\n        return true;\n      }\n    }\n    return false;\n  }\n\n  /**\n   * A specialized version of `_.map` for arrays without support for iteratee\n   * shorthands.\n   *\n   * @private\n   * @param {Array} [array] The array to iterate over.\n   * @param {Function} iteratee The function invoked per iteration.\n   * @returns {Array} Returns the new mapped array.\n   */\n  function arrayMap(array, iteratee) {\n    var index = -1,\n        length = array == null ? 0 : array.length,\n        result = Array(length);\n\n    while (++index < length) {\n      result[index] = iteratee(array[index], index, array);\n    }\n    return result;\n  }\n\n  /**\n   * Appends the elements of `values` to `array`.\n   *\n   * @private\n   * @param {Array} array The array to modify.\n   * @param {Array} values The values to append.\n   * @returns {Array} Returns `array`.\n   */\n  function arrayPush(array, values) {\n    var index = -1,\n        length = values.length,\n        offset = array.length;\n\n    while (++index < length) {\n      array[offset + index] = values[index];\n    }\n    return array;\n  }\n\n  /**\n   * A specialized version of `_.reduce` for arrays without support for\n   * iteratee shorthands.\n   *\n   * @private\n   * @param {Array} [array] The array to iterate over.\n   * @param {Function} iteratee The function invoked per iteration.\n   * @param {*} [accumulator] The initial value.\n   * @param {boolean} [initAccum] Specify using the first element of `array` as\n   *  the initial value.\n   * @returns {*} Returns the accumulated value.\n   */\n  function arrayReduce(array, iteratee, accumulator, initAccum) {\n    var index = -1,\n        length = array == null ? 0 : array.length;\n\n    if (initAccum && length) {\n      accumulator = array[++index];\n    }\n    while (++index < length) {\n      accumulator = iteratee(accumulator, array[index], index, array);\n    }\n    return accumulator;\n  }\n\n  /**\n   * A specialized version of `_.reduceRight` for arrays without support for\n   * iteratee shorthands.\n   *\n   * @private\n   * @param {Array} [array] The array to iterate over.\n   * @param {Function} iteratee The function invoked per iteration.\n   * @param {*} [accumulator] The initial value.\n   * @param {boolean} [initAccum] Specify using the last element of `array` as\n   *  the initial value.\n   * @returns {*} Returns the accumulated value.\n   */\n  function arrayReduceRight(array, iteratee, accumulator, initAccum) {\n    var length = array == null ? 0 : array.length;\n    if (initAccum && length) {\n      accumulator = array[--length];\n    }\n    while (length--) {\n      accumulator = iteratee(accumulator, array[length], length, array);\n    }\n    return accumulator;\n  }\n\n  /**\n   * A specialized version of `_.some` for arrays without support for iteratee\n   * shorthands.\n   *\n   * @private\n   * @param {Array} [array] The array to iterate over.\n   * @param {Function} predicate The function invoked per iteration.\n   * @returns {boolean} Returns `true` if any element passes the predicate check,\n   *  else `false`.\n   */\n  function arraySome(array, predicate) {\n    var index = -1,\n        length = array == null ? 0 : array.length;\n\n    while (++index < length) {\n      if (predicate(array[index], index, array)) {\n        return true;\n      }\n    }\n    return false;\n  }\n\n  /**\n   * Gets the size of an ASCII `string`.\n   *\n   * @private\n   * @param {string} string The string inspect.\n   * @returns {number} Returns the string size.\n   */\n  var asciiSize = baseProperty('length');\n\n  /**\n   * Converts an ASCII `string` to an array.\n   *\n   * @private\n   * @param {string} string The string to convert.\n   * @returns {Array} Returns the converted array.\n   */\n  function asciiToArray(string) {\n    return string.split('');\n  }\n\n  /**\n   * Splits an ASCII `string` into an array of its words.\n   *\n   * @private\n   * @param {string} The string to inspect.\n   * @returns {Array} Returns the words of `string`.\n   */\n  function asciiWords(string) {\n    return string.match(reAsciiWord) || [];\n  }\n\n  /**\n   * The base implementation of methods like `_.findKey` and `_.findLastKey`,\n   * without support for iteratee shorthands, which iterates over `collection`\n   * using `eachFunc`.\n   *\n   * @private\n   * @param {Array|Object} collection The collection to inspect.\n   * @param {Function} predicate The function invoked per iteration.\n   * @param {Function} eachFunc The function to iterate over `collection`.\n   * @returns {*} Returns the found element or its key, else `undefined`.\n   */\n  function baseFindKey(collection, predicate, eachFunc) {\n    var result;\n    eachFunc(collection, function(value, key, collection) {\n      if (predicate(value, key, collection)) {\n        result = key;\n        return false;\n      }\n    });\n    return result;\n  }\n\n  /**\n   * The base implementation of `_.findIndex` and `_.findLastIndex` without\n   * support for iteratee shorthands.\n   *\n   * @private\n   * @param {Array} array The array to inspect.\n   * @param {Function} predicate The function invoked per iteration.\n   * @param {number} fromIndex The index to search from.\n   * @param {boolean} [fromRight] Specify iterating from right to left.\n   * @returns {number} Returns the index of the matched value, else `-1`.\n   */\n  function baseFindIndex(array, predicate, fromIndex, fromRight) {\n    var length = array.length,\n        index = fromIndex + (fromRight ? 1 : -1);\n\n    while ((fromRight ? index-- : ++index < length)) {\n      if (predicate(array[index], index, array)) {\n        return index;\n      }\n    }\n    return -1;\n  }\n\n  /**\n   * The base implementation of `_.indexOf` without `fromIndex` bounds checks.\n   *\n   * @private\n   * @param {Array} array The array to inspect.\n   * @param {*} value The value to search for.\n   * @param {number} fromIndex The index to search from.\n   * @returns {number} Returns the index of the matched value, else `-1`.\n   */\n  function baseIndexOf(array, value, fromIndex) {\n    return value === value\n      ? strictIndexOf(array, value, fromIndex)\n      : baseFindIndex(array, baseIsNaN, fromIndex);\n  }\n\n  /**\n   * This function is like `baseIndexOf` except that it accepts a comparator.\n   *\n   * @private\n   * @param {Array} array The array to inspect.\n   * @param {*} value The value to search for.\n   * @param {number} fromIndex The index to search from.\n   * @param {Function} comparator The comparator invoked per element.\n   * @returns {number} Returns the index of the matched value, else `-1`.\n   */\n  function baseIndexOfWith(array, value, fromIndex, comparator) {\n    var index = fromIndex - 1,\n        length = array.length;\n\n    while (++index < length) {\n      if (comparator(array[index], value)) {\n        return index;\n      }\n    }\n    return -1;\n  }\n\n  /**\n   * The base implementation of `_.isNaN` without support for number objects.\n   *\n   * @private\n   * @param {*} value The value to check.\n   * @returns {boolean} Returns `true` if `value` is `NaN`, else `false`.\n   */\n  function baseIsNaN(value) {\n    return value !== value;\n  }\n\n  /**\n   * The base implementation of `_.mean` and `_.meanBy` without support for\n   * iteratee shorthands.\n   *\n   * @private\n   * @param {Array} array The array to iterate over.\n   * @param {Function} iteratee The function invoked per iteration.\n   * @returns {number} Returns the mean.\n   */\n  function baseMean(array, iteratee) {\n    var length = array == null ? 0 : array.length;\n    return length ? (baseSum(array, iteratee) / length) : NAN;\n  }\n\n  /**\n   * The base implementation of `_.property` without support for deep paths.\n   *\n   * @private\n   * @param {string} key The key of the property to get.\n   * @returns {Function} Returns the new accessor function.\n   */\n  function baseProperty(key) {\n    return function(object) {\n      return object == null ? undefined : object[key];\n    };\n  }\n\n  /**\n   * The base implementation of `_.propertyOf` without support for deep paths.\n   *\n   * @private\n   * @param {Object} object The object to query.\n   * @returns {Function} Returns the new accessor function.\n   */\n  function basePropertyOf(object) {\n    return function(key) {\n      return object == null ? undefined : object[key];\n    };\n  }\n\n  /**\n   * The base implementation of `_.reduce` and `_.reduceRight`, without support\n   * for iteratee shorthands, which iterates over `collection` using `eachFunc`.\n   *\n   * @private\n   * @param {Array|Object} collection The collection to iterate over.\n   * @param {Function} iteratee The function invoked per iteration.\n   * @param {*} accumulator The initial value.\n   * @param {boolean} initAccum Specify using the first or last element of\n   *  `collection` as the initial value.\n   * @param {Function} eachFunc The function to iterate over `collection`.\n   * @returns {*} Returns the accumulated value.\n   */\n  function baseReduce(collection, iteratee, accumulator, initAccum, eachFunc) {\n    eachFunc(collection, function(value, index, collection) {\n      accumulator = initAccum\n        ? (initAccum = false, value)\n        : iteratee(accumulator, value, index, collection);\n    });\n    return accumulator;\n  }\n\n  /**\n   * The base implementation of `_.sortBy` which uses `comparer` to define the\n   * sort order of `array` and replaces criteria objects with their corresponding\n   * values.\n   *\n   * @private\n   * @param {Array} array The array to sort.\n   * @param {Function} comparer The function to define sort order.\n   * @returns {Array} Returns `array`.\n   */\n  function baseSortBy(array, comparer) {\n    var length = array.length;\n\n    array.sort(comparer);\n    while (length--) {\n      array[length] = array[length].value;\n    }\n    return array;\n  }\n\n  /**\n   * The base implementation of `_.sum` and `_.sumBy` without support for\n   * iteratee shorthands.\n   *\n   * @private\n   * @param {Array} array The array to iterate over.\n   * @param {Function} iteratee The function invoked per iteration.\n   * @returns {number} Returns the sum.\n   */\n  function baseSum(array, iteratee) {\n    var result,\n        index = -1,\n        length = array.length;\n\n    while (++index < length) {\n      var current = iteratee(array[index]);\n      if (current !== undefined) {\n        result = result === undefined ? current : (result + current);\n      }\n    }\n    return result;\n  }\n\n  /**\n   * The base implementation of `_.times` without support for iteratee shorthands\n   * or max array length checks.\n   *\n   * @private\n   * @param {number} n The number of times to invoke `iteratee`.\n   * @param {Function} iteratee The function invoked per iteration.\n   * @returns {Array} Returns the array of results.\n   */\n  function baseTimes(n, iteratee) {\n    var index = -1,\n        result = Array(n);\n\n    while (++index < n) {\n      result[index] = iteratee(index);\n    }\n    return result;\n  }\n\n  /**\n   * The base implementation of `_.toPairs` and `_.toPairsIn` which creates an array\n   * of key-value pairs for `object` corresponding to the property names of `props`.\n   *\n   * @private\n   * @param {Object} object The object to query.\n   * @param {Array} props The property names to get values for.\n   * @returns {Object} Returns the key-value pairs.\n   */\n  function baseToPairs(object, props) {\n    return arrayMap(props, function(key) {\n      return [key, object[key]];\n    });\n  }\n\n  /**\n   * The base implementation of `_.trim`.\n   *\n   * @private\n   * @param {string} string The string to trim.\n   * @returns {string} Returns the trimmed string.\n   */\n  function baseTrim(string) {\n    return string\n      ? string.slice(0, trimmedEndIndex(string) + 1).replace(reTrimStart, '')\n      : string;\n  }\n\n  /**\n   * The base implementation of `_.unary` without support for storing metadata.\n   *\n   * @private\n   * @param {Function} func The function to cap arguments for.\n   * @returns {Function} Returns the new capped function.\n   */\n  function baseUnary(func) {\n    return function(value) {\n      return func(value);\n    };\n  }\n\n  /**\n   * The base implementation of `_.values` and `_.valuesIn` which creates an\n   * array of `object` property values corresponding to the property names\n   * of `props`.\n   *\n   * @private\n   * @param {Object} object The object to query.\n   * @param {Array} props The property names to get values for.\n   * @returns {Object} Returns the array of property values.\n   */\n  function baseValues(object, props) {\n    return arrayMap(props, function(key) {\n      return object[key];\n    });\n  }\n\n  /**\n   * Checks if a `cache` value for `key` exists.\n   *\n   * @private\n   * @param {Object} cache The cache to query.\n   * @param {string} key The key of the entry to check.\n   * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n   */\n  function cacheHas(cache, key) {\n    return cache.has(key);\n  }\n\n  /**\n   * Used by `_.trim` and `_.trimStart` to get the index of the first string symbol\n   * that is not found in the character symbols.\n   *\n   * @private\n   * @param {Array} strSymbols The string symbols to inspect.\n   * @param {Array} chrSymbols The character symbols to find.\n   * @returns {number} Returns the index of the first unmatched string symbol.\n   */\n  function charsStartIndex(strSymbols, chrSymbols) {\n    var index = -1,\n        length = strSymbols.length;\n\n    while (++index < length && baseIndexOf(chrSymbols, strSymbols[index], 0) > -1) {}\n    return index;\n  }\n\n  /**\n   * Used by `_.trim` and `_.trimEnd` to get the index of the last string symbol\n   * that is not found in the character symbols.\n   *\n   * @private\n   * @param {Array} strSymbols The string symbols to inspect.\n   * @param {Array} chrSymbols The character symbols to find.\n   * @returns {number} Returns the index of the last unmatched string symbol.\n   */\n  function charsEndIndex(strSymbols, chrSymbols) {\n    var index = strSymbols.length;\n\n    while (index-- && baseIndexOf(chrSymbols, strSymbols[index], 0) > -1) {}\n    return index;\n  }\n\n  /**\n   * Gets the number of `placeholder` occurrences in `array`.\n   *\n   * @private\n   * @param {Array} array The array to inspect.\n   * @param {*} placeholder The placeholder to search for.\n   * @returns {number} Returns the placeholder count.\n   */\n  function countHolders(array, placeholder) {\n    var length = array.length,\n        result = 0;\n\n    while (length--) {\n      if (array[length] === placeholder) {\n        ++result;\n      }\n    }\n    return result;\n  }\n\n  /**\n   * Used by `_.deburr` to convert Latin-1 Supplement and Latin Extended-A\n   * letters to basic Latin letters.\n   *\n   * @private\n   * @param {string} letter The matched letter to deburr.\n   * @returns {string} Returns the deburred letter.\n   */\n  var deburrLetter = basePropertyOf(deburredLetters);\n\n  /**\n   * Used by `_.escape` to convert characters to HTML entities.\n   *\n   * @private\n   * @param {string} chr The matched character to escape.\n   * @returns {string} Returns the escaped character.\n   */\n  var escapeHtmlChar = basePropertyOf(htmlEscapes);\n\n  /**\n   * Used by `_.template` to escape characters for inclusion in compiled string literals.\n   *\n   * @private\n   * @param {string} chr The matched character to escape.\n   * @returns {string} Returns the escaped character.\n   */\n  function escapeStringChar(chr) {\n    return '\\\\' + stringEscapes[chr];\n  }\n\n  /**\n   * Gets the value at `key` of `object`.\n   *\n   * @private\n   * @param {Object} [object] The object to query.\n   * @param {string} key The key of the property to get.\n   * @returns {*} Returns the property value.\n   */\n  function getValue(object, key) {\n    return object == null ? undefined : object[key];\n  }\n\n  /**\n   * Checks if `string` contains Unicode symbols.\n   *\n   * @private\n   * @param {string} string The string to inspect.\n   * @returns {boolean} Returns `true` if a symbol is found, else `false`.\n   */\n  function hasUnicode(string) {\n    return reHasUnicode.test(string);\n  }\n\n  /**\n   * Checks if `string` contains a word composed of Unicode symbols.\n   *\n   * @private\n   * @param {string} string The string to inspect.\n   * @returns {boolean} Returns `true` if a word is found, else `false`.\n   */\n  function hasUnicodeWord(string) {\n    return reHasUnicodeWord.test(string);\n  }\n\n  /**\n   * Converts `iterator` to an array.\n   *\n   * @private\n   * @param {Object} iterator The iterator to convert.\n   * @returns {Array} Returns the converted array.\n   */\n  function iteratorToArray(iterator) {\n    var data,\n        result = [];\n\n    while (!(data = iterator.next()).done) {\n      result.push(data.value);\n    }\n    return result;\n  }\n\n  /**\n   * Converts `map` to its key-value pairs.\n   *\n   * @private\n   * @param {Object} map The map to convert.\n   * @returns {Array} Returns the key-value pairs.\n   */\n  function mapToArray(map) {\n    var index = -1,\n        result = Array(map.size);\n\n    map.forEach(function(value, key) {\n      result[++index] = [key, value];\n    });\n    return result;\n  }\n\n  /**\n   * Creates a unary function that invokes `func` with its argument transformed.\n   *\n   * @private\n   * @param {Function} func The function to wrap.\n   * @param {Function} transform The argument transform.\n   * @returns {Function} Returns the new function.\n   */\n  function overArg(func, transform) {\n    return function(arg) {\n      return func(transform(arg));\n    };\n  }\n\n  /**\n   * Replaces all `placeholder` elements in `array` with an internal placeholder\n   * and returns an array of their indexes.\n   *\n   * @private\n   * @param {Array} array The array to modify.\n   * @param {*} placeholder The placeholder to replace.\n   * @returns {Array} Returns the new array of placeholder indexes.\n   */\n  function replaceHolders(array, placeholder) {\n    var index = -1,\n        length = array.length,\n        resIndex = 0,\n        result = [];\n\n    while (++index < length) {\n      var value = array[index];\n      if (value === placeholder || value === PLACEHOLDER) {\n        array[index] = PLACEHOLDER;\n        result[resIndex++] = index;\n      }\n    }\n    return result;\n  }\n\n  /**\n   * Converts `set` to an array of its values.\n   *\n   * @private\n   * @param {Object} set The set to convert.\n   * @returns {Array} Returns the values.\n   */\n  function setToArray(set) {\n    var index = -1,\n        result = Array(set.size);\n\n    set.forEach(function(value) {\n      result[++index] = value;\n    });\n    return result;\n  }\n\n  /**\n   * Converts `set` to its value-value pairs.\n   *\n   * @private\n   * @param {Object} set The set to convert.\n   * @returns {Array} Returns the value-value pairs.\n   */\n  function setToPairs(set) {\n    var index = -1,\n        result = Array(set.size);\n\n    set.forEach(function(value) {\n      result[++index] = [value, value];\n    });\n    return result;\n  }\n\n  /**\n   * A specialized version of `_.indexOf` which performs strict equality\n   * comparisons of values, i.e. `===`.\n   *\n   * @private\n   * @param {Array} array The array to inspect.\n   * @param {*} value The value to search for.\n   * @param {number} fromIndex The index to search from.\n   * @returns {number} Returns the index of the matched value, else `-1`.\n   */\n  function strictIndexOf(array, value, fromIndex) {\n    var index = fromIndex - 1,\n        length = array.length;\n\n    while (++index < length) {\n      if (array[index] === value) {\n        return index;\n      }\n    }\n    return -1;\n  }\n\n  /**\n   * A specialized version of `_.lastIndexOf` which performs strict equality\n   * comparisons of values, i.e. `===`.\n   *\n   * @private\n   * @param {Array} array The array to inspect.\n   * @param {*} value The value to search for.\n   * @param {number} fromIndex The index to search from.\n   * @returns {number} Returns the index of the matched value, else `-1`.\n   */\n  function strictLastIndexOf(array, value, fromIndex) {\n    var index = fromIndex + 1;\n    while (index--) {\n      if (array[index] === value) {\n        return index;\n      }\n    }\n    return index;\n  }\n\n  /**\n   * Gets the number of symbols in `string`.\n   *\n   * @private\n   * @param {string} string The string to inspect.\n   * @returns {number} Returns the string size.\n   */\n  function stringSize(string) {\n    return hasUnicode(string)\n      ? unicodeSize(string)\n      : asciiSize(string);\n  }\n\n  /**\n   * Converts `string` to an array.\n   *\n   * @private\n   * @param {string} string The string to convert.\n   * @returns {Array} Returns the converted array.\n   */\n  function stringToArray(string) {\n    return hasUnicode(string)\n      ? unicodeToArray(string)\n      : asciiToArray(string);\n  }\n\n  /**\n   * Used by `_.trim` and `_.trimEnd` to get the index of the last non-whitespace\n   * character of `string`.\n   *\n   * @private\n   * @param {string} string The string to inspect.\n   * @returns {number} Returns the index of the last non-whitespace character.\n   */\n  function trimmedEndIndex(string) {\n    var index = string.length;\n\n    while (index-- && reWhitespace.test(string.charAt(index))) {}\n    return index;\n  }\n\n  /**\n   * Used by `_.unescape` to convert HTML entities to characters.\n   *\n   * @private\n   * @param {string} chr The matched character to unescape.\n   * @returns {string} Returns the unescaped character.\n   */\n  var unescapeHtmlChar = basePropertyOf(htmlUnescapes);\n\n  /**\n   * Gets the size of a Unicode `string`.\n   *\n   * @private\n   * @param {string} string The string inspect.\n   * @returns {number} Returns the string size.\n   */\n  function unicodeSize(string) {\n    var result = reUnicode.lastIndex = 0;\n    while (reUnicode.test(string)) {\n      ++result;\n    }\n    return result;\n  }\n\n  /**\n   * Converts a Unicode `string` to an array.\n   *\n   * @private\n   * @param {string} string The string to convert.\n   * @returns {Array} Returns the converted array.\n   */\n  function unicodeToArray(string) {\n    return string.match(reUnicode) || [];\n  }\n\n  /**\n   * Splits a Unicode `string` into an array of its words.\n   *\n   * @private\n   * @param {string} The string to inspect.\n   * @returns {Array} Returns the words of `string`.\n   */\n  function unicodeWords(string) {\n    return string.match(reUnicodeWord) || [];\n  }\n\n  /*--------------------------------------------------------------------------*/\n\n  /**\n   * Create a new pristine `lodash` function using the `context` object.\n   *\n   * @static\n   * @memberOf _\n   * @since 1.1.0\n   * @category Util\n   * @param {Object} [context=root] The context object.\n   * @returns {Function} Returns a new `lodash` function.\n   * @example\n   *\n   * _.mixin({ 'foo': _.constant('foo') });\n   *\n   * var lodash = _.runInContext();\n   * lodash.mixin({ 'bar': lodash.constant('bar') });\n   *\n   * _.isFunction(_.foo);\n   * // => true\n   * _.isFunction(_.bar);\n   * // => false\n   *\n   * lodash.isFunction(lodash.foo);\n   * // => false\n   * lodash.isFunction(lodash.bar);\n   * // => true\n   *\n   * // Create a suped-up `defer` in Node.js.\n   * var defer = _.runInContext({ 'setTimeout': setImmediate }).defer;\n   */\n  var runInContext = (function runInContext(context) {\n    context = context == null ? root : _.defaults(root.Object(), context, _.pick(root, contextProps));\n\n    /** Built-in constructor references. */\n    var Array = context.Array,\n        Date = context.Date,\n        Error = context.Error,\n        Function = context.Function,\n        Math = context.Math,\n        Object = context.Object,\n        RegExp = context.RegExp,\n        String = context.String,\n        TypeError = context.TypeError;\n\n    /** Used for built-in method references. */\n    var arrayProto = Array.prototype,\n        funcProto = Function.prototype,\n        objectProto = Object.prototype;\n\n    /** Used to detect overreaching core-js shims. */\n    var coreJsData = context['__core-js_shared__'];\n\n    /** Used to resolve the decompiled source of functions. */\n    var funcToString = funcProto.toString;\n\n    /** Used to check objects for own properties. */\n    var hasOwnProperty = objectProto.hasOwnProperty;\n\n    /** Used to generate unique IDs. */\n    var idCounter = 0;\n\n    /** Used to detect methods masquerading as native. */\n    var maskSrcKey = (function() {\n      var uid = /[^.]+$/.exec(coreJsData && coreJsData.keys && coreJsData.keys.IE_PROTO || '');\n      return uid ? ('Symbol(src)_1.' + uid) : '';\n    }());\n\n    /**\n     * Used to resolve the\n     * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)\n     * of values.\n     */\n    var nativeObjectToString = objectProto.toString;\n\n    /** Used to infer the `Object` constructor. */\n    var objectCtorString = funcToString.call(Object);\n\n    /** Used to restore the original `_` reference in `_.noConflict`. */\n    var oldDash = root._;\n\n    /** Used to detect if a method is native. */\n    var reIsNative = RegExp('^' +\n      funcToString.call(hasOwnProperty).replace(reRegExpChar, '\\\\$&')\n      .replace(/hasOwnProperty|(function).*?(?=\\\\\\()| for .+?(?=\\\\\\])/g, '$1.*?') + '$'\n    );\n\n    /** Built-in value references. */\n    var Buffer = moduleExports ? context.Buffer : undefined,\n        Symbol = context.Symbol,\n        Uint8Array = context.Uint8Array,\n        allocUnsafe = Buffer ? Buffer.allocUnsafe : undefined,\n        getPrototype = overArg(Object.getPrototypeOf, Object),\n        objectCreate = Object.create,\n        propertyIsEnumerable = objectProto.propertyIsEnumerable,\n        splice = arrayProto.splice,\n        spreadableSymbol = Symbol ? Symbol.isConcatSpreadable : undefined,\n        symIterator = Symbol ? Symbol.iterator : undefined,\n        symToStringTag = Symbol ? Symbol.toStringTag : undefined;\n\n    var defineProperty = (function() {\n      try {\n        var func = getNative(Object, 'defineProperty');\n        func({}, '', {});\n        return func;\n      } catch (e) {}\n    }());\n\n    /** Mocked built-ins. */\n    var ctxClearTimeout = context.clearTimeout !== root.clearTimeout && context.clearTimeout,\n        ctxNow = Date && Date.now !== root.Date.now && Date.now,\n        ctxSetTimeout = context.setTimeout !== root.setTimeout && context.setTimeout;\n\n    /* Built-in method references for those with the same name as other `lodash` methods. */\n    var nativeCeil = Math.ceil,\n        nativeFloor = Math.floor,\n        nativeGetSymbols = Object.getOwnPropertySymbols,\n        nativeIsBuffer = Buffer ? Buffer.isBuffer : undefined,\n        nativeIsFinite = context.isFinite,\n        nativeJoin = arrayProto.join,\n        nativeKeys = overArg(Object.keys, Object),\n        nativeMax = Math.max,\n        nativeMin = Math.min,\n        nativeNow = Date.now,\n        nativeParseInt = context.parseInt,\n        nativeRandom = Math.random,\n        nativeReverse = arrayProto.reverse;\n\n    /* Built-in method references that are verified to be native. */\n    var DataView = getNative(context, 'DataView'),\n        Map = getNative(context, 'Map'),\n        Promise = getNative(context, 'Promise'),\n        Set = getNative(context, 'Set'),\n        WeakMap = getNative(context, 'WeakMap'),\n        nativeCreate = getNative(Object, 'create');\n\n    /** Used to store function metadata. */\n    var metaMap = WeakMap && new WeakMap;\n\n    /** Used to lookup unminified function names. */\n    var realNames = {};\n\n    /** Used to detect maps, sets, and weakmaps. */\n    var dataViewCtorString = toSource(DataView),\n        mapCtorString = toSource(Map),\n        promiseCtorString = toSource(Promise),\n        setCtorString = toSource(Set),\n        weakMapCtorString = toSource(WeakMap);\n\n    /** Used to convert symbols to primitives and strings. */\n    var symbolProto = Symbol ? Symbol.prototype : undefined,\n        symbolValueOf = symbolProto ? symbolProto.valueOf : undefined,\n        symbolToString = symbolProto ? symbolProto.toString : undefined;\n\n    /*------------------------------------------------------------------------*/\n\n    /**\n     * Creates a `lodash` object which wraps `value` to enable implicit method\n     * chain sequences. Methods that operate on and return arrays, collections,\n     * and functions can be chained together. Methods that retrieve a single value\n     * or may return a primitive value will automatically end the chain sequence\n     * and return the unwrapped value. Otherwise, the value must be unwrapped\n     * with `_#value`.\n     *\n     * Explicit chain sequences, which must be unwrapped with `_#value`, may be\n     * enabled using `_.chain`.\n     *\n     * The execution of chained methods is lazy, that is, it's deferred until\n     * `_#value` is implicitly or explicitly called.\n     *\n     * Lazy evaluation allows several methods to support shortcut fusion.\n     * Shortcut fusion is an optimization to merge iteratee calls; this avoids\n     * the creation of intermediate arrays and can greatly reduce the number of\n     * iteratee executions. Sections of a chain sequence qualify for shortcut\n     * fusion if the section is applied to an array and iteratees accept only\n     * one argument. The heuristic for whether a section qualifies for shortcut\n     * fusion is subject to change.\n     *\n     * Chaining is supported in custom builds as long as the `_#value` method is\n     * directly or indirectly included in the build.\n     *\n     * In addition to lodash methods, wrappers have `Array` and `String` methods.\n     *\n     * The wrapper `Array` methods are:\n     * `concat`, `join`, `pop`, `push`, `shift`, `sort`, `splice`, and `unshift`\n     *\n     * The wrapper `String` methods are:\n     * `replace` and `split`\n     *\n     * The wrapper methods that support shortcut fusion are:\n     * `at`, `compact`, `drop`, `dropRight`, `dropWhile`, `filter`, `find`,\n     * `findLast`, `head`, `initial`, `last`, `map`, `reject`, `reverse`, `slice`,\n     * `tail`, `take`, `takeRight`, `takeRightWhile`, `takeWhile`, and `toArray`\n     *\n     * The chainable wrapper methods are:\n     * `after`, `ary`, `assign`, `assignIn`, `assignInWith`, `assignWith`, `at`,\n     * `before`, `bind`, `bindAll`, `bindKey`, `castArray`, `chain`, `chunk`,\n     * `commit`, `compact`, `concat`, `conforms`, `constant`, `countBy`, `create`,\n     * `curry`, `debounce`, `defaults`, `defaultsDeep`, `defer`, `delay`,\n     * `difference`, `differenceBy`, `differenceWith`, `drop`, `dropRight`,\n     * `dropRightWhile`, `dropWhile`, `extend`, `extendWith`, `fill`, `filter`,\n     * `flatMap`, `flatMapDeep`, `flatMapDepth`, `flatten`, `flattenDeep`,\n     * `flattenDepth`, `flip`, `flow`, `flowRight`, `fromPairs`, `functions`,\n     * `functionsIn`, `groupBy`, `initial`, `intersection`, `intersectionBy`,\n     * `intersectionWith`, `invert`, `invertBy`, `invokeMap`, `iteratee`, `keyBy`,\n     * `keys`, `keysIn`, `map`, `mapKeys`, `mapValues`, `matches`, `matchesProperty`,\n     * `memoize`, `merge`, `mergeWith`, `method`, `methodOf`, `mixin`, `negate`,\n     * `nthArg`, `omit`, `omitBy`, `once`, `orderBy`, `over`, `overArgs`,\n     * `overEvery`, `overSome`, `partial`, `partialRight`, `partition`, `pick`,\n     * `pickBy`, `plant`, `property`, `propertyOf`, `pull`, `pullAll`, `pullAllBy`,\n     * `pullAllWith`, `pullAt`, `push`, `range`, `rangeRight`, `rearg`, `reject`,\n     * `remove`, `rest`, `reverse`, `sampleSize`, `set`, `setWith`, `shuffle`,\n     * `slice`, `sort`, `sortBy`, `splice`, `spread`, `tail`, `take`, `takeRight`,\n     * `takeRightWhile`, `takeWhile`, `tap`, `throttle`, `thru`, `toArray`,\n     * `toPairs`, `toPairsIn`, `toPath`, `toPlainObject`, `transform`, `unary`,\n     * `union`, `unionBy`, `unionWith`, `uniq`, `uniqBy`, `uniqWith`, `unset`,\n     * `unshift`, `unzip`, `unzipWith`, `update`, `updateWith`, `values`,\n     * `valuesIn`, `without`, `wrap`, `xor`, `xorBy`, `xorWith`, `zip`,\n     * `zipObject`, `zipObjectDeep`, and `zipWith`\n     *\n     * The wrapper methods that are **not** chainable by default are:\n     * `add`, `attempt`, `camelCase`, `capitalize`, `ceil`, `clamp`, `clone`,\n     * `cloneDeep`, `cloneDeepWith`, `cloneWith`, `conformsTo`, `deburr`,\n     * `defaultTo`, `divide`, `each`, `eachRight`, `endsWith`, `eq`, `escape`,\n     * `escapeRegExp`, `every`, `find`, `findIndex`, `findKey`, `findLast`,\n     * `findLastIndex`, `findLastKey`, `first`, `floor`, `forEach`, `forEachRight`,\n     * `forIn`, `forInRight`, `forOwn`, `forOwnRight`, `get`, `gt`, `gte`, `has`,\n     * `hasIn`, `head`, `identity`, `includes`, `indexOf`, `inRange`, `invoke`,\n     * `isArguments`, `isArray`, `isArrayBuffer`, `isArrayLike`, `isArrayLikeObject`,\n     * `isBoolean`, `isBuffer`, `isDate`, `isElement`, `isEmpty`, `isEqual`,\n     * `isEqualWith`, `isError`, `isFinite`, `isFunction`, `isInteger`, `isLength`,\n     * `isMap`, `isMatch`, `isMatchWith`, `isNaN`, `isNative`, `isNil`, `isNull`,\n     * `isNumber`, `isObject`, `isObjectLike`, `isPlainObject`, `isRegExp`,\n     * `isSafeInteger`, `isSet`, `isString`, `isUndefined`, `isTypedArray`,\n     * `isWeakMap`, `isWeakSet`, `join`, `kebabCase`, `last`, `lastIndexOf`,\n     * `lowerCase`, `lowerFirst`, `lt`, `lte`, `max`, `maxBy`, `mean`, `meanBy`,\n     * `min`, `minBy`, `multiply`, `noConflict`, `noop`, `now`, `nth`, `pad`,\n     * `padEnd`, `padStart`, `parseInt`, `pop`, `random`, `reduce`, `reduceRight`,\n     * `repeat`, `result`, `round`, `runInContext`, `sample`, `shift`, `size`,\n     * `snakeCase`, `some`, `sortedIndex`, `sortedIndexBy`, `sortedLastIndex`,\n     * `sortedLastIndexBy`, `startCase`, `startsWith`, `stubArray`, `stubFalse`,\n     * `stubObject`, `stubString`, `stubTrue`, `subtract`, `sum`, `sumBy`,\n     * `template`, `times`, `toFinite`, `toInteger`, `toJSON`, `toLength`,\n     * `toLower`, `toNumber`, `toSafeInteger`, `toString`, `toUpper`, `trim`,\n     * `trimEnd`, `trimStart`, `truncate`, `unescape`, `uniqueId`, `upperCase`,\n     * `upperFirst`, `value`, and `words`\n     *\n     * @name _\n     * @constructor\n     * @category Seq\n     * @param {*} value The value to wrap in a `lodash` instance.\n     * @returns {Object} Returns the new `lodash` wrapper instance.\n     * @example\n     *\n     * function square(n) {\n     *   return n * n;\n     * }\n     *\n     * var wrapped = _([1, 2, 3]);\n     *\n     * // Returns an unwrapped value.\n     * wrapped.reduce(_.add);\n     * // => 6\n     *\n     * // Returns a wrapped value.\n     * var squares = wrapped.map(square);\n     *\n     * _.isArray(squares);\n     * // => false\n     *\n     * _.isArray(squares.value());\n     * // => true\n     */\n    function lodash(value) {\n      if (isObjectLike(value) && !isArray(value) && !(value instanceof LazyWrapper)) {\n        if (value instanceof LodashWrapper) {\n          return value;\n        }\n        if (hasOwnProperty.call(value, '__wrapped__')) {\n          return wrapperClone(value);\n        }\n      }\n      return new LodashWrapper(value);\n    }\n\n    /**\n     * The base implementation of `_.create` without support for assigning\n     * properties to the created object.\n     *\n     * @private\n     * @param {Object} proto The object to inherit from.\n     * @returns {Object} Returns the new object.\n     */\n    var baseCreate = (function() {\n      function object() {}\n      return function(proto) {\n        if (!isObject(proto)) {\n          return {};\n        }\n        if (objectCreate) {\n          return objectCreate(proto);\n        }\n        object.prototype = proto;\n        var result = new object;\n        object.prototype = undefined;\n        return result;\n      };\n    }());\n\n    /**\n     * The function whose prototype chain sequence wrappers inherit from.\n     *\n     * @private\n     */\n    function baseLodash() {\n      // No operation performed.\n    }\n\n    /**\n     * The base constructor for creating `lodash` wrapper objects.\n     *\n     * @private\n     * @param {*} value The value to wrap.\n     * @param {boolean} [chainAll] Enable explicit method chain sequences.\n     */\n    function LodashWrapper(value, chainAll) {\n      this.__wrapped__ = value;\n      this.__actions__ = [];\n      this.__chain__ = !!chainAll;\n      this.__index__ = 0;\n      this.__values__ = undefined;\n    }\n\n    /**\n     * By default, the template delimiters used by lodash are like those in\n     * embedded Ruby (ERB) as well as ES2015 template strings. Change the\n     * following template settings to use alternative delimiters.\n     *\n     * @static\n     * @memberOf _\n     * @type {Object}\n     */\n    lodash.templateSettings = {\n\n      /**\n       * Used to detect `data` property values to be HTML-escaped.\n       *\n       * @memberOf _.templateSettings\n       * @type {RegExp}\n       */\n      'escape': reEscape,\n\n      /**\n       * Used to detect code to be evaluated.\n       *\n       * @memberOf _.templateSettings\n       * @type {RegExp}\n       */\n      'evaluate': reEvaluate,\n\n      /**\n       * Used to detect `data` property values to inject.\n       *\n       * @memberOf _.templateSettings\n       * @type {RegExp}\n       */\n      'interpolate': reInterpolate,\n\n      /**\n       * Used to reference the data object in the template text.\n       *\n       * @memberOf _.templateSettings\n       * @type {string}\n       */\n      'variable': '',\n\n      /**\n       * Used to import variables into the compiled template.\n       *\n       * @memberOf _.templateSettings\n       * @type {Object}\n       */\n      'imports': {\n\n        /**\n         * A reference to the `lodash` function.\n         *\n         * @memberOf _.templateSettings.imports\n         * @type {Function}\n         */\n        '_': lodash\n      }\n    };\n\n    // Ensure wrappers are instances of `baseLodash`.\n    lodash.prototype = baseLodash.prototype;\n    lodash.prototype.constructor = lodash;\n\n    LodashWrapper.prototype = baseCreate(baseLodash.prototype);\n    LodashWrapper.prototype.constructor = LodashWrapper;\n\n    /*------------------------------------------------------------------------*/\n\n    /**\n     * Creates a lazy wrapper object which wraps `value` to enable lazy evaluation.\n     *\n     * @private\n     * @constructor\n     * @param {*} value The value to wrap.\n     */\n    function LazyWrapper(value) {\n      this.__wrapped__ = value;\n      this.__actions__ = [];\n      this.__dir__ = 1;\n      this.__filtered__ = false;\n      this.__iteratees__ = [];\n      this.__takeCount__ = MAX_ARRAY_LENGTH;\n      this.__views__ = [];\n    }\n\n    /**\n     * Creates a clone of the lazy wrapper object.\n     *\n     * @private\n     * @name clone\n     * @memberOf LazyWrapper\n     * @returns {Object} Returns the cloned `LazyWrapper` object.\n     */\n    function lazyClone() {\n      var result = new LazyWrapper(this.__wrapped__);\n      result.__actions__ = copyArray(this.__actions__);\n      result.__dir__ = this.__dir__;\n      result.__filtered__ = this.__filtered__;\n      result.__iteratees__ = copyArray(this.__iteratees__);\n      result.__takeCount__ = this.__takeCount__;\n      result.__views__ = copyArray(this.__views__);\n      return result;\n    }\n\n    /**\n     * Reverses the direction of lazy iteration.\n     *\n     * @private\n     * @name reverse\n     * @memberOf LazyWrapper\n     * @returns {Object} Returns the new reversed `LazyWrapper` object.\n     */\n    function lazyReverse() {\n      if (this.__filtered__) {\n        var result = new LazyWrapper(this);\n        result.__dir__ = -1;\n        result.__filtered__ = true;\n      } else {\n        result = this.clone();\n        result.__dir__ *= -1;\n      }\n      return result;\n    }\n\n    /**\n     * Extracts the unwrapped value from its lazy wrapper.\n     *\n     * @private\n     * @name value\n     * @memberOf LazyWrapper\n     * @returns {*} Returns the unwrapped value.\n     */\n    function lazyValue() {\n      var array = this.__wrapped__.value(),\n          dir = this.__dir__,\n          isArr = isArray(array),\n          isRight = dir < 0,\n          arrLength = isArr ? array.length : 0,\n          view = getView(0, arrLength, this.__views__),\n          start = view.start,\n          end = view.end,\n          length = end - start,\n          index = isRight ? end : (start - 1),\n          iteratees = this.__iteratees__,\n          iterLength = iteratees.length,\n          resIndex = 0,\n          takeCount = nativeMin(length, this.__takeCount__);\n\n      if (!isArr || (!isRight && arrLength == length && takeCount == length)) {\n        return baseWrapperValue(array, this.__actions__);\n      }\n      var result = [];\n\n      outer:\n      while (length-- && resIndex < takeCount) {\n        index += dir;\n\n        var iterIndex = -1,\n            value = array[index];\n\n        while (++iterIndex < iterLength) {\n          var data = iteratees[iterIndex],\n              iteratee = data.iteratee,\n              type = data.type,\n              computed = iteratee(value);\n\n          if (type == LAZY_MAP_FLAG) {\n            value = computed;\n          } else if (!computed) {\n            if (type == LAZY_FILTER_FLAG) {\n              continue outer;\n            } else {\n              break outer;\n            }\n          }\n        }\n        result[resIndex++] = value;\n      }\n      return result;\n    }\n\n    // Ensure `LazyWrapper` is an instance of `baseLodash`.\n    LazyWrapper.prototype = baseCreate(baseLodash.prototype);\n    LazyWrapper.prototype.constructor = LazyWrapper;\n\n    /*------------------------------------------------------------------------*/\n\n    /**\n     * Creates a hash object.\n     *\n     * @private\n     * @constructor\n     * @param {Array} [entries] The key-value pairs to cache.\n     */\n    function Hash(entries) {\n      var index = -1,\n          length = entries == null ? 0 : entries.length;\n\n      this.clear();\n      while (++index < length) {\n        var entry = entries[index];\n        this.set(entry[0], entry[1]);\n      }\n    }\n\n    /**\n     * Removes all key-value entries from the hash.\n     *\n     * @private\n     * @name clear\n     * @memberOf Hash\n     */\n    function hashClear() {\n      this.__data__ = nativeCreate ? nativeCreate(null) : {};\n      this.size = 0;\n    }\n\n    /**\n     * Removes `key` and its value from the hash.\n     *\n     * @private\n     * @name delete\n     * @memberOf Hash\n     * @param {Object} hash The hash to modify.\n     * @param {string} key The key of the value to remove.\n     * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n     */\n    function hashDelete(key) {\n      var result = this.has(key) && delete this.__data__[key];\n      this.size -= result ? 1 : 0;\n      return result;\n    }\n\n    /**\n     * Gets the hash value for `key`.\n     *\n     * @private\n     * @name get\n     * @memberOf Hash\n     * @param {string} key The key of the value to get.\n     * @returns {*} Returns the entry value.\n     */\n    function hashGet(key) {\n      var data = this.__data__;\n      if (nativeCreate) {\n        var result = data[key];\n        return result === HASH_UNDEFINED ? undefined : result;\n      }\n      return hasOwnProperty.call(data, key) ? data[key] : undefined;\n    }\n\n    /**\n     * Checks if a hash value for `key` exists.\n     *\n     * @private\n     * @name has\n     * @memberOf Hash\n     * @param {string} key The key of the entry to check.\n     * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n     */\n    function hashHas(key) {\n      var data = this.__data__;\n      return nativeCreate ? (data[key] !== undefined) : hasOwnProperty.call(data, key);\n    }\n\n    /**\n     * Sets the hash `key` to `value`.\n     *\n     * @private\n     * @name set\n     * @memberOf Hash\n     * @param {string} key The key of the value to set.\n     * @param {*} value The value to set.\n     * @returns {Object} Returns the hash instance.\n     */\n    function hashSet(key, value) {\n      var data = this.__data__;\n      this.size += this.has(key) ? 0 : 1;\n      data[key] = (nativeCreate && value === undefined) ? HASH_UNDEFINED : value;\n      return this;\n    }\n\n    // Add methods to `Hash`.\n    Hash.prototype.clear = hashClear;\n    Hash.prototype['delete'] = hashDelete;\n    Hash.prototype.get = hashGet;\n    Hash.prototype.has = hashHas;\n    Hash.prototype.set = hashSet;\n\n    /*------------------------------------------------------------------------*/\n\n    /**\n     * Creates an list cache object.\n     *\n     * @private\n     * @constructor\n     * @param {Array} [entries] The key-value pairs to cache.\n     */\n    function ListCache(entries) {\n      var index = -1,\n          length = entries == null ? 0 : entries.length;\n\n      this.clear();\n      while (++index < length) {\n        var entry = entries[index];\n        this.set(entry[0], entry[1]);\n      }\n    }\n\n    /**\n     * Removes all key-value entries from the list cache.\n     *\n     * @private\n     * @name clear\n     * @memberOf ListCache\n     */\n    function listCacheClear() {\n      this.__data__ = [];\n      this.size = 0;\n    }\n\n    /**\n     * Removes `key` and its value from the list cache.\n     *\n     * @private\n     * @name delete\n     * @memberOf ListCache\n     * @param {string} key The key of the value to remove.\n     * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n     */\n    function listCacheDelete(key) {\n      var data = this.__data__,\n          index = assocIndexOf(data, key);\n\n      if (index < 0) {\n        return false;\n      }\n      var lastIndex = data.length - 1;\n      if (index == lastIndex) {\n        data.pop();\n      } else {\n        splice.call(data, index, 1);\n      }\n      --this.size;\n      return true;\n    }\n\n    /**\n     * Gets the list cache value for `key`.\n     *\n     * @private\n     * @name get\n     * @memberOf ListCache\n     * @param {string} key The key of the value to get.\n     * @returns {*} Returns the entry value.\n     */\n    function listCacheGet(key) {\n      var data = this.__data__,\n          index = assocIndexOf(data, key);\n\n      return index < 0 ? undefined : data[index][1];\n    }\n\n    /**\n     * Checks if a list cache value for `key` exists.\n     *\n     * @private\n     * @name has\n     * @memberOf ListCache\n     * @param {string} key The key of the entry to check.\n     * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n     */\n    function listCacheHas(key) {\n      return assocIndexOf(this.__data__, key) > -1;\n    }\n\n    /**\n     * Sets the list cache `key` to `value`.\n     *\n     * @private\n     * @name set\n     * @memberOf ListCache\n     * @param {string} key The key of the value to set.\n     * @param {*} value The value to set.\n     * @returns {Object} Returns the list cache instance.\n     */\n    function listCacheSet(key, value) {\n      var data = this.__data__,\n          index = assocIndexOf(data, key);\n\n      if (index < 0) {\n        ++this.size;\n        data.push([key, value]);\n      } else {\n        data[index][1] = value;\n      }\n      return this;\n    }\n\n    // Add methods to `ListCache`.\n    ListCache.prototype.clear = listCacheClear;\n    ListCache.prototype['delete'] = listCacheDelete;\n    ListCache.prototype.get = listCacheGet;\n    ListCache.prototype.has = listCacheHas;\n    ListCache.prototype.set = listCacheSet;\n\n    /*------------------------------------------------------------------------*/\n\n    /**\n     * Creates a map cache object to store key-value pairs.\n     *\n     * @private\n     * @constructor\n     * @param {Array} [entries] The key-value pairs to cache.\n     */\n    function MapCache(entries) {\n      var index = -1,\n          length = entries == null ? 0 : entries.length;\n\n      this.clear();\n      while (++index < length) {\n        var entry = entries[index];\n        this.set(entry[0], entry[1]);\n      }\n    }\n\n    /**\n     * Removes all key-value entries from the map.\n     *\n     * @private\n     * @name clear\n     * @memberOf MapCache\n     */\n    function mapCacheClear() {\n      this.size = 0;\n      this.__data__ = {\n        'hash': new Hash,\n        'map': new (Map || ListCache),\n        'string': new Hash\n      };\n    }\n\n    /**\n     * Removes `key` and its value from the map.\n     *\n     * @private\n     * @name delete\n     * @memberOf MapCache\n     * @param {string} key The key of the value to remove.\n     * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n     */\n    function mapCacheDelete(key) {\n      var result = getMapData(this, key)['delete'](key);\n      this.size -= result ? 1 : 0;\n      return result;\n    }\n\n    /**\n     * Gets the map value for `key`.\n     *\n     * @private\n     * @name get\n     * @memberOf MapCache\n     * @param {string} key The key of the value to get.\n     * @returns {*} Returns the entry value.\n     */\n    function mapCacheGet(key) {\n      return getMapData(this, key).get(key);\n    }\n\n    /**\n     * Checks if a map value for `key` exists.\n     *\n     * @private\n     * @name has\n     * @memberOf MapCache\n     * @param {string} key The key of the entry to check.\n     * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n     */\n    function mapCacheHas(key) {\n      return getMapData(this, key).has(key);\n    }\n\n    /**\n     * Sets the map `key` to `value`.\n     *\n     * @private\n     * @name set\n     * @memberOf MapCache\n     * @param {string} key The key of the value to set.\n     * @param {*} value The value to set.\n     * @returns {Object} Returns the map cache instance.\n     */\n    function mapCacheSet(key, value) {\n      var data = getMapData(this, key),\n          size = data.size;\n\n      data.set(key, value);\n      this.size += data.size == size ? 0 : 1;\n      return this;\n    }\n\n    // Add methods to `MapCache`.\n    MapCache.prototype.clear = mapCacheClear;\n    MapCache.prototype['delete'] = mapCacheDelete;\n    MapCache.prototype.get = mapCacheGet;\n    MapCache.prototype.has = mapCacheHas;\n    MapCache.prototype.set = mapCacheSet;\n\n    /*------------------------------------------------------------------------*/\n\n    /**\n     *\n     * Creates an array cache object to store unique values.\n     *\n     * @private\n     * @constructor\n     * @param {Array} [values] The values to cache.\n     */\n    function SetCache(values) {\n      var index = -1,\n          length = values == null ? 0 : values.length;\n\n      this.__data__ = new MapCache;\n      while (++index < length) {\n        this.add(values[index]);\n      }\n    }\n\n    /**\n     * Adds `value` to the array cache.\n     *\n     * @private\n     * @name add\n     * @memberOf SetCache\n     * @alias push\n     * @param {*} value The value to cache.\n     * @returns {Object} Returns the cache instance.\n     */\n    function setCacheAdd(value) {\n      this.__data__.set(value, HASH_UNDEFINED);\n      return this;\n    }\n\n    /**\n     * Checks if `value` is in the array cache.\n     *\n     * @private\n     * @name has\n     * @memberOf SetCache\n     * @param {*} value The value to search for.\n     * @returns {number} Returns `true` if `value` is found, else `false`.\n     */\n    function setCacheHas(value) {\n      return this.__data__.has(value);\n    }\n\n    // Add methods to `SetCache`.\n    SetCache.prototype.add = SetCache.prototype.push = setCacheAdd;\n    SetCache.prototype.has = setCacheHas;\n\n    /*------------------------------------------------------------------------*/\n\n    /**\n     * Creates a stack cache object to store key-value pairs.\n     *\n     * @private\n     * @constructor\n     * @param {Array} [entries] The key-value pairs to cache.\n     */\n    function Stack(entries) {\n      var data = this.__data__ = new ListCache(entries);\n      this.size = data.size;\n    }\n\n    /**\n     * Removes all key-value entries from the stack.\n     *\n     * @private\n     * @name clear\n     * @memberOf Stack\n     */\n    function stackClear() {\n      this.__data__ = new ListCache;\n      this.size = 0;\n    }\n\n    /**\n     * Removes `key` and its value from the stack.\n     *\n     * @private\n     * @name delete\n     * @memberOf Stack\n     * @param {string} key The key of the value to remove.\n     * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n     */\n    function stackDelete(key) {\n      var data = this.__data__,\n          result = data['delete'](key);\n\n      this.size = data.size;\n      return result;\n    }\n\n    /**\n     * Gets the stack value for `key`.\n     *\n     * @private\n     * @name get\n     * @memberOf Stack\n     * @param {string} key The key of the value to get.\n     * @returns {*} Returns the entry value.\n     */\n    function stackGet(key) {\n      return this.__data__.get(key);\n    }\n\n    /**\n     * Checks if a stack value for `key` exists.\n     *\n     * @private\n     * @name has\n     * @memberOf Stack\n     * @param {string} key The key of the entry to check.\n     * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n     */\n    function stackHas(key) {\n      return this.__data__.has(key);\n    }\n\n    /**\n     * Sets the stack `key` to `value`.\n     *\n     * @private\n     * @name set\n     * @memberOf Stack\n     * @param {string} key The key of the value to set.\n     * @param {*} value The value to set.\n     * @returns {Object} Returns the stack cache instance.\n     */\n    function stackSet(key, value) {\n      var data = this.__data__;\n      if (data instanceof ListCache) {\n        var pairs = data.__data__;\n        if (!Map || (pairs.length < LARGE_ARRAY_SIZE - 1)) {\n          pairs.push([key, value]);\n          this.size = ++data.size;\n          return this;\n        }\n        data = this.__data__ = new MapCache(pairs);\n      }\n      data.set(key, value);\n      this.size = data.size;\n      return this;\n    }\n\n    // Add methods to `Stack`.\n    Stack.prototype.clear = stackClear;\n    Stack.prototype['delete'] = stackDelete;\n    Stack.prototype.get = stackGet;\n    Stack.prototype.has = stackHas;\n    Stack.prototype.set = stackSet;\n\n    /*------------------------------------------------------------------------*/\n\n    /**\n     * Creates an array of the enumerable property names of the array-like `value`.\n     *\n     * @private\n     * @param {*} value The value to query.\n     * @param {boolean} inherited Specify returning inherited property names.\n     * @returns {Array} Returns the array of property names.\n     */\n    function arrayLikeKeys(value, inherited) {\n      var isArr = isArray(value),\n          isArg = !isArr && isArguments(value),\n          isBuff = !isArr && !isArg && isBuffer(value),\n          isType = !isArr && !isArg && !isBuff && isTypedArray(value),\n          skipIndexes = isArr || isArg || isBuff || isType,\n          result = skipIndexes ? baseTimes(value.length, String) : [],\n          length = result.length;\n\n      for (var key in value) {\n        if ((inherited || hasOwnProperty.call(value, key)) &&\n            !(skipIndexes && (\n               // Safari 9 has enumerable `arguments.length` in strict mode.\n               key == 'length' ||\n               // Node.js 0.10 has enumerable non-index properties on buffers.\n               (isBuff && (key == 'offset' || key == 'parent')) ||\n               // PhantomJS 2 has enumerable non-index properties on typed arrays.\n               (isType && (key == 'buffer' || key == 'byteLength' || key == 'byteOffset')) ||\n               // Skip index properties.\n               isIndex(key, length)\n            ))) {\n          result.push(key);\n        }\n      }\n      return result;\n    }\n\n    /**\n     * A specialized version of `_.sample` for arrays.\n     *\n     * @private\n     * @param {Array} array The array to sample.\n     * @returns {*} Returns the random element.\n     */\n    function arraySample(array) {\n      var length = array.length;\n      return length ? array[baseRandom(0, length - 1)] : undefined;\n    }\n\n    /**\n     * A specialized version of `_.sampleSize` for arrays.\n     *\n     * @private\n     * @param {Array} array The array to sample.\n     * @param {number} n The number of elements to sample.\n     * @returns {Array} Returns the random elements.\n     */\n    function arraySampleSize(array, n) {\n      return shuffleSelf(copyArray(array), baseClamp(n, 0, array.length));\n    }\n\n    /**\n     * A specialized version of `_.shuffle` for arrays.\n     *\n     * @private\n     * @param {Array} array The array to shuffle.\n     * @returns {Array} Returns the new shuffled array.\n     */\n    function arrayShuffle(array) {\n      return shuffleSelf(copyArray(array));\n    }\n\n    /**\n     * This function is like `assignValue` except that it doesn't assign\n     * `undefined` values.\n     *\n     * @private\n     * @param {Object} object The object to modify.\n     * @param {string} key The key of the property to assign.\n     * @param {*} value The value to assign.\n     */\n    function assignMergeValue(object, key, value) {\n      if ((value !== undefined && !eq(object[key], value)) ||\n          (value === undefined && !(key in object))) {\n        baseAssignValue(object, key, value);\n      }\n    }\n\n    /**\n     * Assigns `value` to `key` of `object` if the existing value is not equivalent\n     * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n     * for equality comparisons.\n     *\n     * @private\n     * @param {Object} object The object to modify.\n     * @param {string} key The key of the property to assign.\n     * @param {*} value The value to assign.\n     */\n    function assignValue(object, key, value) {\n      var objValue = object[key];\n      if (!(hasOwnProperty.call(object, key) && eq(objValue, value)) ||\n          (value === undefined && !(key in object))) {\n        baseAssignValue(object, key, value);\n      }\n    }\n\n    /**\n     * Gets the index at which the `key` is found in `array` of key-value pairs.\n     *\n     * @private\n     * @param {Array} array The array to inspect.\n     * @param {*} key The key to search for.\n     * @returns {number} Returns the index of the matched value, else `-1`.\n     */\n    function assocIndexOf(array, key) {\n      var length = array.length;\n      while (length--) {\n        if (eq(array[length][0], key)) {\n          return length;\n        }\n      }\n      return -1;\n    }\n\n    /**\n     * Aggregates elements of `collection` on `accumulator` with keys transformed\n     * by `iteratee` and values set by `setter`.\n     *\n     * @private\n     * @param {Array|Object} collection The collection to iterate over.\n     * @param {Function} setter The function to set `accumulator` values.\n     * @param {Function} iteratee The iteratee to transform keys.\n     * @param {Object} accumulator The initial aggregated object.\n     * @returns {Function} Returns `accumulator`.\n     */\n    function baseAggregator(collection, setter, iteratee, accumulator) {\n      baseEach(collection, function(value, key, collection) {\n        setter(accumulator, value, iteratee(value), collection);\n      });\n      return accumulator;\n    }\n\n    /**\n     * The base implementation of `_.assign` without support for multiple sources\n     * or `customizer` functions.\n     *\n     * @private\n     * @param {Object} object The destination object.\n     * @param {Object} source The source object.\n     * @returns {Object} Returns `object`.\n     */\n    function baseAssign(object, source) {\n      return object && copyObject(source, keys(source), object);\n    }\n\n    /**\n     * The base implementation of `_.assignIn` without support for multiple sources\n     * or `customizer` functions.\n     *\n     * @private\n     * @param {Object} object The destination object.\n     * @param {Object} source The source object.\n     * @returns {Object} Returns `object`.\n     */\n    function baseAssignIn(object, source) {\n      return object && copyObject(source, keysIn(source), object);\n    }\n\n    /**\n     * The base implementation of `assignValue` and `assignMergeValue` without\n     * value checks.\n     *\n     * @private\n     * @param {Object} object The object to modify.\n     * @param {string} key The key of the property to assign.\n     * @param {*} value The value to assign.\n     */\n    function baseAssignValue(object, key, value) {\n      if (key == '__proto__' && defineProperty) {\n        defineProperty(object, key, {\n          'configurable': true,\n          'enumerable': true,\n          'value': value,\n          'writable': true\n        });\n      } else {\n        object[key] = value;\n      }\n    }\n\n    /**\n     * The base implementation of `_.at` without support for individual paths.\n     *\n     * @private\n     * @param {Object} object The object to iterate over.\n     * @param {string[]} paths The property paths to pick.\n     * @returns {Array} Returns the picked elements.\n     */\n    function baseAt(object, paths) {\n      var index = -1,\n          length = paths.length,\n          result = Array(length),\n          skip = object == null;\n\n      while (++index < length) {\n        result[index] = skip ? undefined : get(object, paths[index]);\n      }\n      return result;\n    }\n\n    /**\n     * The base implementation of `_.clamp` which doesn't coerce arguments.\n     *\n     * @private\n     * @param {number} number The number to clamp.\n     * @param {number} [lower] The lower bound.\n     * @param {number} upper The upper bound.\n     * @returns {number} Returns the clamped number.\n     */\n    function baseClamp(number, lower, upper) {\n      if (number === number) {\n        if (upper !== undefined) {\n          number = number <= upper ? number : upper;\n        }\n        if (lower !== undefined) {\n          number = number >= lower ? number : lower;\n        }\n      }\n      return number;\n    }\n\n    /**\n     * The base implementation of `_.clone` and `_.cloneDeep` which tracks\n     * traversed objects.\n     *\n     * @private\n     * @param {*} value The value to clone.\n     * @param {boolean} bitmask The bitmask flags.\n     *  1 - Deep clone\n     *  2 - Flatten inherited properties\n     *  4 - Clone symbols\n     * @param {Function} [customizer] The function to customize cloning.\n     * @param {string} [key] The key of `value`.\n     * @param {Object} [object] The parent object of `value`.\n     * @param {Object} [stack] Tracks traversed objects and their clone counterparts.\n     * @returns {*} Returns the cloned value.\n     */\n    function baseClone(value, bitmask, customizer, key, object, stack) {\n      var result,\n          isDeep = bitmask & CLONE_DEEP_FLAG,\n          isFlat = bitmask & CLONE_FLAT_FLAG,\n          isFull = bitmask & CLONE_SYMBOLS_FLAG;\n\n      if (customizer) {\n        result = object ? customizer(value, key, object, stack) : customizer(value);\n      }\n      if (result !== undefined) {\n        return result;\n      }\n      if (!isObject(value)) {\n        return value;\n      }\n      var isArr = isArray(value);\n      if (isArr) {\n        result = initCloneArray(value);\n        if (!isDeep) {\n          return copyArray(value, result);\n        }\n      } else {\n        var tag = getTag(value),\n            isFunc = tag == funcTag || tag == genTag;\n\n        if (isBuffer(value)) {\n          return cloneBuffer(value, isDeep);\n        }\n        if (tag == objectTag || tag == argsTag || (isFunc && !object)) {\n          result = (isFlat || isFunc) ? {} : initCloneObject(value);\n          if (!isDeep) {\n            return isFlat\n              ? copySymbolsIn(value, baseAssignIn(result, value))\n              : copySymbols(value, baseAssign(result, value));\n          }\n        } else {\n          if (!cloneableTags[tag]) {\n            return object ? value : {};\n          }\n          result = initCloneByTag(value, tag, isDeep);\n        }\n      }\n      // Check for circular references and return its corresponding clone.\n      stack || (stack = new Stack);\n      var stacked = stack.get(value);\n      if (stacked) {\n        return stacked;\n      }\n      stack.set(value, result);\n\n      if (isSet(value)) {\n        value.forEach(function(subValue) {\n          result.add(baseClone(subValue, bitmask, customizer, subValue, value, stack));\n        });\n      } else if (isMap(value)) {\n        value.forEach(function(subValue, key) {\n          result.set(key, baseClone(subValue, bitmask, customizer, key, value, stack));\n        });\n      }\n\n      var keysFunc = isFull\n        ? (isFlat ? getAllKeysIn : getAllKeys)\n        : (isFlat ? keysIn : keys);\n\n      var props = isArr ? undefined : keysFunc(value);\n      arrayEach(props || value, function(subValue, key) {\n        if (props) {\n          key = subValue;\n          subValue = value[key];\n        }\n        // Recursively populate clone (susceptible to call stack limits).\n        assignValue(result, key, baseClone(subValue, bitmask, customizer, key, value, stack));\n      });\n      return result;\n    }\n\n    /**\n     * The base implementation of `_.conforms` which doesn't clone `source`.\n     *\n     * @private\n     * @param {Object} source The object of property predicates to conform to.\n     * @returns {Function} Returns the new spec function.\n     */\n    function baseConforms(source) {\n      var props = keys(source);\n      return function(object) {\n        return baseConformsTo(object, source, props);\n      };\n    }\n\n    /**\n     * The base implementation of `_.conformsTo` which accepts `props` to check.\n     *\n     * @private\n     * @param {Object} object The object to inspect.\n     * @param {Object} source The object of property predicates to conform to.\n     * @returns {boolean} Returns `true` if `object` conforms, else `false`.\n     */\n    function baseConformsTo(object, source, props) {\n      var length = props.length;\n      if (object == null) {\n        return !length;\n      }\n      object = Object(object);\n      while (length--) {\n        var key = props[length],\n            predicate = source[key],\n            value = object[key];\n\n        if ((value === undefined && !(key in object)) || !predicate(value)) {\n          return false;\n        }\n      }\n      return true;\n    }\n\n    /**\n     * The base implementation of `_.delay` and `_.defer` which accepts `args`\n     * to provide to `func`.\n     *\n     * @private\n     * @param {Function} func The function to delay.\n     * @param {number} wait The number of milliseconds to delay invocation.\n     * @param {Array} args The arguments to provide to `func`.\n     * @returns {number|Object} Returns the timer id or timeout object.\n     */\n    function baseDelay(func, wait, args) {\n      if (typeof func != 'function') {\n        throw new TypeError(FUNC_ERROR_TEXT);\n      }\n      return setTimeout(function() { func.apply(undefined, args); }, wait);\n    }\n\n    /**\n     * The base implementation of methods like `_.difference` without support\n     * for excluding multiple arrays or iteratee shorthands.\n     *\n     * @private\n     * @param {Array} array The array to inspect.\n     * @param {Array} values The values to exclude.\n     * @param {Function} [iteratee] The iteratee invoked per element.\n     * @param {Function} [comparator] The comparator invoked per element.\n     * @returns {Array} Returns the new array of filtered values.\n     */\n    function baseDifference(array, values, iteratee, comparator) {\n      var index = -1,\n          includes = arrayIncludes,\n          isCommon = true,\n          length = array.length,\n          result = [],\n          valuesLength = values.length;\n\n      if (!length) {\n        return result;\n      }\n      if (iteratee) {\n        values = arrayMap(values, baseUnary(iteratee));\n      }\n      if (comparator) {\n        includes = arrayIncludesWith;\n        isCommon = false;\n      }\n      else if (values.length >= LARGE_ARRAY_SIZE) {\n        includes = cacheHas;\n        isCommon = false;\n        values = new SetCache(values);\n      }\n      outer:\n      while (++index < length) {\n        var value = array[index],\n            computed = iteratee == null ? value : iteratee(value);\n\n        value = (comparator || value !== 0) ? value : 0;\n        if (isCommon && computed === computed) {\n          var valuesIndex = valuesLength;\n          while (valuesIndex--) {\n            if (values[valuesIndex] === computed) {\n              continue outer;\n            }\n          }\n          result.push(value);\n        }\n        else if (!includes(values, computed, comparator)) {\n          result.push(value);\n        }\n      }\n      return result;\n    }\n\n    /**\n     * The base implementation of `_.forEach` without support for iteratee shorthands.\n     *\n     * @private\n     * @param {Array|Object} collection The collection to iterate over.\n     * @param {Function} iteratee The function invoked per iteration.\n     * @returns {Array|Object} Returns `collection`.\n     */\n    var baseEach = createBaseEach(baseForOwn);\n\n    /**\n     * The base implementation of `_.forEachRight` without support for iteratee shorthands.\n     *\n     * @private\n     * @param {Array|Object} collection The collection to iterate over.\n     * @param {Function} iteratee The function invoked per iteration.\n     * @returns {Array|Object} Returns `collection`.\n     */\n    var baseEachRight = createBaseEach(baseForOwnRight, true);\n\n    /**\n     * The base implementation of `_.every` without support for iteratee shorthands.\n     *\n     * @private\n     * @param {Array|Object} collection The collection to iterate over.\n     * @param {Function} predicate The function invoked per iteration.\n     * @returns {boolean} Returns `true` if all elements pass the predicate check,\n     *  else `false`\n     */\n    function baseEvery(collection, predicate) {\n      var result = true;\n      baseEach(collection, function(value, index, collection) {\n        result = !!predicate(value, index, collection);\n        return result;\n      });\n      return result;\n    }\n\n    /**\n     * The base implementation of methods like `_.max` and `_.min` which accepts a\n     * `comparator` to determine the extremum value.\n     *\n     * @private\n     * @param {Array} array The array to iterate over.\n     * @param {Function} iteratee The iteratee invoked per iteration.\n     * @param {Function} comparator The comparator used to compare values.\n     * @returns {*} Returns the extremum value.\n     */\n    function baseExtremum(array, iteratee, comparator) {\n      var index = -1,\n          length = array.length;\n\n      while (++index < length) {\n        var value = array[index],\n            current = iteratee(value);\n\n        if (current != null && (computed === undefined\n              ? (current === current && !isSymbol(current))\n              : comparator(current, computed)\n            )) {\n          var computed = current,\n              result = value;\n        }\n      }\n      return result;\n    }\n\n    /**\n     * The base implementation of `_.fill` without an iteratee call guard.\n     *\n     * @private\n     * @param {Array} array The array to fill.\n     * @param {*} value The value to fill `array` with.\n     * @param {number} [start=0] The start position.\n     * @param {number} [end=array.length] The end position.\n     * @returns {Array} Returns `array`.\n     */\n    function baseFill(array, value, start, end) {\n      var length = array.length;\n\n      start = toInteger(start);\n      if (start < 0) {\n        start = -start > length ? 0 : (length + start);\n      }\n      end = (end === undefined || end > length) ? length : toInteger(end);\n      if (end < 0) {\n        end += length;\n      }\n      end = start > end ? 0 : toLength(end);\n      while (start < end) {\n        array[start++] = value;\n      }\n      return array;\n    }\n\n    /**\n     * The base implementation of `_.filter` without support for iteratee shorthands.\n     *\n     * @private\n     * @param {Array|Object} collection The collection to iterate over.\n     * @param {Function} predicate The function invoked per iteration.\n     * @returns {Array} Returns the new filtered array.\n     */\n    function baseFilter(collection, predicate) {\n      var result = [];\n      baseEach(collection, function(value, index, collection) {\n        if (predicate(value, index, collection)) {\n          result.push(value);\n        }\n      });\n      return result;\n    }\n\n    /**\n     * The base implementation of `_.flatten` with support for restricting flattening.\n     *\n     * @private\n     * @param {Array} array The array to flatten.\n     * @param {number} depth The maximum recursion depth.\n     * @param {boolean} [predicate=isFlattenable] The function invoked per iteration.\n     * @param {boolean} [isStrict] Restrict to values that pass `predicate` checks.\n     * @param {Array} [result=[]] The initial result value.\n     * @returns {Array} Returns the new flattened array.\n     */\n    function baseFlatten(array, depth, predicate, isStrict, result) {\n      var index = -1,\n          length = array.length;\n\n      predicate || (predicate = isFlattenable);\n      result || (result = []);\n\n      while (++index < length) {\n        var value = array[index];\n        if (depth > 0 && predicate(value)) {\n          if (depth > 1) {\n            // Recursively flatten arrays (susceptible to call stack limits).\n            baseFlatten(value, depth - 1, predicate, isStrict, result);\n          } else {\n            arrayPush(result, value);\n          }\n        } else if (!isStrict) {\n          result[result.length] = value;\n        }\n      }\n      return result;\n    }\n\n    /**\n     * The base implementation of `baseForOwn` which iterates over `object`\n     * properties returned by `keysFunc` and invokes `iteratee` for each property.\n     * Iteratee functions may exit iteration early by explicitly returning `false`.\n     *\n     * @private\n     * @param {Object} object The object to iterate over.\n     * @param {Function} iteratee The function invoked per iteration.\n     * @param {Function} keysFunc The function to get the keys of `object`.\n     * @returns {Object} Returns `object`.\n     */\n    var baseFor = createBaseFor();\n\n    /**\n     * This function is like `baseFor` except that it iterates over properties\n     * in the opposite order.\n     *\n     * @private\n     * @param {Object} object The object to iterate over.\n     * @param {Function} iteratee The function invoked per iteration.\n     * @param {Function} keysFunc The function to get the keys of `object`.\n     * @returns {Object} Returns `object`.\n     */\n    var baseForRight = createBaseFor(true);\n\n    /**\n     * The base implementation of `_.forOwn` without support for iteratee shorthands.\n     *\n     * @private\n     * @param {Object} object The object to iterate over.\n     * @param {Function} iteratee The function invoked per iteration.\n     * @returns {Object} Returns `object`.\n     */\n    function baseForOwn(object, iteratee) {\n      return object && baseFor(object, iteratee, keys);\n    }\n\n    /**\n     * The base implementation of `_.forOwnRight` without support for iteratee shorthands.\n     *\n     * @private\n     * @param {Object} object The object to iterate over.\n     * @param {Function} iteratee The function invoked per iteration.\n     * @returns {Object} Returns `object`.\n     */\n    function baseForOwnRight(object, iteratee) {\n      return object && baseForRight(object, iteratee, keys);\n    }\n\n    /**\n     * The base implementation of `_.functions` which creates an array of\n     * `object` function property names filtered from `props`.\n     *\n     * @private\n     * @param {Object} object The object to inspect.\n     * @param {Array} props The property names to filter.\n     * @returns {Array} Returns the function names.\n     */\n    function baseFunctions(object, props) {\n      return arrayFilter(props, function(key) {\n        return isFunction(object[key]);\n      });\n    }\n\n    /**\n     * The base implementation of `_.get` without support for default values.\n     *\n     * @private\n     * @param {Object} object The object to query.\n     * @param {Array|string} path The path of the property to get.\n     * @returns {*} Returns the resolved value.\n     */\n    function baseGet(object, path) {\n      path = castPath(path, object);\n\n      var index = 0,\n          length = path.length;\n\n      while (object != null && index < length) {\n        object = object[toKey(path[index++])];\n      }\n      return (index && index == length) ? object : undefined;\n    }\n\n    /**\n     * The base implementation of `getAllKeys` and `getAllKeysIn` which uses\n     * `keysFunc` and `symbolsFunc` to get the enumerable property names and\n     * symbols of `object`.\n     *\n     * @private\n     * @param {Object} object The object to query.\n     * @param {Function} keysFunc The function to get the keys of `object`.\n     * @param {Function} symbolsFunc The function to get the symbols of `object`.\n     * @returns {Array} Returns the array of property names and symbols.\n     */\n    function baseGetAllKeys(object, keysFunc, symbolsFunc) {\n      var result = keysFunc(object);\n      return isArray(object) ? result : arrayPush(result, symbolsFunc(object));\n    }\n\n    /**\n     * The base implementation of `getTag` without fallbacks for buggy environments.\n     *\n     * @private\n     * @param {*} value The value to query.\n     * @returns {string} Returns the `toStringTag`.\n     */\n    function baseGetTag(value) {\n      if (value == null) {\n        return value === undefined ? undefinedTag : nullTag;\n      }\n      return (symToStringTag && symToStringTag in Object(value))\n        ? getRawTag(value)\n        : objectToString(value);\n    }\n\n    /**\n     * The base implementation of `_.gt` which doesn't coerce arguments.\n     *\n     * @private\n     * @param {*} value The value to compare.\n     * @param {*} other The other value to compare.\n     * @returns {boolean} Returns `true` if `value` is greater than `other`,\n     *  else `false`.\n     */\n    function baseGt(value, other) {\n      return value > other;\n    }\n\n    /**\n     * The base implementation of `_.has` without support for deep paths.\n     *\n     * @private\n     * @param {Object} [object] The object to query.\n     * @param {Array|string} key The key to check.\n     * @returns {boolean} Returns `true` if `key` exists, else `false`.\n     */\n    function baseHas(object, key) {\n      return object != null && hasOwnProperty.call(object, key);\n    }\n\n    /**\n     * The base implementation of `_.hasIn` without support for deep paths.\n     *\n     * @private\n     * @param {Object} [object] The object to query.\n     * @param {Array|string} key The key to check.\n     * @returns {boolean} Returns `true` if `key` exists, else `false`.\n     */\n    function baseHasIn(object, key) {\n      return object != null && key in Object(object);\n    }\n\n    /**\n     * The base implementation of `_.inRange` which doesn't coerce arguments.\n     *\n     * @private\n     * @param {number} number The number to check.\n     * @param {number} start The start of the range.\n     * @param {number} end The end of the range.\n     * @returns {boolean} Returns `true` if `number` is in the range, else `false`.\n     */\n    function baseInRange(number, start, end) {\n      return number >= nativeMin(start, end) && number < nativeMax(start, end);\n    }\n\n    /**\n     * The base implementation of methods like `_.intersection`, without support\n     * for iteratee shorthands, that accepts an array of arrays to inspect.\n     *\n     * @private\n     * @param {Array} arrays The arrays to inspect.\n     * @param {Function} [iteratee] The iteratee invoked per element.\n     * @param {Function} [comparator] The comparator invoked per element.\n     * @returns {Array} Returns the new array of shared values.\n     */\n    function baseIntersection(arrays, iteratee, comparator) {\n      var includes = comparator ? arrayIncludesWith : arrayIncludes,\n          length = arrays[0].length,\n          othLength = arrays.length,\n          othIndex = othLength,\n          caches = Array(othLength),\n          maxLength = Infinity,\n          result = [];\n\n      while (othIndex--) {\n        var array = arrays[othIndex];\n        if (othIndex && iteratee) {\n          array = arrayMap(array, baseUnary(iteratee));\n        }\n        maxLength = nativeMin(array.length, maxLength);\n        caches[othIndex] = !comparator && (iteratee || (length >= 120 && array.length >= 120))\n          ? new SetCache(othIndex && array)\n          : undefined;\n      }\n      array = arrays[0];\n\n      var index = -1,\n          seen = caches[0];\n\n      outer:\n      while (++index < length && result.length < maxLength) {\n        var value = array[index],\n            computed = iteratee ? iteratee(value) : value;\n\n        value = (comparator || value !== 0) ? value : 0;\n        if (!(seen\n              ? cacheHas(seen, computed)\n              : includes(result, computed, comparator)\n            )) {\n          othIndex = othLength;\n          while (--othIndex) {\n            var cache = caches[othIndex];\n            if (!(cache\n                  ? cacheHas(cache, computed)\n                  : includes(arrays[othIndex], computed, comparator))\n                ) {\n              continue outer;\n            }\n          }\n          if (seen) {\n            seen.push(computed);\n          }\n          result.push(value);\n        }\n      }\n      return result;\n    }\n\n    /**\n     * The base implementation of `_.invert` and `_.invertBy` which inverts\n     * `object` with values transformed by `iteratee` and set by `setter`.\n     *\n     * @private\n     * @param {Object} object The object to iterate over.\n     * @param {Function} setter The function to set `accumulator` values.\n     * @param {Function} iteratee The iteratee to transform values.\n     * @param {Object} accumulator The initial inverted object.\n     * @returns {Function} Returns `accumulator`.\n     */\n    function baseInverter(object, setter, iteratee, accumulator) {\n      baseForOwn(object, function(value, key, object) {\n        setter(accumulator, iteratee(value), key, object);\n      });\n      return accumulator;\n    }\n\n    /**\n     * The base implementation of `_.invoke` without support for individual\n     * method arguments.\n     *\n     * @private\n     * @param {Object} object The object to query.\n     * @param {Array|string} path The path of the method to invoke.\n     * @param {Array} args The arguments to invoke the method with.\n     * @returns {*} Returns the result of the invoked method.\n     */\n    function baseInvoke(object, path, args) {\n      path = castPath(path, object);\n      object = parent(object, path);\n      var func = object == null ? object : object[toKey(last(path))];\n      return func == null ? undefined : apply(func, object, args);\n    }\n\n    /**\n     * The base implementation of `_.isArguments`.\n     *\n     * @private\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is an `arguments` object,\n     */\n    function baseIsArguments(value) {\n      return isObjectLike(value) && baseGetTag(value) == argsTag;\n    }\n\n    /**\n     * The base implementation of `_.isArrayBuffer` without Node.js optimizations.\n     *\n     * @private\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is an array buffer, else `false`.\n     */\n    function baseIsArrayBuffer(value) {\n      return isObjectLike(value) && baseGetTag(value) == arrayBufferTag;\n    }\n\n    /**\n     * The base implementation of `_.isDate` without Node.js optimizations.\n     *\n     * @private\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is a date object, else `false`.\n     */\n    function baseIsDate(value) {\n      return isObjectLike(value) && baseGetTag(value) == dateTag;\n    }\n\n    /**\n     * The base implementation of `_.isEqual` which supports partial comparisons\n     * and tracks traversed objects.\n     *\n     * @private\n     * @param {*} value The value to compare.\n     * @param {*} other The other value to compare.\n     * @param {boolean} bitmask The bitmask flags.\n     *  1 - Unordered comparison\n     *  2 - Partial comparison\n     * @param {Function} [customizer] The function to customize comparisons.\n     * @param {Object} [stack] Tracks traversed `value` and `other` objects.\n     * @returns {boolean} Returns `true` if the values are equivalent, else `false`.\n     */\n    function baseIsEqual(value, other, bitmask, customizer, stack) {\n      if (value === other) {\n        return true;\n      }\n      if (value == null || other == null || (!isObjectLike(value) && !isObjectLike(other))) {\n        return value !== value && other !== other;\n      }\n      return baseIsEqualDeep(value, other, bitmask, customizer, baseIsEqual, stack);\n    }\n\n    /**\n     * A specialized version of `baseIsEqual` for arrays and objects which performs\n     * deep comparisons and tracks traversed objects enabling objects with circular\n     * references to be compared.\n     *\n     * @private\n     * @param {Object} object The object to compare.\n     * @param {Object} other The other object to compare.\n     * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.\n     * @param {Function} customizer The function to customize comparisons.\n     * @param {Function} equalFunc The function to determine equivalents of values.\n     * @param {Object} [stack] Tracks traversed `object` and `other` objects.\n     * @returns {boolean} Returns `true` if the objects are equivalent, else `false`.\n     */\n    function baseIsEqualDeep(object, other, bitmask, customizer, equalFunc, stack) {\n      var objIsArr = isArray(object),\n          othIsArr = isArray(other),\n          objTag = objIsArr ? arrayTag : getTag(object),\n          othTag = othIsArr ? arrayTag : getTag(other);\n\n      objTag = objTag == argsTag ? objectTag : objTag;\n      othTag = othTag == argsTag ? objectTag : othTag;\n\n      var objIsObj = objTag == objectTag,\n          othIsObj = othTag == objectTag,\n          isSameTag = objTag == othTag;\n\n      if (isSameTag && isBuffer(object)) {\n        if (!isBuffer(other)) {\n          return false;\n        }\n        objIsArr = true;\n        objIsObj = false;\n      }\n      if (isSameTag && !objIsObj) {\n        stack || (stack = new Stack);\n        return (objIsArr || isTypedArray(object))\n          ? equalArrays(object, other, bitmask, customizer, equalFunc, stack)\n          : equalByTag(object, other, objTag, bitmask, customizer, equalFunc, stack);\n      }\n      if (!(bitmask & COMPARE_PARTIAL_FLAG)) {\n        var objIsWrapped = objIsObj && hasOwnProperty.call(object, '__wrapped__'),\n            othIsWrapped = othIsObj && hasOwnProperty.call(other, '__wrapped__');\n\n        if (objIsWrapped || othIsWrapped) {\n          var objUnwrapped = objIsWrapped ? object.value() : object,\n              othUnwrapped = othIsWrapped ? other.value() : other;\n\n          stack || (stack = new Stack);\n          return equalFunc(objUnwrapped, othUnwrapped, bitmask, customizer, stack);\n        }\n      }\n      if (!isSameTag) {\n        return false;\n      }\n      stack || (stack = new Stack);\n      return equalObjects(object, other, bitmask, customizer, equalFunc, stack);\n    }\n\n    /**\n     * The base implementation of `_.isMap` without Node.js optimizations.\n     *\n     * @private\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is a map, else `false`.\n     */\n    function baseIsMap(value) {\n      return isObjectLike(value) && getTag(value) == mapTag;\n    }\n\n    /**\n     * The base implementation of `_.isMatch` without support for iteratee shorthands.\n     *\n     * @private\n     * @param {Object} object The object to inspect.\n     * @param {Object} source The object of property values to match.\n     * @param {Array} matchData The property names, values, and compare flags to match.\n     * @param {Function} [customizer] The function to customize comparisons.\n     * @returns {boolean} Returns `true` if `object` is a match, else `false`.\n     */\n    function baseIsMatch(object, source, matchData, customizer) {\n      var index = matchData.length,\n          length = index,\n          noCustomizer = !customizer;\n\n      if (object == null) {\n        return !length;\n      }\n      object = Object(object);\n      while (index--) {\n        var data = matchData[index];\n        if ((noCustomizer && data[2])\n              ? data[1] !== object[data[0]]\n              : !(data[0] in object)\n            ) {\n          return false;\n        }\n      }\n      while (++index < length) {\n        data = matchData[index];\n        var key = data[0],\n            objValue = object[key],\n            srcValue = data[1];\n\n        if (noCustomizer && data[2]) {\n          if (objValue === undefined && !(key in object)) {\n            return false;\n          }\n        } else {\n          var stack = new Stack;\n          if (customizer) {\n            var result = customizer(objValue, srcValue, key, object, source, stack);\n          }\n          if (!(result === undefined\n                ? baseIsEqual(srcValue, objValue, COMPARE_PARTIAL_FLAG | COMPARE_UNORDERED_FLAG, customizer, stack)\n                : result\n              )) {\n            return false;\n          }\n        }\n      }\n      return true;\n    }\n\n    /**\n     * The base implementation of `_.isNative` without bad shim checks.\n     *\n     * @private\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is a native function,\n     *  else `false`.\n     */\n    function baseIsNative(value) {\n      if (!isObject(value) || isMasked(value)) {\n        return false;\n      }\n      var pattern = isFunction(value) ? reIsNative : reIsHostCtor;\n      return pattern.test(toSource(value));\n    }\n\n    /**\n     * The base implementation of `_.isRegExp` without Node.js optimizations.\n     *\n     * @private\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is a regexp, else `false`.\n     */\n    function baseIsRegExp(value) {\n      return isObjectLike(value) && baseGetTag(value) == regexpTag;\n    }\n\n    /**\n     * The base implementation of `_.isSet` without Node.js optimizations.\n     *\n     * @private\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is a set, else `false`.\n     */\n    function baseIsSet(value) {\n      return isObjectLike(value) && getTag(value) == setTag;\n    }\n\n    /**\n     * The base implementation of `_.isTypedArray` without Node.js optimizations.\n     *\n     * @private\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is a typed array, else `false`.\n     */\n    function baseIsTypedArray(value) {\n      return isObjectLike(value) &&\n        isLength(value.length) && !!typedArrayTags[baseGetTag(value)];\n    }\n\n    /**\n     * The base implementation of `_.iteratee`.\n     *\n     * @private\n     * @param {*} [value=_.identity] The value to convert to an iteratee.\n     * @returns {Function} Returns the iteratee.\n     */\n    function baseIteratee(value) {\n      // Don't store the `typeof` result in a variable to avoid a JIT bug in Safari 9.\n      // See https://bugs.webkit.org/show_bug.cgi?id=156034 for more details.\n      if (typeof value == 'function') {\n        return value;\n      }\n      if (value == null) {\n        return identity;\n      }\n      if (typeof value == 'object') {\n        return isArray(value)\n          ? baseMatchesProperty(value[0], value[1])\n          : baseMatches(value);\n      }\n      return property(value);\n    }\n\n    /**\n     * The base implementation of `_.keys` which doesn't treat sparse arrays as dense.\n     *\n     * @private\n     * @param {Object} object The object to query.\n     * @returns {Array} Returns the array of property names.\n     */\n    function baseKeys(object) {\n      if (!isPrototype(object)) {\n        return nativeKeys(object);\n      }\n      var result = [];\n      for (var key in Object(object)) {\n        if (hasOwnProperty.call(object, key) && key != 'constructor') {\n          result.push(key);\n        }\n      }\n      return result;\n    }\n\n    /**\n     * The base implementation of `_.keysIn` which doesn't treat sparse arrays as dense.\n     *\n     * @private\n     * @param {Object} object The object to query.\n     * @returns {Array} Returns the array of property names.\n     */\n    function baseKeysIn(object) {\n      if (!isObject(object)) {\n        return nativeKeysIn(object);\n      }\n      var isProto = isPrototype(object),\n          result = [];\n\n      for (var key in object) {\n        if (!(key == 'constructor' && (isProto || !hasOwnProperty.call(object, key)))) {\n          result.push(key);\n        }\n      }\n      return result;\n    }\n\n    /**\n     * The base implementation of `_.lt` which doesn't coerce arguments.\n     *\n     * @private\n     * @param {*} value The value to compare.\n     * @param {*} other The other value to compare.\n     * @returns {boolean} Returns `true` if `value` is less than `other`,\n     *  else `false`.\n     */\n    function baseLt(value, other) {\n      return value < other;\n    }\n\n    /**\n     * The base implementation of `_.map` without support for iteratee shorthands.\n     *\n     * @private\n     * @param {Array|Object} collection The collection to iterate over.\n     * @param {Function} iteratee The function invoked per iteration.\n     * @returns {Array} Returns the new mapped array.\n     */\n    function baseMap(collection, iteratee) {\n      var index = -1,\n          result = isArrayLike(collection) ? Array(collection.length) : [];\n\n      baseEach(collection, function(value, key, collection) {\n        result[++index] = iteratee(value, key, collection);\n      });\n      return result;\n    }\n\n    /**\n     * The base implementation of `_.matches` which doesn't clone `source`.\n     *\n     * @private\n     * @param {Object} source The object of property values to match.\n     * @returns {Function} Returns the new spec function.\n     */\n    function baseMatches(source) {\n      var matchData = getMatchData(source);\n      if (matchData.length == 1 && matchData[0][2]) {\n        return matchesStrictComparable(matchData[0][0], matchData[0][1]);\n      }\n      return function(object) {\n        return object === source || baseIsMatch(object, source, matchData);\n      };\n    }\n\n    /**\n     * The base implementation of `_.matchesProperty` which doesn't clone `srcValue`.\n     *\n     * @private\n     * @param {string} path The path of the property to get.\n     * @param {*} srcValue The value to match.\n     * @returns {Function} Returns the new spec function.\n     */\n    function baseMatchesProperty(path, srcValue) {\n      if (isKey(path) && isStrictComparable(srcValue)) {\n        return matchesStrictComparable(toKey(path), srcValue);\n      }\n      return function(object) {\n        var objValue = get(object, path);\n        return (objValue === undefined && objValue === srcValue)\n          ? hasIn(object, path)\n          : baseIsEqual(srcValue, objValue, COMPARE_PARTIAL_FLAG | COMPARE_UNORDERED_FLAG);\n      };\n    }\n\n    /**\n     * The base implementation of `_.merge` without support for multiple sources.\n     *\n     * @private\n     * @param {Object} object The destination object.\n     * @param {Object} source The source object.\n     * @param {number} srcIndex The index of `source`.\n     * @param {Function} [customizer] The function to customize merged values.\n     * @param {Object} [stack] Tracks traversed source values and their merged\n     *  counterparts.\n     */\n    function baseMerge(object, source, srcIndex, customizer, stack) {\n      if (object === source) {\n        return;\n      }\n      baseFor(source, function(srcValue, key) {\n        stack || (stack = new Stack);\n        if (isObject(srcValue)) {\n          baseMergeDeep(object, source, key, srcIndex, baseMerge, customizer, stack);\n        }\n        else {\n          var newValue = customizer\n            ? customizer(safeGet(object, key), srcValue, (key + ''), object, source, stack)\n            : undefined;\n\n          if (newValue === undefined) {\n            newValue = srcValue;\n          }\n          assignMergeValue(object, key, newValue);\n        }\n      }, keysIn);\n    }\n\n    /**\n     * A specialized version of `baseMerge` for arrays and objects which performs\n     * deep merges and tracks traversed objects enabling objects with circular\n     * references to be merged.\n     *\n     * @private\n     * @param {Object} object The destination object.\n     * @param {Object} source The source object.\n     * @param {string} key The key of the value to merge.\n     * @param {number} srcIndex The index of `source`.\n     * @param {Function} mergeFunc The function to merge values.\n     * @param {Function} [customizer] The function to customize assigned values.\n     * @param {Object} [stack] Tracks traversed source values and their merged\n     *  counterparts.\n     */\n    function baseMergeDeep(object, source, key, srcIndex, mergeFunc, customizer, stack) {\n      var objValue = safeGet(object, key),\n          srcValue = safeGet(source, key),\n          stacked = stack.get(srcValue);\n\n      if (stacked) {\n        assignMergeValue(object, key, stacked);\n        return;\n      }\n      var newValue = customizer\n        ? customizer(objValue, srcValue, (key + ''), object, source, stack)\n        : undefined;\n\n      var isCommon = newValue === undefined;\n\n      if (isCommon) {\n        var isArr = isArray(srcValue),\n            isBuff = !isArr && isBuffer(srcValue),\n            isTyped = !isArr && !isBuff && isTypedArray(srcValue);\n\n        newValue = srcValue;\n        if (isArr || isBuff || isTyped) {\n          if (isArray(objValue)) {\n            newValue = objValue;\n          }\n          else if (isArrayLikeObject(objValue)) {\n            newValue = copyArray(objValue);\n          }\n          else if (isBuff) {\n            isCommon = false;\n            newValue = cloneBuffer(srcValue, true);\n          }\n          else if (isTyped) {\n            isCommon = false;\n            newValue = cloneTypedArray(srcValue, true);\n          }\n          else {\n            newValue = [];\n          }\n        }\n        else if (isPlainObject(srcValue) || isArguments(srcValue)) {\n          newValue = objValue;\n          if (isArguments(objValue)) {\n            newValue = toPlainObject(objValue);\n          }\n          else if (!isObject(objValue) || isFunction(objValue)) {\n            newValue = initCloneObject(srcValue);\n          }\n        }\n        else {\n          isCommon = false;\n        }\n      }\n      if (isCommon) {\n        // Recursively merge objects and arrays (susceptible to call stack limits).\n        stack.set(srcValue, newValue);\n        mergeFunc(newValue, srcValue, srcIndex, customizer, stack);\n        stack['delete'](srcValue);\n      }\n      assignMergeValue(object, key, newValue);\n    }\n\n    /**\n     * The base implementation of `_.nth` which doesn't coerce arguments.\n     *\n     * @private\n     * @param {Array} array The array to query.\n     * @param {number} n The index of the element to return.\n     * @returns {*} Returns the nth element of `array`.\n     */\n    function baseNth(array, n) {\n      var length = array.length;\n      if (!length) {\n        return;\n      }\n      n += n < 0 ? length : 0;\n      return isIndex(n, length) ? array[n] : undefined;\n    }\n\n    /**\n     * The base implementation of `_.orderBy` without param guards.\n     *\n     * @private\n     * @param {Array|Object} collection The collection to iterate over.\n     * @param {Function[]|Object[]|string[]} iteratees The iteratees to sort by.\n     * @param {string[]} orders The sort orders of `iteratees`.\n     * @returns {Array} Returns the new sorted array.\n     */\n    function baseOrderBy(collection, iteratees, orders) {\n      if (iteratees.length) {\n        iteratees = arrayMap(iteratees, function(iteratee) {\n          if (isArray(iteratee)) {\n            return function(value) {\n              return baseGet(value, iteratee.length === 1 ? iteratee[0] : iteratee);\n            }\n          }\n          return iteratee;\n        });\n      } else {\n        iteratees = [identity];\n      }\n\n      var index = -1;\n      iteratees = arrayMap(iteratees, baseUnary(getIteratee()));\n\n      var result = baseMap(collection, function(value, key, collection) {\n        var criteria = arrayMap(iteratees, function(iteratee) {\n          return iteratee(value);\n        });\n        return { 'criteria': criteria, 'index': ++index, 'value': value };\n      });\n\n      return baseSortBy(result, function(object, other) {\n        return compareMultiple(object, other, orders);\n      });\n    }\n\n    /**\n     * The base implementation of `_.pick` without support for individual\n     * property identifiers.\n     *\n     * @private\n     * @param {Object} object The source object.\n     * @param {string[]} paths The property paths to pick.\n     * @returns {Object} Returns the new object.\n     */\n    function basePick(object, paths) {\n      return basePickBy(object, paths, function(value, path) {\n        return hasIn(object, path);\n      });\n    }\n\n    /**\n     * The base implementation of  `_.pickBy` without support for iteratee shorthands.\n     *\n     * @private\n     * @param {Object} object The source object.\n     * @param {string[]} paths The property paths to pick.\n     * @param {Function} predicate The function invoked per property.\n     * @returns {Object} Returns the new object.\n     */\n    function basePickBy(object, paths, predicate) {\n      var index = -1,\n          length = paths.length,\n          result = {};\n\n      while (++index < length) {\n        var path = paths[index],\n            value = baseGet(object, path);\n\n        if (predicate(value, path)) {\n          baseSet(result, castPath(path, object), value);\n        }\n      }\n      return result;\n    }\n\n    /**\n     * A specialized version of `baseProperty` which supports deep paths.\n     *\n     * @private\n     * @param {Array|string} path The path of the property to get.\n     * @returns {Function} Returns the new accessor function.\n     */\n    function basePropertyDeep(path) {\n      return function(object) {\n        return baseGet(object, path);\n      };\n    }\n\n    /**\n     * The base implementation of `_.pullAllBy` without support for iteratee\n     * shorthands.\n     *\n     * @private\n     * @param {Array} array The array to modify.\n     * @param {Array} values The values to remove.\n     * @param {Function} [iteratee] The iteratee invoked per element.\n     * @param {Function} [comparator] The comparator invoked per element.\n     * @returns {Array} Returns `array`.\n     */\n    function basePullAll(array, values, iteratee, comparator) {\n      var indexOf = comparator ? baseIndexOfWith : baseIndexOf,\n          index = -1,\n          length = values.length,\n          seen = array;\n\n      if (array === values) {\n        values = copyArray(values);\n      }\n      if (iteratee) {\n        seen = arrayMap(array, baseUnary(iteratee));\n      }\n      while (++index < length) {\n        var fromIndex = 0,\n            value = values[index],\n            computed = iteratee ? iteratee(value) : value;\n\n        while ((fromIndex = indexOf(seen, computed, fromIndex, comparator)) > -1) {\n          if (seen !== array) {\n            splice.call(seen, fromIndex, 1);\n          }\n          splice.call(array, fromIndex, 1);\n        }\n      }\n      return array;\n    }\n\n    /**\n     * The base implementation of `_.pullAt` without support for individual\n     * indexes or capturing the removed elements.\n     *\n     * @private\n     * @param {Array} array The array to modify.\n     * @param {number[]} indexes The indexes of elements to remove.\n     * @returns {Array} Returns `array`.\n     */\n    function basePullAt(array, indexes) {\n      var length = array ? indexes.length : 0,\n          lastIndex = length - 1;\n\n      while (length--) {\n        var index = indexes[length];\n        if (length == lastIndex || index !== previous) {\n          var previous = index;\n          if (isIndex(index)) {\n            splice.call(array, index, 1);\n          } else {\n            baseUnset(array, index);\n          }\n        }\n      }\n      return array;\n    }\n\n    /**\n     * The base implementation of `_.random` without support for returning\n     * floating-point numbers.\n     *\n     * @private\n     * @param {number} lower The lower bound.\n     * @param {number} upper The upper bound.\n     * @returns {number} Returns the random number.\n     */\n    function baseRandom(lower, upper) {\n      return lower + nativeFloor(nativeRandom() * (upper - lower + 1));\n    }\n\n    /**\n     * The base implementation of `_.range` and `_.rangeRight` which doesn't\n     * coerce arguments.\n     *\n     * @private\n     * @param {number} start The start of the range.\n     * @param {number} end The end of the range.\n     * @param {number} step The value to increment or decrement by.\n     * @param {boolean} [fromRight] Specify iterating from right to left.\n     * @returns {Array} Returns the range of numbers.\n     */\n    function baseRange(start, end, step, fromRight) {\n      var index = -1,\n          length = nativeMax(nativeCeil((end - start) / (step || 1)), 0),\n          result = Array(length);\n\n      while (length--) {\n        result[fromRight ? length : ++index] = start;\n        start += step;\n      }\n      return result;\n    }\n\n    /**\n     * The base implementation of `_.repeat` which doesn't coerce arguments.\n     *\n     * @private\n     * @param {string} string The string to repeat.\n     * @param {number} n The number of times to repeat the string.\n     * @returns {string} Returns the repeated string.\n     */\n    function baseRepeat(string, n) {\n      var result = '';\n      if (!string || n < 1 || n > MAX_SAFE_INTEGER) {\n        return result;\n      }\n      // Leverage the exponentiation by squaring algorithm for a faster repeat.\n      // See https://en.wikipedia.org/wiki/Exponentiation_by_squaring for more details.\n      do {\n        if (n % 2) {\n          result += string;\n        }\n        n = nativeFloor(n / 2);\n        if (n) {\n          string += string;\n        }\n      } while (n);\n\n      return result;\n    }\n\n    /**\n     * The base implementation of `_.rest` which doesn't validate or coerce arguments.\n     *\n     * @private\n     * @param {Function} func The function to apply a rest parameter to.\n     * @param {number} [start=func.length-1] The start position of the rest parameter.\n     * @returns {Function} Returns the new function.\n     */\n    function baseRest(func, start) {\n      return setToString(overRest(func, start, identity), func + '');\n    }\n\n    /**\n     * The base implementation of `_.sample`.\n     *\n     * @private\n     * @param {Array|Object} collection The collection to sample.\n     * @returns {*} Returns the random element.\n     */\n    function baseSample(collection) {\n      return arraySample(values(collection));\n    }\n\n    /**\n     * The base implementation of `_.sampleSize` without param guards.\n     *\n     * @private\n     * @param {Array|Object} collection The collection to sample.\n     * @param {number} n The number of elements to sample.\n     * @returns {Array} Returns the random elements.\n     */\n    function baseSampleSize(collection, n) {\n      var array = values(collection);\n      return shuffleSelf(array, baseClamp(n, 0, array.length));\n    }\n\n    /**\n     * The base implementation of `_.set`.\n     *\n     * @private\n     * @param {Object} object The object to modify.\n     * @param {Array|string} path The path of the property to set.\n     * @param {*} value The value to set.\n     * @param {Function} [customizer] The function to customize path creation.\n     * @returns {Object} Returns `object`.\n     */\n    function baseSet(object, path, value, customizer) {\n      if (!isObject(object)) {\n        return object;\n      }\n      path = castPath(path, object);\n\n      var index = -1,\n          length = path.length,\n          lastIndex = length - 1,\n          nested = object;\n\n      while (nested != null && ++index < length) {\n        var key = toKey(path[index]),\n            newValue = value;\n\n        if (key === '__proto__' || key === 'constructor' || key === 'prototype') {\n          return object;\n        }\n\n        if (index != lastIndex) {\n          var objValue = nested[key];\n          newValue = customizer ? customizer(objValue, key, nested) : undefined;\n          if (newValue === undefined) {\n            newValue = isObject(objValue)\n              ? objValue\n              : (isIndex(path[index + 1]) ? [] : {});\n          }\n        }\n        assignValue(nested, key, newValue);\n        nested = nested[key];\n      }\n      return object;\n    }\n\n    /**\n     * The base implementation of `setData` without support for hot loop shorting.\n     *\n     * @private\n     * @param {Function} func The function to associate metadata with.\n     * @param {*} data The metadata.\n     * @returns {Function} Returns `func`.\n     */\n    var baseSetData = !metaMap ? identity : function(func, data) {\n      metaMap.set(func, data);\n      return func;\n    };\n\n    /**\n     * The base implementation of `setToString` without support for hot loop shorting.\n     *\n     * @private\n     * @param {Function} func The function to modify.\n     * @param {Function} string The `toString` result.\n     * @returns {Function} Returns `func`.\n     */\n    var baseSetToString = !defineProperty ? identity : function(func, string) {\n      return defineProperty(func, 'toString', {\n        'configurable': true,\n        'enumerable': false,\n        'value': constant(string),\n        'writable': true\n      });\n    };\n\n    /**\n     * The base implementation of `_.shuffle`.\n     *\n     * @private\n     * @param {Array|Object} collection The collection to shuffle.\n     * @returns {Array} Returns the new shuffled array.\n     */\n    function baseShuffle(collection) {\n      return shuffleSelf(values(collection));\n    }\n\n    /**\n     * The base implementation of `_.slice` without an iteratee call guard.\n     *\n     * @private\n     * @param {Array} array The array to slice.\n     * @param {number} [start=0] The start position.\n     * @param {number} [end=array.length] The end position.\n     * @returns {Array} Returns the slice of `array`.\n     */\n    function baseSlice(array, start, end) {\n      var index = -1,\n          length = array.length;\n\n      if (start < 0) {\n        start = -start > length ? 0 : (length + start);\n      }\n      end = end > length ? length : end;\n      if (end < 0) {\n        end += length;\n      }\n      length = start > end ? 0 : ((end - start) >>> 0);\n      start >>>= 0;\n\n      var result = Array(length);\n      while (++index < length) {\n        result[index] = array[index + start];\n      }\n      return result;\n    }\n\n    /**\n     * The base implementation of `_.some` without support for iteratee shorthands.\n     *\n     * @private\n     * @param {Array|Object} collection The collection to iterate over.\n     * @param {Function} predicate The function invoked per iteration.\n     * @returns {boolean} Returns `true` if any element passes the predicate check,\n     *  else `false`.\n     */\n    function baseSome(collection, predicate) {\n      var result;\n\n      baseEach(collection, function(value, index, collection) {\n        result = predicate(value, index, collection);\n        return !result;\n      });\n      return !!result;\n    }\n\n    /**\n     * The base implementation of `_.sortedIndex` and `_.sortedLastIndex` which\n     * performs a binary search of `array` to determine the index at which `value`\n     * should be inserted into `array` in order to maintain its sort order.\n     *\n     * @private\n     * @param {Array} array The sorted array to inspect.\n     * @param {*} value The value to evaluate.\n     * @param {boolean} [retHighest] Specify returning the highest qualified index.\n     * @returns {number} Returns the index at which `value` should be inserted\n     *  into `array`.\n     */\n    function baseSortedIndex(array, value, retHighest) {\n      var low = 0,\n          high = array == null ? low : array.length;\n\n      if (typeof value == 'number' && value === value && high <= HALF_MAX_ARRAY_LENGTH) {\n        while (low < high) {\n          var mid = (low + high) >>> 1,\n              computed = array[mid];\n\n          if (computed !== null && !isSymbol(computed) &&\n              (retHighest ? (computed <= value) : (computed < value))) {\n            low = mid + 1;\n          } else {\n            high = mid;\n          }\n        }\n        return high;\n      }\n      return baseSortedIndexBy(array, value, identity, retHighest);\n    }\n\n    /**\n     * The base implementation of `_.sortedIndexBy` and `_.sortedLastIndexBy`\n     * which invokes `iteratee` for `value` and each element of `array` to compute\n     * their sort ranking. The iteratee is invoked with one argument; (value).\n     *\n     * @private\n     * @param {Array} array The sorted array to inspect.\n     * @param {*} value The value to evaluate.\n     * @param {Function} iteratee The iteratee invoked per element.\n     * @param {boolean} [retHighest] Specify returning the highest qualified index.\n     * @returns {number} Returns the index at which `value` should be inserted\n     *  into `array`.\n     */\n    function baseSortedIndexBy(array, value, iteratee, retHighest) {\n      var low = 0,\n          high = array == null ? 0 : array.length;\n      if (high === 0) {\n        return 0;\n      }\n\n      value = iteratee(value);\n      var valIsNaN = value !== value,\n          valIsNull = value === null,\n          valIsSymbol = isSymbol(value),\n          valIsUndefined = value === undefined;\n\n      while (low < high) {\n        var mid = nativeFloor((low + high) / 2),\n            computed = iteratee(array[mid]),\n            othIsDefined = computed !== undefined,\n            othIsNull = computed === null,\n            othIsReflexive = computed === computed,\n            othIsSymbol = isSymbol(computed);\n\n        if (valIsNaN) {\n          var setLow = retHighest || othIsReflexive;\n        } else if (valIsUndefined) {\n          setLow = othIsReflexive && (retHighest || othIsDefined);\n        } else if (valIsNull) {\n          setLow = othIsReflexive && othIsDefined && (retHighest || !othIsNull);\n        } else if (valIsSymbol) {\n          setLow = othIsReflexive && othIsDefined && !othIsNull && (retHighest || !othIsSymbol);\n        } else if (othIsNull || othIsSymbol) {\n          setLow = false;\n        } else {\n          setLow = retHighest ? (computed <= value) : (computed < value);\n        }\n        if (setLow) {\n          low = mid + 1;\n        } else {\n          high = mid;\n        }\n      }\n      return nativeMin(high, MAX_ARRAY_INDEX);\n    }\n\n    /**\n     * The base implementation of `_.sortedUniq` and `_.sortedUniqBy` without\n     * support for iteratee shorthands.\n     *\n     * @private\n     * @param {Array} array The array to inspect.\n     * @param {Function} [iteratee] The iteratee invoked per element.\n     * @returns {Array} Returns the new duplicate free array.\n     */\n    function baseSortedUniq(array, iteratee) {\n      var index = -1,\n          length = array.length,\n          resIndex = 0,\n          result = [];\n\n      while (++index < length) {\n        var value = array[index],\n            computed = iteratee ? iteratee(value) : value;\n\n        if (!index || !eq(computed, seen)) {\n          var seen = computed;\n          result[resIndex++] = value === 0 ? 0 : value;\n        }\n      }\n      return result;\n    }\n\n    /**\n     * The base implementation of `_.toNumber` which doesn't ensure correct\n     * conversions of binary, hexadecimal, or octal string values.\n     *\n     * @private\n     * @param {*} value The value to process.\n     * @returns {number} Returns the number.\n     */\n    function baseToNumber(value) {\n      if (typeof value == 'number') {\n        return value;\n      }\n      if (isSymbol(value)) {\n        return NAN;\n      }\n      return +value;\n    }\n\n    /**\n     * The base implementation of `_.toString` which doesn't convert nullish\n     * values to empty strings.\n     *\n     * @private\n     * @param {*} value The value to process.\n     * @returns {string} Returns the string.\n     */\n    function baseToString(value) {\n      // Exit early for strings to avoid a performance hit in some environments.\n      if (typeof value == 'string') {\n        return value;\n      }\n      if (isArray(value)) {\n        // Recursively convert values (susceptible to call stack limits).\n        return arrayMap(value, baseToString) + '';\n      }\n      if (isSymbol(value)) {\n        return symbolToString ? symbolToString.call(value) : '';\n      }\n      var result = (value + '');\n      return (result == '0' && (1 / value) == -INFINITY) ? '-0' : result;\n    }\n\n    /**\n     * The base implementation of `_.uniqBy` without support for iteratee shorthands.\n     *\n     * @private\n     * @param {Array} array The array to inspect.\n     * @param {Function} [iteratee] The iteratee invoked per element.\n     * @param {Function} [comparator] The comparator invoked per element.\n     * @returns {Array} Returns the new duplicate free array.\n     */\n    function baseUniq(array, iteratee, comparator) {\n      var index = -1,\n          includes = arrayIncludes,\n          length = array.length,\n          isCommon = true,\n          result = [],\n          seen = result;\n\n      if (comparator) {\n        isCommon = false;\n        includes = arrayIncludesWith;\n      }\n      else if (length >= LARGE_ARRAY_SIZE) {\n        var set = iteratee ? null : createSet(array);\n        if (set) {\n          return setToArray(set);\n        }\n        isCommon = false;\n        includes = cacheHas;\n        seen = new SetCache;\n      }\n      else {\n        seen = iteratee ? [] : result;\n      }\n      outer:\n      while (++index < length) {\n        var value = array[index],\n            computed = iteratee ? iteratee(value) : value;\n\n        value = (comparator || value !== 0) ? value : 0;\n        if (isCommon && computed === computed) {\n          var seenIndex = seen.length;\n          while (seenIndex--) {\n            if (seen[seenIndex] === computed) {\n              continue outer;\n            }\n          }\n          if (iteratee) {\n            seen.push(computed);\n          }\n          result.push(value);\n        }\n        else if (!includes(seen, computed, comparator)) {\n          if (seen !== result) {\n            seen.push(computed);\n          }\n          result.push(value);\n        }\n      }\n      return result;\n    }\n\n    /**\n     * The base implementation of `_.unset`.\n     *\n     * @private\n     * @param {Object} object The object to modify.\n     * @param {Array|string} path The property path to unset.\n     * @returns {boolean} Returns `true` if the property is deleted, else `false`.\n     */\n    function baseUnset(object, path) {\n      path = castPath(path, object);\n      object = parent(object, path);\n      return object == null || delete object[toKey(last(path))];\n    }\n\n    /**\n     * The base implementation of `_.update`.\n     *\n     * @private\n     * @param {Object} object The object to modify.\n     * @param {Array|string} path The path of the property to update.\n     * @param {Function} updater The function to produce the updated value.\n     * @param {Function} [customizer] The function to customize path creation.\n     * @returns {Object} Returns `object`.\n     */\n    function baseUpdate(object, path, updater, customizer) {\n      return baseSet(object, path, updater(baseGet(object, path)), customizer);\n    }\n\n    /**\n     * The base implementation of methods like `_.dropWhile` and `_.takeWhile`\n     * without support for iteratee shorthands.\n     *\n     * @private\n     * @param {Array} array The array to query.\n     * @param {Function} predicate The function invoked per iteration.\n     * @param {boolean} [isDrop] Specify dropping elements instead of taking them.\n     * @param {boolean} [fromRight] Specify iterating from right to left.\n     * @returns {Array} Returns the slice of `array`.\n     */\n    function baseWhile(array, predicate, isDrop, fromRight) {\n      var length = array.length,\n          index = fromRight ? length : -1;\n\n      while ((fromRight ? index-- : ++index < length) &&\n        predicate(array[index], index, array)) {}\n\n      return isDrop\n        ? baseSlice(array, (fromRight ? 0 : index), (fromRight ? index + 1 : length))\n        : baseSlice(array, (fromRight ? index + 1 : 0), (fromRight ? length : index));\n    }\n\n    /**\n     * The base implementation of `wrapperValue` which returns the result of\n     * performing a sequence of actions on the unwrapped `value`, where each\n     * successive action is supplied the return value of the previous.\n     *\n     * @private\n     * @param {*} value The unwrapped value.\n     * @param {Array} actions Actions to perform to resolve the unwrapped value.\n     * @returns {*} Returns the resolved value.\n     */\n    function baseWrapperValue(value, actions) {\n      var result = value;\n      if (result instanceof LazyWrapper) {\n        result = result.value();\n      }\n      return arrayReduce(actions, function(result, action) {\n        return action.func.apply(action.thisArg, arrayPush([result], action.args));\n      }, result);\n    }\n\n    /**\n     * The base implementation of methods like `_.xor`, without support for\n     * iteratee shorthands, that accepts an array of arrays to inspect.\n     *\n     * @private\n     * @param {Array} arrays The arrays to inspect.\n     * @param {Function} [iteratee] The iteratee invoked per element.\n     * @param {Function} [comparator] The comparator invoked per element.\n     * @returns {Array} Returns the new array of values.\n     */\n    function baseXor(arrays, iteratee, comparator) {\n      var length = arrays.length;\n      if (length < 2) {\n        return length ? baseUniq(arrays[0]) : [];\n      }\n      var index = -1,\n          result = Array(length);\n\n      while (++index < length) {\n        var array = arrays[index],\n            othIndex = -1;\n\n        while (++othIndex < length) {\n          if (othIndex != index) {\n            result[index] = baseDifference(result[index] || array, arrays[othIndex], iteratee, comparator);\n          }\n        }\n      }\n      return baseUniq(baseFlatten(result, 1), iteratee, comparator);\n    }\n\n    /**\n     * This base implementation of `_.zipObject` which assigns values using `assignFunc`.\n     *\n     * @private\n     * @param {Array} props The property identifiers.\n     * @param {Array} values The property values.\n     * @param {Function} assignFunc The function to assign values.\n     * @returns {Object} Returns the new object.\n     */\n    function baseZipObject(props, values, assignFunc) {\n      var index = -1,\n          length = props.length,\n          valsLength = values.length,\n          result = {};\n\n      while (++index < length) {\n        var value = index < valsLength ? values[index] : undefined;\n        assignFunc(result, props[index], value);\n      }\n      return result;\n    }\n\n    /**\n     * Casts `value` to an empty array if it's not an array like object.\n     *\n     * @private\n     * @param {*} value The value to inspect.\n     * @returns {Array|Object} Returns the cast array-like object.\n     */\n    function castArrayLikeObject(value) {\n      return isArrayLikeObject(value) ? value : [];\n    }\n\n    /**\n     * Casts `value` to `identity` if it's not a function.\n     *\n     * @private\n     * @param {*} value The value to inspect.\n     * @returns {Function} Returns cast function.\n     */\n    function castFunction(value) {\n      return typeof value == 'function' ? value : identity;\n    }\n\n    /**\n     * Casts `value` to a path array if it's not one.\n     *\n     * @private\n     * @param {*} value The value to inspect.\n     * @param {Object} [object] The object to query keys on.\n     * @returns {Array} Returns the cast property path array.\n     */\n    function castPath(value, object) {\n      if (isArray(value)) {\n        return value;\n      }\n      return isKey(value, object) ? [value] : stringToPath(toString(value));\n    }\n\n    /**\n     * A `baseRest` alias which can be replaced with `identity` by module\n     * replacement plugins.\n     *\n     * @private\n     * @type {Function}\n     * @param {Function} func The function to apply a rest parameter to.\n     * @returns {Function} Returns the new function.\n     */\n    var castRest = baseRest;\n\n    /**\n     * Casts `array` to a slice if it's needed.\n     *\n     * @private\n     * @param {Array} array The array to inspect.\n     * @param {number} start The start position.\n     * @param {number} [end=array.length] The end position.\n     * @returns {Array} Returns the cast slice.\n     */\n    function castSlice(array, start, end) {\n      var length = array.length;\n      end = end === undefined ? length : end;\n      return (!start && end >= length) ? array : baseSlice(array, start, end);\n    }\n\n    /**\n     * A simple wrapper around the global [`clearTimeout`](https://mdn.io/clearTimeout).\n     *\n     * @private\n     * @param {number|Object} id The timer id or timeout object of the timer to clear.\n     */\n    var clearTimeout = ctxClearTimeout || function(id) {\n      return root.clearTimeout(id);\n    };\n\n    /**\n     * Creates a clone of  `buffer`.\n     *\n     * @private\n     * @param {Buffer} buffer The buffer to clone.\n     * @param {boolean} [isDeep] Specify a deep clone.\n     * @returns {Buffer} Returns the cloned buffer.\n     */\n    function cloneBuffer(buffer, isDeep) {\n      if (isDeep) {\n        return buffer.slice();\n      }\n      var length = buffer.length,\n          result = allocUnsafe ? allocUnsafe(length) : new buffer.constructor(length);\n\n      buffer.copy(result);\n      return result;\n    }\n\n    /**\n     * Creates a clone of `arrayBuffer`.\n     *\n     * @private\n     * @param {ArrayBuffer} arrayBuffer The array buffer to clone.\n     * @returns {ArrayBuffer} Returns the cloned array buffer.\n     */\n    function cloneArrayBuffer(arrayBuffer) {\n      var result = new arrayBuffer.constructor(arrayBuffer.byteLength);\n      new Uint8Array(result).set(new Uint8Array(arrayBuffer));\n      return result;\n    }\n\n    /**\n     * Creates a clone of `dataView`.\n     *\n     * @private\n     * @param {Object} dataView The data view to clone.\n     * @param {boolean} [isDeep] Specify a deep clone.\n     * @returns {Object} Returns the cloned data view.\n     */\n    function cloneDataView(dataView, isDeep) {\n      var buffer = isDeep ? cloneArrayBuffer(dataView.buffer) : dataView.buffer;\n      return new dataView.constructor(buffer, dataView.byteOffset, dataView.byteLength);\n    }\n\n    /**\n     * Creates a clone of `regexp`.\n     *\n     * @private\n     * @param {Object} regexp The regexp to clone.\n     * @returns {Object} Returns the cloned regexp.\n     */\n    function cloneRegExp(regexp) {\n      var result = new regexp.constructor(regexp.source, reFlags.exec(regexp));\n      result.lastIndex = regexp.lastIndex;\n      return result;\n    }\n\n    /**\n     * Creates a clone of the `symbol` object.\n     *\n     * @private\n     * @param {Object} symbol The symbol object to clone.\n     * @returns {Object} Returns the cloned symbol object.\n     */\n    function cloneSymbol(symbol) {\n      return symbolValueOf ? Object(symbolValueOf.call(symbol)) : {};\n    }\n\n    /**\n     * Creates a clone of `typedArray`.\n     *\n     * @private\n     * @param {Object} typedArray The typed array to clone.\n     * @param {boolean} [isDeep] Specify a deep clone.\n     * @returns {Object} Returns the cloned typed array.\n     */\n    function cloneTypedArray(typedArray, isDeep) {\n      var buffer = isDeep ? cloneArrayBuffer(typedArray.buffer) : typedArray.buffer;\n      return new typedArray.constructor(buffer, typedArray.byteOffset, typedArray.length);\n    }\n\n    /**\n     * Compares values to sort them in ascending order.\n     *\n     * @private\n     * @param {*} value The value to compare.\n     * @param {*} other The other value to compare.\n     * @returns {number} Returns the sort order indicator for `value`.\n     */\n    function compareAscending(value, other) {\n      if (value !== other) {\n        var valIsDefined = value !== undefined,\n            valIsNull = value === null,\n            valIsReflexive = value === value,\n            valIsSymbol = isSymbol(value);\n\n        var othIsDefined = other !== undefined,\n            othIsNull = other === null,\n            othIsReflexive = other === other,\n            othIsSymbol = isSymbol(other);\n\n        if ((!othIsNull && !othIsSymbol && !valIsSymbol && value > other) ||\n            (valIsSymbol && othIsDefined && othIsReflexive && !othIsNull && !othIsSymbol) ||\n            (valIsNull && othIsDefined && othIsReflexive) ||\n            (!valIsDefined && othIsReflexive) ||\n            !valIsReflexive) {\n          return 1;\n        }\n        if ((!valIsNull && !valIsSymbol && !othIsSymbol && value < other) ||\n            (othIsSymbol && valIsDefined && valIsReflexive && !valIsNull && !valIsSymbol) ||\n            (othIsNull && valIsDefined && valIsReflexive) ||\n            (!othIsDefined && valIsReflexive) ||\n            !othIsReflexive) {\n          return -1;\n        }\n      }\n      return 0;\n    }\n\n    /**\n     * Used by `_.orderBy` to compare multiple properties of a value to another\n     * and stable sort them.\n     *\n     * If `orders` is unspecified, all values are sorted in ascending order. Otherwise,\n     * specify an order of \"desc\" for descending or \"asc\" for ascending sort order\n     * of corresponding values.\n     *\n     * @private\n     * @param {Object} object The object to compare.\n     * @param {Object} other The other object to compare.\n     * @param {boolean[]|string[]} orders The order to sort by for each property.\n     * @returns {number} Returns the sort order indicator for `object`.\n     */\n    function compareMultiple(object, other, orders) {\n      var index = -1,\n          objCriteria = object.criteria,\n          othCriteria = other.criteria,\n          length = objCriteria.length,\n          ordersLength = orders.length;\n\n      while (++index < length) {\n        var result = compareAscending(objCriteria[index], othCriteria[index]);\n        if (result) {\n          if (index >= ordersLength) {\n            return result;\n          }\n          var order = orders[index];\n          return result * (order == 'desc' ? -1 : 1);\n        }\n      }\n      // Fixes an `Array#sort` bug in the JS engine embedded in Adobe applications\n      // that causes it, under certain circumstances, to provide the same value for\n      // `object` and `other`. See https://github.com/jashkenas/underscore/pull/1247\n      // for more details.\n      //\n      // This also ensures a stable sort in V8 and other engines.\n      // See https://bugs.chromium.org/p/v8/issues/detail?id=90 for more details.\n      return object.index - other.index;\n    }\n\n    /**\n     * Creates an array that is the composition of partially applied arguments,\n     * placeholders, and provided arguments into a single array of arguments.\n     *\n     * @private\n     * @param {Array} args The provided arguments.\n     * @param {Array} partials The arguments to prepend to those provided.\n     * @param {Array} holders The `partials` placeholder indexes.\n     * @params {boolean} [isCurried] Specify composing for a curried function.\n     * @returns {Array} Returns the new array of composed arguments.\n     */\n    function composeArgs(args, partials, holders, isCurried) {\n      var argsIndex = -1,\n          argsLength = args.length,\n          holdersLength = holders.length,\n          leftIndex = -1,\n          leftLength = partials.length,\n          rangeLength = nativeMax(argsLength - holdersLength, 0),\n          result = Array(leftLength + rangeLength),\n          isUncurried = !isCurried;\n\n      while (++leftIndex < leftLength) {\n        result[leftIndex] = partials[leftIndex];\n      }\n      while (++argsIndex < holdersLength) {\n        if (isUncurried || argsIndex < argsLength) {\n          result[holders[argsIndex]] = args[argsIndex];\n        }\n      }\n      while (rangeLength--) {\n        result[leftIndex++] = args[argsIndex++];\n      }\n      return result;\n    }\n\n    /**\n     * This function is like `composeArgs` except that the arguments composition\n     * is tailored for `_.partialRight`.\n     *\n     * @private\n     * @param {Array} args The provided arguments.\n     * @param {Array} partials The arguments to append to those provided.\n     * @param {Array} holders The `partials` placeholder indexes.\n     * @params {boolean} [isCurried] Specify composing for a curried function.\n     * @returns {Array} Returns the new array of composed arguments.\n     */\n    function composeArgsRight(args, partials, holders, isCurried) {\n      var argsIndex = -1,\n          argsLength = args.length,\n          holdersIndex = -1,\n          holdersLength = holders.length,\n          rightIndex = -1,\n          rightLength = partials.length,\n          rangeLength = nativeMax(argsLength - holdersLength, 0),\n          result = Array(rangeLength + rightLength),\n          isUncurried = !isCurried;\n\n      while (++argsIndex < rangeLength) {\n        result[argsIndex] = args[argsIndex];\n      }\n      var offset = argsIndex;\n      while (++rightIndex < rightLength) {\n        result[offset + rightIndex] = partials[rightIndex];\n      }\n      while (++holdersIndex < holdersLength) {\n        if (isUncurried || argsIndex < argsLength) {\n          result[offset + holders[holdersIndex]] = args[argsIndex++];\n        }\n      }\n      return result;\n    }\n\n    /**\n     * Copies the values of `source` to `array`.\n     *\n     * @private\n     * @param {Array} source The array to copy values from.\n     * @param {Array} [array=[]] The array to copy values to.\n     * @returns {Array} Returns `array`.\n     */\n    function copyArray(source, array) {\n      var index = -1,\n          length = source.length;\n\n      array || (array = Array(length));\n      while (++index < length) {\n        array[index] = source[index];\n      }\n      return array;\n    }\n\n    /**\n     * Copies properties of `source` to `object`.\n     *\n     * @private\n     * @param {Object} source The object to copy properties from.\n     * @param {Array} props The property identifiers to copy.\n     * @param {Object} [object={}] The object to copy properties to.\n     * @param {Function} [customizer] The function to customize copied values.\n     * @returns {Object} Returns `object`.\n     */\n    function copyObject(source, props, object, customizer) {\n      var isNew = !object;\n      object || (object = {});\n\n      var index = -1,\n          length = props.length;\n\n      while (++index < length) {\n        var key = props[index];\n\n        var newValue = customizer\n          ? customizer(object[key], source[key], key, object, source)\n          : undefined;\n\n        if (newValue === undefined) {\n          newValue = source[key];\n        }\n        if (isNew) {\n          baseAssignValue(object, key, newValue);\n        } else {\n          assignValue(object, key, newValue);\n        }\n      }\n      return object;\n    }\n\n    /**\n     * Copies own symbols of `source` to `object`.\n     *\n     * @private\n     * @param {Object} source The object to copy symbols from.\n     * @param {Object} [object={}] The object to copy symbols to.\n     * @returns {Object} Returns `object`.\n     */\n    function copySymbols(source, object) {\n      return copyObject(source, getSymbols(source), object);\n    }\n\n    /**\n     * Copies own and inherited symbols of `source` to `object`.\n     *\n     * @private\n     * @param {Object} source The object to copy symbols from.\n     * @param {Object} [object={}] The object to copy symbols to.\n     * @returns {Object} Returns `object`.\n     */\n    function copySymbolsIn(source, object) {\n      return copyObject(source, getSymbolsIn(source), object);\n    }\n\n    /**\n     * Creates a function like `_.groupBy`.\n     *\n     * @private\n     * @param {Function} setter The function to set accumulator values.\n     * @param {Function} [initializer] The accumulator object initializer.\n     * @returns {Function} Returns the new aggregator function.\n     */\n    function createAggregator(setter, initializer) {\n      return function(collection, iteratee) {\n        var func = isArray(collection) ? arrayAggregator : baseAggregator,\n            accumulator = initializer ? initializer() : {};\n\n        return func(collection, setter, getIteratee(iteratee, 2), accumulator);\n      };\n    }\n\n    /**\n     * Creates a function like `_.assign`.\n     *\n     * @private\n     * @param {Function} assigner The function to assign values.\n     * @returns {Function} Returns the new assigner function.\n     */\n    function createAssigner(assigner) {\n      return baseRest(function(object, sources) {\n        var index = -1,\n            length = sources.length,\n            customizer = length > 1 ? sources[length - 1] : undefined,\n            guard = length > 2 ? sources[2] : undefined;\n\n        customizer = (assigner.length > 3 && typeof customizer == 'function')\n          ? (length--, customizer)\n          : undefined;\n\n        if (guard && isIterateeCall(sources[0], sources[1], guard)) {\n          customizer = length < 3 ? undefined : customizer;\n          length = 1;\n        }\n        object = Object(object);\n        while (++index < length) {\n          var source = sources[index];\n          if (source) {\n            assigner(object, source, index, customizer);\n          }\n        }\n        return object;\n      });\n    }\n\n    /**\n     * Creates a `baseEach` or `baseEachRight` function.\n     *\n     * @private\n     * @param {Function} eachFunc The function to iterate over a collection.\n     * @param {boolean} [fromRight] Specify iterating from right to left.\n     * @returns {Function} Returns the new base function.\n     */\n    function createBaseEach(eachFunc, fromRight) {\n      return function(collection, iteratee) {\n        if (collection == null) {\n          return collection;\n        }\n        if (!isArrayLike(collection)) {\n          return eachFunc(collection, iteratee);\n        }\n        var length = collection.length,\n            index = fromRight ? length : -1,\n            iterable = Object(collection);\n\n        while ((fromRight ? index-- : ++index < length)) {\n          if (iteratee(iterable[index], index, iterable) === false) {\n            break;\n          }\n        }\n        return collection;\n      };\n    }\n\n    /**\n     * Creates a base function for methods like `_.forIn` and `_.forOwn`.\n     *\n     * @private\n     * @param {boolean} [fromRight] Specify iterating from right to left.\n     * @returns {Function} Returns the new base function.\n     */\n    function createBaseFor(fromRight) {\n      return function(object, iteratee, keysFunc) {\n        var index = -1,\n            iterable = Object(object),\n            props = keysFunc(object),\n            length = props.length;\n\n        while (length--) {\n          var key = props[fromRight ? length : ++index];\n          if (iteratee(iterable[key], key, iterable) === false) {\n            break;\n          }\n        }\n        return object;\n      };\n    }\n\n    /**\n     * Creates a function that wraps `func` to invoke it with the optional `this`\n     * binding of `thisArg`.\n     *\n     * @private\n     * @param {Function} func The function to wrap.\n     * @param {number} bitmask The bitmask flags. See `createWrap` for more details.\n     * @param {*} [thisArg] The `this` binding of `func`.\n     * @returns {Function} Returns the new wrapped function.\n     */\n    function createBind(func, bitmask, thisArg) {\n      var isBind = bitmask & WRAP_BIND_FLAG,\n          Ctor = createCtor(func);\n\n      function wrapper() {\n        var fn = (this && this !== root && this instanceof wrapper) ? Ctor : func;\n        return fn.apply(isBind ? thisArg : this, arguments);\n      }\n      return wrapper;\n    }\n\n    /**\n     * Creates a function like `_.lowerFirst`.\n     *\n     * @private\n     * @param {string} methodName The name of the `String` case method to use.\n     * @returns {Function} Returns the new case function.\n     */\n    function createCaseFirst(methodName) {\n      return function(string) {\n        string = toString(string);\n\n        var strSymbols = hasUnicode(string)\n          ? stringToArray(string)\n          : undefined;\n\n        var chr = strSymbols\n          ? strSymbols[0]\n          : string.charAt(0);\n\n        var trailing = strSymbols\n          ? castSlice(strSymbols, 1).join('')\n          : string.slice(1);\n\n        return chr[methodName]() + trailing;\n      };\n    }\n\n    /**\n     * Creates a function like `_.camelCase`.\n     *\n     * @private\n     * @param {Function} callback The function to combine each word.\n     * @returns {Function} Returns the new compounder function.\n     */\n    function createCompounder(callback) {\n      return function(string) {\n        return arrayReduce(words(deburr(string).replace(reApos, '')), callback, '');\n      };\n    }\n\n    /**\n     * Creates a function that produces an instance of `Ctor` regardless of\n     * whether it was invoked as part of a `new` expression or by `call` or `apply`.\n     *\n     * @private\n     * @param {Function} Ctor The constructor to wrap.\n     * @returns {Function} Returns the new wrapped function.\n     */\n    function createCtor(Ctor) {\n      return function() {\n        // Use a `switch` statement to work with class constructors. See\n        // http://ecma-international.org/ecma-262/7.0/#sec-ecmascript-function-objects-call-thisargument-argumentslist\n        // for more details.\n        var args = arguments;\n        switch (args.length) {\n          case 0: return new Ctor;\n          case 1: return new Ctor(args[0]);\n          case 2: return new Ctor(args[0], args[1]);\n          case 3: return new Ctor(args[0], args[1], args[2]);\n          case 4: return new Ctor(args[0], args[1], args[2], args[3]);\n          case 5: return new Ctor(args[0], args[1], args[2], args[3], args[4]);\n          case 6: return new Ctor(args[0], args[1], args[2], args[3], args[4], args[5]);\n          case 7: return new Ctor(args[0], args[1], args[2], args[3], args[4], args[5], args[6]);\n        }\n        var thisBinding = baseCreate(Ctor.prototype),\n            result = Ctor.apply(thisBinding, args);\n\n        // Mimic the constructor's `return` behavior.\n        // See https://es5.github.io/#x13.2.2 for more details.\n        return isObject(result) ? result : thisBinding;\n      };\n    }\n\n    /**\n     * Creates a function that wraps `func` to enable currying.\n     *\n     * @private\n     * @param {Function} func The function to wrap.\n     * @param {number} bitmask The bitmask flags. See `createWrap` for more details.\n     * @param {number} arity The arity of `func`.\n     * @returns {Function} Returns the new wrapped function.\n     */\n    function createCurry(func, bitmask, arity) {\n      var Ctor = createCtor(func);\n\n      function wrapper() {\n        var length = arguments.length,\n            args = Array(length),\n            index = length,\n            placeholder = getHolder(wrapper);\n\n        while (index--) {\n          args[index] = arguments[index];\n        }\n        var holders = (length < 3 && args[0] !== placeholder && args[length - 1] !== placeholder)\n          ? []\n          : replaceHolders(args, placeholder);\n\n        length -= holders.length;\n        if (length < arity) {\n          return createRecurry(\n            func, bitmask, createHybrid, wrapper.placeholder, undefined,\n            args, holders, undefined, undefined, arity - length);\n        }\n        var fn = (this && this !== root && this instanceof wrapper) ? Ctor : func;\n        return apply(fn, this, args);\n      }\n      return wrapper;\n    }\n\n    /**\n     * Creates a `_.find` or `_.findLast` function.\n     *\n     * @private\n     * @param {Function} findIndexFunc The function to find the collection index.\n     * @returns {Function} Returns the new find function.\n     */\n    function createFind(findIndexFunc) {\n      return function(collection, predicate, fromIndex) {\n        var iterable = Object(collection);\n        if (!isArrayLike(collection)) {\n          var iteratee = getIteratee(predicate, 3);\n          collection = keys(collection);\n          predicate = function(key) { return iteratee(iterable[key], key, iterable); };\n        }\n        var index = findIndexFunc(collection, predicate, fromIndex);\n        return index > -1 ? iterable[iteratee ? collection[index] : index] : undefined;\n      };\n    }\n\n    /**\n     * Creates a `_.flow` or `_.flowRight` function.\n     *\n     * @private\n     * @param {boolean} [fromRight] Specify iterating from right to left.\n     * @returns {Function} Returns the new flow function.\n     */\n    function createFlow(fromRight) {\n      return flatRest(function(funcs) {\n        var length = funcs.length,\n            index = length,\n            prereq = LodashWrapper.prototype.thru;\n\n        if (fromRight) {\n          funcs.reverse();\n        }\n        while (index--) {\n          var func = funcs[index];\n          if (typeof func != 'function') {\n            throw new TypeError(FUNC_ERROR_TEXT);\n          }\n          if (prereq && !wrapper && getFuncName(func) == 'wrapper') {\n            var wrapper = new LodashWrapper([], true);\n          }\n        }\n        index = wrapper ? index : length;\n        while (++index < length) {\n          func = funcs[index];\n\n          var funcName = getFuncName(func),\n              data = funcName == 'wrapper' ? getData(func) : undefined;\n\n          if (data && isLaziable(data[0]) &&\n                data[1] == (WRAP_ARY_FLAG | WRAP_CURRY_FLAG | WRAP_PARTIAL_FLAG | WRAP_REARG_FLAG) &&\n                !data[4].length && data[9] == 1\n              ) {\n            wrapper = wrapper[getFuncName(data[0])].apply(wrapper, data[3]);\n          } else {\n            wrapper = (func.length == 1 && isLaziable(func))\n              ? wrapper[funcName]()\n              : wrapper.thru(func);\n          }\n        }\n        return function() {\n          var args = arguments,\n              value = args[0];\n\n          if (wrapper && args.length == 1 && isArray(value)) {\n            return wrapper.plant(value).value();\n          }\n          var index = 0,\n              result = length ? funcs[index].apply(this, args) : value;\n\n          while (++index < length) {\n            result = funcs[index].call(this, result);\n          }\n          return result;\n        };\n      });\n    }\n\n    /**\n     * Creates a function that wraps `func` to invoke it with optional `this`\n     * binding of `thisArg`, partial application, and currying.\n     *\n     * @private\n     * @param {Function|string} func The function or method name to wrap.\n     * @param {number} bitmask The bitmask flags. See `createWrap` for more details.\n     * @param {*} [thisArg] The `this` binding of `func`.\n     * @param {Array} [partials] The arguments to prepend to those provided to\n     *  the new function.\n     * @param {Array} [holders] The `partials` placeholder indexes.\n     * @param {Array} [partialsRight] The arguments to append to those provided\n     *  to the new function.\n     * @param {Array} [holdersRight] The `partialsRight` placeholder indexes.\n     * @param {Array} [argPos] The argument positions of the new function.\n     * @param {number} [ary] The arity cap of `func`.\n     * @param {number} [arity] The arity of `func`.\n     * @returns {Function} Returns the new wrapped function.\n     */\n    function createHybrid(func, bitmask, thisArg, partials, holders, partialsRight, holdersRight, argPos, ary, arity) {\n      var isAry = bitmask & WRAP_ARY_FLAG,\n          isBind = bitmask & WRAP_BIND_FLAG,\n          isBindKey = bitmask & WRAP_BIND_KEY_FLAG,\n          isCurried = bitmask & (WRAP_CURRY_FLAG | WRAP_CURRY_RIGHT_FLAG),\n          isFlip = bitmask & WRAP_FLIP_FLAG,\n          Ctor = isBindKey ? undefined : createCtor(func);\n\n      function wrapper() {\n        var length = arguments.length,\n            args = Array(length),\n            index = length;\n\n        while (index--) {\n          args[index] = arguments[index];\n        }\n        if (isCurried) {\n          var placeholder = getHolder(wrapper),\n              holdersCount = countHolders(args, placeholder);\n        }\n        if (partials) {\n          args = composeArgs(args, partials, holders, isCurried);\n        }\n        if (partialsRight) {\n          args = composeArgsRight(args, partialsRight, holdersRight, isCurried);\n        }\n        length -= holdersCount;\n        if (isCurried && length < arity) {\n          var newHolders = replaceHolders(args, placeholder);\n          return createRecurry(\n            func, bitmask, createHybrid, wrapper.placeholder, thisArg,\n            args, newHolders, argPos, ary, arity - length\n          );\n        }\n        var thisBinding = isBind ? thisArg : this,\n            fn = isBindKey ? thisBinding[func] : func;\n\n        length = args.length;\n        if (argPos) {\n          args = reorder(args, argPos);\n        } else if (isFlip && length > 1) {\n          args.reverse();\n        }\n        if (isAry && ary < length) {\n          args.length = ary;\n        }\n        if (this && this !== root && this instanceof wrapper) {\n          fn = Ctor || createCtor(fn);\n        }\n        return fn.apply(thisBinding, args);\n      }\n      return wrapper;\n    }\n\n    /**\n     * Creates a function like `_.invertBy`.\n     *\n     * @private\n     * @param {Function} setter The function to set accumulator values.\n     * @param {Function} toIteratee The function to resolve iteratees.\n     * @returns {Function} Returns the new inverter function.\n     */\n    function createInverter(setter, toIteratee) {\n      return function(object, iteratee) {\n        return baseInverter(object, setter, toIteratee(iteratee), {});\n      };\n    }\n\n    /**\n     * Creates a function that performs a mathematical operation on two values.\n     *\n     * @private\n     * @param {Function} operator The function to perform the operation.\n     * @param {number} [defaultValue] The value used for `undefined` arguments.\n     * @returns {Function} Returns the new mathematical operation function.\n     */\n    function createMathOperation(operator, defaultValue) {\n      return function(value, other) {\n        var result;\n        if (value === undefined && other === undefined) {\n          return defaultValue;\n        }\n        if (value !== undefined) {\n          result = value;\n        }\n        if (other !== undefined) {\n          if (result === undefined) {\n            return other;\n          }\n          if (typeof value == 'string' || typeof other == 'string') {\n            value = baseToString(value);\n            other = baseToString(other);\n          } else {\n            value = baseToNumber(value);\n            other = baseToNumber(other);\n          }\n          result = operator(value, other);\n        }\n        return result;\n      };\n    }\n\n    /**\n     * Creates a function like `_.over`.\n     *\n     * @private\n     * @param {Function} arrayFunc The function to iterate over iteratees.\n     * @returns {Function} Returns the new over function.\n     */\n    function createOver(arrayFunc) {\n      return flatRest(function(iteratees) {\n        iteratees = arrayMap(iteratees, baseUnary(getIteratee()));\n        return baseRest(function(args) {\n          var thisArg = this;\n          return arrayFunc(iteratees, function(iteratee) {\n            return apply(iteratee, thisArg, args);\n          });\n        });\n      });\n    }\n\n    /**\n     * Creates the padding for `string` based on `length`. The `chars` string\n     * is truncated if the number of characters exceeds `length`.\n     *\n     * @private\n     * @param {number} length The padding length.\n     * @param {string} [chars=' '] The string used as padding.\n     * @returns {string} Returns the padding for `string`.\n     */\n    function createPadding(length, chars) {\n      chars = chars === undefined ? ' ' : baseToString(chars);\n\n      var charsLength = chars.length;\n      if (charsLength < 2) {\n        return charsLength ? baseRepeat(chars, length) : chars;\n      }\n      var result = baseRepeat(chars, nativeCeil(length / stringSize(chars)));\n      return hasUnicode(chars)\n        ? castSlice(stringToArray(result), 0, length).join('')\n        : result.slice(0, length);\n    }\n\n    /**\n     * Creates a function that wraps `func` to invoke it with the `this` binding\n     * of `thisArg` and `partials` prepended to the arguments it receives.\n     *\n     * @private\n     * @param {Function} func The function to wrap.\n     * @param {number} bitmask The bitmask flags. See `createWrap` for more details.\n     * @param {*} thisArg The `this` binding of `func`.\n     * @param {Array} partials The arguments to prepend to those provided to\n     *  the new function.\n     * @returns {Function} Returns the new wrapped function.\n     */\n    function createPartial(func, bitmask, thisArg, partials) {\n      var isBind = bitmask & WRAP_BIND_FLAG,\n          Ctor = createCtor(func);\n\n      function wrapper() {\n        var argsIndex = -1,\n            argsLength = arguments.length,\n            leftIndex = -1,\n            leftLength = partials.length,\n            args = Array(leftLength + argsLength),\n            fn = (this && this !== root && this instanceof wrapper) ? Ctor : func;\n\n        while (++leftIndex < leftLength) {\n          args[leftIndex] = partials[leftIndex];\n        }\n        while (argsLength--) {\n          args[leftIndex++] = arguments[++argsIndex];\n        }\n        return apply(fn, isBind ? thisArg : this, args);\n      }\n      return wrapper;\n    }\n\n    /**\n     * Creates a `_.range` or `_.rangeRight` function.\n     *\n     * @private\n     * @param {boolean} [fromRight] Specify iterating from right to left.\n     * @returns {Function} Returns the new range function.\n     */\n    function createRange(fromRight) {\n      return function(start, end, step) {\n        if (step && typeof step != 'number' && isIterateeCall(start, end, step)) {\n          end = step = undefined;\n        }\n        // Ensure the sign of `-0` is preserved.\n        start = toFinite(start);\n        if (end === undefined) {\n          end = start;\n          start = 0;\n        } else {\n          end = toFinite(end);\n        }\n        step = step === undefined ? (start < end ? 1 : -1) : toFinite(step);\n        return baseRange(start, end, step, fromRight);\n      };\n    }\n\n    /**\n     * Creates a function that performs a relational operation on two values.\n     *\n     * @private\n     * @param {Function} operator The function to perform the operation.\n     * @returns {Function} Returns the new relational operation function.\n     */\n    function createRelationalOperation(operator) {\n      return function(value, other) {\n        if (!(typeof value == 'string' && typeof other == 'string')) {\n          value = toNumber(value);\n          other = toNumber(other);\n        }\n        return operator(value, other);\n      };\n    }\n\n    /**\n     * Creates a function that wraps `func` to continue currying.\n     *\n     * @private\n     * @param {Function} func The function to wrap.\n     * @param {number} bitmask The bitmask flags. See `createWrap` for more details.\n     * @param {Function} wrapFunc The function to create the `func` wrapper.\n     * @param {*} placeholder The placeholder value.\n     * @param {*} [thisArg] The `this` binding of `func`.\n     * @param {Array} [partials] The arguments to prepend to those provided to\n     *  the new function.\n     * @param {Array} [holders] The `partials` placeholder indexes.\n     * @param {Array} [argPos] The argument positions of the new function.\n     * @param {number} [ary] The arity cap of `func`.\n     * @param {number} [arity] The arity of `func`.\n     * @returns {Function} Returns the new wrapped function.\n     */\n    function createRecurry(func, bitmask, wrapFunc, placeholder, thisArg, partials, holders, argPos, ary, arity) {\n      var isCurry = bitmask & WRAP_CURRY_FLAG,\n          newHolders = isCurry ? holders : undefined,\n          newHoldersRight = isCurry ? undefined : holders,\n          newPartials = isCurry ? partials : undefined,\n          newPartialsRight = isCurry ? undefined : partials;\n\n      bitmask |= (isCurry ? WRAP_PARTIAL_FLAG : WRAP_PARTIAL_RIGHT_FLAG);\n      bitmask &= ~(isCurry ? WRAP_PARTIAL_RIGHT_FLAG : WRAP_PARTIAL_FLAG);\n\n      if (!(bitmask & WRAP_CURRY_BOUND_FLAG)) {\n        bitmask &= ~(WRAP_BIND_FLAG | WRAP_BIND_KEY_FLAG);\n      }\n      var newData = [\n        func, bitmask, thisArg, newPartials, newHolders, newPartialsRight,\n        newHoldersRight, argPos, ary, arity\n      ];\n\n      var result = wrapFunc.apply(undefined, newData);\n      if (isLaziable(func)) {\n        setData(result, newData);\n      }\n      result.placeholder = placeholder;\n      return setWrapToString(result, func, bitmask);\n    }\n\n    /**\n     * Creates a function like `_.round`.\n     *\n     * @private\n     * @param {string} methodName The name of the `Math` method to use when rounding.\n     * @returns {Function} Returns the new round function.\n     */\n    function createRound(methodName) {\n      var func = Math[methodName];\n      return function(number, precision) {\n        number = toNumber(number);\n        precision = precision == null ? 0 : nativeMin(toInteger(precision), 292);\n        if (precision && nativeIsFinite(number)) {\n          // Shift with exponential notation to avoid floating-point issues.\n          // See [MDN](https://mdn.io/round#Examples) for more details.\n          var pair = (toString(number) + 'e').split('e'),\n              value = func(pair[0] + 'e' + (+pair[1] + precision));\n\n          pair = (toString(value) + 'e').split('e');\n          return +(pair[0] + 'e' + (+pair[1] - precision));\n        }\n        return func(number);\n      };\n    }\n\n    /**\n     * Creates a set object of `values`.\n     *\n     * @private\n     * @param {Array} values The values to add to the set.\n     * @returns {Object} Returns the new set.\n     */\n    var createSet = !(Set && (1 / setToArray(new Set([,-0]))[1]) == INFINITY) ? noop : function(values) {\n      return new Set(values);\n    };\n\n    /**\n     * Creates a `_.toPairs` or `_.toPairsIn` function.\n     *\n     * @private\n     * @param {Function} keysFunc The function to get the keys of a given object.\n     * @returns {Function} Returns the new pairs function.\n     */\n    function createToPairs(keysFunc) {\n      return function(object) {\n        var tag = getTag(object);\n        if (tag == mapTag) {\n          return mapToArray(object);\n        }\n        if (tag == setTag) {\n          return setToPairs(object);\n        }\n        return baseToPairs(object, keysFunc(object));\n      };\n    }\n\n    /**\n     * Creates a function that either curries or invokes `func` with optional\n     * `this` binding and partially applied arguments.\n     *\n     * @private\n     * @param {Function|string} func The function or method name to wrap.\n     * @param {number} bitmask The bitmask flags.\n     *    1 - `_.bind`\n     *    2 - `_.bindKey`\n     *    4 - `_.curry` or `_.curryRight` of a bound function\n     *    8 - `_.curry`\n     *   16 - `_.curryRight`\n     *   32 - `_.partial`\n     *   64 - `_.partialRight`\n     *  128 - `_.rearg`\n     *  256 - `_.ary`\n     *  512 - `_.flip`\n     * @param {*} [thisArg] The `this` binding of `func`.\n     * @param {Array} [partials] The arguments to be partially applied.\n     * @param {Array} [holders] The `partials` placeholder indexes.\n     * @param {Array} [argPos] The argument positions of the new function.\n     * @param {number} [ary] The arity cap of `func`.\n     * @param {number} [arity] The arity of `func`.\n     * @returns {Function} Returns the new wrapped function.\n     */\n    function createWrap(func, bitmask, thisArg, partials, holders, argPos, ary, arity) {\n      var isBindKey = bitmask & WRAP_BIND_KEY_FLAG;\n      if (!isBindKey && typeof func != 'function') {\n        throw new TypeError(FUNC_ERROR_TEXT);\n      }\n      var length = partials ? partials.length : 0;\n      if (!length) {\n        bitmask &= ~(WRAP_PARTIAL_FLAG | WRAP_PARTIAL_RIGHT_FLAG);\n        partials = holders = undefined;\n      }\n      ary = ary === undefined ? ary : nativeMax(toInteger(ary), 0);\n      arity = arity === undefined ? arity : toInteger(arity);\n      length -= holders ? holders.length : 0;\n\n      if (bitmask & WRAP_PARTIAL_RIGHT_FLAG) {\n        var partialsRight = partials,\n            holdersRight = holders;\n\n        partials = holders = undefined;\n      }\n      var data = isBindKey ? undefined : getData(func);\n\n      var newData = [\n        func, bitmask, thisArg, partials, holders, partialsRight, holdersRight,\n        argPos, ary, arity\n      ];\n\n      if (data) {\n        mergeData(newData, data);\n      }\n      func = newData[0];\n      bitmask = newData[1];\n      thisArg = newData[2];\n      partials = newData[3];\n      holders = newData[4];\n      arity = newData[9] = newData[9] === undefined\n        ? (isBindKey ? 0 : func.length)\n        : nativeMax(newData[9] - length, 0);\n\n      if (!arity && bitmask & (WRAP_CURRY_FLAG | WRAP_CURRY_RIGHT_FLAG)) {\n        bitmask &= ~(WRAP_CURRY_FLAG | WRAP_CURRY_RIGHT_FLAG);\n      }\n      if (!bitmask || bitmask == WRAP_BIND_FLAG) {\n        var result = createBind(func, bitmask, thisArg);\n      } else if (bitmask == WRAP_CURRY_FLAG || bitmask == WRAP_CURRY_RIGHT_FLAG) {\n        result = createCurry(func, bitmask, arity);\n      } else if ((bitmask == WRAP_PARTIAL_FLAG || bitmask == (WRAP_BIND_FLAG | WRAP_PARTIAL_FLAG)) && !holders.length) {\n        result = createPartial(func, bitmask, thisArg, partials);\n      } else {\n        result = createHybrid.apply(undefined, newData);\n      }\n      var setter = data ? baseSetData : setData;\n      return setWrapToString(setter(result, newData), func, bitmask);\n    }\n\n    /**\n     * Used by `_.defaults` to customize its `_.assignIn` use to assign properties\n     * of source objects to the destination object for all destination properties\n     * that resolve to `undefined`.\n     *\n     * @private\n     * @param {*} objValue The destination value.\n     * @param {*} srcValue The source value.\n     * @param {string} key The key of the property to assign.\n     * @param {Object} object The parent object of `objValue`.\n     * @returns {*} Returns the value to assign.\n     */\n    function customDefaultsAssignIn(objValue, srcValue, key, object) {\n      if (objValue === undefined ||\n          (eq(objValue, objectProto[key]) && !hasOwnProperty.call(object, key))) {\n        return srcValue;\n      }\n      return objValue;\n    }\n\n    /**\n     * Used by `_.defaultsDeep` to customize its `_.merge` use to merge source\n     * objects into destination objects that are passed thru.\n     *\n     * @private\n     * @param {*} objValue The destination value.\n     * @param {*} srcValue The source value.\n     * @param {string} key The key of the property to merge.\n     * @param {Object} object The parent object of `objValue`.\n     * @param {Object} source The parent object of `srcValue`.\n     * @param {Object} [stack] Tracks traversed source values and their merged\n     *  counterparts.\n     * @returns {*} Returns the value to assign.\n     */\n    function customDefaultsMerge(objValue, srcValue, key, object, source, stack) {\n      if (isObject(objValue) && isObject(srcValue)) {\n        // Recursively merge objects and arrays (susceptible to call stack limits).\n        stack.set(srcValue, objValue);\n        baseMerge(objValue, srcValue, undefined, customDefaultsMerge, stack);\n        stack['delete'](srcValue);\n      }\n      return objValue;\n    }\n\n    /**\n     * Used by `_.omit` to customize its `_.cloneDeep` use to only clone plain\n     * objects.\n     *\n     * @private\n     * @param {*} value The value to inspect.\n     * @param {string} key The key of the property to inspect.\n     * @returns {*} Returns the uncloned value or `undefined` to defer cloning to `_.cloneDeep`.\n     */\n    function customOmitClone(value) {\n      return isPlainObject(value) ? undefined : value;\n    }\n\n    /**\n     * A specialized version of `baseIsEqualDeep` for arrays with support for\n     * partial deep comparisons.\n     *\n     * @private\n     * @param {Array} array The array to compare.\n     * @param {Array} other The other array to compare.\n     * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.\n     * @param {Function} customizer The function to customize comparisons.\n     * @param {Function} equalFunc The function to determine equivalents of values.\n     * @param {Object} stack Tracks traversed `array` and `other` objects.\n     * @returns {boolean} Returns `true` if the arrays are equivalent, else `false`.\n     */\n    function equalArrays(array, other, bitmask, customizer, equalFunc, stack) {\n      var isPartial = bitmask & COMPARE_PARTIAL_FLAG,\n          arrLength = array.length,\n          othLength = other.length;\n\n      if (arrLength != othLength && !(isPartial && othLength > arrLength)) {\n        return false;\n      }\n      // Check that cyclic values are equal.\n      var arrStacked = stack.get(array);\n      var othStacked = stack.get(other);\n      if (arrStacked && othStacked) {\n        return arrStacked == other && othStacked == array;\n      }\n      var index = -1,\n          result = true,\n          seen = (bitmask & COMPARE_UNORDERED_FLAG) ? new SetCache : undefined;\n\n      stack.set(array, other);\n      stack.set(other, array);\n\n      // Ignore non-index properties.\n      while (++index < arrLength) {\n        var arrValue = array[index],\n            othValue = other[index];\n\n        if (customizer) {\n          var compared = isPartial\n            ? customizer(othValue, arrValue, index, other, array, stack)\n            : customizer(arrValue, othValue, index, array, other, stack);\n        }\n        if (compared !== undefined) {\n          if (compared) {\n            continue;\n          }\n          result = false;\n          break;\n        }\n        // Recursively compare arrays (susceptible to call stack limits).\n        if (seen) {\n          if (!arraySome(other, function(othValue, othIndex) {\n                if (!cacheHas(seen, othIndex) &&\n                    (arrValue === othValue || equalFunc(arrValue, othValue, bitmask, customizer, stack))) {\n                  return seen.push(othIndex);\n                }\n              })) {\n            result = false;\n            break;\n          }\n        } else if (!(\n              arrValue === othValue ||\n                equalFunc(arrValue, othValue, bitmask, customizer, stack)\n            )) {\n          result = false;\n          break;\n        }\n      }\n      stack['delete'](array);\n      stack['delete'](other);\n      return result;\n    }\n\n    /**\n     * A specialized version of `baseIsEqualDeep` for comparing objects of\n     * the same `toStringTag`.\n     *\n     * **Note:** This function only supports comparing values with tags of\n     * `Boolean`, `Date`, `Error`, `Number`, `RegExp`, or `String`.\n     *\n     * @private\n     * @param {Object} object The object to compare.\n     * @param {Object} other The other object to compare.\n     * @param {string} tag The `toStringTag` of the objects to compare.\n     * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.\n     * @param {Function} customizer The function to customize comparisons.\n     * @param {Function} equalFunc The function to determine equivalents of values.\n     * @param {Object} stack Tracks traversed `object` and `other` objects.\n     * @returns {boolean} Returns `true` if the objects are equivalent, else `false`.\n     */\n    function equalByTag(object, other, tag, bitmask, customizer, equalFunc, stack) {\n      switch (tag) {\n        case dataViewTag:\n          if ((object.byteLength != other.byteLength) ||\n              (object.byteOffset != other.byteOffset)) {\n            return false;\n          }\n          object = object.buffer;\n          other = other.buffer;\n\n        case arrayBufferTag:\n          if ((object.byteLength != other.byteLength) ||\n              !equalFunc(new Uint8Array(object), new Uint8Array(other))) {\n            return false;\n          }\n          return true;\n\n        case boolTag:\n        case dateTag:\n        case numberTag:\n          // Coerce booleans to `1` or `0` and dates to milliseconds.\n          // Invalid dates are coerced to `NaN`.\n          return eq(+object, +other);\n\n        case errorTag:\n          return object.name == other.name && object.message == other.message;\n\n        case regexpTag:\n        case stringTag:\n          // Coerce regexes to strings and treat strings, primitives and objects,\n          // as equal. See http://www.ecma-international.org/ecma-262/7.0/#sec-regexp.prototype.tostring\n          // for more details.\n          return object == (other + '');\n\n        case mapTag:\n          var convert = mapToArray;\n\n        case setTag:\n          var isPartial = bitmask & COMPARE_PARTIAL_FLAG;\n          convert || (convert = setToArray);\n\n          if (object.size != other.size && !isPartial) {\n            return false;\n          }\n          // Assume cyclic values are equal.\n          var stacked = stack.get(object);\n          if (stacked) {\n            return stacked == other;\n          }\n          bitmask |= COMPARE_UNORDERED_FLAG;\n\n          // Recursively compare objects (susceptible to call stack limits).\n          stack.set(object, other);\n          var result = equalArrays(convert(object), convert(other), bitmask, customizer, equalFunc, stack);\n          stack['delete'](object);\n          return result;\n\n        case symbolTag:\n          if (symbolValueOf) {\n            return symbolValueOf.call(object) == symbolValueOf.call(other);\n          }\n      }\n      return false;\n    }\n\n    /**\n     * A specialized version of `baseIsEqualDeep` for objects with support for\n     * partial deep comparisons.\n     *\n     * @private\n     * @param {Object} object The object to compare.\n     * @param {Object} other The other object to compare.\n     * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.\n     * @param {Function} customizer The function to customize comparisons.\n     * @param {Function} equalFunc The function to determine equivalents of values.\n     * @param {Object} stack Tracks traversed `object` and `other` objects.\n     * @returns {boolean} Returns `true` if the objects are equivalent, else `false`.\n     */\n    function equalObjects(object, other, bitmask, customizer, equalFunc, stack) {\n      var isPartial = bitmask & COMPARE_PARTIAL_FLAG,\n          objProps = getAllKeys(object),\n          objLength = objProps.length,\n          othProps = getAllKeys(other),\n          othLength = othProps.length;\n\n      if (objLength != othLength && !isPartial) {\n        return false;\n      }\n      var index = objLength;\n      while (index--) {\n        var key = objProps[index];\n        if (!(isPartial ? key in other : hasOwnProperty.call(other, key))) {\n          return false;\n        }\n      }\n      // Check that cyclic values are equal.\n      var objStacked = stack.get(object);\n      var othStacked = stack.get(other);\n      if (objStacked && othStacked) {\n        return objStacked == other && othStacked == object;\n      }\n      var result = true;\n      stack.set(object, other);\n      stack.set(other, object);\n\n      var skipCtor = isPartial;\n      while (++index < objLength) {\n        key = objProps[index];\n        var objValue = object[key],\n            othValue = other[key];\n\n        if (customizer) {\n          var compared = isPartial\n            ? customizer(othValue, objValue, key, other, object, stack)\n            : customizer(objValue, othValue, key, object, other, stack);\n        }\n        // Recursively compare objects (susceptible to call stack limits).\n        if (!(compared === undefined\n              ? (objValue === othValue || equalFunc(objValue, othValue, bitmask, customizer, stack))\n              : compared\n            )) {\n          result = false;\n          break;\n        }\n        skipCtor || (skipCtor = key == 'constructor');\n      }\n      if (result && !skipCtor) {\n        var objCtor = object.constructor,\n            othCtor = other.constructor;\n\n        // Non `Object` object instances with different constructors are not equal.\n        if (objCtor != othCtor &&\n            ('constructor' in object && 'constructor' in other) &&\n            !(typeof objCtor == 'function' && objCtor instanceof objCtor &&\n              typeof othCtor == 'function' && othCtor instanceof othCtor)) {\n          result = false;\n        }\n      }\n      stack['delete'](object);\n      stack['delete'](other);\n      return result;\n    }\n\n    /**\n     * A specialized version of `baseRest` which flattens the rest array.\n     *\n     * @private\n     * @param {Function} func The function to apply a rest parameter to.\n     * @returns {Function} Returns the new function.\n     */\n    function flatRest(func) {\n      return setToString(overRest(func, undefined, flatten), func + '');\n    }\n\n    /**\n     * Creates an array of own enumerable property names and symbols of `object`.\n     *\n     * @private\n     * @param {Object} object The object to query.\n     * @returns {Array} Returns the array of property names and symbols.\n     */\n    function getAllKeys(object) {\n      return baseGetAllKeys(object, keys, getSymbols);\n    }\n\n    /**\n     * Creates an array of own and inherited enumerable property names and\n     * symbols of `object`.\n     *\n     * @private\n     * @param {Object} object The object to query.\n     * @returns {Array} Returns the array of property names and symbols.\n     */\n    function getAllKeysIn(object) {\n      return baseGetAllKeys(object, keysIn, getSymbolsIn);\n    }\n\n    /**\n     * Gets metadata for `func`.\n     *\n     * @private\n     * @param {Function} func The function to query.\n     * @returns {*} Returns the metadata for `func`.\n     */\n    var getData = !metaMap ? noop : function(func) {\n      return metaMap.get(func);\n    };\n\n    /**\n     * Gets the name of `func`.\n     *\n     * @private\n     * @param {Function} func The function to query.\n     * @returns {string} Returns the function name.\n     */\n    function getFuncName(func) {\n      var result = (func.name + ''),\n          array = realNames[result],\n          length = hasOwnProperty.call(realNames, result) ? array.length : 0;\n\n      while (length--) {\n        var data = array[length],\n            otherFunc = data.func;\n        if (otherFunc == null || otherFunc == func) {\n          return data.name;\n        }\n      }\n      return result;\n    }\n\n    /**\n     * Gets the argument placeholder value for `func`.\n     *\n     * @private\n     * @param {Function} func The function to inspect.\n     * @returns {*} Returns the placeholder value.\n     */\n    function getHolder(func) {\n      var object = hasOwnProperty.call(lodash, 'placeholder') ? lodash : func;\n      return object.placeholder;\n    }\n\n    /**\n     * Gets the appropriate \"iteratee\" function. If `_.iteratee` is customized,\n     * this function returns the custom method, otherwise it returns `baseIteratee`.\n     * If arguments are provided, the chosen function is invoked with them and\n     * its result is returned.\n     *\n     * @private\n     * @param {*} [value] The value to convert to an iteratee.\n     * @param {number} [arity] The arity of the created iteratee.\n     * @returns {Function} Returns the chosen function or its result.\n     */\n    function getIteratee() {\n      var result = lodash.iteratee || iteratee;\n      result = result === iteratee ? baseIteratee : result;\n      return arguments.length ? result(arguments[0], arguments[1]) : result;\n    }\n\n    /**\n     * Gets the data for `map`.\n     *\n     * @private\n     * @param {Object} map The map to query.\n     * @param {string} key The reference key.\n     * @returns {*} Returns the map data.\n     */\n    function getMapData(map, key) {\n      var data = map.__data__;\n      return isKeyable(key)\n        ? data[typeof key == 'string' ? 'string' : 'hash']\n        : data.map;\n    }\n\n    /**\n     * Gets the property names, values, and compare flags of `object`.\n     *\n     * @private\n     * @param {Object} object The object to query.\n     * @returns {Array} Returns the match data of `object`.\n     */\n    function getMatchData(object) {\n      var result = keys(object),\n          length = result.length;\n\n      while (length--) {\n        var key = result[length],\n            value = object[key];\n\n        result[length] = [key, value, isStrictComparable(value)];\n      }\n      return result;\n    }\n\n    /**\n     * Gets the native function at `key` of `object`.\n     *\n     * @private\n     * @param {Object} object The object to query.\n     * @param {string} key The key of the method to get.\n     * @returns {*} Returns the function if it's native, else `undefined`.\n     */\n    function getNative(object, key) {\n      var value = getValue(object, key);\n      return baseIsNative(value) ? value : undefined;\n    }\n\n    /**\n     * A specialized version of `baseGetTag` which ignores `Symbol.toStringTag` values.\n     *\n     * @private\n     * @param {*} value The value to query.\n     * @returns {string} Returns the raw `toStringTag`.\n     */\n    function getRawTag(value) {\n      var isOwn = hasOwnProperty.call(value, symToStringTag),\n          tag = value[symToStringTag];\n\n      try {\n        value[symToStringTag] = undefined;\n        var unmasked = true;\n      } catch (e) {}\n\n      var result = nativeObjectToString.call(value);\n      if (unmasked) {\n        if (isOwn) {\n          value[symToStringTag] = tag;\n        } else {\n          delete value[symToStringTag];\n        }\n      }\n      return result;\n    }\n\n    /**\n     * Creates an array of the own enumerable symbols of `object`.\n     *\n     * @private\n     * @param {Object} object The object to query.\n     * @returns {Array} Returns the array of symbols.\n     */\n    var getSymbols = !nativeGetSymbols ? stubArray : function(object) {\n      if (object == null) {\n        return [];\n      }\n      object = Object(object);\n      return arrayFilter(nativeGetSymbols(object), function(symbol) {\n        return propertyIsEnumerable.call(object, symbol);\n      });\n    };\n\n    /**\n     * Creates an array of the own and inherited enumerable symbols of `object`.\n     *\n     * @private\n     * @param {Object} object The object to query.\n     * @returns {Array} Returns the array of symbols.\n     */\n    var getSymbolsIn = !nativeGetSymbols ? stubArray : function(object) {\n      var result = [];\n      while (object) {\n        arrayPush(result, getSymbols(object));\n        object = getPrototype(object);\n      }\n      return result;\n    };\n\n    /**\n     * Gets the `toStringTag` of `value`.\n     *\n     * @private\n     * @param {*} value The value to query.\n     * @returns {string} Returns the `toStringTag`.\n     */\n    var getTag = baseGetTag;\n\n    // Fallback for data views, maps, sets, and weak maps in IE 11 and promises in Node.js < 6.\n    if ((DataView && getTag(new DataView(new ArrayBuffer(1))) != dataViewTag) ||\n        (Map && getTag(new Map) != mapTag) ||\n        (Promise && getTag(Promise.resolve()) != promiseTag) ||\n        (Set && getTag(new Set) != setTag) ||\n        (WeakMap && getTag(new WeakMap) != weakMapTag)) {\n      getTag = function(value) {\n        var result = baseGetTag(value),\n            Ctor = result == objectTag ? value.constructor : undefined,\n            ctorString = Ctor ? toSource(Ctor) : '';\n\n        if (ctorString) {\n          switch (ctorString) {\n            case dataViewCtorString: return dataViewTag;\n            case mapCtorString: return mapTag;\n            case promiseCtorString: return promiseTag;\n            case setCtorString: return setTag;\n            case weakMapCtorString: return weakMapTag;\n          }\n        }\n        return result;\n      };\n    }\n\n    /**\n     * Gets the view, applying any `transforms` to the `start` and `end` positions.\n     *\n     * @private\n     * @param {number} start The start of the view.\n     * @param {number} end The end of the view.\n     * @param {Array} transforms The transformations to apply to the view.\n     * @returns {Object} Returns an object containing the `start` and `end`\n     *  positions of the view.\n     */\n    function getView(start, end, transforms) {\n      var index = -1,\n          length = transforms.length;\n\n      while (++index < length) {\n        var data = transforms[index],\n            size = data.size;\n\n        switch (data.type) {\n          case 'drop':      start += size; break;\n          case 'dropRight': end -= size; break;\n          case 'take':      end = nativeMin(end, start + size); break;\n          case 'takeRight': start = nativeMax(start, end - size); break;\n        }\n      }\n      return { 'start': start, 'end': end };\n    }\n\n    /**\n     * Extracts wrapper details from the `source` body comment.\n     *\n     * @private\n     * @param {string} source The source to inspect.\n     * @returns {Array} Returns the wrapper details.\n     */\n    function getWrapDetails(source) {\n      var match = source.match(reWrapDetails);\n      return match ? match[1].split(reSplitDetails) : [];\n    }\n\n    /**\n     * Checks if `path` exists on `object`.\n     *\n     * @private\n     * @param {Object} object The object to query.\n     * @param {Array|string} path The path to check.\n     * @param {Function} hasFunc The function to check properties.\n     * @returns {boolean} Returns `true` if `path` exists, else `false`.\n     */\n    function hasPath(object, path, hasFunc) {\n      path = castPath(path, object);\n\n      var index = -1,\n          length = path.length,\n          result = false;\n\n      while (++index < length) {\n        var key = toKey(path[index]);\n        if (!(result = object != null && hasFunc(object, key))) {\n          break;\n        }\n        object = object[key];\n      }\n      if (result || ++index != length) {\n        return result;\n      }\n      length = object == null ? 0 : object.length;\n      return !!length && isLength(length) && isIndex(key, length) &&\n        (isArray(object) || isArguments(object));\n    }\n\n    /**\n     * Initializes an array clone.\n     *\n     * @private\n     * @param {Array} array The array to clone.\n     * @returns {Array} Returns the initialized clone.\n     */\n    function initCloneArray(array) {\n      var length = array.length,\n          result = new array.constructor(length);\n\n      // Add properties assigned by `RegExp#exec`.\n      if (length && typeof array[0] == 'string' && hasOwnProperty.call(array, 'index')) {\n        result.index = array.index;\n        result.input = array.input;\n      }\n      return result;\n    }\n\n    /**\n     * Initializes an object clone.\n     *\n     * @private\n     * @param {Object} object The object to clone.\n     * @returns {Object} Returns the initialized clone.\n     */\n    function initCloneObject(object) {\n      return (typeof object.constructor == 'function' && !isPrototype(object))\n        ? baseCreate(getPrototype(object))\n        : {};\n    }\n\n    /**\n     * Initializes an object clone based on its `toStringTag`.\n     *\n     * **Note:** This function only supports cloning values with tags of\n     * `Boolean`, `Date`, `Error`, `Map`, `Number`, `RegExp`, `Set`, or `String`.\n     *\n     * @private\n     * @param {Object} object The object to clone.\n     * @param {string} tag The `toStringTag` of the object to clone.\n     * @param {boolean} [isDeep] Specify a deep clone.\n     * @returns {Object} Returns the initialized clone.\n     */\n    function initCloneByTag(object, tag, isDeep) {\n      var Ctor = object.constructor;\n      switch (tag) {\n        case arrayBufferTag:\n          return cloneArrayBuffer(object);\n\n        case boolTag:\n        case dateTag:\n          return new Ctor(+object);\n\n        case dataViewTag:\n          return cloneDataView(object, isDeep);\n\n        case float32Tag: case float64Tag:\n        case int8Tag: case int16Tag: case int32Tag:\n        case uint8Tag: case uint8ClampedTag: case uint16Tag: case uint32Tag:\n          return cloneTypedArray(object, isDeep);\n\n        case mapTag:\n          return new Ctor;\n\n        case numberTag:\n        case stringTag:\n          return new Ctor(object);\n\n        case regexpTag:\n          return cloneRegExp(object);\n\n        case setTag:\n          return new Ctor;\n\n        case symbolTag:\n          return cloneSymbol(object);\n      }\n    }\n\n    /**\n     * Inserts wrapper `details` in a comment at the top of the `source` body.\n     *\n     * @private\n     * @param {string} source The source to modify.\n     * @returns {Array} details The details to insert.\n     * @returns {string} Returns the modified source.\n     */\n    function insertWrapDetails(source, details) {\n      var length = details.length;\n      if (!length) {\n        return source;\n      }\n      var lastIndex = length - 1;\n      details[lastIndex] = (length > 1 ? '& ' : '') + details[lastIndex];\n      details = details.join(length > 2 ? ', ' : ' ');\n      return source.replace(reWrapComment, '{\\n/* [wrapped with ' + details + '] */\\n');\n    }\n\n    /**\n     * Checks if `value` is a flattenable `arguments` object or array.\n     *\n     * @private\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is flattenable, else `false`.\n     */\n    function isFlattenable(value) {\n      return isArray(value) || isArguments(value) ||\n        !!(spreadableSymbol && value && value[spreadableSymbol]);\n    }\n\n    /**\n     * Checks if `value` is a valid array-like index.\n     *\n     * @private\n     * @param {*} value The value to check.\n     * @param {number} [length=MAX_SAFE_INTEGER] The upper bounds of a valid index.\n     * @returns {boolean} Returns `true` if `value` is a valid index, else `false`.\n     */\n    function isIndex(value, length) {\n      var type = typeof value;\n      length = length == null ? MAX_SAFE_INTEGER : length;\n\n      return !!length &&\n        (type == 'number' ||\n          (type != 'symbol' && reIsUint.test(value))) &&\n            (value > -1 && value % 1 == 0 && value < length);\n    }\n\n    /**\n     * Checks if the given arguments are from an iteratee call.\n     *\n     * @private\n     * @param {*} value The potential iteratee value argument.\n     * @param {*} index The potential iteratee index or key argument.\n     * @param {*} object The potential iteratee object argument.\n     * @returns {boolean} Returns `true` if the arguments are from an iteratee call,\n     *  else `false`.\n     */\n    function isIterateeCall(value, index, object) {\n      if (!isObject(object)) {\n        return false;\n      }\n      var type = typeof index;\n      if (type == 'number'\n            ? (isArrayLike(object) && isIndex(index, object.length))\n            : (type == 'string' && index in object)\n          ) {\n        return eq(object[index], value);\n      }\n      return false;\n    }\n\n    /**\n     * Checks if `value` is a property name and not a property path.\n     *\n     * @private\n     * @param {*} value The value to check.\n     * @param {Object} [object] The object to query keys on.\n     * @returns {boolean} Returns `true` if `value` is a property name, else `false`.\n     */\n    function isKey(value, object) {\n      if (isArray(value)) {\n        return false;\n      }\n      var type = typeof value;\n      if (type == 'number' || type == 'symbol' || type == 'boolean' ||\n          value == null || isSymbol(value)) {\n        return true;\n      }\n      return reIsPlainProp.test(value) || !reIsDeepProp.test(value) ||\n        (object != null && value in Object(object));\n    }\n\n    /**\n     * Checks if `value` is suitable for use as unique object key.\n     *\n     * @private\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is suitable, else `false`.\n     */\n    function isKeyable(value) {\n      var type = typeof value;\n      return (type == 'string' || type == 'number' || type == 'symbol' || type == 'boolean')\n        ? (value !== '__proto__')\n        : (value === null);\n    }\n\n    /**\n     * Checks if `func` has a lazy counterpart.\n     *\n     * @private\n     * @param {Function} func The function to check.\n     * @returns {boolean} Returns `true` if `func` has a lazy counterpart,\n     *  else `false`.\n     */\n    function isLaziable(func) {\n      var funcName = getFuncName(func),\n          other = lodash[funcName];\n\n      if (typeof other != 'function' || !(funcName in LazyWrapper.prototype)) {\n        return false;\n      }\n      if (func === other) {\n        return true;\n      }\n      var data = getData(other);\n      return !!data && func === data[0];\n    }\n\n    /**\n     * Checks if `func` has its source masked.\n     *\n     * @private\n     * @param {Function} func The function to check.\n     * @returns {boolean} Returns `true` if `func` is masked, else `false`.\n     */\n    function isMasked(func) {\n      return !!maskSrcKey && (maskSrcKey in func);\n    }\n\n    /**\n     * Checks if `func` is capable of being masked.\n     *\n     * @private\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `func` is maskable, else `false`.\n     */\n    var isMaskable = coreJsData ? isFunction : stubFalse;\n\n    /**\n     * Checks if `value` is likely a prototype object.\n     *\n     * @private\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is a prototype, else `false`.\n     */\n    function isPrototype(value) {\n      var Ctor = value && value.constructor,\n          proto = (typeof Ctor == 'function' && Ctor.prototype) || objectProto;\n\n      return value === proto;\n    }\n\n    /**\n     * Checks if `value` is suitable for strict equality comparisons, i.e. `===`.\n     *\n     * @private\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` if suitable for strict\n     *  equality comparisons, else `false`.\n     */\n    function isStrictComparable(value) {\n      return value === value && !isObject(value);\n    }\n\n    /**\n     * A specialized version of `matchesProperty` for source values suitable\n     * for strict equality comparisons, i.e. `===`.\n     *\n     * @private\n     * @param {string} key The key of the property to get.\n     * @param {*} srcValue The value to match.\n     * @returns {Function} Returns the new spec function.\n     */\n    function matchesStrictComparable(key, srcValue) {\n      return function(object) {\n        if (object == null) {\n          return false;\n        }\n        return object[key] === srcValue &&\n          (srcValue !== undefined || (key in Object(object)));\n      };\n    }\n\n    /**\n     * A specialized version of `_.memoize` which clears the memoized function's\n     * cache when it exceeds `MAX_MEMOIZE_SIZE`.\n     *\n     * @private\n     * @param {Function} func The function to have its output memoized.\n     * @returns {Function} Returns the new memoized function.\n     */\n    function memoizeCapped(func) {\n      var result = memoize(func, function(key) {\n        if (cache.size === MAX_MEMOIZE_SIZE) {\n          cache.clear();\n        }\n        return key;\n      });\n\n      var cache = result.cache;\n      return result;\n    }\n\n    /**\n     * Merges the function metadata of `source` into `data`.\n     *\n     * Merging metadata reduces the number of wrappers used to invoke a function.\n     * This is possible because methods like `_.bind`, `_.curry`, and `_.partial`\n     * may be applied regardless of execution order. Methods like `_.ary` and\n     * `_.rearg` modify function arguments, making the order in which they are\n     * executed important, preventing the merging of metadata. However, we make\n     * an exception for a safe combined case where curried functions have `_.ary`\n     * and or `_.rearg` applied.\n     *\n     * @private\n     * @param {Array} data The destination metadata.\n     * @param {Array} source The source metadata.\n     * @returns {Array} Returns `data`.\n     */\n    function mergeData(data, source) {\n      var bitmask = data[1],\n          srcBitmask = source[1],\n          newBitmask = bitmask | srcBitmask,\n          isCommon = newBitmask < (WRAP_BIND_FLAG | WRAP_BIND_KEY_FLAG | WRAP_ARY_FLAG);\n\n      var isCombo =\n        ((srcBitmask == WRAP_ARY_FLAG) && (bitmask == WRAP_CURRY_FLAG)) ||\n        ((srcBitmask == WRAP_ARY_FLAG) && (bitmask == WRAP_REARG_FLAG) && (data[7].length <= source[8])) ||\n        ((srcBitmask == (WRAP_ARY_FLAG | WRAP_REARG_FLAG)) && (source[7].length <= source[8]) && (bitmask == WRAP_CURRY_FLAG));\n\n      // Exit early if metadata can't be merged.\n      if (!(isCommon || isCombo)) {\n        return data;\n      }\n      // Use source `thisArg` if available.\n      if (srcBitmask & WRAP_BIND_FLAG) {\n        data[2] = source[2];\n        // Set when currying a bound function.\n        newBitmask |= bitmask & WRAP_BIND_FLAG ? 0 : WRAP_CURRY_BOUND_FLAG;\n      }\n      // Compose partial arguments.\n      var value = source[3];\n      if (value) {\n        var partials = data[3];\n        data[3] = partials ? composeArgs(partials, value, source[4]) : value;\n        data[4] = partials ? replaceHolders(data[3], PLACEHOLDER) : source[4];\n      }\n      // Compose partial right arguments.\n      value = source[5];\n      if (value) {\n        partials = data[5];\n        data[5] = partials ? composeArgsRight(partials, value, source[6]) : value;\n        data[6] = partials ? replaceHolders(data[5], PLACEHOLDER) : source[6];\n      }\n      // Use source `argPos` if available.\n      value = source[7];\n      if (value) {\n        data[7] = value;\n      }\n      // Use source `ary` if it's smaller.\n      if (srcBitmask & WRAP_ARY_FLAG) {\n        data[8] = data[8] == null ? source[8] : nativeMin(data[8], source[8]);\n      }\n      // Use source `arity` if one is not provided.\n      if (data[9] == null) {\n        data[9] = source[9];\n      }\n      // Use source `func` and merge bitmasks.\n      data[0] = source[0];\n      data[1] = newBitmask;\n\n      return data;\n    }\n\n    /**\n     * This function is like\n     * [`Object.keys`](http://ecma-international.org/ecma-262/7.0/#sec-object.keys)\n     * except that it includes inherited enumerable properties.\n     *\n     * @private\n     * @param {Object} object The object to query.\n     * @returns {Array} Returns the array of property names.\n     */\n    function nativeKeysIn(object) {\n      var result = [];\n      if (object != null) {\n        for (var key in Object(object)) {\n          result.push(key);\n        }\n      }\n      return result;\n    }\n\n    /**\n     * Converts `value` to a string using `Object.prototype.toString`.\n     *\n     * @private\n     * @param {*} value The value to convert.\n     * @returns {string} Returns the converted string.\n     */\n    function objectToString(value) {\n      return nativeObjectToString.call(value);\n    }\n\n    /**\n     * A specialized version of `baseRest` which transforms the rest array.\n     *\n     * @private\n     * @param {Function} func The function to apply a rest parameter to.\n     * @param {number} [start=func.length-1] The start position of the rest parameter.\n     * @param {Function} transform The rest array transform.\n     * @returns {Function} Returns the new function.\n     */\n    function overRest(func, start, transform) {\n      start = nativeMax(start === undefined ? (func.length - 1) : start, 0);\n      return function() {\n        var args = arguments,\n            index = -1,\n            length = nativeMax(args.length - start, 0),\n            array = Array(length);\n\n        while (++index < length) {\n          array[index] = args[start + index];\n        }\n        index = -1;\n        var otherArgs = Array(start + 1);\n        while (++index < start) {\n          otherArgs[index] = args[index];\n        }\n        otherArgs[start] = transform(array);\n        return apply(func, this, otherArgs);\n      };\n    }\n\n    /**\n     * Gets the parent value at `path` of `object`.\n     *\n     * @private\n     * @param {Object} object The object to query.\n     * @param {Array} path The path to get the parent value of.\n     * @returns {*} Returns the parent value.\n     */\n    function parent(object, path) {\n      return path.length < 2 ? object : baseGet(object, baseSlice(path, 0, -1));\n    }\n\n    /**\n     * Reorder `array` according to the specified indexes where the element at\n     * the first index is assigned as the first element, the element at\n     * the second index is assigned as the second element, and so on.\n     *\n     * @private\n     * @param {Array} array The array to reorder.\n     * @param {Array} indexes The arranged array indexes.\n     * @returns {Array} Returns `array`.\n     */\n    function reorder(array, indexes) {\n      var arrLength = array.length,\n          length = nativeMin(indexes.length, arrLength),\n          oldArray = copyArray(array);\n\n      while (length--) {\n        var index = indexes[length];\n        array[length] = isIndex(index, arrLength) ? oldArray[index] : undefined;\n      }\n      return array;\n    }\n\n    /**\n     * Gets the value at `key`, unless `key` is \"__proto__\" or \"constructor\".\n     *\n     * @private\n     * @param {Object} object The object to query.\n     * @param {string} key The key of the property to get.\n     * @returns {*} Returns the property value.\n     */\n    function safeGet(object, key) {\n      if (key === 'constructor' && typeof object[key] === 'function') {\n        return;\n      }\n\n      if (key == '__proto__') {\n        return;\n      }\n\n      return object[key];\n    }\n\n    /**\n     * Sets metadata for `func`.\n     *\n     * **Note:** If this function becomes hot, i.e. is invoked a lot in a short\n     * period of time, it will trip its breaker and transition to an identity\n     * function to avoid garbage collection pauses in V8. See\n     * [V8 issue 2070](https://bugs.chromium.org/p/v8/issues/detail?id=2070)\n     * for more details.\n     *\n     * @private\n     * @param {Function} func The function to associate metadata with.\n     * @param {*} data The metadata.\n     * @returns {Function} Returns `func`.\n     */\n    var setData = shortOut(baseSetData);\n\n    /**\n     * A simple wrapper around the global [`setTimeout`](https://mdn.io/setTimeout).\n     *\n     * @private\n     * @param {Function} func The function to delay.\n     * @param {number} wait The number of milliseconds to delay invocation.\n     * @returns {number|Object} Returns the timer id or timeout object.\n     */\n    var setTimeout = ctxSetTimeout || function(func, wait) {\n      return root.setTimeout(func, wait);\n    };\n\n    /**\n     * Sets the `toString` method of `func` to return `string`.\n     *\n     * @private\n     * @param {Function} func The function to modify.\n     * @param {Function} string The `toString` result.\n     * @returns {Function} Returns `func`.\n     */\n    var setToString = shortOut(baseSetToString);\n\n    /**\n     * Sets the `toString` method of `wrapper` to mimic the source of `reference`\n     * with wrapper details in a comment at the top of the source body.\n     *\n     * @private\n     * @param {Function} wrapper The function to modify.\n     * @param {Function} reference The reference function.\n     * @param {number} bitmask The bitmask flags. See `createWrap` for more details.\n     * @returns {Function} Returns `wrapper`.\n     */\n    function setWrapToString(wrapper, reference, bitmask) {\n      var source = (reference + '');\n      return setToString(wrapper, insertWrapDetails(source, updateWrapDetails(getWrapDetails(source), bitmask)));\n    }\n\n    /**\n     * Creates a function that'll short out and invoke `identity` instead\n     * of `func` when it's called `HOT_COUNT` or more times in `HOT_SPAN`\n     * milliseconds.\n     *\n     * @private\n     * @param {Function} func The function to restrict.\n     * @returns {Function} Returns the new shortable function.\n     */\n    function shortOut(func) {\n      var count = 0,\n          lastCalled = 0;\n\n      return function() {\n        var stamp = nativeNow(),\n            remaining = HOT_SPAN - (stamp - lastCalled);\n\n        lastCalled = stamp;\n        if (remaining > 0) {\n          if (++count >= HOT_COUNT) {\n            return arguments[0];\n          }\n        } else {\n          count = 0;\n        }\n        return func.apply(undefined, arguments);\n      };\n    }\n\n    /**\n     * A specialized version of `_.shuffle` which mutates and sets the size of `array`.\n     *\n     * @private\n     * @param {Array} array The array to shuffle.\n     * @param {number} [size=array.length] The size of `array`.\n     * @returns {Array} Returns `array`.\n     */\n    function shuffleSelf(array, size) {\n      var index = -1,\n          length = array.length,\n          lastIndex = length - 1;\n\n      size = size === undefined ? length : size;\n      while (++index < size) {\n        var rand = baseRandom(index, lastIndex),\n            value = array[rand];\n\n        array[rand] = array[index];\n        array[index] = value;\n      }\n      array.length = size;\n      return array;\n    }\n\n    /**\n     * Converts `string` to a property path array.\n     *\n     * @private\n     * @param {string} string The string to convert.\n     * @returns {Array} Returns the property path array.\n     */\n    var stringToPath = memoizeCapped(function(string) {\n      var result = [];\n      if (string.charCodeAt(0) === 46 /* . */) {\n        result.push('');\n      }\n      string.replace(rePropName, function(match, number, quote, subString) {\n        result.push(quote ? subString.replace(reEscapeChar, '$1') : (number || match));\n      });\n      return result;\n    });\n\n    /**\n     * Converts `value` to a string key if it's not a string or symbol.\n     *\n     * @private\n     * @param {*} value The value to inspect.\n     * @returns {string|symbol} Returns the key.\n     */\n    function toKey(value) {\n      if (typeof value == 'string' || isSymbol(value)) {\n        return value;\n      }\n      var result = (value + '');\n      return (result == '0' && (1 / value) == -INFINITY) ? '-0' : result;\n    }\n\n    /**\n     * Converts `func` to its source code.\n     *\n     * @private\n     * @param {Function} func The function to convert.\n     * @returns {string} Returns the source code.\n     */\n    function toSource(func) {\n      if (func != null) {\n        try {\n          return funcToString.call(func);\n        } catch (e) {}\n        try {\n          return (func + '');\n        } catch (e) {}\n      }\n      return '';\n    }\n\n    /**\n     * Updates wrapper `details` based on `bitmask` flags.\n     *\n     * @private\n     * @returns {Array} details The details to modify.\n     * @param {number} bitmask The bitmask flags. See `createWrap` for more details.\n     * @returns {Array} Returns `details`.\n     */\n    function updateWrapDetails(details, bitmask) {\n      arrayEach(wrapFlags, function(pair) {\n        var value = '_.' + pair[0];\n        if ((bitmask & pair[1]) && !arrayIncludes(details, value)) {\n          details.push(value);\n        }\n      });\n      return details.sort();\n    }\n\n    /**\n     * Creates a clone of `wrapper`.\n     *\n     * @private\n     * @param {Object} wrapper The wrapper to clone.\n     * @returns {Object} Returns the cloned wrapper.\n     */\n    function wrapperClone(wrapper) {\n      if (wrapper instanceof LazyWrapper) {\n        return wrapper.clone();\n      }\n      var result = new LodashWrapper(wrapper.__wrapped__, wrapper.__chain__);\n      result.__actions__ = copyArray(wrapper.__actions__);\n      result.__index__  = wrapper.__index__;\n      result.__values__ = wrapper.__values__;\n      return result;\n    }\n\n    /*------------------------------------------------------------------------*/\n\n    /**\n     * Creates an array of elements split into groups the length of `size`.\n     * If `array` can't be split evenly, the final chunk will be the remaining\n     * elements.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category Array\n     * @param {Array} array The array to process.\n     * @param {number} [size=1] The length of each chunk\n     * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n     * @returns {Array} Returns the new array of chunks.\n     * @example\n     *\n     * _.chunk(['a', 'b', 'c', 'd'], 2);\n     * // => [['a', 'b'], ['c', 'd']]\n     *\n     * _.chunk(['a', 'b', 'c', 'd'], 3);\n     * // => [['a', 'b', 'c'], ['d']]\n     */\n    function chunk(array, size, guard) {\n      if ((guard ? isIterateeCall(array, size, guard) : size === undefined)) {\n        size = 1;\n      } else {\n        size = nativeMax(toInteger(size), 0);\n      }\n      var length = array == null ? 0 : array.length;\n      if (!length || size < 1) {\n        return [];\n      }\n      var index = 0,\n          resIndex = 0,\n          result = Array(nativeCeil(length / size));\n\n      while (index < length) {\n        result[resIndex++] = baseSlice(array, index, (index += size));\n      }\n      return result;\n    }\n\n    /**\n     * Creates an array with all falsey values removed. The values `false`, `null`,\n     * `0`, `\"\"`, `undefined`, and `NaN` are falsey.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Array\n     * @param {Array} array The array to compact.\n     * @returns {Array} Returns the new array of filtered values.\n     * @example\n     *\n     * _.compact([0, 1, false, 2, '', 3]);\n     * // => [1, 2, 3]\n     */\n    function compact(array) {\n      var index = -1,\n          length = array == null ? 0 : array.length,\n          resIndex = 0,\n          result = [];\n\n      while (++index < length) {\n        var value = array[index];\n        if (value) {\n          result[resIndex++] = value;\n        }\n      }\n      return result;\n    }\n\n    /**\n     * Creates a new array concatenating `array` with any additional arrays\n     * and/or values.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Array\n     * @param {Array} array The array to concatenate.\n     * @param {...*} [values] The values to concatenate.\n     * @returns {Array} Returns the new concatenated array.\n     * @example\n     *\n     * var array = [1];\n     * var other = _.concat(array, 2, [3], [[4]]);\n     *\n     * console.log(other);\n     * // => [1, 2, 3, [4]]\n     *\n     * console.log(array);\n     * // => [1]\n     */\n    function concat() {\n      var length = arguments.length;\n      if (!length) {\n        return [];\n      }\n      var args = Array(length - 1),\n          array = arguments[0],\n          index = length;\n\n      while (index--) {\n        args[index - 1] = arguments[index];\n      }\n      return arrayPush(isArray(array) ? copyArray(array) : [array], baseFlatten(args, 1));\n    }\n\n    /**\n     * Creates an array of `array` values not included in the other given arrays\n     * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n     * for equality comparisons. The order and references of result values are\n     * determined by the first array.\n     *\n     * **Note:** Unlike `_.pullAll`, this method returns a new array.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Array\n     * @param {Array} array The array to inspect.\n     * @param {...Array} [values] The values to exclude.\n     * @returns {Array} Returns the new array of filtered values.\n     * @see _.without, _.xor\n     * @example\n     *\n     * _.difference([2, 1], [2, 3]);\n     * // => [1]\n     */\n    var difference = baseRest(function(array, values) {\n      return isArrayLikeObject(array)\n        ? baseDifference(array, baseFlatten(values, 1, isArrayLikeObject, true))\n        : [];\n    });\n\n    /**\n     * This method is like `_.difference` except that it accepts `iteratee` which\n     * is invoked for each element of `array` and `values` to generate the criterion\n     * by which they're compared. The order and references of result values are\n     * determined by the first array. The iteratee is invoked with one argument:\n     * (value).\n     *\n     * **Note:** Unlike `_.pullAllBy`, this method returns a new array.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Array\n     * @param {Array} array The array to inspect.\n     * @param {...Array} [values] The values to exclude.\n     * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n     * @returns {Array} Returns the new array of filtered values.\n     * @example\n     *\n     * _.differenceBy([2.1, 1.2], [2.3, 3.4], Math.floor);\n     * // => [1.2]\n     *\n     * // The `_.property` iteratee shorthand.\n     * _.differenceBy([{ 'x': 2 }, { 'x': 1 }], [{ 'x': 1 }], 'x');\n     * // => [{ 'x': 2 }]\n     */\n    var differenceBy = baseRest(function(array, values) {\n      var iteratee = last(values);\n      if (isArrayLikeObject(iteratee)) {\n        iteratee = undefined;\n      }\n      return isArrayLikeObject(array)\n        ? baseDifference(array, baseFlatten(values, 1, isArrayLikeObject, true), getIteratee(iteratee, 2))\n        : [];\n    });\n\n    /**\n     * This method is like `_.difference` except that it accepts `comparator`\n     * which is invoked to compare elements of `array` to `values`. The order and\n     * references of result values are determined by the first array. The comparator\n     * is invoked with two arguments: (arrVal, othVal).\n     *\n     * **Note:** Unlike `_.pullAllWith`, this method returns a new array.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Array\n     * @param {Array} array The array to inspect.\n     * @param {...Array} [values] The values to exclude.\n     * @param {Function} [comparator] The comparator invoked per element.\n     * @returns {Array} Returns the new array of filtered values.\n     * @example\n     *\n     * var objects = [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }];\n     *\n     * _.differenceWith(objects, [{ 'x': 1, 'y': 2 }], _.isEqual);\n     * // => [{ 'x': 2, 'y': 1 }]\n     */\n    var differenceWith = baseRest(function(array, values) {\n      var comparator = last(values);\n      if (isArrayLikeObject(comparator)) {\n        comparator = undefined;\n      }\n      return isArrayLikeObject(array)\n        ? baseDifference(array, baseFlatten(values, 1, isArrayLikeObject, true), undefined, comparator)\n        : [];\n    });\n\n    /**\n     * Creates a slice of `array` with `n` elements dropped from the beginning.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.5.0\n     * @category Array\n     * @param {Array} array The array to query.\n     * @param {number} [n=1] The number of elements to drop.\n     * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n     * @returns {Array} Returns the slice of `array`.\n     * @example\n     *\n     * _.drop([1, 2, 3]);\n     * // => [2, 3]\n     *\n     * _.drop([1, 2, 3], 2);\n     * // => [3]\n     *\n     * _.drop([1, 2, 3], 5);\n     * // => []\n     *\n     * _.drop([1, 2, 3], 0);\n     * // => [1, 2, 3]\n     */\n    function drop(array, n, guard) {\n      var length = array == null ? 0 : array.length;\n      if (!length) {\n        return [];\n      }\n      n = (guard || n === undefined) ? 1 : toInteger(n);\n      return baseSlice(array, n < 0 ? 0 : n, length);\n    }\n\n    /**\n     * Creates a slice of `array` with `n` elements dropped from the end.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category Array\n     * @param {Array} array The array to query.\n     * @param {number} [n=1] The number of elements to drop.\n     * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n     * @returns {Array} Returns the slice of `array`.\n     * @example\n     *\n     * _.dropRight([1, 2, 3]);\n     * // => [1, 2]\n     *\n     * _.dropRight([1, 2, 3], 2);\n     * // => [1]\n     *\n     * _.dropRight([1, 2, 3], 5);\n     * // => []\n     *\n     * _.dropRight([1, 2, 3], 0);\n     * // => [1, 2, 3]\n     */\n    function dropRight(array, n, guard) {\n      var length = array == null ? 0 : array.length;\n      if (!length) {\n        return [];\n      }\n      n = (guard || n === undefined) ? 1 : toInteger(n);\n      n = length - n;\n      return baseSlice(array, 0, n < 0 ? 0 : n);\n    }\n\n    /**\n     * Creates a slice of `array` excluding elements dropped from the end.\n     * Elements are dropped until `predicate` returns falsey. The predicate is\n     * invoked with three arguments: (value, index, array).\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category Array\n     * @param {Array} array The array to query.\n     * @param {Function} [predicate=_.identity] The function invoked per iteration.\n     * @returns {Array} Returns the slice of `array`.\n     * @example\n     *\n     * var users = [\n     *   { 'user': 'barney',  'active': true },\n     *   { 'user': 'fred',    'active': false },\n     *   { 'user': 'pebbles', 'active': false }\n     * ];\n     *\n     * _.dropRightWhile(users, function(o) { return !o.active; });\n     * // => objects for ['barney']\n     *\n     * // The `_.matches` iteratee shorthand.\n     * _.dropRightWhile(users, { 'user': 'pebbles', 'active': false });\n     * // => objects for ['barney', 'fred']\n     *\n     * // The `_.matchesProperty` iteratee shorthand.\n     * _.dropRightWhile(users, ['active', false]);\n     * // => objects for ['barney']\n     *\n     * // The `_.property` iteratee shorthand.\n     * _.dropRightWhile(users, 'active');\n     * // => objects for ['barney', 'fred', 'pebbles']\n     */\n    function dropRightWhile(array, predicate) {\n      return (array && array.length)\n        ? baseWhile(array, getIteratee(predicate, 3), true, true)\n        : [];\n    }\n\n    /**\n     * Creates a slice of `array` excluding elements dropped from the beginning.\n     * Elements are dropped until `predicate` returns falsey. The predicate is\n     * invoked with three arguments: (value, index, array).\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category Array\n     * @param {Array} array The array to query.\n     * @param {Function} [predicate=_.identity] The function invoked per iteration.\n     * @returns {Array} Returns the slice of `array`.\n     * @example\n     *\n     * var users = [\n     *   { 'user': 'barney',  'active': false },\n     *   { 'user': 'fred',    'active': false },\n     *   { 'user': 'pebbles', 'active': true }\n     * ];\n     *\n     * _.dropWhile(users, function(o) { return !o.active; });\n     * // => objects for ['pebbles']\n     *\n     * // The `_.matches` iteratee shorthand.\n     * _.dropWhile(users, { 'user': 'barney', 'active': false });\n     * // => objects for ['fred', 'pebbles']\n     *\n     * // The `_.matchesProperty` iteratee shorthand.\n     * _.dropWhile(users, ['active', false]);\n     * // => objects for ['pebbles']\n     *\n     * // The `_.property` iteratee shorthand.\n     * _.dropWhile(users, 'active');\n     * // => objects for ['barney', 'fred', 'pebbles']\n     */\n    function dropWhile(array, predicate) {\n      return (array && array.length)\n        ? baseWhile(array, getIteratee(predicate, 3), true)\n        : [];\n    }\n\n    /**\n     * Fills elements of `array` with `value` from `start` up to, but not\n     * including, `end`.\n     *\n     * **Note:** This method mutates `array`.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.2.0\n     * @category Array\n     * @param {Array} array The array to fill.\n     * @param {*} value The value to fill `array` with.\n     * @param {number} [start=0] The start position.\n     * @param {number} [end=array.length] The end position.\n     * @returns {Array} Returns `array`.\n     * @example\n     *\n     * var array = [1, 2, 3];\n     *\n     * _.fill(array, 'a');\n     * console.log(array);\n     * // => ['a', 'a', 'a']\n     *\n     * _.fill(Array(3), 2);\n     * // => [2, 2, 2]\n     *\n     * _.fill([4, 6, 8, 10], '*', 1, 3);\n     * // => [4, '*', '*', 10]\n     */\n    function fill(array, value, start, end) {\n      var length = array == null ? 0 : array.length;\n      if (!length) {\n        return [];\n      }\n      if (start && typeof start != 'number' && isIterateeCall(array, value, start)) {\n        start = 0;\n        end = length;\n      }\n      return baseFill(array, value, start, end);\n    }\n\n    /**\n     * This method is like `_.find` except that it returns the index of the first\n     * element `predicate` returns truthy for instead of the element itself.\n     *\n     * @static\n     * @memberOf _\n     * @since 1.1.0\n     * @category Array\n     * @param {Array} array The array to inspect.\n     * @param {Function} [predicate=_.identity] The function invoked per iteration.\n     * @param {number} [fromIndex=0] The index to search from.\n     * @returns {number} Returns the index of the found element, else `-1`.\n     * @example\n     *\n     * var users = [\n     *   { 'user': 'barney',  'active': false },\n     *   { 'user': 'fred',    'active': false },\n     *   { 'user': 'pebbles', 'active': true }\n     * ];\n     *\n     * _.findIndex(users, function(o) { return o.user == 'barney'; });\n     * // => 0\n     *\n     * // The `_.matches` iteratee shorthand.\n     * _.findIndex(users, { 'user': 'fred', 'active': false });\n     * // => 1\n     *\n     * // The `_.matchesProperty` iteratee shorthand.\n     * _.findIndex(users, ['active', false]);\n     * // => 0\n     *\n     * // The `_.property` iteratee shorthand.\n     * _.findIndex(users, 'active');\n     * // => 2\n     */\n    function findIndex(array, predicate, fromIndex) {\n      var length = array == null ? 0 : array.length;\n      if (!length) {\n        return -1;\n      }\n      var index = fromIndex == null ? 0 : toInteger(fromIndex);\n      if (index < 0) {\n        index = nativeMax(length + index, 0);\n      }\n      return baseFindIndex(array, getIteratee(predicate, 3), index);\n    }\n\n    /**\n     * This method is like `_.findIndex` except that it iterates over elements\n     * of `collection` from right to left.\n     *\n     * @static\n     * @memberOf _\n     * @since 2.0.0\n     * @category Array\n     * @param {Array} array The array to inspect.\n     * @param {Function} [predicate=_.identity] The function invoked per iteration.\n     * @param {number} [fromIndex=array.length-1] The index to search from.\n     * @returns {number} Returns the index of the found element, else `-1`.\n     * @example\n     *\n     * var users = [\n     *   { 'user': 'barney',  'active': true },\n     *   { 'user': 'fred',    'active': false },\n     *   { 'user': 'pebbles', 'active': false }\n     * ];\n     *\n     * _.findLastIndex(users, function(o) { return o.user == 'pebbles'; });\n     * // => 2\n     *\n     * // The `_.matches` iteratee shorthand.\n     * _.findLastIndex(users, { 'user': 'barney', 'active': true });\n     * // => 0\n     *\n     * // The `_.matchesProperty` iteratee shorthand.\n     * _.findLastIndex(users, ['active', false]);\n     * // => 2\n     *\n     * // The `_.property` iteratee shorthand.\n     * _.findLastIndex(users, 'active');\n     * // => 0\n     */\n    function findLastIndex(array, predicate, fromIndex) {\n      var length = array == null ? 0 : array.length;\n      if (!length) {\n        return -1;\n      }\n      var index = length - 1;\n      if (fromIndex !== undefined) {\n        index = toInteger(fromIndex);\n        index = fromIndex < 0\n          ? nativeMax(length + index, 0)\n          : nativeMin(index, length - 1);\n      }\n      return baseFindIndex(array, getIteratee(predicate, 3), index, true);\n    }\n\n    /**\n     * Flattens `array` a single level deep.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Array\n     * @param {Array} array The array to flatten.\n     * @returns {Array} Returns the new flattened array.\n     * @example\n     *\n     * _.flatten([1, [2, [3, [4]], 5]]);\n     * // => [1, 2, [3, [4]], 5]\n     */\n    function flatten(array) {\n      var length = array == null ? 0 : array.length;\n      return length ? baseFlatten(array, 1) : [];\n    }\n\n    /**\n     * Recursively flattens `array`.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category Array\n     * @param {Array} array The array to flatten.\n     * @returns {Array} Returns the new flattened array.\n     * @example\n     *\n     * _.flattenDeep([1, [2, [3, [4]], 5]]);\n     * // => [1, 2, 3, 4, 5]\n     */\n    function flattenDeep(array) {\n      var length = array == null ? 0 : array.length;\n      return length ? baseFlatten(array, INFINITY) : [];\n    }\n\n    /**\n     * Recursively flatten `array` up to `depth` times.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.4.0\n     * @category Array\n     * @param {Array} array The array to flatten.\n     * @param {number} [depth=1] The maximum recursion depth.\n     * @returns {Array} Returns the new flattened array.\n     * @example\n     *\n     * var array = [1, [2, [3, [4]], 5]];\n     *\n     * _.flattenDepth(array, 1);\n     * // => [1, 2, [3, [4]], 5]\n     *\n     * _.flattenDepth(array, 2);\n     * // => [1, 2, 3, [4], 5]\n     */\n    function flattenDepth(array, depth) {\n      var length = array == null ? 0 : array.length;\n      if (!length) {\n        return [];\n      }\n      depth = depth === undefined ? 1 : toInteger(depth);\n      return baseFlatten(array, depth);\n    }\n\n    /**\n     * The inverse of `_.toPairs`; this method returns an object composed\n     * from key-value `pairs`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Array\n     * @param {Array} pairs The key-value pairs.\n     * @returns {Object} Returns the new object.\n     * @example\n     *\n     * _.fromPairs([['a', 1], ['b', 2]]);\n     * // => { 'a': 1, 'b': 2 }\n     */\n    function fromPairs(pairs) {\n      var index = -1,\n          length = pairs == null ? 0 : pairs.length,\n          result = {};\n\n      while (++index < length) {\n        var pair = pairs[index];\n        result[pair[0]] = pair[1];\n      }\n      return result;\n    }\n\n    /**\n     * Gets the first element of `array`.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @alias first\n     * @category Array\n     * @param {Array} array The array to query.\n     * @returns {*} Returns the first element of `array`.\n     * @example\n     *\n     * _.head([1, 2, 3]);\n     * // => 1\n     *\n     * _.head([]);\n     * // => undefined\n     */\n    function head(array) {\n      return (array && array.length) ? array[0] : undefined;\n    }\n\n    /**\n     * Gets the index at which the first occurrence of `value` is found in `array`\n     * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n     * for equality comparisons. If `fromIndex` is negative, it's used as the\n     * offset from the end of `array`.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Array\n     * @param {Array} array The array to inspect.\n     * @param {*} value The value to search for.\n     * @param {number} [fromIndex=0] The index to search from.\n     * @returns {number} Returns the index of the matched value, else `-1`.\n     * @example\n     *\n     * _.indexOf([1, 2, 1, 2], 2);\n     * // => 1\n     *\n     * // Search from the `fromIndex`.\n     * _.indexOf([1, 2, 1, 2], 2, 2);\n     * // => 3\n     */\n    function indexOf(array, value, fromIndex) {\n      var length = array == null ? 0 : array.length;\n      if (!length) {\n        return -1;\n      }\n      var index = fromIndex == null ? 0 : toInteger(fromIndex);\n      if (index < 0) {\n        index = nativeMax(length + index, 0);\n      }\n      return baseIndexOf(array, value, index);\n    }\n\n    /**\n     * Gets all but the last element of `array`.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Array\n     * @param {Array} array The array to query.\n     * @returns {Array} Returns the slice of `array`.\n     * @example\n     *\n     * _.initial([1, 2, 3]);\n     * // => [1, 2]\n     */\n    function initial(array) {\n      var length = array == null ? 0 : array.length;\n      return length ? baseSlice(array, 0, -1) : [];\n    }\n\n    /**\n     * Creates an array of unique values that are included in all given arrays\n     * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n     * for equality comparisons. The order and references of result values are\n     * determined by the first array.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Array\n     * @param {...Array} [arrays] The arrays to inspect.\n     * @returns {Array} Returns the new array of intersecting values.\n     * @example\n     *\n     * _.intersection([2, 1], [2, 3]);\n     * // => [2]\n     */\n    var intersection = baseRest(function(arrays) {\n      var mapped = arrayMap(arrays, castArrayLikeObject);\n      return (mapped.length && mapped[0] === arrays[0])\n        ? baseIntersection(mapped)\n        : [];\n    });\n\n    /**\n     * This method is like `_.intersection` except that it accepts `iteratee`\n     * which is invoked for each element of each `arrays` to generate the criterion\n     * by which they're compared. The order and references of result values are\n     * determined by the first array. The iteratee is invoked with one argument:\n     * (value).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Array\n     * @param {...Array} [arrays] The arrays to inspect.\n     * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n     * @returns {Array} Returns the new array of intersecting values.\n     * @example\n     *\n     * _.intersectionBy([2.1, 1.2], [2.3, 3.4], Math.floor);\n     * // => [2.1]\n     *\n     * // The `_.property` iteratee shorthand.\n     * _.intersectionBy([{ 'x': 1 }], [{ 'x': 2 }, { 'x': 1 }], 'x');\n     * // => [{ 'x': 1 }]\n     */\n    var intersectionBy = baseRest(function(arrays) {\n      var iteratee = last(arrays),\n          mapped = arrayMap(arrays, castArrayLikeObject);\n\n      if (iteratee === last(mapped)) {\n        iteratee = undefined;\n      } else {\n        mapped.pop();\n      }\n      return (mapped.length && mapped[0] === arrays[0])\n        ? baseIntersection(mapped, getIteratee(iteratee, 2))\n        : [];\n    });\n\n    /**\n     * This method is like `_.intersection` except that it accepts `comparator`\n     * which is invoked to compare elements of `arrays`. The order and references\n     * of result values are determined by the first array. The comparator is\n     * invoked with two arguments: (arrVal, othVal).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Array\n     * @param {...Array} [arrays] The arrays to inspect.\n     * @param {Function} [comparator] The comparator invoked per element.\n     * @returns {Array} Returns the new array of intersecting values.\n     * @example\n     *\n     * var objects = [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }];\n     * var others = [{ 'x': 1, 'y': 1 }, { 'x': 1, 'y': 2 }];\n     *\n     * _.intersectionWith(objects, others, _.isEqual);\n     * // => [{ 'x': 1, 'y': 2 }]\n     */\n    var intersectionWith = baseRest(function(arrays) {\n      var comparator = last(arrays),\n          mapped = arrayMap(arrays, castArrayLikeObject);\n\n      comparator = typeof comparator == 'function' ? comparator : undefined;\n      if (comparator) {\n        mapped.pop();\n      }\n      return (mapped.length && mapped[0] === arrays[0])\n        ? baseIntersection(mapped, undefined, comparator)\n        : [];\n    });\n\n    /**\n     * Converts all elements in `array` into a string separated by `separator`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Array\n     * @param {Array} array The array to convert.\n     * @param {string} [separator=','] The element separator.\n     * @returns {string} Returns the joined string.\n     * @example\n     *\n     * _.join(['a', 'b', 'c'], '~');\n     * // => 'a~b~c'\n     */\n    function join(array, separator) {\n      return array == null ? '' : nativeJoin.call(array, separator);\n    }\n\n    /**\n     * Gets the last element of `array`.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Array\n     * @param {Array} array The array to query.\n     * @returns {*} Returns the last element of `array`.\n     * @example\n     *\n     * _.last([1, 2, 3]);\n     * // => 3\n     */\n    function last(array) {\n      var length = array == null ? 0 : array.length;\n      return length ? array[length - 1] : undefined;\n    }\n\n    /**\n     * This method is like `_.indexOf` except that it iterates over elements of\n     * `array` from right to left.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Array\n     * @param {Array} array The array to inspect.\n     * @param {*} value The value to search for.\n     * @param {number} [fromIndex=array.length-1] The index to search from.\n     * @returns {number} Returns the index of the matched value, else `-1`.\n     * @example\n     *\n     * _.lastIndexOf([1, 2, 1, 2], 2);\n     * // => 3\n     *\n     * // Search from the `fromIndex`.\n     * _.lastIndexOf([1, 2, 1, 2], 2, 2);\n     * // => 1\n     */\n    function lastIndexOf(array, value, fromIndex) {\n      var length = array == null ? 0 : array.length;\n      if (!length) {\n        return -1;\n      }\n      var index = length;\n      if (fromIndex !== undefined) {\n        index = toInteger(fromIndex);\n        index = index < 0 ? nativeMax(length + index, 0) : nativeMin(index, length - 1);\n      }\n      return value === value\n        ? strictLastIndexOf(array, value, index)\n        : baseFindIndex(array, baseIsNaN, index, true);\n    }\n\n    /**\n     * Gets the element at index `n` of `array`. If `n` is negative, the nth\n     * element from the end is returned.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.11.0\n     * @category Array\n     * @param {Array} array The array to query.\n     * @param {number} [n=0] The index of the element to return.\n     * @returns {*} Returns the nth element of `array`.\n     * @example\n     *\n     * var array = ['a', 'b', 'c', 'd'];\n     *\n     * _.nth(array, 1);\n     * // => 'b'\n     *\n     * _.nth(array, -2);\n     * // => 'c';\n     */\n    function nth(array, n) {\n      return (array && array.length) ? baseNth(array, toInteger(n)) : undefined;\n    }\n\n    /**\n     * Removes all given values from `array` using\n     * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n     * for equality comparisons.\n     *\n     * **Note:** Unlike `_.without`, this method mutates `array`. Use `_.remove`\n     * to remove elements from an array by predicate.\n     *\n     * @static\n     * @memberOf _\n     * @since 2.0.0\n     * @category Array\n     * @param {Array} array The array to modify.\n     * @param {...*} [values] The values to remove.\n     * @returns {Array} Returns `array`.\n     * @example\n     *\n     * var array = ['a', 'b', 'c', 'a', 'b', 'c'];\n     *\n     * _.pull(array, 'a', 'c');\n     * console.log(array);\n     * // => ['b', 'b']\n     */\n    var pull = baseRest(pullAll);\n\n    /**\n     * This method is like `_.pull` except that it accepts an array of values to remove.\n     *\n     * **Note:** Unlike `_.difference`, this method mutates `array`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Array\n     * @param {Array} array The array to modify.\n     * @param {Array} values The values to remove.\n     * @returns {Array} Returns `array`.\n     * @example\n     *\n     * var array = ['a', 'b', 'c', 'a', 'b', 'c'];\n     *\n     * _.pullAll(array, ['a', 'c']);\n     * console.log(array);\n     * // => ['b', 'b']\n     */\n    function pullAll(array, values) {\n      return (array && array.length && values && values.length)\n        ? basePullAll(array, values)\n        : array;\n    }\n\n    /**\n     * This method is like `_.pullAll` except that it accepts `iteratee` which is\n     * invoked for each element of `array` and `values` to generate the criterion\n     * by which they're compared. The iteratee is invoked with one argument: (value).\n     *\n     * **Note:** Unlike `_.differenceBy`, this method mutates `array`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Array\n     * @param {Array} array The array to modify.\n     * @param {Array} values The values to remove.\n     * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n     * @returns {Array} Returns `array`.\n     * @example\n     *\n     * var array = [{ 'x': 1 }, { 'x': 2 }, { 'x': 3 }, { 'x': 1 }];\n     *\n     * _.pullAllBy(array, [{ 'x': 1 }, { 'x': 3 }], 'x');\n     * console.log(array);\n     * // => [{ 'x': 2 }]\n     */\n    function pullAllBy(array, values, iteratee) {\n      return (array && array.length && values && values.length)\n        ? basePullAll(array, values, getIteratee(iteratee, 2))\n        : array;\n    }\n\n    /**\n     * This method is like `_.pullAll` except that it accepts `comparator` which\n     * is invoked to compare elements of `array` to `values`. The comparator is\n     * invoked with two arguments: (arrVal, othVal).\n     *\n     * **Note:** Unlike `_.differenceWith`, this method mutates `array`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.6.0\n     * @category Array\n     * @param {Array} array The array to modify.\n     * @param {Array} values The values to remove.\n     * @param {Function} [comparator] The comparator invoked per element.\n     * @returns {Array} Returns `array`.\n     * @example\n     *\n     * var array = [{ 'x': 1, 'y': 2 }, { 'x': 3, 'y': 4 }, { 'x': 5, 'y': 6 }];\n     *\n     * _.pullAllWith(array, [{ 'x': 3, 'y': 4 }], _.isEqual);\n     * console.log(array);\n     * // => [{ 'x': 1, 'y': 2 }, { 'x': 5, 'y': 6 }]\n     */\n    function pullAllWith(array, values, comparator) {\n      return (array && array.length && values && values.length)\n        ? basePullAll(array, values, undefined, comparator)\n        : array;\n    }\n\n    /**\n     * Removes elements from `array` corresponding to `indexes` and returns an\n     * array of removed elements.\n     *\n     * **Note:** Unlike `_.at`, this method mutates `array`.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category Array\n     * @param {Array} array The array to modify.\n     * @param {...(number|number[])} [indexes] The indexes of elements to remove.\n     * @returns {Array} Returns the new array of removed elements.\n     * @example\n     *\n     * var array = ['a', 'b', 'c', 'd'];\n     * var pulled = _.pullAt(array, [1, 3]);\n     *\n     * console.log(array);\n     * // => ['a', 'c']\n     *\n     * console.log(pulled);\n     * // => ['b', 'd']\n     */\n    var pullAt = flatRest(function(array, indexes) {\n      var length = array == null ? 0 : array.length,\n          result = baseAt(array, indexes);\n\n      basePullAt(array, arrayMap(indexes, function(index) {\n        return isIndex(index, length) ? +index : index;\n      }).sort(compareAscending));\n\n      return result;\n    });\n\n    /**\n     * Removes all elements from `array` that `predicate` returns truthy for\n     * and returns an array of the removed elements. The predicate is invoked\n     * with three arguments: (value, index, array).\n     *\n     * **Note:** Unlike `_.filter`, this method mutates `array`. Use `_.pull`\n     * to pull elements from an array by value.\n     *\n     * @static\n     * @memberOf _\n     * @since 2.0.0\n     * @category Array\n     * @param {Array} array The array to modify.\n     * @param {Function} [predicate=_.identity] The function invoked per iteration.\n     * @returns {Array} Returns the new array of removed elements.\n     * @example\n     *\n     * var array = [1, 2, 3, 4];\n     * var evens = _.remove(array, function(n) {\n     *   return n % 2 == 0;\n     * });\n     *\n     * console.log(array);\n     * // => [1, 3]\n     *\n     * console.log(evens);\n     * // => [2, 4]\n     */\n    function remove(array, predicate) {\n      var result = [];\n      if (!(array && array.length)) {\n        return result;\n      }\n      var index = -1,\n          indexes = [],\n          length = array.length;\n\n      predicate = getIteratee(predicate, 3);\n      while (++index < length) {\n        var value = array[index];\n        if (predicate(value, index, array)) {\n          result.push(value);\n          indexes.push(index);\n        }\n      }\n      basePullAt(array, indexes);\n      return result;\n    }\n\n    /**\n     * Reverses `array` so that the first element becomes the last, the second\n     * element becomes the second to last, and so on.\n     *\n     * **Note:** This method mutates `array` and is based on\n     * [`Array#reverse`](https://mdn.io/Array/reverse).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Array\n     * @param {Array} array The array to modify.\n     * @returns {Array} Returns `array`.\n     * @example\n     *\n     * var array = [1, 2, 3];\n     *\n     * _.reverse(array);\n     * // => [3, 2, 1]\n     *\n     * console.log(array);\n     * // => [3, 2, 1]\n     */\n    function reverse(array) {\n      return array == null ? array : nativeReverse.call(array);\n    }\n\n    /**\n     * Creates a slice of `array` from `start` up to, but not including, `end`.\n     *\n     * **Note:** This method is used instead of\n     * [`Array#slice`](https://mdn.io/Array/slice) to ensure dense arrays are\n     * returned.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category Array\n     * @param {Array} array The array to slice.\n     * @param {number} [start=0] The start position.\n     * @param {number} [end=array.length] The end position.\n     * @returns {Array} Returns the slice of `array`.\n     */\n    function slice(array, start, end) {\n      var length = array == null ? 0 : array.length;\n      if (!length) {\n        return [];\n      }\n      if (end && typeof end != 'number' && isIterateeCall(array, start, end)) {\n        start = 0;\n        end = length;\n      }\n      else {\n        start = start == null ? 0 : toInteger(start);\n        end = end === undefined ? length : toInteger(end);\n      }\n      return baseSlice(array, start, end);\n    }\n\n    /**\n     * Uses a binary search to determine the lowest index at which `value`\n     * should be inserted into `array` in order to maintain its sort order.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Array\n     * @param {Array} array The sorted array to inspect.\n     * @param {*} value The value to evaluate.\n     * @returns {number} Returns the index at which `value` should be inserted\n     *  into `array`.\n     * @example\n     *\n     * _.sortedIndex([30, 50], 40);\n     * // => 1\n     */\n    function sortedIndex(array, value) {\n      return baseSortedIndex(array, value);\n    }\n\n    /**\n     * This method is like `_.sortedIndex` except that it accepts `iteratee`\n     * which is invoked for `value` and each element of `array` to compute their\n     * sort ranking. The iteratee is invoked with one argument: (value).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Array\n     * @param {Array} array The sorted array to inspect.\n     * @param {*} value The value to evaluate.\n     * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n     * @returns {number} Returns the index at which `value` should be inserted\n     *  into `array`.\n     * @example\n     *\n     * var objects = [{ 'x': 4 }, { 'x': 5 }];\n     *\n     * _.sortedIndexBy(objects, { 'x': 4 }, function(o) { return o.x; });\n     * // => 0\n     *\n     * // The `_.property` iteratee shorthand.\n     * _.sortedIndexBy(objects, { 'x': 4 }, 'x');\n     * // => 0\n     */\n    function sortedIndexBy(array, value, iteratee) {\n      return baseSortedIndexBy(array, value, getIteratee(iteratee, 2));\n    }\n\n    /**\n     * This method is like `_.indexOf` except that it performs a binary\n     * search on a sorted `array`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Array\n     * @param {Array} array The array to inspect.\n     * @param {*} value The value to search for.\n     * @returns {number} Returns the index of the matched value, else `-1`.\n     * @example\n     *\n     * _.sortedIndexOf([4, 5, 5, 5, 6], 5);\n     * // => 1\n     */\n    function sortedIndexOf(array, value) {\n      var length = array == null ? 0 : array.length;\n      if (length) {\n        var index = baseSortedIndex(array, value);\n        if (index < length && eq(array[index], value)) {\n          return index;\n        }\n      }\n      return -1;\n    }\n\n    /**\n     * This method is like `_.sortedIndex` except that it returns the highest\n     * index at which `value` should be inserted into `array` in order to\n     * maintain its sort order.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category Array\n     * @param {Array} array The sorted array to inspect.\n     * @param {*} value The value to evaluate.\n     * @returns {number} Returns the index at which `value` should be inserted\n     *  into `array`.\n     * @example\n     *\n     * _.sortedLastIndex([4, 5, 5, 5, 6], 5);\n     * // => 4\n     */\n    function sortedLastIndex(array, value) {\n      return baseSortedIndex(array, value, true);\n    }\n\n    /**\n     * This method is like `_.sortedLastIndex` except that it accepts `iteratee`\n     * which is invoked for `value` and each element of `array` to compute their\n     * sort ranking. The iteratee is invoked with one argument: (value).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Array\n     * @param {Array} array The sorted array to inspect.\n     * @param {*} value The value to evaluate.\n     * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n     * @returns {number} Returns the index at which `value` should be inserted\n     *  into `array`.\n     * @example\n     *\n     * var objects = [{ 'x': 4 }, { 'x': 5 }];\n     *\n     * _.sortedLastIndexBy(objects, { 'x': 4 }, function(o) { return o.x; });\n     * // => 1\n     *\n     * // The `_.property` iteratee shorthand.\n     * _.sortedLastIndexBy(objects, { 'x': 4 }, 'x');\n     * // => 1\n     */\n    function sortedLastIndexBy(array, value, iteratee) {\n      return baseSortedIndexBy(array, value, getIteratee(iteratee, 2), true);\n    }\n\n    /**\n     * This method is like `_.lastIndexOf` except that it performs a binary\n     * search on a sorted `array`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Array\n     * @param {Array} array The array to inspect.\n     * @param {*} value The value to search for.\n     * @returns {number} Returns the index of the matched value, else `-1`.\n     * @example\n     *\n     * _.sortedLastIndexOf([4, 5, 5, 5, 6], 5);\n     * // => 3\n     */\n    function sortedLastIndexOf(array, value) {\n      var length = array == null ? 0 : array.length;\n      if (length) {\n        var index = baseSortedIndex(array, value, true) - 1;\n        if (eq(array[index], value)) {\n          return index;\n        }\n      }\n      return -1;\n    }\n\n    /**\n     * This method is like `_.uniq` except that it's designed and optimized\n     * for sorted arrays.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Array\n     * @param {Array} array The array to inspect.\n     * @returns {Array} Returns the new duplicate free array.\n     * @example\n     *\n     * _.sortedUniq([1, 1, 2]);\n     * // => [1, 2]\n     */\n    function sortedUniq(array) {\n      return (array && array.length)\n        ? baseSortedUniq(array)\n        : [];\n    }\n\n    /**\n     * This method is like `_.uniqBy` except that it's designed and optimized\n     * for sorted arrays.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Array\n     * @param {Array} array The array to inspect.\n     * @param {Function} [iteratee] The iteratee invoked per element.\n     * @returns {Array} Returns the new duplicate free array.\n     * @example\n     *\n     * _.sortedUniqBy([1.1, 1.2, 2.3, 2.4], Math.floor);\n     * // => [1.1, 2.3]\n     */\n    function sortedUniqBy(array, iteratee) {\n      return (array && array.length)\n        ? baseSortedUniq(array, getIteratee(iteratee, 2))\n        : [];\n    }\n\n    /**\n     * Gets all but the first element of `array`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Array\n     * @param {Array} array The array to query.\n     * @returns {Array} Returns the slice of `array`.\n     * @example\n     *\n     * _.tail([1, 2, 3]);\n     * // => [2, 3]\n     */\n    function tail(array) {\n      var length = array == null ? 0 : array.length;\n      return length ? baseSlice(array, 1, length) : [];\n    }\n\n    /**\n     * Creates a slice of `array` with `n` elements taken from the beginning.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Array\n     * @param {Array} array The array to query.\n     * @param {number} [n=1] The number of elements to take.\n     * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n     * @returns {Array} Returns the slice of `array`.\n     * @example\n     *\n     * _.take([1, 2, 3]);\n     * // => [1]\n     *\n     * _.take([1, 2, 3], 2);\n     * // => [1, 2]\n     *\n     * _.take([1, 2, 3], 5);\n     * // => [1, 2, 3]\n     *\n     * _.take([1, 2, 3], 0);\n     * // => []\n     */\n    function take(array, n, guard) {\n      if (!(array && array.length)) {\n        return [];\n      }\n      n = (guard || n === undefined) ? 1 : toInteger(n);\n      return baseSlice(array, 0, n < 0 ? 0 : n);\n    }\n\n    /**\n     * Creates a slice of `array` with `n` elements taken from the end.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category Array\n     * @param {Array} array The array to query.\n     * @param {number} [n=1] The number of elements to take.\n     * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n     * @returns {Array} Returns the slice of `array`.\n     * @example\n     *\n     * _.takeRight([1, 2, 3]);\n     * // => [3]\n     *\n     * _.takeRight([1, 2, 3], 2);\n     * // => [2, 3]\n     *\n     * _.takeRight([1, 2, 3], 5);\n     * // => [1, 2, 3]\n     *\n     * _.takeRight([1, 2, 3], 0);\n     * // => []\n     */\n    function takeRight(array, n, guard) {\n      var length = array == null ? 0 : array.length;\n      if (!length) {\n        return [];\n      }\n      n = (guard || n === undefined) ? 1 : toInteger(n);\n      n = length - n;\n      return baseSlice(array, n < 0 ? 0 : n, length);\n    }\n\n    /**\n     * Creates a slice of `array` with elements taken from the end. Elements are\n     * taken until `predicate` returns falsey. The predicate is invoked with\n     * three arguments: (value, index, array).\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category Array\n     * @param {Array} array The array to query.\n     * @param {Function} [predicate=_.identity] The function invoked per iteration.\n     * @returns {Array} Returns the slice of `array`.\n     * @example\n     *\n     * var users = [\n     *   { 'user': 'barney',  'active': true },\n     *   { 'user': 'fred',    'active': false },\n     *   { 'user': 'pebbles', 'active': false }\n     * ];\n     *\n     * _.takeRightWhile(users, function(o) { return !o.active; });\n     * // => objects for ['fred', 'pebbles']\n     *\n     * // The `_.matches` iteratee shorthand.\n     * _.takeRightWhile(users, { 'user': 'pebbles', 'active': false });\n     * // => objects for ['pebbles']\n     *\n     * // The `_.matchesProperty` iteratee shorthand.\n     * _.takeRightWhile(users, ['active', false]);\n     * // => objects for ['fred', 'pebbles']\n     *\n     * // The `_.property` iteratee shorthand.\n     * _.takeRightWhile(users, 'active');\n     * // => []\n     */\n    function takeRightWhile(array, predicate) {\n      return (array && array.length)\n        ? baseWhile(array, getIteratee(predicate, 3), false, true)\n        : [];\n    }\n\n    /**\n     * Creates a slice of `array` with elements taken from the beginning. Elements\n     * are taken until `predicate` returns falsey. The predicate is invoked with\n     * three arguments: (value, index, array).\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category Array\n     * @param {Array} array The array to query.\n     * @param {Function} [predicate=_.identity] The function invoked per iteration.\n     * @returns {Array} Returns the slice of `array`.\n     * @example\n     *\n     * var users = [\n     *   { 'user': 'barney',  'active': false },\n     *   { 'user': 'fred',    'active': false },\n     *   { 'user': 'pebbles', 'active': true }\n     * ];\n     *\n     * _.takeWhile(users, function(o) { return !o.active; });\n     * // => objects for ['barney', 'fred']\n     *\n     * // The `_.matches` iteratee shorthand.\n     * _.takeWhile(users, { 'user': 'barney', 'active': false });\n     * // => objects for ['barney']\n     *\n     * // The `_.matchesProperty` iteratee shorthand.\n     * _.takeWhile(users, ['active', false]);\n     * // => objects for ['barney', 'fred']\n     *\n     * // The `_.property` iteratee shorthand.\n     * _.takeWhile(users, 'active');\n     * // => []\n     */\n    function takeWhile(array, predicate) {\n      return (array && array.length)\n        ? baseWhile(array, getIteratee(predicate, 3))\n        : [];\n    }\n\n    /**\n     * Creates an array of unique values, in order, from all given arrays using\n     * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n     * for equality comparisons.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Array\n     * @param {...Array} [arrays] The arrays to inspect.\n     * @returns {Array} Returns the new array of combined values.\n     * @example\n     *\n     * _.union([2], [1, 2]);\n     * // => [2, 1]\n     */\n    var union = baseRest(function(arrays) {\n      return baseUniq(baseFlatten(arrays, 1, isArrayLikeObject, true));\n    });\n\n    /**\n     * This method is like `_.union` except that it accepts `iteratee` which is\n     * invoked for each element of each `arrays` to generate the criterion by\n     * which uniqueness is computed. Result values are chosen from the first\n     * array in which the value occurs. The iteratee is invoked with one argument:\n     * (value).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Array\n     * @param {...Array} [arrays] The arrays to inspect.\n     * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n     * @returns {Array} Returns the new array of combined values.\n     * @example\n     *\n     * _.unionBy([2.1], [1.2, 2.3], Math.floor);\n     * // => [2.1, 1.2]\n     *\n     * // The `_.property` iteratee shorthand.\n     * _.unionBy([{ 'x': 1 }], [{ 'x': 2 }, { 'x': 1 }], 'x');\n     * // => [{ 'x': 1 }, { 'x': 2 }]\n     */\n    var unionBy = baseRest(function(arrays) {\n      var iteratee = last(arrays);\n      if (isArrayLikeObject(iteratee)) {\n        iteratee = undefined;\n      }\n      return baseUniq(baseFlatten(arrays, 1, isArrayLikeObject, true), getIteratee(iteratee, 2));\n    });\n\n    /**\n     * This method is like `_.union` except that it accepts `comparator` which\n     * is invoked to compare elements of `arrays`. Result values are chosen from\n     * the first array in which the value occurs. The comparator is invoked\n     * with two arguments: (arrVal, othVal).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Array\n     * @param {...Array} [arrays] The arrays to inspect.\n     * @param {Function} [comparator] The comparator invoked per element.\n     * @returns {Array} Returns the new array of combined values.\n     * @example\n     *\n     * var objects = [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }];\n     * var others = [{ 'x': 1, 'y': 1 }, { 'x': 1, 'y': 2 }];\n     *\n     * _.unionWith(objects, others, _.isEqual);\n     * // => [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }, { 'x': 1, 'y': 1 }]\n     */\n    var unionWith = baseRest(function(arrays) {\n      var comparator = last(arrays);\n      comparator = typeof comparator == 'function' ? comparator : undefined;\n      return baseUniq(baseFlatten(arrays, 1, isArrayLikeObject, true), undefined, comparator);\n    });\n\n    /**\n     * Creates a duplicate-free version of an array, using\n     * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n     * for equality comparisons, in which only the first occurrence of each element\n     * is kept. The order of result values is determined by the order they occur\n     * in the array.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Array\n     * @param {Array} array The array to inspect.\n     * @returns {Array} Returns the new duplicate free array.\n     * @example\n     *\n     * _.uniq([2, 1, 2]);\n     * // => [2, 1]\n     */\n    function uniq(array) {\n      return (array && array.length) ? baseUniq(array) : [];\n    }\n\n    /**\n     * This method is like `_.uniq` except that it accepts `iteratee` which is\n     * invoked for each element in `array` to generate the criterion by which\n     * uniqueness is computed. The order of result values is determined by the\n     * order they occur in the array. The iteratee is invoked with one argument:\n     * (value).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Array\n     * @param {Array} array The array to inspect.\n     * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n     * @returns {Array} Returns the new duplicate free array.\n     * @example\n     *\n     * _.uniqBy([2.1, 1.2, 2.3], Math.floor);\n     * // => [2.1, 1.2]\n     *\n     * // The `_.property` iteratee shorthand.\n     * _.uniqBy([{ 'x': 1 }, { 'x': 2 }, { 'x': 1 }], 'x');\n     * // => [{ 'x': 1 }, { 'x': 2 }]\n     */\n    function uniqBy(array, iteratee) {\n      return (array && array.length) ? baseUniq(array, getIteratee(iteratee, 2)) : [];\n    }\n\n    /**\n     * This method is like `_.uniq` except that it accepts `comparator` which\n     * is invoked to compare elements of `array`. The order of result values is\n     * determined by the order they occur in the array.The comparator is invoked\n     * with two arguments: (arrVal, othVal).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Array\n     * @param {Array} array The array to inspect.\n     * @param {Function} [comparator] The comparator invoked per element.\n     * @returns {Array} Returns the new duplicate free array.\n     * @example\n     *\n     * var objects = [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }, { 'x': 1, 'y': 2 }];\n     *\n     * _.uniqWith(objects, _.isEqual);\n     * // => [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }]\n     */\n    function uniqWith(array, comparator) {\n      comparator = typeof comparator == 'function' ? comparator : undefined;\n      return (array && array.length) ? baseUniq(array, undefined, comparator) : [];\n    }\n\n    /**\n     * This method is like `_.zip` except that it accepts an array of grouped\n     * elements and creates an array regrouping the elements to their pre-zip\n     * configuration.\n     *\n     * @static\n     * @memberOf _\n     * @since 1.2.0\n     * @category Array\n     * @param {Array} array The array of grouped elements to process.\n     * @returns {Array} Returns the new array of regrouped elements.\n     * @example\n     *\n     * var zipped = _.zip(['a', 'b'], [1, 2], [true, false]);\n     * // => [['a', 1, true], ['b', 2, false]]\n     *\n     * _.unzip(zipped);\n     * // => [['a', 'b'], [1, 2], [true, false]]\n     */\n    function unzip(array) {\n      if (!(array && array.length)) {\n        return [];\n      }\n      var length = 0;\n      array = arrayFilter(array, function(group) {\n        if (isArrayLikeObject(group)) {\n          length = nativeMax(group.length, length);\n          return true;\n        }\n      });\n      return baseTimes(length, function(index) {\n        return arrayMap(array, baseProperty(index));\n      });\n    }\n\n    /**\n     * This method is like `_.unzip` except that it accepts `iteratee` to specify\n     * how regrouped values should be combined. The iteratee is invoked with the\n     * elements of each group: (...group).\n     *\n     * @static\n     * @memberOf _\n     * @since 3.8.0\n     * @category Array\n     * @param {Array} array The array of grouped elements to process.\n     * @param {Function} [iteratee=_.identity] The function to combine\n     *  regrouped values.\n     * @returns {Array} Returns the new array of regrouped elements.\n     * @example\n     *\n     * var zipped = _.zip([1, 2], [10, 20], [100, 200]);\n     * // => [[1, 10, 100], [2, 20, 200]]\n     *\n     * _.unzipWith(zipped, _.add);\n     * // => [3, 30, 300]\n     */\n    function unzipWith(array, iteratee) {\n      if (!(array && array.length)) {\n        return [];\n      }\n      var result = unzip(array);\n      if (iteratee == null) {\n        return result;\n      }\n      return arrayMap(result, function(group) {\n        return apply(iteratee, undefined, group);\n      });\n    }\n\n    /**\n     * Creates an array excluding all given values using\n     * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n     * for equality comparisons.\n     *\n     * **Note:** Unlike `_.pull`, this method returns a new array.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Array\n     * @param {Array} array The array to inspect.\n     * @param {...*} [values] The values to exclude.\n     * @returns {Array} Returns the new array of filtered values.\n     * @see _.difference, _.xor\n     * @example\n     *\n     * _.without([2, 1, 2, 3], 1, 2);\n     * // => [3]\n     */\n    var without = baseRest(function(array, values) {\n      return isArrayLikeObject(array)\n        ? baseDifference(array, values)\n        : [];\n    });\n\n    /**\n     * Creates an array of unique values that is the\n     * [symmetric difference](https://en.wikipedia.org/wiki/Symmetric_difference)\n     * of the given arrays. The order of result values is determined by the order\n     * they occur in the arrays.\n     *\n     * @static\n     * @memberOf _\n     * @since 2.4.0\n     * @category Array\n     * @param {...Array} [arrays] The arrays to inspect.\n     * @returns {Array} Returns the new array of filtered values.\n     * @see _.difference, _.without\n     * @example\n     *\n     * _.xor([2, 1], [2, 3]);\n     * // => [1, 3]\n     */\n    var xor = baseRest(function(arrays) {\n      return baseXor(arrayFilter(arrays, isArrayLikeObject));\n    });\n\n    /**\n     * This method is like `_.xor` except that it accepts `iteratee` which is\n     * invoked for each element of each `arrays` to generate the criterion by\n     * which by which they're compared. The order of result values is determined\n     * by the order they occur in the arrays. The iteratee is invoked with one\n     * argument: (value).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Array\n     * @param {...Array} [arrays] The arrays to inspect.\n     * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n     * @returns {Array} Returns the new array of filtered values.\n     * @example\n     *\n     * _.xorBy([2.1, 1.2], [2.3, 3.4], Math.floor);\n     * // => [1.2, 3.4]\n     *\n     * // The `_.property` iteratee shorthand.\n     * _.xorBy([{ 'x': 1 }], [{ 'x': 2 }, { 'x': 1 }], 'x');\n     * // => [{ 'x': 2 }]\n     */\n    var xorBy = baseRest(function(arrays) {\n      var iteratee = last(arrays);\n      if (isArrayLikeObject(iteratee)) {\n        iteratee = undefined;\n      }\n      return baseXor(arrayFilter(arrays, isArrayLikeObject), getIteratee(iteratee, 2));\n    });\n\n    /**\n     * This method is like `_.xor` except that it accepts `comparator` which is\n     * invoked to compare elements of `arrays`. The order of result values is\n     * determined by the order they occur in the arrays. The comparator is invoked\n     * with two arguments: (arrVal, othVal).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Array\n     * @param {...Array} [arrays] The arrays to inspect.\n     * @param {Function} [comparator] The comparator invoked per element.\n     * @returns {Array} Returns the new array of filtered values.\n     * @example\n     *\n     * var objects = [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }];\n     * var others = [{ 'x': 1, 'y': 1 }, { 'x': 1, 'y': 2 }];\n     *\n     * _.xorWith(objects, others, _.isEqual);\n     * // => [{ 'x': 2, 'y': 1 }, { 'x': 1, 'y': 1 }]\n     */\n    var xorWith = baseRest(function(arrays) {\n      var comparator = last(arrays);\n      comparator = typeof comparator == 'function' ? comparator : undefined;\n      return baseXor(arrayFilter(arrays, isArrayLikeObject), undefined, comparator);\n    });\n\n    /**\n     * Creates an array of grouped elements, the first of which contains the\n     * first elements of the given arrays, the second of which contains the\n     * second elements of the given arrays, and so on.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Array\n     * @param {...Array} [arrays] The arrays to process.\n     * @returns {Array} Returns the new array of grouped elements.\n     * @example\n     *\n     * _.zip(['a', 'b'], [1, 2], [true, false]);\n     * // => [['a', 1, true], ['b', 2, false]]\n     */\n    var zip = baseRest(unzip);\n\n    /**\n     * This method is like `_.fromPairs` except that it accepts two arrays,\n     * one of property identifiers and one of corresponding values.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.4.0\n     * @category Array\n     * @param {Array} [props=[]] The property identifiers.\n     * @param {Array} [values=[]] The property values.\n     * @returns {Object} Returns the new object.\n     * @example\n     *\n     * _.zipObject(['a', 'b'], [1, 2]);\n     * // => { 'a': 1, 'b': 2 }\n     */\n    function zipObject(props, values) {\n      return baseZipObject(props || [], values || [], assignValue);\n    }\n\n    /**\n     * This method is like `_.zipObject` except that it supports property paths.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.1.0\n     * @category Array\n     * @param {Array} [props=[]] The property identifiers.\n     * @param {Array} [values=[]] The property values.\n     * @returns {Object} Returns the new object.\n     * @example\n     *\n     * _.zipObjectDeep(['a.b[0].c', 'a.b[1].d'], [1, 2]);\n     * // => { 'a': { 'b': [{ 'c': 1 }, { 'd': 2 }] } }\n     */\n    function zipObjectDeep(props, values) {\n      return baseZipObject(props || [], values || [], baseSet);\n    }\n\n    /**\n     * This method is like `_.zip` except that it accepts `iteratee` to specify\n     * how grouped values should be combined. The iteratee is invoked with the\n     * elements of each group: (...group).\n     *\n     * @static\n     * @memberOf _\n     * @since 3.8.0\n     * @category Array\n     * @param {...Array} [arrays] The arrays to process.\n     * @param {Function} [iteratee=_.identity] The function to combine\n     *  grouped values.\n     * @returns {Array} Returns the new array of grouped elements.\n     * @example\n     *\n     * _.zipWith([1, 2], [10, 20], [100, 200], function(a, b, c) {\n     *   return a + b + c;\n     * });\n     * // => [111, 222]\n     */\n    var zipWith = baseRest(function(arrays) {\n      var length = arrays.length,\n          iteratee = length > 1 ? arrays[length - 1] : undefined;\n\n      iteratee = typeof iteratee == 'function' ? (arrays.pop(), iteratee) : undefined;\n      return unzipWith(arrays, iteratee);\n    });\n\n    /*------------------------------------------------------------------------*/\n\n    /**\n     * Creates a `lodash` wrapper instance that wraps `value` with explicit method\n     * chain sequences enabled. The result of such sequences must be unwrapped\n     * with `_#value`.\n     *\n     * @static\n     * @memberOf _\n     * @since 1.3.0\n     * @category Seq\n     * @param {*} value The value to wrap.\n     * @returns {Object} Returns the new `lodash` wrapper instance.\n     * @example\n     *\n     * var users = [\n     *   { 'user': 'barney',  'age': 36 },\n     *   { 'user': 'fred',    'age': 40 },\n     *   { 'user': 'pebbles', 'age': 1 }\n     * ];\n     *\n     * var youngest = _\n     *   .chain(users)\n     *   .sortBy('age')\n     *   .map(function(o) {\n     *     return o.user + ' is ' + o.age;\n     *   })\n     *   .head()\n     *   .value();\n     * // => 'pebbles is 1'\n     */\n    function chain(value) {\n      var result = lodash(value);\n      result.__chain__ = true;\n      return result;\n    }\n\n    /**\n     * This method invokes `interceptor` and returns `value`. The interceptor\n     * is invoked with one argument; (value). The purpose of this method is to\n     * \"tap into\" a method chain sequence in order to modify intermediate results.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Seq\n     * @param {*} value The value to provide to `interceptor`.\n     * @param {Function} interceptor The function to invoke.\n     * @returns {*} Returns `value`.\n     * @example\n     *\n     * _([1, 2, 3])\n     *  .tap(function(array) {\n     *    // Mutate input array.\n     *    array.pop();\n     *  })\n     *  .reverse()\n     *  .value();\n     * // => [2, 1]\n     */\n    function tap(value, interceptor) {\n      interceptor(value);\n      return value;\n    }\n\n    /**\n     * This method is like `_.tap` except that it returns the result of `interceptor`.\n     * The purpose of this method is to \"pass thru\" values replacing intermediate\n     * results in a method chain sequence.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category Seq\n     * @param {*} value The value to provide to `interceptor`.\n     * @param {Function} interceptor The function to invoke.\n     * @returns {*} Returns the result of `interceptor`.\n     * @example\n     *\n     * _('  abc  ')\n     *  .chain()\n     *  .trim()\n     *  .thru(function(value) {\n     *    return [value];\n     *  })\n     *  .value();\n     * // => ['abc']\n     */\n    function thru(value, interceptor) {\n      return interceptor(value);\n    }\n\n    /**\n     * This method is the wrapper version of `_.at`.\n     *\n     * @name at\n     * @memberOf _\n     * @since 1.0.0\n     * @category Seq\n     * @param {...(string|string[])} [paths] The property paths to pick.\n     * @returns {Object} Returns the new `lodash` wrapper instance.\n     * @example\n     *\n     * var object = { 'a': [{ 'b': { 'c': 3 } }, 4] };\n     *\n     * _(object).at(['a[0].b.c', 'a[1]']).value();\n     * // => [3, 4]\n     */\n    var wrapperAt = flatRest(function(paths) {\n      var length = paths.length,\n          start = length ? paths[0] : 0,\n          value = this.__wrapped__,\n          interceptor = function(object) { return baseAt(object, paths); };\n\n      if (length > 1 || this.__actions__.length ||\n          !(value instanceof LazyWrapper) || !isIndex(start)) {\n        return this.thru(interceptor);\n      }\n      value = value.slice(start, +start + (length ? 1 : 0));\n      value.__actions__.push({\n        'func': thru,\n        'args': [interceptor],\n        'thisArg': undefined\n      });\n      return new LodashWrapper(value, this.__chain__).thru(function(array) {\n        if (length && !array.length) {\n          array.push(undefined);\n        }\n        return array;\n      });\n    });\n\n    /**\n     * Creates a `lodash` wrapper instance with explicit method chain sequences enabled.\n     *\n     * @name chain\n     * @memberOf _\n     * @since 0.1.0\n     * @category Seq\n     * @returns {Object} Returns the new `lodash` wrapper instance.\n     * @example\n     *\n     * var users = [\n     *   { 'user': 'barney', 'age': 36 },\n     *   { 'user': 'fred',   'age': 40 }\n     * ];\n     *\n     * // A sequence without explicit chaining.\n     * _(users).head();\n     * // => { 'user': 'barney', 'age': 36 }\n     *\n     * // A sequence with explicit chaining.\n     * _(users)\n     *   .chain()\n     *   .head()\n     *   .pick('user')\n     *   .value();\n     * // => { 'user': 'barney' }\n     */\n    function wrapperChain() {\n      return chain(this);\n    }\n\n    /**\n     * Executes the chain sequence and returns the wrapped result.\n     *\n     * @name commit\n     * @memberOf _\n     * @since 3.2.0\n     * @category Seq\n     * @returns {Object} Returns the new `lodash` wrapper instance.\n     * @example\n     *\n     * var array = [1, 2];\n     * var wrapped = _(array).push(3);\n     *\n     * console.log(array);\n     * // => [1, 2]\n     *\n     * wrapped = wrapped.commit();\n     * console.log(array);\n     * // => [1, 2, 3]\n     *\n     * wrapped.last();\n     * // => 3\n     *\n     * console.log(array);\n     * // => [1, 2, 3]\n     */\n    function wrapperCommit() {\n      return new LodashWrapper(this.value(), this.__chain__);\n    }\n\n    /**\n     * Gets the next value on a wrapped object following the\n     * [iterator protocol](https://mdn.io/iteration_protocols#iterator).\n     *\n     * @name next\n     * @memberOf _\n     * @since 4.0.0\n     * @category Seq\n     * @returns {Object} Returns the next iterator value.\n     * @example\n     *\n     * var wrapped = _([1, 2]);\n     *\n     * wrapped.next();\n     * // => { 'done': false, 'value': 1 }\n     *\n     * wrapped.next();\n     * // => { 'done': false, 'value': 2 }\n     *\n     * wrapped.next();\n     * // => { 'done': true, 'value': undefined }\n     */\n    function wrapperNext() {\n      if (this.__values__ === undefined) {\n        this.__values__ = toArray(this.value());\n      }\n      var done = this.__index__ >= this.__values__.length,\n          value = done ? undefined : this.__values__[this.__index__++];\n\n      return { 'done': done, 'value': value };\n    }\n\n    /**\n     * Enables the wrapper to be iterable.\n     *\n     * @name Symbol.iterator\n     * @memberOf _\n     * @since 4.0.0\n     * @category Seq\n     * @returns {Object} Returns the wrapper object.\n     * @example\n     *\n     * var wrapped = _([1, 2]);\n     *\n     * wrapped[Symbol.iterator]() === wrapped;\n     * // => true\n     *\n     * Array.from(wrapped);\n     * // => [1, 2]\n     */\n    function wrapperToIterator() {\n      return this;\n    }\n\n    /**\n     * Creates a clone of the chain sequence planting `value` as the wrapped value.\n     *\n     * @name plant\n     * @memberOf _\n     * @since 3.2.0\n     * @category Seq\n     * @param {*} value The value to plant.\n     * @returns {Object} Returns the new `lodash` wrapper instance.\n     * @example\n     *\n     * function square(n) {\n     *   return n * n;\n     * }\n     *\n     * var wrapped = _([1, 2]).map(square);\n     * var other = wrapped.plant([3, 4]);\n     *\n     * other.value();\n     * // => [9, 16]\n     *\n     * wrapped.value();\n     * // => [1, 4]\n     */\n    function wrapperPlant(value) {\n      var result,\n          parent = this;\n\n      while (parent instanceof baseLodash) {\n        var clone = wrapperClone(parent);\n        clone.__index__ = 0;\n        clone.__values__ = undefined;\n        if (result) {\n          previous.__wrapped__ = clone;\n        } else {\n          result = clone;\n        }\n        var previous = clone;\n        parent = parent.__wrapped__;\n      }\n      previous.__wrapped__ = value;\n      return result;\n    }\n\n    /**\n     * This method is the wrapper version of `_.reverse`.\n     *\n     * **Note:** This method mutates the wrapped array.\n     *\n     * @name reverse\n     * @memberOf _\n     * @since 0.1.0\n     * @category Seq\n     * @returns {Object} Returns the new `lodash` wrapper instance.\n     * @example\n     *\n     * var array = [1, 2, 3];\n     *\n     * _(array).reverse().value()\n     * // => [3, 2, 1]\n     *\n     * console.log(array);\n     * // => [3, 2, 1]\n     */\n    function wrapperReverse() {\n      var value = this.__wrapped__;\n      if (value instanceof LazyWrapper) {\n        var wrapped = value;\n        if (this.__actions__.length) {\n          wrapped = new LazyWrapper(this);\n        }\n        wrapped = wrapped.reverse();\n        wrapped.__actions__.push({\n          'func': thru,\n          'args': [reverse],\n          'thisArg': undefined\n        });\n        return new LodashWrapper(wrapped, this.__chain__);\n      }\n      return this.thru(reverse);\n    }\n\n    /**\n     * Executes the chain sequence to resolve the unwrapped value.\n     *\n     * @name value\n     * @memberOf _\n     * @since 0.1.0\n     * @alias toJSON, valueOf\n     * @category Seq\n     * @returns {*} Returns the resolved unwrapped value.\n     * @example\n     *\n     * _([1, 2, 3]).value();\n     * // => [1, 2, 3]\n     */\n    function wrapperValue() {\n      return baseWrapperValue(this.__wrapped__, this.__actions__);\n    }\n\n    /*------------------------------------------------------------------------*/\n\n    /**\n     * Creates an object composed of keys generated from the results of running\n     * each element of `collection` thru `iteratee`. The corresponding value of\n     * each key is the number of times the key was returned by `iteratee`. The\n     * iteratee is invoked with one argument: (value).\n     *\n     * @static\n     * @memberOf _\n     * @since 0.5.0\n     * @category Collection\n     * @param {Array|Object} collection The collection to iterate over.\n     * @param {Function} [iteratee=_.identity] The iteratee to transform keys.\n     * @returns {Object} Returns the composed aggregate object.\n     * @example\n     *\n     * _.countBy([6.1, 4.2, 6.3], Math.floor);\n     * // => { '4': 1, '6': 2 }\n     *\n     * // The `_.property` iteratee shorthand.\n     * _.countBy(['one', 'two', 'three'], 'length');\n     * // => { '3': 2, '5': 1 }\n     */\n    var countBy = createAggregator(function(result, value, key) {\n      if (hasOwnProperty.call(result, key)) {\n        ++result[key];\n      } else {\n        baseAssignValue(result, key, 1);\n      }\n    });\n\n    /**\n     * Checks if `predicate` returns truthy for **all** elements of `collection`.\n     * Iteration is stopped once `predicate` returns falsey. The predicate is\n     * invoked with three arguments: (value, index|key, collection).\n     *\n     * **Note:** This method returns `true` for\n     * [empty collections](https://en.wikipedia.org/wiki/Empty_set) because\n     * [everything is true](https://en.wikipedia.org/wiki/Vacuous_truth) of\n     * elements of empty collections.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Collection\n     * @param {Array|Object} collection The collection to iterate over.\n     * @param {Function} [predicate=_.identity] The function invoked per iteration.\n     * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n     * @returns {boolean} Returns `true` if all elements pass the predicate check,\n     *  else `false`.\n     * @example\n     *\n     * _.every([true, 1, null, 'yes'], Boolean);\n     * // => false\n     *\n     * var users = [\n     *   { 'user': 'barney', 'age': 36, 'active': false },\n     *   { 'user': 'fred',   'age': 40, 'active': false }\n     * ];\n     *\n     * // The `_.matches` iteratee shorthand.\n     * _.every(users, { 'user': 'barney', 'active': false });\n     * // => false\n     *\n     * // The `_.matchesProperty` iteratee shorthand.\n     * _.every(users, ['active', false]);\n     * // => true\n     *\n     * // The `_.property` iteratee shorthand.\n     * _.every(users, 'active');\n     * // => false\n     */\n    function every(collection, predicate, guard) {\n      var func = isArray(collection) ? arrayEvery : baseEvery;\n      if (guard && isIterateeCall(collection, predicate, guard)) {\n        predicate = undefined;\n      }\n      return func(collection, getIteratee(predicate, 3));\n    }\n\n    /**\n     * Iterates over elements of `collection`, returning an array of all elements\n     * `predicate` returns truthy for. The predicate is invoked with three\n     * arguments: (value, index|key, collection).\n     *\n     * **Note:** Unlike `_.remove`, this method returns a new array.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Collection\n     * @param {Array|Object} collection The collection to iterate over.\n     * @param {Function} [predicate=_.identity] The function invoked per iteration.\n     * @returns {Array} Returns the new filtered array.\n     * @see _.reject\n     * @example\n     *\n     * var users = [\n     *   { 'user': 'barney', 'age': 36, 'active': true },\n     *   { 'user': 'fred',   'age': 40, 'active': false }\n     * ];\n     *\n     * _.filter(users, function(o) { return !o.active; });\n     * // => objects for ['fred']\n     *\n     * // The `_.matches` iteratee shorthand.\n     * _.filter(users, { 'age': 36, 'active': true });\n     * // => objects for ['barney']\n     *\n     * // The `_.matchesProperty` iteratee shorthand.\n     * _.filter(users, ['active', false]);\n     * // => objects for ['fred']\n     *\n     * // The `_.property` iteratee shorthand.\n     * _.filter(users, 'active');\n     * // => objects for ['barney']\n     *\n     * // Combining several predicates using `_.overEvery` or `_.overSome`.\n     * _.filter(users, _.overSome([{ 'age': 36 }, ['age', 40]]));\n     * // => objects for ['fred', 'barney']\n     */\n    function filter(collection, predicate) {\n      var func = isArray(collection) ? arrayFilter : baseFilter;\n      return func(collection, getIteratee(predicate, 3));\n    }\n\n    /**\n     * Iterates over elements of `collection`, returning the first element\n     * `predicate` returns truthy for. The predicate is invoked with three\n     * arguments: (value, index|key, collection).\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Collection\n     * @param {Array|Object} collection The collection to inspect.\n     * @param {Function} [predicate=_.identity] The function invoked per iteration.\n     * @param {number} [fromIndex=0] The index to search from.\n     * @returns {*} Returns the matched element, else `undefined`.\n     * @example\n     *\n     * var users = [\n     *   { 'user': 'barney',  'age': 36, 'active': true },\n     *   { 'user': 'fred',    'age': 40, 'active': false },\n     *   { 'user': 'pebbles', 'age': 1,  'active': true }\n     * ];\n     *\n     * _.find(users, function(o) { return o.age < 40; });\n     * // => object for 'barney'\n     *\n     * // The `_.matches` iteratee shorthand.\n     * _.find(users, { 'age': 1, 'active': true });\n     * // => object for 'pebbles'\n     *\n     * // The `_.matchesProperty` iteratee shorthand.\n     * _.find(users, ['active', false]);\n     * // => object for 'fred'\n     *\n     * // The `_.property` iteratee shorthand.\n     * _.find(users, 'active');\n     * // => object for 'barney'\n     */\n    var find = createFind(findIndex);\n\n    /**\n     * This method is like `_.find` except that it iterates over elements of\n     * `collection` from right to left.\n     *\n     * @static\n     * @memberOf _\n     * @since 2.0.0\n     * @category Collection\n     * @param {Array|Object} collection The collection to inspect.\n     * @param {Function} [predicate=_.identity] The function invoked per iteration.\n     * @param {number} [fromIndex=collection.length-1] The index to search from.\n     * @returns {*} Returns the matched element, else `undefined`.\n     * @example\n     *\n     * _.findLast([1, 2, 3, 4], function(n) {\n     *   return n % 2 == 1;\n     * });\n     * // => 3\n     */\n    var findLast = createFind(findLastIndex);\n\n    /**\n     * Creates a flattened array of values by running each element in `collection`\n     * thru `iteratee` and flattening the mapped results. The iteratee is invoked\n     * with three arguments: (value, index|key, collection).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Collection\n     * @param {Array|Object} collection The collection to iterate over.\n     * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n     * @returns {Array} Returns the new flattened array.\n     * @example\n     *\n     * function duplicate(n) {\n     *   return [n, n];\n     * }\n     *\n     * _.flatMap([1, 2], duplicate);\n     * // => [1, 1, 2, 2]\n     */\n    function flatMap(collection, iteratee) {\n      return baseFlatten(map(collection, iteratee), 1);\n    }\n\n    /**\n     * This method is like `_.flatMap` except that it recursively flattens the\n     * mapped results.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.7.0\n     * @category Collection\n     * @param {Array|Object} collection The collection to iterate over.\n     * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n     * @returns {Array} Returns the new flattened array.\n     * @example\n     *\n     * function duplicate(n) {\n     *   return [[[n, n]]];\n     * }\n     *\n     * _.flatMapDeep([1, 2], duplicate);\n     * // => [1, 1, 2, 2]\n     */\n    function flatMapDeep(collection, iteratee) {\n      return baseFlatten(map(collection, iteratee), INFINITY);\n    }\n\n    /**\n     * This method is like `_.flatMap` except that it recursively flattens the\n     * mapped results up to `depth` times.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.7.0\n     * @category Collection\n     * @param {Array|Object} collection The collection to iterate over.\n     * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n     * @param {number} [depth=1] The maximum recursion depth.\n     * @returns {Array} Returns the new flattened array.\n     * @example\n     *\n     * function duplicate(n) {\n     *   return [[[n, n]]];\n     * }\n     *\n     * _.flatMapDepth([1, 2], duplicate, 2);\n     * // => [[1, 1], [2, 2]]\n     */\n    function flatMapDepth(collection, iteratee, depth) {\n      depth = depth === undefined ? 1 : toInteger(depth);\n      return baseFlatten(map(collection, iteratee), depth);\n    }\n\n    /**\n     * Iterates over elements of `collection` and invokes `iteratee` for each element.\n     * The iteratee is invoked with three arguments: (value, index|key, collection).\n     * Iteratee functions may exit iteration early by explicitly returning `false`.\n     *\n     * **Note:** As with other \"Collections\" methods, objects with a \"length\"\n     * property are iterated like arrays. To avoid this behavior use `_.forIn`\n     * or `_.forOwn` for object iteration.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @alias each\n     * @category Collection\n     * @param {Array|Object} collection The collection to iterate over.\n     * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n     * @returns {Array|Object} Returns `collection`.\n     * @see _.forEachRight\n     * @example\n     *\n     * _.forEach([1, 2], function(value) {\n     *   console.log(value);\n     * });\n     * // => Logs `1` then `2`.\n     *\n     * _.forEach({ 'a': 1, 'b': 2 }, function(value, key) {\n     *   console.log(key);\n     * });\n     * // => Logs 'a' then 'b' (iteration order is not guaranteed).\n     */\n    function forEach(collection, iteratee) {\n      var func = isArray(collection) ? arrayEach : baseEach;\n      return func(collection, getIteratee(iteratee, 3));\n    }\n\n    /**\n     * This method is like `_.forEach` except that it iterates over elements of\n     * `collection` from right to left.\n     *\n     * @static\n     * @memberOf _\n     * @since 2.0.0\n     * @alias eachRight\n     * @category Collection\n     * @param {Array|Object} collection The collection to iterate over.\n     * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n     * @returns {Array|Object} Returns `collection`.\n     * @see _.forEach\n     * @example\n     *\n     * _.forEachRight([1, 2], function(value) {\n     *   console.log(value);\n     * });\n     * // => Logs `2` then `1`.\n     */\n    function forEachRight(collection, iteratee) {\n      var func = isArray(collection) ? arrayEachRight : baseEachRight;\n      return func(collection, getIteratee(iteratee, 3));\n    }\n\n    /**\n     * Creates an object composed of keys generated from the results of running\n     * each element of `collection` thru `iteratee`. The order of grouped values\n     * is determined by the order they occur in `collection`. The corresponding\n     * value of each key is an array of elements responsible for generating the\n     * key. The iteratee is invoked with one argument: (value).\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Collection\n     * @param {Array|Object} collection The collection to iterate over.\n     * @param {Function} [iteratee=_.identity] The iteratee to transform keys.\n     * @returns {Object} Returns the composed aggregate object.\n     * @example\n     *\n     * _.groupBy([6.1, 4.2, 6.3], Math.floor);\n     * // => { '4': [4.2], '6': [6.1, 6.3] }\n     *\n     * // The `_.property` iteratee shorthand.\n     * _.groupBy(['one', 'two', 'three'], 'length');\n     * // => { '3': ['one', 'two'], '5': ['three'] }\n     */\n    var groupBy = createAggregator(function(result, value, key) {\n      if (hasOwnProperty.call(result, key)) {\n        result[key].push(value);\n      } else {\n        baseAssignValue(result, key, [value]);\n      }\n    });\n\n    /**\n     * Checks if `value` is in `collection`. If `collection` is a string, it's\n     * checked for a substring of `value`, otherwise\n     * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n     * is used for equality comparisons. If `fromIndex` is negative, it's used as\n     * the offset from the end of `collection`.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Collection\n     * @param {Array|Object|string} collection The collection to inspect.\n     * @param {*} value The value to search for.\n     * @param {number} [fromIndex=0] The index to search from.\n     * @param- {Object} [guard] Enables use as an iteratee for methods like `_.reduce`.\n     * @returns {boolean} Returns `true` if `value` is found, else `false`.\n     * @example\n     *\n     * _.includes([1, 2, 3], 1);\n     * // => true\n     *\n     * _.includes([1, 2, 3], 1, 2);\n     * // => false\n     *\n     * _.includes({ 'a': 1, 'b': 2 }, 1);\n     * // => true\n     *\n     * _.includes('abcd', 'bc');\n     * // => true\n     */\n    function includes(collection, value, fromIndex, guard) {\n      collection = isArrayLike(collection) ? collection : values(collection);\n      fromIndex = (fromIndex && !guard) ? toInteger(fromIndex) : 0;\n\n      var length = collection.length;\n      if (fromIndex < 0) {\n        fromIndex = nativeMax(length + fromIndex, 0);\n      }\n      return isString(collection)\n        ? (fromIndex <= length && collection.indexOf(value, fromIndex) > -1)\n        : (!!length && baseIndexOf(collection, value, fromIndex) > -1);\n    }\n\n    /**\n     * Invokes the method at `path` of each element in `collection`, returning\n     * an array of the results of each invoked method. Any additional arguments\n     * are provided to each invoked method. If `path` is a function, it's invoked\n     * for, and `this` bound to, each element in `collection`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Collection\n     * @param {Array|Object} collection The collection to iterate over.\n     * @param {Array|Function|string} path The path of the method to invoke or\n     *  the function invoked per iteration.\n     * @param {...*} [args] The arguments to invoke each method with.\n     * @returns {Array} Returns the array of results.\n     * @example\n     *\n     * _.invokeMap([[5, 1, 7], [3, 2, 1]], 'sort');\n     * // => [[1, 5, 7], [1, 2, 3]]\n     *\n     * _.invokeMap([123, 456], String.prototype.split, '');\n     * // => [['1', '2', '3'], ['4', '5', '6']]\n     */\n    var invokeMap = baseRest(function(collection, path, args) {\n      var index = -1,\n          isFunc = typeof path == 'function',\n          result = isArrayLike(collection) ? Array(collection.length) : [];\n\n      baseEach(collection, function(value) {\n        result[++index] = isFunc ? apply(path, value, args) : baseInvoke(value, path, args);\n      });\n      return result;\n    });\n\n    /**\n     * Creates an object composed of keys generated from the results of running\n     * each element of `collection` thru `iteratee`. The corresponding value of\n     * each key is the last element responsible for generating the key. The\n     * iteratee is invoked with one argument: (value).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Collection\n     * @param {Array|Object} collection The collection to iterate over.\n     * @param {Function} [iteratee=_.identity] The iteratee to transform keys.\n     * @returns {Object} Returns the composed aggregate object.\n     * @example\n     *\n     * var array = [\n     *   { 'dir': 'left', 'code': 97 },\n     *   { 'dir': 'right', 'code': 100 }\n     * ];\n     *\n     * _.keyBy(array, function(o) {\n     *   return String.fromCharCode(o.code);\n     * });\n     * // => { 'a': { 'dir': 'left', 'code': 97 }, 'd': { 'dir': 'right', 'code': 100 } }\n     *\n     * _.keyBy(array, 'dir');\n     * // => { 'left': { 'dir': 'left', 'code': 97 }, 'right': { 'dir': 'right', 'code': 100 } }\n     */\n    var keyBy = createAggregator(function(result, value, key) {\n      baseAssignValue(result, key, value);\n    });\n\n    /**\n     * Creates an array of values by running each element in `collection` thru\n     * `iteratee`. The iteratee is invoked with three arguments:\n     * (value, index|key, collection).\n     *\n     * Many lodash methods are guarded to work as iteratees for methods like\n     * `_.every`, `_.filter`, `_.map`, `_.mapValues`, `_.reject`, and `_.some`.\n     *\n     * The guarded methods are:\n     * `ary`, `chunk`, `curry`, `curryRight`, `drop`, `dropRight`, `every`,\n     * `fill`, `invert`, `parseInt`, `random`, `range`, `rangeRight`, `repeat`,\n     * `sampleSize`, `slice`, `some`, `sortBy`, `split`, `take`, `takeRight`,\n     * `template`, `trim`, `trimEnd`, `trimStart`, and `words`\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Collection\n     * @param {Array|Object} collection The collection to iterate over.\n     * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n     * @returns {Array} Returns the new mapped array.\n     * @example\n     *\n     * function square(n) {\n     *   return n * n;\n     * }\n     *\n     * _.map([4, 8], square);\n     * // => [16, 64]\n     *\n     * _.map({ 'a': 4, 'b': 8 }, square);\n     * // => [16, 64] (iteration order is not guaranteed)\n     *\n     * var users = [\n     *   { 'user': 'barney' },\n     *   { 'user': 'fred' }\n     * ];\n     *\n     * // The `_.property` iteratee shorthand.\n     * _.map(users, 'user');\n     * // => ['barney', 'fred']\n     */\n    function map(collection, iteratee) {\n      var func = isArray(collection) ? arrayMap : baseMap;\n      return func(collection, getIteratee(iteratee, 3));\n    }\n\n    /**\n     * This method is like `_.sortBy` except that it allows specifying the sort\n     * orders of the iteratees to sort by. If `orders` is unspecified, all values\n     * are sorted in ascending order. Otherwise, specify an order of \"desc\" for\n     * descending or \"asc\" for ascending sort order of corresponding values.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Collection\n     * @param {Array|Object} collection The collection to iterate over.\n     * @param {Array[]|Function[]|Object[]|string[]} [iteratees=[_.identity]]\n     *  The iteratees to sort by.\n     * @param {string[]} [orders] The sort orders of `iteratees`.\n     * @param- {Object} [guard] Enables use as an iteratee for methods like `_.reduce`.\n     * @returns {Array} Returns the new sorted array.\n     * @example\n     *\n     * var users = [\n     *   { 'user': 'fred',   'age': 48 },\n     *   { 'user': 'barney', 'age': 34 },\n     *   { 'user': 'fred',   'age': 40 },\n     *   { 'user': 'barney', 'age': 36 }\n     * ];\n     *\n     * // Sort by `user` in ascending order and by `age` in descending order.\n     * _.orderBy(users, ['user', 'age'], ['asc', 'desc']);\n     * // => objects for [['barney', 36], ['barney', 34], ['fred', 48], ['fred', 40]]\n     */\n    function orderBy(collection, iteratees, orders, guard) {\n      if (collection == null) {\n        return [];\n      }\n      if (!isArray(iteratees)) {\n        iteratees = iteratees == null ? [] : [iteratees];\n      }\n      orders = guard ? undefined : orders;\n      if (!isArray(orders)) {\n        orders = orders == null ? [] : [orders];\n      }\n      return baseOrderBy(collection, iteratees, orders);\n    }\n\n    /**\n     * Creates an array of elements split into two groups, the first of which\n     * contains elements `predicate` returns truthy for, the second of which\n     * contains elements `predicate` returns falsey for. The predicate is\n     * invoked with one argument: (value).\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category Collection\n     * @param {Array|Object} collection The collection to iterate over.\n     * @param {Function} [predicate=_.identity] The function invoked per iteration.\n     * @returns {Array} Returns the array of grouped elements.\n     * @example\n     *\n     * var users = [\n     *   { 'user': 'barney',  'age': 36, 'active': false },\n     *   { 'user': 'fred',    'age': 40, 'active': true },\n     *   { 'user': 'pebbles', 'age': 1,  'active': false }\n     * ];\n     *\n     * _.partition(users, function(o) { return o.active; });\n     * // => objects for [['fred'], ['barney', 'pebbles']]\n     *\n     * // The `_.matches` iteratee shorthand.\n     * _.partition(users, { 'age': 1, 'active': false });\n     * // => objects for [['pebbles'], ['barney', 'fred']]\n     *\n     * // The `_.matchesProperty` iteratee shorthand.\n     * _.partition(users, ['active', false]);\n     * // => objects for [['barney', 'pebbles'], ['fred']]\n     *\n     * // The `_.property` iteratee shorthand.\n     * _.partition(users, 'active');\n     * // => objects for [['fred'], ['barney', 'pebbles']]\n     */\n    var partition = createAggregator(function(result, value, key) {\n      result[key ? 0 : 1].push(value);\n    }, function() { return [[], []]; });\n\n    /**\n     * Reduces `collection` to a value which is the accumulated result of running\n     * each element in `collection` thru `iteratee`, where each successive\n     * invocation is supplied the return value of the previous. If `accumulator`\n     * is not given, the first element of `collection` is used as the initial\n     * value. The iteratee is invoked with four arguments:\n     * (accumulator, value, index|key, collection).\n     *\n     * Many lodash methods are guarded to work as iteratees for methods like\n     * `_.reduce`, `_.reduceRight`, and `_.transform`.\n     *\n     * The guarded methods are:\n     * `assign`, `defaults`, `defaultsDeep`, `includes`, `merge`, `orderBy`,\n     * and `sortBy`\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Collection\n     * @param {Array|Object} collection The collection to iterate over.\n     * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n     * @param {*} [accumulator] The initial value.\n     * @returns {*} Returns the accumulated value.\n     * @see _.reduceRight\n     * @example\n     *\n     * _.reduce([1, 2], function(sum, n) {\n     *   return sum + n;\n     * }, 0);\n     * // => 3\n     *\n     * _.reduce({ 'a': 1, 'b': 2, 'c': 1 }, function(result, value, key) {\n     *   (result[value] || (result[value] = [])).push(key);\n     *   return result;\n     * }, {});\n     * // => { '1': ['a', 'c'], '2': ['b'] } (iteration order is not guaranteed)\n     */\n    function reduce(collection, iteratee, accumulator) {\n      var func = isArray(collection) ? arrayReduce : baseReduce,\n          initAccum = arguments.length < 3;\n\n      return func(collection, getIteratee(iteratee, 4), accumulator, initAccum, baseEach);\n    }\n\n    /**\n     * This method is like `_.reduce` except that it iterates over elements of\n     * `collection` from right to left.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Collection\n     * @param {Array|Object} collection The collection to iterate over.\n     * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n     * @param {*} [accumulator] The initial value.\n     * @returns {*} Returns the accumulated value.\n     * @see _.reduce\n     * @example\n     *\n     * var array = [[0, 1], [2, 3], [4, 5]];\n     *\n     * _.reduceRight(array, function(flattened, other) {\n     *   return flattened.concat(other);\n     * }, []);\n     * // => [4, 5, 2, 3, 0, 1]\n     */\n    function reduceRight(collection, iteratee, accumulator) {\n      var func = isArray(collection) ? arrayReduceRight : baseReduce,\n          initAccum = arguments.length < 3;\n\n      return func(collection, getIteratee(iteratee, 4), accumulator, initAccum, baseEachRight);\n    }\n\n    /**\n     * The opposite of `_.filter`; this method returns the elements of `collection`\n     * that `predicate` does **not** return truthy for.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Collection\n     * @param {Array|Object} collection The collection to iterate over.\n     * @param {Function} [predicate=_.identity] The function invoked per iteration.\n     * @returns {Array} Returns the new filtered array.\n     * @see _.filter\n     * @example\n     *\n     * var users = [\n     *   { 'user': 'barney', 'age': 36, 'active': false },\n     *   { 'user': 'fred',   'age': 40, 'active': true }\n     * ];\n     *\n     * _.reject(users, function(o) { return !o.active; });\n     * // => objects for ['fred']\n     *\n     * // The `_.matches` iteratee shorthand.\n     * _.reject(users, { 'age': 40, 'active': true });\n     * // => objects for ['barney']\n     *\n     * // The `_.matchesProperty` iteratee shorthand.\n     * _.reject(users, ['active', false]);\n     * // => objects for ['fred']\n     *\n     * // The `_.property` iteratee shorthand.\n     * _.reject(users, 'active');\n     * // => objects for ['barney']\n     */\n    function reject(collection, predicate) {\n      var func = isArray(collection) ? arrayFilter : baseFilter;\n      return func(collection, negate(getIteratee(predicate, 3)));\n    }\n\n    /**\n     * Gets a random element from `collection`.\n     *\n     * @static\n     * @memberOf _\n     * @since 2.0.0\n     * @category Collection\n     * @param {Array|Object} collection The collection to sample.\n     * @returns {*} Returns the random element.\n     * @example\n     *\n     * _.sample([1, 2, 3, 4]);\n     * // => 2\n     */\n    function sample(collection) {\n      var func = isArray(collection) ? arraySample : baseSample;\n      return func(collection);\n    }\n\n    /**\n     * Gets `n` random elements at unique keys from `collection` up to the\n     * size of `collection`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Collection\n     * @param {Array|Object} collection The collection to sample.\n     * @param {number} [n=1] The number of elements to sample.\n     * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n     * @returns {Array} Returns the random elements.\n     * @example\n     *\n     * _.sampleSize([1, 2, 3], 2);\n     * // => [3, 1]\n     *\n     * _.sampleSize([1, 2, 3], 4);\n     * // => [2, 3, 1]\n     */\n    function sampleSize(collection, n, guard) {\n      if ((guard ? isIterateeCall(collection, n, guard) : n === undefined)) {\n        n = 1;\n      } else {\n        n = toInteger(n);\n      }\n      var func = isArray(collection) ? arraySampleSize : baseSampleSize;\n      return func(collection, n);\n    }\n\n    /**\n     * Creates an array of shuffled values, using a version of the\n     * [Fisher-Yates shuffle](https://en.wikipedia.org/wiki/Fisher-Yates_shuffle).\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Collection\n     * @param {Array|Object} collection The collection to shuffle.\n     * @returns {Array} Returns the new shuffled array.\n     * @example\n     *\n     * _.shuffle([1, 2, 3, 4]);\n     * // => [4, 1, 3, 2]\n     */\n    function shuffle(collection) {\n      var func = isArray(collection) ? arrayShuffle : baseShuffle;\n      return func(collection);\n    }\n\n    /**\n     * Gets the size of `collection` by returning its length for array-like\n     * values or the number of own enumerable string keyed properties for objects.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Collection\n     * @param {Array|Object|string} collection The collection to inspect.\n     * @returns {number} Returns the collection size.\n     * @example\n     *\n     * _.size([1, 2, 3]);\n     * // => 3\n     *\n     * _.size({ 'a': 1, 'b': 2 });\n     * // => 2\n     *\n     * _.size('pebbles');\n     * // => 7\n     */\n    function size(collection) {\n      if (collection == null) {\n        return 0;\n      }\n      if (isArrayLike(collection)) {\n        return isString(collection) ? stringSize(collection) : collection.length;\n      }\n      var tag = getTag(collection);\n      if (tag == mapTag || tag == setTag) {\n        return collection.size;\n      }\n      return baseKeys(collection).length;\n    }\n\n    /**\n     * Checks if `predicate` returns truthy for **any** element of `collection`.\n     * Iteration is stopped once `predicate` returns truthy. The predicate is\n     * invoked with three arguments: (value, index|key, collection).\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Collection\n     * @param {Array|Object} collection The collection to iterate over.\n     * @param {Function} [predicate=_.identity] The function invoked per iteration.\n     * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n     * @returns {boolean} Returns `true` if any element passes the predicate check,\n     *  else `false`.\n     * @example\n     *\n     * _.some([null, 0, 'yes', false], Boolean);\n     * // => true\n     *\n     * var users = [\n     *   { 'user': 'barney', 'active': true },\n     *   { 'user': 'fred',   'active': false }\n     * ];\n     *\n     * // The `_.matches` iteratee shorthand.\n     * _.some(users, { 'user': 'barney', 'active': false });\n     * // => false\n     *\n     * // The `_.matchesProperty` iteratee shorthand.\n     * _.some(users, ['active', false]);\n     * // => true\n     *\n     * // The `_.property` iteratee shorthand.\n     * _.some(users, 'active');\n     * // => true\n     */\n    function some(collection, predicate, guard) {\n      var func = isArray(collection) ? arraySome : baseSome;\n      if (guard && isIterateeCall(collection, predicate, guard)) {\n        predicate = undefined;\n      }\n      return func(collection, getIteratee(predicate, 3));\n    }\n\n    /**\n     * Creates an array of elements, sorted in ascending order by the results of\n     * running each element in a collection thru each iteratee. This method\n     * performs a stable sort, that is, it preserves the original sort order of\n     * equal elements. The iteratees are invoked with one argument: (value).\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Collection\n     * @param {Array|Object} collection The collection to iterate over.\n     * @param {...(Function|Function[])} [iteratees=[_.identity]]\n     *  The iteratees to sort by.\n     * @returns {Array} Returns the new sorted array.\n     * @example\n     *\n     * var users = [\n     *   { 'user': 'fred',   'age': 48 },\n     *   { 'user': 'barney', 'age': 36 },\n     *   { 'user': 'fred',   'age': 30 },\n     *   { 'user': 'barney', 'age': 34 }\n     * ];\n     *\n     * _.sortBy(users, [function(o) { return o.user; }]);\n     * // => objects for [['barney', 36], ['barney', 34], ['fred', 48], ['fred', 30]]\n     *\n     * _.sortBy(users, ['user', 'age']);\n     * // => objects for [['barney', 34], ['barney', 36], ['fred', 30], ['fred', 48]]\n     */\n    var sortBy = baseRest(function(collection, iteratees) {\n      if (collection == null) {\n        return [];\n      }\n      var length = iteratees.length;\n      if (length > 1 && isIterateeCall(collection, iteratees[0], iteratees[1])) {\n        iteratees = [];\n      } else if (length > 2 && isIterateeCall(iteratees[0], iteratees[1], iteratees[2])) {\n        iteratees = [iteratees[0]];\n      }\n      return baseOrderBy(collection, baseFlatten(iteratees, 1), []);\n    });\n\n    /*------------------------------------------------------------------------*/\n\n    /**\n     * Gets the timestamp of the number of milliseconds that have elapsed since\n     * the Unix epoch (1 January 1970 00:00:00 UTC).\n     *\n     * @static\n     * @memberOf _\n     * @since 2.4.0\n     * @category Date\n     * @returns {number} Returns the timestamp.\n     * @example\n     *\n     * _.defer(function(stamp) {\n     *   console.log(_.now() - stamp);\n     * }, _.now());\n     * // => Logs the number of milliseconds it took for the deferred invocation.\n     */\n    var now = ctxNow || function() {\n      return root.Date.now();\n    };\n\n    /*------------------------------------------------------------------------*/\n\n    /**\n     * The opposite of `_.before`; this method creates a function that invokes\n     * `func` once it's called `n` or more times.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Function\n     * @param {number} n The number of calls before `func` is invoked.\n     * @param {Function} func The function to restrict.\n     * @returns {Function} Returns the new restricted function.\n     * @example\n     *\n     * var saves = ['profile', 'settings'];\n     *\n     * var done = _.after(saves.length, function() {\n     *   console.log('done saving!');\n     * });\n     *\n     * _.forEach(saves, function(type) {\n     *   asyncSave({ 'type': type, 'complete': done });\n     * });\n     * // => Logs 'done saving!' after the two async saves have completed.\n     */\n    function after(n, func) {\n      if (typeof func != 'function') {\n        throw new TypeError(FUNC_ERROR_TEXT);\n      }\n      n = toInteger(n);\n      return function() {\n        if (--n < 1) {\n          return func.apply(this, arguments);\n        }\n      };\n    }\n\n    /**\n     * Creates a function that invokes `func`, with up to `n` arguments,\n     * ignoring any additional arguments.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category Function\n     * @param {Function} func The function to cap arguments for.\n     * @param {number} [n=func.length] The arity cap.\n     * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n     * @returns {Function} Returns the new capped function.\n     * @example\n     *\n     * _.map(['6', '8', '10'], _.ary(parseInt, 1));\n     * // => [6, 8, 10]\n     */\n    function ary(func, n, guard) {\n      n = guard ? undefined : n;\n      n = (func && n == null) ? func.length : n;\n      return createWrap(func, WRAP_ARY_FLAG, undefined, undefined, undefined, undefined, n);\n    }\n\n    /**\n     * Creates a function that invokes `func`, with the `this` binding and arguments\n     * of the created function, while it's called less than `n` times. Subsequent\n     * calls to the created function return the result of the last `func` invocation.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category Function\n     * @param {number} n The number of calls at which `func` is no longer invoked.\n     * @param {Function} func The function to restrict.\n     * @returns {Function} Returns the new restricted function.\n     * @example\n     *\n     * jQuery(element).on('click', _.before(5, addContactToList));\n     * // => Allows adding up to 4 contacts to the list.\n     */\n    function before(n, func) {\n      var result;\n      if (typeof func != 'function') {\n        throw new TypeError(FUNC_ERROR_TEXT);\n      }\n      n = toInteger(n);\n      return function() {\n        if (--n > 0) {\n          result = func.apply(this, arguments);\n        }\n        if (n <= 1) {\n          func = undefined;\n        }\n        return result;\n      };\n    }\n\n    /**\n     * Creates a function that invokes `func` with the `this` binding of `thisArg`\n     * and `partials` prepended to the arguments it receives.\n     *\n     * The `_.bind.placeholder` value, which defaults to `_` in monolithic builds,\n     * may be used as a placeholder for partially applied arguments.\n     *\n     * **Note:** Unlike native `Function#bind`, this method doesn't set the \"length\"\n     * property of bound functions.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Function\n     * @param {Function} func The function to bind.\n     * @param {*} thisArg The `this` binding of `func`.\n     * @param {...*} [partials] The arguments to be partially applied.\n     * @returns {Function} Returns the new bound function.\n     * @example\n     *\n     * function greet(greeting, punctuation) {\n     *   return greeting + ' ' + this.user + punctuation;\n     * }\n     *\n     * var object = { 'user': 'fred' };\n     *\n     * var bound = _.bind(greet, object, 'hi');\n     * bound('!');\n     * // => 'hi fred!'\n     *\n     * // Bound with placeholders.\n     * var bound = _.bind(greet, object, _, '!');\n     * bound('hi');\n     * // => 'hi fred!'\n     */\n    var bind = baseRest(function(func, thisArg, partials) {\n      var bitmask = WRAP_BIND_FLAG;\n      if (partials.length) {\n        var holders = replaceHolders(partials, getHolder(bind));\n        bitmask |= WRAP_PARTIAL_FLAG;\n      }\n      return createWrap(func, bitmask, thisArg, partials, holders);\n    });\n\n    /**\n     * Creates a function that invokes the method at `object[key]` with `partials`\n     * prepended to the arguments it receives.\n     *\n     * This method differs from `_.bind` by allowing bound functions to reference\n     * methods that may be redefined or don't yet exist. See\n     * [Peter Michaux's article](http://peter.michaux.ca/articles/lazy-function-definition-pattern)\n     * for more details.\n     *\n     * The `_.bindKey.placeholder` value, which defaults to `_` in monolithic\n     * builds, may be used as a placeholder for partially applied arguments.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.10.0\n     * @category Function\n     * @param {Object} object The object to invoke the method on.\n     * @param {string} key The key of the method.\n     * @param {...*} [partials] The arguments to be partially applied.\n     * @returns {Function} Returns the new bound function.\n     * @example\n     *\n     * var object = {\n     *   'user': 'fred',\n     *   'greet': function(greeting, punctuation) {\n     *     return greeting + ' ' + this.user + punctuation;\n     *   }\n     * };\n     *\n     * var bound = _.bindKey(object, 'greet', 'hi');\n     * bound('!');\n     * // => 'hi fred!'\n     *\n     * object.greet = function(greeting, punctuation) {\n     *   return greeting + 'ya ' + this.user + punctuation;\n     * };\n     *\n     * bound('!');\n     * // => 'hiya fred!'\n     *\n     * // Bound with placeholders.\n     * var bound = _.bindKey(object, 'greet', _, '!');\n     * bound('hi');\n     * // => 'hiya fred!'\n     */\n    var bindKey = baseRest(function(object, key, partials) {\n      var bitmask = WRAP_BIND_FLAG | WRAP_BIND_KEY_FLAG;\n      if (partials.length) {\n        var holders = replaceHolders(partials, getHolder(bindKey));\n        bitmask |= WRAP_PARTIAL_FLAG;\n      }\n      return createWrap(key, bitmask, object, partials, holders);\n    });\n\n    /**\n     * Creates a function that accepts arguments of `func` and either invokes\n     * `func` returning its result, if at least `arity` number of arguments have\n     * been provided, or returns a function that accepts the remaining `func`\n     * arguments, and so on. The arity of `func` may be specified if `func.length`\n     * is not sufficient.\n     *\n     * The `_.curry.placeholder` value, which defaults to `_` in monolithic builds,\n     * may be used as a placeholder for provided arguments.\n     *\n     * **Note:** This method doesn't set the \"length\" property of curried functions.\n     *\n     * @static\n     * @memberOf _\n     * @since 2.0.0\n     * @category Function\n     * @param {Function} func The function to curry.\n     * @param {number} [arity=func.length] The arity of `func`.\n     * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n     * @returns {Function} Returns the new curried function.\n     * @example\n     *\n     * var abc = function(a, b, c) {\n     *   return [a, b, c];\n     * };\n     *\n     * var curried = _.curry(abc);\n     *\n     * curried(1)(2)(3);\n     * // => [1, 2, 3]\n     *\n     * curried(1, 2)(3);\n     * // => [1, 2, 3]\n     *\n     * curried(1, 2, 3);\n     * // => [1, 2, 3]\n     *\n     * // Curried with placeholders.\n     * curried(1)(_, 3)(2);\n     * // => [1, 2, 3]\n     */\n    function curry(func, arity, guard) {\n      arity = guard ? undefined : arity;\n      var result = createWrap(func, WRAP_CURRY_FLAG, undefined, undefined, undefined, undefined, undefined, arity);\n      result.placeholder = curry.placeholder;\n      return result;\n    }\n\n    /**\n     * This method is like `_.curry` except that arguments are applied to `func`\n     * in the manner of `_.partialRight` instead of `_.partial`.\n     *\n     * The `_.curryRight.placeholder` value, which defaults to `_` in monolithic\n     * builds, may be used as a placeholder for provided arguments.\n     *\n     * **Note:** This method doesn't set the \"length\" property of curried functions.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category Function\n     * @param {Function} func The function to curry.\n     * @param {number} [arity=func.length] The arity of `func`.\n     * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n     * @returns {Function} Returns the new curried function.\n     * @example\n     *\n     * var abc = function(a, b, c) {\n     *   return [a, b, c];\n     * };\n     *\n     * var curried = _.curryRight(abc);\n     *\n     * curried(3)(2)(1);\n     * // => [1, 2, 3]\n     *\n     * curried(2, 3)(1);\n     * // => [1, 2, 3]\n     *\n     * curried(1, 2, 3);\n     * // => [1, 2, 3]\n     *\n     * // Curried with placeholders.\n     * curried(3)(1, _)(2);\n     * // => [1, 2, 3]\n     */\n    function curryRight(func, arity, guard) {\n      arity = guard ? undefined : arity;\n      var result = createWrap(func, WRAP_CURRY_RIGHT_FLAG, undefined, undefined, undefined, undefined, undefined, arity);\n      result.placeholder = curryRight.placeholder;\n      return result;\n    }\n\n    /**\n     * Creates a debounced function that delays invoking `func` until after `wait`\n     * milliseconds have elapsed since the last time the debounced function was\n     * invoked. The debounced function comes with a `cancel` method to cancel\n     * delayed `func` invocations and a `flush` method to immediately invoke them.\n     * Provide `options` to indicate whether `func` should be invoked on the\n     * leading and/or trailing edge of the `wait` timeout. The `func` is invoked\n     * with the last arguments provided to the debounced function. Subsequent\n     * calls to the debounced function return the result of the last `func`\n     * invocation.\n     *\n     * **Note:** If `leading` and `trailing` options are `true`, `func` is\n     * invoked on the trailing edge of the timeout only if the debounced function\n     * is invoked more than once during the `wait` timeout.\n     *\n     * If `wait` is `0` and `leading` is `false`, `func` invocation is deferred\n     * until to the next tick, similar to `setTimeout` with a timeout of `0`.\n     *\n     * See [David Corbacho's article](https://css-tricks.com/debouncing-throttling-explained-examples/)\n     * for details over the differences between `_.debounce` and `_.throttle`.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Function\n     * @param {Function} func The function to debounce.\n     * @param {number} [wait=0] The number of milliseconds to delay.\n     * @param {Object} [options={}] The options object.\n     * @param {boolean} [options.leading=false]\n     *  Specify invoking on the leading edge of the timeout.\n     * @param {number} [options.maxWait]\n     *  The maximum time `func` is allowed to be delayed before it's invoked.\n     * @param {boolean} [options.trailing=true]\n     *  Specify invoking on the trailing edge of the timeout.\n     * @returns {Function} Returns the new debounced function.\n     * @example\n     *\n     * // Avoid costly calculations while the window size is in flux.\n     * jQuery(window).on('resize', _.debounce(calculateLayout, 150));\n     *\n     * // Invoke `sendMail` when clicked, debouncing subsequent calls.\n     * jQuery(element).on('click', _.debounce(sendMail, 300, {\n     *   'leading': true,\n     *   'trailing': false\n     * }));\n     *\n     * // Ensure `batchLog` is invoked once after 1 second of debounced calls.\n     * var debounced = _.debounce(batchLog, 250, { 'maxWait': 1000 });\n     * var source = new EventSource('/stream');\n     * jQuery(source).on('message', debounced);\n     *\n     * // Cancel the trailing debounced invocation.\n     * jQuery(window).on('popstate', debounced.cancel);\n     */\n    function debounce(func, wait, options) {\n      var lastArgs,\n          lastThis,\n          maxWait,\n          result,\n          timerId,\n          lastCallTime,\n          lastInvokeTime = 0,\n          leading = false,\n          maxing = false,\n          trailing = true;\n\n      if (typeof func != 'function') {\n        throw new TypeError(FUNC_ERROR_TEXT);\n      }\n      wait = toNumber(wait) || 0;\n      if (isObject(options)) {\n        leading = !!options.leading;\n        maxing = 'maxWait' in options;\n        maxWait = maxing ? nativeMax(toNumber(options.maxWait) || 0, wait) : maxWait;\n        trailing = 'trailing' in options ? !!options.trailing : trailing;\n      }\n\n      function invokeFunc(time) {\n        var args = lastArgs,\n            thisArg = lastThis;\n\n        lastArgs = lastThis = undefined;\n        lastInvokeTime = time;\n        result = func.apply(thisArg, args);\n        return result;\n      }\n\n      function leadingEdge(time) {\n        // Reset any `maxWait` timer.\n        lastInvokeTime = time;\n        // Start the timer for the trailing edge.\n        timerId = setTimeout(timerExpired, wait);\n        // Invoke the leading edge.\n        return leading ? invokeFunc(time) : result;\n      }\n\n      function remainingWait(time) {\n        var timeSinceLastCall = time - lastCallTime,\n            timeSinceLastInvoke = time - lastInvokeTime,\n            timeWaiting = wait - timeSinceLastCall;\n\n        return maxing\n          ? nativeMin(timeWaiting, maxWait - timeSinceLastInvoke)\n          : timeWaiting;\n      }\n\n      function shouldInvoke(time) {\n        var timeSinceLastCall = time - lastCallTime,\n            timeSinceLastInvoke = time - lastInvokeTime;\n\n        // Either this is the first call, activity has stopped and we're at the\n        // trailing edge, the system time has gone backwards and we're treating\n        // it as the trailing edge, or we've hit the `maxWait` limit.\n        return (lastCallTime === undefined || (timeSinceLastCall >= wait) ||\n          (timeSinceLastCall < 0) || (maxing && timeSinceLastInvoke >= maxWait));\n      }\n\n      function timerExpired() {\n        var time = now();\n        if (shouldInvoke(time)) {\n          return trailingEdge(time);\n        }\n        // Restart the timer.\n        timerId = setTimeout(timerExpired, remainingWait(time));\n      }\n\n      function trailingEdge(time) {\n        timerId = undefined;\n\n        // Only invoke if we have `lastArgs` which means `func` has been\n        // debounced at least once.\n        if (trailing && lastArgs) {\n          return invokeFunc(time);\n        }\n        lastArgs = lastThis = undefined;\n        return result;\n      }\n\n      function cancel() {\n        if (timerId !== undefined) {\n          clearTimeout(timerId);\n        }\n        lastInvokeTime = 0;\n        lastArgs = lastCallTime = lastThis = timerId = undefined;\n      }\n\n      function flush() {\n        return timerId === undefined ? result : trailingEdge(now());\n      }\n\n      function debounced() {\n        var time = now(),\n            isInvoking = shouldInvoke(time);\n\n        lastArgs = arguments;\n        lastThis = this;\n        lastCallTime = time;\n\n        if (isInvoking) {\n          if (timerId === undefined) {\n            return leadingEdge(lastCallTime);\n          }\n          if (maxing) {\n            // Handle invocations in a tight loop.\n            clearTimeout(timerId);\n            timerId = setTimeout(timerExpired, wait);\n            return invokeFunc(lastCallTime);\n          }\n        }\n        if (timerId === undefined) {\n          timerId = setTimeout(timerExpired, wait);\n        }\n        return result;\n      }\n      debounced.cancel = cancel;\n      debounced.flush = flush;\n      return debounced;\n    }\n\n    /**\n     * Defers invoking the `func` until the current call stack has cleared. Any\n     * additional arguments are provided to `func` when it's invoked.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Function\n     * @param {Function} func The function to defer.\n     * @param {...*} [args] The arguments to invoke `func` with.\n     * @returns {number} Returns the timer id.\n     * @example\n     *\n     * _.defer(function(text) {\n     *   console.log(text);\n     * }, 'deferred');\n     * // => Logs 'deferred' after one millisecond.\n     */\n    var defer = baseRest(function(func, args) {\n      return baseDelay(func, 1, args);\n    });\n\n    /**\n     * Invokes `func` after `wait` milliseconds. Any additional arguments are\n     * provided to `func` when it's invoked.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Function\n     * @param {Function} func The function to delay.\n     * @param {number} wait The number of milliseconds to delay invocation.\n     * @param {...*} [args] The arguments to invoke `func` with.\n     * @returns {number} Returns the timer id.\n     * @example\n     *\n     * _.delay(function(text) {\n     *   console.log(text);\n     * }, 1000, 'later');\n     * // => Logs 'later' after one second.\n     */\n    var delay = baseRest(function(func, wait, args) {\n      return baseDelay(func, toNumber(wait) || 0, args);\n    });\n\n    /**\n     * Creates a function that invokes `func` with arguments reversed.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Function\n     * @param {Function} func The function to flip arguments for.\n     * @returns {Function} Returns the new flipped function.\n     * @example\n     *\n     * var flipped = _.flip(function() {\n     *   return _.toArray(arguments);\n     * });\n     *\n     * flipped('a', 'b', 'c', 'd');\n     * // => ['d', 'c', 'b', 'a']\n     */\n    function flip(func) {\n      return createWrap(func, WRAP_FLIP_FLAG);\n    }\n\n    /**\n     * Creates a function that memoizes the result of `func`. If `resolver` is\n     * provided, it determines the cache key for storing the result based on the\n     * arguments provided to the memoized function. By default, the first argument\n     * provided to the memoized function is used as the map cache key. The `func`\n     * is invoked with the `this` binding of the memoized function.\n     *\n     * **Note:** The cache is exposed as the `cache` property on the memoized\n     * function. Its creation may be customized by replacing the `_.memoize.Cache`\n     * constructor with one whose instances implement the\n     * [`Map`](http://ecma-international.org/ecma-262/7.0/#sec-properties-of-the-map-prototype-object)\n     * method interface of `clear`, `delete`, `get`, `has`, and `set`.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Function\n     * @param {Function} func The function to have its output memoized.\n     * @param {Function} [resolver] The function to resolve the cache key.\n     * @returns {Function} Returns the new memoized function.\n     * @example\n     *\n     * var object = { 'a': 1, 'b': 2 };\n     * var other = { 'c': 3, 'd': 4 };\n     *\n     * var values = _.memoize(_.values);\n     * values(object);\n     * // => [1, 2]\n     *\n     * values(other);\n     * // => [3, 4]\n     *\n     * object.a = 2;\n     * values(object);\n     * // => [1, 2]\n     *\n     * // Modify the result cache.\n     * values.cache.set(object, ['a', 'b']);\n     * values(object);\n     * // => ['a', 'b']\n     *\n     * // Replace `_.memoize.Cache`.\n     * _.memoize.Cache = WeakMap;\n     */\n    function memoize(func, resolver) {\n      if (typeof func != 'function' || (resolver != null && typeof resolver != 'function')) {\n        throw new TypeError(FUNC_ERROR_TEXT);\n      }\n      var memoized = function() {\n        var args = arguments,\n            key = resolver ? resolver.apply(this, args) : args[0],\n            cache = memoized.cache;\n\n        if (cache.has(key)) {\n          return cache.get(key);\n        }\n        var result = func.apply(this, args);\n        memoized.cache = cache.set(key, result) || cache;\n        return result;\n      };\n      memoized.cache = new (memoize.Cache || MapCache);\n      return memoized;\n    }\n\n    // Expose `MapCache`.\n    memoize.Cache = MapCache;\n\n    /**\n     * Creates a function that negates the result of the predicate `func`. The\n     * `func` predicate is invoked with the `this` binding and arguments of the\n     * created function.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category Function\n     * @param {Function} predicate The predicate to negate.\n     * @returns {Function} Returns the new negated function.\n     * @example\n     *\n     * function isEven(n) {\n     *   return n % 2 == 0;\n     * }\n     *\n     * _.filter([1, 2, 3, 4, 5, 6], _.negate(isEven));\n     * // => [1, 3, 5]\n     */\n    function negate(predicate) {\n      if (typeof predicate != 'function') {\n        throw new TypeError(FUNC_ERROR_TEXT);\n      }\n      return function() {\n        var args = arguments;\n        switch (args.length) {\n          case 0: return !predicate.call(this);\n          case 1: return !predicate.call(this, args[0]);\n          case 2: return !predicate.call(this, args[0], args[1]);\n          case 3: return !predicate.call(this, args[0], args[1], args[2]);\n        }\n        return !predicate.apply(this, args);\n      };\n    }\n\n    /**\n     * Creates a function that is restricted to invoking `func` once. Repeat calls\n     * to the function return the value of the first invocation. The `func` is\n     * invoked with the `this` binding and arguments of the created function.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Function\n     * @param {Function} func The function to restrict.\n     * @returns {Function} Returns the new restricted function.\n     * @example\n     *\n     * var initialize = _.once(createApplication);\n     * initialize();\n     * initialize();\n     * // => `createApplication` is invoked once\n     */\n    function once(func) {\n      return before(2, func);\n    }\n\n    /**\n     * Creates a function that invokes `func` with its arguments transformed.\n     *\n     * @static\n     * @since 4.0.0\n     * @memberOf _\n     * @category Function\n     * @param {Function} func The function to wrap.\n     * @param {...(Function|Function[])} [transforms=[_.identity]]\n     *  The argument transforms.\n     * @returns {Function} Returns the new function.\n     * @example\n     *\n     * function doubled(n) {\n     *   return n * 2;\n     * }\n     *\n     * function square(n) {\n     *   return n * n;\n     * }\n     *\n     * var func = _.overArgs(function(x, y) {\n     *   return [x, y];\n     * }, [square, doubled]);\n     *\n     * func(9, 3);\n     * // => [81, 6]\n     *\n     * func(10, 5);\n     * // => [100, 10]\n     */\n    var overArgs = castRest(function(func, transforms) {\n      transforms = (transforms.length == 1 && isArray(transforms[0]))\n        ? arrayMap(transforms[0], baseUnary(getIteratee()))\n        : arrayMap(baseFlatten(transforms, 1), baseUnary(getIteratee()));\n\n      var funcsLength = transforms.length;\n      return baseRest(function(args) {\n        var index = -1,\n            length = nativeMin(args.length, funcsLength);\n\n        while (++index < length) {\n          args[index] = transforms[index].call(this, args[index]);\n        }\n        return apply(func, this, args);\n      });\n    });\n\n    /**\n     * Creates a function that invokes `func` with `partials` prepended to the\n     * arguments it receives. This method is like `_.bind` except it does **not**\n     * alter the `this` binding.\n     *\n     * The `_.partial.placeholder` value, which defaults to `_` in monolithic\n     * builds, may be used as a placeholder for partially applied arguments.\n     *\n     * **Note:** This method doesn't set the \"length\" property of partially\n     * applied functions.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.2.0\n     * @category Function\n     * @param {Function} func The function to partially apply arguments to.\n     * @param {...*} [partials] The arguments to be partially applied.\n     * @returns {Function} Returns the new partially applied function.\n     * @example\n     *\n     * function greet(greeting, name) {\n     *   return greeting + ' ' + name;\n     * }\n     *\n     * var sayHelloTo = _.partial(greet, 'hello');\n     * sayHelloTo('fred');\n     * // => 'hello fred'\n     *\n     * // Partially applied with placeholders.\n     * var greetFred = _.partial(greet, _, 'fred');\n     * greetFred('hi');\n     * // => 'hi fred'\n     */\n    var partial = baseRest(function(func, partials) {\n      var holders = replaceHolders(partials, getHolder(partial));\n      return createWrap(func, WRAP_PARTIAL_FLAG, undefined, partials, holders);\n    });\n\n    /**\n     * This method is like `_.partial` except that partially applied arguments\n     * are appended to the arguments it receives.\n     *\n     * The `_.partialRight.placeholder` value, which defaults to `_` in monolithic\n     * builds, may be used as a placeholder for partially applied arguments.\n     *\n     * **Note:** This method doesn't set the \"length\" property of partially\n     * applied functions.\n     *\n     * @static\n     * @memberOf _\n     * @since 1.0.0\n     * @category Function\n     * @param {Function} func The function to partially apply arguments to.\n     * @param {...*} [partials] The arguments to be partially applied.\n     * @returns {Function} Returns the new partially applied function.\n     * @example\n     *\n     * function greet(greeting, name) {\n     *   return greeting + ' ' + name;\n     * }\n     *\n     * var greetFred = _.partialRight(greet, 'fred');\n     * greetFred('hi');\n     * // => 'hi fred'\n     *\n     * // Partially applied with placeholders.\n     * var sayHelloTo = _.partialRight(greet, 'hello', _);\n     * sayHelloTo('fred');\n     * // => 'hello fred'\n     */\n    var partialRight = baseRest(function(func, partials) {\n      var holders = replaceHolders(partials, getHolder(partialRight));\n      return createWrap(func, WRAP_PARTIAL_RIGHT_FLAG, undefined, partials, holders);\n    });\n\n    /**\n     * Creates a function that invokes `func` with arguments arranged according\n     * to the specified `indexes` where the argument value at the first index is\n     * provided as the first argument, the argument value at the second index is\n     * provided as the second argument, and so on.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category Function\n     * @param {Function} func The function to rearrange arguments for.\n     * @param {...(number|number[])} indexes The arranged argument indexes.\n     * @returns {Function} Returns the new function.\n     * @example\n     *\n     * var rearged = _.rearg(function(a, b, c) {\n     *   return [a, b, c];\n     * }, [2, 0, 1]);\n     *\n     * rearged('b', 'c', 'a')\n     * // => ['a', 'b', 'c']\n     */\n    var rearg = flatRest(function(func, indexes) {\n      return createWrap(func, WRAP_REARG_FLAG, undefined, undefined, undefined, indexes);\n    });\n\n    /**\n     * Creates a function that invokes `func` with the `this` binding of the\n     * created function and arguments from `start` and beyond provided as\n     * an array.\n     *\n     * **Note:** This method is based on the\n     * [rest parameter](https://mdn.io/rest_parameters).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Function\n     * @param {Function} func The function to apply a rest parameter to.\n     * @param {number} [start=func.length-1] The start position of the rest parameter.\n     * @returns {Function} Returns the new function.\n     * @example\n     *\n     * var say = _.rest(function(what, names) {\n     *   return what + ' ' + _.initial(names).join(', ') +\n     *     (_.size(names) > 1 ? ', & ' : '') + _.last(names);\n     * });\n     *\n     * say('hello', 'fred', 'barney', 'pebbles');\n     * // => 'hello fred, barney, & pebbles'\n     */\n    function rest(func, start) {\n      if (typeof func != 'function') {\n        throw new TypeError(FUNC_ERROR_TEXT);\n      }\n      start = start === undefined ? start : toInteger(start);\n      return baseRest(func, start);\n    }\n\n    /**\n     * Creates a function that invokes `func` with the `this` binding of the\n     * create function and an array of arguments much like\n     * [`Function#apply`](http://www.ecma-international.org/ecma-262/7.0/#sec-function.prototype.apply).\n     *\n     * **Note:** This method is based on the\n     * [spread operator](https://mdn.io/spread_operator).\n     *\n     * @static\n     * @memberOf _\n     * @since 3.2.0\n     * @category Function\n     * @param {Function} func The function to spread arguments over.\n     * @param {number} [start=0] The start position of the spread.\n     * @returns {Function} Returns the new function.\n     * @example\n     *\n     * var say = _.spread(function(who, what) {\n     *   return who + ' says ' + what;\n     * });\n     *\n     * say(['fred', 'hello']);\n     * // => 'fred says hello'\n     *\n     * var numbers = Promise.all([\n     *   Promise.resolve(40),\n     *   Promise.resolve(36)\n     * ]);\n     *\n     * numbers.then(_.spread(function(x, y) {\n     *   return x + y;\n     * }));\n     * // => a Promise of 76\n     */\n    function spread(func, start) {\n      if (typeof func != 'function') {\n        throw new TypeError(FUNC_ERROR_TEXT);\n      }\n      start = start == null ? 0 : nativeMax(toInteger(start), 0);\n      return baseRest(function(args) {\n        var array = args[start],\n            otherArgs = castSlice(args, 0, start);\n\n        if (array) {\n          arrayPush(otherArgs, array);\n        }\n        return apply(func, this, otherArgs);\n      });\n    }\n\n    /**\n     * Creates a throttled function that only invokes `func` at most once per\n     * every `wait` milliseconds. The throttled function comes with a `cancel`\n     * method to cancel delayed `func` invocations and a `flush` method to\n     * immediately invoke them. Provide `options` to indicate whether `func`\n     * should be invoked on the leading and/or trailing edge of the `wait`\n     * timeout. The `func` is invoked with the last arguments provided to the\n     * throttled function. Subsequent calls to the throttled function return the\n     * result of the last `func` invocation.\n     *\n     * **Note:** If `leading` and `trailing` options are `true`, `func` is\n     * invoked on the trailing edge of the timeout only if the throttled function\n     * is invoked more than once during the `wait` timeout.\n     *\n     * If `wait` is `0` and `leading` is `false`, `func` invocation is deferred\n     * until to the next tick, similar to `setTimeout` with a timeout of `0`.\n     *\n     * See [David Corbacho's article](https://css-tricks.com/debouncing-throttling-explained-examples/)\n     * for details over the differences between `_.throttle` and `_.debounce`.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Function\n     * @param {Function} func The function to throttle.\n     * @param {number} [wait=0] The number of milliseconds to throttle invocations to.\n     * @param {Object} [options={}] The options object.\n     * @param {boolean} [options.leading=true]\n     *  Specify invoking on the leading edge of the timeout.\n     * @param {boolean} [options.trailing=true]\n     *  Specify invoking on the trailing edge of the timeout.\n     * @returns {Function} Returns the new throttled function.\n     * @example\n     *\n     * // Avoid excessively updating the position while scrolling.\n     * jQuery(window).on('scroll', _.throttle(updatePosition, 100));\n     *\n     * // Invoke `renewToken` when the click event is fired, but not more than once every 5 minutes.\n     * var throttled = _.throttle(renewToken, 300000, { 'trailing': false });\n     * jQuery(element).on('click', throttled);\n     *\n     * // Cancel the trailing throttled invocation.\n     * jQuery(window).on('popstate', throttled.cancel);\n     */\n    function throttle(func, wait, options) {\n      var leading = true,\n          trailing = true;\n\n      if (typeof func != 'function') {\n        throw new TypeError(FUNC_ERROR_TEXT);\n      }\n      if (isObject(options)) {\n        leading = 'leading' in options ? !!options.leading : leading;\n        trailing = 'trailing' in options ? !!options.trailing : trailing;\n      }\n      return debounce(func, wait, {\n        'leading': leading,\n        'maxWait': wait,\n        'trailing': trailing\n      });\n    }\n\n    /**\n     * Creates a function that accepts up to one argument, ignoring any\n     * additional arguments.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Function\n     * @param {Function} func The function to cap arguments for.\n     * @returns {Function} Returns the new capped function.\n     * @example\n     *\n     * _.map(['6', '8', '10'], _.unary(parseInt));\n     * // => [6, 8, 10]\n     */\n    function unary(func) {\n      return ary(func, 1);\n    }\n\n    /**\n     * Creates a function that provides `value` to `wrapper` as its first\n     * argument. Any additional arguments provided to the function are appended\n     * to those provided to the `wrapper`. The wrapper is invoked with the `this`\n     * binding of the created function.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Function\n     * @param {*} value The value to wrap.\n     * @param {Function} [wrapper=identity] The wrapper function.\n     * @returns {Function} Returns the new function.\n     * @example\n     *\n     * var p = _.wrap(_.escape, function(func, text) {\n     *   return '<p>' + func(text) + '</p>';\n     * });\n     *\n     * p('fred, barney, & pebbles');\n     * // => '<p>fred, barney, &amp; pebbles</p>'\n     */\n    function wrap(value, wrapper) {\n      return partial(castFunction(wrapper), value);\n    }\n\n    /*------------------------------------------------------------------------*/\n\n    /**\n     * Casts `value` as an array if it's not one.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.4.0\n     * @category Lang\n     * @param {*} value The value to inspect.\n     * @returns {Array} Returns the cast array.\n     * @example\n     *\n     * _.castArray(1);\n     * // => [1]\n     *\n     * _.castArray({ 'a': 1 });\n     * // => [{ 'a': 1 }]\n     *\n     * _.castArray('abc');\n     * // => ['abc']\n     *\n     * _.castArray(null);\n     * // => [null]\n     *\n     * _.castArray(undefined);\n     * // => [undefined]\n     *\n     * _.castArray();\n     * // => []\n     *\n     * var array = [1, 2, 3];\n     * console.log(_.castArray(array) === array);\n     * // => true\n     */\n    function castArray() {\n      if (!arguments.length) {\n        return [];\n      }\n      var value = arguments[0];\n      return isArray(value) ? value : [value];\n    }\n\n    /**\n     * Creates a shallow clone of `value`.\n     *\n     * **Note:** This method is loosely based on the\n     * [structured clone algorithm](https://mdn.io/Structured_clone_algorithm)\n     * and supports cloning arrays, array buffers, booleans, date objects, maps,\n     * numbers, `Object` objects, regexes, sets, strings, symbols, and typed\n     * arrays. The own enumerable properties of `arguments` objects are cloned\n     * as plain objects. An empty object is returned for uncloneable values such\n     * as error objects, functions, DOM nodes, and WeakMaps.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Lang\n     * @param {*} value The value to clone.\n     * @returns {*} Returns the cloned value.\n     * @see _.cloneDeep\n     * @example\n     *\n     * var objects = [{ 'a': 1 }, { 'b': 2 }];\n     *\n     * var shallow = _.clone(objects);\n     * console.log(shallow[0] === objects[0]);\n     * // => true\n     */\n    function clone(value) {\n      return baseClone(value, CLONE_SYMBOLS_FLAG);\n    }\n\n    /**\n     * This method is like `_.clone` except that it accepts `customizer` which\n     * is invoked to produce the cloned value. If `customizer` returns `undefined`,\n     * cloning is handled by the method instead. The `customizer` is invoked with\n     * up to four arguments; (value [, index|key, object, stack]).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Lang\n     * @param {*} value The value to clone.\n     * @param {Function} [customizer] The function to customize cloning.\n     * @returns {*} Returns the cloned value.\n     * @see _.cloneDeepWith\n     * @example\n     *\n     * function customizer(value) {\n     *   if (_.isElement(value)) {\n     *     return value.cloneNode(false);\n     *   }\n     * }\n     *\n     * var el = _.cloneWith(document.body, customizer);\n     *\n     * console.log(el === document.body);\n     * // => false\n     * console.log(el.nodeName);\n     * // => 'BODY'\n     * console.log(el.childNodes.length);\n     * // => 0\n     */\n    function cloneWith(value, customizer) {\n      customizer = typeof customizer == 'function' ? customizer : undefined;\n      return baseClone(value, CLONE_SYMBOLS_FLAG, customizer);\n    }\n\n    /**\n     * This method is like `_.clone` except that it recursively clones `value`.\n     *\n     * @static\n     * @memberOf _\n     * @since 1.0.0\n     * @category Lang\n     * @param {*} value The value to recursively clone.\n     * @returns {*} Returns the deep cloned value.\n     * @see _.clone\n     * @example\n     *\n     * var objects = [{ 'a': 1 }, { 'b': 2 }];\n     *\n     * var deep = _.cloneDeep(objects);\n     * console.log(deep[0] === objects[0]);\n     * // => false\n     */\n    function cloneDeep(value) {\n      return baseClone(value, CLONE_DEEP_FLAG | CLONE_SYMBOLS_FLAG);\n    }\n\n    /**\n     * This method is like `_.cloneWith` except that it recursively clones `value`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Lang\n     * @param {*} value The value to recursively clone.\n     * @param {Function} [customizer] The function to customize cloning.\n     * @returns {*} Returns the deep cloned value.\n     * @see _.cloneWith\n     * @example\n     *\n     * function customizer(value) {\n     *   if (_.isElement(value)) {\n     *     return value.cloneNode(true);\n     *   }\n     * }\n     *\n     * var el = _.cloneDeepWith(document.body, customizer);\n     *\n     * console.log(el === document.body);\n     * // => false\n     * console.log(el.nodeName);\n     * // => 'BODY'\n     * console.log(el.childNodes.length);\n     * // => 20\n     */\n    function cloneDeepWith(value, customizer) {\n      customizer = typeof customizer == 'function' ? customizer : undefined;\n      return baseClone(value, CLONE_DEEP_FLAG | CLONE_SYMBOLS_FLAG, customizer);\n    }\n\n    /**\n     * Checks if `object` conforms to `source` by invoking the predicate\n     * properties of `source` with the corresponding property values of `object`.\n     *\n     * **Note:** This method is equivalent to `_.conforms` when `source` is\n     * partially applied.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.14.0\n     * @category Lang\n     * @param {Object} object The object to inspect.\n     * @param {Object} source The object of property predicates to conform to.\n     * @returns {boolean} Returns `true` if `object` conforms, else `false`.\n     * @example\n     *\n     * var object = { 'a': 1, 'b': 2 };\n     *\n     * _.conformsTo(object, { 'b': function(n) { return n > 1; } });\n     * // => true\n     *\n     * _.conformsTo(object, { 'b': function(n) { return n > 2; } });\n     * // => false\n     */\n    function conformsTo(object, source) {\n      return source == null || baseConformsTo(object, source, keys(source));\n    }\n\n    /**\n     * Performs a\n     * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n     * comparison between two values to determine if they are equivalent.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Lang\n     * @param {*} value The value to compare.\n     * @param {*} other The other value to compare.\n     * @returns {boolean} Returns `true` if the values are equivalent, else `false`.\n     * @example\n     *\n     * var object = { 'a': 1 };\n     * var other = { 'a': 1 };\n     *\n     * _.eq(object, object);\n     * // => true\n     *\n     * _.eq(object, other);\n     * // => false\n     *\n     * _.eq('a', 'a');\n     * // => true\n     *\n     * _.eq('a', Object('a'));\n     * // => false\n     *\n     * _.eq(NaN, NaN);\n     * // => true\n     */\n    function eq(value, other) {\n      return value === other || (value !== value && other !== other);\n    }\n\n    /**\n     * Checks if `value` is greater than `other`.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.9.0\n     * @category Lang\n     * @param {*} value The value to compare.\n     * @param {*} other The other value to compare.\n     * @returns {boolean} Returns `true` if `value` is greater than `other`,\n     *  else `false`.\n     * @see _.lt\n     * @example\n     *\n     * _.gt(3, 1);\n     * // => true\n     *\n     * _.gt(3, 3);\n     * // => false\n     *\n     * _.gt(1, 3);\n     * // => false\n     */\n    var gt = createRelationalOperation(baseGt);\n\n    /**\n     * Checks if `value` is greater than or equal to `other`.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.9.0\n     * @category Lang\n     * @param {*} value The value to compare.\n     * @param {*} other The other value to compare.\n     * @returns {boolean} Returns `true` if `value` is greater than or equal to\n     *  `other`, else `false`.\n     * @see _.lte\n     * @example\n     *\n     * _.gte(3, 1);\n     * // => true\n     *\n     * _.gte(3, 3);\n     * // => true\n     *\n     * _.gte(1, 3);\n     * // => false\n     */\n    var gte = createRelationalOperation(function(value, other) {\n      return value >= other;\n    });\n\n    /**\n     * Checks if `value` is likely an `arguments` object.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Lang\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is an `arguments` object,\n     *  else `false`.\n     * @example\n     *\n     * _.isArguments(function() { return arguments; }());\n     * // => true\n     *\n     * _.isArguments([1, 2, 3]);\n     * // => false\n     */\n    var isArguments = baseIsArguments(function() { return arguments; }()) ? baseIsArguments : function(value) {\n      return isObjectLike(value) && hasOwnProperty.call(value, 'callee') &&\n        !propertyIsEnumerable.call(value, 'callee');\n    };\n\n    /**\n     * Checks if `value` is classified as an `Array` object.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Lang\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is an array, else `false`.\n     * @example\n     *\n     * _.isArray([1, 2, 3]);\n     * // => true\n     *\n     * _.isArray(document.body.children);\n     * // => false\n     *\n     * _.isArray('abc');\n     * // => false\n     *\n     * _.isArray(_.noop);\n     * // => false\n     */\n    var isArray = Array.isArray;\n\n    /**\n     * Checks if `value` is classified as an `ArrayBuffer` object.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.3.0\n     * @category Lang\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is an array buffer, else `false`.\n     * @example\n     *\n     * _.isArrayBuffer(new ArrayBuffer(2));\n     * // => true\n     *\n     * _.isArrayBuffer(new Array(2));\n     * // => false\n     */\n    var isArrayBuffer = nodeIsArrayBuffer ? baseUnary(nodeIsArrayBuffer) : baseIsArrayBuffer;\n\n    /**\n     * Checks if `value` is array-like. A value is considered array-like if it's\n     * not a function and has a `value.length` that's an integer greater than or\n     * equal to `0` and less than or equal to `Number.MAX_SAFE_INTEGER`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Lang\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is array-like, else `false`.\n     * @example\n     *\n     * _.isArrayLike([1, 2, 3]);\n     * // => true\n     *\n     * _.isArrayLike(document.body.children);\n     * // => true\n     *\n     * _.isArrayLike('abc');\n     * // => true\n     *\n     * _.isArrayLike(_.noop);\n     * // => false\n     */\n    function isArrayLike(value) {\n      return value != null && isLength(value.length) && !isFunction(value);\n    }\n\n    /**\n     * This method is like `_.isArrayLike` except that it also checks if `value`\n     * is an object.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Lang\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is an array-like object,\n     *  else `false`.\n     * @example\n     *\n     * _.isArrayLikeObject([1, 2, 3]);\n     * // => true\n     *\n     * _.isArrayLikeObject(document.body.children);\n     * // => true\n     *\n     * _.isArrayLikeObject('abc');\n     * // => false\n     *\n     * _.isArrayLikeObject(_.noop);\n     * // => false\n     */\n    function isArrayLikeObject(value) {\n      return isObjectLike(value) && isArrayLike(value);\n    }\n\n    /**\n     * Checks if `value` is classified as a boolean primitive or object.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Lang\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is a boolean, else `false`.\n     * @example\n     *\n     * _.isBoolean(false);\n     * // => true\n     *\n     * _.isBoolean(null);\n     * // => false\n     */\n    function isBoolean(value) {\n      return value === true || value === false ||\n        (isObjectLike(value) && baseGetTag(value) == boolTag);\n    }\n\n    /**\n     * Checks if `value` is a buffer.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.3.0\n     * @category Lang\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is a buffer, else `false`.\n     * @example\n     *\n     * _.isBuffer(new Buffer(2));\n     * // => true\n     *\n     * _.isBuffer(new Uint8Array(2));\n     * // => false\n     */\n    var isBuffer = nativeIsBuffer || stubFalse;\n\n    /**\n     * Checks if `value` is classified as a `Date` object.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Lang\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is a date object, else `false`.\n     * @example\n     *\n     * _.isDate(new Date);\n     * // => true\n     *\n     * _.isDate('Mon April 23 2012');\n     * // => false\n     */\n    var isDate = nodeIsDate ? baseUnary(nodeIsDate) : baseIsDate;\n\n    /**\n     * Checks if `value` is likely a DOM element.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Lang\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is a DOM element, else `false`.\n     * @example\n     *\n     * _.isElement(document.body);\n     * // => true\n     *\n     * _.isElement('<body>');\n     * // => false\n     */\n    function isElement(value) {\n      return isObjectLike(value) && value.nodeType === 1 && !isPlainObject(value);\n    }\n\n    /**\n     * Checks if `value` is an empty object, collection, map, or set.\n     *\n     * Objects are considered empty if they have no own enumerable string keyed\n     * properties.\n     *\n     * Array-like values such as `arguments` objects, arrays, buffers, strings, or\n     * jQuery-like collections are considered empty if they have a `length` of `0`.\n     * Similarly, maps and sets are considered empty if they have a `size` of `0`.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Lang\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is empty, else `false`.\n     * @example\n     *\n     * _.isEmpty(null);\n     * // => true\n     *\n     * _.isEmpty(true);\n     * // => true\n     *\n     * _.isEmpty(1);\n     * // => true\n     *\n     * _.isEmpty([1, 2, 3]);\n     * // => false\n     *\n     * _.isEmpty({ 'a': 1 });\n     * // => false\n     */\n    function isEmpty(value) {\n      if (value == null) {\n        return true;\n      }\n      if (isArrayLike(value) &&\n          (isArray(value) || typeof value == 'string' || typeof value.splice == 'function' ||\n            isBuffer(value) || isTypedArray(value) || isArguments(value))) {\n        return !value.length;\n      }\n      var tag = getTag(value);\n      if (tag == mapTag || tag == setTag) {\n        return !value.size;\n      }\n      if (isPrototype(value)) {\n        return !baseKeys(value).length;\n      }\n      for (var key in value) {\n        if (hasOwnProperty.call(value, key)) {\n          return false;\n        }\n      }\n      return true;\n    }\n\n    /**\n     * Performs a deep comparison between two values to determine if they are\n     * equivalent.\n     *\n     * **Note:** This method supports comparing arrays, array buffers, booleans,\n     * date objects, error objects, maps, numbers, `Object` objects, regexes,\n     * sets, strings, symbols, and typed arrays. `Object` objects are compared\n     * by their own, not inherited, enumerable properties. Functions and DOM\n     * nodes are compared by strict equality, i.e. `===`.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Lang\n     * @param {*} value The value to compare.\n     * @param {*} other The other value to compare.\n     * @returns {boolean} Returns `true` if the values are equivalent, else `false`.\n     * @example\n     *\n     * var object = { 'a': 1 };\n     * var other = { 'a': 1 };\n     *\n     * _.isEqual(object, other);\n     * // => true\n     *\n     * object === other;\n     * // => false\n     */\n    function isEqual(value, other) {\n      return baseIsEqual(value, other);\n    }\n\n    /**\n     * This method is like `_.isEqual` except that it accepts `customizer` which\n     * is invoked to compare values. If `customizer` returns `undefined`, comparisons\n     * are handled by the method instead. The `customizer` is invoked with up to\n     * six arguments: (objValue, othValue [, index|key, object, other, stack]).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Lang\n     * @param {*} value The value to compare.\n     * @param {*} other The other value to compare.\n     * @param {Function} [customizer] The function to customize comparisons.\n     * @returns {boolean} Returns `true` if the values are equivalent, else `false`.\n     * @example\n     *\n     * function isGreeting(value) {\n     *   return /^h(?:i|ello)$/.test(value);\n     * }\n     *\n     * function customizer(objValue, othValue) {\n     *   if (isGreeting(objValue) && isGreeting(othValue)) {\n     *     return true;\n     *   }\n     * }\n     *\n     * var array = ['hello', 'goodbye'];\n     * var other = ['hi', 'goodbye'];\n     *\n     * _.isEqualWith(array, other, customizer);\n     * // => true\n     */\n    function isEqualWith(value, other, customizer) {\n      customizer = typeof customizer == 'function' ? customizer : undefined;\n      var result = customizer ? customizer(value, other) : undefined;\n      return result === undefined ? baseIsEqual(value, other, undefined, customizer) : !!result;\n    }\n\n    /**\n     * Checks if `value` is an `Error`, `EvalError`, `RangeError`, `ReferenceError`,\n     * `SyntaxError`, `TypeError`, or `URIError` object.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category Lang\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is an error object, else `false`.\n     * @example\n     *\n     * _.isError(new Error);\n     * // => true\n     *\n     * _.isError(Error);\n     * // => false\n     */\n    function isError(value) {\n      if (!isObjectLike(value)) {\n        return false;\n      }\n      var tag = baseGetTag(value);\n      return tag == errorTag || tag == domExcTag ||\n        (typeof value.message == 'string' && typeof value.name == 'string' && !isPlainObject(value));\n    }\n\n    /**\n     * Checks if `value` is a finite primitive number.\n     *\n     * **Note:** This method is based on\n     * [`Number.isFinite`](https://mdn.io/Number/isFinite).\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Lang\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is a finite number, else `false`.\n     * @example\n     *\n     * _.isFinite(3);\n     * // => true\n     *\n     * _.isFinite(Number.MIN_VALUE);\n     * // => true\n     *\n     * _.isFinite(Infinity);\n     * // => false\n     *\n     * _.isFinite('3');\n     * // => false\n     */\n    function isFinite(value) {\n      return typeof value == 'number' && nativeIsFinite(value);\n    }\n\n    /**\n     * Checks if `value` is classified as a `Function` object.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Lang\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is a function, else `false`.\n     * @example\n     *\n     * _.isFunction(_);\n     * // => true\n     *\n     * _.isFunction(/abc/);\n     * // => false\n     */\n    function isFunction(value) {\n      if (!isObject(value)) {\n        return false;\n      }\n      // The use of `Object#toString` avoids issues with the `typeof` operator\n      // in Safari 9 which returns 'object' for typed arrays and other constructors.\n      var tag = baseGetTag(value);\n      return tag == funcTag || tag == genTag || tag == asyncTag || tag == proxyTag;\n    }\n\n    /**\n     * Checks if `value` is an integer.\n     *\n     * **Note:** This method is based on\n     * [`Number.isInteger`](https://mdn.io/Number/isInteger).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Lang\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is an integer, else `false`.\n     * @example\n     *\n     * _.isInteger(3);\n     * // => true\n     *\n     * _.isInteger(Number.MIN_VALUE);\n     * // => false\n     *\n     * _.isInteger(Infinity);\n     * // => false\n     *\n     * _.isInteger('3');\n     * // => false\n     */\n    function isInteger(value) {\n      return typeof value == 'number' && value == toInteger(value);\n    }\n\n    /**\n     * Checks if `value` is a valid array-like length.\n     *\n     * **Note:** This method is loosely based on\n     * [`ToLength`](http://ecma-international.org/ecma-262/7.0/#sec-tolength).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Lang\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is a valid length, else `false`.\n     * @example\n     *\n     * _.isLength(3);\n     * // => true\n     *\n     * _.isLength(Number.MIN_VALUE);\n     * // => false\n     *\n     * _.isLength(Infinity);\n     * // => false\n     *\n     * _.isLength('3');\n     * // => false\n     */\n    function isLength(value) {\n      return typeof value == 'number' &&\n        value > -1 && value % 1 == 0 && value <= MAX_SAFE_INTEGER;\n    }\n\n    /**\n     * Checks if `value` is the\n     * [language type](http://www.ecma-international.org/ecma-262/7.0/#sec-ecmascript-language-types)\n     * of `Object`. (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`)\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Lang\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is an object, else `false`.\n     * @example\n     *\n     * _.isObject({});\n     * // => true\n     *\n     * _.isObject([1, 2, 3]);\n     * // => true\n     *\n     * _.isObject(_.noop);\n     * // => true\n     *\n     * _.isObject(null);\n     * // => false\n     */\n    function isObject(value) {\n      var type = typeof value;\n      return value != null && (type == 'object' || type == 'function');\n    }\n\n    /**\n     * Checks if `value` is object-like. A value is object-like if it's not `null`\n     * and has a `typeof` result of \"object\".\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Lang\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is object-like, else `false`.\n     * @example\n     *\n     * _.isObjectLike({});\n     * // => true\n     *\n     * _.isObjectLike([1, 2, 3]);\n     * // => true\n     *\n     * _.isObjectLike(_.noop);\n     * // => false\n     *\n     * _.isObjectLike(null);\n     * // => false\n     */\n    function isObjectLike(value) {\n      return value != null && typeof value == 'object';\n    }\n\n    /**\n     * Checks if `value` is classified as a `Map` object.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.3.0\n     * @category Lang\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is a map, else `false`.\n     * @example\n     *\n     * _.isMap(new Map);\n     * // => true\n     *\n     * _.isMap(new WeakMap);\n     * // => false\n     */\n    var isMap = nodeIsMap ? baseUnary(nodeIsMap) : baseIsMap;\n\n    /**\n     * Performs a partial deep comparison between `object` and `source` to\n     * determine if `object` contains equivalent property values.\n     *\n     * **Note:** This method is equivalent to `_.matches` when `source` is\n     * partially applied.\n     *\n     * Partial comparisons will match empty array and empty object `source`\n     * values against any array or object value, respectively. See `_.isEqual`\n     * for a list of supported value comparisons.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category Lang\n     * @param {Object} object The object to inspect.\n     * @param {Object} source The object of property values to match.\n     * @returns {boolean} Returns `true` if `object` is a match, else `false`.\n     * @example\n     *\n     * var object = { 'a': 1, 'b': 2 };\n     *\n     * _.isMatch(object, { 'b': 2 });\n     * // => true\n     *\n     * _.isMatch(object, { 'b': 1 });\n     * // => false\n     */\n    function isMatch(object, source) {\n      return object === source || baseIsMatch(object, source, getMatchData(source));\n    }\n\n    /**\n     * This method is like `_.isMatch` except that it accepts `customizer` which\n     * is invoked to compare values. If `customizer` returns `undefined`, comparisons\n     * are handled by the method instead. The `customizer` is invoked with five\n     * arguments: (objValue, srcValue, index|key, object, source).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Lang\n     * @param {Object} object The object to inspect.\n     * @param {Object} source The object of property values to match.\n     * @param {Function} [customizer] The function to customize comparisons.\n     * @returns {boolean} Returns `true` if `object` is a match, else `false`.\n     * @example\n     *\n     * function isGreeting(value) {\n     *   return /^h(?:i|ello)$/.test(value);\n     * }\n     *\n     * function customizer(objValue, srcValue) {\n     *   if (isGreeting(objValue) && isGreeting(srcValue)) {\n     *     return true;\n     *   }\n     * }\n     *\n     * var object = { 'greeting': 'hello' };\n     * var source = { 'greeting': 'hi' };\n     *\n     * _.isMatchWith(object, source, customizer);\n     * // => true\n     */\n    function isMatchWith(object, source, customizer) {\n      customizer = typeof customizer == 'function' ? customizer : undefined;\n      return baseIsMatch(object, source, getMatchData(source), customizer);\n    }\n\n    /**\n     * Checks if `value` is `NaN`.\n     *\n     * **Note:** This method is based on\n     * [`Number.isNaN`](https://mdn.io/Number/isNaN) and is not the same as\n     * global [`isNaN`](https://mdn.io/isNaN) which returns `true` for\n     * `undefined` and other non-number values.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Lang\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is `NaN`, else `false`.\n     * @example\n     *\n     * _.isNaN(NaN);\n     * // => true\n     *\n     * _.isNaN(new Number(NaN));\n     * // => true\n     *\n     * isNaN(undefined);\n     * // => true\n     *\n     * _.isNaN(undefined);\n     * // => false\n     */\n    function isNaN(value) {\n      // An `NaN` primitive is the only value that is not equal to itself.\n      // Perform the `toStringTag` check first to avoid errors with some\n      // ActiveX objects in IE.\n      return isNumber(value) && value != +value;\n    }\n\n    /**\n     * Checks if `value` is a pristine native function.\n     *\n     * **Note:** This method can't reliably detect native functions in the presence\n     * of the core-js package because core-js circumvents this kind of detection.\n     * Despite multiple requests, the core-js maintainer has made it clear: any\n     * attempt to fix the detection will be obstructed. As a result, we're left\n     * with little choice but to throw an error. Unfortunately, this also affects\n     * packages, like [babel-polyfill](https://www.npmjs.com/package/babel-polyfill),\n     * which rely on core-js.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category Lang\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is a native function,\n     *  else `false`.\n     * @example\n     *\n     * _.isNative(Array.prototype.push);\n     * // => true\n     *\n     * _.isNative(_);\n     * // => false\n     */\n    function isNative(value) {\n      if (isMaskable(value)) {\n        throw new Error(CORE_ERROR_TEXT);\n      }\n      return baseIsNative(value);\n    }\n\n    /**\n     * Checks if `value` is `null`.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Lang\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is `null`, else `false`.\n     * @example\n     *\n     * _.isNull(null);\n     * // => true\n     *\n     * _.isNull(void 0);\n     * // => false\n     */\n    function isNull(value) {\n      return value === null;\n    }\n\n    /**\n     * Checks if `value` is `null` or `undefined`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Lang\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is nullish, else `false`.\n     * @example\n     *\n     * _.isNil(null);\n     * // => true\n     *\n     * _.isNil(void 0);\n     * // => true\n     *\n     * _.isNil(NaN);\n     * // => false\n     */\n    function isNil(value) {\n      return value == null;\n    }\n\n    /**\n     * Checks if `value` is classified as a `Number` primitive or object.\n     *\n     * **Note:** To exclude `Infinity`, `-Infinity`, and `NaN`, which are\n     * classified as numbers, use the `_.isFinite` method.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Lang\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is a number, else `false`.\n     * @example\n     *\n     * _.isNumber(3);\n     * // => true\n     *\n     * _.isNumber(Number.MIN_VALUE);\n     * // => true\n     *\n     * _.isNumber(Infinity);\n     * // => true\n     *\n     * _.isNumber('3');\n     * // => false\n     */\n    function isNumber(value) {\n      return typeof value == 'number' ||\n        (isObjectLike(value) && baseGetTag(value) == numberTag);\n    }\n\n    /**\n     * Checks if `value` is a plain object, that is, an object created by the\n     * `Object` constructor or one with a `[[Prototype]]` of `null`.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.8.0\n     * @category Lang\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is a plain object, else `false`.\n     * @example\n     *\n     * function Foo() {\n     *   this.a = 1;\n     * }\n     *\n     * _.isPlainObject(new Foo);\n     * // => false\n     *\n     * _.isPlainObject([1, 2, 3]);\n     * // => false\n     *\n     * _.isPlainObject({ 'x': 0, 'y': 0 });\n     * // => true\n     *\n     * _.isPlainObject(Object.create(null));\n     * // => true\n     */\n    function isPlainObject(value) {\n      if (!isObjectLike(value) || baseGetTag(value) != objectTag) {\n        return false;\n      }\n      var proto = getPrototype(value);\n      if (proto === null) {\n        return true;\n      }\n      var Ctor = hasOwnProperty.call(proto, 'constructor') && proto.constructor;\n      return typeof Ctor == 'function' && Ctor instanceof Ctor &&\n        funcToString.call(Ctor) == objectCtorString;\n    }\n\n    /**\n     * Checks if `value` is classified as a `RegExp` object.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Lang\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is a regexp, else `false`.\n     * @example\n     *\n     * _.isRegExp(/abc/);\n     * // => true\n     *\n     * _.isRegExp('/abc/');\n     * // => false\n     */\n    var isRegExp = nodeIsRegExp ? baseUnary(nodeIsRegExp) : baseIsRegExp;\n\n    /**\n     * Checks if `value` is a safe integer. An integer is safe if it's an IEEE-754\n     * double precision number which isn't the result of a rounded unsafe integer.\n     *\n     * **Note:** This method is based on\n     * [`Number.isSafeInteger`](https://mdn.io/Number/isSafeInteger).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Lang\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is a safe integer, else `false`.\n     * @example\n     *\n     * _.isSafeInteger(3);\n     * // => true\n     *\n     * _.isSafeInteger(Number.MIN_VALUE);\n     * // => false\n     *\n     * _.isSafeInteger(Infinity);\n     * // => false\n     *\n     * _.isSafeInteger('3');\n     * // => false\n     */\n    function isSafeInteger(value) {\n      return isInteger(value) && value >= -MAX_SAFE_INTEGER && value <= MAX_SAFE_INTEGER;\n    }\n\n    /**\n     * Checks if `value` is classified as a `Set` object.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.3.0\n     * @category Lang\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is a set, else `false`.\n     * @example\n     *\n     * _.isSet(new Set);\n     * // => true\n     *\n     * _.isSet(new WeakSet);\n     * // => false\n     */\n    var isSet = nodeIsSet ? baseUnary(nodeIsSet) : baseIsSet;\n\n    /**\n     * Checks if `value` is classified as a `String` primitive or object.\n     *\n     * @static\n     * @since 0.1.0\n     * @memberOf _\n     * @category Lang\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is a string, else `false`.\n     * @example\n     *\n     * _.isString('abc');\n     * // => true\n     *\n     * _.isString(1);\n     * // => false\n     */\n    function isString(value) {\n      return typeof value == 'string' ||\n        (!isArray(value) && isObjectLike(value) && baseGetTag(value) == stringTag);\n    }\n\n    /**\n     * Checks if `value` is classified as a `Symbol` primitive or object.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Lang\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is a symbol, else `false`.\n     * @example\n     *\n     * _.isSymbol(Symbol.iterator);\n     * // => true\n     *\n     * _.isSymbol('abc');\n     * // => false\n     */\n    function isSymbol(value) {\n      return typeof value == 'symbol' ||\n        (isObjectLike(value) && baseGetTag(value) == symbolTag);\n    }\n\n    /**\n     * Checks if `value` is classified as a typed array.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category Lang\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is a typed array, else `false`.\n     * @example\n     *\n     * _.isTypedArray(new Uint8Array);\n     * // => true\n     *\n     * _.isTypedArray([]);\n     * // => false\n     */\n    var isTypedArray = nodeIsTypedArray ? baseUnary(nodeIsTypedArray) : baseIsTypedArray;\n\n    /**\n     * Checks if `value` is `undefined`.\n     *\n     * @static\n     * @since 0.1.0\n     * @memberOf _\n     * @category Lang\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is `undefined`, else `false`.\n     * @example\n     *\n     * _.isUndefined(void 0);\n     * // => true\n     *\n     * _.isUndefined(null);\n     * // => false\n     */\n    function isUndefined(value) {\n      return value === undefined;\n    }\n\n    /**\n     * Checks if `value` is classified as a `WeakMap` object.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.3.0\n     * @category Lang\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is a weak map, else `false`.\n     * @example\n     *\n     * _.isWeakMap(new WeakMap);\n     * // => true\n     *\n     * _.isWeakMap(new Map);\n     * // => false\n     */\n    function isWeakMap(value) {\n      return isObjectLike(value) && getTag(value) == weakMapTag;\n    }\n\n    /**\n     * Checks if `value` is classified as a `WeakSet` object.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.3.0\n     * @category Lang\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is a weak set, else `false`.\n     * @example\n     *\n     * _.isWeakSet(new WeakSet);\n     * // => true\n     *\n     * _.isWeakSet(new Set);\n     * // => false\n     */\n    function isWeakSet(value) {\n      return isObjectLike(value) && baseGetTag(value) == weakSetTag;\n    }\n\n    /**\n     * Checks if `value` is less than `other`.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.9.0\n     * @category Lang\n     * @param {*} value The value to compare.\n     * @param {*} other The other value to compare.\n     * @returns {boolean} Returns `true` if `value` is less than `other`,\n     *  else `false`.\n     * @see _.gt\n     * @example\n     *\n     * _.lt(1, 3);\n     * // => true\n     *\n     * _.lt(3, 3);\n     * // => false\n     *\n     * _.lt(3, 1);\n     * // => false\n     */\n    var lt = createRelationalOperation(baseLt);\n\n    /**\n     * Checks if `value` is less than or equal to `other`.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.9.0\n     * @category Lang\n     * @param {*} value The value to compare.\n     * @param {*} other The other value to compare.\n     * @returns {boolean} Returns `true` if `value` is less than or equal to\n     *  `other`, else `false`.\n     * @see _.gte\n     * @example\n     *\n     * _.lte(1, 3);\n     * // => true\n     *\n     * _.lte(3, 3);\n     * // => true\n     *\n     * _.lte(3, 1);\n     * // => false\n     */\n    var lte = createRelationalOperation(function(value, other) {\n      return value <= other;\n    });\n\n    /**\n     * Converts `value` to an array.\n     *\n     * @static\n     * @since 0.1.0\n     * @memberOf _\n     * @category Lang\n     * @param {*} value The value to convert.\n     * @returns {Array} Returns the converted array.\n     * @example\n     *\n     * _.toArray({ 'a': 1, 'b': 2 });\n     * // => [1, 2]\n     *\n     * _.toArray('abc');\n     * // => ['a', 'b', 'c']\n     *\n     * _.toArray(1);\n     * // => []\n     *\n     * _.toArray(null);\n     * // => []\n     */\n    function toArray(value) {\n      if (!value) {\n        return [];\n      }\n      if (isArrayLike(value)) {\n        return isString(value) ? stringToArray(value) : copyArray(value);\n      }\n      if (symIterator && value[symIterator]) {\n        return iteratorToArray(value[symIterator]());\n      }\n      var tag = getTag(value),\n          func = tag == mapTag ? mapToArray : (tag == setTag ? setToArray : values);\n\n      return func(value);\n    }\n\n    /**\n     * Converts `value` to a finite number.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.12.0\n     * @category Lang\n     * @param {*} value The value to convert.\n     * @returns {number} Returns the converted number.\n     * @example\n     *\n     * _.toFinite(3.2);\n     * // => 3.2\n     *\n     * _.toFinite(Number.MIN_VALUE);\n     * // => 5e-324\n     *\n     * _.toFinite(Infinity);\n     * // => 1.7976931348623157e+308\n     *\n     * _.toFinite('3.2');\n     * // => 3.2\n     */\n    function toFinite(value) {\n      if (!value) {\n        return value === 0 ? value : 0;\n      }\n      value = toNumber(value);\n      if (value === INFINITY || value === -INFINITY) {\n        var sign = (value < 0 ? -1 : 1);\n        return sign * MAX_INTEGER;\n      }\n      return value === value ? value : 0;\n    }\n\n    /**\n     * Converts `value` to an integer.\n     *\n     * **Note:** This method is loosely based on\n     * [`ToInteger`](http://www.ecma-international.org/ecma-262/7.0/#sec-tointeger).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Lang\n     * @param {*} value The value to convert.\n     * @returns {number} Returns the converted integer.\n     * @example\n     *\n     * _.toInteger(3.2);\n     * // => 3\n     *\n     * _.toInteger(Number.MIN_VALUE);\n     * // => 0\n     *\n     * _.toInteger(Infinity);\n     * // => 1.7976931348623157e+308\n     *\n     * _.toInteger('3.2');\n     * // => 3\n     */\n    function toInteger(value) {\n      var result = toFinite(value),\n          remainder = result % 1;\n\n      return result === result ? (remainder ? result - remainder : result) : 0;\n    }\n\n    /**\n     * Converts `value` to an integer suitable for use as the length of an\n     * array-like object.\n     *\n     * **Note:** This method is based on\n     * [`ToLength`](http://ecma-international.org/ecma-262/7.0/#sec-tolength).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Lang\n     * @param {*} value The value to convert.\n     * @returns {number} Returns the converted integer.\n     * @example\n     *\n     * _.toLength(3.2);\n     * // => 3\n     *\n     * _.toLength(Number.MIN_VALUE);\n     * // => 0\n     *\n     * _.toLength(Infinity);\n     * // => 4294967295\n     *\n     * _.toLength('3.2');\n     * // => 3\n     */\n    function toLength(value) {\n      return value ? baseClamp(toInteger(value), 0, MAX_ARRAY_LENGTH) : 0;\n    }\n\n    /**\n     * Converts `value` to a number.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Lang\n     * @param {*} value The value to process.\n     * @returns {number} Returns the number.\n     * @example\n     *\n     * _.toNumber(3.2);\n     * // => 3.2\n     *\n     * _.toNumber(Number.MIN_VALUE);\n     * // => 5e-324\n     *\n     * _.toNumber(Infinity);\n     * // => Infinity\n     *\n     * _.toNumber('3.2');\n     * // => 3.2\n     */\n    function toNumber(value) {\n      if (typeof value == 'number') {\n        return value;\n      }\n      if (isSymbol(value)) {\n        return NAN;\n      }\n      if (isObject(value)) {\n        var other = typeof value.valueOf == 'function' ? value.valueOf() : value;\n        value = isObject(other) ? (other + '') : other;\n      }\n      if (typeof value != 'string') {\n        return value === 0 ? value : +value;\n      }\n      value = baseTrim(value);\n      var isBinary = reIsBinary.test(value);\n      return (isBinary || reIsOctal.test(value))\n        ? freeParseInt(value.slice(2), isBinary ? 2 : 8)\n        : (reIsBadHex.test(value) ? NAN : +value);\n    }\n\n    /**\n     * Converts `value` to a plain object flattening inherited enumerable string\n     * keyed properties of `value` to own properties of the plain object.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category Lang\n     * @param {*} value The value to convert.\n     * @returns {Object} Returns the converted plain object.\n     * @example\n     *\n     * function Foo() {\n     *   this.b = 2;\n     * }\n     *\n     * Foo.prototype.c = 3;\n     *\n     * _.assign({ 'a': 1 }, new Foo);\n     * // => { 'a': 1, 'b': 2 }\n     *\n     * _.assign({ 'a': 1 }, _.toPlainObject(new Foo));\n     * // => { 'a': 1, 'b': 2, 'c': 3 }\n     */\n    function toPlainObject(value) {\n      return copyObject(value, keysIn(value));\n    }\n\n    /**\n     * Converts `value` to a safe integer. A safe integer can be compared and\n     * represented correctly.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Lang\n     * @param {*} value The value to convert.\n     * @returns {number} Returns the converted integer.\n     * @example\n     *\n     * _.toSafeInteger(3.2);\n     * // => 3\n     *\n     * _.toSafeInteger(Number.MIN_VALUE);\n     * // => 0\n     *\n     * _.toSafeInteger(Infinity);\n     * // => 9007199254740991\n     *\n     * _.toSafeInteger('3.2');\n     * // => 3\n     */\n    function toSafeInteger(value) {\n      return value\n        ? baseClamp(toInteger(value), -MAX_SAFE_INTEGER, MAX_SAFE_INTEGER)\n        : (value === 0 ? value : 0);\n    }\n\n    /**\n     * Converts `value` to a string. An empty string is returned for `null`\n     * and `undefined` values. The sign of `-0` is preserved.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Lang\n     * @param {*} value The value to convert.\n     * @returns {string} Returns the converted string.\n     * @example\n     *\n     * _.toString(null);\n     * // => ''\n     *\n     * _.toString(-0);\n     * // => '-0'\n     *\n     * _.toString([1, 2, 3]);\n     * // => '1,2,3'\n     */\n    function toString(value) {\n      return value == null ? '' : baseToString(value);\n    }\n\n    /*------------------------------------------------------------------------*/\n\n    /**\n     * Assigns own enumerable string keyed properties of source objects to the\n     * destination object. Source objects are applied from left to right.\n     * Subsequent sources overwrite property assignments of previous sources.\n     *\n     * **Note:** This method mutates `object` and is loosely based on\n     * [`Object.assign`](https://mdn.io/Object/assign).\n     *\n     * @static\n     * @memberOf _\n     * @since 0.10.0\n     * @category Object\n     * @param {Object} object The destination object.\n     * @param {...Object} [sources] The source objects.\n     * @returns {Object} Returns `object`.\n     * @see _.assignIn\n     * @example\n     *\n     * function Foo() {\n     *   this.a = 1;\n     * }\n     *\n     * function Bar() {\n     *   this.c = 3;\n     * }\n     *\n     * Foo.prototype.b = 2;\n     * Bar.prototype.d = 4;\n     *\n     * _.assign({ 'a': 0 }, new Foo, new Bar);\n     * // => { 'a': 1, 'c': 3 }\n     */\n    var assign = createAssigner(function(object, source) {\n      if (isPrototype(source) || isArrayLike(source)) {\n        copyObject(source, keys(source), object);\n        return;\n      }\n      for (var key in source) {\n        if (hasOwnProperty.call(source, key)) {\n          assignValue(object, key, source[key]);\n        }\n      }\n    });\n\n    /**\n     * This method is like `_.assign` except that it iterates over own and\n     * inherited source properties.\n     *\n     * **Note:** This method mutates `object`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @alias extend\n     * @category Object\n     * @param {Object} object The destination object.\n     * @param {...Object} [sources] The source objects.\n     * @returns {Object} Returns `object`.\n     * @see _.assign\n     * @example\n     *\n     * function Foo() {\n     *   this.a = 1;\n     * }\n     *\n     * function Bar() {\n     *   this.c = 3;\n     * }\n     *\n     * Foo.prototype.b = 2;\n     * Bar.prototype.d = 4;\n     *\n     * _.assignIn({ 'a': 0 }, new Foo, new Bar);\n     * // => { 'a': 1, 'b': 2, 'c': 3, 'd': 4 }\n     */\n    var assignIn = createAssigner(function(object, source) {\n      copyObject(source, keysIn(source), object);\n    });\n\n    /**\n     * This method is like `_.assignIn` except that it accepts `customizer`\n     * which is invoked to produce the assigned values. If `customizer` returns\n     * `undefined`, assignment is handled by the method instead. The `customizer`\n     * is invoked with five arguments: (objValue, srcValue, key, object, source).\n     *\n     * **Note:** This method mutates `object`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @alias extendWith\n     * @category Object\n     * @param {Object} object The destination object.\n     * @param {...Object} sources The source objects.\n     * @param {Function} [customizer] The function to customize assigned values.\n     * @returns {Object} Returns `object`.\n     * @see _.assignWith\n     * @example\n     *\n     * function customizer(objValue, srcValue) {\n     *   return _.isUndefined(objValue) ? srcValue : objValue;\n     * }\n     *\n     * var defaults = _.partialRight(_.assignInWith, customizer);\n     *\n     * defaults({ 'a': 1 }, { 'b': 2 }, { 'a': 3 });\n     * // => { 'a': 1, 'b': 2 }\n     */\n    var assignInWith = createAssigner(function(object, source, srcIndex, customizer) {\n      copyObject(source, keysIn(source), object, customizer);\n    });\n\n    /**\n     * This method is like `_.assign` except that it accepts `customizer`\n     * which is invoked to produce the assigned values. If `customizer` returns\n     * `undefined`, assignment is handled by the method instead. The `customizer`\n     * is invoked with five arguments: (objValue, srcValue, key, object, source).\n     *\n     * **Note:** This method mutates `object`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Object\n     * @param {Object} object The destination object.\n     * @param {...Object} sources The source objects.\n     * @param {Function} [customizer] The function to customize assigned values.\n     * @returns {Object} Returns `object`.\n     * @see _.assignInWith\n     * @example\n     *\n     * function customizer(objValue, srcValue) {\n     *   return _.isUndefined(objValue) ? srcValue : objValue;\n     * }\n     *\n     * var defaults = _.partialRight(_.assignWith, customizer);\n     *\n     * defaults({ 'a': 1 }, { 'b': 2 }, { 'a': 3 });\n     * // => { 'a': 1, 'b': 2 }\n     */\n    var assignWith = createAssigner(function(object, source, srcIndex, customizer) {\n      copyObject(source, keys(source), object, customizer);\n    });\n\n    /**\n     * Creates an array of values corresponding to `paths` of `object`.\n     *\n     * @static\n     * @memberOf _\n     * @since 1.0.0\n     * @category Object\n     * @param {Object} object The object to iterate over.\n     * @param {...(string|string[])} [paths] The property paths to pick.\n     * @returns {Array} Returns the picked values.\n     * @example\n     *\n     * var object = { 'a': [{ 'b': { 'c': 3 } }, 4] };\n     *\n     * _.at(object, ['a[0].b.c', 'a[1]']);\n     * // => [3, 4]\n     */\n    var at = flatRest(baseAt);\n\n    /**\n     * Creates an object that inherits from the `prototype` object. If a\n     * `properties` object is given, its own enumerable string keyed properties\n     * are assigned to the created object.\n     *\n     * @static\n     * @memberOf _\n     * @since 2.3.0\n     * @category Object\n     * @param {Object} prototype The object to inherit from.\n     * @param {Object} [properties] The properties to assign to the object.\n     * @returns {Object} Returns the new object.\n     * @example\n     *\n     * function Shape() {\n     *   this.x = 0;\n     *   this.y = 0;\n     * }\n     *\n     * function Circle() {\n     *   Shape.call(this);\n     * }\n     *\n     * Circle.prototype = _.create(Shape.prototype, {\n     *   'constructor': Circle\n     * });\n     *\n     * var circle = new Circle;\n     * circle instanceof Circle;\n     * // => true\n     *\n     * circle instanceof Shape;\n     * // => true\n     */\n    function create(prototype, properties) {\n      var result = baseCreate(prototype);\n      return properties == null ? result : baseAssign(result, properties);\n    }\n\n    /**\n     * Assigns own and inherited enumerable string keyed properties of source\n     * objects to the destination object for all destination properties that\n     * resolve to `undefined`. Source objects are applied from left to right.\n     * Once a property is set, additional values of the same property are ignored.\n     *\n     * **Note:** This method mutates `object`.\n     *\n     * @static\n     * @since 0.1.0\n     * @memberOf _\n     * @category Object\n     * @param {Object} object The destination object.\n     * @param {...Object} [sources] The source objects.\n     * @returns {Object} Returns `object`.\n     * @see _.defaultsDeep\n     * @example\n     *\n     * _.defaults({ 'a': 1 }, { 'b': 2 }, { 'a': 3 });\n     * // => { 'a': 1, 'b': 2 }\n     */\n    var defaults = baseRest(function(object, sources) {\n      object = Object(object);\n\n      var index = -1;\n      var length = sources.length;\n      var guard = length > 2 ? sources[2] : undefined;\n\n      if (guard && isIterateeCall(sources[0], sources[1], guard)) {\n        length = 1;\n      }\n\n      while (++index < length) {\n        var source = sources[index];\n        var props = keysIn(source);\n        var propsIndex = -1;\n        var propsLength = props.length;\n\n        while (++propsIndex < propsLength) {\n          var key = props[propsIndex];\n          var value = object[key];\n\n          if (value === undefined ||\n              (eq(value, objectProto[key]) && !hasOwnProperty.call(object, key))) {\n            object[key] = source[key];\n          }\n        }\n      }\n\n      return object;\n    });\n\n    /**\n     * This method is like `_.defaults` except that it recursively assigns\n     * default properties.\n     *\n     * **Note:** This method mutates `object`.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.10.0\n     * @category Object\n     * @param {Object} object The destination object.\n     * @param {...Object} [sources] The source objects.\n     * @returns {Object} Returns `object`.\n     * @see _.defaults\n     * @example\n     *\n     * _.defaultsDeep({ 'a': { 'b': 2 } }, { 'a': { 'b': 1, 'c': 3 } });\n     * // => { 'a': { 'b': 2, 'c': 3 } }\n     */\n    var defaultsDeep = baseRest(function(args) {\n      args.push(undefined, customDefaultsMerge);\n      return apply(mergeWith, undefined, args);\n    });\n\n    /**\n     * This method is like `_.find` except that it returns the key of the first\n     * element `predicate` returns truthy for instead of the element itself.\n     *\n     * @static\n     * @memberOf _\n     * @since 1.1.0\n     * @category Object\n     * @param {Object} object The object to inspect.\n     * @param {Function} [predicate=_.identity] The function invoked per iteration.\n     * @returns {string|undefined} Returns the key of the matched element,\n     *  else `undefined`.\n     * @example\n     *\n     * var users = {\n     *   'barney':  { 'age': 36, 'active': true },\n     *   'fred':    { 'age': 40, 'active': false },\n     *   'pebbles': { 'age': 1,  'active': true }\n     * };\n     *\n     * _.findKey(users, function(o) { return o.age < 40; });\n     * // => 'barney' (iteration order is not guaranteed)\n     *\n     * // The `_.matches` iteratee shorthand.\n     * _.findKey(users, { 'age': 1, 'active': true });\n     * // => 'pebbles'\n     *\n     * // The `_.matchesProperty` iteratee shorthand.\n     * _.findKey(users, ['active', false]);\n     * // => 'fred'\n     *\n     * // The `_.property` iteratee shorthand.\n     * _.findKey(users, 'active');\n     * // => 'barney'\n     */\n    function findKey(object, predicate) {\n      return baseFindKey(object, getIteratee(predicate, 3), baseForOwn);\n    }\n\n    /**\n     * This method is like `_.findKey` except that it iterates over elements of\n     * a collection in the opposite order.\n     *\n     * @static\n     * @memberOf _\n     * @since 2.0.0\n     * @category Object\n     * @param {Object} object The object to inspect.\n     * @param {Function} [predicate=_.identity] The function invoked per iteration.\n     * @returns {string|undefined} Returns the key of the matched element,\n     *  else `undefined`.\n     * @example\n     *\n     * var users = {\n     *   'barney':  { 'age': 36, 'active': true },\n     *   'fred':    { 'age': 40, 'active': false },\n     *   'pebbles': { 'age': 1,  'active': true }\n     * };\n     *\n     * _.findLastKey(users, function(o) { return o.age < 40; });\n     * // => returns 'pebbles' assuming `_.findKey` returns 'barney'\n     *\n     * // The `_.matches` iteratee shorthand.\n     * _.findLastKey(users, { 'age': 36, 'active': true });\n     * // => 'barney'\n     *\n     * // The `_.matchesProperty` iteratee shorthand.\n     * _.findLastKey(users, ['active', false]);\n     * // => 'fred'\n     *\n     * // The `_.property` iteratee shorthand.\n     * _.findLastKey(users, 'active');\n     * // => 'pebbles'\n     */\n    function findLastKey(object, predicate) {\n      return baseFindKey(object, getIteratee(predicate, 3), baseForOwnRight);\n    }\n\n    /**\n     * Iterates over own and inherited enumerable string keyed properties of an\n     * object and invokes `iteratee` for each property. The iteratee is invoked\n     * with three arguments: (value, key, object). Iteratee functions may exit\n     * iteration early by explicitly returning `false`.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.3.0\n     * @category Object\n     * @param {Object} object The object to iterate over.\n     * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n     * @returns {Object} Returns `object`.\n     * @see _.forInRight\n     * @example\n     *\n     * function Foo() {\n     *   this.a = 1;\n     *   this.b = 2;\n     * }\n     *\n     * Foo.prototype.c = 3;\n     *\n     * _.forIn(new Foo, function(value, key) {\n     *   console.log(key);\n     * });\n     * // => Logs 'a', 'b', then 'c' (iteration order is not guaranteed).\n     */\n    function forIn(object, iteratee) {\n      return object == null\n        ? object\n        : baseFor(object, getIteratee(iteratee, 3), keysIn);\n    }\n\n    /**\n     * This method is like `_.forIn` except that it iterates over properties of\n     * `object` in the opposite order.\n     *\n     * @static\n     * @memberOf _\n     * @since 2.0.0\n     * @category Object\n     * @param {Object} object The object to iterate over.\n     * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n     * @returns {Object} Returns `object`.\n     * @see _.forIn\n     * @example\n     *\n     * function Foo() {\n     *   this.a = 1;\n     *   this.b = 2;\n     * }\n     *\n     * Foo.prototype.c = 3;\n     *\n     * _.forInRight(new Foo, function(value, key) {\n     *   console.log(key);\n     * });\n     * // => Logs 'c', 'b', then 'a' assuming `_.forIn` logs 'a', 'b', then 'c'.\n     */\n    function forInRight(object, iteratee) {\n      return object == null\n        ? object\n        : baseForRight(object, getIteratee(iteratee, 3), keysIn);\n    }\n\n    /**\n     * Iterates over own enumerable string keyed properties of an object and\n     * invokes `iteratee` for each property. The iteratee is invoked with three\n     * arguments: (value, key, object). Iteratee functions may exit iteration\n     * early by explicitly returning `false`.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.3.0\n     * @category Object\n     * @param {Object} object The object to iterate over.\n     * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n     * @returns {Object} Returns `object`.\n     * @see _.forOwnRight\n     * @example\n     *\n     * function Foo() {\n     *   this.a = 1;\n     *   this.b = 2;\n     * }\n     *\n     * Foo.prototype.c = 3;\n     *\n     * _.forOwn(new Foo, function(value, key) {\n     *   console.log(key);\n     * });\n     * // => Logs 'a' then 'b' (iteration order is not guaranteed).\n     */\n    function forOwn(object, iteratee) {\n      return object && baseForOwn(object, getIteratee(iteratee, 3));\n    }\n\n    /**\n     * This method is like `_.forOwn` except that it iterates over properties of\n     * `object` in the opposite order.\n     *\n     * @static\n     * @memberOf _\n     * @since 2.0.0\n     * @category Object\n     * @param {Object} object The object to iterate over.\n     * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n     * @returns {Object} Returns `object`.\n     * @see _.forOwn\n     * @example\n     *\n     * function Foo() {\n     *   this.a = 1;\n     *   this.b = 2;\n     * }\n     *\n     * Foo.prototype.c = 3;\n     *\n     * _.forOwnRight(new Foo, function(value, key) {\n     *   console.log(key);\n     * });\n     * // => Logs 'b' then 'a' assuming `_.forOwn` logs 'a' then 'b'.\n     */\n    function forOwnRight(object, iteratee) {\n      return object && baseForOwnRight(object, getIteratee(iteratee, 3));\n    }\n\n    /**\n     * Creates an array of function property names from own enumerable properties\n     * of `object`.\n     *\n     * @static\n     * @since 0.1.0\n     * @memberOf _\n     * @category Object\n     * @param {Object} object The object to inspect.\n     * @returns {Array} Returns the function names.\n     * @see _.functionsIn\n     * @example\n     *\n     * function Foo() {\n     *   this.a = _.constant('a');\n     *   this.b = _.constant('b');\n     * }\n     *\n     * Foo.prototype.c = _.constant('c');\n     *\n     * _.functions(new Foo);\n     * // => ['a', 'b']\n     */\n    function functions(object) {\n      return object == null ? [] : baseFunctions(object, keys(object));\n    }\n\n    /**\n     * Creates an array of function property names from own and inherited\n     * enumerable properties of `object`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Object\n     * @param {Object} object The object to inspect.\n     * @returns {Array} Returns the function names.\n     * @see _.functions\n     * @example\n     *\n     * function Foo() {\n     *   this.a = _.constant('a');\n     *   this.b = _.constant('b');\n     * }\n     *\n     * Foo.prototype.c = _.constant('c');\n     *\n     * _.functionsIn(new Foo);\n     * // => ['a', 'b', 'c']\n     */\n    function functionsIn(object) {\n      return object == null ? [] : baseFunctions(object, keysIn(object));\n    }\n\n    /**\n     * Gets the value at `path` of `object`. If the resolved value is\n     * `undefined`, the `defaultValue` is returned in its place.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.7.0\n     * @category Object\n     * @param {Object} object The object to query.\n     * @param {Array|string} path The path of the property to get.\n     * @param {*} [defaultValue] The value returned for `undefined` resolved values.\n     * @returns {*} Returns the resolved value.\n     * @example\n     *\n     * var object = { 'a': [{ 'b': { 'c': 3 } }] };\n     *\n     * _.get(object, 'a[0].b.c');\n     * // => 3\n     *\n     * _.get(object, ['a', '0', 'b', 'c']);\n     * // => 3\n     *\n     * _.get(object, 'a.b.c', 'default');\n     * // => 'default'\n     */\n    function get(object, path, defaultValue) {\n      var result = object == null ? undefined : baseGet(object, path);\n      return result === undefined ? defaultValue : result;\n    }\n\n    /**\n     * Checks if `path` is a direct property of `object`.\n     *\n     * @static\n     * @since 0.1.0\n     * @memberOf _\n     * @category Object\n     * @param {Object} object The object to query.\n     * @param {Array|string} path The path to check.\n     * @returns {boolean} Returns `true` if `path` exists, else `false`.\n     * @example\n     *\n     * var object = { 'a': { 'b': 2 } };\n     * var other = _.create({ 'a': _.create({ 'b': 2 }) });\n     *\n     * _.has(object, 'a');\n     * // => true\n     *\n     * _.has(object, 'a.b');\n     * // => true\n     *\n     * _.has(object, ['a', 'b']);\n     * // => true\n     *\n     * _.has(other, 'a');\n     * // => false\n     */\n    function has(object, path) {\n      return object != null && hasPath(object, path, baseHas);\n    }\n\n    /**\n     * Checks if `path` is a direct or inherited property of `object`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Object\n     * @param {Object} object The object to query.\n     * @param {Array|string} path The path to check.\n     * @returns {boolean} Returns `true` if `path` exists, else `false`.\n     * @example\n     *\n     * var object = _.create({ 'a': _.create({ 'b': 2 }) });\n     *\n     * _.hasIn(object, 'a');\n     * // => true\n     *\n     * _.hasIn(object, 'a.b');\n     * // => true\n     *\n     * _.hasIn(object, ['a', 'b']);\n     * // => true\n     *\n     * _.hasIn(object, 'b');\n     * // => false\n     */\n    function hasIn(object, path) {\n      return object != null && hasPath(object, path, baseHasIn);\n    }\n\n    /**\n     * Creates an object composed of the inverted keys and values of `object`.\n     * If `object` contains duplicate values, subsequent values overwrite\n     * property assignments of previous values.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.7.0\n     * @category Object\n     * @param {Object} object The object to invert.\n     * @returns {Object} Returns the new inverted object.\n     * @example\n     *\n     * var object = { 'a': 1, 'b': 2, 'c': 1 };\n     *\n     * _.invert(object);\n     * // => { '1': 'c', '2': 'b' }\n     */\n    var invert = createInverter(function(result, value, key) {\n      if (value != null &&\n          typeof value.toString != 'function') {\n        value = nativeObjectToString.call(value);\n      }\n\n      result[value] = key;\n    }, constant(identity));\n\n    /**\n     * This method is like `_.invert` except that the inverted object is generated\n     * from the results of running each element of `object` thru `iteratee`. The\n     * corresponding inverted value of each inverted key is an array of keys\n     * responsible for generating the inverted value. The iteratee is invoked\n     * with one argument: (value).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.1.0\n     * @category Object\n     * @param {Object} object The object to invert.\n     * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n     * @returns {Object} Returns the new inverted object.\n     * @example\n     *\n     * var object = { 'a': 1, 'b': 2, 'c': 1 };\n     *\n     * _.invertBy(object);\n     * // => { '1': ['a', 'c'], '2': ['b'] }\n     *\n     * _.invertBy(object, function(value) {\n     *   return 'group' + value;\n     * });\n     * // => { 'group1': ['a', 'c'], 'group2': ['b'] }\n     */\n    var invertBy = createInverter(function(result, value, key) {\n      if (value != null &&\n          typeof value.toString != 'function') {\n        value = nativeObjectToString.call(value);\n      }\n\n      if (hasOwnProperty.call(result, value)) {\n        result[value].push(key);\n      } else {\n        result[value] = [key];\n      }\n    }, getIteratee);\n\n    /**\n     * Invokes the method at `path` of `object`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Object\n     * @param {Object} object The object to query.\n     * @param {Array|string} path The path of the method to invoke.\n     * @param {...*} [args] The arguments to invoke the method with.\n     * @returns {*} Returns the result of the invoked method.\n     * @example\n     *\n     * var object = { 'a': [{ 'b': { 'c': [1, 2, 3, 4] } }] };\n     *\n     * _.invoke(object, 'a[0].b.c.slice', 1, 3);\n     * // => [2, 3]\n     */\n    var invoke = baseRest(baseInvoke);\n\n    /**\n     * Creates an array of the own enumerable property names of `object`.\n     *\n     * **Note:** Non-object values are coerced to objects. See the\n     * [ES spec](http://ecma-international.org/ecma-262/7.0/#sec-object.keys)\n     * for more details.\n     *\n     * @static\n     * @since 0.1.0\n     * @memberOf _\n     * @category Object\n     * @param {Object} object The object to query.\n     * @returns {Array} Returns the array of property names.\n     * @example\n     *\n     * function Foo() {\n     *   this.a = 1;\n     *   this.b = 2;\n     * }\n     *\n     * Foo.prototype.c = 3;\n     *\n     * _.keys(new Foo);\n     * // => ['a', 'b'] (iteration order is not guaranteed)\n     *\n     * _.keys('hi');\n     * // => ['0', '1']\n     */\n    function keys(object) {\n      return isArrayLike(object) ? arrayLikeKeys(object) : baseKeys(object);\n    }\n\n    /**\n     * Creates an array of the own and inherited enumerable property names of `object`.\n     *\n     * **Note:** Non-object values are coerced to objects.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category Object\n     * @param {Object} object The object to query.\n     * @returns {Array} Returns the array of property names.\n     * @example\n     *\n     * function Foo() {\n     *   this.a = 1;\n     *   this.b = 2;\n     * }\n     *\n     * Foo.prototype.c = 3;\n     *\n     * _.keysIn(new Foo);\n     * // => ['a', 'b', 'c'] (iteration order is not guaranteed)\n     */\n    function keysIn(object) {\n      return isArrayLike(object) ? arrayLikeKeys(object, true) : baseKeysIn(object);\n    }\n\n    /**\n     * The opposite of `_.mapValues`; this method creates an object with the\n     * same values as `object` and keys generated by running each own enumerable\n     * string keyed property of `object` thru `iteratee`. The iteratee is invoked\n     * with three arguments: (value, key, object).\n     *\n     * @static\n     * @memberOf _\n     * @since 3.8.0\n     * @category Object\n     * @param {Object} object The object to iterate over.\n     * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n     * @returns {Object} Returns the new mapped object.\n     * @see _.mapValues\n     * @example\n     *\n     * _.mapKeys({ 'a': 1, 'b': 2 }, function(value, key) {\n     *   return key + value;\n     * });\n     * // => { 'a1': 1, 'b2': 2 }\n     */\n    function mapKeys(object, iteratee) {\n      var result = {};\n      iteratee = getIteratee(iteratee, 3);\n\n      baseForOwn(object, function(value, key, object) {\n        baseAssignValue(result, iteratee(value, key, object), value);\n      });\n      return result;\n    }\n\n    /**\n     * Creates an object with the same keys as `object` and values generated\n     * by running each own enumerable string keyed property of `object` thru\n     * `iteratee`. The iteratee is invoked with three arguments:\n     * (value, key, object).\n     *\n     * @static\n     * @memberOf _\n     * @since 2.4.0\n     * @category Object\n     * @param {Object} object The object to iterate over.\n     * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n     * @returns {Object} Returns the new mapped object.\n     * @see _.mapKeys\n     * @example\n     *\n     * var users = {\n     *   'fred':    { 'user': 'fred',    'age': 40 },\n     *   'pebbles': { 'user': 'pebbles', 'age': 1 }\n     * };\n     *\n     * _.mapValues(users, function(o) { return o.age; });\n     * // => { 'fred': 40, 'pebbles': 1 } (iteration order is not guaranteed)\n     *\n     * // The `_.property` iteratee shorthand.\n     * _.mapValues(users, 'age');\n     * // => { 'fred': 40, 'pebbles': 1 } (iteration order is not guaranteed)\n     */\n    function mapValues(object, iteratee) {\n      var result = {};\n      iteratee = getIteratee(iteratee, 3);\n\n      baseForOwn(object, function(value, key, object) {\n        baseAssignValue(result, key, iteratee(value, key, object));\n      });\n      return result;\n    }\n\n    /**\n     * This method is like `_.assign` except that it recursively merges own and\n     * inherited enumerable string keyed properties of source objects into the\n     * destination object. Source properties that resolve to `undefined` are\n     * skipped if a destination value exists. Array and plain object properties\n     * are merged recursively. Other objects and value types are overridden by\n     * assignment. Source objects are applied from left to right. Subsequent\n     * sources overwrite property assignments of previous sources.\n     *\n     * **Note:** This method mutates `object`.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.5.0\n     * @category Object\n     * @param {Object} object The destination object.\n     * @param {...Object} [sources] The source objects.\n     * @returns {Object} Returns `object`.\n     * @example\n     *\n     * var object = {\n     *   'a': [{ 'b': 2 }, { 'd': 4 }]\n     * };\n     *\n     * var other = {\n     *   'a': [{ 'c': 3 }, { 'e': 5 }]\n     * };\n     *\n     * _.merge(object, other);\n     * // => { 'a': [{ 'b': 2, 'c': 3 }, { 'd': 4, 'e': 5 }] }\n     */\n    var merge = createAssigner(function(object, source, srcIndex) {\n      baseMerge(object, source, srcIndex);\n    });\n\n    /**\n     * This method is like `_.merge` except that it accepts `customizer` which\n     * is invoked to produce the merged values of the destination and source\n     * properties. If `customizer` returns `undefined`, merging is handled by the\n     * method instead. The `customizer` is invoked with six arguments:\n     * (objValue, srcValue, key, object, source, stack).\n     *\n     * **Note:** This method mutates `object`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Object\n     * @param {Object} object The destination object.\n     * @param {...Object} sources The source objects.\n     * @param {Function} customizer The function to customize assigned values.\n     * @returns {Object} Returns `object`.\n     * @example\n     *\n     * function customizer(objValue, srcValue) {\n     *   if (_.isArray(objValue)) {\n     *     return objValue.concat(srcValue);\n     *   }\n     * }\n     *\n     * var object = { 'a': [1], 'b': [2] };\n     * var other = { 'a': [3], 'b': [4] };\n     *\n     * _.mergeWith(object, other, customizer);\n     * // => { 'a': [1, 3], 'b': [2, 4] }\n     */\n    var mergeWith = createAssigner(function(object, source, srcIndex, customizer) {\n      baseMerge(object, source, srcIndex, customizer);\n    });\n\n    /**\n     * The opposite of `_.pick`; this method creates an object composed of the\n     * own and inherited enumerable property paths of `object` that are not omitted.\n     *\n     * **Note:** This method is considerably slower than `_.pick`.\n     *\n     * @static\n     * @since 0.1.0\n     * @memberOf _\n     * @category Object\n     * @param {Object} object The source object.\n     * @param {...(string|string[])} [paths] The property paths to omit.\n     * @returns {Object} Returns the new object.\n     * @example\n     *\n     * var object = { 'a': 1, 'b': '2', 'c': 3 };\n     *\n     * _.omit(object, ['a', 'c']);\n     * // => { 'b': '2' }\n     */\n    var omit = flatRest(function(object, paths) {\n      var result = {};\n      if (object == null) {\n        return result;\n      }\n      var isDeep = false;\n      paths = arrayMap(paths, function(path) {\n        path = castPath(path, object);\n        isDeep || (isDeep = path.length > 1);\n        return path;\n      });\n      copyObject(object, getAllKeysIn(object), result);\n      if (isDeep) {\n        result = baseClone(result, CLONE_DEEP_FLAG | CLONE_FLAT_FLAG | CLONE_SYMBOLS_FLAG, customOmitClone);\n      }\n      var length = paths.length;\n      while (length--) {\n        baseUnset(result, paths[length]);\n      }\n      return result;\n    });\n\n    /**\n     * The opposite of `_.pickBy`; this method creates an object composed of\n     * the own and inherited enumerable string keyed properties of `object` that\n     * `predicate` doesn't return truthy for. The predicate is invoked with two\n     * arguments: (value, key).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Object\n     * @param {Object} object The source object.\n     * @param {Function} [predicate=_.identity] The function invoked per property.\n     * @returns {Object} Returns the new object.\n     * @example\n     *\n     * var object = { 'a': 1, 'b': '2', 'c': 3 };\n     *\n     * _.omitBy(object, _.isNumber);\n     * // => { 'b': '2' }\n     */\n    function omitBy(object, predicate) {\n      return pickBy(object, negate(getIteratee(predicate)));\n    }\n\n    /**\n     * Creates an object composed of the picked `object` properties.\n     *\n     * @static\n     * @since 0.1.0\n     * @memberOf _\n     * @category Object\n     * @param {Object} object The source object.\n     * @param {...(string|string[])} [paths] The property paths to pick.\n     * @returns {Object} Returns the new object.\n     * @example\n     *\n     * var object = { 'a': 1, 'b': '2', 'c': 3 };\n     *\n     * _.pick(object, ['a', 'c']);\n     * // => { 'a': 1, 'c': 3 }\n     */\n    var pick = flatRest(function(object, paths) {\n      return object == null ? {} : basePick(object, paths);\n    });\n\n    /**\n     * Creates an object composed of the `object` properties `predicate` returns\n     * truthy for. The predicate is invoked with two arguments: (value, key).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Object\n     * @param {Object} object The source object.\n     * @param {Function} [predicate=_.identity] The function invoked per property.\n     * @returns {Object} Returns the new object.\n     * @example\n     *\n     * var object = { 'a': 1, 'b': '2', 'c': 3 };\n     *\n     * _.pickBy(object, _.isNumber);\n     * // => { 'a': 1, 'c': 3 }\n     */\n    function pickBy(object, predicate) {\n      if (object == null) {\n        return {};\n      }\n      var props = arrayMap(getAllKeysIn(object), function(prop) {\n        return [prop];\n      });\n      predicate = getIteratee(predicate);\n      return basePickBy(object, props, function(value, path) {\n        return predicate(value, path[0]);\n      });\n    }\n\n    /**\n     * This method is like `_.get` except that if the resolved value is a\n     * function it's invoked with the `this` binding of its parent object and\n     * its result is returned.\n     *\n     * @static\n     * @since 0.1.0\n     * @memberOf _\n     * @category Object\n     * @param {Object} object The object to query.\n     * @param {Array|string} path The path of the property to resolve.\n     * @param {*} [defaultValue] The value returned for `undefined` resolved values.\n     * @returns {*} Returns the resolved value.\n     * @example\n     *\n     * var object = { 'a': [{ 'b': { 'c1': 3, 'c2': _.constant(4) } }] };\n     *\n     * _.result(object, 'a[0].b.c1');\n     * // => 3\n     *\n     * _.result(object, 'a[0].b.c2');\n     * // => 4\n     *\n     * _.result(object, 'a[0].b.c3', 'default');\n     * // => 'default'\n     *\n     * _.result(object, 'a[0].b.c3', _.constant('default'));\n     * // => 'default'\n     */\n    function result(object, path, defaultValue) {\n      path = castPath(path, object);\n\n      var index = -1,\n          length = path.length;\n\n      // Ensure the loop is entered when path is empty.\n      if (!length) {\n        length = 1;\n        object = undefined;\n      }\n      while (++index < length) {\n        var value = object == null ? undefined : object[toKey(path[index])];\n        if (value === undefined) {\n          index = length;\n          value = defaultValue;\n        }\n        object = isFunction(value) ? value.call(object) : value;\n      }\n      return object;\n    }\n\n    /**\n     * Sets the value at `path` of `object`. If a portion of `path` doesn't exist,\n     * it's created. Arrays are created for missing index properties while objects\n     * are created for all other missing properties. Use `_.setWith` to customize\n     * `path` creation.\n     *\n     * **Note:** This method mutates `object`.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.7.0\n     * @category Object\n     * @param {Object} object The object to modify.\n     * @param {Array|string} path The path of the property to set.\n     * @param {*} value The value to set.\n     * @returns {Object} Returns `object`.\n     * @example\n     *\n     * var object = { 'a': [{ 'b': { 'c': 3 } }] };\n     *\n     * _.set(object, 'a[0].b.c', 4);\n     * console.log(object.a[0].b.c);\n     * // => 4\n     *\n     * _.set(object, ['x', '0', 'y', 'z'], 5);\n     * console.log(object.x[0].y.z);\n     * // => 5\n     */\n    function set(object, path, value) {\n      return object == null ? object : baseSet(object, path, value);\n    }\n\n    /**\n     * This method is like `_.set` except that it accepts `customizer` which is\n     * invoked to produce the objects of `path`.  If `customizer` returns `undefined`\n     * path creation is handled by the method instead. The `customizer` is invoked\n     * with three arguments: (nsValue, key, nsObject).\n     *\n     * **Note:** This method mutates `object`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Object\n     * @param {Object} object The object to modify.\n     * @param {Array|string} path The path of the property to set.\n     * @param {*} value The value to set.\n     * @param {Function} [customizer] The function to customize assigned values.\n     * @returns {Object} Returns `object`.\n     * @example\n     *\n     * var object = {};\n     *\n     * _.setWith(object, '[0][1]', 'a', Object);\n     * // => { '0': { '1': 'a' } }\n     */\n    function setWith(object, path, value, customizer) {\n      customizer = typeof customizer == 'function' ? customizer : undefined;\n      return object == null ? object : baseSet(object, path, value, customizer);\n    }\n\n    /**\n     * Creates an array of own enumerable string keyed-value pairs for `object`\n     * which can be consumed by `_.fromPairs`. If `object` is a map or set, its\n     * entries are returned.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @alias entries\n     * @category Object\n     * @param {Object} object The object to query.\n     * @returns {Array} Returns the key-value pairs.\n     * @example\n     *\n     * function Foo() {\n     *   this.a = 1;\n     *   this.b = 2;\n     * }\n     *\n     * Foo.prototype.c = 3;\n     *\n     * _.toPairs(new Foo);\n     * // => [['a', 1], ['b', 2]] (iteration order is not guaranteed)\n     */\n    var toPairs = createToPairs(keys);\n\n    /**\n     * Creates an array of own and inherited enumerable string keyed-value pairs\n     * for `object` which can be consumed by `_.fromPairs`. If `object` is a map\n     * or set, its entries are returned.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @alias entriesIn\n     * @category Object\n     * @param {Object} object The object to query.\n     * @returns {Array} Returns the key-value pairs.\n     * @example\n     *\n     * function Foo() {\n     *   this.a = 1;\n     *   this.b = 2;\n     * }\n     *\n     * Foo.prototype.c = 3;\n     *\n     * _.toPairsIn(new Foo);\n     * // => [['a', 1], ['b', 2], ['c', 3]] (iteration order is not guaranteed)\n     */\n    var toPairsIn = createToPairs(keysIn);\n\n    /**\n     * An alternative to `_.reduce`; this method transforms `object` to a new\n     * `accumulator` object which is the result of running each of its own\n     * enumerable string keyed properties thru `iteratee`, with each invocation\n     * potentially mutating the `accumulator` object. If `accumulator` is not\n     * provided, a new object with the same `[[Prototype]]` will be used. The\n     * iteratee is invoked with four arguments: (accumulator, value, key, object).\n     * Iteratee functions may exit iteration early by explicitly returning `false`.\n     *\n     * @static\n     * @memberOf _\n     * @since 1.3.0\n     * @category Object\n     * @param {Object} object The object to iterate over.\n     * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n     * @param {*} [accumulator] The custom accumulator value.\n     * @returns {*} Returns the accumulated value.\n     * @example\n     *\n     * _.transform([2, 3, 4], function(result, n) {\n     *   result.push(n *= n);\n     *   return n % 2 == 0;\n     * }, []);\n     * // => [4, 9]\n     *\n     * _.transform({ 'a': 1, 'b': 2, 'c': 1 }, function(result, value, key) {\n     *   (result[value] || (result[value] = [])).push(key);\n     * }, {});\n     * // => { '1': ['a', 'c'], '2': ['b'] }\n     */\n    function transform(object, iteratee, accumulator) {\n      var isArr = isArray(object),\n          isArrLike = isArr || isBuffer(object) || isTypedArray(object);\n\n      iteratee = getIteratee(iteratee, 4);\n      if (accumulator == null) {\n        var Ctor = object && object.constructor;\n        if (isArrLike) {\n          accumulator = isArr ? new Ctor : [];\n        }\n        else if (isObject(object)) {\n          accumulator = isFunction(Ctor) ? baseCreate(getPrototype(object)) : {};\n        }\n        else {\n          accumulator = {};\n        }\n      }\n      (isArrLike ? arrayEach : baseForOwn)(object, function(value, index, object) {\n        return iteratee(accumulator, value, index, object);\n      });\n      return accumulator;\n    }\n\n    /**\n     * Removes the property at `path` of `object`.\n     *\n     * **Note:** This method mutates `object`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Object\n     * @param {Object} object The object to modify.\n     * @param {Array|string} path The path of the property to unset.\n     * @returns {boolean} Returns `true` if the property is deleted, else `false`.\n     * @example\n     *\n     * var object = { 'a': [{ 'b': { 'c': 7 } }] };\n     * _.unset(object, 'a[0].b.c');\n     * // => true\n     *\n     * console.log(object);\n     * // => { 'a': [{ 'b': {} }] };\n     *\n     * _.unset(object, ['a', '0', 'b', 'c']);\n     * // => true\n     *\n     * console.log(object);\n     * // => { 'a': [{ 'b': {} }] };\n     */\n    function unset(object, path) {\n      return object == null ? true : baseUnset(object, path);\n    }\n\n    /**\n     * This method is like `_.set` except that accepts `updater` to produce the\n     * value to set. Use `_.updateWith` to customize `path` creation. The `updater`\n     * is invoked with one argument: (value).\n     *\n     * **Note:** This method mutates `object`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.6.0\n     * @category Object\n     * @param {Object} object The object to modify.\n     * @param {Array|string} path The path of the property to set.\n     * @param {Function} updater The function to produce the updated value.\n     * @returns {Object} Returns `object`.\n     * @example\n     *\n     * var object = { 'a': [{ 'b': { 'c': 3 } }] };\n     *\n     * _.update(object, 'a[0].b.c', function(n) { return n * n; });\n     * console.log(object.a[0].b.c);\n     * // => 9\n     *\n     * _.update(object, 'x[0].y.z', function(n) { return n ? n + 1 : 0; });\n     * console.log(object.x[0].y.z);\n     * // => 0\n     */\n    function update(object, path, updater) {\n      return object == null ? object : baseUpdate(object, path, castFunction(updater));\n    }\n\n    /**\n     * This method is like `_.update` except that it accepts `customizer` which is\n     * invoked to produce the objects of `path`.  If `customizer` returns `undefined`\n     * path creation is handled by the method instead. The `customizer` is invoked\n     * with three arguments: (nsValue, key, nsObject).\n     *\n     * **Note:** This method mutates `object`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.6.0\n     * @category Object\n     * @param {Object} object The object to modify.\n     * @param {Array|string} path The path of the property to set.\n     * @param {Function} updater The function to produce the updated value.\n     * @param {Function} [customizer] The function to customize assigned values.\n     * @returns {Object} Returns `object`.\n     * @example\n     *\n     * var object = {};\n     *\n     * _.updateWith(object, '[0][1]', _.constant('a'), Object);\n     * // => { '0': { '1': 'a' } }\n     */\n    function updateWith(object, path, updater, customizer) {\n      customizer = typeof customizer == 'function' ? customizer : undefined;\n      return object == null ? object : baseUpdate(object, path, castFunction(updater), customizer);\n    }\n\n    /**\n     * Creates an array of the own enumerable string keyed property values of `object`.\n     *\n     * **Note:** Non-object values are coerced to objects.\n     *\n     * @static\n     * @since 0.1.0\n     * @memberOf _\n     * @category Object\n     * @param {Object} object The object to query.\n     * @returns {Array} Returns the array of property values.\n     * @example\n     *\n     * function Foo() {\n     *   this.a = 1;\n     *   this.b = 2;\n     * }\n     *\n     * Foo.prototype.c = 3;\n     *\n     * _.values(new Foo);\n     * // => [1, 2] (iteration order is not guaranteed)\n     *\n     * _.values('hi');\n     * // => ['h', 'i']\n     */\n    function values(object) {\n      return object == null ? [] : baseValues(object, keys(object));\n    }\n\n    /**\n     * Creates an array of the own and inherited enumerable string keyed property\n     * values of `object`.\n     *\n     * **Note:** Non-object values are coerced to objects.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category Object\n     * @param {Object} object The object to query.\n     * @returns {Array} Returns the array of property values.\n     * @example\n     *\n     * function Foo() {\n     *   this.a = 1;\n     *   this.b = 2;\n     * }\n     *\n     * Foo.prototype.c = 3;\n     *\n     * _.valuesIn(new Foo);\n     * // => [1, 2, 3] (iteration order is not guaranteed)\n     */\n    function valuesIn(object) {\n      return object == null ? [] : baseValues(object, keysIn(object));\n    }\n\n    /*------------------------------------------------------------------------*/\n\n    /**\n     * Clamps `number` within the inclusive `lower` and `upper` bounds.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Number\n     * @param {number} number The number to clamp.\n     * @param {number} [lower] The lower bound.\n     * @param {number} upper The upper bound.\n     * @returns {number} Returns the clamped number.\n     * @example\n     *\n     * _.clamp(-10, -5, 5);\n     * // => -5\n     *\n     * _.clamp(10, -5, 5);\n     * // => 5\n     */\n    function clamp(number, lower, upper) {\n      if (upper === undefined) {\n        upper = lower;\n        lower = undefined;\n      }\n      if (upper !== undefined) {\n        upper = toNumber(upper);\n        upper = upper === upper ? upper : 0;\n      }\n      if (lower !== undefined) {\n        lower = toNumber(lower);\n        lower = lower === lower ? lower : 0;\n      }\n      return baseClamp(toNumber(number), lower, upper);\n    }\n\n    /**\n     * Checks if `n` is between `start` and up to, but not including, `end`. If\n     * `end` is not specified, it's set to `start` with `start` then set to `0`.\n     * If `start` is greater than `end` the params are swapped to support\n     * negative ranges.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.3.0\n     * @category Number\n     * @param {number} number The number to check.\n     * @param {number} [start=0] The start of the range.\n     * @param {number} end The end of the range.\n     * @returns {boolean} Returns `true` if `number` is in the range, else `false`.\n     * @see _.range, _.rangeRight\n     * @example\n     *\n     * _.inRange(3, 2, 4);\n     * // => true\n     *\n     * _.inRange(4, 8);\n     * // => true\n     *\n     * _.inRange(4, 2);\n     * // => false\n     *\n     * _.inRange(2, 2);\n     * // => false\n     *\n     * _.inRange(1.2, 2);\n     * // => true\n     *\n     * _.inRange(5.2, 4);\n     * // => false\n     *\n     * _.inRange(-3, -2, -6);\n     * // => true\n     */\n    function inRange(number, start, end) {\n      start = toFinite(start);\n      if (end === undefined) {\n        end = start;\n        start = 0;\n      } else {\n        end = toFinite(end);\n      }\n      number = toNumber(number);\n      return baseInRange(number, start, end);\n    }\n\n    /**\n     * Produces a random number between the inclusive `lower` and `upper` bounds.\n     * If only one argument is provided a number between `0` and the given number\n     * is returned. If `floating` is `true`, or either `lower` or `upper` are\n     * floats, a floating-point number is returned instead of an integer.\n     *\n     * **Note:** JavaScript follows the IEEE-754 standard for resolving\n     * floating-point values which can produce unexpected results.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.7.0\n     * @category Number\n     * @param {number} [lower=0] The lower bound.\n     * @param {number} [upper=1] The upper bound.\n     * @param {boolean} [floating] Specify returning a floating-point number.\n     * @returns {number} Returns the random number.\n     * @example\n     *\n     * _.random(0, 5);\n     * // => an integer between 0 and 5\n     *\n     * _.random(5);\n     * // => also an integer between 0 and 5\n     *\n     * _.random(5, true);\n     * // => a floating-point number between 0 and 5\n     *\n     * _.random(1.2, 5.2);\n     * // => a floating-point number between 1.2 and 5.2\n     */\n    function random(lower, upper, floating) {\n      if (floating && typeof floating != 'boolean' && isIterateeCall(lower, upper, floating)) {\n        upper = floating = undefined;\n      }\n      if (floating === undefined) {\n        if (typeof upper == 'boolean') {\n          floating = upper;\n          upper = undefined;\n        }\n        else if (typeof lower == 'boolean') {\n          floating = lower;\n          lower = undefined;\n        }\n      }\n      if (lower === undefined && upper === undefined) {\n        lower = 0;\n        upper = 1;\n      }\n      else {\n        lower = toFinite(lower);\n        if (upper === undefined) {\n          upper = lower;\n          lower = 0;\n        } else {\n          upper = toFinite(upper);\n        }\n      }\n      if (lower > upper) {\n        var temp = lower;\n        lower = upper;\n        upper = temp;\n      }\n      if (floating || lower % 1 || upper % 1) {\n        var rand = nativeRandom();\n        return nativeMin(lower + (rand * (upper - lower + freeParseFloat('1e-' + ((rand + '').length - 1)))), upper);\n      }\n      return baseRandom(lower, upper);\n    }\n\n    /*------------------------------------------------------------------------*/\n\n    /**\n     * Converts `string` to [camel case](https://en.wikipedia.org/wiki/CamelCase).\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category String\n     * @param {string} [string=''] The string to convert.\n     * @returns {string} Returns the camel cased string.\n     * @example\n     *\n     * _.camelCase('Foo Bar');\n     * // => 'fooBar'\n     *\n     * _.camelCase('--foo-bar--');\n     * // => 'fooBar'\n     *\n     * _.camelCase('__FOO_BAR__');\n     * // => 'fooBar'\n     */\n    var camelCase = createCompounder(function(result, word, index) {\n      word = word.toLowerCase();\n      return result + (index ? capitalize(word) : word);\n    });\n\n    /**\n     * Converts the first character of `string` to upper case and the remaining\n     * to lower case.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category String\n     * @param {string} [string=''] The string to capitalize.\n     * @returns {string} Returns the capitalized string.\n     * @example\n     *\n     * _.capitalize('FRED');\n     * // => 'Fred'\n     */\n    function capitalize(string) {\n      return upperFirst(toString(string).toLowerCase());\n    }\n\n    /**\n     * Deburrs `string` by converting\n     * [Latin-1 Supplement](https://en.wikipedia.org/wiki/Latin-1_Supplement_(Unicode_block)#Character_table)\n     * and [Latin Extended-A](https://en.wikipedia.org/wiki/Latin_Extended-A)\n     * letters to basic Latin letters and removing\n     * [combining diacritical marks](https://en.wikipedia.org/wiki/Combining_Diacritical_Marks).\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category String\n     * @param {string} [string=''] The string to deburr.\n     * @returns {string} Returns the deburred string.\n     * @example\n     *\n     * _.deburr('déjà vu');\n     * // => 'deja vu'\n     */\n    function deburr(string) {\n      string = toString(string);\n      return string && string.replace(reLatin, deburrLetter).replace(reComboMark, '');\n    }\n\n    /**\n     * Checks if `string` ends with the given target string.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category String\n     * @param {string} [string=''] The string to inspect.\n     * @param {string} [target] The string to search for.\n     * @param {number} [position=string.length] The position to search up to.\n     * @returns {boolean} Returns `true` if `string` ends with `target`,\n     *  else `false`.\n     * @example\n     *\n     * _.endsWith('abc', 'c');\n     * // => true\n     *\n     * _.endsWith('abc', 'b');\n     * // => false\n     *\n     * _.endsWith('abc', 'b', 2);\n     * // => true\n     */\n    function endsWith(string, target, position) {\n      string = toString(string);\n      target = baseToString(target);\n\n      var length = string.length;\n      position = position === undefined\n        ? length\n        : baseClamp(toInteger(position), 0, length);\n\n      var end = position;\n      position -= target.length;\n      return position >= 0 && string.slice(position, end) == target;\n    }\n\n    /**\n     * Converts the characters \"&\", \"<\", \">\", '\"', and \"'\" in `string` to their\n     * corresponding HTML entities.\n     *\n     * **Note:** No other characters are escaped. To escape additional\n     * characters use a third-party library like [_he_](https://mths.be/he).\n     *\n     * Though the \">\" character is escaped for symmetry, characters like\n     * \">\" and \"/\" don't need escaping in HTML and have no special meaning\n     * unless they're part of a tag or unquoted attribute value. See\n     * [Mathias Bynens's article](https://mathiasbynens.be/notes/ambiguous-ampersands)\n     * (under \"semi-related fun fact\") for more details.\n     *\n     * When working with HTML you should always\n     * [quote attribute values](http://wonko.com/post/html-escaping) to reduce\n     * XSS vectors.\n     *\n     * @static\n     * @since 0.1.0\n     * @memberOf _\n     * @category String\n     * @param {string} [string=''] The string to escape.\n     * @returns {string} Returns the escaped string.\n     * @example\n     *\n     * _.escape('fred, barney, & pebbles');\n     * // => 'fred, barney, &amp; pebbles'\n     */\n    function escape(string) {\n      string = toString(string);\n      return (string && reHasUnescapedHtml.test(string))\n        ? string.replace(reUnescapedHtml, escapeHtmlChar)\n        : string;\n    }\n\n    /**\n     * Escapes the `RegExp` special characters \"^\", \"$\", \"\\\", \".\", \"*\", \"+\",\n     * \"?\", \"(\", \")\", \"[\", \"]\", \"{\", \"}\", and \"|\" in `string`.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category String\n     * @param {string} [string=''] The string to escape.\n     * @returns {string} Returns the escaped string.\n     * @example\n     *\n     * _.escapeRegExp('[lodash](https://lodash.com/)');\n     * // => '\\[lodash\\]\\(https://lodash\\.com/\\)'\n     */\n    function escapeRegExp(string) {\n      string = toString(string);\n      return (string && reHasRegExpChar.test(string))\n        ? string.replace(reRegExpChar, '\\\\$&')\n        : string;\n    }\n\n    /**\n     * Converts `string` to\n     * [kebab case](https://en.wikipedia.org/wiki/Letter_case#Special_case_styles).\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category String\n     * @param {string} [string=''] The string to convert.\n     * @returns {string} Returns the kebab cased string.\n     * @example\n     *\n     * _.kebabCase('Foo Bar');\n     * // => 'foo-bar'\n     *\n     * _.kebabCase('fooBar');\n     * // => 'foo-bar'\n     *\n     * _.kebabCase('__FOO_BAR__');\n     * // => 'foo-bar'\n     */\n    var kebabCase = createCompounder(function(result, word, index) {\n      return result + (index ? '-' : '') + word.toLowerCase();\n    });\n\n    /**\n     * Converts `string`, as space separated words, to lower case.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category String\n     * @param {string} [string=''] The string to convert.\n     * @returns {string} Returns the lower cased string.\n     * @example\n     *\n     * _.lowerCase('--Foo-Bar--');\n     * // => 'foo bar'\n     *\n     * _.lowerCase('fooBar');\n     * // => 'foo bar'\n     *\n     * _.lowerCase('__FOO_BAR__');\n     * // => 'foo bar'\n     */\n    var lowerCase = createCompounder(function(result, word, index) {\n      return result + (index ? ' ' : '') + word.toLowerCase();\n    });\n\n    /**\n     * Converts the first character of `string` to lower case.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category String\n     * @param {string} [string=''] The string to convert.\n     * @returns {string} Returns the converted string.\n     * @example\n     *\n     * _.lowerFirst('Fred');\n     * // => 'fred'\n     *\n     * _.lowerFirst('FRED');\n     * // => 'fRED'\n     */\n    var lowerFirst = createCaseFirst('toLowerCase');\n\n    /**\n     * Pads `string` on the left and right sides if it's shorter than `length`.\n     * Padding characters are truncated if they can't be evenly divided by `length`.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category String\n     * @param {string} [string=''] The string to pad.\n     * @param {number} [length=0] The padding length.\n     * @param {string} [chars=' '] The string used as padding.\n     * @returns {string} Returns the padded string.\n     * @example\n     *\n     * _.pad('abc', 8);\n     * // => '  abc   '\n     *\n     * _.pad('abc', 8, '_-');\n     * // => '_-abc_-_'\n     *\n     * _.pad('abc', 3);\n     * // => 'abc'\n     */\n    function pad(string, length, chars) {\n      string = toString(string);\n      length = toInteger(length);\n\n      var strLength = length ? stringSize(string) : 0;\n      if (!length || strLength >= length) {\n        return string;\n      }\n      var mid = (length - strLength) / 2;\n      return (\n        createPadding(nativeFloor(mid), chars) +\n        string +\n        createPadding(nativeCeil(mid), chars)\n      );\n    }\n\n    /**\n     * Pads `string` on the right side if it's shorter than `length`. Padding\n     * characters are truncated if they exceed `length`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category String\n     * @param {string} [string=''] The string to pad.\n     * @param {number} [length=0] The padding length.\n     * @param {string} [chars=' '] The string used as padding.\n     * @returns {string} Returns the padded string.\n     * @example\n     *\n     * _.padEnd('abc', 6);\n     * // => 'abc   '\n     *\n     * _.padEnd('abc', 6, '_-');\n     * // => 'abc_-_'\n     *\n     * _.padEnd('abc', 3);\n     * // => 'abc'\n     */\n    function padEnd(string, length, chars) {\n      string = toString(string);\n      length = toInteger(length);\n\n      var strLength = length ? stringSize(string) : 0;\n      return (length && strLength < length)\n        ? (string + createPadding(length - strLength, chars))\n        : string;\n    }\n\n    /**\n     * Pads `string` on the left side if it's shorter than `length`. Padding\n     * characters are truncated if they exceed `length`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category String\n     * @param {string} [string=''] The string to pad.\n     * @param {number} [length=0] The padding length.\n     * @param {string} [chars=' '] The string used as padding.\n     * @returns {string} Returns the padded string.\n     * @example\n     *\n     * _.padStart('abc', 6);\n     * // => '   abc'\n     *\n     * _.padStart('abc', 6, '_-');\n     * // => '_-_abc'\n     *\n     * _.padStart('abc', 3);\n     * // => 'abc'\n     */\n    function padStart(string, length, chars) {\n      string = toString(string);\n      length = toInteger(length);\n\n      var strLength = length ? stringSize(string) : 0;\n      return (length && strLength < length)\n        ? (createPadding(length - strLength, chars) + string)\n        : string;\n    }\n\n    /**\n     * Converts `string` to an integer of the specified radix. If `radix` is\n     * `undefined` or `0`, a `radix` of `10` is used unless `value` is a\n     * hexadecimal, in which case a `radix` of `16` is used.\n     *\n     * **Note:** This method aligns with the\n     * [ES5 implementation](https://es5.github.io/#x15.1.2.2) of `parseInt`.\n     *\n     * @static\n     * @memberOf _\n     * @since 1.1.0\n     * @category String\n     * @param {string} string The string to convert.\n     * @param {number} [radix=10] The radix to interpret `value` by.\n     * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n     * @returns {number} Returns the converted integer.\n     * @example\n     *\n     * _.parseInt('08');\n     * // => 8\n     *\n     * _.map(['6', '08', '10'], _.parseInt);\n     * // => [6, 8, 10]\n     */\n    function parseInt(string, radix, guard) {\n      if (guard || radix == null) {\n        radix = 0;\n      } else if (radix) {\n        radix = +radix;\n      }\n      return nativeParseInt(toString(string).replace(reTrimStart, ''), radix || 0);\n    }\n\n    /**\n     * Repeats the given string `n` times.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category String\n     * @param {string} [string=''] The string to repeat.\n     * @param {number} [n=1] The number of times to repeat the string.\n     * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n     * @returns {string} Returns the repeated string.\n     * @example\n     *\n     * _.repeat('*', 3);\n     * // => '***'\n     *\n     * _.repeat('abc', 2);\n     * // => 'abcabc'\n     *\n     * _.repeat('abc', 0);\n     * // => ''\n     */\n    function repeat(string, n, guard) {\n      if ((guard ? isIterateeCall(string, n, guard) : n === undefined)) {\n        n = 1;\n      } else {\n        n = toInteger(n);\n      }\n      return baseRepeat(toString(string), n);\n    }\n\n    /**\n     * Replaces matches for `pattern` in `string` with `replacement`.\n     *\n     * **Note:** This method is based on\n     * [`String#replace`](https://mdn.io/String/replace).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category String\n     * @param {string} [string=''] The string to modify.\n     * @param {RegExp|string} pattern The pattern to replace.\n     * @param {Function|string} replacement The match replacement.\n     * @returns {string} Returns the modified string.\n     * @example\n     *\n     * _.replace('Hi Fred', 'Fred', 'Barney');\n     * // => 'Hi Barney'\n     */\n    function replace() {\n      var args = arguments,\n          string = toString(args[0]);\n\n      return args.length < 3 ? string : string.replace(args[1], args[2]);\n    }\n\n    /**\n     * Converts `string` to\n     * [snake case](https://en.wikipedia.org/wiki/Snake_case).\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category String\n     * @param {string} [string=''] The string to convert.\n     * @returns {string} Returns the snake cased string.\n     * @example\n     *\n     * _.snakeCase('Foo Bar');\n     * // => 'foo_bar'\n     *\n     * _.snakeCase('fooBar');\n     * // => 'foo_bar'\n     *\n     * _.snakeCase('--FOO-BAR--');\n     * // => 'foo_bar'\n     */\n    var snakeCase = createCompounder(function(result, word, index) {\n      return result + (index ? '_' : '') + word.toLowerCase();\n    });\n\n    /**\n     * Splits `string` by `separator`.\n     *\n     * **Note:** This method is based on\n     * [`String#split`](https://mdn.io/String/split).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category String\n     * @param {string} [string=''] The string to split.\n     * @param {RegExp|string} separator The separator pattern to split by.\n     * @param {number} [limit] The length to truncate results to.\n     * @returns {Array} Returns the string segments.\n     * @example\n     *\n     * _.split('a-b-c', '-', 2);\n     * // => ['a', 'b']\n     */\n    function split(string, separator, limit) {\n      if (limit && typeof limit != 'number' && isIterateeCall(string, separator, limit)) {\n        separator = limit = undefined;\n      }\n      limit = limit === undefined ? MAX_ARRAY_LENGTH : limit >>> 0;\n      if (!limit) {\n        return [];\n      }\n      string = toString(string);\n      if (string && (\n            typeof separator == 'string' ||\n            (separator != null && !isRegExp(separator))\n          )) {\n        separator = baseToString(separator);\n        if (!separator && hasUnicode(string)) {\n          return castSlice(stringToArray(string), 0, limit);\n        }\n      }\n      return string.split(separator, limit);\n    }\n\n    /**\n     * Converts `string` to\n     * [start case](https://en.wikipedia.org/wiki/Letter_case#Stylistic_or_specialised_usage).\n     *\n     * @static\n     * @memberOf _\n     * @since 3.1.0\n     * @category String\n     * @param {string} [string=''] The string to convert.\n     * @returns {string} Returns the start cased string.\n     * @example\n     *\n     * _.startCase('--foo-bar--');\n     * // => 'Foo Bar'\n     *\n     * _.startCase('fooBar');\n     * // => 'Foo Bar'\n     *\n     * _.startCase('__FOO_BAR__');\n     * // => 'FOO BAR'\n     */\n    var startCase = createCompounder(function(result, word, index) {\n      return result + (index ? ' ' : '') + upperFirst(word);\n    });\n\n    /**\n     * Checks if `string` starts with the given target string.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category String\n     * @param {string} [string=''] The string to inspect.\n     * @param {string} [target] The string to search for.\n     * @param {number} [position=0] The position to search from.\n     * @returns {boolean} Returns `true` if `string` starts with `target`,\n     *  else `false`.\n     * @example\n     *\n     * _.startsWith('abc', 'a');\n     * // => true\n     *\n     * _.startsWith('abc', 'b');\n     * // => false\n     *\n     * _.startsWith('abc', 'b', 1);\n     * // => true\n     */\n    function startsWith(string, target, position) {\n      string = toString(string);\n      position = position == null\n        ? 0\n        : baseClamp(toInteger(position), 0, string.length);\n\n      target = baseToString(target);\n      return string.slice(position, position + target.length) == target;\n    }\n\n    /**\n     * Creates a compiled template function that can interpolate data properties\n     * in \"interpolate\" delimiters, HTML-escape interpolated data properties in\n     * \"escape\" delimiters, and execute JavaScript in \"evaluate\" delimiters. Data\n     * properties may be accessed as free variables in the template. If a setting\n     * object is given, it takes precedence over `_.templateSettings` values.\n     *\n     * **Note:** In the development build `_.template` utilizes\n     * [sourceURLs](http://www.html5rocks.com/en/tutorials/developertools/sourcemaps/#toc-sourceurl)\n     * for easier debugging.\n     *\n     * For more information on precompiling templates see\n     * [lodash's custom builds documentation](https://lodash.com/custom-builds).\n     *\n     * For more information on Chrome extension sandboxes see\n     * [Chrome's extensions documentation](https://developer.chrome.com/extensions/sandboxingEval).\n     *\n     * @static\n     * @since 0.1.0\n     * @memberOf _\n     * @category String\n     * @param {string} [string=''] The template string.\n     * @param {Object} [options={}] The options object.\n     * @param {RegExp} [options.escape=_.templateSettings.escape]\n     *  The HTML \"escape\" delimiter.\n     * @param {RegExp} [options.evaluate=_.templateSettings.evaluate]\n     *  The \"evaluate\" delimiter.\n     * @param {Object} [options.imports=_.templateSettings.imports]\n     *  An object to import into the template as free variables.\n     * @param {RegExp} [options.interpolate=_.templateSettings.interpolate]\n     *  The \"interpolate\" delimiter.\n     * @param {string} [options.sourceURL='lodash.templateSources[n]']\n     *  The sourceURL of the compiled template.\n     * @param {string} [options.variable='obj']\n     *  The data object variable name.\n     * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n     * @returns {Function} Returns the compiled template function.\n     * @example\n     *\n     * // Use the \"interpolate\" delimiter to create a compiled template.\n     * var compiled = _.template('hello <%= user %>!');\n     * compiled({ 'user': 'fred' });\n     * // => 'hello fred!'\n     *\n     * // Use the HTML \"escape\" delimiter to escape data property values.\n     * var compiled = _.template('<b><%- value %></b>');\n     * compiled({ 'value': '<script>' });\n     * // => '<b>&lt;script&gt;</b>'\n     *\n     * // Use the \"evaluate\" delimiter to execute JavaScript and generate HTML.\n     * var compiled = _.template('<% _.forEach(users, function(user) { %><li><%- user %></li><% }); %>');\n     * compiled({ 'users': ['fred', 'barney'] });\n     * // => '<li>fred</li><li>barney</li>'\n     *\n     * // Use the internal `print` function in \"evaluate\" delimiters.\n     * var compiled = _.template('<% print(\"hello \" + user); %>!');\n     * compiled({ 'user': 'barney' });\n     * // => 'hello barney!'\n     *\n     * // Use the ES template literal delimiter as an \"interpolate\" delimiter.\n     * // Disable support by replacing the \"interpolate\" delimiter.\n     * var compiled = _.template('hello ${ user }!');\n     * compiled({ 'user': 'pebbles' });\n     * // => 'hello pebbles!'\n     *\n     * // Use backslashes to treat delimiters as plain text.\n     * var compiled = _.template('<%= \"\\\\<%- value %\\\\>\" %>');\n     * compiled({ 'value': 'ignored' });\n     * // => '<%- value %>'\n     *\n     * // Use the `imports` option to import `jQuery` as `jq`.\n     * var text = '<% jq.each(users, function(user) { %><li><%- user %></li><% }); %>';\n     * var compiled = _.template(text, { 'imports': { 'jq': jQuery } });\n     * compiled({ 'users': ['fred', 'barney'] });\n     * // => '<li>fred</li><li>barney</li>'\n     *\n     * // Use the `sourceURL` option to specify a custom sourceURL for the template.\n     * var compiled = _.template('hello <%= user %>!', { 'sourceURL': '/basic/greeting.jst' });\n     * compiled(data);\n     * // => Find the source of \"greeting.jst\" under the Sources tab or Resources panel of the web inspector.\n     *\n     * // Use the `variable` option to ensure a with-statement isn't used in the compiled template.\n     * var compiled = _.template('hi <%= data.user %>!', { 'variable': 'data' });\n     * compiled.source;\n     * // => function(data) {\n     * //   var __t, __p = '';\n     * //   __p += 'hi ' + ((__t = ( data.user )) == null ? '' : __t) + '!';\n     * //   return __p;\n     * // }\n     *\n     * // Use custom template delimiters.\n     * _.templateSettings.interpolate = /{{([\\s\\S]+?)}}/g;\n     * var compiled = _.template('hello {{ user }}!');\n     * compiled({ 'user': 'mustache' });\n     * // => 'hello mustache!'\n     *\n     * // Use the `source` property to inline compiled templates for meaningful\n     * // line numbers in error messages and stack traces.\n     * fs.writeFileSync(path.join(process.cwd(), 'jst.js'), '\\\n     *   var JST = {\\\n     *     \"main\": ' + _.template(mainText).source + '\\\n     *   };\\\n     * ');\n     */\n    function template(string, options, guard) {\n      // Based on John Resig's `tmpl` implementation\n      // (http://ejohn.org/blog/javascript-micro-templating/)\n      // and Laura Doktorova's doT.js (https://github.com/olado/doT).\n      var settings = lodash.templateSettings;\n\n      if (guard && isIterateeCall(string, options, guard)) {\n        options = undefined;\n      }\n      string = toString(string);\n      options = assignInWith({}, options, settings, customDefaultsAssignIn);\n\n      var imports = assignInWith({}, options.imports, settings.imports, customDefaultsAssignIn),\n          importsKeys = keys(imports),\n          importsValues = baseValues(imports, importsKeys);\n\n      var isEscaping,\n          isEvaluating,\n          index = 0,\n          interpolate = options.interpolate || reNoMatch,\n          source = \"__p += '\";\n\n      // Compile the regexp to match each delimiter.\n      var reDelimiters = RegExp(\n        (options.escape || reNoMatch).source + '|' +\n        interpolate.source + '|' +\n        (interpolate === reInterpolate ? reEsTemplate : reNoMatch).source + '|' +\n        (options.evaluate || reNoMatch).source + '|$'\n      , 'g');\n\n      // Use a sourceURL for easier debugging.\n      // The sourceURL gets injected into the source that's eval-ed, so be careful\n      // to normalize all kinds of whitespace, so e.g. newlines (and unicode versions of it) can't sneak in\n      // and escape the comment, thus injecting code that gets evaled.\n      var sourceURL = '//# sourceURL=' +\n        (hasOwnProperty.call(options, 'sourceURL')\n          ? (options.sourceURL + '').replace(/\\s/g, ' ')\n          : ('lodash.templateSources[' + (++templateCounter) + ']')\n        ) + '\\n';\n\n      string.replace(reDelimiters, function(match, escapeValue, interpolateValue, esTemplateValue, evaluateValue, offset) {\n        interpolateValue || (interpolateValue = esTemplateValue);\n\n        // Escape characters that can't be included in string literals.\n        source += string.slice(index, offset).replace(reUnescapedString, escapeStringChar);\n\n        // Replace delimiters with snippets.\n        if (escapeValue) {\n          isEscaping = true;\n          source += \"' +\\n__e(\" + escapeValue + \") +\\n'\";\n        }\n        if (evaluateValue) {\n          isEvaluating = true;\n          source += \"';\\n\" + evaluateValue + \";\\n__p += '\";\n        }\n        if (interpolateValue) {\n          source += \"' +\\n((__t = (\" + interpolateValue + \")) == null ? '' : __t) +\\n'\";\n        }\n        index = offset + match.length;\n\n        // The JS engine embedded in Adobe products needs `match` returned in\n        // order to produce the correct `offset` value.\n        return match;\n      });\n\n      source += \"';\\n\";\n\n      // If `variable` is not specified wrap a with-statement around the generated\n      // code to add the data object to the top of the scope chain.\n      var variable = hasOwnProperty.call(options, 'variable') && options.variable;\n      if (!variable) {\n        source = 'with (obj) {\\n' + source + '\\n}\\n';\n      }\n      // Throw an error if a forbidden character was found in `variable`, to prevent\n      // potential command injection attacks.\n      else if (reForbiddenIdentifierChars.test(variable)) {\n        throw new Error(INVALID_TEMPL_VAR_ERROR_TEXT);\n      }\n\n      // Cleanup code by stripping empty strings.\n      source = (isEvaluating ? source.replace(reEmptyStringLeading, '') : source)\n        .replace(reEmptyStringMiddle, '$1')\n        .replace(reEmptyStringTrailing, '$1;');\n\n      // Frame code as the function body.\n      source = 'function(' + (variable || 'obj') + ') {\\n' +\n        (variable\n          ? ''\n          : 'obj || (obj = {});\\n'\n        ) +\n        \"var __t, __p = ''\" +\n        (isEscaping\n           ? ', __e = _.escape'\n           : ''\n        ) +\n        (isEvaluating\n          ? ', __j = Array.prototype.join;\\n' +\n            \"function print() { __p += __j.call(arguments, '') }\\n\"\n          : ';\\n'\n        ) +\n        source +\n        'return __p\\n}';\n\n      var result = attempt(function() {\n        return Function(importsKeys, sourceURL + 'return ' + source)\n          .apply(undefined, importsValues);\n      });\n\n      // Provide the compiled function's source by its `toString` method or\n      // the `source` property as a convenience for inlining compiled templates.\n      result.source = source;\n      if (isError(result)) {\n        throw result;\n      }\n      return result;\n    }\n\n    /**\n     * Converts `string`, as a whole, to lower case just like\n     * [String#toLowerCase](https://mdn.io/toLowerCase).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category String\n     * @param {string} [string=''] The string to convert.\n     * @returns {string} Returns the lower cased string.\n     * @example\n     *\n     * _.toLower('--Foo-Bar--');\n     * // => '--foo-bar--'\n     *\n     * _.toLower('fooBar');\n     * // => 'foobar'\n     *\n     * _.toLower('__FOO_BAR__');\n     * // => '__foo_bar__'\n     */\n    function toLower(value) {\n      return toString(value).toLowerCase();\n    }\n\n    /**\n     * Converts `string`, as a whole, to upper case just like\n     * [String#toUpperCase](https://mdn.io/toUpperCase).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category String\n     * @param {string} [string=''] The string to convert.\n     * @returns {string} Returns the upper cased string.\n     * @example\n     *\n     * _.toUpper('--foo-bar--');\n     * // => '--FOO-BAR--'\n     *\n     * _.toUpper('fooBar');\n     * // => 'FOOBAR'\n     *\n     * _.toUpper('__foo_bar__');\n     * // => '__FOO_BAR__'\n     */\n    function toUpper(value) {\n      return toString(value).toUpperCase();\n    }\n\n    /**\n     * Removes leading and trailing whitespace or specified characters from `string`.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category String\n     * @param {string} [string=''] The string to trim.\n     * @param {string} [chars=whitespace] The characters to trim.\n     * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n     * @returns {string} Returns the trimmed string.\n     * @example\n     *\n     * _.trim('  abc  ');\n     * // => 'abc'\n     *\n     * _.trim('-_-abc-_-', '_-');\n     * // => 'abc'\n     *\n     * _.map(['  foo  ', '  bar  '], _.trim);\n     * // => ['foo', 'bar']\n     */\n    function trim(string, chars, guard) {\n      string = toString(string);\n      if (string && (guard || chars === undefined)) {\n        return baseTrim(string);\n      }\n      if (!string || !(chars = baseToString(chars))) {\n        return string;\n      }\n      var strSymbols = stringToArray(string),\n          chrSymbols = stringToArray(chars),\n          start = charsStartIndex(strSymbols, chrSymbols),\n          end = charsEndIndex(strSymbols, chrSymbols) + 1;\n\n      return castSlice(strSymbols, start, end).join('');\n    }\n\n    /**\n     * Removes trailing whitespace or specified characters from `string`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category String\n     * @param {string} [string=''] The string to trim.\n     * @param {string} [chars=whitespace] The characters to trim.\n     * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n     * @returns {string} Returns the trimmed string.\n     * @example\n     *\n     * _.trimEnd('  abc  ');\n     * // => '  abc'\n     *\n     * _.trimEnd('-_-abc-_-', '_-');\n     * // => '-_-abc'\n     */\n    function trimEnd(string, chars, guard) {\n      string = toString(string);\n      if (string && (guard || chars === undefined)) {\n        return string.slice(0, trimmedEndIndex(string) + 1);\n      }\n      if (!string || !(chars = baseToString(chars))) {\n        return string;\n      }\n      var strSymbols = stringToArray(string),\n          end = charsEndIndex(strSymbols, stringToArray(chars)) + 1;\n\n      return castSlice(strSymbols, 0, end).join('');\n    }\n\n    /**\n     * Removes leading whitespace or specified characters from `string`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category String\n     * @param {string} [string=''] The string to trim.\n     * @param {string} [chars=whitespace] The characters to trim.\n     * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n     * @returns {string} Returns the trimmed string.\n     * @example\n     *\n     * _.trimStart('  abc  ');\n     * // => 'abc  '\n     *\n     * _.trimStart('-_-abc-_-', '_-');\n     * // => 'abc-_-'\n     */\n    function trimStart(string, chars, guard) {\n      string = toString(string);\n      if (string && (guard || chars === undefined)) {\n        return string.replace(reTrimStart, '');\n      }\n      if (!string || !(chars = baseToString(chars))) {\n        return string;\n      }\n      var strSymbols = stringToArray(string),\n          start = charsStartIndex(strSymbols, stringToArray(chars));\n\n      return castSlice(strSymbols, start).join('');\n    }\n\n    /**\n     * Truncates `string` if it's longer than the given maximum string length.\n     * The last characters of the truncated string are replaced with the omission\n     * string which defaults to \"...\".\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category String\n     * @param {string} [string=''] The string to truncate.\n     * @param {Object} [options={}] The options object.\n     * @param {number} [options.length=30] The maximum string length.\n     * @param {string} [options.omission='...'] The string to indicate text is omitted.\n     * @param {RegExp|string} [options.separator] The separator pattern to truncate to.\n     * @returns {string} Returns the truncated string.\n     * @example\n     *\n     * _.truncate('hi-diddly-ho there, neighborino');\n     * // => 'hi-diddly-ho there, neighbo...'\n     *\n     * _.truncate('hi-diddly-ho there, neighborino', {\n     *   'length': 24,\n     *   'separator': ' '\n     * });\n     * // => 'hi-diddly-ho there,...'\n     *\n     * _.truncate('hi-diddly-ho there, neighborino', {\n     *   'length': 24,\n     *   'separator': /,? +/\n     * });\n     * // => 'hi-diddly-ho there...'\n     *\n     * _.truncate('hi-diddly-ho there, neighborino', {\n     *   'omission': ' [...]'\n     * });\n     * // => 'hi-diddly-ho there, neig [...]'\n     */\n    function truncate(string, options) {\n      var length = DEFAULT_TRUNC_LENGTH,\n          omission = DEFAULT_TRUNC_OMISSION;\n\n      if (isObject(options)) {\n        var separator = 'separator' in options ? options.separator : separator;\n        length = 'length' in options ? toInteger(options.length) : length;\n        omission = 'omission' in options ? baseToString(options.omission) : omission;\n      }\n      string = toString(string);\n\n      var strLength = string.length;\n      if (hasUnicode(string)) {\n        var strSymbols = stringToArray(string);\n        strLength = strSymbols.length;\n      }\n      if (length >= strLength) {\n        return string;\n      }\n      var end = length - stringSize(omission);\n      if (end < 1) {\n        return omission;\n      }\n      var result = strSymbols\n        ? castSlice(strSymbols, 0, end).join('')\n        : string.slice(0, end);\n\n      if (separator === undefined) {\n        return result + omission;\n      }\n      if (strSymbols) {\n        end += (result.length - end);\n      }\n      if (isRegExp(separator)) {\n        if (string.slice(end).search(separator)) {\n          var match,\n              substring = result;\n\n          if (!separator.global) {\n            separator = RegExp(separator.source, toString(reFlags.exec(separator)) + 'g');\n          }\n          separator.lastIndex = 0;\n          while ((match = separator.exec(substring))) {\n            var newEnd = match.index;\n          }\n          result = result.slice(0, newEnd === undefined ? end : newEnd);\n        }\n      } else if (string.indexOf(baseToString(separator), end) != end) {\n        var index = result.lastIndexOf(separator);\n        if (index > -1) {\n          result = result.slice(0, index);\n        }\n      }\n      return result + omission;\n    }\n\n    /**\n     * The inverse of `_.escape`; this method converts the HTML entities\n     * `&amp;`, `&lt;`, `&gt;`, `&quot;`, and `&#39;` in `string` to\n     * their corresponding characters.\n     *\n     * **Note:** No other HTML entities are unescaped. To unescape additional\n     * HTML entities use a third-party library like [_he_](https://mths.be/he).\n     *\n     * @static\n     * @memberOf _\n     * @since 0.6.0\n     * @category String\n     * @param {string} [string=''] The string to unescape.\n     * @returns {string} Returns the unescaped string.\n     * @example\n     *\n     * _.unescape('fred, barney, &amp; pebbles');\n     * // => 'fred, barney, & pebbles'\n     */\n    function unescape(string) {\n      string = toString(string);\n      return (string && reHasEscapedHtml.test(string))\n        ? string.replace(reEscapedHtml, unescapeHtmlChar)\n        : string;\n    }\n\n    /**\n     * Converts `string`, as space separated words, to upper case.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category String\n     * @param {string} [string=''] The string to convert.\n     * @returns {string} Returns the upper cased string.\n     * @example\n     *\n     * _.upperCase('--foo-bar');\n     * // => 'FOO BAR'\n     *\n     * _.upperCase('fooBar');\n     * // => 'FOO BAR'\n     *\n     * _.upperCase('__foo_bar__');\n     * // => 'FOO BAR'\n     */\n    var upperCase = createCompounder(function(result, word, index) {\n      return result + (index ? ' ' : '') + word.toUpperCase();\n    });\n\n    /**\n     * Converts the first character of `string` to upper case.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category String\n     * @param {string} [string=''] The string to convert.\n     * @returns {string} Returns the converted string.\n     * @example\n     *\n     * _.upperFirst('fred');\n     * // => 'Fred'\n     *\n     * _.upperFirst('FRED');\n     * // => 'FRED'\n     */\n    var upperFirst = createCaseFirst('toUpperCase');\n\n    /**\n     * Splits `string` into an array of its words.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category String\n     * @param {string} [string=''] The string to inspect.\n     * @param {RegExp|string} [pattern] The pattern to match words.\n     * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n     * @returns {Array} Returns the words of `string`.\n     * @example\n     *\n     * _.words('fred, barney, & pebbles');\n     * // => ['fred', 'barney', 'pebbles']\n     *\n     * _.words('fred, barney, & pebbles', /[^, ]+/g);\n     * // => ['fred', 'barney', '&', 'pebbles']\n     */\n    function words(string, pattern, guard) {\n      string = toString(string);\n      pattern = guard ? undefined : pattern;\n\n      if (pattern === undefined) {\n        return hasUnicodeWord(string) ? unicodeWords(string) : asciiWords(string);\n      }\n      return string.match(pattern) || [];\n    }\n\n    /*------------------------------------------------------------------------*/\n\n    /**\n     * Attempts to invoke `func`, returning either the result or the caught error\n     * object. Any additional arguments are provided to `func` when it's invoked.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category Util\n     * @param {Function} func The function to attempt.\n     * @param {...*} [args] The arguments to invoke `func` with.\n     * @returns {*} Returns the `func` result or error object.\n     * @example\n     *\n     * // Avoid throwing errors for invalid selectors.\n     * var elements = _.attempt(function(selector) {\n     *   return document.querySelectorAll(selector);\n     * }, '>_>');\n     *\n     * if (_.isError(elements)) {\n     *   elements = [];\n     * }\n     */\n    var attempt = baseRest(function(func, args) {\n      try {\n        return apply(func, undefined, args);\n      } catch (e) {\n        return isError(e) ? e : new Error(e);\n      }\n    });\n\n    /**\n     * Binds methods of an object to the object itself, overwriting the existing\n     * method.\n     *\n     * **Note:** This method doesn't set the \"length\" property of bound functions.\n     *\n     * @static\n     * @since 0.1.0\n     * @memberOf _\n     * @category Util\n     * @param {Object} object The object to bind and assign the bound methods to.\n     * @param {...(string|string[])} methodNames The object method names to bind.\n     * @returns {Object} Returns `object`.\n     * @example\n     *\n     * var view = {\n     *   'label': 'docs',\n     *   'click': function() {\n     *     console.log('clicked ' + this.label);\n     *   }\n     * };\n     *\n     * _.bindAll(view, ['click']);\n     * jQuery(element).on('click', view.click);\n     * // => Logs 'clicked docs' when clicked.\n     */\n    var bindAll = flatRest(function(object, methodNames) {\n      arrayEach(methodNames, function(key) {\n        key = toKey(key);\n        baseAssignValue(object, key, bind(object[key], object));\n      });\n      return object;\n    });\n\n    /**\n     * Creates a function that iterates over `pairs` and invokes the corresponding\n     * function of the first predicate to return truthy. The predicate-function\n     * pairs are invoked with the `this` binding and arguments of the created\n     * function.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Util\n     * @param {Array} pairs The predicate-function pairs.\n     * @returns {Function} Returns the new composite function.\n     * @example\n     *\n     * var func = _.cond([\n     *   [_.matches({ 'a': 1 }),           _.constant('matches A')],\n     *   [_.conforms({ 'b': _.isNumber }), _.constant('matches B')],\n     *   [_.stubTrue,                      _.constant('no match')]\n     * ]);\n     *\n     * func({ 'a': 1, 'b': 2 });\n     * // => 'matches A'\n     *\n     * func({ 'a': 0, 'b': 1 });\n     * // => 'matches B'\n     *\n     * func({ 'a': '1', 'b': '2' });\n     * // => 'no match'\n     */\n    function cond(pairs) {\n      var length = pairs == null ? 0 : pairs.length,\n          toIteratee = getIteratee();\n\n      pairs = !length ? [] : arrayMap(pairs, function(pair) {\n        if (typeof pair[1] != 'function') {\n          throw new TypeError(FUNC_ERROR_TEXT);\n        }\n        return [toIteratee(pair[0]), pair[1]];\n      });\n\n      return baseRest(function(args) {\n        var index = -1;\n        while (++index < length) {\n          var pair = pairs[index];\n          if (apply(pair[0], this, args)) {\n            return apply(pair[1], this, args);\n          }\n        }\n      });\n    }\n\n    /**\n     * Creates a function that invokes the predicate properties of `source` with\n     * the corresponding property values of a given object, returning `true` if\n     * all predicates return truthy, else `false`.\n     *\n     * **Note:** The created function is equivalent to `_.conformsTo` with\n     * `source` partially applied.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Util\n     * @param {Object} source The object of property predicates to conform to.\n     * @returns {Function} Returns the new spec function.\n     * @example\n     *\n     * var objects = [\n     *   { 'a': 2, 'b': 1 },\n     *   { 'a': 1, 'b': 2 }\n     * ];\n     *\n     * _.filter(objects, _.conforms({ 'b': function(n) { return n > 1; } }));\n     * // => [{ 'a': 1, 'b': 2 }]\n     */\n    function conforms(source) {\n      return baseConforms(baseClone(source, CLONE_DEEP_FLAG));\n    }\n\n    /**\n     * Creates a function that returns `value`.\n     *\n     * @static\n     * @memberOf _\n     * @since 2.4.0\n     * @category Util\n     * @param {*} value The value to return from the new function.\n     * @returns {Function} Returns the new constant function.\n     * @example\n     *\n     * var objects = _.times(2, _.constant({ 'a': 1 }));\n     *\n     * console.log(objects);\n     * // => [{ 'a': 1 }, { 'a': 1 }]\n     *\n     * console.log(objects[0] === objects[1]);\n     * // => true\n     */\n    function constant(value) {\n      return function() {\n        return value;\n      };\n    }\n\n    /**\n     * Checks `value` to determine whether a default value should be returned in\n     * its place. The `defaultValue` is returned if `value` is `NaN`, `null`,\n     * or `undefined`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.14.0\n     * @category Util\n     * @param {*} value The value to check.\n     * @param {*} defaultValue The default value.\n     * @returns {*} Returns the resolved value.\n     * @example\n     *\n     * _.defaultTo(1, 10);\n     * // => 1\n     *\n     * _.defaultTo(undefined, 10);\n     * // => 10\n     */\n    function defaultTo(value, defaultValue) {\n      return (value == null || value !== value) ? defaultValue : value;\n    }\n\n    /**\n     * Creates a function that returns the result of invoking the given functions\n     * with the `this` binding of the created function, where each successive\n     * invocation is supplied the return value of the previous.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category Util\n     * @param {...(Function|Function[])} [funcs] The functions to invoke.\n     * @returns {Function} Returns the new composite function.\n     * @see _.flowRight\n     * @example\n     *\n     * function square(n) {\n     *   return n * n;\n     * }\n     *\n     * var addSquare = _.flow([_.add, square]);\n     * addSquare(1, 2);\n     * // => 9\n     */\n    var flow = createFlow();\n\n    /**\n     * This method is like `_.flow` except that it creates a function that\n     * invokes the given functions from right to left.\n     *\n     * @static\n     * @since 3.0.0\n     * @memberOf _\n     * @category Util\n     * @param {...(Function|Function[])} [funcs] The functions to invoke.\n     * @returns {Function} Returns the new composite function.\n     * @see _.flow\n     * @example\n     *\n     * function square(n) {\n     *   return n * n;\n     * }\n     *\n     * var addSquare = _.flowRight([square, _.add]);\n     * addSquare(1, 2);\n     * // => 9\n     */\n    var flowRight = createFlow(true);\n\n    /**\n     * This method returns the first argument it receives.\n     *\n     * @static\n     * @since 0.1.0\n     * @memberOf _\n     * @category Util\n     * @param {*} value Any value.\n     * @returns {*} Returns `value`.\n     * @example\n     *\n     * var object = { 'a': 1 };\n     *\n     * console.log(_.identity(object) === object);\n     * // => true\n     */\n    function identity(value) {\n      return value;\n    }\n\n    /**\n     * Creates a function that invokes `func` with the arguments of the created\n     * function. If `func` is a property name, the created function returns the\n     * property value for a given element. If `func` is an array or object, the\n     * created function returns `true` for elements that contain the equivalent\n     * source properties, otherwise it returns `false`.\n     *\n     * @static\n     * @since 4.0.0\n     * @memberOf _\n     * @category Util\n     * @param {*} [func=_.identity] The value to convert to a callback.\n     * @returns {Function} Returns the callback.\n     * @example\n     *\n     * var users = [\n     *   { 'user': 'barney', 'age': 36, 'active': true },\n     *   { 'user': 'fred',   'age': 40, 'active': false }\n     * ];\n     *\n     * // The `_.matches` iteratee shorthand.\n     * _.filter(users, _.iteratee({ 'user': 'barney', 'active': true }));\n     * // => [{ 'user': 'barney', 'age': 36, 'active': true }]\n     *\n     * // The `_.matchesProperty` iteratee shorthand.\n     * _.filter(users, _.iteratee(['user', 'fred']));\n     * // => [{ 'user': 'fred', 'age': 40 }]\n     *\n     * // The `_.property` iteratee shorthand.\n     * _.map(users, _.iteratee('user'));\n     * // => ['barney', 'fred']\n     *\n     * // Create custom iteratee shorthands.\n     * _.iteratee = _.wrap(_.iteratee, function(iteratee, func) {\n     *   return !_.isRegExp(func) ? iteratee(func) : function(string) {\n     *     return func.test(string);\n     *   };\n     * });\n     *\n     * _.filter(['abc', 'def'], /ef/);\n     * // => ['def']\n     */\n    function iteratee(func) {\n      return baseIteratee(typeof func == 'function' ? func : baseClone(func, CLONE_DEEP_FLAG));\n    }\n\n    /**\n     * Creates a function that performs a partial deep comparison between a given\n     * object and `source`, returning `true` if the given object has equivalent\n     * property values, else `false`.\n     *\n     * **Note:** The created function is equivalent to `_.isMatch` with `source`\n     * partially applied.\n     *\n     * Partial comparisons will match empty array and empty object `source`\n     * values against any array or object value, respectively. See `_.isEqual`\n     * for a list of supported value comparisons.\n     *\n     * **Note:** Multiple values can be checked by combining several matchers\n     * using `_.overSome`\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category Util\n     * @param {Object} source The object of property values to match.\n     * @returns {Function} Returns the new spec function.\n     * @example\n     *\n     * var objects = [\n     *   { 'a': 1, 'b': 2, 'c': 3 },\n     *   { 'a': 4, 'b': 5, 'c': 6 }\n     * ];\n     *\n     * _.filter(objects, _.matches({ 'a': 4, 'c': 6 }));\n     * // => [{ 'a': 4, 'b': 5, 'c': 6 }]\n     *\n     * // Checking for several possible values\n     * _.filter(objects, _.overSome([_.matches({ 'a': 1 }), _.matches({ 'a': 4 })]));\n     * // => [{ 'a': 1, 'b': 2, 'c': 3 }, { 'a': 4, 'b': 5, 'c': 6 }]\n     */\n    function matches(source) {\n      return baseMatches(baseClone(source, CLONE_DEEP_FLAG));\n    }\n\n    /**\n     * Creates a function that performs a partial deep comparison between the\n     * value at `path` of a given object to `srcValue`, returning `true` if the\n     * object value is equivalent, else `false`.\n     *\n     * **Note:** Partial comparisons will match empty array and empty object\n     * `srcValue` values against any array or object value, respectively. See\n     * `_.isEqual` for a list of supported value comparisons.\n     *\n     * **Note:** Multiple values can be checked by combining several matchers\n     * using `_.overSome`\n     *\n     * @static\n     * @memberOf _\n     * @since 3.2.0\n     * @category Util\n     * @param {Array|string} path The path of the property to get.\n     * @param {*} srcValue The value to match.\n     * @returns {Function} Returns the new spec function.\n     * @example\n     *\n     * var objects = [\n     *   { 'a': 1, 'b': 2, 'c': 3 },\n     *   { 'a': 4, 'b': 5, 'c': 6 }\n     * ];\n     *\n     * _.find(objects, _.matchesProperty('a', 4));\n     * // => { 'a': 4, 'b': 5, 'c': 6 }\n     *\n     * // Checking for several possible values\n     * _.filter(objects, _.overSome([_.matchesProperty('a', 1), _.matchesProperty('a', 4)]));\n     * // => [{ 'a': 1, 'b': 2, 'c': 3 }, { 'a': 4, 'b': 5, 'c': 6 }]\n     */\n    function matchesProperty(path, srcValue) {\n      return baseMatchesProperty(path, baseClone(srcValue, CLONE_DEEP_FLAG));\n    }\n\n    /**\n     * Creates a function that invokes the method at `path` of a given object.\n     * Any additional arguments are provided to the invoked method.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.7.0\n     * @category Util\n     * @param {Array|string} path The path of the method to invoke.\n     * @param {...*} [args] The arguments to invoke the method with.\n     * @returns {Function} Returns the new invoker function.\n     * @example\n     *\n     * var objects = [\n     *   { 'a': { 'b': _.constant(2) } },\n     *   { 'a': { 'b': _.constant(1) } }\n     * ];\n     *\n     * _.map(objects, _.method('a.b'));\n     * // => [2, 1]\n     *\n     * _.map(objects, _.method(['a', 'b']));\n     * // => [2, 1]\n     */\n    var method = baseRest(function(path, args) {\n      return function(object) {\n        return baseInvoke(object, path, args);\n      };\n    });\n\n    /**\n     * The opposite of `_.method`; this method creates a function that invokes\n     * the method at a given path of `object`. Any additional arguments are\n     * provided to the invoked method.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.7.0\n     * @category Util\n     * @param {Object} object The object to query.\n     * @param {...*} [args] The arguments to invoke the method with.\n     * @returns {Function} Returns the new invoker function.\n     * @example\n     *\n     * var array = _.times(3, _.constant),\n     *     object = { 'a': array, 'b': array, 'c': array };\n     *\n     * _.map(['a[2]', 'c[0]'], _.methodOf(object));\n     * // => [2, 0]\n     *\n     * _.map([['a', '2'], ['c', '0']], _.methodOf(object));\n     * // => [2, 0]\n     */\n    var methodOf = baseRest(function(object, args) {\n      return function(path) {\n        return baseInvoke(object, path, args);\n      };\n    });\n\n    /**\n     * Adds all own enumerable string keyed function properties of a source\n     * object to the destination object. If `object` is a function, then methods\n     * are added to its prototype as well.\n     *\n     * **Note:** Use `_.runInContext` to create a pristine `lodash` function to\n     * avoid conflicts caused by modifying the original.\n     *\n     * @static\n     * @since 0.1.0\n     * @memberOf _\n     * @category Util\n     * @param {Function|Object} [object=lodash] The destination object.\n     * @param {Object} source The object of functions to add.\n     * @param {Object} [options={}] The options object.\n     * @param {boolean} [options.chain=true] Specify whether mixins are chainable.\n     * @returns {Function|Object} Returns `object`.\n     * @example\n     *\n     * function vowels(string) {\n     *   return _.filter(string, function(v) {\n     *     return /[aeiou]/i.test(v);\n     *   });\n     * }\n     *\n     * _.mixin({ 'vowels': vowels });\n     * _.vowels('fred');\n     * // => ['e']\n     *\n     * _('fred').vowels().value();\n     * // => ['e']\n     *\n     * _.mixin({ 'vowels': vowels }, { 'chain': false });\n     * _('fred').vowels();\n     * // => ['e']\n     */\n    function mixin(object, source, options) {\n      var props = keys(source),\n          methodNames = baseFunctions(source, props);\n\n      if (options == null &&\n          !(isObject(source) && (methodNames.length || !props.length))) {\n        options = source;\n        source = object;\n        object = this;\n        methodNames = baseFunctions(source, keys(source));\n      }\n      var chain = !(isObject(options) && 'chain' in options) || !!options.chain,\n          isFunc = isFunction(object);\n\n      arrayEach(methodNames, function(methodName) {\n        var func = source[methodName];\n        object[methodName] = func;\n        if (isFunc) {\n          object.prototype[methodName] = function() {\n            var chainAll = this.__chain__;\n            if (chain || chainAll) {\n              var result = object(this.__wrapped__),\n                  actions = result.__actions__ = copyArray(this.__actions__);\n\n              actions.push({ 'func': func, 'args': arguments, 'thisArg': object });\n              result.__chain__ = chainAll;\n              return result;\n            }\n            return func.apply(object, arrayPush([this.value()], arguments));\n          };\n        }\n      });\n\n      return object;\n    }\n\n    /**\n     * Reverts the `_` variable to its previous value and returns a reference to\n     * the `lodash` function.\n     *\n     * @static\n     * @since 0.1.0\n     * @memberOf _\n     * @category Util\n     * @returns {Function} Returns the `lodash` function.\n     * @example\n     *\n     * var lodash = _.noConflict();\n     */\n    function noConflict() {\n      if (root._ === this) {\n        root._ = oldDash;\n      }\n      return this;\n    }\n\n    /**\n     * This method returns `undefined`.\n     *\n     * @static\n     * @memberOf _\n     * @since 2.3.0\n     * @category Util\n     * @example\n     *\n     * _.times(2, _.noop);\n     * // => [undefined, undefined]\n     */\n    function noop() {\n      // No operation performed.\n    }\n\n    /**\n     * Creates a function that gets the argument at index `n`. If `n` is negative,\n     * the nth argument from the end is returned.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Util\n     * @param {number} [n=0] The index of the argument to return.\n     * @returns {Function} Returns the new pass-thru function.\n     * @example\n     *\n     * var func = _.nthArg(1);\n     * func('a', 'b', 'c', 'd');\n     * // => 'b'\n     *\n     * var func = _.nthArg(-2);\n     * func('a', 'b', 'c', 'd');\n     * // => 'c'\n     */\n    function nthArg(n) {\n      n = toInteger(n);\n      return baseRest(function(args) {\n        return baseNth(args, n);\n      });\n    }\n\n    /**\n     * Creates a function that invokes `iteratees` with the arguments it receives\n     * and returns their results.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Util\n     * @param {...(Function|Function[])} [iteratees=[_.identity]]\n     *  The iteratees to invoke.\n     * @returns {Function} Returns the new function.\n     * @example\n     *\n     * var func = _.over([Math.max, Math.min]);\n     *\n     * func(1, 2, 3, 4);\n     * // => [4, 1]\n     */\n    var over = createOver(arrayMap);\n\n    /**\n     * Creates a function that checks if **all** of the `predicates` return\n     * truthy when invoked with the arguments it receives.\n     *\n     * Following shorthands are possible for providing predicates.\n     * Pass an `Object` and it will be used as an parameter for `_.matches` to create the predicate.\n     * Pass an `Array` of parameters for `_.matchesProperty` and the predicate will be created using them.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Util\n     * @param {...(Function|Function[])} [predicates=[_.identity]]\n     *  The predicates to check.\n     * @returns {Function} Returns the new function.\n     * @example\n     *\n     * var func = _.overEvery([Boolean, isFinite]);\n     *\n     * func('1');\n     * // => true\n     *\n     * func(null);\n     * // => false\n     *\n     * func(NaN);\n     * // => false\n     */\n    var overEvery = createOver(arrayEvery);\n\n    /**\n     * Creates a function that checks if **any** of the `predicates` return\n     * truthy when invoked with the arguments it receives.\n     *\n     * Following shorthands are possible for providing predicates.\n     * Pass an `Object` and it will be used as an parameter for `_.matches` to create the predicate.\n     * Pass an `Array` of parameters for `_.matchesProperty` and the predicate will be created using them.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Util\n     * @param {...(Function|Function[])} [predicates=[_.identity]]\n     *  The predicates to check.\n     * @returns {Function} Returns the new function.\n     * @example\n     *\n     * var func = _.overSome([Boolean, isFinite]);\n     *\n     * func('1');\n     * // => true\n     *\n     * func(null);\n     * // => true\n     *\n     * func(NaN);\n     * // => false\n     *\n     * var matchesFunc = _.overSome([{ 'a': 1 }, { 'a': 2 }])\n     * var matchesPropertyFunc = _.overSome([['a', 1], ['a', 2]])\n     */\n    var overSome = createOver(arraySome);\n\n    /**\n     * Creates a function that returns the value at `path` of a given object.\n     *\n     * @static\n     * @memberOf _\n     * @since 2.4.0\n     * @category Util\n     * @param {Array|string} path The path of the property to get.\n     * @returns {Function} Returns the new accessor function.\n     * @example\n     *\n     * var objects = [\n     *   { 'a': { 'b': 2 } },\n     *   { 'a': { 'b': 1 } }\n     * ];\n     *\n     * _.map(objects, _.property('a.b'));\n     * // => [2, 1]\n     *\n     * _.map(_.sortBy(objects, _.property(['a', 'b'])), 'a.b');\n     * // => [1, 2]\n     */\n    function property(path) {\n      return isKey(path) ? baseProperty(toKey(path)) : basePropertyDeep(path);\n    }\n\n    /**\n     * The opposite of `_.property`; this method creates a function that returns\n     * the value at a given path of `object`.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category Util\n     * @param {Object} object The object to query.\n     * @returns {Function} Returns the new accessor function.\n     * @example\n     *\n     * var array = [0, 1, 2],\n     *     object = { 'a': array, 'b': array, 'c': array };\n     *\n     * _.map(['a[2]', 'c[0]'], _.propertyOf(object));\n     * // => [2, 0]\n     *\n     * _.map([['a', '2'], ['c', '0']], _.propertyOf(object));\n     * // => [2, 0]\n     */\n    function propertyOf(object) {\n      return function(path) {\n        return object == null ? undefined : baseGet(object, path);\n      };\n    }\n\n    /**\n     * Creates an array of numbers (positive and/or negative) progressing from\n     * `start` up to, but not including, `end`. A step of `-1` is used if a negative\n     * `start` is specified without an `end` or `step`. If `end` is not specified,\n     * it's set to `start` with `start` then set to `0`.\n     *\n     * **Note:** JavaScript follows the IEEE-754 standard for resolving\n     * floating-point values which can produce unexpected results.\n     *\n     * @static\n     * @since 0.1.0\n     * @memberOf _\n     * @category Util\n     * @param {number} [start=0] The start of the range.\n     * @param {number} end The end of the range.\n     * @param {number} [step=1] The value to increment or decrement by.\n     * @returns {Array} Returns the range of numbers.\n     * @see _.inRange, _.rangeRight\n     * @example\n     *\n     * _.range(4);\n     * // => [0, 1, 2, 3]\n     *\n     * _.range(-4);\n     * // => [0, -1, -2, -3]\n     *\n     * _.range(1, 5);\n     * // => [1, 2, 3, 4]\n     *\n     * _.range(0, 20, 5);\n     * // => [0, 5, 10, 15]\n     *\n     * _.range(0, -4, -1);\n     * // => [0, -1, -2, -3]\n     *\n     * _.range(1, 4, 0);\n     * // => [1, 1, 1]\n     *\n     * _.range(0);\n     * // => []\n     */\n    var range = createRange();\n\n    /**\n     * This method is like `_.range` except that it populates values in\n     * descending order.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Util\n     * @param {number} [start=0] The start of the range.\n     * @param {number} end The end of the range.\n     * @param {number} [step=1] The value to increment or decrement by.\n     * @returns {Array} Returns the range of numbers.\n     * @see _.inRange, _.range\n     * @example\n     *\n     * _.rangeRight(4);\n     * // => [3, 2, 1, 0]\n     *\n     * _.rangeRight(-4);\n     * // => [-3, -2, -1, 0]\n     *\n     * _.rangeRight(1, 5);\n     * // => [4, 3, 2, 1]\n     *\n     * _.rangeRight(0, 20, 5);\n     * // => [15, 10, 5, 0]\n     *\n     * _.rangeRight(0, -4, -1);\n     * // => [-3, -2, -1, 0]\n     *\n     * _.rangeRight(1, 4, 0);\n     * // => [1, 1, 1]\n     *\n     * _.rangeRight(0);\n     * // => []\n     */\n    var rangeRight = createRange(true);\n\n    /**\n     * This method returns a new empty array.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.13.0\n     * @category Util\n     * @returns {Array} Returns the new empty array.\n     * @example\n     *\n     * var arrays = _.times(2, _.stubArray);\n     *\n     * console.log(arrays);\n     * // => [[], []]\n     *\n     * console.log(arrays[0] === arrays[1]);\n     * // => false\n     */\n    function stubArray() {\n      return [];\n    }\n\n    /**\n     * This method returns `false`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.13.0\n     * @category Util\n     * @returns {boolean} Returns `false`.\n     * @example\n     *\n     * _.times(2, _.stubFalse);\n     * // => [false, false]\n     */\n    function stubFalse() {\n      return false;\n    }\n\n    /**\n     * This method returns a new empty object.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.13.0\n     * @category Util\n     * @returns {Object} Returns the new empty object.\n     * @example\n     *\n     * var objects = _.times(2, _.stubObject);\n     *\n     * console.log(objects);\n     * // => [{}, {}]\n     *\n     * console.log(objects[0] === objects[1]);\n     * // => false\n     */\n    function stubObject() {\n      return {};\n    }\n\n    /**\n     * This method returns an empty string.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.13.0\n     * @category Util\n     * @returns {string} Returns the empty string.\n     * @example\n     *\n     * _.times(2, _.stubString);\n     * // => ['', '']\n     */\n    function stubString() {\n      return '';\n    }\n\n    /**\n     * This method returns `true`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.13.0\n     * @category Util\n     * @returns {boolean} Returns `true`.\n     * @example\n     *\n     * _.times(2, _.stubTrue);\n     * // => [true, true]\n     */\n    function stubTrue() {\n      return true;\n    }\n\n    /**\n     * Invokes the iteratee `n` times, returning an array of the results of\n     * each invocation. The iteratee is invoked with one argument; (index).\n     *\n     * @static\n     * @since 0.1.0\n     * @memberOf _\n     * @category Util\n     * @param {number} n The number of times to invoke `iteratee`.\n     * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n     * @returns {Array} Returns the array of results.\n     * @example\n     *\n     * _.times(3, String);\n     * // => ['0', '1', '2']\n     *\n     *  _.times(4, _.constant(0));\n     * // => [0, 0, 0, 0]\n     */\n    function times(n, iteratee) {\n      n = toInteger(n);\n      if (n < 1 || n > MAX_SAFE_INTEGER) {\n        return [];\n      }\n      var index = MAX_ARRAY_LENGTH,\n          length = nativeMin(n, MAX_ARRAY_LENGTH);\n\n      iteratee = getIteratee(iteratee);\n      n -= MAX_ARRAY_LENGTH;\n\n      var result = baseTimes(length, iteratee);\n      while (++index < n) {\n        iteratee(index);\n      }\n      return result;\n    }\n\n    /**\n     * Converts `value` to a property path array.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Util\n     * @param {*} value The value to convert.\n     * @returns {Array} Returns the new property path array.\n     * @example\n     *\n     * _.toPath('a.b.c');\n     * // => ['a', 'b', 'c']\n     *\n     * _.toPath('a[0].b.c');\n     * // => ['a', '0', 'b', 'c']\n     */\n    function toPath(value) {\n      if (isArray(value)) {\n        return arrayMap(value, toKey);\n      }\n      return isSymbol(value) ? [value] : copyArray(stringToPath(toString(value)));\n    }\n\n    /**\n     * Generates a unique ID. If `prefix` is given, the ID is appended to it.\n     *\n     * @static\n     * @since 0.1.0\n     * @memberOf _\n     * @category Util\n     * @param {string} [prefix=''] The value to prefix the ID with.\n     * @returns {string} Returns the unique ID.\n     * @example\n     *\n     * _.uniqueId('contact_');\n     * // => 'contact_104'\n     *\n     * _.uniqueId();\n     * // => '105'\n     */\n    function uniqueId(prefix) {\n      var id = ++idCounter;\n      return toString(prefix) + id;\n    }\n\n    /*------------------------------------------------------------------------*/\n\n    /**\n     * Adds two numbers.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.4.0\n     * @category Math\n     * @param {number} augend The first number in an addition.\n     * @param {number} addend The second number in an addition.\n     * @returns {number} Returns the total.\n     * @example\n     *\n     * _.add(6, 4);\n     * // => 10\n     */\n    var add = createMathOperation(function(augend, addend) {\n      return augend + addend;\n    }, 0);\n\n    /**\n     * Computes `number` rounded up to `precision`.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.10.0\n     * @category Math\n     * @param {number} number The number to round up.\n     * @param {number} [precision=0] The precision to round up to.\n     * @returns {number} Returns the rounded up number.\n     * @example\n     *\n     * _.ceil(4.006);\n     * // => 5\n     *\n     * _.ceil(6.004, 2);\n     * // => 6.01\n     *\n     * _.ceil(6040, -2);\n     * // => 6100\n     */\n    var ceil = createRound('ceil');\n\n    /**\n     * Divide two numbers.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.7.0\n     * @category Math\n     * @param {number} dividend The first number in a division.\n     * @param {number} divisor The second number in a division.\n     * @returns {number} Returns the quotient.\n     * @example\n     *\n     * _.divide(6, 4);\n     * // => 1.5\n     */\n    var divide = createMathOperation(function(dividend, divisor) {\n      return dividend / divisor;\n    }, 1);\n\n    /**\n     * Computes `number` rounded down to `precision`.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.10.0\n     * @category Math\n     * @param {number} number The number to round down.\n     * @param {number} [precision=0] The precision to round down to.\n     * @returns {number} Returns the rounded down number.\n     * @example\n     *\n     * _.floor(4.006);\n     * // => 4\n     *\n     * _.floor(0.046, 2);\n     * // => 0.04\n     *\n     * _.floor(4060, -2);\n     * // => 4000\n     */\n    var floor = createRound('floor');\n\n    /**\n     * Computes the maximum value of `array`. If `array` is empty or falsey,\n     * `undefined` is returned.\n     *\n     * @static\n     * @since 0.1.0\n     * @memberOf _\n     * @category Math\n     * @param {Array} array The array to iterate over.\n     * @returns {*} Returns the maximum value.\n     * @example\n     *\n     * _.max([4, 2, 8, 6]);\n     * // => 8\n     *\n     * _.max([]);\n     * // => undefined\n     */\n    function max(array) {\n      return (array && array.length)\n        ? baseExtremum(array, identity, baseGt)\n        : undefined;\n    }\n\n    /**\n     * This method is like `_.max` except that it accepts `iteratee` which is\n     * invoked for each element in `array` to generate the criterion by which\n     * the value is ranked. The iteratee is invoked with one argument: (value).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Math\n     * @param {Array} array The array to iterate over.\n     * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n     * @returns {*} Returns the maximum value.\n     * @example\n     *\n     * var objects = [{ 'n': 1 }, { 'n': 2 }];\n     *\n     * _.maxBy(objects, function(o) { return o.n; });\n     * // => { 'n': 2 }\n     *\n     * // The `_.property` iteratee shorthand.\n     * _.maxBy(objects, 'n');\n     * // => { 'n': 2 }\n     */\n    function maxBy(array, iteratee) {\n      return (array && array.length)\n        ? baseExtremum(array, getIteratee(iteratee, 2), baseGt)\n        : undefined;\n    }\n\n    /**\n     * Computes the mean of the values in `array`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Math\n     * @param {Array} array The array to iterate over.\n     * @returns {number} Returns the mean.\n     * @example\n     *\n     * _.mean([4, 2, 8, 6]);\n     * // => 5\n     */\n    function mean(array) {\n      return baseMean(array, identity);\n    }\n\n    /**\n     * This method is like `_.mean` except that it accepts `iteratee` which is\n     * invoked for each element in `array` to generate the value to be averaged.\n     * The iteratee is invoked with one argument: (value).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.7.0\n     * @category Math\n     * @param {Array} array The array to iterate over.\n     * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n     * @returns {number} Returns the mean.\n     * @example\n     *\n     * var objects = [{ 'n': 4 }, { 'n': 2 }, { 'n': 8 }, { 'n': 6 }];\n     *\n     * _.meanBy(objects, function(o) { return o.n; });\n     * // => 5\n     *\n     * // The `_.property` iteratee shorthand.\n     * _.meanBy(objects, 'n');\n     * // => 5\n     */\n    function meanBy(array, iteratee) {\n      return baseMean(array, getIteratee(iteratee, 2));\n    }\n\n    /**\n     * Computes the minimum value of `array`. If `array` is empty or falsey,\n     * `undefined` is returned.\n     *\n     * @static\n     * @since 0.1.0\n     * @memberOf _\n     * @category Math\n     * @param {Array} array The array to iterate over.\n     * @returns {*} Returns the minimum value.\n     * @example\n     *\n     * _.min([4, 2, 8, 6]);\n     * // => 2\n     *\n     * _.min([]);\n     * // => undefined\n     */\n    function min(array) {\n      return (array && array.length)\n        ? baseExtremum(array, identity, baseLt)\n        : undefined;\n    }\n\n    /**\n     * This method is like `_.min` except that it accepts `iteratee` which is\n     * invoked for each element in `array` to generate the criterion by which\n     * the value is ranked. The iteratee is invoked with one argument: (value).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Math\n     * @param {Array} array The array to iterate over.\n     * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n     * @returns {*} Returns the minimum value.\n     * @example\n     *\n     * var objects = [{ 'n': 1 }, { 'n': 2 }];\n     *\n     * _.minBy(objects, function(o) { return o.n; });\n     * // => { 'n': 1 }\n     *\n     * // The `_.property` iteratee shorthand.\n     * _.minBy(objects, 'n');\n     * // => { 'n': 1 }\n     */\n    function minBy(array, iteratee) {\n      return (array && array.length)\n        ? baseExtremum(array, getIteratee(iteratee, 2), baseLt)\n        : undefined;\n    }\n\n    /**\n     * Multiply two numbers.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.7.0\n     * @category Math\n     * @param {number} multiplier The first number in a multiplication.\n     * @param {number} multiplicand The second number in a multiplication.\n     * @returns {number} Returns the product.\n     * @example\n     *\n     * _.multiply(6, 4);\n     * // => 24\n     */\n    var multiply = createMathOperation(function(multiplier, multiplicand) {\n      return multiplier * multiplicand;\n    }, 1);\n\n    /**\n     * Computes `number` rounded to `precision`.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.10.0\n     * @category Math\n     * @param {number} number The number to round.\n     * @param {number} [precision=0] The precision to round to.\n     * @returns {number} Returns the rounded number.\n     * @example\n     *\n     * _.round(4.006);\n     * // => 4\n     *\n     * _.round(4.006, 2);\n     * // => 4.01\n     *\n     * _.round(4060, -2);\n     * // => 4100\n     */\n    var round = createRound('round');\n\n    /**\n     * Subtract two numbers.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Math\n     * @param {number} minuend The first number in a subtraction.\n     * @param {number} subtrahend The second number in a subtraction.\n     * @returns {number} Returns the difference.\n     * @example\n     *\n     * _.subtract(6, 4);\n     * // => 2\n     */\n    var subtract = createMathOperation(function(minuend, subtrahend) {\n      return minuend - subtrahend;\n    }, 0);\n\n    /**\n     * Computes the sum of the values in `array`.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.4.0\n     * @category Math\n     * @param {Array} array The array to iterate over.\n     * @returns {number} Returns the sum.\n     * @example\n     *\n     * _.sum([4, 2, 8, 6]);\n     * // => 20\n     */\n    function sum(array) {\n      return (array && array.length)\n        ? baseSum(array, identity)\n        : 0;\n    }\n\n    /**\n     * This method is like `_.sum` except that it accepts `iteratee` which is\n     * invoked for each element in `array` to generate the value to be summed.\n     * The iteratee is invoked with one argument: (value).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Math\n     * @param {Array} array The array to iterate over.\n     * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n     * @returns {number} Returns the sum.\n     * @example\n     *\n     * var objects = [{ 'n': 4 }, { 'n': 2 }, { 'n': 8 }, { 'n': 6 }];\n     *\n     * _.sumBy(objects, function(o) { return o.n; });\n     * // => 20\n     *\n     * // The `_.property` iteratee shorthand.\n     * _.sumBy(objects, 'n');\n     * // => 20\n     */\n    function sumBy(array, iteratee) {\n      return (array && array.length)\n        ? baseSum(array, getIteratee(iteratee, 2))\n        : 0;\n    }\n\n    /*------------------------------------------------------------------------*/\n\n    // Add methods that return wrapped values in chain sequences.\n    lodash.after = after;\n    lodash.ary = ary;\n    lodash.assign = assign;\n    lodash.assignIn = assignIn;\n    lodash.assignInWith = assignInWith;\n    lodash.assignWith = assignWith;\n    lodash.at = at;\n    lodash.before = before;\n    lodash.bind = bind;\n    lodash.bindAll = bindAll;\n    lodash.bindKey = bindKey;\n    lodash.castArray = castArray;\n    lodash.chain = chain;\n    lodash.chunk = chunk;\n    lodash.compact = compact;\n    lodash.concat = concat;\n    lodash.cond = cond;\n    lodash.conforms = conforms;\n    lodash.constant = constant;\n    lodash.countBy = countBy;\n    lodash.create = create;\n    lodash.curry = curry;\n    lodash.curryRight = curryRight;\n    lodash.debounce = debounce;\n    lodash.defaults = defaults;\n    lodash.defaultsDeep = defaultsDeep;\n    lodash.defer = defer;\n    lodash.delay = delay;\n    lodash.difference = difference;\n    lodash.differenceBy = differenceBy;\n    lodash.differenceWith = differenceWith;\n    lodash.drop = drop;\n    lodash.dropRight = dropRight;\n    lodash.dropRightWhile = dropRightWhile;\n    lodash.dropWhile = dropWhile;\n    lodash.fill = fill;\n    lodash.filter = filter;\n    lodash.flatMap = flatMap;\n    lodash.flatMapDeep = flatMapDeep;\n    lodash.flatMapDepth = flatMapDepth;\n    lodash.flatten = flatten;\n    lodash.flattenDeep = flattenDeep;\n    lodash.flattenDepth = flattenDepth;\n    lodash.flip = flip;\n    lodash.flow = flow;\n    lodash.flowRight = flowRight;\n    lodash.fromPairs = fromPairs;\n    lodash.functions = functions;\n    lodash.functionsIn = functionsIn;\n    lodash.groupBy = groupBy;\n    lodash.initial = initial;\n    lodash.intersection = intersection;\n    lodash.intersectionBy = intersectionBy;\n    lodash.intersectionWith = intersectionWith;\n    lodash.invert = invert;\n    lodash.invertBy = invertBy;\n    lodash.invokeMap = invokeMap;\n    lodash.iteratee = iteratee;\n    lodash.keyBy = keyBy;\n    lodash.keys = keys;\n    lodash.keysIn = keysIn;\n    lodash.map = map;\n    lodash.mapKeys = mapKeys;\n    lodash.mapValues = mapValues;\n    lodash.matches = matches;\n    lodash.matchesProperty = matchesProperty;\n    lodash.memoize = memoize;\n    lodash.merge = merge;\n    lodash.mergeWith = mergeWith;\n    lodash.method = method;\n    lodash.methodOf = methodOf;\n    lodash.mixin = mixin;\n    lodash.negate = negate;\n    lodash.nthArg = nthArg;\n    lodash.omit = omit;\n    lodash.omitBy = omitBy;\n    lodash.once = once;\n    lodash.orderBy = orderBy;\n    lodash.over = over;\n    lodash.overArgs = overArgs;\n    lodash.overEvery = overEvery;\n    lodash.overSome = overSome;\n    lodash.partial = partial;\n    lodash.partialRight = partialRight;\n    lodash.partition = partition;\n    lodash.pick = pick;\n    lodash.pickBy = pickBy;\n    lodash.property = property;\n    lodash.propertyOf = propertyOf;\n    lodash.pull = pull;\n    lodash.pullAll = pullAll;\n    lodash.pullAllBy = pullAllBy;\n    lodash.pullAllWith = pullAllWith;\n    lodash.pullAt = pullAt;\n    lodash.range = range;\n    lodash.rangeRight = rangeRight;\n    lodash.rearg = rearg;\n    lodash.reject = reject;\n    lodash.remove = remove;\n    lodash.rest = rest;\n    lodash.reverse = reverse;\n    lodash.sampleSize = sampleSize;\n    lodash.set = set;\n    lodash.setWith = setWith;\n    lodash.shuffle = shuffle;\n    lodash.slice = slice;\n    lodash.sortBy = sortBy;\n    lodash.sortedUniq = sortedUniq;\n    lodash.sortedUniqBy = sortedUniqBy;\n    lodash.split = split;\n    lodash.spread = spread;\n    lodash.tail = tail;\n    lodash.take = take;\n    lodash.takeRight = takeRight;\n    lodash.takeRightWhile = takeRightWhile;\n    lodash.takeWhile = takeWhile;\n    lodash.tap = tap;\n    lodash.throttle = throttle;\n    lodash.thru = thru;\n    lodash.toArray = toArray;\n    lodash.toPairs = toPairs;\n    lodash.toPairsIn = toPairsIn;\n    lodash.toPath = toPath;\n    lodash.toPlainObject = toPlainObject;\n    lodash.transform = transform;\n    lodash.unary = unary;\n    lodash.union = union;\n    lodash.unionBy = unionBy;\n    lodash.unionWith = unionWith;\n    lodash.uniq = uniq;\n    lodash.uniqBy = uniqBy;\n    lodash.uniqWith = uniqWith;\n    lodash.unset = unset;\n    lodash.unzip = unzip;\n    lodash.unzipWith = unzipWith;\n    lodash.update = update;\n    lodash.updateWith = updateWith;\n    lodash.values = values;\n    lodash.valuesIn = valuesIn;\n    lodash.without = without;\n    lodash.words = words;\n    lodash.wrap = wrap;\n    lodash.xor = xor;\n    lodash.xorBy = xorBy;\n    lodash.xorWith = xorWith;\n    lodash.zip = zip;\n    lodash.zipObject = zipObject;\n    lodash.zipObjectDeep = zipObjectDeep;\n    lodash.zipWith = zipWith;\n\n    // Add aliases.\n    lodash.entries = toPairs;\n    lodash.entriesIn = toPairsIn;\n    lodash.extend = assignIn;\n    lodash.extendWith = assignInWith;\n\n    // Add methods to `lodash.prototype`.\n    mixin(lodash, lodash);\n\n    /*------------------------------------------------------------------------*/\n\n    // Add methods that return unwrapped values in chain sequences.\n    lodash.add = add;\n    lodash.attempt = attempt;\n    lodash.camelCase = camelCase;\n    lodash.capitalize = capitalize;\n    lodash.ceil = ceil;\n    lodash.clamp = clamp;\n    lodash.clone = clone;\n    lodash.cloneDeep = cloneDeep;\n    lodash.cloneDeepWith = cloneDeepWith;\n    lodash.cloneWith = cloneWith;\n    lodash.conformsTo = conformsTo;\n    lodash.deburr = deburr;\n    lodash.defaultTo = defaultTo;\n    lodash.divide = divide;\n    lodash.endsWith = endsWith;\n    lodash.eq = eq;\n    lodash.escape = escape;\n    lodash.escapeRegExp = escapeRegExp;\n    lodash.every = every;\n    lodash.find = find;\n    lodash.findIndex = findIndex;\n    lodash.findKey = findKey;\n    lodash.findLast = findLast;\n    lodash.findLastIndex = findLastIndex;\n    lodash.findLastKey = findLastKey;\n    lodash.floor = floor;\n    lodash.forEach = forEach;\n    lodash.forEachRight = forEachRight;\n    lodash.forIn = forIn;\n    lodash.forInRight = forInRight;\n    lodash.forOwn = forOwn;\n    lodash.forOwnRight = forOwnRight;\n    lodash.get = get;\n    lodash.gt = gt;\n    lodash.gte = gte;\n    lodash.has = has;\n    lodash.hasIn = hasIn;\n    lodash.head = head;\n    lodash.identity = identity;\n    lodash.includes = includes;\n    lodash.indexOf = indexOf;\n    lodash.inRange = inRange;\n    lodash.invoke = invoke;\n    lodash.isArguments = isArguments;\n    lodash.isArray = isArray;\n    lodash.isArrayBuffer = isArrayBuffer;\n    lodash.isArrayLike = isArrayLike;\n    lodash.isArrayLikeObject = isArrayLikeObject;\n    lodash.isBoolean = isBoolean;\n    lodash.isBuffer = isBuffer;\n    lodash.isDate = isDate;\n    lodash.isElement = isElement;\n    lodash.isEmpty = isEmpty;\n    lodash.isEqual = isEqual;\n    lodash.isEqualWith = isEqualWith;\n    lodash.isError = isError;\n    lodash.isFinite = isFinite;\n    lodash.isFunction = isFunction;\n    lodash.isInteger = isInteger;\n    lodash.isLength = isLength;\n    lodash.isMap = isMap;\n    lodash.isMatch = isMatch;\n    lodash.isMatchWith = isMatchWith;\n    lodash.isNaN = isNaN;\n    lodash.isNative = isNative;\n    lodash.isNil = isNil;\n    lodash.isNull = isNull;\n    lodash.isNumber = isNumber;\n    lodash.isObject = isObject;\n    lodash.isObjectLike = isObjectLike;\n    lodash.isPlainObject = isPlainObject;\n    lodash.isRegExp = isRegExp;\n    lodash.isSafeInteger = isSafeInteger;\n    lodash.isSet = isSet;\n    lodash.isString = isString;\n    lodash.isSymbol = isSymbol;\n    lodash.isTypedArray = isTypedArray;\n    lodash.isUndefined = isUndefined;\n    lodash.isWeakMap = isWeakMap;\n    lodash.isWeakSet = isWeakSet;\n    lodash.join = join;\n    lodash.kebabCase = kebabCase;\n    lodash.last = last;\n    lodash.lastIndexOf = lastIndexOf;\n    lodash.lowerCase = lowerCase;\n    lodash.lowerFirst = lowerFirst;\n    lodash.lt = lt;\n    lodash.lte = lte;\n    lodash.max = max;\n    lodash.maxBy = maxBy;\n    lodash.mean = mean;\n    lodash.meanBy = meanBy;\n    lodash.min = min;\n    lodash.minBy = minBy;\n    lodash.stubArray = stubArray;\n    lodash.stubFalse = stubFalse;\n    lodash.stubObject = stubObject;\n    lodash.stubString = stubString;\n    lodash.stubTrue = stubTrue;\n    lodash.multiply = multiply;\n    lodash.nth = nth;\n    lodash.noConflict = noConflict;\n    lodash.noop = noop;\n    lodash.now = now;\n    lodash.pad = pad;\n    lodash.padEnd = padEnd;\n    lodash.padStart = padStart;\n    lodash.parseInt = parseInt;\n    lodash.random = random;\n    lodash.reduce = reduce;\n    lodash.reduceRight = reduceRight;\n    lodash.repeat = repeat;\n    lodash.replace = replace;\n    lodash.result = result;\n    lodash.round = round;\n    lodash.runInContext = runInContext;\n    lodash.sample = sample;\n    lodash.size = size;\n    lodash.snakeCase = snakeCase;\n    lodash.some = some;\n    lodash.sortedIndex = sortedIndex;\n    lodash.sortedIndexBy = sortedIndexBy;\n    lodash.sortedIndexOf = sortedIndexOf;\n    lodash.sortedLastIndex = sortedLastIndex;\n    lodash.sortedLastIndexBy = sortedLastIndexBy;\n    lodash.sortedLastIndexOf = sortedLastIndexOf;\n    lodash.startCase = startCase;\n    lodash.startsWith = startsWith;\n    lodash.subtract = subtract;\n    lodash.sum = sum;\n    lodash.sumBy = sumBy;\n    lodash.template = template;\n    lodash.times = times;\n    lodash.toFinite = toFinite;\n    lodash.toInteger = toInteger;\n    lodash.toLength = toLength;\n    lodash.toLower = toLower;\n    lodash.toNumber = toNumber;\n    lodash.toSafeInteger = toSafeInteger;\n    lodash.toString = toString;\n    lodash.toUpper = toUpper;\n    lodash.trim = trim;\n    lodash.trimEnd = trimEnd;\n    lodash.trimStart = trimStart;\n    lodash.truncate = truncate;\n    lodash.unescape = unescape;\n    lodash.uniqueId = uniqueId;\n    lodash.upperCase = upperCase;\n    lodash.upperFirst = upperFirst;\n\n    // Add aliases.\n    lodash.each = forEach;\n    lodash.eachRight = forEachRight;\n    lodash.first = head;\n\n    mixin(lodash, (function() {\n      var source = {};\n      baseForOwn(lodash, function(func, methodName) {\n        if (!hasOwnProperty.call(lodash.prototype, methodName)) {\n          source[methodName] = func;\n        }\n      });\n      return source;\n    }()), { 'chain': false });\n\n    /*------------------------------------------------------------------------*/\n\n    /**\n     * The semantic version number.\n     *\n     * @static\n     * @memberOf _\n     * @type {string}\n     */\n    lodash.VERSION = VERSION;\n\n    // Assign default placeholders.\n    arrayEach(['bind', 'bindKey', 'curry', 'curryRight', 'partial', 'partialRight'], function(methodName) {\n      lodash[methodName].placeholder = lodash;\n    });\n\n    // Add `LazyWrapper` methods for `_.drop` and `_.take` variants.\n    arrayEach(['drop', 'take'], function(methodName, index) {\n      LazyWrapper.prototype[methodName] = function(n) {\n        n = n === undefined ? 1 : nativeMax(toInteger(n), 0);\n\n        var result = (this.__filtered__ && !index)\n          ? new LazyWrapper(this)\n          : this.clone();\n\n        if (result.__filtered__) {\n          result.__takeCount__ = nativeMin(n, result.__takeCount__);\n        } else {\n          result.__views__.push({\n            'size': nativeMin(n, MAX_ARRAY_LENGTH),\n            'type': methodName + (result.__dir__ < 0 ? 'Right' : '')\n          });\n        }\n        return result;\n      };\n\n      LazyWrapper.prototype[methodName + 'Right'] = function(n) {\n        return this.reverse()[methodName](n).reverse();\n      };\n    });\n\n    // Add `LazyWrapper` methods that accept an `iteratee` value.\n    arrayEach(['filter', 'map', 'takeWhile'], function(methodName, index) {\n      var type = index + 1,\n          isFilter = type == LAZY_FILTER_FLAG || type == LAZY_WHILE_FLAG;\n\n      LazyWrapper.prototype[methodName] = function(iteratee) {\n        var result = this.clone();\n        result.__iteratees__.push({\n          'iteratee': getIteratee(iteratee, 3),\n          'type': type\n        });\n        result.__filtered__ = result.__filtered__ || isFilter;\n        return result;\n      };\n    });\n\n    // Add `LazyWrapper` methods for `_.head` and `_.last`.\n    arrayEach(['head', 'last'], function(methodName, index) {\n      var takeName = 'take' + (index ? 'Right' : '');\n\n      LazyWrapper.prototype[methodName] = function() {\n        return this[takeName](1).value()[0];\n      };\n    });\n\n    // Add `LazyWrapper` methods for `_.initial` and `_.tail`.\n    arrayEach(['initial', 'tail'], function(methodName, index) {\n      var dropName = 'drop' + (index ? '' : 'Right');\n\n      LazyWrapper.prototype[methodName] = function() {\n        return this.__filtered__ ? new LazyWrapper(this) : this[dropName](1);\n      };\n    });\n\n    LazyWrapper.prototype.compact = function() {\n      return this.filter(identity);\n    };\n\n    LazyWrapper.prototype.find = function(predicate) {\n      return this.filter(predicate).head();\n    };\n\n    LazyWrapper.prototype.findLast = function(predicate) {\n      return this.reverse().find(predicate);\n    };\n\n    LazyWrapper.prototype.invokeMap = baseRest(function(path, args) {\n      if (typeof path == 'function') {\n        return new LazyWrapper(this);\n      }\n      return this.map(function(value) {\n        return baseInvoke(value, path, args);\n      });\n    });\n\n    LazyWrapper.prototype.reject = function(predicate) {\n      return this.filter(negate(getIteratee(predicate)));\n    };\n\n    LazyWrapper.prototype.slice = function(start, end) {\n      start = toInteger(start);\n\n      var result = this;\n      if (result.__filtered__ && (start > 0 || end < 0)) {\n        return new LazyWrapper(result);\n      }\n      if (start < 0) {\n        result = result.takeRight(-start);\n      } else if (start) {\n        result = result.drop(start);\n      }\n      if (end !== undefined) {\n        end = toInteger(end);\n        result = end < 0 ? result.dropRight(-end) : result.take(end - start);\n      }\n      return result;\n    };\n\n    LazyWrapper.prototype.takeRightWhile = function(predicate) {\n      return this.reverse().takeWhile(predicate).reverse();\n    };\n\n    LazyWrapper.prototype.toArray = function() {\n      return this.take(MAX_ARRAY_LENGTH);\n    };\n\n    // Add `LazyWrapper` methods to `lodash.prototype`.\n    baseForOwn(LazyWrapper.prototype, function(func, methodName) {\n      var checkIteratee = /^(?:filter|find|map|reject)|While$/.test(methodName),\n          isTaker = /^(?:head|last)$/.test(methodName),\n          lodashFunc = lodash[isTaker ? ('take' + (methodName == 'last' ? 'Right' : '')) : methodName],\n          retUnwrapped = isTaker || /^find/.test(methodName);\n\n      if (!lodashFunc) {\n        return;\n      }\n      lodash.prototype[methodName] = function() {\n        var value = this.__wrapped__,\n            args = isTaker ? [1] : arguments,\n            isLazy = value instanceof LazyWrapper,\n            iteratee = args[0],\n            useLazy = isLazy || isArray(value);\n\n        var interceptor = function(value) {\n          var result = lodashFunc.apply(lodash, arrayPush([value], args));\n          return (isTaker && chainAll) ? result[0] : result;\n        };\n\n        if (useLazy && checkIteratee && typeof iteratee == 'function' && iteratee.length != 1) {\n          // Avoid lazy use if the iteratee has a \"length\" value other than `1`.\n          isLazy = useLazy = false;\n        }\n        var chainAll = this.__chain__,\n            isHybrid = !!this.__actions__.length,\n            isUnwrapped = retUnwrapped && !chainAll,\n            onlyLazy = isLazy && !isHybrid;\n\n        if (!retUnwrapped && useLazy) {\n          value = onlyLazy ? value : new LazyWrapper(this);\n          var result = func.apply(value, args);\n          result.__actions__.push({ 'func': thru, 'args': [interceptor], 'thisArg': undefined });\n          return new LodashWrapper(result, chainAll);\n        }\n        if (isUnwrapped && onlyLazy) {\n          return func.apply(this, args);\n        }\n        result = this.thru(interceptor);\n        return isUnwrapped ? (isTaker ? result.value()[0] : result.value()) : result;\n      };\n    });\n\n    // Add `Array` methods to `lodash.prototype`.\n    arrayEach(['pop', 'push', 'shift', 'sort', 'splice', 'unshift'], function(methodName) {\n      var func = arrayProto[methodName],\n          chainName = /^(?:push|sort|unshift)$/.test(methodName) ? 'tap' : 'thru',\n          retUnwrapped = /^(?:pop|shift)$/.test(methodName);\n\n      lodash.prototype[methodName] = function() {\n        var args = arguments;\n        if (retUnwrapped && !this.__chain__) {\n          var value = this.value();\n          return func.apply(isArray(value) ? value : [], args);\n        }\n        return this[chainName](function(value) {\n          return func.apply(isArray(value) ? value : [], args);\n        });\n      };\n    });\n\n    // Map minified method names to their real names.\n    baseForOwn(LazyWrapper.prototype, function(func, methodName) {\n      var lodashFunc = lodash[methodName];\n      if (lodashFunc) {\n        var key = lodashFunc.name + '';\n        if (!hasOwnProperty.call(realNames, key)) {\n          realNames[key] = [];\n        }\n        realNames[key].push({ 'name': methodName, 'func': lodashFunc });\n      }\n    });\n\n    realNames[createHybrid(undefined, WRAP_BIND_KEY_FLAG).name] = [{\n      'name': 'wrapper',\n      'func': undefined\n    }];\n\n    // Add methods to `LazyWrapper`.\n    LazyWrapper.prototype.clone = lazyClone;\n    LazyWrapper.prototype.reverse = lazyReverse;\n    LazyWrapper.prototype.value = lazyValue;\n\n    // Add chain sequence methods to the `lodash` wrapper.\n    lodash.prototype.at = wrapperAt;\n    lodash.prototype.chain = wrapperChain;\n    lodash.prototype.commit = wrapperCommit;\n    lodash.prototype.next = wrapperNext;\n    lodash.prototype.plant = wrapperPlant;\n    lodash.prototype.reverse = wrapperReverse;\n    lodash.prototype.toJSON = lodash.prototype.valueOf = lodash.prototype.value = wrapperValue;\n\n    // Add lazy aliases.\n    lodash.prototype.first = lodash.prototype.head;\n\n    if (symIterator) {\n      lodash.prototype[symIterator] = wrapperToIterator;\n    }\n    return lodash;\n  });\n\n  /*--------------------------------------------------------------------------*/\n\n  // Export lodash.\n  var _ = runInContext();\n\n  // Some AMD build optimizers, like r.js, check for condition patterns like:\n  if (typeof define == 'function' && typeof define.amd == 'object' && define.amd) {\n    // Expose Lodash on the global object to prevent errors when Lodash is\n    // loaded by a script tag in the presence of an AMD loader.\n    // See http://requirejs.org/docs/errors.html#mismatch for more details.\n    // Use `_.noConflict` to remove Lodash from the global object.\n    root._ = _;\n\n    // Define as an anonymous module so, through path mapping, it can be\n    // referenced as the \"underscore\" module.\n    define(function() {\n      return _;\n    });\n  }\n  // Check for `exports` after `define` in case a build optimizer adds it.\n  else if (freeModule) {\n    // Export for Node.js.\n    (freeModule.exports = _)._ = _;\n    // Export for CommonJS support.\n    freeExports._ = _;\n  }\n  else {\n    // Export to the global object.\n    root._ = _;\n  }\n}.call(this));\n","import { __assign } from \"tslib\";\nimport { mapValues } from 'lodash';\nfunction isQuantitative(d) {\n    return typeof d === 'number';\n}\nfunction isCategorical(d) {\n    return typeof d === 'string' || typeof d === 'boolean';\n}\nfunction isTemporal(d) {\n    return d instanceof Date;\n}\nfunction isField(data, encode) {\n    return typeof encode === 'string' && data.some(function (d) { return d[encode] !== undefined; });\n}\nfunction isTransform(encode) {\n    return typeof encode === 'function';\n}\n// @ts-ignore: constant - 常数比例尺 / identity - 恒等比例尺 对用户不透出，所以此处ts-ignore\nfunction scaleType2dataType(scaleType) {\n    switch (scaleType) {\n        case 'linear':\n        case 'log':\n        case 'pow':\n        case 'sqrt':\n        case 'qunatile':\n        case 'threshold':\n        case 'quantize':\n        case 'sequential':\n            return 'quantitative';\n        case 'time':\n            return 'temporal';\n        case 'ordinal':\n        case 'point':\n        case 'band':\n            return 'categorical';\n        default:\n            throw new Error(\"Unkonwn scale type: \".concat(scaleType, \".\"));\n    }\n}\nfunction values2dataType(values) {\n    if (values.some(isQuantitative))\n        return 'quantitative';\n    if (values.some(isCategorical))\n        return 'categorical';\n    if (values.some(isTemporal))\n        return 'temporal';\n    throw new Error(\"Unknown type: \".concat(typeof values[0]));\n}\nfunction columnOf(data, encode) {\n    if (isTransform(encode))\n        return data.map(encode);\n    if (isField(data, encode))\n        return data.map(function (d) { return d[encode]; });\n    return data.map(function () { return encode; });\n}\n/** 推断数据类型 */\nexport function inferDataType(data, encode, scale) {\n    if (scale !== undefined)\n        return scaleType2dataType(scale);\n    var values = columnOf(data, encode);\n    return values2dataType(values);\n}\n/** 获取带有字段类型的 chartSpec */\nexport function getSpecWithEncodeType(chartSpec) {\n    var encode = chartSpec.encode, data = chartSpec.data, scale = chartSpec.scale;\n    var newEncode = mapValues(encode, function (value, key) {\n        return { field: value, type: inferDataType(data, value, scale === null || scale === void 0 ? void 0 : scale[key].type) };\n    });\n    return __assign(__assign({}, chartSpec), { encode: newEncode });\n}\n","import { getSpecWithEncodeType } from '../../utils/inferDataType';\nimport { MAX_SOFT_RULE_COEFFICIENT } from './constants';\nvar applyChartTypes = ['line_chart'];\nexport var xAxisLineFading = {\n    id: 'x-axis-line-fading',\n    type: 'DESIGN',\n    docs: {\n        // FIXME formal description\n        lintText: 'Adjust axis to make it prettier',\n    },\n    trigger: function (_a) {\n        var chartType = _a.chartType;\n        return applyChartTypes.includes(chartType);\n    },\n    optimizer: function (dataProps, chartSpec) {\n        var _a;\n        var specWithEncodeType = getSpecWithEncodeType(chartSpec);\n        var encode = specWithEncodeType.encode;\n        if (encode && ((_a = encode.y) === null || _a === void 0 ? void 0 : _a.type) === 'quantitative') {\n            var fieldInfo = dataProps.find(function (item) { var _a; return item.name === ((_a = encode.y) === null || _a === void 0 ? void 0 : _a.field); });\n            if (fieldInfo) {\n                var range = fieldInfo.maximum - fieldInfo.minimum;\n                if (fieldInfo.minimum && fieldInfo.maximum && range < (fieldInfo.maximum * 2) / 3) {\n                    var yScaleMin = Math.floor(fieldInfo.minimum - range / (MAX_SOFT_RULE_COEFFICIENT * 0.5));\n                    return {\n                        axis: {\n                            x: { tick: false },\n                        },\n                        scale: {\n                            y: {\n                                domainMin: yScaleMin > 0 ? yScaleMin : 0,\n                            },\n                        },\n                        clip: true,\n                    };\n                }\n            }\n        }\n        return {};\n    },\n};\n","import { __read, __spreadArray } from \"tslib\";\n// Chart rules (hard and soft)\n// table and kpi_panel not include currently\n// import { aggregationSingleRow } from './aggregation-single-row';\n// import { allCanBeTable } from './all-can-be-table';\nimport { barSeriesQty } from './bar-series-qty';\nimport { barWithoutAxisMin } from './bar-without-axis-min';\nimport { dataCheck } from './data-check';\nimport { dataFieldQty } from './data-field-qty';\nimport { diffPieSector } from './diff-pie-sector';\nimport { landscapeOrPortrait } from './landscape-or-portrait';\nimport { limitSeries } from './limit-series';\nimport { lineFieldTimeOrdinal } from './line-field-time-ordinal';\nimport { noRedundantField } from './no-redundant-field';\nimport { nominalEnumCombinatorial } from './nominal-enum-combinatorial';\nimport { purposeCheck } from './purpose-check';\nimport { seriesQtyLimit } from './series-qty-limit';\n// Design rules\nimport { xAxisLineFading } from './x-axis-line-fading';\n/** hard rules for validating chart type */\nvar HARD_RULE_ID = [\n    // table and kpi_panel not include currently\n    // 'aggregation-single-row',\n    // 'all-can-be-table',\n    'data-check',\n    'data-field-qty',\n    'no-redundant-field',\n    'purpose-check',\n];\n/** soft rules for scoring chart type */\nvar SOFT_RULE_ID = [\n    'series-qty-limit',\n    'bar-series-qty',\n    'line-field-time-ordinal',\n    'landscape-or-portrait',\n    'diff-pie-sector',\n    'nominal-enum-combinatorial',\n    'limit-series',\n];\n/**\n * @public\n */\nexport var CHART_RULE_ID = __spreadArray(__spreadArray([], __read(HARD_RULE_ID), false), __read(SOFT_RULE_ID), false);\n/**\n * @public\n */\nexport var CHART_DESIGN_RULE_ID = ['x-axis-line-fading', 'bar-without-axis-min'];\nexport var rules = {\n    /** -- hard rules -- */\n    // table and kpi_panel not include currently\n    // 'aggregation-single-row': aggregationSingleRow,\n    // 'all-can-be-table': allCanBeTable,\n    'data-check': dataCheck,\n    'data-field-qty': dataFieldQty,\n    'no-redundant-field': noRedundantField,\n    'purpose-check': purposeCheck,\n    /** -- soft rules -- */\n    'bar-series-qty': barSeriesQty,\n    'diff-pie-sector': diffPieSector,\n    'landscape-or-portrait': landscapeOrPortrait,\n    'limit-series': limitSeries,\n    'line-field-time-ordinal': lineFieldTimeOrdinal,\n    'nominal-enum-combinatorial': nominalEnumCombinatorial,\n    'series-qty-limit': seriesQtyLimit,\n    /** -- design rules -- */\n    'x-axis-line-fading': xAxisLineFading,\n    'bar-without-axis-min': barWithoutAxisMin,\n};\n","export var dataFieldQty = {\n    id: 'data-field-qty',\n    type: 'HARD',\n    docs: {\n        lintText: 'Data must have at least the min qty of the prerequisite.',\n    },\n    trigger: function () {\n        return true;\n    },\n    validator: function (args) {\n        var result = 0;\n        var dataProps = args.dataProps, chartType = args.chartType, chartWIKI = args.chartWIKI;\n        if (dataProps && chartType && chartWIKI[chartType]) {\n            result = 1;\n            var dataPres = chartWIKI[chartType].dataPres || [];\n            var minFieldQty = dataPres.map(function (e) { return e.minQty; }).reduce(function (acc, cv) { return acc + cv; });\n            if (dataProps.length) {\n                var fieldQty = dataProps.length;\n                if (fieldQty >= minFieldQty) {\n                    result = 1;\n                }\n            }\n        }\n        return result;\n    },\n};\n","export var noRedundantField = {\n    id: 'no-redundant-field',\n    type: 'HARD',\n    docs: {\n        lintText: 'No redundant field.',\n    },\n    trigger: function () {\n        return true;\n    },\n    validator: function (args) {\n        var result = 0;\n        var dataProps = args.dataProps, chartType = args.chartType, chartWIKI = args.chartWIKI;\n        if (dataProps && chartType && chartWIKI[chartType]) {\n            var dataPres = chartWIKI[chartType].dataPres || [];\n            var maxFieldQty = dataPres\n                .map(function (e) {\n                if (e.maxQty === '*') {\n                    return 99;\n                }\n                return e.maxQty;\n            })\n                .reduce(function (acc, cv) { return acc + cv; });\n            if (dataProps.length) {\n                var fieldQty = dataProps.length;\n                if (fieldQty <= maxFieldQty) {\n                    result = 1;\n                }\n            }\n        }\n        return result;\n    },\n};\n","export var purposeCheck = {\n    id: 'purpose-check',\n    type: 'HARD',\n    docs: {\n        lintText: 'Choose chart types that satisfy the purpose, if purpose is defined.',\n    },\n    trigger: function () {\n        return true;\n    },\n    validator: function (args) {\n        var result = 0;\n        var chartType = args.chartType, purpose = args.purpose, chartWIKI = args.chartWIKI;\n        // if purpose is not defined\n        if (!purpose) {\n            result = 1;\n            return result;\n        }\n        if (chartType && chartWIKI[chartType] && purpose) {\n            var purp = chartWIKI[chartType].purpose || '';\n            if (purp.includes(purpose)) {\n                result = 1;\n                return result;\n            }\n        }\n        return result;\n    },\n};\n","import { __assign } from \"tslib\";\nimport { rules } from './rules';\nexport var builtInRules = Object.keys(rules);\n/**\n *\n * @param id rule id\n * @returns the rule object or null if `id` not exist in built-in rules\n */\nexport var getChartRule = function (id) {\n    if (Object.keys(rules).includes(id)) {\n        return rules[id];\n    }\n    return null;\n};\n/**\n *\n * @param ids rule list\n * @returns rule object list\n */\nexport var getChartRules = function (ids) {\n    var chartRules = {};\n    ids.forEach(function (id) {\n        if (Object.keys(rules).includes(id)) {\n            chartRules[id] = rules[id];\n        }\n    });\n    return chartRules;\n};\n/**\n * processing ckb config and setup ckb used for advising\n * @param ruleCfg rule configuration\n * @returns rule base Record<string, RuleModule>\n */\nexport var processRuleCfg = function (ruleCfg) {\n    if (!ruleCfg) {\n        // no specific rule configuration -> return default rules\n        return getChartRules(builtInRules);\n    }\n    // step 1: remove excluded rule\n    var ruleBase = getChartRules(builtInRules);\n    if (ruleCfg.exclude) {\n        // have `exclude` definition\n        var toExclude = ruleCfg.exclude;\n        toExclude.forEach(function (id) {\n            if (Object.keys(ruleBase).includes(id)) {\n                delete ruleBase[id];\n            }\n        });\n    }\n    // step 2: remove rules that are not included\n    if (ruleCfg.include) {\n        var toInclude_1 = ruleCfg.include;\n        Object.keys(ruleBase).forEach(function (id) {\n            if (!toInclude_1.includes(id)) {\n                delete ruleBase[id];\n            }\n        });\n    }\n    // step 3: combine ruleBase and custom rules\n    var finalRuleBase = __assign(__assign({}, ruleBase), ruleCfg.custom);\n    // step 4: check options\n    var options = ruleCfg.options;\n    if (options) {\n        var ruleWithOption = Object.keys(options);\n        ruleWithOption.forEach(function (rule) {\n            if (Object.keys(finalRuleBase).includes(rule)) {\n                var ruleOption = options[rule];\n                finalRuleBase[rule] = __assign(__assign({}, finalRuleBase[rule]), { option: ruleOption });\n            }\n        });\n    }\n    return finalRuleBase;\n};\nexport * from './types';\n","export var SPECIAL_BOOLEANS = [\n    [true, false],\n    [0, 1],\n    ['true', 'false'],\n    ['Yes', 'No'],\n    ['True', 'False'],\n    ['0', '1'],\n    ['是', '否'],\n];\n// For isDateString.ts\nexport var DELIMITER = '([-_./\\\\s])';\nexport var YEAR = '(?<year>(18|19|20)\\\\d{2})';\nexport var MONTH = '(?<month>0?[1-9]|1[012])';\nexport var DAY = '(?<day>0?[1-9]|[12]\\\\d|3[01])';\nexport var WEEK = '(?<week>[0-4]\\\\d|5[0-2])';\nexport var WEEKDAY = '(?<weekday>[1-7])';\nexport var BASE_HOUR = '(0?\\\\d|1\\\\d|2[0-4])';\nexport var BASE_MINUTE = '(0?\\\\d|[012345]\\\\d)';\nexport var HOUR = \"(?<hour>\".concat(BASE_MINUTE, \")\");\nexport var MINUTE = \"(?<minute>\".concat(BASE_MINUTE, \")\");\nexport var SECOND = \"(?<second>\".concat(BASE_MINUTE, \")\");\nexport var MILLISECOND = '(?<millisecond>\\\\d{1,4})';\nexport var YEARDAY = '(?<yearDay>(([0-2]\\\\d|3[0-5])\\\\d)|36[0-6])';\nexport var OFFSET = \"(?<offset>Z|[+-]\".concat(BASE_HOUR, \"(:\").concat(BASE_MINUTE, \")?)\");\n","import { SPECIAL_BOOLEANS } from './constants';\nexport function isNil(value) {\n    return value === null || value === undefined || value === '' || Number.isNaN(value) || value === 'null';\n}\nexport function isString(value) {\n    return typeof value === 'string';\n}\nexport function isNumber(value) {\n    if (typeof value === 'number')\n        return true;\n    return false;\n}\nexport function isNumberString(value) {\n    if (isString(value)) {\n        var hasDot = false;\n        var tempValue = value;\n        if (/^[+-]/.test(tempValue)) {\n            tempValue = tempValue.slice(1);\n        }\n        for (var i = 0; i < tempValue.length; i += 1) {\n            var char = tempValue[i];\n            if (char === '.') {\n                if (hasDot === false) {\n                    hasDot = true;\n                }\n                else {\n                    return false;\n                }\n            }\n            if (char !== '.' && !/[0-9]/.test(char)) {\n                return false;\n            }\n        }\n        return tempValue.trim() !== '';\n    }\n    return false;\n}\nexport function isInteger(value) {\n    if (typeof value === 'number')\n        return Number.isInteger(value);\n    return false;\n}\nexport function isIntegerString(value) {\n    if (isString(value) && isNumberString(value))\n        return !value.includes('.');\n    return false;\n}\nexport function isFloat(value) {\n    if (typeof value === 'number')\n        return !Number.isNaN(value) && !Number.isInteger(value);\n    return false;\n}\nexport function isFloatString(value) {\n    if (isString(value) && isNumberString(value))\n        return value.includes('.');\n    return false;\n}\nexport function isDate(value) {\n    if (value && Object.getPrototypeOf(value) === Date.prototype)\n        return true;\n    return false;\n}\nexport function isBoolean(value, checkSpecialBoolean) {\n    return checkSpecialBoolean\n        ? SPECIAL_BOOLEANS.some(function (list) {\n            return value.every(function (item) { return list.includes(item); });\n        })\n        : typeof value === 'boolean';\n}\nexport function isObject(value) {\n    return value && Object.getPrototypeOf(value) === Object.prototype;\n}\nexport function isArray(value) {\n    return Array.isArray(value);\n}\nexport function isBasicType(value) {\n    return !isArray(value) && !isObject(value);\n}\n","/*\n * Check whether the string is a date.\n */\nimport { __read, __spreadArray } from \"tslib\";\nimport { DAY, DELIMITER, HOUR, MILLISECOND, MINUTE, MONTH, OFFSET, SECOND, WEEK, WEEKDAY, YEAR, YEARDAY, } from './constants';\nimport { isString } from './isType';\n/**\n * Get ISO 8601 date regular expression string array\n * Reference: https://www.cl.cam.ac.uk/~mgk25/iso-time.html\n * @param strict Require delimiter or not\n */\nexport function getIsoDatePatterns(strict) {\n    if (strict === void 0) { strict = true; }\n    return [\n        // 1991\n        \"\".concat(YEAR),\n        // 1999-W12-7\n        \"\".concat(YEAR).concat(DELIMITER).concat(strict ? '' : '?', \"W\").concat(WEEK, \"(\").concat(DELIMITER).concat(strict ? '' : '?').concat(WEEKDAY, \")?\"),\n        // 12-22-1999\n        \"\".concat(MONTH).concat(DELIMITER).concat(strict ? '' : '?').concat(DAY).concat(DELIMITER).concat(strict ? '' : '?').concat(YEAR),\n        // 1999-12-22 19991222\n        \"\".concat(YEAR).concat(DELIMITER).concat(strict ? '' : '?').concat(MONTH).concat(DELIMITER).concat(strict ? '' : '?').concat(DAY),\n        // 1999-12\n        \"\".concat(YEAR).concat(DELIMITER).concat(strict ? '' : '?').concat(MONTH),\n        // 1999-200\n        \"\".concat(YEAR).concat(DELIMITER).concat(strict ? '' : '?').concat(YEARDAY),\n    ];\n}\n/**\n * Get ISO 8601 time regular expression string array\n * Reference: https://www.cl.cam.ac.uk/~mgk25/iso-time.html\n * @param strict Require DELIMITER or not\n */\nexport function getIsoTimePatterns(strict) {\n    if (strict === void 0) { strict = true; }\n    return [\n        // 23:20:20Z 23:20:20+08:00 23:20:20-08:00\n        \"\".concat(HOUR, \":\").concat(strict ? '' : '?').concat(MINUTE, \":\").concat(strict ? '' : '?').concat(SECOND, \"([.,]\").concat(MILLISECOND, \")?\").concat(OFFSET, \"?\"),\n        // 23:20+08\n        \"\".concat(HOUR, \":\").concat(strict ? '' : '?').concat(MINUTE, \"?\").concat(OFFSET),\n    ];\n}\nvar getIsoDateAndTimeRegs = function (strictDatePattern) {\n    var isoDatePatterns = getIsoDatePatterns(strictDatePattern);\n    var isoTimePatterns = getIsoTimePatterns(strictDatePattern);\n    var isoDateAndTimePatterns = __spreadArray(__spreadArray([], __read(isoDatePatterns), false), __read(isoTimePatterns), false);\n    isoDatePatterns.forEach(function (d) {\n        isoTimePatterns.forEach(function (t) {\n            isoDateAndTimePatterns.push(\"\".concat(d, \"[T\\\\s]\").concat(t));\n        });\n    });\n    return isoDateAndTimePatterns.map(function (pattern) {\n        return new RegExp(\"^\".concat(pattern, \"$\"));\n    });\n};\nexport function isDateString(value, strictDatePattern) {\n    if (isString(value)) {\n        var isoDateAndTimeRegs = getIsoDateAndTimeRegs(strictDatePattern);\n        for (var i = 0; i < isoDateAndTimeRegs.length; i += 1) {\n            var reg = isoDateAndTimeRegs[i];\n            if (reg.test(value.trim())) {\n                return true;\n            }\n        }\n    }\n    return false;\n}\n/** parse ISO 8601 date string to standard Date type, if month and date is missing, will use new Date(01-01)\n * Reference: https://www.cl.cam.ac.uk/~mgk25/iso-time.html\n * 将日期字符串转为标准 Date 类型，如果没有月日，只有时间信息，会默认为 01-01\n */\nexport function parseIsoDateString(value, strictDatePattern) {\n    if (strictDatePattern === void 0) { strictDatePattern = false; }\n    var isoDateAndTimeRegs = getIsoDateAndTimeRegs(strictDatePattern);\n    for (var i = 0; i < isoDateAndTimeRegs.length; i += 1) {\n        var reg = isoDateAndTimeRegs[i];\n        if (reg.test(value.trim())) {\n            var matches = value.trim().match(reg);\n            if (matches.groups) {\n                var _a = matches.groups || {}, year = _a.year, month = _a.month, day = _a.day, week = _a.week, weekday = _a.weekday, hour = _a.hour, minute = _a.minute, second = _a.second, millisecond = _a.millisecond, yearDay = _a.yearDay, offset = _a.offset;\n                var yearNum = parseInt(year, 10);\n                if (yearDay) {\n                    return new Date(yearNum, 0, parseInt(yearDay, 10));\n                }\n                if (week) {\n                    var weekNum = parseInt(week, 10);\n                    var weekDayNum = weekday ? parseInt(weekday, 10) : 1;\n                    var firstDayOfYear = new Date(yearNum, 0, 1);\n                    // 给定年份的第一天是周几\n                    var firstDayOfYearDayOfWeek = firstDayOfYear.getDay() === 0 ? 7 : firstDayOfYear.getDay();\n                    // 计算第一周的第一天相对 firstDayOfYear 的偏移量\n                    var firstWeekStartDayOffset = firstDayOfYearDayOfWeek === 1 ? 1 : 1 - firstDayOfYearDayOfWeek;\n                    // 目标日期偏移量\n                    var targetDateOffset = (weekNum - 1) * 7 + (weekDayNum + firstWeekStartDayOffset);\n                    return new Date(yearNum, 0, targetDateOffset);\n                }\n                var formattedDateString = [year, month !== null && month !== void 0 ? month : '01', day !== null && day !== void 0 ? day : '01'].join('-');\n                var formattedTimeString = \"\".concat([hour !== null && hour !== void 0 ? hour : '00', minute !== null && minute !== void 0 ? minute : '00', second !== null && second !== void 0 ? second : '00'].join(':'), \".\").concat(millisecond !== null && millisecond !== void 0 ? millisecond : '000').concat(offset !== null && offset !== void 0 ? offset : '');\n                return new Date(\"\".concat(formattedDateString, \" \").concat(formattedTimeString));\n            }\n        }\n    }\n    return null;\n}\n","import { __read, __spreadArray } from \"tslib\";\nimport { isArray } from './isType';\n/**\n * Return an array with unique elements\n * @param value\n */\nexport function unique(value) {\n    return Array.from(new Set(value));\n}\n/**\n * Generate an array from 0 to number.\n * @param number\n */\nexport function range(number) {\n    return __spreadArray([], __read(Array(number).keys()), false);\n}\n/** Generate an array with all 1 elements */\nexport function nOnes(n) {\n    return Array(n).fill(1);\n}\n/** Generate an array with all 0 elements */\nexport function nZeros(n) {\n    return Array(n).fill(0);\n}\n/**\n * assert\n * @param condition\n * @param errorMessage\n */\nexport function assert(condition, errorMessage) {\n    if (!condition)\n        throw new Error(errorMessage);\n}\n/**\n * Check parent-child relationship. A child has only one parent, but a parent can have more children.\n * @param parent\n * @param child\n */\nexport function isParentChild(parent, child) {\n    if (!isArray(parent) ||\n        parent.length === 0 ||\n        !isArray(child) ||\n        child.length === 0 ||\n        parent.length !== child.length)\n        return false;\n    var record = {};\n    for (var i = 0; i < child.length; i += 1) {\n        var c = child[i];\n        var p = parent[i];\n        if (!record[c]) {\n            record[c] = p;\n        }\n        else if (record[c] !== p) {\n            return false;\n        }\n    }\n    return true;\n}\n","/**\n * Cache some statistics results to improve performance.\n */\nvar CACHES = new WeakMap();\n/**\n * Cache the value for target and key.\n * @param target - target\n * @param key - key\n * @param value - value\n */\nexport function set(target, key, value) {\n    if (!CACHES.get(target)) {\n        CACHES.set(target, new Map());\n    }\n    CACHES.get(target).set(key, value);\n    return value;\n}\n/**\n * Get the cached value for target and key.\n * @param target - target\n * @param key - key\n */\nexport function get(target, key) {\n    var cache = CACHES.get(target);\n    if (!cache)\n        return undefined;\n    return cache.get(key);\n}\n","/*\n * Statistical methods used internally by ava.\n */\nimport { __read, __spreadArray } from \"tslib\";\nimport { assert } from '../utils';\nimport * as cache from './caches';\n/**\n * Get the minimum of the array.\n * @param value - The array to process\n */\nexport function min(value) {\n    var cachedValue = cache.get(value, 'min');\n    if (cachedValue !== undefined)\n        return cachedValue;\n    return cache.set(value, 'min', Math.min.apply(Math, __spreadArray([], __read(value), false)));\n}\nfunction getMinIndex(value) {\n    var min = value[0];\n    var idx = 0;\n    for (var i = 0; i < value.length; i += 1) {\n        if (value[i] < min) {\n            idx = i;\n            min = value[i];\n        }\n    }\n    return idx;\n}\n/**\n * Get the minimum index of the array.\n * @param value - The array to process\n */\nexport function minIndex(value) {\n    var cachedValue = cache.get(value, 'minIndex');\n    if (cachedValue !== undefined)\n        return cachedValue;\n    return cache.set(value, 'minIndex', getMinIndex(value));\n}\n/**\n * Get the maximum of the array.\n * @param value - The array to process\n */\nexport function max(value) {\n    var cachedValue = cache.get(value, 'max');\n    if (cachedValue !== undefined)\n        return cachedValue;\n    return cache.set(value, 'max', Math.max.apply(Math, __spreadArray([], __read(value), false)));\n}\nfunction getMaxIndex(value) {\n    var max = value[0];\n    var idx = 0;\n    for (var i = 0; i < value.length; i += 1) {\n        if (value[i] > max) {\n            idx = i;\n            max = value[i];\n        }\n    }\n    return idx;\n}\n/**\n * Get the maximum index of the array.\n * @param value - The array to process\n */\nexport function maxIndex(value) {\n    var cachedValue = cache.get(value, 'maxIndex');\n    if (cachedValue !== undefined)\n        return cachedValue;\n    return cache.set(value, 'maxIndex', getMaxIndex(value));\n}\n/**\n * Calculate the sum of the array.\n * @param value - The array to process\n */\nexport function sum(value) {\n    var cachedValue = cache.get(value, 'sum');\n    if (cachedValue !== undefined)\n        return cachedValue;\n    return cache.set(value, 'sum', value.reduce(function (prev, current) { return current + prev; }, 0));\n}\n/**\n * Calculate the mean of the array.\n * @param value - The array to process\n\n */\nexport function mean(value) {\n    return sum(value) / value.length;\n}\n/**\n * Calculate the geometricMean of the array.\n * @param value - The array to process\n */\nexport function geometricMean(value) {\n    assert(value.some(function (item) { return item > 0; }), 'Each item in value must greater than 0.');\n    var cachedValue = cache.get(value, 'geometricMean');\n    if (cachedValue !== undefined)\n        return cachedValue;\n    return cache.set(value, 'geometricMean', Math.pow(value.reduce(function (prev, curr) { return prev * curr; }, 1), (1 / value.length)));\n}\n/**\n * Calculate the harmonic mean of the array.\n * @param value - The array to process\n */\nexport function harmonicMean(value) {\n    var base = Math.pow(2, 16);\n    var cachedValue = cache.get(value, 'harmonicMean');\n    if (cachedValue !== undefined)\n        return cachedValue;\n    return cache.set(value, 'harmonicMean', (base * value.length) / value.reduce(function (prev, curr) { return base / curr + prev; }, 0));\n}\nfunction sort(value) {\n    return value.sort(function (l, r) { return (l > r ? 1 : -1); });\n}\n/**\n * Calculate the median of the array.\n * @param value - The array to process\n */\nexport function median(value, sorted) {\n    if (sorted === void 0) { sorted = false; }\n    var length = value.length;\n    var newArray = sorted ? value : sort(value);\n    if (length % 2 === 1)\n        return newArray[(length - 1) / 2];\n    return (newArray[length / 2 - 1] + newArray[length / 2]) / 2;\n}\n/**\n * Calculate the quartile of the array.\n * @param value - The array to process\n * @param sorted - Whether it is sorted\n */\nexport function quartile(value, sorted) {\n    if (sorted === void 0) { sorted = false; }\n    assert(value.length >= 3, 'The length of value cannot be less than 3.');\n    var length = value.length;\n    var newArray = sorted ? value : sort(value);\n    var Q2 = median(newArray, true);\n    var Q1;\n    var Q3;\n    if (length % 2 === 1) {\n        Q1 = median(newArray.slice(0, (length - 1) / 2), true);\n        Q3 = median(newArray.slice((length + 1) / 2), true);\n    }\n    else {\n        Q1 = median(newArray.slice(0, length / 2), true);\n        Q3 = median(newArray.slice(length / 2), true);\n    }\n    return [Q1, Q2, Q3];\n}\n/**\n * Calculate the quantile of the array.\n * @param value - The array to process\n * @param percent - percent\n * @param sorted - Whether it is sorted\n */\nexport function quantile(value, percent, sorted) {\n    if (sorted === void 0) { sorted = false; }\n    assert(percent > 0 && percent < 100, 'The percent cannot be between (0, 100).');\n    var newArray = sorted ? value : sort(value);\n    var index = Math.ceil((value.length * percent) / 100) - 1;\n    return newArray[index];\n}\n/**\n * Calculate the variance of the array.\n * @param value - The array to process\n */\nexport function variance(value) {\n    var m = mean(value);\n    var cachedValue = cache.get(value, 'variance');\n    if (cachedValue !== undefined)\n        return cachedValue;\n    return cache.set(value, 'variance', value.reduce(function (prev, curr) { return prev + Math.pow((curr - m), 2); }, 0) / value.length);\n}\n/**\n * Calculate the standard deviation of the array.\n * @param value - The array to process\n */\nexport function standardDeviation(value) {\n    return Math.sqrt(variance(value));\n}\n/**\n * Calculate the coefficient of variance of the array.\n * @param value - The array to process\n */\nexport function coefficientOfVariance(value) {\n    var stdev = standardDeviation(value);\n    var arrayMean = mean(value);\n    return stdev / arrayMean;\n}\n/**\n * Calculate the covariance of the array.\n * @param x - variable x\n * @param y - variable y\n */\nexport function covariance(x, y) {\n    assert(x.length === y.length, 'The x and y must has same length.');\n    var exy = mean(x.map(function (item, i) { return item * y[i]; }));\n    return exy - mean(x) * mean(y);\n}\n/**\n * Calculate the pearson correlation coefficient of two value.\n * @param x - variable x\n * @param y - variable y\n */\nexport function pearson(x, y) {\n    var cov = covariance(x, y);\n    var dx = standardDeviation(x);\n    var dy = standardDeviation(y);\n    return cov / (dx * dy);\n}\n/**\n * Calculate the counts of valid value in the array.\n * @param value - The array to process\n */\nexport function valid(value) {\n    var count = 0;\n    for (var i = 0; i < value.length; i += 1) {\n        if (value[i])\n            count += 1;\n    }\n    return count;\n}\n/**\n * Calculate the counts of missing value in the array.\n * @param value - The array to process\n */\nexport function missing(value) {\n    return value.length - valid(value);\n}\n/**\n * Calculate the counts of each distinct value in the array.\n * @param value - The array to process\n */\nexport function valueMap(value) {\n    var data = {};\n    value.forEach(function (v) {\n        var vStr = \"\".concat(v);\n        if (data[vStr])\n            data[vStr] += 1;\n        else\n            data[vStr] = 1;\n    });\n    return data;\n}\n/**\n * Calculate the counts of distinct value in the array.\n * @param value - The array to process\n */\nexport function distinct(value) {\n    return Object.keys(valueMap(value)).length;\n}\n","import { max, maxIndex, mean, min, minIndex, quantile, standardDeviation, sum, variance, valueMap as statsValueMap, } from '../../statistics';\nimport { isBasicType, isBoolean, isDate, isDateString, isFloatString, isInteger, isIntegerString, isNil, isNumber, isNumberString, isString, unique, } from '../../utils';\n/**\n * Check if it is StringFieldInfo.\n */\nexport function isStringFieldInfo(x) {\n    return x.recommendation === 'string';\n}\n/**\n * Check if it is NumberFieldInfo.\n */\nexport function isNumberFieldInfo(x) {\n    return x.recommendation === 'integer' || x.recommendation === 'float';\n}\n/**\n * Check if it is DateFieldInfo.\n */\nexport function isDateFieldInfo(x) {\n    return x.recommendation === 'date';\n}\n/**\n * Checks if field is constant\n * @param info - The {@link FieldInfo} to process\n */\nexport function isConst(info) {\n    return info.distinct === 1;\n}\n/**\n * Checks if field is an ordinal.\n * @param info - Field Info\n */\nexport function isOrdinal(info) {\n    var rawData = info.rawData, recommendation = info.recommendation;\n    if (recommendation !== 'string')\n        return false;\n    if (isConst(info))\n        return false;\n    var list = rawData.filter(function (item) { return !isNil(item) && isBasicType(item); });\n    if (list.length === 0)\n        return false;\n    var start = null;\n    var end = null;\n    var startIndex = -1;\n    var endIndex = -1;\n    var through = true;\n    while (through) {\n        var through_1 = true;\n        for (var i = 0; i < list.length; i += 1) {\n            var item = list[i];\n            var char = item[startIndex + 1];\n            if (start === null || i === 0)\n                start = char;\n            if (char !== start) {\n                through_1 = false;\n                break;\n            }\n        }\n        if (!through_1)\n            break;\n        startIndex += 1;\n    }\n    through = true;\n    while (through) {\n        var through_2 = true;\n        for (var i = 0; i < list.length; i += 1) {\n            var item = list[i];\n            var char = item[item.length - 1 - (endIndex + 1)];\n            if (end === null || i === 0)\n                end = char;\n            if (char !== end) {\n                through_2 = false;\n                break;\n            }\n        }\n        if (!through_2)\n            break;\n        endIndex += 1;\n    }\n    var patterns = [/\\d+/, /(零|一|二|三|四|五|六|七|八|九|十)+/, /(一|二|三|四|五|六|日)/, /^[a-z]$/, /^[A-Z]$/];\n    if (startIndex === -1 && endIndex === -1)\n        return false;\n    var arr = list.map(function (item) {\n        return item.slice(startIndex === -1 ? 0 : startIndex + 1, endIndex === -1 ? undefined : item.length - endIndex - 1);\n    });\n    var _loop_1 = function (i) {\n        var p = patterns[i];\n        var notMatch = arr.some(function (item) { return !p.test(item); });\n        if (!notMatch)\n            return { value: true };\n    };\n    for (var i = 0; i < patterns.length; i += 1) {\n        var state_1 = _loop_1(i);\n        if (typeof state_1 === \"object\")\n            return state_1.value;\n    }\n    return false;\n}\n/**\n * Checks if field is an unique.\n * @param info - The {@link FieldInfo} to process\n */\nexport function isUnique(info) {\n    return info.distinct === info.count;\n}\n/**\n * Checks if field is discrete.\n * @remarks\n * @param info - The {@link FieldInfo} to process\n */\nexport function isDiscrete(info) {\n    return info.recommendation === 'integer';\n}\n/**\n * Checks if field is a continuous.\n * @param info - The {@link FieldInfo} to process\n */\nexport function isContinuous(info) {\n    return info.recommendation === 'float';\n}\n/**\n * Checks if field is an interval.\n * @param info - The {@link FieldInfo} to process\n */\nexport function isInterval(info) {\n    return info.recommendation === 'integer' || info.recommendation === 'float';\n}\n/**\n * Checks if field is a nominal.\n * @param info - The {@link FieldInfo} to process\n */\nexport function isNominal(info) {\n    if (info.recommendation === 'boolean')\n        return true;\n    if (info.recommendation === 'string')\n        return !isOrdinal(info);\n    return false;\n}\n/**\n * Checks if field is a time.\n * @param info - Field Info\n */\nexport function isTime(info) {\n    return info.recommendation === 'date';\n}\n/**\n * Analyze string field info.\n * @param value - data\n */\nexport function analyzeString(value) {\n    var lenArray = value.map(function (item) { return item.length; });\n    return {\n        maxLength: max(lenArray),\n        minLength: min(lenArray),\n        meanLength: mean(lenArray),\n        containsChar: value.some(function (item) { return /[A-z]/.test(item); }),\n        containsDigit: value.some(function (item) { return /[0-9]/.test(item); }),\n        containsSpace: value.some(function (item) { return /\\s/.test(item); }),\n    };\n}\n/**\n * Analyze number field info.\n * @param value - data\n */\nexport function analyzeNumber(value) {\n    return {\n        minimum: min(value),\n        maximum: max(value),\n        mean: mean(value),\n        percentile5: quantile(value, 5),\n        percentile25: quantile(value, 25),\n        percentile50: quantile(value, 50),\n        percentile75: quantile(value, 75),\n        percentile95: quantile(value, 95),\n        sum: sum(value),\n        variance: variance(value),\n        standardDeviation: standardDeviation(value),\n        zeros: value.filter(function (item) { return item === 0; }).length,\n    };\n}\n/**\n * Analyze date field info.\n * @param value - data\n */\nexport function analyzeDate(value, isInteger) {\n    if (isInteger === void 0) { isInteger = false; }\n    var list = value.map(function (item) {\n        if (isInteger) {\n            var str = \"\".concat(item);\n            if (str.length === 8)\n                return new Date(\"\".concat(str.substring(0, 4), \"/\").concat(str.substring(4, 2), \"/\").concat(str.substring(6, 2))).getTime();\n        }\n        return new Date(item).getTime();\n    });\n    return {\n        minimum: value[minIndex(list)],\n        maximum: value[maxIndex(list)],\n    };\n}\n/**\n * Determine what type a value is, may be one of [integer float date string null].\n */\nexport function analyzeType(value, strictDatePattern) {\n    if (isNil(value))\n        return 'null';\n    if (isNumber(value)) {\n        if (isInteger(value))\n            return 'integer';\n        return 'float';\n    }\n    // 优先识别日期类型，避免字符型日期被判断成字符\n    if (isDate(value) || isDateString(value, strictDatePattern))\n        return 'date';\n    if (isString(value)) {\n        if (isNumberString(value)) {\n            if (value.includes('.'))\n                return 'float';\n            return 'integer';\n        }\n    }\n    return 'string';\n}\n/**\n * Analyze field info.\n * @param value - data\n * @public\n */\nexport function analyzeField(value, strictDatePattern) {\n    var list = value.map(function (item) { return (isNil(item) ? null : item); });\n    var valueMap = statsValueMap(list);\n    var recommendation;\n    var nonNullArray = valueMap.null ? list.filter(function (item) { return item !== null; }) : list;\n    var typeArray = list.map(function (item) { return analyzeType(item, strictDatePattern); });\n    var types = Object.keys(statsValueMap(typeArray)).filter(function (item) { return item !== 'null'; });\n    // generate recommendation\n    switch (types.length) {\n        case 0:\n            recommendation = 'null';\n            break;\n        case 1:\n            recommendation = types[0];\n            // an integer field may be a date field\n            if (recommendation === 'integer') {\n                var data = list.filter(function (item) { return item !== null; });\n                if (data.map(function (num) { return \"\".concat(num); }).every(function (str) { return isDateString(str); })) {\n                    recommendation = 'date';\n                }\n            }\n            break;\n        case 2:\n            if ((types.includes('integer') || types.includes('date')) && types.includes('float')) {\n                recommendation = 'float';\n                break;\n            }\n            if (types.includes('integer') && types.includes('date')) {\n                // an integer field may be a date field\n                var data = list.filter(function (item) { return item !== null; });\n                if (data.map(function (num) { return \"\".concat(num); }).every(function (str) { return isDateString(str); })) {\n                    recommendation = 'date';\n                }\n                else {\n                    recommendation = 'integer';\n                }\n                break;\n            }\n            recommendation = 'string';\n            break;\n        default:\n            recommendation = 'string';\n    }\n    var uniqueArray = unique(nonNullArray);\n    var fieldInfo = {\n        count: value.length,\n        distinct: uniqueArray.length,\n        type: types.length <= 1 ? types[0] || 'null' : 'mixed',\n        recommendation: recommendation,\n        missing: valueMap.null || 0,\n        rawData: value,\n        valueMap: valueMap,\n    };\n    if (types.length > 1) {\n        var meta_1 = {};\n        var restNotNullArray_1 = nonNullArray;\n        types.forEach(function (item) {\n            if (item === 'date') {\n                meta_1.date = analyzeField(restNotNullArray_1.filter(function (item) { return isDateString(item); }), strictDatePattern);\n                restNotNullArray_1 = restNotNullArray_1.filter(function (item) { return !isDateString(item); });\n            }\n            else if (item === 'integer') {\n                meta_1.integer = analyzeField(restNotNullArray_1.filter(function (item) { return isIntegerString(item) && !isDateString(item); }), strictDatePattern);\n                restNotNullArray_1 = restNotNullArray_1.filter(function (item) { return !isIntegerString(item); });\n            }\n            else if (item === 'float') {\n                meta_1.float = analyzeField(restNotNullArray_1.filter(function (item) { return isFloatString(item) && !isDateString(item); }), strictDatePattern);\n                restNotNullArray_1 = restNotNullArray_1.filter(function (item) { return !isFloatString(item); });\n            }\n            else if (item === 'string') {\n                meta_1.string = analyzeField(restNotNullArray_1.filter(function (item) { return analyzeType(item, strictDatePattern) === 'string'; }));\n                restNotNullArray_1 = restNotNullArray_1.filter(function (item) { return analyzeType(item, strictDatePattern) !== 'string'; });\n            }\n        });\n        fieldInfo.meta = meta_1;\n    }\n    if (fieldInfo.distinct === 2 && fieldInfo.recommendation !== 'date') {\n        // temporarily threshold\n        if (list.length >= 100) {\n            fieldInfo.recommendation = 'boolean';\n        }\n        else if (isBoolean(uniqueArray, true)) {\n            fieldInfo.recommendation = 'boolean';\n        }\n    }\n    if (recommendation === 'string') {\n        Object.assign(fieldInfo, analyzeString(nonNullArray.map(function (item) { return \"\".concat(item); })));\n    }\n    if (recommendation === 'integer' || recommendation === 'float') {\n        Object.assign(fieldInfo, analyzeNumber(nonNullArray.map(function (item) { return item * 1; })));\n    }\n    if (recommendation === 'date') {\n        Object.assign(fieldInfo, analyzeDate(nonNullArray, fieldInfo.type === 'integer'));\n    }\n    var levelOfMeasurements = [];\n    if (isNominal(fieldInfo))\n        levelOfMeasurements.push('Nominal');\n    if (isOrdinal(fieldInfo))\n        levelOfMeasurements.push('Ordinal');\n    if (isInterval(fieldInfo))\n        levelOfMeasurements.push('Interval');\n    if (isDiscrete(fieldInfo))\n        levelOfMeasurements.push('Discrete');\n    if (isContinuous(fieldInfo))\n        levelOfMeasurements.push('Continuous');\n    if (isTime(fieldInfo))\n        levelOfMeasurements.push('Time');\n    fieldInfo.levelOfMeasurements = levelOfMeasurements;\n    return fieldInfo;\n}\n","import { isArray, isNumber, isString, range, assert, isBoolean, isNil, isDate } from '../../utils';\nexport function isAxis(value) {\n    return isNumber(value) || isString(value);\n}\n// generate indexes for 1D and 2D array\nexport function generateArrayIndex(data, extraIndex) {\n    assert(isArray(data), 'Data must be an array');\n    if (extraIndex) {\n        assert((extraIndex === null || extraIndex === void 0 ? void 0 : extraIndex.length) === data.length, \"Index length is \".concat(extraIndex === null || extraIndex === void 0 ? void 0 : extraIndex.length, \", but data size is \").concat(data.length));\n        return extraIndex;\n    }\n    return range(data.length);\n}\nexport function fillMissingValue(datum, fillValue) {\n    return !datum && JSON.stringify(fillValue) ? fillValue : datum;\n}\nexport function generateSplit(length) {\n    return Array(isNumber(length) ? length : 0)\n        .fill(' ')\n        .concat('  ')\n        .join('');\n}\nexport function stringify(value) {\n    var _a, _b, _c, _d, _e, _f;\n    return (((_f = (_e = (_d = (_c = (_b = (_a = JSON.stringify(value)) === null || _a === void 0 ? void 0 : _a.replace(/\\\\n/g, '')) === null || _b === void 0 ? void 0 : _b.replace(/\\\\/g, '')) === null || _c === void 0 ? void 0 : _c.replace(/\"\\[/g, '[')) === null || _d === void 0 ? void 0 : _d.replace(/\\]\"/g, ']')) === null || _e === void 0 ? void 0 : _e.replace(/\"\\{/g, '{')) === null || _f === void 0 ? void 0 : _f.replace(/\\}\"/g, ' }')) || 'undefined');\n}\nexport function getStringifyLength(value) {\n    var _a;\n    return (_a = stringify(value)) === null || _a === void 0 ? void 0 : _a.length;\n}\n/**\n * Convert data to specified data type.\n * @param data\n * @param type\n */\nexport function convertDataType(data, type) {\n    try {\n        if (type === 'string' && !isString(data)) {\n            return \"\".concat(data);\n        }\n        if (type === 'boolean' && !isBoolean(data)) {\n            return Boolean(data);\n        }\n        if (type === 'null' && !isNil(data)) {\n            return null;\n        }\n        if ((type === 'integer' || type === 'float') && !isNumber(data)) {\n            return +data;\n        }\n        if (type === 'date' && !isDate(data) && (isNumber(data) || isString(data))) {\n            return new Date(data);\n        }\n    }\n    catch (error) {\n        throw new Error(error);\n    }\n    return data;\n}\n","import { assert, isArray, isObject, isBasicType } from '../../utils';\nimport { generateArrayIndex, fillMissingValue, convertDataType } from './utils';\n/* Base data structure */\nvar BaseFrame = /** @class */ (function () {\n    function BaseFrame(data, extra) {\n        var _a, _b, _c, _d, _e;\n        this.axes = [[]];\n        this.data = [];\n        assert(!extra || isObject(extra), 'If extra exists, it must be an object.');\n        /* 1D: basic type */\n        if (isBasicType(data)) {\n            // generate indexes\n            if (extra === null || extra === void 0 ? void 0 : extra.indexes) {\n                this.setAxis(0, extra === null || extra === void 0 ? void 0 : extra.indexes);\n                this.data = Array(extra === null || extra === void 0 ? void 0 : extra.indexes.length).fill(convertDataType(fillMissingValue(data, extra === null || extra === void 0 ? void 0 : extra.fillValue), (_a = extra === null || extra === void 0 ? void 0 : extra.columnTypes) === null || _a === void 0 ? void 0 : _a[0]));\n            }\n            else {\n                this.data = [convertDataType(fillMissingValue(data, extra === null || extra === void 0 ? void 0 : extra.fillValue), (_b = extra === null || extra === void 0 ? void 0 : extra.columnTypes) === null || _b === void 0 ? void 0 : _b[0])];\n                this.setAxis(0, [0]);\n            }\n        }\n        else if (isArray(data)) {\n            /* 1D: array */\n            var legal = true;\n            for (var i = 0; i < data.length; i += 1) {\n                var datum = data[i];\n                // For DataFrame, as long as any datum in data is basic type, it's a 1D array\n                if (!isBasicType(datum)) {\n                    legal = false;\n                    break;\n                }\n            }\n            this.setAxis(0, generateArrayIndex(data, extra === null || extra === void 0 ? void 0 : extra.indexes));\n            if (legal) {\n                if (extra === null || extra === void 0 ? void 0 : extra.indexes) {\n                    assert(((_c = extra === null || extra === void 0 ? void 0 : extra.indexes) === null || _c === void 0 ? void 0 : _c.length) === data.length, \"Index length is \".concat(extra === null || extra === void 0 ? void 0 : extra.indexes.length, \", but data size \").concat(data.length));\n                    this.setAxis(0, extra === null || extra === void 0 ? void 0 : extra.indexes);\n                }\n                this.data = (extra === null || extra === void 0 ? void 0 : extra.fillValue) ? data.map(function (datum) { return fillMissingValue(datum, extra === null || extra === void 0 ? void 0 : extra.fillValue); }) : data;\n                if ((_d = extra === null || extra === void 0 ? void 0 : extra.columnTypes) === null || _d === void 0 ? void 0 : _d.length) {\n                    for (var i = 0; i < this.data.length; i += 1) {\n                        this.data[i] = convertDataType(this.data[i], (_e = extra === null || extra === void 0 ? void 0 : extra.columnTypes) === null || _e === void 0 ? void 0 : _e[0]);\n                    }\n                }\n            }\n        }\n    }\n    Object.defineProperty(BaseFrame.prototype, \"indexes\", {\n        get: function () {\n            return this.getAxis(0);\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(BaseFrame.prototype, \"columns\", {\n        get: function () {\n            return this.getAxis(1);\n        },\n        enumerable: false,\n        configurable: true\n    });\n    BaseFrame.prototype.getAxis = function (axis) {\n        return this.axes[axis];\n    };\n    /**\n     * Set axis. Only the 0 and 1 are currently supported.\n     * @param axis\n     * @param labels\n     */\n    BaseFrame.prototype.setAxis = function (axis, values) {\n        assert(isArray(values), 'Index or columns must be Axis array.');\n        this.axes[axis] = values;\n    };\n    return BaseFrame;\n}());\nexport default BaseFrame;\n","import { __extends, __read } from \"tslib\";\nimport { isObject, isNumber, isString, isInteger, isBasicType, isArray, range, assert } from '../../utils';\nimport { fillMissingValue, convertDataType } from './utils';\nimport BaseFrame from './baseFrame';\n/** 1D data structure */\nvar Series = /** @class */ (function (_super) {\n    __extends(Series, _super);\n    function Series(data, extra) {\n        var _this = this;\n        var _a, _b, _c, _d;\n        _this = _super.call(this, data, extra) || this;\n        assert(isObject(data) || isBasicType(data) || isArray(data), 'Data type is illegal');\n        /* 1D: object */\n        if (isObject(data)) {\n            // generate indexes\n            var indexes = Object.keys(data);\n            if (extra === null || extra === void 0 ? void 0 : extra.indexes) {\n                assert(((_a = extra === null || extra === void 0 ? void 0 : extra.indexes) === null || _a === void 0 ? void 0 : _a.length) <= indexes.length, \"Index length \".concat((_b = extra === null || extra === void 0 ? void 0 : extra.indexes) === null || _b === void 0 ? void 0 : _b.length, \" is greater than data size \").concat(indexes.length));\n                for (var i = 0; i < (extra === null || extra === void 0 ? void 0 : extra.indexes.length); i += 1) {\n                    var idx = extra === null || extra === void 0 ? void 0 : extra.indexes[i];\n                    if (indexes.includes(idx)) {\n                        _this.data.push(convertDataType(fillMissingValue(data[idx], extra === null || extra === void 0 ? void 0 : extra.fillValue), (_c = extra === null || extra === void 0 ? void 0 : extra.columnTypes) === null || _c === void 0 ? void 0 : _c[0]));\n                    }\n                }\n                _this.setAxis(0, extra === null || extra === void 0 ? void 0 : extra.indexes);\n            }\n            else {\n                _this.data = Object.values(data).map(function (datum) { var _a; return convertDataType(fillMissingValue(datum, extra === null || extra === void 0 ? void 0 : extra.fillValue), (_a = extra === null || extra === void 0 ? void 0 : extra.columnTypes) === null || _a === void 0 ? void 0 : _a[0]); });\n                _this.setAxis(0, indexes);\n            }\n        }\n        else if (isArray(data)) {\n            /* 1D: array */\n            var _e = __read(data, 1), data0 = _e[0];\n            if (!isBasicType(data0)) {\n                if (extra === null || extra === void 0 ? void 0 : extra.indexes) {\n                    assert(((_d = extra === null || extra === void 0 ? void 0 : extra.indexes) === null || _d === void 0 ? void 0 : _d.length) === data.length, \"Index length is \".concat(extra === null || extra === void 0 ? void 0 : extra.indexes.length, \", but data size \").concat(data.length));\n                    _this.setAxis(0, extra === null || extra === void 0 ? void 0 : extra.indexes);\n                }\n                _this.data = data;\n            }\n        }\n        return _this;\n    }\n    Object.defineProperty(Series.prototype, \"shape\", {\n        get: function () {\n            return [this.axes[0].length];\n        },\n        enumerable: false,\n        configurable: true\n    });\n    /**\n     * Get data by row location and column location.\n     * @param rowLoc\n     */\n    Series.prototype.get = function (rowLoc) {\n        assert(isNumber(rowLoc) ||\n            (isString(rowLoc) && !rowLoc.includes(':')) ||\n            isArray(rowLoc) ||\n            (isString(rowLoc) && rowLoc.includes(':')), 'The rowLoc is illegal');\n        // input is like 0 || 'a'\n        if (isNumber(rowLoc) || (isString(rowLoc) && !rowLoc.includes(':'))) {\n            assert(this.indexes.includes(rowLoc), 'The rowLoc is not found in the indexes.');\n            if (isNumber(rowLoc)) {\n                return this.data[rowLoc];\n            }\n            if (isString(rowLoc)) {\n                var rowIdx = this.indexes.indexOf(rowLoc);\n                return this.data[rowIdx];\n            }\n        }\n        if (isArray(rowLoc)) {\n            // input is like [0, 1, 2] || ['a', 'b', 'c']\n            var newData = [];\n            var newIndex = [];\n            for (var i = 0; i < rowLoc.length; i += 1) {\n                var loc = rowLoc[i];\n                assert(this.indexes.includes(loc), 'The rowLoc is not found in the indexes.');\n                var idxInIndex = this.indexes.indexOf(loc);\n                newData.push(this.data[idxInIndex]);\n                newIndex.push(this.indexes[idxInIndex]);\n            }\n            return new Series(newData, { indexes: newIndex });\n        }\n        if (isString(rowLoc) && rowLoc.includes(':')) {\n            // input is like '0:2' || 'a:c'\n            var rowLocArr = rowLoc.split(':');\n            assert(rowLocArr.length === 2, 'The rowLoc is not found in the indexes.');\n            var startLoc = rowLocArr[0];\n            var endLoc = rowLocArr[1];\n            if (isInteger(Number(startLoc)) && isInteger(Number(endLoc))) {\n                var startIdx = Number(startLoc);\n                var endIdx = Number(endLoc);\n                var newData = this.data.slice(startIdx, endIdx);\n                var newIndex = this.indexes.slice(startIdx, endIdx);\n                return new Series(newData, { indexes: newIndex });\n            }\n            if (isString(startLoc) && isString(endLoc)) {\n                var startIdx = this.indexes.indexOf(startLoc);\n                var endIdx = this.indexes.indexOf(endLoc);\n                var newData = this.data.slice(startIdx, endIdx);\n                var newIndex = this.indexes.slice(startIdx, endIdx);\n                return new Series(newData, { indexes: newIndex });\n            }\n        }\n        throw new Error('The rowLoc is illegal');\n    };\n    /**\n     * Get data by row location and column location using integer index.\n     * @param rowLoc\n     */\n    Series.prototype.getByIndex = function (rowLoc) {\n        assert(isInteger(rowLoc) || isArray(rowLoc) || (isString(rowLoc) && rowLoc.includes(':')), 'The rowLoc is illegal');\n        // input is like 1\n        if (isInteger(rowLoc)) {\n            assert(range(this.indexes.length).includes(rowLoc), 'The rowLoc is not found in the indexes.');\n            if (range(this.indexes.length).includes(rowLoc)) {\n                return this.data[rowLoc];\n            }\n        }\n        if (isArray(rowLoc)) {\n            // input is like [0, 1, 2]\n            var newData = [];\n            var newIndex = [];\n            for (var i = 0; i < rowLoc.length; i += 1) {\n                var idx = rowLoc[i];\n                assert(range(this.indexes.length).includes(idx), 'The rowLoc is not found in the indexes.');\n                newData.push(this.data[idx]);\n                newIndex.push(this.indexes[idx]);\n            }\n            return new Series(newData, { indexes: newIndex });\n        }\n        if (isString(rowLoc) && rowLoc.includes(':')) {\n            // input is like '0:2'\n            var rowLocArr = rowLoc.split(':');\n            if (rowLocArr.length === 2) {\n                var startIdx = Number(rowLocArr[0]);\n                var endIdx = Number(rowLocArr[1]);\n                assert(isInteger(startIdx) && isInteger(endIdx), 'The rowLoc is not found in the indexes.');\n                var newData = this.data.slice(startIdx, endIdx);\n                var newIndex = this.indexes.slice(startIdx, endIdx);\n                return new Series(newData, { indexes: newIndex });\n            }\n        }\n        throw new Error('The rowLoc is illegal');\n    };\n    return Series;\n}(BaseFrame));\nexport default Series;\n","import { __assign, __extends, __read, __spreadArray } from \"tslib\";\nimport { analyzeField } from '../../analysis';\nimport { isArray, isObject, isString, isInteger, isNumber, isBasicType, range, assert } from '../../utils';\nimport BaseFrame from './baseFrame';\nimport Series from './series';\nimport { generateArrayIndex, isAxis, fillMissingValue, generateSplit, stringify, getStringifyLength, convertDataType, } from './utils';\n/* 2D data structure */\nvar DataFrame = /** @class */ (function (_super) {\n    __extends(DataFrame, _super);\n    function DataFrame(data, extra) {\n        var _this = this;\n        var _a, _b, _c, _d, _e, _f, _g, _h;\n        _this = _super.call(this, data, extra) || this;\n        _this.colData = [];\n        _this.extra = extra || {};\n        assert(isBasicType(data) || isArray(data) || isObject(data), 'Data type is illegal');\n        if (isBasicType(data)) {\n            if (extra === null || extra === void 0 ? void 0 : extra.columnTypes) {\n                for (var i = 0; i < ((_a = extra === null || extra === void 0 ? void 0 : extra.indexes) === null || _a === void 0 ? void 0 : _a.length); i += 1) {\n                    _this.data[i] = convertDataType(_this.data[i], (_b = extra === null || extra === void 0 ? void 0 : extra.columnTypes) === null || _b === void 0 ? void 0 : _b[i]);\n                }\n            }\n            if ((extra === null || extra === void 0 ? void 0 : extra.indexes) && (extra === null || extra === void 0 ? void 0 : extra.columns)) {\n                _this.setAxis(1, extra === null || extra === void 0 ? void 0 : extra.columns);\n                _this.data = Array(extra === null || extra === void 0 ? void 0 : extra.columns.length).fill(_this.data);\n            }\n            else if (!(extra === null || extra === void 0 ? void 0 : extra.columns)) {\n                _this.setAxis(1, [0]);\n                _this.data = [_this.data];\n            }\n            else if (!(extra === null || extra === void 0 ? void 0 : extra.indexes)) {\n                assert(isArray(extra === null || extra === void 0 ? void 0 : extra.columns), 'Index or columns must be Axis array.');\n                assert((extra === null || extra === void 0 ? void 0 : extra.columns.length) === 1, 'When the length of extra.columns is larger than 1, extra.indexes is required.');\n            }\n            _this.colData = _this.data;\n        }\n        if (isArray(data)) {\n            var _j = __read(data, 1), data0 = _j[0];\n            /* 1D: basic type | array */\n            if (_this.data.length > 0) {\n                _this.generateColumns([0], extra === null || extra === void 0 ? void 0 : extra.columns);\n                _this.colData = [_this.data];\n                _this.data = _this.data.map(function (datum) { return [datum]; });\n            }\n            /*\n             * 2D: array\n             * Base frame has made the first round of judgment. Now, if data0 is array, all the datum is array.\n             */\n            if (isArray(data0)) {\n                var columns = range(data0.length);\n                _this.generateDataAndColDataFromArray(false, data, columns, extra === null || extra === void 0 ? void 0 : extra.fillValue, extra === null || extra === void 0 ? void 0 : extra.columnTypes);\n                _this.generateColumns(columns, extra === null || extra === void 0 ? void 0 : extra.columns);\n            }\n            /* 2D: object array */\n            if (isObject(data0)) {\n                var keys = [];\n                for (var i = 0; i < data.length; i += 1) {\n                    var datum = data[i];\n                    keys.push.apply(keys, __spreadArray([], __read(Object.keys(datum)), false));\n                }\n                var columns = __spreadArray([], __read(new Set(keys)), false);\n                for (var i = 0; i < data.length; i += 1) {\n                    var datum = data[i];\n                    assert(isObject(datum), 'The data is not standard object array.');\n                    // slice\n                    if (extra === null || extra === void 0 ? void 0 : extra.columns) {\n                        _this.data[i] = [];\n                        for (var j = 0; j < (extra === null || extra === void 0 ? void 0 : extra.columns.length); j += 1) {\n                            var column = extra === null || extra === void 0 ? void 0 : extra.columns[j];\n                            assert(columns.includes(column), \"There is no column \".concat(column, \" in data.\"));\n                            var newDatum = convertDataType(fillMissingValue(datum[column], extra.fillValue), (_c = extra === null || extra === void 0 ? void 0 : extra.columnTypes) === null || _c === void 0 ? void 0 : _c[j]);\n                            _this.data[i].push(newDatum);\n                            if (_this.colData[j]) {\n                                _this.colData[j].push(newDatum);\n                            }\n                            else {\n                                _this.colData[j] = [newDatum];\n                            }\n                        }\n                        _this.setAxis(1, extra === null || extra === void 0 ? void 0 : extra.columns);\n                    }\n                }\n                if (!(extra === null || extra === void 0 ? void 0 : extra.columns)) {\n                    _this.generateDataAndColDataFromArray(true, data, columns, extra === null || extra === void 0 ? void 0 : extra.fillValue, extra === null || extra === void 0 ? void 0 : extra.columnTypes);\n                    _this.setAxis(1, columns);\n                }\n            }\n        }\n        if (isObject(data)) {\n            var dataValues = Object.values(data);\n            var _k = __read(dataValues, 1), data0 = _k[0];\n            /* 1D: object */\n            if (isBasicType(data0)) {\n                var columns = Object.keys(data);\n                if (extra === null || extra === void 0 ? void 0 : extra.indexes) {\n                    assert(isArray(extra.indexes), 'extra.indexes must be an array.');\n                    assert(extra.indexes.length === 1, 'The length of extra.indexes must be 1.');\n                    _this.setAxis(0, extra.indexes);\n                }\n                else {\n                    _this.setAxis(0, [0]);\n                }\n                if (extra === null || extra === void 0 ? void 0 : extra.columns) {\n                    for (var i = 0; i < (extra === null || extra === void 0 ? void 0 : extra.columns.length); i += 1) {\n                        var column = extra === null || extra === void 0 ? void 0 : extra.columns[i];\n                        assert(columns.includes(column), \"There is no column \".concat(column, \" in data.\"));\n                        _this.data.push(convertDataType(fillMissingValue(data[column], extra === null || extra === void 0 ? void 0 : extra.fillValue), (_d = extra === null || extra === void 0 ? void 0 : extra.columnTypes) === null || _d === void 0 ? void 0 : _d[i]));\n                    }\n                    _this.colData = _this.data.map(function (datum) { return [datum]; });\n                    _this.data = [_this.data];\n                    _this.setAxis(1, extra === null || extra === void 0 ? void 0 : extra.columns);\n                }\n                else {\n                    for (var i = 0; i < columns.length; i += 1) {\n                        var datum = data[columns[i]];\n                        assert(isBasicType(datum), 'Data type is illegal');\n                        _this.data.push(convertDataType(fillMissingValue(datum, extra === null || extra === void 0 ? void 0 : extra.fillValue), (_e = extra === null || extra === void 0 ? void 0 : extra.columnTypes) === null || _e === void 0 ? void 0 : _e[i]));\n                    }\n                    _this.data = [_this.data];\n                    _this.colData = dataValues.map(function (datum) {\n                        var _a;\n                        return [\n                            convertDataType(fillMissingValue(datum, extra === null || extra === void 0 ? void 0 : extra.fillValue), (_a = extra === null || extra === void 0 ? void 0 : extra.columnTypes) === null || _a === void 0 ? void 0 : _a[0]),\n                        ];\n                    });\n                    _this.generateColumns(columns);\n                }\n            }\n            /* 2D: array object */\n            if (isArray(data0)) {\n                _this.setAxis(0, generateArrayIndex(data0, extra === null || extra === void 0 ? void 0 : extra.indexes));\n                var columns = Object.keys(data);\n                _this.generateColumns(columns, extra === null || extra === void 0 ? void 0 : extra.columns);\n                var _loop_1 = function (i) {\n                    var datum = data[this_1.columns[i]];\n                    assert(isArray(datum), 'Data type is illegal');\n                    // Fill the missing values\n                    if (datum.length < this_1.indexes.length) {\n                        var newDatum = datum.concat(Array(this_1.indexes.length - datum.length).fill(convertDataType(fillMissingValue(undefined, extra === null || extra === void 0 ? void 0 : extra.fillValue), (_f = extra === null || extra === void 0 ? void 0 : extra.columnTypes) === null || _f === void 0 ? void 0 : _f[i])));\n                        this_1.colData.push(newDatum);\n                    }\n                    else {\n                        this_1.colData.push(datum.map(function (d) { var _a; return convertDataType(fillMissingValue(d, extra === null || extra === void 0 ? void 0 : extra.fillValue), (_a = extra === null || extra === void 0 ? void 0 : extra.columnTypes) === null || _a === void 0 ? void 0 : _a[i]); }));\n                    }\n                    for (var j = 0; j < this_1.indexes.length; j += 1) {\n                        if (this_1.data[j]) {\n                            this_1.data[j].push(convertDataType(fillMissingValue(datum[j], extra === null || extra === void 0 ? void 0 : extra.fillValue), (_g = extra === null || extra === void 0 ? void 0 : extra.columnTypes) === null || _g === void 0 ? void 0 : _g[i]));\n                        }\n                        else {\n                            this_1.data[j] = [convertDataType(fillMissingValue(datum[j], extra === null || extra === void 0 ? void 0 : extra.fillValue), (_h = extra === null || extra === void 0 ? void 0 : extra.columnTypes) === null || _h === void 0 ? void 0 : _h[i])];\n                        }\n                    }\n                };\n                var this_1 = this;\n                for (var i = 0; i < _this.columns.length; i += 1) {\n                    _loop_1(i);\n                }\n            }\n        }\n        return _this;\n    }\n    /**\n     * Generate columns.\n     * @param columns\n     * @param extra\n     */\n    DataFrame.prototype.generateColumns = function (columns, extraColumns) {\n        if (extraColumns) {\n            assert((extraColumns === null || extraColumns === void 0 ? void 0 : extraColumns.length) === columns.length, \"Columns length is \".concat(extraColumns === null || extraColumns === void 0 ? void 0 : extraColumns.length, \", but data column is \").concat(columns.length));\n            this.setAxis(1, extraColumns);\n        }\n        else {\n            this.setAxis(1, columns);\n        }\n    };\n    /**\n     * Generate this.data and this.colData.\n     * @param isObj\n     * @param data\n     * @param columns\n     */\n    DataFrame.prototype.generateDataAndColDataFromArray = function (isObj, data, columns, fillValue, columnTypes) {\n        for (var i = 0; i < data.length; i += 1) {\n            var datum = data[i];\n            assert(isObj ? isObject(datum) : isArray(datum), 'Data type is illegal');\n            /**\n             * If data is object and no extra.columns,\n             * Else, data is array.\n             */\n            if (isObj && JSON.stringify(Object.keys(datum)) === JSON.stringify(columns)) {\n                this.data.push(Object.values(datum).map(function (d, j) { return convertDataType(fillMissingValue(d, fillValue), columnTypes === null || columnTypes === void 0 ? void 0 : columnTypes[j]); }));\n            }\n            else if (!isObj) {\n                this.data.push(datum.map(function (d, j) { return convertDataType(fillMissingValue(d, fillValue), columnTypes === null || columnTypes === void 0 ? void 0 : columnTypes[j]); }));\n            }\n            for (var j = 0; j < columns.length; j += 1) {\n                var column = columns[j];\n                var newDatum = convertDataType(fillMissingValue(datum[column], fillValue), columnTypes === null || columnTypes === void 0 ? void 0 : columnTypes[j]);\n                /**\n                 * Data is object and extra.columns is set.\n                 */\n                if (isObj && JSON.stringify(Object.keys(datum)) !== JSON.stringify(columns)) {\n                    if (this.data[i]) {\n                        this.data[i].push(newDatum);\n                    }\n                    else {\n                        this.data[i] = [newDatum];\n                    }\n                }\n                if (this.colData[j]) {\n                    this.colData[j].push(newDatum);\n                }\n                else {\n                    this.colData[j] = [newDatum];\n                }\n            }\n        }\n    };\n    Object.defineProperty(DataFrame.prototype, \"shape\", {\n        get: function () {\n            return [this.axes[0].length, this.axes[1].length];\n        },\n        enumerable: false,\n        configurable: true\n    });\n    DataFrame.prototype.get = function (rowLoc, colLoc) {\n        assert(isAxis(rowLoc) || isArray(rowLoc), 'The rowLoc is illegal');\n        /* colLoc does not exist */\n        if (colLoc === undefined) {\n            // input is like 1\n            if (isNumber(rowLoc)) {\n                assert(this.indexes.includes(rowLoc), 'The rowLoc is not found in the indexes.');\n                if (this.indexes.includes(rowLoc)) {\n                    var newData_1 = this.data[rowLoc];\n                    var newIndex_1 = this.columns;\n                    return new Series(newData_1, { indexes: newIndex_1 });\n                }\n            }\n            else if (isArray(rowLoc)) {\n                // input is like [0, 1, 2]\n                var newData_2 = [];\n                var newIndex_2 = [];\n                for (var i = 0; i < rowLoc.length; i += 1) {\n                    var loc = rowLoc[i];\n                    assert(this.indexes.includes(loc), 'The rowLoc is not found in the indexes.');\n                    var idxInIndex = this.indexes.indexOf(loc);\n                    newData_2.push(this.data[idxInIndex]);\n                    newIndex_2.push(this.indexes[idxInIndex]);\n                }\n                return new DataFrame(newData_2, { indexes: newIndex_2, columns: this.columns });\n            }\n            else if (isString(rowLoc) && rowLoc.includes(':')) {\n                // input is like '0:2'\n                var rowLocArr = rowLoc.split(':');\n                if (rowLocArr.length === 2) {\n                    var startRowIdx_1 = Number(rowLocArr[0]);\n                    var endRowIdx_1 = Number(rowLocArr[1]);\n                    assert(isNumber(startRowIdx_1) && isNumber(endRowIdx_1), 'The rowLoc is not found in the indexes.');\n                    var newData_3 = this.data.slice(startRowIdx_1, endRowIdx_1);\n                    var newIndex_3 = this.indexes.slice(startRowIdx_1, endRowIdx_1);\n                    return new DataFrame(newData_3, { indexes: newIndex_3, columns: this.columns });\n                }\n            }\n        }\n        /* colLoc exists */\n        var startRowIdx = -1;\n        var endRowIdx = -1;\n        var rowIdxes = [];\n        var startColIdx = -1;\n        var endColIdx = -1;\n        var colIdxes = [];\n        // rowLoc is Axis\n        if (isAxis(rowLoc) && this.indexes.includes(rowLoc)) {\n            startRowIdx = this.indexes.indexOf(rowLoc);\n            endRowIdx = startRowIdx + 1;\n        }\n        // rowLoc is Axis[]\n        if (isArray(rowLoc)) {\n            for (var i = 0; i < rowLoc.length; i += 1) {\n                var rowIdx = rowLoc[i];\n                assert(this.indexes.includes(rowIdx), 'The rowLoc is not found in the indexes.');\n                rowIdxes.push(this.indexes.indexOf(rowIdx));\n            }\n        }\n        // rowLoc is slice\n        if (isString(rowLoc) && rowLoc.includes(':')) {\n            var rowLocArr = rowLoc.split(':');\n            if (rowLocArr.length === 2) {\n                var start = Number(rowLocArr[0]);\n                var end = Number(rowLocArr[1]);\n                assert(isNumber(start) && isNumber(end), 'The rowLoc is not found in the indexes.');\n                startRowIdx = start;\n                endRowIdx = end;\n            }\n        }\n        // colLoc is Axis\n        if (isAxis(colLoc) && this.columns.includes(colLoc)) {\n            startColIdx = this.columns.indexOf(colLoc);\n            endColIdx = startColIdx + 1;\n        }\n        // colLoc is Axis[]\n        if (isArray(colLoc)) {\n            for (var i = 0; i < colLoc.length; i += 1) {\n                var colIdx = colLoc[i];\n                assert(this.columns.includes(colIdx), 'The colLoc is not found in the columns.');\n                colIdxes.push(this.columns.indexOf(colIdx));\n            }\n        }\n        // colLoc is slice\n        if (isString(colLoc) && colLoc.includes(':')) {\n            var colLocArr = colLoc.split(':');\n            if (colLocArr.length === 2) {\n                var start = this.columns.indexOf(colLocArr[0]);\n                var end = this.columns.indexOf(colLocArr[1]);\n                assert(isNumber(start) && isNumber(end), 'The colLoc is not found in the columns.');\n                startColIdx = start;\n                endColIdx = end;\n            }\n        }\n        // build new data and indexes\n        var newData = [];\n        var newIndex = [];\n        assert((startRowIdx >= 0 && endRowIdx >= 0) || rowIdxes.length > 0, 'The rowLoc is not found in the indexes.');\n        if (startRowIdx >= 0 && endRowIdx >= 0) {\n            newData = this.data.slice(startRowIdx, endRowIdx);\n            newIndex = this.indexes.slice(startRowIdx, endRowIdx);\n        }\n        if (rowIdxes.length > 0) {\n            for (var i = 0; i < rowIdxes.length; i += 1) {\n                var rowIdx = rowIdxes[i];\n                newData.push(this.data[rowIdx]);\n                newIndex.push(this.indexes[rowIdx]);\n            }\n        }\n        // build new columns\n        if (startColIdx >= 0 && endColIdx >= 0) {\n            for (var i = 0; i < newData.length; i += 1) {\n                newData[i] = newData[i].slice(startColIdx, endColIdx);\n            }\n            var newColumns = this.columns.slice(startColIdx, endColIdx);\n            return new DataFrame(newData, { indexes: newIndex, columns: newColumns });\n        }\n        if (colIdxes.length > 0) {\n            var newColumns = [];\n            var tempData = newData.slice();\n            for (var i = 0; i < newData.length; i += 1) {\n                newData[i] = [];\n                newColumns = [];\n                for (var j = 0; j < colIdxes.length; j += 1) {\n                    var colIdx = colIdxes[j];\n                    newData[i].push(tempData[i][colIdx]);\n                    newColumns.push(this.columns[colIdx]);\n                }\n            }\n            return new DataFrame(newData, { indexes: newIndex, columns: newColumns });\n        }\n        throw new Error('The colLoc is illegal.');\n    };\n    DataFrame.prototype.getByIndex = function (rowLoc, colLoc) {\n        assert(isInteger(rowLoc) || isArray(rowLoc) || isString(rowLoc), 'The rowLoc is illegal');\n        /* colLoc does not exist */\n        if (colLoc === undefined) {\n            // input is like 1\n            if (isInteger(rowLoc)) {\n                assert(range(this.indexes.length).includes(rowLoc), 'The rowLoc is not found in the indexes.');\n                var newData_4 = this.data[rowLoc];\n                var newIndex_4 = this.columns;\n                return new Series(newData_4, { indexes: newIndex_4 });\n            }\n            if (isArray(rowLoc)) {\n                // input is like [0, 1, 2]\n                var newData_5 = [];\n                var newIndex_5 = [];\n                for (var i = 0; i < rowLoc.length; i += 1) {\n                    var idx = rowLoc[i];\n                    assert(range(this.indexes.length).includes(idx), 'The rowLoc is not found in the indexes.');\n                    newData_5.push(this.data[idx]);\n                    newIndex_5.push(this.indexes[idx]);\n                }\n                return new DataFrame(newData_5, { indexes: newIndex_5, columns: this.columns });\n            }\n            if (isString(rowLoc) && rowLoc.includes(':')) {\n                // input is like '0:2'\n                var rowLocArr = rowLoc.split(':');\n                if (rowLocArr.length === 2) {\n                    var startRowIdx_2 = Number(rowLocArr[0]);\n                    var endRowIdx_2 = Number(rowLocArr[1]);\n                    assert(isInteger(startRowIdx_2) && isInteger(endRowIdx_2), 'The rowLoc is not found in the indexes.');\n                    var newData_6 = this.data.slice(startRowIdx_2, endRowIdx_2);\n                    var newIndex_6 = this.indexes.slice(startRowIdx_2, endRowIdx_2);\n                    return new DataFrame(newData_6, { indexes: newIndex_6, columns: this.columns });\n                }\n            }\n        }\n        /* colLoc exists */\n        var startRowIdx = -1;\n        var endRowIdx = -1;\n        var rowIdxes = [];\n        var startColIdx = -1;\n        var endColIdx = -1;\n        var colIdxes = [];\n        // rowLoc is int\n        if (isInteger(rowLoc)) {\n            assert(range(this.indexes.length).includes(rowLoc), 'The rowLoc is not found in the indexes.');\n            startRowIdx = rowLoc;\n            endRowIdx = rowLoc + 1;\n        }\n        // rowLoc is int[]\n        if (isArray(rowLoc)) {\n            for (var i = 0; i < rowLoc.length; i += 1) {\n                var rowIdx = rowLoc[i];\n                assert(range(this.indexes.length).includes(rowIdx), 'The rowLoc is not found in the indexes.');\n                rowIdxes.push(rowIdx);\n            }\n        }\n        // rowLoc is slice\n        if (isString(rowLoc) && rowLoc.includes(':')) {\n            var rowLocArr = rowLoc.split(':');\n            if (rowLocArr.length === 2) {\n                var start = Number(rowLocArr[0]);\n                var end = Number(rowLocArr[1]);\n                assert(isInteger(start) && isInteger(end), 'The rowLoc is not found in the indexes.');\n                startRowIdx = start;\n                endRowIdx = end;\n            }\n        }\n        assert((startRowIdx >= 0 && endRowIdx >= 0) || rowIdxes.length > 0, 'The colLoc is illegal');\n        // colLoc is int\n        if (isInteger(colLoc) && range(this.columns.length).includes(colLoc)) {\n            startColIdx = colLoc;\n            endColIdx = colLoc + 1;\n        }\n        // colLoc is int[]\n        if (isArray(colLoc)) {\n            for (var i = 0; i < colLoc.length; i += 1) {\n                var colIdx = colLoc[i];\n                assert(range(this.columns.length).includes(colIdx), 'The colLoc is not found in the columns index.');\n                colIdxes.push(colIdx);\n            }\n        }\n        // colLoc is slice\n        if (isString(colLoc) && colLoc.includes(':')) {\n            var colLocArr = colLoc.split(':');\n            if (colLocArr.length === 2) {\n                var start = Number(colLocArr[0]);\n                var end = Number(colLocArr[1]);\n                assert(isInteger(start) && isInteger(end), 'The colLoc is not found in the columns index.');\n                startColIdx = start;\n                endColIdx = end;\n            }\n        }\n        assert((startRowIdx >= 0 && endRowIdx >= 0) || rowIdxes.length > 0, 'The rowLoc is not found in the indexes.');\n        // build new data and indexes\n        var newData = [];\n        var newIndex = [];\n        if (startRowIdx >= 0 && endRowIdx >= 0) {\n            newData = this.data.slice(startRowIdx, endRowIdx);\n            newIndex = this.indexes.slice(startRowIdx, endRowIdx);\n        }\n        else if (rowIdxes.length > 0) {\n            for (var i = 0; i < rowIdxes.length; i += 1) {\n                var rowIdx = rowIdxes[i];\n                newData.push(this.data[rowIdx]);\n                newIndex.push(this.indexes[rowIdx]);\n            }\n        }\n        assert((startColIdx >= 0 && endColIdx >= 0) || colIdxes.length > 0, 'The colLoc is not found in the columns index.');\n        // build new columns\n        if (startColIdx >= 0 && endColIdx >= 0) {\n            for (var i = 0; i < newData.length; i += 1) {\n                newData[i] = newData[i].slice(startColIdx, endColIdx);\n            }\n            var newColumns = this.columns.slice(startColIdx, endColIdx);\n            return new DataFrame(newData, { indexes: newIndex, columns: newColumns });\n        }\n        if (colIdxes.length > 0) {\n            var newColumns = [];\n            var tempData = newData.slice();\n            for (var i = 0; i < newData.length; i += 1) {\n                newData[i] = [];\n                newColumns = [];\n                for (var j = 0; j < colIdxes.length; j += 1) {\n                    var colIdx = colIdxes[j];\n                    newData[i].push(tempData[i][colIdx]);\n                    newColumns.push(this.columns[colIdx]);\n                }\n            }\n            return new DataFrame(newData, { indexes: newIndex, columns: newColumns });\n        }\n        throw new Error('The colLoc is illegal.');\n    };\n    /**\n     * Get data by column.\n     * @param col\n     */\n    DataFrame.prototype.getByColumn = function (col) {\n        assert(this.columns.includes(col), 'The col is illegal');\n        var colIdx = this.columns.indexOf(col);\n        return new Series(this.colData[colIdx], {\n            indexes: this.indexes,\n        });\n    };\n    /**\n     * Get statistics.\n     */\n    DataFrame.prototype.info = function () {\n        var _a;\n        var fields = [];\n        for (var i = 0; i < ((_a = this.columns) === null || _a === void 0 ? void 0 : _a.length); i += 1) {\n            var column = this.columns[i];\n            fields.push(__assign(__assign({}, analyzeField(this.colData[i], this.extra.strictDatePattern)), { name: String(column) }));\n        }\n        return fields;\n    };\n    /**\n     * Get tabular data string.\n     */\n    DataFrame.prototype.toString = function () {\n        var _this = this;\n        // Calculate the longest field length for each column, add two spaces to get the split\n        var maxLengths = Array(this.columns.length + 1).fill(0);\n        for (var i = 0; i < this.indexes.length; i += 1) {\n            var len = getStringifyLength(this.indexes[i]);\n            if (len > maxLengths[0])\n                maxLengths[0] = len;\n        }\n        for (var i = 0; i < this.columns.length; i += 1) {\n            // Contain escape characters' length\n            var len = getStringifyLength(this.columns[i]);\n            if (len > maxLengths[i + 1])\n                maxLengths[i + 1] = len;\n        }\n        for (var i = 0; i < this.colData.length; i += 1) {\n            for (var j = 0; j < this.colData[i].length; j += 1) {\n                var len = getStringifyLength(this.colData[i][j]);\n                if (len > maxLengths[i + 1])\n                    maxLengths[i + 1] = len;\n            }\n        }\n        return \"\".concat(generateSplit(maxLengths[0])).concat(this.columns\n            .map(function (col, i) {\n            // JSON.stringify will add \"\" to string, it's two extra characters.\n            return \"\".concat(col).concat(i !== _this.columns.length ? generateSplit(maxLengths[i + 1] - getStringifyLength(col) + 2) : '');\n        })\n            .join(''), \"\\n\").concat(this.indexes\n            .map(function (idx, idxIndex) {\n            var _a;\n            return \"\".concat(idx).concat(generateSplit(maxLengths[0] - getStringifyLength(idx))).concat((_a = _this.data[idxIndex]) === null || _a === void 0 ? void 0 : _a.map(function (datum, i) {\n                return \"\".concat(stringify(datum)).concat(i !== _this.columns.length ? generateSplit(maxLengths[i + 1] - getStringifyLength(datum)) : '');\n            }).join('')).concat(idxIndex !== _this.indexes.length ? '\\n' : '');\n        })\n            .join(''));\n    };\n    return DataFrame;\n}(BaseFrame));\nexport default DataFrame;\n","export const COLOR_BLINDNESS_SIMULATION_TYPES = [\n    'normal',\n    'protanomaly',\n    'deuteranomaly',\n    'tritanomaly',\n    'protanopia',\n    'deuteranopia',\n    'tritanopia',\n    'achromatomaly',\n    'achromatopsia',\n];\n// color optimization configuration\nexport const TENDENCIES = ['tint', 'shade'];\nexport const COLOR_DIFFERENCE_MEASURES = ['euclidean', 'CIEDE2000', 'contrastRatio'];\nexport const COLOR_AESTHETIC_MEASURES = ['pairPreference', 'harmony'];\nexport const WHITE = {\n    model: 'rgb',\n    value: {\n        r: 255,\n        g: 255,\n        b: 255,\n    },\n};\n// Separable blend modes https://www.w3.org/TR/compositing/#blendingseparable\nexport const SEPARABLE_BLEND_MODES = [\n    'normal',\n    'darken',\n    'multiply',\n    'colorBurn',\n    'linearBurn',\n    'lighten',\n    'screen',\n    'colorDodge',\n    'linearDodge',\n    'overlay',\n    'softLight',\n    'hardLight',\n    'vividLight',\n    'linearLight',\n    'pinLight',\n    'difference',\n    'exclusion',\n];\n// Non-separable blend modes https://www.w3.org/TR/compositing/#blendingnonseparable\nexport const NON_SEPARABLE_BLEND_MODES = ['hue', 'saturation', 'color', 'luminosity'];\nexport const BLEND_MODES = [...SEPARABLE_BLEND_MODES, ...NON_SEPARABLE_BLEND_MODES];\n//# sourceMappingURL=constant.js.map","import { min, max } from './index.js';\n\nexport default (x, low = 0, high = 1) => {\n    return min(max(low, x), high);\n};\n","import limit from './limit.js';\n\nexport default (rgb) => {\n    rgb._clipped = false;\n    rgb._unclipped = rgb.slice(0);\n    for (let i = 0; i <= 3; i++) {\n        if (i < 3) {\n            if (rgb[i] < 0 || rgb[i] > 255) rgb._clipped = true;\n            rgb[i] = limit(rgb[i], 0, 255);\n        } else if (i === 3) {\n            rgb[i] = limit(rgb[i], 0, 1);\n        }\n    }\n    return rgb;\n};\n","// ported from jQuery's $.type\nconst classToType = {};\nfor (let name of [\n    'Boolean',\n    'Number',\n    'String',\n    'Function',\n    'Array',\n    'Date',\n    'RegExp',\n    'Undefined',\n    'Null'\n]) {\n    classToType[`[object ${name}]`] = name.toLowerCase();\n}\nexport default function (obj) {\n    return classToType[Object.prototype.toString.call(obj)] || 'object';\n}\n","import type from './type.js';\n\nexport default (args, keyOrder = null) => {\n    // if called with more than 3 arguments, we return the arguments\n    if (args.length >= 3) return Array.prototype.slice.call(args);\n    // with less than 3 args we check if first arg is object\n    // and use the keyOrder string to extract and sort properties\n    if (type(args[0]) == 'object' && keyOrder) {\n        return keyOrder\n            .split('')\n            .filter((k) => args[0][k] !== undefined)\n            .map((k) => args[0][k]);\n    }\n    // otherwise we just return the first argument\n    // (which we suppose is an array of args)\n    return args[0];\n};\n","import type from './type.js';\n\nexport default (args) => {\n    if (args.length < 2) return null;\n    const l = args.length - 1;\n    if (type(args[l]) == 'string') return args[l].toLowerCase();\n    return null;\n};\n","const { PI, min, max } = Math;\n\nexport { default as clip_rgb } from './clip_rgb.js';\nexport { default as limit } from './limit.js';\nexport { default as type } from './type.js';\nexport { default as unpack } from './unpack.js';\nexport { default as last } from './last.js';\n\nconst TWOPI = PI * 2;\nconst PITHIRD = PI / 3;\nconst DEG2RAD = PI / 180;\nconst RAD2DEG = 180 / PI;\n\nexport { PI, TWOPI, PITHIRD, DEG2RAD, RAD2DEG, min, max };\n","export default {\n    format: {},\n    autodetect: []\n};\n","import { last, clip_rgb, type } from './utils/index.js';\nimport _input from './io/input.js';\n\nclass Color {\n    constructor(...args) {\n        const me = this;\n        if (\n            type(args[0]) === 'object' &&\n            args[0].constructor &&\n            args[0].constructor === this.constructor\n        ) {\n            // the argument is already a Color instance\n            return args[0];\n        }\n        // last argument could be the mode\n        let mode = last(args);\n        let autodetect = false;\n        if (!mode) {\n            autodetect = true;\n            if (!_input.sorted) {\n                _input.autodetect = _input.autodetect.sort((a, b) => b.p - a.p);\n                _input.sorted = true;\n            }\n            // auto-detect format\n            for (let chk of _input.autodetect) {\n                mode = chk.test(...args);\n                if (mode) break;\n            }\n        }\n        if (_input.format[mode]) {\n            const rgb = _input.format[mode].apply(\n                null,\n                autodetect ? args : args.slice(0, -1)\n            );\n            me._rgb = clip_rgb(rgb);\n        } else {\n            throw new Error('unknown format: ' + args);\n        }\n        // add alpha channel\n        if (me._rgb.length === 3) me._rgb.push(1);\n    }\n    toString() {\n        if (type(this.hex) == 'function') return this.hex();\n        return `[${this._rgb.join(',')}]`;\n    }\n}\nexport default Color;\n","// this gets updated automatically\nexport const version = '2.6.0';\n","import Color from './Color.js';\nimport { version } from './version.js';\n\nconst chroma = (...args) => {\n    return new chroma.Color(...args);\n};\n\nchroma.Color = Color;\nchroma.version = version;\n\nexport default chroma;\n","import { unpack } from '../../utils/index.js';\n\nconst cmyk2rgb = (...args) => {\n    args = unpack(args, 'cmyk');\n    const [c, m, y, k] = args;\n    const alpha = args.length > 4 ? args[4] : 1;\n    if (k === 1) return [0, 0, 0, alpha];\n    return [\n        c >= 1 ? 0 : 255 * (1 - c) * (1 - k), // r\n        m >= 1 ? 0 : 255 * (1 - m) * (1 - k), // g\n        y >= 1 ? 0 : 255 * (1 - y) * (1 - k), // b\n        alpha\n    ];\n};\n\nexport default cmyk2rgb;\n","import { unpack } from '../../utils/index.js';\nconst { max } = Math;\n\nconst rgb2cmyk = (...args) => {\n    let [r, g, b] = unpack(args, 'rgb');\n    r = r / 255;\n    g = g / 255;\n    b = b / 255;\n    const k = 1 - max(r, max(g, b));\n    const f = k < 1 ? 1 / (1 - k) : 0;\n    const c = (1 - r - k) * f;\n    const m = (1 - g - k) * f;\n    const y = (1 - b - k) * f;\n    return [c, m, y, k];\n};\n\nexport default rgb2cmyk;\n","import chroma from '../../chroma.js';\nimport Color from '../../Color.js';\nimport input from '../input.js';\nimport { unpack, type } from '../../utils/index.js';\nimport cmyk2rgb from './cmyk2rgb.js';\nimport rgb2cmyk from './rgb2cmyk.js';\n\nColor.prototype.cmyk = function () {\n    return rgb2cmyk(this._rgb);\n};\n\nchroma.cmyk = (...args) => new Color(...args, 'cmyk');\n\ninput.format.cmyk = cmyk2rgb;\n\ninput.autodetect.push({\n    p: 2,\n    test: (...args) => {\n        args = unpack(args, 'cmyk');\n        if (type(args) === 'array' && args.length === 4) {\n            return 'cmyk';\n        }\n    }\n});\n","import { unpack, last } from '../../utils/index.js';\nconst rnd = (a) => Math.round(a * 100) / 100;\n\n/*\n * supported arguments:\n * - hsl2css(h,s,l)\n * - hsl2css(h,s,l,a)\n * - hsl2css([h,s,l], mode)\n * - hsl2css([h,s,l,a], mode)\n * - hsl2css({h,s,l,a}, mode)\n */\nconst hsl2css = (...args) => {\n    const hsla = unpack(args, 'hsla');\n    let mode = last(args) || 'lsa';\n    hsla[0] = rnd(hsla[0] || 0);\n    hsla[1] = rnd(hsla[1] * 100) + '%';\n    hsla[2] = rnd(hsla[2] * 100) + '%';\n    if (mode === 'hsla' || (hsla.length > 3 && hsla[3] < 1)) {\n        hsla[3] = hsla.length > 3 ? hsla[3] : 1;\n        mode = 'hsla';\n    } else {\n        hsla.length = 3;\n    }\n    return `${mode}(${hsla.join(',')})`;\n};\n\nexport default hsl2css;\n","import { unpack, min, max } from '../../utils/index.js';\n\n/*\n * supported arguments:\n * - rgb2hsl(r,g,b)\n * - rgb2hsl(r,g,b,a)\n * - rgb2hsl([r,g,b])\n * - rgb2hsl([r,g,b,a])\n * - rgb2hsl({r,g,b,a})\n */\nconst rgb2hsl = (...args) => {\n    args = unpack(args, 'rgba');\n    let [r, g, b] = args;\n\n    r /= 255;\n    g /= 255;\n    b /= 255;\n\n    const minRgb = min(r, g, b);\n    const maxRgb = max(r, g, b);\n\n    const l = (maxRgb + minRgb) / 2;\n    let s, h;\n\n    if (maxRgb === minRgb) {\n        s = 0;\n        h = Number.NaN;\n    } else {\n        s =\n            l < 0.5\n                ? (maxRgb - minRgb) / (maxRgb + minRgb)\n                : (maxRgb - minRgb) / (2 - maxRgb - minRgb);\n    }\n\n    if (r == maxRgb) h = (g - b) / (maxRgb - minRgb);\n    else if (g == maxRgb) h = 2 + (b - r) / (maxRgb - minRgb);\n    else if (b == maxRgb) h = 4 + (r - g) / (maxRgb - minRgb);\n\n    h *= 60;\n    if (h < 0) h += 360;\n    if (args.length > 3 && args[3] !== undefined) return [h, s, l, args[3]];\n    return [h, s, l];\n};\n\nexport default rgb2hsl;\n","import { unpack, last } from '../../utils/index.js';\nimport hsl2css from './hsl2css.js';\nimport rgb2hsl from '../hsl/rgb2hsl.js';\nconst { round } = Math;\n\n/*\n * supported arguments:\n * - rgb2css(r,g,b)\n * - rgb2css(r,g,b,a)\n * - rgb2css([r,g,b], mode)\n * - rgb2css([r,g,b,a], mode)\n * - rgb2css({r,g,b,a}, mode)\n */\nconst rgb2css = (...args) => {\n    const rgba = unpack(args, 'rgba');\n    let mode = last(args) || 'rgb';\n    if (mode.substr(0, 3) == 'hsl') {\n        return hsl2css(rgb2hsl(rgba), mode);\n    }\n    rgba[0] = round(rgba[0]);\n    rgba[1] = round(rgba[1]);\n    rgba[2] = round(rgba[2]);\n    if (mode === 'rgba' || (rgba.length > 3 && rgba[3] < 1)) {\n        rgba[3] = rgba.length > 3 ? rgba[3] : 1;\n        mode = 'rgba';\n    }\n    return `${mode}(${rgba.slice(0, mode === 'rgb' ? 3 : 4).join(',')})`;\n};\n\nexport default rgb2css;\n","import { unpack } from '../../utils/index.js';\nconst { round } = Math;\n\nconst hsl2rgb = (...args) => {\n    args = unpack(args, 'hsl');\n    const [h, s, l] = args;\n    let r, g, b;\n    if (s === 0) {\n        r = g = b = l * 255;\n    } else {\n        const t3 = [0, 0, 0];\n        const c = [0, 0, 0];\n        const t2 = l < 0.5 ? l * (1 + s) : l + s - l * s;\n        const t1 = 2 * l - t2;\n        const h_ = h / 360;\n        t3[0] = h_ + 1 / 3;\n        t3[1] = h_;\n        t3[2] = h_ - 1 / 3;\n        for (let i = 0; i < 3; i++) {\n            if (t3[i] < 0) t3[i] += 1;\n            if (t3[i] > 1) t3[i] -= 1;\n            if (6 * t3[i] < 1) c[i] = t1 + (t2 - t1) * 6 * t3[i];\n            else if (2 * t3[i] < 1) c[i] = t2;\n            else if (3 * t3[i] < 2) c[i] = t1 + (t2 - t1) * (2 / 3 - t3[i]) * 6;\n            else c[i] = t1;\n        }\n        [r, g, b] = [round(c[0] * 255), round(c[1] * 255), round(c[2] * 255)];\n    }\n    if (args.length > 3) {\n        // keep alpha channel\n        return [r, g, b, args[3]];\n    }\n    return [r, g, b, 1];\n};\n\nexport default hsl2rgb;\n","import hsl2rgb from '../hsl/hsl2rgb.js';\nimport input from '../input.js';\n\nconst RE_RGB = /^rgb\\(\\s*(-?\\d+),\\s*(-?\\d+)\\s*,\\s*(-?\\d+)\\s*\\)$/;\nconst RE_RGBA =\n    /^rgba\\(\\s*(-?\\d+),\\s*(-?\\d+)\\s*,\\s*(-?\\d+)\\s*,\\s*([01]|[01]?\\.\\d+)\\)$/;\nconst RE_RGB_PCT =\n    /^rgb\\(\\s*(-?\\d+(?:\\.\\d+)?)%,\\s*(-?\\d+(?:\\.\\d+)?)%\\s*,\\s*(-?\\d+(?:\\.\\d+)?)%\\s*\\)$/;\nconst RE_RGBA_PCT =\n    /^rgba\\(\\s*(-?\\d+(?:\\.\\d+)?)%,\\s*(-?\\d+(?:\\.\\d+)?)%\\s*,\\s*(-?\\d+(?:\\.\\d+)?)%\\s*,\\s*([01]|[01]?\\.\\d+)\\)$/;\nconst RE_HSL =\n    /^hsl\\(\\s*(-?\\d+(?:\\.\\d+)?),\\s*(-?\\d+(?:\\.\\d+)?)%\\s*,\\s*(-?\\d+(?:\\.\\d+)?)%\\s*\\)$/;\nconst RE_HSLA =\n    /^hsla\\(\\s*(-?\\d+(?:\\.\\d+)?),\\s*(-?\\d+(?:\\.\\d+)?)%\\s*,\\s*(-?\\d+(?:\\.\\d+)?)%\\s*,\\s*([01]|[01]?\\.\\d+)\\)$/;\n\nconst { round } = Math;\n\nconst css2rgb = (css) => {\n    css = css.toLowerCase().trim();\n    let m;\n\n    if (input.format.named) {\n        try {\n            return input.format.named(css);\n            // eslint-disable-next-line\n        } catch (e) {}\n    }\n\n    // rgb(250,20,0)\n    if ((m = css.match(RE_RGB))) {\n        const rgb = m.slice(1, 4);\n        for (let i = 0; i < 3; i++) {\n            rgb[i] = +rgb[i];\n        }\n        rgb[3] = 1; // default alpha\n        return rgb;\n    }\n\n    // rgba(250,20,0,0.4)\n    if ((m = css.match(RE_RGBA))) {\n        const rgb = m.slice(1, 5);\n        for (let i = 0; i < 4; i++) {\n            rgb[i] = +rgb[i];\n        }\n        return rgb;\n    }\n\n    // rgb(100%,0%,0%)\n    if ((m = css.match(RE_RGB_PCT))) {\n        const rgb = m.slice(1, 4);\n        for (let i = 0; i < 3; i++) {\n            rgb[i] = round(rgb[i] * 2.55);\n        }\n        rgb[3] = 1; // default alpha\n        return rgb;\n    }\n\n    // rgba(100%,0%,0%,0.4)\n    if ((m = css.match(RE_RGBA_PCT))) {\n        const rgb = m.slice(1, 5);\n        for (let i = 0; i < 3; i++) {\n            rgb[i] = round(rgb[i] * 2.55);\n        }\n        rgb[3] = +rgb[3];\n        return rgb;\n    }\n\n    // hsl(0,100%,50%)\n    if ((m = css.match(RE_HSL))) {\n        const hsl = m.slice(1, 4);\n        hsl[1] *= 0.01;\n        hsl[2] *= 0.01;\n        const rgb = hsl2rgb(hsl);\n        rgb[3] = 1;\n        return rgb;\n    }\n\n    // hsla(0,100%,50%,0.5)\n    if ((m = css.match(RE_HSLA))) {\n        const hsl = m.slice(1, 4);\n        hsl[1] *= 0.01;\n        hsl[2] *= 0.01;\n        const rgb = hsl2rgb(hsl);\n        rgb[3] = +m[4]; // default alpha = 1\n        return rgb;\n    }\n};\n\ncss2rgb.test = (s) => {\n    return (\n        RE_RGB.test(s) ||\n        RE_RGBA.test(s) ||\n        RE_RGB_PCT.test(s) ||\n        RE_RGBA_PCT.test(s) ||\n        RE_HSL.test(s) ||\n        RE_HSLA.test(s)\n    );\n};\n\nexport default css2rgb;\n","import chroma from '../../chroma.js';\nimport Color from '../../Color.js';\nimport input from '../input.js';\nimport { type } from '../../utils/index.js';\n\nimport rgb2css from './rgb2css.js';\nimport css2rgb from './css2rgb.js';\n\nColor.prototype.css = function (mode) {\n    return rgb2css(this._rgb, mode);\n};\n\nchroma.css = (...args) => new Color(...args, 'css');\n\ninput.format.css = css2rgb;\n\ninput.autodetect.push({\n    p: 5,\n    test: (h, ...rest) => {\n        if (!rest.length && type(h) === 'string' && css2rgb.test(h)) {\n            return 'css';\n        }\n    }\n});\n","import Color from '../../Color.js';\nimport chroma from '../../chroma.js';\nimport input from '../input.js';\nimport { unpack } from '../../utils/index.js';\n\ninput.format.gl = (...args) => {\n    const rgb = unpack(args, 'rgba');\n    rgb[0] *= 255;\n    rgb[1] *= 255;\n    rgb[2] *= 255;\n    return rgb;\n};\n\nchroma.gl = (...args) => new Color(...args, 'gl');\n\nColor.prototype.gl = function () {\n    const rgb = this._rgb;\n    return [rgb[0] / 255, rgb[1] / 255, rgb[2] / 255, rgb[3]];\n};\n","import { unpack } from '../../utils/index.js';\nconst { floor } = Math;\n\n/*\n * this is basically just HSV with some minor tweaks\n *\n * hue.. [0..360]\n * chroma .. [0..1]\n * grayness .. [0..1]\n */\n\nconst hcg2rgb = (...args) => {\n    args = unpack(args, 'hcg');\n    let [h, c, _g] = args;\n    let r, g, b;\n    _g = _g * 255;\n    const _c = c * 255;\n    if (c === 0) {\n        r = g = b = _g;\n    } else {\n        if (h === 360) h = 0;\n        if (h > 360) h -= 360;\n        if (h < 0) h += 360;\n        h /= 60;\n        const i = floor(h);\n        const f = h - i;\n        const p = _g * (1 - c);\n        const q = p + _c * (1 - f);\n        const t = p + _c * f;\n        const v = p + _c;\n        switch (i) {\n            case 0:\n                [r, g, b] = [v, t, p];\n                break;\n            case 1:\n                [r, g, b] = [q, v, p];\n                break;\n            case 2:\n                [r, g, b] = [p, v, t];\n                break;\n            case 3:\n                [r, g, b] = [p, q, v];\n                break;\n            case 4:\n                [r, g, b] = [t, p, v];\n                break;\n            case 5:\n                [r, g, b] = [v, p, q];\n                break;\n        }\n    }\n    return [r, g, b, args.length > 3 ? args[3] : 1];\n};\n\nexport default hcg2rgb;\n","import { unpack, type } from '../../utils/index.js';\nimport chroma from '../../chroma.js';\nimport Color from '../../Color.js';\nimport input from '../input.js';\nimport hcg2rgb from './hcg2rgb.js';\nimport rgb2hcg from './rgb2hcg.js';\n\nColor.prototype.hcg = function () {\n    return rgb2hcg(this._rgb);\n};\n\nchroma.hcg = (...args) => new Color(...args, 'hcg');\n\ninput.format.hcg = hcg2rgb;\n\ninput.autodetect.push({\n    p: 1,\n    test: (...args) => {\n        args = unpack(args, 'hcg');\n        if (type(args) === 'array' && args.length === 3) {\n            return 'hcg';\n        }\n    }\n});\n","import { unpack, max, min } from '../../utils/index.js';\n\nconst rgb2hcg = (...args) => {\n    const [r, g, b] = unpack(args, 'rgb');\n    const minRgb = min(r, g, b);\n    const maxRgb = max(r, g, b);\n    const delta = maxRgb - minRgb;\n    const c = (delta * 100) / 255;\n    const _g = (minRgb / (255 - delta)) * 100;\n    let h;\n    if (delta === 0) {\n        h = Number.NaN;\n    } else {\n        if (r === maxRgb) h = (g - b) / delta;\n        if (g === maxRgb) h = 2 + (b - r) / delta;\n        if (b === maxRgb) h = 4 + (r - g) / delta;\n        h *= 60;\n        if (h < 0) h += 360;\n    }\n    return [h, c, _g];\n};\n\nexport default rgb2hcg;\n","const RE_HEX = /^#?([A-Fa-f0-9]{6}|[A-Fa-f0-9]{3})$/;\nconst RE_HEXA = /^#?([A-Fa-f0-9]{8}|[A-Fa-f0-9]{4})$/;\n\nconst hex2rgb = (hex) => {\n    if (hex.match(RE_HEX)) {\n        // remove optional leading #\n        if (hex.length === 4 || hex.length === 7) {\n            hex = hex.substr(1);\n        }\n        // expand short-notation to full six-digit\n        if (hex.length === 3) {\n            hex = hex.split('');\n            hex = hex[0] + hex[0] + hex[1] + hex[1] + hex[2] + hex[2];\n        }\n        const u = parseInt(hex, 16);\n        const r = u >> 16;\n        const g = (u >> 8) & 0xff;\n        const b = u & 0xff;\n        return [r, g, b, 1];\n    }\n\n    // match rgba hex format, eg #FF000077\n    if (hex.match(RE_HEXA)) {\n        if (hex.length === 5 || hex.length === 9) {\n            // remove optional leading #\n            hex = hex.substr(1);\n        }\n        // expand short-notation to full eight-digit\n        if (hex.length === 4) {\n            hex = hex.split('');\n            hex =\n                hex[0] +\n                hex[0] +\n                hex[1] +\n                hex[1] +\n                hex[2] +\n                hex[2] +\n                hex[3] +\n                hex[3];\n        }\n        const u = parseInt(hex, 16);\n        const r = (u >> 24) & 0xff;\n        const g = (u >> 16) & 0xff;\n        const b = (u >> 8) & 0xff;\n        const a = Math.round(((u & 0xff) / 0xff) * 100) / 100;\n        return [r, g, b, a];\n    }\n\n    // we used to check for css colors here\n    // if _input.css? and rgb = _input.css hex\n    //     return rgb\n\n    throw new Error(`unknown hex color: ${hex}`);\n};\n\nexport default hex2rgb;\n","import { unpack, last } from '../../utils/index.js';\nconst { round } = Math;\n\nconst rgb2hex = (...args) => {\n    let [r, g, b, a] = unpack(args, 'rgba');\n    let mode = last(args) || 'auto';\n    if (a === undefined) a = 1;\n    if (mode === 'auto') {\n        mode = a < 1 ? 'rgba' : 'rgb';\n    }\n    r = round(r);\n    g = round(g);\n    b = round(b);\n    const u = (r << 16) | (g << 8) | b;\n    let str = '000000' + u.toString(16); //#.toUpperCase();\n    str = str.substr(str.length - 6);\n    let hxa = '0' + round(a * 255).toString(16);\n    hxa = hxa.substr(hxa.length - 2);\n    switch (mode.toLowerCase()) {\n        case 'rgba':\n            return `#${str}${hxa}`;\n        case 'argb':\n            return `#${hxa}${str}`;\n        default:\n            return `#${str}`;\n    }\n};\n\nexport default rgb2hex;\n","import chroma from '../../chroma.js';\nimport Color from '../../Color.js';\nimport { type } from '../../utils/index.js';\nimport input from '../input.js';\nimport hex2rgb from './hex2rgb.js';\nimport rgb2hex from './rgb2hex.js';\n\nColor.prototype.hex = function (mode) {\n    return rgb2hex(this._rgb, mode);\n};\n\nchroma.hex = (...args) => new Color(...args, 'hex');\n\ninput.format.hex = hex2rgb;\ninput.autodetect.push({\n    p: 4,\n    test: (h, ...rest) => {\n        if (\n            !rest.length &&\n            type(h) === 'string' &&\n            [3, 4, 5, 6, 7, 8, 9].indexOf(h.length) >= 0\n        ) {\n            return 'hex';\n        }\n    }\n});\n","import { unpack, limit, TWOPI, PITHIRD } from '../../utils/index.js';\nconst { cos } = Math;\n\n/*\n * hue [0..360]\n * saturation [0..1]\n * intensity [0..1]\n */\nconst hsi2rgb = (...args) => {\n    /*\n    borrowed from here:\n    http://hummer.stanford.edu/museinfo/doc/examples/humdrum/keyscape2/hsi2rgb.cpp\n    */\n    args = unpack(args, 'hsi');\n    let [h, s, i] = args;\n    let r, g, b;\n\n    if (isNaN(h)) h = 0;\n    if (isNaN(s)) s = 0;\n    // normalize hue\n    if (h > 360) h -= 360;\n    if (h < 0) h += 360;\n    h /= 360;\n    if (h < 1 / 3) {\n        b = (1 - s) / 3;\n        r = (1 + (s * cos(TWOPI * h)) / cos(PITHIRD - TWOPI * h)) / 3;\n        g = 1 - (b + r);\n    } else if (h < 2 / 3) {\n        h -= 1 / 3;\n        r = (1 - s) / 3;\n        g = (1 + (s * cos(TWOPI * h)) / cos(PITHIRD - TWOPI * h)) / 3;\n        b = 1 - (r + g);\n    } else {\n        h -= 2 / 3;\n        g = (1 - s) / 3;\n        b = (1 + (s * cos(TWOPI * h)) / cos(PITHIRD - TWOPI * h)) / 3;\n        r = 1 - (g + b);\n    }\n    r = limit(i * r * 3);\n    g = limit(i * g * 3);\n    b = limit(i * b * 3);\n    return [r * 255, g * 255, b * 255, args.length > 3 ? args[3] : 1];\n};\n\nexport default hsi2rgb;\n","import { unpack, TWOPI } from '../../utils/index.js';\nconst { min, sqrt, acos } = Math;\n\nconst rgb2hsi = (...args) => {\n    /*\n    borrowed from here:\n    http://hummer.stanford.edu/museinfo/doc/examples/humdrum/keyscape2/rgb2hsi.cpp\n    */\n    let [r, g, b] = unpack(args, 'rgb');\n    r /= 255;\n    g /= 255;\n    b /= 255;\n    let h;\n    const min_ = min(r, g, b);\n    const i = (r + g + b) / 3;\n    const s = i > 0 ? 1 - min_ / i : 0;\n    if (s === 0) {\n        h = NaN;\n    } else {\n        h = (r - g + (r - b)) / 2;\n        h /= sqrt((r - g) * (r - g) + (r - b) * (g - b));\n        h = acos(h);\n        if (b > g) {\n            h = TWOPI - h;\n        }\n        h /= TWOPI;\n    }\n    return [h * 360, s, i];\n};\n\nexport default rgb2hsi;\n","import { unpack, type } from '../../utils/index.js';\nimport chroma from '../../chroma.js';\nimport Color from '../../Color.js';\nimport input from '../input.js';\nimport hsi2rgb from './hsi2rgb.js';\nimport rgb2hsi from './rgb2hsi.js';\n\nColor.prototype.hsi = function () {\n    return rgb2hsi(this._rgb);\n};\n\nchroma.hsi = (...args) => new Color(...args, 'hsi');\n\ninput.format.hsi = hsi2rgb;\n\ninput.autodetect.push({\n    p: 2,\n    test: (...args) => {\n        args = unpack(args, 'hsi');\n        if (type(args) === 'array' && args.length === 3) {\n            return 'hsi';\n        }\n    }\n});\n","import { unpack, type } from '../../utils/index.js';\nimport chroma from '../../chroma.js';\nimport Color from '../../Color.js';\nimport input from '../input.js';\nimport hsl2rgb from './hsl2rgb.js';\nimport rgb2hsl from './rgb2hsl.js';\n\nColor.prototype.hsl = function () {\n    return rgb2hsl(this._rgb);\n};\n\nchroma.hsl = (...args) => new Color(...args, 'hsl');\n\ninput.format.hsl = hsl2rgb;\n\ninput.autodetect.push({\n    p: 2,\n    test: (...args) => {\n        args = unpack(args, 'hsl');\n        if (type(args) === 'array' && args.length === 3) {\n            return 'hsl';\n        }\n    }\n});\n","import { unpack } from '../../utils/index.js';\nconst { floor } = Math;\n\nconst hsv2rgb = (...args) => {\n    args = unpack(args, 'hsv');\n    let [h, s, v] = args;\n    let r, g, b;\n    v *= 255;\n    if (s === 0) {\n        r = g = b = v;\n    } else {\n        if (h === 360) h = 0;\n        if (h > 360) h -= 360;\n        if (h < 0) h += 360;\n        h /= 60;\n\n        const i = floor(h);\n        const f = h - i;\n        const p = v * (1 - s);\n        const q = v * (1 - s * f);\n        const t = v * (1 - s * (1 - f));\n\n        switch (i) {\n            case 0:\n                [r, g, b] = [v, t, p];\n                break;\n            case 1:\n                [r, g, b] = [q, v, p];\n                break;\n            case 2:\n                [r, g, b] = [p, v, t];\n                break;\n            case 3:\n                [r, g, b] = [p, q, v];\n                break;\n            case 4:\n                [r, g, b] = [t, p, v];\n                break;\n            case 5:\n                [r, g, b] = [v, p, q];\n                break;\n        }\n    }\n    return [r, g, b, args.length > 3 ? args[3] : 1];\n};\n\nexport default hsv2rgb;\n","import { unpack } from '../../utils/index.js';\nconst { min, max } = Math;\n\n/*\n * supported arguments:\n * - rgb2hsv(r,g,b)\n * - rgb2hsv([r,g,b])\n * - rgb2hsv({r,g,b})\n */\nconst rgb2hsl = (...args) => {\n    args = unpack(args, 'rgb');\n    let [r, g, b] = args;\n    const min_ = min(r, g, b);\n    const max_ = max(r, g, b);\n    const delta = max_ - min_;\n    let h, s, v;\n    v = max_ / 255.0;\n    if (max_ === 0) {\n        h = Number.NaN;\n        s = 0;\n    } else {\n        s = delta / max_;\n        if (r === max_) h = (g - b) / delta;\n        if (g === max_) h = 2 + (b - r) / delta;\n        if (b === max_) h = 4 + (r - g) / delta;\n        h *= 60;\n        if (h < 0) h += 360;\n    }\n    return [h, s, v];\n};\n\nexport default rgb2hsl;\n","import { unpack, type } from '../../utils/index.js';\nimport chroma from '../../chroma.js';\nimport Color from '../../Color.js';\nimport input from '../input.js';\nimport hsv2rgb from './hsv2rgb.js';\nimport rgb2hsv from './rgb2hsv.js';\n\nColor.prototype.hsv = function () {\n    return rgb2hsv(this._rgb);\n};\n\nchroma.hsv = (...args) => new Color(...args, 'hsv');\n\ninput.format.hsv = hsv2rgb;\n\ninput.autodetect.push({\n    p: 2,\n    test: (...args) => {\n        args = unpack(args, 'hsv');\n        if (type(args) === 'array' && args.length === 3) {\n            return 'hsv';\n        }\n    }\n});\n","export default {\n    // Corresponds roughly to RGB brighter/darker\n    Kn: 18,\n\n    // D65 standard referent\n    Xn: 0.95047,\n    Yn: 1,\n    Zn: 1.08883,\n\n    t0: 0.137931034, // 4 / 29\n    t1: 0.206896552, // 6 / 29\n    t2: 0.12841855, // 3 * t1 * t1\n    t3: 0.008856452 // t1 * t1 * t1\n};\n","import LAB_CONSTANTS from './lab-constants.js';\nimport { unpack } from '../../utils/index.js';\nconst { pow } = Math;\n\n/*\n * L* [0..100]\n * a [-100..100]\n * b [-100..100]\n */\nconst lab2rgb = (...args) => {\n    args = unpack(args, 'lab');\n    const [l, a, b] = args;\n    let x, y, z, r, g, b_;\n\n    y = (l + 16) / 116;\n    x = isNaN(a) ? y : y + a / 500;\n    z = isNaN(b) ? y : y - b / 200;\n\n    y = LAB_CONSTANTS.Yn * lab_xyz(y);\n    x = LAB_CONSTANTS.Xn * lab_xyz(x);\n    z = LAB_CONSTANTS.Zn * lab_xyz(z);\n\n    r = xyz_rgb(3.2404542 * x - 1.5371385 * y - 0.4985314 * z); // D65 -> sRGB\n    g = xyz_rgb(-0.969266 * x + 1.8760108 * y + 0.041556 * z);\n    b_ = xyz_rgb(0.0556434 * x - 0.2040259 * y + 1.0572252 * z);\n\n    return [r, g, b_, args.length > 3 ? args[3] : 1];\n};\n\nconst xyz_rgb = (r) => {\n    return 255 * (r <= 0.00304 ? 12.92 * r : 1.055 * pow(r, 1 / 2.4) - 0.055);\n};\n\nconst lab_xyz = (t) => {\n    return t > LAB_CONSTANTS.t1\n        ? t * t * t\n        : LAB_CONSTANTS.t2 * (t - LAB_CONSTANTS.t0);\n};\n\nexport default lab2rgb;\n","import LAB_CONSTANTS from './lab-constants.js';\nimport { unpack } from '../../utils/index.js';\nconst { pow } = Math;\n\nconst rgb2lab = (...args) => {\n    const [r, g, b] = unpack(args, 'rgb');\n    const [x, y, z] = rgb2xyz(r, g, b);\n    const l = 116 * y - 16;\n    return [l < 0 ? 0 : l, 500 * (x - y), 200 * (y - z)];\n};\n\nconst rgb_xyz = (r) => {\n    if ((r /= 255) <= 0.04045) return r / 12.92;\n    return pow((r + 0.055) / 1.055, 2.4);\n};\n\nconst xyz_lab = (t) => {\n    if (t > LAB_CONSTANTS.t3) return pow(t, 1 / 3);\n    return t / LAB_CONSTANTS.t2 + LAB_CONSTANTS.t0;\n};\n\nconst rgb2xyz = (r, g, b) => {\n    r = rgb_xyz(r);\n    g = rgb_xyz(g);\n    b = rgb_xyz(b);\n    const x = xyz_lab(\n        (0.4124564 * r + 0.3575761 * g + 0.1804375 * b) / LAB_CONSTANTS.Xn\n    );\n    const y = xyz_lab(\n        (0.2126729 * r + 0.7151522 * g + 0.072175 * b) / LAB_CONSTANTS.Yn\n    );\n    const z = xyz_lab(\n        (0.0193339 * r + 0.119192 * g + 0.9503041 * b) / LAB_CONSTANTS.Zn\n    );\n    return [x, y, z];\n};\n\nexport default rgb2lab;\n","import { unpack, type } from '../../utils/index.js';\nimport chroma from '../../chroma.js';\nimport Color from '../../Color.js';\nimport input from '../input.js';\nimport lab2rgb from './lab2rgb.js';\nimport rgb2lab from './rgb2lab.js';\n\nColor.prototype.lab = function () {\n    return rgb2lab(this._rgb);\n};\n\nchroma.lab = (...args) => new Color(...args, 'lab');\n\ninput.format.lab = lab2rgb;\n\ninput.autodetect.push({\n    p: 2,\n    test: (...args) => {\n        args = unpack(args, 'lab');\n        if (type(args) === 'array' && args.length === 3) {\n            return 'lab';\n        }\n    }\n});\n","import { unpack, DEG2RAD } from '../../utils/index.js';\nconst { sin, cos } = Math;\n\nconst lch2lab = (...args) => {\n    /*\n    Convert from a qualitative parameter h and a quantitative parameter l to a 24-bit pixel.\n    These formulas were invented by David Dalrymple to obtain maximum contrast without going\n    out of gamut if the parameters are in the range 0-1.\n\n    A saturation multiplier was added by Gregor Aisch\n    */\n    let [l, c, h] = unpack(args, 'lch');\n    if (isNaN(h)) h = 0;\n    h = h * DEG2RAD;\n    return [l, cos(h) * c, sin(h) * c];\n};\n\nexport default lch2lab;\n","import { unpack } from '../../utils/index.js';\nimport lch2lab from './lch2lab.js';\nimport lab2rgb from '../lab/lab2rgb.js';\n\nconst lch2rgb = (...args) => {\n    args = unpack(args, 'lch');\n    const [l, c, h] = args;\n    const [L, a, b_] = lch2lab(l, c, h);\n    const [r, g, b] = lab2rgb(L, a, b_);\n    return [r, g, b, args.length > 3 ? args[3] : 1];\n};\n\nexport default lch2rgb;\n","import { unpack, RAD2DEG } from '../../utils/index.js';\nconst { sqrt, atan2, round } = Math;\n\nconst lab2lch = (...args) => {\n    const [l, a, b] = unpack(args, 'lab');\n    const c = sqrt(a * a + b * b);\n    let h = (atan2(b, a) * RAD2DEG + 360) % 360;\n    if (round(c * 10000) === 0) h = Number.NaN;\n    return [l, c, h];\n};\n\nexport default lab2lch;\n","import { unpack } from '../../utils/index.js';\nimport rgb2lab from '../lab/rgb2lab.js';\nimport lab2lch from './lab2lch.js';\n\nconst rgb2lch = (...args) => {\n    const [r, g, b] = unpack(args, 'rgb');\n    const [l, a, b_] = rgb2lab(r, g, b);\n    return lab2lch(l, a, b_);\n};\n\nexport default rgb2lch;\n","import { unpack, type } from '../../utils/index.js';\nimport chroma from '../../chroma.js';\nimport Color from '../../Color.js';\nimport input from '../input.js';\nimport lch2rgb from './lch2rgb.js';\nimport hcl2rgb from './hcl2rgb.js';\nimport rgb2lch from './rgb2lch.js';\n\nColor.prototype.lch = function () {\n    return rgb2lch(this._rgb);\n};\nColor.prototype.hcl = function () {\n    return rgb2lch(this._rgb).reverse();\n};\n\nchroma.lch = (...args) => new Color(...args, 'lch');\nchroma.hcl = (...args) => new Color(...args, 'hcl');\n\ninput.format.lch = lch2rgb;\ninput.format.hcl = hcl2rgb;\n['lch', 'hcl'].forEach((m) =>\n    input.autodetect.push({\n        p: 2,\n        test: (...args) => {\n            args = unpack(args, m);\n            if (type(args) === 'array' && args.length === 3) {\n                return m;\n            }\n        }\n    })\n);\n","import { unpack } from '../../utils/index.js';\nimport lch2rgb from './lch2rgb.js';\n\nconst hcl2rgb = (...args) => {\n    const hcl = unpack(args, 'hcl').reverse();\n    return lch2rgb(...hcl);\n};\n\nexport default hcl2rgb;\n","/**\n\tX11 color names\n\n\thttp://www.w3.org/TR/css3-color/#svg-color\n*/\n\nconst w3cx11 = {\n    aliceblue: '#f0f8ff',\n    antiquewhite: '#faebd7',\n    aqua: '#00ffff',\n    aquamarine: '#7fffd4',\n    azure: '#f0ffff',\n    beige: '#f5f5dc',\n    bisque: '#ffe4c4',\n    black: '#000000',\n    blanchedalmond: '#ffebcd',\n    blue: '#0000ff',\n    blueviolet: '#8a2be2',\n    brown: '#a52a2a',\n    burlywood: '#deb887',\n    cadetblue: '#5f9ea0',\n    chartreuse: '#7fff00',\n    chocolate: '#d2691e',\n    coral: '#ff7f50',\n    cornflowerblue: '#6495ed',\n    cornsilk: '#fff8dc',\n    crimson: '#dc143c',\n    cyan: '#00ffff',\n    darkblue: '#00008b',\n    darkcyan: '#008b8b',\n    darkgoldenrod: '#b8860b',\n    darkgray: '#a9a9a9',\n    darkgreen: '#006400',\n    darkgrey: '#a9a9a9',\n    darkkhaki: '#bdb76b',\n    darkmagenta: '#8b008b',\n    darkolivegreen: '#556b2f',\n    darkorange: '#ff8c00',\n    darkorchid: '#9932cc',\n    darkred: '#8b0000',\n    darksalmon: '#e9967a',\n    darkseagreen: '#8fbc8f',\n    darkslateblue: '#483d8b',\n    darkslategray: '#2f4f4f',\n    darkslategrey: '#2f4f4f',\n    darkturquoise: '#00ced1',\n    darkviolet: '#9400d3',\n    deeppink: '#ff1493',\n    deepskyblue: '#00bfff',\n    dimgray: '#696969',\n    dimgrey: '#696969',\n    dodgerblue: '#1e90ff',\n    firebrick: '#b22222',\n    floralwhite: '#fffaf0',\n    forestgreen: '#228b22',\n    fuchsia: '#ff00ff',\n    gainsboro: '#dcdcdc',\n    ghostwhite: '#f8f8ff',\n    gold: '#ffd700',\n    goldenrod: '#daa520',\n    gray: '#808080',\n    green: '#008000',\n    greenyellow: '#adff2f',\n    grey: '#808080',\n    honeydew: '#f0fff0',\n    hotpink: '#ff69b4',\n    indianred: '#cd5c5c',\n    indigo: '#4b0082',\n    ivory: '#fffff0',\n    khaki: '#f0e68c',\n    laserlemon: '#ffff54',\n    lavender: '#e6e6fa',\n    lavenderblush: '#fff0f5',\n    lawngreen: '#7cfc00',\n    lemonchiffon: '#fffacd',\n    lightblue: '#add8e6',\n    lightcoral: '#f08080',\n    lightcyan: '#e0ffff',\n    lightgoldenrod: '#fafad2',\n    lightgoldenrodyellow: '#fafad2',\n    lightgray: '#d3d3d3',\n    lightgreen: '#90ee90',\n    lightgrey: '#d3d3d3',\n    lightpink: '#ffb6c1',\n    lightsalmon: '#ffa07a',\n    lightseagreen: '#20b2aa',\n    lightskyblue: '#87cefa',\n    lightslategray: '#778899',\n    lightslategrey: '#778899',\n    lightsteelblue: '#b0c4de',\n    lightyellow: '#ffffe0',\n    lime: '#00ff00',\n    limegreen: '#32cd32',\n    linen: '#faf0e6',\n    magenta: '#ff00ff',\n    maroon: '#800000',\n    maroon2: '#7f0000',\n    maroon3: '#b03060',\n    mediumaquamarine: '#66cdaa',\n    mediumblue: '#0000cd',\n    mediumorchid: '#ba55d3',\n    mediumpurple: '#9370db',\n    mediumseagreen: '#3cb371',\n    mediumslateblue: '#7b68ee',\n    mediumspringgreen: '#00fa9a',\n    mediumturquoise: '#48d1cc',\n    mediumvioletred: '#c71585',\n    midnightblue: '#191970',\n    mintcream: '#f5fffa',\n    mistyrose: '#ffe4e1',\n    moccasin: '#ffe4b5',\n    navajowhite: '#ffdead',\n    navy: '#000080',\n    oldlace: '#fdf5e6',\n    olive: '#808000',\n    olivedrab: '#6b8e23',\n    orange: '#ffa500',\n    orangered: '#ff4500',\n    orchid: '#da70d6',\n    palegoldenrod: '#eee8aa',\n    palegreen: '#98fb98',\n    paleturquoise: '#afeeee',\n    palevioletred: '#db7093',\n    papayawhip: '#ffefd5',\n    peachpuff: '#ffdab9',\n    peru: '#cd853f',\n    pink: '#ffc0cb',\n    plum: '#dda0dd',\n    powderblue: '#b0e0e6',\n    purple: '#800080',\n    purple2: '#7f007f',\n    purple3: '#a020f0',\n    rebeccapurple: '#663399',\n    red: '#ff0000',\n    rosybrown: '#bc8f8f',\n    royalblue: '#4169e1',\n    saddlebrown: '#8b4513',\n    salmon: '#fa8072',\n    sandybrown: '#f4a460',\n    seagreen: '#2e8b57',\n    seashell: '#fff5ee',\n    sienna: '#a0522d',\n    silver: '#c0c0c0',\n    skyblue: '#87ceeb',\n    slateblue: '#6a5acd',\n    slategray: '#708090',\n    slategrey: '#708090',\n    snow: '#fffafa',\n    springgreen: '#00ff7f',\n    steelblue: '#4682b4',\n    tan: '#d2b48c',\n    teal: '#008080',\n    thistle: '#d8bfd8',\n    tomato: '#ff6347',\n    turquoise: '#40e0d0',\n    violet: '#ee82ee',\n    wheat: '#f5deb3',\n    white: '#ffffff',\n    whitesmoke: '#f5f5f5',\n    yellow: '#ffff00',\n    yellowgreen: '#9acd32'\n};\n\nexport default w3cx11;\n","import Color from '../../Color.js';\nimport input from '../input.js';\nimport { type } from '../../utils/index.js';\n\nimport w3cx11 from '../../colors/w3cx11.js';\nimport hex2rgb from '../hex/hex2rgb.js';\nimport rgb2hex from '../hex/rgb2hex.js';\n\nColor.prototype.name = function () {\n    const hex = rgb2hex(this._rgb, 'rgb');\n    for (let n of Object.keys(w3cx11)) {\n        if (w3cx11[n] === hex) return n.toLowerCase();\n    }\n    return hex;\n};\n\ninput.format.named = (name) => {\n    name = name.toLowerCase();\n    if (w3cx11[name]) return hex2rgb(w3cx11[name]);\n    throw new Error('unknown color name: ' + name);\n};\n\ninput.autodetect.push({\n    p: 5,\n    test: (h, ...rest) => {\n        if (!rest.length && type(h) === 'string' && w3cx11[h.toLowerCase()]) {\n            return 'named';\n        }\n    }\n});\n","import chroma from '../../chroma.js';\nimport Color from '../../Color.js';\nimport input from '../input.js';\nimport { type } from '../../utils/index.js';\nimport num2rgb from './num2rgb.js';\nimport rgb2num from './rgb2num.js';\n\nColor.prototype.num = function () {\n    return rgb2num(this._rgb);\n};\n\nchroma.num = (...args) => new Color(...args, 'num');\n\ninput.format.num = num2rgb;\n\ninput.autodetect.push({\n    p: 5,\n    test: (...args) => {\n        if (\n            args.length === 1 &&\n            type(args[0]) === 'number' &&\n            args[0] >= 0 &&\n            args[0] <= 0xffffff\n        ) {\n            return 'num';\n        }\n    }\n});\n","import { unpack } from '../../utils/index.js';\n\nconst rgb2num = (...args) => {\n    const [r, g, b] = unpack(args, 'rgb');\n    return (r << 16) + (g << 8) + b;\n};\n\nexport default rgb2num;\n","import { type } from '../../utils/index.js';\n\nconst num2rgb = (num) => {\n    if (type(num) == 'number' && num >= 0 && num <= 0xffffff) {\n        const r = num >> 16;\n        const g = (num >> 8) & 0xff;\n        const b = num & 0xff;\n        return [r, g, b, 1];\n    }\n    throw new Error('unknown num color: ' + num);\n};\n\nexport default num2rgb;\n","import chroma from '../../chroma.js';\nimport Color from '../../Color.js';\nimport input from '../input.js';\nimport { unpack, type } from '../../utils/index.js';\nconst { round } = Math;\n\nColor.prototype.rgb = function (rnd = true) {\n    if (rnd === false) return this._rgb.slice(0, 3);\n    return this._rgb.slice(0, 3).map(round);\n};\n\nColor.prototype.rgba = function (rnd = true) {\n    return this._rgb.slice(0, 4).map((v, i) => {\n        return i < 3 ? (rnd === false ? v : round(v)) : v;\n    });\n};\n\nchroma.rgb = (...args) => new Color(...args, 'rgb');\n\ninput.format.rgb = (...args) => {\n    const rgba = unpack(args, 'rgba');\n    if (rgba[3] === undefined) rgba[3] = 1;\n    return rgba;\n};\n\ninput.autodetect.push({\n    p: 3,\n    test: (...args) => {\n        args = unpack(args, 'rgba');\n        if (\n            type(args) === 'array' &&\n            (args.length === 3 ||\n                (args.length === 4 &&\n                    type(args[3]) == 'number' &&\n                    args[3] >= 0 &&\n                    args[3] <= 1))\n        ) {\n            return 'rgb';\n        }\n    }\n});\n","/*\n * Based on implementation by Neil Bartlett\n * https://github.com/neilbartlett/color-temperature\n */\n\nconst { log } = Math;\n\nconst temperature2rgb = (kelvin) => {\n    const temp = kelvin / 100;\n    let r, g, b;\n    if (temp < 66) {\n        r = 255;\n        g =\n            temp < 6\n                ? 0\n                : -155.25485562709179 -\n                  0.44596950469579133 * (g = temp - 2) +\n                  104.49216199393888 * log(g);\n        b =\n            temp < 20\n                ? 0\n                : -254.76935184120902 +\n                  0.8274096064007395 * (b = temp - 10) +\n                  115.67994401066147 * log(b);\n    } else {\n        r =\n            351.97690566805693 +\n            0.114206453784165 * (r = temp - 55) -\n            40.25366309332127 * log(r);\n        g =\n            325.4494125711974 +\n            0.07943456536662342 * (g = temp - 50) -\n            28.0852963507957 * log(g);\n        b = 255;\n    }\n    return [r, g, b, 1];\n};\n\nexport default temperature2rgb;\n","/*\n * Based on implementation by Neil Bartlett\n * https://github.com/neilbartlett/color-temperature\n **/\n\nimport temperature2rgb from './temperature2rgb.js';\nimport { unpack } from '../../utils/index.js';\nconst { round } = Math;\n\nconst rgb2temperature = (...args) => {\n    const rgb = unpack(args, 'rgb');\n    const r = rgb[0],\n        b = rgb[2];\n    let minTemp = 1000;\n    let maxTemp = 40000;\n    const eps = 0.4;\n    let temp;\n    while (maxTemp - minTemp > eps) {\n        temp = (maxTemp + minTemp) * 0.5;\n        const rgb = temperature2rgb(temp);\n        if (rgb[2] / rgb[0] >= b / r) {\n            maxTemp = temp;\n        } else {\n            minTemp = temp;\n        }\n    }\n    return round(temp);\n};\n\nexport default rgb2temperature;\n","import chroma from '../../chroma.js';\nimport Color from '../../Color.js';\nimport input from '../input.js';\nimport temperature2rgb from './temperature2rgb.js';\nimport rgb2temperature from './rgb2temperature.js';\n\nColor.prototype.temp =\n    Color.prototype.kelvin =\n    Color.prototype.temperature =\n        function () {\n            return rgb2temperature(this._rgb);\n        };\n\nchroma.temp =\n    chroma.kelvin =\n    chroma.temperature =\n        (...args) => new Color(...args, 'temp');\n\ninput.format.temp =\n    input.format.kelvin =\n    input.format.temperature =\n        temperature2rgb;\n","import { unpack } from '../../utils/index.js';\nconst { pow, sign } = Math;\n\n/*\n * L* [0..100]\n * a [-100..100]\n * b [-100..100]\n */\nconst oklab2rgb = (...args) => {\n    args = unpack(args, 'lab');\n    const [L, a, b] = args;\n\n    const l = pow(L + 0.3963377774 * a + 0.2158037573 * b, 3);\n    const m = pow(L - 0.1055613458 * a - 0.0638541728 * b, 3);\n    const s = pow(L - 0.0894841775 * a - 1.291485548 * b, 3);\n\n    return [\n        255 * lrgb2rgb(+4.0767416621 * l - 3.3077115913 * m + 0.2309699292 * s),\n        255 * lrgb2rgb(-1.2684380046 * l + 2.6097574011 * m - 0.3413193965 * s),\n        255 * lrgb2rgb(-0.0041960863 * l - 0.7034186147 * m + 1.707614701 * s),\n        args.length > 3 ? args[3] : 1\n    ];\n};\n\nexport default oklab2rgb;\n\nfunction lrgb2rgb(c) {\n    const abs = Math.abs(c);\n    if (abs > 0.0031308) {\n        return (sign(c) || 1) * (1.055 * pow(abs, 1 / 2.4) - 0.055);\n    }\n    return c * 12.92;\n}\n","import { unpack } from '../../utils/index.js';\nconst { cbrt, pow, sign } = Math;\n\nconst rgb2oklab = (...args) => {\n    // OKLab color space implementation taken from\n    // https://bottosson.github.io/posts/oklab/\n    const [r, g, b] = unpack(args, 'rgb');\n    const [lr, lg, lb] = [\n        rgb2lrgb(r / 255),\n        rgb2lrgb(g / 255),\n        rgb2lrgb(b / 255)\n    ];\n    const l = cbrt(0.4122214708 * lr + 0.5363325363 * lg + 0.0514459929 * lb);\n    const m = cbrt(0.2119034982 * lr + 0.6806995451 * lg + 0.1073969566 * lb);\n    const s = cbrt(0.0883024619 * lr + 0.2817188376 * lg + 0.6299787005 * lb);\n\n    return [\n        0.2104542553 * l + 0.793617785 * m - 0.0040720468 * s,\n        1.9779984951 * l - 2.428592205 * m + 0.4505937099 * s,\n        0.0259040371 * l + 0.7827717662 * m - 0.808675766 * s\n    ];\n};\n\nexport default rgb2oklab;\n\nfunction rgb2lrgb(c) {\n    const abs = Math.abs(c);\n    if (abs < 0.04045) {\n        return c / 12.92;\n    }\n    return (sign(c) || 1) * pow((abs + 0.055) / 1.055, 2.4);\n}\n","import { unpack, type } from '../../utils/index.js';\nimport chroma from '../../chroma.js';\nimport Color from '../../Color.js';\nimport input from '../input.js';\nimport oklab2rgb from './oklab2rgb.js';\nimport rgb2oklab from './rgb2oklab.js';\n\nColor.prototype.oklab = function () {\n    return rgb2oklab(this._rgb);\n};\n\nchroma.oklab = (...args) => new Color(...args, 'oklab');\n\ninput.format.oklab = oklab2rgb;\n\ninput.autodetect.push({\n    p: 3,\n    test: (...args) => {\n        args = unpack(args, 'oklab');\n        if (type(args) === 'array' && args.length === 3) {\n            return 'oklab';\n        }\n    }\n});\n","import { unpack, type } from '../../utils/index.js';\nimport chroma from '../../chroma.js';\nimport Color from '../../Color.js';\nimport input from '../input.js';\nimport oklch2rgb from './oklch2rgb.js';\nimport rgb2oklch from './rgb2oklch.js';\n\nColor.prototype.oklch = function () {\n    return rgb2oklch(this._rgb);\n};\n\nchroma.oklch = (...args) => new Color(...args, 'oklch');\n\ninput.format.oklch = oklch2rgb;\n\ninput.autodetect.push({\n    p: 3,\n    test: (...args) => {\n        args = unpack(args, 'oklch');\n        if (type(args) === 'array' && args.length === 3) {\n            return 'oklch';\n        }\n    }\n});\n","import { unpack } from '../../utils/index.js';\nimport rgb2oklab from '../oklab/rgb2oklab.js';\nimport lab2lch from '../lch/lab2lch.js';\n\nconst rgb2oklch = (...args) => {\n    const [r, g, b] = unpack(args, 'rgb');\n    const [l, a, b_] = rgb2oklab(r, g, b);\n    return lab2lch(l, a, b_);\n};\n\nexport default rgb2oklch;\n","import { unpack } from '../../utils/index.js';\nimport lch2lab from '../lch/lch2lab.js';\nimport oklab2rgb from '../oklab/oklab2rgb.js';\n\nconst oklch2rgb = (...args) => {\n    args = unpack(args, 'lch');\n    const [l, c, h] = args;\n    const [L, a, b_] = lch2lab(l, c, h);\n    const [r, g, b] = oklab2rgb(L, a, b_);\n    return [r, g, b, args.length > 3 ? args[3] : 1];\n};\n\nexport default oklch2rgb;\n","import Color from '../Color.js';\nimport { type } from '../utils/index.js';\n\nColor.prototype.alpha = function (a, mutate = false) {\n    if (a !== undefined && type(a) === 'number') {\n        if (mutate) {\n            this._rgb[3] = a;\n            return this;\n        }\n        return new Color([this._rgb[0], this._rgb[1], this._rgb[2], a], 'rgb');\n    }\n    return this._rgb[3];\n};\n","import Color from '../Color.js';\n\nColor.prototype.clipped = function () {\n    return this._rgb._clipped || false;\n};\n","import '../io/lab/index.js';\nimport Color from '../Color.js';\nimport LAB_CONSTANTS from '../io/lab/lab-constants.js';\n\nColor.prototype.darken = function (amount = 1) {\n    const me = this;\n    const lab = me.lab();\n    lab[0] -= LAB_CONSTANTS.Kn * amount;\n    return new Color(lab, 'lab').alpha(me.alpha(), true);\n};\n\nColor.prototype.brighten = function (amount = 1) {\n    return this.darken(-amount);\n};\n\nColor.prototype.darker = Color.prototype.darken;\nColor.prototype.brighter = Color.prototype.brighten;\n","import Color from '../Color.js';\n\nColor.prototype.get = function (mc) {\n    const [mode, channel] = mc.split('.');\n    const src = this[mode]();\n    if (channel) {\n        const i = mode.indexOf(channel) - (mode.substr(0, 2) === 'ok' ? 2 : 0);\n        if (i > -1) return src[i];\n        throw new Error(`unknown channel ${channel} in mode ${mode}`);\n    } else {\n        return src;\n    }\n};\n","import Color from '../Color.js';\nimport { type } from '../utils/index.js';\nconst { pow } = Math;\n\nconst EPS = 1e-7;\nconst MAX_ITER = 20;\n\nColor.prototype.luminance = function (lum, mode = 'rgb') {\n    if (lum !== undefined && type(lum) === 'number') {\n        if (lum === 0) {\n            // return pure black\n            return new Color([0, 0, 0, this._rgb[3]], 'rgb');\n        }\n        if (lum === 1) {\n            // return pure white\n            return new Color([255, 255, 255, this._rgb[3]], 'rgb');\n        }\n        // compute new color using...\n        let cur_lum = this.luminance();\n        let max_iter = MAX_ITER;\n\n        const test = (low, high) => {\n            const mid = low.interpolate(high, 0.5, mode);\n            const lm = mid.luminance();\n            if (Math.abs(lum - lm) < EPS || !max_iter--) {\n                // close enough\n                return mid;\n            }\n            return lm > lum ? test(low, mid) : test(mid, high);\n        };\n\n        const rgb = (\n            cur_lum > lum\n                ? test(new Color([0, 0, 0]), this)\n                : test(this, new Color([255, 255, 255]))\n        ).rgb();\n        return new Color([...rgb, this._rgb[3]]);\n    }\n    return rgb2luminance(...this._rgb.slice(0, 3));\n};\n\nconst rgb2luminance = (r, g, b) => {\n    // relative luminance\n    // see http://www.w3.org/TR/2008/REC-WCAG20-20081211/#relativeluminancedef\n    r = luminance_x(r);\n    g = luminance_x(g);\n    b = luminance_x(b);\n    return 0.2126 * r + 0.7152 * g + 0.0722 * b;\n};\n\nconst luminance_x = (x) => {\n    x /= 255;\n    return x <= 0.03928 ? x / 12.92 : pow((x + 0.055) / 1.055, 2.4);\n};\n","export default {};\n","import Color from '../Color.js';\nimport { type } from '../utils/index.js';\nimport interpolator from '../interpolator/index.js';\n\nexport default (col1, col2, f = 0.5, ...rest) => {\n    let mode = rest[0] || 'lrgb';\n    if (!interpolator[mode] && !rest.length) {\n        // fall back to the first supported mode\n        mode = Object.keys(interpolator)[0];\n    }\n    if (!interpolator[mode]) {\n        throw new Error(`interpolation mode ${mode} is not defined`);\n    }\n    if (type(col1) !== 'object') col1 = new Color(col1);\n    if (type(col2) !== 'object') col2 = new Color(col2);\n    return interpolator[mode](col1, col2, f).alpha(\n        col1.alpha() + f * (col2.alpha() - col1.alpha())\n    );\n};\n","import Color from '../Color.js';\nimport mix from '../generator/mix.js';\n\nColor.prototype.mix = Color.prototype.interpolate = function (\n    col2,\n    f = 0.5,\n    ...rest\n) {\n    return mix(this, col2, f, ...rest);\n};\n","import Color from '../Color.js';\n\nColor.prototype.premultiply = function (mutate = false) {\n    const rgb = this._rgb;\n    const a = rgb[3];\n    if (mutate) {\n        this._rgb = [rgb[0] * a, rgb[1] * a, rgb[2] * a, a];\n        return this;\n    } else {\n        return new Color([rgb[0] * a, rgb[1] * a, rgb[2] * a, a], 'rgb');\n    }\n};\n","import '../io/lch/index.js';\nimport Color from '../Color.js';\nimport LAB_CONSTANTS from '../io/lab/lab-constants.js';\n\nColor.prototype.saturate = function (amount = 1) {\n    const me = this;\n    const lch = me.lch();\n    lch[1] += LAB_CONSTANTS.Kn * amount;\n    if (lch[1] < 0) lch[1] = 0;\n    return new Color(lch, 'lch').alpha(me.alpha(), true);\n};\n\nColor.prototype.desaturate = function (amount = 1) {\n    return this.saturate(-amount);\n};\n","import Color from '../Color.js';\nimport { type } from '../utils/index.js';\n\nColor.prototype.set = function (mc, value, mutate = false) {\n    const [mode, channel] = mc.split('.');\n    const src = this[mode]();\n    if (channel) {\n        const i = mode.indexOf(channel) - (mode.substr(0, 2) === 'ok' ? 2 : 0);\n        if (i > -1) {\n            if (type(value) == 'string') {\n                switch (value.charAt(0)) {\n                    case '+':\n                        src[i] += +value;\n                        break;\n                    case '-':\n                        src[i] += +value;\n                        break;\n                    case '*':\n                        src[i] *= +value.substr(1);\n                        break;\n                    case '/':\n                        src[i] /= +value.substr(1);\n                        break;\n                    default:\n                        src[i] = +value;\n                }\n            } else if (type(value) === 'number') {\n                src[i] = value;\n            } else {\n                throw new Error(`unsupported value for Color.set`);\n            }\n            const out = new Color(src, mode);\n            if (mutate) {\n                this._rgb = out._rgb;\n                return this;\n            }\n            return out;\n        }\n        throw new Error(`unknown channel ${channel} in mode ${mode}`);\n    } else {\n        return src;\n    }\n};\n","import '../io/lab/index.js';\nimport Color from '../Color.js';\nimport mix from '../generator/mix.js';\n\nColor.prototype.tint = function (f = 0.5, ...rest) {\n    return mix(this, 'white', f, ...rest);\n};\n\nColor.prototype.shade = function (f = 0.5, ...rest) {\n    return mix(this, 'black', f, ...rest);\n};\n","import Color from '../Color.js';\nimport index from './index.js';\n\nconst rgb = (col1, col2, f) => {\n    const xyz0 = col1._rgb;\n    const xyz1 = col2._rgb;\n    return new Color(\n        xyz0[0] + f * (xyz1[0] - xyz0[0]),\n        xyz0[1] + f * (xyz1[1] - xyz0[1]),\n        xyz0[2] + f * (xyz1[2] - xyz0[2]),\n        'rgb'\n    );\n};\n\n// register interpolator\nindex.rgb = rgb;\n\nexport default rgb;\n","import Color from '../Color.js';\nconst { sqrt, pow } = Math;\nimport index from './index.js';\n\nconst lrgb = (col1, col2, f) => {\n    const [x1, y1, z1] = col1._rgb;\n    const [x2, y2, z2] = col2._rgb;\n    return new Color(\n        sqrt(pow(x1, 2) * (1 - f) + pow(x2, 2) * f),\n        sqrt(pow(y1, 2) * (1 - f) + pow(y2, 2) * f),\n        sqrt(pow(z1, 2) * (1 - f) + pow(z2, 2) * f),\n        'rgb'\n    );\n};\n\n// register interpolator\nindex.lrgb = lrgb;\n\nexport default lrgb;\n","import '../io/lab/index.js';\nimport index from './index.js';\nimport Color from '../Color.js';\n\nconst lab = (col1, col2, f) => {\n    const xyz0 = col1.lab();\n    const xyz1 = col2.lab();\n    return new Color(\n        xyz0[0] + f * (xyz1[0] - xyz0[0]),\n        xyz0[1] + f * (xyz1[1] - xyz0[1]),\n        xyz0[2] + f * (xyz1[2] - xyz0[2]),\n        'lab'\n    );\n};\n\n// register interpolator\nindex.lab = lab;\n\nexport default lab;\n","import Color from '../Color.js';\n\nexport default (col1, col2, f, m) => {\n    let xyz0, xyz1;\n    if (m === 'hsl') {\n        xyz0 = col1.hsl();\n        xyz1 = col2.hsl();\n    } else if (m === 'hsv') {\n        xyz0 = col1.hsv();\n        xyz1 = col2.hsv();\n    } else if (m === 'hcg') {\n        xyz0 = col1.hcg();\n        xyz1 = col2.hcg();\n    } else if (m === 'hsi') {\n        xyz0 = col1.hsi();\n        xyz1 = col2.hsi();\n    } else if (m === 'lch' || m === 'hcl') {\n        m = 'hcl';\n        xyz0 = col1.hcl();\n        xyz1 = col2.hcl();\n    } else if (m === 'oklch') {\n        xyz0 = col1.oklch().reverse();\n        xyz1 = col2.oklch().reverse();\n    }\n\n    let hue0, hue1, sat0, sat1, lbv0, lbv1;\n    if (m.substr(0, 1) === 'h' || m === 'oklch') {\n        [hue0, sat0, lbv0] = xyz0;\n        [hue1, sat1, lbv1] = xyz1;\n    }\n\n    let sat, hue, lbv, dh;\n\n    if (!isNaN(hue0) && !isNaN(hue1)) {\n        // both colors have hue\n        if (hue1 > hue0 && hue1 - hue0 > 180) {\n            dh = hue1 - (hue0 + 360);\n        } else if (hue1 < hue0 && hue0 - hue1 > 180) {\n            dh = hue1 + 360 - hue0;\n        } else {\n            dh = hue1 - hue0;\n        }\n        hue = hue0 + f * dh;\n    } else if (!isNaN(hue0)) {\n        hue = hue0;\n        if ((lbv1 == 1 || lbv1 == 0) && m != 'hsv') sat = sat0;\n    } else if (!isNaN(hue1)) {\n        hue = hue1;\n        if ((lbv0 == 1 || lbv0 == 0) && m != 'hsv') sat = sat1;\n    } else {\n        hue = Number.NaN;\n    }\n\n    if (sat === undefined) sat = sat0 + f * (sat1 - sat0);\n    lbv = lbv0 + f * (lbv1 - lbv0);\n    return m === 'oklch'\n        ? new Color([lbv, sat, hue], m)\n        : new Color([hue, sat, lbv], m);\n};\n","import '../io/lch/index.js';\nimport interpolate_hsx from './_hsx.js';\nimport index from './index.js';\n\nconst lch = (col1, col2, f) => {\n    return interpolate_hsx(col1, col2, f, 'lch');\n};\n\n// register interpolator\nindex.lch = lch;\nindex.hcl = lch;\n\nexport default lch;\n","import '../io/num/index.js';\nimport index from './index.js';\n\nimport Color from '../Color.js';\n\nconst num = (col1, col2, f) => {\n    const c1 = col1.num();\n    const c2 = col2.num();\n    return new Color(c1 + f * (c2 - c1), 'num');\n};\n\n// register interpolator\nindex.num = num;\n\nexport default num;\n","import '../io/hcg/index.js';\nimport interpolate_hsx from './_hsx.js';\nimport index from './index.js';\n\nconst hcg = (col1, col2, f) => {\n    return interpolate_hsx(col1, col2, f, 'hcg');\n};\n\n// register interpolator\nindex.hcg = hcg;\n\nexport default hcg;\n","import '../io/hsi/index.js';\nimport interpolate_hsx from './_hsx.js';\nimport index from './index.js';\n\nconst hsi = (col1, col2, f) => {\n    return interpolate_hsx(col1, col2, f, 'hsi');\n};\n\n// register interpolator\nindex.hsi = hsi;\n\nexport default hsi;\n","import '../io/hsl/index.js';\nimport interpolate_hsx from './_hsx.js';\nimport index from './index.js';\n\nconst hsl = (col1, col2, f) => {\n    return interpolate_hsx(col1, col2, f, 'hsl');\n};\n\n// register interpolator\nindex.hsl = hsl;\n\nexport default hsl;\n","import '../io/hsv/index.js';\nimport interpolate_hsx from './_hsx.js';\nimport index from './index.js';\n\nconst hsv = (col1, col2, f) => {\n    return interpolate_hsx(col1, col2, f, 'hsv');\n};\n\n// register interpolator\nindex.hsv = hsv;\n\nexport default hsv;\n","import '../io/oklab/index.js';\nimport index from './index.js';\nimport Color from '../Color.js';\n\nconst oklab = (col1, col2, f) => {\n    const xyz0 = col1.oklab();\n    const xyz1 = col2.oklab();\n    return new Color(\n        xyz0[0] + f * (xyz1[0] - xyz0[0]),\n        xyz0[1] + f * (xyz1[1] - xyz0[1]),\n        xyz0[2] + f * (xyz1[2] - xyz0[2]),\n        'oklab'\n    );\n};\n\n// register interpolator\nindex.oklab = oklab;\n\nexport default oklab;\n","import '../io/lch/index.js';\nimport interpolate_hsx from './_hsx.js';\nimport index from './index.js';\n\nconst oklch = (col1, col2, f) => {\n    return interpolate_hsx(col1, col2, f, 'oklch');\n};\n\n// register interpolator\nindex.oklch = oklch;\n\nexport default oklch;\n","import Color from '../Color.js';\nimport { clip_rgb } from '../utils/index.js';\n\nconst { pow, sqrt, PI, cos, sin, atan2 } = Math;\n\nexport default (colors, mode = 'lrgb', weights = null) => {\n    const l = colors.length;\n    if (!weights) weights = Array.from(new Array(l)).map(() => 1);\n    // normalize weights\n    const k =\n        l /\n        weights.reduce(function (a, b) {\n            return a + b;\n        });\n    weights.forEach((w, i) => {\n        weights[i] *= k;\n    });\n    // convert colors to Color objects\n    colors = colors.map((c) => new Color(c));\n    if (mode === 'lrgb') {\n        return _average_lrgb(colors, weights);\n    }\n    const first = colors.shift();\n    const xyz = first.get(mode);\n    const cnt = [];\n    let dx = 0;\n    let dy = 0;\n    // initial color\n    for (let i = 0; i < xyz.length; i++) {\n        xyz[i] = (xyz[i] || 0) * weights[0];\n        cnt.push(isNaN(xyz[i]) ? 0 : weights[0]);\n        if (mode.charAt(i) === 'h' && !isNaN(xyz[i])) {\n            const A = (xyz[i] / 180) * PI;\n            dx += cos(A) * weights[0];\n            dy += sin(A) * weights[0];\n        }\n    }\n\n    let alpha = first.alpha() * weights[0];\n    colors.forEach((c, ci) => {\n        const xyz2 = c.get(mode);\n        alpha += c.alpha() * weights[ci + 1];\n        for (let i = 0; i < xyz.length; i++) {\n            if (!isNaN(xyz2[i])) {\n                cnt[i] += weights[ci + 1];\n                if (mode.charAt(i) === 'h') {\n                    const A = (xyz2[i] / 180) * PI;\n                    dx += cos(A) * weights[ci + 1];\n                    dy += sin(A) * weights[ci + 1];\n                } else {\n                    xyz[i] += xyz2[i] * weights[ci + 1];\n                }\n            }\n        }\n    });\n\n    for (let i = 0; i < xyz.length; i++) {\n        if (mode.charAt(i) === 'h') {\n            let A = (atan2(dy / cnt[i], dx / cnt[i]) / PI) * 180;\n            while (A < 0) A += 360;\n            while (A >= 360) A -= 360;\n            xyz[i] = A;\n        } else {\n            xyz[i] = xyz[i] / cnt[i];\n        }\n    }\n    alpha /= l;\n    return new Color(xyz, mode).alpha(alpha > 0.99999 ? 1 : alpha, true);\n};\n\nconst _average_lrgb = (colors, weights) => {\n    const l = colors.length;\n    const xyz = [0, 0, 0, 0];\n    for (let i = 0; i < colors.length; i++) {\n        const col = colors[i];\n        const f = weights[i] / l;\n        const rgb = col._rgb;\n        xyz[0] += pow(rgb[0], 2) * f;\n        xyz[1] += pow(rgb[1], 2) * f;\n        xyz[2] += pow(rgb[2], 2) * f;\n        xyz[3] += rgb[3] * f;\n    }\n    xyz[0] = sqrt(xyz[0]);\n    xyz[1] = sqrt(xyz[1]);\n    xyz[2] = sqrt(xyz[2]);\n    if (xyz[3] > 0.9999999) xyz[3] = 1;\n    return new Color(clip_rgb(xyz));\n};\n","// minimal multi-purpose interface\n\n// @requires utils color analyze\nimport chroma from '../chroma.js';\nimport { limit, type } from '../utils/index.js';\n\nconst { pow } = Math;\n\nexport default function (colors) {\n    // constructor\n    let _mode = 'rgb';\n    let _nacol = chroma('#ccc');\n    let _spread = 0;\n    // const _fixed = false;\n    let _domain = [0, 1];\n    let _pos = [];\n    let _padding = [0, 0];\n    let _classes = false;\n    let _colors = [];\n    let _out = false;\n    let _min = 0;\n    let _max = 1;\n    let _correctLightness = false;\n    let _colorCache = {};\n    let _useCache = true;\n    let _gamma = 1;\n\n    // private methods\n\n    const setColors = function (colors) {\n        colors = colors || ['#fff', '#000'];\n        if (\n            colors &&\n            type(colors) === 'string' &&\n            chroma.brewer &&\n            chroma.brewer[colors.toLowerCase()]\n        ) {\n            colors = chroma.brewer[colors.toLowerCase()];\n        }\n        if (type(colors) === 'array') {\n            // handle single color\n            if (colors.length === 1) {\n                colors = [colors[0], colors[0]];\n            }\n            // make a copy of the colors\n            colors = colors.slice(0);\n            // convert to chroma classes\n            for (let c = 0; c < colors.length; c++) {\n                colors[c] = chroma(colors[c]);\n            }\n            // auto-fill color position\n            _pos.length = 0;\n            for (let c = 0; c < colors.length; c++) {\n                _pos.push(c / (colors.length - 1));\n            }\n        }\n        resetCache();\n        return (_colors = colors);\n    };\n\n    const getClass = function (value) {\n        if (_classes != null) {\n            const n = _classes.length - 1;\n            let i = 0;\n            while (i < n && value >= _classes[i]) {\n                i++;\n            }\n            return i - 1;\n        }\n        return 0;\n    };\n\n    let tMapLightness = (t) => t;\n    let tMapDomain = (t) => t;\n\n    // const classifyValue = function(value) {\n    //     let val = value;\n    //     if (_classes.length > 2) {\n    //         const n = _classes.length-1;\n    //         const i = getClass(value);\n    //         const minc = _classes[0] + ((_classes[1]-_classes[0]) * (0 + (_spread * 0.5)));  // center of 1st class\n    //         const maxc = _classes[n-1] + ((_classes[n]-_classes[n-1]) * (1 - (_spread * 0.5)));  // center of last class\n    //         val = _min + ((((_classes[i] + ((_classes[i+1] - _classes[i]) * 0.5)) - minc) / (maxc-minc)) * (_max - _min));\n    //     }\n    //     return val;\n    // };\n\n    const getColor = function (val, bypassMap) {\n        let col, t;\n        if (bypassMap == null) {\n            bypassMap = false;\n        }\n        if (isNaN(val) || val === null) {\n            return _nacol;\n        }\n        if (!bypassMap) {\n            if (_classes && _classes.length > 2) {\n                // find the class\n                const c = getClass(val);\n                t = c / (_classes.length - 2);\n            } else if (_max !== _min) {\n                // just interpolate between min/max\n                t = (val - _min) / (_max - _min);\n            } else {\n                t = 1;\n            }\n        } else {\n            t = val;\n        }\n\n        // domain map\n        t = tMapDomain(t);\n\n        if (!bypassMap) {\n            t = tMapLightness(t); // lightness correction\n        }\n\n        if (_gamma !== 1) {\n            t = pow(t, _gamma);\n        }\n\n        t = _padding[0] + t * (1 - _padding[0] - _padding[1]);\n\n        t = limit(t, 0, 1);\n\n        const k = Math.floor(t * 10000);\n\n        if (_useCache && _colorCache[k]) {\n            col = _colorCache[k];\n        } else {\n            if (type(_colors) === 'array') {\n                //for i in [0.._pos.length-1]\n                for (let i = 0; i < _pos.length; i++) {\n                    const p = _pos[i];\n                    if (t <= p) {\n                        col = _colors[i];\n                        break;\n                    }\n                    if (t >= p && i === _pos.length - 1) {\n                        col = _colors[i];\n                        break;\n                    }\n                    if (t > p && t < _pos[i + 1]) {\n                        t = (t - p) / (_pos[i + 1] - p);\n                        col = chroma.interpolate(\n                            _colors[i],\n                            _colors[i + 1],\n                            t,\n                            _mode\n                        );\n                        break;\n                    }\n                }\n            } else if (type(_colors) === 'function') {\n                col = _colors(t);\n            }\n            if (_useCache) {\n                _colorCache[k] = col;\n            }\n        }\n        return col;\n    };\n\n    var resetCache = () => (_colorCache = {});\n\n    setColors(colors);\n\n    // public interface\n\n    const f = function (v) {\n        const c = chroma(getColor(v));\n        if (_out && c[_out]) {\n            return c[_out]();\n        } else {\n            return c;\n        }\n    };\n\n    f.classes = function (classes) {\n        if (classes != null) {\n            if (type(classes) === 'array') {\n                _classes = classes;\n                _domain = [classes[0], classes[classes.length - 1]];\n            } else {\n                const d = chroma.analyze(_domain);\n                if (classes === 0) {\n                    _classes = [d.min, d.max];\n                } else {\n                    _classes = chroma.limits(d, 'e', classes);\n                }\n            }\n            return f;\n        }\n        return _classes;\n    };\n\n    f.domain = function (domain) {\n        if (!arguments.length) {\n            return _domain;\n        }\n        _min = domain[0];\n        _max = domain[domain.length - 1];\n        _pos = [];\n        const k = _colors.length;\n        if (domain.length === k && _min !== _max) {\n            // update positions\n            for (let d of Array.from(domain)) {\n                _pos.push((d - _min) / (_max - _min));\n            }\n        } else {\n            for (let c = 0; c < k; c++) {\n                _pos.push(c / (k - 1));\n            }\n            if (domain.length > 2) {\n                // set domain map\n                const tOut = domain.map((d, i) => i / (domain.length - 1));\n                const tBreaks = domain.map((d) => (d - _min) / (_max - _min));\n                if (!tBreaks.every((val, i) => tOut[i] === val)) {\n                    tMapDomain = (t) => {\n                        if (t <= 0 || t >= 1) return t;\n                        let i = 0;\n                        while (t >= tBreaks[i + 1]) i++;\n                        const f =\n                            (t - tBreaks[i]) / (tBreaks[i + 1] - tBreaks[i]);\n                        const out = tOut[i] + f * (tOut[i + 1] - tOut[i]);\n                        return out;\n                    };\n                }\n            }\n        }\n        _domain = [_min, _max];\n        return f;\n    };\n\n    f.mode = function (_m) {\n        if (!arguments.length) {\n            return _mode;\n        }\n        _mode = _m;\n        resetCache();\n        return f;\n    };\n\n    f.range = function (colors, _pos) {\n        setColors(colors, _pos);\n        return f;\n    };\n\n    f.out = function (_o) {\n        _out = _o;\n        return f;\n    };\n\n    f.spread = function (val) {\n        if (!arguments.length) {\n            return _spread;\n        }\n        _spread = val;\n        return f;\n    };\n\n    f.correctLightness = function (v) {\n        if (v == null) {\n            v = true;\n        }\n        _correctLightness = v;\n        resetCache();\n        if (_correctLightness) {\n            tMapLightness = function (t) {\n                const L0 = getColor(0, true).lab()[0];\n                const L1 = getColor(1, true).lab()[0];\n                const pol = L0 > L1;\n                let L_actual = getColor(t, true).lab()[0];\n                const L_ideal = L0 + (L1 - L0) * t;\n                let L_diff = L_actual - L_ideal;\n                let t0 = 0;\n                let t1 = 1;\n                let max_iter = 20;\n                while (Math.abs(L_diff) > 1e-2 && max_iter-- > 0) {\n                    (function () {\n                        if (pol) {\n                            L_diff *= -1;\n                        }\n                        if (L_diff < 0) {\n                            t0 = t;\n                            t += (t1 - t) * 0.5;\n                        } else {\n                            t1 = t;\n                            t += (t0 - t) * 0.5;\n                        }\n                        L_actual = getColor(t, true).lab()[0];\n                        return (L_diff = L_actual - L_ideal);\n                    })();\n                }\n                return t;\n            };\n        } else {\n            tMapLightness = (t) => t;\n        }\n        return f;\n    };\n\n    f.padding = function (p) {\n        if (p != null) {\n            if (type(p) === 'number') {\n                p = [p, p];\n            }\n            _padding = p;\n            return f;\n        } else {\n            return _padding;\n        }\n    };\n\n    f.colors = function (numColors, out) {\n        // If no arguments are given, return the original colors that were provided\n        if (arguments.length < 2) {\n            out = 'hex';\n        }\n        let result = [];\n\n        if (arguments.length === 0) {\n            result = _colors.slice(0);\n        } else if (numColors === 1) {\n            result = [f(0.5)];\n        } else if (numColors > 1) {\n            const dm = _domain[0];\n            const dd = _domain[1] - dm;\n            result = __range__(0, numColors, false).map((i) =>\n                f(dm + (i / (numColors - 1)) * dd)\n            );\n        } else {\n            // returns all colors based on the defined classes\n            colors = [];\n            let samples = [];\n            if (_classes && _classes.length > 2) {\n                for (\n                    let i = 1, end = _classes.length, asc = 1 <= end;\n                    asc ? i < end : i > end;\n                    asc ? i++ : i--\n                ) {\n                    samples.push((_classes[i - 1] + _classes[i]) * 0.5);\n                }\n            } else {\n                samples = _domain;\n            }\n            result = samples.map((v) => f(v));\n        }\n\n        if (chroma[out]) {\n            result = result.map((c) => c[out]());\n        }\n        return result;\n    };\n\n    f.cache = function (c) {\n        if (c != null) {\n            _useCache = c;\n            return f;\n        } else {\n            return _useCache;\n        }\n    };\n\n    f.gamma = function (g) {\n        if (g != null) {\n            _gamma = g;\n            return f;\n        } else {\n            return _gamma;\n        }\n    };\n\n    f.nodata = function (d) {\n        if (d != null) {\n            _nacol = chroma(d);\n            return f;\n        } else {\n            return _nacol;\n        }\n    };\n\n    return f;\n}\n\nfunction __range__(left, right, inclusive) {\n    let range = [];\n    let ascending = left < right;\n    let end = !inclusive ? right : ascending ? right + 1 : right - 1;\n    for (let i = left; ascending ? i < end : i > end; ascending ? i++ : i--) {\n        range.push(i);\n    }\n    return range;\n}\n","//\n// interpolates between a set of colors uzing a bezier spline\n//\n\n// @requires utils lab\nimport Color from '../Color.js';\nimport '../io/lab/index.js';\nimport scale from './scale.js';\n\n// nth row of the pascal triangle\nconst binom_row = function (n) {\n    let row = [1, 1];\n    for (let i = 1; i < n; i++) {\n        let newrow = [1];\n        for (let j = 1; j <= row.length; j++) {\n            newrow[j] = (row[j] || 0) + row[j - 1];\n        }\n        row = newrow;\n    }\n    return row;\n};\n\nconst bezier = function (colors) {\n    let I, lab0, lab1, lab2;\n    colors = colors.map((c) => new Color(c));\n    if (colors.length === 2) {\n        // linear interpolation\n        [lab0, lab1] = colors.map((c) => c.lab());\n        I = function (t) {\n            const lab = [0, 1, 2].map((i) => lab0[i] + t * (lab1[i] - lab0[i]));\n            return new Color(lab, 'lab');\n        };\n    } else if (colors.length === 3) {\n        // quadratic bezier interpolation\n        [lab0, lab1, lab2] = colors.map((c) => c.lab());\n        I = function (t) {\n            const lab = [0, 1, 2].map(\n                (i) =>\n                    (1 - t) * (1 - t) * lab0[i] +\n                    2 * (1 - t) * t * lab1[i] +\n                    t * t * lab2[i]\n            );\n            return new Color(lab, 'lab');\n        };\n    } else if (colors.length === 4) {\n        // cubic bezier interpolation\n        let lab3;\n        [lab0, lab1, lab2, lab3] = colors.map((c) => c.lab());\n        I = function (t) {\n            const lab = [0, 1, 2].map(\n                (i) =>\n                    (1 - t) * (1 - t) * (1 - t) * lab0[i] +\n                    3 * (1 - t) * (1 - t) * t * lab1[i] +\n                    3 * (1 - t) * t * t * lab2[i] +\n                    t * t * t * lab3[i]\n            );\n            return new Color(lab, 'lab');\n        };\n    } else if (colors.length >= 5) {\n        // general case (degree n bezier)\n        let labs, row, n;\n        labs = colors.map((c) => c.lab());\n        n = colors.length - 1;\n        row = binom_row(n);\n        I = function (t) {\n            const u = 1 - t;\n            const lab = [0, 1, 2].map((i) =>\n                labs.reduce(\n                    (sum, el, j) =>\n                        sum + row[j] * u ** (n - j) * t ** j * el[i],\n                    0\n                )\n            );\n            return new Color(lab, 'lab');\n        };\n    } else {\n        throw new RangeError('No point in running bezier with only one color.');\n    }\n    return I;\n};\n\nexport default (colors) => {\n    const f = bezier(colors);\n    f.scale = () => scale(f);\n    return f;\n};\n","/*\n * interpolates between a set of colors uzing a bezier spline\n * blend mode formulas taken from https://web.archive.org/web/20180110014946/http://www.venture-ware.com/kevin/coding/lets-learn-math-photoshop-blend-modes/\n */\n\nimport '../io/rgb/index.js';\nimport chroma from '../chroma.js';\n\nconst blend = (bottom, top, mode) => {\n    if (!blend[mode]) {\n        throw new Error('unknown blend mode ' + mode);\n    }\n    return blend[mode](bottom, top);\n};\n\nconst blend_f = (f) => (bottom, top) => {\n    const c0 = chroma(top).rgb();\n    const c1 = chroma(bottom).rgb();\n    return chroma.rgb(f(c0, c1));\n};\n\nconst each = (f) => (c0, c1) => {\n    const out = [];\n    out[0] = f(c0[0], c1[0]);\n    out[1] = f(c0[1], c1[1]);\n    out[2] = f(c0[2], c1[2]);\n    return out;\n};\n\nconst normal = (a) => a;\nconst multiply = (a, b) => (a * b) / 255;\nconst darken = (a, b) => (a > b ? b : a);\nconst lighten = (a, b) => (a > b ? a : b);\nconst screen = (a, b) => 255 * (1 - (1 - a / 255) * (1 - b / 255));\nconst overlay = (a, b) =>\n    b < 128 ? (2 * a * b) / 255 : 255 * (1 - 2 * (1 - a / 255) * (1 - b / 255));\nconst burn = (a, b) => 255 * (1 - (1 - b / 255) / (a / 255));\nconst dodge = (a, b) => {\n    if (a === 255) return 255;\n    a = (255 * (b / 255)) / (1 - a / 255);\n    return a > 255 ? 255 : a;\n};\n\n// # add = (a,b) ->\n// #     if (a + b > 255) then 255 else a + b\n\nblend.normal = blend_f(each(normal));\nblend.multiply = blend_f(each(multiply));\nblend.screen = blend_f(each(screen));\nblend.overlay = blend_f(each(overlay));\nblend.darken = blend_f(each(darken));\nblend.lighten = blend_f(each(lighten));\nblend.dodge = blend_f(each(dodge));\nblend.burn = blend_f(each(burn));\n// blend.add = blend_f(each(add));\n\nexport default blend;\n","// cubehelix interpolation\n// based on D.A. Green \"A colour scheme for the display of astronomical intensity images\"\n// http://astron-soc.in/bulletin/11June/289392011.pdf\nimport { type, clip_rgb, TWOPI } from '../utils/index.js';\nimport chroma from '../chroma.js';\nconst { pow, sin, cos } = Math;\n\nexport default function (\n    start = 300,\n    rotations = -1.5,\n    hue = 1,\n    gamma = 1,\n    lightness = [0, 1]\n) {\n    let dh = 0,\n        dl;\n    if (type(lightness) === 'array') {\n        dl = lightness[1] - lightness[0];\n    } else {\n        dl = 0;\n        lightness = [lightness, lightness];\n    }\n    const f = function (fract) {\n        const a = TWOPI * ((start + 120) / 360 + rotations * fract);\n        const l = pow(lightness[0] + dl * fract, gamma);\n        const h = dh !== 0 ? hue[0] + fract * dh : hue;\n        const amp = (h * l * (1 - l)) / 2;\n        const cos_a = cos(a);\n        const sin_a = sin(a);\n        const r = l + amp * (-0.14861 * cos_a + 1.78277 * sin_a);\n        const g = l + amp * (-0.29227 * cos_a - 0.90649 * sin_a);\n        const b = l + amp * (+1.97294 * cos_a);\n        return chroma(clip_rgb([r * 255, g * 255, b * 255, 1]));\n    };\n    f.start = function (s) {\n        if (s == null) {\n            return start;\n        }\n        start = s;\n        return f;\n    };\n    f.rotations = function (r) {\n        if (r == null) {\n            return rotations;\n        }\n        rotations = r;\n        return f;\n    };\n    f.gamma = function (g) {\n        if (g == null) {\n            return gamma;\n        }\n        gamma = g;\n        return f;\n    };\n    f.hue = function (h) {\n        if (h == null) {\n            return hue;\n        }\n        hue = h;\n        if (type(hue) === 'array') {\n            dh = hue[1] - hue[0];\n            if (dh === 0) {\n                hue = hue[1];\n            }\n        } else {\n            dh = 0;\n        }\n        return f;\n    };\n    f.lightness = function (h) {\n        if (h == null) {\n            return lightness;\n        }\n        if (type(h) === 'array') {\n            lightness = h;\n            dl = h[1] - h[0];\n        } else {\n            lightness = [h, h];\n            dl = 0;\n        }\n        return f;\n    };\n    f.scale = () => chroma.scale(f);\n    f.hue(hue);\n    return f;\n}\n","import Color from '../Color.js';\nconst digits = '0123456789abcdef';\n\nconst { floor, random } = Math;\n\nexport default () => {\n    let code = '#';\n    for (let i = 0; i < 6; i++) {\n        code += digits.charAt(floor(random() * 16));\n    }\n    return new Color(code, 'hex');\n};\n","import type from './type.js';\n\nconst { log, pow, floor, abs } = Math;\n\nexport function analyze(data, key = null) {\n    const r = {\n        min: Number.MAX_VALUE,\n        max: Number.MAX_VALUE * -1,\n        sum: 0,\n        values: [],\n        count: 0\n    };\n    if (type(data) === 'object') {\n        data = Object.values(data);\n    }\n    data.forEach((val) => {\n        if (key && type(val) === 'object') val = val[key];\n        if (val !== undefined && val !== null && !isNaN(val)) {\n            r.values.push(val);\n            r.sum += val;\n            if (val < r.min) r.min = val;\n            if (val > r.max) r.max = val;\n            r.count += 1;\n        }\n    });\n\n    r.domain = [r.min, r.max];\n\n    r.limits = (mode, num) => limits(r, mode, num);\n\n    return r;\n}\n\nexport function limits(data, mode = 'equal', num = 7) {\n    if (type(data) == 'array') {\n        data = analyze(data);\n    }\n    const { min, max } = data;\n    const values = data.values.sort((a, b) => a - b);\n\n    if (num === 1) {\n        return [min, max];\n    }\n\n    const limits = [];\n\n    if (mode.substr(0, 1) === 'c') {\n        // continuous\n        limits.push(min);\n        limits.push(max);\n    }\n\n    if (mode.substr(0, 1) === 'e') {\n        // equal interval\n        limits.push(min);\n        for (let i = 1; i < num; i++) {\n            limits.push(min + (i / num) * (max - min));\n        }\n        limits.push(max);\n    } else if (mode.substr(0, 1) === 'l') {\n        // log scale\n        if (min <= 0) {\n            throw new Error(\n                'Logarithmic scales are only possible for values > 0'\n            );\n        }\n        const min_log = Math.LOG10E * log(min);\n        const max_log = Math.LOG10E * log(max);\n        limits.push(min);\n        for (let i = 1; i < num; i++) {\n            limits.push(pow(10, min_log + (i / num) * (max_log - min_log)));\n        }\n        limits.push(max);\n    } else if (mode.substr(0, 1) === 'q') {\n        // quantile scale\n        limits.push(min);\n        for (let i = 1; i < num; i++) {\n            const p = ((values.length - 1) * i) / num;\n            const pb = floor(p);\n            if (pb === p) {\n                limits.push(values[pb]);\n            } else {\n                // p > pb\n                const pr = p - pb;\n                limits.push(values[pb] * (1 - pr) + values[pb + 1] * pr);\n            }\n        }\n        limits.push(max);\n    } else if (mode.substr(0, 1) === 'k') {\n        // k-means clustering\n        /*\n        implementation based on\n        http://code.google.com/p/figue/source/browse/trunk/figue.js#336\n        simplified for 1-d input values\n        */\n        let cluster;\n        const n = values.length;\n        const assignments = new Array(n);\n        const clusterSizes = new Array(num);\n        let repeat = true;\n        let nb_iters = 0;\n        let centroids = null;\n\n        // get seed values\n        centroids = [];\n        centroids.push(min);\n        for (let i = 1; i < num; i++) {\n            centroids.push(min + (i / num) * (max - min));\n        }\n        centroids.push(max);\n\n        while (repeat) {\n            // assignment step\n            for (let j = 0; j < num; j++) {\n                clusterSizes[j] = 0;\n            }\n            for (let i = 0; i < n; i++) {\n                const value = values[i];\n                let mindist = Number.MAX_VALUE;\n                let best;\n                for (let j = 0; j < num; j++) {\n                    const dist = abs(centroids[j] - value);\n                    if (dist < mindist) {\n                        mindist = dist;\n                        best = j;\n                    }\n                    clusterSizes[best]++;\n                    assignments[i] = best;\n                }\n            }\n\n            // update centroids step\n            const newCentroids = new Array(num);\n            for (let j = 0; j < num; j++) {\n                newCentroids[j] = null;\n            }\n            for (let i = 0; i < n; i++) {\n                cluster = assignments[i];\n                if (newCentroids[cluster] === null) {\n                    newCentroids[cluster] = values[i];\n                } else {\n                    newCentroids[cluster] += values[i];\n                }\n            }\n            for (let j = 0; j < num; j++) {\n                newCentroids[j] *= 1 / clusterSizes[j];\n            }\n\n            // check convergence\n            repeat = false;\n            for (let j = 0; j < num; j++) {\n                if (newCentroids[j] !== centroids[j]) {\n                    repeat = true;\n                    break;\n                }\n            }\n\n            centroids = newCentroids;\n            nb_iters++;\n\n            if (nb_iters > 200) {\n                repeat = false;\n            }\n        }\n\n        // finished k-means clustering\n        // the next part is borrowed from gabrielflor.it\n        const kClusters = {};\n        for (let j = 0; j < num; j++) {\n            kClusters[j] = [];\n        }\n        for (let i = 0; i < n; i++) {\n            cluster = assignments[i];\n            kClusters[cluster].push(values[i]);\n        }\n        let tmpKMeansBreaks = [];\n        for (let j = 0; j < num; j++) {\n            tmpKMeansBreaks.push(kClusters[j][0]);\n            tmpKMeansBreaks.push(kClusters[j][kClusters[j].length - 1]);\n        }\n        tmpKMeansBreaks = tmpKMeansBreaks.sort((a, b) => a - b);\n        limits.push(tmpKMeansBreaks[0]);\n        for (let i = 1; i < tmpKMeansBreaks.length; i += 2) {\n            const v = tmpKMeansBreaks[i];\n            if (!isNaN(v) && limits.indexOf(v) === -1) {\n                limits.push(v);\n            }\n        }\n    }\n    return limits;\n}\n","import Color from '../Color.js';\nimport '../ops/luminance.js';\n\nexport default (a, b) => {\n    // WCAG contrast ratio\n    // see http://www.w3.org/TR/2008/REC-WCAG20-20081211/#contrast-ratiodef\n    a = new Color(a);\n    b = new Color(b);\n    const l1 = a.luminance();\n    const l2 = b.luminance();\n    return l1 > l2 ? (l1 + 0.05) / (l2 + 0.05) : (l2 + 0.05) / (l1 + 0.05);\n};\n","import Color from '../Color.js';\nconst { sqrt, pow, min, max, atan2, abs, cos, sin, exp, PI } = Math;\n\nexport default function (a, b, Kl = 1, Kc = 1, Kh = 1) {\n    // Delta E (CIE 2000)\n    // see http://www.brucelindbloom.com/index.html?Eqn_DeltaE_CIE2000.html\n    var rad2deg = function (rad) {\n        return (360 * rad) / (2 * PI);\n    };\n    var deg2rad = function (deg) {\n        return (2 * PI * deg) / 360;\n    };\n    a = new Color(a);\n    b = new Color(b);\n    const [L1, a1, b1] = Array.from(a.lab());\n    const [L2, a2, b2] = Array.from(b.lab());\n    const avgL = (L1 + L2) / 2;\n    const C1 = sqrt(pow(a1, 2) + pow(b1, 2));\n    const C2 = sqrt(pow(a2, 2) + pow(b2, 2));\n    const avgC = (C1 + C2) / 2;\n    const G = 0.5 * (1 - sqrt(pow(avgC, 7) / (pow(avgC, 7) + pow(25, 7))));\n    const a1p = a1 * (1 + G);\n    const a2p = a2 * (1 + G);\n    const C1p = sqrt(pow(a1p, 2) + pow(b1, 2));\n    const C2p = sqrt(pow(a2p, 2) + pow(b2, 2));\n    const avgCp = (C1p + C2p) / 2;\n    const arctan1 = rad2deg(atan2(b1, a1p));\n    const arctan2 = rad2deg(atan2(b2, a2p));\n    const h1p = arctan1 >= 0 ? arctan1 : arctan1 + 360;\n    const h2p = arctan2 >= 0 ? arctan2 : arctan2 + 360;\n    const avgHp =\n        abs(h1p - h2p) > 180 ? (h1p + h2p + 360) / 2 : (h1p + h2p) / 2;\n    const T =\n        1 -\n        0.17 * cos(deg2rad(avgHp - 30)) +\n        0.24 * cos(deg2rad(2 * avgHp)) +\n        0.32 * cos(deg2rad(3 * avgHp + 6)) -\n        0.2 * cos(deg2rad(4 * avgHp - 63));\n    let deltaHp = h2p - h1p;\n    deltaHp =\n        abs(deltaHp) <= 180\n            ? deltaHp\n            : h2p <= h1p\n              ? deltaHp + 360\n              : deltaHp - 360;\n    deltaHp = 2 * sqrt(C1p * C2p) * sin(deg2rad(deltaHp) / 2);\n    const deltaL = L2 - L1;\n    const deltaCp = C2p - C1p;\n    const sl = 1 + (0.015 * pow(avgL - 50, 2)) / sqrt(20 + pow(avgL - 50, 2));\n    const sc = 1 + 0.045 * avgCp;\n    const sh = 1 + 0.015 * avgCp * T;\n    const deltaTheta = 30 * exp(-pow((avgHp - 275) / 25, 2));\n    const Rc = 2 * sqrt(pow(avgCp, 7) / (pow(avgCp, 7) + pow(25, 7)));\n    const Rt = -Rc * sin(2 * deg2rad(deltaTheta));\n    const result = sqrt(\n        pow(deltaL / (Kl * sl), 2) +\n            pow(deltaCp / (Kc * sc), 2) +\n            pow(deltaHp / (Kh * sh), 2) +\n            Rt * (deltaCp / (Kc * sc)) * (deltaHp / (Kh * sh))\n    );\n    return max(0, min(100, result));\n}\n","import Color from '../Color.js';\n\nexport default (...args) => {\n    try {\n        new Color(...args);\n        return true;\n        // eslint-disable-next-line\n    } catch (e) {\n        return false;\n    }\n};\n","// some pre-defined color scales:\nimport chroma from '../chroma.js';\nimport '../io/hsl/index.js';\nimport scale from '../generator/scale.js';\n\nexport default {\n    cool() {\n        return scale([chroma.hsl(180, 1, 0.9), chroma.hsl(250, 0.7, 0.4)]);\n    },\n    hot() {\n        return scale(['#000', '#f00', '#ff0', '#fff'], [0, 0.25, 0.75, 1]).mode(\n            'rgb'\n        );\n    }\n};\n","/**\n    ColorBrewer colors for chroma.js\n\n    Copyright (c) 2002 Cynthia Brewer, Mark Harrower, and The\n    Pennsylvania State University.\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n    http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software distributed\n    under the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR\n    CONDITIONS OF ANY KIND, either express or implied. See the License for the\n    specific language governing permissions and limitations under the License.\n*/\n\nconst colorbrewer = {\n    // sequential\n    OrRd: ['#fff7ec', '#fee8c8', '#fdd49e', '#fdbb84', '#fc8d59', '#ef6548', '#d7301f', '#b30000', '#7f0000'],\n    PuBu: ['#fff7fb', '#ece7f2', '#d0d1e6', '#a6bddb', '#74a9cf', '#3690c0', '#0570b0', '#045a8d', '#023858'],\n    BuPu: ['#f7fcfd', '#e0ecf4', '#bfd3e6', '#9ebcda', '#8c96c6', '#8c6bb1', '#88419d', '#810f7c', '#4d004b'],\n    Oranges: ['#fff5eb', '#fee6ce', '#fdd0a2', '#fdae6b', '#fd8d3c', '#f16913', '#d94801', '#a63603', '#7f2704'],\n    BuGn: ['#f7fcfd', '#e5f5f9', '#ccece6', '#99d8c9', '#66c2a4', '#41ae76', '#238b45', '#006d2c', '#00441b'],\n    YlOrBr: ['#ffffe5', '#fff7bc', '#fee391', '#fec44f', '#fe9929', '#ec7014', '#cc4c02', '#993404', '#662506'],\n    YlGn: ['#ffffe5', '#f7fcb9', '#d9f0a3', '#addd8e', '#78c679', '#41ab5d', '#238443', '#006837', '#004529'],\n    Reds: ['#fff5f0', '#fee0d2', '#fcbba1', '#fc9272', '#fb6a4a', '#ef3b2c', '#cb181d', '#a50f15', '#67000d'],\n    RdPu: ['#fff7f3', '#fde0dd', '#fcc5c0', '#fa9fb5', '#f768a1', '#dd3497', '#ae017e', '#7a0177', '#49006a'],\n    Greens: ['#f7fcf5', '#e5f5e0', '#c7e9c0', '#a1d99b', '#74c476', '#41ab5d', '#238b45', '#006d2c', '#00441b'],\n    YlGnBu: ['#ffffd9', '#edf8b1', '#c7e9b4', '#7fcdbb', '#41b6c4', '#1d91c0', '#225ea8', '#253494', '#081d58'],\n    Purples: ['#fcfbfd', '#efedf5', '#dadaeb', '#bcbddc', '#9e9ac8', '#807dba', '#6a51a3', '#54278f', '#3f007d'],\n    GnBu: ['#f7fcf0', '#e0f3db', '#ccebc5', '#a8ddb5', '#7bccc4', '#4eb3d3', '#2b8cbe', '#0868ac', '#084081'],\n    Greys: ['#ffffff', '#f0f0f0', '#d9d9d9', '#bdbdbd', '#969696', '#737373', '#525252', '#252525', '#000000'],\n    YlOrRd: ['#ffffcc', '#ffeda0', '#fed976', '#feb24c', '#fd8d3c', '#fc4e2a', '#e31a1c', '#bd0026', '#800026'],\n    PuRd: ['#f7f4f9', '#e7e1ef', '#d4b9da', '#c994c7', '#df65b0', '#e7298a', '#ce1256', '#980043', '#67001f'],\n    Blues: ['#f7fbff', '#deebf7', '#c6dbef', '#9ecae1', '#6baed6', '#4292c6', '#2171b5', '#08519c', '#08306b'],\n    PuBuGn: ['#fff7fb', '#ece2f0', '#d0d1e6', '#a6bddb', '#67a9cf', '#3690c0', '#02818a', '#016c59', '#014636'],\n    Viridis: ['#440154', '#482777', '#3f4a8a', '#31678e', '#26838f', '#1f9d8a', '#6cce5a', '#b6de2b', '#fee825'],\n\n    // diverging\n    Spectral: ['#9e0142', '#d53e4f', '#f46d43', '#fdae61', '#fee08b', '#ffffbf', '#e6f598', '#abdda4', '#66c2a5', '#3288bd', '#5e4fa2'],\n    RdYlGn: ['#a50026', '#d73027', '#f46d43', '#fdae61', '#fee08b', '#ffffbf', '#d9ef8b', '#a6d96a', '#66bd63', '#1a9850', '#006837'],\n    RdBu: ['#67001f', '#b2182b', '#d6604d', '#f4a582', '#fddbc7', '#f7f7f7', '#d1e5f0', '#92c5de', '#4393c3', '#2166ac', '#053061'],\n    PiYG: ['#8e0152', '#c51b7d', '#de77ae', '#f1b6da', '#fde0ef', '#f7f7f7', '#e6f5d0', '#b8e186', '#7fbc41', '#4d9221', '#276419'],\n    PRGn: ['#40004b', '#762a83', '#9970ab', '#c2a5cf', '#e7d4e8', '#f7f7f7', '#d9f0d3', '#a6dba0', '#5aae61', '#1b7837', '#00441b'],\n    RdYlBu: ['#a50026', '#d73027', '#f46d43', '#fdae61', '#fee090', '#ffffbf', '#e0f3f8', '#abd9e9', '#74add1', '#4575b4', '#313695'],\n    BrBG: ['#543005', '#8c510a', '#bf812d', '#dfc27d', '#f6e8c3', '#f5f5f5', '#c7eae5', '#80cdc1', '#35978f', '#01665e', '#003c30'],\n    RdGy: ['#67001f', '#b2182b', '#d6604d', '#f4a582', '#fddbc7', '#ffffff', '#e0e0e0', '#bababa', '#878787', '#4d4d4d', '#1a1a1a'],\n    PuOr: ['#7f3b08', '#b35806', '#e08214', '#fdb863', '#fee0b6', '#f7f7f7', '#d8daeb', '#b2abd2', '#8073ac', '#542788', '#2d004b'],\n\n    // qualitative\n    Set2: ['#66c2a5', '#fc8d62', '#8da0cb', '#e78ac3', '#a6d854', '#ffd92f', '#e5c494', '#b3b3b3'],\n    Accent: ['#7fc97f', '#beaed4', '#fdc086', '#ffff99', '#386cb0', '#f0027f', '#bf5b17', '#666666'],\n    Set1: ['#e41a1c', '#377eb8', '#4daf4a', '#984ea3', '#ff7f00', '#ffff33', '#a65628', '#f781bf', '#999999'],\n    Set3: ['#8dd3c7', '#ffffb3', '#bebada', '#fb8072', '#80b1d3', '#fdb462', '#b3de69', '#fccde5', '#d9d9d9', '#bc80bd', '#ccebc5', '#ffed6f'],\n    Dark2: ['#1b9e77', '#d95f02', '#7570b3', '#e7298a', '#66a61e', '#e6ab02', '#a6761d', '#666666'],\n    Paired: ['#a6cee3', '#1f78b4', '#b2df8a', '#33a02c', '#fb9a99', '#e31a1c', '#fdbf6f', '#ff7f00', '#cab2d6', '#6a3d9a', '#ffff99', '#b15928'],\n    Pastel2: ['#b3e2cd', '#fdcdac', '#cbd5e8', '#f4cae4', '#e6f5c9', '#fff2ae', '#f1e2cc', '#cccccc'],\n    Pastel1: ['#fbb4ae', '#b3cde3', '#ccebc5', '#decbe4', '#fed9a6', '#ffffcc', '#e5d8bd', '#fddaec', '#f2f2f2']\n};\n\n// add lowercase aliases for case-insensitive matches\nfor (let key of Object.keys(colorbrewer)) {\n    colorbrewer[key.toLowerCase()] = colorbrewer[key];\n}\n\nexport default colorbrewer;\n","import chroma from './src/chroma.js';\n\n// feel free to comment out anything to rollup\n// a smaller chroma.js built\n\n// io --> convert colors\nimport './src/io/cmyk/index.js';\nimport './src/io/css/index.js';\nimport './src/io/gl/index.js';\nimport './src/io/hcg/index.js';\nimport './src/io/hex/index.js';\nimport './src/io/hsi/index.js';\nimport './src/io/hsl/index.js';\nimport './src/io/hsv/index.js';\nimport './src/io/lab/index.js';\nimport './src/io/lch/index.js';\nimport './src/io/named/index.js';\nimport './src/io/num/index.js';\nimport './src/io/rgb/index.js';\nimport './src/io/temp/index.js';\nimport './src/io/oklab/index.js';\nimport './src/io/oklch/index.js';\n\n// operators --> modify existing Colors\nimport './src/ops/alpha.js';\nimport './src/ops/clipped.js';\nimport './src/ops/darken.js';\nimport './src/ops/get.js';\nimport './src/ops/luminance.js';\nimport './src/ops/mix.js';\nimport './src/ops/premultiply.js';\nimport './src/ops/saturate.js';\nimport './src/ops/set.js';\nimport './src/ops/shade.js';\n\n// interpolators\nimport './src/interpolator/rgb.js';\nimport './src/interpolator/lrgb.js';\nimport './src/interpolator/lab.js';\nimport './src/interpolator/lch.js';\nimport './src/interpolator/num.js';\nimport './src/interpolator/hcg.js';\nimport './src/interpolator/hsi.js';\nimport './src/interpolator/hsl.js';\nimport './src/interpolator/hsv.js';\nimport './src/interpolator/oklab.js';\nimport './src/interpolator/oklch.js';\n\n// generators -- > create new colors\nimport average from './src/generator/average.js';\nimport bezier from './src/generator/bezier.js';\nimport blend from './src/generator/blend.js';\nimport cubehelix from './src/generator/cubehelix.js';\nimport mix from './src/generator/mix.js';\nimport random from './src/generator/random.js';\nimport scale from './src/generator/scale.js';\n\n// other utility methods\nimport { analyze } from './src/utils/analyze.js';\nimport contrast from './src/utils/contrast.js';\nimport deltaE from './src/utils/delta-e.js';\nimport distance from './src/utils/distance.js';\nimport { limits } from './src/utils/analyze.js';\nimport valid from './src/utils/valid.js';\nimport input from './src/io/input.js';\n\n// scale\nimport scales from './src/utils/scales.js';\n\n// colors\nimport colors from './src/colors/w3cx11.js';\nimport brewer from './src/colors/colorbrewer.js';\n\nObject.assign(chroma, {\n    average,\n    bezier,\n    blend,\n    cubehelix,\n    mix,\n    interpolate: mix,\n    random,\n    scale,\n    analyze,\n    contrast,\n    deltaE,\n    distance,\n    limits,\n    valid,\n    scales,\n    input,\n    colors,\n    brewer\n});\n\nexport default chroma;\n","import Color from '../Color.js';\n\n// simple Euclidean distance\nexport default function (a, b, mode = 'lab') {\n    // Delta E (CIE 1976)\n    // see http://www.brucelindbloom.com/index.html?Equations.html\n    a = new Color(a);\n    b = new Color(b);\n    const l1 = a.get(mode);\n    const l2 = b.get(mode);\n    let sum_sq = 0;\n    for (let i in l1) {\n        const d = (l1[i] || 0) - (l2[i] || 0);\n        sum_sq += d * d;\n    }\n    return Math.sqrt(sum_sq);\n}\n","import chroma from 'chroma-js';\nconst isChromaColor = (color) => {\n    if (chroma.valid(color)) {\n        return true;\n    }\n    return false;\n};\nexport function colorToHex(color) {\n    const { value } = color;\n    if (isChromaColor(value)) {\n        return chroma(value).hex();\n    }\n    return '';\n}\n//# sourceMappingURL=color.js.map","export const HSLValueRange = {\n    h: [0, 360],\n    s: [0, 1],\n    l: [0, 1],\n};\nexport const HSVValueRange = {\n    h: [0, 360],\n    s: [0, 1],\n    v: [0, 1],\n};\nexport const HSIValueRange = {\n    h: [0, 360],\n    s: [0, 1],\n    i: [0, 1],\n};\nexport const RGBValueRange = {\n    r: [0, 255],\n    g: [0, 255],\n    b: [0, 255],\n};\nexport const RGBAValueRange = {\n    r: [0, 255],\n    g: [0, 255],\n    b: [0, 255],\n    a: [0, 1],\n};\nexport const LABRange = {\n    l: [0, 100],\n    a: [-86.185, 98.254],\n    b: [-107.863, 94.482],\n};\nexport const LCHRange = {\n    l: [0, 100],\n    c: [0, 100],\n    h: [0, 360],\n};\nexport const CMYKRange = {\n    c: [0, 1],\n    m: [0, 1],\n    y: [0, 1],\n    k: [0, 1],\n};\nexport const ColorModelRange = {\n    lab: LABRange,\n    lch: LCHRange,\n    rgb: RGBValueRange,\n    rgba: RGBAValueRange,\n    hsl: HSLValueRange,\n    hsv: HSVValueRange,\n    hsi: HSIValueRange,\n    cmyk: CMYKRange,\n};\nexport function isColorValue(colorValue) {\n    const { model, value } = colorValue;\n    const colorModelRange = ColorModelRange[model];\n    return (Object.keys(value).sort().join(',') === Object.keys(colorModelRange).sort().join(',') &&\n        Object.entries(value).every(([key, v]) => v >= colorModelRange[key][0] && v <= colorModelRange[key][1]));\n}\n//# sourceMappingURL=colorValue.js.map","import chroma from 'chroma-js';\nimport { getHexByName } from './getHexByName';\nconst isChromaColor = (color) => {\n    if (chroma.valid(color)) {\n        return true;\n    }\n    return false;\n};\n// Convert color to chroma color\nexport const colorToChromaColor = (color) => {\n    const { value } = color;\n    if (isChromaColor(value)) {\n        return chroma(value);\n    }\n    return chroma('#000');\n};\n// Convert color to an array in a specific color model\nexport const colorToArray = (color, colorModel = color.model) => {\n    const chromaColor = colorToChromaColor(color);\n    if (chromaColor) {\n        return chromaColor[colorModel]();\n    }\n    return [0, 0, 0];\n};\n// Convert an array in a specific color model to color\nexport const arrayToColor = (array, colorModel = array.length === 4 ? 'rgba' : 'rgb') => {\n    const value = {};\n    if (array.length === 1) {\n        const [v] = array;\n        for (let i = 0; i < colorModel.length; i += 1) {\n            value[colorModel[i]] = v;\n        }\n    }\n    else {\n        for (let i = 0; i < colorModel.length; i += 1) {\n            value[colorModel[i]] = array[i];\n        }\n    }\n    return {\n        model: colorModel,\n        value,\n    };\n};\n// Convert color to gray value\nexport function colorToGray(color) {\n    const [r, g, b] = colorToArray(color, 'rgb'); // [red, green, blue]\n    // Ref:https://tannerhelland.com/2011/10/01/grayscale-image-algorithm-vb6.html\n    const gray = Math.round(0.299 * r + 0.587 * g + 0.114 * b);\n    // gray value: [0, 255]\n    return gray;\n}\n// Convert gray value to color\nexport function grayToColor(gray, alpha = 1) {\n    if (alpha === 1) {\n        return {\n            model: 'rgb',\n            value: {\n                r: gray,\n                g: gray,\n                b: gray,\n            },\n        };\n    }\n    return {\n        model: 'rgba',\n        value: {\n            r: gray,\n            g: gray,\n            b: gray,\n            a: alpha,\n        },\n    };\n}\nexport { colorToHex } from '@antv/color-schema';\nexport function hexToColor(hexValue) {\n    if (/^(#|0x)?[0-9a-fA-F]{3}$/.test(hexValue) || /^(#|0x)?[0-9a-fA-F]{6}$/.test(hexValue)) {\n        const rgb = chroma(hexValue).rgb();\n        return arrayToColor(rgb, 'rgb');\n    }\n    if (/^(#|0x)?[0-9a-fA-F]{4}$/.test(hexValue) || /^(#|0x)?[0-9a-fA-F]{8}$/.test(hexValue)) {\n        const rgba = chroma(hexValue).rgba();\n        return arrayToColor(rgba, 'rgba');\n    }\n    return {\n        model: 'rgb',\n        value: { r: 0, g: 0, b: 0 },\n    };\n}\nexport function nameToColor(name) {\n    const hex = getHexByName(name);\n    return hexToColor(hex);\n}\n//# sourceMappingURL=colorConversion.js.map","import { SEPARABLE_BLEND_MODES } from '../../constant';\nimport { colorToArray } from '../colorConversion';\nconst multiply = (top, bottom) => (top * bottom) / 255;\nconst screen = (top, bottom) => top + bottom - (top * bottom) / 255;\nconst hardLight = (top, bottom) => top < 128 ? multiply(2 * top, bottom) : screen(2 * top - 255, bottom);\nconst separableBlendFunc = {\n    /** w3c */\n    normal: (top) => top,\n    darken: (top, bottom) => Math.min(top, bottom),\n    multiply,\n    colorBurn: (top, bottom) => {\n        if (top === 0)\n            return 0;\n        return Math.max(0, 255 * (1 - (255 - bottom) / top));\n    },\n    lighten: (top, bottom) => Math.max(top, bottom),\n    screen,\n    colorDodge: (top, bottom) => {\n        if (top === 255)\n            return 255;\n        return Math.min(255, 255 * (bottom / (255 - top)));\n    },\n    overlay: (top, bottom) => hardLight(bottom, top),\n    softLight: (top, bottom) => {\n        if (top < 128) {\n            return bottom - (1 - (2 * top) / 255) * bottom * (1 - bottom / 255);\n        }\n        const D = bottom < 64 ? ((16 * (bottom / 255) - 12) * (bottom / 255) + 4) * (bottom / 255) : Math.sqrt(bottom / 255);\n        return bottom + 255 * ((2 * top) / 255 - 1) * (D - bottom / 255);\n    },\n    hardLight,\n    difference: (top, bottom) => Math.abs(top - bottom),\n    exclusion: (top, bottom) => top + bottom - (2 * top * bottom) / 255,\n    /** photoshop */\n    linearBurn: (top, bottom) => Math.max(top + bottom - 255, 0),\n    linearDodge: (top, bottom) => Math.min(255, top + bottom),\n    linearLight: (top, bottom) => Math.max(bottom + 2 * top - 255, 0),\n    vividLight: (top, bottom) => top < 128 ? 255 * (1 - (1 - bottom / 255) / ((2 * top) / 255)) : 255 * (bottom / 2 / (255 - top)),\n    pinLight: (top, bottom) => (top < 128 ? Math.min(bottom, 2 * top) : Math.max(bottom, 2 * top - 255)),\n};\nconst lum = (rgb) => {\n    return 0.3 * rgb[0] + 0.58 * rgb[1] + 0.11 * rgb[2];\n};\nconst clipColor = (rgb) => {\n    const l = lum(rgb);\n    const min = Math.min(...rgb);\n    const max = Math.max(...rgb);\n    let color = [...rgb];\n    if (min < 0) {\n        color = color.map((value) => l + ((value - l) * l) / (l - min));\n    }\n    if (max > 255) {\n        color = color.map((value) => l + ((value - l) * (255 - l)) / (max - l));\n    }\n    return color;\n};\nconst setLum = (rgb, l) => {\n    const d = l - lum(rgb);\n    return clipColor(rgb.map((value) => value + d));\n};\nconst sat = (rgb) => {\n    return Math.max(...rgb) - Math.min(...rgb);\n};\nconst setSat = (rgb, s) => {\n    const arr = rgb.map((value, index) => ({ value, index }));\n    arr.sort((a, b) => a.value - b.value);\n    const minIndex = arr[0].index;\n    const midIndex = arr[1].index;\n    const maxIndex = arr[2].index;\n    const color = [...rgb];\n    if (color[maxIndex] > color[minIndex]) {\n        color[midIndex] = ((color[midIndex] - color[minIndex]) * s) / (color[maxIndex] - color[minIndex]);\n        color[maxIndex] = s;\n    }\n    else {\n        color[midIndex] = 0;\n        color[maxIndex] = 0;\n    }\n    color[minIndex] = 0;\n    return color;\n};\nconst nonSeparableBlendFunc = {\n    hue: (top, bottom) => setLum(setSat(top, sat(bottom)), lum(bottom)),\n    saturation: (top, bottom) => setLum(setSat(bottom, sat(top)), lum(bottom)),\n    color: (top, bottom) => setLum(top, lum(bottom)),\n    luminosity: (top, bottom) => setLum(bottom, lum(top)),\n};\nexport const colorBlend = (colorTop, colorBottom, mode = 'normal') => {\n    const [r1, g1, b1, a1] = colorToArray(colorTop, 'rgba');\n    const [r2, g2, b2, a2] = colorToArray(colorBottom, 'rgba');\n    const rgb1 = [r1, g1, b1];\n    const rgb2 = [r2, g2, b2];\n    let blendRgb;\n    if (SEPARABLE_BLEND_MODES.includes(mode)) {\n        const func = separableBlendFunc[mode];\n        blendRgb = rgb1.map((num1, index) => Math.floor(func(num1, rgb2[index])));\n    }\n    else {\n        blendRgb = nonSeparableBlendFunc[mode](rgb1, rgb2);\n    }\n    const a = a1 + a2 * (1 - a1);\n    const r = Math.round((a1 * (1 - a2) * r1 + a1 * a2 * blendRgb[0] + (1 - a1) * a2 * r2) / a);\n    const g = Math.round((a1 * (1 - a2) * g1 + a1 * a2 * blendRgb[1] + (1 - a1) * a2 * g2) / a);\n    const b = Math.round((a1 * (1 - a2) * b1 + a1 * a2 * blendRgb[2] + (1 - a1) * a2 * b2) / a);\n    if (a === 1)\n        return {\n            model: 'rgb',\n            value: { r, g, b },\n        };\n    return {\n        model: 'rgba',\n        value: { r, g, b, a },\n    };\n};\n//# sourceMappingURL=colorBlend.js.map","export const random = (a = 1, b = 0) => {\n    const lower = Math.min(a, b);\n    const upper = Math.max(a, b);\n    return lower + Math.random() * (upper - lower);\n};\nexport const randomInt = (a = 1, b = 0) => {\n    const lower = Math.ceil(Math.min(a, b));\n    const upper = Math.floor(Math.max(a, b));\n    return Math.floor(lower + Math.random() * (upper - lower + 1));\n};\nexport const clamp = (num, boundOne, boundTwo) => {\n    if (!boundTwo) {\n        return Math.max(num, boundOne) === boundOne ? num : boundOne;\n    }\n    if (Math.min(num, boundOne) === num) {\n        return boundOne;\n    }\n    if (Math.max(num, boundTwo) === num) {\n        return boundTwo;\n    }\n    return num;\n};\n// poor version, but enough\nexport const cloneDeep = (target) => {\n    if (target && typeof target === 'object') {\n        const isArray = Array.isArray(target);\n        if (isArray) {\n            const cloneTarget = target.map((d) => cloneDeep(d));\n            return cloneTarget;\n        }\n        // isObject\n        const cloneTarget = {};\n        const keys = Object.keys(target);\n        keys.forEach((key) => {\n            // @ts-ignore\n            cloneTarget[key] = cloneDeep(target[key]);\n        });\n        return cloneTarget;\n    }\n    return target;\n};\n//# sourceMappingURL=helper.js.map","export { colorBlend } from './colorBlend';\nexport { colorBrighten, colorDarken } from './colorBrightenDarken';\nexport const hueOffset = (hue, dHue) => {\n    let newHue = (hue + dHue) % 360;\n    if (newHue < 0) {\n        newHue += 360;\n    }\n    else if (newHue >= 360) {\n        newHue -= 360;\n    }\n    return newHue;\n};\n//# sourceMappingURL=index.js.map","export function rad2deg(n) {\n    return n * (180 / Math.PI);\n}\nexport function deg2rad(n) {\n    return n * (Math.PI / 180);\n}\n//# sourceMappingURL=degree.js.map","var installedColorSpaces = [],\n    undef = function (obj) {\n        return typeof obj === 'undefined';\n    },\n    channelRegExp = /\\s*(\\.\\d+|\\d+(?:\\.\\d+)?)(%)?\\s*/,\n    percentageChannelRegExp = /\\s*(\\.\\d+|100|\\d?\\d(?:\\.\\d+)?)%\\s*/,\n    alphaChannelRegExp = /\\s*(\\.\\d+|\\d+(?:\\.\\d+)?)\\s*/,\n    cssColorRegExp = new RegExp(\n                         '^(rgb|hsl|hsv)a?' +\n                         '\\\\(' +\n                             channelRegExp.source + ',' +\n                             channelRegExp.source + ',' +\n                             channelRegExp.source +\n                             '(?:,' + alphaChannelRegExp.source + ')?' +\n                         '\\\\)$', 'i');\n\nfunction color(obj) {\n    if (Array.isArray(obj)) {\n        if (typeof obj[0] === 'string' && typeof color[obj[0]] === 'function') {\n            // Assumed array from .toJSON()\n            return new color[obj[0]](obj.slice(1, obj.length));\n        } else if (obj.length === 4) {\n            // Assumed 4 element int RGB array from canvas with all channels [0;255]\n            return new color.RGB(obj[0] / 255, obj[1] / 255, obj[2] / 255, obj[3] / 255);\n        }\n    } else if (typeof obj === 'string') {\n        var lowerCased = obj.toLowerCase();\n        if (color.namedColors[lowerCased]) {\n            obj = '#' + color.namedColors[lowerCased];\n        }\n        if (lowerCased === 'transparent') {\n            obj = 'rgba(0,0,0,0)';\n        }\n        // Test for CSS rgb(....) string\n        var matchCssSyntax = obj.match(cssColorRegExp);\n        if (matchCssSyntax) {\n            var colorSpaceName = matchCssSyntax[1].toUpperCase(),\n                alpha = undef(matchCssSyntax[8]) ? matchCssSyntax[8] : parseFloat(matchCssSyntax[8]),\n                hasHue = colorSpaceName[0] === 'H',\n                firstChannelDivisor = matchCssSyntax[3] ? 100 : (hasHue ? 360 : 255),\n                secondChannelDivisor = (matchCssSyntax[5] || hasHue) ? 100 : 255,\n                thirdChannelDivisor = (matchCssSyntax[7] || hasHue) ? 100 : 255;\n            if (undef(color[colorSpaceName])) {\n                throw new Error('color.' + colorSpaceName + ' is not installed.');\n            }\n            return new color[colorSpaceName](\n                parseFloat(matchCssSyntax[2]) / firstChannelDivisor,\n                parseFloat(matchCssSyntax[4]) / secondChannelDivisor,\n                parseFloat(matchCssSyntax[6]) / thirdChannelDivisor,\n                alpha\n            );\n        }\n        // Assume hex syntax\n        if (obj.length < 6) {\n            // Allow CSS shorthand\n            obj = obj.replace(/^#?([0-9a-f])([0-9a-f])([0-9a-f])$/i, '$1$1$2$2$3$3');\n        }\n        // Split obj into red, green, and blue components\n        var hexMatch = obj.match(/^#?([0-9a-f][0-9a-f])([0-9a-f][0-9a-f])([0-9a-f][0-9a-f])$/i);\n        if (hexMatch) {\n            return new color.RGB(\n                parseInt(hexMatch[1], 16) / 255,\n                parseInt(hexMatch[2], 16) / 255,\n                parseInt(hexMatch[3], 16) / 255\n            );\n        }\n\n        // No match so far. Lets try the less likely ones\n        if (color.CMYK) {\n            var cmykMatch = obj.match(new RegExp(\n                             '^cmyk' +\n                             '\\\\(' +\n                                 percentageChannelRegExp.source + ',' +\n                                 percentageChannelRegExp.source + ',' +\n                                 percentageChannelRegExp.source + ',' +\n                                 percentageChannelRegExp.source +\n                             '\\\\)$', 'i'));\n            if (cmykMatch) {\n                return new color.CMYK(\n                    parseFloat(cmykMatch[1]) / 100,\n                    parseFloat(cmykMatch[2]) / 100,\n                    parseFloat(cmykMatch[3]) / 100,\n                    parseFloat(cmykMatch[4]) / 100\n                );\n            }\n        }\n    } else if (typeof obj === 'object' && obj.isColor) {\n        return obj;\n    }\n    return false;\n}\n\ncolor.namedColors = {};\n\ncolor.installColorSpace = function (colorSpaceName, propertyNames, config) {\n    color[colorSpaceName] = function (a1) { // ...\n        var args = Array.isArray(a1) ? a1 : arguments;\n        propertyNames.forEach(function (propertyName, i) {\n            var propertyValue = args[i];\n            if (propertyName === 'alpha') {\n                this._alpha = (isNaN(propertyValue) || propertyValue > 1) ? 1 : (propertyValue < 0 ? 0 : propertyValue);\n            } else {\n                if (isNaN(propertyValue)) {\n                    throw new Error('[' + colorSpaceName + ']: Invalid color: (' + propertyNames.join(',') + ')');\n                }\n                if (propertyName === 'hue') {\n                    this._hue = propertyValue < 0 ? propertyValue - Math.floor(propertyValue) : propertyValue % 1;\n                } else {\n                    this['_' + propertyName] = propertyValue < 0 ? 0 : (propertyValue > 1 ? 1 : propertyValue);\n                }\n            }\n        }, this);\n    };\n    color[colorSpaceName].propertyNames = propertyNames;\n\n    var prototype = color[colorSpaceName].prototype;\n\n    ['valueOf', 'hex', 'hexa', 'css', 'cssa'].forEach(function (methodName) {\n        prototype[methodName] = prototype[methodName] || (colorSpaceName === 'RGB' ? prototype.hex : function () {\n            return this.rgb()[methodName]();\n        });\n    });\n\n    prototype.isColor = true;\n\n    prototype.equals = function (otherColor, epsilon) {\n        if (undef(epsilon)) {\n            epsilon = 1e-10;\n        }\n\n        otherColor = otherColor[colorSpaceName.toLowerCase()]();\n\n        for (var i = 0; i < propertyNames.length; i = i + 1) {\n            if (Math.abs(this['_' + propertyNames[i]] - otherColor['_' + propertyNames[i]]) > epsilon) {\n                return false;\n            }\n        }\n\n        return true;\n    };\n\n    prototype.toJSON = function () {\n        return [colorSpaceName].concat(propertyNames.map(function (propertyName) {\n            return this['_' + propertyName];\n        }, this));\n    };\n\n    for (var propertyName in config) {\n        if (config.hasOwnProperty(propertyName)) {\n            var matchFromColorSpace = propertyName.match(/^from(.*)$/);\n            if (matchFromColorSpace) {\n                color[matchFromColorSpace[1].toUpperCase()].prototype[colorSpaceName.toLowerCase()] = config[propertyName];\n            } else {\n                prototype[propertyName] = config[propertyName];\n            }\n        }\n    }\n\n    // It is pretty easy to implement the conversion to the same color space:\n    prototype[colorSpaceName.toLowerCase()] = function () {\n        return this;\n    };\n    prototype.toString = function () {\n        return '[' + colorSpaceName + ' ' + propertyNames.map(function (propertyName) {\n            return this['_' + propertyName];\n        }, this).join(', ') + ']';\n    };\n\n    // Generate getters and setters\n    propertyNames.forEach(function (propertyName) {\n        var shortName = propertyName === 'black' ? 'k' : propertyName.charAt(0);\n        prototype[propertyName] = prototype[shortName] = function (value, isDelta) {\n            // Simple getter mode: color.red()\n            if (typeof value === 'undefined') {\n                return this['_' + propertyName];\n            } else if (isDelta) {\n                // Adjuster: color.red(+.2, true)\n                return new this.constructor(propertyNames.map(function (otherPropertyName) {\n                    return this['_' + otherPropertyName] + (propertyName === otherPropertyName ? value : 0);\n                }, this));\n            } else {\n                // Setter: color.red(.2);\n                return new this.constructor(propertyNames.map(function (otherPropertyName) {\n                    return (propertyName === otherPropertyName) ? value : this['_' + otherPropertyName];\n                }, this));\n            }\n        };\n    });\n\n    function installForeignMethods(targetColorSpaceName, sourceColorSpaceName) {\n        var obj = {};\n        obj[sourceColorSpaceName.toLowerCase()] = function () {\n            return this.rgb()[sourceColorSpaceName.toLowerCase()]();\n        };\n        color[sourceColorSpaceName].propertyNames.forEach(function (propertyName) {\n            var shortName = propertyName === 'black' ? 'k' : propertyName.charAt(0);\n            obj[propertyName] = obj[shortName] = function (value, isDelta) {\n                return this[sourceColorSpaceName.toLowerCase()]()[propertyName](value, isDelta);\n            };\n        });\n        for (var prop in obj) {\n            if (obj.hasOwnProperty(prop) && color[targetColorSpaceName].prototype[prop] === undefined) {\n                color[targetColorSpaceName].prototype[prop] = obj[prop];\n            }\n        }\n    }\n\n    installedColorSpaces.forEach(function (otherColorSpaceName) {\n        installForeignMethods(colorSpaceName, otherColorSpaceName);\n        installForeignMethods(otherColorSpaceName, colorSpaceName);\n    });\n\n    installedColorSpaces.push(colorSpaceName);\n    return color;\n};\n\ncolor.pluginList = [];\n\ncolor.use = function (plugin) {\n    if (color.pluginList.indexOf(plugin) === -1) {\n        this.pluginList.push(plugin);\n        plugin(color);\n    }\n    return color;\n};\n\ncolor.installMethod = function (name, fn) {\n    installedColorSpaces.forEach(function (colorSpace) {\n        color[colorSpace].prototype[name] = fn;\n    });\n    return this;\n};\n\ncolor.installColorSpace('RGB', ['red', 'green', 'blue', 'alpha'], {\n    hex: function () {\n        var hexString = (Math.round(255 * this._red) * 0x10000 + Math.round(255 * this._green) * 0x100 + Math.round(255 * this._blue)).toString(16);\n        return '#' + ('00000'.substr(0, 6 - hexString.length)) + hexString;\n    },\n\n    hexa: function () {\n        var alphaString = Math.round(this._alpha * 255).toString(16);\n        return '#' + '00'.substr(0, 2 - alphaString.length) + alphaString + this.hex().substr(1, 6);\n    },\n\n    css: function () {\n        return 'rgb(' + Math.round(255 * this._red) + ',' + Math.round(255 * this._green) + ',' + Math.round(255 * this._blue) + ')';\n    },\n\n    cssa: function () {\n        return 'rgba(' + Math.round(255 * this._red) + ',' + Math.round(255 * this._green) + ',' + Math.round(255 * this._blue) + ',' + this._alpha + ')';\n    }\n});\n\nmodule.exports = color;\n","module.exports = function XYZ(color) {\n    color.installColorSpace('XYZ', ['x', 'y', 'z', 'alpha'], {\n        fromRgb: function () {\n            // http://www.easyrgb.com/index.php?X=MATH&H=02#text2\n            var convert = function (channel) {\n                    return channel > 0.04045 ?\n                        Math.pow((channel + 0.055) / 1.055, 2.4) :\n                        channel / 12.92;\n                },\n                r = convert(this._red),\n                g = convert(this._green),\n                b = convert(this._blue);\n\n            // Reference white point sRGB D65:\n            // http://www.brucelindbloom.com/index.html?Eqn_RGB_XYZ_Matrix.html\n            return new color.XYZ(\n                r * 0.4124564 + g * 0.3575761 + b * 0.1804375,\n                r * 0.2126729 + g * 0.7151522 + b * 0.0721750,\n                r * 0.0193339 + g * 0.1191920 + b * 0.9503041,\n                this._alpha\n            );\n        },\n\n        rgb: function () {\n            // http://www.easyrgb.com/index.php?X=MATH&H=01#text1\n            var x = this._x,\n                y = this._y,\n                z = this._z,\n                convert = function (channel) {\n                    return channel > 0.0031308 ?\n                        1.055 * Math.pow(channel, 1 / 2.4) - 0.055 :\n                        12.92 * channel;\n                };\n\n            // Reference white point sRGB D65:\n            // http://www.brucelindbloom.com/index.html?Eqn_RGB_XYZ_Matrix.html\n            return new color.RGB(\n                convert(x *  3.2404542 + y * -1.5371385 + z * -0.4985314),\n                convert(x * -0.9692660 + y *  1.8760108 + z *  0.0415560),\n                convert(x *  0.0556434 + y * -0.2040259 + z *  1.0572252),\n                this._alpha\n            );\n        },\n\n        lab: function () {\n            // http://www.easyrgb.com/index.php?X=MATH&H=07#text7\n            var convert = function (channel) {\n                    return channel > 0.008856 ?\n                        Math.pow(channel, 1 / 3) :\n                        7.787037 * channel + 4 / 29;\n                },\n                x = convert(this._x /  95.047),\n                y = convert(this._y / 100.000),\n                z = convert(this._z / 108.883);\n\n            return new color.LAB(\n                (116 * y) - 16,\n                500 * (x - y),\n                200 * (y - z),\n                this._alpha\n            );\n        }\n    });\n};\n","module.exports = function HSV(color) {\n    color.installColorSpace('HSV', ['hue', 'saturation', 'value', 'alpha'], {\n        rgb: function () {\n            var hue = this._hue,\n                saturation = this._saturation,\n                value = this._value,\n                i = Math.min(5, Math.floor(hue * 6)),\n                f = hue * 6 - i,\n                p = value * (1 - saturation),\n                q = value * (1 - f * saturation),\n                t = value * (1 - (1 - f) * saturation),\n                red,\n                green,\n                blue;\n            switch (i) {\n            case 0:\n                red = value;\n                green = t;\n                blue = p;\n                break;\n            case 1:\n                red = q;\n                green = value;\n                blue = p;\n                break;\n            case 2:\n                red = p;\n                green = value;\n                blue = t;\n                break;\n            case 3:\n                red = p;\n                green = q;\n                blue = value;\n                break;\n            case 4:\n                red = t;\n                green = p;\n                blue = value;\n                break;\n            case 5:\n                red = value;\n                green = p;\n                blue = q;\n                break;\n            }\n            return new color.RGB(red, green, blue, this._alpha);\n        },\n\n        hsl: function () {\n            var l = (2 - this._saturation) * this._value,\n                sv = this._saturation * this._value,\n                svDivisor = l <= 1 ? l : (2 - l),\n                saturation;\n\n            // Avoid division by zero when lightness approaches zero:\n            if (svDivisor < 1e-9) {\n                saturation = 0;\n            } else {\n                saturation = sv / svDivisor;\n            }\n            return new color.HSL(this._hue, saturation, l / 2, this._alpha);\n        },\n\n        fromRgb: function () { // Becomes one.color.RGB.prototype.hsv\n            var red = this._red,\n                green = this._green,\n                blue = this._blue,\n                max = Math.max(red, green, blue),\n                min = Math.min(red, green, blue),\n                delta = max - min,\n                hue,\n                saturation = (max === 0) ? 0 : (delta / max),\n                value = max;\n            if (delta === 0) {\n                hue = 0;\n            } else {\n                switch (max) {\n                case red:\n                    hue = (green - blue) / delta / 6 + (green < blue ? 1 : 0);\n                    break;\n                case green:\n                    hue = (blue - red) / delta / 6 + 1 / 3;\n                    break;\n                case blue:\n                    hue = (red - green) / delta / 6 + 2 / 3;\n                    break;\n                }\n            }\n            return new color.HSV(hue, saturation, value, this._alpha);\n        }\n    });\n};\n","module.exports = function HSL(color) {\n    color.use(require('./HSV'));\n\n    color.installColorSpace('HSL', ['hue', 'saturation', 'lightness', 'alpha'], {\n        hsv: function () {\n            // Algorithm adapted from http://wiki.secondlife.com/wiki/Color_conversion_scripts\n            var l = this._lightness * 2,\n                s = this._saturation * ((l <= 1) ? l : 2 - l),\n                saturation;\n\n            // Avoid division by zero when l + s is very small (approaching black):\n            if (l + s < 1e-9) {\n                saturation = 0;\n            } else {\n                saturation = (2 * s) / (l + s);\n            }\n\n            return new color.HSV(this._hue, saturation, (l + s) / 2, this._alpha);\n        },\n\n        rgb: function () {\n            return this.hsv().rgb();\n        },\n\n        fromRgb: function () { // Becomes one.color.RGB.prototype.hsv\n            return this.hsv().hsl();\n        }\n    });\n};\n","module.exports = function luminance(color) {\n  // http://www.w3.org/TR/WCAG20/#relativeluminancedef\n\n  function channelLuminance(value) {\n    return (value <= 0.03928) ? value / 12.92 : Math.pow(((value + 0.055) / 1.055), 2.4);\n  }\n\n  color.installMethod('luminance', function () {\n    var rgb = this.rgb();\n    return 0.2126 * channelLuminance(rgb._red) + 0.7152 * channelLuminance(rgb._green) + 0.0722 * channelLuminance(rgb._blue);\n  });\n};\n","module.exports = function isDark(color) {\n\n  color.installMethod('isDark', function () {\n    var rgb = this.rgb();\n\n    // YIQ equation from http://24ways.org/2010/calculating-color-contrast\n    var yiq = (rgb._red * 255 * 299 + rgb._green * 255 * 587 + rgb._blue * 255 * 114) / 1000;\n    return yiq < 128;\n  });\n};\n","module.exports = require('./lib/color')\n    .use(require('./lib/XYZ'))\n    .use(require('./lib/LAB'))\n    .use(require('./lib/HSV'))\n    .use(require('./lib/HSL'))\n    .use(require('./lib/CMYK'))\n\n    // Convenience functions\n    .use(require('./lib/plugins/namedColors'))\n    .use(require('./lib/plugins/clearer.js'))\n    .use(require('./lib/plugins/contrast.js'))\n    .use(require('./lib/plugins/darken.js'))\n    .use(require('./lib/plugins/desaturate.js'))\n    .use(require('./lib/plugins/grayscale.js'))\n    .use(require('./lib/plugins/isDark.js'))\n    .use(require('./lib/plugins/isLight.js'))\n    .use(require('./lib/plugins/lighten.js'))\n    .use(require('./lib/plugins/luminance.js'))\n    .use(require('./lib/plugins/mix.js'))\n    .use(require('./lib/plugins/negate.js'))\n    .use(require('./lib/plugins/opaquer.js'))\n    .use(require('./lib/plugins/rotate.js'))\n    .use(require('./lib/plugins/saturate.js'))\n    .use(require('./lib/plugins/toAlpha.js'));\n","module.exports = function LAB(color) {\n    color.use(require('./XYZ.js'));\n\n    color.installColorSpace('LAB', ['l', 'a', 'b', 'alpha'], {\n        fromRgb: function () {\n            return this.xyz().lab();\n        },\n\n        rgb: function () {\n            return this.xyz().rgb();\n        },\n\n        xyz: function () {\n            // http://www.easyrgb.com/index.php?X=MATH&H=08#text8\n            var convert = function (channel) {\n                    var pow = Math.pow(channel, 3);\n                    return pow > 0.008856 ?\n                        pow :\n                        (channel - 16 / 116) / 7.87;\n                },\n                y = (this._l + 16) / 116,\n                x = this._a / 500 + y,\n                z = y - this._b / 200;\n\n            return new color.XYZ(\n                convert(x) *  95.047,\n                convert(y) * 100.000,\n                convert(z) * 108.883,\n                this._alpha\n            );\n        }\n    });\n};\n","module.exports = function CMYK(color) {\n    color.installColorSpace('CMYK', ['cyan', 'magenta', 'yellow', 'black', 'alpha'], {\n        rgb: function () {\n            return new color.RGB((1 - this._cyan * (1 - this._black) - this._black),\n                                     (1 - this._magenta * (1 - this._black) - this._black),\n                                     (1 - this._yellow * (1 - this._black) - this._black),\n                                     this._alpha);\n        },\n\n        fromRgb: function () { // Becomes one.color.RGB.prototype.cmyk\n            // Adapted from http://www.javascripter.net/faq/rgb2cmyk.htm\n            var red = this._red,\n                green = this._green,\n                blue = this._blue,\n                cyan = 1 - red,\n                magenta = 1 - green,\n                yellow = 1 - blue,\n                black = 1;\n            if (red || green || blue) {\n                black = Math.min(cyan, Math.min(magenta, yellow));\n                cyan = (cyan - black) / (1 - black);\n                magenta = (magenta - black) / (1 - black);\n                yellow = (yellow - black) / (1 - black);\n            } else {\n                black = 1;\n            }\n            return new color.CMYK(cyan, magenta, yellow, black, this._alpha);\n        }\n    });\n};\n","module.exports = function namedColors(color) {\n    color.namedColors = {\n        aliceblue: 'f0f8ff',\n        antiquewhite: 'faebd7',\n        aqua: '0ff',\n        aquamarine: '7fffd4',\n        azure: 'f0ffff',\n        beige: 'f5f5dc',\n        bisque: 'ffe4c4',\n        black: '000',\n        blanchedalmond: 'ffebcd',\n        blue: '00f',\n        blueviolet: '8a2be2',\n        brown: 'a52a2a',\n        burlywood: 'deb887',\n        cadetblue: '5f9ea0',\n        chartreuse: '7fff00',\n        chocolate: 'd2691e',\n        coral: 'ff7f50',\n        cornflowerblue: '6495ed',\n        cornsilk: 'fff8dc',\n        crimson: 'dc143c',\n        cyan: '0ff',\n        darkblue: '00008b',\n        darkcyan: '008b8b',\n        darkgoldenrod: 'b8860b',\n        darkgray: 'a9a9a9',\n        darkgrey: 'a9a9a9',\n        darkgreen: '006400',\n        darkkhaki: 'bdb76b',\n        darkmagenta: '8b008b',\n        darkolivegreen: '556b2f',\n        darkorange: 'ff8c00',\n        darkorchid: '9932cc',\n        darkred: '8b0000',\n        darksalmon: 'e9967a',\n        darkseagreen: '8fbc8f',\n        darkslateblue: '483d8b',\n        darkslategray: '2f4f4f',\n        darkslategrey: '2f4f4f',\n        darkturquoise: '00ced1',\n        darkviolet: '9400d3',\n        deeppink: 'ff1493',\n        deepskyblue: '00bfff',\n        dimgray: '696969',\n        dimgrey: '696969',\n        dodgerblue: '1e90ff',\n        firebrick: 'b22222',\n        floralwhite: 'fffaf0',\n        forestgreen: '228b22',\n        fuchsia: 'f0f',\n        gainsboro: 'dcdcdc',\n        ghostwhite: 'f8f8ff',\n        gold: 'ffd700',\n        goldenrod: 'daa520',\n        gray: '808080',\n        grey: '808080',\n        green: '008000',\n        greenyellow: 'adff2f',\n        honeydew: 'f0fff0',\n        hotpink: 'ff69b4',\n        indianred: 'cd5c5c',\n        indigo: '4b0082',\n        ivory: 'fffff0',\n        khaki: 'f0e68c',\n        lavender: 'e6e6fa',\n        lavenderblush: 'fff0f5',\n        lawngreen: '7cfc00',\n        lemonchiffon: 'fffacd',\n        lightblue: 'add8e6',\n        lightcoral: 'f08080',\n        lightcyan: 'e0ffff',\n        lightgoldenrodyellow: 'fafad2',\n        lightgray: 'd3d3d3',\n        lightgrey: 'd3d3d3',\n        lightgreen: '90ee90',\n        lightpink: 'ffb6c1',\n        lightsalmon: 'ffa07a',\n        lightseagreen: '20b2aa',\n        lightskyblue: '87cefa',\n        lightslategray: '789',\n        lightslategrey: '789',\n        lightsteelblue: 'b0c4de',\n        lightyellow: 'ffffe0',\n        lime: '0f0',\n        limegreen: '32cd32',\n        linen: 'faf0e6',\n        magenta: 'f0f',\n        maroon: '800000',\n        mediumaquamarine: '66cdaa',\n        mediumblue: '0000cd',\n        mediumorchid: 'ba55d3',\n        mediumpurple: '9370d8',\n        mediumseagreen: '3cb371',\n        mediumslateblue: '7b68ee',\n        mediumspringgreen: '00fa9a',\n        mediumturquoise: '48d1cc',\n        mediumvioletred: 'c71585',\n        midnightblue: '191970',\n        mintcream: 'f5fffa',\n        mistyrose: 'ffe4e1',\n        moccasin: 'ffe4b5',\n        navajowhite: 'ffdead',\n        navy: '000080',\n        oldlace: 'fdf5e6',\n        olive: '808000',\n        olivedrab: '6b8e23',\n        orange: 'ffa500',\n        orangered: 'ff4500',\n        orchid: 'da70d6',\n        palegoldenrod: 'eee8aa',\n        palegreen: '98fb98',\n        paleturquoise: 'afeeee',\n        palevioletred: 'd87093',\n        papayawhip: 'ffefd5',\n        peachpuff: 'ffdab9',\n        peru: 'cd853f',\n        pink: 'ffc0cb',\n        plum: 'dda0dd',\n        powderblue: 'b0e0e6',\n        purple: '800080',\n        rebeccapurple: '639',\n        red: 'f00',\n        rosybrown: 'bc8f8f',\n        royalblue: '4169e1',\n        saddlebrown: '8b4513',\n        salmon: 'fa8072',\n        sandybrown: 'f4a460',\n        seagreen: '2e8b57',\n        seashell: 'fff5ee',\n        sienna: 'a0522d',\n        silver: 'c0c0c0',\n        skyblue: '87ceeb',\n        slateblue: '6a5acd',\n        slategray: '708090',\n        slategrey: '708090',\n        snow: 'fffafa',\n        springgreen: '00ff7f',\n        steelblue: '4682b4',\n        tan: 'd2b48c',\n        teal: '008080',\n        thistle: 'd8bfd8',\n        tomato: 'ff6347',\n        turquoise: '40e0d0',\n        violet: 'ee82ee',\n        wheat: 'f5deb3',\n        white: 'fff',\n        whitesmoke: 'f5f5f5',\n        yellow: 'ff0',\n        yellowgreen: '9acd32'\n    };\n};\n","module.exports = function clearer(color) {\n    color.installMethod('clearer', function (amount) {\n        return this.alpha(isNaN(amount) ? -0.1 : -amount, true);\n    });\n};\n","module.exports = function contrast(color) {\n  // http://www.w3.org/TR/WCAG20/#contrast-ratiodef\n\n  color.use(require('./luminance'));\n\n  color.installMethod('contrast', function (color2) {\n    var lum1 = this.luminance();\n    var lum2 = color2.luminance();\n    if (lum1 > lum2) {\n      return (lum1 + 0.05) / (lum2 + 0.05);\n    }\n\n    return (lum2 + 0.05) / (lum1 + 0.05);\n  });\n};\n","module.exports = function darken(color) {\n    color.use(require('../HSL'));\n\n    color.installMethod('darken', function (amount) {\n        return this.lightness(isNaN(amount) ? -0.1 : -amount, true);\n    });\n};\n","module.exports = function desaturate(color) {\n    color.use(require('../HSL'));\n\n    color.installMethod('desaturate', function (amount) {\n        return this.saturation(isNaN(amount) ? -0.1 : -amount, true);\n    });\n};\n","module.exports = function grayscale(color) {\n    function gs () {\n        /*jslint strict:false*/\n        var rgb = this.rgb(),\n            val = rgb._red * 0.3 + rgb._green * 0.59 + rgb._blue * 0.11;\n\n        return new color.RGB(val, val, val, rgb._alpha);\n    }\n\n    color.installMethod('greyscale', gs).installMethod('grayscale', gs);\n};\n","module.exports = function isLight(color) {\n\n  color.use(require('./isDark'));\n\n  color.installMethod('isLight', function () {\n    return !this.isDark();\n  });\n};\n","module.exports = function lighten(color) {\n    color.use(require('../HSL'));\n\n    color.installMethod('lighten', function (amount) {\n        return this.lightness(isNaN(amount) ? 0.1 : amount, true);\n    });\n};\n","module.exports = function mix(color) {\n    color.installMethod('mix', function (otherColor, weight) {\n        otherColor = color(otherColor).rgb();\n        weight = 1 - (isNaN(weight) ? 0.5 : weight);\n\n        var w = weight * 2 - 1,\n            a = this._alpha - otherColor._alpha,\n            weight1 = (((w * a === -1) ? w : (w + a) / (1 + w * a)) + 1) / 2,\n            weight2 = 1 - weight1,\n            rgb = this.rgb();\n\n        return new color.RGB(\n            rgb._red * weight1 + otherColor._red * weight2,\n            rgb._green * weight1 + otherColor._green * weight2,\n            rgb._blue * weight1 + otherColor._blue * weight2,\n            rgb._alpha * weight + otherColor._alpha * (1 - weight)\n        );\n    });\n};\n","module.exports = function negate(color) {\n    color.installMethod('negate', function () {\n        var rgb = this.rgb();\n        return new color.RGB(1 - rgb._red, 1 - rgb._green, 1 - rgb._blue, this._alpha);\n    });\n};\n","module.exports = function opaquer(color) {\n    color.installMethod('opaquer', function (amount) {\n        return this.alpha(isNaN(amount) ? 0.1 : amount, true);\n    });\n};\n","module.exports = function rotate(color) {\n    color.use(require('../HSL'));\n\n    color.installMethod('rotate', function (degrees) {\n        return this.hue((degrees || 0) / 360, true);\n    });\n};\n","module.exports = function saturate(color) {\n    color.use(require('../HSL'));\n\n    color.installMethod('saturate', function (amount) {\n        return this.saturation(isNaN(amount) ? 0.1 : amount, true);\n    });\n};\n","// Adapted from http://gimp.sourcearchive.com/documentation/2.6.6-1ubuntu1/color-to-alpha_8c-source.html\n// toAlpha returns a color where the values of the argument have been converted to alpha\nmodule.exports = function toAlpha(color) {\n    color.installMethod('toAlpha', function (color) {\n        var me = this.rgb(),\n            other = color(color).rgb(),\n            epsilon = 1e-10,\n            a = new color.RGB(0, 0, 0, me._alpha),\n            channels = ['_red', '_green', '_blue'];\n\n        channels.forEach(function (channel) {\n            if (me[channel] < epsilon) {\n                a[channel] = me[channel];\n            } else if (me[channel] > other[channel]) {\n                a[channel] = (me[channel] - other[channel]) / (1 - other[channel]);\n            } else if (me[channel] > other[channel]) {\n                a[channel] = (other[channel] - me[channel]) / other[channel];\n            } else {\n                a[channel] = 0;\n            }\n        });\n\n        if (a._red > a._green) {\n            if (a._red > a._blue) {\n                me._alpha = a._red;\n            } else {\n                me._alpha = a._blue;\n            }\n        } else if (a._green > a._blue) {\n            me._alpha = a._green;\n        } else {\n            me._alpha = a._blue;\n        }\n\n        if (me._alpha < epsilon) {\n            return me;\n        }\n\n        channels.forEach(function (channel) {\n            me[channel] = (me[channel] - other[channel]) / me._alpha + other[channel];\n        });\n        me._alpha *= a._alpha;\n\n        return me;\n    });\n};\n","/*\n * color-blind\n * https://github.com/skratchdot/color-blind\n *\n * This source was copied from http://mudcu.be/sphere/js/Color.Blind.js\n *\n * It contains modifications for use in node.js.\n *\n * The original copyright is included below.\n *\n * Here is a license note copied/edited from (http://colorlab.wickline.org/colorblind/colorlab/engine.js)\n *\n *  20221013 UPDATE\n *      HCIRN appears to no longer exist. This makes it impractical\n *      for users to obtain permission from HCIRN in order to use\n *      this file for commercial works. Instead:\n *\n *      This work is licensed under a\n *      Creative Commons Attribution-ShareAlike 4.0 International License.\n *      http://creativecommons.org/licenses/by-sa/4.0/\n */\n/*\n\n    The Color Blindness Simulation function is\n    copyright (c) 2000-2001 by Matthew Wickline and the\n    Human-Computer Interaction Resource Network ( http://hcirn.com/ ).\n    \n    It is used with the permission of Matthew Wickline and HCIRN,\n    and is freely available for non-commercial use. For commercial use, please\n    contact the Human-Computer Interaction Resource Network ( http://hcirn.com/ ).\n\n\t------------------------\n\tblind.protan =\n\t\tcpu = 0.735; // confusion point, u coord\n\t\tcpv = 0.265; // confusion point, v coord\n\t\tabu = 0.115807; // color axis begining point (473nm), u coord\n\t\tabv = 0.073581; // color axis begining point (473nm), v coord\n\t\taeu = 0.471899; // color axis ending point (574nm), u coord\n\t\taev = 0.527051; // color axis ending point (574nm), v coord\n\tblind.deutan =\n\t\tcpu =  1.14; // confusion point, u coord\n\t\tcpv = -0.14; // confusion point, v coord\n\t\tabu = 0.102776; // color axis begining point (477nm), u coord\n\t\tabv = 0.102864; // color axis begining point (477nm), v coord\n\t\taeu = 0.505845; // color axis ending point (579nm), u coord\n\t\taev = 0.493211; // color axis ending point (579nm), v coord\n\tblind.tritan =\n\t\tcpu =  0.171; // confusion point, u coord\n\t\tcpv = -0.003; // confusion point, v coord\n\t\tabu = 0.045391; // color axis begining point (490nm), u coord\n\t\tabv = 0.294976; // color axis begining point (490nm), v coord\n\t\taeu = 0.665764; // color axis ending point (610nm), u coord\n\t\taev = 0.334011; // color axis ending point (610nm), v coord\n\t\t\t\n\tm = (aev - abv) / (aeu - abu); // slope of color axis\n\tyi = blind[t].abv - blind[t].abu * blind[t].m; // \"y-intercept\" of axis (on the \"v\" axis at u=0)\n\n*/\n'use strict';\n\nvar colorProfile = 'sRGB';\nvar gammaCorrection = 2.2;\nvar matrixXyzRgb = [\n\t3.240712470389558, -0.969259258688888, 0.05563600315398933,\n\t-1.5372626602963142, 1.875996969313966, -0.2039948802843549,\n\t-0.49857440415943116, 0.041556132211625726, 1.0570636917433989\n];\nvar matrixRgbXyz = [\n\t0.41242371206635076, 0.21265606784927693, 0.019331987577444885,\n\t0.3575793401363035, 0.715157818248362, 0.11919267420354762,\n\t0.1804662232369621, 0.0721864539171564, 0.9504491124870351\n];\n// xy: coordinates, m: slope, yi: y-intercept\nvar blinder = {\n\tprotan: {\n\t\tx: 0.7465,\n\t\ty: 0.2535,\n\t\tm: 1.273463,\n\t\tyi: -0.073894\n\t},\n\tdeutan: {\n\t\tx: 1.4,\n\t\ty: -0.4,\n\t\tm: 0.968437,\n\t\tyi: 0.003331\n\t},\n\ttritan: {\n\t\tx: 0.1748,\n\t\ty: 0,\n\t\tm: 0.062921,\n\t\tyi: 0.292119\n\t},\n\tcustom: {\n\t\tx: 0.735,\n\t\ty: 0.265,\n\t\tm: -1.059259,\n\t\tyi: 1.026914\n\t}\n};\n\nvar convertRgbToXyz = function (o) {\n\tvar M = matrixRgbXyz;\n\tvar z = {};\n\tvar R = o.R / 255;\n\tvar G = o.G / 255;\n\tvar B = o.B / 255;\n\tif (colorProfile === 'sRGB') {\n\t\tR = (R > 0.04045) ? Math.pow(((R + 0.055) / 1.055), 2.4) : R / 12.92;\n\t\tG = (G > 0.04045) ? Math.pow(((G + 0.055) / 1.055), 2.4) : G / 12.92;\n\t\tB = (B > 0.04045) ? Math.pow(((B + 0.055) / 1.055), 2.4) : B / 12.92;\n\t} else {\n\t\tR = Math.pow(R, gammaCorrection);\n\t\tG = Math.pow(G, gammaCorrection);\n\t\tB = Math.pow(B, gammaCorrection);\n\t}\n\tz.X = R * M[0] + G * M[3] + B * M[6];\n\tz.Y = R * M[1] + G * M[4] + B * M[7];\n\tz.Z = R * M[2] + G * M[5] + B * M[8];\n\treturn z;\n};\n\nvar convertXyzToXyy = function (o) {\n\tvar n = o.X + o.Y + o.Z;\n\tif (n === 0) {\n\t\treturn {x: 0, y: 0, Y: o.Y};\n\t}\n\treturn {x: o.X / n, y: o.Y / n, Y: o.Y};\n};\n\nexports.Blind = function (rgb, type, anomalize) {\n\tvar z, v, n,\n\t\tline, c, slope,\n\t\tyi, dx, dy,\n\t\tdX, dY, dZ,\n\t\tdR, dG, dB,\n\t\t_r, _g, _b,\n\t\tngx, ngz, M,\n\t\tadjust;\n\tif (type === \"achroma\") { // D65 in sRGB\n\t\tz = rgb.R * 0.212656 + rgb.G * 0.715158 + rgb.B * 0.072186;\n\t\tz = {R: z, G: z, B: z};\n\t\tif (anomalize) {\n\t\t\tv = 1.75;\n\t\t\tn = v + 1;\n\t\t\tz.R = (v * z.R + rgb.R) / n;\n\t\t\tz.G = (v * z.G + rgb.G) / n;\n\t\t\tz.B = (v * z.B + rgb.B) / n;\n\t\t}\n\t\treturn z;\n\t}\n\tline = blinder[type];\n\tc = convertXyzToXyy(convertRgbToXyz(rgb));\n\t// The confusion line is between the source color and the confusion point\n\tslope = (c.y - line.y) / (c.x - line.x);\n\tyi = c.y - c.x * slope; // slope, and y-intercept (at x=0)\n\t// Find the change in the x and y dimensions (no Y change)\n\tdx = (line.yi - yi) / (slope - line.m);\n\tdy = (slope * dx) + yi;\n\tdY = 0;\n\t// Find the simulated colors XYZ coords\n\tz = {};\n\tz.X = dx * c.Y / dy;\n\tz.Y = c.Y;\n\tz.Z = (1 - (dx + dy)) * c.Y / dy;\n\t// Calculate difference between sim color and neutral color\n\tngx = 0.312713 * c.Y / 0.329016; // find neutral grey using D65 white-point\n\tngz = 0.358271 * c.Y / 0.329016;\n\tdX = ngx - z.X;\n\tdZ = ngz - z.Z;\n\t// find out how much to shift sim color toward neutral to fit in RGB space\n\tM = matrixXyzRgb;\n\tdR = dX * M[0] + dY * M[3] + dZ * M[6]; // convert d to linear RGB\n\tdG = dX * M[1] + dY * M[4] + dZ * M[7];\n\tdB = dX * M[2] + dY * M[5] + dZ * M[8];\n\tz.R = z.X * M[0] + z.Y * M[3] + z.Z * M[6]; // convert z to linear RGB\n\tz.G = z.X * M[1] + z.Y * M[4] + z.Z * M[7];\n\tz.B = z.X * M[2] + z.Y * M[5] + z.Z * M[8];\n\t_r = ((z.R < 0 ? 0 : 1) - z.R) / dR;\n\t_g = ((z.G < 0 ? 0 : 1) - z.G) / dG;\n\t_b = ((z.B < 0 ? 0 : 1) - z.B) / dB;\n\t_r = (_r > 1 || _r < 0) ? 0 : _r;\n\t_g = (_g > 1 || _g < 0) ? 0 : _g;\n\t_b = (_b > 1 || _b < 0) ? 0 : _b;\n\tadjust = _r > _g ? _r : _g;\n\tif (_b > adjust) {\n\t\tadjust = _b;\n\t}\n\t// shift proportionally...\n\tz.R += adjust * dR;\n\tz.G += adjust * dG;\n\tz.B += adjust * dB;\n\t// apply gamma and clamp simulated color...\n\tz.R = 255 * (z.R <= 0 ? 0 : z.R >= 1 ? 1 : Math.pow(z.R, 1 / gammaCorrection));\n\tz.G = 255 * (z.G <= 0 ? 0 : z.G >= 1 ? 1 : Math.pow(z.G, 1 / gammaCorrection));\n\tz.B = 255 * (z.B <= 0 ? 0 : z.B >= 1 ? 1 : Math.pow(z.B, 1 / gammaCorrection));\n\t//\n\tif (anomalize) {\n\t\tv = 1.75;\n\t\tn = v + 1;\n\t\tz.R = (v * z.R + rgb.R) / n;\n\t\tz.G = (v * z.G + rgb.G) / n;\n\t\tz.B = (v * z.B + rgb.B) / n;\n\t}\n\t//\n\treturn z;\n};\n","/*\n * color-blind\n * https://github.com/skratchdot/color-blind\n *\n * see blind.js for more information about the original source.\n *\n * Copyright (c) 2014 skratchdot\n * Licensed under the MIT license.\n */\n'use strict';\n\nvar onecolor = require('onecolor');\nvar Blind = require('./blind.js').Blind;\nvar colorVisionData = {\n\tprotanomaly: {type: \"protan\", anomalize: true},\n\tprotanopia: {type: \"protan\"},\n\tdeuteranomaly: {type: \"deutan\", anomalize: true},\n\tdeuteranopia: {type: \"deutan\"},\n\ttritanomaly: {type: \"tritan\", anomalize: true},\n\ttritanopia: {type: \"tritan\"},\n\tachromatomaly: {type: \"achroma\", anomalize: true},\n\tachromatopsia: {type: \"achroma\"}\n};\nvar denorm = function (ratio) {\n\treturn Math.round(ratio * 255);\n};\nvar createBlinder = function (key) {\n\treturn function (colorString, returnRgb) {\n\t\tvar color = onecolor(colorString);\n\t\tif (!color) {\n\t\t\treturn returnRgb ? {R:0,G:0,B:0} : '#000000';\n\t\t}\n\t\tvar rgb = new Blind({\n\t\t\tR: denorm(color.red() || 0),\n\t\t\tG: denorm(color.green() || 0),\n\t\t\tB: denorm(color.blue() || 0)\n\t\t}, colorVisionData[key].type, colorVisionData[key].anomalize);\n\t\t// blinder.tritanomaly('#000000') causes NaN / null\n\t\trgb.R = rgb.R || 0;\n\t\trgb.G = rgb.G || 0;\n\t\trgb.B = rgb.B || 0;\n\t\tif (returnRgb) {\n\t\t\tdelete rgb.X;\n\t\t\tdelete rgb.Y;\n\t\t\tdelete rgb.Z;\n\t\t\treturn rgb;\n\t\t}\n\t\treturn new onecolor.RGB(\n\t\t\t(rgb.R % 256) / 255,\n\t\t\t(rgb.G % 256) / 255,\n\t\t\t(rgb.B % 256) / 255,\n\t\t\t1\n\t\t).hex();\n\t};\n};\n\n// add our exported functions\nfor (var key in colorVisionData) {\n\texports[key] = createBlinder(key);\n}\n","import { colorBlindnessSimulation } from './colorBlindness';\nimport { grayscale } from './grayscale';\nexport const colorSimulation = (color, type = 'normal') => {\n    if (type === 'grayscale') {\n        return grayscale(color);\n    }\n    return colorBlindnessSimulation(color, type);\n};\nexport { isColorBlindnessSimulation } from './colorBlindness';\nexport { invertGrayscale } from './grayscale';\n//# sourceMappingURL=index.js.map","import { arrayToColor, colorToArray, colorToGray, grayToColor } from '../utils';\n// get color in grayscale\nexport const grayscale = (color) => {\n    const gray = colorToGray(color);\n    const [, , , alpha = 1] = colorToArray(color, 'rgba');\n    return grayToColor(gray, alpha);\n};\n// invert color from the gray scale value\n// grayscaleValue: [0, 1]\nexport function invertGrayscale(grayscaleValue, color) {\n    const [, a, b] = colorToArray(color, 'lab');\n    const [, , , alpha = 1] = colorToArray(color, 'rgba');\n    const target = grayscaleValue * 100;\n    let L = Math.round(target);\n    let newGray = colorToGray(arrayToColor([L, a, b], 'lab'));\n    let cnt = 25;\n    while (Math.round(target) !== Math.round((newGray / 255) * 100) && cnt > 0) {\n        if (target > (newGray / 255) * 100) {\n            L += 1;\n        }\n        else {\n            L -= 1;\n        }\n        cnt -= 1;\n        newGray = colorToGray(arrayToColor([L, a, b], 'lab'));\n    }\n    if (Math.round(target) < Math.round((newGray / 255) * 100))\n        L -= 1;\n    let newColor;\n    if (alpha === 1) {\n        newColor = arrayToColor([L, a, b], 'lab');\n    }\n    else {\n        const rgb = colorToArray(arrayToColor([L, a, b], 'lab'), 'rgb');\n        newColor = arrayToColor([...rgb, alpha], 'rgba');\n    }\n    return { ...color, ...newColor };\n}\n//# sourceMappingURL=grayscale.js.map","// @ts-ignore\nimport blinder from 'color-blind';\nimport { COLOR_BLINDNESS_SIMULATION_TYPES } from '../constant';\nimport { hexToColor, colorToHex } from '../utils';\nexport function isColorBlindnessSimulation(type) {\n    return type !== 'normal' && COLOR_BLINDNESS_SIMULATION_TYPES.indexOf(type) > -1;\n}\n// get color in color blindness simulation\nexport const colorBlindnessSimulation = (color, type = 'normal') => {\n    if (type === 'normal') {\n        return { ...color };\n    }\n    const hexColor = colorToHex(color);\n    const blindColor = blinder[type](hexColor);\n    return hexToColor(blindColor);\n};\n//# sourceMappingURL=colorBlindness.js.map","import { colorToArray, arrayToColor, randomInt } from '../utils';\n// Fix a, b, vary L\nexport const discreteScaleGenerationInLab = (color, count, lRange = [randomInt(5, 10), randomInt(90, 95)]) => {\n    const [L, a, b] = colorToArray(color, 'lab');\n    const minL = L <= 15 ? L : lRange[0];\n    const maxL = L >= 85 ? L : lRange[1];\n    let dLightness = (maxL - minL) / (count - 1);\n    // basic color index\n    const index = Math.ceil((L - minL) / dLightness);\n    dLightness = index === 0 ? dLightness : (L - minL) / index;\n    return new Array(count).fill(0).map((d, i) => arrayToColor([dLightness * i + minL, a, b], 'lab'));\n};\n//# sourceMappingURL=discreteScaleGeneration.js.map","import { discreteScaleGenerationInLab } from './discreteScaleGeneration';\n// generate sequential palette by monochromatic scheme\nexport const monochromaticGeneration = (configuration) => {\n    const { count, color, tendency } = configuration;\n    const isTint = tendency === 'tint';\n    const newColors = discreteScaleGenerationInLab(color, count);\n    const palette = {\n        name: 'monochromatic',\n        semantic: null,\n        type: 'discrete-scale',\n        colors: isTint ? newColors : newColors.reverse(),\n    };\n    return palette;\n};\n//# sourceMappingURL=monochromaticGeneration.js.map","import { monochromaticGeneration } from './monochromaticGeneration';\nconst BLACK = {\n    model: 'rgb',\n    value: { r: 0, g: 0, b: 0 },\n};\nconst WHITE = {\n    model: 'rgb',\n    value: { r: 255, g: 255, b: 255 },\n};\n// generate sequential palette by achromatic scheme\nexport const achromaticGeneration = (configuration) => {\n    const { tendency } = configuration;\n    const newConfiguration = {\n        ...configuration,\n        color: tendency === 'tint' ? BLACK : WHITE,\n    };\n    const palette = monochromaticGeneration(newConfiguration);\n    return {\n        ...palette,\n        name: 'achromatic',\n    };\n};\n//# sourceMappingURL=achromaticGeneration.js.map","import chroma from 'chroma-js';\nimport { colorToChromaColor } from '../../utils';\n// Computes the Euclidean distance between two colors in a given color model (default is Lab).\n// output range: [0, 255]\nexport const euclideanDistance = (color1, color2, colorModel = 'lab') => {\n    return chroma.distance(colorToChromaColor(color1), colorToChromaColor(color2), colorModel);\n};\n//# sourceMappingURL=euclideanDistance.js.map","import { colorToArray, rad2deg, deg2rad } from '../../utils';\nconst hp = (x, y) => {\n    const tmphp = rad2deg(Math.atan2(x, y));\n    if (tmphp >= 0)\n        return tmphp;\n    return tmphp + 360;\n};\n// ref: https://en.wikipedia.org/wiki/Color_difference#CIEDE2000\n// output range: [0, 100]\nexport const CIEDE2000 = (color1, color2) => {\n    // weight, usually unity\n    const kL = 1;\n    const kC = 1;\n    const kH = 1;\n    // Get L,a,b values for color\n    const [L1, a1, b1] = colorToArray(color1, 'lab');\n    const [L2, a2, b2] = colorToArray(color2, 'lab');\n    const C1 = Math.sqrt(a1 ** 2 + b1 ** 2);\n    const C2 = Math.sqrt(a2 ** 2 + b2 ** 2);\n    const avgC = (C1 + C2) / 2;\n    const p = 0.5 * (1 - Math.sqrt(avgC ** 7 / (avgC ** 7 + 25 ** 7)));\n    const a1p = (1.0 + p) * a1;\n    const a2p = (1.0 + p) * a2;\n    const C1p = Math.sqrt(a1p ** 2 + b1 ** 2);\n    const C2p = Math.sqrt(a2p ** 2 + b2 ** 2);\n    const h1p = hp(b1, a1p);\n    const h2p = hp(b2, a2p);\n    const dLp = L2 - L1;\n    const dCp = C2p - C1p;\n    let dhp;\n    if (Math.abs(h2p - h1p) <= 180)\n        dhp = h2p - h1p;\n    else if (h2p - h1p < -180)\n        dhp = h2p - h1p + 360;\n    else\n        dhp = h2p - h1p - 360; // h2p - h1p > 180\n    const dHp = 2 * Math.sqrt(C1p * C2p) * Math.sin(deg2rad(dhp) / 2.0);\n    let avgHp;\n    if (Math.abs(h1p - h2p) <= 180)\n        avgHp = (h1p + h2p) / 2.0;\n    else if (Math.abs(h1p - h2p) > 180 && h1p + h2p < 360)\n        avgHp = (h1p + h2p + 360) / 2.0;\n    else\n        avgHp = (h1p + h2p - 360) / 2.0; // Math.abs(h1p - h2p) > 180 && h1p + h2p >= 360\n    const avgL = (L1 + L2) / 2.0;\n    const avgCp = (C1p + C2p) / 2.0;\n    const T = 1 -\n        0.17 * Math.cos(deg2rad(avgHp - 30)) +\n        0.24 * Math.cos(deg2rad(2 * avgHp)) +\n        0.32 * Math.cos(deg2rad(3 * avgHp + 6)) -\n        0.2 * Math.cos(deg2rad(4 * avgHp - 63));\n    const SL = 1 + (0.015 * (avgL - 50) ** 2) / Math.sqrt(20 + (avgL - 50) ** 2);\n    const SC = 1 + 0.045 * avgCp;\n    const SH = 1 + 0.015 * avgCp * T;\n    const RT = -2 *\n        Math.sqrt(avgCp ** 7 / (avgCp ** 7 + 25.0 ** 7)) *\n        Math.sin(deg2rad(60 * Math.exp(-(((avgHp - 275) / 25) ** 2))));\n    const dE = Math.sqrt((dLp / (SL * kL)) ** 2 +\n        (dCp / (SC * kC)) ** 2 +\n        (dHp / (SH * kH)) ** 2 +\n        RT * (dCp / (SC * kC)) * (dHp / (SH * kH)));\n    return dE;\n};\n//# sourceMappingURL=CIEDE2000.js.map","import { colorToArray } from '../../utils';\nconst compute = (num) => {\n    const n = num / 255;\n    if (n <= 0.03928) {\n        return n / 12.92;\n    }\n    return ((n + 0.055) / 1.055) ** 2.4;\n};\nconst calcRelativeLuminance = (color) => {\n    const [r, g, b] = colorToArray(color);\n    return 0.2126 * compute(r) + 0.7152 * compute(g) + 0.0722 * compute(b);\n};\n// ref: https://www.w3.org/TR/WCAG21/#dfn-contrast-ratio\n// Contrast ratios can range from 1 to 21 (commonly written 1:1 to 21:1).\nexport const contrastRatio = (color1, color2) => {\n    const L1 = calcRelativeLuminance(color1);\n    const L2 = calcRelativeLuminance(color2);\n    if (L2 > L1) {\n        return (L2 + 0.05) / (L1 + 0.05);\n    }\n    return (L1 + 0.05) / (L2 + 0.05);\n};\n//# sourceMappingURL=contrastRatio.js.map","import { WHITE } from '../../constant';\nimport { colorBlend } from '../../utils';\nimport { euclideanDistance } from './euclideanDistance';\nimport { CIEDE2000 } from './CIEDE2000';\nimport { contrastRatio } from './contrastRatio';\nexport const colorDifference = (color1, color2, configuration = { measure: 'euclidean' }) => {\n    const { measure = 'euclidean', backgroundColor = WHITE } = configuration;\n    // If the color is semi-transparent, the color will be overlapped on a white background by default for comparison\n    const overlappedColor1 = colorBlend(color1, backgroundColor);\n    const overlappedColor2 = colorBlend(color2, backgroundColor);\n    switch (measure) {\n        case 'CIEDE2000':\n            return CIEDE2000(overlappedColor1, overlappedColor2);\n        case 'euclidean':\n            // @ts-ignore\n            return euclideanDistance(overlappedColor1, overlappedColor2, configuration.colorModel);\n        case 'contrastRatio':\n            return contrastRatio(overlappedColor1, overlappedColor2);\n        default:\n            return euclideanDistance(overlappedColor1, overlappedColor2);\n    }\n};\n//# sourceMappingURL=index.js.map","import { ColorModelRange as COLOR_MODEL_RANGE } from '@antv/color-schema';\nimport { arrayToColor, grayToColor, random, randomInt, cloneDeep } from '../utils';\nimport { colorDifference } from '../evaluators';\nimport { colorSimulation } from '../simulators';\n// Genetic algorithm configuration\nconst POPULATION_NUMBER = 50;\nconst CROSSOVER_RATE = 0.9;\nconst MUTATION_RATE = 0.1;\nconst MAX_GENERATION = 100;\nconst ADAPTIVE_RANGE = [0.8, 1.2];\nconst rouletteWheelSelection = (fitnesses) => {\n    const sumFitness = fitnesses.reduce((a, b) => a + b);\n    let index = 0;\n    const seed = random(sumFitness);\n    let count = 0;\n    for (let i = 0; i < fitnesses.length; i += 1) {\n        count += fitnesses[i];\n        if (seed < count) {\n            index = +i;\n        }\n    }\n    return index;\n};\nconst tournamentSelection = (fitnesses) => {\n    const TOURNAMENT_SIZE = 3;\n    let index = -1;\n    let maxFitness = 0;\n    for (let i = 0; i < TOURNAMENT_SIZE; i += 1) {\n        const randomIndex = randomInt(fitnesses.length - 1);\n        if (fitnesses[randomIndex] > maxFitness) {\n            index = i;\n            maxFitness = fitnesses[randomIndex];\n        }\n    }\n    return index;\n};\nconst selectionFunction = {\n    rouletteWheel: rouletteWheelSelection,\n    tournament: tournamentSelection,\n};\nconst selection = (fitnesses, type = 'tournament') => {\n    return selectionFunction[type](fitnesses);\n};\nconst crossover = (father, mother) => {\n    const child1 = cloneDeep(father);\n    const child2 = cloneDeep(mother);\n    for (let i = 1; i < father.length; i += 2) {\n        child1[i] = mother[i];\n        child2[i] = father[i];\n    }\n    return [child1, child2];\n};\nconst mutate = (colors, unlockedIndexs, simulationType, colorModel) => {\n    const newColors = cloneDeep(colors);\n    // pick one color and change color adaptively\n    const mutateIndex = unlockedIndexs[randomInt(unlockedIndexs.length - 1)];\n    const dimensionIndex = randomInt(colors[0].length - 1);\n    let newValue = newColors[mutateIndex][dimensionIndex] * random(...ADAPTIVE_RANGE);\n    // clip\n    let range = [15, 240]; // grayscale\n    if (simulationType !== 'grayscale') {\n        range = COLOR_MODEL_RANGE[colorModel][colorModel.split('')[dimensionIndex]];\n    }\n    const [min, max] = range;\n    if (newValue < min) {\n        newValue = min;\n    }\n    else if (newValue > max) {\n        newValue = max;\n    }\n    newColors[mutateIndex][dimensionIndex] = newValue;\n    return newColors;\n};\n// fitness function\nexport const calFitness = (colors, locked, simulationType, colorModel, colorDifferenceMeasure, backgroundColor) => {\n    let newColors;\n    if (simulationType === 'grayscale') {\n        newColors = colors.map(([gray]) => grayToColor(gray));\n    }\n    else {\n        newColors = colors.map((color) => colorSimulation(arrayToColor(color, colorModel), simulationType));\n    }\n    let minDifference = Infinity;\n    for (let i = 0; i < newColors.length; i += 1) {\n        for (let j = i + 1; j < newColors.length; j += 1) {\n            if (!(locked[i] && locked[j])) {\n                minDifference = Math.min(minDifference, colorDifference(newColors[i], newColors[j], { measure: colorDifferenceMeasure, backgroundColor }));\n            }\n        }\n    }\n    return minDifference;\n};\nexport const optimizePaletteByGA = (colors, locked, simulationType, threshold, colorModel, colorDifference, backgroundColor) => {\n    if (Math.round(calFitness(colors, locked, simulationType, colorModel, colorDifference, backgroundColor)) > threshold) {\n        return colors;\n    }\n    const unlockedIndexs = new Array(colors.length)\n        .fill(0)\n        .map((d, index) => index)\n        .filter((d, index) => !locked[index]);\n    // Creating a new generation\n    let population = new Array(POPULATION_NUMBER)\n        .fill(0)\n        .map(() => mutate(colors, unlockedIndexs, simulationType, colorModel));\n    // Evaluating individuals\n    let fitnesses = population.map((colors) => calFitness(colors, locked, simulationType, colorModel, colorDifference, backgroundColor));\n    let bestFitness = Math.max(...fitnesses);\n    let elites = population[fitnesses.findIndex((d) => d === bestFitness)];\n    let cnt = 1;\n    while (cnt < MAX_GENERATION && Math.round(bestFitness) < threshold) {\n        // Elitist Strategy\n        const newPopulation = [elites];\n        for (let i = 1; i < POPULATION_NUMBER; i += 2) {\n            // Selection\n            const father = population[selection(fitnesses)];\n            const mother = population[selection(fitnesses)];\n            // Reproduction\n            let children = random() < CROSSOVER_RATE ? crossover(father, mother) : [father, mother];\n            // Mutation\n            children = children.map((child) => random() < MUTATION_RATE ? mutate(child, unlockedIndexs, simulationType, colorModel) : child);\n            newPopulation.push(...children);\n        }\n        population = newPopulation;\n        fitnesses = population.map((colors) => calFitness(colors, locked, simulationType, colorModel, colorDifference, backgroundColor));\n        const newBestFitness = Math.max(...fitnesses);\n        bestFitness = newBestFitness;\n        elites = population[fitnesses.findIndex((d) => d === newBestFitness)];\n        cnt += 1;\n    }\n    return elites;\n};\n//# sourceMappingURL=optimizePaletteByGA.js.map","import { isContinuousPalette, isMatrixPalette } from '@antv/color-schema';\nimport { WHITE } from '../constant';\nimport { invertGrayscale } from '../simulators';\nimport { colorToGray, colorToArray, arrayToColor, cloneDeep } from '../utils';\nimport { optimizePaletteByGA } from './optimizePaletteByGA';\nconst COLOR_DIFFERENCE_DEFAULT_VALUE = {\n    euclidean: 30,\n    // ref: Categorical Colormap Optimization with Visualization Case Studies\n    // suggests that [20, 25] might be the borderline zone\n    CIEDE2000: 20,\n    // WCAG, 1.4.3 Contrast (Minimum)\n    contrastRatio: 4.5,\n};\nconst COLOR_DIFFERENCE_MAX_VALUE = {\n    euclidean: 291.48,\n    CIEDE2000: 100,\n    contrastRatio: 21,\n};\nexport const paletteOptimization = (palette, configuration = {}) => {\n    const { locked = [], simulationType = 'normal', threshold, colorModel = 'hsv', colorDifferenceMeasure = 'euclidean', backgroundColor = WHITE, } = configuration;\n    let newThreshold = threshold;\n    // set default value\n    if (!newThreshold) {\n        newThreshold = COLOR_DIFFERENCE_DEFAULT_VALUE[colorDifferenceMeasure];\n    }\n    // In case of grayscale mode, the maximum difference between two can be estimated directly\n    // If the set threshold is outside of this range, trim directly to save optimization time\n    if (simulationType === 'grayscale') {\n        const maxValue = COLOR_DIFFERENCE_MAX_VALUE[colorDifferenceMeasure];\n        newThreshold = Math.min(newThreshold, maxValue / palette.colors.length);\n    }\n    const newPalette = cloneDeep(palette);\n    if (!isMatrixPalette(newPalette) && !isContinuousPalette(newPalette)) {\n        if (simulationType === 'grayscale') {\n            const colors = newPalette.colors.map((color) => [colorToGray(color)]);\n            const newColors = optimizePaletteByGA(colors, locked, simulationType, newThreshold, colorModel, colorDifferenceMeasure, backgroundColor);\n            newPalette.colors.forEach((color, index) => Object.assign(color, invertGrayscale(newColors[index][0] / 255, color)));\n        }\n        else {\n            const colors = newPalette.colors.map((color) => colorToArray(color, colorModel));\n            const newColors = optimizePaletteByGA(colors, locked, simulationType, newThreshold, colorModel, colorDifferenceMeasure, backgroundColor);\n            newPalette.colors.forEach((color, index) => {\n                Object.assign(color, arrayToColor(newColors[index], colorModel));\n            });\n        }\n    }\n    return newPalette;\n};\n//# sourceMappingURL=index.js.map","export function isCategoricalPalette(palette) {\n    if (palette.type === 'categorical')\n        return true;\n    return false;\n}\nexport function isDiscreteScalePalette(palette) {\n    if (palette.type === 'discrete-scale')\n        return true;\n    return false;\n}\nexport function isContinuousPalette(palette) {\n    if (palette.type === 'continuous-scale')\n        return true;\n    return false;\n}\nexport function isMatrixPalette(palette) {\n    if (palette.type === 'matrix')\n        return true;\n    return false;\n}\n//# sourceMappingURL=palette.js.map","import { colorToArray, arrayToColor, hueOffset, random } from '../utils';\nconst saturationRange = [0.3, 0.9];\nconst valueRange = [0.5, 1];\nexport const categoricalGenerationInHsv = (color, dHue, count, colors = []) => {\n    const [h] = colorToArray(color, 'hsv');\n    const locked = new Array(count).fill(false);\n    let placeBasicColor = colors.findIndex((c) => c && c.model === color.model && c.value === color.value) === -1;\n    const newColors = new Array(count).fill(0).map((d, i) => {\n        const lockedColor = colors[i];\n        if (lockedColor) {\n            locked[i] = true;\n            return lockedColor;\n        }\n        // find the first unlocked position to place the basic color\n        if (placeBasicColor) {\n            placeBasicColor = false;\n            locked[i] = true;\n            return color;\n        }\n        return arrayToColor([hueOffset(h, dHue * i), random(...saturationRange), random(...valueRange)], 'hsv');\n    });\n    return {\n        newColors,\n        locked,\n    };\n};\n//# sourceMappingURL=categoricalGeneration.js.map","import { arrayToColor, randomInt } from '../utils';\nexport function randomColor() {\n    const r = randomInt(255);\n    const g = randomInt(255);\n    const b = randomInt(255);\n    return arrayToColor([r, g, b], 'rgb');\n}\n//# sourceMappingURL=random.js.map","import { paletteOptimization } from '../optimizers';\nimport { randomColor } from './random';\n// generate categorical palette randomly\nexport const randomGeneration = (configuration) => {\n    const { count, colors } = configuration;\n    const locked = [];\n    const palette = {\n        name: 'random',\n        semantic: null,\n        type: 'categorical',\n        colors: new Array(count).fill(0).map((d, i) => {\n            const lockedColor = colors[i];\n            if (lockedColor) {\n                locked[i] = true;\n                return lockedColor;\n            }\n            return randomColor();\n        }),\n    };\n    return paletteOptimization(palette, { locked });\n};\n//# sourceMappingURL=randomGeneration.js.map","import { randomColor } from './random';\nconst DISCRETE_SCALE_TYPES = ['monochromatic'];\nexport const validateConfiguration = (type, configuration) => {\n    const { count = 8, tendency = 'tint' } = configuration;\n    let { colors = [], color } = configuration;\n    // If the colour is not configured\n    // then select the first of the locked colors or generate a random color\n    if (!color) {\n        color = colors.find((c) => !!c && !!c.model && !!c.value) || randomColor();\n    }\n    // Discrete scale palette cannot be generated when colors are locked.\n    if (DISCRETE_SCALE_TYPES.includes(type)) {\n        colors = [];\n    }\n    return {\n        color,\n        colors,\n        count,\n        tendency,\n    };\n};\n//# sourceMappingURL=validateConfiguration.js.map","import { monochromaticGeneration } from './monochromaticGeneration';\nimport { analogousGeneration } from './analogousGeneration';\nimport { achromaticGeneration } from './achromaticGeneration';\nimport { complementaryGeneration } from './complementaryGeneration';\nimport { splitComplementaryGeneration } from './splitComplementaryGeneration';\nimport { triadicGeneration } from './triadicGeneration';\nimport { tetradicGeneration } from './tetradicGeneration';\nimport { polychromaticGeneration } from './polychromaticGeneration';\nimport { randomGeneration } from './randomGeneration';\nimport { validateConfiguration } from './validateConfiguration';\nconst generator = {\n    monochromatic: monochromaticGeneration,\n    analogous: analogousGeneration,\n    achromatic: achromaticGeneration,\n    complementary: complementaryGeneration,\n    'split-complementary': splitComplementaryGeneration,\n    triadic: triadicGeneration,\n    tetradic: tetradicGeneration,\n    polychromatic: polychromaticGeneration,\n    customized: randomGeneration,\n};\n/**\n *\n * @param type\n * @param colors locked colors\n * @param configuration\n * @returns\n */\nexport const paletteGeneration = (type = 'monochromatic', configuration = {}) => {\n    // set default value\n    const newConfiguration = validateConfiguration(type, configuration);\n    try {\n        return generator[type](newConfiguration);\n    }\n    catch (e) {\n        return randomGeneration(newConfiguration);\n    }\n};\n//# sourceMappingURL=index.js.map","import { colorToArray, arrayToColor, hueOffset } from '../utils';\n// generate sequential palette by analogous scheme\nexport const analogousGeneration = (configuration) => {\n    const { count, color, tendency } = configuration;\n    const isTint = tendency === 'tint';\n    const [hue, saturation, value] = colorToArray(color, 'hsv');\n    const index = Math.floor(count / 2);\n    // Ref: Ant Design 3.x palette algorithm https://zhuanlan.zhihu.com/p/32422584\n    let dHue = 60 / (count - 1);\n    if (hue >= 60 && hue <= 240) {\n        // cool undertone\n        dHue = -dHue;\n    }\n    const dSaturation = (saturation - 0.1) / 3 / (count - index - 1);\n    const dValue = (value - 0.4) / 3 / index;\n    const newColors = new Array(count).fill(0).map((d, i) => {\n        const h = hueOffset(hue, dHue * (i - index));\n        const s = i <= index ? Math.min(saturation + dSaturation * (index - i), 1) : saturation + 3 * dSaturation * (index - i);\n        const v = i <= index ? value - 3 * dValue * (index - i) : Math.min(value - dValue * (index - i), 1);\n        return arrayToColor([h, s, v], 'hsv');\n    });\n    const palette = {\n        name: 'analogous',\n        semantic: null,\n        type: 'discrete-scale',\n        colors: isTint ? newColors : newColors.reverse(),\n    };\n    return palette;\n};\n//# sourceMappingURL=analogousGeneration.js.map","import { colorToArray, arrayToColor, hueOffset, random, randomInt } from '../utils';\nimport { discreteScaleGenerationInLab } from './discreteScaleGeneration';\n// generate diverging palette by complementary scheme\nexport const complementaryGeneration = (configuration) => {\n    const { count, color } = configuration;\n    const [hue, saturation, value] = colorToArray(color, 'hsv');\n    const complementaryColor = arrayToColor([hueOffset(hue, 180), saturation, value], 'hsv');\n    const maxL = randomInt(80, 90);\n    const minL = randomInt(15, 25);\n    const halfCount = Math.floor(count / 2);\n    const left = discreteScaleGenerationInLab(color, halfCount, [minL, maxL]);\n    const right = discreteScaleGenerationInLab(complementaryColor, halfCount, [minL, maxL]).reverse();\n    let newColors;\n    if (count % 2 === 1) {\n        const midColor = arrayToColor([(hueOffset(hue, 180) + hue) / 2, random(0.05, 0.1), random(0.9, 0.95)], 'hsv');\n        newColors = [...left, midColor, ...right];\n    }\n    else {\n        newColors = [...left, ...right];\n    }\n    const palette = {\n        name: 'complementary',\n        semantic: null,\n        type: 'discrete-scale',\n        colors: newColors,\n    };\n    return palette;\n};\n//# sourceMappingURL=complementaryGeneration.js.map","import { paletteOptimization } from '../optimizers';\nimport { categoricalGenerationInHsv } from './categoricalGeneration';\n// generate categorical palette by split complementary scheme\nexport const splitComplementaryGeneration = (configuration) => {\n    const { count, color, colors } = configuration;\n    const dHue = 180;\n    const { newColors, locked } = categoricalGenerationInHsv(color, dHue, count, colors);\n    const palette = {\n        name: 'tetradic',\n        semantic: null,\n        type: 'categorical',\n        colors: newColors,\n    };\n    return paletteOptimization(palette, { locked });\n};\n//# sourceMappingURL=splitComplementaryGeneration.js.map","import { paletteOptimization } from '../optimizers';\nimport { categoricalGenerationInHsv } from './categoricalGeneration';\n// generate categorical palette by triadic scheme\nexport const triadicGeneration = (configuration) => {\n    const { count, color, colors } = configuration;\n    const dHue = 120;\n    const { newColors, locked } = categoricalGenerationInHsv(color, dHue, count, colors);\n    const palette = {\n        name: 'tetradic',\n        semantic: null,\n        type: 'categorical',\n        colors: newColors,\n    };\n    return paletteOptimization(palette, { locked });\n};\n//# sourceMappingURL=triadicGeneration.js.map","import { paletteOptimization } from '../optimizers';\nimport { categoricalGenerationInHsv } from './categoricalGeneration';\n// generate categorical palette by tetradic scheme\nexport const tetradicGeneration = (configuration) => {\n    const { count, color, colors } = configuration;\n    const dHue = 90;\n    const { newColors, locked } = categoricalGenerationInHsv(color, dHue, count, colors);\n    const palette = {\n        name: 'tetradic',\n        semantic: null,\n        type: 'categorical',\n        colors: newColors,\n    };\n    return paletteOptimization(palette, { locked });\n};\n//# sourceMappingURL=tetradicGeneration.js.map","import { paletteOptimization } from '../optimizers';\nimport { categoricalGenerationInHsv } from './categoricalGeneration';\n// generate categorical palette by polychromatic scheme\nexport const polychromaticGeneration = (configuration) => {\n    const { count, color, colors } = configuration;\n    const dHue = 360 / count;\n    const { newColors, locked } = categoricalGenerationInHsv(color, dHue, count, colors);\n    const palette = {\n        name: 'tetradic',\n        semantic: null,\n        type: 'categorical',\n        colors: newColors,\n    };\n    return paletteOptimization(palette, { locked });\n};\n//# sourceMappingURL=polychromaticGeneration.js.map","import { __read, __spreadArray } from \"tslib\";\nimport { CHART_IDS } from '../../ckb';\nimport { pearson, isParentChild } from '../../data';\nimport { compare, hasSubset, intersects } from '../utils';\n/* !!!START pie_chart & donut_chart ------------------- */\nfunction splitAngleColor(dataProps) {\n    var field4Color = dataProps.find(function (field) { return hasSubset(field.levelOfMeasurements, ['Nominal']); });\n    var field4Angle = dataProps.find(function (field) { return hasSubset(field.levelOfMeasurements, ['Interval']); });\n    return [field4Color, field4Angle];\n}\nfunction pieChart(data, dataProps) {\n    var _a = __read(splitAngleColor(dataProps), 2), field4Color = _a[0], field4Angle = _a[1];\n    if (!field4Angle || !field4Color)\n        return null;\n    var spec = {\n        type: 'interval',\n        data: data,\n        encode: {\n            color: field4Color.name,\n            y: field4Angle.name,\n        },\n        transform: [{ type: 'stackY' }],\n        coordinate: { type: 'theta' },\n    };\n    return spec;\n}\nfunction donutChart(data, dataProps) {\n    var _a = __read(splitAngleColor(dataProps), 2), field4Color = _a[0], field4Angle = _a[1];\n    if (!field4Angle || !field4Color)\n        return null;\n    var spec = {\n        type: 'interval',\n        data: data,\n        encode: {\n            color: field4Color.name,\n            y: field4Angle.name,\n        },\n        transform: [{ type: 'stackY' }],\n        coordinate: { type: 'theta', innerRadius: 0.6 },\n    };\n    return spec;\n}\n/* !!!END pie_chart & donut_chart ------------------- */\n/* !!!START line_chart & step_line_chart ------------------- */\nfunction splitLineXY(dataProps) {\n    var field4X = dataProps.find(function (field) { return intersects(field.levelOfMeasurements, ['Time', 'Ordinal']); });\n    var field4Y = dataProps.find(function (field) { return hasSubset(field.levelOfMeasurements, ['Interval']); });\n    var field4Color = dataProps.find(function (field) { return hasSubset(field.levelOfMeasurements, ['Nominal']); });\n    return [field4X, field4Y, field4Color];\n}\nfunction lineChart(data, dataProps) {\n    var _a = __read(splitLineXY(dataProps), 3), field4X = _a[0], field4Y = _a[1], field4Color = _a[2];\n    if (!field4X || !field4Y)\n        return null;\n    var spec = {\n        type: 'line',\n        data: data,\n        encode: {\n            x: field4X.name,\n            y: field4Y.name,\n        },\n    };\n    if (field4Color) {\n        spec.encode.color = field4Color.name;\n    }\n    return spec;\n}\nfunction stepLineChart(data, dataProps) {\n    var _a = __read(splitLineXY(dataProps), 3), field4X = _a[0], field4Y = _a[1], field4Color = _a[2];\n    if (!field4X || !field4Y)\n        return null;\n    var spec = {\n        type: 'line',\n        data: data,\n        encode: {\n            x: field4X.name,\n            y: field4Y.name,\n            shape: 'hvh',\n        },\n    };\n    if (field4Color) {\n        spec.encode.color = field4Color.name;\n    }\n    return spec;\n}\n/* !!!END line_chart & step_line_chart ------------------- */\n/* !!!START area_chart & stack_area_chart & percent_stacked_area_chart ------------------- */\nfunction splitAreaXYSeries(dataProps) {\n    var field4X = dataProps.find(function (field) { return intersects(field.levelOfMeasurements, ['Time', 'Ordinal']); });\n    var field4Series = dataProps.find(function (field) { return hasSubset(field.levelOfMeasurements, ['Nominal']); });\n    var field4Y = dataProps.find(function (field) { return hasSubset(field.levelOfMeasurements, ['Interval']); });\n    return [field4X, field4Y, field4Series];\n}\nfunction areaChart(data, dataProps) {\n    var field4X = dataProps.find(function (field) { return intersects(field.levelOfMeasurements, ['Time', 'Ordinal']); });\n    var field4Y = dataProps.find(function (field) { return hasSubset(field.levelOfMeasurements, ['Interval']); });\n    if (!field4X || !field4Y)\n        return null;\n    var spec = {\n        type: 'area',\n        data: data,\n        encode: {\n            x: field4X.name,\n            y: field4Y.name,\n        },\n    };\n    return spec;\n}\nfunction stackedAreaChart(data, dataProps) {\n    var _a = __read(splitAreaXYSeries(dataProps), 3), field4X = _a[0], field4Y = _a[1], field4Series = _a[2];\n    if (!field4X || !field4Y || !field4Series)\n        return null;\n    var spec = {\n        type: 'area',\n        data: data,\n        encode: {\n            x: field4X.name,\n            y: field4Y.name,\n            color: field4Series.name,\n        },\n        transform: [{ type: 'stackY' }],\n    };\n    return spec;\n}\nfunction percentStackedAreaChart(data, dataProps) {\n    var _a = __read(splitAreaXYSeries(dataProps), 3), field4X = _a[0], field4Y = _a[1], field4Series = _a[2];\n    if (!field4X || !field4Y || !field4Series)\n        return null;\n    var spec = {\n        type: 'area',\n        data: data,\n        encode: {\n            x: field4X.name,\n            y: field4Y.name,\n            color: field4Series.name,\n        },\n        transform: [{ type: 'stackY' }, { type: 'normalizeY' }],\n    };\n    return spec;\n}\n/* !!!END area_chart & stack_area_chart & percent_stacked_area_chart ------------------- */\n/* !!!START bar_chart & group_bar_chart & stack_bar_chart & percent_stacked_bar_chart ------------------- */\nfunction splitBarXYSeries(dataProps) {\n    var nominalFields = dataProps.filter(function (field) { return hasSubset(field.levelOfMeasurements, ['Nominal']); });\n    var sortedNominalFields = nominalFields.sort(compare);\n    var field4Y = sortedNominalFields[0];\n    var field4Series = sortedNominalFields[1];\n    var field4X = dataProps.find(function (field) { return hasSubset(field.levelOfMeasurements, ['Interval']); });\n    return [field4X, field4Y, field4Series];\n}\n// barchart in AVA means: horizontal bar chart\nfunction barChart(data, dataProps) {\n    var _a = __read(splitBarXYSeries(dataProps), 3), field4X = _a[0], field4Y = _a[1], field4Color = _a[2];\n    if (!field4X || !field4Y)\n        return null;\n    var spec = {\n        type: 'interval',\n        data: data,\n        // G2's implementation converts column chart (vertical bar) and bar chart (horizontal bar) by transpose, so the x and y fields need to be swapped.\n        // 由于g2的实现是通过transpose来转换 column chart（竖着的bar）和bar chart（横着的bar），所以x和y的字段需要做交换\n        encode: {\n            x: field4Y.name,\n            y: field4X.name,\n        },\n        coordinate: {\n            transform: [{ type: 'transpose' }],\n        },\n    };\n    if (field4Color) {\n        spec.encode.color = field4Color.name;\n        spec.transform = [{ type: 'stackY' }];\n    }\n    return spec;\n}\nfunction groupedBarChart(data, dataProps) {\n    var _a = __read(splitBarXYSeries(dataProps), 3), field4X = _a[0], field4Y = _a[1], field4Series = _a[2];\n    if (!field4X || !field4Y || !field4Series)\n        return null;\n    var spec = {\n        type: 'interval',\n        data: data,\n        encode: {\n            x: field4Y.name,\n            y: field4X.name,\n            color: field4Series.name,\n        },\n        transform: [{ type: 'dodgeX' }],\n        coordinate: {\n            transform: [{ type: 'transpose' }],\n        },\n    };\n    return spec;\n}\nfunction stackedBarChart(data, dataProps) {\n    var _a = __read(splitBarXYSeries(dataProps), 3), field4X = _a[0], field4Y = _a[1], field4Series = _a[2];\n    if (!field4X || !field4Y || !field4Series)\n        return null;\n    var spec = {\n        type: 'interval',\n        data: data,\n        encode: {\n            x: field4Y.name,\n            y: field4X.name,\n            color: field4Series.name,\n        },\n        transform: [{ type: 'stackY' }],\n        coordinate: {\n            transform: [{ type: 'transpose' }],\n        },\n    };\n    return spec;\n}\nfunction percentStackedBarChart(data, dataProps) {\n    var _a = __read(splitBarXYSeries(dataProps), 3), field4X = _a[0], field4Y = _a[1], field4Series = _a[2];\n    if (!field4X || !field4Y || !field4Series)\n        return null;\n    var spec = {\n        type: 'interval',\n        data: data,\n        encode: {\n            x: field4Y.name,\n            y: field4X.name,\n            color: field4Series.name,\n        },\n        transform: [{ type: 'stackY' }, { type: 'normalizeY' }],\n        coordinate: {\n            transform: [{ type: 'transpose' }],\n        },\n    };\n    return spec;\n}\n/* !!!END bar_chart & group_bar_chart & stack_bar_chart & percent_stacked_bar_chart ------------------- */\n/* !!!START column_chart & grouped_column_chart & stacked_column_chart & percent_stacked_column_chart ------------------- */\nfunction splitColumnXYSeries(dataProps) {\n    var _a, _b;\n    var _c, _d;\n    var nominalFields = dataProps.filter(function (field) { return hasSubset(field.levelOfMeasurements, ['Nominal']); });\n    var sortedNominalFields = nominalFields.sort(compare);\n    var field4X;\n    var Field4Series;\n    if (isParentChild((_c = sortedNominalFields[1]) === null || _c === void 0 ? void 0 : _c.rawData, (_d = sortedNominalFields[0]) === null || _d === void 0 ? void 0 : _d.rawData)) {\n        _a = __read(sortedNominalFields, 2), Field4Series = _a[0], field4X = _a[1];\n    }\n    else {\n        _b = __read(sortedNominalFields, 2), field4X = _b[0], Field4Series = _b[1];\n    }\n    var field4Y = dataProps.find(function (field) { return hasSubset(field.levelOfMeasurements, ['Interval']); });\n    return [field4X, field4Y, Field4Series];\n}\nfunction columnChart(data, dataProps) {\n    var nominalFields = dataProps.filter(function (field) { return hasSubset(field.levelOfMeasurements, ['Nominal']); });\n    var sortedNominalFields = nominalFields.sort(compare);\n    var field4X = sortedNominalFields[0];\n    var field4Color = sortedNominalFields[1];\n    var field4Y = dataProps.find(function (field) { return hasSubset(field.levelOfMeasurements, ['Interval']); });\n    if (!field4X || !field4Y)\n        return null;\n    var spec = {\n        type: 'interval',\n        data: data,\n        encode: {\n            x: field4X.name,\n            y: field4Y.name,\n        },\n    };\n    if (field4Color) {\n        spec.encode.color = field4Color.name;\n        spec.transform = [{ type: 'stackY' }];\n    }\n    return spec;\n}\nfunction groupedColumnChart(data, dataProps) {\n    var _a = __read(splitColumnXYSeries(dataProps), 3), field4X = _a[0], field4Y = _a[1], field4Series = _a[2];\n    if (!field4X || !field4Y || !field4Series)\n        return null;\n    var spec = {\n        type: 'interval',\n        data: data,\n        encode: {\n            x: field4X.name,\n            y: field4Y.name,\n            color: field4Series.name,\n        },\n        transform: [{ type: 'dodgeX' }],\n    };\n    return spec;\n}\nfunction stackedColumnChart(data, dataProps) {\n    var _a = __read(splitColumnXYSeries(dataProps), 3), field4X = _a[0], field4Y = _a[1], Field4Series = _a[2];\n    if (!field4X || !field4Y || !Field4Series)\n        return null;\n    var spec = {\n        type: 'interval',\n        data: data,\n        encode: {\n            x: field4X.name,\n            y: field4Y.name,\n            color: Field4Series.name,\n        },\n        transform: [{ type: 'stackY' }],\n    };\n    return spec;\n}\nfunction percentStackedColumnChart(data, dataProps) {\n    var _a = __read(splitColumnXYSeries(dataProps), 3), field4X = _a[0], field4Y = _a[1], Field4Series = _a[2];\n    if (!field4X || !field4Y || !Field4Series)\n        return null;\n    var spec = {\n        type: 'interval',\n        data: data,\n        encode: {\n            x: field4X.name,\n            y: field4Y.name,\n            color: Field4Series.name,\n        },\n        transform: [{ type: 'stackY' }, { type: 'normalizeY' }],\n    };\n    return spec;\n}\n/* !!!END column_chart & grouped_column_chart & stacked_column_chart & percent_stacked_column_chart ------------------- */\n/* !!!START scatter_plot ------------------- */\nfunction scatterPlot(data, dataProps) {\n    var intervalFields = dataProps.filter(function (field) { return hasSubset(field.levelOfMeasurements, ['Interval']); });\n    var sortedIntervalFields = intervalFields.sort(compare);\n    var field4X = sortedIntervalFields[0];\n    var field4Y = sortedIntervalFields[1];\n    var field4Color = dataProps.find(function (field) { return hasSubset(field.levelOfMeasurements, ['Nominal']); });\n    if (!field4X || !field4Y)\n        return null;\n    var spec = {\n        type: 'point',\n        data: data,\n        encode: {\n            x: field4X.name,\n            y: field4Y.name,\n        },\n    };\n    if (field4Color) {\n        spec.encode.color = field4Color.name;\n    }\n    return spec;\n}\n/* !!!END scatter_plot ------------------- */\n/* !!!START bubble_chart ------------------- */\nfunction bubbleChart(data, dataProps) {\n    var intervalFields = dataProps.filter(function (field) { return hasSubset(field.levelOfMeasurements, ['Interval']); });\n    var triple = {\n        x: intervalFields[0],\n        y: intervalFields[1],\n        corr: 0,\n        size: intervalFields[2],\n    };\n    var _loop_1 = function (i) {\n        var _loop_2 = function (j) {\n            var p = pearson(intervalFields[i].rawData, intervalFields[j].rawData);\n            if (Math.abs(p) > triple.corr) {\n                triple.x = intervalFields[i];\n                triple.y = intervalFields[j];\n                triple.corr = p;\n                triple.size = intervalFields[__spreadArray([], __read(Array(intervalFields.length).keys()), false).find(function (e) { return e !== i && e !== j; }) || 0];\n            }\n        };\n        for (var j = i + 1; j < intervalFields.length; j += 1) {\n            _loop_2(j);\n        }\n    };\n    for (var i = 0; i < intervalFields.length; i += 1) {\n        _loop_1(i);\n    }\n    var field4X = triple.x;\n    var field4Y = triple.y;\n    var field4Size = triple.size;\n    var field4Color = dataProps.find(function (field) { return intersects(field.levelOfMeasurements, ['Nominal']); });\n    // require x,y,size,color at the same time\n    if (!field4X || !field4Y || !field4Size)\n        return null;\n    var spec = {\n        type: 'point',\n        data: data,\n        encode: {\n            x: field4X.name,\n            y: field4Y.name,\n            size: field4Size.name,\n        },\n    };\n    if (field4Color) {\n        spec.encode.color = field4Color.name;\n    }\n    return spec;\n}\n/* !!!END bubble_chart ------------------- */\n/* !!!START histogram ------------------- */\nfunction histogram(data, dataProps) {\n    var field = dataProps.find(function (field) { return hasSubset(field.levelOfMeasurements, ['Interval']); });\n    if (!field)\n        return null;\n    var spec = {\n        type: 'rect',\n        data: data,\n        encode: {\n            x: field.name,\n        },\n        transform: [{ type: 'binX', y: 'count' }],\n    };\n    return spec;\n}\n/* !!!END histogram ------------------- */\n/* !!!END heatmap ------------------- */\nfunction heatmap(data, dataProps) {\n    var axisFields = dataProps.filter(function (field) { return intersects(field.levelOfMeasurements, ['Nominal', 'Ordinal']); });\n    var sortedFields = axisFields.sort(compare);\n    var field4X = sortedFields[0];\n    var field4Y = sortedFields[1];\n    var field4Color = dataProps.find(function (field) { return hasSubset(field.levelOfMeasurements, ['Interval']); });\n    if (!field4X || !field4Y || !field4Color)\n        return null;\n    var spec = {\n        type: 'cell',\n        data: data,\n        encode: {\n            x: field4X.name,\n            y: field4Y.name,\n            color: field4Color.name,\n        },\n    };\n    return spec;\n}\n/* !!!END heatmap ------------------- */\n/**\n * Convert chartType + data to antv-spec\n * recommend chart with specific data mapping\n *\n * @param chartType chart type\n * @param data input data [ { col1: ..., col2: ... } ]\n * @param dataProps data property for advisor derived by data\n * @param chartKnowledge chart knowledge of a singble chart\n * @returns spec or null\n */\nexport function getChartTypeSpec(chartType, data, dataProps, chartKnowledge) {\n    // step 0: check whether the chartType is default in `ChartID`\n    // if not, use customized `toSpec` function\n    if (!CHART_IDS.includes(chartType) && chartKnowledge) {\n        if (chartKnowledge.toSpec) {\n            var spec = chartKnowledge.toSpec(data, dataProps);\n            return spec;\n        }\n        return null;\n    }\n    switch (chartType) {\n        // pie\n        case 'pie_chart':\n            return pieChart(data, dataProps);\n        case 'donut_chart':\n            return donutChart(data, dataProps);\n        // line\n        case 'line_chart':\n            return lineChart(data, dataProps);\n        case 'step_line_chart':\n            return stepLineChart(data, dataProps);\n        // area\n        case 'area_chart':\n            return areaChart(data, dataProps);\n        case 'stacked_area_chart':\n            return stackedAreaChart(data, dataProps);\n        case 'percent_stacked_area_chart':\n            return percentStackedAreaChart(data, dataProps);\n        // bar\n        case 'bar_chart':\n            return barChart(data, dataProps);\n        case 'grouped_bar_chart':\n            return groupedBarChart(data, dataProps);\n        case 'stacked_bar_chart':\n            return stackedBarChart(data, dataProps);\n        case 'percent_stacked_bar_chart':\n            return percentStackedBarChart(data, dataProps);\n        // column\n        case 'column_chart':\n            return columnChart(data, dataProps);\n        case 'grouped_column_chart':\n            return groupedColumnChart(data, dataProps);\n        case 'stacked_column_chart':\n            return stackedColumnChart(data, dataProps);\n        case 'percent_stacked_column_chart':\n            return percentStackedColumnChart(data, dataProps);\n        // scatter\n        case 'scatter_plot':\n            return scatterPlot(data, dataProps);\n        // bubble\n        case 'bubble_chart':\n            return bubbleChart(data, dataProps);\n        // histogram\n        case 'histogram':\n            return histogram(data, dataProps);\n        case 'heatmap':\n            return heatmap(data, dataProps);\n        // TODO other case 'kpi_panel' & 'table'\n        default:\n            return null;\n    }\n}\n","import { hexToColor, colorToHex, paletteGeneration, colorSimulation } from '@antv/smart-color';\nimport { computeScore } from '../ruler/utils';\nimport { deepMix } from '../utils';\nimport { getSpecWithEncodeType } from '../utils/inferDataType';\nimport { getChartTypeSpec } from './spec-mapping';\n/**\n * Run all rules for a given chart type, get scoring result.\n *\n * @param chartType chart ID to be score\n * @param dataProps data props of the input data\n * @param ruleBase rule base\n * @param options\n * @returns\n */\nfunction scoreRules(chartType, chartWIKI, dataProps, ruleBase, options) {\n    var purpose = options ? options.purpose : '';\n    var preferences = options ? options.preferences : undefined;\n    // for log\n    var log = [];\n    var info = { dataProps: dataProps, chartType: chartType, purpose: purpose, preferences: preferences };\n    var hardScore = computeScore(chartType, chartWIKI, ruleBase, 'HARD', info, log);\n    // Hard-Rule pruning\n    if (hardScore === 0) {\n        var result_1 = { chartType: chartType, score: 0, log: log };\n        return result_1;\n    }\n    var softScore = computeScore(chartType, chartWIKI, ruleBase, 'SOFT', info, log);\n    var score = hardScore * softScore;\n    var result = { chartType: chartType, score: score, log: log };\n    return result;\n}\nfunction applyDesignRules(chartType, dataProps, ruleBase, chartSpec) {\n    var toCheckRules = Object.values(ruleBase).filter(function (rule) { var _a; return rule.type === 'DESIGN' && rule.trigger({ dataProps: dataProps, chartType: chartType }) && !((_a = ruleBase[rule.id].option) === null || _a === void 0 ? void 0 : _a.off); });\n    var encodingSpec = toCheckRules.reduce(function (lastSpec, rule) {\n        var relatedSpec = rule.optimizer(dataProps, chartSpec);\n        return deepMix(lastSpec, relatedSpec);\n    }, {});\n    return encodingSpec;\n}\nvar DISCRETE_PALETTE_TYPES = ['monochromatic', 'analogous'];\nvar CATEGORICAL_PALETTE_TYPES = ['polychromatic', 'split-complementary', 'triadic', 'tetradic'];\nvar DEFAULT_COLOR = '#678ef2';\nfunction applyTheme(dataProps, chartSpec, theme) {\n    var _a;\n    var specWithEncodeType = getSpecWithEncodeType(chartSpec);\n    var primaryColor = theme.primaryColor;\n    var layerEnc = specWithEncodeType.encode;\n    if (primaryColor && layerEnc) {\n        // convert primary color\n        var color = hexToColor(primaryColor);\n        // if color is specified\n        if (layerEnc.color) {\n            var _b = layerEnc.color, type = _b.type, field_1 = _b.field;\n            var colorScheme = void 0;\n            if (type === 'quantitative') {\n                colorScheme = DISCRETE_PALETTE_TYPES[Math.floor(Math.random() * DISCRETE_PALETTE_TYPES.length)];\n            }\n            else {\n                colorScheme = CATEGORICAL_PALETTE_TYPES[Math.floor(Math.random() * CATEGORICAL_PALETTE_TYPES.length)];\n            }\n            var count = (_a = dataProps.find(function (d) { return d.name === field_1; })) === null || _a === void 0 ? void 0 : _a.count;\n            var palette = paletteGeneration(colorScheme, {\n                color: color,\n                count: count,\n            });\n            return {\n                scale: {\n                    color: { range: palette.colors.map(function (color) { return colorToHex(color); }) },\n                },\n            };\n        }\n        return chartSpec.type === 'line'\n            ? {\n                style: {\n                    stroke: colorToHex(color),\n                },\n            }\n            : {\n                style: {\n                    fill: colorToHex(color),\n                },\n            };\n    }\n    return {};\n}\nfunction applySmartColor(dataProps, chartSpec, primaryColor, colorType, simulationType) {\n    var _a;\n    var specWithEncodeType = getSpecWithEncodeType(chartSpec);\n    var layerEnc = specWithEncodeType.encode;\n    if (primaryColor && layerEnc) {\n        // convert primary color\n        var color = hexToColor(primaryColor);\n        // if color is specified\n        if (layerEnc.color) {\n            var _b = layerEnc.color, type = _b.type, field_2 = _b.field;\n            var colorScheme = colorType;\n            if (!colorScheme) {\n                if (type === 'quantitative') {\n                    colorScheme = 'monochromatic';\n                }\n                else {\n                    colorScheme = 'polychromatic';\n                }\n            }\n            var count = (_a = dataProps.find(function (d) { return d.name === field_2; })) === null || _a === void 0 ? void 0 : _a.count;\n            var palette = paletteGeneration(colorScheme, {\n                color: color,\n                count: count,\n            });\n            return {\n                scale: {\n                    color: {\n                        range: palette.colors.map(function (color) {\n                            return colorToHex(simulationType ? colorSimulation(color, simulationType) : color);\n                        }),\n                    },\n                },\n            };\n        }\n        return chartSpec.type === 'line'\n            ? {\n                style: {\n                    stroke: colorToHex(color),\n                },\n            }\n            : {\n                style: {\n                    fill: colorToHex(color),\n                },\n            };\n    }\n    return {};\n}\n/**\n * recommending charts given data and dataProps, based on CKB and RuleBase\n *\n * @param data input data [ {a: xxx, b: xxx}, ... ]\n * @param dataProps data props derived from data or customized by users\n * @param chartWIKI ckb\n * @param ruleBase rule base\n * @param smartColor switch smart color on/off, optional props, default is off\n * @param options options for advising such as log, preferences\n * @param colorOptions color options, optional props, @see {@link SmartColorOptions}\n * @returns chart list [ { type: chartTypes, spec: antv-spec, score: >0 }, ... ]\n */\nexport function dataToAdvices(data, dataProps, chartWIKI, ruleBase, smartColor, options, colorOptions) {\n    /**\n     * `refine`: whether to apply design rules\n     */\n    var enableRefine = (options === null || options === void 0 ? void 0 : options.refine) === undefined ? false : options.refine;\n    /**\n     * `smartColorOn`: switch SmartColor on/off\n     */\n    var smartColorOn = smartColor;\n    /**\n     * `theme`: custom theme\n     */\n    var theme = options === null || options === void 0 ? void 0 : options.theme;\n    /**\n     * `requireSpec`: only consider chart type with spec if true\n     */\n    var requireSpec = (options === null || options === void 0 ? void 0 : options.requireSpec) === undefined ? true : options.requireSpec;\n    /**\n     * customized CKB input or default CKB from @antv/ckb\n     */\n    var ChartWIKI = chartWIKI;\n    /**\n     * all charts that can be recommended\n     * */\n    var CHART_ID_OPTIONS = Object.keys(ChartWIKI);\n    var log = [];\n    // score every possible chart\n    var list = CHART_ID_OPTIONS.map(function (t) {\n        var _a;\n        // step 1: analyze score by rule\n        var resultForChartType = scoreRules(t, ChartWIKI, dataProps, ruleBase, options);\n        log.push(resultForChartType);\n        var score = resultForChartType.score;\n        // Zero-Score pruning\n        if (score <= 0) {\n            return { type: t, spec: null, score: score };\n        }\n        // step 2: field mapping to spec encoding\n        var chartTypeSpec = getChartTypeSpec(t, data, dataProps, chartWIKI[t]);\n        // FIXME kpi_panel and table spec to be null temporarily\n        var customChartType = ['kpi_panel', 'table'];\n        if (!customChartType.includes(t) && !chartTypeSpec)\n            return { type: t, spec: null, score: score };\n        // step 3: apply design rules\n        if (chartTypeSpec && enableRefine) {\n            var partEncSpec = applyDesignRules(t, dataProps, ruleBase, chartTypeSpec);\n            deepMix(chartTypeSpec, partEncSpec);\n        }\n        // step 4: custom theme\n        if (chartTypeSpec) {\n            if (theme && !smartColorOn) {\n                var partEncSpec = applyTheme(dataProps, chartTypeSpec, theme);\n                deepMix(chartTypeSpec, partEncSpec);\n            }\n            else if (smartColorOn) {\n                /**\n                 * `colorTheme`: theme for SmartColor\n                 * Default color is blue\n                 */\n                var colorTheme = (_a = colorOptions === null || colorOptions === void 0 ? void 0 : colorOptions.themeColor) !== null && _a !== void 0 ? _a : DEFAULT_COLOR;\n                /**\n                 * `colorType`: customize SmartColor generation type\n                 */\n                var colorType = colorOptions === null || colorOptions === void 0 ? void 0 : colorOptions.colorSchemeType;\n                /**\n                 * `simulationType`: customize SmartColor for specific simulation mode\n                 * Default color mode is normal\n                 */\n                var simulationType = colorOptions === null || colorOptions === void 0 ? void 0 : colorOptions.simulationType;\n                var partEncSpec = applySmartColor(dataProps, chartTypeSpec, colorTheme, colorType, simulationType);\n                deepMix(chartTypeSpec, partEncSpec);\n            }\n        }\n        return { type: t, spec: chartTypeSpec, score: score };\n    });\n    /** compare two advice charts by their score */\n    function compareAdvices(chart1, chart2) {\n        if (chart1.score < chart2.score) {\n            return 1;\n        }\n        if (chart1.score > chart2.score) {\n            return -1;\n        }\n        return 0;\n    }\n    // filter and sorter\n    var isAvailableAdvice = function (advice) {\n        return advice.score > 0 && (requireSpec ? advice.spec : true);\n    };\n    var resultList = list.filter(isAvailableAdvice).sort(compareAdvices);\n    var result = {\n        advices: resultList,\n        log: log,\n    };\n    return result;\n}\n","import { __assign } from \"tslib\";\nimport { DataFrame } from '../../data';\nimport { cloneDeep } from '../utils';\nimport { dataToAdvices } from './data-to-advices';\n/**\n * A utility function that assemble dataProps with user input and DataFrame\n * @param copyData a copy of original data\n * @param fields the fields that user specified to be used in dataset\n * @param inputDataProps user input dataProps which will cover or combine with dataProps from DataFrame\n * @returns assembled data props\n */\nexport function assembleDataProps(copyData, fields, inputDataProps) {\n    // transform data into DataFrame\n    var dataFrame;\n    if (fields) {\n        dataFrame = new DataFrame(copyData, { columns: fields });\n    }\n    else {\n        dataFrame = new DataFrame(copyData);\n    }\n    var dataPropsForAdvice;\n    var defaultDataProps = dataFrame.info();\n    if (inputDataProps) {\n        dataPropsForAdvice = defaultDataProps.map(function (dwItem) {\n            var inputProps = inputDataProps.find(function (item) {\n                return item.name === dwItem.name;\n            });\n            return __assign(__assign({}, dwItem), inputProps);\n        });\n    }\n    else {\n        dataPropsForAdvice = defaultDataProps;\n    }\n    return dataPropsForAdvice;\n}\nexport function advicesForChart(params, ckb, ruleBase) {\n    var data = params.data, dataProps = params.dataProps, smartColor = params.smartColor, options = params.options, colorOptions = params.colorOptions, fields = params.fields;\n    try {\n        // otherwise the input data will be mutated\n        var copyData = cloneDeep(data);\n        // get dataProps from DataFrame\n        var dataPropsForAdvice = assembleDataProps(copyData, fields, dataProps);\n        // filter out fields that are not included for advising\n        var filteredData = [];\n        if (fields) {\n            filteredData = copyData.map(function (row) {\n                var filteredRow = row;\n                Object.keys(filteredRow).forEach(function (col) {\n                    if (!fields.includes(col)) {\n                        delete filteredRow[col];\n                    }\n                });\n                return row;\n            });\n        }\n        else {\n            filteredData = copyData;\n        }\n        var adviceResult = dataToAdvices(filteredData, dataPropsForAdvice, ckb, ruleBase, smartColor, options, colorOptions);\n        return adviceResult;\n    }\n    catch (error) {\n        // if the input data cannot be transformed into DataFrame\n        // eslint-disable-next-line no-console\n        console.error('error: ', error);\n        return { advices: [], log: [] };\n    }\n}\n","import { __assign } from \"tslib\";\nexport function lintRules(ruleBase, ruleTypeToLint, info, log, lints, ckb, spec) {\n    var judge = function (type) {\n        if (ruleTypeToLint === 'DESIGN') {\n            return type === 'DESIGN';\n        }\n        return type !== 'DESIGN';\n    };\n    Object.values(ruleBase)\n        .filter(function (r) {\n        var _a;\n        var _b = r.option || {}, weight = _b.weight, extra = _b.extra;\n        return judge(r.type) && !((_a = r.option) === null || _a === void 0 ? void 0 : _a.off) && r.trigger(__assign(__assign(__assign(__assign({}, info), { weight: weight }), extra), { chartWIKI: ckb }));\n    })\n        .forEach(function (r) {\n        var type = r.type, id = r.id, docs = r.docs;\n        var score;\n        if (ruleTypeToLint === 'DESIGN') {\n            var fix = r.optimizer(info.dataProps, spec);\n            // no fix -> means no violation\n            score = Object.keys(fix).length === 0 ? 1 : 0;\n            lints.push({ type: type, id: id, score: score, fix: fix, docs: docs });\n        }\n        else {\n            var _a = r.option || {}, weight = _a.weight, extra = _a.extra;\n            // no weight for linter's result\n            score = r.validator(__assign(__assign(__assign(__assign({}, info), { weight: weight }), extra), { chartWIKI: ckb }));\n            lints.push({ type: type, id: id, score: score, docs: docs });\n        }\n        log.push({ phase: 'LINT', ruleId: id, score: score, base: score, weight: 1, ruleType: type });\n    });\n}\n","import { DataFrame } from '../../data';\nimport { getChartType } from './getChartType';\nimport { lintRules } from './lintRules';\nexport function checkRules(params, ruleBase, ckb) {\n    var spec = params.spec, options = params.options;\n    var dataProps = params.dataProps;\n    var purpose = options === null || options === void 0 ? void 0 : options.purpose;\n    var preferences = options === null || options === void 0 ? void 0 : options.preferences;\n    var chartType = getChartType(spec);\n    var lints = [];\n    // for log\n    var log = [];\n    if (!spec || !chartType) {\n        return { lints: lints, log: log };\n    }\n    // step 1: get data in spec and build DataFrame\n    if (!dataProps || !dataProps.length) {\n        var dataFrame = void 0;\n        try {\n            dataFrame = new DataFrame(spec.data);\n            dataProps = dataFrame.info();\n        }\n        catch (error) {\n            // if the input data cannot be transformed into DataFrame\n            // eslint-disable-next-line no-console\n            console.error('error: ', error);\n            return { lints: lints, log: log };\n        }\n    }\n    var info = { dataProps: dataProps, chartType: chartType, purpose: purpose, preferences: preferences };\n    // step 2: lint rules\n    // HARD and SOFT rules\n    lintRules(ruleBase, 'notDESIGN', info, log, lints, ckb);\n    // DESIGN rules\n    lintRules(ruleBase, 'DESIGN', info, log, lints, ckb, spec);\n    // filter rules with problems (score<1)\n    lints = lints.filter(function (record) { return record.score < 1; });\n    var result = {\n        lints: lints,\n        log: log,\n    };\n    return result;\n}\n","var getPointChart = function (spec) {\n    if (spec.encode.size) {\n        return 'bubble_chart';\n    }\n    return 'scatter_plot';\n};\n/**\n * 推荐所有 type 为 interval 的 spec 对应的具体图表类型\n * type 为 interval的图表，可能为 column chart、bar chart、pie chart、donut chart\n * @param spec\n * @returns\n */\nvar getIntervalChart = function (spec) {\n    var _a;\n    /** 饼图类型推断 */\n    var coordinate = spec.coordinate;\n    if ((coordinate === null || coordinate === void 0 ? void 0 : coordinate.type) === 'theta') {\n        if (coordinate === null || coordinate === void 0 ? void 0 : coordinate.innerRadius) {\n            return 'donut_chart';\n        }\n        return 'pie_chart';\n    }\n    /** 柱状图、条形图类型推断 */\n    var transform = spec.transform;\n    var isBarChart = (_a = coordinate === null || coordinate === void 0 ? void 0 : coordinate.transform) === null || _a === void 0 ? void 0 : _a.some(function (item) { return item.type === 'transpose'; });\n    var isNormalized = transform === null || transform === void 0 ? void 0 : transform.some(function (item) { return item.type === 'normalizeY'; });\n    var isStacked = transform === null || transform === void 0 ? void 0 : transform.some(function (item) { return item.type === 'stackY'; });\n    var isGrouped = transform === null || transform === void 0 ? void 0 : transform.some(function (item) { return item.type === 'dodgeX'; });\n    if (isBarChart) {\n        // Bar\n        if (isGrouped)\n            return 'grouped_bar_chart';\n        if (isNormalized)\n            return 'stacked_bar_chart';\n        if (isStacked)\n            return 'percent_stacked_bar_chart';\n        return 'bar_chart';\n    }\n    // Column\n    if (isGrouped)\n        return 'grouped_column_chart';\n    if (isNormalized)\n        return 'stacked_column_chart';\n    if (isStacked)\n        return 'percent_stacked_column_chart';\n    return 'column_chart';\n};\n/**\n * 推荐所有 type 为 area 的 spec 对应的具体图表类型\n * @param spec\n * @returns\n */\nvar getAreaChart = function (spec) {\n    var transform = spec.transform;\n    var isStacked = transform === null || transform === void 0 ? void 0 : transform.some(function (item) { return item.type === 'stackY'; });\n    var isNormalized = transform === null || transform === void 0 ? void 0 : transform.some(function (item) { return item.type === 'normalizeY'; });\n    if (isStacked) {\n        if (isNormalized) {\n            return 'percent_stacked_area_chart';\n        }\n        return 'stacked_area_chart';\n    }\n    return 'area_chart';\n};\n/**\n * 推荐所有 type 为 line 的 spec 对应的具体图表类型\n * @param spec\n * @returns\n */\nvar getLineChart = function (spec) {\n    var encode = spec.encode;\n    if (encode.shape && encode.shape === 'hvh') {\n        return 'step_line_chart';\n    }\n    return 'line_chart';\n};\n/**\n * 由于一种类型的 mark 可能对应多种可能的图表，所以需要此处进行转换\n * @param spec\n * @returns\n */\nexport var getChartType = function (spec) {\n    var chartType;\n    var chartSpec = spec;\n    var mark = chartSpec.type;\n    switch (mark) {\n        case 'area':\n            chartType = getAreaChart(chartSpec);\n            break;\n        case 'interval':\n            chartType = getIntervalChart(chartSpec);\n            break;\n        case 'line':\n            chartType = getLineChart(chartSpec);\n            break;\n        case 'point':\n            chartType = getPointChart(chartSpec);\n            break;\n        case 'rect':\n            chartType = 'histogram';\n            break;\n        case 'cell':\n            chartType = 'heatmap';\n            break;\n        default:\n            chartType = '';\n    }\n    return chartType;\n};\n","import { ckb } from '../ckb';\nimport { processRuleCfg } from './ruler';\nimport { advicesForChart } from './advise-pipeline';\nimport { checkRules } from './lint-pipeline/check-rules';\n/*\n * 搬运计划\n * 0. 架构设计\n * 1. Advisor 搬运\n * 2. Linter 搬运\n */\nvar Advisor = /** @class */ (function () {\n    function Advisor(config) {\n        if (config === void 0) { config = {}; }\n        this.ckb = ckb(config.ckbCfg);\n        this.ruleBase = processRuleCfg(config.ruleCfg);\n    }\n    Advisor.prototype.advise = function (params) {\n        var adviseResult = advicesForChart(params, this.ckb, this.ruleBase);\n        return adviseResult.advices;\n    };\n    Advisor.prototype.adviseWithLog = function (params) {\n        var adviseResult = advicesForChart(params, this.ckb, this.ruleBase);\n        return adviseResult;\n    };\n    Advisor.prototype.lint = function (params) {\n        var lintResult = checkRules(params, this.ruleBase, this.ckb);\n        return lintResult.lints;\n    };\n    Advisor.prototype.lintWithLog = function (params) {\n        var lintResult = checkRules(params, this.ruleBase, this.ckb);\n        return lintResult;\n    };\n    return Advisor;\n}());\nexport { Advisor };\n","/*\n * 功能描述: Chart-View 多Tab展示组件（Chart/SQL/Data三个标签页）\n * 使用场景: 当后端返回 response_table 类型数据时，提供可视化、SQL、数据三种展示方式\n */\n<template>\n  <div class=\"chart-view-tabs bg-white dark:bg-gray-800 rounded-lg shadow-sm border border-gray-200 dark:border-gray-700\">\n    <PluginStatus \n      :status=\"plugin.status\"\n      :name=\"plugin.name\"\n      :errorMessage=\"plugin.err_msg\"\n      defaultName=\"数据查询\"\n      :loadingTextMap=\"{\n        todo: '等待执行...',\n        runing: '正在查询数据...'\n      }\"\n    >\n      <!-- Tab 标签页 -->\n      <el-tabs v-model=\"activeTab\" class=\"chart-tabs mt-3\">\n        <!-- Chart Tab: 图表可视化 -->\n        <el-tab-pane label=\"图表\" name=\"chart\">\n          <template #label>\n            <div class=\"flex items-center space-x-1\">\n              <svg class=\"w-4 h-4\" fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\n                <path stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" d=\"M9 19v-6a2 2 0 00-2-2H5a2 2 0 00-2 2v6a2 2 0 002 2h2a2 2 0 002-2zm0 0V9a2 2 0 012-2h2a2 2 0 012 2v10m-6 0a2 2 0 002 2h2a2 2 0 002-2m0 0V5a2 2 0 012-2h2a2 2 0 012 2v14a2 2 0 01-2 2h-2a2 2 0 01-2-2z\"/>\n              </svg>\n              <span>图表</span>\n            </div>\n          </template>\n          \n          <div class=\"chart-panel\">\n            <!-- 自动图表推荐 -->\n            <div v-if=\"recommendedChartType\" class=\"mb-3 flex items-center justify-between\">\n              <div class=\"text-sm text-gray-600 dark:text-gray-400\">\n                推荐图表类型: <span class=\"font-medium text-blue-600 dark:text-blue-400\">{{ chartTypeLabel }}</span>\n              </div>\n              <select \n                v-model=\"selectedChartType\" \n                class=\"chart-type-selector\"\n                :title=\"availableChartOptions.find(o => o.value === selectedChartType)?.desc || ''\"\n              >\n                <option \n                  v-for=\"option in availableChartOptions\" \n                  :key=\"option.value\"\n                  :value=\"option.value\"\n                  :title=\"option.desc\"\n                >\n                  {{ option.label }}\n                </option>\n              </select>\n            </div>\n\n            <!-- 使用统一的图表组件 -->\n            <div v-if=\"chartDataForComponent\">\n              <BarChart \n                v-if=\"selectedChartType === 'bar'\"\n                :chart=\"chartDataForComponent\"\n              />\n              <LineChart \n                v-else-if=\"selectedChartType === 'line'\"\n                :chart=\"chartDataForComponent\"\n              />\n              <PieChart \n                v-else-if=\"selectedChartType === 'pie'\"\n                :chart=\"chartDataForComponent\"\n              />\n              <BubbleChart \n                v-else-if=\"selectedChartType === 'bubble'\"\n                :chart=\"chartDataForComponent\"\n              />\n              <AreaChart \n                v-else-if=\"selectedChartType === 'area'\"\n                :chart=\"chartDataForComponent\"\n              />\n              <HeatmapChart \n                v-else-if=\"selectedChartType === 'heatmap'\"\n                :chart=\"chartDataForComponent\"\n              />\n            </div>\n            <div v-else class=\"text-center py-12 text-gray-500 dark:text-gray-400\">\n              暂无图表数据\n            </div>\n          </div>\n        </el-tab-pane>\n\n        <!-- SQL Tab: SQL语句展示 -->\n        <el-tab-pane label=\"SQL\" name=\"sql\">\n          <template #label>\n            <div class=\"flex items-center space-x-1\">\n              <svg class=\"w-4 h-4\" fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\n                <path stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" d=\"M8 9l3 3-3 3m5 0h3M5 20h14a2 2 0 002-2V6a2 2 0 00-2-2H5a2 2 0 00-2 2v12a2 2 0 002 2z\"/>\n              </svg>\n              <span>SQL</span>\n            </div>\n          </template>\n          \n          <div class=\"sql-panel\">\n            <div class=\"sql-code-block\">\n              <div class=\"sql-header\">\n                <div class=\"flex items-center space-x-2\">\n                  <svg class=\"w-3.5 h-3.5 text-gray-400\" fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\n                    <path stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" d=\"M8 9l3 3-3 3m5 0h3M5 20h14a2 2 0 002-2V6a2 2 0 00-2-2H5a2 2 0 00-2 2v12a2 2 0 002 2z\"/>\n                  </svg>\n                  <span class=\"text-xs font-medium text-gray-300\">SQL</span>\n                </div>\n                <button \n                  @click=\"copySql\"\n                  :class=\"['copy-btn', { 'copy-btn-copied': sqlCopied }]\"\n                >\n                  <svg v-if=\"!sqlCopied\" class=\"w-3.5 h-3.5\" fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\n                    <path stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" d=\"M8 16H6a2 2 0 01-2-2V6a2 2 0 012-2h8a2 2 0 012 2v2m-6 12h8a2 2 0 002-2v-8a2 2 0 00-2-2h-8a2 2 0 00-2 2v8a2 2 0 002 2z\"/>\n                  </svg>\n                  <svg v-else class=\"w-3.5 h-3.5\" fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\n                    <path stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" d=\"M5 13l4 4L19 7\"/>\n                  </svg>\n                  <span class=\"ml-1\">{{ sqlCopied ? '已复制' : '复制' }}</span>\n                </button>\n              </div>\n              <pre class=\"sql-content\"><code class=\"hljs language-sql\" v-html=\"highlightedSql\"></code></pre>\n            </div>\n          </div>\n        </el-tab-pane>\n\n        <!-- Data Tab: 原始数据表格展示 -->\n        <el-tab-pane label=\"数据\" name=\"data\">\n          <template #label>\n            <div class=\"flex items-center space-x-1\">\n              <svg class=\"w-4 h-4\" fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\n                <path stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" d=\"M3 10h18M3 14h18m-9-4v8m-7 0h14a2 2 0 002-2V8a2 2 0 00-2-2H5a2 2 0 00-2 2v8a2 2 0 002 2z\"/>\n              </svg>\n              <span>数据 ({{ tableData.length }})</span>\n            </div>\n          </template>\n          \n          <div class=\"data-panel\">\n            <div v-if=\"tableHeaders.length > 0 && tableData.length > 0\">\n              <ResponsiveTable \n                :headers=\"tableHeaders\"\n                :data=\"formattedTableData\"\n                :maxHeight=\"400\"\n              />\n            </div>\n            <div v-else class=\"text-center py-8 text-gray-500 dark:text-gray-400\">\n              <div class=\"text-sm\">暂无数据</div>\n              <div class=\"text-xs mt-1\">\n                Headers: {{ tableHeaders.length }}, Data: {{ tableData.length }}\n              </div>\n            </div>\n          </div>\n        </el-tab-pane>\n      </el-tabs>\n    </PluginStatus>\n  </div>\n</template>\n\n<script setup lang=\"ts\">\nimport { ref, computed, watch, onMounted } from 'vue'\nimport type { ChartData } from '@/types/chat'\nimport ResponsiveTable from '@/components/ResponsiveTable.vue'\nimport PluginStatus from '@/components/PluginStatus.vue'\nimport BarChart from '@/components/chart/BarChart.vue'\nimport LineChart from '@/components/chart/LineChart.vue'\nimport PieChart from '@/components/chart/PieChart.vue'\nimport BubbleChart from '@/components/chart/BubbleChart.vue'\nimport AreaChart from '@/components/chart/AreaChart.vue'  // ⭐ 面积图\nimport HeatmapChart from '@/components/chart/HeatmapChart.vue'  // ⭐ 热力图\nimport hljs from 'highlight.js/lib/core'\n// 主题CSS已在main.ts全局导入，避免重复导入\n\n// 注册常用语言\nimport javascript from 'highlight.js/lib/languages/javascript'\nimport typescript from 'highlight.js/lib/languages/typescript'\nimport python from 'highlight.js/lib/languages/python'\nimport json from 'highlight.js/lib/languages/json'\nimport sql from 'highlight.js/lib/languages/sql'\nimport xml from 'highlight.js/lib/languages/xml'\nimport css from 'highlight.js/lib/languages/css'\nimport java from 'highlight.js/lib/languages/java'\nimport cpp from 'highlight.js/lib/languages/cpp'\nimport bash from 'highlight.js/lib/languages/bash'\nimport shell from 'highlight.js/lib/languages/shell'\nimport yaml from 'highlight.js/lib/languages/yaml'\nimport markdown from 'highlight.js/lib/languages/markdown'\n\nhljs.registerLanguage('javascript', javascript)\nhljs.registerLanguage('typescript', typescript)\nhljs.registerLanguage('python', python)\nhljs.registerLanguage('json', json)\nhljs.registerLanguage('sql', sql)\nhljs.registerLanguage('xml', xml)\nhljs.registerLanguage('html', xml)\nhljs.registerLanguage('css', css)\nhljs.registerLanguage('java', java)\nhljs.registerLanguage('cpp', cpp)\nhljs.registerLanguage('c++', cpp)\nhljs.registerLanguage('bash', bash)\nhljs.registerLanguage('shell', shell)\nhljs.registerLanguage('sh', shell)\nhljs.registerLanguage('yaml', yaml)\nhljs.registerLanguage('yml', yaml)\nhljs.registerLanguage('markdown', markdown)\nhljs.registerLanguage('md', markdown)\n// ⭐ 引入AVA Advisor进行智能图表推荐\nimport { Advisor } from '@antv/ava'\nimport type { Datum, Advice } from '@antv/ava'\n\n/* Props定义 */\ninterface Props {\n  plugin: {\n    name: string\n    status: 'todo' | 'runing' | 'failed' | 'completed'\n    sql?: string\n    data?: any[]\n    headers?: string[]\n    err_msg?: string\n    type?: string  // 后端返回的图表类型，如 response_bubble_chart\n    chart_type?: string  // 兼容字段\n  }\n  streaming?: boolean\n}\n\nconst props = defineProps<Props>()\n\n/* \n * 功能描述: 将后端返回的图表类型映射到前端组件类型\n * 参数: {string} backendType - 后端返回的类型（如 response_bubble_chart）\n * 返回: {string | null} - 前端图表类型（如 bubble）或 null\n */\nconst mapBackendChartType = (backendType?: string): 'bar' | 'line' | 'pie' | 'bubble' | 'area' | 'heatmap' | null => {\n  if (!backendType) return null\n  \n  const typeMap: Record<string, 'bar' | 'line' | 'pie' | 'bubble' | 'area' | 'heatmap'> = {\n    'response_table': 'bar',  // 表格类型默认显示柱状图\n    'response_line_chart': 'line',\n    'response_pie_chart': 'pie',\n    'response_bubble_chart': 'bubble',\n    'response_scatter_chart': 'bubble',  // 散点图也映射到气泡图\n    'response_bar_chart': 'bar',\n    'response_area_chart': 'area',  // ⭐ 面积图/区域图\n    'response_heatmap_chart': 'heatmap'  // ⭐ 热力图\n  }\n  \n  const normalized = backendType.toLowerCase()\n  return typeMap[normalized] || null\n}\n\n/* 状态管理 */\n// 默认显示图表 tab（与原版保持一致）\nconst activeTab = ref('chart')\nconst selectedChartType = ref<'bar' | 'line' | 'pie' | 'bubble' | 'area' | 'heatmap'>('bar')\nconst initialRecommendedType = ref<'bar' | 'line' | 'pie' | 'bubble' | 'area' | 'heatmap'>('bar') // 保存初始推荐的图表类型\nconst sqlCopied = ref(false)\n\n/* AVA Advisor相关状态 */\nconst avaAdvisor = ref<Advisor | null>(null)\nconst avaAdvices = ref<Advice[]>([]) // AVA推荐的图表类型列表\n\n/* 图表数据处理 */\nconst chartData = computed(() => {\n  if (!props.plugin.data || !Array.isArray(props.plugin.data)) {\n    return []\n  }\n  \n  const processedData = props.plugin.data.map(row => {\n    if (typeof row === 'object' && row !== null) {\n      const keys = Object.keys(row)\n      \n      // 第一个key作为label（通常是月份、日期等）\n      const labelKey = keys[0]\n      \n      // 找到所有数值列\n      const numericKeys = keys.filter((k, index) => \n        index > 0 && typeof row[k] === 'number'\n      )\n      \n      // 找到第一个数值列（用于当前显示）\n      const valueKey = numericKeys[0] || keys[1]\n      \n      // 找到分类列（非label、非数值的字符串列）\n      const categoryKey = keys.find(k => \n        k !== labelKey && \n        !numericKeys.includes(k) && \n        typeof row[k] === 'string'\n      )\n      \n      const result: any = {\n        label: String(row[labelKey] || ''),\n        value: Number(row[valueKey]) || 0,\n        _originalLabel: row[labelKey],  // 保存原始label用于排序\n        _valueKey: valueKey  // 保存数值列名称\n      }\n      \n      // 如果有分类列，添加category字段\n      if (categoryKey) {\n        result.category = String(row[categoryKey])\n      }\n      \n      return result\n    }\n    return { label: '', value: 0, _originalLabel: '', _valueKey: '' }\n  })\n  \n  // 对数据进行排序：先按label排序，再按category排序\n  const sortedData = processedData.sort((a, b) => {\n    // 首先按label排序（月份、日期等）\n    const labelCompare = String(a._originalLabel).localeCompare(String(b._originalLabel), 'zh-CN', { numeric: true })\n    if (labelCompare !== 0) return labelCompare\n    \n    // 如果label相同，按category排序\n    if (a.category && b.category) {\n      return String(a.category).localeCompare(String(b.category), 'zh-CN')\n    }\n    \n    return 0\n  })\n  \n  // 调试信息\n  if (sortedData.length > 0) {\n    const uniqueLabels = [...new Set(sortedData.map(d => d.label))]\n    console.log('🔍 图表数据诊断:')\n    console.log('  - 总数据条数:', sortedData.length)\n    console.log('  - 唯一月份数:', uniqueLabels.length)\n    console.log('  - 月份顺序:', uniqueLabels)\n    console.log('  - 前5条数据:', sortedData.slice(0, 5).map(d => ({ \n      label: d.label, \n      category: d.category, \n      value: d.value,\n      valueKey: d._valueKey  // 显示数值列名称\n    })))\n    \n    const hasCategory = sortedData.some(d => 'category' in d && d.category)\n    if (hasCategory) {\n      const categories = [...new Set(sortedData.map(d => d.category).filter(Boolean))]\n      console.log('  - 分类数量:', categories.length)\n      console.log('  - 分类列表:', categories)\n    }\n    \n    // 多指标检测信息\n    if (props.plugin.data && props.plugin.data.length > 0) {\n      const firstRow = props.plugin.data[0]\n      if (typeof firstRow === 'object' && firstRow !== null) {\n        const keys = Object.keys(firstRow)\n        const numericKeys = keys.filter((key, index) => {\n          if (index === 0) return false\n          return typeof firstRow[key] === 'number'\n        })\n        console.log('  - 数值列数量:', numericKeys.length)\n        console.log('  - 数值列名称:', numericKeys)\n        console.log('  - 当前显示列:', sortedData[0]?._valueKey || '无')\n        console.log('  - 图表类型:', numericKeys.length > 1 ? '多指标' : '单指标')\n        console.log('  - 图例标签来源:', hasCategory ? 'category字段' : '数值列名称')\n      }\n    }\n  }\n  \n  return sortedData\n})\n\n/* \n * 功能描述: 展开多指标数据 - 将所有数值列转换为多条数据\n * 返回: {Array} - 展开后的数据数组\n */\nconst expandedChartData = computed(() => {\n  if (!props.plugin.data || !Array.isArray(props.plugin.data)) {\n    return []\n  }\n  \n  const expanded: any[] = []\n  \n  props.plugin.data.forEach(row => {\n    if (typeof row === 'object' && row !== null) {\n      const keys = Object.keys(row)\n      const labelKey = keys[0] // 第一列作为 x 轴标签（如：产品线名称）\n      \n      // 找到所有数值列\n      const numericKeys = keys.filter((key, index) => \n        index > 0 && typeof row[key] === 'number'\n      )\n      \n      // 检查是否有分类列（非第一列、非数值列的字符串列）\n      const categoryKey = keys.find(k => \n        k !== labelKey && \n        !numericKeys.includes(k) && \n        typeof row[k] === 'string'\n      )\n      \n      if (isMultiMeasure.value) {\n        // 多指标数据：为每个数值列创建一条数据\n        numericKeys.forEach(numericKey => {\n          const item: any = {\n            name: String(row[labelKey] || ''),\n            type: numericKey, // type 为数值列名称（如\"税后收入\"）\n            value: Number(row[numericKey]) || 0,\n            _originalLabel: row[labelKey]\n          }\n          // ⭐ 如果有分类列（如省份），添加到数据中\n          if (categoryKey) {\n            item.category = String(row[categoryKey])\n          }\n          expanded.push(item)\n        })\n      } else {\n        // 单指标数据：使用第一个数值列\n        const valueKey = numericKeys[0] || keys[1]\n        expanded.push({\n          name: String(row[labelKey] || ''),\n          type: categoryKey ? String(row[categoryKey]) : valueKey,\n          value: Number(row[valueKey]) || 0,\n          _originalLabel: row[labelKey]\n        })\n      }\n    }\n  })\n  \n  // 排序：先按 name 排序，再按 type 排序\n  const sorted = expanded.sort((a, b) => {\n    const nameCompare = String(a._originalLabel).localeCompare(\n      String(b._originalLabel), \n      'zh-CN', \n      { numeric: true }\n    )\n    if (nameCompare !== 0) return nameCompare\n    return String(a.type).localeCompare(String(b.type), 'zh-CN')\n  })\n  \n  // 调试信息：展开后的数据\n  if (sorted.length > 0) {\n    console.log('📊 多指标数据展开:')\n    console.log('  - 原始数据行数:', props.plugin.data?.length || 0)\n    console.log('  - 展开后数据条数:', sorted.length)\n    console.log('  - 唯一的 name 数量:', new Set(sorted.map(d => d.name)).size)\n    console.log('  - 唯一的 type 数量:', new Set(sorted.map(d => d.type)).size)\n    console.log('  - 所有 type 列表:', [...new Set(sorted.map(d => d.type))])\n    console.log('  - 前10条展开数据:', sorted.slice(0, 10).map(d => ({\n      name: d.name,\n      type: d.type,\n      value: d.value\n    })))\n  }\n  \n  return sorted\n})\n\n/* \n * 功能描述: 将原始数据转换为ChartData格式供基础组件使用\n * 返回: {ChartData} - 标准化的图表数据格式\n */\nconst chartDataForComponent = computed<ChartData>(() => {\n  // 图表类型映射\n  const chartTypeMap: Record<'bar' | 'line' | 'pie' | 'bubble' | 'area' | 'heatmap', string> = {\n    bar: 'BarChart',\n    line: 'LineChart',\n    pie: 'PieChart',\n    bubble: 'BubbleChart',\n    area: 'AreaChart',\n    heatmap: 'HeatmapChart'\n  }\n\n  return {\n    chart_uid: `chart_${Date.now()}`,\n    chart_name: props.plugin.name || '数据图表',\n    chart_desc: '',\n    chart_type: (chartTypeMap[selectedChartType.value] || 'BarChart') as any,\n    values: expandedChartData.value\n  }\n})\n\n/* 表格数据处理 */\nconst tableHeaders = computed(() => {\n  // 优先使用传入的headers\n  if (props.plugin.headers && props.plugin.headers.length > 0) {\n    return props.plugin.headers\n  }\n  \n  // 如果没有headers，从data的第一条记录中提取\n  if (props.plugin.data && props.plugin.data.length > 0) {\n    const firstRow = props.plugin.data[0]\n    if (typeof firstRow === 'object' && firstRow !== null) {\n      return Object.keys(firstRow)\n    }\n  }\n  \n  return []\n})\n\nconst tableData = computed(() => props.plugin.data || [])\n\nconst formattedTableData = computed(() => {\n  return tableData.value.map(row => {\n    if (typeof row === 'object' && row !== null) {\n      // 将对象转换为数组，按headers的顺序\n      return tableHeaders.value.map(header => {\n        const value = row[header]\n        \n        // 处理数字：浮点数保留2位小数\n        if (typeof value === 'number') {\n          if (!Number.isInteger(value)) {\n            return Number(value).toFixed(2)\n          }\n          return String(value)\n        }\n        \n        // 处理对象和数组：转换为JSON字符串\n        if (typeof value === 'object' && value !== null) {\n          try {\n            return JSON.stringify(value, null, 2)\n          } catch (e) {\n            return String(value)\n          }\n        }\n        \n        // 其他类型：转换为字符串\n        return String(value ?? '')\n      })\n    }\n    return row\n  })\n})\n\n/* \n * 功能描述: SQL格式化（用于复制）\n */\nconst formattedSql = computed(() => {\n  if (!props.plugin.sql) return ''\n  return props.plugin.sql\n    .replace(/\\bSELECT\\b/gi, 'SELECT')\n    .replace(/\\bFROM\\b/gi, '\\nFROM')\n    .replace(/\\bWHERE\\b/gi, '\\nWHERE')\n    .replace(/\\bGROUP BY\\b/gi, '\\nGROUP BY')\n    .replace(/\\bORDER BY\\b/gi, '\\nORDER BY')\n    .replace(/\\bLIMIT\\b/gi, '\\nLIMIT')\n})\n\n/* \n * 功能描述: SQL语法高亮（用于显示）\n * 返回: {string} - 高亮后的HTML字符串\n */\nconst highlightedSql = computed(() => {\n  if (!props.plugin.sql) return ''\n  \n  try {\n    // 使用 highlight.js 进行 SQL 语法高亮\n    const formatted = formattedSql.value\n    return hljs.highlight(formatted, { language: 'sql' }).value\n  } catch (e) {\n    console.error('SQL高亮失败:', e)\n    // 降级方案：返回纯文本\n    return formattedSql.value\n  }\n})\n\n/* \n * 功能描述: 检测原始数据中有多少个数值列（多指标检测）\n * 返回: {number} - 数值列的数量\n */\nconst numericColumnsCount = computed(() => {\n  if (!props.plugin.data || props.plugin.data.length === 0) return 0\n  \n  const firstRow = props.plugin.data[0]\n  if (typeof firstRow === 'object' && firstRow !== null) {\n    const keys = Object.keys(firstRow)\n    // 统计数值类型的列（排除第一列，通常是标签列）\n    const numericKeys = keys.filter((key, index) => {\n      if (index === 0) return false // 跳过第一列（通常是月份、日期等）\n      return typeof firstRow[key] === 'number'\n    })\n    return numericKeys.length\n  }\n  \n  return 0\n})\n\n/* \n * 功能描述: 判断是否为多指标图表\n * 返回: {boolean} - 是否有多个数值列\n */\nconst isMultiMeasure = computed(() => {\n  return numericColumnsCount.value > 1\n})\n\n/* \n * 功能描述: 图表推荐逻辑（优先AVA Advisor，其次后端指定，最后智能推荐）\n * 返回: {string} - 推荐的图表类型\n * \n * 推荐规则：\n * 1. 优先使用后端返回的图表类型（如 response_bubble_chart）\n * 2. 其次使用AVA Advisor的最高评分推荐\n * 3. 如果以上都没有，则根据数据特征智能推荐\n */\nconst recommendedChartType = computed(() => {\n  // 1. 优先使用后端指定的图表类型\n  const backendType = mapBackendChartType(props.plugin.type || props.plugin.chart_type)\n  if (backendType) {\n    console.log('📊 使用后端指定的图表类型:', props.plugin.type, '→', backendType)\n    return backendType\n  }\n  \n  // 2. 使用AVA Advisor的最高评分推荐\n  if (avaAdvices.value && avaAdvices.value.length > 0) {\n    const topAdvice = avaAdvices.value[0] // AVA已经按评分排序\n    const recommendedType = mapAVAChartType(topAdvice.type)\n    if (recommendedType) {\n      console.log('🎯 使用AVA Advisor推荐:', topAdvice.type, '→', recommendedType, '评分:', (topAdvice.score * 100).toFixed(0))\n      return recommendedType\n    }\n  }\n  \n  // 3. 基于数据特征的智能推荐（备用）\n  const data = chartData.value\n  if (!data || data.length === 0) return null\n  \n  const hasCategory = data.some(d => 'category' in d)\n  const valueCount = data.length\n  const numericCount = numericColumnsCount.value\n  \n  console.log('⚠️ 使用备用推荐规则')\n  \n  // 多指标数据推荐策略\n  if (isMultiMeasure.value) {\n    if (numericCount >= 3 && valueCount >= 5) return 'bubble'\n    if (valueCount > 5) return 'line'\n    return 'bar'\n  }\n  \n  // 单指标数据推荐策略\n  if (hasCategory && valueCount > 10) return 'line'\n  if (valueCount <= 6 && !hasCategory) return 'pie'\n  return 'bar'\n})\n\n/* \n * 功能描述: 可用的图表类型选项（使用AVA Advisor智能推荐）\n * 返回: {Array} - 图表选项列表\n * \n * 策略：\n * 1. 优先使用AVA Advisor的推荐结果\n * 2. 如果AVA推荐为空，回退到手动规则\n * 3. 去重并添加图表描述\n */\nconst availableChartOptions = computed(() => {\n  const options: Array<{ value: 'bar' | 'line' | 'pie' | 'bubble' | 'area' | 'heatmap', label: string, desc?: string, score?: number, isRecommended?: boolean }> = []\n  const addedTypes = new Set<string>()\n  \n  // 图表类型对应的中文名称和描述\n  const chartLabels: Record<string, { label: string, desc: string }> = {\n    'bar': { \n      label: isMultiMeasure.value ? '多指标柱状图' : '柱状图', \n      desc: isMultiMeasure.value ? '适合对比多个指标的数值' : '适合对比分类数据' \n    },\n    'line': { \n      label: isMultiMeasure.value ? '多指标折线图' : '折线图', \n      desc: isMultiMeasure.value ? '适合展示多个指标的趋势' : '适合展示单一指标趋势' \n    },\n    'pie': { \n      label: '饼图', \n      desc: isMultiMeasure.value ? '展示第一个指标的分类占比' : '适合展示分类占比' \n    },\n    'bubble': { \n      label: '气泡图', \n      desc: '适合展示三维数据关系' \n    },\n    'area': { \n      label: isMultiMeasure.value ? '多指标面积图' : '面积图', \n      desc: '适合展示趋势和总量变化' \n    },\n    'heatmap': { \n      label: '热力图', \n      desc: '适合展示数据分布密度' \n    }\n  }\n  \n  // 1. 优先添加推荐的图表类型\n  const recommended = recommendedChartType.value\n  if (recommended) {\n    const info = chartLabels[recommended]\n    if (info) {\n      options.push({\n        value: recommended,\n        label: info.label,\n        desc: `${info.desc} - AI推荐`,\n        isRecommended: true\n      })\n      addedTypes.add(recommended)\n      console.log(`⭐ 添加推荐图表: ${info.label}`)\n    }\n  }\n  \n  // 2. 使用AVA Advisor的推荐结果\n  if (avaAdvices.value && avaAdvices.value.length > 0) {\n    console.log('✨ 使用AVA Advisor推荐的图表类型')\n    \n    // 按评分分组：相同映射类型取最高分\n    const typeScores = new Map<string, { score: number, avaType: string }>()\n    \n    avaAdvices.value.forEach(advice => {\n      const mappedType = mapAVAChartType(advice.type)\n      if (mappedType) {\n        const existing = typeScores.get(mappedType)\n        if (!existing || advice.score > existing.score) {\n          typeScores.set(mappedType, { score: advice.score, avaType: advice.type })\n        }\n      }\n    })\n    \n    // 添加到选项列表（跳过已添加的推荐类型）\n    typeScores.forEach((scoreInfo, mappedType) => {\n      if (!addedTypes.has(mappedType)) {\n        const info = chartLabels[mappedType as keyof typeof chartLabels]\n        if (info) {\n          options.push({\n            value: mappedType as 'bar' | 'line' | 'pie' | 'bubble' | 'area' | 'heatmap',\n            label: info.label,\n            desc: `${info.desc} (AVA评分: ${(scoreInfo.score * 100).toFixed(0)})`,\n            score: scoreInfo.score\n          })\n          addedTypes.add(mappedType)\n        }\n      }\n    })\n    \n    console.log('📋 AVA推荐汇总:', {\n      totalAdvices: avaAdvices.value.length,\n      uniqueTypes: typeScores.size,\n      types: Array.from(typeScores.keys())\n    })\n  }\n  \n  // 3. 补充基础图表类型（确保关键图表类型始终可用）\n  const valueCount = chartData.value.length\n  const numericCount = numericColumnsCount.value\n  \n  if (isMultiMeasure.value) {\n    // 多指标数据：确保柱状图和折线图始终可用\n    const essentialTypes: Array<'bar' | 'line'> = ['bar', 'line']\n    essentialTypes.forEach(type => {\n      if (!addedTypes.has(type)) {\n        const info = chartLabels[type]\n        options.push({ value: type, label: info.label, desc: info.desc })\n        addedTypes.add(type)\n        console.log(`➕ 补充多指标必备图表: ${info.label}`)\n      }\n    })\n    \n    // 根据数据特征添加高级图表\n    if (valueCount >= 3 && !addedTypes.has('area')) {\n      const info = chartLabels['area']\n      options.push({ value: 'area', label: info.label, desc: info.desc })\n      addedTypes.add('area')\n    }\n    if (numericCount >= 3 && valueCount >= 5 && !addedTypes.has('bubble')) {\n      const info = chartLabels['bubble']\n      options.push({ value: 'bubble', label: info.label, desc: info.desc })\n      addedTypes.add('bubble')\n    }\n    if (numericCount >= 2 && valueCount >= 4 && !addedTypes.has('heatmap')) {\n      const info = chartLabels['heatmap']\n      options.push({ value: 'heatmap', label: info.label, desc: info.desc })\n      addedTypes.add('heatmap')\n    }\n  } else {\n    // 单指标数据：确保基础图表可用\n    const essentialTypes: Array<'bar' | 'line'> = ['bar', 'line']\n    essentialTypes.forEach(type => {\n      if (!addedTypes.has(type)) {\n        const info = chartLabels[type]\n        options.push({ value: type, label: info.label, desc: info.desc })\n        addedTypes.add(type)\n      }\n    })\n    \n    // 根据数据特征添加饼图（如果适合且未添加）\n    if (valueCount <= 10 && !addedTypes.has('pie')) {\n      const info = chartLabels['pie']\n      options.push({ value: 'pie', label: info.label, desc: info.desc })\n      addedTypes.add('pie')\n      console.log(`➕ 补充饼图选项`)\n    }\n    \n    // 根据数据特征添加其他图表\n    if (valueCount >= 3 && !addedTypes.has('area')) {\n      const info = chartLabels['area']\n      options.push({ value: 'area', label: info.label, desc: info.desc })\n      addedTypes.add('area')\n    }\n  }\n  \n  // 4. 确保至少有一些选项\n  if (options.length === 0) {\n    console.warn('⚠️ 无可用图表选项，使用默认配置')\n    options.push(\n      { value: 'bar', label: chartLabels['bar'].label, desc: chartLabels['bar'].desc },\n      { value: 'line', label: chartLabels['line'].label, desc: chartLabels['line'].desc }\n    )\n  }\n  \n  // 调试信息\n  console.log('📊 可用图表选项 (AVA增强):', {\n    source: avaAdvices.value.length > 0 ? 'AVA Advisor' : '备用规则',\n    avaAdvicesCount: avaAdvices.value.length,\n    recommendedType: recommended,\n    optionsCount: options.length,\n    options: options.map(o => ({ label: o.label, score: o.score, isRecommended: o.isRecommended }))\n  })\n  \n  return options\n})\n\n/* \n * 功能描述: 图表类型标签映射\n * 返回: {string} - 图表类型的中文名称\n */\nconst chartTypeLabel = computed(() => {\n  const type = initialRecommendedType.value\n  \n  // 如果是多指标，添加\"多指标\"前缀\n  if (isMultiMeasure.value) {\n    const labels = { \n      bar: '多指标柱状图', \n      line: '多指标折线图', \n      pie: '饼图', // 饼图不适合多指标，保持原样\n      bubble: '气泡图',\n      area: '面积图',  // ⭐ 新增\n      heatmap: '热力图'  // ⭐ 新增\n    }\n    return labels[type] || '多指标柱状图'\n  }\n  \n  // 单指标图表\n  const labels = { \n    bar: '柱状图', \n    line: '折线图', \n    pie: '饼图',\n    bubble: '气泡图',\n    area: '面积图',  // ⭐ 新增\n    heatmap: '热力图'  // ⭐ 新增\n  }\n  return labels[type] || '柱状图'\n})\n\n/* 复制SQL */\nconst copySql = async () => {\n  try {\n    await navigator.clipboard.writeText(props.plugin.sql || '')\n    sqlCopied.value = true\n    setTimeout(() => {\n      sqlCopied.value = false\n    }, 2000)\n  } catch (err) {\n    console.error('Failed to copy SQL:', err)\n  }\n}\n\n/* AVA图表类型映射：将AVA的ChartType映射为我们的组件类型 */\nconst mapAVAChartType = (avaType: string): 'bar' | 'line' | 'pie' | 'bubble' | 'area' | 'heatmap' | null => {\n  const typeMap: Record<string, 'bar' | 'line' | 'pie' | 'bubble' | 'area' | 'heatmap'> = {\n    // 柱状图系列\n    'column_chart': 'bar',\n    'grouped_column_chart': 'bar',\n    'stacked_column_chart': 'bar',\n    'percent_stacked_column_chart': 'bar',\n    'bar_chart': 'bar',\n    'grouped_bar_chart': 'bar',\n    'stacked_bar_chart': 'bar',\n    'percent_stacked_bar_chart': 'bar',\n    'multi_measure_column_chart': 'bar',  // 自定义：多指标柱状图\n    \n    // 折线图系列\n    'line_chart': 'line',\n    'step_line_chart': 'line',\n    'multi_line_chart': 'line',  // 自定义：多折线图\n    'multi_measure_line_chart': 'line',  // 自定义：多指标折线图\n    \n    // 饼图系列\n    'pie_chart': 'pie',\n    'donut_chart': 'pie',\n    \n    // 散点图/气泡图系列\n    'scatter_plot': 'bubble',\n    'bubble_chart': 'bubble',\n    \n    // 面积图系列（已在AVA配置中排除，但保留映射）\n    'area_chart': 'area',\n    'stacked_area_chart': 'area',\n    'percent_stacked_area_chart': 'area',\n    \n    // 热力图系列\n    'heatmap': 'heatmap'\n  }\n  \n  const result = typeMap[avaType] || null\n  \n  // 如果没有映射到，输出警告\n  if (!result && avaType) {\n    console.warn('⚠️ 未映射的AVA图表类型:', avaType)\n  }\n  \n  return result\n}\n\n/* 使用AVA Advisor进行图表推荐 */\nconst runAVAAdvisor = () => {\n  // 如果没有数据，不执行分析\n  if (!props.plugin.data || props.plugin.data.length === 0) {\n    console.log('⏭️  跳过AVA分析: 无数据')\n    return\n  }\n  \n  try {\n    // 创建Advisor实例（参考原版配置）\n    const advisor = new Advisor({\n      ckbCfg: {\n        // 排除面积图（与原版保持一致）\n        exclude: ['area_chart', 'stacked_area_chart', 'percent_stacked_area_chart']\n      }\n    })\n    avaAdvisor.value = advisor\n    \n    // 准备数据：将数据转换为AVA需要的格式\n    const avaData: Datum[] = props.plugin.data.map(row => {\n      if (typeof row === 'object' && row !== null) {\n        return { ...row } as Datum\n      }\n      return row as Datum\n    })\n    \n    // 使用AVA分析数据并获取图表推荐\n    const myAdvices = advisor.advise({ data: avaData })\n    avaAdvices.value = myAdvices\n    \n    // 调试信息\n    console.log('🎯 AVA Advisor 图表推荐:', {\n      dataCount: avaData.length,\n      advicesCount: myAdvices.length,\n      topAdvices: myAdvices.slice(0, 10).map(a => ({\n        type: a.type,\n        score: a.score\n      })),\n      allTypes: myAdvices.map(a => a.type)\n    })\n  } catch (error) {\n    console.error('❌ AVA Advisor分析失败:', error)\n    // 分析失败时，清空推荐列表，使用备用规则\n    avaAdvices.value = []\n  }\n}\n\n/* 组件挂载时初始化AVA */\nonMounted(() => {\n  runAVAAdvisor()\n})\n\n/* 数据变化时重新分析 */\nwatch(() => props.plugin.data, () => {\n  runAVAAdvisor()\n}, { deep: true })\n\n/* 图表类型自动推荐 */\nwatch(recommendedChartType, (newType) => {\n  if (newType && chartData.value.length > 0) {\n    // 只在第一次设置时保存初始推荐类型\n    if (!initialRecommendedType.value || initialRecommendedType.value === 'bar') {\n      initialRecommendedType.value = newType\n    }\n    selectedChartType.value = newType\n  }\n}, { immediate: true })\n</script>\n\n<style scoped>\n.chart-view-tabs {\n  animation: fadeIn 0.3s ease-out;\n  padding: 4px;  /* 改为 p-2 的一半，即 4px */\n}\n\n@keyframes fadeIn {\n  from {\n    opacity: 0;\n    transform: translateY(10px);\n  }\n  to {\n    opacity: 1;\n    transform: translateY(0);\n  }\n}\n\n.chart-container {\n  width: 100%;\n  min-height: 280px;\n  max-width: 100%;\n  overflow: hidden;\n}\n\n/* 移动端优化 */\n@media (max-width: 768px) {\n  .chart-view-tabs {\n    padding: 4px;  /* 移动端也使用更小的边距 */\n  }\n  \n  .chart-container {\n    min-height: 260px;\n  }\n}\n\n/* Tabs整体容器 */\n.chart-tabs {\n  /* 移除负边距，让Tab在容器内 */\n  margin-left: 0;\n  margin-right: 0;\n}\n\n/* Element Plus Tabs 样式覆盖 */\n:deep(.el-tabs__header) {\n  margin: 0 !important;\n  padding: 0 8px !important;\n  border-bottom: 1px solid #e5e7eb;\n  position: relative;\n}\n\n.dark :deep(.el-tabs__header) {\n  border-bottom-color: #374151;\n}\n\n:deep(.el-tabs__nav-wrap) {\n  display: block;\n  padding: 0 !important;\n  margin: 0 !important;\n}\n\n:deep(.el-tabs__content) {\n  overflow: visible !important;\n}\n\n:deep(.el-tabs__nav-scroll) {\n  display: flex;\n  justify-content: flex-start;\n  padding: 0 !important;\n}\n\n:deep(.el-tabs__nav-wrap::after) {\n  display: none;\n}\n\n:deep(.el-tabs__nav) {\n  display: flex !important;\n  flex-direction: row;\n  float: none !important;\n  transform: translateX(0) !important;\n  position: static !important;\n}\n\n:deep(.el-tabs__item) {\n  padding: 12px 20px;\n  font-size: 14px;\n  color: #6b7280;\n  border: none;\n  height: auto;\n  line-height: 1.5;\n  flex-shrink: 0;\n  white-space: nowrap;\n  position: relative;\n  margin: 0 !important;\n}\n\n:deep(.el-tabs__item:first-child) {\n  padding-left: 16px;\n  margin-left: 0 !important;\n}\n\n@media (max-width: 768px) {\n  :deep(.el-tabs__item) {\n    padding: 10px 16px;\n    font-size: 13px;\n  }\n  \n  :deep(.el-tabs__item:first-child) {\n    padding-left: 12px;\n  }\n}\n\n:deep(.el-tabs__item:hover) {\n  color: #3b82f6;\n  background-color: #f9fafb;\n}\n\n.dark :deep(.el-tabs__item) {\n  color: #9ca3af;\n}\n\n.dark :deep(.el-tabs__item:hover) {\n  color: #60a5fa;\n  background-color: #1f2937;\n}\n\n:deep(.el-tabs__item.is-active) {\n  color: #3b82f6;\n  font-weight: 500;\n  background-color: transparent;\n}\n\n.dark :deep(.el-tabs__item.is-active) {\n  color: #60a5fa;\n}\n\n:deep(.el-tabs__active-bar) {\n  background-color: #3b82f6;\n  height: 2px;\n  position: absolute;\n  bottom: -1px !important;\n  top: auto !important;\n  z-index: 1;\n  transition: transform 0.3s cubic-bezier(0.645, 0.045, 0.355, 1), \n              width 0.3s cubic-bezier(0.645, 0.045, 0.355, 1);\n}\n\n.dark :deep(.el-tabs__active-bar) {\n  background-color: #60a5fa;\n}\n\n:deep(.el-tabs__content) {\n  overflow: visible;\n  margin-left: 0;\n  margin-right: 0;\n}\n\n@media (max-width: 768px) {\n  :deep(.el-tabs__content) {\n    margin-left: 0;\n    margin-right: 0;\n  }\n}\n\n.chart-panel {\n  padding: 4px;  /* 改为更小的 padding */\n}\n\n.sql-panel {\n  padding: 0;\n}\n\n.data-panel {\n  padding: 4px;  /* 改为更小的 padding */\n}\n\n/* 图表类型选择器样式 */\n.chart-type-selector {\n  padding: 6px 32px 6px 12px;\n  font-size: 14px;\n  color: #374151;\n  background-color: white;\n  border: 1px solid #d1d5db;\n  border-radius: 6px;\n  cursor: pointer;\n  appearance: none;\n  background-image: url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' viewBox='0 0 24 24' stroke='%236b7280'%3E%3Cpath stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='M19 9l-7 7-7-7'%3E%3C/path%3E%3C/svg%3E\");\n  background-repeat: no-repeat;\n  background-position: right 8px center;\n  background-size: 20px;\n  transition: all 0.15s ease-in-out;\n}\n\n.chart-type-selector:hover {\n  border-color: #3b82f6;\n  box-shadow: 0 0 0 3px rgba(59, 130, 246, 0.1);\n}\n\n.chart-type-selector:focus {\n  outline: none;\n  border-color: #3b82f6;\n  box-shadow: 0 0 0 3px rgba(59, 130, 246, 0.2);\n}\n\n.dark .chart-type-selector {\n  background-color: #1f2937;\n  border-color: #374151;\n  color: #d1d5db;\n  background-image: url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' viewBox='0 0 24 24' stroke='%239ca3af'%3E%3Cpath stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='M19 9l-7 7-7-7'%3E%3C/path%3E%3C/svg%3E\");\n}\n\n.dark .chart-type-selector:hover {\n  border-color: #60a5fa;\n  box-shadow: 0 0 0 3px rgba(96, 165, 250, 0.1);\n}\n\n.dark .chart-type-selector:focus {\n  border-color: #60a5fa;\n  box-shadow: 0 0 0 3px rgba(96, 165, 250, 0.2);\n}\n\n/* SQL 代码块样式 - 模仿代码编辑器效果 */\n.sql-code-block {\n  background-color: #2d3748 !important;\n  border-radius: 8px;\n  overflow: hidden;\n  box-shadow: 0 4px 6px -1px rgba(0, 0, 0, 0.1), 0 2px 4px -1px rgba(0, 0, 0, 0.06);\n}\n\n.sql-header {\n  display: flex;\n  align-items: center;\n  justify-content: space-between;\n  padding: 8px 14px;\n  background-color: #1a202c !important;\n  border-bottom: 1px solid #374151;\n}\n\n.copy-btn {\n  display: inline-flex;\n  align-items: center;\n  padding: 4px 8px;\n  font-size: 12px;\n  font-weight: 500;\n  color: #e5e7eb;\n  background-color: #3b82f6;\n  border: none;\n  border-radius: 4px;\n  cursor: pointer;\n  transition: all 0.2s ease;\n}\n\n.copy-btn:hover {\n  background-color: #2563eb;\n  transform: translateY(-1px);\n}\n\n.copy-btn:active {\n  transform: translateY(0);\n}\n\n/* 已复制状态 - 绿色 */\n.copy-btn-copied {\n  background-color: #10b981 !important;\n}\n\n.copy-btn-copied:hover {\n  background-color: #059669 !important;\n}\n\n.sql-content {\n  background-color: #2d3748 !important;\n  padding: 16px;\n  margin: 0;\n  overflow-x: auto;\n}\n\n.sql-content code {\n  display: block;\n  font-family: 'Consolas', 'Monaco', 'Courier New', monospace;\n  font-size: 14px;\n  line-height: 1.6;\n  background-color: transparent !important;\n  /* 不设置color，让hljs的语法高亮自然生效 */\n  white-space: pre;\n  overflow-x: auto;\n}\n\n/* highlight.js 样式支持 */\n.sql-content code.hljs {\n  background: transparent !important;\n  padding: 0;\n}\n\n/* 暗色模式下的样式优化 */\n.dark .sql-code-block {\n  background-color: #1e293b !important;\n}\n\n.dark .sql-header {\n  background-color: #0f172a !important;\n  border-bottom-color: #1e293b;\n}\n\n.dark .sql-content {\n  background-color: #1e293b !important;\n}\n\n/* 暗色模式下也不强制设置颜色，让hljs主题生效 */\n</style>\n","<template>\r\n  <!-- 流式传输期间完全不显示，等文字加载完再出现 -->\r\n  <div v-if=\"!streaming\" class=\"code-view bg-gray-50 dark:bg-gray-800 rounded-lg p-2 md:p-4\">\r\n    <PluginStatus \r\n      :status=\"plugin.status\"\r\n      :name=\"plugin.name\"\r\n      :errorMessage=\"plugin.err_msg\"\r\n      defaultName=\"SQL查询\"\r\n      :loadingTextMap=\"{\r\n        todo: '等待执行...',\r\n        runing: '正在执行代码...'\r\n      }\"\r\n    >\r\n      <!-- 标题栏操作：复制按钮 -->\r\n      <template #headerActions>\r\n        <button\r\n          v-if=\"codeContent\"\r\n          @click=\"copyCode\"\r\n          class=\"text-xs px-3 py-1 bg-blue-500 hover:bg-blue-600 text-white rounded-md transition-colors flex items-center space-x-1\"\r\n        >\r\n          <svg v-if=\"!copied\" class=\"w-3 h-3\" fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\r\n            <path stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" d=\"M8 16H6a2 2 0 01-2-2V6a2 2 0 012-2h8a2 2 0 012 2v2m-6 12h8a2 2 0 002-2v-8a2 2 0 00-2-2h-8a2 2 0 00-2 2v8a2 2 0 002 2z\"/>\r\n          </svg>\r\n          <svg v-else class=\"w-3 h-3\" fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\r\n            <path stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" d=\"M5 13l4 4L19 7\"/>\r\n          </svg>\r\n          <span>{{ copied ? '已复制' : '复制代码' }}</span>\r\n        </button>\r\n      </template>\r\n\r\n      <!-- 代码内容 -->\r\n      <div class=\"code-content\">\r\n        <div class=\"code-block bg-gray-900 rounded-lg overflow-hidden\">\r\n          <!-- 代码头部 -->\r\n          <div class=\"flex items-center justify-between px-4 py-2 bg-gray-800 border-b border-gray-700\">\r\n            <span class=\"text-xs text-gray-400 uppercase font-mono\">\r\n              {{ codeLanguage }}\r\n            </span>\r\n            <div class=\"flex items-center space-x-2 text-xs text-gray-400\">\r\n              <span>{{ lineCount }} 行</span>\r\n            </div>\r\n          </div>\r\n          \r\n          <!-- 代码主体 -->\r\n          <div class=\"code-body p-4 overflow-x-auto\">\r\n            <pre class=\"text-sm leading-relaxed\"><code class=\"language-sql text-gray-200 font-mono\">{{ codeContent }}</code></pre>\r\n          </div>\r\n        </div>\r\n        \r\n        <!-- 执行结果 -->\r\n        <div v-if=\"resultData\" class=\"mt-4\">\r\n          <div class=\"text-sm font-medium text-gray-700 dark:text-gray-300 mb-2\">\r\n            执行结果\r\n          </div>\r\n          \r\n          <!-- 表格结果（响应式） -->\r\n          <div v-if=\"Array.isArray(resultData)\">\r\n            <ResponsiveTable \r\n              :headers=\"resultHeaders\" \r\n              :data=\"formattedTableData\" \r\n            />\r\n            \r\n            <!-- 显示更多提示 -->\r\n            <div v-if=\"resultData.length > 50\" class=\"mt-2 px-4 py-2 bg-blue-50 dark:bg-blue-900/20 rounded-md text-xs text-blue-700 dark:text-blue-300 text-center\">\r\n              📊 显示前 50 行，共 {{ resultData.length }} 行数据\r\n            </div>\r\n          </div>\r\n          \r\n          <!-- JSON 结果 -->\r\n          <div v-else class=\"bg-gray-100 dark:bg-gray-700 p-4 rounded-lg overflow-x-auto\">\r\n            <pre class=\"text-xs text-gray-700 dark:text-gray-300\">{{ JSON.stringify(resultData, null, 2) }}</pre>\r\n          </div>\r\n        </div>\r\n      </div>\r\n    </PluginStatus>\r\n  </div>\r\n</template>\r\n\r\n<script setup lang=\"ts\">\r\nimport { computed, ref } from 'vue'\r\nimport ResponsiveTable from '../ResponsiveTable.vue'\r\nimport PluginStatus from '../PluginStatus.vue'\r\n\r\ninterface DBGPTView {\r\n  name: string\r\n  status: 'todo' | 'runing' | 'failed' | 'completed'\r\n  result?: string\r\n  err_msg?: string\r\n  sql?: string\r\n  data?: any\r\n}\r\n\r\ninterface Props {\r\n  plugin: DBGPTView\r\n  streaming?: boolean  // 消息是否还在流式传输中（保持接口一致）\r\n}\r\n\r\nconst props = defineProps<Props>()\r\n\r\nconst copied = ref(false)\r\n\r\n// 代码内容\r\nconst codeContent = computed(() => {\r\n  return props.plugin.sql || props.plugin.result || ''\r\n})\r\n\r\n// 代码语言\r\nconst codeLanguage = computed(() => {\r\n  if (props.plugin.sql) return 'SQL'\r\n  if (props.plugin.name?.toLowerCase().includes('python')) return 'Python'\r\n  if (props.plugin.name?.toLowerCase().includes('javascript')) return 'JavaScript'\r\n  return 'Code'\r\n})\r\n\r\n// 行数\r\nconst lineCount = computed(() => {\r\n  return codeContent.value.split('\\n').length\r\n})\r\n\r\n// 结果数据\r\nconst resultData = computed(() => {\r\n  try {\r\n    if (props.plugin.data) {\r\n      return props.plugin.data\r\n    }\r\n    return null\r\n  } catch (e) {\r\n    return null\r\n  }\r\n})\r\n\r\n// 结果表头\r\nconst resultHeaders = computed(() => {\r\n  if (!resultData.value || !Array.isArray(resultData.value) || resultData.value.length === 0) {\r\n    return []\r\n  }\r\n  \r\n  const firstRow = resultData.value[0]\r\n  if (Array.isArray(firstRow)) {\r\n    return firstRow.map((_, index) => `列${index + 1}`)\r\n  } else if (typeof firstRow === 'object') {\r\n    return Object.keys(firstRow)\r\n  }\r\n  \r\n  return []\r\n})\r\n\r\n// 格式化表格数据（用于响应式表格组件）\r\nconst formattedTableData = computed(() => {\r\n  if (!resultData.value || !Array.isArray(resultData.value)) {\r\n    return []\r\n  }\r\n  \r\n  return resultData.value.slice(0, 50).map(row => {\r\n    if (Array.isArray(row)) {\r\n      return row.map(cell => formatCell(cell))\r\n    } else if (typeof row === 'object') {\r\n      return Object.values(row).map(cell => formatCell(cell))\r\n    }\r\n    return [formatCell(row)]\r\n  })\r\n})\r\n\r\n// 复制代码\r\nconst copyCode = async () => {\r\n  try {\r\n    await navigator.clipboard.writeText(codeContent.value)\r\n    copied.value = true\r\n    setTimeout(() => {\r\n      copied.value = false\r\n    }, 2000)\r\n  } catch (err) {\r\n    console.error('Failed to copy:', err)\r\n  }\r\n}\r\n\r\n// 格式化单元格\r\nconst formatCell = (cell: any) => {\r\n  if (cell === null || cell === undefined) return '-'\r\n  if (typeof cell === 'object') return JSON.stringify(cell)\r\n  return String(cell)\r\n}\r\n</script>\r\n\r\n<style scoped>\r\n.code-view {\r\n  animation: fadeIn 0.3s ease-out;\r\n}\r\n\r\n@keyframes fadeIn {\r\n  from {\r\n    opacity: 0;\r\n    transform: translateY(10px);\r\n  }\r\n  to {\r\n    opacity: 1;\r\n    transform: translateY(0);\r\n  }\r\n}\r\n\r\n/* 代码高亮（基础样式） */\r\n.code-body code {\r\n  display: block;\r\n  white-space: pre;\r\n  word-wrap: normal;\r\n}\r\n\r\n/* 滚动条样式 */\r\n.code-body::-webkit-scrollbar {\r\n  height: 8px;\r\n}\r\n\r\n.code-body::-webkit-scrollbar-track {\r\n  background: #1e293b;\r\n  border-radius: 4px;\r\n}\r\n\r\n.code-body::-webkit-scrollbar-thumb {\r\n  background: #475569;\r\n  border-radius: 4px;\r\n}\r\n\r\n.code-body::-webkit-scrollbar-thumb:hover {\r\n  background: #64748b;\r\n}\r\n</style>\r\n\r\n","/*\r\n * 功能描述: HTML实时预览组件\r\n * 使用场景: 安全地预览AI生成的HTML内容\r\n */\r\n<template>\r\n  <div class=\"html-preview bg-gray-50 dark:bg-gray-800 rounded-lg border border-gray-200 dark:border-gray-700 overflow-hidden\">\r\n    <!-- 头部 -->\r\n    <div class=\"flex items-center justify-between px-4 py-2 bg-gray-100 dark:bg-gray-700 border-b border-gray-200 dark:border-gray-600\">\r\n      <div class=\"flex items-center space-x-2\">\r\n        <svg class=\"w-4 h-4 text-orange-600 dark:text-orange-400\" fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\r\n          <path stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" d=\"M10 20l4-16m4 4l4 4-4 4M6 16l-4-4 4-4\"/>\r\n        </svg>\r\n        <span class=\"text-sm font-medium text-gray-700 dark:text-gray-300\">HTML预览</span>\r\n      </div>\r\n      <div class=\"flex items-center space-x-2\">\r\n        <button\r\n          @click=\"copyHtml\"\r\n          class=\"text-xs px-3 py-1 bg-blue-500 hover:bg-blue-600 text-white rounded transition-colors\"\r\n        >\r\n          {{ copied ? '已复制' : '复制代码' }}\r\n        </button>\r\n        <button\r\n          @click=\"toggleView\"\r\n          class=\"text-xs px-3 py-1 bg-gray-600 hover:bg-gray-700 text-white rounded transition-colors\"\r\n        >\r\n          {{ showCode ? '查看预览' : '查看代码' }}\r\n        </button>\r\n      </div>\r\n    </div>\r\n\r\n    <!-- 预览内容 -->\r\n    <div v-if=\"!showCode\" class=\"preview-area p-4 bg-white dark:bg-gray-900\">\r\n      <div \r\n        v-html=\"sanitizedHtml\" \r\n        class=\"rendered-html\"\r\n      ></div>\r\n    </div>\r\n\r\n    <!-- 代码内容 -->\r\n    <div v-else class=\"code-area\">\r\n      <pre class=\"p-4 overflow-x-auto bg-gray-900 text-gray-200 text-sm\"><code>{{ htmlContent }}</code></pre>\r\n    </div>\r\n  </div>\r\n</template>\r\n\r\n<script setup lang=\"ts\">\r\nimport { ref, computed } from 'vue'\r\nimport DOMPurify from 'dompurify'\r\n\r\ninterface Props {\r\n  html: string\r\n}\r\n\r\nconst props = defineProps<Props>()\r\n\r\nconst showCode = ref(false)\r\nconst copied = ref(false)\r\n\r\n// 清理HTML内容\r\nconst sanitizedHtml = computed(() => {\r\n  return DOMPurify.sanitize(props.html, {\r\n    ADD_TAGS: ['iframe'],\r\n    ADD_ATTR: ['style', 'class', 'id', 'data-*'],\r\n    ALLOW_DATA_ATTR: true,\r\n    FORBID_TAGS: ['script'],\r\n    FORBID_ATTR: ['onerror', 'onload', 'onclick']\r\n  })\r\n})\r\n\r\n// HTML内容（用于显示代码）\r\nconst htmlContent = computed(() => props.html)\r\n\r\n// 切换视图\r\nconst toggleView = () => {\r\n  showCode.value = !showCode.value\r\n}\r\n\r\n// 复制HTML\r\nconst copyHtml = async () => {\r\n  try {\r\n    await navigator.clipboard.writeText(props.html)\r\n    copied.value = true\r\n    setTimeout(() => {\r\n      copied.value = false\r\n    }, 2000)\r\n  } catch (err) {\r\n    console.error('Failed to copy HTML:', err)\r\n  }\r\n}\r\n</script>\r\n\r\n<style scoped>\r\n.html-preview {\r\n  animation: fadeIn 0.3s ease-out;\r\n}\r\n\r\n@keyframes fadeIn {\r\n  from {\r\n    opacity: 0;\r\n    transform: translateY(10px);\r\n  }\r\n  to {\r\n    opacity: 1;\r\n    transform: translateY(0);\r\n  }\r\n}\r\n\r\n/* 预览区域样式隔离 */\r\n.rendered-html {\r\n  min-height: 100px;\r\n  /* 防止内容溢出 */\r\n  overflow: hidden;\r\n  overflow-x: auto;\r\n  word-wrap: break-word;\r\n  word-break: break-word;\r\n}\r\n\r\n/* 确保预览内容不会破坏布局 */\r\n.rendered-html :deep(*) {\r\n  max-width: 100%;\r\n  /* 防止元素溢出 */\r\n  box-sizing: border-box;\r\n}\r\n\r\n.rendered-html :deep(img) {\r\n  max-width: 100%;\r\n  height: auto;\r\n  display: block;\r\n}\r\n\r\n/* 防止表格、pre等固定宽度元素溢出 */\r\n.rendered-html :deep(table) {\r\n  max-width: 100%;\r\n  overflow-x: auto;\r\n  display: block;\r\n}\r\n\r\n.rendered-html :deep(pre) {\r\n  max-width: 100%;\r\n  overflow-x: auto;\r\n  white-space: pre-wrap;\r\n  word-wrap: break-word;\r\n}\r\n\r\n/* 防止长文本溢出 */\r\n.rendered-html :deep(code) {\r\n  word-wrap: break-word;\r\n  word-break: break-word;\r\n}\r\n\r\n/* 代码区域滚动条 */\r\n.code-area pre::-webkit-scrollbar {\r\n  height: 8px;\r\n}\r\n\r\n.code-area pre::-webkit-scrollbar-track {\r\n  background: #1e293b;\r\n}\r\n\r\n.code-area pre::-webkit-scrollbar-thumb {\r\n  background: #475569;\r\n  border-radius: 4px;\r\n}\r\n\r\n.code-area pre::-webkit-scrollbar-thumb:hover {\r\n  background: #64748b;\r\n}\r\n</style>\r\n\r\n","<template>\n  <div class=\"json-viewer\">\n    <div class=\"json-content\">\n      <JsonNode :data=\"value\" :path=\"[]\" :expanded=\"expanded\" />\n    </div>\n  </div>\n</template>\n\n<script setup lang=\"ts\">\nimport { defineComponent, h, ref } from 'vue'\n\ninterface Props {\n  value: any\n  expanded?: boolean\n}\n\nwithDefaults(defineProps<Props>(), {\n  expanded: false\n})\n\n// JSON节点组件\nconst JsonNode: any = defineComponent({\n  name: 'JsonNode',\n  props: {\n    data: {\n      type: [Object, Array, String, Number, Boolean, null] as any,\n      required: true\n    },\n    path: {\n      type: Array as () => string[],\n      default: () => []\n    },\n    expanded: {\n      type: Boolean,\n      default: false\n    }\n  },\n  setup(props) {\n    const isExpanded = ref(props.expanded)\n\n    const toggleExpanded = () => {\n      isExpanded.value = !isExpanded.value\n    }\n\n    const getType = (value: any): string => {\n      if (value === null) return 'null'\n      if (Array.isArray(value)) return 'array'\n      return typeof value\n    }\n\n    const renderPrimitive = (value: any) => {\n      const type = getType(value)\n      let className = 'json-value'\n      let displayValue = String(value)\n\n      switch (type) {\n        case 'string':\n          className += ' json-string'\n          displayValue = `\"${value}\"`\n          break\n        case 'number':\n          className += ' json-number'\n          break\n        case 'boolean':\n          className += ' json-boolean'\n          break\n        case 'null':\n          className += ' json-null'\n          displayValue = 'null'\n          break\n      }\n\n      return h('span', { class: className }, displayValue)\n    }\n\n    const renderObject = (): any => {\n      const type = getType(props.data)\n      const isArray = type === 'array'\n      const entries = isArray \n        ? (props.data as any[]).map((v, i) => [String(i), v])\n        : Object.entries(props.data)\n\n      const openBracket = isArray ? '[' : '{'\n      const closeBracket = isArray ? ']' : '}'\n      const count = entries.length\n\n      return h('div', { class: 'json-object' }, [\n        // 折叠按钮 + 开始括号\n        h('div', { class: 'json-line' }, [\n          h('span', {\n            class: ['toggle-icon', isExpanded.value ? 'expanded' : 'collapsed'],\n            onClick: toggleExpanded\n          }, isExpanded.value ? '▼' : '▶'),\n          h('span', { class: 'json-bracket' }, openBracket),\n          !isExpanded.value && h('span', { class: 'json-collapsed-preview' }, ` ${count} items `),\n          !isExpanded.value && h('span', { class: 'json-bracket' }, closeBracket)\n        ]),\n        \n        // 展开的内容\n        isExpanded.value && h('div', { class: 'json-children' }, [\n          ...entries.map(([key, value], index) => \n            h('div', { class: 'json-item', key }, [\n              h('span', { class: 'json-key' }, isArray ? '' : `\"${key}\": `),\n              getType(value) === 'object' || getType(value) === 'array'\n                ? h(JsonNode, { \n                    data: value, \n                    path: [...props.path, key],\n                    expanded: props.expanded\n                  })\n                : renderPrimitive(value),\n              index < entries.length - 1 && h('span', { class: 'json-comma' }, ',')\n            ])\n          ),\n          h('div', { class: 'json-line' }, [\n            h('span', { class: 'json-bracket' }, closeBracket)\n          ])\n        ])\n      ])\n    }\n\n    return () => {\n      const type = getType(props.data)\n      \n      if (type === 'object' || type === 'array') {\n        return renderObject()\n      }\n      \n      return renderPrimitive(props.data)\n    }\n  }\n})\n</script>\n\n<style scoped>\n.json-viewer {\n  font-family: 'Consolas', 'Monaco', 'Courier New', monospace;\n  font-size: 14px;\n  line-height: 1.6;\n}\n\n.json-content {\n  padding: 0;\n}\n\n.json-object {\n  margin-left: 0;\n}\n\n.json-line {\n  display: flex;\n  align-items: baseline;\n  gap: 4px;\n}\n\n.toggle-icon {\n  display: inline-block;\n  width: 1em;\n  cursor: pointer;\n  user-select: none;\n  color: #6b7280;\n  transition: transform 0.2s;\n  font-size: 12px;\n}\n\n.toggle-icon:hover {\n  color: #3b82f6;\n}\n\n.toggle-icon.expanded {\n  transform: rotate(0deg);\n}\n\n.toggle-icon.collapsed {\n  transform: rotate(-90deg);\n}\n\n.json-children {\n  margin-left: 24px;\n  border-left: 1px solid #e5e7eb;\n  padding-left: 12px;\n}\n\n.dark .json-children {\n  border-left-color: #4b5563;\n}\n\n.json-item {\n  display: flex;\n  align-items: baseline;\n  gap: 4px;\n  padding: 2px 0;\n}\n\n.json-key {\n  color: #7c3aed;\n  font-weight: 500;\n}\n\n.dark .json-key {\n  color: #a78bfa;\n}\n\n.json-value {\n  word-break: break-word;\n}\n\n.json-string {\n  color: #059669;\n}\n\n.dark .json-string {\n  color: #34d399;\n}\n\n.json-number {\n  color: #2563eb;\n}\n\n.dark .json-number {\n  color: #60a5fa;\n}\n\n.json-boolean {\n  color: #dc2626;\n  font-weight: 500;\n}\n\n.dark .json-boolean {\n  color: #f87171;\n}\n\n.json-null {\n  color: #6b7280;\n  font-style: italic;\n}\n\n.dark .json-null {\n  color: #9ca3af;\n}\n\n.json-bracket {\n  color: #6b7280;\n  font-weight: bold;\n}\n\n.dark .json-bracket {\n  color: #9ca3af;\n}\n\n.json-comma {\n  color: #6b7280;\n}\n\n.dark .json-comma {\n  color: #9ca3af;\n}\n\n.json-collapsed-preview {\n  color: #9ca3af;\n  font-style: italic;\n  font-size: 14px;\n}\n\n/* 移动端优化 */\n@media (max-width: 768px) {\n  .json-viewer {\n    font-size: 13px;\n  }\n  \n  .json-children {\n    margin-left: 16px;\n    padding-left: 8px;\n  }\n}\n</style>\n\n","<template>\n  <!-- 流式传输期间完全不显示，等文字加载完再出现 -->\n  <div v-if=\"!streaming\" class=\"dbgpt-plugin-view bg-white dark:bg-[#212121] rounded-lg overflow-hidden my-2 flex flex-col lg:max-w-[80%]\">\n    <!-- 状态栏 - 完全按照 DB-GPT 样式 -->\n    <div :class=\"['flex px-4 md:px-6 py-2 items-center text-white text-sm font-medium', statusBgClass]\">\n      <span class=\"flex-1\">{{ plugin.name || '插件执行' }}</span>\n      <!-- 状态图标 -->\n      <span v-if=\"plugin.status === 'todo'\" class=\"ml-2\">\n        <svg class=\"w-4 h-4\" fill=\"currentColor\" viewBox=\"0 0 20 20\">\n          <path fill-rule=\"evenodd\" d=\"M10 18a8 8 0 100-16 8 8 0 000 16zm1-12a1 1 0 10-2 0v4a1 1 0 00.293.707l2.828 2.829a1 1 0 101.415-1.415L11 9.586V6z\" clip-rule=\"evenodd\"/>\n        </svg>\n      </span>\n      <span v-else-if=\"plugin.status === 'runing'\" class=\"ml-2\">\n        <svg class=\"w-4 h-4 animate-spin\" fill=\"currentColor\" viewBox=\"0 0 20 20\">\n          <path fill-rule=\"evenodd\" d=\"M4 2a1 1 0 011 1v2.101a7.002 7.002 0 0111.601 2.566 1 1 0 11-1.885.666A5.002 5.002 0 005.999 7H9a1 1 0 010 2H4a1 1 0 01-1-1V3a1 1 0 011-1zm.008 9.057a1 1 0 011.276.61A5.002 5.002 0 0014.001 13H11a1 1 0 110-2h5a1 1 0 011 1v5a1 1 0 11-2 0v-2.101a7.002 7.002 0 01-11.601-2.566 1 1 0 01.61-1.276z\" clip-rule=\"evenodd\"/>\n        </svg>\n      </span>\n      <span v-else-if=\"plugin.status === 'failed'\" class=\"ml-2\">\n        <svg class=\"w-4 h-4\" fill=\"currentColor\" viewBox=\"0 0 20 20\">\n          <path fill-rule=\"evenodd\" d=\"M10 18a8 8 0 100-16 8 8 0 000 16zM8.707 7.293a1 1 0 00-1.414 1.414L8.586 10l-1.293 1.293a1 1 0 101.414 1.414L10 11.414l1.293 1.293a1 1 0 001.414-1.414L11.414 10l1.293-1.293a1 1 0 00-1.414-1.414L10 8.586 8.707 7.293z\" clip-rule=\"evenodd\"/>\n        </svg>\n      </span>\n      <span v-else-if=\"plugin.status === 'completed'\" class=\"ml-2\">\n        <svg class=\"w-4 h-4\" fill=\"currentColor\" viewBox=\"0 0 20 20\">\n          <path fill-rule=\"evenodd\" d=\"M10 18a8 8 0 100-16 8 8 0 000 16zm3.707-9.293a1 1 0 00-1.414-1.414L9 10.586 7.707 9.293a1 1 0 00-1.414 1.414l2 2a1 1 0 001.414 0l4-4z\" clip-rule=\"evenodd\"/>\n        </svg>\n      </span>\n    </div>\n\n    <!-- 内容区域 -->\n    <div v-if=\"plugin.result || plugin.err_msg\" class=\"px-4 md:px-6 py-4 text-sm\">\n      <!-- 成功结果 -->\n      <div v-if=\"plugin.result && plugin.status === 'completed'\">\n        <!-- HTML 内容 -->\n        <div \n          v-if=\"isHtmlContent\" \n          class=\"plugin-result-html\"\n          v-html=\"sanitizedResult\"\n        ></div>\n        \n        <!-- JSON 数据 -->\n        <div v-else-if=\"isJsonContent\" class=\"plugin-result-json\">\n          <div class=\"json-code-block\">\n            <div class=\"json-header\">\n              <div class=\"flex items-center space-x-2\">\n                <svg class=\"w-3.5 h-3.5 text-gray-400\" fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\n                  <path stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" d=\"M9 12h6m-6 4h6m2 5H7a2 2 0 01-2-2V5a2 2 0 012-2h5.586a1 1 0 01.707.293l5.414 5.414a1 1 0 01.293.707V19a2 2 0 01-2 2z\"/>\n                </svg>\n                <span class=\"text-xs font-medium text-gray-300\">JSON</span>\n              </div>\n              <button \n                @click=\"copyJson\"\n                :class=\"['copy-btn', { 'copy-btn-copied': jsonCopied }]\"\n              >\n                <svg v-if=\"!jsonCopied\" class=\"w-3.5 h-3.5\" fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\n                  <path stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" d=\"M8 16H6a2 2 0 01-2-2V6a2 2 0 012-2h8a2 2 0 012 2v2m-6 12h8a2 2 0 002-2v-8a2 2 0 00-2-2h-8a2 2 0 00-2 2v8a2 2 0 002 2z\"/>\n                </svg>\n                <svg v-else class=\"w-3.5 h-3.5\" fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\n                  <path stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" d=\"M5 13l4 4L19 7\"/>\n                </svg>\n                <span class=\"ml-1\">{{ jsonCopied ? '已复制' : '复制' }}</span>\n              </button>\n            </div>\n            <pre class=\"json-content\"><code class=\"hljs language-json\" v-html=\"highlightedJson\"></code></pre>\n          </div>\n        </div>\n        \n        <!-- 纯文本 -->\n        <div v-else class=\"plugin-result-text text-gray-700 dark:text-gray-300 whitespace-pre-wrap\">\n          {{ plugin.result }}\n        </div>\n      </div>\n\n      <!-- 错误信息 -->\n      <div v-else-if=\"plugin.err_msg\" class=\"text-red-700 dark:text-red-300\">\n        {{ plugin.err_msg }}\n      </div>\n\n      <!-- 运行中/待处理提示 -->\n      <div v-else-if=\"plugin.status === 'runing'\" class=\"flex items-center justify-center py-4 text-blue-600 dark:text-blue-400\">\n        <div class=\"flex items-center space-x-2\">\n          <div class=\"animate-spin w-4 h-4 border-2 border-blue-500 border-t-transparent rounded-full\"></div>\n          <span>执行中...</span>\n        </div>\n      </div>\n\n      <div v-else-if=\"plugin.status === 'todo'\" class=\"flex items-center justify-center py-4 text-gray-600 dark:text-gray-400\">\n        <div class=\"flex items-center space-x-2\">\n          <svg class=\"w-4 h-4\" fill=\"currentColor\" viewBox=\"0 0 20 20\">\n            <path fill-rule=\"evenodd\" d=\"M10 18a8 8 0 100-16 8 8 0 000 16zm1-12a1 1 0 10-2 0v4a1 1 0 00.293.707l2.828 2.829a1 1 0 101.415-1.415L11 9.586V6z\" clip-rule=\"evenodd\"/>\n          </svg>\n          <span>待执行</span>\n        </div>\n      </div>\n    </div>\n  </div>\n</template>\n\n<script setup lang=\"ts\">\nimport { ref, computed } from 'vue'\nimport DOMPurify from 'dompurify'\nimport hljs from 'highlight.js/lib/core'\n// 主题CSS已在main.ts全局导入，避免重复导入\n\n// 注册常用语言\nimport javascript from 'highlight.js/lib/languages/javascript'\nimport typescript from 'highlight.js/lib/languages/typescript'\nimport python from 'highlight.js/lib/languages/python'\nimport json from 'highlight.js/lib/languages/json'\nimport sql from 'highlight.js/lib/languages/sql'\nimport xml from 'highlight.js/lib/languages/xml'\nimport css from 'highlight.js/lib/languages/css'\nimport java from 'highlight.js/lib/languages/java'\nimport cpp from 'highlight.js/lib/languages/cpp'\nimport bash from 'highlight.js/lib/languages/bash'\nimport shell from 'highlight.js/lib/languages/shell'\nimport yaml from 'highlight.js/lib/languages/yaml'\nimport markdown from 'highlight.js/lib/languages/markdown'\n\nhljs.registerLanguage('javascript', javascript)\nhljs.registerLanguage('typescript', typescript)\nhljs.registerLanguage('python', python)\nhljs.registerLanguage('json', json)\nhljs.registerLanguage('sql', sql)\nhljs.registerLanguage('xml', xml)\nhljs.registerLanguage('html', xml)\nhljs.registerLanguage('css', css)\nhljs.registerLanguage('java', java)\nhljs.registerLanguage('cpp', cpp)\nhljs.registerLanguage('c++', cpp)\nhljs.registerLanguage('bash', bash)\nhljs.registerLanguage('shell', shell)\nhljs.registerLanguage('sh', shell)\nhljs.registerLanguage('yaml', yaml)\nhljs.registerLanguage('yml', yaml)\nhljs.registerLanguage('markdown', markdown)\nhljs.registerLanguage('md', markdown)\n\ninterface DBGPTView {\n  name: string\n  status: 'todo' | 'runing' | 'failed' | 'completed' | string\n  result?: string\n  err_msg?: string\n}\n\ninterface Props {\n  plugin: DBGPTView\n  streaming?: boolean  // 消息是否还在流式传输中（保持接口一致）\n}\n\nconst props = defineProps<Props>()\n\n/* 状态管理 */\nconst jsonCopied = ref(false)\n\n// 状态背景色 - 完全复刻 DB-GPT\nconst statusBgClass = computed(() => {\n  const statusMap: Record<string, string> = {\n    'todo': 'bg-gray-500',\n    'runing': 'bg-blue-500',\n    'failed': 'bg-red-500',\n    'completed': 'bg-green-500'\n  }\n  return statusMap[props.plugin.status] || 'bg-gray-500'\n})\n\n// 判断是否是 HTML 内容\nconst isHtmlContent = computed(() => {\n  const result = props.plugin.result || ''\n  return result.includes('<') && result.includes('>')\n})\n\n// 判断是否是 JSON 内容\nconst isJsonContent = computed(() => {\n  const result = props.plugin.result || ''\n  if (isHtmlContent.value) return false\n  try {\n    JSON.parse(result)\n    return true\n  } catch {\n    return false\n  }\n})\n\n// 清理后的 HTML 结果 - 允许更多标签和样式\nconst sanitizedResult = computed(() => {\n  if (!isHtmlContent.value) return ''\n  return DOMPurify.sanitize(props.plugin.result || '', {\n    ADD_TAGS: ['style'],\n    ADD_ATTR: ['style', 'class', 'id'],\n    ALLOWED_TAGS: [\n      'div', 'span', 'p', 'br', 'strong', 'em', 'b', 'i', 'u',\n      'h1', 'h2', 'h3', 'h4', 'h5', 'h6',\n      'ul', 'ol', 'li',\n      'a', 'img',\n      'table', 'thead', 'tbody', 'tr', 'th', 'td',\n      'code', 'pre',\n      'blockquote',\n      'hr',\n      'style'\n    ],\n    ALLOWED_ATTR: [\n      'href', 'src', 'alt', 'title', 'target',\n      'class', 'id', 'style',\n      'width', 'height',\n      'colspan', 'rowspan'\n    ]\n  })\n})\n\n/* \n * 功能描述: 格式化的 JSON（用于复制）\n */\nconst formattedJson = computed(() => {\n  if (!isJsonContent.value) return ''\n  try {\n    const parsed = JSON.parse(props.plugin.result || '{}')\n    return JSON.stringify(parsed, null, 2)\n  } catch {\n    return props.plugin.result\n  }\n})\n\n/* \n * 功能描述: JSON 语法高亮（用于显示）\n * 返回: {string} - 高亮后的HTML字符串\n */\nconst highlightedJson = computed(() => {\n  if (!isJsonContent.value) return ''\n  \n  try {\n    // 使用 highlight.js 进行 JSON 语法高亮\n    const formatted = formattedJson.value || ''\n    return hljs.highlight(formatted, { language: 'json' }).value\n  } catch (e) {\n    console.error('JSON高亮失败:', e)\n    // 降级方案：返回纯文本\n    return formattedJson.value || ''\n  }\n})\n\n/* \n * 功能描述: 复制 JSON 到剪贴板\n */\nconst copyJson = async () => {\n  try {\n    await navigator.clipboard.writeText(formattedJson.value || '')\n    jsonCopied.value = true\n    setTimeout(() => {\n      jsonCopied.value = false\n    }, 2000)\n  } catch (err) {\n    console.error('Failed to copy JSON:', err)\n  }\n}\n</script>\n\n<style scoped>\n.dbgpt-plugin-view {\n  animation: fadeIn 0.3s ease-out;\n}\n\n@keyframes fadeIn {\n  from {\n    opacity: 0;\n    transform: translateY(5px);\n  }\n  to {\n    opacity: 1;\n    transform: translateY(0);\n  }\n}\n\n/* HTML 结果样式 - 允许内联样式生效 */\n.plugin-result-html :deep(*) {\n  /* 保留原有样式 */\n}\n\n.plugin-result-html :deep(a) {\n  color: #3b82f6;\n  text-decoration: none;\n}\n\n.plugin-result-html :deep(a:hover) {\n  text-decoration: underline;\n}\n\n.plugin-result-html :deep(table) {\n  width: 100%;\n  border-collapse: collapse;\n  margin: 8px 0;\n}\n\n.plugin-result-html :deep(th),\n.plugin-result-html :deep(td) {\n  padding: 8px;\n  text-align: left;\n  border: 1px solid #e5e7eb;\n}\n\n.dark .plugin-result-html :deep(th),\n.dark .plugin-result-html :deep(td) {\n  border-color: #374151;\n}\n\n.plugin-result-html :deep(code) {\n  background: #f3f4f6;\n  padding: 3px 6px;\n  border-radius: 3px;\n  font-size: 13px;\n}\n\n.dark .plugin-result-html :deep(code) {\n  background: #374151;\n}\n\n/* JSON 代码块样式 */\n.json-code-block {\n  background-color: #2d3748 !important;\n  border-radius: 8px;\n  overflow: hidden;\n  box-shadow: 0 4px 6px -1px rgba(0, 0, 0, 0.1), 0 2px 4px -1px rgba(0, 0, 0, 0.06);\n}\n\n.json-header {\n  display: flex;\n  align-items: center;\n  justify-content: space-between;\n  padding: 8px 14px;\n  background-color: #1a202c !important;\n  border-bottom: 1px solid #374151;\n}\n\n.copy-btn {\n  display: inline-flex;\n  align-items: center;\n  padding: 4px 8px;\n  font-size: 12px;\n  font-weight: 500;\n  color: #e5e7eb;\n  background-color: #3b82f6;\n  border: none;\n  border-radius: 4px;\n  cursor: pointer;\n  transition: all 0.2s ease;\n}\n\n.copy-btn:hover {\n  background-color: #2563eb;\n  transform: translateY(-1px);\n}\n\n.copy-btn:active {\n  transform: translateY(0);\n}\n\n/* 已复制状态 - 绿色 */\n.copy-btn-copied {\n  background-color: #10b981 !important;\n}\n\n.copy-btn-copied:hover {\n  background-color: #059669 !important;\n}\n\n.json-content {\n  background-color: #2d3748 !important;\n  padding: 16px;\n  margin: 0;\n  overflow-x: auto;\n  max-height: 500px;\n  overflow-y: auto;\n}\n\n.json-content code {\n  display: block;\n  font-family: 'Consolas', 'Monaco', 'Courier New', monospace;\n  font-size: 14px;\n  line-height: 1.6;\n  background-color: transparent !important;\n  /* 不设置color，让hljs的语法高亮自然生效 */\n  white-space: pre;\n}\n\n/* highlight.js 样式支持 */\n.json-content code.hljs {\n  background: transparent !important;\n  padding: 0;\n}\n\n/* 暗色模式 */\n.dark .json-code-block {\n  background-color: #1e293b !important;\n}\n\n.dark .json-header {\n  background-color: #0f172a !important;\n  border-bottom-color: #1e293b;\n}\n\n.dark .json-content {\n  background-color: #1e293b !important;\n}\n\n/* 暗色模式下也不强制设置颜色，让hljs主题生效 */\n</style>\n\n","/*\r\n * 功能描述: SVG实时预览组件\r\n * 使用场景: 安全地预览AI生成的SVG图形\r\n */\r\n<template>\r\n  <div class=\"svg-preview bg-gray-50 dark:bg-gray-800 rounded-lg border border-gray-200 dark:border-gray-700 overflow-hidden\">\r\n    <!-- 头部 -->\r\n    <div class=\"flex items-center justify-between px-4 py-2 bg-gray-100 dark:bg-gray-700 border-b border-gray-200 dark:border-gray-600\">\r\n      <div class=\"flex items-center space-x-2\">\r\n        <svg class=\"w-4 h-4 text-purple-600 dark:text-purple-400\" fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\r\n          <path stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" d=\"M4 16l4.586-4.586a2 2 0 012.828 0L16 16m-2-2l1.586-1.586a2 2 0 012.828 0L20 14m-6-6h.01M6 20h12a2 2 0 002-2V6a2 2 0 00-2-2H6a2 2 0 00-2 2v12a2 2 0 002 2z\"/>\r\n        </svg>\r\n        <span class=\"text-sm font-medium text-gray-700 dark:text-gray-300\">SVG预览</span>\r\n      </div>\r\n      <div class=\"flex items-center space-x-2\">\r\n        <button\r\n          @click=\"copySvg\"\r\n          class=\"text-xs px-3 py-1 bg-blue-500 hover:bg-blue-600 text-white rounded transition-colors\"\r\n        >\r\n          {{ copied ? '已复制' : '复制代码' }}\r\n        </button>\r\n        <button\r\n          @click=\"toggleView\"\r\n          class=\"text-xs px-3 py-1 bg-gray-600 hover:bg-gray-700 text-white rounded transition-colors\"\r\n        >\r\n          {{ showCode ? '查看预览' : '查看代码' }}\r\n        </button>\r\n      </div>\r\n    </div>\r\n\r\n    <!-- 预览内容 -->\r\n    <div v-if=\"!showCode\" class=\"preview-area p-8 bg-white dark:bg-gray-900 flex items-center justify-center\">\r\n      <div \r\n        v-html=\"sanitizedSvg\" \r\n        class=\"svg-container\"\r\n      ></div>\r\n    </div>\r\n\r\n    <!-- 代码内容 -->\r\n    <div v-else class=\"code-area\">\r\n      <pre class=\"p-4 overflow-x-auto bg-gray-900 text-gray-200 text-sm\"><code>{{ svgContent }}</code></pre>\r\n    </div>\r\n  </div>\r\n</template>\r\n\r\n<script setup lang=\"ts\">\r\nimport { ref, computed } from 'vue'\r\nimport DOMPurify from 'dompurify'\r\n\r\ninterface Props {\r\n  svg: string\r\n}\r\n\r\nconst props = defineProps<Props>()\r\n\r\nconst showCode = ref(false)\r\nconst copied = ref(false)\r\n\r\n// 清理SVG内容\r\nconst sanitizedSvg = computed(() => {\r\n  return DOMPurify.sanitize(props.svg, {\r\n    USE_PROFILES: { svg: true, svgFilters: true },\r\n    ADD_TAGS: ['svg', 'path', 'circle', 'rect', 'line', 'polygon', 'polyline', 'ellipse', 'text', 'g', 'defs', 'linearGradient', 'stop'],\r\n    ADD_ATTR: ['viewBox', 'xmlns', 'fill', 'stroke', 'stroke-width', 'transform', 'x', 'y', 'width', 'height', 'cx', 'cy', 'r', 'rx', 'ry', 'd'],\r\n    FORBID_TAGS: ['script'],\r\n    FORBID_ATTR: ['onerror', 'onload', 'onclick']\r\n  })\r\n})\r\n\r\n// SVG内容（用于显示代码）\r\nconst svgContent = computed(() => props.svg)\r\n\r\n// 切换视图\r\nconst toggleView = () => {\r\n  showCode.value = !showCode.value\r\n}\r\n\r\n// 复制SVG\r\nconst copySvg = async () => {\r\n  try {\r\n    await navigator.clipboard.writeText(props.svg)\r\n    copied.value = true\r\n    setTimeout(() => {\r\n      copied.value = false\r\n    }, 2000)\r\n  } catch (err) {\r\n    console.error('Failed to copy SVG:', err)\r\n  }\r\n}\r\n</script>\r\n\r\n<style scoped>\r\n.svg-preview {\r\n  animation: fadeIn 0.3s ease-out;\r\n}\r\n\r\n@keyframes fadeIn {\r\n  from {\r\n    opacity: 0;\r\n    transform: translateY(10px);\r\n  }\r\n  to {\r\n    opacity: 1;\r\n    transform: translateY(0);\r\n  }\r\n}\r\n\r\n/* SVG容器 */\r\n.svg-container {\r\n  display: inline-block;\r\n  max-width: 100%;\r\n  /* 防止SVG溢出 */\r\n  overflow: hidden;\r\n  width: 100%;\r\n}\r\n\r\n.svg-container :deep(svg) {\r\n  max-width: 100%;\r\n  height: auto;\r\n  /* 确保SVG响应式 */\r\n  display: block;\r\n  margin: 0 auto;\r\n}\r\n\r\n/* 防止SVG内部元素溢出 */\r\n.svg-container :deep(*) {\r\n  max-width: 100%;\r\n}\r\n\r\n/* 代码区域滚动条 */\r\n.code-area pre::-webkit-scrollbar {\r\n  height: 8px;\r\n}\r\n\r\n.code-area pre::-webkit-scrollbar-track {\r\n  background: #1e293b;\r\n}\r\n\r\n.code-area pre::-webkit-scrollbar-thumb {\r\n  background: #475569;\r\n  border-radius: 4px;\r\n}\r\n\r\n.code-area pre::-webkit-scrollbar-thumb:hover {\r\n  background: #64748b;\r\n}\r\n</style>\r\n\r\n","/*\r\n * 功能描述: Vis-Code 代码执行结果展示组件\r\n * 使用场景: 展示代码及其执行结果，支持成功和失败状态\r\n */\r\n<template>\r\n  <div class=\"vis-code bg-white dark:bg-gray-800 rounded-lg shadow-md border border-gray-200 dark:border-gray-700 overflow-hidden\">\r\n    <!-- 代码部分 -->\r\n    <div class=\"code-section\">\r\n      <div class=\"flex items-center justify-between px-4 py-2 bg-gray-800 border-b border-gray-700\">\r\n        <div class=\"flex items-center space-x-2\">\r\n          <svg class=\"w-4 h-4 text-green-400\" fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\r\n            <path stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" d=\"M10 20l4-16m4 4l4 4-4 4M6 16l-4-4 4-4\"/>\r\n          </svg>\r\n          <span class=\"text-sm font-medium text-gray-300 uppercase\">{{ codeLanguage }}</span>\r\n        </div>\r\n        <button\r\n          @click=\"copyCode\"\r\n          class=\"text-xs px-3 py-1 bg-blue-500 hover:bg-blue-600 text-white rounded transition-colors\"\r\n        >\r\n          {{ copied ? '已复制' : '复制代码' }}\r\n        </button>\r\n      </div>\r\n      <div class=\"p-4 bg-gray-900\">\r\n        <pre class=\"text-sm text-gray-200 overflow-x-auto\"><code>{{ codeContent }}</code></pre>\r\n      </div>\r\n    </div>\r\n\r\n    <!-- 执行结果部分 -->\r\n    <div \r\n      v-if=\"codeResult || errorMessage\"\r\n      class=\"result-section border-t-4\"\r\n      :class=\"hasError ? 'border-red-500' : 'border-green-500'\"\r\n    >\r\n      <!-- 结果头部 -->\r\n      <div \r\n        class=\"flex items-center space-x-2 px-4 py-2 border-b\"\r\n        :class=\"hasError ? 'bg-red-50 dark:bg-red-900/20 border-red-200 dark:border-red-800' : 'bg-green-50 dark:bg-green-900/20 border-green-200 dark:border-green-800'\"\r\n      >\r\n        <svg \r\n          v-if=\"hasError\"\r\n          class=\"w-5 h-5 text-red-600 dark:text-red-400\"\r\n          fill=\"currentColor\"\r\n          viewBox=\"0 0 20 20\"\r\n        >\r\n          <path fill-rule=\"evenodd\" d=\"M10 18a8 8 0 100-16 8 8 0 000 16zM8.707 7.293a1 1 0 00-1.414 1.414L8.586 10l-1.293 1.293a1 1 0 101.414 1.414L10 11.414l1.293 1.293a1 1 0 001.414-1.414L11.414 10l1.293-1.293a1 1 0 00-1.414-1.414L10 8.586 8.707 7.293z\" clip-rule=\"evenodd\"/>\r\n        </svg>\r\n        <svg \r\n          v-else\r\n          class=\"w-5 h-5 text-green-600 dark:text-green-400\"\r\n          fill=\"currentColor\"\r\n          viewBox=\"0 0 20 20\"\r\n        >\r\n          <path fill-rule=\"evenodd\" d=\"M10 18a8 8 0 100-16 8 8 0 000 16zm3.707-9.293a1 1 0 00-1.414-1.414L9 10.586 7.707 9.293a1 1 0 00-1.414 1.414l2 2a1 1 0 001.414 0l4-4z\" clip-rule=\"evenodd\"/>\r\n        </svg>\r\n        <span \r\n          class=\"text-sm font-medium\"\r\n          :class=\"hasError ? 'text-red-800 dark:text-red-300' : 'text-green-800 dark:text-green-300'\"\r\n        >\r\n          {{ hasError ? '执行失败' : '执行成功' }}\r\n        </span>\r\n      </div>\r\n\r\n      <!-- 结果内容 -->\r\n      <div class=\"p-4\">\r\n        <!-- 错误信息 -->\r\n        <div v-if=\"hasError\" class=\"error-message\">\r\n          <div class=\"text-xs font-medium text-red-700 dark:text-red-300 mb-2\">错误详情:</div>\r\n          <pre class=\"bg-red-100 dark:bg-red-900/30 text-red-800 dark:text-red-200 p-3 rounded text-sm overflow-x-auto\">{{ errorMessage }}</pre>\r\n        </div>\r\n\r\n        <!-- 成功结果 -->\r\n        <div v-else class=\"success-result\">\r\n          <div class=\"text-xs font-medium text-green-700 dark:text-green-300 mb-2\">输出结果:</div>\r\n          <pre class=\"bg-green-100 dark:bg-green-900/30 text-green-800 dark:text-green-200 p-3 rounded text-sm overflow-x-auto whitespace-pre-wrap\">{{ codeResult }}</pre>\r\n        </div>\r\n      </div>\r\n    </div>\r\n  </div>\r\n</template>\r\n\r\n<script setup lang=\"ts\">\r\nimport { ref, computed } from 'vue'\r\n\r\ninterface CodeData {\r\n  code_type?: string\r\n  code: string\r\n  code_result?: string\r\n  err_msg?: string | null\r\n}\r\n\r\ninterface Props {\r\n  codeData: CodeData | string\r\n}\r\n\r\nconst props = defineProps<Props>()\r\n\r\nconst copied = ref(false)\r\n\r\n// 解析代码数据\r\nconst parsedData = computed<CodeData>(() => {\r\n  if (!props.codeData) return { code: '' }\r\n  \r\n  try {\r\n    if (typeof props.codeData === 'string') {\r\n      return JSON.parse(props.codeData)\r\n    }\r\n    return props.codeData\r\n  } catch (e) {\r\n    console.error('Parse code data error:', e)\r\n    return { code: String(props.codeData) }\r\n  }\r\n})\r\n\r\n// 代码语言\r\nconst codeLanguage = computed(() => {\r\n  return parsedData.value.code_type || 'Code'\r\n})\r\n\r\n// 代码内容\r\nconst codeContent = computed(() => {\r\n  return parsedData.value.code || ''\r\n})\r\n\r\n// 执行结果\r\nconst codeResult = computed(() => {\r\n  return parsedData.value.code_result || ''\r\n})\r\n\r\n// 错误信息\r\nconst errorMessage = computed(() => {\r\n  return parsedData.value.err_msg || ''\r\n})\r\n\r\n// 是否有错误\r\nconst hasError = computed(() => {\r\n  return !!errorMessage.value\r\n})\r\n\r\n// 复制代码\r\nconst copyCode = async () => {\r\n  try {\r\n    await navigator.clipboard.writeText(codeContent.value)\r\n    copied.value = true\r\n    setTimeout(() => {\r\n      copied.value = false\r\n    }, 2000)\r\n  } catch (err) {\r\n    console.error('Failed to copy code:', err)\r\n  }\r\n}\r\n</script>\r\n\r\n<style scoped>\r\n.vis-code {\r\n  animation: fadeIn 0.3s ease-out;\r\n}\r\n\r\n@keyframes fadeIn {\r\n  from {\r\n    opacity: 0;\r\n    transform: translateY(10px);\r\n  }\r\n  to {\r\n    opacity: 1;\r\n    transform: translateY(0);\r\n  }\r\n}\r\n\r\n/* 代码块滚动条 */\r\npre::-webkit-scrollbar {\r\n  height: 6px;\r\n  width: 6px;\r\n}\r\n\r\npre::-webkit-scrollbar-track {\r\n  background: transparent;\r\n}\r\n\r\npre::-webkit-scrollbar-thumb {\r\n  background: #475569;\r\n  border-radius: 3px;\r\n}\r\n\r\npre::-webkit-scrollbar-thumb:hover {\r\n  background: #64748b;\r\n}\r\n\r\n/* 成功状态动画 */\r\n.success-result {\r\n  animation: slideIn 0.3s ease-out;\r\n}\r\n\r\n/* 错误状态动画 */\r\n.error-message {\r\n  animation: shake 0.5s;\r\n}\r\n\r\n@keyframes slideIn {\r\n  from {\r\n    opacity: 0;\r\n    transform: translateY(5px);\r\n  }\r\n  to {\r\n    opacity: 1;\r\n    transform: translateY(0);\r\n  }\r\n}\r\n\r\n@keyframes shake {\r\n  0%, 100% {\r\n    transform: translateX(0);\r\n  }\r\n  10%, 30%, 50%, 70%, 90% {\r\n    transform: translateX(-2px);\r\n  }\r\n  20%, 40%, 60%, 80% {\r\n    transform: translateX(2px);\r\n  }\r\n}\r\n</style>\r\n\r\n","/*\r\n * 功能描述: Vis-Dashboard 仪表盘多图布局组件\r\n * 使用场景: 在单个视图中展示多个图表的网格布局\r\n */\r\n<template>\r\n  <div class=\"vis-dashboard bg-white dark:bg-gray-800 rounded-lg shadow-md border border-gray-200 dark:border-gray-700 p-4 md:p-6\">\r\n    <!-- 标题 -->\r\n    <div v-if=\"dashboardTitle\" class=\"mb-6\">\r\n      <h3 class=\"text-xl font-bold text-gray-800 dark:text-gray-100\">{{ dashboardTitle }}</h3>\r\n      <p v-if=\"chartList.length\" class=\"text-sm text-gray-600 dark:text-gray-400 mt-1\">\r\n        共 {{ chartList.length }} 个图表\r\n      </p>\r\n    </div>\r\n\r\n    <!-- 网格布局 -->\r\n    <div class=\"dashboard-grid\">\r\n      <div \r\n        v-for=\"(chart, index) in chartList\" \r\n        :key=\"index\"\r\n        class=\"chart-card bg-gray-50 dark:bg-gray-900 rounded-lg border border-gray-200 dark:border-gray-700 p-4 transition-shadow hover:shadow-lg\"\r\n      >\r\n        <!-- 图表标题 -->\r\n        <h4 v-if=\"chart.title\" class=\"text-base font-semibold text-gray-800 dark:text-gray-200 mb-4\">\r\n          {{ chart.title }}\r\n        </h4>\r\n\r\n        <!-- 图表内容 -->\r\n        <div v-if=\"chart.type === 'table'\" class=\"chart-content\">\r\n          <ResponsiveTable \r\n            :headers=\"chart.headers || []\"\r\n            :data=\"chart.data || []\"\r\n            :maxHeight=\"300\"\r\n          />\r\n        </div>\r\n        \r\n        <div v-else class=\"chart-content\">\r\n          <div \r\n            :ref=\"el => setChartRef(el, index)\" \r\n            class=\"chart-container\"\r\n            :style=\"{ height: chartHeight + 'px' }\"\r\n          ></div>\r\n        </div>\r\n      </div>\r\n\r\n      <!-- 空状态 -->\r\n      <div v-if=\"chartList.length === 0\" class=\"col-span-full text-center py-12\">\r\n        <svg class=\"w-16 h-16 mx-auto mb-4 text-gray-300 dark:text-gray-600\" fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\r\n          <path stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" d=\"M9 19v-6a2 2 0 00-2-2H5a2 2 0 00-2 2v6a2 2 0 002 2h2a2 2 0 002-2zm0 0V9a2 2 0 012-2h2a2 2 0 012 2v10m-6 0a2 2 0 002 2h2a2 2 0 002-2m0 0V5a2 2 0 012-2h2a2 2 0 012 2v14a2 2 0 01-2 2h-2a2 2 0 01-2-2z\"/>\r\n        </svg>\r\n        <p class=\"text-gray-500 dark:text-gray-400\">暂无图表数据</p>\r\n      </div>\r\n    </div>\r\n  </div>\r\n</template>\r\n\r\n<script setup lang=\"ts\">\r\nimport { ref, computed, onMounted, onBeforeUnmount, nextTick } from 'vue'\r\nimport ResponsiveTable from '../ResponsiveTable.vue'\r\nimport { useBarChart } from '../chart/useBarChart'\r\nimport { useLineChart } from '../chart/useLineChart'\r\nimport { usePieChart } from '../chart/usePieChart'\r\n\r\ninterface ChartItem {\r\n  type: 'bar' | 'line' | 'pie' | 'table'\r\n  title?: string\r\n  data: any[]\r\n  headers?: string[]\r\n}\r\n\r\ninterface DashboardData {\r\n  title?: string\r\n  chart_count?: number\r\n  chart_list: ChartItem[]\r\n}\r\n\r\ninterface Props {\r\n  dashboard: DashboardData | string\r\n}\r\n\r\nconst props = defineProps<Props>()\r\n\r\nconst chartRefs = ref<Map<number, HTMLElement>>(new Map())\r\nconst isDarkMode = ref(false)\r\n\r\n// 存储图表渲染和销毁函数\r\nconst chartControls = ref<Map<number, { render: () => void; destroy: () => void }>>(new Map())\r\n\r\n// 设置图表ref\r\nconst setChartRef = (el: any, index: number) => {\r\n  if (el) {\r\n    chartRefs.value.set(index, el as HTMLElement)\r\n  }\r\n}\r\n\r\n// 检测暗色模式\r\nconst checkDarkMode = () => {\r\n  isDarkMode.value = document.documentElement.classList.contains('dark')\r\n}\r\n\r\n/* 数据处理模块 */\r\n// 解析仪表盘数据\r\nconst dashboardData = computed<DashboardData>(() => {\r\n  if (!props.dashboard) return { chart_list: [] }\r\n  \r\n  try {\r\n    if (typeof props.dashboard === 'string') {\r\n      return JSON.parse(props.dashboard)\r\n    }\r\n    return props.dashboard\r\n  } catch (e) {\r\n    console.error('Parse dashboard error:', e)\r\n    return { chart_list: [] }\r\n  }\r\n})\r\n\r\n// 仪表盘标题\r\nconst dashboardTitle = computed(() => dashboardData.value.title)\r\n\r\n// 图表列表\r\nconst chartList = computed(() => dashboardData.value.chart_list || [])\r\n\r\n// 图表高度\r\nconst chartHeight = computed(() => 280)\r\n/* 数据处理模块end */\r\n\r\n/* \r\n * 功能描述: 渲染单个图表\r\n * 参数: \r\n *   - index: number - 图表索引\r\n *   - chartData: ChartItem - 图表数据\r\n */\r\nconst renderChart = (index: number, chartData: ChartItem) => {\r\n  const container = chartRefs.value.get(index)\r\n  if (!container || chartData.type === 'table') return\r\n\r\n  // 先销毁旧图表\r\n  const oldControl = chartControls.value.get(index)\r\n  if (oldControl) {\r\n    oldControl.destroy()\r\n  }\r\n\r\n  // 格式化数据\r\n  const formattedData = chartData.data.map(item => {\r\n    if (typeof item === 'object' && !Array.isArray(item)) {\r\n      const keys = Object.keys(item)\r\n      return {\r\n        label: String(item[keys[0]] || ''),\r\n        value: Number(item[keys[1]] || 0),\r\n        type: chartData.title || '数值'  // 添加 type 字段用于 tooltip 显示\r\n      }\r\n    }\r\n    return item\r\n  })\r\n\r\n  const containerRef = ref(container)\r\n\r\n  // 根据类型创建图表\r\n  switch (chartData.type) {\r\n    case 'bar': {\r\n      const { renderChart, destroyChart } = useBarChart(containerRef, {\r\n        data: formattedData,\r\n        height: chartHeight.value,\r\n        isDarkMode: isDarkMode.value,\r\n        isMultiSeries: false\r\n      })\r\n      \r\n      chartControls.value.set(index, {\r\n        render: renderChart,\r\n        destroy: destroyChart\r\n      })\r\n      \r\n      renderChart()\r\n      break\r\n    }\r\n    \r\n    case 'line': {\r\n      const { renderChart, destroyChart } = useLineChart(containerRef, {\r\n        data: formattedData,\r\n        height: chartHeight.value,\r\n        isDarkMode: isDarkMode.value,\r\n        isMultiSeries: false,\r\n        showPoints: true\r\n      })\r\n      \r\n      chartControls.value.set(index, {\r\n        render: renderChart,\r\n        destroy: destroyChart\r\n      })\r\n      \r\n      renderChart()\r\n      break\r\n    }\r\n    \r\n    case 'pie': {\r\n      const { renderChart, destroyChart } = usePieChart(containerRef, {\r\n        data: formattedData,\r\n        height: chartHeight.value,\r\n        isDarkMode: isDarkMode.value,\r\n        showStatistic: false\r\n      })\r\n      \r\n      chartControls.value.set(index, {\r\n        render: renderChart,\r\n        destroy: destroyChart\r\n      })\r\n      \r\n      renderChart()\r\n      break\r\n    }\r\n  }\r\n}\r\n\r\n// 渲染所有图表\r\nconst renderAllCharts = async () => {\r\n  await nextTick()\r\n  chartList.value.forEach((chart, index) => {\r\n    if (chart.type !== 'table') {\r\n      renderChart(index, chart)\r\n    }\r\n  })\r\n}\r\n\r\n/* 响应式监听模块 */\r\n// 监听暗色模式\r\nconst observer = new MutationObserver(() => {\r\n  const newDarkMode = document.documentElement.classList.contains('dark')\r\n  if (newDarkMode !== isDarkMode.value) {\r\n    isDarkMode.value = newDarkMode\r\n    // 更新所有图表的暗色模式\r\n    chartControls.value.forEach((control) => {\r\n      control.render()\r\n    })\r\n  }\r\n})\r\n/* 响应式监听模块end */\r\n\r\n/* 生命周期模块 */\r\nonMounted(() => {\r\n  checkDarkMode()\r\n  \r\n  observer.observe(document.documentElement, {\r\n    attributes: true,\r\n    attributeFilter: ['class']\r\n  })\r\n  \r\n  // 渲染图表\r\n  renderAllCharts()\r\n})\r\n\r\nonBeforeUnmount(() => {\r\n  observer.disconnect()\r\n  \r\n  // 销毁所有图表\r\n  chartControls.value.forEach(control => control.destroy())\r\n  chartControls.value.clear()\r\n})\r\n/* 生命周期模块end */\r\n</script>\r\n\r\n<style scoped>\r\n.vis-dashboard {\r\n  animation: fadeIn 0.4s ease-out;\r\n}\r\n\r\n@keyframes fadeIn {\r\n  from {\r\n    opacity: 0;\r\n    transform: translateY(15px);\r\n  }\r\n  to {\r\n    opacity: 1;\r\n    transform: translateY(0);\r\n  }\r\n}\r\n\r\n/* 响应式网格布局 */\r\n.dashboard-grid {\r\n  display: grid;\r\n  gap: 24px;\r\n  grid-template-columns: 1fr;\r\n}\r\n\r\n/* 平板及以上：2列 */\r\n@media (min-width: 768px) {\r\n  .dashboard-grid {\r\n    grid-template-columns: repeat(2, 1fr);\r\n  }\r\n}\r\n\r\n/* 大屏幕：3列（如果图表数量多） */\r\n@media (min-width: 1280px) {\r\n  .dashboard-grid {\r\n    grid-template-columns: repeat(auto-fit, minmax(350px, 1fr));\r\n  }\r\n}\r\n\r\n.chart-card {\r\n  min-height: 200px;\r\n  animation: slideIn 0.4s ease-out;\r\n  animation-fill-mode: both;\r\n}\r\n\r\n.chart-card:nth-child(1) { animation-delay: 0.1s; }\r\n.chart-card:nth-child(2) { animation-delay: 0.15s; }\r\n.chart-card:nth-child(3) { animation-delay: 0.2s; }\r\n.chart-card:nth-child(4) { animation-delay: 0.25s; }\r\n\r\n@keyframes slideIn {\r\n  from {\r\n    opacity: 0;\r\n    transform: scale(0.95);\r\n  }\r\n  to {\r\n    opacity: 1;\r\n    transform: scale(1);\r\n  }\r\n}\r\n\r\n.chart-container {\r\n  width: 100%;\r\n}\r\n</style>\r\n","<template>\r\n  <div class=\"vis-response flex flex-col gap-4\">\r\n    <!-- 状态提示框 -->\r\n    <div \r\n      :class=\"[\r\n        'alert-box rounded-lg p-4 border',\r\n        alertClass\r\n      ]\"\r\n    >\r\n      <div class=\"flex items-center gap-3\">\r\n        <!-- 图标 -->\r\n        <div class=\"flex-shrink-0\">\r\n          <svg v-if=\"alertType === 'success'\" class=\"w-5 h-5 text-green-500\" fill=\"currentColor\" viewBox=\"0 0 20 20\">\r\n            <path fill-rule=\"evenodd\" d=\"M10 18a8 8 0 100-16 8 8 0 000 16zm3.707-9.293a1 1 0 00-1.414-1.414L9 10.586 7.707 9.293a1 1 0 00-1.414 1.414l2 2a1 1 0 001.414 0l4-4z\" clip-rule=\"evenodd\"/>\r\n          </svg>\r\n          <svg v-else-if=\"alertType === 'error'\" class=\"w-5 h-5 text-red-500\" fill=\"currentColor\" viewBox=\"0 0 20 20\">\r\n            <path fill-rule=\"evenodd\" d=\"M10 18a8 8 0 100-16 8 8 0 000 16zM8.707 7.293a1 1 0 00-1.414 1.414L8.586 10l-1.293 1.293a1 1 0 101.414 1.414L10 11.414l1.293 1.293a1 1 0 001.414-1.414L11.414 10l1.293-1.293a1 1 0 00-1.414-1.414L10 8.586 8.707 7.293z\" clip-rule=\"evenodd\"/>\r\n          </svg>\r\n          <svg v-else-if=\"alertType === 'warning'\" class=\"w-5 h-5 text-yellow-500 animate-spin\" fill=\"none\" viewBox=\"0 0 24 24\">\r\n            <circle class=\"opacity-25\" cx=\"12\" cy=\"12\" r=\"10\" stroke=\"currentColor\" stroke-width=\"4\"></circle>\r\n            <path class=\"opacity-75\" fill=\"currentColor\" d=\"M4 12a8 8 0 018-8V0C5.373 0 0 5.373 0 12h4zm2 5.291A7.962 7.962 0 014 12H0c0 3.042 1.135 5.824 3 7.938l3-2.647z\"></path>\r\n          </svg>\r\n          <svg v-else class=\"w-5 h-5 text-blue-500\" fill=\"currentColor\" viewBox=\"0 0 20 20\">\r\n            <path fill-rule=\"evenodd\" d=\"M18 10a8 8 0 11-16 0 8 8 0 0116 0zm-7-4a1 1 0 11-2 0 1 1 0 012 0zM9 9a1 1 0 000 2v3a1 1 0 001 1h1a1 1 0 100-2v-3a1 1 0 00-1-1H9z\" clip-rule=\"evenodd\"/>\r\n          </svg>\r\n        </div>\r\n        \r\n        <!-- 名称 -->\r\n        <div class=\"flex-1 font-medium\">\r\n          {{ data.name || '执行结果' }}\r\n        </div>\r\n      </div>\r\n    </div>\r\n\r\n    <!-- 结果展示（JSON View） -->\r\n    <div v-if=\"data.result\" class=\"result-container rounded-lg border border-gray-200 dark:border-gray-700 overflow-hidden\">\r\n      <div class=\"bg-gray-50 dark:bg-gray-800 px-4 py-2 border-b border-gray-200 dark:border-gray-700\">\r\n        <span class=\"text-sm font-medium text-gray-600 dark:text-gray-400\">执行结果</span>\r\n      </div>\r\n      <div class=\"p-4 bg-white dark:bg-gray-900 overflow-x-auto\">\r\n        <JsonViewer :value=\"parsedResult\" :expanded=\"true\" />\r\n      </div>\r\n    </div>\r\n\r\n    <!-- 错误信息 -->\r\n    <div v-if=\"data.err_msg\" class=\"error-container rounded-lg border border-red-200 dark:border-red-800 overflow-hidden bg-red-50 dark:bg-red-900/20\">\r\n      <div class=\"p-4\">\r\n        <div class=\"text-sm text-red-800 dark:text-red-200 whitespace-pre-wrap\">\r\n          {{ data.err_msg }}\r\n        </div>\r\n      </div>\r\n    </div>\r\n  </div>\r\n</template>\r\n\r\n<script setup lang=\"ts\">\r\nimport { computed } from 'vue'\r\nimport JsonViewer from './JsonViewer.vue'\r\n\r\ninterface VisResponseData {\r\n  name: string\r\n  status: 'todo' | 'runing' | 'running' | 'failed' | 'complete' | 'completed' | 'retrying'\r\n  logo?: string\r\n  result?: string\r\n  err_msg?: string\r\n}\r\n\r\ninterface Props {\r\n  data: VisResponseData\r\n}\r\n\r\nconst props = defineProps<Props>()\r\n\r\n// 确定Alert类型\r\nconst alertType = computed(() => {\r\n  const status = props.data.status?.toLowerCase()\r\n  switch (status) {\r\n    case 'complete':\r\n    case 'completed':\r\n      return 'success'\r\n    case 'failed':\r\n      return 'error'\r\n    case 'running':\r\n    case 'runing':\r\n      return 'warning'\r\n    default:\r\n      return 'info'\r\n  }\r\n})\r\n\r\n// Alert样式类\r\nconst alertClass = computed(() => {\r\n  switch (alertType.value) {\r\n    case 'success':\r\n      return 'bg-green-50 dark:bg-green-900/20 border-green-200 dark:border-green-800'\r\n    case 'error':\r\n      return 'bg-red-50 dark:bg-red-900/20 border-red-200 dark:border-red-800'\r\n    case 'warning':\r\n      return 'bg-yellow-50 dark:bg-yellow-900/20 border-yellow-200 dark:border-yellow-800'\r\n    default:\r\n      return 'bg-gray-50 dark:bg-gray-800 border-gray-200 dark:border-gray-700'\r\n  }\r\n})\r\n\r\n// 解析JSON结果\r\nconst parsedResult = computed(() => {\r\n  if (!props.data.result) return {}\r\n  \r\n  try {\r\n    if (typeof props.data.result === 'string') {\r\n      return JSON.parse(props.data.result)\r\n    }\r\n    return props.data.result\r\n  } catch (e) {\r\n    console.error('Failed to parse vis-response result:', e)\r\n    return { error: '无法解析JSON结果', raw: props.data.result }\r\n  }\r\n})\r\n</script>\r\n\r\n<style scoped>\r\n.vis-response {\r\n  width: 100%;\r\n}\r\n\r\n.alert-box {\r\n  transition: all 0.2s ease;\r\n}\r\n\r\n/* 移动端优化 */\r\n@media (max-width: 768px) {\r\n  .result-container,\r\n  .error-container {\r\n    font-size: 14px;\r\n  }\r\n}\r\n</style>\r\n\r\n","<template>\r\n  <div class=\"prompt-bot fixed bottom-6 left-6 z-50\">\r\n    <el-button\r\n      type=\"success\"\r\n      circle\r\n      size=\"large\"\r\n      @click=\"showPrompts = true\"\r\n    >\r\n      💡\r\n    </el-button>\r\n    \r\n    <el-drawer\r\n      v-model=\"showPrompts\"\r\n      title=\"提示词助手\"\r\n      direction=\"rtl\"\r\n      size=\"400px\"\r\n    >\r\n      <div class=\"space-y-4\">\r\n        <div\r\n          v-for=\"prompt in prompts\"\r\n          :key=\"prompt.id\"\r\n          class=\"p-3 border border-gray-200 dark:border-gray-700 rounded-lg cursor-pointer hover:bg-gray-50 dark:hover:bg-gray-800\"\r\n          @click=\"selectPrompt(prompt)\"\r\n        >\r\n          <h4 class=\"font-medium text-gray-900 dark:text-white\">{{ prompt.title }}</h4>\r\n          <p class=\"text-sm text-gray-600 dark:text-gray-400 mt-1\">{{ prompt.description }}</p>\r\n        </div>\r\n      </div>\r\n    </el-drawer>\r\n  </div>\r\n</template>\r\n\r\n<script setup lang=\"ts\">\r\nimport { ref } from 'vue'\r\n// 移除Element Plus图标导入\r\n\r\ninterface Props {\r\n  chatScene?: string\r\n}\r\n\r\ndefineProps<Props>()\r\n\r\nconst emit = defineEmits<{\r\n  submit: [prompt: any]\r\n}>()\r\n\r\nconst showPrompts = ref(false)\r\n\r\nconst prompts = ref([\r\n  {\r\n    id: 1,\r\n    title: '数据分析',\r\n    description: '帮我分析这个数据并生成图表',\r\n    content: '请帮我分析以下数据并生成相应的可视化图表',\r\n    prompt_code: 'data_analysis'\r\n  },\r\n  {\r\n    id: 2,\r\n    title: '代码生成',\r\n    description: '生成一个Vue组件',\r\n    content: '请帮我生成一个Vue 3组件，包含以下功能...',\r\n    prompt_code: 'code_generation'\r\n  },\r\n  {\r\n    id: 3,\r\n    title: '文档总结',\r\n    description: '总结这篇文档的主要内容',\r\n    content: '请帮我总结以下文档的主要内容',\r\n    prompt_code: 'document_summary'\r\n  }\r\n])\r\n\r\nconst selectPrompt = (prompt: any) => {\r\n  emit('submit', prompt)\r\n  showPrompts.value = false\r\n}\r\n</script>\r\n\r\n","<template>\r\n  <div class=\"float-helper fixed bottom-6 right-6 z-50\">\r\n    <el-button\r\n      type=\"primary\"\r\n      circle\r\n      size=\"large\"\r\n      @click=\"showHelp = true\"\r\n    >\r\n      ❓\r\n    </el-button>\r\n    \r\n    <el-dialog\r\n      v-model=\"showHelp\"\r\n      title=\"帮助中心\"\r\n      width=\"500px\"\r\n    >\r\n      <div class=\"space-y-4\">\r\n        <div>\r\n          <h3 class=\"font-semibold mb-2\">快捷键</h3>\r\n          <ul class=\"text-sm text-gray-600 space-y-1\">\r\n            <li>• Ctrl + Enter: 发送消息</li>\r\n            <li>• Ctrl + K: 新建对话</li>\r\n            <li>• Ctrl + /: 显示帮助</li>\r\n          </ul>\r\n        </div>\r\n        <div>\r\n          <h3 class=\"font-semibold mb-2\">功能说明</h3>\r\n          <ul class=\"text-sm text-gray-600 space-y-1\">\r\n            <li>• 支持流式对话</li>\r\n            <li>• 支持图表生成</li>\r\n            <li>• 支持文件上传</li>\r\n            <li>• 支持主题切换</li>\r\n          </ul>\r\n        </div>\r\n      </div>\r\n    </el-dialog>\r\n  </div>\r\n</template>\r\n\r\n<script setup lang=\"ts\">\r\nimport { ref } from 'vue'\r\n// 移除Element Plus图标导入\r\n\r\nconst showHelp = ref(false)\r\n</script>\r\n\r\n","/**\r\n * 默认 API 适配器\r\n * 基于 DB-GPT 标准接口实现\r\n */\r\n\r\nimport type {\r\n  IChatApiAdapter,\r\n  ChatRequestParams,\r\n  ChatResponseData,\r\n  ConversationData\r\n} from './types'\r\nimport type { ChatMessage } from '@/types/chat'\r\nimport axios, { AxiosInstance } from 'axios'\r\n\r\nexport class DefaultChatApiAdapter implements IChatApiAdapter {\r\n  private apiClient: AxiosInstance\r\n\r\n  constructor(baseURL?: string, timeout?: number) {\r\n    this.apiClient = axios.create({\r\n      baseURL: baseURL || import.meta.env.VITE_DBGPT_API_URL || 'http://localhost:5000',\r\n      timeout: timeout || 60000\r\n    })\r\n\r\n    // 请求拦截器\r\n    this.apiClient.interceptors.request.use(\r\n      (config) => {\r\n        const token = localStorage.getItem('auth_token')\r\n        if (token) {\r\n          config.headers.Authorization = `Bearer ${token}`\r\n        }\r\n        return config\r\n      },\r\n      (error) => Promise.reject(error)\r\n    )\r\n\r\n    // 响应拦截器\r\n    this.apiClient.interceptors.response.use(\r\n      (response) => response.data,\r\n      (error) => Promise.reject(error)\r\n    )\r\n  }\r\n\r\n  async chat(params: ChatRequestParams): Promise<ChatResponseData> {\r\n    const response = await this.apiClient.post('/api/v1/chat/completions', params)\r\n    return {\r\n      content: response.data?.context || response.data?.content || '',\r\n      conv_uid: response.data?.conv_uid,\r\n      model_name: response.data?.model_name\r\n    }\r\n  }\r\n\r\n  async chatStream(\r\n    params: ChatRequestParams,\r\n    onChunk: (chunk: string) => void,\r\n    onComplete?: () => void,\r\n    onError?: (error: Error) => void\r\n  ): Promise<void> {\r\n    try {\r\n      const response = await fetch(\r\n        `${this.apiClient.defaults.baseURL}/api/v1/chat/completions/stream`,\r\n        {\r\n          method: 'POST',\r\n          headers: {\r\n            'Content-Type': 'application/json',\r\n            Authorization: `Bearer ${localStorage.getItem('auth_token') || ''}`\r\n          },\r\n          body: JSON.stringify(params)\r\n        }\r\n      )\r\n\r\n      if (!response.ok) {\r\n        throw new Error(`HTTP error! status: ${response.status}`)\r\n      }\r\n\r\n      const reader = response.body?.getReader()\r\n      const decoder = new TextDecoder()\r\n\r\n      if (!reader) {\r\n        throw new Error('Response body is null')\r\n      }\r\n\r\n      while (true) {\r\n        const { done, value } = await reader.read()\r\n\r\n        if (done) {\r\n          onComplete?.()\r\n          break\r\n        }\r\n\r\n        const chunk = decoder.decode(value, { stream: true })\r\n        const lines = chunk.split('\\n').filter((line) => line.trim() !== '')\r\n\r\n        for (const line of lines) {\r\n          if (line.startsWith('data: ')) {\r\n            const data = line.slice(6)\r\n\r\n            if (data === '[DONE]') {\r\n              onComplete?.()\r\n              return\r\n            }\r\n\r\n            try {\r\n              const parsed = JSON.parse(data)\r\n              if (parsed.choices?.[0]?.delta?.content) {\r\n                onChunk(parsed.choices[0].delta.content)\r\n              } else if (parsed.content) {\r\n                onChunk(parsed.content)\r\n              }\r\n            } catch (e) {\r\n              onChunk(data)\r\n            }\r\n          }\r\n        }\r\n      }\r\n    } catch (error) {\r\n      onError?.(error as Error)\r\n      throw error\r\n    }\r\n  }\r\n\r\n  async getConversations(): Promise<ConversationData[]> {\r\n    const response = await this.apiClient.get('/api/v1/chat/conversations')\r\n    return response.data || []\r\n  }\r\n\r\n  async createConversation(name?: string): Promise<ConversationData> {\r\n    const response = await this.apiClient.post('/api/v1/chat/conversations', {\r\n      conv_name: name || `对话 ${new Date().toLocaleString()}`\r\n    })\r\n    return response.data\r\n  }\r\n\r\n  async getConversationHistory(convUid: string): Promise<ChatMessage[]> {\r\n    const response = await this.apiClient.get(\r\n      `/api/v1/chat/conversations/${convUid}/messages`\r\n    )\r\n    return response.data || []\r\n  }\r\n\r\n  async deleteConversation(convUid: string): Promise<void> {\r\n    await this.apiClient.delete(`/api/v1/chat/conversations/${convUid}`)\r\n  }\r\n\r\n  async clearConversation(convUid: string): Promise<void> {\r\n    await this.apiClient.post(`/api/v1/chat/conversations/${convUid}/clear`)\r\n  }\r\n}\r\n\r\n","/**\n * 适配器模块导出\n */\n\nexport * from './types'\nexport { DefaultChatApiAdapter } from './defaultAdapter'\n\n/**\n * 全局配置管理\n */\nimport type { ChatSystemConfig, IChatApiAdapter } from './types'\nimport { DefaultChatApiAdapter } from './defaultAdapter'\n\nclass ConfigManager {\n  private config: ChatSystemConfig = {}\n  private apiAdapter: IChatApiAdapter | null = null\n\n  /**\n   * 设置全局配置\n   */\n  setConfig(config: ChatSystemConfig): void {\n    this.config = { ...this.config, ...config }\n\n    // 如果提供了 apiAdapter，直接使用\n    if (config.apiAdapter) {\n      this.apiAdapter = config.apiAdapter\n    }\n    // 否则使用默认适配器\n    else if (config.baseURL || !this.apiAdapter) {\n      this.apiAdapter = new DefaultChatApiAdapter(config.baseURL, config.timeout)\n    }\n  }\n\n  /**\n   * 获取配置\n   */\n  getConfig(): ChatSystemConfig {\n    return this.config\n  }\n\n  /**\n   * 获取 API 适配器\n   */\n  getApiAdapter(): IChatApiAdapter {\n    if (!this.apiAdapter) {\n      this.apiAdapter = new DefaultChatApiAdapter()\n    }\n    return this.apiAdapter\n  }\n\n  /**\n   * 设置 API 适配器\n   */\n  setApiAdapter(adapter: IChatApiAdapter): void {\n    this.apiAdapter = adapter\n  }\n\n  /**\n   * 重置配置\n   */\n  reset(): void {\n    this.config = {}\n    this.apiAdapter = null\n  }\n}\n\n// 导出单例\nexport const configManager = new ConfigManager()\n\n/**\n * 配置聊天系统\n * \n * @example\n * ```typescript\n * import { configureChatSystem } from '@dbgpt/vue-chat-system'\n * \n * configureChatSystem({\n *   baseURL: 'https://your-api.com',\n *   getAuthToken: () => localStorage.getItem('token')\n * })\n * ```\n */\nexport function configureChatSystem(config: ChatSystemConfig): void {\n  configManager.setConfig(config)\n  \n  // 同时更新 chatApi 的配置（改为同步导入，确保立即生效）\n  if (config.baseURL || config.timeout) {\n    // 直接导入 chatApi（不使用动态导入，确保配置立即生效）\n    // 注意：这里我们接受可能的循环依赖风险，因为时序正确性更重要\n    import('../services/chatApi').then(({ chatApi }) => {\n      chatApi.updateConfig({\n        baseURL: config.baseURL,\n        timeout: config.timeout\n      })\n      console.log('[configureChatSystem] chatApi baseURL 已更新为:', config.baseURL)\n    }).catch(err => {\n      console.error('[configureChatSystem] 更新 chatApi 配置失败:', err)\n    })\n  }\n}\n\n/**\n * 获取当前配置\n */\nexport function getChatSystemConfig(): ChatSystemConfig {\n  return configManager.getConfig()\n}\n\n/**\n * 获取 API 适配器\n */\nexport function getChatApiAdapter(): IChatApiAdapter {\n  return configManager.getApiAdapter()\n}\n\n/**\n * 设置自定义 API 适配器\n */\nexport function setChatApiAdapter(adapter: IChatApiAdapter): void {\n  configManager.setApiAdapter(adapter)\n}\n\n","import { createI18n } from 'vue-i18n'\r\nimport type { App } from 'vue'\r\n\r\n// 导入语言包\r\nimport zh from './locales/zh.json'\r\nimport en from './locales/en.json'\r\n\r\nconst messages = {\r\n  zh,\r\n  en\r\n}\r\n\r\nconst i18n = createI18n({\r\n  legacy: false,\r\n  locale: 'zh', // 默认语言\r\n  fallbackLocale: 'en', // 回退语言\r\n  messages,\r\n  globalInjection: true\r\n})\r\n\r\nexport function setupI18n(app: App) {\r\n  app.use(i18n)\r\n  return i18n\r\n}\r\n\r\nexport default i18n\r\n\r\n","/**\n * Vue Chat System - 主入口文件\n * DB-GPT 聊天系统 Vue 组件库\n * \n * @author DB-GPT Team\n * @version 1.0.0\n */\n\n// 导入全局样式（会被打包进 dist/style.css）\nimport './styles/globals.css'\n// 导入 GitHub Markdown 样式（只使用亮色主题）\nimport 'github-markdown-css/github-markdown-light.css'\n\nimport type { App } from 'vue'\n// 导入 Element Plus 组件（已打包在库中）\nimport { \n  ElTabs, \n  ElTabPane, \n  ElIcon, \n  ElCollapse, \n  ElCollapseItem,\n  ElTable,\n  ElTableColumn\n} from 'element-plus'\n\n/* === 核心组件导出 === */\nexport * from './components'\n\n/* === Composables/Hooks === */\nexport * from './composables'\n\n/* === Services === */\nexport * from './services'\n\n/* === Types === */\nexport * from './types'\nexport type { IntegratedChatInstance } from './types/components'\n\n/* === Stores === */\nexport * from './stores'\n\n/* === Utils === */\nexport * from './utils'\n\n/* === Adapters === */\nexport * from './adapters'\n\n/* === Styles === */\nexport * from './styles'\n\n/* === I18n === */\nexport { default as i18n } from './i18n'\n\n/* === 样式导入说明 === */\n/**\n * 样式引入策略（根据使用场景选择）：\n * \n * 1. 使用完整组件（推荐）：\n *    import '@dbgpt/vue-chat-system/dist/style.css'\n *    import 'highlight.js/styles/atom-one-dark.css'  // 代码高亮主题（必需）\n * \n * 2. 自定义代码高亮主题：\n *    import '@dbgpt/vue-chat-system/dist/style.css'\n *    import 'highlight.js/styles/github-dark.css'  // 或其他 hljs 主题\n * \n * 3. 完全自定义 UI（使用 Hooks）：\n *    不引入任何样式，或只引入 CSS 变量：\n *    import '@dbgpt/vue-chat-system/dist/styles/theme.css'\n * \n * 详见文档：docs/样式定制指南.md\n */\n\n/**\n * 默认导出 - 支持 Vue.use() 全局安装\n * \n * @example\n * ```typescript\n * import { createApp } from 'vue'\n * import VueChatSystem from '@vue-chat-system'\n * import '@vue-chat-system/dist/style.css'\n * \n * const app = createApp(App)\n * app.use(VueChatSystem)\n * ```\n */\nexport default {\n  install(app: App) {\n    // 注册 Element Plus 组件（组件库内部使用）\n    app.component('ElTabs', ElTabs)\n    app.component('ElTabPane', ElTabPane)\n    app.component('ElIcon', ElIcon)\n    app.component('ElCollapse', ElCollapse)\n    app.component('ElCollapseItem', ElCollapseItem)\n    app.component('ElTable', ElTable)\n    app.component('ElTableColumn', ElTableColumn)\n    \n    console.log('[VueChatSystem] 组件库已安装（已自动注册 Element Plus 组件）')\n  },\n  version: '1.3.0'\n}\n\n/**\n * 库版本信息\n */\nexport const version = '1.0.0'\n\n/**\n * 使用说明\n * \n * ## 按需引入（推荐）\n * \n * ```typescript\n * import { IntegratedChat, useChat, dbgptService } from '@vue-chat-system'\n * import '@vue-chat-system/dist/style.css'\n * ```\n * \n * ## 全局安装\n * \n * ```typescript\n * import VueChatSystem from '@vue-chat-system'\n * import '@vue-chat-system/dist/style.css'\n * \n * app.use(VueChatSystem)\n * ```\n * \n * ## 使用组件\n * \n * ```vue\n * <template>\n *   <IntegratedChat \n *     :chat-id=\"chatId\"\n *     :scene=\"scene\"\n *   />\n * </template>\n * ```\n * \n * ## 使用 Hooks\n * \n * ```typescript\n * import { useChat } from '@vue-chat-system'\n * \n * const { handleChat, pauseChat, regenerateAnswer } = useChat()\n * ```\n * \n * ## 使用 Services\n * \n * ```typescript\n * import { dbgptService } from '@vue-chat-system'\n * \n * const response = await dbgptService.chat({\n *   user_input: 'Hello',\n *   conv_uid: 'xxx'\n * })\n * ```\n */\n\n","/**\r\n * 样式导出配置\r\n * 支持按需引入样式\r\n */\r\n\r\n// 用户可以按需引入以下样式文件：\r\n// import '@dbgpt/vue-chat-system/dist/style.css'              // 完整样式\r\n// import '@dbgpt/vue-chat-system/dist/styles/base.css'        // 基础样式\r\n// import '@dbgpt/vue-chat-system/dist/styles/components.css'  // 组件样式\r\n// import '@dbgpt/vue-chat-system/dist/styles/theme.css'       // 主题样式\r\n\r\n/**\r\n * 样式说明\r\n * \r\n * 1. 完整样式 (style.css)\r\n *    包含所有样式，适合直接使用组件的场景\r\n * \r\n * 2. 基础样式 (base.css)\r\n *    只包含基础的重置样式和工具类\r\n *    适合完全自定义 UI 的场景\r\n * \r\n * 3. 组件样式 (components.css)\r\n *    只包含组件样式，不包含基础样式\r\n *    需要自己处理基础样式\r\n * \r\n * 4. 主题样式 (theme.css)\r\n *    只包含 CSS 变量定义\r\n *    可以覆盖这些变量来自定义主题\r\n */\r\n\r\nexport const STYLE_IMPORTS = {\r\n  full: '@dbgpt/vue-chat-system/dist/style.css',\r\n  base: '@dbgpt/vue-chat-system/dist/styles/base.css',\r\n  components: '@dbgpt/vue-chat-system/dist/styles/components.css',\r\n  theme: '@dbgpt/vue-chat-system/dist/styles/theme.css'\r\n} as const\r\n\r\n/**\r\n * CSS 变量列表\r\n * 可以通过覆盖这些变量来自定义主题\r\n */\r\nexport const CSS_VARIABLES = {\r\n  // 颜色\r\n  '--chat-primary-color': '#667eea',\r\n  '--chat-secondary-color': '#764ba2',\r\n  '--chat-bg-color': '#ffffff',\r\n  '--chat-text-color': '#333333',\r\n  '--chat-border-color': '#e0e0e0',\r\n  \r\n  // 消息\r\n  '--chat-message-user-bg': '#667eea',\r\n  '--chat-message-user-color': '#ffffff',\r\n  '--chat-message-bot-bg': '#f5f5f5',\r\n  '--chat-message-bot-color': '#333333',\r\n  \r\n  // 间距\r\n  '--chat-spacing-xs': '4px',\r\n  '--chat-spacing-sm': '8px',\r\n  '--chat-spacing-md': '16px',\r\n  '--chat-spacing-lg': '24px',\r\n  '--chat-spacing-xl': '32px',\r\n  \r\n  // 圆角\r\n  '--chat-border-radius-sm': '4px',\r\n  '--chat-border-radius-md': '8px',\r\n  '--chat-border-radius-lg': '12px',\r\n  \r\n  // 字体\r\n  '--chat-font-size-sm': '12px',\r\n  '--chat-font-size-md': '14px',\r\n  '--chat-font-size-lg': '16px',\r\n  \r\n  // 阴影\r\n  '--chat-shadow-sm': '0 1px 2px rgba(0, 0, 0, 0.05)',\r\n  '--chat-shadow-md': '0 4px 6px rgba(0, 0, 0, 0.1)',\r\n  '--chat-shadow-lg': '0 10px 15px rgba(0, 0, 0, 0.1)'\r\n} as const\r\n\r\n/**\r\n * 深色主题变量\r\n */\r\nexport const DARK_THEME_VARIABLES = {\r\n  '--chat-bg-color': '#1a1a1a',\r\n  '--chat-text-color': '#e0e0e0',\r\n  '--chat-border-color': '#333333',\r\n  '--chat-message-bot-bg': '#2a2a2a',\r\n  '--chat-message-bot-color': '#e0e0e0'\r\n} as const\r\n\r\n","/**\n * Chat API Composable\n * 提供便捷的聊天功能和状态管理\n */\n\nimport { ref, computed } from 'vue'\nimport { chatApi, chatApiUtils } from '../services/chatApi'\nimport type { ChatApiOptions, ChatApiStreamCallbacks } from '../types/chatapi'\n\nexport interface ChatMessage {\n  id: string\n  role: 'user' | 'assistant'\n  content: string\n  timestamp: number\n  status?: 'sending' | 'success' | 'error'\n  error?: string\n}\n\nexport interface UseChatApiOptions {\n  convUid?: string\n  autoGenerateConvUid?: boolean\n  chatOptions?: ChatApiOptions\n}\n\n/**\n * 使用聊天API功能\n */\nexport function useChatApi(options?: UseChatApiOptions) {\n  // 状态\n  const messages = ref<ChatMessage[]>([])\n  const isLoading = ref(false)\n  const isThinking = ref(false)\n  const error = ref<string | null>(null)\n  const currentConvUid = ref<string>(\n    options?.convUid || \n    (options?.autoGenerateConvUid !== false ? generateConvUid() : '')\n  )\n  \n  // 当前正在生成的消息\n  const currentAssistantMessage = ref<ChatMessage | null>(null)\n  \n  // 用于取消请求的控制器\n  let abortController: AbortController | null = null\n\n  // 计算属性\n  const hasMessages = computed(() => messages.value.length > 0)\n  const lastMessage = computed(() => messages.value[messages.value.length - 1])\n  const canSend = computed(() => !isLoading.value && !isThinking.value)\n\n  /**\n   * 生成消息ID\n   */\n  function generateMessageId(): string {\n    return `msg_${Date.now()}_${Math.random().toString(36).substr(2, 9)}`\n  }\n\n  /**\n   * 生成对话UID\n   */\n  function generateConvUid(): string {\n    const timestamp = Date.now()\n    return `055-${timestamp}`\n  }\n\n  /**\n   * 添加消息到列表\n   */\n  function addMessage(message: Omit<ChatMessage, 'id' | 'timestamp'>): ChatMessage {\n    const newMessage: ChatMessage = {\n      ...message,\n      id: generateMessageId(),\n      timestamp: Date.now(),\n    }\n    messages.value.push(newMessage)\n    return newMessage\n  }\n\n  /**\n   * 更新消息\n   */\n  function updateMessage(id: string, updates: Partial<ChatMessage>) {\n    const index = messages.value.findIndex(msg => msg.id === id)\n    if (index !== -1) {\n      messages.value[index] = { ...messages.value[index], ...updates }\n    }\n  }\n\n  /**\n   * 删除消息\n   */\n  function deleteMessage(id: string) {\n    const index = messages.value.findIndex(msg => msg.id === id)\n    if (index !== -1) {\n      messages.value.splice(index, 1)\n    }\n  }\n\n  /**\n   * 发送消息（流式）\n   */\n  async function sendMessage(userInput: string, chatOptions?: ChatApiOptions): Promise<void> {\n    if (!userInput.trim() || !canSend.value) {\n      return\n    }\n\n    // 清除之前的错误\n    error.value = null\n\n    // 添加用户消息\n    addMessage({\n      role: 'user',\n      content: userInput.trim(),\n      status: 'success',\n    })\n\n    // 创建助手消息（初始为空）\n    const assistantMessage = addMessage({\n      role: 'assistant',\n      content: '',\n      status: 'sending',\n    })\n\n    currentAssistantMessage.value = assistantMessage\n\n    // 设置状态\n    isLoading.value = true\n    isThinking.value = true\n\n    // 合并选项\n    const mergedOptions: ChatApiOptions = {\n      ...options?.chatOptions,\n      ...chatOptions,\n      conv_uid: currentConvUid.value,\n    }\n\n    try {\n      // 流式回调\n      const callbacks: ChatApiStreamCallbacks = {\n        onStart: () => {\n          console.log('[聊天] 开始接收响应')\n        },\n\n        onChunk: (chunk: string) => {\n          // 第一次收到内容时，取消\"思考中\"状态\n          if (isThinking.value) {\n            isThinking.value = false\n          }\n\n          // 直接替换内容（后端返回的是累积内容，不是增量）\n          assistantMessage.content = chunk\n          updateMessage(assistantMessage.id, {\n            content: assistantMessage.content,\n          })\n        },\n\n        onComplete: () => {\n          console.log('[聊天] 响应完成')\n          isLoading.value = false\n          isThinking.value = false\n          currentAssistantMessage.value = null\n          \n          // 更新消息状态\n          updateMessage(assistantMessage.id, {\n            status: 'success',\n          })\n        },\n\n        onError: (err: Error) => {\n          console.error('[聊天] 响应错误:', err)\n          error.value = err.message || '发送消息失败'\n          isLoading.value = false\n          isThinking.value = false\n          currentAssistantMessage.value = null\n          \n          // 更新消息状态\n          updateMessage(assistantMessage.id, {\n            status: 'error',\n            error: err.message,\n          })\n        },\n      }\n\n      // 发起流式请求\n      abortController = (await chatApi.chatStream(\n        userInput.trim(),\n        callbacks,\n        mergedOptions\n      )) as any\n    } catch (err) {\n      console.error('[聊天] 发送失败:', err)\n      error.value = err instanceof Error ? err.message : '发送消息失败'\n      isLoading.value = false\n      isThinking.value = false\n      currentAssistantMessage.value = null\n      \n      // 更新消息状态\n      updateMessage(assistantMessage.id, {\n        status: 'error',\n        error: error.value,\n      })\n    }\n  }\n\n  /**\n   * 停止生成\n   */\n  function stopGeneration() {\n    if (abortController) {\n      abortController.abort()\n      abortController = null\n      isLoading.value = false\n      isThinking.value = false\n\n      // 更新当前消息状态\n      if (currentAssistantMessage.value) {\n        updateMessage(currentAssistantMessage.value.id, {\n          status: 'success', // 标记为成功，即使未完成\n        })\n        currentAssistantMessage.value = null\n      }\n    }\n  }\n\n  /**\n   * 重新生成最后一条助手消息\n   */\n  async function regenerateLastMessage() {\n    if (messages.value.length < 2) {\n      return\n    }\n\n    // 找到最后一条用户消息\n    const lastUserMessage = [...messages.value]\n      .reverse()\n      .find(msg => msg.role === 'user')\n\n    if (!lastUserMessage) {\n      return\n    }\n\n    // 删除最后一条助手消息\n    if (lastMessage.value?.role === 'assistant') {\n      deleteMessage(lastMessage.value.id)\n    }\n\n    // 重新发送\n    await sendMessage(lastUserMessage.content)\n  }\n\n  /**\n   * 清空对话历史\n   */\n  function clearMessages() {\n    messages.value = []\n    error.value = null\n    currentAssistantMessage.value = null\n    \n    // 停止当前生成\n    if (isLoading.value) {\n      stopGeneration()\n    }\n  }\n\n  /**\n   * 重新开始对话（清空历史并生成新的 conv_uid）\n   */\n  function resetConversation() {\n    clearMessages()\n    currentConvUid.value = generateConvUid()\n    chatApiUtils.setCurrentConvUid(currentConvUid.value)\n  }\n\n  /**\n   * 设置对话ID\n   */\n  function setConvUid(convUid: string) {\n    currentConvUid.value = convUid\n    chatApiUtils.setCurrentConvUid(convUid)\n  }\n\n  return {\n    // 状态\n    messages,\n    isLoading,\n    isThinking,\n    error,\n    currentConvUid,\n    \n    // 计算属性\n    hasMessages,\n    lastMessage,\n    canSend,\n    \n    // 方法\n    sendMessage,\n    stopGeneration,\n    regenerateLastMessage,\n    clearMessages,\n    resetConversation,\n    setConvUid,\n    addMessage,\n    updateMessage,\n    deleteMessage,\n  }\n}\n\n","import { ref } from 'vue'\n\nexport function useRequest<T>(\n  requestFn: () => Promise<T>,\n  options: {\n    manual?: boolean\n    onSuccess?: (data: T) => void\n    onError?: (error: any) => void\n  } = {}\n) {\n  const data = ref<T>()\n  const loading = ref(false)\n  const error = ref<any>(null)\n\n  const run = async (..._args: any[]) => {\n    loading.value = true\n    error.value = null\n    \n    try {\n      const result = await requestFn()\n      data.value = result\n      options.onSuccess?.(result)\n      return result\n    } catch (err) {\n      error.value = err\n      options.onError?.(err)\n      throw err\n    } finally {\n      loading.value = false\n    }\n  }\n\n  const refresh = () => run()\n\n  if (!options.manual) {\n    run()\n  }\n\n  return {\n    data,\n    loading,\n    error,\n    run,\n    refresh\n  }\n}\n\n"],"names":["configProviderContextKey","Symbol","defaultNamespace","_bem","namespace","block","blockSuffix","element","modifier","cls","namespaceContextKey","useGetDerivedNamespace","namespaceOverrides","derivedNamespace","getCurrentInstance","inject","ref","computed","unref","useNamespace","b","value","e","m","be","em","bm","bem","is","name","args","state","length","cssVar","object","styles","key","cssVarName","cssVarBlock","cssVarBlockName","process","env","NODE_ENV","Object","freeze","NOOP","hasOwnProperty","prototype","hasOwn","val","call","isArray","Array","isFunction","isString","isObject","isPromise","then","catch","cacheStringFunction","fn","cache","create","str","camelizeRE","camelize","replace","c","slice","toUpperCase","capitalize","charAt","freeGlobal","global","freeSelf","self","root","Function","objectProto","nativeObjectToString","toString","symToStringTag","toStringTag","baseGetTag","isOwn","tag","unmasked","result","getRawTag","objectToString","isObjectLike","isSymbol","arrayMap","array","iteratee","index","symbolProto","symbolToString","baseToString","reWhitespace","reTrimStart","baseTrim","string","test","trimmedEndIndex","type","reIsBadHex","reIsBinary","reIsOctal","freeParseInt","parseInt","toNumber","other","valueOf","isBinary","identity","uid","coreJsData","maskSrcKey","exec","keys","IE_PROTO","funcToString","toSource","func","reIsHostCtor","funcProto","reIsNative","RegExp","baseIsNative","getNative","getValue","WeakMap","objectCreate","baseCreate","proto","nativeNow","Date","now","count","lastCalled","defineProperty","baseSetToString","configurable","enumerable","writable","setToString","stamp","remaining","arguments","apply","reIsUint","isIndex","baseAssignValue","eq","assignValue","objValue","copyObject","source","props","customizer","isNew","newValue","nativeMax","Math","max","overRest","start","transform","otherArgs","thisArg","this","isLength","isArrayLike","isPrototype","Ctor","constructor","baseIsArguments","propertyIsEnumerable","isArguments","freeExports","exports","nodeType","freeModule","module","Buffer","isBuffer","typedArrayTags","baseUnary","freeProcess","nodeUtil","types","require","binding","nodeIsTypedArray","isTypedArray","arrayLikeKeys","inherited","isArr","isArg","isBuff","isType","skipIndexes","n","baseTimes","String","push","overArg","arg","nativeKeys","baseKeys","baseKeysIn","nativeKeysIn","isProto","keysIn","reIsDeepProp","reIsPlainProp","isKey","nativeCreate","Hash","entries","clear","entry","set","assocIndexOf","__data__","size","has","get","data","splice","ListCache","pop","Map","getMapData","map","MapCache","hash","memoize","resolver","TypeError","memoized","Cache","rePropName","reEscapeChar","stringToPath","memoizeCapped","charCodeAt","match","number","quote","subString","castPath","toKey","baseGet","path","defaultValue","arrayPush","values","offset","spreadableSymbol","isConcatSpreadable","isFlattenable","baseFlatten","depth","predicate","isStrict","flatten","flatRest","getPrototype","getPrototypeOf","objectCtorString","isPlainObject","castArray","Stack","pairs","LARGE_ARRAY_SIZE","allocUnsafe","cloneBuffer","buffer","isDeep","copy","stubArray","nativeGetSymbols","getOwnPropertySymbols","getSymbols","resIndex","arrayFilter","symbol","getSymbolsIn","baseGetAllKeys","keysFunc","symbolsFunc","getAllKeys","getAllKeysIn","DataView","Promise","Set","mapTag","promiseTag","setTag","weakMapTag","dataViewTag","dataViewCtorString","mapCtorString","promiseCtorString","setCtorString","weakMapCtorString","getTag","ArrayBuffer","resolve","ctorString","Uint8Array","cloneArrayBuffer","arrayBuffer","byteLength","reFlags","symbolValueOf","cloneTypedArray","typedArray","byteOffset","initCloneByTag","regexp","dataView","lastIndex","nodeIsMap","isMap","nodeIsSet","isSet","argsTag","funcTag","objectTag","cloneableTags","baseClone","bitmask","stack","input","initCloneArray","isFunc","stacked","forEach","subValue","add","arrayEach","SetCache","arraySome","equalArrays","equalFunc","isPartial","arrLength","othLength","arrStacked","othStacked","seen","arrValue","othValue","compared","othIndex","mapToArray","setToArray","arrayTag","baseIsEqualDeep","objIsArr","othIsArr","objTag","othTag","objIsObj","othIsObj","isSameTag","message","convert","equalByTag","objIsWrapped","othIsWrapped","objUnwrapped","othUnwrapped","objProps","objLength","objStacked","skipCtor","objCtor","othCtor","equalObjects","baseIsEqual","isStrictComparable","matchesStrictComparable","srcValue","baseMatches","matchData","getMatchData","COMPARE_PARTIAL_FLAG","baseIsMatch","baseHasIn","hasIn","hasFunc","hasPath","property","basePropertyDeep","baseIteratee","baseFor","iterable","eachFunc","baseEach","collection","nativeMin","min","debounce","wait","options","lastArgs","lastThis","maxWait","timerId","lastCallTime","lastInvokeTime","leading","maxing","trailing","invokeFunc","time","shouldInvoke","timeSinceLastCall","timerExpired","trailingEdge","setTimeout","timeWaiting","remainingWait","debounced","isInvoking","leadingEdge","clearTimeout","cancel","flush","assignMergeValue","safeGet","baseMergeDeep","srcIndex","mergeFunc","isCommon","isTyped","copyArray","toPlainObject","initCloneObject","baseMerge","baseMap","flatMap","fromPairs","pair","parent","end","baseSlice","isEqual","isNil","isNull","assigner","merge","baseRest","sources","guard","isIterateeCall","baseUnset","customOmitClone","omit","paths","CLONE_DEEP_FLAG","baseSet","nested","basePick","basePickBy","pick","isUndefined","isBoolean","isNumber","isElement","Element","isPropAbsent","prop","_a","__defProp$9","__defProps$6","defineProperties","__getOwnPropDescs$6","getOwnPropertyDescriptors","__getOwnPropSymbols$b","__hasOwnProp$b","__propIsEnum$b","__defNormalProp$9","obj","computedEager","shallowRef","a","watchEffect","__spreadValues$9","readonly","isClient","window","noop","isIOS","navigator","userAgent","resolveUnref","r","tryOnScopeDispose","getCurrentScope","onScopeDispose","tryOnMounted","sync","onMounted","nextTick","useTimeoutFn","cb","interval","immediate","isPending","timer","stop","unrefElement","elRef","plain","$el","defaultWindow","defaultDocument","document","useEventListener","target","events","listeners","cleanups","cleanup","stopWatch","watch","el","options2","event","listener","addEventListener","removeEventListener","register","_iOSWorkaround","_global","globalThis","globalKey","SwipeDirection","SwipeDirection2","__getOwnPropSymbols$g","__hasOwnProp$g","__propIsEnum$g","useResizeObserver","callback","observerOptions","exclude","indexOf","__objRest$2","observer","isSupported","update","Boolean","useSupported","disconnect","ResizeObserver","observe","useElementSize","initialSize","width","height","box","isSVG","_b","namespaceURI","includes","boxSize","borderBoxSize","contentBoxSize","devicePixelContentBoxSize","$elem","getComputedStyle","parseFloat","formatBoxSize","reduce","acc","inlineSize","blockSize","contentRect","ele","__defProp","__getOwnPropSymbols","__hasOwnProp","__propIsEnum","__defNormalProp","__spreadValues","linear","easeInSine","easeOutSine","easeInOutSine","easeInQuad","easeOutQuad","easeInOutQuad","easeInCubic","easeOutCubic","easeInOutCubic","easeInQuart","easeOutQuart","easeInOutQuart","easeInQuint","easeOutQuint","easeInOutQuint","easeInExpo","easeOutExpo","easeInOutExpo","easeInCirc","easeOutCirc","easeInOutCirc","easeInBack","easeOutBack","easeInOutBack","initial","current","zIndex","ZINDEX_INJECTION_KEY","zIndexContextKey","useZIndex","zIndexOverrides","increasingInjection","zIndexInjection","initialZIndex","zIndexFromInjection","currentZIndex","nextZIndex","English","breadcrumb","label","colorpicker","confirm","defaultLabel","description","alphaLabel","datepicker","today","dateTablePrompt","monthTablePrompt","yearTablePrompt","selectedDate","selectDate","selectTime","startDate","startTime","endDate","endTime","prevYear","nextYear","prevMonth","nextMonth","year","month1","month2","month3","month4","month5","month6","month7","month8","month9","month10","month11","month12","weeks","sun","mon","tue","wed","thu","fri","sat","weeksFull","months","jan","feb","mar","apr","may","jun","jul","aug","sep","oct","nov","dec","inputNumber","decrease","increase","select","loading","noMatch","noData","placeholder","mention","dropdown","toggleDropdown","cascader","pagination","goto","pagesize","total","pageClassifier","page","prev","next","currentPage","prevPages","nextPages","deprecationWarning","dialog","close","drawer","messagebox","title","error","upload","deleteTip","delete","preview","continue","slider","defaultRangeStartLabel","defaultRangeEndLabel","table","emptyText","confirmFilter","resetFilter","clearFilter","sumText","tour","previous","finish","tree","transfer","titles","filterPlaceholder","noCheckedFormat","hasCheckedFormat","image","pageHeader","popconfirm","confirmButtonText","cancelButtonText","carousel","leftArrow","rightArrow","indicator","buildTranslator","locale","option","translate","_","localeContextKey","useLocale","localeOverrides","lang","isRef","t","buildLocaleContext","epPropKey","buildProp","required","default","validator","_validator","valid","allowedValues","from","allowValuesText","JSON","stringify","join","warn","epProp","buildProps","useSizeProp","SIZE_INJECTION_KEY","emptyValuesContextKey","useEmptyValuesProps","emptyValues","valueOnClear","Number","every","item","keysOf","arr","getProp","globalConfig","useGlobalConfig","config","provideGlobalConfig","app","inSetup","oldConfig","provideFn","provide","context","cfg","mergeConfig","UPDATE_MODEL_EVENT","CHANGE_EVENT","INPUT_EVENT","_export_sfc","sfc","__vccOpts","rAF","requestAnimationFrame","classNameToArray","split","filter","trim","hasClass","Error","classList","contains","addClass","removeClass","remove","addUnit","defaultUnit","isNaN","scrollBarWidth","ElementPlusError","super","throwError","scope","withInstall","main","extra","install","comp","component","withNoopInstall","iconProps","color","__default__","defineComponent","inheritAttrs","ElIcon","__spreadProps","setup","__props","ns","style","fontSize","_ctx","_cache","openBlock","createElementBlock","mergeProps","class","$attrs","renderSlot","$slots","useTimeout","timeoutHandle","cancelTimeout","registerTimeout","delay","useDelayedToggleProps","showAfter","hideAfter","autoClose","arrow_down_default","_defineComponent6","__name","_openBlock6","_createElementBlock6","xmlns","viewBox","_createElementVNode6","fill","d","arrow_left_default","_defineComponent8","_openBlock8","_createElementBlock8","_createElementVNode8","arrow_right_default","_defineComponent10","_openBlock10","_createElementBlock10","_createElementVNode10","arrow_up_default","_defineComponent12","_openBlock12","_createElementBlock12","_createElementVNode12","check_default","_defineComponent43","_openBlock43","_createElementBlock43","_createElementVNode43","circle_check_default","_defineComponent49","_openBlock49","_createElementBlock49","_createElementVNode49","circle_close_filled_default","_defineComponent50","_openBlock50","_createElementBlock50","_createElementVNode50","circle_close_default","_defineComponent51","_openBlock51","_createElementBlock51","_createElementVNode51","clock_default","_defineComponent54","_openBlock54","_createElementBlock54","_createElementVNode54","close_default","_defineComponent56","_openBlock56","_createElementBlock56","_createElementVNode56","hide_default","_defineComponent133","_openBlock133","_createElementBlock133","_createElementVNode133","info_filled_default","_defineComponent143","_openBlock143","_createElementBlock143","_createElementVNode143","loading_default","_defineComponent150","_openBlock150","_createElementBlock150","_createElementVNode150","plus_default","_defineComponent201","_openBlock201","_createElementBlock201","_createElementVNode201","success_filled_default","_defineComponent249","_openBlock249","_createElementBlock249","_createElementVNode249","view_default","_defineComponent283","_openBlock283","_createElementBlock283","_createElementVNode283","iconPropType","TypeComponents","Close","TypeComponentsMap","primary","InfoFilled","success","SuccessFilled","warning","_defineComponent287","_openBlock287","_createElementBlock287","_createElementVNode287","CircleCloseFilled","info","ValidateComponentsMap","validating","Loading","CircleCheck","CircleClose","isFirefox","hiddenTextarea","HIDDEN_STYLE","visibility","overflow","position","top","right","CONTEXT_STYLE","calcTextareaHeight","targetElement","minRows","maxRows","createElement","parentNode","body","appendChild","paddingSize","borderSize","boxSizing","contextStyle","getPropertyValue","calculateNodeStyling","setProperty","scrollHeight","singleRowHeight","minHeight","maxHeight","removeChild","ariaProps","ariaLabel","ariaOrientation","ariaControls","useAriaProps","arias","inputProps","id","disabled","modelValue","maxlength","minlength","resize","autosize","autocomplete","formatter","parser","form","clearable","clearIcon","showPassword","showWordLimit","suffixIcon","prefixIcon","containerRole","tabindex","validateEvent","inputStyle","autofocus","rows","inputmode","inputEmits","change","focus","evt","FocusEvent","blur","mouseleave","MouseEvent","mouseenter","keydown","Event","compositionstart","CompositionEvent","compositionupdate","compositionend","DEFAULT_EXCLUDE_KEYS","LISTENER_PREFIX","defaultIdInjection","prefix","floor","random","ID_INJECTION_KEY","useIdInjection","useId","deterministicId","idInjection","formContextKey","formItemContextKey","useFormItem","formItem","useFormItemInputId","formItemContext","disableIdGeneration","disableIdManagement","instance","inputId","idUnwatch","isLabeledByFormItem","inputIds","toRef","disableIdGeneration2","newId","removeInputId","inLabel","addInputId","onUnmounted","useProp","vm","proxy","$props","useFormSize","fallback","ignore","emptyRef","injectedSize","useGlobalSize","useFormDisabled","isHTMLElement","isFocusable","tabIndex","getAttribute","hasAttribute","nodeName","href","rel","focusElement","setAttribute","removeAttribute","_sfc_main","emits","expose","emit","rawAttrs","useAttrs","attrs","params","excludeListeners","excludeKeys","allExcludeKeys","concat","useAttrs$1","slots","useSlots","containerKls","nsTextarea","nsInput","inputSize","inputDisabled","inputExceed","prepend","append","suffix","showClear","showPwdVisible","wrapperKls","isFocused","elForm","elFormItem","textarea","hovering","passwordVisible","countStyle","textareaCalcStyle","_ref","wrapperRef","handleFocus","handleBlur","beforeFocus","afterFocus","beforeBlur","afterBlur","cancelFocus","cancelBlur","relatedTarget","disabled2","activeElement","useFocusController","validate","err","needStatusIcon","statusIcon","validateState","validateIcon","passwordIcon","View","Hide","containerStyle","textareaStyle","nativeInputValue","isWordLimitVisible","textLength","suffixVisible","recordCursor","setCursor","selectionInfo","selectionStart","selectionEnd","beforeTxt","afterTxt","startPos","endsWith","startsWith","beforeLastChar","newIndex","setSelectionRange","useCursor","onceInitSizeTextarea","resizeTextarea","textareaStyle2","overflowY","offsetHeight","resizeTextarea2","isInit","offsetParent","createOnceInitResize","setNativeInputValue","input2","formatterValue","handleInput","__async","isComposing","handleChange","handleCompositionStart","handleCompositionUpdate","handleCompositionEnd","afterComposition","text","lastCharacter","isKorean","handleComposition","useComposition","handlePasswordVisible","handleMouseLeave","handleMouseEnter","handleKeydown","normalizeClass","normalizeStyle","onMouseenter","onMouseleave","createCommentVNode","Fragment","createElementVNode","ref_key","createBlock","withCtx","resolveDynamicComponent","role","onCompositionstart","onCompositionupdate","onCompositionend","onInput","onChange","onKeydown","onMousedown","withModifiers","onClick","toDisplayString","onFocus","onBlur","ElInput","BAR_MAP","vertical","scroll","scrollSize","axis","client","direction","horizontal","scrollbarContextKey","thumbProps","move","ratio","always","Thumb","scrollbar","thumb","thumbState","visible","cursorDown","cursorLeave","baseScrollHeight","baseScrollWidth","originalOnSelectStart","onselectstart","bar","thumbStyle","renderThumbStyle","offsetRatio","__pow","wrapElement","clickThumbHandler","stopPropagation","ctrlKey","button","getSelection","removeAllRanges","startDrag","currentTarget","getBoundingClientRect","clickTrackHandler","thumbPositionPercentage","abs","stopImmediatePropagation","scrollWidth","mouseMoveDocumentHandler","mouseUpDocumentHandler","prevPage","restoreOnselectstart","onBeforeUnmount","Transition","persisted","withDirectives","vShow","barProps","minSize","Bar","moveX","moveY","sizeWidth","sizeHeight","ratioY","ratioX","handleScroll","wrap","offsetWidth","scrollTop","scrollLeft","originalHeight","originalWidth","createVNode","scrollbarProps","distance","native","wrapStyle","wrapClass","viewClass","viewStyle","noresize","scrollbarEmits","stopResizeObserver","stopWrapResizeObserver","stopResizeListener","wrapScrollTop","wrapScrollLeft","distanceScrollState","bottom","left","scrollbarRef","wrapRef","resizeRef","barRef","wrapKls","resizeKls","DIRECTION_PAIRS","prevTop","prevLeft","arrivedStates","clientHeight","clientWidth","direction2","shouldSkipDirection","oppositeDirection","arrived","oppositeArrived","updateTriggerStatus","reactive","scrollbarElement","onActivated","onUpdated","scrollTo","arg1","arg2","setScrollTop","setScrollLeft","onScroll","ElScrollbar","POPPER_INJECTION_KEY","POPPER_CONTENT_INJECTION_KEY","roleTypes","popperProps","Popper","popperProvides","triggerRef","popperInstanceRef","contentRef","referenceRef","ElPopperArrow","arrowRef","arrowStyle","popperTriggerProps","virtualRef","virtualTriggering","onContextmenu","open","FORWARD_REF_INJECTION_KEY","OnlyChild","forwardRefInjection","forwardRefDirective","setForwardRef","mounted","updated","unmounted","_a2","defaultSlot","firstLegitNode","findFirstLegitChild","cloneVNode","node","children","len","Comment","child","Text","wrapTextContent","s","ElPopperTrigger","forwardRef","ariaHaspopup","ariaDescribedby","ariaExpanded","virtualTriggerAriaStopWatch","TRIGGER_ELE_EVENTS","virtualEl","prevEl","eventName","handler","toLowerCase","watches","idx","FOCUS_AFTER_TRAPPED","FOCUS_AFTER_RELEASED","FOCUS_AFTER_TRAPPED_OPTS","cancelable","bubbles","FOCUSOUT_PREVENTED_OPTS","ON_TRAP_FOCUS_EVT","ON_RELEASE_FOCUS_EVT","FOCUS_TRAP_INJECTION_KEY","focusReason","lastUserFocusTimestamp","lastAutomatedFocusTimestamp","focusReasonUserCount","obtainAllFocusableElements","nodes","walker","createTreeWalker","NodeFilter","SHOW_ELEMENT","acceptNode","isHiddenInput","tagName","hidden","FILTER_SKIP","FILTER_ACCEPT","nextNode","currentNode","getVisibleElement","elements","container","isHidden","display","parentElement","tryFocus","shouldSelect","prevFocusedElement","preventScroll","performance","HTMLInputElement","isSelectable","removeFromStack","list","focusableStack","layer","currentLayer","pause","unshift","resume","createFocusableStack","notifyFocusReasonPointer","notifyFocusReasonKeydown","createFocusOutPreventedEvent","detail","CustomEvent","EVENT_CODE","tab","enter","space","up","down","esc","backspace","numpadEnter","pageUp","pageDown","home","composeEventHandlers","theirsHandler","oursHandler","checkForDefaultPrevented","shouldPrevent","getEventCode","code","getEventKey","registeredEscapeHandlers","cachedHandler","registeredHandler","ElFocusTrap","loop","trapped","focusTrapEl","focusStartEl","lastFocusBeforeTrapped","lastFocusAfterTrapped","focusLayer","paused","altKey","metaKey","shiftKey","isTabbing","currentFocusingEl","first","last","focusable","reverse","getEdges","focusoutPreventedEvent","defaultPrevented","preventDefault","focusTrapRef","forwardRef2","oldForwardRef","onFocusIn","onFocusOut","trapOnFocus","releaseOnFocus","trapContainer","isFocusedInTrap","startTrap","focusEvent","dispatchEvent","focusFirstDescendant","stopTrap","releasedEvent","$setup","$data","$options","E","R","W","P","me","G","U","J","je","K","De","Ee","ot","C","H","ownerDocument","defaultView","Q","B","HTMLElement","Pe","ShadowRoot","Ae","enabled","phase","o","attributes","i","assign","effect","popper","strategy","margin","arrow","reference","f","requires","q","X","ve","Z","round","ee","x","y","ke","offsetLeft","offsetTop","it","getRootNode","isSameNode","host","N","Wt","I","documentElement","ge","assignedSlot","at","se","perspective","contain","willChange","Bt","Le","fe","ft","ct","pt","modifiersData","popperOffsets","placement","u","rects","Tt","padding","v","l","h","p","g","$","w","O","j","centerOffset","querySelector","requiresIfExists","te","qt","ut","popperRect","variation","offsets","gpuAcceleration","adaptive","roundOffsets","isFixed","visualViewport","L","D","S","devicePixelRatio","Vt","Me","ye","passive","Re","scrollParents","_t","zt","lt","We","pageXOffset","pageYOffset","Be","Se","overflowX","dt","ce","Te","ht","Ft","clientTop","clientLeft","Xt","Ut","Gt","Yt","mt","ne","boundary","rootBoundary","elementContext","altBoundary","contextElement","A","k","vt","_skip","mainAxis","altAxis","fallbackPlacements","flipVariations","allowedAutoPlacements","Kt","z","V","sort","Jt","re","oe","M","T","pe","xe","find","de","ae","Y","ie","reset","gt","yt","some","bt","preventOverflow","referenceClippingOffsets","popperEscapeOffsets","isReferenceHidden","hasPopperEscaped","wt","en","He","xt","tether","tetherOffset","rn","ue","le","jt","Dt","Oe","Et","Ce","At","qe","Ve","kt","Lt","F","he","Ne","Ie","$e","_e","ze","Fe","Ue","St","cn","an","sn","pn","ln","Ot","modifiers","$t","we","defaultModifiers","defaultOptions","orderedModifiers","setOptions","un","dn","forceUpdate","destroy","onFirstUpdate","yn","popperArrowProps","arrowOffset","popperCoreConfigProps","boundariesPadding","placements","popperOptions","popperContentProps","className","enterable","pure","focusOnShow","trapping","popperClass","popperStyle","referenceEl","triggerTargetEl","stopPopperMouseEvent","popperContentEmits","genModifiers","usePopper","referenceElementRef","popperElementRef","opts","stateUpdater","derivedState","deriveState","states","instanceRef","newOptions","deep","referenceElement","popperElement","createPopper","usePopperContent","eventListenerModifier","arrowModifier","arrowEl","deriveExtraModifiers","buildPopperOptions","computedReference","unwrapMeasurableEl","ElPopperContent","focusStartRef","onFocusAfterReleased","onFocusAfterTrapped","onFocusInTrap","onFocusoutPrevented","onReleaseRequested","usePopperContentFocusTrap","ariaModal","contentAttrs","contentClass","contentStyle","updateZIndex","contentZIndex","usePopperContentDOM","triggerTargetAriaStopWatch","updatePopper","shouldUpdateZIndex","togglePopperAlive","prevTriggerTargetEl","popperContentRef","$emit","onFocusin","ElPopper","TOOLTIP_INJECTION_KEY","teleportProps","to","useTooltipContentProps","appendTo","content","rawContent","persistent","transition","teleported","useTooltipTriggerProps","trigger","triggerKeys","focusOnTarget","_prop","_event","useModelToggleProps","useTooltipModelToggleProps","useModelToggleEmits","useTooltipModelToggleEmits","useModelToggle","useTooltipModelToggle","updateEventKey","updateEventKeyRaw","useModelToggleEmits2","toggleReason","shouldHideWhenRouteChanges","shouldProceed","onShow","onHide","hasUpdateHandler","isModelBindingAbsent","doShow","doHide","show","shouldEmit","hide","appContext","globalProperties","$route","toggle","updateEventKeyRaw2","createModelToggleComposable","useTooltipProps","showArrow","tooltipEmits","whenTrigger","isTriggerType","ElTooltipTrigger","controlled","onOpen","onClose","onToggle","stopWhenControlledOrDisabled","onContextMenu","ElTeleport","Teleport$1","usePopperContainerId","selector","usePopperContainer","onBeforeMount","createContainer","ElTooltipContent","stopHandle","onBeforeShow","onBeforeHide","transitionClass","persistentRef","shouldRender","shouldShow","ariaHidden","onTransitionLeave","isFocusInsideContent","stopWhenControlled","onContentEnter","onContentLeave","onBeforeEnter","onBeforeLeave","onAfterShow","popperContent","capture","detectIframe","shouldListen","shouldIgnore","target2","querySelectorAll","composedPath","onClickOutside","appear","onAfterLeave","onAfterEnter","ElTooltip","popperRef","popperComponent","registerTimeoutForAutoClose","cancelTimeoutForAutoClose","_autoClose","useDelayedToggle","kls","onDeactivated","innerHTML","badgeProps","isDot","showZero","badgeStyle","badgeClass","ElBadge","_c","_d","backgroundColor","marginRight","marginTop","createTextVNode","buttonGroupContextKey","useDeprecated","replacement","version","condition","buttonProps","icon","nativeType","loadingIcon","link","bg","circle","dark","autoInsertSpace","buttonEmits","click","bound01","isOnePointZero","isPercent","isPercentage","clamp01","boundAlpha","convertToPercentage","pad2","rgbToHsl","hue2rgb","rgbToHsv","rgbToHex","allow3Char","hex","convertHexToDecimal","parseIntFromHex","names","aliceblue","antiquewhite","aqua","aquamarine","azure","beige","bisque","black","blanchedalmond","blue","blueviolet","brown","burlywood","cadetblue","chartreuse","chocolate","coral","cornflowerblue","cornsilk","crimson","cyan","darkblue","darkcyan","darkgoldenrod","darkgray","darkgreen","darkgrey","darkkhaki","darkmagenta","darkolivegreen","darkorange","darkorchid","darkred","darksalmon","darkseagreen","darkslateblue","darkslategray","darkslategrey","darkturquoise","darkviolet","deeppink","deepskyblue","dimgray","dimgrey","dodgerblue","firebrick","floralwhite","forestgreen","fuchsia","gainsboro","ghostwhite","goldenrod","gold","gray","green","greenyellow","grey","honeydew","hotpink","indianred","indigo","ivory","khaki","lavenderblush","lavender","lawngreen","lemonchiffon","lightblue","lightcoral","lightcyan","lightgoldenrodyellow","lightgray","lightgreen","lightgrey","lightpink","lightsalmon","lightseagreen","lightskyblue","lightslategray","lightslategrey","lightsteelblue","lightyellow","lime","limegreen","linen","magenta","maroon","mediumaquamarine","mediumblue","mediumorchid","mediumpurple","mediumseagreen","mediumslateblue","mediumspringgreen","mediumturquoise","mediumvioletred","midnightblue","mintcream","mistyrose","moccasin","navajowhite","navy","oldlace","olive","olivedrab","orange","orangered","orchid","palegoldenrod","palegreen","paleturquoise","palevioletred","papayawhip","peachpuff","peru","pink","plum","powderblue","purple","rebeccapurple","red","rosybrown","royalblue","saddlebrown","salmon","sandybrown","seagreen","seashell","sienna","silver","skyblue","slateblue","slategray","slategrey","snow","springgreen","steelblue","tan","teal","thistle","tomato","turquoise","violet","wheat","white","whitesmoke","yellow","yellowgreen","inputToRGB","rgb","ok","format","named","matchers","rgba","hsl","hsla","hsv","hsva","hex8","hex6","hex4","hex3","stringInputToObject","isValidCSSUnit","substr","mod","hsvToRgb","hslToRgb","CSS_UNIT","PERMISSIVE_MATCH3","PERMISSIVE_MATCH4","TinyColor","numberInputToObject","originalInput","roundA","gradientType","isValid","isDark","getBrightness","isLight","toRgb","getLuminance","RsRGB","GsRGB","BsRGB","pow","getAlpha","setAlpha","alpha","isMonochrome","toHsl","toHsv","toHsvString","toHslString","toHex","toHexString","toHex8","allow4Char","rgbaToHex","toHex8String","toHexShortString","allowShortChar","toRgbString","toPercentageRgb","fmt","toPercentageRgbString","rnd","toName","_i","formatSet","formattedString","hasAlpha","clone","lighten","amount","brighten","darken","tint","mix","shade","desaturate","saturate","greyscale","spin","hue","rgb1","rgb2","analogous","results","slices","part","ret","complement","monochromatic","res","modification","splitcomplement","onBackground","background","fg","triad","polyad","tetrad","increment","equals","Button","buttonStyle","_disabled","buttonColor","activeBgColor","hoverBgColor","textColor","disabledButtonColor","useButtonCustomStyle","_size","_type","_props","_plain","_round","_text","shouldAddSpace","handleClick","buttonGroupContext","ariaDisabled","slot","resetFields","useButton","buttonKls","buttonGroupProps","ButtonGroup","ElButton","PatchFlags","PatchFlags2","flattedChildren","vNodes","isVNode","subTree","shapeFlag","useOrderedChildren","childComponentName","orderedChildren","nodesMap","sortChildren","getOrderedChildren","IsolatedRenderer","render","ChildrenSorter","addChild","childNode","getVnode","originalFn","insertBefore","bind","anchor","childNodes","checkboxProps","indeterminate","checked","trueValue","falseValue","trueLabel","falseLabel","border","checkboxEmits","checkboxGroupContextKey","useCheckboxEvent","model","isLimitExceeded","hasOwnLabel","isDisabled","checkboxGroup","getLabeledValue","onClickRoot","emitChangeEvent","useCheckbox","isGroup","selfModel","changeEvent","useCheckboxModel","isChecked","checkboxButtonSize","checkboxSize","actualValue","toRaw","useCheckboxStatus","isLimitDisabled","useCheckboxDisabled","Checkbox","inputBindings","compKls","spanKls","$event","vModelCheckbox","CheckboxButton","activeStyle","fillValue","borderColor","boxShadow","labelKls","checkboxGroupProps","checkboxDefaultProps","checkboxGroupEmits","groupId","aliasProps","toRefs","newVal","oldValue","labelId","renderList","base","getOptionProps","CheckboxGroup","ElCheckbox","nodeList","startClick","handlers","documentHandler","createDocumentHandler","excludes","mouseup","mousedown","mouseUpTarget","mouseDownTarget","isBound","isTargetExists","isContainedByEl","isSelf","isTargetExcluded","isContainedByPopper","ClickOutside","beforeMount","bindingFn","oldHandlerIndex","findIndex","newHandler","emitChangeFn","collapseProps","accordion","expandIconPosition","beforeCollapse","collapseEmits","collapseContextKey","activeNames","setActiveNames","_activeNames","handleItemClick","shouldChange","useCollapse","rootKls","useCollapseDOM","Collapse","ElCollapseTransition","dataset","oldOverflow","paddingTop","oldPaddingTop","paddingBottom","oldPaddingBottom","on","beforeEnter","elExistsHeight","afterEnter","enterCancelled","beforeLeave","leave","afterLeave","leaveCancelled","toHandlers","collapseItemProps","ArrowRight","focusing","isActive","handleHeaderClick","handleEnterClick","collapse","isClick","closest","useCollapseItem","arrowKls","headKls","itemTitleKls","itemWrapperKls","itemContentKls","scopedContentId","scopedHeadId","useCollapseItemDOM","withKeys","CollapseItem","ElCollapse","ElCollapseItem","configProviderProps","a11y","card","experimentalFeatures","keyboardNavigation","messageConfig","overlayProps","mask","customMaskEvent","overlayClass","overlayEmits","ElOverlay","onMouseup","mousedownTarget","mouseupTarget","useSameTarget","STYLE","CLASS","PROPS","DEFAULT_DIALOG_TRANSITION","dialogContentProps","center","alignCenter","closeIcon","draggable","fullscreen","headerClass","bodyClass","footerClass","showClose","ariaLevel","dialogProps","appendToBody","beforeClose","destroyOnClose","closeOnClickModal","closeOnPressEscape","lockScroll","modal","modalPenetrable","openDelay","closeDelay","modalClass","trapFocus","headerAriaLevel","dialogEmits","opened","closed","openAutoFocus","closeAutoFocus","useLockscreen","hiddenCls","withoutHiddenClass","bodyWidth","outer","widthNoScroll","inner","widthWithScroll","getScrollBarWidth","bodyHasOverflow","bodyOverflowY","styleName","getStyle","drawerProps","resizable","withHeader","modalFade","drawerEmits","useResizable","initialWidth","Infinity","initialHeight","listenOrientation","includeScrollbar","innerWidth","innerHeight","useWindowSize","isHorizontal","sign","windowSize","getSize","startSize","isResizing","hasStartedDragging","onMouseUp","onMouseMove","pageX","pageY","offsetX","offsetY","cleanup2","drawerEl","getActualSize","ElDrawer","drawerRef","draggerRef","rendered","titleId","bodyId","onModalClick","onOpenAutoFocus","onCloseAutoFocus","onCloseRequested","handleClose","targetRef","lastPosition","openTimer","closeTimer","style2","varPrefix","_draggable","_alignCenter","_overflow","overlayDialogStyle","transitionConfig","baseConfig","config2","_mergeHook","userHook","defaultHook","doOpen","doClose","shouldCancel","useDialog","titleClass","footer","Collection","CollectionItem","dropdownProps","splitButton","hideOnClick","showTimeout","hideTimeout","command","divided","textValue","COLLECTION_NAME","COLLECTION_ITEM_NAME","COLLECTION_INJECTION_KEY","COLLECTION_ITEM_INJECTION_KEY","ElCollection","collectionRef","itemMap","getItems","collectionEl","orderedNodes","ElCollectionItem","collectionItemRef","collectionInjection","collectionItemEl","createCollectionWithScope","capitalize$1","popoverProps","popoverEmits","onUpdateVisible","tooltipRef","attachEvents","popover","directive","ElPopover","HORIZONTAL","VERTICAL","LayoutKeys","useWheel","atEndEdge","atStartEdge","layout","onWheelDelta","frameHandle","hasReachedEdge","offset2","onWheel","handle","cancelAnimationFrame","newOffset","getCell","orderBy","sortKey","sortMethod","sortBy","getKey","by","$value","order","_f","compare","getColumnById","columnId","column","columns","getColumnByCell","cell","matches","getRowIdentity","row","rowKey","getKeysMap","childrenKey","parseWidth","parseMinWidth","minWidth","toggleRowStatus","statusArr","tableTreeProps","selectable","rowIndex","_rowIndex","changed","getIndex","included","isRowSelectable","toggleStatus","getChildrenCount","row2","checkStrictly","childChanged","walkTreeNode","lazyKey","lazy","_walker","level","children2","removePopper","createTablePopper","tableOverflowTooltipProps","innerText","tooltipFormatterContent","tooltipFormatter","cellValue","slotContent","getTableOverflowTooltipProps","mergedProps","refs","tableWrapper","exposed","scrollContainer","currentRemovePopper","getCurrentColumns","getColSpan","colSpan","isFixedColumn","fixed","store","realColumns","after","curColumns","fixedLayout","fixedLeafColumnsLength","rightFixedLeafColumnsLength","getFixedColumnsClass","classes","isLeft","getOffset","realWidth","getFixedColumnOffset","ensurePosition","doFlattenColumns","useWatcher","tableSize","_data","isComplex","_columns","originColumns","fixedColumns","rightFixedColumns","leafColumns","fixedLeafColumns","rightFixedLeafColumns","leafColumnsLength","isAllSelected","selection","reserveSelection","selectOnIndeterminate","filters","filteredData","sortingColumn","sortProp","sortOrder","hoverRow","selectedMap","scheduleLayout","tableLayout","tableHeaderRef","updateFixedColumnStyle","updateChildFixed","childColumn","updateColumns","selectColumn","selectColFixLeft","notFixedColumns","leafColumns2","fixedLeafColumns2","rightFixedLeafColumns2","needUpdateColumns","doLayout","debouncedUpdateLayout","isSelected","rowKey2","treeData","childKey","updateSort","execFilter","sourceData","filterMethod","execSort","sortable","sortData","setExpandRowKeys","toggleRowExpansion","updateExpandRows","expandStates","isRowExpanded","watcherData","defaultExpandAll","expandRows","expandRowsMap","rowId","expanded","rowKeys","assertRowKey","keysMap","cur","useExpand","updateTreeExpandKeys","toggleTreeExpansion","updateTreeData","updateKeyChildren","loadOrToggle","treeStates","expandRowKeys","indent","lazyTreeNodeMap","lazyColumnIdentifier","childrenColumnName","normalizedData","normalize","normalizedLazyNode","currentRowKey","parentId","ifChangeExpandRowKeys","ifExpandAll","normalizedLazyNode_","newTreeData","oldTreeData","rootLazyRowKeys","getExpanded","loaded","lazyKeys","lazyNodeChildren","updateTableScrollY","isUseLazy","oldExpanded","loadData","treeNode","load","lazy2","useTree","updateCurrentRowData","updateCurrentRow","setCurrentRowKey","currentData","_currentRowKey","currentRow","restoreCurrentRowKey","setCurrentRowByKey","_currentRow","oldCurrentRow","useCurrent","clearSelection","oldSelection","cleanSelection","deleted","dataMap","newSelection","getSelectionRows","toggleRowSelection","selected","emitChange","ignoreSelectable","treeProps","_toggleAllSelection","selectionChanged","childrenCount","toggleAllSelection","updateAllSelected","selectedCount","checkSelectedStatus","data2","_a3","isAllSelected_","updateFilters","filters_","col","columnKey","execQuery","columnKeys","panels","filterPanels","columns_","getColumnByKey","filteredValue","commit","silent","multi","clearSort","setExpandRowKeysAdapter","toggleRowExpansionAdapter","updateOrderFns","replaceColumn","sortColumn","no","getColumnIndex","pre","InitialStateMap","createStore","watcher","mutations","setData","dataInstanceChanged","$ready","insertColumn","updateColumnOrder","newColumns","removeColumn","updateFnIndex","init","column2","changeSortCondition","columnValue","propValue","orderValue","filterChange","_states","newFilters","rowSelectedChanged","setHoverRow","setCurrentRow","mutations2","updateScrollY","useStore","handleValue","getArrKeysValue","proxyTableProps","propsKey","storeKey","keyList","TableLayout","observers","fit","showHeader","scrollX","scrollY","fixedWidth","rightFixedWidth","gutterWidth","scrollBarRef","vnode","prevScrollY","setHeight","updateElsHeight","setMaxHeight","getFlattenColumns","flattenColumns","isColumnGroup","notifyObservers","headerDisplayNone","elm","headerChild","updateColumnsWidth","bodyMinWidth","flexColumns","totalFlexWidth","flexWidthPerPixel","noneFirstWidth","flexWidth","resizeState","addObserver","removeObserver","onColumnsChange","onScrollableChange","ElCheckboxGroup","components","ArrowDown","ArrowUp","directives","upDataColumn","tooltipVisible","tooltip","filterClassName","filterValue","multiple","filterMultiple","filteredValue2","popperPaneRef","handleConfirm","handleReset","handleSelect","_filterValue","showFilterPanel","hideFilterPanel","FilterPanel","_component_el_checkbox","resolveComponent","_component_el_checkbox_group","_component_el_scrollbar","_component_arrow_up","_component_arrow_down","_component_el_icon","_component_el_tooltip","_directive_click_outside","resolveDirective","filterOpened","useLayoutObserver","cols","columnsMap","ths","th","TABLE_INJECTION_KEY","getAllColumns","convertToRows","maxLevel","traverse","subColumn","rowSpan","isSubColumn","TableHeader","defaultSort","appendFilterPanelTo","allowDragLastColumn","isTableLayoutAuto","saveIndexSelection","theadRef","delayId","handleHeaderContextMenu","handleMouseDown","handleMouseMove","handleMouseOut","handleSortClick","handleFilterClick","draggingColumn","dragging","dragState","givenOrder","sortOrders","toggleOrder","clickTarget","filterable","tableEl","tableLeft","columnEl","columnRect","minLeft","startMouseLeft","clientX","startLeft","startColumnLeft","resizeProxy","ondragstart","handleMouseMove2","event2","deltaLeft","proxyLeft","handleMouseUp","columnWidth","cursor","rect","bodyStyle","isLastTh","lastElementChild","allowDarg","useEvent","getHeaderRowStyle","getHeaderRowClass","getHeaderCellStyle","getHeaderCellClass","headerRowStyle","headerRowClassName","columnIndex","headerCellStyles","headerCellStyle","fixedStyle","fixedClasses","headerAlign","labelClassName","headerCellClassName","useStyle","columnRows","useUtils","$parent","subColumns","cellIndex","_class","colspan","rowspan","onMousemove","onMouseout","renderHeader","$index","_self","filterPlacement","renderFilterIcon","isGreaterThan","epsilon","useEvents","tooltipContent","tooltipTrigger","handleEvent","toggleRowClassByCell","nextSibling","handleDoubleClick","handleContextMenu","handleCellMouseEnter","tooltipOptions","_g","_h","hoverState","cellChild","range","createRange","setStart","setEnd","rangeWidth","rangeHeight","cellChildWidth","cellChildHeight","paddingLeft","paddingRight","getPadding","verticalPadding","textContent","handleCellMouseLeave","oldHoverState","TdWrapper","useRender","getRowStyle","getRowClass","getCellStyle","getCellClass","getSpan","getColspanRealWidth","rowStyle","displayIndex","highlightCurrentRow","stripe","rowClassName","cellStyle","cellStyles","align","cellClassName","spanMethod","widthArr","useStyles","firstDefaultColumnIndex","getKeyOfRow","rowRender","treeRowData","tooltipEffect","rowClasses","displayStyle","onDblclick","columnData","noLazyChildren","baseKey","patchKey","rawColumnKey","mergedTooltipOptions","showOverflowTooltip","cellChildren","_cellIndex","renderCell","wrappedRowRender","tr","renderExpanded","console","preserveExpandedContent","tmp","parent2","innerTreeRowData","nodes2","defaultProps","highlight","TableBody","hoveredCellList","oldVal","rowNum","control","_b2","preChildNodes","oldRow","newRow","leftFixedLeafCount","rightFixedLeafCount","columnsCount","leftFixedCount","rightFixedCount","useMapState","getCellClasses","columns2","getCellStyles","TableFooter","summaryMethod","sums","precisions","notNumber","decimal","precision","curr","toFixed","resizeProxyVisible","headerHeight","tableWidth","tableScrollHeight","bodyScrollHeight","headerScrollHeight","footerScrollHeight","appendScrollHeight","shouldUpdateHeight","tableBodyStyles","syncPosition","bindEvents","tableHeader","headerWrapper","flexible","setScrollClass","setScrollClassByEl","scrollingNoneClass","hasScrollClass","footerWrapper","resizeListener","bodyWrapper","shouldUpdateLayout","oldWidth","oldHeight","oldHeaderHeight","appendWrapper","bodyWidth_","emptyBlockStyle","scrollbarStyle","setDragVisible","handleHeaderFooterMousewheel","pixelX","pixelY","scrollbarViewStyle","verticalAlign","useKeyRender","columnsWrapper","MutationObserver","childList","subtree","initWatchDom","showSummary","hasChildren","scrollbarAlwaysOn","scrollbarTabindex","nativeScrollbar","hColgroup","isAuto","propsData","getPropsData","NaN","documentMode","ieCompatibilityMode","ie64","firefox","opera","webkit","safari","chrome","windows","osx","linux","iphone","mobile","nativeApp","android","ipad","canUseDOM","implementation","hasFeature","wheelDelta","wheelDeltaY","wheelDeltaX","HORIZONTAL_AXIS","deltaY","deltaX","deltaMode","spinX","spinY","getEventType","Mousewheel","normalized","normalizeWheel","Reflect","mousewheel","tableIdSeed","Table","isEmpty","setScrollPosition","yCoord","useScrollbar","tableId","computedSumText","computedEmptyText","_component_hColgroup","_component_table_header","_component_table_body","_component_table_footer","_directive_mousewheel","cellpadding","cellspacing","onSetDragVisible","defaultClassNames","expand","cellStarts","cellForced","renderExpand","defaultRenderCell","getAllAliases","aliases","owner","realAlign","realHeaderAlign","columnOrTableParent","vParent","hasTreeColumn","treeDataValue","realMinWidth","setColumnWidth","setColumnForcedProps","getDefaultClassName","forceClass","setColumnRenders","columnConfig","originRenderCell","vnodes","firstUserColumnIndex","createPlaceholder","expandClasses","treeCellPrefix","props2","check","checkSubColumn","getColumnElIndex","columnIdSeed","ElTableColumn","registerNormalWatchers","registerComplexWatchers","props_","allAliases","defaults","mergeOptions","funcs","compose","chains","hiddenColumns","renderDefault","vnode2","patchFlag","ElTable","TableColumn","ElTableColumn$1","tabsRootContextKey","tabBarProps","tabs","tabRefs","COMPONENT_NAME","TabBar","rootTabs","barStyle","tabSize","sizeName","tabPosition","sizeDir","paneName","active","tabStyles","getBarStyle","tabObservers","barObserver","tabNavProps","panes","currentName","editable","stretch","tabNavEmits","tabClick","tabName","ev","tabRemove","TabNav","visibilityState","useDocumentVisibility","focused","hasFocus","useWindowFocus","navScroll$","nav$","el$","tabRefsMap","tabBarRef","scrollable","navOffset","isFocus","tracker","navStyle","navContainerWidth","navContainerHeight","navWidth","navHeight","navContainerSize","navSize","lower","upper","baseClamp","scrollPrev","containerSize","currentOffset","scrollNext","navSize2","scrollToActiveTab","nav","activeTab","navScroll","activeTabBounding","navScrollBounding","maxOffset","changeTab","step","tabList","nextIndex","setFocus","removeFocus","visibility2","focused2","focusActiveTab","tabListRef","scheduleRender","scrollBtn","ArrowLeft","pane","closable","isClosable","btnClose","tabLabelContent","setRefs","tabsProps","addable","isPaneName","tabsEmits","tabChange","edit","action","tabAdd","Tabs","isVertical","registerPane","unregisterPane","PanesSorter","setCurrentName","canLeave","isFocusInsidePane","handleTabClick","handleTabRemove","handleTabAdd","swapChildren","actualFirstChild","firstChild","before","tabNavRef","addSlot","newButton","Plus","header","onTabClick","onTabRemove","$stable","onVnodeMounted","onVnodeUpdated","Tabs$1","tabPaneProps","TabPane","tabsRoot","paneRef","eagerComputed","shouldBeRender","onBeforeUpdate","ElTabs","ElTabPane","messageTypes","messagePlacement","MESSAGE_DEFAULT_PLACEMENT","messageDefaults","customClass","dangerouslyUseHTMLString","duration","grouping","repeatNum","messageProps","placementInstances","shallowReactive","getLastOffset","instances","getInstance","MessageConstructor","isStartTransition","sizeFallback","useGlobalComponentSettings","messageRef","stopTimer","badgeType","typeClass","iconComponent","lastOffset","getOffsetOrSpace","horizontalClass","verticalProperty","customStyle","startTimer","clearTimer","seed","normalizeOptions","appendTo2","normalizeAppendTo","normalizePlacement","createMessage","__objRest","userOnClose","closeMessage","onDestroy","_context","firstElementChild","instance2","closeAll","closeAllByPlacement","ElMessage","withInstallFunction","iterator","kindOf","thing","kindOfTest","typeOfTest","isArrayBuffer","isDate","isFile","isBlob","isFileList","isURLSearchParams","isReadableStream","isRequest","isResponse","isHeaders","allOwnKeys","getOwnPropertyNames","findKey","_key","isContextDefined","TypedArray","isHTMLForm","isRegExp","reduceDescriptors","reducer","descriptors","reducedDescriptors","descriptor","isAsyncFn","_setImmediate","setImmediateSupported","setImmediate","postMessageSupported","postMessage","token","callbacks","shift","asap","queueMicrotask","utils$b","isFormData","kind","FormData","isArrayBufferView","isView","isEmptyObject","isStream","pipe","caseless","skipUndefined","targetKey","extend","stripBOM","inherits","superConstructor","toFlatObject","sourceObj","destObj","propFilter","merged","searchString","toArray","forEachEntry","_iterator","done","matchAll","regExp","hasOwnProp","freezeMethods","toObjectSet","arrayOrString","delimiter","define","toCamelCase","p1","p2","toFiniteNumber","isFinite","isSpecCompliantForm","toJSONObject","visit","reducedValue","isThenable","isIterable","AxiosError","request","response","captureStackTrace","status","utils","toJSON","fileName","lineNumber","columnNumber","customProps","axiosError","msg","errCode","cause","isVisitable","removeBrackets","renderKey","dots","predicates","toFormData","formData","metaTokens","indexes","visitor","defaultVisitor","useBlob","Blob","convertValue","toISOString","isFlatArray","exposedHelpers","build","encode","charMap","encodeURIComponent","AxiosURLSearchParams","_pairs","buildURL","url","_encode","serialize","serializeFn","serializedParams","hashmarkIndex","encoder","InterceptorManager","use","fulfilled","rejected","synchronous","runWhen","eject","transitionalDefaults","silentJSONParsing","forcedJSONParsing","clarifyTimeoutError","platform$1","isBrowser","URLSearchParams","protocols","hasBrowserEnv","_navigator","hasStandardBrowserEnv","product","hasStandardBrowserWebWorkerEnv","WorkerGlobalScope","importScripts","origin","location","platform","formDataToJSON","buildPath","isNumericKey","isLast","arrayToObject","parsePropPath","transitional","adapter","transformRequest","headers","contentType","getContentType","hasJSONContentType","isObjectPayload","setContentType","helpers","isNode","toURLEncodedForm","formSerializer","_FormData","rawValue","parse","stringifySafely","transformResponse","JSONRequested","responseType","strictJSONParsing","parseReviver","ERR_BAD_RESPONSE","timeout","xsrfCookieName","xsrfHeaderName","maxContentLength","maxBodyLength","validateStatus","common","Accept","method","ignoreDuplicateOf","$internals","normalizeHeader","normalizeValue","matchHeaderValue","isHeaderNameFilter","AxiosHeaders$1","valueOrRewrite","rewrite","setHeader","_value","_header","_rewrite","lHeader","setHeaders","rawHeaders","parsed","line","substring","parseHeaders","dest","tokens","tokensRE","parseTokens","matcher","deleteHeader","char","formatHeader","targets","asStrings","getSetCookie","accessor","accessors","defineAccessor","accessorName","methodName","arg3","buildAccessors","transformData","fns","AxiosHeaders","isCancel","__CANCEL__","CanceledError","ERR_CANCELED","settle","reject","ERR_BAD_REQUEST","mapped","headerValue","progressEventReducer","isDownloadStream","freq","bytesNotified","_speedometer","samplesCount","bytes","timestamps","firstSampleTS","head","tail","chunkLength","startedAt","bytesCount","passed","speedometer","timestamp","threshold","invoke","throttle","lengthComputable","progressBytes","rate","progress","estimated","progressEventDecorator","throttled","asyncDecorator","isURLSameOrigin","isMSIE","URL","protocol","port","cookies","write","expires","domain","secure","cookie","toGMTString","read","decodeURIComponent","buildFullPath","baseURL","requestedURL","allowAbsoluteUrls","isRelativeUrl","relativeURL","combineURLs","headersToObject","config1","getMergedValue","mergeDeepProperties","valueFromConfig2","defaultToConfig2","mergeDirectKeys","mergeMap","paramsSerializer","timeoutMessage","withCredentials","withXSRFToken","onUploadProgress","onDownloadProgress","decompress","beforeRedirect","transport","httpAgent","httpsAgent","cancelToken","socketPath","responseEncoding","configValue","resolveConfig","newConfig","auth","btoa","username","password","unescape","getHeaders","formHeaders","allowedHeaders","xsrfValue","xhrAdapter","XMLHttpRequest","_config","requestData","requestHeaders","onCanceled","uploadThrottled","downloadThrottled","flushUpload","flushDownload","unsubscribe","signal","onloadend","responseHeaders","getAllResponseHeaders","responseText","statusText","onreadystatechange","readyState","responseURL","onabort","ECONNABORTED","onerror","ERR_NETWORK","ontimeout","timeoutErrorMessage","ETIMEDOUT","setRequestHeader","abort","subscribe","aborted","parseProtocol","send","composeSignals","signals","controller","AbortController","reason","streamChunk","chunk","chunkSize","pos","readBytes","__asyncGenerator","more","temp","iter","__forAwait","readStream","__await","__yieldStar","return","stream","asyncIterator","reader","getReader","trackStream","onProgress","onFinish","_onFinish","ReadableStream","pull","loadedBytes","enqueue","highWaterMark","globalFetchAPI","Request","Response","TextEncoder","factory","fetch","envFetch","isFetchSupported","isRequestSupported","isResponseSupported","isReadableStreamSupported","encodeText","supportsRequestStream","duplexAccessed","hasContentType","duplex","supportsResponseStream","resolvers","ERR_NOT_SUPPORT","resolveBodyLength","getContentLength","_request","getBodyLength","fetchOptions","_fetch","composedSignal","toAbortSignal","requestContentLength","contentTypeHeader","isCredentialsSupported","resolvedOptions","credentials","isStreamResponse","responseContentLength","responseData","seedCache","getFetch","seeds","knownAdapters","http","xhr","fetchAdapter.getFetch","renderReason","isResolvedHandle","adapters","nameOrAdapter","rejectedReasons","reasons","throwIfCancellationRequested","throwIfRequested","dispatchRequest","VERSION","validators","deprecatedWarnings","formatMessage","opt","desc","ERR_DEPRECATED","spelling","correctSpelling","assertOptions","schema","allowUnknown","ERR_BAD_OPTION_VALUE","ERR_BAD_OPTION","Axios$1","instanceConfig","interceptors","configOrUrl","dummy","boolean","function","baseUrl","withXsrfToken","contextHeaders","requestInterceptorChain","synchronousRequestInterceptors","interceptor","responseInterceptorChain","promise","chain","onFulfilled","onRejected","getUri","Axios","generateHTTPMethod","isForm","HttpStatusCode","Continue","SwitchingProtocols","Processing","EarlyHints","Ok","Created","Accepted","NonAuthoritativeInformation","NoContent","ResetContent","PartialContent","MultiStatus","AlreadyReported","ImUsed","MultipleChoices","MovedPermanently","Found","SeeOther","NotModified","UseProxy","Unused","TemporaryRedirect","PermanentRedirect","BadRequest","Unauthorized","PaymentRequired","Forbidden","NotFound","MethodNotAllowed","NotAcceptable","ProxyAuthenticationRequired","RequestTimeout","Conflict","Gone","LengthRequired","PreconditionFailed","PayloadTooLarge","UriTooLong","UnsupportedMediaType","RangeNotSatisfiable","ExpectationFailed","ImATeapot","MisdirectedRequest","UnprocessableEntity","Locked","FailedDependency","TooEarly","UpgradeRequired","PreconditionRequired","TooManyRequests","RequestHeaderFieldsTooLarge","UnavailableForLegalReasons","InternalServerError","NotImplemented","BadGateway","ServiceUnavailable","GatewayTimeout","HttpVersionNotSupported","VariantAlsoNegotiates","InsufficientStorage","LoopDetected","NotExtended","NetworkAuthenticationRequired","axios","createInstance","defaultConfig","CancelToken","executor","resolvePromise","_listeners","onfulfilled","_resolve","Cancel","all","promises","spread","isAxiosError","payload","formToJSON","getAdapter","async","breaks","extensions","gfm","hooks","pedantic","renderer","tokenizer","walkTokens","caret","getRegex","codeRemoveIndent","outputLinkReplace","indentCodeCompensation","beginningSpace","endingHash","startingSpaceChar","endingSpaceChar","nonSpaceChar","newLineCharGlobal","tabCharGlobal","multipleSpaceGlobal","blankLine","doubleBlankLine","blockquoteStart","blockquoteSetextReplace","blockquoteSetextReplace2","listReplaceTabs","listReplaceNesting","listIsTask","listReplaceTask","anyLine","hrefBrackets","tableDelimiter","tableAlignChars","tableRowBlankLine","tableAlignRight","tableAlignCenter","tableAlignLeft","startATag","endATag","startPreScriptTag","endPreScriptTag","startAngleBracket","endAngleBracket","pedanticHrefTitle","unicodeAlphaNumeric","escapeTest","escapeReplace","escapeTestNoEncode","escapeReplaceNoEncode","unescapeTest","percentDecode","findPipe","splitPipe","slashPipe","carriageReturn","spaceLine","notSpaceStart","endingNewline","listItemRegex","nextBulletRegex","hrRegex","fencesBeginRegex","headingBeginRegex","htmlBeginRegex","blockquote","def","fences","heading","hr","html","lheading","newline","paragraph","Ze","Ge","Qe","_backpedal","anyPunctuation","autolink","blockSkip","br","del","emStrongLDelim","emStrongRDelimAst","emStrongRDelimUnd","escape","nolink","punctuation","reflink","reflinkSearch","Xe","normal","Je","encodeURI","inLink","raw","inlineTokens","__publicField","rules","codeBlockStyle","inline","lexer","blockTokens","ordered","loose","items","repeat","trimStart","search","task","trimEnd","inRawBlock","emStrong","codespan","inlineText","escaped","links","inlineQueue","lex","lexInline","src","startBlock","lastIndexOf","emStrongMask","startInline","parseInline","listitem","checkbox","tablecell","tablerow","strong","textRenderer","renderers","preprocess","postprocess","processAllTokens","provideLexer","provideParser","parseMarkdown","childTokens","flat","passThroughHooks","passThroughHooksRespectAsync","onError","getDefaults","Parser","Renderer","TextRenderer","Lexer","Tokenizer","Hooks","setPrototypeOf","isFrozen","getOwnPropertyDescriptor","seal","construct","_len","Func","_len2","_key2","arrayForEach","unapply","arrayLastIndexOf","arrayPop","arraySplice","stringToLowerCase","stringToString","stringMatch","stringReplace","stringIndexOf","stringTrim","objectHasOwnProperty","regExpTest","typeErrorCreate","_len4","_key4","_len3","_key3","addToSet","transformCaseFunc","lcElement","cleanArray","newObject","lookupGetter","html$1","svg$1","svgFilters","svgDisallowed","mathMl$1","mathMlDisallowed","svg","mathMl","xml","MUSTACHE_EXPR","ERB_EXPR","TMPLIT_EXPR","DATA_ATTR","ARIA_ATTR","IS_ALLOWED_URI","IS_SCRIPT_OR_DATA","ATTR_WHITESPACE","DOCTYPE_NAME","CUSTOM_ELEMENT","EXPRESSIONS","__proto__","NODE_TYPE","purify","createDOMPurify","DOMPurify","removed","originalDocument","currentScript","DocumentFragment","HTMLTemplateElement","Node","NamedNodeMap","MozNamedAttrMap","HTMLFormElement","DOMParser","trustedTypes","ElementPrototype","cloneNode","getNextSibling","getChildNodes","getParentNode","template","trustedTypesPolicy","emptyHTML","createNodeIterator","createDocumentFragment","getElementsByTagName","importNode","afterSanitizeAttributes","afterSanitizeElements","afterSanitizeShadowDOM","beforeSanitizeAttributes","beforeSanitizeElements","beforeSanitizeShadowDOM","uponSanitizeAttribute","uponSanitizeElement","uponSanitizeShadowNode","createHTMLDocument","IS_ALLOWED_URI$1","ALLOWED_TAGS","DEFAULT_ALLOWED_TAGS","ALLOWED_ATTR","DEFAULT_ALLOWED_ATTR","CUSTOM_ELEMENT_HANDLING","tagNameCheck","attributeNameCheck","allowCustomizedBuiltInElements","FORBID_TAGS","FORBID_ATTR","EXTRA_ELEMENT_HANDLING","tagCheck","attributeCheck","ALLOW_ARIA_ATTR","ALLOW_DATA_ATTR","ALLOW_UNKNOWN_PROTOCOLS","ALLOW_SELF_CLOSE_IN_ATTR","SAFE_FOR_TEMPLATES","SAFE_FOR_XML","WHOLE_DOCUMENT","SET_CONFIG","FORCE_BODY","RETURN_DOM","RETURN_DOM_FRAGMENT","RETURN_TRUSTED_TYPE","SANITIZE_DOM","SANITIZE_NAMED_PROPS","KEEP_CONTENT","IN_PLACE","USE_PROFILES","FORBID_CONTENTS","DEFAULT_FORBID_CONTENTS","DATA_URI_TAGS","DEFAULT_DATA_URI_TAGS","URI_SAFE_ATTRIBUTES","DEFAULT_URI_SAFE_ATTRIBUTES","MATHML_NAMESPACE","SVG_NAMESPACE","HTML_NAMESPACE","NAMESPACE","IS_EMPTY_INPUT","ALLOWED_NAMESPACES","DEFAULT_ALLOWED_NAMESPACES","MATHML_TEXT_INTEGRATION_POINTS","HTML_INTEGRATION_POINTS","COMMON_SVG_AND_HTML_ELEMENTS","PARSER_MEDIA_TYPE","SUPPORTED_PARSER_MEDIA_TYPES","CONFIG","formElement","isRegexOrFunction","testValue","_parseConfig","ADD_URI_SAFE_ATTR","ADD_DATA_URI_TAGS","ALLOWED_URI_REGEXP","ADD_TAGS","ADD_ATTR","tbody","TRUSTED_TYPES_POLICY","createHTML","createScriptURL","purifyHostElement","createPolicy","ATTR_NAME","policyName","scriptUrl","_createTrustedTypesPolicy","ALL_SVG_TAGS","ALL_MATHML_TAGS","_forceRemove","_removeAttribute","attribute","getAttributeNode","_initDocument","dirty","doc","leadingWhitespace","dirtyPayload","parseFromString","createDocument","createTextNode","_createNodeIterator","SHOW_COMMENT","SHOW_TEXT","SHOW_PROCESSING_INSTRUCTION","SHOW_CDATA_SECTION","_isClobbered","hasChildNodes","_isNode","_executeHooks","hook","_sanitizeElements","allowedTags","_isBasicCustomElement","childClone","__removalCount","parentTagName","_checkValidNamespace","expr","_isValidAttribute","lcTag","lcName","_sanitizeAttributes","hookEvent","attrName","attrValue","keepAttr","allowedAttributes","forceKeepAttr","attr","initValue","getAttributeType","setAttributeNS","_sanitizeShadowDOM","fragment","shadowNode","shadowIterator","sanitize","importedNode","returnNode","nodeIterator","shadowroot","shadowrootmode","serializedHTML","outerHTML","doctype","setConfig","clearConfig","isValidAttribute","addHook","entryPoint","hookFunction","removeHook","removeHooks","removeAllHooks","deepFreeze","mode","isMatchIgnored","ignoreMatch","escapeHTML","inherit$1","original","objects","emitsWrappingTags","HTMLRenderer","parseTree","classPrefix","walk","addText","openNode","pieces","scopeToCSSClass","span","closeNode","newNode","TokenTree","rootNode","closeAllNodes","builder","_walk","_collapse","TokenTreeEmitter","startScope","endScope","__addSublanguage","emitter","toHTML","finalize","lookahead","anyNumberOfTimes","optional","either","stripOptionsFromArgs","countMatchGroups","BACKREF_RE","_rewriteBackreferences","regexps","joinWith","numCaptures","regex","out","IDENT_RE","UNDERSCORE_IDENT_RE","NUMBER_RE","C_NUMBER_RE","BINARY_NUMBER_RE","BACKSLASH_ESCAPE","begin","relevance","APOS_STRING_MODE","illegal","QUOTE_STRING_MODE","COMMENT","modeOptions","excludeBegin","ENGLISH_WORD","C_LINE_COMMENT_MODE","C_BLOCK_COMMENT_MODE","HASH_COMMENT_MODE","NUMBER_MODE","C_NUMBER_MODE","BINARY_NUMBER_MODE","REGEXP_MODE","TITLE_MODE","UNDERSCORE_TITLE_MODE","METHOD_GUARD","MODES","END_SAME_AS_BEGIN","resp","_beginMatch","MATCH_NOTHING_RE","PHRASAL_WORDS_MODE","RE_STARTERS_RE","SHEBANG","beginShebang","binary","skipIfHasPrecedingDot","scopeClassName","_parent","beginKeywords","__beforeBegin","keywords","compileIllegal","compileMatch","compileRelevance","beforeMatchExt","beforeMatch","starts","originalMode","endsParent","COMMON_KEYWORDS","compileKeywords","rawKeywords","caseInsensitive","scopeName","compiledKeywords","compileList","keywordList","keyword","scoreForKeyword","providedScore","commonKeyword","seenDeprecations","log","deprecated","MultiClassError","remapScopeNames","regexes","scopeNames","positions","_emit","_multi","MultiClass","beginScope","scopeSugar","_wrap","skip","returnBegin","beginMultiClass","excludeEnd","returnEnd","endMultiClass","compileLanguage","language","langRe","case_insensitive","unicodeRegex","MultiRegex","matchIndexes","matchAt","addRule","compile","terminators","matcherRe","ResumableMultiRegex","multiRegexes","regexIndex","getMatcher","resumingScanAtSamePosition","considerAll","m2","compilerExtensions","classNameAliases","compileMode","cmode","isCompiled","ext","keywordPattern","$pattern","keywordPatternRe","beginRe","endsWithParent","endRe","terminatorEnd","illegalRe","variants","cachedVariants","variant","dependencyOnParent","expandOrCloneMode","mm","term","rule","buildModeRegex","HTMLInjectionError","inherit","NO_MATCH","HLJS","hljs","languages","plugins","SAFE_MODE","LANGUAGE_NOT_FOUND","PLAINTEXT_LANGUAGE","disableAutodetect","ignoreUnescapedHTML","throwUnescapedHTML","noHighlightRe","languageDetectRe","cssSelector","__emitter","shouldNotHighlight","languageName","codeOrLanguageName","optionsOrCode","ignoreIllegals","fire","_highlight","codeToHighlight","continuation","keywordHits","keywordData","matchText","processKeywords","modeBuffer","buf","word","keywordRelevance","cssClass","emitKeyword","processBuffer","subLanguage","continuations","_top","highlightAuto","_emitter","processSubLanguage","emitMultiClass","klass","startNewMode","endOfMode","matchPlusRemainder","matched","lexeme","doIgnore","resumeScanAtSamePosition","doEndMatch","endMode","lastMatch","processLexeme","textBeforeMatch","badRule","newMode","beforeCallbacks","doBeginMatch","processed","iterations","getLanguage","md","processContinuations","__emitTokens","processedCount","_illegalBy","resultSoFar","errorRaised","languageSubset","plaintext","justTextHighlightResult","autoDetection","sorted","supersetOf","best","secondBest","highlightElement","blockLanguage","highlighted","currentLang","resultLang","updateClassName","wantsHighlight","highlightAll","registerAliases","aliasList","alias","plugin","highlightBlock","configure","userOptions","initHighlighting","initHighlightingOnLoad","registerLanguage","languageDefinition","error$1","rawDefinition","unregisterLanguage","listLanguages","addPlugin","upgradePluginAPI","removePlugin","debugMode","safeMode","versionString","newInstance","core","HighlightJS","KEYWORDS","LITERALS","TYPES","ERROR_TYPES","BUILT_IN_GLOBALS","BUILT_IN_VARIABLES","BUILT_INS","javascript","IDENT_RE$1","FRAGMENT","XML_TAG","isTrulyOpeningTag","afterMatchIndex","nextChar","hasClosingTag","afterMatch","KEYWORDS$1","literal","built_in","decimalDigits","frac","decimalInteger","NUMBER","SUBST","HTML_TEMPLATE","CSS_TEMPLATE","GRAPHQL_TEMPLATE","TEMPLATE_STRING","SUBST_INTERNALS","SUBST_AND_COMMENTS","PARAMS_CONTAINS","PARAMS","CLASS_OR_EXTENDS","CLASS_REFERENCE","FUNCTION_DEFINITION","FUNCTION_CALL","PROPERTY_ACCESS","GETTER_OR_SETTER","FUNC_LEAD_IN_RE","FUNCTION_VARIABLE","typescript","tsLanguage","INTERFACE","DECORATOR","swapMode","indx","ATTRIBUTE_HIGHLIGHT","OPTIONAL_KEY_OR_ARGUMENT","python","RESERVED_WORDS","PROMPT","LITERAL_BRACKET","STRING","digitpart","pointfloat","COMMENT_TYPE","json","LITERALS_MODE","sql","COMMENT_MODE","RESERVED_FUNCTIONS","FUNCTIONS","kws_to_regex","kw","MULTI_WORD_KEYWORDS","exceptions","when","qualifyFn","reduceRelevancy","TAG_NAME_RE","XML_ENTITIES","XML_META_KEYWORDS","XML_META_PAR_KEYWORDS","APOS_META_STRING_MODE","QUOTE_META_STRING_MODE","TAG_INTERNALS","TAGS","MEDIA_FEATURES","PSEUDO_CLASSES","PSEUDO_ELEMENTS","ATTRIBUTES","css","modes","IMPORTANT","BLOCK_COMMENT","HEXCOLOR","FUNCTION_DISPATCH","ATTRIBUTE_SELECTOR_MODE","CSS_NUMBER_MODE","CSS_VARIABLE","STRINGS","keyframePosition","hexDigits","NUMERIC","recurRegex","substitution","java","JAVA_IDENT_RE","GENERIC_IDENT_RE","ANNOTATION","cpp","DECLTYPE_AUTO_RE","NAMESPACE_RE","FUNCTION_TYPE_RE","CPP_PRIMITIVE_TYPES","NUMBERS","PREPROCESSOR","FUNCTION_TITLE","CPP_KEYWORDS","_type_hints","_hint","EXPRESSION_CONTAINS","EXPRESSION_CONTEXT","FUNCTION_DECLARATION","bash","VAR","BRACED_VAR","HERE_DOC","QUOTE_STRING","ARITHMETIC","KNOWN_SHEBANG","FUNCTION","shell","yaml","URI_CHARACTERS","CONTAINER_STRING","TIMESTAMP","VALUE_CONTAINER","OBJECT","ARRAY","VALUE_MODES","markdown","INLINE_HTML","LINK","BOLD","ITALIC","BOLD_WITHOUT_ITALIC","ITALIC_WITHOUT_BOLD","CONTAINABLE","contentKey","simpleHash","ChartView","defineAsyncComponent","PluginView","CodeView","ChartViewTabs","ReferencesDrawer","AgentPlans","AgentMessages","HtmlPreview","SvgPreview","VisDashboard","VisCode","VisResponse","parsedContent","cachePluginContext","chartViews","references","agentPlans","agentMessages","htmlPreviews","svgPreviews","visDashboards","visCodes","visDbCharts","visPlugins","visResponses","cacheIndex","chartViewIndex","referencesIndex","matchVal","innerContent","pluginVal","replaceAll","pluginContext","normalizedContext","err_msg","contentAttr","decodedContent","cleanContent","escapeHtml","orderedRenderItems","marked","highlightedCode","headerHtml","bodyHtml","rawHtml","renderMarkdown","placeholderRegex","placeholders","dataIndex","currentPos","markdownFragment","componentItem","placeholderHtml","getViewComponent","parseJsonData","normalizedType","chart_type","normalizeChartViewData","copyCodeHandler","btn","wrapper","codeBlock","clipboard","writeText","originalHTML","_openBlock","_createElementBlock","_hoisted_1","thinking","_hoisted_2","_createElementVNode","_Fragment","_renderList","_hoisted_4","_createVNode","_unref","plans","_hoisted_5","messages","_hoisted_6","streaming","_hoisted_7","_createBlock","_resolveDynamicComponent","_hoisted_8","_hoisted_9","_hoisted_10","_hoisted_11","dashboard","_hoisted_12","codeData","_hoisted_13","_hoisted_14","_hoisted_15","getCookie","setCookie","days","date","setTime","getTime","toUTCString","getAuthToken","localStorage","getItem","DEFAULT_API_CONFIG","DEFAULT_CHAT_OPTIONS","chat_mode","model_name","app_code","select_param","chatApi","apiClient","authToken","Authorization","cookieAuthToken","hasAuth","hasXAuthToken","authTokenPreview","err_code","thrownError","generateConvUid","buildChatRequest","userInput","user_input","conv_uid","chat","post","chatStream","abortController","onStart","errorText","decoder","TextDecoder","onComplete","decode","lines","trimmedLine","vis","visContent","onChunk","delta","parseError","_j","_k","_l","_m","_n","updateConfig","getConfig","chatApiUtils","getCurrentConvUid","setCurrentConvUid","convUid","setItem","clearCurrentConvUid","removeItem","API_CONFIG","dbgptService","choices","getConversations","createConversation","conv_name","toLocaleString","getConversationHistory","deleteConversation","clearConversation","clearDialogueMemory","conUid","getHistoryMessages","historyId","configManager","index$1","chatApi$1","historyData","getHistory","clearMemory","parseDBGPTViews","parseDbgptViews","getFeedbackReasons","addFeedback","cancelFeedback","knowledge","getSpaces","createSpace","uploadDocument","spaceId","file","dbgptUtils","route","useRoute","__emit","inputMessage","isLoading","isLoadingHistory","isStreaming","isPaused","lastUserInput","useStreaming","isDarkMode","errorMessage","selectedModel","modelName","feedbackReasons","feedbackReasonsLoading","currentFeedbackMessageId","selectedReasons","feedbackRemark","dislikePopoverVisible","dislikeLoading","currentConvUid","messagesContainer","currentAbortController","selectedScenario","chartView","htmlPreview","svgPreview","visDashboard","visCode","generateId","loadHistoryById","contentPreview","filtered","groupedByOrder","deduped","group","humans","views","lastView","lastUserMessage","scrollToBottom","handleTokenExpired","getFeedbackService","feedbackConfig","customHeaders","getFeedbackHeaders","originalHeaders","loadFeedbackReasons","service","getMessageIndex","messageId","handleLike","feedback","liked","disliked","isLiked","message_id","cancelBeforeSwitch","feedback_type","closeDislikePopover","confirmDislike","reason_types","remark","handleCancelDislike","handleCopy","copyMessageContent","onSuccess","initTheme","query","toggleTheme","savedTheme","matchMedia","newConversation","testData","simple","medium","complex","sendTestMessage","scenario","typeData","testContent","userMessage","startStreamingDemo","demoQueue","demo","finalMessageId","finalLines","finalMsg","handleSend","sendStreamMessage","sendNormalMessage","assistantMessageId","handlePause","lastMsg","handleRegenerate","handleClearMemory","alert","_0","_1","textToCopy","removeMarkdown","extractSpecialBlocks","__expose","getPlainTextContent","plainText","copySpecialBlock","_2","blocks","includeWrapper","hasSpecialBlock","_normalizeClass","themeConfig","_normalizeStyle","_renderSlot","theme","conversation","_hoisted_3","_toDisplayString","stroke","showWelcome","testMessage","_vModelSelect","_hoisted_16","_hoisted_17","_hoisted_18","_hoisted_19","_hoisted_20","_hoisted_21","_hoisted_22","_hoisted_23","_hoisted_25","userMessageStyle","_hoisted_26","_hoisted_27","showAiAvatar","_hoisted_28","aiAvatarUrl","alt","aiAvatarStyle","_hoisted_30","aiMessageStyle","DBGPTRenderer","_hoisted_31","openDislikeModal","_hoisted_33","_hoisted_34","reason_type","reasonType","_hoisted_35","_hoisted_36","_hoisted_37","rx","ry","_hoisted_40","_hoisted_41","_hoisted_42","_hoisted_43","_hoisted_44","showInput","actions","_hoisted_45","_hoisted_46","_hoisted_47","_hoisted_48","_hoisted_49","_hoisted_53","_hoisted_55","_hoisted_56","_hoisted_57","_hoisted_58","_hoisted_62","_hoisted_61","quickOptions","prompt","clearMessages","sendMessage","thinkingMessage","generateResponse","aiMessage","typing","chart","simulateTyping","chars","lowerInput","labels","adjustTextarea","getPieColor","colors","_hoisted_24","_hoisted_29","_hoisted_32","_hoisted_38","_hoisted_39","useChatStore","defineStore","isMenuExpand","isContract","scene","chatId","modelList","history","dialogueList","currentDialogInfo","chat_scene","appInfo","replyLoading","canAbort","agent","temperatureValue","maxNewTokensValue","resourceValue","chartsData","currentDialogue","isChatDefault","setMode","setCurrentDialogInfo","addMessage","updateLastMessage","lastMessage","clearHistory","setAppInfo","param_need","bind_value","initializeStore","prefersDark","dialogInfo","useChat","queryAgentURL","chatStore","ctrl","onMessage","onDone","abortCtrl","doc_id","requestParams","releaseLock","handleChat","extraData","formattedDisplayContent","textItems","mediaItems","mediaMarkdown","displayUrl","transformFileUrl","image_url","video","getNextOrder","time_stamp","messageIndex","apiData","incremental","pauseChat","abortChat","regenerateAnswer","clearChatMemory","historyResponse","getDialogueHistory","create_time","newChat","isScrollToTop","_component_el_tag","_component_el_button","userInitial","nick_name","decodeCache","defaultChars","ch","fromCharCode","getDecodeCache","seq","b1","b2","chr","b3","b4","componentChars","encodeCache","keepEscaped","getEncodeCache","nextCode","slashes","hostname","pathname","Url","protocolPattern","portPattern","simplePathPattern","unwise","autoEscape","nonHostChars","hostEndingChars","hostnamePartPattern","hostnamePartStart","hostlessProtocol","slashedProtocol","https","ftp","gopher","urlParse","slashesDenoteHost","lowerProto","hec","rest","simplePath","atSign","hostEnd","parseHost","ipv6Hostname","hostparts","newpart","validParts","notHost","bit","qm","Any","Cc","htmlDecodeTree","Uint16Array","xmlDecodeTree","decodeMap","fromCodePoint","codePoint","output","CharCodes","BinTrieFlags","EntityDecoderState","DecodingMode","ZERO","NINE","isHexadecimalCharacter","UPPER_A","UPPER_F","LOWER_A","LOWER_F","isEntityInAttributeInvalidEnd","EQUALS","UPPER_Z","LOWER_Z","isAsciiAlphaNumeric","EntityDecoder","decodeTree","emitCodePoint","errors","EntityStart","consumed","treeIndex","excess","decodeMode","Strict","startEntity","NUM","NumericStart","stateNumericStart","NamedEntity","stateNamedEntity","NumericDecimal","stateNumericDecimal","NumericHex","stateNumericHex","LOWER_X","addToNumericResult","digitCount","startIdx","emitNumericEntity","lastCp","expectedLength","absenceOfDigitsInNumericCharacterReference","SEMI","replaceCodePoint","missingSemicolonAfterCharacterReference","validateNumericCharacterReference","valueLength","VALUE_LENGTH","determineBranch","Attribute","emitNotTerminatedNamedEntity","emitNamedEntityData","getDecoder","nodeIdx","branchCount","BRANCH_LENGTH","jumpOffset","JUMP_TABLE","lo","hi","mid","midVal","htmlDecoder","decodeHTML","Legacy","_hasOwnProperty","arrayReplaceAt","newElements","isValidEntityCode","surrogate1","surrogate2","UNESCAPE_MD_RE","UNESCAPE_ALL_RE","DIGITAL_ENTITY_TEST_RE","unescapeAll","entity","decoded","replaceEntityPattern","HTML_ESCAPE_TEST_RE","HTML_ESCAPE_REPLACE_RE","HTML_REPLACEMENTS","replaceUnsafeChar","REGEXP_ESCAPE_RE","isSpace","isWhiteSpace","isPunctChar","ucmicro.P","ucmicro.S","isMdAsciiPunct","normalizeReference","lib","mdurl","ucmicro","disableNested","found","marker","prevPos","posMax","oldPos","skipToken","labelEnd","prev_state","can_continue","default_rules","Ruler","__rules__","__cache__","Token","nesting","markup","meta","StateCore","inlineMode","code_inline","slf","renderAttrs","code_block","fence","langName","langAttrs","attrIndex","tmpAttrs","langPrefix","tmpToken","renderInlineAsText","renderToken","hardbreak","xhtmlOut","softbreak","html_block","html_inline","needLf","nextToken","renderInline","__find__","__compile__","altName","beforeName","ruleName","afterName","enable","ignoreInvalid","enableOnly","disable","getRules","chainName","attrPush","attrData","attrSet","attrGet","attrJoin","NEWLINES_RE","NULL_RE","isLinkOpen","isLinkClose","RARE_RE","SCOPED_ABBR_TEST_RE","SCOPED_ABBR_RE","SCOPED_ABBR","tm","replaceFn","replace_scoped","inside_autolink","replace_rare","QUOTE_TEST_RE","QUOTE_RE","replaceAt","process_inlines","thisLevel","OUTER","canOpen","canClose","isSingle","lastChar","isLastPunctChar","isNextPunctChar","isLastWhiteSpace","isNextWhiteSpace","single","openQuote","closeQuote","quotes","_rules","tok","linkify","pretest","htmlLinkLevel","currentToken","lastPos","fullUrl","normalizeLink","validateLink","urlText","normalizeLinkText","token_o","token_t","token_c","blkIdx","typographer","Core","ruler","StateBlock","bMarks","eMarks","tShift","sCount","bsCount","blkIndent","lineMax","tight","ddIndent","listIndent","parentType","indent_found","State","skipEmptyLines","skipSpaces","skipSpacesBack","skipChars","skipCharsBack","getLines","keepLastLF","queue","lineIndent","lineStart","getLine","escapedSplit","isEscaped","skipBulletListMarker","startLine","skipOrderedListMarker","open_tag","close_tag","HTML_TAG_RE","HTML_OPEN_CLOSE_TAG_RE","HTML_SEQUENCES","endLine","nextLine","firstCh","secondCh","lineText","aligns","columnCount","oldParentType","terminatorRules","tableLines","token_ho","token_il","tbodyLines","autocompletedCells","terminate","token_tdo","mem","haveEndMarker","oldLineMax","oldBMarks","oldBSCount","oldSCount","oldTShift","lastLineEmpty","isOutdented","spaceAfterMarker","adjustTab","oldIndent","tokenize","cnt","isOrdered","markerValue","posAfterMarker","isTerminatingParagraph","markerCharCode","listTokIdx","listLines","prevEmptyEnd","contentStart","indentAfterMarker","itemLines","oldTight","oldListIndent","markTightParagraphs","_endLine","getNextLine","isContinuation","lineContent","destRes","parseLinkDestination","destEndPos","destEndLineNo","titleRes","parseLinkTitle","token_i","ParserBlock","StateInline","outTokens","tokens_meta","pending","pendingLevel","delimiters","_prev_delimiters","backticks","backticksScanned","linkLevel","isTerminatorChar","maxNesting","hasEmptyLines","prevLine","pushPending","token_meta","scanDelims","canSplitWord","left_flanking","right_flanking","can_open","can_close","SCHEME_RE","ESCAPED","postProcess","loneMarkers","startDelim","endDelim","r_strikethrough","scanned","isStrong","r_emphasis","EMAIL_RE","AUTOLINK_RE","DIGITAL_RE","NAMED_RE","processDelimiters","openersBottom","headerIdx","lastTokenIdx","jumps","closerIdx","closer","minOpenerIdx","openerIdx","newMinOpenerIdx","opener","isOddMatch","lastJump","matchAtStart","pmax","ws","ch1","escapedStr","ch2","origStr","openerLength","matchStart","matchEnd","closerLength","parseReference","labelStart","parseLinkLabel","lc","isLetter","_rules2","ParserInline","ruler2","escapeRE","fuzzyLink","fuzzyEmail","fuzzyIP","defaultSchemas","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","src_Any","src_Cc","src_Z","src_P","src_ZPCc","src_ZCc","text_separators","src_pseudo_letter","src_ip4","src_xn","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","tpl_host_fuzzy_test","tpl_email_fuzzy","tpl_link_fuzzy","tpl_link_no_ip_fuzzy","reFactory","__opts__","tlds","__tlds__","untpl","tpl","src_tlds","onCompile","__tlds_replaced__","email_fuzzy","link_fuzzy","link_no_ip_fuzzy","host_fuzzy_test","schemaError","__compiled__","__schemas__","compiled","createValidator","slist","schema_test","schema_search","schema_at_start","__index__","__text_cache__","resetScanCache","Match","__last_index__","__schema__","createMatch","LinkifyIt","schemas","definition","ml","tld_pos","at_pos","testSchemaAt","keepOld","maxInt","regexPunycode","regexNonASCII","regexSeparators","stringFromCharCode","RangeError","mapDomain","parts","encoded","ucs2decode","counter","basicToDigit","digitToBasic","digit","flag","adapt","numPoints","firstTime","baseMinusTMin","inputLength","bias","basic","oldi","baseMinusT","currentValue","basicLength","handledCPCount","handledCPCountPlusOne","qMinusT","punycode","zero","rules2","commonmark","BAD_PROTO_RE","GOOD_DATA_RE","RECODE_HOSTNAME_FOR","mdurl.parse","er","mdurl.encode","mdurl.format","mdurl.decode","MarkdownIt","presetName","utils.isString","ParserCore","utils.assign","ParseError","_input","presets","missed","ParseError_1","Settings_1","displayMode","throwOnError","errorColor","Style","multiplier","cramped","sizeMultiplier","sup","sub","fracNum","fracDen","cramp","sizeNames","resetNames","setTextContent","Style_1","DISPLAY","TEXT","SCRIPT","SCRIPTSCRIPT","nativeIndexOf","elem","uppercase","ESCAPE_LOOKUP","ESCAPE_REGEX","escaper","testNode","deflt","setting","defaultIfUndefined","hyphenate","clearNode","require$$0","createClass","maxFontSize","documentFragment","symbolNode","italic","skew","toNode","toMarkup","frag","needsSpan","domTree","metricMap","fontMetrics","metrics","xHeight","quad","num1","num2","num3","denom1","denom2","sup1","sup2","sup3","sub1","sub2","supDrop","subDrop","axisHeight","defaultRuleThickness","bigOpSpacing1","bigOpSpacing2","bigOpSpacing3","bigOpSpacing4","bigOpSpacing5","ptPerEm","emPerEx","sigma5","doubleRuleSep","delim1","getDelim2","getCharacterMetrics","character","defineSymbol","font","math","ams","accent","bin","mathord","op","punct","spacing","textord","mathTextSymbols","textSymbols","letters","require$$1","symbols","require$$2","require$$3","greekCapitals","dotlessLetters","makeSymbol","mathDefault","mathit","sizeElementFromChildren","makeSpan","fontMap","mathbf","fontName","mathrm","mathbb","mathcal","mathfrak","mathscr","mathsf","mathtt","buildCommon","mathsym","makeFragment","makeVList","positionType","positionData","currPos","oldChildren","diff","fontSizer","fontSizeInner","makeFontSizer","realChildren","childWrap","baselineFix","vlist","makeOrd","getColor","sizingMultiplier","size1","size2","size3","size4","size5","size6","size7","size8","size9","size10","spacingFunctions","require$$4","require$$5","getMetrics","styleWrap","delim","toStyle","makeLargeDelim","mathrmSize","makeInner","sizeClass","makeStackedDelim","heightTotal","middle","topMetrics","topHeightTotal","repeatMetrics","repeatHeightTotal","bottomMetrics","bottomHeightTotal","middleHeightTotal","middleFactor","middleMetrics","repeatCount","ceil","realHeightTotal","inners","stackLargeDelimiters","stackAlwaysDelimiters","stackNeverDelimiters","sizeToMaxHeight","stackNeverDelimiterSequence","stackAlwaysDelimiterSequence","stackLargeDelimiterSequence","delimTypeToFont","makeCustomSizedDelim","delimType","sequence","heightDepth","traverseSequence","makeSmallDelim","sizedDelim","customSizedDelim","leftRightDelim","delimiterExtend","maxDistFromAxis","totalHeight","require$$6","buildExpression","expression","groups","buildGroup","groupToType","genfrac","ordgroup","katex","overline","underline","leftright","sqrt","getTypeOfGroup","getBaseElem","isCharacterBox","baseElem","makeNullDelimiter","groupTypes","prevAtom","atoms","withColor","supsub","limits","alwaysHandleSupSub","shouldHandleSupSub","supmid","submid","supShift","subShift","minSupShift","withStyle","scriptspace","ruleWidth","psi","marginLeft","fstyle","numShift","clearance","denomShift","delimSize","leftDelim","rightDelim","nstyle","dstyle","numer","numerreset","denom","denomreset","hasBarLine","candiateClearance","midShift","nr","nc","arraycolsep","baselineskip","arrayskip","arraystretch","arstrutHeight","arstrutDepth","inrow","outrow","elt","gap","rowGaps","unit","colSep","colDescrNum","colDescriptions","colDescr","firstSeparator","separator","sepwidth","hskipBeforeAndAfter","pregap","postgap","llap","fix","rlap","supGroup","subGroup","hasLimits","large","baseShift","slant","supKern","subKern","finalGroup","innerGroup","phi","lineClearance","minDelimiterHeight","delimDepth","delimShift","rootWrap","toShift","rootVList","rootVListWrap","sizing","withSize","styling","newStyle","script","scriptscript","withFont","delimsizing","innerDepth","borderRightWidth","borderTopWidth","supsubGroup","baseChar","vecClass","accentBody","accentWrap","phantom","withPhantom","groupNode","parentStyle","parentSize","buildHTML_1","topStrut","bottomStrut","htmlNode","MathNode","TextNode","createElementNS","mathMLTree","makeText","getVariant","withDelims","leftOp","rightOp","leftNode","rightNode","accentNode","operator","buildMathML_1","texExpression","annotation","semantics","Options","extension","colorMap","buildHTML","buildMathML","Settings","buildTree_1","settings","startStyle","mathMLNode","katexNode","defineFunction","numArgs","argTypes","greediness","allowedInText","numOptionalArgs","delimiterSizes","fontAliases","funcName","replaceWith","nameGroup","namepos","parseData","ParseNode","parseArray","parseExpression","consume","cr","parseFunction","defineEnvironment","colalign","ca","matrix","pmatrix","bmatrix","Bmatrix","vmatrix","Vmatrix","envName","emptyGroup","numCols","sticky","reloc","__matchAtRelocatable","flags","ignoreCase","multiline","unicode","getRelocatable","tokenRegex","whitespaceRegex","_innerLex","ignoreWhitespace","cssColor","_innerLexColor","sizeRegex","_innerLexSize","_innerLexWhitespace","whitespace","functions","environments","ParseFuncOrArgument","expect","parseInput","endOfExpression","breakOnInfix","breakOnToken","atom","parseAtom","errorNode","handleUnsupportedCmd","handleInfixNodes","overIndex","numerNode","denomNode","numerBody","denomBody","callFunction","handleSupSubscript","symPos","parseGroup","textordArray","textNode","colorNode","superscript","subscript","parseImplicitGroup","prime","primes","sizeFuncs","styleFuncs","parseSymbol","parseArguments","baseGroup","funcData","totalArgs","baseGreediness","argNode","argType","parseSpecialGroup","parseOptionalGroup","innerMode","outerMode","openBrace","nucleus","buildTree","toParse","baseNode","compatMode","renderToString","__parse","isValidDelim","prevChar","math_inline","math_block","firstLine","lastLine","latex","katexInline","katexBlock","_1c_1","KEYWORD","v7_keywords","LITERAL","DATE","COMMENTS","v7_system_constants","v8_system_sets_of_values","v8_shared_object","v7_meta_keywords","abnf_1","accesslog_1","HTTP_VERBS","actionscript_1","PKG_NAME_RE","AS3_REST_ARG_MODE","ada_1","INTEGER_RE","EXPONENT_RE","ID_REGEX","BAD_CHARS","VAR_DECLS","angelscript_1","builtInTypeMode","objectHandleMode","genericMode","apache_1","IP_ADDRESS","applescript_1","COMMENT_MODE_1","arcade_1","SYMBOL","arduino_1","ARDUINO_KW","_hints","ARDUINO","cPlusPlus","kws","armasm_1","xml_1","asciidoc_1","STRONG","EMPHASIS","aspectj_1","SHORTKEYS","autohotkey_1","BACKTICK_ESCAPE","autoit_1","VARIABLE","avrasm_1","awk_1","axapta_1","CLASS_DEFINITION","bash_1","basic_1","bnf_1","brainfuck_1","c_1","preprocessor","strings","cal_1","COMMENT_MODES","CHAR_STRING","PROCEDURE","capnproto_1","ceylon_1","clean_1","clojure_1","SYMBOLSTART","SYMBOL_RE","globals","CHARACTER","REGEX","COMMA","COLLECTION","KEY","LIST","BODY","NAME","DEFAULT_CONTAINS","GLOBAL","clojureRepl_1","cmake_1","coffeescript_1","JS_IDENT_RE","TITLE","POSSIBLE_PARAMS_RE","require$$32","coq_1","cos_1","cpp_1","crmsh_1","COMMANDS","crystal_1","INT_SUFFIX","CRYSTAL_METHOD_RE","CRYSTAL_PATH_RE","CRYSTAL_KEYWORDS","EXPANSION","recursiveParen","Q_STRING","REGEXP","CRYSTAL_DEFAULT_CONTAINS","csharp_1","VERBATIM_STRING","VERBATIM_STRING_NO_LF","SUBST_NO_LF","INTERPOLATED_STRING","INTERPOLATED_VERBATIM_STRING","INTERPOLATED_VERBATIM_STRING_NO_LF","GENERIC_MODIFIER","TYPE_IDENT_RE","AT_IDENTIFIER","csp_1","css_1","require$$40","d_1","D_KEYWORDS","decimal_integer_re","decimal_integer_nosus_re","hexadecimal_digits_re","decimal_exponent_re","integer_re","escape_sequence_re","D_INTEGER_MODE","D_FLOAT_MODE","D_CHARACTER_MODE","D_STRING_MODE","D_NESTING_COMMENT_MODE","markdown_1","dart_1","BRACED_SUBST","BUILT_IN_TYPES","NULLABLE_BUILT_IN_TYPES","delphi_1","DIRECTIVE","diff_1","django_1","FILTER","dns_1","dockerfile_1","dos_1","dsconfig_1","dts_1","REFERENCE","dust_1","ebnf_1","commentMode","elixir_1","ELIXIR_IDENT_RE","KWS","SIGIL_DELIMITERS","SIGIL_DELIMITER_MODES","escapeSigilEnd","LOWERCASE_SIGIL","UPCASE_SIGIL","REGEX_SIGIL","ELIXIR_DEFAULT_CONTAINS","elm_1","CONSTRUCTOR","ruby_1","RUBY_METHOD_RE","CLASS_NAME_RE","CLASS_NAME_WITH_NAMESPACE_RE","RUBY_KEYWORDS","YARDOCTAG","IRB_OBJECT","digits","RUBY_DEFAULT_CONTAINS","IRB_DEFAULT","erb_1","erlangRepl_1","erlang_1","BASIC_ATOM_RE","FUNCTION_NAME_RE","ERLANG_RESERVED","NAMED_FUN","TUPLE","VAR1","VAR2","RECORD_ACCESS","CHAR_LITERAL","TRIPLE_QUOTE","SIGIL","BLOCK_STATEMENTS","BASIC_MODES","excel_1","fix_1","flix_1","METHOD","fortran_1","OPTIONAL_NUMBER_SUFFIX","OPTIONAL_NUMBER_EXP","FUNCTION_DEF","fsharp_1","BANG_KEYWORD_MODE","KNOWN_TYPES","ALL_KEYWORDS","QUOTED_IDENTIFIER","BEGIN_GENERIC_TYPE_SYMBOL_RE","GENERIC_TYPE_SYMBOL","makeOperatorMode","includeEqual","allOperatorChars","OPERATOR_CHAR_RE","OPERATOR_CHAR_OR_DOT_RE","OPERATOR_FIRST_CHAR_OF_MULTIPLE_RE","SYMBOLIC_OPERATOR_RE","OPERATOR","OPERATOR_WITHOUT_EQUAL","makeTypeAnnotationMode","prefixScope","TYPE_ANNOTATION","DISCRIMINATED_UNION_TYPE_ANNOTATION","TYPE_DECLARATION","COMPUTATION_EXPRESSION","QUOTED_STRING","TRIPLE_QUOTED_STRING","INTERPOLATED_TRIPLE_QUOTED_STRING","require$$64","gams_1","SYMBOLS","QSTR","ASSIGNMENT","COMMENT_WORD","DESCTEXT","gauss_1","AT_COMMENT_MODE","STRUCT_TYPE","PARSE_PARAMS","DEFINITION","BUILT_IN_REF","STRING_REF","FUNCTION_REF","FUNCTION_REF_PARAMS","gcode_1","LETTER_BOUNDARY_RE","LETTER_BOUNDARY_CALLBACK","matchdata","charBeforeMatch","GENERAL_MISC_FUNCTION_RE","TOOLS_RE","SUBROUTINE_RE","SUBROUTINE_NAMED_RE","AXES_RE","PARAMETERS_RE","gherkin_1","glsl_1","gml_1","go_1","golo_1","gradle_1","graphql_1","groovy_1","require$$75","haml_1","handlebars_1","BRACKET_QUOTED_ID_REGEX","PLAIN_ID_REGEX","ANY_ID","IDENTIFIER_REGEX","HASH_PARAM_REGEX","HELPER_NAME_OR_PATH_EXPRESSION","HELPER_PARAMETER","SUB_EXPRESSION","HASH","HELPER_PARAMETERS","SUB_EXPRESSION_CONTENTS","OPENING_BLOCK_MUSTACHE_CONTENTS","CLOSING_BLOCK_MUSTACHE_CONTENTS","BASIC_MUSTACHE_CONTENTS","haskell_1","PRAGMA","haxe_1","hsp_1","http_1","HEADER","HEADERS_AND_BODY","hy_1","HINT","HINT_COL","inform7_1","ini_1","VARIABLES","ANY_KEY","irpf90_1","isbl_1","DOCTAGS","CONSTANTS","METHODS","FUNCTION_NAME_IDENT_RE","java_1","require$$87","javascript_1","require$$88","jbossCli_1","PARAMSBLOCK","json_1","julia_1","VARIABLE_NAME_RE","DEFAULT","INTERPOLATION","INTERPOLATED_VARIABLE","COMMAND","MACROCALL","juliaRepl_1","kotlin_1","LABEL","ANNOTATION_USE_SITE","KOTLIN_NUMBER_MODE","KOTLIN_NESTED_COMMENT","KOTLIN_PAREN_TYPE","KOTLIN_PAREN_TYPE2","require$$93","lasso_1","LASSO_IDENT_RE","LASSO_ANGLE_RE","LASSO_CLOSE_RE","LASSO_KEYWORDS","HTML_COMMENT","LASSO_NOPROCESS","LASSO_START","LASSO_DATAMEMBER","LASSO_CODE","latex_1","DOUBLE_CARET_VARIANTS","EVERYTHING_BUT_VERBATIM","pattern","BRACE_GROUP_NO_VERBATIM","ARGUMENT_BRACES","ARGUMENT_BRACKETS","SPACE_GOBBLER","ARGUMENT_M","ARGUMENT_O","ARGUMENT_AND_THEN","starts_mode","CSNAME","csname","BEGIN_ENV","envname","VERBATIM_DELIMITED_EQUAL","innerName","VERBATIM_DELIMITED_ENV","VERBATIM_DELIMITED_BRACES","ldif_1","leaf_1","IDENT","INSIDE_DISPATCH","PSEUDO_SELECTORS","less_1","PSEUDO_SELECTORS$1","INTERP_IDENT_RE","RULES","STRING_MODE","IDENT_MODE","AT_KEYWORDS","PARENS_MODE","VALUE_WITH_RULESETS","MIXIN_GUARD_MODE","RULE_MODE","AT_RULE_MODE","VAR_RULE_MODE","SELECTOR_MODE","PSEUDO_SELECTOR_MODE","require$$98","lisp_1","LISP_IDENT_RE","MEC_RE","LISP_SIMPLE_NUMBER_RE","MEC","QUOTED","QUOTED_ATOM","livecodeserver_1","TITLE1","TITLE2","livescript_1","SUBST_SIMPLE","require$$101","llvm_1","lsl_1","LSL_STRINGS","LSL_NUMBERS","lua_1","OPENING_LONG_BRACKET","CLOSING_LONG_BRACKET","LONG_BRACKETS","makefile_1","FUNC","TARGET","SYSTEM_SYMBOLS","mathematica_1","BASE_NUMBER_RE","APPROXIMATE_NUMBER_RE","SYSTEM_SYMBOLS_SET","MESSAGES","brace","require$$106","matlab_1","TRANSPOSE_RE","TRANSPOSE","maxima_1","mel_1","mercury_1","ATOM","mipsasm_1","mizar_1","perl_1","REGEX_MODIFIERS","PERL_KEYWORDS","ATTR","STRING_CONTAINS","REGEX_DELIMS","PAIRED_DOUBLE_RE","PAIRED_RE","PERL_DEFAULT_CONTAINS","mojolicious_1","monkey_1","FUNC_DEFINITION","moonscript_1","n1ql_1","nestedtext_1","nginx_1","section","nim_1","nix_1","BUILTINS","LOOKUP_PATH","PATH_PIECE","PATH","OPERATOR_WITHOUT_MINUS_REGEX","MINUS_OPERATOR","ATTRS","ANTIQUOTE","ESCAPED_LITERAL","FUNCTION_PARAMS","nodeRepl_1","nsis_1","DEFINES","LANGUAGES","PARAMETERS","COMPILER","VARIABLE_DEFINITION","objectivec_1","IDENTIFIER_RE","CLASS_KEYWORDS","ocaml_1","openscad_1","SPECIAL_VARS","oxygene_1","OXYGENE_KEYWORDS","CURLY_COMMENT","PAREN_COMMENT","parser3_1","CURLY_SUBCOMMENT","pf_1","pgsql_1","DOLLAR_STRING","TYPES_RE","FUNCTIONS_RE","SQL_KW","SQL_BI","php_1","NOT_PERL_ETC","PASCAL_CASE_CLASS_NAME_RE","UPCASE_NAME_RE","SINGLE_QUOTED","WHITESPACE","dualCase","normalizeKeywords","CONSTRUCTOR_CALL","CONSTANT_REFERENCE","LEFT_AND_RIGHT_SIDE_OF_DOUBLE_COLON","NAMED_ARGUMENT","PARAMS_MODE","FUNCTION_INVOKE","ATTRIBUTE_CONTAINS","phpTemplate_1","plaintext_1","pony_1","powershell_1","APOS_STRING","PS_COMMENT","CMDLETS","PS_CLASS","PS_FUNCTION","PS_USING","PS_ARGUMENTS","PS_METHODS","GENTLEMANS_SET","PS_TYPE","processing_1","FUNC_NAME","NEW_CLASS","PROPERTY","variable","profile_1","prolog_1","PARENTED","LINE_COMMENT","BACKTICK_STRING","properties_1","WS0","EQUAL_DELIM","WS_DELIM","DELIM_AND_VALUE","protobuf_1","puppet_1","purebasic_1","python_1","pythonRepl_1","q_1","qml_1","QML_IDENT_RE","ID_ID","QML_ATTRIBUTE","QML_OBJECT","r_1","NUMBER_TYPES_RE","OPERATORS_RE","PUNCTUATION_RE","reasonml_1","rib_1","roboconf_1","IDENTIFIER","routeros_1","STATEMENTS","rsl_1","ruleslanguage_1","rust_1","RAW_IDENTIFIER","NUMBER_SUFFIX","sas_1","scala_1","TYPE","scheme_1","SCHEME_IDENT_RE","SCHEME_SIMPLE_NUMBER_RE","QUOTED_IDENT","QUOTED_LIST","scilab_1","COMMON_CONTAINS","scss_1","PSEUDO_ELEMENTS$1","PSEUDO_CLASSES$1","require$$159","shell_1","smali_1","smali_instr_low_prio","smalltalk_1","VAR_IDENT_RE","CHAR","sml_1","sqf_1","sql_1","stan_1","DISTRIBUTIONS","INCLUDE","RANGE_CONSTRAINTS","stata_1","step21_1","stylus_1","LOOKAHEAD_TAG_END","require$$169","subunit_1","keywordWrapper","dotKeywords","optionalDotKeywords","keywordTypes","literals","precedencegroupKeywords","numberSignKeywords","builtIns","operatorHead","operatorCharacter","identifierHead","identifierCharacter","identifier","typeIdentifier","keywordAttributes","availabilityKeywords","swift_1","DOT_KEYWORD","KEYWORD_GUARD","PLAIN_KEYWORDS","KEYWORD_MODES","OPERATOR_GUARD","OPERATORS","ESCAPED_CHARACTER","rawDelimiter","ESCAPED_NEWLINE","MULTILINE_STRING","SINGLE_LINE_STRING","REGEXP_CONTENTS","BARE_REGEXP_LITERAL","EXTENDED_REGEXP_LITERAL","IDENTIFIERS","GENERIC_ARGUMENTS","GENERIC_PARAMETERS","FUNCTION_PARAMETERS","FUNCTION_OR_MACRO","INIT_SUBSCRIPT","OPERATOR_DECLARATION","PRECEDENCEGROUP","interpolation","submodes","require$$171","taggerscript_1","yaml_1","tap_1","tcl_1","TCL_IDENT","thrift_1","tp_1","TPID","TPLABEL","twig_1","FUNCTION_NAMES","TAG_NAMES","tagNamed","tagnames","TAG","CUSTOM_TAG","typescript_1","require$$179","vala_1","vbnet_1","MM_DD_YYYY","YYYY_MM_DD","TIME_12H","TIME_24H","DOC_COMMENT","vbscript_1","BUILT_IN_FUNCTIONS","vbscriptHtml_1","verilog_1","DIRECTIVES","vhdl_1","vim_1","wasm_1","wren_1","LANGUAGE_VARS","FIELD","SETTER","COMMENT_DOCS","ALL_KWS","x86asm_1","xl_1","DOUBLE_QUOTE_TEXT","IMPORT","xquery_1","_hljs","zephir_1","__defProps","__getOwnPropDesc","__getOwnPropDescs","__getOwnPropNames","core_exports","__export","core_1","except","__copyProps","wrapCodeRenderer","inlineCodeLanguageRule","parentToken","highlightLanguage","inlineCodeRenderer","optsWithDefaults","registerLangs","auto","__create","__getProtoOf","__toESM","isNodeMode","__esModule","src_exports","highlightjs","dist","__toCommonJS","import_highlight","import_core","markdownItKatex","strict","trust","macros","markdownItHighlight","renderedContent","componentName","_match","handleDislike","handleShare","isRobot","relations","relation","formatMarkdownVal","pluginViewStatusMapper","todo","bgClass","runing","failed","completed","extraMarkdownComponents","markdownComponents","img","copyToClipboard","preprocessLaTeX","RobotIcon","UserIcon","MarkdownRenderer","CopyIcon","_createTextVNode","template_name","CodeIcon","template_introduce","ChatFeedback","handleEnter","_component_el_input","editorRef","cloneDeep","clonedObj","scrollRef","showScrollButtons","isAtTop","isAtBottom","allowAutoScroll","animationFrameRef","jsonModalVisible","jsonValue","showMessages","lastScrollTop","isScrollable","scrollToBottomSmooth","forceScroll","behavior","scrollToTop","handleSendMessage","prevHistoryLength","newLength","ChatHeader","ChatContent","onLinkClick","handleLinkClick","ArrowUpIcon","ArrowDownIcon","ChatInputPanel","onSendMessage","_component_el_dialog","MonacoEditor","formatTime","listLoading","dialogue","selectDialogue","update_time","router","useRouter","startChat","viewExamples","maxValue","chartData","orderedContent","agentPlansRegex","blockStart","plan","agentMessagesRegex","textParts","textPos","parseOrderedContent","itemIndex","Check","Clock","sender","receiver","pieColors","linePointsArray","minValue","linePoints","point","areaPoints","points","pieSegments","sum","currentAngle","angle","PI","startAngle","endAngle","x1","cos","y1","sin","x2","y2","patternUnits","cx","cy","segment","chartContainer","chartInstance","chartHeight","generateChartOption","baseOption","textStyle","grid","containLabel","animation","animationDuration","animationEasing","xAxis","categories","axisLine","lineStyle","axisLabel","yAxis","splitLine","series","itemStyle","echarts","graphic","LinearGradient","emphasis","smooth","areaStyle","legend","orient","radius","shadowBlur","shadowOffsetX","shadowColor","initChart","setOption","handleResize","dispose","extendStatics","__extends","__","__assign","__rest","__awaiter","_arguments","generator","__generator","sent","trys","ops","Iterator","verb","__values","__read","ar","__spreadArrays","il","jl","__spreadArray","pack","SuppressedError","isFunction$5","isArray$8","isObject$6","each","isMatch","_keys","_predicate","fromIndex","rst","max$9","min$9","getRange","filterValues","getMax","getMin","pullAt","isString$6","uniq","valuesOfKey$1","tmpMap","groupBy","clamp","fixedBase","isNumberEqual","maxBy","maxItem","RADIAN","toRadian","degree","toString$a","lowerCase","substitute","upperFirst","HTMLDocument","_mix","src1","src2","src3","callNow","memoize$5","_deepMix","deepMix","getType","valueKeys","otherKeys","get$2","keyArr","set$1","pick$1","omit$1","later","noop$1","isArraylike","ctx","measureTextWidth$1","fontFamily","fontWeight","fontStyle","fontVariant","getContext","measureText","LAYER","DIRECTION","COMPONENT_TYPE","VIEW_LIFE_CIRCLE","GEOMETRY_LIFE_CIRCLE","PLOT_EVENTS","ELEMENT_STATE","GROUP_Z_INDEX","TABLE","TABLE_TR","FRAGMENT_REG","CONTAINERS","GROUP_ATTRS","FIELD_ORIGIN","ENGINES","registerEngine","engine","eventType","attachEvent","detachEvent","createDom","thead","tfoot","td","$1","dom","getOuterHeight","getHeight","bTop","pTop","pBottom","getOuterWidth","getWidth","bLeft","pLeft","pRight","bRight","mRight","modifyCSS","getChartSize","autoFit","getElementSize","EventEmitter","_events","once","_this","wildcardEvents","doEmit","es","off","length_1","getEvents","Base","_super","destroyed","changeVisible","EE","isFunction$4","isArray$7","isObject$5","max$8","min$8","isString$5","SPACES","PATH_COMMAND","PATH_VALUES","parsePathString","pathString","paramCounts","catmullRomToBezier","crp","iLen","ellipsePath","rad","pathToAbsolute","pathArray","pa0","mx","my","crz","pa","ii","jj","kk","l2c","q2c","ax","ay","_13","_23","a2c","large_arc_flag","sweep_flag","recursive","xy","f1","f2","_120","rotate","rx2","ry2","asin","df","f2old","x2old","y2old","c1","s1","c2","s2","hx","hy","m1","m3","m4","newres","pathToCurve","path2","bx","qx","qy","attrs2","pcoms1","pcoms2","pfirst","pcom","processPath","nx","ny","fixArc","pp","pi","fixM","path1","a1","a2","seg","seg2","seglen","seg2len","p2s","parsePathArray","base3","p3","p4","bezlen","x3","y3","x4","y4","z2","Tvalues","Cvalues","xbase","ybase","comb","curveDim","x0","y0","tvalues","bounds","b2ac","sqrtb2ac","t1","t2","jlen","intersect","denominator","px","py","px2","py2","isPointInsideBBox","bbox","rectPath","r1","r2","r0","vb","bezierBBox","p1x","p1y","c1x","c1y","c2x","c2y","p2x","p2y","findDotsAtSegment","t13","t12","t3","atan2","interHelper","bez1","bez2","justCount","bbox1","bbox2","isBBoxIntersect","n1","n2","dots1","dots2","di","di1","dj","dj1","ci","cj","decasteljau","recurse","middlePoints","splitSegment","segments","leftSegments","cmd","splitCurve","obj1","obj2","getMinDiff","modify","fillPathByDiff","diffMatrix","sourceSegment","targetSegment","sourceLen","targetLen","levenshteinDistance","changes","minPos","_splitPoints","former","formerEnd","_getSegmentPoints","formatPath","fromPath","toPath","segmentsToFill","filled","x1m","y1m","x2m","y2m","pj","intr","segment1","segment2","interPathHelper","GraphEvent","delegateTarget","delegateObject","propagationStopped","shape","fromShape","toShape","propagationPath","originalEvent","timeStamp","save","restore","removeFromArray","isParent","isCanvas","getParent","isAllowCapture","defaultCfg","getDefaultCfg","BrowserInfo","os","NodeInfo","SearchBotDeviceInfo","bot","BotInfo","ReactNativeInfo","SEARCHBOT_OS_REGEX","userAgentRules","operatingSystemRules","detect","ua","matchedRule","browser","uaMatch","matchUserAgent","versionParts","createVersionParts","detectOS","searchBotMatch","parseUserAgent","ARRAY_TYPE","Float32Array","multiply","a00","a01","a02","a10","a11","a12","a20","a21","a22","b00","b01","b02","b10","b11","b12","b20","b21","b22","transformMat3","subtract","scale","dot","exactEquals","glMatrix.ARRAY_TYPE","leftTranslate","transMat","mat3.fromTranslation","mat3.multiply","leftRotate","rotateMat","mat3.fromRotation","leftScale","scaleMat","mat3.fromScaling","leftMultiply","angleTo","v1","v2","direct","ang","vec2.angle","angleLargeThanPI","multiplyMatrix","multiplyVec2","invert","det","vec","ext.transform","MATRIX","CLONE_CFGS","RESERVED_PORPS","getFormatFromAttrs","toAttrs","fromAttrs","getDefaultAttrs","initAttrs","initAnimate","getDefaultMatrix","opacity","onCanvasChange","changeType","getCanvas","setAttr","afterAttrsChange","isClipped","refX","refY","clip","getClip","isHit","originValue","onAttrChange","targetAttrs","isClipShape","applyTo","setZIndex","toFront","getChildren","toBack","resetMatrix","getMatrix","setMatrix","getTotalMatrix","totalMatrix","currentMatrix","parentMatrix","applyMatrix","applyToMatrix","invertFromMatrix","invertMatrix","setClip","clipCfg","canvas","clipShape","Cons","getShapeBase","originAttrs","_cloneArrayAttr","cons","cfgName","isAnimatePaused","animate","timeline","animations","initTimer","onFrame","pauseCallback","resumeCallback","animateCfg","easing","formatToAttrs","getFormatToAttrs","pathFormatted","checkExistedAttrs","addAnimator","stopAnimate","toEnd","pauseAnimate","pauseTime","_paused","_pauseTime","resumeAnimate","emitDelegation","eventObj","relativeShape","_loop_1","name_1","subName","emitDelegateEvent","this_1","translateX","translateY","newMatrix","targetX","targetY","moveTo","radian","rotateAtStart","rotateAtPoint","SHAPE_MAP","INDEX","setCanvas","setTimeline","taskHead","taskTail","Container","getBBox","minX","maxX","minY","maxY","childMinX","childMaxX","childMinY","childMaxY","getCanvasBBox","_applyChildrenMarix","preTotalMatrix","addShape","shapeType","addGroup","groupClass","tmpCfg","getGroupBase","getShape","_findShape","preParent","_applyElementMatrix","getFirst","getChildByIndex","getLast","getCount","findAll","findById","findByClassName","findAllByName","frame","clockLast","clockNow","clockSkew","clock","setFrame","clearNow","Timer","_call","_time","_next","restart","wake","timerFlush","t0","sleep","nap","poke","clearInterval","setInterval","Color","darker","brighter","reI","reN","reP","reHex","reRgbInteger","reRgbPercent","reRgbaInteger","reRgbaPercent","reHslPercent","reHslaPercent","color_formatHex","formatHex","color_formatRgb","formatRgb","rgbn","Rgb","rgb_formatHex","rgb_formatRgb","Hsl","hslConvert","hsl2rgb","channels","displayable","formatHsl","constant$3","gamma","nogamma","exponential","constant","rgb$1","rgbGamma","colorRgb","numberArray","isNumberArray","interpolateArray","genericArray","nb","na","object$1","reA","reB","am","bs","bi","one","interpolate","quadInOut","cubicInOut","polyIn","custom","exponent","polyOut","polyInOut","halfPi","sinInOut","tpmt","expInOut","circleInOut","b5","b6","b8","b0","bounceOut","overshoot","backIn","backOut","backInOut","tau","elasticIn","amplitude","period","elasticOut","elasticInOut","EASING_MAP","registerEasing","easeFn","isColorProp","isGradientColor","IDENTITY_MATRIX","elapsed","d3Ease","cProps","interf","PathUtil.parsePathString","PathUtil.fillPathByDiff","PathUtil.formatPath","toPathPoint","fromPathPoint","cPathPoint","matrixFn","_update","Timeline","animators","d3Timer.timer","removeAnimator","draw","isAnimating","stopAllAnimations","animator","EVENTS","emitTargetEvent","bubbleEvent","isOverEvent","EventController","draggingShape","currentShape","mousedownShape","mousedownPoint","_eventCallback","_triggerEvent","_onDocumentMove","pointInfo","_getPointInfo","_emitEvent","_onDocumentMouseUp","_afterDrag","_bindEvents","_clearEvents","_getEventObj","clientY","_getShape","clientPoint","getClientByEvent","getPointByEvent","leaveCanvas","preShape","_onmousedown","mousedownTimeStamp","_emitMouseoverEvents","_emitDragoverEvents","isCanvasEmit","_onmouseup","_ondragover","_onmousemove","timeWindow","dx","dy","parent_1","Canvas","initContainer","initDom","initEvents","initTimeline","getElementById","setDOMSize","eventController","changeSize","getRenderer","getCursor","layerX","layerY","getPointByClient","clientInfo","touches","changedTouches","getClientByPoint","removeDom","clearEvents","AbstractGroup","isEntityGroup","AbstractShape","_isInBBox","clearCacheBBox","calculateBBox","canvasBBox","calculateCanvasBBox","topLeft","topRight","bottomLeft","bottomRight","shadowOffsetY","shadowLeft","shadowRight","shadowTop","shadowBottom","isInShape","isOnlyHitBox","startArrowShape","endArrowShape","inBBox","getMethod","rect$1","circle$1","getBBoxByArray","xArr","yArr","quadraticAt","p0","onet","extrema","QuadUtil$1","xExtrema","yExtrema","cubicAt","discSqrt","extremas","disc","CubicUtil$1","xAt","xRotation","yAt","EllipseArcUtil","xDim","atan","xs","xAngle","yDim","ys","yAngle","mergeBBox","mergeArrowBBox","offScreenCtx","getOffScreenContext","getTextHeight","lineHeight","lineCount","spaceingY","getLineSpaceing","assembleFont","regexTags","regexDot","vMag","vRatio","vAngle","acos","isSamePoint","point1","point2","getArcParams","startPoint","arcFlag","sweepFlag","xp","yp","lambda","cxp","cyp","theta","dTheta","toSymmetry","getSegments","parsePath","currentPoint","nextParams","startMovePoint","lastStartMovePointIndex","prePoint","startTangent","endTangent","arcParams","nextPoint","cp","preSegment","cp1","cp2","dx1","dy1","dx2","dy2","getExtraFromSegmentWithAngle","lineWidth","currentAndPre","currentAndNext","preAndNext","xExtra","yExtra","Util.getBBoxByArray","subText","measureWidth","getTextWidth","textAlign","textBaseline","segmentsWithAngle","QuadUtil","CubicUtil","getPathBox","path2Segments","isFunction$3","isArray$6","isObject$4","isString$4","valuesOfKey","group$1","paramscondition_1","unique","groupToMap","get$1","default_1","Adjust","xField","yField","adjustNames","dimValuesMap","isAdjust","dim","getAdjustRange","dimValue","adjustData","groupedDataArray","mergedData","getDimValues","_.each","dataArray","adjustDim","groupData","record","_.groupBy","dims","_.valuesOfKey","ADJUST_MAP","getAdjust","registerAdjust","ctor","Dodge","cacheMap","adjustDataArray","mergeData","marginRatio","dodgeRatio","dodgeBy","intervalPadding","dodgePadding","xDimensionLength","groupNum","defaultSize","maxColumnWidth","minColumnWidth","columnWidthRatio","customOffset","xDimensionLegenth","groupDataArray","_.clone","_.flatten","_.group","frameIndex","getDistribution","valueArr","valIndex","_.isNil","getDodgeOffset","_.isFunction","tickLength","getIntervalOnlyOffset","getDodgeOnlyOffset","getIntervalAndDodgeOffset","normalizedIntervalPadding","normalizedDodgePadding","geomWidth","normalizedMaxWidht","normalizedMinWidht","Jitter","adjustGroup","getAdjustOffset","_.Cache","reverseOrder","processStack","processOneDimStack","positive","negative","_.get","xKey","_.isArray","xValue","newXValue","stackHeight","stackValue","Symmetric","getXValuesMaxMap","_.map","yValue","off_1","_.mapValues","getDimMaxValue","dimValues","flattenValues","isFunction$2","isArray$5","isObject$3","isString$3","toScaleString","scales","_parseCfg","mapping","param","_toOriginParam","getLinearValue","percent","steps","leftPercent","getNames","getFields","field","getScale","defaultCallback","_getAttributeValue","isCategory","isLinear","isFunction$1","isString$2","memoize$1","RGB_REG","regexLG","regexRG","regexColorStop","arr2rgb","iEl","rgb2arr","x16Value","toRGB","colorUtil","gradient","colorArray","fixedPercent","calColor","toCSSGradient","gradientColor","cssColor_1","colorStops_1","itemArr","Opacity","Position","scaleX","scaleY","xi","yi","Shape","Size","methodCache","registerTickMethod","Scale","isContinuous","isIdentity","ticks","__cfg__","initCfg","getTicks","tick","getText","tickValue","setDomain","calculateTicks","tickMethod","rangeMin","rangeMax","calcPercent","calcValue","Category","buildIndexMap","translateIndexMap","scaledValue","domainRange","twoDigitsOptional","twoDigits","shorten","sLen","newArr","monthUpdate","arrName","i18n","origObj","args_1","dayNames","monthNames","monthNamesShort","defaultI18n","dayNamesShort","amPm","DoFn","dayOfMonth","globalI18n","setGlobalDateI18n","regexEscape","pad","formatFlags","dateObj","getDate","DD","Do","getDay","dd","ddd","dddd","getMonth","MM","MMM","MMMM","YY","getFullYear","YYYY","getHours","hh","HH","getMinutes","getSeconds","ss","getMilliseconds","SS","SSS","ZZ","getTimezoneOffset","monthParse","emptyDigits","emptyWord","timezoneOffset","minutes","parseFlags","cent","globalMasks","shortDate","mediumDate","longDate","fullDate","isoDate","isoDateTime","shortTime","mediumTime","longTime","setGlobalDateMasks","masks","$0","combinedI18nSettings","dateStr","dateInfo","month","day","hour","minute","second","millisecond","isPm","parseInfo","newFormat","specifiedFields","requiredFields","requiredField","dateTZ","validateFields","UTC","fecha","FORMAT_METHOD","timeFormat","fecha1","toTimeStamp","SECOND","MINUTE","HOUR","DAY","MONTH","YEAR","intervals","getTickInterval","tickCount","getter","_lo","_hi","TimeCat","tickIndex","Continuous","getScalePercent","firstTick","lastTick","minLimit","maxLimit","nice","getInvertPercent","Linear","calBase","getLogPositiveMin","positiveMin","Log","appendPercent","Pow","factor","Time","numberValue","minConfig","maxConfig","timeStamps_1","min_1","secondMin_1","max_1","minTickInterval","Quantize","minIndex","minTick","minIndexPercent","Quantile","registerClass","getClass","Identity","calculateCatTicks","tickInterval","showLast","ticks_1","lastValue","e10","e5","e2","D3Linear","_domain","i0","i1","tickIncrement","d3ArrayTicks","power","LN10","snapMultiple","snapType","intervalTicks","maxTick","availableInterval","strictLimit","defaultMin","defaultMax","tickMin","tickMax","prettyNumber","DEFAULT_Q","eps","EPSILON","simplicity","lmin","lmax","lstep","simplicityMax","density","dMin","dMax","lMin","lMax","rt","densityMax","coverage","coverageMax","half","legibility","extended","onlyLoose","step_1","score","sm","dm","log10","cm","minStart","maxStart","i_1","lStep","pretty","nu","quantileSorted","getYear","createYear","creatMonth","cat","catTicks","minYear","maxYear","yearInterval","monthInterval","mmMoth","dMonths","minMonth","diffMonth","mday","ddays","diffDay","hours","dHours","diffHour","dMinus","diffMinus","minSecond","dSeconds","seconds","avg","d3Linear","registerScale","ATTRIBUTE_MAP","registerAttribute","Coordinate","isRect","isHelix","isPolar","isReflectX","isReflectY","isTransposed","originalMatrix","convertDim","isReflect","invertDim","vector","vec3.transformMat3","inverted","mat3.invert","convertPoint","invertPoint","ext.leftTranslate","ext.leftRotate","reflect","ext.leftScale","transpose","getCenter","getRadius","Cartesian","Helix","innerRadius","maxRadius","thi","newY","vec2.subtract","ext.angleTo","rMin","vec2.length","Polar","oneBox","getOneBox","oneWidth","oneHeight","circleCenter","polarRadius","vPoint","vStart3","xPercent","yPercent","COORDINATE_MAP","registerCoordinate","propagationDelegate","eventObject","identityMatrix","getMatrixByAngle","getMatrixByTranslate","vec2.transformMat3","applyRotate","applyTranslate","translateMatrix","formatPadding","clearDom","regionToBBox","region","createBBox","getValueByPercent","getCirclePoint","near","getBBoxWithClip","box1","box2","clipBBox","minX_1","maxX_1","minY_1","maxY_1","leftTop","leftBottom","rightTop","rightBottom","boxMinX","boxMaxX","boxMinY","boxMaxY","toPx","getTextPoint","offsetPercent","LOCATION_FIELD_MAP","none","Component","locationType","updateAutoRender","animateOption","newCfg","updateInner","afterUpdate","hasKey","setCapture","getLayoutBBox","getLocationType","setOffset","setLocation","getLocation","isList","isSlider","STATUS_UPDATE","COPY_PROPERTIES","COPY_PROPERTIES_EXCLUDES","GroupComponent","shapesMap","isRegister","isUpdating","clearOffScreenCache","getChildComponentById","getElementByLocalId","localId","getElementId","getElementsByName","getContainer","offScreenRender","offScreenGroup","updateElements","deleteElements","applyOffset","initEvent","removeEvent","getInnerLayoutBBox","applyMatrix2BBox","initGroup","delegateEmit","createOffScreenGroup","getDelegateObject","moveElementTo","isComponent","renderInner","appendDelegateObject","registerElement","addComponent","restCfg","inst","unregisterElement","addAnimation","elmentName","newElement","originOpacity","removeAnimation","elementName","originElement","updateAnimation","newAttrs","newGroup","originGroup","preElement","elementId","childComponent","origChildComponent","replaceAttrs","getReplaceAttrs","newClipShape","updateClip","siblings","registerNewGroup","clearUpdateStatus","parentObject","deleteArray","callbackAnimCfg","removeElement","charAtLength","getMaxLabelWidth","texts","maxLen","maxIdx","getMaxLabelWidthOptimized","ellipsisLabel","limitLength","ellipsisText","maxWidth","currentText","currentWidth","PLACEHOLDER_WIDTH","measureTextWidth","leftText","leftWidth","getEllipsisText","labelLength","getLabelLength","codeLength","strLen","ellipsisFlag","reserveLength","newText","reseveLength","startStr","endStr","startIndex","endIndex","startCodeLen","hasAdd","endCodeLen","ellipsisString","renderTag","tagCfg","maxLength","autoEllipsis","ellipsisPosition","tagGroup","backgroundStyle","Theme","uncheckedColor","lineColor","regionColor","verticalAxisRotate","horizontalAxisRotate","descriptionIconStroke","descriptionIconFill","LineAnnotation","autoRotate","renderLine","renderLabel","getLabelPoint","TextAnnotation","resetLocation","textGroup","ArcAnnotation","renderArc","getArcPath","endPoint","largeFlag","middlePoint","RegionAnnotation","renderRegion","ImageAnnotation","renderImage","getImageAttrs","DataMarkerAnnotation","autoAdjust","coordinateBBox","renderText","renderPoint","getShapeAttrs","textAttrs","isVertival","lineLength","textShape","lineShape","xFactor","yFactor","lineDisplay","pointStyle","DataRegionAnnotation","regionStyle","pointsToBBox","RegionFilterAnnotation","shapeIdx","adjustShapeAttrs","fillStyle","strokeStyle","ShapeAnnotation","HtmlComponent","containerTpl","containerClassName","pointerEvents","resetStyles","applyStyles","initCapture","initVisible","defaultStyles","domStyles","applyChildrenStyles","cName","getElementsByClassName","applyStyle","cssName","resetPosition","HtmlAnnotation","alignX","alignY","domWidth","domHeight","getStatesStyle","stateStyles","AxisBase","tickLine","subTickLine","verticalFactor","verticalLimitLength","overlapOrder","tickStates","optimize","alignTick","displayWithLabel","autoHide","iconStyle","labelStyle","tickLineStyle","inactive","drawLine","drawTicks","drawTitle","setItems","updateItem","clearItems","itemGroup","setItemState","updateTickStates","hasState","getItemStates","clearItemsState","getItemsByState","getSidePoint","getSideVector","getTextAnchor","getTextBaseline","processOverlap","labelGroup","getLinePath","getTickLineItems","tickLineItems","tickLineLength","tickSegment","getTickPoint","tickId","getSubTickLineItems","subTickLineItems","subCount","tickLineCount","getTickLineAttrs","tickItem","tickItems","defaultTickLineStyle","drawTick","tickLineGroup","drawTickLines","tickCfg","subTickLineItems_1","processTicks","optimizeTicks","drawLabels","applyTickStates","page_1","optimizedTicks","getLabelAttrs","labelCfg","defaultLabelStyle","afterProcessTicks_1","getTitleAttrs","titleCfg","titleHeight","titlePoint","getAxisVector","titleAttrs","titleShape","drawDescriptionIcon","descriptionShape","startX","startY","x5","y5","x6","y6","x7","y7","labelShape","labelStateStyle","tickLineId","tickLineShape","tickLineStateStyle","tickLineCfg","ellipseLabels","ellipsisTail","getRotateAngle","isRotate","getAngleByMatrix","isOverlap","minGap","overlap","prevBBox","reserveOne","labelsGroup","reversed","autoHideCfg","hasHide","parityHide","firstBBox","equidistance","preLabel","labelRotate","getAngle","setLabelsAngle","fixedAngle","customRotate","Line","regionX","regionY","vec2.normalize","vec2.scale","labelOffset","titleSpacing","canProcessOverlap","autoProcessOverlap","hasAdjusted","util","OverlapUtil","getDefault","overlapCfg","verticalFactor_1","newAlign","Circle","sweep","CrosshairBase","textBackground","renderBackground","textPoint","textId","textBBox","LineCrosshair","tangentAngle","CONTAINER_CLASS","CROSSHAIR_LINE","CROSSHAIR_TEXT","HtmlTheme","CssConst.CONTAINER_CLASS","CssConst.CROSSHAIR_LINE","CssConst.CROSSHAIR_TEXT","HtmlCrosshair","crosshairTpl","textTpl","resetText","initCrossHair","crosshairEl","textEl","alignText","GridBase","alternateColor","getLineType","drawGrid","getAlternatePath","prePoints","regionPath","getGridPath","reversePoints","nextPath","getPathStyle","preItem","lineId","gridPath","regionId","isEven","drawAlternateRegion","lineType","firstPoint","radius_1","sweepFlag_1","LegendBase","getDrawPoint","setDrawPoint","resetDraw","drawLegendContent","drawBackground","DEFAULT_PAGE_NAVIGATOR","inactiveFill","inactiveOpacity","RIGHT_ARROW_NAME","LEFT_ARROW_NAME","ROTATE_MAP","currentPageIndex","totalPagesCnt","pageWidth","pageHeight","onNavigationBack","updateNavigation","getCurrentNavigationMatrix","onNavigationAfter","itemSpacing","itemMarginBottom","maxItemWidth","itemWidth","itemHeight","itemName","itemValue","radio","itemStates","itemBackground","pageNavigator","alignRight","nameStyle","unchecked","markerStyle","itemElement","offsetGroup","drawItem","getItemHeight","processItems","drawItems","itemContainerGroup","wrapped","adjustNavigation","style_1","items_1","drawMarker","markerCfg","markerAttrs","drawItemText","textName","xPosition","drawRadio","radioCfg","showRadio","radioShape","tip","subContainer","getLimitItemWidth","curX","markerShape","itemMarkerSpacing","nameShape","valueShape","applyItemStates","subGroups","navigation","drawNavigation","navigationBBox","pages","widthLimit","maxRow","maxRowHeight_1","navigationX_1","shouldWrap","cntPerPage_1","styleCfg","drawArrow","leftArrowBBox","cursorX","updateArrowPath","itemStates_1","elName","statesStyle","ContinueLegend","track","rail","slidable","defaultLength","getCurrentValue","setRange","setValue","resetTrackClip","resetHandlers","bindSliderEvent","bindRailEvent","bindTrackEvent","drawRail","fixedElements","resetTrack","bindHandlersEvent","getValueByCanvasPoint","preValue","curValue","curDiff","dValue","drawLabel","labelAlign","labelFormatter","alignAttrs","getLabelAlignAttrs","getRailPath","railCfg","getTrackColor","getTrackPath","getRailShape","getClipTrackAttrs","railBBox","getRailBBox","getPointByValue","getTrackAttrs","trackCfg","trackId","trackShape","trackAttrs","getRailCanvasBBox","isVertcal","resetHandler","getHandlerPath","handlerCfg","halfWidth","oneSixthWidth","triangleX","triangleY","handlerShape","railShape","minLabel","maxLabel","fixedVertail","fixedHorizontal","fitRailLength","minLabelBBox","maxLabelBBox","lengthField","changeRailLength","changeRailPosition","railHeight","maxLabelWidth","TITLE_CLASS","LIST_CLASS","LIST_ITEM_CLASS","MARKER_CLASS","VALUE_CLASS","NAME_CLASS","CROSSHAIR_X","CROSSHAIR_Y","TooltipTheme","borderRadius","CssConst.TITLE_CLASS","marginBottom","CssConst.LIST_CLASS","listStyleType","CssConst.LIST_ITEM_CLASS","CssConst.MARKER_CLASS","CssConst.VALUE_CLASS","float","CssConst.CROSSHAIR_X","CssConst.CROSSHAIR_Y","Tooltip","customContent","itemTpl","CssConst.NAME_CLASS","xCrosshairTpl","yCrosshairTpl","showTitle","crosshairsRegion","crosshairs","renderCustomContent","resetTitle","renderItems","clearCrosshairs","setTitle","clearItemDoms","setCrossHairsVisible","xCrosshairDom","yCrosshairDom","getHtmlContentNode","cacheDoms","limitBox","getPointByPosition","outSides","getOutSides","getAlignPoint","resetCrosshairs","curContainer","replaceChild","titleDom","listDom","crosshairBox","resetCrosshair","croshairDom","checkCrosshair","domName","tplName","constName","CssConst","substituteObj","itemDom","BACKGROUND_STYLE","LINE_STYLE","strokeOpacity","AREA_STYLE","catmullRom2Bezier","constraint","pointList","controlPointList","isLoop","prevPoint","nextCp0","cp0","cps","hasConstraint","vec2.min","vec2.max","vec2.sub","d0","vec2.distance","d1","vec2.add","smoothBezier","pointsToPath","dataToPath","getSmoothLinePath","linePathToAreaPath","areaPath","lineYPx","lineY","getAreaLineY","Trend","isArea","DEFAULT_HANDLER_STYLE","highLightFill","Handler","FOREGROUND_STYLE","HANDLER_STYLE","TEXT_STYLE","Slider","onMouseDown","prevX","prevY","containerDOM","getContainerDOM","offsetXRange","adjustOffsetRange","updateStartEnd","updateUI","oldStart","oldEnd","newStart","newEnd","foregroundStyle","handlerStyle","validCfg","minHandler","maxHandler","trend","trendCfg","minText","maxText","handlerWidth","handlerHeight","foregroundShape","minTextShape","maxTextShape","_dodgeText","minAttrs","maxAttrs","foreground","offsetRange","minBBox","maxBBox","DEFAULT_THEME","trackColor","thumbColor","lineCap","hover","Scrollbar","onStartEvent","isMobile","bindLaterEvent","thumbOffset","endPos","updateThumbOffset","onTrackClick","thumbLen","validateRange","onThumbMouseOver","onThumbMouseOut","originalValue","minThumbLen","renderTrackShape","renderThumbShape","trackLen","themeSize","thumbShape","emitOffsetChange","LineAxis","Axis.Line","CircleAxis","Axis.Circle","LineGrid","Grid.Line","CircleGrid","Grid.Circle","CategoryLegend","Legend.Category","ContinuousLegend","Legend.Continuous","HtmlTooltip","Tooltip.Html","uniqueValues","polarToCartesian","centerX","centerY","angleInRadian","getSectorPath","startAngleInRadian","endAngleInRadian","innerStart","innerEnd","innerMiddlePoint","circlePathCommands","arcSweep","sectorPathCommands","shapeModel","coordinate","getPointsBox","coordStartAngle","diffAngle","sourceShape","targetShape","isBetween","sourceArray","targetArray","e_1","sourceArray_1","sourceArray_1_1","e_1_1","BBox","fromRange","fromObject","subBBox","cut","TOP","TOP_LEFT","TOP_RIGHT","RIGHT","RIGHT_TOP","RIGHT_BOTTOM","BOTTOM","BOTTOM_LEFT","BOTTOM_RIGHT","LEFT","LEFT_TOP","LEFT_BOTTOM","shrink","exceed","collide","isPointIn","getXDimensionLength","getDistanceToCenter","getAngleByPoint","getCoordinateClipCfg","endState","startAngle_1","endAngle_1","center_1","startState","dateRegex","inferScaleType","scaleDef","attrType","geometryType","createScaleByField","validData","firstValue","getDefaultType","getName","getDefaultCategoryScaleRange","isFullCircle","getAxisRegion","getLineAxisRelativeRegion","getCircleAxisRelativeRegion","getAxisFactorByRegion","getAxisThemeCfg","axisTheme","getAxisTitleOptions","axisOptions","getCircleAxisCenterRadius","startVector","normalVector","getAxisOption","axes","getAxisDirection","axisOption","getAxisTitleText","Facet","view","facets","getData","generateFacets","renderViews","clearFacetViews","facetToView","facet","createView","beforeEachView","eachView","afterEachView","getLayer","FORE","createFacetViews","removeView","parseSpacing","viewBBox","getFieldValues","getRegion","xIndex","yIndex","xSpacing","ySpacing","xRatio","yRatio","fields","getDefaultTitleCfg","getTheme","processAxis","getOptions","coordinateOption","geometries","getXYFields","xOption","yOption","getXAxisOption","getYAxisOption","getFacetDataFilter","conditions","datum","Facets","registerFacet","Action","addAction","applyCfg","removeAction","CallbackAction","execute","ActionCache","getActionClass","actionName","actionOption","registerAction","ActionClass","createCallbackAction","_convertArr","coord","_convertArcPath","catmullRom2bezier","isInCircle","_points2path","getSplinePath","constaint","splinePath","convertPolarPath","transposed","subPath","curPoint","angleRange","middleConvertPoint","_convertPolarPath","_filterFullCirleLine","dcmp","onSegment","isInPolygon","parseToLines","lineIntersectPolygon","isIntersect","D0","D1","kross","getLineIntersect","getMaskBBox","tolerance","getMaskBBoxByShape","isValidMaskBBox","maskShape","maskBBox","getMultiMaskBBoxList","maskShapes","bBox","getMaskPathByMaskShape","getCurrentElement","getDelegationObject","isElementChange","gEvent","isMask","isMultipleMask","getMaskedElements","maskPathList","getMultiMaskPathList","maskPath","getElementsByPath","maskBBoxList","getIntersectElements","getMultiMaskedElements","getMaskPath","getSiblingMaskElements","sibling","getSiblingMaskElementsByBBox","getSiblingMultiMaskedElements","getSiblingPoint","getElements","geom","subView","getElementsByState","stateName","getElementsBy","getElementValue","getModel","shapeBBox","intersectRect","pathToPoints","shapePoints","points1","points2","isIn","isPointInPolygon","lines1","lines2","isPolygonsIntersect","getComponents","co","isInBox","getSilbings","normalPoint","getCoordinate","point2Normalize","isInRecords","records","xFiled","getScaleByField","Context","getAction","getCurrentPoint","getCurrentShape","isInPlot","isPointInPlot","isInComponent","Interaction","parseAction","actionStr","createAction","executeAction","actionObject","STEP_NAMES","GrammarInteraction","callbackCaches","emitCaches","initContext","stepArr","stepName","getActionCallback","bindEvent","offEvent","InteractionContext","subSteps","actionArr","argArr_1","isAllowStep","currentStepName","isAllowExecute","isEnable","enterStep","afterExecute","actionCallback","nameArr","Interactions","registerInteraction","interaction","createInteraction","interaciton","getInteraction","createThemeByStyleSheet","styleSheet","shapeStyles","pointFillColor","pointSize","pointBorderColor","pointBorder","fillOpacity","pointFillOpacity","pointActiveBorderColor","pointActiveBorder","pointSelectedBorderColor","pointSelectedBorder","pointInactiveFillOpacity","pointInactiveBorderOpacity","hollowPoint","hollowPointFillColor","hollowPointBorder","hollowPointBorderColor","hollowPointBorderOpacity","hollowPointSize","hollowPointActiveBorderColor","hollowPointActiveBorderOpacity","hollowPointSelectedBorder","hollowPointSelectedBorderColor","hollowPointSelectedBorderOpacity","hollowPointInactiveBorderOpacity","area","areaFillColor","areaFillOpacity","areaActiveFillOpacity","areaSelectedFillOpacity","areaInactiveFillOpacity","hollowArea","hollowAreaBorderColor","hollowAreaBorder","hollowAreaBorderOpacity","hollowAreaActiveBorder","hollowAreaSelectedBorder","hollowAreaInactiveBorderOpacity","intervalFillColor","intervalFillOpacity","intervalActiveBorderColor","intervalActiveBorder","intervalSelectedBorderColor","intervalSelectedBorder","intervalInactiveFillOpacity","intervalInactiveBorderOpacity","hollowInterval","hollowIntervalFillColor","hollowIntervalBorderColor","hollowIntervalBorder","hollowIntervalBorderOpacity","hollowIntervalActiveBorderColor","hollowIntervalActiveBorder","hollowIntervalActiveBorderOpacity","hollowIntervalSelectedBorderColor","hollowIntervalSelectedBorder","hollowIntervalSelectedBorderOpacity","hollowIntervalInactiveBorderColor","hollowIntervalInactiveBorder","hollowIntervalInactiveBorderOpacity","lineBorderColor","lineBorder","lineBorderOpacity","lineAppendWidth","lineJoin","lineActiveBorder","lineSelectedBorder","lineInactiveBorderOpacity","axisStyles","axisTitleSpacing","axisTitleTextFillColor","axisTitleTextFontSize","axisTitleTextLineHeight","axisDescriptionIconFillColor","axisLabelOffset","axisLabelFillColor","axisLabelFontSize","axisLabelLineHeight","axisLineBorder","axisLineBorderColor","axisGridBorderColor","axisGridBorder","lineDash","axisGridLineDash","axisTickLineBorder","axisTickLineBorderColor","axisTickLineLength","createAxisStyles","legendStyles","legendMarkerSpacing","legendCircleMarkerSize","legendMarkerColor","legendItemNameFillColor","legendItemNameFontSize","legendItemNameLineHeight","legendItemNameFontWeight","flipPage","legendPageNavigatorMarkerSize","legendPageNavigatorMarkerInactiveFillColor","legendPageNavigatorMarkerInactiveFillOpacity","legendPageNavigatorMarkerFillColor","legendPageNavigatorMarkerFillOpacity","legendPageNavigatorTextFillColor","legendPageNavigatorTextFontSize","legendItemSpacing","legendItemMarginBottom","legendPadding","createLegendStyles","defaultColor","brandColor","subColor","semanticRed","paletteSemanticRed","semanticGreen","paletteSemanticGreen","roseWidthRatio","multiplePieWidthRatio","colors10","paletteQualitative10","colors20","paletteQualitative20","sequenceColors","paletteSequence","shapes","sizes","geometry","middleAngle","funnel","pyramid","dash","hv","vh","hvh","vhv","polygon","square","bowtie","diamond","hexagon","triangle","cross","plus","hyphen","candle","edge","arc","violin","hollow","legendVerticalPadding","legendHorizontalPadding","continuous","sliderRailHeight","sliderRailWidth","sliderRailFillColor","sliderRailBorderColor","sliderRailBorder","sliderLabelTextFillColor","sliderLabelTextFontSize","sliderLabelTextLineHeight","sliderHandlerWidth","sliderHandlerFillColor","sliderHandlerBorderColor","showContent","follow","showCrosshairs","showMarkers","shared","tooltipCrosshairsBorderColor","tooltipCrosshairsBorder","TOOLTIP_CSS_CONST.CONTAINER_CLASS","tooltipContainerFillColor","tooltipContainerFillOpacity","tooltipContainerShadow","tooltipContainerBorderRadius","tooltipTextFillColor","tooltipTextFontSize","tooltipTextLineHeight","TOOLTIP_CSS_CONST.TITLE_CLASS","TOOLTIP_CSS_CONST.LIST_CLASS","TOOLTIP_CSS_CONST.LIST_ITEM_CLASS","TOOLTIP_CSS_CONST.MARKER_CLASS","TOOLTIP_CSS_CONST.VALUE_CLASS","annotationArcBorderColor","annotationArcBorder","annotationLineBorderColor","annotationLineDash","annotationLineBorder","annotationTextFillColor","annotationTextBorderColor","annotationTextBorder","annotationTextFontSize","annotationRegionBorder","annotationRegionBorderColor","annotationRegionFillColor","annotationRegionFillOpacity","dataMarker","annotationDataMarkerLineLength","dataRegion","cSliderBackgroundFillColor","cSliderBackgroundFillOpacity","cSliderForegroundFillColor","cSliderForegroundFillOpacity","cSliderHandlerWidth","cSliderHandlerHeight","cSliderHandlerFillColor","cSliderHandlerFillOpacity","cSliderHandlerBorderColor","cSliderHandlerBorder","cSliderHandlerBorderRadius","cSliderHandlerHighlightFillColor","cSliderTextFillColor","cSliderTextFillOpacity","cSliderTextFontSize","cSliderTextLineHeight","cSliderTextFontWeight","cSliderTextBorderColor","cSliderTextBorder","scrollbarTrackFillColor","scrollbarThumbFillColor","scrollbarThumbHighlightFillColor","labelFillColor","labelFontSize","labelBorderColor","labelBorder","fillColorDark","labelFillColorDark","fillColorLight","labelFillColorLight","innerLabels","innerLabelFillColor","innerLabelFontSize","innerLabelBorderColor","innerLabelBorder","overflowLabels","overflowLabelFillColor","overflowLabelFontSize","overflowLabelBorderColor","overflowLabelBorder","pieLabels","labelHeight","labelLine","labelLineBorder","BLACK_COLORS","WHITE_COLORS","QUALITATIVE_10","QUALITATIVE_20","SINGLE_SEQUENCE","createLightStyleSheet","paletteSemanticYellow","axisLineDash","axisTitleTextFontWeight","axisSubTickLineBorderColor","axisSubTickLineLength","axisSubTickLineBorder","axisLabelFontWeight","legendTitleTextFillColor","legendTitleTextFontSize","legendTitleTextLineHeight","legendTitleTextFontWeight","legendMarkerSize","legendSquareMarkerSize","legendLineMarkerSize","sliderLabelTextFontWeight","sliderHandlerHeight","sliderHandlerBorder","annotationTextLineHeight","annotationTextFontWeight","tooltipCrosshairsLineDash","tooltipTextFontWeight","labelLineHeight","labelFontWeight","innerLabelLineHeight","innerLabelFontWeight","overflowLabelLineHeight","overflowLabelFontWeight","labelLineBorderColor","cSliderRailHieght","pointBorderOpacity","hollowPointActiveBorder","areaActiveFillColor","areaSelectedFillColor","hollowAreaActiveBorderColor","hollowAreaSelectedBorderColor","intervalActiveBorderOpacity","intervalSelectedBorderOpacity","createTheme","themeCfg","styleSheetCfg","themeObject","Themes","snapEqual","filterYValue","yScale","getYScale","originData","getXDistance","scaleValues","numericValue","getTooltipValueScale","getAttributesForLegend","attributes_1","attributes_1_1","tmpScale","scaleDefs","xScale","getXScale","findDataByPoint","getXValueByPoint","firstXValue","firstYValue","lastXValue","isYArray","firstIdx","lastIdx","middleIdx","getTooltipItems","showNil","e_2","tooltipTitle","titleField","titleScale","getTooltipTitle","tooltipOption","addItem","mappingData","callbackParams","itemCfg","fields_1","fields_1_1","e_2_1","valueScale","eachValue","getTooltipValue","nameScale","groupScales","getGroupScales","getTooltipName","getTooltipItemsByFindData","tooltipCfg","e_3","dataArray_1","dataArray_1_1","elementsMap","e_3_1","getTooltipItemsByHitShape","findItemsFromView","e_4","geometries_1","geometries_1_1","tooltipItems","e_4_1","parsePadding","paddingArray","LOAD_COMPONENT_CONTROLLERS","registerComponentController","getComponentController","CoordinateController","wrapperOption","hasAction","isTheta","execActions","adjust","sx","sy","getOption","includeActions","fromData","GEvent","defaultLayout","getController","ScalePool","syncScales","createScale","finalScaleDef","cacheScaleMeta","getScaleMeta","cacheScale","cacheScaleDef","scaleKeys","syncKey","MAX_SAFE_INTEGER","MIN_SAFE_INTEGER","newScale","syncScale","getSyncKey","removeFromSyncScales","scaleMeta","deleteScale","PaddingCal","inc","calculatePadding","isAutoPadding","paddingCal","axisComponents","paddingComponents","otherComponents","AXIS","LEGEND","SLIDER","SCROLLBAR","GRID","TOOLTIP","bboxObject","componentPadding","componentBBox","defaultSyncViewPadding","PC","syncPadding","autoPadding","controllers","interactions","limitInPlot","usedControllers","scalePool","layoutFunc","isPreMouseInPlot","isDataChanged","isCoordinateChanged","createdScaleKeys","onCanvasEvent","createViewEvent","doPlotEvent","onDelegateEvents","backgroundGroup","middleGroup","foregroundGroup","appendPadding","syncViewPadding","setLayout","calculateViewBBox","initComponentController","initOptions","isUpdate","BEFORE_RENDER","paint","AFTER_RENDER","BEFORE_CLEAR","coordinateInstance","labelsContainer","getRootView","AFTER_CLEAR","BEFORE_DESTROY","legendOption","scaleOption","guide","coordinateCfg","coordinateController","facetInstance","getFacet","updateOptions","existInteraction","removeInteraction","changeData","BEFORE_CHANGE_DATA","AFTER_CHANGE_DATA","sharedOptions","legends","removedView","getYScales","yScales","getScalesByDim","dimType","defaultKey","getScaleKey","getOriginalData","getGeometries","BG","MID","isPointInCoordinate","getLegendAttributes","getGroupAttributes","getXY","xScales","showTooltip","hideTooltip","lockTooltip","unlockTooltip","isTooltipLocked","getSnapRecords","dataLen","snapRecords","filterData","filterFieldData","adjustCoordinate","curStart","curEnd","bl","renderDataRecursive","BEFORE_PAINT","renderPaddingRecursive","renderLayoutRecursive","renderBackgroundStyleShape","renderPaintRecursive","AFTER_PAINT","backgroundStyleRectShape","initComponents","syncViewPaddingFn","paintGeometries","renderComponents","currentScaleDef","mergedScaleDef","doFilterData","createCoordinate","initGeometries","renderFacet","currentInPlot","newEvent","MOUSE_LEAVE","LEAVE","MOUSE_ENTER","ENTER","createOrUpdateScales","getGeometryScales","adjustScales","getScaleFields","groupedFields","getGroupedFields","getGroupFields","adjustCategoryScaleRange","xyScales","scaleOptions","doAnimation","canvasRegion","annotations","geometryOption","createGeometry","interactionOption","viewOption","annotationComponent","annotationOption","eventCallback","geometry_1","registerGeometry","Chart","pixelRatio","localRefresh","supportCSSTransform","defaultInteractions","wrapperElement","getEngine","onResize","forceFit","updateCanvasStyle","bindAutoFit","initDefaultInteractions","aria","ariaOption","BEFORE_CHANGE_SIZE","AFTER_CHANGE_SIZE","unbindAutoFit","Controller","includeOption","isLocked","isVisible","getTitle","dataPoint","getTooltipCfg","lastItems","lastTitle","tooltipMarkersGroup","renderTooltip","getItemsAfterProcess","renderTooltipMarkers","isCrosshairsFollowCursor","renderCrosshairs","xCrosshair","yCrosshair","guideGroup","tooltipCrosshairsGroup","items_1_1","itemArr_1","itemArr_1_1","snapItem","items_2","items_2_1","aItem","yDistance","uniqItems","subItem","isCursorEntered","processOption","processCustomContent","currentCustomContent","getTooltipMarkersGroup","rootView","items_3","items_3_1","attrs_1","markerDefaultCfg","crosshairsType","renderXCrosshairs","renderYCrosshairs","getViewWithGeometry","getTooltipCrosshairsGroup","getCrosshairsText","Crosshair.Line","Crosshair","textCfg","firstItem","getGuideGroup","e_5","childView","e_5_1","originalItems","customItems","ANIMATIONS_MAP","getAnimation","registerAnimation","DEFAULT_ANIMATE_CFG","GEOMETRY_ANIMATE_CFG","GEOMETRY_GROUP_APPEAR_ANIMATION","getDefaultAnimateCfg","animateType","doAnimate","parsedAnimateCfg","parseAnimateConfig","animateFunction","BACKGROUND_SHAPE","shapeFactory","offscreenGroup","elementIndex","getShapeType","drawShape","setShapeInfo","getOffscreenGroup","newShape","syncShapeStyle","getStates","getAnimateCfg","setState","stateStatus","sortZIndex","zIndexReversed","offscreenShape","clearStates","labelBBox","stateOption","defaultShapeType","stateTheme","getStateStyle","shapeKey","stateCfg","shapeStyle","cfg_1","AFTER_DRAW_ANIMATE","BEFORE_DRAW_ANIMATE","GroupCtor","newClip","newChildren","name_2","GEOMETRY_LABELS_MAP","GEOMETRY_LABELS_LAYOUT_MAP","registerGeometryLabel","registerGeometryLabelLayout","layoutFn","ShapeFactoryBase","getShapePoints","shapePoint","getPoints","getDefaultPoints","getDefaultStyle","geometryTheme","getMarker","ShapeBase","parsedPath","convertNormalPath","parsePoint","parsePoints","ShapeFactoryMap","registerShapeFactory","factoryName","geomObj","registerShape","shapeObj","getShapeFactory","appendConditions","values_1","values_1_1","eachGroup","isModelChange","currentModel","preModel","parseFields","keyItem","added","keyIncluded","Geometry","attributeOption","lastElementsMap","generatePoints","beforeMappingData","adjusts","idFields","hasSorted","useDeferredLabel","userTheme","positionCfg","createAttrOption","adjustCfg","adjustOption","styleFunc","styleOption","secondParam","thirdParam","labelOption","customInfo","customOption","setCfg","initAttributes","processData","adjustScale","lastAttributeOption","beforeMapping","canDoGroupAnimation","yMinPoint","getYMinValue","minYPoint","doGroupAppearAnimate","deferred","renderLabels","requestIdleCallback","geometryLabel","getDefaultValue","getAttributeValues","adjustType","getShapeMarker","shapeName","xVal","yVal","length_2","dodgeAdjust","attributeType","eachOpt","length_3","uniqMap","groupFields","length_4","attributeName","getXField","getYField","getShapes","mappingArray","xScale_1","xField_1","updateStackRange","createShapePointsCfg","normalizeValues","mappingDatum","shapeCfg","getDrawCfg","defaultStyle","getStyleCfg","nextPoints","mappingDataArray","keyDatum","keyIndex","finalKey","added_1","added_1_1","updated_1","updated_1_1","currentShapeCfg","preShapeCfg","removed_1","removed_1_1","getLabelType","coordinateType","labelType","attrCfg","AttributeCtor","getAttributeClass","state_1","categoryScales","groupedArray","beforeAdjust","subData","subLen","categoryScales_1","categoryScales_1_1","xScale_2","sizeAttr","adjustCtor","getAdjustClass","adjustInstance","mergeArray","tmpMin","tmpMax","length_5","generateShapePoints","nextData","shapeAttr","newRecord","_origin","mappingRecord","rstX","rstY","xLen","yLen","GeometryLabelsCtor","labelsMap","elementLabels","BEFORE_RENDER_LABEL","labelsRenderer","labelGroupId","labelChildren","AFTER_RENDER_LABEL","rotateRadian","getRotateMatrix","findLabelTextShape","getLabelBackgroundInfo","labelItem","boxPadding","rotation","checkShapeOverlap","dones","updateLabel","updateAnimateCfg","fromChild","toChild","Labels","lastShapesMap","createOffscreenGroup","renderLabelLine","renderLabelBackground","adjustLabel","origin_1","currentAnimateCfg","deleteShape","shapeAppendCfg","isShape","layouts","labelShapes","geometryShapes","labelItems","labelLineCfg","labelContentShape","backgroundShape","GeometryLabel","getLabelItems","mapppingArray","labelCfgs","getLabelCfgs","labelContent","subIndex","getLabelAlign","getLabelsRenderer","getGeometryShapes","getDefaultLabelCfg","getThemedLabelCfg","defaultLabelCfg","setLabelPosition","labelPointCfg","getLabelOffset","getOffsetVector","getLabelOffsetPoint","offsetPoint","getDimValue","isAvg","isFunnel","centroid","getPolygonCentroid","getLabelId","labelScales","callbackCfg","originText","getLabelText","originValues","labelTexts","subVal","actualOffset","getMappingValue","restArgs","MarkerSymbols","diffX","diffY","STROKES_SYMBOLS","setMarkerSymbol","getLegendLayout","getLegendItems","themeMarker","userMarker","field_1","colorAttr_1","shapeAttr_1","defaultColor_1","isInPolar_1","scaleValue","isInPolar","adpatorMarkerStyle","getLegendThemeCfg","legendTheme","isValueEmpty","isYNil","getPathPoints","connectNulls","showSinglePoint","getViolinPath","getSmoothViolinPath","leftPoints","rightPoints","leftPath","rightPath","isStroke","isFill","getBackgroundRectStyle","splitPoints","eachY","LineSymbols","getLineMarker","getSinglePath","getPath","isStack","topPoints","bottomPoints","topPath","bottomPath","getRangePath","shapeAttrs","eachLinePoints","Util","zoom","antvDark","legendSpacing","overflowLabelFillColorDark","overflowLabelFillColorLight","createDarkStyleSheet","inBox","regexPR","addStop","addColorStop","parseStyle","gradientStr","tanTheta","tanTheta2","createLinearGradient","parseLineGradient","fx","fy","fr","createRadialGradient","parseRadialGradient","patternStr","onload","createPattern","Image","crossOrigin","complete","parsePattern","CanvasPattern","_addDefaultArrow","isStart","arrowShape","Path","isArrowShape","_addCustomizedArrow","startArrow","endArrow","arrowAttrs","arrowFill","arrowStroke","arrowLineWidth","restAttrs","getShortenOffset","addStartArrow","addEndArrow","SHAPE_ATTRS_MAP","applyAttrsToContext","setLineDash","globalAlpha","drawChildren","skipDraw","checkRefresh","refreshElements","refresh","setChildrenRefresh","checkChildrenRefresh","hasChanged","checkElementRefresh","clearChanged","cacheCanvasBBox","isInView","drawPath","arcParamsCache","beginPath","ArrowUtil.getShortenOffset","tangent","getStartTangent","getEndTangent","lineTo","quadraticCurveTo","bezierCurveTo","ellipse","closePath","refreshElement","_cacheCanvasBBox","getRefreshRegion","region1","region2","cacheBox","validCache","validBBox","Group","_applyClip","createPath","_afterDraw","viewRange","getViewRange","allowDraw","getHitLineWidth","getBBoxMethod","bboxMethod","halfLineWidth","getCanvasViewBox","strokeAndFill","afterDrawPath","isInStrokeOrPath","absDistance","ellipseDistance","squareX","squareY","Ellipse","halfLineWith","ImageShape","_setImage","_afterLoading","image_1","swidth","sheight","drawImage","piMod","LineUtil$1","pointAt","pointDistance","pointToLine","vec2.exactEquals","vec2.dot","nearestPoint","tCallback","v0","segNum","increaseRate","d2","derivativeAt","divideQuadratic","controlPoint1","controlPoint2","quadraticLength","iterationCount","quadratics","interpolationAt","divide","divideCubic","c3","c12","c23","cubicLength","totalLength","snapLength","cubics","PolylineUtil$1","lengthOfSegment","inLine","LineUtil","setArrow","ArrowUtil.addStartArrow","ArrowUtil.addEndArrow","startArrowDistance","endArrowDistance","getTotalLength","getPoint","REGEX_MD","needProcess","preParams","upCmd","symetricT","symetricS","Symbols","Marker","_resetParamsCache","_getR","_getPath","path2Absolute","isPointInPath","PathUtil","hasArc","extractPolygons","polygons","polylines","isPointInStroke","inArc","isInPolygons","_setPathArr","extractResutl","_calculateCurve","_setTcache","subt","tCache","curve","nextSeg","segmentT","segmentL","segmentN","tempLength","inPolyline","isClose","Polygon","PolyLine","_resetCache","PolylineUtil","Rect","inRectWithRadius","inRect","r3","r4","parseRadius","_assembleFont","_setText","textArr","_getSpaceingY","_drawTextArr","subY","fillText","strokeText","_drawText","getRefXY","preTest","curShape","getPixelRatio","_clearFrame","clearRect","_getRefreshRegion","viewRegion","minXArr","minYArr","maxXArr","maxYArr","getMergedRegion","mergeView","drawFrame","webkitCancelAnimationFrame","mozCancelAnimationFrame","msCancelAnimationFrame","_startDraw","_drawAll","_drawRegion","drawFrameCallback","webkitRequestAnimationFrame","mozRequestAnimationFrame","msRequestAnimationFrame","AbstractCanvas","isArray$3","isObject$1","max$6","min$6","isString$1","uniqueId","SHAPE_TO_TAGS","polyline","SVG_ATTR_MAP","lineDashOffset","miterLimit","preserveAspectRatio","createSVGElement","sortDom","sorter","setTransform","addClip","parentChildren","clipPathEl","defsEl","targetIndex","currentIndex","targetNext","children_1","canFill","canStroke","shadow","_setColor","addGradient","addPattern","addShadow","setShadow","elementFromPoint","isEqualNode","Dom","toDataURL","ImageData","putImageData","addArrow","getDefaultArrow","triangleDown","symbolsFactory","getAll","_assembleMarker","_formatPath","getPointAtLength","Polyline","pathRelatedAttrs","_assembleRect","BASELINE_MAP","alphabetic","hanging","BASELINE_MAP_FOR_FIREFOX","ANCHOR_MAP","_setFont","baseline","textLen_1","arr_1","stops","Gradient","ATTR_MAP","shadowOpacity","SHADOW_DIMENSION","Shadow","_parseShadow","Arrow","_setDefaultPath","_setMarker","Clip","shapeEl","Pattern","Defs","defaultArrow","autoDraw","srcElement","keyData","getShapeInfo","getPointsAndData","registeredShape","topLinePoints_1","bottomLinePoints_1","pointsData","parsedPoints","pathPoints","eachPoints","getConstraint","yItem","Area","startOnZero","Edge","Heatmap","paletteCache","prepareRange","prepareSize","blur_1","prepareGreyScaleBlurredCircle","drawWithRange","clearShadowCanvasCtx","colorField","getDefaultSize","grayScaleBlurredCanvas","getGrayScaleBlurredCanvas","valueField","getShadowCanvasCtx","data_1","data_1_1","drawGrayScaleBlurredCircle","colored","getImageData","colorize","imageShape","getImageShape","shadowCanvas","colorAttr","pixels","palette","ColorUtil","getRectPoints","yMin","yMax","xMin","xMax","getRectPath","isClosed","minLength","getBackgroundRectPath","isReflectYTransposed_1","bump","opposite","getFunnelPath","isPyramid","swap","xValues","sourceArr","findMinDistance","normalizedSize","wr","dodgeCount","getDodgeCount","normalizedMaxColumnWidth","normalizedMinColumnWidth","backgroundCfg","backgroundPath","getRectWithCornerRadius","coor","getIntervalRectPath","Interval","SHAPES","drawPoints","pointPosition","points_1","points_1_1","Point","subX","xOffset","yOffset","Schema","sizeArr","num","normalizeSize","isMin","isMax","Violin","_sizeField","sizeField","getCPath","getQPath","getArcShapePath","arc1","arc2","getArcShapeWeightPath","getSmoothPath","CORNER_PERCENT","getVHVPath","getTickPoints","getInterpolateShapeAttrs","interpolatePoints","interpolatePoint","nextX","nextY","middleX","middleY","interpolateCallback","getInterpolatePoints","getInterpolatePath","parseValue","min1","max1","median","getBoxPoints","pointsArray","halfSize","getCandleYValues","targetLength","padValue","padEnd","sourceLength","getCandlePoints","yValues","getRectAttrs","IntervalLabel","getLabelValueDir","dir","point0","nextP0","nextP1","HALF_PI","PolarLabel","labelEmit","arcPoint","isToMiddle","getMiddlePoint","getArcPoint","getPointAngle","isLabelEmit","labelPositionCfg","getLabelRotate","labelAngle","PieLabel","isLabelLimit","antiCollision","plotRange","invisible","overlapping","endY","MIN_VALUE","boxes","previousBox","posInCompositeBox","Greedy","bitmap","xGap","yGap","hasGap","fillGap","adjustLabelPosition","getAxes","deg","getProjection","scalars","isProjectionOverlap","projection1","projection2","isValidBox","isIntersectRect","rect1Points","rect2Points","MyWorker","worker","Worker","onmessage","onmessageerror","generateUtils","methods","eventData","blob","BlobBuilder","getBlob","createObjectURL","createWorker","layoutCode","preset","shouldInShape","shouldInShapeSingle","hasSome","rightText","doScaleAnimate","endMatrix","scaledMatrix","transformShape","arcPath","getArcStartPoint","getArcInfo","arcPaths","firstArcPathCommand","lastArcPathCommand","firstIndex","firstStartPoint","lastStartPoint","firstStartAngle","firstEndAngle","lastStartAngle","lastEndAngle","doShapeZoom","getFactTitleConfig","getAnglePoint","renderTitle","avgAngle","facetR","facetData","columnField","columnValuesLength","rowValue","rowField","rowValuesLength","List","colValues","getPageCount","getRowCol","pageSize","Matrix","columnTitle","rowTitle","facetIndex","Mirror","columnValues","rowValues","Tree","afterChartRender","drawLines","rootFacet","getRows","getChildFacets","setRegion","forceColIndex","xWidth","yWidth","leafs","isLeaf","levelFacets","getFacetsByLevel","levelFacets_1","levelFacets_1_1","originColIndex","getRegionIndex","addFacetLines","subFacet","subRegion","middle1","middle2","getMedian","getNormalizedValue","scaled","ANNOTATIONS_AFTER_RENDER","Annotation","foregroundContainer","backgroundContainer","onAfterRender","updateOrCreate","getCacheKey","syncCache","updateCache","clearComponents","doWhat","createAnnotation","AnnotationComponent","getAnnotationTheme","getAnnotationCfg","isTop","NONE","regionFilter","parsePosition","xPos","yPos","parsePercentPosition","getRegionPoints","viewData","startXValue","endXValue","getCoordinateBBox","sp","ep","start_5","end_5","apply_1","shapes_1","addShapes_1","render_1","restOptions","html_1","getComponentContainer","newCache","getGridThemeCfg","getLineGridItems","preTick","currentTick","middleValue","getCircleGridItems","showGrid","userGrid","themeGrid","OMIT_CFG","AXIS_DEFAULT_ANIMATE_CFG","Axis","gridContainer","gridForeContainer","axisContainer","axisForeContainer","updatedCache","updateXAxes","updateYAxes","xAxisOption","axisId","getId","gridId","getLineAxisCfg","createLineAxis","getLineGridCfg","createLineGrid","RADIUS","getCircleAxisCfg","createCircleAxis","getCircleGridCfg","CIRCLE","createCircleGrid","yAxisOption","titleText","axisThemeCfg","optionWithTitle","isAxisVertical","canvasWidth","canvasHeight","gridThemeCfg","gridCfg","verticalScale","directionToPosition","parentBBox","tl","getLegendOption","getDirection","Legend","layoutBBox","maxWidthRatio","maxHeightRatio","maxSize","getCategoryLegendSizeCfg","existCo","getComponentById","customCfg","getCategoryCfg","createCustomLegend","loopLegends","getContinuousCfg","createFieldLegend","doEach","looped","createContinuousLegend","createCategoryLegend","containMin","containMax","attrLegendCfg","mergeLegendCfg","themePageNavigator","userPageNavigator","itemMarker","getCustomLegendItems","baseCfg","categoryCfg","vw","onChangeFn","resetMeasure","onValueChange","changeViewData","getSliderCfg","updateSlider","createSlider","measureSlider","getMinMaxText","SliderComponent","getThemeOptions","dataSize","xTickCount","maxIndex","getValidScrollbarCfg","originalAnimate","getScrollRange","updateScrollbar","createScrollbar","measureScrollbar","getScrollbarComponentCfg","xScaleCfg","yScalesCfg","getScrollbarTheme","thumbHighlightColor","restStyles","getScrollbarData","getStep","getCnt","endIdx","xScaleValues","ScrollbarComponent","realConfig","categorySize","DEFAULT_REGION_PATH_STYLE","getItemsOfView","findItemsFromViewRecurisive","ActiveRegion","xValue_1","elements_1","coordinate_1","firstBBox_1","lastBBox_1","groupBBox_1","appendRatio","appendWidth","firstElement","lastElement","innterRadius","TooltipAction","lastTimeStamp","preLoc","curLoc","SiblingTooltip","siblingPoint","EllipsisText","tipContent","tooltipStyles","StateBase","setElementState","setStateEnable","clearViewState","ElementState","ignoreListItemStates","isItemIgnore","setStateByComponent","setElementsStateByItem","setStateByElement","isMathItem","event_1","ElementActive","StateAction","LinkByColor","getColorScale","getLinkPath","nextElement","nextBBox","addLinkShape","linkByElement","getElementsByField","group_1","linkGroup","count_1","nextEl","removeLink","unlink","ElementRangeState","isStarted","effectSiblings","effectByRecord","setSiblingsState","allElements","setSiblingsStateByRecord","setElementsState","effectElements","ElementRangeActive","ElementSingleState","ElementSingleActive","STATUS_UNACTIVE","STATUS_ACTIVE","clearHighlight","setHighlightBy","INACTIVE","ACTIVE","ElementHighlight","setElementHighlight","activeElements","allCancel_1","HighlightColor","highlightElements","Highlight","HighlightX","ElementRangeHighlight","BEFORE_HIGHLIGHT","AFTER_HIGHLIGHT","ElementSingleHighlight","ElementRangeSelected","ElementMultipleSelected","ElementSingleSelected","ListState","ignoreItemStates","getTriggerListInfo","getAllowComponents","allowSetStateByElement","clearAllComponentsState","componentNames","allowSetStateByItem","ignoreStates","setItemsState","triggerInfo","ListActive","ListHighlight","activeItems","ListSelected","ListUnchecked","STATUS_UNCHECKED","STATUS_CHECKED","ListChecked","setCheckedBy","list_1","ListFocus","clickedItem","checkedItems","uncheckedItems","checkedItem","items_4","items_4_1","STATUS_SHOW","TIP_ID","ListRadio","showTip","hideTip","containerId","MaskBase","starting","moving","preMovePoint","emitEvent","createMask","maskAttrs","getMaskAttrs","updateMask","maskStyle","moveStart","moveEnd","CircleMask","RectMask","clampPoint","inPlot","normalStart","normalEnd","DimRect","PathMask","addPoint","getSpline","SmoothPathMask","MultipleMaskBase","recordPoints","maskType","multiPoints","recordPointStart","updateShapesCapture","getCurMaskShapeIndex","recordPointContinue","clearAll","recordPointClear","getRecordPoints","lastPoints","isCapture","RectMultiMask","DimRectMultiMask","MultipleRectMask","CircleMultiMask","PathMultiMask","SmoothPathMultiMask","MultiplePathMask","CursorAction","pointer","crosshair","help","eResize","wResize","nResize","sResize","neResize","nwResize","seResize","swResize","nsResize","ewResize","zoomIn","zoomOut","DataFilter","filterView","unCheckedItems","scale_1","names_1","getFilter","RangeFilter","hasDim","BEFORE_FILTER","normalCurrent","reRender","AFTER_FILTER","BEFORE_RESET","RESET","AFTER_RESET","SiblingFilter","ElementFilter","maskElements_1","byRecord","filterByRecord","filterByBBox","maskElements","ButtonAction","buttonGroup","buttonCfg","getButtonCfg","drawButton","buttonShape","Drag","dragStart","drag","Move","isMoving","startMatrix","ScaleTranslate","cfgFields","cacheScaleDefs","resetDim","startCache","noramlCurrent","translateDim","translateLinear","TransformAction","zoomRatio","zoomDim","dRatio","zoomLinear","toMin","toMax","MousewheelScroll","scrollbarController","currentRatio","nextStart","isWheelDown","nextRatio","AxisDescription","descriptionTooltipStyle","isPointInView","CanvasEngine","SVGEngine","greedy","totalHeight_1","lineHeight_1","plotRange_1","halves_1","maxLabelsCountForOneSide","isRight","labelShapes_1","labelShapes_1_1","rPow2","dyPow2","innerPoint","itemX","itemY","maxTimes","dxdy","maxDelta","nt","times","accessedCache","spiralFill","memoKey","regionMinX","regionMinY","regionMaxX","regionMaxY","finalX","finalY","translateX_1","textBox","DOT_WIDTH","labels_1","labels_1_1","RIGHT_HALF_KEY","separateLabels","totalR","labelsContainerRange","dxPow2","dx_offset","smoothConnector","breakPoint","breakPoint3","xSign","slope1","slope2","drawLabelline","fillWhite","isContrastColorWhite","moveInShape","filteredLabels","filterLabel","groupedLabels","addCurrentGroup","curItems","sortedCollections","sortedLabels","sortLabels","downFail","inRight","inflectionPoint","totalOffset","halfHeight","originalPos","pathCommands","curStartAngle","curEndAngle","preStartAngle","preEndAngle","diffStartAngle","diffEndAngle","onFrameStartAngle","onFrameEndAngle","EllipsisTextAction","ElementHighlightByX","ElementHighlightByColor","ElementSelected","ElementLinkByColor","DimMask","DataRangeFilter","ElementSiblingFilter","ViewDrag","ViewMove","ScaleZoom","showEnable","processing","rollback","LEVEL","AXIS_META_CONFIG_KEYS","getMessage","argIndex","adjustYMetaByZero","numberData","gtZero","ltZero","transformDataToNodeLinkData","sourceField","targetField","weightField","rawFields","nodesIndex","weight","rawData","processIllegalData","WARN","deepAssign","getContainerSize","flow","flows","findGeometry","getAllElements","getAllElementsRecursively","kebabCase","transformLabel","labelOptions","isRealNumber","normalPadding","getAdjustAppendPadding","currentAppendPadding","PADDING","resolveAllPadding","paddings","normalPaddings","finalPadding","adapteStyle","styleObject","justifyContent","alignItems","shapeStyleKeys","setStatisticContainerStyle","renderStatistic","statistic","plotType","titleOpt","contentOpt","containerW","liquidShape","customHtml","findViewById","getViews","getSiblingViews","addViewAnimation","animationCfg","initCanvas","fillRect","getUnitPatternSize","isStagger","unitSize","getSymbolsPosition","transformMatrix","dpr","defaultDotPatternCfg","drawDot","defaultLinePatternCfg","createLinePattern","lineCfg","Path2D","defaultSquarePatternCfg","drawSquare","strokeRect","getCanvasPattern","dotCfg","dots_1","createDotPattern","squareCfg","squares","squares_1","createSquarePattern","patternOption","colorAttribute","seriesValue","seriesField","annotationOptions","annotationController","transformations","LocaleMap","registerLocale","localeObj","getLocale","getTooltipMapping","defaultFields","getMappingField","shapeField","styleField","mappingFields","tileMappingField","getMappingFunction","tooltipFields","customMappingField","columnBackground","widthRatio","groupField","otherAdaptor","stepType","SizeSensorId","SensorTabIndex","SensorClassName","createSensor","_debounce","_constant","whenDestroy","sensor","contentDocument","newSensor","unbind","resizeObserver","_interopRequireDefault","sensors","_object","sensorPool","removeSensor","getSensor","_id","_sensors","Sensors","clean","sensorId","ver","bind_1","_sensorPool","SOURCE_ATTRIBUTE_NAME","PLOT_CONTAINER_OPTIONS","Plot","getDefaultOptions","createG2","chartSize","execAdaptor","bindSizeSensor","updateOption","stateObjects","addAnnotations","incoming","removeAnnotations","_loop_2","unbindSizeSensor","adaptor","getSchemaAdaptor","triggerResize","measure","as","sumMap","groupValue","percentage","getDataWhetherPercentage","asField","pointMapping","areaMapping","pointState","areaState","areaParams","lineGeometry","areaShape","lineMapping","lineParams","pointParams","areaGeometry","DEFAULT_OPTIONS","BUTTON_ACTION_CONFIG","getInteractionCfg","interactionType","brushType","isStartEnable","drawText","BRUSH_TYPES","brushInteraction","brush","buttonConfig","INTERACTION_MAP","getStartStages","conversionTagFormatter","getConversionTagOptionsWithDefaults","headSize","elemPrev","elemNext","pointPrev","pointNext","totalWidth","renderArrowTag","textWidth","cWidth","cEnd","textAdjusted","renderTextTag","columnStyle","percentData","getDeepPercent","stackedItem","percentYMeta","isRange","columnTooltip","customItems_1","tooltipFormatter_1","isBar","conversionTag","connectedArea","verticalAxis","horizontalAxis","coordinateOptions","barWidthRatio","minBarWidth","maxBarWidth","barBackground","columnAdaptor","Column","FUNNEL_PERCENT","FUNNEL_MAPPING_VALUE","FUNNEL_CONVERSATION","FUNNEL_TOTAL_PERCENT","PLOYGON_X","PLOYGON_Y","CONVERSION_TAG_NAME","maxYFieldValue","conversionTagComponent","getLineCoordinate","formatter_1","lineOption","formatData","funnelStyle","baseGeometry","datumIndex","initLineOption","basicFunnel","compareField","showFacetTitle","formatterData","defaultFacetLabel","compareConversionTag","viewIndex","preItemX","preItemY","ConversionTagAction","rendering","conversionTag_1","basicConversionTag","FUNNEL_CONVERSION_TAG","FUNNEL_LEGEND_FILTER","interactionStart","dynamicHeight","facetFunnel","compareFunnel","dynamicHeightFunnel","Funnel","CONVERSATION_FIELD","FUNNEL_CONVERSATION_FIELD","PERCENT_FIELD","TOTAL_PERCENT_FIELD","RANGE_VALUE","RANGE_TYPE","PERCENT","INDICATEOR_VIEW_ID","RANGE_VIEW_ID","pin","getIndicatorData","getRangeData","clampTicks","processRangeData","gaugeStyle","meter","indicatorData","rangeData","rangeColor","contentOption","transformContent","polarCoord","polarCenter","polarMaxY","containerWidth","renderGaugeStatistic","STEP","stepRatio","STEP_RATIO","COORD_START_ANGLE","COORD_END_ANGLE","GAP","INTERVAL","START_ANGLE","END_ANGLE","Gauge","indicatorView","rangeView","getBinKey","binWidth","binNumber","binHistogram","binField","stackField","originData_copy","comparer","keys_1","_binWidth","_defaultBinNumber","LN2","sturges","bins","binKey","groupKey","groupKeyBinKey","plotData","HISTOGRAM_X_FIELD","HISTOGRAM_Y_FIELD","Histogram","MarkerActiveAction","getView","InteractionAction","pieStyle","ORIGIN_MATRIX","ulMatrix","PieLegendAction","getActiveElements","item_1","getActiveElementLabels","transfrom","StatisticAction","getAnnotations","_view","getInitialAnnotation","initialAnnotation","colorField_1","PIE_STATISTIC","adaptOffset","defaultOffset","isAllZero","angleField","percentageField_1","content_1","dataum","angleScale","labelLayoutType","spider","labelLayoutCfg","transformStatisticOptions","titleOpt_1","contentOpt_1","dataValue","getTotalValue","metaFormatter","pieAnnotation","startStages_1","stage","Pie","prevOptions","prevData","curData","DEFAULT_COLOR","getProgressData","clampPercent","progressStyle","Progress","RingProgress","_slicedToArray","_arrayWithHoles","_arr","_s","_iterableToArrayLimit","_nonIterableRest","xv","yv","Float64Array","ux","uy","visitPoints","determination","uY","predict","SSE","SST","sse","sst","midpoint","interpose","xmin","xmax","LOG10E","mp","a0","ols","uX","uXY","uX2","slope","XY","X2","_ols2","intercept","rSquared","tricube","updateInterval","quadratic","_points2","X3","X4","X2Y","n0","X2X2","REGRESSION_MAP","exp","YL","XYL","ly","loess","bandwidth","bw","yhat","residuals","robustWeights","xk","yk","xkw","medianResidual","_w","logarithmic","lb","lx","poly","polynomial","coefficients","_o","lhs","rhs","coef","gaussianElimination","uncenter","YS","xScaleView","yScaleView","points2Path","pathData","regressionLine","algorithm","customEquation","equation","roundByPrecision","safeFormat","getRegressionEquation","reg","transformOptions","isOneX","isOneY","meta_1","xFieldValue","yFieldValue","xIsPositiveNumber","yIsPositiveNumber","getMetaMinMax","fieldMeta","getCustomValue","getMeta","shapeLegend","sizeLegend","showLegend","scatterGeometry","scatterAnnotation","quadrant","xBaseline","yBaseline","regionStyle_1","defaultConfig_1","textOffset","getQuadrantDefaultConfig","equationStyle","equationStyle_1","top_1","showEquation","showEquation_1","defaultStyle_1","defaulEquationStyle_1","Scatter","BRUSH_FILTER_EVENTS","Y_FIELD","TREND_FIELD","TREND_DOWN","defaultContent","risingFill","fallingFill","getStockData","open_1","close_1","high","low","stockStyle","baseMeta","Stock","getTinyData","X_FIELD","DEFAULT_TOOLTIP_OPTIONS","pointOptions","lineOptions","seriesData","TinyArea","TinyColumn","Stage","TinyLine","PLOT_ADAPTORS","lineAdaptor","pie","pieAdaptor","barAdaptor","areaAdaptor","gauge","gaugeAdaptor","tinyLineAdaptor","tinyColumnAdaptor","tinyAreaAdaptor","ringProgressAdaptor","progressAdaptor","scatter","scatterAdaptor","histogram","histogramAdaptor","funnelAdaptor","stock","stockAdaptor","PLOT_CONSTRUCTOR","DEFAULT_OPTIONS_MAP","execPlotAdaptor","plot","multiView","viewOfG2","geometryAdaptor","multiPlot","plots","Association","getAssociationItems","linkField","Mix","FIRST_AXES_VIEW","SECOND_AXES_VIEW","SERIES_FIELD_KEY","hopeData","data1","__axisPosition","firstView","secondView","firstViewData","secondViewData","aliasMap","commonInteraction","commonLimitInPlot","commonTheme","commonAnimation","leftGeometry","rightGeometry","leftLabelCfg","positionMap_1","BidirectionalBar","BOX_RANGE","OUTLIERS_VIEW_ID","boxStyle","newData","low_1","q1_1","median_1","q3_1","high_1","yFieldName","outliersPoint","outliersField","outliersStyle","outliersView","outliersViewData","syncName","getSeriesFieldKey","measureField","rangeField","ds","rangeValues","rKey","measureValues","mKey","targetValues","tKey","bulletStyle","extData","rangeGeometry","measureGeometry","targetGeometry","Box","Bullet","nodeWidthRatio","nodePaddingRatio","sourceWeight","targetWeight","chordLayout","chordLayoutOptions","chordLayoutInputData","nodeById","edges","forIn","inEdges","outEdges","frequency","processGraph","localeCompare","sortNodes","outputNodes","nodePaddingRatio_1","margin_1","nodeWidthRatio_1","totalValue_1","deltaX_1","layoutNodes","outputLinks","valueById_1","sId","tId","sNode","tNode","sValue","currentSValue","sStart","sEnd","tValue","currentTValue","tStart","tEnd","locatingEdges","NODE_COLOR_FIELD","EDGE_COLOR_FIELD","nodeStyle","edgeStyle","nodesData","edgesData","chordData","nodeGeometry","nodeView","edgeGeometry","edgeView","Chord","RAW_FIELDS","hierarchyConfig","drilldown","BREAD_CRUMB_NAME","DEFAULT_BREAD_CRUMB_CONFIG","dividerText","activeTextStyle","HIERARCHY_DATA_TRANSFORM_PARAMS","DrillDownAction","historyCache","breadCrumbGroup","breadCrumbCfg","drill","drawBreadCrumb","PADDING_TOP","back","backTo","hideCrumbGroup","nodeInfo","drillData","nodeData","drillDownConfig","breadCrumb","drawBreadCrumbGroup","rootText","textShapeBox","targetId","newHistoryCache","dividerBox","defaultSeparation","meanXReduce","maxYReduce","hierarchy","mapChildren","objectChildren","childs","eachBefore","computeHeight","copyData","enclose","circles","shuffle","enclosesWeak","encloseBasis","extendBasis","enclosesWeakAll","enclosesNot","encloseBasis2","encloseBasis3","dr","x21","y21","r21","a3","d3","ab","xa","xb","ya","yb","place","intersects","packEnclose","aa","sj","sk","constantZero","constant$1","defaultRadius","index$4","radiusLeaf","eachAfter","packChildren","translateChild","roundNode","treemapDice","partition$1","partition","positionNode","that","ancestor","aNodes","ancestors","bNodes","leastCommonAncestor","descendants","leaves","preroot","ambiguous","defaultId","defaultParentId","nextLeft","nextRight","moveSubtree","wm","wp","nextAncestor","vim","TreeNode","treemapSlice","squarifyRatio","nodeValue","sumValue","newRatio","minRatio","beta","dice","squarify","index$3","tile","paddingStack","paddingInner","treemap","paddingOuter","resquarify","_squarify","separation","nodeSize","cluster","previousNode","meanX","leafLeft","leafRight","stratify","nodeId","nodeKey","nodeByKey","treeRoot","firstWalk","secondWalk","sizeNode","tx","kx","ky","executeShifts","vip","vop","vom","sip","sop","sim","som","apportion","valueOffset","valueTarget","valueLeft","valueRight","NODE_INDEX_FIELD","CHILD_NODE_COUNT","NODE_ANCESTORS_FIELD","INVALID_FIELD_ERR_MSG","getField","defaultField","getAllNodes","index_1","eachNode","enableDrillDown","d3Hierarchy.pack","d3Hierarchy\n            .hierarchy","ancestorNode","resolvePaddingForCircle","tempPadding","wSize","hSize","restWidthPadding","restHeightPadding","finalSize","diameter","tempAppendPadding","circleSize","nameFormatter","valueFormatter","adaptorInteraction","baseInteraction","isParentNode","inCenter","CirclePacking","AxisType","DualAxesGeometry","LEFT_AXES_VIEW","RIGHT_AXES_VIEW","DEFAULT_YAXIS_CONFIG","DEFAULT_LEFT_YAXIS_CONFIG","DEFAULT_RIGHT_YAXIS_CONFIG","isLine","isColumn","getGeometryOption","transformObjectToArray","transformAttribute","getYAxisWithDefault","axisType","Left","Right","getViewLegendItems","legendItemName","isGeometry","viewId","attrItems","doSliderFilter","sliderValue","geometryOptions","allLine","createViews","SORT_MAP","FIELD_KEY","adjust_1","drawSingleGeometry","themeColor","groupScale","leftView","rightView","commonAnnotation","leftLegend_1","rightLegend_1","leftItems","rightItems","yF","legendItem_1","facetAdaptor","facetType","restFacetCfg","viewOptions","execViewAdaptor","plotOptions_1","DualAxes","sizeRatio","heatmapStyle","checkedSizeRatio","dautm","maxSideLength","sideLength","getLiquidData","liquidStyle","outline","wave","lerp","getWaterWavePositions","waveLength","getWaterWavePath","waterLevel","curves","_phase","waveRight","builtInShapeByName","cpX","cpY","areaOptions","getScaleMax","maxAngle","yData","formatRadian","actualData","stackedData","valueItem","getStackedData","intervalGeometry","waveCount","minXPoint","waveAttrs","getFillAttrs","outlineAttrs","getLineAttrs","shapePath","waves","clipPath","addWaterWave","Liquid","RadarTooltipController","cfgTitle","hintItems","title_1","result_1","displayTitle","TooltipController","RadarTooltipAction","getTooltipController","Radar","sectorStyle","RadialBar","Rose","COLOR_FIELD","NODES_VIEW_ID","EDGES_VIEW_ID","cutoffCircle","removedData","getNodes","graphMatrix","visited","DFS","dfsNode","targetDepth","justify","sourceLinks","sumBy","maxValueBy","ascendingSourceBreadth","ascendingBreadth","ascendingTargetBreadth","defaultNodes","graph","defaultLinks","computeLinkBreadths","nodes_1","targetLinks","Sankey","linkSort","sankey","nodes_2","computeNodeLinks","nodes_3","fixedValue","computeNodeValues","maxDepth","computeNodeDepths","computeNodeHeights","nodes_4","columns_1","computeNodeLayers","minValueBy","columns_2","nodes_6","nodes_5","reorderLinks","initializeNodeBreadths","relaxRightToLeft","relaxLeftToRight","computeNodeBreadths","column_1","targetTop","dy_1","reorderNodeLinks","resolveCollisions","column_2","sourceTop","dy_2","subject","resolveCollisionsBottomToTop","resolveCollisionsTopToBottom","dy_3","dy_4","targetLinks_1","sourceLinks_1","nodes_7","nodeAlign","nodeDepth","nodeSort","nodeWidth","nodePadding","extent","ALIGN_METHOD","minItem","minBy","sankeyLayout","sankeyLayoutOptions","sankeyProcessor","getNodeAlignFunction","layoutData","getNodeWidthRatio","getNodePaddingRatio","transformToViewsData","sankeyLayoutInputData","dataType","isNodeLink","nodeState","edgeState","nodeDraggable","DRAG_INTERACTION","nodeInteractions","edgeInteractions","SankeyNodeDragAction","isDragging","isNodeElement","getNodeView","getEdgeView","getCurrentDatumIdx","currentElementIdx","prevNodeAnimateCfg","prevEdgeAnimateCfg","prevDatum","datumGap_1","nextDatum","edgeData","nodesView","edgesView","SUNBURST_ANCESTOR_FIELD","SUNBURST_Y_FIELD","SUNBURST_PATH_FIELD","sunburstStyle","ignoreParentValue","d3Hierarchy.partition","tileMethod","d3Hierarchy","d3Hierarchy\n            .treemap","activeDepth","polygonAdaptor","pathFormatter","findInteraction","enableInteraction","enableDrillInteraction","curPath","rectStyle","basePolygon","viewZoomInteraction","Sunburst","Treemap","drillDownInteraction","transData","ID_FIELD","PATH_FIELD","blendMode","placeElementsOrdered","VennElementActive","syncElementsPos","VennElementHighlight","ElementSelectedAction","ElementSingleSelectedAction","VennElementSelected","VennElementSingleSelected","VennLabel","customLabelInfo","fillAttrs","blendObject","screen","overlay","dodge","burn","blend","c0","blendRgbArr","innerBlend","colorToArr","g0","g1","rgbaArr","zeros","zerosM","norm2","weightedSum","w1","w2","nelderMead","parameters","maxDiff","maxIterations","nonZeroDelta","zeroDelta","minErrorDelta","minTolerance","rho","chi","sigma","simplex","updateSimplex","reflected","contracted","iteration","sortedSimplex","worst","shouldReduce","wolfeLineSearch","pk","phi0","phiPrime0","fxprime","phi_old","phiPrime","a_lo","a_high","phi_lo","conjugateGradient","delta_k","SMALL","intersectionArea","stats","intersectionPoints","circleCircleIntersection","parentIndex","getIntersectionPoints","innerPoints","containedInCircles","arcArea","polygonArea","arcs","midPoint","angleDiff","circleArea","smallest","disjoint","circleOverlap","circleMargin","interior","exterior","computeTextCentre","solution","areaStats","computeTextCentres","areas","overlapped","circleids","circleid","getOverlappingCircles","sets","areaids","overlaps","setid","centre","distanceFromIntersectArea","fA","fB","fMid","bisect","bestInitialLayout","loss","lossFunction","setOverlaps","rowid","mostOverlapped","positioned","isPositioned","positionSet","setIndex","extraPoints","bestLoss","bestPoint","localLoss","greedyLayout","constrained","restarts","setids","matrices","distances","constraints","getDistanceMatrices","norm","xj","yj","dij","squaredDistance","distance_1","constrainedMDSGradient","constrainedMDSLayout","getCircles","indices","scaleSolution","minMax","xRange","yRange","getBoundingBox","xScaling","yScaling","scaling","getColorMap","colorPalette","setsField","colorPaletteLen","colorArr","layoutVennData","vennData","initialLayout","ids","addMissingAreas","setid_1","venn","textCenters","circlePath","wide","intersectionAreaPath","currSets","filterSets","legalArr","testArr","islegalSets","schemaGeometry","colorOptions","map_1","transformColor","vennInteraction","MAP_1","Venn","VIOLIN_Y_FIELD","MIN_MAX_FIELD","QUANTILE_FIELD","MEDIAN_FIELD","VIOLIN_VIEW_ID","kde","sampleSize","violinStyle","findMin","findMax","findMinMulti","findMaxMulti","inside","LN_2","helper","kernel","getUnifiedMinMax","getUnifiedMinMaxMulti","arrMulti","relaxMin","relaxMax","normalizedMinMax","buckets","partialArea","partialAreas","accumulator","generatePartialAreas","fullArea","initalValue","bucket","xToBucket","leftBlockCount","rightBlockCount","spilledAreaLeft","spilledAreaRight","startGradPos","gradAccumulator","getExpectedValueFromPdf","pdf","expected","getXWithLeftTailArea","getPerplexity","entropy","quickselect","sd","quantile","quantileIndex","quantileSelect","multiQuantileSelect","toBoxValue","q1","q3","toViolinValue","pdfOptions","pdfResults","violinSize","violinY","transformViolinData","resultList","seriesGroup","TOOLTIP_FIELDS","violinView","boxView","minMaxView","quantileView","medianView","legendField_1","legendOptions","baseAnnotation","DIFF_FIELD","ABSOLUTE_FIELD","IS_TOTAL","leaderLine","waterfallStyle","newYField","dIdx","localeTotalLabel","Y_FIELD_META","labelMode","leaderLineCfg","linkPath","Waterfall","WORD_CLOUD_COLOR_FIELD","timeInterval","wordStyle","rotationSteps","rotateRatio","spiral","wordCloud","words","cloudFont","cloudFontSize","cloudFontNormal","cloudRotate","cloudPadding","archimedeanSpiral","cloudText","cloudCanvas","cloud","willReadFrequently","cw","board","cloudCollide","collideRects","sprite","sw","msx","contextAndRatio","zeroArray","tags","cloudSprite","hasText","hasImage","cloudBounds","_tags","_bounds","can","w32","cxt","imageData","functor","spirals","tagCloud","imageMask","cloudRadians","maxh","sr","wcr","wsr","hcr","hsr","xoff","yoff","seenRow","archimedean","rectangular","rawOptions","chartPadding","wordField","placementStrategy","numbers","getSingleKeyValues","getFontSizeMapping","getRotate","resolvePadding","fMin_1","fMax_1","resolveRotate","perSize","getTextAttrs","useLineChart","initialOptions","currentOptions","formatNumber","isInteger","renderChart","isMulti","isMultiSeries","showPoints","displayName","onRenderComplete","destroyChart","WordCloud","rej","HTMLImageElement","ERROR","general","waterfall","chartRef","processedChart","chart_name","hasMultipleSeries","newDarkMode","newMultiSeries","resizeTimer","chart_desc","useBarChart","usePieChart","showStatistic","pieData","_title","rawValues","uniqueTypes","uniqueNames","hasCategoryField","category","isMultiMeasure","selectedType","aggregated","useAreaChart","isStacked","useScatterChart","hasCategory","showRegression","newHasCategory","useBubbleChart","xAxisTitle","yAxisTitle","xTitle","yTitle","bubbleColor","grouped","sizeTitle","firstGroup","sizeValue","categoryValue","uniqueCategories","newXTitle","newYTitle","useHeatmapChart","colorRange","drawerVisible","activeDocIndex","copiedChunkId","checkMobile","knowledgeList","hasReferences","chunks","totalChunks","drawerTitle","drawerSize","drawerDirection","copyChunk","chunkIndex","metadata","messagesList","resource","plansList","_component_el_collapse","_component_el_collapse_item","headerTranslation","REGION","REVENUE","SALES","PROFIT","PRODUCT","VALUE","AMOUNT","QUANTITY","PRICE","CATEGORY","STATUS","ID","translatedHeaders","upperHeader","tableData","isNumberColumn","numberColumns","isPercentageColumn","percentageColumns","getColumnClass","_component_el_table","_component_el_table_column","_withCtx","col0","handleCellClick","mobileMode","statusColorMap","statusBgMap","statusTextMap","currentStatusColor","currentStatusBg","currentStatusText","loadingText","loadingTextMap","hasContent","hasHeaderActions","headerActions","defaultName","tableHeaders","firstRow","formattedTableData","renderBarChart","renderLineChart","renderPieChart","hasRendered","canRender","attributeFilter","PluginStatus","_withDirectives","_vShow","ResponsiveTable","importantColumns","line_chart","family","purpose","dataPres","minQty","maxQty","fieldConditions","channel","recRate","step_line_chart","area_chart","stacked_area_chart","percent_stacked_area_chart","column_chart","grouped_column_chart","stacked_column_chart","percent_stacked_column_chart","range_column_chart","waterfall_chart","bar_chart","stacked_bar_chart","percent_stacked_bar_chart","grouped_bar_chart","range_bar_chart","radial_bar_chart","bullet_chart","pie_chart","donut_chart","nested_pie_chart","rose_chart","scatter_plot","bubble_chart","non_ribbon_chord_diagram","arc_diagram","chord_diagram","sankey_diagram","funnel_chart","mirror_funnel_chart","box_plot","heatmap","density_heatmap","radar_chart","wordcloud","candlestick_chart","compact_box_tree","dendrogram","indented_tree","radial_tree","flow_diagram","fruchterman_layout_graph","force_directed_layout_graph","fa2_layout_graph","mds_layout_graph","circular_layout_graph","spiral_layout_graph","radial_layout_graph","concentric_layout_graph","grid_layout_graph","ckb","ckbCfg","ckbBase","include","chartType","processCkbCfg","CHART_IDS","pDeepMix","inputDist","inputLevel","inputMaxLevel","distinct","objKeys","hasSubset","array1","array2","MAX_SOFT_RULE_COEFFICIENT","applyChartTypes","barSeriesQty","docs","lintText","dataProps","field4Series","levelOfMeasurements","seriesQty","barWithoutAxisMin","fixText","optimizer","chartSpec","domainMin","defaultWeights","computeScore","chartWIKI","ruleBase","ruleType","computedScore","ruleId","dataCheck","dataPres_1","dataPre","fieldsLOMs","lomCount_1","fieldLOM","verifyDataProps","diffPieSector","intervalField","scaledProduct","maxProduct","hasCanvasLayout","preferences","canvasLayout","landscapeOrPortrait","limitSeries","hasSeriesField","nominalOrOrdinalFields","lineFieldTimeOrdinal","getNominalFields","nominalEnumCombinatorial","nominalFields","sortedNominals","seriesQtyLimit","limit","undefined","FUNC_ERROR_TEXT","HASH_UNDEFINED","PLACEHOLDER","WRAP_PARTIAL_FLAG","WRAP_ARY_FLAG","WRAP_REARG_FLAG","INFINITY","NAN","MAX_ARRAY_LENGTH","wrapFlags","boolTag","dateTag","errorTag","genTag","numberTag","regexpTag","stringTag","symbolTag","arrayBufferTag","float32Tag","float64Tag","int8Tag","int16Tag","int32Tag","uint8Tag","uint8ClampedTag","uint16Tag","uint32Tag","reEmptyStringLeading","reEmptyStringMiddle","reEmptyStringTrailing","reEscapedHtml","reUnescapedHtml","reHasEscapedHtml","reHasUnescapedHtml","reEscape","reEvaluate","reInterpolate","reRegExpChar","reHasRegExpChar","reWrapComment","reWrapDetails","reSplitDetails","reAsciiWord","reForbiddenIdentifierChars","reEsTemplate","reLatin","reNoMatch","reUnescapedString","rsAstralRange","rsComboRange","rsComboMarksRange","rsDingbatRange","rsLowerRange","rsUpperRange","rsVarRange","rsBreakRange","rsMathOpRange","rsApos","rsAstral","rsBreak","rsCombo","rsDigits","rsDingbat","rsLower","rsMisc","rsFitz","rsNonAstral","rsRegional","rsSurrPair","rsUpper","rsZWJ","rsMiscLower","rsMiscUpper","rsOptContrLower","rsOptContrUpper","reOptMod","rsOptVar","rsSeq","rsEmoji","rsSymbol","reApos","reComboMark","reUnicode","reUnicodeWord","reHasUnicode","reHasUnicodeWord","contextProps","templateCounter","stringEscapes","freeParseFloat","moduleExports","nodeIsArrayBuffer","nodeIsDate","nodeIsRegExp","arrayAggregator","setter","arrayEachRight","arrayEvery","arrayIncludes","baseIndexOf","arrayIncludesWith","comparator","arrayReduce","initAccum","arrayReduceRight","asciiSize","baseProperty","baseFindKey","baseFindIndex","fromRight","strictIndexOf","baseIsNaN","baseIndexOfWith","baseMean","baseSum","basePropertyOf","baseReduce","baseValues","cacheHas","charsStartIndex","strSymbols","chrSymbols","charsEndIndex","deburrLetter","escapeHtmlChar","escapeStringChar","hasUnicode","replaceHolders","stringSize","unicodeSize","stringToArray","unicodeToArray","asciiToArray","unescapeHtmlChar","runInContext","arrayProto","idCounter","oldDash","symIterator","ctxClearTimeout","ctxNow","ctxSetTimeout","nativeCeil","nativeFloor","nativeIsBuffer","nativeIsFinite","nativeJoin","nativeParseInt","nativeRandom","nativeReverse","metaMap","realNames","lodash","LazyWrapper","LodashWrapper","wrapperClone","baseLodash","chainAll","__wrapped__","__actions__","__chain__","__values__","__dir__","__filtered__","__iteratees__","__takeCount__","__views__","arraySample","baseRandom","arraySampleSize","shuffleSelf","arrayShuffle","baseAggregator","baseAssign","baseAt","isFlat","isFull","copySymbolsIn","baseAssignIn","copySymbols","cloneDataView","cloneRegExp","baseConformsTo","baseDelay","baseDifference","valuesLength","valuesIndex","templateSettings","evaluate","imports","createBaseEach","baseForOwn","baseEachRight","baseForOwnRight","baseEvery","baseExtremum","baseFilter","createBaseFor","baseForRight","baseFunctions","baseGt","baseHas","baseIntersection","arrays","caches","baseInvoke","othProps","noCustomizer","isMasked","baseMatchesProperty","baseLt","isArrayLikeObject","baseNth","baseOrderBy","iteratees","orders","getIteratee","criteria","baseSortBy","objCriteria","othCriteria","ordersLength","compareAscending","compareMultiple","basePullAll","basePullAt","baseRepeat","baseSample","baseSampleSize","baseSetData","baseShuffle","baseSome","baseSortedIndex","retHighest","baseSortedIndexBy","valIsNaN","valIsNull","valIsSymbol","valIsUndefined","othIsDefined","othIsNull","othIsReflexive","othIsSymbol","setLow","baseSortedUniq","baseToNumber","baseUniq","createSet","seenIndex","baseUpdate","updater","baseWhile","isDrop","baseWrapperValue","baseXor","baseZipObject","assignFunc","valsLength","castArrayLikeObject","castFunction","castRest","castSlice","valIsDefined","valIsReflexive","composeArgs","partials","holders","isCurried","argsIndex","argsLength","holdersLength","leftIndex","leftLength","rangeLength","isUncurried","composeArgsRight","holdersIndex","rightIndex","rightLength","createAggregator","initializer","createAssigner","createCaseFirst","createCompounder","deburr","createCtor","thisBinding","createFind","findIndexFunc","createFlow","prereq","thru","getFuncName","isLaziable","plant","createHybrid","partialsRight","holdersRight","argPos","ary","arity","isAry","isBind","isBindKey","isFlip","getHolder","holdersCount","countHolders","newHolders","createRecurry","oldArray","reorder","createInverter","toIteratee","baseInverter","createMathOperation","createOver","arrayFunc","createPadding","charsLength","toFinite","baseRange","createRelationalOperation","wrapFunc","isCurry","setWrapToString","createRound","toInteger","createToPairs","setToPairs","baseToPairs","createWrap","srcBitmask","newBitmask","isCombo","createCurry","createPartial","createBind","customDefaultsAssignIn","customDefaultsMerge","otherFunc","isKeyable","isMaskable","stubFalse","shortOut","details","insertWrapDetails","updateWrapDetails","getWrapDetails","rand","difference","differenceBy","differenceWith","findLastIndex","intersection","intersectionBy","intersectionWith","pullAll","union","unionBy","unionWith","unzip","unzipWith","without","xor","xorBy","xorWith","zip","zipWith","wrapperAt","countBy","findLast","forEachRight","invokeMap","keyBy","bindKey","WRAP_BIND_FLAG","defer","negate","overArgs","transforms","funcsLength","partial","partialRight","rearg","gte","isError","lte","iteratorToArray","remainder","toLength","assignIn","assignInWith","assignWith","propsIndex","propsLength","defaultsDeep","mergeWith","invertBy","pickBy","toPairs","toPairsIn","camelCase","lowerFirst","snakeCase","startCase","upperCase","hasUnicodeWord","unicodeWords","asciiWords","attempt","bindAll","methodNames","flowRight","methodOf","mixin","over","overEvery","overSome","rangeRight","augend","addend","dividend","divisor","multiplicand","minuend","subtrahend","compact","cond","conforms","baseConforms","properties","curry","curryRight","drop","dropRight","dropRightWhile","dropWhile","baseFill","flatMapDeep","flatMapDepth","flattenDeep","flattenDepth","flip","functionsIn","mapKeys","mapValues","matchesProperty","nthArg","omitBy","propertyOf","pullAllBy","pullAllWith","setWith","sortedUniq","sortedUniqBy","take","takeRight","takeRightWhile","takeWhile","tap","isArrLike","unary","uniqBy","uniqWith","unset","updateWith","valuesIn","zipObject","zipObjectDeep","entriesIn","extendWith","cloneDeepWith","cloneWith","conformsTo","defaultTo","escapeRegExp","findLastKey","forInRight","forOwn","forOwnRight","inRange","baseInRange","isEqualWith","isMatchWith","isNative","isSafeInteger","isWeakMap","isWeakSet","strictLastIndexOf","mean","meanBy","stubObject","stubString","stubTrue","nth","noConflict","strLength","padStart","radix","floating","reduceRight","sample","sortedIndex","sortedIndexBy","sortedIndexOf","sortedLastIndex","sortedLastIndexBy","sortedLastIndexOf","isEscaping","isEvaluating","importsKeys","importsValues","reDelimiters","sourceURL","escapeValue","interpolateValue","esTemplateValue","evaluateValue","toLower","toSafeInteger","toUpper","truncate","omission","eachRight","isFilter","takeName","dropName","checkIteratee","isTaker","lodashFunc","retUnwrapped","isLazy","useLazy","isHybrid","isUnwrapped","onlyLazy","iterLength","takeCount","iterIndex","isQuantitative","isCategorical","isTemporal","inferDataType","scaleType","scaleType2dataType","isTransform","isField","columnOf","values2dataType","getSpecWithEncodeType","newEncode","xAxisLineFading","fieldInfo","maximum","minimum","yScaleMin","minFieldQty","cv","maxFieldQty","builtInRules","getChartRules","chartRules","SPECIAL_BOOLEANS","DELIMITER","BASE_MINUTE","OFFSET","isNumberString","hasDot","tempValue","isIntegerString","isFloatString","checkSpecialBoolean","isBasicType","getIsoDateAndTimeRegs","strictDatePattern","isoDatePatterns","isoTimePatterns","getIsoTimePatterns","isoDateAndTimePatterns","isDateString","isoDateAndTimeRegs","assert","CACHES","cachedValue","cache.get","cache.set","getMinIndex","getMaxIndex","newArray","variance","standardDeviation","pearson","cov","covariance","valueMap","vStr","isOrdinal","recommendation","isConst","through","through_1","through_2","patterns","analyzeType","analyzeField","statsValueMap","nonNullArray","null","typeArray","uniqueArray","missing","restNotNullArray_1","integer","lenArray","meanLength","containsChar","containsDigit","containsSpace","analyzeString","percentile5","percentile25","percentile50","percentile75","percentile95","analyzeNumber","analyzeDate","isInterval","isDiscrete","isTime","isAxis","generateArrayIndex","extraIndex","fillMissingValue","generateSplit","getStringifyLength","convertDataType","BaseFrame","setAxis","columnTypes","legal","getAxis","Series","rowLoc","rowIdx","loc","idxInIndex","rowLocArr","startLoc","endLoc","getByIndex","DataFrame","colData","data0","generateColumns","generateDataAndColDataFromArray","newDatum","dataValues","extraColumns","isObj","colLoc","newData_1","newIndex_1","newData_2","newIndex_2","startRowIdx_1","endRowIdx_1","startRowIdx","endRowIdx","rowIdxes","startColIdx","endColIdx","colIdxes","colIdx","colLocArr","tempData","newData_4","newIndex_4","newData_5","newIndex_5","startRowIdx_2","endRowIdx_2","getByColumn","maxLengths","idxIndex","WHITE","SEPARABLE_BLEND_MODES","clip_rgb","_clipped","_unclipped","classToType","unpack","keyOrder","TWOPI","PITHIRD","DEG2RAD","RAD2DEG","autodetect","chk","_rgb","chroma","cmyk","rgb2cmyk","rgb2hsl","minRgb","maxRgb","rgb2css","hsl2css","h_","RE_RGB","RE_RGBA","RE_RGB_PCT","RE_RGBA_PCT","RE_HSL","RE_HSLA","css2rgb","gl","hcg","rgb2hcg","RE_HEX","RE_HEXA","hex2rgb","rgb2hex","hxa","hsi","min_","rgb2hsi","max_","rgb2hsv","LAB_CONSTANTS","lab2rgb","b_","lab_xyz","xyz_rgb","rgb2lab","rgb2xyz","rgb_xyz","xyz_lab","lab","lch2lab","lch2rgb","lab2lch","rgb2lch","lch","hcl","w3cx11","laserlemon","lightgoldenrod","maroon2","maroon3","purple2","purple3","rgb2num","temperature2rgb","kelvin","temperature","minTemp","maxTemp","rgb2temperature","oklab2rgb","lrgb2rgb","cbrt","rgb2oklab","lr","lg","rgb2lrgb","oklab","oklch","rgb2oklch","mutate","clipped","mc","luminance","lum","cur_lum","max_iter","lm","rgb2luminance","luminance_x","index$2","mix$1","col1","col2","interpolator","premultiply","xyz0","xyz1","lrgb","z1","interpolate_hsx","hue0","hue1","sat0","sat1","lbv0","lbv1","lbv","dh","_average_lrgb","weights","xyz","_mode","_nacol","_spread","_pos","_padding","_classes","_colors","_out","_min","_max","_correctLightness","_colorCache","_useCache","_gamma","setColors","brewer","resetCache","tMapLightness","tMapDomain","bypassMap","analyze","tOut","tBreaks","correctLightness","L0","L1","pol","L_actual","L_ideal","L_diff","numColors","ascending","__range__","samples","asc","nodata","blend_f","MAX_VALUE","min_log","max_log","pb","pr","assignments","clusterSizes","nb_iters","centroids","mindist","newCentroids","kClusters","tmpKMeansBreaks","cool","hot","colorbrewer","OrRd","PuBu","BuPu","Oranges","BuGn","YlOrBr","YlGn","Reds","RdPu","Greens","YlGnBu","Purples","GnBu","Greys","YlOrRd","PuRd","Blues","PuBuGn","Viridis","Spectral","RdYlGn","RdBu","PiYG","PRGn","RdYlBu","BrBG","RdGy","PuOr","Set2","Accent","Set1","Set3","Dark2","Paired","Pastel2","Pastel1","average","xyz2","bezier","lab0","lab1","lab2","lab3","labs","newrow","binom_row","cubehelix","rotations","lightness","dl","fract","amp","cos_a","sin_a","contrast","l1","l2","deltaE","Kl","Kc","Kh","rad2deg","deg2rad","L2","avgL","avgC","a1p","a2p","C1p","C2p","avgCp","arctan1","arctan2","h1p","h2p","avgHp","deltaHp","deltaL","deltaCp","sl","sc","sh","deltaTheta","Rt","sum_sq","colorToHex","isChromaColor","ColorModelRange","colorToChromaColor","colorToArray","colorModel","chromaColor","arrayToColor","colorToGray","grayToColor","hexToColor","hexValue","hardLight","separableBlendFunc","colorBurn","colorDodge","softLight","exclusion","linearBurn","linearDodge","linearLight","vividLight","pinLight","setLum","clipColor","setSat","midIndex","nonSeparableBlendFunc","saturation","luminosity","colorBlend","colorTop","colorBottom","g2","blendRgb","randomInt","cloneTarget","hueOffset","dHue","newHue","installedColorSpaces","undef","channelRegExp","percentageChannelRegExp","cssColorRegExp","RGB","lowerCased","namedColors","matchCssSyntax","colorSpaceName","hasHue","firstChannelDivisor","secondChannelDivisor","thirdChannelDivisor","hexMatch","CMYK","cmykMatch","isColor","installColorSpace","propertyNames","propertyName","propertyValue","_alpha","_hue","otherColor","matchFromColorSpace","installForeignMethods","targetColorSpaceName","sourceColorSpaceName","shortName","isDelta","otherPropertyName","otherColorSpaceName","pluginList","installMethod","colorSpace","hexString","_red","_green","_blue","hexa","alphaString","cssa","XYZ","fromRgb","_x","_y","_z","LAB","HSV","_saturation","sv","svDivisor","HSL","_lightness","channelLuminance","onecolor","_cyan","_black","_magenta","_yellow","color2","lum1","lum2","gs","require$$12","require$$15","weight1","weight2","degrees","matrixXyzRgb","matrixRgbXyz","blinder","protan","deutan","tritan","blind","Blind","anomalize","dX","dZ","dR","dG","dB","_r","ngx","ngz","convertXyzToXyy","convertRgbToXyz","colorVisionData","protanomaly","protanopia","deuteranomaly","deuteranopia","tritanomaly","tritanopia","achromatomaly","achromatopsia","denorm","createBlinder","colorString","returnRgb","colorSimulation","grayscale","hexColor","colorBlindnessSimulation","discreteScaleGenerationInLab","lRange","minL","dLightness","monochromaticGeneration","configuration","tendency","isTint","newColors","semantic","BLACK","euclideanDistance","color1","hp","tmphp","compute","calcRelativeLuminance","colorDifference","overlappedColor1","overlappedColor2","dLp","dCp","dhp","dHp","SL","SC","SH","RT","CIEDE2000","contrastRatio","ADAPTIVE_RANGE","selectionFunction","rouletteWheel","fitnesses","sumFitness","tournament","maxFitness","randomIndex","crossover","father","mother","child1","child2","unlockedIndexs","simulationType","mutateIndex","dimensionIndex","COLOR_MODEL_RANGE","calFitness","locked","colorDifferenceMeasure","minDifference","optimizePaletteByGA","population","bestFitness","elites","newPopulation","newBestFitness","COLOR_DIFFERENCE_DEFAULT_VALUE","euclidean","COLOR_DIFFERENCE_MAX_VALUE","paletteOptimization","newThreshold","newPalette","isMatrixPalette","isContinuousPalette","grayscaleValue","newColor","newGray","invertGrayscale","saturationRange","valueRange","categoricalGenerationInHsv","placeBasicColor","lockedColor","randomColor","randomGeneration","DISCRETE_SCALE_TYPES","dSaturation","achromatic","newConfiguration","complementary","complementaryColor","maxL","halfCount","midColor","triadic","tetradic","polychromatic","customized","paletteGeneration","validateConfiguration","splitAngleColor","splitLineXY","splitAreaXYSeries","field4X","splitBarXYSeries","sortedNominalFields","field4Y","splitColumnXYSeries","Field4Series","isParentChild","getChartTypeSpec","chartKnowledge","toSpec","field4Color","field4Angle","pieChart","donutChart","spec","lineChart","stepLineChart","areaChart","stackedAreaChart","percentStackedAreaChart","barChart","groupedBarChart","stackedBarChart","percentStackedBarChart","columnChart","groupedColumnChart","stackedColumnChart","percentStackedColumnChart","sortedIntervalFields","scatterPlot","intervalFields","triple","corr","field4Size","bubbleChart","sortedFields","DISCRETE_PALETTE_TYPES","CATEGORICAL_PALETTE_TYPES","dataToAdvices","smartColor","enableRefine","refine","smartColorOn","requireSpec","ChartWIKI","CHART_ID_OPTIONS","resultForChartType","hardScore","scoreRules","chartTypeSpec","partEncSpec","lastSpec","relatedSpec","applyDesignRules","specWithEncodeType","primaryColor","layerEnc","colorScheme","applyTheme","colorTheme","colorType","colorSchemeType","field_2","applySmartColor","advices","advice","chart1","chart2","advicesForChart","dataPropsForAdvice","inputDataProps","defaultDataProps","dwItem","assembleDataProps","filteredRow","lintRules","ruleTypeToLint","lints","checkRules","isNormalized","getAreaChart","isBarChart","isGrouped","getIntervalChart","getLineChart","getPointChart","getChartType","Advisor","ruleCfg","toInclude_1","finalRuleBase","ruleOption","processRuleCfg","advise","adviseWithLog","lint","lintWithLog","selectedChartType","initialRecommendedType","sqlCopied","avaAdvisor","avaAdvices","sortedData","labelKey","numericKeys","valueKey","categoryKey","_originalLabel","_valueKey","labelCompare","numeric","uniqueLabels","expandedChartData","numericKey","nameCompare","chartDataForComponent","chart_uid","bubble","formattedSql","highlightedSql","formatted","numericColumnsCount","recommendedChartType","backendType","response_table","response_line_chart","response_pie_chart","response_bubble_chart","response_scatter_chart","response_bar_chart","response_area_chart","response_heatmap_chart","mapBackendChartType","topAdvice","recommendedType","mapAVAChartType","valueCount","numericCount","availableChartOptions","addedTypes","chartLabels","recommended","isRecommended","typeScores","mappedType","existing","avaType","scoreInfo","totalAdvices","avaAdvicesCount","optionsCount","chartTypeLabel","copySql","multi_measure_column_chart","multi_line_chart","multi_measure_line_chart","runAVAAdvisor","advisor","avaData","myAdvices","dataCount","advicesCount","topAdvices","allTypes","newType","_component_el_tabs","_component_el_tab_pane","BarChart","LineChart","PieChart","BubbleChart","AreaChart","HeatmapChart","copied","codeContent","codeLanguage","resultData","resultHeaders","formatCell","copyCode","showCode","sanitizedHtml","htmlContent","toggleView","copyHtml","JsonNode","isExpanded","toggleExpanded","renderPrimitive","displayValue","openBracket","closeBracket","renderObject","jsonCopied","statusBgClass","isHtmlContent","isJsonContent","sanitizedResult","formattedJson","highlightedJson","copyJson","sanitizedSvg","svgContent","copySvg","parsedData","code_type","codeResult","code_result","hasError","chartRefs","chartControls","dashboardData","chart_list","dashboardTitle","chartList","renderAllCharts","oldControl","formattedData","containerRef","setChartRef","alertType","alertClass","parsedResult","JsonViewer","showPrompts","prompts","prompt_code","_component_el_drawer","selectPrompt","showHelp","DefaultChatApiAdapter","apiAdapter","getApiAdapter","setApiAdapter","configureChatSystem","getChatSystemConfig","getChatApiAdapter","setChatApiAdapter","zh","createI18n","legacy","fallbackLocale","globalInjection","full","authorization","isThinking","autoGenerateConvUid","currentAssistantMessage","hasMessages","canSend","newMessage","updateMessage","updates","deleteMessage","chatOptions","assistantMessage","mergedOptions","stopGeneration","regenerateLastMessage","resetConversation","setConvUid","requestFn","run","_args","manual"],"mappings":"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iBtiD,GACjBA,GAAUuiD,YAAcviD,GACxBA,GAAUrvE,QAAUqvE,mBCpiFd8zC,GAAW,2BACX0O,GAAW,CACf,KACA,KACA,KACA,KACA,MACA,QACA,UACA,MACA,MACA,WACA,KACA,SACA,OACA,OACA,QACA,QACA,aACA,OACA,QACA,OACA,UACA,MACA,SACA,WACA,SACA,SACA,MACA,QACA,QACA,QAIA,WACA,QACA,QACA,SACA,SACA,OACA,SACA,UAEA,SAEIC,GAAW,CACf,OACA,QACA,OACA,YACA,MACA,YAIIC,GAAQ,CAEZ,SACA,WACA,UACA,SAEA,OACA,OACA,SACA,SAEA,SACA,SAEA,QACA,eACA,eACA,YACA,aACA,oBACA,aACA,aACA,cACA,cACA,gBACA,iBAEA,MACA,MACA,UACA,UAEA,cACA,oBACA,UACA,WACA,OAEA,UACA,YACA,oBACA,gBAEA,UACA,QAEA,OAEA,eAGIC,GAAc,CAClB,QACA,YACA,gBACA,aACA,iBACA,cACA,YACA,YAGIC,GAAmB,CACvB,cACA,aACA,gBACA,eAEA,UACA,UAEA,OACA,WACA,QACA,aACA,WACA,YACA,qBACA,YACA,qBACA,SACA,YAGIC,GAAqB,CACzB,YACA,OACA,QACA,UACA,SACA,WACA,eACA,iBACA,SACA,UAGIC,GAAY,GAAG18G,OACnBw8G,GACAF,GACAC,IAYF,SAASI,GAAWlH,GAClB,MAAMjI,EAAQiI,EAAKjI,MAcboP,EAAalP,GACbmP,EACG,KADHA,EAEC,MAIDC,EAAU,CACd9O,MAAO,sBACPp3H,IAAK,4BAKLmmI,kBAAmB,CAAC5yI,EAAOmrG,KACzB,MAAM0nC,EAAkB7yI,EAAM,GAAGxN,OAASwN,EAAMzJ,MAC1Cu8I,EAAW9yI,EAAMwF,MAAMqtI,GAC7B,GAIe,MAAbC,GAGa,MAAbA,EAGA,YADA3nC,EAASy1B,cAiBX,IAAI7uI,EAXa,MAAb+gJ,IAtCc,EAAC9yI,GAASq0E,YAC9B,MAAMx+E,EAAM,KAAOmK,EAAM,GAAGpL,MAAM,GAElC,OAAe,IADHoL,EAAMwF,MAAMuN,QAAQld,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sCAAA,KACX08I,EAAiB,CACrB,MACA,KACA,SACA,QACA,QACA,QACA,OACA,QACA,WACA,MACA,MACA,OACA,OACA,SACA,UACA,MACA,OACA,SACA,KACA,SACA,KACA,KACA,SACA,QACA,cACA,MACA,KACA,OACA,QACA,SACA,MACA,QACA,OACA,SAuGIjD,EAAW,CACf/H,SAAU,sBACVlD,QAASkO,EACT/B,SAvGgB,CAChB,aACA,MACA,MACA,MACA,QACA,MACA,OACA,aACA,YACA,QACA,WACA,MACA,cACA,UACA,UACA,UACA,OACA,MACA,SACA,YACA,OACA,OACA,SACA,QACA,SACA,YACA,UACA,UACA,UACA,OACA,OACA,MACA,KACA,QACA,MACA,aACA,aACA,OACA,MACA,OACA,SACA,MACA,MACA,aACA,MACA,OACA,SACA,MACA,OACA,MACA,MACA,QACA,WACA,QACA,OACA,WACA,QACA,MACA,UACA,QACA,SACA,eACA,MACA,MACA,QACA,QACA,OACA,OACA,OAmCAD,QAhCe,CACf,YACA,WACA,QACA,OACA,iBACA,QA2BAj8I,KArBY,CACZ,MACA,WACA,YACA,OACA,OACA,UACA,UACA,WACA,WACA,MACA,QACA,OACA,UAWIk+I,EAAS,CACb73F,UAAW,OACXumF,MAAO,kBAGH2P,EAAQ,CACZl2F,UAAW,QACXumF,MAAO,KACPp3H,IAAK,KACLs5H,SAAUkM,EACVjO,QAAS,KAGLoR,EAAkB,CACtBvR,MAAO,OACPC,UAAW,GAGPuR,EAAS,CACb/3F,UAAW,SACX95B,SAAU,CAAE8nH,EAAK1H,kBACjB6G,SAAU,CACR,CACE5G,MAAO,yCACPp3H,IAAK,MACL+W,SAAU,CACR8nH,EAAK1H,iBACLuR,GAEFrR,UAAW,IAEb,CACED,MAAO,yCACPp3H,IAAK,MACL+W,SAAU,CACR8nH,EAAK1H,iBACLuR,GAEFrR,UAAW,IAEb,CACED,MAAO,8BACPp3H,IAAK,MACL+W,SAAU,CACR8nH,EAAK1H,iBACLuR,EACAC,EACA5B,IAGJ,CACE3P,MAAO,8BACPp3H,IAAK,MACL+W,SAAU,CACR8nH,EAAK1H,iBACLuR,EACAC,EACA5B,IAGJ,CACE3P,MAAO,eACPp3H,IAAK,IACLq3H,UAAW,IAEb,CACED,MAAO,eACPp3H,IAAK,IACLq3H,UAAW,IAEb,CACED,MAAO,4BACPp3H,IAAK,KAEP,CACEo3H,MAAO,4BACPp3H,IAAK,KAEP,CACEo3H,MAAO,4BACPp3H,IAAK,IACL+W,SAAU,CACR8nH,EAAK1H,iBACLwR,EACA5B,IAGJ,CACE3P,MAAO,4BACPp3H,IAAK,IACL+W,SAAU,CACR8nH,EAAK1H,iBACLwR,EACA5B,IAGJlI,EAAKvH,iBACLuH,EAAKrH,oBAKHqR,EAAY,kBACZC,EAAa,QAAQD,WAAmBA,UAAkBA,QAM1D5S,EAAY,OAAOwS,EAAer0H,KAAK,OACvC0yH,EAAS,CACbj2F,UAAW,SACXwmF,UAAW,EACX2G,SAAU,CAWR,CACE5G,MAAO,QAAQyR,OAAeC,gBAAyBD,aAAqB5S,MAE9E,CACEmB,MAAO,IAAI0R,WASb,CACE1R,MAAO,0CAA0CnB,MAEnD,CACEmB,MAAO,4BAA4BnB,MAErC,CACEmB,MAAO,6BAA6BnB,MAEtC,CACEmB,MAAO,mCAAmCnB,MAK5C,CACEmB,MAAO,OAAOyR,YAAoB5S,QAIlC8S,EAAe,CACnBl4F,UAAW,UACXumF,MAAOR,EAAMX,UAAU,WACvBj2H,IAAK,IACLs5H,SAAUkM,EACVzuH,SAAU,CACR,CACEqgH,MAAO,WAGT,CACEA,MAAO,IACPp3H,IAAK,OACL49H,gBAAgB,KAIhB2J,EAAS,CACb12F,UAAW,SACXmtF,SAAU,CAER,CACEntF,UAAW,GACXumF,MAAO,UACPqE,MAAM,GAER,CACErE,MAAO,KACPp3H,IAAK,KACL23H,cAAc,EACdiE,YAAY,EACZtC,SAAUkM,EACVzuH,SAAU,CACR,OACA2xH,EACA5B,EACA8B,EACA/J,EAAK9G,sBAWb,OANAgP,EAAMhwH,SAAW,CACf6xH,EACA9B,EACA4B,GAGK,CACL9iJ,KAAM,SACN8lG,QAAS,CACP,KACA,MACA,WAEFywC,cAAc,EACd7C,SAAUkM,EACVjO,QAAS,cACTxgH,SAAU,CACR2xH,EACA5B,EACA,CAEEpvH,MAAO,oBACPnkB,MAAO,YAET,CAGE6lI,cAAe,KACf/B,UAAW,GAEb,CAAE9jI,MAAO,SAAUmkB,MAAO,WAC1BkxH,EACAG,EACAlK,EAAK9G,kBACL,CACExkI,MAAO,CACL,QAAS,MACTujI,GAEFp/G,MAAO,CACL,EAAG,UACH,EAAG,kBAELX,SAAU,CAAEwwH,IAEd,CACEvJ,SAAU,CACR,CACEzqI,MAAO,CACL,UAAW,MACXujI,EAAU,MACV,QAASA,EAAS,UAGtB,CACEvjI,MAAO,CACL,UAAW,MACXujI,KAINp/G,MAAO,CACL,EAAG,UACH,EAAG,cACH,EAAG,0BAGP,CACEm5B,UAAW,OACXumF,MAAO,WACPp3H,IAAK,UACL+W,SAAU,CACR+vH,EACAS,EACAqB,KAKV,CCzaA,SAASI,GAAKnK,GACZ,MAUM4G,EAAW,CACf,OACA,QACA,QAOIwD,EAAgB,CACpBvxH,MAAO,UACP0hH,cAAeqM,EAASrxH,KAAK,MAG/B,MAAO,CACLxuB,KAAM,OACN8lG,QAAS,CAAC,SACV4tC,SAAS,CACPmN,QAAShB,GAEX1uH,SAAU,CA/BM,CAChB85B,UAAW,OACXumF,MAAO,8BACPC,UAAW,MAEO,CAClB9jI,MAAO,YACPs9C,UAAW,cACXwmF,UAAW,GA0BTwH,EAAKrH,kBACLyR,EACApK,EAAK5G,cACL4G,EAAKhH,oBACLgH,EAAK/G,sBAEPP,QAAS,MAEb,CC7BA,SAAS2R,GAAIrK,GACX,MAAMjI,EAAQiI,EAAKjI,MACbuS,EAAetK,EAAKpH,QAAQ,KAAM,KA8blC2R,EAAqB,CACzB,MACA,OACA,YACA,OACA,OACA,MACA,OACA,OACA,UACA,WACA,OACA,MACA,OACA,QACA,YACA,aACA,YACA,aACA,QACA,UACA,MACA,UACA,cACA,QACA,aACA,gBACA,cACA,cACA,iBACA,aACA,aACA,uBACA,aACA,MACA,aACA,OACA,UACA,KACA,MACA,QACA,QACA,MACA,MACA,MACA,YACA,QACA,SACA,eACA,kBACA,kBACA,WACA,iBACA,QACA,OACA,YACA,YACA,aACA,iBACA,UACA,aACA,WACA,WACA,WACA,aACA,MACA,OACA,OACA,aACA,cACA,YACA,kBACA,MACA,MACA,OACA,YACA,kBACA,QACA,OACA,aACA,SACA,QACA,WACA,UACA,WACA,gBA2CIC,EAAYD,EAEZ5D,EAAW,CArff,MACA,OACA,MACA,WACA,QACA,MACA,MACA,MACA,QACA,YACA,wBACA,KACA,aACA,OACA,aACA,KACA,OACA,SACA,gBACA,MACA,QACA,cACA,kBACA,UACA,SACA,SACA,OACA,UACA,OACA,KACA,OACA,SACA,cACA,WACA,OACA,OACA,OACA,UACA,OACA,cACA,YACA,mBACA,QACA,aACA,OACA,QACA,WACA,UACA,UACA,SACA,SACA,YACA,UACA,aACA,WACA,UACA,OACA,OACA,gBACA,MACA,OACA,QACA,YACA,aACA,SACA,QACA,OACA,YACA,UACA,kBACA,eACA,kCACA,eACA,eACA,cACA,iBACA,eACA,oBACA,eACA,eACA,mCACA,eACA,SACA,QACA,OACA,MACA,aACA,MACA,UACA,WACA,UACA,UACA,SACA,SACA,aACA,QACA,WACA,gBACA,aACA,WACA,SACA,OACA,UACA,OACA,UACA,OACA,QACA,MACA,YACA,gBACA,WACA,SACA,SACA,QACA,SACA,OACA,UACA,SACA,MACA,WACA,UACA,QACA,QACA,SACA,cACA,QACA,QACA,MACA,UACA,YACA,OACA,OACA,OACA,WACA,SACA,MACA,SACA,QACA,QACA,WACA,SACA,SACA,OACA,OACA,WACA,KACA,YACA,UACA,QACA,QACA,cACA,SACA,MACA,UACA,YACA,eACA,WACA,OACA,KACA,OACA,aACA,gBACA,cACA,cACA,iBACA,aACA,aACA,uBACA,aACA,MACA,WACA,QACA,aACA,UACA,OACA,UACA,OACA,OACA,aACA,UACA,KACA,QACA,YACA,iBACA,MACA,QACA,QACA,QACA,eACA,kBACA,UACA,MACA,SACA,QACA,SACA,MACA,SACA,MACA,WACA,SACA,QACA,WACA,WACA,UACA,QACA,QACA,MACA,KACA,OACA,YACA,MACA,YACA,QACA,OACA,SACA,UACA,eACA,oBACA,KACA,SACA,MACA,OACA,KACA,MACA,OACA,OACA,KACA,QACA,MACA,QACA,OACA,WACA,UACA,YACA,YACA,UACA,MACA,UACA,eACA,kBACA,kBACA,SACA,UACA,WACA,iBACA,QACA,WACA,YACA,UACA,UACA,YACA,MACA,QACA,OACA,QACA,OACA,YACA,MACA,aACA,cACA,YACA,YACA,aACA,iBACA,UACA,aACA,WACA,WACA,WACA,UACA,SACA,SACA,UACA,SACA,QACA,WACA,SACA,MACA,aACA,OACA,UACA,YACA,QACA,SACA,SACA,SACA,OACA,SACA,YACA,eACA,MACA,OACA,UACA,MACA,OACA,OACA,WACA,OACA,WACA,eACA,MACA,eACA,WACA,aACA,OACA,QACA,SACA,aACA,cACA,cACA,SACA,YACA,kBACA,WACA,MACA,YACA,SACA,cACA,cACA,QACA,cACA,MACA,OACA,OACA,OACA,YACA,gBACA,kBACA,KACA,WACA,YACA,kBACA,cACA,QACA,UACA,OACA,aACA,OACA,WACA,UACA,QACA,SACA,UACA,SACA,SACA,QACA,OACA,QACA,QACA,SACA,WACA,UACA,WACA,YACA,UACA,UACA,aACA,OACA,WACA,QACA,eACA,SACA,OACA,SACA,UACA,OAzXA,MACA,MACA,YACA,OACA,QACA,QACA,OACA,QA6fA9uH,OAAQ6jH,IACA6O,EAAmB5hI,SAAS+yH,IAchCoN,EAAgB,CACpBp0I,MAAOqjI,EAAMxtG,OAAO,KAAMwtG,EAAMR,UAAUiT,GAAY,SACtDhS,UAAW,EACXiC,SAAU,CAAEoN,SAAU2C,IAOxB,SAASC,EAAavrG,GACpB,OAAO64F,EAAMxtG,OACX,KACAwtG,EAAMR,UAAUr4F,EAAKrrC,IAAK62I,GACjBA,EAAGthJ,QAAQ,MAAO,UAE3B,KAEJ,CAEA,MAAMuhJ,EAAsB,CAC1B9xH,MAAO,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CPp3H,IAAK,IACLs5H,SAAU,CAAE1zI,KAAM,SAClBmxB,SAAU,CAAEozH,GACZvQ,OAAQ,CACN55H,IAAK,YACL67H,WAAW,EACXiF,YAAa,CACX,MACA,SAIN,CACEjwF,UAAW,MAEXumF,MAAO,kBACPp3H,IAAK,IACLs5H,SAAU,CAAE1zI,KAAM,UAClBmxB,SAAU,CAAEozH,GACZvQ,OAAQ,CACN55H,IAAK,aACL67H,WAAW,EACXiF,YAAa,CACX,aACA,aACA,SAKN,CACEjwF,UAAW,MACXumF,MAAO,WAGT,CACEvmF,UAAW,MACXumF,MAAOR,EAAMxtG,OACX,IACAwtG,EAAMX,UAAUW,EAAMxtG,OACpBygH,EAIAjT,EAAMR,OAAO,MAAO,IAAK,SAG7Bp2H,IAAK,OACL+W,SAAU,CACR,CACE85B,UAAW,OACXumF,MAAOyS,EACPxS,UAAW,EACXuC,OAAQuQ,KAKd,CACEt5F,UAAW,MACXumF,MAAOR,EAAMxtG,OACX,MACAwtG,EAAMX,UAAUW,EAAMxtG,OACpBygH,EAAa,OAGjB9yH,SAAU,CACR,CACE85B,UAAW,OACXumF,MAAOyS,EACPxS,UAAW,GAEb,CACED,MAAO,IACPC,UAAW,EACXyC,YAAY,MAMxB,CC9OA,MAyKMsQ,GAAO,CA3HX,IACA,OACA,UACA,UACA,QACA,QACA,IACA,aACA,OACA,SACA,SACA,UACA,OACA,OACA,KACA,MACA,UACA,MACA,MACA,KACA,KACA,KACA,WACA,aACA,SACA,SACA,OACA,KACA,KACA,KACA,KACA,KACA,KACA,SACA,SACA,OACA,IACA,SACA,MACA,QACA,MACA,MACA,QACA,SACA,KACA,OACA,OACA,OACA,MACA,SACA,KACA,WACA,SACA,IACA,UACA,IACA,QACA,OACA,UACA,SACA,SACA,OACA,SACA,UACA,MACA,QACA,QACA,KACA,WACA,QACA,KACA,QACA,OACA,KACA,KACA,MACA,QAIA,OACA,IACA,SACA,OACA,UACA,MACA,SACA,SACA,UACA,gBACA,sBACA,cACA,mBACA,oBACA,oBACA,UACA,iBACA,UACA,UACA,eACA,WACA,qBACA,SACA,eACA,iBACA,iBACA,OACA,SACA,UACA,QACA,OACA,OACA,UACA,WACA,OACA,OACA,MACA,WACA,QACA,gBACA,YAWIC,GAAiB,CACrB,YACA,cACA,eACA,QACA,cACA,cACA,sBACA,gBACA,eACA,eACA,gBACA,OACA,SACA,QACA,kBACA,aACA,cACA,iBACA,kBACA,UACA,uBACA,mBACA,yBACA,+BACA,aACA,OACA,YACA,SACA,QAEA,YACA,YACA,aACA,cACAt+F,OAAO3K,UAGHkpG,GAAiB,CACrB,SACA,WACA,QACA,UACA,UACA,UACA,UACA,MACA,WACA,OACA,QACA,UACA,QACA,cACA,gBACA,aACA,SACA,QACA,gBACA,eACA,MACA,OACA,eACA,QACA,gBACA,WACA,UACA,KACA,OACA,aACA,eACA,OACA,OACA,aACA,MACA,YACA,UACA,iBACA,eACA,mBACA,cACA,aACA,eACA,WACA,eACA,OACA,oBACA,YACA,aACA,WACA,QACA,OACA,QACA,SACA,gBACA,eACA,QACA,UACA,SACAv+F,OAAO3K,UAGHmpG,GAAkB,CACtB,QACA,WACA,SACA,MACA,aACA,eACA,aACA,gBACA,SACA,OACA,cACA,YACA,UACA,kBACAx+F,OAAO3K,UAEHopG,GAAa,CACjB,eACA,gBACA,cACA,aACA,qBACA,MACA,cACA,YACA,wBACA,kBACA,sBACA,qBACA,sBACA,4BACA,iBACA,uBACA,kBACA,sBACA,wBACA,qBACA,4BACA,aACA,eACA,kBACA,sBACA,aACA,wBACA,wBACA,kBACA,mBACA,mBACA,oBACA,sBACA,wBACA,wBACA,oBACA,kBACA,iBACA,aACA,SACA,eACA,qBACA,mBACA,yBACA,yBACA,yBACA,qBACA,2BACA,2BACA,2BACA,qBACA,qBACA,gBACA,sBACA,4BACA,6BACA,sBACA,sBACA,kBACA,eACA,wBACA,0BACA,eACA,sBACA,sBACA,qBACA,sBACA,qBACA,gBACA,sBACA,oBACA,0BACA,0BACA,0BACA,sBACA,4BACA,4BACA,4BACA,sBACA,sBACA,cACA,oBACA,oBACA,oBACA,gBACA,eACA,qBACA,qBACA,qBACA,iBACA,0BACA,4BACA,eACA,aACA,mBACA,yBACA,0BACA,mBACA,mBACA,eACA,SACA,YACA,uBACA,gBACA,WACA,iBACA,YACA,oBACA,aACA,WACA,aACA,aACA,cACA,eACA,eACA,eACA,cACA,QACA,OACA,YACA,YACA,QACA,sBACA,8BACA,gBACA,kBACA,eACA,eACA,cACA,aACA,cACA,oBACA,oBACA,oBACA,cACA,eACA,UACA,UACA,+BACA,2BACA,gCACA,yBACA,0BACA,YACA,iBACA,iBACA,UACA,qBACA,oBACA,gBACA,cACA,MACA,YACA,aACA,SACA,KACA,KACA,YACA,UACA,oBACA,cACA,oBACA,eACA,OACA,eACA,YACA,SACA,OACA,aACA,iBACA,YACA,YACA,cACA,YACA,QACA,cACA,gBACA,OACA,OACA,eACA,cACA,wBACA,eACA,yBACA,sBACA,eACA,YACA,mBACA,cACA,iBACA,eACA,aACA,iBACA,0BACA,4BACA,uBACA,wBACA,eACA,0BACA,oBACA,0BACA,qBACA,yBACA,uBACA,wBACA,0BACA,cACA,sBACA,MACA,+BACA,6BACA,OACA,YACA,oBACA,iBACA,iBACA,cACA,kBACA,oBACA,WACA,WACA,eACA,iBACA,gBACA,sBACA,wBACA,qBACA,sBACA,SACA,sBACA,wBACA,UACA,OACA,oBACA,kBACA,mBACA,WACA,iBACA,uBACA,cACA,QACA,aACA,cACA,kBACA,oBACA,eACA,mBACA,qBACA,YACA,kBACA,gBACA,eACA,UACA,OACA,iBACA,iBACA,aACA,cACA,mBACA,aACA,mBACA,sBACA,kBACA,SACA,eACA,mBACA,qBACA,gBACA,gBACA,oBACA,sBACA,cACA,eACA,aACA,cACA,SACA,aACA,aACA,eACA,QACA,OACA,cACA,mBACA,qBACA,qBACA,oBACA,qBACA,oBACA,YACA,iBACA,aACA,YACA,cACA,gBACA,cACA,YACA,YACA,oBACA,aACA,aACA,aACA,iBACA,aACA,kBACA,YACA,iBACA,aACA,kBACA,YACA,iBACA,WACA,YACA,WACA,YACA,SACA,OACA,SACA,aACA,kBACA,SACA,gBACA,kBACA,cACA,kBACA,gBACA,UACA,QACA,UACA,UACA,gBACA,iBACA,gBACA,gBACA,WACA,kBACA,iBACA,uBACA,kBACA,gBACA,aACA,aACA,UACA,sBACA,4BACA,6BACA,wBACA,wBACA,UACA,gBACA,oBACA,sBACA,iBACA,iBACA,qBACA,uBACA,eACA,gBACA,cACA,OACA,mBACA,oBACA,oBACA,cACA,QACA,cACA,eACA,cACA,qBACA,gBACA,cACA,aACA,iBACA,WACA,kBACA,sBACA,qBACA,SACA,IACA,SACA,OACA,aACA,cACA,QACA,SACA,UACA,aACA,gBACA,QACA,kBACA,gBACA,sBACA,0BACA,4BACA,uBACA,uBACA,2BACA,6BACA,qBACA,sBACA,oBACA,iBACA,uBACA,2BACA,6BACA,wBACA,wBACA,4BACA,8BACA,sBACA,uBACA,qBACA,oBACA,mBACA,mBACA,kBACA,uBACA,uBACA,kBACA,mBACA,kBACA,wBACA,eACA,gBACA,kBACA,QACA,WACA,MACA,aACA,eACA,SACA,mBACA,oBACA,iBACA,kBACA,oBACA,iBACA,eACA,WACA,eACA,aACA,iBACA,kBACA,cACA,uBACA,kBACA,wBACA,uBACA,uBACA,2BACA,wBACA,4BACA,gBACA,sBACA,yBACA,sBACA,cACA,eACA,mBACA,gBACA,iBACA,cACA,mBACA,iBACA,wBACA,0BACA,YACA,iBACA,kBACA,iBACA,MACA,eACA,YACA,gBACA,mBACA,kBACA,aACA,sBACA,mBACA,sBACA,sBACA,6BACA,YACA,eACA,cACA,cACA,gBACA,iBACA,gBACA,qBACA,sBACA,qBACA,uBACA,aACA,gBACA,iBACA,eACA,cACA,cACA,aACA,eACA,eACA,cACA,uBACA,SACA,QACA,cACA,aAC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A,UACA,SACA,MACA,SACA,WACA,SACA,YACA,SACA,UACA,SACA,WACA,UACA,KACA,SACA,QACA,UACA,OACA,QA2BAkM,QAnBe,CACf,QACA,OACA,QAiBAj8I,KAdY,CACZ,OACA,UACA,OACA,QACA,MACA,OACA,QACA,UAOAk8I,SA1BgB,CAChB,QACA,SA2BIiF,EAAa,CACjB96F,UAAW,OACXumF,MAAO,IAAMqU,EACb10H,SAAU,CACR,CACEqgH,MAAO,KACPp3H,IAAK,KACL+W,SAAU,CAAE,WAIZwwH,EAAS,CACb12F,UAAW,SACXumF,MAAO,KACPp3H,IAAK,KACLs5H,SAAUkM,EACVnO,UAAW,EACXtgH,SAAU,CAAE8nH,EAAK/G,sBACjBgC,YAAY,GAGd,MAAO,CACLl0I,KAAM,OACN8lG,QAAS,CAAE,OACX4tC,SAAUkM,EACVjO,QAAS,QACTxgH,SAAU,CACR8nH,EAAKpH,QACH,UACA,OACA,CACEJ,UAAW,EACXtgH,SAAU,CACR,CAEEqgH,MAAO,OACPC,UAAW,GAEb,CACExmF,UAAW,SACXumF,MAAO,iBAMf,CACEA,MAAO,wBACPkC,SAAU,SACVjC,UAAW,GAEbwH,EAAKhH,oBACLgH,EAAK/G,qBACL,CACEV,MAAO,MACPp3H,IAAK,MACL6wC,UAAW,SACX95B,SAAU,CAAE8nH,EAAK1H,mBAEnB0H,EAAKvH,iBACLuH,EAAKrH,kBACL,CACEjkI,MAAO,CACL,oDACA,MACAk4I,GAEF56F,UAAW,CACT,EAAG,UACH,EAAG,gBAGP,CAEEt9C,MAAO,aACPmkB,MAAO,WAET,CACE0/G,MAAO,CACLR,EAAMxtG,OAAO,WAAYqiH,GACzB,MACAA,EACA,MACA,UAEF56F,UAAW,CACT,EAAG,OACH,EAAG,WACH,EAAG,aAGP,CACEumF,MAAO,CACL,SACA,MACAqU,GAEF56F,UAAW,CACT,EAAG,UACH,EAAG,eAEL95B,SAAU,CACRwwH,EACA1I,EAAKhH,oBACLgH,EAAK/G,uBAGT,CAGEsB,cAAe,wBACf/B,UAAW,GAEb,CACED,MAAO,CACL,MAAQsU,EAAmB,QAC3B7M,EAAK9H,oBACL,aAEFlmF,UAAW,CAAE,EAAG,kBAChByoF,SAAUkM,EACVzuH,SAAU,CACR,CACE85B,UAAW,SACXumF,MAAO,KACPp3H,IAAK,KACLs5H,SAAUkM,EACVnO,UAAW,EACXtgH,SAAU,CACR40H,EACA9M,EAAKvH,iBACLuH,EAAKrH,kBACL6T,GACAxM,EAAK/G,uBAGT+G,EAAKhH,oBACLgH,EAAK/G,uBAGTuT,GACAM,GAGN,CCzRA,SAASC,GAAI/M,GACX,MAAMjI,EAAQiI,EAAKjI,MAIbiB,EAAsBgH,EAAKpH,QAAQ,KAAM,IAAK,CAAE1gH,SAAU,CAAE,CAAEqgH,MAAO,WACrEyU,EAAmB,qBACnBC,EAAe,kBAEfC,EAAmB,cACrBF,EAAmB,IACnBjV,EAAMT,SAAS2V,GACf,gBAAkBlV,EAAMT,SAJC,YAK3B,IAEI6V,EAAsB,CAC1Bn7F,UAAW,OACXumF,MAAO,sBAMH8T,EAAU,CACdr6F,UAAW,SACXmtF,SAAU,CACR,CACE5G,MAAO,cACPp3H,IAAK,IACLu3H,QAAS,MACTxgH,SAAU,CAAE8nH,EAAK1H,mBAEnB,CACEC,MAAO,sEACPp3H,IAAK,IACLu3H,QAAS,KAEXsH,EAAKrG,kBAAkB,CACrBpB,MAAO,mCACPp3H,IAAK,0BAKLisI,EAAU,CACdp7F,UAAW,SACXmtF,SAAU,CAER,CAAE5G,MACA,gVAoBF,CAAEA,MACA,gKAgBJC,UAAW,GAGP6U,EAAe,CACnBr7F,UAAW,OACXumF,MAAO,eACPp3H,IAAK,IACLs5H,SAAU,CAAEiB,QACR,0FAEJxjH,SAAU,CACR,CACEqgH,MAAO,OACPC,UAAW,GAEbwH,EAAKH,QAAQwM,EAAS,CAAEr6F,UAAW,WACnC,CACEA,UAAW,SACXumF,MAAO,SAETS,EACAgH,EAAK/G,uBAIHM,EAAa,CACjBvnF,UAAW,QACXumF,MAAOR,EAAMT,SAAS2V,GAAgBjN,EAAK/H,SAC3CO,UAAW,GAGP8U,EAAiBvV,EAAMT,SAAS2V,GAAgBjN,EAAK/H,SAAW,UA+RhEsV,EAAe,CACnB5hJ,KAlMqB,CACrB,OACA,OACA,WACA,WACA,UACA,SACA,QACA,MACA,OACA,QACA,OACA,UACA,WACA,SACA,QACA,UAmLA+vI,QA9RwB,CACxB,UACA,UACA,MACA,SACA,MACA,gBACA,gBACA,kBACA,OACA,SACA,QACA,QACA,OACA,QACA,QACA,WACA,YACA,WACA,QACA,UACA,gBACA,YACA,YACA,YACA,WACA,WACA,UACA,SACA,KACA,kBACA,OACA,OACA,WACA,SACA,SACA,QACA,QACA,MACA,SACA,OACA,KACA,SACA,SACA,SACA,UACA,YACA,MACA,WACA,MACA,SACA,UACA,WACA,KACA,QACA,WACA,UACA,YACA,SACA,WACA,WACA,sBACA,WACA,SACA,SACA,gBACA,iBACA,SACA,SACA,eACA,WACA,OACA,eACA,QACA,mBACA,2BACA,OACA,MACA,UACA,SACA,WACA,QACA,QACA,UACA,WACA,QACA,MACA,UAwMAkM,QAde,CACf,OACA,QACA,UACA,UACA,QAUAC,SANe,CAAE,WAOjB2F,YAnLiB,CACjB,MACA,WACA,UACA,mBACA,SACA,UACA,qBACA,yBACA,qBACA,QACA,aACA,WACA,WACA,SACA,YACA,mBACA,gBACA,UACA,QACA,aACA,WACA,WACA,QACA,WACA,gBACA,gBACA,OACA,UACA,iBACA,QACA,kBACA,wBACA,cACA,MACA,gBACA,cACA,eACA,qBACA,aACA,QACA,cACA,eACA,cACA,SACA,YACA,QACA,cACA,aACA,gBACA,qBACA,qBACA,gBACA,UACA,SACA,WACA,UACA,iBA6HIvB,EAAoB,CACxBj6F,UAAW,oBACXwmF,UAAW,EACXiC,SAAU,CAERgT,MA/HmB,CACrB,QACA,MACA,OACA,QACA,WACA,OACA,OACA,QACA,SACA,OACA,OACA,MACA,OACA,MACA,OACA,OACA,UACA,OACA,WACA,OACA,MACA,OACA,QACA,OACA,UACA,UACA,QACA,OACA,QACA,SACA,SACA,SACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,WACA,OACA,UACA,QACA,MACA,QACA,YACA,cACA,4BACA,aACA,cACA,SACA,SACA,SACA,SACA,SACA,OACA,OACA,MACA,SACA,UACA,OACA,UACA,QACA,MACA,OACA,WACA,UACA,OACA,SACA,MACA,SACA,QACA,SACA,SACA,SACA,SACA,SACA,UACA,SACA,UACA,UACA,UACA,UACA,UACA,SACA,SACA,OACA,MACA,OACA,YACA,gBACA,UACA,UACA,WACA,QACA,UACA,aA4BAlV,MAAOR,EAAMxtG,OACX,KACA,eACA,SACA,UACA,aACA,YACAy1G,EAAK/H,SACLF,EAAMX,UAAU,sBAGdsW,EAAsB,CAC1BzB,EACAoB,EACAF,EACAnU,EACAgH,EAAK/G,qBACLmU,EACAf,GAGIsB,EAAqB,CAIzBxO,SAAU,CACR,CACE5G,MAAO,IACPp3H,IAAK,KAEP,CACEo3H,MAAO,KACPp3H,IAAK,MAEP,CACEo5H,cAAe,wBACfp5H,IAAK,MAGTs5H,SAAU8S,EACVr1H,SAAUw1H,EAAoBnjH,OAAO,CACnC,CACEguG,MAAO,KACPp3H,IAAK,KACLs5H,SAAU8S,EACVr1H,SAAUw1H,EAAoBnjH,OAAO,CAAE,SACvCiuG,UAAW,KAGfA,UAAW,GAGPoV,EAAuB,CAC3B57F,UAAW,WACXumF,MAAO,IAAM2U,EAAmB,eAAiBI,EACjDzQ,aAAa,EACb17H,IAAK,QACL47H,YAAY,EACZtC,SAAU8S,EACV7U,QAAS,iBACTxgH,SAAU,CACR,CACEqgH,MAAOyU,EACPvS,SAAU8S,EACV/U,UAAW,GAEb,CACED,MAAO+U,EACPzQ,aAAa,EACb3kH,SAAU,CAAEqhH,GACZf,UAAW,GAIb,CACED,MAAO,KACPC,UAAW,GAGb,CACED,MAAO,IACPwG,gBAAgB,EAChB7mH,SAAU,CACRm0H,EACAe,IAKJ,CACE5U,UAAW,EACX9jI,MAAO,KAET,CACEs9C,UAAW,SACXumF,MAAO,KACPp3H,IAAK,KACLs5H,SAAU8S,EACV/U,UAAW,EACXtgH,SAAU,CACR8gH,EACAgH,EAAK/G,qBACLoT,EACAe,EACAD,EAEA,CACE5U,MAAO,KACPp3H,IAAK,KACLs5H,SAAU8S,EACV/U,UAAW,EACXtgH,SAAU,CACR,OACA8gH,EACAgH,EAAK/G,qBACLoT,EACAe,EACAD,MAKRA,EACAnU,EACAgH,EAAK/G,qBACLoU,IAIJ,MAAO,CACLtmJ,KAAM,MACN8lG,QAAS,CACP,KACA,MACA,MACA,MACA,KACA,MACA,OAEF4tC,SAAU8S,EACV7U,QAAS,KACT4F,iBAAkB,CAAE,oBAAqB,YACzCpmH,SAAU,GAAGqS,OACXojH,EACAC,EACA3B,EACAyB,EACA,CACEL,EACA,CACE9U,MAAO,8NACPp3H,IAAK,IACLs5H,SAAU8S,EACVr1H,SAAU,CACR,OACAi1H,IAGJ,CACE5U,MAAOyH,EAAK/H,SAAW,KACvBwC,SAAU8S,GAEZ,CACE74I,MAAO,CAEL,wDACA,MACA,OAEFs9C,UAAW,CACT,EAAG,UACH,EAAG,kBAKf,CCjlBA,SAAS67F,GAAK7N,GACZ,MAAMjI,EAAQiI,EAAKjI,MACb+V,EAAM,CAAA,EACNC,EAAa,CACjBxV,MAAO,OACPp3H,IAAK,KACL+W,SAAU,CACR,OACA,CACEqgH,MAAO,KACPrgH,SAAU,CAAE41H,MAIlBjmJ,OAAO69C,OAAOooG,EAAK,CACjB97F,UAAW,WACXmtF,SAAU,CACR,CAAE5G,MAAOR,EAAMxtG,OAAO,qBAGpB,wBACFwjH,KAIJ,MAAM7F,EAAQ,CACZl2F,UAAW,QACXumF,MAAO,OACPp3H,IAAK,KACL+W,SAAU,CAAE8nH,EAAK1H,mBAEbM,EAAUoH,EAAKH,QACnBG,EAAKpH,UACL,CACElkI,MAAO,CACL,SACA,QAEFmkB,MAAO,CACL,EAAG,aAIHm1H,EAAW,CACfzV,MAAO,iBACPwC,OAAQ,CAAE7iH,SAAU,CAClB8nH,EAAKrG,kBAAkB,CACrBpB,MAAO,QACPp3H,IAAK,QACL6wC,UAAW,cAIXi8F,EAAe,CACnBj8F,UAAW,SACXumF,MAAO,IACPp3H,IAAK,IACL+W,SAAU,CACR8nH,EAAK1H,iBACLwV,EACA5F,IAGJA,EAAMhwH,SAASlmB,KAAKi8I,GACpB,MAWMC,EAAa,CACjB3V,MAAO,UACPp3H,IAAK,OACL+W,SAAU,CACR,CACEqgH,MAAO,gBACPvmF,UAAW,UAEbguF,EAAK7G,YACL2U,IAcEK,EAAgBnO,EAAK/F,QAAQ,CACjCE,OAAQ,IAZa,CACrB,OACA,OACA,MACA,KACA,MACA,MACA,OACA,OACA,QAG2B5kH,KAAK,QAChCijH,UAAW,KAEP4V,EAAW,CACfp8F,UAAW,WACXumF,MAAO,4BACPsE,aAAa,EACb3kH,SAAU,CAAE8nH,EAAKH,QAAQG,EAAKzG,WAAY,CAAEhB,MAAO,gBACnDC,UAAW,GA+Pb,MAAO,CACLzxI,KAAM,OACN8lG,QAAS,CACP,KACA,OAEF4tC,SAAU,CACRmE,SAAU,wBACVlD,QApQa,CACf,KACA,OACA,OACA,OACA,KACA,OACA,MACA,QACA,QACA,KACA,KACA,OACA,OACA,OACA,SACA,WACA,UAoPEkM,QAjPa,CACf,OACA,SAgPEC,SAAU,CAxOZ,QACA,KACA,WACA,OACA,OACA,OACA,SACA,UACA,OACA,MACA,WACA,SACA,QACA,OACA,QACA,OACA,QACA,QAIA,QACA,OACA,UACA,SACA,UACA,UACA,OACA,SACA,OACA,MACA,QACA,SACA,UACA,SACA,OACA,YACA,SACA,OACA,OACA,UACA,SACA,UAkMI,MACA,QA/LJ,WACA,KACA,UACA,MACA,MACA,QACA,QACA,gBACA,WACA,UACA,eACA,YACA,aACA,YACA,WACA,UACA,aACA,OACA,UACA,SACA,SACA,SACA,UACA,KACA,KACA,QACA,YACA,SACA,QACA,UACA,UACA,OACA,OACA,QACA,MACA,SACA,OACA,QACA,QACA,SACA,SACA,QACA,SACA,SACA,OACA,UACA,SACA,aACA,SACA,UACA,WACA,QACA,OACA,SACA,QACA,QACA,WACA,UACA,OACA,MACA,WACA,aACA,QACA,OACA,cACA,UACA,SACA,OAIA,QACA,QACA,QACA,QACA,KACA,KACA,KACA,MACA,YACA,KACA,KACA,QACA,SACA,QACA,SACA,KACA,WACA,KACA,QACA,QACA,OACA,QACA,WACA,OACA,QACA,SACA,SACA,MACA,QACA,OACA,SACA,MACA,SACA,MACA,OACA,OACA,OACA,SACA,KACA,SACA,KACA,QACA,MACA,KACA,UACA,YACA,YACA,YACA,YACA,OACA,OACA,QACA,MACA,MACA,OACA,KACA,QACA,WACA,OACA,KACA,OACA,WACA,SACA,OACA,UACA,KACA,OACA,MACA,OACA,SAEA,SACA,SACA,KACA,OACA,UACA,OACA,QACA,QACA,UACA,QACA,WACA,SACA,MACA,WACA,SACA,MACA,QACA,OACA,SACA,OACA,MACA,OACA,UAEA,MACA,QACA,SACA,SACA,QACA,MACA,SACA,QAuBA3vH,SAAU,CACRi2H,EACAnO,EAAK/F,UACLmU,EACAF,EACAtV,EACAoV,EA5Pc,CAAEt5I,MAAO,kBA8PvBu5I,EAtUkB,CACpBv5I,MAAO,OAEW,CAClBs9C,UAAW,SACXumF,MAAO,IACPp3H,IAAK,KAEc,CACnBzM,MAAO,OAiULo5I,GAGN,CC7YA,SAASO,GAAMrO,GACb,MAAO,CACLj5I,KAAM,gBACN8lG,QAAS,CACP,UACA,gBAEF30E,SAAU,CACR,CACE85B,UAAW,cAIXumF,MAAO,qCACPwC,OAAQ,CACN55H,IAAK,gBACL8gI,YAAa,UAKvB,CCrBA,SAASqM,GAAKtO,GACZ,MAAM4G,EAAW,yBAGX2H,EAAiB,8BA8CjBxE,EAAS,CACb/3F,UAAW,SACXwmF,UAAW,EACX2G,SAAU,CACR,CACE5G,MAAO,IACPp3H,IAAK,KAEP,CAAEo3H,MAAO,QAEXrgH,SAAU,CACR8nH,EAAK1H,iBAvCkB,CACzBtmF,UAAW,oBACXmtF,SAAU,CACR,CACE5G,MAAO,OACPp3H,IAAK,QAEP,CACEo3H,MAAO,MACPp3H,IAAK,UAqCLqtI,EAAmBxO,EAAKH,QAAQkK,EAAQ,CAAE5K,SAAU,CACxD,CACE5G,MAAO,IACPp3H,IAAK,IACL+W,SAAU,CACR,CACEqgH,MAAO,KACPC,UAAW,KAIjB,CACED,MAAO,IACPp3H,IAAK,KAEP,CAAEo3H,MAAO,mBAOLkW,EAAY,CAChBz8F,UAAW,SAC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AC,OAAS,OAAS,EAAG,GAC/B,MAAS,CAAC,OAAS,OAAS,EAAG,GAC/B,MAAS,CAAC,OAAS,OAAS,EAAG,GAC/B,MAAS,CAAC,OAAS,OAAS,EAAG,GAC/B,MAAS,CAAC,OAAS,OAAS,EAAG,GAC/B,MAAS,CAAC,OAAS,OAAS,EAAG,GAC/B,MAAS,CAAC,OAAS,OAAS,EAAG,GAC/B,MAAS,CAAC,OAAS,OAAS,EAAG,GAC/B,MAAS,CAAC,OAAS,OAAS,EAAG,GAC/B,MAAS,CAAC,OAAS,OAAS,EAAG,GAC/B,MAAS,CAAC,OAAS,OAAS,EAAG,GAC/B,MAAS,CAAC,OAAS,OAAS,EAAG,GAC/B,MAAS,CAAC,OAAS,OAAS,EAAG,GAC/B,MAAS,CAAC,OAAS,OAAS,EAAG,GAC/B,MAAS,CAAC,OAAS,OAAS,EAAG,GAC/B,MAAS,CAAC,OAAS,OAAS,EAAG,GAC/B,MAAS,CAAC,OAAS,OAAS,EAAG,GAC/B,MAAS,CAAC,OAAS,OAAS,EAAG,GAC/B,MAAS,CAAC,OAAS,OAAS,EAAG,GAC/B,MAAS,CAAC,OAAS,OAAS,EAAG,GAC/B,MAAS,CAAC,OAAS,OAAS,EAAG,GAC/B,MAAS,CAAC,OAAS,OAAS,EAAG,GAC/B,MAAS,CAAC,OAAS,OAAS,EAAG,GAC/B,MAAS,CAAC,OAAS,OAAS,EAAG,GAC/B,MAAS,CAAC,OAAS,OAAS,EAAG,GAC/B,MAAS,CAAC,OAAS,OAAS,EAAG,GAC/B,MAAS,CAAC,OAAS,OAAS,EAAG,GAC/B,MAAS,CAAC,EAAG,OAAS,OAAS,GAC/B,MAAS,CAAC,OAAS,OAAS,EAAG,GAC/B,MAAS,CAAC,OAAS,OAAS,EAAG,GAC/B,MAAS,CAAC,OAAS,OAAS,EAAG,GAC/B,MAAS,CAAC,OAAS,OAAS,EAAG,GAC/B,MAAS,CAAC,OAAS,OAAS,EAAG,GAC/B,MAAS,CAAC,OAAS,OAAS,EAAG,GAC/B,MAAS,CAAC,OAAS,OAAS,EAAG,GAC/B,MAAS,CAAC,OAAS,OAAS,EAAG,GAC/B,MAAS,CAAC,OAAS,OAAS,EAAG,GAC/B,MAAS,CAAC,OAAS,OAAS,EAAG,GAC/B,MAAS,CAAC,OAAS,OAAS,EAAG,GAC/B,MAAS,CAAC,OAAS,OAAS,EAAG,IAEnC,sBAAuB,CACnB,GAAM,CAAC,EAAG,OAAS,EAAG,GACtB,GAAM,CAAC,EAAG,OAAS,EAAG,GACtB,GAAM,CAAC,EAAG,OAAS,EAAG,GACtB,GAAM,CAAC,OAAS,OAAS,EAAG,GAC5B,GAAM,CAAC,OAAS,OAAS,EAAG,GAC5B,GAAM,CAAC,OAAS,OAAS,EAAG,GAC5B,GAAM,CAAC,EAAG,OAAS,EAAG,GACtB,GAAM,CAAC,OAAS,OAAS,EAAG,GAC5B,GAAM,CAAC,EAAG,OAAS,EAAG,GACtB,GAAM,CAAC,OAAS,OAAS,EAAG,GAC5B,GAAM,CAAC,EAAG,OAAS,EAAG,QACtB,GAAM,CAAC,EAAG,OAAS,OAAS,QAC5B,GAAM,CAAC,EAAG,OAAS,OAAS,QAC5B,GAAM,CAAC,EAAG,OAAS,OAAS,QAC5B,GAAM,CAAC,EAAG,OAAS,OAAS,QAC5B,GAAM,CAAC,EAAG,OAAS,OAAS,QAC5B,GAAM,CAAC,OAAS,OAAS,MAAQ,QACjC,GAAM,CAAC,EAAG,OAAS,OAAS,QAC5B,GAAM,CAAC,EAAG,OAAS,OAAS,GAC5B,GAAM,CAAC,OAAS,OAAS,OAAS,QAClC,GAAM,CAAC,EAAG,OAAS,OAAS,QAC5B,GAAM,CAAC,EAAG,OAAS,EAAG,QACtB,GAAM,CAAC,EAAG,OAAS,EAAG,QACtB,GAAM,CAAC,EAAG,OAAS,OAAS,QAC5B,GAAM,CAAC,EAAG,OAAS,OAAS,QAC5B,GAAM,CAAC,EAAG,OAAS,OAAS,QAC5B,GAAM,CAAC,OAAS,OAAS,EAAG,QAC5B,GAAM,CAAC,EAAG,OAAS,EAAG,QACtB,GAAM,CAAC,EAAG,OAAS,KAAO,QAC1B,GAAM,CAAC,EAAG,OAAS,OAAS,GAC5B,GAAM,CAAC,EAAG,OAAS,OAAS,QAC5B,GAAM,CAAC,EAAG,OAAS,OAAS,GAC5B,GAAM,CAAC,EAAG,OAAS,OAAS,QAC5B,GAAM,CAAC,EAAG,OAAS,OAAS,QAC5B,GAAM,CAAC,OAAS,OAAS,OAAS,QAClC,GAAM,CAAC,EAAG,OAAS,OAAS,SAEhC,kBAAmB,CACf,GAAM,CAAC,EAAG,OAAS,EAAG,GACtB,GAAM,CAAC,EAAG,OAAS,EAAG,GACtB,GAAM,CAAC,EAAG,OAAS,EAAG,GACtB,GAAM,CAAC,EAAG,OAAS,EAAG,GACtB,GAAM,CAAC,OAAS,OAAS,EAAG,GAC5B,GAAM,CAAC,OAAS,OAAS,EAAG,GAC5B,GAAM,CAAC,EAAG,OAAS,EAAG,GACtB,GAAM,CAAC,OAAS,OAAS,EAAG,GAC5B,GAAM,CAAC,EAAG,OAAS,EAAG,GACtB,GAAM,CAAC,OAAS,OAAS,EAAG,GAC5B,GAAM,CAAC,EAAG,OAAS,EAAG,GACtB,GAAM,CAAC,OAAS,OAAS,EAAG,GAC5B,GAAM,CAAC,EAAG,OAAS,EAAG,GACtB,GAAM,CAAC,EAAG,OAAS,EAAG,GACtB,GAAM,CAAC,EAAG,OAAS,EAAG,GACtB,GAAM,CAAC,OAAS,OAAS,EAAG,GAC5B,GAAM,CAAC,OAAS,OAAS,EAAG,GAC5B,GAAM,CAAC,OAAS,OAAS,EAAG,GAC5B,GAAM,CAAC,EAAG,OAAS,EAAG,GACtB,GAAM,CAAC,OAAS,OAAS,EAAG,GAC5B,GAAM,CAAC,EAAG,OAAS,EAAG,GACtB,GAAM,CAAC,OAAS,OAAS,EAAG,GAC5B,GAAM,CAAC,EAAG,OAAS,EAAG,GACtB,GAAM,CAAC,OAAS,OAAS,EAAG,GAC5B,GAAM,EAAC,OAAU,OAAS,EAAG,GAC7B,GAAM,CAAC,EAAG,OAAS,EAAG,GACtB,GAAM,CAAC,EAAG,OAAS,EAAG,GACtB,GAAM,CAAC,EAAG,OAAS,EAAG,GACtB,GAAM,CAAC,EAAG,OAAS,EAAG,GACtB,GAAM,CAAC,EAAG,OAAS,EAAG,GACtB,GAAM,CAAC,EAAG,OAAS,EAAG,GACtB,GAAM,CAAC,OAAS,OAAS,EAAG,GAC5B,GAAM,CAAC,EAAG,OAAS,EAAG,GACtB,GAAM,CAAC,OAAS,OAAS,EAAG,GAC5B,GAAM,CAAC,EAAG,OAAS,EAAG,GACtB,GAAM,CAAC,OAAS,OAAS,EAAG,GAC5B,GAAM,CAAC,EAAG,OAAS,EAAG,GACtB,GAAM,CAAC,EAAG,OAAS,EAAG,GACtB,GAAM,CAAC,EAAG,OAAS,EAAG,GACtB,GAAM,CAAC,EAAG,OAAS,EAAG,GACtB,GAAM,CAAC,EAAG,OAAS,EAAG,GACtB,GAAM,CAAC,OAAS,OAAS,EAAG,GAC5B,GAAM,CAAC,OAAS,OAAS,EAAG,GAC5B,GAAM,CAAC,EAAG,OAAS,EAAG,GACtB,GAAM,CAAC,EAAG,OAAS,EAAG,GACtB,GAAM,CAAC,EAAG,OAAS,EAAG,GACtB,GAAM,CAAC,EAAG,OAAS,EAAG,GACtB,GAAM,CAAC,EAAG,OAAS,EAAG,GACtB,GAAM,CAAC,EAAG,OAAS,EAAG,GACtB,GAAM,CAAC,EAAG,OAAS,EAAG,GACtB,GAAM,CAAC,OAAS,OAAS,EAAG,GAC5B,GAAM,CAAC,OAAS,OAAS,EAAG,GAC5B,GAAM,CAAC,OAAS,OAAS,EAAG,GAC5B,GAAM,CAAC,OAAS,OAAS,EAAG,GAC5B,GAAM,CAAC,EAAG,OAAS,EAAG,GACtB,GAAM,CAAC,EAAG,OAAS,EAAG,GACtB,GAAM,CAAC,EAAG,OAAS,EAAG,GACtB,GAAM,CAAC,EAAG,OAAS,EAAG,GACtB,IAAO,CAAC,EAAG,OAAS,EAAG,GACvB,IAAO,CAAC,EAAG,OAAS,EAAG,GACvB,IAAO,CAAC,OAAS,OAAS,EAAG,GAC7B,IAAO,CAAC,OAAS,OAAS,EAAG,GAC7B,IAAO,CAAC,OAAS,OAAS,EAAG,GAC7B,IAAO,CAAC,EAAG,OAAS,EAAG,GACvB,IAAO,CAAC,EAAG,OAAS,EAAG,GACvB,IAAO,CAAC,EAAG,OAAS,EAAG,GACvB,IAAO,CAAC,EAAG,OAAS,EAAG,GACvB,IAAO,CAAC,EAAG,OAAS,EAAG,GACvB,IAAO,CAAC,EAAG,OAAS,EAAG,GACvB,IAAO,CAAC,EAAG,OAAS,EAAG,GACvB,IAAO,CAAC,OAAS,OAAS,EAAG,GAC7B,IAAO,CAAC,OAAS,OAAS,EAAG,GAC7B,IAAO,CAAC,EAAG,OAAS,EAAG,GACvB,IAAO,CAAC,EAAG,OAAS,EAAG,GACvB,IAAO,CAAC,EAAG,OAAS,EAAG,GACvB,IAAO,CAAC,EAAG,OAAS,EAAG,GACvB,IAAO,CAAC,EAAG,OAAS,EAAG,GACvB,IAAO,CAAC,EAAG,OAAS,EAAG,GACvB,IAAO,CAAC,OAAS,OAAS,EAAG,GAC7B,IAAO,CAAC,OAAS,OAAS,EAAG,GAC7B,IAAO,CAAC,OAAS,OAAS,EAAG,GAC7B,KAAQ,CAAC,EAAG,OAAS,EAAG,GACxB,KAAQ,CAAC,EAAG,OAAS,EAAG,GACxB,MAAS,CAAC,EAAG,OAAS,EAAG,GACzB,MAAS,CAAC,EAAG,OAAS,EAAG,GACzB,MAAS,CAAC,OAAS,OAAS,EAAG,GAC/B,MAAS,CAAC,OAAS,OAAS,EAAG,GAC/B,MAAS,CAAC,OAAS,OAAS,EAAG,GAC/B,MAAS,CAAC,EAAG,OAAS,EAAG,GACzB,MAAS,CAAC,EAAG,OAAS,EAAG,GACzB,MAAS,CAAC,EAAG,OAAS,EAAG,IAE7B,YAAa,CACT,GAAM,CAAC,EAAG,OAAS,EAAG,GACtB,GAAM,CAAC,EAAG,OAAS,EAAG,GACtB,GAAM,CAAC,OAAS,OAAS,EAAG,GAC5B,GAAM,CAAC,OAAS,IAAM,EAAG,GACzB,GAAM,CAAC,OAAS,IAAM,EAAG,GACzB,GAAM,CAAC,EAAG,OAAS,EAAG,GACtB,GAAM,CAAC,EAAG,OAAS,EAAG,GACtB,GAAM,CAAC,IAAM,IAAM,EAAG,GACtB,GAAM,CAAC,IAAM,IAAM,EAAG,GACtB,GAAM,CAAC,EAAG,IAAM,EAAG,GACnB,GAAM,CAAC,OAAS,OAAS,EAAG,GAC5B,GAAM,CAAC,OAAS,OAAS,EAAG,GAC5B,GAAM,CAAC,EAAG,OAAS,EAAG,GACtB,GAAM,CAAC,EAAG,OAAS,EAAG,GACtB,GAAM,CAAC,IAAM,IAAM,EAAG,GACtB,GAAM,CAAC,EAAG,OAAS,EAAG,GACtB,GAAM,CAAC,EAAG,OAAS,EAAG,GACtB,GAAM,CAAC,EAAG,OAAS,EAAG,GACtB,GAAM,CAAC,EAAG,OAAS,EAAG,GACtB,GAAM,CAAC,EAAG,OAAS,EAAG,GACtB,GAAM,CAAC,EAAG,OAAS,EAAG,GACtB,GAAM,CAAC,EAAG,OAAS,EAAG,GACtB,GAAM,CAAC,EAAG,OAAS,EAAG,GACtB,GAAM,CAAC,EAAG,OAAS,EAAG,GACtB,GAAM,CAAC,EAAG,OAAS,EAAG,GACtB,GAAM,CAAC,EAAG,OAAS,EAAG,GACtB,GAAM,CAAC,OAAS,OAAS,EAAG,GAC5B,GAAM,CAAC,OAAS,OAAS,EAAG,GAC5B,GAAM,EAAC,OAAU,OAAS,EAAG,GAC7B,GAAM,CAAC,OAAS,OAAS,EAAG,GAC5B,GAAM,CAAC,EAAG,OAAS,EAAG,GACtB,GAAM,CAAC,EAAG,OAAS,EAAG,GACtB,GAAM,CAAC,EAAG,OAAS,EAAG,GACtB,GAAM,CAAC,EAAG,OAAS,EAAG,GACtB,GAAM,CAAC,EAAG,OAAS,EAAG,GACtB,GAAM,CAAC,EAAG,OAAS,EAAG,GACtB,GAAM,CAAC,EAAG,OAAS,EAAG,GACtB,GAAM,CAAC,EAAG,OAAS,EAAG,GACtB,GAAM,CAAC,EAAG,OAAS,EAAG,GACtB,GAAM,CAAC,EAAG,OAAS,EAAG,GACtB,GAAM,CAAC,EAAG,OAAS,EAAG,GACtB,GAAM,CAAC,EAAG,OAAS,EAAG,GACtB,GAAM,CAAC,EAAG,OAAS,EAAG,GACtB,GAAM,CAAC,EAAG,OAAS,EAAG,GACtB,GAAM,CAAC,EAAG,OAAS,EAAG,GACtB,GAAM,CAAC,EAAG,OAAS,EAAG,GACtB,GAAM,CAAC,EAAG,OAAS,EAAG,GACtB,GAAM,CAAC,EAAG,OAAS,EAAG,GACtB,GAAM,CAAC,OAAS,OAAS,EAAG,GAC5B,GAAM,CAAC,EAAG,OAAS,EAAG,GACtB,GAAM,CAAC,EAAG,OAAS,EAAG,GACtB,GAAM,CAAC,EAAG,OAAS,EAAG,GACtB,GAAM,CAAC,EAAG,OAAS,EAAG,GACtB,GAAM,CAAC,EAAG,OAAS,OAAS,GAC5B,GAAM,CAAC,EAAG,OAAS,OAAS,GAC5B,GAAM,CAAC,EAAG,OAAS,EAAG,GACtB,GAAM,CAAC,EAAG,OAAS,OAAS,GAC5B,GAAM,CAAC,EAAG,OAAS,EAAG,GACtB,GAAM,CAAC,IAAM,IAAM,EAAG,GACtB,GAAM,CAAC,IAAM,IAAM,EAAG,GACtB,GAAM,CAAC,IAAM,IAAM,EAAG,GACtB,GAAM,CAAC,EAAG,OAAS,EAAG,GACtB,GAAM,CAAC,IAAM,OAAS,OAAS,GAC/B,GAAM,CAAC,EAAG,OAAS,EAAG,GACtB,GAAM,CAAC,EAAG,OAAS,EAAG,GACtB,GAAM,CAAC,EAAG,OAAS,EAAG,GACtB,GAAM,CAAC,EAAG,OAAS,EAAG,GACtB,IAAO,CAAC,EAAG,OAAS,EAAG,GACvB,IAAO,CAAC,EAAG,OAAS,EAAG,GACvB,IAAO,CAAC,EAAG,OAAS,OAAS,GAC7B,IAAO,CAAC,OAAS,OAAS,OAAS,GACnC,IAAO,CAAC,EAAG,OAAS,EAAG,GACvB,IAAO,CAAC,EAAG,OAAS,EAAG,GACvB,IAAO,CAAC,OAAS,OAAS,EAAG,GAC7B,IAAO,CAAC,EAAG,OAAS,EAAG,GACvB,IAAO,CAAC,EAAG,OAAS,EAAG,GACvB,IAAO,CAAC,EAAG,OAAS,EAAG,GACvB,IAAO,CAAC,EAAG,OAAS,EAAG,GACvB,IAAO,CAAC,EAAG,OAAS,EAAG,GACvB,IAAO,CAAC,OAAS,OAAS,EAAG,GAC7B,IAAO,CAAC,OAAS,OAAS,EAAG,GAC7B,IAAO,CAAC,EAAG,OAAS,EAAG,GACvB,IAAO,CAAC,EAAG,OAAS,EAAG,GACvB,IAAO,CAAC,EAAG,OAAS,EAAG,GACvB,IAAO,CAAC,EAAG,OAAS,EAAG,GACvB,IAAO,CAAC,EAAG,OAAS,OAAS,GAC7B,IAAO,CAAC,EAAG,OAAS,OAAS,GAC7B,IAAO,CAAC,EAAG,OAAS,EAAG,GACvB,IAAO,CAAC,OAAS,OAAS,OAAS,GACnC,IAAO,CAAC,EAAG,OAAS,EAAG,GACvB,IAAO,CAAC,IAAM,IAAM,EAAG,GACvB,IAAO,CAAC,IAAM,IAAM,EAAG,GACvB,IAAO,CAAC,IAAM,IAAM,EAAG,GACvB,IAAO,CAAC,IAAM,OAAS,EAAG,GAC1B,IAAO,CAAC,EAAG,OAAS,EAAG,GACvB,IAAO,CAAC,EAAG,OAAS,EAAG,GACvB,IAAO,CAAC,EAAG,OAAS,EAAG,GACvB,IAAO,CAAC,EAAG,OAAS,EAAG,GACvB,IAAO,CAAC,OAAS,OAAS,EAAG,GAC7B,IAAO,CAAC,EAAG,OAAS,EAAG,GACvB,IAAO,CAAC,OAAS,OAAS,EAAG,GAC7B,IAAO,CAAC,OAAS,OAAS,EAAG,GAC7B,IAAO,CAAC,EAAG,OAAS,EAAG,GACvB,IAAO,CAAC,OAAS,OAAS,EAAG,GAC7B,IAAO,CAAC,EAAG,OAAS,EAAG,GACvB,IAAO,CAAC,EAAG,OAAS,EAAG,GACvB,IAAO,CAAC,EAAG,OAAS,EAAG,GACvB,IAAO,CAAC,EAAG,OAAS,EAAG,GACvB,IAAO,CAAC,EAAG,OAAS,EAAG,GACvB,IAAO,CAAC,EAAG,OAAS,EAAG,GACvB,IAAO,CAAC,EAAG,OAAS,EAAG,GACvB,IAAO,CAAC,EAAG,OAAS,EAAG,GACvB,IAAO,CAAC,EAAG,OAAS,EAAG,GACvB,IAAO,CAAC,EAAG,OAAS,EAAG,GACvB,IAAO,CAAC,EAAG,OAAS,EAAG,GACvB,IAAO,CAAC,EAAG,OAAS,EAAG,GACvB,IAAO,CAAC,EAAG,OAAS,EAAG,GACvB,IAAO,CAAC,EAAG,OAAS,EAAG,GACvB,IAAO,CAAC,EAAG,OAAS,EAAG,GACvB,IAAO,CAAC,EAAG,OAAS,EAAG,GACvB,IAAO,CAAC,EAAG,OAAS,EAAG,GACvB,IAAO,CAAC,EAAG,OAAS,EAAG,GACvB,IAAO,CAAC,EAAG,OAAS,EAAG,GACvB,IAAO,CAAC,EAAG,OAAS,EAAG,GACvB,IAAO,CAAC,OAAS,OAAS,EAAG,GAC7B,IAAO,CAAC,EAAG,OAAS,EAAG,GACvB,IAAO,CAAC,EAAG,OAAS,EAAG,GACvB,IAAO,CAAC,EAAG,OAAS,EAAG,GACvB,IAAO,CAAC,EAAG,OAAS,EAAG,GACvB,IAAO,CAAC,EAAG,OAAS,EAAG,GACvB,IAAO,CAAC,EAAG,OAAS,EAAG,GACvB,IAAO,CAAC,EAAG,OAAS,EAAG,GACvB,IAAO,CAAC,EAAG,OAAS,EAAG,GACvB,IAAO,CAAC,EAAG,OAAS,EAAG,GACvB,IAAO,CAAC,EAAG,OAAS,EAAG,GACvB,IAAO,CAAC,EAAG,OAAS,EAAG,GACvB,KAAQ,CAAC,EAAG,OAAS,OAAS,GAC9B,KAAQ,CAAC,EAAG,OAAS,OAAS,GAC9B,KAAQ,CAAC,EAAG,OAAS,EAAG,GACxB,KAAQ,CAAC,EAAG,OAAS,EAAG,GACxB,KAAQ,CAAC,EAAG,OAAS,EAAG,GACxB,KAAQ,CAAC,EAAG,OAAS,EAAG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ACtB,GAAM,CAAC,EAAG,OAAS,EAAG,GACtB,GAAM,CAAC,EAAG,OAAS,EAAG,GACtB,GAAM,CAAC,EAAG,OAAS,EAAG,GACtB,GAAM,CAAC,EAAG,OAAS,EAAG,GACtB,GAAM,CAAC,OAAS,OAAS,EAAG,GAC5B,GAAM,CAAC,EAAG,OAAS,EAAG,GACtB,GAAM,CAAC,EAAG,OAAS,EAAG,GACtB,GAAM,CAAC,EAAG,OAAS,EAAG,GACtB,GAAM,CAAC,EAAG,OAAS,EAAG,GACtB,GAAM,CAAC,EAAG,OAAS,EAAG,GACtB,GAAM,CAAC,EAAG,OAAS,EAAG,GACtB,GAAM,CAAC,EAAG,OAAS,EAAG,GACtB,GAAM,CAAC,EAAG,OAAS,EAAG,GACtB,GAAM,CAAC,EAAG,OAAS,EAAG,GACtB,GAAM,CAAC,OAAS,OAAS,EAAG,GAC5B,GAAM,CAAC,OAAS,OAAS,EAAG,GAC5B,GAAM,CAAC,OAAS,OAAS,EAAG,GAC5B,GAAM,CAAC,EAAG,OAAS,EAAG,GACtB,GAAM,CAAC,OAAS,EAAG,EAAG,GACtB,GAAM,CAAC,EAAG,OAAS,EAAG,GACtB,GAAM,CAAC,EAAG,OAAS,EAAG,GACtB,GAAM,CAAC,EAAG,OAAS,EAAG,GACtB,GAAM,CAAC,EAAG,OAAS,EAAG,GACtB,IAAO,CAAC,EAAG,OAAS,EAAG,GACvB,IAAO,CAAC,EAAG,OAAS,EAAG,GACvB,IAAO,CAAC,EAAG,OAAS,EAAG,GACvB,IAAO,CAAC,OAAS,OAAS,EAAG,GAC7B,IAAO,CAAC,EAAG,OAAS,EAAG,GACvB,IAAO,CAAC,EAAG,OAAS,EAAG,GACvB,IAAO,CAAC,OAAS,OAAS,EAAG,GAC7B,IAAO,CAAC,EAAG,OAAS,EAAG,GACvB,IAAO,CAAC,EAAG,OAAS,EAAG,GACvB,IAAO,CAAC,EAAG,OAAS,EAAG,GACvB,IAAO,CAAC,EAAG,OAAS,EAAG,GACvB,IAAO,CAAC,EAAG,OAAS,EAAG,GACvB,IAAO,CAAC,OAAS,OAAS,EAAG,GAC7B,IAAO,CAAC,OAAS,OAAS,EAAG,GAC7B,IAAO,CAAC,EAAG,OAAS,EAAG,GACvB,IAAO,CAAC,EAAG,OA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jI,MAEb8yD,EAAa,CACjB,MACA,OACA,OACA,MACA,SACA,UACA,UACA,QACA,SAEF,MAAO,CACL9jM,KAAM,oBACNmxB,SAAU,CAER,CACE85B,UAAW,SACXumF,MAAO,mDACPC,UAAW,GAGb,CACExmF,UAAW,SACXumF,MAAO,UACPC,UAAW,GAGb,CACExmF,UAAW,SACXumF,MAAOR,EAAMxtG,OAAO,IAAKwtG,EAAMR,UAAUszD,IACzC1pL,IAAK,IACLs5H,SAAUowD,EACVnyD,QAAS,KACTF,UAAW,EACXtgH,SAAU,CACR,CACEqgH,MAAO,kBACPC,UAAW,KAKjB,CACExmF,UAAW,SAIXumF,MAAO,oBACPG,QAAS,KACTF,UAAW,GAEb,CACExmF,UAAW,SACXumF,MAAO,KACPp3H,IAAK,KACLu3H,QAAS,KACTF,UAAW,GAGb,CACExmF,UAAW,SACXumF,MAAO,sBACPp3H,IAAK,IACLu3H,QAAS,KACTF,UAAW,GAGb,CACExmF,UAAW,SACXumF,MAAO,IACPp3H,IAAK,IACLu3H,QAAS,KACTF,UAAW,IAInB,IHpFAwH,GAAK4F,iBAAiB,2BImJtBklD,GAhJA,SAAsB9qD,GACpB,MAAMjI,EAAQiI,EAAKjI,MACbE,EAAW,2BACX8yD,EAAchzD,EAAMxtG,OACxB0tG,EACAF,EAAMxtG,OAAO,OAAQ0tG,EAAU,OAI3B+yD,EAAoB,CACxBh5I,UAAW,WACXumF,MAAO,SACPp3H,IAAK82H,EACLO,UAAW,IA8Db,MAAO,CACLzxI,KAAM,eACN8lG,QAAS,CAAE,MACX4tC,SAAU,CACRiB,QA/Da,CACf,KACA,QACA,OACA,QACA,QACA,QACA,WACA,UACA,SACA,KACA,UACA,OACA,OACA,UACA,QACA,UACA,MACA,WACA,MACA,KACA,aACA,SACA,KACA,UACA,aACA,YACA,WACA,KACA,YACA,SACA,MACA,WACA,UACA,UACA,YACA,SACA,SACA,MACA,SACA,QACA,SACA,OACA,QACA,MACA,SACA,MACA,MACA,OACA,QACA,QAcEkM,QAZa,CACf,OACA,QACA,OACA,cAUA1vH,SAAU,CACR8nH,EAAKvH,iBACLuH,EAAKrH,kBACLqH,EAAKhH,oBACLgH,EAAK/G,qBACL+G,EAAK5G,cACL,CACE1kI,MAAO,CACL,YACA,MACAq2L,GAEF/4I,UAAW,CACT,EAAG,UACH,EAAG,gBAGP,CACEt9C,MAAO,CACL,2CACA,MACAujI,GAEFjmF,UAAW,CACT,EAAG,UACH,EAAG,gBAGP,CACEA,UAAW,OACXuoF,cAAe,iBACfp5H,IAAK,IACLs5H,SAAU,CAAEiB,QAAS,mBAEvB,CACEnB,cAAe,WACfp5H,IAAK,OACL47H,YAAY,EACZrE,QAAS,KACTxgH,SAAU,CACR8nH,EAAKH,QAAQG,EAAKzG,WAAY,CAAEvnF,UAAW,mBAC3C,CACEA,UAAW,SACXumF,MAAO,KACPp3H,IAAK,KACL+W,SAAU,CACR8nH,EAAKvH,iBACLuH,EAAKrH,kBACLqH,EAAKhH,oBACLgH,EAAK/G,qBACL+xD,IAGJ,CAAEzyD,MAAOR,EAAMxtG,OAAO,OAhII,qCAmI9By1G,EAAKvG,cAEPf,QAAS,IAEb,IJhJAsH,GAAK4F,iBAAiB,kBKkQtBqlD,GApPA,SAAajrD,GAKX,MAAMkrD,EAAa,cACbC,EAAc,YAAcD,EAO5B/yD,EAAY,OAFO+yD,sBAAqFC,EAE5F,MANSD,EAAa,OAASA,EAAa,MAAaC,EAMzD,MAGZC,EAAW,4BAGXC,EAAY,gBAGZf,EAAWtqD,EAAKpH,QAAQ,KAAM,KAK9B0yD,EAAY,CAIhB/yD,MAAO,YACPp3H,IAAK,sBAGLu3H,QAAS2yD,EACTnzK,SAAU,CACR,CAGEqiH,cAAe,0BACfU,YAAY,GAEd,CAEEjpF,UAAW,UACXuoF,cAAe,wEAEjB,CACEvoF,UAAW,OACXumF,MAAO6yD,EACPnwD,YAAY,EACZzC,UAAW,KA+EjB,MAAO,CACLzxI,KAAM,MACNs2I,kBAAkB,EAClB5C,SAAU,CACRiB,QA9Ea,CACf,QACA,OACA,MACA,SACA,MACA,QACA,MACA,UACA,WACA,MACA,SACA,QACA,SACA,SACA,YACA,KACA,WACA,UACA,OACA,KACA,OACA,MACA,SACA,UACA,MACA,MACA,MACA,eACA,QACA,WACA,aACA,KACA,SACA,UACA,UACA,OACA,QACA,OACA,SACA,YACA,OACA,UACA,OACA,KACA,YACA,OACA,OACA,KACA,YACA,WACA,YACA,KACA,QACA,MACA,UACA,QACA,QACA,UACA,SACA,OACA,QACA,OACA,MACA,QACA,SACA,UACA,OACA,KACA,MACA,UACA,OAQEkM,QAAS,CACP,OACA,UAGJ1vH,SAAU,CACRoyK,EAEA,CACEt4I,UAAW,SACXumF,MAAO,IACPp3H,IAAK,IACL+W,SAAU,CACR,CACEqgH,MAAO,KACPC,UAAW,KAKjB,CAEExmF,UAAW,SACXumF,MAAO,OAET,CAEEvmF,UAAW,SACXumF,MAAOJ,EACPK,UAAW,GAEb,CAEExmF,UAAW,SACXumF,MAAO,IAAM6yD,GAEf,CAEEp5I,UAAW,QACXumF,MAAO,8DACPp3H,IAAK,SACLs5H,SAAU,eACV3B,cAAc,EACdiE,YAAY,EACZrE,QAAS2yD,GAEX,CAGE9yD,MAAO,yDACPp3H,IAAK,sCACLs5H,SAAU,uDAGVoC,aAAa,EACb3kH,SACQ,CACEoyK,EACA,CAEEt4I,UAAW,QACXumF,MAAO,4CACPp3H,IAAK,eACL23H,cAAc,EACdiE,YAAY,EACZrE,QAAS2yD,GAIXC,EACA,CAEEt5I,UAAW,OACXumF,MAAO,gBACPp3H,IAAK,aACLs5H,SAAU,SACV3B,cAAc,EACdiE,YAAY,EAEZ9B,YAAY,EACZvC,QAAS2yD,KAKvB,CAGEr5I,UAAW,OACXumF,MAAO,oBACPp3H,IAAK,OACLs5H,SAAU,OACV3B,cAAc,EACdJ,QAAS2yD,GAIXC,GASN,IL/PAtrD,GAAK4F,iBAAiB,0BM0KtB2lD,GAzKA,SAAqBvrD,GACnB,MAAMwrD,EAAkB,CACtBx5I,UAAW,WACXumF,MAAO,2HAGHkzD,EAAmB,CACvBz5I,UAAW,SACXumF,MAAO,kBAGHmzD,EAAc,CAClB15I,UAAW,UACXumF,MAAO,IACPp3H,IAAK,IACL+W,SAAU,CACRszK,EACAC,IAwDJ,OApDAD,EAAgBtzK,SAAW,CAAEwzK,GAC7BD,EAAiBvzK,SAAW,CAAEwzK,GAmDvB,CACL3kM,KAAM,cACN8lG,QAAS,CAAE,OAEX4tC,SArDe,CACf,MACA,OACA,QACA,WACA,QACA,OACA,SACA,KACA,OACA,OACA,SACA,YACA,KACA,OACA,KACA,MACA,MACA,MACA,QACA,KACA,WACA,MACA,WACA,QACA,UACA,SACA,QACA,YACA,QACA,SACA,WACA,WACA,OACA,UACA,UACA,OACA,QACA,SACA,OACA,YACA,aACA,MACA,QACA,YACA,WACA,YAUA/B,QAAS,uDAETxgH,SAAU,CACR,CACE85B,UAAW,SACXumF,MAAO,IACPp3H,IAAK,IACLu3H,QAAS,MACTxgH,SAAU,CAAE8nH,EAAK1H,kBACjBE,UAAW,GAIb,CACExmF,UAAW,SACXumF,MAAO,MACPp3H,IAAK,OAGP,CACE6wC,UAAW,SACXumF,MAAO,IACPp3H,IAAK,IACLu3H,QAAS,MACTxgH,SAAU,CAAE8nH,EAAK1H,kBACjBE,UAAW,GAGbwH,EAAKhH,oBACLgH,EAAK/G,qBAEL,CACEjnF,UAAW,SACXumF,MAAO,WACPp3H,IAAK,OAGP,CACEo5H,cAAe,sBACfp5H,IAAK,KACLu3H,QAAS,UACTxgH,SAAU,CACR,CACE85B,UAAW,SACXumF,MAAO,mBAKb,CACEgC,cAAe,QACfp5H,IAAK,KACLu3H,QAAS,UACTxgH,SAAU,CACR,CACE85B,UAAW,SACXumF,MAAO,gBACPrgH,SAAU,CACR,CACEqgH,MAAO,WACPrgH,SAAU,CACR,CACE85B,UAAW,SACXumF,MAAO,uBASrBizD,EACAC,EAEA,CACEz5I,UAAW,UACXumF,MAAO,wBAGT,CACEvmF,UAAW,SACXwmF,UAAW,EACXD,MAAO,uFAIf,INvKAyH,GAAK4F,iBAAiB,qBOgGtB+lD,GA7FA,SAAgB3rD,GACd,MAQM4rD,EAAa,CACjB55I,UAAW,SACXumF,MAAO,iDAMT,MAAO,CACLxxI,KAAM,gBACN8lG,QAAS,CAAE,cACXwwC,kBAAkB,EAClBnlH,SAAU,CACR8nH,EAAK9G,kBACL,CACElnF,UAAW,UACXumF,MAAO,OACPp3H,IAAK,IACL+W,SAAU,CACR0zK,EAfY,CAClB55I,UAAW,SACXumF,MAAO,YAiBDyH,EAAKH,QAAQG,EAAKrH,kBAAmB,CAAEH,UAAW,MAGtD,CACExmF,UAAW,YACXumF,MAAO,MACPC,UAAW,EAGXiC,SAAU,CAAEtmH,EAAG,CACb,QACA,OACA,QACA,SACA,cACA,gBACA,cACA,eACA,aACA,gBACA,aACA,UACA,SACA,SACA,aACA,eAEF4mH,OAAQ,CACN55H,IAAK,IACLq3H,UAAW,EACXiC,SAAU,CAAEmN,QAAS,yBACrB1vH,SAAU,CACR,CACEW,MAAO,cACPnkB,MAAO,QAET,CACEs9C,UAAW,OACXumF,MAAO,OACPp3H,IAAK,OAEP,CACE6wC,UAAW,WACXumF,MAAO,UACPp3H,IAAK,KACL+W,SAAU,CACR,OA7EK,CACjB85B,UAAW,SACXumF,MAAO,aA+ECqzD,EA7EK,CACb55I,UAAW,SACXumF,MAAO,SA6ECyH,EAAKrH,sBAKbD,QAAS,KAEb,IP7FAsH,GAAK4F,iBAAiB,0BQ2ItBimD,GA3IA,SAAqB7rD,GACnB,MAAMjI,EAAQiI,EAAKjI,MACbgS,EAAS/J,EAAKH,QAClBG,EAAKrH,kBAAmB,CAAED,QAAS,OAC/BgQ,EAAS,CACb12F,UAAW,SACXumF,MAAO,KACPp3H,IAAK,KACL+W,SAAU,CACR,OACA8nH,EAAK5G,cACL2Q,IAGE+hD,EAAiB9rD,EAAKpH,QAAQ,KAAM,KASpC0xD,EAAW,CACfwB,EATqB9rD,EAAKpH,QAC1B,OACA,OACA,CAAE1gH,SAAU,CACV,OACA4zK,KAMF9rD,EAAK9G,mBA6CP,MAAO,CACLnyI,KAAM,cACN8lG,QAAS,CAAE,aACX4tC,SAAU,CACRiB,QACE,0iBAUFkM,QACE,mEACFC,SACE,wUAQJ3vH,SAAU,CACR6xH,EACA/J,EAAK5G,cACL,CACEpnF,UAAW,WACXumF,MAAOR,EAAMxtG,OACX,KACAwtG,EAAMR,OAzDZ,iBACA,gBACA,WACA,sBACA,eACA,UACA,0BACA,gBACA,eACA,kBACA,sBACA,gBACA,aACA,mBACA,cACA,cACA,0BACA,uBACA,2BACA,mBACA,oFACA,0BAqCM,OAGJ,CACEvlF,UAAW,WACXumF,MAAO,gBAET,CACEvmF,UAAW,UACXumF,MACE,gEAEJ,CACEvmF,UAAW,UACXumF,MAAOR,EAAMxtG,OACX,KACAwtG,EAAMR,OA3FZ,aACA,aACA,aACA,SACA,eACA,kEACA,kCACA,8BACA,eACA,uBACA,oBACA,oBACA,qBACA,eA+EM,OAGJ,CACEgD,cAAe,KACf7B,QAAS,WACTxgH,SAAU,CACR8nH,EAAKxG,sBACLkP,OAGD4hD,GAEL5xD,QAAS,kBAEb,IRxIAsH,GAAK4F,iBAAiB,qBSiatBmmD,GAnaA,SAAgB/rD,GACd,MACM/H,EAAW,yBACX0O,EAAW,CACfjL,QAAS,CACP,QACA,OACA,QACA,WACA,WACA,KACA,OACA,SACA,MACA,WACA,KACA,SACA,KACA,MACA,KACA,SACA,SACA,MACA,MACA,OACA,SAEFkM,QAAS,CACP,YACA,cACA,eACA,WACA,MACA,UACA,KACA,cACA,MACA,iBACA,QACA,OACA,OACA,aAEFC,SAAU,CACR,MACA,OACA,MACA,QACA,MACA,OACA,eACA,QACA,OACA,OACA,QACA,cACA,UACA,OACA,UACA,UACA,SACA,iBACA,OACA,WACA,iBACA,OACA,cACA,UACA,YACA,WACA,mBACA,aACA,MACA,QACA,UACA,MACA,SACA,UACA,WACA,WACA,MACA,SACA,eACA,UACA,kBACA,aACA,aACA,WACA,WACA,mBACA,uBACA,WACA,SACA,aACA,aACA,qBACA,SACA,QACA,MACA,UACA,SACA,UACA,kBACA,aACA,0BACA,iBACA,mBACA,yBACA,gCACA,+BACA,SACA,sBACA,OACA,UACA,QACA,eACA,gBACA,WACA,QACA,aACA,aACA,WACA,iBACA,gBACA,oBACA,UACA,UACA,OACA,SACA,WACA,OACA,OACA,MACA,WACA,UACA,aACA,UACA,WACA,UACA,SACA,eACA,aACA,UACA,QACA,qBACA,WACA,6BACA,SACA,SACA,WACA,iBACA,MACA,QACA,MACA,MACA,OACA,sBACA,MACA,cACA,MACA,SACA,QACA,wBACA,aACA,oBACA,gBACA,oBACA,OACA,MACA,SACA,SACA,UACA,WACA,QACA,oBACA,UACA,WACA,MACA,SACA,MACA,SACA,OACA,aACA,SACA,SACA,SACA,UACA,SACA,UACA,UACA,kBACA,SACA,QACA,SACA,SACA,cACA,WACA,MACA,QACA,OACA,SACA,QACA,OACA,sBACA,kBACA,QACA,cACA,cACA,WACA,MACA,sBACA,MACA,OACA,OACA,WACA,iBACA,YACA,aACA,cACA,QACA,UACA,QACA,QACA,QACA,UACA,sBACA,0BACA,2BACA,uBACA,oBACA,mBACA,kBACA,sBACA,gBACA,mBACA,sBACA,aACA,eACA,mBACA,iBACA,cACA,OACA,SACA,QACA,QACA,YACA,WACA,OACA,UACA,SACA,SACA,WAsCEmkD,EAAS,CACbh6I,UAAW,SACXumF,MAAO,MAlSKyH,EAAKjI,MAkSIR,OApCrB,qBACA,WACA,SACA,YACA,YACA,cACA,UACA,aACA,cACA,eACA,wBACA,QACA,OACA,QACA,iBACA,MACA,UACA,UACA,kBACA,SACA,YACA,WACA,kBACA,gBACA,cACA,SACA,kBACA,gBACA,cACA,YACA,QACA,YACA,SAMI0Q,EAAS,CACbj2F,UAAW,SACXmtF,SAAU,CACR,CAAE5G,MAAO,mBACT,CAAEA,MAAO,oBACT,CAAEA,MAAOyH,EAAK5H,cAEhBI,UAAW,GAEP0P,EAAQ,CACZl2F,UAAW,QACXumF,MAAO,SACPp3H,IAAK,MACLs5H,SAAUkM,EACVzuH,SAAU,IAENowH,EAAkB,CACtBt2F,UAAW,SACXumF,MAAO,IACPp3H,IAAK,IACL+W,SAAU,CACR8nH,EAAK1H,iBACL4P,IAGJA,EAAMhwH,SAAW,CACf8nH,EAAKvH,iBACLuH,EAAKrH,kBACL2P,EACAL,EACAjI,EAAK1G,aAEP,MAAMmP,EAAkBP,EAAMhwH,SAASqS,OAAO,CAC5Cy1G,EAAK/G,qBACL+G,EAAKhH,sBAGP,MAAO,CACLjyI,KAAM,gBACNs2I,kBAAkB,EAClB5C,SAAUkM,EACVzuH,SAAU,CACR8nH,EAAKvH,iBACLuH,EAAKrH,kBACL2P,EACAtI,EAAKhH,oBACLgH,EAAK/G,qBACL+yD,EACA/jD,EACA,CACE1P,MAAO,UACPC,UAAW,EACXtgH,SAAU,CACR,CACEqgH,MAAON,EAAW,QAClB4E,aAAa,EACbrE,UAAW,EACXtgH,SAAU,CACR,CACE85B,UAAW,OACXumF,MAAON,EACPO,UAAW,OAMrB,CACED,MAAO,IAAMyH,EAAKhG,eAAiB,uBACnCS,SAAU,SACVviH,SAAU,CACR8nH,EAAKhH,oBACLgH,EAAK/G,qBACL+G,EAAK1G,YACL,CACEtnF,UAAW,WACXumF,MAAO,cAAgBN,EAAW,UAClC4E,aAAa,EACb17H,IAAK,SACL+W,SAAU,CACR,CACE85B,UAAW,SACXmtF,SAAU,CACR,CAAE5G,MAAON,GACT,CAAEM,MAAO,WACT,CACEA,MAAO,KACPp3H,IAAK,KACL23H,cAAc,EACdiE,YAAY,EACZtC,SAAUkM,EACVzuH,SAAUuwH,QAOtBjQ,UAAW,GAEb,CACE+B,cAAe,WACfp5H,IAAK,KACL47H,YAAY,EACZ7kH,SAAU,CACR8nH,EAAKH,QAAQG,EAAKzG,WAAY,CAC5BvnF,UAAW,iBACXumF,MAAON,IAET,CACEjmF,UAAW,SACXumF,MAAO,KACPp3H,IAAK,KACL23H,cAAc,EACdiE,YAAY,EACZ7kH,SAAUuwH,IAGd/P,QAAS,QAEX,CAAEH,MAAO,WAEXG,QAAS,SAEb,IT9ZAsH,GAAK4F,iBAAiB,sBUo+BtBqmD,GAzYA,SAAiBjsD,GACf,MAAMksD,EAAa,CACjBvgM,KAAM,CACJ,UACA,OACA,OACA,UAEFk8I,SAAU,CACR,qBACA,kBACA,iBACA,iBACA,iBACA,gBACA,eACA,eACA,cACA,aACA,aACA,aACA,aACA,aACA,aACA,YACA,YACA,YACA,YACA,YACA,YACA,WACA,WACA,WACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,QACA,QACA,QACA,OACA,OACA,OACA,OACA,OACA,MACA,MACA,MACA,MAEFskD,OAAQ,CACN,QACA,OACA,gCACA,wBACA,wBACA,uBACA,uBACA,sBACA,sBACA,qBACA,qBACA,qBACA,qBACA,qBACA,oBACA,oBACA,oBACA,oBACA,oBACA,oBACA,oBACA,oBACA,oBACA,oBACA,mBACA,mBACA,mBACA,mBACA,kBACA,kBACA,kBACA,kBACA,kBACA,kBACA,kBACA,kBACA,kBACA,kBACA,kBACA,iBACA,iBACA,iBACA,iBACA,gBACA,gBACA,gBACA,gBACA,gBACA,gBACA,eACA,eACA,eACA,eACA,eACA,eACA,eACA,eACA,eACA,eACA,eACA,eACA,eACA,eACA,eACA,eACA,eACA,eACA,eACA,eACA,eACA,eACA,eACA,cACA,cACA,cACA,cACA,cACA,cACA,cACA,cACA,cACA,cACA,cACA,cACA,cACA,cACA,cACA,cACA,cACA,cACA,cACA,aACA,aACA,aACA,aACA,aACA,aACA,aACA,aACA,aACA,aACA,aACA,aACA,aACA,aACA,aACA,aACA,aACA,aACA,aACA,aACA,aACA,aACA,aACA,aACA,aACA,aACA,aACA,aACA,aACA,aACA,aACA,aACA,aACA,YACA,YACA,YACA,YACA,YACA,YACA,YACA,YACA,YACA,YACA,YACA,YACA,YACA,YACA,YACA,YACA,YACA,YACA,YACA,YACA,YACA,YACA,YACA,YACA,YACA,YACA,YACA,YACA,YACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,OAEFvkD,QAAS,CACP,kBACA,iBACA,iBACA,iBACA,gBACA,eACA,eACA,eACA,eACA,cACA,cACA,cACA,WACA,WACA,UACA,SACA,QACA,OACA,QAIEwkD,EA/8BR,SAAmBpsD,GACjB,MAAMjI,EAAQiI,EAAKjI,MAIbiB,EAAsBgH,EAAKpH,QAAQ,KAAM,IAAK,CAAE1gH,SAAU,CAAE,CAAEqgH,MAAO,WACrEyU,EAAmB,qBACnBC,EAAe,kBAEfC,EAAmB,cACrBF,EAAmB,IACnBjV,EAAMT,SAAS2V,GACf,gBAAkBlV,EAAMT,SAJC,YAK3B,IAEI6V,EAAsB,CAC1Bn7F,UAAW,OACXumF,MAAO,sBAMH8T,EAAU,CACdr6F,UAAW,SACXmtF,SAAU,CACR,CACE5G,MAAO,cACPp3H,IAAK,IACLu3H,QAAS,MACTxgH,SAAU,CAAE8nH,EAAK1H,mBAEnB,CACEC,MAAO,sEACPp3H,IAAK,IACLu3H,QAAS,KAEXsH,EAAKrG,kBAAkB,CACrBpB,MAAO,mCACPp3H,IAAK,0BAKLisI,EAAU,CACdp7F,UAAW,SACXmtF,SAAU,CAER,CAAE5G,MACA,gVAoBF,CAAEA,MACA,gKAgBJC,UAAW,GAGP6U,EAAe,CACnBr7F,UAAW,OACXumF,MAAO,eACPp3H,IAAK,IACLs5H,SAAU,CAAEiB,QACR,0FAEJxjH,SAAU,CACR,CACEqgH,MAAO,OACPC,UAAW,GAEbwH,EAAKH,QAAQwM,EAAS,CAAEr6F,UAAW,WACnC,CACEA,UAAW,SACXumF,MAAO,SAETS,EACAgH,EAAK/G,uBAIHM,EAAa,CACjBvnF,UAAW,QACXumF,MAAOR,EAAMT,SAAS2V,GAAgBjN,EAAK/H,SAC3CO,UAAW,GAGP8U,EAAiBvV,EAAMT,SAAS2V,GAAgBjN,EAAK/H,SAAW,UA+RhEsV,EAAe,CACnB5hJ,KAlMqB,CACrB,OACA,OACA,WACA,WACA,UACA,SACA,QACA,MACA,OACA,QACA,OACA,UACA,WACA,SACA,QACA,UAmLA+vI,QA9RwB,CACxB,UACA,UACA,MACA,SACA,MACA,gBACA,gBACA,kBACA,OACA,SACA,QACA,QACA,OACA,QACA,QACA,WACA,YACA,WACA,QACA,UACA,gBACA,YACA,YACA,YACA,WACA,WACA,UACA,SACA,KACA,kBACA,OACA,OACA,WACA,SACA,SACA,QACA,QACA,MACA,SACA,OACA,KACA,SACA,SACA,SACA,UACA,YACA,MACA,WACA,MACA,SACA,UACA,WACA,KACA,QACA,WACA,UACA,YACA,SACA,WACA,WACA,sBACA,WACA,SACA,SACA,gBACA,iBACA,SACA,SACA,eACA,WACA,OACA,eACA,QACA,mBACA,2BACA,OACA,MACA,UACA,SACA,WACA,QACA,QACA,UACA,WACA,QACA,MACA,UAwMAkM,QAde,CACf,OACA,QACA,UACA,UACA,QAUAC,SANe,CAAE,WAOjB2F,YAnLiB,CACjB,MACA,WACA,UACA,mBACA,SACA,UACA,qBACA,yBACA,qBACA,QACA,aACA,WACA,WACA,SACA,YACA,mBACA,gBACA,UACA,QACA,aACA,WACA,WACA,QACA,WACA,gBACA,gBACA,OACA,UACA,iBACA,QACA,kBACA,wBACA,cACA,MACA,gBACA,cACA,eACA,qBACA,aACA,QACA,cACA,eACA,cACA,SACA,YACA,QACA,cACA,aACA,gBACA,qBACA,qBACA,gBACA,UACA,SACA,WACA,UACA,iBA6HIvB,EAAoB,CACxBj6F,UAAW,oBACXwmF,UAAW,EACXiC,SAAU,CAERgT,MA/HmB,CACrB,QACA,MACA,OACA,QACA,WACA,OACA,OACA,QACA,SACA,OACA,OACA,MACA,OACA,MACA,OACA,OACA,UACA,OACA,WACA,OACA,MACA,OACA,QACA,OACA,UACA,UACA,QACA,OACA,QACA,SACA,SACA,SACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,WACA,OACA,UACA,QACA,MACA,QACA,YACA,cACA,4BACA,aACA,cACA,SACA,SACA,SACA,SACA,SACA,OACA,OACA,MACA,SACA,UACA,OACA,UACA,QACA,MACA,OACA,WACA,UACA,OACA,SACA,MACA,SACA,QACA,SACA,SACA,SACA,SACA,SACA,UACA,SACA,UACA,UACA,UACA,UACA,UACA,SACA,SACA,OACA,MACA,OACA,YACA,gBACA,UACA,UACA,WACA,QACA,UACA,aA4BAlV,MAAOR,EAAMxtG,OACX,KACA,eACA,SACA,UACA,aACA,YACAy1G,EAAK/H,SACLF,EAAMX,UAAU,sBAGdsW,EAAsB,CAC1BzB,EACAoB,EACAF,EACAnU,EACAgH,EAAK/G,qBACLmU,EACAf,GAGIsB,EAAqB,CAIzBxO,SAAU,CACR,CACE5G,MAAO,IACPp3H,IAAK,KAEP,CACEo3H,MAAO,KACPp3H,IAAK,MAEP,CACEo5H,cAAe,wBACfp5H,IAAK,MAGTs5H,SAAU8S,EACVr1H,SAAUw1H,EAAoBnjH,OAAO,CACnC,CACEguG,MAAO,KACPp3H,IAAK,KACLs5H,SAAU8S,EACVr1H,SAAUw1H,EAAoBnjH,OAAO,CAAE,SACvCiuG,UAAW,KAGfA,UAAW,GAGPoV,EAAuB,CAC3B57F,UAAW,WACXumF,MAAO,IAAM2U,EAAmB,eAAiBI,EACjDzQ,aAAa,EACb17H,IAAK,QACL47H,YAAY,EACZtC,SAAU8S,EACV7U,QAAS,iBACTxgH,SAAU,CACR,CACEqgH,MAAOyU,EACPvS,SAAU8S,EACV/U,UAAW,GAEb,CACED,MAAO+U,EACPzQ,aAAa,EACb3kH,SAAU,CAAEqhH,GACZf,UAAW,GAIb,CACED,MAAO,KACPC,UAAW,GAGb,CACED,MAAO,IACPwG,gBAAgB,EAChB7mH,SAAU,CACRm0H,EACAe,IAKJ,C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,MAAO,cACPp3H,IAAK,cACL+W,SAAU,CACR,CACEqgH,MAAO,IACPp3H,IAAK,IACL8gI,YAAa,MACbzJ,UAAW,IAGfA,UAAW,IApFG,CAClBxmF,UAAW,SACXumF,MAAO,kCAPU,CACjBvmF,UAAW,SACXumF,MAAO,6CACPC,UAAW,IAzFX,CAAED,MAAO,WAIT,CAAEA,MAAO,yBACT,CAAEA,MAAO,sBACT,CAAEA,MAAO,sBAGT,CAAEA,MAAO,0BA4KJm0D,KACAC,EAGH,CACE36I,UAAW,SACXmtF,SAAU,CACR,CAAE5G,MAAO,WACT,CAAEA,MAAO,WAIb,CACEvmF,UAAW,OACXumF,MAAO,OACPp3H,IAAK,gBAGP,CACE6wC,UAAW,OACXumF,MAAO,oBACPC,UAAW,GAGb,CACExmF,UAAW,OACXumF,MAAO,UACPp3H,IAAK,IACLq3H,UAAW,GAvNO,CACtBD,MAAO,iBACPC,UAAW,IAyNT,CACED,MAAO,8DACPsE,aAAa,EACb3kH,SAAU,CACR,CACEqgH,MAAO,kBACPC,UAAW,GAEb,CACExmF,UAAW,OACXumF,MAAO,MACPp3H,IAAK,UACLq3H,UAAW,GAEb,CACExmF,UAAW,SACXumF,MAAO,MACPp3H,IAAK,MACL23H,cAAc,EACdiE,YAAY,EACZvE,UAAW,IAGfA,UAAW,KAInB,IbnPAwH,GAAK4F,iBAAiB,sBcuNtBgnD,GA5NA,SAAiB5sD,GACf,MAAMjI,EAAQiI,EAAKjI,MACb4O,EAAW,CACf,QACA,eACA,MACA,WACA,QACA,UACA,OACA,UACA,SACA,OACA,KACA,QACA,MACA,OACA,QACA,OACA,QACA,WACA,UACA,YACA,SACA,SACA,QACA,SACA,OACA,OACA,OACA,UACA,aACA,QACA,YACA,MACA,QACA,aACA,OACA,QACA,WACA,OACA,SACA,QACA,UACA,UACA,SACA,SACA,MACA,OACA,SACA,WACA,SACA,aACA,WACA,kBACA,UACA,aACA,QACA,iBACA,oBACA,uBACA,aACA,SACA,SACA,YACA,oBACA,UACA,gBACA,0BACA,mCACA,UACA,UACA,UACA,QACA,OAC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IAEfwH,EAAK5G,cACL4G,EAAK3G,mBACL,CACErnF,UAAW,SACXumF,MAAO,iCAETyH,EAAKrH,kBACL,CACE3mF,UAAW,SACXumF,MAAO,IACPp3H,IAAK,WACLu3H,QAAS,eAEX,CACE1mF,UAAW,SACXumF,MAAO,qBAET,CACEvmF,UAAW,OACXumF,MAAO,IACPp3H,IAAK,KAEP,CACE6wC,UAAW,QACXumF,MAAO,YAIf,IjBxDAyH,GAAK4F,iBAAiB,kBkBgDtBunD,GA1DA,SAAantD,GA6CX,MAAO,CACLj5I,KAAM,MACN0zI,SAAU,CAAEiB,QAvCG,+FAwCfxjH,SAAU,CA/CK,CACf85B,UAAW,WACXmtF,SAAU,CACR,CAAE5G,MAAO,sBACT,CAAEA,MAAO,iBAIE,CACbvmF,UAAW,SACX95B,SAAU,CAAE8nH,EAAK1H,kBACjB6G,SAAU,CACR,CACE5G,MAAO,cACPp3H,IAAK,MACLq3H,UAAW,IAEb,CACED,MAAO,cACPp3H,IAAK,MACLq3H,UAAW,IAEb,CACED,MAAO,YACPp3H,IAAK,IACLq3H,UAAW,IAEb,CACED,MAAO,YACPp3H,IAAK,IACLq3H,UAAW,IAEb,CACED,MAAO,UACPp3H,IAAK,KAEP,CACEo3H,MAAO,UACPp3H,IAAK,KAEP6+H,EAAKvH,iBACLuH,EAAKrH,oBASLqH,EAAK1G,YACL0G,EAAK9G,kBACL8G,EAAK7G,aAGX,IlB7CA6G,GAAK4F,iBAAiB,qBmBuKtBwnD,GAlLA,SAAgBptD,GACd,MAAM/H,EAAW+H,EAAK9H,oBAmIhByO,EAAW,CACfjL,QAxGsB,CACtB,WACA,KACA,MACA,MACA,QACA,aACA,KACA,QACA,OACA,QACA,gBACA,QACA,SACA,SACA,SACA,QACA,WACA,QACA,eACA,WACA,cACA,OACA,UACA,MACA,KACA,OACA,OACA,eACA,SACA,UACA,QACA,UACA,YACA,YACA,aACA,cACA,eACA,gBACA,QACA,MACA,gBACA,kBACA,oBACA,mBACA,YACA,OACA,eACA,QACA,OACA,KACA,aACA,KACA,QACA,mBACA,YACA,WACA,KACA,OACA,OACA,QACA,QACA,MACA,YACA,MACA,OACA,UACA,YACA,iBACA,QACA,QACA,kBACA,QACA,UACA,YACA,SACA,WACA,iBACA,QACA,SACA,UACA,SACA,SACA,UACA,SACA,MACA,QACA,SACA,OACA,QACA,MACA,WACA,WACA,YACA,YACA,mBACA,QACA,iBACA,OACA,QACA,SAKAmM,SApIwB,CACxB,UACA,UACA,OACA,OACA,YACA,OACA,SACA,OACA,OACA,MACA,QACA,OACA,OACA,QACA,MACA,cACA,OAoHAD,QAjHuB,CACvB,UACA,QACA,OACA,SAgHIylD,EAAmB,CACvBluD,SAAU,CACR,CAAEzqI,MAAO,CACP,uBACAujI,EACA,6BACAA,IAEF,CAAEvjI,MAAO,CACP,WACAujI,KAGJp/G,MAAO,CACL,EAAG,cACH,EAAG,yBAEL4hH,SAAUkM,GAGZ,MAAO,CACL5/I,KAAM,MACN8lG,QAAS,CAAE,OACX4tC,SAAUkM,EACVzuH,SAAU,CACR8nH,EAAKhH,oBACLgH,EAAK/G,qBACL+G,EAAKvH,iBACLuH,EAAKrH,kBACLqH,EAAK5G,cACL,CACEpnF,UAAW,OACXumF,MAAO,IACPp3H,IAAK,KAEPksL,GAGN,InBpKArtD,GAAK4F,iBAAiB,mBoBmYtB0nD,GA/YA,SAActtD,GACZ,MAAMjI,EAAQiI,EAAKjI,MACb+V,EAAM,CAAA,EACNC,EAAa,CACjBxV,MAAO,OACPp3H,IAAK,KACL+W,SAAU,CACR,OACA,CACEqgH,MAAO,KACPrgH,SAAU,CAAE41H,MAIlBjmJ,OAAO69C,OAAOooG,EAAK,CACjB97F,UAAW,WACXmtF,SAAU,CACR,CAAE5G,MAAOR,EAAMxtG,OAAO,qBAGpB,wBACFwjH,KAIJ,MAAM7F,EAAQ,CACZl2F,UAAW,QACXumF,MAAO,OACPp3H,IAAK,KACL+W,SAAU,CAAE8nH,EAAK1H,mBAEbM,EAAUoH,EAAKH,QACnBG,EAAKpH,UACL,CACElkI,MAAO,CACL,SACA,QAEFmkB,MAAO,CACL,EAAG,aAIHm1H,EAAW,CACfzV,MAAO,iBACPwC,OAAQ,CAAE7iH,SAAU,CAClB8nH,EAAKrG,kBAAkB,CACrBpB,MAAO,QACPp3H,IAAK,QACL6wC,UAAW,cAIXi8F,EAAe,CACnBj8F,UAAW,SACXumF,MAAO,IACPp3H,IAAK,IACL+W,SAAU,CACR8nH,EAAK1H,iBACLwV,EACA5F,IAGJA,EAAMhwH,SAASlmB,KAAKi8I,GACpB,MAWMC,EAAa,CACjB3V,MAAO,UACPp3H,IAAK,OACL+W,SAAU,CACR,CACEqgH,MAAO,gBACPvmF,UAAW,UAEbguF,EAAK7G,YACL2U,IAcEK,EAAgBnO,EAAK/F,QAAQ,CACjCE,OAAQ,IAZa,CACrB,OACA,OACA,MACA,KACA,MACA,MACA,OACA,OACA,QAG2B5kH,KAAK,QAChCijH,UAAW,KAEP4V,EAAW,CACfp8F,UAAW,WACXumF,MAAO,4BACPsE,aAAa,EACb3kH,SAAU,CAAE8nH,EAAKH,QAAQG,EAAKzG,WAAY,CAAEhB,MAAO,gBACnDC,UAAW,GA+Pb,MAAO,CACLzxI,KAAM,OACN8lG,QAAS,CACP,KACA,OAEF4tC,SAAU,CACRmE,SAAU,wBACVlD,QApQa,CACf,KACA,OACA,OACA,OACA,KACA,OACA,MACA,QACA,QACA,KACA,KACA,OACA,OACA,OACA,SACA,WACA,UAoPEkM,QAjPa,CACf,OACA,SAgPEC,SAAU,CAxOZ,QACA,KACA,WACA,OACA,OACA,OACA,SACA,UACA,OACA,MACA,WACA,SACA,QACA,OACA,QACA,OACA,QACA,QAIA,QACA,OACA,UACA,SACA,UACA,UACA,OACA,SACA,OACA,MACA,QACA,SACA,UACA,SACA,OACA,YACA,SACA,OACA,OACA,UACA,SACA,UAkMI,MACA,QA/LJ,WACA,KACA,UACA,MACA,MACA,QACA,QACA,gBACA,WACA,UACA,eACA,YACA,aACA,YACA,WACA,UACA,aACA,OACA,UACA,SACA,SACA,SACA,UACA,KACA,KACA,QACA,YACA,SACA,QACA,UACA,UACA,OACA,OACA,QACA,MACA,SACA,OACA,QACA,QACA,SACA,SACA,QACA,SACA,SACA,OACA,UACA,SACA,aACA,SACA,UACA,WACA,QACA,OACA,SACA,QACA,QACA,WACA,UACA,OACA,MACA,WACA,aACA,QACA,OACA,cACA,UACA,SACA,OAIA,QACA,QACA,QACA,QACA,KACA,KACA,KACA,MACA,YACA,KACA,KACA,QACA,SACA,QACA,SACA,KACA,WACA,KACA,QACA,QACA,OACA,QACA,WACA,OACA,QACA,SACA,SACA,MACA,QACA,OACA,SACA,MACA,SACA,MACA,OACA,OACA,OACA,SACA,KACA,SACA,KACA,QACA,MACA,KACA,UACA,YACA,YACA,YACA,YACA,OACA,OACA,QACA,MACA,MACA,OACA,KACA,QACA,WACA,OACA,KACA,OACA,WACA,SACA,OACA,UACA,KACA,OACA,MACA,OACA,SAEA,SACA,SACA,KACA,OACA,UACA,OACA,QACA,QACA,UACA,QACA,WACA,SACA,MACA,WACA,SACA,MACA,QACA,OACA,SACA,OACA,MACA,OACA,UAEA,MACA,QACA,SACA,SACA,QACA,MACA,SACA,QAuBA3vH,SAAU,CACRi2H,EACAnO,EAAK/F,UACLmU,EACAF,EACAtV,EACAoV,EA5Pc,CAAEt5I,MAAO,kBA8PvBu5I,EAtUkB,CACpBv5I,MAAO,OAEW,CAClBs9C,UAAW,SACXumF,MAAO,IACPp3H,IAAK,KAEc,CACnBzM,MAAO,OAiULo5I,GAGN,IpBhYA9N,GAAK4F,iBAAiB,oBqBqNtB2nD,GAlOA,SAAevtD,GAqLb,MAAO,CACLj5I,KAAM,QACNs2I,kBAAkB,EAClB3E,QAAS,KAET+B,SAAU,CACRmE,SAAU,4BACVlD,QA3La,CACf,MACA,MACA,MACA,MACA,SACA,OACA,WACA,WACA,OACA,QACA,OACA,QACA,QACA,UACA,OACA,SACA,QACA,QACA,MACA,QACA,MACA,SACA,OACA,MACA,OACA,SACA,MACA,MACA,MACA,OACA,QACA,SACA,SACA,SACA,SACA,QACA,MACA,MACA,SACA,MACA,OACA,OACA,MACA,UACA,WACA,MACA,MACA,QACA,QACA,SACA,MACA,MACA,QACA,MACA,QACA,QACA,MACA,QACA,MACA,MACA,WACA,OACA,OACA,KACA,OACA,SACA,SACA,MACA,QACA,SACA,SACA,QACA,MACA,MACA,QACA,SACA,MACA,KACA,MACA,OACA,OACA,QACA,MACA,MACA,OACA,QACA,OACA,MACA,SACA,MACA,MACA,SACA,QACA,OACA,QACA,OACA,QACA,OACA,OACA,OACA,MACA,OACA,MACA,OACA,QACA,MACA,OACA,KACA,KACA,MACA,OACA,QACA,OACA,SACA,OACA,MACA,QACA,UACA,QACA,OACA,OACA,QACA,OACA,MACA,QACA,SACA,OACA,SACA,MACA,YACA,OACA,MACA,QACA,UACA,UACA,SACA,WACA,SACA,QACA,MACA,OACA,MACA,OACA,SACA,MACA,QACA,MACA,QACA,SACA,MACA,MACA,OACA,QACA,OACA,OACA,UACA,OACA,SACA,MACA,MACA,QACA,QACA,QACA,OACA,KACA,MACA,MACA,SACA,UACA,OACA,OACA,QACA,OACA,QACA,SACA,QACA,QAYAxjH,SAAU,CACR,CAEEW,MAAO,SACP0/G,MAAO,IACPp3H,IAAK,MACL+W,SAAU,CAAE8nH,EAAK1H,mBAEnB0H,EAAKpH,QAAQ,MAAO,IAAK,CAAEJ,UAAW,KACtCwH,EAAKpH,QAAQ,IAAM,IAAK,CAAEJ,UAAW,IACrC,CAEExmF,UAAW,SACXumF,MAAO,WACPC,UAAW,IAEb,CAEExmF,UAAW,SACXumF,MAAO,sCACPC,UAAW,GAEb,CAEExmF,UAAW,SACXumF,MAAO,2BAET,CAEEvmF,UAAW,SACXumF,MAAO,sBAIf,IrBlNAyH,GAAK4F,iBAAiB,kBsBetB4nD,GA9BA,SAAaxtD,GACX,MAAO,CACLj5I,KAAM,mBACNmxB,SAAU,CAER,CACE85B,UAAW,YACXumF,MAAO,IACPp3H,IAAK,KAGP,CACEo3H,MAAO,MACPp3H,IAAK,IACL+W,SAAU,CACR,CACEqgH,MAAO,IACPp3H,IAAK,KAGP6+H,EAAKhH,oBACLgH,EAAK/G,qBACL+G,EAAKvH,iBACLuH,EAAKrH,qBAKf,ItBZAqH,GAAK4F,iBAAiB,wBuB6BtB6nD,GA9CA,SAAmBztD,GACjB,MAAMoqD,EAAU,CACdp4I,UAAW,UACXumF,MAAO,QACPC,UAAW,GAEb,MAAO,CACLzxI,KAAM,YACN8lG,QAAS,CAAE,MACX30E,SAAU,CACR8nH,EAAKpH,QACH,wBACA,uBACA,CACE1gH,SAAU,CACR,CACExjB,MAAO,4BACP8jI,UAAW,IAGfwE,WAAW,EACXxE,UAAW,IAGf,CACExmF,UAAW,QACXumF,MAAO,WACPC,UAAW,GAEb,CACExmF,UAAW,SACXumF,MAAO,SACPC,UAAW,GAEb,CAIED,MAAO,cACPrgH,SAAU,CAAEkyK,IAEdA,GAGN,IvB1BApqD,GAAK4F,iBAAiB,gBwBmTtB8nD,GArUA,SAAW1tD,GACT,MAAMjI,EAAQiI,EAAKjI,MAIbiB,EAAsBgH,EAAKpH,QAAQ,KAAM,IAAK,CAAE1gH,SAAU,CAAE,CAAEqgH,MAAO,WACrEyU,EAAmB,qBACnBC,EAAe,kBAEfC,EAAmB,IACrBF,EAAmB,IACnBjV,EAAMT,SAAS2V,GACf,gBAAkBlV,EAAMT,SAJC,YAK3B,IAGIuP,EAAQ,CACZ70F,UAAW,OACXmtF,SAAU,CACR,CAAE5G,MAAO,sBACT,CAAE7jI,MAAO,2BAQP23I,EAAU,CACdr6F,UAAW,SACXmtF,SAAU,CACR,CACE5G,MAAO,cACPp3H,IAAK,IACLu3H,QAAS,MACTxgH,SAAU,CAAE8nH,EAAK1H,mBAEnB,CACEC,MAAO,sEACPp3H,IAAK,IACLu3H,QAAS,KAEXsH,EAAKrG,kBAAkB,CACrBpB,MAAO,mCACPp3H,IAAK,0BAKLisI,EAAU,CACdp7F,UAAW,SACXmtF,SAAU,CACR,CAAEzqI,MAAO,gBACT,CAAEA,MAAO,mFACT,CAAEA,MAAO,oHACT,CAAEA,MAAO,2DAEX8jI,UAAW,GAGP6U,EAAe,CACnBr7F,UAAW,OACXumF,MAAO,eACPp3H,IAAK,IACLs5H,SAAU,CAAEiB,QACR,2GAEJxjH,SAAU,CACR,CACEqgH,MAAO,OACPC,UAAW,GAEbwH,EAAKH,QAAQwM,EAAS,CAAEr6F,UAAW,WACnC,CACEA,UAAW,SACXumF,MAAO,SAETS,EACAgH,EAAK/G,uBAIHM,EAAa,CACjBvnF,UAAW,QACXumF,MAAOR,EAAMT,SAAS2V,GAAgBjN,EAAK/H,SAC3CO,UAAW,GAGP8U,EAAiBvV,EAAMT,SAAS2V,GAAgBjN,EAAK/H,SAAW,UAoFhE0O,EAAW,CACfjL,QAnFiB,CACjB,MACA,OACA,QACA,OACA,WACA,UACA,KACA,OACA,OACA,SACA,MACA,UACA,OACA,KACA,SACA,WACA,WACA,SACA,SACA,SACA,gBACA,SACA,SACA,UACA,QACA,WACA,QACA,WACA,WACA,UACA,WACA,YACA,iBACA,gBAEA,UACA,UACA,WACA,gBACA,eAEA,WA0CA/vI,KAvCc,CACd,QACA,SACA,SACA,WACA,MACA,QACA,OACA,OACA,OACA,QACA,UACA,WACA,aACA,aACA,aACA,aACA,cACA,cACA,eACA,WACA,WACA,WACA,YACA,YACA,YACA,aAEA,QACA,SACA,YAEA,UACA,OACA,aAMAi8I,QAAS,kBAETC,SAAU,ozBAWN6F,EAAsB,CAC1BL,EACAxG,EACA7N,EACAgH,EAAK/G,qBACLmU,EACAf,GAGIsB,EAAqB,CAIzBxO,SAAU,CACR,CACE5G,MAAO,IACPp3H,IAAK,KAEP,CACEo3H,MAAO,KACPp3H,IAAK,MAEP,CACEo5H,cAAe,wBACfp5H,IAAK,MAGTs5H,SAAUkM,EACVzuH,SAAUw1H,EAAoBnjH,OAAO,CACnC,CACEguG,MAAO,KACPp3H,IAAK,KACLs5H,SAAUkM,EACVzuH,SAAUw1H,EAAoBnjH,OAAO,CAAE,SACvCiuG,UAAW,KAGfA,UAAW,GAGPoV,EAAuB,CAC3BrV,MAAO,IAAM2U,EAAmB,eAAiBI,EACjDzQ,aAAa,EACb17H,IAAK,QACL47H,YAAY,EACZtC,SAAUkM,EACVjO,QAAS,iBACTxgH,SAAU,CACR,CACEqgH,MAAOyU,EACPvS,SAAUkM,EACVnO,UAAW,GAEb,CACED,MAAO+U,EACPzQ,aAAa,EACb3kH,SAAU,CAAE8nH,EAAKH,QAAQtG,EAAY,CAAEvnF,UAAW,oBAClDwmF,UAAW,GAIb,CACEA,UAAW,EACX9jI,MAAO,KAET,CACEs9C,UAAW,SACXumF,MAAO,KACPp3H,IAAK,KACLs5H,SAAUkM,EACVnO,UAAW,EACXtgH,SAAU,CACR8gH,EACAgH,EAAK/G,qBACLoT,EACAe,EACAvG,EAEA,CACEtO,MAAO,KACPp3H,IAAK,KACLs5H,SAAUkM,EACVnO,UAAW,EACXtgH,SAAU,CACR,OACA8gH,EACAgH,EAAK/G,qBACLoT,EACAe,EACAvG,MAKRA,EACA7N,EACAgH,EAAK/G,qBACLoU,IAIJ,MAAO,CACLtmJ,KAAM,IACN8lG,QAAS,CAAE,KACX4tC,SAAUkM,EAGVrG,mBAAmB,EACnB5H,QAAS,KACTxgH,SAAU,GAAGqS,OACXojH,EACAC,EACAF,EACA,CACEL,EACA,CACE9U,MAAOyH,EAAK/H,SAAW,KACvBwC,SAAUkM,GAEZ,CACE30F,UAAW,QACXuoF,cAAe,0BACfp5H,IAAK,WACL+W,SAAU,CACR,CAAEqiH,cAAe,sBACjByF,EAAKzG,eAIbhpI,QAAS,CACPo9L,aAActgD,EACdugD,QAASvhD,EACT5R,SAAUkM,GAGhB,IxBhTA3G,GAAK4F,iBAAiB,kByBqItBioD,GAtJA,SAAa7tD,GACX,MAAMjI,EAAQiI,EAAKjI,MACb4O,EAAW,CACf,MACA,MACA,KACA,MACA,KACA,MACA,MACA,cACA,QACA,OACA,KACA,SACA,OACA,MACA,OACA,MACA,QACA,KACA,KACA,SACA,OACA,KACA,QACA,QACA,OACA,OAGImnD,EAAgB,CACpB9tD,EAAKhH,oBACLgH,EAAKpH,QACH,KACA,KACA,CAAEJ,UAAW,IAEfwH,EAAKpH,QACH,OACA,OACA,CAAEJ,UAAW,MAGXuR,EAAS,CACb/3F,UAAW,SACXumF,MAAO,IACPp3H,IAAK,IACL+W,SAAU,CAAE,CAAEqgH,MAAO,QAEjBw1D,EAAc,CAClB/7I,UAAW,SACXumF,MAAO,WAaHy1D,EAAY,CAChBt5L,MAAO,CACL,YACA,MACA,kBACA,OAEFmkB,MAAO,CACL,EAAG,UACH,EAAG,kBAELX,SAAU,CACR,CACE85B,UAAW,SACXumF,MAAO,KACPp3H,IAAK,KACLs5H,SAAUkM,EACVzuH,SAAU,CACR6xH,EACAgkD,EACA/tD,EAAK7G,iBAGN20D,IAeDn/C,EAAS,CACbj6I,MAAO,CACL,SACA,MACAqjI,EAAMR,OAdR,QACA,OACA,SACA,WACA,WACA,UACA,YACA,OACA,SAOE,MACA,MACA,eACA,KACA,KAEFiB,UAAW,EACX3/G,MAAO,CACL,EAAG,UACH,EAAG,OACH,EAAG,SACH,EAAG,UAUP,MAAO,CACL9xB,KAAM,OACNs2I,kBAAkB,EAClB5C,SAAU,CACRiB,QAASiL,EACTiB,QAxGa,cA0GflP,QAAS,OACTxgH,SAAU,CAdK,CACfxjB,MAAO,cACPmkB,MAAO,YACP2/G,UAAW,GAaTuR,EACAgkD,EAtFS,CACX/7I,UAAW,SACXumF,MAAO,4BACPC,UAAW,GAEe,CAC1BxmF,UAAW,SACXumF,MAAO,IACPp3H,IAAK,KAiFH6+H,EAAK7G,YACLwV,EACAq/C,GAGN,IzBlIAhuD,GAAK4F,iBAAiB,wB0BuEtBqoD,GAzFA,SAAmBjuD,GACjB,MA2CMqtD,EAAmB,CACvBluD,SAAU,CACR,CAAEzqI,MAAO,CACP,0BACA,MACAsrI,EAAK/H,WAEP,CAAEvjI,MAAO,CACP,UACA,QACAsrI,EAAK/H,SACL,WAGJp/G,MAAO,CACL,EAAG,UACH,EAAG,gBAGP,MAAO,CACL9xB,KAAM,cACN8lG,QAAS,CAAE,SACX4tC,SAAU,CACRiB,QAlEa,CACf,SACA,OACA,YACA,QACA,QACA,SACA,QACA,QACA,aACA,UACA,KACA,KACA,KACA,KACA,OACA,OACA,SAkDE/vI,KAhDU,CACZ,OACA,OACA,OACA,QACA,QACA,QACA,QACA,SACA,SACA,SACA,UACA,UACA,OACA,OACA,aACA,YACA,aACA,QA+BEi8I,QA7Ba,CACf,OACA,UA6BA1vH,SAAU,CACR8nH,EAAKrH,kBACLqH,EAAK7G,YACL6G,EAAK9G,kBACL,CACElnF,UAAW,OACXumF,MAAO,iBACPG,QAAS,MAEX,CACE1mF,UAAW,SACXumF,MAAO,UAET80D,GAGN,I1BpEArtD,GAAK4F,iBAAiB,qB2B+GtBsoD,GAnIA,SAAgBluD,GAEd,MAAM2G,EAAW,CACf,WACA,SACA,UACA,SACA,QACA,QACA,YACA,SACA,QACA,QACA,SACA,OACA,WACA,MACA,KACA,UACA,YACA,YACA,KACA,MACA,SACA,QACA,WACA,QACA,SACA,UACA,KACA,OACA,SACA,OACA,MACA,QACA,MACA,QACA,UACA,OACA,MACA,OACA,QACA,QACA,KACA,SACA,YA4BIuB,EAAQ,CACZl2F,UAAW,QACX8mF,cAAc,EACdiE,YAAY,EACZxE,MAAO,KACPp3H,IAAK,KACLs5H,SAAUkM,EACVnO,UAAW,IAEPrO,EAAc,CAClB,CAEEn4E,UAAW,SACXumF,MAAO,MACPp3H,IAAK,MACLq3H,UAAW,IAEb,CAEExmF,UAAW,SACXumF,MAAO,IACPp3H,IAAK,IACL+W,SAAU,CAAEgwH,IAEd,CAEEl2F,UAAW,SACXumF,MAAO,IACPp3H,IAAK,KAEP,CAEE6wC,UAAW,SACXumF,MAAO,gFACPC,UAAW,IAKf,OAFA0P,EAAMhwH,SAAWiyG,EAEV,CACLpjI,KAAM,SACN0zI,SAAU,CACRiB,QAASiL,EAASp8G,OAnEQ,CAC5B,SACA,WACA,SACA,UACA,SACA,WACA,OACA,SACA,aACA,QACA,SACA,aACA,mBACA,UAsDEksI,KAnDkB,CACpB,MACA,KACA,UACA,MACA,SACA,WA+CA/9B,QAAS,yBACTxgH,SAAU,CACR8nH,EAAKhH,oBACLgH,EAAKpH,QAAQ,OAAQ,OAAQ,CAAE1gH,SAAU,CAAE,UAC3C,CAEE85B,UAAW,OACXumF,MAAO,4BAEThuG,OAAO4/F,GAEb,I3B5GA6V,GAAK4F,iBAAiB,oB4BqCtBuoD,GA1DA,SAAenuD,GAiCb,MAAO,CACLj5I,KAAM,QACN8lG,QAAS,CACP,MACA,OAEF4tC,SAAU,CACRiB,QAvCa,CACf,KACA,MACA,KACA,OACA,QACA,OACA,KACA,QACA,WACA,YACA,iBACA,aACA,SACA,SACA,OACA,SACA,YACA,KACA,UACA,OACA,SACA,UACA,SACA,QACA,UACA,UACA,SACA,QACA,SACA,UAUEmM,SACE,qBACFD,QACE,cAEJ1vH,SAAU,CACR8nH,EAAKhH,oBACLgH,EAAK/G,qBACL+G,EAAKvH,iBACLuH,EAAKrH,kBACLqH,EAAK5G,cACL,CACEb,MAAO,+CAGf,I5BlCAyH,GAAK4F,iBAAiB,sB6ByJtBwoD,GA9KA,SAAiBpuD,GACf,MAAMquD,EAAc,uBACdC,EAAY,QAAUD,EAAc,KAAOA,EAAc,aACzDE,EAAU,6FACV9zD,EAAW,CACfmE,SAAU0vD,EACVzmD,SAEE0mD,EAAU,6+EA8BRvC,EAAS,CACbzzD,MAAO+1D,EACP91D,UAAW,GAEPyP,EAAS,CACbpvH,MAAO,SACP2/G,UAAW,EACX2G,SAAU,CACR,CAAEzqI,MAAO,4BACT,CAAEA,MAAO,kBACT,CAAEA,MAAO,sCACT,CAAEA,MAAO,yBACT,CAAEA,MAAO,qEACT,CAAEA,MAAO,4BAGP85L,EAAY,CAChB31K,MAAO,YACPsmH,SAAU,CACR,CAAEzqI,MAAO,uBACT,CAAEA,MAAO,qBACT,CAAEA,MAAO,mDACT,CACEA,MAAO,OACP8jI,UAAW,KAIXi2D,EAAQ,CACZ51K,MAAO,QACP0/G,MAAO,KACPp3H,IAAK,IACL+W,SAAU,CAAE8nH,EAAK1H,mBAEbyR,EAAS/J,EAAKH,QAAQG,EAAKrH,kBAAmB,CAAED,QAAS,OACzDg2D,EAAQ,CACZ71K,MAAO,cACPnkB,MAAO,IACP8jI,UAAW,GAEPI,EAAUoH,EAAKpH,QACnB,IACA,IACA,CAAEJ,UAAW,IAET4xD,EAAU,CACdp4I,UAAW,UACXumF,MAAO,wBAEHo2D,EAAa,CACjBp2D,MAAO,YAAc+1D,EAAY,QACjCntL,IAAK,WACLq3H,UAAW,GAEPo2D,EAAM,CACV58I,UAAW,SACXumF,MAAO,WAAa+1D,GAEhBO,EAAO,CACXt2D,MAAO,MACPp3H,IAAK,OAED2tL,EAAO,CACX/vD,gBAAgB,EAChBvG,UAAW,GAEPu2D,EAAO,CACXt0D,WACAzoF,UAAW,OACXumF,MAAO+1D,EACP91D,UAAW,EACXuC,OAAQ+zD,GAEJE,EAAmB,CACvBN,EACAG,EACAL,EACAC,EACA1kD,EACAnR,EACAg2D,EACAD,EACA1mD,EACAmiD,EACA4B,GAGIiD,EAAS,CACb10D,cAAeg0D,EACf9zD,SAAU,CACRmE,SAAU0vD,EACV5yD,QAAS6yD,GAEXptL,IAAK,gCACL+W,SAAU,CACR,CACE85B,UAAW,QACXumF,MAAO+1D,EACP91D,UAAW,EACXuE,YAAY,EAEZ9B,YAAY,IAEd1wG,OAAOykK,IAWX,OARAH,EAAK32K,SAAW,CACd+2K,EACAF,EACAD,GAEFA,EAAK52K,SAAW82K,EAChBL,EAAWz2K,SAAW82K,EAEf,CACLjoM,KAAM,UACN8lG,QAAS,CACP,MACA,OAEF6rC,QAAS,KACTxgH,SAAU,CACRw2K,EACAG,EACAL,EACAC,EACA1kD,EACAnR,EACAg2D,EACAD,EACA1mD,EACAmiD,GAGN,I7BtJApqD,GAAK4F,iBAAiB,2B8BLtBspD,GAhBA,SAAqBlvD,GACnB,MAAO,CACLj5I,KAAM,eACNmxB,SAAU,CACR,CACE85B,UAAW,cACXumF,MAAO,sBACPwC,OAAQ,CACN55H,IAAK,IACL8gI,YAAa,aAKvB,I9BQAjC,GAAK4F,iBAAiB,oB+B+BtBupD,GAtDA,SAAenvD,GACb,MAAO,CACLj5I,KAAM,QACN8lG,QAAS,CAAE,YACXwwC,kBAAkB,EAClB5C,SAAU,CAAEiB,QAAA,woEAmCZxjH,SAAU,CACR,CACE85B,UAAW,WACXumF,MAAO,OACPp3H,IAAK,MAEP6+H,EAAKpH,QAAQ,QAAS,MACtBoH,EAAK9G,kBACL8G,EAAKrH,kBACLqH,EAAK7G,aAGX,I/B5BA6G,GAAK4F,iBAAiB,+CgCjCtB,MAAMe,EAAW,CACf,KACA,KACA,KACA,KACA,MACA,QACA,UACA,MACA,MACA,WACA,KACA,SACA,OACA,OACA,QACA,QACA,aACA,OACA,QACA,OACA,UACA,MACA,SACA,WACA,SACA,SACA,MACA,QACA,QACA,QAIA,WACA,QACA,QACA,SACA,SACA,OACA,SACA,UAEA,SAEIC,EAAW,CACf,OACA,QACA,OACA,YACA,MACA,YAyFIK,EAAY,GAAG18G,OAtBI,CACvB,cACA,aACA,gBACA,eAEA,UACA,UAEA,OACA,WACA,QACA,aACA,WACA,YACA,qBACA,YACA,qBACA,SACA,YAlFY,CAEZ,SACA,WACA,UACA,SAEA,OACA,OACA,SACA,SAEA,SACA,SAEA,QACA,eACA,eACA,YACA,aACA,oBACA,aACA,aACA,cACA,cACA,gBACA,iBAEA,MACA,MACA,UACA,UAEA,cACA,oBACA,UACA,WACA,OAEA,UACA,YACA,oBACA,gBAEA,UACA,QAEA,OAEA,eAGkB,CAClB,QACA,YACA,gBACA,aACA,iBACA,cACA,YACA,oBA4PF6kK,GAlNA,SAAsBpvD,GACpB,MAgCM2H,EAAa,CACjBjM,QAASiL,EAASp8G,OAvBI,CACtB,OACA,SACA,QACA,OACA,KACA,OACA,MACA,KACA,KACA,OACA,QAY0C1S,QAHzBqnB,EAPQ,CACzB,MACA,QACA,MACA,WACA,UAGCwrG,IAAQxrG,EAAKv2B,SAAS+hI,KAGvB9C,QAAShB,EAASr8G,OA9BI,CACtB,MACA,KACA,KACA,QA2BAs9G,SAAUZ,EAAU18G,OAnCG,CACvB,MACA,WA4BgB,IAAC2U,EAOnB,MAAMmwJ,EAAc,2BACdnnD,EAAQ,CACZl2F,UAAW,QACXumF,MAAO,MACPp3H,IAAK,KACLs5H,SAAUkN,GAENxd,EAAc,CAClB6V,EAAK3G,mBACL2G,EAAKH,QAAQG,EAAK5G,cAAe,CAAE2B,OAAQ,CACzC55H,IAAK,WACLq3H,UAAW,KAEb,CACExmF,UAAW,SACXmtF,SAAU,CACR,CACE5G,MAAO,MACPp3H,IAAK,MACL+W,SAAU,CAAE8nH,EAAK1H,mBAEnB,CACEC,MAAO,IACPp3H,IAAK,IACL+W,SAAU,CAAE8nH,EAAK1H,mBAEnB,CACEC,MAAO,MACPp3H,IAAK,MACL+W,SAAU,CACR8nH,EAAK1H,iBACL4P,IAGJ,CACE3P,MAAO,IACPp3H,IAAK,IACL+W,SAAU,CACR8nH,EAAK1H,iBACL4P,MAKR,CACEl2F,UAAW,SACXmtF,SAAU,CACR,CACE5G,MAAO,MACPp3H,IAAK,MACL+W,SAAU,CACRgwH,EACAlI,EAAK9G,oBAGT,CACEX,MAAO,sBACPC,UAAW,GAEb,CAGED,MAAO,8CAGb,CAAEA,MAAO,IAAM82D,GAEf,CACEptD,YAAa,aACbnJ,cAAc,EACdiE,YAAY,EACZoC,SAAU,CACR,CACE5G,MAAO,MACPp3H,IAAK,OAEP,CACEo3H,MAAO,IACPp3H,IAAK,QAKb+mI,EAAMhwH,SAAWiyG,EAEjB,MAAMmlE,EAAQtvD,EAAKH,QAAQG,EAAKzG,WAAY,CAAEhB,MAAO82D,IAC/CE,EAAqB,0BACrB7mD,EAAS,CACb12F,UAAW,SACXumF,MAAO,YACPsE,aAAa,EAGb3kH,SAAU,CACR,CACEqgH,MAAO,KACPp3H,IAAK,KACLs5H,SAAUkN,EACVzvH,SAAU,CAAE,QAASqS,OAAO4/F,MAK5BkjE,EAAmB,CACvBluD,SAAU,CACR,CAAEzqI,MAAO,CACP,WACA26L,EACA,gBACAA,IAEF,CAAE36L,MAAO,CACP,WACA26L,KAGJx2K,MAAO,CACL,EAAG,cACH,EAAG,yBAEL4hH,SAAUkN,GAGZ,MAAO,CACL5gJ,KAAM,eACN8lG,QAAS,CACP,SACA,OACA,QAEF4tC,SAAUkN,EACVjP,QAAS,OACTxgH,SAAU,IACLiyG,EACH6V,EAAKpH,QAAQ,MAAO,OACpBoH,EAAK9G,kBACL,CACElnF,UAAW,WACXumF,MAAO,QAAU82D,EAAc,YAAcE,EAC7CpuL,IAAK,QACL07H,aAAa,EACb3kH,SAAU,CACRo3K,EACA5mD,IAGJ,CAEEnQ,MAAO,aACPC,UAAW,EACXtgH,SAAU,CACR,CACE85B,UAAW,WACXumF,MAAOg3D,EACPpuL,IAAK,QACL07H,aAAa,EACb3kH,SAAU,CAAEwwH,MAIlB2kD,EACA,CACE90D,MAAO82D,EAAc,IACrBluL,IAAK,IACL07H,aAAa,EACbG,WAAW,EACXxE,UAAW,IAInB,EhC5UsCg3D,IACtCxvD,GAAK4F,iBAAiB,kBiC0ZtB6pD,GApbA,SAAazvD,GA8ZX,MAAO,CACLj5I,KAAM,MACN0zI,SAAU,CACRiB,QAhaa,CACf,MACA,KACA,KACA,QACA,OACA,MACA,SACA,UACA,MACA,MACA,SACA,MACA,KACA,KACA,KACA,MACA,QACA,MACA,OACA,SACA,MACA,OACA,OACA,QACA,QACA,OACA,QACA,QACA,MACA,QACA,WACA,MACA,YACA,cACA,QACA,OACA,SACA,YACA,OACA,YACA,YACA,KACA,QACA,QACA,UACA,QACA,WACA,YACA,aACA,cACA,aACA,WACA,UACA,aACA,cACA,WACA,SACA,aACA,eACA,UACA,YACA,eACA,MACA,UACA,UACA,aACA,UACA,eACA,YACA,SACA,OACA,QACA,MACA,WACA,OACA,UACA,cACA,eACA,WACA,SACA,YACA,SACA,UACA,aACA,OACA,QACA,SACA,OACA,WACA,QACA,MACA,OACA,WACA,aACA,gBACA,SACA,OACA,OACA,UACA,QACA,UACA,OACA,OACA,SACA,QACA,aACA,aACA,QACA,WACA,KACA,YACA,WACA,SACA,UACA,YACA,QACA,OACA,UACA,SACA,UACA,WACA,YACA,QACA,SACA,YACA,kBACA,WACA,OACA,QACA,MACA,YACA,UACA,OACA,WACA,QACA,SACA,OACA,KACA,OACA,SACA,UACA,cACA,WACA,OACA,WACA,WACA,aACA,cACA,SACA,OACA,WACA,UACA,YACA,aACA,aACA,OACA,QACA,UACA,cACA,UACA,QACA,WACA,UACA,cACA,QACA,cACA,MACA,MACA,OACA,MACA,SACA,YACA,WACA,WACA,SACA,SACA,UACA,WACA,QACA,UACA,UACA,UACA,QACA,OACA,QACA,OACA,SACA,QACA,SACA,SACA,SACA,cACA,aACA,gBACA,gBACA,UACA,WACA,MACA,SACA,OACA,QACA,SACA,OACA,aACA,WACA,YACA,WACA,QACA,SACA,SACA,OACA,OACA,UACA,OACA,UACA,cACA,OACA,cACA,QACA,YACA,OACA,UACA,YACA,SACA,WACA,YACA,QACA,WACA,QACA,WACA,YACA,UACA,UACA,aACA,QACA,QAqLEmM,SAnLc,CAChB,WACA,SACA,QACA,QACA,QACA,KACA,SACA,aACA,KACA,OACA,cACA,aACA,SACA,SACA,SACA,KACA,OACA,UACA,MACA,MACA,SACA,iBACA,kBACA,QACA,YACA,QACA,UACA,UACA,aACA,YACA,cACA,aACA,gBACA,MACA,aACA,QACA,SACA,YACA,YACA,WACA,cACA,aACA,eACA,SACA,KACA,SACA,SACA,SACA,cACA,QACA,QACA,eACA,YACA,gBACA,QACA,SACA,UACA,aACA,aACA,QACA,OACA,WACA,SACA,WACA,WACA,SACA,eACA,SACA,OACA,QACA,eACA,UACA,SACA,UACA,OACA,QACA,iBACA,oBACA,QACA,aACA,MACA,OACA,UACA,aACA,aACA,eACA,QACA,UACA,WACA,MACA,QACA,KACA,YACA,YACA,cACA,QACA,gBACA,SACA,YACA,YACA,kBACA,UACA,SACA,SACA,OACA,OACA,MACA,MACA,OACA,iBACA,MACA,QACA,QACA,OACA,UACA,OACA,WACA,QACA,QACA,QACA,SACA,MACA,SACA,cACA,WACA,SACA,SACA,UACA,SACA,WACA,UACA,gBACA,QACA,OACA,gBACA,SACA,MACA,qBACA,iBACA,iBACA,kBACA,sBACA,SACA,mBACA,QACA,SACA,cACA,QACA,aACA,QACA,aACA,cACA,QACA,QACA,QACA,MACA,OACA,WACA,SACA,QACA,OACA,UACA,MACA,eACA,UACA,MACA,QACA,SACA,QACA,QACA,QACA,aACA,SAQA3vH,SAAU,CACR8nH,EAAKrH,kBACLqH,EAAKpH,QAAQ,SAAU,UACvBoH,EAAK5G,cACL,CACEpnF,UAAW,OACX8mF,cAAc,EACdP,MAAO,UACPp3H,IAAK,QAEP,CACEo3H,MAAO,UAGf,IjCvZAyH,GAAK4F,iBAAiB,kBkCwGtB8pD,GAnIA,SAAa1vD,GAqEX,MAAO,CACLj5I,KAAM,sBACNs2I,kBAAkB,EAClBxwC,QAAS,CAAE,OACX4tC,SAjDA,gbAkDAviH,SAAU,CAzDI,CACd85B,UAAW,SACXumF,MAAO,8BACPC,UAAW,GAnBG,CACdxmF,UAAW,SACXmtF,SAAU,CACR,CACE5G,MAAO,IACPp3H,IAAK,IACL+W,SAAU,CACR,CACEqgH,MAAO,KACPC,UAAW,OAmEjBwH,EAAKhH,oBACLgH,EAAK/G,qBACL,CACEjnF,UAAW,UACXumF,MAAO,IACPp3H,IAAK,IACLq3H,UAAW,GAEb,CACExmF,UAAW,WACXumF,MAAO,8BAET,CACEvmF,UAAW,WACXumF,MAAO,mBAET,CACEvmF,UAAW,WACXumF,MAAO,wBAET,CACEvmF,UAAW,SACXumF,MAAO,qBAET,CACEvmF,UAAW,UACXumF,MAAO,gCAIT,CACEA,MAAO,SACPp3H,IAAK,KACL23H,cAAc,EACdiE,YAAY,EACZkF,YAAa,OAEf,CACE1J,MAAO,4BACPp3H,IAAK,IACL23H,cAAc,EACdiE,YAAY,EACZkF,YAAa,cAEf,CAEE1J,MAAO,aACPp3H,IAAK,QACL8gI,YAAa,QAIrB,IlCrGAjC,GAAK4F,iBAAiB,kBmCwjBtB+pD,GArlBA,SAAa3vD,GACX,MAAMjI,EAAQiI,EAAKjI,MAIbiB,EAAsBgH,EAAKpH,QAAQ,KAAM,IAAK,CAAE1gH,SAAU,CAAE,CAAEqgH,MAAO,WACrEyU,EAAmB,qBACnBC,EAAe,kBAEfC,EAAmB,cACrBF,EAAmB,IACnBjV,EAAMT,SAAS2V,GACf,gBAAkBlV,EAAMT,SAJC,YAK3B,IAEI6V,EAAsB,CAC1Bn7F,UAAW,OACXumF,MAAO,sBAMH8T,EAAU,CACdr6F,UAAW,SACXmtF,SAAU,CACR,CACE5G,MAAO,cACPp3H,IAAK,IACLu3H,QAAS,MACTxgH,SAAU,CAAE8nH,EAAK1H,mBAEnB,CACEC,MAAO,sEACPp3H,IAAK,IACLu3H,QAAS,KAEXsH,EAAKrG,kBAAkB,CACrBpB,MAAO,mCACPp3H,IAAK,0BAKLisI,EAAU,CACdp7F,UAAW,SACXmtF,SAAU,CAER,CAAE5G,MACA,gVAoBF,CAAEA,MACA,gKAgBJC,UAAW,GAGP6U,EAAe,CACnBr7F,UAAW,OACXumF,MAAO,eACPp3H,IAAK,IACLs5H,SAAU,CAAEiB,QACR,0FAEJxjH,SAAU,CACR,CACEqgH,MAAO,OACPC,UAAW,GAEbwH,EAAKH,QAAQwM,EAAS,CAAEr6F,UAAW,WACnC,CACEA,UAAW,SACXumF,MAAO,SAETS,EACAgH,EAAK/G,uBAIHM,EAAa,CACjBvnF,UAAW,QACXumF,MAAOR,EAAMT,SAAS2V,GAAgBjN,EAAK/H,SAC3CO,UAAW,GAGP8U,EAAiBvV,EAAMT,SAAS2V,GAAgBjN,EAAK/H,SAAW,UA+RhEsV,EAAe,CACnB5hJ,KAlMqB,CACrB,OACA,OACA,WACA,WACA,UACA,SACA,QACA,MACA,OACA,QACA,OACA,UACA,WACA,SACA,QACA,UAmLA+vI,QA9RwB,CACxB,UACA,UACA,MACA,SACA,MACA,gBACA,gBACA,kBACA,OACA,SACA,QACA,QACA,OACA,QACA,QACA,WACA,YACA,WACA,QACA,UACA,gBACA,YACA,YACA,YACA,WACA,WACA,UACA,SACA,KACA,kBACA,OACA,OACA,WACA,SACA,SACA,QACA,QACA,MACA,SACA,OACA,KACA,SACA,SACA,SACA,UACA,YACA,MACA,WACA,MACA,SACA,UACA,WACA,KACA,QACA,WACA,UACA,YACA,SACA,WACA,WACA,sBACA,WACA,SACA,SACA,gBACA,iBACA,SACA,SACA,eACA,WACA,OACA,eACA,QACA,mBACA,2BACA,OACA,MACA,UACA,SACA,WACA,QACA,QACA,UACA,WACA,QACA,MACA,UAwMAkM,QAde,CACf,OACA,QACA,UACA,UACA,QAUAC,SANe,CAAE,WAOjB2F,YAnLiB,CACjB,MACA,WACA,UACA,mBACA,SACA,UACA,qBACA,yBACA,qBACA,QACA,aACA,WACA,WACA,SACA,YACA,mBACA,gBACA,UACA,QACA,aACA,WACA,WACA,QACA,WACA,gBACA,gBACA,OACA,UACA,iBACA,QACA,kBACA,wBACA,cACA,MACA,gBACA,cACA,eACA,qBACA,aACA,QACA,cACA,eACA,cACA,SACA,YACA,QACA,cACA,aACA,gBACA,qBACA,qBACA,gBACA,UACA,SACA,WACA,UACA,iBA6HIvB,EAAoB,CACxBj6F,UAAW,oBACXwmF,UAAW,EACXiC,SAAU,CAERgT,MA/HmB,CACrB,QACA,MACA,OACA,QACA,WACA,OACA,OACA,QACA,SACA,OACA,OACA,MACA,OACA,MACA,OACA,OACA,UACA,OACA,WACA,OACA,MACA,OACA,QACA,OACA,UACA,UACA,QACA,OACA,QACA,SACA,SACA,SACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,WACA,OACA,UACA,QACA,MACA,QACA,YACA,cACA,4BACA,aACA,cACA,SACA,SACA,SACA,SACA,SACA,OACA,OACA,MACA,SACA,UACA,OACA,UACA,QACA,MACA,OACA,WACA,UACA,OACA,SACA,MACA,SACA,QACA,SACA,SACA,SACA,SACA,SACA,UACA,SACA,UACA,UACA,UACA,UACA,UACA,SACA,SACA,OACA,MACA,OACA,YACA,gBACA,UACA,UACA,WACA,QACA,UACA,aA4BAlV,MAAOR,EAAMxtG,OACX,KACA,eACA,SACA,UACA,aACA,YACAy1G,EAAK/H,SACLF,EAAMX,UAAU,sBAGdsW,EAAsB,CAC1BzB,EACAoB,EACAF,EACAnU,EACAgH,EAAK/G,qBACLmU,EACAf,GAGIsB,EAAqB,CAIzBxO,SAAU,CACR,CACE5G,MAAO,IACPp3H,IAAK,KAEP,CACEo3H,MAAO,KACPp3H,IAAK,MAEP,CACEo5H,cAAe,wBACfp5H,IAAK,MAGTs5H,SAAU8S,EACVr1H,SAAUw1H,EAAoBnjH,OAAO,CACnC,CACEguG,MAAO,KACPp3H,IAAK,KACLs5H,SAAU8S,EACVr1H,SAAUw1H,EAAoBnjH,OAAO,CAAE,SACvCiuG,UAAW,KAGfA,UAAW,GAGPoV,EAAuB,CAC3B57F,UAAW,WACXumF,MAAO,IAAM2U,EAAmB,eAAiBI,EACjDzQ,aAAa,EACb17H,IAAK,QACL47H,YAAY,EACZtC,SAAU8S,EACV7U,QAAS,iBACTxgH,SAAU,CACR,CACEqgH,MAAOyU,EACPvS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,GAAK4F,iBAAiB,qBsCoXtB4qD,GAlZA,SAAgBxwD,GACd,MAmJM2G,EAAW,CACfjL,QAvGsB,CACtB,WACA,KACA,OACA,QACA,OACA,QACA,QACA,QACA,WACA,KACA,OACA,QACA,WACA,SACA,UACA,QACA,MACA,UACA,OACA,KACA,WACA,KACA,YACA,WACA,KACA,OACA,YACA,MACA,WACA,MACA,WACA,SACA,UACA,YACA,SACA,WACA,SACA,MACA,SACA,SACA,SACA,SACA,aACA,SACA,SACA,SACA,OACA,QACA,MACA,SACA,YACA,SACA,QACA,UACA,OACA,WACA,SA8CyBnxG,OA5CC,CAC1B,MACA,QACA,MACA,YACA,OACA,QACA,QACA,KACA,aACA,UACA,SACA,OACA,OACA,MACA,SACA,QACA,OACA,OACA,OACA,MACA,SACA,MACA,UACA,KACA,KACA,UACA,UACA,SACA,SACA,WACA,SACA,SACA,MACA,YACA,UACA,MACA,OACA,QACA,OACA,UAKAs9G,SArJwB,CACxB,OACA,OACA,OACA,UACA,WACA,SACA,UACA,OACA,QACA,MACA,OACA,OACA,QACA,SACA,QACA,QACA,SACA,QACA,OACA,UAkIAD,QA/GuB,CACvB,UACA,QACA,OACA,SA6GIrO,EAAayG,EAAKH,QAAQG,EAAKzG,WAAY,CAAEhB,MAAO,uBACpD6U,EAAU,CACdp7F,UAAW,SACXmtF,SAAU,CACR,CAAE5G,MAAO,iBACT,CAAEA,MAAO,mEACT,CAAEA,MAAO,wFAEXC,UAAW,GAOPi4D,EAAkB,CACtBz+I,UAAW,SACXumF,MAAO,KACPp3H,IAAK,IACL+W,SAAU,CAAE,CAAEqgH,MAAO,QAEjBm4D,EAAwB1wD,EAAKH,QAAQ4wD,EAAiB,CAAE/3D,QAAS,OACjEwP,EAAQ,CACZl2F,UAAW,QACXumF,MAAO,KACPp3H,IAAK,KACLs5H,SAAUkM,GAENgqD,EAAc3wD,EAAKH,QAAQqI,EAAO,CAAExP,QAAS,OAC7Ck4D,EAAsB,CAC1B5+I,UAAW,SACXumF,MAAO,MACPp3H,IAAK,IACLu3H,QAAS,KA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VlD,QA3Ba,CACf,WACA,YACA,cACA,cACA,WACA,cACA,kBACA,YACA,UACA,eACA,YACA,aACA,eACA,aACA,UACA,aACA,YACA,gBACA,gBACA,eASAxjH,SAAU,CACR,CACE85B,UAAW,SACXumF,MAAO,IACPp3H,IAAK,KAEP,CACE6wC,UAAW,YACXumF,MAAO,WACPp3H,IAAK,IACL47H,YAAY,IAIpB,IvCdAiD,GAAK4F,iBAAiB,sCwCzCtB,MAyKM2F,EAAO,CA3HX,IACA,OACA,UACA,UACA,QACA,QACA,IACA,aACA,OACA,SACA,SACA,UACA,OACA,OACA,KACA,MACA,UACA,MACA,MACA,KACA,KACA,KACA,WACA,aACA,SACA,SACA,OACA,KACA,KACA,KACA,KACA,KACA,KACA,SACA,SACA,OACA,IACA,SACA,MACA,QACA,MACA,MACA,QACA,SACA,KACA,OACA,OACA,OACA,MACA,SACA,KACA,WACA,SACA,IACA,UACA,IACA,QACA,OACA,UACA,SACA,SACA,OACA,SACA,UACA,MACA,QACA,QACA,KACA,WACA,QACA,KACA,QACA,OACA,KACA,KACA,MACA,QAIA,OACA,IACA,SACA,OACA,UACA,MACA,SACA,SACA,UACA,gBACA,sBACA,cACA,mBACA,oBACA,oBACA,UACA,iBACA,UACA,UACA,eACA,WACA,qBACA,SACA,eACA,iBACA,iBACA,OACA,SACA,UACA,QACA,OACA,OACA,UACA,WACA,OACA,OACA,MACA,WACA,QACA,gBACA,YAWIC,EAAiB,CACrB,YACA,cACA,eACA,QACA,cACA,cACA,sBACA,gBACA,eACA,eACA,gBACA,OACA,SACA,QACA,kBACA,aACA,cACA,iBACA,kBACA,UACA,uBACA,mBACA,yBACA,+BACA,aACA,OACA,YACA,SACA,QAEA,YACA,YACA,aACA,cACAt+F,OAAO3K,UAGHkpG,EAAiB,CACrB,SACA,WACA,QACA,UACA,UACA,UACA,UACA,MACA,WACA,OACA,QACA,UACA,QACA,cACA,gBACA,aACA,SACA,QACA,gBACA,eACA,MACA,OACA,eACA,QACA,gBACA,WACA,UACA,KACA,OACA,aACA,eACA,OACA,OACA,aACA,MACA,YACA,UACA,iBACA,eACA,mBACA,cACA,aACA,eACA,WACA,eACA,OACA,oBACA,YACA,aACA,WACA,QACA,OACA,QACA,SACA,gBACA,eACA,QACA,UACA,SACAv+F,OAAO3K,UAGHmpG,EAAkB,CACtB,QACA,WACA,SACA,MACA,aACA,eACA,aACA,gBACA,SACA,OACA,cACA,YACA,UACA,kBACAx+F,OAAO3K,UAEHopG,EAAa,CACjB,eACA,gBACA,cACA,aACA,qBACA,MACA,cACA,YACA,wBACA,kBACA,sBACA,qBACA,sBACA,4BACA,iBACA,uBACA,kBACA,sBACA,wBACA,qBACA,4BACA,aACA,eACA,kBACA,sBACA,aACA,wBACA,wBACA,kBACA,mBACA,mBACA,oBACA,sBACA,wBACA,wBACA,oBACA,kBACA,iBACA,aACA,SACA,eACA,qBACA,mBACA,yBACA,yBACA,yBACA,qBACA,2BACA,2BACA,2BACA,qBACA,qBACA,gBACA,sBACA,4BACA,6BACA,sBACA,sBACA,kBACA,eACA,wBACA,0BACA,eACA,sBACA,sBACA,qBACA,sBACA,qBACA,gBACA,sBACA,oBACA,0BACA,0BACA,0BACA,sBACA,4BACA,4BACA,4BACA,sBACA,sBACA,cACA,oBACA,oBACA,oBACA,gBACA,eACA,qBACA,qBACA,qBACA,iBACA,0BACA,4BACA,eACA,aACA,mBACA,yBACA,0BACA,mBACA,mBACA,eACA,SACA,YACA,uBACA,gBACA,WACA,iBACA,YACA,oBACA,aACA,WACA,aACA,aACA,cACA,eACA,eACA,eACA,cACA,QACA,OACA,YACA,YACA,QACA,sBACA,8BACA,gBACA,kBACA,eACA,eACA,cACA,aACA,cACA,oBACA,oBACA,oBACA,cACA,eACA,UACA,UACA,+BACA,2BACA,gCACA,yBACA,0BACA,YACA,iBACA,iBACA,UACA,qBACA,oBACA,gBACA,cACA,MACA,YACA,aACA,SACA,KACA,KACA,YACA,UACA,oBACA,cACA,oBACA,eACA,OACA,eACA,YACA,SACA,OACA,aACA,iBACA,YACA,YACA,cACA,YACA,QACA,cACA,gBACA,OACA,OACA,eACA,cACA,wBACA,eACA,yBACA,sBACA,eACA,YACA,mBACA,cACA,iBACA,eACA,aACA,iBACA,0BACA,4BACA,uBACA,wBACA,eACA,0BACA,oBACA,0BACA,qBACA,yBACA,uBACA,wBACA,0BACA,cACA,sBACA,MACA,+BACA,6BACA,OACA,YACA,oBACA,iBACA,iBACA,cACA,kBACA,oBACA,WACA,WACA,eACA,iBACA,gBACA,sBACA,wBACA,qBACA,sBACA,SACA,sBACA,wBACA,UACA,OACA,oBACA,kBACA,mBACA,WACA,iBACA,uBACA,cACA,QACA,aACA,cACA,kBACA,oBACA,eACA,mBACA,qBACA,YACA,kBACA,gBACA,eACA,UACA,OACA,iBACA,iBACA,aACA,cACA,mBACA,aACA,mBACA,sBACA,kBACA,SACA,eACA,mBACA,qBACA,gBACA,gBACA,oBACA,sBACA,cACA,eACA,aACA,cACA,SACA,aACA,aACA,eACA,QACA,OACA,cACA,mBACA,qBACA,qBACA,oBACA,qBACA,oBACA,YACA,iBACA,aACA,YACA,cACA,gBACA,cACA,YACA,YACA,oBACA,aACA,aACA,aACA,iBACA,aACA,kBACA,YACA,iBACA,aACA,kBACA,YACA,iBACA,WACA,YACA,WACA,YACA,SACA,OACA,SACA,aACA,kBACA,SACA,gBACA,kBACA,cACA,kBACA,gBACA,UACA,QACA,UACA,UACA,gBACA,iBACA,gBACA,gBACA,WACA,kBACA,iBACA,uBACA,kBACA,gBACA,aACA,aACA,UACA,sBACA,4BACA,6BACA,wBACA,wBACA,UACA,gBACA,oBACA,sBACA,iBACA,iBACA,qBACA,uBACA,eACA,gBACA,cACA,OACA,mBACA,oBACA,oBACA,cACA,QACA,cACA,eACA,cACA,qBACA,gBACA,cACA,aACA,iBACA,WACA,kBACA,sBACA,qBACA,SACA,IACA,SACA,OACA,aACA,cACA,QACA,SACA,UACA,aACA,gBACA,QACA,kBACA,gBACA,sBACA,0BACA,4BACA,uBACA,uBACA,2BACA,6BACA,qBACA,sBACA,oBACA,iBACA,uBACA,2BACA,6BACA,wBACA,wBACA,4BACA,8BACA,sBACA,uBACA,qBACA,oBACA,mBACA,mBACA,kBACA,uBACA,uBACA,kBACA,mBACA,kBACA,wBACA,eACA,gBACA,kBACA,QACA,WACA,MACA,aACA,eACA,SACA,mBACA,oBACA,iBACA,kBACA,oBACA,iBACA,eACA,WACA,eACA,aACA,iBACA,kBACA,cACA,uBACA,kBACA,wBACA,uBACA,uBACA,2BACA,wBACA,4BACA,gBACA,sBACA,yBACA,sBACA,cACA,eACA,mBACA,gBACA,iBACA,cACA,mBACA,iBACA,wBACA,0BACA,YACA,iBACA,kBACA,iBACA,MACA,eACA,YACA,gBACA,mBACA,kBACA,aACA,sBACA,mBACA,sBACA,sBACA,6BACA,YACA,eACA,cACA,cACA,gBACA,iBACA,gBACA,qBACA,sBACA,qBACA,uBACA,aACA,gBACA,iBACA,eACA,cACA,cACA,aACA,eACA,eACA,cACA,uBACA,SACA,QACA,cACA,aACA,eACA,YACA,eACA,IACA,IACA,UACA,QACAz+F,OAAO3K,iBA0IT4uJ,GAhIA,SAAanxD,GACX,MAAMjI,EAAQiI,EAAKjI,MACb8T,EAtzBM,CAAC7L,IACN,CACL8L,UAAW,CACTjzH,MAAO,OACP0/G,MAAO,cAETwT,cAAe/L,EAAK/G,qBACpB+S,SAAU,CACRnzH,MAAO,SACP0/G,MAAO,mDAET0T,kBAAmB,CACjBj6F,UAAW,WACXumF,MAAO,gBAET2T,wBAAyB,CACvBrzH,MAAO,gBACP0/G,MAAO,KACPp3H,IAAK,KACLu3H,QAAS,IACTxgH,SAAU,CACR8nH,EAAKvH,iBACLuH,EAAKrH,oBAGTwT,gBAAiB,CACftzH,MAAO,SACP0/G,MAAOyH,EAAK7H,UAAY,kGASx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Eo3H,MAAO,OACPp3H,IAAK,OAEP,CACEo3H,MAAO,KACPp3H,IAAK,IACLu3H,QAAS,OAEX,CACEH,MAAO,KACPp3H,IAAK,IACLu3H,QAAS,OAEX,CACEH,MAAO,MACPp3H,IAAK,MACL+W,SAAU,CACR8nH,EAAK1H,iBACL4P,EACAkqD,IAGJ,CACE75D,MAAO,MACPp3H,IAAK,MACL+W,SAAU,CACR8nH,EAAK1H,iBACL4P,EACAkqD,IAGJ,CACE75D,MAAO,IACPp3H,IAAK,IACLu3H,QAAS,MACTxgH,SAAU,CACR8nH,EAAK1H,iBACL4P,EACAkqD,IAGJ,CACE75D,MAAO,IACPp3H,IAAK,IACLu3H,QAAS,MACTxgH,SAAU,CACR8nH,EAAK1H,iBACL4P,EACAkqD,MAKRA,EAAal6K,SAAW,CACtB+vH,EACA8B,GAGF,MAAMsoD,EAAiB,CAErB,aACA,WACA,WACA,WACA,WACA,WACA,OACA,MACA,QACA,SACA,UACA,SACA,MACA,YACA,SACA,eACA,aACA,SACA,OACA,MACA,OACA,SACA,MACA,MAEA,UACA,eAEIC,EAA0BD,EAAex+L,IAAKrN,GAAM,GAAGA,MA2F7D,MAAO,CACLO,KAAM,OACN0zI,SAtBe,CACfiB,QAtEqB,CACrB,WACA,KACA,SACA,QACA,QACA,OACA,QACA,OACA,QACA,QACA,QACA,WACA,YACA,UACA,WACA,KACA,UACA,OACA,OACA,SACA,UACA,YACA,WACA,UACA,QACA,QACA,UACA,MACA,WACA,MACA,OACA,KACA,aACA,SACA,KACA,YACA,KACA,OACA,UACA,QACA,MACA,OACA,KACA,WACA,OACA,WACA,UACA,SACA,SACA,MACA,OACA,SACA,QACA,SACA,OACA,OACA,QACA,OACA,MACA,UACA,MACA,OACA,OACA,QACA,OACA,SAKAmM,SACEwqD,EACG9nK,OAAO+nK,GACP/nK,OAAO,CAEN,QACA,OACA,UACA,QAEA,WACA,gBACA,mBACA,WAENq0G,SAAU,4BAMV1mH,SAAU,CACR6xH,EACA/J,EAAKpH,QACH,eACA,OACA,CACEqJ,YAAa,WACbzJ,UAAW,IAGfwH,EAAKpH,QACH,WACA,IAAK,CAAE1gH,SAAU,CACf,CACE+pH,YAAa,WACb1J,MAAO,IACPp3H,IAAK,IACLq3H,UAAW,MAIjBwH,EAAKhH,oBACLgH,EAAK/G,qBACL,CACEjnF,UAAW,QACXuoF,cAAe,kBACfp5H,IAAK,KACL47H,YAAY,EACZ7kH,SAAU,CACR,CAAEqiH,cAAe,sBACjByF,EAAKxG,wBAGTyO,EACA,CACEj2F,UAAW,OACXumF,MAAO,cAET,CAAEA,MAAO,OAIf,I3C/NAyH,GAAK4F,iBAAiB,qB4CwMtB2sD,GA9OA,SAAgBvyD,GACd,MAAM2G,EAAW,CACf,UACA,WACA,OACA,MACA,QACA,SACA,WACA,MACA,MACA,QACA,MACA,OACA,QACA,OACA,QACA,MACA,SACA,QACA,WACA,MACA,YACA,KACA,UACA,SACA,OACA,QACA,YACA,KACA,OACA,UACA,WACA,MACA,MACA,MACA,iBACA,eACA,SACA,UACA,MACA,MACA,YACA,UACA,KACA,WACA,OACA,OACA,WACA,MACA,MACA,WACA,SACA,OACA,QACA,SACA,KACA,SACA,SACA,QACA,aACA,QACA,UACA,UACA,OACA,OACA,iBACA,SACA,UACA,MACA,KACA,OACA,QACA,KACA,SACA,YACA,KACA,MACA,SACA,QACA,WACA,cACA,OACA,SACA,OACA,iBACA,UACA,YACA,YACA,WACA,cACA,WACA,KACA,KACA,WACA,QACA,YACA,YACA,QACA,WACA,UACA,OACA,aACA,eACA,WACA,aACA,gBACA,UACA,SACA,QACA,UACA,UACA,SACA,aACA,YACA,WACA,QACA,OACA,YACA,WACA,eACA,aACA,YACA,gBACA,YACA,aACA,SACA,YACA,WAEImnD,EAAgB,CACpB9tD,EAAKhH,oBACLgH,EAAKpH,QAAQ,KAAM,KAAM,CAAEJ,UAAW,IACtCwH,EAAKpH,QAAQ,OAAQ,OAAQ,CAAEJ,UAAW,MAEtCg6D,EAAY,CAChBxgJ,UAAW,OACXmtF,SAAU,CACR,CACE5G,MAAO,OACPp3H,IAAK,MAEP,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,iBAAiB,yBgDNtBitD,GAjCA,SAAoB7yD,GAWlB,MAAO,CACLj5I,KAAM,aACN8lG,QAAS,CAAE,UACXwwC,kBAAkB,EAClB5C,SAde,CACf,OACA,aACA,SACA,MACA,MACA,OACA,UACA,cAOAviH,SAAU,CACR8nH,EAAK9G,kBACL8G,EAAKvH,iBACLuH,EAAKrH,kBACLqH,EAAK7G,YACL,CACEoB,cAAe,qEACfQ,OAAQ,CACN55H,IAAK,SACL8gI,YAAa,UAInBvJ,QAAS,KAEb,IhDSAsH,GAAK4F,iBAAiB,kBiDoHtBktD,GA7JA,SAAa9yD,GACX,MAAMpH,EAAUoH,EAAKpH,QACnB,cAAe,IACf,CAAEJ,UAAW,KAsHf,MAAO,CACLzxI,KAAM,mBACN8lG,QAAS,CACP,MACA,OAEFwwC,kBAAkB,EAClB3E,QAAS,OACT+B,SAAU,CACRiB,QAxHa,CACf,KACA,OACA,OACA,MACA,KACA,KACA,OACA,OACA,MACA,QACA,aACA,UACA,MACA,MACA,MACA,MACA,MACA,OAuGEmM,SArGc,CAChB,MACA,MACA,OACA,OACA,OACA,MACA,OACA,OACA,OACA,OACA,MACA,QACA,KACA,MACA,OACA,WACA,WACA,MACA,QACA,OACA,SACA,QACA,KACA,SACA,QACA,QACA,KACA,OACA,QACA,SACA,UACA,MACA,MACA,QACA,OACA,UACA,UACA,OACA,MACA,WACA,WACA,SACA,QACA,KACA,OACA,UACA,SACA,QACA,WACA,OACA,OACA,QACA,KACA,QACA,OACA,OACA,OACA,OACA,QACA,QACA,OACA,QACA,QACA,KACA,UACA,MACA,SACA,UACA,UACA,QACA,QACA,OACA,QACA,QACA,OACA,QACA,OACA,OACA,MACA,SACA,MAEA,OACA,MACA,WACA,WACA,QACA,MACA,QAcA3vH,SAAU,CACR,CACE85B,UAAW,WACXumF,MAAO,4BAET,CACEvmF,UAAW,WACXumF,MArIG,mDAsIHp3H,IAAK,WACL+W,SAAU,CACR8nH,EAAKH,QAAQG,EAAKzG,WAAY,CAAEhB,MAAO,sDACvCK,IAGJ,CA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,SAAUw9K,GAGZ,MAAO,CACL3uM,KAAM,SACN8lG,QAAS,CAAE,OACX4tC,SAAUu6D,EACVt8D,QAAS,4CACTxgH,SAAU,CACR,CACE85B,UAAW,WACXumF,MAAO,IAAMu8D,EAAgB,UAC7B3zL,IAAK,KACL07H,aAAa,EACbnE,QAAS,yBACTxgH,SAAU,CACRwwH,EACA1I,EAAKH,QAAQG,EAAKzG,WAAY,CAAEhB,MAAOu8D,KAEzC/5D,OAAQ,CACN55H,IAAK,QACLs5H,SAAUu6D,EACV98K,SAAUw9K,IAGd98D,EACA,CACEL,MAAO,KACPp3H,IAAK,MACLq3H,UAAW,EACXuE,YAAY,EACZF,aAAa,EACbpC,SAAU,CACRmE,SAAU,IAAMoB,EAAK/H,SACrByD,QAjEW,CACjB,UACA,UACA,SACA,UACA,SACA,UACA,UACA,aACA,OACA,aACA,OACA,UACA,WACA,eACA,WACA,UACA,QACA,SACA,QACA,aACA,YACA,QACA,WACA,SAyC0B7nI,IAAI4yC,GAAK,GAAGA,SAASlxB,KAAK,MAEhD2C,SAAU,CACRwwH,EACA8sD,EACAD,EACAv1D,EAAKrH,oBAGTsP,EACAutD,EACAD,EACAv1D,EAAKrH,kBACL08D,EACAF,EACAC,EACAF,EACAI,EACA,CAAE/8D,MAAO,QAGf,I3D3KAyH,GAAK4F,iBAAiB,oB4DsgBtB+vD,GA1jBA,SAAe31D,GAqgBb,MAAO,CACLj5I,KAAM,iBACN8lG,QAAS,CACP,OACA,OAEFwwC,kBAAkB,EAClB5C,SAAU,CACRmE,SAAU,kBACViJ,SA5gBc,CAChB,MACA,UACA,WACA,OACA,QACA,OACA,QACA,YACA,UACA,YACA,WACA,MACA,SACA,QACA,cACA,MACA,OACA,QACA,OACA,QACA,QACA,SACA,UACA,WACA,YACA,aACA,WACA,OACA,UACA,UACA,UACA,UACA,WACA,YACA,UACA,WACA,UACA,UACA,UACA,YACA,aACA,mBACA,YACA,SACA,YACA,QACA,YACA,SACA,QACA,QACA,OACA,UACA,eACA,kBACA,OACA,OACA,UACA,SACA,UACA,aACA,gBACA,YACA,eACA,aACA,SACA,aACA,aACA,QACA,OACA,SACA,UACA,SACA,UACA,UACA,SACA,cACA,aACA,kBACA,eACA,UACA,SACA,MACA,OACA,MACA,OACA,QACA,SACA,aACA,UACA,WACA,YACA,WACA,aACA,UACA,UACA,UACA,QACA,eACA,eACA,YACA,MACA,OACA,gBACA,aACA,qBACA,mBACA,UACA,eACA,YACA,UACA,WACA,OACA,UACA,YACA,WACA,MACA,OACA,UACA,KACA,OACA,SACA,UACA,MACA,UACA,UACA,UACA,UACA,UACA,QACA,QACA,OACA,OACA,OACA,OACA,SACA,WACA,WACA,WACA,OACA,SACA,UACA,OACA,WACA,OACA,QACA,QACA,SACA,YACA,UACA,MACA,cACA,OACA,eACA,aACA,cACA,OACA,QACA,MACA,SACA,aACA,YACA,OACA,aACA,QACA,SACA,QACA,YACA,SACA,YACA,OACA,QACA,QACA,WACA,OACA,SACA,YACA,QACA,QACA,aACA,gBACA,WACA,eACA,uBACA,2BACA,oBACA,kBACA,cACA,YACA,SACA,QACA,KACA,aACA,QACA,aACA,YACA,YACA,WACA,UACA,kBACA,QACA,MACA,UACA,SACA,eACA,SACA,UACA,UACA,UACA,UACA,UACA,OACA,SACA,YACA,eACA,cACA,KACA,UACA,OACA,MACA,QACA,QACA,YACA,aACA,cACA,QACA,SACA,QACA,QACA,SACA,QACA,QACA,OACA,UACA,SACA,UACA,YACA,SACA,QACA,SACA,QACA,SACA,SACA,QACA,QACA,QACA,QACA,WACA,OACA,MACA,YACA,UACA,OACA,MACA,UACA,QACA,UACA,SACA,YACA,YACA,OACA,YACA,WACA,QACA,YACA,QACA,SACA,cACA,aACA,QACA,MACA,OACA,SACA,QACA,MACA,OACA,QACA,MACA,OACA,MACA,SACA,KACA,MACA,QACA,SACA,SACA,eACA,cACA,cACA,SACA,QACA,YACA,MACA,QACA,MACA,OACA,SACA,UACA,YACA,SACA,MACA,OACA,MACA,SACA,OACA,SACA,WACA,OACA,QACA,MACA,OACA,YACA,YACA,QACA,SACA,cACA,QACA,IACA,KACA,gBACA,eACA,cACA,mBACA,UACA,YACA,WACA,UACA,WACA,cACA,YACA,aACA,WACA,MACA,MACA,OACA,MACA,cACA,UACA,UACA,UACA,MACA,YACA,YACA,YACA,YACA,SACA,KACA,YACA,UACA,iBACA,iBACA,aACA,kBACA,kBACA,cACA,SACA,eACA,MACA,WACA,KACA,MACA,eACA,UACA,QACA,OACA,QACA,YACA,WACA,OACA,UACA,SACA,KACA,WACA,eACA,eACA,WACA,UACA,OACA,YACA,cACA,WACA,UACA,OACA,OACA,WACA,SACA,cACA,UACA,WACA,OACA,QACA,SACA,QACA,QACA,YACA,UACA,MACA,OACA,MACA,MACA,MACA,OACA,SACA,UACA,MACA,OACA,SACA,WACA,YACA,QACA,SACA,OACA,MACA,OACA,OACA,SACA,MACA,QACA,QACA,OACA,SACA,OACA,SACA,cACA,cACA,eACA,QACA,UACA,UACA,SACA,SACA,UACA,QACA,aACA,WACA,MACA,QACA,SACA,aACA,QACA,WACA,WACA,UACA,SACA,MACA,IACA,MACA,OACA,OACA,UACA,aACA,aACA,SACA,YACA,YACA,QACA,OACA,YACA,aACA,WACA,YACA,OACA,YACA,QACA,WACA,OACA,QACA,QACA,QACA,YACA,QACA,OACA,WACA,OACA,QACA,SACA,QACA,OACA,UACA,UACA,SACA,QACA,QACA,cACA,MACA,QACA,QACA,OACA,OACA,QACA,MACA,UACA,SACA,aACA,UACA,UACA,UACA,eACA,UACA,eACA,WACA,WACA,OACA,UACA,SACA,OACA,MACA,OACA,WACA,QACA,YACA,WACA,SACA,UAaA3vH,SAAU,CACR,CAEEqgH,MAAO,KACPp3H,IAAK,OACL67H,WAAW,EACXtE,QAAS,IACTF,UAAW,IAGb,CAEExmF,UAAW,SACXumF,MAAO,oBACPp3H,IAAK,QACL47H,YAAY,EACZvE,UAAW,GAEb,CAEExmF,UAAW,SACXumF,MAAO,8BACPC,UAAW,GAEbwH,EAAK1H,iBACL0H,EAAKrH,kBACL,CACE3mF,UAAW,SACXumF,MAAOyH,EAAK7H,UAAY,OACxBK,UAAW,GAGbwH,EAAKpH,QAAQ,QAAS,KACpB,CACEE,cAAc,EACdiE,YAAY,EACZrE,QAAS,QAInB,I5DngBAsH,GAAK4F,iBAAiB,kB6DxBtBgwD,GAhCA,SAAa51D,GACX,MAAO,CACLj5I,KAAM,MACNmxB,SAAU,CACR,CACEqgH,MAAO,mBACPp3H,IAAK,iBACL47H,YAAY,EACZF,aAAa,EACbG,WAAW,EACX9kH,SAAU,CACR,CACEqgH,MAAO,sBACPp3H,IAAK,uBACL67H,WAAW,EACXH,aAAa,EACb7qF,UAAW,QAEb,CACEumF,MAAO,IACPp3H,IAAK,mBACL47H,YAAY,EACZjE,cAAc,EACd9mF,UAAW,aAKnBqrF,kBAAkB,EAEtB,I7D2BA2C,GAAK4F,iBAAiB,mB8DetBiwD,GAtEA,SAAc71D,GACZ,MAqBM81D,EAAS,CACb9jJ,UAAW,WACXuoF,cAAe,MACfp5H,IAAK,cACL47H,YAAY,EACZ7kH,SAAU,CAXC,CACX85B,UAAW,QACXwmF,UAAW,EACXD,MAAO,oFAWT,MAAO,CACLxxI,KAAM,OACN0zI,SAAU,CACRiB,QAAS,CACP,OACA,QACA,MACA,OACA,OACA,KACA,OACA,SACA,KACA,MACA,MACA,QACA,MACA,QACA,YACA,SACA,OACA,QACA,QAEFkM,QAAS,CACP,OACA,UAGJ1vH,SAAU,CACR8nH,EAAKhH,oBACLgH,EAAK/G,qBA5DI,CACXjnF,UAAW,SACXumF,MAAO,8BAGM,CACbvmF,UAAW,SACXmtF,SAAU,CACR,CACE5G,MAAO,IACPp3H,IAAK,OAqDP20L,EACA91D,EAAK5G,eAGX,I9DZA4G,GAAK4F,iBAAiB,sB+D6ftBmwD,GArjBA,SAAiB/1D,GACf,MAAMjI,EAAQiI,EAAKjI,MAOba,EAAU,CAAEuG,SAAU,CAC1Ba,EAAKpH,QAAQ,IAAK,IAAK,CAAEJ,UAAW,IAEpCwH,EAAKpH,QAAQ,QAAS,IAAK,CAAEJ,UAAW,IACxCwH,EAAKpH,QAAQ,MAAO,IAAK,CAAEJ,UAAW,MAIlCw9D,EAAyB,gBACzBC,EAAsB,kBACtBhuD,EAAS,CACbj2F,UAAW,SACXmtF,SAAU,CACR,CAAE5G,MAAOR,EAAMxtG,OAAO,QAAS,UAAW0rK,EAAqBD,IAC/D,CAAEz9D,MAAOR,EAAMxtG,OAAO,QAAS0rK,EAAqBD,IACpD,CAAEz9D,MAAOR,EAAMxtG,OAAO,QAAS0rK,EAAqBD,KAEtDx9D,UAAW,GAGP09D,EAAe,CACnBlkJ,UAAW,WACXuoF,cAAe,8BACf7B,QAAS,WACTxgH,SAAU,CACR8nH,EAAKxG,sBA/BM,CACbxnF,UAAW,SACXumF,MAAO,MACPp3H,IAAK,SAmhBP,MAAO,CACLpa,KAAM,UACNs2I,kBAAkB,EAClBxwC,QAAS,CACP,MACA,OAEF4tC,SAAU,CACRmE,SAAU,0CACVlD,QAlfa,CACf,OACA,KACA,aACA,QACA,SACA,QACA,UACA,OACA,YACA,QACA,YACA,OACA,UACA,YACA,YACA,eACA,MACA,QACA,QACA,KACA,SACA,YACA,OACA,WACA,UACA,SACA,OACA,OACA,QACA,WACA,eACA,SACA,gBACA,WACA,UACA,QACA,OACA,QACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,MACA,SACA,SACA,OACA,SACA,QACA,SACA,QACA,OACA,MACA,OACA,YACA,SACA,OACA,QACA,UACA,SACA,SACA,MACA,OACA,aACA,SACA,cACA,OACA,WACA,SACA,QACA,QACA,OACA,cACA,UACA,cACA,cACA,QACA,OACA,UACA,QACA,QACA,cACA,SACA,kBACA,OACA,YACA,WACA,WACA,UACA,SACA,gBACA,QACA,WACA,UACA,QACA,aACA,QACA,YACA,OACA,OACA,QACA,UACA,SACA,cACA,gBACA,WACA,WACA,YACA,YACA,YACA,iBACA,kBACA,kBACA,kBACA,gBACA,iBACA,iBACA,iBACA,aACA,aACA,UACA,WACA,gBACA,kBACA,mBACA,wBACA,SACA,SACA,aACA,gBACA,aACA,oBACA,mBACA,iBACA,gBACA,QACA,WACA,eACA,cACA,QACA,WACA,kBACA,yBACA,aACA,oBACA,aACA,aACA,aACA,uBACA,cACA,kBACA,kBACA,iCACA,0BACA,0BACA,UACA,aACA,YACA,MACA,WACA,SACA,QACA,YACA,MACA,UACA,MACA,YACA,YACA,WACA,UACA,WACA,YACA,OACA,SACA,UACA,OACA,YACA,UACA,UACA,cACA,YACA,iBACA,YACA,WACA,cACA,OACA,SACA,YACA,SACA,SACA,WACA,UACA,SACA,KACA,MACA,SACA,cACA,QA0SEkM,QAxSa,CACf,UACA,UAuSEC,SArSc,CAChB,OACA,SACA,QACA,QACA,QACA,QACA,OACA,OACA,OACA,OACA,OACA,OACA,QACA,OACA,QACA,QACA,QACA,SACA,OACA,QACA,OACA,OACA,OACA,OACA,SACA,QACA,QACA,OACA,QACA,QACA,OACA,QACA,QACA,OACA,QACA,QACA,OACA,OACA,QACA,SACA,OACA,QACA,OACA,OACA,OACA,OACA,OACA,SACA,QACA,QACA,QACA,QACA,QACA,SACA,QACA,QACA,QACA,QACA,QACA,SACA,SACA,SACA,OACA,QACA,SACA,SACA,QACA,SACA,QACA,OACA,QACA,QACA,QACA,SACA,SACA,SACA,OACA,QACA,OACA,OACA,QACA,OACA,SACA,QACA,SACA,OACA,SACA,QACA,QACA,OACA,QACA,QACA,OACA,QACA,QACA,OACA,QACA,MACA,OACA,QACA,OACA,QACA,OACA,OACA,QACA,OACA,QACA,QACA,MACA,OACA,MACA,QACA,QACA,MACA,MACA,QACA,MACA,MACA,OACA,OACA,MACA,OACA,OACA,MACA,OACA,QACA,QACA,MACA,MACA,MACA,MACA,MACA,MACA,UACA,WACA,aACA,UACA,UACA,MACA,YACA,MACA,aACA,WACA,QACA,UACA,QACA,SACA,gBACA,SACA,cACA,UACA,UACA,WACA,QACA,WACA,OACA,OACA,QACA,QACA,QACA,OACA,MACA,QACA,SACA,SACA,WACA,SACA,cACA,SACA,SACA,QACA,cACA,SACA,SACA,SACA,SACA,UACA,OACA,UACA,UACA,QACA,gBACA,cACA,QACA,SACA,UACA,YACA,QACA,OACA,oBACA,qBACA,eACA,QACA,OACA,UACA,SACA,MACA,eACA,OACA,YACA,OACA,SACA,SACA,SACA,QACA,SACA,WACA,OACA,QACA,QACA,WACA,yBACA,cACA,uBACA,2BACA,gBACA,kBACA,iCACA,0BACA,0BACA,gBACA,aACA,WACA,qBACA,eACA,kBACA,QACA,QACA,QACA,YACA,YACA,YACA,YACA,YACA,YACA,MACA,OACA,cACA,QACA,YACA,QACA,QACA,gBACA,aACA,uBACA,QACA,SACA,eACA,aACA,MACA,MACA,MACA,MACA,UACA,UACA,UACA,OACA,OACA,UACA,cACA,WACA,WACA,QACA,QACA,aACA,SACA,SACA,SACA,SACA,SACA,SACA,aACA,OACA,SACA,OACA,eACA,SACA,SACA,SACA,cAeAnP,QAAS,OACTxgH,SAAU,CAhgBG,CACb85B,UAAW,SACXwmF,UAAW,EACX2G,SAAU,CACRa,EAAKvH,iBACLuH,EAAKrH,oBA6fLu9D,EAGA,CACE39D,MAAO,cACPC,UAAW,GAEbI,EACAqP,GAGN,I/D1fAjI,GAAK4F,iBAAiB,oCgE7DtB,SAAS/iB,EAAOt8H,GACd,OAAO,IAAI2G,OAAO3G,EAAM6C,QAAQ,wBAAyB,QAAS,IACpE,CAMA,SAAS4F,EAAOo+C,GACd,OAAKA,EACa,iBAAPA,EAAwBA,EAE5BA,EAAGp+C,OAHM,IAIlB,CAMA,SAASooI,EAAUhqF,GACjB,OAAO7iB,EAAO,MAAO6iB,EAAI,IAC3B,CAMA,SAAS7iB,KAAUvjC,GAEjB,OADeA,EAAK6M,IAAK4yC,GAAMz3C,EAAOy3C,IAAIlxB,KAAK,GAEjD,CA0BA,SAASgiH,KAAUvwI,GAEjB,MAAM+rD,EAtBR,SAA8B/rD,GAC5B,MAAM+rD,EAAO/rD,EAAKA,EAAKE,OAAS,GAEhC,MAAoB,iBAAT6rD,GAAqBA,EAAK7iD,cAAgBrI,QACnDb,EAAKwM,OAAOxM,EAAKE,OAAS,EAAG,GACtB6rD,GAEA,CAAA,CAEX,CAaeykF,CAAqBxwI,GAIlC,MAHe,KACV+rD,EAAK2H,QAAU,GAAK,MACrB1zD,EAAK6M,IAAK4yC,GAAMz3C,EAAOy3C,IAAIlxB,KAAK,KAAO,GAE7C,aA+iBA4gL,GAniBA,SAAgBn2D,GACd,MAmEMo2D,EAAoB,CAExBv9K,MAAO,UACPnkB,MAAO,sCAyCH2hM,EAAc,CAElB,OACA,OACA,QACA,OACA,QACA,QACA,QACA,SACA,SACA,MACA,OACA,QACA,SACA,YACA,aACA,UACA,QACA,SACA,UACA,SACA,OACA,SACA,OACA,SAEA,SACA,UACA,OACA,QACA,MACA,QACA,MACA,QACA,YACA,MACA,SACA,UAEA,UA4CIC,EAAe,CACnB56D,QApMe,CACf,WACA,MACA,KACA,SACA,OACA,QACA,QACA,UACA,WACA,KACA,OACA,WACA,SACA,OACA,OACA,MACA,YACA,SAEA,UACA,QACA,MACA,MACA,WACA,SACA,KACA,KACA,UACA,SACA,YACA,WACA,OACA,MACA,QACA,SACA,SACA,UACA,YACA,MAGA,KACA,OACA,KACA,WACA,UACA,SACA,MACA,SACA,SACA,SACA,OACA,KAEA,MACA,OACA,SACA,MACA,MACA,OACA,OACA,QACA,OACA,SAqIAkM,QA5Ge,CACf,OACA,QACA,OACA,OACA,OACA,KACA,QACA,WACA,YACA,MACA,QAkGAC,SA5Ce,CAKf,MACA,MACA,QACA,UACA,OACA,eACA,MACA,MACA,OACA,SACA,SACA,YACA,SACA,UACA,aACA,YACA,KACA,MACA,MACA,SACA,OACA,QACA,MACA,QACA,WACA,SACA,UACA,UACA,UACA,WACA,UACA,WACA,WACA,aAOA,oBAhG0B,CAC1B,WACA,uBACA,oBAsGIjP,EAAU,CACduG,SAAU,CALVa,EAAKpH,QAAQ,aAAc,OAAQ,CACjC1gH,SAAU,CAAC,UAMX8nH,EAAKhH,sBAOHu9D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AvHA,SAAcx5D,GACZ,MAAO,CACLj5I,KAAM,OACN0zI,SAAU,CACRiB,QAAA,igCAeA/vI,KACE,wwCAeFk8I,SAAA,ynLAoEAD,QAAS,cAEXlP,QAAS,IACTxgH,SAAU,CACR8nH,EAAKhH,oBACLgH,EAAK/G,qBACL+G,EAAK5G,cACL,CACEpnF,UAAW,OACXumF,MAAO,IACPp3H,IAAK,MAIb,IrEtDA6+H,GAAK4F,iBAAiB,kBsEk/FtB6zD,GAljGA,SAAaz5D,GA+hGX,MAAO,CACLj5I,KAAM,MACNs2I,kBAAkB,EAClB5C,SAAU,CACRiB,QAliGa,CACf,aACA,SACA,UACA,MACA,QACA,QACA,OACA,cACA,WACA,UACA,SACA,MACA,KACA,OACA,MACA,OACA,OACA,MACA,WACA,YACA,KACA,MACA,MACA,MACA,KACA,SACA,SACA,SACA,SACA,OACA,QACA,MACA,QACA,OACA,OAggGEmM,SA7/Fc,CAChB,MACA,YACA,YACA,mBACA,6BACA,wBACA,mBACA,oBACA,mBACA,gBACA,wBACA,8BACA,sBACA,YACA,2BACA,kCACA,6BACA,iCACA,SACA,SACA,SACA,UACA,YACA,YACA,eACA,iBACA,qBACA,aACA,mBACA,eACA,mBACA,eACA,eACA,eACA,mBACA,mBACA,cACA,gBACA,YACA,kBACA,eACA,qBACA,aACA,eACA,YACA,gBACA,YACA,aACA,eACA,eACA,gBACA,oBACA,YACA,gBACA,oBACA,aACA,cACA,eACA,mBACA,iBACA,mBACA,gBACA,kBACA,iBACA,iBACA,oBACA,iBACA,oBACA,2BACA,mBACA,yBACA,oBACA,4BACA,0BACA,sBACA,0BACA,cACA,uBACA,2BACA,sBACA,oBACA,uBACA,uBACA,wBACA,qBACA,qBACA,wBACA,yBACA,kCACA,0BACA,uBACA,uBACA,uBACA,sBACA,sBACA,sBACA,sBACA,yBACA,kCACA,yBACA,eACA,0BACA,0BACA,wBACA,2BACA,0BACA,0BACA,wBACA,iBACA,2BACA,0BACA,iBACA,yBACA,uBACA,wBACA,mBACA,4BACA,mBACA,uBACA,uBACA,qBACA,kBACA,mBACA,0BACA,6BACA,0BACA,iCACA,8BACA,8BACA,0BACA,oBACA,kBACA,oBACA,yBACA,2BACA,mBACA,sBACA,uBACA,sBACA,oBACA,mBACA,qBACA,0BACA,0BACA,wBACA,mBACA,8BACA,uBACA,gCACA,uBACA,2BACA,6BACA,wBACA,iCACA,0BACA,qBACA,mBACA,uBACA,yBACA,oBACA,gCACA,iCACA,wBACA,yBACA,iBACA,uBACA,mBACA,wBACA,yBACA,iCACA,6BACA,8BACA,4BACA,8BACA,gBACA,gBACA,OACA,wBACA,2BACA,yBACA,4BACA,uBACA,2BACA,uBACA,kBACA,cACA,iCACA,qBACA,eACA,gBACA,mCACA,uCACA,oBACA,gBACA,gBACA,cACA,qBACA,uBACA,kBACA,qBACA,kBACA,cACA,oBACA,kBACA,sBACA,aACA,cACA,cACA,cACA,gBACA,cACA,oBACA,kBACA,cACA,qBACA,uBACA,cACA,gBACA,cACA,eACA,cACA,aACA,eACA,yBACA,gBACA,qBACA,iBACA,oBACA,0BACA,qBACA,wBACA,sBACA,2BACA,wBACA,2BACA,2BACA,yBACA,sBACA,0BACA,0BACA,yBACA,wBACA,oBACA,oBACA,0BACA,qBACA,wBACA,sBACA,2BACA,wBACA,yBACA,sBACA,sBACA,uBACA,wBACA,yBACA,OACA,SACA,MACA,QACA,gBACA,oBACA,mBACA,uBACA,mBACA,mBACA,sBACA,qBACA,qBACA,qBACA,kBACA,oBACA,oBACA,mBACA,mBACA,wBACA,oBACA,yBACA,iBACA,sBACA,kBACA,uBACA,sBACA,2BACA,iBACA,kBACA,gBACA,gBACA,uBACA,kBACA,kBACA,mBACA,iBACA,iBACA,wBACA,mBACA,MACA,UACA,UACA,UACA,WACA,oBACA,wBACA,oBACA,uBACA,wBACA,eACA,mBACA,uBACA,gBACA,qBACA,oBACA,eACA,uBACA,gBACA,wBACA,kBACA,0BACA,iBACA,kBACA,0BACA,oBACA,gBACA,mBACA,gBACA,iBACA,eACA,gBACA,kBACA,iBACA,kBACA,gBACA,gBACA,gBACA,iBACA,mBACA,kBACA,mBACA,oBACA,eACA,mBACA,sBACA,iBACA,iBACA,YACA,sBACA,aACA,eACA,YACA,aACA,gBACA,gBACA,cACA,qBACA,qBACA,aACA,iBACA,aACA,WACA,iBACA,WACA,kBACA,kBACA,YACA,OACA,cACA,sBACA,WACA,oBACA,oBACA,oBACA,wBACA,4BACA,oCACA,qCACA,8BACA,qBACA,qBACA,iBACA,wBACA,iBACA,wBACA,mBACA,oBACA,mBACA,oBACA,oBACA,wBACA,yBACA,wBACA,qBACA,0BACA,2BACA,4BACA,oBACA,sBACA,sBACA,oBACA,gBACA,2BACA,2BACA,uBACA,2BACA,4BACA,4BACA,qBACA,oBACA,cACA,iBACA,4BACA,4BACA,yBACA,yBACA,aACA,cACA,cACA,oBACA,qBACA,aACA,mBACA,eACA,qBACA,sBACA,wBACA,kCACA,qBACA,aACA,iBACA,iBACA,kBACA,sCACA,gBACA,kBACA,oBACA,wBACA,kBACA,gBACA,oBACA,iBACA,iBACA,4BACA,8BACA,0BACA,oBACA,iBACA,yBACA,YACA,kBACA,mBACA,kBACA,wBACA,yBACA,YACA,aACA,mBACA,oBACA,uBACA,+BACA,qBACA,iBACA,uBACA,wBACA,iBACA,uBACA,2BACA,wBACA,4BACA,qBACA,YACA,iBACA,4BACA,iBACA,kBACA,gBACA,kBACA,oBACA,wBACA,kBACA,gBACA,0BACA,yBACA,qBACA,cACA,kBACA,sBACA,mBACA,uBACA,kBACA,wBACA,4BACA,oBACA,wBACA,eACA,mBACA,uBACA,oBACA,wBACA,yBACA,6BACA,qBACA,yBACA,YACA,kBACA,mBACA,gBACA,sBACA,uBACA,4BACA,kCACA,mCACA,wBACA,8BACA,+BACA,qBACA,YACA,eACA,gBACA,sBACA,uBACA,cACA,oBACA,qBACA,sBACA,4BACA,6BACA,YACA,cACA,mBACA,0BACA,qBACA,gBACA,eACA,iBACA,kBACA,cACA,uBACA,wBACA,uBACA,uBACA,kBACA,mBACA,kBACA,kBACA,iBACA,mBACA,wBACA,+BACA,0BACA,eACA,iBACA,cACA,mBACA,0BACA,qBACA,kBACA,eACA,qBACA,4BACA,uBACA,uBACA,uBACA,kBACA,kBACA,gBACA,gBACA,cACA,gBACA,eACA,iBACA,iBACA,kBACA,gBACA,qBACA,qBACA,iBACA,kBACA,iBACA,uBACA,sBACA,eACA,kBACA,cACA,kBACA,eACA,eACA,gBACA,aACA,kBACA,iBACA,eACA,cACA,gBACA,gBACA,iBACA,eACA,gBACA,oBACA,mBACA,mBACA,uBACA,oBACA,iBACA,gBACA,uBACA,cACA,iBACA,sBACA,qBACA,qBACA,4BACA,qBACA,4BACA,aACA,cACA,yBACA,eACA,kBACA,8BACA,oBACA,mBACA,qBACA,yBACA,yBACA,2BACA,sBACA,oBACA,uBACA,uBACA,4BACA,mBACA,mBACA,oBACA,iBACA,gBACA,kBACA,mBACA,mBACA,iBACA,mBACA,gBACA,gBACA,gBACA,gBACA,iBACA,mBACA,iBACA,gBACA,kBACA,mBACA,iBACA,eACA,gBACA,gBACA,gBACA,eACA,iBACA,OACA,OACA,eACA,sBACA,sBACA,sBACA,sBACA,2BACA,kBACA,gBACA,sBACA,uBACA,aACA,8BACA,MACA,mBACA,6BACA,6BACA,6BACA,wBACA,wBACA,gBACA,kBACA,gBACA,kBACA,iBACA,gBACA,oBACA,qBACA,mBACA,gBACA,gBACA,sBACA,YACA,cACA,cACA,kBACA,kBACA,iBACA,cACA,kBACA,gBACA,iBACA,wBACA,6BACA,sBACA,uBACA,sBACA,wBACA,mBACA,uBACA,yBACA,oBACA,sBACA,eACA,iBACA,eACA,gBACA,gBACA,QACA,WACA,qBACA,yBACA,kBACA,sBACA,mBACA,cACA,sBACA,kBACA,cACA,gBACA,iBACA,oBACA,gBACA,kBACA,gBACA,gBACA,uBACA,sBACA,gBACA,mBACA,eACA,sBACA,0BACA,kBACA,sBACA,OACA,YACA,cACA,mBACA,yBACA,oBACA,sBACA,mBACA,oBACA,sBACA,cACA,WACA,iBACA,YACA,mBACA,eACA,YACA,mBACA,iBACA,qBACA,qBACA,uBACA,+BACA,gCACA,uBACA,uBACA,4BACA,+BACA,0BACA,2BACA,mBACA,sBACA,qBACA,oBACA,oBACA,uBACA,uBACA,yBACA,4BACA,+BACA,oBACA,qBACA,qBACA,wBACA,uBACA,aACA,YACA,eACA,2BACA,gBACA,uBACA,8BACA,0BACA,wBACA,oBACA,sBACA,kCACA,8BACA,4BACA,wBACA,0BACA,+BACA,kCACA,6BACA,2BACA,0BACA,wBACA,2BACA,8BACA,yBACA,uBACA,sBACA,oBACA,cACA,oBACA,kBACA,oBACA,wBACA,oBACA,wBACA,aACA,mBACA,YACA,kBACA,WACA,WACA,kBACA,aACA,mBACA,0BACA,uBACA,sBACA,oBACA,yBACA,8BACA,wBACA,iCACA,wBACA,6BACA,2BACA,4BACA,mBACA,gBACA,cACA,gBACA,qBACA,yBACA,wBACA,4BACA,sBACA,0BACA,sBACA,0BACA,uBACA,2BACA,yBACA,6BACA,yBACA,6BACA,qBACA,yBACA,oBACA,wBACA,oBACA,wBACA,gBACA,sBACA,uBACA,gBACA,iBACA,0BACA,uBACA,sBACA,oBACA,wBACA,iCACA,2BACA,4BACA,mBACA,gBACA,cACA,gBACA,qBACA,yBACA,wBACA,4BACA,sBACA,0BACA,sBACA,0BACA,uBACA,2BACA,yBACA,6BACA,yBACA,6BACA,qBACA,yBACA,oBACA,wBACA,oBACA,wBACA,gBACA,sBACA,uBACA,eACA,gBACA,kBACA,iBACA,kBACA,WACA,gBACA,+BACA,mBACA,eACA,+BACA,cACA,eACA,cACA,yBACA,sBACA,uBACA,kBACA,aACA,YACA,iBACA,iBACA,WACA,uBACA,gBACA,kBACA,qBACA,qBACA,iBACA,mBACA,wBACA,0BACA,2BACA,2BACA,kBACA,gBACA,wBACA,wBACA,0BACA,4BACA,6BACA,6BACA,mBACA,kBACA,gBACA,oBACA,kBACA,mBACA,kBACA,iBACA,sBACA,oBACA,yBACA,aACA,QACA,WACA,UACA,gBACA,WACA,UACA,cACA,wBACA,YACA,cACA,gBACA,WACA,WACA,iCACA,YACA,8BACA,SACA,aACA,SACA,UACA,YACA,YACA,eACA,cACA,cACA,aACA,iBACA,iBACA,wBACA,yBACA,0BACA,iBACA,mBACA,uBACA,qBACA,uBACA,mBACA,uBACA,qBACA,0BACA,wBACA,wBACA,0BACA,qBACA,yBACA,yBACA,0BACA,0BACA,2BACA,0BACA,6BACA,6BACA,8BACA,0BACA,6BACA,6BACA,8BACA,+BACA,+BACA,8BACA,8BACA,8BACA,0BACA,yBACA,yBACA,0BACA,2BACA,2BACA,0BACA,0BACA,0BACA,iBACA,eACA,cACA,gBACA,0BACA,qBACA,kBACA,eACA,yBACA,sBACA,gBACA,yBACA,kBACA,0BACA,yBACA,yBACA,eACA,mBACA,eACA,wBACA,iBACA,yBACA,uBACA,mBACA,wBACA,oBACA,mBACA,cACA,cACA,qBACA,eACA,8BACA,6BACA,0BACA,qBACA,mBACA,uBACA,wBACA,yBACA,wBACA,2BACA,6BACA,6BACA,8BACA,4BACA,8BACA,gCACA,uBACA,4BACA,uBACA,4BACA,yBACA,yBACA,6BACA,2BACA,uBACA,sBACA,4BACA,mBACA,wBACA,mBACA,wBACA,eACA,wBACA,oBACA,eACA,qBACA,qBACA,qBACA,sBACA,sBACA,uBACA,sBACA,yBACA,yBACA,yBACA,sBACA,yBACA,yBACA,0BACA,qBACA,0BACA,qBACA,0BACA,qBACA,qBACA,iBACA,sBACA,iBACA,sBACA,mBACA,mBACA,oBACA,oBACA,qBACA,oBACA,uBACA,uBACA,wBACA,wBACA,yBACA,mBACA,wBACA,mBACA,wBACA,oBACA,qBACA,eACA,oBACA,eACA,oBACA,uBACA,wBACA,uBACA,uBACA,eACA,UACA,UACA,cACA,cACA,OACA,YACA,KACA,WACA,QACA,OACA,OACA,iBACA,iBACA,kBACA,kBACA,mBACA,mBACA,eACA,wBACA,sBACA,gCACA,sCACA,0CACA,aACA,kBACA,aACA,qBACA,wBACA,mBACA,oBACA,mBACA,mBACA,0BACA,MACA,WACA,qBACA,kBACA,OACA,SACA,cACA,eACA,SACA,cACA,mBACA,kBACA,MACA,aACA,aACA,qBACA,6BACA,8BACA,cACA,mBACA,iBACA,mBACA,kBACA,oBACA,mBACA,qBACA,mBACA,qBACA,cACA,YACA,qBACA,YACA,mBACA,wBACA,wBACA,oBACA,qBACA,0BACA,iBACA,kBACA,eACA,mBACA,eACA,qBACA,iBACA,wBACA,iBACA,wBACA,oBACA,2BACA,wBACA,oBACA,2BACA,SACA,kBACA,wBACA,sBACA,4BACA,wBACA,4BACA,wBACA,4BACA,kBACA,kBACA,yBACA,sBACA,mBACA,mBACA,uBACA,qBACA,sBACA,gBACA,kBACA,kBACA,oBACA,wBACA,qBACA,mBACA,oBACA,qBACA,qBACA,kBACA,wBACA,mBACA,oBACA,qBACA,MACA,sBACA,gBACA,cACA,kBACA,gBACA,0BACA,eACA,sBACA,sBACA,wBACA,0BACA,kBACA,mBACA,qBACA,qBACA,sBACA,qBACA,uBACA,2BACA,sBACA,sBACA,wBACA,sBACA,wBACA,sBACA,uBACA,uBACA,uBACA,wBACA,8BACA,+BACA,oBACA,6BACA,+BACA,oBACA,oBACA,qBACA,qBACA,2BACA,oBACA,sBACA,yBACA,qBACA,qBACA,uBACA,wBACA,2BACA,oBACA,uBACA,qBACA,mBACA,mBACA,mBACA,kBACA,kBACA,mBACA,mBACA,mBACA,sBACA,sBACA,sBACA,oBACA,oBACA,oBACA,uBACA,uBACA,uBACA,mBACA,kBACA,oBACA,sBACA,mBACA,oBACA,iBACA,wBACA,kBACA,kBACA,iBACA,mBACA,mBACA,kBACA,mBACA,iBACA,qBACA,kBACA,oBACA,WACA,iBACA,cACA,cACA,oBACA,oBACA,cACA,oBACA,iBACA,WACA,cACA,YACA,kBACA,gBACA,kBACA,gBACA,kBACA,uBACA,mBACA,mBACA,qBACA,iBACA,aACA,aACA,oBACA,cACA,eACA,eACA,cACA,kBACA,gBACA,qBACA,aACA,aACA,gCACA,sBACA,wBACA,4BACA,8BACA,uBACA,qBACA,4BACA,uBACA,2BACA,yBACA,yBACA,sCACA,4BACA,gCACA,kCACA,mCACA,sCACA,8BACA,iCACA,+BACA,gCACA,qCACA,oCACA,kCACA,6BACA,sBACA,uBACA,0BACA,uBACA,gCACA,6BACA,gCACA,4BACA,0BACA,iCACA,8BACA,gCACA,4BACA,0BACA,4BACA,6BACA,0BACA,yBACA,0BACA,0BACA,qCACA,wCACA,sCACA,wBACA,4BACA,+BACA,4BACA,qCACA,+BACA,qCACA,mCACA,iCACA,8BACA,mCACA,+BACA,6BACA,gCACA,+BACA,gCACA,6BACA,qCACA,mCACA,sCACA,sCACA,kCACA,qCACA,kCACA,mCACA,mCACA,+BACA,+BACA,8BACA,iCACA,sCACA,+BACA,+BACA,6BACA,qCACA,mCACA,iCACA,8BACA,uBACA,yBACA,sBACA,uBACA,0BACA,uBACA,uBACA,2BACA,wBACA,kCACA,6BACA,cACA,aACA,gBACA,gBACA,kBACA,iBACA,oBACA,kBACA,qBACA,oBACA,kBACA,mBACA,iBACA,mBACA,QACA,MACA,WACA,SACA,kBACA,eACA,kBACA,YACA,YACA,OACA,sBACA,yBACA,wBACA,aACA,gBACA,uBACA,wCACA,wBACA,oCACA,6BACA,yBACA,0BACA,oBACA,qBACA,4BACA,qBACA,sBACA,4BACA,sBACA,yBACA,yBACA,4BACA,4BACA,4BACA,WACA,cACA,iBACA,cACA,kBACA,gBACA,gBACA,oBACA,YACA,iBACA,qBACA,oBACA,sBACA,YACA,gBACA,eACA,kBACA,kBACA,sBACA,wBACA,oBACA,iBACA,QACA,2BACA,2BACA,cACA,mBACA,iBACA,qBACA,gBACA,kBACA,kBACA,mBACA,kBACA,eACA,uBACA,oCACA,wBACA,4BACA,qBACA,YACA,sBACA,mBACA,iBACA,0BACA,kBACA,2BACA,qBACA,qBACA,eACA,aACA,uBACA,6BACA,8BACA,uBACA,6BACA,4BACA,kCACA,wBACA,oBACA,qBACA,yBACA,qBACA,aACA,eACA,qBACA,gBACA,sBACA,OACA,MACA,2BACA,yBACA,kCACA,sCACA,6BACA,+BACA,gCACA,kCACA,iCACA,gCACA,0BACA,yBACA,yBACA,6BACA,+BACA,kCACA,6BACA,mCACA,oCACA,8BACA,6BACA,0BACA,8BACA,oCACA,qCACA,0BACA,yBACA,yBACA,qBACA,0BACA,0BACA,8BACA,qBACA,sBACA,sBACA,0BACA,uBACA,oBACA,qBACA,oBACA,0BACA,0BACA,0BACA,2BACA,2BACA,qBACA,8BACA,qBACA,aACA,iBACA,0BACA,gBACA,wBACA,6BACA,gBACA,mBACA,gBACA,eACA,qBACA,yBACA,uBACA,uBACA,wBACA,sBACA,oBACA,kBACA,kBACA,uBACA,oBACA,mBACA,wBACA,qBACA,iBACA,iBACA,mBACA,qBACA,qBACA,eACA,0BACA,kBACA,wBACA,iBACA,cACA,oBACA,+BACA,kBACA,uBACA,wBACA,4BACA,uBACA,oBACA,mBACA,MACA,OACA,aACA,aACA,SACA,iBACA,qBACA,iBACA,gBACA,oBACA,cACA,eACA,gBACA,gBACA,mBACA,aACA,iBACA,gBACA,yBACA,gBACA,oBACA,gBACA,cACA,kBACA,kBACA,sBACA,gBACA,iBACA,uBACA,eACA,gBACA,aACA,iBACA,gBACA,iBACA,qBACA,qBACA,eACA,mBACA,qBACA,cACA,kBACA,oBACA,eACA,eACA,mBACA,gBACA,iBACA,aACA,uBACA,mBACA,qBACA,gBACA,aACA,uBACA,eACA,oBACA,iBACA,qBACA,wBACA,iBACA,8BACA,eACA,4BACA,qBACA,qBACA,qBACA,yBACA,sBACA,oBACA,mBACA,uBACA,uBACA,iBACA,eACA,oBACA,qBACA,yBACA,oBACA,iBACA,MACA,yBACA,gBACA,qBACA,2BACA,0BACA,kBACA,oBACA,uBACA,mBACA,mBACA,oBACA,yBACA,yBACA,2BACA,0BACA,4BACA,4BACA,oBACA,wBACA,sBACA,iBACA,gBACA,iBACA,kBACA,kBACA,iBACA,gBACA,iBACA,kBACA,kBACA,gBACA,cACA,uBACA,8BACA,8BACA,oBACA,0BACA,qBACA,mBACA,0BACA,yBACA,sBACA,oBACA,gBACA,gBACA,cACA,uBACA,0BACA,qBACA,mBACA,oBACA,kBACA,YACA,YACA,mBACA,mBACA,sBACA,kBACA,sBACA,sBACA,qBACA,sBACA,qBACA,2BACA,yBACA,yBACA,iCACA,iCACA,wBACA,iCACA,wBACA,oBACA,0BACA,oBACA,qBACA,oBACA,mBACA,eACA,iBACA,kBACA,kBACA,oBACA,sBACA,6BACA,wBACA,gBACA,SACA,iBACA,WACA,eACA,gBACA,mCACA,2BACA,kCACA,kCACA,gCACA,mCACA,sCACA,4CACA,gCACA,yCACA,qCACA,4BACA,0BACA,gCACA,uCACA,2BACA,wBACA,+BACA,iBACA,oBACA,yBACA,sBACA,sBACA,2BACA,wBACA,8BACA,gCACA,wBACA,yBACA,sBACA,4BACA,8BACA,yBACA,sBACA,cACA,eACA,eACA,gBACA,uBACA,2BACA,mCACA,uCACA,uBACA,aACA,gBACA,gBACA,gBACA,gBACA,0BACA,2BACA,2BACA,2BACA,6BACA,gCACA,6BACA,sBACA,uBACA,oBACA,yBACA,gBACA,yBACA,oBACA,gBACA,kBACA,qBACA,gBACA,oBACA,kBACA,gBACA,mCACA,mCACA,cACA,aACA,oBACA,qBACA,mBACA,qBACA,mBACA,mBACA,mBACA,aACA,cACA,eACA,gBACA,mBACA,kBACA,iBACA,sBACA,mBACA,iBACA,iBACA,iBACA,kBACA,iBACA,sBACA,mBACA,iBACA,iBACA,iBACA,kBACA,qBACA,mBACA,mBACA,uBACA,8BACA,iBACA,qBACA,kBACA,gBACA,gBACA,sCACA,mCACA,qBACA,mBACA,oBACA,oBACA,wBACA,oBACA,wBACA,2BACA,mBACA,eACA,eACA,gBACA,mBACA,2BACA,2BACA,0BACA,qBACA,qBACA,mBACA,0BACA,qBACA,mBACA,oBACA,oBACA,wBACA,wBACA,uBACA,wBACA,uBACA,sBACA,uBACA,wBACA,kBACA,0BACA,0BACA,2BACA,2BACA,iCACA,kCACA,eACA,aACA,WACA,YACA,mBAshCE3wI,OAphCY,CACd,cACA,kBACA,eACA,gBACA,gBACA,kBACA,sBACA,qBACA,aACA,MACA,WACA,eACA,WACA,aACA,aACA,MACA,uBACA,2BACA,uBACA,uBACA,aACA,eACA,aACA,aACA,eACA,iBACA,eACA,cACA,eACA,cACA,iBACA,gBACA,WACA,iBACA,kCACA,0CACA,yCACA,iCACA,yCACA,wCACA,gCACA,wCACA,qBACA,aACA,eACA,mBACA,mBACA,mBACA,uBACA,qBACA,qBACA,kBACA,SACA,gBACA,gBACA,iBACA,oBACA,oBACA,qBACA,mBACA,mBACA,oBACA,SACA,YACA,SACA,eACA,mBACA,eACA,gBACA,cACA,UACA,iBACA,eACA,kBACA,aACA,oBACA,wBACA,gBACA,iBACA,wBACA,gBACA,kBACA,wBACA,cACA,aACA,aACA,aACA,cACA,eACA,cACA,aACA,aACA,YACA,kBACA,uBACA,oBACA,gBACA,cACA,aACA,aACA,aACA,YACA,iBACA,cACA,SACA,UACA,SACA,WACA,WACA,YACA,SACA,UACA,SACA,SACA,WACA,WACA,WACA,SACA,UACA,WACA,WACA,QACA,WACA,SACA,UACA,WACA,kBACA,mBACA,iBACA,gBACA,kBACA,uBACA,eACA,oBACA,gBACA,mBACA,YACA,aACA,cACA,WACA,UACA,WACA,aACA,UACA,eACA,eACA,UACA,cACA,eACA,aACA,eACA,aACA,aACA,iBACA,wBACA,iBACA,kBACA,kBACA,yBACA,oBACA,qBACA,qBACA,yBACA,2BACA,qBACA,gBACA,oBACA,4BACA,mBACA,2BACA,YACA,cACA,oBACA,oBACA,eACA,eACA,cACA,mBACA,gBACA,gBACA,WACA,aACA,eACA,cACA,WACA,UACA,UACA,WACA,aACA,UACA,WACA,UACA,iBACA,iBACA,WACA,mBACA,qBACA,sBACA,0BACA,gCACA,2BACA,kBACA,6BACA,qBACA,qBACA,kBACA,wBACA,eACA,qBACA,mBACA,0BACA,0BACA,qBACA,oBACA,0BACA,qBACA,cACA,oBACA,oBACA,oBACA,oBACA,oBACA,oBACA,oBACA,oBACA,uBACA,aACA,eACA,YACA,aACA,kBACA,UACA,gBACA,cACA,iBACA,eACA,cACA,iBACA,cACA,gBACA,aACA,wBACA,sBACA,wBACA,sBACA,mBACA,uBACA,sBACA,uBACA,yBACA,wBACA,0BACA,sBACA,iBACA,+BACA,6BACA,+BACA,6BACA,0BACA,8BACA,6BACA,8BACA,gCACA,+BACA,iCACA,6BACA,wBACA,wBACA,uBACA,yBACA,0BACA,yBACA,2BACA,yBACA,wBACA,0BACA,SACA,eACA,aACA,uBACA,uBACA,uBACA,uBACA,uBACA,uBACA,uBACA,uBACA,oBACA,oBACA,qBACA,kBACA,uBACA,uBACA,uBACA,uBACA,uBACA,uBACA,uBACA,uBACA,oBACA,oBACA,qBACA,kBACA,cACA,cACA,gBACA,iBACA,gBACA,kBACA,mBACA,kBACA,oBACA,WACA,iBACA,iBACA,sBACA,oBACA,eACA,oBACA,mBACA,WACA,aACA,mBACA,mBACA,mBACA,mBACA,mBACA,mBACA,mBACA,mBACA,gBACA,uBACA,kBACA,iBACA,mBACA,cACA,gBACA,YACA,UACA,gBACA,cACA,iBACA,kBACA,aACA,WACA,WACA,YACA,YACA,YACA,YACA,YACA,YACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,eACA,eACA,aACA,oBACA,oBACA,oBACA,eACA,aACA,YACA,YACA,eACA,YACA,UACA,YACA,UACA,cACA,WACA,aACA,SACA,cACA,QACA,aACA,aACA,gBACA,yBACA,SACA,YACA,aACA,cACA,cACA,UACA,YACA,yBACA,yBACA,yBACA,6BACA,6BACA,6BACA,wBACA,wBACA,wBACA,wBACA,YACA,YACA,YACA,YACA,WACA,WACA,WACA,WACA,UACA,UACA,UACA,UACA,YACA,eACA,gBACA,eACA,gBACA,WACA,YACA,YACA,gBACA,eACA,iBACA,iBACA,kBACA,iBACA,mBACA,aACA,gBACA,eACA,uBACA,qBACA,wBACA,uBACA,yBACA,2BACA,uBACA,mBACA,kBACA,WACA,gCACA,0BACA,+BACA,2BACA,yBACA,wBACA,qBACA,0BACA,mBACA,uBACA,qBACA,qBACA,sBACA,uBACA,qBACA,sBACA,iBACA,mBACA,iBACA,mBACA,iBACA,sBACA,eACA,8BACA,4BACA,8BACA,kCACA,4BACA,0BACA,wBACA,2BACA,6BACA,0BACA,kCACA,gBACA,kBACA,cACA,UACA,cACA,UACA,cACA,gBACA,cACA,oBACA,cACA,eACA,SACA,UACA,YACA,UACA,WACA,WACA,WACA,iBACA,UACA,SACA,iCACA,iCACA,mCACA,sCACA,kCACA,qCACA,yCACA,oCACA,yBACA,2BACA,8BACA,uBACA,0BACA,sBACA,oBACA,2BACA,qBACA,qBACA,oBACA,qBACA,uBACA,oBACA,0BACA,oBACA,oCACA,kBACA,yBACA,kBACA,mBACA,mBACA,mBACA,iBACA,iBACA,mBACA,mBACA,kBACA,oBACA,gBACA,QACA,oBACA,mBACA,mBACA,aACA,SACA,aACA,SACA,WACA,YACA,aACA,uBACA,oCACA,wBACA,SACA,SACA,SACA,YACA,YACA,UACA,aACA,SACA,gBACA,aACA,cACA,aACA,kBACA,QACA,eACA,gBACA,cACA,iBACA,iBACA,mBACA,uBACA,sBACA,sBACA,mBACA,wBACA,mCACA,wBACA,+BACA,0BACA,uBACA,0BACA,uBACA,uBACA,uBACA,uBACA,kBACA,yBACA,0BACA,sBACA,qBACA,qBACA,8BACA,sBACA,uBACA,4BACA,6BACA,uBACA,wBACA,wBACA,yBACA,6BACA,6BACA,4BACA,kBACA,wBACA,8BACA,kCACA,+BACA,gCACA,kCACA,mCACA,kCACA,gCACA,iCACA,4BACA,2BACA,2BACA,4BACA,4BACA,yBACA,0BACA,2BACA,gCACA,gCACA,KACA,kBACA,eACA,cACA,eACA,eACA,iBACA,kBACA,mBACA,oBACA,uBACA,kBACA,gBACA,iBACA,mBACA,mBACA,gBACA,qBACA,kBACA,iBACA,gBACA,qBACA,iBACA,gBACA,iBACA,gBACA,iBACA,gBACA,iBACA,kBACA,kBACA,gBACA,wBACA,yBACA,wBACA,6BACA,+BACA,kCACA,oBACA,qBACA,qBACA,4BACA,wBACA,wBACA,wBACA,6BACA,kCACA,mCACA,OACA,mBACA,sBACA,cACA,eACA,0BACA,wBACA,eACA,kBACA,mBACA,oBACA,oBACA,qBACA,kBACA,oBACA,mBACA,iBACA,qBACA,oBACA,wBACA,6BACA,gCACA,qBACA,sBACA,qBACA,uBACA,qBACA,wBACA,uBACA,sBACA,8BACA,oBACA,wBACA,4BACA,sBACA,oBACA,cACA,eACA,gBACA,gBACA,iBACA,iCACA,wCACA,kCACA,mCACA,sCACA,+BACA,iCACA,8BACA,mBACA,mBACA,kBACA,mBACA,sBACA,sBACA,qBACA,qBACA,8BACA,6BACA,8BACA,+BACA,iBACA,YACA,WACA,YACA,YACA,kBACA,cACA,cACA,2BACA,6BACA,mBACA,qBACA,2BACA,4BACA,2BACA,4BACA,2BACA,4BACA,iBACA,eACA,iBACA,WACA,kBACA,OACA,UACA,YACA,YACA,oBACA,qBACA,qBACA,qBACA,qBACA,qBACA,qBACA,wBACA,4BACA,2BACA,qBACA,sBACA,qBACA,mBACA,sBACA,wBACA,qBACA,sBACA,uBACA,wBACA,oBACA,mBACA,sBACA,sBACA,uBACA,yBACA,SACA,SACA,YACA,eACA,aACA,aACA,YACA,YACA,UACA,SACA,WACA,YACA,QACA,SACA,SACA,SACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,UACA,YACA,UACA,cACA,UACA,YACA,cACA,WACA,aACA,aACA,aACA,aACA,aACA,aACA,aACA,aACA,aACA,aACA,cACA,YACA,WACA,iBACA,UACA,cACA,YACA,WACA,YACA,WACA,WACA,cACA,SACA,QACA,mBACA,8BACA,QAwME,oBAtMuB,CACzB,QACA,sBACA,WACA,YACA,YACA,YACA,YACA,YACA,YACA,YACA,YACA,YACA,YACA,aACA,aACA,aACA,aACA,aACA,aACA,iBACA,aACA,mBACA,oBACA,uBACA,wBACA,cACA,YACA,aACA,WACA,iBACA,gBACA,qBACA,cACA,eACA,iBACA,gBACA,iBACA,eACA,kBACA,eACA,gBACA,aACA,aACA,QACA,YACA,aACA,oBACA,eACA,aACA,eACA,eACA,aACA,yBACA,MACA,WACA,WACA,oBACA,UACA,oBACA,eACA,UACA,oBACA,SACA,SACA,WACA,KACA,cACA,cACA,cACA,cACA,eACA,cACA,eACA,eACA,oBACA,cACA,iBACA,cACA,eACA,oBACA,mBACA,kBACA,QACA,QACA,cACA,UACA,aACA,UACA,eACA,mBACA,UACA,UACA,eACA,aACA,YACA,UACA,aACA,iBACA,aACA,mBACA,gBACA,wBACA,aACA,aACA,aACA,aACA,sBACA,uBACA,aACA,mBACA,mBACA,uBACA,kBACA,kBACA,YACA,YACA,cACA,qBACA,cACA,gBACA,qBACA,wBACA,wBACA,WACA,iBACA,yBACA,iBACA,yBACA,eACA,eACA,YACA,cACA,cACA,uBACA,oBACA,YACA,eACA,cACA,iBACA,oBACA,sBACA,2BACA,yBACA,oBACA,uBACA,wBACA,OACA,aACA,cACA,YACA,kBACA,aACA,aACA,QACA,SACA,oBACA,QACA,QACA,gBACA,eACA,eACA,iBACA,iBACA,aACA,iBACA,iBACA,gBACA,oBACA,mBACA,iBACA,cACA,eACA,eACA,aACA,kBACA,eACA,aACA,aACA,aACA,UACA,SACA,gBACA,oBACA,IACA,YACA,SACA,IACA,YACA,WAWAghB,SAAU,CACR8nH,EAAKhH,oBACLgH,EAAK/G,qBACL+G,EAAKvH,iBACLuH,EAAKrH,kBACLqH,EAAK5G,eAGX,ItE/+FA4G,GAAK4F,iBAAiB,iBuEmFtB8zD,GAlJA,SAAY15D,GACV,MAwEM2G,EAAW,CACfjL,QA5BU,CACV,QACA,OACA,OACA,QACA,WACA,UACA,QACA,OACA,cACA,MACA,OACA,KACA,OACA,KACA,SACA,YACA,MACA,UACA,QACA,SACA,SACA,SACA,SACA,OACA,OAIA/vI,KAnDY,CACZ,OACA,OACA,YACA,aACA,QACA,UACA,UACA,OACA,QACA,QACA,QACA,SACA,QACA,SACA,SACA,SACA,MACA,OACA,UACA,QAgCAi8I,QA3Ee,CACf,OACA,QACA,OACA,OAwEAC,SAtEgB,CAChB,SACA,MACA,QACA,UACA,OACA,OACA,MACA,OACA,MACA,QACA,QACA,UACA,OACA,UACA,WAyDF,MAAO,CACL9gJ,KAAM,KACN8lG,QAAS,CAAE,UACX4tC,SAAUkM,EACVjO,QAAS,KACTxgH,SAAU,CACR8nH,EAAKhH,oBACLgH,EAAK/G,qBACL,CACEjnF,UAAW,SACXmtF,SAAU,CACRa,EAAKrH,kBACLqH,EAAKvH,iBACL,CACEF,MAAO,IACPp3H,IAAK,OAIX,CACE6wC,UAAW,SACXmtF,SAAU,CACR,CACEzqI,MAAO,6DACP8jI,UAAW,GAEb,CACE9jI,MAAO,sFACP8jI,UAAW,GAEb,CACE9jI,MAAO,wBACP8jI,UAAW,GAEb,CACE9jI,MAAO,uCACP8jI,UAAW,GAEb,CACE9jI,MAAO,wDACP8jI,UAAW,KAIjB,CAAED,MAAO,MAET,CACEvmF,UAAW,WACXuoF,cAAe,OACfp5H,IAAK,cACL47H,YAAY,EACZ7kH,SAAU,CACR8nH,EAAKzG,WACL,CACEvnF,UAAW,SACXumF,MAAO,KACPp3H,IAAK,KACL85H,YAAY,EACZR,SAAUkM,EACVjO,QAAS,WAMrB,IvEhFAsH,GAAK4F,iBAAiB,mBwEOtB+zD,GAxEA,SAAc35D,GAkDZ,MAAO,CACLj5I,KAAM,OACN0zI,SAAU,CACRiB,QApDa,CACf,UACA,SACA,QACA,SACA,SACA,WACA,QACA,SACA,MACA,MACA,QACA,MACA,UACA,QACA,KACA,OACA,OACA,QACA,OACA,QACA,WACA,UACA,eACA,OACA,OACA,SACA,SACA,KACA,OACA,OACA,YACA,MACA,QACA,UACA,QACA,QACA,WACA,mBACA,kBACA,SACA,aACA,MACA,MACA,SACA,OACA,SAOEkM,QAAS,CACP,OACA,QACA,SAGJ1vH,SAAU,CACR8nH,EAAK9G,kBACL8G,EAAKrH,kBACLqH,EAAK5G,cACL,CACEpnF,UAAW,OACXumF,MAAO,eAIf,IxEJAyH,GAAK4F,iBAAiB,qByEmHtBg0D,GArLA,SAAgB55D,GAqKd,MAAO,CACLj5I,KAAM,SACNs2I,kBAAkB,EAClB5C,SAvKe,CACf,OACA,UACA,cACA,cACA,YACA,cACA,iBACA,eACA,eACA,aACA,cACA,SACA,OACA,OACA,UACA,UACA,SACA,YACA,iBACA,WACA,UACA,sBACA,sBACA,QACA,UACA,SACA,UACA,UACA,QACA,UACA,MACA,MACA,WACA,QACA,OACA,QACA,WACA,UACA,KACA,OACA,UACA,QACA,UACA,MACA,KACA,aACA,aACA,SACA,MACA,UACA,YACA,SACA,SACA,SACA,SACA,eACA,QACA,SACA,YACA,MACA,WACA,QACA,WACA,UACA,SACA,QACA,OACA,QACA,OACA,OACA,YACA,aACA,WACA,OACA,UACA,OACA,OACA,QACA,SACA,QACA,MACA,YACA,OACA,QACA,OACA,UACA,UACA,OACA,WACA,MACA,MACA,SACA,SACA,aACA,OACA,UACA,YACA,QACA,MACA,OACA,OACA,WACA,WACA,WACA,QACA,OACA,UACA,UACA,QACA,SACA,QACA,SACA,UACA,OACA,YACA,SACA,UACA,YACA,gBACA,SACA,OACA,YACA,QACA,WACA,iBACA,kBACA,iBACA,YACA,YACA,OACA,OACA,MACA,QACA,WACA,QACA,UACA,OACA,QACA,OACA,YACA,YACA,UACA,cACA,QACA,OACA,OACA,gBACA,OACA,SACA,QACA,YACA,SACA,WACA,OACA,gBACA,kBACA,aACA,aACA,aACA,mBACA,QACA,aAMAviH,SAAU,CACR8nH,EAAKhH,oBACLgH,EAAK/G,qBACL+G,EAAKvH,iBACLuH,EAAKrH,kBACLqH,EAAK7G,YACL6G,EAAK1G,aAIX,IzEhHA0G,GAAK4F,iBAAiB,sB0EEtBi0D,GArEA,SAAiB75D,GACf,MAAMjI,EAAQiI,EAAKjI,MAEnB,MAAO,CACLhxI,KAAM,UACN8lG,QAAS,CAAE,OACXwwC,kBAAkB,EAClBiD,mBAAmB,EACnB7F,SAAU,CACRiB,QAAS,CACP,QACA,WACA,eACA,OACA,QACA,SACA,YACA,YACA,QACA,SACA,WACA,OACA,MAEFkM,QAAS,CACP,OACA,QACA,SAGJ1vH,SAAU,CACR8nH,EAAK9G,kBACL8G,EAAKrH,kBACLqH,EAAK7G,YACL,CACEtgH,MAAO,cACPnkB,MAAO,SACP8jI,UAAW,GAEb,CACE3/G,MAAO,cACP0/G,MAAO,4BACPC,UAAW,GAEb,CACE3/G,MAAO,WACP0/G,MAAO,KACPp3H,IAAK,KACL47H,YAAY,EACZvE,UAAW,GAEb,CACE3/G,MAAO,OACPnkB,MAAO,OACPqoI,YAAY,GAEd,CACElkH,MAAO,SACP0/G,MAAOR,EAAMxtG,OAxDF,yBAwDmBwtG,EAAMX,UAAU,SAC9CoB,UAAW,IAGfE,QAAS,CACP,QACA,SAGN,I1ECAsH,GAAK4F,iBAAiB,oC2EpEtB,SAASzG,EAASA,EAAU17H,EAAM,IAEhC,OADAA,EAAI07H,SAAWA,EACR17H,CACT,aAkLAq2L,GAhLA,SAAgB95D,GACd,MAAMjI,EAAQiI,EAAKjI,MACbE,EAAW,iBACXW,EAAUuG,EAAS,CACvBa,EAAKhH,oBACLgH,EAAK/G,qBACL+G,EAAKpH,QACH,UACA,OACA,CACEJ,UAAW,EACXtgH,SAAU,CACR,CAEEqgH,MAAO,OACPC,UAAW,GAEb,CACExmF,UAAW,SACXumF,MAAO,mBAMX+3D,EAAS,CACbt+I,UAAW,SACXumF,MAAO,iBACPrgH,SAAU,CAAE8nH,EAAK1H,mBAEb2P,EAAS9I,EAAS,CACtBa,EAAK3G,mBACL2G,EAAK5G,gBAED2Q,EAAS5K,EAAS,CACtB,CACE5G,MAAO,MACPp3H,IAAK,OAEP,CACEo3H,MAAO,MACPp3H,IAAK,OAEP,CACEo3H,MAAO,OACPp3H,IAAK,OACLq3H,UAAW,IAEbwH,EAAKvH,iBACLuH,EAAKrH,mBAEP,CAAE3mF,UAAW,WAGPq7I,EAAmB,CACvB34L,MAAO,CACL,yDACA,MACAsrI,EAAK9H,qBAEPr/G,MAAO,CACL,EAAG,UACH,EAAG,gBA0DP,MAAO,CACL9xB,KAAM,SACN0zI,SAAU,CACR,oBAAqB,aACrBmN,QAAS,kBACTj8I,KA5DU,CACZ,OACA,QACA,OACA,MACA,OACA,UACA,QACA,SACA,QAoDE+vI,QAlDa,CAEf,MACA,KACA,KACA,SACA,QAEA,WACA,SACA,WACA,YACA,SACA,UACA,YACA,eACA,QACA,QACA,YACA,OACA,KACA,OACA,MACA,QACA,SACA,OACA,QACA,UACA,WACA,QACA,SACA,MACA,QACA,UACA,aACA,UACA,MACA,SACA,UACA,SACA,aACA,QAWAxjH,SAAU,CACR8nH,EAAK/F,QAAQ,CACXE,OAAQ,SACR3B,UAAW,KAEbI,EACAmR,EACAumD,EACAroD,EACAolD,EACA,CACEr7I,UAAW,OACXumF,MAAO,aACPC,UAAW,GAEb,CAEExmF,UAAW,OACXumF,MAAON,EAAW,UAClBO,UAAW,GAEb,CAGED,MAAO,KACPp3H,IAAK,IACLq3H,UAAW,EACXtgH,SAAU,CACR0gH,EACAmR,EACAumD,EACAroD,EACA,SAGJ,CAEEj2F,UAAW,SACXumF,MAAO,UAAYR,EAAMX,UAAUa,EAAW,KAC9Ca,cAAc,EACd33H,IAAK82H,EAAW,IAChBO,UAAW,IAGfE,QAAS,QAEb,E3E/GgCqhE,IAChC/5D,GAAK4F,iBAAiB,mB4EmCtBo0D,GAvGA,SAAch6D,GACZ,MAAO,CACLj5I,KAAM,OACNs2I,kBAAkB,EAClBnlH,SAAU,CACR,CACE85B,UAAW,OACXumF,MAAO,gEACPC,UAAW,IAGbwH,EAAKpH,QACH,wBACA,KACA,CAAEJ,UAAW,IAEf,CACED,MAAO,qBACPp3H,IAAK,IACL8gI,YAAa,OACbnJ,cAAc,EACdiE,YAAY,GAEd,CACE/qF,UAAW,MACXumF,MAAO,SACPrgH,SAAU,CACR,CACE85B,UAAW,eACXumF,MAAO,QAET,CACEvmF,UAAW,cACXumF,MAAO,YAET,CACEvmF,UAAW,iBACXumF,MAAO,cAET,CACEA,MAAO,QACPp3H,IAAK,QACL+W,SAAU,CACR,CACEqgH,MAAO,cACPp3H,IAAK,QACL07H,aAAa,EACbkC,gBAAgB,EAChB7mH,SAAU,CACR,CACE85B,UAAW,OACXumF,MAAO,SAETyH,EAAKvH,iBACLuH,EAAKrH,kBACL,CACEJ,MAAO,OACPC,UAAW,OAMrB,CACED,MAAO,UACPp3H,IAAK,UACL47H,YAAY,EACZ7kH,SAAU,CACR,CACEqgH,MAAO,YACPp3H,IAAK,OACL07H,aAAa,EACbkC,gBAAgB,EAChB7mH,SAAU,CACR,CACE85B,UAAW,OACXumF,MAAO,OACPC,UAAW,GAEbwH,EAAKvH,iBACLuH,EAAKrH,kBACL,CACEJ,MAAO,OACPC,UAAW,SAQzB,CAAED,MAAO,iBACT,CACEA,MAAO,MACPp3H,IAAK,KACL8gI,YAAa,OACbnJ,cAAc,EACdiE,YAAY,IAIpB,I5EhCAiD,GAAK4F,iBAAiB,yB6EmLtBq0D,GAxPA,SAAoBj6D,GAClB,MAAMjI,EAAQiI,EAAKjI,MACbkP,EAAY,CAChBrI,SAAU,WACViJ,SAAU,CACR,SACA,WACA,aACA,YACA,SACA,WACA,OACA,UACA,MACA,OACA,KACA,KACA,QACA,UACA,MACA,MACA,SACA,MACA,SACA,UACA,eACA,SACA,WACA,WACA,UACA,SACA,OACA,OACA,UAoBEqyD,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ACA,UACA,SACA,MACA,SACA,WACA,SACA,YACA,SACA,UACA,SACA,WACA,UACA,KACA,SACA,QACA,UACA,OACA,QA2BAkM,QAnBe,CACf,QACA,OACA,QAiBAj8I,KAdY,CACZ,OACA,UACA,OACA,QACA,MACA,OACA,QACA,UAOAk8I,SA1BgB,CAChB,QACA,SA2BIiF,EAAa,CACjB96F,UAAW,OACXumF,MAAO,IAAMqU,EACb10H,SAAU,CACR,CACEqgH,MAAO,KACPp3H,IAAK,KACL+W,SAAU,CAAE,WAIZwwH,EAAS,CACb12F,UAAW,SACXumF,MAAO,KACPp3H,IAAK,KACLs5H,SAAUkM,EACVnO,UAAW,EACXtgH,SAAU,CAAE8nH,EAAK/G,sBACjBgC,YAAY,GAGd,MAAO,CACLl0I,KAAM,OACN8lG,QAAS,CAAE,OACX4tC,SAAUkM,EACVjO,QAAS,QACTxgH,SAAU,CACR8nH,EAAKpH,QACH,UACA,OACA,CACEJ,UAAW,EACXtgH,SAAU,CACR,CAEEqgH,MAAO,OACPC,UAAW,GAEb,CACExmF,UAAW,SACXumF,MAAO,iBAMf,CACEA,MAAO,wBACPkC,SAAU,SACVjC,UAAW,GAEbwH,EAAKhH,oBACLgH,EAAK/G,qBACL,CACEV,MAAO,MACPp3H,IAAK,MACL6wC,UAAW,SACX95B,SAAU,CAAE8nH,EAAK1H,mBAEnB0H,EAAKvH,iBACLuH,EAAKrH,kBACL,CACEjkI,MAAO,CACL,oDACA,MACAk4I,GAEF56F,UAAW,CACT,EAAG,UACH,EAAG,gBAGP,CAEEt9C,MAAO,aACPmkB,MAAO,WAET,CACE0/G,MAAO,CACLR,EAAMxtG,OAAO,WAAYqiH,GACzB,MACAA,EACA,MACA,UAEF56F,UAAW,CACT,EAAG,OACH,EAAG,WACH,EAAG,aAGP,CACEumF,MAAO,CACL,SACA,MACAqU,GAEF56F,UAAW,CACT,EAAG,UACH,EAAG,eAEL95B,SAAU,CACRwwH,EACA1I,EAAKhH,oBACLgH,EAAK/G,uBAGT,CAGEsB,cAAe,wBACf/B,UAAW,GAEb,CACED,MAAO,CACL,MAAQsU,EAAmB,QAC3B7M,EAAK9H,oBACL,aAEFlmF,UAAW,CAAE,EAAG,kBAChByoF,SAAUkM,EACVzuH,SAAU,CACR,CACE85B,UAAW,SACXumF,MAAO,KACPp3H,IAAK,KACLs5H,SAAUkM,EACVnO,UAAW,EACXtgH,SAAU,CACR40H,EACA9M,EAAKvH,iBACLuH,EAAKrH,kBACL6T,EACAxM,EAAK/G,uBAGT+G,EAAKhH,oBACLgH,EAAK/G,uBAGTuT,EACAM,GAGN,EvFxM8BuvD,IAC9Br8D,GAAK4F,iBAAiB,6CwFzFtB,MAAM3N,EAAW,2BACX0O,EAAW,CACf,KACA,KACA,KACA,KACA,MACA,QACA,UACA,MACA,MACA,WACA,KACA,SACA,OACA,OACA,QACA,QACA,aACA,OACA,QACA,OACA,UACA,MACA,SACA,WACA,SACA,SACA,MACA,QACA,QACA,QAIA,WACA,QACA,QACA,SACA,SACA,OACA,SACA,UAEA,SAEIC,EAAW,CACf,OACA,QACA,OACA,YACA,MACA,YAIIC,EAAQ,CAEZ,SACA,WACA,UACA,SAEA,OACA,OACA,SACA,SAEA,SACA,SAEA,QACA,eACA,eACA,YACA,aACA,oBACA,aACA,aACA,cACA,cACA,gBACA,iBAEA,MACA,MACA,UACA,UAEA,cACA,oBACA,UACA,WACA,OAEA,UACA,YACA,oBACA,gBAEA,UACA,QAEA,OAEA,eAGIC,EAAc,CAClB,QACA,YACA,gBACA,aACA,iBACA,cACA,YACA,YAGIC,EAAmB,CACvB,cACA,aACA,gBACA,eAEA,UACA,UAEA,OACA,WACA,QACA,aACA,WACA,YACA,qBACA,YACA,qBACA,SACA,YAGIC,EAAqB,CACzB,YACA,OACA,QACA,UACA,SACA,WACA,eACA,iBACA,SACA,UAGIC,EAAY,GAAG18G,OACnBw8G,EACAF,EACAC,UAmmBFw1D,GAvlBA,SAAoBt8D,GAClB,MAAMjI,EAAQiI,EAAKjI,MAcboP,EAAalP,EACbmP,EACG,KADHA,EAEC,MAIDC,EAAU,CACd9O,MAAO,sBACPp3H,IAAK,4BAKLmmI,kBAAmB,CAAC5yI,EAAOmrG,KACzB,MAA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MACA,WACA,SACA,KACA,SACA,KACA,MACA,MACA,QACA,QACA,SACA,QACA,SACA,OACA,MACA,QACA,QACA,SA2QAkM,QAzPmB,CACnB,OACA,SACA,aACA,aACA,MACA,MACA,QACA,QACA,QACA,gBACA,YACA,YACA,MACA,QACA,QACA,QACA,eACA,YACA,YACA,gBACA,eACA,uBACA,qBACA,cACA,UACA,YACA,UACA,QACA,KACA,UACA,UACA,KACA,SACA,QACA,SACA,OACA,QACA,IACA,KAmNAC,SAjMoB,CACpB,gBACA,kBACA,eACA,eACA,kBACA,gBACA,qBACA,iBACA,gBACA,cACA,iBACA,oBACA,mBACA,iBACA,MACA,gBACA,QACA,iBACA,WACA,SACA,WACA,YACA,SACA,YACA,OACA,cACA,oBACA,iBACA,mBACA,QACA,UACA,SACA,UACA,OACA,OACA,YACA,QACA,YACA,MACA,QACA,UACA,aACA,aACA,aACA,qBACA,YACA,aACA,SACA,UACA,WACA,UACA,SACA,QACA,aACA,SACA,aACA,UACA,QACA,WACA,WACA,WACA,aACA,cACA,gBACA,cACA,OACA,oBACA,OACA,cACA,cACA,WACA,OACA,iBACA,YACA,qBACA,OACA,UACA,UACA,UACA,WACA,YACA,OACA,KACA,WACA,YACA,WACA,SACA,iBACA,cACA,aACA,eACA,YACA,MACA,SACA,QACA,QACA,QACA,OACA,UACA,qBACA,wBACA,aACA,WACA,WACA,iBACA,gBACA,YACA,OACA,SACA,SACA,cACA,UACA,mBACA,SACA,SACA,aACA,UACA,SACA,eACA,mBACA,gBACA,OACA,mBACA,oBACA,OACA,yBACA,MACA,YACA,WACA,QACA,sBACA,OACA,gBACA,MACA,QACA,aACA,eACA,oBACA,MACA,SACA,OACA,qBACA,YACA,eACA,eACA,gBACA,kBACA,gBACA,SACA,mBACA,WACA,YACA,qBACA,SACA,cACA,OACA,sBACA,OACA,cACA,QACA,QACA,OACA,YACA,UACA,OACA,UACA,SACA,SAC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W,IAEb,CACExmF,UAAW,YACXt9C,MAAO,cAET,CACEs9C,UAAW,UACXt9C,MAAO,MAETsrI,EAAK9G,mBAGX,IhGsEA8G,GAAK4F,iBAAiB,mBiGFtB85D,GAzFA,SAAc1/D,GACZ,MAAM2/D,EAAQ,4BAMRj3D,EAAS,CACb7vH,MAAO,SACP0/G,MAAO,KACPp3H,IAAK,YACL85H,YAAY,EACZzC,UAAW,EACXtgH,SAAU,CACR,CACEW,MAAO,SACP0/G,MAAO,IACPp3H,IAAK,KAEP,CACE0X,MAAO,UACPnkB,MAnBW,CACf,OACA,QACA,MAgBoB6gB,KAAK,MAEvB,CACEsD,MAAO,WACPnkB,MAAO,0BAET,CACEmkB,MAAO,WACPnkB,MAAO,+CAIPkrM,EAAkB,CACtBlrM,MAAO,CACLirM,EACA,UAEF9mL,MAAO,CACL,EAAG,WAELX,SAAU,CAAEwwH,IAGd,OADAA,EAAOxwH,SAASqnB,QAAQqgK,GACjB,CACL74M,KAAM,OACNmxB,SAAU,CAER,CACExjB,MAAO,CACL,KACAirM,EACA,UAEF9mL,MAAO,CACL,EAAG,cACH,EAAG,WAILkiH,OAAQ,CACN7iH,SAAU,CACR,CACExjB,MAAO,KACPmkB,MAAO,iBAIbX,SAAU,CACRwwH,IAIJ,CACEh0I,MAAO,CACL,KACAirM,EACA,MAEF9mL,MAAO,CACL,EAAG,cACH,EAAG,UACH,EAAG,iBAKb,IjGKAmnH,GAAK4F,iBAAiB,uCkGnGtB,MAyKM2F,EAAO,CA3HX,IACA,OACA,UACA,UACA,QACA,QACA,IACA,aACA,OACA,SACA,SACA,UACA,OACA,OACA,KACA,MACA,UACA,MACA,MACA,KACA,KACA,KACA,WACA,aACA,SACA,SACA,OACA,KACA,KACA,KACA,KACA,KACA,KACA,SACA,SACA,OACA,IACA,SACA,MACA,QACA,MACA,MACA,QACA,SACA,KACA,OACA,OACA,OACA,MACA,SACA,KACA,WACA,SACA,IACA,UACA,IACA,QACA,OACA,UACA,SACA,SACA,OACA,SACA,UACA,MACA,QACA,QACA,KACA,WACA,QACA,KACA,QACA,OACA,KACA,KACA,MACA,QAIA,OACA,IACA,SACA,OACA,UACA,MACA,SACA,SACA,UACA,gBACA,sBACA,cACA,mBACA,oBACA,oBACA,UACA,iBACA,UACA,UACA,eACA,WACA,qBACA,SACA,eACA,iBACA,iBACA,OACA,SACA,UACA,QACA,OACA,OACA,UACA,WACA,OACA,OACA,MACA,WACA,QACA,gBACA,YAWIC,EAAiB,CACrB,YACA,cACA,eACA,QACA,cACA,cACA,sBACA,gBACA,eACA,eACA,gBACA,OACA,SACA,QACA,kBACA,aACA,cACA,iBACA,kBACA,UACA,uBACA,mBACA,yBACA,+BACA,aACA,OACA,YACA,SACA,QAEA,YACA,YACA,aACA,cACAt+F,OAAO3K,UAGHkpG,EAAiB,CACrB,SACA,WACA,QACA,UACA,UACA,UACA,UACA,MACA,WACA,OACA,QACA,UACA,QACA,cACA,gBACA,aACA,SACA,QACA,gBACA,eACA,MACA,OACA,eACA,QACA,gBACA,WACA,UACA,KACA,OACA,aACA,eACA,OACA,OACA,aACA,MACA,YACA,UACA,iBACA,eACA,mBACA,cACA,aACA,eACA,WACA,eACA,OACA,oBACA,YACA,aACA,WACA,QACA,OACA,QACA,SACA,gBACA,eACA,QACA,UACA,SACAv+F,OAAO3K,UAGHmpG,EAAkB,CACtB,QACA,WACA,SACA,MACA,aACA,eACA,aACA,gBACA,SACA,OACA,cACA,YACA,UACA,kBACAx+F,OAAO3K,UAEHopG,EAAa,CACjB,eACA,gBACA,cACA,aACA,qBACA,MACA,cACA,YACA,wBACA,kBACA,sBACA,qBACA,sBACA,4BACA,iBACA,uBACA,kBACA,sBACA,wBACA,qBACA,4BACA,aACA,eACA,kBACA,sBACA,aACA,wBACA,wBACA,kBACA,mBACA,mBACA,oBACA,sBACA,wBACA,wBACA,oBACA,kBACA,iBACA,aACA,SACA,eACA,qBACA,mBACA,yBACA,yBACA,yBACA,qBACA,2BACA,2BACA,2BACA,qBACA,qBACA,gBACA,sBACA,4BACA,6BACA,sBACA,sBACA,kBACA,eACA,wBACA,0BACA,eACA,sBACA,sBACA,qBACA,sBACA,qBACA,gBACA,sBACA,oBACA,0BACA,0BACA,0BACA,sBACA,4BACA,4BACA,4BACA,sBACA,sBACA,cACA,oBACA,oBACA,oBACA,gBACA,eACA,qBACA,qBACA,qBACA,iBACA,0BACA,4BACA,eACA,aACA,mBACA,yBACA,0BACA,mBACA,mBACA,eACA,SACA,YACA,uBACA,gBACA,WACA,iBACA,YACA,oBACA,aACA,WACA,aACA,aACA,cACA,eACA,eACA,eACA,cACA,QACA,OACA,YACA,YACA,QACA,sBACA,8BACA,gBACA,kBACA,eACA,eACA,cACA,aACA,cACA,oBACA,oBACA,oBACA,cACA,eACA,UACA,UACA,+BACA,2BACA,gCACA,yBACA,0BACA,YACA,iBACA,iBACA,UACA,qBACA,oBACA,gBACA,cACA,MACA,YACA,aACA,SACA,KACA,KACA,YACA,UACA,oBACA,cACA,oBACA,eACA,OACA,eACA,YACA,SACA,OACA,aACA,iBACA,YACA,YACA,cACA,YACA,QACA,cACA,gBACA,OACA,OACA,eACA,cACA,wBACA,eACA,yBACA,sBACA,eACA,YACA,mBACA,cACA,iBACA,eACA,aACA,iBACA,0BACA,4BACA,uBACA,wBACA,eACA,0BACA,oBACA,0BACA,qBACA,yBACA,uBACA,wBACA,0BACA,cACA,sBACA,MACA,+BACA,6BACA,OACA,YACA,oBACA,iBACA,iBACA,cACA,kBACA,oBACA,WACA,WACA,eACA,iBACA,gBACA,sBACA,wBACA,qBACA,sBACA,SACA,sBACA,wBACA,UACA,OACA,oBACA,kBACA,mBACA,WACA,iBACA,uBACA,cACA,QACA,aACA,cACA,kBACA,oBACA,eACA,mBACA,qBACA,YACA,kBACA,gBACA,eACA,UACA,OACA,iBACA,iBACA,aACA,cACA,mBACA,aACA,mBACA,sBACA,kBACA,SACA,eACA,mBACA,qBACA,gBACA,gBACA,oBACA,sBACA,cACA,eACA,aACA,cACA,SACA,aACA,aACA,eACA,QACA,OACA,cACA,mBACA,qBACA,qBACA,oBACA,qBACA,oBACA,YACA,iBACA,aACA,YACA,cACA,gBACA,cACA,YACA,YACA,oBACA,aACA,aACA,aACA,iBACA,aACA,kBACA,YACA,iBACA,aACA,kBACA,YACA,iBACA,WACA,YACA,WACA,YACA,SACA,OACA,SACA,aACA,kBACA,SACA,gBACA,kBACA,cACA,kBACA,gBACA,UACA,QACA,UACA,UACA,gBACA,iBACA,gBACA,gBACA,WACA,kBACA,iBACA,uBACA,kBACA,gBACA,aACA,aACA,UACA,sBACA,4BACA,6BACA,wBACA,wBACA,UACA,gBACA,oBACA,sBACA,iBACA,iBACA,qBACA,uBACA,eACA,gBACA,cACA,OACA,mBACA,oBACA,oBACA,cACA,QACA,cACA,eACA,cACA,qBACA,gBACA,cACA,aACA,iBACA,WACA,kBACA,sBACA,qBACA,SACA,IACA,SACA,OACA,aACA,cACA,QACA,SACA,UACA,aACA,gBACA,QACA,kBACA,gBACA,sBACA,0BACA,4BACA,uBACA,uBACA,2BACA,6BACA,qBACA,sBACA,oBACA,iBACA,uBACA,2BACA,6BACA,wBACA,wBACA,4BACA,8BACA,sBACA,uBACA,qBACA,oBACA,mBACA,mBACA,kBACA,uBACA,uBACA,kBACA,mBACA,kBACA,wBACA,eACA,gBACA,kBACA,QACA,WACA,MACA,aACA,eACA,SACA,mBACA,oBACA,iBACA,kBACA,oBACA,iBACA,eACA,WACA,eACA,aACA,iBACA,kBACA,cACA,uBACA,kBACA,wBACA,uBACA,uBACA,2BACA,wBACA,4BACA,gBACA,sBACA,yBACA,sBACA,cACA,eACA,mBACA,gBACA,iBACA,cACA,mBACA,iBACA,wBACA,0BACA,YACA,iBACA,kBACA,iBACA,MACA,eACA,YACA,gBACA,mBACA,kBACA,aACA,sBACA,mBACA,sBACA,sBACA,6BACA,YACA,eACA,cACA,c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Ns2I,kBAAkB,EAClB5C,SAAU,CACRiB,QACE,4/BAYFkM,QACE,gfAMFC,SACE,o4KAqDJ3vH,SAAU,CACR+0K,EACA,CACEj7I,UAAW,UACXumF,MAAO,kBAET,CACEvmF,UAAW,WACXuoF,cAAe,WACfp5H,IAAK,IACL+W,SAAU,CACR+0K,EACAsU,EACAvhE,EAAKvH,iBACLuH,EAAKrH,kBACLqH,EAAK3G,mBACL2G,EAAK5G,cACLkoE,IAGJ,CACEtvJ,UAAW,WACXumF,MAAO,aACPp3H,IAAK,IACLs5H,SAAU,MACVviH,SAAU,CACRqpL,EACAD,GAEF9oE,UAAW,GAEb,CACE+B,cAAe,aACfp5H,IAAK,IACL+W,SAAU,CACR+0K,EACAsU,EACAvhE,EAAKvH,iBACLuH,EAAKrH,kBACLqH,EAAK3G,mBACL2G,EAAK5G,cACLkoE,IAGJ,CACEtvJ,UAAW,OACXmtF,SAAU,CACR,CACE5G,MAAO,wBACPC,UAAW,IAEb,CAAED,MAAO,QACT,CAAEA,MAAO,UAGbyH,EAAKvH,iBACLuH,EAAKrH,kBACLqH,EAAK3G,mBACL2G,EAAK5G,cACLkoE,GACA/2K,OAAOujK,GACTp1D,QAAS,mBAEb,IpGpEAsH,GAAK4F,iBAAiB,6CqGtGtB,MAAMe,EAAW,CACf,KACA,KACA,KACA,KACA,MACA,QACA,UACA,MACA,MACA,WACA,KACA,SACA,OACA,OACA,QACA,QACA,aACA,OACA,QACA,OACA,UACA,MACA,SACA,WACA,SACA,SACA,MACA,QACA,QACA,QAIA,WACA,QACA,QACA,SACA,SACA,OACA,SACA,UAEA,SAEIC,EAAW,CACf,OACA,QACA,OACA,YACA,MACA,YAyFIK,EAAY,GAAG18G,OAtBI,CACvB,cACA,aACA,gBACA,eAEA,UACA,UAEA,OACA,WACA,QACA,aACA,WACA,YACA,qBACA,YACA,qBACA,SACA,YAlFY,CAEZ,SACA,WACA,UACA,SAEA,OACA,OACA,SACA,SAEA,SACA,SAEA,QACA,eACA,eACA,YACA,aACA,oBACA,aACA,aACA,cACA,cACA,gBACA,iBAEA,MACA,MACA,UACA,UAEA,cACA,oBACA,UACA,WACA,OAEA,UACA,YACA,oBACA,gBAEA,UACA,QAEA,OAEA,eAGkB,CAClB,QACA,YACA,gBACA,aACA,iBACA,cACA,YACA,oBAwQFi3K,GA9NA,SAAoBxhE,GAClB,MA4CM2H,EAAa,CACjBjM,QAASiL,EAASp8G,OAhCQ,CAC1B,OACA,SACA,QACA,OACA,KACA,KACA,OACA,MACA,KACA,KACA,OACA,MACA,KACA,OACA,YACA,OACA,KACA,MACA,cACA,OACA,OACA,SACA,OACA,MACA,YACA,YACA,UACA,SACA,cAIAq9G,QAAShB,EAASr8G,OA1CQ,CAC1B,MACA,KACA,KACA,MACA,KACA,OACA,SAoCAs9G,SAAUZ,EAAU18G,OA/CO,CAC3B,MACA,WA+CI8kK,EAAc,8CACdC,EAAQtvD,EAAKH,QAAQG,EAAKzG,WAAY,CAAEhB,MAAO82D,IAC/CnnD,EAAQ,CACZl2F,UAAW,QACXumF,MAAO,MACPp3H,IAAK,KACLs5H,SAAUkN,GAEN85D,EAAe,CACnBzvJ,UAAW,QACXumF,MAAO,cACPp3H,IAAK,oCACLs5H,SAAUkN,GAENxd,EAAc,CAClB6V,EAAK3G,mBACL,CACErnF,UAAW,SACXumF,MAAO,0GACPC,UAAW,EACXuC,OAAQ,CACN55H,IAAK,WACLq3H,UAAW,IAGf,CACExmF,UAAW,SACXmtF,SAAU,CACR,CACE5G,MAAO,MACPp3H,IAAK,MACL+W,SAAU,CAAE8nH,EAAK1H,mBAEnB,CACEC,MAAO,IACPp3H,IAAK,IACL+W,SAAU,CAAE8nH,EAAK1H,mBAEnB,CACEC,MAAO,MACPp3H,IAAK,MACL+W,SAAU,CACR8nH,EAAK1H,iBACL4P,EACAu5D,IAGJ,CACElpE,MAAO,IACPp3H,IAAK,IACL+W,SAAU,CACR8nH,EAAK1H,iBACL4P,EACAu5D,IAGJ,CACElpE,MAAO,KACPp3H,IAAK,SACL47H,YAAY,KAIlB,CACE/qF,UAAW,SACXmtF,SAAU,CACR,CACE5G,MAAO,KACPp3H,IAAK,WACL+W,SAAU,CACRgwH,EACAlI,EAAK9G,oBAGT,CAGEX,MAAO,6CAGb,CAAEA,MAAO,IAAM82D,GACf,CACE92D,MAAO,KACPp3H,IAAK,KACL23H,cAAc,EACdiE,YAAY,EACZkF,YAAa,eAGjBiG,EAAMhwH,SAAWiyG,EAEjB,MAAMue,EAAS,CACb12F,UAAW,SACXumF,MAAO,MACPsE,aAAa,EAGb3kH,SAAU,CACR,CACEqgH,MAAO,KACPp3H,IAAK,KACLs5H,SAAUkN,EACVzvH,SAAU,CAAE,QAASqS,OAAO4/F,MAO5BkjE,EAAmB,CACvBluD,SAAU,CACR,CAAEzqI,MAAO,CACP,WACA26L,EACA,gBACAA,IAEF,CAAE36L,MAAO,CACP,WACA26L,KAGJx2K,MAAO,CACL,EAAG,cACH,EAAG,yBAEL4hH,SAAUkN,GAGZ,MAAO,CACL5gJ,KAAM,aACN8lG,QAAS,CAAE,MACX4tC,SAAUkN,EACVjP,QAAS,OACTxgH,SAAUiyG,EAAY5/F,OAAO,CAC3By1G,EAAKpH,QAAQ,SAAU,UACvBoH,EAAK9G,kBA7BO,CAAEX,MAAO,2BA+BrB,CACEvmF,UAAW,WACX95B,SAAU,CACRo3K,EACA5mD,GAEF7L,aAAa,EACbsC,SAAU,CACR,CACE5G,MAAO,IAAM82D,EAAc,6CAC3BluL,IAAK,UAEP,CACEo3H,MAAO,IAAM82D,EAAc,uDAC3BluL,IAAK,kBAEP,CACEo3H,MAAO,IAAM82D,EAAc,uDAC3BluL,IAAK,sBAIXksL,EACA,CACE90D,MAAO82D,EAAc,IACrBluL,IAAK,IACL07H,aAAa,EACbG,WAAW,EACXxE,UAAW,KAInB,ErGnRoCkpE,IACpC1hE,GAAK4F,iBAAiB,mBsG+BtB+7D,GA5HA,SAAc3hE,GACZ,MAAMjI,EAAQiI,EAAKjI,MACbE,EAAW,yBA6BXg1D,EAAW,CACfj7I,UAAW,WACXmtF,SAAU,CACR,CAAE5G,MAAOR,EAAMxtG,OAAO,IAAK0tG,IAC3B,CAAEM,MAAO,QACT,CAAEA,MAAO,UAGP6V,EAAW,CACfp8F,UAAW,QACXmtF,SAAU,CACR,CAAE5G,MAAOR,EAAMxtG,OAAO,IAAK0tG,IAC3B,CAAEM,MAAO,QACT,CAAEA,MAAOR,EAAMxtG,OAAO,IAAK0tG,IAC3B,CAAEM,MAAOR,EAAMxtG,OAAO,OAAQ0tG,IAG9B,CAAEM,MAAO,UAIb,MAAO,CACLxxI,KAAM,UAEN0zI,SAAU,CACRiB,QAAS,ksDAqCT/vI,KAAM,0GAGRusB,SAAU,CA7FC,CACX85B,UAAW,OACXumF,MAAO,mBAgGLyH,EAAKpH,QAAQ,QAAS,KAAM,CAAEJ,UAAW,IACzCwH,EAAKpH,QAAQ,IAAK,KAClB,CACE5mF,UAAW,SACXumF,MAAO,IACPp3H,IAAK,IACL+W,SAAU,CACR,CACE85B,UAAW,cACXt9C,MAAO,YAIb05I,EAtGgB,CAClBp8F,UAAW,cACXwmF,UAAW,EACXD,MAAO,KARQ,CACfvmF,UAAW,WACXwmF,UAAW,EACXD,MAAO,KA2GL00D,EA5FU,CACZj7I,UAAW,SACXmtF,SAAU,CAAE,CAAE5G,MAAO,gBAErBC,UAAW,GAZE,CACbxmF,UAAW,SACXmtF,SAAU,CACR,CAAE5G,MAAO,kCACT,CAAEA,MAAO,oDAEXC,UAAW,IAmGf,ItG5BAwH,GAAK4F,iBAAiB,kBuG7BtBg8D,GAnEA,SAAa5hE,GACX,MAKM6hE,EAAc,CAClB7vJ,UAAW,SACXumF,MAAO,IACPp3H,IAAK,IACL+W,SAAU,CAToB,CAC9B85B,UAAW,QACXumF,MAAO,eAUHupE,EAAc,CAClB9vJ,UAAW,SACXwmF,UAAW,EACXD,MAAOyH,EAAK5H,aAoBd,MAAO,CACLrxI,KAAM,kCACN2xI,QAAS,IACTxgH,SAAU,CACR2pL,EACA,CACE7vJ,UAAW,UACXmtF,SAAU,CACRa,EAAKpH,QAAQ,KAAM,KACnBoH,EAAKpH,QAAQ,OAAQ,SAEvBJ,UAAW,GAEbspE,EACA,CACE9vJ,UAAW,UACXmtF,SAAU,CACR,CAAE5G,MAAO,yBACT,CAAEA,MAAO,6VAvBK,CACpBvmF,UAAW,WACXumF,MAAO,s0HAda,CACpBvmF,UAAW,UACXmtF,SAAU,CACR,CAAE5G,MAAO,2DACT,CAAEA,MAAO,8/MACT,CAAEA,MAAO,sBACT,CAAEA,MAAO,yBACT,CAAEA,MAAO,wKACT,CAAEA,MAAO,yDAgCT,CACEvmF,UAAW,OACXumF,MAAO,qEAIf,IvGgCAyH,GAAK4F,iBAAiB,kBwGzBtBm8D,GAxEA,SAAa/hE,GACX,MAAMgiE,EAAuB,WACvBC,EAAuB,WACvBC,EAAgB,CACpB3pE,MAAOypE,EACP7gM,IAAK8gM,EACL/pL,SAAU,CAAE,SAERoyK,EAAW,CACftqD,EAAKpH,QAAQ,QAAUopE,EAAuB,IAAK,KACnDhiE,EAAKpH,QACH,KAAOopE,EACPC,EACA,CACE/pL,SAAU,CAAEgqL,GACZ1pE,UAAW,MAIjB,MAAO,CACLzxI,KAAM,MACN8lG,QAAS,CAAC,SACV4tC,SAAU,CACRmE,SAAUoB,EAAK9H,oBACf0P,QAAS,iBACTlM,QAAS,0FACTmM,SAAA,wlCAiBF3vH,SAAUoyK,EAAS//J,OAAO,CACxB,CACEynB,UAAW,WACXuoF,cAAe,WACfp5H,IAAK,MACL+W,SAAU,CACR8nH,EAAKH,QAAQG,EAAKzG,WAAY,CAAEhB,MAAO,sDACvC,CACEvmF,UAAW,SACXumF,MAAO,MACPwG,gBAAgB,EAChB7mH,SAAUoyK,IAEZ//J,OAAO+/J,IAEXtqD,EAAK5G,cACL4G,EAAKvH,iBACLuH,EAAKrH,kBACL,CACE3mF,UAAW,SACXumF,MAAOypE,EACP7gM,IAAK8gM,EACL/pL,SAAU,CAAEgqL,GACZ1pE,UAAW,KAInB,IxG4BAwH,GAAK4F,iBAAiB,uByGlBtBu8D,GAhFA,SAAkBniE,GAEhB,MAAMitD,EAAW,CACfj7I,UAAW,WACXmtF,SAAU,CACR,CACE5G,MAAO,SAAWyH,EAAK9H,oBAAsB,MAC7ChgH,SAAU,CAAE8nH,EAAK1H,mBAEnB,CAAEC,MAAO,oBAIP0V,EAAe,CACnBj8F,UAAW,SACXumF,MAAO,IACPp3H,IAAK,IACL+W,SAAU,CACR8nH,EAAK1H,iBACL20D,IAIEmV,EAAO,CACXpwJ,UAAW,WACXumF,MAAO,eACPp3H,IAAK,KACLs5H,SAAU,CAAEoN,SACR,kPAIJ3vH,SAAU,CACR+0K,EACAh/C,IAIE+pD,EAAa,CAAEz/D,MAAO,IAAMyH,EAAK9H,oBAAsB,mBAYvDmqE,EAAS,CACbrwJ,UAAW,UACXumF,MAAO,WACPp3H,IAAK,IACL+W,SAAU,CAAE+0K,IAEd,MAAO,CACLlmM,KAAM,WACN8lG,QAAS,CACP,KACA,MACA,QAEF4tC,SAAU,CACRmE,SAAU,SACVlD,QAAS,6HAGXxjH,SAAU,CACR8nH,EAAK9G,kBACL+zD,EACAh/C,EACAm0D,EACApK,EAjCS,CACXhmJ,UAAW,OACXumF,MAAO,YACPp3H,IAAK,IACLs5H,SAAU,CACRmE,SAAU,UACVlD,QAAS,WA6BT2mE,GAGN,IzGqBAriE,GAAK4F,iBAAiB,8C0G3GtB,MAAM08D,EAAiB,CACrB,cACA,eACA,QACA,eACA,eACA,qBACA,QACA,MACA,SACA,aACA,WACA,sBACA,8BACA,uBACA,kBACA,mBACA,kBACA,oBACA,oBACA,eACA,iBACA,sBACA,iBACA,aACA,WACA,eACA,yBACA,yBACA,8BACA,uBACA,4BACA,yBACA,yBACA,6BACA,cACA,aACA,gBACA,uBACA,WACA,SACA,uBACA,6BACA,aACA,mBACA,yBACA,cACA,gBACA,gBACA,WACA,QACA,mBACA,WACA,iBACA,gBACA,kBACA,oBACA,WACA,gBACA,uBACA,2BACA,6BACA,kBACA,cACA,wBACA,kBACA,QACA,wBACA,mBACA,eACA,cACA,kBACA,sBACA,qBACA,SACA,cACA,aACA,SACA,cACA,aACA,oBACA,kBACA,6BACA,sBACA,4BACA,uBACA,iBACA,qBACA,aACA,iBACA,YACA,kBACA,iBACA,MACA,oBACA,oBACA,8BACA,kCACA,oBACA,wBACA,eACA,kBACA,kBACA,mBACA,4BACA,oBACA,yBACA,yBACA,qBACA,UACA,WACA,kBACA,iBACA,eACA,iBACA,uBACA,mBACA,wBACA,eACA,iBACA,eACA,oBACA,gBACA,WACA,cACA,cACA,gBACA,mBACA,iBACA,iBACA,MACA,sBACA,SACA,gBACA,eACA,YACA,cACA,cACA,eACA,UACA,gBACA,uBACA,4BACA,qBACA,uBACA,gBACA,uBACA,mBACA,mBACA,qBACA,iBACA,WACA,cACA,qBACA,mBACA,WACA,aACA,mBACA,iBACA,kBACA,kBACA,UACA,aACA,UACA,mBACA,kBACA,0BACA,YACA,eACA,gBACA,uBACA,gBACA,uBACA,WACA,WACA,YACA,UACA,QACA,kBACA,cACA,aACA,qBACA,kBACA,WACA,SACA,cACA,cACA,WACA,cACA,QACA,gBACA,aACA,UACA,SACA,UACA,SACA,UACA,SACA,UACA,eACA,cACA,YACA,SACA,UACA,SACA,qBACA,UACA,SACA,UACA,OACA,MACA,SACA,SACA,iBACA,mBACA,eACA,0BACA,cACA,SACA,gBACA,YACA,QACA,kBACA,aACA,cACA,eACA,YACA,WACA,YACA,cACA,SACA,cACA,gBACA,eACA,aACA,SACA,QACA,aACA,WACA,aACA,cACA,MACA,YACA,aACA,aACA,SACA,aACA,cACA,WACA,qBACA,cACA,mBACA,SACA,qBACA,yBACA,cACA,cACA,oBACA,iBACA,eACA,oBACA,sBACA,WACA,cACA,yBACA,kBACA,cACA,gBACA,gBACA,iBACA,sBACA,mBACA,gBACA,kBACA,aACA,oBACA,sBACA,eACA,iBACA,aACA,wBACA,kBACA,uBACA,wBACA,oBACA,yBACA,sBACA,iBACA,sBACA,0BACA,wBACA,oBACA,wBACA,kBACA,gBACA,eACA,yBACA,oBACA,OACA,kBACA,YACA,yBACA,aACA,iBACA,WACA,QACA,aACA,eACA,iBACA,aACA,QACA,eACA,gBACA,wBACA,gBACA,eACA,yBACA,sBACA,kBACA,gBACA,uBACA,YACA,aACA,cACA,cACA,gBACA,gBACA,YACA,sBACA,iBACA,gBACA,mBACA,cACA,iBACA,iBACA,YACA,aACA,cACA,yBACA,eACA,gBACA,oBACA,iBACA,oBACA,eACA,WACA,WACA,iBACA,aACA,kBACA,YACA,YACA,SACA,cACA,eACA,gBACA,cACA,eACA,kBACA,mBACA,8BACA,aACA,YACA,cACA,eACA,mBACA,kBACA,sBACA,YACA,YACA,sBACA,+BACA,eACA,iBACA,uBACA,aACA,eACA,yBACA,WACA,sBACA,aACA,qBACA,uBACA,aACA,qBACA,kBACA,eACA,YACA,YACA,qBACA,2BACA,uBACA,oBACA,mBACA,yBACA,sBACA,gBACA,aACA,oBACA,cACA,aACA,cACA,mBACA,iBACA,iBACA,OACA,WACA,YACA,aACA,YACA,kBACA,OACA,YACA,mBACA,UACA,iBACA,YACA,aACA,YACA,oBACA,OACA,gBACA,oBACA,kBACA,wBACA,2BACA,4BACA,kBACA,aACA,uBACA,0BACA,YACA,mBACA,WACA,OACA,OACA,iBACA,iBACA,kCACA,WACA,aACA,eACA,mBACA,sBACA,YACA,2BACA,UACA,YACA,aACA,qBACA,iBACA,aACA,aACA,WACA,WACA,mBACA,YACA,sBACA,0BACA,YACA,oBACA,uBACA,uBACA,6BACA,uBACA,6BACA,UACA,uBACA,OACA,SACA,QACA,oBACA,eACA,QACA,QACA,QACA,sBACA,qBACA,+BACA,gCACA,aACA,wBACA,6BACA,mBACA,iBACA,SACA,oBACA,UACA,UACA,cACA,UACA,UACA,cACA,OACA,2BACA,mBACA,mCACA,wBACA,kBACA,UACA,wBACA,UACA,oBACA,cACA,mBACA,0BACA,iBACA,wBACA,iBACA,kBACA,4BACA,sBACA,WACA,oBACA,iBACA,eACA,eACA,aACA,iBACA,kBACA,cACA,YACA,WACA,sBACA,WACA,uBACA,uBACA,kBACA,uBACA,4BACA,cACA,+BACA,wBACA,uBACA,oBACA,kBACA,eACA,+BACA,wBACA,uBACA,kBACA,yBACA,qBACA,+BACA,SACA,WACA,SACA,YACA,SACA,QACA,UACA,SACA,eACA,gBACA,SACA,mBACA,sBACA,QACA,uBACA,wBACA,iBACA,QACA,YACA,oBACA,gBACA,QACA,QACA,wBACA,iBACA,sBACA,0BACA,iBACA,gBACA,sBACA,gBACA,sBACA,wBACA,4BACA,4BACA,8BACA,sBACA,6BACA,WACA,cACA,6BACA,gBACA,oBACA,OACA,OACA,WACA,WACA,eACA,OACA,OACA,YACA,aACA,iBACA,WACA,QACA,YACA,QACA,6BACA,iBACA,0BACA,kBACA,eACA,kBACA,kBACA,kBACA,WACA,gBACA,WACA,iBACA,eACA,mBACA,mBACA,0BACA,SACA,qBACA,6BACA,2BACA,eACA,qBACA,sBACA,gBACA,iBACA,iBACA,SACA,MACA,mBACA,UACA,gBACA,QACA,QACA,UACA,qBACA,WACA,QACA,aACA,YACA,YACA,YACA,cACA,mBACA,WACA,kBACA,MACA,gBACA,SACA,qBACA,mBACA,QACA,aACA,qBACA,uBACA,QACA,oBACA,wBACA,kBACA,eACA,eACA,oBACA,2BACA,kBACA,yBACA,kBACA,iBACA,sBACA,6BACA,cACA,gBACA,cACA,cACA,iBACA,yBACA,eACA,cACA,eACA,iBACA,yBACA,SACA,YACA,YACA,mBACA,aACA,iBACA,aACA,kBACA,mBACA,cACA,iBACA,gBACA,kBACA,aACA,iBACA,eACA,cACA,yBACA,OACA,YACA,kBACA,mBACA,aACA,oBACA,YACA,eACA,IACA,cACA,gBACA,mBACA,kBACA,eACA,eACA,UACA,gBACA,eACA,aACA,mBACA,SACA,eACA,mBACA,iBACA,sBACA,yBACA,qBACA,gBACA,iCACA,2BACA,aACA,kBACA,SACA,MACA,UACA,uBACA,aACA,eACA,iBACA,UACA,uBACA,oBACA,YACA,YACA,YACA,YACA,YACA,YACA,YACA,YACA,mBACA,eACA,QACA,gBACA,WACA,aACA,OACA,UACA,gBACA,QACA,0BACA,WACA,gBACA,qBACA,eACA,qBACA,eACA,cACA,MACA,YACA,iBACA,aACA,UACA,kBACA,OACA,oBACA,eACA,kBACA,qBACA,kBACA,eACA,cACA,cACA,oBACA,wBACA,oBACA,0BACA,sBACA,aACA,0BACA,yBACA,yBACA,mBACA,YACA,iBACA,wBACA,kBACA,mBACA,iBACA,YACA,gBACA,eACA,oBACA,0BACA,SACA,yBACA,YACA,sBACA,mBACA,uBACA,iBACA,oBACA,cACA,aACA,WACA,YACA,aACA,QACA,WACA,YACA,WACA,mBACA,kBACA,oBACA,uBACA,YACA,SACA,cACA,YACA,mBACA,iBACA,gBACA,kCACA,cACA,mBACA,gBACA,QACA,qBACA,gBACA,cACA,sBACA,iBACA,uBACA,gBACA,kBACA,mBACA,sBACA,gBACA,yBACA,0BACA,cACA,qBACA,mBACA,YACA,kBACA,oBACA,yBACA,yBACA,2BACA,gBACA,qBACA,iBACA,aACA,iBACA,mBACA,2BACA,uBACA,gBACA,cACA,cACA,eACA,aACA,wBACA,wBACA,oBACA,aACA,aACA,QACA,aACA,WACA,iBACA,WACA,cACA,cACA,qBACA,kBACA,eACA,kBACA,mBACA,mBACA,qBACA,kBACA,mBACA,wBACA,gBACA,eACA,wBACA,OACA,mBACA,qBACA,sBACA,SACA,YACA,YACA,cACA,aACA,eACA,gBACA,cACA,iBACA,qBACA,uCACA,uCACA,iCACA,uCACA,oCACA,eACA,WACA,qBACA,wBACA,yBACA,+BACA,WACA,cACA,QACA,WACA,kBACA,eACA,mBACA,mBACA,gBACA,YACA,cACA,qBACA,OACA,oBACA,WACA,gBACA,aACA,kBACA,YACA,QACA,aACA,2BACA,QACA,SACA,eACA,sBACA,UACA,kBACA,eACA,mBACA,YACA,eACA,mBACA,cACA,iBACA,kBACA,gBACA,cACA,kBACA,mBACA,gBACA,WACA,cACA,mBACA,cACA,yBACA,6BACA,wBACA,eACA,qBACA,eACA,WACA,uBACA,YACA,aACA,cACA,cACA,eACA,cACA,kBACA,+BACA,uBACA,yBACA,iBACA,YACA,SACA,oBACA,cACA,oBACA,oBACA,kBACA,mBACA,iBACA,UACA,kBACA,QACA,YACA,eACA,eACA,eACA,gBACA,YACA,oBACA,cACA,gBACA,gBACA,uBACA,uBACA,WACA,cACA,cACA,mBACA,SACA,gBACA,eACA,aACA,wBACA,gBACA,cACA,iBACA,wBACA,cACA,aACA,aACA,mBACA,SACA,mBACA,oBACA,aACA,cACA,eACA,iBACA,eACA,cACA,cACA,cACA,cACA,cACA,cACA,cACA,sBACA,mBACA,YACA,2BACA,YACA,kBACA,aACA,cACA,yBACA,qBACA,kBACA,uBACA,cACA,kBACA,qBACA,oBACA,UACA,WACA,uBACA,oBACA,gCACA,mBACA,gBACA,mBACA,sBACA,4BACA,8BACA,4BACA,kBACA,aACA,0BACA,gBACA,iBACA,mBACA,mBACA,wBACA,UACA,mBACA,qBACA,YACA,gBACA,kBACA,qBACA,kBACA,cACA,gBACA,oBACA,oBACA,oBACA,wBACA,2BACA,UACA,cACA,gBACA,aACA,cACA,kBACA,qBACA,8BACA,yBACA,yBACA,WACA,iBACA,mBACA,qBACA,kBACA,YACA,wBACA,cACA,OACA,UACA,kBACA,kBACA,sBACA,oBACA,UACA,gBACA,YACA,eACA,eACA,qBACA,eACA,gBACA,YACA,uBACA,kBACA,uBACA,8BACA,qBACA,4BACA,oBACA,YACA,qBACA,cACA,UACA,sBACA,2BACA,kBACA,0BACA,8BACA,qBACA,qBACA,iCACA,+BACA,+BACA,eACA,cACA,gCACA,iBACA,WACA,gBACA,qBACA,gBACA,oBACA,kBACA,YACA,qBACA,oBACA,iBACA,iBACA,YACA,aACA,cACA,cACA,kBACA,eACA,eACA,0BACA,sBACA,0BACA,gBACA,iBACA,sBACA,oBACA,cACA,UACA,cACA,WACA,oBACA,eACA,WACA,oBACA,qBACA,mBACA,0BACA,iBACA,uBACA,wBACA,6BACA,gBACA,kBACA,kBACA,gBACA,eACA,cACA,gBACA,WACA,iBACA,mBACA,eACA,qBACA,uBACA,UACA,gBACA,mBACA,0BACA,yBACA,wBACA,4BACA,qBACA,qBACA,wBACA,4BACA,oBACA,uBACA,mBACA,iBACA,kBACA,mBACA,oBACA,cACA,oBACA,cACA,oBACA,kBACA,sBACA,4BACA,iBACA,mBACA,qBACA,iBACA,oBACA,gBACA,mBACA,WACA,iBACA,iBACA,iBACA,iBACA,UACA,wBACA,6BACA,mBACA,wBACA,sBACA,yBACA,sBACA,0BACA,iBACA,WACA,YACA,qBACA,WACA,cACA,gBACA,WACA,eACA,UACA,kBACA,6BACA,eACA,kBACA,cACA,sBACA,sBACA,kBACA,MACA,OACA,eACA,iBACA,eACA,cACA,MACA,OACA,WACA,WACA,YACA,YACA,QACA,gBACA,kBACA,qBACA,aACA,oBACA,kCACA,mBACA,kBACA,oBACA,eACA,0BACA,aACA,cACA,SACA,WACA,aACA,8BACA,qBACA,qBACA,0BACA,WACA,cACA,qBACA,gBACA,eACA,gBACA,wBACA,4BACA,gBACA,sBACA,wBACA,eACA,kBACA,iBACA,aACA,gCACA,2BACA,iCACA,iBACA,sBACA,gBACA,yBACA,sBACA,oBACA,oBACA,kBACA,qBACA,aACA,eACA,oBACA,+BACA,+BACA,kBACA,QACA,wBACA,gBACA,iBACA,kBACA,cACA,MACA,OACA,YACA,aACA,gBACA,eACA,OACA,WACA,SACA,SACA,YACA,mBACA,WACA,6BACA,8BACA,MACA,SACA,OACA,mBACA,aACA,kBACA,cACA,eACA,uBACA,qBACA,eACA,QACA,eACA,sBACA,cACA,OACA,aACA,uBACA,SACA,cACA,aACA,WACA,cACA,qBACA,2BACA,mCACA,IACA,oBACA,UACA,6BACA,gBACA,SACA,SACA,UACA,kBACA,qBACA,oBACA,UACA,aACA,gBACA,WACA,gBACA,gBACA,kBACA,mBACA,YACA,eACA,UACA,sBACA,eACA,gBACA,iBACA,OACA,aACA,QACA,iBACA,iBACA,YACA,aACA,eACA,kBACA,gBACA,eACA,WACA,kBACA,eACA,mBACA,aACA,cACA,gBACA,cACA,WACA,YACA,gBACA,YACA,aACA,aACA,kBACA,YACA,cACA,oBACA,oBACA,UACA,WACA,qBACA,gBACA,YACA,YACA,UACA,qBACA,UACA,WACA,WACA,gBACA,mBACA,QACA,WACA,eACA,UACA,cACA,2BACA,sBACA,iBACA,YACA,qBACA,YACA,UACA,cACA,cACA,qBACA,UACA,gBACA,gBACA,2BACA,mBACA,mBACA,kBACA,gBACA,eACA,0BACA,yBACA,4BACA,kBACA,iBACA,wBACA,wBACA,cACA,wBACA,oBACA,oBACA,yBACA,wBACA,0BACA,yBACA,oBACA,mBACA,yBACA,sBACA,4BACA,kBACA,iBACA,0BACA,wBACA,eACA,0BACA,wBACA,8BACA,oBACA,sBACA,eACA,gBACA,QACA,iBACA,0BACA,2BACA,yBACA,aACA,SACA,mBACA,0BACA,sBACA,6BACA,eACA,eACA,mBACA,MACA,eACA,UACA,YACA,SACA,2BACA,kBACA,yBACA,cACA,gBACA,wBACA,iBACA,kBACA,mBACA,qBACA,iBACA,aACA,gBACA,eACA,uBACA,oBACA,wBACA,kBACA,qBACA,kBACA,iBACA,oBACA,YACA,wBACA,qBACA,oBACA,aACA,mBACA,aACA,cACA,kBACA,mBACA,cACA,gBACA,qBACA,SACA,WACA,QACA,iBACA,aACA,mBACA,oBACA,aACA,uBACA,eACA,yBACA,MACA,cACA,kBACA,gBACA,4BACA,eACA,aACA,cACA,aACA,mBACA,mBACA,iBACA,uBACA,UACA,gBACA,cACA,oBACA,mBACA,yBACA,WACA,wBACA,iBACA,kBACA,SACA,eACA,cACA,cACA,iBACA,eACA,eACA,gBACA,UACA,gBACA,oBACA,mBACA,kBACA,kBACA,kBACA,qBACA,iBACA,uBACA,cACA,gBACA,mBACA,yBACA,uBACA,mBACA,0BACA,4BACA,mBACA,aACA,oBACA,iBACA,aACA,SACA,gBACA,gBACA,WACA,0BACA,4BACA,kBACA,2BACA,qBACA,aACA,YACA,aACA,eACA,gBACA,gBACA,iBACA,mBACA,YACA,mBACA,YACA,YACA,gBACA,aACA,iBACA,gBACA,qBACA,qBACA,oBACA,wBACA,eACA,aACA,kBACA,qBACA,kBACA,4BACA,oBACA,qBACA,0BACA,mBACA,gBACA,4BACA,oBACA,2BACA,gBACA,2BACA,2BACA,wBACA,wBACA,mBACA,mBACA,eACA,iBACA,gBACA,uBACA,gBACA,qBACA,8BACA,oBACA,sBACA,iCACA,2BACA,qBACA,mBACA,eACA,YACA,cACA,OACA,UACA,iBACA,aACA,cACA,WACA,YACA,8BACA,UACA,kBACA,mBACA,cACA,kBACA,gBACA,eACA,gBACA,mBACA,cACA,iBACA,sBACA,mBACA,iBACA,oBACA,aACA,cACA,sBACA,wBACA,oBACA,qBACA,sBACA,mCACA,yBACA,YACA,MACA,aACA,SACA,WACA,WACA,cACA,YACA,WACA,eACA,aACA,UACA,YACA,KACA,aACA,cACA,oBACA,+BACA,mCACA,qBACA,mBACA,yBACA,eACA,gCACA,iBACA,qBACA,sBACA,gBACA,MACA,YACA,WACA,WACA,eACA,SACA,sBACA,wBACA,kBACA,kBACA,uBACA,gBACA,sBACA,2BACA,uBACA,mBACA,iBACA,gBACA,oBACA,oBACA,iBACA,OACA,YACA,eACA,mBACA,sBACA,oBACA,iBACA,oBACA,qBACA,kBACA,qBACA,aACA,UACA,eACA,aACA,qBACA,cACA,gBACA,YACA,iBACA,kBACA,gBACA,OACA,eACA,gBACA,SACA,wBACA,cACA,KACA,wBACA,kBACA,iBACA,mBACA,UACA,WACA,iBACA,WACA,UACA,aACA,oBACA,2BACA,qBACA,eACA,kBACA,gBACA,mBACA,0BACA,sBACA,sBACA,cACA,mBACA,mBACA,iBACA,kBACA,iBACA,oBACA,2BACA,IACA,kBACA,iBACA,yBACA,OACA,iBACA,eACA,YACA,aACA,cACA,UACA,4BACA,eACA,cACA,sBACA,YACA,mBACA,eACA,WACA,YACA,aACA,kBACA,cACA,aACA,aACA,WACA,YACA,eACA,eACA,aACA,iBACA,WACA,cACA,QACA,wBACA,YACA,oBACA,YACA,kBACA,mBACA,WACA,gBACA,uBACA,iBACA,iBACA,aACA,qBACA,WACA,qBACA,uBACA,eACA,oBACA,cACA,cACA,wBACA,eACA,UACA,cACA,mBACA,cACA,YACA,mBACA,YACA,YACA,cACA,mBACA,YACA,sBACA,YACA,cACA,gBACA,aACA,6BACA,gBACA,qBACA,YACA,eACA,kBACA,yBACA,wBACA,iBACA,kBACA,YACA,wBACA,wBACA,QACA,cACA,cACA,cACA,2BACA,UACA,UACA,SACA,UACA,kBACA,cACA,MACA,SACA,kBACA,cACA,YACA,YACA,cACA,aACA,oBACA,kBACA,QACA,wBACA,kBACA,SACA,cACA,kBACA,eACA,iBACA,cACA,iBACA,aACA,iBACA,mBACA,iBACA,sBACA,iBACA,cACA,eACA,iBACA,mBACA,cACA,UACA,gBACA,cACA,SACA,iBACA,QACA,eACA,YACA,aACA,UACA,YACA,cACA,yBACA,aACA,MACA,OACA,OACA,UACA,UACA,qBACA,UACA,WACA,kBACA,YACA,cACA,uBACA,eACA,sBACA,wBACA,wBACA,wBACA,mBACA,0BACA,iBACA,qBACA,oBACA,cACA,sBACA,SACA,aACA,iBACA,cACA,WACA,cACA,WACA,YACA,iBACA,wBACA,gBACA,iBACA,6BACA,iBACA,qBACA,wBACA,iBACA,oBACA,qBACA,mBACA,kBACA,uBACA,sBACA,YACA,iBACA,QACA,YACA,iBACA,eACA,kBACA,cACA,cACA,sBACA,eACA,qBACA,cACA,SACA,mBACA,gBACA,gBACA,6BACA,cACA,aACA,kBACA,SACA,OACA,aACA,gBACA,MACA,SACA,YACA,oBACA,iBACA,kBACA,cACA,eACA,gBACA,uBACA,eACA,gBACA,iBACA,WACA,mBACA,0BACA,oBACA,gCACA,2BACA,+BACA,mBACA,eACA,SACA,yBACA,kBACA,aACA,eACA,eACA,aACA,iBACA,kBACA,mBACA,iBACA,iBACA,YACA,sBACA,cACA,YACA,wBACA,gBACA,aACA,iBACA,eACA,gCACA,mBACA,mBACA,uBACA,qBACA,iBACA,kBACA,wBACA,mBACA,sBACA,0BACA,qBACA,wBACA,qBACA,wBACA,wBACA,gBACA,UACA,iBACA,eACA,uBACA,2BACA,YACA,WACA,YACA,iBACA,gBACA,iBACA,SACA,iBACA,YACA,aACA,kBACA,oCACA,iBACA,gBACA,aACA,mBACA,uBACA,cACA,kBACA,OACA,UACA,gBACA,sBACA,WACA,QACA,gBACA,gBACA,kBACA,iBACA,oBACA,mBACA,2BACA,oBACA,eACA,iBACA,mBACA,qBACA,eACA,6BACA,yBACA,8BACA,oBACA,iBACA,sBACA,eACA,6BACA,kBACA,YACA,aACA,0BACA,YACA,iBACA,cACA,YACA,OACA,eACA,gBACA,cACA,WACA,cACA,gBACA,aACA,uBACA,cACA,cACA,WACA,kBACA,WACA,gBACA,yBACA,eACA,gBACA,eACA,YACA,iBACA,gBACA,eACA,uBACA,YACA,WACA,gBACA,iBACA,iBACA,eACA,oBACA,WACA,cACA,iBACA,wBACA,cACA,WACA,UACA,eACA,mBACA,sBACA,cACA,gBACA,gBACA,sBACA,qBACA,OACA,gBACA,aACA,aACA,eACA,aACA,eACA,cACA,gBACA,YACA,cACA,mBACA,6BACA,gBACA,mBACA,gBACA,cACA,2BACA,sBACA,oBACA,yBACA,YACA,WACA,UACA,cACA,wBACA,yBACA,kBACA,2BACA,yBACA,uBACA,uBACA,qBACA,uBACA,sBACA,yBACA,gBACA,yBACA,2BACA,eACA,wBACA,cACA,yBACA,YACA,cACA,YACA,YACA,cACA,uBACA,WACA,oBACA,cACA,iBACA,kBACA,eACA,kBACA,cACA,sBACA,iBACA,eACA,2BACA,WACA,YACA,kBACA,qBACA,6BACA,kBACA,wBACA,sBACA,aACA,WACA,uBACA,eACA,mBACA,mBACA,mBACA,0BACA,6BACA,oBACA,gBACA,sBACA,qBACA,kBACA,gBACA,6BACA,OACA,gBACA,0BACA,mBACA,kBACA,QACA,YACA,+BACA,gBACA,mBACA,mBACA,wBACA,mCACA,kBACA,sBACA,MACA,SACA,oBACA,cACA,aACA,aACA,iBACA,iBACA,OACA,cACA,UACA,YACA,eACA,gBACA,aACA,WACA,QACA,iBACA,OACA,WACA,WACA,eACA,YACA,gBACA,kBACA,OACA,YACA,aACA,WACA,WACA,cACA,qBACA,iBACA,iBACA,WACA,YACA,oBACA,eACA,iBACA,aACA,MACA,SACA,aACA,sBACA,SACA,cACA,aACA,wBACA,eACA,UACA,iBACA,cACA,eACA,qBACA,aACA,WACA,uBACA,YACA,cACA,gBACA,cACA,UACA,kBACA,0BACA,UACA,qBACA,wBACA,mBACA,sBACA,aACA,mBACA,mBACA,aACA,mBACA,gBACA,oBACA,2BACA,gBACA,wBACA,mBACA,sBACA,mBACA,oBACA,OACA,aACA,kCACA,cACA,iCACA,iBACA,cACA,qBACA,eACA,QACA,WACA,kBACA,SACA,aACA,aACA,YACA,iBACA,eACA,YACA,aACA,aACA,kBACA,qBACA,sBACA,QACA,qBACA,gCACA,WACA,WACA,WACA,WACA,SACA,kBACA,iBACA,mBACA,oBACA,uBACA,wBACA,WACA,iBACA,aACA,UACA,aACA,iBACA,mBACA,uBACA,iBACA,mBACA,2BACA,eACA,QACA,4BACA,uBACA,kBACA,iBACA,mBACA,yBACA,oBACA,gBACA,uBACA,qBACA,kBACA,iBACA,qBACA,mBACA,yBACA,4BACA,6BACA,mBACA,OACA,WACA,iBACA,WACA,eACA,iCACA,cACA,aACA,eACA,WACA,mBACA,oBACA,kBACA,wBACA,iCACA,+BACA,8BACA,qBACA,oBACA,sBACA,0BACA,iBACA,iBACA,oBACA,wBACA,gBACA,sBACA,uBACA,iBACA,gBACA,gBACA,eACA,wBACA,gBACA,qBACA,0BACA,cACA,cACA,eACA,cACA,mBACA,aACA,cACA,QACA,oBACA,mBACA,aACA,eACA,sBACA,SACA,WACA,2BACA,iBACA,4BACA,iBACA,kBACA,cACA,eACA,aACA,iBACA,mBACA,iBACA,uCACA,uCACA,oCACA,iBACA,MACA,cACA,UACA,4BACA,4BACA,qBACA,uBACA,yBACA,gBACA,sBACA,2BACA,qBACA,2BACA,mBACA,sBACA,8BACA,wBACA,uBACA,mCACA,uBACA,qBACA,uBACA,yBACA,sBACA,UACA,kCACA,aACA,eACA,cACA,UACA,eACA,gBACA,cACA,iBACA,YACA,kBACA,0BACA,iBACA,YACA,YACA,iBACA,iBACA,kBACA,mBACA,kBACA,kBACA,qBACA,iBACA,cACA,eACA,UACA,kBACA,cACA,kBACA,mBACA,cACA,cACA,eACA,oBACA,sBACA,6BACA,eACA,oBACA,kBACA,eACA,sBACA,kBACA,sBACA,gBACA,WACA,gBACA,wBACA,eACA,cACA,WACA,YACA,YACA,cACA,cACA,uBACA,uBACA,YACA,qBACA,iCACA,wBACA,gBACA,sBACA,wBACA,iBACA,gBACA,wBACA,gBACA,0BACA,+BACA,sCACA,6BACA,oCACA,WACA,aACA,qBACA,UACA,aACA,cACA,iBACA,iBACA,gBACA,oBACA,WACA,kBACA,qBACA,gBACA,cACA,YACA,qBACA,gBACA,aACA,0BACA,aACA,YACA,eACA,gBACA,eACA,mBACA,2BACA,aACA,eACA,iBACA,oBACA,MACA,aACA,iBACA,cACA,gCACA,oBACA,WACA,8BACA,oBACA,gBACA,OACA,cACA,cACA,8BACA,eACA,sBACA,0BACA,OACA,iBACA,OACA,WACA,iBACA,qBACA,4BACA,eACA,eACA,eACA,QACA,UACA,qBACA,yBACA,cACA,kBACA,YACA,eACA,gBACA,kBACA,qBACA,gBACA,sBACA,iBACA,iBACA,sBACA,WACA,WACA,aACA,gBACA,uBACA,gBACA,mBACA,cACA,qBACA,gBACA,iBACA,kBACA,uBACA,8BACA,qBACA,4BACA,mBACA,eACA,eACA,kBACA,gBACA,qBACA,4BACA,mBACA,0BACA,mBACA,yBACA,cACA,kBACA,gBACA,oBACA,YACA,mBACA,cACA,kBACA,cACA,sBACA,iBACA,YACA,cACA,aACA,eACA,4BACA,SACA,cACA,mBACA,YACA,aACA,WACA,YACA,aACA,OACA,YACA,UACA,eACA,mBACA,mBACA,mBACA,iBACA,cACA,oBACA,cACA,eACA,aACA,QACA,gBACA,OACA,eACA,UACA,mBACA,oBACA,kBACA,eACA,kBACA,mBACA,iBACA,kBACA,uBACA,qBACA,0BACA,YACA,mBACA,YACA,YACA,iBACA,YACA,gBACA,kBACA,UACA,mBACA,uBACA,uBACA,gBACA,gBACA,qBACA,kBACA,YACA,2BACA,mBACA,yBACA,cACA,aACA,uBACA,yBACA,kBACA,uBACA,wBACA,8BACA,oBACA,eACA,eACA,qBACA,cACA,iBACA,WACA,yBACA,YACA,YACA,kBACA,oBACA,kBACA,gBACA,mBACA,uBACA,WACA,WACA,eACA,kBACA,oBACA,aACA,sBACA,cACA,uBACA,eACA,qBACA,iBACA,OACA,eACA,eACA,YACA,iBACA,OACA,cACA,kBACA,mBACA,wBACA,cACA,UACA,aACA,cACA,QACA,gBACA,sBACA,mBACA,qBACA,oBACA,2BACA,2BACA,oBACA,kBACA,cACA,iBACA,cACA,WACA,wBACA,oBACA,sBACA,sBACA,qBACA,OACA,uBACA,WACA,YACA,mBACA,0BACA,UACA,QACA,aACA,QACA,aACA,QACA,aACA,QACA,aACA,QACA,aACA,uBACA,aACA,gBACA,uBACA,cACA,sBACA,gBACA,cACA,iBACA,iBACA,gBACA,kBACA,iBACA,oBACA,eACA,gBACA,gBACA,YACA,cACA,wBACA,gBACA,wBACA,qBACA,kCACA,uBACA,mBACA,iBACA,qBACA,YACA,aACA,iBACA,OACA,UACA,kBACA,eACA,YACA,WACA,cACA,WACA,kBACA,gBACA,WACA,aACA,iBACA,kBACA,2BACA,aACA,aACA,+BACA,mBACA,WACA,oBACA,eACA,cACA,kBACA,eACA,MACA,kBACA,eACA,YACA,kBACA,cACA,yBACA,iBACA,+BACA,iBACA,oBACA,+BACA,oBACA,+BACA,oBACA,+BACA,6BACA,oBACA,+BACA,kBACA,YACA,kBACA,4BACA,aACA,cACA,qBACA,8BACA,qBACA,IACA,WACA,UACA,iBACA,YACA,cACA,WACA,iBACA,KACA,aACA,aACA,mBACA,iBACA,oBACA,mBACA,wBACA,mBACA,KACA,QACA,UACA,oBACA,gBACA,kBACA,WACA,cACA,aACA,aACA,oBACA,mBACA,gBACA,yBACA,qBACA,aACA,kBACA,eACA,uBACA,aACA,gBACA,YACA,eACA,kBACA,eACA,iBACA,gBACA,gBACA,oBACA,eACA,iBACA,2BACA,YACA,YACA,kBACA,gBACA,kBACA,kBACA,qBACA,gBACA,gBACA,cACA,uBACA,oBACA,iBACA,kBACA,gBACA,cACA,oBACA,2BACA,uBACA,6BACA,gBACA,iBACA,gBACA,iBACA,iBACA,cACA,eACA,cACA,aACA,eACA,cACA,eACA,oBACA,YACA,gBACA,cACA,WACA,eACA,iBACA,mBACA,iCACA,gBACA,uBACA,eACA,oBACA,SACA,kBACA,eACA,eACA,cACA,cACA,kBACA,eACA,cACA,eACA,sBACA,cACA,YACA,YACA,kBACA,iBACA,uBACA,eACA,cACA,gBACA,YACA,sBACA,YACA,YACA,aACA,sBACA,uBACA,oBACA,gBACA,YACA,iBACA,UACA,SACA,yBACA,kBACA,iBACA,gBACA,eACA,wBACA,KACA,aACA,WACA,gBACA,iBACA,gBACA,kBACA,uBACA,uBACA,mBACA,qBACA,qBACA,uBACA,wBACA,mBACA,qBACA,yBACA,cACA,oBACA,uBACA,2BACA,sBACA,qBACA,YACA,oBACA,SACA,2BACA,oBACA,mBACA,sBACA,8BACA,kBACA,2BACA,wBACA,gBACA,yBACA,uBACA,UACA,uBACA,aACA,WACA,aACA,gBACA,kBACA,iBACA,iBACA,iBACA,eACA,sBACA,eACA,gBACA,WACA,QACA,kBACA,kBACA,cACA,kBACA,sBACA,YACA,eACA,mCACA,8BACA,2BACA,iBACA,qBACA,+BACA,4BACA,uBACA,wBACA,sBACA,aACA,iBACA,2BACA,0BACA,cACA,QACA,eACA,kBACA,UACA,QACA,eACA,mBACA,wBACA,aACA,gBACA,uBACA,YACA,gBACA,kBACA,gBACA,cACA,aACA,gBACA,cACA,cACA,oBACA,uBACA,SACA,oBACA,uBACA,mBACA,gBACA,QACA,aACA,oBACA,WACA,kBACA,WACA,UACA,iBACA,6BACA,WACA,UACA,gBACA,kBACA,gBACA,cACA,cACA,oBACA,WACA,iBACA,WACA,gBACA,WACA,YACA,2BACA,cACA,0BACA,oBACA,aACA,eACA,kCACA,wBACA,0BACA,gBACA,qBACA,sBACA,yBACA,iBACA,oBACA,2BACA,yBACA,cACA,oBACA,qBACA,YACA,oBACA,yBACA,gBACA,eACA,WACA,uBACA,kBACA,uBACA,kBACA,iBACA,gBACA,OACA,UACA,yBACA,mCACA,6BACA,aACA,+BACA,oCACA,2BACA,uBACA,aACA,cACA,iBACA,6BACA,kCACA,6BACA,0BACA,kBACA,mBACA,2BACA,0BACA,8BACA,sBACA,yBACA,mBACA,sBACA,kBACA,kBACA,kBACA,kBACA,kBACA,kBACA,kBACA,kBACA,kBACA,kBACA,kBACA,kBACA,0BACA,yBACA,qBACA,eACA,wBACA,gBACA,0BACA,qBACA,0BACA,2BACA,0BACA,sBACA,mCACA,oBACA,YACA,uBACA,iBACA,YACA,yBACA,aACA,oBACA,mBACA,sBACA,cACA,SACA,OACA,kBACA,UACA,iBACA,sBACA,WACA,YACA,aACA,uBACA,kBACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,gBACA,WACA,WACA,WACA,UACA,WACA,WACA,WACA,eACA,aACA,WACA,eACA,eACA,eACA,eACA,oBACA,sBACA,OACA,aACA,SACA,cACA,iBACA,wBACA,WACA,sBACA,2BACA,aACA,oBACA,yBACA,eACA,iBACA,IACA,YACA,qBACA,eACA,kBACA,eACA,6BACA,WACA,iBACA,kBACA,gBACA,2BACA,uBACA,sBACA,YACA,YACA,YACA,YACA,aACA,iBACA,sBACA,gBACA,iBACA,4BACA,eACA,UACA,MACA,MACA,uBACA,gBACA,UACA,cACA,aACA,WACA,kBACA,SACA,aACA,mBACA,OACA,YACA,UACA,YACA,UACA,WACA,cACA,kBACA,WACA,cACA,iBACA,kBACA,kBACA,gBACA,kBACA,WACA,aACA,YACA,wBACA,iBACA,8BACA,mBACA,kBACA,aACA,0BACA,WACA,iBACA,6BACA,yBACA,WACA,QACA,UACA,gBACA,mBACA,eACA,aACA,kBACA,YACA,WACA,mBACA,WACA,QACA,aACA,kBACA,kBACA,QACA,aACA,aACA,gBACA,qBACA,WACA,mBACA,eACA,mBACA,kBACA,sBACA,mBACA,YACA,kBACA,0BACA,mBACA,QACA,SACA,OACA,WACA,oBACA,cACA,gBACA,SACA,gBACA,mBACA,qBACA,oBACA,oBACA,WACA,MACA,aACA,YACA,cACA,YACA,oBACA,sBACA,eACA,0BACA,eACA,2BACA,OACA,YACA,eACA,sBACA,oBACA,iBACA,oBACA,iBACA,kBACA,UACA,eACA,gBACA,eACA,kBACA,oBACA,mBACA,kBACA,eACA,kBACA,aACA,gBACA,mBACA,WACA,iBACA,cACA,eACA,gBACA,gBACA,mBACA,YACA,YACA,eACA,SACA,cACA,WACA,OACA,YACA,mBACA,gBACA,gBACA,cACA,WACA,iBACA,WACA,YACA,kBACA,eACA,eACA,UACA,QACA,aACA,mBACA,mBACA,gBACA,qBACA,oBACA,kBACA,kBACA,6BACA,uBACA,6BACA,sBACA,wBACA,cACA,gBACA,2BACA,sBACA,YACA,oBACA,oBACA,0BACA,YACA,aACA,YACA,UACA,YACA,aACA,WACA,gBACA,eACA,cACA,YACA,cACA,WACA,eACA,cACA,aACA,QACA,oBACA,0BACA,sBACA,OACA,YACA,mBACA,eACA,+BACA,4BACA,wBACA,sBACA,gCACA,cACA,iBACA,uBACA,qBACA,oBACA,mBACA,cACA,sBACA,UACA,iBACA,YACA,uBACA,iBACA,8BACA,kBACA,YACA,YACA,aACA,wBACA,8BACA,+BACA,aACA,cACA,cACA,gBACA,eACA,YACA,cACA,iBACA,aACA,YACA,YACA,eACA,WACA,gBACA,aACA,WACA,aACA,WACA,cACA,eACA,eACA,qBACA,WACA,eACA,aACA,QACA,cACA,YACA,gBACA,kBACA,OACA,WACA,cACA,kBACA,oBACA,eACA,gBACA,oBACA,iBACA,kBACA,oBACA,SACA,aACA,+BACA,oBACA,kCACA,eACA,iBACA,oBACA,iBACA,cACA,aACA,gBACA,0BACA,uBACA,WACA,WACA,aACA,kBACA,gBACA,QACA,yBACA,yBACA,wBACA,eACA,wBACA,iBACA,mBACA,oBACA,wBACA,6BACA,+BACA,iBACA,mBACA,iBACA,UACA,gBACA,cACA,wBACA,wBACA,aACA,6BACA,gBACA,sBACA,oBACA,cACA,eACA,kCACA,cACA,cACA,YACA,gBACA,0BACA,eACA,UACA,oBACA,aACA,oBACA,mBACA,cACA,iBACA,wBACA,gBACA,SACA,MACA,QACA,OACA,aACA,WACA,uBACA,gBACA,cACA,uBACA,kBACA,gBACA,gBACA,gBACA,0BACA,aACA,6BACA,wBACA,UACA,cACA,wBACA,YACA,UACA,wBACA,iCACA,2BACA,oCACA,eACA,yBACA,WACA,YACA,gBACA,qBACA,iBACA,2BACA,SACA,WACA,iBACA,UACA,eACA,aACA,iBACA,kBACA,qBACA,wBACA,yBACA,gBACA,mBACA,eACA,yBACA,mBACA,qBACA,SACA,uBACA,kBACA,eACA,WACA,gBACA,eACA,YACA,cACA,iBACA,mBACA,2BACA,UACA,gBACA,UACA,wBACA,cACA,aACA,WACA,uBACA,uBACA,aACA,oBACA,uBACA,eACA,YACA,wBACA,WACA,YACA,iBACA,YACA,6BACA,4BACA,yBACA,wBACA,8BACA,uBACA,oBACA,iBACA,oBACA,aACA,cACA,yBACA,kBACA,mBACA,SACA,MACA,SACA,WACA,QACA,aACA,YACA,YACA,8BACA,UACA,qBACA,qBACA,qBACA,uBACA,0BACA,UACA,6BACA,gBACA,+BACA,mBACA,oBACA,oBACA,4BACA,wBACA,kBACA,kBACA,SACA,WACA,kBACA,qBACA,2BACA,sBACA,WACA,yBACA,yBACA,gCACA,gBACA,kBACA,kBACA,kBACA,kBACA,kBACA,WACA,gBACA,aACA,aACA,WACA,YACA,aACA,iBACA,YACA,2BACA,aACA,cACA,6BACA,UACA,aACA,sBACA,MACA,UACA,iBACA,mBACA,UACA,YACA,uBACA,cACA,qBACA,qBACA,yBACA,cACA,YACA,YACA,WACA,WACA,gBACA,WACA,gBACA,oBACA,qBACA,gBACA,YACA,eACA,wBACA,kBACA,WACA,cACA,oBACA,WACA,sBACA,aACA,qBACA,OACA,wBACA,aACA,4BACA,yBACA,gBACA,aACA,oBACA,qBACA,mBACA,YACA,kBACA,uBACA,SACA,kBACA,eACA,kBACA,SACA,UACA,gBACA,sBACA,iBACA,kBACA,UACA,kBACA,oBACA,mBACA,cACA,aACA,OACA,iBACA,iBACA,gBACA,WACA,WACA,aACA,mBACA,YACA,WACA,QACA,mBACA,kBACA,wBACA,yBACA,OACA,mBACA,gBACA,oBACA,gBACA,gBACA,iBACA,kBACA,kBACA,YACA,wBACA,gBACA,wBACA,kBACA,gBACA,iBACA,kBACA,YACA,yBACA,aACA,cACA,cACA,YACA,UACA,gBACA,cACA,cACA,gBACA,iBACA,gBACA,WACA,mBACA,iBACA,kBACA,mBACA,SACA,gBACA,oBACA,eACA,WACA,uBACA,MACA,mBACA,UACA,YACA,cACA,YACA,YACA,oBACA,yBACA,WACA,uBACA,kBACA,wBACA,WACA,SACA,kBACA,SACA,qBACA,eACA,UACA,wBACA,QACA,YACA,WACA,UACA,kBACA,oBACA,mBACA,WACA,gBACA,eACA,sBACA,wBACA,iBACA,qBACA,cACA,iBACA,aACA,qBACA,YACA,sBACA,MACA,QACA,OACA,4BACA,UACA,iBACA,gBACA,SACA,UACA,YACA,WACA,gBACA,oBACA,eACA,sBACA,gBACA,gBACA,iBACA,oCACA,iBACA,eACA,kBACA,eACA,iBACA,mBACA,YACA,oBACA,4BACA,gBACA,SACA,gBACA,iBACA,2BACA,kBACA,SACA,UACA,eACA,gBACA,gBACA,YACA,eACA,gBACA,wBACA,4BACA,0BACA,2BACA,qBACA,yBACA,yBACA,gBACA,OACA,eACA,kBACA,kBACA,qBACA,eACA,YACA,mBACA,gBACA,YACA,gBACA,YACA,eACA,oBACA,uBACA,cACA,iBACA,cACA,qBACA,qBACA,mBACA,oBACA,cACA,0BACA,0BACA,sBACA,eACA,gBACA,wBACA,iBACA,yCACA,kCACA,4BACA,IACA,uBACA,QACA,QACA,eACA,sBACA,OACA,UACA,UACA,cACA,kBACA,sBACA,SACA,WACA,gBACA,gBACA,UACA,eACA,UACA,kBACA,mBACA,mBACA,uBACA,YACA,aACA,4BACA,QACA,WACA,+BACA,0BACA,mBACA,2BACA,kCACA,oBACA,gBACA,8BACA,mBACA,oBACA,OACA,uBACA,iBACA,oBACA,YACA,WACA,WACA,YACA,gBACA,YACA,WACA,gBACA,2BACA,WACA,aACA,YACA,UACA,aACA,oBACA,oBACA,aACA,aACA,kBACA,iBACA,WACA,iBACA,gBACA,YACA,wBACA,UACA,iBACA,uBACA,kBACA,WACA,kBACA,2BACA,UACA,kBACA,aACA,YACA,aACA,iBACA,iBACA,iBACA,UACA,WACA,wBACA,YACA,uBACA,yBACA,+BACA,qBACA,eACA,gBACA,gBACA,gBACA,gBACA,oBACA,eACA,OACA,WACA,WACA,YACA,wBACA,0BACA,eACA,WACA,aACA,YACA,mBACA,cACA,kBACA,aACA,YACA,YACA,YACA,YACA,eACA,mBACA,iBACA,6BACA,kCACA,+BACA,iCACA,yBACA,eACA,iCACA,OACA,WACA,oBACA,2BACA,sBACA,cACA,sBACA,uBACA,mBACA,cACA,sBACA,uBACA,mBACA,MACA,WACA,OACA,SACA,qBACA,iBACA,qBACA,YACA,aACA,qCACA,gBACA,kBACA,eACA,MACA,eACA,YACA,uBACA,WACA,gBACA,mBACA,0BACA,gBACA,0BACA,iBACA,kBACA,iBACA,oBACA,4BACA,mBACA,uBACA,mBACA,eACA,cACA,iBACA,sBACA,0BACA,iBACA,iBACA,eACA,eACA,gBACA,cACA,eACA,YACA,eACA,oBACA,gBACA,mBACA,gBACA,aACA,gBACA,YACA,aACA,kBACA,sBACA,oBACA,iBACA,uBACA,kBACA,UACA,kBACA,eACA,uBACA,kBACA,qBACA,uBACA,UACA,eACA,mBACA,iBACA,cACA,oBACA,eACA,0BACA,oBACA,cACA,mBACA,wBACA,mBACA,oBACA,mBACA,sBACA,wBACA,kBACA,uBACA,oBACA,yBACA,YACA,iBACA,cACA,mBACA,wBACA,mBACA,cACA,mBACA,WACA,gBACA,oBACA,gBACA,iBACA,MACA,eACA,eACA,WACA,kBACA,SACA,SACA,eACA,OACA,YACA,uBACA,qBACA,OACA,cACA,YACA,YACA,SACA,gBACA,kBACA,cACA,eACA,yBACA,0BACA,8BACA,2BACA,iCACA,uBACA,0BACA,uBACA,aACA,eACA,iBACA,cACA,mBACA,gBACA,cACA,UACA,kBACA,cACA,eACA,YACA,uBACA,iBACA,gBACA,eACA,gBACA,mBACA,kBACA,WACA,gBACA,UACA,mBACA,cACA,IACA,gBACA,uBACA,sBACA,0BACA,mBACA,YACA,aACA,OACA,MACA,SACA,UACA,KACA,cACA,OACA,cACA,UACA,kBACA,yBACA,OACA,aACA,SACA,YACA,mBACA,aACA,8BACA,UACA,WACA,qBACA,gBACA,YACA,UACA,kBACA,kBACA,kBACA,WACA,kBACA,0BACA,UACA,UACA,gBACA,iBACA,cACA,iBACA,wBACA,KACA,SACA,QACA,oBACA,WACA,WACA,aACA,gBACA,YACA,2BACA,eACA,2BACA,gBACA,oBACA,MACA,QACA,eACA,kBACA,sBACA,8BACA,2BACA,aACA,iBACA,iBACA,2BACA,mBACA,cACA,iBACA,kBACA,eACA,OACA,UACA,UACA,WACA,UACA,WACA,UACA,aACA,oBACA,eACA,aACA,gBACA,uBACA,YACA,aACA,kBACA,QACA,YACA,UACA,gBACA,aACA,oBACA,qBACA,sBACA,wBACA,wBACA,gBACA,eACA,aACA,mBACA,oBACA,gBACA,sBACA,eACA,eACA,gBACA,aACA,mBACA,qBACA,cACA,uBACA,mBACA,eACA,kBACA,eACA,aACA,UACA,eACA,cACA,kBACA,UACA,WACA,iBACA,iBACA,kBACA,kBACA,cACA,kBACA,cACA,aACA,qBACA,YACA,YACA,aACA,mBACA,iBACA,kBACA,wBACA,cACA,cACA,kBACA,cACA,uBACA,cACA,OACA,UACA,iBACA,QACA,WACA,kBACA,UACA,eACA,kBACA,yBACA,aACA,qBACA,kBACA,mBACA,gBACA,mBACA,kBACA,aACA,iBACA,mBACA,kBACA,cACA,kBACA,cACA,gBACA,gBACA,kBACA,iBACA,cACA,gBACA,cACA,YACA,qBACA,+BACA,qBACA,+BACA,qBACA,oBACA,yBACA,iBACA,mBACA,sBACA,mBACA,YACA,aACA,gBACA,kBACA,kBACA,0BACA,uBACA,0BACA,kBACA,0BACA,aACA,eACA,aACA,iBACA,qBACA,6BACA,WACA,OACA,eACA,6BACA,WACA,0BACA,eACA,YACA,uBACA,cACA,cACA,YACA,eACA,iBACA,eACA,qBACA,iBACA,eACA,QACA,2BACA,0BACA,cACA,OACA,YACA,aACA,UACA,iBACA,kBACA,kBACA,cACA,cACA,cACA,QACA,aACA,MACA,aACA,aACA,uBACA,yBACA,sBACA,wBACA,cACA,gBACA,iBACA,kBACA,YACA,4BACA,wBACA,cACA,mBACA,YACA,cACA,mBACA,0BACA,oBACA,iBACA,kBACA,oBACA,qBACA,mBACA,oBACA,kBACA,mBACA,oBACA,iBACA,iBACA,mBACA,mBACA,qBACA,qBACA,eACA,qBACA,UACA,oBACA,gBACA,wBACA,sBACA,kBACA,mBACA,oBACA,mBACA,kBACA,aACA,mBACA,gBACA,eACA,aACA,eACA,qBACA,KACA,OACA,iBACA,WACA,UACA,sBACA,iBACA,UACA,YACA,kBACA,WACA,aACA,cACA,kBACA,WACA,OACA,iBACA,WACA,mBACA,aACA,sBACA,SACA,cACA,mBACA,qBACA,QACA,cACA,iBACA,cACA,eACA,qBACA,iBACA,oBACA,aACA,YACA,OACA,mBACA,YACA,OACA,SACA,cACA,eACA,aACA,YACA,aACA,aACA,cACA,cACA,aACA,YACA,oBACA,2BACA,mBACA,aACA,YACA,YACA,YACA,OACA,YACA,aACA,YACA,WACA,QACA,aACA,oBACA,WACA,kBACA,yBACA,eACA,uBACA,mBACA,cACA,aACA,wBACA,sBACA,mCACA,yBACA,YACA,yBACA,iBACA,4BACA,sBACA,sBACA,sBACA,iBACA,gBACA,YACA,kBACA,iBACA,YACA,aACA,kBACA,0BACA,YACA,UACA,eACA,sBACA,kBACA,eACA,aACA,oBACA,qBACA,uBACA,mBACA,uBACA,eACA,aACA,kBACA,gBACA,uBACA,wBACA,iBACA,0BACA,kBACA,UACA,wBACA,wBACA,iBACA,gBACA,gBACA,gBACA,cACA,qBACA,8BACA,mBACA,sBACA,cACA,6BACA,eACA,YACA,eACA,sBACA,YACA,cACA,WACA,gBACA,kBACA,mBACA,WACA,0BACA,mBACA,2BACA,oBACA,gBACA,8BACA,gBACA,UACA,aACA,QACA,oBACA,cACA,WACA,eACA,aACA,uBACA,wBACA,2BACA,aACA,iBACA,WACA,gBACA,qBACA,gBACA,YACA,gBACA,eACA,UACA,iBACA,oBACA,uBACA,wBACA,8BACA,iBACA,kBACA,sBACA,SACA,eACA,UACA,eACA,YACA,qBACA,gBACA,uBACA,WACA,eACA,eACA,yBACA,qBACA,QACA,UACA,aACA,UACA,cACA,SACA,SACA,aACA,uBACA,gBACA,oBACA,sBACA,iBACA,QACA,kBACA,cACA,YACA,iBACA,kBACA,oBACA,6BACA,2BACA,aACA,sBACA,iBACA,iBACA,QACA,WACA,kBACA,qBACA,2BACA,qBACA,yBACA,aACA,yBACA,eACA,cACA,0BACA,kBACA,gBACA,uBACA,iBACA,oBACA,mBACA,qBACA,YACA,mBACA,qBACA,gBACA,8BACA,oBACA,qBACA,gBACA,oBACA,UACA,sBACA,aACA,oBACA,uBACA,8BACA,oBACA,aACA,SACA,aACA,cACA,kBACA,aACA,WACA,eACA,gBACA,aACA,eACA,UACA,YACA,cACA,UACA,gBACA,4BACA,YACA,cACA,aACA,uBACA,SACA,MACA,YACA,UACA,aACA,oBACA,YACA,aACA,SACA,qBACA,eACA,cACA,aACA,kBACA,uBACA,wBACA,WACA,eACA,WACA,gBACA,uBACA,eACA,oBACA,YACA,eACA,mBACA,gCACA,6BACA,6BACA,mCACA,WACA,oBACA,YACA,mBACA,QACA,oBACA,oBACA,iBACA,mBACA,yBACA,kBACA,kBACA,QACA,YACA,OACA,WACA,oBACA,iBACA,wBACA,sBACA,sBACA,aACA,oBACA,cACA,iBACA,iBACA,wBACA,QACA,iBACA,eACA,gBACA,oBACA,gBACA,OACA,SACA,mBACA,eACA,cACA,gBACA,aACA,eACA,iBACA,uBACA,oBACA,cACA,cACA,iBACA,gBACA,oBACA,cACA,2BACA,gBACA,mBACA,cACA,aACA,eACA,aACA,gBACA,aACA,aACA,gBACA,oBACA,aACA,QACA,cACA,qBACA,YACA,YACA,mBACA,SACA,WACA,cACA,qBACA,cACA,YACA,mBACA,YACA,aACA,WACA,sBACA,oBACA,cACA,YACA,SACA,WACA,WACA,UACA,YACA,uBACA,KACA,kBACA,oBACA,kBACA,OACA,gBACA,WACA,WACA,gBACA,aACA,OACA,UACA,wBACA,aACA,eACA,QACA,WACA,OACA,oBACA,wBACA,mBACA,uBACA,qBACA,SACA,cACA,mBACA,YACA,eACA,sBACA,iBACA,mBACA,8BACA,mBACA,kBACA,sBACA,MACA,SACA,SACA,qBACA,mBACA,uBACA,SACA,mBACA,sBACA,UACA,cACA,SACA,iBACA,iBACA,sBACA,eACA,iBACA,kBACA,gBACA,mBACA,iBACA,kBACA,iBACA,iBACA,yBACA,2BACA,cACA,gBACA,qBACA,YACA,iBACA,cACA,qBACA,gBACA,eACA,uBACA,eACA,gBACA,wBACA,aACA,eACA,gBACA,UACA,eACA,gBACA,aACA,4BACA,cACA,eACA,4BACA,oBACA,iBACA,oBACA,iBACA,OACA,aACA,WACA,YACA,YACA,qBACA,gBACA,UACA,cACA,0BACA,cACA,aACA,6BACA,sBACA,uBACA,kBACA,uBACA,mCACA,oBACA,gBACA,yBACA,iBACA,aACA,mBACA,qBACA,yBACA,YACA,mBACA,oBACA,SACA,qBACA,yBACA,oBACA,mBACA,wBACA,2BACA,UACA,mBACA,0BACA,2BACA,iBACA,sBACA,cACA,oBACA,kBACA,aACA,YACA,mBACA,iBACA,aACA,aACA,WACA,eACA,iBACA,iBACA,mBACA,UACA,aACA,YACA,kBACA,oBACA,cACA,cACA,oBACA,kBACA,iBACA,6BACA,aACA,0BACA,mBACA,UACA,qBACA,iBACA,qBACA,eACA,UACA,aACA,cACA,UACA,wBACA,kBACA,eACA,mBACA,iBACA,mBACA,iBACA,iBACA,2BACA,iBACA,qBACA,qBACA,iBACA,kBACA,eACA,OACA,kBACA,aACA,YACA,eACA,SACA,uBACA,oBACA,yBACA,wBACA,eACA,wBACA,mBACA,UACA,iBACA,mCACA,iBACA,qBACA,eACA,cACA,gBACA,uBACA,iBACA,mBACA,WACA,eACA,mBACA,cACA,WACA,qBACA,iBACA,YACA,SACA,QACA,aACA,gBACA,sBACA,mBACA,2BACA,qBACA,kBACA,qBACA,WACA,gBACA,iBACA,gBACA,mBACA,qBACA,oBACA,mBACA,gBACA,mBACA,cACA,iBACA,UACA,qBACA,4BACA,0BACA,2BACA,8BACA,qBACA,qBACA,eACA,OACA,kBACA,gBACA,gBACA,iBACA,eACA,aACA,QACA,UACA,WACA,SACA,cACA,aACA,cACA,iBACA,cACA,qBACA,iBACA,oBACA,QACA,eACA,iBACA,MACA,gBACA,iBACA,SACA,aACA,WACA,eACA,YACA,YACA,cACA,SACA,cACA,eACA,kBACA,OACA,gBACA,cACA,WACA,WACA,aACA,YACA,MACA,aACA,mBACA,aACA,oBACA,iBACA,0BACA,SACA,QACA,WACA,qBACA,qBACA,cACA,uBACA,mBACA,aACA,iBACA,gBACA,eACA,cACA,gBACA,sBACA,0BACA,eACA,WACA,OACA,WACA,iBACA,iBACA,kBACA,sBACA,eACA,QACA,SACA,iBACA,sBACA,cACA,eACA,cACA,kBACA,mBACA,gBACA,mBACA,OACA,gBACA,uBACA,2BACA,+BACA,sBACA,iBACA,qBACA,iBACA,8BACA,WACA,gBACA,WACA,gBACA,kBACA,yBACA,uBACA,aACA,cACA,gBACA,cACA,wBACA,aACA,mBACA,iBACA,mBACA,oBACA,gBACA,oBACA,qBACA,MACA,OACA,mBACA,8BACA,kBACA,cACA,gBACA,eACA,gBACA,2BACA,4BACA,sBACA,aACA,SACA,aACA,mBACA,gBACA,mBACA,cACA,YACA,mBACA,gBACA,0BACA,4BACA,2BACA,sBACA,uBACA,oBACA,8BACA,gBACA,uBACA,qBACA,YACA,gBACA,iBACA,uBACA,yBACA,kCACA,2BACA,WACA,cACA,WACA,oBACA,yBACA,gBACA,gBACA,eACA,mBACA,eACA,eACA,uBACA,oBACA,oBACA,mBACA,kBACA,4BACA,kBACA,oBACA,uBACA,gBACA,SACA,oBACA,aACA,iBACA,iBACA,oBACA,iBACA,gBACA,iBACA,kBACA,gBACA,gBACA,cACA,MACA,cACA,kBACA,gBACA,WACA,oBACA,aACA,aACA,eACA,iBACA,cACA,0BACA,aACA,mBACA,iBACA,eACA,cACA,8BACA,sBACA,oBACA,oBACA,oBACA,iBACA,mBACA,SACA,YACA,YACA,mBACA,UACA,WACA,UACA,UACA,iBACA,kBACA,QACA,cACA,UACA,iBACA,oBACA,cACA,mBACA,8BACA,wBACA,QACA,iBACA,WACA,gBACA,uBACA,iBACA,kBACA,mBACA,uBACA,eACA,OACA,kBACA,qBACA,iBACA,kBACA,gBACA,eACA,qBACA,iBACA,eACA,eACA,oBACA,yBACA,kBACA,0BACA,iBACA,0BACA,gBACA,mBACA,wBACA,uBACA,mBACA,iBACA,wBACA,eACA,cACA,kBACA,kBACA,iBACA,OACA,YACA,iBACA,uBACA,oBACA,cACA,WACA,kBACA,cACA,eACA,iBACA,oBACA,UACA,WACA,MACA,OACA,2BACA,mBACA,sBACA,oBACA,6BACA,oBACA,oBACA,iBACA,OACA,eACA,cACA,aACA,WACA,oBACA,sBACA,WACA,yBACA,YACA,OACA,qBACA,qBACA,oBACA,oBACA,SACA,WACA,cACA,qBACA,YACA,mBACA,iBACA,YACA,OACA,eACA,QACA,cACA,UACA,qBACA,wBACA,0BACA,yBACA,kBACA,oBACA,2BACA,qBACA,eACA,UACA,gBACA,iBACA,kBACA,SACA,gBACA,eACA,iBACA,eACA,aACA,oBACA,eACA,UACA,gBACA,iBACA,eACA,2BACA,eACA,yBACA,YACA,aACA,yBACA,YACA,6BACA,sBACA,6BACA,uBACA,uBACA,eACA,QACA,cACA,eACA,cACA,OACA,SACA,WACA,oBACA,QACA,mBACA,YACA,cACA,aACA,gBACA,MACA,QACA,iBACA,YACA,SACA,WACA,OACA,kBACA,wBACA,gBACA,eACA,eACA,oBACA,cACA,cACA,qBACA,gBACA,cACA,eACA,yBACA,4BACA,kBACA,2BACA,2BACA,WACA,gBACA,oBACA,4BACA,mBACA,qBACA,wBACA,6BACA,uBACA,QACA,gBACA,mBACA,cACA,cACA,kBACA,mBACA,cACA,mBACA,cACA,cACA,oBACA,kBACA,mBACA,qBACA,yBACA,uBACA,2BACA,kBACA,SACA,YACA,mBACA,eACA,mBACA,mBACA,oBACA,oBACA,qBACA,kBACA,kBACA,iBACA,uBACA,0BACA,eACA,oBACA,eACA,oBACA,yBACA,eACA,oBACA,eACA,oBACA,SACA,sBACA,eACA,eACA,cACA,gBACA,QACA,UACA,eACA,YACA,OACA,UACA,iBACA,SACA,2BACA,cACA,qBACA,gBACA,yBACA,WACA,eACA,oBACA,iBACA,sBACA,cACA,aACA,cACA,mBACA,wBACA,qBACA,QACA,aACA,gBACA,sBACA,kBACA,eACA,eACA,yBACA,oBACA,0BACA,eACA,cACA,eACA,oBACA,sBACA,OACA,kBACA,WACA,YACA,wBACA,uBACA,mBACA,cACA,gBACA,eACA,qBACA,eACA,kBACA,kBACA,qBACA,uBACA,gBACA,kBACA,wBACA,sBACA,+BACA,yBACA,mCACA,6BACA,aACA,mBACA,cACA,0BACA,iBACA,iBACA,aACA,aACA,uBACA,oBACA,oBACA,kBACA,sBACA,8BACA,sBACA,sBACA,6BACA,oBACA,gBACA,aACA,eACA,eACA,iBACA,UACA,cACA,cACA,qBACA,SACA,cACA,kBACA,cACA,kBACA,cACA,eACA,aACA,cACA,mBACA,gBACA,aACA,eACA,gBACA,cACA,eACA,aACA,eACA,eACA,gBACA,iBACA,aACA,kBACA,iBACA,UACA,eACA,gBACA,oBACA,oBACA,gBACA,eACA,mBACA,oBACA,iBACA,cACA,gBACA,aACA,iBACA,iBACA,oBACA,iBACA,aACA,aACA,eACA,oBACA,oBACA,aACA,gBACA,uBACA,kBACA,uBACA,sBACA,UACA,UACA,OACA,uBACA,QACA,WACA,qBACA,YACA,mBACA,YACA,aACA,kBACA,mBACA,0BACA,aACA,aACA,iBACA,YACA,eACA,WACA,WACA,UACA,mCACA,0BACA,gBACA,YACA,eACA,sBACA,cACA,eACA,SACA,cACA,cACA,cACA,YACA,iBACA,UACA,gBACA,UACA,UACA,qBACA,iBACA,oBACA,2BACA,mBACA,yBACA,WACA,eACA,gBACA,YACA,WACA,gBACA,qBACA,gBACA,UACA,WACA,MACA,iBACA,iBACA,SACA,cACA,UACA,SACA,cACA,aACA,gBACA,YACA,cACA,iBACA,wBACA,WACA,gBACA,YACA,OACA,WACA,oBACA,cACA,eACA,cACA,kBACA,uBACA,mBACA,gBACA,mBACA,gBACA,qBACA,iBACA,eACA,SACA,SACA,aACA,gBACA,YACA,sBACA,iBACA,eACA,mBACA,sBACA,qBACA,aACA,mBACA,wBACA,iCACA,mCACA,yBACA,4BACA,sBACA,WACA,SACA,aACA,oBACA,eACA,eACA,UACA,0BACA,mBACA,uBACA,sBACA,uBACA,8BACA,oBACA,kBACA,YACA,iBACA,oBACA,wBACA,gBACA,cACA,gBACA,sBACA,uBACA,0BACA,gCACA,kBACA,+BACA,yBACA,eACA,sBACA,iCACA,4BACA,aACA,gBACA,oBACA,kBACA,0BACA,6BACA,oBACA,+BACA,qBACA,yBACA,sBACA,8BACA,qBACA,wBACA,oBACA,oBACA,8BACA,4BACA,mCACA,mCACA,aACA,aACA,MACA,aACA,QACA,kBACA,aACA,kBACA,YACA,gBACA,eACA,YACA,eACA,wBACA,yBACA,sBACA,uBACA,wBACA,sBACA,cACA,UACA,aACA,oBACA,SACA,aACA,gBACA,eACA,SACA,gBACA,WACA,WACA,OACA,WACA,cACA,gBACA,WACA,eACA,iBACA,YACA,QACA,MACA,OACA,eACA,kBACA,eACA,cACA,YACA,cACA,aACA,aACA,aACA,QACA,cACA,WACA,aACA,mBACA,gBACA,iBACA,cACA,qBACA,mBACA,qBACA,aACA,iBACA,mBACA,eACA,uBACA,sBACA,mBACA,eACA,eACA,qBACA,YACA,oBACA,iBACA,mBACA,eACA,gBACA,UACA,aACA,eACA,iBACA,kBACA,cACA,uBACA,kBACA,qBACA,SACA,aACA,mBACA,mBACA,cACA,iBACA,wBACA,UACA,UACA,OACA,YACA,mBACA,gBACA,WACA,kBACA,UACA,YACA,WACA,oBACA,eACA,WACA,cACA,WACA,WACA,oBACA,WACA,aACA,gBACA,eACA,gBACA,aACA,mBACA,gBACA,aACA,gBACA,YACA,kBACA,UACA,4BACA,2BACA,YACA,YACA,oBACA,mBACA,QACA,YACA,OACA,WACA,WACA,qBACA,kBACA,SACA,WACA,iBACA,eACA,YACA,UACA,QACA,YACA,YACA,WACA,gBACA,uBACA,uBACA,aACA,cACA,gBACA,QACA,aACA,WACA,QACA,aACA,iBACA,aACA,kBACA,iBACA,gBACA,aACA,WACA,eACA,aACA,cACA,gBACA,QACA,UACA,aACA,sBACA,qBACA,mBACA,0BACA,gBACA,sBACA,kBACA,qBACA,qBACA,oBACA,kBACA,mBACA,mBACA,aACA,oBACA,WACA,YACA,4BACA,sBACA,WACA,kBACA,iBACA,SACA,OACA,gBACA,aACA,UACA,kBACA,UACA,wBACA,SACA,QACA,sBACA,WACA,iBACA,eACA,aACA,WACA,SACA,cACA,UACA,aACA,aACA,oBACA,mBACA,yBACA,aACA,YACA,cACA,WACA,gBACA,SACA,UACA,aACA,oBACA,eACA,eACA,cACA,MACA,kBACA,qBACA,kBACA,aACA,eACA,UACA,QACA,aACA,yBACA,WACA,QACA,cACA,aACA,uBACA,aACA,gBACA,sBACA,8BACA,cACA,YACA,KACA,QACA,aACA,cACA,gBACA,aACA,cACA,eACA,gBACA,aACA,WACA,UACA,gBACA,aACA,YACA,uBACA,iBACA,mBACA,yBACA,eACA,kBACA,8BACA,sBACA,mBACA,4BACA,gCACA,2BACA,+BACA,4BACA,4BACA,yBACA,2BACA,yBACA,yBACA,yBACA,wBACA,wBACA,4BACA,wBACA,sBACA,yBACA,0BACA,uBACA,0BACA,mBACA,qBACA,oBACA,sBACA,qBACA,mBACA,yBACA,2BACA,YACA,qBACA,uBACA,gBACA,cACA,mBACA,YACA,iBACA,eACA,gBACA,mBACA,uBACA,iBACA,qBACA,eACA,aACA,OACA,YACA,eACA,YACA,WACA,aACA,YACA,yBACA,mBACA,2BACA,wBACA,mBACA,2BACA,kBACA,0BACA,mBACA,2BACA,iBACA,cACA,WACA,WACA,YACA,aACA,aACA,aACA,gBACA,YACA,aACA,YACA,UACA,YACA,cACA,WACA,eACA,QACA,kBACA,YACA,WACA,aACA,WACA,qBACA,aACA,WACA,iBACA,oBACA,sBACA,eACA,yBACA,kBACA,OACA,aACA,aACA,iBACA,UACA,aACA,YACA,cACA,kBACA,oBACA,OACA,QACA,wBACA,sBACA,kCACA,+BACA,QACA,OACA,qBACA,4BACA,UACA,iBACA,sBACA,6BACA,UACA,0BACA,cACA,aACA,SACA,aACA,gBACA,kBACA,aACA,QACA,kBACA,eACA,WACA,SACA,gBACA,SACA,aACA,0BACA,YACA,WACA,YACA,aACA,kBACA,qBACA,4BACA,cACA,iBACA,wBACA,sBACA,iBACA,kBACA,mBACA,cACA,uBACA,UACA,YACA,cACA,sBACA,2BACA,oBACA,yBACA,YACA,QACA,qBACA,YACA,SACA,iBACA,iBACA,UACA,cACA,iBACA,UACA,eACA,eACA,WACA,aACA,eACA,aACA,kBACA,kBACA,oBACA,iBACA,WACA,gBACA,iBACA,YACA,8BACA,UACA,mBACA,QACA,cACA,QACA,qBACA,KACA,UACA,aACA,mBACA,SACA,uBACA,kCACA,iBACA,oBACA,oBACA,cACA,gBACA,aACA,iBACA,kBACA,qBACA,wBACA,yBACA,WACA,QACA,eACA,QACA,aACA,OACA,WACA,MACA,WACA,YACA,gBACA,cACA,oBACA,YACA,aACA,YACA,WACA,uBACA,WACA,iBACA,iBACA,UACA,kBACA,UACA,sBACA,aACA,YACA,qBACA,mBACA,qBACA,QACA,gBACA,kBACA,QACA,uBACA,iBACA,mBACA,gBACA,WACA,kBACA,kBACA,YACA,6BACA,SACA,SACA,aACA,oBACA,YACA,WACA,0BACA,4BACA,4BACA,4BACA,eACA,oBACA,iBACA,cACA,eACA,oBACA,sBACA,6BACA,oBACA,yBACA,2BACA,kBACA,gBACA,qBACA,aACA,kBACA,gBACA,aACA,eACA,eACA,UACA,cACA,UACA,cACA,gBACA,cACA,cACA,MACA,WACA,UACA,mBACA,oBACA,mBACA,yBACA,sBACA,uBACA,6BACA,kBACA,wBACA,uBACA,YACA,iBACA,wBACA,eACA,kBACA,qBACA,iBACA,wBACA,oBACA,8BACA,yBACA,cACA,eACA,wBACA,eACA,eACA,uBACA,qBACA,oBACA,yBACA,iBACA,cACA,0BACA,iBACA,eACA,mBACA,aACA,gBACA,qBACA,0BACA,kBACA,UACA,0BACA,gBACA,cACA,sBACA,aACA,cACA,2BACA,yBACA,eACA,uBACA,WACA,cACA,eACA,gBACA,oBACA,iBACA,gBACA,QACA,eACA,eACA,cACA,gBACA,qBACA,iBACA,gBACA,iBACA,cACA,iBACA,YACA,WACA,eACA,qBACA,eACA,aACA,YACA,SACA,cACA,eACA,qBACA,aACA,YACA,cACA,eACA,mBACA,sBACA,iBACA,oBACA,YACA,YACA,aACA,aACA,YACA,4BACA,WACA,iBACA,YACA,aACA,eACA,mBACA,UACA,cACA,iBACA,oBACA,cACA,SACA,uBACA,cACA,UACA,uBACA,WACA,YACA,qBACA,sCACA,yBACA,wBACA,kBACA,sBACA,oBACA,iCACA,mBACA,4BACA,mBACA,kBACA,oBACA,oBACA,aACA,aACA,eACA,mBACA,mBACA,mBACA,4BACA,iCACA,wBACA,mBACA,cACA,sBACA,iBACA,YACA,mBACA,SACA,aACA,WACA,iBACA,UACA,yBACA,SACA,YACA,mBACA,cACA,kBACA,QACA,YACA,sBACA,gBACA,gBACA,gBACA,kBACA,kBACA,kBACA,yBACA,0BACA,0BACA,0BACA,yBACA,yBACA,wBACA,eACA,oBACA,mBACA,kBACA,yBACA,0BACA,eACA,iBACA,UACA,cACA,aACA,YACA,QACA,QACA,QACA,oBACA,aACA,aACA,sBACA,aACA,aACA,uBACA,eACA,gBACA,UACA,+BACA,eACA,iBACA,gBACA,kBACA,SACA,aACA,oBACA,eACA,iBACA,oBACA,iBACA,iBACA,cACA,sBACA,gBACA,gBACA,gBACA,yBACA,iBACA,aACA,mBACA,cACA,iBACA,cACA,gBACA,iBACA,iBACA,qBACA,4BACA,OACA,cACA,WACA,eACA,mBACA,uBACA,qBACA,uBACA,sBACA,OACA,eACA,gBACA,YACA,YACA,aACA,WACA,iBACA,gBACA,oBACA,WACA,kBACA,aACA,wBACA,iBACA,eACA,WACA,kBACA,mBACA,aACA,QACA,YACA,cACA,YACA,aACA,YACA,cACA,OACA,MACA,WACA,SACA,YACA,oBACA,WACA,gBACA,WACA,iBACA,OACA,WACA,cACA,mBACA,aACA,aACA,QACA,aACA,WACA,qBACA,iBACA,4BACA,mBACA,oBACA,iCACA,iBACA,kBACA,eACA,oBACA,iBACA,iBACA,qBACA,sBACA,iBACA,wBACA,cACA,eACA,kBACA,YACA,gBACA,sBACA,YACA,eACA,qBACA,sBACA,oBACA,aACA,kBACA,mBACA,yBACA,mBACA,uBACA,yBACA,sBACA,sBACA,mBACA,eACA,iBACA,gBACA,sBACA,mCACA,eACA,qBACA,uBACA,iBACA,qBACA,WACA,kBACA,eACA,wBACA,WACA,eACA,gBACA,mCACA,eACA,eACA,qBACA,kBACA,oBACA,2BACA,4BACA,eACA,mBACA,wBACA,kBACA,oBACA,sBACA,kBACA,2BACA,eACA,qBACA,2CACA,uBACA,gCACA,WACA,mBACA,uBACA,qBACA,QACA,yBACA,sBACA,gBACA,UACA,uBACA,yBACA,yBACA,iBACA,2BACA,uBACA,UACA,uBACA,gBACA,cACA,YACA,mBACA,0BACA,kBACA,eACA,mBACA,sBACA,wBACA,qBACA,iBACA,iBACA,mBACA,eACA,eACA,aACA,wBACA,mBACA,iBACA,kBACA,iBACA,wBACA,oBACA,kBACA,0BACA,SACA,iBACA,sBACA,aACA,oBACA,yBACA,wBACA,oBACA,kBACA,eACA,YACA,YACA,mBACA,eACA,yBACA,aACA,oBACA,iBACA,uBACA,eACA,QACA,UACA,iBACA,eACA,aACA,mBACA,oBACA,iBACA,kBACA,kBACA,aACA,eACA,oBACA,eACA,wBACA,qBACA,uBACA,0BACA,oBACA,aACA,qBACA,gBACA,iBACA,iBACA,eACA,mBACA,YACA,oBACA,aACA,sBACA,gBACA,eACA,gBACA,oBACA,qBACA,kBACA,cACA,aACA,8BACA,aACA,WACA,eACA,OACA,mBACA,UACA,eACA,mBACA,uBACA,YACA,cACA,mBACA,gBACA,gBACA,QACA,qBACA,mBACA,eACA,wBACA,mBACA,mBACA,iBACA,aACA,QACA,OACA,wBACA,qBACA,YACA,WACA,cACA,gBACA,uBACA,aACA,kBACA,iBACA,sBACA,eACA,qBACA,eACA,wBACA,eACA,kBACA,2BACA,sBACA,iBACA,oBACA,wBACA,0BACA,sBACA,wBACA,sBACA,sBACA,iBACA,iBACA,qBACA,qBACA,kCACA,2BACA,YACA,aACA,iBACA,mBACA,mBACA,gBACA,wBACA,cACA,qBACA,oBACA,oBACA,2BACA,0BACA,yBACA,iBACA,UACA,2BACA,yBACA,YACA,gBACA,eACA,kBACA,oBACA,iBACA,gBACA,sBACA,mBACA,gBACA,aACA,YACA,YACA,YACA,kBACA,gBACA,YACA,WACA,gBACA,mBACA,kBACA,cACA,UACA,uBACA,sBACA,oBACA,iBACA,4BACA,mBACA,oBACA,qBACA,4BACA,0BACA,YACA,YACA,eACA,WACA,iBACA,iBACA,iBACA,eACA,6BACA,aACA,uBA6HFC,GAhHA,SAAqBviE,GACnB,MAAMjI,EAAQiI,EAAKjI,MAQbyqE,EAAiBzqE,EAAMR,OAAOQ,EAAMxtG,OAH1B,+BACO,2BACL,2BAKZk4K,EAAwB1qE,EAAMR,OAFhB,iCACC,oCAWf6V,EAAU,CACdp7F,UAAW,SACXwmF,UAAW,EACXD,MAT4BR,EAAMxtG,OAClCi4K,EACAzqE,EAAMT,SAASmrE,GACf1qE,EAAMT,SALuB,kBAczBg3D,EAAY,yBACZoU,EAAqB,IAAI/qM,IAAI2qM,GAE7BxK,EAAU,CAAE34D,SAAU,CAC1B,CACEntF,UAAW,iBACXumF,MAAO+1D,EAEP,WAAY,CAAC55L,EAAOmrG,KACb6iG,EAAmBrvM,IAAIqB,EAAM,OAAc4gI,gBAGpD,CACEtjF,UAAW,SACXwmF,UAAW,EACXD,MAAO+1D,KAgCLqU,EAAW,CACf3wJ,UAAW,eACXwmF,UAAW,EACXD,MAAOR,EAAMxtG,OAAO,KAAM+jK,IAG5B,MAAO,CACLvnM,KAAM,cACN8lG,QAAS,CACP,MACA,MAEFyxC,iBAAkB,CAChBskE,MAAO,cACPpE,QAAS,OACTnvI,KAAM,OACNn4D,OAAQ,WACR,kBAAmB,WACnB,iBAAkB,WAClB,eAAgB,UAElBghB,SAAU,CACR8nH,EAAKpH,QAAQ,OAAQ,OAAQ,CAAE1gH,SAAU,CAAE,UAxC9B,CACf85B,UAAW,UACXwmF,UAAW,EACXD,MAAO,wDAGK,CACZvmF,UAAW,OACXwmF,UAAW,EACXD,MAAO,oCAkCLoqE,EACA7K,EAtDoB,CACtB9lJ,UAAW,kBACXumF,MAAO,gCAsDLyH,EAAKrH,kBACLyU,EApDc,CAChBp7F,UAAW,WACXwmF,UAAW,EACXD,MAAO,8BAcM,CACbvmF,UAAW,QACXwmF,UAAW,EACXD,MAAO,cAqCX,E1GjlOqCsqE,IACrC7iE,GAAK4F,iBAAiB,qB2GFtBk9D,GA9FA,SAAgB9iE,GACd,MAAM+iE,EAAe,YACfC,EAAY,CAChBxqE,UAAW,EACXtgH,SAAU,CAAE,CAAEqgH,MAAOwqE,KAGvB,MAAO,CACLh8M,KAAM,SACN0zI,SAAU,CACRiB,QACE,qLAEFmM,SACE,swCAiBJnP,QAAS,0BACTxgH,SAAU,CACR,CACE85B,UAAW,WACXuoF,cAAe,WACfp5H,IAAK,IACL+W,SAAU,CACR8nH,EAAKxG,sBACL,CACExnF,UAAW,SACXmtF,SAAU,CACR,CACE5G,MAAO,MACPp3H,IAAK,OAEP,CACEo3H,MAAO,MACPp3H,IAAK,WAMf,CACE6wC,UAAW,WACXumF,MAAO,aACPC,UAAW,EACXuC,OAAQioE,GAEV,CACEzqE,MAAO,wBAA0BwqE,EACjCvqE,UAAW,GAEb,CACExmF,UAAW,SACXumF,MAAOyH,EAAK5H,YACZI,UAAW,EACXuC,OAAQioE,GAEV,CACEhxJ,UAAW,SACXumF,MAAO,IACPp3H,IAAK,IACL+W,SAAU,CAAE,CAAEqgH,MAAO,QAEvB,CACEA,MAAO,WACPC,UAAW,EACXuC,OAAQioE,GAEV,CACEhxJ,UAAW,SACXumF,MAAO,IACPp3H,IAAK,IACL+W,SAAU,CAAE,CAAEqgH,MAAO,OACrBwC,OAAQioE,GAEVhjE,EAAKpH,QAAQ,iBAAkB,kBAC/BoH,EAAKpH,QAAQ,IAAK,MAGxB,I3GKAoH,GAAK4F,iBAAiB,qB4GgTtBq9D,GAtZA,SAAgBjjE,GAyWd,MAAO,CACLj5I,KAAM,SACN0zI,SAAU,CACRmE,SAAU,2BACVlD,QA3WF,kEA4WEkM,QA1WF,4DA2WEC,SAzWF,032BA0WE3wI,OATY,iBAWdghB,SAAU,CACR,CACE85B,UAAW,UACXumF,MAAO,OACPp3H,IAAK,OACL+W,SAAU,CAAE,SAEd8nH,EAAKrH,kBACL,CACE3mF,UAAW,SACXwmF,UAAW,EACX2G,SAAU,CACR,CAGE5G,MAAO,yDACT,CAEEA,MAAO,wDACPC,UAAW,IAEb,CAGED,MAAO,+BACT,CAGEA,MAAO,qCAIfG,QAAS,IAEb,I5G7SAsH,GAAK4F,iBAAiB,kB6G4HtBs9D,GAlOA,SAAaljE,GACX,MAAO,CACLj5I,KAAM,MACN0zI,SACE,o0fA2MF/B,QAAS,KACTxgH,SAAU,CACR8nH,EAAK5G,cACL4G,EAAKvH,iBACLuH,EAAKrH,kBACL,CACE3mF,UAAW,SACXumF,MAAO,IACPp3H,IAAK,IACL+W,SAAU,CAAE8nH,EAAK1H,mBAEnB,CACEC,MAAO,2CACTyH,EAAKhH,oBACLgH,EAAK/G,sBAGX,I7GzHA+G,GAAK4F,iBAAiB,sB8GJtBu9D,GAnGA,SAAiBnjE,GACf,MA6BMpH,EAAUoH,EAAKpH,QAAQ,IAAK,KAO5BwqE,EAAOpjE,EAAKH,QAAQG,EAAKvH,iBAAkB,CAAED,UAAW,IACxDuR,EAAS/J,EAAKH,QAAQG,EAAKrH,kBAAmB,CAAEH,UAAW,IAqCjE,OA/BAuR,EAAO7xH,SAAW6xH,EAAO7xH,SAAS5uB,QAClCygJ,EAAO7xH,SAASlmB,KANG,CACjBggD,UAAW,QACXumF,MAAO,wEACPC,UAAW,IAiCN,CACLzxI,KAAM,UACN8lG,QAAS,CACP,IACA,OAEF4tC,SAhFe,CACfiB,QACE,odAOF+6B,KAAA,grBAeA5uB,SACE,qIAwDF3vH,SAAU,CAnCQ,CAClB85B,UAAW,WACXmtF,SAAU,CACR,CAAE5G,MAAO,OACT,CACEA,MAAO,KACPC,UAAW,GAEb,CACED,MAAO,KACPC,UAAW,GAEb,CAAED,MAAO,SACT,CAAEA,MAAO,WAIiB,CAC5BvmF,UAAW,WACXmtF,SAAU,CACR,CAAE5G,MAAO,eACT,CACEA,MAAO,IACPC,UAAW,KAebI,EACAoH,EAAK/G,qBAtDO,CACdjnF,UAAW,SACXumF,MAAO,4BAsDLyH,EAAK7G,YACLiqE,EACAr5D,EACA,CACExR,MAAO,MACT,CACEA,MAAO,QAGf,I9GOAyH,GAAK4F,iBAAiB,sB+GTtBy9D,GA/FA,SAAiBrjE,GAEf,MAAO,CACLj5I,KAAM,gBACNs2I,kBAAkB,EAClBxwC,QAAS,CAAE,QACX4tC,SAAU,CACRmE,SAAU,OAASoB,EAAK/H,SACxBw+B,KAAA,6OAGA5uB,SACE,opBAYJ3vH,SAAU,CACR,CACE85B,UAAW,UACXumF,MAAO,63BAqBPp3H,IAAK,OAGP6+H,EAAKpH,QAAQ,gBAAiB,KAC9BoH,EAAK/G,qBACL+G,EAAKrH,kBACL,CACE3mF,UAAW,SACXumF,MAAO,IACPp3H,IAAK,WACLq3H,UAAW,GAEb,CACExmF,UAAW,QACXumF,MAAO,MACPp3H,IAAK,MACLu3H,QAAS,MACTF,UAAW,GAEb,CACExmF,UAAW,SACXmtF,SAAU,CACR,CACE5G,MAAO,eACT,CACEA,MAAO,cAEXC,UAAW,GAEb,CACExmF,UAAW,SACXmtF,SAAU,CACR,CACE5G,MAAO,sCACT,CACEA,MAAO,gBACT,CACEA,MAAO,eAEXC,UAAW,IAIfE,QAAS,KAEb,I/GYAsH,GAAK4F,iBAAiB,oBgHvFtB09D,GAlBA,SAAetjE,GACb,MAAO,CACLj5I,KAAM,QACN0zI,SACE,ylBAUFviH,SAAU,CAAE8nH,EAAKpH,QAAQ,KAAM,MAEnC,IhH0FAoH,GAAK4F,iBAAiB,mBiHqYtB29D,GA/eA,SAAcvjE,GACZ,MAAMjI,EAAQiI,EAAKjI,MA8ObyrE,EAAkB,uBAClBC,EAAgB,CACpB7kE,SAAU,SACVlD,QAhPe,CACf,MACA,SACA,QACA,MACA,QACA,OACA,UACA,QACA,QACA,SACA,QACA,QACA,QACA,OACA,QACA,MACA,SACA,QACA,QACA,WACA,UACA,WACA,MACA,QACA,WACA,UACA,UACA,SACA,MACA,KACA,OACA,OACA,OACA,QACA,WACA,aACA,YACA,cACA,WACA,aACA,MACA,OACA,OACA,SACA,OACA,MACA,QACA,QACA,SACA,QACA,MACA,UACA,OACA,SACA,WACA,OACA,WACA,WACA,WACA,gBACA,gBACA,aACA,WACA,eACA,eACA,YACA,cACA,UACA,cACA,iBACA,mBACA,cACA,WACA,WACA,WACA,gBACA,gBACA,aACA,cACA,aACA,QACA,OACA,SACA,OACA,OACA,KACA,MACA,KACA,QACA,MACA,QACA,OACA,OACA,OACA,OACA,KACA,UACA,SACA,OACA,SACA,QACA,YACA,MACA,QACA,KACA,KACA,MACA,SACA,QACA,SACA,SACA,SACA,SACA,KACA,KACA,OACA,KACA,MACA,MACA,OACA,UACA,KACA,MACA,MACA,OACA,UACA,OACA,MACA,MACA,QACA,SACA,YACA,OACA,MACA,KACA,YACA,KACA,KACA,OACA,OACA,UACA,WACA,WACA,WACA,OACA,OACA,MACA,SACA,UACA,QACA,SACA,UACA,YACA,SACA,QACA,MACA,SACA,OACA,UACA,SACA,SACA,SACA,QACA,OACA,WACA,aACA,YACA,UACA,cACA,cACA,WACA,aACA,aACA,QACA,SACA,SACA,UACA,WACA,WACA,MACA,QACA,SACA,aACA,OACA,SACA,QACA,UACA,OACA,QACA,OACA,QACA,QACA,MACA,SACA,UACA,UACA,UACA,UACA,UACA,SACA,WACA,OACA,UACA,MACA,OACA,OACA,QACA,KACA,WACA,KACA,UACA,QACA,QACA,SACA,SACA,SACA,UACA,QACA,QACA,MACA,QACA,SACA,MACA,OACA,UACA,YACA,OACA,OACA,QACA,QACA,MACA,MACA,OAOkBnmH,KAAK,MAEnB2yH,EAAQ,CACZl2F,UAAW,QACXumF,MAAO,UACPp3H,IAAK,MACLs5H,SAAUgpE,GAEN3N,EAAS,CACbv9D,MAAO,OACPp3H,IAAK,MAGDuiM,EAAO,CACX7qL,MAAO,OACPnkB,MAAO,2BAEHo5I,EAAM,CACVj1H,MAAO,WACPsmH,SAAU,CACR,CAAE5G,MAAO,QACT,CAAEA,MAAOR,EAAMxtG,OACb,sDAGA,0BAGF,CAEEguG,MAAO,0BACPC,UAAW,IAGftgH,SAAU,CAAEwrL,IAERz7D,EAAS,CACbj2F,UAAW,SACXmtF,SAAU,CAIR,CAAEzqI,MAAO,sBAET,CAAEA,MAAO,mDAET,CAAEA,MAAO,qBACT,CAAEA,MAAO,kCACT,CAAEA,MAAO,uBAEX8jI,UAAW,GAEPmrE,EAAkB,CACtB3jE,EAAK1H,iBACL4P,EACA4F,GAEI81D,EAAe,CACnB,IACA,KACA,KACA,KACA,IACA,IACA,KAOIC,EAAmB,CAACn9K,EAAQ2T,EAAM3oB,EAAQ,SAC9C,MAAMgmK,EAAoB,QAAVhmK,EACZA,EACAqmH,EAAMxtG,OAAO7Y,EAAO2oB,GACxB,OAAO09F,EAAMxtG,OACXwtG,EAAMxtG,OAAO,MAAO7D,EAAQ,KAC5B2T,EACA,oBACAq9I,EACA,oBACAhmK,EACA8xL,IAQEM,EAAY,CAACp9K,EAAQ2T,EAAM3oB,IACxBqmH,EAAMxtG,OACXwtG,EAAMxtG,OAAO,MAAO7D,EAAQ,KAC5B2T,EACA,oBACA3oB,EACA8xL,GAGEO,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,QACA,SACA,OACA,UACA,QACA,QACA,SACA,QACA,MACA,KACA,OACA,OACA,SACA,QACA,QACA,OACA,SACA,QACA,UACA,MACA,KACA,OACA,OACA,SACA,SACA,SACA,QACA,SAEA,MACA,KACA,MACA,MACA,OAQEmM,SAnGc,CAChB,WACA,YACA,QACA,QACA,OACA,QACA,OACA,QACA,OACA,QACA,SACA,QACA,MACA,MACA,OACA,QACA,QACA,MACA,OACA,MACA,QACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,OACA,OACA,MACA,OACA,OACA,KACA,SACA,SA8DED,QA5Da,CACf,OACA,QACA,SA2DAlP,QAAS,OACTxgH,SAAU,CACR8nH,EAAKpH,QAAQ,OAAQ,QACrBoH,EAAKpH,QACH,IACA,IACA,CAAEJ,UAAW,IAEf0rE,EACA7W,EACA,CACEr7I,UAAW,oBACXumF,MAAO,oBAET,CACEvmF,UAAW,OACXumF,MAAO,OACPp3H,IAAK,IACLs5H,SAAU,CAAEiB,QAAS,kCAEvB,CACEhnI,MAAO,CACL,OACA,YAEFmkB,MAAO,CAAE,EAAG,SAEd,CACE0hH,cAAe,QACfp5H,IAAK,IACL+W,SAAU,CAAE8nH,EAAKxG,wBAEnBwG,EAAKrH,kBACLsP,GAGN,InHhEAjI,GAAK4F,iBAAiB,yBoHuBtBu+D,GAnIA,SAAoBnkE,GAClB,MAAM2G,EAAW,CACfjL,QAAA,6IAIAkM,QACE,iBACFC,SACE,qRAKEwnD,EAAc,2BACdnnD,EAAQ,CACZl2F,UAAW,QACXumF,MAAO,MACPp3H,IAAK,KACLs5H,SAAUkM,GAENxc,EAAc,CAClB6V,EAAKH,QAAQG,EAAK5G,cAChB,CAAE2B,OAAQ,CACR55H,IAAK,WACLq3H,UAAW,KAEf,CACExmF,UAAW,SACXmtF,SAAU,CACR,CACE5G,MAAO,IACPp3H,IAAK,IACL+W,SAAU,CAAE8nH,EAAK1H,mBAEnB,CACEC,MAAO,IACPp3H,IAAK,IACL+W,SAAU,CACR8nH,EAAK1H,iBACL4P,MAKR,CACEl2F,UAAW,WACXumF,MAAO,MAAQyH,EAAK/H,UAEtB,CAAEM,MAAO,IAAMyH,EAAK/H,UAEpB,CAAEM,MAAOyH,EAAK/H,SAAW,OAAS+H,EAAK/H,WAGzCiQ,EAAMhwH,SAAWiyG,EAEjB,MAAMmlE,EAAQtvD,EAAKH,QAAQG,EAAKzG,WAAY,CAAEhB,MAAO82D,IAC/CE,EAAqB,0BACrB7mD,EAAS,CACb12F,UAAW,SACXumF,MAAO,YACPsE,aAAa,EAGb3kH,SAAU,CACR,CACEqgH,MAAO,KACPp3H,IAAK,KACLs5H,SAAUkM,EACVzuH,SAAU,CAAE,QAASqS,OAAO4/F,MAKlC,MAAO,CACLpjI,KAAM,aACN8lG,QAAS,CAAE,QACX4tC,SAAUkM,EACVjO,QAAS,OACTxgH,SAAUiyG,EAAY5/F,OAAO,CAC3By1G,EAAKpH,QAAQ,KAAM,KACnB,CACE5mF,UAAW,WACXumF,MAAO,QAAU82D,EAAc,YAAcE,EAC7CpuL,IAAK,QACL07H,aAAa,EACb3kH,SAAU,CACRo3K,EACA5mD,IAGJ,CACEnQ,MAAO,aACPC,UAAW,EACXtgH,SAAU,CACR,CACE85B,UAAW,WACXumF,MAAOg3D,EACPpuL,IAAK,QACL07H,aAAa,EACb3kH,SAAU,CAAEwwH,MAIlB,CACE12F,UAAW,QACXuoF,cAAe,QACfp5H,IAAK,IACLu3H,QAAS,YACTxgH,SAAU,CACR,CACEqiH,cAAe,UACfwE,gBAAgB,EAChBrG,QAAS,YACTxgH,SAAU,CAAEo3K,IAEdA,IAGJ,CACEt9I,UAAW,OACXumF,MAAO82D,EAAc,IACrBluL,IAAK,IACL07H,aAAa,EACbG,WAAW,EACXxE,UAAW,KAInB,IpHpBAwH,GAAK4F,iBAAiB,mBqHsPtBw+D,GAnWA,SAAcpkE,GA0TZ,MAAO,CACLj5I,KAAM,OACNs2I,kBAAkB,EAClBnlH,SAAU,CACR,CACEqiH,cACE,+FACFp5H,IAAK,IACLs5H,SAAU,CACRiB,QAjUS,CACf,MACA,QACA,UACA,MACA,MACA,QACA,KACA,MACA,QACA,UACA,SACA,UACA,QACA,SACA,QACA,KACA,OACA,OACA,OACA,UACA,UACA,aACA,SACA,UACA,WACA,YACA,QACA,SACA,WACA,UACA,YACA,UACA,YACA,SACA,UACA,OACA,WACA,WACA,KACA,OACA,OACA,UACA,OACA,MACA,QACA,SACA,UACA,UACA,SACA,UACA,QACA,QACA,UACA,MACA,QACA,OACA,WACA,QACA,QACA,MACA,SACA,KACA,SACA,QACA,KACA,UACA,YACA,QACA,QACA,SACA,QACA,SACA,YACA,OACA,KACA,OACA,MACA,OACA,WACA,QACA,OACA,OACA,MACA,UACA,OACA,QACA,MACA,MACA,UACA,UACA,eACA,QACA,QACA,YACA,OACA,MACA,SACA,SACA,SACA,KACA,SACA,KACA,QACA,QACA,OACA,QACA,YACA,WACA,OACA,OACA,UACA,UACA,UACA,YACA,YACA,SACA,MACA,QACA,SACA,SACA,SACA,YACA,SACA,QACA,OACA,WACA,YACA,SACA,SACA,OACA,OACA,MACA,OACA,OACA,QACA,aACA,SACA,SACA,OACA,KACA,cACA,UACA,WACA,QACA,QACA,SACA,UACA,SACA,QACA,SACA,SACA,MACA,OACA,QACA,WACA,QACA,SACA,SACA,MACA,OACA,OACA,QACA,QACA,OACA,SACA,OACA,OA2JMkM,QAxJS,CACf,OACA,QACA,OACA,aAqJMC,SAlJU,CAChB,YACA,eACA,eACA,iBACA,cACA,iBACA,eACA,eACA,YACA,YACA,iBACA,gBACA,YACA,cACA,eACA,eACA,gBACA,gBACA,aACA,YACA,MACA,QACA,MACA,MACA,MACA,WACA,QACA,YACA,kBACA,SACA,YACA,SACA,QACA,QACA,aACA,SACA,WACA,WACA,eACA,YACA,kBACA,eACA,mBACA,gBACA,mBACA,gBACA,oBACA,iBACA,kBACA,SACA,gBACA,gBACA,gBACA,sBACA,aACA,UACA,kBACA,aACA,mBACA,cACA,cACA,eACA,cACA,SACA,gBACA,gBACA,OACA,OACA,MACA,OACA,OACA,OACA,QACA,OACA,MACA,UACA,IACA,MACA,KACA,MACA,QACA,KACA,QACA,UACA,SACA,QACA,OACA,MACA,OACA,MACA,QACA,gBACA,eACA,eACA,qBACA,gBACA,sBACA,aACA,aACA,gBACA,gBACA,kBACA,cACA,kBACA,iBACA,WACA,UACA,SACA,QACA,QACA,WACA,SACA,UACA,QACA,QACA,SACA,QACA,OACA,QACA,UACA,SACA,YACA,WACA,WACA,WACA,OACA,UACA,SACA,YACA,WACA,WACA,aAgBI3vH,SAAU,CACR,CACE85B,UAAW,SACXumF,MAAO,IACPp3H,IAAK,IACL+W,SAAU,CAAE8nH,EAAK1H,mBAEnB,CACEtmF,UAAW,SACXumF,MAAO,IACPp3H,IAAK,IACL+W,SAAU,CAAE8nH,EAAK1H,mBAEnB,CACEtmF,UAAW,SACXumF,MAAO,IACPp3H,IAAK,IACL+W,SAAU,CAAE8nH,EAAK1H,mBAEnB0H,EAAK5G,cACL4G,EAAK/G,uBAGT+G,EAAK/G,sBAGX,IrHnPA+G,GAAK4F,iBAAiB,yBsHrCtBy+D,GA1EA,SAAoBrkE,GA0DlB,MAAO,CACLj5I,KAAM,cACN8lG,QAAS,CAAE,MACX30E,SAAU,CACR8nH,EAAKH,QAAQG,EAAK9G,kBAAmB,CACnCX,MAAO,YACPO,cAAc,IAzBF,CAChBqG,SAAU,CACR,CAAEzqI,MAAO,CACP,OACA,IACA,MACA,QAEF,CAAEA,MAAO,CACP,OACA,QAGJs9C,UAAW,CACT,EAAG,SACH,EAAG,WA3BQ,CACbt9C,MAAO,CACL,OACA,IACA,MACA,OAEFs9C,UAAW,CACT,EAAG,cACH,EAAG,WAnCQ,CACbt9C,MAAO,CACL,aACA,QACA,OACA,KAEFs9C,UAAW,CACT,EAAG,YACH,EAAG,gBAGiB,CACtBt9C,MAAO,CACL,aACA,aACA,QACA,MACA,OAEFs9C,UAAW,CACT,EAAG,YACH,EAAG,cACH,EAAG,YAgDT,ItHwCAguF,GAAK4F,iBAAiB,oBuHgCtB0+D,GA/IA,SAAetkE,GACb,MAAMjI,EAAQiI,EAAKjI,MACb+V,EAAM,CACV97F,UAAW,WACXmtF,SAAU,CACR,CAAE5G,MAAO,SACT,CAAEA,MAAO,aACT,CAAEA,MAAOR,EAAMxtG,OAAO,OAAQy1G,EAAK9H,wBA6BjC2kE,EAAU,CACd99D,gBAAgB,EAChBtE,SAAU,CACRmE,SAAU,yBACVgJ,QA9Ba,CACf,KACA,MACA,MACA,KACA,OACA,QACA,OACA,UACA,QACA,OACA,SACA,OACA,QACA,OACA,SACA,QACA,OACA,YACA,WACA,SACA,QACA,QACA,OACA,cAQApP,UAAW,EACXE,QAAS,KACTxgH,SAAU,CACR8nH,EAAK9G,kBACL,CACElnF,UAAW,SACX95B,SAAU,CACR8nH,EAAK1H,iBACLwV,GAEF3O,SAAU,CACR,CACE5G,MAAO,IACPp3H,IAAK,KAEP,CACEo3H,MAAO,IACPp3H,IAAK,OAKX,CACEo3H,MAAO,aACPp3H,IAAK,MACL49H,gBAAgB,EAChBhC,YAAY,EACZ7kH,SAAU,CAAE41H,IAEd,CACE97F,UAAW,SACX95B,SAAU,CACR8nH,EAAK1H,iBACLwV,GAEF3O,SAAU,CACR,CACE5G,MAAO,SACPp3H,IAAK,YACL67H,WAAW,GAGb,CACEzE,MAAO,YACPp3H,IAAK,YACL67H,WAAW,GAGb,CAAEzE,MAAO,sBAET,CAAEA,MAAO,wBAIb,CACEvmF,UAAW,SACXumF,MAAO,+DAGT,CACEvmF,UAAW,SACXumF,MAAO,4BACPC,UAAW,GAEbsV,IAIJ,MAAO,CACL/mJ,KAAM,eACN8lG,QAAS,CAAE,aACX30E,SAAU,CACR8nH,EAAK9G,kBACL,CACEqB,cAAe,oBACfp5H,IAAK,OACL+W,SAAU2kL,EAAQ3kL,SAClBuiH,SAAU,CAAE8pE,QAAS,sBAEvB,CACEvyJ,UAAW,UACXumF,MAAOR,EAAMxtG,OAAOy1G,EAAK9H,oBAAsBH,EAAMX,UAAU,UAC/DoB,UAAW,GAEb,CACED,MAAOR,EAAMX,UAAU4I,EAAK9H,oBAAsB,OAClD/2H,IAAK,QACL+W,SAAU,CACR,CACE85B,UAAW,YACXumF,MAAOyH,EAAK9H,oBACZ6C,OAAQ8hE,IAGZrkE,UAAW,IAGfE,QAAS,eAEb,IvH7BAsH,GAAK4F,iBAAiB,kBwHiEtB4+D,GAnLA,SAAaxkE,GAoIX,MAAO,CACLj5I,KAAM,MACN0zI,SAAU,CACRiB,QAtFa,CACf,OACA,MACA,KACA,MACA,OACA,QACA,QACA,OACA,OACA,UACA,QACA,WACA,YACA,QACA,UACA,WACA,MACA,KACA,OACA,OACA,MACA,OACA,SACA,SACA,UACA,MACA,OACA,OACA,UACA,UACA,KACA,SACA,KACA,UACA,YACA,KACA,QACA,WACA,MACA,QACA,SACA,QACA,MACA,MACA,MACA,QACA,SACA,KACA,KACA,MACA,OACA,MACA,QACA,MACA,SACA,SACA,MACA,MACA,SACA,WACA,MACA,QACA,OACA,QACA,MACA,OACA,QACA,OACA,UACA,MACA,SAgBEkM,QARa,CACf,OACA,SAOEj8I,KAxIU,CACZ,MACA,OACA,QACA,QACA,QACA,OACA,QACA,SACA,SACA,SACA,QACA,UACA,UACA,OACA,OACA,SACA,UACA,UACA,OACA,OACA,OACA,OACA,MACA,QACA,QACA,YACA,UACA,MACA,MACA,QACA,SACA,QACA,SACA,SACA,OACA,QACA,YACA,SACA,UACA,cACA,SACA,UACA,QACA,aACA,eACA,cA2FEk8I,SAhBc,CAChB,QACA,SACA,SACA,WAcA3vH,SAAU,CACR,CACE85B,UAAW,OACXumF,MAAO,OACPp3H,IAAK,OACLq3H,UAAW,IAEb,CACExmF,UAAW,SACXumF,MAAO,eACPp3H,IAAK,IACL+W,SAAU,CAAE,CAAEqgH,MAAO,QAEvB,CACEvmF,UAAW,SACXumF,MAAO,oBACPp3H,IAAK,OAEP6+H,EAAKrH,kBACL,CACE3mF,UAAW,OACXumF,MAAO,eACPC,UAAW,GAEb,CACExmF,UAAW,SACXwmF,UAAW,EACX2G,SAAU,CACR,CAAE5G,MAAO,4DACT,CAAEA,MAAO,+CACT,CAAEA,MAAO,iDACT,CAAEA,MAAO,2CAGbyH,EAAK9G,mBAGX,IxH9DA8G,GAAK4F,iBAAiB,kByHyPtB6+D,GA1WA,SAAazkE,GACX,MAAMjI,EAAQiI,EAAKjI,MACb4O,EAAW,CACfjL,QAAS,CACP,SACA,OACA,KACA,KACA,UACA,MACA,KACA,MACA,OACA,QAEFkM,QAAS,CACP,OACA,QACA,QAEFC,SAAU,CAER,QACA,aACA,WACA,aACA,mBACA,QACA,WACA,iBACA,eACA,YACA,WACA,SACA,SACA,MACA,cACA,cACA,eACA,QACA,aAIE68D,EAAW,CACf7rL,MAAO,WACPnkB,MAAOqjI,EAAMR,UAAU,CACrB,QACA,MACA,2BACA,kBACA,MACA,MACA,gBACA,YACA,aACA,aACA,SACA,QACA,SACA,QACA,WACA,WACA,OACA,kBACA,cACA,YACA,mBACA,cACA,gBACA,cACA,UACA,aACA,mBACA,QACA,MACA,OACA,SACA,QACA,WACA,iBACA,eACA,YACA,WACA,SACA,eACA,WACA,mBACA,QACA,SACA,WACA,WACA,eACA,UACA,iBACA,UACA,aACA,SACA,WACA,UACA,UACA,aACA,WACA,aACA,OACA,SACA,iBACA,UACA,SACA,UACA,aACA,QACA,SACA,SACA,SACA,WACA,cACA,SACA,WACA,cACA,MACA,WACA,QACA,MACA,UACA,aACA,OACA,eACA,gBACA,YACA,OACA,aACA,cACA,UACA,WACA,eACA,cACA,iBACA,eACA,MACA,OACA,QACA,eACA,WACA,YACA,eACA,MACA,YACA,OACA,QACA,SACA,SACA,SACA,WACA,QACA,QACA,eACA,OACA,UACA,SACA,gCACA,6BACA,mBACA,OACA,gBACA1jI,IAAIvN,GAAK,cAAcA,MACzBkyI,UAAW,IAGP6hE,EAAmB,2BAEnBsK,EAAc,CAClB9rL,MAAO,SACPnkB,MAAO,IAAIxH,OAAO,IAAImtM,MAAqBA,SAGvCuK,EAAa,uBACbC,EAAO,CACXhsL,MAAO,SACPnkB,MAAO,IAAIxH,OAAO,oBAAoB03M,QAAiBA,kBAGnDE,EAA+B/sE,EAAMR,OACzC,KACA,IACA,SACA,MACA,KACA,OACA,IACA,KACA,IACA,KACA,KACA,IACA,KACA,IACA,SACA,OACA,MACA,MACA,MAGI0/D,EAAW,CACfp+K,MAAO,WACPnkB,MAAOqjI,EAAMxtG,OAAOu6K,EAA8B,SAClDtsE,UAAW,GAKPyP,EAAS,CACbpvH,MAAO,SACPnkB,MAAO,IAAIxH,OAAO,GAAG8yI,EAAK7H,kBAC1BK,UAAW,GAEPusE,EAAiB,CACrB5lE,SAAU,CACR,CACEtmH,MAAO,WACPiiH,YAAa,KAEbvC,MAAO,UAET,CACEA,MAAO,CACL,IAAIrrI,OAAO,GAAG8yI,EAAK7H,aACnB,IACA,SAEFsE,WAAY,CACV,EAAG,SACH,EAAG,aAGP,CACElE,MAAO,CACLusE,EACA,IACA,SAEFroE,WAAY,CACV,EAAG,WACH,EAAG,cAITjE,UAAW,GAGPwsE,EAAQ,CACZlqE,YAAa,cACbvC,MAAO,IAAIrrI,OAAO,GAAGmtM,QAAuBA,iBAC5Cx9D,aAAa,EACbrE,UAAW,EACXtgH,SAAU,CACR,CACEW,MAAO,OACPnkB,MAAO,IAAIxH,OAAO,GAAGmtM,QAAuBA,gBAC5C7hE,UAAW,MAaXysE,EAAY,CAChBpsL,MAAO,QACP0/G,MAAO,OACPp3H,IAAK,KACLs5H,SAAUkM,GAMNu+D,EAAkB,CACtBrsL,MAAO,cACPnkB,MAAO,aAEHq1I,EAAS,CACblxH,MAAO,SACPsmH,SAAU,CACR,CACE5G,MAAO,KACPp3H,IAAK,KACL+W,SAAU,CAxBgB,CAC9BW,MAAO,cACPnkB,MAAO,QAwBDuwM,EAhBoB,CAC1BpsL,MAAO,cACPnkB,MAAO,OAgBDwwM,IAGJ,CACE3sE,MAAO,IACPp3H,IAAK,IACL+W,SAAU,CAtCc,CAC5BW,MAAO,cACPnkB,MAAO,QAsCDuwM,EACAC,MAMFC,EAAkB,CACtBtsL,MAAO,SACPnkB,MAAO,IAAIxH,OAAO,GAAGmtM,kBAGjBlwE,EAAc,CAClB8d,EACAjI,EAAK9G,kBACL8G,EAAK/G,qBACL+G,EAAKpH,QACH,eACA,OACA,CACEqJ,YAAa,WACbzJ,UAAW,IAGfksE,EACA36D,EACA46D,EACAE,EACAM,EACAH,EACAD,EACA9N,GAkBF,OAfAgO,EAAU/sL,SAAWiyG,EAed,CACLpjI,KAAM,MACN8lG,QAAS,CAAE,SACX4tC,SAAUkM,EACVzuH,SAAUiyG,EAAY5/F,OAjBX,CACX,CACE1R,MAAO,cACPnkB,MAAO,mBACP8jI,UAAW,IAEb,CACE3/G,MAAO,OACPiiH,YAAa,MACbvC,MAAO,kBAUb,IzHtPAyH,GAAK4F,iBAAiB,wB0H3FtBw/D,GAxBA,SAAkBplE,GAChB,MAAO,CACLj5I,KAAM,YACNmxB,SAAU,CACR,CACE85B,UAAW,cACX+oF,OAAQ,CAGN55H,IAAK,MACL45H,OAAQ,CACN55H,IAAK,IACL8gI,YAAa,eAGjB9C,SAAU,CACR,CAAE5G,MAAO,eACT,CAAEA,MAAO,uBAKnB,I1H8FAyH,GAAK4F,iBAAiB,mB2HgbtBy/D,GAniBA,SAAcrlE,GACZ,MAAMjI,EAAQiI,EAAKjI,MA2IbkkE,EAAY,CAChBjqJ,UAAW,oBACXumF,MAAOR,EAAMxtG,OAAO,KAAMwtG,EAAMR,OA3IhC,aACA,UACA,cACA,UACA,gBACA,gBACA,cACA,UACA,UACA,YACA,SACA,UACA,UACA,YACA,QACA,UACA,aACA,UACA,iBACA,WACA,eACA,QACA,UACA,SACA,WACA,aACA,YACA,UACA,iBACA,iBACA,eACA,cACA,SACA,sBACA,YACA,SACA,aACA,YACA,YACA,SACA,OACA,YACA,SACA,YAmGI+tE,EAAU,CAEdtzJ,UAAW,WACXumF,MAAO,qBAGHqjE,EAAY,CAEhB5pJ,UAAW,WACXumF,MAAO,eACPG,QAAS,YAGL6sE,EAAY,CAEhBvzJ,UAAW,WACXumF,MAAO,qBAGHitE,EAAa,CAEjBxzJ,UAAW,SACXumF,MAAOR,EAAMR,OArHb,UACA,yBACA,wBACA,yBACA,0BACA,wBACA,2BACA,OACA,OACA,OACA,oBACA,sBACA,oBACA,gBACA,qBACA,wBACA,aACA,OACA,OACA,MACA,UACA,WACA,WACA,OACA,OACA,UACA,QACA,sBACA,gBACA,gBACA,gBACA,gBACA,qBACA,qBACA,kBACA,cACA,QACA,cACA,iBACA,WACA,gBACA,mBACA,aACA,cACA,WACA,SACA,UACA,WACA,QACA,gBACA,qBAsEIkuE,EAAW,CAEfzzJ,UAAW,UACXumF,MAAOR,EAAMxtG,OACX,IACAwtG,EAAMR,OAvER,gBACA,eACA,aACA,SACA,KACA,SACA,UACA,OACA,OACA,QACA,QACA,UACA,WACA,gBACA,gBACA,KACA,QACA,aACA,cACA,SACA,UACA,cACA,QACA,WACA,WACA,UACA,cACA,gBACA,SACA,WACA,QACA,iBACA,UACA,aAsDIwS,EAAS,CACb/3F,UAAW,SACXmtF,SAAU,CACR,CACE5G,MAAO,IACPp3H,IAAK,KAEP,CACEo3H,MAAO,IACPp3H,IAAK,KAEP,CACEo3H,MAAO,IACPp3H,IAAK,MAGTu3H,QAAS,KACTxgH,SAAU,CA7BS,CAEnB85B,UAAW,cACXumF,MAAO,kBA4BL0jE,EACAqJ,EACA1J,EACA2J,IAmRE18D,EAAsB,CAC1Bn0I,MAAO,CACL,WACA,MACAqjI,EAAMxtG,OAAO,QAASy1G,EAAK/H,WAE7Bp/G,MAAO,CACL,EAAG,UACH,EAAG,mBAOD6sL,EAAsB,CAC1BhxM,MAAO,CACL,MACA,MACA,mBALqB,kBAQvBmkB,MAAO,CACL,EAAG,UACH,EAAG,SACH,EAAG,aAIP,MAAO,CACL9xB,KAAM,OACNs2I,kBAAkB,EAClB5C,SAAU,CACRiB,QAhTa,CACf,QACA,mBACA,UACA,sBACA,iBACA,kBACA,SACA,aACA,eACA,eACA,OACA,cACA,UACA,WACA,cACA,cACA,gBACA,gBACA,YACA,WACA,kBACA,aACA,iBACA,SACA,eACA,eACA,eACA,iBACA,cACA,oBACA,UACA,SACA,YACA,eACA,aACA,eACA,OACA,OACA,YACA,gBACA,WACA,mBACA,OACA,cACA,YACA,gBACA,WACA,WACA,eACA,kBACA,eACA,mBACA,WACA,YACA,gBACA,gBACA,YACA,YACA,WACA,aACA,WACA,iBACA,oBACA,aACA,gBACA,qBACA,gBACA,cACA,mBACA,kBACA,qBACA,kBACA,qBACA,kBACA,kBACA,YACA,OACA,aACA,OACA,UACA,WACA,eACA,eACA,gBACA,uBACA,WACA,iBACA,oBACA,gBACA,aACA,mBACA,oBACA,WACA,kBACA,kBACA,WACA,YACA,WACA,SACA,UACA,SACA,QACA,YACA,aACA,WACA,WACA,aACA,iBACA,cACA,wBACA,oBACA,cACA,kBACA,mBACA,aACA,SACA,UACA,mBACA,wBACA,2BACA,sBACA,aACA,iBACA,SACA,MACA,UACA,OACA,gBACA,gBACA,uBACA,mBACA,cACA,MACA,OACA,OACA,aACA,aACA,eACA,aACA,SACA,SACA,SACA,wBACA,cACA,SACA,QACA,aACA,kBACA,sBACA,iBACA,iBACA,YACA,kBACA,sBACA,iBACA,iBACA,cACA,eACA,mBACA,cACA,gBACA,wBACA,eACA,iBACA,uBACA,cACA,kBACA,iBACA,gBACA,YACA,oBACA,UACA,aACA,eACA,gBACA,aACA,qBACA,YACA,kBACA,oBACA,aACA,gBACA,kBACA,QACA,aACA,SACA,UACA,SACA,SACA,aACA,UACA,sBACA,mBACA,gBACA,sBACA,gBACA,aACA,WACA,MACA,kBACA,gBACA,mBACA,aACA,cACA,cACA,gBACA,oBACA,mBACA,eACA,cACA,mBACA,WA6FEkM,QA1Fa,CACf,QACA,MACA,OACA,OACA,SACA,QACA,UACA,aACA,UACA,SACA,YACA,QACA,QACA,OACA,UACA,SACA,UACA,YACA,WACA,QACA,OACA,UACA,WACA,OACA,YACA,OACA,SACA,SACA,MACA,KACA,OACA,QACA,QACA,OACA,SACA,YACA,SACA,WACA,MACA,OACA,MACA,gBACA,YACA,eACA,eACA,aACA,gBACA,OACA,QACA,OACA,OACA,WACA,SAuCA1vH,SAAU,CACR8nH,EAAK9G,kBACL8G,EAAK/G,qBACL+G,EAAKpH,QACH,IACA,IACA,CAAEJ,UAAW,IAEfktE,EACA78D,EACA,CAAEtO,cAAe,+DACjBwP,EACA07D,EACAH,EACA1J,EACA2J,EACAC,EAnWY,CAEdxzJ,UAAW,iBACXumF,MAAO,YAkWLyH,EAAK7G,aAGX,I3H7aA6G,GAAK4F,iBAAiB,yB4H+HtB+/D,GApPA,SAAoB3lE,GAClB,MAIM4lE,EAAgB,yBAkKhBC,EAAiB,CACrBjnE,SAAUgnE,EACVlqE,QAAS,CACP,aACA,SACA,YACA,oBAGJ,MAAO,CACL30I,KAAM,cACN8lG,QAAS,CACP,KACA,OACA,QACA,UACA,iBAEF4tC,SA7Be,CACf,oBAAqB,CACnB,OACA,SAEFmE,SAAUgnE,EACVlqE,QA3IU,CACV,QACA,SACA,SACA,UACA,QACA,SACA,MACA,QACA,WACA,SACA,UACA,KACA,KACA,SACA,OACA,OACA,OACA,QACA,SACA,MACA,OACA,UACA,WACA,WACA,WACA,SACA,WACA,SACA,WACA,SACA,YACA,OACA,gBACA,KACA,SACA,YACA,WACA,WACA,SACA,OACA,OACA,KACA,MACA,QACA,SACA,QACA,SACA,WACA,SACA,UACA,kBACA,WACA,aACA,UACA,OACA,YACA,OACA,SACA,SACA,WACA,mBACA,cACA,WACA,YACA,YACA,YACA,UACA,WACA,UACA,QACA,uBACA,WACA,oBACA,oBACA,kBACA,cACA,kBACA,WACA,WACA,YACA,oBACA,eACA,sBACA,gBACA,SACA,SACA,SACA,oBACA,UACA,WACA,mBACA,kBACA,QACA,eACA,4BACA,iBACA,oBACA,2BACA,YACA,eACA,gBACA,UACA,aACA,uBACA,0BACA,wBACA,uBACA,gBACA,mBACA,YACA,aACA,gBACA,iBACA,iBA0BAkM,QAxBe,CACf,QACA,OACA,QACA,OACA,MACA,MACA,KACA,QAiBAC,SAfgB,CAChB,kBACA,mBACA,gBACA,iBACA,iBAWAl8I,KA/JY,CACZ,MACA,QACA,OACA,WACA,SACA,QACA,OACA,SACA,UACA,UACA,OACA,OACA,OACA,OACA,UAqKA+sI,QAAS,KACTxgH,SAAU,CA1LM,CAChB85B,UAAW,WACXumF,MAAO,wEA0LLyH,EAAKhH,oBACLgH,EAAK/G,qBACL+G,EAAK5G,cACL4G,EAAKrH,kBACLqH,EAAKvH,iBACL,CACEzmF,UAAW,SACXmtF,SAAU,CACR,CACE5G,MAAO,KACPp3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,EAAgBlnE,EAAKH,QAAQG,EAAKvH,iBAAkB,CAAEC,QAAS,OAmB/DyuE,EAAa,UACbp9D,EAAS,CACblxH,MAAO,SACPsmH,SAAU,CArBUa,EAAKH,QAAQG,EAAKrH,kBAAmB,CACzDD,QAAS,KACTxgH,SAAU8nH,EAAKrH,kBAAkBzgH,SAASqS,OAAO29G,KAqB/Cg/D,EAlBY,CACd3uE,MAAO,+BACPp3H,IAAK,gBACL+W,SAAU8nH,EAAKrH,kBAAkBzgH,SAASqS,OAAO29G,GACjD,WAAY,CAACzhJ,EAAGmzI,KAAWA,EAAKrmI,KAAKsmI,YAAcpzI,EAAE,IAAMA,EAAE,IAC7D,SAAU,CAACA,EAAGmzI,KAAeA,EAAKrmI,KAAKsmI,cAAgBpzI,EAAE,MAAS6uI,gBAGrD0K,EAAKrG,kBAAkB,CACpCpB,MAAO,qBACPp3H,IAAK,oBAaD8mI,EAAS,CACbpvH,MAAO,SACPsmH,SAAU,CACR,CAAE5G,MAAO,+BACT,CAAEA,MAAO,iCACT,CAAEA,MAAO,6CAET,CAAEA,MAAO,+EAEXC,UAAW,GAEPoO,EAAW,CACf,QACA,OACA,QAEI2sD,EAAM,CAGV,YACA,UACA,WACA,eACA,2BACA,WACA,aACA,gBACA,YAGA,MACA,OACA,OACA,UACA,eACA,QACA,UACA,eAMA,QACA,WACA,MACA,KACA,SACA,OACA,UACA,QACA,WACA,OACA,QACA,QACA,QACA,QACA,WACA,UACA,UACA,KACA,SACA,OACA,SACA,QACA,aACA,SACA,aACA,QACA,YACA,WACA,OACA,OACA,UACA,QACA,UACA,QACA,MACA,UACA,OACA,SACA,OACA,KACA,aACA,aACA,YACA,MACA,UACA,YACA,QACA,WACA,OACA,UACA,QACA,MACA,QACA,SACA,KACA,UACA,YACA,SACA,WACA,OACA,SACA,SACA,SACA,QACA,QACA,MACA,QACA,MACA,MACA,OACA,QACA,MACA,SAGItsD,EAAY,CAGhB,UACA,iBACA,qBACA,kBACA,gBACA,cACA,iBACA,2BACA,yBACA,kBACA,yBACA,eACA,YACA,oBACA,sBACA,kBACA,gBACA,iBACA,YACA,qBACA,iBACA,eACA,mBACA,2BACA,mBACA,kBACA,gBACA,iBACA,mBACA,mBACA,uBACA,sBACA,gBACA,oBACA,iBACA,aACA,iBACA,yBACA,2BACA,kCACA,6BACA,0BACA,oBACA,4BACA,yBACA,wBACA,gBACA,mBACA,mBACA,sBACA,cACA,gBACA,gBACA,UACA,aACA,aACA,mBACA,cACA,mBACA,WACA,WACA,aACA,oBACA,YACA,qBACA,2BACA,sBAGA,cACA,aACA,UACA,QACA,YACA,WACA,oBACA,eACA,aACA,YACA,cACA,WACA,gBACA,UAGA,YACA,yBACA,SACA,kBACA,OACA,SACA,YAuBIN,EAAW,CACfjL,QAAS63D,EACT3rD,QAhBe,CAAC3jB,IAEhB,MAAMx5H,EAAS,GASf,OARAw5H,EAAM3pH,QAAQ6b,IACZ1rB,EAAOuH,KAAKmkB,GACRA,EAAKmmB,gBAAkBnmB,EACzB1rB,EAAOuH,KAAKmkB,EAAK5sB,eAEjBkB,EAAOuH,KAAKmkB,EAAKmmB,iBAGd7xC,GAKE28M,CAASxgE,GAClBiB,SAAUZ,GAKNogE,EAAqBpjF,GAClBA,EAAMpwH,IAAIsiB,GACRA,EAAK/sB,QAAQ,SAAU,KAI5Bk+M,EAAmB,CAAEnoE,SAAU,CACnC,CACEzqI,MAAO,CACL,MACAqjI,EAAMxtG,OAAO48K,EAAY,KAEzBpvE,EAAMxtG,OAAO,MAAO88K,EAAkBpgE,GAAW1xH,KAAK,QAAS,QAC/DyxL,GAEFnuL,MAAO,CACL,EAAG,UACH,EAAG,kBAKH0uL,EAAqBxvE,EAAMxtG,OAAO0tG,EAAU,cAE5CuvE,EAAsC,CAAEroE,SAAU,CACtD,CACEzqI,MAAO,CACLqjI,EAAMxtG,OACJ,KACAwtG,EAAMX,UAAU,gBAElBmwE,GAEF1uL,MAAO,CAAE,EAAG,sBAEd,CACEnkB,MAAO,CACL,KACA,SAEFmkB,MAAO,CAAE,EAAG,sBAEd,CACEnkB,MAAO,CACLsyM,EACAjvE,EAAMxtG,OACJ,KACAwtG,EAAMX,UAAU,gBAElBmwE,GAEF1uL,MAAO,CACL,EAAG,cACH,EAAG,sBAGP,CACEnkB,MAAO,CACLsyM,EACAjvE,EAAMxtG,OACJ,KACAwtG,EAAMX,UAAU,iBAGpBv+G,MAAO,CAAE,EAAG,gBAEd,CACEnkB,MAAO,CACLsyM,EACA,KACA,SAEFnuL,MAAO,CACL,EAAG,cACH,EAAG,wBAKH4uL,EAAiB,CACrB5uL,MAAO,OACPnkB,MAAOqjI,EAAMxtG,OAAO0tG,EAAUF,EAAMX,UAAU,KAAMW,EAAMX,UAAU,YAEhEswE,EAAc,CAClBlvE,UAAW,EACXD,MAAO,KACPp3H,IAAK,KACLs5H,SAAUkM,EACVzuH,SAAU,CACRuvL,EACAxa,EACAua,EACAxnE,EAAK/G,qBACL8Q,EACA9B,EACAq/D,IAGEK,EAAkB,CACtBnvE,UAAW,EACX9jI,MAAO,CACL,KAEAqjI,EAAMxtG,OAAO,wBAAyB88K,EAAkB9T,GAAKh+K,KAAK,QAAS,IAAK8xL,EAAkBpgE,GAAW1xH,KAAK,QAAS,QAC3H0iH,EACAF,EAAMxtG,OAAO48K,EAAY,KACzBpvE,EAAMX,UAAU,WAElBv+G,MAAO,CAAE,EAAG,yBACZX,SAAU,CAAEwvL,IAEdA,EAAYxvL,SAASlmB,KAAK21M,GAE1B,MAAMC,EAAqB,CACzBH,EACAD,EACAxnE,EAAK/G,qBACL8Q,EACA9B,EACAq/D,GAGI37D,EAAa,CACjBpT,MAAOR,EAAMxtG,OAAO,YAClBwtG,EAAMR,OACJyvE,EACAC,IAGJxqE,WAAY,OACZt7H,IAAK,IACL41H,SAAU,OACV0D,SAAU,CACRmN,QAAShB,EACTlL,QAAS,CACP,MACA,UAGJxjH,SAAU,CACR,CACEqgH,MAAO,KACPp3H,IAAK,IACLs5H,SAAU,CACRmN,QAAShB,EACTlL,QAAS,CACP,MACA,UAGJxjH,SAAU,CACR,UACG0vL,OAGJA,EACH,CACE/uL,MAAO,OACPsmH,SAAU,CACR,CAAEzqI,MAAOsyM,GACT,CAAEtyM,MAAOuyM,OAMjB,MAAO,CACL5pE,kBAAkB,EAClB5C,SAAUkM,EACVzuH,SAAU,CACRyzH,EACA3L,EAAK9G,kBACL8G,EAAKpH,QAAQ,KAAM,KACnBoH,EAAKpH,QACH,OACA,OACA,CAAE1gH,SAAU,CACV,CACEW,MAAO,SACPnkB,MAAO,iBAIb,CACEA,MAAO,uBACP+lI,SAAU,kBACVM,OAAQ,CACNliH,MAAO,UACP1X,IAAK6+H,EAAKlG,iBACV5hH,SAAU,CACR,CACExjB,MAAO,MACPmkB,MAAO,OACPoiH,YAAY,MAreH,CACnBpiH,MAAO,OACPsmH,SAAU,CACR,CAAE5G,MAAO,SAAUC,UAAW,IAC9B,CAAED,MAAO,QAET,CAAEA,MAAO,MAAOC,UAAW,IAC3B,CAAED,MAAO,SAoeT,CACE1/G,MAAO,oBACPnkB,MAAO,YAETu4L,EACA0a,EACAH,EACA,CACE9yM,MAAO,CACL,QACA,KACAujI,GAEFp/G,MAAO,CACL,EAAG,UACH,EAAG,sBAGPyuL,EACA,CACEzuL,MAAO,WACP2/G,UAAW,EACX+B,cAAe,cACfp5H,IAAK,OACL47H,YAAY,EACZrE,QAAS,UACTxgH,SAAU,CACR,CAAEqiH,cAAe,OACjByF,EAAKxG,sBACL,CACEjB,MAAO,KACP0C,YAAY,GAEd,CACEpiH,MAAO,SACP0/G,MAAO,MACPp3H,IAAK,MACL23H,cAAc,EACdiE,YAAY,EACZtC,SAAUkM,EACVzuH,SAAU,CACR,OACAyzH,EACAshD,EACAua,EACAxnE,EAAK/G,qBACL8Q,EACA9B,MAKR,CACEpvH,MAAO,QACPsmH,SAAU,CACR,CACE5E,cAAe,OACf7B,QAAS,SAEX,CACE6B,cAAe,wBACf7B,QAAS,WAGbF,UAAW,EACXr3H,IAAK,KACL47H,YAAY,EACZ7kH,SAAU,CACR,CAAEqiH,cAAe,sBACjByF,EAAKxG,wBAMT,CACEe,cAAe,YACf/B,UAAW,EACXr3H,IAAK,IACLu3H,QAAS,OACTxgH,SAAU,CAAE8nH,EAAKH,QAAQG,EAAKxG,sBAAuB,CAAE3gH,MAAO,kBAEhE,CACE0hH,cAAe,MACf/B,UAAW,EACXr3H,IAAK,IACL+W,SAAU,CAER,CACExjB,MAAO,0BACPmkB,MAAO,WAGTmnH,EAAKxG,wBAGTuQ,EACA9B,GAGN,InIzeAjI,GAAK4F,iBAAiB,2BoIhFtBiiE,GA7CA,SAAqB7nE,GACnB,MAAO,CACLj5I,KAAM,eACNk7I,YAAa,MACb/pH,SAAU,CACR,CACEqgH,MAAO,cACPp3H,IAAK,MACL8gI,YAAa,MACb/pH,SAAU,CAGR,CACEqgH,MAAO,OACPp3H,IAAK,OACLy7H,MAAM,GAER,CACErE,MAAO,KACPp3H,IAAK,IACLy7H,MAAM,GAER,CACErE,MAAO,KACPp3H,IAAK,IACLy7H,MAAM,GAERoD,EAAKH,QAAQG,EAAKvH,iBAAkB,CAClCC,QAAS,KACT1mF,UAAW,KACX95B,SAAU,KACV0kH,MAAM,IAERoD,EAAKH,QAAQG,EAAKrH,kBAAmB,CACnCD,QAAS,KACT1mF,UAAW,KACX95B,SAAU,KACV0kH,MAAM,OAMlB,IpImFAoD,GAAK4F,iBAAiB,wBqIpHtBkiE,GAXA,SAAmB9nE,GACjB,MAAO,CACLj5I,KAAM,aACN8lG,QAAS,CACP,OACA,OAEFyzC,mBAAmB,EAEvB,IrIuHAN,GAAK4F,iBAAiB,mBsI9CtBmiE,GAhFA,SAAc/nE,GAgEZ,MAAO,CACLj5I,KAAM,OACN0zI,SAjEe,CACfiB,QACE,iTAKF+6B,KACE,0BACF7uB,QACE,mBAwDF1vH,SAAU,CA/BM,CAChB85B,UAAW,OACXumF,MAAO,mBACPC,UAAW,GAzBoB,CAC/BxmF,UAAW,SACXumF,MAAO,MACPp3H,IAAK,MACLq3H,UAAW,IAGa,CACxBxmF,UAAW,SACXumF,MAAO,IACPp3H,IAAK,IACL+W,SAAU,CAAE8nH,EAAK1H,mBAGY,CAC7BtmF,UAAW,SACXumF,MAAO,IACPp3H,IAAK,IACL+W,SAAU,CAAE8nH,EAAK1H,kBACjBE,UAAW,GASO,CAClBD,MAAOyH,EAAK/H,SAAW,IACvBO,UAAW,GAGO,CAClBxmF,UAAW,SACXumF,MAAO,+FACPC,UAAW,GAwBTwH,EAAKhH,oBACLgH,EAAK/G,sBAGX,ItIiDA+G,GAAK4F,iBAAiB,yBuIoLtBoiE,GAnTA,SAAoBhoE,GAClB,MAwCM2G,EAAW,CACf/H,SAAU,iBACVlD,QACE,uLAIFmM,SACE,mqBAaEklD,EAAkB,CACtBx0D,MAAO,YACPC,UAAW,GAGPsV,EAAM,CACV97F,UAAW,WACXmtF,SAAU,CACR,CAAE5G,MAAO,QACT,CACEvmF,UAAW,UACXumF,MAAO,UAET,CAAEA,MAAO,uBASP0V,EAAe,CACnBj8F,UAAW,SACXmtF,SAAU,CACR,CACE5G,MAAO,IACPp3H,IAAK,KAEP,CACEo3H,MAAO,KACPp3H,IAAK,QAGT+W,SAAU,CACR60K,EACAj/C,EACA,CACE97F,UAAW,WACXumF,MAAO,UACPp3H,IAAK,YAKL8mM,EAAc,CAClBj2J,UAAW,SACXmtF,SAAU,CACR,CACE5G,MAAO,IACPp3H,IAAK,KAEP,CACEo3H,MAAO,KACPp3H,IAAK,SAeL+mM,EAAaloE,EAAKH,QACtBG,EAAKpH,QAAQ,KAAM,MACnB,CACEuG,SAAU,CAER,CACE5G,MAAO,IACPp3H,IAAK,KAGP,CACEo3H,MAAO,KACPp3H,IAAK,OAGT+W,SAAU,CAzBM,CAClB85B,UAAW,SACXmtF,SAAU,CAER,CAAE5G,MAAO,2FAET,CAAEA,MAAO,sGAuBP4vE,EAAU,CACdn2J,UAAW,WACXmtF,SAAU,CAAE,CAAE5G,MAAO,IAAIhuG,OApIzB,2rBAoI6C,qBAGzC69K,EAAW,CACfp2J,UAAW,QACXuoF,cAAe,aACfp5H,IAAK,SACL47H,YAAY,EACZvE,UAAW,EACXtgH,SAAU,CAAE8nH,EAAKzG,aAGb8uE,EAAc,CAClBr2J,UAAW,WACXumF,MAAO,cACPp3H,IAAK,UACL47H,YAAY,EACZF,aAAa,EACbrE,UAAW,EACXtgH,SAAU,CACR,CACEqgH,MAAO,WACPC,UAAW,EACXxmF,UAAW,WAEb,CACEA,UAAW,QACXumF,MAvHgB,yBAwHhBC,UAAW,GAEb,CACED,MAAO,KACPp3H,IAAK,KACL6wC,UAAW,SACXwmF,UAAW,EACXtgH,SAAU,CAAE41H,MAOZw6D,EAAW,CACf/vE,MAAO,UACPp3H,IAAK,IACL07H,aAAa,EACb3kH,SAAU,CACR+1H,EACAg6D,EACA,CACEj2J,UAAW,UACXumF,MAAO,oDAMPgwE,EAAe,CAAEppE,SAAU,CAE/B,CACEntF,UAAW,WACXumF,MAAO,IAAIhuG,OApLb,+bAoL0C,SAE1C,CACEynB,UAAW,UACXumF,MAAO,mBACPC,UAAW,KAYTgwE,EAAa,CACjBx2J,UAAW,WACXumF,MAAO,wBACPp3H,IAAK,IACL07H,aAAa,EACbrE,UAAW,EACXtgH,SAAU,CACR,CACE85B,UAAW,UACXumF,MAAO,IAAIhuG,OACTo8G,EAASjL,QAAQxxI,WAAWd,QAAQ,MAAO,KACxC,QACL6xI,YAAY,EACZzC,UAAW,GAEbwH,EAAKH,QAAQG,EAAKzG,WAAY,CAAE0B,YAAY,MAI1CwtE,EAAiB,CAErBD,EACAN,EACAnb,EACA/sD,EAAK7G,YACL8U,EACAg6D,EAEAE,EACAr6D,EApLc,CACd97F,UAAW,UACXumF,MAAO,yBA6IU,CACjBvmF,UAAW,eACXumF,MAAO,MACPC,UAAW,IAuCPkwE,EAAU,CACdnwE,MAAO,KACPp3H,IAAK,KACL23H,cAAc,EACdiE,YAAY,EACZvE,UAAW,EACXtgH,SAAU,GAAGqS,OACX,OACAk+K,EACA,CACElwE,MAAO,IAjRC,CACZ,SACA,OACA,OACA,MACA,OACA,OACA,UACA,SACA,SACA,WACA,MACA,QACA,YACA,QAmQuBhjH,KAAK,KAAO,IAC/By8B,UAAW,WACXwmF,UAAW,GAEb,CACExmF,UAAW,OACXumF,MAAO,YACPC,UAAW,KAOjB,OAFAgwE,EAAWtwL,SAASqnB,QAAQmpK,GAErB,CACL3hN,KAAM,aACN8lG,QAAS,CACP,OACA,KACA,OAEFwwC,kBAAkB,EAClB5C,SAAUkM,EACVzuH,SAAUuwL,EAAel+K,OACvB69K,EACAC,EACAC,EACAC,EACAG,GAGN,IvIjLA1oE,GAAK4F,iBAAiB,yBwIwStB+iE,GAzaA,SAAoB3oE,GAClB,MAAMjI,EAAQiI,EAAKjI,MACbkP,EAAY,CAChB,gBACA,eACA,SACA,SACA,eACA,UACA,UACA,MACA,UACA,SACA,UACA,aACA,YACA,SACA,QACA,OACA,iBACA,YACA,cACA,YACA,SACA,MACA,UACA,OACA,QACA,OACA,OACA,WACA,SACA,eACA,cACA,gBACA,QACA,cACA,aACA,eACA,iBACA,QACA,YACA,eACA,aACA,eACA,cACA,aACA,WACA,kBACA,SACA,cACA,WACA,WACA,SACA,YACA,aACA,eACA,eACA,eACA,aACA,eACA,gBACA,aACA,aACA,wBACA,WACA,QACA,UACA,OACA,YACA,MACA,OACA,SACA,SACA,QACA,SACA,OACA,aACA,QACA,YACA,OACA,SACA,WACA,SACA,QACA,OACA,aACA,QACA,QACA,MACA,YACA,MACA,aACA,SACA,SACA,SACA,UACA,UACA,UACA,UACA,WACA,YACA,WACA,MACA,cACA,cACA,SACA,YACA,UACA,QACA,cACA,cACA,kBACA,SACA,YACA,WACA,OACA,OACA,SACA,WACA,YACA,SACA,SACA,UACA,OACA,OACA,QACA,MACA,MACA,MACA,WACA,QACA,OACA,QACA,WACA,KACA,MACA,MACA,MACA,QACA,cACA,OACA,SACA,YACA,SACA,SACA,UACA,UACA,OACA,SACA,SACA,MACA,SACA,eACA,cACA,eACA,YACA,gBACA,iBACA,cACA,YACA,UACA,OACA,WACA,YACA,eACA,cACA,WACA,cACA,eACA,eACA,SACA,YACA,uBACA,gBACA,iBACA,aACA,cACA,UACA,eACA,YACA,cACA,aACA,cACA,SACA,UACA,UACA,UACA,QACA,SACA,SACA,YACA,eACA,mBACA,eACA,SACA,gBACA,WACA,SACA,aACA,YACA,QACA,YACA,YACA,SACA,eACA,OACA,UACA,cACA,cACA,QACA,OACA,SACA,MACA,aACA,MACA,eACA,YACA,aACA,qBACA,SACA,aACA,WACA,OACA,WACA,YACA,cACA,WACA,WACA,YACA,aACA,cACA,MACA,OACA,YACA,OACA,MACA,QACA,OACA,MACA,MACA,MACA,MACA,MACA,OACA,MACA,QACA,KACA,OACA,OACA,OACA,OACA,QACA,MACA,UACA,UACA,MACA,MACA,QACA,cACA,YACA,SACA,iBACA,cAEI04D,EAAQ3/D,EAAK/H,SACb2wE,EAAY,CAAEzpE,SAAU,CAC5B,CACEzqI,MAAOqjI,EAAMxtG,OAAOwtG,EAAMR,UAAU0P,GAAYlP,EAAMX,UAAU,UAChEplF,UAAW,YAEb,CACEwmF,UAAW,EACX9jI,MAAOqjI,EAAMxtG,OACX,qBACAo1K,EAAO5nE,EAAMX,UAAU,UACzBplF,UAAW,oBAGT62J,EAAY,CAChBn0M,MAAO,CACL,SACAirM,GAEF3tJ,UAAW,CACT,EAAG,UACH,EAAG,gBAGD82J,EAAW,CACftwE,UAAW,EACX9jI,MAAO,CACL,KACAirM,GAEF3tJ,UAAW,CAAE,EAAG,aAEZ4oB,EAAQ,CACZukE,SAAU,CACR,CAAEzqI,MAAO,CACP,QACA,MACAirM,EACA,MACA,UACA,MACAA,IAEF,CAAEjrM,MAAO,CACP,QACA,MACAirM,KAGJ3tJ,UAAW,CACT,EAAG,UACH,EAAG,cACH,EAAG,UACH,EAAG,0BA+EP,MAAO,CACLjrD,KAAM,aACN8lG,QAAS,CAAE,OACX4tC,SAAU,CACRiB,QAAS,CA5CX,WACA,SACA,QACA,OACA,QACA,QACA,WACA,UACA,OACA,OACA,QACA,UACA,MACA,KACA,SACA,aACA,OACA,SACA,MACA,UACA,UACA,UACA,YACA,YACA,SACA,SACA,SACA,SACA,WACA,SACA,eACA,QACA,SACA,YACA,MACA,OACA,WACA,SAQEkM,QAAS,2DACT/1H,MAAO,aACPk3L,SAAU,aACVlhE,SAAU,IACLZ,EAxEP,iBACA,UACA,QACA,SACA,YACA,UACA,SACA,QACA,YACA,YACA,YACA,UACA,UACA,YACA,aACA,SACA,aACA,aACA,QACA,WACA,OAuDEt7I,KAvFU,CACZ,UACA,OACA,OACA,QACA,SACA,QACA,MACA,OACA,UAgFAusB,SAAU,CACR0iD,EACAiuI,EACAD,EACAE,EACA9oE,EAAKhH,oBACLgH,EAAK/G,qBACL+G,EAAKvH,iBACLuH,EAAKrH,kBACLqH,EAAK5G,eAGX,IxIrSA4G,GAAK4F,iBAAiB,sByIhGtBojE,GApCA,SAAiBhpE,GACf,MAAO,CAC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XumF,MAAO,uBAsDX,I9IqEAyH,GAAK4F,iBAAiB,qB+ImStBikE,GA5aA,SAAgB7pE,GACd,MAAMjI,EAAQiI,EAAKjI,MACbE,EAAW,IAAA/qI,OAAA,sCAAA,KACX08I,EAAiB,CACrB,MACA,KACA,SACA,QACA,QACA,QACA,OACA,QACA,WACA,MACA,MACA,OACA,OACA,SACA,UACA,MACA,OACA,SACA,KACA,SACA,KACA,KACA,SACA,QACA,cACA,MACA,KACA,OACA,QACA,SACA,MACA,QACA,OACA,SAuGIjD,EAAW,CACf/H,SAAU,sBACVlD,QAASkO,EACT/B,SAvGgB,CAChB,aACA,MACA,MACA,MACA,QACA,MACA,OACA,aACA,YACA,QACA,WACA,MACA,cACA,UACA,UACA,UACA,OACA,MACA,SACA,YACA,OACA,OACA,SACA,QACA,SACA,YACA,UACA,UACA,UACA,OACA,OACA,MACA,KACA,QACA,MACA,aACA,aACA,OACA,MACA,OACA,SACA,MACA,MACA,aACA,MACA,OACA,SACA,MACA,OACA,MACA,MACA,QACA,WACA,QACA,OACA,WACA,QACA,MACA,UACA,QACA,SACA,eACA,MACA,MACA,QACA,QACA,OACA,OACA,OAmCAD,QAhCe,CACf,YACA,WACA,QACA,OACA,iBACA,QA2BAj8I,KArBY,CACZ,MACA,WACA,YACA,OACA,OACA,UACA,UACA,WACA,WACA,MACA,QACA,OACA,UAWIk+I,EAAS,CACb73F,UAAW,OACXumF,MAAO,kBAGH2P,EAAQ,CACZl2F,UAAW,QACXumF,MAAO,KACPp3H,IAAK,KACLs5H,SAAUkM,EACVjO,QAAS,KAGLoR,EAAkB,CACtBvR,MAAO,OACPC,UAAW,GAGPuR,EAAS,CACb/3F,UAAW,SACX95B,SAAU,CAAE8nH,EAAK1H,kBACjB6G,SAAU,CACR,CACE5G,MAAO,yCACPp3H,IAAK,MACL+W,SAAU,CACR8nH,EAAK1H,iBACLuR,GAEFrR,UAAW,IAEb,CACED,MAAO,yCACPp3H,IAAK,MACL+W,SAAU,CACR8nH,EAAK1H,iBACLuR,GAE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KrG,kBAAkB,CACrBpB,MAAO,cACPp3H,IAAK,YAEP,CACEo3H,MAAO,IACPp3H,IAAK,IACLq3H,UAAW,GAEb,CACED,MAAO,IACPp3H,IAAK,IACLq3H,UAAW,KAcjB,CACEA,UAAW,EACX2G,SAAU,CACR,CACEtmH,MAAO,CACL,EAAG,WACH,EAAG,UAELnkB,MAAO,CACL61M,EACAD,IAGJ,CACEzxL,MAAO,CACL,EAAG,WACH,EAAG,UAELnkB,MAAO,CACL,UACA41M,IAGJ,CACEzxL,MAAO,CACL,EAAG,cACH,EAAG,UAELnkB,MAAO,CACL81M,EACAF,IAGJ,CACEzxL,MAAO,CAAE,EAAG,UACZnkB,MAAO,CACL,mBACA41M,MAOR,CAEEzxL,MAAO,CAAE,EAAG,YACZnkB,MAAO,CACLujI,EACA,MACA,KACA,QAIJ,CACEp/G,MAAO,WACP2/G,UAAW,EACX2G,SAAU,CACR,CAAEzqI,MAAO61M,GACT,CAAE71M,MAAO,aAIb,CACEmkB,MAAO,cACP2/G,UAAW,EACX9jI,MAAO81M,GAGT,CAEEjyE,MAAO,IACPp3H,IAAK,IACL+W,SAAU,CAAE,CAAEqgH,MAAO,UAI7B,InJzGAyH,GAAK4F,iBAAiB,uBoJRtB6kE,GAtIA,SAAkBzqE,GAkBhB,MAAO,CACLj5I,KAAM,WACN8lG,QAAS,CAAE,MACX4tC,SAAU,CACRmE,SAAW,cACXlD,QAAS,CACP,MACA,KACA,MACA,SACA,QACA,QACA,aACA,KACA,OACA,SACA,OACA,MACA,QACA,YACA,WACA,MACA,MACA,WACA,UACA,KACA,KACA,UACA,UACA,cACA,OACA,OACA,MACA,MACA,MACA,MACA,OACA,MACA,SACA,UACA,MACA,SACA,SACA,KACA,OACA,KACA,MACA,MACA,MACA,MACA,SACA,SACA,OACA,KACA,MACA,OACA,MACA,UACA,OACA,QACA,QAEFmM,SA/EmB,CACrB,QACA,OACA,QACA,OACA,QACA,QACA,MACA,QACA,QACA,OACA,WACA,cACA,MACA,SACA,QAiEED,QAAS,CAAC,OAAQ,UAEpBlP,QAAS,mBACTxgH,S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CvDsnH,aAAa,EACb3kH,SAAU,CACR,CACE85B,UAAW,WACXumF,MAAO,SAIb,CACEvmF,UAAW,WACXmtF,SAAU,CACR,CAAE5G,MAAO,oBA/HD,26BA+H+B3gH,MAAM,KAAKrC,KAAK,KAAO,YAC9D,CACEgjH,MAAO,OACPC,UAAW,MAMvB,IvJRAwH,GAAK4F,iBAAiB,kBwJLtBmlE,GA5IA,SAAa/qE,GACX,MAmGMqtD,EAAmB,CACvB34L,MAAO,CACL,6CACA,MACAsrI,EAAK/H,UAEPp/G,MAAO,CACL,EAAG,UACH,EAAG,gBAIP,MAAO,CACL9xB,KAAM,gBACN0zI,SAAU,CACRiB,QA3Ba,CACf,QACA,MACA,KACA,KACA,SACA,OACA,QACA,SACA,YAmBEmM,SAnHc,CAChB,MACA,OACA,UACA,OACA,OACA,OACA,aACA,YACA,kBACA,OACA,YACA,QACA,OACA,SACA,MACA,UACA,QACA,QACA,UACA,WACA,KACA,KACA,cACA,MACA,cACA,aACA,QACA,SACA,UACA,WACA,SACA,cACA,MACA,QACA,MACA,MACA,MACA,QACA,YACA,aACA,WACA,SACA,QACA,SACA,MACA,SACA,UACA,UACA,SACA,UACA,UACA,aACA,QACA,UACA,WACA,WACA,WACA,SACA,OACA,MACA,aACA,WACA,eACA,SACA,OACA,OACA,MACA,UACA,cACA,QACA,YACA,aACA,QACA,QACA,SAyCEl8I,KAtCU,CACZ,SACA,QACA,QACA,QACA,SACA,WAkCA+sI,QAAS,KACTxgH,SAAU,CACR8nH,EAAKhH,oBACLgH,EAAK/G,qBACL+G,EAAKrH,kBACLqH,EAAKvH,iBACLuH,EAAK5G,cACL,CACEpnF,UAAW,OACXumF,MAAO,IACPp3H,IAAK,KAEPksL,EACA,CACE9yD,cAAe,gCACfp5H,IAAK,QAIb,IxJQA6+H,GAAK4F,iBAAiB,4ByJ/EtBolE,GAnEA,SAAuBhrE,GACrB,MAAO,CACLj5I,KAAM,wBACN0zI,SAAU,CACRiB,QACE,y/FAmCFmM,SACE,ocAMJ3vH,SAAU,CACR8nH,EAAKhH,oBACLgH,EAAK/G,qBACL+G,EAAKvH,iBACLuH,EAAKrH,kBACLqH,EAAK5G,cACL,CACEpnF,UAAW,UACXmtF,SAAU,CACR,CACE5G,MAAO,QACPC,UAAW,GAEb,CAAED,MAAO,mBAKnB,IzJkFAyH,GAAK4F,iBAAiB,mB0J0KtBqlE,GA3TA,SAAcjrE,GACZ,MAAMjI,EAAQiI,EAAKjI,MAGbmzE,EAAiB,QACjBhzE,EAAsBH,EAAMxtG,OAAO2gL,EAAgBlrE,EAAK9H,qBACxDD,EAAWF,EAAMxtG,OAAO2gL,EAAgBlrE,EAAK/H,UAE7C0vE,EAAkB,CACtB31J,UAAW,wBACXwmF,UAAW,EACXD,MAAOR,EAAMxtG,OACX,KACA,oCACA0tG,EACAF,EAAMX,UAAU,WAEd+zE,EAAgB,wCA+DhBzG,EAAW,CAEf,QAEA,OACA,OACA,QACA,OACA,OACA,KACA,QACA,SACA,UACA,QACA,QACA,YACA,aACA,KACA,MACA,QACA,QACA,OACA,OACA,UACA,WACA,SACA,eACA,sBACA,oBACA,iBACA,WAEA,UACA,aACA,YACA,SACA,OACA,OACA,UACA,iBACA,gBACA,mBACA,OACA,YACA,SACA,QACA,UACA,eACA,iBACA,eACA,QACA,kBACA,eACA,cACA,SACA,WACA,UACA,aACA,OACA,iBACA,eACA,OACA,SACA,WACA,eACA,aACA,oBAEI79D,EAAQ,CACZ,KACA,MACA,MACA,MACA,OACA,QACA,KACA,MACA,MACA,MACA,OACA,QACA,MACA,MACA,MACA,OACA,OACA,MACA,SACA,SACA,SACA,OAEF,MAAO,CACL9/I,KAAM,OACN8lG,QAAS,CAAE,MACX4tC,SAAU,CACRmE,SAAUoB,EAAK/H,SAAW,KAC1BtsI,KAAMk7I,EACNnL,QAhKa,CACf,WACA,KACA,QACA,QACA,SACA,MACA,QACA,QACA,WACA,QACA,KACA,MACA,OACA,OACA,SACA,QACA,QACA,KACA,MACA,KACA,OACA,KACA,MACA,OACA,QACA,QACA,MACA,OACA,MACA,WACA,OACA,MACA,MACA,SACA,OACA,OACA,SACA,SACA,QACA,QACA,OACA,MACA,OACA,SACA,QACA,SACA,UACA,MACA,UACA,QACA,QACA,SA6GEkM,QA3Ga,CACf,OACA,QACA,OACA,OACA,KACA,OAsGEC,SAAU68D,GAEZhsE,QAAS,KACTxgH,SAAU,CACR8nH,EAAKhH,oBACLgH,EAAKpH,QAAQ,OAAQ,OAAQ,CAAE1gH,SAAU,CAAE,UAC3C8nH,EAAKH,QAAQG,EAAKrH,kBAAmB,CACnCJ,MAAO,MACPG,QAAS,OAEX,CACE1mF,UAAW,SAEXumF,MAAO,gCAET,CACE1/G,MAAO,SACPsmH,SAAU,CACR,CAAE5G,MAAO,4BACT,CACEA,MAAO,MACPp3H,IAAK,IACL+W,SAAU,CACR,CACEW,MAAO,cACPnkB,MAAO,qCAMjB,CACEs9C,UAAW,SACXmtF,SAAU,CACR,CAAE5G,MAAO,gBAAkB4yE,GAC3B,CAAE5yE,MAAO,iBAAmB4yE,GAC5B,CAAE5yE,MAAO,uBAAyB4yE,GAClC,CAAE5yE,MAAO,kDACE4yE,IAEb3yE,UAAW,GAEb,CACED,MAAO,CACL,KACA,MACAL,GAEFlmF,UAAW,CACT,EAAG,UACH,EAAG,mBAGP,CACEA,UAAW,OACXumF,MAAO,SACPp3H,IAAK,MACL+W,SAAU,CACR,CACE85B,UAAW,SACXumF,MAAO,IACPp3H,IAAK,IACL+W,SAAU,CACR8nH,EAAK1H,qBAKb,CACEC,MAAO,CACL,MACA,MACA,cACAL,GAEFlmF,UAAW,CACT,EAAG,UACH,EAAG,UACH,EAAG,aAIP,CACEumF,MAAO,CACL,MACA,MACAL,EACA,MACA,MAEFlmF,UAAW,CACT,EAAG,UACH,EAAG,WACH,EAAG,YAGP,CACEumF,MAAO,CACL,OACA,MACAL,GAEFlmF,UAAW,CACT,EAAG,UACH,EAAG,gBAGP,CACEumF,MAAO,CACL,uCACA,MACAL,GAEFlmF,UAAW,CACT,EAAG,UACH,EAAG,gBAGP,CACEumF,MAAOyH,EAAK/H,SAAW,KACvBwC,SAAU,CACRiB,QAAS,OACTmM,SAAU68D,EACV/4M,KAAMk7I,IAGV,CACE70F,UAAW,cACXumF,MAAO,MAETovE,GAGN,I1JvKA3nE,GAAK4F,iBAAiB,kB2JgZtBwlE,GApiBA,SAAaprE,GACX,MAAMjI,EAAQiI,EAAKjI,MA6dnB,MAAO,CACLhxI,KAAM,MACNs2I,kBAAkB,EAClB5C,SAAU,CACRmN,QAnBa,CACf,OACA,UACA,QACA,cACA,cACA,WACA,MACA,SACA,SACA,YACA,SACA,YAQElM,QAheiB,CACnB,KACA,KACA,OACA,OACA,MACA,QACA,QACA,QACA,QACA,SACA,KACA,OACA,QACA,SACA,UACA,WACA,YACA,aACA,SACA,QACA,YACA,UACA,KACA,OACA,SACA,QACA,OACA,WACA,WACA,SACA,OACA,KACA,SACA,WACA,QACA,OACA,QACA,QACA,SACA,UACA,OACA,OACA,WACA,QACA,UACA,SACA,UACA,SACA,MACA,OACA,MACA,WACA,SACA,SACA,UACA,SACA,SACA,SACA,MACA,OACA,WACA,OACA,QACA,SACA,UACA,QACA,SACA,MACA,UACA,MACA,MACA,QACA,KACA,UACA,QACA,SACA,SACA,WACA,WACA,OACA,UACA,OACA,QACA,SACA,QACA,SACA,OACA,KACA,MACA,OACA,UACA,SACA,UACA,MACA,OACA,KACA,KACA,QACA,UACA,aACA,QACA,WACA,SACA,MACA,QACA,SACA,SACA,WACA,OACA,UAoXAxjH,SAAU,CACR,CAEE85B,UAAW,UACXumF,MAAO,0CAET,CAEEvmF,UAAW,WACXumF,MAAO,+BAET,CACEA,MAAO,CACL,OACA,oBACA,YACA,aAEFvmF,UAAW,CACT,EAAG,UACH,EAAG,WAGP,CACEumF,MAAO,CACL,eACA,MACA,2BAEFvmF,UAAW,CACT,EAAG,WACH,EAAG,mBAGP,CACEA,UAAW,WACXumF,MAAO,IAAMR,EAAMR,OAxHvB,SACA,WACA,SACA,UACA,WACA,UACA,UACA,KACA,OACA,MACA,OACA,SACA,OACA,KACA,QACA,QACA,SACA,QACA,OACA,SACA,MACA,QACA,UACA,QACA,OACA,WACA,UACA,QACA,MACA,UACA,QACA,WACA,QACA,UACA,WACA,QACA,QACA,UACA,OACA,MACA,SACA,SACA,UACA,WACA,UACA,UACA,SACA,UACA,UACA,QACA,UACA,OACA,KACA,OACA,UACA,QACA,SACA,SACA,QACA,WA+DE,CAEEvlF,UAAW,iBACXumF,MAAO,2BAET,CAIEvmF,UAAW,OACXumF,MAAOR,EAAMR,OA/ZjB,MACA,OACA,OACA,QACA,QACA,OACA,QACA,QACA,OACA,UACA,UACA,OACA,MACA,UACA,OACA,OACA,MACA,OACA,SACA,OACA,QACA,SACA,UACA,SACA,WACA,WACA,MACA,OACA,MACA,SACA,KACA,SACA,WACA,SACA,UACA,UACA,QACA,OACA,UACA,WACA,WACA,MACA,SACA,QACA,UACA,UACA,QACA,QACA,SACA,SACA,SACA,SACA,UACA,OACA,MACA,UACA,MACA,QACA,OACA,QACA,WACA,UACA,QACA,WACA,SACA,MACA,OACA,QACA,MACA,UACA,SACA,OACA,UACA,QACA,WACA,SACA,OACA,YACA,WACA,UACA,QACA,OACA,UACA,WACA,WACA,QACA,SACA,QACA,QACA,WACA,UACA,SACA,OACA,OACA,QACA,UACA,QACA,OACA,OACA,SACA,SACA,QACA,YACA,UACA,UACA,SACA,MACA,WACA,OACA,UACA,QACA,SACA,SACA,QACA,SACA,SACA,MACA,QACA,QACA,QACA,MACA,UACA,UACA,WACA,MACA,SACA,OACA,SACA,SACA,UACA,SACA,MACA,QACA,OACA,SACA,SACA,SACA,UACA,MACA,MACA,OACA,MACA,SACA,MACA,QACA,QACA,OACA,IACA,QACA,QACA,SACA,OACA,MACA,OACA,UACA,WACA,MACA,OACA,QACA,MACA,QACA,UACA,OACA,WACA,WACA,UACA,QACA,UACA,WACA,SACA,WACA,WACA,QACA,MACA,OACA,OACA,MACA,QACA,SACA,SACA,SACA,SACA,QACA,OACA,SACA,SACA,SACA,SACA,SACA,SACA,UACA,UACA,SACA,QACA,QACA,SACA,OACA,MACA,SACA,OACA,MACA,OACA,WACA,UACA,SACA,OACA,MACA,SACA,SACA,SACA,UACA,SACA,MACA,SACA,SACA,SACA,UACA,QACA,SACA,MACA,OACA,OACA,WACA,OACA,SACA,QACA,YACA,UACA,WACA,OACA,QACA,QACA,UACA,SACA,MACA,MACA,SACA,WACA,WACA,SACA,UACA,SACA,SACA,UACA,UACA,SACA,UACA,WACA,YACA,WACA,YACA,WACA,YACA,WACA,WACA,YACA,YACA,aACA,cACA,aACA,cACA,aACA,cACA,aACA,SACA,UACA,UACA,WACA,QACA,SACA,QACA,SACA,UACA,OACA,MACA,UACA,UACA,WACA,YAyIwC,WAEtC,CACEvlF,UAAW,SACXmtF,SAAU,CACRa,EAAKvH,iBACLuH,EAAKrH,oBAGTqH,EAAKpH,QAAQ,MAAO,KACpBoH,EAAK/G,sBAGX,I3J7YA+G,GAAK4F,iBAAiB,oB4JwDtBylE,GA7MA,SAAerrE,GACb,MAAMjI,EAAQiI,EAAKjI,MAObmQ,EAAQ,CACZl2F,UAAW,QACXmtF,SAAU,CACR,CAAE5G,MAAO,oBACT,CACEA,MAAO,OACPp3H,IAAK,QAKL4oI,EAAS,CACb/3F,UAAW,SACXmtF,SAAU,CACR,CACE5G,MAAO,MACPp3H,IAAK,OAEP,CACEo3H,MAAO,IACPp3H,IAAK,IACLu3H,QAAS,MACTxgH,SAAU,CAAE8nH,EAAK1H,mBAEnB,CACEC,MAAO,UACPp3H,IAAK,IACLu3H,QAAS,MACTxgH,SAAU,CACR8nH,EAAK1H,iBACL4P,IAGJ,CACEl2F,UAAW,SACXumF,MAAO,YACPp3H,IAAK,MACL+W,SAAU,CAAEgwH,GACZ1P,UAAW,MAMX8yE,EAAO,CACXt5J,UAAW,OACXumF,MAAO,wBACPC,UAAW,GAGPu2D,EAAO,CACX/8I,UAAW,QACXumF,MAAO,iFACPC,UAAW,GAGP59D,EAAQ,CACZ5oB,UAAW,QACXuoF,cAAe,0BACfp5H,IAAK,aACL47H,YAAY,EACZ7kH,SAAU,CACR8nH,EAAKhH,oBACLgH,EAAK/G,qBACL,CACEsB,cAAe,eACf/B,UAAW,IAEb,CACED,MAAO,KACPp3H,IAAK,KACL23H,cAAc,EACdiE,YAAY,EACZvE,UAAW,EACXtgH,SAAU,CACRozL,EACAtrE,EAAKhH,oBACLgH,EAAK/G,uBAGT,CACEjnF,UAAW,SACXumF,MAAO,KACPp3H,IAAK,KACL23H,cAAc,EACdiE,YAAY,EACZvE,UAAW,EACXtgH,SAAU,CACRozL,EACAtrE,EAAKhH,oBACLgH,EAAK/G,uBAGT81D,IAIE+G,EAAS,CACb9jJ,UAAW,WACXuoF,cAAe,MACfp5H,IAAK42H,EAAMX,UAAU,eACrBl/G,SAAU,CAAE62K,IAwEd,MAAO,CACLhoM,KAAM,QACN0zI,SAAU,CACRmN,QAAS,kBACTlM,QAAS,+RAEXxjH,SAAU,CAzBY,CACtBqgH,MAAO,CACL,MACA,MACA,QACA,MACA,OAEFkE,WAAY,CACV,EAAG,UACH,EAAG,UACH,EAAG,QAELt7H,IAAK,IACL+W,SAAU,CArBY,CACtB85B,UAAW,SACXumF,MAAO,SAgCLyH,EAAKhH,oBACLgH,EAAK/G,qBACL8Q,EACAuhE,EACAxV,EACAl7H,EACAolE,EAAK5G,cAnFS,CAChBb,MAAO,CACL,OACA,YACA,eAEFkE,WAAY,CAAE,EAAG,YAGP,CACVlE,MAAO,CACL,OACA,MACA,MACA,kBAEFkE,WAAY,CACV,EAAG,UACH,EAAG,YAOL,CAAE/nI,MAAO,cACT,CACE6jI,MAAO,iBACPkC,SAAU,UAIa,CACzBlC,MAAO,CACL,QACA,QACA,aAEFkE,WAAY,CAAE,EAAG,YApJA,CACjBzqF,UAAW,OACXumF,MAAO,eAuMX,I5JrDAyH,GAAK4F,iBAAiB,qB6JqCtB2lE,GAxLA,SAAgBvrE,GACd,MAAMwrE,EAAkB,wCAClBC,EAA0B,0BAE1B9kE,EAAW,CACf/H,SAAU4sE,EACV3jE,SACE,ooEAmCEuiD,EAAU,CACdp4I,UAAW,UACXumF,MAAO,eAAiBizE,EAAkB,YAGtCvjE,EAAS,CACbj2F,UAAW,SACXmtF,SAAU,CACR,CACE5G,MAAOkzE,EACPjzE,UAAW,GAEb,CACED,MApD2BkzE,EAA0B,SAAWA,EAA0B,IAqD1FjzE,UAAW,GAEb,CAAED,MAAO,sBACT,CAAEA,MAAO,sBACT,CAAEA,MAAO,8BAIPwR,EAAS/J,EAAKrH,kBAEdm1D,EAAgB,CACpB9tD,EAAKpH,QACH,IACA,IACA,CAAEJ,UAAW,IAEfwH,EAAKpH,QAAQ,OAAQ,SAGjB+mE,EAAQ,CACZpnE,MAAOizE,EACPhzE,UAAW,GAGPkzE,EAAe,CACnB15J,UAAW,SACXumF,MAAO,IAAOizE,GAGV1c,EAAO,CACX/vD,gBAAgB,EAChBvG,UAAW,GAGPmzE,EAAc,CAClBxsE,SAAU,CACR,CAAE5G,MAAO,KACT,CAAEA,MAAO,MAEXrgH,SAAU,CACR,CACEqgH,MAAO,MACPp3H,IAAK,MACL+W,SAAU,CACR,OACAkyK,EACArgD,EACA9B,EACA03D,EACA+L,MAMF3c,EAAO,CACX/8I,UAAW,OACXwmF,UAAW,EACXD,MAAOizE,EACP/wE,SAAUkM,GA0BNkoD,EAAO,CACX1vD,SAAU,CACR,CACE5G,MAAO,MACPp3H,IAAK,OAEP,CACEo3H,MAAO,MACPp3H,IAAK,QAGT+W,SAAU,CAlCG,CACbqgH,MAAO,SACPwG,gBAAgB,EAChBlC,aAAa,EACb3kH,SAAU,CACR62K,EACA,CACE9zD,YAAY,EACZkE,SAAU,CACR,CACE5G,MAAO,KACPp3H,IAAK,MAEP,CACEo3H,MAAO,KACPp3H,IAAK,OAGT+W,SAAU,CAAEynL,MAkBd5Q,EACAD,IAcJ,OAVAA,EAAK52K,SAAW,CACdkyK,EACAniD,EACA8B,EACA41D,EACA+L,EACAC,EACA9c,GACAtkK,OAAOujK,GAEF,CACL/mM,KAAM,SACN8lG,QAAS,CAAC,OACV6rC,QAAS,KACTxgH,SAAU,CACR8nH,EAAK/F,UACLgO,EACA8B,EACA2hE,EACAC,EACA9c,GACAtkK,OAAOujK,GAEb,I7JlCA9tD,GAAK4F,iBAAiB,qB8JvFtBgmE,GA/DA,SAAgB5rE,GACd,MAAM6rE,EAAkB,CACtB7rE,EAAK5G,cACL,CACEpnF,UAAW,SACXumF,MAAO,OACPp3H,IAAK,OACL+W,SAAU,CACR8nH,EAAK1H,iBACL,CAAEC,MAAO,SAKf,MAAO,CACLxxI,KAAM,SACN8lG,QAAS,CAAE,OACX4tC,SAAU,CACRmE,SAAU,QACVlD,QAAS,wIAETkM,QACE,6CACFC,SAAA,4bAQFnP,QAAS,uBACTxgH,SAAU,CACR,CACE85B,UAAW,WACXuoF,cAAe,WACfp5H,IAAK,IACL+W,SAAU,CACR8nH,EAAKxG,sBACL,CACExnF,UAAW,SACXumF,MAAO,MACPp3H,IAAK,SAMX,CACEo3H,MAAO,gCACPC,UAAW,GAEb,CACED,MAAO,MACPp3H,IAAK,aACLq3H,UAAW,EACXtgH,SAAU2zL,GAEZ7rE,EAAKpH,QAAQ,KAAM,MACnBruG,OAAOshL,GAEb,I9J0FA7rE,GAAK4F,iBAAiB,uC+JhKtB,MAyKM2F,EAAO,CA3HX,IACA,OACA,UACA,UACA,QACA,QACA,IACA,aACA,OACA,SACA,SACA,UACA,OACA,OACA,KACA,MACA,UACA,MACA,MACA,KACA,KACA,KACA,WACA,aACA,SACA,SACA,OACA,KACA,KACA,KACA,KACA,KACA,KACA,SACA,SACA,OACA,IACA,SACA,MACA,QACA,MACA,MACA,QACA,SACA,KACA,OACA,OACA,OACA,MACA,SACA,KACA,WACA,SACA,IACA,UACA,IACA,QACA,OACA,UACA,SACA,SACA,OACA,SACA,UACA,MACA,QACA,QACA,KACA,WACA,QACA,KACA,QACA,OACA,KACA,KACA,MACA,QAIA,OACA,IACA,SACA,OACA,UACA,MACA,SACA,SACA,UACA,gBACA,sBACA,cACA,mBACA,oBACA,oBACA,UACA,iBACA,UACA,UACA,eACA,WACA,qBACA,SACA,eACA,iBACA,iBACA,OACA,SACA,UACA,QACA,OACA,OACA,UACA,WACA,OACA,OACA,MACA,WACA,QACA,gBACA,YAWIC,EAAiB,CACrB,YACA,cACA,eACA,QACA,cACA,cACA,sBACA,gBACA,eACA,eACA,gBACA,OACA,SACA,QACA,kBACA,aACA,cACA,iBACA,kBACA,UACA,uBACA,mBACA,yBACA,+BACA,aACA,OACA,YACA,SACA,QAEA,YACA,YACA,aACA,cACAt+F,OAAO3K,UAGHkpG,EAAiB,CACrB,SACA,WACA,QACA,UACA,UACA,UACA,UACA,MACA,WACA,OACA,QACA,UACA,QACA,cACA,gBACA,aACA,SACA,QACA,gBACA,eACA,MACA,OACA,eACA,QACA,gBACA,WACA,UACA,KACA,OACA,aACA,eACA,OACA,OACA,aACA,MACA,YACA,UACA,iBACA,eACA,mBACA,cACA,aACA,eACA,WACA,eACA,OACA,oBACA,YACA,aACA,WACA,QACA,OACA,QACA,SACA,gBACA,eACA,QACA,UACA,SACAv+F,OAAO3K,UAGHmpG,EAAkB,CACtB,QACA,WACA,SACA,MACA,aACA,eACA,aACA,gBACA,SACA,OACA,cACA,YACA,UACA,kBACAx+F,OAAO3K,UAEHopG,EAAa,CACjB,eACA,gBACA,cACA,aACA,qBACA,MACA,cACA,YACA,wBACA,kBACA,sBACA,qBACA,sBACA,4BACA,iBACA,uBACA,kBACA,sBACA,wBACA,qBACA,4BACA,aACA,eACA,kBACA,sBACA,aACA,wBACA,wBACA,kBACA,mBACA,mBACA,oBACA,sBACA,wBACA,wBACA,oBACA,kBACA,iBACA,aACA,SACA,eACA,qBACA,mBACA,yBACA,yBACA,yBACA,qBACA,2BACA,2BACA,2BACA,qBACA,qBACA,gBACA,sBACA,4BACA,6BACA,sBACA,sBACA,kBACA,eACA,wBACA,0BACA,eACA,sBACA,sBACA,qBACA,sBACA,qBACA,gBACA,sBACA,oBACA,0BACA,0BACA,0BACA,sBACA,4BACA,4BACA,4BACA,sBACA,sBACA,cACA,oBACA,oBACA,oBACA,gBACA,eACA,qBACA,qBACA,qBACA,iBACA,0BACA,4BACA,eACA,aACA,mBACA,yBACA,0BACA,mBACA,mBACA,eACA,SACA,YACA,uBACA,gBACA,WACA,iBACA,YACA,oBACA,aACA,WACA,aACA,aACA,cACA,eACA,eACA,eACA,cACA,QACA,OACA,YACA,YACA,QACA,sBACA,8BACA,gBACA,kBACA,eACA,eACA,cACA,aACA,cACA,oBACA,oBACA,oBACA,cACA,eACA,UACA,UACA,+BACA,2BACA,gCACA,yBACA,0BACA,YACA,iBACA,iBACA,UACA,qBACA,oBACA,gBACA,cACA,MACA,YACA,aACA,SACA,KACA,KACA,YACA,UACA,oBACA,cACA,oBACA,eACA,OACA,eACA,YACA,SACA,OACA,aACA,iBACA,YACA,YACA,cACA,YACA,QACA,cACA,gBACA,OACA,OACA,eACA,cACA,wBACA,eACA,yBACA,sBACA,eACA,YACA,mBACA,cACA,iBACA,eACA,aACA,iBACA,0BACA,4BACA,uBACA,wBACA,eACA,0BACA,oBACA,0BACA,qBACA,yBACA,uBACA,wBACA,0BACA,cACA,sBACA,MACA,+BACA,6BACA,OACA,YACA,oBACA,iBACA,iBACA,cACA,kBACA,oBACA,WACA,WACA,eACA,iBACA,gBACA,sBACA,wBACA,qBACA,sBACA,SACA,sBACA,wBACA,UACA,OACA,oBACA,kBACA,mBACA,WACA,iBACA,uBACA,cACA,QACA,aACA,cACA,kBACA,oBACA,eACA,mBACA,qBACA,YACA,kBACA,gBACA,eACA,UACA,OACA,iBACA,iBACA,aACA,cACA,mBACA,aACA,mBACA,sBACA,kBACA,SACA,eACA,mBACA,qBACA,gBACA,gBACA,oBACA,sBACA,cACA,eACA,aACA,cACA,SACA,aACA,aACA,eACA,QACA,OACA,cACA,mBACA,qBACA,qBACA,oBACA,qBACA,oBACA,YACA,iBACA,aACA,YACA,cACA,gBACA,cACA,YACA,YACA,oBACA,aACA,aACA,aACA,iBACA,aACA,kBACA,YACA,iBACA,aACA,kBACA,YACA,iBACA,WACA,YACA,WACA,YACA,SACA,OACA,SACA,aACA,kBACA,SACA,gBACA,kBACA,cACA,kBACA,gBACA,UACA,QACA,UACA,UACA,gBACA,iBACA,gBACA,gBACA,WACA,kBACA,iBACA,uBACA,kBACA,gBACA,aACA,aACA,UACA,sBACA,4BACA,6BACA,wBACA,wBACA,UACA,gBACA,oBACA,sBACA,iBACA,iBACA,qBACA,uBACA,eACA,gBACA,cACA,OACA,mBACA,oBACA,oBACA,cACA,QACA,cACA,eACA,cACA,qBACA,gBACA,cACA,aACA,iBACA,WACA,kBACA,sBACA,qBACA,SACA,IACA,SACA,OACA,aACA,cACA,QACA,SACA,UACA,aACA,gBACA,QACA,kBACA,gBACA,sBACA,0BACA,4BACA,uBACA,uBACA,2BACA,6BACA,qBACA,sBACA,oBACA,iBACA,uBACA,2BACA,6BACA,wBACA,wBACA,4BACA,8BACA,sBACA,uBACA,qBACA,oBACA,mBACA,mBACA,kBACA,uBACA,uBACA,kBACA,mBACA,kBACA,wBACA,eACA,gBACA,kBACA,QACA,WACA,MACA,aACA,eACA,SACA,mBACA,oBACA,iBACA,kBACA,oBACA,iBACA,eACA,WACA,eACA,aACA,iBACA,kBACA,cACA,uBACA,kBACA,wBACA,uBACA,uBACA,2BACA,wBACA,4BACA,gBACA,sBACA,yBACA,sBACA,cACA,eACA,mBACA,gBACA,iBACA,cACA,mBACA,iBACA,wBACA,0BACA,YACA,iBACA,kBACA,iBACA,MACA,eACA,YACA,gBACA,mBACA,kBACA,aACA,sBACA,mBACA,sBACA,sBACA,6BACA,YACA,eACA,cACA,cACA,gBACA,iBACA,gBACA,qBACA,sBACA,qBACA,uBACA,aACA,gBACA,iBACA,eACA,cACA,cACA,aACA,eACA,eACA,cACA,uBACA,SACA,QACA,cACA,aACA,eACA,YACA,eACA,IACA,IACA,UACA,QACAz+F,OAAO3K,iBAgITupK,GApHA,SAAc9rE,GACZ,MAAM6L,EAvzBM,CAAC7L,IACN,CACL8L,UAAW,CACTjzH,MAAO,OACP0/G,MAAO,cAETwT,cAAe/L,EAAK/G,qBACpB+S,SAAU,CACRnzH,MAAO,SACP0/G,MAAO,mDAET0T,kBAAmB,CACjBj6F,UAAW,WACXumF,MAAO,gBAET2T,wBAAyB,CACvBrzH,MAAO,gBACP0/G,MAAO,KACPp3H,IAAK,KACLu3H,QAAS,IACTxgH,SAAU,CACR8nH,EAAKvH,iBACLuH,EAAKrH,oBAGTwT,gBAAiB,CACftzH,MAAO,SACP0/G,MAAOyH,EAAK7H,UAAY,kGASxBK,UAAW,GAEb4T,aAAc,CACZp6F,UAAW,OACXumF,MAAO,+BA+wBGmB,CAAMsG,GACd+rE,EAAoBrgE,EACpBsgE,EAAmBvgE,EAEnBwlD,EAAgB,WAGhBhE,EAAW,CACfj7I,UAAW,WACXumF,MAAO,kCACPC,UAAW,GAGb,MAAO,CACLzxI,KAAM,OACNs2I,kBAAkB,EAClB3E,QAAS,SACTxgH,SAAU,CACR8nH,EAAKhH,oBACLgH,EAAK/G,qBAGL4S,EAAMM,gBACN,CACEn6F,UAAW,cACXumF,MAAO,kBACPC,UAAW,GAEb,CACExmF,UAAW,iBACXumF,MAAO,oBACPC,UAAW,GAEbqT,EAAMK,wBACN,CACEl6F,UAAW,eACXumF,MAAO,OAASgT,EAAKh2H,KAAK,KAAO,OAEjCijH,UAAW,GAEb,CACExmF,UAAW,kBACXumF,MAAO,KAAOyzE,EAAiBz2L,KAAK,KAAO,KAE7C,CACEy8B,UAAW,kBACXumF,MAAO,SAAWwzE,EAAkBx2L,KAAK,KAAO,KAElD03K,EACA,CACE10D,MAAO,KACPp3H,IAAK,KACL+W,SAAU,CAAE2zH,EAAMM,kBAEpBN,EAAMO,aACN,CACEp6F,UAAW,YACXumF,MAAO,OAASoT,EAAWp2H,KAAK,KAAO,QAEzC,CAAEgjH,MAAO,8oCACT,CACEA,MAAO,IACPp3H,IAAK,QACLq3H,UAAW,EACXtgH,SAAU,CACR2zH,EAAME,cACNkhD,EACAphD,EAAMG,SACNH,EAAMM,gBACNnM,EAAKrH,kBACLqH,EAAKvH,iBACLoT,EAAMC,UACND,EAAMI,oBAMV,CACE1T,MAAO,oBACPkC,SAAU,CACRmE,SAAUqyD,EACVv1D,QAAS,qBAGb,CACEnD,MAAO,IACPp3H,IAAK,OACL07H,aAAa,EACbpC,SAAU,CACRmE,SAAU,UACVlD,QAtFa,kBAuFbvK,UAAWqa,EAAej2H,KAAK,MAEjC2C,SAAU,CACR,CACEqgH,MAAO04D,EACPj/I,UAAW,WAEb,CACEumF,MAAO,eACPvmF,UAAW,aAEbi7I,EACAjtD,EAAKrH,kBACLqH,EAAKvH,iBACLoT,EAAMG,SACNH,EAAMM,kBAGVN,EAAMI,mBAGZ,E/JxwB8BggE,IAC9BjsE,GAAK4F,iBAAiB,oBgKjItBsmE,GAvBA,SAAelsE,GACb,MAAO,CACLj5I,KAAM,gBACN8lG,QAAS,CACP,UACA,gBAEF30E,SAAU,CACR,CACE85B,UAAW,cAIXumF,MAAO,qCACPwC,OAAQ,CACN55H,IAAK,gBACL8gI,YAAa,UAKvB,IhKoIAjC,GAAK4F,iBAAiB,oBiKrCtBumE,GArHA,SAAensE,GACb,MAAMosE,EAAuB,CAC3B,MACA,MACA,MACA,OACA,OACA,QACA,MACA,SACA,QACA,OACA,KACA,MACA,OACA,OACA,MACA,MACA,MACA,MACA,MACA,KACA,MACA,SACA,MACA,MACA,OACA,MACA,QACA,OACA,OAkCF,MAAO,CACLrlN,KAAM,QACNmxB,SAAU,CACR,CACE85B,UAAW,SACXumF,MAAO,IACPp3H,IAAK,IACLq3H,UAAW,GAEbwH,EAAKpH,QACH,IACA,IACA,CAAEJ,UAAW,IAEf,CACExmF,UAAW,UACXmtF,SAAU,CACR,CAAE5G,MAAO,6BACT,CACEA,MAAO,oBACPC,UAAW,GAEb,CACED,MAAO,oBACPC,UAAW,GAEb,CAAED,MAAO,OAvCM,CACrB,YACA,cACA,WACA,QACA,YACA,SACA,UACA,YACA,SACA,SACA,UA4BuChjH,KAAK,KAAO,OAGjD,CACEy8B,UAAW,WACXmtF,SAAU,CACR,CAAE5G,MAAO,OAAS6zE,EAAqB72L,KAAK,KAAO,QACnD,CACEgjH,MAAO,OAAS6zE,EAAqB72L,KAAK,KAAO,2BACjDijH,UAAW,IAEb,CACED,MAAO,OAtEa,CAC5B,OACA,OACA,QACA,QACA,UACA,OACA,SACA,UACA,UACA,OACA,WACA,SACA,OACA,UACA,SACA,OACA,UAqD8ChjH,KAAK,KAAO,2BAClDijH,UAAW,MAIjB,CACExmF,UAAW,QACXumF,MAAO,cACPC,UAAW,GAEb,CAAED,MAAO,eAGf,IjKwCAyH,GAAK4F,iBAAiB,wBkK/FtBymE,GA5DA,SAAmBrsE,GACjB,MAAMssE,EAAe,qBACfC,EAAO,CACXv6J,UAAW,SACXumF,MAAO,WAEHyzD,EAAS,CACbh6I,UAAW,SACXumF,MAAO,IAAMyH,EAAK9H,qBAEpB,MAAO,CACLnxI,KAAM,YACN8lG,QAAS,CAAE,MACX4tC,SAAU,CACR,OACA,QACA,MACA,OACA,QACA,eAEFviH,SAAU,CACR8nH,EAAKpH,QAAQ,IAAK,KAClBoH,EAAKvH,iBACL,CACEzmF,UAAW,OACXumF,MAAO,wBACPC,UAAW,GAEb,CACED,MAAO+zE,EAAe,IACtB9zE,UAAW,GAEbwH,EAAK5G,cACL4yD,EACAugB,EACA,CAIEh0E,MAAO,UAAY+zE,EAAe,QAAUA,EAAe,YAC3DzvE,aAAa,EACb17H,IAAK,KACLu3H,QAAS,KACTxgH,SAAU,CAAE,CAAEqgH,MAAO,aAAe+zE,KAEtC,CACE/zE,MAAO,OACPp3H,IAAK,MACL+W,SAAU,CACR8nH,EAAKvH,iBACL8zE,EACAvsE,EAAK5G,cACL4yD,KAKV,IlKkGAhsD,GAAK4F,iBAAiB,kBmK1FtB4mE,GAlEA,SAAaxsE,GACX,MAAO,CACLj5I,KAAM,oBACN8lG,QAAS,CAAE,MACX4tC,SAAU,CACRmE,SAAU,eACVlD,QAAA,iPAMAmM,SAAA,uFAGAD,QACE,+CAEJlP,QAAS,UACTxgH,SAAU,CACR,CACE85B,UAAW,UACXumF,MAAO,mBACPC,UAAW,GAEbwH,EAAKpH,QACH,SACA,SACA,CAAE1gH,SAAU,CAAE,UAEhB,CACE85B,UAAW,SACXumF,MAAO,0BAGT,CACEvmF,UAAW,OACXumF,MAAO,iBAET,CACEvmF,UAAW,OACXumF,MAAO,kBACPC,UAAW,GAEb,CACED,MAAO,sBACTyH,EAAKH,QAAQG,EAAKvH,iBAAkB,CAClCzmF,UAAW,SACXwmF,UAAW,IAEbwH,EAAKH,QAAQG,EAAKrH,kBAAmB,CAAED,QAAS,OAChD,CACE1mF,UAAW,SACXumF,MACE,2HAIFC,UAAW,GAEb,CAAED,MAAO,UAIf,InK6FAyH,GAAK4F,iBAAiB,kBoKg8EtB6mE,GA7jFA,SAAazsE,GAEX,MAcMqM,EAAU,CACdr6F,UAAW,SACXmtF,SAAU,CACR,CACE5G,MAAO,IACPp3H,IAAK,IACL+W,SAAU,CACR,CACEqgH,MAAO,KACPC,UAAW,KAIjB,CACED,MAAO,IACPp3H,IAAK,IACL+W,SAAU,CACR,CACEqgH,MAAO,KACPC,UAAW,OAo+Ef6U,EAAe,CACnBr7F,UAAW,OACXumF,MAAO,eACPp3H,IAAK,IACLs5H,SAAU,kDACVviH,SAAU,CACR,CACEqgH,MAAO,OACPC,UAAW,GAEbwH,EAAKH,QAAQwM,EAAS,CAAEr6F,UAAW,WACnC,CACEumF,MAAO,YACPp3H,IAAK,IACLu3H,QAAS,OAEXsH,EAAKhH,oBACLgH,EAAK/G,uBAIT,MAAO,CACLlyI,KAAM,MACNs2I,kBAAkB,EAClB5C,SAAU,CACRiB,QAt/Ea,CACf,QACA,YACA,WACA,UACA,OACA,QACA,WACA,eACA,UACA,KACA,OACA,OACA,WACA,MACA,UACA,OACA,KACA,QACA,UACA,SACA,OACA,OACA,QACA,KACA,MACA,YACA,QACA,QA29EEmM,SAx7Ea,CACf,MACA,UACA,OACA,SACA,YACA,aACA,eACA,mBACA,kBACA,uBACA,aACA,eACA,iBACA,kBACA,cACA,0BACA,oBACA,sBACA,eACA,YACA,cACA,mBACA,yBACA,oBACA,mBACA,cACA,mBACA,uBACA,4BACA,wBACA,mBACA,kBACA,kBACA,WACA,uBACA,aACA,eACA,iBACA,cACA,UACA,eACA,qBACA,cACA,oBACA,mBACA,gBACA,eACA,cACA,uBACA,mBACA,yBACA,oBACA,kBACA,eACA,oBACA,UACA,cACA,yBACA,oBACA,uBACA,aACA,eACA,kBACA,uBACA,gCACA,YACA,eACA,WACA,eACA,yBACA,oBACA,gBACA,wBACA,YACA,aACA,4BACA,aACA,UACA,cACA,YACA,iBACA,uBACA,kBACA,gBACA,gBACA,kBACA,gCACA,sCACA,QACA,QACA,SACA,WACA,gBACA,SACA,qBACA,gBACA,mBACA,cACA,gBACA,QACA,kBACA,wBACA,gBACA,cACA,cACA,cACA,eACA,UACA,aACA,kBACA,mBACA,cACA,uBACA,YACA,UACA,gBACA,WACA,oBACA,aACA,cACA,sBACA,+BACA,cACA,eACA,iBACA,sBACA,eACA,aACA,eACA,cACA,aACA,mBACA,WACA,aACA,WACA,cACA,WACA,eACA,qBACA,OACA,cACA,MACA,UACA,aACA,cACA,eACA,gBACA,iBACA,iBACA,uBACA,iBACA,iBACA,SACA,QACA,eACA,iBACA,OACA,WACA,WACA,SACA,gBACA,qBACA,oBACA,iBACA,iBACA,iBACA,gBACA,gBACA,oBACA,iBACA,gBACA,iBACA,gBACA,iBACA,eACA,kBACA,sBACA,mBACA,aACA,aACA,kBACA,OACA,QACA,MACA,WACA,iBACA,kBACA,aACA,eACA,WACA,gBACA,QACA,WACA,gBACA,oBACA,gBACA,oBACA,mBACA,YACA,YACA,sBACA,YACA,iBACA,oBACA,cACA,kBACA,iBACA,iBACA,eACA,eACA,cACA,0BACA,6BACA,wBACA,yBACA,eACA,kBACA,YACA,gBACA,sCACA,OACA,gBACA,aACA,YACA,oBACA,eACA,0BACA,YACA,aACA,eACA,wBACA,iBACA,WACA,aACA,qBACA,aACA,eACA,iBACA,gBACA,iBACA,kBACA,gBACA,qBACA,gBACA,mBACA,mBACA,aACA,YACA,aACA,cACA,YACA,iBACA,YACA,eACA,eACA,YACA,YACA,SACA,uBACA,sBACA,mBACA,8BACA,kBACA,UACA,UACA,eACA,WACA,aACA,8BACA,oBACA,kBACA,UACA,aACA,YACA,eACA,OACA,iBACA,gBACA,iBACA,kBACA,YACA,qBACA,qBACA,4BACA,qBACA,2BACA,iBACA,kBACA,iBACA,uBACA,gBACA,qBACA,2BACA,oBACA,eACA,aACA,mBACA,yBACA,kBACA,cACA,cACA,eACA,eACA,qBACA,qBACA,gBACA,wBACA,kBACA,aACA,uBACA,cACA,YACA,cACA,gBACA,aACA,gBACA,iBACA,cACA,eACA,cACA,yBACA,gBACA,eACA,UACA,gBACA,kBACA,sBACA,UACA,eACA,gBACA,eACA,cACA,gBACA,aACA,kBACA,aACA,WACA,mBACA,wBACA,kBACA,sBACA,sBACA,uBACA,kBACA,oBACA,uBACA,oBACA,kBACA,gBACA,MACA,QACA,aACA,gBACA,YACA,YACA,eACA,wBACA,mBACA,cACA,eACA,eACA,kBACA,oBACA,qBACA,gBACA,mBACA,cACA,qBACA,gBACA,yBACA,iBACA,eACA,oBACA,aACA,aACA,uBACA,0BACA,qBACA,mBACA,aACA,oBACA,aACA,aACA,gBACA,aACA,gBACA,oBACA,qBACA,OACA,cACA,WACA,UACA,WACA,SACA,mBACA,kBACA,mBACA,gBACA,kBACA,eACA,eACA,sBACA,YACA,mBACA,0BACA,SACA,sBACA,uBACA,sBACA,sBACA,cACA,gBACA,aACA,gBACA,aACA,aACA,aACA,cACA,WACA,iBACA,sBACA,iBACA,UACA,UACA,iBACA,mBACA,oBACA,kBACA,gBACA,mBACA,kBACA,eACA,uBACA,qBACA,uBACA,YACA,oBACA,iBACA,oBACA,aACA,0BACA,eACA,6BACA,yBACA,YACA,mBACA,qBACA,eACA,yBACA,0BACA,yBACA,yBACA,iBACA,uBACA,sBACA,cACA,eACA,cACA,gBACA,iBACA,gBACA,iBACA,gBACA,iBACA,gBACA,iBACA,gBACA,iBACA,gBACA,iBACA,oBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,6BACA,eACA,gBACA,uBACA,yBACA,eACA,uBACA,oBACA,uBACA,wBACA,kBACA,mBACA,mBACA,mBACA,mBACA,eACA,sBACA,gBACA,wBACA,cACA,mBACA,4BACA,uBACA,uBACA,iBACA,yBACA,2BACA,0BACA,yBACA,aACA,wBACA,aACA,WACA,YACA,YACA,WACA,gBACA,iBACA,oBACA,oBACA,gBACA,cACA,WACA,UACA,qBACA,cACA,gBACA,aACA,cACA,YACA,sBACA,mBACA,aACA,UACA,gBACA,gBACA,oBACA,2BACA,cACA,yBACA,qBACA,yBACA,mBACA,gBACA,2BACA,kBACA,sBACA,uBACA,iBACA,iBACA,kBACA,wBACA,8BACA,wBACA,gBACA,mBACA,eACA,cACA,eACA,mBACA,oBACA,kBACA,gBACA,oBACA,sBACA,iBACA,eACA,eACA,aACA,cACA,yBACA,aACA,SACA,SACA,UACA,SACA,OACA,eACA,UACA,gBACA,iBACA,WACA,WACA,mBACA,MACA,qBACA,WACA,eACA,mBACA,qBACA,cACA,uBACA,iBACA,iBACA,eACA,oBACA,cACA,kBACA,aACA,eACA,aACA,gBACA,oBACA,iBACA,SACA,gBACA,yBACA,qBACA,wBACA,wBACA,+BACA,oBACA,0BACA,wBACA,uBACA,iBACA,gBACA,0BACA,0BACA,wBACA,4BACA,cACA,eACA,oBACA,wBACA,WACA,cACA,eACA,+BACA,oBACA,YACA,iBACA,WACA,oBACA,uBACA,0BACA,gBACA,mBACA,aACA,mBACA,kBACA,gBACA,cACA,SACA,qBACA,SACA,cACA,aACA,oBACA,uBACA,mBACA,YACA,gCACA,YACA,YACA,gBACA,uBACA,sBACA,yBACA,uBACA,sBACA,uBACA,uBACA,qBACA,2BACA,mBACA,yBACA,eACA,cACA,gBACA,gCACA,4BACA,yBACA,oBACA,gBACA,eACA,WACA,aACA,cACA,qBACA,eACA,kBACA,SACA,WACA,QACA,WACA,SACA,YACA,SACA,oBACA,WACA,UACA,YACA,cACA,WACA,aACA,YACA,WACA,aACA,WACA,eACA,cACA,gBACA,eACA,SACA,OACA,4BACA,gCACA,2BACA,iCACA,OACA,4BACA,aACA,wBACA,qBACA,mBACA,iBACA,WACA,kBACA,qBACA,eACA,qBACA,uBACA,oBACA,iBACA,iBACA,gBACA,sBACA,gBACA,wBACA,mBACA,+BACA,0BACA,gCACA,kBACA,wBACA,oBACA,gBACA,kBACA,2BACA,iBACA,eACA,qBACA,cACA,eACA,mBACA,0BACA,eACA,kBACA,mBACA,yBACA,gBACA,qBACA,mBACA,gBACA,0BACA,qBACA,qBACA,sBACA,0BACA,mBACA,aACA,WACA,iBACA,kBACA,gBACA,mBACA,WACA,qBACA,oBACA,oBACA,yBACA,oBACA,qBACA,gBACA,iBACA,OACA,mBACA,UACA,SACA,MACA,sBACA,oBACA,eACA,SACA,OACA,UACA,kBACA,YACA,YACA,YACA,aACA,cACA,aACA,sBACA,OACA,UACA,YACA,cACA,mBACA,oBACA,yBACA,SACA,mBACA,oBACA,SACA,OACA,eACA,gBACA,OACA,qBACA,YACA,WACA,cACA,UACA,UACA,QACA,cACA,iBACA,cACA,MACA,cACA,YACA,kBACA,qBACA,uBACA,YACA,WACA,mBACA,kBACA,oBACA,WACA,eACA,aACA,eACA,YACA,kBACA,qBACA,gBACA,qBACA,oBACA,eACA,SACA,YACA,qBACA,kBACA,mBACA,oBACA,gBACA,aACA,aACA,gBACA,WACA,aACA,OACA,WACA,mBACA,oBACA,eACA,eACA,MACA,qBACA,mBACA,gBACA,qBACA,gBACA,kBACA,cACA,sBACA,uBACA,sBACA,0BACA,mBACA,kBACA,gBACA,8BACA,4BACA,wBACA,mBACA,mBACA,yBACA,mBACA,eACA,sBACA,mBACA,WACA,mBACA,+BACA,kBACA,kBACA,0BACA,yBACA,kBACA,wBACA,mBACA,uBACA,kBACA,yCACA,yBACA,gBACA,kBACA,iBACA,uBACA,8BACA,kBACA,sBACA,sBACA,YACA,mBACA,wBACA,mBACA,2BACA,gCACA,aACA,oBACA,iBACA,SACA,eACA,gBACA,oBACA,0BACA,UACA,kBACA,kBACA,gBACA,uBACA,qBACA,wBACA,0BACA,wBACA,sBACA,aACA,0BACA,uBACA,iBACA,YACA,iBACA,eACA,iBACA,eACA,qBACA,gBACA,cACA,SACA,cACA,oBACA,eACA,cACA,gBACA,oBACA,mBACA,iBACA,eACA,gBACA,gBACA,UACA,mBACA,wBACA,iBACA,0BACA,mBACA,iBACA,eACA,mBACA,qBACA,YACA,oBACA,oBACA,eACA,eACA,cACA,qBACA,iBACA,iBACA,oBACA,gBACA,wBACA,gBACA,eACA,mBACA,qBACA,oBACA,0BACA,yBACA,yBACA,uBACA,qBACA,iBACA,mBACA,cACA,kBACA,eACA,qBACA,SACA,YACA,kBACA,aACA,YACA,kBACA,eACA,cACA,oBACA,oBACA,YACA,YACA,2BACA,iBACA,gBACA,cACA,mBACA,mBACA,mBACA,oBACA,iBACA,eACA,qBACA,2BACA,WACA,aACA,eACA,yBACA,qBACA,iBACA,iBACA,mBACA,sBACA,iBACA,UACA,aACA,iBACA,eACA,kBACA,uBACA,mBACA,kBACA,sBACA,sBACA,iBACA,eACA,oBACA,cACA,iBACA,kBACA,cACA,kBACA,mBACA,iBACA,gBACA,yBACA,sBACA,WACA,WACA,aACA,cACA,UACA,OACA,QACA,YACA,iBACA,sBACA,oBACA,UACA,aACA,aACA,SACA,qBACA,kBACA,SACA,QACA,OACA,eACA,kBACA,gBACA,WACA,YACA,eACA,iBACA,YACA,cACA,gBACA,WACA,oBACA,gBACA,aACA,gBACA,aACA,YACA,aACA,WACA,WACA,aACA,mBACA,gBACA,OACA,QACA,YACA,aACA,MACA,cACA,WACA,oBACA,WACA,QACA,kBACA,aACA,KACA,SACA,cACA,qBACA,UACA,WACA,YACA,4BACA,sBACA,aACA,0BACA,eACA,kBACA,YACA,cACA,kBACA,aACA,qBACA,SACA,qBACA,YACA,SACA,oBACA,gBACA,kBACA,sBACA,UACA,wBACA,0BACA,UACA,gBACA,eACA,0BACA,aACA,kBACA,UACA,aACA,YACA,UACA,qBACA,mBACA,kBACA,cACA,iBACA,aACA,aACA,YACA,cACA,iBACA,iBACA,mBACA,oBACA,wBACA,UACA,iBACA,cACA,eACA,oBACA,gBACA,eACA,0BACA,WACA,uBACA,4BACA,cACA,cACA,WACA,YACA,YACA,cACA,eACA,wBACA,kCACA,gBACA,oBACA,QACA,gBACA,eACA,SACA,WACA,iBACA,cACA,WACA,eACA,WACA,aACA,mBACA,sBACA,WACA,0BACA,WACA,mBACA,iBACA,kBACA,mBACA,iBACA,wBACA,4BACA,wBACA,SACA,mBACA,cACA,oBACA,mBACA,iBACA,cACA,mBACA,iBACA,mBACA,yBACA,YACA,mBACA,iBACA,YACA,QACA,qBACA,OACA,SACA,eACA,aACA,aACA,gBACA,uBACA,aACA,aACA,UACA,gBACA,SACA,YACA,WACA,UACA,OACA,aACA,OACA,SACA,aACA,WACA,cACA,QACA,UACA,UACA,eACA,WACA,SACA,WACA,eACA,YACA,iBACA,cACA,aACA,kBACA,cACA,YACA,eACA,oBACA,4BACA,4BACA,oBACA,yBACA,iCACA,iCACA,mBACA,wBACA,gBACA,YACA,iBACA,eACA,aACA,SACA,SACA,WACA,gBACA,SACA,cACA,YACA,UACA,SACA,oBACA,qBACA,kBACA,gCACA,+BACA,yCACA,iCACA,yCACA,mBACA,eACA,iBACA,qBACA,YACA,oBACA,oBACA,YACA,aACA,aACA,mBACA,iBACA,qBACA,yBACA,qBACA,WACA,OACA,cACA,oBACA,qBACA,KACA,cACA,eACA,YACA,WACA,WACA,gBACA,eACA,UACA,kBACA,eACA,wBACA,aACA,kBACA,cACA,mBACA,mBACA,kBACA,aACA,gBACA,qBACA,0BACA,6BACA,kCACA,qBACA,aACA,kBACA,gBACA,cACA,UACA,UACA,YACA,iBACA,UACA,eACA,WACA,OACA,UACA,eACA,aACA,WACA,WACA,eACA,eACA,cACA,aACA,cACA,WACA,WACA,iBACA,mBACA,OACA,eACA,YACA,aACA,SACA,iBACA,cACA,eACA,kBACA,eACA,eACA,gBACA,aACA,SACA,MACA,cACA,aACA,sBACA,SACA,YACA,gBACA,YACA,sBACA,gBACA,qBACA,oBACA,kBACA,0BACA,yBACA,sBACA,kBACA,qBACA,aACA,eACA,gBACA,cACA,oBACA,kBACA,wBACA,cACA,cACA,gBACA,cACA,YACA,iBACA,YACA,eACA,cACA,aACA,aACA,aACA,iBACA,kBACA,MACA,UACA,UACA,aACA,UACA,cACA,YACA,eACA,WACA,aACA,aACA,cACA,aACA,YACA,cACA,gBACA,eACA,cACA,iBACA,kBACA,cACA,aACA,eACA,eACA,mBACA,WACA,WACA,WACA,UACA,YACA,QACA,MACA,aACA,iBACA,gBACA,mBACA,oBACA,oBACA,aACA,cACA,oBACA,mBACA,0BACA,eACA,iBACA,MACA,eACA,qBACA,0BACA,oBACA,YACA,gBACA,YACA,SACA,OACA,iBACA,YACA,cACA,kBACA,eACA,eACA,eACA,kBACA,UACA,WACA,SACA,kBACA,eACA,cACA,OACA,kBACA,YACA,eACA,kBACA,kBACA,mBACA,6BACA,eACA,gBACA,iBACA,wBACA,cACA,mBACA,YACA,eACA,cACA,aACA,cACA,QACA,aACA,aACA,oBACA,oBACA,aACA,MACA,qBACA,eACA,iBACA,kBACA,eACA,YACA,kBACA,kBACA,iBACA,uBACA,uBACA,gBACA,cACA,mBACA,uBACA,uBACA,4BACA,mBACA,oBACA,uBACA,oBACA,mBACA,kBACA,eACA,uBACA,cACA,UACA,UACA,eACA,mBACA,KACA,aACA,WACA,mBACA,QACA,QACA,SACA,cACA,mBACA,YACA,mBACA,mBACA,qBACA,iBACA,QACA,YACA,gBACA,qBACA,SACA,SACA,sBACA,gBACA,aACA,gBACA,SACA,oBACA,aACA,gBACA,cACA,cACA,WACA,cACA,YACA,sBACA,YACA,cACA,cACA,OACA,WACA,wBACA,mBACA,mBACA,iBACA,iBACA,oBACA,iBACA,kBACA,iBACA,kBACA,qBACA,YACA,gBACA,gBACA,eACA,kBACA,kBACA,iBACA,4BACA,gBACA,qBACA,wBACA,WACA,mBACA,iBACA,cACA,mBACA,mBACA,wBACA,mBACA,sBACA,iBACA,uBACA,uBACA,WACA,iBACA,gBACA,iBACA,oBACA,kBACA,MACA,kBACA,qBACA,mBACA,qBACA,0BACA,uBACA,eACA,cACA,OACA,UACA,aACA,SACA,OACA,SACA,SACA,cACA,YACA,aACA,eACA,kBACA,eACA,SACA,gBACA,gBACA,aACA,iBACA,sBACA,uBACA,yBACA,kBACA,eACA,6BACA,mBACA,yBACA,0BACA,sBACA,yBACA,8BACA,+BACA,yBACA,wBACA,iBACA,8BACA,gCACA,2BACA,8BACA,sBACA,8BACA,gCACA,mCACA,mBACA,iBACA,uBACA,sBACA,sBACA,0BACA,+BACA,2BACA,oBACA,qBACA,iBACA,kBACA,qBACA,6BACA,gBACA,kBACA,oBACA,iBACA,aACA,yBACA,wBACA,qBACA,cACA,iBACA,uBACA,kBACA,wBACA,uBACA,iBACA,4BACA,uBACA,0BACA,kBACA,0BACA,4BACA,mBACA,uBACA,mBACA,gBACA,+BACA,aACA,eACA,8BACA,oBACA,qBACA,qBACA,qBACA,kBACA,gBACA,yBACA,SACA,YACA,iBACA,sBACA,SACA,aACA,UACA,iBACA,SACA,mBACA,kBACA,sBACA,iBACA,oBACA,eACA,aACA,UACA,cACA,aACA,kBACA,aACA,QACA,kBACA,eACA,aACA,cACA,kBACA,eACA,QACA,gBACA,YACA,YACA,eACA,YACA,eACA,YACA,oBACA,WACA,eACA,gBACA,8BACA,cACA,uBACA,aACA,UACA,gBACA,MACA,QACA,QACA,YACA,QACA,YACA,aACA,gBACA,aACA,aACA,YACA,kBACA,uBACA,0BACA,SACA,mBACA,qBACA,wBACA,qBACA,iBACA,oBACA,0BACA,eACA,YACA,YACA,iBACA,eACA,eACA,uBACA,eACA,qBACA,gBACA,oBACA,WACA,iBACA,iBACA,mBACA,gBACA,yBACA,0BACA,aACA,kBACA,aACA,MACA,mBACA,oBACA,cACA,sBACA,eACA,sBACA,mBACA,0BACA,2BACA,uBACA,oBACA,kBACA,aACA,yBACA,sBACA,iBACA,UACA,eACA,iBACA,mBACA,cACA,iBACA,kBACA,gBACA,gBACA,eACA,qBACA,uBACA,eACA,oBACA,uBACA,oBACA,cACA,aACA,kBACA,oBACA,qBACA,gBACA,wBACA,sBACA,mBACA,8BACA,iBACA,4BACA,yBACA,oBACA,iBACA,qBACA,mBACA,uBACA,2BACA,qBACA,YACA,aACA,UACA,oBACA,mBACA,iBACA,wBACA,qBACA,yBACA,SACA,eACA,cACA,iBACA,kBACA,+BACA,mCACA,gBACA,uBACA,qBACA,wBACA,kBACA,UACA,mBACA,aACA,iBACA,wBACA,eACA,cACA,iBACA,SACA,uBACA,eACA,mBACA,aACA,YACA,gBACA,iBACA,UACA,eACA,eACA,qBACA,0BACA,uBACA,aACA,mBACA,gBACA,WACA,gBACA,SACA,cACA,oBACA,yBACA,uBACA,cACA,cACA,gBACA,eACA,YACA,kBACA,sBACA,qBACA,gBACA,mBACA,mBACA,2BACA,oBACA,oBACA,aACA,gBACA,mBACA,sBACA,qBACA,wBACA,iBACA,sBACA,iBACA,sBACA,iBACA,sBACA,eACA,oBACA,oBACA,yBACA,eACA,oBACA,kBACA,uBACA,iBACA,sBACA,gBACA,qBACA,gBACA,qBACA,gBACA,qBACA,UACA,aACA,WACA,mBACA,sBACA,mBACA,iBACA,uBACA,UACA,eACA,qBACA,oBACA,0BACA,iBACA,iBACA,mBACA,yBACA,wBACA,gBACA,cACA,WACA,qBACA,oBACA,mBACA,kBACA,oBACA,oBACA,0BACA,yBACA,uBACA,gBACA,eACA,qBACA,WACA,iBACA,cACA,uBACA,qBACA,SACA,YACA,aACA,aACA,YACA,cACA,cACA,kBACA,oBACA,cACA,UACA,aACA,eACA,UACA,iBACA,iBACA,mBACA,oBACA,iBACA,UACA,6BACA,0BACA,2BACA,2BACA,sBACA,oBACA,wBACA,UACA,WACA,eACA,iBACA,aACA,YACA,eACA,aACA,mBACA,eACA,iBACA,mBACA,eACA,sBACA,gBACA,eACA,iBACA,mBACA,UACA,oBACA,iBACA,iBACA,eACA,oBACA,qBACA,gBACA,kBACA,uBACA,iBACA,qBACA,uBACA,iBACA,oBACA,iBACA,kBACA,sBACA,UACA,iBACA,iBACA,oBACA,wBACA,iBACA,aACA,iBACA,cACA,2BACA,eACA,oBACA,oBACA,iBACA,kBACA,cACA,eACA,oBACA,cACA,iBACA,oBACA,kBACA,kBACA,eACA,iBACA,qBACA,kBACA,iCACA,8BACA,gCACA,mBACA,oBACA,cACA,wBACA,4BACA,kBACA,4BACA,kBACA,WACA,uBACA,wBACA,8BACA,yBACA,4BACA,uBACA,2BACA,4BACA,0BACA,wBACA,kBACA,sBACA,oBACA,mBACA,wBACA,qBACA,kBACA,qBACA,yBACA,mBACA,UACA,aACA,eACA,aACA,uBACA,WACA,cACA,WACA,mBACA,qBACA,cACA,qBACA,UACA,UACA,aACA,UACA,yBACA,YACA,eACA,sBACA,sBACA,WACA,WACA,WACA,WACA,aACA,kBACA,iBACA,eACA,eACA,aACA,UACA,YACA,iBACA,gBACA,cACA,cACA,YACA,eACA,gBACA,OACA,WACA,YACA,cACA,oBACA,oBACA,sBACA,gBACA,mBACA,MACA,OACA,SACA,QACA,aACA,WACA,QACA,iBACA,cACA,oBACA,iBACA,iBACA,cACA,0BACA,mBACA,WACA,OACA,cACA,QACA,UACA,eACA,QACA,YACA,cACA,OACA,cACA,SACA,qBACA,OACA,gBACA,UACA,MACA,YACA,cACA,cACA,iBACA,gBACA,iBACA,cACA,cACA,kBACA,eACA,eACA,gBACA,cACA,aACA,sBACA,uBACA,wBACA,wBACA,2BACA,qBACA,sBACA,aACA,gBACA,aACA,gBACA,MACA,kBACA,UACA,mBACA,eACA,oBACA,eACA,gBACA,iBACA,kBACA,kBACA,WACA,mBACA,WACA,aACA,aACA,YACA,WACA,aACA,WACA,QACA,aACA,oBACA,WACA,YACA,mBACA,sBACA,wBACA,OACA,UACA,gBACA,KACA,OACA,iBACA,WACA,eACA,WACA,WACA,YACA,UACA,UACA,UACA,cACA,WACA,UACA,cACA,mBACA,oBACA,cACA,cACA,yBACA,sBACA,uBACA,2BACA,kBACA,oBACA,cACA,iBACA,wBACA,cACA,OACA,cACA,cACA,aACA,QACA,UACA,aACA,gBACA,UACA,WACA,SACA,WACA,WACA,cACA,eACA,YACA,iBACA,cACA,aACA,cACA,YACA,eACA,oBACA,4BACA,4BACA,oBACA,yBACA,iCACA,iCACA,mBACA,gBACA,YACA,eACA,aACA,SACA,YACA,gBACA,mBACA,SACA,YACA,UACA,OACA,WACA,SACA,aACA,cACA,UACA,kBACA,eACA,eACA,kBACA,aACA,UACA,mBACA,eACA,mBACA,kBACA,aACA,kBACA,wBACA,eACA,iBACA,YACA,UACA,YACA,wBACA,QACA,mBACA,aACA,aACA,oBACA,iBACA,iBACA,iBACA,mBACA,8BACA,yBACA,uBACA,oBACA,SACA,YACA,YACA,qBACA,aACA,YACA,kBACA,iBACA,oBACA,mBACA,eACA,yBACA,kBACA,qBACA,qBACA,2BACA,iBACA,mBACA,WACA,iBACA,qBACA,2BACA,UACA,sBACA,cACA,kBACA,eACA,8BACA,2BACA,6BACA,WACA,iBACA,WACA,qBACA,kBACA,OACA,gBACA,YACA,gBACA,eACA,iBACA,aACA,aACA,kBACA,qBACA,oBACA,eACA,QACA,yBACA,0BACA,uBACA,wBACA,oBACA,qBACA,2BACA,sBACA,yBACA,oBACA,wBACA,yBACA,uBACA,qBACA,eACA,mBACA,YACA,iBACA,sBACA,eACA,gBACA,qBACA,kBACA,yBACA,eACA,kBACA,oBACA,yBACA,cACA,kBACA,gBACA,gBACA,sBACA,UACA,cACA,eACA,oBACA,cACA,gBACA,YACA,aACA,OACA,UACA,UACA,UACA,iBACA,YACA,YACA,eACA,qBACA,iBAgCED,QAz9EY,CACd,SACA,WACA,aACA,cACA,cACA,kBACA,OACA,OACA,QACA,UACA,cACA,YACA,eACA,MACA,UACA,QACA,KACA,aACA,aACA,kBACA,YACA,YACA,eACA,YACA,cACA,WACA,iBACA,OACA,SA87EA1vH,SAAU,CACR8nH,EAAKhH,oBACLgH,EAAK/G,qBACL+G,EAAK7G,YAriFQ,CACfnnF,UAAW,WACXumF,MAAO,mBAKQ,CACfvmF,UAAW,QACXumF,MAAO,2CA+hFL8T,EACAgB,GAEF3U,QAAS,CAEP,iBACA,OACA,KACA,IAEA,OAEA,cACA,OACA,QAGN,IpK77EAsH,GAAK4F,iBAAiB,kBqK8gBtB8mE,GA9pBA,SAAa1sE,GACX,MAAMjI,EAAQiI,EAAKjI,MACbuS,EAAetK,EAAKpH,QAAQ,KAAM,KA8blC2R,EAAqB,CACzB,MACA,OACA,YACA,OACA,OACA,MACA,OACA,OACA,UACA,WACA,OACA,MACA,OACA,QACA,YACA,aACA,YACA,aACA,QACA,UACA,MACA,UACA,cACA,QACA,aACA,gBACA,cACA,cACA,iBACA,aACA,aACA,uBACA,aACA,MACA,aACA,OACA,UACA,KACA,MACA,QACA,QACA,MACA,MACA,MACA,YACA,QACA,SACA,eACA,kBACA,kBACA,WACA,iBACA,QACA,OACA,YACA,YACA,aACA,iBACA,UACA,aACA,WACA,WACA,WACA,aACA,MACA,OACA,OACA,aACA,cACA,YACA,kBACA,MACA,MACA,OACA,YACA,kBACA,QACA,OACA,aACA,SACA,QACA,WACA,UACA,WACA,gBA2CIC,EAAYD,EAEZ5D,EAAW,CArff,MACA,OACA,MACA,WACA,QACA,MACA,MACA,MACA,QACA,YACA,wBACA,KACA,aACA,OACA,aACA,KACA,OACA,SACA,gBACA,MACA,QACA,cACA,kBACA,UACA,SACA,SACA,OACA,UACA,OACA,KACA,OACA,SACA,cACA,WACA,OACA,OACA,OACA,UACA,OACA,cACA,YACA,mBACA,QACA,aACA,OACA,QACA,WACA,UACA,UACA,SACA,SACA,YACA,UACA,aACA,WACA,UACA,OACA,OACA,gBACA,MACA,OACA,QACA,YACA,aACA,SACA,QACA,OACA,YACA,UACA,kBACA,eACA,kCACA,eACA,eACA,cACA,iBACA,eACA,oBACA,eACA,eACA,mCACA,eACA,SACA,QACA,OACA,MACA,aACA,MACA,UACA,WACA,UACA,UACA,SACA,SACA,aACA,QACA,WACA,gBACA,aACA,WACA,SACA,OACA,UACA,OACA,UACA,OACA,QACA,MACA,YACA,gBACA,WACA,SACA,SACA,QACA,SACA,OACA,UACA,SACA,MACA,WACA,UACA,QACA,QACA,SACA,cACA,QACA,QACA,MACA,UACA,YACA,OACA,OACA,OACA,WACA,SACA,MACA,SACA,QACA,QACA,WACA,SACA,SACA,OACA,OACA,WACA,KACA,YACA,UACA,QACA,QACA,cACA,SACA,MACA,UACA,YACA,eACA,WACA,OACA,KACA,OACA,aACA,gBACA,cACA,cACA,iBACA,aACA,aACA,uBACA,aACA,MACA,WACA,QACA,aACA,UACA,OACA,UACA,OACA,OACA,aACA,UACA,KACA,QACA,YACA,iBACA,MACA,QACA,QACA,QACA,eACA,kBACA,UACA,MACA,SACA,QACA,SACA,MACA,SACA,MACA,WACA,SACA,QACA,WACA,WACA,UACA,QACA,QACA,MACA,KACA,OACA,YACA,MACA,YACA,QACA,OACA,SACA,UACA,eACA,oBACA,KACA,SACA,MACA,OACA,KACA,MACA,OACA,OACA,KACA,QACA,MACA,QACA,OACA,WACA,UACA,YACA,YACA,UACA,MACA,UACA,eACA,kBACA,kBACA,SACA,UACA,WACA,iBACA,QACA,WACA,YACA,UACA,UACA,YACA,MACA,QACA,OACA,QACA,OACA,YACA,MACA,aACA,cACA,YACA,YACA,aACA,iBACA,UACA,aACA,WACA,WACA,WACA,UACA,SACA,SACA,UACA,SACA,QACA,WACA,SACA,MACA,aACA,OACA,UACA,YACA,QACA,SACA,SACA,SACA,OACA,SACA,YACA,eACA,MACA,OACA,UACA,MACA,OACA,OACA,WACA,OACA,WACA,eACA,MACA,eACA,WACA,aACA,OACA,QACA,SACA,aACA,cACA,cACA,SACA,YACA,kBACA,WACA,MACA,YACA,SACA,cACA,cACA,QACA,cACA,MACA,OACA,OACA,OACA,YACA,gBACA,kBACA,KACA,WACA,YACA,kBACA,cACA,QACA,UACA,OACA,aACA,OACA,WACA,UACA,QACA,SACA,UACA,SACA,SACA,QACA,OACA,QACA,QACA,SACA,WACA,UACA,WACA,YACA,UACA,UACA,aACA,OACA,WACA,QACA,eACA,SACA,OACA,SACA,UACA,OAzXA,MACA,MACA,YACA,OACA,QACA,QACA,OACA,QA6fA9uH,OAAQ6jH,IACA6O,EAAmB5hI,SAAS+yH,IAchCoN,EAAgB,CACpBp0I,MAAOqjI,EAAMxtG,OAAO,KAAMwtG,EAAMR,UAAUiT,GAAY,SACtDhS,UAAW,EACXiC,SAAU,CAAEoN,SAAU2C,IAOxB,SAASC,EAAavrG,GACpB,OAAO64F,EAAMxtG,OACX,KACAwtG,EAAMR,UAAUr4F,EAAKrrC,IAAK62I,GACjBA,EAAGthJ,QAAQ,MAAO,UAE3B,KAEN,CAEE,MAAMuhJ,EAAsB,CAC1B9xH,MAAO,UACPnkB,MAAO+1I,EA7DM,CACb,eACA,cACA,cACA,cACA,WACA,cACA,iBACA,gBACA,cACA,gBACA,gBACA,eACA,cACA,aACA,cACA,kBA8CAjS,UAAW,GAoBb,MAAO,CACLzxI,KAAM,MACNs2I,kBAAkB,EAElB3E,QAAS,WACT+B,SAAU,CACRmE,SAAU,YACVlD,QAvBJ,SAAyBx8F,GAAM0rG,WAC7BA,EAAAC,KAAYA,GACV,IACF,MAAMC,EAAYD,EAElB,OADAD,EAAaA,GAAc,GACpB1rG,EAAKrrC,IAAKsiB,GACXA,EAAKzhB,MAAM,WAAak2I,EAAWjiI,SAASwN,GACvCA,EACE20H,EAAU30H,GACZ,GAAGA,MAEHA,EAGf,CAUQ40H,CAAgBpE,EAAU,CAAEkE,KAAOpkG,GAAMA,EAAEv/C,OAAS,IACtD0gJ,QArnBa,CACf,OACA,QAGA,WAinBEj8I,KAvmBU,CACZ,SACA,SACA,OACA,UACA,OACA,YACA,OACA,OACA,MACA,WACA,UACA,QACA,MACA,UACA,WACA,QACA,QACA,WACA,UACA,OACA,MACA,WACA,OACA,YACA,UACA,UACA,aA6kBEk8I,SAjH4B,CAC9B,kBACA,eACA,kCACA,eACA,eACA,iBACA,mCACA,eACA,eACA,cACA,cACA,eACA,YACA,oBACA,mBAoGA3vH,SAAU,CACR,CACEW,MAAO,OACPnkB,MAAO+1I,EApnBY,CACvB,mBACA,eACA,gBACA,sBAknBEE,EACA7B,EAzEa,CACfjwH,MAAO,WACPnkB,MAAO,uBAxkBM,CACbmkB,MAAO,SACPsmH,SAAU,CACR,CACE5G,MAAO,IACPp3H,IAAK,IACL+W,SAAU,CAAE,CAAExjB,MAAO,UAID,CACxB6jI,MAAO,IACPp3H,IAAK,IACL+W,SAAU,CAAE,CAAExjB,MAAO,QAsoBnBsrI,EAAK5G,cACL4G,EAAK/G,qBACLqR,EA1Ea,CACfzxH,MAAO,WACPnkB,MAAO,gDACP8jI,UAAW,IA2Ef,IrK3gBAwH,GAAK4F,iBAAiB,mBsKiWtB+mE,GAhgBA,SAAc3sE,GACZ,MAAMjI,EAAQiI,EAAKjI,MAoTb60E,EAAgB,CACpB,YACA,kBACA,sBACA,OACA,gBACA,kBACA,WACA,iBACA,cACA,oBACA,wBACA,SACA,aACA,YACA,iBACA,qBACA,iBACA,cACA,UACA,QACA,mBACA,SACA,aACA,iBACA,iBACA,YACA,cACA,uBACA,WACA,oBACA,WACA,cACA,YACA,WACA,oBACA,cACA,oBACA,eACA,wBACA,oBACA,2BACA,kBACA,2BACA,eACA,iBACA,qBACA,yBACA,SACA,gBACA,mBACA,uBACA,iBACA,SACA,gBACA,UACA,cACA,kBACA,WACA,wBACA,0BACA,cACA,aACA,iBACA,YACA,UACA,YACA,UACA,SACA,UACA,oBAGI7gE,EAAgB/L,EAAKpH,QACzB,OACA,OACA,CACEJ,UAAW,EACXtgH,SAAU,CACR,CACEW,MAAO,SACPnkB,MAAO,sBAMTm4M,EAAU,CACdh0L,MAAO,OACP0/G,MAAO,aACPp3H,IAAK,IACL+W,SAAU,CACR,CACExjB,MAAO,iBACPmkB,MAAO,UAETmnH,EAAKhH,sBAIH8zE,EAAoB,CACxB,QACA,QACA,SACA,cAGF,MAAO,CACL/lN,KAAM,OACN8lG,QAAS,CAAE,aACX4tC,SAAU,CACRmE,SAAUoB,EAAK/H,SACfpmH,MAlaW,CACb,YACA,QACA,OACA,aACA,aACA,cACA,aA4ZElmB,KA9YU,CACZ,QACA,QACA,UACA,MACA,OACA,SACA,iBACA,UACA,mBACA,UACA,cACA,aACA,qBACA,SACA,iBACA,0BACA,yBACA,iBACA,gBACA,QA2XE+vI,QA1Ze,CACjB,MACA,KACA,KACA,OACA,QACA,QACA,WACA,UAmZEmM,SAjXc,CAChB,MACA,OACA,QACA,WACA,iBACA,wBACA,eACA,aACA,aACA,OACA,QACA,OACA,QACA,QACA,oBACA,qBACA,kBACA,QACA,OACA,OACA,WACA,qBACA,SACA,MACA,OACA,sBACA,mBACA,0BACA,4BACA,4BACA,OACA,MACA,OACA,eACA,YACA,cACA,gBACA,gBACA,gBACA,0BACA,sBACA,iBACA,MACA,UACA,cACA,cACA,WACA,qBACA,oBACA,UACA,OACA,WACA,cACA,WACA,iBACA,qBACA,cACA,kBACA,eACA,mBACA,MACA,OACA,MACA,OACA,QACA,oBACA,OACA,MACA,OACA,QACA,MACA,OACA,OACA,OACA,UACA,UACA,sBACA,WACA,WACA,OACA,wBACA,eACA,QACA,kBACA,WACA,eACA,gBACA,sBACA,oBACA,qBACA,WACA,MACA,cACA,WACA,UACA,cACA,UACA,WACA,eACA,YACA,UACA,WACA,aACA,SACA,SACA,aACA,cACA,QACA,UACA,QACA,SACA,kBACA,sBACA,uBACA,mBACA,UACA,YACA,MACA,QACA,YACA,kBACA,QACA,YACA,kBACA,eACA,wBACA,gBACA,qBACA,QACA,UACA,iCACA,uBACA,cACA,cACA,oBACA,WACA,aACA,sBACA,eACA,MACA,mBACA,uBACA,oBACA,wBACA,OACA,MACA,6BACA,8BACA,oCACA,oBACA,OACA,QACA,QACA,eACA,eACA,YACA,gBACA,sBACA,UACA,cACA,WACA,eACA,WACA,eACA,gBACA,oBACA,qBACA,iBACA,aACA,iBACA,kBACA,cACA,UACA,MACA,aACA,QACA,oBACA,MACA,QACA,OACA,OACA,KACA,OACA,OACA,UACA,YACA,YACA,YACA,iBACA,gBACA,WACA,OACA,aACA,SACA,YACA,aACA,iBACA,aACA,UACA,mBACA,QACA,MACA,OACA,mBACA,gBACA,4BACA,KACA,UACA,MACA,kBACA,OACA,OACA,UACA,WACA,YACA,mBACA,oBACA,OACA,SACA,mBACA,OACA,UACA,UACA,MACA,MACA,QACA,QACA,4BACA,OACA,MACA,OACA,SACA,aACA,SACA,cACA,cACA,aACA,SACA,YACA,gBACA,YACA,QACA,sBACA,kBACA,WACA,QACA,kBACA,WACA,cACA,kBACA,qBAwHA3vH,SAAU,CACR8nH,EAAKhH,oBACL6zE,EACA7sE,EAAK9G,kBACL6S,EACA,CACElzH,MAAO,WACPnkB,MAAO,kCACP8jI,UAAW,GAEb,CACE9jI,MAAOqjI,EAAMxtG,OAAO,UAAWwtG,EAAMR,UAAUu1E,GAAoB,QACnEryE,SAAUqyE,GAEZ,CACEj0L,MAAO,UACPnkB,MAAO,sBAET,CAEEA,MAAO,CACL,OACAqjI,EAAMR,UAAUq1E,GAChB,WACA,iBAEF/zL,MAAO,CACL,EAAG,WACH,EAAG,YAGP,CAEEA,MAAO,WACP4hH,SAAUmyE,EACVr0E,MAAOR,EAAMxtG,OAAO,MAAOwtG,EAAMR,UAAUq1E,GAAgB,8DAE7D,CAEEr0E,MAAO,CACL,IACA,MACAR,EAAMxtG,OAAOwtG,EAAMR,UAAUq1E,GAAgB,oBAE/C/zL,MAAO,CAAE,EAAG,aAEd,CAEE0/G,MAAO,CACL,IACA,wBACA,YAAcR,EAAMR,UAAUq1E,GAAiB,QAEjD/zL,MAAO,CAAE,EAAG,mBAEd,CAEEA,MAAO,iBACP0/G,MAAO,gEAET,CACE1/G,MAAO,SACPnkB,MAAOqjI,EAAMxtG,OAQX,8DAGA,sCAEFiuG,UAAW,GAEb,CACE3/G,MAAO,SACP0/G,MAAO,IACPp3H,IAAK,MAIb,ItK9VA6+H,GAAK4F,iBAAiB,oBuKpHtBmnE,GAvCA,SAAe/sE,GACb,MAAO,CACLj5I,KAAM,QACN8lG,QAAS,CACP,KACA,OAEFwwC,kBAAkB,EAClB5C,SAAU,4/cACVviH,SAAU,CACR,CACE85B,UAAW,SACXumF,MAAO,mBAET,CACEvmF,UAAW,WACXumF,MAAO,wBACPC,UAAW,GAEb,CACExmF,UAAW,SACXmtF,SAAU,CACR,CAAE5G,MAAO,kBACT,CAAEA,MAAO,iBAIb,CACEvmF,UAAW,WACXmtF,SAAU,CAAE,CAAE5G,MAAO,q5CAGvByH,EAAKpH,QAAQ,iBAAiB,GAC9BoH,EAAKhH,oBACLgH,EAAK/G,sBAGX,IvKuHA+G,GAAK4F,iBAAiB,qBwKvGtBonE,GA1DA,SAAgBhtE,GAqBd,MAAO,CACLj5I,KAAM,eACN8lG,QAAS,CACP,MACA,OACA,OAEFwwC,kBAAkB,EAClB5C,SA3BsB,CACtBmE,SAFsB,oBAGtBlD,QAAS,CACP,SACA,SACA,SAuBFxjH,SAAU,CApBS,CACnB85B,UAAW,OACXumF,MAAO,gBACPC,UAAW,IAEQ,CACnBxmF,UAAW,OACXumF,MAAO,oBACPC,UAAW,IAeTwH,EAAKhH,oBACLgH,EAAK/G,qBACL+G,EAAKpH,QAAQ,WAAY,QACzBoH,EAAK5G,cACL4G,EAAKH,QAAQG,EAAKvH,iBAAkB,CAAEC,QAAS,OAC/CsH,EAAKH,QAAQG,EAAKrH,kBAAmB,CAAED,QAAS,OAChD,CACE1mF,UAAW,SACXumF,MAAO,IACPp3H,IAAK,KAEP,CACE6wC,UAAW,SACXmtF,SAAU,CACR,CACE5G,MAAO,IACPp3H,IAAK,OACLu3H,QAAS,UAMrB,IxK0GAsH,GAAK4F,iBAAiB,yCyK1KtB,MAyKM2F,EAAO,CA3HX,IACA,OACA,UACA,UACA,QACA,QACA,IACA,aACA,OACA,SACA,SACA,UACA,OACA,OACA,KACA,MACA,UACA,MACA,MACA,KACA,KACA,KACA,WACA,aACA,SACA,SACA,OACA,KACA,KACA,KACA,KACA,KACA,KACA,SACA,SACA,OACA,IACA,SACA,MACA,QACA,MACA,MACA,QACA,SACA,KACA,OACA,OACA,OACA,MACA,SACA,KACA,WACA,SACA,IACA,UACA,IACA,QACA,OACA,UACA,SACA,SACA,OACA,SACA,UACA,MACA,QACA,QACA,KACA,WACA,QACA,KACA,QACA,OACA,KACA,KACA,MACA,QAIA,OACA,IACA,SACA,OACA,UACA,MACA,SACA,SACA,UACA,gBACA,sBACA,cACA,mBACA,oBACA,oBACA,UACA,iBACA,UACA,UACA,eACA,WACA,qBACA,SACA,eACA,iBACA,iBACA,OACA,SACA,UACA,QACA,OACA,OACA,UACA,WACA,OACA,OACA,MACA,WACA,QACA,gBACA,YAWIC,EAAiB,CACrB,YACA,cACA,eACA,QACA,cACA,cACA,sBACA,gBACA,eACA,eACA,gBACA,OACA,SACA,QACA,kBACA,aACA,cACA,iBACA,kBACA,UACA,uBACA,mBACA,yBACA,+BACA,aACA,OACA,YACA,SACA,QAEA,YACA,YACA,aACA,cACAt+F,OAAO3K,UAGHkpG,EAAiB,CACrB,SACA,WACA,QACA,UACA,UACA,UACA,UACA,MACA,WACA,OACA,QACA,UACA,QACA,cACA,gBACA,aACA,SACA,QACA,gBACA,eACA,MACA,OACA,eACA,QACA,gBACA,WACA,UACA,KACA,OACA,aACA,eACA,OACA,OACA,aACA,MACA,YACA,UACA,iBACA,eACA,mBACA,cACA,aACA,eACA,WACA,eACA,OACA,oBACA,YACA,aACA,WACA,QACA,OACA,QACA,SACA,gBACA,eACA,QACA,UACA,SACAv+F,OAAO3K,UAGHmpG,EAAkB,CACtB,QACA,WACA,SACA,MACA,aACA,eACA,aACA,gBACA,SACA,OACA,cACA,YACA,UACA,kBACAx+F,OAAO3K,UAEHopG,EAAa,CACjB,eACA,gBACA,cACA,aACA,qBACA,MACA,cACA,YACA,wBACA,kBACA,sBACA,qBACA,sBACA,4BACA,iBACA,uBACA,kBACA,sBACA,wBACA,qBACA,4BACA,aACA,eACA,kBACA,sBACA,aACA,wBACA,wBACA,kBACA,mBACA,mBACA,oBACA,sBACA,wBACA,wBACA,oBACA,kBACA,iBACA,aACA,SACA,eACA,qBACA,mBACA,yBACA,yBACA,yBACA,qBACA,2BACA,2BACA,2BACA,qBACA,qBACA,gBACA,sBACA,4BACA,6BACA,sBACA,sBACA,kBACA,eACA,wBACA,0BACA,eACA,sBACA,sBACA,qBACA,sBACA,qBACA,gBACA,sBACA,oBACA,0BACA,0BACA,0BACA,sBACA,4BACA,4BACA,4BACA,sBACA,sBACA,cACA,oBACA,oBACA,oBACA,gBACA,eACA,qBACA,qBACA,qBACA,iBACA,0BACA,4BACA,eACA,aACA,mBACA,yBACA,0BACA,mBACA,mBACA,eACA,SACA,YACA,uBACA,gBACA,WACA,iBACA,YACA,oBACA,aACA,WACA,aACA,aACA,cACA,eACA,eACA,eACA,cACA,QACA,OACA,YACA,YACA,QACA,sBACA,8BACA,gBACA,kBACA,eACA,eACA,cACA,aACA,cACA,oBACA,oBACA,oBACA,cACA,eACA,UACA,UACA,+BACA,2BACA,gCACA,yBACA,0BACA,YACA,iBACA,iBACA,UACA,qBACA,oBACA,gBACA,cACA,MACA,YACA,aACA,SACA,KACA,KACA,YACA,UACA,oBACA,cACA,oBACA,eACA,OACA,eACA,YACA,SACA,OACA,aACA,iBACA,YACA,YACA,cACA,YACA,QACA,cACA,gBACA,OACA,OACA,eACA,cACA,wBACA,eACA,yBACA,sBACA,eACA,YACA,mBACA,cACA,iBACA,eACA,aACA,iBACA,0BACA,4BACA,uBACA,wBACA,eACA,0BACA,oBACA,0BACA,qBACA,yBACA,uBACA,wBACA,0BACA,cACA,sBACA,MACA,+BACA,6BACA,OACA,YACA,oBACA,iBACA,iBACA,cACA,kBACA,oBACA,WACA,WACA,eACA,iBACA,gBACA,sBACA,wBACA,qBACA,sBACA,SACA,sBACA,wBACA,UACA,OACA,oBACA,kBACA,mBACA,WACA,iBACA,uBACA,cACA,QACA,aACA,cACA,kBACA,oBACA,eACA,mBACA,qBACA,YACA,kBACA,gBACA,eACA,UACA,OACA,iBACA,iBACA,aACA,cACA,mBACA,aACA,mBACA,sBACA,kBACA,SACA,eACA,mBACA,qBACA,gBACA,gBACA,oBACA,sBACA,cACA,eACA,aACA,cACA,SACA,aACA,aACA,eACA,QACA,OACA,cACA,mBACA,qBACA,qBACA,oBACA,qBACA,oBACA,YACA,iBACA,aACA,YACA,cACA,gBACA,cACA,YACA,YACA,oBACA,aACA,aACA,aACA,iBACA,aACA,kBACA,YACA,iBACA,aACA,kBACA,YACA,iBACA,WACA,YACA,WACA,YACA,SACA,OACA,SACA,aACA,kBACA,SACA,gBACA,kBACA,cACA,kBACA,gBACA,UACA,QACA,UACA,UACA,gBACA,iBACA,gBACA,gBACA,WACA,kBACA,iBACA,uBACA,kBACA,gBACA,aACA,aACA,UACA,sBACA,4BACA,6BACA,wBACA,wBACA,UACA,gBACA,oBACA,sBACA,iBACA,iBACA,qBACA,uBACA,eACA,gBACA,cACA,OACA,mBACA,oBACA,oBACA,cACA,QACA,cACA,eACA,cACA,qBACA,gBACA,cACA,aACA,iBACA,WACA,kBACA,sBACA,qBACA,SACA,IACA,SACA,OACA,aACA,cACA,QACA,SACA,UACA,aACA,gBACA,QACA,kBACA,gBACA,sBACA,0BACA,4BACA,uBACA,uBACA,2BACA,6BACA,qBACA,sBACA,oBACA,iBACA,uBACA,2BACA,6BACA,wBACA,wBACA,4BACA,8BACA,sBACA,uBACA,qBACA,oBACA,mBACA,mBACA,kBACA,uBACA,uBACA,kBACA,mBACA,kBACA,wBACA,eACA,gBACA,kBACA,QACA,WACA,MACA,aACA,eACA,SACA,mBACA,oBACA,iBACA,kBACA,oBACA,iBACA,eACA,WACA,eACA,aACA,iBACA,kBACA,cACA,uBACA,kBACA,wBACA,uBACA,uBACA,2BACA,wBACA,4BACA,gBACA,sBACA,yBACA,sBACA,cACA,eACA,mBACA,gBACA,iBACA,cACA,mBACA,iBACA,wBACA,0BACA,YACA,iBACA,kBACA,iBACA,MACA,eACA,YACA,gBACA,mBACA,kBACA,aACA,sBACA,mBACA,sBACA,sBACA,6BACA,YACA,eACA,cACA,cACA,gBACA,iBACA,gBACA,qBACA,sBACA,qBACA,uBACA,aACA,gBACA,iBACA,eACA,cACA,cACA,aACA,eACA,eACA,cACA,uBACA,SACA,QACA,cACA,aACA,eACA,YACA,eACA,IACA,IACA,UACA,QACAz+F,OAAO3K,iBA4LT0qK,GAhLA,SAAgBjtE,GACd,MAAM6L,EAvzBM,CAAC7L,IACN,CACL8L,UAAW,CACTjzH,MAAO,OACP0/G,MAAO,cAETwT,cAAe/L,EAAK/G,qBACpB+S,SAAU,CACRnzH,MAAO,SACP0/G,MAAO,mDAET0T,kBAAmB,CACjBj6F,UAAW,WACXumF,MAAO,gBAET2T,wBAAyB,CACvBrzH,MAAO,gBACP0/G,MAAO,KACPp3H,IAAK,KACLu3H,QAAS,IACTxgH,SAAU,CACR8nH,EAAKvH,iBACLuH,EAAKrH,oBAGTwT,gBAAiB,CACftzH,MAAO,SACP0/G,MAAOyH,EAAK7H,UAAY,kGASxBK,UAAW,GAEb4T,aAAc,CACZp6F,UAAW,OACXumF,MAAO,+BA+wBGmB,CAAMsG,GAGditD,EAAW,CACfj7I,UAAW,WACXumF,MAAO,MAAQyH,EAAK/H,UAoBhBi1E,EAAoB,oBAiB1B,MAAO,CACLnmN,KAAM,SACN8lG,QAAS,CAAE,QACXwwC,kBAAkB,EAClB5C,SAAU,iBACV/B,QAAS,IAnBK,CACd,MACA,iBACA,cACA,cACA,cACA,IACA,OACA,SACA,SACA,MACA,KAQuBnjH,KAAK,KAAO,IACnC2C,SAAU,CAGR8nH,EAAKrH,kBACLq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OACA,MACA,QACA,KACA,SACA,WACA,QACA,SACA,QACA,QACA,kBACA,WACA,KACA,KACA,WACA,cACA,OACA,MACA,QACA,WACA,cACA,cACA,OACA,WACA,WACA,WACA,UACA,UACA,kBACA,SACA,iBACA,UACA,WACA,gBACA,SACA,SACA,WACA,WACA,SACA,MACA,OACA,SACA,SACA,YACA,QACA,SACA,SACA,QACA,QACA,OACA,MACA,YACA,kBACA,oBACA,UACA,MACA,OACA,QACA,QACA,WAOIgzE,EAAW,CACf,QACA,MACA,QAIIC,EAA0B,CAC9B,aACA,gBACA,aACA,OACA,YACA,OACA,SAKIC,EAAqB,CACzB,gBACA,UACA,aACA,QACA,UACA,SACA,SACA,QACA,UACA,eACA,YACA,YACA,MACA,gBACA,WACA,QACA,YACA,kBACA,YAIIC,EAAW,CACf,MACA,MACA,MACA,SACA,mBACA,aACA,OACA,aACA,YACA,4BACA,MACA,MACA,cACA,eACA,eACA,eACA,sBACA,QACA,WACA,gBACA,WACA,SACA,OACA,oCACA,YACA,OACA,gBACA,iBACA,uBACA,2BACA,oBACA,aACA,0BACA,OAIIC,EAAet2E,EACnB,oBACA,kBACA,iBACA,iBACA,iBACA,mCACA,kBACA,kBACA,kBACA,kBACA,kBACA,kBACA,kBACA,kBACA,kBACA,kBACA,kBACA,YAIIu2E,EAAoBv2E,EACxBs2E,EACA,kBACA,kBACA,kBACA,kBACA,mBAMI1rB,EAAW53J,EAAOsjL,EAAcC,EAAmB,KAGnDC,EAAiBx2E,EACrB,YACA,uDACA,yDACA,yDACA,kBACA,+DACA,yDACA,+BACA,yDACA,yDACA,gCASIy2E,EAAsBz2E,EAC1Bw2E,EACA,KACA,0DAIIE,EAAa1jL,EAAOwjL,EAAgBC,EAAqB,KAGzDE,EAAiB3jL,EAAO,QAASyjL,EAAqB,KAKtDG,EAAoB,CACxB,WACA,cACA5jL,EAAO,eAAgBgtG,EAAO,QAAS,QAAS,KAAM,MACtD,oBACA,kBACA,sBACA,WACA,eACA,SACA,gBACA,WACA,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H,EAAK5H,YAAc,MAC1BI,UAAW,GAEbmW,EACAC,EArJ0B,CAC1B58F,UAAW,SACXwmF,UAAW,EACXD,MAAO,IACPp3H,IAAK,IACL+W,SAAU,CACR,CACExjB,MAAO,KACPmkB,MAAO,cACP2/G,UAAW,KA8IfuR,GAGI8E,EAAc,IAAKnV,GAKzB,OAJAmV,EAAYn7I,MACZm7I,EAAY78I,KAAKw8I,GACjBE,EAAgBx2H,SAAW22H,EAEpB,CACL9nJ,KAAM,OACNs2I,kBAAkB,EAClBxwC,QAAS,CAAE,OACX30E,SAAUwhH,EAEd,I7KnCAsG,GAAK4F,iBAAiB,kB8KjItBqqE,GAtCA,SAAajwE,GACX,MAAO,CACLj5I,KAAM,yBACNs2I,kBAAkB,EAClBnlH,SAAU,CACR8nH,EAAK9G,kBAEL,CACElnF,UAAW,OACXmtF,SAAU,CACR,CAAE5G,MAAO,wBACT,CAAEA,MAAO,qBAIb,CACEA,MAAO,OACPp3H,IAAK,aACL8gI,YAAa,OACbzJ,UAAW,GAGb,CACExmF,UAAW,SACXumF,MAAO,YAGT,CACEvmF,UAAW,SACXmtF,SAAU,CACR,CAAE5G,MAAO,OACT,CAAEA,MAAO,cAKnB,I9KoIAyH,GAAK4F,iBAAiB,kB+KctBsqE,GAtLA,SAAalwE,GACX,MAAMjI,EAAQiI,EAAKjI,MACbo4E,EAAY,yBAEZloE,EAAS,CACbj2F,UAAW,SACXmtF,SAAU,CACRa,EAAK3G,mBACL2G,EAAK5G,gBA6HT,MAAO,CACLryI,KAAM,MACN8lG,QAAS,CAAE,MACX4tC,SA5He,CACf,QACA,SACA,QACA,QACA,cACA,cACA,YACA,eACA,mBACA,eACA,aACA,UACA,SACA,QACA,QACA,KACA,OACA,QACA,QACA,SACA,WACA,MACA,OACA,WACA,MACA,QACA,OACA,OACA,OACA,OACA,WACA,aACA,QACA,OACA,YACA,WACA,QACA,MACA,UACA,SACA,OACA,OACA,SACA,UACA,OACA,KACA,OACA,OACA,SACA,OACA,aACA,aACA,YACA,aACA,OACA,aACA,OACA,YACA,aACA,cACA,cACA,aACA,UACA,WACA,WACA,SACA,SACA,SACA,YACA,OACA,UACA,SACA,MACA,cACA,cACA,WACA,kBACA,OACA,OACA,MACA,OACA,UACA,SACA,WACA,YACA,SACA,SACA,OACA,OACA,OACA,MACA,SACA,SACA,QACA,SACA,QACA,SACA,gBACA,kBACA,sBACA,0BACA,qBACA,sBACA,UACA,UACA,OACA,OACA,KACA,QACA,UACA,SACA,QACA,SACA,UACA,QACA,WACA,QACA,SAOAviH,SAAU,CACR8nH,EAAKpH,QAAQ,YAAa,KAC1BoH,EAAKpH,QAAQ,YAAa,KAC1B,CACE2B,cAAe,OACfp5H,IAAK,QACL47H,YAAY,EACZ7kH,SAAU,CACR,CACE85B,UAAW,QACXumF,MAAO,kDACPp3H,IAAK,eACL49H,gBAAgB,EAChBhC,YAAY,KAIlB,CACE/qF,UAAW,WACXmtF,SAAU,CACR,CAAE5G,MAAOR,EAAMxtG,OACb,KACAwtG,EAAMT,SAAS,MACf64E,EACA,MACAA,EACA,OAEF,CACE53E,MAAO,2CACPp3H,IAAK,MACL+W,SAAU,CAAE+vH,MAIlB,CACEj2F,UAAW,SACX95B,SAAU,CAAE8nH,EAAK1H,kBACjB6G,SAAU,CAAEa,EAAKH,QAAQG,EAAKrH,kBAAmB,CAAED,QAAS,SAE9DuP,GAGN,I/KXAjI,GAAK4F,iBAAiB,qBgLrGtBwqE,GApEA,SAAgBpwE,GACd,MAAM6G,EAAQ,CACZ,OACA,OACA,MACA,MACA,MACA,SACA,SACA,UAkBF,MAAO,CACL9/I,KAAM,SACN0zI,SAAU,CACRiB,QAnBa,CACf,YACA,QACA,UACA,SACA,OACA,UACA,YACA,OACA,SACA,MACA,OACA,MACA,WACA,YAME/vI,KAAMk7I,EACNe,QAAS,cAEX1vH,SAAU,CACR8nH,EAAKrH,kBACLqH,EAAK7G,YACL6G,EAAKhH,oBACLgH,EAAK/G,qBACL,CACEjnF,UAAW,QACXuoF,cAAe,gCACfp5H,IAAK,KACLu3H,QAAS,KACTxgH,SAAU,CACR8nH,EAAKH,QAAQG,EAAKzG,WAAY,CAE5BwB,OAAQ,CACNgE,gBAAgB,EAChBhC,YAAY,OAIpB,CACExE,MAAO,yBACPkC,SAAU,CAAE9uI,KAAM,IACbk7I,EACH,MACA,OACA,QAEF1lI,IAAK,IACL+W,SAAU,CAAE,UAIpB,IhLwGA8nH,GAAK4F,iBAAiB,iBiLPtByqE,GApKA,SAAYrwE,GACV,MAAMswE,EAAO,CACXt+J,UAAW,SACXumF,MAAO,cACPC,UAAW,GAEP+3E,EAAU,CACdv+J,UAAW,SACXumF,MAAO,YA4GT,MAAO,CACLxxI,KAAM,KACN0zI,SAAU,CACRiB,QAtFa,CACf,QACA,MACA,SACA,MACA,QACA,QACA,OACA,MACA,MACA,YACA,SACA,KACA,KACA,MACA,SACA,OACA,MACA,SACA,UACA,aACA,OACA,MACA,KACA,QACA,MACA,KACA,MACA,mBACA,OACA,MACA,UACA,SACA,SACA,KACA,WACA,QACA,OACA,MACA,QACA,MACA,SACA,OACA,OACA,KACA,KACA,KACA,cACA,cACA,KACA,KACA,aACA,YACA,SACA,OACA,IACA,IACA,IACA,IACA,IACA,IACA,SACA,SACA,UACA,UACA,OACA,OACA,KACA,OAmBEkM,QAjBa,CACf,KACA,MACA,YACA,OACA,OACA,SACA,UACA,QACA,OACA,UASA1vH,SAAU,CAhHG,CACb85B,UAAW,WACXumF,MAAO,2HAEPp3H,IAAK,MACL+W,SAAU,CACR,OACAo4L,EACAC,IAGS,CACXv+J,UAAW,WACXumF,MAAO,6CACPp3H,IAAK,MACL+W,SAAU,CACR,OACAo4L,EACAtwE,EAAKrH,kBACL43E,IAgGA,CACEv+J,UAAW,UACXumF,MAAO,8BAET,CAEEvmF,UAAW,UACXumF,MAAO,iCAET,CAGEvmF,UAAW,UACXumF,MAAO,yDAET,CAEEvmF,UAAW,SACXumF,MAAO,6DACPC,UAAW,GAEbwH,EAAKpH,QAAQ,KAAM,QACnBoH,EAAKpH,QAAQ,IAAK,QAClBoH,EAAKpH,QAAQ,QAAS,KACtBoH,EAAKrH,kBACL,CACE3mF,UAAW,SACXumF,MAAO,IACPp3H,IAAK,KAEP6+H,EAAK5G,cACL,CACEpnF,UAAW,WACXumF,MAAO,qBAIf,IjLUAyH,GAAK4F,iBAAiB,mBkLgFtB4qE,GA1PA,SAAcxwE,GACZ,MAAMjI,EAAQiI,EAAKjI,MACb04E,EAAiB,CACrB,eACA,UACA,gBACA,YACA,QACA,WACA,eACA,oBACA,aACA,QACA,OACA,OACA,aACA,SACA,WACA,cACA,YACA,aACA,YACA,WACA,aACA,cACA,eACA,UACA,aACA,cACA,aACA,MACA,MACA,SACA,SACA,SACA,QACA,gBACA,SACA,aACA,SACA,uBACA,SA2EF,IAAIC,EAAY,CACd,QACA,aACA,QACA,QACA,aACA,KACA,QACA,UACA,SACA,QACA,MACA,aACA,OACA,KACA,SACA,UACA,QACA,UACA,MACA,YACA,QACA,uBACA,cACA,MACA,WACA,QAGFA,EAAYA,EAAUnmL,OAAOmmL,EAAU78M,OAAS,MAAM4gB,MAEtD,MAAMs1H,EAAS,CACblxH,MAAO,SACPsmH,SAAU,CACR,CACE5G,MAAO,IACPp3H,IAAK,KAEP,CACEo3H,MAAO,IACPp3H,IAAK,OAKL8mI,EAAS,CACbpvH,MAAO,SACPnkB,MAAO,OAGHg0I,EAAS,CACbnQ,MAAO,KACPp3H,IAAK,KACL23H,cAAc,EACdiE,YAAY,EACZ7kH,SAAU,CACR6xH,EACA9B,IAKEuC,EAAY,CAChBjQ,cAAek2E,EAAel7L,KAAK,KACnCklH,SAAU,CAAE1zI,KAAM0pN,GAClBj4E,UAAW,EACXtgH,SAAU,CAAEwwH,IAGRiqD,EAAS,CACbj+L,MAAO,qBACP+nI,WAAY,cACZjE,UAAW,EACXtgH,SAAU,CACR,CACExjB,MAAO,eACP+lI,SApJU,CACd,MACA,aACA,cACA,QACA,aACA,SACA,mBACA,eACA,gBACA,kBACA,WACA,OACA,cACA,UACA,SACA,eACA,YACA,gBACA,SACA,QACA,SACA,cACA,sBACA,kBACA,cACA,kBACA,cACA,wBACA,gBACA,cACA,mBACA,WACA,eACA,aACA,OACA,cACA,OACA,gBACA,OACA,SACA,cACA,QACA,MACA,WACA,mBACA,QACA,QACA,gBACA,MACA,SACA,UACA,UACA,QACA,QACA,OACA,OACA,YACA,QACA,YACA,gBACA,QACA,QACA,cACA,OACA,MACA,QACA,aACA,YACA,kBAoFIk2E,EAAW,CAACC,GAAYp4E,gBACrB,CACLiE,WAAY,CACV,EAAG,eACH,EAAG,QAELjE,UAAWA,GAAa,EACxBzB,SAAU,eACVwB,MAAO,CACL,MACA,MACAR,EAAMR,UAAUq5E,IAElBzvM,IAAK,MACLs5H,SAAU,KACVviH,SAAU,CACRy6K,EACAnoD,EACAT,EACA9B,KAMA4oE,EAAMF,EAASD,EAAW,CAAEl4E,UAAW,IACvCs4E,EAAaH,EAAS,CAFN,WAEyB,CAAEn4E,UAAW,IAE5D,MAAO,CACLzxI,KAAM,OACN8lG,QAAS,CAAE,YACXwwC,kBAAkB,EAClB4E,YAAa,MACb/pH,SAAU,CACR8nH,EAAKpH,QAAQ,MAAO,OACpBi4E,EACAC,EACA,CACE9+J,UAAW,oBACXumF,MAAO,OACPp3H,IAAK,OACL+W,SAAU,CACR,OACAy6K,EACAnoD,EACAT,EACA9B,KAKV,IlL7EAjI,GAAK4F,iBAAiB,6CmLpLtB,MAAM3N,EAAW,2BACX0O,EAAW,CACf,KACA,KACA,KACA,KACA,MACA,QACA,UACA,MACA,MACA,WACA,KACA,SACA,OACA,OACA,QACA,QACA,aACA,OACA,QACA,OACA,UACA,MACA,SACA,WACA,SACA,SACA,MACA,QACA,QACA,QAIA,WACA,QACA,QACA,SACA,SACA,OACA,SACA,UAEA,SAEIC,EAAW,CACf,OACA,QACA,OACA,YACA,MACA,YAIIC,EAAQ,CAEZ,SACA,WACA,UACA,SAEA,OACA,OACA,SACA,SAEA,SACA,SAEA,QACA,eACA,eACA,YACA,aACA,oBACA,aACA,aACA,cACA,cACA,gBACA,iBAEA,MACA,MACA,UACA,UAEA,cACA,oBACA,UACA,WACA,OAEA,UACA,YACA,oBACA,gBAEA,UACA,QAEA,OAEA,eAGIC,EAAc,CAClB,QACA,YACA,gBACA,aACA,iBACA,cACA,YACA,YAGIC,EAAmB,CACvB,cACA,aACA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qB,CACzB,QACA,QACA,UACA,WACA,SACA,YACA,YACA,MACA,SACA,SACA,cACA,MACA,UACA,YACA,MACA,MACA,SACA,UACA,QACA,QACA,iBACA,cACA,OACA,YACA,SACA,OACA,QACA,MACA,OACA,aACA,OACA,MACA,MACA,UACA,QACA,aACA,MACA,QACA,WACA,SACA,UACA,YACA,OACA,SACA,QACA,WACA,iBACA,UACA,SACA,QACA,MACA,QACA,WACA,MACA,OACA,MACA,MACA,SACA,SACA,QACA,YACA,MACA,QACA,QACA,QACA,OACA,OACA,MACA,WACA,OACA,UACA,MACA,eACA,cACA,MACA,eACA,MACA,QACA,OACA,MACA,WACA,QACA,MACA,OACA,UACA,OACA,OACA,gBACA,MACA,WACA,OACA,OACA,OACA,SACA,OACA,OAwFF,MAAO,CACL1qN,KAAM,WACN8lG,QAAS,CAAE,OACXwwC,kBAAkB,EAClB5C,SAAU,CACRiB,QAjEa,CACf,OACA,QACA,QACA,MACA,KACA,OACA,QACA,UACA,gBACA,OACA,MACA,OACA,OACA,WACA,KACA,OACA,OACA,KACA,QACA,SACA,WACA,MACA,UACA,WACA,MACA,MACA,SACA,YACA,QACA,MACA,SACA,OACA,MACA,OACA,MACA,QACA,OACA,OACA,MACA,KACA,SACA,KACA,KACA,MACA,MACA,MACA,mBACA,kBACA,UACA,WACA,KACA,KACA,QACA,QACA,OACA,SACA,QASEmM,SA5FqB,CACvB,SACA,WACA,UAEA,eACA,2BACA,2BACA,4BAqFED,QA3Ea,CACf,OACA,QACA,OACA,UACA,UAwEAlP,QAAS,KACTxgH,SAAU,CArFU,CACpBqgH,MAAOR,EAAMxtG,OAAOwtG,EAAMR,UAAUk6E,GAAqB,WAEzDj5E,UAAW,EACXiC,SAAU,CAAEoN,SAAU4pE,IAmFpBzxE,EAAKH,QAAQG,EAAKrH,kBAAmB,CAAEzgH,SAAU,CAAE,CAAEqgH,MAAO,SAC5DyH,EAAKpH,QACH,IACA,IACA,CAAEJ,UAAW,IAEfwH,EAAK5G,eAGX,ItLjCA4G,GAAK4F,iBAAiB,4BuLjKtB8rE,GAdA,SAAsB1xE,GACpB,MAAO,CACLj5I,KAAM,mBACNk7I,YAAa,MACb/pH,SAAU,CACR,CACEqgH,MAAO,KACPp3H,IAAK,KACL8gI,YAAa,aAIrB,IvLoKAjC,GAAK4F,iBAAiB,sBwL4WtB+rE,GA5hBA,SAAiB3xE,GACf,MAAMjI,EAAQiI,EAAKjI,MA2cb65E,EAAa,CACjB,iBACA,aACA,kBACA,qBACA,0BACA,SACA,yBACA,kBACA,kBACA,kBACA,OACA,QACA,eACA,gBACA,QACA,QACA,SACA,UACA,OACA,sBACA,SACA,WACA,YACA,oBACA,QACA,eAGF,MAAO,CACL7qN,KAAM,UACN8lG,QAAS,CACP,IACA,KACA,OAEFwwC,kBAAkB,EAClB5C,SA/ee,CACfmE,SAAU,qBACVlD,QAAS,CACP,YACA,QACA,SACA,cACA,YACA,eACA,MACA,SACA,SACA,SACA,YACA,SACA,QACA,OACA,OACA,SACA,MACA,QACA,QACA,SACA,SACA,OACA,OACA,QACA,QACA,OACA,UACA,UACA,QACA,WACA,OACA,SACA,QACA,aACA,UACA,WACA,QACA,aACA,aACA,QACA,WACA,UACA,WACA,SACA,UACA,OACA,KACA,OACA,OACA,MACA,UACA,aACA,WACA,cACA,YACA,cACA,cACA,WACA,eACA,YACA,aACA,eACA,aACA,cACA,aACA,cACA,WACA,UACA,OACA,QACA,aACA,SACA,SACA,UACA,SACA,QACA,cACA,MACA,QACA,UACA,UACA,OACA,WACA,WACA,aACA,SACA,SACA,SACA,SACA,KACA,MACA,SACA,cACA,eACA,aACA,UACA,SACA,SACA,UACA,UACA,QACA,QACA,SACA,WACA,MACA,UACA,eACA,YACA,YACA,OACA,WACA,YACA,QACA,MACA,UACA,UACA,QACA,aACA,QACA,UACA,cACA,UACA,SACA,UACA,SACA,OACA,UACA,UACA,MACA,WACA,OACA,MACA,kBACA,MACA,SACA,SACA,KACA,SACA,UACA,SACA,YACA,OACA,UACA,YACA,WACA,UACA,WACA,YACA,QACA,QACA,WACA,SACA,sBACA,qBACA,OACA,OACA,QACA,WACA,eACA,QACA,OACA,WACA,MACA,MACA,YACA,UACA,SACA,WACA,SACA,QACA,QACA,QACA,WACA,WACA,WACA,eACA,aACA,UACA,eACA,WACA,WACA,WACA,YACA,gBACA,SACA,QACA,OACA,QACA,UACA,YACA,SACA,SACA,SACA,UACA,UACA,SACA,QACA,UACA,UACA,iBACA,iBACA,QACA,SACA,OACA,OACA,aACA,OACA,gBACA,WACA,OACA,UACA,UACA,MACA,OACA,OACA,SACA,QACA,SACA,OACA,UACA,QACA,SACA,UACA,WACA,QACA,aACA,UACA,MACA,QACA,MACA,WACA,UACA,OACA,OACA,aACA,OACA,OACA,QACA,QACA,QACA,WACA,OACA,OACA,SACA,MACA,OACA,OAEFkM,QAAS,CAAE,QACXC,SAAU,CACR,UACA,QACA,QACA,SACA,SACA,WACA,QACA,YACA,QACA,kBACA,cACA,mBACA,QACA,UACA,QACA,QACA,SACA,cACA,cACA,mBACA,QACA,YACA,YACA,cACA,gBACA,gBACA,sBACA,aACA,iBACA,iBACA,iBACA,oBACA,eACA,WACA,QACA,WACA,aACA,aACA,gBACA,eACA,eACA,oBACA,gBACA,iBACA,wBACA,QACA,UACA,QACA,aACA,eACA,eACA,gBACA,iBACA,WACA,oBACA,kBACA,gBACA,oBACA,YACA,uBACA,QACA,OACA,aACA,SACA,MACA,SACA,OACA,QACA,OACA,SACA,QACA,OACA,OACA,OACA,aACA,UACA,aACA,SACA,WACA,cACA,SACA,QACA,QACA,QACA,QACA,QACA,SACA,SACA,QACA,QACA,QACA,SACA,SACA,SACA,aACA,WACA,SACA,QACA,UACA,mBACA,eACA,oBACA,eACA,gBACA,UACA,gBACA,gBACA,YACA,UACA,mBACA,oBACA,kBACA,mBACA,kBACA,mBACA,iBACA,kBACA,SACA,UACA,YACA,mBACA,oBACA,kBACA,mBACA,kBACA,mBACA,iBACA,kBACA,UACA,WACA,YACA,YACA,YACA,UACA,WACA,WACA,WACA,SACA,YACA,YACA,aACA,kBACA,YACA,UACA,aACA,aACA,eACA,kBACA,UACA,UACA,UACA,WACA,YACA,YACA,YACA,aACA,YACA,WACA,WACA,aACA,gBACA,gBACA,kBACA,UACA,YACA,aACA,aACA,aACA,WACA,YACA,YACA,YACA,UACA,WACA,WACA,WACA,UACA,SACA,SACA,UACA,QACA,SACA,UACA,WACA,WACA,WACA,YACA,aACA,aACA,aACA,WACA,YACA,SACA,UACA,SACA,UACA,UACA,SACA,YA6CF3vH,SAAU,CACR8nH,EAAK/G,qBACL+G,EAAKhH,oBACLgH,EAAKrH,kBACL,CACE9/G,MAAO,SACPX,SAAU,CAAE8nH,EAAK1H,kBACjB6G,SAAU,CACR,CAAE5G,MAAO,2CACT,CAAEA,MAAO,wCACT,CACEA,MAAO,iBACPC,UAAW,KAKjB,CACE3/G,MAAO,WACPsmH,SAAU,CACR,CAAE5G,MAAO,0BACT,CACEA,MAAO,UACPC,UAAW,KAIjB,CACE3/G,MAAO,oBACPnkB,MAAOqjI,EAAMxtG,OAAO,IAAKwtG,EAAMR,OAtEnC,WACA,cAuEE,CACE1+G,MAAO,OACP0/G,MAAOR,EAAMxtG,OAAO,IAAKwtG,EAAMR,UAAUq6E,IACzCzwM,IAAK,cACL67H,WAAW,EACXvC,SAAUm3E,IAIlB,IxLzWA5xE,GAAK4F,iBAAiB,mByL6BtBisE,GA9MA,SAAc7xE,GAIZ,MAAMkrD,EAAa,cACbC,EAAc,YAAcD,EAM5B/yD,EAAY,OAFO+yD,sBAAqFC,EAE5F,MALSD,EAAa,OAASA,EAAa,MAAaC,EAKzD,MAmKlB,MAAO,CACLpkM,KAAM,OACNs2I,kBAAkB,EAClB5C,SAAU,CACRiB,QArKa,CACf,MACA,SACA,QACA,QACA,MACA,MACA,eACA,QACA,SACA,SACA,mBACA,YACA,QACA,QACA,OACA,SACA,MACA,OACA,YACA,gBACA,WACA,UACA,QACA,aACA,SACA,UACA,OACA,QACA,MACA,SACA,OACA,WACA,OACA,MACA,QACA,WACA,WACA,UACA,QACA,UACA,KACA,SACA,KACA,WACA,QACA,KACA,QACA,UACA,UACA,UACA,OACA,MACA,MACA,OACA,MACA,OACA,MACA,MACA,OACA,KACA,KACA,OACA,KACA,SACA,MACA,UACA,YACA,OACA,YACA,YACA,UACA,WACA,YACA,OACA,QACA,SACA,WACA,SACA,UACA,MACA,SACA,WACA,qBACA,SACA,MACA,MACA,SACA,WACA,WACA,SACA,SACA,MACA,MACA,MACA,MACA,SACA,UACA,OACA,KACA,YACA,OACA,aACA,QACA,QACA,MACA,WACA,OACA,QACA,QACA,QACA,OACA,OACA,QACA,OACA,OACA,OAkDEmM,SAhDc,CAChB,UACA,MACA,YACA,UACA,OACA,eACA,UACA,WACA,SACA,aACA,iBACA,mBACA,YACA,mBACA,WACA,SACA,iBACA,iBACA,aACA,oBACA,sBACA,aACA,oBACA,WACA,cACA,eAuBED,QArBa,CAEf,QACA,OACA,OACA,UACA,QACA,UAEA,OACA,OACA,OACA,UAWAlP,QAAS,KACTxgH,SAAU,CACR8nH,EAAK/G,qBACL+G,EAAKpH,QAAQ,KAAM,KACnBoH,EAAKrH,kBACL,CACE3mF,UAAW,SACXumF,MAAOJ,EACPK,UAAW,GAEb,CACExmF,UAAW,SACXumF,MAAO,wBACPrgH,SAAU,CAAE8nH,EAAK1H,mBAEnB,CACEtmF,UAAW,SACXumF,MAAO,4BACPrgH,SAAU,CAAE8nH,EAAK1H,oBAIzB,IzL1BA0H,GAAK4F,iBAAiB,kB0L3DtBksE,GAxHA,SAAa9xE,GACX,MAAO,CACLj5I,KAAM,aACN0zI,SAAU,CACRmE,SAAU,WACVlD,QAAA,mwLAoBAmM,SAAA,+nEAqCFnP,QAAS,IACTxgH,SAAU,CACR8nH,EAAK7G,YACL,CACEnnF,UAAW,SACXumF,MAAO,IACPp3H,IAAK,IACLu3H,QAAS,OAaX,CACE1mF,UAAW,SACXumF,MAAO,wBAETyH,EAAKpH,QAAQ,IAAK,KAElB,CACE5mF,UAAW,WACXumF,MAAO,uBAET,CACEA,MAAO,CACL,2BACA,MACAyH,EAAK/H,UAEPjmF,UAAW,CACT,EAAG,UACH,EAAG,SAEL7wC,IAAK,IACLq3H,UAAW,EACXtgH,SAAU,CACR,CACE85B,UAAW,SACXumF,MAAO,MACPp3H,IAAK,SAIX,CACE6wC,UAAW,SACXumF,MAAO,aAIf,I1L8DAyH,GAAK4F,iBAAiB,mB2LlDtBmsE,GAjIA,SAAc/xE,GACZA,EAAKjI,MACL,MAAMgU,EAAgB/L,EAAKpH,QAAQ,MAAO,OA0G1C,OAzGAmT,EAAc7zH,SAASlmB,KAAK,QAyGrB,CACLjL,KAAM,cACN0zI,SAAU,CACRmE,SAAU,SACVlD,QA1GQ,CACV,UACA,QACA,KACA,QACA,WACA,OACA,gBACA,OACA,OACA,OACA,OACA,MACA,SACA,OACA,aACA,aACA,YACA,YACA,YACA,aACA,YACA,SACA,KACA,SACA,QACA,OACA,SACA,cACA,cACA,SACA,MACA,MACA,SACA,QACA,SACA,SACA,SACA,aACA,YACA,QACA,QACA,YACA,OACA,OACA,gBA+DAxjH,SAAU,CA9GS8nH,EAAKpH,QAAQ,KAAM,KAgHpCmT,EApBiB,CACnBr3I,MAAO,CACL,mBACA,MACA,KAEFs9C,UAAW,CACT,EAAG,UACH,EAAG,aAtCU,CACfA,UAAW,WACXumF,MAAO,YAGM,CACb7jI,MAAO,gBACPs9C,UAAW,cACXwmF,UAAW,GApBc,CACzBD,MAAO,CACL,8BACA,MACA,aAEFvmF,UAAW,CACT,EAAG,UACH,EAAG,mBA2DHguF,EAAKrH,kBArCI,CAEXjkI,MAAO,0BACPs9C,UAAW,QAGW,CACtBA,UAAW,UAEXt9C,MAAO,qZAhBM,CACbs9C,UAAW,SACXwmF,UAAW,EAEX9jI,MAAO,oNA8CX,I3LqDAsrI,GAAK4F,iBAAiB,mB4LgHtBosE,GAnSA,SAAchyE,GACZ,MAAMjI,EAAQiI,EAAKjI,MACbE,EAAW,cACX0O,EAAW,CACf,KACA,QACA,QACA,YACA,WACA,OACA,MACA,UACA,KACA,SACA,KAC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KpH,QACH,IACA,IACA,CAAEJ,UAAW,IAEf,CACExmF,UAAW,SACXmtF,SAAU,CAER,CACE5G,MAAO,uHAEPC,UAAW,GAIb,CACED,MAAO,uBACPC,UAAW,GAIb,CAAED,MAAO,oGAGT,CAAEA,MAAO,+EAIbyH,EAAKrH,kBACL,CACE3mF,UAAW,SACXmtF,SAAU,CAER,CACE5G,MAAO,IACPp3H,IAAK,YAGP,CACEo3H,MAAO,IACPp3H,IAAK,aAGTq3H,UAAW,GAEb,CACExmF,UAAW,SACXmtF,SAAU,CAER,CAAE5G,MAAO,oDAET,CAAEA,MAAO,gCAEXC,UAAW,GAGb,CACExmF,UAAW,QACXumF,MAAO,UACPC,UAAW,GAGb,CACExmF,UAAW,QACXumF,MAAO,OACPC,UAAW,GAEb,CACExmF,UAAW,OACXumF,MAAO,kBAIf,I7LyCAyH,GAAK4F,iBAAiB,iB8LatB2sE,GArMA,SAAYvyE,GACV,MAoIM2G,EAAW,CACf/H,SAAU,yBACVlD,QAtIU,CACV,KACA,OACA,OACA,KACA,QACA,QACA,MACA,OACA,SACA,OACA,KACA,KACA,QACA,OACA,KACA,OACA,WACA,UACA,OACA,OACA,OACA,UACA,SACA,QACA,SACA,UACA,QACA,QA2GAkM,QARe,CACf,OACA,QACA,OAMAC,SA1GgB,CAChB,KACA,MACA,MACA,MACA,KACA,MACA,MACA,MACA,OACA,QACA,OACA,OACA,MACA,MACA,MACA,OACA,OACA,OACA,MACA,QACA,MACA,OACA,QACA,QACA,KACA,KACA,cACA,aACA,YACA,eACA,WACA,OACA,QACA,cACA,cACA,QACA,WACA,UACA,WACA,UACA,cACA,QACA,aACA,aACA,eACA,oBACA,UACA,WACA,WACA,YACA,eACA,eACA,gBACA,YACA,YACA,aACA,YACA,SACA,UACA,SACA,OACA,UACA,UACA,UACA,WACA,QACA,aACA,WACA,UACA,OACA,WACA,WACA,iBAiCoBt9G,OA/BE,CACtB,eACA,UACA,eACA,SACA,UACA,UACA,YACA,YACA,UACA,gBACA,gBACA,aACA,gBACA,gBACA,SACA,YACA,WACA,SACA,SACA,YAcIioL,EAAoB,CACxBxgK,UAAW,SACXumF,MAAO,IACPp3H,IAAK,IACLu3H,QAAS,OAiBL+5E,EAAS,CACbl4E,cAAe,SACfp5H,IAAK,IACLs5H,SAAUkM,EACVzuH,SAAU,CAAEs6L,IAER3pE,EAAsB,CAC1B72F,UAAW,WACXumF,MAAO,gBACPsE,aAAa,EACb17H,IAAK,KACL+W,SAAU,CACR8nH,EAAKH,QAAQG,EAAKzG,WAAY,CAAEwB,OAAQ,CACtCgE,gBAAgB,EAChBtE,SAAUkM,OAIhB,MAAO,CACL5/I,KAAM,KACN8lG,QAAS,CAAE,OACX4tC,SAAUkM,EACVzuH,SAAU,CACR8nH,EAAKhH,oBACLgH,EAAK/G,qBACLu5E,EAxCsB,CACxBxgK,UAAW,SACXumF,MAAO,IACPp3H,IAAK,IACLu3H,QAAS,OAEO,CAChB1mF,UAAW,SACXumF,MAAO,KACPp3H,IAAK,MAkCH0nI,EACA4pE,EAjCiB,CACnBzgK,UAAW,SACXumF,MAAO,0DAiCLyH,EAAK7G,aAGX,I9LVA6G,GAAK4F,iBAAiB,qB+LuKtB8sE,GA3VA,SAAgBC,GAwUd,MAAO,CACL5rN,KAAM,SACN8lG,QAAS,CACP,QACA,KACA,OAEFwwC,kBAAkB,EAClB3E,QAAS,0CACT+B,SAAU,CACRmE,SAAU,2BACVlD,QAjVa,CACf,SACA,SACA,YACA,iBACA,WACA,cACA,QACA,UACA,YACA,WACA,WACA,UACA,iBACA,oBACA,kBACA,iBACA,SACA,qBACA,WACA,qBACA,UACA,aACA,MACA,aACA,YACA,UACA,mBACA,iBACA,SACA,YACA,aACA,UACA,SACA,SACA,WACA,WACA,WACA,MACA,KACA,KACA,MACA,QACA,QACA,QACA,KACA,SACA,KACA,OACA,OACA,WACA,UACA,SACA,QACA,OACA,OACA,MACA,WACA,OACA,SACA,YACA,aACA,WACA,QACA,WACA,QACA,OACA,QACA,YACA,SACA,OACA,aACA,MACA,QACA,MACA,KACA,KACA,QACA,YACA,WACA,KACA,QACA,KACA,WACA,OACA,MACA,QACA,SACA,SACA,OACA,UACA,QACA,SACA,OACA,SACA,UAmPE/vI,KA9OU,CACZ,OACA,gBACA,OACA,YACA,WACA,UACA,UACA,YACA,iBACA,yBACA,OACA,eACA,mBACA,mBACA,cACA,UACA,aACA,WACA,YACA,gBACA,WACA,eACA,YACA,UACA,aACA,kBACA,eACA,YACA,WACA,cACA,cACA,mBACA,UACA,YACA,sBACA,WACA,cACA,aACA,UACA,YACA,QACA,WACA,YACA,aACA,wBACA,qBACA,UACA,SACA,WACA,UACA,wBACA,mBACA,iBACA,mBACA,kBACA,qBACA,uBACA,sBAqLEi8I,QAlLa,CACf,KACA,KACA,KACA,KACA,KACA,KACA,KACA,SACA,UACA,eACA,uBACA,cACA,cACA,sBACA,WACA,aACA,qBACA,cACA,sBACA,QAgKA1vH,SA3Be,CA/EL,CACV85B,UAAW,WACXumF,MAAO,eApDQ,CACfvmF,UAAW,WACXmtF,SAAU,CACR,CACE5G,MAAO,WACPp3H,IAAK,6IAEP,CACEo3H,MAAO,SACPp3H,IAAK,qEAEP,CACEo3H,MAAO,UACPp3H,IAAK,4EAEP,CACEo3H,MAAO,QACPp3H,IAAK,KACL47H,YAAY,GAEd,CACExE,MAAO,QACPp3H,IAAK,KACL47H,YAAY,GAGd,CAAExE,MAAO,+2DACT,CACEA,MAAO,WACPp3H,IAAK,KACL47H,YAAY,GAEd,CACExE,MAAO,SACPp3H,IAAK,sEAEP,CACEo3H,MAAO,uCACPp3H,IAAK,KACL47H,YAAY,KAsBH,CACb/qF,UAAW,SACXmtF,SAAU,CACR,CACE5G,MAAO,IACPp3H,IAAK,IACL+W,SAAU,CACR,CACEqgH,MAAO,KACPC,UAAW,KAIjB,CACED,MAAO,IACPp3H,IAAK,IACL+W,SAAU,CACR,CACEqgH,MAAO,KACPC,UAAW,OAzBN,CACbxmF,UAAW,SACXumF,MAAO,uEACPC,UAAW,GAkCG,CACdxmF,UAAW,UACXumF,MAAO,MACPp3H,IAAK,MACLq3H,UAAW,GACXtgH,SAAU,CACR,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","x_google_ignoreList":[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,257,258,259,260,261,262,263,264,265,266,267,268,269,270,271,272,273,274,275,276,277,278,279,280,281,282,283,284,285,286,287,288,289,290,291,292,293,294,295,296,297,298,299,300,301,302,303,304,305,306,307,308,309,310,311,312,313,314,315,316,317,318,319,320,321,322,323,324,325,326,327,328,329,330,331,332,333,334,335,336,337,338,339,340,341,342,343,344,345,346,347,348,349,350,351,352,353,354,355,356,357,358,359,360,361,362,363,364,365,366,367,368,369,370,371,372,373,374,375,376,377,378,379,380,381,382,383,384,385,386,387,388,389,390,391,392,393,394,395,396,397,398,399,400,401,402,403,404,405,406,407,408,409,410,411,412,413,414,415,416,417,418,419,420,421,422,423,424,425,426,427,428,429,430,431,432,433,434,435,436,437,438,439,440,441,442,443,444,445,446,447,448,449,450,451,452,453,454,455,456,457,458,459,460,461,462,463,464,465,466,467,468,469,470,471,472,473,485,486,487,488,489,490,491,492,493,494,495,496,497,498,499,500,501,502,503,504,505,506,507,508,509,510,511,512,513,514,515,516,517,518,519,520,521,522,523,524,525,526,527,528,529,530,531,532,533,534,535,536,537,538,539,540,541,542,543,544,545,546,547,548,549,550,551,552,553,554,555,556,557,558,559,560,561,562,563,564,565,566,567,568,569,570,571,572,573,574,575,576,577,578,579,580,581,582,583,584,585,586,587,588,589,590,591,592,593,594,595,596,597,598,599,600,601,602,603,604,605,606,607,608,609,610,611,612,613,614,615,616,617,618,619,620,621,622,623,624,625,626,627,628,629,630,631,632,633,634,635,636,637,638,639,640,641,642,643,644,645,646,647,648,649,650,651,652,653,654,655,656,657,658,659,660,661,662,663,664,665,666,667,668,669,670,671,672,673,674,675,676,677,678,679,680,681,682,683,684,685,686,687,688,689,690,691,692,693,694,695,696,697,698,699,700,701,702,703,704,705,706,707,708,709,710,711,712,713,714,715,716,717,718,719,720,721,722,723,724,725,726,727,728,729,730,731,732,733,734,735,736,737,738,739,740,741,742,743,744,745,746,747,748,749,750,751,752,753,754,755,756,757,758,759,760,761,762,763,764,765,766,767,768,769,770,771,772,790,791,792,793,794,795,796,797,798,799,800,801,802,803,804,805,806,807,808,809,810,811,812,813,814,815,816,817,818,819,820,821,822,823,824,825,826,827,828,829,830,831,832,833,834,835,836,837,838,839,840,841,842,843,844,845,846,847,848,849,850,851,852,853,854,855,856,857,858,859,860,861,862,863,864,865,866,867,868,869,870,871,872,873,874,875,876,877,878,879,880,881,882,883,884,885,886,887,888,889,890,891,892,893,894,895,896,897,898,899,900,901,902,903,904,905,906,907,908,909,910,911,912,913,914,915,916,917,918,919,920,921,922,923,924,925,926,927,928,929,930,931,932,933,934,935,936,937,938,939,940,941,942,943,944,945,946,947,948,949,950,951,952,953,954,955,956,957,958,959,960,961,962,963,964,965,966,967,968,969,970,971,972,973,974,975,976,977,978,979,980,981,982,983,984,985,986,987,988,989,990,991,992,993,994,995,996,997,998,999,1000,1001,1002,1003,1004,1005,1006,1007,1008,1009,1010,1011,1012,1013,1014,1015,1016,1017,1018,1019,1020,1021,1022,1023,1024,1025,1026,1027,1028,1029,1030,1031,1032,1033,1034,1035,1036,1037,1038,1039,1040,1041,1042,1043,1044,1045,1046,1047,1048,1049,1050,1051,1052,1053,1054,1055,1056,1057,1058,1059,1060,1061,1062,1063,1064,1065,1066,1067,1068,1069,1070,1071,1072,1073,1074,1075,1076,1077,1078,1079,1080,1081,1082,1083,1084,1085,1086,1087,1088,1089,1090,1091,1092,1093,1094,1095,1096,1097,1098,1099,1100,1101,1102,1103,1104,1105,1106,1107,1108,1109,1110,1111,1112,1113,1114,1115,1116,1117,1118,1119,1120,1121,1122,1123,1124,1125,1126,1127,1128,1129,1130,1131,1132,1133,1134,1135,1136,1137,1138,1139,1140,1141,1142,1143,1144,1145,1146,1147,1148,1149,1150,1151,1152,1153,1154,1155,1156,1157,1158,1159,1160,1161,1162,1163,1164,1165,1166,1167,1168,1169,1170,1171,1172,1173,1174,1175,1176,1177,1178,1179,1180,1181,1182,1183,1184,1185,1186,1187,1188,1189,1190,1191,1192,1193,1194,1195,1196,1197,1198,1199,1200,1201,1202,1203,1204,1205,1206,1207,1208,1209,1210,1211,1212,1213,1214,1215,1216,1217,1218,1219,1220,1221,1222,1223,1224,1225,1226,1227,1228,1229,1230,1231,1232,1233,1234,1235,1236,1237,1238,1239,1240,1241,1242,1243,1244,1245,1246,1247,1248,1249,1250,1251,1252,1253,1254,1255,1256,1257,1258,1259,1260,1261,1262,1263,1264,1265,1266,1267,1268,1269,1270,1271,1272,1273,1274,1275,1276,1277,1278,1279,1280,1281,1282,1283,1284,1285,1286,1287,1288,1289,1290,1291,1292,1293,1294,1295,1296,1297,1298,1299,1300,1301,1302,1303,1304,1305,1306,1307,1308,1309,1310,1311,1312,1313,1314,1315,1316,1317,1318,1319,1320,1321,1322,1323,1324,1325,1326,1327,1328,1329,1330,1331,1332,1333,1334,1335,1336,1337,1338,1339,1340,1341,1342,1343,1344,1345,1346,1347,1348,1349,1350,1351,1352,1353,1354,1355,1356,1357,1358,1359,1360,1361,1362,1363,1364,1365,1366,1367,1368,1369,1370,1371,1372,1373,1374,1375,1376,1377,1378,1379,1380,1381,1382,1383,1384,1385,1386,1387,1388,1389,1390,1391,1392,1393,1394,1395,1396,1397,1398,1399,1400,1401,1402,1403,1404,1405,1406,1407,1408,1409,1410,1411,1412,1413,1414,1415,1416,1417,1418,1419,1420,1421,1422,1423,1424,1425,1426,1427,1428,1429,1430,1431,1432,1433,1434,1435,1436,1437,1438,1439,1440,1441,1442,1443,1444,1445,1446,1447,1448,1449,1450,1451,1452,1453,1454,1455,1456,1457,1458,1459,1460,1461,1462,1463,1464,1465,1466,1467,1468,1469,1470,1471,1472,1473,1474,1475,1476,1477,1478,1479,1480,1481,1482,1483,1484,1485,1486,1487,1488,1489,1490,1491,1492,1493,1494,1495,1496,1497,1498,1499,1500,1501,1502,1503,1504,1505,1506,1507,1508,1509,1510,1511,1512,1513,1514,1515,1516,1517,1518,1519,1520,1521,1522,1523,1524,1525,1526,1527,1528,1529,1530,1531,1532,1533,1534,1535,1536,1537,1538,1539,1540,1541,1542,1543,1544,1545,1546,1547,1548,1549,1550,1551,1552,1553,1554,1555,1556,1557,1558,1559,1560,1561,1562,1563,1564,1565,1566,1567,1568,1569,1570,1571,1572,1573,1574,1575,1576,1577,1578,1579,1580,1581,1582,1583,1584,1585,1586,1587,1588,1589,1590,1591,1592,1593,1594,1595,1596,1597,1598,1599,1600,1601,1602,1603,1604,1605,1606,1607,1608,1609,1610,1611,1612,1613,1614,1615,1616,1617,1618,1619,1620,1621,1622,1623,1624,1625,1626,1627,1628,1629,1630,1631,1632,1633,1634,1635,1636,1637,1638,1639,1640,1641,1642,1643,1644,1645,1646,1647,1648,1649,1650,1651,1652,1653,1654,1655,1656,1657,1658,1659,1660,1661,1662,1663,1664,1665,1666,1667,1668,1669,1670,1671,1672,1673,1674,1675,1676,1677,1678,1679,1680,1681,1682,1683,1684,1685,1686,1687,1688,1689,1690,1691,1692,1693,1694,1695,1696,1697,1698,1699,1700,1701,1702,1703,1704,1705,1706,1707,1708,1709,1710,1711,1712,1713,1714,1715,1716,1717,1718,1719,1720,1721,1722,1723,1724,1725,1726,1727,1728,1729,1730,1731,1732,1733,1734,1735,1736,1737,1738,1739,1740,1741,1742,1743,1744,1745,1746,1747,1748,1749,1750,1752,1753,1754,1755,1756,1776,1777,1778,1779,1780,1781,1782,1783,1784,1785,1786,1787,1788,1789,1790,1791,1792,1793,1794,1795,1796,1797,1798,1799,1800,1801,1802,1803,1804,1805,1806,1807,1808,1809,1810,1811,1812,1813,1814,1815,1816,1817,1818,1819,1820,1821,1822,1823,1824,1825,1826,1827,1828,1829,1830,1831,1832,1833,1834,1835,1836,1837,1838,1839,1840,1841,1842,1843,1844,1845,1846,1847,1848,1849,1850,1851,1852,1853,1854,1855,1856,1857,1858,1859,1860,1861,1862,1863,1864,1865,1866,1867,1868,1869,1870,1871,1872,1873,1874,1875,1876,1877,1878,1879,1880,1881,1882,1883,1884,1885,1886,1887,1888,1889,1890,1891,1892,1893,1894,1895,1896,1897,1898,1899,1900,1901,1902,1903,1904,1905,1906,1907,1908,1909,1910,1911,1912,1913,1914,1915,1916,1917,1918,1919,1920,1921,1922,1923,1924,1925,1926,1927,1928,1929,1930,1931,1932,1933,1934,1935,1936,1937,1938,1939,1940,1941,1942,1943,1944,1945,1946,1947,1948,1949,1950,1951,1952,1953,1954,1955,1956,1957,1958,1959,1960,1961,1962,1963,1964,1965,1966,1967,1968,1969,1970,1971,1972,1973,1974,1975]}